From 8c9d374434a770a8443c6476c9156bf3cd04079e Mon Sep 17 00:00:00 2001 From: corentinlger Date: Tue, 30 Apr 2024 14:31:37 +0200 Subject: [PATCH] Add 'change simulation state' section --- notebooks/simulator_tutorial.ipynb | 121 +++++++++++++++++++++++------ 1 file changed, 99 insertions(+), 22 deletions(-) diff --git a/notebooks/simulator_tutorial.ipynb b/notebooks/simulator_tutorial.ipynb index b12b3d7..fc7dac7 100644 --- a/notebooks/simulator_tutorial.ipynb +++ b/notebooks/simulator_tutorial.ipynb @@ -35,6 +35,7 @@ "def normal(theta):\n", " return jnp.array([jnp.cos(theta), jnp.sin(theta)])\n", "\n", + "# Functions to render the current state\n", "def render(state):\n", " box_size = state.simulator_state.box_size[0]\n", " max_agents = state.simulator_state.max_agents[0]\n", @@ -75,6 +76,7 @@ "\n", " plt.show()\n", "\n", + "# Function to render a state hystory\n", "def render_history(state_history, pause=0.001, skip_frames=1):\n", " box_size = state_history[0][3].box_size[0]\n", " max_agents = state_history[0][3].max_agents[0]\n", @@ -85,6 +87,7 @@ " ax.set_ylim(0, box_size)\n", "\n", " for t in range(0, len(state_history), skip_frames):\n", + " # Because weird saving at the moment, we don't save the state but all its sub-elements\n", " entity_state, agent_state, object_state, simulator_state = state_history[t]\n", "\n", " exists_agents, exists_objects = entity_state.exists[:max_agents], entity_state.exists[max_agents:] \n", @@ -117,7 +120,7 @@ " ax.scatter(x_agents, y_agents, c=agents_colors_rgba, s=agents_diameter*size_scale, label='agents')\n", " ax.scatter(x_objects, y_objects, c=object_colors_rgba, s=object_diameter*size_scale, label='objects')\n", "\n", - " ax.set_title(f'Timestep: {t+1}')\n", + " ax.set_title(f'Timestep: {t}')\n", " ax.set_xlabel('X Position')\n", " ax.set_ylabel('Y Position')\n", " ax.legend()\n", @@ -337,8 +340,9 @@ "outputs": [], "source": [ "from vivarium.simulator.states import AgentState\n", + "from vivarium.simulator.behaviors import behavior_name_map\n", "\n", - "behavior = 1 # 1 of the 4 pre-implement behavior of agents\n", + "behavior = behavior_name_map['AGGRESSION'] # 1 of the 4 pre-implement behavior of agents\n", "wheel_diameter = 2. # diameter of vehicle wheels\n", "speed_mul = 1. # speed multiplier for the agents\n", "max_speed = 10. # max speed of agents\n", @@ -491,7 +495,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### Run a simulation and save it" + "### Run a simulation and save it\n", + "\n", + "At the moment the simulation will run with the default behavior assigned to the agents. They are in agressive mode, which means they will rush toward the closest entity in their field of view. The simulation also includes physics elements such as collisions between entities etc. All the functions used to compute the next state of the simulation are currently located in the [physcis engine](../vivarium/simulator/physics_engine.py) file. " ] }, { @@ -500,7 +506,7 @@ "metadata": {}, "outputs": [], "source": [ - "num_steps = 1000" + "num_steps = 2000" ] }, { @@ -551,6 +557,13 @@ "simulator.stop_recording()" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can also speed up the simulation by using jax loops (lax.fori_loop / lax.scan) instead of classical loops." + ] + }, { "cell_type": "code", "execution_count": 13, @@ -575,7 +588,7 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAikAAAIjCAYAAADGCIt4AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAA9hAAAPYQGoP6dpAABUmUlEQVR4nO3dd3hUZd7G8XsyqQSSQIAUCSQILL0IgoCKYFZARBFWhGUVkOJiACmi8rKgqIi4tlUQ1FWwgFhp7gpiKEoxBJCOgBqqSahJqGlz3j/OMhIJkGQmmZPk+7muucyc8sxvzmDmzjnP8xybYRiGAAAALMbL0wUAAADkh5ACAAAsiZACAAAsiZACAAAsiZACAAAsiZACAAAsiZACAAAsiZACAAAsiZACAAAsiZAClCEDBgxQdHS0p8sAALcgpAAWZ7PZCvRYtWqVp0u9pjfffFNz5szxdBmXSU5O1pNPPqmOHTuqUqVKVz2e2dnZmjx5smrXri0/Pz/Vrl1bzz33nHJyci7bdt++ferTp49q1KihChUqqH79+nrmmWd07ty5PNt98803GjRokBo3biy73U7QBP7Hxr17AGv76KOP8jz/4IMPtHz5cn344Yd5lv/5z39WlSpV5HA45OfnV5IlFljjxo1VtWpVywWqVatWqWPHjqpbt66qVq2q9evXa+XKlbrtttsu2/b+++/XZ599poceekitWrXSDz/8oPfff19DhgzR22+/7dzu0KFDatq0qYKDg/X3v/9dVapU0fr16zVnzhzdfffdWrRokXPbAQMG6JNPPtENN9yggwcPym63a//+/SXwzgGLMwCUKnFxcUZp/V+3UaNGRocOHTxdxmUyMjKMEydOGIZhGJ999pkhyVi5cuVl223YsMGQZEycODHP8rFjxxo2m83YunWrc9mUKVMMScaOHTvybPvggw8akoyTJ086lx05csTIysoyDMMwunXrZtSqVctN7wwo3bjcA5Qhf+yTsn//ftlsNr300kuaMWOGateurQoVKuiOO+7QoUOHZBiGnn32WdWoUUMBAQG65557dPLkycva/frrr3XLLbcoMDBQlSpVUrdu3bRz584826SkpGjgwIGqUaOG/Pz8FBERoXvuucd5RiA6Olo7d+7U6tWrnZeoLj1TkZaWplGjRikqKkp+fn6qU6eOpk2bJofDke/7efXVV1WrVi0FBASoQ4cO2rFjR556srOz9dNPPyk5Ofmax61SpUqqUqXKNbf7/vvvJUl9+vTJs7xPnz4yDEOffPKJc1lGRoYkKSwsLM+2ERER8vLykq+vr3NZZGSkfHx8rvn6QHnj7ekCABS/uXPnKisrSyNGjNDJkyf14osvqnfv3urUqZNWrVqlJ554Qj///LPeeOMNPfbYY3rvvfec+3744Yfq37+/OnfurGnTpuncuXOaOXOmbr75Zv3444/OUNSrVy/t3LlTI0aMUHR0tI4eParly5fr4MGDio6O1muvvaYRI0aoYsWKmjBhgqTfv8DPnTunDh066MiRI3r44YdVs2ZNrVu3TuPHj1dycrJee+21PO/ngw8+0OnTpxUXF6cLFy7oX//6lzp16qTt27c72zxy5IgaNGig/v37u60fTGZmpiQpICAgz/IKFSpIkjZt2uRcdtttt2natGkaNGiQJk+erNDQUK1bt04zZ87UyJEjFRgY6JaagDLN06dyABTO1S739O/fP8+lgqSkJEOSUa1aNSMtLc25fPz48YYko1mzZkZ2drZzed++fQ1fX1/jwoULhmEYxunTp42QkBBjyJAheV4nJSXFCA4Odi4/deqUIcn45z//edXar3S559lnnzUCAwONvXv35ln+5JNPGna73Th48GCe9xMQEGAcPnzYuV1CQoIhyRg9evRl771///5XremPrna554svvjAkGR9++GGe5bNmzTIkGY0bN77sfQUEBBiSnI8JEyZc9fW53AP8jss9QDlw3333KTg42Pm8TZs2kqS//e1v8vb2zrM8KytLR44ckSQtX75caWlp6tu3r44fP+582O12tWnTRitXrpRknlnw9fXVqlWrdOrUqULX99lnn+mWW25R5cqV87xObGyscnNz9d133+XZvkePHrruuuucz1u3bq02bdrov//9r3NZdHS0DMNw62iiO++8U7Vq1dJjjz2mL7/8UgcOHNCnn36qCRMmyNvbW+fPn8+zfXR0tG699Va9/fbb+uKLL/TQQw/p+eef1/Tp091WE1CWcbkHKAdq1qyZ5/nFwBIVFZXv8otBY9++fZKkTp065dtuUFCQJMnPz0/Tpk3T2LFjFRYWpptuukl33XWXHnzwQYWHh1+zvn379mnbtm2qVq1avuuPHj2a53ndunUv26ZevXr69NNPr/larvD399d//vMf9e7d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xLvanyQoSDp2TPL1dU9dKB8++kh64IHC7+ftLd1wg7RunXlGBbiWcjvj7OLFi9WqVSvdd999ql69ulq0aKF3LpkGMSkpSSkpKYqNjXUuCw4OVps2bbR+/fortpuZmamMjIw8D8DdKlSQBg50rW+A3S4NGUJAQeH97W/SpEmF28fbW4qKkr76ioACa7B0SPn11181c+ZM1a1bV8uWLdOwYcM0cuRIvf/++5KklJQUSVJYWFie/cLCwpzr8jN16lQFBwc7H1FRUcX3JlCuPfKIa30DcnOlv//dffWgfHn6aenZZ82frxY6Lq5r3lz64QepWrXirgwoGEuHFIfDoRtuuEHPP/+8WrRooaFDh2rIkCGaNWuWS+2OHz9e6enpzsch5h5HMWnUSOratWh/ldrt5my1deq4vy6UDzabOdvxvHnSqFHmpcOLvC757d+xo7RwobR+PTe2hLW4OEiteEVERKhhw4Z5ljVo0EBffPGFJCk8PFySlJqaqoiICOc2qampat68+RXb9fPzk5+fn/sLBvIxb57Upo20b1/B76dit0v160tz5hRraSjjkpKkWrWkvn3Nx7PPSt98Yw5pz8oy50Fp00aqW9fTlQL5s3RIad++vfbs2ZNn2d69e1WrVi1JUkxMjMLDwxUfH+8MJRkZGUpISNCwYcNKulwgXyEh0uTJ0rBh5gRv0pXDipeXec+V1q2lJUvy/uULFNbWreYlx4sCAqR77vFcPUBhWfpyz+jRo/XDDz/o+eef188//6x58+bp7bffVlxcnCTJZrNp1KhReu6557R48WJt375dDz74oCIjI9WjRw/PFg/8z4kT0rJl5l+1M2dKDRqYy729JR8f83Gxc22jRtI770grV0qhoZ6rGaXf2bNSbKx5yQcorSw9BFmSvvrqK40fP1779u1TTEyMxowZoyFDhjjXG4ahp556Sm+//bbS0tJ08803680331S9evUK/BoMQUZxMQwzmAwYYI72ubhs3Trp66/NOx1LZiC56y7zDApfKgBKk+L8DrV8SCkJhBQUl19/NUdKuHNiNwCwkuL8DrV0nxSgtIuOzjuKAnCFYUirV5v9lU6cMPsvValizjDbpQv/1lD2EFKAYsSXBtzhwgXp3Xel11+X9u41+zBdPAfu5SX961/mJGwjRkgPP0yHa5QdXO4Rl3sAWNfx41K3blJiovn8ar+xvbzM4cTffOPavXuAwii30+IDQHmWkSF16CBt3myGk2v9SelwSL/8IrVvL11l0m2g1CCkAIBFPfSQtGdP4W6tkJNjBpSePQs+eSBgVYQUALCgX3+VvvzSvH9TYeXkmFPcb9jg/rqAkkRIAQALeust1zpee3tLM2a4rx7AEwgpAGAxubnS228X7SzKRTk50vz5Ulqa28oCSlyRhiDHx8crPj5eR48elcPhyLPuvffec0thAFBenTjhnnCRnS0dPGjePwoojQodUiZPnqxnnnlGrVq1UkREhGzM4Q0AbnX6tPvayshwX1tASSt0SJk1a5bmzJmjBx54oDjqAYByr2JFa7YFlLRC90nJyspSu3btiqMWAIDMG066I1zY7eZMtEBpVeiQMnjwYM2bN684agEAyByZ89BD5n9daaNnTzPwAKVVof8XuHDhgt5++219++23atq0qXx8fPKsf+WVV9xWHACUV8OGmffqKaqcHCkuzn31AJ5Q6JCybds2NW/eXJK0Y8eOPOvoRAsA7lG/vnl34/j4wg9F9vaWGjSQbr21eGoDSkqhQ8rKlSuLow4AwB989JF0443SkSMFnxrfbpeCg6VFiyT+bkRp59JkbocPH9bhw4fdVQsA4BLVqknffSddf33BZp+126XwcHOfmJjirw8oboUOKQ6HQ88884yCg4NVq1Yt1apVSyEhIXr22Wcvm9gNAOCamjWlhARp4kSpenVzmd3++/qLP/v5SWPHSps2SQ0blnydQHEo9OWeCRMm6N1339ULL7yg9u3bS5LWrFmjp59+WhcuXNCUKVPcXiQAlGfBwdLTT0sTJkiLF5uP48clh8McvXP77eYU+NOmebpSwL1shlG4m3lHRkZq1qxZuvvuu/MsX7RokR555BEdOXLErQWWhIyMDAUHBys9PV1BQUGeLgcACu1f/5Luvdc88wKUpOL8Di305Z6TJ0+qfv36ly2vX7++Tp486ZaiAACFM3iwtGGDp6sA3KvQIaVZs2aaPn36ZcunT5+uZs2auaUoAEDhBAZKdet6ugrAvQrdJ+XFF19Ut27d9O2336pt27aSpPXr1+vQoUP673//6/YCAQAF06CBpysA3KvQZ1I6dOigvXv36t5771VaWprS0tLUs2dP7dmzR7fccktx1AgAKABfX09XALhXoTvOlkV0nAUAoGiK8zu0QJd7tm3bpsaNG8vLy0vbtm276rZNmzZ1S2EAAKB8K1BIad68uVJSUlS9enU1b95cNptN+Z2Asdlsyi3sTSYAAADyUaCQkpSUpGrVqjl/BgAAKG4FCim1atVy/nzgwAG1a9dO3t55d83JydG6devybAsAAFBUhR7d07Fjx3wnbUtPT1fHjh3dUhQAAEChQ4phGLLlc//vEydOKDAw0C1FAQAAFHgyt549e0oyO8cOGDBAfn5+znW5ubnatm2b2rVr5/4KAQBAuVTgkBIcHCzJPJNSqVIlBQQEONf5+vrqpptu0pAhQ9xfIQAAKJcKHFJmz54tSYqOjtZjjz3GpR0AAFCsmHFWzDgLAEBReXzG2RtuuEHx8fGqXLmyWrRokW/H2Ys2b97stuIAAED5VaCQcs899zg7yvbo0aM46wEAAJDE5R5JXO4BAKCoivM7tNDzpBw6dEiHDx92Pt+wYYNGjRqlt99+262FAQCA8q3QIeWvf/2rVq5cKUlKSUlRbGysNmzYoAkTJuiZZ55xe4EAAKB8KnRI2bFjh1q3bi1J+vTTT9WkSROtW7dOc+fO1Zw5c9xdHwAAKKcKHVKys7OdnWi//fZb3X333ZKk+vXrKzk52b3VAQCAcqvQIaVRo0aaNWuWvv/+ey1fvlxdunSRJP32228KDQ11e4EAAKB8KnRImTZtmt566y3ddttt6tu3r5o1ayZJWrx4sfMyEAAAgKuKNAQ5NzdXGRkZqly5snPZ/v37VaFCBVWvXt2tBZYEhiADAFA0Hp9x9o/sdrtycnK0Zs0aSdKf/vQnRUdHu7MuAABQzhX6cs/Zs2f10EMPKSIiQrfeeqtuvfVWRUZGatCgQTp37lxx1AgAAMqhQoeUMWPGaPXq1VqyZInS0tKUlpamRYsWafXq1Ro7dmxx1AgAAMqhQvdJqVq1qj7//HPddttteZavXLlSvXv31rFjx9xZX4mgTwoAAEVjqWnxz507p7CwsMuWV69encs9AADAbQodUtq2baunnnpKFy5ccC47f/68Jk+erLZt27q1OAAAUH4VenTPa6+9ps6dO6tGjRrOOVK2bt0qf39/LVu2zO0FAgCA8qlI86ScO3dO8+bN0+7duyVJDRo0UL9+/RQQEOD2AksCfVIAACgay8yT8sMPP2jJkiXKyspSp06dNHjwYLcWAwAAcFGBQ8rnn3+u+++/XwEBAfLx8dErr7yiadOm6bHHHivO+gAAQDlV4I6zU6dO1ZAhQ5Senq5Tp07pueee0/PPP1+ctQEAgHKswH1SKlasqC1btqhOnTqSpKysLAUGBurIkSOl8n49l6JPCgAARWOJeVLOnTuX58V9fX3l7++vM2fOuLUgAAAAqZAdZ//973+rYsWKzuc5OTmaM2eOqlat6lw2cuRI91UHAADKrQJf7omOjpbNZrt6Yzabfv31V7cUVpK43AMAQNFYYgjy/v373frCAAAAV1PoafEBAABKAiEFAABYEiEFAABYUoFDym+//VacdQAAAORR4JDSqFEjzZs3rzhrAQAAcCpwSJkyZYoefvhh3XfffTp58mRx1gQAAFDwkPLII49o27ZtOnHihBo2bKglS5YUZ10AAKCcK9SMszExMVqxYoWmT5+unj17qkGDBvL2ztvE5s2b3VogAAAonwoVUiTpwIED+vLLL1W5cmXdc889l4UUAAAAdyhUwnjnnXc0duxYxcbGaufOnapWrVpx1QUAAMq5AoeULl26aMOGDZo+fboefPDB4qwJAACg4CElNzdX27ZtU40aNYqzHgAAAEmFCCnLly8vzjoAAADyYFp8AABgSYQUAABgSYQUAABgSYQUAABgSYQUAABgSYQUAABgSYQUAABgSaUqpLzwwguy2WwaNWqUc9mFCxcUFxen0NBQVaxYUb169VJqaqrnigQAAG5RakJKYmKi3nrrLTVt2jTP8tGjR2vJkiX67LPPtHr1av3222/q2bOnh6oEAADuUipCypkzZ9SvXz+98847qly5snN5enq63n33Xb3yyivq1KmTWrZsqdmzZ2vdunX64YcfPFgxAABwVakIKXFxcerWrZtiY2PzLN+0aZOys7PzLK9fv75q1qyp9evXX7G9zMxMZWRk5HkAAABrKfC9ezxl/vz52rx5sxITEy9bl5KSIl9fX4WEhORZHhYWppSUlCu2OXXqVE2ePNndpQIAADey9JmUQ4cO6dFHH9XcuXPl7+/vtnbHjx+v9PR05+PQoUNuaxsAALiHpUPKpk2bdPToUd1www3y9vaWt7e3Vq9erddff13e3t4KCwtTVlaW0tLS8uyXmpqq8PDwK7br5+enoKCgPA8AAGAtlr7cc/vtt2v79u15lg0cOFD169fXE088oaioKPn4+Cg+Pl69evWSJO3Zs0cHDx5U27ZtPVEy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XVcOJ3+UmytlZUndu0u7dxdvfSgaQgoAoNRbsED67ruCB5SLHA6zz8rEicVTF1xDSAEAlHpvvGH2QSmK3Fwz5Pz2m3trgusIKQCAUm3XLun77wt/FuVSNpv0zjvuqwnuQUgBAJRq33zj+lT4ubnSf//rnnrgPoQUAECpdupU0S/1XOr4cdfbgHsRUgAApZq7bijIjQmth48EAFCqhYaaQ5BdVb26623AvQgpAIBSrVs319vw8pJ69nS9HbgXIQUAUKrFxEhdurjWL8XbWxowwG0lwU0IKQCAUm/EiKIPQfb2lvr2NS8bwVoIKQCAUq9LF+kvfyl851e7XapSRXr22eKpC64hpAAASj2bTfrwQ+m228yfC8LbWwoONudZiYoq1vJQRIQUAECZ4O8vLV0qPfKIGUCudFbF29v8b4sWUmKi1KxZydWIwiGkAADKDB8fafp06fBh6bnnpMjIvOv9/KQHHjDDyYYNUu3anqkTBWMzDMPwdBGelpGRoeDgYKWnpysoKMjT5QAA3MThkNLSpPR0qUIFs/+Jj4+nqypbivM71NutrQEAYCFeXmYwqVLF05WgKLjcAwAALImQAgAALImQAgAALImQAgAALImQAgAALImQAgAALImQAgAALImQAgAALImQAgAALImQAgAALImQAgAALImQAgAALImQAgAALImQAgAALImQAgAALImQAgAALImQAgAALImQAgAALImQAgAALImQAgAALImQAgAALImQAgAALImQAgAALImQAgAALImQAgAALImQAgAALImQAgAALImQAgAALImQAgAALImQAgAALImQAgAALImQAgAALImQAgAALImQAgAALImQAgAALImQAgAALImQAgAALImQAgAALImQAgAALImQAgAALImQAgAALImQAgAALImQAgAALImQAgAALImQAgAALImQAgAALImQAgAALImQAgAALImQAgAALImQAgAALImQAgAALImQAgAALImQAgAALImQAgAALImQAgAALImQAgAALImQAgAALImQAgAALImQAgAALImQAgAALKnMhJQZM2YoOjpa/v7+atOmjTZs2ODpkgAAgAvKREj55JNPNGbMGD311FPavHmzmjVrps6dO+vo0aOeLg0AABRRmQgpr7zyioYMGaKBAweqYcOGmjVrlipUqKD33nvP06UBAIAi8vZ0Aa7KysrSpk2bNH78eOcyLy8vxcbGav369fnuk5mZqczMTOfz9PR0SVJGRkbxFgsAQBlz8bvTMAy3t13qQ8rx48eVm5ursLCwPMvDwsL0008/5bvP1KlTNXny5MuWR0VFFUuNAACUdSdOnFBwcLBb2yz1IaUoxo8frzFjxjifp6WlqVatWjp48KDbDzDyl5GRoaioKB06dEhBQUGeLqdc4JiXPI55yeOYl7z09HTVrFlTVapUcXvbpT6kVK1aVXa7XampqXmWp6amKjw8PN99/Pz85Ofnd9ny4OBg/lGXsKCgII55CeOYlzyOecnjmJc8Ly/3d3Mt9R1nfX191bJlS8XHxzuXORwOxcfHq23bth6sDAAAuKLUn0mRpDFjxqh///5q1aqVWrdurddee01nz57VwIEDPV0aAAAoojIRUu6//34dO3ZMkyZNUkpKipo3b66lS5de1pn2Svz8/PTUU0/lewkIxYNjXvI45iWPY17yOOYlrziPuc0ojjFDAAAALir1fVIAAEDZREgBAACWREgBAACWREgBAACWVO5DyowZMxQdHS1/f3+1adNGGzZs8HRJZcbUqVN14403qlKlSqpevbp69OihPXv25NnmwoULiouLU2hoqCpWrKhevXpdNjEfiu6FF16QzWbTqFGjnMs45u535MgR/e1vf1NoaKgCAgLUpEkTbdy40bneMAxNmjRJERERCggIUGxsrPbt2+fBiku33NxcTZw4UTExMQoICND111+vZ599Ns+9Yzjmrvnuu+/UvXt3RUZGymazaeHChXnWF+T4njx5Uv369VNQUJBCQkI0aNAgnTlzpnCFGOXY/PnzDV9fX+O9994zdu7caQwZMsQICQkxUlNTPV1amdC5c2dj9uzZxo4dO4wtW7YYd955p1GzZk3jzJkzzm3+/ve/G1FRUUZ8fLyxceNG46abbjLatWvnwarLjg0bNhjR0dFG06ZNjUcffdS5nGPuXidPnjRq1aplDBgwwEhISDB+/fVXY9myZcbPP//s3OaFF14wgoODjYULFxpbt2417r77biMmJsY4f/68BysvvaZMmWKEhoYaX331lZGUlGR89tlnRsWKFY1//etfzm045q7573//a0yYMMH48ssvDUnGggUL8qwvyPHt0qWL0axZM+OHH34wvv/+e6NOnTpG3759C1VHuQ4prVu3NuLi4pzPc3NzjcjISGPq1KkerKrsOnr0qCHJWL16tWEYhpGWlmb4+PgYn332mXOb3bt3G5KM9evXe6rMMuH06dNG3bp1jeXLlxsdOnRwhhSOufs98cQTxs0333zF9Q6HwwgPDzf++c9/OpelpaUZfn5+xscff1wSJZY53bp1Mx566KE8y3r27Gn069fPMAyOubv9MaQU5Pju2rXLkGQkJiY6t/n6668Nm81mHDlypMCvXW4v92RlZWnTpk2KjY11LvPy8lJsbKzWr1/vwcrKrvT0dEly3oRq06ZNys7OzvMZ1K9fXzVr1uQzcFFcXJy6deuW59hKHPPisHjxYrVq1Ur33XefqlevrhYtWuidd95xrk9KSlJKSkqeYx4cHKw2bdpwzIuoXbt2io+P1969eyVJW7du1Zo1a9S1a1dJHPPiVpDju379eoWEhKhVq1bObWJjY+Xl5aWEhIQCv1aZmHG2KI4fP67c3NzLZqUNCwvTTz/95KGqyi6Hw6FRo0apffv2aty4sSQpJSVFvr6+CgkJybNtWFiYUlJSPFBl2TB//nxt3rxZiYmJl63jmLvfr7/+qpkzZ2rMmDH6v//7PyUmJmrkyJHy9fVV//79ncc1v981HPOiefLJJ5WRkaH69evLbrcrNzdXU6ZMUb9+/SSJY17MCnJ8U1JSVL169Tzrvb29VaVKlUJ9BuU2pKBkxcXFaceOHVqzZo2nSynTDh06pEcffVTLly+Xv7+/p8spFxwOh1q1aqXnn39ektSiRQvt2LFDs2bNUv/+/T1cXdn06aefau7cuZo3b54aNWqkLVu2aNSoUYqMjOSYlzHl9nJP1apVZbfbLxvVkJqaqvDwcA9VVTYNHz5cX331lVauXKkaNWo4l4eHhysrK0tpaWl5tuczKLpNmzbp6NGjuuGGG+Tt7S1vb2+tXr1ar7/+ury9vRUWFsYxd7OIiAg1bNgwz7IGDRro4MGDkuQ8rvyucZ9x48bpySefVJ8+fdSkSRM98MADGj16tKZOnSqJY17cCnJ8w8PDdfTo0Tzrc3JydPLkyUJ9BuU2pPj6+qply5aKj493LnM4HIqPj1fbtm09WFnZYRiGhg8frgULFmjFihWKiYnJs75ly5by8fHJ8xns2bNHBw8e5DMoottvv13bt2/Xli1bnI9WrVqpX79+zp855u7Vvn37y4bW7927V7Vq1ZIkxcTEKDw8PM8xz8jIUEJCAse8iM6dOycvr7xfX3a7XQ6HQxLHvLgV5Pi2bdtWaWlp2rRpk3ObFStWyOFwqE2bNgV/MZe7/ZZi8+fPN/z8/Iw5c+YYu3btMoYOHWqEhIQYKSkpni6tTBg2bJgRHBxsrFq1ykhOTnY+zp0759zm73//u1GzZk1jxYoVxsaNG422bdsabdu29WDVZc+lo3sMg2Pubhs2bDC8vb2NKVOmGPv27TPmzp1rVKhQwfjoo4+c27zwwgtGSEiIsWjRImPbtm3GPffcw3BYF/Tv39+47rrrnEOQv/zyS6Nq1arG448/7tyGY+6a06dPGz/++KPx448/GpKMV155xfjxxx+NAwcOGIZRsOPbpUsXo0WLFkZCQoKxZs0ao27dugxBLqw33njDqFmzpuHr62u0bt3a+OGHHzxdUpkhKd/H7NmznducP3/eeOSRR4zKlSsbFSpUMO69914jOTnZc0WXQX8MKRxz91uyZInRuHFjw8/Pz6hfv77x9ttv51nvcDiMiRMnGmFhYYafn59x++23G3v27PFQtaVfRkaG8eijjxo1a9Y0/P39jdq1axsTJkwwMjMzndtwzF2zcuXKfH9/9+/f3zCMgh3fEydOGH379jUqVqxoBAUFGQMHDjROnz5dqDpshnHJFH0AAAAWUW77pAAAAGsjpAAAAEsipAAAAEsipAAAAEsipAAAAEsipAAAAEsipAAAAEsipAAAAEsipAAodebMmaOQkJBrbmez2bRw4cJirwdA8SCkALii3NxctWvXTj179syzPD09XVFRUZowYcIV973ttttks9lks9nk7++vhg0b6s0333RLXffff7/27t3rfP7000+refPml22XnJysrl27uuU1AZQ8QgqAK7Lb7ZozZ46WLl2quXPnOpePGDFCVapU0VNPPXXV/YcMGaLk5GTt2rVLvXv3VlxcnD7++GOX6woICFD16tWvuV14eLj8/Pxcfj0AnkFIAXBV9erV0wsvvKARI0YoOTlZixYt0vz58/XBBx/I19f3qvtWqFBB4eHhql27tp5++mnVrVtXixcvliQdPHhQ99xzjypWrKigoCD17t1bqampzn23bt2qjh07qlKlSgoKClLLli21ceNGSXkv98yZM0eTJ0/W1q1bnWdu5syZI+nyyz3bt29Xp06dFBAQoNDQUA0dOlRnzpxxrh8wYIB69Oihl156SREREQoNDVVcXJyys7PdcCQBFJa3pwsAYH0jRozQggUL9MADD2j79u2aNGmSmjVrVuh2AgIClJWVJYfD4Qwoq1evVk5OjuLi4nT//fdr1apVkqR+/fqpRYsWmjlzpux2u7Zs2SIfH5/L2rz//vu1Y8cOLV26VN9++60kKTg4+LLtzp49q86dO6tt27ZKTEzU0aNHNXjwYA0fPtwZaiRp5cqVioiI0MqVK/Xzzz/r/vvvV/PmzTVkyJBCv18AriGkALgmm82mmTNnqkGDBmrSpImefPLJQu2fm5urjz/+WNu2bdPQoUMVHx+v7du3KykpSVFRUZKkDz74QI0aNVJiYqJuvPFGHTx4UOPGjVP9+vUlSXXr1s237YCAAFWsWFHe3t4KDw+/Yg3z5s3ThQsX9MEHHygwMFCSNH36dHXv3l3Tpk1TWFiYJKly5cqaPn267Ha76tevr27duik+Pp6QAngAl3sAFMh7772nChUqKCkpSYcPHy7QPm+++aYqVqyogIAADRkyRKNHj9awYcO0e/duRUVFOQOKJDVs2FAhISHavXu3JGnMmDEaPHiwYmNj9cILL+iXX35xqf7du3erWbNmzoAiSe3bt5fD4dCePXucyxo1aiS73e58HhERoaNHj7r02gCKhpAC4JrWrVunV199VV999ZVat26tQYMGyTCMa+7Xr18/bdmyRUlJSTp79qxeeeUVeXkV7NfO008/rZ07d6pbt25asWKFGjZsqAULFrj6Vq7pj5eUbDabHA5Hsb8ugMsRUgBc1blz5zRgwAANGzZMHTt21LvvvqsNGzZo1qxZ19w3ODhYderU0XXXXZcnnDRo0ECHDh3SoUOHnMt27dqltLQ0NWzY0LmsXr16Gj16tL755hv17NlTs2fPzvd1fH19lZube9VaGjRooK1bt+rs2bPOZWvXrpWXl5f+9Kc/XfO9ACh5hBQAVzV+/HgZhqEXXnhBkhQdHa2XXnpJjz/+uPbv31+kNmNjY9WkSRP169dPmzdv1oYNG/Tggw+qQ4cOatWqlc6fP6/hw4dr1apVOnDggNauXavExEQ1aNAg3/aio6OVlJSkLVu26Pjx48rMzLxsm379+snf31/9+/fXjh07tHLlSo0YMUIPPPCAsz8KAGshpAC4otWrV2vGjBmaPXu2KlSo4Fz+8MMPq127dgW+7PNHNptNixYtUuXKlXXrrbcqNjZWtWvX1ieffCLJnJ/lxIkTevDBB1WvXj317t1bXbt21eTJk/Ntr1evXurSpYs6duyoatWq5TsXS4UKFbRs2TKdPHlSN954o/7yl7/o9ttv1/Tp0wtdP4CSYTOK8hsGAACgmHEmBQAAWBIhBQAAWBIhBQAAWBIhBQAAWBIhBQAAWBIhBQAAWBIhBQAAWBIhBQAAWBIhBQAAWBIhBQAAWBIhBQAAWNL/A88g1lm4hVZ7AAAAAElFTkSuQmCC", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAikAAAIjCAYAAADGCIt4AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAA9hAAAPYQGoP6dpAABW1UlEQVR4nO3deZyNdf/H8feZObMxZjCYGVmzZF9KNCipKVRK3FluhRa6NchSye3XohJpLyEqWqiobC2ksVTS2LcIFVkyCDNjGcbMfH9/XLdTJ4OZs8xcM/N6Ph7nwbmW7/mcM+W857q+i8MYYwQAAGAzAQVdAAAAQE4IKQAAwJYIKQAAwJYIKQAAwJYIKQAAwJYIKQAAwJYIKQAAwJYIKQAAwJYIKQAAwJYIKUAR0qdPH1WrVq2gywAAnyCkADbncDhy9Vi6dGlBl3pREyZM0LRp0wq6jHN8++23uvXWW1W5cmWFhoYqJiZG7du31/Lly8859syZMxo1apQuvfRShYSE6NJLL9UzzzyjzMzMc47dsWOHunfvrkqVKqlEiRKqU6eOnnrqKZ08efKcY3/44Qe1bt1aJUqUUExMjAYNGqTjx4/75f0ChYWDtXsAe/vggw/cnr/33ntatGiR3n//fbftN9xwg8qWLavs7GyFhITkZ4m51qBBA5UrV852geqtt97S559/riuvvFIxMTE6evSoPvjgA23atElffPGF2rdv7zq2W7dumjVrlu655x41a9ZMP/74o95991317dtXkydPdh23Z88eNWrUSJGRkfrPf/6jsmXLasWKFZo2bZpuvfVWzZ0713Xs+vXrFRcXp7p166pfv37au3evXnjhBbVt21ZfffVVvn4WgK0YAIVKQkKCKaz/69avX9+0adOmoMvIlRMnTpjo6GjTrl0717aVK1caSeaxxx5zO3bYsGHG4XCYDRs2uLaNHj3aSDKbN292O7ZXr15Gkjly5IhrW4cOHUxsbKxJTU11bZsyZYqRZBYuXOjrtwYUGtzuAYqQf/ZJ2bVrlxwOh1544QW98cYbuvTSS1WiRAndeOON2rNnj4wxevrpp1WpUiWFhYXptttu05EjR85p96uvvtLVV1+tkiVLqlSpUrr55pv1008/uR2TnJysu+++W5UqVVJISIhiY2N12223adeuXZKkatWq6aefftKyZctct6iuvfZa1/kpKSkaPHiwKleurJCQENWsWVPPPfecsrOzc3w/L7/8sqpWraqwsDC1adNGmzdvdqvnzJkz+vnnn7V//36PPssSJUqofPnySklJcW377rvvJEndu3d3O7Z79+4yxujjjz92bUtLS5MkRUdHux0bGxurgIAABQcHu45btGiR7rzzTkVERLiO69Wrl8LDwzVz5kyP6geKAmdBFwDA/6ZPn66MjAwNHDhQR44c0bhx49S1a1ddd911Wrp0qYYPH65ffvlFr7/+uh566CG98847rnPff/999e7dW+3atdNzzz2nkydPauLEiWrdurXWrVvnCkVdunTRTz/9pIEDB6patWo6ePCgFi1apN27d6tatWp65ZVXNHDgQIWHh2vkyJGS/voCP3nypNq0aaN9+/bp/vvvV5UqVfTDDz9oxIgR2r9/v1555RW39/Pee+/p2LFjSkhI0KlTp/Tqq6/quuuu06ZNm1xt7tu3T3Xr1lXv3r1z3Q8mLS1NGRkZ+vPPP/Xee+9p8+bN+u9//+vaf/r0aUlSWFiY23klSpSQJK1Zs8a17dprr9Vzzz2ne++9V6NGjVJUVJR++OEHTZw4UYMGDVLJkiUlSZs2bVJmZqaaNWvm1mZwcLCaNGmidevW5ap2oEgq6Es5APLmQrd7evfubapWrep6vnPnTiPJlC9f3qSkpLi2jxgxwkgyjRs3NmfOnHFt79GjhwkODjanTp0yxhhz7NgxU7p0adO3b1+310lOTjaRkZGu7UePHjWSzPPPP3/B2s93u+fpp582JUuWNNu3b3fb/uijj5rAwECze/dut/cTFhZm9u7d6zouKSnJSDJDhgw557337t37gjX9Xbt27YwkI8kEBweb+++/36Snp7v2f/rpp0aSef/9993OmzRpkpFkGjRocM77CgsLc7UpyYwcOdLtmFmzZhlJ5ttvvz2nnjvuuMPExMTkun6gqOF2D1AM3HHHHYqMjHQ9b9GihSTpzjvvlNPpdNuekZGhffv2SZIWLVqklJQU9ejRQ3/++afrERgYqBYtWmjJkiWSrCsLwcHBWrp0qY4ePZrn+mbNmqWrr75aZcqUcXud+Ph4ZWVl6dtvv3U7vlOnTrrkkktcz5s3b64WLVroyy+/dG2rVq2ajDF5Gk00duxYff3113r77bd11VVXKSMjw23Uzk033aSqVavqoYce0meffabff/9dM2fO1MiRI+V0OpWenu7WXrVq1XTNNddo8uTJ+vTTT3XPPffo2Wef1fjx413HnD0np87OoaGh57QJFCfc7gGKgSpVqrg9PxtYKleunOP2s0Fjx44dkqTrrrsux3bP9qEICQnRc889p2HDhik6OlpXXXWVbrnlFvXq1UsxMTEXrW/Hjh3auHGjypcvn+P+gwcPuj2vVavWOcfUrl3b6/4bTZo0cf39zjvv1OWXX64+ffrok08+kWSFhi+++EJdu3ZVly5dJFnvfdy4cRo9erTCw8Nd53/00Ufq16+ftm/frkqVKkmSOnfurOzsbA0fPlw9evRQVFSU69bR2VtJf3fq1Klzbi0BxQkhBSgGAgMD87Td/G9mgrOdVt9///0cw8bfr8IMHjxYHTt21Jw5c7Rw4UI99thjGjNmjBYvXqymTZtesL7s7GzdcMMNeuSRR3LcX7t27Que7w/BwcG69dZbNXbsWKWnp7vCQv369bV582Zt2bJFR48eVb169RQWFqYhQ4aoTZs2rvMnTJigpk2bugLKWbfeequmTZumdevWKT4+XrGxsZKUYwff/fv3q2LFin58l4C9EVIAnFeNGjUkSRUqVFB8fHyujh82bJiGDRumHTt2qEmTJnrxxRddc704HI7znnf8+PFcvYb01xWev9u+fbvPZ9tNT0+XMUbHjh1zu6LhcDhUv3591/Mvv/xS2dnZbvUfOHBAZcqUOafNM2fOSJLrNlKDBg3kdDq1evVqde3a1XVcRkaG1q9f77YNKG7okwLgvNq1a6eIiAg9++yzri/Xvzt06JAka3TOqVOn3PbVqFFDpUqVcruNUbJkSbchvWd17dpVK1as0MKFC8/Zl5KScs5srnPmzHH1m5GklStXKikpSR06dHBty8sQ5H/eTjr7up9++qkqV66sChUqnPfc9PR0PfbYY4qNjVWPHj1c22vXrq1169Zp+/btbsd/+OGHCggIUKNGjSRZt9ji4+P1wQcf6NixY67j3n//fR0/flx33HHHResHiiqupAA4r4iICE2cOFF33XWXLr/8cnXv3l3ly5fX7t279cUXX6hVq1YaP368tm/fruuvv15du3ZVvXr15HQ6NXv2bB04cMBtTpErrrhCEydO1DPPPKOaNWuqQoUKuu666/Twww9r3rx5uuWWW9SnTx9dccUVOnHihDZt2qRPPvlEu3btUrly5Vzt1KxZU61bt1b//v11+vRpvfLKK4qKinK7XZSXIcgdOnRQpUqV1KJFC1WoUEG7d+/W1KlT9ccff7jNfSJZgapixYqqV6+e0tLS9M477+i3337TF198oVKlSrmOe/jhh13zywwYMEBRUVH6/PPP9dVXX+m+++5zu40zevRotWzZUm3atHHNOPviiy/qxhtvdJvtFih2Cnh0EYA88mQI8j+HBi9ZssRIMrNmzXLbPnXqVCPJrFq16pzj27VrZyIjI01oaKipUaOG6dOnj1m9erUxxpg///zTJCQkmDp16piSJUuayMhI06JFCzNz5ky3dpKTk83NN99sSpUqZSS5DUc+duyYGTFihKlZs6YJDg425cqVMy1btjQvvPCCycjIOOf9vPjii6Zy5comJCTEXH311W6zvf792NwMQR4/frxp3bq1KVeunHE6naZ8+fKmY8eOOQ4Lfu6550ydOnVMaGioKVOmjLn11lvNunXrcmw3KSnJdOjQwcTExJigoCBTu3ZtM3r0aLdh32d99913pmXLliY0NNSUL1/eJCQkmLS0tIvWDhRlrN0DoNDYtWuXqlevrueff14PPfRQQZcDwM/okwIAAGyJkAIAAGyJkAIAAGypQEPKt99+q44dO6pixYpyOByaM2eO235jjB5//HHFxsYqLCxM8fHx58yPcOTIEfXs2VMREREqXbq07r33Xh0/fjwf3wWA/HJ2qnv6owDFQ4GGlBMnTqhx48Z64403ctw/btw4vfbaa5o0aZKSkpJUsmRJtWvXzm0+hp49e+qnn37SokWL9Pnnn+vbb79Vv3798ustAAAAP7HN6B6Hw6HZs2erU6dOkqyrKBUrVtSwYcNcvzWlpqYqOjpa06ZNU/fu3bV161bVq1dPq1atci1zvmDBAt10003au3cv00kDAFCI2XYyt507dyo5OdltmunIyEi1aNFCK1asUPfu3bVixQqVLl3aFVAkKT4+XgEBAUpKStLtt9+eY9unT592mwUzOztbR44cUVRU1Hmn7QYAAOcy/1s6omLFigoI8O0NGtuGlOTkZElSdHS02/bo6GjXvuTk5HOmq3Y6nSpbtqzrmJyMGTNGo0aN8nHFAAAUX3v27DlnQU1v2Tak+NOIESM0dOhQ1/PU1FRVqVJFe/bscS09DwCAR/r0kebNk7KyPG9j3Trp0kvzdMqSJdKdd0oXGjsSECBlZ0t16kiffSZdconnJZ6VlpamypUruy0L4Su2DSlnl4U/cOCAaynzs8+bNGniOuafC4NlZmbqyJEjOS4rf1ZISIhCQkLO2R4REUFIAQB4LjnZ+4ASGCjNmCGNG5frU+bOlbp0kS7WyzQ72/rzl1+ktm2lpCSpalXPS/07f3SXsO08KdWrV1dMTIwSExNd29LS0pSUlKS4uDhJUlxcnFJSUrRmzRrXMYsXL1Z2drZatGiR7zUDAIq5RYu8CyiSdf4/puS4kLVrpW7drAByNoRcTGamdPiwdMMNF77yUtAKNKQcP35c69ev1/r16yVZnWXXr1+v3bt3y+FwaPDgwXrmmWc0b948bdq0Sb169VLFihVdI4Dq1q2r9u3bq2/fvlq5cqWWL1+uAQMGqHv37ozsAQDkvyNHrHsqvmgnl5580godeR2rm5lpXVF5//28nZefCvR2z+rVq9W2bVvX87P9RM4urf7II4/oxIkT6tevn1JSUtS6dWstWLBAoaGhrnOmT5+uAQMG6Prrr1dAQIC6dOmi1157Ld/fCwAA+W33bunzz/MeUP7utdek//xHsuPgVtvMk1KQ0tLSFBkZqdTU1PP2ScnKytKZM2fyuTL8XWBgoJxOJ8PEAdjX++9LvXp5306tWtL27W6bzpyRTp2SwsP/ChT/93/S2LHe32H69lvp6qs9Ozc336Gesm3HWTs5fvy49u7dK/JcwStRooRiY2MVHBxc0KUAwLluuMHq+Optx9n/dWv4u6Ag6eBB6ZtvpC1brIe3fXTPvtx333keUvyJkHIRWVlZ2rt3r0qUKKHy5cvzW3wBMcYoIyNDhw4d0s6dO1WrVi2fTxoEAF6LibGG2Xz2mdXpwxPZ2dL99+e465JLpNtvtx6SNZR42zYPa/2fgADp6FHv2vAXQspFnDlzRsYYlS9fXmFhYQVdTrEWFhamoKAg/f7778rIyHDrmwQAtpGQIM2c6dm5gYFSfLxUo0auDs9hNg2P2PXiNCEllzy9gmKMtGqVNH++9OefVkCOipLatZOuucaeHZXsjKsnAGzv6qul7t2toJLbMcGSdUkjJER6/vlcn1KxorR5c95e5p+ysqR/TN5uG4QUP8nIsPpPvf66tGGD5HT+FUiMkcaMkWrXlgYNku6+WypRomDrBQD4iMMhTZtm/WaamJi7oTeBgVank3nzpIYNc/1S3bpJCxZ4Xqpklde5s3dt+Au/lvrB0aPSdddJ990nbdpkbcvMtHpmnznz123KHTukgQOluDhp//6CqxcA4GMhIdKXX1pjewMCzj93ivN/1woqV7Z6r15/fZ5epls3yZsBNU6n1LGj9fJ2REjxsePHramGf/zRen6hS3DGWI8tW6RWrazQDQAoIoKCpAkTrMlMHntMKl/efb/DYd37/+or6ddfpWbN8vwSYWFS377WhRhPZGZKAwZ4dm5+IKT42H33WfcH8zIkLDPT+m+4a1f/1VWQHA6H5uRhimcAKFIuucSaFvaPP6Rdu6T1660hOUeOWDOxtW/v1Sy1jz1mdR9w5rEDh8NhfWfFx3v80n5HSPGhXbusflKejFnPyrJWsFy71udlAQDswOm0VvNr3NhKFaVL+6TZyEjp66+l6tXzdkWla1dp4kR7D+AgpPjQm296t2SD0ym98Ybv6lmwYIFat26t0qVLKyoqSrfccot+/fVX1/4ffvhBTZo0UWhoqJo1a6Y5c+bI4XC41lKSpM2bN6tDhw4KDw9XdHS07rrrLv35t/tS1157rQYNGqRHHnlEZcuWVUxMjJ588knX/mrVqkmSbr/9djkcDtfzDRs2qG3btipVqpQiIiJ0xRVXaPXq1b578wBQjFSqZK1o3K2bFVRy+i46uy0yUnrmGWuh5bxefclvhBQfycqyQoo3M/9lZkrTp0vHjvmmphMnTmjo0KFavXq1EhMTFRAQoNtvv13Z2dlKS0tTx44d1bBhQ61du1ZPP/20hg8f7nZ+SkqKrrvuOjVt2lSrV6/WggULdODAAXX9x32pd999VyVLllRSUpLGjRunp556SosWLZIkrVq1SpI0depU7d+/3/W8Z8+eqlSpklatWqU1a9bo0UcfVVBQkG/eOAAUQ2XKWN8he/dKo0ZJVar8FUJCQ6WmTa1BR/v3SyNH+mYdRL8zMKmpqUaSSU1NPWdfenq62bJli0lPT79gG8nJZ7vBev/YtMk/7/PQoUNGktm0aZOZOHGiiYqKcntfU6ZMMZLMunXrjDHGPP300+bGG290a2PPnj1Gktm2bZsxxpg2bdqY1q1bux1z5ZVXmuHDh7ueSzKzZ892O6ZUqVJm2rRpeX4Puf15AACMyc425swZ/77Ghb5DvVUYclShkJZmv7Z27NihHj166NJLL1VERITrVsvu3bu1bds2NWrUyG3W1ubNm7udv2HDBi1ZskTh4eGuR506dSTJ7bZRo0aN3M6LjY3VwYMHL1jb0KFDdd999yk+Pl5jx451aw8A4BsOh/1v6VwIIcVHSpb0XVvh4b5pp2PHjjpy5IimTJmipKQkJSUlSZIyMjJydf7x48fVsWNHrV+/3u2xY8cOXXPNNa7j/nmbxuFwKPsi0x8++eST+umnn3TzzTdr8eLFqlevnmbPnp3HdwgAKMoKcb6yl3LlrPHq6enetRMQYI1W89bhw4e1bds2TZkyRVf/b2nL77//3rX/sssu0wcffKDTp08r5H+LP5ztL3LW5Zdfrk8//VTVqlWT04soHhQUpKwcOuvUrl1btWvX1pAhQ9SjRw9NnTpVt59dNQsAUOxxJcVHgoOl3r29u6zmdFqrc0dFeV9PmTJlFBUVpcmTJ+uXX37R4sWLNXToUNf+f//738rOzla/fv20detWLVy4UC+88IKkv9YpSkhI0JEjR9SjRw+tWrVKv/76qxYuXKi77747x9BxPtWqVVNiYqKSk5N19OhRpaena8CAAVq6dKl+//13LV++XKtWrVLdunW9f+MAgCKDkOJD/ft7vjK3ZJ2bkOCbWgICAvTRRx9pzZo1atCggYYMGaLn/7ZoVUREhObPn6/169erSZMmGjlypB5//HFJcvVTqVixopYvX66srCzdeOONatiwoQYPHqzSpUvnaaG/F198UYsWLVLlypXVtGlTBQYG6vDhw+rVq5dq166trl27qkOHDho1apRv3jwAoEhwGJOblY+KtrS0NEVGRio1NVUR/1gE4dSpU9q5c6eqV6/u1sn0fK69Vlq+PO9hxem05vbZvLngJtaZPn267r77bqWmpiosLKxgiriIvP48AAD+daHvUG/RJ8XHZsyQrrxSOnAg93OmBAZKpUpJc+fmb0B57733dOmll+qSSy7Rhg0bNHz4cHXt2tW2AQUAULwQUnysYkXp22+ttRD27Ll4UHE6rT4oX38t1ayZPzWelZycrMcff1zJycmKjY3VHXfcodGjR+dvEQAAnAd9UvygRg1p9Wpp6FBr+mHJfWa/gADriknJktIDD1jr9fxjqpF88cgjj2jXrl2uWygvv/yySpQokf+FAACQA66k+ElUlDRunPTUU9KsWdK8edLBg9acsuXLW4te/vvfvp1fBQCAooSQ4mehodJdd1kPAACQe9zuAQAAtsSVFH/LzpYSE6X586U//7Tu95QtK7VrJ918szW0BwAAnIOQ4i8nT0pvvim9/rq0c6c1jOfsQscBAdKECdZQoAEDrN6zZ3vYAgAASdzu8Y8DB6TWraVhw6Rdu6xtmZnWeOTs7L9mevvjD+n//s+aWOXscQAAQBIhxfdSUqRrrpE2bvzrysmFZGdbV1patZL278+XEiVp6dKlcjgcSklJ8eoYAAD8hZDia716Sb/+mvvpZiXrysrBg9Ltt1881OSjli1bav/+/Yr00a0oQg8AIC8IKb60Y4fVQTYvAeWszEwpKUlaudL3dXkoODhYMTExrlWRAQDIT4QUX5o0ybvROk6n9MYbPivn9OnTGjRokCpUqKDQ0FC1bt1aq1atcjtm+fLlatSokUJDQ3XVVVdp8+bNrn05Xfn4/vvvdfXVVyssLEyVK1fWoEGDdOLECbfXHD58uCpXrqyQkBDVrFlTb7/9tnbt2qW2bdtKksqUKSOHw6E+ffpIkj755BM1bNhQYWFhioqKUnx8vFubAIDiiZDiK5mZ0ltveXYV5e9tfPSRlJrqk5IeeeQRffrpp3r33Xe1du1a1axZU+3atdORI0dcxzz88MN68cUXtWrVKpUvX14dO3bUmTNncmzv119/Vfv27dWlSxdt3LhRH3/8sb7//nsNGDDAdUyvXr304Ycf6rXXXtPWrVv15ptvKjw8XJUrV9ann34qSdq2bZv279+vV199Vfv371ePHj10zz33aOvWrVq6dKk6d+4sFucGAMjApKamGkkmNTX1nH3p6elmy5YtJj09/cKN7N9/tpus94+NG71+T8ePHzdBQUFm+vTprm0ZGRmmYsWKZty4cWbJkiVGkvnoo49c+w8fPmzCwsLMxx9/bIwxrmOOHj1qjDHm3nvvNf369XN7ne+++84EBASY9PR0s23bNiPJLFq0KMea/tmeMcasWbPGSDK7du3K1fvK9c8DAJAvLvQd6i2upPjKsWO2auvXX3/VmTNn1KpVK9e2oKAgNW/eXFu3bnVti4uLc/29bNmyuuyyy9z2/92GDRs0bdo0hYeHux7t2rVTdna2du7cqfXr1yswMFBt2rTJdZ2NGzfW9ddfr4YNG+qOO+7QlClTdPToUQ/eMQCgqCGk+Ep4uO/aKlXKd2350PHjx3X//fdr/fr1rseGDRu0Y8cO1ahRQ2FhYXluMzAwUIsWLdJXX32levXq6fXXX9dll12mnTt3+uEdAAAKE0KKr5Qr55ug4nRKlSp53UyNGjUUHBys5cuXu7adOXNGq1atUr169VzbfvzxR9ffjx49qu3bt6tu3bo5tnn55Zdry5Ytqlmz5jmP4OBgNWzYUNnZ2Vq2bFmO5wcHB0uSsv7Rb8fhcKhVq1YaNWqU1q1bp+DgYM2ePdvj9w4AKBoIKb4SFCTdc48VMjzldEr/+pdUpozX5ZQsWVL9+/fXww8/rAULFmjLli3q27evTp48qXvvvdd13FNPPaXExERt3rxZffr0Ubly5dSpU6cc2xw+fLh++OEHDRgwQOvXr9eOHTs0d+5cV8fZatWqqXfv3rrnnns0Z84c7dy5U0uXLtXMmTMlSVWrVpXD4dDnn3+uQ4cO6fjx40pKStKzzz6r1atXa/fu3frss8906NCh8wYlAEAx4vNeLoWQTzrOGmPM1q3ed5r97jufva/09HQzcOBAU65cORMSEmJatWplVq5caYz5qxPr/PnzTf369U1wcLBp3ry52bBhg+v8nDq6rly50txwww0mPDzclCxZ0jRq1MiMHj3a7TWHDBliYmNjTXBwsKlZs6Z55513XPufeuopExMTYxwOh+ndu7fZsmWLadeunSlfvrwJCQkxtWvXNq+//voF3xMdZwHAcydO+LY9f3acdRjDWM+0tDRFRkYqNTVVERERbvtOnTqlnTt3qnr16goNDb14Y+3bS998k/ehyE6n1LChtGaNZJPJ0xYuXKgOHTro1KlTrls1BS3PPw8AgJt166SmTX3X3oW+Q73F7R5f++ADqUqVvN32CQyUypaV5s61TUA5cOCA5s6dq1q1atkmoAAAvLdlS0FXkHtedKBAjsqVk779VrrxRmnbNmsBwQsJDJQuuURatEiqXDl/asyFm266SceOHdOECRMKuhQAgA9t3Wr1L7DJ78QXREjxh0qVpB9/lF57TZowwVrd2Om0ZpSV/vp7VJTUv7/04INWuLGRNWvWFHQJAAA/SEmRNm+2LvqXKiUF2PieCiHFXyIipP/7P+nRR6UvvrAWHvzzTyu+li1r9V25/XaJWykAAD87dUr65BNp/HhrLduzy8QFBUl33CElJEhxcfa7ukJIySWP+xc7ndJtt1kPeI1+3gCQN5MmSf/9r3T06LlXTc6ckWbOlGbMkBo0kN59V7r88oKpMyc2vshjD4H/W9U4IyOjgCuBJJ08eVKSNcU/AOD8jJGGD7d6FZxdbSSnbpJneyJs3Sq1amV1kbQLrqRchNPpVIkSJXTo0CEFBQUpwM4374owY4xOnjypgwcPqnTp0q7wCADI2QsvSOPG5f74rCwr2Nx6q/TDD74dpuwp5knRxcd4Z2RkaOfOncq+2Egd+F3p0qUVExMjh91unAKAjezdK1WtevEBpjkJDJSaNJFWr87d8f6cJ4UrKbkQHBysWrVqccungAUFBXEFBQByYfJkzzvBZmVZ84quXVvw/VMIKbkUEBDADKcAANvLyJAmTsz7xOd/53RaM2i89Zbv6vIEHSwAAChCkpKsGS+8kZkpzZrlm3q8QUgBAKAIOXTIN+2kpXl3NcYXCCkAABQhZ4cU+wIhBQAA+EzZsr5pJyys4CdFJ6QAAFCENG8ueTvOw+mUrr/eN/V4g5ACAEAREhEh9eljBQ1PZWZKAwf6rCSPEVIAAChi+vf3vG+Kw2FNBBcf79uaPME8KYCP7dhhzS2wbZu1JHpkpFSjhnTvvVL9+gVdHYDioFEjqXdv6f33PZt19pVXzl2MsCAQUgAf+fpr6fnnpW++sS6z/v23GKdTevllqXVr6aGHWBQbgP9Nniz98Yf1b1JeFsB55RWpUyd/VZU3NshJQOFmjPTss1K7dtKSJda2f15mPft8xQrrf/7hwz377QYAcis4WPr8c+mee6zn51tVxOGwHmFh0gcfSIMG5V+NF0NIAbz0/PPSyJHW3y82p8DZ/ePGSf/9r3/rAoDg4L9uPw8aJJUqde4xNWpIr74q7d8v9eyZ/zVeCKsgy78rOKJo++476ZprPD9/3jypY0ff1QMAF3LypLRpk3T0qBVgKlSw+sp5s7A8qyADNvXKK+f2P8mtwEDpxRfdQ8rJk9ajXDmflQgALiVKSC1aFHQVuUdIATy0b580Z47nfUuysqRly6QRI6QTJ6RataxJmJo392mZAFBoEVIAD733nneXSCXr/C1bpI8/9n6GSAAoaug4C3jot9+8DymSFBREQAGAnBBSAA8dP563uQdyYoy1HDoA4FyEFMBDpUp5PyOjw2HNSAsAOBchBfBQ3boXnxflYgICpDp1fFMPABQ1hBTAQ3fddf4ZHHMrO1u67z7f1AMARQ0hBfBQuXJS9+6eL4fudEo33WStNgoAOBchBfDCkCGed57NypIefti39QBAUUJIAbzQtKn09tuenfvii1KbNr6tBwCKEkIK4KXevaVp06z+KRe79eN0WiN6Xn3VugoDADg/QgrgA717S2vWSHfeaS3a5XBYk7QFBlp/BgRYAeWOO6QVK+y1FDoA2BWrIItVkOFbR45IH3wgbd9uTdQWHm4thX7XXdaKowBQlLAKMlCIlC3LlRIA8AVu9wAAAFsipAAAAFsipAAAAFsipAAAAFsipAAAAFuydUjJysrSY489purVqyssLEw1atTQ008/rb+PmjbG6PHHH1dsbKzCwsIUHx+vHTt2FGDVAADAF2wdUp577jlNnDhR48eP19atW/Xcc89p3Lhxev31113HjBs3Tq+99pomTZqkpKQklSxZUu3atdOpU6cKsHIAAOAtW0/mdssttyg6Olpv/21xlC5duigsLEwffPCBjDGqWLGihg0bpoceekiSlJqaqujoaE2bNk3du3fP1eswmRsAAJ7x53eora+ktGzZUomJidq+fbskacOGDfr+++/VoUMHSdLOnTuVnJys+Ph41zmRkZFq0aKFVqxYcd52T58+rbS0NLcHAACwF1vPOPvoo48qLS1NderUUWBgoLKysjR69Gj17NlTkpScnCxJio6OdjsvOjratS8nY8aM0ahRo/xXOAAA8Jqtr6TMnDlT06dP14wZM7R27Vq9++67euGFF/Tuu+961e6IESOUmprqeuzZs8dHFQMAAF+x9ZWUhx9+WI8++qirb0nDhg31+++/a8yYMerdu7diYmIkSQcOHFBsbKzrvAMHDqhJkybnbTckJEQhISF+rR0AAHjH1ldSTp48qYAA9xIDAwOVnZ0tSapevbpiYmKUmJjo2p+WlqakpCTFxcXla60AAMC3bH0lpWPHjho9erSqVKmi+vXra926dXrppZd0zz33SJIcDocGDx6sZ555RrVq1VL16tX12GOPqWLFiurUqVPBFg8AALxi65Dy+uuv67HHHtMDDzyggwcPqmLFirr//vv1+OOPu4555JFHdOLECfXr108pKSlq3bq1FixYoNDQ0AKsHAAAeMvW86TkF+ZJAQDAM8V2nhQAAFB8EVIAAIAtEVIAAIAtEVIAAIAtEVIAAIAtEVIAAIAtEVIAAIAtEVIAAIAtEVIAAIAtEVIAAIAtEVIAAIAtEVIAAIAtEVIAAIAtEVIAAIAtEVIAAIAtEVIAAIAtEVIAAIAtEVIAAIAtEVIAAIAtEVIAAIAtEVIAAIAtEVIAAIAtEVIAAIAtEVIAAIAtEVKKmKws6ehR6dSpgq4EAADvEFKKgGPHpEmTpAYNJKdTKltWCguTypSRhg6Vtm8v6AoBAMg7Qkohlp0tPfmkFBMjPfCAtGWL+/6UFOm116TLLpNuuEHau7cgqgQAwDOElEIqM1Pq1k0aNUo6eVIyxnr8U1aW9efSpVKzZtLPP+drmQAAeIyQUggZY105+fTT3J+TmSn9+acUHy8lJ/uvNgAAfIWQUgh99500ZUrOV04uJCtLOnBA+u9//VMXAAC+REgphMaPtzrIeiIzU5oxwxoBBACAnRFSCpn9+6XPPrPChqcyMqR33/VdTQAA+AMhpZCZP/+vzrCeMkaaOdM39QAA4C+ElELmzz89v9Xzd3SeBQDYHSGlkMnMlBwO37QDAICdEVIKmTJlfBMwypb1vg0AAPyJkFLIXHtt3oce/1NgoHTjjT4pBwAAvyGkFDING0otW1pBw1PZ2dL99/uuJgAA/IGQUggNHOj5CJ+AAOuW0VtvSenpvq0LAABfIqQUQl26SM2b5/1qisMhBQVJCxdKXbtKL78sJSX5p0YAALzlg8GsyG9BQdIXX1i3fX77LXdXVQICrMfHH1sLDUpS06bSwYPWBHGxsf6tGQCAvOJKSiFVrpz0449S69bW8/PNnRLwv59wRIR1BeW229z3V6hAQAEA2BMhpRArW1ZaskRavty6fZNTUGnYUHrnHemPP6Trrsv/GgEA8JTDGG8HtBZ+aWlpioyMVGpqqiIiIgq6HI8dOiRt3SqlpkphYdIll0h16xZ0VQCAosyf36H0SSlCype3HgAAFAXc7gEAALZESAEAALZESAEAALZESAEAALZESAEAALZESAEAALZESAEAALZESAEAALZESAEAALZESAEAALZESAEAALbE2j0odE6elD79VPrlF+n4cSk8XKpVS+rSxVpYEQBQNBBSUGj88os0YYL01lvSsWNSUNBf+86ckRISpL59pQcekC69tODqBAD4Brd7YCvp6VJ29rnbZ86U6tWTXnvNCiiSFUzOPiQpLU165RWpbl1p9ux8KxkA4CeEFNhKaKiUlCTNmSNlZlrbPvxQ6tbNep6VdeHzs7Ks0NKlizRrlt/LBQD4Ebd7YCsOhxQXJ/36q3TPPVLlytK4cdY+Y3LXhjFWOz17SnXqSA0b+q9eAID/cCUFtlSjhjR1qvTll39dUckLY6zHSy/5vjYAQP4gpMC2Dh+WNm/2/PzMTGnGDOnIEd/VBADIP4QU2Na77+bciTYvzpyx2gEAFD6EFNjWxo1W3xJvBAZKmzb5ph4AQP4ipMC2UlMvPprnYrKyrHYAAIUPIQW2VaKEFODlf6EBAVLJkr6pBwCQvwgpsK0qVbwPKQ6HNYwZAFD4EFJgW717ezb8+O8yM6VevXxTDwAgfxFSYFv160utW1udXz0RGCi1bStddplv6wIA5A9CCmxtyBDPO89mZVnnAwAKJ0IKbO3226X+/fM+FNnhkAYPljp29EtZAIB8QEiBrTkc0uuvS/fd99fzix0vWcHmhRf8WxsAwL8IKbC9wEDpzTettXzq1LG2Of+xNObZ53XrSu+9J40f73lfFgCAPTiMye3askVXWlqaIiMjlZqaqoiIiIIuBxdgjLR8uTRlivTzz1JamhQZaYWTvn2tFZS9naUWAJB7/vwOdV78EMA+HA5rxE/r1gVdCQDA37jdAwAAbImQAgAAbImQAgAAbImQAgAAbImQAgAAbImQAgAAbMn2IWXfvn268847FRUVpbCwMDVs2FCrV6927TfG6PHHH1dsbKzCwsIUHx+vHTt2FGDFAADAF2wdUo4ePapWrVopKChIX331lbZs2aIXX3xRZcqUcR0zbtw4vfbaa5o0aZKSkpJUsmRJtWvXTqdOnSrAygEAgLdsPePso48+quXLl+u7777Lcb8xRhUrVtSwYcP00EMPSZJSU1MVHR2tadOmqXv37rl6HWacBQDAM/78DrX1lZR58+apWbNmuuOOO1ShQgU1bdpUU6ZMce3fuXOnkpOTFR8f79oWGRmpFi1aaMWKFedt9/Tp00pLS3N7AAAAe7F1SPntt980ceJE1apVSwsXLlT//v01aNAgvfvuu5Kk5ORkSVJ0dLTbedHR0a59ORkzZowiIyNdj8qVK/vvTQAAAI/YOqRkZ2fr8ssv17PPPqumTZuqX79+6tu3ryZNmuRVuyNGjFBqaqrrsWfPHh9VDAAAfMXWISU2Nlb16tVz21a3bl3t3r1bkhQTEyNJOnDggNsxBw4ccO3LSUhIiCIiItweAADAXmwdUlq1aqVt27a5bdu+fbuqVq0qSapevbpiYmKUmJjo2p+WlqakpCTFxcXla60AAMC3nAVdwIUMGTJELVu21LPPPquuXbtq5cqVmjx5siZPnixJcjgcGjx4sJ555hnVqlVL1atX12OPPaaKFSuqU6dOBVs8AADwiq1DypVXXqnZs2drxIgReuqpp1S9enW98sor6tmzp+uYRx55RCdOnFC/fv2UkpKi1q1ba8GCBQoNDS3AygEUS9u3Szt3SidOSBERUp06UqVKBV0VUGjZep6U/MI8KQA8dvq09Mkn0uuvS0lJ7vscDummm6SEBKldOynA1nfYAY/48zvU1ldSAMDWVq2SbrlFOngw5wBijLRwofTFF1L9+tKXX0pVquR/nUAhRawHAE98+610zTXS4cPW8+zsnI/LzLT+3LZNuvJK6bff8qc+oAggpABAXu3YYV1ByciQsrJyd05mpnTkiHTDDVJqqn/rA4oIQgoA5NWzz0rp6ee/enI+mZlWx9q33/ZPXUARQ0gBgLw4fFiaMeOv2zieeP31vAccoBgipABAXkyb5l1AMUbatUv65htfVQQUWYQUAMiLpUu9vwridFrtALggQgoA5MWhQ9634XBIR4963w5QxHk0T0piYqISExN18OBBZf/jN4p33nnHJ4UBgC0FBfmmHSfTVAEXk+f/S0aNGqWnnnpKzZo1U2xsrBwOhz/qAgB7io21Jm7z5pZPdrZUvrzvagKKqDyHlEmTJmnatGm66667/FEPANhbly7SrFnetZGVZbUD4ILy3CclIyNDLVu29EctAGB/t98uRUV5fn5goNS6tTVNPoALynNIue+++zRjxgx/1AIA9hccLPXvb4UNT2RlSQMH+rYmoIjK8+2eU6dOafLkyfrmm2/UqFEjBf2jE9lLL73ks+IAwJYeeUSaM0f6+ee8zZkSECDdeqv0r3/5rTSgKMlzSNm4caOaNGkiSdq8ebPbPjrRAigOTHgpZX2xUM4b2kq//pq79XscDum666zZanNaMRnAOfIcUpYsWeKPOgCgQJw8KX38sfT++9Iff0inTkllykhXX23d1alb1/349HRp7VqpZcuKUlKSddDMmdbOf474OfuLW0iIlJAgjRnjuyHMQDHgMMYYT0/eu3evJKlSpUo+K6ggpKWlKTIyUqmpqYqIiCjocgDkg2PHpFGjpClTpLS0c0cVO53WnZyrr5aeekq69lpp3z5p6lTp0Uf/Mc3Jvn1WQ5MnS/v3W9scDqlWLWnAAKlXLykyMj/fHpBv/PkdmueQkp2drWeeeUYvvviijh8/LkkqVaqUhg0bppEjRyqgEF7GJKQAxcv+/dKNN0pbt178Ts3Zf9IefdQ6/oMPpBIlLnBCVpZ1eaZkSW7roFjw53donm/3jBw5Um+//bbGjh2rVq1aSZK+//57Pfnkkzp16pRGjx7t0wIBwJfS0qT4eGn79tx1JTl7deXZZ62LJRcMKJI16qdUKa/rBODBlZSKFStq0qRJuvXWW922z507Vw888ID27dvn0wLzA1dSgOKjXz/pnXdyF1D+zuGwbvHs3i3FxPinNqAw8ud3aJ6vRR45ckR16tQ5Z3udOnV05MgRnxQFAP5w9Kj03nt5DyiSZIx13ltv+b4uADnLc0hp3Lixxo8ff8728ePHq3Hjxj4pCgD84d13pYwMz8/PzpbeeCNvU6MA8Fye+6SMGzdON998s7755hvFxcVJklasWKE9e/boyy+/9HmBAOArvlikPTlZWrJEuuEG79sCcGF5vpLSpk0bbd++XbfffrtSUlKUkpKizp07a9u2bbr66qv9USMA+MTevdZtG1+0A8D/8nwlRbI6zzKKB0Bhk57ufRsOh2/aAXBxuQopGzduVIMGDRQQEKCNGzde8NhGjRr5pDAA8LWICGtGWW8Yw7xsQH7JVUhp0qSJkpOTVaFCBTVp0kQOh0M5jVx2OBzK8qTbPADkgyuukL7+2rPRPX/3v+XLAPhZrkLKzp07Vb58edffAaAweuAB6auvPD8/MFBq0UKqX993NQE4v1yFlKpVq7r+/vvvv6tly5ZyOt1PzczM1A8//OB2LADYSYcO0iWXWEvteCIrSxo40Lc1ATi/PI/uadu2bY6TtqWmpqpt27Y+KQoA/CEwUHr8cc/OdTqlmjWlzp19WxOA88tzSDHGyHF2+fG/OXz4sEqWLOmTogDAX/r2zfvVEKdTKl3a6s8SHOyXsgDkINdDkDv/79cHh8OhPn36KCQkxLUvKytLGzduVMuWLX1fIQD4kMMhvfqqNdJn9GgrgJxvBtmzv49VqSItWiRVr55/dQLIQ0iJ/N+YO2OMSpUqpbCwMNe+4OBgXXXVVerbt6/vKwQAH3M4pGeekW67TZowQZo+XTpzxgosDofV9yQ7W6pbVxo0SLrzTokLxUD+y/MqyKNGjdJDDz1UpG7tsAoyULwdPizNmWNNeX/6tHVr56qrpLi4v66mAMiZP79D8xxSiiJCCgAAnvHnd2iubvdcfvnlSkxMVJkyZdS0adMcO86etXbtWp8VBwAAiq9chZTbbrvN1VG2U6dO/qwHAABAErd7JHG7BwAAT/nzOzTP86Ts2bNHe/+2TvnKlSs1ePBgTZ482aeFAQCA4i3PIeXf//63lixZIklKTk5WfHy8Vq5cqZEjR+qpp57yeYEAAKB4ynNI2bx5s5o3by5Jmjlzpho2bKgffvhB06dP17Rp03xdHwAAKKbyHFLOnDnj6kT7zTff6NZbb5Uk1alTR/v37/dtdQAAoNjKc0ipX7++Jk2apO+++06LFi1S+/btJUl//PGHoqKifF4gAAAonvIcUp577jm9+eabuvbaa9WjRw81btxYkjRv3jzXbSAAAABveTQEOSsrS2lpaSpTpoxr265du1SiRAlVqFDBpwXmB4YgAwDgmQKfcfafAgMDlZmZqe+//16SdNlll6latWq+rAsAABRzeb7dc+LECd1zzz2KjY3VNddco2uuuUYVK1bUvffeq5MnT/qjRgAAUAzlOaQMHTpUy5Yt0/z585WSkqKUlBTNnTtXy5Yt07Bhw/xRIwAAKIby3CelXLly+uSTT3Tttde6bV+yZIm6du2qQ4cO+bK+fEGfFAAAPGOrafFPnjyp6Ojoc7ZXqFCB2z0AAMBn8hxS4uLi9MQTT+jUqVOubenp6Ro1apTi4uJ8WhwAACi+8jy655VXXlG7du1UqVIl1xwpGzZsUGhoqBYuXOjzAgEAQPHk0TwpJ0+e1IwZM7R161ZJUt26ddWzZ0+FhYX5vMD8QJ8UAAA8Y5t5Un788UfNnz9fGRkZuu6663Tffff5tBgAAICzch1SPvnkE3Xr1k1hYWEKCgrSSy+9pOeee04PPfSQP+sDAADFVK47zo4ZM0Z9+/ZVamqqjh49qmeeeUbPPvusP2sDAADFWK77pISHh2v9+vWqWbOmJCkjI0MlS5bUvn37CuV6PX9HnxQAADxji3lSTp486fbiwcHBCg0N1fHjx31aEAAAgJTHjrNvvfWWwsPDXc8zMzM1bdo0lStXzrVt0KBBvqsOAAAUW7m+3VOtWjU5HI4LN+Zw6LfffvNJYfmJ2z0AAHjGFkOQd+3a5dMXBgAAuJA8T4sPAACQHwgpAADAlggpAADAlnIdUv744w9/1gEAAOAm1yGlfv36mjFjhj9rAQAAcMl1SBk9erTuv/9+3XHHHTpy5Ig/awIAAMh9SHnggQe0ceNGHT58WPXq1dP8+fP9WRcAACjm8jTjbPXq1bV48WKNHz9enTt3Vt26deV0ujexdu1anxYIAACKpzyFFEn6/fff9dlnn6lMmTK67bbbzgkpAAAAvpCnhDFlyhQNGzZM8fHx+umnn1S+fHl/1QUAAIq5XIeU9u3ba+XKlRo/frx69erlz5oAAAByH1KysrK0ceNGVapUyZ/1AAAASMpDSFm0aJE/6wAAAHDDtPgAAMCWCCkAAMCWCCkAAMCWCCkAAMCWCCkAAMCWCCkAAMCWCCkAYDPGSMeOSX/+KZ05U9DVAAWnUIWUsWPHyuFwaPDgwa5tp06dUkJCgqKiohQeHq4uXbrowIEDBVckAPxNXkLGunVS375SyZJSRIRUvrwUHCw1aSK9/bZ08qTfygRsqdCElFWrVunNN99Uo0aN3LYPGTJE8+fP16xZs7Rs2TL98ccf6ty5cwFVCQDufvnl4sds2yY1by5dfrk0bZqUnu6+f9Mm6b77pJgYadw460oLUBwUipBy/Phx9ezZU1OmTFGZMmVc21NTU/X222/rpZde0nXXXacrrrhCU6dO1Q8//KAff/yxACsGAMtPP114/8qVVkBZu9Z6npl57jHZ2dafx45Jw4dbgeXsNqAoKxQhJSEhQTfffLPi4+Pdtq9Zs0Znzpxx216nTh1VqVJFK1asOG97p0+fVlpamtsDAHxt714pNfX8+3/5RWrXTjp+XMrKyn2777wjjRjhfX2A3dk+pHz00Udau3atxowZc86+5ORkBQcHq3Tp0m7bo6OjlZycfN42x4wZo8jISNejcuXKvi4bQDFmjHVF5JtvpIoVz3/cgw9aV0c8uSoybpx1GwgoymwdUvbs2aMHH3xQ06dPV2hoqM/aHTFihFJTU12PPXv2+KxtAMXTzz9boaN8ecnplIKCrNsyTz8tzZ9/7pWSXbukr77K2xWUv3M6pYkTvS4bsDVbh5Q1a9bo4MGDuvzyy+V0OuV0OrVs2TK99tprcjqdio6OVkZGhlJSUtzOO3DggGJiYs7bbkhIiCIiItweAOCJHTuktm2lunWlN96whg2fvTKSlWX1Obn1VqlKFemDD/467803pQAv/gXOzLQ62XK3GkWZrUPK9ddfr02bNmn9+vWuR7NmzdSzZ0/X34OCgpSYmOg6Z9u2bdq9e7fi4uIKsHIAxcGqVVan1+++s57ndFXk7LY//pDuukt66inr+cyZnl9FOSs93bqlBBRVzoIu4EJKlSqlBg0auG0rWbKkoqKiXNvvvfdeDR06VGXLllVERIQGDhyouLg4XXXVVQVRMoBiYscO6cYbrT4leQkbTzwhlSljXXHxBV+1A9iRrUNKbrz88ssKCAhQly5ddPr0abVr104TJkwo6LIAFHH/+U/eA8pZQ4ZIISHe1+Bw5DxkGSgqHMYwLVBaWpoiIyOVmppK/xQAF7V9u3TZZZ6fHxgolShhhRxvffih1L279+0AnvLnd6it+6QAgB1NmmSNrvFUVpaUkeFdG5LV8fbqq71rA7CzQn+7BwDy24wZ3t9mOX3au/OdTqljR+mSS7xrB7AzrqQAQB4YIx0+7Ju2qlf3fBhyZqY0YIBv6gDsipACAHlgjPdDh8/q0cPq/JpXgYHSTTdZ87MARRkhBQDyICBAKlnSN221bGlNyOZw5D6sBARYqyV//LFnAQcoTAgpAJBHbdp43+nV6bQmgrvzTmnePCk83Aod57v9Exho/dmpk7R0qXU8UNQRUgAgjwYM8K7jrNMpde1qrfMjSbfcIu3fb02VX6/euccHBUlXXilt2CB9+qk1fBkoDpgnRcyTAiBvsrOtTq+7d3vexvLl1u2efzLGWqwwOVk6dUoqXdp6rYcflt5/3/PXA/zFn9+hDEEGgDwKCJCef17q1i3v5wYGSu3bS+dbXszhsBYrrFvXfftll1kdds/e9gGKA273AIAHunaVxo7N2zmBgVKTJtJHH+W902vPntLGjXk7ByjsCCkA4KHhw61+JE7nhec7OdvJtkMHadkyzzq9Vq8ucTcaxQ0hBQC80K+ftGePNGqUFBNz7n6n01pbZ8UKaxSPN8OXq1f3/FxPpKZK48dLN9wgNWokNWhgzc0ybhyrLyN/0HFWdJwF4BuZmVYYOXjQWpunTBmpWTOpXLmCrixv9u+3Qte77/41ff/fvykCAqxbV926SU8+KdWoUSBlwib8+R1KSBEhBQDO2rLFunJy8ODFh1k7ndatqy+/PH9HYBR9rIIMAPC733+3Jqo7cCB388BkZkrHjlmhZtMm/9eH4oeQAgCQZK0llJKSt7WJsrKs+Vxuu82aPwbwJUIKAEBr11r9aTyZSTcrS9q5U1q40Pd1oXgjpAAA9MYb3q1HFBhojQQCfImQAgDFXEaGNH26d+sRZWVJX31ldbgFfIWQAgDF3OHDfw019oYx0r593rcDnEVIAYBi7uRJe7YFEFIAoJjz5dQWkZG+awsgpABAMRcVJVWo4H07oaFStWretwOcRUgBgGIuIEB64AFrhI6nnE6pTx/PFk8EzoeQAgBQ377u6/PkVWam1L+/7+oBJEIKAEBSxYrS3XdbV1XyKjBQ6tDBWikZ8CVCCgBAkjUZ21VX5e22T2CgVKuW9OGH/qsLxRchBQAgyer4+vXXUrt21vMLXVU5u+/KK6Xvv2dUD/yDkAIAcClZUpo3T5o1S4qNtbYFBEhBQdbj7FWWyy+X3ntPWrbMGh0E+IMXKzUAAOzi9GkrQJxv/Z2sLGs22JQUKSTEGnJcpkzOxwYGSl26WCFk4ULpyy+tWWmzs6WyZaUbb7RCCuBvhBQAKAJCQqTFi6WGDaXy5f/anpwsvfWWtYBgcvJf2x0OK2wMHCi1b39uP5TNm6WePaX69a0HUBC43QMARUTbttLkydLq1daQ4CFDpEqVpCeecA8okjXc+JtvpFtukapXl1ascN+/Y4f0r3/lX+1AThzGeDMyvmhIS0tTZGSkUlNTFeHL+aEBIJ9lZUl33ilt3Spt3Ji7uU8CA63HnDnWUGLJCim1avm1VBQR/vwO5UoKABQhgYHWKJ0NG3I/OVtWlnTmjNS5s7RmjXVejRr+rRPIDUIKABQhq1ZJ06bl/TxjrKAyZIjVX8WTSd0AX+M/QwAoQiZMOP8In4vJypK++07assW3NQGeIqQAQBFx5Ig0Y4bVadZTTqc0caLvagK8QUgBgCJiyRIpI8O7NjIzrQ60gB0QUgCgiDh82DftHD3qm3YAbxFSAACALRFSAKCI8NUaOqVL+6YdwFuEFAAoIq69VgoO9q4Np1Pq1MkX1QDeI6QAQBERFSX9+9+eD0GWrI6z/fv7ribAG4QUAChCHnjA8yHIgYFS69YsKAj7IKQAQBFy5ZXS3Xdbs8bmhcMhBQVJL7/sn7oATxBSAKCIefNN6aabch9UAgKsgPLpp1KzZv6tDcgLQgoAFDFBQdaEbIMGWbdwzrcOT2Cg9WdsrDUR3E035VuJQK4QUgCgCHI6pVdekfbskZ58UoqOPveY66+X5s2Tfv9datkyvysELs5hTG4X8y660tLSFBkZqdTUVEVERBR0OQDgc5mZ0r59UkqKFBIiVagglS1b0FWhKPDnd6gXA9UAAIWF0ylVrWo9gMKC2z0AAMCWCCkAAMCWCCkAAMCWCCkAAMCWCCkAAMCWCCkAAMCWCCkAAMCWCCkAAMCWCCkAAMCWCCkAAMCWCCkAAMCWCCkAAMCWCCkAAMCWCCkAAMCWCCkAAMCWCCkAAMCWCCkAAMCWCCkAAMCWCCkAAMCWCCkAAMCWCCkAAMCWCCkAAMCWCCkAAMCWCCkAAMCWCCkAAMCWCCkAAMCWCCkAAMCWCCkAAMCWCCkAAMCWCCkAAMCWCCkAAMCWbB1SxowZoyuvvFKlSpVShQoV1KlTJ23bts3tmFOnTikhIUFRUVEKDw9Xly5ddODAgQKqGAAA+IqtQ8qyZcuUkJCgH3/8UYsWLdKZM2d044036sSJE65jhgwZovnz52vWrFlatmyZ/vjjD3Xu3LkAqwYAAL7gMMaYgi4itw4dOqQKFSpo2bJluuaaa5Samqry5ctrxowZ+te//iVJ+vnnn1W3bl2tWLFCV111Va7aTUtLU2RkpFJTUxUREeHPtwAAQJHiz+9QW19J+afU1FRJUtmyZSVJa9as0ZkzZxQfH+86pk6dOqpSpYpWrFhx3nZOnz6ttLQ0twcAALCXQhNSsrOzNXjwYLVq1UoNGjSQJCUnJys4OFilS5d2OzY6OlrJycnnbWvMmDGKjIx0PSpXruzP0gEAgAcKTUhJSEjQ5s2b9dFHH3nd1ogRI5Samup67NmzxwcVAgAAX3IWdAG5MWDAAH3++ef69ttvValSJdf2mJgYZWRkKCUlxe1qyoEDBxQTE3Pe9kJCQhQSEuLPkgEAgJdsfSXFGKMBAwZo9uzZWrx4sapXr+62/4orrlBQUJASExNd27Zt26bdu3crLi4uv8sFAAA+ZOsrKQkJCZoxY4bmzp2rUqVKufqZREZGKiwsTJGRkbr33ns1dOhQlS1bVhERERo4cKDi4uJyPbIHAADYk62HIDscjhy3T506VX369JFkTeY2bNgwffjhhzp9+rTatWunCRMmXPB2zz8xBBkAAM/48zvU1iElvxBSAADwDPOkAACAYoeQAgAAbImQAgAAbImQAgAAbImQAgAAbImQAgAAbImQAgAAbImQAgAAbImQAgAAbImQAgAAbImQAgAAbImQAgAAbImQAgAAbImQAgAAbImQAgAAbImQAgAAbImQAgAAbImQAgAAbImQAgAAbImQAgAAbImQAgAAbImQAgAAbImQAgAAbImQAgAAbImQAgAAbImQAgAAbImQAgAAbImQAgAAbImQAgAAbImQAgAAbImQAgAAbImQAgAAbImQAgAAbImQAgAAbImQAgAAbImQAgAAbImQAgAAbImQAgAAbImQAgAAbImQAgAAbImQAgAAbImQAgAAbImQAgAAbImQAgAAbImQAgAAbImQAgAAbImQAgAAbImQAgAAbImQAgAAbImQAgAAbImQAgAAbImQAgAAbImQAgAAbImQAgAAbImQAgAAbImQAgAAbImQAgAAbImQAgAAbImQAgAAbImQAgAAbImQAgAAbImQAgAAbImQAgAAbImQAgAAbImQAgAAbImQAgAAbImQAgAAbImQAgAAbImQAgAAbImQAgAAbImQAgAAbImQAgAAbImQAgAAbImQAgAAbImQAgAAbImQAgAAbImQAgAAbImQAgAAbImQAgAAbImQAgAAbImQAgAAbImQAgAAbKnIhJQ33nhD1apVU2hoqFq0aKGVK1cWdEkAAMALRSKkfPzxxxo6dKieeOIJrV27Vo0bN1a7du108ODBgi4NAAB4qEiElJdeekl9+/bV3XffrXr16mnSpEkqUaKE3nnnnYIuDQAAeMhZ0AV4KyMjQ2vWrNGIESNc2wICAhQfH68VK1bkeM7p06d1+vRp1/PU1FRJUlpamn+LBQCgiDn73WmM8XnbhT6k/Pnnn8rKylJ0dLTb9ujoaP388885njNmzBiNGjXqnO2VK1f2S40AABR1hw8fVmRkpE/bLPQhxRMjRozQ0KFDXc9TUlJUtWpV7d692+cfMHKWlpamypUra8+ePYqIiCjocooFPvP8x2ee//jM819qaqqqVKmismXL+rztQh9SypUrp8DAQB04cMBt+4EDBxQTE5PjOSEhIQoJCTlne2RkJP9R57OIiAg+83zGZ57/+MzzH595/gsI8H0310LfcTY4OFhXXHGFEhMTXduys7OVmJiouLi4AqwMAAB4o9BfSZGkoUOHqnfv3mrWrJmaN2+uV155RSdOnNDdd99d0KUBAAAPFYmQ0q1bNx06dEiPP/64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", "text/plain": [ "
" ] @@ -596,53 +609,117 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# TODO \n", + "### Change the state of a simulation\n", "\n", - "- proximter activations \n", - "- neighbor map \n", - "- just say physics is implemented in this file\n" + "We are going to modify some elements of the state of half of our agents" ] }, { - "cell_type": "markdown", + "cell_type": "code", + "execution_count": 15, "metadata": {}, + "outputs": [], "source": [ - "We can see that agents rush on every entity they have in their field of view ... \n", + "# 1: get the current state \n", + "state = simulator.state\n", "\n", - "--> This is because ... atm programmed with an aggressive behavior \n", + "agent_state_behavior = state.agent_state.behavior\n", "\n", - "Lets see how to define custom behaviors ... \n", + "# 2: change the behavior of the first 5 agents and their color \n", + "updated_agent_behavior = state.agent_state.behavior.at[:5].set(behavior_name_map['FEAR'])\n", + "updated_agent_color = state.agent_state.color.at[:5].set(jnp.array([0., 1., 0.]))\n", + "updated_agent_speed_mul = state.agent_state.speed_mul.at[:5].set(jnp.array([3.]))\n", "\n", - "--> Do you wanna define them directly based on the neighbor map ? Do we introduce neighbor map ... before ?\n", - "\n" + "# 3: Update the state with those new values (use dataclass.set(attribute=updated_attribute))\n", + "agent_state = state.agent_state.set(behavior=updated_agent_behavior, color=updated_agent_color)\n", + "state = state.set(agent_state=agent_state)\n", + "simulator.state = state" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Run it and render it " ] }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 16, "metadata": {}, "outputs": [], "source": [ - "# Code for custom behaviors ... " + "new_state_history = []\n", + "\n", + "for _ in range(num_steps):\n", + " simulator.step()\n", + " new_state_history.append((simulator.state.entity_state,\n", + " simulator.state.agent_state, \n", + " simulator.state.object_state, \n", + " simulator.state.simulator_state\n", + " ))" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAikAAAIjCAYAAADGCIt4AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAA9hAAAPYQGoP6dpAABXiklEQVR4nO3dd3xUVf7G8c8kkx6SUFOoQUB6EQQDKIJRQEQRlrYoVXAxgBQLLIsKihQ7oCD8RCwo4iqoqLAYioIQehME1FAl9CT0lLm/P0ZGIy3JzGTuJM87r3ktc++dM9+5WZmHc84912IYhoGIiIiIyfh4ugARERGRq1FIEREREVNSSBERERFTUkgRERERU1JIEREREVNSSBERERFTUkgRERERU1JIEREREVNSSBERERFTUkgRKUR69+5NpUqVPF2GiIhLKKSImJzFYsnVY8WKFZ4u9Ybeeust5syZ4+kyrnDkyBFGjhxJy5YtKVas2HXPZ2ZmJmPHjqVy5coEBARQuXJlXnjhBbKysq44du/evXTr1o1y5coRHBxM9erVGTduHOfPn7/i2B9//JHmzZsTHBxMVFQUQ4YM4ezZs67+qCJexaJ794iY24cffpjj+fvvv8/SpUv54IMPcmy/++67KVGiBDabjYCAgIIsMddq165NqVKlTBeoVqxYQcuWLalatSqlSpVizZo1LF++nDvvvPOKY7t27cqnn35K3759adSoEWvXruW9996jf//+zJw503HcwYMHqVu3LuHh4fzrX/+iRIkSrFmzhjlz5nD//ffzxRdfOI7dsmULcXFx1KhRgwEDBnDo0CFefvllWrZsybffflsQp0DEnAwR8SoJCQmGt/6nW6tWLaNFixaeLuMK6enpxsmTJw3DMIxPP/3UAIzly5dfcdy6desMwBgzZkyO7SNGjDAsFouxdetWx7bx48cbgLFjx44cx/bs2dMAjFOnTjm2tW3b1oiOjjbS0tIc22bNmmUAxpIlS1zxEUW8koZ7RAqRv89J2bdvHxaLhZdffpk333yTypUrExwczD333MPBgwcxDIPnn3+ecuXKERQUxAMPPMCpU6euaPfbb7/l9ttvJyQkhGLFitGuXTt++umnHMekpKTQp08fypUrR0BAANHR0TzwwAPs27cPgEqVKvHTTz+xcuVKxxDVX3sqUlNTGTp0KOXLlycgIIAqVaow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pHr16o7XmZl6UkRExGulk+6ytlwRdgD27t1L9+7dqVy5MmFhYY6hlgMHDrB7927q1q2bY9XWxo0b53j91q1bWb58OaGhoY7H5VDx12GjunXr5nhddHQ0x44du25tw4cP55FHHiE+Pp6JEyfmaM+MFFJERMRrhRDisrZCCXVJO+3bt+fUqVPMmjWLpKQkkpKSAMjIyMjV68+ePUv79u3ZsmVLjsfevXu54447HMf9fZjGYrFgs1370muA5557jp9++ol27dqxbNkyatasyYIFC/L4CQuOhntERMRrlaEMgQRykYtOteOLL2Up63Q9J0+eZPfu3cyaNYvbb78dgFWrVjn233zzzXz44YdcunSJgIAA4M/5I5fdcsstfPbZZ1SqVAmrNf9f035+fmRnXzlXp1q1alSrVo1hw4bRvXt33n33XR588MF8v487qSdFRES8ViCB9KAHVif+zW3FSic6EUGE0/UUL16ckiVLMnPmTH755ReWLVvG8OHDHfv/+c9/YrPZGDBgALt27WLJkiW8/PLLwJ/3KUpISODUqVN0796d9evX8+uvv7JkyRL69Olz1dBxLZUqVSIxMZGUlBROnz7NhQsXGDRoECtWrGD//v2sXr2a9evXU6NGDac/t7sopIiIiFd7jMccS97nRxZZJJDgklp8fHyYN28eGzdupHbt2gwbNoyXXnrJsT8sLIyvvvqKLVu2UL9+fUaPHs0zzzwD4JinEhMTw+rVq8nOzuaee+6hTp06DB06lIiIiDzd6O+VV15h6dKllC9fngYNGuDr68vJkyfp2bMn1apVo0uXLrRt25axY8e65LO7g8UwDMPTRXhaeno64eHhpKWlERYW5ulyRESKvIsXL5KcnExsbGyOSabX0pzmJJGU57BixUoNarCVrR67M/LcuXPp06cPaWlpBAWZ84aH1/t9uPM7VHNSRETE633CJzSiESc4keug4osvxSjGQhYWaEB5//33qVy5MmXLlmXr1q08/fTTdOnSxbQBxZM03CMiIl6vLGX5nu8pS9lcrT7riy+lKc33fE9lKhdAhX9KSUnhoYceokaNGgwbNozOnTszc+bMAq3BWyikiIhIoVCVqmxgA8MYRjjhAPj85Wvucm9JKKEMYhCb2ERtahd4nU899RT79u1zDKG89tprBAcHF3gd3kDDPSIiUmiUohQv8RLjGMenfMpXfMUxjmFgUJrStKUt3enu0vVVxH0UUkREpNAJIoief/yI99Jwj4iIiJiSelJERKTwsdlg6VJYtAhOngTDgBIloE0buPde8L3x5FrxPIUUEREpPM6dg7ffhqlTYd8+sFrtAcUwwMcH3noLypaFQYPgscdAa2OZmoZ7RESkcDhyBJo1gyeegP377duysiA7296zkvXH+imHD8Po0dC48Z/HiSkppIiIiPc7fRruuAN++unPnpPrsdng11+heXM4erRgagRWrFiBxWIhNTXVqWOKCoUUES/mzP1KRAqVHj0gOfnP3pLcyMqClBT4xz/cV1c+NG3alCNHjhAeHu6S9rw59CikiHix7WzHhs3TZYh41q5d8O239mGdvMrKglWrYP1619eVT/7+/kRFRTnuilyUKaSIeLGbuZl3eMfTZYh41owZzl2tY7XaJ9S6yKVLlxgyZAhlypQhMDCQ5s2bs/5vIWj16tXUrVuXwMBAbrvtNnbs2OHYd7Wej1WrVnH77bcTFBRE+fLlGTJkCOfOncvxnk8//TTly5cnICCAKlWq8M4777Bv3z5atmwJQPHixbFYLPTu3RuA//73v9SpU4egoCBKlixJfHx8jjbNQCFFxIsF//HzBV9gw8a3fEs72lGc4lixEkQQFajAf/gPBzjg6XJFXC8jA2bPzl8vymVZWfDRR3DmjEtKeuqpp/jss89477332LRpE1WqVKF169acOnXKccyTTz7JK6+8wvr16yldujTt27cnMzPzqu39+uuvtGnThk6dOrFt2zY++eQTVq1axaBBgxzH9OzZk48//pgpU6awa9cu3n77bUJDQylfvjyfffYZALt37+bIkSO88cYbHDlyhO7du9O3b1927drFihUr6NixI8aN5vIUNEOMtLQ0AzDS0tI8XYpInmUb2UZNo6YRbUQbGBhWw2rwtx9fw9ewGBbjAeMB45BxyNMli9zQhQsXjJ07dxoXLly4/oEHD16eJuv8Y+dOp+s+e/as4efnZ8ydO9exLSMjw4iJiTEmT55sLF++3ACMefPmOfafPHnSCAoKMj755BPDMAzHMadPnzYMwzD69etnDBgwIMf7/PDDD4aPj49x4cIFY/fu3QZgLF269Ko1/b09wzCMjRs3GoCxb9++XH2u6/0+3Pkdqp4UES83jnHsZCdHOAJcfTJtNtkYGHzN1zSiETvZWdBl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3t6jklu+vlCxInz3HRQv7r66RETMRCFFxAMsFvvy+G+9BVFR9m1XWz/Fx8feg9KtG6xbBxUqFGydIiKepJAi4iEWCwwcCAcPwoIF0KIFRETYQ0lICFSpYh/aOXwYPvzQPulWRKQoceIaAxFxBasVOnSwP0RE5E/qSRERERFTUkgRERERU1JIEREREVNSSBERERFTUkgRERERU1JIEREREVNSSBERERFTUkgRERERU1JIEREREVNSSBERERFTUkgRERERU1JIEREREVNSSBERERFTUkgRERERU1JIEREREVMydUjJzs5mzJgxxMbGEhQUxE033cTzzz+PYRiOYwzD4JlnniE6OpqgoCDi4+PZu3evB6sWERERVzB1SJk0aRLTp09n2rRp7Nq1i0mTJjF58mSmTp3qOGby5MlMmTKFGTNmkJSUREhICK1bt+bixYserFxEREScZTH+2i1hMvfddx+RkZG88847jm2dOnUiKCiIDz/8EMMwiImJYcSIETzxxBMApKWlERkZyZw5c+jWrVuu3ic9PZ3w8HDS0tIICwtzy2cREREpjNz5HWrqnpSmTZuSmJjInj17ANi6dSurVq2ibdu2ACQnJ5OSkkJ8fLzjNeHh4TRp0oQ1a9Zcs91Lly6Rnp6e4yEiIiLmYvV0AdczcuRI0tPTqV69Or6+vmRnZzN+/Hh69OgBQEpKCgCRkZE5XhcZGenYdzUTJkxg7Nix7itcREREnGbqnpT58+czd+5cPvroIzZt2sR7773Hyy+/zHvvvedUu6NGjSItLc3xOHjwoIsqFhEREVcxdU/Kk08+yciRIx1zS+rUqcP+/fuZMGECvXr1IioqCoCjR48SHR3teN3Ro0epX7/+NdsNCAggICDArbWLiIiIc0zdk3L+/Hl8fHKW6Ovri81mAyA2NpaoqCgSExMd+9PT00lKSiIuLq5AaxURERHXMnVPSvv27Rk/fjwVKlSgVq1abN68mVdffZW+ffsCYLFYGDp0KC+88AJVq1YlNjaWMWPGEBMTQ4cOHTxbvIiIiDjF1CFl6tSpjBkzhscee4xjx44RExPDo48+yjPPPOM45qmnnuLcuXMMGDCA1NRUmjdvzuLFiwkMDPRg5SIiIuIsU6+TUlC0ToqIiEj+FNl1UkRERKToUkgRERERU1JIEREREVNSSBERERFTUkgRERERU1JIERER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/tx2223079/f9RWKiEihUJGKvMzLPM/zfMInbGQjqaQSRBAxxPBP/kk1qnm6TDGRPM9JGTt2LE888UShGtrRnBQREZH8ced3aJ5DSmGkkCIiIpI/7vwOzdVwzy233EJiYiLFixenQYMGV504e9mmTZtcVpyIiIgUXbkKKQ888IBjomyHDh3cWY+IiIgIoOEeQMM9IiIi+WWqdVIOHjzIoUOHHM/XrVvH0KFDmTlzpksLExERkaItzyHln//8J8uX25cmTklJIT4+nnXr1jF69GjGjRvn8gJFRESkaMpzSNmxYweNGzcGYP78+dSpU4cff/yRuXPnMmfOHFfXJyIiIkVUnkNKZmamYxLtd999x/333w9A9erVOXLkiGurExERkSIrzyGlVq1azJgxgx9++IGlS5fSpk0bAH7//XdKlizp8gJFRESkaMpzSJk0aRJvv/02d955J927d6devXoAfPnll45hIBERERFn5esS5OzsbNLT0ylevLhj2759+wgODqZMmTIuLbAg6BJkERGR/PH4irN/5+vrS1ZWFqtWrQLg5ptvplKlSq6sS0RERIq4PA/3nDt3jr59+xIdHc0dd9zBHXfcQUxMDP369eP8+fPuqFFERESKoDyHlOHDh7Ny5Uq++uorUlNTSU1N5YsvvmDlypWMGDHCHTWKiIhIEZTnOSmlSpXiv//9L3feeWeO7cuXL6dLly4cP37clfUVCM1JERERyR9TLYt//vx5IiMjr9hepkwZDfeIiIiIy+Q5pMTFxfHss89y8eJFx7YLFy4wduxY4uLiXFqciIiIFF15vrrn9ddfp3Xr1pQrV86xRsrWrVsJDAxkyZIlLi9QREREiqZ8rZNy/vx5PvroI3bt2gVAjRo16NGjB0FBQS4vsCBoToqIiEj+mGadlLVr1/LVV1+RkZFBq1ateOSRR1xajIiIiMhluQ4p//3vf+natStBQUH4+fnx6quvMmnSJJ544gl31iciIiJFVK4nzk6YMIH+/fuTlpbG6dOneeGFF3jxxRfdWZuIiIgUYbmekxIaGsqWLVuoUqUKABkZGYSEhHD48GGvvF/PX2lOioiISP6YYp2U8+fP53hzf39/AgMDOXv2rEsLEhEREYE8Tpz9v//7P0JDQx3Ps7KymDNnDqVKlXJsGzJkiOuqExERkSIr18M9lSpVwmKxXL8xi4XffvvNJYUVJA33iIiI5I8pLkHet2+fS99YRERE5HryvCy+iIiISEFQSBERERFTUkgRERERU8p1SPn999/dWYeIiIhIDrkOKbVq1eKjjz5yZy0iIiIiDrkOKePHj+fRRx+lc+fOnDp1yp01iYiIiOQ+pDz22GNs27aNkydPUrNmTb766it31iUiIiJFXJ5WnI2NjWXZsmVMmzaNjh07UqNGDazWnE1s2rTJpQWKiIhI0ZSnkAKwf/9+Pv/8c4oXL84DDzxwRUgRERERcYU8JYxZs2YxYsQI4uPj+emnnyhdurS76hIREZEiLtchpU2bNqxbt45p06bRs2dPd9YkIiIikvuQkp2dzbZt2yhXrpw76xEREREB8hBSli5d6s46RERERHLQsvgiIiJiSgopIiIiYkoKKSIiImJKCikiIiJiSgopIiIiYkoKKSIiImJKCikiIiJiSl4VUiZOnIjFYmHo0KGObRcvXiQhIYGSJUsSGhpKp06dOHr0qOeKFBEREZfwmpCyfv163n77berWrZtj+7Bhw/jqq6/49NNPWblyJb///jsdO3b0UJUiIiLiKl4RUs6ePUuPHj2YNWsWxYsXd2xPS0vjnXfe4dVXX6VVq1Y0bNiQd999lx9//JG1a9d6sGIRERFxlleElISEBNq1a0d8fHyO7Rs3biQzMzPH9urVq1OhQgXWrFlzzfYuXbpEenp6joeIiIiYS67v3eMp8+bNY9OmTaxfv/6KfSkpKfj7+xMREZFje2RkJCkpKddsc8KECYwdO9bVpYqIiIgLmbon5eDBgzz++OPMnTuXwMBAl7U7atQo0tLSHI+DBw+6rG0RERFxDVOHlI0bN3Ls2DFuueUWrFYrVquVlStXMmXKFKxWK5GRkWRkZJCamprjdUePHiUqKuqa7QYEBBAWFpbjISIiIuZi6uGeu+66i+3bt+fY1qdPH6pXr87TTz9N+fLl8fPzIzExkU6dOgGwe/duDhw4QFxcnCdKFhERERcxdUgpVqwYtWvXzrEtJCSEkiVLOrb369eP4cOHU6JECcLCwhg8eDBxcXHcdtttnihZREREXMTUISU3XnvtNXx8fOjUqROXLl2idevWvPXWW54uS0RERJxkMQzD8HQRnpaenk54eDhpaWmanyIiIpIH7vwONfXEWRERESm6FFJERETElBRSRERExJQUUkRERMSUFFJERETElBRSRERExJQUUkRERMSUFFJERETElBRSRERExJQUUkRERMSUFFJERETElBRSRERExJQUUkRERMSUFFJERETElBRSRERExJQUUkRERMSUFFJERETElBRSRERExJQUUkRERMSUFFJERETElBRSRERExJQUUkRERMSUFFJERETElBRSRERExJSsni5ARKSoyCabxSxmNas5zWn88COSSDrTmWpU83R5IqajkCIi4manOc1MZjKNaRziEFasWLAAYMPGf/gPLWnJYAbTgQ6OfSJFnUKKiIgb7WY3d3M3hzmMDRsAWWRdcdz3fM9yltODHsxmNv74F3SpIqajkCIi4ia/8itxxHGGM46Aci3ZZAPwMR9zhjN8zuf44lsQZYqYlibOioi4QSaZtKY16aRftefkWmzY+IqveJ7n3VidiHdQSBERcYMv+ZJf+dXRQ5IXBgav8irnOe+GykS8h0KKiIgbTGWqU8M1ZzjDPOa5sCIR76OQIiLiBAODc5zLMaSzl72sZGW+elEu88GHaUxzRYkiXksTZ0VEnGDBgoHBWtayjW3sYhcrWel0uzZs/MzPLqhQxHsppIiIOCmUUJr/8QPwAR/Qk55Ot3uBC9iw4aNObymi9P98EREXCyHEJe0EEKCAIkWa/t8vIuJilajkknbKU94l7Yh4K4UUEREXa0ADalHLqeXtffBhAANcWJWI91FIERFxMQsWhjDEqTZ88aUPfVxUkYh3UkgREXGDf/JPwgnP15wSX3x5mIcpRSk3VCbiPRRSRETcIJRQvuRLfP74yS0rVmpRizd4w43ViXgHhRQRETe5ndv5mq8JICBXq8/64EN96vMd3xFKaAFUKGJuCikiIm50D/ewgQ10pStWrFf0qlwOL2Uow7M8y0pWUprSnihVxHQshmEYni7C09LT0wkPDyctLY2wsDBPlyMihdRxjvMO7/ADP3CCEwQQQDTRdKUr7WmPH36eLlEkz9z5HaqQgkKKiIhIfrnzO1TDPSIiImJKCikiIiJiSgopIiIiYkoKKSIiImJKCikiIiJiSgopIiIiYkoKKSIiImJKCikiIiJiSgopIiIiYkoKKSIiImJKCikiIiJiSgopIiIiYkoKKSIiImJKCikiIiJiSgopIiIiYkoKKSIiImJKCikiIiJiSgopIiIiYkpWTxcgIlJYHec4X/AFRzlKBhlEEEFzmnMr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H+54npqaSsWKFTlw4IDLT7BcXXp6OuXLl+fgwYOEhYV5upwiQee84OmcFzyd84KXlpZGhQoVKFGihMvb9vqQUqpUKXx9fTl69GiO7UePHiUqKuqqrwkICCAgIOCK7eHh4fo/dQELCwvTOS9gOucFT+e84OmcFzwfH9dPc/X6ibP+/v40bNiQxMRExzabzUZiYiJxcXEerExERESc4fU9KQDDhw+nV69eNGrUiMaNG/P6669z7tw5+vTp4+nSREREJJ8KRUjp2rUrx48f55lnniElJYX69euzePHiKybTXktAQADPPvvsVYeAxD10zgueznnB0zkveDrnBc+d59xiuOOaIREREREnef2cFBERESmcFFJERETElBRSRERExJQUUkRERMSUinxIefPNN6lUqRKBgYE0adKEdevWebqkQmPChAnceuutFCtWjDJlytChQwd2796d45iLFy+SkJBAyZIlCQ0NpVOnTlcszCf5N3HiRCwWC0OHDnVs0zl3vcOHD/PQQw9RsmRJgoKCqFOnDhs2bHDsNwyDZ555hujoaIKCgoiPj2fv3r0erNi7ZWdnM2bMGGJjYwkKCuKmm27i+eefz3HvGJ1z53z//fe0b9+emJgYLBYLCxcuzLE/N+f31KlT9OjRg7CwMCIiIujXrx9nz57NWyFGETZv3jzD39/fmD17tvHTTz8Z/fv3NyIiIoyjR496urRCoXXr1sa7775r7Nixw9iyZYtx7733GhUqVDDOnj3rOOZf//qXUb58eSMxMdHYsGGDcdtttxlNmzb1YNWFx7p164xKlSoZdevWNR5//HHHdp1z1zp16pRRsWJFo3fv3kZSUpLx22+/GUuWLDF++eUXxzETJ040wsPDjYULFxpbt2417r//fiM2Nta4cOGCByv3XuPHjzdKlixpLFq0yEhOTjY+/fRTIzQ01HjjjTccx+icO+ebb74xRo8ebXz++ecGYCxYsCDH/tyc3zZt2hj16tUz1q5da/zwww9GlSpVjO7du+epjiIdUho3bmwkJCQ4nmdnZxsxMTHGhAkTPFhV4XXs2DEDMFauXGkYhmGkpqYafn5+xqeffuo4ZteuXQZgrFmzxlNlFgpnzpwxqlataixdutRo0aKFI6TonLve008/bTRv3vya+202mxEVFWW89NJLjm2pqalGQECA8fHHHxdEiYVOu3btjL59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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "render_history(new_state_history, skip_frames=skip_frames)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "### Refactor ideas\n", + "### Implement custom agents behaviors\n", "\n", - "--> Should also remove all the information about proximeters from physics engine (i.e physics engine only an util function to provide help for collisions ...). Think the best thing for an user would surely be to have a kind of file to define an environment (e.g EvoJax, JaxMARL) and import physics fn from physics engine (prox ... would be computed here, or user could define a different type of observation for tis agents). Can be wrapped within a simulator (doesn't wrap a state but an env that can step ...) Then in the simulator use run fns ... that call this step, save the simulation ...\n", - "The idea behind this is that wanna do RL / neurevolution only needs a step method, not the whole simulator class (but it is way more convenient to use the interface).\n", + "To implement custom agents behaviors, we need to set them to manual mode ..." + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [], + "source": [ + "# TODO \n", + "# - Implement custom behavior \n", "\n", - "--> Also something more general about agents observation, in braitenberg case they are sensors (could be vision ... right ?) Then we could have agents that have an obs field and \n", - "--> I think what would be interesting is having a field obs (like RL observation for agents, i.e the neighbor map the agents have). I think it is easier to rename it observation so it becomes pretty clear what is is about. " + "# To do so need:\n", + "# - proximter activations \n", + "# - neighbor map " ] }, { "cell_type": "markdown", "metadata": {}, "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Refactor ideas (just notes for me, will remove them from notebook)\n", + "\n", + "--> Should also remove all the information about proximeters from physics engine (i.e physics engine only an util function to provide help for collisions ...). Think the best thing for an user would surely be to have a kind of file to define an environment (e.g EvoJax, JaxMARL) and import physics fn from physics engine (prox ... would be computed here, or user could define a different type of observation for tis agents). Can be wrapped within a simulator (doesn't wrap a state but an env that can step ...) Then in the simulator use run fns ... that call this step, save the simulation ...\n", + "The idea behind this is that wanna do RL / neurevolution only needs a step method, not the whole simulator class (but it is way more convenient to use the interface).\n", + "\n", + "--> Also something more general about agents observation, in braitenberg case they are sensors (could be vision ... right ?) Then we could have agents that have an obs field and \n", + "--> I think what would be interesting is having a field obs (like RL observation for agents, i.e the neighbor map the agents have). I think it is easier to rename it observation so it becomes pretty clear what is is about. " + ] } ], "metadata": {