{ "cells": [ { "cell_type": "markdown", "id": "28a0673e-96b5-43f2-8a8b-bd033bf851b0", "metadata": {}, "source": [ "# The Big Project begins!!\n", "\n", "## The Product Pricer\n", "\n", "A model that can estimate how much something costs, from its description.\n", "\n", "## Data Curation Part 1\n", "\n", "Today we'll begin our scrubbing and curating our dataset by focusing on a subset of the data: Home Appliances.\n", "\n", "The dataset is here: \n", "https://huggingface.co/datasets/McAuley-Lab/Amazon-Reviews-2023\n", "\n", "And the folder with all the product datasets is here: \n", "https://huggingface.co/datasets/McAuley-Lab/Amazon-Reviews-2023/tree/main/raw/meta_categories" ] }, { "cell_type": "code", "execution_count": 1, "id": "67cedf85-8125-4322-998e-9375fe745597", "metadata": {}, "outputs": [], "source": [ "# imports\n", "\n", "import os\n", "from dotenv import load_dotenv\n", "from huggingface_hub import login\n", "from datasets import load_dataset, Dataset, DatasetDict\n", "from items import Item\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "code", "execution_count": 2, "id": "7390a6aa-79cb-4dea-b6d7-de7e4b13e472", "metadata": {}, "outputs": [], "source": [ "# environment\n", "\n", "load_dotenv()\n", "os.environ['OPENAI_API_KEY'] = os.getenv('OPENAI_API_KEY', 'your-key-if-not-using-env')\n", "os.environ['ANTHROPIC_API_KEY'] = os.getenv('ANTHROPIC_API_KEY', 'your-key-if-not-using-env')\n", "os.environ['HF_TOKEN'] = os.getenv('HF_TOKEN', 'your-key-if-not-using-env')" ] }, { "cell_type": "code", "execution_count": 3, "id": "0732274a-aa6a-44fc-aee2-40dc8a8e4451", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Token is valid (permission: write).\n", "Your token has been saved in your configured git credential helpers (osxkeychain).\n", "Your token has been saved to /Users/ed/.cache/huggingface/token\n", "Login successful\n" ] } ], "source": [ "# Log in to HuggingFace\n", "\n", "hf_token = os.environ['HF_TOKEN']\n", "login(hf_token, add_to_git_credential=True)" ] }, { "cell_type": "code", "execution_count": 4, "id": "1adcf323-de9d-4c24-a9c3-d7ae554d06ca", "metadata": {}, "outputs": [], "source": [ "%matplotlib inline" ] }, { "cell_type": "code", "execution_count": 5, "id": "049885d4-fdfa-4ff0-a932-4a2ed73928e2", "metadata": {}, "outputs": [], "source": [ "# Load in our dataset\n", "\n", "dataset = load_dataset(\"McAuley-Lab/Amazon-Reviews-2023\", f\"raw_meta_Appliances\", split=\"full\", trust_remote_code=True)" ] }, { "cell_type": "code", "execution_count": 6, "id": "cde08860-b393-49b8-a620-06a8c0990a64", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Number of Appliances: 94,327\n" ] } ], "source": [ "print(f\"Number of Appliances: {len(dataset):,}\")" ] }, { "cell_type": "code", "execution_count": 12, "id": "3e29a5ab-ca61-41cc-9b33-22d374681b85", "metadata": {}, "outputs": [], "source": [ "# Investigate a particular datapoint\n", "datapoint = dataset[2]\n" ] }, { "cell_type": "code", "execution_count": 13, "id": "40a4e10f-6710-4780-a95e-6c0030c3fb87", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Clothes Dryer Drum Slide, General Electric, Hotpoint, WE1M333, WE1M504\n", "['Brand new dryer drum slide, replaces General Electric, Hotpoint, RCA, WE1M333, WE1M504.']\n", "[]\n", "{\"Manufacturer\": \"RPI\", \"Part Number\": \"WE1M333,\", \"Item Weight\": \"0.352 ounces\", \"Package Dimensions\": \"5.5 x 4.7 x 0.4 inches\", \"Item model number\": \"WE1M333,\", \"Is Discontinued By Manufacturer\": \"No\", \"Item Package Quantity\": \"1\", \"Batteries Included?\": \"No\", \"Batteries Required?\": \"No\", \"Best Sellers Rank\": {\"Tools & Home Improvement\": 1315213, \"Parts & Accessories\": 181194}, \"Date First Available\": \"February 25, 2014\"}\n", "None\n" ] } ], "source": [ "# Investigate\n", "\n", "print(datapoint[\"title\"])\n", "print(datapoint[\"description\"])\n", "print(datapoint[\"features\"])\n", "print(datapoint[\"details\"])\n", "print(datapoint[\"price\"])" ] }, { "cell_type": "code", "execution_count": 14, "id": "9d356c6f-b6e8-4e01-98cd-c562d132aafa", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "There are 46,726 with prices which is 49.5%\n" ] } ], "source": [ "# How many have prices?\n", "\n", "prices = 0\n", "for datapoint in dataset:\n", " try:\n", " price = float(datapoint[\"price\"])\n", " if price > 0:\n", " prices += 1\n", " except ValueError as e:\n", " pass\n", "\n", "print(f\"There are {prices:,} with prices which is {prices/len(dataset)*100:,.1f}%\")" ] }, { "cell_type": "code", "execution_count": 15, "id": "bd890259-aa25-4097-9524-f91c2bdd719b", "metadata": {}, "outputs": [], "source": [ "# For those with prices, gather the price and the length\n", "\n", "prices = []\n", "lengths = []\n", "for datapoint in dataset:\n", " try:\n", " price = float(datapoint[\"price\"])\n", " if price > 0:\n", " prices.append(price)\n", " contents = datapoint[\"title\"] + str(datapoint[\"description\"]) + str(datapoint[\"features\"]) + str(datapoint[\"details\"])\n", " lengths.append(len(contents))\n", " except ValueError as e:\n", " pass" ] }, { "cell_type": "code", "execution_count": 16, "id": "89078cb1-9679-4eb0-b295-599b8586bcd1", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABN8AAAIzCAYAAAAwOb9+AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABWCElEQVR4nO3debhWZb0//veWGYQtg+wNSohGOACKI6gljojhRB09YhzMIcspjnr8plaipaiVWlIORThgUud7cGgQxVkDFElyPKTlgAViBhs0BYT1+8Mvz68tiIAsN8PrdV3PdfGs9XnW+qzN/ezo7b3WXVUURREAAAAAYK3bpKEbAAAAAIANlfANAAAAAEoifAMAAACAkgjfAAAAAKAkwjcAAAAAKInwDQAAAABKInwDAAAAgJII3wAAAACgJMI3AAAAACiJ8A0A1hM33HBDqqqq8sQTTzR0Kyv0t7/9LSNGjMj06dOX23fcccdl0003/eSb+hd33nlnqqqq0r59+yxcuLDB+vjmN7+ZQYMGZYsttkhVVVWOO+64Vf7syy+/nKqqqhW+xo0bt9LPfulLX0pVVVUGDRpUb/usWbPyzW9+M/369UuHDh3Spk2b7LLLLrn++uuzZMmSNbnE0owYMSJVVVUfWde/f//07NnzI+uW/TxvuOGGNeqnqqoqp5122hp9dk1NmjQpI0aMyLx581apfvz48TnmmGPy6U9/Oi1atMhWW22VY489Ni+88EK9uvnz5+fiiy9O//79U1tbm0033TS9evXKZZddlnfffXeVztW/f/8Vjs2DDz64Xt20adNy6qmnplevXmndunVqampywAEH5P7771/umFtttdWHjvnmzZuvUl8A0NAaN3QDAMCG4W9/+1suvPDCbLXVVtlpp50aup3ljB49Oknyj3/8I7fffnuOPvroBunjyiuvTO/evXPYYYfl5z//+Rod4/TTT8+QIUPqbevevfuH1v/2t7/N7bffnjZt2iy3b9q0abnpppvyH//xH/nWt76VJk2a5K677srXvva1TJkyZY17XB906tQpkydPzjbbbNPQrayySZMm5cILL8xxxx2XzTbb7CPrL7vsstTW1ub888/P1ltvnZkzZ+aSSy7JzjvvnClTpmSHHXZIkrz66qu56qqrMnTo0Jx55pnZdNNN88gjj2TEiBGZOHFiJk6cuErB59Zbb51bbrml3rYP9nnrrbfm8ccfz/HHH58dd9wxb7/9dq699trsv//+ufHGG/Mf//EfldrbbrttubD81VdfzdFHH50jjzzyI/sBgHWB8A0A2ODNnj07v/vd77Lffvtl0qRJGT16dIOFbwsWLMgmm7x/88HNN9+8Rsf41Kc+lb59+65SbV1dXU4++eR85zvfyQ9/+MPl9u+1117585//nCZNmlS2HXjggVm0aFF+/OMf58ILL0yXLl3WqM91XbNmzVb557i++vWvf52OHTvW27bffvtlq622ypVXXpmf/exnSZJu3brl5ZdfTqtWrerVtWrVKv/1X/+V3//+99l7770/8nwtWrT4yJ/pOeeck+9///v1th1yyCHZeeedc9FFF9UL3/r06bPc5+++++4kyYknnviR/QDAusBtpwCwgXnhhRcyZMiQdOzYMc2aNct2222XH//4x/VqHnzwwVRVVeXWW2/N+eefn86dO6dNmzY54IADMmPGjHq1RVHkkksuSdeuXdO8efPsuuuumThxYvr375/+/ftXjrfbbrslSb785S9XbgsbMWJEvWO9+OKLOeSQQ7LpppumS5cuOeuss5ab1XLNNddkxx13zKabbprWrVtn2223zXnnnfexfiY33nhj3nvvvfznf/5nBg8enPvuuy+vvPJKZX+fPn3y2c9+drnPLVmyJFtssUUGDx5c2fbaa6/li1/8Ylq3bp3NNtssxx57bKZOnbrKty8uC94+KWeddVY6deqUM844Y4X727ZtWy94W2b33XdP8v71rsy7776bs846KzvttFOqq6vTrl279OvXL3fcccdytctu07z55puz3XbbpWXLltlxxx3zm9/8Zrna3/72t9lpp53SrFmzdOvWbbmwZlVMnTo1n/3sZ9OyZctsvfXWufTSS7N06dLK/g+77fSOO+5I796906xZs2y99db54Q9/uNJbXlflelble7l06dJ897vfTY8ePdKiRYtsttlm6d27dyU0HTFiRP7rv/4ryfth2bLv2YMPPvihP4MPBm9J0rlz52y55ZaZOXNmZVurVq3qBW/LLBsH/1r7ca2op0aNGmWXXXb5yPMURZExY8Zk6623zn777bfWegKAMgnfAGAD8txzz2W33XbLM888kx/84Af5zW9+k89//vM544wzcuGFFy5Xf9555+WVV17Jz372s1x//fV54YUXcuihh9Z71tf555+f888/PwcffHDuuOOOfPWrX82JJ56YP/3pT5WanXfeOWPGjEny/jPNJk+enMmTJ9ebmbJ48eIcdthh2X///XPHHXfk+OOPz5VXXpnLLrusUjNu3Liccsop2WeffXLbbbfl9ttvz3/+53/m7bffrtf3Vlttla222mqVfy4///nP06lTpwwcODDHH398li5dWi9w+fKXv5xHH310uedg3XPPPfnb3/6WL3/5y0mSt99+O/vuu28eeOCBXHbZZfnVr36VmpqaT3wW3aWXXpqmTZumZcuW2XvvvXPnnXeusO7ee+/NTTfdlJ/97Gdp1KjRap3j/vvvT+PGjfOZz3xmpXULFy7MP/7xj5x99tm5/fbbc+utt2bvvffO4MGDc9NNNy1X/9vf/jajRo3KRRddlP/5n/9Ju3btcuSRR+Yvf/lLpea+++7L4YcfntatW2fcuHH53ve+l1/96leVMbYqZs+enWOPPTZf+tKXcuedd2bgwIE599xzM3bs2JV+bsKECRk8eHDat2+fX/7yl7n88stz66235sYbb1xh/apcz6p+Ly+//PKMGDEixxxzTH7729/ml7/8ZU444YTK891OPPHEnH766Unef5bbsu/ZzjvvvMo/lyT5y1/+kldeeaVyy+nKLHsO26rUJsmf//zntGvXLo0bN84222yT888/P++8885Hfu69997LI4888pHnuffee/PKK6/k+OOPX6XbYAFgnVAAAOuFMWPGFEmKqVOnfmjNgAEDii233LKoq6urt/20004rmjdvXvzjH/8oiqIoHnjggSJJccghh9Sr+9WvflUkKSZPnlwURVH84x//KJo1a1YcffTR9eomT55cJCn22WefyrapU6cWSYoxY8Ys19ewYcOKJMWvfvWretsPOeSQokePHvX63GyzzT78h/D/bLPNNsU222zzkXVFURQPP/xwkaT4xje+URRFUSxdurTo1q1b0bVr12Lp0qVFURTF3//+96Jp06bFeeedV++zRx11VFFTU1MsXry4KIqi+PGPf1wkKe666656dSeffPKHXvvKtGrVqhg2bNgq1//tb38rTjrppOJXv/pV8cgjjxS33HJL0bdv3yJJ8dOf/rRe7YIFC4qtttqqOPfccyvbunbtWnz+85//yPPcfffdxSabbFL853/+5yr3tsx7771XLF68uDjhhBOKPn361NuXpKipqSnmz59f2TZ79uxik002KUaOHFnZtsceexSdO3cu3nnnncq2+fPnF+3atStW5Z+v++yzT5GkeOyxx+pt33777YsBAwZU3r/00kvL/b3ttttuRZcuXYqFCxdWti1YsKBo3779cude1etZ1e/loEGDip122mml1/a9732vSFK89NJLK/8hfIjFixcX/fv3L9q0aVO8+uqrK6394x//WLRo0aI48sgjV+nY559/fvGTn/ykuP/++4vf/va3xWmnnVY0bty4+NznPlcsWbLkIz+bpLj99ttXWnf00UcXjRo1Kl577bVV6gkA1gVmvgHABuLdd9/NfffdlyOPPDItW7bMe++9V3kdcsgheffddzNlypR6nznssMPqve/du3eSVG7JnDJlShYuXJijjjqqXl3fvn1Xa+ZZ8v4th4ceeuhy5/vX2z933333zJs3L8ccc0zuuOOO/P3vf1/hsV588cW8+OKLq3TeZQstHH/88ZU+jjvuuLzyyiu57777kiTt27fPoYcemhtvvLFyW+LcuXNzxx135D/+4z/SuPH7j8l96KGH0rp16+VWbzzmmGNWqZePq1OnTrn++uvzb//2b9l7770zZMiQPPzww+nTp0++8Y1v5L333qvUfuMb30iTJk3y7W9/e7XO8Yc//CFHHXVU+vbtm5EjR67SZ/77v/87e+21VzbddNM0btw4TZo0yejRo/P8888vV7vvvvumdevWlfc1NTXp2LFjZRy8/fbbmTp1agYPHlxvNcvWrVsvN35Wpra2tnLL5DIfHG8f9Pbbb+eJJ57IEUcckaZNm1a2b7rpph967o+6ntX5Xu6+++754x//mFNOOSV333135s+fv8rXuyqKosgJJ5yQRx55JDfddNNKn+X38ssvZ9CgQenSpUvluXAf5bvf/W6+9rWvZd99980hhxySq6++OpdeemkefvjhFd6GvMzPfvazXHzxxTnrrLNy+OGHf2jdssVSDj744GyxxRar1BMArAuEbwCwgXjzzTfz3nvv5eqrr06TJk3qvQ455JAkWS7Mat++fb33zZo1S5LKbWJvvvlmkvcDhQ9a0baVadmyZb0wZdn53n333cr7oUOH5uc//3leeeWVfOELX0jHjh2zxx57ZOLEiat1rmUWLFiQ//7v/87uu++ezTffPPPmzcu8efNy5JFHpqqqqhLMJe+Hc3/9618r57r11luzcOHCHHfccZWaN998c638LNamJk2a5Oijj86bb75ZuW328ccfz09+8pNcfvnleffddyvXvXTp0rz33nuZN2/ecs/aS5Inn3wyBx54YLp3757f/e53lfGwMuPHj89RRx2VLbbYImPHjs3kyZMzderUHH/88fX+bpf54JhL3h8Hy8bc3Llzs3Tp0tTW1i5Xt6JtH+ajzrMic+fOTVEUq/V3/FHnWZ3v5bnnnpvvf//7mTJlSgYOHJj27dtn//33zxNPPPHRF/wRiqLIiSeemLFjx+aGG25Yacj1yiuvZN99903jxo1z3333pV27dmt83i996UtJslzwv8yYMWNy8skn5ytf+Uq+973vrfRYY8eOzcKFCy20AMB6x2qnALCBaNu2bRo1apShQ4fm1FNPXWFNt27dVuuYy4KF119/fbl9s2fPXu3Zb6viy1/+cr785S/n7bffzsMPP5wLLrgggwYNyp/+9Kd07dp1tY5166235p///Gcef/zxtG3bdrn9t912W+bOnZu2bdtmwIAB6dy5c8aMGZMBAwZkzJgx2WOPPbL99ttX6tu3b5/HH398uePMnj179S90LSqKIsn/v5jDc889l6IocuSRRy5XO3PmzLRt2zZXXnllhg8fXtn+5JNP5oADDkjXrl1zzz33pLq6epXOPXbs2HTr1i2//OUv6z2Da0Xh3qpo27ZtqqqqVvgzLfvnvOzcHzbe1/SYq/q9bNy4cc4888yceeaZmTdvXu69996cd955GTBgQGbOnJmWLVuuUQ/LgrcxY8Zk9OjRlUBsRV555ZX0798/RVHkwQcfzJZbbrlG5/ygFS00MmbMmJx44okZNmxYrr322o98htvo0aNTU1OTQYMGrZWeAOCTInwDgA1Ey5Yts+++++bJJ59M79696902t6b22GOPNGvWLL/85S/rrfg5ZcqUvPLKK/XCtw/Omvu4WrVqlYEDB2bRokU54ogj8uyzz652+DZ69Oi0bt06t99++3L/5/+JJ57If/3Xf+WWW27JaaedVglIrrrqqjzyyCN54oknct1119X7zD777JNf/epXueuuuzJw4MDK9nHjxq35hX5Mixcvzi9/+ct06NAhn/70p5MkBx98cB544IHlav/93/893bp1y8iRIyu1STJ9+vQccMAB2XLLLTNx4sQVBpUfpqqqKk2bNq0XnMyePXultxmuTKtWrbL77rtn/Pjx+d73vleZLblgwYL8+te/XqNjrs65d91119x+++35/ve/X/kOvfXWWytcwXRVrOn3crPNNssXv/jF/PWvf83w4cPz8ssvZ/vtt1/t71lRFDnppJMyZsyYXHfddZXFQ1bk1VdfTf/+/bNkyZI8+OCDq/19W5FlC1X07du33vYbbrghJ554Yr70pS/lZz/72UcGb0888USeeuqpnHPOOZXbwAFgfeF/uQBgPXP//ffn5ZdfXm77IYcckh/+8IfZe++989nPfjZf+9rXstVWW2XBggV58cUX8+tf/7qycuGqateuXc4888yMHDkybdu2zZFHHpnXXnstF154YTp16lQv0Npmm23SokWL3HLLLdluu+2y6aabpnPnzuncufMqn++kk05KixYtstdee6VTp06ZPXt2Ro4cmerq6uy2226VumXB0cqe+/bMM8/k8ccfz9e+9rXst99+y+3fa6+98oMf/CCjR4/OaaedluT9W08vu+yyDBkyJC1atFhuFdNhw4blyiuvzJe+9KV897vfzac//encddddufvuu5OseHbPBz300EN54403kiRLlizJK6+8kv/7f/9vkvfDvc033zxJ8uCDD2bffffNBRdckBEjRiRJzjzzzCxevDh77bVXamtrM3PmzFx99dWZPn16xowZU1nRtLa2doW3aDZv3jzt27dP//79K9tmzJiRAw44IEly8cUX54UXXqi36us222xT6WlFBg0alPHjx+eUU07JF7/4xcycOTPf+c530qlTp+VWj11V3/nOd3LwwQfnwAMPzFlnnZUlS5bksssuS6tWrfKPf/xjjY65qi666KJ8/vOfz4ABA/L1r389S5Ysyfe+971suumma3zuVf1eHnrooenZs2d23XXXbL755nnllVdy1VVXpWvXrunevXuSpFevXpVjDhs2LE2aNEmPHj3qPXfuX51xxhkZPXp0jj/++PTq1ave7Z/NmjVLnz59kiRz5szJvvvum1mzZmX06NGZM2dO5syZU6ndcsst682CWxa8L/td9Mgjj+Tiiy/OkUcema233jrvvvtu7rrrrlx//fXZb7/96j0z77//+79zwgknZKeddsrJJ5+83GzSPn36LHfL87JbxE844YRV+6EDwLqk4dZ6AABWx7LVTj/stWz1w5deeqk4/vjjiy222KJo0qRJsfnmmxd77rln8d3vfrdyrGWrnf73f/93vXOsaPXHpUuXFt/97neLLbfcsmjatGnRu3fv4je/+U2x4447LrcK4q233lpsu+22RZMmTYokxQUXXFAUxfurnbZq1Wq5a7rgggvqrSB54403Fvvuu29RU1NTNG3atOjcuXNx1FFHFU899VS9z3Xt2rXo2rXrSn9ew4cPL5IU06dP/9Cab3zjG0WSYtq0aZVte+65Z5GkOPbYY1f4mVdffbUYPHhwsemmmxatW7cuvvCFLxS/+93viiTFHXfcsdKeiuL/X4lzRa8HHnigUvfrX/+6SFJce+21lW2jR48udt9996Jdu3ZF48aNi7Zt2xYDBgwo7r777o88b1GseLXTjxpXq7KC66WXXlpstdVWRbNmzYrtttuu+OlPf7rc321RvL866KmnnrrCvj646uudd95Z9O7du2jatGnxqU99qrj00ktXeMwV2WeffYoddthhue3Dhg2rN25WNN6Loihuu+22olevXvXOfcYZZxRt27Zd4+tZle/lD37wg2LPPfcsOnToUDn3CSecULz88sv1jnXuuecWnTt3LjbZZJPlxs2Kevmwv9t//Vks+53wYa9l3+VlOnToUPTt27fy/oUXXigOOeSQYosttiiaNWtWNG/evOjVq1dx8cUXF++++269zy5b/fijfpct889//rOorq4uPve5z33odQLAuqyqKP7fQ0IAAFbRSy+9lG233TYXXHBBzjvvvIZup8Fdcskl+eY3v5lXX311rT0j65xzzsmtt96aF154YbmFKvhkLV68ODvttFO22GKL3HPPPQ3dToN77rnnssMOO+Q3v/lNPv/5zzd0OwCwznPbKQCwUn/84x9z6623Zs8990ybNm0yY8aMXH755WnTps1GeQvYqFGjkiTbbrttFi9enPvvvz8/+tGP8qUvfWmtBW9J8sADD+Rb3/qW4K0BnHDCCTnwwAMrtz5fe+21ef755/PDH/6woVtbJzzwwAPp16+f4A0AVpGZbwDASr344ov56le/mj/+8Y+ZN29eqqur079//1x88cXp0aNHQ7f3ifv5z3+eK6+8Mi+//HIWLlyYT33qUxkyZEi++c1vrpVFLmh4Rx11VCZNmpQ33ngjTZo0yc4775zzzjsvBx98cEO3BgCsh4RvAAAAAFCSj16SCwAAAABYI8I3AAAAACiJ8A0A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AAAoifANAAAAAEoifAMAAACAkgjfAAAAAKAkwjcAAAAAKInwDQAAAABKInwDAAAAgJII3wAAAACgJMI3AAAAACiJ8A0AAAAASiJ8AwAAAICSCN8AAAAAoCTCNwAAAAAoifANAAAAAEoifAMAAACAkgjfAAAAAKAkwjcAAAAAKInwDQAAAABKInwDAAAAgJII3wAAAACgJMI3AAAAACiJ8A0AAAAAStKg4dvIkSOz2267pXXr1unYsWOOOOKIzJgxo17Ncccdl6qqqnqvvn371qtZuHBhTj/99HTo0CGtWrXKYYcdltdee61ezdy5czN06NBUV1enuro6Q4cOzbx588q+RAAAAAA2Yg0avj300EM59dRTM2XKlEycODHvvfdeDjrooLz99tv16g4++ODMmjWr8vrd735Xb//w4cNz2223Zdy4cXn00Ufz1ltvZdCgQVmyZEmlZsiQIZk+fXomTJiQCRMmZPr06Rk6dOgncp0AAAAAbJwaN+TJJ0yYUO/9mDFj0rFjx0ybNi2f+9znKtubNWuW2traFR6jrq4uo0ePzs0335wDDjggSTJ27Nh06dIl9957bwYMGJDnn38+EyZMyJQpU7LHHnskSX7605+mX79+mTFjRnr06FHSFQIAAACwMVunnvlWV1eXJGnXrl297Q8++GA6duyYz3zmMznppJMyZ86cyr5p06Zl8eLFOeiggyrbOnfunJ49e2bSpElJksmTJ6e6uroSvCVJ3759U11dXakBAAAAgLWtQWe+/auiKHLmmWdm7733Ts+ePSvbBw4cmH/7t39L165d89JLL+Vb3/pW9ttvv0ybNi3NmjXL7Nmz07Rp07Rt27be8WpqajJ79uwkyezZs9OxY8flztmxY8dKzQctXLgwCxcurLyfP3/+2rhMAAAAADYi60z4dtppp+Wpp57Ko48+Wm/70UcfXflzz549s+uuu6Zr16757W9/m8GDB3/o8YqiSFVVVeX9v/75w2r+1ciRI3PhhReu7mUAAAAAQMU6cdvp6aefnjvvvDMPPPBAttxyy5XWdurUKV27ds0LL7yQJKmtrc2iRYsyd+7cenVz5sxJTU1Npeb1119f7lhvvPFGpeaDzj333NTV1VVeM2fOXJNLAwAAAGAj1qDhW1EUOe200zJ+/Pjcf//96dat20d+5s0338zMmTPTqVOnJMkuu+ySJk2a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aRo0fLvmmmuSJP3796+3fcyYMTnuuOOSJOecc07eeeednHLKKZk7d2722GOP3HPPPWndunWl/sorr0zjxo1z1FFH5Z133sn++++fG264IY0aNarU3HLLLTnjjDMqq6IedthhGTVqVLkXCAAAAMBGrUHDt6IoPrKmqqoqI0aMyIgRIz60pnnz5rn66qtz9dVXf2hNu3btMnbs2DVpEwAAAADWSIOGbwCsf8bPmLVa9YN7dCqpEwAAgHXfOrHaKQAAAABsiIRvAAAAAFAS4RsAAAAAlET4BgAAAAAlEb4BAAAAQEmEbwAAAABQEuEbAAAAAJRE+AYAAAAAJRG+AQAAAEBJhG8AAAAAUBLhGwAAAACURPgGAAAAACURvgEAAABASYRvAAAAAFAS4RsAAAAAlET4BgAAAAAlEb4BAAAAQEmEbwAAAABQEuEbAAAAAJRE+AYAAAAAJRG+AQAAAEBJhG8AAAAAUJLGDd0AbAzGz5i1WvWDe3QqqRMAAADgk2TmGwAAAACURPgGAAAAACURvgEAAABASYRvAAAAAFAS4RsAAAAAlET4BgAAAAAlEb4BAAAAQEmEbwAAAABQEuEbAAAAAJRE+AYAAAAAJRG+AQAAAEBJhG8AAAAAUBLhGwAAAACURPgGAAAAACURvgEAAABASYRvAAAAAFCSxmvyoa233jpTp05N+/bt622fN29edt555/zlL39ZK80BsOEaP2PWatUP7tGppE4AAADKs0Yz315++eUsWbJkue0LFy7MX//614/dFAAAAABsCFZr5tudd95Z+fPdd9+d6urqyvslS5bkvvvuy1ZbbbXWmgMAAACA9dlqhW9HHHFEkqSqqirDhg2rt69JkybZaqut8oMf/GCtNQcAAAAA67PVCt+WLl2aJOnWrVumTp2aDh06lNIUAAAAAGwI1mjBhZdeemlt9wEAAAAAG5w1Ct+S5L777st9992XOXPmVGbELfPzn//8YzcGAAAAAOu7NQrfLrzwwlx00UXZdddd06lTp1RVVa3tvgAAAABgvbdG4du1116bG264IUOHDl3b/QAAAADABmOTNfnQokWLsueee67tXgAAAABgg7JG4duJJ56YX/ziF2u7FwAAAADYoKzRbafvvvturr/++tx7773p3bt3mjRpUm//FVdcsVaaAwAAAID12RqFb0899VR22mmnJMkzzzxTb5/FFwAAAADgfWsUvj3wwANruw8AAAAA2OCs0TPfAAAAAICPtkYz3/bdd9+V3l56//33r3FDAAAAALChWKPwbdnz3pZZvHhxpk+fnmeeeSbDhg1bG30BAAAAwHpvjcK3K6+8coXbR4wYkbfeeutjNQQAAAAAG4q1+sy3L33pS/n5z3++Ng8JAAAAAOuttRq+TZ48Oc2bN1+bhwQAAACA9dYa3XY6ePDgeu+LosisWbPyxBNP5Fvf+tZaaQwAAAAA1ndrFL5VV1fXe7/JJpukR48eueiii3LQQQetlcYAAAAAYH23RuHbmDFj1nYfAAAAALDB+VjPfJs2bVrGjh2bW265JU8++eRqf/7hhx/OoYcems6dO6eqqiq33357vf3HHXdcqqqq6r369u1br2bhwoU5/fTT06FDh7Rq1SqHHXZYXnvttXo1c+fOzdChQ1NdXZ3q6uoMHTo08+bNW+1+AQAAAGB1rFH4NmfOnOy3337ZbbfdcsYZZ+S0007LLrvskv333z9vvPHGKh/n7bffzo477phRo0Z9aM3BBx+cWbNmVV6/+93v6u0fPnx4brvttowbNy6PPvpo3nrrrQwaNChLliyp1AwZMiTTp0/PhAkTMmHChEyfPj1Dhw5d/QsHAAAAgNWwRrednn766Zk/f36effbZbLfddkmS5557LsOGDcsZZ5yRW2+9dZWOM3DgwAwcOHClNc2aNUttbe0K99XV1WX06NG5+eabc8ABByRJxo4dmy5duuTee+/NgAED8vzzz2fChAmZMmVK9thjjyTJT3/60/Tr1y8zZsxIjx49VvWyAQAAAGC1rFH4NmHChNx7772V4C1Jtt9++/z4xz9e6wsuPPjgg+nYsWM222yz7LPPPrn44ovTsWPHJO/f9rp48eJ65+zcuXN69uyZSZMmZcCAAZk8eXKqq6srwVuS9O3bN9XV1Zk0adKHhm8LFy7MwoULK+/nz5+/Vq8LgLVj/IxZq1U/uEenkjoBAABY3hrddrp06dI0adJkue1NmjTJ0qVLP3ZTywwcODC33HJL7r///vzgBz/I1KlTs99++1VCsdmzZ6dp06Zp27Ztvc/V1NRk9uzZlZplYd2/6tixY6VmRUaOHFl5Rlx1dXW6dOmy1q4LAAAAgI3DGoVv++23X77+9a/nb3/7W2XbX//61/znf/5n9t9//7XW3NFHH53Pf/7z6dmzZw499NDcdddd+dOf/pTf/va3K/1cURSpqqqqvP/XP39YzQede+65qaurq7xmzpy55hcCAAAAwEZpjcK3UaNGZcGCBdlqq62yzTbb5NOf/nS6deuWBQsW5Oqrr17bPVZ06tQpXbt2zQsvvJAkqa2tzaJFizJ37tx6dXPmzElNTU2l5vXXX1/uWG+88UalZkWaNWuWNm3a1HsBAAAAwOpYo2e+denSJX/4wx8yceLE/O///m+Kosj2229fWfSgLG+++WZmzpyZTp3ef17PLrvskiZNmmTixIk56qijkiSzZs3KM888k8svvzxJ0q9fv9TV1eXxxx/P7rvvniR57LHHUldXlz333LPUfgEAAADYuK1W+Hb//ffntNNOy5QpU9KmTZsceOCBOfDAA5O8v/LoDjvskGuvvTaf/exnV+l4b731Vl588cXK+5deeinTp09Pu3bt0q5du4wYMSJf+MIX0qlTp7z88ss577zz0qFDhxx55JFJkurq6pxwwgk566yz0r59+7Rr1y5nn312evXqVQkCt9tuuxx88ME56aSTct111yVJvvKVr2TQoEFWOgUAAACgVKt12+lVV12Vk046aYW3YFZXV+fkk0/OFVdcscrHe+KJJ9KnT5/06dMnSXLmmWemT58++fa3v51GjRrl6aefzuGHH57PfOYzGTZsWD7zmc9k8uTJad26deUYV155ZY444ogcddRR2WuvvdKyZcv8+te/TqNGjSo1t9xyS3r16pWDDjooBx10UHr37p2bb755dS4dAAAAAFbbas18++Mf/5jLLrvsQ/cfdNBB+f73v7/Kx+vfv3+KovjQ/XffffdHHqN58+a5+uqrV/qsuXbt2mXs2LGr3BcAAAAArA2rNfPt9ddfT5MmTT50f+PGjfPGG2987KYAAAAAYEOwWuHbFltskaeffvpD9z/11FOVxRAAAAAAYGO3WredHnLIIfn2t7+dgQMHpnnz5vX2vfPOO7ngggsyaNCgtdogAHwSxs+YtVr1g3v4j00AAMBHW63w7Zvf/GbGjx+fz3zmMznttNPSo0ePVFVV5fnnn8+Pf/zjLFmyJOeff35ZvQIAAADAemW1wreamppMmjQpX/va13LuuedWFkuoqqrKgAED8pOf/CQ1NTWlNAoAAAAA65vVCt+SpGvXrvnd736XuXPn5sUXX0xRFOnevXvatm1bRn8AAAAAsN5a7fBtmbZt22a33XZbm70AAAAAwAZltVY7BQAAAABWnfANAAAAAEoifAMAAACAkgjfAAAAAKAkwjcAAAAAKMkar3YKG4PxM2atVv3gHp1K6gQAAABYH5n5BgAAAAAlEb4BAAAAQEmEbwAAAABQEuEbAAAAAJRE+AYAAAAAJRG+AQAAAEBJGjd0AwCwIRk/Y9Zq1Q/u0amkTgAAgHWBmW8AAAAAUBLhGwAAAACURPgGAAAAACURvgEAAABASYRvAAAAAFAS4RsAAAAAlET4BgAAAAAlEb4BAAAAQEmEbwAAAABQEuEbAAAAAJRE+AYAAAAAJRG+AQAAAEBJhG8AAAAAUBLhGwAAAACURPgGAAAAACURvgEAAABASYRvAAAAAFAS4RsAAAAAlET4BgAAAAAlEb4BAAAAQEkaN3QDAEB5xs+YtVr1g3t0KqkTAADYOJn5BgAAAAAlEb4BAAAAQEmEbwAAAABQEuEbAAAAAJRE+AYAAAAAJRG+AQAAAEBJGjd0AwDA8sbPmLVa9YN7dCqpEwAA4OMw8w0AAAAASiJ8AwAAAICSCN8AAAAAoCTCNwAAAAAoifANAAAAAEoifAMAAACAkgjfAAAAAKAkwjcAAAAAKInwDQAAAABKInwDAAAAgJII3wAAAACgJMI3AAAAACiJ8A0AAAAASiJ8AwAAAICSCN8AAAAAoCQNGr49/PDDOfTQQ9O5c+dUVVXl9ttvr7e/KIqMGDEinTt3TosWLdK/f/88++yz9WoWLlyY008/PR06dEirVq1y2GGH5bXXXqtXM3fu3AwdOjTV1dWprq7O0KFDM2/evJKvDgA2HONnzFqtFwAA8L4GDd/efvvt7Ljjjhk1atQK919++eW54oorMmrUqEydOjW1tbU58MADs2DBgkrN8OHDc9ttt2XcuHF59NFH89Zbb2XQoEFZsmRJpWbIkCGZPn16JkyYkAkTJmT69OkZOnRo6dcHAAAAwMatcUOefODAgRk4cOAK9xVFkauuuirnn39+Bg8enCS58cYbU1NTk1/84hc5+eSTU1dXl9GjR+fmm2/OAQcckCQZO3ZsunTpknvvvTcDBgzI888/nwkTJmTKlCnZY489kiQ//elP069fv8yYMSM9evT4ZC4WAAAAgI1Og4ZvK/PSSy9l9uzZOeiggyrbmjVrln322SeTJk3KySefnGnTpmXx4sX1ajp37pyePXtm0qRJGTBgQCZPnpzq6upK8JYkffv2TXV1dSZNmvSh4dvChQuzcOHCyvv58+eXcJWUZXVveRrco1NJnQAAAAAbs3V2wYXZs2cnSWpqauptr6mpqeybPXt2mjZtmrZt2660pmPHjssdv2PHjpWaFRk5cmTlGXHV1dXp0qXLx7oeAAAAADY+62z4tkxVVVW990VRLLftgz5Ys6L6jzrOueeem7q6uspr5syZq9k5AAAAABu7dTZ8q62tTZLlZqfNmTOnMhuutrY2ixYtyty5c1da8/rrry93/DfeeGO5WXX/qlmzZmnTpk29FwAAAACsjnU2fOvWrVtqa2szceLEyrZFixbloYceyp577pkk2WWXXdKkSZN6NbNmzcozzzxTqenXr1/q6ury+OOPV2oee+yx1NXVVWoAAAAAoAwNuuDCW2+9lRdffLHy/qWXXsr06dPTrl27fOpTn8rw4cNzySWXpHv37unevXsuueSStGzZMkOGDEmSVFdX54QTTshZZ52V9u3bp127djn77LPTq1evyuqn2223XQ4++OCcdNJJue6665IkX/nKVzJo0CArnQIAAABQqgYN35544onsu+++lfdnnnlmkmTYsGG54YYbcs455+Sdd97JKaeckrlz52aPPfbIPffck9atW1c+c+WVV6Zx48Y56qij8s4772T//ffPDTfckEaNGlVqbrnllpxxxhmVVVEPO+ywjBo16hO6SgAAAAA2Vg0avvXv3z9FUXzo/qqqqowYMSIjRoz40JrmzZvn6quvztVXX/2hNe3atcvYsWM/TqsAAAAAsNrW2We+AQAAAMD6TvgGAAAAACURvgEAAABASYRvAAAAAFAS4RsAAAAAlET4BgAAAAAlEb4BAAAAQEmEbwAAAABQEuEbAAAAAJRE+AYAAAAAJWnc0A0AABuP8TNmrVb94B6dSuoEAAA+GWa+AQAAAEBJhG8AAAAAUBLhGwAAAACURPgGAAAAACURvgEAAABASYRvAAAAAFAS4RsAAAAAlKRxQzcAALC6xs+YtVr1g3t0KqkTAABYOTPfAAAAAKAkwjcAAAAAKInwDQAAAABKInwDAAAAgJII3wAAAACgJMI3AAAAACiJ8A0AAAAASiJ8AwAAAICSCN8AAAAAoCTCNwAAAAAoifANAAAAAEoifAMAAACA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plX2byhjWvi2kfjlL3+Z4cOH5/zzz8+TTz6Zz372sxk4cGBeffXVhm6Njdzbb7+dHXfcMaNGjVrh/ssvvzxXXHFFRo0alalTp6a2tjYHHnhgFixYUKkZPnx4brvttowbNy6PPvpo3nrrrQwaNChLliyp1AwZMiTTp0/PhAkTMmHChEyfPj1Dhw4t/frYeDz00EM59dRTM2XKlEycODHvvfdeDjrooLz99tuVGuOZ9cWWW26ZSy+9NE888USeeOKJ7Lfffjn88MMr/9g1lllfTZ06Nddff3169+5db7sxzfpkhx12yKxZsyqvp59+urLPWGZ9Mnfu3Oy1115p0qRJ7rrrrjz33HP5wQ9+kM0226xSs8GM6YKNwu6771589atfrbdt2223Lb7xjW80UEewvCTFbbfdVnm/dOnSora2trj00ksr2959992iurq6uPbaa4uiKIp58+YVTZo0KcaNG1ep+etf/1pssskmxYQJE4qiKIrnnnuuSFJMmTKlUjN58uQiSfG///u/JV8VG6s5c+YUSYqHHnqoKArjmfVf27Zti5/97GfGMuutBQsWFN27dy8mTpxY7LPPPsXXv/71oij8fmb9csEFFxQ77rjjCvcZy6xv/s//+T/F3nvv/aH7N6QxbebbRmDRokWZNm1aDjrooHrbDzrooEyaNKmBuoKP9tJLL2X27Nn1xm6zZs2yzz77VMbutGnTsnjx4no1nTt3Ts+ePSs1kydPTnV1dfbYY49KTd++fVNdXe07QGnq6uqSJO3atUtiPLP+WrJkScaNG5e33347/fr1M5ZZb5166qn5/Oc/nwMOOKDedmOa9c0LL7yQzp07p1u3bvn3f//3/OUvf0liLLP+ufPOO7Prrrvm3/7t39KxY8f06dMnP/3pTyv7N6QxLXzbCPz973/PkiVLUlNTU297TU1NZs+e3UBdwUdbNj5XNnZnz56dpk2bpm3btiut6dix43LH79ixo+8ApSiKImeeeWb23nvv9OzZM4nxzPrn6aefzqabbppmzZrlq1/9am677bZsv/32xjLrpXHjxuUPf/hDRo4cudw+Y5r1yR577JGbbropd999d376059m9uzZ2XPPPfPmm28ay6x3/vKXv+Saa65J9+7dc/fdd+erX/1qzjjjjNx0001JNqzfz40/kbOwTqiqqqr3viiK5bbBumhNxu4Ha1ZU7ztAWU477bQ89dRTefTRR5fbZzyzvujRo0emT5+eefPm5X/+538ybNiwPPTQQ5X9xjLri5kzZ+brX/967rnnnjRv3vxD64xp1gcDBw6s/LlXr17p169fttlmm9x4443p27dvEmOZ9cfSpUuz66675pJLLkmS9OnTJ88++2yuueaa/Md//EelbkMY02a+bQQ6dOiQRo0aLZfozpkzZ7kEGdYly1ZuWtnYra2tzaJFizJ37tyV1rz++uvLHf+NN97wHWCtO/3003PnnXfmgQceyJZbblnZbjyzvmnatGk+/elPZ9ddd83IkSOz44475oc//KGxzHpn2rRpmTNnTnbZZZc0btw4jRs3zkMPPZQf/ehHady4cWW8GdOsj1q1apVevXrlhRde8PuZ9U6nTp2y/fbb19u23XbbVRaG3JDGtPBtI9C0adPssssumThxYr3tEydOzJ577tlAXcFH69atW2pra+uN3UWLFuWhhx6qjN1ddtklTZo0qVcza9asPPPMM5Wafv36pa6uLo8//nil5rHHHktdXZ3vAGtNURQ57bTTMn78+Nx///3p1q1bvf3GM+u7oiiycOFCY5n1zv7775+nn34606dPr7x23XXXHHvssZk+fXq23nprY5r11sKFC/P888+nU6dOfj+z3tlrr70yY8aMetv+9Kc/pWvXrkk2sH8/fyLLOtDgxo0bVzRp0qQYPXp08dxzzxXDhw8vWrVqVbz88ssN3RobuQULFhRPPvlk8eSTTxZJiiuuuKJ48skni1deeaUoiqK49NJLi+rq6mL8+PHF008/XRxzzDFFp06divnz51eO8dWvfrXYcssti3vvvbf4wx/+UOy3337FjjvuWLz33nuVmoMPPrjo3bt3MXny5GLy5MlFr169ikGDBn3i18uG62tf+1pRXV1dPPjgg8WsWbMqr3/+85+VGuOZ9cW5555bPPzww8VLL71UPPXUU8V5551XbLLJJsU999xTFIWxzPrvX1c7LQpjmvXHWWedVTz44IPFX/7yl2LKlCnFoEGDitatW1f+f52xzPrk8ccfLxo3blxcfPHFxQsvvFDccsstRcuWLYuxY8dWajaUMS1824j8+Mc/Lrp27Vo0bdq02HnnnYuHHnqooVuC4oEHHiiSLPcaNmxYURTvLy99wQUXFLW1tUWzZs2Kz33uc8XTTz9d7xjvvPNOcdpppxXt2rUrWrRoUQwaNKh49dVX69W8+eabxbHHHlu0bt26aN26dXHssccWc+fO/YSuko3BisZxkmLMmDGVGuOZ9cXxxx9f+TfD5ptvXuy///6V4K0ojGXWfx8M34xp1hdHH3100alTp6JJkyZF586di8GDBxfPPvtsZb+xzPrm17/+ddGzZ8+iWbNmxbbbbltcf/319fZvKGO6qiiK4pOZYwcAAAAAGxfPfAMAAACAkgjfAAAAAKAkwjcAAAAAKInwDQAAAABKInwDAAAAgJII3wAAAACgJMI3AAAAACiJ8A0AAAAASiJ8AwAgSXLcccfliCOOWKPPfu5zn8svfvGLVaq94YYbstlmm63ReT6OOXPmZPPNN89f//rXT/zcAMDGS/gGAPAJ+jgB19ry8ssvp6qqKtOnT18rx/vNb36T2bNn59///d/XyvHK0rFjxwwdOjQXXHBBQ7cCAGxEhG8AAHwsP/rRj/LlL385m2zSsP+0XLx48UfWfPnLX84tt9ySuXPnfgIdAQAI3wAA1inPPfdcDjnkkGy66aapqanJ0KFD8/e//72yv3///jnjjDNyzjnnpF27dqmtrc2IESPqHeN///d/s/fee6d58+bZfvvtc++996aqqiq33357kqRbt25Jkj59+qSqqir9+/ev9/nvf//76dSpU9q3b59TTz11paHW3//+99x777057LDD6m2fN29evvKVr6SmpibNmzdPz54985vf/KZezd13353tttsum266aQ4++ODMmjWrsm/q1Kk58MAD06FDh1RXV2efffbJH/7wh3qfr6qqyrXXXpvDDz88rVq1yne/+93MnTs3xx57bDbffPO0aNEi3bt3z5gxYyqf6dWrV2pra3Pbbbd96DUBAKxNwjcAgHXErFmzss8++2SnnXbKE088kQkTJuT111/PUUcdVa/uxhtvTKtWrfLYY4/l8ssvz0UXXZSJEycmSZYuXZojjjgiLVu2zGOPPZbrr78+559/fr3PP/7440mSe++9N7Nmzcr48eMr+x544IH8+c9/zgMPPJAbb7wxN9xwQ2644YYP7fnRRx9Ny5Yts91221W2LV26NAMHDsykSZMyduzYPPfcc7n00kvTqFGjSs0///nPfP/738/NN9+chx9+OK+++mrOPvvsyv4FCxZk2LBheeSRRzJlypR07949hxxySBYsWFDv/BdccEEOP/zwPP300zn++OPzrW99K88991zuuuuuPP/887nmmmvSoUOHep/Zfffd88gjj6zsrwIAYK1p3NANAADwvmuuuSY777xzLrnkksq2n//85+nSpUv+9Kc/5TOf+UySpHfv3pXnlnXv3j2jRo3KfffdlwMPPDD33HNP/vznP+fBBx9MbW1tkuTiiy/OgQceWDnm5ptvniRp3759pWaZtm3bZtSoUWnUqFG23XbbfP7zn899992Xk046aYU9v/zyy6mpqal3y+m9996bxx9/PM8//3yl56233rre5xYvXpxrr70222yzTZLktNNOy0UXXVTZv99++9Wrv+6669K2bds89NBDGTRoUGX7kCFDcvzxx1fev/rqq+nTp0923XXXJMlWW221XM9bbLFFnnzyyRVeDwDA2mbmGwDAOmLatGl54IEHsummm1Ze2267bZLkz3/+c6Wud+/e9T7XqVOnzJkzJ0kyY8aMdOnSpV6otvvuu69yDzvssEO9GWr/euwVeeedd9K8efN626ZPn54tt9yyErytSMuWLSvB24rOM2fOnHz1q1/NZz7zmVRXV6e6ujpvvfVWXn311XrHWRayLfO1r30t48aNy0477ZRzzjknkyZNWu7cLVq0yD//+c8P7Q0AYG0y8w0AYB2xdOnSHHroobnsssuW29epU6fKn5s0aVJvX1VVVZYuXZokKYoiVVVVa9zDyo69Ih06dFhu8YIWLVqs0XmKoqi8P+644/LGG2/kqquuSteuXdOsWbP069cvixYtqve5Vq1a1Xs/cODAvPLKK/ntb3+be++9N/vvv39OPfXUfP/736/U/OMf/6jM/gMAKJuZbwAA64idd945zz77bLbaaqt8+tOfrvf6YMj0Ybbddtu8+uqref311yvbpk6dWq+madOmSZIlS5Z87J779OmT2bNn1wvgevfunddeey1/+tOf1vi4jzzySM4444wccsgh2WGHHdKsWbN6C0+szOabb57jjjsuY8eOzVVXXZXrr7++3v5nnnkmffr0WePeAABWh/ANAOATVldXl+nTp9d7vfrqqzn11FPzj3/8I8ccc0wef/zx/OUvf8k999yT448/fpWDsgMPPDDbbLNNhg0blqeeeiq///3vKwsuLJsR17Fjx7Ro0aKyoENdXd0aX0ufPn2y+eab5/e//31l2z777JPPfe5z+cIXvpCJEyfmpZdeyl133ZUJEyas8nE//elP5+abb87zzz+fxx57LMcee+wqzaj79re/nTvuuCMvvvhinn322fzmN7+ptxjEP//5z0ybNi0HHXTQ6l0oAMAaEr4BAHzCHnzwwfTp06fe69vf/nY6d+6c3//+91myZEkGDBiQnj175utf/3qqq6vrLWiwMo0aNcrtt9+et956K7vttltOPPHEfPOb30ySyrPZGjdunB/96Ee57rrr0rlz5xx++OFrfC2NGjXK8ccfn1tuuaXe9v/5n//JbrvtlmOOOSbbb799zjnnnNWaaffzn/88c+fOTZ8+fTJ06NCcccYZ6dix40d+rmnTpjn33HPTu3fvfO5zn0ujRo0ybty4yv477rgjn/rUp/LZz3521S8SAOBjqCr+9eEaAABscH7/+99n7733zosvvlhvkYO15fXXX88OO+yQadOmpWvXrmv9+GvT7rvvnuHDh2fIkCEN3QoAsJGw4AIAwAbmtttuy6abbpru3bvnxRdfzNe//vXstddepQRvSVJTU5PRo0fn1VdfXafDtzlz5uSLX/xijjnmmIZuBQDYiJj5BgCwgbnpppvyne98JzNnzkyHDh1ywAEH5Ac/+EHat2/f0K0BAGx0hG8AAAAAUBILLgAAAABASYRvAAAAAFAS4RsAAAAAlET4BgAAAAAlEb4BAAAAQEmEbwAAAABQEuEbAAAAAJRE+AYAAAAAJRG+AQAAAEBJ/j/Hn1nCBoAELQAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Plot the distribution of lengths\n", "\n", "plt.figure(figsize=(15, 6))\n", "plt.title(f\"Lengths: Avg {sum(lengths)/len(lengths):,.0f} and highest {max(lengths):,}\\n\")\n", "plt.xlabel('Length (chars)')\n", "plt.ylabel('Count')\n", "plt.hist(lengths, rwidth=0.7, color=\"lightblue\", bins=range(0, 6000, 100))\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 17, "id": "c38e0c43-9f7a-450e-a911-c94d37d9b9c3", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABOgAAAIzCAYAAAC6FiY/AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABY1klEQVR4nO3debxd0/0//teV4WaQXBkkV4gYmhoaihgStKEhlEhVDRWCUkMRUrSG6qdoxVi0UpSaijS0RftpCTE0qhLSkGqM7VdMlYG6uQkiiWT//vDJ+bluEkkkdsjz+Xicx8NZ+73PXuvcs+rj9Vlr76qiKIoAAAAAAKVYrewOAAAAAMCqTEAHAAAAACUS0AEAAABAiQR0AAAAAFAiAR0AAAAAlEhABwAAAAAlEtABAAAAQIkEdAAAAABQIgEdAAAAAJRIQAcAn1I33HBDqqqqKq+mTZtmnXXWybe+9a385z//WaLPOOyww7Leeuut2I6uIFtttVWqqqpy8cUXl9aHoihyzTXXpGfPnmnbtm06dOiQPn365M9//vNC61966aUcfvjh6dKlS6qrq7P22mvn61//+lJf97777qv83d94441Gx3//+99nhx12SPv27bPGGmtk2223zU033bTU11mRXnzxxVRVVeWGG25YbN2C3/nf//73j/zMnXbaKTvttNMy9eewww7L6quvvkznLqt33nknZ511Vv7yl78sUf3zzz+fU045JT179swaa6yR9u3bZ4cddsjvfve7RrWvvvpqhgwZkj59+mSNNdZYou/6w6ZNm5bDDjssHTt2TKtWrdK7d+/cf//9jermzJmT//mf/8n666+f5s2bp1u3bjn99NMza9asBnUL/uYLe40YMWKJ+/Xwww9njz32SLt27dKyZct07949P/7xjyvH582bl0suuSS777571llnnbRq1SqbbLJJTjvttEyfPn2pvgMA+KQI6ADgU+7666/PmDFjMmrUqBx55JH5zW9+ky996Ut5++23P/LcH/7wh7njjjs+gV4uXxMmTMgTTzyRJLn22mtL68ePfvSjHHXUUdl2223z+9//PjfccEOqq6vTv3//3H777Q1qJ06cmJ49e2bixIm5+OKLM2rUqFxyySVp167dUl3zrbfeypFHHpkuXbos9Ph1112XfffdN2uttVZuueWWjBgxIhtuuGEOOeSQXHrppcs81k+DK664IldccUXZ3Vhi77zzTs4+++wlDujuvffe/PnPf843vvGN/Pa3v80tt9yS7t27Z7/99ss555zToPbf//53brnlljRv3jx77LHHUvdt9uzZ6du3b+6///787Gc/yx/+8Id07tw5u+++e0aPHt2g9sADD8xFF12Uo446KnfddVe+/e1v55JLLskBBxyw0M8ePHhwxowZ0+C16667LlG/hg8fnj59+qSmpia//vWvc9ddd+XUU09NURSVmlmzZuWss85Kt27dctlll+Wuu+7KkUcemauvvjo77LBDo+AQAFYKBQDwqXT99dcXSYpx48Y1aP/hD39YJCluvvnmRZ779ttvr+jurVDHHXdckaTYc889iyTF3/72t1L6sfbaaxc77rhjg7ZZs2YVNTU1xYABAypt8+fPL7bYYotiiy22KN59992Pdc3jjjuu2HLLLYszzzyzSFK8/vrrDY7vsMMORbdu3Yp58+Y1uP7GG29cbL755h/r2svTpEmTiiTF9ddfv9i6Rf3Ol7dDDz20aN269Qq9xoe9/vrrRZLiRz/60RLXz58/v1H7nnvuWbRq1arBb+uDf/9x48Yt0Xf9Qb/4xS+KJMUjjzxSaZs7d26x6aabFttuu22lbcyYMUWS4qc//WmD84cOHVokKe69995K24K/+UUXXbTE/figV199tWjdunXxne98Z7F17733XvHGG280av/tb39bJCluuummZbo+AKxIVtABwGdMr169kry/nTL5/7fu/fOf/0y/fv3Spk2b9O3bt3Lsw1tc58+fn8svvzxbbLFFWrZsmTXWWCO9evXKH//4xwZ1t956a3r37p3WrVtn9dVXz2677VZZ1bbACy+8kG9+85uVLZ2dO3dO3759M2HChGUe37vvvpvhw4enZ8+elRVh1113XeX4nXfemaqqqoVuxbvyyitTVVWVJ598stJ2zTXX5POf/3yqq6uz6aabZvjw4Uu89bdZs2apqalp0NaiRYvKa4GHHnooEyZMyJAhQ1JdXb20Q67461//mquvvjq/+tWv0qRJk0X2afXVV89qq/3//2deVVVV2rZt26BPi3LrrbemX79+WWuttdKyZcvK1sAPr8hc8Lv697//nT322COrr756unbtmpNPPjmzZ89uUPvaa69l//33T5s2bVJTU5MDDjggU6ZMWaqxz5w5M9/5znfSsWPHdOjQIfvss09ee+21BjUL2+L66quvZt99902bNm2yxhpr5KCDDsq4ceMWueVzScYzZ86c/OQnP8nGG2+c6urqrLnmmvnWt76V119/vUHdAw88kJ122ikdOnRIy5Yts+666+Yb3/hG3nnnnbz44otZc801kyRnn312ZavnYYcdtsjvoGPHjqmqqmrUvu222+add97Jm2++WWn74N9/Wdxxxx3ZaKON0rt370pb06ZNc/DBB+exxx6rbKP/29/+liSNVun1798/yfvbrZeXX/3qV3n77bdz6qmnLrauSZMm6dChQ6P2bbfdNknyyiuvLLc+AcDyIqADgM+Yf//730lS+Y//5P1AYcCAAfnKV76SP/zhDzn77LMXef5hhx2WE088Mdtss01uvfXWjBgxIgMGDMiLL75YqRk6dGgOPPDAbLrpprntttty0003ZebMmfnSl76Up59+ulK3xx57ZPz48bnwwgszatSoXHnlldlyyy0b3AdqwT3GlvT+WLfffnvq6upy+OGHp3v37tlxxx1z66235q233kryfjDQqVOnXH/99Y3OveGGG7LVVltl8803T5JcffXVOeqoo7L55pvn9ttvz5lnnrlUWw5PPPHEjBw5Mtdee23q6uoyefLknHTSSamvr88JJ5xQqXvooYeSJG3atMkee+yRFi1aZPXVV0///v3z7LPPLtG1Zs2alSOOOCJDhgzJVltttci6wYMH55lnnsm5556b119/PW+88UYuvvjijB8/PqeccspHXudf//pX9thjj1x77bUZOXJkhgwZkttuuy177bVXo9q5c+dmwIAB6du3b/7whz/k8MMPz6WXXpoLLrigQb932WWX3HvvvTnvvPPy29/+NrW1tYvc/rgo3/72t9OsWbMMHz48F154Yf7yl7/k4IMPXuw5b7/9dnbeeec8+OCDueCCC3Lbbbelc+fOi7z2koxn/vz5+drXvpbzzz8/AwcOzJ///Oecf/75GTVqVHbaaafK9skXX3wxe+65Z5o3b57rrrsuI0eOzPnnn5/WrVtnzpw5WWuttTJy5MgkyRFHHFHZ6vnDH/5wqb6XJHnwwQez5pprplOnTkt97qJMnDixMk8+aEHbU089leT9/21J0ih4XvD+g2H4Aueff36aN2+eVq1aZccdd2wU/i/KQw89lPbt2+fZZ5/NFltskaZNm6ZTp0455phjMmPGjI88/4EHHkiSfOELX1ii6wHAJ6rsJXwAwLJZsPVv7Nixxdy5c4uZM2cWf/rTn4o111yzaNOmTTFlypSiKN7fupekuO666xp9xqGHHlp069at8v6hhx4qkhQ/+MEPFnndl19+uWjatGkxePDgBu0zZ84samtri/33378oiqJ44403iiTFZZddtthx3HjjjUWTJk2KG2+8cYnG/ZWvfKVo0aJFUVdXVxTF//89XHvttZWak046qWjZsmUxffr0StvTTz9dJCkuv/zyoije3wJYW1tbbLfddg0+/6WXXiqaNWvW4HtZnKuuuqqorq4ukhRJivbt2xejRo1qUHP00UcXSYq2bdsWRxxxRHHfffcVN910U9GtW7eiY8eOxWuvvfaR1zn55JOLDTbYoHjnnXeKoiiKH/3oRwvd4loURXHnnXcWNTU1lT61bNlysVueF2X+/PnF3Llzi9GjRxdJin/84x+VYwt+V7fddluDc/bYY49io402qry/8soriyTFH/7whwZ1Rx555FJtcT322GMbtF944YVFkmLy5MmVtj59+hR9+vSpvF+wTfPuu+9ucO6Cv8cHr72k4/nNb35TJCl+//vfN6hbsI30iiuuKIqiKH73u98VSYoJEyYscmxLu8V1Ya655poiSfGzn/1skTXLssW1WbNmxdFHH92o/ZFHHimSFMOHDy+K4v3fWhaybfTaa68tkhSf//znK22vvfZaceSRRxa33XZb8de//rW45ZZbil69ehVJimuuueYj+7TRRhsVLVq0KNq0aVMMHTq0ePDBB4sLL7ywaNmyZbHDDjssdPvvAq+++mrRuXPnYuutt26w/RcAVhZW0AHAp1yvXr3SrFmztGnTJv37909tbW3uvvvudO7cuUHdN77xjY/8rLvvvjtJctxxxy2y5p577sl7772XQw45JO+9917l1aJFi/Tp06ey+qx9+/bZcMMNc9FFF+WSSy7JE088kfnz5zf6vAWfc8ghh3xk/yZNmpQHH3ww++yzT9ZYY40kyX777Zc2bdo02OZ6+OGHZ9asWbn11lsrbddff32qq6szcODAJMlzzz2XKVOmZP/9929wjXXXXTc77LDDR/ZlwWeeeOKJOf7443PfffflrrvuSr9+/fK1r30t99xzT6Vuwbh79+6dX/3qV+nbt28OPvjg3HnnnXnjjTfyi1/8YrHXeeyxx3LZZZfll7/8ZVq2bLnY2pEjR+bggw/OPvvsk7vvvjujRo3Kt7/97Rx22GELXVX4YS+88EIGDhyY2traNGnSJM2aNUufPn2SJM8880yD2qqqqkYr6zbffPPK9urk/dVdbdq0yYABAxrULfg7LKkPn79gJdcHr/Vho0ePTps2bbL77rs3aD/wwAMXWr8k4/nTn/6UNdZYI3vttVeD3/8WW2yR2trayu9/iy22SPPmzXPUUUflxhtvzAsvvLDEY11Sd999d4477rjsu+++GTx48HL//IVtp/3wsa9+9av53Oc+l1NPPTWjRo3K9OnTM3LkyJxxxhlp0qRJg622a621Vq6++urst99+2XHHHTNw4MA89NBD2XLLLXPaaaflvffeW2x/5s+fn3fffTdnnHFGTj/99Oy000753ve+l/POOy9/+9vfFrqtPUnefPPN7LHHHimKIrfeeuvH3v4LACuCfzsBwKfcr3/964wbNy5PPPFEXnvttTz55JONAqZWrVqlbdu2H/lZr7/+epo0aZLa2tpF1kydOjVJss0226RZs2YNXrfeemveeOONJKncB2633XbLhRdemK222iprrrlmTjjhhMycOXOZxnrdddelKIrsu+++mT59eqZPn17Zlvi3v/2tsl30C1/4QrbZZptKIDVv3rzcfPPN+drXvpb27dsnSf773/8mSaMgc1FtH1ZXV5fjjjsu3/72t3PxxRenb9+++epXv5rf/OY32WabbXLMMcdUahfcD2u33XZr8BlbbLFF1lprrTz++OOLvdbhhx+effbZJ1tvvXVl3O+++26SZMaMGZXvsyiKHH744fnyl7+c6667Lrvvvnt22WWX/PznP8/AgQMzePDgxT7d96233sqXvvSlPProo/nJT36Sv/zlLxk3blzlibQffvplq1atGt3Xrrq6utK35P3veWHf5+J+Ywvz4XuKLdhCubgnci7q2ov6+y7JeKZOnZrp06enefPmjX7/U6ZMqfz+N9xww9x3333p1KlTjjvuuGy44YbZcMMN87Of/WzJBvwR7rnnnuyzzz7Zddddc8sttyw2TFsWHTp0qMyRD1pwn7sF86h58+a5++67s+6666Zfv35p165d9t1335xxxhlp165d1l577cVep1mzZjnggAPy3//+N//6178+sk9J43n01a9+NUkWOo/q6uqy66675j//+U9GjRqVDTbYYLHXAICyNC27AwDAx7PJJptk6623XmzNkv7H+5prrpl58+ZlypQpWWuttRZa07FjxyTJ7373u3Tr1m2xn9etW7dce+21SZLnn38+t912W84666zMmTMnV1111RL1aYH58+dX7lO3zz77LLTmuuuuy4UXXpgk+da3vpVjjz02zzzzTF544YVMnjw53/rWtyq1C/5jf0Hg+EFL8gCD5557LrNmzco222zT6NjWW2+d0aNH56233srqq6++0Ht5LVAUxUeu6Hnqqafy1FNP5be//W2jYxtuuGG++MUvZsKECZk6dWomT56co48+ulHdNttsk1//+td58cUXF3kPrgceeCCvvfZa/vKXv1RWzSVpcM/ApdWhQ4c89thjjdqX9iERK8u1FzykYsH94z6sTZs2lX/+0pe+lC996UuZN29e/v73v+fyyy/PkCFD0rlz53zzm99c5j7cc8892XvvvdOnT5/8/ve/T/PmzZf5sxZls802yz//+c9G7QvaevToUWn73Oc+lzFjxuQ///lP3nzzzWy44Yapr6/PiSeemC9/+csfea2iKJJ89IMtNt9884wdO3aJz6+rq8suu+ySSZMm5f7771/sPASAsllBBwBULFiJcuWVVy6yZrfddkvTpk3z//7f/8vWW2+90NfCfP7zn8+ZZ56ZzTbb7CNXjC3MPffck1dffTXHHXdcHnzwwUavL3zhC/n1r39d2SZ34IEHpkWLFrnhhhtyww03ZO21106/fv0qn7fRRhultrY2t912W4PrvPzyy3nkkUc+sj9dunRJkkaBQVEUGTt2bNq1a5fWrVsnef97bdWqVWUL8QKPP/54pkyZUnny7qIsbLyHHnpokvefWvurX/0qSdKuXbu0aNFioSHGmDFjstpqqy0yeE3+/yD3wzf8/+Uvf7nY/i3OzjvvnJkzZzZ6EMDw4cOX+TOXVJ8+fTJz5sxG3/uIESOW+TP79++f//73v5k3b95Cf/sbbbRRo3OaNGmS7bbbrrKVecHvf0lWAX7Yvffem7333js77rhj7rzzzo/1VODF+frXv55nn302jz76aKXtvffey80335ztttuu8vv/oLXXXjubbbZZWrVqlYsuuiitW7fOEUccsdjrzJ07N7feems6duyYz33uc4utXbBN/8N/z7vuuitJGsyjBeHcCy+8kHvvvTdbbrnl4gcMACWzgg4AqPjSl76UQYMG5Sc/+UmmTp2a/v37p7q6Ok888URatWqVwYMHZ7311ss555yTH/zgB3nhhRey++67p127dpk6dWoee+yxtG7dOmeffXaefPLJHH/88dlvv/3SvXv3NG/ePA888ECefPLJnHbaaZVr/vrXv87hhx+e6667brH3obv22mvTtGnTnHHGGQsNB44++uiccMIJ+fOf/5yvfe1rWWONNfL1r389N9xwQ6ZPn55TTjmlwQqb1VZbLWeffXaOPvro7Lvvvjn88MMzffr0nH322VlrrbU+cjXPuuuum3322SdXX311qqurs8cee2T27Nm58cYb87e//S0//vGPK4HXGmuskXPOOSennHJKDjvssBx44IGZMmVKfvjDH2bdddfNscceu9jvY6eddmp0/QX3Otthhx0qqxqrq6tz7LHH5pJLLskhhxySAw44IE2aNMmdd96Z4cOH54gjjqhsTVyY7bffPu3atcsxxxyTH/3oR2nWrFluueWW/OMf/1jsd7E4hxxySC699NIccsghOffcc9O9e/fcddddDe7Rt6IceuihufTSS3PwwQfnJz/5ST73uc/l7rvvrlx7We5F9s1vfjO33HJL9thjj5x44onZdttt06xZs7z66qt58MEH87WvfS1f//rXc9VVV+WBBx7InnvumXXXXTfvvvtu5T6Ju+yyS5L3V9t169Ytf/jDH9K3b9+0b98+HTt2zHrrrbfQaz/88MPZe++9U1tbmzPOOCMTJkxocHzTTTdtsJX9d7/7XZJU7n/397//PauvvnqSZN99963UnXXWWTn77LPz4IMPVn5rhx9+eH7xi19kv/32y/nnn59OnTrliiuuyHPPPZf77ruvwXUvvPDC1NbWZt11183UqVNz22235c4778xNN93UYIvrSSedlLlz52aHHXZIbW1tXnnllVx++eWZMGFCrr/++jRp0qRSe8455+Scc87J/fffX1nN2a9fv+y1114555xzMn/+/PTq1St///vfc/bZZ6d///7Zcccdk7wfeO6222554oknctlll+W9995rEFqvueaa2XDDDRfzVwaAEpT4gAoA4GNY8HTLcePGLbbu0EMPLVq3br3IYx9+Wum8efOKSy+9tOjRo0fRvHnzoqampujdu3fxv//7vw3q7rzzzmLnnXcu2rZtW1RXVxfdunUr9t133+K+++4riqIopk6dWhx22GHFxhtvXLRu3bpYffXVi80337y49NJLi/fee6/ROBb3hMnXX3+9aN68ebH33nsvsqaurq5o2bJlsddee1Xa7r333sqTTJ9//vmFnnf11VcXn/vc54rmzZsXn//854vrrruu+NrXvlZsueWWi7zWArNmzSouuuiiYvPNNy/atGlTtG/fvujVq1dx8803L/SJktdcc03le+3QoUNx0EEHFa+88kqDmiX5Popi0U9xnTdvXnHNNdcUW2+9dbHGGmsUbdu2Lbbccsti2LBhxZw5cz5yTI888kjRu3fvolWrVsWaa65ZfPvb3y4ef/zxhT71dGG/qwX9+qBXX321+MY3vlGsvvrqRZs2bYpvfOMblaeBLulTXD/8O3/wwQeLJMWDDz5YafvwU1yL4v2nDu+zzz4Nrn3XXXc1erLs0oxn7ty5xcUXX1x88YtfLFq0aFGsvvrqxcYbb1wcffTRxb/+9a+iKIpizJgxxde//vWiW7duRXV1ddGhQ4eiT58+xR//+McGn3XfffcVW265ZeVJwIceeugiv4sFfVnU64PfRVEUi639oJNPPrmoqqoqnnnmmQbtU6ZMKQ455JCiffv2RYsWLYpevXo1ekJxURTF2WefXWy44YZFdXV1scYaaxS777578dBDDzWqu/baa4ttt922aN++fdG0adOiXbt2xW677Vbcc889ixzrh8f0zjvvFKeeemrRtWvXomnTpsW6665bnH766cW7775bqZk0adJix7647xgAylJVFP930wYAADJ9+vR8/vOfz957752rr7667O6wAgwdOjRnnnlmXn755ayzzjpld6d02267bbp167bQexwCAJ8MW1wBgFXWlClTcu6552bnnXdOhw4d8tJLL+XSSy/NzJkzc+KJJ5bdPZaDYcOGJUk23njjzJ07Nw888EB+/vOf5+CDDxbO5f2nAP/jH//IjTfeWHZXAGCVJqADAFZZ1dXVefHFF3PsscfmzTffTKtWrdKrV69cddVVi3zSKZ8urVq1yqWXXpoXX3wxs2fPzrrrrptTTz01Z555ZtldWym0bds2s2fPLrsbALDKs8UVAAAAAEq09I+uAgAAAACWGwEdAAAAAJRIQAcAAAAAJRLQAQAAAECJBHQAAAAAUCIBHQAAAACUSEAHAAAAACUS0AEAAABAiQR0AAAAAFAiAR0AAAAAlEhABwAAAAAlEtABAAAAQIkEdAAAAABQIgEdAAAAAJRIQAcAAAAAJRLQAQAAAECJBHQAAAAAUCIBHQAAAACUSEAHAAAAACUS0AEAAABAiQR0AAAAAFCipmV34LNk/vz5ee2119KmTZtUVVWV3R0AAAAASlIURWbOnJkuXbpktdUWv0ZOQLccvfbaa+natWvZ3QAAAABgJfHKK69knXXWWWyNgG45atOmTZL3v/i2bduW3BsAAAAAyjJjxox07dq1khctjoBuOVqwrbVt27YCOgAAAACW6DZoHhIBAAAAACUS0AEAAABAiQR0AAAAAFAiAR0AAAAAlEhABwAAAAAlEtABAAAAQIkEdAAAAABQIgEdAAAAAJRIQAcAAAAAJRLQAQAAAECJBHQAAAAAUCIBHQAAAACUSEAHAAAAACUS0AEAAABAiUoN6B566KHstdde6dKlS6qqqnLnnXdWjs2dOzennnpqNttss7Ru3TpdunTJIYccktdee63BZ8yePTuDBw9Ox44d07p16wwYMCCvvvpqg5q6uroMGjQoNTU1qampyaBBgzJ9+vQGNS+//HL22muvtG7dOh07dswJJ5yQOXPmrKihAwAAAECSkgO6t99+O1/84hczbNiwRsfeeeedPP744/nhD3+Yxx9/PLfffnuef/75DBgwoEHdkCFDcscdd2TEiBF5+OGH89Zbb6V///6ZN29epWbgwIGZMGFCRo4cmZEjR2bChAkZNGhQ5fi8efOy55575u23387DDz+cESNG5Pe//31OPvnkFTd4AAAAAEhSVRRFUXYnkqSqqip33HFH9t5770XWjBs3Lttuu21eeumlrLvuuqmvr8+aa66Zm266KQcccECS5LXXXkvXrl1z1113ZbfddsszzzyTTTfdNGPHjs12222XJBk7dmx69+6dZ599NhtttFHuvvvu9O/fP6+88kq6dOmSJBkxYkQOO+ywTJs2LW3btl2iMcyYMSM1NTWpr69f4nMAAAAA+OxZmpzoU3UPuvr6+lRVVWWNNdZIkowfPz5z585Nv379KjVdunRJjx498sgjjyRJxowZk5qamko4lyS9evVKTU1Ng5oePXpUwrkk2W233TJ79uyMHz9+kf2ZPXt2ZsyY0eAFAAAAAEvjUxPQvfvuuznttNMycODASuo4ZcqUNG/ePO3atWtQ27lz50yZMqVS06lTp0af16lTpwY1nTt3bnC8Xbt2ad68eaVmYc4777zKfe1qamrStWvXjzVGAAAAAFY9TcvuwJKYO3duvvnNb2b+/Pm54oorPrK+KIpUVVVV3n/wnz9OzYedfvrpOemkkyrvZ8yYsWqHdMMX/V0lSQauFLupAQAAAFYqK/0Kurlz52b//ffPpEmTMmrUqAZ7dmtrazNnzpzU1dU1OGfatGmVFXG1tbWZOnVqo899/fXXG9R8eKVcXV1d5s6d22hl3QdVV1enbdu2DV4AAAAAsDRW6oBuQTj3r3/9K/fdd186dOjQ4HjPnj3TrFmzjBo1qtI2efLkTJw4Mdtvv32SpHfv3qmvr89jjz1WqXn00UdTX1/foGbixImZPHlypebee+9NdXV1evbsuSKHCAAAAMAqrtQtrm+99Vb+/e9/V95PmjQpEyZMSPv27dOlS5fsu+++efzxx/OnP/0p8+bNq6xya9++fZo3b56ampocccQROfnkk9OhQ4e0b98+p5xySjbbbLPssssuSZJNNtkku+++e4488sj88pe/TJIcddRR6d+/fzbaaKMkSb9+/bLppptm0KBBueiii/Lmm2/mlFNOyZFHHmlVHAAAAAArVFVRFKXdGOwvf/lLdt5550bthx56aM4666ysv/76Cz3vwQcfzE477ZTk/YdHfO9738vw4cMza9as9O3bN1dccUWDe8G9+eabOeGEE/LHP/4xSTJgwIAMGzas8jTYJHn55Zdz7LHH5oEHHkjLli0zcODAXHzxxamurl7i8SzN43M/k9yDDgAAACDJ0uVEpQZ0nzUCOgEdAAAAQLJ0OdFKfQ86AAAAAPisE9ABAAAAQIkEdAAAAABQIgEdAAAAAJRIQAcAAAAAJRLQAQAAAECJBHQAAAAAUCIBHQAAAACUSEAHAAAAACUS0AEAAABAiQR0AAAAAFAiAR0AAAAAlEhABwAAAAAlEtABAAAAQIkEdAAAAABQIgEdAAAAAJRIQAcAAAAAJRLQAQAAAECJBHQAAAAAUCIBHQAAAACUSEAHAAAAACUS0AEAAABAiQR0AAAAAFAiAR0AAAAAlEhABwAAAAAlEtABAAAAQIkEdAAAAABQIgEdAAAAAJRIQAcAAAAAJRLQAQAAAECJBHQAAAAAUCIBHQAAAACUSEAHAAAAACUS0AEAAABAiQR0AAAAAFAiAR0AAAAAlEhABwAAAAAlEtABAAAAQIkEdAAAAABQIgEdAAAAAJRIQAcAAAAAJRLQAQAAAECJBHQAAAAAUCIBHQAAAACUSEAHAAAAACUS0AEAAABAiQR0AAAAAFAiAR0AAAAAlEhABwAAAAAlEtABAAAAQIkEdAAAAABQIgEdAAAAAJRIQAcAAAAAJRLQAQAAAECJBHQAAAAAUCIBHQAAAACUSEAHAAAAACUS0AEAAABAiQR0AAAAAFAiAR0AAAAAlEhABwAAAAAlEtABAAAAQIlKDegeeuih7LXXXunSpUuqqqpy5513NjheFEXOOuusdOnSJS1btsxOO+2Up556qkHN7NmzM3jw4HTs2DGtW7fOgAED8uqrrzaoqaury6BBg1JTU5OampoMGjQo06dPb1Dz8ssvZ6+99krr1q3TsWPHnHDCCZkzZ86KGDYAAAAAVJQa0L399tv54he/mGHDhi30+IUXXphLLrkkw4YNy7hx41JbW5tdd901M2fOrNQMGTIkd9xxR0aMGJGHH344b731Vvr375958+ZVagYOHJgJEyZk5MiRGTlyZCZMmJBBgwZVjs+bNy977rln3n777Tz88MMZMWJEfv/73+fkk09ecYMHAAAAgCRVRVEUZXciSaqqqnLHHXdk7733TvL+6rkuXbpkyJAhOfXUU5O8v1quc+fOueCCC3L00Uenvr4+a665Zm666aYccMABSZLXXnstXbt2zV133ZXddtstzzzzTDbddNOMHTs22223XZJk7Nix6d27d5599tlstNFGufvuu9O/f/+88sor6dKlS5JkxIgROeywwzJt2rS0bdt2icYwY8aM1NTUpL6+fonP+UwZXrX44wNXip8aAAAAwAq3NDnRSnsPukmTJmXKlCnp169fpa26ujp9+vTJI488kiQZP3585s6d26CmS5cu6dGjR6VmzJgxqampqYRzSdKrV6/U1NQ0qOnRo0clnEuS3XbbLbNnz8748eNX6DgBAAAAWLU1LbsDizJlypQkSefOnRu0d+7cOS+99FKlpnnz5mnXrl2jmgXnT5kyJZ06dWr0+Z06dWpQ8+HrtGvXLs2bN6/ULMzs2bMze/bsyvsZM2Ys6fAAAAAAIMlKvIJugaqqhtsmi6Jo1PZhH65ZWP2y1HzYeeedV3nwRE1NTbp27brYfgEAAADAh620AV1tbW2SNFrBNm3atMpqt9ra2syZMyd1dXWLrZk6dWqjz3/99dcb1Hz4OnV1dZk7d26jlXUfdPrpp6e+vr7yeuWVV5ZylAAAAACs6lbagG799ddPbW1tRo0aVWmbM2dORo8ene233z5J0rNnzzRr1qxBzeTJkzNx4sRKTe/evVNfX5/HHnusUvPoo4+mvr6+Qc3EiRMzefLkSs29996b6urq9OzZc5F9rK6uTtu2bRu8AAAAAGBplHoPurfeeiv//ve/K+8nTZqUCRMmpH379ll33XUzZMiQDB06NN27d0/37t0zdOjQtGrVKgMHDkyS1NTU5IgjjsjJJ5+cDh06pH379jnllFOy2WabZZdddkmSbLLJJtl9991z5JFH5pe//GWS5Kijjkr//v2z0UYbJUn69euXTTfdNIMGDcpFF12UN998M6ecckqOPPJIoRsAAAAAK1SpAd3f//737LzzzpX3J510UpLk0EMPzQ033JDvf//7mTVrVo499tjU1dVlu+22y7333ps2bdpUzrn00kvTtGnT7L///pk1a1b69u2bG264IU2aNKnU3HLLLTnhhBMqT3sdMGBAhg0bVjnepEmT/PnPf86xxx6bHXbYIS1btszAgQNz8cUXr+ivAAAAAIBVXFVRFEXZnfismDFjRmpqalJfX79qrrwbvviHd2SgnxoAAACwalianGilvQcdAAAAAKwKBHQAAAAAUCIBHQAAAACUSEAHAAAAACUS0AEAAABAiQR0AAAAAFAiAR0AAAAAlEhABwAAAAAlEtABAAAAQIkEdAAAAABQIgEdAAAAAJRIQAcAAAAAJRLQAQAAAECJBHQAAAAAUCIBHQAAAACUSEAHAAAAACUS0AEAAABAiQR0AAAAAFAiAR0AAAAAlEhABwAAAAAlEtABAAAAQIkEdAAAAABQIgEdAAAAAJRIQAcAAAAAJRLQAQAAAECJBHQAAAAAUCIBHQAAAACUSEAHAAAAACUS0AEAAABAiQR0AAAAAFAiAR0AAAAAlEhABwAAAAAlEtABAAAAQIkEdAAAAABQIgEdAAAAAJRIQAcAAAAAJRLQAQAAAECJBHQAAAAAUCIBHQAAAACUSEAHAAAAACUS0AEAAABAiQR0AAAAAFAiAR0AAAAAlEhABwAAAAAlEtABAAAAQIkEdAAAAABQIgEdAAAAAJRIQAcAAAAAJRLQAQAAAECJBHQAAAAAUCIBHQAAAACUSEAHAAAAACUS0AEAAABAiQR0AAAAAFAiAR0AAAAAlEhABwAAAAAlEtABAAAAQIkEdAAAAABQoqZld4BV1PCqRR8bWHxy/QAAAAAomRV0AAAAAFAiAR0AAAAAlEhABwAAAAAlEtABAAAAQIlW6oDuvffey5lnnpn1118/LVu2zAYbbJBzzjkn8+fPr9QURZGzzjorXbp0ScuWLbPTTjvlqaeeavA5s2fPzuDBg9OxY8e0bt06AwYMyKuvvtqgpq6uLoMGDUpNTU1qamoyaNCgTJ8+/ZMYJgAAAACrsJU6oLvgggty1VVXZdiwYXnmmWdy4YUX5qKLLsrll19eqbnwwgtzySWXZNiwYRk3blxqa2uz6667ZubMmZWaIUOG5I477siIESPy8MMP56233kr//v0zb968Ss3AgQMzYcKEjBw5MiNHjsyECRMyaNCgT3S8AAAAAKx6qoqiKMruxKL0798/nTt3zrXXXltp+8Y3vpFWrVrlpptuSlEU6dKlS4YMGZJTTz01yfur5Tp37pwLLrggRx99dOrr67PmmmvmpptuygEHHJAkee2119K1a9fcdddd2W233fLMM89k0003zdixY7PddtslScaOHZvevXvn2WefzUYbbbRE/Z0xY0ZqampSX1+ftm3bLudv41NgeNXijw/8wE9tcbUDV9qfJAAAAMASWZqcaKVeQbfjjjvm/vvvz/PPP58k+cc//pGHH344e+yxR5Jk0qRJmTJlSvr161c5p7q6On369MkjjzySJBk/fnzmzp3boKZLly7p0aNHpWbMmDGpqamphHNJ0qtXr9TU1FRqFmb27NmZMWNGgxcAAAAALI2mZXdgcU499dTU19dn4403TpMmTTJv3ryce+65OfDAA5MkU6ZMSZJ07ty5wXmdO3fOSy+9VKlp3rx52rVr16hmwflTpkxJp06dGl2/U6dOlZqFOe+883L22Wcv+wABAAAAWOWt1Cvobr311tx8880ZPnx4Hn/88dx44425+OKLc+ONNzaoq6pquF2yKIpGbR/24ZqF1X/U55x++umpr6+vvF555ZUlGRYAAAAAVKzUK+i+973v5bTTTss3v/nNJMlmm22Wl156Keedd14OPfTQ1NbWJnl/Bdxaa61VOW/atGmVVXW1tbWZM2dO6urqGqyimzZtWrbffvtKzdSpUxtd//XXX2+0Ou+DqqurU11d/fEHCgAAAMAqa6VeQffOO+9ktdUadrFJkyaZP39+kmT99ddPbW1tRo0aVTk+Z86cjB49uhK+9ezZM82aNWtQM3ny5EycOLFS07t379TX1+exxx6r1Dz66KOpr6+v1AAAAADAirBSr6Dba6+9cu6552bdddfNF77whTzxxBO55JJLcvjhhyd5f1vqkCFDMnTo0HTv3j3du3fP0KFD06pVqwwcODBJUlNTkyOOOCInn3xyOnTokPbt2+eUU07JZpttll122SVJsskmm2T33XfPkUcemV/+8pdJkqOOOir9+/df4ie4AgAAAMCyWKkDussvvzw//OEPc+yxx2batGnp0qVLjj766PzP//xPpeb73/9+Zs2alWOPPTZ1dXXZbrvtcu+996ZNmzaVmksvvTRNmzbN/vvvn1mzZqVv37654YYb0qRJk0rNLbfckhNOOKHytNcBAwZk2LBhn9xgAQAAAFglVRVFUZTdic+KGTNmpKamJvX19Wnbtm3Z3fnkDV/8gzky8AM/tcXVDvSTBAAAAD7dliYnWqnvQQcAAAAAn3UCOgAAAAAokYAOAAAAAEokoAMAAACAEgnoAAAAAKBEAjoAAAAAKJGADgAAAABKJKADAAAAgBIJ6AAAAACgRAI6AAAAACiRgA4AAAAASiSgAwAAAIASCegAAAAAoEQCOgAAAAAokYAOAAAAAEokoAMAAACAEgnoAAAAAKBEAjoAAAAAKJGADgAAAABKJKADAAAAgBIJ6AAAAACgRAI6AAAAACiRgA4AAAAASiSgAwAAAIASCegAAAAAoEQCOgAAAAAokYAOAAAAAEokoAMAAACAEgnoAAAAAKBEAjoAAAAAKJGADgAAAABKJKADAAAAgBIJ6AAAAACgRAI6AAAAACiRgA4AAAAASiSgAwAAAIASCegAAAAAoETLFNBtsMEG+e9//9uoffr06dlggw0+dqcAAAAAYFWxTAHdiy++mHnz5jVqnz17dv7zn/987E4BAAAAwKqi6dIU//GPf6z88z333JOamprK+3nz5uX+++/Peuutt9w6BwAAAACfdUsV0O29995Jkqqqqhx66KENjjVr1izrrbdefvrTny63zgEAAADAZ91SBXTz589Pkqy//voZN25cOnbsuEI6BQAAAACriqUK6BaYNGnS8u4HAAAAAKySlimgS5L7778/999/f6ZNm1ZZWbfAdddd97E7BgAAAACrgmUK6M4+++ycc8452XrrrbPWWmulqqpqefcLAAAAAFYJyxTQXXXVVbnhhhsyaNCg5d0fAAAAAFilrLYsJ82ZMyfbb7/98u4LAAAAAKxylimg+/a3v53hw4cv774AAAAAwCpnmba4vvvuu7n66qtz3333ZfPNN0+zZs0aHL/kkkuWS+cAAAAA4LNumQK6J598MltssUWSZOLEiQ2OeWAEAAAAACy5ZQroHnzwweXdDwAAAABYJS3TPegAAAAAgOVjmVbQ7bzzzovdyvrAAw8sc4cAAAAAYFWyTAHdgvvPLTB37txMmDAhEydOzKGHHro8+gUAAAAAq4RlCuguvfTShbafddZZeeuttz5WhwAAAABgVbJc70F38MEH57rrrlueHwkAAAAAn2nLNaAbM2ZMWrRosTw/EgAAAAA+05Zpi+s+++zT4H1RFJk8eXL+/ve/54c//OFy6RgAAAAArAqWKaCrqalp8H611VbLRhttlHPOOSf9+vVbLh0DAAAAgFXBMgV0119//fLuBwAAAACskpYpoFtg/PjxeeaZZ1JVVZVNN900W2655fLqFwAAAACsEpYpoJs2bVq++c1v5i9/+UvWWGONFEWR+vr67LzzzhkxYkTWXHPN5d1PAAAAAPhMWqanuA4ePDgzZszIU089lTfffDN1dXWZOHFiZsyYkRNOOGG5dvA///lPDj744HTo0CGtWrXKFltskfHjx1eOF0WRs846K126dEnLli2z00475amnnmrwGbNnz87gwYPTsWPHtG7dOgMGDMirr77aoKauri6DBg1KTU1NampqMmjQoEyfPn25jgUAAAAAPmyZArqRI0fmyiuvzCabbFJp23TTTfOLX/wid99993LrXF1dXXbYYYc0a9Ysd999d55++un89Kc/zRprrFGpufDCC3PJJZdk2LBhGTduXGpra7Prrrtm5syZlZohQ4bkjjvuyIgRI/Lwww/nrbfeSv/+/TNv3rxKzcCBAzNhwoSMHDkyI0eOzIQJEzJo0KDlNhYAAAAAWJhl2uI6f/78NGvWrFF7s2bNMn/+/I/dqQUuuOCCdO3atcFDKdZbb73KPxdFkcsuuyw/+MEPss8++yRJbrzxxnTu3DnDhw/P0Ucfnfr6+lx77bW56aabsssuuyRJbr755nTt2jX33XdfdttttzzzzDMZOXJkxo4dm+222y5Jcs0116R379557rnnstFGGy23MQEAAADABy3TCrqvfOUrOfHEE/Paa69V2v7zn//ku9/9bvr27bvcOvfHP/4xW2+9dfbbb7906tQpW265Za655prK8UmTJmXKlCnp169fpa26ujp9+vTJI488kuT9B1nMnTu3QU2XLl3So0ePSs2YMWNSU1NTCeeSpFevXqmpqanULMzs2bMzY8aMBi8AAAAAWBrLFNANGzYsM2fOzHrrrZcNN9wwn/vc57L++utn5syZufzyy5db51544YVceeWV6d69e+65554cc8wxOeGEE/LrX/86STJlypQkSefOnRuc17lz58qxKVOmpHnz5mnXrt1iazp16tTo+p06darULMx5551XuWddTU1NunbtuuyDBQAAAGCVtExbXLt27ZrHH388o0aNyrPPPpuiKLLppptWtpAuL/Pnz8/WW2+doUOHJkm23HLLPPXUU7nyyitzyCGHVOqqqqoanFcURaO2D/twzcLqP+pzTj/99Jx00kmV9zNmzBDSAQAAALBUlmoF3QMPPJBNN920spVz1113zeDBg3PCCSdkm222yRe+8IX89a9/XW6dW2uttbLppps2aNtkk03y8ssvJ0lqa2uTpNEqt2nTplVW1dXW1mbOnDmpq6tbbM3UqVMbXf/1119vtDrvg6qrq9O2bdsGLwAAAABYGksV0F122WU58sgjFxpE1dTU5Oijj84ll1yy3Dq3ww475LnnnmvQ9vzzz6dbt25JkvXXXz+1tbUZNWpU5ficOXMyevTobL/99kmSnj17plmzZg1qJk+enIkTJ1Zqevfunfr6+jz22GOVmkcffTT19fWVGgAAAABYEZYqoPvHP/6R3XfffZHH+/Xrl/Hjx3/sTi3w3e9+N2PHjs3QoUPz73//O8OHD8/VV1+d4447Lsn721KHDBmSoUOH5o477sjEiRNz2GGHpVWrVhk4cGCS94PDI444IieffHLuv//+PPHEEzn44IOz2WabVbbkbrLJJtl9991z5JFHZuzYsRk7dmyOPPLI9O/f3xNcAQAAAFihluoedFOnTk2zZs0W/WFNm+b111//2J1aYJtttskdd9yR008/Peecc07WX3/9XHbZZTnooIMqNd///vcza9asHHvssamrq8t2222Xe++9N23atKnUXHrppWnatGn233//zJo1K3379s0NN9yQJk2aVGpuueWWnHDCCZWnvQ4YMCDDhg1bbmMBAAAAgIWpKoqiWNLiDTfcMBdffHG+/vWvL/T47bffnlNOOSUvvPDCcuvgp8mMGTNSU1OT+vr6VfN+dMMX/2CODPzAT21xtQOX+CcJAAAAsFJampxoqba47rHHHvmf//mfvPvuu42OzZo1Kz/60Y/Sv3//pestAAAAAKzClmqL65lnnpnbb789n//853P88cdno402SlVVVZ555pn84he/yLx58/KDH/xgRfUVAAAAAD5zliqg69y5cx555JF85zvfyemnn54Fu2Orqqqy22675Yorrkjnzp1XSEcBAAAA4LNoqQK6JOnWrVvuuuuu1NXV5d///neKokj37t3Trl27FdE/AAAAAPhMW+qAboF27dplm222WZ59AQAAAIBVzlI9JAIAAAAAWL4EdAAAAABQIgEdAAAAAJRome9BxypieNXijw8sPpl+AAAAAHxGWUEHAAAAACUS0AEAAABAiQR0AAAAAFAiAR0AAAAAlEhABwAAAAAlEtABAAAAQIkEdAAAAABQIgEdAAAAAJRIQAcAAAAAJRLQAQAAAECJBHQAAAAAUCIBHQAAAACUSEAHAAAAACUS0AEAAABAiQR0AAAAAFAiAR0AAAAAlEhABwAAAAAlEtABAAAAQIkEdAAAAABQIgEdAAAAAJRIQAcAAAAAJRLQAQAAAECJBHQAAAAAUKKmZXcAPtLwqkUfG1h8cv0AAAAAWAGsoAMAAACAEgnoAAAAAKBEAjoAAAAAKJGADgAAAABKJKADAAAAgBIJ6AAAAACgRAI6AAAAACiRgA4AAAAASiSgAwAAAIASCegAAAAAoEQCOgAAAAAokYAOAAAAAEokoAMAAACAEgnoAAAAAKBEAjoAAAAAKJGADgAAAABKJKADAAAAgBIJ6AAAAACgRAI6AAAAACiRgA4AAAAASiSgAwAAAIASCegAAAAAoEQCOgAAAAAokYAOAAAAAEokoAMAAACAEgnoAAAAAKBEAjoAAAAAKJGADgAAAABKJKADAAAAgBJ9qgK68847L1VVVRkyZEilrSiKnHXWWenSpUtatmyZnXbaKU899VSD82bPnp3BgwenY8eOad26dQYMGJBXX321QU1dXV0GDRqUmpqa1NTUZNCgQZk+ffonMCoAAAAAVmWfmoBu3Lhxufrqq7P55ps3aL/wwgtzySWXZNiwYRk3blxqa2uz6667ZubMmZWaIUOG5I477siIESPy8MMP56233kr//v0zb968Ss3AgQMzYcKEjBw5MiNHjsyECRMyaNCgT2x8AAAAAKyaPhUB3VtvvZWDDjoo11xzTdq1a1dpL4oil112WX7wgx9kn332SY8ePXLjjTfmnXfeyfDhw5Mk9fX1ufbaa/PTn/40u+yyS7bccsvcfPPN+ec//5n77rsvSfLMM89k5MiR+dWvfpXevXund+/eueaaa/KnP/0pzz33XCljBgAAAGDV8KkI6I477rjsueee2WWXXRq0T5o0KVOmTEm/fv0qbdXV1enTp08eeeSRJMn48eMzd+7cBjVdunRJjx49KjVjxoxJTU1Ntttuu0pNr169UlNTU6kBAAAAgBWhadkd+CgjRozI448/nnHjxjU6NmXKlCRJ586dG7R37tw5L730UqWmefPmDVbeLahZcP6UKVPSqVOnRp/fqVOnSs3CzJ49O7Nnz668nzFjxhKOCgAAAADet1KvoHvllVdy4okn5uabb06LFi0WWVdVVdXgfVEUjdo+7MM1C6v/qM8577zzKg+VqKmpSdeuXRd7TQAAAAD4sJU6oBs/fnymTZuWnj17pmnTpmnatGlGjx6dn//852natGll5dyHV7lNmzatcqy2tjZz5sxJXV3dYmumTp3a6Pqvv/56o9V5H3T66aenvr6+8nrllVc+1ngBAAAAWPWs1AFd3759889//jMTJkyovLbeeuscdNBBmTBhQjbYYIPU1tZm1KhRlXPmzJmT0aNHZ/vtt0+S9OzZM82aNWtQM3ny5EycOLFS07t379TX1+exxx6r1Dz66KOpr6+v1CxMdXV12rZt2+AFAAAAAEtjpb4HXZs2bdKjR48Gba1bt06HDh0q7UOGDMnQoUPTvXv3dO/ePUOHDk2rVq0ycODAJElNTU2OOOKInHzyyenQoUPat2+fU045JZtttlnloRObbLJJdt999xx55JH55S9/mSQ56qij0r9//2y00Uaf4IgBAAAAWNWs1AHdkvj+97+fWbNm5dhjj01dXV2222673HvvvWnTpk2l5tJLL03Tpk2z//77Z9asWenbt29uuOGGNGnSpFJzyy235IQTTqg87XXAgAEZNmzYJz4eAAAAAFYtVUVRFGV34rNixowZqampSX19/Wdnu+vwxT9sIwM/8PNZXrUDP/STXJpaAAAAgJXA0uREK/U96AAAAADgs05ABwAAAAAlEtABAAAAQIkEdAAAAABQIgEdAAAAAJRIQAcAAAAAJRLQAQAAAECJBHQAAAAAUCIBHQAAAACUSEAHAAAAACUS0AEAAABAiQR0AAAAAFAiAR0AAAAAlEhABwAAAAAlEtABAAAAQIkEdAAAAABQIgEdAAAAAJRIQAcAAAAAJRLQAQAAAECJBHQAAAAAUCIBHQAAAACUSEAHAAAAACUS0AEAAABAiQR0AAAAAFAiAR0AAAAAlEhABwAAAAAlEtABAAAAQIkEdAAAAABQIgEdAAAAAJRIQAcAAAAAJRLQAQAAAECJBHQAAAAAUCIBHQAAAACUSEAHAAAAACUS0AEAAABAiQR0AAAAAFAiAR0AAAAAlKhp2R2A5WZ41eKPDyw+mX4AAAAALAUr6AAAAACgRAI6AAAAACiRgA4AAAAASiSgAwAAAIASCegAAAAAoEQCOgAAAAAokYAOAAAAAEokoAMAAACAEgnoAAAAAKBEAjoAAAAAKJGADgAAAABKJKADAAAAgBIJ6AAAAACgRAI6AAAAACiRgA4AAAAASiSgAwAAAIASCegAAAAAoEQCOgAAAAAokYAOAAAAAEokoAMAAACAEgnoAAAAAKBEAjoAAAAAKJGADgAAAABKJKADAAAAgBIJ6AAAAACgRCt1QHfeeedlm222SZs2bdKpU6fsvffeee655xrUFEWRs846K126dEnLli2z00475amnnmpQM3v27AwePDgdO3ZM69atM2DAgLz66qsNaurq6jJo0KDU1NSkpqYmgwYNyvTp01f0EAEAAABYxa3UAd3o0aNz3HHHZezYsRk1alTee++99OvXL2+//Xal5sILL8wll1ySYcOGZdy4camtrc2uu+6amTNnVmqGDBmSO+64IyNGjMjDDz+ct956K/3798+8efMqNQMHDsyECRMycuTIjBw5MhMmTMigQYM+0fECAAAAsOqpKoqiKLsTS+r1119Pp06dMnr06Hz5y19OURTp0qVLhgwZklNPPTXJ+6vlOnfunAsuuCBHH3106uvrs+aaa+amm27KAQcckCR57bXX0rVr19x1113Zbbfd8swzz2TTTTfN2LFjs9122yVJxo4dm969e+fZZ5/NRhtttET9mzFjRmpqalJfX5+2bduumC/hkza8avHHB37g57O8agd+6Ce5pLVLc30AAACAFWhpcqKVegXdh9XX1ydJ2rdvnySZNGlSpkyZkn79+lVqqqur06dPnzzyyCNJkvHjx2fu3LkNarp06ZIePXpUasaMGZOamppKOJckvXr1Sk1NTaVmYWbPnp0ZM2Y0eAEAAADA0vjUBHRFUeSkk07KjjvumB49eiRJpkyZkiTp3Llzg9rOnTtXjk2ZMiXNmzdPu3btFlvTqVOnRtfs1KlTpWZhzjvvvMo962pqatK1a9dlHyAAAAAAq6RPTUB3/PHH58knn8xvfvObRseqqhpubSyKolHbh324ZmH1H/U5p59+eurr6yuvV1555aOGAQAAAAANNC27A0ti8ODB+eMf/5iHHnoo66yzTqW9trY2yfsr4NZaa61K+7Rp0yqr6mprazNnzpzU1dU1WEU3bdq0bL/99pWaqVOnNrru66+/3mh13gdVV1enurr64w2OcrhfHQAAALCSWKlX0BVFkeOPPz633357Hnjggay//voNjq+//vqpra3NqFGjKm1z5szJ6NGjK+Fbz54906xZswY1kydPzsSJEys1vXv3Tn19fR577LFKzaOPPpr6+vpKDQAAAACsCCv1Crrjjjsuw4cPzx/+8Ie0adOmcj+4mpqatGzZMlVVVRkyZEiGDh2a7t27p3v37hk6dGhatWqVgQMHVmqPOOKInHzyyenQoUPat2+fU045JZtttll22WWXJMkmm2yS3XffPUceeWR++ctfJkmOOuqo9O/ff4mf4AoAAAAAy2KlDuiuvPLKJMlOO+3UoP3666/PYYcdliT5/ve/n1mzZuXYY49NXV1dtttuu9x7771p06ZNpf7SSy9N06ZNs//++2fWrFnp27dvbrjhhjRp0qRSc8stt+SEE06oPO11wIABGTZs2IodIAAAAACrvKqiKNxsazmZMWNGampqUl9fn7Zt25bdneVjae7VtrxqP3z/tyWtXVF9BQAAAFhKS5MTrdT3oAMAAACAzzoBHQAAAACUSEAHAAAAACUS0AEAAABAiQR0AAAAAFAiAR0AAAAAlEhABwAAAAAlEtABAAAAQIkEdAAAAABQIgEdAAAAAJRIQAcAAAAAJRLQAQAAAECJmpbdAVjpDa9a9LGBxSfXDwAAAOAzyQo6AAAAACiRgA4AAAAASiSgAwAAAIASCegAAAAAoEQCOgAAAAAokYAOAAAAAEokoAMAAACAEgnoAAAAAKBEAjoAAAAAKFHTsjsAnxnDqxZ/fGDxyfQDAAAA+FSxgg4AAAAASiSgAwAAAIASCegAAAAAoEQCOgAAAAAokYAOAAAAAEokoAMAAACAEgnoAAAAAKBEAjoAAAAAKJGADgAAAABK1LTsDsAqaXjV4o8PLD6ZfgAAAACls4IOAAAAAEokoAMAAACAEtniCiu7xW2HtRUWAAAAPvWsoAMAAACAEgnoAAAAAKBEAjoAAAAAKJGADgAAAABKJKADAAAAgBIJ6AAAAACgRAI6AAAAACiRgA4AAAAASiSgAwAAAIASCegAAAAAoERNy+4AsBwNr1r0sYHFJ9cPAAAAYIlZQQcAAAAAJbKCDlZFi1tpl1htBwAAAJ8gK+gAAAAAoERW0AGL5752AAAAsEJZQQcAAAAAJRLQAQAAAECJbHEFlh/bYQEAAGCpCeiAT56nyAIAAECFgA5YuQnzAAAA+IwT0AGfHWVvsS37+gAAAHwqCegAFscKPgAAAFYwAR2warLaDQAAgJXEamV3AAAAAABWZQI6AAAAACiRLa4AZVjSLbZLcw+85VW7rJ8JAADAMrGC7kOuuOKKrL/++mnRokV69uyZv/71r2V3CQAAAIDPMCvoPuDWW2/NkCFDcsUVV2SHHXbIL3/5y3z1q1/N008/nXXXXbfs7gGs3FbECr6lrV1SVgYCAAArEQHdB1xyySU54ogj8u1vfztJctlll+Wee+7JlVdemfPOO6/k3gGwWEK3zyZ/VwAAVgECuv8zZ86cjB8/PqeddlqD9n79+uWRRx4pqVcAlO7Tcr/Apakt+/oAAEADArr/88Ybb2TevHnp3Llzg/bOnTtnypQpCz1n9uzZmT17duV9fX19kmTGjBkrrqOftHc+4vgHx7q8aj/8/S1pbdl9Lfv6S1P7Wbn+0tSW3deyr780tSvT9Zemtuy+ln39pakt+/q31Sz++vvXL9lnLs3nfvAzl+b6y6v2g3VLU1t2X1fU9ZfGJ93XT+vfamlqV9T1l1TZ39Wq+Lv+cG3ZVsTvqmyfle8/WfH/G7A0VsT3+mn6Wy2Nsv9WS+PT1NePaUE+VBQf/f+sriqWpGoV8Nprr2XttdfOI488kt69e1fazz333Nx000159tlnG51z1lln5eyzz/4kuwkAAADAp8grr7ySddZZZ7E1VtD9n44dO6ZJkyaNVstNmzat0aq6BU4//fScdNJJlffz58/Pm2++mQ4dOqSq6iO2D63kZsyYka5du+aVV15J27Zty+4OfCaYV7D8mVew/JlXsPyZV7BirOxzqyiKzJw5M126dPnIWgHd/2nevHl69uyZUaNG5etf/3qlfdSoUfna17620HOqq6tTXV3doG2NNdZYkd38xLVt23al/JHDp5l5BcufeQXLn3kFy595BSvGyjy3amo+Ylv1/xHQfcBJJ52UQYMGZeutt07v3r1z9dVX5+WXX84xxxxTdtcAAAAA+IwS0H3AAQcckP/+978555xzMnny5PTo0SN33XVXunXrVnbXAAAAAPiMEtB9yLHHHptjjz227G6Urrq6Oj/60Y8abeEFlp15BcufeQXLn3kFy595BSvGZ2lueYorAAAAAJRotbI7AAAAAACrMgEdAAAAAJRIQAcAAAAAJRLQ0cgVV1yR9ddfPy1atEjPnj3z17/+tewuwUrrvPPOyzbbbJM2bdqkU6dO2XvvvfPcc881qCmKImeddVa6dOmSli1bZqeddspTTz3VoGb27NkZPHhwOnbsmNatW2fAgAF59dVXP8mhwErrvPPOS1VVVYYMGVJpM69g6f3nP//JwQcfnA4dOqRVq1bZYostMn78+Mpx8wqWznvvvZczzzwz66+/flq2bJkNNtgg55xzTubPn1+pMa9g8R566KHstdde6dKlS6qqqnLnnXc2OL685lBdXV0GDRqUmpqa1NTUZNCgQZk+ffoKHt3SEdDRwK233pohQ4bkBz/4QZ544ol86Utfyle/+tW8/PLLZXcNVkqjR4/Occcdl7Fjx2bUqFF577330q9fv7z99tuVmgsvvDCXXHJJhg0blnHjxqW2tja77rprZs6cWakZMmRI7rjjjowYMSIPP/xw3nrrrfTv3z/z5s0rY1iw0hg3blyuvvrqbL755g3azStYOnV1ddlhhx3SrFmz3H333Xn66afz05/+NGussUalxryCpXPBBRfkqquuyrBhw/LMM8/kwgsvzEUXXZTLL7+8UmNeweK9/fbb+eIXv5hhw4Yt9PjymkMDBw7MhAkTMnLkyIwcOTITJkzIoEGDVvj4lkoBH7DtttsWxxxzTIO2jTfeuDjttNNK6hF8ukybNq1IUowePbooiqKYP39+UVtbW5x//vmVmnfffbeoqakprrrqqqIoimL69OlFs2bNihEjRlRq/vOf/xSrrbZaMXLkyE92ALASmTlzZtG9e/di1KhRRZ8+fYoTTzyxKArzCpbFqaeeWuy4446LPG5ewdLbc889i8MPP7xB2z777FMcfPDBRVGYV7C0khR33HFH5f3ymkNPP/10kaQYO3ZspWbMmDFFkuLZZ59dwaNaclbQUTFnzpyMHz8+/fr1a9Der1+/PPLIIyX1Cj5d6uvrkyTt27dPkkyaNClTpkxpMK+qq6vTp0+fyrwaP3585s6d26CmS5cu6dGjh7nHKu24447LnnvumV122aVBu3kFS++Pf/xjtt566+y3337p1KlTttxyy1xzzTWV4+YVLL0dd9wx999/f55//vkkyT/+8Y88/PDD2WOPPZKYV/BxLa85NGbMmNTU1GS77bar1PTq1Ss1NTUr1TxrWnYHWHm88cYbmTdvXjp37tygvXPnzpkyZUpJvYJPj6IoctJJJ2XHHXdMjx49kqQydxY2r1566aVKTfPmzdOuXbtGNeYeq6oRI0bk8ccfz7hx4xodM69g6b3wwgu58sorc9JJJ+WMM87IY489lhNOOCHV1dU55JBDzCtYBqeeemrq6+uz8cYbp0mTJpk3b17OPffcHHjggUn8+wo+ruU1h6ZMmZJOnTo1+vxOnTqtVPNMQEcjVVVVDd4XRdGoDWjs+OOPz5NPPpmHH3640bFlmVfmHquqV155JSeeeGLuvffetGjRYpF15hUsufnz52frrbfO0KFDkyRbbrllnnrqqVx55ZU55JBDKnXmFSy5W2+9NTfffHOGDx+eL3zhC5kwYUKGDBmSLl265NBDD63UmVfw8SyPObSw+pVtntniSkXHjh3TpEmTRgnytGnTGiXWQEODBw/OH//4xzz44INZZ511Ku21tbVJsth5VVtbmzlz5qSurm6RNbAqGT9+fKZNm5aePXumadOmadq0aUaPHp2f//znadq0aWVemFew5NZaa61suummDdo22WSTyoPA/PsKlt73vve9nHbaafnmN7+ZzTbbLIMGDcp3v/vdnHfeeUnMK/i4ltccqq2tzdSpUxt9/uuvv75SzTMBHRXNmzdPz549M2rUqAbto0aNyvbbb19Sr2DlVhRFjj/++Nx+++154IEHsv766zc4vv7666e2trbBvJozZ05Gjx5dmVc9e/ZMs2bNGtRMnjw5EydONPdYJfXt2zf//Oc/M2HChMpr6623zkEHHZQJEyZkgw02MK9gKe2www557rnnGrQ9//zz6datWxL/voJl8c4772S11Rr+J3WTJk0yf/78JOYVfFzLaw717t079fX1eeyxxyo1jz76aOrr61eueVbGkylYeY0YMaJo1qxZce211xZPP/10MWTIkKJ169bFiy++WHbXYKX0ne98p6ipqSn+8pe/FJMnT6683nnnnUrN+eefX9TU1BS333578c9//rM48MADi7XWWquYMWNGpeaYY44p1llnneK+++4rHn/88eIrX/lK8cUvfrF47733yhgWrHQ++BTXojCvYGk99thjRdOmTYtzzz23+Ne//lXccsstRatWrYqbb765UmNewdI59NBDi7XXXrv405/+VEyaNKm4/fbbi44dOxbf//73KzXmFSzezJkziyeeeKJ44okniiTFJZdcUjzxxBPFSy+9VBTF8ptDu+++e7H55psXY8aMKcaMGVNsttlmRf/+/T/x8S6OgI5GfvGLXxTdunUrmjdvXmy11VbF6NGjy+4SrLSSLPR1/fXXV2rmz59f/OhHPypqa2uL6urq4stf/nLxz3/+s8HnzJo1qzj++OOL9u3bFy1btiz69+9fvPzyy5/waGDl9eGAzryCpfe///u/RY8ePYrq6upi4403Lq6++uoGx80rWDozZswoTjzxxGLdddctWrRoUWywwQbFD37wg2L27NmVGvMKFu/BBx9c6H9PHXrooUVRLL859N///rc46KCDijZt2hRt2rQpDjrooKKuru4TGuWSqSqKoihn7R4AAAAA4B50AAAAAFAiAR0AAAAAlEhABwAAAAAlEtABAAAAQIkEdAAAAABQIgEdAAAAAJRIQAcAAAAAJRLQAQAAAECJBHQAACzSTjvtlCFDhqzw6wwaNChDhw5t1P7iiy/mrLPOatQ+e/bsrLvuuhk/fvwK7xsAwIomoAMAWAUcdthhqaqqSlVVVZo1a5YNNtggp5xySt5+++3Fnnf77bfnxz/+8Qrt25NPPpk///nPGTx48BKfU11dnVNOOSWnnnrqCuwZAMAnQ0AHALCK2H333TN58uS88MIL+clPfpIrrrgip5xyykJr586dmyRp37592rRps0L7NWzYsOy3334NrjNp0qR8/etfT69evXLhhRdm4403zjHHHNPgvIMOOih//etf88wzz6zQ/gEArGgCOgCAVUR1dXVqa2vTtWvXDBw4MAcddFDuvPPOJMlZZ52VLbbYItddd1022GCDVFdXpyiKRltcZ8+ene9///vp2rVrqqur071791x77bWV408//XT22GOPrL766uncuXMGDRqUN954Y5F9mj9/fn77299mwIABDdoPOeSQTJ06NVdeeWUOO+yw/OxnP0uHDh0a1HTo0CHbb799fvOb33z8LwcAoEQCOgCAVVTLli0rK+WS5N///nduu+22/P73v8+ECRMWes4hhxySESNG5Oc//3meeeaZXHXVVVl99dWTJJMnT06fPn2yxRZb5O9//3tGjhyZqVOnZv/9919kH5588slMnz49W2+9dYP2J554Iscdd1y23HLLdOrUKbvttlvOPffcRudvu+22+etf/7oMowcAWHk0LbsDAAB88h577LEMHz48ffv2rbTNmTMnN910U9Zcc82FnvP888/ntttuy6hRo7LLLrskSTbYYIPK8SuvvDJbbbVVg4c9XHfddenatWuef/75fP7zn2/0mS+++GKaNGmSTp06NWjfYYcdctlll2X+/PmLHcfaa6+dF1988SPHCwCwMrOCDgBgFfGnP/0pq6++elq0aJHevXvny1/+ci6//PLK8W7dui0ynEuSCRMmpEmTJunTp89Cj48fPz4PPvhgVl999cpr4403TpL8v//3/xZ6zqxZs1JdXZ2qqqoG7bfcckt69eqVM844I+eee2569+6d3/3ud43Ob9myZd55552PHDsAwMrMCjoAgFXEzjvvnCuvvDLNmjVLly5d0qxZswbHW7duvdjzW7Zsudjj8+fPz1577ZULLrig0bG11lproed07Ngx77zzTubMmZPmzZs3aL/88stz8skn5/zzz896662XAw44IHfffXf69etXqXvzzTcXGyoCAHwaWEEHALCKaN26dT73uc+lW7dujcK5JbHZZptl/vz5GT169EKPb7XVVnnqqaey3nrr5XOf+1yD16LCvy222CLJ+w+XWJTa2tqcdtpp2WKLLRrdb27ixInZcsstl3osAAArEwEdAABLZL311suhhx6aww8/PHfeeWcmTZqUv/zlL7ntttuSJMcdd1zefPPNHHjggXnsscfywgsv5N57783hhx+eefPmLfQz11xzzWy11VZ5+OGHG7QfccQReeyxx/L2229n9uzZuf322/PUU0+lZ8+eDer++te/NlhRBwDwaSSgAwBgiV155ZXZd999c+yxx2bjjTfOkUcembfffjtJ0qVLl/ztb3/LvHnzsttuu6VHjx458cQTU1NTk9VWW/T/2XnUUUfllltuadDWqVOnHH744dl2221z0UUX5ZRTTsmPf/zj7L333pWaMWPGpL6+Pvvuu+8KGSsAwCelqiiKouxOAACw6nr33Xez0UYbZcSIEendu3eDYy+++GJuuOGGnHXWWY3O22+//bLlllvmjDPO+IR6CgCwYlhBBwBAqVq0aJFf//rXeeONN5b4nNmzZ+eLX/xivvvd767AngEAfDKsoAMAAACAEllBBwAAAAAlEtABAAAAQIkEdAAAAABQIgEdAAAAAJRIQAcAAAAAJRLQAQAAAECJBHQAAAAAUCIBHQAAAACUSEAHAAAAACUS0AEAAABAif4/OZTsFoS0bP4AAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Plot the distribution of prices\n", "\n", "plt.figure(figsize=(15, 6))\n", "plt.title(f\"Prices: Avg {sum(prices)/len(prices):,.2f} and highest {max(prices):,}\\n\")\n", "plt.xlabel('Price ($)')\n", "plt.ylabel('Count')\n", "plt.hist(prices, rwidth=0.7, color=\"orange\", bins=range(0, 1000, 10))\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 18, "id": "eabc7c61-0cd2-41f4-baa1-b85400bbf87f", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "TurboChef BULLET Rapid Cook Electric Microwave Convection Oven\n" ] } ], "source": [ "# So what is this item??\n", "\n", "for datapoint in dataset:\n", " try:\n", " price = float(datapoint[\"price\"])\n", " if price > 21000:\n", " print(datapoint['title'])\n", " except ValueError as e:\n", " pass" ] }, { "cell_type": "markdown", "id": "3668ae25-3461-4e6e-9ccb-221c1925a497", "metadata": {}, "source": [ "This is the closest I can find - looks like it's going at a bargain price!!\n", "\n", "https://www.amazon.com/TurboChef-Electric-Countertop-Microwave-Convection/dp/B01D05U9NO/" ] }, { "cell_type": "markdown", "id": "a0d02f58-23f6-4f81-a779-7c0555afd13d", "metadata": {}, "source": [ "## Now it's time to curate our dataset\n", "\n", "We select items that cost between 1 and 999 USD\n", "\n", "We will be create Item instances, which truncate the text to fit within 180 tokens using the right Tokenizer\n", "\n", "And will create a prompt to be used during Training.\n", "\n", "Items will be rejected if they don't have sufficient characters." ] }, { "cell_type": "code", "execution_count": 19, "id": "430b432f-b769-41da-9506-a238cb5cf1b6", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "There are 29,191 items\n" ] } ], "source": [ "# Create an Item object for each with a price\n", "\n", "items = []\n", "for datapoint in dataset:\n", " try:\n", " price = float(datapoint[\"price\"])\n", " if price > 0:\n", " item = Item(datapoint, price)\n", " if item.include:\n", " items.append(item)\n", " except ValueError as e:\n", " pass\n", "\n", "print(f\"There are {len(items):,} items\")" ] }, { "cell_type": "code", "execution_count": 21, "id": "0d570794-6f1d-462e-b567-a46bae3556a1", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Look at the first item\n", "\n", "items[1]" ] }, { "cell_type": "code", "execution_count": 26, "id": "70219e99-22cc-4e08-9121-51f9707caef0", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "How much does this cost to the nearest dollar?\n", "\n", "Samsung Assembly Ice Maker-Mech\n", "This is an O.E.M. Authorized part, fits with various Samsung brand models, oem part # this product in manufactured in south Korea. This is an O.E.M. Authorized part Fits with various Samsung brand models Oem part # This is a Samsung replacement part Part Number This is an O.E.M. part Manufacturer J&J International Inc., Part Weight 1 pounds, Dimensions 18 x 12 x 6 inches, model number Is Discontinued No, Color White, Material Acrylonitrile Butadiene Styrene, Quantity 1, Certification Certified frustration-free, Included Components Refrigerator-replacement-parts, Rank Tools & Home Improvement Parts & Accessories 31211, Available April 21, 2011\n", "\n", "Price is $118.00\n" ] } ], "source": [ "# Investigate the prompt that will be used during training - the model learns to complete this\n", "\n", "print(items[100].prompt)" ] }, { "cell_type": "code", "execution_count": 27, "id": "d9998b8d-d746-4541-9ac2-701108e0e8fb", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "How much does this cost to the nearest dollar?\n", "\n", "Samsung Assembly Ice Maker-Mech\n", "This is an O.E.M. Authorized part, fits with various Samsung brand models, oem part # this product in manufactured in south Korea. This is an O.E.M. Authorized part Fits with various Samsung brand models Oem part # This is a Samsung replacement part Part Number This is an O.E.M. part Manufacturer J&J International Inc., Part Weight 1 pounds, Dimensions 18 x 12 x 6 inches, model number Is Discontinued No, Color White, Material Acrylonitrile Butadiene Styrene, Quantity 1, Certification Certified frustration-free, Included Components Refrigerator-replacement-parts, Rank Tools & Home Improvement Parts & Accessories 31211, Available April 21, 2011\n", "\n", "Price is $\n" ] } ], "source": [ "# Investigate the prompt that will be used during testing - the model has to complete this\n", "\n", "print(items[100].test_prompt())" ] }, { "cell_type": "code", "execution_count": 28, "id": "7a116369-335a-412b-b70c-2add6675c2e3", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABOoAAAIzCAYAAAC+4/YCAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABaK0lEQVR4nO3debhXZb03/veWYTNvmWErInWURJxCQ9TCERwQyVOadAjSyHIgjvrk0U4O1U9ySPNkmXXMKRM7xyENI3AiEXAgSTEtLQxMEGXYIOlmWr8/fPg+bgFFQlnC63Vd67r43uuz1rrXl3sv2W/vtVZVURRFAAAAAIDNapvN3QEAAAAAQFAHAAAAAKUgqAMAAACAEhDUAQAAAEAJCOoAAAAAoAQEdQAAAABQAoI6AAAAACgBQR0AAAAAlICgDgAAAABKQFAHAB8SVVVVG7Q8+OCDG7Sv00477f3v9BbgnnvuyQUXXPCBHvOpp55KVVVVmjRpkrlz536gx36r73//+zn22GPTo0ePVFVV5cADD1xn3YEHHviOY3LevHkN6pctW5bzzjsvO++8c6qrq9O+ffscdNBBee655zaoX6+++mq+9rWvZccdd0x1dXU6d+6cI444IgsXLvxnT3mTueCCC1JVVfWudQceeGB69+79rnUvvPBCqqqqcv31129UfzbHz/yUKVNywQUXZPHixRtU/+KLL2b06NHp379/tt122/We75rvYn3L4Ycf3qD++eefz7Bhw7LDDjukefPm+ehHP5ozzjgjCxYs2ARnCQCbVuPN3QEAYMNMnTq1wedvf/vbeeCBB3L//fc3aO/Vq9cH2a0t3j333JMf/vCHH2hY99///d9JkpUrV+bGG2/M2Wef/YEd+61+/OMfp2XLljn44INz9913r7fuRz/6UZYsWdKg7R//+EcOP/zw9OnTJ126dKm0v/baaznooIPy0ksv5T/+4z+y++67p66uLlOmTMk//vGPd+3TSy+9lE9+8pNp3LhxvvnNb2annXbKq6++mgceeCDLly/f+JMtua5du2bq1Kn56Ec/urm7ssGmTJmSCy+8MCNGjMi22277rvXPP/98br755uy555458sgjc8stt6yzbs138XZ33nlnLr744nz605+utL3yyivZd99906ZNm3z729/ODjvskCeeeCLnn39+HnjggUyfPj3bbGPuAgDlIagDgA+Jfffdt8Hnjh07ZptttlmrnQ+3+vr63Hzzzdljjz3y6quv5mc/+9lmC+r++Mc/VkKMd5r1ta5w+IYbbsiKFSvypS99qUH7f/7nf+aZZ57Jk08+mY985COV9sGDB29Qn0455ZTU19fn8ccfT9u2bSvtxx577AZt/2FVXV29xf+sf+pTn8orr7ySJHn88cfXG9St77s455xz0qJFi5xwwgmVtl/96ldZsGBBbr311hxyyCFJkoMOOij19fU599xz84c//CF77bXX+3A2ALBx/O8jANiCLFy4MKecckq22267NG3aNB/5yEfyjW98I/X19e+4XVEUOffcc9OkSZP89Kc/rbTfeuut6devX1q2bJlWrVpl4MCBeeKJJxpsO2LEiLRq1SrPP/98jjzyyLRq1SrdunXLmWee+a7HXeMXv/hF+vXrl1atWqVVq1bZc889c+211zao+dnPfpY99tgjzZo1S7t27fLpT386zzzzTIOaAw88cJ23Z44YMSI77rhj5fOaW+cuu+yyXH755enRo0datWqVfv36Zdq0aQ22++EPf5ik4a3HL7zwQpLkf/7nf9K3b9/U1NSkRYsW+chHPpITTzxxg855fe68884sWLAgX/rSlzJ8+PD8+c9/zuTJkyvrhwwZku7du2f16tVrbdu3b998/OMfr3xevHhxTjrppLRr1y6tWrXKUUcdlb/+9a+pqqraoBmC/8xMo2uvvTatWrXK8ccfX2n7xz/+kf/+7//OZz/72QYh3YZ64YUXctddd2XkyJENQroN9cYbb+TMM8/MnnvumZqamrRr1y79+vXLr371q7Vq19wqetNNN2WXXXZJixYtsscee+TXv/71WrXjxo3Lnnvumerq6vTo0SOXXXbZe+7bY489lk9+8pOVcfTd7363wd/x+m59/dWvfpXdd9891dXV+chHPpIrr7zyHW+73ZDzee655zJ06NB06tQp1dXV2WWXXSo/B2usXr063/nOd9KzZ880b9482267bXbfffdceeWVSd689ff//J//kySVW6ff7db8f2a8/eUvf8mkSZNy3HHHpU2bNpX2Jk2aJElqamoa1K+Z4desWbONPiYAvB8EdQCwhXjjjTdy0EEH5cYbb8wZZ5yRcePG5d/+7d9yySWXvONso/r6+gwdOjRXXXVV7r777owcOTJJctFFF+WEE05Ir1698stf/jI33XRTli5dmk9+8pP54x//2GAfK1asyODBg3PIIYfkV7/6VU488cRcccUVufjii9+13+edd14+//nPp7a2Ntdff33uuOOODB8+PH/7298qNWPGjMlJJ52UXXfdNbfffnuuvPLKPPnkk+nXr98GP9dsXX74wx9m4sSJ+f73v5+bb745y5Yty5FHHpm6urokyTe/+c185jOfSfLmrcdrljW33h1//PH5yEc+krFjx2bcuHE577zzsnLlygbHWPP8tg117bXXprq6Op///Odz4oknpqqqqkFoeeKJJ2b27Nlr3fL87LPP5tFHH80Xv/jFJG8GKUcffXR+8Ytf5Oyzz84dd9yRvn37rvX8rvfDc889l4ceeiif+9zn0qpVq0r79OnTs2zZsuy000756le/mrZt26Zp06bZe++9M27cuHfd70MPPZSiKFJbW5sTTjghrVq1SrNmzXLggQeu81bIt6uvr8/ChQtz1lln5c4778wtt9ySAw44IMcee2xuvPHGterHjRuXq666Kt/61rdy2223VQLiv/71r5Wa++67L8ccc0xat26dsWPH5tJLL80vf/nLXHfddRv4bSXz5s3L5z//+fzbv/1b7rrrrhxxxBE555xz8vOf//wdtxs/fnyOPfbYtG/fPrfeemsuueSS3HLLLbnhhhvWWb8h5/PHP/4x++yzT2bOnJnvfe97+fWvf52jjjoqo0aNyoUXXlipu+SSS3LBBRfkhBNOyLhx43LrrbfmpJNOqjyP7ktf+lJOP/30JMntt99e+dl5a5C8Kf3sZz9LURRrzeAcMmRIdthhh5x55pl5+umn89prr+V3v/tdvvvd7+boo4/OLrvs8r70BwA2WgEAfCgNHz68aNmyZeXzj3/84yJJ8ctf/rJB3cUXX1wkKSZMmFBpS1KceuqpxYIFC4oDDjig2G677YoZM2ZU1s+ePbto3LhxcfrppzfY19KlS4suXboUxx13XIN+rOu4Rx55ZNGzZ893PIe//vWvRaNGjYrPf/7z661ZtGhR0bx58+LII49s0D579uyiurq6GDp0aKWtf//+Rf/+/dfax/Dhw4vu3btXPs+aNatIUuy2227FypUrK+2PPvpokaS45ZZbKm2nnnpqsa5/Ml122WVFkmLx4sXveI4HH3xw0ahRo3esWeOFF14ottlmm+Jzn/tcg3Nq2bJlsWTJkqIoimLFihVF586dG5x3URTF17/+9aJp06bFq6++WhRFUYwbN65IUlx99dUN6saMGVMkKc4///wN6tMau+666zq/23U5++yziyTF1KlTG7TfcsstRZKiTZs2xf7771/cddddxa9//evioIMOKqqqqorx48e/437X9L1NmzbFMcccU4wfP7647bbbit13371o1qxZ8Yc//OE9ndPKlSuLFStWFCeddFKx1157NViXpOjcuXPley+Kopg3b16xzTbbFGPGjKm09e3bt6itrS1ef/31StuSJUuKdu3arXPcvF3//v2LJMUjjzzSoL1Xr17FwIEDK5/XjNnrrruu0rbPPvsU3bp1K+rr6yttS5cuLdq3b7/WsTf0fAYOHFhsv/32RV1dXYPtTzvttKJZs2bFwoULi6IoikGDBhV77rnnO57bpZdeWiQpZs2a9c5fwjo89thja53v+qxcubLYbrvtio997GPrXP/SSy8V/fr1K5JUls9+9rPFG2+88Z77BQDvNzPqAGALcf/996dly5aVGWBrjBgxIsmbM3/eatasWenXr1+WLFmSadOmZY899qis++1vf5uVK1fmC1/4QlauXFlZmjVrlv79+691+1pVVVWOPvroBm277757g1lx6zJx4sSsWrUqp5566nprpk6dmtdff71yHmt069YtBx988Frn9V4cddRRadSoUYM+J3nXfifJPvvskyQ57rjj8stf/jJ///vf11l33333rTXLbn2uu+66rF69usHtsyeeeGKWLVuWW2+9NUnSuHHj/Nu//Vtuv/32ysy/VatW5aabbsoxxxyT9u3bJ0kmTZpU6d9bvfX5Xe+HlStX5oYbbsiuu+661nPE1tzK2bRp0/zmN7/J0UcfnaOOOiq//vWv07Vr13z7299+x32v2X777bfPbbfdloEDB+bYY4/N+PHjs8022+SSSy551/79z//8T/bff/+0atUqjRs3TpMmTXLttdeudRt18uazzFq3bl353Llz53Tq1KkyPpYtW5bHHnssxx57bINbKFu3br3Wz8M76dKlSz7xiU80aHu3n59ly5bl8ccfz5AhQ9K0adNKe6tWrdZ77Hc7nzfeeCP33XdfPv3pT6dFixYNfvaPPPLIvPHGG5Vbwz/xiU/kD3/4Q0455ZT89re/XetlIh+k8ePH5+9//3tOOumktdYtWrQoxxxzTJYsWZKbb745v/vd7/KjH/0okydPzuDBgzf4ZxMAPiiCOgDYQixYsCBdunRZ6zbLTp06pXHjxlmwYEGD9kcffTR//vOfc/zxx2f77bdvsO7ll19O8mYY1aRJkwbLrbfemldffbVBfYsWLdZ61lN1dXXeeOONd+zzmgfHv/34bz+v5M03Pb5dbW3tWuf1XqwJtdaorq5Okrz++uvvuu2nPvWp3HnnnZVAc/vtt0/v3r3X+wD8d7N69epcf/31qa2tTZ8+fbJ48eIsXrw4hx56aFq2bLnW7a9vvPFGxo4dm+TNYHXu3LmV216TN7+3xo0bp127dg2O07lz543q34a65557Mm/evLVuQUz+3/e93377NQiMWrRokf79++f3v//9O+57zfaHHnpog4C1a9eu2WOPPd51+9tvvz3HHXdctttuu/z85z/P1KlT89hjj1W+z/Ud762qq6sr42PRokVZvXp1g7farrGutnc7r/UdZ10WLVqUoijW+fe5vr/jdzvOggULsnLlyvzgBz9Y6+f+yCOPTJLKz/4555yTyy67LNOmTcsRRxyR9u3b55BDDsnjjz/+7ie8iV177bVp0qRJvvCFL6y17uKLL86MGTMyceLEDB06NJ/85Cfz1a9+NTfffHMmTJiQm2+++QPvLwC8E299BYAtRPv27fPII4+kKIoGYd38+fOzcuXKdOjQoUH98ccfny5duuQb3/hGVq9enf/8z/+srFtT+7//+7/p3r37+9bnjh07JklefPHFdOvWbZ01a8KFuXPnrrXupZdeanBezZo1q8wye6u3B4ubyjHHHJNjjjkm9fX1mTZtWsaMGZOhQ4dmxx13TL9+/d7Tvu69997KzKZ1BSrTpk3LH//4x/Tq1Su9evXKJz7xiVx33XU5+eSTc91116W2tjYDBgyo1Ldv3z4rV67MwoULG4R18+bN28iz3TDXXnttmjZtmmHDhq21bs2MxXUpiuJdXybwz27/85//PD169Mitt97a4GdkQ1968nZt27ZNVVXVOr/T9/t7XnPsNaH6pjh227Zt06hRowwbNmy9s1x79OiR5M2ZnWeccUbOOOOMLF68OPfee2/OPffcDBw4MHPmzEmLFi02qg/v1fz58/PrX/86gwcPTqdOndZaP2PGjGy33XZrBf1rZsTOnDnzA+knAGwoM+oAYAtxyCGH5LXXXsudd97ZoH3NQ/IPOeSQtbb5z//8z3z/+9/Peeedl3POOafSPnDgwDRu3Dh/+ctfsvfee69z2RQGDBiQRo0a5eqrr15vTb9+/dK8efO1Hqz/4osv5v77729wXjvuuGP+/Oc/NwheFixYkClTpmx0Hzdkll11dXX69+9feXnG29+MuyGuvfbabLPNNrnzzjvzwAMPNFhuuummJG8+MH+NL37xi3nkkUcyefLk3H333Rk+fHiDWWb9+/dPksots2usmYX3fpg3b17uueeeDBkyZJ1hY9euXdOvX788/PDDDW6V/Mc//pFJkyatdavs2/Xt2zfbb799JkyYkFWrVlXaX3rppfzhD3941+2rqqrStGnTBiHdvHnz1vnW1w3RsmXLfOITn8jtt9/eYEbe0qVLc/fdd2/UPt/Lsffee+/ceeedWb58eaX9tddeW+ebXDdEixYtctBBB+WJJ57I7rvvvs6f+3X9vW677bb5zGc+k1NPPTULFy6svBX5vcxQ3Vg33nhjVqxYsc7bXpM3Z92++OKLa92avublI+80mxcANgcz6gBgC/GFL3whP/zhDzN8+PC88MIL2W233TJ58uRcdNFFOfLII3PooYeuc7uvfe1radWqVb785S/ntddey3/9139lxx13zLe+9a184xvfyF//+tccfvjhadu2bV5++eU8+uijadmyZYM3QG6sHXfcMeeee26+/e1v5/XXX88JJ5yQmpqa/PGPf8yrr76aCy+8MNtuu22++c1v5txzz80XvvCFnHDCCVmwYEEuvPDCNGvWLOeff35lf8OGDcs111yTf/u3f8vIkSOzYMGCXHLJJWnTps1G93G33XZL8uYtdEcccUQaNWqU3XffPd/5znfy4osv5pBDDsn222+fxYsX58orr0yTJk0qIVnyZkA6adKkd3wW1oIFC/KrX/0qAwcOzDHHHLPOmiuuuCI33nhjxowZkyZNmuSEE07IGWeckRNOOCH19fVrPcPv8MMPz/77758zzzwzS5YsSZ8+fTJ16tRKcPtus8+S5PHHH6+ELkuWLElRFPnf//3fJG/OSHr7bMsbbrghK1euXOdtr2tcdtllOeiggzJw4MCcffbZqaqqyve+9728+uqrDZ5R97e//S0f/ehHM3z48Mptv9tss02uuOKKHHfccTnmmGPy1a9+NcuWLcu3v/3tNG3atEHYvC6DBg3K7bffnlNOOSWf+cxnMmfOnHz7299O165dN/rtwd/+9rdz+OGH57DDDsuZZ56ZVatW5eKLL07Lli2zcOHCjdrnhvrWt76Vo446KgMHDszXvva1rFq1KpdeemlatWq10ce+8sorc8ABB1RuEd1xxx2zdOnSPP/887n77rsrbxs++uij07t37+y9997p2LFj/va3v+X73/9+unfvnp122inJ//vZufLKKzN8+PA0adIkPXv2bHDb89utGV9r3kT7+OOPV94c/PbnbyZvBtzdunXLwIED17m/U089NTfffHMOO+yw/Md//Ee6deuWmTNn5jvf+U46d+6cz3/+8xv1PQHA+2azvsoCANhob3/ra1EUxYIFC4qvfOUrRdeuXYvGjRsX3bt3L84555y13m6Y//vW17e65ZZbisaNGxdf/OIXi1WrVhVFURR33nlncdBBBxVt2rQpqquri+7duxef+cxninvvvfcd+1EURXH++edv0Fsvi6IobrzxxmKfffYpmjVrVrRq1arYa6+91nrb43//938Xu+++e9G0adOipqamOOaYY4qnn356rX3dcMMNxS677FI0a9as6NWrV3Hrrbeu962vl1566Vrb521vRK2vry++9KUvFR07diyqqqoqb7H89a9/XRxxxBHFdtttVzRt2rTo1KlTceSRRxYPPfRQg/2teavnO/n+979fJCnuvPPO9daseavvbbfdVmkbOnRokaTYf//917nNwoULiy9+8YvFtttuW7Ro0aI47LDDimnTphVJiiuvvPId+1QU/++Nvuta1vU2zp133rnYcccdi9WrV7/jfh966KGif//+RYsWLYoWLVoUBx98cPHwww83qFnzdzR8+PC1tr/zzjsr46WmpqYYPHjwOsfCunz3u98tdtxxx6K6urrYZZddip/+9KfrHKvr+hkpiqLo3r37Wn266667KmNzhx12KL773e9u8Pjv379/seuuu67Vvr4x+/bv/Y477ih22223BsceNWpU0bZt240+n1mzZhUnnnhisd122xVNmjQpOnbsWOy3337Fd77znUrN9773vWK//fYrOnToUDn2SSedVLzwwgsN9nXOOecUtbW1xTbbbFMkKR544IF3/D7WN97W9V0+/PDDRZLivPPOe8d9/v73vy8+/elPF9tvv31RXV1dfOQjHym+9KUvFbNnz37H7QBgc6gqiqL4APJAAABK4Be/+EU+//nP5+GHH85+++23ubvDJrZixYrsueee2W677TJhwoTN3R0A4D1y6ysAwBbqlltuyd///vfstttu2WabbTJt2rRceuml+dSnPiWk20KcdNJJOeyww9K1a9fMmzcvP/7xj/PMM8/kyiuv3NxdAwA2gqAOAGAL1bp164wdOzbf+c53smzZsnTt2jUjRozId77znc3dNTaRpUuX5qyzzsorr7ySJk2a5OMf/3juueee9T6TEgAoN7e+AgAAAEAJvPvrvgAAAACA952gDgAAAABKQFAHAAAAACUgqAMAAACAEhDUAQAAAEAJCOoAAAAAoAQEdQAAAABQAoI6AAAAACgBQR0AAAAAlICgDgAAAABKQFAHAAAAACUgqAMAAACAEhDUAQAAAEAJCOoAAAAAoAQEdQAAAABQAoI6AAAAACgBQR0AAAAAlICgDgAAAABKQFAHAAAAACUgqAMAAACAEhDUAQAAAEAJNN6cB7/66qtz9dVX54UXXkiS7LrrrjnvvPNyxBFHJEmKosiFF16Yn/zkJ1m0aFH69u2bH/7wh9l1110r+6ivr89ZZ52VW265Ja+//noOOeSQ/OhHP8r2229fqVm0aFFGjRqVu+66K0kyePDg/OAHP8i2225bqZk9e3ZOPfXU3H///WnevHmGDh2ayy67LE2bNt3g81m9enVeeumltG7dOlVVVf/ENwMAAADAh1lRFFm6dGlqa2uzzTYbOFeu2IzuuuuuYty4ccWf/vSn4k9/+lNx7rnnFk2aNClmzpxZFEVRfPe73y1at25d3HbbbcVTTz1VHH/88UXXrl2LJUuWVPbxla98pdhuu+2KiRMnFr///e+Lgw46qNhjjz2KlStXVmoOP/zwonfv3sWUKVOKKVOmFL179y4GDRpUWb9y5cqid+/exUEHHVT8/ve/LyZOnFjU1tYWp5122ns6nzlz5hRJLBaLxWKxWCwWi8VisVgsliJJMWfOnA3OlqqKoihSIu3atcull16aE088MbW1tRk9enTOPvvsJG/OnuvcuXMuvvjinHzyyamrq0vHjh1z00035fjjj0+SvPTSS+nWrVvuueeeDBw4MM8880x69eqVadOmpW/fvkmSadOmpV+/fnn22WfTs2fP/OY3v8mgQYMyZ86c1NbWJknGjh2bESNGZP78+WnTps0G9b2uri7bbrtt5syZs8HbAAAAALDlWbJkSbp165bFixenpqZmg7bZrLe+vtWqVavyP//zP1m2bFn69euXWbNmZd68eRkwYEClprq6Ov3798+UKVNy8sknZ/r06VmxYkWDmtra2vTu3TtTpkzJwIEDM3Xq1NTU1FRCuiTZd999U1NTkylTpqRnz56ZOnVqevfuXQnpkmTgwIGpr6/P9OnTc9BBB62zz/X19amvr698Xrp0aZKkTZs2gjoAAAAA3tPj0Tb7yySeeuqptGrVKtXV1fnKV76SO+64I7169cq8efOSJJ07d25Q37lz58q6efPmpWnTpmnbtu071nTq1Gmt43bq1KlBzduP07Zt2zRt2rRSsy5jxoxJTU1NZenWrdt7PHsAAAAAeNNmD+p69uyZGTNmZNq0afnqV7+a4cOH549//GNl/dtTx6Io3jWJfHvNuuo3pubtzjnnnNTV1VWWOXPmvGO/AAAAAGB9NntQ17Rp0/zLv/xL9t5774wZMyZ77LFHrrzyynTp0iVJ1prRNn/+/Mrsty5dumT58uVZtGjRO9a8/PLLax33lVdeaVDz9uMsWrQoK1asWGum3VtVV1dXbnN1uysAAAAA/4zNHtS9XVEUqa+vT48ePdKlS5dMnDixsm758uWZNGlS9ttvvyRJnz590qRJkwY1c+fOzcyZMys1/fr1S11dXR599NFKzSOPPJK6uroGNTNnzszcuXMrNRMmTEh1dXX69Onzvp4vAAAAACSb+WUS5557bo444oh069YtS5cuzdixY/Pggw9m/PjxqaqqyujRo3PRRRdlp512yk477ZSLLrooLVq0yNChQ5MkNTU1Oemkk3LmmWemffv2adeuXc4666zstttuOfTQQ5Mku+yySw4//PCMHDky11xzTZLky1/+cgYNGpSePXsmSQYMGJBevXpl2LBhufTSS7Nw4cKcddZZGTlypFlyAAAAAHwgNmtQ9/LLL2fYsGGZO3duampqsvvuu2f8+PE57LDDkiRf//rX8/rrr+eUU07JokWL0rdv30yYMCGtW7eu7OOKK65I48aNc9xxx+X111/PIYcckuuvvz6NGjWq1Nx8880ZNWpU5e2wgwcPzlVXXVVZ36hRo4wbNy6nnHJK9t9//zRv3jxDhw7NZZdd9gF9EwAAAABs7aqKoig2dye2FEuWLElNTU3q6urMxAMAAADYim1MTlS6Z9QBAAAAwNZIUAcAAAAAJSCoAwAAAIASENQBAAAAQAkI6gAAAACgBAR1AAAAAFACgjoAAAAAKAFBHQAAAACUgKAOAAAAAEpAUAcAAAAAJSCoAwAAAIASENQBAAAAQAk03twdAAAANr2qC6s+kOMU5xcfyHEAYGtgRh0AAAAAlICgDgAAAABKQFAHAAAAACUgqAMAAACAEhDUAQAAAEAJCOoAAAAAoAQEdQAAAABQAoI6AAAAACgBQR0AAAAAlICgDgAAAABKQFAHAAAAACUgqAMAAACAEhDUAQAAAEAJCOoAAAAAoAQEdQAAAABQAoI6AAAAACgBQR0AAAAAlICgDgAAAABKQFAHAAAAACUgqAMAAACAEhDUAQAAAEAJCOoAAAAAoAQEdQAAAABQAoI6AAAAACgBQR0AAAAAlICgDgAAAABKQFAHAAAAACUgqAMAAACAEhDUAQAAAEAJCOoAAAAAoAQEdQAAAABQAoI6AAAAACgBQR0AAAAAlICgDgAAAABKQFAHAAAAACUgqAMAAACAEhDUAQAAAEAJCOoAAAAAoAQEdQAAAABQAoI6AAAAACgBQR0AAAAAlICgDgAAAABKQFAHAAAAACUgqAMAAACAEhDUAQAAAEAJCOoAAAAAoAQEdQAAAABQAoI6AAAAACgBQR0AAAAAlICgDgAAAABKQFAHAAAAACUgqAMAAACAEtisQd2YMWOyzz77pHXr1unUqVOGDBmSP/3pTw1qRowYkaqqqgbLvvvu26Cmvr4+p59+ejp06JCWLVtm8ODBefHFFxvULFq0KMOGDUtNTU1qamoybNiwLF68uEHN7Nmzc/TRR6dly5bp0KFDRo0aleXLl78v5w4AAAAAb7VZg7pJkybl1FNPzbRp0zJx4sSsXLkyAwYMyLJlyxrUHX744Zk7d25lueeeexqsHz16dO64446MHTs2kydPzmuvvZZBgwZl1apVlZqhQ4dmxowZGT9+fMaPH58ZM2Zk2LBhlfWrVq3KUUcdlWXLlmXy5MkZO3Zsbrvttpx55pnv75cAAAAAAEmqiqIoNncn1njllVfSqVOnTJo0KZ/61KeSvDmjbvHixbnzzjvXuU1dXV06duyYm266Kccff3yS5KWXXkq3bt1yzz33ZODAgXnmmWfSq1evTJs2LX379k2STJs2Lf369cuzzz6bnj175je/+U0GDRqUOXPmpLa2NkkyduzYjBgxIvPnz0+bNm3etf9LlixJTU1N6urqNqgeAADeL1UXVn0gxynOL82vEwBQKhuTE5XqGXV1dXVJknbt2jVof/DBB9OpU6fsvPPOGTlyZObPn19ZN3369KxYsSIDBgyotNXW1qZ3796ZMmVKkmTq1KmpqamphHRJsu+++6ampqZBTe/evSshXZIMHDgw9fX1mT59+qY/WQAAAAB4i8abuwNrFEWRM844IwcccEB69+5daT/iiCPy2c9+Nt27d8+sWbPyzW9+MwcffHCmT5+e6urqzJs3L02bNk3btm0b7K9z586ZN29ekmTevHnp1KnTWsfs1KlTg5rOnTs3WN+2bds0bdq0UvN29fX1qa+vr3xesmTJxp08AAAAAFu90gR1p512Wp588slMnjy5Qfua21mTpHfv3tl7773TvXv3jBs3Lscee+x691cURaqq/t90/7f++Z+peasxY8bkwgsvXP9JAQAAAMAGKsWtr6effnruuuuuPPDAA9l+++3fsbZr167p3r17nnvuuSRJly5dsnz58ixatKhB3fz58ysz5Lp06ZKXX355rX298sorDWrePnNu0aJFWbFixVoz7dY455xzUldXV1nmzJmzYScMAAAAAG+zWYO6oihy2mmn5fbbb8/999+fHj16vOs2CxYsyJw5c9K1a9ckSZ8+fdKkSZNMnDixUjN37tzMnDkz++23X5KkX79+qaury6OPPlqpeeSRR1JXV9egZubMmZk7d26lZsKECamurk6fPn3W2Zfq6uq0adOmwQIAAAAAG2OzvvX1lFNOyS9+8Yv86le/Ss+ePSvtNTU1ad68eV577bVccMEF+dd//dd07do1L7zwQs4999zMnj07zzzzTFq3bp0k+epXv5pf//rXuf7669OuXbucddZZWbBgQaZPn55GjRolefNZdy+99FKuueaaJMmXv/zldO/ePXfffXeSZNWqVdlzzz3TuXPnXHrppVm4cGFGjBiRIUOG5Ac/+MEGnY+3vgIAUBbe+goAm9eH7q2vV199derq6nLggQema9euleXWW29NkjRq1ChPPfVUjjnmmOy8884ZPnx4dt5550ydOrUS0iXJFVdckSFDhuS4447L/vvvnxYtWuTuu++uhHRJcvPNN2e33XbLgAEDMmDAgOy+++656aabKusbNWqUcePGpVmzZtl///1z3HHHZciQIbnssss+uC8EAAAAgK3WZp1Rt6Uxow4AgLIwow4ANq8P3Yw6AAAAAOBNgjoAAAAAKAFBHQAAAACUgKAOAAAAAEpAUAcAAAAAJSCoAwAAAIASENQBAAAAQAkI6gAAAACgBAR1AAAAAFACgjoAAAAAKAFBHQAAAACUgKAOAAAAAEpAUAcAAAAAJSCoAwAAAIASENQBAAAAQAkI6gAAAACgBAR1AAAAAFACgjoAAAAAKAFBHQAAAACUgKAOAAAAAEpAUAcAAAAAJSCoAwAAAIASENQBAAAAQAkI6gAAAACgBAR1AAAAAFACgjoAAAAAKAFBHQAAAACUgKAOAAAAAEpAUAcAAAAAJSCoAwAAAIASENQBAAAAQAkI6gAAAACgBAR1AAAAAFACgjoAAAAAKAFBHQAAAACUgKAOAAAAAEpAUAcAAAAAJSCoAwAAAIASENQBAAAAQAkI6gAAAACgBAR1AAAAAFACgjoAAAAAKAFBHQAAAACUgKAOAAAAAEpAUAcAAAAAJSCoAwAAAIASENQBAAAAQAkI6gAAAACgBAR1AAAAAFACgjoAAAAAKAFBHQAAAACUgKAOAAAAAEpAUAcAAAAAJSCoAwAAAIASENQBAAAAQAkI6gAAAACgBAR1AAAAAFACgjoAAAAAKAFBHQAAAACUgKAOAAAAAEpAUAcAAAAAJSCoAwAAAIASENQBAAAAQAkI6gAAAACgBAR1AAAAAFACgjoAAAAAKIHNGtSNGTMm++yzT1q3bp1OnTplyJAh+dOf/tSgpiiKXHDBBamtrU3z5s1z4IEH5umnn25QU19fn9NPPz0dOnRIy5YtM3jw4Lz44osNahYtWpRhw4alpqYmNTU1GTZsWBYvXtygZvbs2Tn66KPTsmXLdOjQIaNGjcry5cvfl3MHAAAAgLfarEHdpEmTcuqpp2batGmZOHFiVq5cmQEDBmTZsmWVmksuuSSXX355rrrqqjz22GPp0qVLDjvssCxdurRSM3r06Nxxxx0ZO3ZsJk+enNdeey2DBg3KqlWrKjVDhw7NjBkzMn78+IwfPz4zZszIsGHDKutXrVqVo446KsuWLcvkyZMzduzY3HbbbTnzzDM/mC8DAAAAgK1aVVEUxebuxBqvvPJKOnXqlEmTJuVTn/pUiqJIbW1tRo8enbPPPjvJm7PnOnfunIsvvjgnn3xy6urq0rFjx9x00005/vjjkyQvvfRSunXrlnvuuScDBw7MM888k169emXatGnp27dvkmTatGnp169fnn322fTs2TO/+c1vMmjQoMyZMye1tbVJkrFjx2bEiBGZP39+2rRp8679X7JkSWpqalJXV7dB9QAA8H6purDqAzlOcX5pfp0AgFLZmJyoVM+oq6urS5K0a9cuSTJr1qzMmzcvAwYMqNRUV1enf//+mTJlSpJk+vTpWbFiRYOa2tra9O7du1IzderU1NTUVEK6JNl3331TU1PToKZ3796VkC5JBg4cmPr6+kyfPn2d/a2vr8+SJUsaLAAAAACwMUoT1BVFkTPOOCMHHHBAevfunSSZN29ekqRz584Najt37lxZN2/evDRt2jRt27Z9x5pOnTqtdcxOnTo1qHn7cdq2bZumTZtWat5uzJgxlWfe1dTUpFu3bu/1tAEAAAAgSYmCutNOOy1PPvlkbrnllrXWVVU1nLZfFMVabW/39pp11W9MzVudc845qaurqyxz5sx5xz4BAAAAwPqUIqg7/fTTc9ddd+WBBx7I9ttvX2nv0qVLkqw1o23+/PmV2W9dunTJ8uXLs2jRonesefnll9c67iuvvNKg5u3HWbRoUVasWLHWTLs1qqur06ZNmwYLAAAAAGyMzRrUFUWR0047Lbfffnvuv//+9OjRo8H6Hj16pEuXLpk4cWKlbfny5Zk0aVL222+/JEmfPn3SpEmTBjVz587NzJkzKzX9+vVLXV1dHn300UrNI488krq6ugY1M2fOzNy5cys1EyZMSHV1dfr06bPpTx4AAAAA3qLx5jz4qaeeml/84hf51a9+ldatW1dmtNXU1KR58+apqqrK6NGjc9FFF2WnnXbKTjvtlIsuuigtWrTI0KFDK7UnnXRSzjzzzLRv3z7t2rXLWWedld122y2HHnpokmSXXXbJ4YcfnpEjR+aaa65Jknz5y1/OoEGD0rNnzyTJgAED0qtXrwwbNiyXXnppFi5cmLPOOisjR440Uw4AAACA991mDequvvrqJMmBBx7YoP26667LiBEjkiRf//rX8/rrr+eUU07JokWL0rdv30yYMCGtW7eu1F9xxRVp3LhxjjvuuLz++us55JBDcv3116dRo0aVmptvvjmjRo2qvB128ODBueqqqyrrGzVqlHHjxuWUU07J/vvvn+bNm2fo0KG57LLL3qezBwAAAID/p6ooimJzd2JLsWTJktTU1KSurs4sPAAANquqC9/55WubSnG+XycAYF02JicqxcskAAAAAGBrJ6gDAAAAgBIQ1AEAAABACQjqAAAAAKAEBHUAAAAAUAKCOgAAAAAoAUEdAAAAAJSAoA4AAAAASkBQBwAAAAAlIKgDAAAAgBIQ1AEAAABACQjqAAAAAKAEBHUAAAAAUAKCOgAAAAAoAUEdAAAAAJSAoA4AAAAASkBQBwAAAAAlIKgDAAAAgBIQ1AEAAABACQjqAAAAAKAEBHUAAAAAUAKCOgAAAAAoAUEdAAAAAJSAoA4AAAAASkBQBwAAAAAlIKgDAAAAgBIQ1AEAAABACQjqAAAAAKAEBHUAAAAAUAKCOgAAAAAoAUEdAAAAAJSAoA4AAAAASkBQBwAAAAAlIKgDAAAAgBIQ1AEAAABACQjqAAAAAKAEBHUAAAAAUAKCOgAAAAAoAUEdAAAAAJSAoA4AAAAASkBQBwAAAAAlIKgDAAAAgBIQ1AEAAABACQjqAAAAAKAEBHUAAAAAUAKCOgAAAAAoAUEdAAAAAJSAoA4AAAAASkBQBwAAAAAlsFFB3Uc+8pEsWLBgrfbFixfnIx/5yD/dKQAAAADY2mxUUPfCCy9k1apVa7XX19fn73//+z/dKQAAAADY2jR+L8V33XVX5c+//e1vU1NTU/m8atWq3Hfffdlxxx03WecAAAAAYGvxnoK6IUOGJEmqqqoyfPjwBuuaNGmSHXfcMd/73vc2WecAAAAAYGvxnoK61atXJ0l69OiRxx57LB06dHhfOgUAAAAAW5v3FNStMWvWrE3dDwAAAADYqm1UUJck9913X+67777Mnz+/MtNujZ/97Gf/dMcAAAAAYGuyUUHdhRdemG9961vZe++907Vr11RVVW3qfgEAAADAVmWjgrof//jHuf766zNs2LBN3R8AAAAA2CptszEbLV++PPvtt9+m7gsAAAAAbLU2Kqj70pe+lF/84hebui8AAAAAsNXaqFtf33jjjfzkJz/Jvffem9133z1NmjRpsP7yyy/fJJ0DAAAAgK3FRgV1Tz75ZPbcc88kycyZMxus82IJAAAAAHjvNiqoe+CBBzZ1PwAAAABgq7ZRz6gDAAAAADatjZpRd9BBB73jLa7333//RncIAAAAALZGGzWjbs8998wee+xRWXr16pXly5fn97//fXbbbbcN3s/vfve7HH300amtrU1VVVXuvPPOButHjBiRqqqqBsu+++7boKa+vj6nn356OnTokJYtW2bw4MF58cUXG9QsWrQow4YNS01NTWpqajJs2LAsXry4Qc3s2bNz9NFHp2XLlunQoUNGjRqV5cuXv6fvBQAAAAA21kbNqLviiivW2X7BBRfktdde2+D9LFu2LHvssUe++MUv5l//9V/XWXP44Yfnuuuuq3xu2rRpg/WjR4/O3XffnbFjx6Z9+/Y588wzM2jQoEyfPj2NGjVKkgwdOjQvvvhixo8fnyT58pe/nGHDhuXuu+9OkqxatSpHHXVUOnbsmMmTJ2fBggUZPnx4iqLID37wgw0+HwAAAADYWFVFURSbamfPP/98PvGJT2ThwoXvvSNVVbnjjjsyZMiQStuIESOyePHitWbarVFXV5eOHTvmpptuyvHHH58keemll9KtW7fcc889GThwYJ555pn06tUr06ZNS9++fZMk06ZNS79+/fLss8+mZ8+e+c1vfpNBgwZlzpw5qa2tTZKMHTs2I0aMyPz589OmTZsNOoclS5akpqYmdXV1G7wNAAC8H6ouXP+jajal4vxN9usEAGxRNiYn2qQvk5g6dWqaNWu2KXeZBx98MJ06dcrOO++ckSNHZv78+ZV106dPz4oVKzJgwIBKW21tbXr37p0pU6ZU+lRTU1MJ6ZJk3333TU1NTYOa3r17V0K6JBk4cGDq6+szffr0TXo+AAAAALAuG3Xr67HHHtvgc1EUmTt3bh5//PF885vf3CQdS5Ijjjgin/3sZ9O9e/fMmjUr3/zmN3PwwQdn+vTpqa6uzrx589K0adO0bdu2wXadO3fOvHnzkiTz5s1Lp06d1tp3p06dGtR07ty5wfq2bdumadOmlZp1qa+vT319feXzkiVLNvpcAQAAANi6bVRQV1NT0+DzNttsk549e+Zb3/pWg9lt/6w1t7MmSe/evbP33nune/fuGTdu3Fph4VsVRdHgrbTrekPtxtS83ZgxY3LhhRe+63kAAAAAwLvZqKDurS93+CB17do13bt3z3PPPZck6dKlS5YvX55FixY1mFU3f/787LfffpWal19+ea19vfLKK5VZdF26dMkjjzzSYP2iRYuyYsWKtWbavdU555yTM844o/J5yZIl6dat28afIAAAAABbrX/qGXXTp0/Pz3/+89x888154oknNlWf1mvBggWZM2dOunbtmiTp06dPmjRpkokTJ1Zq5s6dm5kzZ1aCun79+qWuri6PPvpopeaRRx5JXV1dg5qZM2dm7ty5lZoJEyakuro6ffr0WW9/qqur06ZNmwYLAAAAAGyMjZpRN3/+/Hzuc5/Lgw8+mG233TZFUaSuri4HHXRQxo4dm44dO27Qfl577bU8//zzlc+zZs3KjBkz0q5du7Rr1y4XXHBB/vVf/zVdu3bNCy+8kHPPPTcdOnTIpz/96SRv3oJ70kkn5cwzz0z79u3Trl27nHXWWdltt91y6KGHJkl22WWXHH744Rk5cmSuueaaJMmXv/zlDBo0KD179kySDBgwIL169cqwYcNy6aWXZuHChTnrrLMycuRI4RsAAAAAH4iNmlF3+umnZ8mSJXn66aezcOHCLFq0KDNnzsySJUsyatSoDd7P448/nr322it77bVXkuSMM87IXnvtlfPOOy+NGjXKU089lWOOOSY777xzhg8fnp133jlTp05N69atK/u44oorMmTIkBx33HHZf//906JFi9x9991p1KhRpebmm2/ObrvtlgEDBmTAgAHZfffdc9NNN1XWN2rUKOPGjUuzZs2y//7757jjjsuQIUNy2WWXbczXAwAAAADvWVVRFMV73aimpib33ntv9tlnnwbtjz76aAYMGJDFixdvqv59qCxZsiQ1NTWpq6szEw8AgM2q6sL1vxRtUyrOf8+/TgDAVmFjcqKNmlG3evXqNGnSZK32Jk2aZPXq1RuzSwAAAADYqm1UUHfwwQfna1/7Wl566aVK29///vf8+7//ew455JBN1jkAAAAA2FpsVFB31VVXZenSpdlxxx3z0Y9+NP/yL/+SHj16ZOnSpfnBD36wqfsIAAAAAFu8jXrra7du3fL73/8+EydOzLPPPpuiKNKrV6/Km1YBAAAAgPfmPc2ou//++9OrV68sWbIkSXLYYYfl9NNPz6hRo7LPPvtk1113zUMPPfS+dBQAAAAAtmTvKaj7/ve/n5EjR67zTRU1NTU5+eSTc/nll2+yzgEAAADA1uI9BXV/+MMfcvjhh693/YABAzJ9+vR/ulMAAAAAsLV5T0Hdyy+/nCZNmqx3fePGjfPKK6/8050CAAAAgK3Newrqtttuuzz11FPrXf/kk0+ma9eu/3SnAAAAAGBr856CuiOPPDLnnXde3njjjbXWvf766zn//PMzaNCgTdY5AAAAANhaVBVFUWxo8csvv5yPf/zjadSoUU477bT07NkzVVVVeeaZZ/LDH/4wq1atyu9///t07tz5/exzaS1ZsiQ1NTWpq6tb5ws3AADgg1J1YdUHcpzi/A3+dQIAtiobkxM1fi8H6Ny5c6ZMmZKvfvWrOeecc7Im46uqqsrAgQPzox/9aKsN6QAAAADgn/Gegrok6d69e+65554sWrQozz//fIqiyE477ZS2bdu+H/0DAAAAgK3Cew7q1mjbtm322WefTdkXAAAAANhqvaeXSQAAAAAA7w9BHQAAAACUgKAOAAAAAEpAUAcAAAAAJSCoAwAAAIASENQBAAAAQAkI6gAAAACgBAR1AAAAAFACgjoAAAAAKAFBHQAAAACUgKAOAAAAAEpAUAcAAAAAJSCoAwAAAIASENQBAAAAQAkI6gAAAACgBAR1AAAAAFACgjoAAAAAKAFBHQAAAACUgKAOAAAAAEpAUAcAAAAAJSCoAwAAAIASENQBAAAAQAkI6gAAAACgBAR1AAAAAFACgjoAAAAAKAFBHQAAAACUgKAOAAAAAEpAUAcAAAAAJSCoAwAAAIASENQBAAAAQAkI6gAAAACgBAR1AAAAAFACgjoAAAAAKAFBHQAAAACUgKAOAAAAAEpAUAcAAAAAJSCoAwAAAIASENQBAAAAQAkI6gAAAACgBAR1AAAAAFACgjoAAAAAKAFBHQAAAACUgKAOAAAAAEpAUAcAAAAAJSCoAwAAAIASENQBAAAAQAkI6gAAAACgBAR1AAAAAFACgjoAAAAAKAFBHQAAAACUgKAOAAAAAEpgswZ1v/vd73L00UentrY2VVVVufPOOxusL4oiF1xwQWpra9O8efMceOCBefrppxvU1NfX5/TTT0+HDh3SsmXLDB48OC+++GKDmkWLFmXYsGGpqalJTU1Nhg0blsWLFzeomT17do4++ui0bNkyHTp0yKhRo7J8+fL347QBAAAAYC2bNahbtmxZ9thjj1x11VXrXH/JJZfk8ssvz1VXXZXHHnssXbp0yWGHHZalS5dWakaPHp077rgjY8eOzeTJk/Paa69l0KBBWbVqVaVm6NChmTFjRsaPH5/x48dnxowZGTZsWGX9qlWrctRRR2XZsmWZPHlyxo4dm9tuuy1nnnnm+3fyAAAAAPAWVUVRFJu7E0lSVVWVO+64I0OGDEny5my62trajB49OmeffXaSN2fPde7cORdffHFOPvnk1NXVpWPHjrnpppty/PHHJ0leeumldOvWLffcc08GDhyYZ555Jr169cq0adPSt2/fJMm0adPSr1+/PPvss+nZs2d+85vfZNCgQZkzZ05qa2uTJGPHjs2IESMyf/78tGnTZoPOYcmSJampqUldXd0GbwMAAO+HqgurPpDjFOeX4tcJACidjcmJSvuMulmzZmXevHkZMGBApa26ujr9+/fPlClTkiTTp0/PihUrGtTU1tamd+/elZqpU6empqamEtIlyb777puampoGNb17966EdEkycODA1NfXZ/r06e/reQIAAABAkjTe3B1Yn3nz5iVJOnfu3KC9c+fO+dvf/lapadq0adq2bbtWzZrt582bl06dOq21/06dOjWoeftx2rZtm6ZNm1Zq1qW+vj719fWVz0uWLNnQ0wMAAACABko7o26NqqqGU/aLolir7e3eXrOu+o2pebsxY8ZUXlBRU1OTbt26vWO/AAAAAGB9ShvUdenSJUnWmtE2f/78yuy3Ll26ZPny5Vm0aNE71rz88str7f+VV15pUPP24yxatCgrVqxYa6bdW51zzjmpq6urLHPmzHmPZwkAAAAAbyptUNejR4906dIlEydOrLQtX748kyZNyn777Zck6dOnT5o0adKgZu7cuZk5c2alpl+/fqmrq8ujjz5aqXnkkUdSV1fXoGbmzJmZO3dupWbChAmprq5Onz591tvH6urqtGnTpsECAAAAABtjsz6j7rXXXsvzzz9f+Txr1qzMmDEj7dq1yw477JDRo0fnoosuyk477ZSddtopF110UVq0aJGhQ4cmSWpqanLSSSflzDPPTPv27dOuXbucddZZ2W233XLooYcmSXbZZZccfvjhGTlyZK655pokyZe//OUMGjQoPXv2TJIMGDAgvXr1yrBhw3LppZdm4cKFOeusszJy5EjhGwAAAAAfiM0a1D3++OM56KCDKp/POOOMJMnw4cNz/fXX5+tf/3pef/31nHLKKVm0aFH69u2bCRMmpHXr1pVtrrjiijRu3DjHHXdcXn/99RxyyCG5/vrr06hRo0rNzTffnFGjRlXeDjt48OBcddVVlfWNGjXKuHHjcsopp2T//fdP8+bNM3To0Fx22WXv91cAAAAAAEmSqqIois3diS3F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S7Ah43nevHlp2rRp2rZtu94aKLMjjjgiN998c+6///5873vfy2OPPZaDDz449fX1SYxxPhyKosgZZ5yRAw44IL17907iGs6WY13jO3H95sPtqaeeSqtWrVJdXZ2vfOUrueOOO9KrV68P/Nrd+J84B7YQVVVVDT4XRbFWG5TdEUccUfnzbrvtln79+uWjH/1obrjhhsoDbI11tiQbM56NeT4sjj/++Mqfe/funb333jvdu3fPuHHjcuyxx653O2OcMjnttNPy5JNPZvLkyWutcw3nw25949v1mw+znj17ZsaMGVm8eHFuu+22DB8+PJMmTaqs/6Cu3WbUbcU6dOiQRo0arZXuzp8/f62kGD5sWrZsmd122y3PPfdc5e2vxjpbgg0Zz126dMny5cuzaNGi9dbAh0nXrl3TvXv3PPfcc0mMccrv9NNPz1133ZUHHngg22+/faXdNZwtwfrG97q4fvNh0rRp0/zLv/xL9t5774wZMyZ77LFHrrzyyg/82i2o24o1bdo0ffr0ycSJExu0T5w4Mfvtt99m6hVsGvX19XnmmWfStWvX9OjRI126dGkw1pcvX55JkyYZ63zobMh47tOnT5o0adKgZu7cuZk5c6Yxz4fSggULMmfOnHTt2jWJMU55FUWR0047Lbfffnvuv//+9OjRo8F613A+zN5tfK+L6zcfZkVRpL6+/oO/dm/kyy/YQowdO7Zo0qRJce211xZ//OMfi9GjRxctW7YsXnjhhc3dNXhPzjzzzOLBBx8s/vrXvxbTpk0rBg0aVLRu3boylr/73e8WNTU1xe2331489dRTxQknnFB07dq1WLJkyWbuOaxt6dKlxRNPPFE88cQTRZLi8ssvL5544onib3/7W1EUGzaev/KVrxTbb799ce+99xa///3vi4MPPrjYY489ipUrV26u04KKdxrjS5cuLc4888xiypQpxaxZs4oHHnig6NevX7HddtsZ45TeV7/61aKmpqZ48MEHi7lz51aWf/zjH5Ua13A+rN5tfLt+82F2zjnnFL/73e+KWbNmFU8++WRx7rnnFttss00xYcKEoig+2Gu3oI7ihz/8YdG9e/eiadOmxcc//vEGr9eGD4vjjz++6Nq1a9GkSZOitra2OPbYY4unn366sn716tXF+eefX3Tp0qWorq4uPvWpTxVPPfXUZuwxrN8DDzxQJFlrGT58eFEUGzaeX3/99eK0004r2rVrVzRv3rwYNGhQMXv27M1wNrC2dxrj//jHP4oBAwYUHTt2LJo0aVLssMMOxfDhw9cav8Y4ZbSucZ2kuO666yo1ruF8WL3b+Hb95sPsxBNPrOQiHTt2LA455JBKSFcUH+y1u6ooiuK9zcEDAAAAADY1z6gDAAAAgBIQ1AEAAABACQjqAAAAAKAEBHUAAAAAUAKCOgAAAAAoAUEdAAAAAJSAoA4AAAAASkBQBwAAAAAlIKgDAGCdRowYkSFDhmzUtp/61Kfyi1/84p/uQ1VVVe68885/ej8bo76+PjvssEOmT5++WY4PAGx9BHUAAJvRPxOGbSovvPBCqqqqMmPGjE2yv1//+teZN29ePve5z1XaNmfgtrGqq6tz1lln5eyzz97cXQEAthKCOgAANqn/+q//yhe/+MVss82H/5+an//85/PQQw/lmWee2dxdAQC2Ah/+fz0BAGzB/vjHP+bII49Mq1at0rlz5wwbNiyvvvpqZf2BBx6YUaNG5etf/3ratWuXLl265IILLmiwj2effTYHHHBAmjVrll69euXee+9tMMOtR48eSZK99torVVVVOfDAAxtsf9lll6Vr165p3759Tj311KxYsWK9/X311Vdz7733ZvDgwZW2HXfcMUny6U9/OlVVVZXPSXL11Vfnox/9aJo2bZqePXvmpptuesfv41vf+lY6d+5cmf03ZcqUfOpTn0rz5s3TrVu3jBo1KsuWLWtw7IsuuignnnhiWrdunR122CE/+clPKuuXL1+e0047LV27dk2zZs2y4447ZsyYMZX17du3z3777ZdbbrnlHfsFALApCOoAAEpq7ty56d+/f/bcc888/vjjGT9+fF5++eUcd9xxDepuuOGGtGzZMo888kguueSSfOtb38rEiROTJKtXr86QIUPSokWLPPLII/nJT36Sb3zjGw22f/TRR5Mk9957b+bOnZvbb7+9su6BBx7IX/7ylzzwwAO54YYbcv311+f6669fb58nT56cFi1aZJdddqm0PfbYY0mS6667LnPnzq18vuOOO/K1r30tZ555ZmbOnJmTTz45X/ziF/PAAw+std+iKPK1r30t1157bSZPnpw999wzTz31VAYOHJhjjz02Tz75ZG699dZMnjw5p512WoNtv/e972XvvffOE088kVNOOSVf/epX8+yzzyZ5c/bfXXfdlV/+8pf505/+lJ///OcNgsQk+cQnPpGHHnpovecMALCpNN7cHQAAYN2uvvrqfPzjH89FF11UafvZz36Wbt265c9//nN23nnnJMnuu++e888/P0my00475aqrrsp9992Xww47LBMmTMhf/vKXPPjgg+nSpUuS5P/7//6/HHbYYZV9duzYMcmbs8fW1KzRtm3bXHXVVWnUqFE+9rGP5aijjsp9992XkSNHrrPPL7zwQjp37tzgttc1+992220b7P+yyy7LiBEjcsoppyRJzjjjjEybNi2XXXZZDjrooErdypUr84UvfCGPP/54Hn744Wy//fZJkksvvTRDhw7N6NGjK+f+X//1X+nfv3+uvvrqNGvWLEly5JFHVo5x9tln54orrsiDDz6Yj33sY5k9e3Z22mmnHHDAAamqqkr37t3XOqftttsuL7zwwjrPFwBgUzKjDgCgpKZPn54HHnggrVq1qiwf+9jHkiR/+ctfKnW77757g+26du2a+fPnJ0n+9Kc/pVu3bg0Csk984hMb3Iddd901jRo1Wue+1+X111+vBGTv5plnnsn+++/foG3//fdf63lw//7v/56pU6fmoYceqoR0yZvfz/XXX9/g+xk4cGBWr16dWbNmVere+v1UVVWlS5culXMYMWJEZsyYkZ49e2bUqFGZMGHCWv1s3rx5/vGPf2zQOQEA/DPMqAMAKKnVq1fn6KOPzsUXX7zWuq5du1b+3KRJkwbrqqqqsnr16iRv3jJaVVW10X14p32vS4cOHbJo0aIN3v/b+7au/h522GG55ZZb8tvf/jaf//znK+2rV6/OySefnFGjRq213x122GGDzuHjH/94Zs2ald/85je59957c9xxx+XQQw/N//7v/1bqFy5cWJkVCADwfhLUAQCU1Mc//vHcdttt2XHHHdO48cb9s23N7Z0vv/xyOnfunOT/PTNujaZNmyZJVq1a9c91OG++kGLevHlZtGhR2rZtW2lv0qTJWvvfZZddMnny5HzhC1+otE2ZMqXB8+2SZPDgwTn66KMzdOjQNGrUKJ/73OeSvPn9PP300/mXf/mXf6rPbdq0yfHHH5/jjz8+n/nMZ3L44Ydn4cKFadeuXZJk5syZ2Wuvvf6pYwAAbAi3vgIAbGZ1dXWZMWNGg2X27Nk59dRTs3Dhwpxwwgl59NFH89e//jUTJkzIiSeeuMGh2mGHHZaPfvSjGT58eJ588sk8/PDDlZdJrJm51qlTpzRv3rzysoq6urqNPpe99torHTt2zMMPP9ygfccdd8x9991XCfGS5P/8n/+T66+/Pj/+8Y/z3HPP5fLLL8/tt9+es846a639fvrTn85NN92UL37xi5XZbmeffXamTp2aU089NTNmzMhzzz2Xu+66K6effvoG9/eKK67I2LFj8+yzz+bPf/5z/ud//iddunTJtttuW6l56KGHMmDAgI34NgAA3htBHQDAZvbggw9mr732arCcd955qa2tzcMPP5xVq1Zl4MCB6d27d772ta+lpqamwcsa3kmjRo1y55135rXXXss+++yTL33pS/nP//zPJKk8S65x48b5r//6r1xzzTWpra3NMcccs9Hn0qhRo5x44om5+eabG7R/73vfy8SJE9OtW7fK7LQhQ4bkyiuvzKWXXppdd90111xzTa677roceOCB69z3Zz7zmdxwww0ZNmxYbr/99uy+++6ZNGlSnnvuuXzyk5/MXnvtlW9+85sNbgt+N61atcrFF1+cvffeO/vss09eeOGF3HPPPZXvd+rUqamrq8tnPvOZjftCAADeg6qiKIrN3QkAAD44Dz/8cA444IA8//zz+ehHP7rJ9//yyy9n1113zfTp09f5FtUPk89+9rPZa6+9cu65527urgAAWwHPqAMA2MLdcccdadWqVXbaaac8//zz+drXvpb999//fQnpkqRz58659tprM3v27A91UFdfX5899tgj//7v/765uwIAbCXMqAMA2MLdeOON+fa3v505c+akQ4cOOfTQQ/O9730v7du339xdAwDgLQR1AAAAAFACXiYBAAAAACUgqAMAAACAEhDUAQAAAEAJCOoAAAAAoAQEdQAAAABQAoI6AAAAACgBQR0AAAAAlICgDgAAAABKQFAHAAAAACXw/wNe/w6hkkeHQAAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Plot the distribution of token counts\n", "\n", "tokens = [item.token_count for item in items]\n", "plt.figure(figsize=(15, 6))\n", "plt.title(f\"Token counts: Avg {sum(tokens)/len(tokens):,.1f} and highest {max(tokens):,}\\n\")\n", "plt.xlabel('Length (tokens)')\n", "plt.ylabel('Count')\n", "plt.hist(tokens, rwidth=0.7, color=\"green\", bins=range(0, 300, 10))\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 29, "id": "8d1744aa-71e7-435e-876e-91f06583211a", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABOIAAAIzCAYAAACtNLb2AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABasklEQVR4nO3de5hXZb03/vfEYQSEUU4zkKhUiAcwTQ2w3KAoaiGWlRZFujUPYSo7fTSzNuBWUCq1JI9bxTyE7r3V+pWieKIMUSTJQ2a2RdNkQAsGVBwQ1u8PH75P46AC6hrA1+u6vtfl3Ouz1vqs4Z7vbr+ve61VVRRFEQAAAADgffWhlm4AAAAAAD4IBHEAAAAAUAJBHAAAAACUQBAHAAAAACUQxAEAAABACQRxAAAAAFACQRwAAAAAlEAQBwAAAAAlEMQBAAAAQAkEcQCwAZoyZUqqqqoqn9atW2errbbKv/7rv+Zvf/vbWh3jiCOOyLbbbvv+Nvo++cQnPpGqqqr88Ic/bLEe7rvvvnzjG9/Ibrvtlurq6lRVVeWZZ555y/oLL7ww22+/faqrq9O7d++MHz8+K1asaFa3cOHCHHHEEenatWvat2+fQYMG5a677lqrnh5//PGMHj06gwYNSocOHVJVVZV77713Pa/w/fPMM8+kqqoqU6ZMedu61fP8oYceesdjDhkyJEOGDFmvfo444ohsvvnm67Xv+nr11Vczbty4dfr3ueCCC3LIIYekd+/eqaqqetvrfTfzKEluv/32fOpTn0q7du1SU1OTgw46KI8//vgaa1955ZX8+7//e7bbbrtUV1enS5cu2XvvvfPUU081qVuxYkXGjx+fbbfdNtXV1dl+++1z4YUXrnVPyRt/d5/5zGey5ZZbpl27dunTp0/+4z/+o1nNuvxtAsCGRBAHABuwq666Kvfff3+mT5+eo48+Oj//+c+z11575ZVXXnnHfb///e/n5ptvLqHL99bcuXPz8MMPJ0muuOKKFuvjrrvuyp133pmtt946e+6559vWnn322TnppJNyyCGH5Pbbb8/o0aMzYcKEHH/88U3qGhsbM3To0Nx111358Y9/nF/84hepra3NAQcckBkzZrxjTw899FBuueWWdO7cOUOHDn1X17exueiii3LRRRe1dBtr7dVXX8348ePXKYi75JJL8uyzz2afffZJt27d3rLu3c6jX/ziFznwwAPTvXv3/M///E8uueSSPPXUU9lrr73yv//7v01qX3755QwZMiRXXHFFTjjhhNxxxx256qqrMmDAgLz66qtNakePHp2JEyfm+OOPz+23357Pf/7zOemkkzJhwoS1uv7rr78+gwcPTk1NTX72s5/l1ltvzWmnnZaiKJrUrcvfJgBscAoAYINz1VVXFUmK2bNnNxn//ve/XyQprr322rfc95VXXnm/23tfHX/88UWS4rOf/WyRpPjd737XIn2sXLmy8t8/+MEPiiTFvHnzmtW99NJLxWabbVYcc8wxTcbPPvvsoqqqqnj88ccrYz/96U+LJMXMmTMrYytWrCh23HHH4pOf/OQ69fRf//VfRZLinnvuWYerKse8efOKJMVVV131tnVvNc/fa4cffnjRoUOH9/Ucb/biiy8WSYqxY8eu9T7//O+70047FYMHD15j3budR3379i123nnnYtWqVZWxZ555pmjbtm0xcuTIJrUnnXRS0aFDh+J///d/3/aYjz32WFFVVVVMmDChyfjRRx9dtGvXrvj73//+tvs///zzRYcOHYpvfvOb79j/2v5tAsCGyIo4ANiIDBw4MEny7LPPJvl/t9w9+uijGTZsWDp27FhZKbWmW1NXrVqVCy+8MLvsskvatWuXLbbYIgMHDswvf/nLJnU33HBD5fbHzTffPPvvv39lldpqTz/9dL785S+nZ8+eqa6uTm1tbYYOHZq5c+eu9/W99tpruf7667Pbbrvl/PPPT5JceeWVle233HJLqqqq1ngL3sUXX5yqqqo88sgjlbHLL7+8cjvdjjvumOuvv36tb9n90IfW7n8mTZs2La+99lr+9V//tcn4v/7rv6Yoitxyyy2VsZtvvjl9+/bNoEGDKmOtW7fO1772tTz44IPveNvx2vb0Vm644YYMGzYsPXr0SLt27bLDDjvkO9/5TrMVlqvn1V/+8pd85jOfyeabb55evXrl5JNPTmNjY5PaF154IYceemg6duyYmpqaHHbYYamvr1+nvpYuXZpvfvOb6dq1a7p06ZJDDjkkL7zwQpOaNd2a+vzzz+eLX/xiOnbsmC222CJf/epXM3v27Le8LXZtrmf58uU566yzKrcZd+vWLf/6r/+aF198sUnd3XffnSFDhqRLly5p165dtt5663zhC1/Iq6++mmeeeaayom38+PGVW8yPOOKIt/09rO2/77uZR3//+9/z5JNP5sADD0xVVVVlfJtttkm/fv1yyy23ZOXKlUneWNX3n//5n/nSl76Uj3zkI2/b0y233JKiKNb4d7Bs2bJMmzbtbff/z//8z7zyyis57bTT3rYuefd/BwDQkvxfMQDYiPzlL39Jkia3rS1fvjwjRozIPvvsk1/84hcZP378W+5/xBFH5KSTTsoee+yRG264IVOnTs2IESOaPF9pwoQJ+cpXvpIdd9wxN954Y6655posXbo0e+21V/74xz9W6j7zmc9kzpw5mTRpUqZPn56LL744u+66axYvXlypWf0MsHd6VthqN910UxYtWpQjjzwyffr0yac//enccMMNefnll5Mkw4cPT/fu3XPVVVc123fKlCn5xCc+kZ133jlJctlll+WYY47JzjvvnJtuuinf+9731vlWwbXx2GOPJUn69+/fZLxHjx7p2rVrZfvq2tX9/bPVY2/1jK73ylNPPZXPfOYzueKKKzJt2rSMGTMmN954Yw466KBmtStWrMiIESMydOjQ/OIXv8iRRx6Z888/P+eee26lZtmyZdl3331zxx13ZOLEifmv//qv1NXV5bDDDlunvr7xjW+kTZs2uf766zNp0qTce++9+drXvva2+7zyyivZe++9c8899+Tcc8/NjTfemNra2rc899pcz6pVq3LwwQfnnHPOyciRI/PrX/8655xzTqZPn54hQ4Zk2bJlSd54Bt5nP/vZtG3bNldeeWWmTZuWc845Jx06dMjy5cvTo0ePSvB01FFH5f7778/999+f73//++v0e3kr72YeLV++PElSXV3dbFt1dXVeffXVyu2pc+bMySuvvJI+ffrkm9/8Zrbccsu0bds2u+++e379618366lbt26pq6tbY0///HewJr/5zW/SuXPn/OlPf8ouu+yS1q1bp3v37jnuuOOyZMmSt90XADYqLb0kDwBobvUte7NmzSpWrFhRLF26tPjVr35VdOvWrejYsWNRX19fFMUbt9wlKa688spmxzj88MOLbbbZpvLzb37zmyJJccYZZ7zlef/6178WrVu3Lk444YQm40uXLi3q6uqKQw89tCiKN27HTFJccMEFb3sdV199ddGqVavi6quvXqvr3meffYrNNtusWLRoUVEU/+/3cMUVV1Rqvv3tbxft2rUrFi9eXBn74x//WCQpLrzwwqIo3rh1ra6urhgwYECT4z/77LNFmzZtmvxe1sbb3f529NFHF9XV1Wvcb7vttiuGDRtW+blNmzbFscce26xu5syZRZLi+uuvX+ue3u2tqatWrSpWrFhRzJgxo0hS/OEPf6hsWz2vbrzxxib7fOYznyn69u1b+fniiy8ukhS/+MUvmtQdffTR63Rr6ujRo5uMT5o0qUhSzJ8/vzI2ePDgJrdqrr4987bbbmuy77HHHtvs3Gt7PT//+c+LJMX//M//NKmbPXt2kaS46KKLiqIoiv/+7/8ukhRz5859y2tbn1tT/9nb3Zr6bubRypUri86dOxdDhw5tMr5o0aKiY8eOTW55Xf376NSpU/GpT32q+OUvf1n86le/Kvbee++iqqqqmDZtWmX//fbbr8nv8p+1bdu22a3bb9a3b99is802Kzp27FhMmDChuOeee4pJkyYV7dq1Kz71qU81uY32n7k1FYCNjRVxALABGzhwYNq0aZOOHTtm+PDhqaury2233Zba2tomdV/4whfe8Vi33XZbkjR7gcA/u/322/P666/n61//el5//fXKZ7PNNsvgwYMrq8k6d+6cj370o/nBD36Q8847Lw8//HBWrVrV7Hirj/P1r3/9HfubN29e7rnnnhxyyCHZYostkiRf+tKX0rFjxya3px555JFZtmxZbrjhhsrYVVddlerq6owcOTJJ8uSTT6a+vj6HHnpok3NsvfXW+dSnPvWOvayrf77F7522rUvte+3pp5/OyJEjU1dXl1atWqVNmzYZPHhwkuSJJ55o1subV8rtvPPOlduik+See+5Jx44dM2LEiCZ1q/8d1tab91+9iuqfz/VmM2bMSMeOHXPAAQc0Gf/KV76yxvq1uZ5f/epX2WKLLXLQQQc1mf+77LJL6urqKvN/l112Sdu2bXPMMcfk6quvztNPP73W1/peWd959KEPfSjHH3987rrrrvzHf/xHFi5cmL/85S/52te+Vnn5wupbP1f/Tbdt2za33XZbDjrooHz2s5/Nr371q/To0aPZ20zfzdxetWpVXnvttXz3u9/N6aefniFDhuT//J//k4kTJ+Z3v/vdOr0RFgA2ZII4ANiA/exnP8vs2bPz8MMP54UXXsgjjzzSLEhq3759OnXq9I7HevHFF9OqVatmt479swULFiRJ9thjj7Rp06bJ54YbbshLL72UJJXntO2///6ZNGlSPvGJT6Rbt2458cQTs3Tp0vW61iuvvDJFUeSLX/xiFi9enMWLF1duJ/zd736XP/3pT0mSnXbaKXvssUfl9tSVK1fm2muvzcEHH5zOnTsneeM5WEmaBZZvNfZudOnSJa+99lqzN0gmyT/+8Y9KT6trV/f25rokTWrfay+//HL22muvPPDAAznrrLNy7733Zvbs2bnpppuSpHLb5Wrt27fPZptt1mSsuro6r732WuXnv//972v8fb7dHFuTLl26NDvPmnr6Z2917rf6912b61mwYEEWL16ctm3bNpv/9fX1lfn/0Y9+NHfeeWe6d++e448/Ph/96Efz0Y9+ND/+8Y/X7oLfpXc7j/793/89//Zv/5azzjortbW16dOnT5JUnu/24Q9/uHKeJNlzzz3TsWPHyv7t27fP4MGD8/vf//4de3rllVeyfPnyd+xp9bn233//JuMHHnhgkjQ5FwBszFq3dAMAwFvbYYcdsvvuu79tzdquourWrVtWrlyZ+vr69OjRY401Xbt2TZL893//d7bZZpu3Pd4222yTK664Ikny5z//OTfeeGPGjRuX5cuX55JLLlmrnlZbtWpV5TlyhxxyyBprrrzyykyaNCnJG4HB6NGj88QTT+Tpp5/O/PnzmzwkfvX/U786WPxn6/oigXey+tlwjz76aAYMGNDkPC+99FL69evXpPbRRx9tdozVY/9c+167++6788ILL+Tee++trIJL0uSZfuuqS5cuefDBB5uNv9e/47LOvfplEW/1YoF/DqP22muv7LXXXlm5cmUeeuihXHjhhRkzZkxqa2vz5S9/eb17WBvvdh61bt065513Xs4888zMmzcvXbt2TY8ePbL//vund+/e2WqrrZJkjc+hW60oiiYvTejfv3+mTp2a+vr6JkHs2va08847Z9asWWs8T+IFDQBsOvxfNAD4gFi9suTiiy9+y5r9998/rVu3zv/+7/9m9913X+NnTbbbbrt873vfS//+/ddr5crtt9+e559/Pscff3zuueeeZp+ddtopP/vZz/L6668neeP2w8022yxTpkzJlClT8uEPfzjDhg2rHK9v376pq6vLjTfe2OQ8f/3rXzNz5sx17u/tHHDAAZVe/tnqF1V87nOfq4x9/vOfz5/+9Kc88MADlbHXX3891157bQYMGJCePXu+p739s9WB7Zsf0n/ppZeu9zH33nvvLF26tNlbd6+//vr1PubaGjx4cJYuXVq55Xq1qVOnrvcxhw8fnr///e9ZuXLlGud+3759m+3TqlWrDBgwID/96U+T/L+VW2uzqm99vVfzaPPNN0///v3To0eP/P73v89dd92Vk046qbK9R48eGTRoUH73u981eWHCq6++mhkzZlTe4pwkBx98cKqqqnL11Vc3OceUKVPSrl27ZrcQv9nq2+vf/O956623JkmTcwHAxsyKOAD4gNhrr70yatSonHXWWVmwYEGGDx+e6urqPPzww2nfvn1OOOGEbLvttjnzzDNzxhln5Omnn84BBxyQLbfcMgsWLMiDDz6YDh06ZPz48XnkkUfyrW99K1/60pfSp0+ftG3bNnfffXceeeSRfOc736mc82c/+1mOPPLIXHnllW/7nLgrrrgirVu3zne/+901hgjHHntsTjzxxPz617/OwQcfnC222CKf//znM2XKlCxevDinnHJKkxUzH/rQhzJ+/Pgce+yx+eIXv5gjjzwyixcvzvjx49OjR4+1Wl3z4osvZsaMGUn+36qe2267Ld26dUu3bt0qq8o6d+6c733ve/n+97+fzp07Z9iwYZk9e3bGjRuXb3zjG9lxxx0rxzzyyCPz05/+NF/60pdyzjnnpHv37rnooovy5JNP5s4772xy/qFDh2bGjBmV8DF5IwBZHUysXj00Y8aMvPTSS+nQoUMlbF2TPffcM1tuuWWOO+64jB07Nm3atMl1112XP/zhD+/4u3grX//613P++efn61//es4+++z06dMnt956a26//fb1PubaOvzww3P++efna1/7Ws4666x87GMfy2233VY59/qsoPryl7+c6667Lp/5zGdy0kkn5ZOf/GTatGmT559/Pvfcc08OPvjgfP7zn88ll1ySu+++O5/97Gez9dZb57XXXqs8x3DfffdN8sbquW222Sa/+MUvMnTo0HTu3Dldu3bNtttu+5bnf+ihhypvMF6yZEmKosh///d/J3njdvHVq1TXZR6NGzcu48ePzz333JMhQ4YkSeW25J133jlFUeTBBx/MueeemwMOOCDf+ta3muz/wx/+MHvvvXf233//nHbaaamqqsqPfvSjvPTSS02eEbfTTjvlqKOOytixY9OqVavsscceueOOO3LZZZflrLPOanJr6plnnpkzzzwzd911V+XvaNiwYTnooINy5plnZtWqVRk4cGAeeuihjB8/PsOHD8+nP/3pyv5r+7cJABukFn1VBACwRqvfJjl79uy3rTv88MOLDh06vOW2N78ddOXKlcX5559f9OvXr2jbtm1RU1NTDBo0qPj//r//r0ndLbfcUuy9995Fp06diurq6mKbbbYpvvjFLxZ33nlnURRFsWDBguKII44ott9++6JDhw7F5ptvXuy8887F+eefX7z++uvNruPt3p754osvFm3bti0+97nPvWXNokWLinbt2hUHHXRQZeyOO+4okhRJij//+c9r3O+yyy4rPvaxjxVt27Yttttuu+LKK68sDj744GLXXXd9y3Otds8991SO/+bPmt5m+eMf/7jYbrvtirZt2xZbb711MXbs2GL58uXN6urr64uvf/3rRefOnYvNNtusGDhwYDF9+vRmdYMHDy7e/D/V5s2b95Y9rc2bYGfOnFkMGjSoaN++fdGtW7fiG9/4RvH73/9+jW8ZXdO8Gjt2bLOenn/++eILX/hCsfnmmxcdO3YsvvCFL1Te3rm2b0198zxf/bv/5zfCvvmtqUXxxlt+DznkkCbnvvXWW5u9yXVdrmfFihXFD3/4w+LjH/94sdlmmxWbb755sf322xfHHnts8dRTTxVFURT3339/8fnPf77YZpttiurq6qJLly7F4MGDi1/+8pdNjnXnnXcWu+66a1FdXV0kKQ4//PC3/X2sfrvrmj5v/l2u7Tw6+eSTi6qqquKJJ56ojP3ud78rBgwYUPn77tevX/HDH/5wjfO1KIrit7/9bTF48OCiffv2Rfv27Yt99tmn+N3vftesbvny5cXYsWOLrbfeuvI395Of/KRZ3erf+5vf+Pvqq68Wp512WtGrV6+idevWxdZbb12cfvrpxWuvvdakbl3/NgFgQ1JVFP/3wQsAAJu4xYsXZ7vttsvnPve5XHbZZS3dDu+DCRMm5Hvf+17++te/Vp519kH2yU9+Mttss03+67/+q6VbAQDi1lQAYBNVX1+fs88+O3vvvXe6dOmSZ599Nueff36WLl3a5DlYbLwmT56cJNl+++2zYsWK3H333fnJT36Sr33ta0K4vHF76x/+8Idmz20DAFqOIA4A2CRVV1fnmWeeyejRo/OPf/wj7du3z8CBA3PJJZdkp512aun2eA+0b98+559/fp555pk0NjZm6623zmmnnZbvfe97Ld3aBqFTp05pbGxs6TYAgH/i1lQAAAAAKMG6v04KAAAAAFhngjgAAAAAKIEgDgAAAABKIIgDAAAAgBII4gAAAACgBII4AAAAACiBIA4AAAAASiCIAwAAAIASCOIAAAAAoASCOAAAAAAogSAOAAAAAEogiAMAAACAEgjiAAAAAKAEgjgAAAAAKIEgDgAAAABKIIgDAAAAgBII4gAAAACgBII4AAAAACiBIA4AAAAASiCIAwAAAIASCOIAAAAAoAStW7qBjcWqVavywgsvpGPHjqmqqmrpdgAAAABoIUVRZOnSpenZs2c+9KG1X+cmiFtLL7zwQnr16tXSbQAAAACwgXjuueey1VZbrXW9IG4tdezYMckbv+BOnTq1cDcAAAAAtJQlS5akV69elbxobQni1tLq21E7deokiAMAAABgnR9f5mUNAAAAAFACQRwAAAAAlEAQBwAAAAAlEMQBAAAAQAkEcQAAAABQAkEcAAAAAJRAEAcAAAAAJRDEAQAAAEAJBHEAAAAAUAJBHAAAAACUQBAHAAAAACUQxAEAAABACQRxAAAAAFACQRwAAAAAlEAQBwAAAAAlEMQBAAAAQAlaNIh7/fXX873vfS+9e/dOu3bt8pGPfCRnnnlmVq1aVakpiiLjxo1Lz549065duwwZMiSPP/54k+M0NjbmhBNOSNeuXdOhQ4eMGDEizz//fJOaRYsWZdSoUampqUlNTU1GjRqVxYsXl3GZAAAAANCyQdy5556bSy65JJMnT84TTzyRSZMm5Qc/+EEuvPDCSs2kSZNy3nnnZfLkyZk9e3bq6uqy3377ZenSpZWaMWPG5Oabb87UqVNz33335eWXX87w4cOzcuXKSs3IkSMzd+7cTJs2LdOmTcvcuXMzatSoUq8XAAAAgA+uqqIoipY6+fDhw1NbW5srrriiMvaFL3wh7du3zzXXXJOiKNKzZ8+MGTMmp512WpI3Vr/V1tbm3HPPzbHHHpuGhoZ069Yt11xzTQ477LAkyQsvvJBevXrl1ltvzf77758nnngiO+64Y2bNmpUBAwYkSWbNmpVBgwblT3/6U/r27fuOvS5ZsiQ1NTVpaGhIp06d3offBgAAAAAbg/XNiVq/jz29o09/+tO55JJL8uc//znbbbdd/vCHP+S+++7LBRdckCSZN29e6uvrM2zYsMo+1dXVGTx4cGbOnJljjz02c+bMyYoVK5rU9OzZM/369cvMmTOz//775/77709NTU0lhEuSgQMHpqamJjNnzlxjENfY2JjGxsbKz0uWLHkffgO82fiq8aWcZ2wxtpTzAAAAAKzWokHcaaedloaGhmy//fZp1apVVq5cmbPPPjtf+cpXkiT19fVJktra2ib71dbW5tlnn63UtG3bNltuuWWzmtX719fXp3v37s3O371790rNm02cODHjx5cTCgEAAACw6WvRZ8TdcMMNufbaa3P99dfn97//fa6++ur88Ic/zNVXX92krqqqqsnPRVE0G3uzN9esqf7tjnP66aenoaGh8nnuuefW9rIAAAAAoJkWXRH3f/7P/8l3vvOdfPnLX06S9O/fP88++2wmTpyYww8/PHV1dUneWNHWo0ePyn4LFy6srJKrq6vL8uXLs2jRoiar4hYuXJg999yzUrNgwYJm53/xxRebrbZbrbq6OtXV1e/NhQIAAADwgdeiK+JeffXVfOhDTVto1apVVq1alSTp3bt36urqMn369Mr25cuXZ8aMGZWQbbfddkubNm2a1MyfPz+PPfZYpWbQoEFpaGjIgw8+WKl54IEH0tDQUKkBAAAAgPdTi66IO+igg3L22Wdn6623zk477ZSHH3445513Xo488sgkb9xOOmbMmEyYMCF9+vRJnz59MmHChLRv3z4jR45MktTU1OSoo47KySefnC5duqRz58455ZRT0r9//+y7775Jkh122CEHHHBAjj766Fx66aVJkmOOOSbDhw9fqzemAgAAAMC71aJB3IUXXpjvf//7GT16dBYuXJiePXvm2GOPzb//+79Xak499dQsW7Yso0ePzqJFizJgwIDccccd6dixY6Xm/PPPT+vWrXPooYdm2bJlGTp0aKZMmZJWrVpVaq677rqceOKJlberjhgxIpMnTy7vYgEAAAD4QKsqiqJo6SY2BkuWLElNTU0aGhrSqVOnlm5nkzW+qpw31Y4txpZyHgAAAGDTs745UYs+Iw4AAAAAPigEcQAAAABQAkEcAAAAAJRAEAcAAAAAJRDEAQAAAEAJBHEAAAAAUAJBHAAAAACUQBAHAAAAACUQxAEAAABACQRxAAAAAFACQRwAAAAAlEAQBwAAAAAlEMQBAAAAQAkEcQAAAABQAkEcAAAAAJRAEAcAAAAAJRDEAQAAAEAJBHEAAAAAUAJBHAAAAACUQBAHAAAAACUQxAEAAABACQRxAAAAAFACQRwAAAAAlEAQBwAAAAAlEMQBAAAAQAkEcQAAAABQAkEcAAAAAJRAEAcAAAAAJRDEAQAAAEAJBHEAAAAAUAJBHAAAAACUQBAHAAAAACUQxAEAAABACQRxAAAAAFACQRwAAAAAlEAQBwAAAAAlEMQBAAAAQAkEcQAAAABQAkEcAAAAAJRAEAcAAAAAJRDEAQAAAEAJBHEAAAAAUAJBHAAAAACUQBAHAAAAACVo0SBu2223TVVVVbPP8ccfnyQpiiLjxo1Lz549065duwwZMiSPP/54k2M0NjbmhBNOSNeuXdOhQ4eMGDEizz//fJOaRYsWZdSoUampqUlNTU1GjRqVxYsXl3WZAAAAANCyQdzs2bMzf/78ymf69OlJki996UtJkkmTJuW8887L5MmTM3v27NTV1WW//fbL0qVLK8cYM2ZMbr755kydOjX33XdfXn755QwfPjwrV66s1IwcOTJz587NtGnTMm3atMydOzejRo0q92IBAAAA+ECrKoqiaOkmVhszZkx+9atf5amnnkqS9OzZM2PGjMlpp52W5I3Vb7W1tTn33HNz7LHHpqGhId26dcs111yTww47LEnywgsvpFevXrn11luz//7754knnsiOO+6YWbNmZcCAAUmSWbNmZdCgQfnTn/6Uvn37rlVvS5YsSU1NTRoaGtKpU6f34epJkvFV40s5z9hibCnnAQAAADY965sTbTDPiFu+fHmuvfbaHHnkkamqqsq8efNSX1+fYcOGVWqqq6szePDgzJw5M0kyZ86crFixoklNz549069fv0rN/fffn5qamkoIlyQDBw5MTU1NpWZNGhsbs2TJkiYfAAAAAFhfG0wQd8stt2Tx4sU54ogjkiT19fVJktra2iZ1tbW1lW319fVp27Ztttxyy7et6d69e7Pzde/evVKzJhMnTqw8U66mpia9evVa72sDAAAAgA0miLviiity4IEHpmfPnk3Gq6qqmvxcFEWzsTd7c82a6t/pOKeffnoaGhoqn+eee25tLgMAAAAA1miDCOKeffbZ3HnnnfnGN75RGaurq0uSZqvWFi5cWFklV1dXl+XLl2fRokVvW7NgwYJm53zxxRebrbb7Z9XV1enUqVOTDwAAAACsrw0iiLvqqqvSvXv3fPazn62M9e7dO3V1dZU3qSZvPEduxowZ2XPPPZMku+22W9q0adOkZv78+XnssccqNYMGDUpDQ0MefPDBSs0DDzyQhoaGSg0AAAAAvN9at3QDq1atylVXXZXDDz88rVv/v3aqqqoyZsyYTJgwIX369EmfPn0yYcKEtG/fPiNHjkyS1NTU5KijjsrJJ5+cLl26pHPnzjnllFPSv3//7LvvvkmSHXbYIQcccECOPvroXHrppUmSY445JsOHD1/rN6YCAAAAwLvV4kHcnXfemb/+9a858sgjm2079dRTs2zZsowePTqLFi3KgAEDcscdd6Rjx46VmvPPPz+tW7fOoYcemmXLlmXo0KGZMmVKWrVqVam57rrrcuKJJ1berjpixIhMnjz5/b84AAAAAPi/qoqiKFq6iY3BkiVLUlNTk4aGBs+Lex+NrxpfynnGFmNLOQ8AAACw6VnfnGiDeEYcAAAAAGzqBHEAAAAAUAJBHAAAAACUQBAHAAAAACUQxAEAAABACQRxAAAAAFACQRwAAAAAlEAQBwAAAAAlEMQBAAAAQAkEcQAAAABQAkEcAAAAAJRAEAcAAAAAJRDEAQAAAEAJBHEAAAAAUAJBHAAAAACUQBAHAAAAACUQxAEAAABACQRxAAAAAFACQRwAAAAAlEAQBwAAAAAlEMQBAAAAQAkEcQAAAABQAkEcAAAAAJRAEAcAAAAAJRDEAQAAAEAJBHEAAAAAUAJBHAAAAACUQBAHAAAAACUQxAEAAABACQRxAAAAAFACQRwAAAAAlEAQBwAAAAAlEMQBAAAAQAkEcQAAAABQAkEcAAAAAJRAEAcAAAAAJRDEAQAAAEAJBHEAAAAAUAJBHAAAAACUQBAHAAAAACUQxAEAAABACQRxAAAAAFACQRwAAAAAlEAQBwAAAAAlaPEg7m9/+1u+9rWvpUuXLmnfvn122WWXzJkzp7K9KIqMGzcuPXv2TLt27TJkyJA8/vjjTY7R2NiYE044IV27dk2HDh0yYsSIPP/8801qFi1alFGjRqWmpiY1NTUZNWpUFi9eXMYlAgAAAEDLBnGLFi3Kpz71qbRp0ya33XZb/vjHP+ZHP/pRtthii0rNpEmTct5552Xy5MmZPXt26urqst9++2Xp0qWVmjFjxuTmm2/O1KlTc9999+Xll1/O8OHDs3LlykrNyJEjM3fu3EybNi3Tpk3L3LlzM2rUqDIvFwAAAIAPsKqiKIqWOvl3vvOd/O53v8tvf/vbNW4viiI9e/bMmDFjctpppyV5Y/VbbW1tzj333Bx77LFpaGhIt27dcs011+Swww5Lkrzwwgvp1atXbr311uy///554oknsuOOO2bWrFkZMGBAkmTWrFkZNGhQ/vSnP6Vv377v2OuSJUtSU1OThoaGdOrU6T36DfBm46vGl3KescXYUs4DAAAAbHrWNydq0RVxv/zlL7P77rvnS1/6Urp3755dd901l19+eWX7vHnzUl9fn2HDhlXGqqurM3jw4MycOTNJMmfOnKxYsaJJTc+ePdOvX79Kzf3335+amppKCJckAwcOTE1NTaXmzRobG7NkyZImHwAAAABYXy0axD399NO5+OKL06dPn9x+++057rjjcuKJJ+ZnP/tZkqS+vj5JUltb22S/2trayrb6+vq0bds2W2655dvWdO/evdn5u3fvXql5s4kTJ1aeJ1dTU5NevXq9u4sFAAAA4AOtRYO4VatW5ROf+EQmTJiQXXfdNccee2yOPvroXHzxxU3qqqqqmvxcFEWzsTd7c82a6t/uOKeffnoaGhoqn+eee25tLwsAAAAAmmnRIK5Hjx7Zcccdm4ztsMMO+etf/5okqaurS5Jmq9YWLlxYWSVXV1eX5cuXZ9GiRW9bs2DBgmbnf/HFF5uttluturo6nTp1avIBAAAAgPXVokHcpz71qTz55JNNxv785z9nm222SZL07t07dXV1mT59emX78uXLM2PGjOy5555Jkt122y1t2rRpUjN//vw89thjlZpBgwaloaEhDz74YKXmgQceSENDQ6UGAAAAAN5PrVvy5P/2b/+WPffcMxMmTMihhx6aBx98MJdddlkuu+yyJG/cTjpmzJhMmDAhffr0SZ8+fTJhwoS0b98+I0eOTJLU1NTkqKOOysknn5wuXbqkc+fOOeWUU9K/f//su+++Sd5YZXfAAQfk6KOPzqWXXpokOeaYYzJ8+PC1emMqAAAAALxbLRrE7bHHHrn55ptz+umn58wzz0zv3r1zwQUX5Ktf/Wql5tRTT82yZcsyevToLFq0KAMGDMgdd9yRjh07VmrOP//8tG7dOoceemiWLVuWoUOHZsqUKWnVqlWl5rrrrsuJJ55YebvqiBEjMnny5PIuFgAAAIAPtKqiKIqWbmJjsGTJktTU1KShocHz4t5H46vGl3KescXYUs4DAAAAbHrWNydq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ckmmTJmSUaNGvdf9AAAAAMAm6UPrs9Py5cuz5557vte9AAAAAMAma72CuG984xu5/vrr3+teAAAAAGCTtV63pr722mu57LLLcuedd2bnnXdOmzZtmmw/77zz3pPmAAAAAGBTsV5B3COPPJJddtklSfLYY4812ebFDQAAAADQ3HoFcffcc8973QcAAAAAbNLW6xlxAAAAAMC6Wa8VcXvvvffb3oJ69913r3dDAAAAALApWq8gbvXz4VZbsWJF5s6dm8ceeyyHH374e9EXAAAAAGxS1iuIO//889c4Pm7cuLz88svvqiEAAAAA2BS9p8+I+9rXvpYrr7zyvTwkAAAAAGwS3tMg7v77789mm232Xh4SAAAAADYJ63Vr6iGHHNLk56IoMn/+/Dz00EP5/ve//540BgAAAACbkvUK4mpqapr8/KEPfSh9+/bNmWeemWHDhr0njQEAAADApmS9grirrrrqve4DAAAAADZp6xXErTZnzpw88cQTqaqqyo477phdd931veoLAAAAADYp6xXELVy4MF/+8pdz7733ZosttkhRFGloaMjee++dqVOnplu3bu91nwAAAACwUVuvt6aecMIJWbJkSR5//PH84x//yKJFi/LYY49lyZIlOfHEE9/rHgEAAABgo7deK+KmTZuWO++8MzvssENlbMcdd8xPf/rT9X5Zw8SJE/Pd7343J510Ui644IIkb7yNdfz48bnsssuyaNGiDBgwID/96U+z0047VfZrbGzMKaeckp///OdZtmxZhg4dmosuuihbbbVVpWbRokU58cQT88tf/jJJMmLEiFx44YXZYost1qvXTcn4qvHv+znGFmPf93MAAAAAbOjWa0XcqlWr0qZNm2bjbdq0yapVq9b5eLNnz85ll12WnXfeucn4pEmTct5552Xy5MmZPXt26urqst9++2Xp0qWVmjFjxuTmm2/O1KlTc9999+Xll1/O8OHDs3LlykrNyJEjM3fu3EybNi3Tpk3L3LlzM2rUqHXuEwAAAADW13oFcfvss09OOumkvPDCC5Wxv/3tb/m3f/u3DB06dJ2O9fLLL+erX/1qLr/88my55ZaV8aIocsEFF+SMM87IIYcckn79+uXqq6/Oq6++muuvvz5J0tDQkCuuuCI/+tGPsu+++2bXXXfNtddem0cffTR33nlnkuSJJ57ItGnT8p//+Z8ZNGhQBg0alMsvvzy/+tWv8uSTT67P5QMAAADAOluvIG7y5MlZunRptt1223z0ox/Nxz72sfTu3TtLly7NhRdeuE7HOv744/PZz342++67b5PxefPmpb6+vsmtrtXV1Rk8eHBmzpyZ5I23tq5YsaJJTc+ePdOvX79Kzf3335+ampoMGDCgUjNw4MDU1NRUagAAAADg/bZez4jr1atXfv/732f69On505/+lKIosuOOOzYL097J1KlT8/vf/z6zZ89utq2+vj5JUltb22S8trY2zz77bKWmbdu2TVbSra5ZvX99fX26d+/e7Pjdu3ev1KxJY2NjGhsbKz8vWbJkLa8KAAAAAJpbpxVxd999d3bcccdKKLXffvvlhBNOyIknnpg99tgjO+20U37729+u1bGee+65nHTSSbn22muz2WabvWVdVVVVk5+Lomg29mZvrllT/TsdZ+LEiampqal8evXq9bbnBAAAAIC3s05B3AUXXJCjjz46nTp1aratpqYmxx57bM4777y1OtacOXOycOHC7LbbbmndunVat26dGTNm5Cc/+Ulat25dWQn35lVrCxcurGyrq6vL8uXLs2jRoretWbBgQbPzv/jii81W2/2z008/PQ0NDZXPc889t1bXBQAAAABrsk5B3B/+8IcccMABb7l92LBhmTNnzloda+jQoXn00Uczd+7cymf33XfPV7/61cydOzcf+chHUldXl+nTp1f2Wb58eWbMmJE999wzSbLbbrulTZs2TWrmz5+fxx57rFIzaNCgNDQ05MEHH6zUPPDAA2loaKjUrEl1dXU6derU5AMAAAAA62udnhG3YMGCtGnT5q0P1rp1XnzxxbU6VseOHdOvX78mYx06dEiXLl0q42PGjMmECRPSp0+f9OnTJxMmTEj79u0zcuTIJG+swjvqqKNy8sknp0uXLuncuXNOOeWU9O/fv/K8uh122CEHHHBAjj766Fx66aVJkmOOOSbDhw9P37591+XyAQAAAGC9rVMQ9+EPfziPPvpoPvaxj61x+yOPPJIePXq8J40lyamnnpply5Zl9OjRWbRoUQYMGJA77rgjHTt2rNScf/75ad26dQ499NAsW7YsQ4cOzZQpU9KqVatKzXXXXZcTTzyx8nbVESNGZPLkye9ZnwAAAADwTqqKoijWtviEE07Ivffem9mzZzd7wcKyZcvyyU9+MnvvvXd+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BII4AAAAACiBt6YCfICV8RbXxJtcAQAAEiviAAAAAKAUgjgAAAAAKIEgDgAAAABKIIgDAAAAgBII4gAAAACgBII4AAAAACiBIA4AAAAAStC6pRsAgH82vmp8KecZW4wt5TwAAACrWREHAAAAACUQxAEAAABACdyaCgDvwO2yAADAe8GKOAAAAAAogSAOAAAAAEogiAMAAACAEgjiAAAAAKAEgjgAAAAAKIEgDgAAAABK0LqlGwAA1t34qvGlnGdsMXata8voaV36AQCADY0VcQAAAABQAkEcAAAAAJTArakAwCZpQ7x9FwCADzYr4gAAAACgBFbEAQCUZENcpacnAIDyCOIAAOAdCAc3Tv7dANjQuDUVAAAAAEpgRRwAAGyEyljt5ZZiAHhvCeIAAABgIyP8ho3TByqIu+iii/KDH/wg8+fPz0477ZQLLrgge+21V0u3BQAA0GI2xEBnQ1vxmWyYPQEbnw9MEHfDDTdkzJgxueiii/KpT30ql156aQ488MD88Y9/zNZbb93S7QEAAB8AG2LoBe+VDXF+64kNzQcmiDvvvPNy1FFH5Rvf+EaS5IILLsjtt9+eiy++OBMnTmzh7gAAAABahhWf5flAvDV1+fLlmTNnToYNG9ZkfNiwYZk5c2YLdQUAAADAB8kHYkXcSy+9lJUrV6a2trbJeG1tberr69e4T2NjYxobGys/NzQ0JEmWLFny/jXaAl7La+/7Odbld1ZGP4me1pae1s6G1tOG1k+ip7Wlp3e2ofWT6Glt6WntbGg9bWj9JHpaW3p6Z+v6/9ttaD19UP/dEj2trQ2tp00tT1l9PUVRrNN+VcW67rEReuGFF/LhD384M2fOzKBBgyrjZ599dq655pr86U9/arbPuHHjMn58OfdtAwAAALDxee6557LVVlutdf0HYkVc165d06pVq2ar3xYuXNhsldxqp59+er797W9Xfl61alX+8Y9/pEuXLqmqqnpf+32vLVmyJL169cpzzz2XTp06tXQ78J4yv9mUmd9sysxvNnXmOJsy85tN2drO76IosnTp0vTs2XOdjv+BCOLatm2b3XbbLdOnT8/nP//5yvj06dNz8MEHr3Gf6urqVFdXNxnbYost3s8233edOnXyJckmy/xmU2Z+sykzv9nUmeNsysxvNmVrM79ramrW+bgfiCAuSb797W9n1KhR2X333TNo0KBcdtll+etf/5rjjjuupVsDAAAA4APgAxPEHXbYYfn73/+eM888M/Pnz0+/fv1y6623Zptttmnp1gAAAAD4APjABHFJMnr06IwePbql2yhddXV1xo4d2+xWW9gUmN9sysxvNmXmN5s6c5xNmfnNpuz9nt8fiLemAgAAAEBL+1BLNwAAAAAAHwSCOAAAAAAogSAOAAAAAEogiPsAuOiii9K7d+9sttlm2W233fLb3/62pVuCdTJu3LhUVVU1+dTV1VW2F0WRcePGpWfPnmnXrl2GDBmSxx9/vAU7hrf3m9/8JgcddFB69uyZqqqq3HLLLU22r82cbmxszAknnJCuXbumQ4cOGTFiRJ5//vkSrwLW7J3m9xFHHNHsO33gwIFNasxvNkQTJ07MHnvskY4dO6Z79+753Oc+lyeffLJJje9vNlZrM799f7Mxu/jii7PzzjunU6dO6dSpUwYNGpTbbrutsr3M729B3CbuhhtuyJgxY3LGGWfk4Ycfzl577ZUDDzwwf/3rX1u6NVgnO+20U+bPn1/5PProo5VtkyZNynnnnZfJkydn9uzZqaury3777ZelS5e2YMfw1l555ZV8/OMfz+TJk9e4fW3m9JgxY3LzzTdn6tSpue+++/Lyyy9n+PDhWblyZVmXAWv0TvM7SQ444IAm3+m33nprk+3mNxuiGTNm5Pjjj8+sWbMyffr0vP766xk2bFheeeWVSo3vbzZWazO/E9/fbLy22mqrnHPOOXnooYfy0EMPZZ999snBBx9cCdtK/f4u2KR98pOfLI477rgmY9tvv33xne98p4U6gnU3duzY4uMf//gat61ataqoq6srzjnnnMrYa6+9VtTU1BSXXHJJSR3C+ktS3HzzzZWf12ZOL168uGjTpk0xderUSs3f/va34kMf+lAxbdq00nqHd/Lm+V0URXH44YcXBx988FvuY36zsVi4cGGRpJgxY0ZRFL6/2bS8eX4Xhe9vNj1bbrll8Z//+Z+lf39bEbcJW758eebMmZNhw4Y1GR82bFhmzpzZQl3B+nnqqafSs2fP9O7dO1/+8pfz9NNPJ0nmzZuX+vr6JvO8uro6gwcPNs/ZKK3NnJ4zZ05WrFjRpKZnz57p16+fec9G4d5770337t2z3Xbb5eijj87ChQsr28xvNhYNDQ1Jks6dOyfx/c2m5c3zezXf32wKVq5cmalTp+aVV17JoEGDSv/+FsRtwl566aWsXLkytbW1TcZra2tTX1/fQl3BuhswYEB+9rOf5fbbb8/ll1+e+vr67Lnnnvn73/9emcvmOZuKtZnT9fX1adu2bbbccsu3rIEN1YEHHpjrrrsud999d370ox9l9uzZ2WeffdLY2JjE/GbjUBRFvv3tb+fTn/50+vXrl8T3N5uONc3vxPc3G79HH300m2++eaqrq3Pcccfl5ptvzo477lj693frd3ENbCSqqqqa/FwURbMx2JAdeOCBlf/u379/Bg0alI9+9KO5+uqrKw+INc/Z1KzPnDbv2Rgcdthhlf/u169fdt9992yzzTb59a9/nUMOOeQt9zO/2ZB861vfyiOPPJL77ruv2Tbf32zs3mp++/5mY9e3b9/MnTs3ixcvzv/8z//k8MMPz4wZMyrby/r+tiJuE9a1a9e0atWqWTq7cOHCZkkvbEw6dOiQ/v3756mnnqq8PdU8Z1OxNnO6rq4uy5cvz6JFi96yBjYWPXr0yDbbbJOnnnoqifnNhu+EE07IL3/5y9xzzz3ZaqutKuO+v9kUvNX8XhPf32xs2rZtm4997GPZfffdM3HixHz84x/Pj3/849K/vwVxm7C2bdtmt912y/Tp05uMT58+PXvuuWcLdQXvXmNjY5544on06NEjvXv3Tl1dXZN5vnz58syYMcM8Z6O0NnN6t912S5s2bZrUzJ8/P4899ph5z0bn73//e5577rn06NEjifnNhqsoinzrW9/KTTfdlLvvvju9e/dust33Nxuzd5rfa+L7m41dURRpbGws//t7PV8uwUZi6tSpRZs2bYorrrii+OMf/1iMGTOm6NChQ/HMM8+0dGuw1k4++eTi3nvvLZ5++uli1qxZxfDhw4uOHTtW5vE555xT1NTUFDfddFPx6KOPFl/5yleKHj16FEuWLGnhzmHNli5dWjz88MPFww8/XCQpzjvvvOLhhx8unn322aIo1m5OH3fcccVWW21V3HnnncXvf//7Yp999ik+/vGPF6+//npLXRYURfH283vp0qXFySefXMycObOYN29ecc899xSDBg0qPvzhD5vfbPC++c1vFjU1NcW9995bzJ8/v/J59dVXKzW+v9lYvdP89v3Nxu70008vfvOb3xTz5s0rHnnkkeK73/1u8aEPfai44447iqIo9/tbEPcB8NOf/rTYZpttirZt2xaf+MQnmryCGjYGhx12WNGjR4+iTZs2Rc+ePYtDDjmkePzxxyvbV61aVYwdO7aoq6srqquri3/5l38pHn300RbsGN7ePffcUyRp9jn88MOLoli7Ob1s2bLiW9/6VtG5c+eiXbt2xfDhw4u//vWvLXA10NTbze9XX321GDZsWNGtW7eiTZs2xdZbb10cfvjhzeau+c2GaE3zOklx1VVXVWp8f7Oxeqf57fubjd2RRx5ZyUW6detWDB06tBLCFUW5399VRVEU67aGDgAAAABYV54RBwAAAAAlEMQBAAAAQAkEcQAAAABQAkEcAAAAAJRAEAcAAAAAJRDEAQAAAEAJBHEAAAAAUAJBHAAAAACUQBAHAPABNWTIkIwZM+Z9P8+oUaMyYcKEZuPPPPNMxo0b12y8sbExW2+9debMmfO+9wYAUCZBHADARu6II45IVVVVqqqq0qZNm3zkIx/JKaeckldeeeVt97vpppvyH//xH+9rb4888kh+/etf54QTTljrfaqrq3PKKafktNNOex87AwAonyAOAGATcMABB2T+/Pl5+umnc9ZZZ+Wiiy7KKaecssbaFStWJEk6d+6cjh07vq99TZ48OV/60peanGfevHn5/Oc/n4EDB2bSpEnZfvvtc9xxxzXZ76tf/Wp++9vf5oknnnhf+wMAKJMgDgBgE1BdXZ26urr06tUrI0eOzFe/+tXccsstSZJx48Zll112yZVXXpmPfOQjqa6uTlEUzW5NbWxszKmnnppevXqluro6ffr0yRVXXFHZ/sc//jGf+cxnsvnmm6e2tjajRo3KSy+99JY9rVq1Kv/1X/+VESNGNBn/+te/ngULFuTiiy/OEUcckR//+Mfp0qVLk5ouXbpkzz33zM9//vN3/8sBANhACOIAADZB7dq1q6x8S5K//OUvufHGG/M///M/mTt37hr3+frXv56pU6fmJz/5SZ544olccskl2XzzzZMk8+fPz+DBg7PLLrvkoYceyrRp07JgwYIceuihb9nDI488ksWLF2f33XdvMv7www/n+OOPz6677pru3btn//33z9lnn91s/09+8pP57W9/ux5XDwCwYWrd0g0AAPDeevDBB3P99ddn6NChlbHly5fnmmuuSbdu3da4z5///OfceOONmT59evbdd98kyUc+8pHK9osvvjif+MQnmrx04corr0yvXr3y5z//Odttt12zYz7zzDNp1apVunfv3mT8U5/6VC644IKsWrXqba/jwx/+cJ555pl3vF4AgI2FFXEAAJuAX/3qV9l8882z2WabZdCgQfmXf/mXXHjhhZXt22yzzVuGcEkyd+7ctGrVKoMHD17j9jlz5uSee+7J5ptvXvlsv/32SZL//d//XeM+y5YtS3V1daqqqpqMX3fddRk4cGC++93v5uyzz86gQYPy3//93832b9euXV599dV3vHYAgI2FFXEAAJuAvffeOxdffHHatGmTnj17pk2bNk22d+jQ4W33b9eu3dtuX7VqVQ466KCce+65zbb16NFjjft07do1r776apYvX562bds2Gb/wwgtz8skn55xzzsm2226bww47LLfddluGDRtWqfvHP/7xtuEhAMDGxoo4AIBNQIcOHfKxj30s22yzTbMQbm30798/q1atyowZM9a4/ROf+EQef/zxbLvttvnYxz7W5PNWId8uu+yS5I2XPLyVurq6fOc738kuu+zS7Hlwjz32WHbdddd1vhYAgA2VIA4AgGy77bY5/PDDc+SRR+aWW27JvHnzcu+99+bGG29Mkhx//PH5xz/+ka985St58MEH8/TTT+eOO+7IkUcemZUrV67xmN26dcsnPvGJ3HfffU3GjzrqqDz44IN55ZVX0tjYmJtuuimPP/54dttttyZ1v/3tb5uskAMA2NgJ4gAASPLGCxm++MUvZvTo0dl+++1z9NFH55VXXkmS9OzZM7/73e+ycuXK7L///unXr19OOumk1NTU5EMfeuv/SXnMMcfkuuuuazLWvXv3HHnkkfnkJz+ZH/zgBznllFPyH//xH/nc5z5Xqbn//vvT0NCQL37xi+/LtQIAtISqoiiKlm4CAIBN02uvvZa+fftm6tSpGTRoUJNtzzzzTKZMmZJx48Y12+9LX/pSdt1113z3u98tqVMAgPefFXEAALxvNttss/zsZz/LSy+9tNb7NDY25uMf/3j+7d/+7X3sDACgfFbEAQAAAEAJrIgDAAAAgBII4gAAAACgBII4AAAAACiBIA4AAAAASiCIAwAAAIASCOIAAAAAoASCOAAAAAAogSAOAAAAAEogiAMAAACAEgjiAAAAAKAE/z/lq4KyUy8QRwAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Plot the distribution of prices\n", "\n", "prices = [item.price for item in items]\n", "plt.figure(figsize=(15, 6))\n", "plt.title(f\"Prices: Avg {sum(prices)/len(prices):,.1f} and highest {max(prices):,}\\n\")\n", "plt.xlabel('Price ($)')\n", "plt.ylabel('Count')\n", "plt.hist(prices, rwidth=0.7, color=\"purple\", bins=range(0, 300, 10))\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "2b58dc61-747f-46f7-b9e0-c205db4f3e5e", "metadata": {}, "source": [ "## Sidenote\n", "\n", "If you like the variety of colors that matplotlib can use in its charts, you should bookmark this:\n", "\n", "https://matplotlib.org/stable/gallery/color/named_colors.html\n", "\n", "## Todos for you:\n", "\n", "- Review the Item class and check you're comfortable with it\n", "- Examine some Item objects, look at the training prompt with `item.prompt` and test prompt with `item.test_prompt()`\n", "- Make some more histograms to better understand the data\n", "\n", "## Next time we will combine with many other types of product\n", "\n", "Like Electronics and Automotive. This will give us a massive dataset, and we can then be picky about choosing a subset that will be most suitable for training." ] }, { "cell_type": "code", "execution_count": null, "id": "01401283-d111-40a7-96e5-0ca05bb20857", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.11.10" } }, "nbformat": 4, "nbformat_minor": 5 }