{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": { "pycharm": { "name": "#%%\n" }, "slideshow": { "slide_type": "skip" } }, "outputs": [ { "data": { "text/html": [ "\n", "
\n", "\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%%html\n", "\n", "
\n", "" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "pycharm": { "name": "#%%\n" }, "slideshow": { "slide_type": "skip" } }, "outputs": [], "source": [ "%%capture\n", "%load_ext autoreload\n", "%autoreload 2\n", "%matplotlib inline\n", "import sys\n", "sys.path.append(\"..\")\n", "import statnlpbook.util as util\n", "import statnlpbook.sequence as seq\n", "from statnlpbook.gmb import load_gmb_dataset\n", "import pandas as pd\n", "import matplotlib\n", "import warnings\n", "warnings.filterwarnings('ignore')\n", "matplotlib.rcParams['figure.figsize'] = (8.0, 5.0)\n", "from collections import defaultdict, Counter\n", "from random import random\n", "\n", "from IPython.display import Image" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "skip" } }, "source": [ "\n", "$$\n", "\\newcommand{\\Xs}{\\mathcal{X}}\n", "\\newcommand{\\Ys}{\\mathcal{Y}}\n", "\\newcommand{\\y}{\\mathbf{y}}\n", "\\newcommand{\\balpha}{\\boldsymbol{\\alpha}}\n", "\\newcommand{\\bbeta}{\\boldsymbol{\\beta}}\n", "\\newcommand{\\aligns}{\\mathbf{a}}\n", "\\newcommand{\\align}{a}\n", "\\newcommand{\\source}{\\mathbf{s}}\n", "\\newcommand{\\target}{\\mathbf{t}}\n", "\\newcommand{\\ssource}{s}\n", "\\newcommand{\\starget}{t}\n", "\\newcommand{\\repr}{\\mathbf{f}}\n", "\\newcommand{\\repry}{\\mathbf{g}}\n", "\\newcommand{\\x}{\\mathbf{x}}\n", "\\newcommand{\\prob}{p}\n", "\\newcommand{\\bar}{\\,|\\,}\n", "\\newcommand{\\vocab}{V}\n", "\\newcommand{\\params}{\\boldsymbol{\\theta}}\n", "\\newcommand{\\param}{\\theta}\n", "\\DeclareMathOperator{\\perplexity}{PP}\n", "\\DeclareMathOperator{\\argmax}{argmax}\n", "\\DeclareMathOperator{\\argmin}{argmin}\n", "\\newcommand{\\train}{\\mathcal{D}}\n", "\\newcommand{\\counts}[2]{\\#_{#1}(#2) }\n", "\\newcommand{\\length}[1]{\\text{length}(#1) }\n", "\\newcommand{\\indi}{\\mathbb{I}}\n", "$$" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "pycharm": { "name": "#%%\n" }, "slideshow": { "slide_type": "skip" } }, "outputs": [], "source": [ "%load_ext tikzmagic" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Sequence Labelling" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "+ POS tagging\n", "+ Log-linear models\n", "+ IOB encoding\n", "+ Named entity recognition\n", "+ Evaluating sequence labelers\n", "+ Maximum-entropy Markov models\n", "+ Conditional random fields\n", "+ Beam search" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Sequence Labelling\n", "\n", "+ Assigning exactly one label to each element in a sequence\n", "\n", "+ In context of RNNs or other sequence models, example of **one-to-one** paradigm\n", "\n", "
\n", "\n", "\n", "(In the example: Universal Semantic Tags from [Abzianidze and Bos (2017)](https://www.aclweb.org/anthology/W17-6901.pdf))" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Parts of speech (POS)\n", "\n", "- Group words with **similar grammatical properties**\n", "- [Penn Treebank](https://www.ling.upenn.edu/courses/Fall_2003/ling001/penn_treebank_pos.html) is the most commonly used POS tag set for English\n", " - Has 36 POS tags and 12 other tags (for punctuation and currency symbols)\n", " - For example, distinguishes four types of nouns and six types of verbs\n", "\n", "| | | |\n", "|-|-|-|\n", "| **NN** | noun, singular or mass | *cat, rain* |\n", "| **NNS** | noun, plural | *cats, tables* |\n", "| **NNP** | proper noun, singular | *John, IBM* |\n", "| **NNPS** | proper noun, plural | *Muslims, Philippines* |\n", "\n", "\n", "- Granularity of tags can differ" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "## Task: POS tagging\n", "\n", "Assign each word in a sentence its **part-of-speech (POS) tag**.\n", "\n", "| 1 | 2 | 3 | 4 | 5 | 6 | 7 |\n", "|-|-|-|-|-|-|-|\n", "| I | predict | that | it | will | rain | tonight |\n", "| PRP | VBP | IN | PRP | MD | VB | NN |" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" }, "slideshow": { "slide_type": "subslide" } }, "source": [ "## Example\n", "\n", "Let's look at the [GMB (Groningen Meaning Bank) dataset](https://www.kaggle.com/shoumikgoswami/annotated-gmb-corpus/), annotated with the Penn Treebank tag set\n" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "pycharm": { "name": "#%%\n" }, "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
012345678910111213
0TheymarchedfromtheHousesofParliamenttoarallyinHydePark.
1PRPVBDINDTNNSINNNTODTNNINNNPNNP.
\n", "
" ], "text/plain": [ " 0 1 2 3 4 5 6 7 8 9 10 11 \\\n", "0 They marched from the Houses of Parliament to a rally in Hyde \n", "1 PRP VBD IN DT NNS IN NN TO DT NN IN NNP \n", "\n", " 12 13 \n", "0 Park . \n", "1 NNP . " ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "tokens, pos, ents = load_gmb_dataset('../data/gmb/GMB_dataset_utf8.txt')\n", "\n", "pd.DataFrame([tokens[2], pos[2]])" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "pycharm": { "name": "#%%\n" }, "slideshow": { "slide_type": "skip" } }, "outputs": [], "source": [ "examples = {}\n", "counts = Counter(tag for sent in pos for tag in sent)\n", "words = defaultdict(set)\n", "for x_s, y_s in zip(tokens, pos):\n", " for i, (x, y) in enumerate(zip(x_s, y_s)):\n", " if (y not in examples) or (random() > 0.97):\n", " examples[y] = [x_s[j] + \"/\" + y_s[j] if i == j else x_s[j] for j in range(max(i-2,0),min(i+3,len(x_s)))]\n", " words[y].add(x)\n", "sorted_tags = sorted(counts.items(),key=lambda x:-x[1])\n", "sorted_tags_with_examples = [(t,c,len(words[t]),\" \".join(examples[t])) for t,c in sorted_tags]\n", "\n", "sorted_tags_table = pd.DataFrame(sorted_tags_with_examples, columns=['Tag','Count','Unique Tokens','Example'])" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "pycharm": { "name": "#%%\n" }, "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
TagCountUnique TokensExample
0NN93072087's special tribunal/NN has filed
1NNP81892069the facility Saturday/NNP .
2IN775994actions play into/IN the hands
3DT631040Both/DT Eritrea and
4JJ48751214says the ousted/JJ dictator has
5NNS48031102has threatened sanctions/NNS against both
6.29923as well ./.
7VBD2429470Mr. Annan said/VBD he has
8VBN2060588fighter were killed/VBN , when
9,19531Jack Hooper ,/, the deputy
\n", "
" ], "text/plain": [ " Tag Count Unique Tokens Example\n", "0 NN 9307 2087 's special tribunal/NN has filed\n", "1 NNP 8189 2069 the facility Saturday/NNP .\n", "2 IN 7759 94 actions play into/IN the hands\n", "3 DT 6310 40 Both/DT Eritrea and\n", "4 JJ 4875 1214 says the ousted/JJ dictator has\n", "5 NNS 4803 1102 has threatened sanctions/NNS against both\n", "6 . 2992 3 as well ./.\n", "7 VBD 2429 470 Mr. Annan said/VBD he has\n", "8 VBN 2060 588 fighter were killed/VBN , when\n", "9 , 1953 1 Jack Hooper ,/, the deputy" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sorted_tags_table[:10]" ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.xticks(rotation=45, fontsize=7)\n", "plt.bar(sorted(counts.keys(), key=counts.get), sorted(counts.values()))" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" }, "slideshow": { "slide_type": "slide" } }, "source": [ "## Sequence Labelling as Structured Prediction\n", "\n", "* Input Space $\\Xs$: sequences of items to label\n", "* Output Space $\\Ys$: sequences of output labels\n", "* Model: $s_{\\params}(\\x,\\y)$\n", "* Prediction: $\\argmax_\\y s_{\\params}(\\x,\\y)$" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" }, "scrolled": true, "slideshow": { "slide_type": "subslide" } }, "source": [ "## Conditional Models\n", "Model probability distributions over label sequences $\\y$ conditioned on input sequences $\\x$\n", "\n", "$$\n", "s_{\\params}(\\x,\\y) = \\prob_\\params(\\y|\\x)\n", "$$\n", "\n", "* Just like the conditional models from the [text classification](doc_classify_slides_short.ipynb) chapter\n", "\n", "* But the label space is *exponential* (as a function of sequence length)!\n", "\n", "* Most unique $\\y$ are never even seen in training\n", "\n", "* Might be useful to **break it up**?" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" }, "scrolled": true, "slideshow": { "slide_type": "subslide" } }, "source": [ "## Local Models / Classifiers\n", "A **fully factorised** or **local** model:\n", "\n", "$$\n", "p_\\params(\\y|\\x) = \\prod_{i=1}^n p_\\params(y_i|\\x,i,y_{1,\\ldots,i-1}) \\approx \\prod_{i=1}^n p_\\params(y_i|\\x,i)\n", "$$\n", "\n", "* Assumption: labels are independent of each other given the input\n", "* Inference in this model is trivial: **greedy decoding**" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" }, "scrolled": false, "slideshow": { "slide_type": "fragment" } }, "source": [ "$$\n", "\\prob_\\params(\\text{\"PRP MD VB\"} \\bar \\text{\"it will rain\"}) \\approx \\\\\\\\ \\prob_\\params(\\text{\"PRP\"}\\bar \\text{\"it will rain\"},1) \\cdot \\\\ \\prob_\\params(\\text{\"MD\"} \\bar \\text{\"it will rain\"},2) \\cdot \\\\ \\prob_\\params(\\text{\"VB\"} \\bar \\text{\"it will rain\"},3)\n", "$$" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" }, "scrolled": true, "slideshow": { "slide_type": "fragment" } }, "source": [ "Does this remind you of anything you've seen in previous lectures?" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" }, "scrolled": false, "slideshow": { "slide_type": "skip" } }, "source": [ "$$\n", "\\prob_\\params(\\text{\"it will rain\"}) \\approx \\prob_\\params(\\text{\"it\"}) \\cdot \\prob_\\params(\\text{\"will\"} \\bar \\text{\"it\"}) \\cdot \\prob_\\params(\\text{\"rain\"} \\bar \\text{\"it will\"})\n", "$$" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" }, "scrolled": false, "slideshow": { "slide_type": "skip" } }, "source": [ "### Graphical Representation\n", "\n", "- Models can be represented as factor graphs\n", "- Each variable of the model (our per-token tag labels and the input sequence $\\x$) is drawn using a circle\n", "- *Observed* variables are shaded\n", "- Each factor in the model (terms in the product) is drawn as a box that connects the variables that appear in the corresponding term\n", " - For example, the term $p_\\params(y_3|\\x,3)$ would connect the variables $y_3$ and $\\x$. " ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "pycharm": { "name": "#%% md\n" }, "slideshow": { "slide_type": "skip" } }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", "\n", "\n", "%3\n", "\n", "\n", "\n", "x\n", "\n", "x\n", "\n", "\n", "\n", "p(y1 | x, 1)\n", "\n", "p(y1 | x, 1)\n", "\n", "\n", "\n", "p(y1 | x, 1)--x\n", "\n", "\n", "\n", "\n", "y1\n", "\n", "y1\n", "\n", "\n", "\n", "y1--p(y1 | x, 1)\n", "\n", "\n", "\n", "\n", "p(y2 | x, 2)\n", "\n", "p(y2 | x, 2)\n", "\n", "\n", "\n", "p(y2 | x, 2)--x\n", "\n", "\n", "\n", "\n", "y2\n", "\n", "y2\n", "\n", "\n", "\n", "y2--p(y2 | x, 2)\n", "\n", "\n", "\n", "\n", "p(y3 | x, 3)\n", "\n", "p(y3 | x, 3)\n", "\n", "\n", "\n", "p(y3 | x, 3)--x\n", "\n", "\n", "\n", "\n", "y3\n", "\n", "y3\n", "\n", "\n", "\n", "y3--p(y3 | x, 3)\n", "\n", "\n", "\n", "\n", "p(y4 | x, 4)\n", "\n", "p(y4 | x, 4)\n", "\n", "\n", "\n", "p(y4 | x, 4)--x\n", "\n", "\n", "\n", "\n", "y4\n", "\n", "y4\n", "\n", "\n", "\n", "y4--p(y4 | x, 4)\n", "\n", "\n", "\n", "\n", "p(y5 | x, 5)\n", "\n", "p(y5 | x, 5)\n", "\n", "\n", "\n", "p(y5 | x, 5)--x\n", "\n", "\n", "\n", "\n", "y5\n", "\n", "y5\n", "\n", "\n", "\n", "y5--p(y5 | x, 5)\n", "\n", "\n", "\n", "\n", "p(y6 | x, 6)\n", "\n", "p(y6 | x, 6)\n", "\n", "\n", "\n", "p(y6 | x, 6)--x\n", "\n", "\n", "\n", "\n", "y6\n", "\n", "y6\n", "\n", "\n", "\n", "y6--p(y6 | x, 6)\n", "\n", "\n", "\n", "\n", "p(y7 | x, 7)\n", "\n", "p(y7 | x, 7)\n", "\n", "\n", "\n", "p(y7 | x, 7)--x\n", "\n", "\n", "\n", "\n", "y7\n", "\n", "y7\n", "\n", "\n", "\n", "y7--p(y7 | x, 7)\n", "\n", "\n", "\n", "\n" ], "text/plain": [ "" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "seq.draw_local_fg(7)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "### Parametrisation\n", "\n", "**Log-linear multiclass classifier** $p_\\params(y\\bar\\x,i)$ to predict class for sentence $\\x$ and position $i$\n", "\n", "$$\n", " p_\\params(y\\bar\\x,i) \\approx \\frac{1}{Z_\\x} \\exp \\langle \\repr(\\x,i),\\params_y \\rangle\n", "$$\n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "+ $\\repr(\\x,i)$ is a **feature function**\n", "+ ${Z_\\x} > 0$ is a normalisation factor to ensure that $\\sum_{y} p_\\params(y\\bar\\x,i) = 1$\n", "\n", "+ How far can we get with very simple features that only consider the word types (and no context)?" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Bias:\n", "$$\n", "\\repr_0(\\x,i) = 1\n", "$$\n", "\n", "Word at token to tag:\n", "$$\n", "\\repr_w(\\x,i) = \\begin{cases}1 \\text{ if }x_i=w \\\\\\\\ 0 \\text{ else} \\end{cases}\n", "$$" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "pycharm": { "name": "#%%\n" }, "slideshow": { "slide_type": "-" } }, "outputs": [], "source": [ "def feat_1(x,i):\n", " return {\n", " 'bias': 1.0,\n", " 'word:' + x[i]: 1.0,\n", " }\n", "\n", "train = list(zip(tokens[:-200], pos[:-200]))\n", "dev = list(zip(tokens[-200:], pos[-200:]))\n", "\n", "local_1 = seq.LocalSequenceLabeler(feat_1, train, class_weight='balanced')" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "We can assess the accuracy of this model on the development set." ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "pycharm": { "name": "#%%\n" }, "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/plain": [ "0.8872215709261431" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "seq.accuracy(dev, local_1.predict(dev))" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "### Problem 1: unknown words\n", "\n", "Many words are new, but we should still be able to tag them based on form or context:\n", "\n", "> ’Twas brillig, and the slithy toves \n", "Did gyre and gimble in the wabe: \n", "All mimsy were the borogoves, \n", "And the mome raths outgrabe.\n", "\n", "(Jabberwocky by Lewis Carroll)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "### How to Improve?\n", "\n", "Look at **confusion matrix**" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "pycharm": { "name": "#%%\n" }, "slideshow": { "slide_type": "skip" } }, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "plt.rcParams['figure.figsize'] = [7, 7]\n", "import matplotlib.pylab as plb\n", "plb.rcParams['figure.dpi'] = 120" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "pycharm": { "name": "#%%\n" }, "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAxkAAAM7CAYAAAAmh13CAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/d3fzzAAAACXBIWXMAABJ0AAASdAHeZh94AACjGklEQVR4nOzdd7ykdXn//9d7lypSLCx2xNVYwJKvqBijgiXWiBqiIkQXe0hsiYoaFGyxd4MtyGpUUGygPysGEBGM2BDBBoIFZFGKgJRd9vr9cd9Hh9nTZ86Z+8x5PfdxP2bmvj+f+75mztk5c82npaqQJEmSpGFZMeoAJEmSJI0XkwxJkiRJQ2WSIUmSJGmoTDIkSZIkDZVJhiRJkqShMsmQJEmSNFQmGZIkSZKGyiRDkiRJ0lCZZEiSJEkaKpMMSZIkSUNlkiFJkiRpqEwyJEmSpCUuybZJ3pTkq0kuSlJJDp1D/VVJ1ib5fZI/JTklyYPnG49JhiRJkrT03QR4FrAl8Lm5VEyyJfB14MHA84G9gQuBLyd54HyC2Ww+lSRJkiR1ynnAjaqqktwUeMYc6j4d2A34m6o6BSDJ8cAPgTcB95lrMLZkSJIkSUtcteZZ/XHATycSjPZ8G4CPAvdOcsu5ntCWDEmSJC0rSW4B3GjUcUxhBbBxkv0XVdW6BbrmbsBJk+w/vb3dFfjtXE5okiFJkqRlI8ktWLH5b9m4ftShTOVaYItJ9r8KOHSBrnkT4OJJ9l/cc3xOTDIkSZK0nNyIjevZfJdHkC22H3Us11PXXsb6X35pC5qB12f3Hb5ooS8/z2OTMsmQJEnSspMttmfF1nP+gn5B9fSROruqfryIl/4Dk7dW3Li9nayVY1oO/JYkSZKWtx8Bd51k/8S+M+Z6QpMMSZIkLT9Z0c1tND4L3CnJn6eqTbIZsD/w7ao6f64ntLuUJEmSNAaSPALYBti23XWXJPu0979YVX9KcjjwVGB1VZ3XHvsQ8C/A0UleCqwDDgTuCDxkPrGYZEiSJEnj4b3Azj2P/7HdAHYBzgVWtlsmClXVNUkeTLPw3ruBGwA/AB5RVSfOJxCTDEmSJC0/SbN1yYDxVNVtZ1FmDbBmkv0X0rRwDIVjMiRJkiQNlUmGJEmSpKGyu5QkSZKWn9HO5jS5rsUzgPF5JpIkSZI6wSRDkiRJ0lDZXUqSJEnLT+jg7FKjDmB4bMmQJEmSNFQmGZIkSZKGyu5SkiRJWn6cXWpBjc8zkSRJktQJJhmSJEmShsruUpIkSVqG0r3ZpcZoeilbMiRJkiQNlUmGJEmSpKGyu5QkSZKWH2eXWlDj80wkSZIkdYJJhiRJkqShsruUJEmSlp/QvdmlOhbOIGzJkCRJkjRUJhmSJEmShsruUpIkSVp+nF1qQY3PM5EkSZLUCSYZkiRJkobK7lKSJElafpIOzi7VsXgGYEuGJEmSpKEyyZAkSZI0VHaXkiRJ0vLj7FILanyeiSRJkqROMMmQJEmSNFR2l5IkSdLyNEazOXWNLRmSJEmShsokQ5IkSdJQmWRIkiRJGirHZEiSJGn5cQrbBTU+z0SSJElSJ5hkSJIkSRoqu0tJkiRp+bG71IIan2ciSZIkqRNMMiRJkiQNld2lJEmStPysSLN1SdfiGYAtGZIkSZKGyiRDkiRJ0lDZXUqSJEnLT9K92ZxidylJkiRJmpRJhiRJkqShsruUJEmSlqF0sHtS1+KZP1syJEmSJA2VSYYkSZKkobK7lCRJkpafrOjg7FIdi2cA4/NMJEmSJHWCSYYkSZKkobK7lCRJkpafdHB2qa7FMwBbMiRJkiQNlUmGJEmSpKGyu5QkSZKWn6R7sznZXUqSJEmSJmeSIUmSJGmo7C4lSZKk5cfZpRaULRmSJEmShsokQ5IkSdJQ2V1KkiRJy09WdHB2qY7FM4DxeSaSJEmSOsEkQ5IkSdJQ2V1KkiRJy1AHZ5eia/HMny0ZkiRJkobKJEOSJEnSUNldSpIkSctP0r3ZnDrXfWv+OvbKSpIkSVrqTDIkSZIkDZVJhiRJkqShckyGJEmSlp90cArbrsUzAFsyJEmSJA2VSYYkSZKkobK7lCRJkpafrOjgFLYdi2cA4/NMJEmSJHWCSYYkSZKkobK7lCRJkpYfV/xeUB17ZSVJkiQtdSYZkiRJkobK7lKSJElaflyMb0HZkiFJkiRpqEwyJEmSJA2V3aUkSZK0DHVwMb4x+v5/fJ6JJEmSpE4wyZAkSZI0VHaXkiRJ0vLj7FILypYMSZIkSUNlS0afJNsDDwR+DVw74nAkSZKWsi2AWwMnVtVlow5Gi8ckY1MPBI4ZdRCSJEljZG/g2FEHcT1J92aXGqPuUiYZm/o1wCc/9TlW3/72o45FkiRpyTr7F7/gCfs8FtrPV1o+TDI2dS3A6tvfnrvsuuuoY5EkSRoHdkFfZjrWRjSYJHsmWTvqOCRJktRxE7NLdW0bE2OVZEiSJEkavbFIMpI8LcmZwFeApya5NMm3kzx81LFJkiRJy82SH5OR5FHA4cD/AB8AHtre7gGsGmFokiRJ6qgkpGPdk7oWzyCWfJIB/B1wKfBUmuln71FVxzCLaWiTrAJ27Nu9etgBSpIkScvJOCQZ5wPb0rRczNWBwCHDDUeSJEla3sYhyXgP8DDgZJqE48okzwc+X1XnzFD3MODovn2rcTE+SZKksWZ3qYW15Ad+V9WVVfUg4F7Ap4EbAC8CfprkxTPUXVdVP+7dgLMXPmpJkiRpfC35JGNCVX0X+CzwdeC2wFHAG5PcfJRxSZIkScvNkk8yMkm7UlVdB3wDCJsO7JYkSZKaT4pd2sbIOIzJeGeSDcAXgJsD2yV5AvAK4BfAWaMMTpIkSVpuxiHJ+DTwHJq1Mm4ObE4z09SJwH9U1foRxiZJkiQtO0s+yaiqE2kSCpLsCaypqjUjDIkzf/PHede9y622G2IkkiRJmoyzSy2sJT8mQ5IkSVK3jFuScS7wuRHHIEmSJC1rS767VK+qOpcm0ZAkSZI0ImOVZEiSJEmz0sExGXQtngGMW3cpSZIkSSNmkiFJkiRpqJZ1d6kkq9h0RfDVo4hFkiRJiyfp3pSxHQtnIMs6yQAOBA4ZdRCSJEnSOFnuScZhwNF9+1YDx4wgFkmSJGksLOsko6rWAet693Wt2UySJEnD54rfC8uB35IkSZKGyiRDkiRJ0lCNdZKRpJKcMOo4JEmS1DHp6DYmxjbJSHLD9u4FIw1EkiRJWmbGeeD3A4AC/nOxL3yXW20377of/e55A117/3vuPFB9SZIkaVDjnGTsBRxVVT8adSCSJEnqltDB2aXGqL/U2CYZVfXiUccgSZIkLUdjOyZDkiRJ0miMbUuGJEmSNBUX41tYtmRIkiRJGiqTDEmSJElDZXcpSZIkLTt2l1pYyzrJSLIK2LFv9+pRxCJJkiSNi2WdZAAHAoeMOghJkiRpnCz3JOMw4Oi+fauBY0YQiyRJkhZLB7tL0bV4BrCsk4yqWges693XuV82SZIkaYlxdilJkiRJQ7WsWzIkSZK0TKXduqRr8QxgbFsykjwwyYYkrxx1LJIkSdJyMrZJBk0uuJLxfo6SJElS54xtd6mqOoEl2Oi0/z13Hqh+VQ1U34HvkiRpOQjd+9zTrWgG47f8kiRJkobKJEOSJEnSUI1tdylJkiRpKungYnxdi2cQtmRIkiRJGiqTDEmSJElDZXcpSZIkLTt2l1pYtmRIkiRJGqqxbclIUsCJVbXnNGVWATv27V69kHFJkiRJ425skwzgunabzoHAIYsQiyRJkrRsjG2SUVWzeW6HAUf37VsNHDP8iCRJktQZoXtLbHctngEs6zEZVbWuqn7cuwFnjzouSZIkaS6S3DDJO5Kcn+TqJD9I8qRZ1t0rydeSrEtyRZLTkzwvycr5xjO2LRmSJEnSMvIZ4F7AS4GfAU8Gjkyyoqo+PlWlJA8BvgJ8A3gmcCXwGOCdND18nj+fYEwyJEmStOyM0xS2SR4JPBR4clUd2e4+PsnOwJuTfKKqphqrvAZYDzy6qq5s9x2X5I7tsXklGWPbXSrJhiRfH3UckiRJ0gJ7HHAFm441PgK4BXCfaequB64Frurbfylw9XwDGtskA1jZbpIkSdJSsjrJrn3bqmnK7wacVVUb+vaf3nN8Ku8DtgDeleQWSXZI8k80icub5vsExra7VFV1q/1rkQza7HfOuitnLjSN263aZqD6kiRJi6Hj3aUmm+n0VcChU1S9CXDOJPsv7jk+qar6dpIH0bSC/Eu7+zrgZVX11hlCntLYJhmSJEnSErU3m854etEMdWo+x5LcE/gs8G3g2TQDvx8EvDbJVlX1mpnD3ZRJhiRJktQtZ7dLK8zWH5i8teLG7e3Fkxyb8F/AhcDjegaHH59kI3Boko9V1WStJNMa5zEZkiRJ0hTy5y5TXdkGWI3vR8Cdk/Q3INy1vT1jmrr3AL47yexT36HJFe48n4A6m2QkuVuSI5L8sl1Q5Iok30vykiQ37im3Isk/JTkuye+TrG8XEvlCkr9P0tnnKEmSJA3BZ4EbAv/Qt/+pwPk0XaGmcj6w+yQL7923vf3NfALqZHepJM8EDgN+CrwZOBPYHNgdeA7Nk35ckq2AzwF/BxwF/DPwO2BH4OE0A1ieyOSDZyRJkqQlr6q+lORrwHuTbAf8AtiX5vPw/hOtFEkOp0k8VlfVeW31twPvAj6f5P3An4AHA/8OHFdVP5xPTJ1LMpLcF3gv8DXgsVV1Tc/hryV5K80LBvA24GHAU6vqI32n+kySNwNbL3TMkiRJWlqSwWflHLYBw3k88Drg1TRjMX4C7FtVR/WUmVji4c9Xqqp3J/kt8ELgv2k+O59LM5vV2+cbTOeSDODlNCPgn9WXYABQVdcCxya5GfAM4CuTJBgTZX++oJFKkiRJHVBVV9Cszj3lCt1VtYZmFe/+/Z8BPjPMeDqVZLR9wR5EM/jk1zMU34umC9XnBrjeKpquVb1Wz/d8kiRJkjqWZAA3BW4A/HIWZW/T3s6m7FQOBA4ZoL4kSZKWooEmc1ogXYtnAF1LMhbbYTSDw3utxoHikiRJ0rx1Lcn4Pc2I9l1mUfZX7e1syk6qqtYB63r3dW0AkCRJkrTUdGoNiXZ6ra8D90xyqxmKHw+sBx670HFJkiRpvIx64b2pF+QbD51KMlqvp+mR9sEkW/QfTLJ5kr+vqt/RTLP1sCRPmexESVYnudvChitJkiSpV9e6S1FVpyT5Z5rxEt9N8l7gxzQzSf018CyapdE/D/wbcDtgbZKH0ax2eCHNAPKHAgcATwJOX+znIUmSJC1XnUsyAKrqg0n+j2ZRkIOAm9F0jfoZ8HHgPW25q5M8CtiPZvXC9wPbAZcApwFPo0lGJEmSpD/rYvekrsUziE4mGQDtEuZrZlHuOuAj7aYB3W7VNgPV/+3FV8277i1v7OLsmrvrNtZA9VeuGJ83dEmSuqKLYzIkSZIkLWGdbcmQJEmSFordpRZWJ1syktwtyRFJfpnk6iRXJPlekpckuXFb5oQk1W4bk1ye5BdJjk6yT5JOPjdJkiRp3HWuJSPJM2lmlvop8GbgTJqZpXYHngPcF3hcW/wcmkHfANvQLMz3WJpVvE9qp7q9bNGClyRJktStJCPJfYH3Al8DHltV1/Qc/lqStwIP79l3VVWd2nea/05yAPAh4APAExcyZkmSJC1R49M7qXO61qXo5UABz+pLMACoqmur6tiZTlJVRwBfBP4xyc7DD1OSJEnSVDrTkpFkJfAg4LtV9eshnPJY4JHA/YHzprjmKmDHvt2rh3BtSZIkadnqTJJBs0r3DYBfDul8E4nFLaYpcyBwyJCuJ0mSpCXC2aUWVpeSjGGbzU/pMJpB4r1WA8cMPxxJkiRpeehSkvF74E80M0QNw8RYjPOnKlBV64B1vfvGKYOUJEmSRqEzSUZVXZfk68Ajktyqqn4z4CkfQzOI/BuDRydJkqSx0sHuUnQtngF0bXap19N0c/pgki36DybZPMnfz3SSdgrbRwBHVtWvhh+mJEmSpKl0piUDoKpOSfLPNGMlvpvkvcCPaRbj+2vgWcAZwOfbKlsn2WPiPnA7msX4Hg2cSLN4nyRJkqRF1KkkA6CqPpjk/4AXAgcBNwPWAz8DPg68p6f47YBT2vtXAhcC3wP+EfhMVW1crLglSZIkNTqXZABU1Q+BNTOU2XNRgtGc3PLGW8+77l+9cMZ1Fqf1s7c/ZqD6WppWrhif/quSpMWTdG/Cn46FM5CujcmQJEmStMSZZEiSJEkaqk52l5IkSZIWkit+L6zOtWQkWZOkerark/wuyfFJXpZkVVvutn3lpttuO+KnJUmSJC0bXW7JOAD4Cc30tauAv6WZbepFSZ4InATct6/OYcD2wH59+y9Y2FAlSZIkTehyknFGVZ3W8/jTSd4OfBP4DHCHqjq1t0KSPwJb9O+XJEmSrift1iVdi2cAnesuNZ129e5/B7YFnj3icCRJkiRNosstGVP5InAd8IBBT9SO79ixb/fqQc8rSZIkLWdLLsmoqiuT/B64xRBOdyBwyBDOI0mSpCUkdHB2qTHqL7XkkozWsH4ChwFH9+1bDRwzpPNLkiRJy86SSzKSbAPcBPjRoOeqqnXAur7zD3paSZIkaVlbckkG8ChgJXDCiOOQJEnSEuVifAtrSc0uleQ2wFuAy4D3jzgcSZIkSZPockvGbkk2o4lxFXB/mgX6rgMeV1UXjTI4SZIkSZPrcpJxRHt7LXApcBbwRuC/TTAkSZI0iKTZuqRr8Qyic0lGVa0F1s6z7p7DjEWL62dvf8yoQ5AkSdIQLKkxGZIkSZK6r3MtGZIkSdKC6+DsUuPUX8qWDEmSJElD1ckkI8maJDXNtmeSOyb5U5KPT1L/Rkl+m+TbSVaO4jlIkiRJy1XXu0sdAPxkkv1nVtUfk7wceHuST1fVp3uOHwbcGHhwVV23GIFKkiRp6XB2qYXV9STjjKo6bZrj7wQeB7w3yUlVtS7JPwJPAv69qiZLUCRJkiQtoE52l5qtqiqa1o4bAO9LcjPgvcBJwDtGGJokSZK0bHW9JWNlu+p3r+rtAlVV5yR5MU0XqbsBWwEHVNXGmU6eZBWwY9/u1QPGLEmSpI5rukt1q39Sx8IZSNeTjFMn2Xcdm8b9PuB5wJ2AF1XV2bM8/4HAIfMPT5IkSVK/ricZTwHO6ttXk5R7OE2CsRF4CPDWWZ7/MODovn2rgWPmEKMkSZKkHl1PMs6aYeA3SXYA/hv4DvAB4INJnl5Vh8908qpaB6zrO9/8o5UkSdKSELrXPalj4Qyk60nGbLybZrrah1TVWUkeB7wtyVeq6jcjjk2SJEladpb07FJJ9gb2B15RVRPdqp5F023qgyMLTJIkSVrGut6Ssdsks0sBnE0zNuP9wLeAt00cqKrfJnkhcMRsu01JkiRpeVmxIqxY0a0OSl2LZxBdTzKOmGL/M4G/A7YF1vRPV1tVa9tF+d6W5KtV9esFjlOSJElSq5NJRlWtBdbOUOy/ZzjHo4YVj5aHWz79yIHq//bwfYcUiaQuW79hxmWYprX5Zku6p7Lm6er1181caBpbbb5ySJFIi6OTSYYkSZK0oNK92aXGaXopv06RJEmSNFRLJslIsiZJJdm9fXxo+3hdkm0nKX9uki8sfqSSJEnS8rZkkoxp7Ai8ZNRBSJIkaelI0sltXIxDkvFl4IVJbjbqQCRJkiSNR5JxMM0A9kNHHIckSZIkxmN2qfOAw4DnJnlbVf1sthWTrKLpbtVr9TCDkyRJkpabcUgyAF4HPA34T2CfOdQ7EDhkQSKSJElSZ6WDU9h2LZ5BjEN3KarqD8AbgX9Icp85VD0M2K1v23v4EUqSJEnLx7i0ZAC8A/hX4E3AA2dToarWAet6943TqH5JkiRpFMYmyaiqq5IcCnwgyaNGHY8kSZK6K3RvytiM0ZLfY9FdqseHgLOANzB+z02SJElaEsbqg3hVXQe8nGZsxa1HHI4kSZK0LI1Nd6kJVfW5JN8C/mbUsUiSJKmburjCdtfiGcSSacmoqrVVlao6rX18aPv495OUvV977NGLH6kkSZK0vI1dS4Y0X789fN+B6r/2uFmvA7mJgx/yVwNdeynbuLEGqv+HK64dqP6O2205UH3NT9VgP/dRftu3+WZL5vu5SQ362g9i0J/boO8XK1aM7vdmq81Xjuza0iiYZEiSJGnZcTG+hbW0v46RJEmS1DljkWQkWZOkkuzePj60fXzTUccmSZIkLTd2l5IkSdLy08HZpcapv9RYtGRIkiRJ6g6TDEmSJElDtay7SyVZBezYt3v1KGKRJEnS4nF2qYW1rJMM4EDgkFEHIUmSJI2T5Z5kHAYc3bdvNXDMCGKRJEmSxsKyTjKqah2wrndf52YZkCRJ0tA13aW69bmvY+EMxIHfkiRJkobKJEOSJEnSUI1bd6ma4bEkSZJE6F73pI6FM5Bxacm4QXt7zRSPJUmSJC2ScWnJuCOwETiv5/FFVXXF6ELScnPwQ/5q3nWv2zhYo9vKFUv3u48VA8a+43ZbDikSLaauDbZcTpbyaz/o+4WkxbOkk4wk9wTuBTwNOBa4e5K/AR4JvGeUsUmSJKm7knQu6e5aPINY0kkG8Clge5oE43nARe32AeDlI4xLkiRJWraWdJJRVbv07RqXMSaSJEnSktXJD+VJ1iSpJLu3jw9tH9+0p8zadt/Edm2Ss5O8Jcl2o4tekiRJXdcsxte9bVws6ZYM4CrgQe39HYB9gH8H7gb83YhikiRJkpa1pZ5kbKyqU3sefznJ7YCHJtmlqn45qsAkSZKk5WqpJxmTOQ3YC9gJMMmQJEnSpjo4u9Q49ZcaxyRjF2ADcM5MBZOsAnbs2716IYKSJEmSlosln2QkmXgO2wP/CDweeENVrZtF9QOBQxYqNkmSJGk5WupJxjbA+r59R1bVf8yy/mHA0X37VgPHDBqYJEmSuquLszl1LZ5BLPUk4yrgAe39m9HMLLVvktOr6g0zVW5bO67X4tG5vnmSJEnSErPUk4yNVXXaxIMkXwO+CxyS5GNV9evRhSZJkiQtT51cjG++quoa4F+ArYCDRxyOJEmStCx1PcmoGR5vWqHqROCLwAFJdlmQqCRJkrSkpZ3CtmvbuOhqknGD9vaaKR7P5CBgJfCKYQYlSZIkaWZdHZNxR2AjcF7P44uq6oqJAlW1BlgzWeWqOoMmyZCWhJUrBvvmYv2GjQPV33yzrn7fIEmSlqJOJRlJ7gncC3gacCxw9yR/AzwSeM8oY5MkSdL4CN2bMrZj4QykU0kG8CmaRfWOBZ4HXNRuHwBePsK4JEmSJM1Sp5KMquofqG0fDkmSJGmJ6eyH+CRrklSS3dvHh7aPb9pTJkmelOSkJOuSXJ3kN0m+kuQZo4tekiRJXTbqWaScXarbXg8cCZwFPAN4BM36GBcCe48wLkmSJGnZ6lR3qblIsjXwAuAjVfWsvsNrkyz1BEqSJElakpZskgFsA2wJXDDZwaoabE5PSZIkja2kg7NLdSyeQSzZJKOqfp/kF8CBSdbRrPL906qacVXwCUlWATv27V49xDAlSZKkZWepdyl6MnAJ8FaacRmXJfl8kn/K7EbOHAic0bcds1DBSpIkScvBkm3JAKiq7yS5PfAg4AHA7sCDgUcDT0jymBlaNg4Dju7btxoTDUmSpPHWxdmcuhbPAJZ0kgFQVeuBr7QbSW5Cs6jfo2lmm/riNHXXAet693Xul02SJElaYpZ6d6lNVNUfgHe0D3cbYSiSJEnSsrRkWzKSbA5s1yYV/e7c3p6/iCFJkiRpiWhml+pWD5aOhTOQpZBk9I+pmHi8PXBukqOB44BfAzcE9gSeTzMQ/DOLFKMkSZKkVpeTjBu0t9dM8fiPwCE0A73/E9iJJgH5JU13qTdW1Z8WJVJJkiRJf9blJOOOwEbgvJ7HF1XVFQBVdS3N1LVvHU14UndsvtnYDa+SJGlBuRjfwupckpHknsC9gKcBxwJ3T/I3wCOB94wyNkmSJEkz61ySQTP97PY0CcbzgIva7QPAy0cYlyRJkqRZWNQ+FknWJKkku09x/LbAbYEb0azmfRFwGe1K3FV1VV/5Q9vzTWwbk1yQ5ItJ7regT0aSJElLVmgW4+vUxvj0l+pqR+53A/cF7g+8CLgD8MUkD5ii/MPb8n8LvBC4GXBCkv+3CLFKkiRJ6tHF7lIAv6qqU9v7Jyf5OXAi8HTgG5OU/25V/b69/60k/wecDewDfG/Bo5UkSZL0Z11NMvqd1t7uNMvyl7W36xcgFkmSJC1xzi61sJZKkrFLe/uzKY6vTLIZTfev2wCvpVlP41PTnTTJKmDHvt2rB4hTkiRJWva6mmSsaJOGlcCdgPcCFwBvm6L87/oe/xHYt6p+NMN1DqRZ0E+SJEnSkHQ1yXhju024HNirqs6dovxDaLpIBVhFs8bGUUmeVFWfneY6hwFH9+1bDRwzn6AlSZK0NEzM6NQlXYtnEF1NMt4JfBTYEtiDpvvTMUnuXlV/mKT8D3sGfpPkS8CPgP8CpkwyqmodsK533zj9cCVJkqRR6OoUtr+pqtOq6uSqeivwDOCWwKtmU7mqNgI/Bm7ejruQJEmStEi6mmRcT1V9DDgBeGaSnWcqn2QlcFeawd9/XNjoJEmStOTkLzNMdWUbo7X4RtZd6kHt6t79zpymzkHAt4FX0LRs9Lpnkolpa3eiGZNxJ+DtVXX1gLFKkiRJmoNRJRlvnGL/LlPsp6r+L8nRwFOTvL6qzu45/OWe+xcDP6dJND48cKSSJEmS5mRRk4yqWgusnaHYlA1FVfWEvseHAocOGJYkSZKWmRUJKzo24U/X4hlEV2eXkrSEXHn1hnnX3WYr34YkSRo3S2LgtyRJkqSlwyRDkiRJ0lCNPMlIsiZJtduekxxPkl+0x0/o2V8923VJLknywyTvT7LHIj4FSZIkLTGjnq52ymlsx8TIk4welwNPn2T/A4HV7fF+nwLuC/wt8CTgIzQrhJ+S5J0LFKckSZKkaXQpyfgE8A9Jtuvb/3TgFOBXk9S5sKpOrapTquor7erg/w/4EPC8JP+8sCFLkiRJ6telJOPI9nbfiR1Jtgf+gSZpmJWqug74V+D3wIuHGaAkSZLGQwhJx7YxWvK7S0nGH2m6Pz2tZ9++wEaaVo5Zq6qrgOOAXZLcaqpySVYl2bV3o+maJUmSJGmeujZB/YeA45PsWlU/pkk4jq6qyzP3kTDntbe3AH4zRZkDgUPmFakkSZKkSXUtyTgROBt4WpK1wL2Af5/nuWaTlRwGHN23bzVwzDyvKUmSpCUggRUd6500TrNLdSrJqKpKcgTwPGAr4GdVddI8T7dze3v+NNdbB6zr3TePFhNJkiRJPbo0JmPCWuCmwHOAI+ZzgiRbAw8Bzq6qqbpKSZIkSWMhyQ2TvCPJ+UmuTvKDJE+aQ/29k5yY5I9Jrkzy4yTPmm88nWrJAKiq3yZ5M3An4MNzrZ9kJfAe4CbAy4YcniRJksbAxIxOXTJgPJ+hGWrwUuBnwJOBI5OsqKqPz3DdlwKvA94HvB5YT/NZfIv5BtO5JAOgql46y6I7tat7B9gW2A14CnB34O1V9cEFClGSJEnqhCSPBB4KPLmqJpaFOD7JzsCbk3yiXeZhsrr3pEkwXlZVb+o59PVBYupkkjEH+7TbRuAKmhmlTgGeU1WnjjIwSZIkaZE8juazcP+ERkcAHwfuA3xrirr/ClwDvHuYAY08yaiqtTTjMGYqt1vf4261b2nZ23DdxnnX3WxlF4dHzd42W83/reRGj3vvQNf+ydoDBqq/0/ZbDVS/quZdt2vN9Foerrxmw7zrbrPlYB8bBnmfhMHfK6/bOP//ryu7Ng2RBpZ0bzannnhWT/I34qJ20qLJ7AacVVX9/8FP7zk+VZLxAOAs4B+SvAK4PXAB8FHglVV17ayfQI+RJxmSJEmSrmey5RReBRw6RfmbAOdMsv/inuNTuSWwI/Au4BXAmcCDacZ23BrYb+ZwN2WSIUmSJHXL3jRrx/W6aIY60zXVTXdsBc3Y5n2r6qh23/FJtgFekOSQqvrFDNfehEmGJEmSlp0AmdXazYunJ5qzq+rHc6j6ByZvrbhxe3vxJMd6694M+Erf/i8BLwD+HzDnJKMzHcGTrElS7by+O09y/IQkZ/Q8Prct/75Jyu7ZHttnoeOWJEmSRuxHwJ2T9Dcg3LW9PYOpnT7F/omcZ16DqTqTZPTYEnjtHMo/PckdFyoYSZIkqeM+C9wQ+Ie+/U8Fzge+PU3dT7e3j+jb/0iaBOM78wmoi92lvgw8OclbquqHM5Q9BbgL8J9s+qJKkiRJk1qRZuuS+cZTVV9K8jXgvUm2o+netC/wcGD/iTUykhxOk3isrqrz2upHAM8GDktyU5qB3w8B/gU4rKfc3J7L/J7KgnoTTd+wN86i7MXAG4DHt4vySZIkScvR44H/AV5N86X9fWgGc3+sp8zKdvtzOlNV62kW8jsKeDnwRZp1N14KPH++wXSxJeNymu5S70zyoKr63xnKv5NmEZE30czzO2tJVtFM2dVr9VzOIUmSJI1aVV1BkxRMmRhU1RpgzST7Lwae025D0cWWDID30cz1+8bMsFpVVV1FM2fw/ZM8eo7XOZBmIEzvNtm8xJIkSRonCenY1rnVAQfQySSjXVnwYGB34AmzqHIETf+xNySZy3M6jGYFxN5t77lFK0mSJKlXJ5OM1lHA94DXJdl8uoLtYJaXA7vSDGaZlapaV1U/7t3YdOETSZIkSXPQ2SSjqgo4iGaMxLNmUf4Y4GSaJde3WtjoJEmStJSFpndSp7ZRvyhD1NkkA6CqjgO+BrySZu7fmRwE3Bp43kLGJUmSJGlqnU4yWgfRzAB1z5kKVtXJNAO3+xcTkSRJkrRIOp9kVNX3gSPnUOVlwHULFI4kSZLGwIqkk9u46Mw6GVW1Flg7xbH9gP369t12irJn0aHnpeVjhtmWNYVLPvvPA9W/0b3+daD6F//fuweq789dS802W47uT+RmK0f73ebKri3vLI2xzrdkSJIkSVpa/MZfkiRJy04X177rWjyDWPCWjCRrklSSq5PsPMnxE5Kc0fP43Lb8+yYpu2d7bJ9Jzj+xbUjymyRHJLnlwj0zSZIkSZNZzO5SWwKvnUP5pye54xzKHwDcF3go8EFgX+CkJNvM4RySJEmSBrSYScaXgScnufssyp4CXAn85xzOf0ZVnVpVx1fVq4A3AbsAj51zpJIkSRprSTq5jYvFTDLeBPwBeOMsyl4MvAF4fJI95nm9U9vbTbpoSZIkSVo4i5lkXE7TXephSR40i/LvBH5Lk5zMx+3b24umKpBkVZJdezdg9TyvJ0mSJInFn8L2fcA5wBszQ3tQVV0FHArcP8mjZ3HulUk2S3LDJI8CDqZJbI6dps6BwBl92zGzuJYkSZKkKSxqklFV19J8+N8deMIsqhwBnAm8IclMsZ4KrKdJLL4A/A54RFVdOE2dw4Dd+ra9ZxGXJEmSlrL8ZRrbrmyMz5CMkayTcRTwIuB1ST4zXcGqui7Jy4HPAU8FfjlN8acAZwEbgAur6oKZAqmqdcC63n3jNOBGkiRJGoVFX/G7qgo4iGbsw7NmUf4Y4GTgVcBW0xQ9q6pOq6ofzCbBkCRJkrQwRrLid1Udl+RrwCuBX8+iykHAN4HnLWhgkiRJWhZWJKzoWA+WrsUziEVvyehxELAjcM+ZClbVyTQDsh+x0EFJkiRJGszIkoyq+j5w5ByqvAy4boHCkSRJkjQkC95dqqrWAmunOLYfsF/fvttOUfYsJol3uvNLkiRJk+niZE5di2cQIxmTIY2jlSvG6a1h6bjkO+8ZqH4zF4UkSRqmUY7JkCRJkjSGbMmQJEnSshPSufXRMkYdpubdkpFkTZJKcnWSnSc5fkKSM3oen9uWf98kZfdsj+0zyfkntg1JfpPkiCS37Kt/5yT/k+ScNp7fJ/lekvck2W6+z1GSJEnS3A2ju9SWwGvnUP7pSe44h/IHAPcFHgp8ENgXOCnJNgBJ/hr4LnAX4NXAw4HnAP8f8DDgxnO4liRJkqQBDaO71JeBJyd5S1X9cIayp9AkA/8J/MMsz39GVZ3W3j8+yUrgFcBjgY8BLwA2AntW1eU99T4FvCJdaweTJEnSyCXQtTlbxulT6zBaMt4E/AF44yzKXgy8AXh8kj3meb1T29uJLlo3Af4IXDFZ4XLqGEmSJGlRDSPJuJymu9TDkjxoFuXfCfyWJjmZj9u3txe1t6cANwc+luSBSbae7YmSrEqya+8GrJ5nXJIkSZIY3hS27wPOAd44U/ekqroKOBS4f5JHz+LcK5NsluSGSR4FHEyT2BzbHn8L8DmasRonAJe3g75fm2THGc59IHBG33bMLGKSJEnSEpZAko5to35VhmcoSUZVXUvz4X934AmzqHIEcCbwhiQzxXAqsJ4msfgC8DvgEVV1YXvta6rqcTRjPV4IHAXsCPwHcNYMg8wPA3br2/aeRfySJEmSpjDMdTKOAl4EvC7JZ6YrWFXXJXk5TQvEU4FfTlP8KcBZwAbgwqq6YIpzntWWo21NeQHwNuA1TJH4VNU6YF3vPseJS5IkSYMZ2orf7QDrg2jGNDxrFuWPAU4GXgVsNU3Rs6rqtKr6wVQJxmSxVNXbgUtpWickSZKkP2u6S3VvGxdDSzIAquo44GvAK4EbzqLKQcCtgefN95pJbj7F/lsA2wHnz/fckiRJkuZumN2lJhxEszjeKuDH0xWsqpOTHMNg4yA+kGQH4NM0A7evA+5EMz5jI7ObWleSJEnSkAw9yaiq7yc5EnjyLKu8DHg0sHKel3w38ETgmcAtgW1oprc9BXhKVZ06TV1JkiQtQxMzOnVJ1+IZxLyTjKpaC6yd4th+wH59+247RdmzJotjuvP3lfsq8NWZykkaTxdfce1A9W98wy0Gqv8fX/zJvOu+7pF3GujakhbPxo2Dre27omtLS0sLbKhjMiRJkiRpIcZkSJIkSZ2WQNcamMaot5QtGZIkSZKGa8GTjCRrklSSq5PsPMnxE5Kc0fP43Lb8+yYpu2d7bJ++/fdJ8tkkv0pyTZILk5yS5K0L86wkSZIkTWUxWzK2BF47h/JPT3LHmQoleRTwLZo1MV4C/B3wfJqF/p44jzglSZI05kL+PMNUZzbGp7/UYiYZXwaenOTusyh7CnAl8J+zKPsS4JfAw6rqqKo6sb19EXCb+YcrSZIkaT4WM8l4E/AHZrc43sXAG4DHJ9ljhrI3AX5fVRv6D1TVxjlHKUmSJGkgi5lkXE7TXephSR40i/LvBH5Lk5xM5xTgPkne1Y7N2Hy2ASVZlWTX3g1YPdv6kiRJWprS0W1cLPbsUu8DzgHemBmWNKyqq4BDgfsnefQ0RV8KfBN4LnAqcGWSk5O8NMkNZ4jnQOCMvu2Y2TwRSZIkSZNb1CSjqq4FDgZ2B54wiypHAGcCb0gyaaxV9Yequj9wL5qE4xjgr4DXAz9KctNpzn8YsFvftvfsno0kSZKkyYxiMb6jgBcBr0vymekKVtV1SV4OfA54Ks0A76nKngacBtB2mXoj8EKageEvmaLOOmBd774ZGlgkSZI0BlYkrOjY576uxTOIRV+Mr6oKOIhm7MOzZlH+GJrpaF8FbDXLa6xvy0PTOiFJkiRpkYxkxe+qOg74GvBKYKZxE9AkJbcGntd/IMnNp6hz5/b2/PnEKEmSJGl+RtFdasJBwHeBVcCPpytYVScnOYbJx0t8JclvgM8DP6FJnO4B/DtwBc0sVZIkSZIWyUhaMgCq6vvAkXOo8jLgukn2vxa4hGb8xbHAl2haPI4D7l1VPxowVEmSJI2ZpJvbuFjwloyqWgusneLYfsB+fftuO0XZs5gk3qr6JPDJAcOUtETd+IZbjPT6r3vknUZ6fUmLY8WKMfr0Jy2CkbVkSJIkSRpPoxyTIUmSJI1G0r2lC7oWzwBsyZAkSZI0VIuWZCRZk6R6tg1JfpPkiCS3bMvs2Vfm2iQXJTk5yeuS7Nx3zprltudiPU9JkiRpuRtFd6kDaKaa3Rp4AM2sUQ9McteeMi8HjgdWAjcB7gM8DXhhkmdW1cfacvftO/crgL2AB/XtP3Ooz0CSJElLWhdnc+paPIMYRZJxRlWd1t4/PslKmuTgscBv2/0/r6pTe+ocm+StNNPSrk1yelX9qK8MSS4CNvbvlyRJkrR4ujAmYyIh2Hm6QlV1MfBsmsTohQsdlCRJkqT56cLsUrdvby+aqWBVfSfJBTTdrAaWZBWwY9/u1cM4tyRJkrprRcKKjvVP6lo8gxhFkrEyyWbAVsADgYOBy2lW677zLOr/CrjbkGI5EDhkSOeSJEmSxGiSjP7xEj8C/rmqLkwymyRjmCneYcDRfftWA8cM8RqSJEnSsjKKJOMpwFnABuDCqrpgjvVvA5w/jECqah2wrndf5xZlkSRJ0tCF7s3m1LFwBjKKJOOsntml5iTJvYGbAYcPNyRJkiRJw9KF2aVmJcmNgfcB64G3jzgcSZIkSVPowuxSk7lDkj1okqCJxfieDmwHPKWqfjzK4CRJkrS0NYvxdauDUsfCGUhXk4z/bG83AJcBPwM+BHygqs4bWVSSJEmSZrRoSUZVrQXWzlDmBAYY81JVa4A1860vSUvJ7y+/ZqD6N912yyFFIknS9XW1JUOSJElaMKF7g5PHqLdU515bSZIkSUvcoiUZSdYkqZ5tQ5LfJDkiyS37yt45ydokv0pybZLfJ/likkdMce47J/mfJOckubot/70k70my3eI8Q0mSJEkwmu5SBwA/AbYGHgC8DHhgkrtW1ZVJHg98HDgHeA3wU2Cntt4Xk7y5ql4ycbIkfw2cTLPA36uBc4GbAncHngS8Bfjj4jw1SZIkLQVJOji7VLfiGcQokowzehbjOz7JSuAVwGOTnAr8D/AjYM+qurKn3tFJ3gu8OMn3quqodv8LgI1t+ct7yn8KeEXG6aclSZIkLQFdGJNxanu7M/BC4AbAc/sSjAn/DlwK/EfPvpvQtFRcMdnJq6qGFqkkSZKkGXVhdqnbt7cXAU8FLqyqUycrWFV/SvJV4AlJblZVvwNOAR4FfCzJ+4H/q6qrZnPhJKuAHft2r57Pk5AkSdLSsSLN1iVdi2cQo2jJWJlksyQ3TPIo4GDgcuBY4DbAL2eoP3H8Nu3tW4DPAfsCJwCXt4O+X5ukP4HodyBwRt92zNyejiRJkqReo2jJ6G+l+BHwz1V14SyHT0wUKoCqugZ4XJI7Aw8DdgceSNOl6jlJ7ldVP53iXIcBR/ftW42JhiRJkjRvo0gynkIzE9QGmq5RF/Qc+xWwywz1b9ve/rp3Z1Wd1Z6XdrD3C4C30cxQ9YTJTlRV64B1vfscJy5JkjT+0sHuUuP0MXQU3aXOqqrTquoHfQkGwNeAnZLsMVnFJDcAHkozQ9XvprpANd5OM0h8tyHFLUmSJGkWujC7VK+3A1cB706yzSTH3wLcCHjtxI4kN5/sREluAWwHnL8AcUqSJEmaQhdml/qzqjo7yT8BHwO+k+Rt/GUxvqcBjwDeUlWf6Kn2gSQ7AJ+mGbh9HXAnmulwNwJvXLxnIEmSpKXAxfgWVqeSDICq+nSSs4CXAIfQJBiXA/8HPKqqvthX5d3AE4FnArcEtqGZDvcU4ClTTYcrSZIkaWEsWpJRVWuBtbMseyawZpZlvwp8db5xSZIkSRquzrVkSJJm56bbbjlQ/Qsvu3redXfafquBri1Jo7aC7s0u1bXB0oMYp+ciSZIkqQNMMiRJkiQN1aImGUnWJKmebUOS3yQ5Iskt2zJ79pW5LslFST6fZPdJzrm2r/w1SX6a5FVJbM+XJEnSJpJubuNiVGMyDgB+AmwNPAB4GfDAJHftKfNy4Hhgc+CvaWaaOjHJParq533nuwp4UHv/RsC+wCtpprJ94kI9CUmSJEmbGlWScUZVndbePz7JSuAVwGOB37b7f94z/exJSS4FPgzsT5Nw9NrYN1Xtl5LcFnhCkn+rqt8iSZIkaVF0ZUzGRIKw8zRlJpKSnYZ4TkmSJElD1pUpbG/f3l40TZld2tufDeucSVYBO/btXj3L80uSJGmJSsKKjg2CcMXvwa1MshmwFfBA4GCaVb2PBe7cllnRlpkYk/FW4EzgQ5OdsC0LsAPwZJquV9+ZZPxGrwPZtOuVJEmSpAGMKsk4te/xj4B/rqoLk0wkGZ/oK3MB8DdVdekk59sGWN/zuIAvAc+aIY7DgKP79q0GjpmhniRJkqQpjCrJeApwFrABuLCqLpikzEHA/wI3AP6OZgaqzyW5T1Vd01f2KppZqgCuAc6rqj/OFERVrQPW9e4bp2YqSZIkTW4F3RmcPKFr8QxiVEnGWT2zS03lnJ4y30hyFfBa4LnAW/rKbpzF+SRJkiQtgqWUML0J+AXw0iTbjjoYSZIkSZNbMklGVa2nWaDvJsDzRxyOJEmSlrBRr+w97it+L5kkA6Cqjga+Dfxbku1HHY8kSZKkTS3qmIyqWgusnaHMCcCUeVxV7dH3eA2wZtDYJGm52Wn7reZd949XrZ+50DS223rzgepLkrqtK4vxSZIkSYtmRQcX4+taPINYUt2lJEmSJHWfSYYkSZKkoRpKkpFkTZLq2TYk+U2SI5Lcsi2zZ1+Z65JclOTzSXaf5Jxr+8pfk+SnSV6VZNKOxG0chw7jOUmSJGm8jXomqXGdWQqGPybjAOAnwNY0K3C/DHhgkrv2lHk5cDywOfDXwCHAiUnuUVU/7zvfVcCD2vs3AvYFXgncCXjikGOXJEmSNATDTjLO6Fl5+/gkK4FXAI8Fftvu/3lVndrePynJpcCHgf1pEo5eG3vKAnwpyW2BJyT5t6r6bZIABwHPBG4DrEzyPOBHwL9V1XeH+gwlSZIkTWuhZ5eaSBB25i9JRr+JpGSnOZzz/j3nPBB4PfBW4FrgZsAXgL2Am849ZEmSJI27FWm2LulaPINY6CTj9u3tRdOU2aW9/dk8z/l3wA+r6kVJ1gDXVtVngM/MdKIkq4Ad+3avnmUckiRJkiYx7CRjZZLNgK2ABwIHA5cDxwJ3bsusaMtMjMl4K3Am8KHJTtiWBdgBeDJN16vv9IzfOJ9m3MdfzSPeA9m0i5YkSZKkAQw7yTi17/GPgH+uqguTTCQZn+grcwHwN1V16STn2wboXVa2gC8Bz+rZ92rgvjSJyjrgN0l+BxxTVRfMEO9hwNF9+1YDx8xQT5IkSUuYi/EtrGEnGU8BzgI2ABdO8SH/IOB/gRvQdHV6GfC5JPepqmv6yl5FM0sVwDXAeVX1x94CVXVBkr8G/hb4Z+DeNInHW5M8q6o+NlWwVbWOJjH5s4zRD1eSJEkahWEnGWf1zC41lXN6ynwjyVXAa4HnAm/pK7txFuejqopmpqrVNGM73gj8f8D7k3yiqjbM6VlIkiRJmrcurPj9JuAXwEuTbDvXypmk6aGqrgJOoelutc3AEUqSJGmsjHrhvXFfkG/kSUZVradZoO8mwPPncYpPtKuAP4BmpqgdkzyNZlD3CVV12fCilSRJkjSThZ7Cdlaq6ugk3wb+Lcm755gYfIxmpfGn0ayREZoZpz5JsxCgJEmSpEU0lCSjqtYCa2cocwJNAjDV8T36Hq8B1szi2sfQzgbVrpNx26o6dKZ6Ur9maM/8OWnAaGzcONjPbcU4rXy0iLbbevOB6v/6D38aqP6tb3KDgepLUjq4GN84fZQYeXcpSZIkSeOlE92lhugHwLkjjkGSJEla1sYqyaiqH4w6BkmSJHVfgEzdk38kuhXNYDrXXSrJmiTVs21IckGSo5Lcoa/sCX1l1yc5N8nhSXYe1XOQJEmSlrMut2QcAPwE2Aq4H/AfwF5J7lRVl/SUOwfYr72/BbAbcAjw0LbsYKMLJUmSJM1Jl5OMM3pW+z4hyUrgVcBjgSN6yl1VVaf2PP5GkquBw4G/Bb66GMFKkiRp6VjRwdmluhbPIDrXXWoaEwnHTrMoO7HOxvoFikWSJEnSFLrcktFvl/b2Z/0Hkkw8j4nuUq+k6Ub1relOmGQVzSrhvVYPFqYkSZK0vHU5yVjZJg8TYzIOBr4BHNtXblc2bbH4GfCoqrpmhmscSDN+Q5IkSctI6F73pI6FM5AuJxmn9j0+C9i7qjb07T8beFJ7fzOaFo+DgK8n2bOqfj7NNQ4Dju7bt5p2BXFJkiRJc9flJOMpNInFtsATgWcDRwKP6Ct3dc8AcYBTk5wA/BZ4NbDvVBeoqnXAut59Gaf13CVJkqQR6HKScVZP8nB8O7vUM5LsU1Wfmq5iVV2Q5PfA3Rc8SkmSJEnXs5Rml3oJcAnw6iTTxp3kVsBN6WulkCRJkqDpvdLFbVwsmSSjXYDv9cCdgSf3HNo6yR7tdr8k+wNfbI+9Y5HDlCRJkpa9LneXmsy7gX8FXpnkyHbf7YBT2vsbgd8BPwSeW1UnLn6IkiRJ0vLWuSSjqtYCa6c4djWwc8+uPRc+Ii0Xo2yirKqB6o9T8+pcreja/IOalVvf5AYD1ff/jKRBueL3wloy3aUkSZIkLQ0mGZIkSZKGalGSjCRrklTPtiHJBUmOSnKHvrIn9JVdn+TcJIcn2Xm+55UkSZImJN3cxsVij8k4APgJsBVwP+A/gL2S3KmdPWrCOcB+7f0tgN2AQ4CHtmX/NM/zSpIkSVpgi51knNGzwN4J7QJ7rwIeCxzRU+6qqjq15/E3klwNHA78LfDVeZ5XkiRJ0gIb9exSE4nBTrMoe1l7u37I55UkSdIyk4QVHeufNE4z3406ydilvf1Z/4EkE7FNdJd6JU03qm8Nct6+a6wCduzbvXoW55ckSZI0hcVOMla2ycPE2ImDgW8Ax/aV25VNWyx+Bjyqqq4Z4Lz9DqQZ6yFJkiRpSBY7yTi17/FZwN5VtaFv/9nAk9r7m9G0TBwEfD3JnlX183met99hwNF9+1YDx8xQT5IkSUuYi/EtrMVOMp5CkwBsCzwReDZwJPCIvnJX9wzkBjg1yQnAb4FXA/vO87zXU1XrgHW9+8apL5wkSZI0Cou9GN9ZVXVaVR1fVc8B/ht4eJJ9ZqpYVRcAvwfuPszzSpIkSUtdkhsmeUeS85NcneQHSZ40c81NzvPadv25MwaJZ9Qrfr8EuAR4dZJpY0lyK+Cm9LU8DHpeSZIkLT9h9AvvbbIN9pQ+AzyVZhmHRwDfAY5M8uRZvybJPYAXARcOFsqIk4x2obzXA3cGel+ArZPs0W73S7I/8MX22DsGOK8kSZI0VpI8EngocGBVvb/t3fNM4GvAm9s15GY6x2Y068u9n2aR64F04Vv+dwO/Al7Z8wLcDjil3b4BvBH4DbBXVX1ugPNKkiRJ4+ZxwBVsOqHREcAtgPvM4hwvBW4M/McwAlqUgd9VtRZYO8Wxq4Gde3btuUDnlSRJkgBYQVgxaAelIeuJZ/UkkxFd1E5aNJndaMYo98+senrP8SnXmktyF5olIB5fVVcMYyKkUS/GJwlnNZPmyv8zksbcZMspvAo4dIryN6FZtLrfxT3HJ9WOX/4Q8Jmq+uJU5ebKJEOSJEnqlr1p1o3rddEMdWqex/4NuAPwmFnENWsmGZIkSVp+2hmdOuUv8ZxdVT+eQ80/MHlrxY3b24snOUaS29CsQfdS4NokO7SHNgNWtI+vqaqr5hALsIgDv5Osaefcndg2JLkgyVFJ7tBX9oS+suuTnJvk8CQ795VNkiclOSnJunZe4N8k+UqSZyzW85MkSZJG5EfAndsZonrdtb2das2L2wFbA++kWf5hYrsfzSytEzO2ztkoWjIOoJkWayuaJ/AfwF5J7tROPTvhHGC/9v4WNANWDgEe2pb9U3vs9cBBwAeBNwOX0wz4fhBNU9N/L+zTkSRJkkbqs8AzgX8APtGz/6nA+cC3p6j3A2CvSfa/A9ie5nP7b+YT0CiSjDOq6rT2/gnt9LKvAh5LM83WhKuq6tSex99IcjVwOPC3wFeTbA28APhIVT2r7zprXYhPkiRJk1mRZuuS+cZTVV9K8jXgvUm2A34B7As8HNi/qq4DSHI4TeKxuqrOq6pLgRP6z5fkUmCzqtrk2Gx1YUzGRMKx0yzKXtberm9vtwG2BC6YrHBVbRwsNEmSJGlJeDzwOpoxFjem6Tm0b1Ud1VNmZbsteHrVhSRjl/b2Z/0HevqVTXSXeiVNN6pvAVTV75P8AjgwyTqaVcF/WlXTjaDvPf8qYMe+3avn/AwkSZKkEaqqK4Dnt9tUZdYAa2Zxrj0HjWcUScbKNnmYGJNxMM2q3sf2lduVv7RYTPgZ8KiquqZn35OBTwFvbbfLk5wIfBL46AwJx4E04zwkSZK0jKxIWNGx6aW6Fs8gRpFknNr3+Cxg70lWKDwbeFJ7fzOaFo+DgK8n2bOqfg5QVd9Jcnuagd4PAHYHHgw8GnhCksdMk2gcxqbLr69m8gVQJEmSJM3CKJKMp9AkFtsCTwSeDRwJPKKv3NU9A8QBTk1yAvBbmr5m+04cqKr1wFfajSQ3oWndeHR73klXL2yXZr/e8uyuIitJkiQNZhRJxlk9ycPx7exSz0iyT1V9arqKVXVBkt8Dd5+h3B+SvAPYk2Ysx9CWSJckSdLSlw4uxte1eAbRhSleX0Kz0MerZ5pyNsmtgJvStj4k2bxttZjMndvb84cVqCRJkqSZjXx2qaq6JMnrgTfRDOL+aHto6yR7tPdX0ozJeEn7+B3t7fbAuUmOBo4Dfg3ckKYF4/k03bI+s8BPQZIkSVKPkScZrXcD/wq8MsmR7b7bAae09zcCvwN+CDy3qk5s9/+RZnaoBwP/SbPWRgG/pElE3tizMrgkSZIENONwuzab0ziNDV60JKOq1gJrpzh2NbBzz649Z3nOa/nL1LWSJC24DdcNts7rZiu70FNZkhaW73SSJEmShsokQ5IkSdJQdWVMhiRJkrRoQvemjO1YOAPpbEtGkjVJqmfbkOSCJEcluUNf2RP6yl6V5IdJXjDTtLiSJEmShmsptGQcAPwE2Aq4H/AfwF5J7lRVl/SUOwfYr72/CngO8Hbg5sBBixeuJEmStLwthSTjjJ4Vwk9oVwh/FfBY4IiecldV1akTD5J8iSY5+dckB1fV+sUKWJIkSd22gu516elaPINYis9lIuHYabpCbVLxXeAGwI4LHZQkSZKkxlJoyei3S3v7s1mUXQ1sAC6Z7GCSVWyagKyef2iSJEmSlkKSsTLJZvxlTMbBwDeAY/sLtuWgSRyeB/w/4OiqumqKcx9Is2K4JEmSlpGkeytsdyycgSyFJOPUvsdnAXtX1Ya+/bsCveMu1gMfA/5lmnMfBhzdt281cMw84pQkSZLE0kgynkKTWGwLPBF4NnAk8Ii+cmcDTwIKuBr4ZVX9aboTV9U6YF3vvq5ltJIkSdJSsxSSjLN6Zpc6vp1d6hlJ9qmqT/WUu7qnnCRJkjQtv1peOEtxdqmX0AzkfrUL7UmSJEnds+Q+pLcL8L0euDPw5BGHI0mSJKnPkksyWu8GfgW8su0+JUmSJM3aiqST27jo7JiMqloLrJ3i2NXAzj279lz4iCRJgs1WLtXv5yRp8fhOKUmSJGmoOtuSIUmSJC2U0L3ZpboWzyAWpSUjyZok1bNtSHJBkqOS3KGv7Al9Za9OcmaSg5Ns0Vf2tn1lK8kfk/wwyQscryFJkiQtvsVuyTgA+AmwFXA/4D+AvZLcqZ01asI5wH7t/R2BZwCvAW4DPGuS874b+Hh7fwfgMcDbgVsD/z7cpyBJkiRpOoudZJzRs2DeCW1Lw6uAxwJH9JS7qqpOnXiQ5EvAmcBTkzyvHfjd61e95YEvJ9kN2BeTDEmSJPVJmq1LuhbPIEY98Hsi4dhpukJVtQH4AbAFTUvFbFwGrJ9vYJIkSZLmZ9QDv3dpb382y7KXAhdNcmxFkonnsj2wN/Bw4I3TnTDJKpruWL1WzyIWSZIkSVNY7CRjZZsMTIzJOBj4BnBsf8GepOGmwD8DuwPPqarrJjnvG9k0oVgLHDJDPAfOoowkSZLGTBLSsf5JXYtnEIudZJza9/gsYO+2O1SvXdm0q9Prq+r9U5z3ncBH2/s3BO5Lk8BsAzxhmngOA47u27caOGaaOpIkSZKmsdhJxlNoEottgScCzwaOBB7RV+5s4Ek00wXvTJMwvCzJ6VV11CTn/U3PgHJoBpUX8PokD6uqr0wWTFWtA9b17hunDFKSJEkahcVOMs7qSQaOb2eXekaSfarqUz3lru4p950kxwM/Bt6R5AtVdcUsrnV6e3t3YNIkQ5IkSctTGP0MSP3G6avuUb+2LwEuAV6dZMpYquoPwEtpZqF67izPfY/2dt10hSRJkiQN10iTjHYBvtcDdwaePEPxjwA/Al6UZLu+Y7dJske7PTjJwTQL/Z0HfGbYcUuSJEma2qhbMqBZrftXwCvb7lOTqqqNNK0ZNwZe0Hf4ucAp7fYF4J+ADwB7VNUfFyBmSZIkLWETs0t1bRsXizImo6rW0kwpO9mxq2kGd0/Yc5rzfJGe7mpVdS7j1X1NkiRJWvJGvRifJEmagx//ZrAG+l1v1d/jWJKGzyRDkiRJy07oXneYrsUziC6MyZAkSZI0RjqTZCSpWW579tS5dZL3JDk7ydVJLklyQpL9Mk4jZyRJkqQlpEvdpe7b9/gVwF7Ag/r2nwmQ5H40M0ldAbyZZvG97YEnAB8F/j7Jk9tZqSRJkqQ/C92bzSlj1GGqM0lGVZ3a+zjJRcDG/v3tsR1o1r+4DLhPVV3Yc/iYJKcDbwB+0N5KkiRJWiSd6S41R88AVgEv7UswJrwJ+Anw4iSbL2pkkiRJ0jLXmZaMOXoocB3w+ckOVlUlORZ4CXBPYJPWEIAkq4Ad+3avHmKckiRJ0rKzVJOM2wAXVdWV05T5ZU/ZSZMM4EDgkGEGJkmSpO4L3evSMz4jMpZukjEbEz+nmqbMYcDRfftWA8csSESSJEnSMrBUk4xfAXdIss00rRm3bW9/PdVJqmodsK53X9dmGZAkSZKWmq61Es3W14CVwN9PdrBdI+MxwMXAdxcxLkmSJC0BSTq5jYulmmT8N00LxOvbwdv9XgLcCXhTVa1f1MgkSZKkZW5JdpeqqkuTPJ5mMb7vJnkz8ENgO+CJwH7AJ2gW6ZMkSZK0iJZkkgFQVScnuRtwEPB84FbAVTTJxv7Ax6tqukHfkiRJWqZC92Zz6lo8g+hsklFVa4A1M5T5NfCvixGPJEmSpNnpbJIhaXnYuHGwBseNAzZYbrZyqQ5N03K16622G6j+uRdNt8TU9G674zYDXXtQg3ZQuG6A9xvfK6S5McmQJEnSspM0W5d0LZ5BmJZLkiRJGqpOJRlJPpvkqiQ7TFPmY0nWJ9kpSfVtVyY5K8khSUbbpitJkiQtU51KMoDDga2AJ092MMn2wOOAL1TVhe3uTwH3bbe928evBD6y4NFKkiRpSVoBrCAd28ZH18ZkfAk4H3gacNgkx/cFtqZJRiZcWFWn9jw+LsnOwH5JtqqqqxcsWkmSJEmb6FTCVFXXAR8G7pnkrpMUOQC4gCYZmc5lQAHXDTdCSZIkSTPpWksGwIeAl9K0ZrxwYmeSuwD3Bt7QJiM9hzLxPG4IPBB4KnBUVa2f7kJJVgE79u1ePVj4kiRJ6rwOzi41TqvxdaolA6CqfgF8A9g/yeY9h57W3n6or8qBwPp2uwT4HPBN4NmzuNyBwBl92zHzjV2SJElSB5OM1uHATYHHALQtFfsDJ1XVz/vKfhK4V7s9AHgesDvw5SRbznCdw4Dd+ra9h/QcJEmSpGWpi92loJkh6t00YzA+DTwS2Ak4aJKyF1XVaT2PT0pyEXAksAZ4/1QXqap1wLrefelcu5kkSZKGLe2/LulaPIPoZEtGVV1FkyQ8PMnNabpKXQ4cPctTnN7e3n0BwpMkSZI0jU4mGa3DgZXAi2laMo6qqj/Nsu492tt10xWSJEmSNHxd7S5FVZ2W5HTgBTRj7Q+fouhOSfZo729Fk2AcDFwKHLGwUUqSJGkpSgdnl+paPIPocksGNIlFgDOr6ttTlNkHOKXdvgo8FzgW2L2qzluUKCVJkiT9WWdbMgCq6l3Au6Y5Pkb5nrQ8rVgx4H/jjcOJQ1oubrvjNvOu+5PzLx/o2ne6xbYD1f/TtYOtsbvNlp3+2CONFf+3SZIkadlZQVjRsdmcuhbPILreXUqSJEnSEmOSIUmSJGmoFizJSPLZJFcl2WGaMh9Lsj7JTkmqb7syyVlJDkmyTV+9tZOUPTfJsUkOmMVK35IkSVrO8pcZprqyjVFvqQVtyTicZkrZJ092MMn2wOOAL1TVhe3uTwH3bbe928evBD4yySmu6in76LbclcAHge8mudXQnokkSZKkWVvIgd9fAs6nWa37sEmO7wtszfXXv7iwqk7teXxckp2B/ZJsVVVX9xzb2FcW4CNJjgC+QJOg7IEkSZKkRbVgLRlVdR3wYeCeSe46SZEDgAtokpHpXAYUMKt566rqqzStGfdJ8oDZRyxJkqTlIoy+e9Qm26hflCFa6IHfH6JJEJ7WuzPJXYB7Ax9uk5GeQ9ms3XZIsjfwVOCoqlo/h+se295Om2QkWZVk194NWD2H60iSJEnqs6BJRlX9AvgGsH+SzXsOTSQdH+qrciCwvt0uAT4HfBN49hwvPbHS9y1mKHcgcEbfdswcryVJkiSpx2JMYXs4cFPgMQBJNgP2B06qqp/3lf0kcK92ewDwPGB34MtznDFqtq1NhwG79W17z+E6kiRJWoLS0X/jYjFW/P4U8G6aMRifBh4J7AQcNEnZi6rqtJ7HJyW5CDgSWAO8f5bX3Lm9PX+6QlW1DljXuy8Znx+uJEmSNAoL3pJRVVfRJAkPT3Jzmq5SlwNHz/IUp7e3d5/DZR/T3p4whzqSJEmShmCxVvw+HFgJvJimJeOoqvrTLOveo71dN12hCUkeCjwD+FZVfXOOcUqSJEka0GJ0l6KqTktyOvACmvESh09RdKckE2tbbEWTYBwMXAoc0Vd2RU/ZLYHbAI8AngCc1d5KkiRJm1iRZuuSrsUziEVJMlqHA+8Ezqyqb09RZp92g2aGqV/TTEf7uqo6r6/s1sAp7f2rgIuAHwLPBD5WVdcOMXZJkiRJs7RoSUZVvQt41zTHZ527VdUamoHgkpa5DRtroPpbjNPXRtICu9Mtth2o/h8uv2ag+jfZdi4TTUoapcVsyZAkSZI6oYtTxnYtnkEs1sBvSZIkScvEgiUZST6b5KokO0xT5mNJ1ifZKUn1bVcmOSvJIUm2maTulkn+JcmJSf7QnucPSU5I8uwkg7XpSpIkSZqXhWzJOJxmhqgnT3YwyfbA44AvVNWF7e5PAfdtt73bx68EPtJXd0fgW8DbgJ8CzwIeBDydZl2NN9Gs5i1JkiRtKpCObWPUW2pBx2R8iWbF7acx+Qf+fWlmiOqdzvbCqjq15/FxSXYG9kuyVVVd3e7/KHBX4CFV9Y2+834uyatoprOVJEmStMgWrCWjqq4DPgzcM8ldJylyAHABTTIyncuAAq4DSHIv4O+AD0ySYExc+w9V9dH5xi5JkiRp/hZ6dqkPAS+lac144cTOJHcB7g28oU1Geg5lIqYbAg8EnkqzQvj6dv9D29tjBw0uySpgx77dqwc9ryRJkrrN2aUW1oImGVX1iyTfAPZP8pKeROFp7e2H+qoc2G69vgQ8u+fxrdvb6y3OlyTAyutf/noJzGQOBA6ZoYwkSZKkOViMKWwPB24KPAagbanYHzipqn7eV/aTwL3a7QHA84DdgS8nmWkFnr1pVgmf2C6bRWyHAbv1bXvPop4kSZKkKSzGYnyfAt5NMwbj08AjgZ2AgyYpe1FVndbz+KQkFwFH0qzw/X7gV+2xnWlmlppwAk1yAk3rxF4zBVZV64B1vfuaBhFJkiSNsxVpti7pWjyDWPCWjKq6iiZJeHiSm9N0lbocOHqWpzi9vb17e/u19vYxfde5tKpOa5OUPwwWtSRJkqT5WqwVvw+nGS/xYpqWjKOq6k+zrHuP9nYdQJtEfBV4ZpL7DzlOSZIkSQNajO5SVNVpSU4HXkCzzMjhUxTdKcke7f2taBKMg4FLgSN6yu0PfIVmHY217f11wHbA3YCHAH8c5nOQJEnS+GjWvutW/6RuRTOYRUkyWocD7wTOrKpvT1Fmn3aDZvD2r2mmqn1dVf15NqmquijJfYFnAk8EnkAz5e0fgR8D7wL+eyGehCRJkqTpLVqSUVXvovnwP9XxOSVvVXUN8J52kyRJktQRi9mSIUlDN04zcUhd96drNgxU/ybbzjQb/fR+dsHlA9X/q5tvO1B9jZek2bqka/EMYrEGfkuSJElaJkwyJEmSJA3VgiYZST6b5KokO0xT5mNJ1ifZKUn1bVcmOSvJIUm26au3ti3z4yQrJzlvJXG8hiRJkiaVjm3jZKFbMg6nmYr2yZMdTLI98DjgC1V1Ybv7U8B9223v9vErgY9McY270KwGLkmSJKkDFnrg95eA82lW+T5skuP7Altz/XUzLqyqU3seH5dkZ2C/JFtV1dU9x64Evge8KsnH29XFJUmSJI3QgrZkVNV1wIeBeya56yRFDgAuoElGpnMZUMB1kxw7CLgl8PwBQpUkSdIysiLp5DYuFmPg94doEoSn9e5Mchfg3sCH22Sk51A2a7cdkuwNPBU4qqrW95+8qk4BPgsclOTGcwksyaoku/ZuwOq5PT1JkiRJvRY8yaiqXwDfAPZPsnnPoYmk40N9VQ6kWe17PXAJ8Dngm8Czp7nMy4BtgZfPMbwDgTP6tmPmeA5JkiRJPRZrCtvDgZsCjwFIshmwP3BSVf28r+wngXu12wOA5wG7A19OMukqPlX10/Ya/5rkNnOI6zBgt75t7znUlyRJ0hI06pmkxn2GqcVKMj5FM67igPbxI4GduP6A7wkXVdVp7XZSVb2bJtH4W6afRepQmjEbr5ltUFW1rqp+3LsBZ8+2viRJkqRNLUqS0c76dCTw8CQ3p+kqdTlw9CxPcXp7e/dprnEB8A6abll3m3+0kiRJkgaxmCt+Hw6sBF5M05JxVFX9aZZ179Herpuh3BuBi4E3zCdASZIkLSOj7hs1rn2lWPh1Mv6sqk5LcjrwApqXcbKuUgA7Jdmjvb8VTYJxMHApcMQM1/hjktcBbx9CyJIkSZLmYTFbMqBJLAKcWVXfnqLMPsAp7fZV4LnAscDuVXXeLK5xGPDLIcQqSZIkaR4WrSUDoKreBbxrmuOzbiiqqjVMMhC8qq4FbjeP8CRJkrRMpP3XJV2LZxCLmmRI0rCtXDE+b8jSYrhuY8277g22HO3Hhr+6+bYD1V932dXzrrtq+60Gura03Cx2dylJkiRJY86WDEmSJC07SbN1SdfiGcSitGQk+WySq5LsME2ZjyVZn2SnJNW3XZnkrCSHJNmmr97avrLXJPlpklclsW1TkiRJWmSL1V3qcJrpaJ882cEk2wOPA75QVRe2uz8F3Lfd9m4fvxL4yCSnuKqn7GOBb7dlPzy0ZyBJkiRpVharu9SXgPNpVvo+bJLj+wJbc/21My6sqlN7Hh+XZGdgvyRbVVXv6K2NfWW/lOS2wBOS/FtV/XYoz0KSJEnSjBalJaOqrqNpVbhnkrtOUuQA4AKaZGQ6lwEFXDeLy04kHTvPNk5JkiQtH6Ne4HuMF/xe1NmlPkSTIDytd2eSuwD3Bj7cJiM9h7JZu+2QZG/gqcBRVbV+Fte7fXt70VQFkqxKsmvvBqyey5OSJEmSdH2LNrtUVf0iyTeA/ZO8pCdRmEg6PtRX5cB26/Ul4NmTnT/JxHPZgWbsx2OB71TVz6cJ60DgkFk9AUmSJEmzsthT2B5OM3D7McCn28Rgf+CkSZKBTwJvbu9vDdwDeAXw5SQPqaprespuA/S2bhRNQvKsGeI5DDi6b99q4JhZPRtJkiQtTV3so9S1eAaw2EnGp4B304zB+DTwSGAn4KBJyl5UVaf1PD4pyUXAkcAa4P09x64CHtDevwY4r6r+OFMwVbUOWNe7L+M0QbEkSZI0AouaZFTVVUmOBJ6Z5OY0XaUuZ9PWhKmc3t7evW//xr6ERJIkSdKILObA7wmHAyuBF9O0ZBxVVX+aZd17tLfrpiskSZIkTScd/TcuFru7FFV1WpLTgRfQ9Dw7fIqiOyXZo72/FU2CcTBwKXDEwkYpSZIkab5G0ZIBTWIR4Myq+vYUZfYBTmm3rwLPBY4Fdq+q8xYlSkmSJElztugtGQBV9S7gXdMcn3VbUVWtoRkILmkZum5jDVR/s5WDNU1Xzf/6TjShUVi5Yvn+3q3afqt51/3heZcOdO2777zDQPU1fEmzdUnX4hnEqFoyJEmSJI0pkwxJkiRJQ7XgSUaSzya5KskO05T5WJL1SXZKUn3blUnOSnJIkm166uw5SdnJtj0X+jlKkiRpaUlHt3GxGGMyDgceCzyZZoXt60myPfA44AtVdWHbR/lTwFvbIjcEHgi8Ergb8A/t/u8B953imrcCPgb8FvjhMJ6EJEmSpNlZjCTjS8D5NAvvbZJkAPsCW3P9qWwvrKpTex4fl2RnYL8kW1XV1e2K3r1lAEiyJfBO4Drg8VV1yZCehyRJkqRZWPDuUlV1HfBh4J5J7jpJkQOAC2iSkelcBhRN8jCdw4B7A8+qqh/MLVpJkiQtC6PuFzXm/aUWa+D3h2gShKf17kxyF5qE4MNtMtJzKJu12w5J9gaeSrM6+PqpLpLkn9trvLuqPjpTUElWJdm1dwNWz/3pSZIkSZqwKElGVf0C+Aawf5LNew5NJB0f6qtyILC+3S4BPgd8E3j2VNdI8jc03aROAv59lqEdCJzRtx0zy7qSJEmSJrGYU9geDtwUeAxAks2A/YGTqurnfWU/Cdyr3R4APA/YHfhyO+biepLcnGaw+EXAE6Zr7ehzGLBb37b33J6WJEmSlpp09N+4WMwVvz8FvJtmDMangUcCOwEHTVL2oqo6refxSUkuAo6kWd37/RMHkmzRnu8mwJ5V9bvZBlRV64B1vftcgVeSJEkazKK1ZFTVVTRJwsPbloenAZcDR8/yFKe3t3fv2/9umqlsX1BVpwwjVkmSJEnzt9grfh8OrAReTNOScVRV/WmWde/R3v655SHJM4BnAUdU1XuHGKckSZLGWNLNbf7PJzdM8o4k5ye5OskPkjxpFvUen+TIJL9oF9A+t10o+w7zj2Zxu0tRVaclOR14Ac0kXYdPUXSnJHu097eiSTAOBi4FjgBIcm/gPcDvgI/0lO93dlVdNIz4JUmSpI76DM145pcCP6NZCPvIJCuq6uPT1DuI5vP064BzgFsDLwe+l2SPqvrxfIJZ1CSjdTjNLFBnVtW3pyizT7tBM8PUr4FjgddV1Xnt/kcCWwI3A46f5noHAGsHjFmSJEnqpCSPBB4KPLmqjmx3H98uZv3mJJ/oWy6i19+345R7z/e/wLnAC4FnzCemRU8yqupdwLumOT6rhqKqOhQ4dDhRSZIkabkZo+l+HgdcwaZjnY8APg7cB/jWZBX7E4x23/lJfkPTqjEvo2jJkKSh2WzlYg8tuz5npJOWh7vvvMNA9Tdct3Gg+qN+r9OiWz3J35eLJksIWrsBZ1XVhr79p/ccnzTJmEyS2wE706xVNy8mGZIkSVK3TLY49KuYuhfPTWjGU/S7uOf4rLRr2R1O0zLy9tnW62eSIUmSpOWpu43RewNn9+2baSKjmuexP0vTfHI4cH/gH6rq17OpN5mhtr0l2SdJJXniJMd+2B572CTHzk7yvfb+uW25SrIxyWVJzkrykSR/11dvbU/Z6ba1w3yekiRJ0gI6u6p+3LdN1VUK4A9M3lpx4/b24kmOXU+bYPw3sD+wpqoma02ZtWF38DuBJlPaq3dnkhsDdwWunOTYrYDbcf0Zok6mWWDvb4B/oJmqdhfgK0k+lWTzttxr2nIT27+0+1/et/81Q3l2kiRJUvf8CLhz29Wp113b2zOmq9yTYBwAPKOqPjpoQEPtLlVVv09yBrBn36EHAhtoml/26js28bg3ybi0qk7teXwc8F9JDgUOAV4LHFRVZ9PTlJRkq/buz/vqS5IkSX+W9l+XDBDPZ4Fn0nw5/4me/U8FzgemWjZiIsH4IE2C8eyqOmK+QfRaiKkKjgfumOTmPfv2BL4DfBG4Z5Jt+45dB5w004nbaWt/DPxrT0IhSZIkLVtV9SXga8B7kzwzyV5JPgA8HHjJxBoZSQ5PsqFdP2PCu4Cn00x3+6Mke/Rsfz3fmBYqyYDrt2bsBZxI0w2qaAaT9B77XlVdNsvzfx64AbD7YGFCklVJdu3dgNWDnleSJElaZI8H/gd4NfBlmrUx9q2qj/WUWdluvU0mf9/ePg04pW/77HyDWYjZpU4ENtIkGUcmuQnN3Lwvrqor2gHeewFfTHJrmrEW/QuHTGdixe9bDCHWA2m6X0mSJGkZSZqtSwaJp6quAJ7fblOVWQOs6dt32/lfdWpDTzKq6pIkP+QvLRkPpOkOdXL7+ETgQe39ycZjzGSYvw6HsWmCs5rJ5yaWJEmSNAsLtU7G8cC/JbkFTSLx3Ta7gibJ+Pck27fHNgDfnMO5J/qQnT9okO1UYNebDszVeyVJkqTBLNQa9b3jMvakSSwmTCQUD2iPfacnAZlWO/r972mmwj1tCHFKkiRJGrKFSjK+QdNFah9gV5r1MwBoB3j/gGZKrdsyt65ShwB3Ad5ZVVcPJ1RJkiQtN+noNi4WpLtUVf2xHeD9WJpB4Cf3FTkReEF7f7IkY4cke7T3twHuCDyJZlaqT+JgbUmSJKmzFqolA5rkIcD3q+qPfcdObI9dC3xrkrr3o5k261vA54DnAecCD6uqJ1bVhgWKWZIkSdKAFmrgN1V1EHDQFMeOYYoWoUGm0aqqE6Y6ryRJkvRnXeyf1LV4BrBgSYYkSZIam60crPPItRs2DlR/i80WsvOKtCl/4yRJkiQNlS0ZkiRJWnaa3lLd6p/UrWgGM/KWjCT7JKkkT5zk2A/bYw+b5NjZ7QxWJDm3LTexXZHk20meshjPQZIkSdJfjDzJoFlDo2hW//6zJDcG7kqz8F7/sVsBt+P609+eDNy33da05/xwkn9eoLglSZIkTWLk3aWq6vdJzqBZ/bvXA4ENwOH0JRk9j3uTjEur6tSJB0mOA84D/g147zBjliRJ0tKWNFuXdC2eQXShJQOaZOGOSW7es29P4DvAF4F7Jtm279h1wElTnbCqLgV+Cuw85FglSZIkTaNLSQZcvzVjL5pF+06m6fp0/75j36uqy6Y6YZLNaRKMi6YpsyrJrr0bsHp+T0GSJEkSdCfJOBHYSJtkJLkJsBtwYlVdAXyPtotUklsDu3D9rlLtoWzWbrcFPgisAj42zXUPBM7o244ZzlOSJElSl6Vj2zgZ+ZgMgKq6JMkP+UtLxgNpukOd3D4+EXhQe3+y8RgAjwTW9zy+Cng3cPA0lz4MOLpv32pMNCRJkqR560SS0Toe+Lckt6BJJL7btmJAk2T8e5Lt22MbgG/21f8m8EKarlV/As6uqmunu2BVrQPW9e7LOI24kSRJkkagc0kGTWvGnjQDvidMJBQPaI99pycBmXBZVZ22sCFKkiRpLHSxj1LX4hlAV8ZkAHyDpovUPsCuNOtnANAO8P4B8FTgtmzaVUqSJElSR3QmyaiqP9IM8H4szSDwk/uKnAg8vr1vkiFJkiR1VGeSjNbxNA1F32+Tjl4ntseuBb612IFJkiRpfKSj/8ZFl8ZkUFUHAQdNcewYpuipVlW3XcCwJEmSRmqLzQb7Xnj9ho3zrrv5gNfW8uRvjSRJkqSh6lRLhiRJkrQYkmbrkq7FMwhbMiRJkiQN1VCTjCT7JKkkT5zk2A/bYw+b5NjZSb7X3j+3LTexXZnke0n+NX0r5SXZs69sJbkkybeTPHWYz02SJEnS7Ay7JeMEmhW39+rdmeTGwF2BKyc5divgdlx/WtqTgfu22z/RrOD9buBlU1z35X3lzwPWJnnuQM9GkiRJYykd3cbFUMdkVNXvk5xBsyp3rwcCG4DD6Usyeh73JhmXVtWpEw+SHAf8Cng28J+TXPrnfeW/CNwL2JcmOZEkSZK0SBZiTMbxwB2T3Lxn357Ad4AvAvdMsm3fseuAk6Y6Ybtmxs+AnWYTQFVtBK4A1s8lcEmSJEmDW6gkA67fmrEXzWJ6J9N0p7p/37HvVdVlU50wyWbArWkSjcmsSLJZu+2U5KXAbsBHpws0yaoku/ZuwOrp6kiSJGlMjLpv1Lj2lWJhprA9EdhIk2QcmeQmNB/4X1xVV7QDvPcCvpjk1sAuwNF950ibWADcAjgYuAnwjCmu+Ym+xxuB11XVB2eI9UDgkJmfkiRJkqTZGnqSUVWXJPkhf2nJeCBNd6iT28cnAg9q7082HgPgkWza1ek5VfX/TXHZg4D/be/vADwYeGmSLavqxdOEexibJjirgWOmqSNJkiRpGgu1GN/xwL8luQVNIvHdqrqiPXYi8O9Jtm+PbQC+2Vf/m8ALgZXAHYDXAO9J8uOq6i8LcE5Vndbz+LgkN2qvc3hV/WSyIKtqHbCud1/GaRUUSZIkTSrtvy7pWjyDWKjF+HrHZexJk1hMmEgSHtAe+05PAjLhsqo6raq+XVUfBf6OpmXjsCSzjfl0mt5td5tz9JIkSZLmbaGSjG/QdJHaB9iVZv0MANoB3j8Angrclk27Sm2iqn4OvIlmrY1NFvqbwj3a23XTFZIkSZI0XAvSXaqq/tgO8H4szSDsk/uKnAi8oL0/Y5LRegvwHOCQJJ+squt6jt0hyR7t/e2BhwBPB05jmqlxJUmStDwlzdYlXYtnEAvVkgFN8hDg++06F71ObI9dC3xrNidru1S9GrgjsF/f4f8ETmm3T9MMHH8N8OC+ZESSJEnSAluogd9U1UE0sz5NduwYppgNuKpuO805D6OZEWri8QlTnUeSJEmNzTeb//fK16yf//e1127wu97laiFbMiRJkiQtQ0smyUhy7yRXJvmnSY5tleSkJF+dw+xTkiRJWsZGvcD3GC/4vXSSjKr6P+BJwH8l2a3v2NXA3sBtcAVvSZIkaaSWTJIBUFWfpxnn8akk2/Yduxh4OPCMJA8bRXySJEmSFnDg90KpqvcC753i2LnALRc1IEmSJC09Xeyj1LV4BrCkWjIkSZIkdd+Sa8kYpiSrgB37dq8eRSySJEnSuFjWSQZwIA4UlyRJWnbS/uuSrsUziOWeZBwGHN23bzVwzAhikSRJksbCsk4yqmodsK53XzI+GaQkSZI0Css6yZAkSdLylDRbl3QtnkE4u5QkSZKkoTLJkCRJkjRUdpeSJEnSsuNafAvLJGNTWwCc/YtfjDoOSZKkkbt2w3XzrnvO2X/+PLXFUILRkmGSsalbAzxhn8eOOAxJkqSxcWvg+6MOQovHJGNTJwJ7A78Grp3k+MQ6GnsDZ8/j/KOsv5RjH7S+sS/N+sa+NOsb+9Ksv5RjH7S+sS9c/S1oEowT53HuhWV/qQVlktGnqi4Djp3qeM86GmdX1Y/nev5R1l/KsQ9a39iXZn1jX5r1jX1p1l/KsQ9a39gXvL4tGMuQs0tJkiRJGipbMiRJkrTspP3XJV2LZxC2ZEiSJEkaKpOMubsIeFV7u9TqL+XYB61v7EuzvrEvzfrGvjTrL+XYB61v7KOrrzGVqhp1DJIkSdKiSLIrcMbXTv4ef3Wnu4w6nOv52U/O5KH3+38Au81nIH6X2JIhSZIkaahMMiRJkiQNlbNLSZIkaVkan7mcuseWDEmSJElDZZIhSZIkaahMMqQFkGRle9uZltguxSJJ4y7Jiom/BQOeZ5skfz+MmHR9AZKObaN+UYbIJENLTpJOjyVKcg/gm0lWVVWN8sN9kh2S3AqgnK96E6NOvObzASTJlkl2XIh4ND6G9OF2aJ8RhnGuuf5/TbJFkpvMp27POeYVd5IbAv8D3Gk+9XvOsx1wBvCIJFvNo/4wf4bj9PlXi8AkQ3OSZPMkd06yd5Jbz/McKwZ4w98O+GmSB82j7jZJ9prndWcVb1vu/wH3Ab6QZMdRJRpJ7gb8F/A/beKzZLUfFob+wXoUiVf7XPZqr3/dHOtuB/wSePx8fqeSrGzPoTlKY8XE/VFcfxGusVmSnZLcFaCqNg4jWZk41zzjuX2SJyTZZS7/X5NsCZwGvCHJTnN9H+75cL7tHMMmybbAN4B9gX+Ya/2e82wHfB84D3hNVV09Q/ktkzw6yTOS/GOSzQb5GbZ/q7eZSNTa19DPjZq1Tn8j3CVJVs71A8G4ab+Z+QiwM7AK2DfJRTO98U1iS2CudSbecE8D1gFnzbHuSuDrNG/WxyfJbP9gJdkGeFuStVV1yjTlVlXVuiRH0iTwbwK+kuRhVXXRXK7Znu/2wN8Bq2me91FziPl+wCdp/kB9rqp+MNvrznDezYCbANsB51fVlfM8z1xe/82BU4EfJnl5VV0wn2u257oB8GLgrjTvf4cDJ1XVpfM835bAY4DvV9UvZlF+G+C/gYcm+XhVPW8O19oO+C7wC+Dzc02Q2uf+BuDOSZ5bVT+ZQ90tgUcCNwMuq6qPz+XaU5xzxXw+eI5Ckq2BZwM3TfK6qrpqmrJbAPcEbghcUlWnDXjtif8rWwN/mkWcTwIeANwuyc9pfjf/axbXuSHwAeAebd2TgEdU1Yb5/Kza1+EBwKNpvs2/huab/ZNn83+4jecw4K+BGwBvTPLhqrpmNtevqmuS/A54OnBZkrdU1e9m897T/j99VZts3SzJB4EPVdW0r39bdzvgR8D5wGXMI0lpz3NDmv/v5wFPrKppV9NuE5svAncBbtTuPqH9+7N+Hn9/tqH5G3YPYJskXwFe2iYtczpXt4XudVDqWjzzZ5IxS1V1XfuHdlVV/XrU8Sy29g3su8BvgP+k+WC2bg71twT+Htgb2AP4Q5JvAu8AfldVG2Zx/dOBnwMHzPWDZvvzuxy4ZZLNq2r9HKrvAzwT2CXJy6rqu5PEtwtwepLXVNWbknyUJtF4A/NINJL8DfBxmg8WE9/g75HkxVV17Qx17wkcAxwJvK2qftnu37z9YzOvD3ftH73/pvmj81fA0UneXlWnzuEcu9H84b0WuHCW1bYATgKeQ/Nh4U1Vdf5cYm+vvV17nhvSvPftAPwt8Pok75trwtS+Hh+n+UB5QpKnTPdFRPs7/C3gYuAg4DNzvNYPgZ8Bz5jr82+v/TVgA3AOzQegudT9InB7YKd236OBF1fVb+f7gaP9sLIZsGX/a99+WH4isBvNh6yjq+p3c71Ge64tgfu28Z8K/GYuSWX7/I8FtgfOZJq/m23ZTwJ3A27e7ntJVb1lnrHfADio/bC7RZIPVtUx01z7a8A2NJ9SLgSeADwtyWOBQ4FvT/Ze2/7f+D/gIuAommTy6cCngMfO9YNl+/t6BHAHmvevC2jeM/4eOCbJu6rq+Gnqb9vGs44m0fhEVV3cc3zaWCbe46rq75J8Avi3dv+bq+rC6eq3r8WpNF+G/R64JfAu4LbAi2Z43tvR/D/9JbAG+ArNl0RzSqrzl5aQ1cAL2zimfN491z0XeB7wU+A/aP7efjzJE+fynt+e71s0ieGPgV3b817SJhv3SfJDmt+zH1XV5bM9t5aZqnKbZgP+Ffin9v5ngfcB9xl1XPN4HvcB/maedbeiecP7Ok0rRtr9mWX9GwKfp/lW/QyaP2I/AzbSvDHuB2w1Q/3v0yQ4N5jLtduyK9rb/6J58996Hq/Bi4A/tq/BPSc5/lftc7wKeF7P6/Ysmg+V3wN2nE3swP1p3tw/SPNN4N8Bn2tfr2fPUHc7mg+E/wPctO/Yyvb2ln37Z3wt2/P+DDgeeDXw+jae982i7tY0fyi/ClwJ/IHmm75/ncPrv1173Y3AO4FbzPHnt237s/9fmqRgFfAg4DvAr4Hbz+N8ZwIn0nSH2HYWr8E3aT4E3qnnd3LlLP//fI/mW+zte3+nZxnrNu3r/b807wObtfs3m+Xrfg7N//8nAg8DPtb+HN4/1/9H7TmfAuza3j+CpmXp1n2v7Sk0H5Qubq911Dz/327bPu/ft+e5hCbxn9XvT/van9me46G071M9r2H4y/vhdsDZNB/OXgQ8n6bFdcb/t9PE/n2aL1dOofmgfhXwsCl+xme0v1/35S//11e3z/fi9lx/O8V1zqV5b9ulZ/+HaFrNZv1e23O+H7Xn2x/Yod1/L5pvxjcC3wYePEX9G7S/718Hbtfz+m7RU2bVTP8P+sp/or3uW4GbTfzspvh9n3ifuGu7b3eav/0bgX1m+L/yS+A44Obtvq+2z2XzObx+E//nzqR5bzqt92c6xe/oT2ne92/e87u5Tfs6XwLcZY4/v1+2r//qnv0/ap/P8e3v9beAn9D3d2apbDSJUx138vfr1xdf06ntuJO/X0DRvk8u5W3kAXR5a9/s7gd8mOYD7onAU2k/6C6VjabpdCPNh7ud51F/P5o/dA+exx+c7do3y+NovlXZst1/M5oP4Oe2b6T7T/ZG3Nb/eRv/hcBze47N6oMWf/mD+9j2PLNKEmk+QGzW8/glwOVMnWjckab1YAPzTDRoPgReC7yW9gNlu/9u7evwid76/ecBbk3zze+z+p77zYGXtbFfSJPAPHAOP8NzaP7w3pq/fEB+N803jTecpu7Eh7z/o0nCXtHWu6j9WbwP2Gma+pv1xTHnRIPmj+3EH82b9/7+tP+fN/b+Xs3ifFu1v89fo/mmdsakm+Zb4dOBe03xGt2P5hvTG/f9fCc+uF5Ok3h+uP/3eoZYV7Sv9wlMkUjRvM9t8n+J5sPLOe3P7TY9Me3S/kw3Anef7evW1r0VzRc3b6H5AHsK8O/85cN77+/avWlaH57ZXusJ/f8/Z/F7ezZwcvv6PxP4Ms3/rzWz+JltTvPh8nofvqcoO/FafRG4Tc/+B9IkOOfQvOfN9ouZ7WjeG48Ddmv33Q/4LfCO/tcBeFv7PHt/Hzdvb2/UPveLaT4g9n743pbmA+MptIlyT73n07ReH0qTcPwj7Qf0GeKe+JB++/7fK2Al8Nz25/mF3teq57m8hubD8T169ve/D19H+6UZf3k/2prmg2N6z9dz/+j2um9hkkSD5v/BWe1rtHXf6/TItu6bpnje29O8Px9H81478TP4KM378ZRfok3x+n2N5v/KQ2g+e3wX+JtJXs8VNO+tG2lanCb2b93evqb9/ZvVh1Wa3+OJL5Nu2u7bor19D02y/6z2d2MX2verpbi1vyv19W99v35zyTWd2r7+re+bZIz71vMmsWP7JvEr4KBRxzXA83kU8F/zrHsEzbdkW86ibO8fg4lvRI6j+UZq4o/BxB+xLWm+HTy3Pf/t+177bfnLH+5H0/wh/D3tB/i2zKSJBs0HwV379t2xfTP++xnq9r+Rb95zf5NEo+8P1bwTjfaP009oxqtMvMFv3vN6fJ7mG7lbALeb4vf1vjTfeP9L+3glTcvI2e1zP6+9xnqarkN3mOHneYO27nHATWk+BEwkLgfRfLA5mOZDztN74+EvCeJx9H2DSpNMfbSN6YN9r+GWwF5TPL8b0fzhnHWiAbygLf9m/pLkTjyHB7Q/q/3m8P/h4TQfRh5MzzfZ7bGdaVo29gLu1LP/fcDp/c+J5gPcd9r4zqfpfnW7nt//s4Ev0UwmcFhb7iM955g20aDp2vOt9uezgr/8HwzNB8+P0XzY/zg93yy39T7dXu/ePfsmXrfX0LTs3W4Or9vEz/BuNInuL+n5Zpi+D+o95e9E8+F673b/DrP4/79tz+/eLXv235Hm/+AJszjHX9F8ezvRkj3x3EPz4e/lwFqaLy/+jyZ52WXiteo5z6doPrhNmYxPEvuZNO8xN+39GdN8+HsrsGf7+zeRlJ4KvJ8pWqdougYe2v48D+p5Hge0+47k+t9ab9/+7p1DkxyfQ/PB/jDaVoQp3ismPqRvNdXvZvt7+Nr2uv80yfFTaP7mTJb4Htq+zpfSfMFx33b/RGvdRppuiG+nabHsb82dskUDOLA9djJ/+Rs10XJ+O/7/9s473q6i6t/PJEAI6YARBA2IiNRQLCAiCthQfK0IKmABBARRUakhFKW+CIqoIFVeXxReSxQEaUFaDMUgUqXjj9AMIZAEEpKzf3+sNdlz9tnn3NNy77nJ9+GzP+Hus6fs2VPWmlmzxlYEjqrTxm7HFKM1C3EejvW169arZ0k8K2Erhn/F+zX/Rh+gRNHAFKExwB6et1uo7Wf/7HVpbKO0k+dj33oIMKJQH2Zi48ccbMLjaeDz2BjT0uRjL1xIyeifch7oDPTy5Q38JGyA2MM7vt28M9gEMxn5AYXZmF6/SGZo+nhuBb9uA6b4vXoDR+xUN8UErVWw5fn7aLBU7GX5Je/YfprcH+md2dVJh7s1Npj+hwYrGh7nfd4R3okJ50dgs5n/wQaqGtMLbPAb6e97FjbjOi7tbP25wzGzn+uBt5fE00jRmIUJOeOKefdB40R/Zlqax+Q7zAHm+qByMWYnO45c2BiNCY2PYXbE52NKx2PAkf7MGv5uFcy+v1Ed2M+f+0Ph/nBvF0/7d57lz/04+X4PYTPHqSnMioVyutjDHeL3RgB3+b1bsdmznQpxDMH2BVX897X6eIcNvCwWA5OpHjx/jK2qrNkojkJ8R2Ibeott5XQv+4pfD2ImWUM8n09jdt0rYALQdH/uIUxAvMH//hk2qM/HZjTX8jTWxJSVphUN/9ZzgROTfI7HhI/FmOIbTRdnAtsmYQ/FJlcexvs4clOMP2DK6pgW+54h2MrwPZhyehLWl66ECWrFNhMwAe95D1PB6vKpxb6n8C2m+rNvK0n/MuDyemVH3pd90OP4cPLbCEwxm5N853leFi9gylqc+Y2C6jRMABzRRPkETKmsALuVfMtnMIF/oX+/KzEPRouA/cvKIwk/ARPMf4/1z1O9Th3l6V1EPgFyD9bXbuZ18Q3YysPL1DG7pVxIL+37Pd6nMaF6qH+XIVhbXYRtdF5S3/z/d/X4P+X/f6+X+Tae9iv++x1YnV2ECednYMpUVBLPI1c03pDEPwrrH+Z6vtL+9zRMqZ5Q8i7DMKWvZkUWkxsqwIYlv62CrdaNiGWFreiPLzw3hGpFYxusvdwF/MWf+SpWJ2/FFQ3gaC+TbWM8TdS/9TEl7WXcxM/Tj/Uhrrh+BqvzD8U6M9gupGT0TzkPdAZ6+cI6/N/is17YhtffYwPsk95JLsJmfBouI9eJv9QmtYXwe1FiY9tHmFSofWsfz8bl8ynYTGJfJgNDvSPaB9vgN887oR2T8iyzg30dJqje7x1vwJSVX5EIl/7sNjRQNLxDHO6d+96YQHE7JgQv8A7/SWyGcxI2QK/j6Q7FhPKKf9dn/R1uwAax9yfp7e2/XYvP9Bby2UjRmO3vEIWZdKZyODbov4xt0oz3L8cEhF9gds1X+t8V74xOS57dCBMcF5ObJG1XUo5LhPsG33QtbOBdBFyafMd7sQFtc7+3iZdFBbPdf8q/0SZpeyqJ/+2Yudyj2Cz1nh7HHEygusv/fhoT4PbBBKO1MAUrmj8U68lKJIM1NpN4lj8/2e8dja0afaT4Hfook694PB/HlKkdMcWxggkBB2NKRQVTDF+H1ceXsfZwIyawPIXNHI5M4r4e609GYasPa5d8j5/RhKLh32k41l/NwxSzU7CVw3lYXZ+ACTdRQJxEdR+xP7lgGxWNYzDhpcpcpUF5pSs9IzEh8EeYl7IvYx6NzvU44+B6RfL8fV6uh2DCzYOe1+PqpLe6l2t8xzGFd/q116/H/LudiCkUwwvxbIPV+/Mxc5ndPS+Lsfa4DbaK8UdsZv33Hu9vyFfMYlltUa8NlOT/vZjCNwPYOfmW93jZfRirc6dhiugVmNJxdoO6EIX+32ArE5/xMjzK758e6xTWD9+MmUam324HGvQZ1ArpUdmqt7pyNXB74d4aWJs8o+T5zUnGu+QdzsQmV47F6vYMrJ18DlOcnvLnnvdv9Ely64SzScZuTIk8xuvOjX7vO9jYsUuD8q03+fYhT7u4Mhs9Nc7AJ5wKvw8plH1R0Xg3Ni7PBXbyZw70+jcVU6QWAJ9tsk8rrsb+EeujJmFjyS3Yamo6zh5JiRnjYLmQktE/5TzQGej1CxuAXsFWMA7ABKLo7QRsBmMxcEQb8VZoY0Ogh9/Kw19FE2ZMJeGvxISedxTur4KZl1yKDa4rYoN7Bdu8W3fzJWaWcze+MREzcXoME6x2Sp5LO7Q4M3omJsyMpVwYTWe06ikaY708Ni8J/xZMoI0bMS/BBIOKd8ZPYELz/2DL1QsxheAwzKyogg3od2Oz35tgwt6TXpZbl6RZpmiMIB+0jsYGzmlUC8RR0ZjrnftVmJC3FdUmG9HrSYYLs0kcIzBlY8NCnqJisxsmzNZsIi15j/Hkpha/xcwSbqHWnjoKIQeSz8qfAKxW/O6FcMdibWxD//u7mEBwNSbEvQdTEB7BTA/iQHoiJgy9iglJa3v4FTHh8QKqTWVSReNm/54tD5DARC+DVzGhpuJ5OwwTHmL69/q3f6uHO8jr1hOY8PNO8r0I8bv+n4erseFOvl3Tiobf/6CnO8/DXIsJaKMKz80hF1TTNro/puT9C5sVfhXYvdE3LcQ7ulAvr/XymeBxP+llcoGXy6tYnd4NcwwxDZsIiALOG7EJgCX7CErSfB22evmaxznW709OyuBKjz+uSDyNeWNL4zku+b2CCYX7UW2y9XH/7dtYnznH/z3e32W3FsoqfuN3Y23gDmzC5h6sza2DCdSzsTp/Lvmq32PkZpb16sJU4Fr//1uw/jCmGRWN56kW5uPvn/Qyen+D/FcJ6eTKTY2i4XVgSpqOh7/ff1unj7LaHmvHcRJrpH+vVzCvTrFNrY9tOv+pf7855HvCHqKwNy15h1ew8X4hpmSmk0ErYJ7WNmvU/rBxp4Kbryb5/DnWv78DW4neBVMet2vwvkVFYxd8X1PyzIHYuL5kMqXZulf41hO8DDOsDT3saY5Mntnf89L0pvJeunAl4/pbZ2RPzV7QU9f1UjKWnwvbfPUX7xDmYTOBX8M6909jS/mP04JNt8e7BTZT8L9t5mslbEa14WpEg/C7YMrROsm96Kb2Zkw43g4b0MZgA9Iz2IBaZdfu/z8OM315FJtZO8fvf8HvLVnR8PtFE4frMGH+XZjwfQ426G1PblpUV9EgNxO6ndzzSCCxQfd/T8QEmlUxYWUD75hvwgbFTTEB7H5M+NnAw23m5X0VNssYXftF4eMPlCh7mD15VDQO8nurep05j3xWvKgkREXjKf9OW/v9OGivkTy3N7n3mNKl68K3Ws/L6QqaWEL3MFHReBZrC2snZRzL9lP+PT7sf//J3+0kcuEnFV7ju+zrz12a/DaJXJlYPz6P1cnJmBIzj9z70H/ITT1GYDPlCzCheO0k3nX83kLMLKChgo4p3ZMx4X8K8DG//w5MMb4Oq6frk8/cjvH0F2ED/laF+MbWSWtdrO39GquXaX0fmpYfZr7yM68bF8dn/P4OXk5vScKvj81EfqRO2u/D2vcZmBKzYuH3/bB2XCGvx32tYEzyOvBPzKx0rN/fB2uDr2ACzPnYqs3xWDu7wtOZi5mUjaa2HV/tv9X9flidjYrGTzCFdwE2wz2i8O4HY+YfF2L9SWpG8ylM8T3Qv+1IbH/Ptf69foq1i3d7Xs8jN6f6YjNlVch3fNdtyYXhf2L9VeznrvXv9EOsn/qeP3cN+abfJbbyWDvdwMvscL+3u4c5Ikk7Tn5dUKg/q2Iz79NxsyByQXvTQv7rKRqpqeSHMAVvP6zPTfuFfbB6fSbVbSD9/zWwdlKcoBlJriDcTPXm7VgWO5Kv0D2CKYLXFOIfgU1+PImtnK2UvPNIbFX1vmLY4nfG2uMC8tXTUdjqyXxsDDuJ3GwyrjxPwdpBmWIWFY3HsfZ4JoVVPaw/fYnCHg1qx9yVvQ4cjI0hVe+AjROXe16PpNrz2OpYn3g9g3TzN1Iy+qecBzoDg+HyTmV9fGMcJuDvgAnCl2AD5qZtxLsHJiTVeCrqp/daJfn/EeReoDajekAYgg20D3vHfADVNvITsQFoMTYDdQm25D86ec8qRYPqQeU9mHIzHZuxe4ncFGi+d+jRLr1M0XgGM4dKXQem8acC9kGY8JcKEd/ytH6ID8zYrN0jHveWhXJbE7MJ/m9MMHmaEpvb5PkNMDOFxdiMWPD3/YmXe1QS/k61ohEF3NkkezSw2bGXge/53w03lif/Dsf2N9yMDfDFQWU4Jkidgyl6OxTeYw3yjZe/Se4H/20WJtDtl/x2uZftiSSKRuH7XIwJBc9TPVgeQb73ZetCXlbG2uTe2KC9WeH30VR7okoVjfX9XsXfp1RQ9Tj+4fUgbnicjc1YVwm9JWHfirWXDFs9SdtLVBhSAWhtrP4v8GsRpvimAuAKaZrkisarmDD/S/KZ+cWY4nUpJRt1qW5Hb8KU2UXke0m+R2E1xevGE1hbnlCMp/Ds1ZgyPg2b7YyrYFFY2x4TUqZj9fEbmCDzA2wC50VMyZiShBma5Hc6JmANxertl7D2eBDVHsRW93oUZ3e/nNZb/3cU5S5za/ZQeJ34J9aX3Y/V2YXYKsKEJL6oaFxCPilTJjSuhAm9nyKZxU7y9i5sNv0BbOP7I5gSNgET8KdgyvJ4cu9JV1FQZP33szHhdN2kHB/GFPYxybOnkSsaccw7x8swunWtK2gn48kxWPu9KSmDof5N/hfr4x8shsfa56XkplBFl9sbeb4XY22lr7Rj/Vkp+YYP+G9HY0riAnzfGXnbHokpGkvi6Sts4dsNxZSzf2P9/3DyPXLbYnXuZmw1emevA1M8vXv83orJO+2NCcZD/Ld7sTEw1setkzzsh9W/ms3gSR29BevP4kTZVGonF9bB+pa5mPI3EtuDcjbWVgatEIyUjP4p54HOwGC9sBmt07CB+cfJ/VbOb1gdWzZteT9Hl99lKDYo3ki1h5GqWWdshj/OuvzLw1yHLekvIN8ouGJJ+D3JFY3UdGo1TMicjy357+0d2WqY8nKNp3cjuaKRKg3vxwb5+eTmNnGQWKH4Lt4pv4q7+/N3HwOcjA1aPyQXZj7p+X2GOq46sYGjrgvW5LmJ2ErD37GBKcPdIVJHSUjij3s0pmGKR8tncniHepvHcQX5gB7/jatYz3r5VDCB8lOF94grGukejWEed0a+j+ILSZgaRSP5bWNMifiF16XZwPHJ71FAvI5kkz31hdtGLm+LKxpx38TR1ArU0TPa9dSeq/EUuSe0ose0FTCF61xM6TorSb/UExbmGvQZTEGbign4PyIXzn+XttXCd10TE2QXY23zMMyT3O6YiVScBd86DZfEty2m1C/yNL+L1fnZ5G0kLdNoOvUovgpKwUzE0/0XueefdcnNuyZTK6g/hykVJ5Gv+h1FtaAezcrGYgLvk5iyXU9BSCdQxmMmivOwlYqxhTryKM25zB1N7gp5ImbqOMXz+zTV7baoaKxcLCt/5hqszUVB77vJ77FubYMpM3Fj8+aYwHsOpkhu5M+NwRSOCiaEn4CZG07C9iL8h3wPVWryUgE+WnjXqGhc5OU5n3xfSbNCej1h/yIvszsL4VPTqa3IvZtNw4T97bAVpLlYn//TNtIeRwtngvg3iorGja2ETX6/GRvbzvRv+B6szl2LWTSk+4VWx8bApzAl4u1YnzLNy+KPWNsYQu75aicvz9MK6e7n3/w+vC0W6vFUzCRxC/J6c05J/ieQKxoHkCtKW/Q17vXyhSsZU6fNyGa+uKCnrqnTZkjJWJ4vzGToJGxwOA4TJPZqM66mPD0t5fdZDZs5OZry2bZ0Zub1mKBwEyZIXI8JN9MpUVAKHWjZisYFmIB0KyY8l7ktvMg7wMvITaei/e5jmOD3jpjHWK7+fc4sxPV6TBiZXLg/GhvAlqxo+P1U0diskEYz5xSkitaFmCK2BTZQ9akk+G/DcY9G2GA2jBZc5fpv0WvIQUn+UwUjDjrbYYPKXuS268ML75EqGpdhs1rRw85d/u8DuN2+h4mKxknkezTGYoLYfZggujF9KxpbFcuW1lzeFhWNuKJxWHI/1qvraOJcjTR9TJm+BJvF37wk/XQFbTSm8C3wb7YH1asbb8K8QFUonykNnvZNfk0olMGqmMLyPCbUvyF5j9WwCY5XvGxTxX8LrO2cndxLVzbjPooXqd2X80ds5nY81crJJpgy8xeqBfVxmJnRPz2+FzEh5ijMjCkV1Ff3MpzveWxFQVgD8wq3EGuH46h/tkWNy9ykTlyPmchOwtrTo5gCUyER5JLvez6mbF5BsmJG9cF9BwNfx9pBBTexKjwbzSZf87KPEzPRjXZs0yMxRfFmcsXlGWwm/W1JvQnJd3nKy2Bc4ZvFg/NexidZaPHgPmqF9F96nNPrhE+VsAleNo8l7/Ka53eHFtOeitX5+2n+TJC1kniOx4S+2U2GjeasK2CKaAVr49tSfXBe2Tg5gtxb1J/9XlT6zsHayk2Yt8VoLXCO/75zoQy+hU0WrZPUjzT9FZL707EJwxqZBOsroyIyj5J9j4PtQkpG/5TzQGdgsF2YkHqxd5bv83s7Ybb1LZ9I2wuX579C7i2m0QFVKyUd4yr0oaD4c2kH+kVskHoAG6gq2Cx4KszF+NMB70psgIk28YF8Fu4sTBCOs1jDvCO+mWrhYYjn+XZ8434hn80oGpv2VUYl8QZsoJqCzfKuTOtKwnBsteWaJF+txpEKsDGOUZhwM5WCbS2m2LxGvv8i/Y6vxwStCia4be3f4deY6cq/MSV0tyRMVDRO8byfhQme6ebJTWisaPyFarOAdlzepr+t5/nZKLn3TX/2VPo4V6OQ/rNe7n+j2hNZqctdL/tnsfYzkUTgSNJbMym3Y0vq1vswYfWjVCsfqcnHd6lVVLbzsp9P9V6pIVgduoEGJ3pjziAeoNpuf2dMMHqC3BPVMHIvVw9is6HXU93ed8LMvDLMJGuE//tZTFGKgvpznt8taV5BGJf8tia5++nf+XdKz7aIqw1lLnOvJu9rooe4CzHFZmtMqfwqNgu9Hvm+sJGYM4mnku9eL+/be324JH5D8rNm/oJNbr3o5bQY+EChbg4p/LsRuQOGW7H2OpLalaef+HeLK8FpP3EU+eTKKNoX0o8m33Pwjz7CX+jh42TEOGwP1OOYILx6i2nHfupucqcfzZ4JsqZ/i+jK+/IWwkZF4zCsTcTV5ArVB+eVTaythpmUVYCPYG3yJq8HE7Fx5D5PZy1gQ6wOXk/BCyT5XqghddKPZrjfx+rLOiTOGpI+5S3YhFLLpuG9eCElo3/KeaAzMBgvrKMem/w9jB5YkejgfaKbvbhht5Hv+Ldgpg/jvNNqSkHxTioOCh/DBrXo7eYs6ihoVNvpzgXOS34bh82ML8aXijEl6B5sIFy7Tpy/9Q56xWJ+aaxo3IcJ3S03fO+4X0g7aFpXEoYl36EZRWMW1WdylH3X8/xdDyIXsqJpwZf9nSdiAkvRf/va2FkKcWP2dh7XdtjsdNw0mSoaV5J7LFmECX1xNjYKR5tiisZLwPeTsIeSb4yMwv+efm8Orbm8nVCsY4Xv8mOaOFejkP4s8kMP+0p/fS/bWVQrOFVuK5NyfgITpFYp5PVwTPlqtAK5KibQzicXGMdjdu8LPI5xhbDXeZr3YrPg3/V8pO52y1xv7o8J1I+QHNSHCeBxNnpJeyevx7v594uC+jvJ9zhEQX2m142VMHvyZhWE1L3zeGxW+jlsdWGWf6cRSVr1XObe7HXiFGyVKgrKJ/nvcU/Ly57+t7FNukPJBc6yvKeTKX/GFKCVPS8vYYJfVPS383J4ARP410zLsaQOvRFT+h/yvD3i+U3r3PqY8nJJgzYRaO/gvpi/UdgenGbDVzz8G7qQ9uv8me1o/UyQ99PheSJYf/JmGhycR8m4iZlnLsacpwRsIvN2cpfbR2DKxrOYB7m4ovyVQj8elfy66ftzl2KmsvOw/utKT/ut9erFYL5wJeOGaTOyp19c2FPXDVIydC1Ll3eA83AvNX6v3im4J2CzYlH4b0VBWR83X8KEii3JlYRTqHNYlXeScUbvD4XfUqXgdGwFYxolB7RhA9222MxWo43a9RSN3bDl5HY9eq1Scq9lJaE4IPURx2ySMzlK0l8Hm916BhOYRyW/nUEuGFa8/M/EZol38HIaSuLTHTvb5Br//49jguoSRQMTQmMHGgXyl7GB/GTMFntFTBi8FhvsTkjy9G1stjo132nX5W06i7wSLZyr4Xkc2kH6P8fs5EuF/CQfMY04GzsxaRMBm32cgwlBzRwst0uhnv8UqzeTyOvZMVibvA2bOZ5JrkjdB+xTkk7Zvo1HvFw/5PEdQXV7H02uSLUiqK+CTRS0oiCkq2KrYzPF6b6JizAh7B/Ud5l7G7l53SlJnViAKaM7Y33ET8hnzedR68whzXvx4L4rsBWiuBJ7Bm76ldSF4djs/fPUUTRKvs94zBvi1VidnOf5/Kj//n+YgL5JsY+hw4P7OgzfDSH/4x6unTNBzusg7Hfit6X+wXllm/2jK97oeXBfv78apnBenYTZEOuT55ArcY9TvZG/UfrpwX0LsLp5KjbJ8CR5338uJW61B/OFlIz+KeeBzoCugb+wwX6qdyb7J/eLy+pvwly1nk4+KLaqoNxW6JBTgf5Uamdq02cfAy6ok/9TMfvyWfjMeuGZOBt6J74M30SZpPlaYvO8FMq/bSWhjzhGkJzJ0SDs2pgy8yywp987ApttPQWbgZ+EKVjzyVci/ogJAekm269gmw239L8/Ta5ofA5bfToGE7TPwjzrfMsHvFke7xOY0BbdOz4NnJyksTJm331Gcm8S7bu8XZEWztXoYvrrkgv5R1LiCpJc0N3DwxU9ncU9CO+t02aj4LKlP/d7bBPnVZgQvjG5u92vk7t53QPbi7AC1hZ2JVfiNynmsyTf+2P1KXqJ2x9biUvbVcuCelIerSoI0yiYgCTt/HyPZw59u8xdPcn/bVifsyuFPs/zsxXVqzllef8N+arcZI/3DnIFe6Hfewozu4n97hBaVDSSfHwCq9cLMYXvl9jqWgX3WFd4vhMh/ZAOw3ci5B+S3LuFNs8E6SRs8tsUyg/Ou4VqRWOI/1bBVpdmF+rQplgfeVjhG32afM9Ehdr9WfXSn0p+cN/u5JvJh2Ht/wtYfR+UZ2H00Q6kZPRHOQ90BnT1xuWd10uYR5uaAwKxwfUczNY+tcNuW0EpxFFX0fBnPoHZ+C85Abfw+1jM/WWcJU0F31HYUvJcCocP9lEmo8lnWL/fbLg2y79tJSGJo+GZHH2EjYrG/8Nms17FBst0xWAEpnxUMIH7ev//P1E9oF9F9Wzbf2EbM5/H3DSOSb738eTC17qY0HwRJhg+Q/Xm1WiL/WZsZq4rLm9p8VyNDtLfFJtlfQITjqKQ/2P/ZkeQKBpUC04/wWa4T8QEhms8/M6YAHo3uaBZZuO9r7/D49iK1AuYAHOkl0sU5iq4uUWddpy2qwO8LM/1b1z00HUAtrLwArkr1KFUt/emBHXKzUlaURBux1Ylr/Wy/3xSXqP9/V+iOZe5o/07zMfMm9IyKfOs11fez8fawQJMqIsrSmtj3oVOxkxXohep9NTlVNFYI813SZrFPvPt5GdBzPHv8QC28lB8tiNBu5PwHYaN33B3D9PymSAdho3pr0XtwXlfp1zRGIq1pxcwQfPvWL8ZzyeZjI2F7yt8ownYRE6an0bpH0j5wX3FNt/0GS+D6SIqGX+bkT09Z2FPXTf8bYaUDF3L3oWZVLyEzZScgw1C62LLq5d6p7d5Sbi2FJTCM0VFI7WDfz1uhkOdw+bqxLEKtoJxNm263MMEneNoYF7VxfJvW0lI4tiA2jM5pmNC6lAab+pfG1s1qfjz0W5+CPlG1HGYYLLAy3hXbIVoFiZ4T/bfp5EodNhmzLvJhc3R5LOnp1MroI7HVjlOxTY7xk2pUZDYCBMYZ9OBy9tC3Wn6XI020h/n7/8Q5UL+uVi7O5zaDfgbY4rLc0n4WX4dQb5B9DJywTk1X3ojpmC/gK2srIqZDd6MKW8bY0r6GR5P2R6NouB+Ofn5NK9hKzOHUNjnhCkaNS5vaUFQx9rxqbSvINzh+XuIape53yE3tUpXF+q6zE3yOJZ8AqJqUqNQbs3kPQr4XyzkfUmZU0fwI1c0ZmKKeZ/utOvU/UlYv7FR4bdOhfQ1OwzfkZCf3H8T7Z8J0nbY5ButRL6nLJ2Y2J9a06WRmEvvJ7G+9F6sjf0Wa6tvxhST0/zZvg7FbJT+vjRxcN+yeCElo3/KeaAzoKu3LmxD43Ry2+gKphwsmUmrE64tBaUQR5UpBdVKwnON0q8Txw8x4a0jn959deJdLv+2lYQkjonkZ3LEwXgiZpZUuu8lCftGbHb5WWyPRlQ0UsFxTFLGR2KCwHqY17XpSb3ZoxD3yMLfRaVwZFl5ky/hx30IUcDamDZc3hbibudcjcnYykRT6ZO7CL4Oc71aJuRHgfM1Dx9ns0dhQtNCTBBIw9+KCT8bkptK3IG1vbEefnvPy2vA9mlZYGZJS8xK/DvWVXaSsDdg5m87YW6n34sJ8I9QsppCvkfjQapNP8bSh6BO/TM1mlUQLsD6slupdpl7K9avNTrbosplbh99zUkU2labea97cF+9fgkTIg/zdNbrK1ydOAKNT0/vVNDudyGf2sNIozfCVs4EaSfsNvjBeYVn16bvg/M+iCn787D6OhSrs+di4+s8rF8+C+t3qly3+/+P6CD9moP7ltULKRn9U84DnQFdvXdhQsxm2Kzb5zEBckwT4TanDQWlEEc9JWHzFvKfmjktaiVsL1yUKwl9bjanWhG4EFuVGIV5BPuWx3MydWZdk7BvJN+jsUfZ817GcYBNvfesjS3DX0juySgU81fne1eZylHtkng4ibeU5JmWXN4m8TV9rkaSfrqicViT6V9L7lqyyk0ztUL+eKqF/DdhM5oVklnhkvD7+L3YVirYquKTmGCbYQJQVBij04Z3YcrLV5N4xyfxHE/tisa1mJDy1sL9nT3dKne4yf9/DVtNeRJT0GJ51xXUqVbO2lEQ4n6aGhfZ2MpahcZnWyxxmdtkX3Ncl/Jec3Bfg/RTRaPUeUAr/UadNtGWkN5p+DbCXoaZeaYCdEjiaHQmyOkeT3omSLNh0/NEtqRwcF4hv30dnLcAUyZq6hxmMjzF477O/72Xak+XNQf3tZj+fRTaxLJ6kSgZz8xZ2FOXlAxduupctKmgFOJIB+7XaENJwGYxj8APoBoMFw2UhFbioHAmh98fQ36qeem+F38udZsafarvVufZ1OTphyRuiOljxaQknnqC5ggf3B/HTHR2pzOXtyNo7VyNn2OrDTH9gzGBZqMW0s8wt8+tCPmvYLPfr3gcZzUI/7Uk/A7Y6tJ5nvcv+Tsu8eiUPPsjTJheq/A9Xoetpj1P4iTB46pgM61LDsX0f+NZER/GbOFXo+DWG1M+d0zvlbT345Lv9BjlylmzCkLcNF3mMreZsy1m0sSZABRMKruQ96qD+5pIvysrrZ7vj1HdjlsVtOcD72wjfDeE/Di5dQstnAni6fzJw85oJWzyW3qeSFR8zqG1g/O+4e+4SeF+Oi6MxA4EfZx8c/iahefbTf9bJAf3LesXUjL6p5wHOgO6dJVddEFJ6Nbg28/vXaoktBjHOhTO5PD7dVcNSuJ4HbZHZAqwQYPnSk2e2shzvRnhOINZIT8RuWWXt8nfe3occ2j+XI2sg/SP9EG9FSF/PKbIvIK5wz2plfB9fKPUo9Or5I4UigLV6tQKL+OxlZWF3jbT2fh9k+9UwYSgq7FNuNsX63hJHouCevzunSgI2zYou6Zd5jZZf4vmYZ3kfcnBff3c70RBuyUhPQn/QDvh6Z6Q/wHaPBOELpwnknzjjg/OK/s+hb8nYu1l/f5If1m8kJLRP+U80BnQpavexSBUErr03utQoiS0GEe9lYo+FQ1M8Pkr5g2sGZONuisRLea5StD0e+Po0OWtx9PuuRrTMEF0ESb4t+Nytx0hfw1y4bPl8H18oyUenZr8LutiqyZjMGHsTExwj25FP+Pxnodt9D4YE3Ce9vuLqeMhqpBOKqiPowsKQoOya/psizbqcVfy3t8XHQranYTvNO3Ce3RyJkjbYZN3CbR5cF6L36vsXJyO0i++z7J84UrGX6fPyJ59aWFPXX+dPkNKhi5dupbeRR/7JjqMu+7qA6Zg/BYTtNt193tcB3krc786JslvOy5vu3Guxfx20y8p85aE/G6ET+JIPToNbyLML8gPTXwY8yC1KSZ4LcTMqhZim5nLPIR9joKrzTbfuW0FoV7ZFesaJWdbdKmN9Yty062LzgXtARPyS97lE7RwJkirYTETs+Pwc2qSsG0dnNfGtxrQ9AfzhZSM/inngc6ALl26+v8qCkHYxuY3Y16K5tLePpialYgu57dll7f+WzfO1dim3fQL79CSkN/N8B7HWJpwverPTsUUjBM8zAxs38nXMXO6aNt9NdWmUzWzsiT29R3U07YVhJKya3i2xVJoY/2i3HT7ogMhvdPwHYbt5EyQVsLGg/P+TXJoq4dr6+C8Fr/PgKY/mC+kZPRPOQ90BnTp0jUwV0EIOhszj2pLwUjiXGombtRZgSkR2lIBsmvnarSTfkkcY2lSyF8a4Uveo9S8zcvjQardkG6JmfY8gClha2B23g1d3nbpu3esIHSj7AYq7/19FfNEC0J6p+E7TbuJ71F6Jkg7YTHztneQe3S6gzYPzmvzOw1o+oP5wpWMG6fflT330ms9dd04/S4pGbp06Rr8VyIEVVxYnDjQeWoivw1d3iZ/L41zNZpOv8l3aHkPS6fhkzhKzdvID/fbqnB/BWxj8jzy8zBSt7uHknij6vJ3H0sXFIRulN1A5b0XLjoQ0jsN34W0mzoTpJ2w2BkzB9LhwXkdfJcBTX8wXkjJ6JdrBYQQyy1Zlr0UQjgZE7J/l2XZAwOdp0Z4fo/3Pw8BFocQjs+ybF6WZRWAEMIwzA3t4izLFoYQYth7QwgHY16ZDgwhkGXZpCzLTvBnDgdOCCFMzrLsb5mPRK2m38I7LAa+h5mDHN1GGbQVPonjRA97SbwfQhiBbWhfDOwaQrgP22AesixbFKygZno4six7LoRwhD9/IrBiCOGkLMsWtZKfJvL7YgjhBGzm9jtAJZZ7i/F0XHat0q28DzQhhCFeft/HTOIW9Ff4TtMGyLKsEkII3q5bCt9X2CzLng0h/Az4FabE7oq5c94fM9X8CvDrLMtuDyEMzbJscav57yN/A5q+EPWQkiHEco4LQSc1KyQPNI0ERReS/4XN5t0TQviV/32nCyr3hBC+iZ31cLALDke5ohEF5VdDCLvWE2SWppDfX+E9jjkhhGPS755l2bwQwpHY/oHvYoLxsVmWvRxC2B07p+RzWZbN8vKsuKJxNOaO9M5uKxhJ3rqiIHSj7NpMs1+Vm27TiZDeafhO007iqZk46FZYF9xnA3uHEC4HvoyddzQV23dzYQhh2yzLXmw3D72c/qAlrnf3Er2Wnw6QkiGEYLAoGJEGguKe2DkXYHbwvwLmhRDuAG4LIVyKefPZHTML+qoLy0dkWXZyCOE14M99zZQuLSG/P8N7HDVhkxnjgK3WzAkhPI550To0y7LLimF9JnXfLMteS4TBrtMtBaEbZddGmv2u3HSbTr/r0hTye4FY97Ms+0MI4Vpsk/Wx/vNamIONF5fV9IUoEgZBuxVCiFLibHry9zjsnIbDsHMbfoedQP9ZYAPMrnsmdrrycOx06jcBv8yy7NBO01+WCCGMxmbbD8ZWNCYBJ/bC+w7mch/MeRd9U1SyQwgTMWH/4izLHlrW0x8shBA2Bu658ba7eNuGGw90dqp44P57ee87Nwdz1XzvAGenI7SSIYQYtBSFtSzLZocQTsf8xx+CnXMxOcuy00MI6wI7YYfvHYBtrBvvQfcKIZyaZdl/Okl/WSIx8XkF29Q9Dhjmfw8og7ncB3PeRd8UV1yyLPtHCOGe/toHMdDpDzZkLbV0kZIhhFimcFOY47G++khgZAjh8CzLHsMOl/tFCGE85kf+w9hKxzdbVTCWB7ws/xtzWXsIkLmZ0aDatCzEQDLQAv5Apy+WX6RkCCGWOXwW/jhsteIQYFEI4dgsy+a6ucpzmMva60IIq2RZNn9AM9zDJEobwDeAlUMIh6rMhBBCNEJKhhBimSSrdTeLu6ed7/8fvSNJWO6DpCxXxk78Pgs7EE0IIQYtAQg9Zp/UY9npCCkZQohllhJFo+VzLYThZXkkcFbW4+epCCGEGHikZAghlmmWhTMKeoUsy14CXoJaLzZCCCFEipQMIcQyz7JwRkGvIQVDCDHYCf5fL9Fr+ekEKRlCiOWCgTiATQghhFheGTLQGRBCiP5CCoYQQgjRP2glQwghhBBCLH+E3vMutQxZS2klQwghhBBCCNFdpGQIIYQQQgghuoqUDCGEEEIIIURXkZIhhBBCCCGE6CpSMoQQQgghhBBdRUqGEEIIIYQQoqvIha0QQgghhFjuCD3owrbX8tMJWskQQgghhBBCdBUpGUIIIYQQQoiuInMpIYQQQgix3BH8v16i1/LTCVrJEEIIIYQQQnQVKRlCCCGEEEKIriJzKSGEEEIIsdwh71JLF61kCCGEEEIIIbqKlAwhhBBCCCFEV5G5lBBCCCGEWO4IfvUSvZafTtBKhhBCCCGEEKKrSMkQQgghhBBCdBWZSwkhhBBCiOUP2UstVbSSIYQQQgghhOgqUjKEEEIIIYQQXUXmUkIIIYQQYrkj+H+9RK/lpxO0kiGEEEIIIYToKlIyhBBCCCGEEF1F5lJCCCGEEGL5I0DoNeukXstPB2glQwghhBBCCNFVpGQIIYQQQgghuorMpYQQQgghxHKHzuJbumglQwghhBBCCNFVpGQIIYQQQgghuorMpYQQQgghxPLJsmSf1GNoJUMIIYQQQgjRVaRkCCGEEEIIIbqKzKWEEEIIIcRyR/D/eoley08naCVDCCGEEEKIQU4IYWQI4YwQwswQwqshhLtCCLs1GXZ8COHCEMJ/QgjzQwjTQgg7dpIfKRlCCCGEEEIMfn4H7AUcC3wEuB24JITw+UaBQgjDgOuAHYGDgf8CngWuCiFs325mZC4lhBBCCCGWO0Kwq5doNz8hhJ2BDwCfz7LsEr89NYQwATg1hPCbLMsW1wn+VWAT4N1Zlk3z+KYC/wBOAd7VTp60kiGEEEIIIcTg5pPAXOCywv0LgDfQWFH4JPBgVDAAsixbBPwP8M4QwlrtZEgrGUIIIYQQYrnjkUceHugs1JDkab1Qu6zxfJZlz9UJuglwvysHKXcnv9/aIOxNJfdj2I2Bp+rluR5SMoQQQgghxPLEbODlXT/9iVEDnZE6LASmlNw/FjimTpjVgEdL7r+Q/F6P1ZLnWg1bFykZQgghhBBiuSHLspkhhLcB4wY6L3UYAlRK7j/fR7iszd86DVuKlAwhhBBCCLFckWXZTGDmQOeji8yifMVhVf+3bKWiG2Hroo3fQgghhBBCDG7+CWwYQiguIGzq/97TR9hNS+43E7YuUjKEEEIIIYQY3PweGAl8unB/L2zFZnofYd8WQljigcqVlS8C033Vp2VClrVlZiWEEEIIIYToEUIIVwNvBw4FHgZ2B/YBvphl2a/8mfMwxWO9LMue8HvDgDuB0cBhwHPAAcAuwE5Zlv21nfxoT4YQQgghhBCDn08BPwCOw/ZTPADsnmXZr5Nnhvq1xD9ulmULQgg7YgfvnQmsAtwFfKRdBQO0kiGEEEIIIYToMtqTIYQQQgghhOgqUjKEEEIIIYQQXUVKhhBCCCGEEKKrSMkQQgghhBBCdBUpGUIIIYQQQoiuIiVDCCGEEEII0VWkZAghhBBCCCG6ipQMIYQQQgghRFeRkiGEEEIIIYToKlIyhBBCCCGEEF1FSoYQQgghhBCiq0jJEEIIIYQQQnQVKRlCCCGEEEKIrvL/ASZKGUN7Q1wCAAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "seq.plot_confusion_matrix(dev, local_1.predict(dev), normalise=True)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "* mostly strong diagonal (good predictions)\n", "* `NN` receives a lot of wrong counts, often confused with `NNP`" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "pycharm": { "name": "#%%\n" }, "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "text/html": [ "\n", "
\n", " \n", " Previous\n", "  \n", " Next\n", "
\n", "
Thewalkoutwillshutdownthecity
DTNNMDVBDTNN
DTNNPMDNNDTNN
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:walkout
1.01.0
3.730.00
3.730.00
1 / 60
\n", "
,andthrowthedailycommuteofitssevenmillion
,CCVBDTJJNNINPRP$CDCD
,CCVBDTRBNNPINPRP$CDCD
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:commute
1.01.0
3.730.00
3.730.00
2 / 60
\n", "
Contracttalksbetweenthetwo
NNNNSINDTCD
NNPNNSINDTCD
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:Contract
1.01.0
3.730.00
3.730.00
3 / 60
\n", "
deadlockedoversuchissuesaswageincreasesandatwhat
VBNINJJNNSINNNNNSCCINWP
NNPRPPDTNNSINNNPNNSCCINWP
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:wage
1.01.0
3.730.00
3.730.00
4 / 60
\n", "
eligibletoreceiveafullpension.
JJTOVBDTJJNN.
JJTOVBDTJJNNP.
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:pension
1.01.0
3.730.00
3.730.00
5 / 60
\n", "
UnionheadRogerToussaintcalls
NNNNNNPNNPVBZ
NNPVBNNPNNPVBZ
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:Union
1.01.0
3.73-0.52
3.734.19
6 / 60
\n", "
ineffecttopreventmassivetrafficjamsonNewYork
INNNTOVBJJNNNNSINNNPNNP
INNNTOVBJJNNPNNPINNNPNNP
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:traffic
1.01.0
3.730.00
3.730.00
7 / 60
\n", "
hopeCambodiacanbeamodelfortherestof
NNNNPMDVBDTNNINDTNNIN
VBPNNPMDVBDTNNPINDTNNIN
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:model
1.01.0
3.730.00
3.730.00
8 / 60
\n", "
Clinton'svisitwillraiseawarenessaboutH.I.V.andhelp
NNPPOSNNMDVBNNINNNPCCVB
NNPPOSVBMDVBNNPINNNPCCVB
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:awareness
1.01.0
3.730.00
3.730.00
9 / 60
\n", "
allactsofabuseandbrutalityandtreatsallegationsof
DTNNSINNNCCNNCCVBZNNSIN
PDTNNSINNNCCNNPCCNNPNNSIN
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:brutality
1.01.0
3.730.00
3.730.00
10 / 60
\n", "
itwasreleasedbytheNewsoftheWorldnewspaper
PRPVBDVBNINDTNNINDTNNPNN
PRPVBDVBNINDTNNPINDTNNPNN
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:News
1.01.0
3.73-0.39
3.732.51
11 / 60
\n", "
isheadofMogadishu'sambulanceservice,saysat
VBZNNINNNPPOSNNNN,VBZIN
VBZVBINNNPPOSNNPNN,VBZIN
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:ambulance
1.01.0
3.730.00
3.730.00
12 / 60
\n", "
promptingsoldierstolaunchanartillerybarrage.
VBGNNSTOVBDTNNNN.
VBGNNSTOVBDTNNPNNP.
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:artillery
1.01.0
3.730.00
3.730.00
13 / 60
\n", "
soldierstolaunchanartillerybarrage.
NNSTOVBDTNNNN.
NNSTOVBDTNNPNNP.
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:barrage
1.01.0
3.730.00
3.730.00
14 / 60
\n", "
twodecadesofviolenceandlawlessnesssincethefallof
CDNNSINNNCCNNINDTNNIN
CDNNSINNNCCNNPINDTVBIN
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:lawlessness
1.01.0
3.730.00
3.730.00
15 / 60
\n", "
ThefounderofMicrosoft,Bill
DTNNINNNP,NNP
DTNNPINNNP,NNP
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:founder
1.01.0
3.730.00
3.730.00
16 / 60
\n", "
universitystudentseagerforaglimpseoftheworld's
NNNNSJJINDTNNINDTNNPOS
NNNNSNNPINDTNNPINDTNNPOS
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:glimpse
1.01.0
3.730.00
3.730.00
17 / 60
\n", "
thegovernmentlandedahightechdealwhenleadingchipmaker
DTNNVBDDTJJNNNNWRBVBGNN
DTNNVBNDTJJNNPNNWRBVBGNNP
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:tech
1.01.0
3.730.00
3.730.00
18 / 60
\n", "
hightechdealwhenleadingchipmakerIntelCorporationannouncedit
JJNNNNWRBVBGNNNNPNNPVBDPRP
JJNNPNNWRBVBGNNPNNPNNPVBDPRP
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:chipmaker
1.01.0
3.730.00
3.730.00
19 / 60
\n", "
Theingredient,calledartemisinin,isextractedfrom
DTNN,VBNNN,VBZVBNIN
DTNN,VBDNNP,VBZVBNIN
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:artemisinin
1.01.0
3.730.00
3.730.00
20 / 60
\n", "
formofmalaria,calledfalciparum.
NNINNN,VBDNN.
VBINNN,VBDNNP.
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:falciparum
1.01.0
3.730.00
3.730.00
21 / 60
\n", "
usingtheeuroastheircurrencyhavenotdoneas
VBGDTNNINPRP$NNVBPRBVBNRB
VBGDTNNINPRP$NNPVBPRBVBNIN
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:currency
1.01.0
3.730.00
3.730.00
22 / 60
\n", "
donotyetknowtheoriginofthedeadbirds
VBPRBRBVBDTNNINDTJJNNS
VBRBRBVBDTNNPINDTJJNNS
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:origin
1.01.0
3.730.00
3.730.00
23 / 60
\n", "
,ValerySitnikov,saidbio-terrorismcannotberuled
,NNPNNP,VBDNNMDRBVBVBN
,NNPNNP,VBDNNPMDRBVBVBN
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:bio-terrorism
1.01.0
3.730.00
3.730.00
24 / 60
\n", "
fourmurdersandwastheco-founderoftheinfamousCrips
CDNNSCCVBDDTNNINDTJJNNP
CDNNSCCVBDDTNNPINDTNNPNNP
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:co-founder
1.01.0
3.730.00
3.730.00
25 / 60
\n", "
Intwootherdeathpenaltycaseshehasrefused
INCDJJNNNNNNSPRPVBZVBN
INCDJJNNNNPNNSPRPVBZVBN
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:penalty
1.01.0
3.730.00
3.730.00
26 / 60
\n", "
Aftertheregistrationperiodends,applicants
INDTNNNNVBZ,NNS
INDTNNPNNVBZ,NNS
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:registration
1.01.0
3.730.00
3.730.00
27 / 60
\n", "
,whichwilldeterminethemake-upofthepresidentialballot
,WDTMDVBDTNNINDTJJNN
,WDTMDVBDTNNPINDTJJNN
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:make-up
1.01.0
3.730.00
3.730.00
28 / 60
\n", "
Competitivedivingisoneofthe
JJNNVBZCDINDT
NNPNNPVBZCDINDT
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:diving
1.01.0
3.730.00
3.730.00
29 / 60
\n", "
Recreationaldivingisalsoagrowing
JJNNVBZRBDTVBG
NNPNNPVBZRBDTVBG
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:diving
1.01.0
3.730.00
3.730.00
30 / 60
\n", "
divingisalsoagrowingamateursportintheU.S.
NNVBZRBDTVBGNNNNINDTNNP
NNPVBZRBDTVBGNNPNNINDTNNP
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:amateur
1.01.0
3.730.00
3.730.00
31 / 60
\n", "
Unfortunately,thejoyofjumpingoffthe
RB,DTNNINVBGRPDT
NNP,DTNNPINNNPRPDT
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:joy
1.01.0
3.730.00
3.730.00
32 / 60
\n", "
divingboardatthelocalswimmingpoolhastoooften
VBGNNINDTJJNNNNVBZRBRB
NNPNNINDTJJNNPNNPVBZRBRB
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:swimming
1.01.0
3.730.00
3.730.00
33 / 60
\n", "
boardatthelocalswimmingpoolhastoooftenbeen
NNINDTJJNNNNVBZRBRBVBN
NNINDTJJNNPNNPVBZRBRBVBN
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:pool
1.01.0
3.730.00
3.730.00
34 / 60
\n", "
AnofficialwithCanada'sspyagencyhassaidthat
DTNNINNNPPOSNNNNVBZVBNIN
DTJJINNNPPOSNNPNNVBZVBDWDT
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:spy
1.01.0
3.730.00
3.730.00
35 / 60
\n", "
beforeMr.Chavez'safternoondeparture.
INNNPNNPPOSNNNN.
INNNPNNPPOSNNNNP.
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:departure
1.01.0
3.730.00
3.730.00
36 / 60
\n", "
cancellationsonthepope'sschedule,butdidnot
NNSINDTNNPOSNN,CCVBDRB
NNPINDTNNPOSNNP,CCVBDRB
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:schedule
1.01.0
3.730.00
3.730.00
37 / 60
\n", "
fromParkinson'sdiseaseandarthritis,butcontinuesto
INNNPPOSNNCCNN,CCVBZTO
INNNPPOSNNCCNNP,CCVBZTO
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:arthritis
1.01.0
3.730.00
3.730.00
38 / 60
\n", "
tomaintainafulltravelschedule,holdaudiencesand
TOVBDTJJNNNN,NNNNSCC
TOVBDTJJVBNNP,VBNNPCC
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:schedule
1.01.0
3.730.00
3.730.00
39 / 60
\n", "
holdaudiencesandperformhispapalduties.
NNNNSCCVBPRP$NNNNS.
VBNNPCCVBPPRP$NNPNNS.
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:papal
1.01.0
3.730.00
3.730.00
40 / 60
\n", "
IsraelcompleteditshandoveroftheWestBank
NNPVBDPRP$NNINDTNNPNNP
NNPVBNPRP$NNPINDTNNPNNP
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:handover
1.01.0
3.730.00
3.730.00
41 / 60
\n", "
armedmenstormedintoabarinwesternMexicoand
JJNNSVBDINDTNNINJJNNPCC
JJNNSVBDINDTNNPINJJNNPCC
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:bar
1.01.0
3.730.00
3.730.00
42 / 60
\n", "
airastheyenteredthebarinMichoacanstatebefore
NNINPRPVBDDTNNINNNPNNIN
NNINPRPVBDDTNNPINNNPNNIN
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:bar
1.01.0
3.730.00
3.730.00
43 / 60
\n", "
barinMichoacanstatebeforedawnWednesday.
NNINNNPNNINNNNNP.
NNPINNNPNNINNNPNNP.
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:dawn
1.01.0
3.730.00
3.730.00
44 / 60
\n", "
Thegroupalsoleftanotesayingthekillingswere
DTNNRBVBDDTNNVBGDTNNSVBD
DTNNRBVBDDTNNPVBGDTNNSVBD
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:note
1.01.0
3.730.00
3.730.00
45 / 60
\n", "
ofwhatitcalled\"divinejustice.\"
INWPPRPVBD``NNNN.``
INWPPRPVBD``NNPNN.``
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:divine
1.01.0
3.730.00
3.730.00
46 / 60
\n", "
childrenwerekilledinastampedeinthesoutherncity
NNSVBDVBNINDTNNINDTJJNN
NNSVBDVBNINDTNNPINDTJJNN
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:stampede
1.01.0
3.730.00
3.730.00
47 / 60
\n", "
werewaitingtogetfreeflour.
VBDVBGTOVBJJNN.
VBDVBGTOVBVBNNP.
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:flour
1.01.0
3.730.00
3.730.00
48 / 60
\n", "
groupwasgivingouttheflourinhonorofthe
NNVBDVBGRPDTNNINNNINDT
NNVBDVBGRPDTNNPINVBINDT
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:flour
1.01.0
3.730.00
3.730.00
49 / 60
\n", "
ofthevictimsdiedofsuffocation.
INDTNNSVBDINNN.
INDTNNSVBDINNNP.
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:suffocation
1.01.0
3.730.00
3.730.00
50 / 60
\n", "
50membersofIsrael'stheatercommunityhavesigneda
CDNNSINNNPPOSNNNNVBPVBNDT
CDNNSINNNPPOSNNPNNVBPVBNDT
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:theater
1.01.0
3.730.00
3.730.00
51 / 60
\n", "
theatercommunityhavesignedapetitiontoboycottperformancesat
NNNNVBPVBNDTNNTOVBNNSIN
NNPNNVBPVBNDTNNPTOVBNNSIN
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:petition
1.01.0
3.730.00
3.730.00
52 / 60
\n", "
boycottperformancesatastate-fundedtheaterinthenorthernWest
VBNNSINDTJJNNINDTJJNNP
VBNNSINDTNNPNNPINDTJJNNP
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:theater
1.01.0
3.730.00
3.730.00
53 / 60
\n", "
Somalia'stransitionalgovernment-in-exilemetTuesdaytotry
NNPPOSJJNNVBDNNPTOVB
NNPPOSJJNNPVBDNNPTOVB
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:government-in-exile
1.01.0
3.730.00
3.730.00
54 / 60
\n", "
weretoperformtheminorpilgrimageknownasOmra.
VBDTOVBDTJJNNVBNINNNP.
VBDTOVBPDTJJNNPVBNINNNP.
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:pilgrimage
1.01.0
3.730.00
3.730.00
55 / 60
\n", "
rangingfrommaintainingthestatusquotoafullwithdrawal
VBGINVBGDTNNNNTODTJJNN
VBGINVBGDTNNNNPTODTJJNN
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:quo
1.01.0
3.730.00
3.730.00
56 / 60
\n", "
theoperationtoeitheranobserverorliaisoneffort.
DTNNTODTDTNNCCNNNN.
DTNNTORBDTNNPCCNNPNN.
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:observer
1.01.0
3.730.00
3.730.00
57 / 60
\n", "
toeitheranobserverorliaisoneffort.
TODTDTNNCCNNNN.
TORBDTNNPCCNNPNN.
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:liaison
1.01.0
3.730.00
3.730.00
58 / 60
\n", "
anyparticularoptionandsaidnoneofferedanidealway
DTJJNNCCVBDNNVBDDTJJNN
DTNNPNNCCVBDNNPVBNDTNNPNN
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:none
1.01.0
3.730.00
3.730.00
59 / 60
\n", "
InthisphotographreleasedbytheIraqi
INDTNNVBNINDTJJ
INDTNNPVBNINDTJJ
\n", " \n", " \n", " \n", " \n", " \n", "
biasword:photograph
1.01.0
3.730.00
3.730.00
60 / 60
\n", "
\n", "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "util.Carousel(local_1.errors(dev,\n", " filter_gold=lambda y: y=='NN',\n", " filter_guess=lambda y: y=='NNP'))" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "* \"walkout\", \"commute\", \"wage\" are misclassified as proper nouns\n", "* For $f_{\\text{word},w}$ feature template weights are $0$\n", "\n", "The word has not appeared in the training set!" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" }, "slideshow": { "slide_type": "subslide" } }, "source": [ "Proper nouns tend to be capitalised! Can we capture that with a feature?" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "pycharm": { "name": "#%%\n" }, "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "data": { "text/plain": [ "0.9087924970691676" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def feat_2(x,i):\n", " return {\n", " 'bias': 1.0,\n", " 'word:' + x[i].lower(): 1.0,\n", " 'first_upper:' + str(x[i][0].isupper()): 1.0,\n", " }\n", "local_2 = seq.LocalSequenceLabeler(feat_2, train)\n", "seq.accuracy(dev, local_2.predict(dev))" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Are these results actually caused by improved `NN`/`NNP` prediction?" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "pycharm": { "name": "#%%\n" }, "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "seq.plot_confusion_matrix(dev, local_2.predict(dev), normalise=True)" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "pycharm": { "name": "#%%\n" }, "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "text/html": [ "\n", "
\n", " \n", " Previous\n", "  \n", " Next\n", "
\n", "
Contracttalksbetweenthetwo
NNNNSINDTCD
NNPNNSINDTCD
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:contract
1.01.01.0
6.713.722.25
6.738.41-0.01
1 / 3
\n", "
UnionheadRogerToussaintcalls
NNNNNNPNNPVBZ
NNPNNNNPNNPVBZ
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:union
1.01.01.0
6.713.721.44
6.738.412.39
2 / 3
\n", "
itwasreleasedbytheNewsoftheWorldnewspaper
PRPVBDVBNINDTNNINDTNNPNN
PRPVBDVBNINDTNNPINDTNNPNN
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:news
1.01.01.0
6.713.723.98
6.738.413.08
3 / 3
\n", "
\n", "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "util.Carousel(local_2.errors(dev,\n", " filter_gold=lambda y: y=='NN',\n", " filter_guess=lambda y: y=='NNP'))" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "### Problem 2: ambiguity\n", "\n", "*Polysemous* words or *homonyms* have multiple senses. For example, *back*:\n", "\n", "Noun:\n", "\n", "| | | | | | |\n", "|-|-|-|-|-|-|\n", "| He | is | treated | for | **back** | injury |\n", "| PRP | VBP | VBN | IN | **NN** | NN |\n", "\n", "Adverb:\n", "\n", "| | | | | | |\n", "|-|-|-|-|-|-|\n", "| He | is | sent | **back** | to | prison |\n", "| PRP | VBP | VBN | **RB** | TO | NN |\n", "\n", "Verb:\n", "\n", "| | | | | |\n", "|-|-|-|-|-|\n", "| I | can | **back** | this | up |\n", "| PRP | MD | **VB** | DT | RP |" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "### What other features would you try for English POS tagging?\n", "\n", "
\n", "\n", "### [ucph.page.link/pos](https://ucph.page.link/pos)\n", "\n", "([Responses](https://docs.google.com/forms/d/1K8l0D6sTWmC4KmKJwr61zEN0eNjgUOpaDj3WSGxTuIM/edit#responses))" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "skip" } }, "source": [ "### Solution\n", "\n", "There are many possibilities:\n", "* last character is 's'\n", "* ends with -ly\n", "* is it after a \".\"\n", "* previous word\n", "* next word\n", "\n", "\n", "Some features we cannot use (because our local model cannot consider other tags):\n", "* tag of the previous words\n", "* tag of next word\n", "* whether the next word is a noun" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Task: Named entity recognition (NER)\n", "\n", "\n", "| |\n", "|-|\n", "| \\[Barack Obama\\]per was born in \\[Hawaii\\]gpe |\n", "\n", "\n", " per = Person\n", " gpe = Geopolitical Entity" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "... but this is not sequence labeling, is it?" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" }, "slideshow": { "slide_type": "subslide" } }, "source": [ "## IOB encoding\n", "\n", "Label tokens as beginning (B), inside (I), or outside (O) a **named entity:**\n", "\n", "| | | | | | |\n", "|-|-|-|-|-|-|\n", "| Barack | Obama | was | born | in | Hawaii |\n", "| B-per | I-per | O | O | O | B-gpe |\n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "+ Many tasks can be framed as sequence labelling using this idea!" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" }, "slideshow": { "slide_type": "subslide" } }, "source": [ "### Named entity types in GMB dataset\n", "\n", " geo = Geographical Entity\n", " org = Organization\n", " per = Person\n", " gpe = Geopolitical Entity\n", " tim = Time indicator\n", " art = Artifact\n", " eve = Event\n", " nat = Natural Phenomenon" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" }, "slideshow": { "slide_type": "fragment" } }, "source": [ "Example sentence from GMB:" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "pycharm": { "name": "#%%\n" }, "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
012345678910
0Iran'snewPresidentMahmoudAhmadinejadsaidTuesdaythatEuropeanincentives
1NNPPOSJJNNPNNPNNPVBDNNPINJJNNS
2B-gpeOOB-perI-perI-perOB-timOB-gpeO
\n", "
" ], "text/plain": [ " 0 1 2 3 4 5 6 7 8 \\\n", "0 Iran 's new President Mahmoud Ahmadinejad said Tuesday that \n", "1 NNP POS JJ NNP NNP NNP VBD NNP IN \n", "2 B-gpe O O B-per I-per I-per O B-tim O \n", "\n", " 9 10 \n", "0 European incentives \n", "1 JJ NNS \n", "2 B-gpe O " ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pd.DataFrame([tokens[12][:11], pos[12][:11], ents[12][:11]])" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "pycharm": { "name": "#%%\n" }, "slideshow": { "slide_type": "skip" } }, "outputs": [], "source": [ "examples = {}\n", "counts_ent = Counter(tag[2:] for sent in ents for tag in sent if tag.startswith(\"B-\"))\n", "in_entity = False\n", "for x_s, y_s in zip(tokens, ents):\n", " for i, (x, y) in enumerate(zip(x_s, y_s)):\n", " if y == \"O\":\n", " in_entity = False\n", " continue\n", " y_ent = y[2:]\n", " if y[0] == \"B\":\n", " if y_ent not in examples or random() > 0.6:\n", " examples[y_ent] = [x]\n", " in_entity = True\n", " else:\n", " in_entity = False\n", " if y[0] == \"I\" and in_entity:\n", " examples[y_ent].append(x)\n", "\n", "sorted_ents = sorted(counts_ent.items(),key=lambda x:-x[1])\n", "sorted_ents_with_examples = [(t,c,\" \".join(examples[t])) for t,c in sorted_ents]\n", "\n", "sorted_ents_table = pd.DataFrame(sorted_ents_with_examples, columns=['Entity Type','Count','Example'])" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "pycharm": { "name": "#%%\n" }, "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Entity TypeCountExample
0geo2070Ethiopia
1org1237Security Council
2gpe1230Iraqi
3tim1160within
4per1107Saddam
5art53Magazine Us
6eve45Summer Olympics
7nat20H5N1
\n", "
" ], "text/plain": [ " Entity Type Count Example\n", "0 geo 2070 Ethiopia\n", "1 org 1237 Security Council\n", "2 gpe 1230 Iraqi\n", "3 tim 1160 within\n", "4 per 1107 Saddam\n", "5 art 53 Magazine Us\n", "6 eve 45 Summer Olympics\n", "7 nat 20 H5N1" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sorted_ents_table" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Can we run our simple **local model** on this?" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "pycharm": { "name": "#%%\n" }, "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/plain": [ "0.9348182883939039" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "train_ner = list(zip(tokens[:-200], ents[:-200]))\n", "dev_ner = list(zip(tokens[-200:], ents[-200:]))\n", "\n", "def feat_2(x,i):\n", " return {\n", " 'bias': 1.0,\n", " 'word:' + x[i].lower(): 1.0,\n", " 'first_upper:' + str(x[i][0].isupper()): 1.0,\n", " }\n", "local_2 = seq.LocalSequenceLabeler(feat_2, train_ner)\n", "seq.accuracy(dev_ner, local_2.predict(dev_ner))" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" }, "slideshow": { "slide_type": "subslide" } }, "source": [ "This seems great, but tag distribution is also **highly skewed**:" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAtkAAAKsCAYAAAA5oqHsAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/d3fzzAAAACXBIWXMAABJ0AAASdAHeZh94AAA2CElEQVR4nO3de7h1ZV0v/O9PURGzlEfQNqkkpiTwvmZ5yL3fSxTdoukruD1UmmKWFWZW0taNbB8SUKR8U1R8SxMrMwvlkIeQUnBboRmpgIiK4ZGT8EhyfNzovf8YY8FkMtdprvt51rPw87muec017/EbY95jrjHm+q4x7zlGtdYCAAD0c4f17gAAANzeCNkAANCZkA0AAJ0J2QAA0JmQDQAAnQnZAADQmZANAACdCdkAANCZkA0AAJ3ttN4d2BFU1Y8keUySryf57jp3BwCAHcudk9w3ycdaa/+xkhmE7MFjkpy23p0AAGCH9rQkf7uSQiF78PUkOfXUU/PABz5wvfsCAMAO5KKLLspBBx2UjJlxJYTswXeT5IEPfGD22Wef9e4LAAA7phUPK/bFRwAA6EzIBgCAzoRsAADoTMgGAIDOhGwAAOhMyAYAgM6EbAAA6EzIBgCAzoRsAADoTMgGAIDOhGwAAOhMyAYAgM6EbAAA6EzIBgCAzoRsAADoTMgGAIDOhGwAAOhMyAYAgM6EbAAA6EzIBgCAzoRsAADoTMgGAIDOhGwAAOhMyAYAgM6EbAAA6EzIBgCAzoRsAADobKf17gAAADuuPV/xwfXuwm185difW+8uLMuRbAAA6EzIBgCAzoRsAADoTMgGAIDOhGwAAOhMyAYAgM6EbAAA6EzIBgCAzoRsAADoTMgGAIDOhGwAAOhMyAYAgM6EbAAA6EzIBgCAzoRsAADoTMgGAIDOhGwAAOhsrpBdVQ+tqg9W1deq6oaq2lJVZ1fVc6fq3llVbcbtwkWW+5KqurCqtlbVxVW1uaruNKNu93HZV1bV9eNzHzDPugAAQG87zTnfPZJ8PclfJflmkrsleU6Sv6iqPVtrR0/U3pDkcVPz3zC9wKp6ZZKjkhyb5IwkD09ydJI9krxoou4uST4y9uGlSa5I8uIkp1fV41trH5tznQAAoIu5QnZr7awkZ001f6CqfjxDIJ4M2d9vrX1iqeVV1aYkRyR5W2vt8LH5rPEo9tFV9YbW2gVj+wuT7Jvk0a21s8f5z0zy2STHJXnkPOsEAAC99B6TfWWSm+aY78AkOyc5car9xCSV5KCJtoOTfGEhYCdJa+2mJO9K8oiq2mOO5wcAgG7mHS6SJKmqO2QI6vdM8swkT0zym1Nld62qy5LsluTSJKcmeVVrbctEzb7j/XmTM7bWLq2qKyemL9R+fEZ3zh3v98kwhGWxPu8+9mXSXovVAwDAaq0pZCc5IcmvjT9/N8lvtdb+eGL6Z8fb+ePjxyT5nSQHVNXDW2vXju2bkmxtrV034zm2jNMzUbtlkbpM1c5yaJLNy9QAAMDc1hqyX5Pk7Ul2T/LUJG+uqru11v4wSVprfzRV//dV9ekk703yq0kmp7clnmd62mpqp52Q5KSptr2SnLbMfAAAsCJrCtmtta8l+dr48ENVlSSvrao/a619a5HZTklyXZJHTbRdlWTnqtqltXb9VP2uSc6Zqp11tHrX8X7WUe7JPl+R4YwkNxv7DQAAXfT+4uO/ZAjuD1imrpJ8f+Lxwljs/W5VVHWfJPfKLcNNFmpvVTc17/kzpgEAwHbTO2Q/NkN4/vclap6RZJckk6f1Oz3JjUkOmao9JMPwj1Mn2k5JsndV3XyqvqraKclzk3yytXbJfF0HAIA+5houUlV/kuQ7GY5cX57haPMzkzw7yR+01r5VVfdP8u4k70lyUYaw/Jgkv53kcxnGcidJWmtbquroJEdV1ZbccjGaI5O8feIc2UnyjgwXnzmpql6RYejHoUkenOTx86wPAAD0NO+Y7LOTvCDJ8zNcefHaDGcR+aXW2rvGmu9kCOC/m+TeSe6Y5KtJjk/ymukzibTWjqmqazIE6MOSXJbh6o/HTNVtHS+hflySN2U4Kv6ZJE9ytUcAAHYE817x8cTc9sIx0zXfTvL0VS73+AwhfLm6yzMEfAAA2OH0HpMNAAA/8IRsAADoTMgGAIDOhGwAAOhMyAYAgM6EbAAA6EzIBgCAzoRsAADoTMgGAIDOhGwAAOhMyAYAgM6EbAAA6EzIBgCAzoRsAADoTMgGAIDOhGwAAOhMyAYAgM6EbAAA6EzIBgCAzoRsAADoTMgGAIDOhGwAAOhMyAYAgM6EbAAA6EzIBgCAzoRsAADoTMgGAIDOhGwAAOhMyAYAgM6EbAAA6EzIBgCAzoRsAADoTMgGAIDOhGwAAOhMyAYAgM6EbAAA6EzIBgCAzoRsAADoTMgGAIDOhGwAAOhMyAYAgM6EbAAA6EzIBgCAzoRsAADoTMgGAIDOhGwAAOhMyAYAgM6EbAAA6EzIBgCAzoRsAADoTMgGAIDOhGwAAOhMyAYAgM6EbAAA6EzIBgCAzoRsAADoTMgGAIDOhGwAAOhMyAYAgM6EbAAA6EzIBgCAzoRsAADoTMgGAIDOhGwAAOhMyAYAgM6EbAAA6EzIBgCAzoRsAADoTMgGAIDOhGwAAOhsrpBdVQ+tqg9W1deq6oaq2lJVZ1fVc2fUPqyq/qGqrq2qq6vq5Kp6wCLLfUlVXVhVW6vq4qraXFV3mlG3e1W9s6qurKrrx+c+YJ51AQCA3uY9kn2PJF9PcniSJyd5XpKvJPmLqjpioaiq9k5yVpI7J3lWkl9O8qAkH6+q3SYXWFWvTPLGJCcneWKSE8blv2Wq7i5JPpLkgCQvTfK0JJcnOb2qHjPn+gAAQDc7zTNTa+2sDOF50geq6seTvCjJ0WPbq5NsTfKU1tp3kqSqzknypSSHJXn52LYpyRFJ3tZaO3yc96zxKPbRVfWG1toFY/sLk+yb5NGttbPH+c9M8tkkxyV55DzrBAAAvfQek31lkpuSpKp2SvKUJO9bCNhJ0lr7apIzkxw8Md+BSXZOcuLU8k5MUkkOmmg7OMkXFgL2uMybkrwrySOqao9eKwMAAPOY60j2gqq6Q4agfs8kz8wwzOM3x8l7JblrknNnzHpukidU1c6ttRszHJlOkvMmi1prl1bVlRPTM/788UWWmST7JPnmEn3ePcluU817LVYPAACrtaaQnWHc9K+NP383yW+11v54fLxpvN8yY74tGY5Q3zPJpWPt1tbadYvUbpp4vGmJZWaqdpZDk2xepgYAAOa21pD9miRvT7J7kqcmeXNV3a219ocTNW2J+dsiPy9Vt9raaSckOWmqba8kpy0zHwAArMiaQnZr7WtJvjY+/FBVJclrq+rPklw1ts86srxrhjB89fj4qiQ7V9UurbXrZ9SeM/H4qiWWmcw+yj3Z5yuSXDHZNvYbAAC66P3Fx3/JENwfkOTLSW5Ist+Muv2SXDSOx05uGYt9q9qquk+SeyU5f6L5vCWWmalaAADY7nqH7Mcm+X6Sfx/P+PH+JE+vqrsvFFTV/ca6kyfmOz3JjUkOmVreIRmOeJ860XZKkr2r6uZT9Y1nMnlukk+21i7ptC4AADCXuYaLVNWfJPlOhiPXl2c42vzMJM9O8gettW+NpZuTfCrDObSPzXCavldnONXf6xeW11rbUlVHJzmqqrYkOSPJw5McmeTtE+fITpJ3JHlxkpOq6hUZhn4cmuTBSR4/z/oAAEBP847JPjvJC5I8P8PVH6/NcDGYX2qtvWuhqLV2YVXtn+R1Sd6b4RzaH01y2EQQX6g9pqquyRCgD0tyWZJjkxwzVbd1vIT6cUnelGSXJJ9J8qTW2sfmXB8AAOhm3is+npjbXjhmsdpzssIjzK2145Mcv4K6yzMEfAAA2OH0HpMNAAA/8IRsAADoTMgGAIDOhGwAAOhMyAYAgM6EbAAA6EzIBgCAzoRsAADoTMgGAIDOhGwAAOhMyAYAgM6EbAAA6EzIBgCAzoRsAADoTMgGAIDOhGwAAOhMyAYAgM6EbAAA6EzIBgCAzoRsAADoTMgGAIDOhGwAAOhMyAYAgM6EbAAA6EzIBgCAzoRsAADoTMgGAIDOhGwAAOhMyAYAgM6EbAAA6EzIBgCAzoRsAADoTMgGAIDOhGwAAOhMyAYAgM6EbAAA6EzIBgCAzoRsAADoTMgGAIDOhGwAAOhMyAYAgM6EbAAA6EzIBgCAzoRsAADoTMgGAIDOhGwAAOhMyAYAgM6EbAAA6EzIBgCAzoRsAADoTMgGAIDOhGwAAOhMyAYAgM6EbAAA6EzIBgCAzoRsAADoTMgGAIDOhGwAAOhMyAYAgM6EbAAA6EzIBgCAzoRsAADoTMgGAIDOhGwAAOhMyAYAgM6EbAAA6EzIBgCAzoRsAADoTMgGAIDOhGwAAOhsrpBdVY+rqndU1YVVdV1VfbOqTquqn56qe2dVtRm3CxdZ7kvGZW6tqouranNV3WlG3e7jsq+squur6uyqOmCedQEAgN52mnO+30iyKckbk1yQZLckL0vyiap6YmvtoxO1NyR53NT8N0wvsKpemeSoJMcmOSPJw5McnWSPJC+aqLtLko8kuUeSlya5IsmLk5xeVY9vrX1sznUCAIAu5g3ZL26tXTHZUFWnJ7koyeFJJkP291trn1hqYVW1KckRSd7WWjt8bD5rPIp9dFW9obV2wdj+wiT7Jnl0a+3scf4zk3w2yXFJHjnnOgEAQBdzDReZDthj27UZjmrfd45FHphk5yQnTrWfmKSSHDTRdnCSLywE7PG5b0ryriSPqKo95nh+AADoptsXH6vqR5I8LMnnpibdtaouq6rvVdU3qurNVbXrVM2+4/15k42ttUuTXDkxfaH23BldWGjbZ5l+7l5V+0zekuy11DwAALAa8w4XmeUtSe6W5JiJts+Ot/PHx49J8jtJDqiqh49Hv5NhfPfW1tp1M5a7ZZyeidoti9RlqnaWQ5NsXqYGAADm1iVkV9VRSZ6T5CWttXMW2ltrfzRV+vdV9ekk703yq0kmp7clnmJ62mpqp52Q5KSptr2SnLbMfAAAsCJrDtlVtTnDlxZf2Vp78wpmOSXJdUkeNdF2VZKdq2qX1tr1U/W7JjlnqnbW0eqFISizjnLfbBxPPv2lzRV0GwAAVmZNY7LHgH1kkiNba69ZzaxJvj/xeGEs9n5Ty79PknvlluEmC7W3qpua9/wZ0wAAYLuZO2RX1f/MELCPbq39/ipmfUaSXZJMntbv9CQ3JjlkqvaQDMM/Tp1oOyXJ3lV186n6qmqnJM9N8snW2iWr6AsAAHQ313CRqnpZkldnCMcfrKrJoR9prX2iqu6f5N1J3pPh/NktwxcffzvDGUjePlG/paqOTnJUVW3JLRejOTLJ2yfOkZ0k78hw8ZmTquoVGYZ+HJrkwUkeP8/6AABAT/OOyX7qeH/geJtWSb6T5PIkv5vk3knumOSrSY5P8prpM4m01o6pqmsyBOjDklyW4eqPx0zVbR0voX5ckjdlOCr+mSRPcrVHAAB2BHOF7Nba/iuo+XaSp69yucdnCOHL1V2e5PmrWTYAAGwv3S5GAwAADIRsAADoTMgGAIDOhGwAAOhMyAYAgM6EbAAA6EzIBgCAzoRsAADoTMgGAIDOhGwAAOhMyAYAgM6EbAAA6EzIBgCAzoRsAADoTMgGAIDOhGwAAOhMyAYAgM6EbAAA6EzIBgCAzoRsAADoTMgGAIDOhGwAAOhMyAYAgM6EbAAA6EzIBgCAzoRsAADoTMgGAIDOhGwAAOhMyAYAgM6EbAAA6EzIBgCAzoRsAADoTMgGAIDOhGwAAOhMyAYAgM6EbAAA6EzIBgCAzoRsAADoTMgGAIDOhGwAAOhMyAYAgM6EbAAA6EzIBgCAzoRsAADoTMgGAIDOhGwAAOhMyAYAgM6EbAAA6EzIBgCAzoRsAADoTMgGAIDOhGwAAOhMyAYAgM6EbAAA6EzIBgCAzoRsAADoTMgGAIDOhGwAAOhMyAYAgM6EbAAA6EzIBgCAzoRsAADoTMgGAIDOhGwAAOhMyAYAgM6EbAAA6EzIBgCAzoRsAADoTMgGAIDOhGwAAOhsrpBdVY+rqndU1YVVdV1VfbOqTquqn55R+7Cq+oequraqrq6qk6vqAYss9yXjMrdW1cVVtbmq7jSjbveqemdVXVlV11fV2VV1wDzrAgAAvc17JPs3kuyZ5I1JnpzkpUl2T/KJqnrcQlFV7Z3krCR3TvKsJL+c5EFJPl5Vu00usKpeOS7v5CRPTHJCksOTvGWq7i5JPpLkgPF5n5bk8iSnV9Vj5lwfAADoZqc553txa+2KyYaqOj3JRRmC8UfH5lcn2ZrkKa2174x15yT5UpLDkrx8bNuU5Igkb2utHT7Oe9Z4FPvoqnpDa+2Csf2FSfZN8ujW2tnj/Gcm+WyS45I8cs51AgCALuY6kj0dsMe2a5NckOS+SVJVOyV5SpL3LQTsse6rSc5McvDE7Acm2TnJiVOLPTFJJTloou3gJF9YCNjjMm9K8q4kj6iqPeZZJwAA6GXeI9m3UVU/kuRhueUo9l5J7prk3Bnl5yZ5QlXt3Fq7McOR6SQ5b7KotXZpVV05MT3jzx9fZJlJsk+Sby7Rz92T7DbVvNdi9QAAsFrdQnaGsdN3S3LM+HjTeL9lRu2WDEeo75nk0rF2a2vtukVqN0083rTEMjNVO8uhSTYvUwMAAHPrErKr6qgkz0nyktbaOVOT2xKztkV+XqputbXTTkhy0lTbXklOW2Y+AABYkTWH7KranOFLi69srb15YtJV4/2sI8u7ZgjDV0/U7lxVu7TWrp9ROxncr1pimcnso9w3G8eTT39pc6lZAABgVdZ0MZoxYB+Z5MjW2mumJn85yQ1J9psx635JLhrHYye3jMW+VW1V3SfJvZKcP9F83hLLzFQtAABsd3OH7Kr6nxkC9tGttd+fnj6e8eP9SZ5eVXefmO9+SR6b4XzYC05PcmOSQ6YWc0iGI96nTrSdkmTvqrr5VH3jmUyem+STrbVL5l0nAADoYa7hIlX1sgznwD49yQer6lGT01trnxh/3JzkU0k+UFXHZjhN36uTXJnk9RP1W6rq6CRHVdWWJGckeXiGEP/2iXNkJ8k7krw4yUlV9YoMQz8OTfLgJI+fZ30AAKCnecdkP3W8P3C8Taskaa1dWFX7J3ldkvcmuSnDKf4Oa619a3KG1toxVXVNhgB9WJLLkhybW85WslC3dbyE+nFJ3pRklySfSfKk1trH5lwfAADoZq6Q3VrbfxW152SFR5hba8cnOX4FdZcnef5K+wAAANvTmr74CAAA3JaQDQAAnQnZAADQmZANAACdCdkAANCZkA0AAJ0J2QAA0JmQDQAAnQnZAADQmZANAACdCdkAANCZkA0AAJ0J2QAA0JmQDQAAnQnZAADQmZANAACdCdkAANCZkA0AAJ0J2QAA0JmQDQAAnQnZAADQmZANAACdCdkAANCZkA0AAJ0J2QAA0JmQDQAAnQnZAADQmZANAACdCdkAANCZkA0AAJ0J2QAA0JmQDQAAnQnZAADQmZANAACdCdkAANCZkA0AAJ0J2QAA0JmQDQAAnQnZAADQmZANAACdCdkAANCZkA0AAJ0J2QAA0JmQDQAAnQnZAADQmZANAACdCdkAANCZkA0AAJ0J2QAA0JmQDQAAnQnZAADQmZANAACdCdkAANCZkA0AAJ0J2QAA0JmQDQAAnQnZAADQmZANAACdCdkAANCZkA0AAJ0J2QAA0JmQDQAAnQnZAADQmZANAACdCdkAANCZkA0AAJ0J2QAA0JmQDQAAnQnZAADQmZANAACdzR2yq+ruVXVcVZ1RVd+qqlZVR86oe+c4bfp24SLLfUlVXVhVW6vq4qraXFV3mlG3+7jsK6vq+qo6u6oOmHd9AACgl53WMO+mJC9K8tkkpyb5lSVqb0jyuBltt1JVr0xyVJJjk5yR5OFJjk6yx/hcC3V3SfKRJPdI8tIkVyR5cZLTq+rxrbWPzbNCAADQw1pC9leT3LO11qrqXlk6ZH+/tfaJpRZWVZuSHJHkba21w8fms8aj2EdX1RtaaxeM7S9Msm+SR7fWzh7nPzND4D8uySPnXisAAFijuYeLtFHHvhyYZOckJ061n5ikkhw00XZwki8sBOyxPzcleVeSR1TVHh37BQAAq7KWI9mrcdequizJbkkuzTC85FWttS0TNfuO9+dNzthau7SqrpyYvlD78RnPc+54v0+Sb87qSFXtPvZj0l4rWAcAAFiR7RGyPzvezh8fPybJ7yQ5oKoe3lq7dmzflGRra+26GcvYMk7PRO2WReoyVTvt0CSbV9h3AABYtW0esltrfzTV9PdV9ekk703yq0kmpy81/GR62mpqJ52Q5KSptr2SnLbEPAAAsGLba7jItFOSXJfkURNtVyXZuap2aa1dP1W/a5JzpmpnHa3edbyfdZQ7SdJauyLD2UhuVlUr7DYAACxvPS9GU0m+P/F4YSz2frcqqrpPknvlluEmC7W3qpua9/wZ0wAAYLtYr5D9jCS7JJk8rd/pSW5McshU7SEZhn+cOtF2SpK9q+rmU/VV1U5Jnpvkk621S7r3GAAAVmhNw0Wq6klJ7pbk7mPTQ6rqGePPH8pwFo93J3lPkosyhOXHJPntJJ9L8vaFZbXWtlTV0UmOqqotueViNEcmefvEObKT5B0ZLj5zUlW9IsPwj0OTPDjJ49eyTgAAsFZrHZP91iT3n3j8zPGWJD+e5D+SXJ7kd5PcO8kdM1zE5vgkr5k+k0hr7ZiquiZDgD4syWUZrv54zFTd1vES6scleVOGo+KfSfIkV3sEAGC9rSlkt9b2XEHZ01e5zOMzhPDl6i5P8vzVLBsAALaH9fziIwAA3C4J2QAA0JmQDQAAnQnZAADQmZANAACdCdkAANCZkA0AAJ0J2QAA0JmQDQAAnQnZAADQmZANAACdCdkAANCZkA0AAJ0J2QAA0JmQDQAAnQnZAADQmZANAACdCdkAANCZkA0AAJ0J2QAA0JmQDQAAnQnZAADQmZANAACdCdkAANCZkA0AAJ0J2QAA0JmQDQAAnQnZAADQmZANAACdCdkAANCZkA0AAJ0J2QAA0JmQDQAAnQnZAADQmZANAACdCdkAANCZkA0AAJ0J2QAA0JmQDQAAnQnZAADQmZANAACdCdkAANCZkA0AAJ0J2QAA0JmQDQAAnQnZAADQmZANAACdCdkAANCZkA0AAJ0J2QAA0JmQDQAAnQnZAADQmZANAACdCdkAANCZkA0AAJ0J2QAA0JmQDQAAnQnZAADQmZANAACdCdkAANCZkA0AAJ0J2QAA0JmQDQAAnQnZAADQmZANAACdCdkAANCZkA0AAJ0J2QAA0JmQDQAAnQnZAADQ2dwhu6ruXlXHVdUZVfWtqmpVdeQitQ+rqn+oqmur6uqqOrmqHrBI7Uuq6sKq2lpVF1fV5qq604y63avqnVV1ZVVdX1VnV9UB864PAAD0spYj2ZuSvCjJXZKculhRVe2d5Kwkd07yrCS/nORBST5eVbtN1b4yyRuTnJzkiUlOSHJ4krdM1d0lyUeSHJDkpUmeluTyJKdX1WPWsE4AALBmO61h3q8muWdrrVXVvZL8yiJ1r06yNclTWmvfSZKqOifJl5IcluTlY9umJEckeVtr7fBx3rPGo9hHV9UbWmsXjO0vTLJvkke31s4e5z8zyWeTHJfkkWtYLwAAWJO5j2S30VI1VbVTkqcked9CwB7n/WqSM5McPFF+YJKdk5w4tZgTk1SSgybaDk7yhYWAPS7zpiTvSvKIqtpj1SsEAACdrOVI9krsleSuSc6dMe3cJE+oqp1bazdmODKdJOdNFrXWLq2qKyemZ/z544ssM0n2SfLNWR2qqt2T7DbVvNdSKwEAAKuxrUP2pvF+y4xpWzIcob5nkkvH2q2ttesWqd008XjTEsvMVO20Q5NsXmI6AACsybYO2QuWGlbSFvl5uWWspnbSCUlOmmrbK8lpS8wDAAArtq1D9lXj/awjy7tmCMNXT9TuXFW7tNaun1F7ztRyF1tmMvsod5KktXZFkism26pqsXIAAFi1bX0xmi8nuSHJfjOm7ZfkonE8dnLLWOxb1VbVfZLcK8n5E83nLbHMTNUCAMB2tU1D9njGj/cneXpV3X2hvarul+SxGc6HveD0JDcmOWRqMYdkOOJ96kTbKUn2rqqbT9U3nsnkuUk+2Vq7pNtKAADAKq1puEhVPSnJ3ZIsBOiHVNUzxp8/NA772JzkU0k+UFXHZjhN36uTXJnk9QvLaq1tqaqjkxxVVVuSnJHk4UmOTPL2iXNkJ8k7krw4yUlV9YoMwz8OTfLgJI9fyzoBAMBarXVM9luT3H/i8TPHW5L8eJKvtNYurKr9k7wuyXuT3JTko0kOa619a3JhrbVjquqaDAH6sCSXJTk2yTFTdVvHS6gfl+RNSXZJ8pkkT2qtfWyN6wQAAGuyppDdWttzhXXnZIVHmFtrxyc5fgV1lyd5/kqWCQAA29O2/uIjAAD8wBGyAQCgMyEbAAA6E7IBAKAzIRsAADoTsgEAoDMhGwAAOhOyAQCgMyEbAAA6E7IBAKAzIRsAADoTsgEAoDMhGwAAOhOyAQCgMyEbAAA6E7IBAKAzIRsAADoTsgEAoDMhGwAAOhOyAQCgMyEbAAA6E7IBAKAzIRsAADoTsgEAoDMhGwAAOhOyAQCgMyEbAAA6E7IBAKAzIRsAADoTsgEAoDMhGwAAOhOyAQCgMyEbAAA6E7IBAKAzIRsAADoTsgEAoDMhGwAAOhOyAQCgMyEbAAA6E7IBAKAzIRsAADoTsgEAoDMhGwAAOhOyAQCgMyEbAAA6E7IBAKAzIRsAADoTsgEAoDMhGwAAOhOyAQCgMyEbAAA6E7IBAKAzIRsAADoTsgEAoDMhGwAAOhOyAQCgMyEbAAA6E7IBAKAzIRsAADoTsgEAoDMhGwAAOhOyAQCgMyEbAAA6E7IBAKAzIRsAADoTsgEAoDMhGwAAOhOyAQCgMyEbAAA6E7IBAKCzbR6yq2r/qmqL3B41VfuwqvqHqrq2qq6uqpOr6gGLLPclVXVhVW2tqouranNV3Wlbrw8AACxnp+34XIcnOXOq7fyFH6pq7yRnJflMkmcl2TnJq5N8vKoe2lr71kTtK5McleTYJGckeXiSo5PskeRF22wNAABgBbZnyP5Sa+0TS0x/dZKtSZ7SWvtOklTVOUm+lOSwJC8f2zYlOSLJ21prh4/znjUexT66qt7QWrtgW60EAAAsZ4cYk11VOyV5SpL3LQTsJGmtfTXD0e+DJ8oPzHCU+8SpxZyYpJIctE07CwAAy9ieIfstVXVTVX2nqj5cVf9lYtpeSe6a5NwZ852b5IFVtfP4eN/x/rzJotbapUmunJg+U1XtXlX7TN7G5wcAgC62x3CR/0jyxgzjra9K8sAkv5dhiMfPtdY+nGTTWLtlxvxbMhyhvmeSS8fara216xap3TSjfdKhSTavch0AAGDFtnnIbq19OsmnJ5o+XlWnZDgSfVySD0+WL7WoOepmOSHJSVNteyU5bZn5AABgRbbnFx9v1lq7uqo+kOTXq+quGY5wJ7OPQu+aIThfPT6+KsnOVbVLa+36GbXnLPPcVyS5YrKtqla3AgAAsIT1/OLjQrJtSb6c5IYk+82o2y/JRa21G8fH502037KwqvskuVcmTgsIAADrYV1CdlXdM8PZRD7TWruxtXZTkvcneXpV3X2i7n5JHpvk5InZT09yY5JDphZ7SIbAfuo26zgAAKzANh8uUlXvTvK1JP+a4ewfP5HkZUnunVsH5c1JPpXkA1V1bG65GM2VSV6/UNRa21JVRyc5qqq25JaL0RyZ5O3OkQ0AwHrbHmOyz03y7CS/nuSHMpwB5B+T/FJr7VMLRa21C6tq/ySvS/LeJDcl+WiSwyav9jjWHlNV1yR5cYYL1VyW4eqPx2zrlQEAgOVsj7OLHJshAK+k9pwkj19h7fFJjl9D1wAAYJvYIa74CAAAtydCNgAAdCZkAwBAZ0I2AAB0JmQDAEBnQjYAAHQmZAMAQGdCNgAAdCZkAwBAZ0I2AAB0JmQDAEBnQjYAAHQmZAMAQGdCNgAAdCZkAwBAZ0I2AAB0JmQDAEBnQjYAAHQmZAMAQGdCNgAAdCZkAwBAZ0I2AAB0JmQDAEBnQjYAAHQmZAMAQGdCNgAAdCZkAwBAZ0I2AAB0JmQDAEBnQjYAAHQmZAMAQGdCNgAAdCZkAwBAZ0I2AAB0JmQDAEBnQjYAAHQmZAMAQGdCNgAAdCZkAwBAZ0I2AAB0JmQDAEBnQjYAAHQmZAMAQGdCNgAAdCZkAwBAZ0I2AAB0JmQDAEBnQjYAAHQmZAMAQGdCNgAAdCZkAwBAZzutdwcAAG7v9nzFB9e7C7fxlWN/br27cLvmSDYAAHQmZAMAQGdCNgAAdCZkAwBAZ0I2AAB0JmQDAEBnQjYAAHQmZAMAQGcuRgMAbBgu6sJG4Ug2AAB05kg2APwAckQYti1HsgEAoDNHsgFYdxv5qOpG7juw7QjZADNs1OC0UfsNcHtjuAgAAHQmZAMAQGdCNgAAdCZkAwBAZxs2ZFfVD1XVG6rqkqq6sao+U1U/v979AgCAjXx2kZOTPDzJK5J8MckvJvmrqrpDa+3d69ozAAB+oG3IkF1VT07yhCS/2Fr7q7H5zKq6f5I/qKq/bq19b/16CCxwSjkAfhBtyJCd5OAk1yY5aar9xCTvTvLIJP+8vTsF24qgCgAby0YN2fsm+Xxr7aap9nMnps8M2VW1e5Ldppr3TpKLLrqoZx+hm+9+66vr3YXb+NznPreiuo3ad/3u5/bc72Tj9l2/+7k99zvZ2H3vZSIj3nml81Rrbdv0Zhuqqi8m+ffW2oFT7T+a5JIkh7fWXrvIvEcm2bzNOwkAwO3N01prf7uSwo16JDtJlvrvYKlpJ+S2w0x+KMmDkpyf5Ltr7Nd62CvJaUmeluTL69yX1dio/U42bt/1e/vaqP1ONm7f9Xv72qj9TjZu3/V7fdw5yX2TfGylM2zUkH1Vkk0z2ncd77csNmNr7YokV8yY9MkO/VoXVbXw45dba9v385M12Kj9TjZu3/V7+9qo/U42bt/1e/vaqP1ONm7f9XtdfXo1xRv1PNnnJfnJqpr+J2G/8f787dwfAAC42UYN2adkGOLx36ban59hTPaGPSoNAMDGtyGHi7TW/q6q/j7JW6vqh5NclOQXkhyY5LnOkQ0AwHrakCF79PQkxyR5dYax2Bcm+YXW2nvWtVfr41tJfn+830g2ar+Tjdt3/d6+Nmq/k43bd/3evjZqv5ON23f93iA25Cn8AABgR7ZRx2QDAMAOS8gGAIDOhGwAAOhMyAYAgM6EbAAA6EzI3s6q6pCqalO3b1XVWVX1lPXu30pMrMPPrHdfVmOj9jvZ2H1PVt7/qnp0VR1ZVfeYMe2sqjprW/Vx4nk21D660fq7lI20nfd43avq8Ko6aEb7/uPy9u/c7Vl9+IF6zbenjdbfbaWqHlVVJ1XVpVX13aq6rKreW1U/u95929aE7PXzgiQ/m+TRSV6U5HtJ3l9VT13XXsH6enSSzUnuMWPaoeNte9lo++hG6+/txVpe98OTHDSj/d/GZf5bpz7e3my0bX2j9bebqnpJkn9K8mNJ/nuSxyc5LMkeSf6xqn5zHbu3zW3ki9FsdOe31v514UFVnZ7k2xmuXPn+desV7KBaaxds56dcl320qnZprV0/x6zeU1agqu6YZKfW2tZOi+z+urfWvpPkE326t7GscPvfobf1hW1sommH7u+2UlX/OckbknwoycGttZsmpr0nySlJ3lhVn26t/dP69HLbciR7x3Fjku8m+d/LFdbg0Kr6TFXdUFXfHj96ecBEzRuq6rrxsvPT8/91VV1eVXeaaHt2VZ09znNtVX24qn5qrStVVT9RVe+uqiuqamtVfb6qXjwxfbfx46OjZsy79/jx2m9NtN2nqv64qr4xzndxVW2uqq7/MFbV06rq3LHP/15VL61hGEObqmtV9eaq+rWq+uJYf0FV/fyMZe5ofV92O5qo/eWq+mxV3VhVW6rqlKr6yc79PjLJH4wPL574eHX/cfqthotU1Z7j9N+rqpdX1VfG9Tirqh5UVXeqqmOr6pKq+o+xz7uvoYsr3kfH/i37mlXVO8f9bb+qOqOqrknykXHaParqT8d5r62qD1bVA8Z1PrJnf1f6XAvbUVX9VFWdXFXfGV/bd1XVbjOWu03eV8Zl32983sn3lpdV1R0maha2kf9eVUdU1cVJtiZ57Dh9RfvKKq3odR+f425Jnj+xrZ81TrvNcJGJbWXv8XW8roaP318xTn9UVf3j2P7Fqnr+GtZhVn+7/+6X2v5XaTXbetf37OW2sQ79XfH7QC3z93aibtl9p5P/kaQl+Y3JgJ0k4+NDx+mv6Py8O47Wmtt2vCU5JMNG9cgM/+neKcPHKG/M8BHSE1ewjD/JsIP+YZInZvhv+PNJLkty77Hm/xqf51em5r1Hhh389RNthyf5fpI/TfJzSQ5O8s9Jrk3ykCXW4WeW6edDklyd5Nwkv5TkCWOfv5dk80TdyUm+luQOU/O/LsOb1abx8X3Guq9k+MjtgCRHjOtz4ipe++X6feDYxzMzfJT7jAxHlS4edplb1baxT59L8vNJnprk78b2Z0zU7Yh9X3Y7GusW3ijfneTJ4+/yy+Pv9idWud0v2v8M+8HxY93BSR413n54nH5WkrMm6vcca7+S5G8zbLvPGfv/hSR/nmGbPjDJryW5Jsnfbqd9dEWvWZJ3jr+DizP8oXlckv+a4QDIx5PckOTlGfadVyX54rjcI3v1d5XPdeTEa37c2NffyfBe8W9J7jTv+8oqt/PdknwjyRXj7/aJSd40znvCjG3kG0k+muS/jeu3Z1axr2yL7STDtn19kg/mlm39IeO0/cdl7z+1rWxNckGS38rwsfs7xrrXZNjmf3n8nbx/bP/pju8t3X/3WWT738b7Ztf37GW2sbVuI6vZN1f693ZF+85ab0numOS6JJ9Ypu6TY90dez33jnRb9w78oN0mdrrp240Z/ttbbv5HjfW/O9X+YxnesF830XZOkn+aqvuNcf59x8f3zfDf9PFTdT+U5NIkf73EOiz3pnx6kq9nDEkT7W8a3zTuOT5+6ri8J0zU3DHJN5O8d6Lt/88QlO43tbyXjfPP/MM9R7//JcOb652nXo8rMztkX59bh9I7ZgirX9pR+77S7SjDP2XXJ/ngVN19x232L1e53S/X/8PGuj1nTDsrs0P2ZzLxD1qSl47tp03N/0dj+w+vsK/z7qMrfs0yhIyW5AVTtU8e2399qv0VWTxkz9vf1TzXkWPb/zdV+4tj+3Mm1nVV7yur3E5eO9Y9Yqr9hAzh7kFT28hFmQiBq9lXttV2Mi7j2iTvnNG+f2aH7Jbk6RNtO2UISy3JT02075rkpkwcTOmwb3b/3WeR7X8bv+Zd37OX2cbW1N+sbt9c6d/bFe07a70luff4PH+1TN17xrrdezzvjnYzXGT9PC/Jw8fbk5L8WZK31PglgKq6Y1XtNHFb+F09JcMG+a7J6RmO3n02w5vzghOTPLqqHjzR9oIkn2qtnT8+fmKGN+o/n1rejUk+NrW826jBTlPzpqp2zvCf/ylJrp+a/qEkO2cIeslwFOGysW8LnpjkP2U4UrPgKRmOOl0ytby/G6c/Zqm+rrDfd0vyM0lOba19d6G+tXZtFh8795HW2uUTtd9L8tdJHlhVP7aD9n2l29HPJrlrhj+GN2utfT3DUZsDVtrv5fq/Bh9qrX1/4vHnx/sPTtUttN9vhcuddx+d5zV739Tjhe3hb6ba/2ob9Hee5/rLqcd/kyHULXxEvqb3lbG/S20nj0tyQWvtX6Zme2eSGqdP+tvW2s0fzc+5ny9m3td9Hi3D++dCf2/KEO4uba19eqJ9S4bwff/VLHyF++a2+N1Pb//LWetrvi3es2+1jXXq74r2zVX+vV3tvrOt1XjftvPzbhdC9vr5fGvtX8fb6a21X0tyRpLjajh92UcyHA1YuC2EzXtn2Cgvn5r+vzPsRPeaeI6/zPDx4iFJUlUPybCTnzhRc+/x/lMzlvfsqeXN8pjp+apqzySbMrzRvmTGchf+SNwrufkPxV8kObhuOXXbIRmOenx4qq9PnbG8z00ub4UW6/c9c8vrO21WWzIE08XaNu2gfV/pdrTQ/0tnLPOSiemrsVj/57Vl6vF3l2nfeYXLnXcfXe1rdn0bvug2aVOSm8awNGmxbXCt/V3tc91qmx/34aty6+09mf99JVl6O9mUxV/fhemTpmvn2c8XM+/rPo/rW2s3TrV9N7fd1hfaV7qtL1jJvtn7dz9r+1/OWl/zbfGePWt7XGt/V7pvrvjvbVa/78zrygyfGPz4MnV7jnWztuENz9lFdiznZjgK8KAMY6XuPjHtyon7luT/yRCgp93c1lr7dlWdluR5VXVEhiPFN+bW/wUvLPcZSb46R5/PyRDcJ12SYdv6Xobw/JZF5r144ucTk/xekp+vqr9O8v8mecN4hGGyr+cmeeUiy7tkkfbV9PtOGV7fe99mjmGM3iyz2hfarhrvd7S+r3Q7Wuj/j86o+U+5ZftZjcX6vxGsZB9d7Ws26wjOVUl2qqpdp/7ALrYNrrW/q32u+2QYzpUkGY+Ybcqtt/dk/veVZOnt5Kos/vpOPv+C6df421n9fr4aK3ndd0Qr2Td7/+57HcFczWu+Ld6zV7sePffNb2flf29Xu+/MpbX2vao6M8mBVfVjrbVvTNeMnxr8dJK/m/pbf7shZO9YHjref6u1dvEiNR/IMB5rj9ba9EdIs5yY5FkZxnY9N8kprbWrJ6Z/OMNHfXu11lb7kV1aa9ck+dcZk7477mA/leTcyY9kF1nO56vqkxn+Ebhjkrvk1kfck2Hdn5zky621b6+2r6vo978mOaiqDlvod1X9UIaPD2c5oKruvfDxYw2nb3r22M+FN5Ydre8r3Y7OzjCe77lJTlpoHN8cH5fkvR37n9wS7u+62uVuJw8d75faR3u8Zh/LcE7ZZyd560T7bc6A0KG/8zzXczIEsgXPyvD35Kzx8ZreV5Jlt5OPJPkfVfWw1trkuaSflyHsnLnMsq+bYz9fjYeO90u97smwve8w2/oyr/mCbf67n9NDx/vlXvNkO79nr6G/K9o3W2vXr+Lv7Zr2nVV6bYbhMSdU1cGTQXp8zd+a4ROl13Z8zh2KkL1+9p0Y77YpydMzfBv4lKXeIFpr/1RVf5LkxBqu0PW/Mnwz90eT/Jck57XWJnfGMzJ8k/iEDP/9nji1vK9U1auSHFPDqdsWzt957ySPSHJda23znOv40iT/mOTjVfXWDN/SvnuSByZ5amtteuzXO5L8cYb/qP+5tfaFqemvyvAa/XNVHZ/h2/Q7Z/i46ckZvhxym/+W5/CqDON5P1xVb8wQ+n8vw5eUdp1Rf2WSj9ZwGsLrMpyWaO/c+o1wh+r7Srej1trV43q9pqr+PMOnIJsyXDDmxiS/36HPk84b719aVX+W4ePOL4x//Le3effRHq/Z6Rku4PD6Gk7DeU6Gsd7PG6d/f8Y8c/V3zud6elXdlOTvk+yT5KgMY/n/Jtnm7yvJ8CXW5yX54Pg8X81wFotDk7y1tfbFFSxjtfv5YuZ93ZNhe9+/houSXJrkmhnvezua9f7dJ2t7zZPt/569PfbNlf697bHvrMj4d+a3M5wr+x+r6s0Zvmx8vyQvznDWld9urf1zr+fc4bQd4NuXP0i3zP628dVJPp3hdEh3WeFyXpDhdFPXZhjPdFGGL1Pc5pRNSY4Zn+c2p8mbqHlahi9l/UeGIPCVDEfhDlhiHZb8NvpYu2eG0zh9I8MYwSsyvGm8ckbtD4/r0jJ16sGJmntlOP3Rv4/LuyrDkZejk9xtha/9Svp9UIaP87ZmeBN6+fi8W6bqWpI3Zzhry0Vjnz6f5Bd39L6vZjtK8sIMf0i3jtvrqVnmjChr6P9rMnwc/b1MnGEhi59d5LCp+fcf258xTx/Sbx9d9jXL8GWjaxeZ/54Z/vH8doYgcEaGP0otyW/17O8qnuvIse1hGU6beE2S72Q4VeFtzg6QVbyvzLGd3C/D906uzLA/XZjh7DSTZ5qZuY3Ms69si+0kyf+dIRhdN85/1tQ2vP9y20qG/eL8Ge1fSfKBXvvmtvjdL7ZO2/g17/qevdQ21qm/K9o3J/qy7N/brGDf6XnL8D2fkzKMe//fGcaUvy/Jz26L59uRbjW+AMASarhwz2eSfLO19l8n2luSt7TWdthLwy7WdzaeqvrFDH8c/3Pbxkd/Zj1XDRe/2Jxkt9bajjy2eC72lcXdXn73G+E9eznb832AtTFcBGaoqj/N8HHopRmG2fx6kp/M8JHcDm0j951bVNUvJNkjw5CC72c4GvR7Sf5X7z+s2/O5diT2FXZ0P6j75u2FkA2z3T3D1bJ2y/Dx1r8leXJr7R/WtVcrs5H7zi2uyTBG9IgMl9++NMPH60ds8OfakdhX2NH9oO6btwuGiwAAQGcuRgMAAJ0J2QAA0JmQDQAAnQnZAADQmZANAACdCdkAANCZkA0AAJ0J2QAA0JmQDQAAnQnZAADQ2f8Ba666+D4I7jQAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "hist = Counter(tag for _, tags in dev_ner for tag in tags)\n", "plt.bar(sorted(hist.keys(), key=hist.get), sorted(hist.values()))" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "A baseline that always predicts `O` is already pretty good:" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "pycharm": { "name": "#%%\n" }, "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/plain": [ "0.8527549824150059" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "only_o = [tuple(['O'] * len(tags)) for _, tags in dev_ner]\n", "seq.accuracy(dev_ner, only_o)" ] }, { "cell_type": "code", "execution_count": 74, "metadata": { "pycharm": { "name": "#%%\n" }, "slideshow": { "slide_type": "skip" } }, "outputs": [], "source": [ "def get_spans(labels):\n", " spans = []\n", " current = [None, None, None]\n", " for i, label in enumerate(labels):\n", " if label.startswith(\"I-\") and label[2:] == current[0]:\n", " # continued span\n", " continue\n", " # push span, if there is any\n", " if current[0] is not None:\n", " current[2] = i\n", " spans.append(current)\n", " current = [None, None, None]\n", " if label.startswith(\"B-\"):\n", " current[0] = label[2:]\n", " current[1] = i\n", " if current[0] is not None:\n", " current[2] = len(labels)\n", " spans.append(current)\n", " return spans\n", "\n", "def _calculate_prf(preds, golds):\n", " total_pred, total_gold, match = 0, 0, 0\n", " for pred, gold in zip(preds, golds):\n", " pred_s = get_spans(pred)\n", " gold_s = get_spans(gold)\n", " total_pred += len(pred_s)\n", " total_gold += len(gold_s)\n", " match += sum(s in pred_s for s in gold_s)\n", " # precision: % of entities found by the system that are correct\n", " p = match / total_pred if total_pred else 0.0\n", " # recall: % of entities in dataset found by the system\n", " r = match / total_gold if total_gold else 0.0\n", " # f-score: harmonic mean of precision and recall\n", " f = 2 * (p * r) / (p + r) if p + r else 0.0\n", "\n", " return p, r, f\n", "\n", "def print_prf(goldset, preds):\n", " p, r, f = _calculate_prf(preds, [s[1] for s in goldset])\n", " print(f\"precision: {p:.2f}\\nrecall: {r:.2f}\\nf-score: {f:.2f}\")" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "Tasks like NER are more commonly evaluated with...\n", "\n", "### Precision, recall, and F-score\n", "\n", "\\begin{align}\n", "\\text{precision} & = \\frac{|\\text{predicted}\\cap\\text{annotated}|}{|\\text{predicted}|} \\\\[.5em]\n", "\\text{recall} & = \\frac{|\\text{predicted}\\cap\\text{annotated}|}{|\\text{annotated}|} \\\\[.5em]\n", "F & = 2 \\cdot \\frac{\\text{precision}\\cdot\\text{recall}}{\\text{precision}+\\text{recall}} \\\\\n", "\\end{align}\n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Example:" ] }, { "cell_type": "code", "execution_count": 86, "metadata": { "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
0123456789101112
0Thenewspapersaysthetapewasshotin2004insouthernIraq.
1OOOOOOOOB-timOB-geoI-geoO
2OOOOOOOOB-timOOB-geoO
\n", "
" ], "text/plain": [ " 0 1 2 3 4 5 6 7 8 9 10 11 \\\n", "0 The newspaper says the tape was shot in 2004 in southern Iraq \n", "1 O O O O O O O O B-tim O B-geo I-geo \n", "2 O O O O O O O O B-tim O O B-geo \n", "\n", " 12 \n", "0 . \n", "1 O \n", "2 O " ] }, "execution_count": 86, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pd.DataFrame([dev_ner[18][0], dev_ner[18][1], local_2_pred_dev[18]])" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "predicted = {2004, Iraq}\n", "\n", "annotated = {2004, southern Iraq}" ] }, { "cell_type": "code", "execution_count": 87, "metadata": { "slideshow": { "slide_type": "-" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "precision: 0.50\n", "recall: 0.50\n", "f-score: 0.50\n" ] } ], "source": [ "print_prf([dev_ner[18]], [local_2_pred_dev[18]])" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "back to the full dev set..." ] }, { "cell_type": "code", "execution_count": 50, "metadata": { "pycharm": { "name": "#%%\n" }, "slideshow": { "slide_type": "-" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "precision: 0.73\n", "recall: 0.59\n", "f-score: 0.65\n" ] } ], "source": [ "local_2_pred_dev = local_2.predict(dev_ner)\n", "print_prf(dev_ner, local_2_pred_dev)" ] }, { "cell_type": "code", "execution_count": 46, "metadata": { "pycharm": { "name": "#%%\n" }, "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "precision: 0.00\n", "recall: 0.00\n", "f-score: 0.00\n" ] } ], "source": [ "print_prf(dev_ner, only_o)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Sequence labelling with neural networks" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" }, "slideshow": { "slide_type": "fragment" } }, "source": [ "We can use BiLSTMs for that!\n", "\n", "
\n", " \n", "
\n", "\n", "Source: https://guillaumegenthial.github.io/sequence-tagging-with-tensorflow.html" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" }, "slideshow": { "slide_type": "subslide" } }, "source": [ "### Reminder\n", "A recurrent neural network (plain RNN, LSTM, GRU, ...) computes its output based on a hidden, internal state:\n", "\n", "$$\n", " {\\mathbf{y}}_{t} = \\text{RNN}(\\x_t, {\\mathbf{h}}_{t})\n", "$$\n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "\n", "A **bi-directional** RNN is just two uni-directional RNNs combined:\n", "\n", "\\begin{align}\n", " \\overrightarrow{\\mathbf{y}_{t}} & = \\overrightarrow{\\text{RNN}}(\\x_t, \\overrightarrow{\\mathbf{h}_{t}})\\\\\n", " \\overleftarrow{\\mathbf{y}_{t}} & = \\overleftarrow{\\text{RNN}}(\\x_t, \\overleftarrow{\\mathbf{h}_{t}})\n", " \\\\\n", " {\\mathbf{y}}_{t} & = \\overrightarrow{\\mathbf{y}_{t}} \\oplus \\overleftarrow{\\mathbf{y}_{t}} \\\\\n", "\\end{align}\n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "To predict label probabilities, we use the **softmax function**:\n", "\n", "\n", "$$\n", "\\begin{aligned}\n", " {\\mathbf{y}}_{t} & = \\overrightarrow{\\mathbf{y}_{t}} \\oplus \\overleftarrow{\\mathbf{y}_{t}} \\\\\n", " \\hat{\\mathbf{y}}_{t} & = \\text{softmax}(\\mathbf{W}^o \\mathbf{y}_{t}) \\in \\mathbb{R}^{|V|} \\\\\n", "\\end{aligned}\n", "$$\n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "We can also use transformers such as BERT\n", "![bert_ner](../img/bert_ner.png)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "### Note on tokenisation\n", "\n", "Parts of speech are defined for *words*.\n", "\n", "Tagger must output one tag per word even if using other tokenisation internally." ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" }, "slideshow": { "slide_type": "subslide" } }, "source": [ "### Tokenisation\n", "Combining word representations with character representations improves POS tagging:\n", "\n", "
\n", " \n", "
\n", "\n", "([Plank et al., 2016](https://aclanthology.org/P16-2067/))" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "skip" } }, "source": [ "### An important technical detail\n", "\n", "The linear transformation $\\mathbf{W}^o \\mathbf{y}_{t}$ is usually not modelled as part of the RNN itself in most deep learning frameworks.\n", "\n", "Instead, look for one of\n", "\n", "+ **feed-forward layer**\n", "+ **dense layer** (*e.g. in Keras*)\n", "+ **linear layer** (*e.g. in PyTorch*)\n", "\n", "with a softmax activation" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "### Is it all the same?\n", "\n", "Remember the log-linear classifier:\n", "\n", "$$\n", " p_\\params(y\\bar\\x,i) = \\frac{1}{Z_\\x} \\exp \\langle \\repr(\\x,i),\\params_y \\rangle\n", "$$\n", "\n", "A neural sequence model with a softmax layer on top is also modelling $p_\\params(y\\bar\\x,i)$\n", "\n", "So if you take $\\params$ to be the set of parameters of the neural network, then:\n", "\n", "\\begin{align}\n", " \\hat{\\mathbf{y}}_{t} & = \\text{softmax}(\\hat{\\mathbf{h}}_{t}) \\\\\n", " &= \\frac{1}{Z_\\x} \\exp \\langle \\hat{\\mathbf{h}}_{t},\\params_y \\rangle \\\\\n", "\\end{align}" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "### What is the difference?\n", "\n", "
\n", "\n", "### [ucph.page.link/seq](https://ucph.page.link/seq)\n", "\n", "([Responses](https://docs.google.com/forms/d/1X6LKsQ3a9_XcsZm5gpa8p-q9brXosjlbTubp2nqR1pk/edit#responses))" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "skip" } }, "source": [ "### Solution\n", "\n", "* Incorrect: That neural sequence models can use context: log-linear models can too\n", "* Correct: That neural sequence models have more parameters (generally)\n", "* Incorrect: That neural sequence models are global (not local) models (both can be either local or global)\n", "* Correct: That neural sequence models learn features on their own\n", "* Correct: That log-linear models can only combine features linearly\n", "* Incorrect: That log-linear models perform greedy inference\n", "* Incorrect: That log-linear models can only use the left context (preceding tokens)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "What haven't we modelled yet?" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "## There are *dependencies* between consecutive labels!" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "Can you think about fitting words for this POS tag sequence?\n", "\n", "| | | |\n", "|-|-|-|\n", "| DT | JJ | NN |\n", "| *determiner* | *adjective* | *noun (singular or mass)* |" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "What about this one?\n", "\n", "| | |\n", "|-|-|\n", "| DT | VB |\n", "| *determiner* | *verb (base form)* |" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "+ After determiners (`DT`), adjectives and nouns are much more likely than verbs\n", "+ *Local* models cannot *directly* capture this" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "pycharm": { "name": "#%%\n" }, "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "text/html": [ "\n", "
\n", " \n", " Previous\n", "  \n", " Next\n", "
\n", "
FormerU.S.presidentBillClintonhassignedan
OB-geoOB-perI-perOOO
OB-geoOI-perI-perOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:bill
1.01.01.0
0.601.131.72
1.270.972.54
1 / 85
\n", "
Mondayinthecapital,PhnomPenh.
B-timOOOOB-orgI-orgO
B-timOOOOI-perI-perO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:phnom
1.01.01.0
0.840.880.00
1.270.970.00
2 / 85
\n", "
TheformerpresidentisinCambodiatotourAIDS-relatedprojects
OOOOOB-geoOOOO
OOOOOI-perOOI-perO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:cambodia
1.01.01.0
1.340.510.00
1.270.970.00
3 / 85
\n", "
hisdevelopmentgroup,theClintonFoundationH.I.V./AIDSInitiative.
OOOOOB-perI-perI-perI-perO
OOOOOI-perOI-perI-perO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:clinton
1.01.01.0
0.601.132.71
1.270.973.70
4 / 85
\n", "
HesaidthereishopeCambodiacanbeamodel
OOOOOB-geoOOOO
OOOOOI-perOOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:cambodia
1.01.01.0
1.340.510.00
1.270.970.00
5 / 85
\n", "
Cambodiahasreducedadultinfection
B-geoOOOO
I-perOOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:cambodia
1.01.01.0
1.340.510.00
1.270.970.00
6 / 85
\n", "
inthecity'sbusyBakaramarket.
OOOOOB-geoOO
OOOOOI-perOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:bakara
1.01.01.0
1.340.510.00
1.270.970.00
7 / 85
\n", "
Insurgentgroupsal-ShababandHizbulIslamaretryingto
OOOOB-perI-perOOO
OOOOI-perB-geoOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:hizbul
1.01.01.0
0.601.130.00
1.270.970.00
8 / 85
\n", "
ThefounderofMicrosoft,BillGates,
OOOB-orgOB-perI-perO
OOOI-perOI-perI-perO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:microsoft
1.01.01.0
0.840.880.00
1.270.970.00
9 / 85
\n", "
ThefounderofMicrosoft,BillGates,hasreceived
OOOB-orgOB-perI-perOOO
OOOI-perOI-perI-perOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:bill
1.01.01.0
0.601.131.72
1.270.972.54
10 / 85
\n", "
andpushedthroughcrowdsatHanoiUniversitySaturday,where
OOOOOB-orgI-orgB-timOO
OOOOOI-perI-orgB-timOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:hanoi
1.01.01.0
0.840.880.00
1.270.970.00
11 / 85
\n", "
HanoiUniversitySaturday,whereGateswasdeliveringaspeech
B-orgI-orgB-timOOB-perOOOO
I-perI-orgB-timOOI-perOOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:gates
1.01.01.0
0.601.131.82
1.270.971.40
12 / 85
\n", "
Earlier,GatesmetPrimeMinisterPhan
OOB-perOB-perOB-per
OOI-perOB-perI-perI-per
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:gates
1.01.01.0
0.601.131.82
1.270.971.40
13 / 85
\n", "
,GatesmetPrimeMinisterPhanVanKhaiandPresident
OB-perOB-perOB-perI-perI-perOB-per
OI-perOB-perI-perI-perB-geoI-perOB-per
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:phan
1.01.01.0
0.601.130.00
1.270.970.00
14 / 85
\n", "
,theVietnameseleadersandGatessignedanagreementto
OOB-gpeOOB-perOOOO
OOB-gpeOOI-perOOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:gates
1.01.01.0
0.601.131.82
1.270.971.40
15 / 85
\n", "
signedanagreementtouseMicrosoftsoftwareinVietnam's
OOOOOB-orgOOB-geoO
OOOOOI-perOOB-geoO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:microsoft
1.01.01.0
0.840.880.00
1.270.970.00
16 / 85
\n", "
Gates'triptoHanoi
B-perOOOB-geo
I-perOOOI-per
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:gates
1.01.01.0
0.601.131.82
1.270.971.40
17 / 85
\n", "
Gates'triptoHanoiisseenasanother
B-perOOOB-geoOOOO
I-perOOOI-perOOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:hanoi
1.01.01.0
1.340.510.00
1.270.970.00
18 / 85
\n", "
techdealwhenleadingchipmakerIntelCorporationannounceditwas
OOOOOB-orgI-orgOOO
OOOOOI-perI-orgOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:intel
1.01.01.0
0.840.880.00
1.270.970.00
19 / 85
\n", "
KandaniNgwira,whoworks
B-perI-perOOO
I-perI-perOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:kandani
1.01.01.0
0.601.130.00
1.270.970.00
20 / 85
\n", "
AMalawijournalistwhoworksfor
OB-gpeOOOO
OI-perOOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:malawi
1.01.01.0
-2.953.910.00
1.270.970.00
21 / 85
\n", "
KandaniNgwiracontactedmediaoutlets
B-perI-perOOO
I-perI-perOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:kandani
1.01.01.0
0.601.130.00
1.270.970.00
22 / 85
\n", "
NgwiraworksfortheWeekly
B-perOOOB-org
I-perOOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:ngwira
1.01.01.0
0.601.130.00
1.270.970.00
23 / 85
\n", "
,anewspaperthattheMalawiangovernmenttriedtoban
OOOOOB-gpeOOOO
OOOOOI-perOOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:malawian
1.01.01.0
-2.953.910.00
1.270.970.00
24 / 85
\n", "
Nationalpolicespokesman,WillyMwaluka,sayshe
OOOOB-perI-perOOO
B-orgOOOI-perI-perOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:willy
1.01.01.0
0.601.130.00
1.270.970.00
25 / 85
\n", "
hehadnoinformationaboutNgwira'sdetention.
OOOOOB-perOOO
OOOOOI-perOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:ngwira
1.01.01.0
0.601.130.00
1.270.970.00
26 / 85
\n", "
sayshewasarrestedinBlantyreandtransportedtothe
OOOOOB-geoOOOO
OOOOOI-perOOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:blantyre
1.01.01.0
1.340.510.00
1.270.970.00
27 / 85
\n", "
transportedtothecapital,Lilongwe.
OOOOOB-geoO
OOOOOI-perO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:lilongwe
1.01.01.0
1.340.510.00
1.270.970.00
28 / 85
\n", "
BlantyreNewspapersLimited,which
B-orgI-orgI-orgOO
I-perOOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:blantyre
1.01.01.0
0.840.880.00
1.270.970.00
29 / 85
\n", "
isprovidingalawyerforNgwira.
OOOOOB-perO
OOOOOI-perO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:ngwira
1.01.01.0
0.601.130.00
1.270.970.00
30 / 85
\n", "
followeffortsbyPalestinianleaderMahmoudAbbastopersuademilitants
OOOB-gpeOB-perI-perOOO
OOOB-gpeOI-perI-perOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:mahmoud
1.01.01.0
0.601.133.73
1.270.974.44
31 / 85
\n", "
'schiefveterinaryofficial,ValerySitnikov,saidbio-terrorism
OOOOOB-perI-perOOO
OOOOOI-perI-perOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:valery
1.01.01.0
0.601.130.00
1.270.970.00
32 / 85
\n", "
MostofthevictimswereAsians.
OOOOOB-gpeO
OOOOOI-perO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:asians
1.01.01.0
-2.953.910.00
1.270.970.00
33 / 85
\n", "
'sDeputyForeignMinister,ChoeSuHon,said
OOOOOB-orgI-orgI-orgOO
OOB-perI-perOI-perI-perI-perOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:choe
1.01.01.0
0.840.880.00
1.270.970.00
34 / 85
\n", "
Meanwhile,Japan'sKyodonewsagencyreportsPyongyang
OOB-geoOB-geoOOOB-geo
OOB-geoOI-perOOOB-tim
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:kyodo
1.01.01.0
1.340.510.00
1.270.970.00
35 / 85
\n", "
Stanley\"Tookie\"Williams
B-perOB-perOB-per
I-perOI-perOI-per
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:stanley
1.01.01.0
0.601.130.00
1.270.970.00
36 / 85
\n", "
Stanley\"Tookie\"Williamshasbeen
B-perOB-perOB-perOO
I-perOI-perOI-perOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:tookie
1.01.01.0
0.601.130.00
1.270.970.00
37 / 85
\n", "
Stanley\"Tookie\"Williamshasbeenconvictedof
B-perOB-perOB-perOOOO
I-perOI-perOI-perOOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:williams
1.01.01.0
0.601.13-0.28
1.270.972.04
38 / 85
\n", "
theco-founderoftheinfamousCripsstreetgang.
OOOOOB-geoOOO
OOOOOI-perOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:crips
1.01.01.0
1.340.510.00
1.270.970.00
39 / 85
\n", "
hasattractedinternationalattentionbecauseWilliamsistheauthorof
OOOOOB-perOOOO
OOOOOI-perOOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:williams
1.01.01.0
0.601.13-0.28
1.270.972.04
40 / 85
\n", "
thebooksareevidencethatWilliamshasturnedhislife
OOOOOB-perOOOO
OOOOOI-perOOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:williams
1.01.01.0
0.601.13-0.28
1.270.972.04
41 / 85
\n", "
Williamshasapologizedforhis
B-perOOOO
I-perOOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:williams
1.01.01.0
0.601.13-0.28
1.270.972.04
42 / 85
\n", "
theCaliforniahighcourtupheldWilliams'conviction.
OB-geoOOOB-perOOO
OB-geoOOOI-perOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:williams
1.01.01.0
0.601.13-0.28
1.270.972.04
43 / 85
\n", "
Mr.Schwarzenegger'sdecisiononclemency
B-perB-orgOOOO
B-perI-perOOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:schwarzenegger
1.01.01.0
0.840.880.00
1.270.970.00
44 / 85
\n", "
themhighlyfavoredtwo-timepresidentAkbarHashemiRafsanjani.
OOOOB-perB-orgI-orgI-orgO
OOOOOI-perI-perI-perO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:akbar
1.01.01.0
0.840.880.00
1.270.970.00
45 / 85
\n", "
ofthenationalpolice,BagerQalibaf,andthe
OOOOOB-perI-perOOO
OOOOOI-perI-perOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:bager
1.01.01.0
0.601.130.00
1.270.970.00
46 / 85
\n", "
themayorofTehran,MahmoudAhmadinejad,arealso
OOOB-geoOB-geoI-geoOOO
OOOB-geoOI-perI-perOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:mahmoud
1.01.01.0
1.340.51-1.62
1.270.974.44
47 / 85
\n", "
willbescreenedbytheGuardiansCouncil,whichwill
OOOOOB-orgI-orgOOO
OOOOOI-perI-orgOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:guardians
1.01.01.0
0.840.880.00
1.270.970.00
48 / 85
\n", "
crowdinBeirutTuesday,HassanNasrallahaccusedMr.Bush
OOB-geoB-timOB-perI-perOB-perI-per
OOB-geoB-timOI-perI-perOB-perI-per
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:hassan
1.01.01.0
0.601.131.76
1.270.972.63
49 / 85
\n", "
HealsoassertedthattheBushadministrationorderedIsraelto
OOOOOB-perOOB-geoO
OOOOOI-perOOB-geoO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:bush
1.01.01.0
0.601.133.09
1.270.973.80
50 / 85
\n", "
ofasecurityconferenceinMunich,Mr.Annansaid
OOOOOB-orgI-orgB-perI-perO
OOOOOI-perOB-perI-perO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:munich
1.01.01.0
0.840.880.00
1.270.970.00
51 / 85
\n", "
alargeaudienceattheSummerOlympicsinBeijing.
OOOOOB-eveI-eveOB-geoO
OOOOOI-eveOOB-geoO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:summer
1.01.01.0
-0.46-0.41-0.03
-1.330.353.15
52 / 85
\n", "
VOA'sMelindaSmithhasdetailsof
B-orgOB-perI-perOOO
B-orgOI-perI-perOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:melinda
1.01.01.0
0.601.130.00
1.270.970.00
53 / 85
\n", "
16prisonerswerekilledatUribanaprisonwhenrivalgangs
OOOOOB-geoOOOO
OOOOOI-perOOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:uribana
1.01.01.0
1.340.510.00
1.270.970.00
54 / 85
\n", "
Service,spokeMondayinOttawatoalegislativecommittee
I-orgOOB-timOB-geoOOOO
OOOB-timOI-perOOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:ottawa
1.01.01.0
1.340.510.00
1.270.970.00
55 / 85
\n", "
HoopertoldthelawmakersCanada
B-perOOOB-geo
I-perOOOB-org
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:hooper
1.01.01.0
0.601.130.00
1.270.970.00
56 / 85
\n", "
Hoopersaidthatmanyof
B-perOOOO
I-perOOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:hooper
1.01.01.0
0.601.130.00
1.270.970.00
57 / 85
\n", "
SaturdaybeforeMr.Chavez'safternoondeparture.
B-timOB-perI-perOB-timOO
B-timOB-perI-perOI-timOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Falseword:afternoon
1.01.01.0
0.652.77-0.14
0.382.724.59
58 / 85
\n", "
sendelectionobserverstomonitorSuriname'sparliamentaryelectionsto
OOOOOB-geoOOOO
OOOOOI-perOOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:suriname
1.01.01.0
1.340.510.00
1.270.970.00
59 / 85
\n", "
TheOASandSurinameofficialsagreedtothe
B-orgI-orgOB-geoOOOO
OI-perOI-perOOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:suriname
1.01.01.0
1.340.510.00
1.270.970.00
60 / 85
\n", "
TherulingcoalitioninSurinamefacesoppositionfromthe
OOOOB-geoOOOO
OOOOI-perOOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:suriname
1.01.01.0
1.340.510.00
1.270.970.00
61 / 85
\n", "
itsleader,formerdictatorDesiBouterse,wouldbecome
OOOOOB-perI-perOOO
OOOOOI-perI-perOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:desi
1.01.01.0
0.601.130.00
1.270.970.00
62 / 85
\n", "
haswarnedthatrelationswithSurinamewouldsufferifBouterse
OOOOOB-geoOOOB-per
OOOOOI-perOOOI-per
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:suriname
1.01.01.0
1.340.510.00
1.270.970.00
63 / 85
\n", "
withSurinamewouldsufferifBoutersetakespower.
OB-geoOOOB-perOOO
OI-perOOOI-perOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:bouterse
1.01.01.0
0.601.130.00
1.270.970.00
64 / 85
\n", "
HewasconvictedintheNetherlandssixyearsagofor
OOOOOB-geoB-timOOO
OOOOOI-geoOOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:netherlands
1.01.01.0
1.340.512.26
0.330.243.73
65 / 85
\n", "
wasneversenttotheNetherlandsasthetwocountries
OOOOOB-geoOOOO
OOOOOI-geoOOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:netherlands
1.01.01.0
1.340.512.26
0.330.243.73
66 / 85
\n", "
Bouterse,whoisan
B-perOOOO
I-perOOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:bouterse
1.01.01.0
0.601.130.00
1.270.970.00
67 / 85
\n", "
asuccessfulmilitarycoupinSurinamein1980,and
OOOOOB-geoOB-timOO
OOOOOI-perOB-timOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:suriname
1.01.01.0
1.340.510.00
1.270.970.00
68 / 85
\n", "
,84-year-oldpopesuffersfromParkinson'sdiseaseandarthritis
OOOOOB-geoOOOO
OOOOOI-perOOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:parkinson
1.01.01.0
1.340.510.00
1.270.970.00
69 / 85
\n", "
overthreeothertowns-Qalqiliya,BethlehemandRamallah
OOOOOB-geoOB-geoOB-geo
OOOOOI-perOI-perOB-geo
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:qalqiliya
1.01.01.0
1.340.510.00
1.270.970.00
70 / 85
\n", "
othertowns-Qalqiliya,BethlehemandRamallah.
OOOB-geoOB-geoOB-geoO
OOOI-perOI-perOB-geoO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:bethlehem
1.01.01.0
1.340.510.00
1.270.970.00
71 / 85
\n", "
build3,500newhomesinMaaleAdumin,thelargest
OOOOOB-geoI-geoOOO
OOOOOI-perI-perOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:maale
1.01.01.0
1.340.510.00
1.270.970.00
72 / 85
\n", "
theyenteredthebarinMichoacanstatebeforedawnWednesday
OOOOOB-geoOOOB-tim
OOOOOI-perOOOB-tim
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:michoacan
1.01.01.0
1.340.510.00
1.270.970.00
73 / 85
\n", "
Mexico'sPresident-electFelipeCalderonhasvowedto
B-geoOOB-perI-perOOO
B-geoOI-perI-perI-perOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:felipe
1.01.01.0
0.601.131.74
1.270.972.23
74 / 85
\n", "
PrimeMinisterBenjaminNetanyahutoldhisCabinet
B-perOB-perI-perOOO
B-perI-perI-perI-perOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:benjamin
1.01.01.0
0.601.13-0.28
1.270.972.04
75 / 85
\n", "
Theregionalbloc-IGAD-hasdecidedto
OOOOB-orgOOOO
OOOOI-perOOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:igad
1.01.01.0
0.840.880.00
1.270.970.00
76 / 85
\n", "
totheholycityofMecca,wheresomeof
OOOOOB-geoOOOO
OOOOOI-perOOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:mecca
1.01.01.0
1.340.510.00
1.270.970.00
77 / 85
\n", "
theminorpilgrimageknownasOmra.
OOOOOB-geoO
OOOOOI-perO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:omra
1.01.01.0
1.340.510.00
1.270.970.00
78 / 85
\n", "
OnlyMuslimsareallowedinMecca.
OOOOOB-geoO
OOOOOI-perO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:mecca
1.01.01.0
1.340.510.00
1.270.970.00
79 / 85
\n", "
theterroristgrouphastargetedWesternersinthepast.
OOOOOB-orgOOOO
OOOOOI-perOOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:westerners
1.01.01.0
0.840.880.00
1.270.970.00
80 / 85
\n", "
authoritiessayformerPrimeMinisterYvonNeptuneandformerInterior
OOOB-perOB-perI-perOOO
OOOB-perI-perI-perI-perOOB-per
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:yvon
1.01.01.0
0.601.130.00
1.270.970.00
81 / 85
\n", "
NeptuneandformerInteriorMinisterJocelermePrivertarebackin
I-perOOOOB-perI-perOOO
I-perOOB-perI-perI-perI-perOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:jocelerme
1.01.01.0
0.601.130.00
1.270.970.00
82 / 85
\n", "
areaccusedofviolenceagainstAristideopponents.
OOOOOB-perOO
OOOOOI-perOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:aristide
1.01.01.0
0.601.130.00
1.270.970.00
83 / 85
\n", "
TheSecurityCouncilhasthreatenedsanctions
OB-orgI-orgOOO
OI-orgI-orgOOO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:security
1.01.01.0
0.840.881.27
0.970.503.60
84 / 85
\n", "
ofdozensofvillagersinDujail.
OOOOOB-geoO
OOOOOI-perO
\n", " \n", " \n", " \n", " \n", " \n", "
biasfirst_upper:Trueword:dujail
1.01.01.0
1.340.510.00
1.270.970.00
85 / 85
\n", "
\n", "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "util.Carousel(local_2.errors(dev_ner,\n", " filter_guess=lambda y: y.startswith(\"I-\"),\n", " filter_gold=lambda y: y.startswith(\"B-\")))" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "In the IOB tagging scheme:\n", "\n", "+ `I-[label]` can logically **only** appear after `B-[label]`!\n", "\n", "The following can **never** be valid tag sequences:\n", "\n", "* `O I-per`\n", "\n", "* `B-per I-geo`\n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Remember that\n", "\n", "$$\n", "p_\\params(\\y|\\x) = \\prod_{i=1}^n p_\\params(y_i|\\x,i,y_{1,\\ldots,i-1})\n", "$$\n", "\n", "What if we went from this...\n", "\n", "$$\n", "\\approx \\prod_{i=1}^n p_\\params(y_i|\\x,i)\n", "$$\n", "\n", "...to this?\n", "\n", "$$\n", "\\approx \\prod_{i=1}^n p_\\params(y_i|\\x,\\color{red}{y_{i-1}},i)\n", "$$\n" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" }, "scrolled": true, "slideshow": { "slide_type": "fragment" } }, "source": [ "Does this remind you of anything you've seen in previous lectures?" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "### First-order Markov assumption\n", "\n", "* Probability of a label depends only on (the input and) the previous label\n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "### Example\n", "\n", "$$\n", "\\prob_\\params(\\text{\"O I-per I-per\"} \\bar \\text{\"president Bill Clinton\"}) = \\\\\n", "\\prob_\\params(\\text{\"O\"}\\bar \\text{\"president Bill Clinton\"},\\text{\"\"},1) ~ \\cdot \\\\\n", "\\prob_\\params(\\text{\"I-per\"} \\bar \\text{\"president Bill Clinton\"},\\text{\"O\"},2) ~ \\cdot \\\\\n", "\\prob_\\params(\\text{\"I-per\"} \\bar \\text{\"president Bill Clinton\"},\\text{\"I-per\"},3) \\\\\n", "$$" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" }, "slideshow": { "slide_type": "subslide" } }, "source": [ "## Maximum Entropy Markov Models (MEMM)\n", "\n", "Log-linear version with access to previous label:\n", "\n", "$$\n", " p_\\params(y_i|\\x,y_{i-1},i) = \\frac{1}{Z_{\\x,y_{i-1},i}} \\exp \\langle \\repr(\\x,y_{i-1},i),\\params_{y_i} \\rangle\n", "$$\n", "\n", "where\n", "$$Z_{\\x,y_{i-1},i}=\\sum_y \\exp \\langle \\repr(\\x,y_{i-1},i),\\params_{y_i} \\rangle$$\n", "is a *local* per-token normalisation factor." ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" }, "scrolled": false, "slideshow": { "slide_type": "skip" } }, "source": [ "### Graphical Representation\n", "\n", "- Reminder: models can be represented as factor graphs\n", "- Each variable of the model (our per-token tag labels and the input sequence $\\x$) is drawn using a circle\n", "- As before, *observed* variables are shaded\n", "- Each factor in the model (terms in the product) is drawn as a box that connects the variables that appear in the corresponding term" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "slideshow": { "slide_type": "skip" } }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", "\n", "\n", "%3\n", "\n", "\n", "\n", "x\n", "\n", "x\n", "\n", "\n", "\n", "y0\n", "\n", "P\n", "\n", "\n", "\n", "t1\n", "\n", "t1\n", "\n", "\n", "\n", "y0--t1\n", "\n", "\n", "\n", "\n", "y1\n", "\n", "y1\n", "\n", "\n", "\n", "y1--t1\n", "\n", "\n", "\n", "\n", "t2\n", "\n", "t2\n", "\n", "\n", "\n", "y1--t2\n", "\n", "\n", "\n", "\n", "y2\n", "\n", "y2\n", "\n", "\n", "\n", "y2--t2\n", "\n", "\n", "\n", "\n", "t3\n", "\n", "t3\n", "\n", "\n", "\n", "y2--t3\n", "\n", "\n", "\n", "\n", "y3\n", "\n", "y3\n", "\n", "\n", "\n", "y3--t3\n", "\n", "\n", "\n", "\n", "t4\n", "\n", "t4\n", "\n", "\n", "\n", "y3--t4\n", "\n", "\n", "\n", "\n", "y4\n", "\n", "y4\n", "\n", "\n", "\n", "y4--t4\n", "\n", "\n", "\n", "\n", "t5\n", "\n", "t5\n", "\n", "\n", "\n", "y4--t5\n", "\n", "\n", "\n", "\n", "y5\n", "\n", "y5\n", "\n", "\n", "\n", "y5--t5\n", "\n", "\n", "\n", "\n", "t6\n", "\n", "t6\n", "\n", "\n", "\n", "y5--t6\n", "\n", "\n", "\n", "\n", "y6\n", "\n", "y6\n", "\n", "\n", "\n", "y6--t6\n", "\n", "\n", "\n", "\n", "t1--x\n", "\n", "\n", "\n", "\n", "t2--x\n", "\n", "\n", "\n", "\n", "t3--x\n", "\n", "\n", "\n", "\n", "t4--x\n", "\n", "\n", "\n", "\n", "t5--x\n", "\n", "\n", "\n", "\n", "t6--x\n", "\n", "\n", "\n", "\n" ], "text/plain": [ "" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "seq.draw_transition_fg(7)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "### Training MEMMs\n", "Optimising the conditional log-likelihood\n", "\n", "$$\n", "\\sum_{(\\x,\\y) \\in \\train} \\log \\prob_\\params(\\y|\\x)\n", "$$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "Decomposes nicely:\n", "$$\n", "\\sum_{(\\x,\\y) \\in \\train} \\sum_{i=1}^{|\\x|} \\log \\prob_\\params(y_i|\\x,y_{i-1},i)\n", "$$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "Easy to train\n", "* Equivalent to a **logistic regression objective** for a classifier that assigns labels based on previous gold labels" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "However...\n", "\n", "### Local normalisation introduces *label bias*\n", "\n", "+ Tag probabilities always sum to 1 at each position\n", "+ Can lead to MEMMs effectively \"ignoring\" the inputs" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Conditional Random Fields (CRF)\n", "\n", "Replace *local* with *global* normalisation.\n", "\n", "Instead of normalising across all possible next states $y_{i+1}$ given a current state $y_i$ and observation $\\x$,\n", "\n", "the CRF normalises across all possible *sequences* $\\y$ given observation $\\x$." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "Formally:\n", "\n", "$$\n", " p_\\params(y_i|\\x,y_{i-1},i) = \\frac{1}{Z_{\\x}} \\exp \\langle \\repr(\\x,y_{i-1},i),\\params_{y_i} \\rangle\n", "$$\n", "\n", "where\n", "$$Z_{\\x}=\\sum_\\y \\prod_i^{|\\x|} \\exp \\langle \\repr(\\x,y_{i-1},i), \\params_{y_i} \\rangle$$\n", "is a *global* normalisation constant depending on $\\x$.\n", "\n", "Notably, each term $\\exp \\langle \\repr(\\x,y_{i-1},i), \\params_{y_i} \\rangle$ in the product can now take on values in $[0,\\infty)$ as opposed to the MEMM terms in $[0,1]$. " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "skip" } }, "source": [ "***\n", "\n", "+ More precisely, this is a **linear-chain CRF**.\n", "\n", " (CRFs can be applied to any graph structure, but we are only considering sequences.)\n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "## Pros and cons of CRFs\n", "\n", "\n", "### 👍\n", "\n", "+ Finds globally optimal label sequence\n", "+ Eliminates label bias\n", "\n", "### 👎\n", "\n", "+ More difficult to train (—cannot break down into local terms anymore!)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "The best of both worlds?\n", "\n", "## Neural CRF\n", "\n", "+ We can **combine** our neural sequence models with a CRF!\n", "\n", "\n", "$$\n", " p_\\params(y_i|\\x,y_{i-1},i) = \\frac{1}{Z_{\\x}} \\exp \\langle \\hat{\\mathbf{h}}_{t},\\params_{y_i} \\rangle\n", "$$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "\n", "![](https://www.gabormelli.com/RKB/images/thumb/1/1e/N16-1030_fig1.png/400px-N16-1030_fig1.png)\n", "\n", "(from [Lample et al., 2016](https://www.aclweb.org/anthology/N16-1030))" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Prediction in MEMMs, CRFs, neural CRFs, ...\n", "\n", "To predict the best label sequence, find a $\\y^*$ with maximal conditional probability\n", "\n", "$$\n", "\\y^* =\\argmax_\\y \\prob_\\params(\\y|\\x).\n", "$$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "## Greedy Prediction\n", "\n", "Simplest option:\n", "* Choose highest scoring label for token 1\n", "* Choose highest scoring label for token 2, conditioned on best label from 1\n", "* etc." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "But...\n", "\n", "+ May lead to **search errors** when returned $\\y^*$ is not highest scoring **global** solution" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "### Problem\n", "\n", "We cannot simply choose each label in isolation because **decisions depend on each other.**" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" }, "slideshow": { "slide_type": "subslide" } }, "source": [ "## Beam Search\n", "\n", "Keep a \"beam\" of the best $\\beta$ previous solutions\n", "\n", "1. Choose $\\beta$ highest scoring labels for token 1\n", "2. 1. For each of the previous $\\beta$ labels: predict probabilities for next label, conditioned on the previous label(s)\n", " 2. **Sum** the log-likelihoods for previous states and next label\n", " 3. **Prune** the beam by only keeping the top $\\beta$ paths\n", "3. Repeat until end of sequence" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" }, "slideshow": { "slide_type": "subslide" } }, "source": [ "## Summary\n", "\n", "\n", "- Many problems can be cast as sequence labelling\n", " - POS tagging\n", " - Named entity recognition (with IOB encoding)\n", " \n", "- Models are similar to sequence **classifiers** but are sequential\n", " - Log-linear models rely on good feature engineering\n", " - Neural sequence labelers rely on substantial amounts of training data but generally perform better\n", "\n", "- CRFs model label dependencies\n", " - Can be stacked on top of neural networks\n", " - Exact inference is expensive\n", " - ...but greedy and beam search often work well\n" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" }, "slideshow": { "slide_type": "subslide" } }, "source": [ "## Background Material \n", "\n", "- Longer introduction to sequence labelling with linear chain models: [notes](chapters/sequence_labeling.ipynb)\n", "- Longer introduction to sequence labelling with CRFs: [slides](chapters/sequence_labeling_crf_slides.ipynb)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "- Jurafsky & Martin, Speech and Language Processing, [§8.4 and §8.5](https://web.stanford.edu/~jurafsky/slp3/8.pdf) introduces Markov chains, HMMs, & MEMMs\n", "- Tutorial on CRFs: Sutton & McCallum, [An Introduction to Conditional Random Fields for Relational Learning](https://people.cs.umass.edu/~mccallum/papers/crf-tutorial.pdf)\n", "- LSTM-CRF architecture: [Huang et al., Bidirectional LSTM-CRF for Sequence Tagging](https://arxiv.org/pdf/1508.01991v1.pdf)\n", "- Globally Normalized Transition-Based Neural Networks: [Andor et al., 2016](https://arxiv.org/abs/1603.06042)" ] } ], "metadata": { "celltoolbar": "Slideshow", "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.2" } }, "nbformat": 4, "nbformat_minor": 1 }