Files
wehub-resource-sync a0c8464e58
Build Package / build (ubuntu-latest) (push) Failing after 1s
CodeQL / Analyze (python) (push) Failing after 1s
Core Typecheck / core-typecheck (push) Failing after 1s
Linting / lint (push) Failing after 1s
llama-dev tests / test-llama-dev (push) Failing after 1s
Publish Sub-Package to PyPI if Needed / publish_subpackage_if_needed (push) Has been skipped
Sync Docs to Developer Hub / sync-docs (push) Failing after 0s
Build Package / build (windows-latest) (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:26:52 +08:00

648 lines
133 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Sub Question Query Engine as a workflow\n",
"\n",
"LlamaIndex has a built-in Sub-Question Query Engine. Here, we replace it with a Workflow-based equivalent."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"First we install our dependencies:\n",
"* LlamaIndex core for most things\n",
"* OpenAI LLM and embeddings for LLM actions\n",
"* `llama-index-readers-file` to power the PDF reader in `SimpleDirectoryReader`"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"!pip install llama-index-core llama-index-llms-openai llama-index-embeddings-openai llama-index-readers-file llama-index-utils-workflow"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Bring in our dependencies as imports:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"import os, json\n",
"from llama_index.core import (\n",
" SimpleDirectoryReader,\n",
" VectorStoreIndex,\n",
" StorageContext,\n",
" load_index_from_storage,\n",
")\n",
"from llama_index.core.tools import QueryEngineTool, ToolMetadata\n",
"from llama_index.core.workflow import (\n",
" step,\n",
" Context,\n",
" Workflow,\n",
" Event,\n",
" StartEvent,\n",
" StopEvent,\n",
")\n",
"from llama_index.core.agent import ReActAgent\n",
"from llama_index.llms.openai import OpenAI\n",
"from llama_index.utils.workflow import draw_all_possible_flows"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Define the Sub Question Query Engine as a Workflow\n",
"\n",
"* Our StartEvent goes to `query()`, which takes care of several things:\n",
" * Accepts and stores the original query\n",
" * Stores the LLM to handle the queries\n",
" * Stores the list of tools to enable sub-questions\n",
" * Passes the original question to the LLM, asking it to split up the question into sub-questions\n",
" * Fires off a `QueryEvent` for every sub-question generated\n",
"\n",
"* QueryEvents go to `sub_question()`, which instantiates a new ReAct agent with the full list of tools available and lets it select which one to use.\n",
" * This is slightly better than the actual SQQE built-in to LlamaIndex, which cannot use multiple tools\n",
" * Each QueryEvent generates an `AnswerEvent`\n",
"\n",
"* AnswerEvents go to `combine_answers()`.\n",
" * This uses `self.collect_events()` to wait for every QueryEvent to return an answer.\n",
" * All the answers are then combined into a final prompt for the LLM to consolidate them into a single response\n",
" * A StopEvent is generated to return the final result"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"class QueryEvent(Event):\n",
" question: str\n",
"\n",
"\n",
"class AnswerEvent(Event):\n",
" question: str\n",
" answer: str\n",
"\n",
"\n",
"class SubQuestionQueryEngine(Workflow):\n",
" @step\n",
" async def query(self, ctx: Context, ev: StartEvent) -> QueryEvent:\n",
" if hasattr(ev, \"query\"):\n",
" await ctx.store.set(\"original_query\", ev.query)\n",
" print(f\"Query is {await ctx.store.get('original_query')}\")\n",
"\n",
" if hasattr(ev, \"llm\"):\n",
" await ctx.store.set(\"llm\", ev.llm)\n",
"\n",
" if hasattr(ev, \"tools\"):\n",
" await ctx.store.set(\"tools\", ev.tools)\n",
"\n",
" response = (await ctx.store.get(\"llm\")).complete(\n",
" f\"\"\"\n",
" Given a user question, and a list of tools, output a list of\n",
" relevant sub-questions, such that the answers to all the\n",
" sub-questions put together will answer the question. Respond\n",
" in pure JSON without any markdown, like this:\n",
" {{\n",
" \"sub_questions\": [\n",
" \"What is the population of San Francisco?\",\n",
" \"What is the budget of San Francisco?\",\n",
" \"What is the GDP of San Francisco?\"\n",
" ]\n",
" }}\n",
" Here is the user question: {await ctx.store.get('original_query')}\n",
"\n",
" And here is the list of tools: {await ctx.store.get('tools')}\n",
" \"\"\"\n",
" )\n",
"\n",
" print(f\"Sub-questions are {response}\")\n",
"\n",
" response_obj = json.loads(str(response))\n",
" sub_questions = response_obj[\"sub_questions\"]\n",
"\n",
" await ctx.store.set(\"sub_question_count\", len(sub_questions))\n",
"\n",
" for question in sub_questions:\n",
" self.send_event(QueryEvent(question=question))\n",
"\n",
" return None\n",
"\n",
" @step\n",
" async def sub_question(self, ctx: Context, ev: QueryEvent) -> AnswerEvent:\n",
" print(f\"Sub-question is {ev.question}\")\n",
"\n",
" agent = ReActAgent.from_tools(\n",
" await ctx.store.get(\"tools\"),\n",
" llm=await ctx.store.get(\"llm\"),\n",
" verbose=True,\n",
" )\n",
" response = agent.chat(ev.question)\n",
"\n",
" return AnswerEvent(question=ev.question, answer=str(response))\n",
"\n",
" @step\n",
" async def combine_answers(\n",
" self, ctx: Context, ev: AnswerEvent\n",
" ) -> StopEvent | None:\n",
" ready = ctx.collect_events(\n",
" ev, [AnswerEvent] * await ctx.store.get(\"sub_question_count\")\n",
" )\n",
" if ready is None:\n",
" return None\n",
"\n",
" answers = \"\\n\\n\".join(\n",
" [\n",
" f\"Question: {event.question}: \\n Answer: {event.answer}\"\n",
" for event in ready\n",
" ]\n",
" )\n",
"\n",
" prompt = f\"\"\"\n",
" You are given an overall question that has been split into sub-questions,\n",
" each of which has been answered. Combine the answers to all the sub-questions\n",
" into a single answer to the original question.\n",
"\n",
" Original question: {await ctx.store.get('original_query')}\n",
"\n",
" Sub-questions and answers:\n",
" {answers}\n",
" \"\"\"\n",
"\n",
" print(f\"Final prompt is {prompt}\")\n",
"\n",
" response = (await ctx.store.get(\"llm\")).complete(prompt)\n",
"\n",
" print(\"Final response is\", response)\n",
"\n",
" return StopEvent(result=str(response))"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"sub_question_query_engine.html\n"
]
}
],
"source": [
"draw_all_possible_flows(\n",
" SubQuestionQueryEngine, filename=\"sub_question_query_engine.html\"\n",
")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Visualizing this flow looks pretty linear, since it doesn't capture that `query()` can generate multiple parallel `QueryEvents` which get collected into `combine_answers`."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"![Screenshot 2024-08-07 at 3.31.55 PM.png](data:image/png;base64,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AggggAACCCCAAAIIIGAECID8ISCAAAIIIIAAAggggAACIREgAIakonlNBBBAAAEEEEAAAQQQQIAAyN8AAggggAACCCCAAAIIIBASAQJgSCqa10QAAQQQQAABBBBAAAEECID8DSCAAAIIIIAAAggggAACIREgAIakonlNBBBAAAEEEEAAAQQQQIAAyN8AAggggAACCCCAAAIIIBASAQJgSCqa10QAAQQQQAABBBBAAAEECID8DSCAAAIIIIAAAggggAACIREgAIakonlNBBBAAAEEEEAAAQQQQIAAyN8AAggggAACCCCAAAIIIBASAQJgSCqa10QAAQQQQAABBBBAAAEECID8DSCAAAIIIIAAAggggAACIREgAIakonlNBBBAAAEEEEAAAQQQQIAAyN8AAggggAACCCCAAAIIIBASAQJgSCqa10QAAQQQQAABBBBAAAEECID8DSCAAAIIIIAAAggggAACIREgAIakonlNBBBAAAEEEEAAAQQQQIAAyN8AAggggAACCCCAAAIIIBASAQJgSCqa10QAAQQQQAABBBBAAAEECID8DSCAAAIIIIAAAggggAACIREgAIakonlNBBBAAAEEEEAAAQQQQIAAyN8AAggggAACCCCAAAIIIBASAQJgSCqa10QAAQQQQAABBBBAAAEECID8DSCAAAIIIIAAAggggAACIREgAIakonlNBBBAAAEEEEAAAQQQQIAAyN8AAggggAACCCCAAAIIIBASAQJgSCqa10QAAQQQQAABBBBAAAEECID8DSCAAAIIIIAAAggggAACIREgAIakonlNBBBAAAEEEEAAAQQQQIAAyN8AAggggAACCCCAAAIIIBASAQJgSCqa10QAAQQQQAABBBBAAAEECID8DSCAAAIIIIAAAggggAACIREgAIakonlNBBBAAAEEEEAAAQQQQIAAyN8AAggggAACCCCAAAIIIBASAQJgSCqa10QAAQQQQAABBBBAAAEECID8DSCAAAIIIIAAAggggAACIREgAIakonlNBBBAAAEEEEAAAQQQQIAAGMK/gWVTVrtvvdSzvvzbbfvdE2Ks2Osa9aod44xtuxv0LH+Ova5hAtdvuxNrCCCAAAIIIIAAAgggkI4AATAdvYBda4OdDWfeQGf3BazI5Ypjg6ENjXaboFiOih0IIIAAAggggAACCCQtQABMmiy/F3hDng14yYa7WrVquS8RsV6zprs/3oq9bs2aNfFOlTWlpRHneK/xrkecFGNDA6ENh3qKbhMOY2CxGwEEEEAAAQQQQAABnwAB0AcSpE0b9mY+sdAUK17Qs6FMT9b1Wp5A5z0WpHf0l8UGQhsa3e04QdMbDAmFflW2EUAAAQQQQAABBBAoEyAABuQvIdGwZ4NcoQa8dLk1ENpwqPcy2xWEwy4ntzCPJBSmK8/1CCCAAAIIIIAAAsUgQADMUy16A1+slj0b9po3a2ZKabfzVORAP9YbDCsKhQTCQFcjhUMAAQQQQAABBBDIsgABMMvA3ttr6IvVndOGO8KeVyy99URCoQ2EXU8paylM74lcjQACCCCAAAIIIIBAsAUIgFmuHxv6orXyaegj8GW5Any3/2nRIrPnp59+8h0pG1BGB5ghDJajYQcCCCCAAAIIIIBAkQgQALNQkbFCH4EvC9hp3NLbQugPhLQMpgHLpQgggAACCCCAAAKBFSAAZqhq4oU+28UzQ4/jNlkQiNU6SBjMAja3RAABBBBAAAEEEMiLAAEwTfZowY+WvjRRA3B5RWGQLqIBqCCKgAACCCCAAAIIIJCSAAEwJTYRf/Aj9KUIWQCXaRiM1kWUIFgAlUcREUAAAQQQQAABBCIECIARHPE3Zjy+0B3JU8+2wY8unvHtCv2MaK2C2j2UIFjoNUv5EUAAAQQQQACB8AgQABOsa23xGz9yuns2wc+lCN0KQTB0Vc4LI4AAAggggAACRSNAAIxTlbG6etLiFwcuBIftKKK2e2ijXrVFWwQbOr8sCCCAAAIIIIAAAggEUYAAWEGt+Lt7du7UyXT5rOASDoVQwP+NIN1CQ/hHwCsjgAACCCCAAAIFIkAAjFJR0Vr9NPxVtGz6faMsLC2R79fMlwWlc2Tlr8ulRY1W0rpmB2lZs600qb6TbFdpu4puEehjs1dNlWUbFqdUxn6N95LK21VJ6dpCusgfBPe6qRutgYVUgZQVAQQQQAABBBAIgQAB0FfJ3m/9Ev3O75tln8stk/8q6zev891t22bz6i3lz31vlp1qtt6207O2ZcvvMvbHMbJ0wyIZ1uFsz5HcrW5wyv/8/P9JxzrdZPcm+0Q8+NZvrpJPF38QsS/RjQf3eUXqV22U6OmBPW/JukXy6Oy75cwuF8d8H+0WqkFQf3WhNTCw1UnBEEAAAQQQQACBUAoQAD3V7u3y2bx5c2nerJnnaPTVJ2bfKy8seCz6Qd/eajtUl8t6XSc7NxoQcUSD16ivLpHZv0yV/ZofKhf2vCrieC42vls9V0ZNvFh+2bhSLuxxley306ERjw17ABy/6B0ZPWWUMbl74DPSrEbLCB//hrc1kBDo12EbAQQQQAABBBBAIF8CBMCt8qmEv2krJsnVX17g1t3+Ox0mg1seLc2qtxANe6s3rpL5q2fLc/MflpmrvnXPu23AI9K29rYupSs2LJWzPzzSHM9XAPz05/fl1slXmzLEC4AnOi2U7Wp1dt8n3kqfRrvL9pV2iHdaoI8/OOM2efP7F0wZEwmAeiIhMNBVSuEQQAABBBBAAIFQChAAnWpPJfzpX4u2CGnLkC7D2p8Zs+vmb1t+k2udFr5vV0w05+7TfLBc3PMas67/FFoAvHbXu6RHg53d8odhJZUAqC6EwDD8dfCOCCCAAAIIIIBA4QgQAJ26eumQCabGEu32aav34k9Okh+cgV90uX/vl6RhtSZmPdo/362ZJyM+PdUcauB8D/eA812cXVIJgBoql61fLJWc/1enSj3ZcYeq9nZxf393vjdcsWGJU96m7rnJtAAGJQBukS2y3DGotkMNqVG5lvsuyays27RW1m0ulQbVGhvLWNemGgD1ft4QyMAwsYTZjwACCCCAAAIIIJALgdAHQNv6l2z408q56ovzZPrKyaaeLu99nezRdP+YdaZh5R8TL5MdtqsstSvXlfO6j5RKzqigf/vyIlmyfpEsXv+Te23Lmm3MugatOjvWd/cvcLqTvlzypJSsme0GT3uwXe3OckzbU2VA0/3sLvO7blOp/PmLc8z6sPZnOd/4rZJn5z1kvvXTINqv0V4y1WmZXLNptdmnJ2qgrF2ljjSu1lz+uvOt5lrvN4CpBsD/zhgtU1Z8ae73fz2ukfZ1uph1/z+L1/0kN0y63OzuVq+vnNvtTxGnfLLoPXl74Usyb/Usd+AdfZfe9fvJSR3PjTpAi7bWqlufBrvLKZ3Ok2fm/lcmLvtMvlsz19xbu+x2q9dHhne6KGKgni8WfyRPzL0vwruJ41Jl+yoysOmBclz7MyLKFmtj1uzZZmAYnStwoDM6KAsCCCCAAAIIIIAAAvkQCHUA9I74mcocfy/Of1Qen3OfqTcd5fMyJwR6v+1LpELPGDvEDV7+872tik/Mvs8ZbOZR/ynltg9tdYyc3fUyd//qX1fK8HFDzHa3er3dwGpPqFW5tgl/dtv7q0Hn3r2fN7syEQDfX/i63D3tBnO/w1of74ymeYn3ce76C47rE1tdz+l6uQxudbQ5pq11D8y4VT5c9LZ7rn9Fg9wlPUdJv8YDIw5d/tkZzveYs5yQ19tMSTF5eVkQjThp68aoXe6QXg37mS1vmf3nHtzyqHLh1H+Od/uriWVdgGkF9KqwjgACCCCAAAIIIJBLgVAHwHRa/7SSflizQC7+9OSI+upSt6fs0mhP0xrVtk4nZ/CT7SOO+zc+X/yhaQF8eNa/zaEOdbrKkFbHmfUBTfeVKtvtKDpC54jPTnMvPartKeb+VXeoJsudAWTeXfiqfLP8c/f4PQOflaY1WphtbwB0T3BWtJVRu68e0/Y0aeGs6yA1b//wkjlFB6Lp2WBXqb5DTTdIZSIAamvkKR8cZJ6hQe3R/d4qNziMtpSe/9Fxbovo//YdI7Wc1khd/jP9FreMev1x7c6QDrW7ytrNa2TC4nERwfDevZ4zcy+aC51/bAC023r9Ea1PlJ2cuRoXri1x7vuyG8S1Dm7u/19z6s9rF8osZ3TWdxe+4obnUzueZ1oZm1dvJR3rJt6aZ7uC0gpoa4FfBBBAAAEEEEAAgVwLhDoA2m//dt1ll5TdZ678Vq77eoTbFdF/o10a7SE7Nxxg/tekenP/YbMd7xtAb/CJNkKn3uS2yVfJJz+XzdP3x25XyEEth5p7+wOgBtRrdvmXaHj85dcVpkuqfj+XzDeA2kW0hhMOE1nO7nqp9Gm4u3vqXd9eLx/89KbZvmrn28pNiTFn1XQZ+XnZPIh7Ot1ZL+t9vTlXu79e9tlws67h7Y49Ho/4hlEPvPnd8/LgzNvNObs33ltG9r3RrOs/3gCo5R894FGpW7WBe/zH0u/kis/PcuvRP9JnOt8Aug9xVmxXUFoBvSqsI4AAAggggAACCORKILQB0Hb/1MnetftnOsuitT/IQ7PukIlLP63wNns02U+Gd76wXHCJFwA1NJWUzhOdL/COgU9GbVXU7+Jum1I2suipnc4XbSXUxR8A/73nk6bFz1/QZAKg/9qKtv3fRk5d/rVc89WF5pJ9mh0sF/f6W8Tl+p3gG98/Z/ZdvfPt0rdRf7PuHXH1sl7Xyp7NDoi4Tje09fDPE8418ynq9r17Pe+0ApaFbm8ATCREX9fvbulev6/exiwEQCvBLwIIIIAAAggggEAhC4Q2AKbb/TNapeu8f98u/0omLZtgBhjRSdX9i7ZeXd/vnohvBeMFQP89vNubft/odBGdJ+MWvenOU3eyMxDKMe1ON6f5A+CLB0cPqckEQP020HbL9JYl2rp2l9TupHbZ4oxAes5HR5muq7rvif3ek2qVq5vDm3/fJKePPcS0wmkr3YODXnXDrnfE1cf3e1eqV65hbxnx+/y8R+TJufebfd5v+bwB0N+6Z2/w+Ox75cUFj5W7VndkKgCuWbPGtALSDdSq84sAAggggAACCCCQSwECYPPm0rxZs4yba2vUT6Xfm7n/PvjpDZn7ywz3GRpu7t/nJTMYie5MNACWblwtX28dufLHdd87I1jOc7+Vc2/urJzU4Rw5tv1ws8sbAHWk0FsHPGz2+/9JJgCmOgqofaY3pF3S82+yd/ODzaGvlnzsjP55hVnXbxNP7vRHs67TVhz7TuSgLvZeFf2e2/VPcnCro8wp3gD49IFjzbeV/mtfLXlKHpl1p9l9zS6jI7quEgD9WmwjgAACCCCAAAIIFKJAaAPgxyOny9Ipq033T+0Gms1FA4wOsPLAjNvcx1za6+8ysNmBZjteANQw+awzbcEzzvQNiSyxAuCAJoPkT31uiHqLXAbAJesWyR/HH2PKodMyXLPraLPu/Y7xzj2fcqdj8PpELXyMnTotxsnOlA+6eANgrFbQ10qeFjsYDwEwBiq7EUAAAQQQQAABBApaILQBMN0uoBoWNNSt3LhcRjjTDuzqm3Yg2l/FgzNud7pplk2rcFy74XJix3PMad6AoyNwXtjzqojLn5pzvzw3/xF3n3Yj1TnrWtdsL21qdTDr81bPlH9OGmnOiRUAvYOquDfbupLLAKiP/PtXF4udiuHBfV4xLXKnjR1sStOpTg+5sX9ZN07d8evmDXLi+2XzG+q7X9D9z+a8eP80r95a2tTuYE4LSgC0I4F2ObmFdD2lbKTWeO/BcQQQQAABBBBAAAEEMiUQ2gCY7iAw3jkA92k+WC7uWTYAS0UVM+7HMfLvqdeZUw5vPUzO6HKxWa8oAK7dtEZO/aCsi6SerCN8HtDiCNnOmUTeu7y84Al5dPbdZtcJ7c+W4zucada9XUCDFAA/XvSu3D6lbAAYfacdtqsid00tG/Hzgu5/kf1bHOZ9PfnDh0e63w0+e+CHZvTSiBPibBAA4wBxGAEEEEAAAQQQQCAUAqENgFq76UwD8c2yz+XaiSPcPxJvl0V3p2/FO5Kld4JzbwD0h8lJSyc400xcau6kU0r8dedbfXct2/Tee1j7M2VYh7PNgZQCYPe/yn4tyiaPtw/LxDyA9l76q616Z354mBnwpXeDfmawl6+dwXN0eWy/t0WnpvAu1341wp3r8IreN0j/poO8h931h2feIe/9+Jozv19rGdbuTNml8Z7mWFACINNAuFXFShICJUtXmLNLliyXkmXlB5dK4lZFc2qbhvXMu7Rp3EDaNKpfNO/FiyCAAAIIIJBtgVAHQPsdYPMUBoLR0Swv+vhE+WndD24d/an3P0Qnb/cvOrrlU3MfkJcWPO4eemDvl6VBtcZmWwd3sd0fvd/E6cEvnYFR/rl1YJTm1VvKnQOfkkq+1r8PfnzTbT3Ta3QKCJ0KQpdEA6D3Od5pJMxNnH8yHQD1vt6BVexz9nW6wF7k6wKrx7wthjqIzh17PiG1q9S1l5nfeb/MlD9NKGv51B1e43QDoA4Oo4PE6HLj7vdLp7o9zHoy/9jun3rNUWPKprdI5nrODZeAhr5x0+dKyZKy8Beut0/tbQd1ay+DundM7WKuQgABBBBAICQCoQ6Athuo1nUqk8Fr4Lj+68vEO92DhrSOdbtLyxptnFatHeSH0vkybeU3EaN1ntLxj3J0u9PcPzGdymHYu4PcbQ1w9XZsKIOaDXZayNbKuVsHTNETjmh9gmgrYfPqrWTBmjlOq9gEeXZe5MieB+x0uJzfo+w7uUQDoHd+Pg1Y2kW1ZuXa7oTy3gCok8k3qNrILW+8lX6N9nJH+vSe65303e6/dtc7pUeDXeym+6sD4Vz9xfkyfeVks0/LeFaXS6Rjne7G/+tln8pr3z3jTuTuNdAL0g2Az859SJ6e96B5doc6XWVg0wNkJ6cObAujORDnn68mTjRn8P1fHKiQH44W/GrWrGlUatSoIXY95ExSWlpqCNauXeuuWxOCoJXgFwEEEEAAgfICoQ6AymFbAVOdEF67b974zZUR0zyUZ962xzv657a9IldOOMedwNzut/PYabdGDTcVLRpIPv75PXOKztN3z97PSSXn/yUaAHUOw+FjDy33iCf3f1+q7lAtogWw3ElxdhzR5kQZ3vmiqGddOH6Y24qqofI/e79U7vtGe+GitT841iOdUF1id0X97eFM4H7VLrdHTPWQbgD0d/nVB/sHq4lamK07va1/GgB1HkBdGm793XoaPyEX0PD3yLgvXIUmTZqYwKfBj6VigcWLF4v+zy6EQCvBLwIIIIAAApECoQ+AymG/BUylK6her9+z6QTiM1Z9I1NXTNJdEYsGMm01G9LqeOlQt2vEMbuxbP1iEyTnr55ld4n9TlBbCHXU0cfn3OcesyutnVFAz+j8f9LLmWz9H19fLhOXlk30fsceT0jLWm3F2710r2YHyYheo+yl5X6nLPtSRn87KqJFc/SAR6W1M5Lm7ZOvcQNmuQvj7PB2SfWf+nrJM/LQrDvMbu/gNf7z7LZa6DyCr3//rNvaZ4/pCKF6j4NaDJUdd6hqd5tfb8CONQ3Em989Jw/OLJuSwoZv7020C+9js+9xd+nznti/LHS7O6Os2MnfoxyK2GVDYYOeZeFQD9p9BMUIqrQ2tOU/iJ7jps1xunzOM++mwU//x5K8gDcIEgKT9+MKBBBAAIHiFyAAOnVsp4TQ6u7cqZOkMy+gzvm3eN2P8tPa72XH7auZaRpqVtn2H/Tx/qS0RXHjb7+aQVD0Om3Fs8vG338VnUNv2YbFUrtyXTPQiT/o2HNT/dWulkvW/eQ8dTupVbmOVKtcPdVbZf26VRuWy4/rvjfPaVS1qfmmcvtK22f1uRpANazv4HTvrVu1gVR2Ri+taPGGPw1zNtwt/3a1uUznokxmsYHQ3kevtfuCGGqSebdcnTvemQNUQ6C2xOoShOk4vC1/hL/0/xK0W+i8eWVhmhCYvid3QAABBBAoLgEC4Nb69IbAVFsCi+tPg7dJV8Ab/hL57k9DiS7eUJhKULSBkJAYvQa93/7aMxKpH3tuNn5t6x/hL3O63hA4fNBujBSaOVruhAACCCBQ4AIEQE8FEgI9GKymJeD/5i9TrUyExLSqxVwcLQDau+YjCNrwp2Xo1auXLQq/GRCYP3++GSCmTeP6Mnyf3TJwR26BAAIIIIBA4QsQAH11SAj0gbCZtEC2wl+iBSEkxpey3/3GOlODoLak5qJbrQ2AtP7Fqo3U99MKmLodVyKAAAIIFK8AATBK3XpDoB6mS2gUJHaVE/B2+dSD+WhNKleoGDvCHhLtd4AxeNzdWoe6ZKoF173x1hXvt3+0/vl1MrNNK2BmHLkLAggggEDxCBAAK6hLbxDUEFjLmYsrnQFiKngUhwpYQIOftvrpry7acqTBIRetR9lky1RItCZB+iYx0QDo9c1GoKf1zyucnXXbCkg30Oz4clcEEEAAgcITIADGqTNvCNRTaQ2MAxayw97unvrq2QgJQSYt1JCo5dYQmMqSyTomAKZSA8lfM2XKFHPRqOMGJ38xVyCAAAIIIFBkAgTABCuUIJggVEhO8wc/bfUbeFO3kLx9cq8ZxJCYTgC0b69BUJd0uoc+8uEXUrJkhbRv316Y7N3KZv6XAJh5U+6IAAIIIFC4AgTAJOpOQ6AuM58o+9V1WgRVIRyLv6unvnWxdPfMdw3mIyTGGwgmGZNUWwUJgMkop36u/Q6Q6SBSN+RKBBBAAIHiESAApliX0VoE9VbNmzVL8Y5cFlQBgl8waiZTIVFDuy5rF2+UdYs3ZPTlkg2CBMCM8se8GQEwJg0HEEAAAQRCKEAATLPS/UFQb8eAMWmiBuByG/q0KHZwF12nxU8Vgr1oUFzq/M8uy78tW/fus8ey9atBUP9W4g0ERADMVg1E3pcAGOnBFgIIIIBAuAUIgBmqfw2C+h+a/v/IJAxmCDgHt7FBzzuipz7Wthjpf9TH+w/6HBSTR6QpYAOityt3mreMebn+zegS6ztBAmBMuoweIABmlJObIYAAAggUuAABMMMVGOs/LnX6CPM/ppLIsHh6t9PQt6a01LTy2QBo70hrn5Uovt9oLffZfsto3UMzEQA3rC2VX9etkzoNG4lUqpTt1yh3/3Wrf5Hff/tNatarX+5YvB2bNv4qG9evkxp16sU7Na3jBMC0+LgYAQQQQKDIBAiAWazQWGFQH0kgzCJ8Bbe2Ic/fymcvIfRZieL+zeQAMMlKVW9SVVod0NBc9saKmVLabHPSo4Bu3rRRJr77pnz51muyZsUyc68qVatJ2559Zd8TTpf5UybK1++Nkco7VpXh197qFvHTV5+TaZ98aLZPGDlKatUvK4d7grPy49xZ8uYDd5pdexxxrHTfc5D3sFlfXDJfxr/0tPw4Z6ZoANRFn9+yczcZePQJ0rx9J7PP+8/3M76Vtx/5j9l19MUj5Qun7N988LbZbtauo3NNR/lu+rdmu+POu8mgYad5L49Yf+P+O+SneXPMvtNG3Sw7Vqsecdy/QQD0i7CNAAIIIBBmAQJgjmrfhsFo3US1CNpVVBcmmzcMGfvHG/j0pnbbPoDunVYiPL/5aP2LpTvvkNKkA6C2+D1/+w3yw6xpUW9bvXYdadSitROmyua++/Pjr7jnvf3IfSYY6o5zb71X6jct+//vuCc4K/OnfC3P3Px3s+uAU86SfoOP2HZ4yxaZ8MZLMvbp/23bF2Vt72NPkj2PPD6iRXL2xAnywuh/mrNbdu5ervxd++8lMyaMd+92+UPPSuUqO7rbdqV05Qq586Iz3PuccvUN9lDMXwJgTBoOIIAAAgiEUIAAmKdK1/8I1SXWd0i2hVDPIRSqQvzFhjtt3dPFbnuv9AY+3c83fV6dcKznovXP/l017Fnb/YbU7rP/xyDV/rzlT0nPA6itc5M/fM9Ulra6HTT8HGnaur2s+PknGffMY87vjxEVmckAOP2z8fLK3dtaFHc9aIi0672LbLfddk6gmy6fvPys++wjL7hcug3Yy932BkC7U8uvgXXVkp/lxD9fK5OcFsGZn39iDmsrYed+e9hT3d8vxrwi7z/xkNkecs7/Sa+993ePxVohAMaSYT8CCCCAQBgFCIABqXUbCGO1EGoxvaHQbIf0e0Ib7Oy3e2ph9+m6dyHweTVYz0brnw12XbcO+GK3E9FO9hvA5Yt+lPv/dL65tYans/55h9Rt1MR9lLYOPvXPa+TnknnuvkwFwE2/bpB7RpzjdvkcdsXfpF2vnd3n6Ip2H3101BVmnwa780ffb7qh6g5/AOx/+NEy6LhTpZITHlcuXmTeY/63k+TZW64113fcZXc5dsRfzLr3nwdGXijLfvzB7Lr0/qdkx+oVd//UEwmAXkHWEUAAAQTCLkAADOhfgLeVoKJQaItfbOHQBrpEQp41IOxZCX5jCaTT+meDXSpBL1Z5kg2AUz8ZJ6/dO9rcbi/nW7uBR59Y7tYlUyfLUzde4+7PVACcPO4defPBu819dz7gEDl4+B/dZ3hXPnz2Mfn01efNrsPPGyE9tn5D6A2A+u3hebfdJ9tXruy91Awmo9077XeFl9z7mFSrVTZvo56o3x4+dNUIc03PvfaVw869JOL6WBsEwFgy7EcAAQQQCKMAAbCAat0fCrXo/mknKnodDYm62F97rnYx9S/+c/zHE9m2Ic5/roY6XfzH/dv+6+y2DXoNonSvs+fwi4BfINHWPxv0onXf9N8z3e1kA+AHTz4kn79Z9k3fOTffLQ2al00z4S/HvZeea7pV6v5MBcD3n/ivfDHmVfMoHUBGB5yJtui3iY9fV9Zyt+fQ42XvY082p3kDYKddB8gxl1wZ7XIZ9+yj8tmrL5hjh5x5vvTZ72D3vLFPPWK+QdQdJ/3lOmndrZd7rKIVAmBFOhxDAAEEEAibAAGwSGrcGw71lRJpNQzyq0cLeVpe+x/nQS47ZQumgL/1z/4t5SLoxRJJNgBqsLKDv1z24NNm5M1o937u1utk7jdfmUOZCoDee0Z7ZrR9XXcfKEMv+pM55A2A2v1z32GnR7tElv/0g9x/xYXmWItOXeXUa2406zrVxOhzT5aNG9ab7wb/765HTPfRqDfx7SQA+kDYRAABBBAItQABMCTVrwHRLv5WQw2L/sV/jv94Its2xPnP1ZY7XfzH7X+Q+89nG4F0Bez/gcT+zQXlby3ZAHjH+ae53SO9wc7v4x3t03ued3+yo4D+5/Lzyw0w43+uf1und7DTUHgD4EGnnyO7HDjEf7q7rd8R6veEuvzxtv9IvSZNZd7kie73gTrVxF5Rur+6N/CtEAB9IGwigAACCIRagAAY6urn5RFAIJ8CyQZAbzCqqAVQvxPU7wV1iRUAz7nlHmnQbCdzjvcfb1DzTgPx2LVXysLZM8ypg888T6rVKOtS7r3Wv161Rk1p06O32e297+Az/ih99z/Ef7q7PXncu873hneZ7UHHnyoDnPkIve8UK7y6N/CtEAB9IGwigAACCIRagAAY6urn5RFAIJ8CyQZAnQB9ykcfmCL/4aa7pOFOLaMW3xvWYgXAs//5b2nUsnW5673hyxsANZDpMV20W6Z2z0xmSSYAbli3Vkafc5K5feNWbWT432+Vm8841mx7u4Um+nwCYKJSnIcAAgggEAYBAmAYapl3RACBQAokGwAnvPaCjH3mUfMuA444RgYdf1q59/pl2RK555I/uPu9AdA7kIvOu9eme1nrnHuys/L6f/4l344fa3Z5A+CE1190J4Df9eDD5MBTtz3De73O4/eGM1dh3cZNpGv/gbLHEceZw8kEQL3gtfucVsyPx5lrtcXwrYfvM+uH/uEi6b3PAWY90X8IgIlKcR4CCCCAQBgECIBhqGXeEQEEAimQbAAsXbVS7rxwuPsuf3SmUqjXpJm7vWXLFtFWQhvg9IA3AHpDXNsefURH85RKldzrNby9dOfN7rY3AK5c/LPcd9m57rFT/3aTtOjYxd3WlfWla+SRay53RyA96qIrpMvue5pzkg2A302fIk/ecHXE/XVjxP1PStXqNcrtr2gHAbAiHY4hgAACCIRNgAAYthrnfRFAIDACyQZALbg3xOlk8Ac7rWOtunSXtat/MdMnzPry04j38wZA70TyepLOpddltz3NaJrfz5wqE157MeJabwDUAx+/+JSMf/Fp95x9h50mHXbezVy/wJnEfdL7b7mTtNdt3FTOdb4z3G777c35yQbALb//Lnc7LZlrVixzn9dj4CA5/I9l8wC6OxNYIQAmgMQpCCCAAAKhESAAhqaqeVEEEAiaQCoBcPOmjU4r379l+mfjE3odbwDUC16953aZ9umHMa/tu/9gE+T0BH8A3LTxV+f60TL7q89iXq8HqteuI6ePutnpBtrUPS/ZAKgXfvzS0zL+hafce5x4pdNtdeugMu7OBFYIgAkgcQoCCCCAQGgECIChqWpeFAEEgiaQSgC07/D1e2Oc1rin3GkhdH+t+g3l0LMvkI+ef1IWzZ9jTvUHQG1Zm/DGi/LpK8+bOfXs/fTa3Q45whmdc7DceubxZnes6Rqmf/aRfPDU/yJa5+x99PvAAYcdIzXr1be7zO/cSV/Kc7ddb9a1jL0HHRRxPNrGysWLnG6nfzSHNFRedOfDbotitPNj7SMAxpJhPwIIIIBAGAUIgGGsdd4ZAQQCIZBOALQvoIO+rFj0o9R3pnSo07Cx2a3f4cUKgPY6cb4XXLlksfO93iJp0Lyl1G7Q0D2U6Mqv69bJ8kULZeP69VLLuV7vUbnKjoleHvc8nQtQp77QZeBRw2SvY8pGBo17oe8EAqAPhE0EEEAAgVALEABDXf28PAII5FMgEwEwWvkTCoDRLgzYvjEP3SPffPC2KZWdED6VIhIAU1HjGgQQQACBYhUgABZrzfJeCCAQeAECoK+KnFZJMyqp8zvn6y/k+dE3mBPa995Fjv/TNb6TE9+0AXBQt/YyqHvHxC/kTAQQQAABBIpQgABYhJXKKyGAQGEIEAAj60kHthnz37vNzo0b1rsHo0054R5MYMUGQHuqBkFdCINWhF8EEEAAgTAJEADDVNu8KwIIBEqAABhZHTqVxNM3jYrYGWsgmoiT4mzYANimcX0pWbKi3NkEwnIk7EAAAQQQKGIBAmARVy6vhgACwRbIVgCc9P4Y+WXZUtmhcmUZePSJwUbwlE7n/Hv7f/fL8h8XSrN2HaTjzv2ka/+9PGektjplyhRz4ajjBpvfcdPKRkgdN31euRsSBsuRsAMBBBBAoMgECIBFVqG8DgIIFI6ABhENIU2aNDH/K5ySF1ZJ/QHQW/qSpSucVsHlUrJsJa2DXhjWEUAAAQSKVoAAWLRVy4shgEDQBTR8PDLuC6lZs6a0a9cu6MUtyPItXrxY9H/a/XP4PrvFfQdaB+MScQICCCCAQIELEAALvAIpPgIIFK6ADYD6Bu3bt5caNWoU7ssEtOQ2AKYyAiitgwGtVIqFAAIIIJCWAAEwLT4uRgABBNITsN8B0gqYnmO0q23402P2+79o5yW6j9bBRKU4DwEEEEAgyAIEwCDXDmVDAIGiF6AVMHtVbANgKq1/8UpF62A8IY4jgAACCARVgAAY1JqhXAggEBoBWgEzX9U2/OmdM9H6F6+EtA7GE+I4AggggEBQBAiAQakJyoEAAqEWsCGQEUHT/zPwhr9stP7FKyGtg/GEOI4AAgggkE8BAmA+9Xk2AgggsFXA2xVUdxEEk//TWLt2rRnxs7S01Fycj/AXrdS0DkZTYR8CCCCAQL4ECID5kue5CCCAQBQB2xJoDxEErUTsX3/w0zODEv78pa6odVCnqmjTsJ4M6t7RfxnbCCCAAAIIZEyAAJgxSm6EAAIIZEZAW4x0gnj/oiOFskQK2NY+u1dD1KBuHaRNo/p2V6B/Y7UOEgYDXW0UDgEEEChoAQJgQVcfhUcAgWIW0HBQsmyllCxZUcyvmfa7FUtYIgym/afADRBAAAEEEhAgACaAxCkIIIBAEAS0+yBLpEChtPRFljr+FmEwvhFnIIAAAgikJkAATM2NqxBAAAEEEMiJAGEwJ8w8BAEEEAiNAAEwNFXNiyKAAAIIFLoAYbDQa5DyI4AAAvkXIADmvw4oAQIIIIAAAkkLxAuDbRo3KJjBcJJ+eS5AAAEEEEhZgACYMh0XIoAAAgggEAyBWGFQS6dTYhAGg1FPlAIBBBAIggABMAi1QBkQQAABBBDIkABhMEOQ3AYBBBAoUgECYJFWLK+FAAIIIIAAYZC/AQQQQAABvwAB0C/CNgIIIIAAAkUoQBgswkrllRBAAIEUBAiAKaBxCQIIIIAAAoUsQBgs5Nqj7AgggEB6AgTA9Py4GgEEEEAAgYIWKFm6QkqWLJdx0+eVew8GkClHwg4EEECg4AUIgAVfhbwAAggggAACmREgDGbGkbsggAACQRYgAAa5digbAggggAACeRKIFQbbNK4vbRrWk0HdO+apZDwWAQQQQCAdAQJgOnpciwACCCCAQAgEYoVB7SKqC2EwBH8EvCICCBSNAAGwaKqSF0EAAQQQQCD7ArEGkOF7wezb8wQEEEAgEwIEwEwocg8EEEAAAQRCKKBh0D94DF1EQ/iHwCsjgEBBCRAAC6q6KCwCCCCAAALBE6CLaPDqhBIhgAACsQQIgLFk2I8AAggggAACSQtU1EU0F98K2ufn4llJ43ABAgggEAABAmAAKoEiIIAAAgggUIwC+egiap+p3yQSAovxr4p3QgCBdAUIgOkKcj0CCCCAAAIIVCiQyy6iNgBqgdo0qu+EwA7mt8ICchABBBAIkQABMESVzasigAACCCCQbwHbRdM/eEymWuy8AdC+a6bube/HLwIIIFDIAgTAQq49yo4AAggggEABC0QLa+mOIhrtnkpECCzgPxSKjgACGRUgAGaUk5shgAACCCCAQLICmewi+si4L0TvF20hBEZTYR8CCIRNgAAYthrnfRFAAAEEEAiwQLpdRCsKgPra+l3g8EG7BViAoiGAAALZFSAAZteXuyOAAAIIIIBAigLRunPG6yIaLwDaomgI1DDIggACCIRNgAAYthrnfRFAAAEEECgwgYpaBfVVvNM9jHrurYTfji6hCVNxIgIIFJEAAbCIKpNXQQABBBBAoNgFKgqDGgSTCYBqRQgs9r8Y3g8BBPwCBEC/CNsIIIAAAgggUBAC0bqIplJwQmAqalyDAAKFKkAALNSao9wIIIAAAgggYARitQomw8Ok8clocS4CCBSyAAGwkGuPsiOAAAIIIICAEaA1kD8EBBBAIDEBAmBiTpyFAAIIIIAAAgEV0Hn/dPTPTC10Cc2UJPdBAIEgChAAg1grlAkBBBBAAAEEEhZIduCXRG5MCExEiXMQQKAQBQiAhVhrlBkBBBBAAAEEjECi8/6lwsWk8amocQ0CCARdgAAY9BqifAgggAACCCAQVSCb4c/7QCaN92qwjgAChS5AACz0GqT8CCCAAAIIhFAgU4O+JEpX6F1CZ66aneirVnhel7qdKjzOQQQQCL4AATD4dUQJEUAAAQQQQMAjkOvwZx+dzxDoD3AzV5YFulm/zLHFM792f8TOHG10qbctHHau0zHiqd5jhMgIGjYQyLkAATDn5DwQAQQQQAABBFIV0BE/x02bK/qbjyUbIdAb7jTAeUNdJgNdzZo10yYrLS1N+x72BjYU2rBotwmIVohfBLIjQADMjit3RQABBBBAAIEcCNggWLJkufu0kqUrzbo95h7I0Eqqk8bboPdKyRtuSRINeP7wZrdr1qzh3ktX7P6InTnY8AfD0tK1EU/1HveuR5zk27CB0BsQCYc+JDYRSEGAAJgCGpcggAACCCCAQGEJ2DCYyaDYplE9GT5o93IQNujZ1rx4Ic8b2nTdG+q8x8o9qMB32CBow+K27YpbGTUYEgoLvPIpfl4FCIB55efhCCCAAAIIIBAkgWSD4ubt18rAHs1l8roJ5jUqCns2zDVt2sR9ZbvP3cGKK6CB0IZD3Vm2HTsceoPh0LaHufdhBQEEIgUIgJEebCGAAAIIIIAAAjEFtHVvycr18sKMd6TKb7Vl83brZFX1yBE2bajTX9uaZ/fFvDEHEhbwBsOKQiGBMGFSTgyZAAEwZBXO6yKAAAIIIIBA4gK2O6d+txerdU/DnW3VI+glbpvpM3/+ebG5ZUWh8Mg2Q8w5tBBmWp/7FZIAAbCQaouyIoAAAggggEDWBTT02YFa/KHPBjwCX9arIe0H2JbCWIGQMJg2MTcoUAECYIFWHMVGAAEEEEAAgcwJxAt9BL7MWefrThUFQttdlJbBfNUOz82lAAEwl9o8CwEEEEAAAQQCI2BDX0WtfLbFLzCFpiAZE7BdRn/++eeIexIGIzjYKEIBAmARViqvhAACCCCAAAKxBaIFPxv0tKXPrse+A0eKTSBWGNRuorQKFltt8z4EQP4GEEAAAQQQQCAUAi8veF1m/TInYjAXDXuEvlBUf8IvGS0M8r1gwnycWAACBMACqCSKiAACCCCAAAKpCcRq7SP0peYZtqs0DPq7iNIqGLa/guJ7XwJg8dUpb4QAAggggAACjoC2+NnRPBWE1j7+LFIVIAimKsd1QRQgAAaxVigTAggggAACCKQsoK1+N00a7V5P8HMpWElTQIOgd1oJbQ3UQWO61O2U5p25HIHcCRAAc2fNkxBAAAEEEEAgiwL+7p6JBL/Nv26WHz//QVb/sErWLi6VjWs3So1GNaVGk5rSuEdTqd+xQRZLHOxbb1q/SX76cmFKhazVvLbU71C8dv4WQbqFpvRnwkV5EiAA5gmexyKAAAIIIIBA5gS83T0TCX6b1m2Sb5+YJHNenykadGItDTo3lJ4n95UW/VvFOqVo969asFJeP/fFlN6v0+FdZbeL9kjp2iBdtHn9Zvn2qUnSsEtjablH63JFIwiWI2FHAQgQAAugkigiAggggAACCMQWuOmb0e7Ink2bNjWjesY+W2T1wl9k3DXvmt+KzvMe6z6sl/QZvqtU2r6Sd3dRr4c9AK6cv0Lev3KMbFi1QQZcvpe0Pyh2N09vEKQ1sKj/P4uieDkCYFFUIy+BAAIIIIBA+AT8XT47dGgfdw6/9cvXyatnPh/R6tf1mB7Saq82Urd1falco7Jo6+DP3/wk05+bIkunLXFhOwzuJP0v3cvdLvYVbwCs3aKO7HLu7gm/cs2mtaRO67oJnx/EE7/7aIGMv/4DU7R4AVBPIgQGsRYpUzQBAmA0FfYhgAACCCCAQKAFvAO9aJdPDX9xly0iH1z1tvtdW/WGNWTgXwaZb/2iXbtlyxaZ/MhEmfrUZPfwvtcdJDvt3tLdLuYVbwBs3KOJHHT7YcX8uuXeLdkAqDfwhkAdHGZknxHl7ssOBPItQADMdw3wfAQQQAABBBBIWuCMseeZaxLp8mlvvnDC96brp90+9J6hCQ1U8sWdn8rs12aYy6rWrSrHPHVSVruC/r75d1m3dK1Ua1Bdtq+yvS1uQr9bft8i65atlRqNayZ0fkUnBTUAbli1Xrb8tsX4VFT+mMec/0PA2iWlsmOdqrJD1R1inpZKANSb6Sihc+fOM/clBMbk5UAeBQiAecTn0QgggAACCCCQvIAd8CWZ8KdPGf+PD+S7DxeYB3Y4tLP0v2RgQg/fWLpRXjr5abfb6AE3HyJN+zQ31/76ywZ55/I3zHqrgW2k9+m7RL3npzd/KMvnLDOB45A7jyx3joa+ac9Olh8+/k5WzF3uHq/Xrr60GNBKepzYp1wY3LR2k7x1yavm3F6n7ux8q7Zevn18kvlmTVs32+7fXvQ7Ng07uux7/UFSs0kts+7/Z/mspfLprR+Z3R0O7ixdj+0hmQiAC96fK1OfLmtB7XJUd+l4aBf/o822tra+d4V+b7detq+8vaiR93tLNdF3Wzp9sXk/vahytcrSyGmZ7HVqXzNIi//Geu6E0R+b3fv87QBz7xnPT5WfJ/3k1qV2U213QEfpdlxPqbRd2fedGr7f/8tbonWr3//posFfA6N2bdVW4HiLNwTyTWA8LY7nWoAAmGtxnocAAggggAACKQvY8Kc36NOnd8L30e/6nhn6qHv+0U+eIBqSEl2+vOczmfXydHN6p8OcES7/r2yES21te/Gkp83+dgd0kD2u2CfqLcdc9Iosn7XMHDvlnbMiztFBaT6+YWxE8Is4wdnQoLL31ftLnVbbvqvb4ASU5497wpyqXTSXTF0ccZmGlnYHdnS+ZfzW7O97dj/pfnyviHPsxpd3O+/3Stn7HXjLodKkd7OMBEB9N/3mUhd9h8MfOMY+MuJ36bTF8vaI182+1nu3lb2u2q/suNNaN835FnPSg19GnO/f6H36ztLzpL4injF6dAqLD/76tjm1+wm9ZNrTU/yXudvNd21hArKGQG+Z3RO2rtRsVkuG/u94/+6o294QOLLvCOYKjKrEznwIEADzoc4zEUAAAQQQQCBpAe93f8m2/mkL15iLylrLtOVo2CunJfX8RRN/lPf//Ja5RqeGsK146QZAbfl7/ZwX3RFJNWD0PLmP1N6pjqxZtNp0PV02Y6l5rg7Ectj9R8t2O2xntr0B0PsyGrR++W6VaRlrNbCtO5WDXn/EQ8d6TzXrv238zQRJnQ5DQ/FRjw8zrWGZaAHUB7w94jV3MJ0h9x0l2qrpX7zdbPf7x8HSvF8Lc0rJuHlOOB5n1vWfzkO7yU79WpryLZn6szOVxzfuMf2es82gbd+CegOgPUmDng74o0FR53/84ZPv7CGxz928YbOzv8SUefbrZV1/2x/UUZr2be4MElQlqSlBtCuoBkG6grrMrARAgAAYgEqgCAgggAACCCAQX8C2/iUb/vTOCz9zvv/727vmIQ27NpLBdxwR/4GeM9b8tFpeGf6c2aMta8c+e7JZTzcAznp1unx512fmXtqtdNB1B8oOO277Lu23Tb/JZ7d9JCUfzDfn9LtwgHQ+optZ9wfARt0by/7/PMR0M9WulNvtsL1UqVlF3jz/Zbd1Mdp3jz98+p18OOo9c0/tTqndSXXxBkDd1gCZyFJrp9oR3STnvTNbPrt1vLlUW+L6ntkv4ja//eoE0OOfMN0yvd9YahB7+bRn3G6YNqB5L142Y4m8dfFrZpdeO/TRYe53ff4AaFoJnTkdvcsX/3a+79wa8vwtuKl+A+i9v67bEEgroF+G7XwJEADzJc9zEUAAAQQQQCApATvwSzJdP+0D5rw5Uz7/1ydmU7+N23PkIHsooV/9DvDZox9zzz15zJnmG7V0A+AzRz7qfo+mLW/RBm/Rb9Ge29rVU1votPuqLv4AePiDx0R0EbWFnfOG8+53lL27dgHVrqDe5cO/v+e2hB35yHFSq3ltc9gfAL3XVLTu7ybp7X5rAt7TziA6W7+30/t8/3GJfHTt++aWPU7oLX3O3NWszx0zy/2Gr6KJ5b95+Ct3pNY9R+7jfPvYwVzvDYBapiP+e6zbempOcP5ZVeJMdu+0wOqi3V61+6tdMhUA7cigfAtoZfnNtwABMN81wPMRQAABBBBAICGBdALg/HfnyKe3fGSe03KP1rLPqAMSeqY9ydsC6O1Cmk4A9AY7b7dS+0zvrw6QonMT6nLCq6eXtfJ5vgHU/f5vC3WfLhvXOOH1mLLw6m1h02PeEKktiAePPlx3m8UfALWMiSw6UMpef936Dd/WCybcPl7mvjXbbNlvDO29tPVRWyF10W8EtQurLhPv+1xmvDjVrO//z8HSbJedzLr/H+0K+s6lZQPxaPdZOxCPNwC2O9D5PvNP5b/P9IZTf8twpgKg/RaQbqD+mmM7XwIEwHzJ81wEEEAAAQQQSFggne6f+pBFXzvf8F1Z9g1frG/hKiqMN0x4W4rSCYDe7xIrerb/mH4HWLdNvYjwVr9DA9HunbGWj28c63Yj3f9GJ0ztXBamdHoL/f5OlwGX7SXtD+7k3sIbANOdB9Ab0rwjsHoDqD8Ej736HfOdnlugBFZa7+MMILM1fHrrzNu11X+bxw/6r9nlf36mAqDe/JtvykZCfXjfe/2PZxuBnAsQAHNOzgMRQAABBBBAIFmBdAPgqu+crn5/KOvqp8+2XTgTLcfMl6bJV/dOMKd3Gdpddj2/v1lPJwB6A0ai5dDz7Ldw3vCkA5voKKGxFu8gNjqgyYDL9zanekcnHfbSac4gJ5XdW2QyAOo0D/oNZemiNeb+J7zmtGI63zrq93f6HZ4u/UcMlA6HdDbr+o+OHqojciazeEOcNwDuel5/0Wkooi25CIB8BxhNnn35EiAA5kue5yKAAAIIIIBAwgJ2BNCaNWtKhw7tE77OnqgTpL9wwpMVDihiz432O+6ad0Unktdl90v2dOez8wbAir4tfO0PL5iROfV621VT56N7b+QY3SXa/bLLUT3Merx/GndvYiZB9wZAb8tXtOt14vQXTtz2/hrAdL47O0WDfwAUvUcmA6Deb5ozH+Ckh77SVRNWNbR6A+jxL55qBq0xJzj/eEcP3f3iPaVKrR3toZi/OuiNbd0MUgCkBTBmlXEgDwIEwDyg80gEEEAAAQQQSE4g3QCoT/vGCR92UnLtBqrfm3knG9dzdPLwqU9NlvYHdZKd+rc0k5J7R8nUc2wXTF1fv3ydE6ye0lWJmL/O7Nn2j3ewFxsAS39e44xy+aw5SUOLds1MZkkmAOp9Jz860ZlMvWzaBJ3M/JfvV8nXD3xhHnnATc7k9s40B94l0wFQA+eLJ5fNmaiBtc8Zu7ojq0YLoN7vBg8efZgTkpt4ixd3PSgBkG8A41YVJ+RYgACYY3AehwACCCCAAAKpCaQzCIw+0TuQi27v/IfdpNtxPXXVXb66Z4LMfHma2daQqOdMGD3ebTn0T2PgHcjFP4iKvan/uTYAaqvcE4c8ZE+To59wJqdvVMPdtivaejnmwldEWxu1TDqCaY0mNSO+AYzXAqj38k5w3mFwJ9FusTrHYLSROfX8TAdAvadOzK7BTJfep+3shNKvzXq0ADrt2W0TwHu73ZoLPP9oV9oJt40XHelTHXqc2McczWgA9H0f6Xl83FVGAY1LxAk5FiAA5hicxyGAAAIIIIBAagI3fTNaZq6cbbqAalfQVJZZLzvz7t1TNu+eXq/fw+16/gCpXL3s2zcdFGXKY1+7gc/7DA1fQ+49SrbfcXt3tz/EHXT7EGnco6l7XOeye/dPb8jyWcvcfTYA6g7vPHQ6Oql+x+dvlfTOFWhaLv/rtFxWqpR0ANTnebtV6rYuPU9xRs48bZeyDc+/2QiA0b57jBVA/cH54H85rYDdIlsBdYTTNy982f22cK+r9jMtsfoa6QZA7fKrXX910akzdAqNVBYCYCpqXJNNAQJgNnW5NwIIIIAAAghkTMB2A9UbpjIXoF6ng5F8ctM4d0RM3acBpNXAtlKvfX2pWq+aE9aWuvPK6XG7eCdht/v099ObP5T57801u3Sevu7Depl7aRfLeW/PNq1s3vO9AVBbELUb6Kb1m8wpOoiJTpReu2Ud0wKnE9jbicr1BO88d8l2AdXrvZOy67YuRzx0bNRJ3r0BUKe+aL5bi7ILEvhXA2p/p9XMO6m9Xuad9N3eRlsCe54SOUG7PaZhfMpjk+ym9D2rn7To38qE5EVf/Siz35jhflvpn+sv3QC4ePIiJ7y/aZ6tfyNdj+5hvkPsOKSLW554Kzb86XmMABpPi+O5EiAA5kqa5yCAAAIIIIBA2gK2FUP9eIkAAEAASURBVDDVwWBMAbY4A5I8s21AkmQKpS2GvZzA4p2wfcXc5fLm+S/HvI2GhwadG7lTGngDoF704+c/yMc3jHVDYKwb+bufphIAvfPe6XNidVvVY94AqNvJLse/4AzqUqtKucu+8nSz1YPeyef9J2/+dbN8cuM4d6J6/3G7rcaD7zjCdAO1+9INgN7uvfae+mvnYfTui7VuB39hEvhYQuzPhwABMB/qPBMBBBBAAAEEUhaw3wI2bdpUmjaN7BKYzE1X//CLzHljpjvZuP9anVuv0+Fd5bdNv8mXd23rNqrn+Scz1+/rPrvtI1k6bUnEbXRwF53eQFvebEuWPwDqBetXrDPTTHz34YKI63VDJ0bXyc1b7dlGpNK2w94J3tvs104GXrnvtoMVrHlbLPtf6ky9MLhz1LN/+W6V6OilqS7+UT3tfVbMcQLzBWWBOdH5BUvGznMGrPnSfAdp72N/9ftAbXWt1qC63WV+vVNfxGq91RPtNBDRwrDOH6kBdMOqDe69h9x3lNRrV9/djrVip34g/MUSYn++BAiA+ZLnuQgggAACCCCQkoC3K2i6IVAL8Pvm32Xd8rVmWoTN6zebIKFdOXesvaNbPp2/buL9n7stUcc+c5LpLuqesHVFu3KuWrDCfKNXr30D2b7Ktu8F/edG29YBX9YuLjUD1uh3iTrYS7V6TrDxBL9o1yWzzzsQS6yQlsz9cnnuprWbnMFsVsnGtRtNK6wOmuPvZprx8jgtxjpiq2wnzt9EVdHusPEWun7GE+J4PgUIgPnU59kIIIAAAgggkJKAnRheL85ECEy0EPpd3/LZS6XdAR0TvSRQ52m4fOnUZ0yZvBPCB6qQBV4Y2/KnrzGy7wjpUrdTgb8RxS82AQJgsdUo74MAAggggEBIBPIVAguO12nB0hbEjaUbZfz1H4h2a9Rl8B2HS8Oujc06/6QvYOf70zt1qddJtOsn4S99V+6QeQECYOZNuSMCCCCAAAII5EjAGwLTGhgmR+XNx2NePv1Z2ex0TfV+x9a8XwvZ7x8H56M4RflMb5dPDX8j+4woyvfkpYpDgABYHPXIWyCAAAIIIBBaAf0m8JWSN8wcgYqQyy6hhYA+5qJXIuYh1OkSDr1raNQROgvhfYJURm310/Cnv7ow4EuQaoeyxBIgAMaSYT8CCCCAAAIIFJSAtzVQC04QLKu+Wa9Md+YpnGM2dtqtpbQ/qJMZXKbsKP+mKuD91k/vwfd+qUpyXa4FCIC5Fud5CCCAAAIIIJA1AW0NnLmyrEVQH6LdQvV/6UwXkbXCcuOCFPB299QXoNWvIKsx1IUmAIa6+nl5BBBAAAEEilMgWmugvilBsDjrO9tvpV08S0vXmq6etrsnA71kW537Z0uAAJgtWe6LAAIIIIAAAnkX8AdBLRBdQ/NeLQVTAP83flpwgl/BVB8FjSFAAIwBw24EEEAAAQQQKB4BDYKzfpnjDhSjb6ZBsOy3ifnlHwSsAMHPSvBbjAIEwGKsVd4JAQQQQAABBKIKaBDURUcNtYv9TrBmzRrme0G7n99wCUQLfSpg5vNzpnZgTr9w/T0U89sSAIu5dnk3BBBAAAEEEIgpEK17qJ6sLYOEwZhsRXUgVuijm2dRVTMv4xMgAPpA2EQAAQQQQACBcAlEaxW0AnQTtRLF8auBTxfv3H32zWzo021a+6wKv8UoQAAsxlrlnRBAAAEEEEAgJQH/NBLem9iuorqP0US9MsFd9wY+LaXdtiUm9FkJfsMkQAAMU23zrggggAACCCCQsIANg/7BY+wNCIRWIji/NuBpC58udttbQhv6aOXzqrAeJgECYJhqm3dFAAEEEEAAgZQF4gVCvbHtMlq2zuiiKWMncKENd/75+fyX2sCn+wl9fh22wyhAAAxjrfPOCCCAAAIIIJC2QCKBUB/ibSlkcJnk2f1BT+9g9/nvpmFPFx25UxcCn2HgHwQiBAiAERxsIIAAAggggAACqQnYQKhXx+o26r2zNxjqfg2HZb81zW+Y/rGBzrbm2Xe3++2299eGvc51OprJ2fUYgc8rxDoC0QUIgNFd2IsAAggggAACCGREINlgaB+qAVEX+1u2XhYS/ft1O2iLP7xpuNPFu9+7Hqv8BL1YMuxHIDUBAmBqblyFAAIIIIAAAgikJeANhnojbTXUZebK2eY32X8ig2JyrYi29dE+04Y1ux3r1x/g/NuxrvPv94Y8PWa3adHzS7GNQPoCBMD0DbkDAggggAACCCCQcQENiLp4A6ENif795sSA/WNDnL+sI/uOcEtKwHMpWEEgZwIEwJxR8yAEEEAAAQQQQCB7AjYw6hO8oTGRJ3qDpZ6v39UlsnhDnp4fK9C9vOB1eaXkDXNLDYCxzkvkmZyDAALpCRAA0/PjagQQQAABBBBAAIEEBGwI1NA4ss+2VsAELuUUBBDIoAABMIOY3AoBBBBAAAEEEEAgtsBN34w2rZOEwNhGHEEg2wIEwGwLc38EEEAAAQQQQAABI6DdVG+aNNqs61x9Q9sehgwCCORYgACYY3AehwACCCCAAAIIhFnAGwL5HjDMfwm8e74ECID5kue5CCCAAAIIIIBASAXs94D6+oTAkP4R8Np5EyAA5o2eByOAAAIIIIAAAuEV4HvA8NY9b55fAQJgfv15OgIIIIAAAgggEFoBGwL5HjC0fwK8eB4ECIB5QOeRCCCAAAIIIIAAAs58hQwKw58BAjkXIADmnJwHIoAAAggggAACCFgBvge0EvwikBsBAmBunHkKAggggAACCCCAQAwBGwKZHzAGELsRyKAAATCDmNwKAQQQQAABBBBAIDUB+z0gITA1P65CIFEBAmCiUpyHAAIIIIAAAgggkDUB7/eATA2RNWZujIAQAPkjQAABBBBAAAEEEAiEgO0KqoV5eN97A1EmCoFAsQkQAIutRnkfBBBAAAEEEECggAXoClrAlUfRC0KAAFgQ1UQhEUAAAQQQQACBcAh4u4IyP2A46py3zK0AATC33jwNAQQQQAABBBBAII6ANwTyPWAcLA4jkKQAATBJME5HAAEEEEAAAQQQyL4AXUGzb8wTwilAAAxnvfPWCCCAAAIIIIBA4AXOGHueKSNdQQNfVRSwgAQIgAVUWRQVAQQQQAABBBAIkwBdQcNU27xrrgQIgLmS5jkIIIAAAggggAACSQvYqSGYID5pOi5AIKoAATAqCzsRQAABBBBAAAEEgiJgvwekK2hQaoRyFLIAAbCQa4+yI4AAAggggAACIRCgK2gIKplXzJkAATBn1DwIAQQQQAABBBBAIFUBuoKmKsd1CEQKEAAjPdhCAAEEEEAAAQQQCKgAXUEDWjEUq6AECIAFVV0UFgEEEEAAAQQQCK8AXUHDW/e8eeYECICZs+ROCCCAAAIIIIAAAlkWoCtoloG5fdELEACLvop5QQQQQAABBBBAoLgE6ApaXPXJ2+RWgACYW2+ehgACCCCAAAIIIJCmAF1B0wTk8lALEABDXf28PAIIIIAAAgggUJgCdAUtzHqj1PkXIADmvw4oAQIIIIAAAggggEAKArYraJd6nWRknxEp3IFLEAifAAEwfHXOGyOAAAIIIIAAAkUhQFfQoqhGXiLHAgTAHIPzOAQQQAABBBBAAIHMCdAVNHOW3CkcAgTAcNQzb4kAAggggAACCBStgO0KemSbITK07WFF+568GAKZECAAZkKReyCAAAIIIIAAAgjkTYCuoHmj58EFKEAALMBKo8gIIIAAAggggAACkQK2FZABYSJd2ELAL0AA9IuwjQACCCCAAAIIIFCQAmeMPc+Ue2TfEdKlbqeCfAcKjUC2BQiA2Rbm/ggggAACCCCAAAI5EWBAmJww85ACFyAAFngFUnwEEEAAAQQQQACBbQK2KygDwmwzYQ0BrwAB0KvBOgIIIIAAAggggEBBCzAgTEFXH4XPgQABMAfIPAIBBBBAAAEEEEAgdwK2FZABYXJnzpMKR4AAWDh1RUkRQAABBBBAAAEEEhCgFTABJE4JrQABMLRVz4sjgAACCCCAAALFK8CAMMVbt7xZegIEwPT8uBoBBBBAAAEEEEAgoAK2KygDwgS0gihWXgQIgHlh56EIIIAAAggggAAC2RbwdgV9eN97s/047o9AQQgQAAuimigkAggggAACCCCAQCoCthWQAWFS0eOaYhQgABZjrfJOCCCAAAIIIIAAAkbA2wo4su8I6VK3EzIIhFqAABjq6uflEUAAAQQQQACB4hdgQJjir2PeMHEBAmDiVpyJAAIIIIAAAgggUKACtisorYAFWoEUO2MCBMCMUXIjBBBAAAEEEEAAgaAKeLuCMiBMUGuJcuVCgACYC2WegQACCCCAAAIIIJB3AdsKyLQQea8KCpBHAQJgHvF5NAIIIIAAAggggEDuBLytgHQFzZ07TwqWAAEwWPVBaRBAAAEEEEAAAQSyKMCAMFnE5dYFIUAALIhqopAIIIAAAggggAACmRI4Y+x55la0AmZKlPsUkgABsJBqi7IigAACCCCAAAIIpC1gu4IyOXzalNygAAUIgAVYaRQZAQQQQAABBBBAID0BOyAMrYDpOXJ14QkQAAuvzigxAggggAACCCCAQJoCtAKmCcjlBStAACzYqqPgCCCAAAIIIIAAAukI0AqYjh7XFqoAAbBQa45yI4AAAggggAACCKQlQCtgWnxcXKACBMACrTiKjQACCCCAAAIIIJC+AK2A6Rtyh8ISIAAWVn1RWgQQQAABBBBAAIEMCtAKmEFMblUQAgTAgqgmCokAAggggAACCCCQLQFaAbMly32DKEAADGKtUCYEEEAAAQQQQACBnAnQCpgzah4UAAECYAAqgSIggAACCCCAAAII5FeAVsD8+vP03AkQAHNnzZMQQAABBBBAAAEEAipAK2BAK4ZiZVyAAJhxUm6IAAIIIIAAAgggUIgCtAIWYq1R5mQFCIDJinE+AggggAACCCCAQFEK0ApYlNXKS/kECIA+EDYRQAABBBBAAAEEwitAK2B46z4sb04ADEtN854IIIAAAggggAACcQVoBYxLxAkFLkAALPAKpPgIIIAAAggggAACmRWgFTCzntwtWAIEwGDVB6VBAAEEEEAAAQQQyLMArYB5rgAen1UBAmBWebk5AggggAACCCCAQCEK0ApYiLVGmRMRIAAmosQ5CCCAAAIIIIAAAqESoBUwVNUdqpclAIaqunlZBBBAAAEEEEAAgUQFbCvgkW2GyNC2hyV6GechEGgBAmCgq4fCIYAAAggggAACCORLwLYC6vMf3vfefBWD5yKQUQECYEY5uRkCCCCAAAIIIIBAMQnYVsCRfUdIl7qdiunVeJeQChAAQ1rxvDYCCCCAAAIIIIBAfAHbCtilXicZ2WdE/As4A4GACxAAA15BFA8BBBBAAAEEEEAgvwK0AubXn6dnVoAAmFlP7oYAAggggAACCCBQZAIvL3hdXil5Q2gFLLKKDenrEABDWvG8NgIIIIAAAggggEDiAmeMPc+czLeAiZtxZjAFCIDBrBdKhQACCCCAAAIIIBAgAdsNlFbAAFUKRUlJgACYEhsXIYAAAggggAACCIRJwA4Go+/MlBBhqvnie1cCYPHVKW+EAAIIIIAAAgggkAUB2wpIN9As4HLLnAkQAHNGzYMQQAABBBBAAAEEClnAtgLSDbSQa5GyEwD5G0AAAQQQQAABBBBAIEEBWgEThOK0wAoQAANbNRQMAQQQQAABBBBAIGgCTAkRtBqhPMkKEACTFeN8BBBAAAEEEEAAgVALMCVEqKu/4F+eAFjwVcgLIIAAAggggAACCORSwHYD5VvAXKrzrEwJEAAzJcl9EEAAAQQQQAABBEIhYAeD0ZdlSohQVHlRvSQBsKiqk5dBAAEEEEAAAQQQyIWAbQVkSohcaPOMTAoQADOpyb0QQAABBBBAAAEEQiFgWwHpBhqK6i6qlyQAFlV18jIIIIAAAggggAACuRJgMJhcSfOcTAoQADOpyb0QQAABBBBAAAEEQiPAlBChqeqielECYFFVJy+DAAIIIIAAAgggkCsB2w1Un8e3gLlS5znpChAA0xXkegQQQAABBBBAAIHQCtjBYI5sM0SGtj0stA68eOEIEAALp64oKQIIIIAAAggggEDABLytgEwJEbDKoThRBQiAUVnYiQACCCCAAAIIIIBAYgK2FZBuoIl5cVZ+BQiA+fXn6QgggAACCCCAAAIFLmBbAZkSosArMiTFJwCGpKJ5TQQQQAABBBBAAIHsCTAlRPZsuXNmBQiAmfXkbggggAACCCCAAAIhFLDdQGkFDGHlF9grEwALrMIoLgIIIIAAAggggEDwBOgGGrw6oUTRBQiA0V3YiwACCCCAAAIIIIBAUgK2FZDBYJJi4+QcCxAAcwzO4xBAAAEEEEAAAQSKU8AGQLqBFmf9FstbEQCLpSZ5DwQQQAABBBBAAIG8CthuoFoI5gTMa1Xw8AoECIAV4HAIAQQQQAABBBBAAIFkBGwrIN1Ak1Hj3FwKEABzqc2zEEAAAQQQQAABBIpawLYC0g20qKu5oF+OAFjQ1UfhEUAAAQQQQAABBIIkYAOgloluoEGqGcpiBQiAVoJfBBBAAAEEEEAAAQQyIEA30AwgcousCRAAs0bLjRFAAAEEEEAAAQTCKGBbAekGGsbaD/47EwCDX0eUEAEEEEAAAQQQQKCABGwA1CLTDbSAKi4kRSUAhqSieU0EEEAAAQQQQACB3AnQDTR31jwpOQECYHJenI0AAggggAACCCCAQFwB2wpIN9C4VJyQYwECYI7BeRwCCCCAAAIIIIBAOATOGHueeVHmBAxHfRfKWxIAC6WmKCcCCCCAAAIIIIBAQQnQDbSgqis0hSUAhqaqeVEEEEAAAQQQQACBXArQDTSX2jwrUQECYKJSnIcAAggggAACCCCAQJICdANNEozTsy5AAMw6MQ9AAAEEEEAAAQQQCKsA3UDDWvPBfW8CYHDrhpIhgAACCCCAAAIIFLgA3UALvAKLsPgEwCKsVF4JAQQQQAABBBBAIDgCdAMNTl1QEhECIH8FCCCAAAIIIIAAAghkUcB2A2VOwCwic+uEBQiACVNxIgIIIIAAAggggAACyQvQDTR5M67IngABMHu23BkBBBBAAAEEEEAAASNgWwGZFJ4/iHwLEADzXQM8HwEEEEAAAQQQQKDoBWwAPLLNEBna9rCif19eMLgCBMDg1g0lQwABBBBAAAEEECgSAbqBFklFFsFrEACLoBJ5BQQQQAABBBBAAIHgC9jRQB/e997gF5YSFq0AAbBoq5YXQwABBBBAAAEEEAiSgO0GyneAQaqV8JWFABi+OueNEUAAAQQQQAABBPIgQDfQPKDzyHICBMByJOxAAAEEEEAAAQQQQCDzAgTAzJtyx+QFCIDJm3EFAggggAACCCCAAAIpCdANNCU2LsqgAAEwg5jcCgEEEEAAAQQQQACBigQIgBXpcCwXAgTAXCjzDAQQQAABBBBAAAEEHAG6gfJnkG8BAmC+a4DnI4AAAggggAACCIRKgOkgQlXdgXtZAmDgqoQCIYAAAggggAACCBSzAN1Ai7l2g/9uBMDg1xElRAABBBBAAAEEECgigZcXvC6vlLwhXep1kpF9RsR9M+022qVup7jncQICiQgQABNR4hwEEEAAAQQQQAABBDIkkOh3gG5QdMKfTh7PgkAmBAiAmVDkHggggAACCCCAAAIIJCFgvwPUYOdv3bPBz95OjxMArQa/6QoQANMV5HoEEEAAAQQQQAABBJIUiPUdoD/86W2PbDNEhrY9LMkncDoC0QUIgNFd2IsAAggggAACCCCAQNYE/N1AowU/+3ACoJXgNxMCBMBMKHIPBBBAAAEEEEAAAQS2Ctjund6unZ3rdjRHdeAXXb4vXShPzXnOrMf7hwAYT4jjyQgQAJPR4lwEEEAAAQQQQAABBOIIVNSaF+fSqIejfScY9UR2IpCAAAEwASROQQABBBBAAAEEEEAgGYFMhkACYDLynBtPgAAYT4jjCCCAAAIIIIAAAggkKUAATBKM03MmQADMGTUPQgABBBBAAAEEEAiTQKZCIC2AYfqryf67EgCzb8wTEEAAAQQQQAABBEIqYAeESef1H9733nQu51oEIgQIgBEcbCCAAAIIIIAAAgggkDmBTLQCEgAzVx/cSYQAyF8BAggggAACCCCAAAJZFEi3FZAAmMXKCeGtCYAhrHReGQEEEEAAAQQQQCB3Aum0AupcgvoNIAsCmRIgAGZKkvsggAACCCCAAAIIIBBD4KZJo2XmqtkxjsbeTQCMbcOR1AQIgKm5cRUCCCCAAAIIIIAAAgkLpNoKSABMmJgTExQgACYIxWkIIIAAAggggAACCKQjkEoIJACmI8610QQIgNFU2IcAAggggAACCCCAQBYEkh0Q5sg2Q2Ro28OyUBJuGVYBAmBYa573RgABBBBAAAEEEMi5QLKtgATAnFdR0T+QAFj0VcwLIoAAAggggAACCARJIJlWQAJgkGquOMpCACyOeuQtEEAAAQQQQAABBApEIJlWQJ0CQr8DZEEgUwIEwExJch8EEEAAAQQQQAABBBIUSLQVkACYICinJSxAAEyYihMRQAABBBBAAAEEEMiMQKKtgATAzHhzl20CBMBtFqwhgAACCCCAAAIIIJAzgURCIAEwZ9URmgcRAENT1bwoAggggAACCCCAQJAEZq6aLTdNGl1hkR7e994Kj3MQgWQFCIDJinE+AggggAACCCCAAAIZEojXCkgAzBA0t3EFCIAuBSsIIIAAAggggAACCOReoKIBYQiAua+PYn8iAbDYa5j3QwABBBBAAAEEEAi0QEWtgATAQFddQRaOAFiQ1UahEUAAAQQQQAABBIpJIForoM7/p4PAsCCQSQECYCY1uRcCCCCAAAIIIIAAAikIRGsFJACmAMklcQUIgHGJOAEBBBBAAAEEEEAAgewL6IigOjKoXQiAVoLfTAoQADOpyb0QQAABBBBAAAEEEEhRwN8KSABMEZLLKhQgAFbIw0EEEEAAAQQQQAABBHIn4A2BezbtL2d3PT13D+dJoRAgAIaimnlJBBBAAAEEEEAAgUIRsAPCEAALpcYKq5wEwMKqL0qLAAIIIIAAAgggUOQCN066XWatmiMNqzaQWwZcX+Rvy+vlWoAAmGtxnocAAggggAACCCCAQAUCOhCMDgjTqlZL+fuuf6ngTA4hkLwAATB5M65AAAEEEEAAAQQQQCCrArYbKBPBZ5U5lDcnAIay2nlpBBBAAAEEEEAAgSAL3PSNMyXEytlmIngdDZQFgUwJEAAzJcl9EEAAAQQQQAABBCIESpauMNslS5ZH7GcjvsArJa+bk45sc1j8kzkjKYE2jRuY89s0qp/UdcVyMgGwWGqS90AAAQQQQAABBAIgoKFv3PS5UrKkLPwFoEgUAYGYAoO6tTfHBnXvGPOcYjtAACy2GuV9EEAAAQQQQACBPAhEC341a9Y0JalRo0YeSsQjEYgusHbtWnOgtLTUPSFMQZAA6FY7KwgggAACCCCAAAKpCIybNsdp9ZvnXtqkSRPR/7EgEHSBxYsXi/7PLhoEi701kABoa5tfBBBAAAEEEEAAgaQFvOGP4Jc0HxcERMAbBIs9BBIAA/JHRzEQQAABBBBAAIFCE/CGv/bt2wtdPQutBimvVyAsIZAA6K111hFAAAEEEEAAAQQSFhj13FvmXFr+EibjxIAL6PeB8+aVdWcePmg3KcaRQgmAAf8jpHgIIIAAAggggEAQBWzrH+EviLVDmdIRmD9/vugAMW0a15fh++yWzq0CeS0BMJDVQqEQQAABBBBAAIFgC9jWv169egW7oJQOgSQFir0VkACY5B8EpyOAAAIIIIAAAmEXoPUv7H8Bxf/+xdwKSAAs/r9f3hABBBBAAAEEEMioAK1/GeXkZgEUsK2AxdgNlAAYwD84ioQAAggggAACCARZgAAY5NqhbJkSmDJlirnVqOMGZ+qWgbgPATAQ1UAhEEAAAQQQQACBwhAoWbpCHhn3hdSsWVPatWsX2EL//ttvMvurCaZ8tRo0lJ06dA5sWcNQsHWrf5HvZ0w1r9q4dVup37R54F+bABj4KqKACCCAAAIIIIAAAtkWKJQAuGFtqYw+92TD0bnfHnL0xSOzTcP9HYGFs6bLl++8LkdddEWEx4JvJ8nTN40y+/Y/+QzZ7ZChEceDuGG/Ayy26SBoAQziXxtlQgABBBBAAAEEAipAAAxoxQSgWO8+er989c4bUr12Hbn4nkcjSkQAjODI6wYBMK/8PBwBBBBAAAEEECgsAQJgYdVXLkv7n8vPlxU//xg1AP68YK68+9iDpjj9Dj5cuuy+Zy6LltKzaAFMiY2LEEAAAQQQQAABBIpJgABYTLWZ2XepKABm9km5uRsBMDfOPAUBBBBAAAEEEEAgwAKZCID6fZ7+r1b9hrL9Djtk5W1jfQOog8OsXrFMajvP3m777bPy7Gg33bTxVylduVJqOwPSZOudoz3X7tu4YYOsX7PaPL/SdtvZ3XF/bblr1KkrVapWrfD8TAVAW0fVataSHatVr/CZsQ7+tnmzrFm5PK16JgDG0mU/AggggAACCCCAQGgEUg2AKxcvks9ee0FmTPhYNm5Y73o13KmltOzSXfY57hTR/+D3Lp+++pxM++RDs+uEkaNMYPQe1/Uf586SNx+40+ze44hjpfueg8y6PwDufexJ8v4TD8n8KV+b4/pPi05dpc9+B0nPgfu5+zK9MuvLT533flEWzZ/j3rp1t17S/7CjpIoTbsY8eJfZf/TFV0qD5i3MesnUyU53yQfM+qBhp0nHnXdzr7UrGsweHXWFaFhq27OPHHDK2faQ+6sjb3743ONSMm2KrFrys7s/3nv/um6dfPHWKzJ53HuyxgnLdtHA3qxdR9n7mBOlUcvWdrd89PwTMuvLz2TZjz+4+7Reddn/5DOlXa+dI+ppgFNPPbbWk71A3+Pb8e+bbwiXfF9id5s6b92th/n7qN2gkbvfrnzlDDgz6f23pPKOVWX4tbc6ZX5Xpjp/M9/P+NaeYkaA1WdGc3RPirJCAIyCwi4EEEAAAQQQQACBcAmkEgBXLV0s//vbn0QDSaxFBw457rKrpHn7Tu4pbz9yn3z93hizfe6t90adOkAD3TM3/92cc8ApZ0m/wUeYdW8AdG8YY6X3oAPloNPPkR0qV4lxRgq7t2yR9598SL4Y82rMi/U7uJmff2KOn3HdbdK0bQezPmPCeHn5rlvN+pBzLpJeex9Q7h4aom87+wSzX4PNsZf+NeKceZMnyst33hIRtiNOcDb0+YecdYFUrV7DPbR500Z5+sZR8sOsae6+aCuHnn2B9B50kDn02n2jZerH46KdJkdecLl0G7CXVDQITOmqlU4djhJv8It2s8PPG1EuOI595n8ywQnYugw44hj57NUXol1q9g06/lTnnGNjHvcfIAD6RdhGAAEEEEAAAQQQCJ1AKgFQA5pteeu+xz7Sc699pXLVarJw9nSZ8dnH8nPJPOPYtkcfOeHKsjCnOzIdALVVasDhxzitSg2cgDNdxr/wlFt/g4Y54eDwxMOBe2GMlakfj5XX7vuXe1RbINv32dV0fdWRMudM/Nw9piuZDIDa2nfvpee692/fexcnrB0g1WvVkSU/lMjHLz3jhvG++w+WwWec5547wWmlHftM2Qie2tqnLZXa8rZ04fcy5+svIsp9+UPPSuUqO8rCOTNNC+PbD9/nBk4Na7q07NxN6jRsHDMAbvn9dxPgF0z9xpxfxfm7GHjUMGnSpp1TxtVOsBwrGmbtoq18Wi67eAOg3ddnv4PNc9etXiXTnb8vb+vrJfc9Xq6l2V7n/yUA+kXYRgABBBBAAAEEEAidQLIBUFuUbjnjOONUv+lO8oeb7oz49k5b6u6++Gw3OFxwx4MmcOgFmQyArbr2dFoY/+p8x1bNrbOFs2fIY9deabZ1/wX//m9Ea5h7YrIrTuvfHRec7oasY0b8WTrt0t+9i4aet5zWzW8+eNvdl8kA+MK/bpTZX31m7r3n0OOdLpsniVSq5D6rdOUKeerGa9wum2deP9oELj3hyRuulu+mTzHnnv+vB0x4cy/0Hbete/Z4Rd8AxmoBnPT+GHnLCY661G3cVE7+6/Vu/eu+LY7lxy8+ZUKrbjdt015O//st7t+QPwDq9VrXdtn06wZ5/Lq/uP9HhlgtqvZ87y8B0KvBOgIIIIAAAggggEAoBZINgOtL18i//niKsdIAePq1t5QLWXMnfSkrnVaruo2amO8BbZfETAbAs264Qxq3alOuzt64/w6Z8tEHZr+3W2O5E5PY8cvSJXLPiD+YK/R7u1OvubHc1V4XPZipALj8p4Vy/xUXmOdpi6e+d7TBbryBTLvAHnr2heaa//7lYrcr5h9uvFMatmhl9tt/li78TuZN+sqENW2Jq9OosT0kqQRAb+vwMZdcKZ12HeDez67o94EPjLzITDGh+07+6z+ckNfDHPYGwF577ydDzrnYXub+ekOmtsTuOXSYe6yiFQJgRTocQwABBBBAAAEEEAiFQLIBUFEevupStwVGv/Xr63TRa9ezrzRzvveraETMTAXAlp27yylX3xC1fn6YOU0ev/4v5tjuhx4p+510ZtTzktmpXSWfv/0f5pKKQuVbD99rBjDREzMVALVr6fOjy95VB8XZx/nuLdry26ZNcvMZZV1ed+rQWU4bdbM5zRuodMfOBxxiBnFp1aWH7Fi94hE5kw2AGuxuOv1o81wzefzd/4toqTQHtv4z8d035J3/3W+2DjnrfOmz78Fm3VveIef8n/O95P7ey8y6diF99pZrzbppET325HLnRNtBAIymwj4EEEAAAQQQQACBUAmkEgC9gciPpQOR6CAmHfvuVi5gZCoAelu4/M/3ttZ1cL7RO+7yq/2nJL398UtPu98XDrvibyZARbvJF2NedkYmfdgcylQA/PzNl+WDJ8vuGe2Z0fZp99fLHnzaHFrx80+mW2y0AXu0a2WnXXeXzrv2j+imae+ZbADUUUMfGFnW8qj31u6bsRZvi+VuhxxpRhfVc70B8KS/XCc6wqp/0W8AH7nmcrO7olDsv44A6BdhGwEEEEAAAQQQQCB0AqkEQEVa6Ay68sYDd7nd+PxwGkKOueTP0qZHb/dQpgJg/8OPln2Hne7e17ui8+PddnZZl0D9vuyM62/3Hk5p3dut9NS/3SQtOnaJep/pn42XV+6+1RzLVAB853//kYnvvhn1eRXt1ABov4/U+fPe+M+/xQ7MEu26/U4cLrsfOjSixS7ZALj0h+/kwT//n7l95357yNEXj4z2KLNvccl8eeiqsoFldCChI86/1Oz3BkCtO61D/7JowVx55OrLzG4CoFNlzoeVW/xIbCOAAAIIIIAAAgggEE0g1QBo7uX8Z+fi7xbIvCkTZf7kSVGnGtDv5fS7OV28AfCcW+6RBs12Mvu9/8yeOEFeGP1PsyvWNBC7HXKE02J0lvcyd/2XZc73epeUfa+nrZFHXXSFeyzVFZ0X75OXnzWXV9QCqHPWvbl1HsBYAfDQP1wkvfcpPw2EttDdcf5p5hneaSDG64ApL5a15ukIn22itIhFe69OTque/1tBtZnvdJ+cN2VSxOif9nr/yKnJBkANmnddVNbl1j8CrH2G/fW2AO5y4KHOtB1lo5wSAK1Q4r8EwMStOBMBBBBAAAEEEAi9QKoB0LY5VPKMRrlh3VpZ4MzjN+7Zx92JyvsPOUr2dVqXdPEGwLP/+e+IycfNCc4/3hAVKwBWFOz+n73zjpOqOt/4q3RYmlQBcZEiHQRFlLaICCqIIiAoKppoTKIxaowlP0tiiibGHjUaUVEUEJAmYF9UBGyASgfp0vsiKKi/+5zhvZy5e2d2Zmdmpz3n83Hvvafdc79n/uDxfc/7wjL50n13mOmQRy5vSEBU6fzFuX710Xsy7elHzdBzr3bOqzlnHv3KhxNecaNb2gIQuQFffzxwJq/PiOvMOTzv+B2bNsozt/7GVNsC8OvZ+TL1qYdNfbR57+x34HyeLQhxZhDpHuZMGe9aBhFUB0FmtEQrAPGbuP9yx4roFCSZv96JwhqqLMx/yxHL/zHN3ZxE9F0vCuRApAAMRSx0PQVgaDZsIQESIAESIAESIAES8BCIVgAiKAnyziHXX6/LrpJO5wb+wW9Pa1t37IAk745+zk2kPuyOv0huq6PuoTp+2n8fka8+fN88hhKAaNScdTpOrzNGPummY4gmRYCO97tCKL3054A7IyJlInedtyAVxDN/vN51ibUFoB3IpevAodJt4DDvcCdy6bvyxjOPmXpbAG5cuUxG3RuwYkKgXXXfQ0FCTieCde9/t/9OEHyldsNGjvvt7bJryyZnzscdK+030rB5K9/zkAf27ZVHfn00sIzNNVoBiLXYUUcvv+sf0sDJG1ioOELxhXtudfP5Iek9vhmFArAQrSIrKACLRMQOJEACJEACJEACJEACSiBaAWhH2cQZsxueeN49a6ZzrlvylYz+2/+ZR9tdc+60ifL+GCcypFOMi+Bt9wadObMtZegTTgAat8Errg0ab58rw9quf2xkoUA0mDfaAsvWi5Zg8ebLw3wLZ70j05993J3aFoC2iMO6kI+vQk5lty+sfzjT9sPBA6bOFoDelAk9h10pnc8PRNrUCbC+yU88KEvmfWSq1KUSOfMe/EXgPCQakG+vnhOp1S523kakmbjmgSfcZlvM3T7qdTnm2GPdNlvk2/8jwI7uCfEPoV+mXHl3HG6QDH7q04+4dbeOfE1Kly1rnikAXSwR31AARoyKHUmABEiABEiABEiABKIVgBAkT950rezbud3Aw/m+lmd0k0ZOGoiyzj/01y39Wt5+6X9u0nQ7kqPt5ojBbbr1lOaduhhhgXFzp04M2pBwAhAdEQ0U/1WqWk3WLvrSPX+HtnCummiPtthWQIxF/jmsHQnZl8z5QD48ck5P57UFIJg9fsNVLhMw6+Cc56t8XA35duVymTdjstuG8bYAxDMSuSOhuxbkx+tw9nnmu9c5aS8WzZ4l3ziut1rs85VTn37YEVz5pglume179jZRTJGjcduGdUaQI6omSjfHOtnVsk4i4fr6ZYtMW4vTu0q9Js2McK91wokSSgDiWyEcEREUBbkiew2/Wuqc2Ei+27NHFs/7MGifEaUV0Vq1UAAqicivFICRs2JPEiABEiABEiABEsh6AtEKQACzozCGA4gcbXB3tC1HU558SBZ9PCvkMAQ6mf/uTNMeSgDCiqbWMr+JIJDO/cX1vq6Sfv0jrbPTPBQ1xhaA6Lvg/TdlxnNPhhyGtAl7d2wzZye9AhCDZk8aKx+MfyXkeG3wCipY+J53rIu7t27WLr5XiLD+TiTO8hUrue128But1Lx7oQQg+sES+5qTN1H/J4GO9V4H3XSnNO14elA1BWAQjogeKAAjwsROJEACJEACJEACJEACIFAcAYhxOAM4ywn2YlueUI+Cs2pdBgwRBGvxFpyVm/vGRPl48vggEQfrFNxFIQAfvHqIGXbOlddKx97nm3sEmHn42kvNfY8hwwUWLNvSiAacf+s59Erf5OFmYBz+wCI2/dn/uGf9MCUEaZcBgwVrnDN1gnmLVwCicuWCz2TmyKeChBHGtujcVc5x3Flfvf9u2bB8iZOb7wxzhs9MZP2B8H7z+afds3NWk7Eadr3oEqnbqIldbe4Ldu2U2ZPHyRfvzCjUBu7t8s42+2UHiUFHBIqZ9syjgvQWWjQAz5pFC+XVf9xtqs++/JdyWp/+2sVcIdDzx47yTWEB11AEfoHV2Fts0YmANPgteYvt6otv7nZx4Hfh7ed9Zh5ALxE+kwAJkAAJkAAJkAAJZB2B4gpABYV/6MO1c/+e3cYlEefIypQtp82hr865tV1btziWqU1So94JTiLymqH7hmnZtWVzzHOEmT5k04GCfbJ13RqpWLmK4Jth5cwfN8qJqhlaAOpkYLVtw1rJqVpdamCsFUlV+4S7Qpjt3PKtIyR3SE616iaJe/lKOeGGmLYfDx82gWEQMAbuujUbNAw6ixhqAghbBIvBvsLd1rbohhrj1jv7vMexbO7avElKlysnVWvWksrVa7jNJXlDAViStPkuEiABEiABEiABEiCBlCQQqwBMyY9K0qIiFYBJWl7Wv5YCMOt/AgRAAiRAAiRAAiRAAiRAARi/3wAFYPxYJmImCsBEUOWcJEACJEACJEACJEACaUUg0wXggvfelILdO4u9J1Ucl8W23c+OaDwFYESYktaJAjBp6PliEiABEiABEiABEiCBVCGQ6QLQzmVXHOZ2IvuixlMAFkUoue0UgMnlz7eTAAmQAAmQAAmQAAmkAIFMF4BITI5gKcUtVWvVllPO6hvRcKRGWLv4K9P31HP6SU714yIax04lQ+DLL780L7p3cGT7WTKriv0tTAMRO0POQAIkQAIkQAIkQAJZReDe1wJ599q2bZtV382PzS4CFIDZtd/8WhIgARIgARIgARIggRAEXpj1iazZulMaN24slSodTQQeojurSSDtCOzfv19WrVolubWPkxE9OqXd+sMtmBbAcHTYRgIkQAIkQAIkQAIkUIiACsA6deoI/mMhgUwjsGXLFsF/eS0bS16rphn1eRSAGbWd/BgSIAESIAESIAESSDwBPQeIN9ENNPG8+YaSJ5Cp7p8gSQFY8r8nvpEESIAESIAESIAE0p4ArYBpv4X8gBAEMtn6h0+mAAyx8awmARIgARIgARIgARIITcC2AvIsYGhObEkvAir+sOpMi/6pO0EBqCR4JQESIAESIAESIAESiIpA/qIVkr94lRlDERgVOnZOQQIa+AVLy8Szf4qcAlBJ8EoCJEACJEACJEACJBA1AVsEMihM1Pg4IEUI2Ja/TBZ/wE0BmCI/Oi6DBEiABEiABEiABNKVgC0C8Q0Ugum6k9m3blv44eszXfzhGykAQYGFBEiABEiABEiABEggJgIQgSjqEor7nJwc5gkECJaUIgBXT5SCggJ3Xcj3l9eyieTWOs6ty9QbCsBM3Vl+FwmQAAmQAAmQAAkkgYCfEEzCMvhKEoiIQDYJPwVCAagkeCUBEiABEiABEiABEogrAUQKXbN1R1znTORktvUSwiC3ZvVEvo5zJ4lAbu0a5s3ZYO3zQ0wB6EeFdSRAAiRAAiRAAiRAAllDwHuGMRvOgWXN5vJDCxGgACyEhBUkQAIkQAIkQAIkQALZQAAWyvzFKx0r5U7zudnoDpgN+8xvDCZAARjMg08kQAIkQAIkQAIkQAIZToDCL8M3mJ8XlgAFYFg8bCQBEiABEiABEiABEsgUAl7hh++iu2em7C6/I1ICFICRkmI/EiABEiABEiABEiCBtCRA4ZeW28ZFJ4gABWCCwHJaEiABEiABEiABEiCB5BKg8Esuf749NQlQAKbmvnBVJEACJEACJEACJEACxSRA4VdMcByWFQQoALNim/mRJEACJEACJEACJJD5BCj8Mn+P+YWxE6AAjJ0hZyABEiABEiABEiABEkgiAQq/JMLnq9OOAAVg2m0ZF0wCJEACJEACJEACJAACFH78HZBA9AQoAKNnxhEkQAIkQAIkkNIElu5eHtH6lu6KrB8ma169WZFzNq9WdJ8iJ2EHEoiAgJ/wYxL3CMCxCwk4BCgA+TMgARIgARIggRQlYAs5W6wt27MiaMV2W1BDkh+8ovHkqk2DVqTtFI5BWPgQhgCFXxg4bCKBCAlQAEYIit1IgARIgARIIF4E/ISdLepiFXQ5OTkRLTXSfpisoKCgyDkj6VPUJCoKbbGodRSKRdHL3HYKv8zdW35ZyROgACx55nwjCZAACZBAFhDwijwVeNGIO1ugBd9XCiJotwU1JPnBKwgLCvYHrUjb9RrUGOYBglAFIsVhGFAZ0EThlwGbyE9IOQIUgCm3JVwQCZAACZBAOhFQoQdhF6nIswWb3ufkHBV1WpdOHOK1VhWDtlhEndaHe4+KQRWHFzbqF64721KUgJ/ow1J5xi9FN4zLSjsCFIBpt2VcMAmQAAmQQLIIeMVeUdY8FXK4qsDTumR9Q7q/V4WgCsRIxKHXYkhX0tT8FfgJP4q+1Nwrriq9CVAApvf+cfUkQAIkQAIJJADBp5a9cGIvIPAo8hK4FRFNHRCDATfTooShLQppKYwIb8I6UfglDC0nJgFfAhSAvlhYSQIkQAIkkI0EIhF8FHvp98uwheHmzZt9P4CCUCR/0QrHzbKG5NY6zpdRPCsp+uJJk3ORQHQEKACj48XeJEACJEACGUSgKMGn7pp169YxX63PGYQgaz9FRWEoS6EKQlwz3WXUiLFFK01S9XsH903ob4LCL6F4OTkJRESAAjAiTOxEAiRAAiSQKQQg+iavecN8jtetUwUeBJ/eZ8p38zvCEyhKEA7IPd9MkEnuorbwUzqJEIB+og/vy2vZuMQsjvp9vJIACTARPH8DJEACJEACWUAglOhTkUfBlwU/gig/cfPmLWaEn8toJohBuHvmL15ViEo8BaCf8GNQl0LIWUECJU6AFsASR84XkgAJkAAJlAQBir6SoJwd7whnHUw3Mehn9dNdxNm/EXmd9LFYV8y/ZusOWbN9l3Pd6c5B4eei4A0JJJ0ABWDSt4ALIAESIAESiCcBFX62eyctffEkzLlgHfSeHdQzg6nqIhpO+OmOFlcAYm6U/MXOOUKKPsXJKwmkLAEKwJTdGi6MBEiABEggGgKhhB/dO6OhyL7REoAY9LqJwiqYSkIwlLun91ujEYBGUDqCD8UWfXimtQ8UWEggdQlQAKbu3nBlJEACJEACERB4YMHDJlefdoW1j6JPafBaUgT8rILJFoIQaS/kfxIxAgRlyWvVNGR/ir6QaNhAAmlFgAIwrbaLiyUBEiABElACk1ZPc6N5oo7CT8nwmkwCfsFjSloIGqF2JK1DNCz8BGAo0QcrH0peyyYlkjcwmu9gXxIggfAEKADD82ErCZAACZBAihHwunoWJfx+OvyTrP94rfsVddsdL+WqlnefeRM7gQ1z18mPP/wY9URlK5WV4zvWj3pcugzwuoeWhBCExQ+irThFBaCKPj/XTsxL0VccuhxDAqlDgAIwdfaCKyEBEiABEghDIFrhp1NtmLNO8u95Wx+l3RUdpM3wU9xn3sROYOyAUXLowKGoJ8o5vrJc+OKQqMel2oCff/5ZvnlrhezfWiBtL+8QtDyNIKrnBBMVLCbSc35Bi/M8VKtUQXbvPxBUS0tfEA4+kEBGEKAAzIht5EeQAAmQQGYTgPh7YP7D7kfWrVvXnPNzK8Lc5N/9tsBCpaV8tfIy8JVhcmzpY7WK1xgJZLMAPHzgsLxz+3TZvmSbND6nqZzxh+6+NBNlDSyuu6fvIo9UahAXPCIwDAsJkEBmEaAAzKz95NeQAAmQQMYRsM/6wd2zSZPGEX/jgR3fyYRhrxbq3+Oes+WELicWqmdF8QjYArDHvWfLsaUiE9dlKpWR2q3rFu+lKTLK/o2FE4C6XFsIxuISmgjhV7daFenbvjlFn24WrySQoQQoADN0Y/lZJEACJJAJBGzxF43VT7998WtfyRfPBqIgnvbbM+TT/8wxTcd3qC+97u+r3XiNkYAtAC+dflVWWVejFYBAbYtAuITe1v6mqHYgHu6eoV6o5wBDtbOeBEgg/QlQAKb/HvILSIAESCAjCdjiD1Y/WP+iKj+LTBoxTgo27TPDhr0xQmbeMEV2fRMIkHHByEFSpUHVqKZE5wM7vzMWrmgCyfxQ8IP8sO97qVirUvLFkcNl/7YCKVOxrJTNKRv193+/93vzDWUqlnHHpqIARPCf77btlwo1KkqpsqXctUZzE8leF0cAYg04G7hy5SqznEhFYCKsfn48RuR1ohXQDwzrSCBDCFAAZshG8jNIgARIIJMIxCz+HBjbFm2RN2+aZrCccOaJAtfEJRO/ls+fnmfqWg1pK6f88jRfbIe/Pyxv3jhVfvrxJ2lzaXup3aauLHzhc9n0xbfy3fb9ZkzFmpWkfqcTzBx+Qmrft3tl0ZiFsnbW6qAAKVVPrCZ12hwv7UZ0lHJVypm5dq7cIbMfyDf3DbvkmjbzYP2ZP/JTQUAblPZXnSr4pqDiCLu3bpkm3ztCs2rDatL9rl5BzWtnfSPLpy2Vncu3u+vBNxzfoZ6ZD0LJW2BBXfXWciMUu/9fL2eNs2Tzgm9Nt/qnnyDNL2rljK8vsQpABFGZ+bspcvjgYSlVppT0ebi/lCrnL9rWfbhGFo763Kyh5aA20rhPM3fZEH2Lxi2U9R+tFTDVUv2k46TBGQ2l9bD2hcRgLHv9zh9nSMGWfe7/ZMD7sL8ovf91npSvVsHch/sDEQgxGM4dtKSEn64zmoTwOoZXEiCB9CFAAZg+e8WVkgAJkEBWELADvhTH7VMhzX3oQ1k5c7l57HpnnuTmNRbbWlOmQhm5eNylUrpcaR3iXg/tPyRjLxplnpv0bSbffrbRFX5upyM3iGR5zr/PF4gpLQWb9xlBc3D3Qa0qdEUwmry/9JaazWsLRMiY/i+aPqgfNO6y4P6OuBt/yWjR+bCmzjd3C+oDy+Yb171u6loMbC0drzvd3B/67pB88vhsWf1uwNoUNOjIA1h0uSNPGnRuGNQMsQzRjFLj5JqyY9n2oPYz/tDNCXzSLGYBiEk//ucs+eadlWb+cGc03719piPEN5p+/f47UKo1qm7u927YIx/9/f0g4WcarD8QZxDGEMhaYtnr8UOO7onOp9eBo4cai68+h7ralsDbTrlJmlc7KmgxJpHunqHWhHq6goajwzYSSG8CFIDpvX9cPQmQAAlkHIEHFjwsS3ctd6J8Rh7p0wsBomfshQEBh7ahU690hd77d70lG+etN0O63NZDGvVq4h0utijQRriLNuvfwrHqlJdti7fKssmLtUlaD20n7a8+1X1+7843HdG4wTznnnWSNO7dTEpXKO1YJbfKmvdXuSLFPos468/vyPrZgXyF/Z+92LUkYZLda3fJtGsmuvP7icRF476U+f/71PSB9amOk+8Q5ZPHPnYsf0vMPYQeUmDUaFZT4Ja67qPVQcIQKRkgaLXYAlDr0P69I2yR9uGS168QBHKJ1QKIuWFZhEUNpWG33EIWTNTDpXPiZWNwK8c1qSHnPXmhuYflb9q1EwUiEAVrbHNZe6lSv6rs27RXlk9dYqJ0og372O+Zga4rbix7jf2CBVCtyhDJzS9shddIw66NQloxTQfrj30m8PmeT5k8fpt375W5K9YWSstgDUv4LV1BE46YLyCBpBCgAEwKdr6UBEiABEjAj4C6fkYb7dM7F9wW5zz4oalu1q+FdPrdmW4XuBB+cN+75rlmi1rS99EL3Da98YqCeqc1MC6kcE/UsiZ/lWNxyjePtiBDQvRX+71g6iE2IOaOKXWMecYfCK/XHRGjefMuevkSqVQ7R755e4V8/K8PTL/Trj9DTr6gpTsGYlMD2GjlgOcHS+X6VfTRcXedagQmRN7gCcONwIEb5PTfTDJ9UN/v2YHmXe4g58aeG5FRYX3T4hWAeX/ubVwpf/7xZyN8KtcLvN8WgBBfkUYB7fNIf9cN9ueffpbXh491La1DJlwuZSsHn1FcMt5x4X0m4MJ7+o1dpOn5zc1Sl01x+DwRCPBTt309ybuvtyv40eHHQz/KnH9/IGve+8b0t/nGsteYzLYqRxIF1CzA54+6glY5cJJU39/Gp0fJV9EVtOSZ840kUBIEKABLgjLfQQIkQAIkEBEBFYCxWP/wIhVDuO/zSD+p1bIObk2BQBs/eLQrwGBFgjXJLl5RMOAFR2wdETt2P1v4aPTLH/b9IOMufsl0gwDs+9gFhYKtwAKJM4IQS0iDgDOECDgyYWggZQXO1/W87xz3VbbVUis739xVmvQ92Twe3HPQfBMebBHy0f3vu6IqIvI6AAAOvElEQVSn2596yok9TtLhR6+Oe+nM309xLWQXjnKsgHUDVkBbAMKS2fX2nkfHWXc2B6u6yNuLXx1mgrRox69enu+c7/vCPNrfp+1Tr5kge9buNo+2QLTfr4Jax+j1e4fRa86+o8Bdd+ArQ819LHuNCeIlANUVFAKwRZkucvDQIbO+3JrVBQnatazZtktv3SvOCCaq0AqYKLKclwSSR4ACMHns+WYSIAESIAEPgave/7Wpad++nacl8sc963bL1F9OMAMgsC58YYjIUQOcqf/sybmydNIicw+3zk43HLUQotIWBbZ1zwyw/sy4YbJ7Ls52M4XVTYOQYDwsVcd3rG/O+4VLQG8L12FTRxgXQtui2PbyU+TLl+abFdiCbPV7K2X2/bNMPYLdaIAYWzBdMslx17Qid1qfIV+/skAWOEFuUJAeA66pKLYARBqNkwcctUqaDkf+2AIMYtq2eNr9vPe9/n5ukJUPEVsnXTnOdKvduo6c81A/d4htzczNc8TonQExags7uGCe+/gAd4z3Bi6mGsRm6BTHLbh86Zj3Ol4CEGtVK6DfWUDvtxT17CcK12zd4TvMKyq9Y+8dzJQpvuBYSQJpSoACME03jssmARIggUwjYAd/iUUAIlrmojFfGjwQgBAL3rJzxQ73jB7a9Cyb9rMFYK1WtU1USm2zr7ZlbuhkR1A45/xQEK0z/5637a7u/YndGxk3ygadTzTn59wG58bOW3j2P88VuDNu+XKTvP2H6aZb30f7y4LnPzciBi6dQyZdLsccc4wJfrImP+DeqOuAS+XoviPt6SO6h7ss3GZRbAF41t/6CFxh/YotANUS6tcvkjpbpF34kmONrBOwRiKfI/ig9PqHI1IdQY2yY9k2meGk94i24BxgtdzqQQKwOHudqgIwWh7sTwIkkD0EKACzZ6/5pSRAAiSQ0gRUAMZy/g/BQF67+GXXvTPSD7ZFD8bYAlBTSPjNlX/327Jh7jrTpMJL+239erPMfegjNzCJ1usVAq77Pb1caxvqbeulBpZZ+OLn8tXoBWYYxBWicmqwF0TBrHJCVfeb7bXawkTfGclV34u+tgA8/+mLBOkU/Eo8BaBtzUSaDqTrwJnDcQNfMvsKi+rFr17qWhnXfrBaPvzre37LClungjbWvbY52+63YV8eolGDwYRLCRFiKKtJgARIIGICFIARo2JHEiABEiCBRBKIhwCEGIMo0wKRFa5oIBakB0CwFi2xigKdR5zzdTtXOdbGT9c7/22QrV9vcZv0ps/DzhnFVkfPKMIFEq6QEFsQXepOquLOtnghmAmsWGoh1LQMmNtOLQEOnW8JThuh7/decW5RhZ4tANVi5u2P53gKQOQCHHPBi+Y1WMsFIwfJps83yrt3zDR1iO7Z7sqO5h5/Ns93oofeFogeCgte84tau23hbmo7zJH7MNa9pgAMR5ltJEACqUiAAjAVd4VrIgESIIEsJRDrGcBZ9zqpFD5ea+h1/r0TJOW8QJAUP5wHdx+Q8UNecZtsIRarKMCkSG6OAhdNLYgAuunzDTJ/5Gdu8vCWg9tIh2s6aReZ/5zjwjo24MIKC9+0X000bRq50raGQRRCJCEFBMogJ6+hnXx84qVj3KiaxXHNTIYAxHfYqSsQuXSJSUi/Ak1GEOKbtSDn4qQrAucG7bQa2l7UNda9jqcAXLBgoVkuUkGwkAAJkECiCFAAJoos5yUBEiABEoiagOYAbNKkscAVNJpiR9HEuMHjh7spBkLNA9dBuBCinHR2Eznzjz3MfSyiAAIU0SwRtKTjr06XFhcXtkjZFi1vKgq4jr518xtmHRB4KmhtC5y9bkS0/G77fieaaHDQFExg5yPsfncvJzddrpnX+wdCb+WMZVKlYVVpO7yDIAopSrIE4PYlW2XmjVPNGtoMby9LJywy7p9+Z/QgiEefe/SsY6gE7DgTOeP6yYYVBGSX2/KkUp2cuFoA7d+QWXyUfygAowTG7iRAAsUiQAFYLGwcRAIkQAIkkAgCsbiBLpng5Ij77zyzrFCJxL1rhlvme396061WC1osAnDrV46AuyUg4OB6OXDMMPG6om5Z6AR2uTUQ2KXFwNbS8brT3TXYFj6tNJFIx17mRjNdMX2pzHtktjab66m/7uy4PwaSkGuDN1ch3FzLVS2vzeaKgDjTfxvIFYgKpEeAqERJlgCE6+yUX4wvdH7SdnE1Czzyx7YYQjR3v6uXe0ZQ+9m5AiEA+z/n5Gd0rLOx7DXmttN+1Du1gZz19z76yqiuPP8XFS52JgESiIEABWAM8DiUBEiABEgg/gTUChhVLkCPYLBTIYRbIcTWhGGvyMHdB023jtc6FrtBrWMSBZjz9cuPJjSH1Sq3Z2Op17GBSTuAqJ6fPTXXfadG+7TXOefBD2TVWwGXR9R7LUt7N+yRKVePt4eIb65Ch8tbt0xzzx5CSJ76m84mHQVcYDd+st61rmGyJn2bSeebj54VLI4AhPg+5tijbq9Bi/R5aHVJu0J5GNHNTvquw0KlskAqCLiB6plOpIM45erTTICc3at3maisy6ct0Wkc618PadSriXmOVQAiyfyr57/gzt3qkrZS4biKzp41FW8ie7eT50bFH6rp/umBw0cSIIG4E6AAjDtSTkgCJEACJBALAbUCYo5IXUG3Ld4ib/5+mnktrG2DXrtMSpUtFdEyFo5yomy+HIiyCcsXEokfPnBYxl40yozX4Ct+k4WKArpj+Xbjbug3xq5rc2l7aXtFh0KCCW6fOM+o5cxbu8tJvZvqo7mOHzLaFZHeIDZ2RyScR0oKTaBut9n3ddodL2f9tY/JPaj1xRGAOjbSa95fekuDzg0LdbfP1qGxqAibG+etN+kwVAQWmvBIRauhbY041PZYBSDmmXnjFNm+ZJtOaa52PsWgBp8Hdf1k9E8fOKwiARKIOwEKwLgj5YQkQAIkQAKxEpi0eppMXhNwo4wkJyBcP+ECiuKX2D3ceiCQJo94ze2CYDDVT6ohYwYEIlGGcye1g87YieAxGc4ALnCCvXz72QZ3br1BlM3WjvhDTkC/AhGDyJpa7Hx4Wjf3kY9k5fRl5rGdIyLbDD9FmwpdkUweyd6Xvh44S2d3gGBue2UHk6y+dLlAHkNtt3PvXfDcIGNR0zb7akcBtesjue953znumUNvf1tg9/7XeQKRGq7gHCisq2tnrS7UDSIZ0UMbdsl1XWnRCWI/1r3+btt+I7Kx51o63eDkU+wfyKeodX5XTf5O8edHh3UkQAKJIEABmAiqnJMESIAESCBmAuoKiomicgeN+c3xnQBibu/6PXJw1wEpX72CQIh4hVZ83xh+NogkuJCiIAhKpZo5hc7LhZ8h9VsR8GX/lgKBuC9TsYz5zgrVKwYJv0R8BayWSL9RNqeclKtcLuz7CgoKBK6fuKLQ9TMRO8I5SYAE/AhQAPpRYR0JkAAJkEBKELAtgeksAlMCJheRMgQg+mD5Q2levZnc1v6mlFkbF0ICJJD5BCgAM3+P+YUkQAIkkNYEKALTevu4eA8BO+AL3T49cPhIAiRQIgQoAEsEM19CAiRAAiQQCwFbBGIeWgNjocmxySDgdfmk+EvGLvCdJEACIEAByN8BCZAACZBAWhBAdNClu5a7wWGQKB7/1a1bJy3Wz0VmJwGv8IPLJ8Rf82rNshMIv5oESCDpBCgAk74FXAAJkAAJkEA0BGgNjIYW+yaTgO3uiXXQ6pfM3eC7SYAElAAFoJLglQRIgARIIK0I+AlBfAAtgmm1jRm3WK/FDx/IQC8Zt838IBJIawIUgGm9fVw8CZAACZCAVwiCCM8I8ndR0gRCCT+6e5b0TvB9JEACRRGgACyKENtJgARIgATSggCFYFpsU0YtEqKvoGC/yeWHey0856ckeCUBEkhFAhSAqbgrXBMJkAAJkEBUBBAgZvKaN0yQGL+BGjAmJ6eSCRzj14d1JBAJARV6dhJ3jKPoi4Qe+5AACaQCAQrAVNgFroEESIAESCBqAir6MBDRQbXoP8S1HsLQW+AiSjHopcLnUARCiT70198bo3qGosd6EiCBVCNAAZhqO8L1kAAJkAAJhCWgws8r+jAo1HkruIeihBKDaGPwGFBgUQKh3DvRTtGnlHglARJIRwIUgOm4a1wzCZAACWQZAT/RBwTF+Yd4ODFIV9Es+2FZnxtO8BX3t2ZNz1sSIAESSBkCFIApsxVcCAmQAAmQgE0gnqLPnte+xztgSVy2Z0WQG6n2oSBUEpl3DefWia/F/1xACWVVNo38QwIkQAJpSIACMA03jUsmARIggUwloKIP3+d18SyJf4irdTCUIMS6cH4QhWcIDYa0+GOLPSxYn+3FU/DZNHhPAiSQyQQoADN5d/ltJEACJJAmBFT4eUXfyVWbGktMsgJsRCIIgdgWhXiG5ZCl5AmosNPUDFiB1nlXYws+tCXrN+ZdF59JgARIINEEKAATTZjzkwAJkAAJ+BLwE33oWJxzfb4vSECluoxi6nBWQn21upDimRZDpRL7VUVdJEIPb6PYi505ZyABEsgcAhSAmbOX/BISIAESSHkC6Sj6ioIarSjEfGoh1GugrpJ5lV1nKrLsj4o7fDYEXuAaSLJut5kGnz8Uez5QWEUCJEACFgEKQAsGb0mABEiABBJDwE/4pbKlLx4U8M0o6tYaicXQ+14Vg3rVdlgTtXjbtD5Vrl7RpqIO67Pb7Pui1q4iT12E0Z8unEVRYzsJkAAJBAhQAPKXQAIkQAIkkDAC2Sj8IoHpFYcYA4GIooLRPBTzTzhRGK6tqNdFItIi6RPuPSru0AcCD0XrKPIMDv4hARIggZgIUADGhI+DSYAESIAEvAQgbiBi7KTrmW7t8zKI17OfUMTcKhZxHw/BiHkSVVS86fwq6vBst1HcKSFeSYAESCCxBCgAE8uXs5MACZBA1hCgtS91tlqFo9+KYhGMtmDzmxt1FHKhyLCeBEiABFKDAAVgauwDV0ECJEACaUuAwi9tt44LJwESIAESyEICFIBZuOn8ZBIgARKIBwEKv3hQ5BwkQAIkQAIkULIE/h8AAP//sl2MswAAQABJREFU7N0HuBXF3cfxv11pIgiIFWkiIHbscm0R7L0XLLGXWKJJjG9IjIkajVFjb9hibyhi92JFFAsCForYaAqogL28+5/LLHP2nn72nLPlu88T7jlbZmc+c97n8ffO7Oxiv3qbsCGAAAIIIFCEwHtffiDvzf1AHp463D+71wo9ZfcuO0uvtj39fXxAAAEEEEAAgWgKLEYAjGbHUCsEEEAgSgIa/DT0afizG8HPSvAXAQQQQACB+AgQAOPTV9QUAQQQqLkAwa/m5NwQAQQQQACBqgoQAKvKS+EIIIBAPAWyBT8zzdOb7slUz3j2KbVGAAEEEEBABQiA/A4QQAABBHyBhz58lOf7fA0+IIAAAgggkDwBAmDy+pQWIYAAAiULEPxKJuMCBBBAAAEEYilAAIxlt1FpBBBAIByB4FRPFnYJx5VSEEAAAQQQiKoAATCqPUO9EEAAgSoKEPyqiEvRCCCAAAIIRFiAABjhzqFqCCCAQNgCBL+wRSkPAQQQQACBeAkQAOPVX9QWAQQQKEuA4FcWGxchgAACCCCQOAECYOK6lAYhgAACiwSCwU+P6Osc9lhzl0Un8QkBBBBAAAEEUiNAAExNV9NQBBCIsoAGtTDfr0fwi3JvUzcEEEAAAQTqJ0AArJ89d0YAAQR8gSOeO15u3uZq/3u5Hwh+5cpxHQIIIIAAAukQIACmo59pJQIIRFjgwjcvFQ1uZ69/WkWjgLzLL8KdTNUQQAABBBCIiAABMCIdQTUQQCCdAm5oK/fZPLcMVeRdfun8LdFqBBBAAAEEihEgABajxDkIIIBAFQSaBbe2Pc0oYLG3anb9Cj3NAi9hPktYbF04DwEEEEAAAQTiIUAAjEc/UUsEEEiYQDC82eYV8xxg8Dk/RvysHn8RQAABBBBAoJAAAbCQEMcRQACBkAVyhT+9Tb7nAAl+IXcExSGAAAIIIJBCAQJgCjudJiOAQP0ENMTpoi+5Np2+qSEwuLmhkRG/oA7fEUAAAQQQQKBYAQJgsVKchwACCIQgoK97yLcFA2Bw1K/chWLy3ZNjCCCAAAIIIJAeAQJgevqaliKAQJ0F7OseClVDnwMMBj9G/QqpcRwBBBBAAAEEihEgABajxDkIIIBAhQLuFM5CRW2x0qby0oxR/mmM+vkUfEAAAQQQQACBCgUIgBUCcjkCCCBQSKCU8OeWpaN+Z6/X/HlA9xw+I4AAAggggAACpQgQAEvR4lwEEECgRIFyw5+OAh699uEl3o3TEUAAAQQQQACB/AIEwPw+HEUAAQTKFii04mehgnVBmN3X3Fl4sXshKY4jgAACCCCAQLECBMBipTgPAQQQKEGg0vDn3opnAF0NPiOAAAIIIIBAJQIEwEr0uBYBBBDIIVDsip85Lm+2mxDYjIQdCCCAAAIIIFCGAAGwDDQuQQABBPIJhB3+7L0IgVaCvwgggAACCCBQrgABsFw5rkMAAQSyCJS76EuWorLu4rnArCzsRAABBBBAAIEiBQiARUJxGgIIIFBIoNrhz73/2eufxuIwLgifEUAAAQQQQKAoAQJgUUychAACCOQXqHb4syuBsipo/n7gKAIIIIAAAgjkFyAA5vfhKAIIIFBQIMwVP92b2emeus8GQPc4nxFAAAEEEEAAgVIFCIClinE+AgggEBA44rnjA3vK/2pDH4GvfEOuRAABBBBAAIHcAgTA3DYcQQABBAoKVLripwa9tdr2kF4r9GSUr6A2JyCAAAIIIIBApQIEwEoFuR4BBFIrUO5zf4zypfYnQ8MRQAABBBCouwABsO5dQAUQQCCOAqWEPzudkwVc4tjT1BkBBBBAAIFkCRAAk9WftAYBBGogUEz4s6N8Wh0bAGtQNW6BAAIIIIAAAgjkFSAA5uXhIAIIIJApcMO7t8hLM0Zl7vS+2ZDHKF8zGnYggAACCCCAQIQECIAR6gyqggAC0RYIhr/VW60mB/bYx1TaBsBot4DaIYAAAggggEDaBQiAaf8F0H4EECgooO/5e3jqcHlv7gfm3C1W2lSOXvvwgtdxAgIIIIAAAgggEDUBAmDUeoT6VEVg6udzTLlTZ82uSvkUmlyB97+a6AW/9/0G9lphLVlr+R7+dz4UL9ClY3vp0qFd8RdwJgIIIIAAAgiELkAADJ2UAqMioKGvccIkmTqrKfxFpV7UA4G0CzT07iYNfQjRaf8d0H4EEEAAgfoIEADr485dqyjQOH6iF/wmZ9yhVatW5nvLli0z9vMFAQRqJ7BgwQKZP3++f0OCoE/BBwQQQAABBGomQACsGTU3qoXA0JGj/RE/DX2dOnUSQl8t5LkHAsULzJw5U/R/diMIWgn+IoAAAgggUH0BAmD1jblDjQRs+CP41Qic2yBQoYAbBAmBFWJyOQIIIIAAAkUKEACLhOK0aAu44a9r167Rriy1QwABX8ANgYMb+rNIjC/DBwQQQAABBKojQACsjiul1lDAPvOnI3+EvxrCcysEQhJwQ+CQfQeGVCrFIIAAAggggEA2AQJgNhX2xUpgyL2Pm/rq8376PzYEEIifwJQpU8wCMYwCxq/vqDECCCCAQLwECIDx6i9qGxCwo3+EvwAMXxGImYCuEDp58mTp0rGdDB7QP2a1p7oIIIAAAgjER4AAGJ++oqZZBBj9y4LCLgRiKsAoYEw7jmojgAACCMRKgAAYq+6isq6Avuh9aONo4dk/V4XPCMRXgFHA+PYdNUcAAQQQiI8AATA+fUVNAwIEwAAIXxGIuQABMOYdSPURQAABBGIhQACMRTdRyWwCPP8n8svPP8sHr48yPK3bryirdF8rG1XOfV98+rF88dkn5niXddaTZVu0zHkuBxCohcDYsWPNbVgNtBba3AMBBBBAII0CBMA09npC2kwAFPluwXy59NiDTY+utfHmstepZ5fUu8/fd4e89NA95prBf7tYOnftUdL1nIxA2AIEwLBFKQ8BBBBAAIFMAQJgpgffYiRAACQAxujnSlWLFCAAFgnFaQgggAACCJQpQAAsE47L6i9AAKw8AL7d+JSMff4Z05k7/fZkad95lfp3LDVItQABMNXdT+MRQAABBGogQACsATK3qI4AAbDyAFidnqFUBMoXIACWb8eVCCCAAAIIFCNAACxGiXMiKRBGAPz111/lm6+/kh9/+F7atFtRFl9iiaLbqs/fff/tN9KmfQdZbLHFir7OnqgLuMybM1varJj7er2H1q1123bi3cRe6v/N9Qyglv31nC9KbpNfcK4PntdXsz+XFq3byFLLLJvrrKz7TZ28a1ut0E6WXGrprOdUa6f1WEwWkxbLLy9LLb1MybfSvv7+G6+/27XP2hfZCtS+mz93rrRcvq0svWxpXtnKq3Sf/tbVQvug1O3b+fPM/30ss1yLrJeG1VYCYFZediKAAAIIIBCaAAEwNEoKqrVAJQFw1scfymuPD/OmPz6bUe2Oq3eRLXbfT9bqv3nWUDd35nR54f475cNxb5ngaC9etefa0m/r7WTdAds3CwefTnxPRtzwX3PqPqefI1rGG0+PkIlvjDb7ll52Oem27obSf6fdZeVuPc1/oL/yyH3e6p6vyoypk+0tZIPtB8mA/Q7NWKkzGAC33ucgeeaOm2TK2Df867Ru6237G1lny239ffbDmKeGm7rod11Apv3Kq5lDbp33+t0fvbZ+Ka8+9rB8NH6s/PDdt+acFVdZzStzG9lk5z1lscUXN/uC//z8008y6tH7m7VFnXts0F82333fqoXBmVOneHV+SGZ+NMVf6dTWb6Uu3WSz3faWXv23sLv8v8Ou+re5pmu/9aVhv8PkhQfulMlvj5FZH08152h/rd6rj2x70BGe16r+dfaDhsTRjz8sbzc+7QX8L+xuae39Pxh0kZ2t9z5QOqy2htmvYeyWv/xefvrxBy8kriAH/ek8/3z74f3XXhFdrEe3nhtuYn4D9pj9+9zdt8ikN14zXw/7y0WyTItFIU0dXnjwLvnM+x1qANRN27DaWr1ly70OML85s9P559XhD5qpwcu2bCV7nnyWDLv6UvloQtPqnN3X20g2HribdOm7rgnExbbVKT7vRwJgXh4OIoAAAgggULEAAbBiQgqol0C5AfDtkU/LY9dfkbfa6zbsIDsdfVLGORqWnrzluox9wS8a5HY+5hQz4mOPaXi4519/M183HrirFzwfsYcy/rZos7wM/uvFMvLe22X8yyMzjtkvGuYOPfeffsh0A6A9J9dfbdNvDj8mI3DlWgXUrfNmu+4trzxyf65ipWu/DWS/M89tFgJnT/9Mhl15SUaIDRaiIdINnsHj5X4fec9t8vKw+wpevuEOO3kmx2acd/OfTzd1Xm2tPp7VUibsZ5zgfDnwD38zQcju0iB31wVD5JP3x9tdWf/udPSJsm7Db8yx//3jXD9cHXfJNbJCp84Z1zxyzaUy7sVGs09D5EmX35hxXEOkrgSrwVw9f3th0/+zQbzR2lFekHvurlsyzg9+0f+ngf4/PdwR5mfuuFFGjxhmTtXQOn3KxIzL9Dfee7OtSm5rRiE5vhAAc8CwGwEEEEAAgZAECIAhQVJM7QXKCYCfTXpfbh1yll9ZHYXqu0WDLLnMMvL+6JcyRgQHHXWCrLfNjubcj98dJ3ecf45/Xc+NNpPem24hy7VqIzM+nCQvPXyvPzKmZepIn93cMGX3aVDsvv5GsoQ3FfJl79ovZ82wh8xfHaHZfLd9ZPkOHb0wMcEfpdOD+3phS0dhdMsWADUEaGhr7U1V1Gt1xNJuDfsf6h3bx341I0vZXgORrc4a9Hr138y7djGZ9NYYb1TvFb+c/c/6iwmCdoeGkuvPPlnmzPjM7GrbcSXZYo/9pN1KK5u26gio9oVu7VZaxQstV5Q0/dZcmOMfHam78U+n+kc33XUvWbPPerKUNwVz/tzZ8tZzT2WMkB53ybVe6FrJP98GQLtD+2ITb3S2XedVZfa0T+SNZx73R9I0HOnrM+w2ygvKz919q/mqxzbdZU8zRfhz732LOuI7ccyr9lQ586Z7zFRU9/+xMOhI7ze3bdNvTk/UKcr//u2B/m9L9wVDovub3sobXdxyzwP0NJnwygvy8JWL6rbRb3aWrt7vbnFvtFZ/F7bf9dzdTzzTBDr9rJsbAJv2iGgf6giiBs3Tr7tT3nxmRMlttWXl+0sAzKfDMQQQQAABBCoXIABWbkgJdRIoJwDe9rc/yKcfvGtqrIFk670Pyhj5eOvZJ2TETVeZ43Y05ecff5T/nnqU/x/92+x/mGzqBSx302mdd5z/Z3/KnwZADYK6BcNUcNTpa++5uCtPPdovTgPHsRdfLa3aruDv02mILz5wl/luRmz22N98DgbA1ddeR/Y94xwzxc9erO3VduumZZ/ojSDZF74XMwKo17n31O+6PX7z1V4IeNx87rtlg+x63Gnms/7jhpo1evfzQuufM567U9Ph3iisHenUkckNd9jZv76SD269dKRKp+YGt4eu+Je8++qLZvfAI4+X9bcd6J/iBkAdlT36n5eZ6Zn2hNnTPpWh/3emH8q0rzTY6uaO5p3wn+tl+RU72suaHbeha+7MGXLNGcea4/r/WNj7d019pTt0+uZNf17kqvt2PuZkr03eVOOF2wv3/09efPBu8+2Iv/9bdHrrj99/J1eddoz/mw0GdD3ZDY7azhMuvc5/rjMYAO3vWYP9V1/MMqOU5bR1YZXz/iEA5uXhIAIIIIAAAhULEAArJqSAegmUGgD1ebSLBjcFN/0P3hMvuyFjOqS2wx250gB48Dnny1xvdM6OGuqza0f+/dJm0x312vEvNZpnpfSzBrGDz/m7fswIgDqKcsxFV8oSSy5pjtl/tHw7Irbj4GO95/12sofMXx15uu6sk8xnd3pqMAAe9Y/LROsY3IZfd5k/uulOPywmAOaq8+effiQ3/OEUcyu3vbrjkqMP8AOSOutCOcHt23lfy3+OP9Tszja1MXh+sd+1rbM+/si7/3c5RxbfHfWCPPTfptGxbQ443Bup28sv3g2AxQRI/Y2svnZfc72OPNpnBX97wRWy4qqr++XqBzWb/ObrZjRNRwh1hFe3688+yX9O8ayh9/u/j9EjHvJG424259h/dMR61+MXhUJ7rf6mT73Sm+7pLRb0duOT8tgNV5pL9NnRHQcfZy/P+OtOldUytWzd3ADYZ/MBstsJp5v97j/lttUtI9tnAmA2FfYhgAACCCAQngABMDxLSqqxQKkB8PNPvMDyx6bAotMrdUGVbJuu9qirRNoVQXUhkWf/1/Qf4fquPLPQS5YLf/3lF/n3MQeZ4KMjbWfc0DRi544Arr/dQBl4xPHNrn7gsgvl/ddeNvsP/+u/mi3MseCruXL5iYPNcfc/yN0AqM+sHXLuP5qVrTs+eW+83P73P5ljOp1x24OONJ+LCYDrbLWN7HLs78z57j/qpNMTdVul+1py2JCLzGc32AWnSJoTnH/cUaQzb7zbH4FyTgn1o448zvpkqrzzwrPeKOVjpuwB+x3iTbfd17+PGwCD0y3tSY3eNE/7XKT7HKAuxjLqkQfsaWbhHp06u3qvvhkLs/gnLPzgjuId+n8XiD7rqdtdF/zFPIO4Zt/1zP/TQRf3Mb+t671pvV7Q09G4q373W3Nu/0G7yXYHH2U+uwHugLOHyJrrrG/2B//RZxVvP6/pd2FGxPc5uNn1uUZny21rsA7B7wTAoAjfEUAAAQQQCFeAABiuJ6XVUKDUADjhlee9Z6IuMTV0R8EKVVmfo9LnqXRzR3uyXadTA+2CGb+75nbvGcHWGSOA2aZSajnulMSTr7i52TL9ugT/f447xNwyVwB0RwaDdfvqcy8onNYUFPT5QX2OULdiAuBW3kqRW+7VFPSC5f7zkN3NLjfoTZv8gVnZMnhuoe9HX3C5dFh1jUKnFX1cw/Hkt143gW/29Gmi/w+A4LOWWtiAfQ/2ViPdzy/XDYC/v+leWXLp5q+scEfm3IA1Z8Y0M93WrrbpF+p90FHSnhttImtttGmzEVHXzHrraxUuPrKpXtsceLgZnR55z+2mSDu66E5ZPuhPf5c1eq9jjt978Xnec5qvu7cv+HntTbaUPU7+vTnPDZD7/f7/zCq1wQLKbWuwnOB3AmBQhO8IIIAAAgiEK0AADNeT0mooUGoAdEdZ7DNNxVT3wSsukvdefcmcmmuKpS3n/v9c4C+OcsxF/zWvVXBHALc/5CizhL493/51A+CpV90qOp3P3dxRtVwBUBc72Wb/w93L/M86HfKSo5ueG9RnxPRZMd2KCYDbH3q0bLzjrn5Z7odsAVCt1KzULdtzaqWWYc73Fk7R1x7YZyYLlZEvAP7x9oezXj56xMPmdRt60A2A+n2et9DM8Gsvz7t66LYHDvYWltnDf/5UR48vP2mweWbPhump496WOy/4Py3SLDTzi3eOnYqsUzp1aud9/z7fLC6jo4KnXXuHP2p97Zkn+AvwmAKK+MfeV091A2C+33w5bS1UFQJgISGOI4AAAgggUJkAAbAyP66uo0CpAfC1Jx6Rp2+7wdQ417Nd2ZrzxNBr/FU4D/3LhbJqj17ZTjP73Gf57EheRgDMEabCCIDuFMBgBd2pgr022cK8203PqUYAnDreCy7/bAouOpUxV3gM1lHPLecF5cFy3DbpMQ1H+t4+ffdex9XXlNV69fZWbp1swpMeDzsAapm6qfkU7xUgk8e+mbH6Z9NRkeCKrO7iNb+7+jYZ9diDZjqpDXd63YWHNz2ruNbGm3uL7pwqFx/VFOr7bb2ttzjMopVP3cWOdJGb5Vq2trfN+Vff+afv9tPNDYDFjMyW2taclfAOEADz6XAMAQQQQACBygUIgJUbUkKdBEoNgJPefE3uvaRpYZbgf/S7TdCXoE8cM8pbwbGTmfr2vve6A325um67n3iGt1z+1u7pGZ/dxU/Ouvk+7zUPS2VMAc01mhZGAHSDXUalvC+fesv+33beH81ufQG6vuBcNzcs6esMdBRIt2JCq56XbQTwy89nytXeCpS66bNrB/zhr+ZzLf757psFcqn3HKbdNPys571vL/ii+lHDH5Dn7mx6P5776gS9zp0CWs4IoJahiwnZZ0j1uz57qL+rV7x3E3447i3dZRbr0dE1u+mUTZ26qZu+fF2fMZwxdbJo2NN3Jep236X/MGFSQ+Fu3qIt+l23vU/7o/eS+E3NZ/3nsRv+6y0E85T57j5T6J9Q4EMpAbCctua7PQEwnw7HEEAAAQQQqFyAAFi5ISXUSaDUAPiF9y626/9wsqmtWc3z/P9462gs1qz27oqZurCJPs+lU+1001caHPSnpv9ID17ohiYt3/7Hvbu/mgFQ62PfLResm77aQp8X0819jUA1AqAGAjtSpfc78bIbvWfeVtSPGZtOe9RnJr+e84W0996xt+vxv2v22oSMC4r4oouk3H1RU+B0n3UMXjrsqn/7r6DY0nvGcSvnGcdyA6C+CmT4dVfIzI+mmBFH+5yle293Kq/ud/vLfeZPXyGi7w3UbeARx8n62w0yn994+jF5Yui15rOuUvvFZ5+Yz2fccLc30rms+az/jHrUC7gLXwC/0Y67yA6HNj3/6Z+w8INO19XXcbTt2EnW3nRLfzGcQgGw0rYG6+F+JwC6GnxGAAEEEEAgfAECYPimlFgjgVIDoA0cOqqim30Pm1td/Q9qXVZfN30O7xRvWf0fv/9erj590TvVdDRGR2Xc7ftvvvFW2fyj/woA912BtQyA5h2Dh3mjb06wdd8lpyNHJ11+k78iZTUCoLq40xl7bLiJ7HXK2RkjYnqO+65AfRn8Mf+6Mmsg13OL3TQ02bCeq8yxzz/jBbXL/SKDz06WGwD13Xt2SqYWnm01V12YRt/5qC9Tt++Z9CvifXCfIbX79bUh7Vde1Xx1f5/2uPruc1rTSp52n/tuQd2XbeqyLiykAdwujKOjjjqKrFuhABhGW82NsvxDAMyCwi4EEEAAAQRCFCAAhohJUbUVKDUAau3cqZD6Xaf/9fLCnD7/pC9Mf+KWa/2XZ7ujdcGFTXTJ/F79t/BW+WzlTdObIk/ffqP/H9LBF5/XMgBqm3Q1UP1fy+Xbykfjx5rpgLpft0FHniDrbbtj0xfv32oFQB3p0heRa9DRTaeW6jNvGmT0PXka1OxL5PW4+w46/V7u5j7rqGX0H7S7ebddu5VX8UbmPpQPvRFC+9J0e4/g6qnlBkAt75FrLpVxLzaaovXdhutts4PoayDadujkvQPwYzMqZ1eJtat9mpMX/vPOi8/Ko9csmhbqvtvPnOItcHPZiYf7v1Hdl+t51hcfuFNeeKDpVSR6nv4/Jbp7I4s6HfbDd940/nYEUd/1eOy/rvJDeqEAqOVV2lYtI9tGAMymwj4EEEAAAQTCEyAAhmdJSTUWKCcAahVf9FaIfOF+7z1qeTazJP5JZy4aSfP+w/vpO26U1x5/JM9VTUv973fmnzPeZ1erAKijezZwZaukLhQy6KiT/P/I13OqFQC1bH2m7WHvZev56qTnbbar90yiF07C2tzwkqvM3ptt5b/aQ8PP8Zdc4/d1JQFQR/huPvcM//8ZkOv+Oj11V+/l6su2aJlxyoKvvvTe97hoJdfg4i56sjtFWb9nWzVW9+uU0mFXXeqvSqv7sm0aMg/3pjqrg91cw1yLwFTaVnuv4F8CYFCE7wgggAACCIQrQAAM15PSaihQbgDUKprRPm91Tx2NcjcNUfqqhn5bb9ds4RA976MJY+XJW67zn72y1+p16zZsL1vvc0jGs1h6XEdb7rpwiDk110u13WfS7PsDzQUL/9H/2L702KaXdPfdssFbAfI0c8Rd9ERfaK4jTU95K52676HT/8Df5oDDTZvcMvXzC94okX1dgr4aQl8RoVsxddbz7CIwuoKnLjYS3OZ/OdesvPruqy8GD5kpkFt7Lx7X9+K5U1abnVjiDl1wZfTjD0vj3bc1u1Kfzdzu4COlS591zYIr9l159r16eoG7kmuuRWBef/JReerW60357ovgdcf8uXPkpYfv8VeONSct/EdHBfV3soX33kF3kRj3HHcFz2wjo+NfapRhV19qLlltrT5yyLlNC8G4Zbif9f2Xz3oL3szznrUMbvp84Ga77N1s9dXn7hwqo4Y/aE53p6AGr6+0rcHy9DsBMJsK+xBAAAEEEAhPgAAYniUl1VigkgBoq6rvx5s97RPRZ/hW6NTZLFYSXDHSnuv+1WegZk/7VPQ5Kn11wQodO2d9Ybh7TS0/6zNgX86abt5DmG0BllrWRe+lz1/q9ExdPGTp5Vp4QbWjtGzTNtTgF2zTTz/84N1zpnw9+wtZrnUbM/10qaWXCZ5Wte8///STaa+2e+lllpUVV13dmzJc+HUM1aqQ/sZnT/9Ufvj2W2ntLcqjv4uwPMJsKwGwWr8AykUAAQQQQKBJgADILyG2AmEEwNg2noojkFABAmBCO5ZmIYAAAghERoAAGJmuoCKlChAASxXjfASiL0AAjH4fUUMEEEAAgXgLEADj3X+prj0BMFndP2fGNJnw8siKGtV3q23Nc5AVFcLFdRUgANaVn5sjgAACCKRAgACYgk5OahMJgMnqWfcdfuW2LLggS7nlcF39BAiA9bPnzggggAAC6RAgAKajnxPZSgJgsrpVF9V554VnK2rUug2/8RbzWfQ6g4oK4+K6CBAA68LOTRFAAAEEUiRAAExRZyetqVM/nyNDG0dLK+9l7F27dk1a82gPAqkTWLBggUyePFm6dGwngwf0T137aTACCCCAAAK1ECAA1kKZe1RFgABYFVYKRaBuAjNnzhT9X0PvbtLQp0fd6sGNEUAAAQQQSLIAATDJvZuCtg0dOVqmzpoj3bp1k5YtW6agxTQRgeQK2OmfBMDk9jEtQwABBBCovwABsP59QA0qEGAUsAI8LkUgQgJ29E+rNGTfgRGqGVVBAAEEEEAgWQIEwGT1ZypbwyhgKrudRidMwAZARv8S1rE0BwEEEEAgcgIEwMh1CRUqVcCOAup1/fr1K/VyzkcAgToL2PCn1WD0r86dwe0RQAABBBIvQABMfBeno4F2FJAVQdPR37QyOQJu+GP0Lzn9SksQQAABBKIrQACMbt9QsxIFbAjUyzp16mT+V2IRnI4AAjUS0Fc+aPibP3++uSPhr0bw3AYBBBBAIPUCBMDU/wSSBWBfDm9bRRC0EvxFIBoCweCntRrc0F+6dGgXjQpSCwQQQAABBBIuQABMeAensXnBEKgGOjWU10Sk8ddAm6MgoKFPNzvaZ+ukL3xv6N2d8GdB+IsAAggggEANBAiANUDmFvURyBYE61MT7ooAAq4Awc/V4DMCCCCAAAK1FSAA1tabu9VJQFcKnTprdp3uzm3DFGicMNkUpyGiy4orhFk0ZVVJoEvH9k19xjTPKglTLAIIIIAAAsULEACLt+JMBBCIgIBd7IfnxiLQGVQBAQQQQAABBGInQACMXZdRYQTSLWADIKtGpvt3QOsRQAABBBBAoDwBAmB5blyFAAJ1EtDpvEMbR4tOAR08oH+dasFtEUAAAQQQQACBeAoQAOPZb9QagdQKEABT2/U0HAEEEEAAAQRCECAAhoBIEQggUFuBIfc+bm44ZN+Btb0xd0MAAQQQQAABBGIuQACMeQdSfQTSKGCfA2QhmDT2Pm1GAAEEEEAAgUoECICV6HEtAgjURYAAWBd2booAAggggAACCRAgACagE2kCAmkTaBw/UfR9gCwEk7aep70IIIAAAgggUKkAAbBSQa5HAIGaC7AQTM3JuSECCCCAAAIIJESAAJiQjqQZCKRNgIVg0tbjtBcBBBBAAAEEwhAgAIahSBkIIFBzARsAWQim5vTcEAEEEEAAAQRiLEAAjHHnUXUE0izAQjBp7n3ajgACCCCAAALlChAAy5XjOgQQqKuAXQimoXc3aejTo6514eYIIIAAAggggEBcBAiAcekp6okAAhkCLASTwcEXBBBAAAEEEECgKAECYFFMnIQAAlETIABGrUeoDwIIIIAAAgjEQYAAGIdeoo4IIJBVwC4EM2TfgVmPsxMBBBBAAAEEEEAgU4AAmOnBNwQQiJEAC8HEqLOoKgIIIIAAAghEQoAAGIluoBIIIFCOAAGwHDWuQQABBBBAAIE0CxAA09z7tB2BmAvwHGDMO5DqI4AAAggggEDNBQiANSfnhgggEJYAATAsScpBAAEEEEAAgbQIEADT0tO0E4GECrAQTEI7lmYhgAACCCCAQFUECIBVYaVQBBColQDPAdZKmvsggAACCCCAQBIECIBJ6EXagECKBQiAKe58mo4AAggggAACJQsQAEsm4wIEEIiSQOP4idI4YbI09O4mDX16RKlq1AUBBBBAAAEEEIicAAEwcl1ChRBAoBQBFoIpRYtzEUAAAQQQQCDtAgTAtP8CaD8CMRewAVCbMWTfgTFvDdVHAAEEEEAAAQSqK0AArK4vpSOAQA0EeA6wBsjcAgEEEEAAAQQSIUAATEQ30ggE0i1AAEx3/9N6BBBAAAEEEChegABYvBVnIoBARAXsNNAuHdvJ4AH9I1pLqoUAAggggAACCNRfgABY/z6gBgggEIIAL4QPAZEiEEAAAQQQQCDxAgTAxHcxDUQgHQJMA01HP9NKBBBAAAEEEKhMgABYmR9XI4BARARsAOR9gBHpEKqBAAIIIIAAApEUIABGsluoFAIIlCrAc4ClinE+AggggAACCKRRgACYxl6nzQgkVIDnABPasTQLAQQQQAABBEITIACGRklBCCBQbwE7DXRwQ3/p0qFdvavD/RFAAAEEEEAAgcgJEAAj1yVUCAEEyhVoHD9RGidMFl4HUa4g1yGAAAIIIIBA0gUIgEnvYdqHQIoEeA4wRZ1NUxFAAAEEEECgLAECYFlsXIQAAlEV4DnAqPYM9UIAAQQQQACBKAgQAKPQC9QBAQRCE+A5wNAoKQgBBBBAAAEEEihAAExgp9IkBNIswDTQNPc+bUcAAQQQQACBQgIEwEJCHEcAgVgJEABj1V1UFgEEEEAAAQRqLEAArDE4t0MAgeoL2OcAeR1E9a25AwIIIIAAAgjES4AAGK/+orYIIFCEAM8BFoHEKQgggAACCCCQSgECYCq7nUYjkGwBpoEmu39pHQIIIIAAAgiUL0AALN+OKxFAIKICBMCIdgzVQgABBBBAAIG6CxAA694FVAABBKohwDTQaqhSJgIIIIAAAgjEXYAAGPcepP4IIJBVgACYlYWdCCCAAAIIIJByAQJgyn8ANB+BpAowDTSpPUu7EEAAAQQQQKASAQJgJXpciwACkRWwAVArOGTfgZGtJxVDAAEEEEAAAQRqKUAArKU290IAgZoKMA20ptzcDAEEEEAAAQRiIEAAjEEnUUUEEChPwAbALh3byeAB/csrhKsQQAABBBBAAIEECRAAE9SZNAUBBDIF7DRQAmCmC98QQAABBBBAIL0CBMD09j0tRyAVAnYUcHBDf+nSoV0q2kwjEUAAAQQQQACBXAIEwFwy7EcAgUQI2ADIKGAiupNGIIAAAggggECFAgTACgG5HAEEoi3ANNBo9w+1QwABBBBAAIHaChAAa+vN3RBAoA4CdhSQaaB1wOeWCCCAAAIIIBApAQJgpLqDyiCAQDUEbABkGmg1dCkTAQQQQAABBOIkQACMU29RVwQQKEvATgPVi3kpfFmEXIQAAggggAACCREgACakI2kGAgjkF7CjgEwDze/EUQQQQAABBBBItgABMNn9S+sQQGChgA2ATAPlJ4EAAggggAACaRYgAKa592k7AikSYBpoijqbpiKAAAIIIIBATgECYE4aDiCAQNIE7Cgg00CT1rO0BwEEEEAAAQSKFSAAFivFeQggEHsBOwrINNDYdyUNQAABBBBAAIEyBQiAZcJxGQIIxE/ABkCtOauBxq//qDECCCCAAAIIVC5AAKzckBIQQCBGAkwDjVFnUVUEEEAAAQQQCF2AABg6KQUigECUBewoINNAo9xL1A0BBBBAAAEEqiVAAKyWLOUigEAkBWwA1MoxDTSSXUSlEEAAAQQQQKCKAgTAKuJSNAIIRFOAaaDR7BdqhQACCCCAAALVFyAAVt+YOyCAQMQE7Cgg00Aj1jFUBwEEEEAAAQSqLkAArDoxN0AAgagJ2ACo9WIaaNR6h/oggAACCCCAQDUFCIDV1KVsBBCIrADTQCPbNVQMAQQQQAABBKooQACsIi5FI4BAdAXsKCDTQKPbR9QMAQQQQAABBMIXIACGb0qJCCAQE4Eh9z5uaso00Jh0GNVEAAEEEEAAgYoFCIAVE1IAAgjEVYBpoHHtOeqNAAIIIIAAAuUKEADLleM6BBCIvQDTQGPfhTQAAQQQQAABBEoUIACWCMbpCCCQLAE7DXRwQ3/p0qFdshpHaxBAAAEEEEAAgYAAATAAwlcEEEiXQOP4idI4YbKwGEy6+p3WIoAAAgggkFYBAmBae552I4CAEbDTQPULi8Hwo0AAAQQQQACBpAsQAJPew7QPAQQKCtjFYBp6d5OGPj0Kns8JCCCAAAIIIIBAXAUIgHHtOeqNAAKhCdhRQKaBhkZKQQgggAACCCAQUQECYEQ7hmohgEBtBewoIIvB1NaduyGAAAIIIIBAbQUIgLX15m4IIBBRAUYBI9oxVAsBBBBAAAEEQhUgAIbKSWEIIBBnAV4JEefeo+4IIIAAAgggUIwAAbAYJc5BAIFUCNhpoDwLmIruppEIIIAAAgikUoAAmMpup9EIIJBNwE4D1WO8EiKbEPsQQAABBBBAIO4CBMC49yD1RwCBUAXsKCCLwYTKSmEIIIAAAgggEBEBAmBEOoJqIIBANATsKCDTQKPRH9QCAQQQQAABBMIVIACG60lpCCCQAAFGARPQiTQBAQQQQAABBLIKEACzsrATAQTSLMAoYJp7n7YjgAACCCCQbAECYLL7l9YhgECZArwSokw4LkMAAQQQQACBSAsQACPdPVQOAQTqJWCngfIsYL16gPsigAACCCCAQDUECIDVUKVMBBCIvYCdBqoN4ZUQse9OGoAAAggggAACCwUIgPwUEEAAgRwCdhSQV0LkAGI3AggggAACCMROgAAYuy6jwgggUCsBOwrINNBaiXMfBBBAAAEEEKi2AAGw2sKUjwACsRZgFDDW3UflEUAAAQQQQCAgQAAMgPAVAQQQcAUYBXQ1+IwAAggggAACcRcgAMa9B6k/AghUXYBXQlSdmBsggAACCCCAQI0ECIA1guY2CCAQXwE7DZRnAePbh9QcAQQQQAABBJoECID8EhBAAIECAnYaqJ7GiqAFsDiMAAIIIIAAApEWIABGunuoHAIIREWAUcCo9AT1QAABBBBAAIFKBAiAlehxLQIIpEaAUcDUdDUNRQABBBBAINECBMBEdy+NQwCBMAUax0+UxgmThWcBw1SlLAQQQAABBBCopQABsJba3AsBBGIvwIqgse9CGoAAAggggECqBQiAqe5+Go8AAqUKMApYqhjnI4AAAggggECUBAiAUeoN6oIAArEQYBQwFt1EJRFAAAEEEEAgiwABMAsKuxBAAIF8AowC5tPhGAIIIIAAAghEWYAAGOXeoW4IIBBZAUYBI9s1VAwBBBBAAAEE8ggQAPPgcAgBBBDIJcAoYC4Z9iOAAAIIIIBAlAUIgFHuHeqGAAKRFmAUMNLdQ+UQQAABBBBAIIsAATALCrsQQACBYgQYBSxGiXMQQAABBBBAIEoCBMAo9QZ1QQCB2AkwChi7LqPCCCCAAAIIpFqAAJjq7qfxCCBQqcDUz+fI0MbR0qVjOxk8oH+lxXE9AggggAACCCBQVQECYFV5KRwBBNIgMHTkaJk6a44MbugvXTq0S0OTaSMCCCCAAAIIxFSAABjTjqPaCCAQHQFGAaPTF9QEAQQQQAABBPILEADz+3AUAQQQKEqAUcCimDgJAQQQQAABBOosQACscwdwewQQSIYAo4DJ6EdagQACCCCAQNIFCIBJ72HahwACNRNgFLBm1NwIAQQQQAABBMoUIACWCcdlCCCAQFCAUcCgCN8RQAABBBBAIGoCBMCo9Qj1QQCBWAswChjr7qPyCCCAAAIIJF6AAJj4LqaBCCBQSwE7Cqj3HLLvwFremnshgAACCCCAAAIFBQiABYk4AQEEEChNwI4CNvTuJg19epR2MWcjgAACCCCAAAJVFCAAVhGXohFAIJ0C7iggL4dP52+AViOAAAIIIBBVAQJgVHuGeiGAQKwFGsdPlMYJk6VLx3YyeED/WLeFyiOAAAIIIIBAcgQIgMnpS1qCAAIRExhy7+OmRowCRqxjqA4CCCCAAAIpFiAAprjzaToCCFRXwJ0KyoIw1bWmdAQQQAABBBAoToAAWJwTZyGAAAJlCbAgTFlsXIQAAggggAACVRIgAFYJlmIRQAABFXBHAZkKym8CAQQQQAABBOotQACsdw9wfwQQSLwAC8IkvotpIAIIIIAAArERIADGpquoKAIIxFmAqaBx7j3qjgACCCCAQHIECIDJ6UtaggACERZwp4KyIEyEO4qqIYAAAgggkHABAmDCO5jmIYBAdATsKCDvBoxOn1ATBBBAAAEE0iZAAExbj9NeBBCom4A7CsiCMHXrBm6MAAIIIIBAqgUIgKnufhqPAAK1FmBBmFqLcz8EEEAAAQQQcAUIgK4GnxFAAIEaCNipoA29u0lDnx41uCO3QAABBBBAAAEEmgQIgPwSEEAAgRoLMBW0xuDcDgEEEEAAAQR8AQKgT8EHBBBAoHYCdhSQBWFqZ86dEEAAAQQQQECEAMivAAEEEKiDAKOAdUDnlggggAACCCBAAOQ3gAACCNRLgAVh6iXPfRFAAAEEEEivACOA6e17Wo4AAhEQsFNBWRAmAp1BFRBAAAEEEEiBAAEwBZ1MExFAILoCTAWNbt9QMwQQQAABBJIoQABMYq/SJgQQiJWAHQVkQZhYdRuVRQABBBBAIJYCBMBYdhuVRgCBpAkMufdx0ySmgiatZ2kPAggggAAC0RIgAEarP6gNAgikVMAuCKPNH9zQX7p0aFdQQq/RjZfJF6TiBAQQQAABBBBYKEAA5KeAAAIIRESglKmg7rODQ/YdGJEWUA0EEEAAAQQQiLoAATDqPUT9EEAgVQLFTgUd2jhaNATqxrTRVP1EaCwCCCCAAAIVCRAAK+LjYgQQQCBcAXdkL9dUUHe6qN6dABhuH1AaAggggAACSRYgACa5d2kbAgjEUsAGvGyrgroB0W0c00BdDT4jgAACCCCAQC4BAmAuGfYjgAACdRSwzwMGR/fsFNFg1YLnBY/zHQEEEEAAAQQQUAECIL8DBBBAIIIC7kifnQrqPvcXrLKuGqrnsSGAAAIIIIAAAvkECID5dDiGAAII1FHATgXVKmi40wCYb2MaaD4djiGAAAIIIICAChAA+R0ggAACERawU0GLqSLTQItR4hwEEEAAAQTSLUAATHf/03oEEIiwgH3Re+OEyUXXklHAoqk4EQEEEEAAgVQKEABT2e00GgEEoipQTuhz28IooKvBZwQQQAABBBAIChAAgyJ8RwABBGosUGnoc6tLAHQ1+IwAAggggAACQQECYFCE7wgggECNBNyVPsO8JdNAw9SkLAQQQAABBJIlQABMVn/SGgQQiJmAu9JnWFVnFDAsScpBAAEEEEAgeQIEwOT1KS1CAIGYCYQdAgmAMfsBUF0EEEAAAQRqKEAArCE2t0IAAQRyCeh00Mbxk0T/hrExDTQMRcpAAAEEEEAgeQIEwOT1KS1CAIEYC4Q1GsgoYIx/BFQdAQQQQACBKgoQAKuIS9EIIIBAOQJhLQ7DKGA5+lyDAAIIIIBAsgUIgMnuX1qHAAIxFhjaOLqiKaGMAsa486k6AggggAACVRIgAFYJlmIRQACBMAQqmRJKAAyjBygDAQQQQACBZAkQAJPVn7QGAQQSKFDJAjFMA03gD4ImIYAAAgggUIEAAbACPC5FAAEEailQzpRQRgFr2UPcCwEEEEAAgegLEACj30fUEAEEEPAFSp0SSgD06fiAAAIIIIAAAp4AAZCfAQIIIBAzgVKnhDINNGYdTHURQAABBBCoogABsIq4FI0AAghUU6DY0UBGAavZC5SNAAIIIIBAvAQIgPHqL2qLAAIIZAgUGwIZBcxg4wsCCCCAAAKpFSAAprbraTgCCCRFoJgpoYMb+kuXDu2S0mTagQACCCCAAAJlChAAy4TjMgQQQCBqAvlGA5kGGrXeoj4IIIAAAgjUR4AAWB937ooAAghURUBHA/V1Edk2poFmU2EfAggggAAC6RIgAKarv2ktAgikRCDbOwMZBUxJ59NMBBBAAAEE8ggQAPPgcAgBBBCIs0BwSmiXDivI4IZN4twk6o4AAggggAACFQoQACsE5HIEEEAgygI6JfSh196RLxd8a6rJYjBR7i3qhgACCCCAQPUFCIDVN+YOCCCAQN0F/vPYSD8EFvss4LyJ7/j1njdpnP8514f5EzPPadWjb65TM/a37r7ovNY91sk4xhcEEEAAAQQQCFeAABiuJ6UhgAACkRXQELjgqy9l3Ra/yAZLf2fqGQxtbuird0PcMOiGSRsY3eP1riv3RwABBBBAIC4CBMC49BT1RAABBIoQcAOcjtrZgGf3z27b2ZTS/svpBUtr3bq1f07r1q38z7k+tGqVec78+fNznZqxf968RefNmzcv41gxXzQIBgMi4bAYOc5BAAEEEEijAAEwjb1OmxFAIBECNtTZoGe/52ucDXU20AVDmz2er4xaHXPDoBsmbWB0j+eqkxsOVx50YK7T2I8AAggggEBqBAiAqelqGooAAnEWsOFu+oi7TDPs92xtsiFOQ54NeHZftvPjvk+DYDAg5guHhMK49zj1RwABBBCoRIAAWIke1yKAAAJVErABL1/gs6HOBj37vUpVimWx06c3TXXVUcN8obDzTk2jg4wSxrKbqTQCCCCAQAkCBMASsDgVAQQQqKaAhr5cgc+GO8Je5T1QKBTaEUJdbIZnCSv3pgQEEEAAgWgJEACj1R/UBgEEUiZgQ58d8XObr6Gvc+eVzC4bAN3jfA5HwE4hzTVKyOhgOM6UggACCCAQDQECYDT6gVoggECKBHKFPg15jPDV/4eQb4SQMFj//qEGCCCAAAKVCRAAK/PjagQQQKAogXyhT0f5GOErirEuJ2kgzDY6qGGQaaJ16RJuigACCCBQgQABsAI8LkUAAQQKCWQLfkztLKQW3eMaBqdNy3yHIqOC0e0vaoYAAggg0FyAANjchD0IIIBAxQLTRtxpXsJun+1jemfFpJEqwD43mC0MspJopLqKyiCAAAIIBAQIgAEQviKAAAKVCGjwm/7YnX4RdrSPKZ4+SeI+5BoVJAgmrqtpEAIIIJAIAQJgIrqRRiCAQL0FCH717oH6358gWP8+oAYIIIAAAoUFCICFjTgDAQQQyCkQfMaPEb+cVKk5oEFQNzs9VJ8RZDQwNd1PQxFAAIHICxAAI99FVBABBKIq4I76Efyi2kv1q1dwRJAgWL++4M4IIIAAAosECICLLPiEAAIIFCUQHPVbeeXO3gvbO+e99vNvvpPJs+fJxC++lkmz50urZZaU7u1bS7cVWsua3t/WSy+Z9/qoHvxs3jfy7qyvyqreup1XkA4tli3r2jhd5AZBXh0Rp56jrggggEAyBQiAyexXWoUAAlUSKHXUb8GPP8lFI8fLY+9/mrdGx27SU47csLssvthiWc/75qef5ebXJ0qfTm2lYc2Vsp5Tj533jf9ILmwcV9at/zlwA9m+W/7gXFbBNb5ouheCL3/5XTl9qz45A60bArV6PU85X1r3WKfGNeV2CCCAAAIIiBAA+RUggAACRQq44a+YUb8P586X0x59TT77+pui7tDQtZP8dbv1pEVgNHDi7K/lpIdflTnf/iB/2W5d2aXXqkWVV4uT0h4An5g4Tf785JuG+oFDG2S1Ni3zsrtBkCmheak4iAACCCBQJQECYJVgKRYBBJIlUGr409Yf99AoGfPZbAPRsdWycpw3yrfp6h2k3bLLyE+//CqzFnwrIz74TK4fPdHH0hD4r0Eb+d/1w9OTp8sfH3/D7ItyANy+e2fZudcqGXXP92Xtjm2l/XLL5Dsl8sf+9cJ4uWfsVFPPYgKgnkgINFz8gwACCCBQJwECYJ3guS0CCMRHwA1/PXv2kGLe6TfVG/3b938jTSPbLbe03H7AVjmnB77mhcQTvLBot/sOGiBrrNDKfo1NADx2kx5y9EY9/Xqn4UM5AVBd3BDIdNA0/FJoIwIIIBAdAQJgdPqCmiCAQAQF3PBXzLRP24SRU2fImcPHmK97911D/jCgrz2U9e8fnxgjT0+aYY79bYf1ZFDPRSNppY4A/uqV8oW36Iw+T1juCNvX3/8o3/70kwmtuZ5L1Mq6U0CjEgC1/TPnfystl16q7MV1fvz5F9GFezq1XE6WWDz7c5na/nIDoF7rhsANrximu9gQQAABBBCougABsOrE3AABBOIs8MHl54iu+llK+NP2vu6N6h2/cFRv9bYt5V5vVC9fkHp2ynR5YNzHsoI3JXLQWivL5qt3lJneFNGTh70mX337vXn+T8vV0cTlvXNWabOcXLrzxrrL3/SeN7w2Ud79/Cv55oefzH59nnA9b7XNIzfsIbrqZnC7+52pcr933yW9sHjbflvKDa9/IE9OnC4ff7nAP3WgF0aP3Ki7rOmMStqDYQTAS14cL69+0jRV9q/eM45rd1zeFp/xd5q32MrvHn3d7Ntg5XbNQvVTk6aZtrjt16m3/VdbUU7YdK2sI7C2/cstuYTcsu8W8vC7n8iI9z/zp+7qzdZZqa0c4S3Qs1WXTn59NOBf+coH8uGcef6+Vdq0kKW9cnbs0VmO2qiHvz/fhw8+mCjz5s0zC8LoSCAbAggggAAC1RYgAFZbmPIRQCC2Au7o34YbblBSO37wRpC2uGaEf42u8nnIel1lWS8gFLt95E0j3WfhNNLgNRo2Hjp0G7P7Z+95wr8++7YJLsHz3O+HbtBVTtiklyzpjGj995X35JY3JpvTtu22kjw7uWkU0r1OP2uQvOegrc2ImHssjAA4zAtd5z071hR74Lpryulb9nZv4X8e+sYkL3S9b76f3dBX9umzhvmsK61eOHJc3vZr/f/ujay6IU4vdts/eMNuMnRMk4UpOPDPiZutJYM36G72unUOnCbFjPjaazT8aQjUjamgVoW/CCCAAALVFCAAVlOXshFAINYCY07ezdS/1NE/2+i/PP12xusfNITs4C2Usok3IrXhKu290bz8C6B8++PP0vjhDHl7+lxvZOsjU+wua68q/VddUVp5Zdkwc9OYiXL1qA/sbeWQ9bt65beTX725kK9+8oXcvXCREj3hNC9cHeSFLLu5Acju08Vqtlyjk8z/8Ue5460p8sKHs8yh3t6iLdftuZkss+Ti9tRQpoDO9wLcNtc9YcpUo2eO+k1GSNUDOq1zz9ue81dUffro38jyyyxlrrnAC3/WR68/2hut7O29LmOeN41VA62O6NntocO2kVVat7BfMwKg3blnn9VlfW+EUVddffKDaTJh1pf2kNj7fvr1Anlnxpfy4PiP5c1pc8zxkzbvJR1bLiurL9/SvK7Dv6jABzsVVF8LwShgASwOI4AAAghULEAArJiQAhBAIIkCdvSv3PCnJvoc2T8a35FH38v+DkCdGrr5Gh3M/zZaeUVZaolFwco1zfcMoL4i4qC7XvBPv3aPzWQDL/y528sfz5JTH3nN3zV88LZeUFnOfA8GwEt32ciEP3vyL16K1NE524bDN+gmJ23Wyx7OCIAavlZskT/U2gt3WmuVjGmSOoL56LtNTpfturGZAmvP1b/jZ34pg+97yezS1Ub/uWPTiOz7n38th9zT1H69/90Hbi0rtWpqm73+Hm+a67+eH2++BldZDbb/mj03lQ1Xbm8vFQ3hxzz4iksShn0AAC2GSURBVLznTavV7f+26ye79lrNP17JM4B+Id4HOxWUUUBXhc8IIIAAAtUQIABWQ5UyEUAg9gJhBEBF0JGru8Z+KENfn+Q/x5cNR5/tO2WLtc3iL8FnBfMFwFvfnCxXvPyeKTLf9MnzvSD6kDdapZtORz164TNqbgAasGYnuXinzFdQ6Pn6uoqdhz6rH6VH+zbyP29FU7u5U0DtvmL+7rPOGnL21osWxhkzbbYc92DTSqiDvHD4t+3XyyhGnxO86+2pZt/lu20sm63W0Xw+96m35HHvVRq6/WPH9b0R1pXNZ/cf7YOj7n/JjNjp/oe9UcCVF44Cuu3X0dW/bLuue6n5fL/3svsLFr7s3rXTgwTAZlzsQAABBBCIuAABMOIdRPUQQKA+Anbxl2Jf+1ColjqSpqNVoz75XF76aJaZ1pntGg0h527TL2PBmHwB8LThr8mLU5umaAZfH+GW744U6qIu53nPw+nmBqArd9/ETC91r7Of3fu8dNwgWXrhaKUbAHUErkvbRa+vsNdm+7uDt1CKPhNpN/XZ9dZnZdb878yukb/d0Tx3qF90JHX7m54yC9toUH5s8Pb+ypz73fm8vxBL4zE7SsullrRFZvx1p8m67XTbn+sdi+4I6tEbd5dj+6/llx1WALTPAjIN1KflAwIIIIBAlQQIgFWCpVgEEIi3gH3+r9TFX4ptta7SOXbmXBPe3Gf09Po/eAuc7L1wgRP9ni8ADrj+CX/FTzeY6XXupvfTc3VzR/HcAOSOjLnX6ueLvRee23r+b/+tpMeKbcwpbgCs9DUQbkjTgKpBVbcXPpoppy9c/fOIjbqZhWx0v4bGTa56TD+WtLm+bvuv2mNT2dh7NjO46TOAh9/bNP3Uvb+eRwAMavEdAQQQQCDqAgTAqPcQ9UMAgZoL6GsfdARQX/iuI4DV3j7xFhQ575mx/mIi7gqfeu9iA+BrJ+6ct6obXzncHNeROh1h080NQC8eOyhjgRdzwsJ/9PUQ177atFrlxTtvKAO6rGSOhBkAp3uvedjt1udMuZutvqJcvusm5vMfn3jDe0fidPNZX6fRZeHrKPQ9fTvd/IzZX8o/utrniZs2Pcfotl9fg9GrQ/NXULw76ys57N4XzS2qFQC18DFj3jD34J2AhoF/EEAAAQSqJEAArBIsxSKAQLwFKhkB/PqHH+XEh171pjN+Kx29BUk0WBTa9MXtg5wwM/LYgdJi4Ssj8gXAPZyVMUcdv5M/NTJ4P13MZOvrHje7dfGZ+w9uMJ/dAPTEkdvnXJnUHenShVa6tmttrg8zAGqBJw171axcqp8fO2I7L5AuIdtd/6R+Ne/ju2nvLcxn/ee7n36Wra5tapOG2nO37ecfy/dhDW+VTjuC6ba/ngGQKaD5eoxjCCCAAAJhChAAw9SkLAQQSIxAJc8A6nv5Nr160dTEfM/muWA7es+56asHdHvKe81B24WvOcgXAE9/7DX/NQ2PHL5tsxUwbflTvXcK7rvwnYL6igN9nYNuxQQgPc99BtANmmEHwCe9l7mf88Sbekv5Y8M65lnDvz7ztvmuAW+3tRetwKk7d77lGf+5wZe9ZxNzraRqCsjyTzHtr8UIoH0VROedDpSVBx2YpabsQgABBBBAIBwBAmA4jpSCAAIJE7ABsNzXQBzprDq5T9815Pdb98lY2CXI5QY0d4qmnucGwOBrCC57+V25/c0pprgTNl1Ljtiwe7Bo8/3KUe/5LznX9wSeuvnaZr8bgI7yFjg5zlngxBbkrgK6bucV5Ia9NreHMl4DUekzgFqojurtePPT5rlGfV/iEt5L61/+6HNzv2e9aautvZE+dzvlkVfllY+/MLsuGrSBbNO1s3vY/3zpSxPkoQmfmEVqftu/u/+qC7f9FY8AHtIgq3mji+VsBMBy1LgGAQQQQKAcAQJgOWpcgwACiReo9DlAN7Qp1pZdOspfvYVN2iy9VDM7HWHS59w++/obc2y/fl3k91v18c97Yaq3CMrw1833k72XjR+2fjf/WPA9eHfsv6Ws2iYzhHzojf7tt3D0Ty+80Qtw/bwgp5sbgPT7sMO3kc6tFr0o3bwH8DnvPYAL39HnPj+n54c9AqhlutNN9btuu/TyXtGwXfNXNLgjhrpC6N3e1FY7ctp0pYg7gqf7cr0HsZwA6AZwnZ66zkpt7W1L+svzfyVxcTICCCCAQAUCBMAK8LgUAQSSLVDJKKBOA73Ye3fdfe98lIG08artpXfHttKh1bLyuffKA309gx3h0hN1AZjr9trUf1G77nPfkach58D11pQ2yywte/VZXQ/Lhc+P8++jo4dnbNlb1l/4MvjXP50t/3juHXOe/hNcxCQYAO2zdP28IPP5/O9l6BuTpHHKTHO9Hnv4sG0zApYbALXua3dsvoiKf/PAh1WXb+EvxuIecl/6bvdf7a3QuVGWFTr1HX/Hei9qf3PaHHOq+pzhjbb27dRW5nzzg3nlxv/e/tBfKXX33qvJn73XbNjNbX85AdBdHEf79Tc9V5Y12rbwRxjtffL9ZfQvnw7HEEAAAQTCFiAAhi1KeQggkBgBOwqoDSr3fYBuQCoEo+HwnwM3lOUXPvtnz//y+x9lhxuaFkKx+/Tv88cMlOWWWkK+9o6fNWKMjPlstnu42efDNugqJ2/WNPXTHnQDkN2X62+21ySU0r5gue7rKILH9r6jUT7+coHZ3dELy494wXPxxRYLnma+6yqqZwwf478PMOtJ3s4NvQB52S79M1Y6ddtfTgDU9zqePGx0xi11FNBdrCbjYOCLDX+6m9U/Azh8RQABBBCoigABsCqsFIoAAkkRsKOAlbwSQkfwHhr/ibwzY64/zdP10WDSf7X23tTO7rKk98xbtm30p1/IuU++6S8So+f87wDvfXzt25jTdarm/eM/lhtGf5Bxjh7UAHXYBt1kv3W6SLB0NwBdtuvGcq83YmlfLG8K9v4ZsGYnb6RuLVlz4cqfdr/+fXDCxxkjjO6xQp/1lQsaurJtd479UP79wgRzqJhnC3/wXhav7xG88+2p/mifLVdHLo/t39OMmC67cGVVe+ya0e/Lja9NMl9dT3tc/7rTbI/euIcpyz1+65uT5YqX3/N36f3sazb8nTk+2KmfLP6SA4jdCCCAAAKhCxAAQyelQAQQSJqAfSVEuQvCuB7zvBeyT549T+Z9/4Os6i0Ysrr3P13opJhNpztO896Vt7j3d3lvCqgGjWybjhh+6N3jZy8Udmq9rKzSukXO0TM3ANoRsG+8hVje955L1BG31bzpjO2WWybbbSK7b/a338tHc5pGDzu3WdZMpy3WuNxGaQCdueBbE+DbL7esWb20UFkffDBR9PUPhL9CUhxHAAEEEAhTgAAYpiZlIYBAIgXcqaBhhMAoIWULgFGqX1LrYsOfto+pn0ntZdqFAAIIRFOAABjNfqFWCCAQMYFpI+6U6Y/daWqVpBBIAKztD01H/KZPn2FG/vTOPU85X1r3WKe2leBuCCCAAAKpFiAAprr7aTwCCJQi4I4E6jOBnTuvJPo3zhsBsHa9p+FPR/7cTad/6sbL310VPiOAAAIIVFOAAFhNXcpGAIHECWgInD7iLtG/usV9NJAAWJufqDvlU0f8WvXo648o2xrwLKCV4C8CCCCAQDUFCIDV1KVsBBBIrIA7JVQbGdcgqK8xsK+P2N97Af2KLZZNbJ/Vo2HBUb9gyAv+jrSOjArWo6e4JwIIIJAeAQJgevqaliKAQMgC+h/v8yeOS8xoYMg8qS4u+Kyfjvp1HnRAzuf99Lekm33OVD/bkUKmh6oGGwIIIIBAWAIEwLAkKQcBBFIrEBzFietoYGo7MMSGB4OfFl3qQi/B35OWERw51H1sCCCAAAIIlCNAACxHjWsQQACBgIA+Ezhv0riMERyCYAApwV+zBT8dwdPwV+4WHGHWcpgeWq4m1yGAAAIIWAECoJXgLwIIIBCSQHAER4Ogbp07N/0N6TYUEwGBbMFPQ1rr7n1zTvcstdr6e9LNnR7KiGCpipyPAAIIIGAFCIBWgr8IIIBAyALBIKjFMyoYMnIdissW+rQatQhlwd9ULe5ZB2JuiQACCCBQRQECYBVxKRoBBBBQgeB/tOs+fX9g69atGBVUjBhsGvrmz5/vvcBd/zfPr3GhxV38E0P+EPxNEQRDBqY4BBBAIMECBMAEdy5NQwCBaAnof7Tr5k7l0+9MEVWF6G026E2fPqNZ6NPa5lvVsxatyfbcKUGwFvLcAwEEEIi3AAEw3v1H7RFAIKYCucKgNodAWJ9OzRX4bG3qNdpn75/rL6OBuWTYjwACCCCQTYAAmE2FfQgggEANBfKFQTtVtFWrVmbaaA2rlYpbaejTET7dbAC0DdfAp1u9R/psfQr9JQgWEuI4AggggIAKEAD5HSCAAAIRErDT+twXzLvVs4FQ9xEKXZnCnzXg2ef49Oxg4NN9dpTPfta/cdsIgnHrMeqLAAII1FaAAFhbb+6GAAIIlCRgRwdzBUItjFCYSWqDXaGwZ+y8Ub5WPbxXNoT42obM2tTvG0GwfvbcGQEEEIiyAAEwyr1D3RBAAIGAgB0h1N35QqEe12DY9LeV+asjhk3fm/abLzH9J1vI06bY/dma5U7p1OP2e7Zzk7KPEJiUnqQdCCCAQHgCBMDwLCkJAQQQqItAKaHQrWAwINpjNijqd3uOPVbNv25409E7u+mrF+zmnmP3Bf+6wU6f39PN3Rc8Pw3f3SCoFj1POT8NzaaNCCCAAAJZBAiAWVDYhQACCCRBQIOhbvMmjTN/dcTQfF+433wp859KgmExIa5QtWygs9M37fl2v/3O30UC+nv44PJz/B28MsKn4AMCCCCQKgECYKq6m8YigAACiwSCAdEesUFRv9tz7LFq/nXDmwY7u+nzeXZzz7H7+FuagDsaSAgszY6zEUAAgSQIEACT0Iu0AQEEEKixQCXBUEOcHY3Sz0xHrHHnebdzQ6D2QVxedVF7Ke6IAAIIJE+AAJi8PqVFCCCAQCwExpy8m6mnBkBG9mrfZRrCp4+4yx/lZTSw9n3AHRFAAIF6CBAA66HOPRFAAAEEzPNoGkIYBazvj8EdDSQE1rcvuDsCCCBQCwECYC2UuQcCCCCAQDMBOw1UD2x4xbBmx9lROwE3BDIltHbu3AkBBBCohwABsB7q3BMBBBBAwAjoqpQaBJkGWv8fBFNC698H1AABBBCohQABsBbK3AMBBBBAIKuAHQVkGmhWnrrsdEcDmRJaly7gpggggEBVBQiAVeWlcAQQQACBQgIsBlNIqPbHCYG1N+eOCCCAQK0ECIC1kuY+CCCAAAJZBWzYYBQwK0/ddtrRWa0AI4F16wZujAACCIQuQAAMnZQCEUAAAQRKFWAUsFSx2pxPCKyNM3dBAAEEailAAKylNvdCAAEEEMgqwChgVpZI7HRDIKO0kegSKoEAAghUJEAArIiPixFAAAEEwhJgFDAsyfDLIQSGb0qJCCCAQL0ECID1kue+CCCAAAIZAowCZnBE7ouGwOkj7jKv7WAkMHLdQ4UQQACBogUIgEVTcSICCCCAQLUFGAWstnDl5dt3NxICK7ekBAQQQKAeAgTAeqhzTwQQQACBrAKMAmZlidxOGwK1Yj1POV80DLIhgAACCMRDgAAYj36ilggggEBqBGy4IFhEu8ttP2kt6ato9xW1QwABBFwBAqCrwWcEEEAAgboL2AVHmGJY964oWAFCYEEiTkAAAQQiJ0AAjFyXUCEEEEAAARssGFmK/m/BTtvVmtJf0e8vaogAAggQAPkNIIAAAghEToBRwMh1Sd4K2cDOqG1eJg4igAACkRAgAEaiG6gEAggggEBQwIaKzjsdKCsPOjB4mO8RE6C/ItYhVAcBBBDIIUAAzAHDbgQQQACB+grYUUCtxYZXDKtvZbh7QQG3vwjtBbk4AQEEEKibAAGwbvTcGAEEEECgkACjSoWEonWcEBit/qA2CCCAQDYBAmA2FfYhgAACCERCwA0UjAJGoksKVoJFYQoScQICCCBQVwECYF35uTkCCCCAQCEBRgELCUXvuBsCCe7R6x9qhAAC6RYgAKa7/2k9AgggEHkBdxSQ1wxEvrv8CtrgzsqgPgkfEEAAgUgIEAAj0Q1UAgEEEEAgn4AdUSJM5FOK3jEbAlkUJnp9Q40QQCC9AgTA9PY9LUcAAQRiJUCYiFV3mcq6o7eEwPj1HzVGAIFkChAAk9mvtAoBBBBInIAbJpgKGp/upd/i01fUFAEE0iFAAExHP9NKBBBAIBECTAWNZzfaftPaE97j2YfUGgEEkiNAAExOX9ISBBBAIBUCTAWNZzfbEMhznPHsP2qNAALJESAAJqcvaQkCCCCQCgGmFMa3m8sJ7xocVx50YHwbTc0RQACBiAkQACPWIVQHAQQQQKCwAKNJhY2ieEap4d32M+8SjGJvUicEEIirAAEwrj1HvRFAAIGUC5QzmpRyskg034a6QlNB7XlaaZ4bjETXUQkEEEiIAAEwIR1JMxBAAIG0CZQ6mpQ2nyi3t1B4d8OftoNXSES5N6kbAgjETYAAGLceo74IIIAAAr6ADQqFRpP8C/gQCYF84d09ZitLALQS/EUAAQQqFyAAVm5ICQgggAACdRQoNJpUx6px6zwC2cJ7tvBni+A5QCvBXwQQQKAyAQJgZX5cjQACCCBQZwE3NPCsWJ07o8Tbu+G9dfe+ot9zbQTAXDLsRwABBEoTIACW5sXZCCCAAAIRFLBBgqmgEeycPFVyw3ue08whwn0hIY4jgAACxQkQAItz4iwEEEAAgYgLjDl5N1NDnheLeEctrJ6Gv3mTxsmcV5+R72fPKlhp+rUgEScggAACRQkQAIti4iQEEEAAgagLuKNJhIXo9JYNelqj+RPHiX4vZ6NPy1HjGgQQQKC5AAGwuQl7EEAAAQRiKmAXFtHqM2Wwvp1oR2TDqgXTe8OSpBwEEEi7AAEw7b8A2o8AAggkTIAQGI0OdUdkw6oRC8GEJUk5CCCQZgECYJp7n7YjgAACCRVgUZhodGzYIZBR3Wj0K7VAAIF4CxAA491/1B4BBBBAIIcAITAHTI13hxkCeQ6wxp3H7RBAIJECBMBEdiuNQgABBBBwgwfBob6/B7cvKqkJ/ViJHtcigAACTQIEQH4JCCCAAAKJFXCDB+Ghvt3s9kW5NWEhmHLluA4BBBBYJEAAXGTBJwQQQACBBAqwKEx0OjWMEMhCMNHpT2qCAALxFCAAxrPfqDUCCCCAQAkChMASsKp8aqUhkIVgqtxBFI8AAokXIAAmvotpIAIIIICACrAoTHR+B5WEQKbyRqcfqQkCCMRTgAAYz36j1ggggAACZQgQAstAq9Il7qhsKbcgAJaixbkIIIBAcwECYHMT9iCAAAIIJFTAHXkiSNS/k8sJgSwEU/9+owYIIBBvAQJgvPuP2iOAAAIIlChACCwRrMqnlxMCWQimyp1C8QggkGgBAmCiu5fGIYAAAghkEyAEZlOp375SQyABsH59xZ0RQCD+AgTA+PchLUAAAQQQKEPADYFMKywDMORLSgmBTN8NGZ/iEEAgVQIEwFR1N41FAAEEEHAFCIGuRv0/FxsCCYD17ytqgAAC8RUgAMa376g5AggggEBIAqwOGhJkCMUUEwIJgCFAUwQCCKRWgACY2q6n4QgggAACrgAh0NWo7+diQiDPAda3j7g7AgjEV4AAGN++o+YIIIAAAiEL2BCoxfY85XzRZwPZ6iNQKAQSAOvTL9wVAQTiL0AAjH8f0gIEEEAAgRAFCIEhYlZYVL4QSECvEJfLEUAgtQIEwNR2PQ1HAAEEEMgl4AYPgkYupdrsd/vCvSPPAboafEYAAQSKFyAAFm/FmQgggAACKRJwgwchsL4d7/aFrUn7TbeTLgefar/yFwEEEECgSAECYJFQnIYAAgggkD4BN3gw4lTf/nf7QmuyxHItZb2L7qxvpbg7AgggEEMBAmAMO40qI4AAAgjUTsANHoTA2rlnu5PbF3qchWCyKbEPAQQQyC9AAMzvw1EEEEAAAQQkGDwIgvX7Ubh9sereR0unht3qVxnujAACCMRQgAAYw06jyggggAAC9RFwwwchsD59oHedesdlMnvUM7JM+47Sd8gN9asId0YAAQRiKEAAjGGnUWUEEEAAgfoJEALrZ+/eeczJTSN/LNDjqvAZAQQQKCxAACxsxBkIIIAAAghkCLghUA8wGpjBU5Mv9n2N2NeEm5sggECCBAiACepMmoIAAgggUFsBNwgSRGprP2/iO6IhsHWPdURHAdkQQAABBIoTIAAW58RZCCCAAAIIZBVwQ2CYYUQDjm5aZlS3qZ/PMVWbOmu2TP1ibs2rGQejbChdVlzB392lY3vp0qGd/50PCCCAQLUFCIDVFqZ8BBBAAIHEC9jRKNvQMEYDbZlhlGXrFdZfDX6NEybJ1FlNATCsctNaTkPvbqbpDX16pJWAdiOAQA0FCIA1xOZWCCCAAALJFnBHAysNbmGWFZZ6MPi1atXKFN2yZUuxn8O6V5LLmT9/vt+8mTNn+p8Jgj4FHxBAoIoCBMAq4lI0AggggED6BNzgpq0vNwgGy6mkrDB6oXH8RG/Ub7IpSsNep06dRIMfW+UCGgKDQZDRwMpdKQEBBLILEACzu7AXAQQQQACBigSCAa7UIBi83lam1HLsdZX8dcOfBj/9H1v4Am4Q1NFAQmD4xpSIAAIiBEB+BQgggAACCFRJQEOcbtMfa/qrn4sNcLkCoJahW63ef0f4a/Ku1b9uCBzc0J8FYmoFz30QSJEAATBFnU1TEUAAAQTqIxAMc8WEwOA12WpeTDnZritl35B7HzenM/JXilpl59oQ2KVjOxk8oH9lhXE1AgggEBAgAAZA+IoAAggggEC1BIKhLl+AC56bq075ysh1TbH77egf4a9YsfDOmzJliuhiMYwChmdKSQgg0CRAAOSXgAACCCCAQI0FguEuW4gLnlOoitnKKHRNoeOM/hUSqt7xBQsWyOTJk4VRwOoZUzICaRUgAKa152k3AggggEDdBYIhzw1xwWPFVNa9vpjz853D6F8+ndocYxSwNs7cBYG0CRAA09bjtBcBBBBAIFICGvTmTxwn+uJ3u2mQ081dPMYeK+ZvGAvEEACLka7uOfZZQFYEra4zpSOQNgECYNp6nPYigAACCERSoJwRv3wNqXQ0cOjI0TJ11hzp1q0b7/vLB13FY0wDrSIuRSOQYgECYIo7n6YjgAACCERPQIPgD7NnyexXn6m4cpWEwCgGwM8//Uhmf/apcVmz3/qyzHItKjaKcgEEwCj3DnVDIL4CBMD49h01RwABBBBIqMAHl5+TMSW00maWEwTtAjD9+vWr9PahXd94z63yyrD7TXlH/v1S6dSla2hlR7WgsWPHmqoN2XdgVKtIvRBAIGYCBMCYdRjVRQABBBBItkDYU0GtVqkhkABo5er7lwBYX3/ujkASBQiASexV2oQAAgggEEuBaoU/F6PYIEgAdNXq95kAWD977oxAUgUIgEntWdqFAAIIIBArAV0FVKd+1mIrJgQSAGvRE4XvQQAsbMQZCCBQmgABsDQvzkYAAQQQQKAqAmNO3q0q5eYqtHWPdURfF5Frq3cA/PGH72X+3LnSpv2KssSSS5pqlvQM4K+/yvwv58piiy8mLZdfIVcz8+7/+aefZN7c2dKm3Yqy+BJL5D03ePCbr7+SX37+WVqt0C54qKTvBMCSuDgZAQSKECAAFoHEKQgggAACCFRToBZTP3PVP9doYL0C4HujXzILvcyYOtmv8pp915PNdttHPhz3ZsFFYD6a8I68+ODdMuPDSfLDd9+aMpZedjlZba3esvnu+8qqPdf2y7UfXn/yUXnzmcdlqWWWlcF/u1jebnxKxr00Uj5+d9G7GVfpvpapQ48N+tvLmv2dOXWKvPDgXfLZxPdEA6Bu9t5b7nWArNytZ7NrCu0gABYS4jgCCJQqQAAsVYzzEUAAAQQQCFGgnuHPNiNbCKx1APzVG7F75o4b5bXHH7HVava3RZvl/WAVXAVUR9uGX3e5F9wam13n7th05z1lwH6HZozoPXf3LTLqkQfMaZvttrcfMt3r7OcG71oNoxmbV/dRwx+U5+66JWN38MvW+xwkW+y+n8hiiwUP5fxOAMxJwwEEEChTgABYJhyXIYAAAgggEIZAruf+9JnAWm+tuveVlXc6UHR6aK0D4NjnnzEBzra5/6DdZM111pfvFiyQt557Uj6a0PQ6BHs8GABffvgeGXnvHfawbLLT7rJ6737y6y+/yNRxb8nrTw73j2138JHSf9Du/nc3ANqd6227oxk1/ObrL2XCKy/K9CkT7SH53TW3y3KtWvvfJ7zygjx85cX+941+s7N0XXdDWXzxxeWT9yfISw/d4x/b/cQzpfdmW/nfC30gABYS4jgCCJQqQAAsVYzzEUAAAQQQqLNArnA4b9K4vDWbP3HR8R/mzDTnfu+9dD7b9sjWJ5jdtXgPoI7eXXHyEf7o3p4nnyW9NtnCr5Yef/ymq+TtkU/7+9wAOOvjqXLjn071jx18zvmy+tp9/e/6YfLbY+Sef/3N33fS5TdKa+/ZPt2CAfDgc/7uXb+Of+6P338nt5/3J7HTUnc+5mTpt/X25rgeu+q0Y/y673/WX6Rrvw38a/XDZ5Pel1uHnGX26SjmCZdeZ6abZpyU4wsBMAcMuxFAoGwBAmDZdFyIAAIIIIBAMgQ0UNrwqCFRv9cyAM6ZMU2uPfN4g7naWn3kkHP/0QxWn6m77ITD/P1uABz16AP+9MuNB+4q2x9ytH+e+2HEjVea0UTdZ6Zj7rG/OewGwH5bbys7H7MoTNrr33xmhDx+8zXmq3vt241PymM3XGn2b7D9INlx8HH2koy/I++5TV4edp/Zt+vxp0nfLRoyjuf6QgDMJcN+BBAoV4AAWK4c1yGAAAIIIJBggVpOAf3g9Vfk/v9cYDR3PuYUb3Rtu6yyw6+7TMY+/6w55gbAey8+Tya99brZf8y/rpL2nVfJer07Uthn8wGy2wmnm/PcAJjr/u4I4hZ77OcFyIPNtfrc4ugRw8znA84eYqatZrv5J++PN6OIesy9Ptu57j4CoKvBZwQQCEOAABiGImUggAACCCCQMIFaBsAXvZUzX7j/TiN40J/OkzW8Z/eybe5zfm4AvOToA/wVP8+6+T5ZYqmlsl1uztFzdeu4ehc56h+Xmc9uAMx1f30GcOj/nWnO39xbBEYXktHNDZ9mRxH/rL3JlrLHyb8v4kwRAmBRTJyEAAIlCBAAS8DiVAQQQAABBNIiUMsAOOyqf8v4l0ca2iPOu0RWWrN7Vuaxzz/tLRRzhTmWKwD+8faHs15rd/7zkKbFX/T1DGfccJfZ7QbAI/7+b1mpSzd7uv93uvdaiaHnnmG+uwHw2jNPkDkzPvPPK+ZD5649zOsmijmXAFiMEucggEApAgTAUrQ4FwEEEEAAgZQI1DIAPn/fHf5KmcEFWFzuMU8Nlydvuc7scgPg1acfK1/OmmH2n33LAxmveHCv1wVbLj6q6bm/diutIsdefJU5XEkAvO1vf5BPP3jXlDPwyONluZaLVgd17+1+XrZlK+nSd113V87PBMCcNBxAAIEyBQiAZcJxGQIIIIAAAkkWqGUAdJ8B3PW430nfLbfJSvvcnUPN+/b0oBsA7/v3+TLxjdHmmhMvu0HatO+Q9frZ0z6V68460RxzF5upJAA+dsN/zYvjtdBD/++CrC+az1qZIncSAIuE4jQEEChagABYNBUnIoAAAgggkB6BWgZAHb3TUTzd9Pk/fQ4vuOmrIK79/Qn+SJ8bAJ/9303y6mNNUz8H7HeIbL7bvsHLzffGu2+VVx6533zW9wRue9CR5nMlAdBdgXSjHXeRHQ79bdZ7v/fqSzL8+iukbcdOsvamW+asY/BiAmBQhO8IIFCpAAGwUkGuRwABBBBAIIECtQyA8uuvctmJh/vv0tvn9HOkxwb9M1TfeHqEPDG06TUMesANgDOnTpGb/nyaOV+f7Tvy/P/ICp1Wyrh+9rRPvNG/k/x9h/7lQlm1Ry/zvZIAOHfmDLnmjKbwqoW55dqbfTt/nllAxk5TDb7n0J6X7S8BMJsK+xBAoBIBAmAlelyLAAIIIIBAQgVqGgA9w08nvie3/fVsX3ObAw+XnhtuKr/+8rOMe7HRf4eePcENgLpPw6GGRN00BG5/6NGyeq8+5vtH48fKCO9F8nZzF3HRfZUEQL3+xQfulBceaFpQRr9vs/9h0t0LsIstvrh8+M6b8uYzj8sXn32ih7wRwJXkWO9VFYsvsYT5XugfAmAhIY4jgECpAgTAUsU4HwEEEEAAgRQI1DoAKumEV56Xh6+8JKeuBrsfvvvWHA8GQB1le+CyC+Xjd9/Jeb0e2HSXPWWbAwZnnFNpAPzxh+9l2FWXij7LmG9r0WZ5OXzIRSYE5jvPPUYAdDX4jAACYQgQAMNQpAwEEEAAAQQSJlCPAKiE4158ThrvuV3mzfnCF9Xgt/nu+8jyK3b0A+LR/7xcOqy2hn+OfvjVm0r6xtOPyYsP3u1PJ7UntG63ogl/G+2ws8hii9nd5q+7Cqm+G1DfERjc3GmmW+65v2y190HBU0yAffbOWzLqbk/S5wM322VvabVCO7urqL8EwKKYOAkBBEoQIACWgMWpCCCAAAIIpEWgXgFQfXXBl7kzp8vXsz/3VvRcUdp1XtXLbJmhrVA/fDvva/nCe+7vl59/MWW07dDJTMksdF0Yx7//5huZPf1T+eHbb6W1V39tw1JLL1NW0QTAsti4CAEE8ggQAPPgcAgBBBBAAIG0CtQzAKbVPFu7CYDZVNiHAAKVCBAAK9HjWgQQQAABBBIqQACMRscSAKPRD9QCgSQJEACT1Ju0BQEEEEAAgZAEig2AusrlZ94KnmVv3tROfW9fsatiln2fmF5IAIxpx1FtBCIsQACMcOdQNQQQQAABBOolUGwAfOaOm2T0iKaXsJdb1zNvuqfsZ+TKvWdcriMAxqWnqCcC8REgAManr6gpAggggAACNRMYOnK0TJ01R7p16yYtW7bMed/Jb4+RT94bn/N4oQO6uIuuqMkIYHOpBQsWyOTJk6VLx3YyeED/5iewBwEEEChDgABYBhqXIIAAAgggkHSBYgNg0h3q2b6ZM2eK/q+hdzdp6NOjnlXh3gggkCABAmCCOpOmIIAAAgggEJZA4/iJ0jhhsrRq1Uq6du0aVrGUU4IAAbAELE5FAIGiBQiARVNxIgIIIIAAAukRmPr5HBnaONo0uF+/fulpeIRayvN/EeoMqoJAggQIgAnqTJqCAAIIIIBAmAJ2GminTp1E/8dWOwFG/2pnzZ0QSJsAATBtPU57EUAAAQQQKFKAUcAioapwGqN/VUClSAQQMAIEQH4ICCCAAAIIIJBTwI4C8ixgTqLQD0yZMkXmz5/P4i+hy1IgAgioAAGQ3wECCCCAAAII5BWwIZCpoHmZQjlowx+vfgiFk0IQQCCLAAEwCwq7EEAAAQQQQGCRgDsVVPcSBBfZhPVJ3/mnz/3pyJ+Gv4be3aVLh3ZhFU85CCCAgC9AAPQp+IAAAggggAAC+QTsSKA9hyBoJcr7q6FPNxv89DMjf6rAhgAC1RQgAFZTl7IRQAABBBBImIB9P2CwWfqMIFvxAjrS526M+rkafEYAgWoKEACrqUvZCCCAAAIIJFRAg+DUL+bK1FlzEtrC6jdLQ59uTPesvjV3QACBRQIEwEUWfEIAAQQQQACBMgX0OUG24gV4vq94K85EAIFwBQiA4XpSGgIIIIAAAggggAACCCAQWQECYGS7hoohgAACCCCAAAIIIIAAAuEKEADD9aQ0BBBAAAEEEEAAAQQQQCCyAgTAyHYNFUMAAQQQQAABBBBAAAEEwhUgAIbrSWkIIIAAAggggAACCCCAQGQFCICR7RoqhgACCCCAAAIIIIAAAgiEK0AADNeT0hBAAAEEEEAAAQQQQACByAoQACPbNVQMAQQQQAABBBBAAAEEEAhXgAAYrielIYAAAggggAACCCCAAAKRFSAARrZrqBgCCCCAAAIIIIAAAgggEK4AATBcT0pDAAEEEEAAAQQQQAABBCIrQACMbNdQMQQQQAABBBBAAAEEEEAgXAECYLielIYAAggggAACCCCAAAIIRFaAABjZrqFiCCCAAAIIIIAAAggggEC4AgTAcD0pDQEEEEAAAQQQQAABBBCIrAABMLJdQ8UQQAABBBBAAAEEEEAAgXAFCIDhelIaAggggAACCCCAAAIIIBBZAQJgZLuGiiGAAAIIIIAAAggggAAC4QoQAMP1pDQEEEAAAQQQQAABBBBAILICBMDIdg0VQwABBBBAAAEEEEAAAQTCFSAAhutJaQgggAACCCCAAAIIIIBAZAUIgJHtGiqGAAIIIIAAAggggAACCIQrQAAM15PSEEAAAQQQQAABBBBAAIHIChAAI9s1VAwBBBBAAAEEEEAAAQQQCFeAABiuJ6UhgAACCCCAAAIIIIAAApEVIABGtmuoGAIIIIAAAggggAACCCAQrgABMFxPSkMAAQQQQAABBBBAAAEEIitAAIxs11AxBBBAAAEEEEAAAQQQQCBcAQJguJ6UhgACCCCAAAIIIIAAAghEVoAAGNmuoWIIIIDA/7dfxzQAADAMw/izLokcPUygmrwrBAgQIECAAAECrYAAbD2tESBAgAABAgQIECBA4FZAAN6+xmEECBAgQIAAAQIECBBoBQRg62mNAAECBAgQIECAAAECtwIC8PY1DiNAgAABAgQIECBAgEArIABbT2sECBAgQIAAAQIECBC4FRCAt69xGAECBAgQIECAAAECBFoBAdh6WiNAgAABAgQIECBAgMCtgAC8fY3DCBAgQIAAAQIECBAg0AoIwNbTGgECBAgQIECAAAECBG4FBODtaxxGgAABAgQIECBAgACBVkAAtp7WCBAgQIAAAQIECBAgcCsgAG9f4zACBAgQIECAAAECBAi0AgKw9bRGgAABAgQIECBAgACBWwEBePsahxEgQIAAAQIECBAgQKAVEICtpzUCBAgQIECAAAECBAjcCgjA29c4jAABAgQIECBAgAABAq2AAGw9rREgQIAAAQIECBAgQOBWQADevsZhBAgQIECAAAECBAgQaAUEYOtpjQABAgQIECBAgAABArcCAvD2NQ4jQIAAAQIECBAgQIBAKyAAW09rBAgQIECAAAECBAgQuBUQgLevcRgBAgQIECBAgAABAgRaAQHYelojQIAAAQIECBAgQIDArYAAvH2NwwgQIECAAAECBAgQINAKCMDW0xoBAgQIECBAgAABAgRuBQTg7WscRoAAAQIECBAgQIAAgVZAALae1ggQIECAAAECBAgQIHArIABvX+MwAgQIECBAgAABAgQItAICsPW0RoAAAQIECBAgQIAAgVsBAXj7GocRIECAAAECBAgQIECgFRCArac1AgQIECBAgAABAgQI3AoIwNvXOIwAAQIECBAgQIAAAQKtgABsPa0RIECAAAECBAgQIEDgVkAA3r7GYQQIECBAgAABAgQIEGgFBGDraY0AAQIECBAgQIAAAQK3AgNDV2x5lirFPgAAAABJRU5ErkJggg==)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Download data to demo"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"--2024-08-07 18:21:11-- https://www.dropbox.com/scl/fi/xt3squt47djba0j7emmjb/2016-CSF_Budget_Book_2016_FINAL_WEB_with-cover-page.pdf?rlkey=xs064cjs8cb4wma6t5pw2u2bl&dl=0\n",
"Resolving www.dropbox.com (www.dropbox.com)... 162.125.1.18, 2620:100:6057:18::a27d:d12\n",
"Connecting to www.dropbox.com (www.dropbox.com)|162.125.1.18|:443... connected.\n",
"HTTP request sent, awaiting response... 302 Found\n",
"Location: https://ucca241228aca55dbf9fcd60ae81.dl.dropboxusercontent.com/cd/0/inline/CYOq1NGkhLkELMmygLIg_gyLPXsOO7xOLjc3jW-mb09kevMykGPogSQx_icUTBEfHshxiSainXTynZYnh5O6uZ4ITeGiMkpvjl1QqXkKI34Ea8WzLr4FEyzkwohAC2WCQAU/file# [following]\n",
"--2024-08-07 18:21:12-- https://ucca241228aca55dbf9fcd60ae81.dl.dropboxusercontent.com/cd/0/inline/CYOq1NGkhLkELMmygLIg_gyLPXsOO7xOLjc3jW-mb09kevMykGPogSQx_icUTBEfHshxiSainXTynZYnh5O6uZ4ITeGiMkpvjl1QqXkKI34Ea8WzLr4FEyzkwohAC2WCQAU/file\n",
"Resolving ucca241228aca55dbf9fcd60ae81.dl.dropboxusercontent.com (ucca241228aca55dbf9fcd60ae81.dl.dropboxusercontent.com)... 162.125.1.15, 2620:100:6016:15::a27d:10f\n",
"Connecting to ucca241228aca55dbf9fcd60ae81.dl.dropboxusercontent.com (ucca241228aca55dbf9fcd60ae81.dl.dropboxusercontent.com)|162.125.1.15|:443... connected.\n",
"HTTP request sent, awaiting response... 302 Found\n",
"Location: /cd/0/inline2/CYMeJ4nM2JL44i1kCE4kttRGFOk-_34sr37ALElZu9szHfn-VhihA7l4cjIIFKHNN1ajRfeYYspGW3zPK1BZShxO3O7SEaXnHpUwUaziUcoz6b5IkdtXww3M6tRf8K2MZB4pHMSwxiuKe_vw9jitwHNeHn-jVzVRMw9feenAHN21LDudw5PxmsvqXSLeHMAGgs_tjeo1o92vltmhL6FpHs2czHsQFlYuaFMzwecv2xAMzHUGCGOhfNkmg2af16lP2QKLKgWAPK4ttCePTv-Ivy2KQ_GYVKKXRFlYHkIwhCQ_JFOyrtl_n14xls76NyPZRSZWmygSHJ-HH6Hntqvi86XpgCF-N_dZJh_HhSxuAaZd2g/file [following]\n",
"--2024-08-07 18:21:13-- https://ucca241228aca55dbf9fcd60ae81.dl.dropboxusercontent.com/cd/0/inline2/CYMeJ4nM2JL44i1kCE4kttRGFOk-_34sr37ALElZu9szHfn-VhihA7l4cjIIFKHNN1ajRfeYYspGW3zPK1BZShxO3O7SEaXnHpUwUaziUcoz6b5IkdtXww3M6tRf8K2MZB4pHMSwxiuKe_vw9jitwHNeHn-jVzVRMw9feenAHN21LDudw5PxmsvqXSLeHMAGgs_tjeo1o92vltmhL6FpHs2czHsQFlYuaFMzwecv2xAMzHUGCGOhfNkmg2af16lP2QKLKgWAPK4ttCePTv-Ivy2KQ_GYVKKXRFlYHkIwhCQ_JFOyrtl_n14xls76NyPZRSZWmygSHJ-HH6Hntqvi86XpgCF-N_dZJh_HhSxuAaZd2g/file\n",
"Reusing existing connection to ucca241228aca55dbf9fcd60ae81.dl.dropboxusercontent.com:443.\n",
"HTTP request sent, awaiting response... 200 OK\n",
"Length: 29467998 (28M) [application/pdf]\n",
"Saving to: ./data/sf_budgets/2016 - CSF_Budget_Book_2016_FINAL_WEB_with-cover-page.pdf\n",
"\n",
"./data/sf_budgets/2 100%[===================>] 28.10M 173MB/s in 0.2s \n",
"\n",
"2024-08-07 18:21:14 (173 MB/s) - ./data/sf_budgets/2016 - CSF_Budget_Book_2016_FINAL_WEB_with-cover-page.pdf saved [29467998/29467998]\n",
"\n",
"--2024-08-07 18:21:14-- https://www.dropbox.com/scl/fi/jvw59g5nscu1m7f96tjre/2017-Proposed-Budget-FY2017-18-FY2018-19_1.pdf?rlkey=v988oigs2whtcy87ti9wti6od&dl=0\n",
"Resolving www.dropbox.com (www.dropbox.com)... 162.125.1.18, 2620:100:6057:18::a27d:d12\n",
"Connecting to www.dropbox.com (www.dropbox.com)|162.125.1.18|:443... connected.\n",
"HTTP request sent, awaiting response... 302 Found\n",
"Location: https://uca6ee7d218771b609b8ecdf23d7.dl.dropboxusercontent.com/cd/0/inline/CYNMSJ2zt2I5765XfzleiddbUXb-TkZP91r9LuVw_6wBH0USNyLT6lclDE7x6I0-_WEaGM7zqqCipxx7Uyp5owmnwMx8JyfbHG3fZ4LSDYM6QzubFok7NSc0R2KRd3DX0qg/file# [following]\n",
"--2024-08-07 18:21:15-- https://uca6ee7d218771b609b8ecdf23d7.dl.dropboxusercontent.com/cd/0/inline/CYNMSJ2zt2I5765XfzleiddbUXb-TkZP91r9LuVw_6wBH0USNyLT6lclDE7x6I0-_WEaGM7zqqCipxx7Uyp5owmnwMx8JyfbHG3fZ4LSDYM6QzubFok7NSc0R2KRd3DX0qg/file\n",
"Resolving uca6ee7d218771b609b8ecdf23d7.dl.dropboxusercontent.com (uca6ee7d218771b609b8ecdf23d7.dl.dropboxusercontent.com)... 162.125.1.15, 2620:100:6016:15::a27d:10f\n",
"Connecting to uca6ee7d218771b609b8ecdf23d7.dl.dropboxusercontent.com (uca6ee7d218771b609b8ecdf23d7.dl.dropboxusercontent.com)|162.125.1.15|:443... connected.\n",
"HTTP request sent, awaiting response... 302 Found\n",
"Location: /cd/0/inline2/CYNJm2hH6OlYZdhW6cv8AuAYvgEiuyOY1KUwzlH1Nq4RrvmmOHg2ipVgEq88bfVDEC_xV0SegX6DL-4CUB_6_2AjHC7iS5VnZVxsjkbpQHTqEKr7OK6mAlsGNPQi--ocxwOsUbQNpLVNSjEc2zA98VZLpntTl3AoJEvl4wmpvBhNCs_ChiY2TDNcQGFDPH5AjvEEHImiNQqCzrOzoSpFh9Ut9NQty6vjADUHg1yXFcPa5R-ODch6hb4FgTCQZv7WYQJ7H_MRHVJyLoIyCX8bqwZAblnXC9SbUuIxdgmkiAB_wwjJKuFLV7YNNjJX5kg9spGoYnRv7gNDqUhjvXBwKW_IQxsYc1HjsaabrrRFjXntAw/file [following]\n",
"--2024-08-07 18:21:16-- https://uca6ee7d218771b609b8ecdf23d7.dl.dropboxusercontent.com/cd/0/inline2/CYNJm2hH6OlYZdhW6cv8AuAYvgEiuyOY1KUwzlH1Nq4RrvmmOHg2ipVgEq88bfVDEC_xV0SegX6DL-4CUB_6_2AjHC7iS5VnZVxsjkbpQHTqEKr7OK6mAlsGNPQi--ocxwOsUbQNpLVNSjEc2zA98VZLpntTl3AoJEvl4wmpvBhNCs_ChiY2TDNcQGFDPH5AjvEEHImiNQqCzrOzoSpFh9Ut9NQty6vjADUHg1yXFcPa5R-ODch6hb4FgTCQZv7WYQJ7H_MRHVJyLoIyCX8bqwZAblnXC9SbUuIxdgmkiAB_wwjJKuFLV7YNNjJX5kg9spGoYnRv7gNDqUhjvXBwKW_IQxsYc1HjsaabrrRFjXntAw/file\n",
"Reusing existing connection to uca6ee7d218771b609b8ecdf23d7.dl.dropboxusercontent.com:443.\n",
"HTTP request sent, awaiting response... 200 OK\n",
"Length: 13463517 (13M) [application/pdf]\n",
"Saving to: ./data/sf_budgets/2017 - 2017-Proposed-Budget-FY2017-18-FY2018-19_1.pdf\n",
"\n",
"./data/sf_budgets/2 100%[===================>] 12.84M --.-KB/s in 0.09s \n",
"\n",
"2024-08-07 18:21:17 (136 MB/s) - ./data/sf_budgets/2017 - 2017-Proposed-Budget-FY2017-18-FY2018-19_1.pdf saved [13463517/13463517]\n",
"\n",
"--2024-08-07 18:21:17-- https://www.dropbox.com/scl/fi/izknlwmbs7ia0lbn7zzyx/2018-o0181-18.pdf?rlkey=p5nv2ehtp7272ege3m9diqhei&dl=0\n",
"Resolving www.dropbox.com (www.dropbox.com)... 162.125.1.18, 2620:100:6057:18::a27d:d12\n",
"Connecting to www.dropbox.com (www.dropbox.com)|162.125.1.18|:443... connected.\n",
"HTTP request sent, awaiting response... 302 Found\n",
"Location: https://uc922ffad4a58390c4df80dcafbf.dl.dropboxusercontent.com/cd/0/inline/CYOEOqz8prU7eZPDzgM8fwVVcHoP1lWOLF--9VoNPtzVDSvDCXUDxR1CeN_VMzOp4JGTG6V-CeYm7oLwrrEIjuWThf5rHt8eLh52TF1nJ4-jVPrn7nAjFrealf436uezAs0/file# [following]\n",
"--2024-08-07 18:21:17-- https://uc922ffad4a58390c4df80dcafbf.dl.dropboxusercontent.com/cd/0/inline/CYOEOqz8prU7eZPDzgM8fwVVcHoP1lWOLF--9VoNPtzVDSvDCXUDxR1CeN_VMzOp4JGTG6V-CeYm7oLwrrEIjuWThf5rHt8eLh52TF1nJ4-jVPrn7nAjFrealf436uezAs0/file\n",
"Resolving uc922ffad4a58390c4df80dcafbf.dl.dropboxusercontent.com (uc922ffad4a58390c4df80dcafbf.dl.dropboxusercontent.com)... 162.125.1.15, 2620:100:6016:15::a27d:10f\n",
"Connecting to uc922ffad4a58390c4df80dcafbf.dl.dropboxusercontent.com (uc922ffad4a58390c4df80dcafbf.dl.dropboxusercontent.com)|162.125.1.15|:443... connected.\n",
"HTTP request sent, awaiting response... 302 Found\n",
"Location: /cd/0/inline2/CYNZxULkXqH5RXSO_Tu0-X2BLjKqLUg3ZAH3vZeEHw-ic156C2iVH3wjJtcm6mkh-RpMfru6d3ZBBNTpf_EWLTWBywklJbD4ZhRInyrnF6s5oK4NWS6UQ_7GBHy11itN5OKGF9U0090wCFaQeaPwFyLxwIjhg_gZdTc8smr1YFyESsFTIJTLPq8QjI5uPvYyug6Oidh8RxOP2N2f2mBKDRS2R8cazDZRDrAxhVeAuSXPGpYzQc0lBcsTJQ8ZAXuYKww0e_qlpyHmDv6tRVHpdFNh1dyKyikOHqtGd4p3pYjBr2Kwn-jzJ1zkZf_Fpc_H9vX0Xkk6P9U25oOGvSnmIUC3LFkfHB_CJTGNSZUh36w5cA/file [following]\n",
"--2024-08-07 18:21:18-- https://uc922ffad4a58390c4df80dcafbf.dl.dropboxusercontent.com/cd/0/inline2/CYNZxULkXqH5RXSO_Tu0-X2BLjKqLUg3ZAH3vZeEHw-ic156C2iVH3wjJtcm6mkh-RpMfru6d3ZBBNTpf_EWLTWBywklJbD4ZhRInyrnF6s5oK4NWS6UQ_7GBHy11itN5OKGF9U0090wCFaQeaPwFyLxwIjhg_gZdTc8smr1YFyESsFTIJTLPq8QjI5uPvYyug6Oidh8RxOP2N2f2mBKDRS2R8cazDZRDrAxhVeAuSXPGpYzQc0lBcsTJQ8ZAXuYKww0e_qlpyHmDv6tRVHpdFNh1dyKyikOHqtGd4p3pYjBr2Kwn-jzJ1zkZf_Fpc_H9vX0Xkk6P9U25oOGvSnmIUC3LFkfHB_CJTGNSZUh36w5cA/file\n",
"Reusing existing connection to uc922ffad4a58390c4df80dcafbf.dl.dropboxusercontent.com:443.\n",
"HTTP request sent, awaiting response... 200 OK\n",
"Length: 18487865 (18M) [application/pdf]\n",
"Saving to: ./data/sf_budgets/2018 - 2018-o0181-18.pdf\n",
"\n",
"./data/sf_budgets/2 100%[===================>] 17.63M --.-KB/s in 0.1s \n",
"\n",
"2024-08-07 18:21:19 (149 MB/s) - ./data/sf_budgets/2018 - 2018-o0181-18.pdf saved [18487865/18487865]\n",
"\n",
"--2024-08-07 18:21:19-- https://www.dropbox.com/scl/fi/1rstqm9rh5u5fr0tcjnxj/2019-Proposed-Budget-FY2019-20-FY2020-21.pdf?rlkey=3s2ivfx7z9bev1r840dlpbcgg&dl=0\n",
"Resolving www.dropbox.com (www.dropbox.com)... 162.125.1.18, 2620:100:6057:18::a27d:d12\n",
"Connecting to www.dropbox.com (www.dropbox.com)|162.125.1.18|:443... connected.\n",
"HTTP request sent, awaiting response... 302 Found\n",
"Location: https://uce28a421063a08c4ce431616623.dl.dropboxusercontent.com/cd/0/inline/CYNSfAOo0ymwbrL62gVbRB_NTvZpU2t5SZqnLuZDW-OaDOssaoY8SkQxPM9csoAq0-Y3Y8rYA1E6cDD44K1pSJcsuRSyoRRVLHRmXvWdayHKMK_PWAo08V3murDu9ZZAu4s/file# [following]\n",
"--2024-08-07 18:21:20-- https://uce28a421063a08c4ce431616623.dl.dropboxusercontent.com/cd/0/inline/CYNSfAOo0ymwbrL62gVbRB_NTvZpU2t5SZqnLuZDW-OaDOssaoY8SkQxPM9csoAq0-Y3Y8rYA1E6cDD44K1pSJcsuRSyoRRVLHRmXvWdayHKMK_PWAo08V3murDu9ZZAu4s/file\n",
"Resolving uce28a421063a08c4ce431616623.dl.dropboxusercontent.com (uce28a421063a08c4ce431616623.dl.dropboxusercontent.com)... 162.125.1.15, 2620:100:6016:15::a27d:10f\n",
"Connecting to uce28a421063a08c4ce431616623.dl.dropboxusercontent.com (uce28a421063a08c4ce431616623.dl.dropboxusercontent.com)|162.125.1.15|:443... connected.\n",
"HTTP request sent, awaiting response... 302 Found\n",
"Location: /cd/0/inline2/CYOFZQRiPKCvnUe8S4h3AQ8gmhPC0MW_0vNg2GTCzxiUPSVRSgUXDsH8XYOgKuU905goGB1ZmWgs00sNArASToS2iE6pJgGfqsk3DYELK3xYZJOwJ_AscWEAjoISiZQEPhi9-QyQpyeXAr5gxavu9eMq3XFNzo9SCUA-SWFIuSCU5Tf5_ZfW_uAU41NZE4dDVsdvaD7rG4Ouci6dp6c902A2dHsNs0O-wRZEEKKFZs5KeHNLvZkdTaUGxYcgQn8vwWgTbuvAz36XycX6Sdhdp32mFF73U30G5ZTUmqAvgYDMlUilhdcJLPhhbrUyhFUWcXrfluUHkK8LkjKCPl4ywKmr8oJGji5ZOwehdXWgrL7ALg/file [following]\n",
"--2024-08-07 18:21:20-- https://uce28a421063a08c4ce431616623.dl.dropboxusercontent.com/cd/0/inline2/CYOFZQRiPKCvnUe8S4h3AQ8gmhPC0MW_0vNg2GTCzxiUPSVRSgUXDsH8XYOgKuU905goGB1ZmWgs00sNArASToS2iE6pJgGfqsk3DYELK3xYZJOwJ_AscWEAjoISiZQEPhi9-QyQpyeXAr5gxavu9eMq3XFNzo9SCUA-SWFIuSCU5Tf5_ZfW_uAU41NZE4dDVsdvaD7rG4Ouci6dp6c902A2dHsNs0O-wRZEEKKFZs5KeHNLvZkdTaUGxYcgQn8vwWgTbuvAz36XycX6Sdhdp32mFF73U30G5ZTUmqAvgYDMlUilhdcJLPhhbrUyhFUWcXrfluUHkK8LkjKCPl4ywKmr8oJGji5ZOwehdXWgrL7ALg/file\n",
"Reusing existing connection to uce28a421063a08c4ce431616623.dl.dropboxusercontent.com:443.\n",
"HTTP request sent, awaiting response... 200 OK\n",
"Length: 13123938 (13M) [application/pdf]\n",
"Saving to: ./data/sf_budgets/2019 - 2019-Proposed-Budget-FY2019-20-FY2020-21.pdf\n",
"\n",
"./data/sf_budgets/2 100%[===================>] 12.52M --.-KB/s in 0.08s \n",
"\n",
"2024-08-07 18:21:22 (161 MB/s) - ./data/sf_budgets/2019 - 2019-Proposed-Budget-FY2019-20-FY2020-21.pdf saved [13123938/13123938]\n",
"\n",
"--2024-08-07 18:21:22-- https://www.dropbox.com/scl/fi/7teuwxrjdyvgw0n8jjvk0/2021-AAO-FY20-21-FY21-22-09-11-2020-FINAL.pdf?rlkey=6br3wzxwj5fv1f1l8e69nbmhk&dl=0\n",
"Resolving www.dropbox.com (www.dropbox.com)... 162.125.1.18, 2620:100:6057:18::a27d:d12\n",
"Connecting to www.dropbox.com (www.dropbox.com)|162.125.1.18|:443... connected.\n",
"HTTP request sent, awaiting response... 302 Found\n",
"Location: https://uc8421b1eeadb07bda3c7e093660.dl.dropboxusercontent.com/cd/0/inline/CYMRjMFyYInwu1LATw9fLxGctgY-zI7_0nI1zgKVeJJf55J9CxQivdYpDYLjkYlXCKv2t6rQ9NCns9A5jDEU3xiQ0Ycrd6VrPv7tiYSYvNY7pXMBiV2LvXu7ZDtQgBH1334/file# [following]\n",
"--2024-08-07 18:21:22-- https://uc8421b1eeadb07bda3c7e093660.dl.dropboxusercontent.com/cd/0/inline/CYMRjMFyYInwu1LATw9fLxGctgY-zI7_0nI1zgKVeJJf55J9CxQivdYpDYLjkYlXCKv2t6rQ9NCns9A5jDEU3xiQ0Ycrd6VrPv7tiYSYvNY7pXMBiV2LvXu7ZDtQgBH1334/file\n",
"Resolving uc8421b1eeadb07bda3c7e093660.dl.dropboxusercontent.com (uc8421b1eeadb07bda3c7e093660.dl.dropboxusercontent.com)... 162.125.1.15, 2620:100:6016:15::a27d:10f\n",
"Connecting to uc8421b1eeadb07bda3c7e093660.dl.dropboxusercontent.com (uc8421b1eeadb07bda3c7e093660.dl.dropboxusercontent.com)|162.125.1.15|:443... connected.\n",
"HTTP request sent, awaiting response... 302 Found\n",
"Location: /cd/0/inline2/CYOOkJRGOrBeY0GY5xS_84ayGgfFapr4kvbiFcnAUkvwENgCw8Z3qTT_G2oQpBq6h-RVzjOh4SPrgusfRfbEWg9ZxXwxyWPo5I4yJ7eVhhqTi2jZN42r_k1FWF4IjxgRhMA237BSrCcKkweLmMNm3oN4cFap5dw2fyesDaZg0xa-fRAEjF5MubgvXVAwNVmEvrL8M7Sm4s4VsguOPsytt9GqfPkuARDvYXGLfvZeCx4hRfqOaNXdeGyBSy3GUBKyf8bH3YTHw6wEBk8Yp2dG64Q8FJyUgAXkpn1wZpBQe0dnk5WdoWrKrtkL4RDbBPo1k0fDfKeuajw_h5BhtEAl5XVE-11C0IEzcse1D-19TNlSuQ/file [following]\n",
"--2024-08-07 18:21:24-- https://uc8421b1eeadb07bda3c7e093660.dl.dropboxusercontent.com/cd/0/inline2/CYOOkJRGOrBeY0GY5xS_84ayGgfFapr4kvbiFcnAUkvwENgCw8Z3qTT_G2oQpBq6h-RVzjOh4SPrgusfRfbEWg9ZxXwxyWPo5I4yJ7eVhhqTi2jZN42r_k1FWF4IjxgRhMA237BSrCcKkweLmMNm3oN4cFap5dw2fyesDaZg0xa-fRAEjF5MubgvXVAwNVmEvrL8M7Sm4s4VsguOPsytt9GqfPkuARDvYXGLfvZeCx4hRfqOaNXdeGyBSy3GUBKyf8bH3YTHw6wEBk8Yp2dG64Q8FJyUgAXkpn1wZpBQe0dnk5WdoWrKrtkL4RDbBPo1k0fDfKeuajw_h5BhtEAl5XVE-11C0IEzcse1D-19TNlSuQ/file\n",
"Reusing existing connection to uc8421b1eeadb07bda3c7e093660.dl.dropboxusercontent.com:443.\n",
"HTTP request sent, awaiting response... 200 OK\n",
"Length: 3129122 (3.0M) [application/pdf]\n",
"Saving to: ./data/sf_budgets/2021 - 2021-AAO-FY20-21-FY21-22-09-11-2020-FINAL.pdf\n",
"\n",
"./data/sf_budgets/2 100%[===================>] 2.98M --.-KB/s in 0.05s \n",
"\n",
"2024-08-07 18:21:24 (66.3 MB/s) - ./data/sf_budgets/2021 - 2021-AAO-FY20-21-FY21-22-09-11-2020-FINAL.pdf saved [3129122/3129122]\n",
"\n",
"--2024-08-07 18:21:24-- https://www.dropbox.com/scl/fi/zhgqch4n6xbv9skgcknij/2022-AAO-FY2021-22-FY2022-23-FINAL-20210730.pdf?rlkey=h78t65dfaz3mqbpbhl1u9e309&dl=0\n",
"Resolving www.dropbox.com (www.dropbox.com)... 162.125.1.18, 2620:100:6057:18::a27d:d12\n",
"Connecting to www.dropbox.com (www.dropbox.com)|162.125.1.18|:443... connected.\n",
"HTTP request sent, awaiting response... 302 Found\n",
"Location: https://uc769a7232da4f728018e664ed74.dl.dropboxusercontent.com/cd/0/inline/CYPqlj1-wREOG6CVYV9KgsQ4Pyu3rqHgdY_UD2MqZIAndb3fAaRZeCB8kTXrOnILu6iGZZcjERz2tqT2mMiIcM86nxXDH6_J7tva-D9ZOwLROXr64weKF_NFuWTHcenrINM/file# [following]\n",
"--2024-08-07 18:21:26-- https://uc769a7232da4f728018e664ed74.dl.dropboxusercontent.com/cd/0/inline/CYPqlj1-wREOG6CVYV9KgsQ4Pyu3rqHgdY_UD2MqZIAndb3fAaRZeCB8kTXrOnILu6iGZZcjERz2tqT2mMiIcM86nxXDH6_J7tva-D9ZOwLROXr64weKF_NFuWTHcenrINM/file\n",
"Resolving uc769a7232da4f728018e664ed74.dl.dropboxusercontent.com (uc769a7232da4f728018e664ed74.dl.dropboxusercontent.com)... 162.125.1.15, 2620:100:6016:15::a27d:10f\n",
"Connecting to uc769a7232da4f728018e664ed74.dl.dropboxusercontent.com (uc769a7232da4f728018e664ed74.dl.dropboxusercontent.com)|162.125.1.15|:443... connected.\n",
"HTTP request sent, awaiting response... 302 Found\n",
"Location: /cd/0/inline2/CYNbMKpeTmC_in9_57ZDTlkiMBzRJiPbEXNEcIxLjRQJHTQEYhPcMmdqHcWdoP9Fxi1LYMKQDt1DUW1ZJYX1TxpLjIDxFyezLCprT2JfhkCROToyraIBrDpXPFgMEbBxNJIsBT1x70oL7BXSbW-pKomX6OKsy_nAP1B5jDVxhXOZtJwW8xFJwkvhNo71Aam2bT1wENAWKLdZOcVz4WRIdDI7e4Ri5FZ27Sjy2RCojgcFYusbpMWZFrxui-ssQzHsXvD1ZrZpKjyUXMIq_pdkbonY0V-8Iuq7PudclrjCIsDU2fD0bqo2MLdXw69PDLy2m5uVohTgcM0qCykha7dfGiP3BWfBpEM0PbmcfHx_IDqWDw/file [following]\n",
"--2024-08-07 18:21:27-- https://uc769a7232da4f728018e664ed74.dl.dropboxusercontent.com/cd/0/inline2/CYNbMKpeTmC_in9_57ZDTlkiMBzRJiPbEXNEcIxLjRQJHTQEYhPcMmdqHcWdoP9Fxi1LYMKQDt1DUW1ZJYX1TxpLjIDxFyezLCprT2JfhkCROToyraIBrDpXPFgMEbBxNJIsBT1x70oL7BXSbW-pKomX6OKsy_nAP1B5jDVxhXOZtJwW8xFJwkvhNo71Aam2bT1wENAWKLdZOcVz4WRIdDI7e4Ri5FZ27Sjy2RCojgcFYusbpMWZFrxui-ssQzHsXvD1ZrZpKjyUXMIq_pdkbonY0V-8Iuq7PudclrjCIsDU2fD0bqo2MLdXw69PDLy2m5uVohTgcM0qCykha7dfGiP3BWfBpEM0PbmcfHx_IDqWDw/file\n",
"Reusing existing connection to uc769a7232da4f728018e664ed74.dl.dropboxusercontent.com:443.\n",
"HTTP request sent, awaiting response... 200 OK\n",
"Length: 3233272 (3.1M) [application/pdf]\n",
"Saving to: ./data/sf_budgets/2022 - 2022-AAO-FY2021-22-FY2022-23-FINAL-20210730.pdf\n",
"\n",
"./data/sf_budgets/2 100%[===================>] 3.08M --.-KB/s in 0.05s \n",
"\n",
"2024-08-07 18:21:28 (61.4 MB/s) - ./data/sf_budgets/2022 - 2022-AAO-FY2021-22-FY2022-23-FINAL-20210730.pdf saved [3233272/3233272]\n",
"\n",
"--2024-08-07 18:21:28-- https://www.dropbox.com/scl/fi/vip161t63s56vd94neqlt/2023-CSF_Proposed_Budget_Book_June_2023_Master_Web.pdf?rlkey=hemoce3w1jsuf6s2bz87g549i&dl=0\n",
"Resolving www.dropbox.com (www.dropbox.com)... 162.125.1.18, 2620:100:6057:18::a27d:d12\n",
"Connecting to www.dropbox.com (www.dropbox.com)|162.125.1.18|:443... connected.\n",
"HTTP request sent, awaiting response... 302 Found\n",
"Location: https://uc3fa3b8bc2f92ed126eb3788d35.dl.dropboxusercontent.com/cd/0/inline/CYOKIz5n4gWk1Ywf1Ovmc-Dua40rRvPhK4YtffCdTlHM3tOiFbzgN6pyDNBx0vNo5fnHFEr5ilQwYHekMrlKykqII8thu9wiDbfAifKojwVXbgxJ1-Bqz6GXkPlLPp4rXkw/file# [following]\n",
"--2024-08-07 18:21:29-- https://uc3fa3b8bc2f92ed126eb3788d35.dl.dropboxusercontent.com/cd/0/inline/CYOKIz5n4gWk1Ywf1Ovmc-Dua40rRvPhK4YtffCdTlHM3tOiFbzgN6pyDNBx0vNo5fnHFEr5ilQwYHekMrlKykqII8thu9wiDbfAifKojwVXbgxJ1-Bqz6GXkPlLPp4rXkw/file\n",
"Resolving uc3fa3b8bc2f92ed126eb3788d35.dl.dropboxusercontent.com (uc3fa3b8bc2f92ed126eb3788d35.dl.dropboxusercontent.com)... 162.125.1.15, 2620:100:6016:15::a27d:10f\n",
"Connecting to uc3fa3b8bc2f92ed126eb3788d35.dl.dropboxusercontent.com (uc3fa3b8bc2f92ed126eb3788d35.dl.dropboxusercontent.com)|162.125.1.15|:443... connected.\n",
"HTTP request sent, awaiting response... 302 Found\n",
"Location: /cd/0/inline2/CYOKgVW-_SqOvVicBez1JsKaYs81mU1xzB4gynkTKGfcI9xEPnjv2pLp8NTtEuaREbjOoLQBNeBO9bLhjMMPubNVHYnWl8KSMk_nJ4WNWlIlK0UjNllsYqOzvtAD6gSDFlYt21i_WaYBOFR6wjOI4ZM69i6uREONYUBODDZ_tfdcbv5rfX87wGP8eZ47KeO9nBUwvpMNhj9Tby7bBuI0qVaIrjREqzYMap1VNN68SXOoDJbF2bdCS6O55U2vL9CvSXjuehi-fWcaEKisFhQCIGT-PyzNY1F2Vd3zl5DH-aqeEInObuL26LGOgAIEbU6c0PHHq10-GKWo40fv2ECnrTxXLD89T5dhJQJ9mCamCA_COg/file [following]\n",
"--2024-08-07 18:21:30-- https://uc3fa3b8bc2f92ed126eb3788d35.dl.dropboxusercontent.com/cd/0/inline2/CYOKgVW-_SqOvVicBez1JsKaYs81mU1xzB4gynkTKGfcI9xEPnjv2pLp8NTtEuaREbjOoLQBNeBO9bLhjMMPubNVHYnWl8KSMk_nJ4WNWlIlK0UjNllsYqOzvtAD6gSDFlYt21i_WaYBOFR6wjOI4ZM69i6uREONYUBODDZ_tfdcbv5rfX87wGP8eZ47KeO9nBUwvpMNhj9Tby7bBuI0qVaIrjREqzYMap1VNN68SXOoDJbF2bdCS6O55U2vL9CvSXjuehi-fWcaEKisFhQCIGT-PyzNY1F2Vd3zl5DH-aqeEInObuL26LGOgAIEbU6c0PHHq10-GKWo40fv2ECnrTxXLD89T5dhJQJ9mCamCA_COg/file\n",
"Reusing existing connection to uc3fa3b8bc2f92ed126eb3788d35.dl.dropboxusercontent.com:443.\n",
"HTTP request sent, awaiting response... 200 OK\n",
"Length: 10550407 (10M) [application/pdf]\n",
"Saving to: ./data/sf_budgets/2023 - 2023-CSF_Proposed_Budget_Book_June_2023_Master_Web.pdf\n",
"\n",
"./data/sf_budgets/2 100%[===================>] 10.06M --.-KB/s in 0.09s \n",
"\n",
"2024-08-07 18:21:31 (110 MB/s) - ./data/sf_budgets/2023 - 2023-CSF_Proposed_Budget_Book_June_2023_Master_Web.pdf saved [10550407/10550407]\n",
"\n"
]
}
],
"source": [
"!mkdir -p \"./data/sf_budgets/\"\n",
"!wget \"https://www.dropbox.com/scl/fi/xt3squt47djba0j7emmjb/2016-CSF_Budget_Book_2016_FINAL_WEB_with-cover-page.pdf?rlkey=xs064cjs8cb4wma6t5pw2u2bl&dl=0\" -O \"./data/sf_budgets/2016 - CSF_Budget_Book_2016_FINAL_WEB_with-cover-page.pdf\"\n",
"!wget \"https://www.dropbox.com/scl/fi/jvw59g5nscu1m7f96tjre/2017-Proposed-Budget-FY2017-18-FY2018-19_1.pdf?rlkey=v988oigs2whtcy87ti9wti6od&dl=0\" -O \"./data/sf_budgets/2017 - 2017-Proposed-Budget-FY2017-18-FY2018-19_1.pdf\"\n",
"!wget \"https://www.dropbox.com/scl/fi/izknlwmbs7ia0lbn7zzyx/2018-o0181-18.pdf?rlkey=p5nv2ehtp7272ege3m9diqhei&dl=0\" -O \"./data/sf_budgets/2018 - 2018-o0181-18.pdf\"\n",
"!wget \"https://www.dropbox.com/scl/fi/1rstqm9rh5u5fr0tcjnxj/2019-Proposed-Budget-FY2019-20-FY2020-21.pdf?rlkey=3s2ivfx7z9bev1r840dlpbcgg&dl=0\" -O \"./data/sf_budgets/2019 - 2019-Proposed-Budget-FY2019-20-FY2020-21.pdf\"\n",
"!wget \"https://www.dropbox.com/scl/fi/7teuwxrjdyvgw0n8jjvk0/2021-AAO-FY20-21-FY21-22-09-11-2020-FINAL.pdf?rlkey=6br3wzxwj5fv1f1l8e69nbmhk&dl=0\" -O \"./data/sf_budgets/2021 - 2021-AAO-FY20-21-FY21-22-09-11-2020-FINAL.pdf\"\n",
"!wget \"https://www.dropbox.com/scl/fi/zhgqch4n6xbv9skgcknij/2022-AAO-FY2021-22-FY2022-23-FINAL-20210730.pdf?rlkey=h78t65dfaz3mqbpbhl1u9e309&dl=0\" -O \"./data/sf_budgets/2022 - 2022-AAO-FY2021-22-FY2022-23-FINAL-20210730.pdf\"\n",
"!wget \"https://www.dropbox.com/scl/fi/vip161t63s56vd94neqlt/2023-CSF_Proposed_Budget_Book_June_2023_Master_Web.pdf?rlkey=hemoce3w1jsuf6s2bz87g549i&dl=0\" -O \"./data/sf_budgets/2023 - 2023-CSF_Proposed_Budget_Book_June_2023_Master_Web.pdf\""
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Load data and run the workflow\n",
"\n",
"Just like using the built-in Sub-Question Query Engine, we create our query tools and instantiate an LLM and pass them in.\n",
"\n",
"Each tool is its own query engine based on a single (very lengthy) San Francisco budget document, each of which is 300+ pages. To save time on repeated runs, we persist our generated indexes to disk."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Running step query\n",
"Query is How has the total amount of San Francisco's budget changed from 2016 to 2023?\n",
"Sub-questions are {\n",
" \"sub_questions\": [\n",
" \"What was the total amount of San Francisco's budget in 2016?\",\n",
" \"What was the total amount of San Francisco's budget in 2017?\",\n",
" \"What was the total amount of San Francisco's budget in 2018?\",\n",
" \"What was the total amount of San Francisco's budget in 2019?\",\n",
" \"What was the total amount of San Francisco's budget in 2020?\",\n",
" \"What was the total amount of San Francisco's budget in 2021?\",\n",
" \"What was the total amount of San Francisco's budget in 2022?\",\n",
" \"What was the total amount of San Francisco's budget in 2023?\"\n",
" ]\n",
"}\n",
"Step query produced no event\n",
"Running step sub_question\n",
"Sub-question is What was the total amount of San Francisco's budget in 2016?\n",
"> Running step 61365946-614c-4895-8fc3-0968f2d63387. Step input: What was the total amount of San Francisco's budget in 2016?\n",
"\u001b[1;3;38;5;200mThought: The current language of the user is English. I need to use a tool to help me answer the question.\n",
"Action: budget_2016\n",
"Action Input: {'input': \"total amount of San Francisco's budget in 2016\"}\n",
"\u001b[0m\u001b[1;3;34mObservation: The total amount of San Francisco's budget in 2016 was $9.6 billion.\n",
"\u001b[0m> Running step a85aa30e-a980-4897-a52e-e82b8fb25c72. Step input: None\n",
"\u001b[1;3;38;5;200mThought: I can answer without using any more tools. I'll use the user's language to answer.\n",
"Answer: The total amount of San Francisco's budget in 2016 was $9.6 billion.\n",
"\u001b[0mStep sub_question produced event AnswerEvent\n",
"Running step sub_question\n",
"Sub-question is What was the total amount of San Francisco's budget in 2017?\n",
"> Running step 5d14466c-1400-4a26-ac42-021e7143d3b1. Step input: What was the total amount of San Francisco's budget in 2017?\n",
"\u001b[1;3;38;5;200mThought: The current language of the user is English. I need to use a tool to help me answer the question.\n",
"Action: budget_2017\n",
"Action Input: {'input': \"total amount of San Francisco's budget in 2017\"}\n",
"\u001b[0m\u001b[1;3;34mObservation: $10,106.9 million\n",
"\u001b[0m> Running step 586a5fab-95ee-44e9-9a35-fcf19993b13e. Step input: None\n",
"\u001b[1;3;38;5;200mThought: I have the information needed to answer the question.\n",
"Answer: The total amount of San Francisco's budget in 2017 was $10,106.9 million.\n",
"\u001b[0mStep sub_question produced event AnswerEvent\n",
"Running step sub_question\n",
"Sub-question is What was the total amount of San Francisco's budget in 2018?\n",
"> Running step d39f64d0-65f6-4571-95ad-d28a16198ea5. Step input: What was the total amount of San Francisco's budget in 2018?\n",
"\u001b[1;3;38;5;200mThought: The current language of the user is English. I need to use a tool to help me answer the question.\n",
"Action: budget_2018\n",
"Action Input: {'input': \"total amount of San Francisco's budget in 2018\"}\n",
"\u001b[0m\u001b[1;3;34mObservation: The total amount of San Francisco's budget in 2018 was $12,659,306,000.\n",
"\u001b[0m> Running step 3f67feee-489c-4b9e-8f27-37f0d48e3b0d. Step input: None\n",
"\u001b[1;3;38;5;200mThought: I can answer without using any more tools. I'll use the user's language to answer.\n",
"Answer: The total amount of San Francisco's budget in 2018 was $12,659,306,000.\n",
"\u001b[0mStep sub_question produced event AnswerEvent\n",
"Running step sub_question\n",
"Sub-question is What was the total amount of San Francisco's budget in 2019?\n",
"> Running step d5ac0866-b02c-4c4c-94c6-f0e047ebb0fe. Step input: What was the total amount of San Francisco's budget in 2019?\n",
"\u001b[1;3;38;5;200mThought: The current language of the user is English. I need to use a tool to help me answer the question.\n",
"Action: budget_2019\n",
"Action Input: {'input': \"total amount of San Francisco's budget in 2019\"}\n",
"\u001b[0m\u001b[1;3;34mObservation: $12.3 billion\n",
"\u001b[0m> Running step 3b62859b-bbd3-4dce-b284-f9b398e370c2. Step input: None\n",
"\u001b[1;3;38;5;200mThought: I can answer without using any more tools. I'll use the user's language to answer.\n",
"Answer: The total amount of San Francisco's budget in 2019 was $12.3 billion.\n",
"\u001b[0mStep sub_question produced event AnswerEvent\n",
"Running step sub_question\n",
"Sub-question is What was the total amount of San Francisco's budget in 2020?\n",
"> Running step 41f6ed9f-d695-43df-8743-39dfcc3d919d. Step input: What was the total amount of San Francisco's budget in 2020?\n",
"\u001b[1;3;38;5;200mThought: The user is asking for the total amount of San Francisco's budget in 2020. I do not have a tool specifically for the 2020 budget. I will check the available tools to see if they provide any relevant information or if I can infer the 2020 budget from adjacent years.\n",
"Action: budget_2021\n",
"Action Input: {'input': \"What was the total amount of San Francisco's budget in 2020?\"}\n",
"\u001b[0m\u001b[1;3;34mObservation: The total amount of San Francisco's budget in 2020 was $15,373,192 (in thousands of dollars).\n",
"\u001b[0m> Running step ea39f7c6-e942-4a41-8963-f37d4a27d559. Step input: None\n",
"\u001b[1;3;38;5;200mThought: I now have the information needed to answer the user's question about the total amount of San Francisco's budget in 2020.\n",
"Answer: The total amount of San Francisco's budget in 2020 was $15,373,192 (in thousands of dollars).\n",
"\u001b[0mStep sub_question produced event AnswerEvent\n",
"Running step sub_question\n",
"Sub-question is What was the total amount of San Francisco's budget in 2021?\n",
"> Running step 6662fd06-e86a-407c-bb89-4828f63caa72. Step input: What was the total amount of San Francisco's budget in 2021?\n",
"\u001b[1;3;38;5;200mThought: The current language of the user is English. I need to use a tool to help me answer the question.\n",
"Action: budget_2021\n",
"Action Input: {'input': \"total amount of San Francisco's budget in 2021\"}\n",
"\u001b[0m\u001b[1;3;34mObservation: The total amount of San Francisco's budget in 2021 is $14,166,496,000.\n",
"\u001b[0m> Running step 5d0cf9da-2c14-407c-8ae5-5cd638c1fb5c. Step input: None\n",
"\u001b[1;3;38;5;200mThought: I can answer without using any more tools. I'll use the user's language to answer.\n",
"Answer: The total amount of San Francisco's budget in 2021 was $14,166,496,000.\n",
"\u001b[0mStep sub_question produced event AnswerEvent\n",
"Running step sub_question\n",
"Sub-question is What was the total amount of San Francisco's budget in 2022?\n",
"> Running step 62fa9a5f-f40b-489d-9773-5ee4e4eaba9e. Step input: What was the total amount of San Francisco's budget in 2022?\n",
"\u001b[1;3;38;5;200mThought: The current language of the user is English. I need to use a tool to help me answer the question.\n",
"Action: budget_2022\n",
"Action Input: {'input': \"total amount of San Francisco's budget in 2022\"}\n",
"\u001b[0m\u001b[1;3;34mObservation: $14,550,060\n",
"\u001b[0m> Running step 7a2d5623-cc75-4c9d-8c58-3dbc2faf163d. Step input: None\n",
"\u001b[1;3;38;5;200mThought: I can answer without using any more tools. I'll use the user's language to answer.\n",
"Answer: The total amount of San Francisco's budget in 2022 was $14,550,060.\n",
"\u001b[0mStep sub_question produced event AnswerEvent\n",
"Running step sub_question\n",
"Sub-question is What was the total amount of San Francisco's budget in 2023?\n",
"> Running step 839eb994-b4e2-4019-a170-9471c1e0d764. Step input: What was the total amount of San Francisco's budget in 2023?\n",
"\u001b[1;3;38;5;200mThought: The current language of the user is: English. I need to use a tool to help me answer the question.\n",
"Action: budget_2023\n",
"Action Input: {'input': \"total amount of San Francisco's budget in 2023\"}\n",
"\u001b[0m\u001b[1;3;34mObservation: $14.6 billion\n",
"\u001b[0m> Running step 38779f6c-d0c7-4c95-b5c4-0b170c5ed0d5. Step input: None\n",
"\u001b[1;3;38;5;200mThought: I can answer without using any more tools. I'll use the user's language to answer.\n",
"Answer: The total amount of San Francisco's budget in 2023 was $14.6 billion.\n",
"\u001b[0mStep sub_question produced event AnswerEvent\n",
"Running step combine_answers\n",
"Step combine_answers produced no event\n",
"Running step combine_answers\n",
"Step combine_answers produced no event\n",
"Running step combine_answers\n",
"Step combine_answers produced no event\n",
"Running step combine_answers\n",
"Step combine_answers produced no event\n",
"Running step combine_answers\n",
"Step combine_answers produced no event\n",
"Running step combine_answers\n",
"Step combine_answers produced no event\n",
"Running step combine_answers\n",
"Step combine_answers produced no event\n",
"Running step combine_answers\n",
"Final prompt is \n",
" You are given an overall question that has been split into sub-questions,\n",
" each of which has been answered. Combine the answers to all the sub-questions\n",
" into a single answer to the original question.\n",
"\n",
" Original question: How has the total amount of San Francisco's budget changed from 2016 to 2023?\n",
"\n",
" Sub-questions and answers:\n",
" Question: What was the total amount of San Francisco's budget in 2016?: \n",
" Answer: The total amount of San Francisco's budget in 2016 was $9.6 billion.\n",
"\n",
"Question: What was the total amount of San Francisco's budget in 2017?: \n",
" Answer: The total amount of San Francisco's budget in 2017 was $10,106.9 million.\n",
"\n",
"Question: What was the total amount of San Francisco's budget in 2018?: \n",
" Answer: The total amount of San Francisco's budget in 2018 was $12,659,306,000.\n",
"\n",
"Question: What was the total amount of San Francisco's budget in 2019?: \n",
" Answer: The total amount of San Francisco's budget in 2019 was $12.3 billion.\n",
"\n",
"Question: What was the total amount of San Francisco's budget in 2020?: \n",
" Answer: The total amount of San Francisco's budget in 2020 was $15,373,192 (in thousands of dollars).\n",
"\n",
"Question: What was the total amount of San Francisco's budget in 2021?: \n",
" Answer: The total amount of San Francisco's budget in 2021 was $14,166,496,000.\n",
"\n",
"Question: What was the total amount of San Francisco's budget in 2022?: \n",
" Answer: The total amount of San Francisco's budget in 2022 was $14,550,060.\n",
"\n",
"Question: What was the total amount of San Francisco's budget in 2023?: \n",
" Answer: The total amount of San Francisco's budget in 2023 was $14.6 billion.\n",
" \n",
"Final response is From 2016 to 2023, the total amount of San Francisco's budget has seen significant changes. In 2016, the budget was $9.6 billion. It increased to $10,106.9 million in 2017 and further to $12,659,306,000 in 2018. In 2019, the budget was $12.3 billion. The budget saw a substantial rise in 2020, reaching $15,373,192 (in thousands of dollars), which translates to approximately $15.4 billion. In 2021, the budget was $14,166,496,000, and in 2022, it was $14,550,060. By 2023, the budget had increased to $14.6 billion. Overall, from 2016 to 2023, San Francisco's budget grew from $9.6 billion to $14.6 billion.\n",
"Step combine_answers produced event StopEvent\n",
"From 2016 to 2023, the total amount of San Francisco's budget has seen significant changes. In 2016, the budget was $9.6 billion. It increased to $10,106.9 million in 2017 and further to $12,659,306,000 in 2018. In 2019, the budget was $12.3 billion. The budget saw a substantial rise in 2020, reaching $15,373,192 (in thousands of dollars), which translates to approximately $15.4 billion. In 2021, the budget was $14,166,496,000, and in 2022, it was $14,550,060. By 2023, the budget had increased to $14.6 billion. Overall, from 2016 to 2023, San Francisco's budget grew from $9.6 billion to $14.6 billion.\n"
]
}
],
"source": [
"from google.colab import userdata\n",
"\n",
"os.environ[\"OPENAI_API_KEY\"] = userdata.get(\"openai-key\")\n",
"\n",
"folder = \"./data/sf_budgets/\"\n",
"files = os.listdir(folder)\n",
"\n",
"query_engine_tools = []\n",
"for file in files:\n",
" year = file.split(\" - \")[0]\n",
" index_persist_path = f\"./storage/budget-{year}/\"\n",
"\n",
" if os.path.exists(index_persist_path):\n",
" storage_context = StorageContext.from_defaults(\n",
" persist_dir=index_persist_path\n",
" )\n",
" index = load_index_from_storage(storage_context)\n",
" else:\n",
" documents = SimpleDirectoryReader(\n",
" input_files=[folder + file]\n",
" ).load_data()\n",
" index = VectorStoreIndex.from_documents(documents)\n",
" index.storage_context.persist(index_persist_path)\n",
"\n",
" engine = index.as_query_engine()\n",
" query_engine_tools.append(\n",
" QueryEngineTool(\n",
" query_engine=engine,\n",
" metadata=ToolMetadata(\n",
" name=f\"budget_{year}\",\n",
" description=f\"Information about San Francisco's budget in {year}\",\n",
" ),\n",
" )\n",
" )\n",
"\n",
"engine = SubQuestionQueryEngine(timeout=120, verbose=True)\n",
"llm = OpenAI(model=\"gpt-4o\")\n",
"result = await engine.run(\n",
" llm=llm,\n",
" tools=query_engine_tools,\n",
" query=\"How has the total amount of San Francisco's budget changed from 2016 to 2023?\",\n",
")\n",
"\n",
"print(result)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Our debug output is lengthy! You can see the sub-questions being generated and then `sub_question()` being repeatedly invoked, each time generating a brief log of ReAct agent thoughts and actions to answer each smaller question.\n",
"\n",
"You can see `combine_answers` running multiple times; these were triggered by each `AnswerEvent` but before all 8 `AnswerEvents` were collected. On its final run it generates a full prompt, combines the answers and returns the result."
]
}
],
"metadata": {
"colab": {
"provenance": []
},
"kernelspec": {
"display_name": "Python 3",
"name": "python3"
},
"language_info": {
"name": "python"
}
},
"nbformat": 4,
"nbformat_minor": 0
}