{ "cells": [ { "cell_type": "markdown", "id": "0acb0526-fb21-42f5-8980-7be07e62c649", "metadata": {}, "source": [ "# Getting started\n", "\n", "This document is intended to get you started as quickly as possible. We discuss two important underlying concepts, the package's core classes and how to combine them, and we end with a simple example in which we create a trial as might be used in an auditory perception experiment." ] }, { "cell_type": "code", "execution_count": 3, "id": "00437417-8bbb-48b1-bc41-b96e3479cf52", "metadata": { "nbsphinx": "hidden", "tags": [] }, "outputs": [], "source": [ "# We suppress warnings, but let's hide that to avoid confusion\n", "import warnings\n", "warnings.filterwarnings('ignore')\n", "%matplotlib inline" ] }, { "cell_type": "markdown", "id": "823fb570-f970-46c8-bf7d-590215b9b51c", "metadata": { "tags": [] }, "source": [ "## Step 1: Concepts\n", "\n", "Consider the example sequence given below:" ] }, { "cell_type": "raw", "id": "a001a224-c82f-4216-87de-3fe77184657a", "metadata": { "raw_mimetype": "text/restructuredtext", "tags": [] }, "source": [ ".. figure:: gettingstarted_0.png\n", " :align: center\n", " \n", " An example sequence or rhythm. Each event (in most cases, a sound) is presented at a specific \n", " point in time: the event onset. The difference in time between the onset of one event and the \n", " onset of the next event we call the inter-onset interval (IOI)." ] }, { "cell_type": "markdown", "id": "ce29dbfe-7d5e-488c-a3f9-2061564a1251", "metadata": { "tags": [] }, "source": [ "### Inter-onset intervals (IOIs) and onsets\n", "For timing sequences and events, throughout this package we make the most use of inter-onset intervals (IOIs). IOIs represent the interval between the onset of one event, and the onset of the next event. Because IOIs are onset-to-onset, which is different from inter-stimulus intervals (which are offset-to-onset), we can think about these sequences in terms of rhythms. This because often the duration of the event is irrelevant to the type of beat that is induced in the listener." ] }, { "cell_type": "raw", "id": "a049c7a5-6b15-443c-8209-1dbceb777995", "metadata": { "raw_mimetype": "text/restructuredtext", "tags": [] }, "source": [ "Onsets (i.e. *t* values) are used internally, and only in some special cases. When creating sequences on the basis of IOIs, it is assumed that the first onset is at *t* = 0. However, you can create sequences with a different onset than zero, for that see :py:meth:`thebeat.core.Sequence.from_onsets`." ] }, { "cell_type": "markdown", "id": "7982c8c4-15c2-4241-abb0-2478f657f8d4", "metadata": { "tags": [] }, "source": [ "### End sequence with event or interval\n", "An important concept to mention here is that sequences can end with an event, or end with an interval. In effect, this means that sequences that end with an event have *n* events, but *n*-1 IOIs. Sequences that end with an interval have *n* events and *n* IOIs. The default is for sequences to end with an event, but for rhythms or for combining sequences we need sequences that end with an interval. Otherwise, we would not know what interval to place between the offset of the final event in a sequence and the onset of the first event in the next sequence." ] }, { "cell_type": "raw", "id": "82a756e5-2159-419c-ac46-e250bb2d208e", "metadata": { "raw_mimetype": "text/restructuredtext", "tags": [] }, "source": [ "To end sequences with an interval, we pass ``end_with_interval=True`` to the :py:class:`~thebeat.core.Sequence` constructor." ] }, { "cell_type": "markdown", "id": "1d278653-d3e3-42b1-a8a2-2b42cd6f5099", "metadata": { "raw_mimetype": "text/restructuredtext", "tags": [] }, "source": [ "## Step 2: Combining and converting between classes" ] }, { "cell_type": "raw", "id": "ed6b0c66-c1dc-4e82-bb0f-cbc2ad8028b1", "metadata": { "raw_mimetype": "text/restructuredtext", "tags": [] }, "source": [ "This visualization displays the major classes that are used throughout this package.\n", "\n", "Some of them we can combine into other ones:\n", "\n", ".. figure:: images/core_classes.png\n", "\n", ":py:class:`~thebeat.core.Sequence` and :py:class:`~thebeat.music.Rhythm` objects contain only timing information. :py:class:`~thebeat.core.SoundStimulus` objects contain acoustic information. \n", "\n", "Trials are made from combining a :py:class:`~thebeat.core.SoundStimulus` and :py:class:`~thebeat.core.Sequence` object into a :py:class:`~thebeat.core.SoundSequence` object which contains both audio and timing information. You can either pass the :py:class:`~thebeat.core.SoundSequence` one or multiple (i.e. one for each event) :py:class:`~thebeat.core.SoundStimulus` objects. \n", "\n", ":py:class:`~thebeat.music.Rhythm` objects first have to be converted to a :py:class:`~thebeat.core.Sequence` object before we can combine them into a :py:class:`~thebeat.core.SoundSequence` trial (using the :py:meth:`~thebeat.music.Rhythm.to_sequence` method). Finally, from a :py:class:`~thebeat.music.Rhythm` we can make a :py:class:`~thebeat.music.Melody`.\n" ] }, { "cell_type": "markdown", "id": "84615bc4-4d95-445a-b33d-af5bbc5ef556", "metadata": { "raw_mimetype": "text/html", "tags": [] }, "source": [ "
\n", " \n", "At this point the most important thing to remember is that the **Sequence** class is the one you will be using most.\n", " \n", "
" ] }, { "cell_type": "markdown", "id": "4fe73add-c75b-4716-b4e2-6e09f7c0c304", "metadata": {}, "source": [ "## Step 3: Your first trial" ] }, { "cell_type": "markdown", "id": "c7d8e676-455b-4a6b-92fc-ce05e9beef0e", "metadata": {}, "source": [ "Here we will create a simple isochronous (i.e. regular) trial of 10 events at a tempo of 500 ms (i.e. each IOI is 500 ms, corresponding to 120 bpm or 2 hertz). It contains the same pure tone sound stimulus of 50 ms at a pitch of 440Hz with a linear on- and offramp (attack/decay) of each 10 ms. " ] }, { "cell_type": "code", "execution_count": 5, "id": "00cb5623-d109-45d2-9b69-0d01cf451550", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAxUAAAIcCAYAAACAZYN2AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/av/WaAAAACXBIWXMAAA9hAAAPYQGoP6dpAABaOUlEQVR4nO3deXxU9b3/8XdmkhC2QEgCKEGkUBIkEEAsEEGqIqDovQUUbUVcqFqXK/7AgguiiBK1YBVxBeQC4lULSqsgrahVLEFckAiyyCKCgIQkEEL2mfP7Ax0Yss1klnPO5PV8PHyUnHPmzGe+/X7PnPfZJsowDEMAAAAAUE8OswsAAAAAYG+ECgAAAAABIVQAAAAACAihAgAAAEBACBUAAAAAAkKoAAAAABAQQgUAAACAgBAqAAAAAASEUAEAAAAgINFmFxBJDMNQfv5xud38SDmCz+GIUqtWTeljCBn6GEKNPoZwoJ8FX3Jy8zqX4UxFEEVFRcnhiDK7DEQohyOKPoaQoo8h1OhjCAf6mTkIFQAAAAACQqgAAAAAEBBCBQAAAICAECoAAAAABIRQAQAAACAghAoAAAAAASFUAAAAAAgIoQIAAABAQAgVAAAAAAJCqAAAAAAQEEIFAAAAgIAQKgAAAAAEhFABAAAAICCECgAAAAABIVQAAAAACIjtQsXnn3+uP/3pTxowYIBSU1O1evXqOl/z2WefacSIEUpPT9cll1yit956q8oyS5Ys0UUXXaTu3bvrqquuUk5OTijKBwAAACKO7UJFcXGxUlNT9dBDD/m0/N69e3Xrrbeqb9+++vvf/67rr79eU6ZM0Zo1azzLrFy5UllZWbrjjjv09ttvKy0tTePGjVNeXl6oPgYAAAAQMaLNLsBfgwYN0qBBg3xe/vXXX1dKSoruvfdeSVKnTp305Zdf6n//9381cOBASdKCBQs0evRojRo1SpI0bdo0/fvf/9ayZct0yy23BP9DAAAAABHEdqHCX19//bX69+/vNW3AgAGaMWOGJKm8vFybN2/Wrbfe6pnvcDiUmZmpDRs2+PVeBw4f1y1ZVS/Huvfa3urSvqX/xTcA/1r/g17/cIfXtMaNojXz9kw1bhTx3dNvpeWVuuOpj3WsuMJr+oiBHXXF+R1Nqsradh8o1PSFX1SZPn3cb9QuuZkJFVnfq//cpn99vtdrWoc2zfXA2HMV7bTdCe6QO15aof95ek2V6eOGd9X53c8woSLry9l5WDP/7+sq02fdcb4SmjcKf0EWZxiGnlmao5yd3ldQ9O6SrDtGpCsqKsqkyqwr72iJbni06j7ZhNEZSv9VogkVWd+anP1asHJrlenP3j1QyT68PuL32g4fPqykpCSvaUlJSSoqKlJpaamOHj0ql8ulxETvDpaYmKhdu3b59V7VBQpJenzJV1o0ZbB/hTcAhcfLqwQKSSopq9Szy3J0/9g+JlRlXU6nQ7Pf+LpKoJCkt9fs1oAeZyo5obEJlVlbdYFCkh6cv55xeRqn06Ede49UCRSStOenY3p37fe68sLOJlRmbfe/vK7a6fNXbFFm9zMUE00Q+4Xz51BaXaCQpInP/YdxWY313/5UJVBI0lfbc7Vhx2H9pmsbE6qyLqfTobHT/lXtvKfe3Egfq0ZZhavaQCFJU+ev16KHh9W5jogPFVaRkNDU7BIsJ/dYeY3ztv5whDarxpqvf6xxXlG5W11oM7/Qx6pak3Ogxnkfbdivm0dmhLEae6gu6P+iSdNGatYkNozV2B/jsqote4/UOO+7Hws1NPNX4SsmAtDHqsovLK1xXsGxMp/WEfGhIikpSYcPH/aadvjwYTVr1kxxcXFyOBxyOp1VbsrOy8urcoYjEAUFx4O2rkhx7FhJrfNpM2/OOi47OVZUSpv5ifbyVlcfMwyDNvPTkSPFqiirOXQ0NE6nQ/HxtZ9RpY9VVV5WWes82sxbXdsy2quqoz4Gh9pEfKjo2bOnPvnkE69pa9euVc+ePSVJsbGx6tatm7KzszV48InTYW63W9nZ2RozZkzQ6qisdAdtXZHC5TJqnU+b+cftctNmfqK9/Eeb+aeScek32qsqt1Hz96XbMGgzP9FeVVW6Am8T213oefz4cW3ZskVbtmyRJO3bt09btmzR/v37JUmzZs3SpEmTPMtfc8012rt3r5588knt3LlTS5Ys0XvvvacbbrjBs8yNN96oN998U2+//bZ27typhx9+WCUlJRo5cmRYPxsAAABgR7Y7U7Fp0yaNHTvW83dWVpYkacSIEXr88ceVm5urAwdOXhPcvn17vfTSS8rKytKiRYvUtm1bPfroo57HyUrSZZddpvz8fM2ePVu5ubnq2rWr5s2bF9TLnwAAAIBIZbtQ0bdvX23btq3G+Y8//ni1r1m+fHmt6x0zZkxQL3dC3Wq7uREIBqOWSwZQvYP5xWaXgAjnCsJlFg3N3kNFZpeACFdSy307vrLd5U+IHK/+q+ZwCP+x+1zVth+OmF2C7Sz/eKfZJUQUcm1Vq9btMbsE2/nhp5pDBX2sqvIKl9kl2M5bH/v3MwrVIVTANIeP1vz4MiAY8mp5RB78x5kfBMMPBwvNLgERrrKOB8Ggql0HAh+XhAoAAAAAASFUAAAAAAgIoQIAAABAQAgVQISIMrsARLyoKHqZv2gyhBp9DFZBqAAAAAAQEEIFAAAAgIAQKoAIwQP0AOvhKbxVcRldcNHHqqKLmYNQAQDwCb9TAQCRKRhBjFABAADChnCKUKOL+S8YbUaoAAAAABAQQgUAAACAgBAqAAAAAASEUAEAAAAgIIQKAIBPeBQogoF+hFCji/mPpz8BAMKGp/YAAGpCqAAAAAAQEEIFAAAAgIAQKgAAAAAEhFABAADChntzgMhEqAAAAAAQEEIFECE4+AfADnikbLCx8Yc1ECoAAACABiwYUZ9QESZcQ4pQO1ZcbnYJiHDHSyvNLsF2yspdZpeACLc/r9jsEmzHzT5ZSBAqwiRnZ57ZJSDC/e97W80uwXZ+KuDLGKH1j//sNrsE23G72eHzx459R80uwXbWfnPQ7BIiEqEiTH7KZ+cFoeXii9hvhcc5u4PQ2vEjO3z+4igyQm1fbpHZJVhOMEYdoQIAgBDhpmQADQWhAgAAhA0xC7AebtQGAMDCeEgHgIaCUAEAAMKGmAVEJkJFmLARBayHg8gAAAQHoQIAAABAQAgVAAAAAAJCqAAAAAAQEEIFAAAIGx4pC1hR4COTUBEmbEQB6+F3yQAACA5CRZjwkBnAenj6EwAAwUGoABCxOBMBAEB4ECoAAAAABIRQASBicXkTYD0MSyAyESoAAAAABIRQESYcMQUAoO6nIfJ9iVCjj4VGtNkF1MeSJUs0f/585ebmKi0tTQ8++KB69OhR7bLXXXed1q9fX2X6oEGD9PLLL0uS7r33Xr399tte8wcMGKD58+cHv3gAAAAgwtguVKxcuVJZWVmaNm2aMjIytHDhQo0bN06rVq1SYmJileWfffZZVVRUeP4+cuSI/vu//1vDhg3zWm7gwIHKysry/B0bGxu6DwEAaBA4IgqgobDd5U8LFizQ6NGjNWrUKHXu3FnTpk1TXFycli1bVu3yLVu2VHJysue///znP4qLi6sSKmJjY72Wa9GiRVDr5tGWQPgx7gAAqFswvi9tFSrKy8u1efNmZWZmeqY5HA5lZmZqw4YNPq1j2bJlGj58uJo0aeI1ff369erfv7+GDh2qhx56SAUFBUGtHQAA1I2DAQg1+lho2Oryp4KCArlcriqXOSUmJmrXrl11vj4nJ0fbt2/XY4895jV94MCBuuSSS5SSkqK9e/fqqaee0s0336w33nhDTqczKLU7HFGKjrZVhjMd7eXN6ay7PWgzb05H7e3hdDpos1PQx4IvKoo2O5WvfSzah+VwEn3Mm7uO+VHsk4WErUJFoJYuXaouXbpUual7+PDhnn+npqYqNTVVgwcP9py9CIbGjWOVkNA0KOtqKGgv/9Fm3qLq2DFp3jyONvMT7eUfh8NBm53m6PHyWue3bNlEMdHBOaDXUNDHvBWVVNQ6v1GjaNrsNHmFpQGvw1ahIiEhQU6nU3l5eV7T8/LylJSUVOtri4uLtWLFCt111111vk/79u2VkJCgPXv2BC1UlJSUq6DgeFDW1VDQXt4OHSmpcxnazNuLb39T6/xjx0pos1P4chSZ9vKWszOv1vlut5s2O4XT6dCar3+sdZmCgmLFcBTZw/Dhbn/6mLeV2XtqnV9WWkGbnSYYD5WwVaiIjY1Vt27dlJ2drcGDB0s6scHOzs7WmDFjan3tqlWrVF5erv/6r/+q830OHjyoI0eOKDk5OSh1S5LLZaiysq4TcjgV7eXt+/2FdS5Dm/mHcek/2svbpjpChWHQZv6qrHTX+VsWDYnbXffeHn3M27rNB2ud73bTZqFgq1AhSTfeeKMmT56s9PR09ejRQwsXLlRJSYlGjhwpSZo0aZLatGmjiRMner1u6dKlGjx4sBISErymHz9+XHPmzNHQoUOVlJSkvXv36i9/+Ys6dOiggQMHhu1zAQAiD0+UBcKPcWcO24WKyy67TPn5+Zo9e7Zyc3PVtWtXzZs3z3P504EDB+Q47ebMXbt26csvv9Qrr7xSZX1Op1Pbt2/X8uXLdezYMbVu3Vrnn3++xo8fz29VAAAAAD6wXaiQpDFjxtR4udPixYurTPvVr36lbdu2Vbt8XFwcv5wNAAAABIA7oQA0WL7cAAkg3BiXCC2DPhYShAoAAOqrjjuKueEYCD/GnTkIFYBdsJUMuih+VhUhxvFQBIzNVNBF0aghQagA7IK9E8B6GJcINfqY32gycxAqAAAIFe7bAdBAECoAAAAABIRQAaDB4ulPCDnu2/EbwxKhxtOfQoNQAdgF+yaA9TAuActhWJqDUAEAQKhw2B0IO0adOQgVAAAAAAJCqADsgkMvANDgcP0/7IJQAQAALINdaMCeCBUAAAAAAkKoAOyCx1kAAACLIlQAABAiXMoDoKEgVAAAAAAICKECAAAAQEAIFWHCI+EAIPLUdasTt0LVA1+XCFCd444+FhKECgAAQoR9FwSKH2X3H01mDkJFmBSXVppdAoDTlFe6zS4BNlfXzkt+YVlY6ogkbvaiESCjjj50rKQiTJU0LISKMFmRvcfsEmxnz8FjZpeACPf3T3ebXYLtFBaXm12CrVS6CK7+WrNxv9klIMJ99u1PZpcQkQgVsKzdBwrNLgERbtd++pi/CjjyjhD7Ynuu2SUAqAdCBQAA9cSN2ID1REUxMs1AqAAAANbBLRWALREqAJvguAsAALAqQgUsi4NV3mgPAA0Bv+sE2BOhAgAAAEBACBUAAAAAAkKogGVxDwEANDxRbP0RoLp+/A6hQaiAZbFJAICGh3sqAHsiVAA2wbE7AA0CmQKwJUIFAAAAgIAQKgAAAAAEhFAB2ARXBMAKuN79NFyXiBDz5Z5jbkz2FhXFwDQDoQLWxUYSgNWxmQo6mhSBImSZg1AB2ATHXQAAgFURKmBdnL4ELIffEAAAVIdQAQDwGfdUANbDqIQVECpgXVwTCcDqOHETdGz6EShu1DYHoQIAAAARgxu1zUGoAAAAFsIOoTfaA/ZAqAAAAAAQEEIFAACAnXEyAxZgy1CxZMkSXXTRRerevbuuuuoq5eTk1LjsW2+9pdTUVK//unfv7rWMYRh65plnNGDAAPXo0UM33HCDvv/++xB/CsA/LjffGoDVVFS6zS4BEY7bA/xXWuYyu4QGyXahYuXKlcrKytIdd9yht99+W2lpaRo3bpzy8vJqfE2zZs306aefev776KOPvObPnTtXixcv1sMPP6w333xTjRs31rhx41RWVhbqj9NgFRaXm12C7by79nuzS0CE23uoyOwSbGf1F/vMLgERLmdnzfs3qN6hIyVml2ArpeWVQVmP7ULFggULNHr0aI0aNUqdO3fWtGnTFBcXp2XLltX4mqioKCUnJ3v+S0pK8swzDEOLFi3SbbfdpsGDBystLU1PPvmkDh06pNWrV4fjIzVI3x84ZnYJtvPDT+zwIbS+2HrI7BIAnOajDT+aXQIi3OEjpUFZj61CRXl5uTZv3qzMzEzPNIfDoczMTG3YsKHG1xUXF+vCCy/UoEGDdNttt+m7777zzNu3b59yc3O91tm8eXNlZGTUuk4AaIi4FAOhRh/zHz9KCSuINrsAfxQUFMjlcikxMdFremJionbt2lXtazp27KgZM2YoNTVVx44d0yuvvKJrrrlGK1asUNu2bZWbm+tZx+nrPHz4cFDrj462VYYLKaez7h+mcTgdtJmfaC//0WYn+fKDUU7Gpd9or5OczrrbIioqijY7hS+/4xYd7ZDTQZv5gz52kjNIbWGrUFEfvXr1Uq9evbz+vuyyy/T666/r7rvvDmstCQlNw/p+VtasWd2X8jRuHEub+Yn28h9tdlJco7q/EuLj42gzP9Fe/nE6o2izU0RHO+tcJqFlU58CG06ij510tDQ4N7bbKlQkJCTI6XRWuSk7Ly/P6z6J2sTExKhr16764YcfJEnJycmedbRu3dprnWlpaUGq/ISCguNBXZ+dFRXVff1ecXEZbeYn2st/tNlJpWV136xXWFhKm/mJ9jrJlx3fSpebNjtFRUXdO3wFR45zpsJP9LGTCguDc2O7rUJFbGysunXrpuzsbA0ePFiS5Ha7lZ2drTFjxvi0DpfLpe3bt2vQoEGSpJSUFCUnJys7O1tdu3aVJBUVFWnjxo36/e9/H9T6K3n0oIfLVff1n4bboM38RHv5jzY7yfDhYnaXy02b+Yn28pNBm53Kl3FZUeGWUfcJDZyCPnaSK0htYatQIUk33nijJk+erPT0dPXo0UMLFy5USUmJRo4cKUmaNGmS2rRpo4kTJ0qS5syZo549e6pDhw4qLCzU/PnztX//fl111VWSTly7OXbsWL3wwgvq0KGDUlJS9Mwzz6h169ae4AIAAACgZrYLFZdddpny8/M1e/Zs5ebmqmvXrpo3b57n8qcDBw7IccopwMLCQj344IPKzc1VixYt1K1bN73++uvq3LmzZ5mbb75ZJSUlmjp1qgoLC3Xuuedq3rx5atSoUdg/H07iWRYA0PCw7QfsyXahQpLGjBlT4+VOixcv9vr7/vvv1/3331/r+qKiojR+/HiNHz8+aDWidr48zQJAeDEsYQmkCi++PJUNCEiQuhh39cAUPIccAAAgchAqAACSOEAMWJEvN2oDAQlSFyNUAAAAAAgIoQKm4BJRwHoYlgDQAHFPBQAAiDQGF+IBtkSogCm4RBQAgODgOxVWQKgAAAAAEBBCBUzhyz0VHHkBgAaIbT9gS4QKAAAAAAEhVAAAfMYZRMCKGJgwH6EClsVjZ4EwY8zBCuiHQFgFa8gRKgAAJ3CwEwAanGBt+gkVsCwuswCshzOICDm2/YAtESoAAD4j7CPU6GL+Y1zCCggVMIUvBztdbraSQFj59KhnxiVCq6zcZXYJtsOoRCC4pwK25ssG8O+f7gp5HZEmv7DU7BIQ4T7ZuN/sEmynrIKd5F/4EkoPHSkJQyWR5dvv880uASBUwLpKyvgi9tfWHwrMLgF25kPaX5NzIPR1RBjCPkLt3xsI+6g/btQGAAAAYAmECpiCB8iEBpe7IyAMTMCWDO6qQAC4pwIAAADcqQ1LIFTAFGz/AKDhYdsPRC5CBQAAAICAECpgCi7dBgAgODgDBCsgVAAAEEI8QAEhRyeDBRAqAAAALIq8ALsgVAAAgPBgBxmIWIQKAAAAAAEhVAAAANgYJ4BgBYQKAAAAAAEhVAAAEEIcRUaocTM3rIBQAQCQxO/HIPQMIpbfohiYCLUgdTJCBQBAEkfUQ4V9QgSCsxAIuSB1MkIFAAAhxD4hgIaAUAFzcOguJDiihUAwLAGgAeLyJwAAbIC0jxAz6GOwAEIFzMH2LyS4oQ+AlbHvC0QuQgUQQfjCBiyItI8Qi6KPwQIIFTAH2z8ADQVpHyHG5U/+o82Cj1ABUzCWAetxuRmYgNWUV7rNLgGRjkfKws4+/HKf2SUgwh0qKDa7BNtZvma32SUgwm374YjZJdjO7gOFZpdgKxWEML+t+/anoKyHUAFTbNyZZ3YJiHBfbT9sdgkATrP6i71ml4AId6SozKflOC970orsPUFZD6ECAAAAQEAIFUAEMTj2AgAATGDLULFkyRJddNFF6t69u6666irl5OTUuOybb76pP/zhDzrvvPN03nnn6YYbbqiy/L333qvU1FSv/8aNGxfqjwEAaACI+gg1Hn5SD7RZ0EWbXYC/Vq5cqaysLE2bNk0ZGRlauHChxo0bp1WrVikxMbHK8p999pmGDx+u3r17KzY2VvPmzdNNN92kFStWqE2bNp7lBg4cqKysLM/fsbGxYfk8AAAAgWD/GFZguzMVCxYs0OjRozVq1Ch17txZ06ZNU1xcnJYtW1bt8rNmzdK1116rrl27qlOnTnr00UfldruVnZ3ttVxsbKySk5M9/7Vo0SIcHwcAAABhxuXCwWerUFFeXq7NmzcrMzPTM83hcCgzM1MbNmzwaR0lJSWqrKysEhrWr1+v/v37a+jQoXrooYdUUFAQ1NoBAGjouEwHiFy2uvypoKBALperymVOiYmJ2rVrl0/rmDlzplq3bu0VTAYOHKhLLrlEKSkp2rt3r5566indfPPNeuONN+R0OoNWf3S0rTKcJdBm/nE6HLTZz5xO3362nfbyH23mn2gn4/IXUb4NS9rLT1FRtNkvop2+tUN0tENOB20WTLYKFYF6+eWXtXLlSi1atEiNGjXyTB8+fLjn37/cqD148GDP2YtgSUhoGrR1NRS0mX+aNo2lzX7WuLFv90XRXv6jzfzTPL4xbfaz6GjfDtTRXv6JjnbSZj8r8/G371q2bOpzAIFvbBUqEhIS5HQ6lZfn/cNpeXl5SkpKqvW18+fP18svv6wFCxYoLS2t1mXbt2+vhIQE7dmzJ6ihoqDgeNDW1VDQZv45frycNvtZSUm5T8vRXv6jzfxTWFiigrjgnfW2M5fLtz0++ph/KitctNnPCgtLfFquoOA4oSLIbBUqYmNj1a1bN2VnZ2vw4MGS5LnpesyYMTW+bu7cuXrxxRc1f/58de/evc73OXjwoI4cOaLk5OSg1S5Jlfx0vN9oM/+43G7a7Gcul28Xb9Ne/qPN/ONyMS5/4XYzLkPBMAza7Ge+tkNlpZvHZgWZrUKFJN14442aPHmy0tPT1aNHDy1cuFAlJSUaOXKkJGnSpElq06aNJk6cKOnEJU+zZ8/WrFmz1K5dO+Xm5kqSmjRpoqZNm+r48eOaM2eOhg4dqqSkJO3du1d/+ctf1KFDBw0cONC0zwnUCxtIwHoYlx48cSc0aFVYge1CxWWXXab8/HzNnj1bubm56tq1q+bNm+e5/OnAgQNynHLjzeuvv66KigrdddddXuu588479T//8z9yOp3avn27li9frmPHjql169Y6//zzNX78eH6rArAxX28IBRA+UWJgApHKdqFCksaMGVPj5U6LFy/2+vvDDz+sdV1xcXGaP39+0GoDAAAAGhruUAEAIIS4NAWhRh87yddzYfxmSvARKgAACCEu+DmJeyqAyEWoAAAAABAQQgUQQTgGCFgP4xIhRyerBxot2AgVAAAAAAJCqAAiCNduAwAAMxAqAAAIIcI+Qo5OBgsgVAARhCtEAethXJ6CxggN2tVvPFI2+AgVAAAANsajemEFhIowMojFCLHi0kqzS7AMrgaAVZRXuMwuwToYmCGRe6TU7BJsh12y4CNUhNHXOw6bXQIi3Jsf7TC7BMvw9fvix8PHQ1oH8M7a780uwTp8HJil5Rwg8Ufh8XKzS7CdT785YHYJEafeoWLnzp1avny5XnzxReXm5kqS9uzZo6KioqAVF2l27S80uwQAp/kpv9jsEhDhcnbmmV2C7ZSUcXYHobX1hwKzS4g40f6+oKSkRFOmTNF7772nqKgoud1uDRw4UMnJyZo1a5ZSUlI0adKkUNQKAIBlcEmr/2gxIHL5fabiiSee0Lp16/Tyyy/ryy+/9NqoDho0SGvWrAlqgQAAAACsze9Q8c9//lP33HOPBgwYoJiYGK957dq1048//hi04iINB7WA8PH1flDGJRA+3KcNy2DbH3R+h4ri4mIlJydXO6+kpCTgggAAsAP2SQD7YvwGn9+hIjU1Vf/617+qnffvf/9b6enpARcVqXiONGBFjEsgXHwdbdyvgnrz8XQYfSz4/L5R+/bbb9ftt9+ukpISDRs2TFFRUcrJydG7776rZcuWae7cuaGoEwAAAIBF+R0qfvvb3+qpp57Sk08+qXfeeUeSNG3aNLVt21YzZ85U//79g14kAIQKB6tQb/QdAPDwO1RI0rBhwzRs2DDt3r1bBQUFatGihTp16hTs2iIPX0AAAACh4+O+FgeUgq9eoeIXHTt2VMeOHYNVCwAEDd8XCDXuk/MfO3JA5PIpVMyZM8evld555531KibSsS0FAKBuhA/AfnwKFQsXLvT6u6KiQqWlpZKkRo0aqaysTJIUFxen2NhYQgUA0/E8fABATXj6U/D5FCo+//xzz7+/+eYb3X333br99ts1dOhQNWvWTEVFRVq1apVeeOEF/fWvfw1ZsQDgK58fXRnSKhDJ2CepD98ajUvLAPvx+56K6dOna9y4cRo1apRnWrNmzXTllVeqrKxMjzzyiJYuXRrUIgEAQANCpkA90XXM4/eP323dulUpKSnVzmvfvr2+++67gIuKWPR0wHI4BQ4ADQ9b/uDzO1S0a9dOr7/+epUvYsMw9Nprr+nMM88MWnEAAACAr7ifzjx+X/40ceJEjR8/XkOGDNGFF16oxMRE5eXl6aOPPtL+/fv1zDPPhKJOAABgc5wYRKjRxczjd6gYPHiwli5dqpdfflkffPCBcnNzlZycrB49emj27Nnq2rVrKOqMCNx4BoQPOy8INfpY6NC0CDXGb/DV68fvunbtylOeAABASLC/h1DjQG/w+X1PBeqPVAyET5SPF9YyLgEgcvi8SWfbH3R+n6kYO3ZsncssWrSoXsUAQLAQFhB6dDIA+IXfoaJZs2aKOu0QYGFhoTZv3qz4+Hilp6cHrTgAqK/jpRVml4AIR3D1X97RUrNLQISrrHT7tBzDN/j8DhXPP/98tdPz8/N1++2367LLLgu4qEjFFxDqa8/BY2aXYDsrsvf4tBzX1aK+Pt96yOwSbOfHw8d9W5AvTElShY87yDhp1Wc/+LYgfSzognZPRatWrfTHP/6RR8rWgp0X1NcPPxEqAKvZuqfA7BIiFt+WJ1RUuswuwXa+2p5rdgkNVlBv1Ha5XMrN5f/MGrGVBKyHcYl6ousA1uPruGT8Bp/flz9t3ry5yrSKigrt3LlTzz33nHr06BGUwgCcxMYPsB6unkCo0cXqw7dWY/wGn9+hYtSoUVVu1DZ+/n8mIyND06dPD05lAAAAgB8IC+bxO1RU97jYRo0aqW3btmrTpk1QiopUdHTAehiWgAUxMCWx31AfNJl5/A4VKSkpSk5OVkxMTJV5lZWVOnTokM4888ygFAcAgHWx+xIqtCxgP37fqH3xxRdry5Yt1c7bunWrLr744oCLAuDN4HAVYDmMSoSam22//3xsMr5Xg8/vUFHb/wnl5eWKjY0NqKBIxiNlASCCsElHiLHf6z/Cgnl8uvxp586d2rlzp+fvzz77TAcPHvRapqysTCtWrFD79u2DW2EEoZujvug7IUTjop7oOqHDjuEJtIP/aDHz+BQq3nvvPc2ZM0eSFBUVpVmzZlW7XHx8vLKysoJXXQ2WLFmi+fPnKzc3V2lpaXrwwQdrfZTte++9p2eeeUY//vijzj77bN1zzz0aNGiQZ75hGJo9e7b+9re/qbCwUL1799bDDz+ss88+O+SfBfAJW0nActjhQ6jRxfzna5vRtsHnU6i4/vrrNWLECBmGocGDB2vOnDnq2rWr1zIxMTFKTk6u8rjZYFu5cqWysrI0bdo0ZWRkaOHChRo3bpxWrVqlxMTEKst/9dVXmjhxoiZMmKALL7xQ77zzju644w699dZb6tKliyRp7ty5Wrx4sR5//HGlpKTomWee0bhx47Ry5Uo1atQoeMXTgVFPdJ3Q4bLEE9hBhpXQHU9gXNaHj79TEeIqGiKf7qlo3ry52rVrp5SUFH3wwQe64IIL1K5dO6//WrduHfJAIUkLFizQ6NGjNWrUKHXu3FnTpk1TXFycli1bVu3yixYt0sCBA/XHP/5RnTp10t13361zzjlHr776qqQTA3bRokW67bbbNHjwYKWlpenJJ5/UoUOHtHr16qDWTgdGffHFglCji/nPTZshxBiX/vO5zWjcoPPpTMWRI0cUHx8vh8Ohpk2bqri4WMXFxTUu37Jly2DV56W8vFybN2/Wrbfe6pnmcDiUmZmpDRs2VPuar7/+WjfccIPXtAEDBngCw759+5Sbm6vMzEzP/ObNmysjI0MbNmzQ8OHDg1Z/9uaD+nW7Fp4jo9X151OneR1BNbz+57TXGKcvVvNrfl7WqDqp7nVWLce/ddYjVq3ddOC0uqpZb3VtVlOtntf4+PlqaNva2qy6/w/qWmdN27ZfPs83O/OqX6Aa2ZsO1trHTp3uax878ZqaP191/eHU6T73sTrWGYo+lr35p9Pqqma9oexjp7xB0MalP/325yXcfuwhn9rHaq7Ve/011ur1mhCMoSD32xPzfx6Xu4I3LsO17T91urXH5UGdkdik9vU2gHF5vKSy6swaNORxeerncfm4Ldu+76hlxmXQ+pg/66zHuKyLT6Gif//+euONN9SjRw/169evzjMSNT1yNlAFBQVyuVxVLnNKTEzUrl27qn3N4cOHlZSUVGX5w4cPS5Jyc3M902paJljKyl2a++63QV1npJv3bmj6UiSjj/ln8+58bd6db3YZtkIf8x9t5p8V2XvMLsF26GP+o82Cy6dQMWPGDM9TnWbMmBGWy5xgD6d2hahqJkZVu2yUKl3u0BZmYb+0Q1R1E0+ZfmrbVrqCf0TBLqrtY6fMoI9V5eu49N6U02YS49JXjEv/MS79V9u4rL6PMS49/65mYqjHpU+hYsSIEZ5/jxw5MihvXB8JCQlyOp3Ky/M+5ZyXl1flbMQvkpKSqpxxOHX55ORkz7TWrVt7LZOWlhbM8iVJz08c5Pl3VJV/SFGn/FFddjs5wKrfote2zpqyYG3r9O6AwQuTYx/17X6Ve37fU786s0WVWnz9fFE1tG11n0/VtIPP66zhCzZYbZZ7pEQT5/zHp2Wr7WOn/BG0zxeCfhvMPnbLkx+ptNxV53KJ8XGafnPfqmWFYAyFot+aMS5n3NJPLZs3qlJLKMZQsNcZzPbK2XlYM//va5+Wtdu2/9R/mtHHLjo3RVf+ttPpJTEua/HchAs879uQx+XyT3bprU+qv3rldHYbl2b3sbr4FCqsIjY2Vt26dVN2drYGDx4sSXK73crOztaYMWOqfU3Pnj21bt06r/sq1q5dq549e0qSUlJSlJycrOzsbM8TrYqKirRx40b9/ve/D/pniItxBn2dPqvx2sZfZteV7sOf/hvHRluuzWq8xtLXFdSDy4+jCKa2l1Rrm1myjzWij/mrSZyd2yx47eXy44io1dpLsvi4jHVars2sPi4bx5q8S2eRcenP/WFW62OStcdlXXzqgVdccYXPK4yKitI//vGPehdUlxtvvFGTJ09Wenq6evTooYULF6qkpMRzBmXSpElq06aNJk6cKEkaO3asrrvuOr3yyisaNGiQVq5cqU2bNumRRx7x1Dt27Fi98MIL6tChg+eRsq1bt/YEF5jH6QheEgeq43TSx/wV7fDpwYFAvbHtB+zHp1DRrVs3y9xHcdlllyk/P1+zZ89Wbm6uunbtqnnz5nkuZzpw4IAcp3zh9e7dWzNnztTTTz+tp556Smeffbaee+45z29USNLNN9+skpISTZ06VYWFhTr33HM1b9684P5GBerF6WTnRTrtNCh84usmK5qdF79FE8QkiVEZQmz7UW8MTNP4FCoef/zxUNfhlzFjxtR4udPixYurTLv00kt16aWX1ri+qKgojR8/XuPHjw9ajQgOdvhOsEimj0gcEfUfZ3cQaoxLwH4COhRgGIby8/P5YS6EjIMvFtSbb32HI6L+c3L5E0LMwZEUwHbqdVfPp59+qjlz5mjz5s2qrKxUdHS0unXrpjvuuEMDBw4Mdo1owPhaQX3RdwD7IlOgvug65vH7cNOyZct08803KyYmRpMmTdKsWbM0adIkRUdH65ZbbtHSpUtDUScaKrYOkoL76Dh4o2kB62FYAvbj95mK5557TiNGjNCMGTO8pl933XW677779Pzzz+vKK68MWoEAEErsvKDe6DwA4OH3mYr8/HwNHz682nnDhw9Xfn5+wEUBv+C6WtSXr12Hs0CA9TAuUW/0HdP4HSoyMjK0efPmaud9++236t69e8BFAfDGNjJ02HkBLIhhCdiO35c/TZgwQRMmTFB5ebkGDx6sVq1aKT8/X++//76WL1+up556SkeOHPEs37JlyyCWi4aGHT6EGl0M9cXvx4QOLQvYj9+h4uqrr5YkzZkzR88995xn+i+Plb3mmmu8lt+yZUsg9UWU+CYxZpdgO/zI1gm0gv98DaQJzfmRS8BqmvF9iXri+9I8foeKGTNmcPS4nq4bmmZ2CbbTvEms2SVYA2MuZC7vf7bZJSDCde2QYHYJtvObtDZml4AId9VvO5ldQsTxO1SMHDkyFHU0CK3iOSKK0DozqanZJdhOXCOn2SXArnzM+h3PiA9tHRGIHz5FqLVOaGx2CRGHn0UNI354HPXF1ysAALAyv89UVFRUaMGCBVq1apUOHDigsrKyKst89dVXQSkOwM9IFQAAwML8DhXTpk3T8uXLddFFF2ngwIGKieFmKl9xWTxCjS7mP9oMAIDA+R0q3n//fd1333269tprQ1EPgGqw4+s/QjwAAOHj9z0VTZo0Ufv27UNRC4Aa+PzENXak64FGA4CGh21/sPkdKm688Ua99tprcrlcoagHAAB74OEbAODh9+VPY8eO1aFDh3TJJZeoT58+io+v+qi8KVOmBKU4AKgvX49BcZkUQo0+BoQP4808foeKd999V6+88oqioqKUnZ1d5UbtqKgoQgUQZFz9BFiQjwOOx4kD4cN4M4/foWLWrFkaOnSopk+frmbNmoWiJgAArI+dFwDw8PueiiNHjmj06NEECiCMOAMB2BeXYwDhw3gzj9+hYtCgQdqwYUMoagFQI5/vEAhpFQAAWBmXP5nH78ufrrzySk2bNk2lpaXq379/tTdqd+vWLSjFAfAPR2hO4WNj0GYA0PCw7Q8+v0PFH//4R0nSyy+/rJdfftnr+fmGYSgqKkpbtmwJXoUAfMYRGgBAQ+ZrWOD7Mvj8DhWLFi2qdf7evXvrXQwAAABQX4QF8/gdKn7zm99UmZafn6/33ntP77zzjjZu3KhRo0YFpbhIw6k2hBp9zH9R3IcCAA0O35fB53eo+EVJSYnef/99vfvuu1q7dq1cLpe6du2q++67L5j1RRTSMxA+fF8AQMNDWDCPX6HC5XJpzZo1euedd/Thhx+qtLRUSUlJcrlcmjVrli677LJQ1RkR6OgINbpYPdBoABAxOIBrHp9CxZdffql3331Xq1atUkFBgVq2bKn/+q//0hVXXKFf//rX6tu3r5KTk0NdKwAAAAAL8ilUXHvttYqKilLfvn1144036vzzz1d09ImXHjt2LKQFRhKu3UbI0cX8RpMh1DhLDYSPr+ONYRl8PoWKLl26aPv27fr888/ldDpVUFCgwYMH86vaAKyLbwwAAMLGp1Dxj3/8Qzt27NA//vEPrVixQvfee6/i4uI0aNAgXXjhhV6/VQEAdsLmCwCAwPl8o3bnzp01YcIETZgwwXOPxT//+U/985//VFRUlOf3K84777yQFQs0VNFOH38dmsPzHme3aa6NRXlml4EIFt801uwSAJwmuWVjs0tosBz1edG5556rhx56SGvWrNFLL72kyy+/XP/5z380duxYXXzxxcGuERGodQKD3h+xMU7fFiRTeFx5YWcfl6TRUD/tW/t6CTB97BfXDU01uwREuD5prX1bkGHp0evXSUFZT71/p0KSnE6nBg0apEGDBqm0tFSrV6/Wu+++G5TCENnObttchwpKzC4DEaxJo4A2bw1SjNOhCpfb7DIQwVrFNzK7BEQ4B9e0+q1dclNt+O5wwOsJ2rduXFycLr/8cl1++eXBWiUAhBzfP0D4cA8mYEXBGZf1uvwJ9cO2FKFGFwOsh3EJoCEgVAARhOCKQBjip2gRWgY/dwyL4MEmpwrOuCRUAIhIBCwAAMKHUAGgQSN8AOHDPRWAFXFPBYAq+ML+BVdZwCrYjwZgbVz+BAAB47paIHy4pwKIXIQKABGJo8P+I2ABAOqLUAFTcF1taNCsJ/l8QJQ28+DpTwg1tv2wDLpi0NnqJ2ePHDmi6dOn66OPPpLD4dCQIUP0wAMPqGnTpjUu/+yzz+rTTz/VgQMH1KpVKw0ePFjjx49X8+bNPculpqZWee1TTz2l4cOHB7V+NqYncQocABoetv1A5LJVqLjnnnuUm5urBQsWqKKiQvfff7+mTp2qWbNmVbv8oUOHdOjQIU2ePFmdO3fWjz/+qIcffliHDh3S7NmzvZbNysrSwIEDPX/Hx8eH9LMAoUBs9R9tBgBA4GwTKnbu3Kk1a9Zo6dKl6t69uyRpypQpuuWWWzRp0iS1adOmymu6dOmiZ5991vP3WWedpbvvvlt//vOfVVlZqejokx8/Pj5eycnJof8gkMRZGwAAgEhim3sqNmzYoPj4eE+gkKTMzEw5HA7l5OT4vJ6ioiI1a9bMK1BI0rRp09S3b19deeWVWrp0KadoYU9kNb8RcAGg4WHLH3y2OVNx+PBhtWrVymtadHS0WrRoodzcXJ/WkZ+fr+eff15XX3211/S77rpL/fr1U+PGjfXpp59q2rRpKi4u1tixY4NW/4l6HYqOtk2OCylf9+NoL/9ERUXRZj/ztR1oL//RZv5xOtn2/8LhYFyGCm3mH8blSY4gHVwzPVTMnDlTc+fOrXWZlStXBvw+RUVFuvXWW9WpUyfdeeedXvPuuOMOz7/POecclZSUaP78+UEPFfHxjZWQUP1N5Q1NbKxvXY/28k+000Gb/czt484L7XWqKPnyI0i0mX8ax8XQZj9r0qTQp+VoL//RZv5p1qwRbfazRnExQVmP6aHipptu0ogRI2pdpn379kpKSlJ+fr7X9MrKSh09erTOeyGKior0xz/+UU2bNtVzzz2nmJjaGy8jI0PPP/+8ysvLFRsb69sH8UFhYYkK4pxBW5+dlZdX+rRcQcHxEFcSWVwuN232s6PHynxajvY6lW+XfdJm/ikpraDNflZcXO7TcrSX/2gz/xQVldFmPystrQjKekwPFa1atapyWVN1evXqpcLCQm3atEnp6emSpHXr1sntdqtHjx41vq6oqEjjxo1TbGysXnjhBTVq1KjO99qyZYtatGgR1EAhndjhq6x0B3WdduXrLSu0l38M0Wa/8LUdaC//0Wb+MdwGbfYzt5txGSq0mX/cbvbJfhGs+4htczFZp06dNHDgQD344IPKycnRl19+qenTp2v48OGeJz/99NNPGjZsmOfG7aKiIt10000qLi7WY489pqKiIuXm5io3N1cul0uS9OGHH+pvf/ubtm/frj179ui1117TSy+9pDFjxpj2WQHADDyfAgAanmBt+00/U+GPmTNnavr06br++us9P343ZcoUz/yKigrt3r1bJSUlkqTNmzdr48aNkqRLLrnEa10ffPCBUlJSFB0drSVLlmjGjBmSTjx29t5779Xo0aPD9KkAAAAAe7NVqGjZsmWNP3QnSSkpKdq2bZvn7759+3r9XZ0LLrhAF1xwQdBqBAC74um6AID6ss3lT5GA7+uTaIvQYEAjEFz+FCJs8AALYmAGG/sgYdS8SXBv/LYz9l1CI61DgtklADhNhzbNzS4BwGmSW8aZXULEIVSEUXxTQgVC6+JzU8wuARHu3C61P8IbVfXolGh2CYhw117SxewSbOeMRH6jItgIFbCspBYcRfCX08cffAPqKyG+7sdyw1sUN6sgxJrG2eoWWUQo9kBgCl++Yvke9h9thlCL4jpkwHoYlrAAQgUAAACAgBAqYFkcEQUAALAHQgWsi0wBAABgC4QKWBfPnUUADH50AQCAsCFUAAAAAAgIoQIAAABAQAgVsC7uqfAbj5RFqNHHAOvhwSawAkIFzMH2D7AlblUBrMfgJkRYAKEC5vBh+0fuAIDIQigFIhehAgDgMy5/AqyHy59gBYQKmIPtX0jwxYJAcBQZoUYoBSIXoQIAAABAQAgVsC4OaQFAROFsWGjwdYlABGtcEiqASMIXCwAAMAGhAqZg3xcAGh6OqIcGZ4AQiGCNS0IFTMH2D7AennWPUGPnF7AeLn9CxOOAFgAAdeMMEKyAUAFEEL5XAACAGQgVAAAAAAJCqIBlcToXsB7GJQCgOoQKmIL9EsCeuNEWAFAdQgVM0f1XiWaXEJE4inxSk7hos0uwnf7d2ppdAiJcSutmZpdgO2zWEWppZ7UMynoIFTBF33PamF2C7ZzVhi9jf8TFEir8dfn5Z9e5DMEVgWjbqonZJdjOmCFdzC4BES49SAd6CRUwRRR7Jn5LaB5ndgmIcDFOvhIAq2nciAMksAe+QYCIQlhD/XG7BGA9jEvYBaECAAAAQEAIFbAsLpECwosRB1gP4xJ2QaiAZRk8u9ILGQsAAFgVoQKWxZkK/9FkCAQxHrAexiXsglABy2L/GLCeKEYmYDkchIMVECoAm+BqMAAAYFWECgAAAAABIVTAujibC4QVQw6wHsYl7IJQAevich8vXDKLUGPIAdbDuIRdECoAmyBTAAAAqyJUwLrYi/biy9EqzmYAAAAzECoAAL4juAKWw7CEFRAqAAAAAATEVqHiyJEjmjhxonr37q0+ffro/vvv1/Hjx2t9zXXXXafU1FSv/6ZOneq1zP79+3XLLbcoIyND/fv31xNPPKHKyspQfhQAAAAgYkSbXYA/7rnnHuXm5mrBggWqqKjQ/fffr6lTp2rWrFm1vm706NG66667PH83btzY82+Xy6Vbb71VSUlJev3113Xo0CFNnjxZMTExmjBhQsg+C+rG6VwAAAB7sM2Zip07d2rNmjV69NFHlZGRoT59+mjKlClasWKFfvrpp1pfGxcXp+TkZM9/zZo188z79NNPtWPHDv3lL39R165dNWjQII0fP15LlixReXl5qD8WAAAAYHu2CRUbNmxQfHy8unfv7pmWmZkph8OhnJycWl/7zjvvqG/fvrr88ss1a9YslZSUeOZ9/fXX6tKli5KSkjzTBgwYoKKiIu3YsSP4HwQAAACIMLa5/Onw4cNq1aqV17To6Gi1aNFCubm5Nb7u8ssv15lnnqnWrVtr27Ztmjlzpnbv3q05c+Z41ntqoJDk+bu29dZHdLRtMpwlREVF0Wan8OVxsTHRTjkcXDjmD/rYSb70HYeDcekv2uskp9O3tqDNTvJpXDoZl/6ivYLP9FAxc+ZMzZ07t9ZlVq5cWe/1X3311Z5/p6amKjk5WTfccIN++OEHnXXWWfVeb30kJDQN6/vZndPpoM1OERNd93BtmdBUTkKFX+hjJxVX1v1rKI3jYmgzP9Fe/qPNTmratFGdyzRrFkeb+Yn2Cj7TQ8VNN92kESNG1LpM+/btlZSUpPz8fK/plZWVOnr0qJKTk31+v4yMDEnSnj17dNZZZykpKanK5VOHDx+WJL/W64uCgtqfVAVvLpebNjtFZaWrzmWOFBznTIWf6GMnFRWV1rlMaWkFbeYn2uskX89U0GYnHT9eVvcyRaW0mZ9or+AzPVS0atWqymVN1enVq5cKCwu1adMmpaenS5LWrVsnt9utHj16+Px+W7ZskXQyMPTs2VMvvvii8vLylJiYKElau3atmjVrps6dO/v7cWpVWekO6voiXWr7lrTZKQyj7qPIlS63HG5ChT/oYye53XX3sfatm9FmfqK9/EebneTLuEyMj6PN/ER7BZ9tLijr1KmTBg4cqAcffFA5OTn68ssvNX36dA0fPlxt2rSRJP30008aNmyY58zDDz/8oOeee06bNm3Svn379MEHH2jy5Mk677zzlJaWJunETdmdO3fWpEmTtHXrVq1Zs0ZPP/20rr32WsXGxpr2eSFd2q+D2SXYjsOXGy/g0bVDgtkl2M55aa3NLgERbuQFvzK7BNs5q01zs0sAzD9T4Y+ZM2dq+vTpuv766+VwODRkyBBNmTLFM7+iokK7d+/2PN0pJiZG2dnZWrRokYqLi3XGGWdoyJAhuv322z2vcTqdevHFF/Xwww/r6quvVuPGjTVixAiv37UIhmaNY4K6voYghpuoEGKtExrXvVAD4svZsCiCK0IsvikH9LzUPSwBS7BVqGjZsmWtP3SXkpKibdu2ef4+44wz9Oqrr9a53nbt2tV5szgAAACA6nEoGECDxTF3wHoYl4A9ESoAAAAABIRQAcvi0m2EGpcqA9bDuATsiVAB2AUhCwAAWBShApblw4NoAAAAYAGECgANFid/AOthXAL2RKgA7IIzNwAAwKIIFWHCTccAAMBfBkeUYBOEClgWQQwAAMAeCBUAAAAWFcVdJrAJQgVgF3yvBB+nwwDrYVgCtkSoCBMejwpYEAMTsB6GJWBLhAoAAACL4kZt2AWhAgAAAEBACBVhwqXbAAAAiFSEijAhUwAWRNoHrIdhCdgSoQIAAABAQAgVAAAAAAJCqAAAAAAQEEJFmPBAOP9xWS1Cjt+pAKyHYQnYEqEClsX3ircoYhYAALAoQgVgE786M97sEiIPT3/y0jQuxuwSbOes1s3MLiHyMCy9tG7ZxOwSAJ8QKsKEbSQCNazvWWaXYDtxsU6zS7CV+KaxZpdgO9dc/GuzS0CE65zSwuwSbOe/B3Q0u4QGiVAB2ES0k+HqL44iI9SaxEWbXQKA07SKjzO7hAaJvRRYFmd3AAAA7IFQAQAAACAghIpw4YZQwHIYlYD18KQ7wJ4IFQAiF2EeAICwIFQAdsH+cdDxWyiA9RiMTMCWCBUAAAAAAkKoAAAAABAQQgWABosrygDr4UZtwJ4IFQAil8G12QDQ8LDtNwOhAgAAAEBACBUAAAAAAkKoCBOuEK0PWg0AAMAOCBXhwv4xEH51/fgd4xKwHH6zEoGjE5mBUBEu3DNUDzTaqdhEhgBdDLAcnq8A2BOhAgAAABGEZGoGQgUAAACAgBAqAAAAAASEUAEL4y4ChBhdDLAcbtQG7IlQAQAAACAghAoAAAAAAYk2uwB/HDlyRNOnT9dHH30kh8OhIUOG6IEHHlDTpk2rXX7fvn26+OKLq5339NNP69JLL5UkpaamVpn/1FNPafjw4cErntO5AAAAiFC2ChX33HOPcnNztWDBAlVUVOj+++/X1KlTNWvWrGqXP+OMM/Tpp596TXvjjTc0f/58XXDBBV7Ts7KyNHDgQM/f8fHxQa29fXKzoK6vIXA6SWKniuJC46Br07Kx2SUAOE2LZrFml4AI16xxjNklRCTbhIqdO3dqzZo1Wrp0qbp37y5JmjJlim655RZNmjRJbdq0qfIap9Op5ORkr2mrV6/WpZdeWuXsRnx8fJVlg2n0hZ1Dtu5I1SjGaXYJttK2VROzS7Cdi85NMbsERLiLerczuwTb6XZ2K7NLQIS74dI0s0uISLYJFRs2bFB8fLwnUEhSZmamHA6HcnJydMkll9S5jk2bNmnLli2aOnVqlXnTpk3TAw88oPbt2+uaa67RqFGjgnpkOL5ZrKKjuYXFH7SXN6ez9vbo1K4FbXaauoZwXCPbbALDoq4+JjEuT1dXm52Z3JQ2O4UvfSyGA0p+o495czhqb4/EFnG0WQjY5hv18OHDatXK++hFdHS0WrRoodzcXJ/WsXTpUnXq1Em9e/f2mn7XXXepX79+aty4sT799FNNmzZNxcXFGjt2bNDqb9myiRJacKmFPxISqr9XBtVr1CiaNjtNdHTtOye0l/9oM28FxZW1zm/SuBFt5ifay3+0mbe4uNovb2rePI42CwHTQ8XMmTM1d+7cWpdZuXJlwO9TWlqqd999V7fffnuVeXfccYfn3+ecc45KSko0f/78oIaKI0eK5XC7g7a+hqCg4LjZJVhKXUf4ysoqabPTuCpdtc6nvbz5chSZNvNWWFhS6/zikjLa7BT0sdCgzbyVllbUOv/YsVLaLARMDxU33XSTRowYUesy7du3V1JSkvLz872mV1ZW6ujRoz7dC7Fq1SqVlpbqd7/7XZ3LZmRk6Pnnn1d5ebliY4Nzw5jLZaiyklDhD9rLP4ZBHzudYdQ+n/byH23mzeWqvT3cbPv9Rnv5jzbz5q7jIG6ly02bhYDpoaJVq1ZVLmuqTq9evVRYWKhNmzYpPT1dkrRu3Tq53W716NGjztcvW7ZMF110kU/vtWXLFrVo0SJogQIIh7p2oBsimgShVte446ltQPjxfWgO29yl0qlTJw0cOFAPPvigcnJy9OWXX2r69OkaPny458lPP/30k4YNG6acnByv1+7Zs0eff/65rrzyyirr/fDDD/W3v/1N27dv1549e/Taa6/ppZde0pgxY8LyuQAAkctg7wawHoZlSJh+psIfM2fO1PTp03X99dd7fvxuypQpnvkVFRXavXu3Skq8r3FdtmyZ2rZtqwEDBlRZZ3R0tJYsWaIZM2ZIks466yzde++9Gj16dGg/DICQ4xgxQo0TEYD1MC7NYatQ0bJlyxp/6E6SUlJStG3btirTJ0yYoAkTJlT7mgsuuKDKD+EBdsRGFAAAH/B9GRK2ufwJAAAAgDURKgAAAAAEhFABIGJxLx5CjfuwAethXJqDUAEAAAAgIIQKAABChN+pANBQECoARCx25wAACA9CBRAh2IEGAKBuUXxjhgShAogQ3JdWFVeeINToY4D1MC7NQagAACBEDB5DA1iOwWG4kCBUAIhY7M8h1OhjgPUwLs1BqAAAAAAQEEIFAAAhwiNlATQUhAoAAAAAASFUABGC46EAANSNR8qGBqECAAAAQEAIFQAiVnLLxmaXgAgXF+s0uwQAp2neNNbsEhokQgVM0+nMeLNLQIQb9dtOZpeACNemVROzS7CdiX/obXYJiHDnpiabXYLt9O/WNuB1ECpgmk7tWphdQkThsdxVNY2LNrsE2+nQtrnZJSDCtSaIIcQcPHXNbx3aNAt4HYQKAAAANBj8onZoECoAAB581SLU+LVjwHqCMSwJFUCE4GQvAAB145GyoUGoAAAAABAQQgUAAACAgBAqAAAAAASEUAEgYnFDKAAA4UGoAAAAYcNPCADWE4xhSagIEzaiQPgx7gDr4QwiYD08UhbASexAAwBQJw44hQahAogUHP0DAAAmIVSECad7AQAAzMc+WWgQKgAAAAAEhFABAAAAICCECgARi1Pc/qPNAAD1QagIE540UBU7L0FGH0NQMDABRDb2yaoKxj4ZoQIAAABAQAgVAAAAAAJCqIBpOP0IWBEDEwAammDskxEqAEQsgqv/aDMAQH0QKgAAAAAEhFARJg4O/yHEGsdGm12C5fCEMf/RZsEVG8PXLGA1Tgf7ZKHA1i5M4pvGml2C5bDzElz/NaCj2SUgItQ8MNM7tgpjHZGhf7e2ZpeACPf7wb82uwTbad+6mdklWA6PlEXEOi+ttdkl2E6zxjFml4AI1/XsBLNLsJ1oJ1+zCK2z2EH2WxRXj/ilTUJjn5ZjawcAAAAgILYKFS+88IKuueYaZWRkqE+fPj69xjAMPfPMMxowYIB69OihG264Qd9//73XMkeOHNHEiRPVu3dv9enTR/fff7+OHz8egk8AAAAARB5bhYqKigoNGzZMv//9731+zdy5c7V48WI9/PDDevPNN9W4cWONGzdOZWVlnmXuuece7dixQwsWLNCLL76oL774QlOnTg3FRwAAAAAijq1CxV133aUbbrhBXbp08Wl5wzC0aNEi3XbbbRo8eLDS0tL05JNP6tChQ1q9erUkaefOnVqzZo0effRRzxmQKVOmaMWKFfrpp59C+XEAAACAiBDRz6Dct2+fcnNzlZmZ6ZnWvHlzZWRkaMOGDRo+fLg2bNig+Ph4de/e3bNMZmamHA6HcnJydMkllwSlluhoW+W3sHDU0iRRjija7DTOOm74pL2qquthFrSZt7r6mINx6Tfay1tdfUyizfzldDpos9Pwfek/p7OWm9d9vLE9okNFbm6uJCkxMdFremJiog4fPixJOnz4sFq18n5MYnR0tFq0aOF5faBSz0pQQkLToKwrkoy8uIv+uX5vtfPGXNqVNqtG/+5nKPubA9XOo72qMmp5Rt7w8zvSZtW4bWSG7n/hP9XOu2xAJyXEx4W5IutrFd9I+YVl1c6jj1XVKa7mJ9XdeVUGbVaNO6/K0Jy/bax2Xq9z2iqO3ynyWYtmsfSxagzN7Kj/W/1dtfPGX9PLp3WY3gtnzpypuXPn1rrMypUr1alTpzBVVH9/yxqu5R99J7fbUO6REh0rrtA5ZydoUK92Kijgxu/TNXZGKevWfvp8yyE5nQ4dyDsuwzA0rG8HtWwcTZudxul06N6x5+n9dbt1qKBEJaWVyj1SosSWcfrdgF/RXjV44Z5B+uCLfYp2OnSooFjFZZU6N7W1ftO1NW12GqfToe6dk/TIH/vq6+25UpT0U36xop0OXZ55tqJcLtqsGrPuPF9rNh7Q8dIKFR4vV0FhmVJaN9Nl/TvQXqdxOh2Kj2+s5yYO0gef71VMjEM/5ZeotLxSA3ucqe6dEmmzavwmNVmT/tBLO388Kpfb0KGCEsXFOvW7C36lkuNlKjlefahtqJxOh9564nK9/dF3qqhwK7+wVIXHy9W5fQsNPrc9fawaDkl/uT1T2ZsOKjr6xD6Zy2XokvPaK6WVb4+UNT1U3HTTTRoxYkSty7Rv375e605OTpYk5eXlqXXrk797kJeXp7S0NElSUlKS8vPzvV5XWVmpo0ePel7vq7jYaA39zVmqrHR7TXe7DLnrvBCjYWqT0ESXZ55dZfrpbYgTHI4o/aZrm2rbhzarXqNopy7r16HKdJfLUN0XSDVMZ7dtrpSkqkfy6GM1G9D9jKoTDdqsJs0bx7Dt91PaWQlKO6vqb8XQZtWLiXbqkj7tq+6TuQ253Wz7q5MYHxfQuDQ9VLRq1arK5UfBkpKSouTkZGVnZ6tr166SpKKiIm3cuNHzBKlevXqpsLBQmzZtUnp6uiRp3bp1crvd6tGjR0jqAgAAACKJre5U2b9/v7Zs2aL9+/fL5XJpy5Yt2rJli9dvSgwbNkzvv/++pBO/mDh27Fi98MIL+uCDD7Rt2zZNmjRJrVu31uDBgyVJnTp10sCBA/Xggw8qJydHX375paZPn67hw4erTZs2pnxOAAAAwE5MP1Phj9mzZ+vtt9/2/P273/1OkrRo0SL17dtXkrR7924dO3bMs8zNN9+skpISTZ06VYWFhTr33HM1b948NWrUyLPMzJkzNX36dF1//fVyOBwaMmSIpkyZEp4PBQAAANhclFHb41Hgt4KC41zfiJCIjnYoIaEpfQwhQx9DqNHHEA70s+BLTm5e5zK2uvwJAAAAgPUQKgAAAAAEhFABAAAAICCECgAAAAABIVQAAAAACAihAgAAAEBACBUAAAAAAkKoAAAAABAQQgUAAACAgBAqAAAAAASEUAEAAAAgIIQKAAAAAAEhVAAAAAAICKECAAAAQEAIFQAAAAACEmUYhmF2EQAAAADsizMVAAAAAAJCqAAAAAAQEEIFAAAAgIAQKgAAAAAEhFABAAAAICCECgAAAAABIVQAAAAACAihAgAAAEBACBUAAAAAAkKoCIIlS5booosuUvfu3XXVVVcpJyfH7JJgUZ9//rn+9Kc/acCAAUpNTdXq1au95huGoWeeeUYDBgxQjx49dMMNN+j777/3WubIkSOaOHGievfurT59+uj+++/X8ePHvZbZunWr/vCHP6h79+4aNGiQ5s6dG+qPBot46aWXNGrUKPXq1Uv9+/fX7bffrl27dnktU1ZWpmnTpqlv377q1auX/ud//keHDx/2Wmb//v265ZZblJGRof79++uJJ55QZWWl1zKfffaZRowYofT0dF1yySV66623Qv75YL7XXntNV1xxhXr37q3evXvr6quv1scff+yZT/9CsL388stKTU3VY4895plGP7MeQkWAVq5cqaysLN1xxx16++23lZaWpnHjxikvL8/s0mBBxcXFSk1N1UMPPVTt/Llz52rx4sV6+OGH9eabb6px48YaN26cysrKPMvcc8892rFjhxYsWKAXX3xRX3zxhaZOneqZX1RUpHHjxunMM8/UW2+9pUmTJmnOnDl64403Qv75YL7169fr2muv1ZtvvqkFCxaosrJS48aNU3FxsWeZGTNm6KOPPtLTTz+txYsX69ChQ7rzzjs9810ul2699VZVVFTo9ddf1+OPP663335bs2fP9iyzd+9e3Xrrrerbt6/+/ve/6/rrr9eUKVO0Zs2asH5ehF/btm11zz336K233tKyZcvUr18/3XHHHfruu+8k0b8QXDk5OXr99deVmprqNZ1+ZkEGAnLllVca06ZN8/ztcrmMAQMGGC+99JKJVcEOunTpYrz//vuev91ut3H++ecb8+bN80wrLCw00tPTjXfffdcwDMPYsWOH0aVLFyMnJ8ezzMcff2ykpqYaBw8eNAzDMJYsWWKcd955RllZmWeZv/zlL8bQoUND/ZFgQXl5eUaXLl2M9evXG4Zxok9169bNeO+99zzL/NKvNmzYYBiGYfz73/820tLSjNzcXM8yr732mtG7d29Pv3ryySeN4cOHe73X3Xffbdx0000h/kSwovPOO89488036V8IqqKiImPIkCHGf/7zH2PMmDHGo48+ahgG2zGr4kxFAMrLy7V582ZlZmZ6pjkcDmVmZmrDhg0mVgY72rdvn3Jzc736U/PmzZWRkeHpTxs2bFB8fLy6d+/uWSYzM1MOh8Nz2d3XX3+tPn36KDY21rPMgAEDtHv3bh09ejRMnwZWcezYMUlSixYtJEmbNm1SRUWFVz/r1KmTzjzzTH399deSTvShLl26KCkpybPMgAEDVFRUpB07dniW6d+/v9d7DRgwwLMONAwul0srVqxQcXGxevXqRf9CUD3yyCMaNGiQV3+S2I5ZVbTZBdhZQUGBXC6XEhMTvaYnJiZWuYYZqEtubq4kVduffrlO9PDhw2rVqpXX/OjoaLVo0cLz+sOHDyslJcVrmV82qocPH/bsXCLyud1uzZgxQ71791aXLl0knegDMTExio+P91o2MTHRqw+d+kUsnexDdS1TVFSk0tJSxcXFheQzwRq2bduma665RmVlZWrSpImee+45de7cWVu2bKF/IShWrFihb7/9VkuXLq0yj+2YNREqACBCTZs2Td99951ee+01s0tBhOnYsaOWL1+uY8eO6Z///KcmT56sV1991eyyECEOHDigxx57TK+88ooaNWpkdjnwEZc/BSAhIUFOp7PKTdl5eXlVki9Ql+TkZEmqtT8lJSUpPz/fa35lZaWOHj3qeX1SUlKVJ2D88jf9suF45JFH9O9//1sLFy5U27ZtPdOTkpJUUVGhwsJCr+Xz8vJ86kN1LdOsWTOO7jUAsbGx6tChg9LT0zVx4kSlpaVp0aJF9C8ExebNm5WXl6eRI0fqnHPO0TnnnKP169dr8eLFOuecc+hnFkWoCEBsbKy6deum7OxszzS3263s7Gz16tXLxMpgRykpKUpOTvbqT0VFRdq4caOnP/Xq1UuFhYXatGmTZ5l169bJ7XarR48ekqSePXvqiy++UEVFhWeZtWvXqmPHjlz61AAYhqFHHnlE77//vhYuXKj27dt7zU9PT1dMTIxXP9u1a5f279+vnj17SjrRh7Zv3+4VcNeuXatmzZqpc+fOnmXWrVvnte61a9d61oGGxe12q7y8nP6FoOjXr5/eeecdLV++3PNfenq6rrjiCs+/6WcWZPad4na3YsUKIz093XjrrbeMHTt2GA8++KDRp08fr6cNAL8oKioyvv32W+Pbb781unTpYixYsMD49ttvjR9//NEwDMN46aWXjD59+hirV682tm7datx2223GRRddZJSWlnrWMW7cOON3v/udsXHjRuOLL74whgwZYkyYMMEzv7Cw0MjMzDT+/Oc/G9u3bzdWrFhhZGRkGK+//nrYPy/C76GHHjLOPfdc47PPPjMOHTrk+a+kpMSzzNSpU43f/va3RnZ2tvHNN98YV199tXH11Vd75ldWVhqXX365cdNNNxlbtmwxPvnkE6Nfv37GrFmzPMv88MMPRkZGhvHEE08YO3bsMF599VWja9euxieffBLWz4vwmzlzprF+/Xpj7969xtatW42ZM2caqampxqeffmoYBv0LoXHq058Mg35mRVGGYRhmBxu7e/XVVzV//nzl5uaqa9eumjJlijIyMswuCxb02WefaezYsVWmjxgxQo8//rgMw9Ds2bP15ptvqrCwUOeee64eeughdezY0bPskSNHNH36dH344YdyOBwaMmSIpkyZoqZNm3qW2bp1qx555BF98803SkhI0JgxY3TLLbeE5TPCXKc/y/0XWVlZGjlypKQTPxr1+OOPa8WKFSovL9eAAQP00EMPeS4JkKQff/xRDz/8sNavX6/GjRtrxIgRmjhxoqKjT96K99lnnykrK0s7duxQ27Ztdfvtt3veA5Hr/vvv17p163To0CE1b95cqampuvnmm3X++edLon8hNK677jqlpaXpgQcekEQ/syJCBQAAAICAcE8FAAAAgIAQKgAAAAAEhFABAAAAICCECgAAAAABIVQAAAAACAihAgAAAEBACBUAAAAAAkKoAAAAABAQQgUAAACAgETXvQgAoKFKTU2tc5msrCy9/fbbatKkiV566aUwVFW7JUuW6K233tKyZctC/l4vvPCC1q9frwULFoT8vQDAyqIMwzDMLgIAYE1ff/21199XX321rrvuOl1++eWeaWeddZby8/PlcDj0q1/9KswVeispKdEll1yiBx98UEOHDg35+xUWFurCCy/Uc889p379+oX8/QDAqjhTAQCoUc+ePatMO+OMM6pMb9WqVXgKqsPKlStVUVGhiy++OCzvFx8fryFDhmjRokWECgANGvdUAAACdt111+nWW2/1/P3ss8+qV69e+vbbb3X11VerR48eGjFihL799luVlZXpoYce0nnnnacLLrhA//u//1tlfRs2bNDYsWPVs2dPnXvuuZo4caLy8vLqrGP58uW6+OKLFR198pjZW2+9pdTUVH3zzTe66aablJGRoaFDh2rt2rVyu93661//qszMTGVmZmrWrFlyu92e1x48eFDjx49XZmamunfvrosuukgzZszwes9hw4bp448/Vn5+fj1aDgAiA6ECABASFRUVmjx5skaPHq1nn31WlZWVuvPOO/XAAw8oLi5OTz/9tAYPHqysrCx99dVXntdt2LBB1113nZo3b66//vWvmj59ur755hvdfvvttb5faWmpNmzYoN69e1c7f/Lkyfrtb3+rOXPmqHXr1rrzzjv12GOP6eDBg3riiSf0hz/8QS+//LJWrFjhec2kSZO0bds2TZkyRfPmzdNdd93lFTokqVevXnK5XFq/fn0ArQUA9sblTwCAkKioqNA999yjQYMGSZLcbrf+9Kc/KSMjQ/fdd58kqV+/flq1apVWrVrlCQOzZs1Senq65syZo6ioKElSly5ddPnll+vjjz/2rO90W7ZsUUVFRY03l48ZM0Z/+MMfJElt2rTRFVdcoU2bNumNN96QJA0cOFAffvihVq1apSuuuEKS9M0332jChAm67LLLPOv53e9+57Xe+Ph4nXnmmdq4caOGDRtWn6YCANvjTAUAICQcDof69+/v+fvss8+WJGVmZnqmOZ1OnXXWWTp48KCkEzdaf/XVVxo2bJhcLpcqKytVWVmps88+W2eccYa++eabGt8vNzdXUs33d5x//vlVajn9PoiOHTvqwIEDnr/POeccvfLKK3rttde0Z8+eGt+7ZcuWnvcHgIaIUAEACIm4uDjFxsZ6/o6JiZEkNW/e3Gu5mJgYlZWVSTrxNCWXy6WsrCx169bN67/9+/d77fCf7pd1nPqepzr1fX9ZJj4+vkot5eXlnr//+te/ql+/fnr66ac1ZMgQDRs2TP/617+qrDs2Ntbz/gDQEHH5EwDAMpo3b66oqCjdeuutGjx4cJX5CQkJNb62RYsWkk4Ek+Tk5KDU07p1a2VlZcntdmvTpk164YUX9P/+3//TqlWr1L59e89yx44d069//eugvCcA2BGhAgBgGU2aNFHPnj21a9cude/e3a/XduzYUZK0b98+derUKah1ORwO9ejRQ3fffbc+/PBD7dmzxxMq3G639u/fr1GjRgX1PQHATggVAABLmTRpkq6//nrdfffdGj58uOLj43Xw4EGtXbtWI0eOVN++fat9Xfv27ZWcnKzNmzfXeDO3P44dO6Zx48bpv//7v9WxY0dVVFRo8eLFio+P1znnnONZbvfu3SouLlafPn0Cfk8AsCtCBQDAUnr37q3XXntNzz77rO677z5VVFSobdu26tevnzp06FDra4cNG6ZPPvmkzsfP+qJRo0bq0qWLFi9erAMHDiguLk7p6emaP3++183gn3zyidq1a+f3mRUAiCRRhmEYZhcBAEAwbN26VSNGjNDq1avVrl27sLznqFGjdOGFF+rOO+8My/sBgBXx9CcAQMRIS0vTRRddpEWLFoXl/T7//HPt3btXY8eODcv7AYBVESoAABHlz3/+s1q3bh2W9yoqKtITTzxR5dG0ANDQcPkTAAAAgIBwpgIAAABAQAgVAAAAAAJCqAAAAAAQEEIFAAAAgIAQKgAAAAAEhFABAAAAICCECgAAAAABIVQAAAAACMj/B//Eb1QURg89AAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAnYAAADlCAYAAADeObo9AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/av/WaAAAACXBIWXMAAA9hAAAPYQGoP6dpAAATQklEQVR4nO3df5DVVf348RerIOPImgLmbyVtMXZh2XUZlnWNX4pMQv5MyvHXYKUZFUlKlj/CUqJEbdBxMNMUZapR8jNJkZoDTCGiIyC4IDKQScgIqwmrgrvs+f7B16tXRENhocPjMbMz3vf73Pd5330fd557795Lu5RSCgAA/ueV7OoTAABgxxB2AACZEHYAAJkQdgAAmRB2AACZEHYAAJkQdgAAmRB2AACZ2PuT3nH4mP/b5r67fzjokx72f9LInz+xzX17yveipKRdXHTj37a5f0/5PrzLmtjio9bFnvR9iLAm3mVNvMea2MKaeM9HrYk/TTztvzqGZ+zYIUpK2u3qU2A3ZF3wQdYEH2RN7FjCDgAgE8IOACATwg4AIBPCDgAgE8IOACATwg4AIBPCDgAgE8IOACATwg4AIBPCDgAgE8IOACATwg4AIBPCDgAgE8IOACATwg4AIBPCDgAgE8IOACATwg4AIBPCDgAgE8IOACATwg4AIBPCDgAgE8IOACATwg4AIBPCDgAgE8IOACATwg4AIBPCDgAgE8IOACATwg4AIBPCDgAgE8IOACATwg4AIBPCDgAgE8IOACATwg4AIBPCDgAgE8IOACATwg4AIBPCDgAgE8IOACATwg4AIBPCDgAgE8IOACATwg4AIBPCDgAgE8IOACATwg4AIBPCDgAgE8IOACATwg4AIBPCDgAgE8IOACATwg4AIBPCDgAgE8IOACATwg4AIBPCDgAgE8IOACATwg4AIBPCDgAgE8IOACATwg4AIBPCDgAgE8IOACATwg4AIBPCDgAgE8IOACATwg4AIBPCDgAgE8IOACATwg4AIBPCDgAgE8IOACATwg4AIBPCDgAgE8IOACATwg4AIBPCDgAgE8IOACATwg4AIBPCDgAgE8IOACATwg4AIBPCDgAgE8IOACATwg4AIBPCDgAgE8IOACATwg4AIBPCDgAgE8IOACATwg4AIBPCDgAgE8IOACATwg4AIBPCDgAgE8IOACATwg4AIBPCDgAgE8IOACATwg4AIBPCDgAgE8IOACATwg4AIBPCDgAgE8IOACATwg4AIBPCDgAgE8IOACATwg4AIBPCDgAgE8IOACATwg4AIBPCDgAgE8IOACATwg4AIBPCDgAgE8IOACATwg4AIBPCDgAgE8IOACATwg4AIBPCDgAgE8IOACATwg4AIBPCDgAgE8IOACATwg4AIBPCDgAgE8IOACATwg4AIBPCDgAgE8IOACATwg4AIBPCDgAgE8IOACATwg4AIBPCDgAgE8IOACATwg4AIBPCDgAgE8IOACATwg4AIBPCDgAgE8IOACATwg4AIBPCDgAgE8IOACATwg4AIBPCDgAgE8IOACATwg4AIBPCDgAgE8IOACATwg4AIBPCDgAgE8IOACATwg4AIBPCDgAgE8IOACATwg4AIBPCDgAgE8IOACAT7VJKaVefBAAAn55n7AAAMiHsAAAyIewAADIh7AAAMiHsAAAyIewAADIh7AAAMiHsAAAyIewAADIh7AAAMvGJwu6BBx6IQYMGRc+ePeMrX/lKPPfcczv6vNgFnn766bj00kujvr4+unfvHo8//njR/pRS/OpXv4r6+vro1atXXHTRRfHPf/6zaMx//vOfGDNmTFRXV0dNTU386Ec/ijfffLNozNKlS+Pcc8+Nnj17Rv/+/ePXv/71zn5ofEKTJ0+Os846K6qqqqJfv35x2WWXxYoVK4rGbNq0KcaNGxd9+/aNqqqq+M53vhPr1q0rGrN69er45je/GZWVldGvX7+YMGFCtLS0FI156qmn4owzzoiKioo4+eSTY9q0aTv98bH9pk6dGsOHD4/q6uqorq6OESNGxKxZswr7rQfuvPPO6N69e9xwww2FbdZFG0rbafr06am8vDw9+OCD6cUXX0xXX311qqmpSevWrdveQ7GbmTlzZrr55pvTo48+msrKytJjjz1WtH/y5Mnp+OOPT4899lhasmRJuvTSS9OgQYPSxo0bC2Muvvji9OUvfzktWLAgPf300+nkk09Ol19+eWH/hg0bUl1dXRozZkxatmxZeuSRR1KvXr3S7373uzZ7nPz3Ro4cmR566KG0bNmytGTJkvSNb3wjDRgwIL355puFMddee23q379/mjNnTlq0aFE655xz0ogRIwr7W1pa0rBhw9JFF12UGhoa0syZM1Pfvn3TxIkTC2P+9a9/pcrKyjR+/Pi0fPnyNGXKlPSFL3whzZ49u00fLx/vb3/7W5o5c2ZauXJlWrFiRbr55ptTeXl5WrZsWUrJetjTLVy4MA0cODANHz48/exnPytsty7aznaH3dlnn53GjRtXuL158+ZUX1+fJk+evENPjF3rg2HX2tqaTjjhhHTXXXcVtq1fvz5VVFSkRx55JKWU0vLly1NZWVl67rnnCmNmzZqVunfvntasWZNSSumBBx5Iffr0SZs2bSqM+eUvf5lOOeWUnf2Q2AEaGxtTWVlZmjdvXkppyxooLy9Pf/nLXwpj3l0H8+fPTylt+YXhuOOOS2vXri2MmTp1aqquri6sg1/84hfp1FNPLZpr9OjRaeTIkTv5EbEj9OnTJ/3hD3+wHvZwTU1NaciQIekf//hHOu+88wphZ120re16Kfadd96J559/Purq6grbSkpKoq6uLubPn7/Dn01k97Fq1apYu3Zt0bXv1KlTVFZWFq79/Pnzo7S0NHr27FkYU1dXFyUlJYWX6xcsWBA1NTXRoUOHwpj6+vpYuXJlvPHGG230aPikNmzYEBER+++/f0RELF68OJqbm4vWxTHHHBOHHnpoLFiwICK2XPOysrLo0qVLYUx9fX00NTXF8uXLC2P69etXNFd9fX3hGOyeNm/eHNOnT4+33norqqqqrIc93PXXXx/9+/cvuv4Rfk60tb23Z/Drr78emzdvjs6dOxdt79y581Z/d0Ne1q5dGxHxodf+3b+TWLduXRx44IFF+/fee+/Yf//9C/dft25dHH744UVj3v0fed26dYVgYPfT2toaN954Y1RXV0dZWVlEbLlm7du3j9LS0qKxnTt3Lrrm7/9hHfHeNf+4MU1NTbFx48bo2LHjTnlMfDIvvPBCfPWrX41NmzbFvvvuG7fffnsce+yxsWTJEuthDzV9+vRoaGiIBx98cKt9fk60re0KO2DPNW7cuHjxxRdj6tSpu/pU2MW6desWDz/8cGzYsCH++te/xtixY+P+++/f1afFLvLKK6/EDTfcEHfffXfss88+u/p09njb9VLsAQccEHvttVc0NjYWbW9sbNyqoslL165dIyI+8tp36dIlXnvttaL9LS0t8cYbbxTu36VLl63eCfXubWto93X99dfHzJkz4957742DDz64sL1Lly7R3Nwc69evLxrf2Nj4X13zjxuz3377+S18N9ShQ4c46qijoqKiIsaM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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from thebeat import Sequence, SoundStimulus, SoundSequence\n", "\n", "seq = Sequence.generate_isochronous(n_events=10, ioi=500)\n", "stim = SoundStimulus.generate(freq=440, duration_ms=50, onramp_ms=10, offramp_ms=10)\n", "trial = SoundSequence(stim, seq)\n", "\n", "trial.play() # play sound over loudspeakers\n", "trial.plot_waveform() # plot as sound waveform\n", "trial.plot_sequence() # plot as an event plot\n", "trial.write_wav('example_trial.wav') # save file to disk" ] }, { "cell_type": "markdown", "id": "900f1504-6e2a-4b1e-8ec8-36da17e6d66a", "metadata": {}, "source": [ "---" ] }, { "cell_type": "markdown", "id": "aa12a21b-f3f5-4925-a278-e3836828509a", "metadata": {}, "source": [ "## Learn more" ] }, { "cell_type": "raw", "id": "d122f186-94c4-400f-ac73-d55c867d8559", "metadata": { "raw_mimetype": "text/restructuredtext", "tags": [] }, "source": [ "If you want to learn more, you can take a look at the :ref:`Examples` section, or check out the *Core classes* page under :ref:`Package contents`." ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.16" } }, "nbformat": 4, "nbformat_minor": 5 }