{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "CG189KKDfXax"
   },
   "source": [
    ">> ÁRBOLES, MORFOGÉNESIS y Evolución \n",
    ">>>>\n",
    ">>> José Rodríguez\n",
    ">>>>\n",
    ">>> jose@ejristos.com\n",
    ">>>>\n",
    ">>> 5 de Septiembre 2026.\n",
    ">>>>\n",
    ">>> Bogotá, Colombia.\n",
    "\n",
    "**Resumen**\n",
    "\n",
    "Las moscas domésticas (Musca domestica) son todas iguales en todo el mundo. Esto implica una enorme estabilidad de su morfología a pesar de la Evolución. Nuestra apuesta es que esto debe ser un resultado natural del mecanismo de reproducción. De hecho, la morfogénesis se logra mediante la reproducción celular, y esta es descrita por un árbol.  Como sabemos, los árboles filogenéticos tienen una fuerte reticencia a evolucionar, causada por la pleiotropía. Por eso, el propósito de esta contribución es proponer un modelo para la morfogénesis que se base en árboles y simularla.\n",
    "\n",
    "# INTRODUCCIÓN\n",
    "\n",
    "**El hijo de cebra sale rayado, y, en general, el hijo se parece al papá. A partir de este hecho de la naturaleza, inferimos que la morfogénesis debe incluir características heredables. Por lo tanto, la forma biológica debe estar escrita en el ADN de cada individuo y, por ello, sujeta a la Evolución.**\n",
    "\n",
    "¿De dónde sale la forma de un ser viviente?\n",
    "\n",
    "Supongamos lo mínimo: la forma resulta directamente de la reproducción celular.\n",
    "\n",
    "Una célula madre se divide y dos hijas resultan. Después de un tiempo, podría comenzar un nuevo ciclo de reproducción, en el que dos células se dividen. Y así sucesivamente. Por lo tanto, la división celular se describe mediante un árbol que debe ser actualizado después de cada evento reproductivo. Esperamos que este tipo de árboles también tengan una fuerte resistencia a evolucionar, como la que muestran los árboles filogenéticos. Si ese es el caso, inmediatamente tenemos una explicación de la tremenda estabilidad de la morfología de las moscas domésticas, que se ven iguales en todo el mundo. Por lo tanto, nuestro propósito global es estudiar la estabilidad de los árboles reproductivos frente a la Evolución. En este ensayo, proponemos varios modelos para la morfogénesis, los simulamos y elaboramos en un caso específico una predicción de su estabilidad evolutiva.\n",
    "\n",
    "Para empezar, aprendamos a codificar árboles en Python.\n",
    "\n",
    "## Árboles\n",
    "\n",
    "Le pedimos a Gemini:\n",
    ">\n",
    "> Ayúdanos con el código para un árbol cuyos nodos pueden tener muchos hijos que deben actualizarse de vez en cuando.\n",
    "\n",
    "Gemini insertó la respuesta en nuestro texto intercalando explicaciones y código.  El lector puede distinguir nuestros textos de los de Gemini por el contexto y los estilos correspondientes. Los programas pueden tener adaptaciones del autor. La más común era hacer programas autónomos y aislados de los demás. Esto causa redundancias pero evita muchos problemas si uno está haciendo cambios por rutina. La ventaja es que uno puede copiar cualquier programa y ejecutarlo en otro lugar. Para entender mejor el código, se puede pedir a Gemini que lo explique: haga clic en el programa, seleccione el pequeño segmento de código que desee explicar, mire dentro de la celda arriba a la derecha para ver un menú de tres puntos y elija 'Explicar el código'. \n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "cb4c5248"
   },
   "source": [
    "Se puede representar una estructura de árbol básica utilizando una clase de `Nodo`.  Cada `Nodo` tendrá un `valor` y una lista de `hijos`. Podemos implementar métodos para añadir hijos y atravesar el árbol, como en el siguiente programa que no produce ningún resultado:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "id": "c828a119"
   },
   "outputs": [],
   "source": [
    "# Program TreeNode1.py\n",
    "# Basic tree structure.\n",
    "# By Gemini\n",
    "\n",
    "class TreeNode1:\n",
    "    def __init__(self, value):\n",
    "        self.value = value\n",
    "        self.children = []\n",
    "\n",
    "    def add_child(self, child_node):\n",
    "        if not isinstance(child_node, TreeNode1):\n",
    "            raise TypeError(\"Child must be an instance of TreeNode\")\n",
    "        self.children.append(child_node)\n",
    "\n",
    "    def __repr__(self):\n",
    "        return f\"TreeNode(value={self.value}, children={[child.value for child in self.children]})\"\n",
    "\n",
    "    def update_value(self, new_value):\n",
    "        self.value = new_value\n",
    "\n",
    "    def get_child(self, value):\n",
    "        for child in self.children:\n",
    "            if child.value == value:\n",
    "                return child\n",
    "        return None\n",
    "\n",
    "if __name__ == \"__main__\":\n",
    "  # Create the root node\n",
    "  root = TreeNode1(\"Root\")\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "ffea9e39"
   },
   "source": [
    "Demostremos cómo crear un árbol, añadir hijos y actualizar el valor de un nodo. La actualización de la estructura del árbol en sí misma a menudo implica agregar o quitar hijos o volver a crear nodos."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "executionInfo": {
     "elapsed": 14,
     "status": "ok",
     "timestamp": 1788288304222,
     "user": {
      "displayName": "jose rodriguez",
      "userId": "08454562216435392883"
     },
     "user_tz": 300
    },
    "id": "5ddb838b",
    "outputId": "d9bdec74-9958-4358-bd35-799e211a2108"
   },
   "outputs": [],
   "source": [
    "# Program TreeNode2.py\n",
    "# A tree is created, children are added and values are updated.\n",
    "# By Gemini\n",
    "\n",
    "class TreeNode2:\n",
    "    def __init__(self, value):\n",
    "        self.value = value\n",
    "        self.children = []\n",
    "\n",
    "    def add_child(self, child_node):\n",
    "        if not isinstance(child_node, TreeNode2):\n",
    "            raise TypeError(\"Child must be an instance of TreeNode\")\n",
    "        self.children.append(child_node)\n",
    "\n",
    "    def __repr__(self):\n",
    "        return f\"TreeNode(value={self.value}, children={[child.value for child in self.children]})\"\n",
    "\n",
    "    def update_value(self, new_value):\n",
    "        self.value = new_value\n",
    "\n",
    "    def get_child(self, value):\n",
    "        for child in self.children:\n",
    "            if child.value == value:\n",
    "                return child\n",
    "        return None\n",
    "\n",
    "\n",
    "if __name__ == \"__main__\":\n",
    "  # Create the root node\n",
    "  root = TreeNode2(\"Root\")\n",
    "\n",
    "  # Add some children to the root\n",
    "  child1 = TreeNode2(\"Child 1\")\n",
    "  child2 = TreeNode2(\"Child 2\")\n",
    "  root.add_child(child1)\n",
    "  root.add_child(child2)\n",
    "\n",
    "  # Add a grandchild to Child 1\n",
    "  grandchild1_1 = TreeNode2(\"Grandchild 1.1\")\n",
    "  child1.add_child(grandchild1_1)\n",
    "\n",
    "  # Add another grandchild to Child 1\n",
    "  grandchild1_2 = TreeNode2(\"Grandchild 1.2\")\n",
    "  child1.add_child(grandchild1_2)\n",
    "\n",
    "  # Display the tree structure (simplified representation)\n",
    "  print(\"Initial Tree:\")\n",
    "  print(root)\n",
    "  print(root.children)\n",
    "  print(child1.children)\n",
    "\n",
    "  # Update a node's value\n",
    "  print(\"\\nUpdating Child 2's value...\")\n",
    "  child2.update_value(\"Updated Child 2\")\n",
    "  print(root)\n",
    "\n",
    "  # Add a new child to root (an 'update' to the tree structure)\n",
    "  print(\"\\nAdding a new child to Root...\")\n",
    "  child3 = TreeNode2(\"Child 3\")\n",
    "  root.add_child(child3)\n",
    "  print(root)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "puQjCUAjkkO3"
   },
   "source": [
    "**Ejercicio.** Ejecute el programa anterior y siga el resultado de añadir dos hijos a la raíz, que representa el cigoto, del cual resulta un organismo entero, o una célula madre que da origen a un órgano.\n",
    ">\n",
    "> *Respuesta.* El árbol fue creado con una raíz, dos hijos, 'Child 1' y 'Child 2', y dos nietos grandchild1_1 y grandchild1_2 que eran los descendientes de 'Child 1'. Luego, 'child3' se agregó a la raíz. El nombre de 'child 2' se cambió a 'Updated Child 2'.\n",
    "\n",
    "**Ejercicio.** Elimina 'grandchild1_2' y dale un hijo a 'child3'.\n",
    ">\n",
    "> *Respuesta.* En el siguiente programa se eliminó 'grandchild1_2', y se dio un hijo a 'child3'. La eliminación no estaba declarada, así que hicimos espacio para ella, insertamos un comentario de lo que se requería, y Colab desarrolló e insertó el código correspondiente."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "id": "dRu39m9QvPPU"
   },
   "outputs": [],
   "source": [
    "# Program TreeNode3.py\n",
    "# Enabling deletion of a node.\n",
    "# By Gemini\n",
    "\n",
    "class TreeNode3:\n",
    "    def __init__(self, value):\n",
    "        self.value = value\n",
    "        self.children = []\n",
    "\n",
    "    def add_child(self, child_node):\n",
    "        if not isinstance(child_node, TreeNode3):\n",
    "            raise TypeError(\"Child must be an instance of TreeNode\")\n",
    "        self.children.append(child_node)\n",
    "\n",
    "    def delete_child(self, child_node):\n",
    "        if not isinstance(child_node, TreeNode3):\n",
    "            raise TypeError(\"Child must be an instance of TreeNode\")\n",
    "        self.children.remove(child_node)\n",
    "\n",
    "    def __repr__(self):\n",
    "        return f\"TreeNode(value={self.value}, children={[child.value for child in self.children]})\"\n",
    "\n",
    "    def update_value(self, new_value):\n",
    "        self.value = new_value\n",
    "\n",
    "    def get_child(self, value):\n",
    "        for child in self.children:\n",
    "            if child.value == value:\n",
    "                return child\n",
    "        return None\n",
    "\n",
    "\n",
    "if __name__ == \"__main__\":\n",
    "  # Create the root node\n",
    "  root = TreeNode3(\"Root\")\n",
    "\n",
    "  # Add some children to the root\n",
    "  child1 = TreeNode3(\"Child 1\")\n",
    "  child2 = TreeNode3(\"Child 2\")\n",
    "  root.add_child(child1)\n",
    "  root.add_child(child2)\n",
    "\n",
    "  # Add a grandchild to Child 1\n",
    "  grandchild1_1 = TreeNode3(\"Grandchild 1.1\")\n",
    "  child1.add_child(grandchild1_1)\n",
    "\n",
    "  # Add another grandchild to Child 1\n",
    "  grandchild1_2 = TreeNode3(\"Grandchild 1.2\")\n",
    "  child1.add_child(grandchild1_2)\n",
    "\n",
    "  # Display the tree structure (simplified representation)\n",
    "  print(\"Initial Tree:\")\n",
    "  print(root)\n",
    "  print(root.children)\n",
    "  print(child1.children)\n",
    "\n",
    "  # Update a node's value\n",
    "  print(\"\\nUpdating Child 2's value...\")\n",
    "  child2.update_value(\"Updated Child 2\")\n",
    "  print(root)\n",
    "\n",
    "  # Add a new child to root (an 'update' to the tree structure)\n",
    "  print(\"\\nAdding a new child to Root...\")\n",
    "  child3 = TreeNode3(\"Child 3\")\n",
    "  root.add_child(child3)\n",
    "  print(root)\n",
    "\n",
    "  # Add a new child to child3\n",
    "  print(\"\\nAdding a new child to Child 3...\")\n",
    "  print(f\"Initial child3 {child3}\")\n",
    "  child4 = TreeNode3(\"Child 4\")\n",
    "  child3.add_child(child4)\n",
    "  print(f\"final child3 {child3}\")\n",
    "\n",
    "  # Delete 'grandchild1_2'\n",
    "  print(\"\\nDeleting 'Grandchild 1.2' from Child 1...\")\n",
    "  print(f\"Initial child1 {child1}\")\n",
    "  grandchild1_2 = child1.get_child(\"Grandchild 1.2\")\n",
    "  child1.delete_child(grandchild1_2)\n",
    "  print(f\"final child1 {child1}\")\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "-gHiv_ETylmP"
   },
   "source": [
    "Necesitamos árboles generados al azar. Así que le preguntamos a Gemini:\n",
    ">\n",
    "> Por favor, el código para un árbol aleatorio, con un número aleatorio de hijos en cada nodo.\n",
    ">\n",
    "> Gemini propuso el código siguiente. El parametro `max_depth` representa el máximo número de divisones celulares que cualquier rama puede tener.  \n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "id": "e8e6c977"
   },
   "outputs": [],
   "source": [
    "# Program randomTree.py\n",
    "# A random tree, with a random number of children at each node.\n",
    "# By Gemini\n",
    "\n",
    "import random\n",
    "\n",
    "class TreeNode4:\n",
    "    def __init__(self, value):\n",
    "        self.value = value\n",
    "        self.children = []\n",
    "\n",
    "    def add_child(self, child_node):\n",
    "        if not isinstance(child_node, TreeNode4):\n",
    "            raise TypeError(\"Child must be an instance of TreeNode\")\n",
    "        self.children.append(child_node)\n",
    "\n",
    "    def delete_child(self, child_node):\n",
    "        if not isinstance(child_node, TreeNode4):\n",
    "            raise TypeError(\"Child must be an instance of TreeNode\")\n",
    "        self.children.remove(child_node)\n",
    "\n",
    "    def __repr__(self):\n",
    "        return f\"TreeNode(value={self.value}, children={[child.value for child in self.children]})\"\n",
    "\n",
    "    def update_value(self, new_value):\n",
    "        self.value = new_value\n",
    "\n",
    "    def get_child(self, value):\n",
    "        for child in self.children:\n",
    "            if child.value == value:\n",
    "                return child\n",
    "        return None\n",
    "\n",
    "\n",
    "def generate_random_tree4(max_depth, max_children, current_depth=0, node_prefix=\"Node\"):\n",
    "    \"\"\"\n",
    "    Generates a random tree using the TreeNode class.\n",
    "\n",
    "    Args:\n",
    "        max_depth (int): The maximum depth of the tree.\n",
    "        max_children (int): The maximum number of children a node can have.\n",
    "        current_depth (int): The current depth of the node being created (for internal use).\n",
    "        node_prefix (str): A prefix for the node values.\n",
    "\n",
    "    Returns:\n",
    "        TreeNode: The root of the randomly generated tree.\n",
    "    \"\"\"\n",
    "    # Create a node with a random value\n",
    "    node_value = f\"{node_prefix}_{current_depth}_{random.randint(0, 100)}\"\n",
    "    node = TreeNode4(node_value)\n",
    "\n",
    "    if current_depth < max_depth:\n",
    "        # Randomly decide how many children this node will have\n",
    "        num_children = random.randint(0, max_children)\n",
    "\n",
    "        for _ in range(num_children):\n",
    "            child = generate_random_tree4(\n",
    "                max_depth, max_children, current_depth + 1, node_prefix\n",
    "            )\n",
    "            node.add_child(child)\n",
    "    return node\n",
    "\n",
    "def print_tree4(node, level=0):\n",
    "    \"\"\"\n",
    "    Helper function to print the tree structure.\n",
    "    \"\"\"\n",
    "    indent = \"  \" * level\n",
    "    print(f\"{indent}- {node.value}\")\n",
    "    for child in node.children:\n",
    "        print_tree4(child, level + 1)\n",
    "\n",
    "# Let's generate a random tree with a maximum depth of 3\n",
    "# and a maximum of 2 children per node,\n",
    "# and then print its structure.\n",
    "if __name__ == \"__main__\":\n",
    "  random_tree_root = generate_random_tree4(max_depth=3, max_children=2)\n",
    "  print(\"Generated Random Tree:\")\n",
    "  print_tree4(random_tree_root)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "EB4hnnzZGcxH"
   },
   "source": [
    "**Ejercicio.** Ejecuta el programa anterior varias veces y asegúrate de que puedes asignar un nodo derivado a su verdadero padre.\n",
    ">\n",
    "> *Respuesta.* Los nodos se imprimen por niveles, por generaciones de división delular o profundidad, y para descubrir el padre de un nodo, uno mira hacia arriba desde el primer nivel a la izquierda.\n",
    "\n",
    "Pasemos ahora a considerar un primer modelo de morfogénesis.\n",
    "\n",
    "# EL MODELO DE IMPRESIÓN\n",
    "\n",
    "Suponemos que la forma biológica es un resultado directo de una modulación del proceso reproductivo celular. Nuestro primer intento de modelar la morfogénesis es el postulado de que cada célula se posiciona según un diseño preestablecido. Así es precisamente como funcionan las impresoras 3D. Este es el modelo de impresión. Lo simularemos en 2D, dos dimensiones. Tomaremos celdas del mismo tamaño, y ocuparán un cuadrado unitario que se puede posicionar en cualquier punto con coordenadas enteras.\n",
    "\n",
    "Los elementos básicos para simular la morfogénesis son los siguientes:\n",
    "\n",
    "1.   El proceso reproductivo está escrito en los árboles reproductivos usados arriba.\n",
    "2.   La forma está dictada por la posición de los hijos. Esto se definirá mediante el siguiente procedimiento:\n",
    "> 1. Cada cuadrado unitario, de anchura 1, está determinado por su esquina inferior izquierda. Esta esquina se llama el *punto de anclaje*. Así, el cuadrado que está en el origen de las coordenadas y se extiende hacia el primer cuadrante es determinado por el punto de anclaje $(0,0)$. Por otro lado, el punto de anclaje $(3,2)$ define el cuadrado con los vértices $(3,2), (4,2), (4,3), (3,3)$.\n",
    "> 2. Cada cuadrado tiene 8 cuadrados vecinos. Por ejemplo, los puntos de anclaje de todos los cuadrados vecinos de $(5,8)$ son: $(4,7), (5,7), (6,7), (4,8), (6,8), (4,9), (5,9),  (6,9)$.\n",
    "\n",
    "**Ejercicio.** Para un punto de anclaje dado $(x,y)$, que determina una unidad cuadrada que se expande hacia la derecha y hacia arriba, desarrolle un procedimiento automático para generar los vértices que definen el cuadrado.\n",
    ">\n",
    "> *Respuesta.* Las esquinas del cuadrado de ancho uno generado por el punto de anclaje $(x,y)$ son: $(x,y), (x+1,y), (x+1,y+1), (x,y+1)$, así que el procedimiento es $(x+c, y + d)$, donde $c$ y $d$ pueden ser  $0$ $1$.\n",
    "\n",
    "**Ejercicio.** Para un punto dado $(x,y)$, que determina un cuadrado de ancho 1 que se expande hacia la derecha y hacia arriba, desarrollar un procedimiento automático para generar todos los puntos de anclaje que generan todos los cuadrados vecinos.\n",
    ">\n",
    "> *Respuesta.* Las esquinas de los cuadrados unitarios que rodean al cuadrado determinados por el punto de anclaje  $(x,y)$ están definidas por la expresión $(x+c, y + d)$, donde $c$ y $d$ pueden ser $-1, 0, 1$. Este procedimiento devuelve 9 puntos porque el punto original ya está incluido con la opción $c = d = 0$. Por lo tanto, esta opción debe ser excluida para generar los vecinos.\n",
    "\n",
    " ¿Cómo podemos conectar las células cuadradas del plano a los árboles?\n",
    "\n",
    "Necesitamos esto porque el proceso de reproducción se mantiene en los árboles mientras las células existen y se reproducen como un cuadrado en el plano. Nuestra conexión será la siguiente:\n",
    "\n",
    "1. La célula madre se divide y da origen a dos células. Una de ellas permanece en el mismo lugar de la madre, y la segunda debe ocupar una plaza vecina.  En resumen, una división celular está representada por   $madre \\rightarrow (madre, hijo)$.\n",
    "2. El hijo migra y rellena la plaza vecina que está dictada por una dirección que se le dio de antemano.\n",
    "\n",
    "\n",
    "**Definición.** Un árbol **morfológico** o **espacial** es un árbol que genera una trama en el plano que representa un proceso reproductivo. Hemos estado trabajando con árboles espaciales 2D que generan un gráfico en el plano en el que las células están representadas por cuadrados unitarios.\n",
    "\n",
    "**Ejercicio.** Desarrollar el código correspondiente para la tarea que conecta los cuadrados a los árboles.\n",
    ">\n",
    "> *Respuesta.* Le preguntamos a Colab:\n",
    ">\n",
    "> El código que extiende la clase de árbol para incluir las coordenadas $(x,y)$ de la esquina inferior izquierda de un cuadrado en el plano, junto con las coordenadas $(x+c,y+d)$ de la esquina inferior izquierda de un cuadrado vecino que se elige al azar. Un ejemplo de uso con un gráfico en el plano.\n",
    ">>>\n",
    ">> Gemini respondió:\n",
    ">>> Bien, aquí está el código que extiende la clase de árbol para incluir coordenadas espaciales para cuadrados y genera hijos en cuadrados aleatorios vecinos, completo con una representación gráfica.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "id": "JWwTg4FgZGX9"
   },
   "outputs": [],
   "source": [
    "# # Program tree_directs_morphogenesis.py\n",
    "# Extends the tree class to include spatial coordinates\n",
    "# for squares and generates children in random neighboring squares,\n",
    "# complete with a graphical representation.\n",
    "# By Gemini\n",
    "\n",
    "import random\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "\n",
    "# Building upon the previous TreeNode classes, let's create a SpatialTreeNode\n",
    "class SpatialTreeNode:\n",
    "    def __init__(self, value, x, y):\n",
    "        self.value = value\n",
    "        self.x = x\n",
    "        self.y = y\n",
    "        self.children = []\n",
    "\n",
    "    def add_child(self, child_node):\n",
    "        if not isinstance(child_node, SpatialTreeNode):\n",
    "            raise TypeError(\"Child must be an instance of SpatialTreeNode\")\n",
    "        self.children.append(child_node)\n",
    "\n",
    "    def get_neighboring_coordinates(self):\n",
    "        neighbors = []\n",
    "        # Iterate through all 9 possible combinations (including self)\n",
    "        for dx in [-1, 0, 1]:\n",
    "            for dy in [-1, 0, 1]:\n",
    "                if dx == 0 and dy == 0:\n",
    "                    continue  # Exclude the current square itself\n",
    "                neighbors.append((self.x + dx, self.y + dy))\n",
    "        return neighbors\n",
    "\n",
    "    def add_child_in_random_neighbor(self, child_value_prefix):\n",
    "        available_neighbors = self.get_neighboring_coordinates()\n",
    "        if not available_neighbors:\n",
    "            print(f\"No available neighbors for {self.value} at ({self.x},{self.y})\")\n",
    "            return None\n",
    "\n",
    "        # Choose a random neighbor\n",
    "        nx, ny = random.choice(available_neighbors)\n",
    "\n",
    "        # Create a new child node with the chosen coordinates\n",
    "        child_value = f\"{child_value_prefix}_{len(self.children) + 1}\"\n",
    "        child_node = SpatialTreeNode(child_value, nx, ny)\n",
    "        self.add_child(child_node)\n",
    "        return child_node\n",
    "\n",
    "    def __repr__(self):\n",
    "        return f\"SpatialTreeNode(value={self.value}, x={self.x}, y={self.y}, children={[child.value for child in self.children]}\"\n",
    "    def update_value(self, new_value):\n",
    "        self.value = new_value\n",
    "\n",
    "# Example Usage with Graphics\n",
    "if __name__ == \"__main__\":\n",
    "    # Create a root node (mother cell) at (0,0)\n",
    "    root_cell = SpatialTreeNode(\"Mother Cell\", 0, 0)\n",
    "    print(f\"Root Cell: {root_cell}\")\n",
    "\n",
    "    # Simulate cell division: Mother cell stays, child moves to a random neighbor\n",
    "    child1 = root_cell.add_child_in_random_neighbor(\"Child\")\n",
    "    if child1:\n",
    "        print(f\"First Child: {child1}\")\n",
    "\n",
    "    # Another division from the root\n",
    "    child2 = root_cell.add_child_in_random_neighbor(\"Child\")\n",
    "    if child2:\n",
    "        print(f\"Second Child: {child2}\")\n",
    "\n",
    "    # A child can also divide\n",
    "    if child1:\n",
    "        grandchild1_1 = child1.add_child_in_random_neighbor(\"Grandchild\")\n",
    "        if grandchild1_1:\n",
    "            print(f\"Grandchild from Child1: {grandchild1_1}\")\n",
    "\n",
    "    # Plotting the squares\n",
    "    fig, ax = plt.subplots(figsize=(8, 8))\n",
    "    ax.set_aspect('equal', adjustable='box')\n",
    "\n",
    "    # Function to draw a square\n",
    "    def draw_square(ax, x, y, color='blue', alpha=0.7, label=None):\n",
    "        rect = plt.Rectangle((x, y), 1, 1, facecolor=color, alpha=alpha, edgecolor='black', linewidth=1)\n",
    "        ax.add_patch(rect)\n",
    "        if label:\n",
    "            ax.text(x + 0.5, y + 0.5, label, ha='center', va='center', color='white', fontsize=8)\n",
    "\n",
    "    # Function to recursively draw the tree nodes\n",
    "    def plot_tree_nodes(node, ax):\n",
    "        draw_square(ax, node.x, node.y, color='skyblue', label=node.value)\n",
    "        for child in node.children:\n",
    "            draw_square(ax, child.x, child.y, color='lightcoral', label=child.value)\n",
    "            # Draw a line connecting parent to child (from center of squares)\n",
    "            ax.plot([node.x + 0.5, child.x + 0.5], [node.y + 0.5, child.y + 0.5], 'k--')\n",
    "            plot_tree_nodes(child, ax) # Recursively plot children\n",
    "\n",
    "    plot_tree_nodes(root_cell, ax)\n",
    "\n",
    "    # Set plot limits based on the occupied squares\n",
    "    all_coords = []\n",
    "    def collect_coords(node):\n",
    "        all_coords.append((node.x, node.y))\n",
    "        for child in node.children:\n",
    "            collect_coords(child)\n",
    "\n",
    "    collect_coords(root_cell)\n",
    "\n",
    "    min_x = min(c[0] for c in all_coords) - 1\n",
    "    max_x = max(c[0] for c in all_coords) + 2\n",
    "    min_y = min(c[1] for c in all_coords) - 1\n",
    "    max_y = max(c[1] for c in all_coords) + 2\n",
    "\n",
    "    ax.set_xlim(min_x, max_x)\n",
    "    ax.set_ylim(min_y, max_y)\n",
    "    ax.set_xticks(range(int(min_x), int(max_x)))\n",
    "    ax.set_yticks(range(int(min_y), int(max_y)))\n",
    "    ax.grid(True)\n",
    "    ax.set_title(\"Tree of Spatially Arranged Cells\")\n",
    "    plt.xlabel(\"X Coordinate\")\n",
    "    plt.ylabel(\"Y Coordinate\")\n",
    "    plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "H_G5T_TQcnuh"
   },
   "source": [
    "**Ejercicio.** Mejorar el código ofrecido por Gemini. Hay dos problemas. Primero. El editor de Python encuentra un error en relación con el rectángulo, y el gráfico tiene dos mensajes superpuestos.\n",
    ">\n",
    "> *Answer.*  El siguiente programa reproduce el código anterior pero resuelve el problema con el rectángulo y con la superposición de mensajes en el gráfico. El problema con el rectángulo se resolvió importando el rectángulo no directamente desde `matplotlib`, sino desde una subbiblioteca, `patches`. El problema de la reescritura se debió al hecho de que el nieto ocupa la misma plaza que la madre. Por lo tanto, se descartó esa posibilidad."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "id": "wLvTHaMJdS7U"
   },
   "outputs": [],
   "source": [
    "# Program tree_directs_morphogenesis2.py\n",
    "# Extends the tree class to include spatial coordinates\n",
    "# for squares and generates children in random neighboring squares,\n",
    "# complete with a graphical representation.\n",
    "# By Gemini and with the help of Google.\n",
    "\n",
    "import random\n",
    "import matplotlib.pyplot as plt\n",
    "import matplotlib.patches as patches\n",
    "\n",
    "# Building upon the previous TreeNode classes, let's create a SpatialTreeNode\n",
    "class SpatialTreeNode2:\n",
    "    def __init__(self, value, x, y):\n",
    "        self.value = value # name\n",
    "        self.x = x #x-coordinate of the anchor corner\n",
    "        self.y = y #y-coordinate of the anchor corner\n",
    "        self.children = []\n",
    "\n",
    "    def add_child(self, child_node):\n",
    "        if not isinstance(child_node, SpatialTreeNode2):\n",
    "            raise TypeError(\"Child must be an instance of SpatialTreeNode\")\n",
    "        self.children.append(child_node)\n",
    "\n",
    "    def get_neighboring_coordinates(self):\n",
    "        neighbors = []\n",
    "        # Iterate through all 9 possible combinations (including self)\n",
    "        for dx in [-1, 0, 1]:\n",
    "            for dy in [-1, 0, 1]:\n",
    "                if dx == 0 and dy == 0:\n",
    "                    continue  # Exclude the current square itself\n",
    "                neighbors.append((self.x + dx, self.y + dy))\n",
    "        return neighbors\n",
    "\n",
    "    # Traverse the tree and collect all coordinates\n",
    "    def collect_coords(self):\n",
    "        all_coords = []\n",
    "        all_coords.append((self.x, self.y))\n",
    "        for child in self.children:\n",
    "            all_coords.extend(child.collect_coords())\n",
    "        return all_coords\n",
    "\n",
    "\n",
    "    def add_child_in_random_neighbor(self, child_value_prefix):\n",
    "        coordinates_neighbors = self.get_neighboring_coordinates()\n",
    "        # Populated squares must be excluded\n",
    "        all_coords = self.collect_coords()\n",
    "        print(f\"All coordinates: {all_coords}\")\n",
    "        available_neighbors = [coord for coord in coordinates_neighbors if coord not in all_coords]\n",
    "        print(f\"Available neighbors: {available_neighbors}\")\n",
    "        if not available_neighbors:\n",
    "            print(f\"No available neighbors for {self.value} at ({self.x},{self.y})\")\n",
    "            return None\n",
    "\n",
    "        # Choose a random neighbor\n",
    "        nx, ny = random.choice(available_neighbors)\n",
    "\n",
    "        # Create a new child node with the chosen coordinates\n",
    "        child_value = f\"{child_value_prefix}_{len(self.children) + 1}\"\n",
    "        child_node = SpatialTreeNode2(child_value, nx, ny)\n",
    "        self.add_child(child_node)\n",
    "        return child_node\n",
    "\n",
    "    def __repr__(self):\n",
    "        return f\"SpatialTreeNode(value={self.value}, x={self.x}, y={self.y}, children={[child.value for child in self.children]}\"\n",
    "\n",
    "    def update_value(self, new_value):\n",
    "        self.value = new_value\n",
    "\n",
    "# Example Usage with Graphics\n",
    "if __name__ == \"__main__\":\n",
    "    # Create a root node (mother cell) at (0,0)\n",
    "    root_cell = SpatialTreeNode2(\"Mother Cell\", 0, 0)\n",
    "    print(f\"Root Cell: {root_cell}\")\n",
    "\n",
    "    # Simulate cell division: Mother cell stays, child moves to a random neighbor\n",
    "    child1 = root_cell.add_child_in_random_neighbor(\"Child\")\n",
    "    if child1:\n",
    "        print(f\"First Child: {child1}\")\n",
    "\n",
    "    # Another division from the root\n",
    "    child2 = root_cell.add_child_in_random_neighbor(\"Child\")\n",
    "    if child2:\n",
    "        print(f\"Second Child: {child2}\")\n",
    "\n",
    "    # A child can also divide\n",
    "    if child1:\n",
    "        grandchild1_1 = child1.add_child_in_random_neighbor(\"Grandchild\")\n",
    "        if grandchild1_1:\n",
    "            print(f\"Grandchild from Child1: {grandchild1_1}\")\n",
    "\n",
    "    # Plotting the squares\n",
    "    fig, ax = plt.subplots(figsize=(8, 8))\n",
    "    ax.set_aspect('equal', adjustable='box')\n",
    "\n",
    "    # Function to draw a square\n",
    "    def draw_square2(ax, x, y, color='blue', alpha=0.7, label=None):\n",
    "        # Correction by Google + corresponding import\n",
    "        rect = patches.Rectangle((x, y), 1, 1, facecolor=color, alpha=alpha, edgecolor='black', linewidth=1)\n",
    "        ax.add_patch(rect)\n",
    "        if label:\n",
    "            ax.text(x + 0.5, y + 0.5, label, ha='center', va='center', color='white', fontsize=8)\n",
    "\n",
    "    # Function to recursively draw the tree nodes\n",
    "    def plot_tree_nodes2(node, ax):\n",
    "        draw_square2(ax, node.x, node.y, color='skyblue', label=node.value)\n",
    "        for child in node.children:\n",
    "            draw_square2(ax, child.x, child.y, color='lightcoral', label=child.value)\n",
    "            # Draw a line connecting parent to child (from center of squares)\n",
    "            ax.plot([node.x + 0.5, child.x + 0.5], [node.y + 0.5, child.y + 0.5], 'k--')\n",
    "            plot_tree_nodes2(child, ax) # Recursively plot children\n",
    "\n",
    "    plot_tree_nodes2(root_cell, ax)\n",
    "\n",
    "    # Set plot limits based on the occupied squares\n",
    "    all_coords = []\n",
    "    def collect_coords2(node):\n",
    "        all_coords.append((node.x, node.y))\n",
    "        for child in node.children:\n",
    "            collect_coords2(child)\n",
    "\n",
    "    collect_coords2(root_cell)\n",
    "\n",
    "    min_x = min(c[0] for c in all_coords) - 1\n",
    "    max_x = max(c[0] for c in all_coords) + 2\n",
    "    min_y = min(c[1] for c in all_coords) - 1\n",
    "    max_y = max(c[1] for c in all_coords) + 2\n",
    "\n",
    "    ax.set_xlim(min_x, max_x)\n",
    "    ax.set_ylim(min_y, max_y)\n",
    "    ax.set_xticks(range(int(min_x), int(max_x)))\n",
    "    ax.set_yticks(range(int(min_y), int(max_y)))\n",
    "    ax.grid(True)\n",
    "    ax.set_title(\"Tree of Spatially Arranged Cells\")\n",
    "    plt.xlabel(\"X Coordinate\")\n",
    "    plt.ylabel(\"Y Coordinate\")\n",
    "    plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "hsJN-CJ77Jw2"
   },
   "source": [
    "**Ejercicio.** Juega con el código anterior para determinar si es correcto.\n",
    ">\n",
    ">*Respuesta.* El código no es correcto porque un cuadrado a veces está ocupado por dos nodos. Esto no puede ser porque dos células en un tejido biológico siempre ocupan diferentes regiones espaciales.\n",
    "\n",
    "**Ejercicio.** Corrige el problema de la superposición de las células.\n",
    ">\n",
    "> *Respuesta.* El problema de la superposición de celdas se debe al hecho de que las direcciones de las celdas ocupadas no se recogen correctamente.  Así que le preguntamos a Gemini:\n",
    ">\n",
    "> Ejemplo de recorrer el árbol para recoger todas las coordenadas.\n",
    ">\n",
    "> Gemini desarrolló el siguiente ejemplo:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "id": "WicQxi6yf-lU"
   },
   "outputs": [],
   "source": [
    "# Program traversing_the_tree.py\n",
    "# Example of traversing the tree to collect all coordinates\n",
    "# By Gemini\n",
    "\n",
    "import random\n",
    "\n",
    "class SpatialTreeNode3:\n",
    "    def __init__(self, value, x, y):\n",
    "        self.value = value\n",
    "        self.x = x\n",
    "        self.y = y\n",
    "        self.children = []\n",
    "\n",
    "    def add_child(self, child_node):\n",
    "        if not isinstance(child_node, SpatialTreeNode3):\n",
    "            raise TypeError(\"Child must be an instance of SpatialTreeNode\")\n",
    "        self.children.append(child_node)\n",
    "\n",
    "    def get_neighboring_coordinates(self):\n",
    "        neighbors = []\n",
    "        for dx in [-1, 0, 1]:\n",
    "            for dy in [-1, 0, 1]:\n",
    "                if dx == 0 and dy == 0:\n",
    "                    continue\n",
    "                neighbors.append((self.x + dx, self.y + dy))\n",
    "        return neighbors\n",
    "\n",
    "    def collect_coords(self):\n",
    "        all_coords = [(self.x, self.y)]\n",
    "        for child in self.children:\n",
    "            all_coords.extend(child.collect_coords())\n",
    "        return all_coords\n",
    "\n",
    "    def add_child_in_random_neighbor(self, child_value_prefix):\n",
    "        coordinates_neighbors = self.get_neighboring_coordinates()\n",
    "        # To prevent duplicates in this example, we'll quickly collect existing coords\n",
    "        # In a full run, collect_coords would be called from the root.\n",
    "        existing_coords = set(self.collect_coords())\n",
    "        available_neighbors = [coord for coord in coordinates_neighbors if coord not in existing_coords]\n",
    "\n",
    "        if not available_neighbors:\n",
    "            print(f\"No available neighbors for {self.value} at ({self.x},{self.y})\")\n",
    "            return None\n",
    "\n",
    "        nx, ny = random.choice(available_neighbors)\n",
    "        child_value = f\"{child_value_prefix}_{len(self.children) + 1}\"\n",
    "        child_node = SpatialTreeNode3(child_value, nx, ny)\n",
    "        self.add_child(child_node)\n",
    "        return child_node\n",
    "\n",
    "    def __repr__(self):\n",
    "        return f\"SpatialTreeNode(value={self.value}, x={self.x}, y={self.y}, children={[child.value for child in self.children]})\"\n",
    "\n",
    "# Example of traversing the tree to collect all coordinates\n",
    "\n",
    "# Create a root node\n",
    "root_cell = SpatialTreeNode3(\"Root\", 0, 0)\n",
    "\n",
    "# Add some children and grandchildren to demonstrate traversal\n",
    "child_a = SpatialTreeNode3(\"Child A\", 1, 0)\n",
    "root_cell.add_child(child_a)\n",
    "\n",
    "child_b = SpatialTreeNode3(\"Child B\", 0, 1)\n",
    "root_cell.add_child(child_b)\n",
    "\n",
    "grandchild_a1 = SpatialTreeNode3(\"Grandchild A1\", 2, 0)\n",
    "child_a.add_child(grandchild_a1)\n",
    "\n",
    "grandchild_b1 = SpatialTreeNode3(\"Grandchild B1\", -1, 1)\n",
    "child_b.add_child(grandchild_b1)\n",
    "\n",
    "grandgrandchild_a11 = SpatialTreeNode3(\"Grandgrandchild A11\", 3, 0)\n",
    "grandchild_a1.add_child(grandgrandchild_a11)\n",
    "\n",
    "print(f\"Tree structure:\\n{root_cell}\")\n",
    "print(f\"  Children of Root: {[c for c in root_cell.children]}\")\n",
    "print(f\"  Children of Child A: {[c for c in child_a.children]}\")\n",
    "print(f\"  Children of Child B: {[c for c in child_b.children]}\")\n",
    "print(f\"  Children of Grandchild A1: {[c for c in grandchild_a1.children]}\")\n",
    "print(f\"  Children of Grandchild B1: {[c for c in grandchild_b1.children]}\")\n",
    "\n",
    "# Collect all coordinates using the collect_coords method\n",
    "all_node_coordinates = root_cell.collect_coords()\n",
    "print(f\"\\nAll collected coordinates: {all_node_coordinates}\")\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "1UhRk_ZvnYtr"
   },
   "source": [
    "**Ejercicio.** Juega con el código para ver cómo resuelve el problema de la superposición de células. Observa el código para encontrar los cambios.\n",
    ">\n",
    "> *Respuesta.* Ejecutamos el programa y parecía estar bien. A continuación añadimos un grandgrandchild_a11, y no encontramos ningún problema. Por lo tanto, decidimos que está bien. El código tiene dos cambios. Primero: las coordenadas no se recogieron en una matriz sino en un conjunto para eliminar automáticamente los duplicados. Segundo: el método que recoge todas las coordenadas se mantuvo sin cambios pero ahora es llamado desde la root_cell, en la línea 83.\n",
    "\n",
    "**Ejercicio.** Incorpore los cambios observados en el programa general que conecta árboles a cuadrados en el plano.\n",
    ">\n",
    "> *Respuesta.* Intentamos hacer eso, pero fracasamos. Notamos que el procedimiento contable de recolección de celdas ocupadas se podía resolver mediante la eliminación del método `collect_coords` y añadiendo las coordenadas de cada celda justo después de su creación. Así que le preguntamos a Gemini:\n",
    ">\n",
    ">> Eliminar `collect_coords` y, en su lugar, recopilar las coordenadas de las celdas ocupadas justo después de la creación de cada nodo.\n",
    ">\n",
    "> Gemini respondió:\n",
    ">>>\n",
    ">> De acuerdo, modificaré el código para eliminar el método `collect_coords` y en su lugar gestionaré un conjunto global de coordenadas ocupadas, actualizándolo cada vez que se cree un nuevo nodo. Esto garantiza la consistencia y evita travesías redundantes.\n",
    ">>>\n",
    ">> El código se ejecuta con éxito. La célula raíz se creó en (0,0), y añadió con éxito hijos y un nieto en coordenadas vecinas únicas. También se generó un gráfico que visualiza la estructura del árbol. El problema de la superposición celular se ha abordado manteniendo un conjunto global de coordenadas ocupadas. El código sigue:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "id": "R-bYHK5Lqcgs"
   },
   "outputs": [],
   "source": [
    "# Program tree_directs_morphogenesis4.py\n",
    "# Extends the tree class to include spatial coordinates\n",
    "# for squares and generates children in random neighboring squares,\n",
    "# complete with a graphical representation.\n",
    "# By Gemini and with the help of Google.\n",
    "\n",
    "import random\n",
    "import matplotlib.pyplot as plt\n",
    "import matplotlib.patches as patches\n",
    "import numpy as np\n",
    "from numpy import array as Array\n",
    "\n",
    "# Global set to store all occupied coordinates\n",
    "occupied_coords = set()\n",
    "\n",
    "# Building upon the previous TreeNode classes, let's create a SpatialTreeNode\n",
    "\n",
    "class SpatialTreeNode4:\n",
    "    def __init__(self, value, x, y):\n",
    "        self.value = value # name\n",
    "        self.x = x #x-coordinate of the anchor corner\n",
    "        self.y = y #y-coordinate of the anchor corner\n",
    "        self.children = []\n",
    "        global occupied_coords\n",
    "        occupied_coords.add((x, y)) # Add current node's coordinates to the global set\n",
    "\n",
    "    def add_child(self, child_node):\n",
    "        if not isinstance(child_node, SpatialTreeNode4):\n",
    "            raise TypeError(\"Child must be an instance of SpatialTreeNode4\")\n",
    "        self.children.append(child_node)\n",
    "\n",
    "    def get_neighboring_coordinates(self):\n",
    "        neighbors = []\n",
    "        # Iterate through all 9 possible combinations (including self)\n",
    "        for dx in [-1, 0, 1]:\n",
    "            for dy in [-1, 0, 1]:\n",
    "                if dx == 0 and dy == 0:\n",
    "                    continue  # Exclude the current square itself\n",
    "                neighbors.append((self.x + dx, self.y + dy))\n",
    "        return neighbors\n",
    "\n",
    "    # Removed collect_coords method as per user request\n",
    "\n",
    "    def add_child_in_random_neighbor(self, child_value_prefix):\n",
    "        coordinates_neighbors = self.get_neighboring_coordinates()\n",
    "        # Use the global occupied_coords set to prevent duplicates\n",
    "        global occupied_coords\n",
    "        available_neighbors = [coord for coord in coordinates_neighbors if coord not in occupied_coords]\n",
    "\n",
    "        if not available_neighbors:\n",
    "            print(f\"No available neighbors for {self.value} at ({self.x},{self.y})\")\n",
    "            return None\n",
    "\n",
    "        nx, ny = random.choice(available_neighbors)\n",
    "        child_value = f\"{child_value_prefix}_{len(self.children) + 1}\"\n",
    "        child_node = SpatialTreeNode4(child_value, nx, ny)\n",
    "        self.add_child(child_node)\n",
    "        # The child's coordinates are added to occupied_coords in its __init__ method\n",
    "        return child_node\n",
    "\n",
    "    def __repr__(self):\n",
    "        return f\"SpatialTreeNode(value={self.value}, x={self.x}, y={self.y}, children={[child.value for child in self.children]})\"\n",
    "\n",
    "    def update_value(self, new_value):\n",
    "        self.value = new_value\n",
    "\n",
    "# Example Usage with Graphics\n",
    "if __name__ == \"__main__\":\n",
    "    # Clear global occupied_coords for each run in case of repeated execution\n",
    "    occupied_coords.clear()\n",
    "\n",
    "    # Create a root node (mother cell) at (0,0)\n",
    "    root_cell = SpatialTreeNode4(\"Mother Cell\", 0, 0)\n",
    "    print(f\"Root Cell: {root_cell}\")\n",
    "\n",
    "    # Simulate cell division: Mother cell stays, child moves to a random neighbor\n",
    "    child1 = root_cell.add_child_in_random_neighbor(\"Child\")\n",
    "    if child1:\n",
    "        print(f\"First Child: {child1}\")\n",
    "\n",
    "    # Another division from the root\n",
    "    child2 = root_cell.add_child_in_random_neighbor(\"Child\")\n",
    "    if child2:\n",
    "        print(f\"Second Child: {child2}\")\n",
    "\n",
    "    # A child can also divide\n",
    "    if child1:\n",
    "        grandchild1_1 = child1.add_child_in_random_neighbor(\"Grandchild\")\n",
    "        if grandchild1_1:\n",
    "            print(f\"Grandchild from Child1: {grandchild1_1}\")\n",
    "\n",
    "    # Plotting the squares\n",
    "    fig, ax = plt.subplots(figsize=(8, 8))\n",
    "    ax.set_aspect('equal', adjustable='box')\n",
    "\n",
    "    # Function to draw a square\n",
    "    def draw_square4(ax, x, y, color='blue', alpha=0.7, label=None):\n",
    "        # Correction by Google + corresponding import\n",
    "        rect = patches.Rectangle((x, y), 1, 1, facecolor=color, alpha=alpha, edgecolor='black', linewidth=1)\n",
    "        ax.add_patch(rect)\n",
    "        if label:\n",
    "            ax.text(x + 0.5, y + 0.5, label, ha='center', va='center', color='white', fontsize=8)\n",
    "\n",
    "    # Function to recursively draw the tree nodes\n",
    "    def plot_tree_nodes4(node, ax):\n",
    "        draw_square4(ax, node.x, node.y, color='skyblue', label=node.value)\n",
    "        for child in node.children:\n",
    "            draw_square4(ax, child.x, child.y, color='lightcoral', label=child.value)\n",
    "            # Draw a line connecting parent to child (from center of squares)\n",
    "            ax.plot([node.x + 0.5, child.x + 0.5], [node.y + 0.5, child.y + 0.5], 'k--')\n",
    "            plot_tree_nodes4(child, ax) # Recursively plot children\n",
    "\n",
    "    plot_tree_nodes4(root_cell, ax)\n",
    "\n",
    "    # Set plot limits based on the global occupied_coords set\n",
    "    if occupied_coords:\n",
    "        all_current_coords_list = list(occupied_coords)\n",
    "        all_current_coords_array = Array(all_current_coords_list)\n",
    "\n",
    "        min_x = min(c[0] for c in all_current_coords_array) - 1\n",
    "        max_x = max(c[0] for c in all_current_coords_array) + 2\n",
    "        min_y = min(c[1] for c in all_current_coords_array) - 1\n",
    "        max_y = max(c[1] for c in all_current_coords_array) + 2\n",
    "\n",
    "        ax.set_xlim(min_x, max_x)\n",
    "        ax.set_ylim(min_y, max_y)\n",
    "        ax.set_xticks(range(int(min_x), int(max_x)))\n",
    "        ax.set_yticks(range(int(min_y), int(max_y)))\n",
    "    else:\n",
    "        ax.set_xlim(-2, 2) # Default limits if no coordinates\n",
    "        ax.set_ylim(-2, 2)\n",
    "\n",
    "    ax.grid(True)\n",
    "    ax.set_title(\"Tree of Spatially Arranged Cells\")\n",
    "    plt.xlabel(\"X Coordinate\")\n",
    "    plt.ylabel(\"Y Coordinate\")\n",
    "    plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "AfI5q-Osxzpm"
   },
   "source": [
    "**Ejercicio.** Juega con el código para ver si es correcto. Detecta los cambios en la programación.\n",
    ">\n",
    "> *Respuesta.* Hemos ejecutado el programa más de 10 veces y no se detectó ningún error. Acordamos con Gemini que está bien. Cambios observados:\n",
    ">\n",
    ">> Las coordenadas de las celdas ocupadas se mantuvieron en un conjunto que fue declarado fuera de la clase `SpatialTreeNode4` como `occupied_coords`, línea 14. Se actualiza automáticamente en el instante de la creación de un nodo, línea 25. Se llama global en la línea 47. Se elimina de las coordenadas disponibles en la línea 48. Se utiliza para definir los límites del gráfico en la línea 116.\n",
    "\n",
    "Para el estudio de la Evolución necesitamos ampliar el programa anterior para cubrir árboles aleatorios arbitrarios.\n",
    "\n",
    "**Ejercicio.** Ampliar el programa anterior para cubrir árboles aleatorios con profundidad y número arbitrarios de hijos. Le dimos esta tarea a Gemini y su respuesta fue:\n",
    ">\n",
    "> ¡Por supuesto! Extenderé el programa para generar árboles espaciales aleatorios con una profundidad y un número de hijos arbitrarios. Esto implicará crear una nueva clase `SpatialTreeNode5` y una función recursiva para construir el árbol, asegurándose de que no haya superposición de celdas utilizando el conjunto global `occupied_coords`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "id": "CPuK0xfu5JNu"
   },
   "outputs": [],
   "source": [
    "# Program random_spatial_tree5.py\n",
    "# Extends the tree class to include spatial coordinates for squares\n",
    "# and generates children in random neighboring squares, complete with a graphical representation.\n",
    "# It creates random trees with arbitrary depth and number of children.\n",
    "# By Gemini and with the help of Google.\n",
    "\n",
    "import random\n",
    "import matplotlib.pyplot as plt\n",
    "import matplotlib.patches as patches\n",
    "import numpy as np\n",
    "from numpy import array as Array\n",
    "\n",
    "# Global set to store all occupied coordinates. This will be cleared before each tree generation.\n",
    "occupied_coords = set()\n",
    "\n",
    "class SpatialTreeNode5:\n",
    "    def __init__(self, value, x, y):\n",
    "        self.value = value\n",
    "        self.x = x\n",
    "        self.y = y\n",
    "        self.children = []\n",
    "        global occupied_coords\n",
    "        # Add current node's coordinates to the global set upon creation\n",
    "        occupied_coords.add((x, y))\n",
    "\n",
    "    def add_child(self, child_node):\n",
    "        if not isinstance(child_node, SpatialTreeNode5):\n",
    "            raise TypeError(\"Child must be an instance of SpatialTreeNode5\")\n",
    "        self.children.append(child_node)\n",
    "\n",
    "    def get_neighboring_coordinates(self):\n",
    "        neighbors = []\n",
    "        for dx in [-1, 0, 1]:\n",
    "            for dy in [-1, 0, 1]:\n",
    "                if dx == 0 and dy == 0:\n",
    "                    continue  # Exclude the current square itself\n",
    "                neighbors.append((self.x + dx, self.y + dy))\n",
    "        return neighbors\n",
    "\n",
    "    def add_child_in_random_neighbor(self, child_value_prefix):\n",
    "        coordinates_neighbors = self.get_neighboring_coordinates()\n",
    "        global occupied_coords\n",
    "        available_neighbors = [coord for coord in coordinates_neighbors if coord not in occupied_coords]\n",
    "\n",
    "        if not available_neighbors:\n",
    "            # print(f\"No available neighbors for {self.value} at ({self.x},{self.y})\")\n",
    "            return None\n",
    "\n",
    "        nx, ny = random.choice(available_neighbors)\n",
    "        child_value = f\"{child_value_prefix}_{len(self.children) + 1}\"\n",
    "        # Create a new child node, its coordinates will be added to occupied_coords in its __init__\n",
    "        child_node = SpatialTreeNode5(child_value, nx, ny)\n",
    "        self.add_child(child_node)\n",
    "        return child_node\n",
    "\n",
    "    def __repr__(self):\n",
    "        return f\"SpatialTreeNode5(value={self.value}, x={self.x}, y={self.y}, children={[child.value for child in self.children]})\"\n",
    "\n",
    "    def update_value(self, new_value):\n",
    "        self.value = new_value\n",
    "\n",
    "def generate_random_spatial_tree5(max_depth, max_children, current_depth=0, parent_node=None, node_prefix=\"Cell\"):\n",
    "    \"\"\"\n",
    "    Generates a random spatial tree using the SpatialTreeNode5 class.\n",
    "\n",
    "    Args:\n",
    "        max_depth (int): The maximum depth of the tree.\n",
    "        max_children (int): The maximum number of children a node can have.\n",
    "        current_depth (int): The current depth of the node being created (for internal use).\n",
    "        parent_node (SpatialTreeNode5, optional): The parent node to which new children will be added.\n",
    "                                                 If None, a root node is created at (0,0).\n",
    "        node_prefix (str): A prefix for the node values.\n",
    "\n",
    "    Returns:\n",
    "        SpatialTreeNode5: The root of the randomly generated tree.\n",
    "    \"\"\"\n",
    "    if parent_node is None:\n",
    "        # Create the root node at (0,0) if it's the initial call\n",
    "        node_value = f\"{node_prefix}_Root_{random.randint(0, 99)}\"\n",
    "        current_node = SpatialTreeNode5(node_value, 0, 0)\n",
    "    else:\n",
    "        # For children, the parent_node will attempt to add a child in a random neighbor\n",
    "        current_node = parent_node.add_child_in_random_neighbor(f\"{node_prefix}_{current_depth}\")\n",
    "        if current_node is None: # No available neighbors, terminate this branch\n",
    "            return None\n",
    "\n",
    "    if current_depth < max_depth:\n",
    "        num_children = random.randint(0, max_children) # Random number of children for this node\n",
    "        for _ in range(num_children):\n",
    "            # Recursively call for children, passing the current node as parent\n",
    "            generate_random_spatial_tree5(max_depth, max_children, current_depth + 1, current_node, node_prefix)\n",
    "\n",
    "    return current_node # Return the created node (root or child)\n",
    "\n",
    "def print_spatial_tree5(node, level=0):\n",
    "    \"\"\"\n",
    "    Helper function to print the spatial tree structure with coordinates.\n",
    "    \"\"\"\n",
    "    if node is None: # Handle cases where add_child_in_random_neighbor returns None\n",
    "        return\n",
    "    indent = \"  \" * level\n",
    "    print(f\"{indent}- {node.value} ({node.x},{node.y})\")\n",
    "    for child in node.children:\n",
    "        print_spatial_tree5(child, level + 1)\n",
    "\n",
    "# --- Plotting functions (reused from previous examples) ---\n",
    "def draw_square5(ax, x, y, color='blue', alpha=0.7, label=None):\n",
    "    rect = patches.Rectangle((x, y), 1, 1, facecolor=color, alpha=alpha, edgecolor='black', linewidth=1)\n",
    "    ax.add_patch(rect)\n",
    "    if label:\n",
    "        ax.text(x + 0.5, y + 0.5, label, ha='center', va='center', color='white', fontsize=8)\n",
    "\n",
    "def plot_tree_nodes5(node, ax, root_color='skyblue', child_color='lightcoral'):\n",
    "    if node is None: # Handle cases where the tree generation might return None\n",
    "        return\n",
    "    # Plot the current node\n",
    "    draw_square5(ax, node.x, node.y, color=root_color if node.value.startswith('Cell_Root') else child_color, label=node.value)\n",
    "    # Recursively plot children and draw lines\n",
    "    for child in node.children:\n",
    "        # Draw a line connecting parent to child (from center of squares)\n",
    "        ax.plot([node.x + 0.5, child.x + 0.5], [node.y + 0.5, child.y + 0.5], 'k--')\n",
    "        plot_tree_nodes5(child, ax, root_color, child_color) # Recursive call for children\n",
    "\n",
    "\n",
    "# --- Example Usage with Random Spatial Tree ---\n",
    "if __name__ == \"__main__\":\n",
    "    # Clear global occupied_coords for each run\n",
    "    occupied_coords.clear()\n",
    "\n",
    "    # Parameters for random tree generation\n",
    "    MAX_DEPTH = 3\n",
    "    MAX_CHILDREN_PER_NODE = 2\n",
    "\n",
    "    print(f\"Generating a random spatial tree with max_depth={MAX_DEPTH}, max_children_per_node={MAX_CHILDREN_PER_NODE}\")\n",
    "    random_spatial_tree_root = generate_random_spatial_tree5(max_depth=MAX_DEPTH, max_children=MAX_CHILDREN_PER_NODE)\n",
    "\n",
    "    if random_spatial_tree_root:\n",
    "        print(\"\\nGenerated Random Spatial Tree Structure:\")\n",
    "        print_spatial_tree5(random_spatial_tree_root)\n",
    "\n",
    "        # Plotting the squares\n",
    "        fig, ax = plt.subplots(figsize=(8, 8))\n",
    "        ax.set_aspect('equal', adjustable='box')\n",
    "\n",
    "        plot_tree_nodes5(random_spatial_tree_root, ax)\n",
    "\n",
    "        # Set plot limits based on the global occupied_coords set\n",
    "        if occupied_coords:\n",
    "            all_current_coords_list = list(occupied_coords)\n",
    "            all_current_coords_array = Array(all_current_coords_list)\n",
    "\n",
    "            min_x = min(c[0] for c in all_current_coords_array) - 1\n",
    "            max_x = max(c[0] for c in all_current_coords_array) + 2\n",
    "            min_y = min(c[1] for c in all_current_coords_array) - 1\n",
    "            max_y = max(c[1] for c in all_current_coords_array) + 2\n",
    "\n",
    "            ax.set_xlim(min_x, max_x)\n",
    "            ax.set_ylim(min_y, max_y)\n",
    "            ax.set_xticks(range(int(min_x), int(max_x)))\n",
    "            ax.set_yticks(range(int(min_y), int(max_y)))\n",
    "        else:\n",
    "            ax.set_xlim(-2, 2) # Default limits if no coordinates were added\n",
    "            ax.set_ylim(-2, 2)\n",
    "\n",
    "        ax.grid(True)\n",
    "        ax.set_title(\"Random Tree of Spatially Arranged Cells\")\n",
    "        plt.xlabel(\"X Coordinate\")\n",
    "        plt.ylabel(\"Y Coordinate\")\n",
    "        plt.show()\n",
    "    else:\n",
    "        print(\"Could not generate a spatial tree (e.g., no available neighbors for the root).\")\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "lS8S6WXb5xes"
   },
   "source": [
    "**Desafío.** Juega con el código para verificar que está bien.\n",
    "\n",
    "Ya sabemos cómo generar árboles morfológicos o espaciales aleatorios. Esto nos permite comenzar nuestro estudio de la Evolución, que comienza con la generación de una población de árboles generados al azar.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "uAAt7XIE_6q-"
   },
   "source": [
    "# SIMULACIÓN DE LA EVOLUCIÓN DE ÁRBOLES ESPACIALES 2D\n",
    "\n",
    "La Evolución y los árboles morfológicos están conectados de la siguiente manera:\n",
    "\n",
    "Las formas en biología no son, en general, caprichosas. Por el contrario, cumplen una misión, una función. Por ejemplo, mi cráneo protege mi cerebro, y mi extremo esférico del húmero en el hombro me permite mover el brazo en casi cualquier dirección. Según la Teoría de la Evolución, estas y todas las estructuras aparecieron por la Evolución, en la que una función habría aparecido y se habría ganado en la batalla por ser pasada a la siguiente generación. De esa manera y con el paso de las generaciones, la perfección resultó ser un deber de la naturaleza. Si examinamos el mecanismo detrás de la morfogénesis, tenemos:\n",
    "\n",
    "Todos los organismos se forman a partir de una sola célula, que para los mamíferos es el zigoto. Esta célula dispara un proceso reproductivo, representado por un árbol, que termina en la forma correspondiente. Nuestra apuesta es, por lo tanto: los árboles reproductivos dan lugar a patrones morfológicos. Esto equivale a una **predicción: los árboles morfológicos deben estar codificados como parte del genoma y ser transmitidos de padres a descendientes**.\n",
    "\n",
    "Ya sabemos cómo producir árboles morfológicos individuales en 2D. Para el estudio de la Evolución necesitamos una población de árboles arbitrarios.\n",
    "\n",
    "**Ejercicio.** Desarrollar el código para sintetizar una población de árboles aleatorios que determinan un patrón morfológico en el plano. Le pedimos ayuda a Gemini, y él insertó su propuesta en la siguiente subsección."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "Ts2qaB4gAIzO"
   },
   "source": [
    "### Generación de una población de árboles espaciales aleatorios\n",
    "\n",
    "Para crear una población de árboles, necesitamos modificar ligeramente la clase `SpatialTreeNode` y la función de generación de árboles. Cada árbol de la población debe generarse independientemente, ocupando su propio espacio sin solaparse con otros nodos *dentro del mismo árbol*. Sin embargo, al trazar la población completa, recopilaremos todas las coordenadas para asegurar que los límites del plano incluyan todos los árboles.\n",
    "\n",
    "Introduciremos un nuevo conjunto global, `overall_occupied_coords_for_plotting`, para recopilar todas las coordenadas de todos los árboles para los límites finales de la trama. Cada generación de árbol individual usará un conjunto `local_occupied_set` para gestionar su propio espacio. El método `SpatialTreeNode`s `__init__` actualizará los conjuntos locales y globales."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "id": "9806c644"
   },
   "outputs": [],
   "source": [
    "# Program random_spatial_tree_population.py\n",
    "# Generates a population of random spatial trees.\n",
    "# The entire population is plotted.\n",
    "# By Gemini.\n",
    "\n",
    "import random\n",
    "import matplotlib.pyplot as plt\n",
    "import matplotlib.patches as patches\n",
    "import numpy as np\n",
    "from numpy import array as Array\n",
    "\n",
    "# Global set to store all occupied coordinates from ALL trees for overall plot limits\n",
    "overall_occupied_coords_for_plotting = set()\n",
    "\n",
    "class SpatialTreeNode6:\n",
    "    def __init__(self, value, x, y, local_occupied_set):\n",
    "        self.value = value\n",
    "        self.x = x\n",
    "        self.y = y\n",
    "        self.children = []\n",
    "        # Add current node's coordinates to its local set upon creation\n",
    "        local_occupied_set.add((x, y))\n",
    "        # Also add to the global set for plotting the entire population\n",
    "        overall_occupied_coords_for_plotting.add((x, y))\n",
    "\n",
    "    def add_child(self, child_node):\n",
    "        if not isinstance(child_node, SpatialTreeNode6):\n",
    "            raise TypeError(\"Child must be an instance of SpatialTreeNode\")\n",
    "        self.children.append(child_node)\n",
    "\n",
    "    def get_neighboring_coordinates(self):\n",
    "        neighbors = []\n",
    "        for dx in [-1, 0, 1]:\n",
    "            for dy in [-1, 0, 1]:\n",
    "                if dx == 0 and dy == 0:\n",
    "                    continue  # Exclude the current square itself\n",
    "                neighbors.append((self.x + dx, self.y + dy))\n",
    "        return neighbors\n",
    "\n",
    "    def add_child_in_random_neighbor(self, child_value_prefix, local_occupied_set):\n",
    "        coordinates_neighbors = self.get_neighboring_coordinates()\n",
    "        available_neighbors = [coord for coord in coordinates_neighbors if coord not in local_occupied_set]\n",
    "\n",
    "        if not available_neighbors:\n",
    "            return None\n",
    "\n",
    "        nx, ny = random.choice(available_neighbors)\n",
    "        child_value = f\"{child_value_prefix}_{len(self.children) + 1}\"\n",
    "        # Pass the local_occupied_set to the child when creating it\n",
    "        child_node = SpatialTreeNode6(child_value, nx, ny, local_occupied_set)\n",
    "        self.add_child(child_node)\n",
    "        return child_node\n",
    "\n",
    "    def __repr__(self):\n",
    "        return f\"SpatialTreeNode(value={self.value}, x={self.x}, y={self.y}, children={[child.value for child in self.children]})\"\n",
    "\n",
    "    def update_value(self, new_value):\n",
    "        self.value = new_value\n",
    "\n",
    "def generate_random_spatial_tree6(max_depth, max_children, current_depth=0, parent_node=None, node_prefix=\"Cell\", local_occupied_set=None):\n",
    "    \"\"\"\n",
    "    Generates a random spatial tree using the SpatialTreeNode class.\n",
    "    Each tree generation uses a local_occupied_set to prevent self-overlap within the tree.\n",
    "\n",
    "    Args:\n",
    "        max_depth (int): The maximum depth of the tree.\n",
    "        max_children (int): The maximum number of children a node can have.\n",
    "        current_depth (int): The current depth of the node being created (for internal use).\n",
    "        parent_node (SpatialTreeNode, optional): The parent node to which new children will be added.\n",
    "                                                 If None, a root node is created at (0,0).\n",
    "        node_prefix (str): A prefix for the node values.\n",
    "        local_occupied_set (set, optional): A set tracking occupied coordinates for the current tree generation.\n",
    "                                          If None, a new set is initialized for the root.\n",
    "\n",
    "    Returns:\n",
    "        SpatialTreeNode: The root of the randomly generated tree.\n",
    "    \"\"\"\n",
    "    if local_occupied_set is None:\n",
    "        local_occupied_set = set() # Initialize a new set for this tree's generation\n",
    "\n",
    "    if parent_node is None:\n",
    "        # Create the root node at (0,0) if it's the initial call\n",
    "        node_value = f\"{node_prefix}_Root_{random.randint(0, 99)}\"\n",
    "        current_node = SpatialTreeNode6(node_value, 0, 0, local_occupied_set)\n",
    "    else:\n",
    "        # For children, the parent_node will attempt to add a child in a random neighbor\n",
    "        current_node = parent_node.add_child_in_random_neighbor(f\"{node_prefix}_{current_depth}\", local_occupied_set)\n",
    "        if current_node is None: # No available neighbors, terminate this branch\n",
    "            return None\n",
    "\n",
    "    if current_depth < max_depth:\n",
    "        num_children = random.randint(0, max_children) # Random number of children for this node\n",
    "        for _ in range(num_children):\n",
    "            # Recursively call for children, passing the current node as parent and the local_occupied_set\n",
    "            generate_random_spatial_tree6(max_depth, max_children, current_depth + 1, current_node, node_prefix, local_occupied_set)\n",
    "\n",
    "    return current_node # Return the created node (root or child)\n",
    "\n",
    "def print_spatial_tree6(node, level=0):\n",
    "    \"\"\"\n",
    "    Helper function to print the spatial tree structure with coordinates.\n",
    "    \"\"\"\n",
    "    if node is None:\n",
    "        return\n",
    "    indent = \"  \" * level\n",
    "    print(f\"{indent}- {node.value} ({node.x},{node.y})\")\n",
    "    for child in node.children:\n",
    "        print_spatial_tree6(child, level + 1)\n",
    "\n",
    "# --- Plotting functions (reused and slightly adapted from previous examples) ---\n",
    "def draw_square6(ax, x, y, color='blue', alpha=0.7, label=None):\n",
    "    rect = patches.Rectangle((x, y), 1, 1, facecolor=color, alpha=alpha, edgecolor='black', linewidth=1)\n",
    "    ax.add_patch(rect)\n",
    "    if label:\n",
    "        ax.text(x + 0.5, y + 0.5, label, ha='center', va='center', color='white', fontsize=8)\n",
    "\n",
    "def plot_tree_nodes6(node, ax, root_color='skyblue', child_color='lightcoral'):\n",
    "    if node is None:\n",
    "        return\n",
    "    # Plot the current node\n",
    "    draw_square6(ax, node.x, node.y, color=root_color if \"Root\" in node.value else child_color, label=node.value)\n",
    "    # Recursively plot children and draw lines\n",
    "    for child in node.children:\n",
    "        # Draw a line connecting parent to child (from center of squares)\n",
    "        ax.plot([node.x + 0.5, child.x + 0.5], [node.y + 0.5, child.y + 0.5], 'k--')\n",
    "        plot_tree_nodes6(child, ax, root_color, child_color) # Recursive call for children\n",
    "\n",
    "\n",
    "# --- Example Usage: Generating a Population of Random Spatial Trees ---\n",
    "if __name__ == \"__main__\":\n",
    "    # Clear the global occupied_coords set before generating the entire population\n",
    "    overall_occupied_coords_for_plotting.clear()\n",
    "\n",
    "    # Parameters for population and random tree generation\n",
    "    POPULATION_SIZE = 5\n",
    "    MAX_DEPTH_PER_TREE = 3\n",
    "    MAX_CHILDREN_PER_NODE = 2\n",
    "\n",
    "    tree_population = []\n",
    "    print(f\"Generating a population of {POPULATION_SIZE} random spatial trees:\")\n",
    "\n",
    "    for i in range(POPULATION_SIZE):\n",
    "        print(f\"\\n--- Generating Tree {i+1} ---\")\n",
    "        # Each tree generation starts with its own local_occupied_set to prevent self-overlap within itself\n",
    "        # The overall_occupied_coords_for_plotting will gather all coords from all trees.\n",
    "        random_tree_root = generate_random_spatial_tree6(\n",
    "            max_depth=MAX_DEPTH_PER_TREE,\n",
    "            max_children=MAX_CHILDREN_PER_NODE,\n",
    "            node_prefix=f\"Tree{i+1}_Cell\"\n",
    "        )\n",
    "\n",
    "        if random_tree_root:\n",
    "            tree_population.append(random_tree_root)\n",
    "            print_spatial_tree6(random_tree_root)\n",
    "        else:\n",
    "            print(f\"Could not generate Tree {i+1} (e.g., no available neighbors for its root).\")\n",
    "\n",
    "    # Plotting the entire population\n",
    "    if tree_population:\n",
    "        fig, ax = plt.subplots(figsize=(10, 10))\n",
    "        ax.set_aspect('equal', adjustable='box')\n",
    "\n",
    "        for tree_root in tree_population:\n",
    "            plot_tree_nodes6(tree_root, ax)\n",
    "\n",
    "        # Set plot limits based on the accumulated overall_occupied_coords_for_plotting\n",
    "        if overall_occupied_coords_for_plotting:\n",
    "            all_coords_list = list(overall_occupied_coords_for_plotting)\n",
    "            all_coords_array = Array(all_coords_list)\n",
    "\n",
    "            min_x = min(c[0] for c in all_coords_array) - 2 # Add some padding\n",
    "            max_x = max(c[0] for c in all_coords_array) + 3 # Add some padding\n",
    "            min_y = min(c[1] for c in all_coords_array) - 2\n",
    "            max_y = max(c[1] for c in all_coords_array) + 3\n",
    "\n",
    "            ax.set_xlim(min_x, max_x)\n",
    "            ax.set_ylim(min_y, max_y)\n",
    "            ax.set_xticks(range(int(min_x), int(max_x)))\n",
    "            ax.set_yticks(range(int(min_y), int(max_y)))\n",
    "        else:\n",
    "            ax.set_xlim(-5, 5)\n",
    "            ax.set_ylim(-5, 5)\n",
    "\n",
    "        ax.grid(True)\n",
    "        ax.set_title(f\"Population of {POPULATION_SIZE} Random Spatial Trees\")\n",
    "        plt.xlabel(\"X Coordinate\")\n",
    "        plt.ylabel(\"Y Coordinate\")\n",
    "        plt.show()\n",
    "    else:\n",
    "        print(\"No trees were successfully generated to plot.\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "zJf6Qrc_3TbS"
   },
   "source": [
    "**Ejercicio.** Ejecuta el código para ver qué hace.\n",
    ">\n",
    "> *Respuesta.* El programa produjo una superposición de todas las células que fueron creadas por todos los árboles.\n",
    "\n",
    "**Ejercicio.** Modificar el programa anterior para que cada árbol tenga su propia colección de direcciones de las plazas ocupadas. Hacer un dibujo del patrón morfológico generado por un solo árbol que se elige al azar.\n",
    ">\n",
    "> *Respuesta.* Gemini ofreció varias actividades, y seleccionamos `Modificar el código para seleccionar y trazar solo un árbol aleatorio de la población`. Su respuesta fue:\n",
    ">> Modificaré el código para generar una población de árboles aleatorios, pero luego seleccionaré y trazaré solo uno de ellos, asegurándome de que sus límites de trazado se establezcan correctamente en base a sus propias celdas ocupadas.\n",
    ">\n",
    "> Gemini publicó el siguiente código:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "id": "8967664d"
   },
   "outputs": [],
   "source": [
    "# Program random_spatial_tree_population7.py\n",
    "# Generates a population of random spatial trees.\n",
    "# Each tree has its own set of occupancy.\n",
    "# Only one tree is plotted.\n",
    "# By Gemini.\n",
    "\n",
    "import random\n",
    "import matplotlib.pyplot as plt\n",
    "import matplotlib.patches as patches\n",
    "import numpy as np\n",
    "from numpy import array as Array\n",
    "\n",
    "# Removed the global overall_occupied_coords_for_plotting\n",
    "\n",
    "class SpatialTreeNode7: # Renamed back to SpatialTreeNode as it's a new context\n",
    "    def __init__(self, value, x, y, local_occupied_set):\n",
    "        self.value = value\n",
    "        self.x = x\n",
    "        self.y = y\n",
    "        self.children = []\n",
    "        # Add current node's coordinates to its local set upon creation\n",
    "        local_occupied_set.add((x, y))\n",
    "        # Removed addition to overall_occupied_coords_for_plotting\n",
    "\n",
    "    def add_child(self, child_node):\n",
    "        if not isinstance(child_node, SpatialTreeNode7):\n",
    "            raise TypeError(\"Child must be an instance of SpatialTreeNode\")\n",
    "        self.children.append(child_node)\n",
    "\n",
    "    def get_neighboring_coordinates(self):\n",
    "        neighbors = []\n",
    "        for dx in [-1, 0, 1]:\n",
    "            for dy in [-1, 0, 1]:\n",
    "                if dx == 0 and dy == 0:\n",
    "                    continue  # Exclude the current square itself\n",
    "                neighbors.append((self.x + dx, self.y + dy))\n",
    "        return neighbors\n",
    "\n",
    "    def add_child_in_random_neighbor(self, child_value_prefix, local_occupied_set):\n",
    "        coordinates_neighbors = self.get_neighboring_coordinates()\n",
    "        available_neighbors = [coord for coord in coordinates_neighbors if coord not in local_occupied_set]\n",
    "\n",
    "        if not available_neighbors:\n",
    "            return None\n",
    "\n",
    "        nx, ny = random.choice(available_neighbors)\n",
    "        child_value = f\"{child_value_prefix}_{len(self.children) + 1}\"\n",
    "        # Pass the local_occupied_set to the child when creating it\n",
    "        child_node = SpatialTreeNode7(child_value, nx, ny, local_occupied_set)\n",
    "        self.add_child(child_node)\n",
    "        return child_node\n",
    "\n",
    "    def __repr__(self):\n",
    "        return f\"SpatialTreeNode(value={self.value}, x={self.x}, y={self.y}, children={[child.value for child in self.children]})\"\n",
    "\n",
    "    def update_value(self, new_value):\n",
    "        self.value = new_value\n",
    "\n",
    "def generate_random_spatial_tree7(max_depth, max_children, initial_x, initial_y, current_depth=0, parent_node=None, node_prefix=\"Cell\", local_occupied_set=None):\n",
    "    \"\"\"\n",
    "    Generates a random spatial tree using the SpatialTreeNode class.\n",
    "\n",
    "    Args:\n",
    "        max_depth (int): The maximum depth of the tree.\n",
    "        max_children (int): The maximum number of children a node can have.\n",
    "        initial_x (int): X-coordinate for the root node.\n",
    "        initial_y (int): Y-coordinate for the root node.\n",
    "        current_depth (int): The current depth of the node being created (for internal use).\n",
    "        parent_node (SpatialTreeNode, optional): The parent node to which new children will be added.\n",
    "                                                 If None, a root node is created at (initial_x, initial_y).\n",
    "        node_prefix (str): A prefix for the node values.\n",
    "        local_occupied_set (set, optional): A set tracking occupied coordinates for the current tree generation.\n",
    "                                          If None, a new set is initialized for the root.\n",
    "\n",
    "    Returns:\n",
    "        SpatialTreeNode: The root of the randomly generated tree.\n",
    "        set: The local_occupied_set containing all coordinates of the generated tree.\n",
    "    \"\"\"\n",
    "    if local_occupied_set is None:\n",
    "        local_occupied_set = set() # Initialize a new set for this tree's generation\n",
    "\n",
    "    if parent_node is None:\n",
    "        # Create the root node at (initial_x, initial_y) if it's the initial call\n",
    "        node_value = f\"{node_prefix}_Root_{random.randint(0, 99)}\"\n",
    "        current_node = SpatialTreeNode7(node_value, initial_x, initial_y, local_occupied_set)\n",
    "    else:\n",
    "        # For children, the parent_node will attempt to add a child in a random neighbor\n",
    "        current_node = parent_node.add_child_in_random_neighbor(f\"{node_prefix}_{current_depth}\", local_occupied_set)\n",
    "        if current_node is None: # No available neighbors, terminate this branch\n",
    "            return None, local_occupied_set # Return current set even if no child was added\n",
    "\n",
    "    if current_depth < max_depth:\n",
    "        num_children = random.randint(0, max_children) # Random number of children for this node\n",
    "        for _ in range(num_children):\n",
    "            # Recursively call for children, passing the current node as parent and the local_occupied_set\n",
    "            generate_random_spatial_tree7(max_depth, max_children, initial_x, initial_y, current_depth + 1, current_node, node_prefix, local_occupied_set)\n",
    "\n",
    "    return current_node, local_occupied_set # Return the created node (root or child) and the populated set\n",
    "\n",
    "def print_spatial_tree7(node, level=0):\n",
    "    \"\"\"\n",
    "    Helper function to print the spatial tree structure with coordinates.\n",
    "    \"\"\"\n",
    "    if node is None:\n",
    "        return\n",
    "    indent = \"  \" * level\n",
    "    print(f\"{indent}- {node.value} ({node.x},{node.y})\")\n",
    "    for child in node.children:\n",
    "        print_spatial_tree7(child, level + 1)\n",
    "\n",
    "# --- Plotting functions (reused and slightly adapted from previous examples) ---\n",
    "def draw_square7(ax, x, y, color='blue', alpha=0.7, label=None):\n",
    "    rect = patches.Rectangle((x, y), 1, 1, facecolor=color, alpha=alpha, edgecolor='black', linewidth=1)\n",
    "    ax.add_patch(rect)\n",
    "    if label:\n",
    "        ax.text(x + 0.5, y + 0.5, label, ha='center', va='center', color='white', fontsize=8)\n",
    "\n",
    "def plot_tree_nodes7(node, ax, root_color='skyblue', child_color='lightcoral'):\n",
    "    if node is None:\n",
    "        return\n",
    "    # Plot the current node\n",
    "    draw_square7(ax, node.x, node.y, color=root_color if \"Root\" in node.value else child_color, label=node.value)\n",
    "    # Recursively plot children and draw lines\n",
    "    for child in node.children:\n",
    "        # Draw a line connecting parent to child (from center of squares)\n",
    "        ax.plot([node.x + 0.5, child.x + 0.5], [node.y + 0.5, child.y + 0.5], 'k--')\n",
    "        plot_tree_nodes7(child, ax, root_color, child_color) # Recursive call for children\n",
    "\n",
    "\n",
    "# --- Example Usage: Generating a Population and Plotting One Random Spatial Tree ---\n",
    "if __name__ == \"__main__\":\n",
    "    # Parameters for population and random tree generation\n",
    "    POPULATION_SIZE = 5\n",
    "    MAX_DEPTH_PER_TREE = 5\n",
    "    MAX_CHILDREN_PER_NODE = 2\n",
    "\n",
    "    tree_population_details = [] # To store (root_node, local_occupied_set) for each tree\n",
    "\n",
    "    print(f\"Generating a population of {POPULATION_SIZE} random spatial trees:\")\n",
    "\n",
    "    for i in range(POPULATION_SIZE):\n",
    "        # Each tree needs its own starting coordinates and local occupied set\n",
    "        start_x = i * 5 # Offset each tree's root for visual separation if needed, or keep (0,0)\n",
    "        start_y = 0\n",
    "        current_tree_occupied_coords = set() # New set for each tree\n",
    "\n",
    "        random_tree_root, final_occupied_set = generate_random_spatial_tree7(\n",
    "            max_depth=MAX_DEPTH_PER_TREE,\n",
    "            max_children=MAX_CHILDREN_PER_NODE,\n",
    "            initial_x=start_x,\n",
    "            initial_y=start_y,\n",
    "            node_prefix=f\"Tree{i+1}_Cell\",\n",
    "            local_occupied_set=current_tree_occupied_coords # Pass the new set\n",
    "        )\n",
    "\n",
    "        if random_tree_root:\n",
    "            tree_population_details.append((random_tree_root, final_occupied_set))\n",
    "            print(f\"\\n--- Generated Tree {i+1} ---\")\n",
    "            print_spatial_tree7(random_tree_root)\n",
    "        else:\n",
    "            print(f\"\\nCould not generate Tree {i+1} (e.g., no available neighbors for its root).\")\n",
    "\n",
    "    # Select and plot only one random tree from the population\n",
    "    if tree_population_details:\n",
    "        chosen_tree_root, chosen_tree_coords_set = random.choice(tree_population_details)\n",
    "        print(f\"\\n\\nPlotting a randomly selected tree (Root: {chosen_tree_root.value}):\")\n",
    "\n",
    "        fig, ax = plt.subplots(figsize=(8, 8))\n",
    "        ax.set_aspect('equal', adjustable='box')\n",
    "\n",
    "        plot_tree_nodes7(chosen_tree_root, ax)\n",
    "\n",
    "        # Set plot limits based on the chosen tree's specific occupied_coords_set\n",
    "        if chosen_tree_coords_set:\n",
    "            all_coords_list = list(chosen_tree_coords_set)\n",
    "            all_coords_array = Array(all_coords_list)\n",
    "\n",
    "            min_x = min(c[0] for c in all_coords_array) - 2 # Add some padding\n",
    "            max_x = max(c[0] for c in all_coords_array) + 3 # Add some padding\n",
    "            min_y = min(c[1] for c in all_coords_array) - 2\n",
    "            max_y = max(c[1] for c in all_coords_array) + 3\n",
    "\n",
    "            ax.set_xlim(min_x, max_x)\n",
    "            ax.set_ylim(min_y, max_y)\n",
    "            ax.set_xticks(range(int(min_x), int(max_x)))\n",
    "            ax.set_yticks(range(int(min_y), int(max_y)))\n",
    "        else:\n",
    "            ax.set_xlim(-5, 5)\n",
    "            ax.set_ylim(-5, 5)\n",
    "\n",
    "        ax.grid(True)\n",
    "        ax.set_title(f\"Single Random Spatial Tree (Root: {chosen_tree_root.value})\")\n",
    "        plt.xlabel(\"X Coordinate\")\n",
    "        plt.ylabel(\"Y Coordinate\")\n",
    "        plt.show()\n",
    "    else:\n",
    "        print(\"No trees were successfully generated to plot.\")\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "uV5Vny_mVbCS"
   },
   "source": [
    "**Ejercicio.** Juega con el código para verificar si es correcto.\n",
    ">\n",
    "> *Respuesta.* Para una profundidad máxima de 3, se veía bien a primera vista. Luego modificamos la profundidad máxima de 3 a 5. Se generó un árbol más complejo con un patrón espacial complejo, sin embargo, después de trazar en papel el árbol seleccionado, no se encontró ningún fallo. Todo estaba bien, y esta es nuestra opinión, así que vamos a continuar.\n",
    "\n",
    "> **Desafío.** Mejore la claridad de la trama del programa anterior cambiando los segmentos lineales por flechas, o por algún indicador de dirección, desde el centro del cuadrado madre al centro del cuadrado hijo.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "lnSfCA18FjjR"
   },
   "source": [
    "## La tarea para la Evolución\n",
    "\n",
    "La forma perfectamente esférica del extremo del húmero en el hombro, o de los fémures en la cadera nos invita a encargar a la Evolución la tarea de sintetizar una forma específica.\n",
    "\n",
    "**La tarea.** Le planteamos a la Evolución la siguiente tarea:\n",
    ">\n",
    "> Rellenar un cuadrado de longitud 2, luego otro de longitud 3, y así sucesivamente. Medimos el costo en generaciones de hacer eso para un tamaño poblacional determinado.\n",
    "\n",
    "**Ejercicio.** Desarrollar el código para la Evolución de los árboles espaciales 2D que deben rellenar un cuadrado de ancho 2, luego otro de largo 3 y así sucesivamente. Realizar un seguimiento del costo de completar la tarea por cada K$.\n",
    ">\n",
    "> *Respuesta.* Transmitimos la tarea a Gemini, y él insertó su respuesta en la subsección siguiente."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "18a02147"
   },
   "source": [
    "### Definición de las formas objetivo y la función de fitness\n",
    "\n",
    "Para comenzar nuestra simulación evolutiva, necesitamos una definición clara de las formas objetivo que nuestros árboles espaciales intentarán 'llenar'. La tarea especifica cuadrados de longitud creciente (por ejemplo, longitud 2, luego longitud 3). También necesitamos una manera de cuantificar cuán 'bueno' es un árbol en particular para llenar un cuadrado objetivo dado. Aquí es donde entra en juego una **función de fitness o de idoneidad**.\n",
    "\n",
    "*Observación.* Gemini dividió la gran tarea en subtareas, pero esto causa problemas con el núcleo de Python. Así que en el siguiente programa, lo combinamos todo."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "id": "H0yhSNKFJmd0"
   },
   "outputs": [],
   "source": [
    "# Program spatial_trees_la Evolución.py\n",
    "# A target area is defined and a random spatial tree is generated.\n",
    "# The two areas are drawn to be compared.\n",
    "# By Gemini 2.5 Flash\n",
    "\n",
    "\n",
    "# PART I: SPATIAL TREES\n",
    "\n",
    "import random\n",
    "import matplotlib.pyplot as plt\n",
    "import matplotlib.patches as patches\n",
    "import numpy as np\n",
    "from numpy import array as Array\n",
    "\n",
    "# Reuse the SpatialTreeNode7 class from the previous exercise, or adapt it if necessary\n",
    "# For simplicity, I'll copy the necessary parts of SpatialTreeNode7 here.\n",
    "# In a real notebook, you might define it once and reuse.\n",
    "\n",
    "# Global set to store all occupied coordinates from ALL trees for overall plot limits\n",
    "# (This will be managed carefully within the la Evoluciónary loop)\n",
    "# overall_occupied_coords_for_plotting = set() # This was for population plotting, not individual tree fitness\n",
    "\n",
    "class SpatialTreeNode_Evolution2(object):\n",
    "    def __init__(self, value, x, y, local_occupied_set):\n",
    "        self.value = value\n",
    "        self.x = x\n",
    "        self.y = y\n",
    "        self.children = []\n",
    "        local_occupied_set.add((x, y))\n",
    "\n",
    "    def add_child(self, child_node):\n",
    "        if not isinstance(child_node, SpatialTreeNode_Evolution2):\n",
    "            raise TypeError(\"Child must be an instance of SpatialTreeNode_Evolution\")\n",
    "        self.children.append(child_node)\n",
    "\n",
    "    def get_neighboring_coordinates(self):\n",
    "        neighbors = []\n",
    "        for dx in [-1, 0, 1]:\n",
    "            for dy in [-1, 0, 1]:\n",
    "                if dx == 0 and dy == 0:\n",
    "                    continue\n",
    "                neighbors.append((self.x + dx, self.y + dy))\n",
    "        return neighbors\n",
    "\n",
    "    def add_child_in_random_neighbor(self, child_value_prefix, local_occupied_set):\n",
    "        coordinates_neighbors = self.get_neighboring_coordinates()\n",
    "        available_neighbors = [coord for coord in coordinates_neighbors if coord not in local_occupied_set]\n",
    "\n",
    "        if not available_neighbors:\n",
    "            return None\n",
    "\n",
    "        nx, ny = random.choice(available_neighbors)\n",
    "        child_value = f\"{child_value_prefix}_{len(self.children) + 1}\"\n",
    "        child_node = SpatialTreeNode_Evolution2(child_value, nx, ny, local_occupied_set)\n",
    "        self.add_child(child_node)\n",
    "        return child_node\n",
    "\n",
    "    def __repr__(self):\n",
    "        return f\"SpatialTreeNode(value={self.value}, x={self.x}, y={self.y}, children={[child.value for child in self.children]})\"\n",
    "\n",
    "    def update_value(self, new_value):\n",
    "        self.value = new_value\n",
    "\n",
    "    # Method to collect all coordinates of the current tree\n",
    "    def collect_all_coordinates(self):\n",
    "        all_coords = set()\n",
    "        stack = [self]\n",
    "        while stack:\n",
    "            node = stack.pop()\n",
    "            all_coords.add((node.x, node.y))\n",
    "            for child in node.children:\n",
    "                stack.append(child)\n",
    "        return all_coords\n",
    "\n",
    "\n",
    "def generate_random_spatial_tree_evolution2(\n",
    "    max_depth, max_children, initial_x, initial_y, current_depth=0, parent_node=None, node_prefix=\"Cell\", local_occupied_set=None\n",
    "):\n",
    "    if local_occupied_set is None:\n",
    "        local_occupied_set = set() # Initialize a new set for this tree's generation\n",
    "\n",
    "    if parent_node is None:\n",
    "        node_value = f\"{node_prefix}_Root_{random.randint(0, 99)}\"\n",
    "        current_node = SpatialTreeNode_Evolution2(node_value, initial_x, initial_y, local_occupied_set)\n",
    "    else:\n",
    "        current_node = parent_node.add_child_in_random_neighbor(f\"{node_prefix}_{current_depth}\", local_occupied_set)\n",
    "        if current_node is None:\n",
    "            return None, local_occupied_set\n",
    "\n",
    "    if current_depth < max_depth:\n",
    "        num_children = random.randint(0, max_children)\n",
    "        for _ in range(num_children):\n",
    "            generate_random_spatial_tree_evolution2(\n",
    "                max_depth, max_children, initial_x, initial_y, current_depth + 1, current_node, node_prefix, local_occupied_set\n",
    "            )\n",
    "\n",
    "    return current_node, local_occupied_set\n",
    "\n",
    "\n",
    "# Helper functions for plotting\n",
    "def draw_square_evolution2(ax, x, y, color='blue', alpha=0.7, label=None):\n",
    "    rect = patches.Rectangle((x, y), 1, 1, facecolor=color, alpha=alpha, edgecolor='black', linewidth=1)\n",
    "    ax.add_patch(rect)\n",
    "    if label:\n",
    "        ax.text(x + 0.5, y + 0.5, label, ha='center', va='center', color='white', fontsize=8)\n",
    "\n",
    "def plot_tree_nodes_evolution2(node, ax, root_color='skyblue', child_color='lightcoral'):\n",
    "    if node is None:\n",
    "        return\n",
    "    draw_square_evolution2(ax, node.x, node.y, color=root_color if \"Root\" in node.value else child_color, label=node.value)\n",
    "    for child in node.children:\n",
    "        ax.plot([node.x + 0.5, child.x + 0.5], [node.y + 0.5, child.y + 0.5], 'k--')\n",
    "        plot_tree_nodes_evolution2(child, ax, root_color, child_color)\n",
    "\n",
    "# PART II: OBJECTIVE FUNCTION AND FITNESS\n",
    "\n",
    "def generate_target_square_coords2(side_length, origin_x=0, origin_y=0):\n",
    "    \"\"\"\n",
    "    Generates a set of (x, y) coordinates representing a filled square.\n",
    "\n",
    "    Args:\n",
    "        side_length (int): The side length of the square.\n",
    "        origin_x (int): The x-coordinate of the bottom-left corner of the square.\n",
    "        origin_y (int): The y-coordinate of the bottom-left corner of the square.\n",
    "\n",
    "    Returns:\n",
    "        set: A set of (x, y) tuples representing the occupied cells of the target square.\n",
    "    \"\"\"\n",
    "    target_coords = set()\n",
    "    for x in range(origin_x, origin_x + side_length):\n",
    "        for y in range(origin_y, origin_y + side_length):\n",
    "            target_coords.add((x, y))\n",
    "    return target_coords\n",
    "\n",
    "def calculate_fitness2(tree_root, target_coords):\n",
    "    \"\"\"\n",
    "    Calculates the fitness of a spatial tree based on how well it fills a target square.\n",
    "    Fitness is higher for better matches.\n",
    "\n",
    "    Args:\n",
    "        tree_root (SpatialTreeNode_Evolution): The root of the generated spatial tree.\n",
    "        target_coords (set): A set of (x, y) tuples representing the target square.\n",
    "\n",
    "    Returns:\n",
    "        float: A fitness score. Higher is better.\n",
    "    \"\"\"\n",
    "    if tree_root is None:\n",
    "        return 0.0\n",
    "\n",
    "    tree_coords = tree_root.collect_all_coordinates()\n",
    "\n",
    "    # Calculate overlaps (correctly placed cells)\n",
    "    overlaps = len(tree_coords.intersection(target_coords))\n",
    "\n",
    "    # Calculate missing cells (cells in target but not in tree)\n",
    "    missing_cells = len(target_coords - tree_coords)\n",
    "\n",
    "    # Calculate extra cells (cells in tree but not in target)\n",
    "    extra_cells = len(tree_coords - target_coords)\n",
    "\n",
    "    # A simple fitness function: prioritize overlaps, penalize missing and extra cells\n",
    "    # You can adjust weights based on what aspects of 'filling' are most important.\n",
    "    fitness = overlaps - (missing_cells + extra_cells)\n",
    "\n",
    "    # Normalize fitness to be non-negative and potentially within a range (e.g., 0 to 1)\n",
    "    # A perfect match would have fitness = len(target_coords)\n",
    "    # The minimum possible fitness would be -len(target_coords) - a very large number of extra cells\n",
    "    max_possible_fitness = len(target_coords)\n",
    "    min_possible_fitness = -len(target_coords) - len(tree_coords) # rough estimate for worst case\n",
    "\n",
    "    # Scale to 0-1 for easier comparison in la Evoluciónary algorithms\n",
    "    if max_possible_fitness == 0 and fitness == 0: # handle empty target\n",
    "        normalized_fitness = 1.0\n",
    "    elif max_possible_fitness == 0: # target empty, but tree not\n",
    "        normalized_fitness = 0.0\n",
    "    else:\n",
    "        normalized_fitness = (fitness + max_possible_fitness) / (2 * max_possible_fitness + extra_cells) # rudimentary normalization\n",
    "        # A simpler normalization might be just overlaps / len(target_coords) if we only care about filling without extras\n",
    "        normalized_fitness = overlaps / (len(target_coords) + extra_cells + missing_cells) # Jaccard-like index\n",
    "\n",
    "    return normalized_fitness\n",
    "\n",
    "# PART III: # Example usage:\n",
    "\n",
    "# Define a target square of length 2\n",
    "target_side_length = 2\n",
    "target_coords_s2 = generate_target_square_coords2(target_side_length, origin_x=0, origin_y=0)\n",
    "print(f\"Target Square (length {target_side_length}): {target_coords_s2}\")\n",
    "\n",
    "# Generate a random spatial tree\n",
    "# Note: local_occupied_set will be managed by generate_random_spatial_tree_evolution\n",
    "random_seed = random.randint(0, 1000)\n",
    "print(f\"Using random seed: {random_seed}\")\n",
    "random.seed(random_seed)\n",
    "\n",
    "MAX_DEPTH = 3\n",
    "MAX_CHILDREN_PER_NODE = 2\n",
    "initial_x, initial_y = 0, 0 # Start tree generation at the origin\n",
    "\n",
    "root_node, _ = generate_random_spatial_tree_evolution2(\n",
    "    max_depth=MAX_DEPTH,\n",
    "    max_children=MAX_CHILDREN_PER_NODE,\n",
    "    initial_x=initial_x,\n",
    "    initial_y=initial_y,\n",
    "    node_prefix=\"TestCell\"\n",
    ")\n",
    "\n",
    "if root_node:\n",
    "    print(\"\\nGenerated Test Tree Structure:\")\n",
    "    # print_spatial_tree_la Evolución(root_node) # This can be verbose for larger trees\n",
    "    tree_coordinates = root_node.collect_all_coordinates()\n",
    "    print(f\"Tree Coordinates: {tree_coordinates}\")\n",
    "\n",
    "    # Calculate fitness\n",
    "    fitness_score = calculate_fitness2(root_node, target_coords_s2)\n",
    "    print(f\"\\nFitness for target square (length {target_side_length}): {fitness_score:.4f}\")\n",
    "\n",
    "    # Plotting for visualization\n",
    "    fig, ax = plt.subplots(1, 2, figsize=(14, 7))\n",
    "    ax[0].set_aspect('equal', adjustable='box')\n",
    "    ax[1].set_aspect('equal', adjustable='box')\n",
    "\n",
    "    # Plot Target Square\n",
    "    for cx, cy in target_coords_s2:\n",
    "        draw_square_evolution2(ax[0], cx, cy, color='green', alpha=0.5, label='Target')\n",
    "    ax[0].set_title(f\"Target Square (L={target_side_length})\")\n",
    "    ax[0].grid(True)\n",
    "\n",
    "    # Plot Generated Tree\n",
    "    plot_tree_nodes_evolution2(root_node, ax[1], root_color='purple', child_color='orange')\n",
    "    ax[1].set_title(f\"Generated Tree (Fitness: {fitness_score:.4f})\")\n",
    "\n",
    "    # Set limits for plotting\n",
    "    all_coords = list(target_coords_s2.union(tree_coordinates))\n",
    "    if all_coords:\n",
    "        all_coords_array = Array(all_coords)\n",
    "        min_x = min(c[0] for c in all_coords_array) - 1\n",
    "        max_x = max(c[0] for c in all_coords_array) + 2\n",
    "        min_y = min(c[1] for c in all_coords_array) - 1\n",
    "        max_y = max(c[1] for c in all_coords_array) + 2\n",
    "    else:\n",
    "        min_x, max_x, min_y, max_y = -2, 2, -2, 2\n",
    "\n",
    "    for a in ax:\n",
    "        a.set_xlim(min_x, max_x)\n",
    "        a.set_ylim(min_y, max_y)\n",
    "        a.set_xticks(range(int(min_x), int(max_x)))\n",
    "        a.set_yticks(range(int(min_y), int(max_y)))\n",
    "\n",
    "    plt.tight_layout()\n",
    "    plt.show()\n",
    "else:\n",
    "    print(\"Could not generate a spatial tree for testing fitness.\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "wD_ZIS3LL3Z2"
   },
   "source": [
    "A continuación, le pedimos a Colab que añadiera mutación, reproducción y, si es posible, recombinación. Todo en un programa autónomo. Gemini respondió con un código que trazaba solo el árbol final mejor para la última longitud objetivo. Así que preguntamos:\n",
    ">\n",
    "> Por favor, reescribe el código para trazar el mejor árbol para cada longitud objetivo.\n",
    ">\n",
    "> Cuando se mostró un gráfico para cada longitud objetivo, notamos que hay líneas de conexión redundantes. Estas tienen dos posibles explicaciones. Primero, hay un error en el código. Segundo: son un subproducto de la recombinación. Entonces, preguntamos:\n",
    ">\n",
    "> Aparecen líneas redundantes conectadas  a vecinos lejanos. Por favor, evite su aparición.\n",
    "\n",
    "Gemini respondió:\n",
    ">\n",
    "> Actualizaré la función de trazado para usar flechas en lugar de líneas punteadas para las conexiones entre los nodos padre e hijo. Esto indicará claramente la dirección del crecimiento y mejorará la claridad de la estructura del árbol. También me aseguraré de que los elementos estén correctamente estratificados usando zorder para que las flechas sean visibles en la parte superior de los cuadrados.\n",
    "\n",
    "El código sigue:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 1000
    },
    "executionInfo": {
     "elapsed": 2171,
     "status": "ok",
     "timestamp": 1788288570049,
     "user": {
      "displayName": "jose rodriguez",
      "userId": "08454562216435392883"
     },
     "user_tz": 300
    },
    "id": "8afda218",
    "outputId": "3910ce20-296c-4a76-d11f-79bb3458ae4e"
   },
   "outputs": [],
   "source": [
    "# Program spatial_trees_la Evolución3.py\n",
    "# By Gemini 2.5 Flash\n",
    "\n",
    "import random\n",
    "import matplotlib.pyplot as plt\n",
    "import matplotlib.patches as patches\n",
    "import numpy as np\n",
    "from numpy import array as Array\n",
    "import copy # For deep copying trees during reproduction and mutation\n",
    "\n",
    "class SpatialTreeNode_Evolution3(object):\n",
    "    def __init__(self, value, x, y, local_occupied_set):\n",
    "        self.value = value\n",
    "        self.x = x\n",
    "        self.y = y\n",
    "        self.children = []\n",
    "        local_occupied_set.add((x, y))\n",
    "\n",
    "    def add_child(self, child_node):\n",
    "        if not isinstance(child_node, SpatialTreeNode_Evolution3):\n",
    "            raise TypeError(\"Child must be an instance of SpatialTreeNode_Evolution3\")\n",
    "        self.children.append(child_node)\n",
    "\n",
    "    def get_neighboring_coordinates(self):\n",
    "        neighbors = []\n",
    "        for dx in [-1, 0, 1]:\n",
    "            for dy in [-1, 0, 1]:\n",
    "                if dx == 0 and dy == 0:\n",
    "                    continue\n",
    "                neighbors.append((self.x + dx, self.y + dy))\n",
    "        return neighbors\n",
    "\n",
    "    def add_child_in_random_neighbor(self, child_value_prefix, local_occupied_set):\n",
    "        coordinates_neighbors = self.get_neighboring_coordinates()\n",
    "        available_neighbors = [coord for coord in coordinates_neighbors if coord not in local_occupied_set]\n",
    "\n",
    "        if not available_neighbors:\n",
    "            return None\n",
    "\n",
    "        nx, ny = random.choice(available_neighbors)\n",
    "        child_value = f\"{child_value_prefix}_{len(self.children) + 1}\"\n",
    "        child_node = SpatialTreeNode_Evolution3(child_value, nx, ny, local_occupied_set)\n",
    "        self.add_child(child_node)\n",
    "        return child_node\n",
    "\n",
    "    def __repr__(self):\n",
    "        return f\"SpatialTreeNode(value={self.value}, x={self.x}, y={self.y}, children={[child.value for child in self.children]})\"\n",
    "\n",
    "    def update_value(self, new_value):\n",
    "        self.value = new_value\n",
    "\n",
    "    # Method to collect all coordinates of the current tree\n",
    "    def collect_all_coordinates(self):\n",
    "        all_coords = set()\n",
    "        stack = [self]\n",
    "        while stack:\n",
    "            node = stack.pop()\n",
    "            all_coords.add((node.x, node.y))\n",
    "            for child in node.children:\n",
    "                stack.append(child)\n",
    "        return all_coords\n",
    "\n",
    "    def get_all_nodes(self):\n",
    "        all_nodes = []\n",
    "        stack = [self]\n",
    "        while stack:\n",
    "            node = stack.pop()\n",
    "            all_nodes.append(node)\n",
    "            for child in node.children:\n",
    "                stack.append(child)\n",
    "        return all_nodes\n",
    "\n",
    "def generate_random_spatial_tree_evolution3(\n",
    "    max_depth, max_children, initial_x, initial_y, current_depth=0, parent_node=None, node_prefix=\"Cell\", local_occupied_set=None\n",
    "):\n",
    "    if local_occupied_set is None:\n",
    "        local_occupied_set = set() # Initialize a new set for this tree's generation\n",
    "\n",
    "    if parent_node is None:\n",
    "        node_value = f\"{node_prefix}_Root_{random.randint(0, 99)}\"\n",
    "        current_node = SpatialTreeNode_Evolution3(node_value, initial_x, initial_y, local_occupied_set)\n",
    "    else:\n",
    "        current_node = parent_node.add_child_in_random_neighbor(f\"{node_prefix}_{current_depth}\", local_occupied_set)\n",
    "        if current_node is None:\n",
    "            return None\n",
    "\n",
    "    if current_depth < max_depth:\n",
    "        num_children = random.randint(0, max_children)\n",
    "        for _ in range(num_children):\n",
    "            generate_random_spatial_tree_evolution3(\n",
    "                max_depth, max_children, initial_x, initial_y, current_depth + 1, current_node, node_prefix, local_occupied_set\n",
    "            )\n",
    "\n",
    "    return current_node\n",
    "\n",
    "\n",
    "# Helper functions for plotting\n",
    "def draw_square_evolution3(ax, x, y, color='blue', alpha=0.7, label=None):\n",
    "    rect = patches.Rectangle((x, y), 1, 1, facecolor=color, alpha=alpha, edgecolor='black', linewidth=1, zorder=1)\n",
    "    ax.add_patch(rect)\n",
    "    if label:\n",
    "        ax.text(x + 0.5, y + 0.5, label, ha='center', va='center', color='white', fontsize=8, zorder=2)\n",
    "\n",
    "def plot_tree_nodes_evolution3(node, ax, root_color='skyblue', child_color='lightcoral'):\n",
    "    if node is None:\n",
    "        return\n",
    "    draw_square_evolution3(ax, node.x, node.y, color=root_color if \"Root\" in node.value else child_color, label=node.value)\n",
    "    for child in node.children:\n",
    "        # Draw an arrow from parent to child\n",
    "        ax.annotate(\n",
    "            '',\n",
    "            xy=(child.x + 0.5, child.y + 0.5), # Child's center\n",
    "            xytext=(node.x + 0.5, node.y + 0.5), # Parent's center\n",
    "            arrowprops=dict(facecolor='black', edgecolor='black', arrowstyle='->', lw=1, connectionstyle='arc3,rad=0'), # 'arc3,rad=0' for straight arrow\n",
    "            zorder=2 # Ensure arrows are drawn above squares\n",
    "        )\n",
    "        plot_tree_nodes_evolution3(child, ax, root_color, child_color)\n",
    "\n",
    "\n",
    "# PART II: OBJECTIVE FUNCTION AND FITNESS\n",
    "\n",
    "def generate_target_square_coords3(side_length, origin_x=0, origin_y=0):\n",
    "    \"\"\"\n",
    "    Generates a set of (x, y) coordinates representing a filled square.\n",
    "    \"\"\"\n",
    "    target_coords = set()\n",
    "    for x in range(origin_x, origin_x + side_length):\n",
    "        for y in range(origin_y, origin_y + side_length):\n",
    "            target_coords.add((x, y))\n",
    "    return target_coords\n",
    "\n",
    "def calculate_fitness3(tree_root, target_coords):\n",
    "    \"\"\"\n",
    "    Calculates the fitness of a spatial tree based on how well it fills a target square.\n",
    "    Fitness is higher for better matches.\n",
    "    \"\"\"\n",
    "    if tree_root is None:\n",
    "        return 0.0\n",
    "\n",
    "    tree_coords = tree_root.collect_all_coordinates()\n",
    "\n",
    "    overlaps = len(tree_coords.intersection(target_coords))\n",
    "    missing_cells = len(target_coords - tree_coords)\n",
    "    extra_cells = len(tree_coords - target_coords)\n",
    "\n",
    "    # A simple fitness function: prioritize overlaps, penalize missing and extra cells\n",
    "    # You can adjust weights based on what aspects of 'filling' are most important.\n",
    "    # Using Jaccard-like index: (intersection / union)\n",
    "    union_size = len(tree_coords.union(target_coords))\n",
    "    if union_size == 0:\n",
    "        return 0.0 # Should not happen if target_coords is non-empty\n",
    "\n",
    "    # Penalize large trees that overfill, or small trees that underfill\n",
    "    # fitness = overlaps - (missing_cells * 0.5) - (extra_cells * 0.5)\n",
    "    # A simple overlap ratio might be enough for a start\n",
    "\n",
    "    # normalized_fitness = overlaps / len(target_coords) if len(target_coords) > 0 else 0.0\n",
    "    # Consider a more balanced fitness that encourages matching both presence and absence\n",
    "    # F-measure type score\n",
    "    precision = overlaps / len(tree_coords) if len(tree_coords) > 0 else 0.0\n",
    "    recall = overlaps / len(target_coords) if len(target_coords) > 0 else 0.0\n",
    "\n",
    "    # Harmonic mean of precision and recall\n",
    "    if precision + recall == 0:\n",
    "        f_score = 0.0\n",
    "    else:\n",
    "        f_score = 2 * (precision * recall) / (precision + recall)\n",
    "\n",
    "    # Optionally, add a small penalty for tree size if it's much larger than the target\n",
    "    # if len(tree_coords) > len(target_coords) * 1.5:\n",
    "    #    f_score -= 0.1 * (len(tree_coords) - len(target_coords))\n",
    "\n",
    "    return f_score\n",
    "\n",
    "\n",
    "# PART III: la EvoluciónARY ALGORITHM COMPONENTS\n",
    "\n",
    "def create_initial_population3(pop_size, max_depth, max_children, initial_x, initial_y, node_prefix):\n",
    "    population = []\n",
    "    for i in range(pop_size):\n",
    "        local_occupied_set = set()\n",
    "        tree = generate_random_spatial_tree_evolution3(max_depth, max_children, initial_x, initial_y, node_prefix=f\"{node_prefix}_{i}\", local_occupied_set=local_occupied_set)\n",
    "        if tree:\n",
    "            population.append(tree)\n",
    "    return population\n",
    "\n",
    "def select_parents3(population, fitness_scores, num_parents):\n",
    "    # Using tournament selection for simplicity\n",
    "    parents = []\n",
    "    for _ in range(num_parents):\n",
    "        tournament_size = min(5, len(population)) # Tournament size\n",
    "        tournament_candidates = random.sample(list(zip(population, fitness_scores)), tournament_size)\n",
    "        winner = max(tournament_candidates, key=lambda x: x[1])[0] # Select tree with highest fitness\n",
    "        parents.append(winner)\n",
    "    return parents\n",
    "\n",
    "def mutate_tree3(tree_root, max_depth, max_children, mutation_rate=0.1):\n",
    "    mutated_tree = copy.deepcopy(tree_root) # Work on a copy\n",
    "    all_nodes = mutated_tree.get_all_nodes()\n",
    "\n",
    "    if not all_nodes:\n",
    "        return mutated_tree\n",
    "\n",
    "    # Choose a random node to mutate\n",
    "    node_to_mutate = random.choice(all_nodes)\n",
    "\n",
    "    if random.random() < mutation_rate: # Chance to add a child\n",
    "        # Need a fresh local_occupied_set for mutation check\n",
    "        temp_occupied_set = mutated_tree.collect_all_coordinates() # Get all coords after deepcopy\n",
    "        added_child = node_to_mutate.add_child_in_random_neighbor(\"MutatedChild\", temp_occupied_set)\n",
    "        if added_child:\n",
    "            # If a child was added, its coords were added to temp_occupied_set\n",
    "            # This deepcopy and rebuild of local_occupied_set is a bit clunky but ensures consistency\n",
    "            pass # The new node has its coords in temp_occupied_set\n",
    "\n",
    "    if random.random() < mutation_rate and len(node_to_mutate.children) > 0: # Chance to remove a child\n",
    "        child_to_remove = random.choice(node_to_mutate.children)\n",
    "        node_to_mutate.children.remove(child_to_remove)\n",
    "        # Removing a child means its coordinates might no longer be occupied. This is harder to track\n",
    "        # for a deepcopied tree without re-validating the entire tree's coordinates. For simplicity,\n",
    "        # we will assume the fitness function re-calculates actual occupied space.\n",
    "\n",
    "    return mutated_tree\n",
    "\n",
    "def crossover_trees3(parent1_root, parent2_root, crossover_rate=0.7):\n",
    "    if random.random() > crossover_rate:\n",
    "        return copy.deepcopy(parent1_root), copy.deepcopy(parent2_root)\n",
    "\n",
    "    # Simple one-point crossover: swap random subtrees\n",
    "    child1_root = copy.deepcopy(parent1_root)\n",
    "    child2_root = copy.deepcopy(parent2_root)\n",
    "\n",
    "    all_nodes_child1 = child1_root.get_all_nodes()\n",
    "    all_nodes_child2 = child2_root.get_all_nodes()\n",
    "\n",
    "    if len(all_nodes_child1) < 2 or len(all_nodes_child2) < 2: # Need at least root and one other node to swap\n",
    "        return child1_root, child2_root\n",
    "\n",
    "    # Choose random nodes (not roots) to be crossover points\n",
    "    cross_point1 = random.choice([n for n in all_nodes_child1 if n != child1_root])\n",
    "    cross_point2 = random.choice([n for n in all_nodes_child2 if n != child2_root])\n",
    "\n",
    "    # Find parent of cross_point1 in child1_root tree\n",
    "    parent_cross_point1 = None\n",
    "    for node in all_nodes_child1:\n",
    "        if cross_point1 in node.children:\n",
    "            parent_cross_point1 = node\n",
    "            break\n",
    "\n",
    "    # Find parent of cross_point2 in child2_root tree\n",
    "    parent_cross_point2 = None\n",
    "    for node in all_nodes_child2:\n",
    "        if cross_point2 in node.children:\n",
    "            parent_cross_point2 = node\n",
    "            break\n",
    "\n",
    "    if parent_cross_point1 and parent_cross_point2: # Perform swap\n",
    "        # Swap children in parents\n",
    "        parent_cross_point1.children.remove(cross_point1)\n",
    "        parent_cross_point1.add_child(cross_point2)\n",
    "\n",
    "        parent_cross_point2.children.remove(cross_point2)\n",
    "        parent_cross_point2.add_child(cross_point1)\n",
    "\n",
    "    # Re-validate coordinates after crossover might be needed for fitness calculation\n",
    "    # The collect_all_coordinates function handles this for fitness, so no explicit action here.\n",
    "\n",
    "    return child1_root, child2_root\n",
    "\n",
    "\n",
    "# PART IV: la EvoluciónARY SIMULATION LOOP\n",
    "\n",
    "def run_evolution3(target_side_lengths, pop_size, generations_per_target, max_depth, max_children, mutation_rate, crossover_rate):\n",
    "\n",
    "    evolution_results = [] # Store best fitness and tree for each target\n",
    "    overall_best_tree = None\n",
    "    overall_best_fitness = -1.0\n",
    "\n",
    "    for target_length in target_side_lengths:\n",
    "        print(f\"\\n--- Evolving for Target Square of Length {target_length} ---\")\n",
    "        target_coords = generate_target_square_coords3(target_length, origin_x=0, origin_y=0)\n",
    "        print(f\"Target coordinates: {target_coords}\")\n",
    "\n",
    "        population = create_initial_population3(pop_size, max_depth, max_children, 0, 0, \"InitialTree\")\n",
    "        best_fitness_for_target = -1.0\n",
    "        best_tree_for_target = None\n",
    "\n",
    "        generation_costs = [] # To track cost (generations) per target\n",
    "\n",
    "        for generation in range(generations_per_target):\n",
    "            fitness_scores = [calculate_fitness3(tree, target_coords) for tree in population]\n",
    "\n",
    "            current_best_fitness = max(fitness_scores)\n",
    "            current_best_tree = population[np.argmax(fitness_scores)]\n",
    "\n",
    "            if current_best_fitness > best_fitness_for_target:\n",
    "                best_fitness_for_target = current_best_fitness\n",
    "                best_tree_for_target = current_best_tree\n",
    "\n",
    "            print(f\"Generation {generation+1}: Best Fitness = {current_best_fitness:.4f}\")\n",
    "\n",
    "            # Check for convergence or satisfactory fitness\n",
    "            if current_best_fitness >= 0.95: # Arbitrary high fitness threshold\n",
    "                print(f\"Target reached or near optimal in {generation+1} generations!\")\n",
    "                break\n",
    "\n",
    "            # Selection\n",
    "            parents = select_parents3(population, fitness_scores, pop_size // 2) # Select half population as parents\n",
    "\n",
    "            # Create next generation\n",
    "            next_population = []\n",
    "            for i in range(0, len(parents), 2):\n",
    "                if i + 1 < len(parents):\n",
    "                    p1 = parents[i]\n",
    "                    p2 = parents[i+1]\n",
    "\n",
    "                    # Crossover\n",
    "                    child1, child2 = crossover_trees3(p1, p2, crossover_rate)\n",
    "\n",
    "                    # Mutation\n",
    "                    next_population.append(mutate_tree3(child1, max_depth, max_children, mutation_rate))\n",
    "                    next_population.append(mutate_tree3(child2, max_depth, max_children, mutation_rate))\n",
    "                else:\n",
    "                    # If odd number of parents, just mutate the last one\n",
    "                    next_population.append(mutate_tree3(copy.deepcopy(parents[i]), max_depth, max_children, mutation_rate))\n",
    "\n",
    "            # Fill remaining slots with new random trees if population size decreased due to unviable children\n",
    "            while len(next_population) < pop_size:\n",
    "                local_occupied_set = set()\n",
    "                new_tree = generate_random_spatial_tree_evolution3(max_depth, max_children, 0, 0, node_prefix=f\"RandomGen_{len(next_population)}\", local_occupied_set=local_occupied_set)\n",
    "                if new_tree: # Ensure a tree was actually generated\n",
    "                    next_population.append(new_tree)\n",
    "                else:\n",
    "                    # Fallback if random generation fails too often, to avoid infinite loop\n",
    "                    # This indicates an issue with tree generation parameters or space constraints\n",
    "                    break\n",
    "\n",
    "            population = next_population[:pop_size] # Ensure population size remains constant\n",
    "            generation_costs.append(generation + 1) # Track generations taken\n",
    "\n",
    "        evolution_results.append({\n",
    "            'target_length': target_length,\n",
    "            'best_tree': best_tree_for_target,\n",
    "            'best_fitness': best_fitness_for_target,\n",
    "            'generations_taken': len(generation_costs) # This will be the number of generations it ran for\n",
    "        })\n",
    "\n",
    "        if best_tree_for_target and best_fitness_for_target > overall_best_fitness:\n",
    "            overall_best_fitness = best_fitness_for_target\n",
    "            overall_best_tree = best_tree_for_target\n",
    "\n",
    "    return evolution_results, overall_best_tree\n",
    "\n",
    "\n",
    "# Main simulation run\n",
    "if __name__ == \"__main__\":\n",
    "    random.seed(42) # For reproducibility\n",
    "    np.random.seed(42)\n",
    "\n",
    "    TARGET_SIDE_LENGTHS = [2, 3, 4] # Squares of length 2, 3, and 4\n",
    "    POPULATION_SIZE = 50\n",
    "    GENERATIONS_PER_TARGET = 100\n",
    "    MAX_TREE_DEPTH = 5\n",
    "    MAX_CHILDREN_PER_NODE = 3\n",
    "    MUTATION_RATE = 0.15 # Probability of a node adding/removing a child\n",
    "    CROSSOVER_RATE = 0.7 # Probability of crossover occurring between two parents\n",
    "\n",
    "    results, overall_best_tree = run_evolution3(\n",
    "        TARGET_SIDE_LENGTHS, POPULATION_SIZE, GENERATIONS_PER_TARGET,\n",
    "        MAX_TREE_DEPTH, MAX_CHILDREN_PER_NODE, MUTATION_RATE, CROSSOVER_RATE\n",
    "    )\n",
    "\n",
    "    print(\"\\n--- la Evolución Summary ---\")\n",
    "    for res in results:\n",
    "        print(f\"Target L={res['target_length']}: Best Fitness = {res['best_fitness']:.4f}, Generations = {res['generations_taken']}\")\n",
    "\n",
    "    print(\"\\n--- Plotting Best Tree for Each Target Length ---\")\n",
    "    for res in results:\n",
    "        target_length = res['target_length']\n",
    "        best_tree = res['best_tree']\n",
    "        best_fitness = res['best_fitness']\n",
    "\n",
    "        if best_tree:\n",
    "            target_coords = generate_target_square_coords3(target_length, origin_x=0, origin_y=0)\n",
    "\n",
    "            fig, ax = plt.subplots(1, 2, figsize=(16, 8))\n",
    "            ax[0].set_aspect('equal', adjustable='box')\n",
    "            ax[1].set_aspect('equal', adjustable='box')\n",
    "\n",
    "            # Plot the target\n",
    "            for cx, cy in target_coords:\n",
    "                draw_square_evolution3(ax[0], cx, cy, color='green', alpha=0.5, label='Target')\n",
    "            ax[0].set_title(f\"Target Square (L={target_length})\")\n",
    "            ax[0].grid(True)\n",
    "\n",
    "            # Plot the best tree for this target\n",
    "            plot_tree_nodes_evolution3(best_tree, ax[1], root_color='purple', child_color='orange')\n",
    "            ax[1].set_title(f\"Best Evolved Tree for L={target_length} (Fitness: {best_fitness:.4f})\")\n",
    "\n",
    "            # Set limits for plotting\n",
    "            tree_coords_for_plot = best_tree.collect_all_coordinates()\n",
    "            all_coords_union = target_coords.union(tree_coords_for_plot)\n",
    "\n",
    "            if all_coords_union:\n",
    "                all_coords_array = Array(list(all_coords_union))\n",
    "                min_x = min(c[0] for c in all_coords_array) - 1\n",
    "                max_x = max(c[0] for c in all_coords_array) + 2\n",
    "                min_y = min(c[1] for c in all_coords_array) - 1\n",
    "                max_y = max(c[1] for c in all_coords_array) + 2\n",
    "            else:\n",
    "                min_x, max_x, min_y, max_y = -2, 2, -2, 2\n",
    "\n",
    "            for a in ax:\n",
    "                a.set_xlim(min_x, max_x)\n",
    "                a.set_ylim(min_y, max_y)\n",
    "                a.set_xticks(range(int(min_x), int(max_x)))\n",
    "                a.set_yticks(range(int(min_y), int(max_y)))\n",
    "\n",
    "            plt.tight_layout()\n",
    "            plt.show()\n",
    "        else:\n",
    "            print(f\"No successful tree evolved for target length {target_length}.\")\n",
    "\n",
    "    # The previous plotting for overall best tree against final target is removed as it's redundant\n",
    "    # with the new per-target plotting."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "9Xj4MBB5QyiY"
   },
   "source": [
    "*Observación.* Los gráficos muestran líneas redundantes, así como líneas que no conectan a los primeros vecinos. El autor no pudo encontrar un error en el código. Así que parecen ser un subproducto de la recombinación. Mantengámonos alerta a este problema.\n",
    "\n",
    "**Recomendación para ejecutar el programa.** El programa siempre producirá el mismo resultado. Esta es la reproducibilidad, una piedra preciosa del Método Científico. Para cambiar el resultado, cambie la semilla del generador aleatorio en la línea 357. Poner cualquier valor pero no muy grande.\n",
    "\n",
    "**Ejercicio.** Para continuar, Gemini propuso tres opciones:\n",
    ">\n",
    "> 1. Dibuja el promedio de generaciones necesarias para alcanzar la condición de idoneidad 1.0 dependiendo de las longitudes objetivo.\n",
    "> 2. Visualiza la progresión del fitness a lo largo de las generaciones para una longitud objetivo específica.\n",
    "> 3. Modificar la tasa de mutación para ver cómo afecta la velocidad de convergencia.\n",
    "\n",
    "Elige una opción y elabórala.\n",
    ">\n",
    "> *Respuesta.* Elegimos la primera opción que produce una estimación del costo de alcanzar la perfección en función del borde del cuadrado objetivo. Gemini insertó el código correspondiente en varias celdas de código. El núcleo de Python protestó porque necesitaba el código completo. Así que lo pegamos todo en una nueva celda de código.\n",
    ">\n",
    "> Después de ejecutar el código, ampliamos la longitud del tamaño del cuadrado objetivo a 10, pero se reportó un error de recursión en la longitud 6. Por lo tanto, Gemini propuso varias sugerencias que aceptamos:\n",
    ">\n",
    "> 1. Modificar el bucle de Evolución para almacenar los resultados en una variable global para facilitar el trazado.\n",
    "> 2. Aumentar el límite de recursión.\n",
    "> 3. Mover el código de trazado justo después de la llamada `run_evolution` para que la variable `results` esté correctamente definida en el ámbito.\n",
    "> 4. Aumentar la tasa de recombinación. De esta manera, se cubriría más espacio y la tarea estaría más rápido.\n",
    "> 5. Aumentar el límite de generación máxima para ayudar al modelo a converger para la longitud 6.  \n",
    "> 6. Modificar el tamaño de la población de 50 a 100 y luego a 200 para mejorar la convergencia para las longitudes 6 y 7.\n",
    "> 7. Aumentar el valor del parámetro `generations per target` a 200 para dar al algoritmo más tiempo para converger para la longitud 7.\n",
    ">\n",
    "> También notamos que para el largo del cuadrado 6 ocurrió un crecimiento desproporcionado del costo. Así, le pedimos a Gemini que añadiera un modelo de regresión exponencial para ajustar los datos del costo en generaciones frente a la longitud objetivo.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "id": "-G7aZWe8uuio"
   },
   "outputs": [],
   "source": [
    "# Program cost_of_la Evolution.py\n",
    "# The cost of fitting a square is estimated.\n",
    "# By Gemini 2.5\n",
    "\n",
    "import random\n",
    "import matplotlib.pyplot as plt\n",
    "import matplotlib.patches as patches\n",
    "import numpy as np\n",
    "from numpy import array as Array\n",
    "import copy # For deep copying trees during reproduction and mutation\n",
    "import sys # Import sys module to adjust recursion limit\n",
    "from scipy.optimize import curve_fit # For exponential regression\n",
    "\n",
    "sys.setrecursionlimit(2000) # Increase the recursion limit\n",
    "\n",
    "class SpatialTreeNode_Evolution4(object):\n",
    "    def __init__(self, value, x, y, local_occupied_set):\n",
    "        self.value = value\n",
    "        self.x = x\n",
    "        self.y = y\n",
    "        self.children = []\n",
    "        local_occupied_set.add((x, y))\n",
    "\n",
    "    def add_child(self, child_node):\n",
    "        if not isinstance(child_node, SpatialTreeNode_Evolution4):\n",
    "            raise TypeError(\"Child must be an instance of SpatialTreeNode_Evolution3\")\n",
    "        self.children.append(child_node)\n",
    "\n",
    "    def get_neighboring_coordinates(self):\n",
    "        neighbors = []\n",
    "        for dx in [-1, 0, 1]:\n",
    "            for dy in [-1, 0, 1]:\n",
    "                if dx == 0 and dy == 0:\n",
    "                    continue\n",
    "                neighbors.append((self.x + dx, self.y + dy))\n",
    "        return neighbors\n",
    "\n",
    "    def add_child_in_random_neighbor(self, child_value_prefix, local_occupied_set):\n",
    "        coordinates_neighbors = self.get_neighboring_coordinates()\n",
    "        available_neighbors = [coord for coord in coordinates_neighbors if coord not in local_occupied_set]\n",
    "\n",
    "        if not available_neighbors:\n",
    "            return None\n",
    "\n",
    "        nx, ny = random.choice(available_neighbors)\n",
    "        child_value = f\"{child_value_prefix}_{len(self.children) + 1}\"\n",
    "        child_node = SpatialTreeNode_Evolution4(child_value, nx, ny, local_occupied_set)\n",
    "        self.add_child(child_node)\n",
    "        return child_node\n",
    "\n",
    "    def __repr__(self):\n",
    "        return f\"SpatialTreeNode(value={self.value}, x={self.x}, y={self.y}, children={[child.value for child in self.children]})\"\n",
    "        # You can also see that if you choose to go to a child that has no other children, then you will have to create a new tree, in which case the parent of the child is `none`.\n",
    "\n",
    "    def update_value(self, new_value):\n",
    "        self.value = new_value\n",
    "\n",
    "    # Method to collect all coordinates of the current tree\n",
    "    def collect_all_coordinates(self):\n",
    "        all_coords = set()\n",
    "        stack = [self]\n",
    "        while stack:\n",
    "            node = stack.pop()\n",
    "            all_coords.add((node.x, node.y))\n",
    "            for child in node.children:\n",
    "                stack.append(child)\n",
    "        return all_coords\n",
    "\n",
    "    def get_all_nodes(self):\n",
    "        all_nodes = []\n",
    "        stack = [self]\n",
    "        while stack:\n",
    "            node = stack.pop()\n",
    "            all_nodes.append(node)\n",
    "            for child in node.children:\n",
    "                stack.append(child)\n",
    "        return all_nodes\n",
    "\n",
    "def generate_random_spatial_tree_evolution4(\n",
    "    max_depth, max_children, initial_x, initial_y, current_depth=0, parent_node=None, node_prefix=\"Cell\", local_occupied_set=None\n",
    "):\n",
    "    if local_occupied_set is None:\n",
    "        local_occupied_set = set() # Initialize a new set for this tree's generation\n",
    "\n",
    "    if parent_node is None:\n",
    "        node_value = f\"{node_prefix}_Root_{random.randint(0, 99)}\"\n",
    "        current_node = SpatialTreeNode_Evolution4(node_value, initial_x, initial_y, local_occupied_set)\n",
    "    else:\n",
    "        current_node = parent_node.add_child_in_random_neighbor(f\"{node_prefix}_{current_depth}\", local_occupied_set)\n",
    "        if current_node is None:\n",
    "            return None\n",
    "\n",
    "    if current_depth < max_depth:\n",
    "        num_children = random.randint(0, max_children)\n",
    "        for _ in range(num_children):\n",
    "            generate_random_spatial_tree_evolution4(\n",
    "                max_depth, max_children, initial_x, initial_y, current_depth + 1, current_node, node_prefix, local_occupied_set\n",
    "            )\n",
    "\n",
    "    return current_node\n",
    "\n",
    "\n",
    "# Helper functions for plotting\n",
    "def draw_square_evolution4(ax, x, y, color='blue', alpha=0.7, label=None):\n",
    "    rect = patches.Rectangle((x, y), 1, 1, facecolor=color, alpha=alpha, edgecolor='black', linewidth=1, zorder=1)\n",
    "    ax.add_patch(rect)\n",
    "    if label:\n",
    "        ax.text(x + 0.5, y + 0.5, label, ha='center', va='center', color='white', fontsize=8, zorder=2)\n",
    "\n",
    "def plot_tree_nodes_evolution4(node, ax, root_color='skyblue', child_color='lightcoral'):\n",
    "    if node is None:\n",
    "        return\n",
    "    draw_square_evolution4(ax, node.x, node.y, color=root_color if \"Root\" in node.value else child_color, label=node.value)\n",
    "    for child in node.children:\n",
    "        # Draw an arrow from parent to child\n",
    "        ax.annotate(\n",
    "            '',\n",
    "            xy=(child.x + 0.5, child.y + 0.5), # Child's center\n",
    "            xytext=(node.x + 0.5, node.y + 0.5), # Parent's center\n",
    "            arrowprops=dict(facecolor='black', edgecolor='black', arrowstyle='->', lw=1, connectionstyle='arc3,rad=0'), # 'arc3,rad=0' for straight arrow\n",
    "            zorder=2 # Ensure arrows are drawn above squares\n",
    "        )\n",
    "        plot_tree_nodes_evolution4(child, ax, root_color, child_color)\n",
    "\n",
    "\n",
    "# PART II: OBJECTIVE FUNCTION AND FITNESS\n",
    "\n",
    "def generate_target_square_coords4(side_length, origin_x=0, origin_y=0):\n",
    "    \"\"\"\n",
    "    Generates a set of (x, y) coordinates representing a filled square.\n",
    "    \"\"\"\n",
    "    target_coords = set()\n",
    "    for x in range(origin_x, origin_x + side_length):\n",
    "        for y in range(origin_y, origin_y + side_length):\n",
    "            target_coords.add((x, y))\n",
    "    return target_coords\n",
    "\n",
    "def calculate_fitness4(tree_root, target_coords):\n",
    "    \"\"\"\n",
    "    Calculates the fitness of a spatial tree based on how well it fills a target square.\n",
    "    Fitness is higher for better matches.\n",
    "    \"\"\"\n",
    "    if tree_root is None:\n",
    "        return 0.0\n",
    "\n",
    "    tree_coords = tree_root.collect_all_coordinates()\n",
    "\n",
    "    overlaps = len(tree_coords.intersection(target_coords))\n",
    "    missing_cells = len(target_coords - tree_coords)\n",
    "    extra_cells = len(tree_coords - target_coords)\n",
    "\n",
    "    # A simple fitness function: prioritize overlaps, penalize missing and extra cells\n",
    "    # You can adjust weights based on what aspects of 'filling' are most important.\n",
    "    # Using Jaccard-like index: (intersection / union)\n",
    "    union_size = len(tree_coords.union(target_coords))\n",
    "    if union_size == 0:\n",
    "        return 0.0 # Should not happen if target_coords is non-empty\n",
    "\n",
    "    # Penalize large trees that overfill, or small trees that underfill\n",
    "    # fitness = overlaps - (missing_cells * 0.5) - (extra_cells * 0.5)\n",
    "    # A simple overlap ratio might be enough for a start\n",
    "\n",
    "    # normalized_fitness = overlaps / len(target_coords) if len(target_coords) > 0 else 0.0\n",
    "    # Consider a more balanced fitness that encourages matching both presence and absence\n",
    "    # F-measure type score\n",
    "    precision = overlaps / len(tree_coords) if len(tree_coords) > 0 else 0.0\n",
    "    recall = overlaps / len(target_coords) if len(target_coords) > 0 else 0.0\n",
    "\n",
    "    # Harmonic mean of precision and recall\n",
    "    if precision + recall == 0:\n",
    "        f_score = 0.0\n",
    "    else:\n",
    "        f_score = 2 * (precision * recall) / (precision + recall)\n",
    "\n",
    "    # Optionally, add a small penalty for tree size if it's much larger than the target\n",
    "    # if len(tree_coords) > len(target_coords) * 1.5:\n",
    "    #    f_score -= 0.1 * (len(tree_coords) - len(target_coords))\n",
    "\n",
    "    return f_score\n",
    "\n",
    "\n",
    "# PART III: la EvoluciónARY ALGORITHM COMPONENTS\n",
    "\n",
    "def create_initial_population4(pop_size, max_depth, max_children, initial_x, initial_y, node_prefix):\n",
    "    population = []\n",
    "    for i in range(pop_size):\n",
    "        local_occupied_set = set()\n",
    "        tree = generate_random_spatial_tree_evolution4(max_depth, max_children, initial_x, initial_y, node_prefix=f\"{node_prefix}_{i}\", local_occupied_set=local_occupied_set)\n",
    "        if tree:\n",
    "            population.append(tree)\n",
    "    return population\n",
    "\n",
    "def select_parents4(population, fitness_scores, num_parents):\n",
    "    # Using tournament selection for simplicity\n",
    "    parents = []\n",
    "    for _ in range(num_parents):\n",
    "        tournament_size = min(5, len(population)) # Tournament size\n",
    "        tournament_candidates = random.sample(list(zip(population, fitness_scores)), tournament_size)\n",
    "        winner = max(tournament_candidates, key=lambda x: x[1])[0] # Select tree with highest fitness\n",
    "        parents.append(winner)\n",
    "    return parents\n",
    "\n",
    "def mutate_tree4(tree_root, max_depth, max_children, mutation_rate=0.1):\n",
    "    mutated_tree = copy.deepcopy(tree_root) # Work on a copy\n",
    "    all_nodes = mutated_tree.get_all_nodes()\n",
    "\n",
    "    if not all_nodes:\n",
    "        return mutated_tree\n",
    "\n",
    "    # Choose a random node to mutate\n",
    "    node_to_mutate = random.choice(all_nodes)\n",
    "\n",
    "    if random.random() < mutation_rate: # Chance to add a child\n",
    "        # Need a fresh local_occupied_set for mutation check\n",
    "        temp_occupied_set = mutated_tree.collect_all_coordinates() # Get all coords after deepcopy\n",
    "        added_child = node_to_mutate.add_child_in_random_neighbor(\"MutatedChild\", temp_occupied_set)\n",
    "        if added_child:\n",
    "            # If a child was added, its coords were added to temp_occupied_set\n",
    "            # This deepcopy and rebuild of local_occupied_set is a bit clunky but ensures consistency\n",
    "            pass # The new node has its coords in temp_occupied_set\n",
    "\n",
    "    if random.random() < mutation_rate and len(node_to_mutate.children) > 0: # Chance to remove a child\n",
    "        child_to_remove = random.choice(node_to_mutate.children)\n",
    "        node_to_mutate.children.remove(child_to_remove)\n",
    "        # Removing a child means its coordinates might no longer be occupied. This is harder to track\n",
    "        # for a deepcopied tree without re-validating the entire tree's coordinates. For simplicity,\n",
    "        # we will assume the fitness function re-calculates actual occupied space.\n",
    "\n",
    "    return mutated_tree\n",
    "\n",
    "def crossover_trees4(parent1_root, parent2_root, crossover_rate=0.7):\n",
    "    if random.random() > crossover_rate:\n",
    "        return copy.deepcopy(parent1_root), copy.deepcopy(parent2_root)\n",
    "\n",
    "    # Simple one-point crossover: swap random subtrees\n",
    "    child1_root = copy.deepcopy(parent1_root)\n",
    "    child2_root = copy.deepcopy(parent2_root)\n",
    "\n",
    "    all_nodes_child1 = child1_root.get_all_nodes()\n",
    "    all_nodes_child2 = child2_root.get_all_nodes()\n",
    "\n",
    "    if len(all_nodes_child1) < 2 or len(all_nodes_child2) < 2: # Need at least root and one other node to swap\n",
    "        return child1_root, child2_root\n",
    "\n",
    "    # Choose random nodes (not roots) to be crossover points\n",
    "    cross_point1 = random.choice([n for n in all_nodes_child1 if n != child1_root])\n",
    "    cross_point2 = random.choice([n for n in all_nodes_child2 if n != child2_root])\n",
    "\n",
    "    # Find parent of cross_point1 in child1_root tree\n",
    "    parent_cross_point1 = None\n",
    "    for node in all_nodes_child1:\n",
    "        if cross_point1 in node.children:\n",
    "            parent_cross_point1 = node\n",
    "            break\n",
    "\n",
    "    # Find parent of cross_point2 in child2_root tree\n",
    "    parent_cross_point2 = None\n",
    "    for node in all_nodes_child2:\n",
    "        if cross_point2 in node.children:\n",
    "            parent_cross_point2 = node\n",
    "            break\n",
    "\n",
    "    if parent_cross_point1 and parent_cross_point2: # Perform swap\n",
    "        # Swap children in parents\n",
    "        parent_cross_point1.children.remove(cross_point1)\n",
    "        parent_cross_point1.add_child(cross_point2)\n",
    "\n",
    "        parent_cross_point2.children.remove(cross_point2)\n",
    "        parent_cross_point2.add_child(cross_point1)\n",
    "\n",
    "    # Re-validate coordinates after crossover might be needed for fitness calculation\n",
    "    # The collect_all_coordinates function handles this for fitness, so no explicit action here.\n",
    "\n",
    "    return child1_root, child2_root\n",
    "\n",
    "\n",
    "# PART IV: la EvoluciónARY SIMULATION LOOP\n",
    "\n",
    "def run_evolution4(target_side_lengths, pop_size, generations_per_target, max_depth, max_children, mutation_rate, crossover_rate):\n",
    "\n",
    "    evolution_results = [] # Store best fitness and tree for each target\n",
    "    overall_best_tree = None\n",
    "    overall_best_fitness = -1.0\n",
    "\n",
    "    for target_length in target_side_lengths:\n",
    "        print(f\"\\n--- Evolving for Target Square of Length {target_length} ---\")\n",
    "        target_coords = generate_target_square_coords4(target_length, origin_x=0, origin_y=0)\n",
    "        print(f\"Target coordinates: {target_coords}\")\n",
    "\n",
    "        population = create_initial_population4(pop_size, max_depth, max_children, 0, 0, \"InitialTree\")\n",
    "        best_fitness_for_target = -1.0\n",
    "        best_tree_for_target = None\n",
    "\n",
    "        generation_costs = [] # To track cost (generations) per target\n",
    "\n",
    "        for generation in range(generations_per_target):\n",
    "            fitness_scores = [calculate_fitness4(tree, target_coords) for tree in population]\n",
    "\n",
    "            current_best_fitness = max(fitness_scores)\n",
    "            current_best_tree = population[np.argmax(fitness_scores)]\n",
    "\n",
    "            if current_best_fitness > best_fitness_for_target:\n",
    "                best_fitness_for_target = current_best_fitness\n",
    "                best_tree_for_target = current_best_tree\n",
    "\n",
    "            print(f\"Generation {generation+1}: Best Fitness = {current_best_fitness:.4f}\")\n",
    "\n",
    "            # Check for convergence or satisfactory fitness\n",
    "            if current_best_fitness >= 0.95: # Arbitrary high fitness threshold\n",
    "                print(f\"Target reached or near optimal in {generation+1} generations!\")\n",
    "                break\n",
    "\n",
    "            # Selection\n",
    "            parents = select_parents4(population, fitness_scores, pop_size // 2) # Select half population as parents\n",
    "\n",
    "            # Create next generation\n",
    "            next_population = []\n",
    "            for i in range(0, len(parents), 2):\n",
    "                if i + 1 < len(parents):\n",
    "                    p1 = parents[i]\n",
    "                    p2 = parents[i+1]\n",
    "\n",
    "                    # Crossover\n",
    "                    child1, child2 = crossover_trees4(p1, p2, crossover_rate)\n",
    "\n",
    "                    # Mutation\n",
    "                    next_population.append(mutate_tree4(child1, max_depth, max_children, mutation_rate))\n",
    "                    next_population.append(mutate_tree4(child2, max_depth, max_children, mutation_rate))\n",
    "                else:\n",
    "                    # If odd number of parents, just mutate the last one\n",
    "                    next_population.append(mutate_tree4(copy.deepcopy(parents[i]), max_depth, max_children, mutation_rate))\n",
    "\n",
    "            # Fill remaining slots with new random trees if population size decreased due to unviable children\n",
    "            while len(next_population) < pop_size:\n",
    "                local_occupied_set = set()\n",
    "                new_tree = generate_random_spatial_tree_evolution4(max_depth, max_children, 0, 0, node_prefix=f\"RandomGen_{len(next_population)}\", local_occupied_set=local_occupied_set)\n",
    "                if new_tree: # Ensure a tree was actually generated\n",
    "                    next_population.append(new_tree)\n",
    "                else:\n",
    "                    # Fallback if random generation fails too often, to avoid infinite loop\n",
    "                    # This indicates an issue with tree generation parameters or space constraints\n",
    "                    break\n",
    "\n",
    "            population = next_population[:pop_size] # Ensure population size remains constant\n",
    "            generation_costs.append(generation + 1) # Track generations taken\n",
    "\n",
    "        evolution_results.append({\n",
    "            'target_length': target_length,\n",
    "            'best_tree': best_tree_for_target,\n",
    "            'best_fitness': best_fitness_for_target,\n",
    "            'generations_taken': len(generation_costs) # This will be the number of generations it ran for\n",
    "        })\n",
    "\n",
    "        if best_tree_for_target and best_fitness_for_target > overall_best_fitness:\n",
    "            overall_best_fitness = best_fitness_for_target\n",
    "            overall_best_tree = best_tree_for_target\n",
    "\n",
    "    return evolution_results, overall_best_tree\n",
    "\n",
    "\n",
    "# Main simulation run\n",
    "if __name__ == \"__main__\":\n",
    "    random.seed(42) # For reproducibility\n",
    "    np.random.seed(42)\n",
    "\n",
    "    TARGET_SIDE_LENGTHS = [2, 3, 4, 5, 6, 7] # Squares of length 2, 3, 4, 5, and 6\n",
    "    POPULATION_SIZE = 200 # Increased population size\n",
    "    GENERATIONS_PER_TARGET = 200 # Increased max generations to aid convergence for length 7\n",
    "    MAX_TREE_DEPTH = 5\n",
    "    MAX_CHILDREN_PER_NODE = 3\n",
    "    MUTATION_RATE = 0.15 # Probability of a node adding/removing a child\n",
    "    CROSSOVER_RATE = 0.7 # Probability of crossover occurring between two parents\n",
    "\n",
    "    results, overall_best_tree = run_evolution4(\n",
    "        TARGET_SIDE_LENGTHS, POPULATION_SIZE, GENERATIONS_PER_TARGET,\n",
    "        MAX_TREE_DEPTH, MAX_CHILDREN_PER_NODE, MUTATION_RATE, CROSSOVER_RATE\n",
    "    )\n",
    "\n",
    "    print(\"\\n--- la Evolución Summary ---\")\n",
    "    for res in results:\n",
    "        print(f\"Target L={res['target_length']}: Best Fitness = {res['best_fitness']:.4f}, Generations = {res['generations_taken']}\")\n",
    "\n",
    "    print(\"\\n--- Plotting Best Tree for Each Target Length ---\")\n",
    "    for res in results:\n",
    "        target_length = res['target_length']\n",
    "        best_tree = res['best_tree']\n",
    "        best_fitness = res['best_fitness']\n",
    "\n",
    "        if best_tree:\n",
    "            target_coords = generate_target_square_coords4(target_length, origin_x=0, origin_y=0)\n",
    "\n",
    "            fig, ax = plt.subplots(1, 2, figsize=(16, 8))\n",
    "            ax[0].set_aspect('equal', adjustable='box')\n",
    "            ax[1].set_aspect('equal', adjustable='box')\n",
    "\n",
    "            # Plot the target\n",
    "            for cx, cy in target_coords:\n",
    "                draw_square_evolution4(ax[0], cx, cy, color='green', alpha=0.5, label='Target')\n",
    "            ax[0].set_title(f\"Target Square (L={target_length})\")\n",
    "            ax[0].grid(True)\n",
    "\n",
    "            # Plot the best tree for this target\n",
    "            plot_tree_nodes_evolution4(best_tree, ax[1], root_color='purple', child_color='orange')\n",
    "            ax[1].set_title(f\"Best Evolved Tree for L={target_length} (Fitness: {best_fitness:.4f})\")\n",
    "\n",
    "            # Set limits for plotting\n",
    "            tree_coords_for_plot = best_tree.collect_all_coordinates()\n",
    "            all_coords_union = target_coords.union(tree_coords_for_plot)\n",
    "\n",
    "            if all_coords_union:\n",
    "                all_coords_array = Array(list(all_coords_union))\n",
    "                min_x = min(c[0] for c in all_coords_array) - 1\n",
    "                max_x = max(c[0] for c in all_coords_array) + 2\n",
    "                min_y = min(c[1] for c in all_coords_array) - 1\n",
    "                max_y = max(c[1] for c in all_coords_array) + 2\n",
    "            else:\n",
    "                min_x, max_x, min_y, max_y = -2, 2, -2, 2\n",
    "\n",
    "            for a in ax:\n",
    "                a.set_xlim(min_x, max_x)\n",
    "                a.set_ylim(min_y, max_y)\n",
    "                a.set_xticks(range(int(min_x), int(max_x)))\n",
    "                a.set_yticks(range(int(min_y), int(max_y)))\n",
    "\n",
    "            plt.tight_layout()\n",
    "            plt.show()\n",
    "        else:\n",
    "            print(f\"No successful tree evolved for target length {target_length}.\")\n",
    "\n",
    "\n",
    "    # The previous plotting for overall best tree against final target is removed as it's redundant\n",
    "    # with the new per-target plotting.\n",
    "\n",
    "    # Extract data for plotting\n",
    "    target_lengths = np.array([res['target_length'] for res in results])\n",
    "    generations_taken = np.array([res['generations_taken'] for res in results])\n",
    "\n",
    "    # Define the exponential function\n",
    "    def exponential_func(x, a, b):\n",
    "        return a * np.exp(b * x)\n",
    "\n",
    "    # Fit the data to the exponential function\n",
    "    # Provide initial guess for 'a' and 'b' to help the optimizer\n",
    "    # For exponential growth, 'a' can be the intercept at x=0, 'b' is the growth rate.\n",
    "    # A rough guess: a = generations_taken[0], b = 0.1 (or some small positive number)\n",
    "    try:\n",
    "        popt, pcov = curve_fit(exponential_func, target_lengths, generations_taken, p0=[1, 0.1])\n",
    "        a_fit, b_fit = popt\n",
    "        print(f\"\\nFitted exponential function: y = {a_fit:.2f} * exp({b_fit:.2f} * x)\")\n",
    "\n",
    "        # Generate points for the fitted curve\n",
    "        x_fit = np.linspace(min(target_lengths), max(target_lengths), 100)\n",
    "        y_fit = exponential_func(x_fit, a_fit, b_fit)\n",
    "\n",
    "        # Create the plot\n",
    "        fig, ax = plt.subplots(figsize=(10, 6))\n",
    "        ax.plot(target_lengths, generations_taken, marker='o', linestyle='-', color='blue', label='Actual Generations')\n",
    "        ax.plot(x_fit, y_fit, linestyle='--', color='red', label='Exponential Fit')\n",
    "\n",
    "        # Add labels and title\n",
    "        ax.set_title('Generations Required vs. Target Square Length with Exponential Fit')\n",
    "        ax.set_xlabel('Target Square Length')\n",
    "        ax.set_ylabel('Generations Taken')\n",
    "        ax.set_xticks(target_lengths)\n",
    "        ax.grid(True)\n",
    "        ax.legend()\n",
    "\n",
    "        plt.tight_layout()\n",
    "        plt.show()\n",
    "\n",
    "    except RuntimeError as e:\n",
    "        print(f\"\\nCould not fit exponential model: {e}\")\n",
    "        # If fitting fails, just plot the original data as a fallback\n",
    "        fig, ax = plt.subplots(figsize=(10, 6))\n",
    "        ax.plot(target_lengths, generations_taken, marker='o', linestyle='-', color='blue')\n",
    "        ax.set_title('Generations Required vs. Target Square Length (Fitness >= 0.95)')\n",
    "        ax.set_xlabel('Target Square Length')\n",
    "        ax.set_ylabel('Generations Taken')\n",
    "        ax.set_xticks(target_lengths)\n",
    "        ax.grid(True)\n",
    "        plt.tight_layout()\n",
    "        plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "UOvKKCuBF1Te"
   },
   "source": [
    "**Recomendación para ejecutar el programa.** Cambie la semilla del generador aleatorio en la línea 363 para ver una nueva salida.\n",
    "\n",
    "**Disconformidad.** Nos sentimos muy incómodos con el proceso evolutivo que crea un enredo. Esto es contrario al proceso ordenado que esperamos.\n",
    "\n",
    "**Observación:** El ajuste exponencial se ve bien. Esto significa que el costo que la Evolución debe pagar para ajustarse a un cuadrado de longitud $n$ es una función exponencial en $n$.\n",
    "\n",
    "**Observaciones de Gemini sobre el crecimiento desproporcionado del costo para longitudes 6 y 7.**\n",
    ">\n",
    "> El crecimiento desproporcionado en las generaciones tomadas para la longitud objetivo 6, en comparación con las longitudes 2, 3, 4 y 5, se puede atribuir a varios factores:\n",
    ">\n",
    "> 1. Mayor complejidad del espacio de búsqueda: a medida que aumenta la longitud lateral del cuadrado objetivo, el número de configuraciones posibles para que un árbol llene perfectamente ese cuadrado crece exponencialmente. La longitud 6 representa un objetivo significativamente más grande y más complejo que la longitud 5, lo que hace que sea más difícil para el algoritmo evolutivo encontrar una solución óptima rápidamente.\n",
    ">\n",
    "> 2. Casos de borde y conectividad: Llenar un cuadrado perfectamente requiere una ubicación precisa y la conectividad de los nodos. Para cuadrados más grandes, las condiciones de los límites y la necesidad de conectar partes distantes del cuadrado se vuelven más difíciles de lograr consistentemente mediante operaciones aleatorias de generación, mutación y cruce.\n",
    ">\n",
    "> 3. Óptimo local: el algoritmo evolutivo podría quedar atrapado en un óptimo local, donde los árboles son muy adecuados para una porción del cuadrado objetivo, pero luchan por adaptarse para llenar las áreas restantes sin cambios significativos que es improbable que ocurran a través de mutaciones aleatorias o cruces en un número razonable de generaciones.\n",
    ">\n",
    "> 4. Limitaciones de ajuste del parámetro: Si bien POPULATION_SIZE y GENERATIONS_PER_TARGET fueron aumentados, estos parámetros aún podrían ser insuficientes para superar consistentemente el aumento de complejidad para la longitud 6 dentro del número dado de generaciones. Los valores MUTATION_RATE y CROSSOVER_RATE también juegan un papel crucial, y sus valores actuales pueden no ser ideales para navegar eficazmente por el espacio de búsqueda más grande para la longitud 6.\n",
    ">\n",
    "> 5. Estancamiento de la Evolución: Para la longitud 6, el algoritmo podría haber experimentado períodos de estancamiento donde las mejoras en la idoneidad eran mínimas a lo largo de muchas generaciones, indicando que la población podría no estar explorando nuevas regiones prometedoras del espacio de solución con suficiente eficiencia.\n",
    "\n",
    "**Ejercicio.** Expresa tu opinión sobre el factor más importante que causa un aumento excesivo de los costes.\n",
    ">\n",
    "> *Respuesta.*  A medida que crece la longitud del cuadrado, necesitamos árboles más largos. Esto implica un número exponencial de nodos con los que trabajar, y también un número exponencial de modos de inserción del árbol en el plano. De hecho, el número de nodos crece exponencialmente porque la reproducción genera un número exponencial de hijos. Además, el número de modos de representación en un plano de un árbol está relacionado con permutaciones, que se cuentan por factoriales relacionados con exponenciales, según la fórmula de Stirling. Por lo tanto, el espacio de búsqueda también crece exponencialmente. La búsqueda no puede ser superficial debido a las estrictas condiciones en los bordes del cuadrado objetivo.\n",
    "\n",
    "\n",
    "**Rechazo del Modelo de Impresión.** Colab tiene problemas para ejecutar el programa que se ajuste a un cuadrado de borde 7. A partir de esta dificultad, debe quedar claro que el Modelo de Impresión de Morfogénesis no tiene nada que ver con la biología. O, ¿cómo podemos explicar la forma del húmero o una cadera, cada uno con millones de células?\n",
    "\n",
    "Investiguemos la literatura a ver qué podemos aprender.\n",
    "\n",
    "**Ejercicio.** Realiza una revisión de la literatura sobre las síntesis de la forma de los huesos y extrae ideas que puedan guiar simulaciones simples y realizables.\n",
    ">\n",
    "> *Respuesta.* Siguiendo una indicación de Google, hemos revisado los siguientes documentos:\n",
    "\n",
    "- Wikipedia contributors. (2026, July 13). Hox gene. In Wikipedia, The Free Encyclopedia. Retrieved 13:32, July 24, 2026, from https://en.wikipedia.org/w/index.php?title=Hox_gene&oldid=1363987412\n",
    "\n",
    "- Wikipedia contributors. (2025, September 8). Discredited hypotheses for the Cambrian explosion. In Wikipedia, The Free Encyclopedia. Retrieved 13:33, July 24, 2026, from https://en.wikipedia.org/w/index.php?title=Discredited_hypotheses_for_the_Cambrian_explosion&oldid=1310220744\n",
    "\n",
    "- Eyal S, Kult S, Rubin S, Krief S, Felsenthal N, Pineault KM, Leshkowitz D, Salame TM, Addadi Y, Wellik DM, Zelzer E. Bone morphology is regulated modularly by global and regional genetic programs. Development. 2019 Jul 26;146(14):dev167882. doi: 10.1242/dev.167882. PMID: 31221640; PMCID: PMC6679367. https://pubmed.ncbi.nlm.nih.gov/31221640/\n",
    "\n",
    "\n",
    "- Gerard Karsently, Erwin F. Wagner (2002). Reaching a Genetic and Molecular Understanding of Skeletal Development. Developmental Cell. Volume 2, Issue 4, April 2002, Pages 389-406 https://doi.org/10.1016/S1534-5807(02)00157-0\n",
    "\n",
    "Nuestra revisión crítica es la siguiente:\n",
    "\n",
    "Todo lo relacionado con la forma biológica es mucho más complejo de lo que uno desearía. La complejidad surge de la gran cantidad de actores y de la  riqueza de su interacción. Simplemente señalemos que todos los tipos de células provienen de una sola célula, el zigoto, a través de un proceso de reproducción con diferenciación, muerte y reemplazo por división local o por migrantes de otro tipo de célula desde lejos.  \n",
    "\n",
    "Algunos puntos que podrían dar lugar a ideas para simulaciones simples son los siguientes:\n",
    "\n",
    "- No trates de producir estructuras gigantes a la vez. En lugar de eso, haz un modelo pequeño y agrándalo. Así que los bebés son extremadamente similares a los adultos.\n",
    "\n",
    "- No programar las especificidades desde el principio. Más bien, construir complejidad mediante la modificación del material existente en una extensión lo más grande posible. Este es el modo epistático de construir complejidad, haciendo modificaciones sobre modificaciones.\n",
    "\n",
    "- La forma del hueso se crea bajo el influjo de genes que trabajan bajo una jerarquía tanto para las tendencias temporales como para los patrones espaciales de formación de módulos.  Todo el sistema está regulado genéticamente por hormonas, con efecto global, y por genes específicos, con efectos distales y proximales que producen moléculas dirigidas a células vecinas. Sorprendentemente, todo el proceso de morfogénesis es desencadenado por el ARNm materno e influenciado por varios tipos de proteínas maternas. Esto es contrario a la creencia predeterminada de que el ADN contiene la información para crear la vida. Esto es falso. La verdad es que el ADN sólo contiene información para continuar la vida.\n",
    "\n",
    "- Los genes más estudiados son la familia *homeobox* que especifica el orden de las partes del plano corporal a lo largo del eje definido por la columna vertebral de los animales.  \n",
    "\n",
    "- Predicciones de la Teoría Evolutiva: si el sistema de creacion de formas apareció por la Evolución, debe haber diversas radiaciones de nuevas especies (verdadero) que modifiquen los niveles inferiores con más frecuencia que los superiores (verdadero), y una producción masiva de fósiles mal hechos de todo tipo (falso).\n",
    "\n",
    "- Un mecanismo habitual de epístasis en la síntesis de la forma es similar al dibujo sobre una hoja de papel. El papel representa un tejido de fondo, y el dibujo es hecho por una molécula mensajera que modifica un grupo de células. Por ejemplo, el mensajero puede hacer que las células se adhieran fuertemente unas a otras para formar, digamos, un hueso metacarpiano. Si se necesitan dos estructuras separadas, por ejemplo maxilar y mandíbula, o en una articulación, la separación se obtiene a través de la inducción de apoptosis o suicidio de células intermedias.\n",
    "\n",
    "- La activación o inhibición de los genes de forma depende de la concentración de diversas proteínas, algunas de las cuales son de origen materno. Por ejemplo, una alta concentración de una proteína junto con una baja concentración de otra puede servir como señal de conmutación para un gen específico. Y, ¿cómo se regulan las grandes regiones de tejido? Por gradientes de proteínas que son producidas por centros específicos que se encuentran, tal vez, en lugares distantes. Los dedos se forman de esta manera más el mecanismo de dibujo.\n",
    "\n",
    "- Los huesos son estructuras dinámicas que parecen estar en equilibrio por un proceso de nacimiento-muerte. Los osteoclastos son responsables de la degradación mineral, mientras que la reparación proviene de la reproducción y diferenciación de las células. Por ejemplo, la hormona femenina estrógeno frena la acción de los osteoclastos, así que cuando la mujer envejece, esta actividad de frenado disminuye y los huesos pierden sustrato mineral. Como consecuencia, aparece la osteoporosis.\n",
    "\n",
    "Si bien se entiende suficientemente el marco general de la formación del hueso, nadie sabe cómo se determinan las  forma específicas."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "WlnMy5s7MgOQ"
   },
   "source": [
    "**Ejercicio.** Usando las ideas de tu reseña, propón un modelo simple para sintetizar la forma de un cuadrado de cualquier longitud.\n",
    ">\n",
    "> *Respuesta.* Presentamos dos modelos. El primero se basa en mensajeros que producen inhibición del crecimiento en el vecindario inmediato. El segundo se basa en mensajeros que actúan sobre las células alrededor de las cuales su concentración es lo suficientemente alta.\n",
    "\n",
    " \n",
    "## El modelo inhibidor\n",
    "\n",
    "Nacemos pequeños y con el tiempo nos agrandamos mientras se conservan los rasgos fundamentales. Convirtamos este hecho en un modelo para generar forma.\n",
    "\n",
    "**Ejemplo.** Mostremos cómo podemos generar un cuadrado grande ampliando uno pequeño. Esto significa añadir células de una manera dada para producir cuadrados cada vez más grandes. Nuestro punto clave es que usamos un mensajero que inhibe el crecimiento de las células.\n",
    "\n",
    "El *modelo inhibidor* para construir una forma cuadrada en silico es el siguiente:\n",
    "\n",
    "1. Cada celda es cuadrada y ocupa una unidad cuadrada.\n",
    "2. Todas las células, jóvenes y viejas por igual, excretan una molécula que es un mensajero que dice: *Este lugar ya está ocupado.* Este mensajero inhibe la división cuando se encuentra en una concentración muy alta, por ejemplo, cuando un sitio vecino está ocupado.\n",
    "3. Cada célula madura se divide y da origen a una hija que llena el vacío en un cuadrado vecino que no es elegido al azar. En cambio, se elige el espacio de menor concentración del mensajero inhibidor.\n",
    "4. Las células necesitan tiempo para madurar antes de reproducirse.\n",
    "5. El proceso comienza con una célula primordial que tiene una forma cuadrada. Así que, por un tiempo, la única célula que se reproduce es la primordial, y puede hacerlo suficientes veces para llenar todo su vecindario antes de que las hijas maduren. Las células diagonales pueden eventualmente ser generadas por células hijas. Si se encuentra un problema con la generación doble, se utiliza la apoptosis para resolver el conflicto. El resultado final es un cuadrado de lado 3.\n",
    "6. En una segunda ronda, las celdas externas del cuadrado del lado 3 se dividen. Cada hija llena inmediatamente el cuadrado de enfrente. Las células diagonales pueden aparecer por reproducción de las hijas una vez que maduran. El resultado es otra fila poblada alrededor del cuadrado del lado 3 formando un cuadrado del lado 5. Y así sucesivamente.\n",
    "7. El sistema de células puede contar cuántas divisiones han ocurrido desde la célula primordial. Las células humanas pueden dividirse entre 40 y 60 veces. El mecanismo es a través de la supresión de alguna secuencia final en los telómeros, los extremos terminales de los cromosomas, después de cada división celular.\n",
    "8. Las celdas se dividen hasta que se alcanza el límite de división predefinido. Cuando esto ocurre, el proceso se detiene y la forma final se congela.\n",
    "\n",
    "**Ejercicio.** Simula el modelo inhibidor para construir una forma cuadrada.\n",
    ">\n",
    "> *Respuesta.* Le pedimos a Colab que desarrollara la simulación del modelo inhibidor. Su respuesta fue:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 1000
    },
    "executionInfo": {
     "elapsed": 5296,
     "status": "ok",
     "timestamp": 1788365626230,
     "user": {
      "displayName": "jose rodriguez",
      "userId": "08454562216435392883"
     },
     "user_tz": 300
    },
    "id": "_ANzidHlkMgU",
    "outputId": "e35a91ec-49be-4a48-b4b6-d5907da80f07"
   },
   "outputs": [],
   "source": [
    "# Program inhibitor_model.py\n",
    "# Cell can reproduce if an inhibitor does not reach them.\n",
    "# A square of length 5 must be fitted by this process\n",
    "# beginning from a unitary square.\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "import matplotlib.patches as patches\n",
    "import random\n",
    "import copy\n",
    "\n",
    "class InhibitorCell:\n",
    "    def __init__(self, x, y, generation=0, maturation_time=1):\n",
    "        self.x = x\n",
    "        self.y = y\n",
    "        self.generation = generation\n",
    "        self.maturation_time = maturation_time\n",
    "        self.age = 0\n",
    "        self.is_mature = False\n",
    "\n",
    "    def age_cell(self):\n",
    "        self.age += 1\n",
    "        if self.age >= self.maturation_time:\n",
    "            self.is_mature = True\n",
    "\n",
    "    def __repr__(self):\n",
    "        return f\"Cell({self.x},{self.y}, Gen:{self.generation}, Age:{self.age}, Mature:{self.is_mature})\"\n",
    "\n",
    "class InhibitorModel:\n",
    "    def __init__(self, initial_cell_x=0, initial_cell_y=0, maturation_time=1):\n",
    "        self.grid = {}\n",
    "        self.cells = []\n",
    "        self.generation_count = 0\n",
    "        self.maturation_time = maturation_time\n",
    "\n",
    "        # Initialize with one primordial cell\n",
    "        primordial_cell = InhibitorCell(initial_cell_x, initial_cell_y, generation=0, maturation_time=maturation_time)\n",
    "        self.add_cell(primordial_cell)\n",
    "\n",
    "    def add_cell(self, cell):\n",
    "        self.grid[(cell.x, cell.y)] = cell\n",
    "        self.cells.append(cell)\n",
    "\n",
    "    def is_occupied(self, x, y):\n",
    "        return (x, y) in self.grid\n",
    "\n",
    "    def get_neighbors_with_concentration(self, x, y):\n",
    "        # Returns potential neighbor coordinates and a 'concentration' score\n",
    "        # Lower score means less occupied neighbors, thus a 'void' preference\n",
    "        neighbors = []\n",
    "        for dx in [-1, 0, 1]:\n",
    "            for dy in [-1, 0, 1]:\n",
    "                if dx == 0 and dy == 0:\n",
    "                    continue # Exclude self\n",
    "\n",
    "                nx, ny = x + dx, y + dy\n",
    "                concentration = 0\n",
    "                # Check direct neighbors of the potential neighbor\n",
    "                for nn_dx in [-1, 0, 1]:\n",
    "                    for nn_dy in [-1, 0, 1]:\n",
    "                        if nn_dx == 0 and nn_dy == 0:\n",
    "                            continue\n",
    "                        if self.is_occupied(nx + nn_dx, ny + nn_dy):\n",
    "                            concentration += 1\n",
    "                neighbors.append(((nx, ny), concentration))\n",
    "        return neighbors\n",
    "\n",
    "    def simulate_step(self):\n",
    "        self.generation_count += 1\n",
    "        new_cells_this_step = []\n",
    "        cells_to_reproduce = []\n",
    "\n",
    "        # Age all cells\n",
    "        for cell in self.cells:\n",
    "            cell.age_cell()\n",
    "            if cell.is_mature and cell.age == self.generation_count: # Only reproduce once per maturation cycle\n",
    "                cells_to_reproduce.append(cell)\n",
    "\n",
    "        # Process reproduction\n",
    "        for mother_cell in cells_to_reproduce:\n",
    "            potential_neighbors = self.get_neighbors_with_concentration(mother_cell.x, mother_cell.y)\n",
    "\n",
    "            # Filter for unoccupied neighbors\n",
    "            unoccupied_neighbors = [(coord, conc) for coord, conc in potential_neighbors if not self.is_occupied(coord[0], coord[1])]\n",
    "\n",
    "            if unoccupied_neighbors:\n",
    "                # Choose the space of least concentration (least occupied neighbors)\n",
    "                min_concentration = min(n[1] for n in unoccupied_neighbors)\n",
    "                best_voids = [n[0] for n in unoccupied_neighbors if n[1] == min_concentration]\n",
    "\n",
    "                # If multiple best voids, choose one randomly\n",
    "                if best_voids:\n",
    "                    chosen_x, chosen_y = random.choice(best_voids)\n",
    "\n",
    "                    # Create daughter cell\n",
    "                    daughter_cell = InhibitorCell(chosen_x, chosen_y, generation=self.generation_count, maturation_time=self.maturation_time)\n",
    "                    new_cells_this_step.append(daughter_cell)\n",
    "\n",
    "        for cell in new_cells_this_step:\n",
    "            if not self.is_occupied(cell.x, cell.y): # Double check before adding\n",
    "                self.add_cell(cell)\n",
    "            # else: # Apoptosis for conflicting cells\n",
    "            #    print(f\"Conflict: Cell at ({cell.x},{cell.y}) already occupied. Apoptosis for {cell}\")\n",
    "\n",
    "        return len(new_cells_this_step) > 0\n",
    "\n",
    "    def get_current_grid_coords(self):\n",
    "        return list(self.grid.keys())\n",
    "\n",
    "# --- Plotting Function --- #\n",
    "def plot_grid(grid_coords, title, ax):\n",
    "    ax.clear()\n",
    "    if not grid_coords:\n",
    "        ax.set_title(title)\n",
    "        ax.set_aspect('equal', adjustable='box')\n",
    "        ax.set_xlim(-2, 2)\n",
    "        ax.set_ylim(-2, 2)\n",
    "        ax.grid(True)\n",
    "        return\n",
    "\n",
    "    min_x = min(c[0] for c in grid_coords) - 1\n",
    "    max_x = max(c[0] for c in grid_coords) + 2\n",
    "    min_y = min(c[1] for c in grid_coords) - 1\n",
    "    max_y = max(c[1] for c in grid_coords) + 2\n",
    "\n",
    "    for x, y in grid_coords:\n",
    "        rect = patches.Rectangle((x, y), 1, 1, facecolor='lightblue', edgecolor='black', linewidth=1)\n",
    "        ax.add_patch(rect)\n",
    "        ax.text(x + 0.5, y + 0.5, 'C', ha='center', va='center', color='darkblue', fontsize=8)\n",
    "\n",
    "    ax.set_xlim(min_x, max_x)\n",
    "    ax.set_ylim(min_y, max_y)\n",
    "    ax.set_xticks(range(int(min_x), int(max_x)))\n",
    "    ax.set_yticks(range(int(min_y), int(max_y)))\n",
    "    ax.set_aspect('equal', adjustable='box')\n",
    "    ax.grid(True)\n",
    "    ax.set_title(title)\n",
    "\n",
    "# --- Simulation and Visualization --- #\n",
    "if __name__ == \"__main__\":\n",
    "    random.seed(42) # For reproducibility\n",
    "\n",
    "    maturation_time_param = 1 # Cells mature after 1 generation\n",
    "    model = InhibitorModel(maturation_time=maturation_time_param)\n",
    "\n",
    "    fig, ax = plt.subplots(figsize=(8, 8))\n",
    "    plt.ion() # Turn on interactive mode for live plotting\n",
    "    plt.show(block=False)\n",
    "\n",
    "    print(\"Starting inhibitor model simulation...\")\n",
    "\n",
    "    for step in range(1, 10): # Simulate for 10 steps\n",
    "        print(f\"\\n--- Simulation Step {step} ---\")\n",
    "        initial_cell_count = len(model.cells)\n",
    "        cells_added = model.simulate_step()\n",
    "\n",
    "        print(f\"Cells before reproduction: {initial_cell_count}\")\n",
    "        print(f\"Cells after reproduction: {len(model.cells)}\")\n",
    "\n",
    "        current_coords = model.get_current_grid_coords()\n",
    "        plot_grid(current_coords, f\"Inhibitor Model Growth - Step {step}\", ax)\n",
    "        fig.canvas.draw()\n",
    "        fig.canvas.flush_events()\n",
    "        plt.pause(0.5) # Pause to visualize each step\n",
    "\n",
    "        # Optional: Stop if no new cells are added, assuming stability\n",
    "        if not cells_added and step > 1: # Only stop if it's not the very first step of cell addition\n",
    "            print(\"No new cells added, model reached stable state or filled available space.\")\n",
    "            break\n",
    "\n",
    "    print(\"\\nSimulation finished.\")\n",
    "    plt.ioff() # Turn off interactive mode\n",
    "    plt.show(block=True) # Keep the final plot open"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "N4_uQ-z4uc1k"
   },
   "source": [
    "**Observación.** El resultado mostraba una Evolución de una estructura en crecimiento. Pero nada más.\n",
    "\n",
    "Consideramos que no hay un problema fundamental con la generación de cuadrados por medio de difusión a los primeros vecinos. Pero, ¿qué pasa con otras geometrías más complejas?\n",
    "\n",
    "En el siguiente modelo, dependemos de la difusión de mensajeros que permiten la reproducción de las células."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## El modelo de red de iluminación de la morfogénesis\n",
    "\n",
    "Con la mejor de nuestra creatividad, no podemos imaginar cómo hacer una forma arbitraria si no es con la ayuda de árboles. Ya descartamos el modelo de impresión en el que la posición de todas las células está predeterminada por el programa genético que determina cada paso del proceso de reproducción que es descrito por un árbol. La razón es que este modelo demanda demasiados recursos. Influenciados por la literatura, estamos estudiando el papel de la difusión de los mensajeros.\n",
    "\n",
    "**Ejemplo.** Propongamos un modelo para la generación de formas arbitrarias utilizando difusión de mensajeros que actúan dondequiera que su concentración supere un umbral dado.\n",
    ">>\n",
    ">> Pensemos en un embrión en desarrollo que no tiene un tejido de fondo para modificar. Simplemente crece por división celular, que se describe mediante un árbol. Dentro de ella, supongamos que hay un subárbol que contiene información para modificar las células circundantes hasta un cierto radio. Esto se determina por un umbral en una concentración de un mensajero.  Los mensajeros son producidos por los nodos del subárbol y se difunden hacia su vecindario. Por lo tanto, un nodo es similar a una lámpara que ilumina satisfactoriamente su entorno hasta un cierto radio. Para iluminar completamente una región dada, necesitamos instalar una red de iluminación con lámparas cuya potencia puede ser diferente. La lógica implica que la potencia de la lámpara es mayor donde el área es mayor, y disminuye en las ramas laterales. De la misma manera, para generar una región con células específicas, necesitamos un subárbol cuyos nodos irradian mensajeros. Si la concentración del mensajero está por debajo de un cierto umbral, las células detienen su división.\n",
    "\n",
    "**Ejercicio.** Adapta el modelo al caso en que el subárbol transmite la información para modificar las células circundantes de un tejido matriz.\n",
    ">\n",
    "> *Respuesta.* Consideremos un tejido 2D que se extiende sobre el plano. El tejido es similar a una hoja de papel dividida por una matriz rectangular, en la que cada cuadrado de los miembros está ocupado por una célula. El dibujante es un árbol ya presente en la matriz que se compone de un tipo específico de célula. Opera a través de la difusión de mensajeros moleculares cuya concentración debe estar por encima de un cierto umbral. Cuando una molécula en concentración suficiente alcanza una célula vecina, se convierte en un tipo específico de célula. Es como una lámpara que ilumina su espacio circundante, y toda la estructura es como un área iluminada que cambia de color según el tipo de lámpara.\n",
    "\n",
    "**Ejercicio.** Ilustra una red de iluminación mostrando los círculos de influencia de cada nodo, que sirven como centro de generación de mensajeros.\n",
    ">\n",
    "> *Respuesta.* Le pedimos ayuda a Colab:\n",
    ">\n",
    "> Por favor, genera y dibuja un árbol espacial aleatorio cuyos nodos simulan un centro de difusión de mensajeros moleculares con un radio de influencia predefinido.  \n",
    ">\n",
    "> Gemini desarrolló un código donde la raíz no tenía hijos. Luego, se añadieron más hijos y se evitó \"demasiada iluminación\". El resultado final fue:\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "id": "ce994463"
   },
   "outputs": [],
   "source": [
    "# Program lighting_network.py\n",
    "# The program generates a lighting network based on a tree\n",
    "# and with lamps of different power.\n",
    "# This is a simulation of the generation of form in morphogenesis.\n",
    "# The lamps represent the nodes of the tree that can expel chemical messengers.\n",
    "# The circles represent the regions in which\n",
    "# the density of the messengers is high enough to affect the cell.\n",
    "# An affected cell can have a license to divide,\n",
    "# or, if a previous cellular matrix exists,\n",
    "# it can acquire specific characteristics proper of cell differentiation.\n",
    "\n",
    "import random\n",
    "import matplotlib.pyplot as plt\n",
    "import matplotlib.patches as patches\n",
    "import numpy as np\n",
    "\n",
    "# Global set to store all occupied coordinates for unique cell placement\n",
    "# (No longer directly used for overlap check within tree generation, but might be useful for plotting limits)\n",
    "occupied_coords_diffusion = set()\n",
    "\n",
    "class SpatialTreeNode_Diffusion:\n",
    "    def __init__(self, value, x, y, radius, occupied_squares_set, diffusion_nodes_info):\n",
    "        self.value = value\n",
    "        self.x = x\n",
    "        self.y = y\n",
    "        self.radius = radius\n",
    "        self.children = []\n",
    "\n",
    "        self.occupied_squares_set = occupied_squares_set\n",
    "        self.diffusion_nodes_info = diffusion_nodes_info # List of (x, y, radius) for all nodes in the tree\n",
    "\n",
    "        self.occupied_squares_set.add((x, y)) # Add current node's (x,y) square to the set\n",
    "        self.diffusion_nodes_info.append((x, y, radius)) # Add current node's (x,y,radius) to the list\n",
    "\n",
    "    def add_child(self, child_node):\n",
    "        if not isinstance(child_node, SpatialTreeNode_Diffusion):\n",
    "            raise TypeError(\"Child must be an instance of SpatialTreeNode_Diffusion\")\n",
    "        self.children.append(child_node)\n",
    "\n",
    "    def get_neighboring_coordinates(self):\n",
    "        neighbors = []\n",
    "        for dx in [-1, 0, 1]:\n",
    "            for dy in [-1, 0, 1]:\n",
    "                if dx == 0 and dy == 0:\n",
    "                    continue  # Exclude the current square itself\n",
    "                neighbors.append((self.x + dx, self.y + dy))\n",
    "        return neighbors\n",
    "\n",
    "    def _is_diffusion_overlapping(self, potential_nx, potential_ny, potential_radius, overlap_factor):\n",
    "        \"\"\"\n",
    "        Checks if a potential new node's diffusion circle overlaps \"too much\" with existing nodes.\n",
    "        \"Too much overlap\" is defined by the overlap_factor.\n",
    "        \"\"\"\n",
    "        potential_center_x, potential_center_y = potential_nx + 0.5, potential_ny + 0.5\n",
    "\n",
    "        for ex, ey, er in self.diffusion_nodes_info:\n",
    "            # Skip checking against self if self is already in diffusion_nodes_info\n",
    "            if (ex, ey) == (self.x, self.y):\n",
    "                continue\n",
    "\n",
    "            existing_center_x, existing_center_y = ex + 0.5, ey + 0.5\n",
    "\n",
    "            # Calculate distance between centers\n",
    "            distance = np.sqrt((potential_center_x - existing_center_x)**2 + (potential_center_y - existing_center_y)**2)\n",
    "\n",
    "            # Check for significant overlap\n",
    "            # If distance is less than a fraction of the sum of radii, it's too much overlap.\n",
    "            if distance < overlap_factor * (potential_radius + er):\n",
    "                return True # Significant overlap detected\n",
    "        return False\n",
    "\n",
    "    def add_child_in_random_neighbor(self, child_value_prefix, max_node_radius, overlap_factor):\n",
    "        coordinates_neighbors = self.get_neighboring_coordinates()\n",
    "\n",
    "        # First, filter for unoccupied grid squares\n",
    "        available_square_neighbors = [coord for coord in coordinates_neighbors if coord not in self.occupied_squares_set]\n",
    "\n",
    "        valid_child_candidates = [] # Store (nx, ny, child_radius) for candidates that pass overlap check\n",
    "\n",
    "        for nx, ny in available_square_neighbors:\n",
    "            child_radius = random.uniform(0.5, max_node_radius) # Generate potential radius for this child\n",
    "            if not self._is_diffusion_overlapping(nx, ny, child_radius, overlap_factor):\n",
    "                valid_child_candidates.append((nx, ny, child_radius))\n",
    "\n",
    "        if not valid_child_candidates:\n",
    "            return None # No available neighbors that satisfy both square and diffusion overlap conditions\n",
    "\n",
    "        # Choose a random valid candidate\n",
    "        chosen_nx, chosen_ny, chosen_child_radius = random.choice(valid_child_candidates)\n",
    "\n",
    "        child_value = f\"{child_value_prefix}_{len(self.children) + 1}\"\n",
    "        child_node = SpatialTreeNode_Diffusion(child_value, chosen_nx, chosen_ny, chosen_child_radius, self.occupied_squares_set, self.diffusion_nodes_info)\n",
    "        self.add_child(child_node)\n",
    "        return child_node\n",
    "\n",
    "    def __repr__(self):\n",
    "        return f\"SpatialTreeNode_Diffusion(value={self.value}, x={self.x}, y={self.y}, R={self.radius:.2f}, children={[child.value for child in self.children]})\"\n",
    "\n",
    "\n",
    "def generate_random_diffusion_tree(\n",
    "    max_depth, max_children, max_node_radius, current_depth=0, parent_node=None, node_prefix=\"Node\",\n",
    "    occupied_squares_set=None, diffusion_nodes_info=None, overlap_factor=0.7\n",
    "):\n",
    "    if occupied_squares_set is None:\n",
    "        occupied_squares_set = set() # Initialize a new set for this tree's square coordinates\n",
    "    if diffusion_nodes_info is None:\n",
    "        diffusion_nodes_info = [] # Initialize a new list for this tree's node (x,y,radius) information\n",
    "\n",
    "    if parent_node is None:\n",
    "        # Root node at (0,0) with a random initial radius\n",
    "        node_value = f\"{node_prefix}_Root_{random.randint(0, 99)}\"\n",
    "        initial_radius = random.uniform(0.5, max_node_radius)\n",
    "        current_node = SpatialTreeNode_Diffusion(node_value, 0, 0, initial_radius, occupied_squares_set, diffusion_nodes_info)\n",
    "    else:\n",
    "        # Children are added by the parent's method, which handles their coordinates and radius\n",
    "        current_node = parent_node.add_child_in_random_neighbor(f\"{node_prefix}_{current_depth}\", max_node_radius, overlap_factor)\n",
    "        if current_node is None:\n",
    "            return None # Branch terminated if no available neighbor\n",
    "\n",
    "    if current_depth < max_depth:\n",
    "        # Ensure at least two children if max_children >= 2, else at least one if max_children = 1, else 0\n",
    "        num_children = random.randint(min(max_children, 2) if max_children > 0 else 0, max_children)\n",
    "        for _ in range(num_children):\n",
    "            generate_random_diffusion_tree(\n",
    "                max_depth, max_children, max_node_radius, current_depth + 1, current_node,\n",
    "                node_prefix, occupied_squares_set, diffusion_nodes_info, overlap_factor\n",
    "            )\n",
    "    return current_node\n",
    "\n",
    "# --- Plotting functions for Diffusion Trees ---\n",
    "def plot_diffusion_tree_nodes(node, ax):\n",
    "    if node is None:\n",
    "        return\n",
    "\n",
    "    # Plot the square representing the cell\n",
    "    rect = patches.Rectangle((node.x, node.y), 1, 1, facecolor='lightblue', edgecolor='black', linewidth=1, zorder=1)\n",
    "    ax.add_patch(rect)\n",
    "    ax.text(node.x + 0.5, node.y + 0.5, node.value.split('_')[-1], ha='center', va='center', color='darkblue', fontsize=7, zorder=2)\n",
    "\n",
    "    # Plot the circle representing the radius of influence\n",
    "    circle = patches.Circle((node.x + 0.5, node.y + 0.5), node.radius, color='red', alpha=0.2, zorder=0) # Zorder 0 to be behind squares\n",
    "    ax.add_patch(circle)\n",
    "\n",
    "    # Draw lines connecting parent to children\n",
    "    for child in node.children:\n",
    "        ax.plot([node.x + 0.5, child.x + 0.5], [node.y + 0.5, child.y + 0.5], 'k--', linewidth=0.8, zorder=3)\n",
    "        plot_diffusion_tree_nodes(child, ax)\n",
    "\n",
    "def print_diffusion_tree(node, level=0):\n",
    "    if node is None:\n",
    "        return\n",
    "    indent = \"  \" * level\n",
    "    print(f\"{indent}- {node.value} (x={node.x}, y={node.y}, R={node.radius:.2f})\")\n",
    "    for child in node.children:\n",
    "        print_diffusion_tree(child, level + 1)\n",
    "\n",
    "# --- Example Usage ---\n",
    "if __name__ == \"__main__\":\n",
    "    # Clear the global occupied_coords for each run (still useful for total count but tree logic manages its own)\n",
    "\n",
    "    # Parameters to modify\n",
    "    occupied_coords_diffusion.clear()\n",
    "    my_seed = 175\n",
    "    random.seed(my_seed) # For reproducibility\n",
    "    MAX_DEPTH = 8 # Increased for a denser tree\n",
    "    MAX_CHILDREN_PER_NODE = 3\n",
    "    MAX_NODE_RADIUS = 5.0 # Max radius of influence for nodes\n",
    "    OVERLAP_FACTOR = 0.5 # Increased to allow more overlap for a denser tree\n",
    "\n",
    "    print(f\"Generating a random diffusion tree with max_depth={MAX_DEPTH}, max_children={MAX_CHILDREN_PER_NODE}, max_node_radius={MAX_NODE_RADIUS}, overlap_factor={OVERLAP_FACTOR}\")\n",
    "    root_diffusion_tree = generate_random_diffusion_tree(\n",
    "        max_depth=MAX_DEPTH,\n",
    "        max_children=MAX_CHILDREN_PER_NODE,\n",
    "        max_node_radius=MAX_NODE_RADIUS,\n",
    "        overlap_factor=OVERLAP_FACTOR\n",
    "        # occupied_squares_set and diffusion_nodes_info are initialized within the function if None\n",
    "    )\n",
    "\n",
    "    if root_diffusion_tree:\n",
    "        print(\"\\nGenerated Diffusion Tree Structure:\")\n",
    "        print_diffusion_tree(root_diffusion_tree)\n",
    "\n",
    "        # Access the diffusion_nodes_info from the root node to get all (x,y,radius) for plotting limits\n",
    "        all_node_coords_radii = root_diffusion_tree.diffusion_nodes_info\n",
    "        all_x = [info[0] for info in all_node_coords_radii]\n",
    "        all_y = [info[1] for info in all_node_coords_radii]\n",
    "        all_radii_values = [info[2] for info in all_node_coords_radii]\n",
    "\n",
    "        # Plotting the tree with diffusion circles\n",
    "        fig, ax = plt.subplots(figsize=(10, 10))\n",
    "        ax.set_aspect('equal', adjustable='box')\n",
    "\n",
    "        plot_diffusion_tree_nodes(root_diffusion_tree, ax)\n",
    "\n",
    "        # Set plot limits based on occupied cells and radii\n",
    "        if all_x and all_y:\n",
    "            min_x_val = min(all_x) - 1\n",
    "            max_x_val = max(all_x) + 2\n",
    "            min_y_val = min(all_y) - 1\n",
    "            max_y_val = max(all_y) + 2\n",
    "\n",
    "            # Adjust limits to include max radius if it extends beyond cell coords\n",
    "            if all_radii_values:\n",
    "                # Consider the maximum extent of any circle: center + radius\n",
    "                max_extent_x = max([x + 0.5 + r for x, y, r in all_node_coords_radii])\n",
    "                min_extent_x = min([x + 0.5 - r for x, y, r in all_node_coords_radii])\n",
    "                max_extent_y = max([y + 0.5 + r for x, y, r in all_node_coords_radii])\n",
    "                min_extent_y = min([y + 0.5 - r for x, y, r in all_node_coords_radii])\n",
    "\n",
    "                min_x_val = min(min_x_val, min_extent_x - 0.5) # Add some padding\n",
    "                max_x_val = max(max_x_val, max_extent_x + 0.5)\n",
    "                min_y_val = min(min_y_val, min_extent_y - 0.5)\n",
    "                max_y_val = max(max_y_val, max_extent_y + 0.5)\n",
    "\n",
    "            ax.set_xlim(min_x_val, max_x_val)\n",
    "            ax.set_ylim(min_y_val, max_y_val)\n",
    "\n",
    "            # Set sensible ticks\n",
    "            ax.set_xticks(range(int(min_x_val) - 1, int(max_x_val) + 1))\n",
    "            ax.set_yticks(range(int(min_y_val) - 1, int(max_y_val) + 1))\n",
    "\n",
    "        ax.grid(True)\n",
    "        ax.set_title(\"Random Spatial Tree with Diffusion Circles (Overlap Restricted)\")\n",
    "        plt.xlabel(\"X Coordinate\")\n",
    "        plt.ylabel(\"Y Coordinate\")\n",
    "        plt.show()\n",
    "    else:\n",
    "        print(\"Could not generate a diffusion tree.\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "6wxYykt3O7XE"
   },
   "source": [
    "*Observaciones.*\n",
    "\n",
    "1. El programa tiene varios parámetros, línea 162 y siguientes, que se pueden cambiar para ver el efecto. El más importante es la semilla del generador aleatorio que produce patrones diferentes si se cambia en la línea 163. Si un gráfico te gusta, puedes reproducirlo con la semilla correspondiente.\n",
    "2. Si los mensajeros transmiten una licencia para la reproducción, el área leída está destinada a ser el morfo final. Cuando tenemos una matriz celular, el área leída representa la estructura diferenciada.\n",
    "3. El modelo parece ser lo suficientemente amplio como para ser aceptable que sea un candidato  como generador de forma. Por eso presentamos la siguiente\n",
    "\n",
    "**Definición.** Un árbol morfológico es un árbol que implementa una red de iluminación o morfológica, en la que cada nodo puede producir moléculas que pueden ordenar a otras células seguir un comportamiento predefinido si la concentración del mensajero es superior a un umbral dado.\n",
    "\n",
    "Exploremos ahora las posibilidades que tiene la Evolución para explicar nuestra morfología.\n",
    "\n",
    "## Evolución de los árboles morfológicos\n",
    "\n",
    "Según la Teoría Evolutiva y en sentido estricto, la única función de los seres vivos es la de reproducirse. Las pruebas bioquímicas y los modelos matemáticos representan un esfuerzo para asignar funciones a las subestructuras, por ejemplo, para demostrar que la mitocondria respira y produce ATP.  ¿Cuál es la función de un hueso dado? Su función es coformar un conjunto que permite el movimiento. La biomecánica sugiere subfunciones para, digamos, la columna vertebral: sirve como eje para que todo el cuerpo se mueva como una unidad.\n",
    "\n",
    "Al mirar a un gatito juguetón, uno inmediatamente ve lo maravilloso que es. De esto, inferimos que el estado actual del arte de la morfología en los seres vivos está más allá de la excelencia. Esta es otra forma de decir que no tenemos idea de cómo diseñar un esqueleto y lo único que podemos hacer es tomar cada hueso como la opción óptima. Esto parece ser una buena elección porque muchos robots se parecen a nosotros.\n",
    "\n",
    "**Ejercicio.** Expresa tu opinión sobre la pregunta: ¿Puede la Evolución explicar nuestra morfología?\n",
    ">\n",
    "> *Respuesta.* Sí. La Evolución puede explicar nuestra morfología en un universo de recursos ilimitados y tiempo infinito.\n",
    "\n",
    "**Ejercicio.** Convierte la idea de que la Evolución es el creador de nuestra morfología en una investigación científica. Esto implica la reproducibilidad bajo las limitaciones habituales de los recursos en nuestro planeta Tierra, incluido el tiempo.\n",
    ">\n",
    "> *Respuesta.* Damos a la Evolución la tarea de diseñar una red de iluminación en forma de árbol para iluminar un área determinada con una forma específica que está predefinida por otro árbol que llamamos el árbol objetivo.\n",
    ">\n",
    "> Nuestro procedimiento concreto es el siguiente:\n",
    "> 1. Se genera un árbol morfológico aleatorio. Su región iluminada se registra como $A$. Este es el área objetivo.\n",
    "> 2. Le damos a Evolución la tarea de iluminar $A$, exactamente $A$. Para lograr esto, la Evolución genera muchos árboles y los evoluciona durante muchas generaciones. Por lo tanto, si un árbol de prueba ilumina la región $B$, la región de error en la tarea de iluminación es $A \\Delta B$, donde el operador $ \\Delta$ produce el conjunto que contiene todos los elementos que están solo en $A$ junto con aquellos que están solo en $B$. Es la medida natural de la diferencia entre dos conjuntos. Se llama la *diferencia simétrica*. La región $A \\Delta B$ tiene un área. Es el error causado por el árbol de prueba. A partir de este error, se puede definir la aptitud.\n",
    "\n",
    "Para implementar nuestro proyecto, pedimos ayuda a Colab:\n",
    ">\n",
    "> Desarrollar un programa que genere un árbol morfológico junto con su región de iluminación. Este es el área objetivo a iluminar. Optimizar por Evolución la iluminación de la región objetivo mediante árboles evolucionados. El error de un árbol de prueba es el área de la diferencia simétrica entre la región objetivo y la región iluminada de prueba que produce el árbol de prueba. Calcular la aptitud de un árbol a partir de ese error.\n",
    ">\n",
    "> Gemini publicó su respuesta como una subsección separada:"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "00ba07aa"
   },
   "source": [
    "### Algoritmo evolutivo para la tarea de iluminación\n",
    "\n",
    "Para abordar el desafío de la Evolución de los árboles morfológicos para iluminar un área objetivo específica, diseñaremos un algoritmo evolutivo con los siguientes componentes:\n",
    "\n",
    "1. **Generación objetivo**: En primer lugar, se generará aleatoriamente un árbol morfológico de 'verdad fundamental' y se determinará su región iluminada. Esta región servirá como nuestro objetivo para el proceso evolutivo.\n",
    "\n",
    "2. **Representación individual**: Cada individuo en nuestra población será una `SpatialTreeNode_Diffusion` (o una clase similar), representando un árbol morfológico. Su genotipo incluirá implícitamente su estructura (nodos, hijos, posiciones) y los radios de sus nodos.\n",
    "\n",
    "3. **Función de Fitness**: La fitness de un árbol candidato será inversamente proporcional al área de la diferencia simétrica entre su región iluminada y la región iluminada objetivo. Una diferencia simétrica más pequeña significa un mejor ajuste y, por lo tanto, una mayor aptitud evolutiva.\n",
    "\n",
    "    *   **Diferencia simétrica**: Este es el área de píxeles que se iluminan por *ya sea* el objetivo *o* el árbol candidato, pero no ambos. Mide eficazmente el 'error' en la iluminación.\n",
    "\n",
    "4. **Inicialización de la población**: Crearemos una población inicial de `N` árboles `SpatialTreeNode_Diffusion`. Estos árboles se generarán con estructuras aleatorias (profundidad, número de hijos) y radios de nodos aleatorios, similares a los ejercicios anteriores.\n",
    "\n",
    "\n",
    "5. **Selección**: Los padres de la próxima generación serán seleccionados en base a su idoneidad. Los individuos con mejor fitness tendrán una mayor posibilidad de ser seleccionados (por ejemplo, mediante la selección de torneos).\n",
    "\n",
    "6. **Crossover (Recombinación)**: Se crearán nuevos individuos (descendientes) combinando material genético de dos árboles progenitores. Un enfoque común para las estructuras de árboles es intercambiar subárboles entre los padres. Esto podría implicar copiar profundamente los subárboles y volver a unirlos.\n",
    "\n",
    "7. **Mutación**: Para introducir la diversidad y explorar nuevas partes del espacio de búsqueda, los individuos sufrirán mutaciones. Esto puede incluir:\n",
    "    *   Agregar un nuevo nodo hijo a un nodo existente.\n",
    "    *   Eliminar un nodo hijo existente.\n",
    "    *   Cambiar el radio de un nodo existente.\n",
    "    *   Alterar ligeramente las coordenadas (x, y) de un nodo (dentro de los límites).\n",
    "\n",
    "8. **Ciclo de simulación**: El algoritmo se ejecutará durante un número fijo de generaciones o hasta que se alcance un nivel de aptitud satisfactorio.\n",
    "\n",
    "    *   En cada generación:\n",
    "        *   Calcular la aptitud de todas los individuos.\n",
    "        *   Seleccionar padres.\n",
    "        *   Realizar un cruce para crear descendencia.\n",
    "        *   Realizar mutación en la descendencia.\n",
    "        *   Formar la nueva población a partir de padres y/o descendientes seleccionados.\n",
    "\n",
    "**Trabajo de corrección.** Gemini desarrolló el programa correspondiente. Se encontró una inconsistencia. Se informó a Gemini con el siguiente mensaje:\n",
    ">\n",
    "> Por favor, ayúdame con la siguiente inconsistencia: el círculo de iluminación y la región de las células iluminadas no corresponden entre sí en el gráfico del Mejor Árbol Evolucionado (Fitness: 0,7321) del último programa. Por ejemplo, el cuadrado (2,0) está iluminado pero no se marca.\n",
    ">\n",
    "> Gemini respondió:\n",
    ">>\n",
    ">> Entiendo la inconsistencia que estás viendo. Para resolver esto, aumentaré la resolución de iluminación en GA_PARAMS. Este parámetro controla cuántos puntos se muestrean dentro de cada cuadrado unitario para determinar si está iluminado. Una resolución más alta debería llevar a un cálculo más preciso del `evolved_best_area`, asegurando que los cuadrados que están visualmente iluminados por un círculo de difusión también se reportan como tales. Fijaré la resolución en 200.\n",
    ">\n",
    "> El plan fue aprobado, implementado y ejecutado. Se probó diez veces usando 2 generaciones, tamaño de población 10 y diferentes semillas para el generador aleatorio. No se encontró ningún error.\n",
    ">\n",
    "> Mucho más tarde, el problema se encontró de nuevo en otro ejemplo. Mi informe fue:\n",
    ">\n",
    "> Por favor, ayúdame de nuevo con este problema: en el gráfico del mejor Árbol Evolucionado (Fitness: 1.0000) que fue producido por el programa anterior hay varias células que están iluminadas pero no recoloreadas con un color intenso.\n",
    ">\n",
    "> Gemini respondió:\n",
    ">>>\n",
    ">> Tienes razón, las celdas iluminadas no se destacaban tanto como deberían. He ajustado la función de trazado para que las áreas iluminadas aparezcan con un color más intenso. Esto debería hacer que la visualización sea más clara.\n",
    "\n",
    "El plan fue aprobado, implementado, dos errores sintácticos fueron corregidos, y luego se ejecutó con los mismos parámetros que antes. Nuestro diagnóstico es que la función de fitness tiene un pequeño error. Si se corrige, el programa debe producir una entrada bastante diferente.\n",
    "\n",
    "Resultado: el programa repitió los mismos pasos que antes hasta la generación 3 y luego se tomó otro camino.\n",
    "\n",
    "Evaluación: Dado que el programa siguió un camino diferente al anterior, consideramos que se hizo una corrección. Pero, tuvimos problemas con los colores oscuros de los rectángulos que no dejaban percibir los colores de los círculos. Después de una larga negociación, incluyendo colores e incongruencias, terminamos con el siguiente programa:\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 1000
    },
    "executionInfo": {
     "elapsed": 25826966,
     "status": "ok",
     "timestamp": 1785782106347,
     "user": {
      "displayName": "jose rodriguez",
      "userId": "08454562216435392883"
     },
     "user_tz": 300
    },
    "id": "fbe90c4d",
    "outputId": "d1551bc8-6f10-46cc-dfc0-a7c0f96e8ee6"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "--- Generating Target Tree ---\n",
      "Target Tree Generated with 2 nodes. Illuminated area size: 54\n",
      "\n",
      "--- Initializing Population of 100 Trees ---\n",
      "Population initialized with 100 individuals.\n",
      "\n",
      "--- Starting Evolutionary Loop for 100 Generations ---\n",
      "Generation 1/100: Best Fitness = 0.9074 (Overall Best: 0.9074)\n",
      "Generation 2/100: Best Fitness = 0.9074 (Overall Best: 0.9074)\n",
      "Generation 3/100: Best Fitness = 0.9074 (Overall Best: 0.9074)\n",
      "Generation 4/100: Best Fitness = 0.9074 (Overall Best: 0.9074)\n",
      "Generation 5/100: Best Fitness = 0.9074 (Overall Best: 0.9074)\n",
      "Generation 6/100: Best Fitness = 0.9074 (Overall Best: 0.9074)\n",
      "Generation 7/100: Best Fitness = 0.9074 (Overall Best: 0.9074)\n",
      "Generation 8/100: Best Fitness = 0.9074 (Overall Best: 0.9074)\n",
      "Generation 9/100: Best Fitness = 0.9074 (Overall Best: 0.9074)\n",
      "Generation 10/100: Best Fitness = 0.9074 (Overall Best: 0.9074)\n",
      "Generation 11/100: Best Fitness = 0.9074 (Overall Best: 0.9074)\n",
      "Generation 12/100: Best Fitness = 0.9074 (Overall Best: 0.9074)\n",
      "Generation 13/100: Best Fitness = 0.9074 (Overall Best: 0.9074)\n",
      "Generation 14/100: Best Fitness = 0.9074 (Overall Best: 0.9074)\n",
      "Generation 15/100: Best Fitness = 0.9074 (Overall Best: 0.9074)\n",
      "Generation 16/100: Best Fitness = 0.9074 (Overall Best: 0.9074)\n",
      "Generation 17/100: Best Fitness = 0.9074 (Overall Best: 0.9074)\n",
      "Generation 18/100: Best Fitness = 0.9074 (Overall Best: 0.9074)\n",
      "Generation 19/100: Best Fitness = 0.9074 (Overall Best: 0.9074)\n",
      "Generation 20/100: Best Fitness = 0.9074 (Overall Best: 0.9074)\n",
      "Generation 21/100: Best Fitness = 0.9074 (Overall Best: 0.9074)\n",
      "Generation 22/100: Best Fitness = 0.9074 (Overall Best: 0.9074)\n",
      "Generation 23/100: Best Fitness = 0.9074 (Overall Best: 0.9074)\n",
      "Generation 24/100: Best Fitness = 0.9074 (Overall Best: 0.9074)\n",
      "Generation 25/100: Best Fitness = 0.9074 (Overall Best: 0.9074)\n",
      "Generation 26/100: Best Fitness = 0.9074 (Overall Best: 0.9074)\n",
      "Generation 27/100: Best Fitness = 0.9074 (Overall Best: 0.9074)\n",
      "Generation 28/100: Best Fitness = 0.9074 (Overall Best: 0.9074)\n",
      "Generation 29/100: Best Fitness = 0.9074 (Overall Best: 0.9074)\n",
      "Generation 30/100: Best Fitness = 0.9074 (Overall Best: 0.9074)\n",
      "Generation 31/100: Best Fitness = 0.9074 (Overall Best: 0.9074)\n",
      "Generation 32/100: Best Fitness = 0.9074 (Overall Best: 0.9074)\n",
      "Generation 33/100: Best Fitness = 0.9074 (Overall Best: 0.9074)\n",
      "Generation 34/100: Best Fitness = 0.9074 (Overall Best: 0.9074)\n",
      "Generation 35/100: Best Fitness = 0.9074 (Overall Best: 0.9074)\n",
      "Generation 36/100: Best Fitness = 0.9074 (Overall Best: 0.9074)\n",
      "Generation 37/100: Best Fitness = 0.9074 (Overall Best: 0.9074)\n",
      "Generation 38/100: Best Fitness = 0.9074 (Overall Best: 0.9074)\n",
      "Generation 39/100: Best Fitness = 0.9074 (Overall Best: 0.9074)\n",
      "Generation 40/100: Best Fitness = 0.9074 (Overall Best: 0.9074)\n",
      "Generation 41/100: Best Fitness = 0.9074 (Overall Best: 0.9074)\n",
      "Generation 42/100: Best Fitness = 0.9074 (Overall Best: 0.9074)\n",
      "Generation 43/100: Best Fitness = 0.9074 (Overall Best: 0.9074)\n",
      "Generation 44/100: Best Fitness = 0.9074 (Overall Best: 0.9074)\n",
      "Generation 45/100: Best Fitness = 0.9074 (Overall Best: 0.9074)\n",
      "Generation 46/100: Best Fitness = 0.9074 (Overall Best: 0.9074)\n",
      "Generation 47/100: Best Fitness = 0.9074 (Overall Best: 0.9074)\n",
      "Generation 48/100: Best Fitness = 0.9074 (Overall Best: 0.9074)\n",
      "Generation 49/100: Best Fitness = 0.9074 (Overall Best: 0.9074)\n",
      "Generation 50/100: Best Fitness = 0.9074 (Overall Best: 0.9074)\n",
      "Generation 51/100: Best Fitness = 0.9074 (Overall Best: 0.9074)\n",
      "Generation 52/100: Best Fitness = 0.9074 (Overall Best: 0.9074)\n",
      "Generation 53/100: Best Fitness = 0.9074 (Overall Best: 0.9074)\n",
      "Generation 54/100: Best Fitness = 0.9074 (Overall Best: 0.9074)\n",
      "Generation 55/100: Best Fitness = 0.9074 (Overall Best: 0.9074)\n",
      "Generation 56/100: Best Fitness = 0.9074 (Overall Best: 0.9074)\n",
      "Generation 57/100: Best Fitness = 0.9074 (Overall Best: 0.9074)\n",
      "Generation 58/100: Best Fitness = 0.9074 (Overall Best: 0.9074)\n",
      "Generation 59/100: Best Fitness = 0.9074 (Overall Best: 0.9074)\n",
      "Generation 60/100: Best Fitness = 0.9074 (Overall Best: 0.9074)\n",
      "Generation 61/100: Best Fitness = 0.9074 (Overall Best: 0.9074)\n",
      "Generation 62/100: Best Fitness = 0.9074 (Overall Best: 0.9074)\n",
      "Generation 63/100: Best Fitness = 0.9074 (Overall Best: 0.9074)\n",
      "Generation 64/100: Best Fitness = 0.9074 (Overall Best: 0.9074)\n",
      "Generation 65/100: Best Fitness = 0.9074 (Overall Best: 0.9074)\n",
      "Generation 66/100: Best Fitness = 0.9074 (Overall Best: 0.9074)\n",
      "Generation 67/100: Best Fitness = 0.9074 (Overall Best: 0.9074)\n",
      "Generation 68/100: Best Fitness = 0.9074 (Overall Best: 0.9074)\n",
      "Generation 69/100: Best Fitness = 0.9074 (Overall Best: 0.9074)\n",
      "Generation 70/100: Best Fitness = 0.9074 (Overall Best: 0.9074)\n",
      "Generation 71/100: Best Fitness = 0.9074 (Overall Best: 0.9074)\n",
      "Generation 72/100: Best Fitness = 0.9074 (Overall Best: 0.9074)\n",
      "Generation 73/100: Best Fitness = 0.9310 (Overall Best: 0.9310)\n",
      "Generation 74/100: Best Fitness = 0.9310 (Overall Best: 0.9310)\n",
      "Generation 75/100: Best Fitness = 0.9310 (Overall Best: 0.9310)\n",
      "Generation 76/100: Best Fitness = 0.9310 (Overall Best: 0.9310)\n",
      "Generation 77/100: Best Fitness = 0.9310 (Overall Best: 0.9310)\n",
      "Generation 78/100: Best Fitness = 0.9310 (Overall Best: 0.9310)\n",
      "Generation 79/100: Best Fitness = 0.9310 (Overall Best: 0.9310)\n",
      "Generation 80/100: Best Fitness = 0.9310 (Overall Best: 0.9310)\n",
      "Generation 81/100: Best Fitness = 0.9310 (Overall Best: 0.9310)\n",
      "Generation 82/100: Best Fitness = 0.9310 (Overall Best: 0.9310)\n",
      "Generation 83/100: Best Fitness = 0.9310 (Overall Best: 0.9310)\n",
      "Generation 84/100: Best Fitness = 0.9310 (Overall Best: 0.9310)\n",
      "Generation 85/100: Best Fitness = 0.9310 (Overall Best: 0.9310)\n",
      "Generation 86/100: Best Fitness = 0.9310 (Overall Best: 0.9310)\n",
      "Generation 87/100: Best Fitness = 0.9310 (Overall Best: 0.9310)\n",
      "Generation 88/100: Best Fitness = 0.9310 (Overall Best: 0.9310)\n",
      "Generation 89/100: Best Fitness = 0.9310 (Overall Best: 0.9310)\n",
      "Generation 90/100: Best Fitness = 0.9310 (Overall Best: 0.9310)\n",
      "Generation 91/100: Best Fitness = 0.9310 (Overall Best: 0.9310)\n",
      "Generation 92/100: Best Fitness = 0.9310 (Overall Best: 0.9310)\n",
      "Generation 93/100: Best Fitness = 0.9310 (Overall Best: 0.9310)\n",
      "Generation 94/100: Best Fitness = 0.9310 (Overall Best: 0.9310)\n",
      "Generation 95/100: Best Fitness = 0.9310 (Overall Best: 0.9310)\n",
      "Generation 96/100: Best Fitness = 0.9310 (Overall Best: 0.9310)\n",
      "Generation 97/100: Best Fitness = 0.9310 (Overall Best: 0.9310)\n",
      "Generation 98/100: Best Fitness = 0.9310 (Overall Best: 0.9310)\n",
      "Generation 99/100: Best Fitness = 0.9310 (Overall Best: 0.9310)\n",
      "Generation 100/100: Best Fitness = 0.9310 (Overall Best: 0.9310)\n",
      "\n",
      "--- Evolution Finished ---\n",
      "Final Best Fitness: 0.9310\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAACVYAAAMvCAYAAAAz3hnmAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQABAABJREFUeJzs3XeYXGX9///XmV63b9qmEkog9GKQFgIC0hFDIEhHQEFBFAVEgYiAIIL8QEHxKygE6Qj6kRI0KEgRlB5KKunZbJ3dnT7n/v1xspPMlmQ3ye7sbp6P65prds6cOec995yZPfc57/O+LWOMEQAAAAAAAAAAAAAAAAAgz1XsAAAAAAAAAAAAAAAAAABgoCGxCgAAAAAAAAAAAAAAAAA6ILEKAAAAAAAAAAAAAAAAADogsQoAAAAAAAAAAAAAAAAAOiCxCgAAAAAAAAAAAAAAAAA6ILEKAAAAAAAAAAAAAAAAADogsQoAAAAAAAAAAAAAAAAAOiCxCgAAAAAAAAAAAAAAAAA6ILEKAAAAAAAAAAAAAAAAADogsQoAsFUsWbJElmXpgQce6PVrH3jgAVmWpSVLluSnHXrooTr00EO3WnxbGs9gcv3118uyrGKHAQAAgD4wfvx4nXPOOf2+3pdfflmWZenll1/u93X3hVtvvVWTJk2Sbds9fk0x+yjoO/fee6/Gjh2rVCpV7FAAAAD6XbH6F+0sy9L1119fMO2tt97SAQccoHA4LMuy9O6770qSnn/+ee25554KBAKyLEtNTU39Hu9Ac/HFF+uII44odhjopdNOO00zZswodhgAeoHEKgB9xrKsHt0G2oH51157Tddff/0md8rbTyz05Ib12tvtiSeeKHYoRbVy5Updf/31+U5hsc2YMUOWZenKK68sdigAAGAb1p7gvuFt2LBhmjZtmp577rk+W288Htf111/f477JpvoCjzzySJ/FOpANlj5gLBbTLbfcoiuvvFIu1/pDY93FO2LEiC6XM9D26ftCKpXSlVdeqVGjRikYDGrKlCmaM2dOj1//yCOPaO+991YgEFB1dbXOP/981dXVFcyTSCR0/vnna9ddd1VpaakikYj22GMP3XnnncpkMgXzrlq1SldddZWmTZumaDS6ye3ptdde00EHHaRQKKQRI0bo0ksvVWtra8E855xzjtLptH7zm9/0+H0BAICB64MPPtD06dM1btw4BQIB1dTU6IgjjtBdd91V7ND61Lx583T99dcX9WLh8ePH5/ehXS6XysrKtNtuu+nCCy/Um2++2aNlZDIZnXLKKWpoaNAdd9yhBx98UOPGjVN9fb1mzJihYDCoX/3qV3rwwQcVDof7+B0NbIsXL9bvfvc7/fCHP8xPa78Avrvbz372syJG3DO//vWvZVmWpkyZUuxQtsirr76ab/eOfaArr7xSTz75pN57770iRQegtzzFDgDA0PXggw8WPP7jH/+oOXPmdJq+884792dYm/Taa69p1qxZOuecc1RWVtbtfDvvvHOn93L11VcrEonommuu6eMo0ZfOPPNMnXbaafL7/X22jpUrV2rWrFkaP3689txzzz5bT0/EYjH95S9/0fjx4/WnP/1JP/vZz0gIBAAARfWTn/xEEyZMkDFGa9as0QMPPKBjjjlGf/nLX3Tcccdt9fXF43HNmjVLknpVkejSSy/Vfvvt12n6F7/4xa0V2qAyWPqAv//975XNZjVz5sxOzx1xxBE666yzCqYFg0FJ0osvvlgwfSDt0/eVc845R0888YS+853vaIcddsh/F+fOnauDDjpoo6+95557dPHFF+vwww/X7bffruXLl+vOO+/U22+/rTfffFOBQECSk1j10Ucf6ZhjjtH48ePlcrn02muv6fLLL9ebb76phx9+OL/MTz/9VLfccot22GEH7bbbbnr99de7Xf+7776rww8/XDvvvHN+/bfddpvmz59fkKgZCAR09tln6/bbb9e3v/1t+kIAAAxir732mqZNm6axY8fqggsu0IgRI7Rs2TK98cYbuvPOO/Xtb3+72CH2mXnz5mnWrFk69NBDNX78+B6/7tNPPy242GBL7bnnnvre974nSWppadHHH3+sxx9/XPfdd58uv/xy3X777QXzJxIJeTzrT1cvXLhQn3/+ue677z59/etfz09//vnn1dLSohtuuEFf+tKXtlq8g9mdd96pCRMmaNq0aZ2emzlzpo455phO0/faa6/+CG2LzJ49W+PHj9d//vMfLViwQNtvv32xQ+o127b17W9/W+FwWG1tbZ2e32uvvbTvvvvqF7/4hf74xz8WIUIAvUViFYA+c8YZZxQ8fuONNzRnzpxO0zeHMUbJZDJ/gLsYhg8f3um9/OxnP1NVVdVG36Nt20qn0/mDyBh43G633G53scPoN08++aRyuZx+//vf67DDDtO//vUvTZ06dZOva2tr2+avCgIAAH3j6KOP1r777pt/fP7552v48OH605/+1CeJVZvr4IMP1vTp04sdxoCxuX3AeDyuUCjUl6EVuP/++3XCCSd02Sfbcccdu43X5/P1dWgDyn/+8x898sgj+vnPf64rrrhCknTWWWdp11131Q9+8AO99tpr3b42nU7rhz/8oQ455BDNmTMnn6x0wAEH6Pjjj9d9992XP7FZUVGhN954o+D13/jGN1RaWqq7775bt99+e75q2D777KP6+npVVFToiSee0CmnnNJtDD/84Q9VXl6ul19+WSUlJZKcKgoXXHCBXnzxRR155JH5eWfMmKFbb71Vc+fO1WGHHbYZrQUAAAaCG2+8UaWlpXrrrbc6XTRdW1tbnKAGoA3Pr2zti4tramo67U/fcsstOv3003XHHXdohx120De/+c38cx33yds/p+4+v41dDN9bg/n4diaT0ezZs/WNb3yjy+f33nvvXp+L29h5t2QyKZ/Pt0VJeD1p78WLF+u1117TU089pYsuukizZ8/Wddddt8llZ7NZ2bY9YPpsv/3tb7Vs2TJ9/etf15133tnlPDNmzNB1112nX//614pEIv0cIYDeYihAAEV1//3367DDDtOwYcPk9/u1yy676J577uk03/jx43XcccfphRde0L777qtgMJgv0//555/rhBNOUDgc1rBhw3T55ZfrhRde6HJIgDfffFNf/vKXVVpaqlAopKlTp+rf//53/vnrr79e3//+9yVJEyZMyJfp3JLyuZZl6Vvf+pZmz56tyZMny+/36/nnn5ckrVixQuedd56GDx8uv9+vyZMn6/e//32nZaRSKV133XXafvvt5ff7NWbMGP3gBz9QKpXa5PpfeeUVnXLKKRo7dmz+tZdffrkSiUTBfOecc44ikYhWrFihk046SZFIRNXV1briiiuUy+UK5m1qatI555yj0tJSlZWV6eyzz+7z8czbh4Xp+Fm0D8Oy4Wd96KGHatddd9X777+vqVOnKhQKafvtt88PP/jPf/5TU6ZMUTAY1E477aSXXnppk+tq3wZfffVVfeELX1AgENB2223X6WqChoYGXXHFFdptt90UiURUUlKio48+uqCk68svv5yvbHDuuefmt7MHHnggP8+mttV2r776qvbbbz8FAgFNnDhxs4avmD17to444ghNmzZNO++8s2bPnt1pnvY2+ec//6mLL75Yw4YN0+jRo/PPP/fcczr44IMVDocVjUZ17LHH6qOPPipYxvvvv69zzjlH2223nQKBgEaMGKHzzjtP9fX1vY4ZAABsW8rKyhQMBguuZJacixZ++ctfavLkyQoEAho+fLguuugiNTY2Fsz39ttv66ijjlJVVZWCwaAmTJig8847T5IzVEJ1dbUkadasWfl9s+uvv36L49511127vHrYtm3V1NQUJGW1tbXpe9/7nsaMGSO/36+ddtpJt912m4wx3S7/7bfflmVZ+sMf/tDpufY+0V//+tf8tJ72P5YvX66TTjqpoI/Vk75HT7Tvq//3v//VIYccolAolB+6ojf9noceekj77LOPgsGgKioqdNppp2nZsmWbXP/ixYv1/vvvb9ZV7oceemi+otmm9unb3+e8efM0bdo0hUIh1dTU6NZbb+203J6+7zlz5uiggw5SWVmZIpGIdtppp4JhPyTprrvu0uTJkxUKhVReXq599923oOKTJH3yySdaunTpJt/vE088IbfbrQsvvDA/LRAI6Pzzz9frr7++0fb+8MMP1dTUpFNPPbWgAtRxxx2nSCTSo+Ey2ystbNjXjEajqqio2ORrY7FYPqmvPalKchLDIpGIHnvssYL599lnH1VUVOiZZ57Z5LIBAMDAtXDhQk2ePLnL5Jthw4bl/546dar22GOPLpex00476aijjpK0fli12267Tb/61a+03XbbKRQK6cgjj9SyZctkjNENN9yg0aNHKxgM6sQTT1RDQ0PB8tqPK7/88sv5cxu77bZb/nj2U089pd12202BQED77LOP3nnnnU4xffLJJ5o+fboqKioUCAS077776tlnn80//8ADD+QTzqdNm9ZpCO6NnV8ZP368zjnnnIL1NTU16fLLL9f48ePl9/s1evRonXXWWZ2GM+upYDCoBx98UBUVFbrxxhsL+jgb9r3OOeec/AW/p5xyiizLyu+Dn3322ZKk/fbbT5ZlFcTck2Pp119/vSzL0rx583T66aervLy8oAJrT/oXvdnHTyaTuv7667XjjjsqEAho5MiROvnkk7Vw4cL8PD3tz3bl1VdfVV1d3RZV7+puu2g/5/LII4/oRz/6kWpqahQKhRSLxSRJjz/+eL6t2gsNrFixomDZ7eebFi5cqGOOOUbRaFRf+9rXNhnT7NmzVV5ermOPPVbTp0/v8lzFht/LX/7yl5o4caL8fr/mzZsnadPfF6ln53HaLV26VJ988kmP27WhoUE/+tGP9JOf/GSjiYBHHHGE2traejXUOoDioWIVgKK65557NHnyZJ1wwgnyeDz6y1/+oosvvli2beuSSy4pmPfTTz/VzJkzddFFF+mCCy7QTjvtpLa2Nh122GFatWqVLrvsMo0YMUIPP/yw5s6d22ld//jHP3T00Udrn3320XXXXSeXy5VP7HrllVf0hS98QSeffLI+++wz/elPf9Idd9yhqqoqScqfaNlc//jHP/TYY4/pW9/6lqqqqjR+/HitWbNG+++/fz7xqrq6Ws8995zOP/98xWIxfec735Hk7FyfcMIJevXVV3XhhRdq55131gcffKA77rhDn332mf785z9vdN2PP/644vG4vvnNb6qyslL/+c9/dNddd2n58uV6/PHHC+bN5XI66qijNGXKFN1222166aWX9Itf/EITJ07MX0VijNGJJ56oV199Vd/4xje088476+mnn853bAaKxsZGHXfccTrttNN0yimn6J577tFpp52m2bNn6zvf+Y6+8Y1v6PTTT9fPf/5zTZ8+XcuWLVM0Gt3oMhcsWKDp06fr/PPP19lnn63f//73Ouecc7TPPvto8uTJkqRFixbpz3/+s0455RRNmDBBa9as0W9+8xtNnTpV8+bN06hRo7TzzjvrJz/5ia699lpdeOGFOvjggyU5V29LPdtWJemDDz7QkUceqerqal1//fXKZrO67rrrNHz48B6308qVKzV37tz8ybiZM2fqjjvu0N13393l1R0XX3yxqqurde211+ZL2D744IM6++yzddRRR+mWW25RPB7XPffco4MOOkjvvPNO/oTInDlztGjRIp177rkaMWKEPvroI/32t7/VRx99pDfeeIMhNwAAQF5zc7Pq6upkjFFtba3uuusutba2drri9qKLLtIDDzygc889V5deeqkWL16su+++W++8847+/e9/y+v1qra2Nr/PdNVVV6msrExLlizRU089JcnZ17/nnnv0zW9+U1/5yld08sknS5J23333TcbZ0tLS5cmFyspKWZalU089Vddff71Wr16dr7gjOQfBV65cqdNOO02Ss499wgknaO7cuTr//PO155576oUXXtD3v/99rVixQnfccUeX69933321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M2fOND6fzySTyfy09uPKr732Wn5a+zHpYDBYcGz3N7/5Taf9m8MPP9zstttuBcu0bdsccMABZocddshP29i+UXfnV9qf27B/ce211xpJ5qmnnuo074bHq7sybtw4c+yxx3b7fPs+7TPPPJOf1rEf1tX5A2PW9xU37Nf15lj6ddddZySZmTNnFiy3N/2Lnu7j//73vzeSzO23396pDdrj7Gl/tjtnnHGGqays7DS9fZvt7vb666/n5+1uu2j/DLbbbruCY/rpdNoMGzbM7LrrriaRSOSn//WvfzWSzLXXXpuf1n6+6aqrrtro+9jQ22+/bSSZOXPmGGOctho9erS57LLLunyPJSUlpra2tuC5nn5fenoex5j1n3tPvPfee8btdpsXXnjBGLN+u+uuH7fjjjuao48+ukfLBlBcDAUIoKg2vHq1/ar0qVOnatGiRWpubi6Yd8KECfmrrds9//zzqqmp0QknnJCfFggEdMEFFxTM9+6772r+/Pk6/fTTVV9fr7q6OtXV1amtrU2HH364/vWvf8m27T54h46pU6dql112yT82xujJJ5/U8ccfL2NMPp66ujodddRRam5u1v/+9z9JTsWpnXfeWZMmTSqY77DDDpOkLqtzbWjDNm5ra1NdXZ0OOOAAGWO6vEq345jcBx98sBYtWpR//Le//U0ej6dgHHS3261vf/vbvWiRvheJRPIVACTnipaysjLtvPPOmjJlSn56+98bvsfu7LLLLvkr0SWnusFOO+1U8Fq/35+/miiXy6m+vj4/TEf7Z7oxPd1Wc7mcXnjhBZ100kkaO3Zs/vU777xzp+/JxsyePVvHHntsvlrXDjvsoH322afLEruSdMEFF8jtducfz5kzR01NTZo5c2bB9ul2uzVlypSC7XPDbbG9EsD+++8vST1qGwAAsO341a9+pTlz5mjOnDl66KGHNG3aNH3961/PV5mSnP3k0tJSHXHEEQX7Ifvss48ikUh+P6T9itm//vWvymQyWzXOa6+9Nh/nhrf2ocp23HFH7bnnnnr00Ufzr8nlcnriiSd0/PHH5/eP/va3v8ntduvSSy8tWP73vvc9GWP03HPPdRvDqaeeqkwmU9A2L774Yn4YNql3/Y+//e1vGjlyZMEwhaFQqGA4uC3l9/t17rnnFkzrab/nqaeekm3bmjFjRsF8I0aM0A477LDJ/lF9fb08Ho8ikUiXz5944omdPs/e7F9vKBKJFFRZ8/l8+sIXvlDQf+jp+27fjp955plu+65lZWVavny53nrrrY3GZYzZZLUqyale1rFSl+T0uduf705VVZVmzJihP/zhD/rFL36hRYsW6ZVXXtGpp56av/K+4+unTZumOXPm6PHHH9c3vvENeb3efJXc3mpfdnfxdxV7eXm5EomE4vH4Zq0TAAAU3xFHHKHXX39dJ5xwgt577z3deuutOuqoo1RTU1MwFFhpaalOPPFE/elPf8pXocnlcnr00UfzQ2Jv6JRTTlFpaWn+cfsx5TPOOKOg+s+UKVOUTqc7DYu2yy676Itf/GKn1x922GEFx3Y7HqtuaGjQP/7xD82YMSNfLbeurk719fU66qijNH/+/E7r6k5X51e68uSTT2qPPfbosoLOlo440L4P3tLSskXLabc55306nv/obf+iJ/v4Tz75pKqqqro8Z9Lehj3tz3anvr5e5eXl3T5/4YUXdtlX3fA8lbTx7eLss88uOKb/9ttvq7a2VhdffHG+TyBJxx57rCZNmqT/+7//67SMDc8jbcrs2bM1fPhwTZs2TZLyVaAfeeQR5XK5TvN/9atfLRhtpjffl96cx3n55Zd7XK3q0ksv1dFHH60jjzyyR/OXl5dv9hCbAPoXQwECKKp///vfuu666/T66693OnjZ3Nxc0FmZMGFCp9d//vnnmjhxYqcd+o5DBcyfP1+SNjpcXXNz80Z3RLdEx9jXrl2rpqYm/fa3v9Vvf/vbLl9TW1sryYn9448/7nY4wvb5urN06VJde+21evbZZzuNzd0xeS0QCHRaT3l5ecHrPv/8c40cObLTiYjuSgcXy+jRozttF6WlpZ2GqmjfxnoybvmGndx2HdvHtm3deeed+vWvf63FixcX7PBXVlZuch093VZTqZQSiYR22GGHTs/vtNNO+tvf/rbJdX388cd65513dNZZZ2nBggX56Yceeqh+9atfKRaLdRr2o+O23B5v+4mfjjZ8fUNDg2bNmqVHHnmk03bbcVsEAADbti984QsFQ3jNnDlTe+21l771rW/puOOOk8/n0/z589Xc3Kxhw4Z1uYz2/Y2pU6fqq1/9qmbNmqU77rhDhx56qE466SSdfvrpXSZd9MZuu+2mL33pSxud59RTT9UPf/hDrVixQjU1NXr55ZdVW1ubT3qSnH3sUaNGdRqaun3ojs8//7zb5e+xxx6aNGmSHn30UZ1//vmSnGEAq6qq8vtovel/fP7559p+++077Utvzf39mpqaTsNO97TfM3/+fBljutwPlrTR4TJ6YvTo0Zv8THuzrI7tWF5ervfffz//uKfv+9RTT9Xvfvc7ff3rX9dVV12lww8/XCeffLKmT5+ePyFw5ZVX6qWXXtIXvvAFbb/99jryyCN1+umn68ADD9ys+IPBYH5Ivw0lk8n88xvzm9/8RolEQldccYWuuOIKSc7Jx4kTJ+qpp57q1KccPnx4fqiX6dOn66abbtIRRxyh+fPnFwyl2dPYJXUbf1ext58sYYhyAAAGt/32209PPfWU0um03nvvPT399NO64447NH36dL377rv5xJKzzjpLjz76qF555RUdcsgheumll7RmzRqdeeaZnZbZ8bhw+zHlnh5r3tzXL1iwQMYY/fjHP9aPf/zjLt9vbW2tampqummN9bo6v9KVhQsX6qtf/WqP5u2t1tZWSerU79lcm3Pep6vj273pX/RkH3/hwoXaaaedCpLuuoq9J/3ZjdlYss8OO+zQo37NxraLjs+190u76htOmjRJr776asE0j8ej0aNHbzIGyUlueuSRRzRt2jQtXrw4P33KlCn6xS9+ob///e+dkpU6xteb78uWnsfpyqOPPqrXXntNH374YY9fY4yh/wEMEiRWASiahQsX6vDDD9ekSZN0++23a8yYMfL5fPrb3/6mO+64o9OVBJs6aLsx7cv6+c9/rj333LPLebq7Ynlr6Bh7ezxnnHFGtzv9u+++e37e3XbbTbfffnuX83XsfG0ol8vpiCOOUENDg6688kpNmjRJ4XBYK1as0DnnnNOpjTesRDTQdLdz2dWVClL376W76T254qAnr73pppv04x//WOedd55uuOEGVVRUyOVy6Tvf+U6PqqL1dFvt6gRBbz300EOSpMsvv1yXX355p+effPLJTpUEutuWH3zwwS5PdmzYeZwxY4Zee+01ff/739eee+6pSCQi27b15S9/uU8rxgEAgMHP5XJp2rRpuvPOOzV//nxNnjxZtm1r2LBh3VbabE9UsSxLTzzxhN544w395S9/0QsvvKDzzjtPv/jFL/TGG2/0aT9AchJirr76aj3++OP6zne+o8cee0ylpaX68pe/vFXXceONN6qurk7RaFTPPvusZs6cmd8X603/oz901bfrab/Htm1ZlqXnnnuuy/3zTX2elZWVymazamlp2WondLrTk/5DT993MBjUv/71L82dO1f/93//p+eff16PPvqoDjvsML344otyu93aeeed9emnn+qvf/2rnn/+eT355JP69a9/rWuvvVazZs3qdfwjR47ssgLCqlWrJEmjRo3a6OtLS0v1zDPPaOnSpVqyZInGjRuncePG6YADDlB1dXW+Cld3pk+frmuuuUbPPPOMLrrool7HvmGsHePvKvbGxkaFQqEtOvYAAAAGDp/Pp/3220/77befdtxxR5177rl6/PHHdd1110mSjjrqKA0fPlwPPfSQDjnkED300EMaMWJEl8koW3qseXNf374ff8UVV3RbVajjRebdGQj7OO0JJz2NeVM257xPV8e3e9O/2JLzCx3X25P+bHcqKyt7dLH4pmxsu9jSbWbDqlCb8o9//EOrVq3SI488okceeaTT87Nnz+6UWNXduYqefF+29DxOV77//e/rlFNOkc/n05IlSyRJTU1NkqRly5YpnU536oc0NjZ2m9QHYGAhsQpA0fzlL39RKpXSs88+W3DFxqZKnG5o3LhxmjdvXqes7g2r70jSxIkTJTnVczaVpd8f2eHV1dWKRqPK5XKbjGfixIl67733dPjhh/c6tg8++ECfffaZ/vCHP+iss87KT58zZ85mxS05bf73v/9dra2tBZ2KTz/9dLOX2RPtV5W074i229jV+8XwxBNPaNq0afp//+//FUxvampSVVVV/nF3n2VPt9Xq6moFg8H8VTkb6slnYYzRww8/rGnTpuniiy/u9PwNN9yg2bNnd0qs6i7eYcOGbTTexsZG/f3vf9esWbN07bXX5qd3FT8AAEBXstmspPVXOU+cOFEvvfSSDjzwwB4d8N1///21//7768Ybb9TDDz+sr33ta3rkkUf09a9/vU/7ABMmTNAXvvAFPfroo/rWt76lp556SieddFJBtaxx48bppZde6pTs88knn+Sf35hTTz1Vs2bN0pNPPqnhw4crFosVDIvdm/7HuHHj9OGHH3bqY/X1/n5P+z0TJ06UMUYTJkzQjjvu2Ov1TJo0SZK0ePHiLU4m2xrbTW/6ey6XS4cffrgOP/xw3X777brpppt0zTXXaO7cufnPNRwO69RTT9Wpp56qdDqtk08+WTfeeKOuvvrqguE6emLPPffU3LlzO1WyffPNN/PP98TYsWPzff6mpib997//7VEVhPbh+januu2uu+4qj8ejt99+WzNmzMhPT6fTevfddwumtVu8eHG+ShwAABha2qvhbph07Xa7dfrpp+uBBx7QLbfcoj//+c+64IILBtTFx9ttt50kp2pSf53XmDhxYq8q7vRUa2urnn76aY0ZM2ar7XP15rzPxpaxJf2L7pb55ptvKpPJdFtRt7f92Y4mTZqk2bNndxr5pS+190s//fTTTiNYfPrpp5vst27M7NmzNWzYMP3qV7/q9NxTTz2lp59+Wvfee+9G26o335eensfpjWXLlunhhx/Www8/3Om5vffeW3vssYfefffd/LRsNqtly5bphBNO2Kz1AehfPUsTBYA+0N5B2TCTv7m5Wffff3+Pl3HUUUdpxYoVBeOjJ5NJ3XfffQXz7bPPPpo4caJuu+22/ImYDa1duzb/d/v46R0TeLYmt9utr371q3ryySe77KRsGM+MGTO0YsWKTu9Jcg40t7W1bXQ9UmEbG2N05513bnbsxxxzjLLZrO655578tFwup7vuumuzl9kT7Z2kf/3rXwXr7W4ok2Jxu92drk55/PHHO13p3d121tNt1e1266ijjtKf//xnLV26NP/8xx9/rBdeeGGTcf773//WkiVLdO6552r69Omdbqeeeqrmzp2rlStXbnQ5Rx11lEpKSnTTTTcpk8lsNF6p85U7v/zlLzcZKwAAQCaT0Ysvviifz5c/CD9jxgzlcjndcMMNnebPZrP5/azGxsZO+yDtCSHtVUBDoZCkvusDnHrqqXrjjTf0+9//XnV1dQXDAErOPnYul9Pdd99dMP2OO+6QZVk6+uijN7r8nXfeWbvttpseffRRPfrooxo5cqQOOeSQ/PO96X8cc8wxWrlypZ544on8tHg83uf73T3t95x88slyu92aNWtWp8/VGKP6+vqNrueLX/yiJOntt9/e4pi3Rt+xp++7oaGh0/Mdt+OO793n82mXXXaRMaZgX/2TTz4p6EN0Z/r06Z36XKlUSvfff7+mTJlSUD156dKl+UTAjbn66quVzWYLKubW1dV1eYX/7373O0kqGBa0p0pLS/WlL31JDz30kFpaWvLTH3zwQbW2tuqUU07p9Jr//e9/OuCAA3q9LgAAMHDMnTu3y/2Kv/3tb5I6D2F25plnqrGxURdddJFaW1t1xhln9EucPTVs2DAdeuih+s1vftNlJc6+OK/x1a9+NT+EYke9rcrULpFI6Mwzz1RDQ4OuueaarZYE1pvzPt3Z0v5FV7761a+qrq6uU/+ufZlSz/uz3fniF78oY4z++9//9jq+zbXvvvtq2LBhuvfeewtG1Hjuuef08ccf69hjj92s5SYSCT311FM67rjjujxX8a1vfUstLS0F5wG70pvvS0/P40g97+s8/fTTnW7tff8//vGPuuOOOwrmnzdvnpLJJH0QYJCgYhWAojnyyCPl8/l0/PHH5zsu9913n4YNG9blTk9XLrroIt19992aOXOmLrvsMo0cOVKzZ8/OX4nbvoPucrn0u9/9TkcffbQmT56sc889VzU1NVqxYoXmzp2rkpIS/eUvf5Hk7IxL0jXXXKPTTjtNXq9Xxx9/fL5jsrX87Gc/09y5czVlyhRdcMEF2mWXXdTQ0KD//e9/eumll/IHzs8880w99thj+sY3vqG5c+fqwAMPVC6X0yeffKLHHntML7zwQrcHmidNmqSJEyfqiiuu0IoVK1RSUqInn3xyi0rEHn/88TrwwAN11VVXacmSJdpll1301FNPbdZVxL0xefJk7b///rr66qvV0NCgiooKPfLII/nKBQPFcccdp5/85Cc699xzdcABB+iDDz7Q7Nmz81dLtJs4caLKysp07733KhqNKhwOa8qUKZowYUKPt9VZs2bp+eef18EHH6yLL75Y2WxWd911lyZPnlwwpntXZs+eLbfb3W1n54QTTtA111yjRx55RN/97ne7XU5JSYnuuecenXnmmdp777112mmnqbq6WkuXLtX//d//6cADD9Tdd9+tkpISHXLIIbr11luVyWRUU1OjF198sWC8dAAAgHbPPfdc/sBlbW2tHn74Yc2fP19XXXVVvnLO1KlTddFFF+nmm2/Wu+++qyOPPFJer1fz58/X448/rjvvvFPTp0/XH/7wB/3617/WV77yFU2cOFEtLS267777VFJSomOOOUaSM4TALrvsokcffVQ77rijKioqtOuuu2rXXXfdaJyvvPKKkslkp+m77757QTWkGTNm6IorrtAVV1yhioqKTlfPHn/88Zo2bZquueYaLVmyRHvssYdefPFFPfPMM/rOd76Tv8hgY0499VRde+21CgQCOv/88zsNudDT/scFF1ygu+++W2eddZb++9//auTIkXrwwQfzyWd9paf9nokTJ+qnP/2prr76ai1ZskQnnXSSotGoFi9erKeffloXXnihrrjiim7Xs91222nXXXfVSy+9pPPOO2+LYt7YPv3Wft8/+clP9K9//UvHHnusxo0bp9raWv3617/W6NGjddBBB0ly+tgjRozQgQceqOHDh+vjjz/W3XffrWOPPbagEtrOO++sqVOn6uWXX95obFOmTNEpp5yiq6++WrW1tdp+++31hz/8QUuWLOl0ZfdZZ52lf/7znwUnJ372s5/pww8/1JQpU+TxePTnP/9ZL774on76059qv/32y8/30EMP6d5779VJJ52k7bbbTi0tLXrhhRc0Z84cHX/88Z2uhv/pT38qSfroo48kOclSr776qiTpRz/6UX6+G2+8UQcccICmTp2qCy+8UMuXL9cvfvELHXnkkZ2G4vzvf/+rhoYGnXjiiRttEwAAMLB9+9vfVjwe11e+8hVNmjRJ6XRar732mh599FGNHz++U3X+vfbaS7vuuqsef/xx7bzzztp7772LFHn3fvWrX+mggw7SbrvtpgsuuEDbbbed1qxZo9dff13Lly/Xe++9J8lJune73brlllvU3Nwsv9+vww47TMOGDevV+r7//e/riSee0CmnnKLzzjtP++yzjxoaGvTss8/q3nvv1R577LHR169YsUIPPfSQJKdK1bx58/T4449r9erV+t73vtfrIZ43pjfnfbqzpf2Lrpx11ln64x//qO9+97v6z3/+o4MPPlhtbW166aWXdPHFF+vEE0/scX+2OwcddJAqKyv10ksvddpflpyLBto/h47vt/1ik97yer265ZZbdO6552rq1KmaOXOm1qxZozvvvFPjx48vuHiiN5599lm1tLR0W7lp//33V3V1tWbPnt3pIqWOevp96el5HKnrvk5XTjrppE7T2itUHX300Z0qYc2ZM0ehUEhHHHHERpcLYIAwANBPLrnkEtPxZ+fZZ581u+++uwkEAmb8+PHmlltuMb///e+NJLN48eL8fOPGjTPHHntsl8tdtGiROfbYY00wGDTV1dXme9/7nnnyySeNJPPGG28UzPvOO++Yk08+2VRWVhq/32/GjRtnZsyYYf7+978XzHfDDTeYmpoa43K5OsWyMZMnTzZTp04tmCbJXHLJJV3Ov2bNGnPJJZeYMWPGGK/Xa0aMGGEOP/xw89vf/rZgvnQ6bW655RYzefJk4/f7TXl5udlnn33MrFmzTHNz80ZjmjdvnvnSl75kIpGIqaqqMhdccIF57733jCRz//335+c7++yzTTgc7vT66667rtPnVl9fb84880xTUlJiSktLzZlnnmneeeedTsvsyty5c40k8/jjj+en3X///Z3aeerUqZ3acuHCheZLX/qS8fv9Zvjw4eaHP/yhmTNnjpFk5s6dW/DayZMnd1p3d9tRx8+oq3i6e23HOJPJpPne975nRo4caYLBoDnwwAPN66+/3uX7eeaZZ8wuu+xiPB5Pp7br6bb6z3/+0+yzzz7G5/OZ7bbbztx7771dfmYbSqfTprKy0hx88MHdzmOMMRMmTDB77bVXQZu89dZbXc47d+5cc9RRR5nS0lITCATMxIkTzTnnnGPefvvt/DzLly83X/nKV0xZWZkpLS01p5xyilm5cqWRZK677rqNxgIAALYN7fscG94CgYDZc889zT333GNs2+70mt/+9rdmn332McFg0ESjUbPbbruZH/zgB2blypXGGGP+97//mZkzZ5qxY8cav99vhg0bZo477riC/RRjjHnttdfy+1Wb2j9p36ft7tbVaw888EAjyXz961/vcpktLS3m8ssvN6NGjTJer9fssMMO5uc//3mn9zxu3Dhz9tlnd3r9/Pnz8+t/9dVXu1xHT/sfn3/+uTnhhBNMKBQyVVVV5rLLLjPPP/98p/3uTemqD9jdvroxvev3PPnkk+aggw4y4XDYhMNhM2nSJHPJJZeYTz/9dJNx3X777SYSiZh4PF4wfWN9t/bYe7pP3937PPvss824ceN6/b7//ve/mxNPPNGMGjXK+Hw+M2rUKDNz5kzz2Wef5Zfzm9/8xhxyyCH5PsTEiRPN97///U5tJ6nT++hOIpEwV1xxhRkxYoTx+/1mv/32M88//3yXbdPxs/7rX/9qvvCFL5hoNGpCoZDZf//9zWOPPdbptW+99ZY55ZRT8t/RcDhs9t57b3P77bebTCbTaf6Nffc6euWVV8wBBxxgAoGAqa6uNpdccomJxWKd5rvyyivN2LFju/yNAQAAg8dzzz1nzjvvPDNp0iQTiUSMz+cz22+/vfn2t79t1qxZ0+Vrbr31ViPJ3HTTTZ2eW7x4sZFkfv7znxdM7+oYtzFdH0Pt6THpja1v4cKF5qyzzjIjRowwXq/X1NTUmOOOO8488cQTBfPdd999ZrvttjNut7tg331j51e66l/U19ebb33rW6ampsb4fD4zevRoc/bZZ5u6uroul7Hhstr3yyzLMiUlJWby5MnmggsuMG+++WaXr+nYf+pN27brybH09mPma9eu7TKOnvQverOPH4/HzTXXXGMmTJiQ73tNnz7dLFy4sGC+TfVnN+bSSy8122+/fcG09m2ou9uGn3V320V3n0G7Rx991Oy1117G7/ebiooK87Wvfc0sX768U5t0db6pK8cff7wJBAKmra2t23nOOecc4/V6TV1dXbffk3Y9+b705jxOV32dntrYdjdlyhRzxhlnbNZyAfQ/y5jNrNsIAAPYL3/5S11++eVavny5ampqih0OAAAAAGCAaG5u1nbbbadbb71V559/frHDQZGlUimNHz9eV111lS677LJihwMAAPrZnXfeqcsvv1xLlizR2LFjix0O0GOLFi3SpEmT9Nxzz+nwww8vdjjohXfffVd77723/ve//+WHeAcwsJFYBWDQSyQSCgaD+cfJZFJ77bWXcrmcPvvssyJGBgAAAAAYiG655Rbdf//9mjdvXqdhE7Ftuffee3XTTTdp/vz58vv9xQ4HAAD0I2OM9thjD1VWVmru3LnFDgfotW9+85tasGCB5syZU+xQ0AunnXaabNvWY489VuxQAPQQiVUABr2jjz5aY8eO1Z577qnm5mY99NBD+uijjzR79mydfvrpxQ4PAAAAAAAAAAAMEG1tbXr22Wc1d+5c3XfffXrmmWd0wgknFDssAAAwQJFYBWDQ++Uvf6nf/e53WrJkiXK5nHbZZRf94Ac/0Kmnnlrs0AAAAAAAAAAAwACyZMkSTZgwQWVlZbr44ot14403FjskAAAwgJFYBQAAAAAAAAAAAAAAAAAduIodAAAAAAAAAAAAAAAAAAAMNAM6scoYo1gsJopqAQAAAAPXYNxvH4wxAwAAANsa9tsBAAAAFJun2AFsTCwWU1lZmZYtW6aSkpJihwMAAACgC7FYTGPGjFFTU5NKS0uLHU6P0NcAAAAABr7B2NewbVsrV65UNBqVZVnFDgcAAABAF4wxamlp0ahRo+Rybbwm1YBOrGppaZEkjRkzpsiRAAAAANiUlpaWQXOyg74GAAAAMHgMpr7GypUr6WcAAAAAg8SyZcs0evTojc4zoBOrotGoJGnx4sWqqKgocjTFl8lk9OKLL+rII4+U1+stdjgDAm1SiPYoRHsUoj0K0R6FaI/OaJNCtEch2qNQ+1Xk7fvvgwF9jUJs053RJoVoj0K0RyHaoxDtUYj26Iw2KUR7FKI9CtHXQE/x3SkO2r3/0ebFQbsXB+1eHLR7/6PNi6M3fY0BnVjVXiY3Go0yPIecL1QoFFJJSQlfqHVok0K0RyHaoxDtUYj2KER7dEabFKI9CtEeXRtMw1zQ1yjENt0ZbVKI9ihEexSiPQrRHoVoj85ok0K0RyHao2v0NbApfHeKg3bvf7R5cdDuxUG7Fwft3v9o8+LqSV9j4wMFAgAAAAAAAAAAAAAAAMA2iMQqAAAAAAAAAAAAAAAAAOiAxCoAAAAAAAAAAAAAAAAA6IDEKgAAAAAAAAAAAAAAAADogMQqAAAAAAAAAAAAAAAAAOiAxCoAAAAAAAAAAAAAAAAA6IDEKgAAAAAAAAAAAAAAAADogMQqAAAAAAAAAAAAAAAAAOiAxCoAAAAAAAAAAAAAAAAA6IDEKgAAAAAAAAAAAAAAAADogMQqAAAAAAAAAAAAAAAAAOiAxCoAAAAAAAAAAAAAAAAA6IDEKgAAAAAAAAAAAAAAAADogMQqAAAAAAAAAAAAAAAAAOiAxCoAAAAAAAAAAAAAAAAA6IDEKgAAAAAAAAAAAAAAAADogMQqAAAAAAAAAAAAAAAAAOiAxCoAAAAAAAAAAAAAAAAA6IDEKgAAAAAAAAAAAAAAAADowFPsAAAAAAAAAIBOjJFs27nlcs69MYXPd3VvWYX3HadZluR2OzeXq3A+AAAAAAAAYAMkVgEAAAAAAGDry2TW33K59bcNE6Xap7XPl806t/a/2xOr2pOq2m/tOiZVtesuqar93u1ef+9yST6f5PFIXm/hvcu1fp4N791uZ572G8lZAAAAAAAAQxKJVQAAAAAAAOgZY9YnPrXf4nEF166VFi7MP1YyuT5Jqv3WMflJWp+Q5HJ1f/N61//d8XUb/t1+31Wy1YZ/b5is1Z7UlUgUTm9P5LKsrpO23G4n8ar9FghIwaBzc7kUaGiQ1q6VQiESsAAAAAAAAAYxEqsAAAAAAADgMEZKp53EqFTKuU+nnWSpRKLrhKlMRqULF0rl5ZLfX5hw1P64vdrTUGCMk5C1YRs0N0v19fn2KJs/X4pGnfffXv2qYwKWz+c8DgSc+fz+odNGAAAAAAAAQwSJVQAAAAAAANuaTKYweSqZlFpapFjMSaRKp515pM4VmrxeJxmoPWEql1Pi88+l0aOdaUOdZa1vi65ks057jBmTf9xlAlZ7JSy320my8vulcFgqLXUSr/z+9UlXPh/VrgAAAAAAAIpgGzjaBQAAAAAAsA2y7fVJU+0JVC0tUmurU30qlXKSp9oTfLze9Uk80ajzGFtmYwlY7bLZ9clsdXXSypXOZ2dZzmfQnnRVWipFIuuTrdqrXW0LyWwAAAAAAABFwpEXAAAAAACAwS6Xc5Kl2tqcYfuampxbOu0kUOVy6ysttSdQlZVRCWkgaE++CoUKpxvjJL61f4bLl6+vdGVZzmfn80klJc4wjOGws4xQiKQ4AAAAAACArYTEKgAAAAAAgMGkuySqZNJJwjFm/XB94bCTdON2Fztq9NaGyVMd2XZhlasVK5zP3edzPneSrQAAAAAAALYKEqsAAAAAAAAGqt4kUZWUOJWoqEA19Llc64cCLClZPz2ddrYNkq0AAAAAAAC2ChKrAAAAAAAABopUSmptlVpapMZGkqjQOxsOD9iuJ8lWJSVSNCoFg8WLHQAAAAAAYAAisQoAAAAAAKBY0mkniaqlxUl8aWpyqlORRIWtZVPJVitXOttbMCiVlkpVVSRaAQAAAAAArENiFQAAAAAAQH/ZVCJVOCyNHCm53cWOFENZx2Qr23aGnGxqklavdpL4gkHneRKtAAAAAADANozEKgAAAAAAgL7SnkjV2lqYSJXLOYkt4bA0YoTk4RANisjlcrbFcNh5vLFEq2HDnCSrSIREKwAAAAAAMORx1A4AAAAAAGBryeWkWMy51ddLjY2dE6mGDyeRCgNbbxOtSkqcYQS93qKGDQAAAAAAsLVxFA8AAAAAAGBLpNNSc7PU0OAknbS0SJkMiVQYOrpKtIrHncTBVauc5yMRZ1uvrJTKyqhmBQAAAAAAhgSO6gEAAAAAAPSSO5WSVq50KlPV1jpD/RnjJJ5UVjpJVcBQ1Z5IFYk4j7NZ5zuwaJE0f/7678GwYVIo5Hw3AAAAAAAABiESqwAAAAAAADbFtp1KVM3N0vLlqpg3zxkOze+XolFp5EjJ7S52lEBxeDxOlaqyMieJqq3Nqd62dKnkdqv8k0+knXeWqqudYQOp4AYAAAAAAAYJjmIAAAAAAAB0JZt1EqkaG50kkeZmZ9g/t1s5r1caM0byeosdJTCwWFZhNavWVnkSCen996VAwEmsGj5cKi93ErH8/qKGCwAAAAAAsDEkVgEAAAAAALRLp51Eqvp6J5mqtVXK5ZzhzMrLnSSQbFa5+fOdBBIAGxcIKF1SIo0d61Szam2VPv3U+TsSkaqqnEpWFRVSMFjsaAEAAAAAAAqQWAUAAAAAALZtuZyTTFVXJ61c6Qz5JzlJH8OHM2wZsLV4vU6CYnm5M7xmW5u0bJm0ZIkUDkvDhjnfuYoKyecrdrQAAAAAAAAkVgEAAAAAgG2QMc7QfvX10vLlzt+2LUWj0siRkttd7AiBoc3lcr5v0ajzfWxrkz7/3EmyikSkmhqnmlV5Od9HAAAAAABQNCRWAQAAAACAbUdrq9TQ4FSmqq93hv5rr5Tj9RY7OmDbZFlOMlUk4lSQa2mRPvnESb4qLZVGj5YqK52/GYITAAAAAAD0IxKrAAAAAADA0JZMOslUq1Y5w/3F41IgIJWVOfcABg632/lulpVJ2axTTe79952hASsqnEpWFRVOEhYAAAAAAEAfI7EKAAAAAAAMPZmMk0xVWyutWeNUwPF6pZISZ3gxAAOfx+NUqqqsdBIkm5qcBMlw2PkejxjhPEeCJAAAAAAA6CMkVgEAAAAAgKHBGKe6zZo10ooVTjKVtH4oMZeruPEB2HyBwPoEqnjcSbBautSpXDVixPokK77nAAAAAABgKyKxCgAAAAAADG6ZjDPE34oVTlJVOu1Upho50hlWDMDQEgo5N2Ok1lZp0SJp8WKnitWYMVJ1NVWsAAAAAADAVkFiFQAAAAAAGJxaW52h/pYtc4YIc7ul8nISKoBthWVJ0ahzy2Sc34G33nISK0ePloYPl8rKnPkAAAAAAAA2A4lVAAAAAABg8MjlpIYGaeVKafVqZ0iwSITqVMC2zut1KlUZI8Vi0iefSAsXSsOGSTU1znNeb7GjBAAAAAAAgwyJVQAAAAAAYOBLJKS1a6WlS6X6emdaebkz9BcAtLMsqbTUuSWTTlW7FSucylVjxjiJVtFosaMEAAAAAACDBIlVAAAAAABgYDLGGdpr1SqnQlVLixQMOsN7UXkGwKYEAtKIEU6lu1hMeu89KRRypo0aJVVWUukOAAAAAABsFIlVAAAAAABgYEmnpbo6aflyp0pVNiuVlDjVZiyr2NEBGGzcbqfCXXm5M3zo0qXS5587iVXtVayCwWJHCQAAAAAABiASqwAAAAAAwMCQTEqrVzsJD42NTlWqsjKn6gwAbA2hkHPLZp2KeP/97/rEzVGjGCYQAAAAAAAUILEKAAAAAAAUVzzuDPe3ZInU3CxFIk6CA0N0AegrHo9UVeVUrYrFpI8+cn6DRo+WamqcpE4AAAAAALDNI7EKAAAAAAAUR0uLtHKlMyxXS4tUWiqNHctwfwD6j2U5vz2lpVJrqzR/vvObNGqUU8WqvJzfJAAAAAAAtmEkVgEAAAAAgP7V1CStWCEtXy61tTmJCyRUASi2SMS5xeNO9arly6URI5zfp8pKyeUqdoQAAAAAAKCfkVgFAAAAAAD6njFSQ4O0bJkz7F8q5SRUVVUVOzIAKBQKObdk0qmqt2LF+gSr6mqGKQUAAAAAYBtCYhUAAAAAAOg7ti3V1ztDa61eLWWzUkWFNGxYsSMDgI0LBJwhAdNpqbbWSQodNsxJsBo+XPJwaBUAAAAAgKGO3j8AAAAAANj6cjlp7Vrp88+lNWucYf4qKpxEBQAYTHw+aeRIJzG0vt75TauslMaNcypZ+XzFjhAAAAAAAPQREqsAAAAAAMDWY9tO0sGSJU6FF4/HGTqLxAMAg53H41Sqymalpibpv/91hjSdMMFJvOJ3DgAAAACAIYfEKgAAAAAAsOWMcSpULV7sDPnn8TiVXBgqC8BQ4/FIVVVOImljo/S//zkVrLbbjt89AAAAAACGGHr5AAAAAABgyzQ0OEP+LV/uPB4+XPJ6ixsTAPQ1l8tJqCorc34H337b+f2bMEEaNsx5HgAAAAAADGokVgEAAAAAgM3T3OwkVC1b5gyNVVUlBQLFjgoA+pfb7Qx5ms1KdXXOMKijRknjxzu/i5ZV7AgBAAAAAMBm6tPLpq6//npZllVwmzRpUl+uEgAAAMA2gL4GUGRtbdK8edLrr0uLFkklJdLo0SRVAdi2tQ+BOmyYMyTqG29I777rDBcIAAAAAAAGpT6vWDV58mS99NJL61fooUgWAAAAgC1HXwMogmTSqVC1eLHU0uIMgVVdXeyoAGBg8fmcilXJpLR0qbRqlTRmjDRunJOICgAAAAAABo0+P/Pg8Xg0YsSIvl4NAAAAgG0MfQ2gH6XTCq5ZI732mtTaKpWXOwkCAIDuBQJONb94XFqwQFq50vntZP8FAAAAAIBBo88Tq+bPn69Ro0YpEAjoi1/8om6++WaNHTu2y3lTqZRSqVT+cSwWkyRlMhllMpm+DnXAa28D2mI92qQQ7VGI9ihEexSiPQrRHp3RJoVoj0K0R6FitQN9ja2Hbboz2mSdbFZavVrZzz5T2aJFyo4aJdXUSJblPLeNyq5779ltuA02RHsUoj0K0R5aX8GqpUV6/31lFyxQaNUqZVpapGi02NEVHf9zC9EehWgHAAAAAMVmGWNMXy38ueeeU2trq3baaSetWrVKs2bN0ooVK/Thhx8q2sVBg+uvv16zZs3qNP3hhx9WKBTqqzABAAAAbIF4PK7TTz9dzc3NKumn4W3oawB9zBj5m5sVWrVK/uZm5Xw+pSMRyeUqdmQAMLgZI088Lm88rkwkoviIEUpWVMi43cWODBiQitHX2FKxWEylpaWqq6tTZWVlscPZZmQyGf3tb3/TMcccI6/XW+xwthm0e/+jzYuDdi8O2r04aPf+R5sXR/t+e0/6Gn1aseroo4/O/7377rtrypQpGjdunB577DGdf/75nea/+uqr9d3vfjf/OBaLacyYMZo2bRodEDlfqDlz5uiII47gC7UObVKI9ihEexRqb48Poh/Ituxih1N0LuPSbi270R7r0B6dtbcJvyEOflML0R6F2qs/9Sf6GlsX23Rn23SbtLRIixZJti2VlUlVVcpKevONNzRl//3l8fR58esBL5vN6s033lB4QVgyVrHDKT7LqG37NtqjHe1RiPbozIqobbsWlX5oVPLRSqUjKSUrapQJlxY7sqIwLqOW3Vq2zf+5Xdim90G6UIy+BgAAAABsqF+PhpaVlWnHHXfUggULunze7/fL7/d3mu71eulEboD26Iw2KUR7FKI9CtmWTeLMBmiPQrRHZ/yGFKI9CtEejoHQBvQ1tg7ao7Ntqk3SaWnZMmnhQikel4YPlwIB57l1Q3h5PB55Saxaz1hi10kyrnXJMrSHJNqjI9qjM+OyJJdL2WBEtjciX2uTfG0xJctGKFk+UrY3UOwQi2Kb+p/bA7SHgzYAAAAAUGz9WsO/tbVVCxcu1MiRI/tztQAAAACGOPoawBYwRlq9WvrPf6T335fcbmnMmPVJVQCAPmNcbqWjlcr6QwrWL1N02UfyN6+RZeeKHRoAAAAAAFAfJ1ZdccUV+uc//6klS5botdde01e+8hW53W7NnDmzL1cLAAAAYIijrwFsJbGY9N570ltvSc3NUk2NM/wfAKBf2d6AUiXDZBlb0ZWfKbLyU3njzU7yKwAAAAAAKJo+rd+/fPlyzZw5U/X19aqurtZBBx2kN954Q9XV1X25WgAAAABDHH0NYAt1HPavupoKVQBQbJalbLBEOX9Y3rZGeePNSpYOd4YH9AWLHR0AAAAAANukPk2seuSRR/py8QAAAAC2UfQ1gM1kjLRmjbRggVRb61SnGjOm2FEB6MjYsmzbuTdm3b0tGdP9ff61pvBekizLubXPIuexsVzr710uZ3pX9+vmQ/9whgeskiuTVLBhhXxtjUpU1ChdUi3jchc7PAAAAAAAtil9mlgFAAAAAAAGiFjMqVC1bJnk8UijR0tuTtAD/cq2Zdm5bm4ZuTIZubJpWXZ2g4QpU5BA5aRFWTL5e4clybQnU3WVBLXuOcuy1s1nSZaRjLXuxconYDmJVJLRuoQrl0vG7ZXt8cl2eWTcHhmXu8sbCVhbjzM8oF+eZIuiq+Yr1VqvZHmNMqFS2hkAAAAAgH5CYhUAAAAAAENZOi0tXeokVSUSDPsH9DXbliudljvZJncmIyuXlTubkiudkJXLyrKd6lOWnXOSnSyzLqlpXQKT5XbuXR6ZDROd1lWZ6tOEmnx1LLM+icu2ZeVycmUz8iRaJDvnxKJ1dx3iznn8sn0BGY9PttujnNcrK5tdtzySgXpt3fCAWX9YvrZGeeMxpUqHK8HwgAAAAAAA9AsSqwAAAAAAGKpqa6XPPls/7F9VVbEjAoYMK5eVK5eRlc2su0/Lk0lKuZR8plXB1V5ZOZNPPrLbqzq5Pfm/B1zVIcuSLLc2GESw4O9O2hOxbFuWycmybXmTrbLiTeuKYBkZt0duT1q+1VEZT0C2Lyjb7XEqYLm9sj1eyXL17fsaCvLDA6YUaFghb1ujEpWjlSqppv0AAAAAAOhDJFYBAAAAADDUpFJOharFi53HDPsHbBErl5Urm3ZumZQ86bhcmZRcuYyUy62byZJxuWV7Pcr5/cqEIrLMEE94aU/Ecrll5O38vDGSZcv22HLlsnKlmuVqbXCGIrQsJ8nM7VPOH1LOF5Dt8TvDDZJs1S3b61eqpFqeZIsiqz6TJ96sZMVo5fyhYocGAAAAAMCQRGIVAAAAAABDyYZVqqqqpHC42BEBg0q3SVTZtCw7J2NZMi6PbLdXGX9YchUmLRqXZHvlJAZttNzTNqA92czvVy4QlG1v8Jwx+apfvtYGybYlS10kW/nWJVyRbJW3bnjAnC+oQNMaeeMtSlRRvQoAAAAAgL5AYhUAAAAAAENBxypVY8ZILk6wA5ti5bJyZZJyZ5JyJ9rkySS6TqIKRDolUWELWJaMx6ucx6tc+7SNJVt5fMr4o7L9QeW8Adle3zafRGTcXqVKh8mTiFG9CgAAAACAPkJiFQAAAAAAgx1VqoAeK0ikSrbJk07IlUnJMrZs17oEHpKoimOjyVZpBWK1smRktydaBaKyfSRaUb0KAAAAAIC+Q2IVAAAAAACDFVWqgE2zc3Kn1yVSpVrlSXWRSBUs4bszUG2YbOVfNymXkSubVqC5VpZs2W6vch6fssGobF9IOa9ftscvWVZxY+9HVK8CAAAAAKBvkFgFAAAAAMBgRJUqoFtWNiN3OiF3sk3eZLPcmZQsY2RbbhKphgDj9irn7iLRqmmDRCt/WJlgVDlfSDlfYJup3tS5etUYpUqqtpn3DwAAAADA1kZiFQAAAAAAgwlVqoDOjJErm5I7lZAn2SJPslWubFqSlR8yjqH9hq6CRCtjZOUyTlJdvFnG5VbO61cmWKqcP6ScLyjjHtqHRAurV30qT7yJ6lUAAAAAAGymoX0UAQAAAACAoYQqVcB6ti13JiF3OiFvPCZ3Oi4rm5HaE2lCZdvUUHBYx7JkPD5lPT7nYS4rVzalQONKyXIp5/UrG4wqF4go5wvKXjffUET1KgAAAAAAthyJVQAAAAAADHRUqQIcxqwb4q9VvniT3OmkLDvnDP3m9csEosWOEAOMcXuUc3uU84clY8uVSckfq5NitbLdPmWDEWWDpcr6wzIeb7HD3eq6rF5VOUY5X7DYoQEAAAAAMCiQWAUAAAAAwEDW2Ch98om0cqVUXU2VKmyTXJmkPMk2eduanMpUudy6If4iDPGHnrNcsn1B2b7guuEj0/K1NcvX2iDbE1AmVOJUs/KHZYbYdrVh9SpPokWJ6vFKRyqo6gYAAAAAwCaQWAUAAAAAwEBk29Ly5dLHHzsVq8aMkdxD60Q/sDFWNiNPqlWeeEzeZIusbFrG7VPOF5Jxc0gLW8iyZHv9sr1+J8kqk5Q/Vid/bK1yvqAyoVJlA1Hl/MEhM3SecXuVKqmWN96s6MpPFa+sUbK8hu8TAAAAAAAbQa8ZAAAAAICBJpmUPvvMGfovHJZqaoodEdAvLDsnd7JNnmSLvPFmubMp2ZZbOV+QYf7QdyxrfSUr25Y7k1SgabVkrVHWF1YmXKZcIKycNzD4KzxZljLhMrnSSYXWfi5PMq549VhnqEQAAAAAANDJ0LjcCgAAAACAoaK+Xnr7bWnBAqmqSiovL3ZEQJ9zpZPyNdcqvHqBwrWL5G+pk7HcSofKlQ2Vynh8xQ4R2wqXSzl/SJlwuTKBqFzZlEL1yxRevVDBuqXyxJslO1fsKLeY7QsoFa2Sr7Ve0eWfyBdbKxlT7LCAAeH666+XZVkFt0mTJhU7LAAAAABFQsUqAAAAAAAGAtuWli6VPvlEymScof9cXA+FIcy25Um1yRtvkjcekyubVs7rVyZUOmSGXsMg53IrF4goJ8nKpuVra5KvrVE5X0jpSIWywYhsb6DYUW4+l1upkmp54jFFVn2mZLJVicrRMm5vsSMDim7y5Ml66aWX8o89Hk6lAAAAANsqegMAAAAAABRbIiF9+qm0ZIkUjUrV1cWOCOgzVjYtb7JV3pYGeVJtkiXlvEFlA5FihwZ0y3h8ynh8zlCB6YRC9cuU8/iUCZUqGypVNhAetAmB2VCJXJmUQvXL5U7Hlagax/cR2zyPx6MRI0b0aN5UKqVUKpV/HIvFJEmZTEaZTKZP4kNn7W1Nm/cv2r3/0ebFQbsXB+1eHLR7/6PNi6M37U1iFQAAAAAAxbR2rTRvnjME4IgRkt9f7IiArc8YuVNxeeIx+eKNcmVSMm6vMsGo5HIXOzqg51wu5QJh5RSWK5OSv6Ve/pZ6ZQNhp4pVICrjGXwVn2yvX8lolfxtDXKnnOSqVEm1ZFnFDg0oivnz52vUqFEKBAL64he/qJtvvlljx47tct6bb75Zs2bN6jR97ty5CoVCfR0qOpgzZ06xQ9gm0e79jzYvDtq9OGj34qDd+x9t3r/i8XiP5yWxCgAAAACAYsjlnApVn34qGcPQfxiabFueZIt8rQ3yJlulXFY5X1CZcDkJGxj0bK9fttcv2Tl5UnGF1y5RzhtUOlKuTKhMtm+QDRPocikVrZIn4QwN6Em2Kl45WsbjK3ZkQL+aMmWKHnjgAe20005atWqVZs2apYMPPlgffvihotFop/mvvvpqffe7380/jsViGjNmjKZNm6bKysr+DH2blslkNGfOHH3wwRGy7cGX4DpYuVwZ7bbbHB1xxBHyemn3/tC+rdPm/Yt2Lw5+24uD3/b+x29McbRXmu0JEqsAAAAAAOhvbW1OQtXnn0tlZVJJSbEjArYqy87Jk4jJ11IvT7JVxnIp6w/LuDkUhSHI5VY2GJWMkSuTVKBxtfwt9UqHy5UJlynnH1wVa7LBEtnetIINy+VOxRWvHqtskP9T2HYcffTR+b933313TZkyRePGjdNjjz2m888/v9P8fr9f/i4qjnq9Xk6MFYFtezn5XgRs7/2PNi8O2r04+G0vDrb3/keb96/etDVHswAAAAAA6E9r1kiffCI1NDhD//moBIKhw8pl5E20yNdSJ3eqTcblVSZYwnB/2DZYlmxfULYv6AwTGKuVr7VBmXCp0uFy5fzhQVOpzfb4lIxWy9fWqOiKTxSvGqtU6TDJorIitj1lZWXacccdtWDBgmKHAgAAAKAI6AkDAAAAANAfbFtauFB6+22nYtWYMSRVYchwZTLyNa9VeM0ihdZ+Llc2o0yozKniQ1IVtkG2169MuFw5r1++lnpF1ixSsG6pPImYZOxih9czLpfS0UrZLrciqxcoXLtEVi5T7KiAftfa2qqFCxdq5MiRxQ4FAAAAQBFQsQoAAAAAgL6WTjtVqhYtcob+i0aLHRGwVbgyKXkSTfIuWalQg5HtDigdLh80VXmAvmY8PmU8Plm5jHzxZvnampQOlygzwi/ZIQ2G615zgYhsj0/BhhVyZVKKDxuvnC9Y7LCAPnPFFVfo+OOP17hx47Ry5Updd911crvdmjlzZrFDAwAAAFAEJFYBAAAAANCXWluljz6SVqyQhg+XAoFiRwRsMVc2LW9rg3wtDXLlUmotk9LhClmGhCqgK8btVSZUKiuXlTfZoujSNXI3JpSOVDmV3Qb4EHvG41MyWil/S71c2ZTiwyYoEyotdlhAn1i+fLlmzpyp+vp6VVdX66CDDtIbb7yh6urqYocGAAAAoAhIrAIAAAAAoK/U1TlJVY2NUk2N5KEbjsHNymXkbWuSv6Ve7nRCWV9Q6VCFcsGEU6XKFDtCYGAzbo8y3lKlo25FVscVji9RJlSqdLRS2UBkYFd7c7mVKqmSr61RkZWfKl49XqmS6oEdM7AZHnnkkWKHAAAAAGAA4YguAAAAAABbmzHS8uXSvHlSNiuNHs2JZwxqlp2TN94sX2yt3Km4bC9D/gFbwrjdyoYicmWy8iZi8iZiSofLlI5WKucPFzu87lmW0pEKeRItCq+eL1cmoWTFaBmXu9iRAQAAAADQJ0isAgAAAABga8pmpQULpM8+k0Ihqaqq2BEBm8+25U3E5IvVyZtqUc7tU4aEKmCrMW7PuiECM/K1NsgbjykdKVc6UiHbFyx2eN3KBqNypb0KrV0qVyalRNU42V5/scMCAAAAAGCrI7EKAAAAAICtJZGQPvlEWrJEqqyUwgO46giwMcaWJ9Eqf2u9PPFmGZdH6VCZZLmKHRkwJBm3V5lwuaxsWv5YrbxtTUpHK5SJVMr2+IodXpdsX0Bpt1uBptVyZ9Nqqx6vXCBS7LAAAAAAANiqSKwCAAAAAGBraG6WPvxQWrNGGjlS8g3ME+HAprhTbfLF6uRra5IsS5lgicQwX0C/MB6fMp4KudJJBRtXy9fapFS0UplIhYx74B3KNW6vUiXV8rc2KLryU8WHTVA6UlHssAAAAAAA2GoGXm8cAAAAAIDBZvVq6aOPpNZWacwYyUVVHww+VjYjX2ud/C31snI5ZQORAZnIAWwLbF9Aaa9f7kxCwYYV8sZjSpVWKxssGXhDcVoupaJV8rY1KbLyM8WrxipZPoIKdwAAAACAIYGjYwAAAAAAbC7bdob9+/hjye2WRo8udkRA79m2vPFm+WO18qTiyvrDsgP+YkcFwLKU84WU8wbkSbYqXLtE6WiFUtEq2b5gsaPrJBMukzvVpnDtQrkzScWrxsi4vcUOCwAAAACALUJiFQAAAAAAmyOdlj79VFq4UCotlUpKih0R0GvuZJv8sbXyxptku71Kh8sHXjUcYFtnuZQNlsjKZeSL1ckTjyldUq30ABweMOcPy7i9CjaskCubVlv1uAGZBAYAAAAAQE8NrJ43AAAAAACDQSIhffihtGyZNHy4FAgUOyKgV6xsWr7Wevlj9bLsnDLBEsnlLnZYADbCuL3KRCrkSicUaFghzwAdHtD2+JSMVsrfUicrm1J8+ERlA5FihwUAAAAAwGZhoHsAAAAAAHqjtVV6910nqaqmhqQqDC62LW9ro8K1ixVsXC3b41MmXEZSFTCI2L6gM+xeJqFw7RIF65fJlU4UO6xCLrdS0SpnCMOVn8obby52RAAAAAAAbBYqVgEAAAAA0FNNTdIHH0j19dLo0ZKbZBQMHu50Qv6mNfK2Ncn2MOwfMKjlhwfMytdSL0+iRamSaqWjlQMnUdKylI5WydvaoPCqzxQftp0THwAAAAAAgwiJVQAAAAAA9ERdnfT++07FqpoayUURaAwSti1fa4P8zWvkymWUCTHsHzBUGLcnPzxgqGGFPKk2pUqHKecPFzu0vEykQt54syKrF6jNzipVMoykTgAAAADAoEFiFQAAAAAAm7JqlVOpKpORRo3ihDAGjfYqVb54o3LegDKB8mKHBKAP2L6g0h6fvPGYPKm4kgOselUmVCpPslWR1Qtk5bJKlo+ULBKUAQAAAAADH4lVAABsZZZtZNm2XLbJ/23ZxnlsjGTM+nnX/ynTfn7WsmQkGZcl43LJdln5v43Lku2yOJkLAEB/MUZatsxJqnK7pREjih0R0DMdqlSlg6UDJsECQB9xuZUJlw3Y6lXZQETGcilcu1iWnVWiYjS/SwAAAACAAY/EKgAAesCVs+XK5uTOrrvP2XJncnJlc/Kks/KkMvJksnLl1iVTmfakKiNLRlbOlmXkJFZJktrvN0yQMusfW5aMJSepyrIkl8t5bK1Pssp5XMr6PMr6vcr5PMq5XbI9buU86+7XPTYukrAAANgsxkiLFknz50uhkFRWVuyIgB6hShWwbRvI1aty/pCMy6Xw2qVy5XKKV42VGQBxAQAAAADQHRKrAABYx5WznSSpdFbudff+tpR8iXQ+mcq17uYwknEqSNlul4x7XVUpS85jj/KPjcsl27KkniY5mQ4JWh3uXbmsPCmjYCwhV8520rGMk5hl3JZybpeM26Wc20m+SoX9ygR8yvk8TjKWz6Os103lKwAAupPLKbxihZTLSZWVUjRa7IiATaNKFYB2A7h6le0NKBV2KdCwXLKzahs+rtghAQAAAADQLRKrAADbHCtny5fMyN/UpLK2RrlTKfnbUvKmMk4FqkwuXzwq53Yp53HL9riU9nplu12y3a6+T0iynAQps+k5O7/UXp8A5sraCrSlFG5qk2U7S7PdLtleJ7EqHfIpFfTJ9vnlTcfkDmRk+/rh/QEAMJBlMtLHHyu6fLm0yy4kVWFQcKUTClClCkAHXVevqpJcrqLGZTw+pSOVCjStlmWyak1VFTUeAAAAAAC6Q2IVAGBIs3K2vKmMvMmMk0zVmlCgNSVvOqfyZlvDg6uUdVvKed3Ked3KhPyKe9w9ryw1ABmXSzmXSzlv18+7crZcmZw82ZxCDW0qybXIlTOqSAU0dtUypYNuJaJBpUN+ZfxeZYI+qlsBALYdqZQ0b540f75SpaXOEIDAQGaMvPEmBRpXy5VNUaUKQGcbVq9qXCF3OqFU2QjZXn9RwzJuj1LRKvljdSpZ2CzFYk6VSAAAAAAABhASqwAAQ4o7nZU/kZYvkVYgFlegNSVPJit3OpevQJX1eZSKBJTwVCoWbZQte9MLHkLaq25ltT7zyiWXkrEy5Xyr5E2mFWxOyGWMbJfTXpmAR4loUKlwQOmQX+mgT2YQJ58BANCleFz64ANpxQpp1CjZy5YVOyJgo6xcVv7mWvlja2W7PcqEqVIFoHu2L6iM2ytfW4PcmaSSZSOVDZUUNyiXW8nSavlblknvvivttZdUUVHcmAAAAAAA2ACJVQCAQc2dyckXT8mfSCvYHFegNSFfMivZtnIet7I+j5Jhv3KlhRWXXHJJKRKDCrhcygR8sgPrdw8s25YnnZU3mVGwOSHLGOV8HqX9XsXLQkpFgkqFfMoESLQCAAxyLS3S++9LtbVSTU2xowE2yZ2KK9C0Wp54k7KBqIzHV+yQAAwCxu1RJlQuT7JF4brPlSwZplRJVXEr3VkuJSoqnIpV//uftPvu0rBhxYsHAAAAAIANkFgFABhUXDlb/raU/PFU50Qqr1uZgE8tFX4Zl6vYoQ4JZl2yVSaw/kSdO+MkWlUsb+gy0SoZ9isT5MQeAGAQicWk996TGhqk0aMll0vKZosdFdA1Y+Rta3SG/stlnCpVFvu+AHrBspQNlsiVSSrYuFLudELJshGyfYGixqRRo6T6eumdd6Q995SGDy9ePAAAAAAArENiFQBgwHOnswq0JhVoSSjS2Cp/PC1XzlbW41Ym4FVLRZhEqn6U83qU83qUjAYlOZ+PN5lR5YpGyTQ4VcIiAbVWRJSKBJQK+almBQAYuJqbnaGHmpqcE7rsU2AAs3KZ9UP/eXzKhMuKHRKAQcz2BpR2e+Vta5Qrk1SqfKQywZKCas/9bvhwae1a53/zHntII0YULxYAAAAAAERiFQBgIDJGvmRG/takwk1xBWNt8iUykqR00Ke2srBsNyc9B4qcz6Ocz6OkJBkjTyqrYCyuSH2LbI9bqbBfrRURJaNONSvbU8QhJgAA2NCGSVU1NcU9kQxsgjvZpkDTKnkTLcoEojIeb7FDAjAUuNzKhMvlSbYqtHaJkqXDlC4ZJlPMoQGrq6W6OqeapDHSyJHFiwUAAAAAsM0jsQoAMGD44ikFYwlFGloVaEnKk87IdruUDvoUq4xKVD0a+CxL2YBX2YBzos+dycqXSKt6yVrJspQKeNVWEVG8NKRESZAkKwBA8TQ1OSdsSarCQGeMfG2NCjSukmXnlA6XMfQfgK3LspQNRuXKpBRoXC13Oqlk+UjZ3iIODVhVVZhcNWpU8WIBAAAAAGzTSKwCABSVJ5XJJ1OFmuLypjPKeD1Kh3yKl4WKHR62UM7rUcLrUUKSlbPlS6ZVsbJRFSsalAr51VIVVbw0pGQkIEMVMgBAf2lqcipVxWIkVWFgs3PyN9cq0Fwr2+NTNhQpdkQAhjDb65ft9srb1iRXNqNkxShlA0X83dkwuUoiuQoAAAAAUBQkVgEA+p07k1OwJaFQY6sijW3yJtKyPW4lw36SqYYw43YpFQ4oFQ7Ism3542lVLV0r43IpGQmopdJJskqF/ZzgBgD0ncZGJ6mqtdU5Qcv/HAxQVjatQOMq+Vvr1w395yt2SAC2BS6XMzRgIqbQ2s+VLB+pdLi8eP8vq6qk+nrnf7cxTkI0AAAAAAD9iMQqAEC/sGyjQEtCoaa4onUx+RNpGctSKuxXorqEk5rbmPZkqmQkIFc2J39bSsMXrVHW61aiJKTWyqjaykLK+r3FDhUAMJRsmFQ1ciT7Hxiw3Km4Ag0r5Um2Kh0qk1wMnwygH1mWsqFSuVNxBeuWycqmlCoZVrzfospKqaFhfeUqkqsAAAAAAP2IxCoAQJ9yp7MKNcdVsjamUFObXLatVNCvlsqIjIuh3yDZHrcSpSEl5GwvwVhc0foWpYM+xaqiaquIKhENcPIbALBlmpqcE7IkVWGA88abFWhYKVcurUy4jG0VQNHk/CHZbo+CjaucoQHLRhSvel5FhVO56r33nN9FhgUEAAAAAPQTEqsAAFufMfK3pRRubFNJbbMC8dS6SkRB5bz860H3cj6P2nwRyRj54mlVLq9X+aomtZWF1FJdqnhpSDkvFRsAAL3U3OyciI3FGP4PA5ex5YvVKdi8RsZyKRMqK3ZEACDj8SkdKpO/pV6ubFrJ8lHK+UPFCaaysjC5auTI4sQBAAAAANimcHYbALDVuHK2Qs1xRdfGFG5qkzudVTrkV3NVieTiBCZ6wbKUDvuVDvvlzmTXDSHZolQ4oOZhJYqXR5QK+4sdJQBgMGhudob/a24mqQoDlpXLyt+0Wv7YWuV8Idm+QLFDAoD1XG6lw+XyxpsVqluqZPlIZUKlxYmlslKqq1s/LCDJVQAAAACAPkZiFQBgi7nTWUUa21S6qlHB1oRsy6VkNKBsWbjYoWEIyHk9aquISLZRoC2p4YtqlfE3qLUyqlh1iRIlQU6SAwC6Fos5SVVNTVJNDf8vMCC5MikFGlfK19akTDAq4/YWOyQA6MyylAmXyZNsVahuqRKlw5UuqZIsV//HUlXlJFe9/77zv33EiP6PAQAAAACwzSCxCgCw2TypjCL1LSpb3axAa1LpgFctFVEZdxEOrGLoc1lKRoNKRoPyJDMqW9OsktpmJ8FqmDNMoKEyGgCgXUuLU82CpCoMYO50QoH65fIkW5UOlUku9qMBDGzZQESudELBxpWyTE6pkuHF+e2qqpLWrl0/LODw4f0fAwAAAABgm9Bvvd6f/exnsixL3/nOd/prlQCAPuJLpFWxvF5jPlyqEQvXyLJtNVeXKFEaIqkK/SIb8CpWFVUiGlSkrkU185Zr1CcrFKlvkZWzix0egH5GXwOdtLU5J1obGhj+DwOWO9mq4Nql8qTiyoTLSaoCMGjYvqCy/rCCTasVaFoly84VJ5Dqasm2nf/5dXXFiQEAAAAAMOT1S8Wqt956S7/5zW+0++6798fqAAB9xN+aVLQuptK1LfIm0kqG/WquLuFkJYom5/OotSoqVzanUHNckYZWxUuDah5RrtbysGyPu9ghAuhj9DXQSTIpffCBc4K1poZkFQxInnizgg0r5MpllQmVsj8NYNAxHp8yVlT+5lpZdk7J8pHFGcp02DBp9WpnWMC995bKyvo/BgAAAADAkNbniVWtra362te+pvvuu08//elP+3p1AICtzRgFmxMqW9Wg0tpm+ZJZJcN+pYM+uXO2ws1xWbZxbsbIytlyZ21Ztu1Mk2StW46MKVy2ZUmWJSPJSJJLsl1u2W7LSYixLNmWZNwuGVkyLkvGJRnLte5vSzm3y3mek1HbNNvjVmtFRK6crUAsoZGfrFAiGlRTTYVaKyKyqaQGDEn0NdBJJiN99JG0ciVJVRiwvK0NCjaulIycpCoAGKSM26tMqFT+lnonuaqiRrbH1/+BDB/u/O//4ANpr72kSKT/YwAAAAAADFl9nlh1ySWX6Nhjj9WXvvSlTZ7sSKVSSqVS+cexWEySlMlklMlk+jTOwaC9DWiL9WiTQrRHIdqjUHs7uMz6E4yuTFburC1XLufcZ517dyYrTyqjQEtSJbVNita3yptMK+P3KedzK9wUl+QkTG2YKmVJMpbl3FztUyRTkPO04QPn1ZbZ4LGRXLaThNVp+cZZlpEkyyXjtmS7LNkul3Iet3Jet7J+j2yPW7bbte62LlHL7ZbtceWrAVhm/b3L4qTrkGkPt0vJ8qgs21agJaGaj1eptTys5pFOBavenGBv/67wG+LgN7UQ7VGoWO1AX2PrGRLbdC4nzZsnLVzoDP8nSdnsZi8uu+612S1YxlBCexTKt4NlZFw9TPA3Rr5YnYJNK2W7fcr5Q30XYH9r36HvTXsMZbRHIdqjs6HUJi63UpEyeduaFFBOiYoa2b5g75axrj226H9MdbW0YoX0zjvSHntIwV7GMIAMif2yrYh2AAAAAFBsfZpY9cgjj+h///uf3nrrrR7Nf/PNN2vWrFmdps+dO1eh0BA64LiF5syZU+wQBhzapBDtUWhbbw8rl5Mrk5ErnVYgk9GU1dVyx+PyJpNypY1ctiVljVy2JMvtVJXKuuVty8rXkpU741cmVK5saUjGta4yVLGrP9i2Ux3LGFmZnGQ7yWFOxaxc4byWJeNykqyM262c369cICDb45HtadVOqTGyPR4ZN0PGSdL2bdsXO4Stxy1ZgZx8tS1yrcopWRZSfPhwpUt7N9zOtv4b0hHtUYj2cMTj8X5fJ32NvjFot2nbVmT5ckVWrFCqrEz2smVbbdFvvvHGVlvWUEB7FGrbvq1nM9q2gmvXypVeq7bxAeUClqREn8ZWDIkxyWKHMKDQHoVoj86GUpskTED+WL1cgTYlRo5UdjP2r7b4f4xtK/j220q8+aZi48fLeIswNOFWNGj3y7ayYvQ1AAAAAGBDfZZYtWzZMl122WWaM2eOAoFAj15z9dVX67vf/W7+cSwW05gxYzRt2jRVVlb2VaiDRiaT0Zw5c3TEEUfIO8gPDGwttEmh9vb4IPqBbMsudjhF5zIu7day2zbTHq5MVt5URp50Vp50Vt5ERv54St5URu5MTp6MrfGJcfo8sERZr6Wcx6NcsL2ikzOcnpXLKdwUV7QuJl8urUylV+mgT7IykpqL/RY3j7Hlyhm5crZzy+bkarLlMpZGpEZqRXiNch6Xcl63UgGfsn6Pcl6Pcp511a+8fV7ccUCwjKXt27bXgvACGcts+gWDSankyuYUavpcWm4US5WoeXiZkiUbP9C/rf2GbEp7e/A/18E+SKH26k/9hb7G1jeot2ljnCpVti3ttttWq1CRzWb15htvaMr++8vj2Tb2BzamvT3CC8Idy5Fumyyjtu3betYedk6BxtUKNMeUDVTI5fX3T4z9yTJKjEkquCzA9iHRHh3RHp0N1TYxQYXjMQWXNihRGVA2WNKz1/XmN3VTi8qFVbmkTqGFjYoPmzAoL6IyLqOW3VoG535ZH+jvvgYAAAAAdNRnR4f/+9//qra2VnvvvXd+Wi6X07/+9S/dfffdSqVScnfo2Pr9fvn9nQ8wer1eOpEboD06o00K2ZZNEsAGhmJ7uDM5eVMZeZMZeZNpBWMJ+RIpeVJZuXO2jCTb5ZLtdSvrcSsd9sp4vErEK9UcaZCtwvawbFvBxjZF62IKtiaV8XvUUhFcV9XHqHBAvkHGkmyPJXncktySnN8Kl1xKxUuV8jU6Vb3SaUXiSVm20zbGcpKtsj63UuGAMkGfsl6Pk3jlGXwHZjelffg/Y5lO28dQYHssxarCcqezKlnbrHBDTLFhpWoaUaZ0aOMnN4fib8iW4H9uIdrD0d9tQF+j7wzK9vj8c2n+fKmqSopEtvriPR6PvCRWrWcs8W9R64fu2kR7WLmsAo2r5GupUzYYlXF7h2T79bQ9thW0RyHao7Oh2yaWssFSeRIxhWuXKVFRo0y4bJOv2qrtYbmVDlco2LBKsjyKV4+TBulw94Nyv6wP0AYAAAAAiq3Pjg4ffvjh+uCDDwqmnXvuuZo0aZKuvPLKTic6AABd21gSlcu2JVnKet3K+jyKl4Vlu7s+YOhS11d9+tuSKlkbU6gprpzHpdaysOQaQlfMboxlyfa4ncQrf+G/RMsYp9JXKit/a7MsmW0u2Wooyvk8ilVF5UlmVL6yUZH6VjWOKldsWKlyXj5DYLCgr4G8lSulDz+UwuE+SaoCtoSTVLVyXVJVqYybBD0A24ZssETuZKuCDcslqUfJVVuTcXuVCZcrWL9cxu1RomJ0r4aDBwAAAABgQ312VC8ajWrXXXctmBYOh1VZWdlpOgBgPXcmJ188JX8irWBzXIHWpDypTK+SqHq0nnRWkfpWRetb5M7lFC8JymzB8oYaY1nK+jzK+tb/q9xYslUm4FUy4iRbpQNe5baRIQQHq2zAq1jAK39bUsMXrlGkoUWNNZVqLQ9zwB0YBOhrQJK0dq30wQeSxyOVlRU7GqCAlcsq0LBC/tZ6pUNlkouETwDbllwgIneybV1ylVEmXN6v67c9PmWCUQXXfi7j9ipZNqJf1w8AAAAAGDo46wsARVaQSBWLK9CSkC+ZlWXbynqchJ0tTaLakGXbCje3qqQ2Jn88pWTYr6Q/sFWWPdR1m2yVzskXd6qJSVLW53ESraJBZQJeEq0GsFQ4oHTQp1BzXKM+XqHm4aVqGlmuVHjjwwMCAIqssVF6/30pm5VGcKIUA4uVyyjQsFL+1gaSqgBs03KBsJNcVb9CMlIm0s/JVb6gcratUO1i2S630iXV/bp+AAAAAMDQ0K9neV9++eX+XB0ADEiubE7+eFq+eErBWFzBlqS8SaciVXsiVUt5uE+qR3nicVXW1SnY1Kqs1011nq3AWJayfmc4QGeC5MlkOydaBX1KRoNKBzzKBHwMHTiAGJdLbeURudNZla1qVLixTY0jy9QyrH8P+gPYMvQ1tiEtLU5SVTwujRpV7GiAAoVJVaUkVQHY5uUCYblTG1SuilT0+/qtRE7h2kUyLne/rx8AAAAAMPhRPgMA+oEnlVGgNalgLKFwQ6t8HRKpWvsokaqdK5NTaV2zSpZn1eqLM+xfX7JUWNXKSJ50Vr62lILNcUlS1u9RMhxQsiSodMCnTMDjvBBFlfN5FBtW6gwPuKhWJQ1x+UsnSlHDxwMAA0U87gz/19Qk1dQUOxqggDP8H0lVANBRzh+WOxVXsGGFJKvfK1dlgyXytjUqvGaxWt0eZYMl/bp+AAAAAMDgRmIVAPQFY+SPp+VvSyrc2KZgLCFvMi3jcindD4lUGwrEEiqtbVKoJaWsr1KJsrCM7H5ZN+QkWnWoaOVNZxVualO0oUVZj0fpoE+J0pBSIZ8yAZ+MiyyeYmofHjDSlFTpms9UlWtWw+iygiEgAQBFkEpJH30krVnjJFVRdRMDiJXLKtBIUhUAdCfnD62rXLVCsqRMuH+TqzLhcvla6hRevUito3ZQzh/u1/UDAAAAAAYvzhACwFbiytnyt6UUaE0q3NCqQFtS7nRWtsetVNCnRLSkX08AujI5RetiKq1rkZFRW3lEFUl/v60f3bCkjN+jzLpEK3cmK18irVBLXLbLpXTAp0RJUOmwX6mgX7aHymLFYFwutVVElDVhVS5fpECsVfVjq9TG8JkAUBy5nPTxx9KyZU5SlZukFQwc+aSqljqlQ2UkVQFAN3L+sNzJtvWVq8Jl/br+dKRS/pY6hWsXq3XkjrI9vn5dPwAAAABgcCKxCgC2gJWzFWxNKtgUV6SxRf54WlbOVtbvVSrkV7asOFdAtlepCrYklQz7lfV75WIsswEp5/Uo53X+HbtytjzJjMpWN0mSMgGvktGgcwuRZFUMOb9fsfISBZtbVPPJCjWMLFdTTQXVqwCgPxkjLVokLV4sjRghefgNxgBi5xRoXCUfSVUA0CO5QFjuZKuCDctlLEvZUGn/rdyylFqXXBVcu0Tx4RNl+N0GAAAAAGwCR6QBoLeMUaAtpWBzXNG1MQXaUrKMrXTAp7aysOx+GuKvKx2rVLVSXWdQsd0upcN+pcN+WcbIk8wqUtei6NqYMgGv2srCSkUCSoX8DBfYn1yW2soj8iQzqlxer1BznOpVANCfVq6UPvlEqqiQ/FTfxABi2wo0rpavpU7ZIMP/AUBP5QIReRItCtavUMLlViYU6b+Vu1xKR8oVaFoj2xtQonIM/ToAAAAAwEaRWAUAPeRLpBWMJRSpiynYkpAnnVM66FVbeXGTqdp1VaUKg5exLGWCXmWCXlnGyJvMqGx1o4zlUjroU7w8rGQkoHTQK1GNrF9kA17FfCUKN7flq1c11lQoR/UqAOg7DQ3SRx85CVWRfjzpCmyKMQquXatALKZsICrjZn8AAHojG4zKE29WoH65bPfYfl23cXuVCZYoWL9MtjegVOmwfl0/AAAAAGBw4cgfAGyEJ51VsDmuSEOrQs1xeVMZZbweJcMB5coHxk+olbMVrW9R6ZpmyVClaigylqV00Kd00CeXbeRNpFS+ol62x61U0K94WUipSEAZkun63gbVq6qW1SvYllTd2GolSoLFjgwAhp543EmqSqelkSOLHQ1QwBerkyu9Vll/hYybfTAA2BzZYIm88WYFGlaoLVUhqf+SqG1fQHYuo9DaJbK9fmX6c0hCAAAAAMCgMjCyAgBgALFso2BLQpH6FkUaWuVLpJVzu5QMBxQvDRU7vAKeZEala5oUbWhVKuRTJuArdkjoY7bLUiocUCrsDP3oS6QVaokr6/EoGQ0oXh5RMhKQzVCBfcqpXhVVpLFNoz5ZobqxVYoNK2WIRgDYWjIZad48qa5OGj262NEABbytDQo2rVTb+IBcXr8su9gRAcAgZVnKhErlTTQqtDIpk41Krv47rpENRuVrqVeodrFaR+2knI8LZgAAAAAAnZFYBQDreNJZhZrjKlnTrFAsLhmjVMiv5uqSAVkBKtgcV9nqJvkSabWVhmQGwHCE6F+2162k1y1JcqezCjXFFW5sUzrkV2tFWMlokCpWfci4XGqpjMrfmtSI+asVaE2qfkwlw3ACwJYyRvrsM2npUqmmRnKxj4OBwxNvVrBxpWy3T7nAwOsjAMCgY1lKh8vka10tV2ylkuWj+3V41XSkQv6WOoVql6h15PZUIQQAAAAAdEJiFYBtmzEKtKUUbmhVydqYfPGUsl6P2kpCstclrAw0rpytyNqYymqbZbsstZWFBmTiF/pXzudR3OeRZRv5EilVLqtX1u9VvDSkeGlQqXBAhu2kT6QiAWX9HpWvapQ/nlLduOoBV90OAAaVzz+XFiyQhg2TPHRZMXC4k60KNqyQjJTzhyQlih0SAAwNlkvpkhKVrGyQLLcS5aMkVz8dk7EspSIVCrTUyfb61TZsvGSR1A0AAAAAWI+j1AC2Sa5sTqHmuKJ1LQo3tsqTySkZ8itWVSIN4KG8vMm0ylY3KdzQpmTET2UcdGI2GCrQk8oqWteiSF2LkpGA2tZVscp5BmbS4GCW83rUXFWiSGOrRn6yQvVjKtU8vIxKcgDQW7W1zhCA0agUZDgeDBzudELBhhVy5bLKhEqLHQ4ADDnG7VYmVCp/bK2M5VayfET/JTi53EqFyxRoXKGc169kRU3/rBcAAAAAMCiQWAVgm+JNpBVubFVpbUyB1qRsl6VkNKg238D/OQw2x1W+qlHeRFptZQz9h03L+j3K+j1y5Wz54mmFlsSVDnrVVhZRojSkdNAraeAmEg46LkutlVH525IavnCNAq0p1Y2vVnYQ/L4AwIAQi0kffuj8XUriCgYOVyalQP1yudNJkqoAoA8Zt0eZQIn8zbUyLrdSpcP6rUK38fiU9YcVqlsm2xdUOlLRL+sFAAAAAAx8nOkDsE3wt6UUXduskrUt8iXSSgV9aqmMyLgGQXKSbRSti6l8TbNsS2orDzP0H3rFdruUjAYkI/nWVT0rqYspXhpWW3lYyYi/2CEOKalwQBmfV2VrmuRJZ7V2fLVSkUCxwwKAgS2Vkj76SGppkWqoEoGBw8plFWhcKU+qTZlQGfvhANDHjMernD+kQNNq2R6vMv2Y4JTzh+XKZhSqXSzb41M2EOm3dQMAAAAABi4SqwAMXcbI29qq6rrVitTF5E1nlIgE1Dx88Fxl7srmVLqmWSVrm5UO+JQJ+oodEgYzS0oHfUoHfXJnsoo0tCrc2Kp4aUjx8qhkmWJHOGTYXrdiVVFFG9rk/XSl1k4YptYKDsoDQJdyOenjj6VVq6TRo0lcwcBhbPmb18jb1qhMqJxtEwD6ie31y7JzCjaucipJ9WOCUyZcJn9LnUK1S9Q6cgfZXi5EAgAAAIBt3SAo1QIAvWSMQs1xDV+wSuWffKLylY3KBDxqHlaqdGjwHBDzJDOqXFav0jXNSkSCJFVhq8p5PWorCykZ9ivUFFf1olpFly5VsKlNLpsEq63BuFyKVUXlyuY04rOVKlvZIIu2BYBCxkgLF0qLF0sjRkhud7EjAvJ8sTr5m9cqGyyRBkOlWwAYQnL+kGTnFGhYKVcm2a/rTkUq5G1rULDuc1l2rl/XDQAAAAAYeKhYBWDIsGyjUFObSmubFWlolWVLmeBYtVSWypZd7PB6JdCaVPnKBvniabWVhwbHkIUYlGyPW/GykNw5yVsfV/WSWiUiPrVWlSgRDcp2s+1tqXhZWL62lIYvqpU3mVH92CrZHhIHAECSU6Xq00+ligrJP3gS4DH0eePNCjavUc4XlHF7ix0OAGyTssESedsaFWhcpUTlGBl3Px3KtlxKRyqd4Qi9ASWqxvbPegEAAAAAAxKJVQAGPStnK9LYppLaZoUbWmUsS/HSoIzXJ7t1kJ2gM0bhxjaVr2qUK2errSzEkCPoF8btUjoaVdwfkq8tqeoltUqFAmqpjCheGiIRaAulw37ZXrcqVzTIm85q7bhqqtABQCzmDAHo80kRhkvFwOFOxRVoWCljuWT7AsUOBwC2XZalTKhM3rZG2R6fkuUjJat/Lv4xbo8ywVIF65crF4goHanol/UCAAAAAAYeEqsADFrtFarKVzUp3NiqnNultvJwPgFk0NXZsY1KaptVtqZJWZ9HyUio2BFhW+RyKRkNyDJGvraUqpbVKVUfUKw6qkRJiApWWyDr86ilMqr/n70/j7YsPes7z9+75zPdKYZMJRkaUwgNKRBYJdLYFAIlbjG06BJ2G1BBs9rVdkl0mVZ5LS/ZJbtlTInl5dVu2jYsGuNlqmUWFKKxaVeBKl2WxKJQyhJYdiKEUEo5xXTnM589vm//ceJGRmQMGcO9Z5/h+2FdMiN0M/aTb557zt77/e3n6ewNFKSFdl73gNJOo+6yAKAeRSH9yZ9Iw6H08MN1VwNcZcpcyeFFeVWuorlRdzkAAM9T2VhT3NuV9UPl62dndmgbJXJFqsbuc6qihqqI6zcAAAAAWEXsjgJYPM6p2Rvrwa9c0td96YIa/bGGW22NttoL21XHVFYblw+1eamrvBEpby5Ypy0sHWeMsnai4UZbXlHqzHO7OvPMtprdsYx1dZe3sKzvqX+6o2Sc6RV/ekmtw1HdJQFAPb72Nen8eenBB+uuBHiRrZR0LyucDFQ01uuuBgBwhfNDVVFDjd62wnFvpscumusKspEae8/L2GqmxwYAAAAAzAc6VgFYKMkw1frlrtZ2ejJOGq03ZcPFDFMd8cpKm5cO1d4bKO0kqkLemjFHjJS1E+XWKRmlOvPstibrLQ1OdzTpJNNvwN0xRoNTHbUOh3rwK5e089oHNDjdqbsqAJidy5elr3xFOn1aCjjvwZxwTnF/R/FgT3lzg3HcADBnbJTIS0slBxdl/VBVPKMu38Yob20q7u2oiluanKLTJgAAAACsGu5iA1gI0TjT2nZP6zs9BUWl8XpTZbT4b2F+Xmrr4oFahyON1xoL23ELy895RpNOQ15llQwmSvoTjTeaGpzqKGvHImB190abbTX6Yz3w9CV5ZaXeA+ts4gJYfsOh9Md/PA1UtVp1VwNcFY0OlXR3VCQdyeOcHADmUZm0FY67Sg4vanz6lXJBNJPjOj9Q2eiosX9eZdJS0dqcyXEBAAAAAPNh8VMJAJZamBZa2+lpY7unMM01XmtovLEcm3BhmmvzwoEag4lG6005n+msmH/W9zReb8orK7W6YzX7Ew03Wxqe6ihvzOam9jKZrDUVD1M98NVteWWl7kNbch7hKgBLqiylL39Z6velh+n2gPnhZyPFh5dkg2hmm/QAgHtTNNanYdjetiZbXyeZ2dxLqaKGvDxVc/c5DaKGbJjM5LgAAAAAgPoRrAIwl7yy0tpuX5sXDxWPMk3aicZn1+su69hE40ynzh8oGqUabbQkghRYMDbwNdpoyi9Kdfb6anbHGp5qa3C6wzjLu5S1Eznf09lnduWXlfbPnSZoCWA5PfOM9Pzz0iteQYc+zA1TFUoOL8mzpYrmRt3lAABejjEqGmuK+vuqoobyzumZHbpobSjp76qx97xGD7yODocAAAAAsCLY+QQwX5xTqzvW5oUDtQ6HyhuRemfXlmrzLRmm2jq/rzArNdpsLdW/G1ZPFQYabbYVZKU2LnfV7E/UO7um8XqLzkt3IW9Esp7RqRf25VVWe686w2hQAMtlZ0f60z+VtrakMKy7GmDKOcW9HYWTgfLWRt3VAADukPMD2ShW0t1WFTZUJTPqbG6MsvamGt1tVXFL6dbXzea4AAAAAIBa0Q4BwNyIJrnOPrOjr/vSeTUGEw1OdZR2GksVPEr6E209vye/KDXaaC7VvxtWWxkHGm62ZapKp5/b0+nndxUP07rLWihlHGq02dLWxUOd/dqO/KKquyQAOB7jsfSlL03Pe9rtuqsBrgpHh4r7eyqSzsxGSQEAjkcVNWVspaR7SaYsZnZc54cqkpYa++cVjnszOy4AAAAAoD7cOQRQO6+stHHxQA9/8QVtXTjQpNPQcKu9dKOwGv2xTp3fk19ZTdaadZcDHD8jZa1Ek/WmGv2Jzj67o41Lh/KLsu7KFkYVBhpstrWx3dWZZwhXAVgCVSV9+cvSwYF09mzd1QBX+dlYSfeybBDKBXRRA4BFVDTWFE4GinvbkrMzO24Vt2ScVWP3OXlFNrPjAgAAAADqsVypBQCLxTm1DoZ66E8u6sGnt+WMUe/suspo+aaUNvpjbb2wL2OdJmuNussBTpT1jMbrTRVxqI3LXT3w1R21Docy1tVd2kKwoa/BVlsbl7s6+7Vt+TnBNAAL7Nlnp18PPkinTswNU5VKetvyykJVPKPxUQCA42eMiqSjeLCnaNSd6aHz1obCcVeN/RdmGuoCAAAAAMze8qUXACyEaJxp49KhNrZ7csaof6Yj5y1n1vNqqMq56WhDYEWU0XQ8YDxOdfq5XY03xuqfXlPWTuoube7ZwNfgVFvr29PREjuvfUBV6NdcFQDcpb096U//VNrYkKKo7mqAKecU9XYVjA5VNDfrrgYAcJ9cEMpWseLDy6rCeHaBWeMpb20p6V5SlbSVbjw4m+MCAAAAAGaOYBWAmTKV1fpOT1sXDhRNco02WkvZoeoIoSqsvCvjAYuGU6M/UTJMNTjV0eDMmqqAoNDtXBuucsZo9zVnCVcBWByTifSlL0nWSmtrdVcDXBWOu0r6uyqTjrSkD3YAwKqp4ub0/f3wssZnXiXnz+Y+kwtClVFTjb3nVcZNlQ3OeQAAAABgGXEXEcDMxMNUr/jKJT349OWlHvt3JOlPtHWeUBUg3Tge8MyzO2r0J5IYD3g7R+Gqje2uzjyzI6+s6i4JAF6ec9NOVbu70tmzdVcDXOXlEyXdbVnflwvoogYAy6RorCmc9BT3dqbnIjNSJW0ZW6q5+7xMVczsuAAAAACA2SFYBeDEmcpq49KhHv7SBXX2Bhqc6ihd8lFgyTDV1vl9eRWhKuBaR+MBw0mhM8/uaONSVz5hoduyga/B1jXhqsrWXRIA3N7Fi9Kzz0oPPEBHIMwPa5V0t+UVqaqkXXc1AIDjZjwVSUdxf0/hpD/TQ+fNTUWjQyWHF2d6XAAAAADAbHCXG8CJurZLVeUZ9c+syfrL/dYTjTNtnd+XX1aarBGqAm5gpMlaQ1kjonvVHbKBr8FmW5uXujr93K4M4SoA82o8nnarSpLpFzAnotGBwvGhCsY0AcDSckEk53mKu9syZT67A3ue8kZHjYNLCkfd2R0XAAAAADATy51uAFCbm3Wpypa8S5UkhWmuU+cPFGYloSrgZVR0r7orNvQ12mxp68KBti4czHS8BQDcEeekr3xF6nalU6fqrga4ys8nirs7skEieX7d5QAATlCZtBVkI8X93ZleM9moITmrxt4LjAQEAAAAgCVDsArAsVvFLlWS5OelNi8cKBqlGq03JGPqLgmYf3SvuitlFGi81tDp5/e0cemw7nIA4HpHIwDPnuU8CPPDWsXdbXlVripu1l0NAOCkGXNlJOD+7EcCtjYVjbuMBAQAAACAJbP8SQcAM3Ntl6r2/up0qZIkr6y0dfFAjcFEo40Wm4nAXbpZ9yqP7lU3VSSR0mass8/uam2nV3c5ADA1Gklf/jIjADF3GAEIAKvHBSEjAQEAAAAAx4ZgFYBjEU5yPfj05atdqganV6NLlTQNlG1e6qp1ONJ4rSl5hKqAe/LS7lXP7SoeZXVXNZfyVqwiCnTmmR21D4Z1lwNg1TknPf201OsxAhBzhRGAALC6GAkIAAAAADguq5F6AHCiWgdDPfTlC1rf6Wmw1V6ZLlWSJOu0vt1VZ7ev8VpDbkXCZMBJOupeFY9ynXl2R539gcwMb4QvirTTkCSd/dq2Gr1xzdUAWGmMAMQ8YgQgAKw2RgICAAAAAI4JCQAA98yrrLZe2NdDX76oIC3VO7MmG6zQk+DOaW2np/XtviZryWr9uwMnzUjj9Yas72nrhX1tXjiQX5R1VzV3xhst+UWlB762rXiY1l0OgFXECEDMKUYAAgAYCQgAAAAAOA4EqwDck2ic6cGvXNLZZ3aUNSKNN1sr16Gg1R1pY6errBWpCoO6ywGWUt6INOkkWtvt68xzu0oID91guNlSPMp05tldBTnhMwAz5Jz0la8wAhBzhxGAAIAjjAQEAAAAANwvglUA7o5zau8P9NCXLqiz19fgdEdFI6q7qpmLh6k2Lh6qCgKVcVh3OcBSs4Gv4WZb0aTQ6Wd3tbbbl7GMBrzKGA1OtdU+GOr0s7syla27IgCr4uJF6bnnGAGI+eKsot4OIwABAFOMBAQAAAAA3CeCVQDumFdWOvX8dPSfX1n1T6/J+qv3NhJkhbYuHsqvrLJWXHc5wGow0nitoSrwtXlhX1vn9+nOdA3neRpstbVxuautCwczfRIbwIpiBCDmVDjuKRoxAhAA8KLpSECjqLcjU83wOpKRgEvhZ37mZ2SM0U/+5E/WXQoAAACAmqxeIgLAPYlH09F/Z57bVdqKNV5vrmRnAq+stHnpUNE403itUXc5wMopGqEmnaY6BwOdeXZXjcGk7pLmhg19jdcb2jq/r7W9Qd3lAFhm1jICEHPJlIXi3q6cHzICEABwnTJpK0iHioYHMz3udSMBy3ymx8b9+9znPqdf+IVf0Fvf+ta6SwEAAABQI4JVAF5W+2CoV/zJBXX2h+qf7qhIVm/0nyTJOq1v99Q6GGm83ljJYBkwD2zgabjRVpAXOv3cnjp7fRk6NEmSiiRSGQbT0FlvXHc5AJbVpUuMAMRcioZ7CrKRyrhVdykAgHljPFVRQ1F/V14+2wd0ro4E7F6a6XFxf4bDoX7kR35Ev/iLv6jNzc26ywEAAABQo6DuAgDML2Od1i8f6vTze3LGqH9mtcdpdPYHWtvtabKWyHnkUoFaGWnSaSia5No6fyA/r9R/YH0lx5O+VLrWUHt/oDPP7OjSGx5S0VjRMCyAkzEeMwIQc8nPRooH+yrj1eysCwB4eTZqKBweKB7sabL18Ow+L64ZCVg21lW0NmZzXNyXD3zgA/re7/1evetd79Lf//t//7bfm2WZsiy7+ut+vy9JKopCRVGcaJ140dFaex5rPktH681rfXaO1po1ny3WvR68t9eD9/bZ4z2mHnez3gSrANyUV1Y69fyeti4eKm3Gyltx3SXVqtEba+NyV3kSqQp56wTmRd6IVAW+Nna6CvNSh6/YUBmHdZdVu+FWW2t7A515blfbr3tQVcg4JADH5JlnpG5XeuUr664EeJGzivp7MlUpm3TqrgYAMMfKRkfR4EBFY01lc31mx7VRQ8pGSg4vqGx05BhZO9d+9Vd/VX/4h3+oz33uc3f0/R/96Ef1kY985Ibf/+QnP6lms3nc5eFlPProE3WXsJKeeIJ1nzXWvB6sez14b68Hr/fZY81nazy+88kvpAMA3CCc5Drz3K7WdvsabbRURqv9VhGmuTYvHcoZ0fkFmENV6Gu83lKzO5Kflzp8aFNZe8W7qBgzDVft9pUnofZedYbuHQDu396e9Oyz0hneUzBfwnFP0ehQJaEqAMDLcH4o53mKe7uq4pacP7t7XnlrU8lgX3l/V9nGgzM7Lu7OCy+8oL/+1/+6nnjiCSV32KH1Qx/6kD74wQ9e/XW/39e5c+f0zne+U6dOnTqpUvESRVHoiSee0OOPP64w5KG7WWHdZ481rwfrXg/WvR5H6/7UU4/LWtZ9Fjyv0KOP8lqftaNOs3ditdMSAG7Q6I115pkdNYapBqc6Kz9Wy1RWG5e7Cie5RputussBcAvWMxpttNTsjXXm+T0dPrSp0UZT0upu/Fvf02itqc2Lh8raDQ1Os9kM4D6UpfTVr0rWSjx1jzliykJxb3e6UT7DzXEAwOIqk7bCUVfh8ED5+tnZHdjzVUYNNQ4uqGiuT7tYYe78wR/8gXZ2dvTN3/zNV3+vqir97u/+rv7JP/knyrJMvn99x7E4jhXHN3b7D8OQjbEasO71YN1njzWvB+teD9a9HtaGBKtmjNf6bN3NWnPXEcCUc9OxUc/uyitK9U936EQgqbPbV+tgNA1osB7AfDPSeKOpaJTp1HN7CtJ19c+uy3mr+7NbJqGqrNDp53aVNyJlKz7WFcB9uHhRunRJesUr6q4EuE403FeQjZS3NusuBQCwKIynKmoo7u+pbHRmGnAqk7bi/q6Sw0san30N95rm0Hd913fpqaeeuu73fvzHf1zf8A3foL/5N//mDaEqAAAAAMuPYBUAmcpq68KBTr2wryIKND5FVxNJavTH2tjtK23HciveuQtYJHkrls1KbV46lF9W6j24oSpY3Rufk/Wm1nb7OvX8ni6//kHZFV4LAPdoPJa+8pVpp6qAS0jMDz8bKR7sqYx5CAIAcHds1FA4PFA82NNk6+HZfY4Yo6K5pqS3raK9paK1MZvj4o51Oh295S1vue73Wq2WTp06dcPvAwAAAFgNJAWAFecXlc4+s6Mzz+4qbcVK12hDLklBVmjjUlfWSGVMy0Vg0ZRxoPHalUDRc3sK06Lukmo13GprbbevzYuHdZcCYBE984zU70tbW3VXArzIOUWDfZmqlA2TuqsBACygstFRNDhQkA5melwbJpKzSg4vythqpscGAAAAANw9HjcGVliQFTr7zI7WdvoabLVlQ7qYSJKxVuuXu4rHuYabzbrLAXCPbOBptNlSszuW9/yeDh7eUt5czVF41vc0Xm9o6/y+snai4Va77pIALIr9fenZZ6VTp+gIhLkSpANFo0OVCZ9pAIB74/xQMkbRYF9l3Ja82T2DXLQ2FQ/2lfd3lW08OLPj4t586lOfqrsEAAAAADWiYxWwoqJxpge/clmd3b4GpzuEqq7R2RuoczDSaL3BBiKw4JwxGm20FKW5Tj+/p2Q4qbuk2hRJJOt7Ov3srqJJXnc5ABZBVUlPPy1ZK7VadVcDvMhZRYN9yV3ZFAcA4B4VSVvhuKdwxl2rnOerjBI1Di7IK9KZHhsAAAAAcHcIVgErKBmmevBPL6nVHU5DVT5vBUeSwUTrOz1lzVCOdQGWg5HG6035RaXTz++r2R3XXVFtxutNxeNMp57fk6ls3eUAmHcXL06/zp6tuxLgOuFkoHDcU9Ho1F0KAGDReb6c5yvq70ozHstXJh352UjJ4aWZHhcAAAAAcHdIDQArptkd6cEvX1QyytQ/vSY3wzbn884rKq1vd2WsU5FEdZcD4JhN1hpyzunU+T219weSXN0lzZ4xGm62tLbT0/puv+5qAMyz8Vj6ylemnaoCJshjjthKUX9XzvMlj667AID7V8Zthek0tDtTxqhorivpXp79sQEAAAAAd4xEBbBC2vsDveIrlxXkpQanO4y5e4nO3kCNfqpxp1F3KQBOSNZOVAW+ti4caG2nL+NWL1xlA195M9bWC/uKh4ycAHALzz4rdbvS1lbdlQDXCcc9BelAZdyuuxQAwLLwPFV+pLi/J1OVMz20DRNJTsnBBZkZd8wCAAAAANwZglXAKnBO69s9Pfj0ZTnnNNpiE+KlksFEa3t9pe1Y8gicAcssb0QqkkibFw+vdqlbNWk7UZgVOnV+n5GAAG60vz8NVp0+TRAfc8VUpeLBnpwfSXTeBQAcoypuyc9GCkfdmR+7aG4oGuwrGuzN/NgAAAAAgJfHnUhgyRnrtHnhQA88fVlV4Guy3qy7pLlzNAJQzqmMw7rLATADRRwobcfauNTV5qVDeSsYLhputtTZ7TMSEMD1qkp6+mmpLKdjAIE5Eo678tORypjXJgDgmBkjGyaKBnsyZT7TQzvPVxUlSvbPyyvoKgwAAAAA8+ZEg1U///M/r7e+9a1aW1vT2tqaHnvsMf32b//2SR4SwDWMddp6YV9nn91V1oyUtpO6S5pLRyMAJ4wABFZKFQYarzW0ttvT1vl9eeVqjV1gJCAWHdcaJ+TiRenSJens2borAa5jylxRf286MolOagCAE1BFDQX5RNHwcObHLpOOgmyk5PDSzI8NAAAAALi9Ew1WPfzww/qZn/kZ/cEf/IE+//nP6zu/8zv1nve8R1/84hdP8rAAJJnK6tQLezr9/K7GnYbyZlx3SXOJEYDAarOBr/FaU+2DobYuHKxcuIqRgFhkXGscPy/Ppa9+VWo0pJAunpgv0airIJ+oingYAgBwQoxRGTUUDfZn3znKGBXNdSXdbQXj3myPDQAAAAC4rRMNVn3/93+/vud7vkevf/3r9fVf//X66Z/+abXbbT355JMneVhg5b0YqtrTeL2pMmFj7GYYAQhAkqzvabzRUvtgqFPnD+SvWLiKkYBYVFxrHL9kb086PJROnaq7FOA6XpkrGuypjBp0qwIAnCgbNeSVucLR7LtW2TCRcZWSw8uSczM/PgAAAADg5oJZHaiqKv36r/+6RqORHnvssZt+T5ZlyrLs6q/7/ekGX1EUKopiJnXOs6M1YC1exJpcrygKqap05rl9bV440HijLRuHJ5ugnGPGmat/9cyNq7C231ezn2u02ZKnFdigubIeusV6rBzW43qrvh6eNN5oq30wkpF08HWn5AJf0q3fQ5ZG4KloJjr1/IHSdlN56+ZjYz03XQM+c6c4B7le3evAtcb9K7pdNXd2VL7qVVK1WgHTWynL8rq/rrqr62Cc3Iw7vQaTrrwyU97e1Nyctht39a+zXo+5xHpcj/W4HutxI9bkenO2HmWSKBwdKu9syYaz7QCftdYVjfYU9Rqco17BOgAAAACo24kHq5566ik99thjStNU7XZbv/mbv6k3velNN/3ej370o/rIRz5yw+9/8pOfVLPZPOlSF8YTTzxRdwlzhzW5oqrUPn9eb7vYUrb+kGwRSdx70COjR274vWA8Vud8JRtuaStbrTGJ59JzdZcwV1iP6636epi40isu9ZWNWxo/9JBscPP3kGXUONzTw0+fVf/Vr75tNxA+c6/HekyNx+Najsu1xvFpnT+vzmSiz/7xH9MR6CU+Sxe064weGc30eF5RKHj2gkbrUtmY8VimOzA5N3811Yn1uB7rcT3W40asyfXmZj2cU3zYVXHmotIzZ2Z++Phgoub2tp74nd+RfH/mx583dV1rAAAAAMCREw9WveENb9AXvvAF9Xo9ffzjH9eP/diP6dOf/vRNNzw+9KEP6YMf/ODVX/f7fZ07d07vfOc7dYpxFCqKQk888YQef/xxhSFjy6QX1+SpzlOyxtZdTq1MZXXmuX297WJLf/zQnsq4W3dJtTPO6JHRI3q69bScuaaFunU6tb+nUTDUeKNdX4Gz5ozOpef0QvLCi0+DrjLW43qsx4uaVq3uRY0Pz2tr8z/Tn64/e/17yJLyo1KN3nO6WF3QaKtzw//uOU+PDh7lM/eKo/XgvGzqqPvTrHGtcUz6fZW/93v6/OGh3vHYYwqCmTU2nmtlWeqzTz6p1tOtFzs7rjLjNHpkNPP1iAZ7au5KeXtT4TyF/ozT5FyqxgsJrw+J9Xgp1uN6rMeNWJPrzeF6+Jm0sZ9p+GAkF0QzPbaxsTx3Ud/9jd+o4JWvnOmx51Fd1xoAAAAAcOTE75hHUaRHHpl2eviWb/kWfe5zn9PP/uzP6hd+4Rdu+N44jhXHN3aOCcOQDatrsB43ssau9Cavqay2zu9p88KBsvWHVMZdWa3uehw5Gt3ljLtuPZq9kZoHA43XkpVap6ujzF6yHquK9bge63ENTxpuNNXuDtRML8m0SlXhfNzcP0k28hQF0sbFPY3XElXhzZ+MXvXP3JfivGyqrjXgWuOYXLggFYWqRkNBECgkWHU9Z8Tbnl4czTTD9TBVqbh3IOvH0zHfc5RzrmM95hnrcT3W43qsx41Yk+vN43rYoKFwdKho1FfeOT3TYzsvlPV9BS+8oPBVr5JW/Nxs5c/VAQAAANTOm/UBrbXKsmzWhwWWlrFOp17Y0+kX9jXeaMlGs32KbtH4Ran13Z6qyJcNaKcO4OacZzTaaCnudrV1YU9eWdVd0kyM15tqHY61ttOruxTgnnCtcQ8ODqQXXpBWvWsX5lIw6SvIR6riRt2lAABWjTGyYaxosC9TlTM/fN7pSLu70qVLMz82AAAAAOB6J/q4y4c+9CG9+93v1itf+UoNBgP9yq/8ij71qU/pE5/4xEkeFlgZxjptvbCvUy/sa7TelI1Dqai7qvnW2h8qHmUabrbqLgXAvPM85Wtrah1clDXSwdedkg1mnkmfKed5StuxNi8earzRUta6sbsPMC+41jgGzknPPSeVpdRs1l0NcD1bKRocyHqhZJb78xcAMJ+qqKlodKhg0lfR3prpsZ3vS62W9LWvSWfPSjfpvAoAAAAAmI0TDVbt7OzoR3/0R3Xp0iWtr6/rrW99qz7xiU/o8ccfP8nDAqvBOW1ePNDp5/c0XmuqjMPZt6BbMNE409reQGkzlszyj/UCcP+c72u02VL7YCjre+o+tCXrLff7R9ZKtLbT08alQ22/7gHeLzG3uNY4Bnt70vnz0unZjrcB7kQ4GShIhyqa63WXAgBYVcbIBpGiwf7088ibcefzzc1px6oLF6TXvna2xwYAAAAAXHWiwapf+qVfOsk/Hlhp69s9nX5uT5NOojIJ6y5n/lmnzm5fflkp7SR1VwNgkXiexmtNre32ZT1PvVdsyC152Gi00dLaTk+jrbaGW+26ywFuimuN+2St9Mwz079PkmnXKmBeWKtosC/n+ZLH4yMAgPqUUVPhuKdw0lfR2pztwT1PWlubnrO94hVSg9G4AAAAAFAH7lACC6iz29fZZ3aUJ6GKRlR3OQuh2R+rfTjShFAVgHtgA0+TTkPrO12tbfckubpLOlFVFMgZo80L+/LKqu5yAJyE7e1pB4QzZ+quBLhBkA4VpEOVCeO7AQA18zw531c0OJgG02dtY0Pq9aZdRgEAAAAAtSBYBSyY1uFIZ5/ZURV4ytqEhO6EqSp19vqqAk82mHHbdgBLowp9Za1E65e76uwN6i7nxI03mmp1x+rsD+suBcBxK8tp54MgkEI6n2LOOKdoeDD9+1mPXAIA4CbKuHU19DtzxkxHAj7zjDTk2gwAAAAA6kCwClggjf5EZ7+2LWOtJmvNustZGM3eRI1BprRFEA3A/SmjQEUSafPioVrdUd3lnCjnecrjUBuXDuTnjAgDlsrly9LOjnT6dN2VADfw84mCdEC3KgDA/LgS9A3H3XqOv7YmjUbS88/Xc3wAAAAAWHEEq4AFEY8ynf3atoKs1GizXXc5C8OUpTp7fRWRL3mm7nIALIGiEaoMfG2eP1CjP6m7nBM16TTU6Kfq7PXrLgXAcclz6atflRqNaccqYM4Ek56MreR8uqkBAOZHGTcVTvry8pquAbe2psGqbree4wMAAADACiNYBSyAMC109pltxaNUwy2e3L4bca+nZJQqa8V1lwJgieRX3lO2LuwrHqY1V3OCPKOsFWvzUldBmtddDYDjcPGitL8/HSkDzBlTFopGPVUhnWYBAPPFBZG8slA4qWksfLstpan03HOSc/XUAAAAAAArimAVMOf8vNSZZ7bVOhxpsNWRDF2X7pSfl0oODpQnEesG4NilnUR+UWnr4oGiyfKGjtJWrHiUaW2nV3cpAO5Xmkpf+5rU6Ui+X3c1wA2CdCA/H8sSrAIAzKEqTBQOD2Sqmkalnz4tnT8vHRzUc3wAAAAAWFEEq4A55lVWZ57d1druQP1THUbZ3aXWwVB+mipvRHWXAmBJjdeaiiaFNi/sK8iKuss5GcZo0k60vt1VMFnu0YfA0rt8eTo+hm5VmEfOKhoeyPo8FAEAmE9V1JBfTBSkNXWtajSkspReeKGe4wMAAADAiiJYBcwr57T1wp42Lnc1ONWW8/lxvRthmqtzMFDZaLAxA+DkGGm03lRjmGrzUldeZeuu6ETkrVhRWijZ2am7FAD3Ks+no2Pabc6NMJeCbKwgHamMm3WXAgDAzRkjZwKFo2594/i2tqajnbvdeo4PAAAAACuIpAYwp9a3e9o6f6DRelM2YFTL3WodDBVkhaqEMSIATpiRxusttQ+HWtvuydR1g/2ETdabau7tKR7StQpYSNvb0v6+tLFRdyXATQXjniQneVz7AADmVxU3FU4G8rNxPQU0m9PA/IUL9RwfAAAAAFYQwSpgDjW7I51+bk9FI1KZhHWXs3DCNFf7cKSsRagKwGxYz2jcaWh9p6f2/rDuck5EkUTyikJrO726SwFwt8pSevbZ6UacT2gF88crMoWjrqqIblUAgPnm/ECylYJxv74iNjel8+elQU0jCQEAAABgxRCsAuZMNM505tkdGWuVtgkG3Yvm4Vh+UaqMCaUBmJ0q9FUkoTYud9XoL2dXp7zdVmdvoHiU1V0KgLuxszPtVrW5WXclwE0Fk4H8MpcN47pLAQDgZVVRQ9H4UKbM6ymg3ZbG4+lIQAAAAADAiSNYBcwRPy915tldJcNMo81W3eUspCAr1DocKk+iuksBsILyRiQnafPigaJJTTfZT1CVJAqzQu09nowGFkZVSc89J4WhFAR1VwPcyFaKRgeqAkJVAIDFYMNk2m0xrbFb8caG9Pzz04AVAAAAAOBEEawC5oSprE6d31dnb6DBVlsypu6SFlKzN1aUlSoYoQigJmk7UZgW2rh4KL+s6i7n2KVXRh6GSxgcA5bS3t60Y9WpU3VXAtxUkI3kZxNVUaPuUgAAuDPGyPmhwuGh5Gw9NXQ601GAdK0CAAAAgBNHsAqYExuXDrV54UDDrZacz4/mvfCLUu2DofIkIJgGoD5GGm801eyPtX65K2Nd3RUdq7wZK5rk6uzTtQqYe9ZOOxn4/rRjFTCHgslQkpM8roEAAIujihoK8rH8PK2nAGOk9fVpZ9K0phoAAAAAYEVw5xKYA529gU4/v6e001AVMqLlXjV6E0WTXHmDMYAA6uWM0XitqbXdvtZ2epKWK1yVtmKtb/cUZEXdpQC4nf196fJlaWur7kqAmzJVoXDSVxUmdZcCAMBdcX4gVZWCOscBrq9Lvd70fA8AAAAAcGIIVgE1SwYTnXl2R1XgEwi6D15ZqbM/UBHTrQrAfLCBp7SVaH2np1Z3XHc5xyprxYrHmdp0rQLml3PS+fPTv8Zx3dUANxVkY3nFRJZgFQBgAdkgUjjuTruE1sEYqd2edq3KGdUOAAAAACeFYBVQIz8vdea5XQVZqcl6s+5yFlqjP1E8zpQ12TgEMD/KOFAZ+Nq4dKhoskQ3uo1RlkRa3+nJz8u6qwFwM4eH0sWL0qlTdVcC3FIw7knyeDACALCQqiiRn00U5DU+SLOxMe1Sur1dXw0AAAAAsOQIVgF1cU6nzu+rdTDScKtVdzULzVir9sFAZeizKQNg7uStWEFeaeNSV15Z05PMJyBtJ0oGqVrdUd2lALiZ8+elspQSOgFhPnlFpmAyUBU16i4FAIB74/mSnPxJjZ18fV9qNqVnn52e+wEAAAAAjh3BKqAma7t9bV481GizJefxo3g/4mGmZES3KgDza7zWULM/0tpuT5Kru5zj4RmVYaC1nb6MXZJ/J2BZ9HrShQvS5mbdlQC35GcjeWUuGzAOHQCwuGwYKxz3ZKoaQ02bm9OuVTs79dUAAAAAAEuMNAdQg2SY6vRze8rjUGUU1F3Owmt1R3LGyPm8pQGYT84zmrQTre301ezWOCbimKWdRM3eWI3BpO5SAFzrwgUpTaUWXVExp5xTNO7J+QEdZwEAC60KE/lFKj+rsZNvEEhhKD33nFRV9dUBAAAAAEuKFAIwY35R6fRzewrzUukaYy/uVzjJ1ehPlDV40h3AfKvCQFXgaeNyV1Fa1F3OsbCBL+Oc2vs1jr4AcL3hUHrhBbpVYa75RSo/HakKuR4CACw440nGU1jnOEBJOnVq2rFqb6/eOgAAAABgCRGsAmbJOW2e31f7YKDBFh0EjkNjMJFflKro/AVgAWTtRGFaaP3yobzK1l3OsUjbiTr7Q4WTvO5SAEjS9rY0GkmdTt2VALfkpyN5VSEXhHWXAgDAfavCWMG4L1PWeE0UhpLnSefPS45R7QAAAABwnAhWATPU2Rto6+KhRutNOY8fv/vllZXaB0MVCRsyABbHeL2p1uFInd2+pMW/4Z03IoWTXK1ujaMvAEwVxbRb1dpa3ZUAt+aswlFXVUDHWQDAcrBBLL/MFNQ5DlCStramIfter946AAAAAGDJkOwAZiQeZTr9/J7K0FcZEwQ6DskwVTgplCdsygBYHM4zStuJ1nd6avYmdZdzLPJGqLXt3tJ04QIW1u6u1O0SrMJc84tMfjGRDZO6SwEA4HgYI+f5CibDeutIEinLpuEqAAAAAMCxIVgFzIBXVjr1/K6iSa7JerPucpaDc2odjmR9I3mm7moA4K6UUSDredq41FWYFXWXc9/SVqLGMFWzN667FGB1OSdduDAdA+P7dVcD3JKfjeVVpZzPKG8AwPKoglhBOpQpa76+W1ubjgPMsnrrAAAAAIAlQrAKmIHNi4da2x1osNWuu5SlEY1zNYapsmZcdykAcE/SdqIwzbR+uStjF3skoPM9WWOm4w3dYv+7AAur25V2dqSNjborAW4rmPRlCVUBAJaMDWN5ZSY/r7kr8dqa1O9PO5kCAAAAAI4FwSrghDV7Y21eOtR4rSHn8yN3XJLBRKaysiEdGQAsKCNN1ppqHQ7VOqx5ZMQxSDuJmt2RokledynAatrelopiOgIGmFNekSnIxqoYAwgAWDZm2k3dz0b11uF5UhxLL7wgWUa1AwAAAMBxIOUBnCC/qLT1wr5MZVU0orrLWRpeZdXqjVXEPOkOYLFZ31ORRFrf6SlKF3skYBmHCrNSjX7NT2gDqyhNpyNf1tbqrgS4LT+fyKsKOT+suxQAAI6dDWKFk75kq3oL2dyU9vakw8N66wAAAACAJUGwCjhBG5cO1T4carTZqruUpRKNMkWTXEXChgyAxZc3IgVZqbXtxR8JWMSBOnuDhf/3ABbO7u505AvBKsy5IB3KyVzt6gEAwDKpwlh+kcrP03oLiaJpt6qLF+utAwAAAACWBMEq4IRcHQHYach5/Kgdp2QwkYxYVwBLY7LWWIqRgFkrVmMwUTyqeSMBWCXWTke9NJuEVTDXTFUqSIeqwrjuUgAAOBmeLzlX/zhASdrYkC5dkkZzUAsAAAAALDhSCcAJYATgyfGLUs3+WHlMtyoAy2NZRgJWYSCvrNTojesuBVgd+/vTUS8bG3VXAtyWn4/lFakswSoAwBJzfjgdB+hq7uLbaknD4bSzKQAAAADgvhCsAk4AIwBPTjzKFKYlYwABLJ1lGQmYJ5HW9gbyKlt3KcBquHRpunEXcm6E+eZnV0K3htsQAIDlVYWx/DyVV9TcxdeYabjqhReksqy3FgAAAABYcNzRBI4ZIwBPVqM3kfMNo24ALKVlGAmYt2LFo2w6thXAyRoOp8EqulVh3lmrcNyXDehWBQBYbs4PZapCQT4H10MbG9LBwbTDKQAAAADgnpH6AI4RIwBPVpAVagwnyulWBWBJXR0JuL24IwGt70lyanZHdZcCLL+dHWk0ktrtuisBbssvJvKLVBVjAAEAK8B5vvx0UHcZUhBMH0y8eLHuSgAAAABgoRGsAo4RIwBPVjLKFOSlyphgFYDllTciBflijwTMG5E6+0P5OSMngBNTltPRLoSqsAC8IpNsJXl+3aUAAHDibBAryCYy1RxcD21uSpcvS/1+3ZUAAAAAwMIiWAUck0Z/wgjAE9bojVUFrC2A5Xc0ErDZW8yuT1kjVjTJlYyyuksBltfentTtSuvrdVcCvKwgHRGqAgCsDBtE8opMXpHWXYrUbEqTybTTKQAAAADgnpBQAI6Bqaw2Lx7IKxkBeFKCvFQ0zlTQrQrACrC+pzIKtL7dU7CIXZ88I0lK+pOaCwGWlHPShQuS501HvADzzFbys5GqgOskAMCK8DwZZ+XPQ7BKmgbxn39eyvO6KwEAAACAhUSwCjgGnYOhOrsDjTaadZeytKJxpjCvVEZsHgJYDVkzUZTmau8P6i7lnuRJqPbhUKaydZcCLJ/hcNp1YHOz7kqAl+UXqfwylyVYBQBYIdYL5E/mpAPx2tp0FOD+ft2VAAAAAMBCIlgF3KcgK7R5YV9FHMgGjLc4Kckok/UkGVN3KQAwG0ZKW4k6+wPFwzl50vku5I1I8ThjHCBwEvb3pyNdGo26KwFell9kkq0YBQgAWCk2iBTkY5lqDjoQe970a3u77koAAAAAYCERrALu0/rlnhr9VJM1NrZOildWSgYTxgACWDllFMhYp7W9vox1dZdzV2zgy1RW8WjxQmHAXLNWunhRatIpFYvBT0eEqgAAK8cGkbwykzdP4wB3dqTxuO5KAAAAAGDhEKwC7kOjP9HG5UON1xp0UjpB0SRXmBUEqwCspLTTULM7UrM3J2Mk7kIZh2rvDyW3WKEwYK71etLBwXRzDJh3tpKfjVQxBhAAsGo8T3LTkbhzodWajpM+OKi7EgAAAABYOASrgHtkKqvNiwcKSquiwUbBSYpGmWSd5BFeA7B6rGdURoHWt/vyizkYI3EX8kakeJQqmuR1lwIsj709qSikiPNPzD+/SOWXmSzBKgDACnKeL38yJw/IGCPF8bTzKQ++AAAAAMBdIVgF3KPOwVCd3YGGG4xhOUnGWrX6E5V0qwKwwrJmomiSqbM3qLuUu1JGgYK8VDKck6e0gUVXltPNsHa77kqAO+IXmYyzjAIEAKwkG0QK8rFMVdRdytT6urS/Lw0W67oSAAAAAOpGsAq4B0FeavPCvso4kA3YJDhJ4aRQmOYq4qDuUgCgPkZK24k6+0PFCxZSsoGvZndOntIGFt3h4XQU4Npa3ZUAd8RPR3KG6yUAwGqyYSSvzOQVWd2lTDUaUpoyDhAAAAAA7hLBKuAerF/qqtFPNV5r1F3K0ouyQl7lCLABWHllFMhUVmt7Axm7OKMb8iRUYzCRny/WGENgLu3uTke3BATOsQBsJT8bqWIMIABgVRlPctPRuHOj2ZTOn5esrbsSAAAAAFgYBKuAu5QMU21c7mqy1pCMqbucpRePUlU+6wwAkpR2EjW7IzX647pLuWNFEipKS8WTvO5SgMWWZdKlS1KnU3clwB3xylxeVcj5jPQGAKwwz5Ofz1Gwam1N6nanXwAAAACAO0KwCrgbzmn9cldBUSpv8OT1SfMqq3iUqYzoygAAkmR9T1Xga22vL69ajCeMnedJ1ioiWAXcn4MDaTAgWIWF4ZW5jC3lfM7lAQCry/qh/GwsuTm5fosiqSik/f26KwEAAACAhUGwCrgLjf5Ea7t9jdebdZeyEsI0V5CVBKsA4BpZO1Y8TNXsjuou5Y5Voa/GAtULzKXtbcnzpl/AAvDKXFqcybUAAJwI64fyqlxeWdRdyos6HeniRalkXDsAAAAA3AnuygN3yFinjctdGesI+sxImBbyrJPzeasCgCPOGJVRoLW9gfyyqrucO1IkkRrDVH7OjXvgnozH02DV+nrdlQB3zE/HdKsCAKw85wcyVTkNHM+LTmc6CvDwsO5KAAAAAGAhkFYA7lCzO1Jnb6DxeqPuUlZGPMpU+abuMgBg7mTNRNEkU+twMbpAFXGgMCsVMw4QuDf7+9NwVatVdyXAnbGV/GIi64d1VwIAQL2MkZzklVndlbwouBJ83tmptw4AAAAAWBAEq4A7YCqrjctdOSNVIU9dz4JXWcXjjO5gAHAzRsqTSO39voJsjkZK3ILzPMlaReM52kwAFoVz0qVLUhRNN+aABeCVubyqkCNYBQCA5Hny87TuKq7X6UiXL0sZ12gAAAAA8HIIVgF3oH04UvtgqPEGXQJmJUxzBVmpMiZYBQA3kyeRokmxMF2rqtBXszuuuwxg8QwG045VGxt1VwLcMa/MZWzJKEAAACRZP5SfjSVn6y7lRZ2O1O9LBwd1VwIAAAAAc49gFfAyvLLSxqUDlYEv6/MjMythWsizbtrlBABwIyNlzVid/YGidP67VhVJpGSUys/LuksBFsvBgZSmUpLUXQlwx7wyl1zdVQAAMB+sH8qrcnnlHF23ed50JODly3VXAgAAAABzj8QC8DI6+0O1umNN1ht1l7JSonEm6zPuBgBup0hCBUWp9v6g7lJeVhEHCrJyIUJgwNxwTrp4UWpwHorF4qdjulUBAHCF8wOZqpwGj+fJ2pq0uytNJnVXAgAAAABzjWAVcBt+Xmrj0oHyOKRz0ixZp3iSqwz9uisBgLk3aSVqHY4UjbO6S7kt53nyrFWYztlmAjDPhkOp15uOagEWha3kFxNZP6y7EgAA5oMxktP8BataLWk0krrduisBAAAAgLlGUgS4jc5eX41+qkmHLgGzFBSl/LxSRbAKAF5WFQXyykqdvYHmfe6SNWbuA2DAXOl2GQOIheOVhbyqlCNYBQDAizxPfpHWXcX1jJF8X9rfr7sSAAAAAJhrBKuAW/DzUhuXe8oakeQxkm6WgqyUX1aqAoJVAHAn0naiZn+saDxnT0C/RBkHagwm0/FmAF7ezo4URXVXAdwVrypkbCnncS4PAMAR6wXysjkcuddqSdvbUsHIdgAAAAC4lRMNVn30ox/V29/+dnU6HZ09e1Y/8AM/oC9/+csneUjg2LQPR0qGqdI2HQJmLchLSW765BwA4GVVoS+vtGofjuou5bbKKFCYlgqKqu5SsASW/lpjMpl2D2i3664EuCumKsS5PAAA13O+fyV8PGfXQu32i+OnAQAAAAA3daLBqk9/+tP6wAc+oCeffFJPPPGEiqLQd3/3d2s0mu9NP8ArK61fOlSehHSrqkGU5nIeDfUA4G5krVjNw5Giyfx2rSqjQEFeKkx5Ghr3b+mvNbpdaTyedhEAFohXFqI5NgAA13NeIGMrmXLOroWCYNpR+PCw7koAAAAAYG4FJ/mH/87v/M51v/4X/+Jf6OzZs/qDP/gDffu3f/tJHhq4L63DkRqDiQanO3WXsnqsUzzOVIaMDgGAu1FGgZJRqmZ3pLwxn6PDnOfJs1Zhmmuy1qi7HCy4pb/W2N+XPI+uP1g4XpHykAQAAC/hPF/GlvKqQlZz1h2/2ZQuX5Ze97rp+ScAAAAA4DonGqx6qd6VlsJbW1s3/d+zLFOWZVd/3e/3JUlFUahgzvvVNWAtXnS0Fp47vot+U1ltXO7LhpGMF2iRtrKMM1f/6pnFvBESFIXC3KpIQnn3+6T7lfXQAq/HsWI9rndlPQY7A1XO1lxM/XzjSR3x+rjWAv7M5I1E7YOxxpsdlcnxhquO7TPG+EpGhYbH+Nldh6NzD87LpuZhHZbqWqMopIsXpSSRynImhyyvHKec0fEWwdW1ME6OLraScVf/esv1cE5emcoGgRb8bf7l3cl6rBLW43pX1mNnsCNZV3Mxc8Az6qjD6+Na/MxcbyXWw0wvMV358p+RV9ZjZudlSSIdHEyD/RsbsznmXZi7c3UAAAAAK2dmwSprrX7yJ39S3/Zt36a3vOUtN/2ej370o/rIRz5yw+9/8pOfVLPZPOkSF8YTTzxRdwlz59HBo8f2Z8UHB9q8lCvd2JAbLmbXpEdGj9Rdwj0Lh0OtDa0yf10qj+dm2rn03LH8OcuC9bjemzpvrruEucLr40aLtiZx/1CnLz+gyenTJ/Ln3+9nTFgO9HWXYx1svnEpOvFwXjY1Ho9rPf6yXWtE/b42v/QlZRsbcv5sz0c/++STMz3eIhg9siTjJY/J7dbDKwqFbigbhrLRZIZV1WdyLq27hLnCelyv82a6YF+L18eNWJPrLft62G6q7IGuJmfCO/r+WZ6XNXZ31dvZ0eTs2Zkd807Vfa0BAAAAADMLVn3gAx/QH/3RH+n3fu/3bvk9H/rQh/TBD37w6q/7/b7OnTund77znTp16tQsypxrRVHoiSee0OOPP64wvLML8GV3tCZPdZ6SNcfQccZaPXT+gg46Y43WD+7/z5sx44weGT2ip1tPy5nFfCq2nQ10Kt7TqNm//z/MGZ1Lz+mF5IUXn35cZazHdQY7A72p82Z9/mJPrVPzd+Nw1kb7O/ozD63rjwdfVOcsG0CSFvZnJlQuM9nTdvSgquj4TvWO6zMm9HP5RannG5NjrW/WPOfp0cGjnJddcdT9qS5Ld63xla9IjYZ0bnbBzrIs9dknn9Q7vvVbFQSL+7N5nI7WpPV068UuhqvMOI0eGd12PfxsrOblUEXSlrzFfEjljhmnyblUjRcSXh8S6/ESO4Mddd7c0eCzn9UDcxbercP2eKzOO96hwRcHOtvh2ksSPzMvtSLrEYwLmZ4nr9u+/Tde+cyd6XnZzo60uSm94x2zOd5dqPtaAwAAAABmcmX2Ez/xE/o3/+bf6Hd/93f18MMP3/L74jhWHMc3/H4YhmxYXYP1uJE19liCVa3+SM3uUKP1pqwWbzTY0WgmZ9xC1i9JJi9kj6n+q6OqFng9jhPrcb2j8X+tU2e1/tCraq5mXmSqnOX1ccWi/sxkSaB2d6ikP9Tg9Nqx/bnH9RlThEbhpJRX5CrixZ8TxXnZVJ1rsHTXGtZOx7CsrUk1BJyCIFBIsOp6zug4nuFYdFdHM91mPbyilKkqGflaoI/Oe3In67FKWI+XuDL+74FmU69aO77zsUU2liTreH1cwc/M9VZmPUygoMhkKnfb7r1H6zHT87KNDWk0kvJcarVmc8w7NFfn6gAAAABW0onuZjnn9BM/8RP6zd/8Tf27f/fv9JrXvOYkDwfcH+e0ttOTjGTDJX+6eo5Faa4qWPyNdgCojZHyKFRnbyivrOqu5gY28OWVVkExf7VhsSzttUa/P/1qv0wnA2AOeVWx1J1GAAC4H87zZcpSpirrLuVGjYY0Hkvdbt2VAAAAAMDcOdH0wgc+8AF97GMf06/8yq+o0+no8uXLunz5siaTyUkeFrgnjf5E7f2Bxp1G3aWsLusUZoWqgGAbANyPvBkrmmRq9uf0nMs4BfkcbiZgoSzttUavN+0UcJPuWsC8M0V+2w4cAACsMusH8lwlz87htZAx026pe3t1VwIAAAAAc+dEg1U///M/r16vp+/4ju/QK17xiqtfv/Zrv3aShwXuSWd/IM86VRGjT+oSlJW8ysr6dKwCgPtipDIK1D6YfrbNGyejIC3qLgMLbmmvNba3CVVhYQVlKufxkAQAADfl+VJVyZRzei3Ubku7u1KW1V1J7X7+539eb33rW7W2tqa1tTU99thj+u3f/u26ywIAAABQkxNNkDg3fxt5wM1Ek1yd/aEm7aTuUlaaX5TyykpVk81EALhfWTNWszdWPEw1WZuvboxV4CuacLMe92cprzVGI+nwUOp06q4EuHvOyZQ5wSoAAG7HOBk7p2PRWy3p0qVpB9WzZ+uuplYPP/ywfuZnfkavf/3r5ZzTL//yL+s973mP/sN/+A9685vfXHd5AAAAAGaMtjCApObhUOEkV9GI6i5lpfmlleckeYwPAYD75TwjZ6Rmd1R3KTeoQl/RJJeZw25aQK26XWk8lhrzFYYE7oSxlYy1ch63GQAAuCUnmXkcBShJ/pVw9MFBvXXMge///u/X93zP9+j1r3+9vv7rv14//dM/rXa7rSeffLLu0gAAAADUgJlnWHleZbW+01feCOsuZeX5RSm22AHg+GTNWI3+RFFaKE/m53OuCn1FaSG/KFXG81MXULu9PSkIJEPIHIvH2ErGVbKG93UAAG7JeDLlnAarpGnXqu1t6fWvfzFoteKqqtKv//qvazQa6bHHHrvp92RZpuyaEYr9fl+SVBSFimJORz8uoaO1Zs1ni3WfPda8Hqx7PVj3ehytt+ex7rNytNa81mfrbtabYBVWXrM3VjJMNdhq113KyguzUo5uVQBwbKooUGOYKumPlSfrdZdzVRX48stUQU6wCriqLKX9fanZrLsS4J682LGKTVgAAG7FeZ68Kq+7jFtrNqejqYdDaX1+riHr8NRTT+mxxx5TmqZqt9v6zd/8Tb3pTW+66fd+9KMf1Uc+8pEbfv+Tn/ykmpzfz9wTTzxRdwkriXWfPda8Hqx7PVj3ejz6KOs+a7zWZ2s8Ht/x9xKswmpzTp3dvqwxcj4jK+oWTHJV/HcAgGOVNyK1D0YabnVkg/l4j3W+J2OdgnyOn9QGZm04nI4BPH267kqAe2JsJTkrMQoQAIBbcsaXV87xU+hxLOW5NBisfLDqDW94g77whS+o1+vp4x//uH7sx35Mn/70p28arvrQhz6kD37wg1d/3e/3de7cOb3zne/UqVOnZln2SiuKQk888YQef/xxhSEPcc0K6z57rHk9WPd6sO71YN1njzWvx1Gn2TtBsAorLR5lanVHStcadZcC6+SXVpZgFQAcqzyJ1OoOlQwnGm+06i7nGtP3fQBXDAZSUUhcOGNBGVvVXQIAAHPPeZ6MLSU7x2Fk35e6Xenhh+uupFZRFOmRRx6RJH3Lt3yLPve5z+lnf/Zn9Qu/8As3fG8cx4rj+IbfD8OQjbEasO71YN1njzWvB+teD9a9Hqz77LHms3U3az2nV2/AbLQPhvLzUmVExrBuXmXl2YpRgABw3IxkfV+t7kiSq7uaFzkjr2QTHrjq4IBQFRYawSoAAO6A8WSsne/PzVZL2tuTqjmusQbWWmVZVncZAAAAAGpAmgQry89LdXb7ypo3Pk2E2ZsGq5wKOlYBwLHLmpEa/YniUa6sNR+fe9YzjAIEjpSltL8vNeiiisVlKt7TAQB4Oc7z5ZW5jK3kNKeh+mZzGvofDld2HOCHPvQhvfvd79YrX/lKDQYD/cqv/Io+9alP6ROf+ETdpQEAAACoAcEqrKxWb6xklKl3Zq3uUqBpsMpUVnZe26ADwAKzgS9jrRr98fwEq3xPQVbUXQYwHwYDaTyWTp+uuxLgnnm2lDOcywMAcDvTUYDVfHesiiIpz6fnqCsarNrZ2dGP/uiP6tKlS1pfX9db3/pWfeITn9Djjz9ed2kAAAAAakCwCivJWKfOTk9l5EuMnpsLXmVlnOO/BwCckDyJ1eqONDjdURXWfwpoA09hRncTQNJ006ooGAWIheYVmeT5dZcBAMB8M57k3HwHqyTJ96XDQ+nhh+uupBa/9Eu/VHcJAAAAAOYIj5NiJcWjVM3+RGk7qbsUXOFVtu4SAGCpFUmoMCuUjLK6S5E07VjllRXv/4A03bQiVIVF5pxMVdCxCgCAOzT3wapWS9rbk6o5rxMAAAAAZoC7nlhJzd5YflnNRccOTE031ulWBQAnxkiV76vZHUtydVcj63vyrZNXcqMeK64spf19qdmsuxLg3rlp91mCVQAA3AEjGTfn10HN5nRU9XBYdyUAAAAAUDvuemLleJVVZ2+gLInqLgXX8Is5v6EEAEsgb0SKh6mitP4RfEcdq/ySjlVYcYPBdNOq1aq7EuCeGWclZyXDgxIAALwcI0mu/oddbiuKpqOqB4O6KwEAAACA2hGswspJBhPFo0xZK667FFwjKEpZn40YADhJVejLL0vFo7TuUqbBqsrSsQoYDKabVgGdVLHAnLvSsYrzeQAAXo6TZOwCPGDi+9OR1QAAAACw4ghWYeU0u6PpTX+fl/888cpKzuO/CQCctCoM1DwcytT9hLQxkjsaBQussIMDKQzrrgK4L8ZZSU5iFCAAAHfASHYBHjBpNqW9PalagFoBAAAA4ARx1xMrxc9LdfaHypqMAZw3nrU84Q4AM5AnkeJxrmic112KZFz9AS+gTkUh7e9PN62ARUbHKgAA7pgznrxFCVaNx4wDBAAAALDyCFZhpTQGE0XjXFmDMYDzxqucHPswAHDibODJs3YuxgFKRp4lWIUVNhxON6tarborAe6LcVZydtqNEAAA3J5ZkI5VUSTl+fScFQAAAABWGMEqrJT2wUjWM5LHDf95YqzlCXcAmKE8DtXqjuoPNTnJ1F0DUKfBQCpLKQjqrgS4P85Nv8T5PAAAL8cZI88tyEj0IJAOD+uuAgAAAABqRbAKKyNMC7W6I2UtulXNG+MkEawCgJkpkkjhOK+/a5WZhmuBlXVwIIVh3VUA980cbQ5zPg8AwMszRrJl3VXcmWZT2tuTqgXosAUAAAAAJ4RgFVZGoz9WmOYqEjav5s3VjlV0EgOAmXCekZEUD2oOVjlXf9csoC5lOQ1WNZt1VwLcP+foVQUAwJ0yRuZqt8c512xOR1czDhAAAADACiNYhdXgnNr7Q5WBz1PUc8g4yVgxOQQAZihPIjX7Y3llfU8eO8/IlHSswooaj6U0lZKk7kqA+2ac1QJsDQMAMBeczJUxugtwLRRFUlFMz10BAAAAYEURrMJKiNJCjf6EMYBzylgrI0YBAsAsFUmoMC2UjPPaanDGyK8x2AXUajyWskyKOT/F4jN0rAIA4M4ZT8ZNu7cvjNGo7goAAAAAoDYEq7ASkmGqMC9UxowBnEfTjlUEqwBgpowkYxSN6hsH6Dwjr1qAp7SBkzAe00kVy4OOVQAA3DFnjjpWLcinZxxLh4d1VwEAAAAAtSFYhZXQPByp8nm5zytjreScnMfmIgDMUhEHavYm8mw9N/SdIViFFXZ4OB2tAgAAgJUzvQO2IMGqJJH6faks664EAAAAAGoR1F0AcNKCvFSzP1beZMzKXFuQe0nAcfq1f3lBzz471mte29Jf+qGH6i4HK6iMQyX9icJxpqydzL4AYxgdhdVUllKvN92kApYB5/LA3PnbT57WF3ZjfcvZVH/vHft1lwNgkSWJdHAwHQe4vl53NQAAAAAwc7TwwdJLhqnCSaGcMYDzi40YrKh3PLapH3jvK+ouAyvMekaes4rHWX1FLMr4C+A4jcdSmhKswnLh/RyYKz/4uoH+9p85qLsMADdlrvn/CyCKpDyfnsMCAAAAwAoiWIWll/THkmemX5hb/NfBKnr1a5uKIz6KUa8iDNToj2Vq2BB3EhvxWE3jsZRlUkxHVSwLJxnO6IF58rYzmRoBI5eB+bVg10HGTDtWAQAAAMAKYjcXS82rrNoHI+UJ3arm2dUtGDZjsILKqpQjWIIaFXGoKC0UpkUtx+edHytpPOa8B0uHVzQwf3Jbca0BzKOjD81F+vmMIunwsO4qAAAAAKAWBKuw1OJhqmiSK29EdZcCADdI80w//7/8op7u/mHdpWCF2dCXX1aKJnk9BSzQXgJwbA4Pp5tTAACckFFZ6m988dN6avwndZcCYBk0GlK/L5Vl3ZUAAAAAwMwRrMJSSwYTedbK+rzU59nVPfVFelIPOAa/+58+L0l6zfqjNVeCVVf5vhr9SS3HdrQ4waopS6nXk5Kk7kqAY8WZPDBffv38eUnSGxuP1FwJgBscfWguUgfTJJHSlHGAAAAAAFZSUHcBwEkx1ql9OFQeMwYQwHxJ80zjLNXj3/Jn9dr1R/WHnx/WXRJWXJGEiseZgrxUGXF6CJyo8Xi6KbWxUXclwDEyPCQBzIlRWWpQlvqxV71Kb2w8ov/pWe6JADgGUSTl+fRcdn297moAAAAAYKbYOcPSisaZ4lGmtEU3gLlneMIdqyPNM/3Ux35OD2ye1kb3P9f25VxFbvWP/sFX9YN/+SGde2Wj7hKxgsowUDJKFY3zmQarjLRYT2kDx2E8lrJMiuO6KwEALJlRWeoHP/MZvbrZVGPybj3dC5WWRu/97Yf0kXfs6y1bWd0lArhqAa+DjKFjFQAAAICVRLAKSyseZ/KLShWdNwDMiaNQlST9X773LymJ2FTHnDCSNUbxONN4oznjYy/ghgJwP8ZjXvdYTryugVodhaok6R9+4zeqFezUXBGAW3PX/P8FEkXS4WHdVQAAAADAzHl1FwCclGQwkfV5iS8CJzPdiFm4O0rA3fkfnvjXkqQPv+/9hKowd8o4VDJMZewM34ytk+WjGqvm8FAKGcuEJUOmCqjd3/3iFyVJH3/sMbUCHjAD5t1C3gJrNKR+XyrLuisBAAAAgJniTguWkldZNXsTFTGbVovAeUbyjIxz05AVsGSyIlfgB/rh7/w+Bb5PqApzqQwDxZNMYVYob0QzOaZxTtb3Z3IsYC6UpdTrTTelgKXCQxJAXSZVpcjz9N+98Y0KPY9QFbAAjHPS0UOGiyRJpIOD6TjA9fW6qwEAAACAmaFHAJZSNMkVprmKhGDVInCekTVmtl1SgBlJ80x/7//zT/Vbv/+/qt1oEqrC3LKBJ7+sFGbFzI5prJMNOB3FChmPpTSdbkoBS8QZTzKcywOzNipL/Re///v6J08/rY0oIlQFLArnJM+TzIJdC0WRlOfTc1oAAAAAWCELdvUG3JlonMmvrGxAF4xF4IyRM0dP7AHLI80z/dTHfk6S9O7/7NtrrgZ4edYYxaNsZsfznFPF2F6skjSdbkZFs+kKB8yMMZJbsK4bwIIblaV+8DOfkST9lde8puZqANwdJ6fp/bCFlKZ1VwAAAAAAM8VOFpZSoz9ho3aBOM/IGUOwCkvnH/6P/1yS9OH3vZ9OVVgIZRwqHqaz6yDoJMcoQKySo02oRd1EA25h2rGq7iqA1fLjn/ucJOnjjz1GpypgwZhF7VglSWEoDQZ1VwEAAAAAM8WdFywdr7Jq9CeMAVwgzhjJI1iF5eGckzFGP/Sd36uvO/0AoSosjDIMlIwzhVmhvDGLjjpOzmMnHitkPCZUheXkeRKn8sBMHF1r/K03vlGvb7cJVQGLyLlpKHkRRZHU79ddBQAAAADM1IJewQG3Fo0zhWmuIiZYtSicZ+RkZGzdlQD3L80z/d9/+R/rP33ty3rdQ68kVIWFYgNPprIKs2I2BzSSJViFVTIYMAYQS8nJXBkHSLoKOEmjstR7fv/39andXX3TxgahKmBBGWclb0E790aRlGVSMaNrRgAAAACYAwSrsHTicS6/srLBgt6gWEXGXOlYwkYMFluaZ/qpj/2cSlvp6x9+dd3lAPfEGSkeZTM7mKN7D1aFtdJwSLAKy8nzrgSreFICOCmjstQPfuYzKqzV2zc36y4HwH1xsoserDoacQ0AAAAAK4BgFZZOMpio8nlpLxrrezKWYBUWV1GW+qmP/Zwk6cPvez+dqrCwyjhUPExn855sJMdnNlZFlkl5TrAKS8nJyBmP0d7ACcmt1Q9+5jOSpI8/9hidqoAFZ5xb7I5VeT49twUAAACAFcGdGCwVr7Jq9MYqEsYALhrrGzZisNAC39c7v/Ed+nOPfguhKiy0MgyUjDOFWaG8cdIBEMcoQKyONJ1uQm1s1F0JcPw8TzJiFCBwQkJj9EPnzum9Dz9MqApYBs7Jegv6gMlRx2E6VgEAAABYIQt6BQfcXHRlI7hI6ASwaMowkFcxOgSLJ80z/ez/93/QwaCnd33LnyVUhYVnA0+mqhRmxYkex1RWzvMY3YvVkaZSVUlsiGMJORk5eWK0N3C8RmWpv/YHf6BLaaofffWrCVUBy8JZySzwdZAx0mRSdxUAAAAAMDPckcFSCdNCXuVkGSu0cGwUyGMfBgsmzbOr4/9aSaPmaoDj42QUTnJpo3Vix/Aqq8r3GN+L1cG4FCwzz5OMkXH2WKJVxlnJVjLOylgrYyvJWV3b43B6nOkIQud5cp4vGU/O9yXRDRGLb1SWV8f/rYd05QaWjTMLfB0UBNJwWHcVAAAAADAzBKuwVKJxLjFSaCFZ3+P5diyUa0NVH37f++lUhaVShf70M/UEeZWV8+lYhRUyHEo+r3csJ2eMnDH3NArQ2FKmKuRVpUyZKcjS6e9ZOw1YXQlUOTlJ5mpTrOsOZ64ErIwn5xvZIJENE1k/lA1COT98cXQRsACuDVV9/LHH6FQFLB0zDSUvqjiW+v3pBzGfrwAAAABWAHdmsFQag4nKkA2rRWR9j+fKsVAqa/WaBx/W+971vydUhaVThYHCrJBfVqpOKPh0tWNVsMAbCsDdGAykiHHVWFLGk/MCeeWdhHKdTFnIL1L52Uh+nsqz5XQskqadp6zny/mhnOdJxnv5BlTOydgrISxXKUiHMpO+5DT984JQZdKUDRuyYSzncSsE8610To+ur+vvvulNhKqAJeW8Bb5/GUXTMdd5Pg1ZAQAAAMCS4+4Mloafl4rSXGXEy3oRXe1YxdNumHNpnul//uyn9Z5ve5f+yvf8xbrLAU5EFfqKJrmCrDzRYFWWxLznYzWUpTQeE6zCUrNBKL+Y3PJ/n3ajmihIB/LKXKYq5TxPNohUBq376zxszJURgL6cQuloapo76ohVKhkcyEmyfqgqbqmKG6ri1mKPYsLSGZWl/t9f+5r+m9e/Xv/grW+tuxwAJ+FKu8WFD1YNBtNwFcEqAAAAACuABAqWRpgVCvJSaZML+kVU+Z6c78lYJ+ezyY75dO34v+99x3fIZ4McS8p5RsZZBUWpTCfzuepVVmUcvvw3Asvg6In+tbW6KwFOjA2iadeoazknPx8rmAwVZEN5VTkdz+dHcnHz5IsykvMDOT+QVTLtbFUWCsc9haOuqihWmaypTFpyAed1qNe14//+6mtfqyadqoDl5Kzk+4sdrApDqSim57jr63VXAwAAAAAnjrs0WBphWshUTs7nieNFZH1P1jNXR0MB8+baUNWH3/d+xYSqsOScjMJJLm20TuTP9yqrIuZUFCsiy6bBKj47sMScH14Z56dpODcdKhj15BepZKQqSFTNIkx1O8bIhZHKMJKck1dkSvo7sqNAZdJW0ViTjRK9/OxB4HhdG6r6+GOPEaoClpixVs54ix2skqadt7Ks7ioAAAAAYCa4U4OlEY3z+xsfgVpZ35P1PXnWqqq7GOAmLu7vqBk39N/+xR9XEtEZD8uvCv3pZ+sJMZJsyKkoVkSaTjefPMLjWF7O8yUnBelA4bCrIB/L+qHKuDmfr31jZKNENkpkylLhuK9wMlDRWFPRXJMNk7orxAr56nCotSDQP3/729UiVAUsNeMqOW/BO1ZJ08/28bjuKgAAAABgJrhbg6XRGExUhgt+U2KFOd+T8zyZilgV5kuaZ/qTF57RN73uG/S3f+Sv1V0OMDNVGCjMCvllpSo4gc9XJzoUYnWkqWR4AABLzDn52UhJb/vqZnHR6CzM694FgcqgPQ1YjQ4VpAPljXWVzTVGBOJEjcpS//7gQO88e1a/9thjdZcDYAaMtXK+L2cW/FoojqVer+4qAAAAAGAmCFZhKfh5qSjNVUa8pBdZEQdq9Iu6ywCuOhr/53u+vvG1b5BZkM1B4DhUoa9okivIyuMPVjk3HQtFIBqrYjiU6ECCJeWVueLejpKDC/LKTFnntOQv5vv7NGC1JlMWiocHCrOh8vaWykZHjAfEcTsa/xcYo+84c4ZrDWBFGFtNx84u+s98GE47Vlk7n50pAQAAAOAYcdWDpRBmhYK8VEGwaqHlSSivsnWXAUh6MVQlSX/rh/8qGx1YOc4zMs4qKMpj/7P9slIV+gSisToGg+nmE7BMnFM4OlRz+xlF/T2VjY7KpL0U+SMXhCqbHck5Jd3LirvbMuXJjcfF6jkKVUnSr37rt3KtAawQ46zsMnRDjCIpz6Usq7sSAAAAADhxBKuwFMK0kKmcHCOFFloVBpKruwpg6ve/+B8kSR9+3/uVRHHN1QD1cDIKJ8e/keyXVlVAsAoroqqmm050rMISMWWuxsEFNXefl2dLFa0N2SCWM76MXZ4HJWyUqIqaCid9NQ4vKpj0xQULjsO/unBBkvTxxx5Ti88HYLU4K+svQeA+CKSylAo6zwMAAABYfty9wVIIsnwpnoxedVXoT/87Orf4LdGxsNI803Ay1ne+7Vv15x/9MwrZ6MAKq0Jf0fgEglVFqSIJZY97xCAwj4piuumUJHVXAhwLPxursXdRYTpQ0ejIXdkcdp53tdvhMkWPnO+rbHTk5amS7rayIlfR2RLPqeFejMpS3aLQj7zqVfqL584pYnwWsHqc5LwluA4iWAUAAABghXAHB0shHmeqAl7Oi64KfVnfYxwganM0/u9j//a3JIlQFVae9X0FRSnPHu8WuV9UypqETLAijoJVfKZgCUS9npq7zynIR8pbm1dDVZIk40nGl3HLeS5vo0RVmCge7ivubcsr2UjG3Tka//eRL35RkghVAStsKYJVnjd9MJJgFQAAAIAVwN19LD7nFI3z6Rg5LLQq8FUFnrzS0sUEM3cUqpKkv/b9f7nmaoD5UAWeorSQX5Sq4uN7X/asVdGIju3PA+YawSosA2cV9/YU5+dlbFtFc+Om31aFkbxJOtvaZsgFgUqvrXA8kLGl0rQtqVF3WVgAR6EqSfpH3/RN9RYDoD7OSUay/hKdFxKsAgAAALACeDwOC88rCvlFRceqJWADX1Xoy6+qukvBCvqX/+v/T5L04fe9X0kU11wNMB9s4MsvK3nF8b8vl9ESbSYAt1MUkrWST2gcC8paxYfbSg4uqopjlY32Lb/VBZGMXc6OVVd5nspGR36eqrmzIz+b1F0RFsBP/fEfS5I+/thjahG0BVaWqUo5P7i+4+OiI1gFAAAAYAWcaBLld3/3d/X93//9euihh2SM0b/6V//qJA+HFeXluYKiomPVkijiUF655JsxmCtZUaiqKv3QO7+XUBXwUmb6F788vmCVsVbOeASrcN8W5lqDzSYsMmuVdC+r0b+sMmmpSm4/xtV5ga5+eCwzI5WNtryyVNy7LD8b110R5tSkqlRaq7/1xjcSqgIgY0tZL1iejlW+L6XL26kSAAAAAI6caLBqNBrpG7/xG/VP/+k/PcnDYMX5ZSmvsrI+HauWQZFE8iqCVZiNSVHo//E/f1y/+b/9WzWTBqEq4BaCY+xY5ZdWVeCrDOneg/uzMNcaBKuwqK6EqpLetoq4Ixe8/AhX5/vTXJVzJ1/fHChaLZmqUtzblp/TuQrXmxSF/usvfEE/+5WvaC0Mjy9U5dz0q6qkopDJMpnJRGY8lhmNpl/DocxgcOPX0f8+Gk3/mTSV8nz6WVVVK/OzC9TFs9X089RbkmuhIJAmfP4BAAAAWH4n+njMu9/9br373e++4+/PskxZll39db/flyQVRaGCDYmra8BavKgoCnl5LiMjj8mWMs5c/atnFnM9XBjKu/J/9/+Hmat/XdT1OFZX1mOwM1DlCK91dwb6v33hX6sqSn37q16r3sXn6i6pVqP9HemhdfnmmH7+lgHvIZKmm+RhWh7bZ0yYW9kwlA0jeW5x1/Wods7LpupYh4W51hiNphvVZXlyxzgG5ZX6yjmvc5auroVxct4KdGG6lnOKB9uKB9vKm225IJTMNHCxM9iR7M3DF35ZaC3tqyxTuWXZNL4Vz6ilpqpGS/5kpKi/rXTjAdmoUXdl9biD18cquTjY0T/6119QZa2+5+xZPXflM+eOOSdjrUxVybvmr561UlXJOCejaSfQ24ahzDXvXVe+z0h66T/hPE/OGDljJGNkfV/W9yVj5Hxfle/LeZ7k3du52/Z4rI4keUYLfPp3vK78zKzkZ8zNrMp6uFJl3Hj5n4Mr67EQ52WDwYk/SMA1FwAAAIC6zVXf4Y9+9KP6yEc+csPvf/KTn1Sz2ayhovn0xBNP1F3CXGmnqV6Zvlrp8FTdpcyNR0aP1F3CPQuKidbyUMWwPX3i/RicS88dy5+zLN7UeXPdJcyFv/Gp35Ik/bO/9F41Qicpu/0/sOweWpd05fXBA6fXWfX3kCAfyR2G6m2+VtL9f8bE3a6yzU1tjF53HOXVjvOyqfF4/sdg1XWtsfa1ryk5OFD2ta+d2DGO02effLLuEubO6JFR3SXMXHxwoCS/qMHppmxU6dqTg86bO7f+B61Vcn40DWZEL9/hahlkD2SSAoXDoRQXys6eXZl/95u57etjhfzib31KkvT/+i//SykMddtPSefkVZVMUUw7cmeZ/DSVX5YyZXk1CGU9T5XnTUNQV4JQOvqruY8gypUQl6ydBraOgltXQltGUnAlXGWjSFUcXwnJh7JBcEfX7Uevis6bO5pwsXGdyTnGqF1r2dfDdicaPVQo3Rre0ffP+3lZcOUaYP/gYDoW8IQswrUGAAAAgOU2V8GqD33oQ/rgBz949df9fl/nzp3TO9/5Tp06RWimKAo98cQTeqrzlKyh24w07Rbx59NYX10/r3H7oO5yamec0SOjR/R062k5s5hPCXtJpQfWdySzqyK5zw0JZ3QuPacXkhdefPpxhQ12BnpT5836/MWeWqfO1l1ObZxzMsbozz3yqP7C6x/WUxf+UI0twru+8fSmzpv5ebkW7yGSpMAr5JWVtuNCr83ecN+fMZ1xTzsPPqju2p1tJswrz3l6dPCoHn/8cYVhWHc5tevfbSeOGtR2rfGZz0jDoTTn1zNlWeqzTz6p1tOtFzv2rTrjNHpktHJrEkz6au725bx1efGL50g7gx113tzR4LOf1QO3CSNG3a78qlK15O+N+2mq1lveotHXxtpqbkouVnOnr2hvrGyjM+3us0Lu9PWx7I6uNd7XbusNf/7Pa+cPL2irufXSb5JnSwVlLr/IFRaZjC3lV5UkJ2s8FZ4v5/mqPE+6rlOovfI1C+bKl2RcJb/K5NnBtJOWJM/zJOOrDEKVQawyjFQG0c27WnlGnTd31HghWan309syTpNzKWtyZEXWIxpOVFbr8vfbt//GK+cg7/jWb1VwXGNET8J4PP369m+XkuTEDrMI1xoAAAAAlttcXZnFcaw4jm/4/TAM2bC6hjWWYNUVprLyU6eq5cnO7Obi/DoazeSMW9j1sIFREQeKRqlscn9vUVdHVS3wehyno/F/rVNntf7Qq2quph5pnum//5Vf0P/hz71Lb3jdN6gRZmpsNbX2AE/We/KmzSj4ebmK95Cp0jeK80qmnI5fuK/PGOfk5JQl/tKcy3CeOrUIa1DLtcaVkU1KEmmeN8Wu5YyW5Mfzvl0dRbRCa+LlqRp7l2SsUxU3r//3vjLe7YFmU69aW7vln2GckzcayTWWfyReKknWXc1fV3Fb4bgn5wXK107rKJSyEu7w9bHMRmWpv/zkk/rJ179ef/bMGY3DUFvNLT3QeUCSk1dk8otUQTaWl2fyqlLO+LLxmpzvy/nB/XWemjFTVZIt5VWljLNSnqmyTlXcko0aqsJYzp9+vjpP005VK/R++nJW8TPmdlZiPayV5EkmfNl/x6P1CIJA4TyfQybJNFglSSd4PbAI1xoAAAAAltscX5kBLy/IS/mlUxmeXLtpzF7ajNTo0eYbxyvNM/3Ux35OkvTGV75O2d7lmisCFoP1PXllpaCopPtsvuEXlarIV5FwYxwroiimXyf4BD9wXExVqnF4UX4xUdHcuPc/aJ43gE+a56mKWopGh3J+qKK1UXdFmJFRWeoHP/MZSdK3njqlvfFYpqoU5BOFwwMF6VB+mcvYStYLZINIVdRc6Oyd833J91WFV0LL1smrMkXjrjQ8kPUjVVGiKmmpimLJrW4HWECSjC2nP//+En1OBoFUltPzXQAAAABYYkt0JYdV5BelTOlkA4JVy6SMQxluuuIYlVV1NVT14fe9X0kUK6u5JmBhmOn/80sr3eeE1iAvVUSBiphgFVZEUUw3m1Y5aIKFEQ32FIx70zDQ/XTN8X2t8pm8CwJZGyocHqiKG7LBjZ3ysFwKa6+Gqj7+rd+qdlWpPxjIu3BBYbevuJFNg1RhMg0jLSvPyHqJbCjJSaYqFGRDhZP+NEiSOPnDU6qillxwnyeVwALyqlLOD6bd6ZaF501DkwSrAAAAACy5E72SGw6Hevrpp6/++plnntEXvvAFbW1t6ZWvfOVJHhorwi8rGWvkPE9a4TFNy6aMAlnfk6msnH+f7VEASYHv613f/Gf12Ju+SUnE5hZwL7yyOpZg1fBUm/d2HIuFuNYgWIUFEaRDxf09VXFTMvf3Hu08T8aY6cgjbzXf722UKJgMFA0OlG48uFDj3XD3Qs/Tj547p/dsband60lFoShNVRqjLE5UNldwNKKRXBCqCq6E6W0pvxgq6e3IeaHKpK0yaauKGvx8YGUYW6mMGvf9OTuXCFYBAAAAWHIneiX3+c9/Xm9729v0tre9TZL0wQ9+UG9729v0d/7O3znJw2KF+CVhqmVURoHKKFBQlHWXggWX5pn+0cf/hXa7B3rnN72DUBVwj5xn5B/De7JfWaWdxjFUBCzItUaeT8Mly9yhBAvPVKXi7uXpiLLwGMZW+v40UGVX+1qtjFsK077Cca/uUnBCRkWh/+rf/3ud39nRjzSbag8GUlVJcawyjmWjaDkDFPfA+YHKRkNFc03WDxSOe2ocnFdj/7zCSV+mIpSB5WdsKRst6bVQntddAQAAAACcqBN9dPo7vuM75BjnhRPklRVPNy4hG/gq41DRKFVxDHs7WE1pnl0d/9dptmquBlhs1vMUFNX9/SHOSU6MAcSxWYhrDZ7exwKIBnsKJoPpCMDj4HnTcFV1F58bzk2DWM5d//fWvjgi/FY/78ZMRw/6/vTa0JgXO2V5Xn1dszxPVRAxEnAZWavxaKS/+LnPSc7pVJZJSSI1m3VXthBcEKoMQsla+Xmq+PCSwiBSkXRUNVpXAp7c58HyMc7Jhkv4WeB5UprWXQUAAAAAnChmUmChBXkpR7BqKaXNSI3euO4ysKCuDVV9+H3vp1MVcJ+sb+Tn99exyi8qlZGvIiFYhRVS0n0T883LJ4oH+6qi+x8BeJUxclEkbzjUDVEoa6dfZSlTli/++tow1R38+S/9PvOSv3dH33dtyMr35Xx/GsA6+jrha0kbJgrGfYWjrrL1syIssuCqSmYy0Xg41A/+0R9Jxug3Hn1UrZBzm3vieaqSpuQkU2aKRwfSuKsybqlork1Hk/Izg2VhKzk/kA3uc7b6PAoCKcvqrgIAAAAAThTBKiy0IC9kGa2ylIokknTliXXCc7hL1jk98tAr9UPf+X2EqoBj4DxPnrUy9zHWKUwLFXF45f0dWBF307EHqEE0PJCpCtmkfbx/sO/LVdU0XHgUoro2SHXE814MQAXBi39/H65Gro7CWkd/n+cvdr+6UqN8Xy4ITjRsVUVNhZO+ysaaqmUdAbXsrJVJU5nRSCoKWUlvW1/Xf/ea16jF/Yj7ZyQXxirDWKYqFWRDBelQRaOtorkhG9HBCovPKwtZP1zejlWMAgQAAACw5AhWYaGFWSlX12gHnKgiCVWFgfyiUhXxVoU7k+aZfuv3/53e++e/Wz/+v3tv3eUAS8P6RkFaydxHSCTKS+2f6ch5bIxhhVSMrcb88tORouGByviYRiY7J1MU0wDTYDDtWDWZvPgz4PvTzddZdfcxZnrMW9Qqa6WikLl2M9j3pSCQi6Krf3+/XBBIpRSMuqoIiCwW564Gqkyea2iM/snOjv7bc+f00Uceqbu6peT8QKXflqkqhZOhwnSkorGmorXOOE0sNK8qVCUtOW8Jw5ieR5dWAAAAAEuPtAIWlqms/KKajnPA0imjQEUcKsgKglW4I9eO/3vPn/0u+bw3AMfGeZ6MLe8rWCXnlLXp1IEVk+cvjiED5olziob7MraSu5+xRFUlcxROyrLpxuqVjrMuCKbBpHk8JzsKXV1b21HYKstk0nT6sxsEcnE8/fe4j5BVFTYUpkOV6VhVckxBNpwc52SybNqhKsskz9MwivTep56SJP1fH36Ym2knzPm+ykZbpiwVjg4VpAPljXWVzbX7e88CamJsqTJq1l3GyfB9glUAAAAAlh73grCw/MrKVASrlpYxmnQSbQ5TZXXXgrl3bajqw+97v+KIm+3AcbJHowDvMVjl56XK0FfW5GcTK6aqCFZhLvnZSNGoq/IeRgCaqpKZTKbhozx/sTOb70txPP1756Q0nQaVFuV67aVhq6qaBseGw+mvjzpZheFdd91yvi9npGjS0yRpiq5Vc8o5mTyXGY+nr19JShKNrL0aqvqNRx9Vc1Fe00vABYHKYE2mLBQPDxROBipa6yobHTl/Rt3vgGNgnFvOMYDS9POzqqaf+Zz3AgAAAFhSBKuwsLyykl85WW5qLq0iiSS5q0+9A7eyfbivVtLUB3/w/6QkWtKblUCdrrwFe/cYrArTQkUcXnlfB1YIHaswp8JxT3L2zoMJzinIJmrspGp2uzJHAaogkG4WaDdGCkOZyUTueEufnWtDVs5NQ1bj8fTXQaCgLOUVxR3/cTZsyM9G8vJUNqKD49ypKnnDoXT03ziKrr5/PzuZaD0I9M/f+Ea1uP9QCxeEKoNQpsiU9HdVTvoq2qdUNtoiqIi5Zys5P5Bd1m5rRx2reKAAAAAAwBIjWIWF5ZdXOlYFXLQvqyIJVYWB/KJiHCBuKs0z/fFzT+ubX/9m/a0f/qt1lwMsNSPJWHtP/2yUl9o7uy7nsfGFFVOWbDBh7nhFpnDUU3UH4R5TFQryiYJRT2u9XUWDhqznSY07CAb5/jSQtAyOQmRH4wDLUlGayu3tqRxLXtiUDZPb5juc70u5U5AOlROsmh/OyaTptDNZUUwDVVfCU6Oq0v/W7eq7T53Sr73lLTUXCklyYawiiOXlEyXdSyrydeWtLbmA7lWYX15ZyPrh8garru1YBQAAAABLiqQCFpZXVvKs2KxaYmUUKI9DhVlBsAo3OBr/5xlP3/S6N8rjvQA4Uc5Jpizv6Z811ipr000OK6goFmcMGlZGkA7klamKeOsW3+Hk5an8dKQwHcgrczk/VBEnKtpt+Xf4mna+L3M0FnDZus8GgcookvV9xVlfcX9XNohUJW1VYSzn3/zapQpiBelQRWuDMWbz4NouVS8JDI6qSu996in5kt61tSVv2V7Di8xINm7IVZXCcVdePqF7FeaaVxWqktYtPxsW3lGQ+h67GwMAAADAIljSKzqsAr+yctwzW27GKO0kagxTZXXXgrlyFKqSpL/9I3+NUBUwA87z5N9DsCrISxVRoLyxpE9oA7dytMHEZjzmia0UDg9lg/gmr003DVNN+gqykWStqjBW2ViTjOTKyd0dy/PkPG/awWJJA4YuCJRHDVVhIr/I5A32FPihyripKm7LBcFLvj+SP+kryMYqmus1VY0bulTF8XUPbB2FqiTpf3z0UUJVc8r5vspkje5VmHvGliqjZt1lnBw6VgEAAABYAQSrsLBMZXkWcQUURxvxy/ikO+7ZZ7/0nyRJH37f+5VEdMEBZsF5uqenkMM0V9GIVCQEq7BijjaYljRQgsXk55NpqKfRueZ3nfw8VTjqKkiHckaqwsZ0dN398Lzp1yr8HHhGVZxIbjo+MRz3FaRjlY22qrj5YpcSIzkvUDAZqGiuie46NbhNl6oj/2ZvT5L0G48+qtayv3YXHd2rMO+ck5GTjZK6Kzk5dKwCAAAAsAIIVmFhedbJ1V0ETlzeiFREgYKsVJnw5OmqS/NMvdFQ//k3vl1/7i3ffMejaAAcA2Nk7uEp5DAr1X3FppzH5hZWjLXTr4BLLsyPIBtLspI3PYfyionCcV/hpC9JqqJjCFQdMUaKIpnRSC5ckfN4I7kgVBWEMmWhaHSoKhupanRURU05z5MNInllJlMWcgGh45l5mS5V0rRT1V6e6//4wAN675kzCuiKuzDoXoV5ZapS1g9VhUv8QBgdqwAAAACsAO4SYWEZa3kAcQVUYaCslSjMirpLQc2Oxv/9y3/7W5JEqAqYMWeMzF0+hWwqK2eM0s6N3SCApUfHKswbZxWM+7J+JFPmivq7ahxcVDjuqQoSlUn7+EJVR4c8Cha61XskxgWhyrgl45zCwb6i/o78dCTn+zJVKb9g2PnMOCczHMp0u9P35UbjpqGq9z71lD7yzDOSRKhqEV3pXlVFTYXjrpLuJXn5XY4wBY6ZV+aqglh2mYO0dKwCAAAAsAK4U4SF5ZWVnOElvArStURexZNvq+woVCVJ73/PD9dcDbCanGfk3eVTyFGaK09Cpa0lfkIbuJWjjlWMMsac8ItMQTqQn43U2D+vaHQg64cqG50XA1DHflBf7mgc4Coykg0jVXFLXlUpGu4p7u3IK3P52aDu6lZDVcnrduUNBtMOgtGN4YajUJUk/eM3vGHWFeKYHXWv8stMyeElBZOBRL9z1MSr8uloymW/f+nc6n7WAwAAAFgJS35Vh2XmV06OV/BKyBuRqjCQX5R1l4Ka/Oon/ydJ0off934lEQENoA7OmOnN8rvoOhJNCo03W7IBHXuwguhYhXninOLetpLDi4pHXTnPV9lYO/kxWZ43/RlY9c1WI1VRrCpsySsLBeOBksPL8jK66ZyoopDX7UqTiVwc33I063//7LOSpN949FG1eM9eDkYqk7ZkjJLuZYXDg5XsnIeaOSfJyUbNuis5eUfjAAEAAABgSZ3QY6nAyfMqOlatiiIOlTdCRZNcVcjb1irJ8ly+7+svv/N7JYlQFVAjZ/Tik8j+HXTgcU7GWo3XV2AjAbgZOlZhTpgyV9zfVevS12SsVd5em91IdWOkKJIZjeTCEw5xLQJPquJEJggUDbtq7j+vdOuhaQCEOffHyqSpzGAgleV09N9NjKtKoTH6W69+tSQRqlpCNkrkykLJYE9eVSpvn5LzuaeA2TBVKeeHqsIVuI/BKEAAAAAAS45UChaWV1o6Vq0KYzRZb8ovuEmzStI809/72D/Vb/zuJ5REMaEqoG7GyDgnc4cP+4dpoSKJlLaTk60LmFd0rELdnFM47qm186yS7racZ1Q2OjPP71wdM0i3mKucH6iME5kyV3J4SXFvR6Ys6i5rOTgnMxzKdLvT9+Hk5ucho6rSf/HUU/qHzz+vlu8TqlpiLghVRi1Fo66S7mWZMqu7JKwIr8xVBbFssCL3Mla9OyUAAACApUYsBQuLjlWrJWvEcr4nU3GjZhWkeaaf+tjPSZLe823fVXM1ACTJedNglWfvbGM8muSarDVUxnQowYo6Gp1JxyrUYBrYuajmznPyylxF0pZxTq6O8Ijvy3keG64vZTzJC1RFDYWjrpLDCwrSgSQCaPfMOXn9/rRTle9L8c3DDKOq0nufekqS9N+cOzfLClET5/sqGh35+VjJ4SX56ajukrACvCpX2WivzrkgHasAAAAALDFSKVhMzsmrHB2rVkjRCFUkocKMJ7lXwf/zN35ZkvTh972fTlXAnHBHHavucGPcLyuNN1onXBUwx6pqdTbSMD+u7VLV21EZN1U2OvJsJWNLOa+GEVieJwUBwaqXcJ4vr0zlvEBlY03GWrpX3Y+qktftSqORFIbT19wt/JUvfUmS9BuPPkqnqlVijMqkI6+qlHQvK5z0664Iy8w5SU42WpGx6MbwOQ8AAABgqdVwVxW4f8Y6GeumHat4oHclOM/TaK2pzUuHypsEbZaVtVae5+mHv/P7dHbzFKEqYI44Y6YbBHcwyinIS1VRwBhArDbGnmHWrFXc31HS25EznvLW5tVwn1cVkkw9YT9jpDCUyXO5kC6GR5zny1RXAm9+IBs35KpS4agrr8iUr51RFTXqLnMxVJW8Xk9K0+nov1u8zq1z8ozRh1/zGr0qSQhVrSIjVUlTXp4q7m1LzqpormvmM1Kx9ExVyvmhqnCF7mlw7gsAAABgidHvBwvJOCfjLB2rVkzeTqajqBgHuJTSPNPf/eV/rM9/+Sm98oGHCFUBc8Z5kqyVdwdvwfEo1aTTUNaMTrwuYK6xwYQZMWWhxsF5NQ4vqQoTlY3OdeESU5W15gbcUfcgfiaucsaXcfa6Dh/On3av8spMyeElBZO+eJLoZdxhqGpUVfq+//gf9dv7+3pTq0WoasXZKFHlh4p7uwpHXfFzhuPmlbmqIJENVui+Bp/xAAAAAJYYsRQsJM86GatpxyqsjKwZqWjEitK87lJwzNI800997OdkndVbXvP1dZcD4KaujAJ8uRvmzikoKg1OdxiDhtXG5hJmxM8nau49p3iwr6KxJnuT7himKuq9dvJ9Od9nTNC1jJGcnYarrvt9qUracsYo6W4rHO5LL/0eTJXldPxfmkqNxm1DVe996ilZSd++sTHLCjHHXBirCkLF/T2Fw64IV+E4eWWmstFereshzn0BAAAALDFSKVhYK3RrAlc4z9Nwo6kgL+suBceoqir91Md+TpL04fe9n05VwLy6w02BMC1UJJEmHcYXAcBJC8Y9NXafU5COlLc25Pzgpt837VhV4xWU70thKFVVfTXMmyv/OcwtwmY2SlSFsZL+vuLejkxVzLC4BVCW005VWTYNVd3q26zVe596SpL0G48+SqcqXMeFsaowUjzYJVyF4+OsZDxVcavuSmaLYBUAAACAJXbzu67AvDu6WCddtXKydiLr+/KKSjbkpvgiyNNCn/7nT8k6J1npkcce0uv+zCv0yV/6j0qHubzA0ysmX6cf/6+/j1AVsBBuf8M8HmUanFlT0WAMIACcGGcVDfaVdC9LMipaG7f5XidjSzmv5ueqwlAmTe85tnCQBfpnzz6oQenLk9P3PXSot28OjrXE2TMyunU3KheEKo2naNyTVxXK1s+u1lipWzka/3clVPXZF3x94eL09f3qLae/8PpSf7Tt6fef9eUkfXvn6/TX37BFqAo35YJIlaR4sCcZXXk/5WYT7p1XZKrCWFW0Yg+aEKwCAAAAsMToWIXFxQX7SsobkbJmxDjABRJGvr7zr3yj/sIHvkXv+qvfpD/59AvKxrkKW+g/bn1B3/TDr9JP/I2/pFarWXepAO6XdfKs1fBUu+5KgPo5t1rjXzAzxlZKDi+pcXBB1g9VNjov+/3GudrHqLsgmIa77nEcoOc5/dC5Hf3Um5/TB7/+gn71+dPKqkX/GXNSdfv1cL6votGRn6dKDi/JT4czqm1OHYWqroz/GxXS5y94+j+/vdB/9Y5ClwfS811P/8tXpd9r/0c9/ta+Xlu8QmnGc4W4NRdEL44FHPfqLgcLzi8ylY3OLbtILqUlPOf96Ec/qre//e3qdDo6e/asfuAHfkBf/vKX6y4LAAAAQE0IVmGhueW7bsfLMUbjzbaCnDEii8J4nvxo+nR4WVo5SWmW6V/v/I66o77WW7ffDAQwX8xtcs3RJFfejBkDCBzhQQAcM1OVSg4uKO7tqIzbsnfUDcPNR9DP96df9zgOcCOsdK45fbhiPazUCSqNygXvQGSMzJ308DJGZaMtU1VKutsKJoveqeseWSuv378aqjrinFTaaWavslKmSh+z/0E7Ra4HokjnNpy+vMvtL9yeC+Mr4apdhZN+3eVgUTknya7eGEBp6c57P/3pT+sDH/iAnnzyST3xxBMqikLf/d3frdFoVHdpAAAAAGqwQo/OYJkYp5ebRIQlljZjlVEgPy9VRbyNLYI8LfTJf/afNNyf6Bve9bD+wW/+M0nSn8u/TZ/+xS/q1d90Vm/4todrrhL/f/b+PFqS674PPL/3xh6558u31YICQECkTFAkSLZJSV4ISzSptgn3tNv29Lj7tGUf+xxJ9NgHPjMjjmXZ8IyatntGUs9YS483cizL5lhs2xovbME0PWrZ4iKJJVpcRJAECUIs1PbeyyX2uPfOH/FeoQqo5S2ZGbl8P+c8FlH1KvNX8TIyI+J+4/cjOis/znDzfJ/vzUTAYgRZaKUIVcDf+xa8yR7ysAPIY4aKTDXUytQ92koIwPMgJhMYxznTQ3098qAh0PfKKRVXoxMsRCs/hMxT+MOryGBQBO0ZFrZgjIEcj4EkAXz/1vtrwwHecVHjb/9HF0IAb9hJ8YNf+03kSuJD3/Yd8ITEV/cEtthMk47BOB60MXBH16GlDeWxqzKdjCxzaMtdv9eOECsXrPrYxz52x39/6EMfwtbWFn79138dv+/3/b7XfH+WZciy7NZ/j0ZVQLMoChRFMdti6Zajbc1tPl/c7vPHbV4Pbvd6cLvXg9t9/rjN63GS7c1VLyJaOqXvIGn5aAxjxFy8Xwqu7+A9738b0kmOf/9zn8PrLjyE/+Lpd6M/aKNIS/zKP/o8WoMA516/UXepRPQg97hgLlTVkS7ureHd2UREMybKAsHe78CN9k8WqjqyIIudxrYhhKhaC8nTdRDaKwT+wlcS/I1HX55ydctBuz6Qp/CGVwGjUYQdoO7Q3ByIKAKiCPC8O0KraQl85abAn3lHgp+7dgV/5msvwrUMfuZ1T+Jff8GFJYHtJmCt/iaiKdGuDyuN4I6vI7V2YWy37pJoicjDMYB6HV83C3KsMSvDYTUmtN/v3/XPP/jBD+LZZ599ze9/4hOfQBiuWdBuATz33HN1l7CWuN3nj9u8Htzu9eB2rwe3+/xxm89XHMfH/l4mEmh58cLoWks6IZp7EbtBLBm/6WLzfAdvfOT3oT+o7rB3fBsXn9jE/ktjBquIlsE93nO9KEPW9JFyDCDRK1Z8gYnm48yhKoHD9+4FeD3aNszROMBTBKsKLfD//OoWfqn81/iH4VsALPkowFPSrg9TZPCG1wEARditt6AZE0kCMR4DjvOa180L+xKXzbfwl3/9K9h0HPylrdfjcryPZ775m/jYW96CR4IAv/J1C/7ZmqTRmlFeA3Y6hj++gbSzBSN5+ZSOR+gSZbhG3QRvt8LX5rTW+It/8S/iu7/7u/HEE0/c9Xs+8IEP4Jlnnrn136PRCBcvXsRTTz2FjQ1e65qXoijw3HPP4d3vfjecM3ZIpePjdp8/bvN6cLvXg9u9Htzu88dtXo+jTrPHwSsDtJTM4bm6WIC1AapH2vRRBA7cJEceenWXQ/eRTnLYjgXbs1CkJW58fYTHfvc5ZFEOr+FCKY0rX97Dw09u110qEZ2Bl+R4+fw2tHW6DiREK2eFF5dofoS6PVTVPXWXJ3Prf2omBOC6EHF84nGABsA/+Po2vq2ZANFsyqvFKd8rjONBAfBG1wEhV3csYFFUoSopAfuVS1iJUvjMaIRHvQ2MEws//tjj+MObA/zCf3LwvocG+Nk9g/devox//sa34ovXmvhv38pW+nQCAii9JpxkDEfayNub/FynBxKqgLEclO4a3miy4jc9/tAP/RB+67d+C7/yK79yz+/xPA+e99rrk47jcGGsBtzu9eB2nz9u83pwu9eD270e3O7zx20+XyfZ1gxWEdFS0raFSa+B3pV9BqsWXHSQ4tf+xfPVapgBHnvHLpo9Hx//u78JowyMAc69voeLTwzqLpWIjsHc5Xq5k+QofAdxrzn/gogW2QovMNHsCVXC3/sW3Mke8kb39KEqIRenYxUA4zhV8+ETLsJ+ZRzg0/stbPrV3/ngly7gBx+5iYthPptC58EYmFP+XIEqXKVh4A2vwQAoVy1cpRTkcFh1OPN9AFWg6h9cuYL/24sv4oLn4RNv7eKPb2/hSy9I/L0XgIf7Bm/YNPi9L78BN/RL+Ldf9PGHHlfwefWLTkoKlF4DbrwPYzkomr26K6IFJ4sMyvGhHb/uUuqxose973//+/Ev/+W/xC//8i/jwoULdZdDREREREQ14aUlWl4resJOx5e0Q7Svj2HlJZTLt7NFtXGhjff80Nte8/t/8AffWkM1RDQLQZRhf6eDPHDrLoVocQjBUYB0elrB3/8WvFuhqjOMvBMSRkgIrRcjWnX7OED7+Mfwj7cS/N23PY9IKfzW19r4kUdfQsNa/lGA5ozntdrxAZPCG14DhEDpt6ZUWc2MgRyNgCwDwhAAoIzBd/7ar8GTEj/x+ON432AAKQTe9ajCux5Vd/z1P/omhT+KXZRa4QNf/Sp+MLiAR4I17CJDZ2IsC8rx4U1uwNj26uxfNBNS5cjWtbvZCh7zGmPw5//8n8c/+2f/DP/+3/97PPLII3WXRERERERENWISgZbT0UWK1TtvpxMoAhdJO0Bjf4KYwSoiotm6dbH8zoUCWVYLmZMNLjQREU2FMfAOrsEb30ARdM4WqgIAIWAsC7Iop1PfWUlZjQNMU5gTBKuONCwL/9/HH59BYXUQgDh7OEy7PmSWwB3egJY29LKPoTKmGv8Xx0hcF//gpZcgAPzAhQv4J088gW8LQ8hjBhesw+977+XL+Nhb3sJwFZ2YsV1opeCObkBbNrTD1xC9llAlICwor1F3KfU5QwfGRfRDP/RD+Pmf/3n8i3/xL9BqtfDyyy8DADqdDgJ+lhARERERrZ3VOuOhtXE4UQyCyaq1F3dDCAMIresuhYhoLfmTFHEnQNLixWWiO6xjtwKaCneyB390DYXfgrGmc/OAthzALM7xsnHdKrB7ig4Xmdb4v37rW8iW/fi/OqE9c8eqI9oLIHUJb3Qdoiym8ph1EWmKdDTCT9+4gTd++tP48JUrtwJRb2g0jh2qAgAhBP7WY4/h6cEA7718GS8kyazKphV2a/8a3oBQy71/0WxYRYrSDaE8nhOtip/5mZ/BcDjEu971Luzu7t76+shHPlJ3aUREREREVAO2eKGlZKSAkRyvQkDa8JGHHtw4R9b06y6HiGh1GQMjJbTUd/yek5e48fAWjMW8PhHRWdnJGP7BFWjbhbGnN17VSAdigYJVsO2qW9UJxwECQGYMfuzKFfzvt7fhzai8uTAagIA5a0ey25R+E3Y6gje+gay7DSOW77M5TVPYwyGua41/fP06fvLxx/GHD0f+ndZRuCq0LOwVBbtW0amUXhNOMoITHSBvD/DqLq603qTKkXa3gSV8352aFbupwPCaMxERERER3WaNz/ZomRkpYYSA1DzJXXfGkhj3m7DzkkE7IqIZEhrVOKnbrpe7cY4sdBF1w9rqIlpoK7bARLMl8xT+/rcAbaC86b6vGsuGWKRD5aNxgOWCjCesgTC6ClVNcxFeVOEPOxnBGd8ElqjDc6oUfuYrX8ETH/84PnrtGh5qtfC/vu1teHpz80yhqiNCCDz76KN4W7uNf3btGjtX0ckJoHRDuNEB7DSquxpaIKIsoC0H5TqPAQR43EtERERERCuNwSpaSuxYRbdLWz5Kz4adre/CDBHRrAljqovlty0A+1GK0aCN0nNqrIxoQUnJY1U6NqEKBAdXYOUJyqA19cc3tl2NnPJxSqEAAMqcSURBVFugrlXGdavPlWUf6XdKUpXQ0oaxptexqnpgCeWGcKM9OPFwuo89I//Lyy/jiV/6Jfy/v/51/OSlS/gT58/P9Pk+NRpxLCCdSvVeKuFM9jgSkG6x8gSl14B21riL+tG5IhERERER0YpisIqWlrIkO1YRAKD0HETdBrwkr7sUIqKVJYyBEQLaqi6Y21kB5ViI+s2aKyNaUFJygYmOR2v4B1fhRAcogs5MXjfacqClA6HU1B/71G4fB3gCjhD4UxsbcJZ9/zIKxpnNMENj21C2B3d0E9aCdtZJlMLPfeMb0MbgQhjiJ554Ar/6pjfh6a0tSDnbS1UffN3r8PRgwHAVnYryQth5Aic6wDJ1haMZMQZClyjC7nof9wkBTDsoTEREREREtEAYrKKlZWyLXQDolrjbgLYlrJxdq4iIZuEoWGUOFwzCcYrxoI20ucZ3ZhPdz9Hi0pp246Hj88Y34I6vowjaVSBvBoy0YSwbUi/QsbIQ1TjAEwarAinxMw8/jGDG4ZtZEwbQlj2zxz8Kbbnj6xBlNrPnOalEKfz0V7+KN/3SL+GnvvpVXE1TvLHVwh9pNiG1BpzZd8EUQuBvPfYYnh4M8L/s7c38+WjFcCQg3UaWObTtQflrPgbQmJkdwxARERERES2C2V3FI5qxWx2reEMUAchDD3GngebNMSKXb21ERFOnXwlWWXkJLYDxZnu978wmuh8pq3CV1lxoonuykzG84VUoN4SZYcgGQkC5PqxosbrzGNeFiOMT7SeJ1njmxRfx4w89tLzhKm1ghJxpsAo47KyTjuGNbyLt7twxzrcuf/ozn8HX4xg/8eY34w/t7kIKUb0GkgTw5xfWPgpXCSHwtSSBAPBIEMzt+Wm5GduGKauRgMrxYCyOxV5XVp4gb/ahbbfuUurFjlVERERERLTi6r+qRnRK2pLsWEV3mPQaMFJAFgs04oSIaEUIoLpgLgWCUYLJRgtxmwuQRPdkWdU+w45VdA9ClfCGVyGMgXZmHyjRjl+dPy3SOZRlwTgOUB6/k1ZhDD508yaKRfp3nJDUJYxlzT6MIYDSa8BJx3Di4Wyf6x6OOlR9/2c+AwD4fzz5JP7DU0/hfefOQQoBFAXEZALY9tzD2uLw+T5y9SrHAtKJcSQgHX2mlmG77krqZwyDVUREREREtNIYrKKlpezDjlVEh7KGh6gTwo8XZ9QFEdGqELq6WC6VhgAw2uqwWxXR/dzesYroLtzxddjJCEXQmsvzHXVVEWrBxgF6HsSa7SdClVBOOJ9udlJC2S6cyT5kkc7++Q4VWt8a+fcPv/EN/Jfnz8MYg03PqwJVAGAM5GQCKDWXEYD38sOXLuHpwYDhKjoZjgRce7JIoV0fpRfWXUr9hGCHViIiIiIiWmk846GlZWxrse62pvoJgajXrC7Ql+xaRUQ0TcIYaCkRjGJEvQbiDhcQiO6LHavoPuxkDG90A8przm08m7FdKMeDVPlcnu+4jG3DSFmFa9aBAWA0tOPN7Sm140PqEu5kDzCzfU9KlcK1LIMUAr968yZ+4s1vvtWhSrwqkC3StBoB6M1vW9zN0VjApwcD/PUXXqi1FlouxrZhRDUSUOg1eQ+jW6wiRR50OAry6NosO1YREREREdEKY7CKlpaWAoK5KnqVtOkjaYfwInatIiKaJnE46kKWGsPtDoxktyqi+2LHKrqHO0cAzjdQovwmxKIFmGwbcF2IY44D9ITAX97dhbekXROFLmGkA23PdyF+1iMBM1Xin3z2s3jvf/yP+B+//GVYQuAf/u7f/crIv1fTGiKKqvfKBfhZHoWrfub1r0ehNX4n4/kkHY/yAth5DDud1F0KzZFQJSAkynA+XScXmtbVezk7VhERERER0QrjGQ8tLSMEmKui15ACk34TUhsIxYVMIqKpMQZWliHphIi7jbqrIVp87FhF9zDvEYC3U7YHI63FGgcIwBx1LDrG/uJJiR85dw7eki7gyrKAdlwYy57zE89uJOAXD67iv/mP/xS/+PnP40de/3r8X5544oF/R6QpRJ7X3q3qdkII+JaFj1y7hj/wG7/BsYB0PEJA2R7saH/h3ltpdqw8Rhm0oDgG8JVgFTtWERERERHRClvOK5FEALQl2bGK7ipt+UiaPvxougsGRETrzCoVhNY42OlCWzyEJHogdqyiu6hjBODttONBuQFksWDdeBwHxraBY3StipTC+55/HtGidd46DmMAo6HcehbipzkSMFUFfu6rn8HLyQiPtPr4C2/4Lvzcn/yT+N6trbt3qLqdUhBRVP3MF9Cf3N7G04MB3nv5MsNVdCza8WEVKexkXHcpNA/GQOoSeaNby2f5wmHHKiIiIiIiWgM846GlpW0Lpv6JAbSAjJSYbLYhlV68USdEREvKizJkvR4m/WbdpRAtByEYrKI71DkC8JUiBMqgDaFVFfJZFEIAvg+h9QPrUgD+7WiEZTzKl2UBbbtQrl9bDaXXgJOM4cSjU/39o0DVe5/7WfzP3/gc9rMYvuXg92xeenCg6pBIEqAoAGe+4xCP62gs4NODAf7rz38eepH2FVpMogquOvEBRFnUXQ3NmJUnKJ0Apc/zIgDsWEVERERERGthMW8PJDoGZUsYyfEqdHdxK0DUaWDn2gTgtS4iojMRSkMojWhnB8aKAPCzl+hYHAeI47qroAXhxEM4yQh5o1drHaUXQjkeZJFB1xjweTXjONWirFLAgnYyOiuhCpSNXr1dPY5GAsYHKP0GjHW8cJMxBkIIfOgrn8Yv/c6X8Fe+4z14avfxY4epbilLiDhe+J/xUbjqpSyDFAKJUggYGqD70LYPJxnBTocomoO6y6EZkkWGtLdz7PfPlceOVUREREREtAZ4xkNLS9sWtCUh2ZGI7kYKTAYtCACy4GuEiOgsgnGCrOkj6/frLoVouTgObwIgAIAoC7ij61COX//YIGmh9NuQZV5vHa9mWYDnQRxjHOAyEqoEhAXlBnWXcji2LIOdPLhrVaZK/KOv/hr+yL/7uxgXKb7/sXfgF5760/iec9928lAVDrtVleXCdqu6nRACF30fnxmN8NbPfIZjAen+BFC6PtxoBFEu2LhVmhpR5jCWjTLs1F3K4mDHKiIiIiIiWgMMVtHSUpaElpKj3uie0qaPtNOBH/ECOBHRaclSAQYY95vQS7AISrRQbJvBKgIAuNE+rDyGcsO6SwEAKL8BI22IBQtXGdetxgLeZ7/xhcBPX7oE/xShnjrJIkfphTD2AnyWCqB0PDjR8L6vgX/ywm/gPc/9DD76jd/EX/j234+G7cGz7FMFqgAARVF1q1qy44m3t1r4wxsbeO/lywxX0X0Z24XQJZxoWHcpNCN2FqMIWlVQmirsWEVERERERGuAZzy0tLRtQdsWBBer6F6EQNbvQ0sJK1/NO9+JiGYtmKRImgHSdgiz4GN7iBYOO1YRqpFB7vgGtBtUoaEFoB0PRdiGlS9YSMS2q3DVfbpWuVLi+wcDuEu0gFt1q5Io/UbdpdxiHA9SF3DiOwMgqSrw5eE1AMC4yPBXvuM9Z+pQdTsZx0s56vFoLODTgwHee/kyRivaVY2mQzkBnGQEuWjvr3R2WgMwKBrdhfk8XwgMVhERERER0RrgGQ8tLSMFSsdixyq6rzIMEfWa8CO24iciOikrL6GlRNwLoWwJzfEORCfDjlUEwIn2YBUZlFP/CLjbFWEH2vYgiwU6ThYCxvOqm2eMueu3TJTCWz//eUyW6DxQ5hlKvwHjeHWXcodbAZAiRaoK/NxXP4P3Pvez+Mkv/P8AAH/2275zKoEqAEBRAEmydN2qjhyFq/6nN7wBbduGucfrk8jYNoTRcJJx3aXQlFl5AuWFKP1m3aUsFqWW9r2diIiIiIjouBisoqVWujbkEl1Qp3pMNppQjgU7LeouhYhoqfiTFJNeA4XnQFsWg1VEJ7VkXVlo+mSewBvvofTChetuYWwXRdCBlaf3DDHVwnGqDon36AqkAXwxTbEskUVZFoBlL+RCvLEdCK2QDK/h+577WfzP3/gc/sp3vAd/+53/1dSfS2RZFTRd4vdFIQTe1evhap7jez77WY4FpHtSjg87nSzcuFU6A2NglRnyRh+QPCe6gzEMVhERERER0cpjsIqWWuE77FhFD1QEHsb9Frw4W6xFIyKiBWanBZRjI9poQWoD7VgAg1VEJ8N9Zu2545sQqoB2/LpLuasybEG5HqwirbuUV0gJeF51nrfsx+4GEGWO0m/C2Iu16JyqEh966Qv4t+M9bJQZ/scn//Opjfx7Da0hkmSpQ1W323IcvK3VwnsvX2a4iu7K2A6kKmBnUd2l0JTIIoVyPJRBq+5SFg87VhERERER0RpgsIqWmnbs5b/YTnMRbTRRBC68mHeMEhE9kDHw4wzjjRbywIVUGoW3GouhRHNl81h1nVlpBDfaR+k16i7lnozlIG9sQJQloBfnhhXjeTCWVS3WLjGrSKFtD6W/OK+Bo0DVU5/6KH7hyvNwHRcA8LvdEHJGTdVEllWjAFdk4f1oLODTgwHee/kyvpkuUDCRFoayXNjJGMIsS389uh8rT5E3e9ALNtJ1IZQl4C9mgJyIiIiIiGhauEJGS03ZEos1UIMWVenaGG11MPjGDeS+A2MxV0pEdC9+lCFreJgMqrFFUmmU7moshhLNlevWXQHVyIkPILSCsRf7dVAGLRR5DCceoQwXpBOHZVVdq+K4Ggt4m1BK/OJjjyGUi308L1QJGIMi7MBY9V96ybSCJy38+vAafuHK83j28XfiewcPQQoBpRTsbAKZp9BuMN0nNqbqVrVgozDP6ihc9XgYor8igTGaLu16sNMJZBZDLeAoUDo+WWQwtoMi7NVdymIyhsEqIiIiIiJaeYt9JZLoATTHq9AJRJ0QcTdEMOa4BiKiexFKwyoURpttKKdaCJZGo3TrXxQmWjqOUwVEyrLuSmjOZJHBiYZQ0w6pzIIQKBo9aNuBzBfnONl4HoyUr+laZQuBd3c6sBc5qGOq10DpN6cfVDqhow5V7/rkL+Czw2v4rt4ufvHtT+MPbl66NfLPWBZgDOx0Mv0CigLIspUMmgoh8OfOn4crBP7Cl7/MsYB0JyEAIWCnYwDsXrnMrDxG3uhBuwwP3RMDpkREREREtOIYrKKlphwLWkoIxdbq9GDGkhhttgEpYeVc4CQiuptwnCDuhog74Su/aarPXCI6IcepxgEyWLV27HQMWVZj4JaBdjzkzQ3Isqw6LS0C2wZ8H6Io7vjtkVLY+uxnMVrgMYFWfjgCMGihzhbLv3j1a7dG/v21x9+JN7c3IYS4Fai6nbI92MkEQhV3eaTTE2ladTNZ8A5jZ2ELAVcIvPfyZYar6A7K9mGnMWSR1V0KnZIocxhpo2h06y5lsTFYRUREREREK24uV7Z+6qd+Cg8//DB838c73vEOfPrTn57H09IaKF0bxnFgFYt7UZ0WS9rwMO434U8OL/ATEdEtdlZAWRZGm+2qSwhQvVcKwY5VtLAW+lzDcaovBqvWi1ZwJ3tVqGqRuyq9Shm0kDc6sNMIMItx48q9ulaN9WLUdzeyrIJJRditZQRgqkp84uZLAIC27eKvPf5O/OLbn8Z7butQdTfGdiFVBjuLp1eMUlWwasUX3I/GAj49GDBcRXcwtg1hFKwsqrsUOiU7i1A0OlBe+OBvXkdKVcHZFX+fJyIiIiIimnmw6iMf+QieeeYZ/NW/+lfxG7/xG3jzm9+M97znPbh27dqsn5rWQOlYULYNi4tVdFxCYDxooQhceHFedzVERIvDGPhRhvFGC1njlTEXVqmgHIvBKlpIC3+uwY5Va8lOI1hZDOUu2SKsECiaGyiCFuxkshg3Idg24Lqv6Vq1qIRSEGWBotGB9uY7Mupo5N9Tn/oofuKF30CmSrxr48IDA1W3CMBYLux4NLWfvcjzahSgvfrHEEfhqv/dzg7GC9xNjeZP2w7sZAyheSywbIQqACGRN3p1l7K4yvKVGwmIiIiIiIhW2Myvbv34j/84/uyf/bP4/u//fgDAz/7sz+Jf/at/hb//9/8+fviHf/iO782yDFn2Snvs0WgEACiKAsWSXEidpaNtIM3qttA/KSkklO/DLjQkJ1tCGHHrVym4Pe61PbTnYbLZxcaL11EG3itdWVacdbgNopsLsthcs+jmNeBcB5aQfP8AgMP9BXz/eMWabRMvSpGHAeJB+459wikMtG3D2C5Q8DjkyNF24DFqpa7tsBTnGpYFxPHCh6vKo/qEgZHL02VppoS59etJtomdHMBIAWMv3/ulkTayzgDClJB5DOU3XvnDw21wM03nWpPUGl6WQSsFI+Wt0MrNJEFu1TemdpjnCABAiuqQQRtYZYKi0UUx5xGAxhj88c/+G2hoPPtt78T3DB6CFAInjUeVngcnjSHLGMprPPgv3O7w9XE1jo+KQjAcQioFtQghvTn5c1tbAIB/9PLL+N07O7DTcc0VLQgp0EBYBfjqrmXOlOPDSceQRVKNBz1yys+YlbWA28NOYuTNDsqgMf+xrofbo1zw40fcfkwww+NpnnMREREREVHdZhqsyvMcv/7rv44PfOADt35PSonv/d7vxa/+6q++5vs/+MEP4tlnn33N73/iE59AGC7Z3b4z9Kbxm+ouYaGU4e/g0W9eQOoM6i5lYTwWPVZ3CQvlbttD2ApN9yXsXJsg73RqqKoGh9dw336uAyC777euhXPVz/13td4IcFrHLRfTi3WXsHDWYZuIsoQ7mWBy4QJaWfeOtwh3NEIZBOgk3w6AxyGv9txzz9VdwkKI4ymOjjqmZTnXaH3tawhu3kTWW45uB9FjHFf0aifZJlaawlXXMNn1oJ3lPcDI4ibCa9dgxBDKrzovNVDtJ40nnsBco1XGQO/vw45jlGEI2xj8m8EAdqOBvMZRi8HRr+d9FDqDnSRIBiGyngcjZ3+snSmFX/jqVzHMc/zgE0/g//7Ud+F8owEpBAqcvjOvnmRQzetItk8WDGwdnmy03vEOxKj2BefKFZSeB1NjAK4uXxmN8DMf/zj+wfd8DxrNE4bUVli2vZ7noToqUDb3kGy99jJscnG+YdVFtyjbQ5QlVJRg/NAmilZ9x0af+uQna3vu47DjGBCiCl3P8KbFOs41iIiIiIiIbjfTYNWNGzeglML29vYdv7+9vY0vfelLr/n+D3zgA3jmmWdu/fdoNMLFixfx1FNPYWNjY5alLoWiKPDcc8/h3e9+Nxy2WAZQbZP/9ed/Ht8IvoFRc7/ucmonjMBj0WP4SuMrMGLd7gN9rQdtD89KsPn1ayjFDZT+GuxTRuBiehFfGH8eyui6q6mdJSR+V+uN+Kb/zVfujl1nh68Pbo/brNE2aexNMNltYu/cVRh5/Y4/a2ZjHGx2cLNV4k3jN/E45BCPy+501P1pnpbmXOPLXwa+9CXgwoXZPccUlGWJT33yk3jHO98Jew3Gdh3H0TZpfKXxShfDB/AOIgT7NvJme8bVzVoAkzrwh1ehLQPt+NiL99F4NMSVX/91tF13rtVkZYlGHKO0bWgAPWOQCQFRY7AqKgoMvv3bkbyUoC8slG4bkH2412a7/2SqxEeuPI+f/cbnsOH6+IuPvBXeyx4egwdMzv74UllwbuaQEwnteMf/i8IguZhi/PkxoA28ZAJ7PEbqr/Yx1L38t84O9AWDP/Wxj+Efv+ENeMif72jIRXMzTdF44glEX4vRD5cjaDxNshCw9zRE7MDIw/eIw30m+KZ/7M+YlbZg28OJhyi9LbjONtyXa+hAKQyix6LFPy67eRNoNoHv/M6ZPk0d5xpERERERES3W6gzM8/z4HmvvXDnOA4XrG7D7XEn7TiAMNBGATVeWF8ER6OqjDDQYHDmQdsjaXo4GLTQv7KP3JW3xlesqqPt0dpq8fUBVKPOElTvH9wer4y64/a4ZV22iRtnyHwLB9stKAng1f9WrZCFDrSofp/HIXfi9qgswzao7Vyj0ajGAS7yothtbNuGsyS1zo0REMf4GBBawR3vQ1vesb5/0Sm/jVwbeMNrECYFdBWQeaTTwW5jzh14jIEYjyHyHEPbxvbly7j6lregXWMnpBtJgtwYuFkC3RygDPuAtGeWxU5VCQ2DTCv862sv4NnH34nvPRz5N83ZakbasMsYdhKjsI4frDoa3bXV2oLQgF8qWI0NNPz17db0w0/swhkO8fkswzt4s2DV6U6bVb9f4a6M5cJOR7DSDMqvPmNvjbs75mfMqluk7SFUCaEM8mYfwsha5lcebY+FPy4zBmi1gBmfCyzDuQYREREREa22md5yMxgMYFkWrl69esfvX716FTs7O7N8aloj2nWhbAuy5JUoOrnJoIW4HSAcsa04Ea0fWSo4WYHRdheFf+/uI6W7wBfzaW0tzbkGF4LWhpUnsIoMylmdzjRF2EHW2YJUJeyixhFeQsAcdfzRC3LeZ0w1ntD2kDc3YGa08J2qEh966Qt46lMfxUdf/gp6jo+PPPmf4w9uXqpCVTOgLQd2NsFp0wSiLGDlKbQ9385mi0YIgR956CH86XPn8OU4xgvJ8o4HpTMS1f/Igq+BZWBnEYqwgzJo1V3K4itLIAge/H1ERERERERLbqbBKtd18ba3vQ0f//jHb/2e1hof//jH8Z0zbhFM60M5DpQtYZWq7lJoCWnbwmi7C2NJ2GlRdzlERHMVjBJMek1E3fCufy60hhECymGwihbP0pxrMFi1Nqw0AowGZA0jg2aoCDtI29uQRsOOa7wZwXFgPA8iz+ur4YjWsIoCyvcRN9ozC1X9h/1v4alPfRS/cOV5PPv4O/Enz71hJs/zatp2IIscojzdtrbKFFIXMBbf/47802vX8N7LlxmuWmNVYPHwc4IWllAFAIO8tQGI1fo8nwljgLt0hCUiIiIiIlo1Mz9DfOaZZ/B3/s7fwYc//GF88YtfxA/8wA8giiJ8//d//6yfmtaEsW2Ujg2rYLCKTidt+hgO2vDj7NaIEyKiVefGGQrfwWi7A3OPEIBVKCjHYscqWlhLca7hONUowLKsuxKaJaNhJ0NoezUXF8uwjXFrAG1ZsNO0Wkidt8OuVabu8e9KAXmO0nWR9vvQcrqfkakq8fO/8yVkWuGS38Kzj78Tv/j2p2faoerVjGVD6OLUXcqsLIGBPOzSQwDwf750CU8PBgxXrTFtu7DKHLLO7n/0QHY6Qd7oofSbdZeyPHgTARERERERrYGZr5L9iT/xJ3D9+nX86I/+KF5++WW85S1vwcc+9jFsb2/P+qlpXQiBrOGhdSOtuxJaYpNBC36UIhzFiLuNusshIpqpoxGANx/avO8IQKtUULaF0rG4NkoLaSnONRwHsO0qWDWjrjZUPytPYRcZSvfuHQBXQeEFSLa7cL/xDSBJAN+ff3cux0ErDHHtDW9As47OYEUBaA3TaKDQGsaypvbQqSrxT658Gf/Ti/8JG46P39M/j4eCFi7UNIrKSBsyjYCgfaK/J7SClcdQNhfabyeEwN967DEAwAe//nX8v77922uuiOZOSkCbakymy9Fpi0iUOYy0D7tV8ezn2BisIiIiIiKiNTCXK/vvf//78f73v38eT0Vrqgg8SMWOVXR6RyMBveQa7LRA6fPCEBGtrmCUYNK/9wjAI1ahkLZDGEtCsKEfLaiFP9dw3VeCVbSyrDyG0CWMtdrhOeV5yFotGCEg4rh6bc95QVX5Pr45GuH1ZQlrXs+tNURRwEgJ02xWobIomupT/Ojzn8QXxjfx7OPvxPcOHppbd6p70bYLK08g1MlG+skihSxzdnu5i6NwVW4MMq1xPc9xwffrLovmyFg27GyCotkFW7otHjuLkLU3oTzebHcsSlWBQQariIiIiIhoDXBYPK2Ewne44EtndvtIQKF13eUQEc2EFz14BOARu1BIWlzwIzoT22awatUZAycZQ8v1WFg0lgXT6cC024AxEEkCzPHYORICb3v+ecR5Pp+RhGUJ5DmM41T/5ikFYVJV4kMvfQHf/7nnoI3Bj7zuP5v7yL/7MZYDqQtYJxxbZuWHnaQX4N+wiIQQ8KTEP756Fd/z2c9yLOCa0bYDWeQQZV53KfQqskhhLAd5s193KcvjqBsrg1VERERERLQGGKyilVB4DpRtQRbsWkVnM9lsI+o2EA55gZuIVo9VlLCLEsPt7n1HAN5izPG+j4juTcoqiMFg1cqSZQ4ri6Ecr+5S5kcImGYTut+H9n0gy6oxeXNkLKvqljErWkNkWTX6r9msQlVTGOepjMaHXvoCnvrUR/ELV57H/3b32yAAtB1vIQJVtwgAQkLmJzgvMgZWGq1NyPAs/rudHTw9GOC9ly8zXLVGjGVD6BIWg1WLxRjYWYys1eeYxpM4Cla5PF8kIiIiIqLVt9pzCmhtFL6DwrVh5yVyx6q7HFpi2pI42OnCSXN4UYqswU4tRLQitEEwTjHc6iDqPXi8hSwVtCVRcDQq0dk1m8CNG3VXQTNi5XE1+mwdRwc5DkyvB0QRRBxDJAmM40wlgPRAvl89n2VNtzuSMVVITGsY14VpNKby70lVib0iw64X4kuTffy1x9+Jdy/AyL/7UZYDK4sgzAaMePB9ebIsIVV5otGB6+poLCAA/Def/zx+5W1vg1jg1wJNkZAQZQagVXcldMgqEijHR9Fgt6oTKYoqVMVgFRERERERrQF2rKKVoG0LeejBztkJgM6uCFwc7PRgFQoWX1NEtCIaowRxO8Bwq3OsBWg7L1F6DgqPi6NEZ9ZszrazDtXKzuIqdLKuoYjbu1cdvtZFksz0Nd+yrCr05DjT6wZ3FKjKMsCyYNrtqXSpOhr599SnPoqf/sZvQgiBv/GG78Z7FmTk3/0Y24VV5hDHHAcoyxJSlzAW7+E7jqNw1UeeeAJCCET8nFgLRlqws7TuMuiIMZB5gqy1Ab1OnSenIcuAVmt9j3+IiIiIiGitMFhFKyNp+bBLXoik6Yi7IUabbQTjFNCm7nKIiM7EjTOUtsTBTg/6mJ0d7bxEHnpQ7ARJdHY+O2CuLKNhZRG0zW4NsG2YdrsKWIUhUBRVwKosq9DSlLRtG1d/7+9F2/OAIIBQ6myPrzWQ59WXlDCtFkynA3jemReLX4iHt0b+Pfv4O/HXv+07z/R4cycEBAwsdbwxj/JoHCTX2I9NCIELvo9PDod426c/zbGAa0BbFoQqIDRv4loEdhZBeQ0UjV7dpSyfogDa7bqrICIiIiIimgsGq2hlFIELMcUL9rTmhMBoq4O4E6Axiuuuhojo1GSh4GQlhrs95I3j34VtFwpJi2EQoqnwPEBKdq1aQbIsIMscmh16XuG6MJ1OFbBqNKrgUppWnS20PvPDl1rjub09lEej+lwXIs9P/kBKQWRZtTBsWTDNZtWhyvfPFKjKVIkPv/RFPB8d4KLfwn//+u/CL779afzBJehQdTcG8tgdq6wsg2Gq6lTe0W7jfYMB3nv5MsNVK85IB1KXEOXxAos0Q1pBqAJZZwvGZpfeEzOGNw8QEREREdHaYLCKVkbhOVC2BVlwwYqmQ9sWDnZ7KB0Lbny8xQQiooViDMJxgtGghUm3ceK/W/jswEI0Fb5fhatOE/6ghSbLHEKVMBYXZO8gBOB5VcBqY6PqAGXbQJZVXazy/NQhq1hr/JHPfQ6x1lWHqSCo/uBBwUVjqu/JsiropRS071cj/zqdaj+Vp79EchSoetenPop/euXLiFQBW0o8tXFxKQNVR7Rlw8pTAA+4ickYyCxjyPCUjsYCPn0YrppMa8QlLR4pAKMhFX/GdXOSMYqwiyLs1F3K8jGm+qxnsIqIiIiIiNYEr3jRyih8B4VrV6OLOLaIpiQPPRzs9DB48QaUY0E5fNskouURDmMkLR+j7U61iHNMslTQlkThMyhANBW+DzhOFeg4CoHQSpBlXuVNljg4M3O2DWPbVQCqKCDyHCJNgTyHMAZGyirQZFmnCzY5DkwQQMRx9VhHPwtjqvCW1hBaV7EgKWFcF3DdKuhln/3YXh92Tf7IlefxT698Gc8+/k587+ChpQ5T3c5Iuxpb9oAAoVQlLFMCFhfZT+soXPVHNjfRtG0YYyBW5HVEryYhiwy8LFsfWWQwloWsswkI3nd8YkVRfYYyWEVERERERGuCZ460MrRtIQ892Dnv+qPpinoNjDbbCEYpxBTGlxARzYMbZ1XnvZ3eiUOhdl6i9BwUHoNVRFMhJdBoVItQtFKsIj1Tl6O1ImXVxarVgh4MoDc2oDudKugEVF2s4rjqaJVl1X8XBVCWVUDKmFe+gDuCU8a2q+BUkkBkWTXiL8+rDlVSVp2pWq2qM9XRuL8zhqpSrfFzv/3b+C//08dxLYvxX597/VKP/LsXY9nV2LIHdNcRqoQoS2jJoMhZCCHwe7pdXMky/P7f+A2OBVxRRlrV5wfVwxjYWYSstQHlnbCrL1XyvOrG6h1/1DwREREREdEy4xUvWilJy0fr5rjuMmjVCIHhdgd2XiI8iBD1GuxKQEQLzc4K2HmJmxcHyJonv4vYzkuk7RCKHSCJpqfTAV5+ue4qaJqMhpVF0BwDeHJCAK5bhaoaDRitgbKEUAqmLG/9/6PgFG4biybLEt8eBJB5XnW5EqIKbR12rdKeV3WIO+qAZU3/s+zvf+tb+OsvvIBeo4G/ePGNGLjBSoWp7iAAAQNLFdC4d8c9qYrqCpPAA6cG0oPtuC7e0W7jvZcv42NveQseYbfDlaItq+oEx5GPtbCyCKUXIm8O6i5leWUZEIZVB0giIiIiIqI1wGAVrZQicCEMr+LS9Gnbwv5uD3ZRIhwliDth3SUREd2VLBX8KMPebq8Kgp6CXSgkLY51IJqqIKgCIrQyZFlAljmUzW4NZyZlFbS67bcMcEdXqqNOVaEx+MzWFiAE9NHflRIwBvLgACLLYGYwmihRCr8VRfjP2m2UxuDZS5fwe97+diRfjVc3VHXIQEIUGe6Tq6r+3Fnt7TBPR2MBAeC9ly/j408+iQscubUyjHRgFREkg1XzpxWkKhD3zsHYDEafWlEArVbdVRAREREREc0NZxbQSil8F6VjwSp4cYqmr/Qd7J/rQ1sSbpzVXQ4R0Wtpg2CUYLzRwnizferuesIY5AHvPiaaKt9nx8sVI8scQpUw7Fg1O0JUHaccp+qK4brIHQcfunIFuW1Xv2fbtzpT6WYTRohqBOCUJErhp196CW/81Kfwo1/7Gowx+HPnz+MP9norH6g6oi0bVp7ifq2orCKFnkF3sHV2FK76P166hIHD95mVIgWEMQxW1cBJxijCLoqwU3cpy43BKiIiIiIiWjMMVtFKyQMXhe/CSYu6S6EVlTb9qnNVXsLO+DojosXSGMVIWgEOdrsw1ukO8+y8ROHayEN2YCGaKt+vwiEFjx9WhVQFBMDA3JylSuH9n/0s0ruFp1wXJgwh8vxWh6uzPtdbPv1pfPjKFfzk44/jX735zRBr+PM20q7Glql7hECMgdAKhsGqqRNC4M+cOwcpBH7wt38bLyRJ3SXRFAl2spwrWWQwloWsvVkFcun0jKmObYmIiIiIiNYEzyJppRgpEHVCBqtopqJeAwfbXfhRBllO7254IqKz8McJCs/Bwfk+lHP6ac9OmqMIXBQeOyMQTZXnVcGqPK+7EpoSURYwHEO+WISAaTRgbPvUIcajDlX/n6tX4VsWPvLEE/jVt78dT29urk2HqlczUkIYDZi7h0CEVoAxVbcwmglHCDSkxHsvX2a4aoUwWDVHxsDOImStDSj/dOPS6ZDWVTDN4404RERERES0PhisopWTNX0ILnDQLAmB8WYb440WglECaL7eiKheTpJDGGB/t3fmEX5OrhB1GjCSi6NEU+V51ReDVStD6hJGskPPwrFtmGYTKMtq8feYbh/59+ErV9A7HL32llZrbQNVt4gqWHXPEMjRn7EDzMwcjQV8ejBguGpFGCEg2cVybux0jNJvIG8O6i5l+eV5dUzLjlVERERERLRGTt/OgGhB5aEH5dqwivJMHTuI7sdYEge7XVh5iXAYI+6GHANDRLWw8hJuWmDvfB9JJzzbgxkDoTWyJu8+Jpo6IYBmE3j55boroSmRZQ4wWDV3lhD4nq0tWPc59jZBAGQZZJJU//8+UqXgSokvxTE+fOUKfuLxx/G+wYBhqtsJQOCwM9Xd/lgrCKNhJM+/Z+koXNW2bSTsdLT0jJCQZQn+JGdPlDmE0Ug72zA2u/KeWZ5XXVjZsYqIiIiIiNYIbyeklZMfji/iOECaNeXY2D/fRxG6CEe8Y5iI5k+WCsEkxcF2B+ON1pkfzy4UCtdGHvIiOdFMtNtVFx1afsZAqAJG8JR63hq2jX/x3d+Nhn2fEI8QMM1mNRLwHl3ijjpU/a5PfQr/dm8PT7Za+OTb344/ssYj/x5E3HMUoIaA5o0mcyCEwF955BH8rkYDP/fyy+xctcSMlICqxmjSDBkDJ50ga22iDNp1V7Ma8hxoNID7fQ4TERERERGtGF4FppVjpEDUDRmsorkoAhd75/soXbsaC0hENCdCaYTDBMPNNkbbHWAKo/ucNEcRuMh93slNNBNBwAXUFSGMhlCqWhinucqUwo998YvI1N27J93iOPccCfjPr1+/NfLvJx9/HN/b7wOoQit0b/fsWHWPwBXN1ucmE44FXGoSUmsIHhfM1NEIwKy9yfDntGRZdbMAERERERHRGuFVYFpJWTPgxSmam6zhY+9cH0YKeFFadzlEtAaE1mgMY4w3mhju9qa2sO9kJaJOg4sORLPiedX+xePUpVeNPlMwgqMA5y3TGh/80peQHWMUmgkCmDCEyDKkSuGfXbsGANh2Xfzk44/jV9/+djzNDlXHYiAg1N077t0rcEWz9Tdf9zo8PRgwXLWkjJRVtzfuPzPDEYAzojUQnnEEPRERERER0ZJhz15aSXngQrk2rLyEcvkyp9lL2wH2zvUxeOkmnKTq+EJENBPGIBwmiLoNHJzrQVtTyskbAxiDrMkxgEQzE4ZVuCrLAN+vuxo6A6EVhNbsWLXohEASBPjwN76B/+Gll7DpuvgD/T6+s9Opu7KlY4S8Z7AKuoThfXtzJ4TA33rsMQgh8B+GQzwSBHWXRCdwFKyC1rztdRYORwCmnW2OAJwmY6qbBPh+Q0REREREa4aJE1pJeeAi9xw4WcFgFc1N3GtgT2n0f+cmjBQoPd4RSURTZgwaBzHSpof9cz0oZ3qfcXahULoO8pDBKqKZCYLqK0kYrFpyQqtqMVxwNXzR/Ref+QyGWYaffPhh/OGdHUiLXcZOw0gJqYq7/plUBQy7ftXiKFwFAF+IIgRSMmC1NCSgNYTRYB/L6eMIwBnJMsB1gUaj7kqIiIiIiIjmileBaSUZKRB3QzjZPe6oJZqRyUYTBztdeHEGK+frj4imKxzGyAMXe+c3ph7edNIceegg9xkKJZoZKYFuF0g5OnjZ3ercw8XauXOkxH936RKce3QLS5TCT3/1q/g/fe5zAIC///a34z/8gT+A950/DyvP51nqSjFCAEZXX68iVVm9v1GtPnrtGscCLpOjjw/DUYDTxhGAM5Sm1c0BHAVIRERERERrhq18aGVlzQDC7L3SpppoHoTAaLMDqTS6V4eIWwG0w7viiejsglGC0rWxd6E/k3GjTlZiuN3lZybRrHU6wNe+VncVdFaG/UXq8Jc/OcDl6x7etrWFwLp5x59lSuHvff3r+PEvfxmbnoe//IY3AADOHXbvMc0mTFEAeV5126CTEbIagWkMzKsPFQxgwOOHuv3Iww9jVJZ47+XL+Nhb3oItp4GfuNyDgoDWwPdciPD7zjF0tWgEP06miyMAZytNgXPnGKYlIiIiIqK1w2AVray04aF0bdhZiZLdN2iepMBwpwthgM7VIeI2w1VEdDbBKIGyJPYubCBrTH98mNBV94m0xdExRDMXhtViFMP/S85wNbwG/9Xrxvjei0N84Lcu4wPqDQgsC4lSyJSCKyU+9vLL+Ik3vxl/aHcX8tX7l+PANJsQBweAUgBHAp7S3V733BcWwe1jAf+HF1/E33796/F/eOsePGmQKoG/9pkB3rqVoWm/tusY1Yn7zzTZyQiF3+QIwFkpiqr7KhERERER0Zrh7SW0sorARdoK4CVZ3aXQGjJS4mCni+FWG+EogSzZ3p+ITscfJ9CWwN6FjZkFn5ykQB44SBveTB6fiG7TaACeB2Q8Rl12gh165u7JzQyOVPit+MsYFwV++qtfxZt+6Zfwd194AaFt4xe/+7vxvnPnXhuqOmSCACYMq/2PXcdOSNw//8HdYSEchat+8vHHkSuF63nVoao0D/j5Ea0AmSeAlMh6uxwBOAtHNwVwDCAREREREa0hdqyilTbpNdC8Maq7DFpTxpI42O0BADrXR1XnKpt3xhPR8fnjBEYchqras+sm5SY5hjsdKJeHhkQzFwTVV5oC/vQ70NF8CDCXU7d3/rt/h23fv9Wh6liEgGm1IMoSIk1hAnZqPBlzj3AOd4ZFIoSAKwT+3re+hb/5jW/gD8mnkKcd/NHHxuxWtYi4+0yFUCWsIkHSv4DSb9ZdzmrKsmqUbqNRdyVERERERERzx9UzWmlZ04e2LVhFCeXw5U7zdxSuEgBa10dIGK4iomO6Faq6uIGkPcO7go2B1Hq2z0FEr5CyGqHyzW9ylMoyM4Ydemr23z/xBP74xYv37E51T5YF3WpB7u9XI40cdjU5mVenQJgKWVR/encXz8cxvqvzTfz+ToGf+a0u3raZoeOym/IiEdyHzs4Y2MkIeWsDeXOj7mpW19FNAexYRUREREREa4ijAGmlZaGHrOHBTfK6S6E1ZiyJ/d0eRptthMMEsuCFbCK6v2CUwMg5hKoA2FmJ0nOQNtk5h2huOp0q0EHLS3CsVl0cKfHO5pP435w/f/JQ1RHPg2k2q/1Q8dj8ZF69zZkwXFRCCPyNxx7D05ub6LgKF5oFnh8ySLhoDPehM7PTMZTXQNbdqQLsNBtpWt0UwG1MRERERERriGdCtNKMFJj0m3Cysu5SaM0dda4abncQjhNYBV+TRHR3wSiGsiRuXhjMpYuUl2RImz6KwJ35cxHRoTCsFqU4S25pGVTZKpo/V1r4rvbb4Fln6wJrGg2YRgMiz7kvHpu4R46KO8MiGuYW0rL62cSlxPMHLnZCnocuHO4+ZyKLFACQ9nagbZ7PzFRRsNsqERERERGtLc5Go5WXtgJACAilYSxmCak+xpI42OkCADrXRkiagHL5NkxEh4xBOIxRujb2LmxUn19zYBUKk35zLs9FRIcaDcDzgCyrRqrQUjJsWTV3z/zKFr4ydJCWAn/035zDs++4iSf62ekeTAiYZhOmLCGyDIb74gNw/OWyuZlJ/MPf7gGmCoP+gQsRLjQYrKIVohXsLEbSP48yaNddzWozpkqUcwwgERERERGtKa7o08pLGx4y34Gb5Mg45ohqVnWu6kJLie7VA+Rao/B5VyXR2jMGjYMYeehi73wfWWM+n1dWUULbFj8fieYtCKqvNGWwamkJwDBlMm8//nuuTfcBbRu61YLc3686cTgck/Zgd3vdczTmInq0VeCvvv1G3WXQA/Gz5FSMgZOMkDX7yFobdVez+rIMcN3q5gAiIiIiIqI1xPY9tPK0bSHqN+GmRd2lEAEAjJQY7nSwd64HJy3hxqe8y56IVoLQGs39GGnTw42Lg7mFqgBUoeOGhyz05vacRIRqDGC3CyRJ3ZXQaXEO4OrwPJhmEyhLQOu6q1lcxsAIAXO3174ABJNVRDRHdjqBcgJk3W1Anm00LB3D0c0A7FhFRERERERrisEqWgtJO4DQumpdTbQIhMB4q4ObFzdgKQ1/ktZdERHVQCiNxkGMqBvi5sUBimC+HeycrMSk34SRDAgQzV2nU3XIoaVkpFU1GeH5xUowjQZMGEJkGX+m9yCMBoSsvl5FWzZDaUQndfhWYxgKOjGZpxAwSHs70A47f85FmlY3BUguJRARERER0Xri2RCthbTpo/Bddq2ihRP1m7hxcQAjgGAYcyGHaI3IQqFxEGPcb2LvQh+lN9/xQ0JpQAikrWCuz0tEh8KwWpziZ/9SqoJVEjAMk6wEIWBaLRjXrcJV9BpCa2jr7scqWjoQfC8jOqHqWNzcJaxI9yZUASuPkXS2UYadustZH0VRBauIiIiIiIjWFM/eaS2UnoOo14AXsSsQLZ6kE+LmQ5tQro3GMOECK9EasPIS4TjBcKuN/QsbUI499xq8KEPa8JA2eZc3US0aDcDzAIY4lpKRFoyUVVdcWg2WBd1uw1gW98u7EEbDWPc4XrEsCHBfIDoJoXX1fsMOQMenNZxkjKy9ibw9qLua9WFMNQKZYwCJiIiIiGiN8eyd1kbUa0BoAJqhFVo8adPHjYcGSEMXjYOYi3REK8xJcvhRhv2dHg7O9aCteg7HvDTHeNCq7fmJ1l4QVF9JUncldApGWjDCgjCq7lJomlwXpt2uFpE5qvMOAuaewSqOMiM6OWE0jBDcf47LGDjxAfJGF1l3565jSWlGsgxw3eqmACIiIiIiojXFs1BaG0krQB668BLefUyLKQ893HxogLgTorEfwyrKuksioinzxwnsQmHvfB/D7Q5MTXeoy0JBWRJxh3cdE9VGSmBjA4jjuiuhU2DHqtVlfB+m1aqCVYrBuTvcIwDCUWZEp2A0jJQwQtRdyVKwkxGU10Da27139zyajTiuQlXsWEVERERERGuMV79obSjXxnijCS/O6y6F6J5Kz8HNixsYbnfgT1I4CV+vRCtBGzT2I2jbwo1LA4w324CsbxHFjzOk7QBZg2MAiWrV6zG4sayEgLEcCMNg1SoyjQZMo1F16WB47pZ7BaiqjjuCI82JTkBoA2Pb1Yg1ui8riwEpkfbPQTs8f5m7OAa2tji2koiIiIiI1hrPiGitxN0GjBCQihfHaXFp28L+bg975zdgFwr+mCOCiJaZLBWaBxGSpo8blzaRtOu/09dJC4wHbZgaw11EBKDVqkarZOyouoy05QCawbiVJEQ1EjAIILKMgSEDGNx75F/VdYcd3IhOQhgFbbPz0oOIMocsc6S9cyj9Zt3lrCetgXa77iqIiIiIiIhqxWAVrZW0FSBreHAjLl7RgpMC4802bjw0gLYtNA4iLugQLSE7KxCOEow3Wrh5aYA8cOsuCXZWoPBsJK2g7lKIqNmsvjgOcClp22XHqlUmJXS7DeM4VbhqnRkNCHnvEcbCgpaS3b2ITsIYBqseRCs46Rhpdwt5o1d3NespTQHfr24GICIiIiIiWmMMVtFa0ZbEaNCCm3K8Gi2HpBNWHW4aPhr7EWTJrghEy8KLMrhpjr3dHvYu9KGcxVg48aIMSTtEFtYf8iJae1ICgwEQRXVXQqdgLLtq40Ory7arcJUQQL6+55BCa2gh7z8KUEgI3ghCdGwCuHdYkQBj4MZDZK0BsvYWRybWJY6BRqP6IiIiIiIiWmM8g6e1k3RCaNuCVZR1l0J0LHng4ualASYbLYSjBHZa1F0SEd2PMQiHMWAMbl4cYLTdWZxFE2NgFwqTQYuLE0SLottlV8olpW0HEIY/v1XnedVYQK2BYj2Pw4UuYSy7ChPe9RsEjLQ4CpDohIx19/Gaa88YOPEBiqCFtLsD3GMMKc1BHANbW9XNAERERERERGuMZ0W0drKGj6QVwOM4QFoiyrGxd76PvXM9OHmJYJRwEY9oAclCobkfIQtd3Hh4E1GvuVABJjctkAcuxwASLZJWC3BdYN1HjS0hbbswlgOheMPGqjNBANNqAWVZfa0ZqUpoN0DVY+futO1BKnbXJToWbWAgOArwHpxkBOWFSPoXYGx22a2NMVWouNOpuxIiIiIiIqLaMVhFa8dIgcmgBSdbvwvitNyMJTHa7uL6pU2Uno3mfszRgEQLxI0zBJMUw802blzaRNbw6y7pNbwoRdRroPCdukshoiPNZjVeJY7rroROSNsutOVAqvXsYrRWhIBpNKpwVVEAaxYgEkZDPyDcoF2vWoAnogcSuoS2bBgGq17DjkfQtoukfx7aXbzzqbWSZYDvVzcBEBERERERrTkGq2gtxe0AhedwpBotpbQd4PrDWxhvNBGOUjhJXndJROtNGzQOYghjcPOhAfbP9aGcxVskEVpDaCDqNeouhYhuJyUwGABRVHcldFJCQrkhBINV60EImGYTJgyrxeZ1CREZwAgJbd0/lH3rz9lUl+iBhCphbJsdq17FjiIYKZH0z0N5PGepXRS9cgMAERERERHRmmOwitZSHnqIeg0Ek6TuUohOpXRt7F3o4+b5HqxSIxjGHA1IVAMrL9Hcj5A0PVy/tIVJvwnIxRn9dzsvypC2PMSdsO5SiOjVut31CWmsGOUFEIY/u7UhBEy7DdNowF6TcJVQJYy0oO37B6uM5cDYNoRmZ2iiB5G6hHI4mvt2VhZDao20fx5lwA5JCyFJgM3NhRptT0REREREVBcGq2htjQctCAMItfoXw2k1GSkx3urgxqUB8sBFYz/iaECiOfKiFH6c4WCngxsPbSJveHWXdF9enGO02YG2rbpLIaJXa7UAz6u64NBSqcajGQbc14mUMK0WSt+HM5ms/M/+1sgy6/6ddbRlQzFYRXQ8BtD2Yp87zJMsUlhljmh7G0WjW3c5BFSfbcYAnU7dlRARERERES0EBqtobSWdEEnThz9J6y6F6EzSVoAblzYxGbQRjFN4UbryCzxEdZKlQmNvAiMEbjw0wMFuD9pZ7LCSk+YoPIdjAIkW1dGYlTiuuxI6IW27MJYDoRgmWSuWhazZRBmG8LJopY+9pSqh3QDAAzqWCAHteZDcF4juT5tqf+EYQACAKHNYWYKkt4us16u7HDqSZYDvV+F/IiIiIiIiYrCK1pe2JEY7XbhZsdIXwmk9KNfGzfN93Lg0gJESzf2Y3auIZsCLMgTjBJONFq4/soWo11yK0Qj+JMNko4k85J3xRAtJymrUCoNVS0fbLrTlQKqi7lJozoxlIRkMUNoe7HRSdzkzI4w+7Mz2YMp1IXhuTXRfQpfQ0oax7j9ecx0IVcJJJ0g728jag6U4r1obUVSF/hvre2POL//yL+N973sfzp07ByEE/vk//+d1l0RERERERDVisIrWWtQJkfsu3JQLIbQCpEDUa+Law1sYD1rsXkU0Ra90qQJuPLSJmxc2UPjHW2Ssm1QaMAaTDd5tTLTQul1AMRS9dISEckMGq9aU9jxErT605cBKo7rLmT5jYISEPmYARDuH38fTD6J7EqqEsR88XnPVCVXCToZI25vIutuA4CXqhZIkVeh/jcNuURThzW9+M37qp36q7lKIiIiIiGgBrPdZPK29InAx2Wiie2UfebAcC+RED1L6Dm6e7yNteuhcHaK5HyNu+4DNC5VEp+FGKaw8x2SjhdFWe2kCVUf8SYqkEyBuB3WXQkT302wCngekaTV6hZZG6Tfgjm/UXQbVpHQ8ZI0WvOFVWGkE5a9Odw9R5tCWDe0c79hH2za0tG4FR4jotaQukTntusuol1awkyHy1gBZb7fq3EmLw5jqq9Opu5Jafd/3fR++7/u+r+4yiIiIiIhoQfBKF6298UYL3ZcPIAsF7Vh1l0M0HYfdq7LAQ+f6CM2bY2hHAZK3jxMdlywVvP19oCtw46FNRN0GIJfsjl1j4KQFbjw0gLG4YEG00JrNatxKHDNYtWSUG8LYDkRZwNgc7bSOlBci62zBO7gGK4ugvNUIV1llgSLswMjjXTrSdjXeTKgShpebiO7OGBhnjcdzawU3HiJrDZD2zsFIXodbOFlWHYu22PH4JLIsQ5Zlt/57NBoBAIqiQFGws+m8HG1rbvP54nafP27zenC714PbvR7c7vPHbV6Pk2xvXumitZe2AsTtEMEkQdRr1l0O0VTd3r2qe3UMb/8All1CuwxYEN2TMfAnKZzCIO09gusPS2T+ch4yuUmOPHQRd1djgZdopUlZjVx5/nmg36+7GjoB7XhQTgArT1AyWLW2lNeowlXDq7CyGMoL6y7pbAwgjIbyTtDxUkqUXghvvAcNBkSJXk0oBSOtY3eBWzlHoapmvwpVrfk4xIU1mVShqgbPIU/igx/8IJ599tnX/P4nPvEJhOGSHxMsoeeee67uEtYSt/v8cZvXg9u9Htzu9eB2nz9u8/mK4/jY38szWFp7RgqMtjto7E8AbZavGwnRgxx2ryrCANuyCye9CidWSFoBO9gQvYqdFvDjDFnDw8H5HlzrHAo/AaDrLu1U/CjFzQsbKHwu9BMthY2NKlilNcfiLBMhUIQd2Mm47kqoZspvIMMW/OG1pQ9XCVVCWw6UfbKAlHIPg1gGAE+tie4gygLa9qDtNQxW3R6q6p9nqGqRJQnw2GOA4Jv4SXzgAx/AM888c+u/R6MRLl68iKeeegobGxs1VrZeiqLAc889h3e/+91wHF4HmRdu9/njNq8Ht3s9uN3rwe0+f9zm9TjqNHscPIslAhB1QuShBy/OkDV5Zy2tptJzEO3u4rq4gdb1IRoHMQrPRha6vGBGa0+WCsE4hbIt7O32EG00YRwXmCxvsMEqSmgpEfU5woFoaXQ6VXeAKOL4lSWj3KAKw2kFcKzRWlN+EykAb8nDVbLMoL3wxOMtteNBWw5EmVfHUkR0i9QFskYXa5c6vCNUxU5VC60sq+OZbrfuSpaO53nwvNeO+XQchwtjNeB2rwe3+/xxm9eD270e3O714HafP27z+TrJtl7e1UKiKVKujdFmG16c1V0K0WwJgawZ4PpDA9y4NICRAo39CFZe1l0ZUT2MgT9OEIxTTHoNXHt0C6OdLpSz/Bf7g3GKqNdA0mJgmGhp+D4wGFQjWGipKDeAcnxYBc8nqApXZZ1tGAhYWVR3OacijULpnXwMlLFsKDeEpfIZVEW0xLSpfnHX7NhcK7jxwW2dqrhAsNCOxgB2OnVXQkREREREtFAYrCI6NNloofQcOAkvANPqM5bEpN/EtUe3MdzuwE0LhMMYQi3nuDOi03DSHM29CMp1cP3hTdy8OEAevvYO02UklYZUGqOtDjvSES2bwQDIeTy6dKREEbYgSwarqKL8BrLuNgwsWOlyhauEUjDCgnJOd1ykvLAaaUpEt0iVQdku9Cn3q2UkVAknPkDWGnD837KYTIDtbcDmz2oymeDy5cu4fPkyAOCFF17A5cuX8eKLL9ZbGBERERER1WJmwaof+7Efw3d913chDEN02T6YlkDW8DAetBBMkrpLIZqb0rVxcK6P649sIWkFCEcJ/HFy625aolVk5WXVqa3U2DvXw9VHthB3G4BcnQCSP0oQd0NE3ZN3miBaBit9rtHtAmEIJDwmXTbqqLuPYaCEKsprIOtuwUgLVjoBzHIcY4uygLK9UwdAlOPBWDZEya64REekKqG8BoxYj3tchSphJ0PkrQHSHsf/LYWjQOzGRr11LIhf+7Vfw5NPPoknn3wSAPDMM8/gySefxI/+6I/WXBkREREREdVhZmfzeZ7jj/2xP4Yf+IEfmNVTEE3daKsD5diws6LuUojmKm36uHFpgOsPb6LwHTQPYnhRujSLP0THIQuFxn4ENysw2mzj6qPbGO10oR2r7tKmSmgNuygx3O7CWOuxcEPrZ6XPNRqNKlw1HtddCZ2QckNox4fkOEC6jfIa1VhAy4adRktxfC11jtJvADhd6NzYTrUvlOy+RwQAMAC0gXKDuiuZC1HmcJIRsvYWO1Utkziuwv0cAwgAeNe73gVjzGu+PvShD9VdGhERERER1WBmZ7bPPvssAPBkg5ZK2vQx3mihe3WIkefUXQ7RXBkpEXcbSFsBwmGM1vURmvsRct9BHrgcJ0ZLS5YKfpQBBpj0mxhvtJA3VncEhz9OkbQCTHrsVkWra6XPNYQAdnaAK1fqroROyFg28kYH/sFV6DVZPKfjUV6ItLMLb3QNTjJGETSBBe1aI8qyGgPohWd5FJR+A346gZpaZUTLS6gC2nLWYgygLFJYeYKks4Osuw3IxXyvo7sYj4ELFwDfr7sSIiIiIiKihbNQtwxlWYYse+Xu3tFoBAAoigJFwQ5CR9uA2+IVR9tCmuldqJkMuuheHcPJNZS7ULvIAwkjbv0qF/RC/Txxe9zp2NvDkoj7baStBhoHEzRvjtHaj5EHHorAnVO1c3C4PcDXR2UFt4fQGv4khdAacaeByUYLadMHhDhWy86lfA/RBl5SYv/iFmA5kFNsinH0WcvjkAqPy+60DNthqc41wrAKWMUx4M7ns7c8HNlVcnTXLbe2hTAwxxwXWzQ68MY3AFPAWCt2o8bhNrgaxzUXshiuxjFaACAFjnM6qnwfqb0Dd3gNdjpB6TcXMnBgqRSl34RyvZM1rBLm1q9GCpSuB21JwCgYuVrdQY/lcH+5maY1F7IYbqYpGkC1v6zh/TqWylD4TWjnts+FV+0zq8DKYlhljmTjHLL24GQB0hXcHmdyuD3melyWJFW3qkU7LsZynGsQEREREdFqW6jUyAc/+MFbd5/f7hOf+ATC8Cx3S66W5557ru4SFs6bxm+a4qMZdPxN+FduIt3YmOLjzs9j0WN1l7BQuD3udKLtEQByK4e3vw9/fx9yv0AZBFCetzIdrC6mF+suYaGswvYQSsGOY0ilkDcayDY34DWb6AkJRCd/vGV6D3EmExh5AaHz7dCj2Szo8zjkTtwelXgJghZLda6hFPpf/CJkUaBoteb61J/65Cfn+nzLIHrsBB8exsC0LTiTPeTt9uyKqkGrihGh9Y53YPH3+Nk72jNbb2whQXLsvxeXHQQ3CriTPRRhCGMtUOjIGOhJinini6J5ukBQcvHw72kN+IAsx1DB+nVwa6D6XGk88QQYrQKO+qg2Hg2RYc3GpR7uV8l2B3nrte8Vt/aZJWdHEZTWiLa3kfUCQJzuk+JEn7lrYF7HZTLL4GQZbioF9bnPzeU5T2IZzjWIiIiIiGi1nShY9cM//MP4m3/zb973e774xS/iDW94w6mK+cAHPoBnnnnm1n+PRiNcvHgRTz31FDaWNOAyTUVR4LnnnsO73/1uOM6K3f18Skfb5D+1/hO00FN73PCRCc4nLyH2rkM7C3Sh+wGEEXgsegxfaXwFRkyxTcmS4va405m2Rx9wUoVwP0Fz/zrstEDhu8s9ItAIXEwv4pv+N1+5O3adrcD2kKWCF2WQWiPpBZhstJC0cxjrKoCrJ368pXsPMQbtaIirj+7gYOMLU394aSTeNH4Tj0MO8bjsTkfdn86C5xqv8vrXA1/8InBxPoHXsizxqU9+Eu945zth2wt1/01tjrZJ4ysNnKTFihWdh3/tBVgNb2HHvZ2KMEguphh/fgzoJfhcnDUp0HpjC8E3/RO9PgAAOgTiG2hcP0DpuTDWYuxzMk8B2YFjb8DeO+Fr9/D1cfv2sOJN+PtXUYSrP/7sNQSQbWeIvhZzfwEAKdB4NIR31QPWbHPIIgPQhG31YO3f2bHq1fvMsrLjEYz0kfbPw77ZhX3zFA8iDKLHIh6HHJr7cdm1a0C3C7zjHQt5jWca5xpERERERERncaIzs7/0l/4S/tSf+lP3/Z5HH3301MV4ngfPe+0FN8dxuGB1G26P19JCTzVYFXUDTPohwmGESb85tcedtaNRVUYYaExveywrbo87nXV7ZL6NbLeDcT9EOIzR3Jsg3B+j8Bxk4fIFrG6NduPrA8Bybw9ZKPhxBhiDuB1i0m8ibfkwt8brnO7fs2zvIV6UIm04GA0aU/1MfDUeh9yJ26MyjW3Ac41X2doCvvKV6vN1jh1tbNuGwwXNOxmBk7ytKq8J7QSw0wTKazz4LyyJo9FMW62tE22PVWUkqk5VJ3x9VCzkzU0AEu5kD8r1Yez6R27bRY60swVAnvjfdGt0123bQ9kNaOlAFvlC/Pvm6Sg71A97y3rPwlQZgapTlVnaezhOzcozZM0NQDh37Fd322eWjjFwkhGU7SLtn0cZtE79bznaHjwOudPctkdZVmH+OY2gPqmFPFYnIiIiIqK1cqIzs83NTWxubs6qFqKFYaTAcLuD5t4EUmloa4XuNCc6o9JzMNrqIOo1EAwTtG6O0dyPULo2stC9LcxCNFtWXsKLMsCSiDohon4TacMH5HKF/KbFjzJce3QLpceLzrSceK7xKp0O0GwCk0n1/2lpGGkhb/QQ7v3OSgWraMqkRN4awAgL3uQGtDHQTn2dnURZQFsOyim+Zo3toAxacKN9lGsWrCICqhHlkBaUv4KfBUbDiYdQXoikf56fd8sszwHH4fEmERERERHRfczslpcXX3wRe3t7ePHFF6GUwuXLlwEAjz32GJrN5ekAROsr6jYQd0P4owRxjxeIiF5NOTYmgxbibohglKB5c4xwGENLiSz0lmqMJi0RY+AmBdy0QOlYmAxaiHoNZKG3dF3TpsmNMxSBi8lGq+5SiOZiLc41XLfqWvXCC1zoWkJl0Ia2r0MWWa1hGVpwQqBo9gAp4I5vwNIKygtrKcUqMhRhZ+qdpZTfBKIDQGuAN2DQmpFFitILoV2/7lKmSqgSTjJCEbSQ9C+s3L9v7UwmQKsFtNt1V0JERERERLSwZhas+tEf/VF8+MMfvvXfTz75JADgE5/4BN71rnfN6mmJpsZYEgfbXZzb/xa7VhHdh7YtRP0m4k6IYJygcRAhGKcQE43cd1D4zloHXmg6ZKngJjnsQiEPXOztdpG2A+QhF6thDIJxiuuXNpEH7AZB62FtzjU2NqpxgMbws3TJaNdHEbbhjvcYrKL7EwJFowdjOXBH12EnE5R+Y777vNYADEp/+sFU5fpQbgArT6H8ekJjRLUwgDAKZdACsDqf4bLIYGcRstYG0u7O2o35XElRBDz00FxHTxMRERERES2bmSVFPvShD8EY85qvlVrooJU36TcR9RoIh3HdpRAtPGNJxN0Grl/axMuPbuNguwthDJp7EfxxAqF03SXSsjEGdlog3I/gTzLkgYvrD2/i6uu2MdrpMlR1yIsz5KGL0RbvMKb1sTbnGt0uEIZAzGPRZVQ0eoAQEKqouxRaAqXfRNrdhXJ82MkI0Gpuz23nMZTfhHKDGTy6QBG2IXUJmBk8PNGCkkUKZXtQ7uoECq0shpUnSHo7SPrnGapaBUpVQd5+v+5KiIiIiIiIFtrMOlYRrQJjSRyc6yH8QgRZKI42IzoOIZA3POQND5NBE/44RWNvgmCcQADIfBelZ7PzBt2TULrqTpWXKF0b4802kk6INPQAydfNHYyBH2W4+sgWCnarIlo9YVh1rbp6FWhwNPWyKb0G8kYX7mSvClkRPYB2faS9Hbjjm3CiIZQXwNjOTJ9TKAUYIA87Mzs+V24I5XgQZQbDDm60JqwyR9regpErcB3JmCrwKS3Eg4u3gsO0AiYToNnk2GkiIiIiIqIHYLCK6AGibgOTQQvNvQnGG626yyFaKsqxEfWbiLoN+HGG4CBCOIrh72VQjkTuu1AuP4oIgDZw0wJOVsAIoAg83NzuIm35KL3ZLiguM3+cIm34GG/xQjjRytrZAV58keMAl5EQyFsbcOIRZJFxJCAdi7EcZO2tajTg5Ca0VtCuP7Pns4oERdCE8mbXVcdYNoqgBW98EyX3A1oDoiyhLRvlKoy/1BpOfADlNZD2z81kZCjVaDwGHnsMcHmTDhERERER0f1wNZvoAYwUONjtobE3udU9hYhOSAqkTR9p08c478CLUoQHMbwoQzDJULoWct+Btlfgbl46PmNgZyW8tACMQeE7GG53kLYCZKELI2c2sXglCK3hJTle/rZdfjYRrbJ+v+okEEXVr7RUlNdA3uzBG11jsIqOT0rkzT60ZcMb3YCVTqC8xtTDlaIsUY3q6wKYbXBTeQ2YyT5EWcLYPG6h1WaVKQq/BWMv9/u+UAXsZISi0UPa24V2ZhfypBqUZfXr1la9dRARERERES0BXs0iOoa4HWC01UH35QOMNtt1l0O01ErXRulWXayctIAXZWgcTOBHGaQyyH0bhe8wVLPCrLyEm+SwlEbh2RhvNJG0AmQNj+G6EwjGKeJ2wG6KRKsuDKsFrxdfZLBqSeXNPpzoADJPZ9p5iFaMECjDTtW5anQdTjJG4TeBKR4jW3mMotGby+tSOx7KoAUnHqK0eexCq0uoKqxSBst97UjmKaw8QdbZRtbZhrF4CXnljEZAtwv0OK6YiIiIiIjoQXhWTHQcQmC43UHr5hhOmqPw2SKb6MyEQBG4KAIXk34TXpLBm6RoDGMEowTCAKVjoWAnq+V32JnKzQoIpaEcG2k7QNwJkTZ8joM8BaE07KzA9Ue2oBzuH0Qrb3sb+PrXAa2nGqqg+dBugLzVR7D/MnLH40hHOhHlhci6OzDjG3CSMUo/hLHOPiZZlEU1oi9sY9bdqg6fEUXYhp1Oque2OeqZVpOVJyiCNpQX1F3K6RhT7acwSPrnkLcHgOCxx0qaTIAnngDYRZCIiIiIiOiBeOZEdExpK8Bws42N39nDkMEqoumSAlnDR9bwMR604SY5vDhDMIrhxTlkqaBtC4VnVyPPuCC58ITScLICTlbdsV24NqJuA2nLRxZ4KD3+HM8iHMaIek1M+uxeQ7QW+n2g1QLGY6DTqbsaOoWi0Yc7OYBVJFBuWHc5tGS04yHt7kDbLtxoH8YqodyzhTasPEXW7M91tJd2AhRBG260h5LBKlpBoixhhIWi0cF8AotTphWcZAjlhki7OyhDHnOsrDwHHAcYDOquhIiIiIiIaCkwWEV0AsOdLto3J3DjDHno1V0O0UoylkTW9JE1fYwGbbhZATfJEQxjuHEGP8qhJVB4DkrXhrF49+xCMAZWoeDkJexcHf6MXAy328gaPvLAhXJ42DENslSQSuNgtwvN1z/RevA8YHcXeP55BquWlHY8ZK0NBHsvQTkBw8V0ctJC3hpAOx7c8U3Y8Ril3zhVFztRZNCWgzKc/6iyIuzATsYQRQ7j8IYlWi1WESNv9KGd5etWJfMUdh4ja/aRdXegHV7zWmmjURXc53ElERERERHRsXCFk+gE8tDDwXYHm1+/jjxwuSBCNGtSIA9c5IfjAu28rMJVkxT+JEUwSSGUhrEkCtdm0GqeDoNUdl7CLhQAA+XYKDwHw8028tBDHrj8ecxAeBBjstFC1GO3KqK1srlZBavKkiNbllTR6MGND2CnE5RBq+5yaBkJgTJoV52rxjfhpGOUbniysXrGwCoyZO0tGHv+wSZjuygaHfijGyhsdymb+hDdjShyaOkcjtdcIsbATsaAEEj655G1Bhw7vA6iCHj96/mzJiIiIiIiOiZekSc6odFWB+3rI/iTFGlr+e5CJFpm5WF4Ku42qlFzaQE3K+BFKbwoOwxaGRhLMGg1bXcLUtk2Ct/GeNBC4bsofIejGmfMzgpAAAe7XRjJ7Uy0Vno9oNt9pcMALR1jO0g722hc/zpEmdcSaqHVoB2/Gg048arRgKqoRgMe4xjMTiMor4GyUV+XkjJoQ8UjyCKFduc3ipBoZgxgFynS9gaMvTydnoQqYSdjKP9w9F+wZKEwOp0kAYKAx5NEREREREQnwGAV0QkVvoO9833sPn8FWegxtEFUE2NJ5A0PecPDpN+EVBr2q4NWUQZZKhghoGwJ5VgoHYatHsgYWKWqglSFgtAagICyrSpItdFCETBIVYfGMMbe+T7iTlh3KUQ0b7YNnD8P/NZvcSFsiZVBG1lrAH94DXmjx89QOj1pIW9tVKMBJzfgJGMUfvO+3UdEmcMIiay1ASPqOx42loMi7MIbXYV2fHatoqUnyxTKdlH6yzNWTeYJrDxB3tqoRv8x7Ls+hkNgawtosXsmERERERHRcTFYRXQK4802WjfGaBxEmGzwQgTRItB3C1plRdVhKSvgxTmcrLgVtoKQcMoJHJGjsAS0LddycVNoDVlqOKWBOx6hkU6gYaBsC8q1MGkFyH0XpWff6hi2jttpEfiTFFno4mCXC/FEa2tjA3AcIMsAb3k6YtBthEDW3oSdRRwJSGcnBMqgVY0GnNyEHY+hPP/u3dCMgZWnyNoDaLf+zstl2IKdjiDzFNpj1ypaYgaQRYasvX2ysZx1MQZOMoKREsnGBeTNDY6DWyfGAHkO7O7ynJKIiIiIiOgEGKwiOgVtSexd6OP8F2LYWYHSW4KLZ0RrRlsSeeghD19ZeL49bOVmCoMbAWAANy1glQrCGEAIKEtAW1bV5cq2qpFry3zR8bADlSw1LKUhSwVhABjAWALKklCOg6zbxc2NFLkrqxCVYwMcN7cQhNJw4wxXH9tBHvBucqK11elUIwFHI2Bzs+5q6JSM7XIkIE2VdjyknR24tgcn2gfKHMpr3HH8amdHIwB7NVb6CiNtlI0e/P0r0NrjMSctLZknUG6wFEFZUeZw0gkKv4Wst4PSb9ZdEs1bFAGNBrufEhERERERnRCDVUSnFHdCDHe66P3OHkab7eUOXRCtidvDVikkxo1LeDlIIYoCdqkgCwW7VHCSHE5aQJYKblZClBpVEkkcPo6AlhJGylf+vyVg5n2nrzEQ2kAqDan1bf/fQGqDo4o1AG1b0LZEHrjIAwel40A5VvVlWzC2g3Z8DpNmBA09338HPVBjGCPqNavPGyJaX1JW4wCvXq27EjqjaiTgJvzhVY4EpOmQEnlrA8oN4I5vwknGKN0AxnaqAB/qHwH4aoXfhB20YGcRAx60lIRSkLpE2t6EsRb4EqsxsJMxBAzSzjay9uZydNei6RsOgYceAkKOliciIiIiIjqJBT7rJ1pwQmB/t4fG/gT+JEXaqn+cAhGdnLEklOWgxKsuLBtTdXgqFaxCVYGlw25Pdl7CLg5/v9SwdfXnwmhUUSYDGFGFsczhwx12vTJCwDxg7VQYAKhCU8IchqPE0e/feobqoS0JLQW0JaEtC3ngonRsaNc+/D152JGqClHdK/wlwQXdRWXnJYQx2D/fh7atusshorr1+0AQAElS/UrLSQhk7QHsbMKRgDRVyguR2i6ceAgn2gOKFEJrZJ3NhRgBeAchkTV7CPIEoshgHI44pSViACuPUIRdlMHiBgNf6VLVRNbZrj5vGOZdT1pXXzs7dVdCRERERES0dBisIjqDInCxf34DO1++giz0YKzFufuXiM5ICGjHgnYsFPdag9IGUmvI8jB0ZQyE1lUY6rCDlLijq5SBULoaOXgYngJeCUoBAhBVJsuIqhOWtqvOWEYIGCle8+tReEpbku9BK6pxEGHvfB9Rl3cVExGAZhPY2ACuXWOwaslxJCDNirHsW92rghvfgNAG2l3M4wjtBMgbffijqygslyMBaWnIPIWyvarr4CLepMIuVfRq4zHQanEMIBERERER0SkwWEV0RqPNNpo3xmgcRJhs8E5zorUiBbS02EWIZsafpMgDFwe7HBNFRIeEAHZ3gZdeAozhe8OSK4M20tYWguEV5GEXkDymoCkyBmnvHEq/CSeLIOL8sFvNYoXxy0YHZZFwJCAtjWoEYIG0vbuQoVh2qaK7Go+Bxx8H3MV7zRIRERERES26xbqaRrSEtCWxf76628vOipqrISKiVSG0hhdl2DvXQx7w4jcR3WZjo+pcNZnUXQmdlRDIulvImhtw4lEVliOaAllkkLpAMriIePtRRJsPQ7khnGgfssjqLu8O5nAkoBESYsFqI3qNWyMAO4s3AtAY2PEIdp4g7Wwj3nwYZdhmqIqAsqx+3dystw4iIiIiIqIlxWAV0RRE3RDDnS4aw7juUoiIaEU0DmJM+k2Mtjp1l0JEiyYIgJ0dYDisuxKaBmkh7e1WXYUS/kzp7IQqYecR0s4OirALACiDFuKtS0h7u7DKDE50AGhda523OxoJaBcpoBkwpMW1qCMAZZHCjfahXB/R5sNIe7sc/UevODiogvkcA0hERERERHQqDFYRTYMQONjtIQs9+KOk7mqIiGjJ2VkBYQz2z/U4apKI7m53F5ASyPO6K6EpMLaLtL8LbbmwUnYiozMwGk4yQtYaIGtv3tGpxlgOsu4uos2HUQYtuMkBrCxamE5pZaODMmjDzqO6SyG6q6MRgEVzY2FGAApVVp3oVIGkt8MuVfRaxgBRBFy8CFg8tyQiIiIiIjoNBquIpiQPXNy8uAE3LSALVXc5RES0rLRB4yDG3m4PUa9RdzVEtKj6fWAwqDoQ0EpQXgNpbxdSK8g8rbscWkbGwImHKMIO0u5OFb68izJoIdq8hHjjIUBIuNE+RFl/SJMjAWmhLdoIQGNgJ2PY6Qh5o4do6xFkXXaporuYTIBWi2MAiYiIiIiIzoDBKqIpGg/aGG530NznXeZERHQ6jWGEuB3g4Hyfd5oT0b1JWXUeSNOFGudFZ1M0uki7O7DyGEIVdZdDS8ZOx1COj6S3C2M9IFwhLeStDURbjyDtbMEu0sPxgPXeJHQ0EtAqMwjFG5ZocVhZBOX4yBt91D0C8Gjsn7ZdxJsPIxlchPJ4Qwbdw3AInDsHhGHdlRARERERES0tBquIpshIgb0LfeShy5GARER0YnZWQGqDvYcGKF277nKIaNFtbgLtNjAa1V0JTVHWrka4OcmYoTk6NiuPASGQ9s9Bu8Gx/552PKS9c4i2HkEZtuEmw9rHAxaNLvKwBzuLAL0YYwppvck8BYRA3tqstSPUnWP/dhFtPYKi0QMEL+/SPWRZNf5vd7fuSoiIiIiIiJYaz7yJpiwPPdy8OOBIQCIiOpnbRgBOOAKQiI7D84ALFxisWjVCIuvuIG/04MYHDFfRA8k8gSwKpN1dlEH75A8gBEq/iWjwEOLBpfrHAwqBotVHGbRgZxOA2SqqkShLSFUib29CeTV1/Lk19m98OPbvUWTdHY79owfb369GR/d6dVdCRERERES01BisIpqBWyMBD6K6SyEioiXBEYBEdCrb24DrViMBaWUYy0bSP4ei0YWTHACG4Sq6O1mksIoMSX8XebN/xgezkDf7iLYfRdrZhnU4HlCocjrFnoCRNtLWAMrxqg5aRHXQGnYeIWv2UASt+T+/MbCyGM6tsX+XDsf+caQbHYPWQJ5Xo6N5fklERERERHQmDFYRzcCtkYCBw5GARET0QBwBSESn1ukAOztVRwJaKcZ2kfTPo/TbcOJhraPZaDHJIoOVJ0h7u8hbg6ktnGvbRdqvxgPmjS7sdAInOgD0fDsyG9tF3toEhKhGsRHNkwHsNEIedlA0+wDmG0yReQI32geEQLJxAdE2x/7RCY1G1XHi5mbdlRARERERES09no0TzQhHAhIR0bFwBCARnYUQwLlzgFLVF60UbbtINi6g9Jtw4gN2rqJbqlBVjLS7i6y9OZNuJMpvIhk8VAU6wjacZAQ7Gc11PKXyQuTtTUhVQpTz75xF68vOJlBucBhanN/lU1lkcKI9CK2Q9HYRbT+KvL0JY3HsH53QaFR1q3LduishIiIiIiJaegxWEc0QRwISEdGDcAQgEZ3ZYAB0u8BwWHclNAPa8ZBsXETptxiuIgCAzNNXQlWd2YSqbhECZdBGPLiEeOsRKDeAmxzATidz66JWBC1kzR7sPJprqIvWl5Ul0NJG1hnMLdAkygJOtA+pcmTtbUTbr0PW3YG2GYqhU0gSwPeBra26KyEiIiIiIloJDFYRzRBHAhIR0f1wBCARTYXjVB0JxuO6K6EZ0Y6HZHARZdiFEw0ZLlljMk9gFSmS3jlkna35ddKREkXYQbT1CKLBJWjLgRPtw8riOQSsBIpmH3nYgZ1GHItJMyWKHMJo5O1NaCeY/fOpEk58ADuPkbc2EG09irR/Dtr1Z/7ctML296tR0Z1O3ZUQERERERGtBAariGbs1kjArICVc3QBERFVhNYcAUhE07O1BTQawGRSdyU0I9p2EffPo2h04MYHEIrnFuvGymJYRYakfw75jMb/PZC0UDT7iLYfRTK4CCME3HkErIRE3hpAeSHsZAwwW0UzIMoCVpkha26g9JuzfS5Vwh2N4KQTFEGn2qf6F6C8cKbPS2ugLKsA9rlzdVdCRERERES0MhisIpqD8aCN/XM9NPcjQPMKMBERAc29CJN+E/sXNjgCkIjOrtmsOhMcHNRdCc2QsV0k/QvIWhtwkhFkkdVdEs2DMbDjIYTRiAcXkbcGtR87GMtG3hog2n4Ucf88jBDwDg5gpdHMxlUay0Ha2YJyQ9gpw1U0XaIsYBUpstYARbM70+dx4gPY2QRFs4nJ1iOINx+qglw8J6BpODioRkRvbNRdCRERERER0cpgsIpoDqqRgBuIemEVriIiorXmjxOUro0blwZQjlV3OUS0Ko46ExRFvXXQTBnbQdI/j6S3CytPqk5BtLq0hhPtQzs+4s1LKJr9hQpfGNtF3tlCtP06ROfPw1g23Oig6io1g5GVxnaRdrehnIDhKpoaUZaw8hRZawNFswdg+vuYLLJqfGaRIG/0EG09ivGFCyjD9vxGetLqMwaIY+DSJcDmqHkiIiIiIqJp4Zk70ZyUro0bD21C2xLeJK27HCIiqomVl3DTAjcfGiBtBXWXQ0SrpN8HBgN2rVoH0kLW2UY8uAhhNJx4ONsxbFQLoQq48T6KRveVjjYLytgO0n41IjDavATleHDiIex4BGg15edykXa3oBwfdjphuIrORJQlrCJG1u5XwcUph6pkkcKJ9iBVjqw1QLT1KJKNiyiDFiB5WZamLIqAMAQ2N+uuhIiIiIiIaKXwDJ5ojpJOiJsPDeDFOayirLscIiKaN23Q3I+wf66H0Wa77mqIaNVYFnDxYtWpYAadYmjBCIGi2Ue8eQnK8eHEB/y5rxCZp7CTCdLONpKNi9COX3dJx2IsG0WzCljFWw9DeSGcZAwnHkKo6Z0DG9tD1t2Gcjx2rqJTE2UBK4+RNTdQNDYwtVCVMZB5AneyB6FKpO0dRNuvQ7pxAcpvLFTXOVoxBwdVB9NGo+5KiIiIiIiIVgp7AhPN2XCrA2+SovetfQw324DkBTUionXR3I8Q9RvYu7ABw/d/IpqF7W2g2wWGQ6DXq7samoPSbyLefAj+/hU40T7KoA1jOXWXRWdgpxMIo5H0zyFvD5ZzTJi0UDS6KII27HQCd7IHJ6k6qyk3gLa9M4dLtO0h7W7DP7gGOxmhDNqzmOBGK0qUBawiRdYeTK9TlVaw8wSizKCdAElvF0WjuzTBSFpyaVqN/zt/vu5KiIiIiIiIVg6DVURzZqTAzYsb8KIMzYMIk/7ijnMgIqLp8SYptC1x46FNlC4PwYhoRjwPuHQJ+M3frAJW7IqxFrTjV12NbBfe6Dq07UJ57FaxdLSCk4ygbQ/JxgUUYafuis5OSpRhG2XQhJ3FsOMhnOgAThZXr1M3PNM4NHMUrhpePQxXtfi+Rw8kyhxWkSFrDVA0ezhrqEqUOew8AYxB6YUoujsogxa07U6nYKLjuHmz6lzKYD0REREREdHUcVWPqAal5+DGpQF2f/tbcKMMecOruyQiIpohqyjhxTmuPr6DpB3UXQ4RrbrdXeCFF4DRCOisQDCDjsVYNtLeLrQbwDu4Cmeyd9i9iqf9y8DKY1hFijzsVSPu3BU7XhASpd9E6TeRtwaw0/ErXawgUHohzClDKMZ2kXZ24A+vwknGKL0GjGVNt35aGTJPIVWJrLWJotnFqUNVRsPKU1hFCm07yBtdFI0uSq95prAg0alkWRUqvXCB4VIiIiIiIqIZ4BVWoprE3WoU1PbXrqJ0bWiHF36JiFaSNmjuRdg/18NwiwEHIpqDMKw6FnzhCwxWrRshkTf7KN0Q3vAq3Mk+tMPuVQvtqEuV5SDuX0Te7AFytc8NteMhdzzkjR7sNIIT78NJxhBpBO14VajshMEAYztIuztwxzfgxkOUbgBjcyQm3cYAdjaBFhbS7g7KoInThKqEKmBlMYRRUE6ApH8eRdCCXrUwJC2XvT1gZwfY2Ki7EiIiIiIiopXEYBVRjQ52uvCiDJ2rBxgN2oDkXWVERKumuTdB3A1x8+IGDN/niWhezp8Hvv51YDIBmhw9vW606yMZXIQKWuxetcBWvkvVg0irGhMYtpHnCex4BCfahxvvQwsLyg1O1MXKWDayzja07cAb70FrBe36M/wH0NLQGnYWQTk+svbmyUNQh92pZJEClo0iaKFo9FD6Tb6vUv2KAlCqCtWzWxoREREREdFM8OyfqEbGkrj50ABOlqO1P8F4o1V3SURENEX+KIF2bVy/tInSY9cEIpqjZrNaYPvt32awal2xe9XiWsMuVQ+i3ADKDZC3+rDTCZxoCDubQKYTaMupQlbHCbAIgaLZh7EceKMbsNNJNZqN2fa1JcoSVh6hDDrIWoPjdzIzBrLIYJUpYDSUEyDt7aAM2lBuyHFrtDj29oCtLWBzs+5KiIiIiIiIVhaDVUQ1K3wH1x/ewrnf/haCYYykE9ZdEhERTYGT5HDyEi9/2y7f24moHufPA9/4BhBFQINhmnX1mu5V0T5Kr3GiTkA0JcbAymJYKlvfLlUPYCwHRaOHIuxCFhnsbAInOoCdx4BW0LYL5QQP6MoiDju0OXBH12Gn4ypcxc6ha0cUGawyR97cQNHagBEP7uYjyhxWnkAaDWW71d8N2lBeyO5UtHjKEshz4NIlwFrvgC4REREREdEs8YoA0QJIWwGuP7yFnS9/C26SIw+4yEFEtMxkoRCOElx/eBOjAbsRElFNOp0qXPXCCwxWrbvbule54xtwo32ILOYYq3kxpgpqFAmU10Dcu4Q87Kx9l6r7EgLa9ZG7PvJmH1aewE4jONEBnGQEwEA5PrTj37NzkHIDpN0deOMbsJMRlNuAsfl6XxdWGgMwyNqbKBpd3K9tmVAlrDyBUDmM7aIIOigbbYZQafHt7wMbG1XHKiIiIiIiIpoZXlEiWhDjQQt2OsDWC9egbAnlcPckIlpGQmu09ibYP9fD3vk+x4QQUb0uXAC++U0gTQHfr7saqpl2faQbF1A0enAnN+FG+4ABiqDFkM+MyDyFncdQjo+kX237Y48io4qQUF4Dymsga23AzmJYyQRuMoQTHQBSVJ2sbP81nayM7SLrbENbTjUOUzvQLt8LV5rWsLMI2naRtQZQ/t3H4YqygFWkkKqAsWyUboiisYvSa/A1QstBayCOgTe+EWBolIiIiIiIaKZ41kW0QA52e3DyEv2X9jAatGCsB7epJyKiBWIMWjcnmPSbuPnQgO/jRFS/Xg84d64KV50/X3c1tCCU30DihSgaXbjjm3DiIYy0Dsel8bNrGmSRwcojaMtF0ttF0exDs/PN2UkLZdBCGbSQqwGsLIadTmAnYzjJEACgLRfa8W51YzPSQt4ewNgunPEe7GSM0mvwtb6CZJHCKnMUfht5qw9te6/8oTGQZQZZZBBawdhO1dUs3IHyQijXB44xKpBoYezvA/0+sL1ddyVEREREREQrj8EqogViLImbFzbgpAVae2OMBm12OiEiWiLhQYwscHH94U2ULg+ziGgBCFF1rXrpJSDLAM978N+h9SAEyqCN0mvCScdwR9fhJAcwlovSDRk6OSVR5rCzCEbayNpbyJt9aDeou6yVZCwHZdhBGXYgtIKVJ7DSCHYygpXHkLqEljaU48NYDoqwg9L14U724CSjKoDFzkSr4ahLlbSRtrdQhJ0qJKU1rDKFLHLAGGjHRdHooPTbUG4A7Xi85kLLyRhgMgHe+lbAZWiXiIiIiIho1rjiR7RglGvj+sObsPMCjf0IUf/ubeuJiGixeFEKIYDrj2wha3KRjogWyMYGsLMDXL0K7O7WXQ0tGilRhB0UfhNOPKw6WCVDAAKlF8Kwy9KDGQ0rT2EVKbTtIG9tIG/2obxG3ZWtDSMtlH4Tpd9E1tmEVWRVN6tkBDuLIdMJjJDQjoustQnthuxetSLu6FLV6MJIC3YWQ6gCgIByPKTtLSg/hHJDjuKk1TAcAp1OdXxHREREREREM8dgFdECykMP1x/ewu5vX4E/SZFygZ6IaKHZeQkvznH1ddsMxBLR4pESuHgR+Na3gKIAHC4q011IC0WzjyLswE4jOPEBnGQEmU6gHB+lz65LrybKEk48hFAKygmQ9M+jCFrsUFU3IaHcAMoNkLc2DscyJrCzCFYyhpPHgFYogwasrOpwpR2f3auWjdaw0wkMgMJvQNkurCKFsRwox0PZ3kTphVBuAEir7mqJpseYKlj1Hd8B+HzfIiIiIiIimgcGq4gWVNxt4P/f3r0Hx3Xe9/3/nLP3K+5XAryAd4mkaEm2LnHHYi3VynSSujNRPa3jWKpGU7tyaptOYjHTRFEmqaxWdTpxPI7TTiVPxxk708b21OOkZmzZ+XUsybYurqRIsqkbRRIk7tjF3nfP+f3xECAWIClegH12se/XzBlgFwvgyy8X2PPsfvB9prb2aeAX46oFXVWi/KU4ADQjt1pTYjanqdEezQ902i4HAM6vr0/q75dmZqSBAdvVoJm5AVXjaVXjaZXKBYUKWYUWZhTOzaqarcqphSSnjZ9K8P2zE3IKquUrqsT6VI11qRpNyg+0cV+amBeKyAtFVEl0Sl5NgUpJbqWoYCmvQCGryMK0QtlZOfk5VWJpsz0cQZzm5PtyalUFSwsKlAuqRpIqp3rN76xoymzvF47KC4TY4g8bVzYrpVJMIQUAAACABuJZP6CJzfenFSxV1PfWpBZcV7UwP7IA0EycmqfU9ILmBzo0M9oj3+UFHABNKhCQtmwx2wFWq1KQ80q8My8cUykcUznZrUB5QbXEKcVO5uVUa/KDZiqMH2iDCWi+b6YeVYpyfE+1UFTFjkFltgYUCfbJ8Xn8bxluQLVIXLVIXJVkt+TVVKiUFMzPKTZ9QpHMhILFnPxAWH7AlR8IynOD8gMByWG7wEZzalU5Xk1OrSrXq0nVqhy/olo4odzwVhW7BuVFEgSp0F7m5qS9e6UE280CAAAAQKPwbDrQzBxHM5u6FajW1H1iRtnupLwQfzkLAE3B85WezirTl9Lktn55QX4/A2hy/f1mctX0NFOrcFn8QFCVRKdyowE5GVfBfE6hQkaBclFOLSvfDZqpQMHwxgk3LE42qpYk+fKCUZWT3arGkqpGEvLCYVXjC4o4juTbLhZXbFnQqtQxqFBuVtHZcUXys/J8X47vyKmZ+4Lje/Idh7DVOlkZovIl+W5AXiAoPxiR53vy4lEVO/pU6hiUF2HLTbShTEaKx6VNm2xXAgAAAABthWAV0OT8gKupLX1yq546T88p05uSH+DJWwCwyjehqlxnXJNb+1VloiCAVhAMStu2ST/5iVSpSKE2mDSEteU4qkUS8kIJldN9Zku8ckHBfFbBUk6hck5yXNWCZ0NWrbSdmu/LqVUUqJblVCuS65jJVJ0DqoUTqkVi7TGdq525riqpHlUTnSrm5xXJTClQXJAfCMkLBOXWqnKrpbOBwmp92MoNLDtcAlcX49VMgMqryfG8VSEqL5JQeXE7Pzlyq2XJdVVOdqmc7FYtwpQetCnfl2ZnpWuvNVsBAgAAAAAahlcBgRbgBVxNbu2T63lKT2ZMuMrliVoAsCU5vaBiMqKJsUFVYmHb5QDApRsYkAYHpclJaWjIdjVoZY4jLxyTF46pkuyWUy0rWC4oUFxQsJBVqJST49UkSZ4bNIGJZglbnQ1RubWq3FpF8jzJMZO5aqGoKuk+1SIJ1cLR5qgXDeW7AVWS3arGUgrl5hTJTitYLqgajqkaT5v7j1cz96FqRW6tLLdSlrP41vfky5OXLStYrEhOQL7jLgWvNsxUt4vxPNMj3wSo5NfkZ8sKFcry5ch3g/LdoGrhsJl2FwidDbCFJNeVvJqCxQU5vq9KolPldK+qkUR79A64kPl5qaNDGh21XQkAAAAAtB2CVUCLqIWDmtzaL7fqKTW9oExviicVAcCC+GxO1WhQE2ODKiUitssBgMsTCJipVWfOSKWSFOH3GNaGHwyrEgyrEu+Q49XkVsvmKBcVLOflVkpLYSsznSa4NN3Hd84GTtbyj0fOhl/kLwY8PLm1al2IyguGVY6lVAvH5AXDSwfrLEiSHwipnO5TJd6h8MKMwtkZhRZmVYvE5AUj5j4UXrYdne/JqdXkeFU5flWlvpxUcBUsleR4VblnJ1zJ9yU5knzJdU3oynGXJl35jmvug814P/T9sz9TnhzfHFp635e/+O9yXHlnf769cFy1cESF/qqqXlJyghcOmXk1BQtZObWqqrGUSuleVWMpJoABnmeCVQcPmq0AAQAAAAANRbAKaCGVaEgTY/0a/Pm4UjMLyvYw+hsAGimaKUiOo4ltAyqkY+/8CQDQjPr6pE2bpBMnpJER29VgA/LdgGrhmGrhmBTvUElaFbYKlPNyq2WzFZhfkeN5ku9JWgyd6GzA5GygwnHkm3fO3ubsrXxfkm8+/+z1i1/Dd89NCvICQVXjHaqFostCVCECG3hHfjCsUuegKolOhbKzCudmFSrNyAtGVAvHzwUCHVd+0JWvkHxXKncEFeiIqeJJ8mpya9VzW+D5nnQ2hGWuNz8DjleVIxNWWuI45n7uLP+5kCRH/lIA6+z7Ok8Y69yPzPJ/lfmQ75sQovyzoamzP09Lb3U2LHX2cxzXbH3oBOS7jnw3JD9kJtL5geDZ689O5wqYqVRyHNOPdEGBuZgcb2UtWpp4J99XNZJQuadHlVjH2oYtgVY2MyN1d5vzNwAAAABAwxGsAlpMOR7RxPYBDf58XImZBeW6k7ZLAoC2EMkVFazWdHrHIL97AbQ2x5G2bpVOn5YKBSlGUBTrb2XYylzpnwuarDwWt+mrVeVIJoiyGP6QTCDKccy2Yo4jLxCWHzw3CWflwZZ+uFpeKKpS95AqqW4Fi1mFF2YUKsxLclSNxOUHL7I9tBuQd7H7YN0kqNrSRKjFaVBL4UHPk+TJXZrG5p0NRnlyvLM/G3UhquUXnLo3kkwYy3Xly102Qc5dmqS19HO2FKY6O1XLPff+FfM9BcpFBSpFecGQyolOVRKdqkaSBKqA5Wo1KZ+X9u5l0igAAAAAWEKwCmhBxVRME9sHNPSL04rN51XoYAw4AKynUKGscL6siR2DyvalbZcDAFevu1saHZVef928BWxwHDPVJsBTE2gdXiiiciiicqJLwWJOofycQoWMnGJOXihiwoPnmxx1MY4jnd0S01fo8j531aSpVTdYVY+/uAXf4raDDeTUKgqU8nK8mmqRmArdm1SJpeq3VQRwzvS0mTY6NGS7EgAAAABoWzx7CbSofGdCE9v6NXBsXNFsQcUUT0ICwHoIFiuKZoua3NqnuYEO2+UAwNpwHGnLFunUKWlhQYpGbVcEAK3FDagaT6saT6tULiiUzyiUm1U4P6taICi37Et+VJcdsrpcS9sBnmfHv2bh1RQsFBRaKMpxAqrEUqokulSNJglWAhdTrUrlsjQ2JoUuM3QJAAAAAFgzPHsBtLBsb0qO52ngtTOKLhRVTjK5CgDWklsqKZ7La2JLr2Y3dTf8L/oBYF11dEibN0uvvioND9uuBgBalheOqRSOqZzqUbCYVbAwr0B5SuGFWUmuaqGIvFDk6rbOazFOraJApSSnVpHvOio7joqdA6pF06qF45xXA5diakoaGDAHAAAAAMCadXtG580339S9996rbdu2KRaLafv27XrwwQdVLpfX61sCbSnT36GJsQEFSxVFFoq2ywGADSNYqiiSzWp6tEczoz3yXV78AZoFa401tHmzlEhI8/O2KwGAlucHgqokupTv36r5sTHlBraplO6VI5mJVgszCpRycmpV26WuPd+XWykpmM8otDCtQLmoWjCiQtewFga3K7Ntm0pdQ6pFEoSqgEvgVipSrSZt2yYFArbLAQAAAIC2tm4Tq1555RV5nqcvf/nL2rFjh1588UXdd999yuVyevTRR9fr2wJtaf7s1lSDx84o6OWlpOWCAKDFBctVxefyWhge1vTotPz2GS4AtATWGmsomTQv2D33nOQ37SZSANByvHBYlURS1VinSrWqAuWCAqWcQoWMgqWcHK8mLxCUFwjJD4Rab0s835NTq8qtVuTWypJ8eYGwKrG0avGUquGYvFBUchz5ruQHFmxXDLSUcDYrbdok9fXZLgUAAAAA2t66PWtz55136s4771y6PDY2pldffVVf+tKXeLEDWAfzAx1yPUdbXywqkiuqkAjbLgkAWlKwXFViNqfpkT5FOzfJD8xK8myXBWAZ1hprbGREev11hXI525UAwIbkB4KqxlKqxlIqpfsVqBRM0KqYM2/LBTleRfLNbZsubOV7cqsVE6SqVWTOjR15gZC8YFjlRJe8aFy1cExekOcigKtWLMp3XTNZ1OWvfAAAAADAtoY+QzM/P6/u7u4LfrxUKqlUKi1dzmQykqRKpaJKpbLu9TW7xR7Qi3MWe+EySkSSlB3oVjbbr/DkW5IvlZJR2yVZ5fjO0lvX4T5CP+rRj3r0wwiWKorP5TU90qfZ0X5tygd4jDlrsQ+chxicl9Vrhj6w1rgKwaCqmzcr+IMfqMp2ikuq1bNbdTk+28FKkuMvvaUfoh8r0Y96F+uH66oaTKgaS0gdvZJXk1sty62WFaiW5RbzClQKcisFuaWKfDmS68p3AvJd1xxn35fjrs22er4vx6uZw/ckzzv7fk2O70uOo1ogpFo4rHKkU144qlowLC8Ylh8IvXMN3D9Woyf1zvZj6bG3zdVOn1axp0eVdFpq9/NUNcdaAwAAAEB7a1iw6tixY/rCF75w0b8gf/jhh/XQQw+tuv6JJ55QPB5fz/JaytGjR22X0HT2Z/fbLqFpFAakbud9Sr31lrxcWJVEwnZJ1u3I7bBdQlOhH/XoR7127odbKimSzWphaEjRzhFtygck8RizEuch9eiHkc/nrX5/1hpXz6lU1JVI6Lm/+zuV02nb5TSV3A4meS1HP+rRj3r0o97l9SMgKSYpJqdWk1upKFAum7elktxKRW6lJMf35dRq5vD9c9u4Oo58x6kLOfnL3ncWb3f27arPDQTkua78gAlteaGQaqGYvGhUtVBIXjgsLxhcEaIqnz3Wox/tgZ7Ue/qpp2yXYF2gWFSwVFJ+924d/bu/s11OU7C91gAAAACAyw5WPfDAA3rkkUcuepuXX35Ze/bsWbp88uRJ3Xnnnbrrrrt03333XfDzjhw5osOHDy9dzmQyGh0d1aFDh9TT03O5pW44lUpFR48e1R133KFQKGS7nKZAT+ot9uPH288omcqr//U3VFVQpWTMdmlWOL6jHbkdOpY4Jn/xr0HbGP2oRz/qtXs/gsWK4rm8pnf1aHo0Ij8wJ9d3tT+7n8eYs3jMrUc/6i1Of7parDXsqVQq+v/m5vS+VEqBkREp2CTbT1lUrVb19FNP6aabb1aQfiz1I3EsIflMV5HjK7cjRz8W0Y9669APT5Ln+3KWT5Pylh21ihzPk+TJ8STJ17ntrB1znA1f+Y7Zxs93A+cOLyBf5pDvSjXJLUpudg3+KpP7x2pne8JjjMFj7jLHj6s6NqbvnjjBWuOstVprAAAAAMCVuuyV6mc+8xndfffdF73N2NjY0vunTp3SoUOHdOutt+ov/uIvLvp5kUhEkUhk1fWhUIhF5DL0YzV6Us9zPM0NpuW5vgZeO6NwxlMx3X7hqsXtzHzHl7f0hHL7oh/16Ee9du5HqFhWNFPQ5JZeTY/2yOx4d64HPMbUox/16IexVj1grWFXqbtbgb4+hebmpMFB2+U0jWAwqFC7v8i7nO+cDW20t6Wtu+iHJPqx0vr1w5GcgJkqFVjLr1v3HbTWywHuH6st9oTHmHpt34+5OamzUxobk06c4Dz1LHoAAAAAwLbLXqn29fWpr6/vkm578uRJHTp0SDfccIMee+wxua572QUCuHKZ/g7JcdT3+hnF53LKd7ItIAAsF86VFM2XNLWlTzMjPede9AFgBWsNu/xAwLyQ9+yzUrEoRaO2SwIAAGgPtZo0Py8dPCglk7arAQAAAAAss25/AnTy5Enddttt2rJlix599FFNTk4ufWyQv34GGibTl5YXcNX/+hklp7Na6E5KDsEBAIhmCwqVqzoz1q+5oS5+NwIthLXGOurrk7ZskV57Tdq82XY1AAAA7WFyUhoYkEZHbVcCAAAAAFhh3YJVR48e1bFjx3Ts2DGNjIzUfcz3/fX6tgDOY6E7qVrAVf8bZ5SeXlCmOykxlQVAG4vP5SRJp3cMmul+AFoKa4115DhmatWZM+e2owEAAMD6KRbNxKodO6RQSKpUbFcEAAAAAFhm3fbLuPvuu+X7/nkPAI1X6Ijr9I4h5dNRpaezcjzPdkkA0Hi+r+R0Vn7A1ZmdQ4SqgBbFWmOdJZPS9u1mO5pq1XY1AAAAG9vkpJkU2t9vuxIAAAAAwHmsW7AKQPMpJaM6vWNIC91JpaeycmuEqwC0Ec9XenpBlVhY4zvN70IAwAWMjkqDg9LUlO1KAAAANq65OSkeN6F2tqcHAAAAgKZEsApoM5VYWGd2DGq+v0Op6awCFaYQANj4HM9TeiqjQiqq8Z1DKnTEbZcEAM0tFDIv8Hme2Z4GAAAAa6tWkzIZc86VStmuBgAAAABwAQSrgDZUDQc1MTagmeEuJWZzCpYqtksCgHXj1jylJ7PKdad0eueQSsmo7ZIAoDX095ttaSYmbFcCAACw8UxOSn19ZlIoAAAAAKBpEawC2lQtFNDk1n5Nj/YoPl9QOF+yXRIArLlAuarUdFbzAx06vXNQ5VjYdkkA0DocRxobk5JJs00NAAAA1kaxaCaD7tghhVmnAgAAAEAzI1gFtDE/4Gp6c58mtvUpXCgrNp+3XRIArJlwvqTEXE4zm7o1MTagajhouyQAaD2plNmeZn7ebFcDAACAqzc5aSZVDQzYrgQAAAAA8A4IVgFtzncdzY706PSuYcl1lJrKSp5vuywAuCrx+bzChbImtvVrcmu/aqGA7ZIAoHUtvug3OWm7EgAAgNY3Py/F42YyqOPYrgYAAAAA8A4IVgGQJGV7Uzq1e1iFdFTpqYzcKhMJALQgz1dqKivfdXR617BmR3rkuzxRDQBXJRQy29TUambbGgAAAFyZWs1ssbx9u5RO264G7+CLX/yitm7dqmg0qptuukk//vGPbZcEAAAAwAKCVQCWFFMxnd45rEx/h1IzCwoWK7ZLAoBL5lZrSk9lVEhHdWr3sLK9KdslAcDG0d8vbd7M1CoAAICrMTVlzqtGR21Xgnfw9a9/XYcPH9aDDz6oZ599Vtddd50+8IEPaGJiwnZpAAAAABqMYBWAOpVoSGd2DGpqtEexbEHRBaYSAGh+wWJFqekFZfo7dHrnsIqpmO2SAGBjcRwzWSEeN1MWAAAAcHmKRalaNZNAw2Hb1eAdfP7zn9d9992ne+65R9dcc43+/M//XPF4XP/9v/9326UBAAAAaLCg7QIANB8v4GpqS58q0bB635pSYmZBua6EeUENAJpMdKGoUKGsqS29mhnpkRcgNw4A6yKVMuGqn/3MvB8I2K4IAACgdUxOSlu2SAMDtivBOyiXy3rmmWd05MiRpetc19Xtt9+uJ598ctXtS6WSSqXS0uVMJiNJqlQqqlTYEaBRFntNzxuLvjcePbeDvttB3+2g741Hz+24nH4TrAJwfo6j+cFOVaIh9b05ofRUVtnupHwCCwCahe8rMZuT77o6s2NQ8wMdBEABYL1t3ixNTJhjaMh2NQAAAK1hdlZKJExInXVr05uamlKtVtPAihDcwMCAXnnllVW3f/jhh/XQQw+tuv6JJ55QPB5ftzpxfkePHrVdQlui741Hz+2g73bQdzvoe+PR88bK5/OXfFuCVQAuKt+Z0PiuYfW9Oan0dFa5jriqkZDtsgC0ObdaU3I2p2Iyosmt/cp3JmyXBADtIRSSdu2SfvxjaWFBSiZtVwQAANDcymVz3nT99VI6bbsarIMjR47o8OHDS5czmYxGR0d16NAh9fT0WKysvVQqFR09elR33HGHQiGev24U+t549NwO+m4Hfbdjse8vvHCHPI++N4LrVrR/P/f1RlucNHspCFYBeEfleESndw6pFAur+9SsqsWKCh38tRUAO8L5kqILRWX6OzS9uVflWNh2SQDQXnp6pB07pBdekGIxtgQEAAC4mDNnpNFRadMm25XgEvX29ioQCOjMmTN11585c0aDg4Orbh+JRBSJRFZdHwqFeGHMAvpuB31vPHpuB323g77b4XkhglUNxn29sS6n1+zpBeCS1EIBTW3t0/iuIfkBR+nJjJyaZ7ssAO3E95WYWVCoVNHEtn6d2TFIqAoAbNm61WwFODFhuxIAAIDmtbgF4M6dhNFbSDgc1g033KDvfe97S9d5nqfvfe97uuWWWyxWBgAAAMAGglUALp3jKNuX1qk9I8r2JJWeyipULNuuCkAbcCs1pSczqsTCGt+9SbMjPfICnMYAgDWLWwIGAmZrGwAAANRb3AJw9262AGxBhw8f1n/9r/9VX/nKV/Tyyy/r4x//uHK5nO655x7bpQEAAABoMLYCBHDZSomzWwPGo+o5Oa1QsaJ8R1xyHNulAdiAwrmSormi5gc6Nb25V5UoY1ABoCmwJSAAAMCFsQVgS/vQhz6kyclJ/f7v/75Onz6tgwcP6m//9m81MDBguzQAAAAADUawCsAV8YIBTW/uUSkZUe+bk0pPZbTQnWKCDIC14/lKzi7IC7g6s31A8wOd8vkdAwDNZetWaWrKbAk4NGS7GgAAgObAFoAbwic+8Ql94hOfsF0GAAAAAMt4dRLAlXMcLfSkdGrvJmV700pNZRUusDUggKsXqFTVMZlRKRnV+J5NmhvuJlQFAM2ILQEBAADqsQUgAAAAAGwovEIJ4KqV42ZrwIlt/QoVy0pOZ+V4nu2yALQi31csk1diLq/Z4S6d2j1sthoFADSvxS0Bp6elWs12NQAAAHaxBSAAAAAAbCgEqwCsCS/gama0R6f2bFIxHVN6KqsQ06sAXIbFKVW+62p897AmxgZUjYRslwUAuBRbt5qtACcmbFcCAABgz+IWgIsTPQEAAAAALY9gFYA1le9M6NTuTZrc3Kcw06sAXIplU6rmBjp18poRZfrS8l3HdmUAgEvFloAAAKDdLd8CMJWyXQ0AAAAAYI0QrAKw5mqhgKa39DK9CsA7Wjml6syOQZVjYdtlAQCuBFsCAgCAdsYWgAAAAACwIQVtFwBg48p3JlRKRNV5alZd4zOK5EvKdSXku2Q6gbbn+4plCwqVqpob6NTMaA+BKgDYCLZulaamzJaAQ0O2qwEAAGgMtgAEAAAAgA2LdAOAdcX0KgArMaUKADaw5VsCZrO2qwEAAFh/bAEIAAAAABsaE6sANMR5p1d1JuQHyHcCbcP3FcsUFCozpQoANrTFLQFfeEGKxaQgy04AALBB+b50+rS0eTNbAAIAAADABsUz3AAaZnF6VaEjpu4TM0pNZ1WOhVVMRiXHsV0egHUUKpQVzxRUSEc1ta1f2Z6UfJefewDYsLZtk+bmpJMnpZERzvUAAMDGNDkpdXVJe/awBSAAAAAAbFAEqwA0XL4zoWIqpvRkRl0np5WezCjfEVc1ErJdGoA15lZrSs7lVQ26mtzSp/nBDn7WAaAdBIPmBcZMRpqelnp7bVcEAACwthYWJM+T9u6VEgnb1QAAAAAA1gnBKgBWeAFXc4OdynXE1TU+q47Tc9JCke0BgY1i2bZ/2d6UZoe7VUjHbFcFAGikVEq65hrppz+VcjlecAQAABtHtWrC4/v2SQMDtqsBAAAAAKwjglUArKrEwprY1q+F7qS6T8woPZ1Vie0BgZa2atu/7iSBSQBoV4OD0s6d0j/8gxSJmElWAAAArcz3pfFxaXRUGhuzXQ0AAAAAYJ3xrDYA+xxnaXvA1GRG3Sdn2B4QaEGrtv0b6lQ1zKkGALQ1x5G2b5fm56XTp6WREdsVAQAAXJ3paTOZc88eQuMAAAAA0AZY+QFoGl7A1fxgp/KL2wOemZeyReU74/KCAdvlAbgAx/MUyxQUrNSU7U1pZlO3iim2/QMAnBUKSXv3StmseSGyp8d2RQAAAFcml5PKZenAAROuAgAAAABseASrADSd5dsDdo7PKjW9oFrQVT4dZzsxoJn4vqLZoiKFsvLpmCbGBrTAtn8AgPNJp0246plnpEJBihHABQAALaZalaampGuuMdsdAwAAAADaAsEqAM3p7PaAhVRMmbmcusZnlZrOqhoJKZ+KSa5ju0Kgffm+IrmSovmSiomoxncNaaEnpVqIyXIAgIsYHpbm5qRXXzVbAgZ43AAAAC3k9Glp0yazzbHD81IAAAAA0C4IVgFoan7A1UJPSvnOhJLTWXWdmlXHVEalWFjFZJQnsoAGCxfKimULKsfCOrOtX9n+DlXDnE4AAC6B40g7d0qZjDQ+bsJVAAAArWB6WkokzATOUMh2NQAAAACABuKVUAAtwQu4yvR3KNeVVGo6q86TM+qYyKiYjKiUiNouD9jwgsWK4tmCquGgJjf3KdOfViUWtl0WAKDVhMPmBclsVpqdlbq6bFcEAABwcYWCVCxKN9xgtjcGAAAAALQVglUAWkotFNDcYKcWuhJKT2bUeXpO6Yl5FVIxQh7AOgiUq0rM51ULBTQ73KX5gU6VEhHbZQEAWllnpwlXPfusFItJUULyAACgSdVq0sSEtHu32dYYAAAAANB2CFYBaEnVSEgzIz1a6EkpfWZOHWcyimcLKiSjKscJfQBXK1iqKJ4tynOk+f4OzQ92qpCO2S4LALBRbNokzc1Jv/iF2RIwELBdEQAAwGrj49LQkNnO2HFsVwMAAAAAsIBgFYCWVo6FNbW1X9m+DiWnsuqYmFfHmXkVExFVEoRAgMsVKpQVWcipFgpqbqBDmb60CVTxBDIAYC25rnmBMpORzpxhAgQAAGg+MzNmuubevWY7YwAAAABAWyJYBWBDKCUiKiUiyvSnlZrOquPMvNIT8wp5WSnuS67tCoEm5vsK50uKTU0p2FnR7HC3Mn1pFZNRAlUAgPUTjZoXKn/6U2l6WurpsV0RAACAkctJhYL0rneZbYwBAAAAAG2LYBWADaUSC2tmpEeZvrTSUzlteiOo9GRG5WhAhVRUvkvCClji+4rmSorkSqpEI8qOjOjEFkfFJH+JCwBokO5u6dprpWeflRYWpGTSdkUAAKDdlcsm9L13r9myGAAAAADQ1ghWAdiQqpGQ5oa7NRvZo/HqjNKnZ5SayqoWCqiQjssLELBCG/N8RReKihTLKsUjOjPWr3x3h9KVEZUT05I82xUCANrJ8LCUz0svviiFQlIkYrsiAADQrjxPGh+Xtm2TduxgijMAAAAAgGAVgI3NC4WU6elUpjehxGxOHWfmlZhZkBxHxWRElSiTedA+ApWqotmiAtWaiqmoTo8OaaE7qWo4KNd3pYrtCgEAbclxpLExs+XO66+byRCBgO2qAABAOzp1ShoYkPbskYI8dQ4AAAAAIFgFoE14wYCyfWktdCcVzxSUnM4qOb2g+HxBpXhYpUSEbQKxMfm+wvmyovmivEBAuc64sn0dynfEVQvxojUAoEkEAuYFzELBTInYtIkJEQAAoLEmJ822xNdeK8VitqsBAAAAADQJglUA2oofcJXrSijXldDscEmJ2ZzSk/NKTS3IC7oqJKOqhfnViNbn1jxFswWFSlWV42FNj/Qo151SIRXlhWoAQHOKRs0LmYWCNDFhpkUAAAA0QiYj1WrSwYNSZ6ftagAAAAAATYT0AIC2VY5HVI5HND/QocRcXqmpjOJzOQXmPTPFKh4hgIKWEyqWFV0oSZIK6aimtvYr1xlXNRKyXBkAAJcgnZb27ZOeeUaam+OFTQAAsP6KRWl+Xtq/XxoctF0NAAAAAKDJEKwC0Pa8YEDZ3pSyPUlFF4pKzOSUnppXx0RG1XBApURUVaZYoYm51ZoiuZLCxYoq0ZDmBzqU7U2pkIrJD7DFJQCgxfT3S3v3Sj/7mRSJsBUPAABYP9WqdOaMtHOntG2b7WoAAAAAAE2IpAAALHIcFVMxFVMxzQ91Kj6XU2oqq1i2oMRcTuVISKVERF4wYLtSQI7nKZIvK1woyXddFZNRzYx0K9+ZUDkesV0eAABXZ8sWKZeTXn1V2rRJCrJ0BQAAa8z3pfFxaWRE2r1bcvnDJAAAAADAajw7DQDnUQ0HlenvUKYvrUiupFi2oPRkRon5vBzPVzkWVikels+Tbmgk31e4UFY0X5Z8X6V4RFOb+5TviKuYjDKdCgCwcTiOtGuX2Zrn+HHzgifnXQAAYC2dPi11dUnXXCOFw7arAQAAAAA0KYJVAHAxjqNSMqpSMqr5/g5FF4qKz+eVmsoqNb1gplzFwypHw5Lr2K4WG1SwWFE0V1Sg5qkcC2t2qFO5zoQK6RgT1AAAG1coZLYEzOfNC5/Dw7YrAgAAG8XsrDnXuPZaKZm0XQ0AAAAAoIkRrAKAS+QHXBU64ip0xDU73KVYxmwRmJhdUMdURjXXVTkWViUWYpIVro7vK1SqKJwvK1CtqRoJaaEnpYXupAodcVXDPHwDANpEPG5e8HzmGWl6WurpsV0RAABodbmcVChIBw9Kvb22qwEAAAAANDlemQWAK+AFA8p1J5XrTipY7lEsU1BsPqfEXM5MspJUjoZUjoWZKIRL4niewoWywoWyXM9XJRpWviuhXFdShXRM5RjbEgAA2lR3t9mi59lnpYUFpkoAAIArVy6bsPY115ithgEAAAAAeAcEqwDgKlXDQWV7U8r2phQoVxXNlRTNFJScXVBiPi+n5qkaDqocjzBpCHXcSs2EqUpl+XJUiYU1N9SlQjquYjKqSjRku0QAAJrDpk1mssSLL0rBoBSN2q4IAAC0mmpVGh+Xtm2TduyQHMd2RQAAAACAFsAr/ACwhmrhoHLhoHJdCc2MdCuaKymSKyo5vaBIrqjEbE61UMBsGRgJsmVgu/F9BUtVhQtlhSpV1QKuSvGIpgb6VEjHVEpEVQsx4QwAgPMaG5NKJenVV6WhISnMNEcAAHCJPE86dcqEta+5Rgqw9gYAAAAAXBqCVQCwTvyAq0I6pkI6prnBToULZUUXiorP5RTLFpSaKUmep1oooEqUoNWGtBikKlUULFckOapGQiqmopruSamYiKgUj8gP8P8OAMA7cl1p926pUpFef928MBpkSQsAAN6B75tQVX+/tH+/FInYrggAAAAA0EJ4FhoAGsFxVI5HVI5HlOnvUKBcVaRQVjhfUnwur2iuqOhCUfJ9glat7HxBqnBQpXhEM8NdS/eBSiTIlgMAAFyJYNBMmahUpBMnTLiKiRMAAOBiTp+WOjtNqCoet10NAAAAAKDFEKwCAAtq4aDy4aDyHXHNDXWdN2gVWSjKWQxahUOqhoPy2Cauqbg1T8FydemQL1UjJkg1O9ylEkEqAADWXjgs7dsnVatm+sTICI+zAADg/M6ckWIx6cABKZ22XQ0AAAAAoAURrAKAJnCxoFVsPq9IrqTYQkHBSk2+I1WDQVXDQcJWDVQXoqrU5HievIC7NJGKIBUAAA0Ui5mpE+WyCVdt2mS7IgAA0Gymp81ky/37pa4u29UAAAAAAFrUugarfvVXf1XPP/+8JiYm1NXVpdtvv12PPPKIhoeH1/PbAkDLWxm0cmueQoWyQqWKQoWyogvFC4atauGAasEAwZ6r4FZrClZqq0JUlbPTqObSMZVjYVWiIVUiIdXC5JQBoNFYa0DJpHTdddIzz5gtfgYHbVcEAACaxfy82Tr44EGpv992NQAAAACAFraurwQfOnRIv/u7v6uhoSGdPHlSv/Vbv6Vf+7Vf049+9KP1/LYAsOF4AVelZFSlZHTpuguFraK5kgKVmuT7kuOoFnBVCwXkh0JyqlWL/4rm4tQ8BUolRVSUU6koWK1J8iU5ZydRBQhRAUATY60BSVJnp9na59lnpakpqbfXdkUAAMC2hQVzXHcdUy0BAAAAAFdtXV8d/vSnP730/pYtW/TAAw/ogx/8oCqVikKh0Hp+awDY8C4UtgqWKuemLZUqCufNloKhUlXhhQWlyvOSPHmOo1ooIC/grjo2wrQrp+YpUPPkLj8qNbmeZ/59jqtApSw/6qjQGVc5HlE1ElraYrEaDqrGNosA0LRYa2BJX58JVz33nDQ3Z8JWAACgPRUK0uysdO210ubNtqsBAAAAAGwADRu7MTMzo69+9au69dZbL/hCR6lUUqlUWrqcyWQkSZVKRZVKpSF1NrPFHtCLc+hJvcU+uL5ruZLmsNiHtuqH66oaC6oaW3G97ytU9tU9s0vj4YqcalnBUkWRvJl4FajVFCpXlwJIdZ+6PHTluvJdxxxO/dt1C2P5vhzfl+Od561XH5ySf/ZzHMl3XNWCrvyAq1ogoHIkolI8rEosrGo4KD8YVrJ0jd7uduVdID/l+ue/fiNqy5+Xd7DYCx5jDB5z69GPerb7wFrj6rX8fbq3V9q9W/rZz8zUzlTqqr9k9eykzyoTPyUt64Pjm3O/duf4S2/ph+jHSvSjHv1Y7WxPeIwx1uwxt1SSzpwx5wSbN0st2t+WPy9bY/QBAAAAgG3rHqz67Gc/qz/7sz9TPp/XzTffrG9/+9sXvO3DDz+shx56aNX1TzzxhOLx+HqW2VKOHj1qu4SmQ0/q7c/ut11CU6Ef51QT0phukUKSYpI6ZYJLtZrcWk1OtbrqbaBcllsuK1AqyanVTKjJN6Em+b7keUvXLYarfN/X0tPljmNudz4rPrYsF1V3ne+6kmsmaZkgl3nfc1154bBq8Yi8cFheMCg/GJQXCMgLBJbe94PB8wa/vIi0P3fd1bR0w+HnZTUeY+rRj3r0w8jn81a+L2uNtdfS92nfV3xiQumf/lTlZFK1SGRNvuzTTz21Jl9no8jtyNkuoanQj3r0ox79qEc/VuMxpt7V9MOp1RSdmVF+cFDZQED+G2+sYWV2tPR52RqytdYAAAAAgEWXHax64IEH9Mgjj1z0Ni+//LL27NkjSfrt3/5t3XvvvXrrrbf00EMP6Td+4zf07W9/W855XuA+cuSIDh8+vHQ5k8lodHRUhw4dUk9Pz+WWuuFUKhUdPXpUd9xxB9ubnEVP6tGPevSj3mI/Xki9IM/x3vkTzsOp1eR4vlzv3MQox/fl1s6Frc593DN/hHs2OOXUZat8Lcan/MWHA8eR72gpOOUFzoWofNeT5/pnp2W58h3ffNz1JacoqXjZ/xbXd7U/u5/7x1n8vKxGT+rRj3r0o97i9KerxVrDng1zn/Y86Re/kF5+Wervl6LRd/6cC6hWq3r6qad00803Kxhs2LDnpkU/6tGPeov9SBxLLDvBb2OOr9yOHPePs/h5WY2e1LvqftRq0okT0vveJ+3bJ4XDa19kA22Y87I1slZrDQAAAAC4Upe9Uv3MZz6ju++++6K3GRsbW3q/t7dXvb292rVrl/bu3avR0VE99dRTuuWWW1Z9XiQSUeQ8f1UcCoVYRC5DP1ajJ/XoRz36Uc9zvCsOVinoqH6elG2+zs25ujLcP+rRj9XoST36UY9+GGvVA9Ya9m2IfuzdawJWx45Jw8PSVf57gsGgQrzovYR+1KMfK/iOrnSpsZEsbnfH/aMe/ViNntS7on54nnTqlDQ6Kl133VWFqpvNhjgvWwP0AAAAAIBtl71y7+vrU19f3xV9M88zz66VSqUr+nwAAAAAGxdrDayJQMCEq2o16Y03pE2bJF60BgBg41kMVfX1Sfv3b6hQFQAAAACgeazbs8tPP/20fvKTn+i9732vurq69Nprr+n3fu/3tH379vP+BTkAAAAAXArWGnhHoZB07bXmBdc335RGRghXAQCwkfi+CVV1d5tJVcmk7YoAAAAAABuUu15fOB6P66//+q/1/ve/X7t379a9996rAwcO6Ic//OF5t+AAAAAAgEvBWgOXJByW9u2TNm+WTp6UqlXbFQEAgLXg++axvbPThKpSKdsVAQAAAAA2sHX7k939+/fr+9///np9eQAAAABtirUGLlkkIh04YN5/+222BQQAoNUtD1UdPCil07YrAgAAAABscOs2sQoAAAAAAOsiEWn/fml0lMlVAAC0ssXt/xZDVR0dtisCAAAAALQBglUAAAAAgI0tGjXhqk2bzAuyhKsAAGgtvi+Nj5sJVdddR6gKAAAAANAwBKsAAAAAABtfNGq2BRwaIlwFAEArWQxVJZMmVNXZabsiAAAAAEAbIVgFAAAAAGgPsZh5QXZ4mG0BAQBoBYvb/6VSZvu/ri7bFQEAAAAA2kzQdgEAAAAAADTMYrjKcaQTJ8z2gEGWxgAANJ3FUFVHB5OqAAAAAADWMLEKAAAAANBeFrcFHB1lchUAAM3I981jdEeHmVRFqAoAAAAAYAnBKgAAAABA+4lGpf37CVcBANBsFkNVnZ0mVNXRYbsiAAAAAEAbY78DAAAAAEB7Wpxc5brSW29Jw8NSKGS7KgAA2pfnme3/urvN9n/ptO2KAAAAAABtjmAVAAAAAKB9RSLSvn3m/bfekoaGpHDYbk0AALSjWk0aH5d6eghVAQAAAACaBsEqAAAAAEB7i0TMtoCBgPT669LAgBRkuQwAQKM4tZrZ/m9kxDwmJ5O2SwIAAAAAQJLk2i4AAAAAAADrwmEzuWr3bmliQsrlbFcEAEB7KJcVnZkxoaqDBwlVAQAAAACaCn+CCwAAAACAZKZU7d0rhULSCy8omM/brggAgI2tWJTGx5UfHJQOHJBiMdsVAQAAAABQh2AVAAAAAACLXFfauVOSFHjuOWlmRurvt1wUAAAbUC4nTU9Lu3crGwya6ZEAAAAAADQZtgIEAAAAAGA5x5G2bVNm2zapVjNbAwIAgLWTyUizs9I110h79sgPBGxXBAAAAADAeRGsAgAAAADgPIq9vdLBg2ZrwFOnJN+3XRIAAK1vZsZMq9q/X9q1y0yLBAAAAACgSbFqBQAAAADgQgYGpOuvl1Ip6eRJyfNsVwQAQOuanDTTIA8elMbGzJRIAAAAAACaGMEqAAAAAAAuprvbhKt6eqQTJ6Rq1XZFAAC0Ft+XxselQEB617ukkRHbFQEAAAAAcEkIVgEAAAAA8E7SafNC8NCQmVxVqdiuCACA1uB55rEzmTRB5YEB2xUBAAAAAHDJgrYLAAAAAACgJSQSZuuiUEh66y1pcFCKRGxXBQBA86rVpFOnpN5eaf9+qaPDdkUAAAAAAFwWglUAAAAAAFyqaFQ6cMCEq44dk/r6pHjcdlUAADSfSsVs/zc0ZEJViYTtigAAAAAAuGwEqwAAAAAAuByhkHTttVI4LL36qlQuS52dtqsCAKB5FArSxIS0ZYt5zIxGbVcEAAAAAMAVcW0XAAAAAABAywkEpN27zdaA5bJ05ozk+7arAgDAvrk5aXpa2rPHTHkkVAUAAAAAaGFMrAIAAAAA4Eo4jpnEEYtJL70knTxptjsKBGxXBgBA4/m+mVLlOCZ4vHmzeR8AAAAAgBZGsAoAAAAAgKvR32+mcbz0knTihDQ4KEUitqsCAKBxajVpfFxKp83Wf/39tisCAAAAAGBNsBUgAAAAAABXK52Wrr9eGhsz2wIuLNiuCACAxiiVzNTG/n7phhsIVQEAAAAANhQmVgEAAAAAsBYiEWn/fimRkF55xbzQ3NNjuyoAANbPwoI0MyNt2ybt3cvERgAAAADAhsPEKgAAAAAA1kogIO3YYaZXSWZbJM+zWxMAAOthelrKZKR9+0ywmFAVAAAAAGADIlgFAAAAAMBachxp0ybpxhuljg7pxAmpWrVdFQAAa8PzTHBYMkHiHTtMsBgAAAAAgA2IYBUAAAAAAOuhu1u64QZpdFQ6eVIqFGxXBADA1alWTWC4o8MEiDdtMoFiAAAAAAA2qKDtAgAAAAAA2LDicem666RYTDp2TEqlzIvRAAC0mkJBmpiQNm+WrrnGPMYBAAAAALDBEawCAAAAAGA9hULS3r1SIiH9wz9IxaLU38+EDwBA65ibkxYWpN27pV27zGMbAAAAAABtgGAVAAAAAADrzXWlrVvN5KqXXjLbKA0O8sI0AKC5eZ505owUDJoJjFu2EAwGAAAAALQV13YBAAAAAAC0jYEB6T3vkUZGpPFxM/0DAIBmVCyaIHBnp/Tud5uAMKEqbHB//Md/rFtvvVXxeFydnZ22ywEAAADQBAhWAQAAAADQSMmkdPCgtG+fCVadOSP5vu2qAAA4Z25OmpqSxsakG26QenpsVwQ0RLlc1l133aWPf/zjtksBAAAA0CTYChAAAAAAgEYLBqWdO6V0WnrlFentt83WgOGw7coAAO2sVjOB33DYhIBHR812tkCbeOihhyRJjz/+uN1CAAAAADQNglUAAAAAANgyMGAmWP3859Kbb5rtltJp21UBANpRsWhCVYOD0p49Une37YqAllAqlVQqlZYuZzIZSVKlUlGlUrFVVttZ7DU9byz63nj03A76bgd9t2Ox365L3xtlsdfc1xvrcvpNsAoAAAAAAJsSCenAAROo+vnPpXxe6u9nQggAoHFmZszjz86d0q5dUiRiuyKgZTz88MNLk66We+KJJxSPxy1U1N6OHj1qu4S2RN8bj57bQd/toO927N9P3xuN+3pj5fP5S74twSoAAAAAAGwLBKTt21dvDcgL2wCA9VSrSePjUjwuXX+9NDIiOY7tqoA19cADD+iRRx656G1efvll7dmz54q+/pEjR3T48OGly5lMRqOjozp06JB6enqu6Gvi8lUqFR09elR33HGHQqGQ7XLaBn1vPHpuB323g77bQd8bj57bsThp9lIQrAIAAAAAoFn09ZmtAV991WwNmEqZ7QEBAFhrhYI0MSENDUl79/J4gw3rM5/5jO6+++6L3mZsbOyKv34kElHkPGH4UCjEC2MW0Hc76Hvj0XM76Lsd9N0O+t549LyxLqfXBKsAAAAAAGgmsZjZGrCz0wSsTp0y06vYGhAAsFampqRSSdqzR9qxQwqHbVcErJu+vj719fXZLgMAAABAiyJYBQAAAABAs3FdaetWM7Hq5ZfN1oADA1I0arsyAEArq1al06fNdMR9+6ThYbb+A5Y5fvy4ZmZmdPz4cdVqNT3//POSpB07diiZTNotDgAAAIAVBKsAAAAAAGhWPT3SjTdKP/+59MYbJljV08OL4ACAy5fNSjMz0qZNZuu/dNp2RUDT+f3f/3195StfWbr8rne9S5L0xBNP6LbbbrNUFQAAAACb2EcAAAAAAIBmFo2aqSI33igFg2Z6ValkuyoAQKuoVs22ssWi2Wr2+usJVQEX8Pjjj8v3/VUHoSoAAACgfTGxCgAAAACAZue6ZsJIZ6f0i19Ib73F9CoAwDtbnFI1PCzt2iV1d9uuCAAAAACAlkKwCgAAAACAVpFImGkjvb3Sq6+a6VUDA1IkYrsyAEAzqValiQkpFDKPG1u2mPcBAAAAAMBlIVgFAAAAAEArcV1pZETq6mJ6FQBgNaZUAQAAAACwZghWAQAAAADQipheBQBYjilVAAAAAACsOYJVAAAAAAC0KqZXAQAkplQBAAAAALBOCFYBAAAAANDqmF4FAO2JKVUAAAAAAKwrglUAAAAAAGwETK8CgPayOKVqaEjavZspVQAAAAAArAOCVQAAAAAAbCTnm17V329CVgCA1seUKgAAAAAAGoZgFQAAAAAAG83K6VXHj0uBgNTXZ94CAFqP75sJVfm8mVK1cydTqgAAAAAAWGcEqwAAAAAA2KgSCem668wL8MeOSSdOSB0dUmen7coAAJcjl5Omp6V0Wrr+eml4WAry1C4AAAAAAOuN1TcAAAAAABuZ40gDA2aqydtvS6+9ZiZYsT0gADS/xW3/XFfatUvatk2Kx21XBQAAAABA2yBYBQAAAABAOwiFpLExsx3g66+bcJXrsj0gADSjxW3/cjkznWrHDqmnx3ZVAAAAAAC0HYJVAAAAAAC0k1RKOnBAGhw006vYHhAAmksuJ01Nmd/LN95oglUEYAEAAAAAsIJgFQAAAAAA7YbtAQGg+VQqZtu/YFDas0faupVt/wAAAAAAsMxtxDcplUo6ePCgHMfR888/34hvCQAAAKANsNYArtLi9oC33CJt3262nTp9WqpWbVcGAO3D982EqtOnTej1ppuka64hVAUAAAAAQBNoSLDqd37ndzQ8PNyIbwUAAACgjbDWANZIMint329ezO/ulk6dkubmbFcFABvfwoKZGBgKSTfcYLb+6+mxXRUAAAAAADhr3YNVf/M3f6Pvfve7evTRR9f7WwEAAABoI6w1gDXmOGYrwBtvlN71LjNB5a23pFzOdmUAsOG4lYp08qT5Hbtnj5kcODoqBQK2SwMAAAAAAMsE1/OLnzlzRvfdd5+++c1vKn4Jo6tLpZJKpdLS5UwmI0mqVCqqVCrrVmerWOwBvTiHntSjH/XoR73FPrh+Q4YVNr3FPnD/MPh5WY2e1KMf9ehHPRt9YK2xtrhPr9b2Pdm0SeroMFNUjh9XLZ+XWy6ryhaBkrTUB/phLPXB8eW7jt1imoHjS+L+sYiflxWqVdVOn1Z4YUHVgQFpxw4zKVCS2vQxp+0fc1egH/XoAwAAAADb1i1Y5fu+7r77bn3sYx/TjTfeqDfffPMdP+fhhx/WQw89tOr6J5544pJeLGkXR48etV1C06En9ehHPfpRb392v+0Smgr3j3r0YzV6Uo9+1KMfRj6fb+j3Y62xfrhPr0ZPpNDCgmKTk4rmcvrZd76jUjotP7iuf6fVMp5+6inbJTSV3A6mmy3H/aNe2/fD8xTOZhWoVlXs7FRh5059d2JCmpqyXVnT4DG3Hv0wGr3WAAAAAICVLvuZ0AceeECPPPLIRW/z8ssv67vf/a6y2ayOHDlyyV/7yJEjOnz48NLlTCaj0dFRHTp0SD09PZdb6oZTqVR09OhR3XHHHQqFQrbLaQr0pB79qEc/6tGPevSjHv1YjZ7Uox/16Ee9xelPV4u1hj3cp1ejJ/Uq5bJ++Nd/rdu2blVwctJsVdXbK7VpwKparerpp57STTffrGCb9mA5+lGPftRr+354njQ7a7b86+uTtm1TpbtbR7//fR5jzuIxtx79qLdWaw0AAAAAuFKX/WzGZz7zGd19990Xvc3Y2Ji+//3v68knn1QkEqn72I033qgPf/jD+spXvrLq8yKRyKrbS1IoFGIRuQz9WI2e1KMf9ehHPfpRj37Uox+r0ZN69KMe/TDWqgesNeyjH6vRk3PK6bSC73mPQrOz0htvSGfOSNGo2cIqELBdnhXBYFChdgyKXAD9qEc/6rVdP3xfmp83R0+PtG+fNDQkhUJLW/7xGFOPftSjHwY9AAAAAGDbZT+b0dfXp76+vne83Z/+6Z/qj/7oj5Yunzp1Sh/4wAf09a9/XTfddNPlflsAAAAAGxxrDaAFuK40OGimrpw+Lb3+unTypJRISF1d5uMA0O4yGWluTkqnpYMHpU2bpPMEvAEAAAAAQPNbtz8T27x5c93lZDIpSdq+fbtGRkbW69sCAAAA2OBYawBNIBAwQYH+fml83ASs3n5b6ugwh+PYrhAAGm9hQZqZMWHTa6+VRkakeNx2VQAAAAAA4Cq00fxtAAAAAACwpkIhafNmE7A6edJsEXj8uNkeMJWyXR0ANEaxKE1NSeGwtGuX+b3I70AAAAAAADaEhgWrtm7dKt/3G/XtAAAAALQJ1hpAE4hGpe3bpaEhM7nqzTel2VkTsDo7VQ4ANpxiUZqeNlP8tmyRtm6VOjttVwUAAAAAANYQE6sAAAAAAMDaiMel3bvPBaxOnDChg85OKZ1mi0AAG0M+b7b8Cwal0VFz9PTwOw4AAAAAgA2IYBUAAAAAAFhb6bR07bVmO6xTp8z2gMePm+s7OiTXtV0hAFy+hQUzjS8SkbZtk0ZGpK4uAlUAAAAAAGxgBKsAAAAAAMD6SKXMBKvRUWl83GwR+PbbZnvAzk6zfRYANDPflzIZaX7eTOXbtUvatMmERAEAAAAAwIZHsAoAAAAAAKyveFzavt2EEc6cMQGrkyelWMxMewny9ASAJuN5JkyVyZhpe9dcY36HJZO2KwMAAAAAAA3EM5cAAAAAAKAxolFpyxZpaEiamDABq9OnTbCqp0cKhWxXCKDd1Wpmu7983kyluu468zsrHrddGQAAAAAAsIBgFQAAAAAAaKxwWBoZkQYHTcDqrbfMW8cxAatIxHaFANpNtWoCVYWC1N0t7dljfkfx+wgAAAAAgLZGsAoAAAAAANgRDErDwya8MDkpHT9uJlh5nglYxWK2KwSw0ZXL0syMCVb19Ej79kkDA0zQAwAAAAAAkghWAQAAAAAA21zXBBn6+6Xpaentt03AanJSSqfN4bq2qwSwUfi+lMtJc3Pmd0tfn9mmtK/PBD4BAAAAAADO4pkCAAAAAADQHBxH6u01x/y82R7w7belEyfM9oFdXWzLBeDKVasmTJXLScmktH27NDRkfrcQ3gQAAAAAAOdBsAoAAAAAADSfjg5zbNliJle9/bY0NSXVaub6ZNIEsQDgneTz0uysmVTV3S3t3m2mUyUStisDAAAAAABNjmAVAAAAAABoXuGwtGmTNDxsghHj49KpU9Lx4yYU0dnJ1l0AVvM8KZMx0+9iMWl01Pwe6enhdwYAAAAAALhkPIsAAAAAAACan+OYSTPd3dK2beemWJ0+bT7W2cn0GQBSqWRCmJWKlE5LBw5I/f3mfQAAAAAAgMtEsAoAAAAAALSWeNxsETgyIk1PmwlWp0+brQLTaXMEArarBNAovi9ls2Y6VSgk9faa3w99fWbqHQAAAAAAwBUiWAUAAAAAAFpTIGAm0fT3m1DFxISZYnXqlPlYR4cJYTmO7UoBrIdi0YSpikUplZJ27ZIGB6WuLn7uAQAAAADAmiBYBQAAAAAAWl8qZY7Nm83kqtOnTdBqakqKRk3IKhq1XSWAq1WpmDBVPi9FImZ70OFhM50qFrNdHQAAAAAA2GAIVgEAAAAAgI0jFJKGhsyRy0kzM9LJk+btxISZYNXRYW4HoDXUamYqXTZrptF1dko7d0o9PWbrT6ZTAQAAAACAdUKwCgAAAAAAbEyJhDlGRqRMxoSrTpyQJidNUGNxylUgYLtSACv5vrSwYKZTSeZnde9eqbfXBKv4uQUAAAAAAA1AsAoAAAAAAGxsjmOmVHV0mK0C5+bMFoGnTknj4+Y26bSUTEqua7VUoO3lciYIWamYMNXYmNTfb7b8Y9IcAAAAAABoMIJVAAAAAACgfQQCZvuwnh4T2Jidlc6cMceJEya4kU6bSVcAGqNYNGGqYtFs17m4nWd3txSN2q4OAAAAAAC0MYJVAAAAAACgPYVCZhJOf7+0c6fZKnB83Eyzmp42H08mTciKSVbA2vF9qVCQslmpVJLCYROi2rTJvE0mbVcIAAAAAAAgiWAVAAAAAACAmYozPGyOhYVz2wVOTpotAyUT9iDwAVyZWk3K583PV7VqJlP19koDA1Jnp5kU5zi2qwQAAAAAAKhDsAoAAAAAAGC5xQDVyIjZmmx+3kywWtwysFxWeHHbMoJWwIVVKtLcnGLT02YaXGentHmzCVR1drLlJgAAAAAAaHoEqwAAAAAAAC4kGjXHwIC0a5cJWU1OqvaLX5wLXEUi57YMZOIO2l2xaLb4KxSkYFCKx5XdtEm6+WYTqIpEbFcIAAAAAABwyQhWAQAAAAAAXIpgUOrpkdJpzezdK/3SL0m5nDQxYQJWs7MmWJVKmaBVIGC7YmD9ed65Lf5KJSkWM9Oodu+WOjqkeFy5hQWpv18KhWxXCwAAAAAAcFkIVgEAAAAAAFwux5HSaRO02rzZBEvm56WpKRO0Gh83gZNIxEyyisUIWmFj8H0zjSqfN28lcx8fGpL6+kyoKpk8N72tUrFWKgAAAAAAwNUiWAUAAAAAAHC14nFzDA1J5bKUyZgJPpOTJnA1N0fQCq1pZZDKccz2mOm0tH27eZtKmfs0AAAAAADABkOwCgAAAAAAYC2Fw1Jvrzm2bjXbo2Wz5lgetPJ9c1uCVmgmFwpSpVLS2Fh9kGpxKhUAAAAAAMAGRbAKAAAAAABgPUUi5ujtlbZtu3jQKhIxk68IWqFRlgepikVzORYjSAUAAAAAACCCVQAAAAAAAI21MmhVLJptA88XtAoGzbSgWMx8DsEWXA3fN1tVFosmTFWpmOsJUgEAAAAAAJwXwSoAAAAAAACbolFzLA9aZbNSLncuZJXNSlNThK1w6S4UogqHzf1ncFDq6jJbUSaTZlIa9yUAAAAAAIA6BKsAAAAAAACayWLQqq/PXPa8c1u1EbbC+VxqiCoeN0GqeJytJgEAAAAAAC4BwSoAAAAAAIBm5romDJNIXH7YKhIx4ZpwWAqFCFxtBNWqVCqZIFWpRIgKAAAAAABgHRGsAgAAAAAAaDWXGraanzcBnIWFcwEcxzEhq+WhqyBPETWVWs38vy0epZIJy0nm/yocNv9/3d1SZychKgAAAAAAgHXCs2YAAAAAAAAbwfnCVtK5LeKKRRPQKRSkTMaErfJ5E76qVk1wJxAwgZ3lwSvXtfdv2sgWt+9bPnnqfP8PXV1SOm1CU9GouX7xLRPIAAAAAAAA1hXBKgAAAAAAgI1scSpVOl1/veeZQE+pdC50lcuZ0FU+b7YVXD4pSTKBn2Cw/lj8WjB8X061agJskglLLR612rl+Lp8clkxKqZQ5FoNTi+EpJlABAAAAAABYQ7AKAAAAAACgHbmuFIuZY6Va7dyUq0rl3LG41WChYC7n81KxqOjsrPT22+eCVisDWIGA+X4rj1aYuOR55lgMRdVq5vLKwJS09PHwwoIJqUWjJjyVSpk+x+Mm5BYKnQtVLd4GAAAAAAAATYdgFQAAAAAAAOoFAue2FbyQanUpXDWTyUg33WSur1RMIKtQMMfiVneLAaXlIaXl07Acx1xeDFsFAub95W8Xb7fSyuuWf92V1y2vY/mx/Psv//zzBcICAROG6ug4F05bDEtJmimVpPe+1wSpgsHWCJABAAAAAABgFYJVAAAAAAAAuHzLJlJV0mlpcPD8k5dqtXNTnRZDVe/0djG0tfh28f3FwNPy4NPK6xzn3LFo8f3FgFYwaCZHBQLnJkgtBqYu5e3ybRBXqlRUTSRMqIpJVAAAAAAAAC2NYBUAAAAAAADWTyBwbtrUWjtf0EqqD1IBAAAAAAAAV4hgFQAAAAAAAFoTASoAAAAAAACsI9d2AQAAAAAAAAAAAAAAAADQbAhWAQAAAAAAAAAAAAAAAMAKBKsAAAAAAAAAAAAAAAAAYAWCVQAAAAAAAAAAAAAAAACwAsEqAAAAAAAAAAAAAAAAAFiBYBUAAAAAAAAAAAAAAAAArECwCgAAAAAAAAAAAAAAAABWIFgFAAAAAAAAAAAAAAAAACsQrAIAAAAAAAAAAAAAAACAFQhWAQAAAAAAAAAAAAAAAMAKBKsAAAAAAAAAAAAAAAAAYAWCVQAAAAAAAAAAAAAAAACwAsEqAAAAAAAAAAAAAAAAAFiBYBUAAAAAAAAAAAAAAAAArECwCgAAAAAAAAAAAAAAAABWIFgFAAAAAAAAAAAAAAAAACsQrAIAAAAAAAAAAAAAAACAFQhWAQAAAAAAAAAAAAAAAMAK6xqs2rp1qxzHqTs+97nPree3BAAAANAGWGsAAAAAWGtvvvmm7r33Xm3btk2xWEzbt2/Xgw8+qHK5bLs0AAAAAJYE1/sb/OEf/qHuu+++pcupVGq9vyUAAACANsBaAwAAAMBaeuWVV+R5nr785S9rx44devHFF3Xfffcpl8vp0UcftV0eAAAAAAvWPViVSqU0ODh4SbctlUoqlUpLl+fn5yVJMzMz61Jbq6lUKsrn85qenlYoFLJdTlOgJ/XoRz36UY9+1KMf9ejHavSkHv2oRz/qZbNZSZLv+w39vqw11g736dXoST36UY9+1KMf9ehHPfqxGj2pRz/q0Y96jV5r3HnnnbrzzjuXLo+NjenVV1/Vl770pQsGq1hrNAd+duyg741Hz+2g73bQdzvoe+PRczsuZ63h+Ou4Itm6dauKxaIqlYo2b96sf/Wv/pU+/elPKxg8f57rD/7gD/TQQw+tVzkAAAAA1tHbb7+tkZGRhnwv1hoAAABA+2jkWmOlf//v/73+9m//Vj/96U/P+3HWGgAAAEDrupS1xroGqz7/+c/r+uuvV3d3t370ox/pyJEjuueee/T5z3/+vLdf+Zcdc3Nz2rJli44fP66Ojo71KrNlZDIZjY6O6u2331Y6nbZdTlOgJ/XoRz36UY9+1KMf9ejHavSkHv2oRz/q+b6vbDar4eFhua7bkO/JWmNtcZ9ejZ7Uox/16Ec9+lGPftSjH6vRk3r0ox79qGdjrbHcsWPHdMMNN+jRRx+t24Z8OdYazYGfHTvoe+PRczvoux303Q763nj03I7LWWtc9laADzzwgB555JGL3ubll1/Wnj17dPjw4aXrDhw4oHA4rH/zb/6NHn74YUUikVWfF4lEznt9R0cHd6Bl0uk0/ViBntSjH/XoRz36UY9+1KMfq9GTevSjHv04Zy1eMGCtYR/36dXoST36UY9+1KMf9ehHPfqxGj2pRz/q0Y9zGr3WWHTy5Endeeeduuuuuy4YqpJYazQbfnbsoO+NR8/toO920Hc76Hvj0fPGu9S1xmUHqz7zmc/o7rvvvuhtxsbGznv9TTfdpGq1qjfffFO7d+++3G8NAAAAYANjrQEAAABgPVzuWuPUqVM6dOiQbr31Vv3FX/zFOlcHAAAAoJlddrCqr69PfX19V/TNnn/+ebmuq/7+/iv6fAAAAAAbF2sNAAAAAOvhctYaJ0+e1KFDh3TDDTfoscces7IFIQAAAIDmcdnBqkv15JNP6umnn9ahQ4eUSqX05JNP6tOf/rR+/dd/XV1dXZf0NSKRiB588MHzjtFtR/RjNXpSj37Uox/16Ec9+lGPfqxGT+rRj3r0wy7WGmuPfqxGT+rRj3r0ox79qEc/6tGP1ehJPfpRj37YdfLkSd12223asmWLHn30UU1OTi59bHBw8JK+Bv+HdtB3O+h749FzO+i7HfTdDvreePS8+Tm+7/vr8YWfffZZ/dt/+2/1yiuvqFQqadu2bfrIRz6iw4cPc4cAAAAAcMVYawAAAABYD48//rjuueee835snV5KAQAAANDk1i1YBQAAAAAAAAAAAAAAAACtis3BAQAAAAAAAAAAAAAAAGAFglUAAAAAAAAAAAAAAAAAsALBKgAAAAAAAAAAAAAAAABYgWAVAAAAAAAAAAAAAAAAAKzQUsGqrVu3ynGcuuNzn/uc7bKsK5VKOnjwoBzH0fPPP2+7HGt+9Vd/VZs3b1Y0GtXQ0JA+8pGP6NSpU7bLsuLNN9/Uvffeq23btikWi2n79u168MEHVS6XbZdmzR//8R/r1ltvVTweV2dnp+1yrPjiF7+orVu3KhqN6qabbtKPf/xj2yVZ8fd///f6lV/5FQ0PD8txHH3zm9+0XZJVDz/8sN797ncrlUqpv79fH/zgB/Xqq6/aLsuaL33pSzpw4IDS6bTS6bRuueUW/c3f/I3tsprG5z73OTmOo0996lO2S7HmD/7gD1adj+7Zs8d2WVgDrDXOj7WGwVrjHNYaq7HWYK2xiLVGPdYa9VhrXBxrDdYaGxXnTnZwftYYnAM2Huebjcc5rR2cO9vH+XljsAZoHS0VrJKkP/zDP9T4+PjS8Zu/+Zu2S7Lud37ndzQ8PGy7DOsOHTqkv/qrv9Krr76q//W//pdee+01/dqv/Zrtsqx45ZVX5HmevvzlL+ull17Sn/zJn+jP//zP9bu/+7u2S7OmXC7rrrvu0sc//nHbpVjx9a9/XYcPH9aDDz6oZ599Vtddd50+8IEPaGJiwnZpDZfL5XTdddfpi1/8ou1SmsIPf/hD3X///Xrqqad09OhRVSoV/ZN/8k+Uy+Vsl2bFyMiIPve5z+mZZ57RT3/6U/3jf/yP9c/+2T/TSy+9ZLs0637yk5/oy1/+sg4cOGC7FOuuvfbauvPR//t//6/tkrBGWGusxlrDYK1xDmuN1VhrsNZYxFqjHmuNeqw1Loy1xjmsNTYezp3saPfzs0bgHNAOzjcbj3NaOzh3tovz88ZiDdAi/BayZcsW/0/+5E9sl9FUvvOd7/h79uzxX3rpJV+S/9xzz9kuqWl861vf8h3H8cvlsu1SmsJ//I//0d+2bZvtMqx77LHH/I6ODttlNNx73vMe//7771+6XKvV/OHhYf/hhx+2WJV9kvxvfOMbtstoKhMTE74k/4c//KHtUppGV1eX/9/+23+zXYZV2WzW37lzp3/06FH/fe97n//JT37SdknWPPjgg/51111nuwysA9Yaq7HWuDDWGvVYaxisNQzWGgZrjdVYa6zGWoO1xnKsNdoH506N067nZ43AOaB9nG/awTmtPZw7Nwbn543FGqB1tNzEqs997nPq6enRu971Lv2n//SfVK1WbZdkzZkzZ3Tffffpf/yP/6F4PG67nKYyMzOjr371q7r11lsVCoVsl9MU5ufn1d3dbbsMWFAul/XMM8/o9ttvX7rOdV3dfvvtevLJJy1WhmY0Pz8vSfy+kFSr1fS1r31NuVxOt9xyi+1yrLr//vv1T//pP637PdLOfvGLX2h4eFhjY2P68Ic/rOPHj9suCWuEtcY5rDUujLXGaqw12hdrDVwO1hrnsNY4h7VGPdYa7YFzJ7Q6zgHRzjinbTzOnRuL8/PGYw3QGoK2C7gc/+7f/Ttdf/316u7u1o9+9CMdOXJE4+Pj+vznP2+7tIbzfV933323Pvaxj+nGG2/Um2++abukpvDZz35Wf/Znf6Z8Pq+bb75Z3/72t22X1BSOHTumL3zhC3r00UdtlwILpqamVKvVNDAwUHf9wMCAXnnlFUtVoRl5nqdPfepT+qVf+iXt27fPdjnWvPDCC7rllltULBaVTCb1jW98Q9dcc43tsqz52te+pmeffVY/+clPbJfSFG666SY9/vjj2r17t8bHx/XQQw/pH/2jf6QXX3xRqVTKdnm4Cqw1zmGtcX6sNc6PtUZ7Y62BS8Vaw2CtUY+1Rj3WGu2BcydsBJwDol1xTttYnDs3HufnjccaoHVYn1j1wAMPyHGcix6LJ2KHDx/WbbfdpgMHDuhjH/uY/vN//s/6whe+oFKpZPlfsXYutR9f+MIXlM1mdeTIEdslr6vLuX9I0m//9m/rueee03e/+10FAgH9xm/8hnzft/gvWFuX2w9JOnnypO68807ddddduu+++yxVvj6upB8ALuz+++/Xiy++qK997Wu2S7Fq9+7dev755/X000/r4x//uD760Y/qH/7hH2yXZcXbb7+tT37yk/rqV7+qaDRqu5ym8Mu//Mu66667dODAAX3gAx/Qd77zHc3Nzemv/uqvbJeG82CtUY+1Rj3WGvVYa9RjrQGsLdYaBmuNc1hrrMZao7Vw7tR4nJ8BsI1z2sbi3LmxOD+3gzVA63B8y88ET05Oanp6+qK3GRsbUzgcXnX9Sy+9pH379umVV17R7t2716vEhrrUfvyLf/Ev9L//9/+W4zhL19dqNQUCAX34wx/WV77ylfUutSGu5v5x4sQJjY6O6kc/+tGGGQ15uf04deqUbrvtNt188816/PHH5brWs5Rr6kruH48//rg+9alPaW5ubp2rax7lclnxeFz/83/+T33wgx9cuv6jH/2o5ubm9K1vfctecZY5jqNvfOMbdX1pV5/4xCf0rW99S3//93+vbdu22S6nqdx+++3avn27vvzlL9supeG++c1v6p//83+uQCCwdF2tVpPjOHJdV6VSqe5j7erd7363br/9dj388MO2S8EKrDXqsdaox1qjHmuNeqw1Lg1rjQtjrXEOa40LY63BWuOdsNZoXpw7NR7nZ82Dc8DmwPlmY3FOa187nzs3AufnzYM1QHOyvhVgX1+f+vr6ruhzn3/+ebmuq/7+/jWuyp5L7cef/umf6o/+6I+WLp86dUof+MAH9PWvf1033XTTepbYUFdz//A8T5I21JSBy+nHyZMndejQId1www167LHHNuRi/WruH+0kHA7rhhtu0Pe+972lRZbnefre976nT3ziE3aLg3W+7+s3f/M39Y1vfEM/+MEPWBSeh+d5G+qx5HK8//3v1wsvvFB33T333KM9e/bos5/9LAspSQsLC3rttdf0kY98xHYpOA/WGvVYa9RjrVGPtUY91hqXhrUGLoa1xjtjrcFa42JYazQ3zp0aj/Oz5sE5INoJ57TNo53PnRuB8/PmwBqgeVkPVl2qJ598Uk8//bQOHTqkVCqlJ598Up/+9Kf167/+6+rq6rJdXsNt3ry57nIymZQkbd++XSMjIzZKsurpp5/WT37yE733ve9VV1eXXnvtNf3e7/2etm/fvmH+gvxynDx5Urfddpu2bNmiRx99VJOTk0sfGxwctFiZPcePH9fMzIyOHz+uWq2m559/XpK0Y8eOpZ+fjezw4cP66Ec/qhtvvFHvec979F/+y39RLpfTPffcY7u0hltYWNCxY8eWLr/xxht6/vnn1d3dvep3azu4//779Zd/+Zf61re+pVQqpdOnT0uSOjo6FIvFLFfXeEeOHNEv//Iva/Pmzcpms/rLv/xL/eAHP9D/+T//x3ZpVqRSKe3bt6/uukQioZ6enlXXt4vf+q3f0q/8yq9oy5YtOnXqlB588EEFAgH9y3/5L22XhqvAWqMea416rDXqsdZYjbUGa41FrDXqsdaox1qjHmuN1VhrbEycO9nR7udnjcA5oB2cbzYe57R2cO7ceJyf28EaoIX4LeKZZ57xb7rpJr+jo8OPRqP+3r17/f/wH/6DXywWbZfWFN544w1fkv/cc8/ZLsWK//f//p9/6NAhv7u7249EIv7WrVv9j33sY/6JEydsl2bFY4895ks679GuPvrRj563H0888YTt0hrmC1/4gr9582Y/HA7773nPe/ynnnrKdklWPPHEE+e9L3z0ox+1XZoVF/pd8dhjj9kuzYp//a//tb9lyxY/HA77fX19/vvf/37/u9/9ru2ymsr73vc+/5Of/KTtMqz50Ic+5A8NDfnhcNjftGmT/6EPfcg/duyY7bJwlVhrXBxrDdYay7HWWI21BmuNRaw16rHWqMda452x1mCtsRFx7mQH52eNwTlg43G+2Xic09rBuXNzaPfz80ZgDdA6HN/3/auLZgEAAAAAAAAAAAAAAADAxsJm3gAAAAAAAAAAAAAAAACwAsEqAAAAAAAAAAAAAAAAAFiBYBUAAAAAAAAAAAAAAAAArECwCgAAAAAAAAAAAAAAAABWIFgFAAAAAAAAAAAAAAAAACsQrAIAAAAAAAAAAAAAAACAFQhWAQAAAAAAAAAAAAAAAMAKBKsAAAAAAAAAAAAAAAAAYAWCVQAAAAAAAAAAAAAAAACwAsEqAAAAAAAAAAAAAAAAAFiBYBUAAAAAAAAAAAAAAAAArPD/A/RxV8piUdyLAAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 2400x800 with 3 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA18AAAIjCAYAAAD80aFnAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAXLpJREFUeJzt3Xd8VFX+//H3pCekURNCEQggohA0LIgUQUokytKkiUtRUZSokFUEQZoliksTEXBdwS+KiwLiioCESBGlSbEhCIiilFAUAoSEkJzfH/wyMiaBMISZucPr+XjMQ+beM/eek5wZ553zmTs2Y4wRAAAAAOCq8nF3BwAAAADgWkD4AgAAAAAXIHwBAAAAgAsQvgAAAADABQhfAAAAAOAChC8AAAAAcAHCFwAAAAC4AOELAAAAAFyA8AUAAAAALkD4AoASZrPZNGbMGHd3Ay70888/y2azafbs2e7uCiyI1wzg2kH4AuARZs+eLZvN5nCrUKGCWrVqpaVLl16182ZmZmrMmDFatWpVsdqvWrWqQD/zbz179iz0MV9++aXGjBmj48ePl1zH3eCvv6OgoCDVrl1bSUlJSk9Pd3f3rnmLFy/WnXfeqbJly9p/N08++aSOHTvm7q4Vae/evUpKSlLt2rUVEhKikJAQ1a1bV4MGDdI333zj7u6VqCVLlhCwAMjP3R0AgAuNGzdO1atXlzFG6enpmj17thITE/Xxxx/r7rvvLvHzZWZmauzYsZKkli1bFvtxjz/+uP72t785bKtWrZok6cyZM/Lz+/Pl9csvv9TYsWPVr18/RUZGXmmX3S7/d5SVlaW1a9dq+vTpWrJkib777juFhIS4u3tucd111+nMmTPy9/d3y/mffPJJTZgwQXFxcXr66adVpkwZbdmyRa+99pr++9//Ki0tTddff71b+laUxYsXq0ePHvLz81Pv3r0VFxcnHx8f7dixQwsXLtT06dO1d+9eXXfdde7uaolYsmSJpk2bVmgA++trBgDvxTMdgEdp3769GjZsaL//wAMPKCoqSu+9995VCV/Oat68ue65555C9wUFBbm4N6514e/owQcfVNmyZTVx4kR99NFH6tWrV6GPOX36tEqVKuWS/rnyXPnyVwLd4b333tOECRPUo0cPvfvuu/L19bXv69evn1q1aqVu3bppy5YtLn2Df7Hfw549e9SzZ09dd911SktLU8WKFR32v/zyy3r99dfl4+O5BTolOc+8/TUDwJ8891UNACRFRkYqODi4wJvGvLw8TZ48WTfeeKOCgoIUFRWlhx9+WH/88YdDu6+++koJCQkqV66cgoODVb16dd1///2Szn9Op3z58pKksWPH2svprrQ06MJjjBkzRk899ZQkqXr16vZz/Pzzz/a2SUlJWrRokW666SYFBgbqxhtv1LJlywocd//+/br//vsVFRVlb/fWW28VaDd16lTdeOONCgkJUenSpdWwYUPNnTvXvv/kyZMaPHiwqlWrpsDAQFWoUEFt27bVli1bnBrvHXfcIel8CZl0/g1/aGio9uzZo8TERIWFhal3796Szr9h/ec//6kqVaooMDBQ119/vf71r3/JGONwzDNnzujxxx9XuXLlFBYWpr///e/av39/gd/PmDFjZLPZtH37dt17770qXbq0mjVrZt//zjvvKD4+XsHBwSpTpox69uypX3/91eFcu3btUteuXRUdHa2goCBVrlxZPXv21IkTJ+xtUlNT1axZM0VGRio0NFTXX3+9nnnmGfv+oj7z9dlnn6l58+YqVaqUIiMj1bFjR/3www8ObfLHsHv3bvvqaEREhPr376/MzMxL/vzHjh2r0qVL64033nAIXpLUqFEjPf300/r22281f/58SVJSUpJCQ0MLPXavXr0UHR2t3Nxc+7alS5faxxAWFqa77rpL33//vcPjLvY7L8z48eN1+vRpzZo1q0DwkiQ/Pz89/vjjqlKlisP2HTt26J577lGZMmUUFBSkhg0b6n//+59Dm/zy2C+++ELJyckqX768SpUqpc6dO+vIkSMFznWl4/v888/VrVs3Va1aVYGBgapSpYqGDBmiM2fOODx+2rRpkuRQupuvsNedrVu3qn379goPD1doaKhat26t9evXOz3Wi70WAnAdVr4AeJQTJ07o6NGjMsbo8OHDmjp1qk6dOqX77rvPod3DDz+s2bNnq3///nr88ce1d+9evfbaa9q6dau++OIL+fv76/Dhw2rXrp3Kly+vYcOGKTIyUj///LMWLlwoSSpfvrymT5+uRx55RJ07d1aXLl0kSfXr179kP0+ePKmjR486bCtTpkyBv9R36dJFP/74o9577z1NmjRJ5cqVs58739q1a7Vw4UI9+uijCgsL06uvvqquXbtq3759Klu2rCQpPT1dt956qz2slS9fXkuXLtUDDzygjIwMDR48WJL073//W48//rjuuecePfHEE8rKytI333yjDRs26N5775UkDRw4UPPnz1dSUpLq1q2rY8eOae3atfrhhx90yy23FPdXZbdnzx5JsvdVks6dO6eEhAQ1a9ZM//rXvxQSEiJjjP7+979r5cqVeuCBB9SgQQN9+umneuqpp7R//35NmjTJ/vh+/frp/fff1z/+8Q/deuutWr16te66664i+9CtWzfVqlVLL774oj3IvfDCC3r22WfVvXt3Pfjggzpy5IimTp2qFi1aaOvWrYqMjNTZs2eVkJCg7OxsPfbYY4qOjtb+/fu1ePFiHT9+XBEREfr+++919913q379+ho3bpwCAwO1e/duffHFFxf9uaxYsULt27dXjRo1NGbMGJ05c0ZTp05V06ZNtWXLFnuZar7u3burevXqSklJ0ZYtW/Tmm2+qQoUKevnll4s8x65du7Rz507169dP4eHhhbbp06ePRo8ercWLF6tnz57q0aOHpk2bpk8++UTdunWzt8vMzNTHH3+sfv362UPcnDlz1LdvXyUkJOjll19WZmampk+frmbNmmnr1q0OYyjsd16UxYsXq2bNmmrcuPFFf4YX+v7779W0aVNVqlRJw4YNU6lSpfT++++rU6dOWrBggTp37uzQ/rHHHlPp0qU1evRo/fzzz5o8ebKSkpI0b948e5uSGN8HH3ygzMxMPfLIIypbtqw2btyoqVOn6rffftMHH3wg6fzr1YEDB5Samqo5c+YUa6zNmzdXeHi4hg4dKn9/f82cOVMtW7bU6tWrC/zcLjXWS70WAnAhAwAeYNasWUZSgVtgYKCZPXu2Q9vPP//cSDLvvvuuw/Zly5Y5bP/www+NJLNp06Yiz3vkyBEjyYwePbpY/Vy5cmWh/ZRk9u7da4wxBY73yiuvOOy/kCQTEBBgdu/ebd/29ddfG0lm6tSp9m0PPPCAqVixojl69KjD43v27GkiIiJMZmamMcaYjh07mhtvvPGiY4iIiDCDBg0q1ngvlP87WrFihTly5Ij59ddfzX//+19TtmxZExwcbH777TdjjDF9+/Y1ksywYcMcHr9o0SIjyTz//PMO2++55x5js9nsP4PNmzcbSWbw4MEO7fr161fgZzt69GgjyfTq1cuh7c8//2x8fX3NCy+84LD922+/NX5+fvbtW7duNZLMBx98UOS4J02aZCSZI0eOFNlm7969RpKZNWuWfVuDBg1MhQoVzLFjx+zbvv76a+Pj42P69OlTYAz333+/wzE7d+5sypYtW+Q5jfnzZzpp0qSLtgsPDze33HKLMcaYvLw8U6lSJdO1a1eHNu+//76RZNasWWOMMebkyZMmMjLSDBgwwKHdoUOHTEREhMP2on7nhTlx4oSRZDp16lRg3x9//GGOHDliv+XPa2OMad26talXr57Jysqyb8vLyzO33XabqVWrln1b/jxt06aNycvLs28fMmSI8fX1NcePHy/R8V3Yx3wpKSnGZrOZX375xb5t0KBBpqi3XX+d1506dTIBAQFmz5499m0HDhwwYWFhpkWLFpc91uK8FgJwDcoOAXiUadOmKTU1VampqXrnnXfUqlUrPfjggw5/of3ggw8UERGhtm3b6ujRo/ZbfHy8QkNDtXLlSkmyX9xi8eLFysnJKdF+jho1yt7P/Ft0dLRTx2rTpo1iY2Pt9+vXr6/w8HD99NNPkiRjjBYsWKAOHTrIGOMw5oSEBJ04ccJeMhgZGanffvtNmzZtKvJ8kZGR2rBhgw4cOOB0f8uXL68qVaqoZ8+eCg0N1YcffqhKlSo5tHvkkUcc7i9ZskS+vr56/PHHHbb/85//lDHGflXL/JLLRx991KHdY489VmSfBg4c6HB/4cKFysvLU/fu3R1+XtHR0apVq5Z9jkREREiSPv300yJL/PLn0UcffaS8vLwi+3ChgwcPatu2berXr5/KlClj316/fn21bdtWS5YsueQYmjdvrmPHjikjI6PI85w8eVKSFBYWdtH+hIWF2Y9js9nUrVs3LVmyRKdOnbK3mTdvnipVqmQv20xNTdXx48fVq1cvh5+hr6+vGjdubP8ZXuivv/PC5PcjNDS0wL6WLVuqfPny9lt+qd7vv/+uzz77TN27d7evOh89elTHjh1TQkKCdu3apf379zsc66GHHnIo7WvevLlyc3P1yy+/lOj4goOD7f8+ffq0jh49qttuu03GGG3duvWSP4+/ys3N1fLly9WpUyfVqFHDvr1ixYq69957tXbt2gJz4lJjvZqvhQAuD2WHADxKo0aNHC640atXL918881KSkrS3XffrYCAAO3atUsnTpxQhQoVCj3G4cOHJUm33367unbtqrFjx2rSpElq2bKlOnXqpHvvvVeBgYFX1M969eqpTZs2V3SMfFWrVi2wrXTp0vbPrx05ckTHjx/XG2+8oTfeeKPQY+SP+emnn9aKFSvUqFEj1axZU+3atdO9996rpk2b2tuOHz9effv2VZUqVRQfH6/ExET16dPH4Y3exUybNk21a9eWn5+foqKidP311xcot/Tz81PlypUdtv3yyy+KiYkpEBRuuOEG+/78//r4+Kh69eoO7WrWrFlkn/7adteuXTLGqFatWoW2z78qYfXq1ZWcnKyJEyfq3XffVfPmzfX3v/9d9913nz2Y9ejRQ2+++aYefPBBDRs2TK1bt1aXLl10zz33FHlBiPyxFHaFwRtuuEGffvppgQs2/HUelC5dWpL0xx9/FFlSmP+zzA9hRTl58qTD86VHjx6aPHmy/ve//+nee+/VqVOntGTJEj388MP2N/G7du2S9Odn+v7qr30q7Hd+sT5fGPzyzZw5UydPnlR6erpDqfHu3btljNGzzz6rZ599ttDjHj582OEPABf7eUolN759+/Zp1KhR+t///lfgM6cXfm6wuI4cOaLMzMwi505eXp5+/fVX3Xjjjfbtlxrr1XwtBHB5CF8APJqPj49atWqlKVOmaNeuXbrxxhuVl5enChUq6N133y30Mfmfp7LZbJo/f77Wr1+vjz/+WJ9++qnuv/9+TZgwQevXry/0L+/u8NeLJOQz//+zS/mrLffdd5/69u1baNv8z6ndcMMN2rlzpxYvXqxly5ZpwYIFev311zVq1Cj7JfW7d++u5s2b68MPP9Ty5cv1yiuv6OWXX9bChQvVvn37S/b3rwG5MIGBgS69Ut2Fqw/S+Z+ZzWbT0qVLC/35Xvi7nzBhgvr166ePPvpIy5cv1+OPP66UlBStX79elStXVnBwsNasWaOVK1fqk08+0bJlyzRv3jzdcccdWr58eZG/v8t1qXlQmPzgerHvxPrll1+UkZGhunXr2rfdeuutqlatmt5//33de++9+vjjj3XmzBn16NHD3iZ/3s2ZM6fQVd2/XgSnuL/ziIgIVaxYUd99912BffmfZcq/IM1f+/Lkk08qISGh0OP+NZwX93l1JePLzc1V27Zt9fvvv+vpp59WnTp1VKpUKe3fv1/9+vUr9krplbrUWK3yWghcCwhfADzeuXPnJP35l/LY2FitWLFCTZs2LfCmuzC33nqrbr31Vr3wwguaO3euevfurf/+97968MEHHUp1rpYrPUf58uUVFham3NzcYq22lSpVSj169FCPHj109uxZdenSRS+88IKGDx9uv6R1xYoV9eijj+rRRx/V4cOHdcstt+iFF14oVvhy1nXXXacVK1bo5MmTDqtfO3bssO/P/29eXp727t3rsHK1e/fuYp8rNjZWxhhVr15dtWvXvmT7evXqqV69eho5cqS+/PJLNW3aVDNmzNDzzz8v6fwfAVq3bq3WrVtr4sSJevHFFzVixAitXLmy0N9J/lh27txZYN+OHTtUrly5ErlMee3atVW7dm0tWrRIU6ZMKbT88P/+7/8kqcBXNXTv3l1TpkxRRkaG5s2bp2rVqunWW2+1788vha1QoUKJrfLmu+uuu/Tmm29q48aNatSo0SXb56/K+vv7l1hfSmJ83377rX788Ue9/fbb6tOnj317ampqgbbFfR0oX768QkJCipw7Pj4+Ba4CWVwXey0E4Bp85guAR8vJydHy5csVEBBg/yt/9+7dlZubq+eee65A+3Pnzun48eOSzpfc/HXVoEGDBpKk7OxsSbJfsSz/MVdD/ptsZ8/h6+urrl27asGCBYWuFlx4Seljx4457AsICFDdunVljFFOTo5yc3MLlEJVqFBBMTEx9p/J1ZKYmKjc3Fy99tprDtsnTZokm81mD375Kxuvv/66Q7upU6cW+1xdunSRr6+vxo4dW2AOGGPsP6eMjAx7uM9Xr149+fj42H8ev//+e4Hj/3Ue/VXFihXVoEEDvf322w6/9++++07Lly9XYmJiscdyKaNGjdIff/yhgQMHOlwiXpI2b96sl19+WTfddJO6du3qsK9Hjx7Kzs7W22+/rWXLlql79+4O+xMSEhQeHq4XX3yx0M8JFXbZ9uIaOnSoQkJCdP/99ys9Pb3A/r/+zipUqKCWLVtq5syZOnjwYIn0pSTGl7/idGF/jTGaMmVKgbbFfR3w9fVVu3bt9NFHHzmsAKanp2vu3Llq1qxZkWWoRSnOayEA12DlC4BHWbp0qX0l5PDhw5o7d6527dqlYcOG2d9w3H777Xr44YeVkpKibdu2qV27dvL399euXbv0wQcfaMqUKbrnnnv09ttv6/XXX1fnzp0VGxurkydP6t///rfCw8Ptb36Dg4NVt25dzZs3T7Vr11aZMmV000036aabbiqxMcXHx0uSRowYoZ49e8rf318dOnS4rJWPl156SStXrlTjxo01YMAA1a1bV7///ru2bNmiFStW2ANCu3btFB0draZNmyoqKko//PCDXnvtNd11110KCwvT8ePHVblyZd1zzz2Ki4tTaGioVqxYoU2bNmnChAklNubCdOjQQa1atdKIESP0888/Ky4uTsuXL9dHH32kwYMH21ci4uPj1bVrV02ePFnHjh2zX2r+xx9/lFS8FYTY2Fg9//zzGj58uH7++Wd16tRJYWFh2rt3rz788EM99NBDevLJJ/XZZ58pKSlJ3bp1U+3atXXu3DnNmTPHHnglady4cVqzZo3uuusuXXfddTp8+LBef/11Va5c2eE7xf7qlVdeUfv27dWkSRM98MAD9kvNR0REXPF3yV2od+/e2rRpk6ZMmaLt27erd+/eKl26tLZs2aK33npLZcuW1fz58+2fc8t3yy23qGbNmhoxYoSys7MdSg6l8595mj59uv7xj3/olltuUc+ePVW+fHnt27dPn3zyiZo2bVogSBdXrVq1NHfuXPXq1UvXX3+9evfurbi4OBljtHfvXs2dO1c+Pj4On7GaNm2amjVrpnr16mnAgAGqUaOG0tPTtW7dOv3222/6+uuvL6sPJTG+OnXqKDY2Vk8++aT279+v8PBwLViwoMBnv6Q/Xwcef/xxJSQkyNfXVz179iz0uM8//7z9u+UeffRR+fn5aebMmcrOztb48eMva5ySivVaCMBFXHtxRQAoXGGXmg8KCjINGjQw06dPd7iMcr433njDxMfHm+DgYBMWFmbq1atnhg4dag4cOGCMMWbLli2mV69epmrVqiYwMNBUqFDB3H333earr75yOM6XX35p4uPjTUBAwCUvO59/qfmLXZq8sGM899xzplKlSsbHx6fAZekLu+z7ddddZ/r27euwLT093QwaNMhUqVLF+Pv7m+joaNO6dWvzxhtv2NvMnDnTtGjRwpQtW9YEBgaa2NhY89RTT5kTJ04YY4zJzs42Tz31lImLizNhYWGmVKlSJi4uzrz++utFjidf/u/oUper7tu3rylVqlSh+06ePGmGDBliYmJijL+/v6lVq5Z55ZVXCvx+T58+bQYNGmTKlCljQkNDTadOnczOnTuNJPPSSy/Z2+Vfpr2oy8AvWLDANGvWzJQqVcqUKlXK1KlTxwwaNMjs3LnTGGPMTz/9ZO6//34TGxtrgoKCTJkyZUyr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devWvaz+AAA8B+ELAGAZr7/+upo2baqGDRtqzJgxql+/vnx8fLRp0ybt2LFD8fHxatOmjZo0aaJOnTpp/Pjxql27tg4cOKBPPvlEnTt3LlAmWJiwsDA9+eSTGjJkiPLy8tSsWTOdOHFCX3zxhcLDwx0C0V/VqlVLCxcuVIcOHWSz2fTss88WWImqVq2a1qxZo549eyowMFDlypUrcJynnnpK3bt3180336w2bdro448/1sKFCx2unAgAsBbCFwDAMmJjY7V161a9+OKLGj58uH777TcFBgaqbt26evLJJ/Xoo4/KZrNpyZIlGjFihPr3768jR44oOjpaLVq0UFRUVLHP9dxzz6l8+fJKSUnRTz/9pMjISN1yyy165plnLvq4iRMn6v7779dtt92mcuXK6emnn1ZGRoZDm3Hjxunhhx9WbGyssrOzZYwpcJxOnTppypQp+te//qUnnnhC1atX16xZs9SyZctijwEA4FlsprBXfAAAAABAieJ7vgAAAADABQhfAAAAAOAChC8AAAAAcAHCFwAAAAC4AOELAAAAAFyA8AUAAAAALkD4AgAAAAAXIHwBAAAAgAsQvgAAAADABQhfAAAAAOAChC8AAAAAcIH/Bzo4ofHmky5yAAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 1000x600 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Program la Evolución_of_morphological_trees.py\n",
    "# Morphological trees considered here are like lighting trees:\n",
    "# a tree extends the electrical thread and at each node there is lamp.\n",
    "# Each lamp has a given power and a circle of illumination,\n",
    "# whose radius is determined by a threshold intensity.\n",
    "# In morphology, this corresponds with a threshold concentration of a messenger.\n",
    "# la Evolución is given the task of illuminating\n",
    "# the area determined by a random tree.\n",
    "\n",
    "\n",
    "\n",
    "import random\n",
    "import matplotlib.pyplot as plt\n",
    "import matplotlib.patches as patches\n",
    "import numpy as np\n",
    "from numpy import array as Array\n",
    "import copy # For deep copying trees during reproduction and mutation\n",
    "import sys # Import sys module to adjust recursion limit\n",
    "\n",
    "sys.setrecursionlimit(3000) # Increase the recursion limit for potentially deep trees\n",
    "\n",
    "# --- SPATIAL TREE NODE FOR DIFFUSION ---\n",
    "\n",
    "class SpatialTreeNode_Evolution_Diffusion:\n",
    "    def __init__(self, value, x, y, radius, occupied_squares_set, diffusion_nodes_info):\n",
    "        self.value = value\n",
    "        self.x = x\n",
    "        self.y = y\n",
    "        self.children = []\n",
    "\n",
    "        self.radius = radius\n",
    "        self.occupied_squares_set = occupied_squares_set  # Reference to the set of squares occupied by *this* tree's nodes\n",
    "        self.diffusion_nodes_info = diffusion_nodes_info  # Reference to the list of (x,y,radius) for *all* nodes in *this* tree\n",
    "\n",
    "        self.occupied_squares_set.add((x, y))  # Add current node's (x,y) square to the set\n",
    "        self.diffusion_nodes_info.append((x, y, radius))  # Add current node's (x,y,radius) to the list\n",
    "\n",
    "    def add_child(self, child_node):\n",
    "        if not isinstance(child_node, SpatialTreeNode_Evolution_Diffusion):\n",
    "            raise TypeError(\"Child must be an instance of SpatialTreeNode_Evolution_Diffusion\")\n",
    "        self.children.append(child_node)\n",
    "\n",
    "    def get_neighboring_coordinates(self):\n",
    "        neighbors = []\n",
    "        for dx in [-1, 0, 1]:\n",
    "            for dy in [-1, 0, 1]:\n",
    "                if dx == 0 and dy == 0:\n",
    "                    continue  # Exclude the current square itself\n",
    "                neighbors.append((self.x + dx, self.y + dy))\n",
    "        return neighbors\n",
    "\n",
    "    def _is_diffusion_overlapping_local(self, potential_nx, potential_ny, potential_radius, overlap_factor):\n",
    "        \"\"\"\n",
    "        Checks if a potential new node's diffusion circle overlaps \"too much\" with EXISTING nodes IN THE SAME TREE.\n",
    "        \"Too much overlap\" is defined by the overlap_factor.\n",
    "        \"\"\"\n",
    "        potential_center_x, potential_center_y = potential_nx + 0.5, potential_ny + 0.5\n",
    "\n",
    "        for ex, ey, er in self.diffusion_nodes_info:\n",
    "            # Skip checking against self if self is already in diffusion_nodes_info\n",
    "            if (ex, ey) == (self.x, self.y):\n",
    "                continue\n",
    "\n",
    "            existing_center_x, existing_center_y = ex + 0.5, ey + 0.5\n",
    "\n",
    "            # Calculate distance between centers\n",
    "            distance = np.sqrt((potential_center_x - existing_center_x)**2 + (potential_ny - existing_center_y)**2)\n",
    "\n",
    "            # Check for significant overlap\n",
    "            # If distance is less than a fraction of the sum of radii, it's too much overlap.\n",
    "            if distance < overlap_factor * (potential_radius + er):\n",
    "                return True # Significant overlap detected\n",
    "        return False\n",
    "\n",
    "    def add_child_in_random_neighbor(self, child_value_prefix, max_node_radius, overlap_factor):\n",
    "        coordinates_neighbors = self.get_neighboring_coordinates()\n",
    "\n",
    "        # First, filter for unoccupied grid squares *within this tree*\n",
    "        available_square_neighbors = [coord for coord in coordinates_neighbors if coord not in self.occupied_squares_set]\n",
    "\n",
    "        valid_child_candidates = []  # Store (nx, ny, child_radius) for candidates that pass overlap check\n",
    "\n",
    "        for nx, ny in available_square_neighbors:\n",
    "            # Generate potential radius for this child, ensuring it's not too large or small\n",
    "            child_radius = random.uniform(0.5, max_node_radius)\n",
    "            if not self._is_diffusion_overlapping_local(nx, ny, child_radius, overlap_factor):\n",
    "                valid_child_candidates.append((nx, ny, child_radius))\n",
    "\n",
    "        if not valid_child_candidates:\n",
    "            return None  # No available neighbors that satisfy both square and diffusion overlap conditions\n",
    "\n",
    "        # Choose a random valid candidate\n",
    "        chosen_nx, chosen_ny, chosen_child_radius = random.choice(valid_child_candidates)\n",
    "\n",
    "        child_value = f\"{child_value_prefix}_{len(self.children) + 1}\"\n",
    "        # Create child node; its __init__ will update occupied_squares_set and diffusion_nodes_info\n",
    "        child_node = SpatialTreeNode_Evolution_Diffusion(child_value, chosen_nx, chosen_ny, chosen_child_radius, self.occupied_squares_set, self.diffusion_nodes_info)\n",
    "        self.add_child(child_node)\n",
    "        return child_node\n",
    "\n",
    "    def get_all_nodes(self):\n",
    "        all_nodes = []\n",
    "        stack = [self]\n",
    "        while stack:\n",
    "            node = stack.pop()\n",
    "            all_nodes.append(node)\n",
    "            for child in node.children:\n",
    "                stack.append(child)\n",
    "        return all_nodes\n",
    "\n",
    "    def __repr__(self):\n",
    "        return f\"SpatialTreeNode_Evolution_Diffusion(value={self.value}, x={self.x}, y={self.y}, R={self.radius:.2f}, children={[child.value for child in self.children]!r})\"\n",
    "\n",
    "\n",
    "# --- TREE GENERATION ---\n",
    "\n",
    "def generate_random_spatial_tree_diffusion(\n",
    "    max_depth, max_children, max_node_radius, initial_x, initial_y, node_prefix=\"Node\",\n",
    "    current_depth=0, parent_node=None, occupied_squares_set=None, diffusion_nodes_info=None, overlap_factor=0.7\n",
    "):\n",
    "    if occupied_squares_set is None:\n",
    "        occupied_squares_set = set() # Initialize a new set for this tree's square coordinates\n",
    "    if diffusion_nodes_info is None:\n",
    "        diffusion_nodes_info = [] # Initialize a new list for this tree's node (x,y,radius) information\n",
    "\n",
    "    if parent_node is None:\n",
    "        # Root node at (initial_x, initial_y) with a random initial radius\n",
    "        node_value = f\"{node_prefix}_Root_{random.randint(0, 99)}\"\n",
    "        initial_radius = random.uniform(0.5, max_node_radius)\n",
    "        current_node = SpatialTreeNode_Evolution_Diffusion(node_value, initial_x, initial_y, initial_radius, occupied_squares_set, diffusion_nodes_info)\n",
    "    else:\n",
    "        # Children are added by the parent's method, which handles their coordinates and radius\n",
    "        current_node = parent_node.add_child_in_random_neighbor(f\"{node_prefix}_{current_depth}\", max_node_radius, overlap_factor)\n",
    "        if current_node is None:\n",
    "            return None # Branch terminated if no available neighbor\n",
    "\n",
    "    if current_depth < max_depth:\n",
    "        num_children = random.randint(0, max_children) # Random number of children for this node\n",
    "        for _ in range(num_children):\n",
    "            generate_random_spatial_tree_diffusion(\n",
    "                max_depth, max_children, max_node_radius, initial_x, initial_y, node_prefix,\n",
    "                current_depth + 1, current_node, occupied_squares_set, diffusion_nodes_info, overlap_factor\n",
    "            )\n",
    "    return current_node\n",
    "\n",
    "\n",
    "# --- ILLUMINATION AND FITNESS FUNCTIONS ---\n",
    "\n",
    "def get_illuminated_area(tree_root, resolution=100):\n",
    "    \"\"\"\n",
    "    Calculates the set of (x,y) integer coordinates illuminated by the tree.\n",
    "    resolution: determines how many points to sample within a unit square to check illumination.\n",
    "    \"\"\"\n",
    "    if tree_root is None:\n",
    "        return set()\n",
    "\n",
    "    illuminated_coords = set()\n",
    "    all_nodes_info = tree_root.diffusion_nodes_info # (x, y, radius) for all nodes in the tree\n",
    "\n",
    "    # Determine the bounding box for efficient sampling\n",
    "    all_x = [info[0] for info in all_nodes_info]\n",
    "    all_y = [info[1] for info in all_nodes_info]\n",
    "    all_radii = [info[2] for info in all_nodes_info]\n",
    "\n",
    "    if not all_x or not all_y:\n",
    "        return set()\n",
    "\n",
    "    min_x_bound = int(min(x - r for x, _, r in all_nodes_info)) - 1\n",
    "    max_x_bound = int(max(x + r for x, _, r in all_nodes_info)) + 1\n",
    "    min_y_bound = int(min(y - r for _, y, r in all_nodes_info)) - 1\n",
    "    max_y_bound = int(max(y + r for _, y, r in all_nodes_info)) + 1\n",
    "\n",
    "    # Iterate through potential integer square coordinates within the bounding box\n",
    "    for ix in range(min_x_bound, max_x_bound + 1):\n",
    "        for iy in range(min_y_bound, max_y_bound + 1):\n",
    "            # Sample points within this unit square\n",
    "            is_square_illuminated = False\n",
    "            for i in range(resolution):\n",
    "                for j in range(resolution):\n",
    "                    sample_x = ix + (i / resolution)\n",
    "                    sample_y = iy + (j / resolution)\n",
    "\n",
    "                    for node_x, node_y, node_radius in all_nodes_info:\n",
    "                        center_x, center_y = node_x + 0.5, node_y + 0.5\n",
    "                        distance = np.sqrt((sample_x - center_x)**2 + (sample_y - center_y)**2)\n",
    "                        if distance <= node_radius:\n",
    "                            is_square_illuminated = True\n",
    "                            break\n",
    "                if is_square_illuminated:\n",
    "                    break\n",
    "            if is_square_illuminated:\n",
    "                illuminated_coords.add((ix, iy))\n",
    "\n",
    "    return illuminated_coords\n",
    "\n",
    "def calculate_fitness_illumination(candidate_tree_root, target_illuminated_area):\n",
    "    \"\"\"\n",
    "    Calculates fitness based on the symmetric difference between illuminated areas.\n",
    "    Fitness is 1.0 for a perfect match, and decreases as symmetric difference increases.\n",
    "    \"\"\"\n",
    "    if candidate_tree_root is None:\n",
    "        # If the tree generation failed, assign a very low fitness\n",
    "        return 0.0001 # A small non-zero value to avoid division by zero issues later\n",
    "\n",
    "    candidate_illuminated_area = get_illuminated_area(candidate_tree_root)\n",
    "\n",
    "    # Symmetric difference: (A U B) - (A intersect B)\n",
    "    # Or, the elements in A but not B, plus elements in B but not A.\n",
    "    symmetric_difference = candidate_illuminated_area.symmetric_difference(target_illuminated_area)\n",
    "\n",
    "    # Union size: used for normalization\n",
    "    union_size = len(candidate_illuminated_area.union(target_illuminated_area))\n",
    "\n",
    "    if union_size == 0:\n",
    "        if not target_illuminated_area and not candidate_illuminated_area:\n",
    "            return 1.0 # Perfect match if both are empty\n",
    "        else:\n",
    "            return 0.0001 # Should not happen if target is non-empty, but handles cases where both are empty but expected non-empty\n",
    "\n",
    "    # Fitness is 1.0 - (len(symmetric_difference) / union_size)\n",
    "    # This gives 1.0 for a perfect match (symmetric_difference_area = 0)\n",
    "    # and approaches 0.0 for large differences.\n",
    "    fitness = 1.0 - (len(symmetric_difference) / union_size)\n",
    "    return max(0.0001, fitness) # Ensure fitness is always positive\n",
    "\n",
    "\n",
    "# --- la EvoluciónARY ALGORITHM COMPONENTS ---\n",
    "\n",
    "def create_initial_population_diffusion(pop_size, max_depth, max_children, max_node_radius, initial_x, initial_y, overlap_factor, node_prefix=\"Individual\"):\n",
    "    population = []\n",
    "    for i in range(pop_size):\n",
    "        # Each tree needs its own occupied_squares_set and diffusion_nodes_info for independent generation\n",
    "        occupied_squares = set()\n",
    "        diffusion_info = []\n",
    "        tree = generate_random_spatial_tree_diffusion(\n",
    "            max_depth=max_depth, max_children=max_children, max_node_radius=max_node_radius,\n",
    "            initial_x=initial_x, initial_y=initial_y, node_prefix=f\"{node_prefix}_{i}\",\n",
    "            occupied_squares_set=occupied_squares, diffusion_nodes_info=diffusion_info, overlap_factor=overlap_factor\n",
    "        )\n",
    "        if tree:\n",
    "            population.append(tree)\n",
    "    # If not enough trees generated due to space constraints, fill with more random ones (or handle error)\n",
    "    while len(population) < pop_size:\n",
    "        occupied_squares = set()\n",
    "        diffusion_info = []\n",
    "        new_tree = generate_random_spatial_tree_diffusion(\n",
    "            max_depth=max_depth, max_children=max_children, max_node_radius=max_node_radius,\n",
    "            initial_x=initial_x, initial_y=initial_y, node_prefix=f\"RandomFill_{len(population)}\",\n",
    "            occupied_squares_set=occupied_squares, diffusion_info=diffusion_info,\n",
    "            overlap_factor=overlap_factor\n",
    "        )\n",
    "        if new_tree:\n",
    "            population.append(new_tree)\n",
    "        else:\n",
    "            # Handle case where a new tree could not be generated\n",
    "            # This might happen if parameters are too restrictive or space is exhausted\n",
    "            break # Exit if we can't generate enough valid trees\n",
    "    return population\n",
    "\n",
    "def select_parents_diffusion(population, fitness_scores, num_parents):\n",
    "    parents = []\n",
    "    # Use roulette wheel selection or tournament selection. Tournament is generally robust.\n",
    "    for _ in range(num_parents):\n",
    "        tournament_size = min(5, len(population))\n",
    "        if tournament_size == 0:\n",
    "            break\n",
    "        tournament_candidates = random.sample(list(zip(population, fitness_scores)), tournament_size)\n",
    "        winner = max(tournament_candidates, key=lambda x: x[1])[0]\n",
    "        parents.append(winner)\n",
    "    return parents\n",
    "\n",
    "def mutate_tree_diffusion(tree_root, max_depth, max_children, max_node_radius, mutation_rate, overlap_factor):\n",
    "    mutated_tree = copy.deepcopy(tree_root) # Work on a deep copy\n",
    "    all_nodes = mutated_tree.get_all_nodes()\n",
    "\n",
    "    if not all_nodes:\n",
    "        return mutated_tree\n",
    "\n",
    "    node_to_mutate = random.choice(all_nodes)\n",
    "\n",
    "    # Mutation 1: Add a child\n",
    "    if random.random() < mutation_rate:\n",
    "        # Need to regenerate the local_occupied_set and diffusion_nodes_info for the deepcopy\n",
    "        # This is a bit inefficient but ensures correctness after deepcopy/mutation operations\n",
    "        temp_occupied_set = set()\n",
    "        temp_diffusion_info = []\n",
    "        # Re-populate temp_occupied_set and temp_diffusion_info by traversing the deepcopied tree\n",
    "        stack = [mutated_tree]\n",
    "        while stack:\n",
    "            node = stack.pop()\n",
    "            temp_occupied_set.add((node.x, node.y))\n",
    "            temp_diffusion_info.append((node.x, node.y, node.radius))\n",
    "            for child in node.children:\n",
    "                stack.append(child)\n",
    "\n",
    "        # Now, try to add a child to the chosen node\n",
    "        node_to_mutate.occupied_squares_set = temp_occupied_set # Update reference for chosen node\n",
    "        node_to_mutate.diffusion_nodes_info = temp_diffusion_info # Update reference for chosen node\n",
    "\n",
    "        node_to_mutate.add_child_in_random_neighbor(\"MutatedChild\", max_node_radius, overlap_factor)\n",
    "\n",
    "    # Mutation 2: Change node radius\n",
    "    if random.random() < mutation_rate:\n",
    "        node_to_mutate.radius = random.uniform(0.5, max_node_radius)\n",
    "\n",
    "    # Mutation 3: Remove a child (if any)\n",
    "    if random.random() < mutation_rate and node_to_mutate.children:\n",
    "        child_to_remove = random.choice(node_to_mutate.children)\n",
    "        node_to_mutate.children.remove(child_to_remove)\n",
    "        # Note: Removing a child means its coordinates and diffusion info are no longer strictly part of the tree\n",
    "        # The fitness function will re-evaluate the actual illuminated area, handling this implicitly.\n",
    "\n",
    "    return mutated_tree\n",
    "\n",
    "def crossover_trees_diffusion(parent1_root, parent2_root, crossover_rate, max_node_radius, overlap_factor):\n",
    "    if random.random() > crossover_rate:\n",
    "        return copy.deepcopy(parent1_root), copy.deepcopy(parent2_root)\n",
    "\n",
    "    child1_root = copy.deepcopy(parent1_root)\n",
    "    child2_root = copy.deepcopy(parent2_root)\n",
    "\n",
    "    all_nodes_child1 = child1_root.get_all_nodes()\n",
    "    all_nodes_child2 = child2_root.get_all_nodes()\n",
    "\n",
    "    # Ensure there are nodes to swap beyond just the root\n",
    "    if len(all_nodes_child1) < 2 or len(all_nodes_child2) < 2:\n",
    "        return child1_root, child2_root\n",
    "\n",
    "    # Choose random nodes (not roots) to be crossover points\n",
    "    cross_point1 = random.choice([n for n in all_nodes_child1 if n != child1_root])\n",
    "    cross_point2 = random.choice([n for n in all_nodes_child2 if n != child2_root])\n",
    "\n",
    "    # Find parent of cross_point1 in child1_root tree\n",
    "    parent_cross_point1 = None\n",
    "    for node in all_nodes_child1:\n",
    "        if cross_point1 in node.children:\n",
    "            parent_cross_point1 = node\n",
    "            break\n",
    "\n",
    "    # Find parent of cross_point2 in child2_root tree\n",
    "    parent_cross_point2 = None\n",
    "    for node in all_nodes_child2:\n",
    "        if cross_point2 in node.children:\n",
    "            parent_cross_point2 = node\n",
    "            break\n",
    "\n",
    "    if parent_cross_point1 and parent_cross_point2:  # Perform swap\n",
    "        # Remove subtrees from parents\n",
    "        parent_cross_point1.children.remove(cross_point1)\n",
    "        parent_cross_point2.children.remove(cross_point2)\n",
    "\n",
    "        # Attach swapped subtrees\n",
    "        parent_cross_point1.add_child(cross_point2)\n",
    "        parent_cross_point2.add_child(cross_point1)\n",
    "\n",
    "        # After crossover, the `occupied_squares_set` and `diffusion_nodes_info` of the affected trees\n",
    "        # (child1_root, child2_root, and their subtrees) might be inconsistent.\n",
    "        # These will be implicitly re-calculated by `get_illuminated_area` for fitness evaluation.\n",
    "        # For mutation, we explicitly rebuild them (as seen in mutate_tree_diffusion).\n",
    "\n",
    "    return child1_root, child2_root\n",
    "\n",
    "\n",
    "# --- PLOTTING FUNCTIONS ---\n",
    "\n",
    "def plot_illuminated_area(ax, illuminated_coords, title, color='blue', alpha=0.5):\n",
    "    ax.set_aspect('equal', adjustable='box')\n",
    "    if not illuminated_coords:\n",
    "        ax.set_title(title)\n",
    "        ax.grid(True)\n",
    "        return\n",
    "\n",
    "    for x, y in illuminated_coords:\n",
    "        rect = patches.Rectangle((x, y), 1, 1, facecolor=color, alpha=alpha, edgecolor='black', linewidth=0.5)\n",
    "        ax.add_patch(rect)\n",
    "\n",
    "    min_x = min(c[0] for c in illuminated_coords) - 1\n",
    "    max_x = max(c[0] for c in illuminated_coords) + 2\n",
    "    min_y = min(c[1] for c in illuminated_coords) - 1\n",
    "    max_y = max(c[1] for c in illuminated_coords) + 2\n",
    "\n",
    "    ax.set_xlim(min_x, max_x)\n",
    "    ax.set_ylim(min_y, max_y)\n",
    "    ax.set_xticks(range(int(min_x), int(max_x)))\n",
    "    ax.set_yticks(range(int(min_y), int(max_y)))\n",
    "    ax.grid(True)\n",
    "    ax.set_title(title)\n",
    "\n",
    "def plot_tree_with_illumination(tree_root, illuminated_coords, ax, tree_color='lightblue', diff_color='red', title=\"\"):\n",
    "    # Plot illuminated area first (background)\n",
    "    for x, y in illuminated_coords:\n",
    "        rect = patches.Rectangle((x, y), 1, 1, facecolor=diff_color, alpha=0.5, zorder=0) # Changed alpha for more transparency\n",
    "        ax.add_patch(rect)\n",
    "\n",
    "    if tree_root is None:\n",
    "        return\n",
    "\n",
    "    # Plot tree nodes and their diffusion circles\n",
    "    all_nodes = tree_root.get_all_nodes()\n",
    "    for node in all_nodes:\n",
    "        # Plot the square representing the cell\n",
    "        rect = patches.Rectangle((node.x, node.y), 1, 1, facecolor=tree_color, edgecolor='black', linewidth=1, zorder=1)\n",
    "        ax.add_patch(rect)\n",
    "        ax.text(node.x + 0.5, node.y + 0.5, node.value.split('_')[-1], ha='center', va='center', color='darkblue', fontsize=7, zorder=2)\n",
    "\n",
    "        # Plot the circle representing the radius of influence\n",
    "        circle = patches.Circle((node.x + 0.5, node.y + 0.5), node.radius, color='red', alpha=0.2, zorder=2)\n",
    "        ax.add_patch(circle)\n",
    "\n",
    "    # Draw lines connecting parent to children\n",
    "    for node in all_nodes:\n",
    "        for child in node.children:\n",
    "            ax.plot([node.x + 0.5, child.x + 0.5], [node.y + 0.5, child.y + 0.5], 'k--', linewidth=0.8, zorder=3)\n",
    "\n",
    "    ax.set_aspect('equal', adjustable='box')\n",
    "    ax.set_title(title)\n",
    "\n",
    "    # Set plot limits based on the illuminated coordinates\n",
    "    if illuminated_coords:\n",
    "        all_x = [c[0] for c in illuminated_coords]\n",
    "        all_y = [c[1] for c in illuminated_coords]\n",
    "\n",
    "        min_x_val = min(all_x) - 1\n",
    "        max_x_val = max(all_x) + 2\n",
    "        min_y_val = min(all_y) - 1\n",
    "        max_y_val = max(all_y) + 2\n",
    "\n",
    "        ax.set_xlim(min_x_val, max_x_val)\n",
    "        ax.set_ylim(min_y_val, max_y_val)\n",
    "        ax.set_xticks(range(int(min_x_val), int(max_x_val)))\n",
    "        ax.set_yticks(range(int(min_y_val), int(max_y_val)))\n",
    "    ax.grid(True)\n",
    "\n",
    "\n",
    "# --- MAIN la EvoluciónARY SIMULATION LOOP ---\n",
    "\n",
    "def run_evolutionary_lighting_lab(target_tree_params, ga_params):\n",
    "\n",
    "    # 1. Generate Target Tree and its Illuminated Area\n",
    "    print(\"\\n--- Generating Target Tree ---\")\n",
    "    random.seed(ga_params['seed'] + 1) # Use a different seed for target generation\n",
    "    target_occupied_squares = set()\n",
    "    target_diffusion_info = []\n",
    "    target_tree_root = generate_random_spatial_tree_diffusion(\n",
    "        max_depth=target_tree_params['max_depth'], max_children=target_tree_params['max_children'],\n",
    "        max_node_radius=target_tree_params['max_node_radius'], initial_x=0, initial_y=0,\n",
    "        node_prefix=\"Target\", occupied_squares_set=target_occupied_squares,\n",
    "        diffusion_nodes_info=target_diffusion_info, overlap_factor=target_tree_params['overlap_factor']\n",
    "    )\n",
    "\n",
    "    if not target_tree_root:\n",
    "        print(\"Failed to generate target tree. Exiting.\")\n",
    "        return None, None, None, None, []\n",
    "\n",
    "    target_illuminated_area = get_illuminated_area(target_tree_root, resolution=ga_params['illumination_resolution'])\n",
    "    print(f\"Target Tree Generated with {len(target_tree_root.get_all_nodes())} nodes. Illuminated area size: {len(target_illuminated_area)}\")\n",
    "\n",
    "    # 2. Initialize Population\n",
    "    random.seed(ga_params['seed']) # Reset seed for GA population generation\n",
    "    print(f\"\\n--- Initializing Population of {ga_params['pop_size']} Trees ---\")\n",
    "    population = create_initial_population_diffusion(\n",
    "        pop_size=ga_params['pop_size'], max_depth=ga_params['max_depth'], max_children=ga_params['max_children'],\n",
    "        max_node_radius=ga_params['max_node_radius'], initial_x=0, initial_y=0,\n",
    "        overlap_factor=ga_params['overlap_factor']\n",
    "    )\n",
    "    print(f\"Population initialized with {len(population)} individuals.\")\n",
    "\n",
    "    best_tree_overall = None\n",
    "    best_fitness_overall = -1.0\n",
    "    history = []\n",
    "\n",
    "    # 3. la Evoluciónary Loop\n",
    "    print(f\"\\n--- Starting la Evoluciónary Loop for {ga_params['generations']} Generations ---\")\n",
    "    for generation in range(ga_params['generations']):\n",
    "        fitness_scores = [calculate_fitness_illumination(tree, target_illuminated_area) for tree in population]\n",
    "\n",
    "        current_best_fitness = max(fitness_scores)\n",
    "        current_best_tree = population[np.argmax(fitness_scores)]\n",
    "\n",
    "        if current_best_fitness > best_fitness_overall:\n",
    "            best_fitness_overall = current_best_fitness\n",
    "            best_tree_overall = copy.deepcopy(current_best_tree) # Deepcopy to save the best tree\n",
    "\n",
    "        history.append(current_best_fitness)\n",
    "\n",
    "        print(f\"Generation {generation+1}/{ga_params['generations']}: Best Fitness = {current_best_fitness:.4f} (Overall Best: {best_fitness_overall:.4f})\")\n",
    "\n",
    "        if best_fitness_overall >= 0.999: # Almost perfect match\n",
    "            print(\"Target illumination achieved (or very close)! Stopping la Evolución.\")\n",
    "            break\n",
    "\n",
    "        # Selection\n",
    "        parents = select_parents_diffusion(population, fitness_scores, ga_params['pop_size'] // 2)\n",
    "\n",
    "        # Create next generation\n",
    "        next_population = []\n",
    "        # Elitism: Keep the best individual from the current generation\n",
    "        if best_tree_overall and current_best_fitness == best_fitness_overall: # Only if it's the current best in this generation\n",
    "            next_population.append(copy.deepcopy(current_best_tree))\n",
    "\n",
    "        while len(next_population) < ga_params['pop_size']:\n",
    "            if len(parents) < 2: # Not enough parents for crossover, fill with new random trees\n",
    "                occupied_squares = set()\n",
    "                diffusion_info = []\n",
    "                new_tree = generate_random_spatial_tree_diffusion(\n",
    "                    max_depth=ga_params['max_depth'], max_children=ga_params['max_children'],\n",
    "                    max_node_radius=ga_params['max_node_radius'], initial_x=0, initial_y=0,\n",
    "                    node_prefix=f\"RandomFill_{len(next_population)}\",\n",
    "                    occupied_squares_set=occupied_squares, diffusion_info=diffusion_info,\n",
    "                    overlap_factor=ga_params['overlap_factor']\n",
    "                )\n",
    "                if new_tree:\n",
    "                    next_population.append(new_tree)\n",
    "                continue\n",
    "\n",
    "            # Randomly pick two parents (can be the same parent multiple times with replacement for simplicity)\n",
    "            p1 = random.choice(parents)\n",
    "            p2 = random.choice(parents)\n",
    "\n",
    "            # Crossover\n",
    "            child1, child2 = crossover_trees_diffusion(p1, p2, ga_params['crossover_rate'], ga_params['max_node_radius'], ga_params['overlap_factor'])\n",
    "\n",
    "            # Mutation\n",
    "            mutated_child1 = mutate_tree_diffusion(child1, ga_params['max_depth'], ga_params['max_children'], ga_params['max_node_radius'], ga_params['mutation_rate'], ga_params['overlap_factor'])\n",
    "            mutated_child2 = mutate_tree_diffusion(child2, ga_params['max_depth'], ga_params['max_children'], ga_params['max_node_radius'], ga_params['mutation_rate'], ga_params['overlap_factor'])\n",
    "\n",
    "            next_population.append(mutated_child1)\n",
    "            if len(next_population) < ga_params['pop_size']:\n",
    "                next_population.append(mutated_child2)\n",
    "\n",
    "        population = next_population[:ga_params['pop_size']]\n",
    "\n",
    "    print(\"\\n--- la Evolución Finished ---\")\n",
    "    print(f\"Final Best Fitness: {best_fitness_overall:.4f}\")\n",
    "\n",
    "    return target_tree_root, target_illuminated_area, best_tree_overall, best_fitness_overall, history\n",
    "\n",
    "\n",
    "# --- MAIN EXECUTION ---\n",
    "\n",
    "if __name__ == \"__main__\":\n",
    "    # Parameters for the target tree generation\n",
    "    TARGET_TREE_PARAMS = {\n",
    "        'max_depth': 7,\n",
    "        'max_children': 4,\n",
    "        'max_node_radius': 6.0,\n",
    "        'overlap_factor': 0.7\n",
    "    }\n",
    "\n",
    "    # Parameters for the Genetic Algorithm\n",
    "    GA_PARAMS = {\n",
    "        'seed': 123,\n",
    "        'pop_size': 100,\n",
    "        'generations': 100,\n",
    "        'max_depth': 8,\n",
    "        'max_children': 4,\n",
    "        'max_node_radius': 6.0,\n",
    "        'mutation_rate': 0.1,\n",
    "        'crossover_rate': 0.7,\n",
    "        'overlap_factor': 0.7,\n",
    "        'illumination_resolution': 400 # Increased resolution for more accurate illumination calculation\n",
    "    }\n",
    "    target_tree, target_area, evolved_best_tree, evolved_best_fitness, history = run_evolutionary_lighting_lab(TARGET_TREE_PARAMS, GA_PARAMS)\n",
    "\n",
    "    # --- Plotting Results ---\n",
    "    if target_tree and evolved_best_tree:\n",
    "        fig, axes = plt.subplots(1, 3, figsize=(24, 8))\n",
    "\n",
    "        # Plot 1: Target Tree Structure and its Illumination\n",
    "        plot_tree_with_illumination(target_tree, target_area, axes[0], tree_color='skyblue', diff_color='green', title=\"Target Tree and Illuminated Area\")\n",
    "\n",
    "        # Plot 2: Best Evolved Tree Structure and its Illumination\n",
    "        evolved_best_area = get_illuminated_area(evolved_best_tree, resolution=GA_PARAMS['illumination_resolution'])\n",
    "        plot_tree_with_illumination(evolved_best_tree, evolved_best_area, axes[1], tree_color='lightcoral', diff_color='purple', title=f\"Best Evolved Tree (Fitness: {evolved_best_fitness:.4f})\")\n",
    "\n",
    "        # Plot 3: Symmetric Difference Area\n",
    "        symmetric_diff_area = target_area.symmetric_difference(evolved_best_area)\n",
    "        plot_illuminated_area(axes[2], symmetric_diff_area, title=f\"Symmetric Difference (Error Area: {len(symmetric_diff_area)})\")\n",
    "\n",
    "        plt.tight_layout()\n",
    "        plt.show()\n",
    "\n",
    "        # Plot Fitness History\n",
    "        plt.figure(figsize=(10, 6))\n",
    "        plt.plot(history, marker='o', linestyle='-', color='blue')\n",
    "        plt.title('Best Fitness Progression Over Generations')\n",
    "        plt.xlabel('Generation')\n",
    "        plt.ylabel('Fitness')\n",
    "        plt.grid(True)\n",
    "        plt.show()\n",
    "    else:\n",
    "        print(\"No plots generated due to issues with tree la Evolución.\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "YYBgrbEC6iE9"
   },
   "source": [
    "Colab trabajó durante 7 horas para ejecutar el programa anterior.\n",
    "\n",
    "**Ejercicio.** Examina los gráficos que fueron generados por el programa anterior. ¿Son correctos? Las celdas, que son cuadradas, deben oscurecerse cuando estén iluminadas, rodeadas por los círculos de iluminación.  Si este procedimiento no se implementa correctamente, realice un diagnóstico, ejecute la corrección correspondiente y pruébelo a fondo.\n",
    ">\n",
    "> *Respuesta.* Ese procedimiento es correcto para el árbol objetivo, pero no para el mejor árbol evolucionado porque muchas células están iluminadas pero no oscurecidas. Por ejemplo, la celda con el vértice inferior izquierdo (-4,1).\n",
    ">\n",
    "> Nuestro diagnóstico es que el área revisada para verificar la iluminación no es lo suficientemente grande. Por lo tanto, lo ampliamos simétricamente en las líneas 175 y 176. También se corrigieron algunos errores menores en la referencia de los nombres.\n",
    "\n",
    "Probamos esta nueva versión más de 12 veces con 2 generaciones y un tamaño poblacional de 5, y diversos valores relacionados a la complejidad. Un ejemplo es el siguiente:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 1000
    },
    "executionInfo": {
     "elapsed": 15119437,
     "status": "ok",
     "timestamp": 1785861933230,
     "user": {
      "displayName": "jose rodriguez",
      "userId": "08454562216435392883"
     },
     "user_tz": 300
    },
    "id": "QZkv_eBELV5F",
    "outputId": "ad4b4d4d-53ae-42f6-a5ff-87b553f4003b"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "--- Generating Target Tree ---\n",
      "Target Tree Generated with 6 nodes. Illuminated area size: 33\n",
      "\n",
      "--- Initializing Population of 10 Trees ---\n",
      "Population initialized with 10 individuals.\n",
      "\n",
      "--- Starting Evolutionary Loop for 500 Generations ---\n",
      "Generation 1/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 2/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 3/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 4/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 5/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 6/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 7/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 8/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 9/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 10/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 11/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 12/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 13/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 14/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 15/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 16/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 17/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 18/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 19/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 20/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 21/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 22/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 23/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 24/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 25/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 26/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 27/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 28/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 29/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 30/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 31/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 32/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 33/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 34/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 35/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 36/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 37/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 38/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 39/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 40/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 41/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 42/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 43/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 44/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 45/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 46/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 47/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 48/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 49/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 50/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 51/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 52/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 53/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 54/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 55/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 56/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 57/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 58/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 59/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 60/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 61/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 62/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 63/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 64/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 65/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 66/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 67/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 68/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 69/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 70/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 71/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 72/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 73/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 74/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 75/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 76/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 77/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 78/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 79/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 80/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 81/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 82/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 83/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 84/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 85/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 86/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 87/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 88/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 89/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 90/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 91/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 92/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 93/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 94/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 95/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 96/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 97/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 98/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 99/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 100/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 101/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 102/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 103/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 104/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 105/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 106/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 107/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 108/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 109/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 110/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 111/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 112/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 113/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 114/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 115/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 116/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 117/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 118/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 119/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 120/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 121/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 122/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 123/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 124/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 125/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 126/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 127/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 128/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 129/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 130/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 131/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 132/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 133/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 134/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 135/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 136/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 137/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 138/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 139/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 140/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 141/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 142/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 143/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 144/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 145/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 146/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 147/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 148/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 149/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 150/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 151/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 152/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 153/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 154/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 155/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 156/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 157/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 158/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 159/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 160/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 161/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 162/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 163/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 164/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 165/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 166/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 167/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 168/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 169/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 170/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 171/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 172/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 173/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 174/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 175/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 176/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 177/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 178/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 179/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 180/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 181/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 182/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 183/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 184/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 185/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 186/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 187/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 188/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 189/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 190/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 191/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 192/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 193/500: Best Fitness = 0.6316 (Overall Best: 0.6316)\n",
      "Generation 194/500: Best Fitness = 0.6410 (Overall Best: 0.6410)\n",
      "Generation 195/500: Best Fitness = 0.6410 (Overall Best: 0.6410)\n",
      "Generation 196/500: Best Fitness = 0.6410 (Overall Best: 0.6410)\n",
      "Generation 197/500: Best Fitness = 0.6410 (Overall Best: 0.6410)\n",
      "Generation 198/500: Best Fitness = 0.6410 (Overall Best: 0.6410)\n",
      "Generation 199/500: Best Fitness = 0.6410 (Overall Best: 0.6410)\n",
      "Generation 200/500: Best Fitness = 0.6410 (Overall Best: 0.6410)\n",
      "Generation 201/500: Best Fitness = 0.6410 (Overall Best: 0.6410)\n",
      "Generation 202/500: Best Fitness = 0.6410 (Overall Best: 0.6410)\n",
      "Generation 203/500: Best Fitness = 0.6410 (Overall Best: 0.6410)\n",
      "Generation 204/500: Best Fitness = 0.6410 (Overall Best: 0.6410)\n",
      "Generation 205/500: Best Fitness = 0.6410 (Overall Best: 0.6410)\n",
      "Generation 206/500: Best Fitness = 0.6410 (Overall Best: 0.6410)\n",
      "Generation 207/500: Best Fitness = 0.6410 (Overall Best: 0.6410)\n",
      "Generation 208/500: Best Fitness = 0.6410 (Overall Best: 0.6410)\n",
      "Generation 209/500: Best Fitness = 0.6410 (Overall Best: 0.6410)\n",
      "Generation 210/500: Best Fitness = 0.6410 (Overall Best: 0.6410)\n",
      "Generation 211/500: Best Fitness = 0.6410 (Overall Best: 0.6410)\n",
      "Generation 212/500: Best Fitness = 0.6410 (Overall Best: 0.6410)\n",
      "Generation 213/500: Best Fitness = 0.6410 (Overall Best: 0.6410)\n",
      "Generation 214/500: Best Fitness = 0.6410 (Overall Best: 0.6410)\n",
      "Generation 215/500: Best Fitness = 0.6410 (Overall Best: 0.6410)\n",
      "Generation 216/500: Best Fitness = 0.6410 (Overall Best: 0.6410)\n",
      "Generation 217/500: Best Fitness = 0.6410 (Overall Best: 0.6410)\n",
      "Generation 218/500: Best Fitness = 0.6410 (Overall Best: 0.6410)\n",
      "Generation 219/500: Best Fitness = 0.6410 (Overall Best: 0.6410)\n",
      "Generation 220/500: Best Fitness = 0.6410 (Overall Best: 0.6410)\n",
      "Generation 221/500: Best Fitness = 0.6410 (Overall Best: 0.6410)\n",
      "Generation 222/500: Best Fitness = 0.6410 (Overall Best: 0.6410)\n",
      "Generation 223/500: Best Fitness = 0.6410 (Overall Best: 0.6410)\n",
      "Generation 224/500: Best Fitness = 0.6410 (Overall Best: 0.6410)\n",
      "Generation 225/500: Best Fitness = 0.6410 (Overall Best: 0.6410)\n",
      "Generation 226/500: Best Fitness = 0.6410 (Overall Best: 0.6410)\n",
      "Generation 227/500: Best Fitness = 0.6410 (Overall Best: 0.6410)\n",
      "Generation 228/500: Best Fitness = 0.6410 (Overall Best: 0.6410)\n",
      "Generation 229/500: Best Fitness = 0.6410 (Overall Best: 0.6410)\n",
      "Generation 230/500: Best Fitness = 0.6410 (Overall Best: 0.6410)\n",
      "Generation 231/500: Best Fitness = 0.6410 (Overall Best: 0.6410)\n",
      "Generation 232/500: Best Fitness = 0.6410 (Overall Best: 0.6410)\n",
      "Generation 233/500: Best Fitness = 0.6410 (Overall Best: 0.6410)\n",
      "Generation 234/500: Best Fitness = 0.6410 (Overall Best: 0.6410)\n",
      "Generation 235/500: Best Fitness = 0.6410 (Overall Best: 0.6410)\n",
      "Generation 236/500: Best Fitness = 0.6410 (Overall Best: 0.6410)\n",
      "Generation 237/500: Best Fitness = 0.6410 (Overall Best: 0.6410)\n",
      "Generation 238/500: Best Fitness = 0.6410 (Overall Best: 0.6410)\n",
      "Generation 239/500: Best Fitness = 0.6410 (Overall Best: 0.6410)\n",
      "Generation 240/500: Best Fitness = 0.6410 (Overall Best: 0.6410)\n",
      "Generation 241/500: Best Fitness = 0.6410 (Overall Best: 0.6410)\n",
      "Generation 242/500: Best Fitness = 0.6944 (Overall Best: 0.6944)\n",
      "Generation 243/500: Best Fitness = 0.6944 (Overall Best: 0.6944)\n",
      "Generation 244/500: Best Fitness = 0.6944 (Overall Best: 0.6944)\n",
      "Generation 245/500: Best Fitness = 0.6944 (Overall Best: 0.6944)\n",
      "Generation 246/500: Best Fitness = 0.6944 (Overall Best: 0.6944)\n",
      "Generation 247/500: Best Fitness = 0.6944 (Overall Best: 0.6944)\n",
      "Generation 248/500: Best Fitness = 0.6944 (Overall Best: 0.6944)\n",
      "Generation 249/500: Best Fitness = 0.6944 (Overall Best: 0.6944)\n",
      "Generation 250/500: Best Fitness = 0.6944 (Overall Best: 0.6944)\n",
      "Generation 251/500: Best Fitness = 0.6944 (Overall Best: 0.6944)\n",
      "Generation 252/500: Best Fitness = 0.6944 (Overall Best: 0.6944)\n",
      "Generation 253/500: Best Fitness = 0.6944 (Overall Best: 0.6944)\n",
      "Generation 254/500: Best Fitness = 0.6944 (Overall Best: 0.6944)\n",
      "Generation 255/500: Best Fitness = 0.6944 (Overall Best: 0.6944)\n",
      "Generation 256/500: Best Fitness = 0.6944 (Overall Best: 0.6944)\n",
      "Generation 257/500: Best Fitness = 0.6944 (Overall Best: 0.6944)\n",
      "Generation 258/500: Best Fitness = 0.6944 (Overall Best: 0.6944)\n",
      "Generation 259/500: Best Fitness = 0.6944 (Overall Best: 0.6944)\n",
      "Generation 260/500: Best Fitness = 0.6944 (Overall Best: 0.6944)\n",
      "Generation 261/500: Best Fitness = 0.6944 (Overall Best: 0.6944)\n",
      "Generation 262/500: Best Fitness = 0.7027 (Overall Best: 0.7027)\n",
      "Generation 263/500: Best Fitness = 0.7027 (Overall Best: 0.7027)\n",
      "Generation 264/500: Best Fitness = 0.7027 (Overall Best: 0.7027)\n",
      "Generation 265/500: Best Fitness = 0.7027 (Overall Best: 0.7027)\n",
      "Generation 266/500: Best Fitness = 0.7027 (Overall Best: 0.7027)\n",
      "Generation 267/500: Best Fitness = 0.7027 (Overall Best: 0.7027)\n",
      "Generation 268/500: Best Fitness = 0.7027 (Overall Best: 0.7027)\n",
      "Generation 269/500: Best Fitness = 0.7027 (Overall Best: 0.7027)\n",
      "Generation 270/500: Best Fitness = 0.7027 (Overall Best: 0.7027)\n",
      "Generation 271/500: Best Fitness = 0.7027 (Overall Best: 0.7027)\n",
      "Generation 272/500: Best Fitness = 0.7027 (Overall Best: 0.7027)\n",
      "Generation 273/500: Best Fitness = 0.7027 (Overall Best: 0.7027)\n",
      "Generation 274/500: Best Fitness = 0.7027 (Overall Best: 0.7027)\n",
      "Generation 275/500: Best Fitness = 0.7027 (Overall Best: 0.7027)\n",
      "Generation 276/500: Best Fitness = 0.7027 (Overall Best: 0.7027)\n",
      "Generation 277/500: Best Fitness = 0.7027 (Overall Best: 0.7027)\n",
      "Generation 278/500: Best Fitness = 0.7027 (Overall Best: 0.7027)\n",
      "Generation 279/500: Best Fitness = 0.7027 (Overall Best: 0.7027)\n",
      "Generation 280/500: Best Fitness = 0.7027 (Overall Best: 0.7027)\n",
      "Generation 281/500: Best Fitness = 0.7027 (Overall Best: 0.7027)\n",
      "Generation 282/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 283/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 284/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 285/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 286/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 287/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 288/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 289/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 290/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 291/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 292/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 293/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 294/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 295/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 296/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 297/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 298/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 299/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 300/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 301/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 302/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 303/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 304/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 305/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 306/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 307/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 308/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 309/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 310/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 311/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 312/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 313/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 314/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 315/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 316/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 317/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 318/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 319/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 320/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 321/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 322/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 323/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 324/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 325/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 326/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 327/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 328/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 329/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 330/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 331/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 332/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 333/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 334/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 335/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 336/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 337/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 338/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 339/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 340/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 341/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 342/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 343/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 344/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 345/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 346/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 347/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 348/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 349/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 350/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 351/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 352/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 353/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 354/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 355/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 356/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 357/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 358/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 359/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 360/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 361/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 362/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 363/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 364/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 365/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 366/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 367/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 368/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 369/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 370/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 371/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 372/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 373/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 374/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 375/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 376/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 377/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 378/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 379/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 380/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 381/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 382/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 383/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 384/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 385/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 386/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 387/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 388/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 389/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 390/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 391/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 392/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 393/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 394/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 395/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 396/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 397/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 398/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 399/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 400/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 401/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 402/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 403/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 404/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 405/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 406/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 407/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 408/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 409/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 410/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 411/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 412/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 413/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 414/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 415/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 416/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 417/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 418/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 419/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 420/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 421/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 422/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 423/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 424/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 425/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 426/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 427/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 428/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 429/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 430/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 431/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 432/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 433/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 434/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 435/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 436/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 437/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 438/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 439/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 440/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 441/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 442/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 443/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 444/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 445/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 446/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 447/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 448/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 449/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 450/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 451/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 452/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 453/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 454/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 455/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 456/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 457/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 458/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 459/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 460/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 461/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 462/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 463/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 464/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 465/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 466/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 467/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 468/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 469/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 470/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 471/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 472/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 473/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 474/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 475/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 476/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 477/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 478/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 479/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 480/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 481/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 482/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 483/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 484/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 485/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 486/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 487/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 488/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 489/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 490/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 491/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 492/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 493/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 494/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 495/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 496/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 497/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 498/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 499/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "Generation 500/500: Best Fitness = 0.7297 (Overall Best: 0.7297)\n",
      "\n",
      "--- Evolution Finished ---\n",
      "Final Best Fitness: 0.7297\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAACVYAAAMvCAYAAAAz3hnmAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQABAABJREFUeJzs3Xd4VHXaxvF7ek2HJDSlqICAujbsgC5grwjI2lFx7b7rrmUVQdfuiq51XXfFEkQR+9pAsevaK4L0GkJ6z9Tz/nHMSEgCASY5Kd/PdeXCnDkz88wvMzFzzj3PYzMMwxAAAAAAAAAAAAAAAAAAIMFudQEAAAAAAAAAAAAAAAAA0N4QrAIAAAAAAAAAAAAAAACAzRCsAgAAAAAAAAAAAAAAAIDNEKwCAAAAAAAAAAAAAAAAgM0QrAIAAAAAAAAAAAAAAACAzRCsAgAAAAAAAAAAAAAAAIDNEKwCAAAAAAAAAAAAAAAAgM0QrAIAAAAAAAAAAAAAAACAzRCsAgAAAAAAAAAAAAAAAIDNEKwCAAAAAADoIPr27auzzz67ze/3vffek81m03vvvdfm990a7rzzTg0aNEjxeLzF1xk5cqRGjhzZekXBEtdcc42GDx9udRkAAAAAAKCdIlgFAAAAAADahZkzZ8pmszX4ys7O1qhRo/TGG2+02v3W1NRo2rRpLQ4N1YeMmvuaPXt2q9Xanm1pTTb9sjqcVVFRoTvuuENXX3217PbfDo01V29ubm6Tt7N+/XpNmzZN3377bRtV3vZCoZCuvvpq9ezZUz6fT8OHD9e8efNadN2+ffs2u6a77rprYr81a9Zo+vTp2n///ZWRkaFu3bpp5MiRmj9/fpO3O2/ePB1yyCHy+/3KyMjQuHHjtHLlygb7bO01essttyT2veKKK/Tdd9/plVde2fYFAgAAAAAAnZ7T6gIAAAAAAAA2ddNNN6lfv34yDEMFBQWaOXOmjj76aL366qs69thjk35/NTU1mj59uiRtU0eiyy67TPvtt1+j7QceeGCySutQnnrqqQbfP/nkk5o3b16j7YMHD27Lshr5z3/+o2g0qtNOO63RZaNHj9aZZ57ZYJvP55Mkvf322w22r1+/XtOnT1ffvn211157tVq9Vjr77LP1/PPP64orrtCuu+6aeC0uWLBAhxxyyBave++996qqqqrBtlWrVun666/XmDFjEttefvll3XHHHTrxxBN11llnKRqN6sknn9To0aP1n//8R+ecc05i39dee00nnHCC9t57b91+++2qqKjQfffdp0MOOUTffPONunfvLsl8jm3+vJPM5+jbb7/d4P5zc3N1wgkn6O6779bxxx+/XesEAAAAAAA6L4JVAAAAAACgXTnqqKO07777Jr6fPHmycnJy9Mwzz7RKsGp7HXrooRo3bpzVZbQbp59+eoPvP/vsM82bN6/R9s3V1NTI7/e3ZmkNPP744zr++OPl9XobXbbbbrs1W6/b7W7t0tqVzz//XLNnz9Zdd92lq666SpJ05plnaujQofrLX/6iTz75ZIvXP/HEExtt+9vf/iZJ+sMf/pDYNmrUKK1evVrdunVLbLvwwgu11157aerUqQ2CVVdffbX69++vjz/+OPHzOO644xJBq7///e+SpJycnCZ/jtOnT9euu+7aKBA5fvx4nXrqqVq+fLn69++/xccFAAAAAAC6FkYBAgAAAACAdi09PV0+n09OZ8PPh8Xjcd17770aMmSIvF6vcnJyNGXKFJWWljbY78svv9TYsWPVrVs3+Xw+9evXT+eee64kaeXKlYkuN9OnT0+MCps2bdoO1z106FCNGjWq0fZ4PK5evXo1CGVVV1frT3/6k/r06SOPx6OBAwfq7rvvlmEYzd7+l19+KZvNpieeeKLRZW+99ZZsNptee+21xLZ169bp3HPPVU5Ojjwej4YMGaL//Oc/ja67du1anXjiiQoEAsrOztaVV16pUCi0rQ+/SSNHjtTQoUP11Vdf6bDDDpPf79d1110nyRw7d+ONN2qXXXaRx+NRnz599Je//KXJ+3766ae1zz77yOfzKTMzUxMnTtSaNWu2ev8rVqzQ999/r9///vfbVXt9R7P33nsvEc4555xzEs+bmTNnNnicCxcu1KhRo+T3+9WrVy/deeedjW63pY+7fgReenq6gsGgBg4cmFi7evfff7+GDBmSGJO37777atasWQ32WbRokVavXr3Vx/v888/L4XDoggsuSGzzer2aPHmyPv300xat9+ZmzZqlfv366aCDDkpsGzJkSINQlSR5PB4dffTRWrt2rSorKyVJJSUlWrhwoU466aQGIbc999xTgwcP3uoIzs8//1xLly5tEOqqV/98ePnll7f5MQEAAAAAgM6NjlUAAAAAAKBdKS8vV1FRkQzD0MaNG3X//ferqqqqUQeaKVOmaObMmTrnnHN02WWXacWKFXrggQf0zTff6OOPP5bL5dLGjRs1ZswYde/eXddcc43S09O1cuVKvfDCC5Kk7t276+GHH9Yf//hHnXTSSTr55JMlSXvsscdW66ysrFRRUVGj7VlZWbLZbJowYYKmTZumDRs2KDc3N3H5Rx99pPXr12vixImSJMMwdPzxx2vBggWaPHmy9tprL7311lv685//rHXr1mnGjBlN3v++++6r/v3767nnntNZZ53V4LJnn31WGRkZGjt2rCSpoKBABxxwgGw2my655BJ1795db7zxhiZPnqyKigpdccUVkqTa2lodccQRWr16tS677DL17NlTTz31lN59992trkdLFRcX66ijjtLEiRN1+umnKycnR/F4XMcff7w++ugjXXDBBRo8eLB++OEHzZgxQ7/88oteeumlxPVvueUW3XDDDRo/frzOO+88FRYW6v7779dhhx2mb775Runp6c3ed32Xpb333rvJy+vq6hr9TFNSUuTxeBpsGzx4sG666SZNnTpVF1xwgQ499FBJahAYKi0t1ZFHHqmTTz5Z48eP1/PPP6+rr75aw4YN01FHHSVJLX7cP/30k4499ljtscceuummm+TxeLR06VJ9/PHHifv717/+pcsuu0zjxo3T5Zdfrrq6On3//ff63//+p0mTJjWofcSIEXrvvfeaXSdJ+uabb7TbbrspNTW1wfb9999fkvTtt9+qT58+W7yNzW/v559/1l//+tcW7b9hwwb5/f5EN7P6oFn9aMZN+f1+/fTTT41ea5vKy8uTpCaDVWlpaRowYIA+/vhjXXnllS2qDwAAAAAAdBEGAAAAAABAO/D4448bkhp9eTweY+bMmQ32/fDDDw1JRl5eXoPtb775ZoPtL774oiHJ+OKLL5q938LCQkOSceONN7aozgULFjRZZ/1Xfn6+YRiGsXjxYkOScf/99ze4/kUXXWQEg0GjpqbGMAzDeOmllwxJxt/+9rcG+40bN86w2WzG0qVLE9t23nln46yzzkp8f+211xoul8soKSlJbAuFQkZ6erpx7rnnJrZNnjzZ6NGjh1FUVNTgPiZOnGikpaUlarn33nsNScZzzz2X2Ke6utrYZZddDEnGggULWrRGhmEYF198sbH5oacRI0YYkoxHHnmkwfannnrKsNvtxocffthg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OUY777yzNm7cqIceeki9e/fWIYccIkkaM2aMcnNzdfDBBysnJ0c///yzHnjgAR1zzDENOqENHjxYI0aM0HvvvbfF2oYPH65TTz1V1157rTZu3KhddtlFTzzxhFauXKl///vfDfY988wz9f777zcKu0nmGECPx6NTTjmlyft58cUX9Ze//EW77rqrBg8erKeffrrB5aNHj050p3r66ac1d+5cHXbYYQoGg5o/f76ee+45nXfeeU3efklJid544w2dcsopWxwTOX/+fBmGoRNOOGGLawIAAAAAALoeglUAAAAAAKBdmTp1auK/vV6vBg0apIcfflhTpkxpsN8jjzyiffbZR//85z913XXXyel0qm/fvjr99NN18MEHSzIDWJ9//rlmz56tgoICpaWlaf/991deXl6DAMxjjz2mSy+9VFdeeaXC4bBuvPHGrQar/vGPfzS5/cYbb2wQrOrdu7cOOuggffzxxzrvvPPkcrka7G+32/XKK69o6tSpevbZZ/X444+rb9++uuuuu5rtwrO5CRMm6Prrr1dNTU2jjliSOTrt888/10033aQXXnhBDz30kLKysjRkyBDdcccdif38fr/eeecdXXrppbr//vvl9/v1hz/8QUcddZSOPPLIFtWyPex2u1566SXNmDFDTz75pF588UX5/X71799fl19+eYOxf9dcc4122203zZgxQ9OnT5ck9enTR2PGjNHxxx+/1fs699xzNXXqVNXW1rZojGRzXC6XnnjiCV177bW68MILFY1G9fjjj29TsKqlj/v444/XypUrE13PunXrphEjRmj69OlKS0uTJE2ZMkV5eXm65557VFVVpd69e+uyyy7T9ddfv92P8cknn9QNN9ygp556SqWlpdpjjz302muvNeiItiUVFRX673//q2OOOSZR5+a+++47SdKSJUt0xhlnNLp8wYIFiWDVbrvtppKSEt18882qra3VwIED9cgjj+iCCy5o8rbnzJmjSCSiSZMmbbHOOXPm6JBDDmlRiBEAAAAAAHQtNqOpj5IBAAAAAAAAnVB5ebn69++vO++8U5MnT7a6HFhsw4YN6tevn2bPnk3HKgAAAAAA0Ih967sAAAAAAAAAnUNaWpr+8pe/6K677lI8Hre6HFjs3nvv1bBhwwhVAQAAAACAJtGxCgAAAAAAAAAAAAAAAAA2Q8cqAAAAAAAAAAAA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bJguuOAC/e9//2vRbUQiEZ166qkqKSnRjBkz9NRTT2nnnXdWcXGxxo8fL5/PpwcffFBPPfWUAoFAKz+i9m3FihV67LHHdN111yW21X/Yvbmv22+/3cKKW+ahhx6SzWbT8OHDrS5lmz388MM69dRTtdNOO8lms20xtFhWVqYLLrhA3bt3VyAQ0KhRo/T111832CcrK0vnnXeebrjhhlauHMD2YBQggFbz1FNPNfj+ySef1Lx58xptHzx4cFuWtVWffPKJpk+frrPPPlvpW/iU/uDBgxs9lmuvvVbBYFB//etfW7lKtKYzzjhDEydOlMfjabX7WL9+vaZPn66+fftqr732arX7aYmKigq9+uqr6tu3r5555hndfvvtBAIBAOgKioqkX36RNmwwx/716WN1RQDaC5vtt/GA+fnm74v+/c0RgW631dUBAADok08+0ahRo7TTTjvp/PPPV25urtasWaPPPvtM9913ny699FKrS2w1Cxcu1PTp0zVy5Ej17du3xddbvHix7Pbk9dzYa6+99Kc//UmSVFlZqZ9//llz5szRv/71L1155ZW65557GuxfW1srp/O3U9PLli3TqlWr9K9//UvnnXdeYvubb76pyspK3Xzzzfr973+ftHo7svvuu0/9+vXTqFGjGl122mmn6eijj260/Xe/+11blLZD8vLy1LdvX33++edaunSpdtllF6tLarE77rhDlZWV2n///ZWfn9/sfvF4XMccc4y+++47/fnPf1a3bt300EMPaeTIkfrqq6+06667Jva98MIL9Y9//EPvvvuuDj/88LZ4GABaiGAVgFZz+umnN/j+s88+07x58xpt3x6GYaiurk4+n2+Hb2t75eTkNHost99+u7p167bFxxiPxxUOh+X1elu7RGwnh8MhRxfq0jB37lzFYjH95z//0eGHH64PPvhAI0aM2Or1qquru/wnhQAA6JDCYWnFCmnZMikeN0d/daG/fQBsA5dL6tVLqqoyxwMWF0u77WaGrgAAACx0yy23KC0tTV988UWjD0hv3LjRmqLaoU3PpST7g8S9evVqdC7kjjvu0KRJkzRjxgztuuuu+uMf/5i4bPNzIvU/p+Z+flv64Pu26sjHsiORiPLy8nThhRc2efnee++9zefdtnSOra6uTm63e4dCeC1Z7xUrVuiTTz7RCy+8oClTpigvL0833njjVm87Go0qHo/LbfEHPt5///1Et6pgMNjsfs8//7w++eQTzZkzR+PGjZNkThDZbbfddOONN2rWrFmJfQcPHqyhQ4dq5syZBKuAdoZRgAAs9fjjj+vwww9Xdna2PB6Pdt99dz388MON9uvbt6+OPfZYvfXWW9p3333l8/n0z3/+U5K0atUqHX/88QoEAsrOztaVV16pt956q8kxg//73/905JFHKi0tTX6/XyNGjNDHH3+cuHzatGn685//LEnq169fomXqjrTUtdlsuuSSS5SXl6chQ4bI4/HozTfflCStW7dO5557rnJycuTxeDRkyBD95z//aXQboVBIN954o3bZZRd5PB716dNHf/nLXxQKhbZ6/x9++GGiHWn9da+88krV1tY22O/ss89WMBjUunXrdOKJJyoYDKp79+666qqrFIvFGuxbVlams88+W2lpaUpPT9dZZ53V6jPOZ86c2eTPon604KY/65EjR2ro0KH6/vvvNWLECPn9fu2yyy6J8YPvv/++hg8fLp/Pp4EDB2r+/Plbva/65+BHH32k/fffX16vV/3799eTTz7Z4LolJSW66qqrNGzYMAWDQaWmpuqoo47Sd99916Dm/fbbT5J0zjnnJJ5nM2fOTOyztedqvY8++kj77befvF6vBgwYkHhdbIu8vDyNHj1ao0aN0uDBg5WXl9don/o1ef/993XRRRcpOztbvXv3Tlz+xhtv6NBDD1UgEFBKSoqOOeYY/fTTTw1u4/vvv9fZZ5+t/v37y+v1Kjc3V+eee66Ki4u3uWYAALCdioqkL780AxKBgNSjB6EqAFsXDJoBq5IS6fPPpcWLzZAmAACARZYtW6YhQ4Y0Gb7Jzs5O/PeIESO05557NnkbAwcO1NixYyX9Nlbt7rvv1oMPPqj+/fvL7/drzJgxWrNmjQzD0M0336zevXvL5/PphBNOUMlm45LrjyG/9957ifMYw4YNSxy7fuGFFzRs2DB5vV7ts88++uabbxrVtGjRIo0bN06ZmZnyer3ad9999corryQunzlzpk499VRJ0qhRoxLHluvvY0vnUvr27dtoXFlZWZmuvPJK9e3bVx6PR71799aZZ56poqKi5hd/C3w+n5566illZmbqlltukWEYictsNpumTZsmyTwfUf/h3lNPPVU2m00jR47UyJEjddZZZ0mS9ttvv0Yj1lpy3HzatGmy2WxauHChJk2apIyMDB1yyCGJy59++mnts88+8vl8yszM1MSJE7VmzZoGt1F/jmHhwoUaNWqU/H6/evXqpTvvvLPRY66rq9O0adO02267yev1qkePHjr55JO1bNmyxD7xeFz33nuvhgwZIq/Xq5ycHE2ZMkWlpaVbXdOPPvpIRUVFO9S9q7nnRf35ldmzZ+v6669Xr1695Pf7VVFRIUmaM2dOYq3qmwqsW7euwW3Xn1tatmyZjj76aKWkpOgPf/jDVmvKy8tTRkaGjjnmGI0bN67J8xKbvi7vvfdeDRgwQB6PRwsXLpS09deL1LJzNvVWr16tRYsWtWhNd9555xZN/nj++eeVk5Ojk08+ObGte/fuGj9+vF5++eVG5/lGjx6tV199tcFrB4D16FgFwFIPP/ywhgwZouOPP15Op1OvvvqqLrroIsXjcV188cUN9l28eLFOO+00TZkyReeff74GDhyo6upqHX744crPz9fll1+u3NxczZo1SwsWLGh0X++++66OOuoo7bPPPrrxxhtlt9sTwa4PP/xQ+++/v04++WT98ssveuaZZzRjxgx1+/VTuN27d9+hx/nuu+/queee0yWXXKJu3bqpb9++Kigo0AEHHJAIXnXv3l1vvPGGJk+erIqKCl1xxRWSzD+4jz/+eH300Ue64IILNHjwYP3www+aMWOGfvnlF7300ktbvO85c+aopqZGf/zjH5WVlaXPP/9c999/v9auXas5c+Y02DcWi2ns2LEaPny47r77bs2fP19///vfNWDAgMQnSwzD0AknnKCPPvpIF154oQYPHqwXX3wx8WanvSgtLdWxxx6riRMn6tRTT9XDDz+siRMnKi8vT1dccYUuvPBCTZo0SXfddZfGjRunNWvWKCUlZYu3uXTpUo0bN06TJ0/WWWedpf/85z86++yztc8++2jIkCGSpOXLl+ull17Sqaeeqn79+qmgoED//Oc/NWLECC1cuFA9e/bU4MGDddNNN2nq1Km64IILdOihh0qSDjroIEkte65K0g8//KAxY8aoe/fumjZtmqLRqG688Ubl5OS0eJ3Wr1+vBQsW6IknnpBktg2eMWOGHnjggSY/8XHRRRepe/fumjp1qqqrqyWZYz/POussjR07VnfccYdqamr08MMP65BDDtE333yTaEc9b948LV++XOecc45yc3P1008/6dFHH9VPP/2kzz77jPGDAAC0IlskYo79W7XK7FLVqxeBKgDbxuEww5ibd69KS7O6MgAA0AXtvPPO+vTTT/Xjjz9q6NChze53xhln6Pzzz2+03xdffKFffvlF119/fYP98/LyFA6Hdemll6qkpER33nmnxo8fr8MPP1zvvfeerr76ai1dulT333+/rrrqqkYflF66dKkmTZqkKVOm6PTTT9fdd9+t4447To888oiuu+46XXTRRZKk2267TePHj28wnu+nn37SwQcfrF69eumaa65RIBDQc889pxNPPFFz587VSSedpMMOO0yXXXaZ/vGPf+i6667T4MGDJSnxr9T0uZSmVFVV6dBDD9XPP/+sc889V3vvvbeKior0yiuvaO3atYnzI9sqGAzqpJNO0r///W8tXLgwcex8U1OmTFGvXr1066236rLLLtN+++2XOK49cOBAPfroo7rpppvUr18/DRgwQFLLj5vXO/XUU7Xrrrvq1ltvTYRUbrnlFt1www0aP368zjvvPBUWFur+++/XYYcdpm+++aZBUK+0tFRHHnmkTj75ZI0fP17PP/+8rr76ag0bNkxHHXWUJPOcyrHHHqt33nlHEydO1OWXX67KykrNmzdPP/74Y6L2KVOmaObMmTrnnHN02WWXacWKFXrggQf0zTff6OOPP5bL5Wp2PT/55BPZbLZmR/vV1NQ0GYRLT09vMHpxS8+Lm2++WW63W1dddZVCoZDcbnei3v3220+33XabCgoKdN999+njjz9utFbRaFRjx47VIYccorvvvlt+v7/Zx1MvLy9PJ598stxut0477TQ9/PDD+uKLLxIfSt/U448/rrq6Ol1wwQXyeDzKzMxs0etFatk5m3pnnnmm3n///aSGmr755hvtvffejTqA7b///nr00Uf1yy+/aNiwYYnt++yzj2bMmKGffvppi7/bALQtglUALPX+++83aDV6ySWX6Mgjj9Q999zTKFi1dOlSvfnmm4lPkEjSPffck/ij6IQTTpBk/oG6+R+YhmHowgsv1KhRo/TGG28kAhxTpkzRkCFDdP311+vtt9/WHnvsob333lvPPPOMTjzxxG2aT74lixcv1g8//KDdd989se28885TLBbTDz/8oKysLEnm/OTTTjtN06ZN05QpU+Tz+TRr1izNnz9f77//foNPVQwdOlQXXnihPvnkk0Qgpyl33HFHgzW+4IILtMsuu+i6667T6tWrtdNOOyUuq6ur04QJE3TDDTck6tl7773173//OxGseuWVV/TBBx/ozjvvTHT3+uMf/9jkbG8rrV+/XrNmzdJpp50myUz5Dxo0SJMmTdInn3yi4cOHSzLfcI4dO1Zz585t9GmdzS1evFgffPBBIgg1fvx49enTR48//rjuvvtuSdKwYcP0yy+/NPgj+YwzztCgQYP073//WzfccINycnJ01FFHaerUqTrwwAMbtOlt6XNVkqZOnSrDMPThhx8mfo6nnHJKgz/Ct+aZZ56Rx+NJvH4mTpyoqVOn6vXXX9eJJ57YaP/MzEy98847iVGJVVVVuuyyy3Teeefp0UcfTex31llnaeDAgbr11lsT2y+66CL96U9/anB7BxxwgE477TR99NFHiXUFAABJVlSk9KVLJcOQsrPNzjMAsL2CQcnnkzZuNLtX7byzGd4EAABoQ1dddZWOOuoo7bXXXtp///116KGH6ogjjtCoUaMahFROPfVUXXrppXr66ad1++23J7Y//fTTCgQCDbrISOaUiSVLlijt1/B4LBbTbbfdptraWn355ZeJoEphYaHy8vL08MMPNxixt3jxYn3yySc68MADJUm77767xo4dq/PPP1+LFi1KHMfNyMjQlClT9MEHH2jkyJGSpMsvv1w77bSTvvjii8RtXnTRRTrkkEN09dVX66STTlL//v116KGH6h//+IdGjx6duO6mmjqX0pS77rpLP/74o1544YVECEWSrr/++h0OltQHQuo7i23uwAMPVCgU0q233qpDDz00MSJNMn8Gjz76qI466ijtu+++krbtuHm9Pffcs8GYtVWrVunGG2/U3/72N1133XWJ7SeffLJ+97vf6aGHHmqwff369XryySd1xhlnSJImT56snXfeWf/+978Twaonn3xS77zzju655x5deeWVietec801iTX86KOP9NhjjykvL0+TJk1K7DNq1CgdeeSRmjNnToPtm1u0aJEyMzOVmpra5OU33nhjkyP0Pv30Ux1wwAGJ75t6XtR3Oqurq9OXX36ZOJcUiUR09dVXa+jQofrggw8SYxwPOeQQHXvssZoxY4amT5+euJ1QKKRTTz1Vt912W7OPY1NfffWVFi1apPvvvz9xu71791ZeXl6Twaq1a9dq6dKlDZog/P73v9/q60Vq2Tmb1pSfn6/DDjus0fYePXpIMp9nm57T6d+/vyRp4cKFBKuAdoRRgAAstWngp7y8XEVFRRoxYoSWL1+u8vLyBvv269ev0RuBN998U7169dLxxx+f2Ob1enX++ec32O/bb7/VkiVLNGnSJBUXF6uoqEhFRUWqrq7WEUccoQ8++EDxeLwVHqFpxIgRDUJVhmFo7ty5Ou6442QYRqKeoqIijR07VuXl5fr6668lmR2nBg8erEGDBjXYr36+clPduTa16RpXV1erqKhIBx10kAzDaLLV8OZzug899FAtX7488f3rr78up9PZYDa6w+HQpZdeug0r0vqCwaAmTpyY+H7gwIFKT0/X4MGDE6EqSYn/3vQxNmf33XdvEP7p3r27Bg4c2OC6Ho8n8Qd6LBZTcXGxgsGgBg4cmPiZbklLn6uxWExvvfWWTjzxxAbhuPqgWEvl5eXpmGOOSXTr2nXXXbXPPvs02XZXks4///xEqEoyu1CVlZXptNNOa/D8dDgcGj58eIPn56bPxbq6OhUVFSXe2LVkbQAAwDYKh81xXV98IVdlpdmlilAVgGSo714VCEgLF5rhze0cFwMAALA9Ro8erU8//VTHH3+8vvvuO915550aO3asevXq1WAUWFpamk444QQ988wziaBLLBbTs88+qxNPPFGBQKDB7Z566qmJUJX02/Hj008/vUH3n+HDhyscDjcai7b77rsnQlWbXv/www9vcBx38+PSJSUlevfddzV+/HhVVlYmjrMWFxdr7NixWrJkSaP7ak5T51KaMnfuXO25554NQlX1dnS6QPDX956VlZU7dDv1tuccz+bnOl544QXF43GNHz++wbHs3Nxc7brrro3OtQSDwQYfina73dp///0bnA+YO3euunXr1uT5kfo1nDNnjtLS0jR69OgG97vPPvsoGAxu9RxPcXGxMjIymr38ggsu0Lx58xp9bXpOStry8+Kss85qcPz+yy+/1MaNG3XRRRclQlWSdMwxx2jQoEH673//2+g2Nj1ntDV5eXnKyclJfGDfZrNpwoQJmj17tmKxWKP9TznllAahqm15vWzLOZv33nsv6SP4amtrG4Qv69Wva21tbYPt9T/r7R3HCaB10LEKgKU+/vhj3Xjjjfr0009VU1PT4LLy8vIGb2D69evX6PqrVq3SgAEDGv2Rv8suuzT4fsmSJZK0xXF15eXlW/zjdEdsXnthYaHKysr06KOPNujys6mNGzdKMmv/+eefmx1HWL9fc1avXq2pU6fqlVdeaTSve/PwmtfrbXQ/GRkZDa63atUq9ejRI/HGqF5z7YSt0rt370bPi7S0NPXp06fRNkktmmW+6RvfepuvTzwe13333aeHHnpIK1asaPAmoL4z2Za09LkaCoVUW1urXXfdtdHlAwcO1Ouvv77V+/r555/1zTff6Mwzz9TSpUsT20eOHKkHH3xQFRUVjT4Fs/lzub7e+qDf5ja9fklJiaZPn67Zs2c3et5u/lwEAAA7qKjIHP1XUCClpSmUmcnoPwDJFwxKLpdc334rffGFNHCg1K+f1MRYcQAAgGTbb7/99MILLygcDuu7777Tiy++qBkzZmjcuHH69ttvE8GSM888U88++6w+/PBDHXbYYZo/f74KCgoSnYg2tfkx4Prjxy09rry911+6dKkMw9ANN9zQbAedjRs3qlevXs2sxm+aOpfSlGXLlumUU05p0b7bqqqqSpISH+jdUdtzjqepY9mGYTR5TF1So3F8TZ1jyMjI0Pfff5/4ftmyZRo4cGCD0F1TtZeXlys7O7vJy7d2jkfSFsM+u+66q37/+99v9Ta29LzY/LJVq1ZJavq8z6BBg/TRRx812OZ0OtW7d++t1iCZ4abZs2dr1KhRWrFiRWL78OHD9fe//13vvPOOxowZs8X6tuX1sqPnbHaUz+dTKBRqtL2uri5x+abqf9Y7Gm4EkFwEqwBYZtmyZTriiCM0aNAg3XPPPerTp4/cbrdef/11zZgxo9GnCzb/42Jb1N/WXXfdpb322qvJfTYPCiXT5rXX13P66ac3+0Zgjz32SOw7bNgw3XPPPU3ut/kbsk3FYjGNHj1aJSUluvrqqzVo0CAFAgGtW7dOZ599dqM1drTjk23N/RHZ1KcXpOYfS3PbW/IphJZc99Zbb9UNN9ygc889VzfffLMyMzNlt9t1xRVXtKgrWkufq039Ib6tnn76aUnSlVde2aBNcb25c+fqnHPOabCtuefyU089pdzc3Ea3sekbyvHjx+uTTz7Rn//8Z+21114KBoOKx+M68sgjW7VjHAAAXUosJq1YYYaq4nGzS1WSP20JAA04HGZ4MxiUFi6USkqkwYOl9HSrKwMAAF2E2+3Wfvvtp/3220+77babzjnnHM2ZMycxHm3s2LHKycnR008/rcMOO0xPP/20cnNzmwyj7Ohx5e29fv3x0auuuqrZrkKbf6C8OTtyLiVZfvzxR0ktr3lrtuccT1PHsm02m954440mfx6bX39HziVsfr/Z2dnNTolo7kP19bKyslr0wfCt2dLzYkefM5t2hdqad999V/n5+Zo9e7Zmz57d6PK8vLxGwarmzku05PWyo+dsdlSPHj2Un5/faHv9tp49ezbYXv+z7tatW6vXBqDlCFYBsMyrr76qUCikV155pcGnOLbW9nRTO++8sxYuXCjDMBoEbzbtviNJAwYMkGR2z9lacr8tUuDdu3dXSkqKYrHYVusZMGCAvvvuOx1xxBHbXNsPP/ygX375RU888YTOPPPMxPZ58+ZtV92SuebvvPOOqqqqGrzRWLx48XbfZkvUf9KkrKyswfb6T060F88//7xGjRqlf//73w22l5WVNfhDuLmfZUufq927d5fP50t8UmdTLflZGIahWbNmadSoUbrooosaXX7zzTcrLy+vUbCquXqzs7O3WG9paaneeecdTZ8+XVOnTk1sb6p+AACwnaqrpUWLpNWrpYwMqf6TwdGotXUB6BoCAfNrwwapqkoaNEjq3Vvik9YAAKAN7bvvvpLUIMjgcDg0adIkzZw5U3fccYdeeuklnX/++e3qg8b9+/eXZHZNaqtzGAMGDEgEoJKpqqpKL774ovr06aPBgwcn5Ta35RzPlm7DMAz169dPu+22W9Lq+t///qdIJNKo49Wm+8yfP18HH3zwdgWYBg0apLy8vEZTXlrTzjvvLMk817D5tIrFixcnLt8eeXl5ys7O1oMPPtjoshdeeEEvvviiHnnkkS2u1ba8Xlp6zqa17LXXXvrwww8Vj8cbhM/+97//ye/3N3ou1nfxStZrB0BytCw6CgCtoP5Ny6bp/vLycj3++OMtvo2xY8dq3bp1DWam19XV6V//+leD/fbZZx8NGDBAd999d6IF7aYKCwsT/10/U33zAE8yORwOnXLKKZo7d26Tb1w2rWf8+PFat25do8ckmbOXq6urt3g/UsM1NgxD991333bXfvTRRysajerhhx9ObIvFYrr//vu3+zZbov6N0wcffNDgfpsbpWgVh8PR6BMrc+bMSczzrtfc86ylz1WHw6GxY8fqpZde0urVqxOX//zzz3rrrbe2WufHH3+slStX6pxzztG4ceMafU2YMEELFizQ+vXrt3g7Y8eOVWpqqm699VZFIpEt1is1/jTPvffeu9VaAQBACxQUmGO4Vq+WevT4LVQFAG3J6TTDVJL09dfSjz9KSei2CwAAsLkFCxY02Tno9ddfl9R4hNkZZ5yh0tJSTZkyRVVVVTr99NPbpM6Wys7O1siRI/XPf/6zye42rXEO45RTTkmMUNzctnZlqldbW6szzjhDJSUl+utf/5q0ENi2nONpzsknnyyHw6Hp06c3enyGYai4uHib6zrllFNUVFSkBx54oNFl9fcxfvx4xWIx3XzzzY32iUajW/05HnjggTIMQ1999dU217e99t13X2VnZ+uRRx5pMD3jjTfe0M8//6xjjjlmu263trZWL7zwgo499tgmz0tccsklqqysbHDOrynb8npp6TkbSVq9erUWLVq0XY+tOePGjVNBQYFeeOGFxLaioiLNmTNHxx13nDweT4P9v/rqK6WlpWnIkCFJrQPAjqFjFQDLjBkzRm63W8cdd1zizcy//vUvZWdnN/mHUFOmTJmiBx54QKeddpouv/xy9ejRQ3l5efJ6vZJ+++SG3W7XY489pqOOOkpDhgzROeeco169emndunVasGCBUlNT9eqrr0oy/0CXpL/+9a+aOHGiXC6XjjvuuMSblWS5/fbbtWDBAg0fPlznn3++dt99d5WUlOjrr7/W/PnzVVJSIsl8w/fcc8/pwgsv1IIFC3TwwQcrFotp0aJFeu655/TWW28lPoWzuUGDBmnAgAG66qqrtG7dOqWmpmru3Lk71Db2uOOO08EHH6xrrrlGK1eu1O67764XXnhB5eXl232bLTFkyBAdcMABuvbaa1VSUqLMzEzNnj1b0XbWgeHYY4/VTTfdpHPOOUcHHXSQfvjhB+Xl5SU+QVFvwIABSk9P1yOPPKKUlBQFAgENHz5c/fr1a/Fzdfr06XrzzTd16KGH6qKLLlI0GtX999+vIUOGNJjz3pS8vDw5HI5m3wAdf/zx+utf/6rZs2fr//7v/5q9ndTUVD388MM644wztPfee2vixInq3r27Vq9erf/+9786+OCD9cADDyg1NVWHHXaY7rzzTkUiEfXq1Utvv/12gxnqAABgO0Sj0vLl0pIlkt0u9elDdxgA1svMlPx+83dTZaXZvSoz0+qqAABAJ3LppZeqpqZGJ510kgYNGqRwOKxPPvlEzz77rPr27duoE//vfvc7DR06VHPmzNHgwYO19957W1R58x588EEdcsghGjZsmM4//3z1799fBQUF+vTTT7V27Vp99913kswOOA6HQ3fccYfKy8vl8Xh0+OGHKzs7e5vu789//rOef/55nXrqqTr33HO1zz77qKSkRK+88ooeeeQR7bnnnlu8/rp16/T0009LMrtULVy4UHPmzNGGDRv0pz/9SVOmTNm+hWjCtpzjac6AAQP0t7/9Tddee61WrlypE088USkpKVqxYoVefPFFXXDBBbrqqqu2qa4zzzxTTz75pP7v//5Pn3/+uQ499FBVV1dr/vz5uuiii3TCCSdoxIgRmjJlim677TZ9++23GjNmjFwul5YsWaI5c+bovvvu07hx45q9j0MOOURZWVmaP39+o+5RkvT1118nfg6bP94DDzxwmx5PPZfLpTvuuEPnnHOORowYodNOO00FBQW677771LdvX1155ZXbdbuvvPKKKisrdfzxxzd5+QEHHKDu3bsrLy9PEyZM2OJttfT10tJzNpL583z//fdbFCx89dVXE/cRiUT0/fff629/+5sk8/zKHnvsIckMVh1wwAE655xztHDhQnXr1k0PPfSQYrGYpk+f3uh2582bp+OOO65NpusAaDmCVQAsM3DgQD3//PO6/vrrddVVVyk3N1d//OMf1b17d5177rktuo1gMKh3331Xl156qe677z4Fg0GdeeaZOuigg3TKKackAlaSNHLkSH366ae6+eab9cADD6iqqkq5ubkaPnx4gz/w99tvP91888165JFH9Oabbyoej2vFihVJD1bl5OTo888/10033aQXXnhBDz30kLKysjRkyBDdcccdif3sdrteeuklzZgxQ08++aRefPFF+f1+9e/fX5dffvkWW9a6XC69+uqruuyyy3TbbbfJ6/XqpJNO0iWXXLLVN0XNsdvteuWVV3TFFVfo6aefls1m0/HHH6+///3v+t3vfrddt9lSeXl5mjJlim6//Xalp6dr8uTJGjVqlEaPHt2q97strrvuOlVXV2vWrFl69tlntffee+u///2vrrnmmgb7uVwuPfHEE7r22mt14YUXKhqN6vHHH1e/fv1a/FzdY4899NZbb+n//u//NHXqVPXu3VvTp09Xfn7+FoNVkUhEc+bM0UEHHaTMZk5uDB06VP369dPTTz+9xWCVJE2aNEk9e/bU7bffrrvuukuhUEi9evXSoYce2uAAxqxZs3TppZfqwQcflGEYGjNmjN54441GM8QBAEALVVaao//WrJGysqRNxjQDgOW8XrN7VX1HvUGDzPCnnQb6AABgx919992aM2eOXn/9dT366KMKh8PaaaeddNFFF+n6669Xenp6o+uceeaZ+stf/qIzzjij7Qtugd13311ffvmlpk+frpkzZ6q4uFjZ2dn63e9+p6lTpyb2y83N1SOPPKLbbrtNkydPViwW04IFC7Y5WBUMBvXhhx/qxhtv1IsvvqgnnnhC2dnZOuKII9S7vgvpFnz77bc644wzZLPZlJKSoj59+ui4447Teeedp/3333+bH//WtPS4+ZZcc8012m233TRjxoxEqKVPnz4aM2ZMs2GfLXE4HHr99dd1yy23aNasWZo7d66ysrISgZ96jzzyiPbZZx/985//1HXXXSen06m+ffvq9NNP18EHH7zF+3C73frDH/6gOXPm6NZbb210+TPPPKNnnnmm0fazzjpru4NVknT22WfL7/fr9ttv19VXX61AIKCTTjpJd9xxR5Ovr5aob4zQ3Dkdu92uY445Rnl5eVvtINbS10tLz9lsq7lz5+qJJ55IfP/NN9/om2++kST17t07Eayqf478+c9/1j/+8Q/V1tZqv/3208yZMxt11lu0aJF+/PFHJn0A7ZDN2N5ejgDQjt1777268sortXbtWvXq1cvqcgAAQDtTUVGhtLQ0FRUVKSsry+pyuoxIJKLXX39dRx99tFwul9XldFyGIW3YIC1caIarevQwx281IxKN6uOPPtLBhxwi1xb2Q/Kw5tZg3a3RonUvK5OqqqS+faWBA83QFXYI/09te6y5Ner/bi8vL1dqaqrV5QDo4O677z5deeWVWrlypXbaaSerywFabPny5Ro0aJDeeOMNHXHEEVaXg1ZyxRVX6IMPPtBXX31FxyqgneEjYgA6vNra2gbf19XV6Z///Kd23XVXQlUAAADoXCIRafFi6csvzTGAvXtvMVQFAO1CerrUrZu0bJnZvaqoyOqKAABAF2MYhv79739rxIgRhKrQ4fTv31+TJ0/W7bffbnUpaCXFxcV67LHH9Le//Y1QFdAOcfQVQId38skna6eddtJee+2l8vJyPf3001q0aJHy8vKsLg0AAABInqoq6aefpHXrzIBCkkdVA0Cr8nrNUYAFBWY4dNAgaeedJU4aAACAVlRd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QGsEOkBW5HDOXXZ7gEBrpHkGf1moIwpCKKXQz9IrHjsKI0ghkF72mACQRDGc98iL/IrbK3EC6xy6eY60AIIshRACSRSjNAalKS/dV0qJOIxQmhKlMWP/now1OH/Wwjug2Zy9hcph8RBz9Xo1NRiqIiK6IRPX0F27HdWzn0XUvoC8vgzMURdZALBBjDKpI+xvodSzNb7JOIdPty/g+575JZMuhYieRBYpVJkhWziKvHGEoapDTudd5M012DCZdClEREREREQ0ZxisIjrEsm6OD739Y/iy/+N5ky5lZuz1NCyDHHsTaA0hBE4kx/BdP/fGS7e/9AUvwve94tX4ld9+L37vL/7o0u3f/JKvxLf8va/CW3/tV/Cx+z956fZ/9LXfii//3C/EG97xr/DI+dOXbv/x17wOz7/jmfgHP/fGK0JUv/C6N2G5uYBvefMPXlHPr73x53FhawPf94s/fem2JIrxnje9DZ86dxo/8P4PXbr95MpR/OL3/yg+/LE/xS/9xrsu3f7c25+Bn/z278P7PvoBvOfDvzP27+l9H/k9dD/1bHz1165eb9cTERHRBNm4hu7RO1A991lEnfMo6svwUk26rPERAmW1hbC3CTgLzND3vlWkeN7Scbz61s+ddClEdBmV9yCtQbZ0AnltmRfiHXLCGgACRX0fFw0SERERERERHRCDVTQbdq469ODJsl2yxuKDv/AxPP+rb8faHftsky7EXI1fFPDwAPwevuV52j/DEgcRvunmr8XnvvL2S7cpNVhc+56XfyO+655XXro90IO3qR/+lu95SncnAPhXr33DU7o7AcC//advvuIxd7o7/dobf/6K25MoxvGVtafcDgBPP3IUH/7e78V9RYTG2kmI7dehlzz38/FFz37+pfvJ7Y4TX/8lfx9f+6IvG+v35KxH+fCz8IVfsoSTN1ee8j3Mk8HPL38ex45dAYiIds2FCXprd8BLjXjrHPLqwkyOxdsvE9dhoip03odJ6pMuZ9cWwgT//ou/bdJlENFldNYBAKTLN6GotiZbDI1FkLZRVlsoK41Jl0JERERERERziMEqmgle7GSquHC+Ox6/9/aP4cQzl3DnF53Y/1bmbcF8J7i35+97zvbTEGipUImf2r4/CkLgKuuLcRhddTtJFF/19qtt+1q3KyGufruUqEUREkRX/P1glN9T3z4Ho/yeWvyovifv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2bdvX9nRqtJPfvKTTJkyJYMGDconPvGJsuNUnQcffDBjxozJwIEDM3ny5Pztb38rO1JVWrVqVa666qqMGDEiNTU1efzxx8uOVLUWLVqUCy+8MPX19Rk2bFimT5+e119/vexYVWnJkiUZP358Ghoa0tDQkIsvvjhPPfVU2bF6hcWLF6empiZz584tOwoAAAC9mLnGsTPXKIa5RrHMNY6NuUYxzDWKY65RHHON7mOu0fOqcrHqe9/7XkaMGFF2jKrW1NSU3//+93n99dfz2GOP5Y033sg111xTdqyqs2HDhnR0dGTp0qV57bXX8vOf/zy//vWv8/3vf7/saFVp3759ufbaa3PzzTeXHaXqPProo2lubs7ChQuzfv36nH/++bn00kuzffv2sqNVnba2tpx//vl58MEHy45S9V544YXMmTMnL730Up599tns378/X/7yl9PW1lZ2tKozcuTILF68OOvWrcvLL7+cL37xi/nKV76S1157rexoVW3t2rVZunRpxo8fX3YUAAAAejlzjWNnrlEMc41imWscPXON4phrFMdcozjmGt3DXKMcNZ2dnZ1lh+iKp556Ks3NzXnsscfy6U9/Oq+88komTJhQdqyq98QTT2T69Olpb29P//79y45T1e65554sWbIkb775ZtlRqtayZcsyd+7c7N69u+woVWPy5Mm58MIL88ADDyRJOjo6MmrUqNx6662ZP39+yemqV01NTVasWJHp06eXHaVX2LFjR4YNG5YXXnghX/jCF8qOU/UGDx6ce+65JzfccEPZUarS+++/n4kTJ+ZXv/pV7r777kyYMCH33Xdf2bHoQXv27EljY2N27tyZIUOGlB2nz9i/f3+efPLJXHHFFV539CC99zydl0Pv5dB7OfTe83Rejg9/b29tbU1DQ0PZcY6auUb3MNcojrnGsTPX6Dpzje5hrlEsc41imWscG3ON8lTVFavefffdzJ49O7/73e8yaNCgsuP0Grt27crDDz+cKVOmePFRgNbW1gwePLjsGPQh+/bty7p16zJt2rSDx2prazNt2rSsXr26xGRwqNbW1iTxM/IYHThwIMuXL09bW1suvvjisuNUrTlz5uTKK6885GcnAAAAFM1co3uYaxTLXIOeZq5BtTDXKIa5RjHMNcpTNYtVnZ2dmTlzZm666aZccMEFZcfpFW6//facdNJJGTJkSDZt2pSVK1eWHanqbdy4Mffff39uvPHGsqPQh+zcuTMHDhzI8OHDDzk+fPjwbNu2raRUcKiOjo7MnTs3n/vc53LeeeeVHacqvfrqqzn55JNTV1eXm266KStWrMinPvWpsmNVpeXLl2f9+vVZtGhR2VEAAADoxcw1imeuUTxzDcpgrkE1MNc4duYaxTHXKFfpi1Xz589PTU3NR35s2LAh999/f/bu3ZsFCxaUHfm49XG7/NB3v/vdvPLKK/nzn/+cfv365frrr0+VvTNkt+lql0myZcuWXHbZZbn22msze/bskpIff46mS6D3mTNnTv7+979n+fLlZUepWuecc05aWlqyZs2a3HzzzZkxY0b+8Y9/lB2r6mzevDnf+c538vDDD2fgwIFlxwEAAKAKmWsUx1yjOOYaxTHXABJzjSKYaxTDXKN8J5Qd4LbbbsvMmTM/8pwzzzwzf/nLX7J69erU1dUdct8FF1yQb3zjG/ntb3/bjSmrw8ft8kOnnnpqTj311Jx99tn55Cc/mVGjRuWll15y+b10vcutW7emqakpU6ZMyW9+85tuTlddutolXXfqqaemX79+effddw85/u677+a0004rKRX8f7fcckv+9Kc/ZdWqVRk5cmTZcarWgAEDctZZZyVJJk2alLVr1+YXv/hFli5dWnKy6rJu3bps3749EydOPHjswIEDWbVqVR544IG0t7enX79+JSYEAADgeGeuURxzjeKYaxTHXKP7mWtwvDPXKIa5RjHMNcpX+mLV0KFDM3To0P953i9/+cvcfffdB29v3bo1l156aR599NFMnjy5OyNWjY/b5ZF0dHQkSdrb24uMVLW60uWWLVvS1NSUSZMm5aGHHkptbekXgjuuHMvXJR/PgAEDMmnSpDz33HOZPn16kv/7nn7uuedyyy23lBuOPq2zszO33nprVqxYkeeffz5jx44tO1Kv0tHR4d/to/ClL30pr7766iHHZs2alXPPPTe33367Fx8AAAD8T+YaxTHXKI65RnHMNbqfuQbHK3ON7mWucXTMNcpX+mLVxzV69OhDbp988slJknHjxtkS7aI1a9Zk7dq1+fznP59TTjklb7zxRu64446MGzfOX3V00ZYtWzJ16tScccYZ+dnPfpYdO3YcvM9Gfddt2rQpu3btyqZNm3LgwIG0tLQkSc4666yD3/McWXNzc2bMmJELLrggF110Ue677760tbVl1qxZZUerOu+//342btx48PZbb72VlpaWDB48+LB/i/hoc+bMySOPPJKVK1emvr4+27ZtS5I0NjbmxBNPLDlddVmwYEEuv/zyjB49Onv37s0jjzyS559/Ps8880zZ0apOfX19zjvvvEOOnXTSSRkyZMhhxwEAAOBYmGsUx1yjOOYaxTLXOHrmGsUx1yiOuUZxzDWKY65RvqpZrKI4gwYNyh//+McsXLgwbW1tOf3003PZZZflBz/4wWGXJOajPfvss9m4cWM2btx42Ath7+vedXfeeechl7/+zGc+kyT561//mqlTp5aUqjp87Wtfy44dO3LnnXdm27ZtmTBhQp5++ukMHz687GhV5+WXX05TU9PB283NzUmSGTNmZNmyZSWlqk5LlixJksO+fx966KH/eSltDrV9+/Zcf/31eeedd9LY2Jjx48fnmWeeySWXXFJ2NAAAAIBuZ65RHHONYplrHD1zjeKYaxTHXKM45hr0JjWdfksCAAD6mD179qSxsTE7d+7MkCFDyo7TZ+zfvz9PPvlkrrjiivTv37/sOH2G3nuezsuh93LovRx673k6L8eHv7e3tramoaGh7DgAAEAf5E2TAQAAAAAAAAAAKlisAgAAAAAAAAAAqGCxCgAAAAAAAAAAoILFKgAAAAAAAAAAgAoWqwAAAAAAAAAAACpYrAIAAAAAAAAAAKhgsQoAAAAAAAAAAKCCxSoAAAAAAAAAAIAKFqsAAAAAAAAAAAAqWKwCAAAAAAAAAACoYLEKAAAAAAAAAACggsUqAAAAAAAAAACACharAAAAAAAAAAAAKlisAgAAAAAAAAAAqGCxCgAAAAAAAAAAoILFKgAAAAAAAAAAgAoWqwAAgKozZsyY1NTUHPKxePHismMBAAAAAAC9yAllBwAAADgaP/rRjzJ79uyDt+vr60tMAwAAAAAA9DYWqwAAgKpUX1+f00477WOd297envb29oO3W1tbkyS7du3qlmwc2f79+/Pvf/877733Xvr37192nD5D7z1P5+XQezn0Xg699zydl2Pv3r1Jks7OzpKTAAAAfVVNp1ckAABAlRkzZkz+85//ZP/+/Rk9enS+/vWvZ968eTnhhCP/7chdd92VH/7whz2cEgAAKMLmzZszcuTIsmMAAAB9kMUqAACg6tx7772ZOHFiBg8enBdffDELFizIrFmzcu+99x7x/MorVu3evTtnnHFGNm3alMbGxp6K3eft2bMno0aNyubNm9PQ0FB2nD5D7z1P5+XQezn0Xg699zydl6OzszN79+7NiBEjUltbW3YcAACgD/JWgAAAwHFh/vz5+elPf/qR5/zzn//Mueeem+bm5oPHxo8fnwEDBuTGG2/MokWLUldXd9jj6urqjni8sbHRYKwEDQ0Nei+B3nuezsuh93LovRx673k673n+EAIAACiTxSoAAOC4cNttt2XmzJkfec6ZZ555xOOTJ0/OBx98kLfffjvnnHNON6QDAAAAAAD6GotVAADAcWHo0KEZOnToUT22paUltbW1GTZsWMGpAAAAAACAvspiFQAAUFVWr16dNWvWpKmpKfX19Vm9enXmzZuXb37zmznllFM+1ueoq6vLwoULj/j2gHQfvZdD7z1P5+XQezn0Xg699zydAwAA9E01nZ2dnWWHAAAA+LjWr1+fb33rW9mwYUPa29szduzYXHfddWlubjboAgAAAAAACmOxCgAAAAAAAAAAoEJt2QEAAAAAAAAAAACONxarAAAAAAAAAAAAKlisAgAAAAAAAAAAqGCxCgAAAAAAAAAAoILFKgAAoM+7+uqrM3r06AwcODCnn356rrvuumzdurXsWL3W22+/nRtuuCFjx47NiSeemHHjxmXhwoXZt29f2dF6vZ/85CeZMmVKBg0alE984hNlx+m1HnzwwYwZMyYDBw7M5MmT87e//a3sSL3aqlWrctVVV2XEiBGpqanJ448/XnakXm/RokW58MILU19fn2HDhmX69Ol5/fXXy47V6y1ZsiTjx49PQ0NDGhoacvHFF+epp54qO1afs3jx4tTU1GTu3LllRwEAAKAHWKwCAAD6vKampvz+97/P66+/nsceeyxvvPFGrrnmmrJj9VobNmxIR0dHli5dmtdeey0///nP8+tf/zrf//73y47W6+3bty/XXnttbr755rKj9FqPPvpompubs3Dhwqxfvz7nn39+Lr300mzfvr3saL1WW1tbzj///Dz44INlR+kzXnjhhcyZMycvvfRSnn322ezfvz9f/vKX09bWVna0Xm3kyJFZvHhx1q1bl5dffjlf/OIX85WvfCWvvfZa2dH6jLVr12bp0qUZP3582VEAAADoITWdnZ2dZYcAAAA4njzxxBOZPn162tvb079//7Lj9An33HNPlixZkjfffLPsKH3CsmXLMnfu3OzevbvsKL3O5MmTc+GFF+aBBx5IknR0dGTUqFG59dZbM3/+/JLT9X41NTVZsWJFpk+fXnaUPmXHjh0ZNmxYXnjhhXzhC18oO06fMnjw4Nxzzz254YYbyo7S673//vuZOHFifvWrX+Xuu+/OhAkTct9995UdCwAAgG7milUAAAD/ZdeuXXn44YczZcoUS1U9qLW1NYMHDy47BhyTffv2Zd26dZk2bdrBY7W1tZk2bVpWr15dYjLoXq2trUni53gPOnDgQJYvX562trZcfPHFZcfpE+bMmZMrr7zykJ/xAAAA9H4WqwAAAJLcfvvtOemkkzJkyJBs2rQpK1euLDtSn7Fx48bcf//9ufHGG8uOAsdk586dOXDgQIYPH37I8eHDh2fbtm0lpYLu1dHRkblz5+Zzn/tczjvvvLLj9HqvvvpqTj755NTV1eWmm27KihUr8qlPfarsWL3e8uXLs379+ixatKjsKAAAAPQwi1UAAECvNH/+/NTU1Hzkx4YNGw6e/93vfjevvPJK/vznP6dfv365/vrr453Tu6arnSfJli1bctlll+Xaa6/N7NmzS0pe3Y6md4CizJkzJ3//+9+zfPnysqP0Ceecc05aWlqyZs2a3HzzzZkxY0b+8Y9/lB2rV9u8eXO+853v5OGHH87AgQPLjgMAAEAPq+k0KQAAAHqhHTt25L333vvIc84888wMGDDgsOP/+te/MmrUqLz44oveXqcLutr51q1bM3Xq1Hz2s5/NsmXLUlvrb3+OxtF8rS9btixz587N7t27uzld37Jv374MGjQof/jDHzJ9+vSDx2fMmJHdu3e7El4PqKmpyYoVKw7pn+5zyy23ZOXKlVm1alXGjh1bdpw+adq0aRk3blyWLl1adpRe6/HHH89Xv/rV9OvX7+CxAwcOpKamJrW1tWlvbz/kPgAAAHqXE8oOAAAA0B2GDh2aoUOHHtVjOzo6kiTt7e1FRur1utL5li1b0tTUlEmTJuWhhx6yVHUMjuVrnWINGDAgkyZNynPPPXdwsaejoyPPPfdcbrnllnLDQYE6Oztz6623ZsWKFXn++ectVZWoo6PD7yvd7Etf+lJeffXVQ47NmjUr5557bm6//XZLVQAAAL2cxSoAAKBPW7NmTdauXZvPf/7zOeWUU/LGG2/kjjvuyLhx41ytqpts2bIlU6dOzRlnnJGf/exn2bFjx8H7TjvttBKT9X6bNm3Krl27smnTphw4cCAtLS1JkrPOOisnn3xyueF6iebm5syYMSMXXHBBLrrootx3331pa2vLrFmzyo7Wa73//vvZuHHjwdtvvfVWWlpaMnjw4IwePbrEZL3XnDlz8sgjj2TlypWpr6/Ptm3bkiSNjY058cQTS07Xey1YsCCXX355Ro8enb179+aRRx7J888/n2eeeabsaL1afX19zjvvvEOOnXTSSRkyZMhhxwEAAOh9LFYBAAB92qBBg/LHP/4xCxcuTFtbW04//fRcdtll+cEPfpC6urqy4/VKzz77bDZu3JiNGzdm5MiRh9zn3eq715133pnf/va3B29/5jOfSZL89a9/zdSpU0tK1bt87Wtfy44dO3LnnXdm27ZtmTBhQp5++ukMHz687Gi91ssvv5ympqaDt5ubm5P831swLlu2rKRUvduSJUuS5LCfGw899FBmzpzZ84H6iO3bt+f666/PO++8k8bGxowfPz7PPPNMLrnkkrKjAQAAQK9V0+l/rQEAAAAAAAAAAA5RW3YAAAAAAAAAAACA443FKgAAAAAAAAAAgAoWqwAAAAAAAAAAACpYrAIAAAAAAAAAAKhgsQoAAAAAAAAAAKCCxSoAAAAAAAAAAIAKFqsAAAAAAAAAAAAqWKwCAAAAAAAAAACoYLEKAAAAAAAAAACggsUqAAAAAAAAAACACharAAAAAAAAAAAAKvw/mID0gEy9aDAAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 2400x800 with 3 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA1cAAAIjCAYAAADvBuGTAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAWshJREFUeJzt3Xd4VFXi//HPJKRDCDUJIRikilIEFmSRFZaSFSxIh7gUFQtBSizA15Xiqlh2EUQEsa+7rijGRpNQFQFBioJKlV4SiiFAIITk/P7Ib2YZEiCBmbnJzfv1PHnI3Hvm3nMnhzn55Jw512GMMQIAAAAAXBM/qysAAAAAAHZAuAIAAAAADyBcAQAAAIAHEK4AAAAAwAMIVwAAAADgAYQrAAAAAPAAwhUAAAAAeADhCgAAAAA8gHAFAAAAAB5AuAKAInA4HBo/frzV1YAP7d69Ww6HQ++9957VVUEJxHsGULoQrgB43XvvvSeHw+H2VbVqVbVr107z58/32nkzMzM1fvx4LVu2rFDlly1blq+ezq8+ffoU+JyVK1dq/PjxSk9P91zFLXDxzyg4OFh169bV0KFDlZqaanX1Sr05c+boL3/5iypVquT62Tz++OM6duyY1VW7pF27dmno0KGqW7euQkNDFRoaqgYNGigxMVE//fST1dXzqHnz5hGgAEiSylhdAQClxzPPPKOaNWvKGKPU1FS999576ty5s7766ivdcccdHj9fZmamJkyYIElq27ZtoZ83bNgw/eEPf3DbFhcXJ0k6c+aMypT531vnypUrNWHCBA0cOFARERHXWmXLOX9GZ8+e1YoVKzR9+nTNmzdPmzdvVmhoqNXVs8R1112nM2fOKCAgwJLzP/744/rnP/+pxo0ba9SoUapYsaLWr1+v1157TR999JEWL16sevXqWVK3S5kzZ4569+6tMmXKKCEhQY0bN5afn5+2bNmi5ORkTZ8+Xbt27dJ1111ndVU9Yt68eZo2bVqBAevi9wwA9sb/dgA+c/vtt6t58+aux/fff78iIyP13//+1yvh6mq1adNGPXr0KHBfcHCwj2vjWxf+jB544AFVqlRJkyZN0hdffKG+ffsW+JzTp08rLCzMJ/Xz5bmcnCN5Vvjvf/+rf/7zn+rdu7f+85//yN/f37Vv4MCBateunXr27Kn169f79Bf4y/0cdu7cqT59+ui6667T4sWLFR0d7bb/xRdf1Ouvvy4/v+I7ecaT7czu7xkA3BXfdzYAthcREaGQkJB8vxTm5uZq8uTJuvHGGxUcHKzIyEg99NBD+v33393K/fDDD4qPj1flypUVEhKimjVr6r777pOU9zmZKlWqSJImTJjgmu52rVN3LjzG+PHj9cQTT0iSatas6TrH7t27XWWHDh2qzz//XDfddJOCgoJ04403asGCBfmOe+DAAd13332KjIx0lXvnnXfylZs6dapuvPFGhYaGqkKFCmrevLk+/PBD1/6TJ09qxIgRiouLU1BQkKpWraqOHTtq/fr1V3W9f/7znyXlTfGS8n6hL1u2rHbu3KnOnTurXLlySkhIkJT3C+ljjz2m2NhYBQUFqV69evrHP/4hY4zbMc+cOaNhw4apcuXKKleunO666y4dOHAg389n/Pjxcjgc+uWXX9SvXz9VqFBBt956q2v/v//9bzVr1kwhISGqWLGi+vTpo3379rmda/v27erevbuioqIUHBys6tWrq0+fPjpx4oSrTEpKim699VZFRESobNmyqlevnv7v//7Ptf9Sn7lasmSJ2rRpo7CwMEVEROjuu+/Wr7/+6lbGeQ07duxwjW6WL19egwYNUmZm5hVf/wkTJqhChQqaOXOmW7CSpBYtWmjUqFHatGmTZs+eLUkaOnSoypYtW+Cx+/btq6ioKOXk5Li2zZ8/33UN5cqVU5cuXfTzzz+7Pe9yP/OCvPTSSzp9+rTefffdfMFKksqUKaNhw4YpNjbWbfuWLVvUo0cPVaxYUcHBwWrevLm+/PJLtzLO6avfffedkpKSVKVKFYWFhemee+7RkSNH8p3rWq/v22+/Vc+ePVWjRg0FBQUpNjZWI0eO1JkzZ9yeP23aNElym1rrVND7zoYNG3T77bcrPDxcZcuWVfv27bV69eqrvtbLvRcC8C1GrgD4zIkTJ3T06FEZY5SWlqapU6fq1KlTuvfee93KPfTQQ3rvvfc0aNAgDRs2TLt27dJrr72mDRs26LvvvlNAQIDS0tLUqVMnValSRaNHj1ZERIR2796t5ORkSVKVKlU0ffp0PfLII7rnnnvUrVs3SVKjRo2uWM+TJ0/q6NGjbtsqVqyY7y/t3bp107Zt2/Tf//5Xr7zyiipXruw6t9OKFSuUnJysIUOGqFy5cnr11VfVvXt37d27V5UqVZIkpaam6pZbbnGFsSpVqmj+/Pm6//77lZGRoREjRkiS3nzzTQ0bNkw9evTQ8OHDdfbsWf3000/6/vvv1a9fP0nSww8/rNmzZ2vo0KFq0KCBjh07phUrVujXX39V06ZNC/ujctm5c6ckueoqSefPn1d8fLxuvfVW/eMf/1BoaKiMMbrrrru0dOlS3X///WrSpIm+/vprPfHEEzpw4IBeeeUV1/MHDhyojz/+WH/96191yy23aPny5erSpcsl69CzZ0/VqVNHzz//vCuoPffcc3r66afVq1cvPfDAAzpy5IimTp2qP/3pT9qwYYMiIiJ07tw5xcfHKysrS48++qiioqJ04MABzZkzR+np6Spfvrx+/vln3XHHHWrUqJGeeeYZBQUFaceOHfruu+8u+7osWrRIt99+u66//nqNHz9eZ86c0dSpU9W6dWutX7/eNY3UqVevXqpZs6YmTpyo9evX66233lLVqlX14osvXvIc27dv19atWzVw4ECFh4cXWKZ///4aN26c5syZoz59+qh3796aNm2a5s6dq549e7rKZWZm6quvvtLAgQNdIe2DDz7QgAEDFB8frxdffFGZmZmaPn26br31Vm3YsMHtGgr6mV/KnDlzVLt2bbVs2fKyr+GFfv75Z7Vu3VoxMTEaPXq0wsLC9PHHH6tr16769NNPdc8997iVf/TRR1WhQgWNGzdOu3fv1uTJkzV06FDNmjXLVcYT1/fJJ58oMzNTjzzyiCpVqqQ1a9Zo6tSp2r9/vz755BNJee9XBw8eVEpKij744INCXWubNm0UHh6uJ598UgEBAXrjjTfUtm1bLV++PN/rdqVrvdJ7IQAfMwDgZe+++66RlO8rKCjIvPfee25lv/32WyPJ/Oc//3HbvmDBArftn332mZFk1q5de8nzHjlyxEgy48aNK1Q9ly5dWmA9JZldu3YZY0y+47388stu+y8kyQQGBpodO3a4tv34449Gkpk6dapr2/3332+io6PN0aNH3Z7fp08fU758eZOZmWmMMebuu+82N95442WvoXz58iYxMbFQ13sh589o0aJF5siRI2bfvn3mo48+MpUqVTIhISFm//79xhhjBgwYYCSZ0aNHuz3/888/N5LMs88+67a9R48exuFwuF6DdevWGUlmxIgRbuUGDhyY77UdN26ckWT69u3rVnb37t3G39/fPPfcc27bN23aZMqUKePavmHDBiPJfPLJJ5e87ldeecVIMkeOHLlkmV27dhlJ5t1333Vta9Kkialatao5duyYa9uPP/5o/Pz8TP/+/fNdw3333ed2zHvuucdUqlTpkuc05n+v6SuvvHLZcuHh4aZp06bGGGNyc3NNTEyM6d69u1uZjz/+2Egy33zzjTHGmJMnT5qIiAgzePBgt3KHDx825cuXd9t+qZ95QU6cOGEkma5du+bb9/vvv5sjR464vpzt2hhj2rdvbxo2bGjOnj3r2pabm2v++Mc/mjp16ri2Odtphw4dTG5urmv7yJEjjb+/v0lPT/fo9V1YR6eJEycah8Nh9uzZ49qWmJhoLvUr1cXtumvXriYwMNDs3LnTte3gwYOmXLly5k9/+lORr7Uw74UAfIdpgQB8Ztq0aUpJSVFKSor+/e9/q127dnrggQfc/sL6ySefqHz58urYsaOOHj3q+mrWrJnKli2rpUuXSpJr8Yg5c+YoOzvbo/UcO3asq57Or6ioqKs6VocOHVSrVi3X40aNGik8PFy//fabJMkYo08//VR33nmnjDFu1xwfH68TJ064pvRFRERo//79Wrt27SXPFxERoe+//14HDx686vpWqVJFsbGx6tOnj8qWLavPPvtMMTExbuUeeeQRt8fz5s2Tv7+/hg0b5rb9sccekzHGtSqkc0rkkCFD3Mo9+uijl6zTww8/7PY4OTlZubm56tWrl9vrFRUVpTp16rjaSPny5SVJX3/99SWn4Dnb0RdffKHc3NxL1uFChw4d0saNGzVw4EBVrFjRtb1Ro0bq2LGj5s2bd8VraNOmjY4dO6aMjIxLnufkyZOSpHLlyl22PuXKlXMdx+FwqGfPnpo3b55OnTrlKjNr1izFxMS4plWmpKQoPT1dffv2dXsN/f391bJlS9dreKGLf+YFcdajbNmy+fa1bdtWVapUcX05p9IdP35cS5YsUa9evVyjxkePHtWxY8cUHx+v7du368CBA27HevDBB92m3rVp00Y5OTnas2ePR68vJCTE9f3p06d19OhR/fGPf5QxRhs2bLji63GxnJwcLVy4UF27dtX111/v2h4dHa1+/fppxYoV+drEla7Vm++FAIqOaYEAfKZFixZuC1r07dtXN998s4YOHao77rhDgYGB2r59u06cOKGqVasWeIy0tDRJ0m233abu3btrwoQJeuWVV9S2bVt17dpV/fr1U1BQ0DXVs2HDhurQocM1HcOpRo0a+bZVqFDB9fmxI0eOKD09XTNnztTMmTMLPIbzmkeNGqVFixapRYsWql27tjp16qR+/fqpdevWrrIvvfSSBgwYoNjYWDVr1kydO3dW//793X6Ru5xp06apbt26KlOmjCIjI1WvXr180yHLlCmj6tWru23bs2ePqlWrli8I3HDDDa79zn/9/PxUs2ZNt3K1a9e+ZJ0uLrt9+3YZY1SnTp0CyztX9atZs6aSkpI0adIk/ec//1GbNm1011136d5773UFr969e+utt97SAw88oNGjR6t9+/bq1q2bevTocckFF5zXUtAKfTfccIO+/vrrfAsiXNwOKlSoIEn6/fffLznlz/laOkPWpZw8edLt/0vv3r01efJkffnll+rXr59OnTqlefPm6aGHHnL9kr59+3ZJ//tM3cUurlNBP/PL1fnCYOf0xhtv6OTJk0pNTXWbCrxjxw4ZY/T000/r6aefLvC4aWlpbgH/cq+n5Lnr27t3r8aOHasvv/wy32c+L/zcXmEdOXJEmZmZl2w7ubm52rdvn2688UbX9itdqzffCwEUHeEKgGX8/PzUrl07TZkyRdu3b9eNN96o3NxcVa1aVf/5z38KfI7z80wOh0OzZ8/W6tWr9dVXX+nrr7/Wfffdp3/+859avXp1gX85t8LFixA4mf//2SHnaMm9996rAQMGFFjW+TmxG264QVu3btWcOXO0YMECffrpp3r99dc1duxY15LzvXr1Ups2bfTZZ59p4cKFevnll/Xiiy8qOTlZt99++xXre3EALkhQUJBPV3q7cPRAynvNHA6H5s+fX+Dre+HP/p///KcGDhyoL774QgsXLtSwYcM0ceJErV69WtWrV1dISIi++eYbLV26VHPnztWCBQs0a9Ys/fnPf9bChQsv+fMrqiu1g4I4g+nl7gm1Z88eZWRkqEGDBq5tt9xyi+Li4vTxxx+rX79++uqrr3TmzBn17t3bVcbZ7j744IMCR2UvXmSmsD/z8uXLKzo6Wps3b863z/lZIueCLxfX5fHHH1d8fHyBx704fBf2/9W1XF9OTo46duyo48ePa9SoUapfv77CwsJ04MABDRw4sNAjndfqStdaUt4LgdKCcAXAUufPn5f0v79016pVS4sWLVLr1q3z/VJdkFtuuUW33HKLnnvuOX344YdKSEjQRx99pAceeMBtKo23XOs5qlSponLlyiknJ6dQo2VhYWHq3bu3evfurXPnzqlbt2567rnnNGbMGNeSz9HR0RoyZIiGDBmitLQ0NW3aVM8991yhwtXVuu6667Ro0SKdPHnSbfRqy5Ytrv3Of3Nzc7Vr1y63kacdO3YU+ly1atWSMUY1a9ZU3bp1r1i+YcOGatiwof72t79p5cqVat26tWbMmKFnn31WUl7Ib9++vdq3b69Jkybp+eef11NPPaWlS5cW+DNxXsvWrVvz7duyZYsqV67skWW869atq7p16+rzzz/XlClTCpwe+K9//UuS8t3KoFevXpoyZYoyMjI0a9YsxcXF6ZZbbnHtd05VrVq1qsdGaZ26dOmit956S2vWrFGLFi2uWN45qhoQEOCxunji+jZt2qRt27bp/fffV//+/V3bU1JS8pUt7PtAlSpVFBoaesm24+fnl28VxcK63HshAN/hM1cALJOdna2FCxcqMDDQ9Vf6Xr16KScnR3//+9/zlT9//rzS09Ml5U2Jufiv/k2aNJEkZWVlSZJrxS/nc7zB+Uv01Z7D399f3bt316efflrgX/svXHL52LFjbvsCAwPVoEEDGWOUnZ2tnJycfFOVqlatqmrVqrleE2/p3LmzcnJy9Nprr7ltf+WVV+RwOFzBzjky8frrr7uVmzp1aqHP1a1bN/n7+2vChAn52oAxxvU6ZWRkuMK7U8OGDeXn5+d6PY4fP57v+Be3o4tFR0erSZMmev/9991+7ps3b9bChQvVuXPnQl/LlYwdO1a///67Hn74Ybcl1CVp3bp1evHFF3XTTTepe/fubvt69+6trKwsvf/++1qwYIF69erltj8+Pl7h4eF6/vnnC/ycTkHLmhfWk08+qdDQUN13331KTU3Nt//in1nVqlXVtm1bvfHGGzp06JBH6uKJ63OOGF1YX2OMpkyZkq9sYd8H/P391alTJ33xxRduI3ipqan68MMPdeutt15ymuilFOa9EIDvMHIFwGfmz5/vGslIS0vThx9+qO3bt2v06NGuXyhuu+02PfTQQ5o4caI2btyoTp06KSAgQNu3b9cnn3yiKVOmqEePHnr//ff1+uuv65577lGtWrV08uRJvfnmmwoPD3f9chsSEqIGDRpo1qxZqlu3ripWrKibbrpJN910k8euqVmzZpKkp556Sn369FFAQIDuvPPOIo1cvPDCC1q6dKlatmypwYMHq0GDBjp+/LjWr1+vRYsWuQJAp06dFBUVpdatWysyMlK//vqrXnvtNXXp0kXlypVTenq6qlevrh49eqhx48YqW7asFi1apLVr1+qf//ynx665IHfeeafatWunp556Srt371bjxo21cOFCffHFFxoxYoRrJKFZs2bq3r27Jk+erGPHjrmWYt+2bZukwo0A1KpVS88++6zGjBmj3bt3q2vXripXrpx27dqlzz77TA8++KAef/xxLVmyREOHDlXPnj1Vt25dnT9/Xh988IEr0ErSM888o2+++UZdunTRddddp7S0NL3++uuqXr262z21Lvbyyy/r9ttvV6tWrXT//fe7lmIvX778Nd9L7UIJCQlau3atpkyZol9++UUJCQmqUKGC1q9fr3feeUeVKlXS7NmzXZ8zc2ratKlq166tp556SllZWW5TAqW8zxxNnz5df/3rX9W0aVP16dNHVapU0d69ezV37ly1bt06X1AurDp16ujDDz9U3759Va9ePSUkJKhx48YyxmjXrl368MMP5efn5/YZp2nTpunWW29Vw4YNNXjwYF1//fVKTU3VqlWrtH//fv34449FqoMnrq9+/fqqVauWHn/8cR04cEDh4eH69NNP8332Svrf+8CwYcMUHx8vf39/9enTp8DjPvvss657qw0ZMkRlypTRG2+8oaysLL300ktFuk5JhXovBOBDvl2cEEBpVNBS7MHBwaZJkyZm+vTpbssMO82cOdM0a9bMhISEmHLlypmGDRuaJ5980hw8eNAYY8z69etN3759TY0aNUxQUJCpWrWqueOOO8wPP/zgdpyVK1eaZs2amcDAwCsuy+5civ1yS3cXdIy///3vJiYmxvj5+eVbtr2gZdGvu+46M2DAALdtqampJjEx0cTGxpqAgAATFRVl2rdvb2bOnOkq88Ybb5g//elPplKlSiYoKMjUqlXLPPHEE+bEiRPGGGOysrLME088YRo3bmzKlStnwsLCTOPGjc3rr79+yetxcv6MrrSc84ABA0xYWFiB+06ePGlGjhxpqlWrZgICAkydOnXMyy+/nO/ne/r0aZOYmGgqVqxoypYta7p27Wq2bt1qJJkXXnjBVc65jPmllkn/9NNPza233mrCwsJMWFiYqV+/vklMTDRbt241xhjz22+/mfvuu8/UqlXLBAcHm4oV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1q1uZc6ePavExERVqlRJZcuWVffu3ZWamupWZu/everSpYtCQ0NVtWpVPfHEEzp//rwvLwU+Mn36dDVq1Mh1w85WrVpp/vz5rv20F1zJCy+8IIfDoREjRri20W5wofHjx8vhcLh91a9f37W/pLcXwlUxNmvWLCUlJWncuHFav369GjdurPj4eKWlpVldNVjg9OnTaty4saZNm1bg/pdeekmvvvqqZsyYoe+//15hYWGKj4/X2bNnXWUSEhL0888/KyUlRXPmzNE333yjBx980FeXAB9bvny5EhMTtXr1aqWkpCg7O1udOnXS6dOnXWVGjhypr776Sp988omWL1+ugwcPqlu3bq79OTk56tKli86dO6eVK1fq/fff13vvvaexY8dacUnwsurVq+uFF17QunXr9MMPP+jPf/6z7r77bv3888+SaC+4vLVr1+qNN95Qo0aN3LbTbnCxG2+8UYcOHXJ9rVixwrWvxLcXg2KrRYsWJjEx0fU4JyfHVKtWzUycONHCWqE4kGQ+++wz1+Pc3FwTFRVlXn75Zde29PR0ExQUZP773/8aY4z55ZdfjCSzdu1aV5n58+cbh8NhDhw44LO6wzppaWlGklm+fLkxJq+NBAQEmE8++cRV5tdffzWSzKpVq4wxxsybN8/4+fmZw4cPu8pMnz7dhIeHm6ysLN9eACxRoUIF89Zbb9FecFknT540derUMSkpKea2224zw4cPN8bwPoP8xo0bZxo3blzgPju0F0auiqlz585p3bp16tChg2ubn5+fOnTooFWrVllYMxRHu3bt0uHDh93aS/ny5dWyZUtXe1m1apUiIiLUvHlzV5kOHTrIz89P33//vc/rDN87ceKEJKlixYqSpHXr1ik7O9ut3dSvX181atRwazcNGzZUZGSkq0x8fLwyMjJcoxmwp5ycHH300Uc6ffq0WrVqRXvBZSUmJqpLly5u7UPifQYF2759u6pVq6brr79eCQkJ2rt3ryR7tJcyVlcABTt69KhycnLcGo4kRUZGasuWLRbVCsXV4cOHJanA9uLcd/jwYVWtWtVtf5kyZVSxYkVXGdhXbm6uRowYodatW+umm26SlNcmAgMDFRER4Vb24nZTULty7oP9bNq0Sa1atdLZs2dVtmxZffbZZ2rQoIE2btxIe0GBPvroI61fv15r167Nt4/3GVysZcuWeu+991Sv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",
      "text/plain": [
       "<Figure size 1000x600 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Program la Evolución_of_morphological_trees_2.py\n",
    "# Morphological trees considered here are like lighting trees:\n",
    "# a tree extends the electrical thread and at each node there is lamp.\n",
    "# Each lamp has a given power and a circle of illumination,\n",
    "# whose radius is determined by a threshold intensity.\n",
    "# In morphology, this corresponds with a threshold concentration of a messenger.\n",
    "# la Evolución is given the task of illuminating\n",
    "# the area determined by a random tree.\n",
    "# By Gemini 2.5 Flash with a minor help from the Author.\n",
    "\n",
    "\n",
    "\n",
    "import random\n",
    "import matplotlib.pyplot as plt\n",
    "import matplotlib.patches as patches\n",
    "import numpy as np\n",
    "from numpy import array as Array\n",
    "import copy # For deep copying trees during reproduction and mutation\n",
    "import sys # Import sys module to adjust recursion limit\n",
    "\n",
    "sys.setrecursionlimit(3000) # Increase the recursion limit for potentially deep trees\n",
    "\n",
    "# --- SPATIAL TREE NODE FOR DIFFUSION ---\n",
    "\n",
    "class SpatialTreeNode_Evolution_Diffusion2:\n",
    "    def __init__(self, value, x, y, radius, occupied_squares_set, diffusion_nodes_info):\n",
    "        self.value = value\n",
    "        self.x = x\n",
    "        self.y = y\n",
    "        self.children = []\n",
    "\n",
    "        self.radius = radius\n",
    "        self.occupied_squares_set = occupied_squares_set  # Reference to the set of squares occupied by *this* tree's nodes\n",
    "        self.diffusion_nodes_info = diffusion_nodes_info  # Reference to the list of (x,y,radius) for *all* nodes in *this* tree\n",
    "\n",
    "        self.occupied_squares_set.add((x, y))  # Add current node's (x,y) square to the set\n",
    "        self.diffusion_nodes_info.append((x, y, radius))  # Add current node's (x,y,radius) to the list\n",
    "\n",
    "    def add_child(self, child_node):\n",
    "        if not isinstance(child_node, SpatialTreeNode_Evolution_Diffusion2):\n",
    "            raise TypeError(\"Child must be an instance of SpatialTreeNode_Evolution_Diffusion\")\n",
    "        self.children.append(child_node)\n",
    "\n",
    "    def get_neighboring_coordinates(self):\n",
    "        neighbors = []\n",
    "        for dx in [-1, 0, 1]:\n",
    "            for dy in [-1, 0, 1]:\n",
    "                if dx == 0 and dy == 0:\n",
    "                    continue  # Exclude the current square itself\n",
    "                neighbors.append((self.x + dx, self.y + dy))\n",
    "        return neighbors\n",
    "\n",
    "    def _is_diffusion_overlapping_local(self, potential_nx, potential_ny, potential_radius, overlap_factor):\n",
    "        \"\"\"\n",
    "        Checks if a potential new node's diffusion circle overlaps \"too much\" with EXISTING nodes IN THE SAME TREE.\n",
    "        \"Too much overlap\" is defined by the overlap_factor.\n",
    "        \"\"\"\n",
    "        potential_center_x, potential_center_y = potential_nx + 0.5, potential_ny + 0.5\n",
    "\n",
    "        for ex, ey, er in self.diffusion_nodes_info:\n",
    "            # Skip checking against self if self is already in diffusion_nodes_info\n",
    "            if (ex, ey) == (self.x, self.y):\n",
    "                continue\n",
    "\n",
    "            existing_center_x, existing_center_y = ex + 0.5, ey + 0.5\n",
    "\n",
    "            # Calculate distance between centers\n",
    "            distance = np.sqrt((potential_center_x - existing_center_x)**2 + (potential_ny - existing_center_y)**2)\n",
    "\n",
    "            # Check for significant overlap\n",
    "            # If distance is less than a fraction of the sum of radii, it's too much overlap.\n",
    "            if distance < overlap_factor * (potential_radius + er):\n",
    "                return True # Significant overlap detected\n",
    "        return False\n",
    "\n",
    "    def add_child_in_random_neighbor(self, child_value_prefix, max_node_radius, overlap_factor):\n",
    "        coordinates_neighbors = self.get_neighboring_coordinates()\n",
    "\n",
    "        # First, filter for unoccupied grid squares *within this tree*\n",
    "        available_square_neighbors = [coord for coord in coordinates_neighbors if coord not in self.occupied_squares_set]\n",
    "\n",
    "        valid_child_candidates = []  # Store (nx, ny, child_radius) for candidates that pass overlap check\n",
    "\n",
    "        for nx, ny in available_square_neighbors:\n",
    "            # Generate potential radius for this child, ensuring it's not too large or small\n",
    "            child_radius = random.uniform(0.5, max_node_radius)\n",
    "            if not self._is_diffusion_overlapping_local(nx, ny, child_radius, overlap_factor):\n",
    "                valid_child_candidates.append((nx, ny, child_radius))\n",
    "\n",
    "        if not valid_child_candidates:\n",
    "            return None  # No available neighbors that satisfy both square and diffusion overlap conditions\n",
    "\n",
    "        # Choose a random valid candidate\n",
    "        chosen_nx, chosen_ny, chosen_child_radius = random.choice(valid_child_candidates)\n",
    "\n",
    "        child_value = f\"{child_value_prefix}_{len(self.children) + 1}\"\n",
    "        # Create child node; its __init__ will update occupied_squares_set and diffusion_nodes_info\n",
    "        child_node = SpatialTreeNode_Evolution_Diffusion2(child_value, chosen_nx, chosen_ny, chosen_child_radius, self.occupied_squares_set, self.diffusion_nodes_info)\n",
    "        self.add_child(child_node)\n",
    "        return child_node\n",
    "\n",
    "    def get_all_nodes(self):\n",
    "        all_nodes = []\n",
    "        stack = [self]\n",
    "        while stack:\n",
    "            node = stack.pop()\n",
    "            all_nodes.append(node)\n",
    "            for child in node.children:\n",
    "                stack.append(child)\n",
    "        return all_nodes\n",
    "\n",
    "    def __repr__(self):\n",
    "        return f\"SpatialTreeNode_Evolution_Diffusion(value={self.value}, x={self.x}, y={self.y}, R={self.radius:.2f}, children={[child.value for child in self.children]!r})\"\n",
    "\n",
    "\n",
    "# --- TREE GENERATION ---\n",
    "\n",
    "def generate_random_spatial_tree_diffusion2(\n",
    "    max_depth, max_children, max_node_radius, initial_x, initial_y, node_prefix=\"Node\",\n",
    "    current_depth=0, parent_node=None, occupied_squares_set=None, diffusion_nodes_info=None, overlap_factor=0.7\n",
    "):\n",
    "    if occupied_squares_set is None:\n",
    "        occupied_squares_set = set() # Initialize a new set for this tree's square coordinates\n",
    "    if diffusion_nodes_info is None:\n",
    "        diffusion_nodes_info = [] # Initialize a new list for this tree's node (x,y,radius) information\n",
    "\n",
    "    if parent_node is None:\n",
    "        # Root node at (initial_x, initial_y) with a random initial radius\n",
    "        node_value = f\"{node_prefix}_Root_{random.randint(0, 99)}\"\n",
    "        initial_radius = random.uniform(0.5, max_node_radius)\n",
    "        current_node = SpatialTreeNode_Evolution_Diffusion2(node_value, initial_x, initial_y, initial_radius, occupied_squares_set, diffusion_nodes_info)\n",
    "    else:\n",
    "        # Children are added by the parent's method, which handles their coordinates and radius\n",
    "        current_node = parent_node.add_child_in_random_neighbor(f\"{node_prefix}_{current_depth}\", max_node_radius, overlap_factor)\n",
    "        if current_node is None:\n",
    "            return None # Branch terminated if no available neighbor\n",
    "\n",
    "    if current_depth < max_depth:\n",
    "        num_children = random.randint(0, max_children) # Random number of children for this node\n",
    "        for _ in range(num_children):\n",
    "            generate_random_spatial_tree_diffusion2(\n",
    "                max_depth, max_children, max_node_radius, initial_x, initial_y, node_prefix,\n",
    "                current_depth + 1, current_node, occupied_squares_set, diffusion_nodes_info, overlap_factor\n",
    "            )\n",
    "    return current_node\n",
    "\n",
    "\n",
    "# --- ILLUMINATION AND FITNESS FUNCTIONS ---\n",
    "\n",
    "def get_illuminated_area2(tree_root, resolution):\n",
    "    \"\"\"\n",
    "    Calculates the set of (x,y) integer coordinates illuminated by the tree.\n",
    "    resolution: determines how many points to sample within a unit square to check illumination.\n",
    "    \"\"\"\n",
    "    if tree_root is None:\n",
    "        return set()\n",
    "\n",
    "    illuminated_coords = set()\n",
    "    all_nodes_info = tree_root.diffusion_nodes_info # (x, y, radius) for all nodes in the tree\n",
    "\n",
    "    # Determine the bounding box for efficient sampling\n",
    "    all_x = [info[0] for info in all_nodes_info]\n",
    "    all_y = [info[1] for info in all_nodes_info]\n",
    "    all_radii = [info[2] for info in all_nodes_info]\n",
    "\n",
    "    if not all_x or not all_y:\n",
    "        return set()\n",
    "\n",
    "    min_x_bound = int(min(x - r for x, _, r in all_nodes_info)) - 1\n",
    "    max_x_bound = int(max(x + r for x, _, r in all_nodes_info)) + 1\n",
    "    min_y_bound = int(min(y - r for _, y, r in all_nodes_info)) - 1\n",
    "    max_y_bound = int(max(y + r for _, y, r in all_nodes_info)) + 1\n",
    "\n",
    "    # Iterate through potential integer square coordinates within the bounding box\n",
    "    for ix in range(min_x_bound - 1, max_x_bound + 1):\n",
    "        for iy in range(min_y_bound - 1, max_y_bound + 1):\n",
    "            # Sample points within this unit square\n",
    "            is_square_illuminated = False\n",
    "            for i in range(resolution):\n",
    "                for j in range(resolution):\n",
    "                    sample_x = ix + (i / resolution)\n",
    "                    sample_y = iy + (j / resolution)\n",
    "\n",
    "                    for node_x, node_y, node_radius in all_nodes_info:\n",
    "                        center_x, center_y = node_x + 0.5, node_y + 0.5\n",
    "                        distance = np.sqrt((sample_x - center_x)**2 + (sample_y - center_y)**2)\n",
    "                        if distance <= node_radius:\n",
    "                            is_square_illuminated = True\n",
    "                            break\n",
    "                if is_square_illuminated:\n",
    "                    break\n",
    "            if is_square_illuminated:\n",
    "                illuminated_coords.add((ix, iy))\n",
    "\n",
    "    return illuminated_coords\n",
    "\n",
    "def calculate_fitness_illumination2(candidate_tree_root, target_illuminated_area):\n",
    "    \"\"\"\n",
    "    Calculates fitness based on the symmetric difference between illuminated areas.\n",
    "    Fitness is 1.0 for a perfect match, and decreases as symmetric difference increases.\n",
    "    \"\"\"\n",
    "    if candidate_tree_root is None:\n",
    "        # If the tree generation failed, assign a very low fitness\n",
    "        return 0.0001 # A small non-zero value to avoid division by zero issues later\n",
    "\n",
    "    candidate_illuminated_area = get_illuminated_area2(candidate_tree_root)\n",
    "\n",
    "    # Symmetric difference: (A U B) - (A intersect B)\n",
    "    # Or, the elements in A but not B, plus elements in B but not A.\n",
    "    symmetric_difference = candidate_illuminated_area.symmetric_difference(target_illuminated_area)\n",
    "\n",
    "    # Union size: used for normalization\n",
    "    union_size = len(candidate_illuminated_area.union(target_illuminated_area))\n",
    "\n",
    "    if union_size == 0:\n",
    "        if not target_illuminated_area and not candidate_illuminated_area:\n",
    "            return 1.0 # Perfect match if both are empty\n",
    "        else:\n",
    "            return 0.0001 # Should not happen if target is non-empty, but handles cases where both are empty but expected non-empty\n",
    "\n",
    "    # Fitness is 1.0 - (len(symmetric_difference) / union_size)\n",
    "    # This gives 1.0 for a perfect match (symmetric_difference_area = 0)\n",
    "    # and approaches 0.0 for large differences.\n",
    "    fitness = 1.0 - (len(symmetric_difference) / union_size)\n",
    "    return max(0.0001, fitness) # Ensure fitness is always positive\n",
    "\n",
    "\n",
    "# --- la EvoluciónARY ALGORITHM COMPONENTS ---\n",
    "\n",
    "def create_initial_population_diffusion2(pop_size, max_depth, max_children, max_node_radius, initial_x, initial_y, overlap_factor, node_prefix=\"Individual\"):\n",
    "    population = []\n",
    "    for i in range(pop_size):\n",
    "        # Each tree needs its own occupied_squares_set and diffusion_nodes_info for independent generation\n",
    "        occupied_squares = set()\n",
    "        diffusion_info = []\n",
    "        tree = generate_random_spatial_tree_diffusion2(\n",
    "            max_depth=max_depth, max_children=max_children, max_node_radius=max_node_radius,\n",
    "            initial_x=initial_x, initial_y=initial_y, node_prefix=f\"{node_prefix}_{i}\",\n",
    "            occupied_squares_set=occupied_squares, diffusion_nodes_info=diffusion_info, overlap_factor=overlap_factor\n",
    "        )\n",
    "        if tree:\n",
    "            population.append(tree)\n",
    "    # If not enough trees generated due to space constraints, fill with more random ones (or handle error)\n",
    "    while len(population) < pop_size:\n",
    "        occupied_squares = set()\n",
    "        diffusion_info = []\n",
    "        new_tree = generate_random_spatial_tree_diffusion2(\n",
    "            max_depth=max_depth, max_children=max_children, max_node_radius=max_node_radius,\n",
    "            initial_x=initial_x, initial_y=initial_y, node_prefix=f\"RandomFill_{len(population)}\",\n",
    "            occupied_squares_set=occupied_squares, diffusion_nodes_info=diffusion_info,\n",
    "            overlap_factor=overlap_factor\n",
    "        )\n",
    "        if new_tree:\n",
    "            population.append(new_tree)\n",
    "        else:\n",
    "            # Handle case where a new tree could not be generated\n",
    "            # This might happen if parameters are too restrictive or space is exhausted\n",
    "            break # Exit if we can't generate enough valid trees\n",
    "    return population\n",
    "\n",
    "def select_parents_diffusion2(population, fitness_scores, num_parents):\n",
    "    parents = []\n",
    "    # Use roulette wheel selection or tournament selection. Tournament is generally robust.\n",
    "    for _ in range(num_parents):\n",
    "        tournament_size = min(5, len(population))\n",
    "        if tournament_size == 0:\n",
    "            break\n",
    "        tournament_candidates = random.sample(list(zip(population, fitness_scores)), tournament_size)\n",
    "        winner = max(tournament_candidates, key=lambda x: x[1])[0]\n",
    "        parents.append(winner)\n",
    "    return parents\n",
    "\n",
    "def mutate_tree_diffusion2(tree_root, max_depth, max_children, max_node_radius, mutation_rate, overlap_factor):\n",
    "    mutated_tree = copy.deepcopy(tree_root) # Work on a deep copy\n",
    "    all_nodes = mutated_tree.get_all_nodes()\n",
    "\n",
    "    if not all_nodes:\n",
    "        return mutated_tree\n",
    "\n",
    "    node_to_mutate = random.choice(all_nodes)\n",
    "\n",
    "    # Mutation 1: Add a child\n",
    "    if random.random() < mutation_rate:\n",
    "        # Need to regenerate the local_occupied_set and diffusion_nodes_info for the deepcopy\n",
    "        # This is a bit inefficient but ensures correctness after deepcopy/mutation operations\n",
    "        temp_occupied_set = set()\n",
    "        temp_diffusion_info = []\n",
    "        # Re-populate temp_occupied_set and temp_diffusion_info by traversing the deepcopied tree\n",
    "        stack = [mutated_tree]\n",
    "        while stack:\n",
    "            node = stack.pop()\n",
    "            temp_occupied_set.add((node.x, node.y))\n",
    "            temp_diffusion_info.append((node.x, node.y, node.radius))\n",
    "            for child in node.children:\n",
    "                stack.append(child)\n",
    "\n",
    "        # Now, try to add a child to the chosen node\n",
    "        node_to_mutate.occupied_squares_set = temp_occupied_set # Update reference for chosen node\n",
    "        node_to_mutate.diffusion_nodes_info = temp_diffusion_info # Update reference for chosen node\n",
    "\n",
    "        node_to_mutate.add_child_in_random_neighbor(\"MutatedChild\", max_node_radius, overlap_factor)\n",
    "\n",
    "    # Mutation 2: Change node radius\n",
    "    if random.random() < mutation_rate:\n",
    "        node_to_mutate.radius = random.uniform(0.5, max_node_radius)\n",
    "\n",
    "    # Mutation 3: Remove a child (if any)\n",
    "    if random.random() < mutation_rate and node_to_mutate.children:\n",
    "        child_to_remove = random.choice(node_to_mutate.children)\n",
    "        node_to_mutate.children.remove(child_to_remove)\n",
    "        # Note: Removing a child means its coordinates and diffusion info are no longer strictly part of the tree\n",
    "        # The fitness function will re-evaluate the actual illuminated area, handling this implicitly.\n",
    "\n",
    "    return mutated_tree\n",
    "\n",
    "def crossover_trees_diffusion2(parent1_root, parent2_root, crossover_rate, max_node_radius, overlap_factor):\n",
    "    if random.random() > crossover_rate:\n",
    "        return copy.deepcopy(parent1_root), copy.deepcopy(parent2_root)\n",
    "\n",
    "    child1_root = copy.deepcopy(parent1_root)\n",
    "    child2_root = copy.deepcopy(parent2_root)\n",
    "\n",
    "    all_nodes_child1 = child1_root.get_all_nodes()\n",
    "    all_nodes_child2 = child2_root.get_all_nodes()\n",
    "\n",
    "    # Ensure there are nodes to swap beyond just the root\n",
    "    if len(all_nodes_child1) < 2 or len(all_nodes_child2) < 2:\n",
    "        return child1_root, child2_root\n",
    "\n",
    "    # Choose random nodes (not roots) to be crossover points\n",
    "    cross_point1 = random.choice([n for n in all_nodes_child1 if n != child1_root])\n",
    "    cross_point2 = random.choice([n for n in all_nodes_child2 if n != child2_root])\n",
    "\n",
    "    # Find parent of cross_point1 in child1_root tree\n",
    "    parent_cross_point1 = None\n",
    "    for node in all_nodes_child1:\n",
    "        if cross_point1 in node.children:\n",
    "            parent_cross_point1 = node\n",
    "            break\n",
    "\n",
    "    # Find parent of cross_point2 in child2_root tree\n",
    "    parent_cross_point2 = None\n",
    "    for node in all_nodes_child2:\n",
    "        if cross_point2 in node.children:\n",
    "            parent_cross_point2 = node\n",
    "            break\n",
    "\n",
    "    if parent_cross_point1 and parent_cross_point2:  # Perform swap\n",
    "        # Remove subtrees from parents\n",
    "        parent_cross_point1.children.remove(cross_point1)\n",
    "        parent_cross_point2.children.remove(cross_point2)\n",
    "\n",
    "        # Attach swapped subtrees\n",
    "        parent_cross_point1.add_child(cross_point2)\n",
    "        parent_cross_point2.add_child(cross_point1)\n",
    "\n",
    "        # After crossover, the `occupied_squares_set` and `diffusion_nodes_info` of the affected trees\n",
    "        # (child1_root, child2_root, and their subtrees) might be inconsistent.\n",
    "        # These will be implicitly re-calculated by `get_illuminated_area` for fitness evaluation.\n",
    "        # For mutation, we explicitly rebuild them (as seen in mutate_tree_diffusion).\n",
    "\n",
    "    return child1_root, child2_root\n",
    "\n",
    "\n",
    "# --- PLOTTING FUNCTIONS ---\n",
    "\n",
    "def plot_illuminated_area2(ax, illuminated_coords, title, color='blue', alpha=0.5):\n",
    "    ax.set_aspect('equal', adjustable='box')\n",
    "    if not illuminated_coords:\n",
    "        ax.set_title(title)\n",
    "        ax.grid(True)\n",
    "        return\n",
    "\n",
    "    for x, y in illuminated_coords:\n",
    "        rect = patches.Rectangle((x, y), 1, 1, facecolor=color, alpha=alpha, edgecolor='black', linewidth=0.5)\n",
    "        ax.add_patch(rect)\n",
    "\n",
    "    min_x = min(c[0] for c in illuminated_coords) - 1\n",
    "    max_x = max(c[0] for c in illuminated_coords) + 2\n",
    "    min_y = min(c[1] for c in illuminated_coords) - 1\n",
    "    max_y = max(c[1] for c in illuminated_coords) + 2\n",
    "\n",
    "    ax.set_xlim(min_x, max_x)\n",
    "    ax.set_ylim(min_y, max_y)\n",
    "    ax.set_xticks(range(int(min_x), int(max_x)))\n",
    "    ax.set_yticks(range(int(min_y), int(max_y)))\n",
    "    ax.grid(True)\n",
    "    ax.set_title(title)\n",
    "\n",
    "def plot_tree_with_illumination2(tree_root, illuminated_coords, ax, tree_color='lightblue', diff_color='red', title=\"\"):\n",
    "    # Plot illuminated area first (background)\n",
    "    for x, y in illuminated_coords:\n",
    "        rect = patches.Rectangle((x, y), 1, 1, facecolor=diff_color, alpha=0.5, zorder=0) # Changed alpha for more transparency\n",
    "        ax.add_patch(rect)\n",
    "\n",
    "    if tree_root is None:\n",
    "        return\n",
    "\n",
    "    # Plot tree nodes and their diffusion circles\n",
    "    all_nodes = tree_root.get_all_nodes()\n",
    "    for node in all_nodes:\n",
    "        # Plot the square representing the cell\n",
    "        rect = patches.Rectangle((node.x, node.y), 1, 1, facecolor=tree_color, edgecolor='black', linewidth=1, zorder=1)\n",
    "        ax.add_patch(rect)\n",
    "        ax.text(node.x + 0.5, node.y + 0.5, node.value.split('_')[-1], ha='center', va='center', color='darkblue', fontsize=7, zorder=2)\n",
    "\n",
    "        # Plot the circle representing the radius of influence\n",
    "        circle = patches.Circle((node.x + 0.5, node.y + 0.5), node.radius, color='red', alpha=0.2, zorder=2)\n",
    "        ax.add_patch(circle)\n",
    "\n",
    "    # Draw lines connecting parent to children\n",
    "    for node in all_nodes:\n",
    "        for child in node.children:\n",
    "            ax.plot([node.x + 0.5, child.x + 0.5], [node.y + 0.5, child.y + 0.5], 'k--', linewidth=0.8, zorder=3)\n",
    "\n",
    "    ax.set_aspect('equal', adjustable='box')\n",
    "    ax.set_title(title)\n",
    "\n",
    "    # Set plot limits based on the illuminated coordinates\n",
    "    if illuminated_coords:\n",
    "        all_x = [c[0] for c in illuminated_coords]\n",
    "        all_y = [c[1] for c in illuminated_coords]\n",
    "\n",
    "        min_x_val = min(all_x) - 1\n",
    "        max_x_val = max(all_x) + 2\n",
    "        min_y_val = min(all_y) - 1\n",
    "        max_y_val = max(all_y) + 2\n",
    "\n",
    "        ax.set_xlim(min_x_val, max_x_val)\n",
    "        ax.set_ylim(min_y_val, max_y_val)\n",
    "        ax.set_xticks(range(int(min_x_val), int(max_x_val)))\n",
    "        ax.set_yticks(range(int(min_y_val), int(max_y_val)))\n",
    "    ax.grid(True)\n",
    "\n",
    "\n",
    "# --- MAIN la EvoluciónARY SIMULATION LOOP ---\n",
    "\n",
    "def run_evolutionary_lighting_lab2(target_tree_params, ga_params):\n",
    "\n",
    "    # 1. Generate Target Tree and its Illuminated Area\n",
    "    print(\"\\n--- Generating Target Tree ---\")\n",
    "    random.seed(ga_params['seed'] + 1) # Use a different seed for target generation\n",
    "    target_occupied_squares = set()\n",
    "    target_diffusion_info = []\n",
    "    target_tree_root = generate_random_spatial_tree_diffusion2(\n",
    "        max_depth=target_tree_params['max_depth'], max_children=target_tree_params['max_children'],\n",
    "        max_node_radius=target_tree_params['max_node_radius'], initial_x=0, initial_y=0,\n",
    "        node_prefix=\"Target\", occupied_squares_set=target_occupied_squares,\n",
    "        diffusion_nodes_info=target_diffusion_info, overlap_factor=target_tree_params['overlap_factor']\n",
    "    )\n",
    "\n",
    "    if not target_tree_root:\n",
    "        print(\"Failed to generate target tree. Exiting.\")\n",
    "        return None, None, None, None, []\n",
    "\n",
    "    target_illuminated_area = get_illuminated_area2(target_tree_root, resolution=ga_params['illumination_resolution'])\n",
    "    print(f\"Target Tree Generated with {len(target_tree_root.get_all_nodes())} nodes. Illuminated area size: {len(target_illuminated_area)}\")\n",
    "\n",
    "    # 2. Initialize Population\n",
    "    random.seed(ga_params['seed']) # Reset seed for GA population generation\n",
    "    print(f\"\\n--- Initializing Population of {ga_params['pop_size']} Trees ---\")\n",
    "    population = create_initial_population_diffusion2(\n",
    "        pop_size=ga_params['pop_size'], max_depth=ga_params['max_depth'], max_children=ga_params['max_children'],\n",
    "        max_node_radius=ga_params['max_node_radius'], initial_x=0, initial_y=0,\n",
    "        overlap_factor=ga_params['overlap_factor']\n",
    "    )\n",
    "    print(f\"Population initialized with {len(population)} individuals.\")\n",
    "\n",
    "    best_tree_overall = None\n",
    "    best_fitness_overall = -1.0\n",
    "    history = []\n",
    "\n",
    "    # 3. la Evoluciónary Loop\n",
    "    print(f\"\\n--- Starting la Evoluciónary Loop for {ga_params['generations']} Generations ---\")\n",
    "    for generation in range(ga_params['generations']):\n",
    "        fitness_scores = [calculate_fitness_illumination2(tree, target_illuminated_area) for tree in population]\n",
    "\n",
    "        current_best_fitness = max(fitness_scores)\n",
    "        current_best_tree = population[np.argmax(fitness_scores)]\n",
    "\n",
    "        if current_best_fitness > best_fitness_overall:\n",
    "            best_fitness_overall = current_best_fitness\n",
    "            best_tree_overall = copy.deepcopy(current_best_tree) # Deepcopy to save the best tree\n",
    "\n",
    "        history.append(current_best_fitness)\n",
    "\n",
    "        print(f\"Generation {generation+1}/{ga_params['generations']}: Best Fitness = {current_best_fitness:.4f} (Overall Best: {best_fitness_overall:.4f})\")\n",
    "\n",
    "        if best_fitness_overall >= 0.999: # Almost perfect match\n",
    "            print(\"Target illumination achieved (or very close)! Stopping la Evolución.\")\n",
    "            break\n",
    "\n",
    "        # Selection\n",
    "        parents = select_parents_diffusion2(population, fitness_scores, ga_params['pop_size'] // 2)\n",
    "\n",
    "        # Create next generation\n",
    "        next_population = []\n",
    "        # Elitism: Keep the best individual from the current generation\n",
    "        if best_tree_overall and current_best_fitness == best_fitness_overall: # Only if it's the current best in this generation\n",
    "            next_population.append(copy.deepcopy(current_best_tree))\n",
    "\n",
    "        while len(next_population) < ga_params['pop_size']:\n",
    "            if len(parents) < 2: # Not enough parents for crossover, fill with new random trees\n",
    "                occupied_squares = set()\n",
    "                diffusion_info = []\n",
    "                new_tree = generate_random_spatial_tree_diffusion2(\n",
    "                    max_depth=ga_params['max_depth'], max_children=ga_params['max_children'],\n",
    "                    max_node_radius=ga_params['max_node_radius'], initial_x=0, initial_y=0,\n",
    "                    node_prefix=f\"RandomFill_{len(next_population)}\",\n",
    "                    occupied_squares_set=occupied_squares, diffusion_nodes_info=diffusion_info,\n",
    "                    overlap_factor=ga_params['overlap_factor']\n",
    "                )\n",
    "                if new_tree:\n",
    "                    next_population.append(new_tree)\n",
    "                continue\n",
    "\n",
    "            # Randomly pick two parents (can be the same parent multiple times with replacement for simplicity)\n",
    "            p1 = random.choice(parents)\n",
    "            p2 = random.choice(parents)\n",
    "\n",
    "            # Crossover\n",
    "            child1, child2 = crossover_trees_diffusion2(p1, p2, ga_params['crossover_rate'], ga_params['max_node_radius'], ga_params['overlap_factor'])\n",
    "\n",
    "            # Mutation\n",
    "            mutated_child1 = mutate_tree_diffusion2(child1, ga_params['max_depth'], ga_params['max_children'], ga_params['max_node_radius'], ga_params['mutation_rate'], ga_params['overlap_factor'])\n",
    "            mutated_child2 = mutate_tree_diffusion2(child2, ga_params['max_depth'], ga_params['max_children'], ga_params['max_node_radius'], ga_params['mutation_rate'], ga_params['overlap_factor'])\n",
    "\n",
    "            next_population.append(mutated_child1)\n",
    "            if len(next_population) < ga_params['pop_size']:\n",
    "                next_population.append(mutated_child2)\n",
    "\n",
    "        population = next_population[:ga_params['pop_size']]\n",
    "\n",
    "    print(\"\\n--- la Evolución Finished ---\")\n",
    "    print(f\"Final Best Fitness: {best_fitness_overall:.4f}\")\n",
    "\n",
    "    return target_tree_root, target_illuminated_area, best_tree_overall, best_fitness_overall, history\n",
    "\n",
    "\n",
    "# --- MAIN EXECUTION ---\n",
    "\n",
    "if __name__ == \"__main__\":\n",
    "      # Parameters for the target tree generation\n",
    "    TARGET_TREE_PARAMS = {\n",
    "        'max_depth': 3,\n",
    "        'max_children': 2,\n",
    "        'max_node_radius': 3.0,\n",
    "        'overlap_factor': 0.7\n",
    "    }\n",
    "\n",
    "    # Parameters for the Genetic Algorithm\n",
    "    GA_PARAMS = {\n",
    "        'seed': 67682,\n",
    "        'pop_size': 10,\n",
    "        'generations': 500,\n",
    "        'max_depth': 3,\n",
    "        'max_children': 3,\n",
    "        'max_node_radius': 3.0,\n",
    "        'mutation_rate': 0.1,\n",
    "        'crossover_rate': 0.7,\n",
    "        'overlap_factor': 0.7,\n",
    "        'illumination_resolution': 100 # Increased resolution for more accurate illumination calculation\n",
    "    }\n",
    "\n",
    "\n",
    "    target_tree, target_area, evolved_best_tree, evolved_best_fitness, history = run_evolutionary_lighting_lab2(TARGET_TREE_PARAMS, GA_PARAMS)\n",
    "\n",
    "    # --- Plotting Results ---\n",
    "    if target_tree and evolved_best_tree:\n",
    "        fig, axes = plt.subplots(1, 3, figsize=(24, 8))\n",
    "\n",
    "        # Plot 1: Target Tree Structure and its Illumination\n",
    "        plot_tree_with_illumination2(target_tree, target_area, axes[0], tree_color='skyblue', diff_color='green', title=\"Target Tree and Illuminated Area\")\n",
    "\n",
    "        # Plot 2: Best Evolved Tree Structure and its Illumination\n",
    "        evolved_best_area = get_illuminated_area2(evolved_best_tree, resolution=GA_PARAMS['illumination_resolution'])\n",
    "        plot_tree_with_illumination2(evolved_best_tree, evolved_best_area, axes[1], tree_color='lightcoral', diff_color='purple', title=f\"Best Evolved Tree (Fitness: {evolved_best_fitness:.4f})\")\n",
    "\n",
    "        # Plot 3: Symmetric Difference Area\n",
    "        symmetric_diff_area = target_area.symmetric_difference(evolved_best_area)\n",
    "        plot_illuminated_area2(axes[2], symmetric_diff_area, title=f\"Symmetric Difference (Error Area: {len(symmetric_diff_area)})\")\n",
    "\n",
    "        plt.tight_layout()\n",
    "        plt.show()\n",
    "\n",
    "        # Plot Fitness History\n",
    "        plt.figure(figsize=(10, 6))\n",
    "        plt.plot(history, marker='o', linestyle='-', color='blue')\n",
    "        plt.title('Best Fitness Progression Over Generations')\n",
    "        plt.xlabel('Generation')\n",
    "        plt.ylabel('Fitness')\n",
    "        plt.grid(True)\n",
    "        plt.show()\n",
    "    else:\n",
    "        print(\"No plot\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "xiZcexLWpCI5"
   },
   "source": [
    "**Observaciones.** El programa olvidó el círculo más grande del Mejor Árbol Evolucionado. También es ávido de tiempo: Colab necesitó 5 horas para producir los resultados observados en la última prueba.\n",
    "\n",
    "**Cruda realidad.** El programa es imposible de depurar porque cada ronda requiere 5 horas o más.\n",
    "\n",
    "**Nueva dirección.** Consideramos que el Modelo de la Red de Iluminación es simple y está bien orientado. Intentemos, pues, acelerar el programa. Pero, ¿cómo? En nuestra opinión, el programa consume mucho tiempo porque comprueba 10 mil píxeles para decidir si un área está iluminada. En lugar de ello, usemos el álgebra y la geometría que se encuentra debajo para intentar un nuevo enfoque, cuya idea principal es: conociendo los puntos de intersección de un círculo con una línea horizontal o vertical, podemos saber si las celdas vecinas están iluminadas. Procedamos:\n",
    "\n",
    "La ecuación de un círculo de radio $r$ y centrado en $(a,b)$ es\n",
    "\n",
    "$(x-a)^2 + (y-b)^2 = r^2$\n",
    "\n",
    "Estudiemos la intersección de un círculo con una línea horizontal de la cuadrícula.\n",
    "\n",
    "La ecuación de una línea horizontal es $y = l$ donde $l$ es un entero. La intersección de la línea con el círculo está dada por\n",
    "\n",
    "$(x-a)^2 + (l-b)^2 = r^2$\n",
    "\n",
    "$(x-a)^2 = r^2 - (l-b)^2$\n",
    "\n",
    "$(x-a) = \\pm \\sqrt{r^2 - (l-b)^2}$\n",
    "\n",
    "$ x_{\\pm} = a \\pm \\sqrt{r^2 - (l-b)^2}$\n",
    "\n",
    "Puesto que $y = l$, los puntos de intersección son $ ( a \\pm \\sqrt{r^2 - (l-b)^2}, l)$\n",
    "\n",
    "\n",
    "Si el discriminante es cero, $r^2 - (l-b)^2 = 0$, la línea besa el círculo en un punto, y hay una celda iluminada. Está del lado del centro del círculo.  \n",
    "\n",
    "- Si $b > l$, la célula iluminada es  $ ( a, l)$\n",
    "- Si $b < l$, la célula iluminada es  $ (a, l-1)$\n",
    "\n",
    "Si el discriminante es positivo, $r^2 - (l-b)^2 > 0$, el círculo cruza la línea en dos puntos. Ambas celdas, debajo o por encima de cada punto de intersección están iluminadas. Las celdas pueden repetirse o no.  Las coordenadas de sus esquinas inferiores derechas están dadas por el número entero inmediatamente menor que $ x_{\\pm}$:\n",
    "\n",
    "$(floor( x_{ \\pm}), l)$, celda arriba del punto de intersección.\n",
    "\n",
    "$(piso( x_{ \\pm}), l-1)$, celda debajo del punto de intersección.\n",
    "\n",
    "Si el discriminante es negativo, $r^2 - (l-b)^2 < 0$, la línea no cruza el círculo. No se debe informar de ninguna celda iluminada.\n",
    "\n",
    "Estudiemos ahora la intersección de un círculo con una línea vertical $x = k$. La intersección de la línea con el círculo está dada por\n",
    "\n",
    "$(k-a)^2 + (y-b)^2 = r^2$\n",
    "\n",
    "$(y-b)^2 = r^2 - (k-a)^2 $\n",
    "\n",
    "$(y-b)  = \\pm \\sqrt{r^2 - (k-a)^2} $\n",
    "\n",
    "$ y_{\\pm} = b \\pm  \\sqrt{r^2 - (k-a)^2}$\n",
    "\n",
    "Dado que $x = k$, los puntos de intersección son $ ( k, b \\pm \\sqrt{r^2 - (k-a)^2} )$\n",
    "\n",
    "\n",
    "Si el discriminante es cero, $r^2 - (k-a)^2 = 0$, la línea besa el círculo en un punto, y hay una celda iluminada. Está al lado del centro del círculo.\n",
    "\n",
    "Si el discriminante es positivo, $r^2 - (k-a)^2 = 0$, el círculo cruza la línea en dos puntos. Las dos celdas, una a la izquierda y la otra a la derecha de cada punto de intersección, están iluminadas. Sus esquinas inferiores-derechas están dadas por\n",
    "\n",
    "$ ( k, floor(y_{\\pm}))$ donde $ y_{\\pm} = b \\pm \\sqrt{r^2 - (k-a)^2} )$\n",
    "\n",
    "\n",
    "Si el discriminante es negativo, $r^2 - (k-a)^2 < 0$, la línea no cruza el círculo. No se puede informar de ninguna celda iluminada.\n",
    "\n",
    "Dejamos de lado algunos casos excepcionales que quizás causen algún error. Por ejemplo:\n",
    "\n",
    "1. Cuando un círculo pasa por un punto de cruce resultante de la intersección de una línea horizontal con una vertical.\n",
    "2. Cuando un círculo besa un punto de cruce.\n",
    "\n",
    "Pueden existir círculos pequeños que no cruzan una línea. Por eso cada celda que contiene un centro de un círculo está iluminada y debe ser reportada.\n",
    "\n",
    "Para implementar esta idea, le pedimos ayuda a Gemini, y la respuesta fue la siguiente reforma del programa anterior:\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "id": "d0f38db4"
   },
   "outputs": [],
   "source": [
    "# Program la Evolución_of_morphological_trees_3.py\n",
    "# Morphological trees considered here are like lighting trees:\n",
    "# a tree extends the electrical thread and at each node there is lamp.\n",
    "# Each lamp has a given power and a circle of illumination,\n",
    "# whose radius is determined by a threshold intensity.\n",
    "# In morphology, this corresponds with a threshold concentration of a messenger.\n",
    "# la Evolución is given the task of illuminating\n",
    "# the area determined by a random tree.\n",
    "# Reformation: the illuminated area is calculated\n",
    "# on the basis of the intersection of the circle\n",
    "# with horizontal and vertical lines with integer values\n",
    "# as described in the text.\n",
    "# By Gemini 2.5 Flash with a minor help from the Author.\n",
    "\n",
    "\n",
    "\n",
    "import random\n",
    "import matplotlib.pyplot as plt\n",
    "import matplotlib.patches as patches\n",
    "import numpy as np\n",
    "from numpy import array as Array\n",
    "import copy # For deep copying trees during reproduction and mutation\n",
    "import sys # Import sys module to adjust recursion limit\n",
    "import math # For math.floor, math.ceil, math.sqrt\n",
    "\n",
    "sys.setrecursionlimit(3000) # Increase the recursion limit for potentially deep trees\n",
    "\n",
    "# --- SPATIAL TREE NODE FOR DIFFUSION ---\n",
    "\n",
    "class SpatialTreeNode_Evolution_Diffusion3:\n",
    "    def __init__(self, value, x, y, radius, occupied_squares_set, diffusion_nodes_info):\n",
    "        self.value = value\n",
    "        self.x = x\n",
    "        self.y = y\n",
    "        self.children = []\n",
    "\n",
    "        self.radius = radius\n",
    "        self.occupied_squares_set = occupied_squares_set  # Reference to the set of squares occupied by *this* tree's nodes\n",
    "        self.diffusion_nodes_info = diffusion_nodes_info  # Reference to the list of (x,y,radius) for *all* nodes in *this* tree\n",
    "\n",
    "        self.occupied_squares_set.add((x, y))  # Add current node's (x,y) square to the set\n",
    "        self.diffusion_nodes_info.append((x, y, radius))  # Add current node's (x,y,radius) to the list\n",
    "\n",
    "    def add_child(self, child_node):\n",
    "        if not isinstance(child_node, SpatialTreeNode_Evolution_Diffusion3):\n",
    "            raise TypeError(\"Child must be an instance of SpatialTreeNode_Evolution_Diffusion3\")\n",
    "        self.children.append(child_node)\n",
    "\n",
    "    def get_neighboring_coordinates(self):\n",
    "        neighbors = []\n",
    "        for dx in [-1, 0, 1]:\n",
    "            for dy in [-1, 0, 1]:\n",
    "                if dx == 0 and dy == 0:\n",
    "                    continue  # Exclude the current square itself\n",
    "                neighbors.append((self.x + dx, self.y + dy))\n",
    "        return neighbors\n",
    "\n",
    "    def _is_diffusion_overlapping_local(self, potential_nx, potential_ny, potential_radius, overlap_factor):\n",
    "        \"\"\"\n",
    "        Checks if a potential new node's diffusion circle overlaps \"too much\" with EXISTING nodes IN THE SAME TREE.\n",
    "        \"Too much overlap\" is defined by the overlap_factor.\n",
    "        \"\"\"\n",
    "        potential_center_x, potential_center_y = potential_nx + 0.5, potential_ny + 0.5\n",
    "\n",
    "        for ex, ey, er in self.diffusion_nodes_info:\n",
    "            # Skip checking against self if self is already in diffusion_nodes_info\n",
    "            if (ex, ey) == (self.x, self.y):\n",
    "                continue\n",
    "\n",
    "            existing_center_x, existing_center_y = ex + 0.5, ey + 0.5\n",
    "\n",
    "            # Calculate distance between centers\n",
    "            distance = np.sqrt((potential_center_x - existing_center_x)**2 + (potential_ny - existing_center_y)**2)\n",
    "\n",
    "            # Check for significant overlap\n",
    "            # If distance is less than a fraction of the sum of radii, it's too much overlap.\n",
    "            if distance < overlap_factor * (potential_radius + er):\n",
    "                return True # Significant overlap detected\n",
    "        return False\n",
    "\n",
    "    def add_child_in_random_neighbor(self, child_value_prefix, max_node_radius, overlap_factor):\n",
    "        coordinates_neighbors = self.get_neighboring_coordinates()\n",
    "\n",
    "        # First, filter for unoccupied grid squares *within this tree*\n",
    "        available_square_neighbors = [coord for coord in coordinates_neighbors if coord not in self.occupied_squares_set]\n",
    "\n",
    "        valid_child_candidates = []  # Store (nx, ny, child_radius) for candidates that pass overlap check\n",
    "\n",
    "        for nx, ny in available_square_neighbors:\n",
    "            # Generate potential radius for this child, ensuring it's not too large or small\n",
    "            child_radius = random.uniform(0.5, max_node_radius)\n",
    "            if not self._is_diffusion_overlapping_local(nx, ny, child_radius, overlap_factor):\n",
    "                valid_child_candidates.append((nx, ny, child_radius))\n",
    "\n",
    "        if not valid_child_candidates:\n",
    "            return None  # No available neighbors that satisfy both square and diffusion overlap conditions\n",
    "\n",
    "        # Choose a random valid candidate\n",
    "        chosen_nx, chosen_ny, chosen_child_radius = random.choice(valid_child_candidates)\n",
    "\n",
    "        child_value = f\"{child_value_prefix}_{len(self.children) + 1}\"\n",
    "        # Create child node; its __init__ will update occupied_squares_set and diffusion_nodes_info\n",
    "        child_node = SpatialTreeNode_Evolution_Diffusion3(child_value, chosen_nx, chosen_ny, chosen_child_radius, self.occupied_squares_set, self.diffusion_nodes_info)\n",
    "        self.add_child(child_node)\n",
    "        return child_node\n",
    "\n",
    "    def get_all_nodes(self):\n",
    "        all_nodes = []\n",
    "        stack = [self]\n",
    "        while stack:\n",
    "            node = stack.pop()\n",
    "            all_nodes.append(node)\n",
    "            for child in node.children:\n",
    "                stack.append(child)\n",
    "        return all_nodes\n",
    "\n",
    "    def __repr__(self):\n",
    "        return f\"SpatialTreeNode_Evolution_Diffusion(value={self.value}, x={self.x}, y={self.y}, R={self.radius:.2f}, children={[child.value for child in self.children]!r})\"\n",
    "\n",
    "\n",
    "# --- TREE GENERATION ---\n",
    "\n",
    "def generate_random_spatial_tree_diffusion3(\n",
    "    max_depth, max_children, max_node_radius, initial_x, initial_y, node_prefix=\"Node\",\n",
    "    current_depth=0, parent_node=None, occupied_squares_set=None, diffusion_nodes_info=None, overlap_factor=0.7\n",
    "):\n",
    "    if occupied_squares_set is None:\n",
    "        occupied_squares_set = set() # Initialize a new set for this tree's square coordinates\n",
    "    if diffusion_nodes_info is None:\n",
    "        diffusion_nodes_info = [] # Initialize a new list for this tree's node (x,y,radius) information\n",
    "\n",
    "    if parent_node is None:\n",
    "        # Root node at (initial_x, initial_y) with a random initial radius\n",
    "        node_value = f\"{node_prefix}_Root_{random.randint(0, 99)}\"\n",
    "        initial_radius = random.uniform(0.5, max_node_radius)\n",
    "        current_node = SpatialTreeNode_Evolution_Diffusion3(node_value, initial_x, initial_y, initial_radius, occupied_squares_set, diffusion_nodes_info)\n",
    "    else:\n",
    "        # Children are added by the parent's method, which handles their coordinates and radius\n",
    "        current_node = parent_node.add_child_in_random_neighbor(f\"{node_prefix}_{current_depth}\", max_node_radius, overlap_factor)\n",
    "        if current_node is None:\n",
    "            return None # Branch terminated if no available neighbor\n",
    "\n",
    "    if current_depth < max_depth:\n",
    "        num_children = random.randint(0, max_children) # Random number of children for this node\n",
    "        for _ in range(num_children):\n",
    "            generate_random_spatial_tree_diffusion3(\n",
    "                max_depth, max_children, max_node_radius, initial_x, initial_y, node_prefix,\n",
    "                current_depth + 1, current_node, occupied_squares_set, diffusion_nodes_info, overlap_factor\n",
    "            )\n",
    "    return current_node\n",
    "\n",
    "\n",
    "# --- ILLUMINATION AND FITNESS FUNCTIONS ---\n",
    "\n",
    "def get_illuminated_area3(tree):\n",
    "    \"\"\"\n",
    "    Calculates the set of (x,y) integer coordinates illuminated by the tree using the\n",
    "    algebraic approach described in the text, based on intersections with horizontal\n",
    "    and vertical grid lines.\n",
    "    \"\"\"\n",
    "    if tree is None:\n",
    "        return set()\n",
    "\n",
    "    illuminated_coords = set()\n",
    "    # diffusion_nodes_info contains (node_x, node_y, node_radius) for all nodes in the tree\n",
    "    all_nodes_info = tree.diffusion_nodes_info\n",
    "    print(f\" get_illuminated_area3: Tree has {len(all_nodes_info)} nodes.\"  )\n",
    "\n",
    "\n",
    "    if not all_nodes_info:\n",
    "        return set()\n",
    "\n",
    "    for node_x, node_y, node_radius in all_nodes_info:\n",
    "        print(f\" get_illuminated_area3: Processing node at ({node_x}, {node_y}) with radius {node_radius}\")\n",
    "        # The center of the circle is the center of the cell it occupies\n",
    "        circle_center_x = node_x + 0.5\n",
    "        circle_center_y = node_y + 0.5\n",
    "        r_sq = node_radius**2\n",
    "\n",
    "        # 1. Add the cell containing the center of the circle\n",
    "        # This covers the case of small circles not intersecting grid lines.\n",
    "        illuminated_coords.add((math.floor(circle_center_x), math.floor(circle_center_y)))\n",
    "\n",
    "        # 2. Horizontal Scan: Check intersections with horizontal grid lines\n",
    "        # Iterate y_line from floor(cy - r) to ceil(cy + r)\n",
    "        # These y_line values represent the y-coordinates of horizontal grid lines.\n",
    "        for y_line in range(math.floor(circle_center_y - node_radius), math.ceil(circle_center_y + node_radius) + 1):\n",
    "            dy = y_line - circle_center_y\n",
    "            discriminant = r_sq - dy*dy\n",
    "\n",
    "            if discriminant >= 0:\n",
    "                dx = math.sqrt(discriminant)\n",
    "                x_min_intersect = circle_center_x - dx\n",
    "                x_max_intersect = circle_center_x + dx\n",
    "\n",
    "                # For each integer x-coordinate that the horizontal segment crosses:\n",
    "                # Add the cells whose bottom-left corner's x-coordinate is in this range.\n",
    "                # This covers cells whose top edge is y_line AND cells whose bottom edge is y_line.\n",
    "                for ix in range(math.floor(x_min_intersect), math.floor(x_max_intersect) + 1):\n",
    "                    # Cell (ix, y_line) - its bottom edge is at y_line\n",
    "                    illuminated_coords.add((ix, y_line))\n",
    "                    # Cell (ix, y_line - 1) - its top edge is at y_line\n",
    "                    illuminated_coords.add((ix, y_line - 1))\n",
    "\n",
    "        # 3. Vertical Scan: Check intersections with vertical grid lines\n",
    "        # Iterate x_line from floor(cx - r) to ceil(cx + r)\n",
    "        # These x_line values represent the x-coordinates of vertical grid lines.\n",
    "        for x_line in range(math.floor(circle_center_x - node_radius), math.ceil(circle_center_x + node_radius) + 1):\n",
    "            dx = x_line - circle_center_x\n",
    "            discriminant = r_sq - dx*dx\n",
    "\n",
    "            if discriminant >= 0:\n",
    "                dy = math.sqrt(discriminant)\n",
    "                y_min_intersect = circle_center_y - dy\n",
    "                y_max_intersect = circle_center_y + dy\n",
    "\n",
    "                # For each integer y-coordinate that the vertical segment crosses:\n",
    "                # Add the cells whose bottom-left corner's y-coordinate is in this range.\n",
    "                # This covers cells whose right edge is x_line AND cells whose left edge is x_line.\n",
    "                for iy in range(math.floor(y_min_intersect), math.floor(y_max_intersect) + 1):\n",
    "                    # Cell (x_line, iy) - its left edge is at x_line\n",
    "                    illuminated_coords.add((x_line, iy))\n",
    "                    # Cell (x_line - 1, iy) - its right edge is at x_line\n",
    "                    illuminated_coords.add((x_line - 1, iy))\n",
    "\n",
    "    return illuminated_coords\n",
    "\n",
    "def calculate_fitness_illumination3(candidate_tree_root, target_illuminated_area):\n",
    "    \"\"\"\n",
    "    Calculates fitness based on the symmetric difference between illuminated areas.\n",
    "    Fitness is 1.0 for a perfect match, and decreases as symmetric difference increases.\n",
    "    \"\"\"\n",
    "    if candidate_tree_root is None:\n",
    "        # If the tree generation failed, assign a very low fitness\n",
    "        return 0.0001 # A small non-zero value to avoid division by zero issues later\n",
    "\n",
    "    candidate_illuminated_area = get_illuminated_area3(candidate_tree_root)\n",
    "\n",
    "    # Symmetric difference: (A U B) - (A intersect B)\n",
    "    # Or, the elements in A but not B, plus elements in B but not A.\n",
    "    symmetric_difference = candidate_illuminated_area.symmetric_difference(target_illuminated_area)\n",
    "\n",
    "    # Union size: used for normalization\n",
    "    union_size = len(candidate_illuminated_area.union(target_illuminated_area))\n",
    "\n",
    "    if union_size == 0:\n",
    "        if not target_illuminated_area and not candidate_illuminated_area:\n",
    "            return 1.0 # Perfect match if both are empty\n",
    "        else:\n",
    "            return 0.0001 # Should not happen if target is non-empty, but handles cases where both are empty but expected non-empty\n",
    "\n",
    "    # Fitness is 1.0 - (len(symmetric_difference) / union_size)\n",
    "    # This gives 1.0 for a perfect match (symmetric_difference_area = 0)\n",
    "    # and approaches 0.0 for large differences.\n",
    "    fitness = 1.0 - (len(symmetric_difference) / union_size)\n",
    "    return max(0.0001, fitness) # Ensure fitness is always positive\n",
    "\n",
    "\n",
    "# --- la EvoluciónARY ALGORITHM COMPONENTS ---\n",
    "\n",
    "def create_initial_population_diffusion3(pop_size, max_depth, max_children, max_node_radius, initial_x, initial_y, overlap_factor, node_prefix=\"Individual\"):\n",
    "    population = []\n",
    "    for i in range(pop_size):\n",
    "        # Each tree needs its own occupied_squares_set and diffusion_nodes_info for independent generation\n",
    "        occupied_squares = set()\n",
    "        diffusion_info = []\n",
    "        tree = generate_random_spatial_tree_diffusion3(\n",
    "            max_depth=max_depth, max_children=max_children, max_node_radius=max_node_radius,\n",
    "            initial_x=initial_x, initial_y=initial_y, node_prefix=f\"{node_prefix}_{i}\",\n",
    "            occupied_squares_set=occupied_squares, diffusion_nodes_info=diffusion_info, overlap_factor=overlap_factor\n",
    "        )\n",
    "        if tree:\n",
    "            population.append(tree)\n",
    "    # If not enough trees generated due to space constraints, fill with more random ones (or handle error)\n",
    "    while len(population) < pop_size:\n",
    "        occupied_squares = set()\n",
    "        diffusion_info = []\n",
    "        new_tree = generate_random_spatial_tree_diffusion3(\n",
    "            max_depth=max_depth, max_children=max_children, max_node_radius=max_node_radius,\n",
    "            initial_x=initial_x, initial_y=initial_y, node_prefix=f\"RandomFill_{len(population)}\",\n",
    "            occupied_squares_set=occupied_squares, diffusion_nodes_info=diffusion_info,\n",
    "            overlap_factor=overlap_factor\n",
    "        )\n",
    "        if new_tree:\n",
    "            population.append(new_tree)\n",
    "        else:\n",
    "            # Handle case where a new tree could not be generated\n",
    "            # This might happen if parameters are too restrictive or space is exhausted\n",
    "            break # Exit if we can't generate enough valid trees\n",
    "    return population\n",
    "\n",
    "def select_parents_diffusion3(population, fitness_scores, num_parents):\n",
    "    parents = []\n",
    "    # Use roulette wheel selection or tournament selection. Tournament is generally robust.\n",
    "    for _ in range(num_parents):\n",
    "        tournament_size = min(5, len(population))\n",
    "        if tournament_size == 0:\n",
    "            break\n",
    "        tournament_candidates = random.sample(list(zip(population, fitness_scores)), tournament_size)\n",
    "        winner = max(tournament_candidates, key=lambda x: x[1])[0]\n",
    "        parents.append(winner)\n",
    "    return parents\n",
    "\n",
    "def mutate_tree_diffusion3(tree_root, max_depth, max_children, max_node_radius, mutation_rate, overlap_factor):\n",
    "    mutated_tree = copy.deepcopy(tree_root) # Work on a deep copy\n",
    "    all_nodes = mutated_tree.get_all_nodes()\n",
    "\n",
    "    if not all_nodes:\n",
    "        return mutated_tree\n",
    "\n",
    "    node_to_mutate = random.choice(all_nodes)\n",
    "\n",
    "    # Mutation 1: Add a child\n",
    "    if random.random() < mutation_rate:\n",
    "        # Need to regenerate the local_occupied_set and diffusion_nodes_info for the deepcopy\n",
    "        # This is a bit inefficient but ensures correctness after deepcopy/mutation operations\n",
    "        temp_occupied_set = set()\n",
    "        temp_diffusion_info = []\n",
    "        # Re-populate temp_occupied_set and temp_diffusion_info by traversing the deepcopied tree\n",
    "        stack = [mutated_tree]\n",
    "        while stack:\n",
    "            node = stack.pop()\n",
    "            temp_occupied_set.add((node.x, node.y))\n",
    "            temp_diffusion_info.append((node.x, node.y, node.radius))\n",
    "            for child in node.children:\n",
    "                stack.append(child)\n",
    "\n",
    "        # Now, try to add a child to the chosen node\n",
    "        node_to_mutate.occupied_squares_set = temp_occupied_set # Update reference for chosen node\n",
    "        node_to_mutate.diffusion_nodes_info = temp_diffusion_info # Update reference for chosen node\n",
    "\n",
    "        node_to_mutate.add_child_in_random_neighbor(\"MutatedChild\", max_node_radius, overlap_factor)\n",
    "\n",
    "    # Mutation 2: Change node radius\n",
    "    if random.random() < mutation_rate:\n",
    "        node_to_mutate.radius = random.uniform(0.5, max_node_radius)\n",
    "\n",
    "    # Mutation 3: Remove a child (if any)\n",
    "    if random.random() < mutation_rate and node_to_mutate.children:\n",
    "        child_to_remove = random.choice(node_to_mutate.children)\n",
    "        node_to_mutate.children.remove(child_to_remove)\n",
    "        # Note: Removing a child means its coordinates and diffusion info are no longer strictly part of the tree\n",
    "        # The fitness function will re-evaluate the actual illuminated area, handling this implicitly.\n",
    "\n",
    "    return mutated_tree\n",
    "\n",
    "def crossover_trees_diffusion3(parent1_root, parent2_root, crossover_rate, max_node_radius, overlap_factor):\n",
    "    if random.random() > crossover_rate:\n",
    "        return copy.deepcopy(parent1_root), copy.deepcopy(parent2_root)\n",
    "\n",
    "    child1_root = copy.deepcopy(parent1_root)\n",
    "    child2_root = copy.deepcopy(parent2_root)\n",
    "\n",
    "    all_nodes_child1 = child1_root.get_all_nodes()\n",
    "    all_nodes_child2 = child2_root.get_all_nodes()\n",
    "\n",
    "    # Ensure there are nodes to swap beyond just the root\n",
    "    if len(all_nodes_child1) < 2 or len(all_nodes_child2) < 2:\n",
    "        return child1_root, child2_root\n",
    "\n",
    "    # Choose random nodes (not roots) to be crossover points\n",
    "    cross_point1 = random.choice([n for n in all_nodes_child1 if n != child1_root])\n",
    "    cross_point2 = random.choice([n for n in all_nodes_child2 if n != child2_root])\n",
    "\n",
    "    # Find parent of cross_point1 in child1_root tree\n",
    "    parent_cross_point1 = None\n",
    "    for node in all_nodes_child1:\n",
    "        if cross_point1 in node.children:\n",
    "            parent_cross_point1 = node\n",
    "            break\n",
    "\n",
    "    # Find parent of cross_point2 in child2_root tree\n",
    "    parent_cross_point2 = None\n",
    "    for node in all_nodes_child2:\n",
    "        if cross_point2 in node.children:\n",
    "            parent_cross_point2 = node\n",
    "            break\n",
    "\n",
    "    if parent_cross_point1 and parent_cross_point2:  # Perform swap\n",
    "        # Remove subtrees from parents\n",
    "        parent_cross_point1.children.remove(cross_point1)\n",
    "        parent_cross_point2.children.remove(cross_point2)\n",
    "\n",
    "        # Attach swapped subtrees\n",
    "        parent_cross_point1.add_child(cross_point2)\n",
    "        parent_cross_point2.add_child(cross_point1)\n",
    "\n",
    "        # After crossover, the `occupied_squares_set` and `diffusion_nodes_info` of the affected trees\n",
    "        # (child1_root, child2_root, and their subtrees) might be inconsistent.\n",
    "        # These will be implicitly re-calculated by `get_illuminated_area` for fitness evaluation.\n",
    "        # For mutation, we explicitly rebuild them (as seen in mutate_tree_diffusion).\n",
    "\n",
    "    return child1_root, child2_root\n",
    "\n",
    "\n",
    "# --- PLOTTING FUNCTIONS ---\n",
    "\n",
    "def plot_illuminated_area3(ax, illuminated_coords, title, color='blue', alpha=0.5):\n",
    "    ax.set_aspect('equal', adjustable='box')\n",
    "    if not illuminated_coords:\n",
    "        ax.set_title(title)\n",
    "        ax.grid(True)\n",
    "        return\n",
    "\n",
    "    for x, y in illuminated_coords:\n",
    "        rect = patches.Rectangle((x, y), 1, 1, facecolor=color, alpha=alpha, edgecolor='black', linewidth=0.5)\n",
    "        ax.add_patch(rect)\n",
    "\n",
    "    min_x = min(c[0] for c in illuminated_coords) - 1\n",
    "    max_x = max(c[0] for c in illuminated_coords) + 2\n",
    "    min_y = min(c[1] for c in illuminated_coords) - 1\n",
    "    max_y = max(c[1] for c in illuminated_coords) + 2\n",
    "\n",
    "    ax.set_xlim(min_x, max_x)\n",
    "    ax.set_ylim(min_y, max_y)\n",
    "    ax.set_xticks(range(int(min_x), int(max_x)))\n",
    "    ax.set_yticks(range(int(min_y), int(max_y)))\n",
    "    ax.grid(True)\n",
    "    ax.set_title(title)\n",
    "\n",
    "def plot_tree_with_illumination3(tree_root, illuminated_coords, ax, tree_color='lightblue', diff_color='red', title=\"\"):\n",
    "    # Plot illuminated area first (background)\n",
    "    for x, y in illuminated_coords:\n",
    "        rect = patches.Rectangle((x, y), 1, 1, facecolor=diff_color, alpha=0.5, zorder=0) # Changed alpha for more transparency\n",
    "        ax.add_patch(rect)\n",
    "\n",
    "    if tree_root is None:\n",
    "        return\n",
    "\n",
    "    # Plot tree nodes and their diffusion circles\n",
    "    all_nodes = tree_root.get_all_nodes()\n",
    "    for node in all_nodes:\n",
    "        # Plot the square representing the cell\n",
    "        rect = patches.Rectangle((node.x, node.y), 1, 1, facecolor=tree_color, edgecolor='black', linewidth=1, zorder=1)\n",
    "        ax.add_patch(rect)\n",
    "        ax.text(node.x + 0.5, node.y + 0.5, node.value.split('_')[-1], ha='center', va='center', color='darkblue', fontsize=7, zorder=2)\n",
    "\n",
    "        # Plot the circle representing the radius of influence\n",
    "        circle = patches.Circle((node.x + 0.5, node.y + 0.5), node.radius, color='red', alpha=0.2, zorder=2)\n",
    "        ax.add_patch(circle)\n",
    "\n",
    "    # Draw lines connecting parent to children\n",
    "    for node in all_nodes:\n",
    "        for child in node.children:\n",
    "            ax.plot([node.x + 0.5, child.x + 0.5], [node.y + 0.5, child.y + 0.5], 'k--', linewidth=0.8, zorder=3)\n",
    "\n",
    "    ax.set_aspect('equal', adjustable='box')\n",
    "    ax.set_title(title)\n",
    "\n",
    "    # Set plot limits based on the illuminated coordinates\n",
    "    if illuminated_coords:\n",
    "        all_x = [c[0] for c in illuminated_coords]\n",
    "        all_y = [c[1] for c in illuminated_coords]\n",
    "\n",
    "        min_x_val = min(all_x) - 1\n",
    "        max_x_val = max(all_x) + 2\n",
    "        min_y_val = min(all_y) - 1\n",
    "        max_y_val = max(all_y) + 2\n",
    "\n",
    "        ax.set_xlim(min_x_val, max_x_val)\n",
    "        ax.set_ylim(min_y_val, max_y_val)\n",
    "        ax.set_xticks(range(int(min_x_val), int(max_x_val)))\n",
    "        ax.set_yticks(range(int(min_y_val), int(max_y_val)))\n",
    "    ax.grid(True)\n",
    "\n",
    "\n",
    "# --- MAIN la EvoluciónARY SIMULATION LOOP ---\n",
    "\n",
    "def run_evolutionary_lighting_lab3(target_tree_params, ga_params):\n",
    "\n",
    "    # 1. Generate Target Tree and its Illuminated Area\n",
    "    print(\"\\n--- Generating Target Tree ---\")\n",
    "    random.seed(ga_params['seed'] + 1) # Use a different seed for target generation\n",
    "    target_occupied_squares = set()\n",
    "    target_diffusion_info = []\n",
    "    target_tree_root = generate_random_spatial_tree_diffusion3(\n",
    "        max_depth=target_tree_params['max_depth'], max_children=target_tree_params['max_children'],\n",
    "        max_node_radius=target_tree_params['max_node_radius'], initial_x=0, initial_y=0,\n",
    "        node_prefix=\"Target\", occupied_squares_set=target_occupied_squares,\n",
    "        diffusion_nodes_info=target_diffusion_info, overlap_factor=target_tree_params['overlap_factor']\n",
    "    )\n",
    "\n",
    "    if not target_tree_root:\n",
    "        print(\"Failed to generate target tree. Exiting.\")\n",
    "        return None, None, None, None, []\n",
    "\n",
    "    target_illuminated_area = get_illuminated_area3(target_tree_root)\n",
    "    print(f\"Target Tree Generated with {len(target_tree_root.get_all_nodes())} nodes. Illuminated area size: {len(target_illuminated_area)}\")\n",
    "\n",
    "    # 2. Initialize Population\n",
    "    random.seed(ga_params['seed']) # Reset seed for GA population generation\n",
    "    print(f\"\\n--- Initializing Population of {ga_params['pop_size']} Trees ---\")\n",
    "    population = create_initial_population_diffusion3(\n",
    "        pop_size=ga_params['pop_size'], max_depth=ga_params['max_depth'], max_children=ga_params['max_children'],\n",
    "        max_node_radius=ga_params['max_node_radius'], initial_x=0, initial_y=0,\n",
    "        overlap_factor=ga_params['overlap_factor']\n",
    "    )\n",
    "    print(f\"Population initialized with {len(population)} individuals.\")\n",
    "\n",
    "    best_tree_overall = None\n",
    "    best_fitness_overall = -1.0\n",
    "    history = []\n",
    "\n",
    "    # 3. la Evoluciónary Loop\n",
    "    print(f\"\\n--- Starting la Evoluciónary Loop for {ga_params['generations']} Generations ---\")\n",
    "    for generation in range(ga_params['generations']):\n",
    "        fitness_scores = [calculate_fitness_illumination3(tree, target_illuminated_area) for tree in population]\n",
    "\n",
    "        current_best_fitness = max(fitness_scores)\n",
    "        current_best_tree = population[np.argmax(fitness_scores)]\n",
    "\n",
    "        if current_best_fitness > best_fitness_overall:\n",
    "            best_fitness_overall = current_best_fitness\n",
    "            best_tree_overall = copy.deepcopy(current_best_tree) # Deepcopy to save the best tree\n",
    "\n",
    "        # Print the nodes of current_best_tree\n",
    "        all_nodes = current_best_tree.get_all_nodes()\n",
    "        print(\"run_evolutionary_lighting_lab3 A: Info of all nodes of current_best_tree:\")\n",
    "        for node in all_nodes:\n",
    "            print(f\"x: {node.x}, y: {node.y}, value: {node.value.split('_')[-1]}, r: {node.radius}\")\n",
    "\n",
    "        # Print the nodes of evolved_best_tree\n",
    "        all_nodes = best_tree_overall.get_all_nodes()\n",
    "        print(\"run_evolutionary_lighting_lab3 A: Info of all nodes of evolved_best_tree:\")\n",
    "        for node in all_nodes:\n",
    "            print(f\"x: {node.x}, y: {node.y}, value: {node.value.split('_')[-1]}, r: {node.radius}\")\n",
    "\n",
    "        history.append(current_best_fitness)\n",
    "\n",
    "        print(f\"Generation {generation+1}/{ga_params['generations']}: Best Fitness = {current_best_fitness:.4f} (Overall Best: {best_fitness_overall:.4f})\")\n",
    "\n",
    "        if best_fitness_overall >= 0.999: # Almost perfect match\n",
    "            print(\"Target illumination achieved (or very close)! Stopping la Evolución.\")\n",
    "            break\n",
    "\n",
    "        # Selection\n",
    "        parents = select_parents_diffusion3(population, fitness_scores, ga_params['pop_size'] // 2)\n",
    "\n",
    "        # Create next generation\n",
    "        next_population = []\n",
    "        # Elitism: Keep the best individual from the current generation\n",
    "        if best_tree_overall and current_best_fitness == best_fitness_overall: # Only if it's the current best in this generation\n",
    "            next_population.append(copy.deepcopy(current_best_tree))\n",
    "\n",
    "        while len(next_population) < ga_params['pop_size']:\n",
    "            if len(parents) < 2: # Not enough parents for crossover, fill with new random trees\n",
    "                occupied_squares = set()\n",
    "                diffusion_info = []\n",
    "                new_tree = generate_random_spatial_tree_diffusion3(\n",
    "                    max_depth=ga_params['max_depth'], max_children=ga_params['max_children'],\n",
    "                    max_node_radius=ga_params['max_node_radius'], initial_x=0, initial_y=0,\n",
    "                    node_prefix=f\"RandomFill_{len(next_population)}\",\n",
    "                    occupied_squares_set=occupied_squares, diffusion_nodes_info=diffusion_info,\n",
    "                    overlap_factor=ga_params['overlap_factor']\n",
    "                )\n",
    "                if new_tree:\n",
    "                    next_population.append(new_tree)\n",
    "                continue\n",
    "\n",
    "            # Randomly pick two parents (can be the same parent multiple times with replacement for simplicity)\n",
    "            p1 = random.choice(parents)\n",
    "            p2 = random.choice(parents)\n",
    "\n",
    "            # Crossover\n",
    "            child1, child2 = crossover_trees_diffusion3(p1, p2, ga_params['crossover_rate'], ga_params['max_node_radius'], ga_params['overlap_factor'])\n",
    "\n",
    "            # Mutation\n",
    "            mutated_child1 = mutate_tree_diffusion3(child1, ga_params['max_depth'], ga_params['max_children'], ga_params['max_node_radius'], ga_params['mutation_rate'], ga_params['overlap_factor'])\n",
    "            mutated_child2 = mutate_tree_diffusion3(child2, ga_params['max_depth'], ga_params['max_children'], ga_params['max_node_radius'], ga_params['mutation_rate'], ga_params['overlap_factor'])\n",
    "\n",
    "            next_population.append(mutated_child1)\n",
    "            if len(next_population) < ga_params['pop_size']:\n",
    "                next_population.append(mutated_child2)\n",
    "\n",
    "        population = next_population[:ga_params['pop_size']]\n",
    "\n",
    "    print(\"\\n--- la Evolución Finished ---\")\n",
    "    print(f\"Final Best Fitness: {best_fitness_overall:.4f}\")\n",
    "    # Print the nodes of evolved_best_tree\n",
    "    all_nodes = best_tree_overall.get_all_nodes()\n",
    "    print(\"run_evolutionary_lighting_lab3 B: Info of all nodes of evolved_best_tree:\")\n",
    "    for node in all_nodes:\n",
    "      print(f\"x: {node.x}, y: {node.y}, value: {node.value.split('_')[-1]}, r: {node.radius}\")\n",
    "\n",
    "\n",
    "    return target_tree_root, target_illuminated_area, best_tree_overall, best_fitness_overall, history\n",
    "\n",
    "\n",
    "# --- MAIN EXECUTION ---\n",
    "\n",
    "if __name__ == \"__main__\":\n",
    "      # Parameters for the target tree generation\n",
    "    TARGET_TREE_PARAMS = {\n",
    "        'max_depth': 3,\n",
    "        'max_children': 2,\n",
    "        'max_node_radius': 3.0,\n",
    "        'overlap_factor': 0.7\n",
    "    }\n",
    "\n",
    "    # Parameters for the Genetic Algorithm\n",
    "    GA_PARAMS = {\n",
    "        'seed': 67682,\n",
    "        'pop_size': 10,\n",
    "        'generations': 500,\n",
    "        'max_depth': 3,\n",
    "        'max_children': 3,\n",
    "        'max_node_radius': 3.0,\n",
    "        'mutation_rate': 0.1,\n",
    "        'crossover_rate': 0.7,\n",
    "        'overlap_factor': 0.7,\n",
    "        'illumination_resolution': 1 # This parameter is no longer used by get_illuminated_area3\n",
    "    }\n",
    "\n",
    "    '''\n",
    "    # Parameters for the target tree generation\n",
    "    TARGET_TREE_PARAMS = {\n",
    "        'max_depth': 20,\n",
    "        'max_children': 3,\n",
    "        'max_node_radius': 3.0,\n",
    "        'overlap_factor': 0.7\n",
    "    }\n",
    "\n",
    "    # Parameters for the Genetic Algorithm\n",
    "    GA_PARAMS = {\n",
    "        'seed': 67682,\n",
    "        'pop_size': 30,\n",
    "        'generations': 2,\n",
    "        'max_depth': 20,\n",
    "        'max_children': 3,\n",
    "        'max_node_radius': 3.0,\n",
    "        'mutation_rate': 0.1,\n",
    "        'crossover_rate': 0.7,\n",
    "        'overlap_factor': 0.7,\n",
    "        'illumination_resolution': 1 # This parameter is no longer used by get_illuminated_area3\n",
    "    }\n",
    "    '''\n",
    "    target_tree, target_area, evolved_best_tree, evolved_best_fitness, history = run_evolutionary_lighting_lab3(TARGET_TREE_PARAMS, GA_PARAMS)\n",
    "\n",
    "    # Print the nodes of evolved_best_tree\n",
    "    all_nodes = evolved_best_tree.get_all_nodes()\n",
    "    print(\"Main: Info of all nodes of evolved_best_tree:\")\n",
    "    for node in all_nodes:\n",
    "      print(f\"x: {node.x}, y: {node.y}, value: {node.value.split('_')[-1]}, r: {node.radius}\")\n",
    "\n",
    "    '''\n",
    "    # Plot tree nodes and their diffusion circles\n",
    "    all_nodes = tree_root.get_all_nodes()\n",
    "    for node in all_nodes:\n",
    "        # Plot the square representing the cell\n",
    "        rect = patches.Rectangle((node.x, node.y), 1, 1, facecolor=tree_color, edgecolor='black', linewidth=1, zorder=1)\n",
    "        ax.add_patch(rect)\n",
    "        ax.text(node.x + 0.5, node.y + 0.5, node.value.split('_')[-1], ha='center', va='center', color='darkblue', fontsize=7, zorder=2)\n",
    "\n",
    "        # Plot the circle representing the radius of influence\n",
    "        circle = patches.Circle((node.x + 0.5, node.y + 0.5), node.radius, color='red', alpha=0.2, zorder=2)\n",
    "        ax.add_patch(circle)\n",
    "      '''\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "    # --- Plotting Results ---\n",
    "    if target_tree and evolved_best_tree:\n",
    "        fig, axes = plt.subplots(1, 3, figsize=(24, 8))\n",
    "\n",
    "        # Plot 1: Target Tree Structure and its Illumination\n",
    "        plot_tree_with_illumination3(target_tree, target_area, axes[0], tree_color='skyblue', diff_color='green', title=\"Target Tree and Illuminated Area\")\n",
    "\n",
    "        # Plot 2: Best Evolved Tree Structure and its Illumination\n",
    "        evolved_best_area = get_illuminated_area3(evolved_best_tree)\n",
    "        plot_tree_with_illumination3(evolved_best_tree, evolved_best_area, axes[1], tree_color='lightcoral', diff_color='purple', title=f\"Best Evolved Tree (Fitness: {evolved_best_fitness:.4f})\")\n",
    "\n",
    "        # Plot 3: Symmetric Difference Area\n",
    "        symmetric_diff_area = target_area.symmetric_difference(evolved_best_area)\n",
    "        plot_illuminated_area3(axes[2], symmetric_diff_area, title=f\"Symmetric Difference (Error Area: {len(symmetric_diff_area)})\")\n",
    "\n",
    "        plt.tight_layout()\n",
    "        plt.show()\n",
    "\n",
    "        # Plot Fitness History\n",
    "        plt.figure(figsize=(10, 6))\n",
    "        plt.plot(history, marker='o', linestyle='-', color='blue')\n",
    "        plt.title('Best Fitness Progression Over Generations')\n",
    "        plt.xlabel('Generation')\n",
    "        plt.ylabel('Fitness')\n",
    "        plt.grid(True)\n",
    "        plt.show()\n",
    "    else:\n",
    "        print(\"No plot\")\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "9-g3CAmWrOPk"
   },
   "source": [
    "**Ejercicio.** Evalúa el rendimiento del programa anterior.\n",
    ">\n",
    "> *Respuesta.* El programa es muy rápido. Hace en menos de un minuto lo que hizo el programa anterior en más de cinco horas. Pero, el mismo viejo error persistió: el área iluminada no se transcribe correctamente en células iluminadas que deben ser oscurecidas.\n",
    "\n",
    "**Tarea.** Estudia el código para hacer un diagnóstico del viejo error de iluminación, propón y prueba tu solución.\n",
    ">\n",
    "> *Respuesta.* Los nodos del árbol tienen el atributo `diffusion_nodes_info`.  La mutación y la recombinación causan cambios severos en todas partes que causan inconsistencias, especialmente en este atributo. Por lo tanto, este atributo fue ignorado, y la información correspondiente fue leída directamente desde los nodos. Esto se hizo en la función `get_illuminated_area3(tree)`. El código correspondiente es el siguiente:\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 1000
    },
    "executionInfo": {
     "elapsed": 2700180,
     "status": "ok",
     "timestamp": 1786201161363,
     "user": {
      "displayName": "jose rodriguez",
      "userId": "08454562216435392883"
     },
     "user_tz": 300
    },
    "id": "4OM1Jd6xtpNQ",
    "outputId": "92256b3f-a2a9-4e2b-c6e3-6fd9c9c94672"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "--- Generating Target Tree ---\n",
      "Target Tree Generated with 6 nodes. Illuminated area size: 46\n",
      "\n",
      "--- Initializing Population of 200 Trees ---\n",
      "Population initialized with 200 individuals.\n",
      "\n",
      "--- Starting Evolutionary Loop for 500 Generations ---\n",
      "Generation 1/500: Best Fitness = 0.8125 (Overall Best: 0.8125)\n",
      "Generation 2/500: Best Fitness = 0.8462 (Overall Best: 0.8462)\n",
      "Generation 3/500: Best Fitness = 0.9167 (Overall Best: 0.9167)\n",
      "Generation 4/500: Best Fitness = 0.9167 (Overall Best: 0.9167)\n",
      "Generation 5/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 6/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 7/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 8/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 9/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 10/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 11/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 12/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 13/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 14/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 15/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 16/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 17/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 18/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 19/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 20/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 21/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 22/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 23/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 24/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 25/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 26/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 27/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 28/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 29/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 30/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 31/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 32/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 33/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 34/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 35/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 36/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 37/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 38/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 39/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 40/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 41/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 42/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 43/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 44/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 45/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 46/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 47/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 48/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 49/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 50/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 51/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 52/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 53/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 54/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 55/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 56/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 57/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 58/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 59/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 60/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 61/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 62/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 63/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 64/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 65/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 66/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 67/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 68/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 69/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 70/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 71/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 72/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 73/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 74/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 75/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 76/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 77/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 78/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 79/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 80/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 81/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 82/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 83/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 84/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 85/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 86/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 87/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 88/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 89/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 90/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 91/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 92/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 93/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 94/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 95/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 96/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 97/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 98/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 99/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 100/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 101/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 102/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 103/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 104/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 105/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 106/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 107/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 108/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 109/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 110/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 111/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 112/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 113/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 114/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 115/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 116/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 117/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 118/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 119/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 120/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 121/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 122/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 123/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 124/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 125/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 126/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 127/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 128/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 129/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 130/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 131/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 132/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 133/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 134/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 135/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 136/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 137/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 138/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 139/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 140/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 141/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 142/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 143/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 144/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 145/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 146/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 147/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 148/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 149/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 150/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 151/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 152/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 153/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 154/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 155/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 156/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 157/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 158/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 159/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 160/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 161/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 162/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 163/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 164/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 165/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 166/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 167/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 168/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 169/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 170/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 171/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 172/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 173/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 174/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 175/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 176/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 177/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 178/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 179/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 180/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 181/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 182/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 183/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 184/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 185/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 186/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 187/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 188/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 189/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 190/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 191/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 192/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 193/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 194/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 195/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 196/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 197/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 198/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 199/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 200/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 201/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 202/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 203/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 204/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 205/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 206/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 207/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 208/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 209/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 210/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 211/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 212/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 213/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 214/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 215/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 216/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 217/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 218/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 219/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 220/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 221/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 222/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 223/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 224/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 225/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 226/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 227/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 228/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 229/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 230/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 231/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 232/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 233/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 234/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 235/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 236/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 237/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 238/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 239/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 240/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 241/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 242/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 243/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 244/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 245/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 246/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 247/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 248/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 249/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 250/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 251/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 252/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 253/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 254/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 255/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 256/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 257/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 258/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 259/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 260/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 261/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 262/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 263/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 264/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 265/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 266/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 267/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 268/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 269/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 270/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 271/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 272/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 273/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 274/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 275/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 276/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 277/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 278/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 279/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 280/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 281/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 282/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 283/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 284/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 285/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 286/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 287/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 288/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 289/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 290/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 291/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 292/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 293/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 294/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 295/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 296/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 297/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 298/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 299/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 300/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 301/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 302/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 303/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 304/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 305/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 306/500: Best Fitness = 0.9583 (Overall Best: 0.9583)\n",
      "Generation 307/500: Best Fitness = 0.9783 (Overall Best: 0.9783)\n",
      "Generation 308/500: Best Fitness = 0.9783 (Overall Best: 0.9783)\n",
      "Generation 309/500: Best Fitness = 0.9783 (Overall Best: 0.9783)\n",
      "Generation 310/500: Best Fitness = 0.9783 (Overall Best: 0.9783)\n",
      "Generation 311/500: Best Fitness = 0.9783 (Overall Best: 0.9783)\n",
      "Generation 312/500: Best Fitness = 0.9783 (Overall Best: 0.9783)\n",
      "Generation 313/500: Best Fitness = 0.9783 (Overall Best: 0.9783)\n",
      "Generation 314/500: Best Fitness = 0.9783 (Overall Best: 0.9783)\n",
      "Generation 315/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 316/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 317/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 318/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 319/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 320/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 321/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 322/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 323/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 324/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 325/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 326/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 327/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 328/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 329/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 330/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 331/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 332/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 333/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 334/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 335/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 336/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 337/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 338/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 339/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 340/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 341/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 342/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 343/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 344/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 345/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 346/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 347/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 348/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 349/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 350/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 351/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 352/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 353/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 354/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 355/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 356/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 357/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 358/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 359/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 360/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 361/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 362/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 363/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 364/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 365/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 366/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 367/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 368/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 369/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 370/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 371/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 372/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 373/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 374/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 375/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 376/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 377/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 378/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 379/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 380/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 381/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 382/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 383/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 384/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 385/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 386/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 387/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 388/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 389/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 390/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 391/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 392/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 393/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 394/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 395/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 396/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 397/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 398/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 399/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 400/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 401/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 402/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 403/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 404/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 405/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 406/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 407/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 408/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 409/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 410/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 411/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 412/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 413/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 414/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 415/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 416/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 417/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 418/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 419/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 420/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 421/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 422/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 423/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 424/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 425/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 426/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 427/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 428/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 429/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 430/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 431/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 432/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 433/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 434/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 435/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 436/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 437/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 438/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 439/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 440/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 441/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 442/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 443/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 444/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 445/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 446/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 447/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 448/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 449/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 450/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 451/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 452/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 453/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 454/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 455/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 456/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 457/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 458/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 459/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 460/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 461/500: Best Fitness = 0.9787 (Overall Best: 0.9787)\n",
      "Generation 462/500: Best Fitness = 1.0000 (Overall Best: 1.0000)\n",
      "Target illumination achieved (or very close)! Stopping evolution.\n",
      "\n",
      "--- Evolution Finished ---\n",
      "Final Best Fitness: 1.0000\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAACSQAAAMeCAYAAAAORJhLAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQABAABJREFUeJzs3Wd4HNX59/HfzPaiLlnuFYON6Z1QjGkOnVCMIfSaPxBaSICQYBxCEkooDx0SIAETOoEUiiEm9F4CGGPccZXVpe27c54XshbLkizJlrSy/P1cly5bZ6fcc3Z2dc7MPedYxhgjAAAAAAAAAAAAAAAAAOgGdq4DAAAAAAAAAAAAAAAAANB/kJAEAAAAAAAAAAAAAAAAoNuQkAQAAAAAAAAAAAAAAACg25CQBAAAAAAAAAAAAAAAAKDbkJAEAAAAAAAAAAAAAAAAoNuQkAQAAAAAAAAAAAAAAACg25CQBAAAAAAAAAAAAAAAAKDbkJAEAAAAAAAAAAAAAAAAoNuQkAQAAAAAAAAAAAAAAACg25CQBAB90KJFi2RZlh5++OEur/vwww/LsiwtWrQoW7bffvtpv/3267b4NjaeTcm1114ry7JyHQYAAAC6wciRI3X66af3+n5ff/11WZal119/vdf33RNuvPFGjRs3To7jdHqdXPZJ0HOuvPJK7b777rkOAwAAoFflql/RzLIsXXvttS3KPvzwQ/3gBz9QKBSSZVn67LPPJEkvvfSSdthhB/n9flmWpdra2l6Pt685//zzddBBB+U6DHTR1KlTNWXKlFyHAaCLSEgCNhGWZXXqp69d4H7nnXd07bXXdtjIbb5A35kffK+53p5++ulch5JTy5cv17XXXpvtZOXalClTZFmWrrjiilyHAgAANiPNieBr/wwYMECTJk3Siy++2GP7jUajuvbaazvdF+mo7f/444/3WKx92abS56uvr9cNN9ygK664Qrb9/WWl9uIdOHBgm9vpa2347tbY2Khp06bphz/8oYqLizfogZPa2lqde+65KisrUygU0qRJk/TJJ5+0uewLL7ygnXbaSX6/X8OHD9e0adOUTqd7fJuXXHKJPv/8c73wwgtdOjYAANC3fPHFFzruuOM0YsQI+f1+DRkyRAcddJDuuOOOXIfWo2bPnq1rr702pw/Tjhw5Mtt2tm1bhYWF2nbbbXXuuefq/fff79Q2UqmUjj/+eFVXV+vWW2/VI488ohEjRqiqqkpTpkxRIBDQXXfdpUceeUShUKiHj6hvW7hwof70pz/pl7/8Zbas+QHx9n7+8Ic/5DDizrn77rtlWdYm+7DAn//8Z40fP15+v19jx45t87vniiuu0DPPPKPPP/88BxEC2FDuXAcAoHMeeeSRFr//9a9/1cyZM1uVjx8/vjfD6tA777yj6dOn6/TTT1dhYWG7y40fP77VsVx11VUKh8O6+uqrezhK9KRTTjlFU6dOlc/n67F9LF++XNOnT9fIkSO1ww479Nh+OqO+vl7/+Mc/NHLkSP3tb3/TH/7wBxLpAABAr/rNb36jUaNGyRijVatW6eGHH9ahhx6qf/zjHzr88MO7fX/RaFTTp0+XpC6NgHPRRRdp1113bVW+5557dldom5RNpc/34IMPKp1O68QTT2z12kEHHaRTTz21RVkgEJAkvfLKKy3K+1IbvidUVlbqN7/5jYYPH67tt9++y4lkjuPosMMO0+eff66f//znKi0t1d1336399ttPH3/8scaOHZtd9sUXX9TRRx+t/fbbT3fccYe++OIL/fa3v1VFRYXuueeeHt3mwIEDddRRR+nmm2/WkUceueEVBgAAcuadd97RpEmTNHz4cJ1zzjkaOHCgvvvuO7333nu6/fbb9dOf/jTXIfaY2bNna/r06dpvv/00cuTITq/3zTfftEjO31g77LCDfvazn0mSGhoa9PXXX+upp57SAw88oEsvvVS33HJLi+VjsZjc7u9v8c6fP1+LFy/WAw88oLPPPjtb/tJLL6mhoUHXXXedDjzwwG6Ld1N2++23a9SoUZo0aVKr10488UQdeuihrcp33HHH3ghto8yYMUMjR47UBx98oHnz5mmLLbbIdUiddt999+knP/mJjj32WF122WV68803ddFFFykajbZ46HvHHXfULrvsoj/+8Y/661//msOIAXQFCUnAJuLkk09u8ft7772nmTNntirfEMYYxePx7IXiXCgvL291LH/4wx9UWlq63mN0HEfJZFJ+v7+nQ8QGcrlccrlcuQ6j1zzzzDPKZDJ68MEHtf/+++uNN97QxIkTO1wvEols9k+nAACA7nHIIYdol112yf5+1llnqby8XH/72996JCFpQ+2zzz467rjjch1Gn7Ghfb5oNKpgMNiTobXw0EMP6cgjj2yzD7blllu2G6/X6+3p0PqUQYMGacWKFRo4cKA++uijNpPv1ufpp5/WO++8o6eeeir7OZkyZYq23HJLTZs2TY899lh22csvv1zbbbedXnnlleyNqfz8fP3ud7/TxRdfrHHjxvXYNpu3cfzxx2vBggUaPXr0BtQWAADIpeuvv14FBQX68MMPWz1UXFFRkZug+qC176N098O3Q4YMadWOvuGGG3TSSSfp1ltv1dixY/V///d/2dfWbYs3v0/tvX/re1i8qzbl69ipVEozZszQT37ykzZf32mnnbp8z21999fi8bi8Xu9GJa91pr4XLlyod955R88++6zOO+88zZgxQ9OmTetw2+l0Wo7j5LSvFovFdPXVV+uwww7LzgRyzjnnyHEcXXfddTr33HNVVFSUXX7KlCmaNm2a7r77boXD4VyFDaALmLIN6Eceeugh7b///howYIB8Pp+23nrrFk8uNhs5cqQOP/xwvfzyy9pll10UCAR03333SZIWL16sI488UqFQSAMGDNCll16ql19+uc2pAd5//3398Ic/VEFBgYLBoCZOnKi33347+/q1116rn//855KkUaNGZYe33JjhTy3L0oUXXqgZM2ZowoQJ8vl8eumllyRJy5Yt05lnnqny8nL5fD5NmDBBDz74YKttJBIJTZs2TVtssYV8Pp+GDRumX/ziF0okEh3u/80339Txxx+v4cOHZ9e99NJLFYvFWix3+umnKxwOa9myZTr66KMVDodVVlamyy+/XJlMpsWytbW1Ov3001VQUKDCwkKddtppPT6Pc/N0Huu+F83TZ6z9Xu+3337aZptt9L///U8TJ05UMBjUFltskW0c/ve//9Xuu++uQCCgrbbaSq+++mqH+2o+B9966y3ttttu8vv9Gj16dKus9urqal1++eXadtttFQ6HlZ+fr0MOOaTFkJyvv/569uL+GWeckT3P1p4OoaNztdlbb72lXXfdVX6/X2PGjMl+LrpixowZOuiggzRp0iSNHz9eM2bMaLVMc53897//1fnnn68BAwZo6NCh2ddffPFF7bPPPgqFQsrLy9Nhhx2mr776qsU2/ve//+n000/X6NGj5ff7NXDgQJ155pmqqqrqcswAAKB/KywsVCAQaPEErdSU3H/bbbdpwoQJ8vv9Ki8v13nnnaeampoWy3300UeaPHmySktLFQgENGrUKJ155pmSmoa2LysrkyRNnz492xa79tprNzrubbbZps2nVh3H0ZAhQ1okM0UiEf3sZz/TsGHD5PP5tNVWW+nmm2+WMabd7X/00UeyLEt/+ctfWr3W3Af65z//mS3rbH9j6dKlOvroo1v0qTrT1+iM5rb5xx9/rH333VfBYDA71UBX+jmPPvqodt55ZwUCARUXF2vq1Kn67rvvOtz/woUL9b///W+Dnq7eb7/9siNoddSGbz7O2bNna9KkSQoGgxoyZIhuvPHGVtvt7HHPnDlTe++9twoLCxUOh7XVVlu1mKZBku644w5NmDBBwWBQRUVF2mWXXVok6UjSnDlztGTJkg6P1+fztTtdXWc8/fTTKi8v1zHHHJMtKysr05QpU/T8889nj2/27NmaPXu2zj333Baf8fPPP1/GmBbTe/fENiVlz4fnn39+g48XAADkzvz58zVhwoQ2k1YGDBiQ/f/EiRO1/fbbt7mNrbbaSpMnT5b0/fRXN998s+666y6NHj1awWBQBx98sL777jsZY3Tddddp6NChCgQCOuqoo1RdXd1ie83Xj19//fXsPYxtt902e9362Wef1bbbbiu/36+dd95Zn376aauY5syZo+OOO07FxcXy+/3aZZddWkwz+/DDD+v444+XJE2aNKnVFMnru48ycuRInX766S32V1tbq0svvVQjR46Uz+fT0KFDdeqpp6qysrL9yl+PQCCgRx55RMXFxbr++utb9G3W7nOdfvrp2Qdijz/+eFmWlW17n3baaZKkXXfdVZZltYi5M9fMr732WlmWpdmzZ+ukk05SUVGR9t577+zrnelXdKVtH4/Hde2112rLLbeU3+/XoEGDdMwxx2j+/PnZZTrbj23LW2+9pcrKyo0aLaq986L53srjjz+uX/3qVxoyZIiCwaDq6+slSU899VS2rpofxF+2bFmLbTffV5o/f74OPfRQ5eXl6cc//nGHMc2YMUNFRUU67LDDdNxxx7V5T2Ltz+Vtt92mMWPGyOfzafbs2ZI6/rxInbtf02zJkiWaM2dOh7HPmjVLVVVVOv/881uUX3DBBYpEIvrXv/7Vovyggw5SJBLRzJkzO9w2gL6BEZKAfuSee+7RhAkTdOSRR8rtdusf//iHzj//fDmOowsuuKDFst98841OPPFEnXfeeTrnnHO01VZbKRKJaP/999eKFSt08cUXa+DAgXrsscc0a9asVvv6z3/+o0MOOUQ777yzpk2bJtu2swlRb775pnbbbTcdc8wxmjt3rv72t7/p1ltvVWlpqSRlb1hsqP/85z968skndeGFF6q0tFQjR47UqlWrtMcee2QTlsrKyvTiiy/qrLPOUn19vS655BJJTY3VI488Um+99ZbOPfdcjR8/Xl988YVuvfVWzZ07V3//+9/Xu++nnnpK0WhU//d//6eSkhJ98MEHuuOOO7R06VI99dRTLZbNZDKaPHmydt99d91888169dVX9cc//lFjxozJPs1gjNFRRx2lt956Sz/5yU80fvx4Pffcc9mOQl9RU1Ojww8/XFOnTtXxxx+ve+65R1OnTtWMGTN0ySWX6Cc/+YlOOukk3XTTTTruuOP03XffKS8vb73bnDdvno477jidddZZOu200/Tggw/q9NNP184776wJEyZIkhYsWKC///3vOv744zVq1CitWrVK9913nyZOnKjZs2dr8ODBGj9+vH7zm9/ommuu0bnnnqt99tlHkvSDH/xAUufOValpnvSDDz5YZWVluvbaa5VOpzVt2jSVl5d3up6WL1+uWbNmZW9qnXjiibr11lt15513tvmUwfnnn6+ysjJdc801ikQikpqm6jjttNM0efJk3XDDDYpGo7rnnnu0995769NPP80OHTxz5kwtWLBAZ5xxhgYOHKivvvpK999/v7766iu99957TBMHAMBmrK6uTpWVlTLGqKKiQnfccYcaGxtbPel53nnn6eGHH9YZZ5yhiy66SAsXLtSdd96pTz/9VG+//bY8Ho8qKiqybaQrr7xShYWFWrRokZ599llJTW37e+65R//3f/+nH/3oR9lEh+22267DOBsaGtq8OF9SUiLLsnTCCSfo2muv1cqVK1skdrz11ltavny5pk6dKqmpTX3kkUdq1qxZOuuss7TDDjvo5Zdf1s9//nMtW7ZMt956a5v732WXXTR69Gg9+eSTrdrfTzzxhIqKirI3VTrb34jFYjrggAO0ZMkSXXTRRRo8eLAeeeQR/ec//+mwPjqrqqpKhxxyiKZOnaqTTz5Z5eXlXernXH/99fr1r3+tKVOm6Oyzz9bq1at1xx13aN9999Wnn3663qen33nnHUlNTw63JR6Pt3pP8/LyWj1B3lEbXmrqg/zwhz/UMcccoylTpujpp5/WFVdcoW233VaHHHKIpM7377766isdfvjh2m677fSb3/xGPp9P8+bNa3HD5YEHHtBFF12k4447ThdffLHi8bj+97//6f3339dJJ53UIvaJEyd2eQq2rvr000+10047tXqaerfddtP999+vuXPnatttt83efFt7VDRJGjx4sIYOHdri5lxPbFOSCgoKNGbMGL399tu69NJLN+7AAQBArxsxYoTeffddffnll9pmm23aXe6UU07ROeec02q5Dz/8UHPnztWvfvWrFsvPmDFDyWRSP/3pT1VdXa0bb7xRU6ZM0f7776/XX39dV1xxhebNm6c77rhDl19+eatk/3nz5umkk07Seeedp5NPPlk333yzjjjiCN1777365S9/mU1g+P3vf68pU6a0mEbtq6++0l577aUhQ4boyiuvVCgU0pNPPqmjjz5azzzzjH70ox9p33331UUXXaT/9//+n375y19mp0Zee4rktu6jtKWxsVH77LOPvv76a5155pnaaaedVFlZqRdeeEFLly7N3hvpqnA4rB/96Ef685//rNmzZ2evm6/tvPPO05AhQ/S73/0uOy128zXtrbbaSvfff392Wu8xY8ZI6vw182bHH3+8xo4dq9/97nfZxKiu9Cs607bPZDI6/PDD9dprr2nq1Km6+OKL1dDQoJkzZ+rLL7/Mxt6Zfmx73nnnHVmW1e4UbNFotM0+amFhYYtE/fWdF9ddd528Xq8uv/xyJRIJeb3ebLy77rqrfv/732vVqlW6/fbb9fbbb7eqq3Q6rcmTJ2vvvffWzTff3KnRcGfMmKFjjjlGXq9XJ554ou655x59+OGHbY7S+tBDDykej+vcc8+Vz+dTcXFxpz4vUufu1zQ79dRT9d///ne9DwlJarfvsfPOO8u2bX366actrmVsvfXWCgQCevvtt7NxAejjDIBN0gUXXGDW/QhHo9FWy02ePNmMHj26RdmIESOMJPPSSy+1KP/jH/9oJJm///3v2bJYLGbGjRtnJJlZs2YZY4xxHMeMHTvWTJ482TiO02L/o0aNMgcddFC27KabbjKSzMKFC7t8jBMmTDATJ05sUSbJ2LZtvvrqqxblZ511lhk0aJCprKxsUT516lRTUFCQrZtHHnnE2LZt3nzzzRbL3XvvvUaSefvtt9cbU1t1/Pvf/95YlmUWL16cLTvttNOMJPOb3/ymxbI77rij2XnnnbO///3vfzeSzI033pgtS6fTZp999jGSzEMPPbTeeGbNmmUkmaeeeipb9tBDD7Wq84kTJ7aoy7aWWXt7ze9187qSzGOPPZYtmzNnTva9eO+997LlL7/8cqu429pX8zn4xhtvZMsqKiqMz+czP/vZz7Jl8XjcZDKZFjEuXLjQ+Hy+FnX74YcftllfXTlXjz76aOP3+1u8j7NnzzYul6vVZ609N998swkEAqa+vt4YY8zcuXONJPPcc8+1WK65Tvbee2+TTqez5Q0NDaawsNCcc845LZZfuXKlKSgoaFHe1rn4t7/9rVW9AgCAzUdzG2PdH5/PZx5++OEWy7755ptGkpkxY0aL8pdeeqlF+XPPPWckmQ8//LDd/a5evdpIMtOmTetUnM1tzvZ+VqxYYYwx5ptvvjGSzB133NFi/fPPP9+Ew+Fse6i5Tf3b3/62xXLHHXecsSzLzJs3L1s2YsQIc9ppp2V/v+qqq4zH4zHV1dXZskQiYQoLC82ZZ56ZLetsf+O2224zksyTTz6ZXSYSiZgtttiiVTu7I231+Zrb5vfee2+L8s72cxYtWmRcLpe5/vrrWyz3xRdfGLfb3ap8Xb/61a+MJNPQ0NDqtfbez+Y2+rp9kvba8Gsf51//+tdsWSKRMAMHDjTHHntsl4/71ltvNZLM6tWr2z22o446ykyYMGG9x998nOv2UzuyvmNtTygUanEONvvXv/7Voj/f3OdesmRJq2V33XVXs8cee/ToNpsdfPDBZvz48Z0+PgAA0He88sorxuVyGZfLZfbcc0/zi1/8wrz88ssmmUy2WK62ttb4/X5zxRVXtCi/6KKLTCgUMo2NjcaYpuu3kkxZWZmpra3NLnfVVVcZSWb77bc3qVQqW37iiScar9dr4vF4tqz5+vE777yTLWu+9hwIBFpcw73vvvtatbUPOOAAs+2227bYpuM45gc/+IEZO3Zstuypp55qt53e3n2U5tfW7ldcc801RpJ59tlnWy279nXptowYMcIcdthh7b7e3JZ9/vnns2Xr9r/auk9gzPd9xLX7c125Zj5t2jQjyZx44oktttuVfkVn2/YPPvigkWRuueWWVnXQHGdn+7HtOfnkk01JSUmr8uZztr2fd999N7tse+dF83swevToFtfuk8mkGTBggNlmm21MLBbLlv/zn/80ksw111yTLWu+r3TllVeu9zjW9tFHHxlJZubMmcaYproaOnSoufjii9s8xvz8fFNRUdHitc5+Xjp7v8aY79/3jlxwwQXG5XK1+VpZWZmZOnVqq/Itt9zSHHLIIR1uG0DfwJRtQD+y9hy1zU9FT5w4UQsWLFBdXV2LZUeNGpV92rfZSy+9pCFDhujII4/Mlvn9fp1zzjktlvvss8/07bff6qSTTlJVVZUqKytVWVmpSCSiAw44QG+88YYcx+mBI2wyceJEbb311tnfjTF65plndMQRR8gYk42nsrJSkydPVl1dnT755BNJTSMcjR8/XuPGjWux3P777y9JbY4Gtba16zgSiaiyslI/+MEPZIxpc1jYdeci3meffbRgwYLs7//+97/ldrtbzP/scrn005/+tAs10vPC4XD2CXSp6cmKwsJCjR8/Xrvvvnu2vPn/ax9je7beeuvsk9BS09P1W221VYt1fT5f9qmWTCajqqqq7PQKze/p+nT2XM1kMnr55Zd19NFHa/jw4dn1x48f3+pzsj4zZszQYYcdlh0dauzYsdp5553bHCJVapoL2eVyZX+fOXOmamtrdeKJJ7Y4P10ul3bfffcW5+fa52Lzk+h77LGHJHWqbgAAQP911113aebMmZo5c6YeffRRTZo0SWeffXZ2VCOpqV1cUFCggw46qEW7Y+edd1Y4HM62O5qf1PznP/+pVCrVrXFec8012TjX/ikuLpYkbbnlltphhx30xBNPZNfJZDJ6+umndcQRR2TbQ//+97/lcrl00UUXtdj+z372Mxlj9OKLL7YbwwknnKBUKtWibl555RXV1tbqhBNOkNS1/sa///1vDRo0qMV0csFgUOeee+5G1tb3fD6fzjjjjBZlne3nPPvss3IcR1OmTGmx3MCBAzV27NgO+0NVVVVyu90Kh8Ntvn7UUUe1ej+70p5eWzgcbvEkrNfr1W677daiv9DZ424+j59//vl2+6qFhYVaunSpPvzww/XGZYzp8dGRpKbRttYdWUpq6qM3v772v+0tu/b04j2xzWZFRUUbPB0JAADIrYMOOkjvvvuujjzySH3++ee68cYbNXnyZA0ZMqTFlE0FBQU66qij9Le//S076kkmk9ETTzyRnbJ4bccff7wKCgqyvzdfOz755JNbjDaz++67K5lMtpq+auutt9aee+7Zav3999+/xTXcda9JV1dX6z//+Y+mTJmSHZW1srJSVVVVmjx5sr799ttW+2pPW/dR2vLMM89o++23b3PElo0dyb657d3Q0LBR22m2Ifd31r3P0dV+RWfa9s8884xKS0vbvDfSXIed7ce2p6qqSkVFRe2+fu6557bZR137fpS0/vPitNNOa3Ht/qOPPlJFRYXOP//8bLtbkg477DCNGzeu1ZRkklrcL+rIjBkzVF5enp3uvHm04ccff1yZTKbV8scee2yLWUy68nnpyv2a119/vcPRkaSmvkdbs0tI9D2A/oIp24B+5O2339a0adP07rvvKhqNtnitrq6uReN/1KhRrdZfvHixxowZ06qBvMUWW7T4/dtvv5Wk9U4rVldXt96G3cZYN/bVq1ertrZW999/v+6///4216moqJDUFPvXX3/d7rRxzcu1Z8mSJbrmmmv0wgsvtJqTeN2kL7/f32o/RUVFLdZbvHixBg0a1OqCfntDv+bK0KFDW50XBQUFGjZsWKsySZ2ar3ntTmOzdevHcRzdfvvtuvvuu7Vw4cIWDeiSkpIO99HZczWRSCgWi2ns2LGtXt9qq63073//u8N9ff311/r000916qmnat68edny/fbbT3fddZfq6+uVn5/fYp11z+XmeJtvoKxr7fWrq6s1ffp0Pf74463O23XPRQAAsHnZbbfdWgx3fuKJJ2rHHXfUhRdeqMMPP1xer1fffvut6urqNGDAgDa30dy+mDhxoo499lhNnz5dt956q/bbbz8dffTROumkk9pMVuiKbbfdVgceeOB6lznhhBP0y1/+UsuWLdOQIUP0+uuvq6KiIpssJDW1qQcPHtxqyuDmqRYWL17c7va33357jRs3Tk888YTOOussSU3TtZWWlmbbZF3pbyxevFhbbLFFq7Zzd7bvhwwZ0uqCbWf7Od9++62MMW22eyWtd3qDzhg6dGiH72lXtrVuPRYVFel///tf9vfOHvcJJ5ygP/3pTzr77LN15ZVX6oADDtAxxxyj4447LntB/YorrtCrr76q3XbbTVtssYUOPvhgnXTSSdprr7265Xi6KhAIKJFItCqPx+PZ19f+t71l174Z0hPbbGaMYdpoAAA2YbvuuqueffZZJZNJff7553ruued066236rjjjtNnn32WTcg49dRT9cQTT+jNN9/Uvvvuq1dffVWrVq3SKaec0mqb617/bb523Nlryhu6/rx582SM0a9//Wv9+te/bvN4KyoqNGTIkHZq43tt3Udpy/z583Xsscd2atmuamxslKRW/Z0NtSH3d9q6jt2VfkVn2vbz58/XVltt1SJZra3YO9OPXZ/1JcmMHTu2U/2Z9Z0X677W3B9tq084btw4vfXWWy3K3G63hg4d2mEMUlNS0OOPP65JkyZp4cKF2fLdd99df/zjH/Xaa6/p4IMPXm98Xfm8bOz9mrYEAgElk8k2X6PvAfQPJCQB/cT8+fN1wAEHaNy4cbrllls0bNgweb1e/fvf/9att97aKqO9rT/indW8rZtuukk77LBDm8u098Rsd1g39uZ4Tj755HYb0dttt1122W233Va33HJLm8ut25lZWyaT0UEHHaTq6mpdccUVGjdunEKhkJYtW6bTTz+9VR2vPfJNX9NeY62tjHmp/WNpr7wzme+dWfd3v/udfv3rX+vMM8/Uddddp+LiYtm2rUsuuaRTo3B19lxt60J7Vz366KOSpEsvvVSXXnppq9efeeaZVk+yt3cuP/LIIxo4cGCrbazdGZsyZYreeecd/fznP9cOO+ygcDgsx3H0wx/+sEdHKAMAAJse27Y1adIk3X777fr22281YcIEOY6jAQMGtDuSY3OCh2VZevrpp/Xee+/pH//4h15++WWdeeaZ+uMf/6j33nuvR9v9UlMiyVVXXaWnnnpKl1xyiZ588kkVFBTohz/8Ybfu4/rrr1dlZaXy8vL0wgsv6MQTT8y2vbrS3+gNbfXlOtvPcRxHlmXpxRdfbLM93tH7WVJSonQ6rYaGhm67IdKezvQXOnvcgUBAb7zxhmbNmqV//etfeumll/TEE09o//331yuvvCKXy6Xx48frm2++0T//+U+99NJLeuaZZ3T33Xfrmmuu0fTp07v/ADswaNAgrVixolV5c9ngwYOzyzWXr9ufXbFihXbbbbce3WazmpoalZaWdu7gAABAn+X1erXrrrtq11131ZZbbqkzzjhDTz31lKZNmyZJmjx5ssrLy/Xoo49q33331aOPPqqBAwe2mcSxsdeUN3T95vb75Zdf3u4oNus+hN2ejbmP0l2+/PJLSZ2PuSMbcn+nrevYXelXbMx9hHX325l+bHtKSko69TB1R9Z3XmzsObP2KEQd+c9//qMVK1bo8ccf1+OPP97q9RkzZrRKSGrvnkRnPi8be7+mLYMGDVImk1FFRUWLRLNkMqmqqqpsH2VtNTU17SbDAeh7SEgC+ol//OMfSiQSeuGFF1o8OdDREJVrGzFihGbPnt0qu3jt0V4kacyYMZKaRmvpKFu8N7KUy8rKlJeXp0wm02E8Y8aM0eeff64DDjigy7F98cUXmjt3rv7yl7/o1FNPzZbPnDlzg+KWmur8tddeU2NjY4tG+jfffLPB2+yM5qcbamtrW5Sv7+nxXHj66ac1adIk/fnPf25RXltb2+Jid3vvZWfP1bKyMgUCgezTIWvrzHthjNFjjz2mSZMm6fzzz2/1+nXXXacZM2a0SkhqL94BAwasN96amhq99tprmj59uq655ppseVvxAwAASFI6nZb0/dO1Y8aM0auvvqq99tqrUxdM99hjD+2xxx66/vrr9dhjj+nHP/6xHn/8cZ199tk92uYfNWqUdtttNz3xxBO68MIL9eyzz+roo49uMTrTiBEj9Oqrr7ZKkpkzZ0729fU54YQTNH36dD3zzDMqLy9XfX19i+mKu9LfGDFihL788stWfaqebt93tp8zZswYGWM0atQobbnlll3ez7hx4yRJCxcu3OgkrO44b7rSv7NtWwcccIAOOOAA3XLLLfrd736nq6++WrNmzcq+r6FQSCeccIJOOOEEJZNJHXPMMbr++ut11VVXtZheoTfssMMOevPNN+U4TosbEu+//76CwWD2/Wu+ifTRRx+1SBRavny5li5d2mK6wJ7YZrOFCxdq++233/gDBwAAfUbzqKtrJzS7XC6ddNJJevjhh3XDDTfo73//u84555w+9XDu6NGjJTWN0tNb9y/GjBmTTRzqTo2NjXruuec0bNiw7AiwG6sr93fWt42N6Ve0t833339fqVSq3ZFbu9qPXde4ceM0Y8aMVjOK9KTm/ug333zTamaEb775psP+6vrMmDFDAwYM0F133dXqtWeffVbPPfec7r333vXWVVc+L529X9MVa/c9Dj300Gz5Rx99JMdxWiXNpdNpfffddzryyCM3aH8Ael/nUiwB9HnNDf61M8rr6ur00EMPdXobkydP1rJly1rMCx2Px/XAAw+0WG7nnXfWmDFjdPPNN2dvaKxt9erV2f83zxu9buJLd3K5XDr22GP1zDPPtNnoXzueKVOmaNmyZa2OSWqaqzYSiax3P1LLOjbG6Pbbb9/g2A899FCl02ndc8892bJMJqM77rhjg7fZGc2djjfeeKPFftubgiJXXC5Xq6cknnrqqVZzfLd3nnX2XHW5XJo8ebL+/ve/a8mSJdnXv/76a7388ssdxvn2229r0aJFOuOMM3Tccce1+jnhhBM0a9YsLV++fL3bmTx5svLz8/W73/1OqVRqvfFKrZ8gue222zqMFQAAbH5SqZReeeUVeb3e7EXsKVOmKJPJ6Lrrrmu1fDqdzrarampqWrU5mi8INo8yGQwGJfVcm/+EE07Qe++9pwcffFCVlZUtpmuTmtrUmUxGd955Z4vyW2+9VZZl6ZBDDlnv9sePH69tt91WTzzxhJ544gkNGjRI++67b/b1rvQ3Dj30UC1fvlxPP/10tiwajfZ4O7uz/ZxjjjlGLpdL06dPb/W+GmNUVVW13v3sueeekpouDm+s7ugrdva4q6urW72+7nm87rF7vV5tvfXWMsa0aJvPmTOnRZ+hO6xYsUJz5sxpsZ/jjjtOq1at0rPPPpstq6ys1FNPPaUjjjgim5Q3YcIEjRs3Tvfff3+LEW/vueceWZal4447rke3KTVde5g/f75+8IMfdFONAACA3jRr1qw2R6r597//Lan1VFOnnHKKampqdN5556mxsVEnn3xyr8TZWQMGDNB+++2n++67r83RIXvi/sWxxx6bnepuXV0dBahZLBbTKaecourqal199dXdljzVlfs77dnYfkVbjj32WFVWVrbq1zVvU+p8P7Y9e+65p4wx+vjjj7sc34baZZddNGDAAN17770tZmp48cUX9fXXX+uwww7boO3GYjE9++yzOvzww9u8J3HhhReqoaGhxf2+tnTl89LZ+zWStGTJkuxDQuuz//77q7i4uMU9Mqmp7xEMBlvVz+zZsxWPx+l7AJsQRkgC+omDDz5YXq9XRxxxRLYj8MADD2jAgAFtNiLact555+nOO+/UiSeeqIsvvliDBg3SjBkzsk+CNjd4bdvWn/70Jx1yyCGaMGGCzjjjDA0ZMkTLli3TrFmzlJ+fr3/84x+Smhq3knT11Vdr6tSp8ng8OuKII7IN/e7yhz/8QbNmzdLuu++uc845R1tvvbWqq6v1ySef6NVXX81egD7llFP05JNP6ic/+YlmzZqlvfbaS5lMRnPmzNGTTz6pl19+Ofvkx7rGjRunMWPG6PLLL9eyZcuUn5+vZ555ZqOG+DziiCO011576corr9SiRYu09dZb69lnn1VdXd0Gb7MzJkyYoD322ENXXXWVqqurVVxcrMcffzz75Hxfcfjhh+s3v/mNzjjjDP3gBz/QF198oRkzZmSz9puNGTNGhYWFuvfee5WXl6dQKKTdd99do0aN6vS5On36dL300kvaZ599dP755yudTuuOO+7QhAkTWsxl3ZYZM2bI5XK123k48sgjdfXVV+vxxx/XZZdd1u528vPzdc899+iUU07RTjvtpKlTp6qsrExLlizRv/71L+2111668847lZ+fr3333Vc33nijUqmUhgwZoldeeaXFPNEAAGDz9eKLL2Yv/FVUVOixxx7Tt99+qyuvvFL5+fmSpIkTJ+q8887T73//e3322Wc6+OCD5fF49O233+qpp57S7bffruOOO05/+ctfdPfdd+tHP/qRxowZo4aGBj3wwAPKz8/PPr0YCAS09dZb64knntCWW26p4uJibbPNNtpmm23WG+ebb76peDzeqny77bZrMfrOlClTdPnll+vyyy9XcXFxq6c2jzjiCE2aNElXX321Fi1apO23316vvPKKnn/+eV1yySXZZPz1OeGEE3TNNdfI7/frrLPOajVEfmf7G+ecc47uvPNOnXrqqfr44481aNAgPfLII9mkrZ7S2X7OmDFj9Nvf/lZXXXWVFi1apKOPPlp5eXlauHChnnvuOZ177rm6/PLL293P6NGjtc022+jVV1/VmWeeuVExr68N393H/Zvf/EZvvPGGDjvsMI0YMUIVFRW6++67NXToUO29996SmvrUAwcO1F577aXy8nJ9/fXXuvPOO3XYYYe1GHlr/Pjxmjhxol5//fUO47vzzjtVW1ubfTDhH//4h5YuXSpJ+ulPf5p9Kvuqq67SX/7yFy1cuFAjR46U1JQ8tMcee+iMM87Q7NmzVVpaqrvvvluZTKbVFHI33XSTjjzySB188MGaOnWqvvzyS9155506++yzWzxJ3xPblKRXX31VxhgdddRRnXjXAABAX/PTn/5U0WhUP/rRjzRu3Dglk0m98847euKJJzRy5MhWo77vuOOO2mabbfTUU09p/Pjx2mmnnXIUefvuuusu7b333tp22211zjnnaPTo0Vq1apXeffddLV26VJ9//rmkpiR1l8ulG264QXV1dfL5fNp///1bTB3VGT//+c/19NNP6/jjj9eZZ56pnXfeWdXV1XrhhRd07733djiS5LJly/Too49KahoVafbs2Xrqqae0cuVK/exnP9N55523YRXRhq7c32nPxvYr2nLqqafqr3/9qy677DJ98MEH2meffRSJRPTqq6/q/PPP11FHHdXpfmx79t57b5WUlOjVV19tNVqRJH3yySfZ92Hd421+OKOrPB6PbrjhBp1xxhmaOHGiTjzxRK1atUq33367Ro4cqUsvvXSDtvvCCy+ooaGh3ZGC9thjD5WVlWnGjBmtHupZV2c/L529XyM1vZ///e9/O0zICwQCuu6663TBBRfo+OOP1+TJk/Xmm2/q0Ucf1fXXX6/i4uIWy8+cOVPBYFAHHXTQercLoA8xADZJF1xwgVn3I/zCCy+Y7bbbzvj9fjNy5Ehzww03mAcffNBIMgsXLswuN2LECHPYYYe1ud0FCxaYww47zAQCAVNWVmZ+9rOfmWeeecZIMu+9916LZT/99FNzzDHHmJKSEuPz+cyIESPMlClTzGuvvdZiueuuu84MGTLE2LbdKpb1mTBhgpk4cWKLMknmggsuaHP5VatWmQsuuMAMGzbMeDweM3DgQHPAAQeY+++/v8VyyWTS3HDDDWbChAnG5/OZoqIis/POO5vp06eburq69cY0e/Zsc+CBB5pwOGxKS0vNOeecYz7//HMjyTz00EPZ5U477TQTCoVarT9t2rRW71tVVZU55ZRTTH5+vikoKDCnnHKK+fTTT1ttsy2zZs0yksxTTz2VLXvooYda1fPEiRNb1eX8+fPNgQceaHw+nykvLze//OUvzcyZM40kM2vWrBbrTpgwodW+2zuP1n2P2oqnvXXXjTMej5uf/exnZtCgQSYQCJi99trLvPvuu20ez/PPP2+23npr43a7W9VdZ8/V//73v2bnnXc2Xq/XjB492tx7771tvmdrSyaTpqSkxOyzzz7tLmOMMaNGjTI77rhjizr58MMP21x21qxZZvLkyaagoMD4/X4zZswYc/rpp5uPPvoou8zSpUvNj370I1NYWGgKCgrM8ccfb5YvX24kmWnTpq03FgAA0D81tzHW/vH7/WaHHXYw99xzj3Ecp9U6999/v9l5551NIBAweXl5ZttttzW/+MUvzPLly40xxnzyySfmxBNPNMOHDzc+n88MGDDAHH744S3aJcYY884772TbUR21R5rbsO39tLXuXnvtZSSZs88+u81tNjQ0mEsvvdQMHjzYeDweM3bsWHPTTTe1OuYRI0aY0047rdX63377bXb/b731Vpv76Gx/Y/HixebII480wWDQlJaWmosvvti89NJLrdrZHWmrz9de29yYrvVznnnmGbP33nubUChkQqGQGTdunLngggvMN99802Fct9xyiwmHwyYajbYoX19frTn2zrbh2zvO0047zYwYMaLLx/3aa6+Zo446ygwePNh4vV4zePBgc+KJJ5q5c+dmt3PfffeZfffdN9tnGDNmjPn5z3/equ4ktTqO9owYMaLd83zt/tFpp53WZl+5urranHXWWaakpMQEg0EzceLEdvsQzz33nNlhhx2Mz+czQ4cONb/61a9MMplstVxPbPOEE04we++9d6fqBAAA9D0vvviiOfPMM824ceNMOBw2Xq/XbLHFFuanP/2pWbVqVZvr3HjjjUaS+d3vftfqtYULFxpJ5qabbmpR3ta1bGPavlba2WvP69vf/PnzzamnnmoGDhxoPB6PGTJkiDn88MPN008/3WK5Bx54wIwePdq4XK4Wbfb13Udpq19RVVVlLrzwQjNkyBDj9XrN0KFDzWmnnWYqKyvb3Mba22puI1qWZfLz882ECRPMOeecY95///0211m339SVum3WmWvmzdfGV69e3WYcnelXdKVtH41GzdVXX21GjRqV7XMdd9xxZv78+S2W66gfuz4XXXSR2WKLLVqUNZ9D7f2s/V63d1609x40e+KJJ8yOO+5ofD6fKS4uNj/+8Y/N0qVLW9VJW/eV2nLEEUcYv99vIpFIu8ucfvrpxuPxmMrKynY/J80683npyv2aiRMnrve+yrruv/9+s9VWWxmv12vGjBljbr311javYey+++7m5JNP7vR2AeSeZcwGjhUIYLNx22236dJLL9XSpUs1ZMiQXIcDAAAAAMiRuro6jR49WjfeeKPOOuusXIeDHFu5cqVGjRqlxx9/nBGSAADYjNx+++269NJLtWjRIg0fPjzX4QCdtmDBAo0bN04vvviiDjjggFyHgy747LPPtNNOO+mTTz7JTsENoO8jIQlAC7FYTIFAIPt7PB7XjjvuqEwmo7lz5+YwMgAAAABAX3DDDTfooYce0uzZs1tNb4fNy5VXXqn//Oc/+uCDD3IdCgAA6CXGGG2//fYqKSnRrFmzch0O0GX/93//p3nz5mnmzJm5DgVdMHXqVDmOoyeffDLXoQDoAhKSALRwyCGHaPjw4dphhx1UV1enRx99VF999ZVm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W6BWTGYO0dvby5wDB6jEfPTqq69WZ2cnjayz2GTG0e9//3t9//vf15133jkVIWIamMw4evnll/XTn/5Utm3r/vvv13XXXaevfvWr+vKXvzwVIaNGTWYsfehDH9IXv/hFnXbaaQoEAlq4cKHe8Y53sGUbJuRQ8+3R0VFls9lxP4/nDUnXXHONDMM47Nff//73fY//7Gc/q2eeeUYPPvigfD6fLrjgAo2tKjVzTTRHkrR9+3a9973v1Qc/+EF97GMf8yjyqTOZHAGojjVr1ugvf/mLNm3a5HUoNWfJkiV69tln9cQTT+gTn/iEVq9erb/97W9eh1UzXnvtNV122WX68Y9/rFAo5HU4Net973ufPvjBD+q4447TWWedpfvvv1/Dw8O65557vA4N8By1xfhQX5RHfQHUDuqLQ6O+ODzqi/KoLQBgfxs2bNCmTZt077338t6BcUsmkzr//PN15513qrm52etwMI05jqPW1lZ997vf1UknnaRzzz1Xn//85/Xtb3/b69AwzTzyyCP6yle+om9961t6+umn9bOf/Uy//OUv9aUvfcnr0DAL+b0O4Morr9SFF1542McsWLBg3/83NzerublZixcv1rJly9Td3a3HH398Ri9JPdEc7dixQ2eccYZOOeUUffe7361ydLVhojnCmObmZvl8Pu3atWu/47t27VJ7e7tHUWE6u/TSS/WLX/xCv/vd7zRnzhyvw6k5lmVp0aJFkqSTTjpJTz75pL7+9a/rO9/5jseR1YannnpKu3fv1oknnrjvmG3b+t3vfqfbb79d+XxePp/PwwhrU319vRYvXqwXX3zR61AAz1FbjA/1RXnUF5NDfYFKo744POqLw6O+mDhqC3hlMnOI9vZ25hw4wJHMR2+99VZt2LBBv/nNb3TcccdVM0zUuImOo5deeklbt27VOeecs++Y4ziSJL/fr+eff14LFy6sbtCoOZN5Pero6FAgENhvjrps2TL19vaqUCjIsqyqxozaNJmxdN111+n888/XRz/6UUnSscceq3Q6rf/8z//U5z//eZmm52vWYBo41Hw7kUgoHA6P+3k8b0hqaWlRS0vLpH527xt6Pp+vZEg1ZyI52r59u8444wyddNJJuuuuu2bNC8qRjKPZzLIsnXTSSdq8ebNWrVolaezf1ebNm3XppZd6GxymFdd19alPfUr33nuvHnnkEc2fP9/rkKYFx3Fm/HvYRLzrXe/Sn//85/2OXXTRRVq6dKmuvvpqbhYcQiqV0ksvvaTzzz/f61AAz1FbjA/1RXnUF5NDfYFKob6YHOqL/VFfTBy1BbwymTnEypUrtXnzZl1++eX7jj300EMz/sMFOLzJzkdvueUW3XTTTXrggQe0fPnyKYoWtWqi42jp0qUHzDm+8IUvKJlM6utf/7q6u7unImzUmMm8Hp166qnauHGjHMfZd/3lH//4hzo6OmhGmsUmM5YymcwB1/D21j+zYXV4VMbKlSt1//3373dsMvNtzxuSxuuJJ57Qk08+qdNOO00NDQ166aWXdN1112nhwoUUGXts375d73jHOzRv3jzdeuut6uvr2/d7fDLkDdu2bdPg4KC2bdsm27b17LPPSpIWLVqkWCzmbXAeWLt2rVavXq3ly5fr5JNP1m233aZ0Oq2LLrrI69BqRiqV2u/Tga+88oqeffZZNTY2au7cuR5GVjvWrFmjjRs36uc//7ni8fi+fWvr6uom1CU7k1177bV63/vep7lz5yqZTGrjxo165JFH9MADD3gdWs2Ix+M65phj9jsWjUbV1NR0wPHZ7DOf+YzOOecczZs3Tzt27NC6devk8/l03nnneR0aMG1QW4wP9cX4UF/sj/qiPOqL8qgvyqO+KI/6ojxqC9SScnOICy64QF1dXVq/fr0k6bLLLtPpp5+ur371qzr77LO1adMm/fGPf5w1K3ri0CY6lm6++WZdf/312rhxo3p6evbNO2Kx2Kycz2PMRMZRKBQ6YG5RX18vScw5ZrmJvh594hOf0O23367LLrtMn/rUp/TCCy/oK1/5ij796U97+cdADZjoWDrnnHP0ta99Tf/yL/+iFStW6MUXX9R1112nc845hw9mzGLlrkdde+212r59u/7nf/5HknTJJZfo9ttv11VXXaWPfOQj+u1vf6t77rlHv/zlLyd2Ynea+NOf/uSeccYZbmNjoxsMBt2enh73kksucV9//XWvQ6sZd911lyvpoF94w+rVqw+ao4cfftjr0DzzjW98w507d65rWZZ78sknu48//rjXIdWUhx9++KBjZvXq1V6HVjMO9dpz1113eR1azfjIRz7izps3z7Usy21paXHf9a53uQ8++KDXYdW8008/3b3sssu8DqOmnHvuuW5HR4drWZbb1dXlnnvuue6LL77odVjAtEJtMT7UF+NDfXEg6ovDo74oj/qiPOqLyaG+2B+1BWrN4eYQp59++gHvlffcc4+7ePFi17Is9+ijj3Z/+ctfTnHEqFUTGUvz5s076Lxj3bp1Ux84aspEX5PebPXq1e773//+6geJmjfRcfTYY4+5K1ascIPBoLtgwQL3pptuckul0hRHjVo0kbFULBbdG264wV24cKEbCoXc7u5u95Of/KQ7NDQ09YGjZpS7HrV69Wr39NNPP+BnTjjhBNeyLHfBggWTui5juC7rcgEAAAAAAAAAAAAAAACoDLP8QwAAAAAAAAAAAAAAAABgfGhIAgAAAAAAAAAAAAAAAFAxNCQBAAAAAAAAAAAAAAAAqBgakgAAAAAAAAAAAAAAAABUDA1JAAAAAAAAAAAAAAAAACqGhiQAAAAAAAAAAAAAAAAAFUNDEgAAAAAAAAAAAAAAAICKoSEJAAAAAAAAAAAAAAAAQMXQkAQAAAAAAAAAAAAAAACgYmhIAgAAAAAAAAAAAAAAAFAxNCQBAAAAAAAAAAAAAAAAqBgakgAAAAAAAAAAAAAAAABUzP8PL37rWmFGLF4AAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 2400x800 with 3 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA18AAAIjCAYAAAD80aFnAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAaiZJREFUeJzt3XlcVXXi//H3ZQcRSUUQRVFMzVIsHIncc2GkcXLLdXLJNEsqZVo095qimgl1HJeaSvtpTpaRTW4jklqOW+MyVqa5lYqCS6OoCCKc3x98780boEjcew/X1/Px4AH3cz73nM/hfriet5/P+VyLYRiGAAAAAAAO5eHqBgAAAADArYDwBQAAAABOQPgCAAAAACcgfAEAAACAExC+AAAAAMAJCF8AAAAA4ASELwAAAABwAsIXAAAAADgB4QsAAAAAnIDwBQAVzGKxaNq0aa5uBpzohx9+kMVi0cKFC13dFFRCvGcAtw7CFwBTWLhwoSwWi91XrVq11KlTJ61evdphx83JydG0adO0YcOGMtXfsGFDsXZavwYMGFDiczZv3qxp06bp3LlzFddwF/jla+Tn56fGjRsrMTFRWVlZrm7eLW/FihX67W9/qxo1athem2eeeUZnz551ddNKdeTIESUmJqpx48YKCAhQQECAmjVrpjFjxmjPnj2ubl6FWrVqFQELgLxc3QAAuNaLL76oBg0ayDAMZWVlaeHChUpISNBnn32m3/3udxV+vJycHE2fPl2S1LFjxzI/76mnntJvfvMbu7LIyEhJ0uXLl+Xl9fPb6+bNmzV9+nQNGzZMwcHBv7bJLmd9jXJzc7Vp0ybNmzdPq1at0jfffKOAgABXN88l6tevr8uXL8vb29slx3/mmWf0xhtvKDo6Ws8//7yqV6+unTt36m9/+5s++OADpaenq0mTJi5pW2lWrFih/v37y8vLS4MHD1Z0dLQ8PDy0b98+paamat68eTpy5Ijq16/v6qZWiFWrVmnOnDklBrBfvmcAcF/8pQMwle7du6tVq1a2xyNGjFBoaKj+8Y9/OCR8lVe7du3Ut2/fErf5+fk5uTXOde1r9Oijj6pGjRpKSUnRp59+qoEDB5b4nEuXLqlKlSpOaZ8zj2VlHQl0hX/84x9644031L9/f73//vvy9PS0bRs2bJg6deqkhx56SDt37nTqBf71XodDhw5pwIABql+/vtLT01W7dm277a+99prmzp0rDw/zTtCpyH7m7u8ZAH5m3nc1AJAUHBwsf3//YheNhYWFmjlzpu688075+fkpNDRUjz32mP73v//Z1fvPf/6j+Ph41axZU/7+/mrQoIEeeeQRSUX36YSEhEiSpk+fbptO92unBl27j2nTpunZZ5+VJDVo0MB2jB9++MFWNzExUcuXL9ddd90lX19f3XnnnVqzZk2x/WZkZOiRRx5RaGiord67775brN7s2bN15513KiAgQLfddptatWqlJUuW2LZfuHBBY8eOVWRkpHx9fVWrVi117dpVO3fuLNf53n///ZKKppBJRRf8gYGBOnTokBISElS1alUNHjxYUtEF6x//+EdFRETI19dXTZo00V/+8hcZhmG3z8uXL+upp55SzZo1VbVqVf3+979XRkZGsddn2rRpslgs2rt3rwYNGqTbbrtNbdu2tW1fvHixYmJi5O/vr+rVq2vAgAE6duyY3bEOHDigPn36KCwsTH5+fqpbt64GDBig8+fP2+qkpaWpbdu2Cg4OVmBgoJo0aaIXXnjBtr20e74+//xztWvXTlWqVFFwcLAefPBBfffdd3Z1rOdw8OBB2+hotWrVNHz4cOXk5Nzw9z99+nTddttteuutt+yClyS1bt1azz//vL7++mstW7ZMkpSYmKjAwMAS9z1w4ECFhYWpoKDAVrZ69WrbOVStWlUPPPCAvv32W7vnXe81L8nrr7+uS5cuacGCBcWClyR5eXnpqaeeUkREhF35vn371LdvX1WvXl1+fn5q1aqV/vnPf9rVsU6P/fe//62kpCSFhISoSpUq6tWrl06fPl3sWL/2/L788ks99NBDqlevnnx9fRUREaFx48bp8uXLds+fM2eOJNlN3bUq6X1n165d6t69u4KCghQYGKjOnTtr69at5T7X670XAnAeRr4AmMr58+d15swZGYahU6dOafbs2bp48aL+8Ic/2NV77LHHtHDhQg0fPlxPPfWUjhw5or/97W/atWuX/v3vf8vb21unTp1St27dFBISovHjxys4OFg//PCDUlNTJUkhISGaN2+eHn/8cfXq1Uu9e/eWJLVo0eKG7bxw4YLOnDljV1a9evVi/1Pfu3dvff/99/rHP/6hGTNmqGbNmrZjW23atEmpqal64oknVLVqVf31r39Vnz59dPToUdWoUUOSlJWVpXvvvdcW1kJCQrR69WqNGDFC2dnZGjt2rCTp73//u5566in17dtXTz/9tHJzc7Vnzx5t27ZNgwYNkiSNHj1ay5YtU2Jiopo1a6azZ89q06ZN+u6773TPPfeU9aWyOXTokCTZ2ipJV69eVXx8vNq2bau//OUvCggIkGEY+v3vf6/169drxIgRatmypf71r3/p2WefVUZGhmbMmGF7/rBhw/Thhx/q4Ycf1r333quNGzfqgQceKLUNDz30kG6//Xa98sortiD38ssva/LkyerXr58effRRnT59WrNnz1b79u21a9cuBQcH68qVK4qPj1deXp6efPJJhYWFKSMjQytWrNC5c+dUrVo1ffvtt/rd736nFi1a6MUXX5Svr68OHjyof//739f9vaxbt07du3dXw4YNNW3aNF2+fFmzZ89WmzZttHPnTts0Vat+/fqpQYMGSk5O1s6dO/X222+rVq1aeu2110o9xoEDB7R//34NGzZMQUFBJdYZMmSIpk6dqhUrVmjAgAHq37+/5syZo5UrV+qhhx6y1cvJydFnn32mYcOG2ULcokWLNHToUMXHx+u1115TTk6O5s2bp7Zt22rXrl1251DSa16aFStWqFGjRoqNjb3u7/Ba3377rdq0aaM6depo/PjxqlKlij788EP17NlTH3/8sXr16mVX/8knn9Rtt92mqVOn6ocfftDMmTOVmJiopUuX2upUxPl99NFHysnJ0eOPP64aNWpo+/btmj17to4fP66PPvpIUtH71YkTJ5SWlqZFixaV6VzbtWunoKAgPffcc/L29tabb76pjh07auPGjcV+bzc61xu9FwJwIgMATGDBggWGpGJfvr6+xsKFC+3qfvnll4Yk4/3337crX7NmjV35J598Ykgyvvrqq1KPe/r0aUOSMXXq1DK1c/369SW2U5Jx5MgRwzCMYvv785//bLf9WpIMHx8f4+DBg7ay//73v4YkY/bs2bayESNGGLVr1zbOnDlj9/wBAwYY1apVM3JycgzDMIwHH3zQuPPOO697DtWqVTPGjBlTpvO9lvU1WrdunXH69Gnj2LFjxgcffGDUqFHD8Pf3N44fP24YhmEMHTrUkGSMHz/e7vnLly83JBl/+tOf7Mr79u1rWCwW2+9gx44dhiRj7NixdvWGDRtW7Hc7depUQ5IxcOBAu7o//PCD4enpabz88st25V9//bXh5eVlK9+1a5chyfjoo49KPe8ZM2YYkozTp0+XWufIkSOGJGPBggW2spYtWxq1atUyzp49ayv773//a3h4eBhDhgwpdg6PPPKI3T579epl1KhRo9RjGsbPv9MZM2Zct15QUJBxzz33GIZhGIWFhUadOnWMPn362NX58MMPDUnGF198YRiGYVy4cMEIDg42Ro4caVcvMzPTqFatml15aa95Sc6fP29IMnr27Fls2//+9z/j9OnTti9rvzYMw+jcubPRvHlzIzc311ZWWFho3Hfffcbtt99uK7P20y5duhiFhYW28nHjxhmenp7GuXPnKvT8rm2jVXJysmGxWIwff/zRVjZmzBijtMuuX/brnj17Gj4+PsahQ4dsZSdOnDCqVq1qtG/f/qbPtSzvhQCcg2mHAExlzpw5SktLU1pamhYvXqxOnTrp0Ucftfsf2o8++kjVqlVT165ddebMGdtXTEyMAgMDtX79ekmyLW6xYsUK5efnV2g7p0yZYmun9SssLKxc++rSpYuioqJsj1u0aKGgoCAdPnxYkmQYhj7++GP16NFDhmHYnXN8fLzOnz9vmzIYHBys48eP66uvvir1eMHBwdq2bZtOnDhR7vaGhIQoIiJCAwYMUGBgoD755BPVqVPHrt7jjz9u93jVqlXy9PTUU089ZVf+xz/+UYZh2Fa1tE65fOKJJ+zqPfnkk6W2afTo0XaPU1NTVVhYqH79+tn9vsLCwnT77bfb+ki1atUkSf/6179KneJn7UeffvqpCgsLS23DtU6ePKndu3dr2LBhql69uq28RYsW6tq1q1atWnXDc2jXrp3Onj2r7OzsUo9z4cIFSVLVqlWv256qVava9mOxWPTQQw9p1apVunjxoq3O0qVLVadOHdu0zbS0NJ07d04DBw60+x16enoqNjbW9ju81i9f85JY2xEYGFhsW8eOHRUSEmL7sk7V++mnn/T555+rX79+tlHnM2fO6OzZs4qPj9eBAweUkZFht69Ro0bZTe1r166dCgoK9OOPP1bo+fn7+9t+vnTpks6cOaP77rtPhmFo165dN/x9/FJBQYHWrl2rnj17qmHDhrby2rVra9CgQdq0aVOxPnGjc3XkeyGAm8O0QwCm0rp1a7sFNwYOHKi7775biYmJ+t3vficfHx8dOHBA58+fV61atUrcx6lTpyRJHTp0UJ8+fTR9+nTNmDFDHTt2VM+ePTVo0CD5+vr+qnY2b95cXbp0+VX7sKpXr16xsttuu812/9rp06d17tw5vfXWW3rrrbdK3If1nJ9//nmtW7dOrVu3VqNGjdStWzcNGjRIbdq0sdV9/fXXNXToUEVERCgmJkYJCQkaMmSI3YXe9cyZM0eNGzeWl5eXQkND1aRJk2LTLb28vFS3bl27sh9//FHh4eHFgsIdd9xh22797uHhoQYNGtjVa9SoUalt+mXdAwcOyDAM3X777SXWt65K2KBBAyUlJSklJUXvv/++2rVrp9///vf6wx/+YAtm/fv319tvv61HH31U48ePV+fOndW7d2/17du31AUhrOdS0gqDd9xxh/71r38VW7Dhl/3gtttukyT973//K3VKofV3aQ1hpblw4YLd30v//v01c+ZM/fOf/9SgQYN08eJFrVq1So899pjtIv7AgQOSfr6n75d+2aaSXvPrtfna4Gf15ptv6sKFC8rKyrKbanzw4EEZhqHJkydr8uTJJe731KlTdv8BcL3fp1Rx53f06FFNmTJF//znP4vdc3rtfYNldfr0aeXk5JTadwoLC3Xs2DHdeeedtvIbnasj3wsB3BzCFwBT8/DwUKdOnTRr1iwdOHBAd955pwoLC1WrVi29//77JT7Hej+VxWLRsmXLtHXrVn322Wf617/+pUceeURvvPGGtm7dWuL/vLvCLxdJsDL+794l62jLH/7wBw0dOrTEutb71O644w7t379fK1as0Jo1a/Txxx9r7ty5mjJlim1J/X79+qldu3b65JNPtHbtWv35z3/Wa6+9ptTUVHXv3v2G7f1lQC6Jr6+vU1equ3b0QSr6nVksFq1evbrE3++1r/0bb7yhYcOG6dNPP9XatWv11FNPKTk5WVu3blXdunXl7++vL774QuvXr9fKlSu1Zs0aLV26VPfff7/Wrl1b6ut3s27UD0piDa7X+0ysH3/8UdnZ2WrWrJmt7N5771VkZKQ+/PBDDRo0SJ999pkuX76s/v372+pY+92iRYtKHNX95SI4ZX3Nq1Wrptq1a+ubb74pts16L5N1QZpftuWZZ55RfHx8ifv9ZTgv69/Vrzm/goICde3aVT/99JOef/55NW3aVFWqVFFGRoaGDRtW5pHSX+tG51pZ3guBWwHhC4DpXb16VdLP/1MeFRWldevWqU2bNsUuukty77336t5779XLL7+sJUuWaPDgwfrggw/06KOP2k3VcZRfe4yQkBBVrVpVBQUFZRptq1Klivr376/+/fvrypUr6t27t15++WVNmDDBtqR17dq19cQTT+iJJ57QqVOndM899+jll18uU/gqr/r162vdunW6cOGC3ejXvn37bNut3wsLC3XkyBG7kauDBw+W+VhRUVEyDEMNGjRQ48aNb1i/efPmat68uSZNmqTNmzerTZs2mj9/vv70pz9JKvpPgM6dO6tz585KSUnRK6+8ookTJ2r9+vUlvibWc9m/f3+xbfv27VPNmjUrZJnyxo0bq3Hjxlq+fLlmzZpV4vTD//f//p8kFfuohn79+mnWrFnKzs7W0qVLFRkZqXvvvde23ToVtlatWhU2ymv1wAMP6O2339b27dvVunXrG9a3jsp6e3tXWFsq4vy+/vprff/993rvvfc0ZMgQW3laWlqxumV9HwgJCVFAQECpfcfDw6PYKpBldb33QgDOwT1fAEwtPz9fa9eulY+Pj+1/+fv166eCggK99NJLxepfvXpV586dk1Q05eaXowYtW7aUJOXl5UmSbcUy63McwXqRXd5jeHp6qk+fPvr4449LHC24dknps2fP2m3z8fFRs2bNZBiG8vPzVVBQUGwqVK1atRQeHm77nThKQkKCCgoK9Le//c2ufMaMGbJYLLbgZx3ZmDt3rl292bNnl/lYvXv3lqenp6ZPn16sDxiGYfs9ZWdn28K9VfPmzeXh4WH7ffz000/F9v/LfvRLtWvXVsuWLfXee+/Zve7ffPON1q5dq4SEhDKfy41MmTJF//vf/zR69Gi7JeIlaceOHXrttdd01113qU+fPnbb+vfvr7y8PL333ntas2aN+vXrZ7c9Pj5eQUFBeuWVV0q8T6ikZdvL6rnnnlNAQIAeeeQRZWVlFdv+y9esVq1a6tixo958802dPHmyQtpSEednHXG6tr2GYWjWrFnF6pb1fcDT01PdunXTp59+ajcCmJWVpSVLlqht27alTkMtTVneCwE4ByNfAExl9erVtpGQU6dOacmSJTpw4IDGjx9vu+Do0KGDHnvsMSUnJ2v37t3q1q2bvL29deDAAX300UeaNWuW+vbtq/fee09z585Vr169FBUVpQsXLujvf/+7goKCbBe//v7+atasmZYuXarGjRurevXquuuuu3TXXXdV2DnFxMRIkiZOnKgB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l/Hjjz8ahmEYr776qhEcHGx8+umnxp49e4wHH3zQaNCggXH58mXbPn77298ad999t7Ft2zZj06ZNxu23324MHDjQVacEk3n88ceNatWqGRs2bDBOnjxp+8rJybHVGT16tFGvXj3j888/N/7zn/8YcXFxRlxcnG371atXjbvuusvo1q2bsXv3bmPNmjVGSEiIMWHCBFecEkxk/PjxxsaNG40jR44Ye/bsMcaPH29YLBZj7dq1hmHQt+AY1652aBj0M9w8wpcbmD17tlGvXj3Dx8fHaN26tbF161ZXNwmVwPr16w1Jxb6GDh1qGEbRcvOTJ082QkNDDV9fX6Nz587G/v377fZx9uxZY+DAgUZgYKARFBRkDB8+3Lhw4YILzgZmVFL/kmQsWLDAVufy5cvGE088Ydx2221GQECA0atXL+PkyZN2+/nhhx+M7t27G/7+/kbNmjWNP/7xj0Z+fr6TzwZm88gjjxj169c3fHx8jJCQEKNz58624GUY9C04xi/DF/0MN8tiGIbhmjE3AAAAALh1cM8XAAAAADgB4QsAAAAAnIDwBQAAAABOQPgCAAAAACcgfAEAAACAExC+AAAAAMAJCF8AAAAA4ASELwAAAABwAsIXAAAmsHDhQgUHB7u6GQAAByJ8AQAqlczMTD399NNq1KiR/Pz8FBoaqjZt2mjevHnKyclxdfPKJDIyUjNnzrQr69+/v77//nvXNAgA4BRerm4AAABldfjwYbVp00bBwcF65ZVX1Lx5c/n6+urrr7/WW2+9pTp16uj3v/+9S9pmGIYKCgrk5VW+f1r9/f3l7+9fwa0CAJgJI18AgErjiSeekJeXl/7zn/+oX79+uuOOO9SwYUM9+OCDWrlypXr06CFJOnfunB599FGFhIQoKChI999/v/773//a9jNt2jS1bNlSixYtUmRkpKpVq6YBAwbowoULtjqFhYVKTk5WgwYN5O/vr+joaC1btsy2fcOGDbJYLFq9erViYmLk6+urTZs26dChQ3rwwQcVGhqqwMBA/eY3v9G6detsz+vYsaN+/PFHjRs3ThaLRRaLRVLJ0w7nzZunqKgo+fj4qEmTJlq0aJHddovForffflu9evVSQECAbr/9dv3zn/+ssN83AKBiEb4AAJXC2bNntXbtWo0ZM0ZVqlQpsY41yDz00EM6deqUVq9erR07duiee+5R586d9dNPP9nqHjp0SMuXL9eKFSu0YsUKbdy4Ua+++qpte3Jysv7f//t/mj9/vr799luNGzdOf/jDH7Rx40a7Y44fP16vvvqqvvvuO7Vo0UIXL15UQkKC0tPTtWvXLv32t79Vjx49dPToUUlSamqq6tatqxdffFEnT57UyZMnSzyXTz75RE8//bT++Mc/6ptvvtFjjz2m4cOHa/369Xb1pk+frn79+mnPnj1KSEjQ4MGD7c4TAGAiBgAAlcDWrVsNSUZqaqpdeY0aNYwqVaoYVapUMZ577jnjyy+/NIKCgozc3Fy7elFRUcabb75pGIZhTJ061QgICDCys7Nt25999lkjNjbWMAzDyM3NNQICAozNmzfb7WPEiBHGwIEDDcMwjPXr1xuSjOXLl9+w7Xfeeacxe/Zs2+P69esbM2bMsKuzYMECo1q1arbH9913nzFy5Ei7Og899JCRkJBgeyzJmDRpku3xxYsXDUnG6tWrb9gmAIDzcc8XAKBS2759uwoLCzV48GDl5eXpv//9ry5evKgaNWrY1bt8+bIOHTpkexwZGamqVavaHteuXVunTp2SJB08eFA5OTnq2rWr3T6uXLmiu+++266sVatWdo8vXryoadOmaeXKlTp58qSuXr2qy5cv20a+yuq7777TqFGj7MratGmjWbNm2ZW1aNHC9nOVKlUUFBRkOw8AgLkQvgAAlUKjRo1ksVi0f/9+u/KGDRtKkm2xiosXL6p27drasGFDsX1ce0+Vt7e33TaLxaLCwkLbPiRp5cqVqlOnjl09X19fu8e/nAL5zDPPKC0tTX/5y1/UqFEj+fv7q2/fvrpy5UoZz/TmXO88AADmQvgCAFQKNWrUUNeuXfW3v/1NTz75ZKn3fd1zzz3KzMyUl5eXIiMjy3WsZs2aydfXV0ePHlWHDh1u6rn//ve/NWzYMPXq1UtSUZD74Ycf7Or4+PiooKDguvu544479O9//1tDhw6123ezZs1uqj0AAPMgfAEAKo25c+eqTZs2atWqlaZNm6YWLVrIw8NDX331lfbt26eYmBh16dJFcXFx6tmzp15//XU1btxYJ06c0MqVK9WrV69i0wRLUrVqVT3zzDMaN26cCgsL1bZtW50/f17//ve/FRQUZBeIfun2229XamqqevToIYvFosmTJxcbiYqMjNQXX3yhAQMGyNfXVzVr1iy2n2effVb9+vXT3XffrS5duuizzz5Tamqq3cqJAIDKhfAFAKg0oqKitGvXLr3yyiuaMGGCjh8/Ll9fXzVr1kzPPPOMnnjiCVksFq1atUoTJ07U8OHDdfr0aYWFhal9+/YKDQ0t87FeeuklhYSEKDk5WYcPH1ZwcLDuuecevfDCC9d9XkpKih555BHdd999qlmzpp5//nllZ2fb1XnxxRf12GOPKSoqSnl5eTIMo9h+evbsqVmzZukvf/mLnn76aTVo0EALFixQx44dy3wOAABzsRglveMDAAAAACoUn/MFAAAAAE5A+AIAAAAAJyB8AQAAAIATEL4AAAAAwAkIXwAAAADgBIQvAAAAAHACwhcAAAAAOAHhCwAAAACcgPAFAAAAAE5A+AIAAAAAJyB8AQAAAIAT/H8n9JWKXvSYdwAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 1000x600 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Program la Evolución_of_morphological_trees_4.py\n",
    "# Morphological trees considered here are like lighting trees:\n",
    "# The electrical network has the structure of a tree and has a lamp at each node.\n",
    "# The lamp illuminates a region that represents\n",
    "# the region of influence of a center of production of messengers.\n",
    "# Each lamp has a given power and a circle of illumination,\n",
    "# whose radius is determined by a threshold intensity.\n",
    "# In morphology, this corresponds with a threshold concentration of a messenger.\n",
    "# la Evolución is given the task of illuminating\n",
    "# the area determined by a random tree.\n",
    "# By Gemini 2.5 Flash with a minor help from the Author.\n",
    "\n",
    "\n",
    "import random\n",
    "import matplotlib.pyplot as plt\n",
    "import matplotlib.patches as patches\n",
    "import numpy as np\n",
    "import copy  # For deep copying trees during reproduction and mutation\n",
    "import sys  # Import sys module to adjust recursion limit\n",
    "import math  # For math.floor, math.ceil, math.sqrt\n",
    "\n",
    "sys.setrecursionlimit(3000)  # Increase the recursion limit for potentially deep trees\n",
    "\n",
    "\n",
    "# --- SPATIAL TREE NODE FOR DIFFUSION ---\n",
    "\n",
    "class SpatialTreeNode_Evolution_Diffusion4:\n",
    "    def __init__(self, value, x, y, radius, occupied_squares_set, diffusion_nodes_info):\n",
    "        self.value = value\n",
    "        self.x = x\n",
    "        self.y = y\n",
    "        self.children = []\n",
    "\n",
    "        self.radius = radius\n",
    "        self.occupied_squares_set = occupied_squares_set  # Reference to the set of squares occupied by *this* tree's nodes\n",
    "        self.diffusion_nodes_info = diffusion_nodes_info  # Reference to the list of (x,y,radius) for *all* nodes in *this* tree\n",
    "\n",
    "        self.occupied_squares_set.add((x, y))  # Add current node's (x,y) square to the set\n",
    "        self.diffusion_nodes_info.append((x, y, radius))  # Add current node's (x,y,radius) to the list\n",
    "\n",
    "    def add_child(self, child_node):\n",
    "        if not isinstance(child_node, SpatialTreeNode_Evolution_Diffusion4):\n",
    "            raise TypeError(\"Child must be an instance of SpatialTreeNode_Evolution_Diffusion3\")\n",
    "        self.children.append(child_node)\n",
    "\n",
    "    def get_neighboring_coordinates(self):\n",
    "        neighbors = []\n",
    "        for dx in [-1, 0, 1]:\n",
    "            for dy in [-1, 0, 1]:\n",
    "                if dx == 0 and dy == 0:\n",
    "                    continue  # Exclude the current square itself\n",
    "                neighbors.append((self.x + dx, self.y + dy))\n",
    "        return neighbors\n",
    "\n",
    "    def _is_diffusion_overlapping_local(self, potential_nx, potential_ny, potential_radius, overlap_factor):\n",
    "        \"\"\"\n",
    "        Checks if a potential new node's diffusion circle overlaps \"too much\" with EXISTING nodes IN THE SAME TREE.\n",
    "        \"Too much overlap\" is defined by the overlap_factor.\n",
    "        \"\"\"\n",
    "        potential_center_x, potential_center_y = potential_nx + 0.5, potential_ny + 0.5\n",
    "\n",
    "        for ex, ey, er in self.diffusion_nodes_info:\n",
    "            # Skip checking against self if self is already in diffusion_nodes_info\n",
    "            if (ex, ey) == (self.x, self.y):\n",
    "                continue\n",
    "\n",
    "            existing_center_x, existing_center_y = ex + 0.5, ey + 0.5\n",
    "\n",
    "            # Calculate distance between centers\n",
    "            distance = np.sqrt((potential_center_x - existing_center_x) ** 2 + (potential_ny - existing_center_y) ** 2)\n",
    "\n",
    "            # Check for significant overlap\n",
    "            # If distance is less than a fraction of the sum of radii, it's too much overlap.\n",
    "            if distance < overlap_factor * (potential_radius + er):\n",
    "                return True  # Significant overlap detected\n",
    "        return False\n",
    "\n",
    "    def add_child_in_random_neighbor(self, child_value_prefix, max_node_radius, overlap_factor):\n",
    "        coordinates_neighbors = self.get_neighboring_coordinates()\n",
    "\n",
    "        # First, filter for unoccupied grid squares *within this tree*\n",
    "        available_square_neighbors = [coord for coord in coordinates_neighbors if\n",
    "                                      coord not in self.occupied_squares_set]\n",
    "\n",
    "        valid_child_candidates = []  # Store (nx, ny, child_radius) for candidates that pass overlap check\n",
    "\n",
    "        for nx, ny in available_square_neighbors:\n",
    "            # Generate potential radius for this child, ensuring it's not too large or small\n",
    "            child_radius = random.uniform(0.5, max_node_radius)\n",
    "            if not self._is_diffusion_overlapping_local(nx, ny, child_radius, overlap_factor):\n",
    "                valid_child_candidates.append((nx, ny, child_radius))\n",
    "\n",
    "        if not valid_child_candidates:\n",
    "            return None  # No available neighbors that satisfy both square and diffusion overlap conditions\n",
    "\n",
    "        # Choose a random valid candidate\n",
    "        chosen_nx, chosen_ny, chosen_child_radius = random.choice(valid_child_candidates)\n",
    "\n",
    "        child_value = f\"{child_value_prefix}_{len(self.children) + 1}\"\n",
    "        # Create child node; its __init__ will update occupied_squares_set and diffusion_nodes_info\n",
    "        child_node = SpatialTreeNode_Evolution_Diffusion4(child_value, chosen_nx, chosen_ny, chosen_child_radius,\n",
    "                                                          self.occupied_squares_set, self.diffusion_nodes_info)\n",
    "        self.add_child(child_node)\n",
    "        return child_node\n",
    "\n",
    "    def get_all_nodes(self):\n",
    "        all_nodes = []\n",
    "        stack = [self]\n",
    "        while stack:\n",
    "            node = stack.pop()\n",
    "            all_nodes.append(node)\n",
    "            for child in node.children:\n",
    "                stack.append(child)\n",
    "        return all_nodes\n",
    "\n",
    "    def __repr__(self):\n",
    "        return f\"SpatialTreeNode_Evolution_Diffusion(value={self.value}, x={self.x}, y={self.y}, R={self.radius:.2f}, children={[child.value for child in self.children]!r})\"\n",
    "\n",
    "\n",
    "# --- TREE GENERATION ---\n",
    "\n",
    "def generate_random_spatial_tree_diffusion4(\n",
    "        max_depth, max_children, max_node_radius, initial_x, initial_y, node_prefix=\"Node\",\n",
    "        current_depth=0, parent_node=None, occupied_squares_set=None, diffusion_nodes_info=None, overlap_factor=0.7\n",
    "):\n",
    "    if occupied_squares_set is None:\n",
    "        occupied_squares_set = set()  # Initialize a new set for this tree's square coordinates\n",
    "    if diffusion_nodes_info is None:\n",
    "        diffusion_nodes_info = []  # Initialize a new list for this tree's node (x,y,radius) information\n",
    "\n",
    "    if parent_node is None:\n",
    "        # Root node at (initial_x, initial_y) with a random initial radius\n",
    "        node_value = f\"{node_prefix}_Root_{random.randint(0, 99)}\"\n",
    "        initial_radius = random.uniform(0.5, max_node_radius)\n",
    "        current_node = SpatialTreeNode_Evolution_Diffusion4(node_value, initial_x, initial_y, initial_radius,\n",
    "                                                            occupied_squares_set, diffusion_nodes_info)\n",
    "    else:\n",
    "        # Children are added by the parent's method, which handles their coordinates and radius\n",
    "        current_node = parent_node.add_child_in_random_neighbor(f\"{node_prefix}_{current_depth}\", max_node_radius,\n",
    "                                                                overlap_factor)\n",
    "        if current_node is None:\n",
    "            return None  # Branch terminated if no available neighbor\n",
    "\n",
    "    if current_depth < max_depth:\n",
    "        num_children = random.randint(0, max_children)  # Random number of children for this node\n",
    "        for _ in range(num_children):\n",
    "            generate_random_spatial_tree_diffusion4(\n",
    "                max_depth, max_children, max_node_radius, initial_x, initial_y, node_prefix,\n",
    "                current_depth + 1, current_node, occupied_squares_set, diffusion_nodes_info, overlap_factor\n",
    "            )\n",
    "    return current_node\n",
    "\n",
    "\n",
    "# --- ILLUMINATION AND FITNESS FUNCTIONS ---\n",
    "\n",
    "def get_illuminated_area4(tree):\n",
    "    \"\"\"\n",
    "    Calculates the set of (x,y) integer coordinates illuminated by the tree using the\n",
    "    algebraic approach described in the text, based on intersections with horizontal\n",
    "    and vertical grid lines.\n",
    "    \"\"\"\n",
    "    # Print the nodes of  tree\n",
    "    all_nodes_i = tree.get_all_nodes()\n",
    "    '''\n",
    "    print(\"get_illuminated_area4 159: Info of all nodes of tree:\")\n",
    "    for node_i in all_nodes_i:\n",
    "        print(f\"x: {node_i.x}, y: {node_i.y}, value: {node_i.value.split('_')[-1]}, r: {node_i.radius}\")\n",
    "    '''\n",
    "    if tree is None:\n",
    "        return set()\n",
    "\n",
    "    # diffusion_nodes_info contains (node_x, node_y, node_radius) for all nodes in the tree\n",
    "    all_nodes_info_i = tree.diffusion_nodes_info\n",
    "    # print(f\" get_illuminated_area4 169: Tree has {len(all_nodes_info_i)} nodes.\"  )\n",
    "\n",
    "    if not all_nodes_info_i:\n",
    "        return set()\n",
    "\n",
    "    illuminated_coords = set()\n",
    "\n",
    "    for node_i in all_nodes_i:\n",
    "        # Next line (seen as a comment) maybe inconsistent due to mutation and recombination. Basic information in nodes is preferred.\n",
    "        # for node_x, node_y, node_radius in all_nodes_info_i:\n",
    "        # print(f\" get_illuminated_area4 178 all_nodes_info_i: Processing node at ({node_i.x}, {node_i.y}) with radius {node_i.radius}\")\n",
    "        # The center of the circle is the center of the cell it occupies\n",
    "        circle_center_x = node_i.x + 0.5\n",
    "        circle_center_y = node_i.y + 0.5\n",
    "        r_sq = node_i.radius ** 2\n",
    "\n",
    "        # 1. Add the cell containing the center of the circle\n",
    "        # This covers the case of small circles not intersecting grid lines.\n",
    "        illuminated_coords.add((math.floor(circle_center_x), math.floor(circle_center_y)))\n",
    "\n",
    "        # 2. Horizontal Scan: Check intersections with horizontal grid lines\n",
    "        # Iterate y_line from floor(cy - r) to ciel(cy + r)\n",
    "        # These y_line values represent the y-coordinates of horizontal grid lines.\n",
    "        for y_line in range(math.floor(circle_center_y - node_i.radius),\n",
    "                            math.ceil(circle_center_y + node_i.radius) + 1):\n",
    "            dy = y_line - circle_center_y\n",
    "            discriminant = r_sq - dy * dy\n",
    "\n",
    "            if discriminant >= 0:\n",
    "                dx = math.sqrt(discriminant)\n",
    "                x_min_intersect = circle_center_x - dx\n",
    "                x_max_intersect = circle_center_x + dx\n",
    "\n",
    "                # For each integer x-coordinate that the horizontal segment crosses:\n",
    "                # Add the cells whose bottom-left corner's x-coordinate is in this range.\n",
    "                # This covers cells whose top edge is y_line AND cells whose bottom edge is y_line.\n",
    "                for ix in range(math.floor(x_min_intersect), math.floor(x_max_intersect) + 1):\n",
    "                    # Cell (ix, y_line) - its bottom edge is at y_line\n",
    "                    illuminated_coords.add((ix, y_line))\n",
    "                    # Cell (ix, y_line - 1) - its top edge is at y_line\n",
    "                    illuminated_coords.add((ix, y_line - 1))\n",
    "\n",
    "        # 3. Vertical Scan: Check intersections with vertical grid lines\n",
    "        # Iterate x_line from floor(cx - r) to ciel(cx + r)\n",
    "        # These x_line values represent the x-coordinates of vertical grid lines.\n",
    "        for x_line in range(math.floor(circle_center_x - node_i.radius),\n",
    "                            math.ceil(circle_center_x + node_i.radius) + 1):\n",
    "            dx = x_line - circle_center_x\n",
    "            discriminant = r_sq - dx * dx\n",
    "\n",
    "            if discriminant >= 0:\n",
    "                dy = math.sqrt(discriminant)\n",
    "                y_min_intersect = circle_center_y - dy\n",
    "                y_max_intersect = circle_center_y + dy\n",
    "\n",
    "                # For each integer y-coordinate that the vertical segment crosses:\n",
    "                # Add the cells whose bottom-left corner's y-coordinate is in this range.\n",
    "                # This covers cells whose right edge is x_line AND cells whose left edge is x_line.\n",
    "                for iy in range(math.floor(y_min_intersect), math.floor(y_max_intersect) + 1):\n",
    "                    # Cell (x_line, iy) - its left edge is at x_line\n",
    "                    illuminated_coords.add((x_line, iy))\n",
    "                    # Cell (x_line - 1, iy) - its right edge is at x_line\n",
    "                    illuminated_coords.add((x_line - 1, iy))\n",
    "\n",
    "    return illuminated_coords\n",
    "\n",
    "\n",
    "def calculate_fitness_illumination4(candidate_tree_root, target_illuminated_area):\n",
    "    \"\"\"\n",
    "    Calculates fitness based on the symmetric difference between illuminated areas.\n",
    "    Fitness is 1.0 for a perfect match, and decreases as symmetric difference increases.\n",
    "    \"\"\"\n",
    "    if candidate_tree_root is None:\n",
    "        # If the tree generation failed, assign a very low fitness\n",
    "        return 0.0001  # A small non-zero value to avoid division by zero issues later\n",
    "\n",
    "    candidate_illuminated_area = get_illuminated_area4(candidate_tree_root)\n",
    "\n",
    "    # Symmetric difference: (A U B) - (A intersect B)\n",
    "    # Or, the elements in A, but not B, plus elements in B but not A.\n",
    "    symmetric_difference = candidate_illuminated_area.symmetric_difference(target_illuminated_area)\n",
    "\n",
    "    # Union size: used for normalization\n",
    "    union_size = len(candidate_illuminated_area.union(target_illuminated_area))\n",
    "\n",
    "    if union_size == 0:\n",
    "        if not target_illuminated_area and not candidate_illuminated_area:\n",
    "            return 1.0  # Perfect match if both are empty\n",
    "        else:\n",
    "            return 0.0001  # Should not happen if target is non-empty, but handles cases where both are empty but expected non-empty\n",
    "\n",
    "    # Fitness is 1.0 - (len(symmetric_difference) / union_size)\n",
    "    # This gives 1.0 for a perfect match (symmetric_difference_area = 0)\n",
    "    # and approaches 0.0 for large differences.\n",
    "    fitness = 1.0 - (len(symmetric_difference) / union_size)\n",
    "    return max(0.0001, fitness)  # Ensure fitness is always positive\n",
    "\n",
    "\n",
    "# --- la EvoluciónARY ALGORITHM COMPONENTS ---\n",
    "\n",
    "def create_initial_population_diffusion4(pop_size, max_depth, max_children, max_node_radius, initial_x, initial_y,\n",
    "                                         overlap_factor, node_prefix=\"Individual\"):\n",
    "    population = []\n",
    "    for i in range(pop_size):\n",
    "        # Each tree needs its own occupied_squares_set and diffusion_nodes_info for independent generation\n",
    "        occupied_squares = set()\n",
    "        diffusion_info = []\n",
    "        tree = generate_random_spatial_tree_diffusion4(\n",
    "            max_depth=max_depth, max_children=max_children, max_node_radius=max_node_radius,\n",
    "            initial_x=initial_x, initial_y=initial_y, node_prefix=f\"{node_prefix}_{i}\",\n",
    "            occupied_squares_set=occupied_squares, diffusion_nodes_info=diffusion_info, overlap_factor=overlap_factor\n",
    "        )\n",
    "        if tree:\n",
    "            population.append(tree)\n",
    "    # If not enough trees generated due to space constraints, fill with more random ones (or handle error)\n",
    "    while len(population) < pop_size:\n",
    "        occupied_squares = set()\n",
    "        diffusion_info = []\n",
    "        new_tree = generate_random_spatial_tree_diffusion4(\n",
    "            max_depth=max_depth, max_children=max_children, max_node_radius=max_node_radius,\n",
    "            initial_x=initial_x, initial_y=initial_y, node_prefix=f\"RandomFill_{len(population)}\",\n",
    "            occupied_squares_set=occupied_squares, diffusion_nodes_info=diffusion_info,\n",
    "            overlap_factor=overlap_factor\n",
    "        )\n",
    "        if new_tree:\n",
    "            population.append(new_tree)\n",
    "        else:\n",
    "            # Handle case where a new tree could not be generated\n",
    "            # This might happen if parameters are too restrictive or space is exhausted\n",
    "            break  # Exit if we can't generate enough valid trees\n",
    "    return population\n",
    "\n",
    "\n",
    "def select_parents_diffusion4(population, fitness_scores, num_parents):\n",
    "    parents = []\n",
    "    # Use roulette wheel selection or tournament selection. Tournament is generally robust.\n",
    "    for _ in range(num_parents):\n",
    "        tournament_size = min(5, len(population))\n",
    "        if tournament_size == 0:\n",
    "            break\n",
    "        tournament_candidates = random.sample(list(zip(population, fitness_scores)), tournament_size)\n",
    "        winner = max(tournament_candidates, key=lambda x: x[1])[0]\n",
    "        parents.append(winner)\n",
    "    return parents\n",
    "\n",
    "def update_nodes_info(tree, node_to_update):\n",
    "    temp_occupied_set = set()\n",
    "    temp_diffusion_info = []\n",
    "    # Re-populate temp_occupied_set and temp_diffusion_info by traversing the deep copied tree\n",
    "    stack = [tree]\n",
    "    while stack:\n",
    "        node = stack.pop()\n",
    "        temp_occupied_set.add((node.x, node.y))\n",
    "        temp_diffusion_info.append((node.x, node.y, node.radius))\n",
    "        for child in node.children:\n",
    "            stack.append(child)\n",
    "\n",
    "    # Now, try to add a child to the chosen node\n",
    "    node_to_update.occupied_squares_set = temp_occupied_set  # Update reference for chosen node\n",
    "    node_to_update.diffusion_nodes_info = temp_diffusion_info  # Update reference for chosen node\n",
    "    return node_to_update\n",
    "\n",
    "\n",
    "def mutate_tree_diffusion4(tree_root, max_depth, max_children, max_node_radius, mutation_rate, overlap_factor):\n",
    "    mutated_tree = copy.deepcopy(tree_root)  # Work on a deep copy\n",
    "    all_nodes = mutated_tree.get_all_nodes()\n",
    "\n",
    "    if not all_nodes:\n",
    "        return mutated_tree\n",
    "\n",
    "    node_to_mutate = random.choice(all_nodes)\n",
    "\n",
    "    # Mutation 1: Add a child\n",
    "    if random.random() < mutation_rate:\n",
    "        # Need to regenerate the local_occupied_set and diffusion_nodes_info for the deepcopy\n",
    "        # This is a bit inefficient but ensures correctness after deepcopy/mutation operations\n",
    "        node_to_mutate = update_nodes_info(mutated_tree, node_to_mutate)\n",
    "\n",
    "        node_to_mutate.add_child_in_random_neighbor(\"MutatedChild\", max_node_radius, overlap_factor)\n",
    "\n",
    "    # Mutation 2: Change node radius\n",
    "    if random.random() < mutation_rate:\n",
    "        node_to_mutate.radius = random.uniform(0.5, max_node_radius)\n",
    "\n",
    "    # Mutation 3: Remove a child (if any)\n",
    "    if random.random() < mutation_rate and node_to_mutate.children:\n",
    "        child_to_remove = random.choice(node_to_mutate.children)\n",
    "        node_to_mutate.children.remove(child_to_remove)\n",
    "        # Note: Removing a child means its coordinates and diffusion info are no longer strictly part of the tree\n",
    "        # The fitness function will re-evaluate the actual illuminated area, handling this implicitly.\n",
    "\n",
    "    return mutated_tree\n",
    "\n",
    "\n",
    "def crossover_trees_diffusion4(parent1_root, parent2_root, crossover_rate, max_node_radius, overlap_factor):\n",
    "    if random.random() > crossover_rate:\n",
    "        return copy.deepcopy(parent1_root), copy.deepcopy(parent2_root)\n",
    "\n",
    "    child1_root = copy.deepcopy(parent1_root)\n",
    "    child2_root = copy.deepcopy(parent2_root)\n",
    "\n",
    "    all_nodes_child1 = child1_root.get_all_nodes()\n",
    "    all_nodes_child2 = child2_root.get_all_nodes()\n",
    "\n",
    "    # Ensure there are nodes to swap beyond just the root\n",
    "    if len(all_nodes_child1) < 2 or len(all_nodes_child2) < 2:\n",
    "        return child1_root, child2_root\n",
    "\n",
    "    # Choose random nodes (not roots) to be crossover points\n",
    "    cross_point1 = random.choice([n for n in all_nodes_child1 if n != child1_root])\n",
    "    cross_point2 = random.choice([n for n in all_nodes_child2 if n != child2_root])\n",
    "\n",
    "    # Find parent of cross_point1 in child1_root tree\n",
    "    parent_cross_point1 = None\n",
    "    for node in all_nodes_child1:\n",
    "        if cross_point1 in node.children:\n",
    "            parent_cross_point1 = node\n",
    "            break\n",
    "\n",
    "    # Find parent of cross_point2 in child2_root tree\n",
    "    parent_cross_point2 = None\n",
    "    for node in all_nodes_child2:\n",
    "        if cross_point2 in node.children:\n",
    "            parent_cross_point2 = node\n",
    "            break\n",
    "\n",
    "    if parent_cross_point1 and parent_cross_point2:  # Perform swap\n",
    "        # Remove subtrees from parents\n",
    "        parent_cross_point1.children.remove(cross_point1)\n",
    "        parent_cross_point2.children.remove(cross_point2)\n",
    "\n",
    "        # Attach swapped subtrees\n",
    "        parent_cross_point1.add_child(cross_point2)\n",
    "        parent_cross_point2.add_child(cross_point1)\n",
    "\n",
    "        # After crossover, the `occupied_squares_set` and `diffusion_nodes_info` of the affected trees\n",
    "        # (child1_root, child2_root, and their subtrees) might be inconsistent.\n",
    "        # These will be implicitly re-calculated by `get_illuminated_area` for fitness evaluation.\n",
    "        # For mutation, we explicitly rebuild them (as seen in mutate_tree_diffusion).\n",
    "\n",
    "    return child1_root, child2_root\n",
    "\n",
    "\n",
    "# --- PLOTTING FUNCTIONS ---\n",
    "\n",
    "def plot_illuminated_area4(ax, illuminated_coords, title, color='blue', alpha=0.5):\n",
    "    ax.set_aspect('equal', adjustable='box')\n",
    "    if not illuminated_coords:\n",
    "        ax.set_title(title)\n",
    "        ax.grid(True)\n",
    "        return\n",
    "\n",
    "    for x, y in illuminated_coords:\n",
    "        rect = patches.Rectangle((x, y), 1, 1, facecolor=color, alpha=alpha, edgecolor='black', linewidth=0.5)\n",
    "        ax.add_patch(rect)\n",
    "\n",
    "    min_x = min(c[0] for c in illuminated_coords) - 1\n",
    "    max_x = max(c[0] for c in illuminated_coords) + 2\n",
    "    min_y = min(c[1] for c in illuminated_coords) - 1\n",
    "    max_y = max(c[1] for c in illuminated_coords) + 2\n",
    "\n",
    "    ax.set_xlim(min_x, max_x)\n",
    "    ax.set_ylim(min_y, max_y)\n",
    "    ax.set_xticks(range(int(min_x), int(max_x)))\n",
    "    ax.set_yticks(range(int(min_y), int(max_y)))\n",
    "    ax.grid(True)\n",
    "    ax.set_title(title)\n",
    "\n",
    "\n",
    "def plot_tree_with_illumination4(tree_root, illuminated_coords, ax, tree_color='lightblue', diff_color='red', title=\"\"):\n",
    "    # Print the nodes of tree_root\n",
    "    all_nodes_t = tree_root.get_all_nodes()\n",
    "\n",
    "    '''\n",
    "    print(\"plot_tree_with_illumination4 430: Info of all nodes of tree_root:\")\n",
    "    for node_t in all_nodes_t:\n",
    "        print(f\"x: {node_t.x}, y: {node_t.y}, value: {node_t.value.split('_')[-1]}, r: {node_t.radius}\")\n",
    "    '''\n",
    "\n",
    "    # Plot illuminated area first (background)\n",
    "    for x, y in illuminated_coords:\n",
    "        rect = patches.Rectangle((x, y), 1, 1, facecolor=diff_color, alpha=0.5,\n",
    "                                 zorder=0)  # Changed alpha for more transparency\n",
    "        ax.add_patch(rect)\n",
    "\n",
    "    if tree_root is None:\n",
    "        return\n",
    "\n",
    "    # Plot tree nodes and their diffusion circles\n",
    "    all_nodes = tree_root.get_all_nodes()\n",
    "    for node in all_nodes:\n",
    "        # Plot the square representing the cell\n",
    "        rect = patches.Rectangle((node.x, node.y), 1, 1, facecolor=tree_color, edgecolor='black', linewidth=1, zorder=1)\n",
    "        ax.add_patch(rect)\n",
    "        ax.text(node.x + 0.5, node.y + 0.5, node.value.split('_')[-1], ha='center', va='center', color='darkblue',\n",
    "                fontsize=7, zorder=2)\n",
    "\n",
    "        # Plot the circle representing the radius of influence\n",
    "        circle = patches.Circle((node.x + 0.5, node.y + 0.5), node.radius, color='red', alpha=0.2, zorder=2)\n",
    "        ax.add_patch(circle)\n",
    "\n",
    "    # Draw lines connecting parent to children\n",
    "    for node in all_nodes:\n",
    "        for child in node.children:\n",
    "            ax.plot([node.x + 0.5, child.x + 0.5], [node.y + 0.5, child.y + 0.5], 'k--', linewidth=0.8, zorder=3)\n",
    "\n",
    "    ax.set_aspect('equal', adjustable='box')\n",
    "    ax.set_title(title)\n",
    "\n",
    "    # Set plot limits based on the illuminated coordinates\n",
    "    if illuminated_coords:\n",
    "        all_x = [c[0] for c in illuminated_coords]\n",
    "        all_y = [c[1] for c in illuminated_coords]\n",
    "\n",
    "        min_x_val = min(all_x) - 1\n",
    "        max_x_val = max(all_x) + 2\n",
    "        min_y_val = min(all_y) - 1\n",
    "        max_y_val = max(all_y) + 2\n",
    "\n",
    "        ax.set_xlim(min_x_val, max_x_val)\n",
    "        ax.set_ylim(min_y_val, max_y_val)\n",
    "        ax.set_xticks(range(int(min_x_val), int(max_x_val)))\n",
    "        ax.set_yticks(range(int(min_y_val), int(max_y_val)))\n",
    "    ax.grid(True)\n",
    "\n",
    "\n",
    "# --- MAIN la EvoluciónARY SIMULATION LOOP ---\n",
    "\n",
    "def run_evolutionary_lighting_lab4(target_tree_params, ga_params):\n",
    "    # 1. Generate Target Tree and its Illuminated Area\n",
    "    print(\"\\n--- Generating Target Tree ---\")\n",
    "    random.seed(ga_params['seed'] + 1)  # Use a different seed for target generation\n",
    "    target_occupied_squares = set()\n",
    "    target_diffusion_info = []\n",
    "    target_tree_root = generate_random_spatial_tree_diffusion4(\n",
    "        max_depth=target_tree_params['max_depth'], max_children=target_tree_params['max_children'],\n",
    "        max_node_radius=target_tree_params['max_node_radius'], initial_x=0, initial_y=0,\n",
    "        node_prefix=\"Target\", occupied_squares_set=target_occupied_squares,\n",
    "        diffusion_nodes_info=target_diffusion_info, overlap_factor=target_tree_params['overlap_factor']\n",
    "    )\n",
    "\n",
    "    if not target_tree_root:\n",
    "        print(\"Failed to generate target tree. Exiting.\")\n",
    "        return None, None, None, None, []\n",
    "\n",
    "    target_illuminated_area = get_illuminated_area4(target_tree_root)\n",
    "    print(\n",
    "        f\"Target Tree Generated with {len(target_tree_root.get_all_nodes())} nodes. Illuminated area size: {len(target_illuminated_area)}\")\n",
    "\n",
    "    # 2. Initialize Population\n",
    "    random.seed(ga_params['seed'])  # Reset seed for GA population generation\n",
    "    print(f\"\\n--- Initializing Population of {ga_params['pop_size']} Trees ---\")\n",
    "    population = create_initial_population_diffusion4(\n",
    "        pop_size=ga_params['pop_size'], max_depth=ga_params['max_depth'], max_children=ga_params['max_children'],\n",
    "        max_node_radius=ga_params['max_node_radius'], initial_x=0, initial_y=0,\n",
    "        overlap_factor=ga_params['overlap_factor']\n",
    "    )\n",
    "    print(f\"Population initialized with {len(population)} individuals.\")\n",
    "\n",
    "    best_tree_overall = None\n",
    "    best_fitness_overall = -1.0\n",
    "    history = []\n",
    "\n",
    "    # 4. la Evoluciónary Loop\n",
    "    print(f\"\\n--- Starting la Evoluciónary Loop for {ga_params['generations']} Generations ---\")\n",
    "    for generation in range(ga_params['generations']):\n",
    "        fitness_scores = [calculate_fitness_illumination4(tree, target_illuminated_area) for tree in population]\n",
    "\n",
    "        current_best_fitness = max(fitness_scores)\n",
    "        current_best_tree = population[np.argmax(fitness_scores)]\n",
    "\n",
    "        if current_best_fitness > best_fitness_overall:\n",
    "            best_fitness_overall = current_best_fitness\n",
    "            best_tree_overall = copy.deepcopy(current_best_tree)  # Deepcopy to save the best tree\n",
    "\n",
    "        # Print the nodes of current_best_tree\n",
    "        all_nodes_current_best_tree = current_best_tree.get_all_nodes()\n",
    "\n",
    "        '''\n",
    "        print(\"run_evolutionary_lighting_lab4 A: Info of all nodes of current_best_tree:\")\n",
    "        for node_c in all_nodes_current_best_tree:\n",
    "            print(f\"x: {node_c.x}, y: {node_c.y}, value: {node_c.value.split('_')[-1]}, r: {node_c.radius}\")\n",
    "        '''\n",
    "\n",
    "        # Print the nodes of evolved_best_tree\n",
    "        all_nodes_best_tree = best_tree_overall.get_all_nodes()\n",
    "        '''\n",
    "        print(\"run_evolutionary_lighting_lab4 A: Info of all nodes of evolved_best_tree:\")\n",
    "        for node_b in all_nodes_best_tree:\n",
    "            print(f\"x: {node_b.x}, y: {node_b.y}, value: {node_b.value.split('_')[-1]}, r: {node_b.radius}\")\n",
    "        '''\n",
    "\n",
    "        history.append(current_best_fitness)\n",
    "\n",
    "        print(\n",
    "            f\"Generation {generation + 1}/{ga_params['generations']}: Best Fitness = {current_best_fitness:.4f} (Overall Best: {best_fitness_overall:.4f})\")\n",
    "\n",
    "        if best_fitness_overall >= 0.999:  # Almost perfect match\n",
    "            print(\"Target illumination achieved (or very close)! Stopping la Evolución.\")\n",
    "            break\n",
    "\n",
    "        # Selection\n",
    "        parents = select_parents_diffusion4(population, fitness_scores, ga_params['pop_size'] // 2)\n",
    "\n",
    "        # Create next generation\n",
    "        next_population = []\n",
    "        # Elitism: Keep the best individual from the current generation\n",
    "        if best_tree_overall and current_best_fitness == best_fitness_overall:  # Only if it's the current best in this generation\n",
    "            next_population.append(copy.deepcopy(current_best_tree))\n",
    "\n",
    "        while len(next_population) < ga_params['pop_size']:\n",
    "            if len(parents) < 2:  # Not enough parents for crossover, fill with new random trees\n",
    "                occupied_squares = set()\n",
    "                diffusion_info = []\n",
    "                new_tree = generate_random_spatial_tree_diffusion4(\n",
    "                    max_depth=ga_params['max_depth'], max_children=ga_params['max_children'],\n",
    "                    max_node_radius=ga_params['max_node_radius'], initial_x=0, initial_y=0,\n",
    "                    node_prefix=f\"RandomFill_{len(next_population)}\",\n",
    "                    occupied_squares_set=occupied_squares, diffusion_nodes_info=diffusion_info,\n",
    "                    overlap_factor=ga_params['overlap_factor']\n",
    "                )\n",
    "                if new_tree:\n",
    "                    next_population.append(new_tree)\n",
    "                continue\n",
    "\n",
    "            # Randomly pick two parents (can be the same parent multiple times with replacement for simplicity)\n",
    "            p1 = random.choice(parents)\n",
    "            p2 = random.choice(parents)\n",
    "\n",
    "            # Crossover\n",
    "            child1, child2 = crossover_trees_diffusion4(p1, p2, ga_params['crossover_rate'],\n",
    "                                                        ga_params['max_node_radius'], ga_params['overlap_factor'])\n",
    "\n",
    "            # Mutation\n",
    "            mutated_child1 = mutate_tree_diffusion4(child1, ga_params['max_depth'], ga_params['max_children'],\n",
    "                                                    ga_params['max_node_radius'], ga_params['mutation_rate'],\n",
    "                                                    ga_params['overlap_factor'])\n",
    "            mutated_child2 = mutate_tree_diffusion4(child2, ga_params['max_depth'], ga_params['max_children'],\n",
    "                                                    ga_params['max_node_radius'], ga_params['mutation_rate'],\n",
    "                                                    ga_params['overlap_factor'])\n",
    "\n",
    "            next_population.append(mutated_child1)\n",
    "            if len(next_population) < ga_params['pop_size']:\n",
    "                next_population.append(mutated_child2)\n",
    "\n",
    "        population = next_population[:ga_params['pop_size']]\n",
    "\n",
    "    print(\"\\n--- la Evolución Finished ---\")\n",
    "    print(f\"Final Best Fitness: {best_fitness_overall:.4f}\")\n",
    "    # Print the nodes of evolved_best_tree\n",
    "    all_nodes_b2 = best_tree_overall.get_all_nodes()\n",
    "    '''\n",
    "    print(\"run_evolutionary_lighting_lab4 B: Info of all nodes of evolved_best_tree:\")\n",
    "    for node_b2 in all_nodes_b2:\n",
    "      print(f\"x: {node_b2.x}, y: {node_b2.y}, value: {node_b2.value.split('_')[-1]}, r: {node_b2.radius}\")\n",
    "    '''\n",
    "\n",
    "    return target_tree_root, target_illuminated_area, best_tree_overall, best_fitness_overall, history\n",
    "\n",
    "\n",
    "# --- MAIN EXECUTION ---\n",
    "\n",
    "if __name__ == \"__main__\":\n",
    "    # Parameters for the target tree generation\n",
    "    TARGET_TREE_PARAMS = {\n",
    "        'max_depth': 3,\n",
    "        'max_children': 2,\n",
    "        'max_node_radius': 3.0,\n",
    "        'overlap_factor': 0.7\n",
    "    }\n",
    "\n",
    "    # Parameters for the Genetic Algorithm\n",
    "    GA_PARAMS = {\n",
    "        'seed': 676182,\n",
    "        'pop_size': 200,\n",
    "        'generations': 500,\n",
    "        'max_depth': 3,\n",
    "        'max_children': 3,\n",
    "        'max_node_radius': 3.0,\n",
    "        'mutation_rate': 0.1,\n",
    "        'crossover_rate': 0.7,\n",
    "        'overlap_factor': 0.7,\n",
    "        'illumination_resolution': 1  # This parameter is no longer used by get_illuminated_area4\n",
    "    }\n",
    "\n",
    "    '''\n",
    "    # Parameters for the target tree generation\n",
    "    TARGET_TREE_PARAMS = {\n",
    "        'max_depth': 20,\n",
    "        'max_children': 3,\n",
    "        'max_node_radius': 3.0,\n",
    "        'overlap_factor': 0.7\n",
    "    }\n",
    "\n",
    "    # Parameters for the Genetic Algorithm\n",
    "    GA_PARAMS = {\n",
    "        'seed': 67682,\n",
    "        'pop_size': 30,\n",
    "        'generations': 2,\n",
    "        'max_depth': 20,\n",
    "        'max_children': 3,\n",
    "        'max_node_radius': 3.0,\n",
    "        'mutation_rate': 0.1,\n",
    "        'crossover_rate': 0.7,\n",
    "        'overlap_factor': 0.7,\n",
    "        'illumination_resolution': 1 # This parameter is no longer used by get_illuminated_area4\n",
    "    }\n",
    "    '''\n",
    "    target_tree, target_area, evolved_best_tree, evolved_best_fitness, history = run_evolutionary_lighting_lab4(\n",
    "        TARGET_TREE_PARAMS, GA_PARAMS)\n",
    "\n",
    "    '''\n",
    "    # Print the nodes of evolved_best_tree\n",
    "    all_nodes = evolved_best_tree.get_all_nodes()\n",
    "\n",
    "    print(\"Main 649: Info of all nodes of evolved_best_tree:\")\n",
    "    for node in all_nodes:\n",
    "      print(f\"x: {node.x}, y: {node.y}, value: {node.value.split('_')[-1]}, r: {node.radius}\")\n",
    "    '''\n",
    "\n",
    "    '''\n",
    "    # Plot tree nodes and their diffusion circles\n",
    "    all_nodes = tree_root.get_all_nodes()\n",
    "    for node in all_nodes:\n",
    "        # Plot the square representing the cell\n",
    "        rect = patches.Rectangle((node.x, node.y), 1, 1, facecolor=tree_color, edgecolor='black', linewidth=1, zorder=1)\n",
    "        ax.add_patch(rect)\n",
    "        ax.text(node.x + 0.5, node.y + 0.5, node.value.split('_')[-1], ha='center', va='center', color='darkblue', fontsize=7, zorder=2)\n",
    "\n",
    "        # Plot the circle representing the radius of influence\n",
    "        circle = patches.Circle((node.x + 0.5, node.y + 0.5), node.radius, color='red', alpha=0.2, zorder=2)\n",
    "        ax.add_patch(circle)\n",
    "    '''\n",
    "\n",
    "    # --- Plotting Results ---\n",
    "    if target_tree and evolved_best_tree:\n",
    "        fig, axes = plt.subplots(1, 3, figsize=(24, 8))\n",
    "\n",
    "        # Plot 1: Target Tree Structure and its Illumination\n",
    "        # print(\"# Plot 1: Target Tree Structure and its Illumination\")\n",
    "        plot_tree_with_illumination4(target_tree, target_area, axes[0], tree_color='skyblue', diff_color='green',\n",
    "                                     title=\"Target Tree and Illuminated Area\")\n",
    "\n",
    "        # Plot 2: Best Evolved Tree Structure and its Illumination\n",
    "        # print(\"# Main 680 Plot 2: Best Evolved Tree Structure and its Illumination\")\n",
    "        evolved_best_area = get_illuminated_area4(evolved_best_tree)\n",
    "        plot_tree_with_illumination4(evolved_best_tree, evolved_best_area, axes[1], tree_color='lightcoral',\n",
    "                                     diff_color='purple',\n",
    "                                     title=f\"Best Evolved Tree (Fitness: {evolved_best_fitness:.4f})\")\n",
    "\n",
    "        # Plot 4: Symmetric Difference Area\n",
    "        # print(\"# Plot 3: Symmetric Difference Area\")\n",
    "        symmetric_diff_area = target_area.symmetric_difference(evolved_best_area)\n",
    "        plot_illuminated_area4(axes[2], symmetric_diff_area,\n",
    "                               title=f\"Symmetric Difference (Error Area: {len(symmetric_diff_area)})\")\n",
    "\n",
    "        plt.tight_layout()\n",
    "        plt.show()\n",
    "\n",
    "        # Plot Fitness History\n",
    "        plt.figure(figsize=(10, 6))\n",
    "        plt.plot(history, marker='o', linestyle='-', color='blue')\n",
    "        plt.title('Best Fitness Progression Over Generations')\n",
    "        plt.xlabel('Generation')\n",
    "        plt.ylabel('Fitness')\n",
    "        plt.grid(True)\n",
    "        plt.show()\n",
    "    else:\n",
    "        print(\"No plot\")\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "tECNJ2QpdzsM"
   },
   "source": [
    "**Recomendación.** Para obtener nuevos resultados al ejecutar el programa anterior, cambie la semilla del generador aleatorio en la línea 647.\n",
    "\n",
    "**Advertencia.** La simulación sigue produciendo un error de interrupción, pero aparentemente con menos frecuencia. Sin embargo, la Evolución es por su propia naturaleza tolerante a las fallas y así podemos tener una sensación posiblemente correcta para algunas preguntas. Por esa razón, damos un lugar para el estudio de cuestiones importantes.\n",
    "\n",
    "**Ejercicio.** Juega con el código lo suficiente como para obtener una percepción estable del rendimiento de la Evolución. Exprese su acuerdo o desacuérdo con las opiniones del autor.\n",
    ">\n",
    "> *Respuesta.* Nuestras opiniones sobre el desempeño de la Evolución de los árboles morfológicos consisten en cinco puntos:\n",
    "\n",
    "> 1. La Evolución no es gradualista.  *La Evolución de la forma siempre es saltacionista*. Esto significa que la fitness no sigue una curva suave sino que evoluciona siempre en saltos intercalados con períodos de éxtasis de duración desigual. Los saltos son contrarios al gradualismo de Darwin, así que, aparte de unos pocos casos, [los saltos no son reconocidos por todos](https://es.wikipedia.org/w/index.php?title=Saltaci%C3%B3n_(biolog%C3%ADa)&oldid=172169311) porque, se dice que pequeños cambios pueden acumularse a lo largo de unos pocos miles de años para aparecer como saltos en el registro fósil.\n",
    " \n",
    "> 2. La Evolución es científica. Esto significa que su comportamiento general es siempre reproducible sin modificaciones: la Evolución puede resolver casos fáciles, pero las batallas con la complejidad demandan recursos crecientes. O, de manera equivalente, cuanto más abundantes son los recursos, mayor es el ritmo en la dirección de la perfección y la altura alcanzada.  \n",
    "\n",
    "> 3. La batalla de la Evolución contra la complejidad es científica. Esto significa que el historial de la fitness deja para cada ejemplo un historial objetivo de saltos que conecta una condición de aptitud baja con una superior. La aptitud más baja no es cero porque los detalles morfológicos finos siempre pueden ser imitados por estructuras toscas. Desde ese comienzo, la Evolución va en dirección a la perfección avanzando por saltos. Y, ¿qué hay entre salto y salto? Si uno piensa en el registro fósil, cada período de éxtasis implica una gran cantidad de fósiles del mismo tipo que luego son reemplazados por una variante. Esta es una predicción de la Teoría Evolutiva.\n",
    "\n",
    "> 4. La complejidad aplasta a la Evolución. Proponemos medir la complejidad de la forma por el número de nodos en el árbol objetivo. Esto no hace justicia a la riqueza del algoritmo, pero es un buen comienzo. Ahora, la Evolución puede resolver casos fáciles con un solo nodo en la generación inicial. Pero un problema con seis nodos genera una batalla contra la complejidad. Una instancia para un tamaño poblacional de 200 y después de 45 minutos de trabajo por Colab:   \n",
    ">\n",
    ">> $0.8125 (gen 1) \\rightarrow 0.9167(gen3) \\rightarrow 0.9583 (gen 5) \\rightarrow  0.9783 (gen 307) \\rightarrow  0.9787 (gen 315) \\rightarrow 1.0 (gen 462) $\n",
    "\n",
    "**Ejercicio.** Expresa tu opinión sobre la siguiente pregunta:\n",
    ">\n",
    ">  ¿La Evolución explica tu morfología? O, ¿las especies aparecieron por la Evolución?\n",
    ">\n",
    "> *Respuesta.*  Nuestro modelo de morfogénesis de la red de iluminación es simple y natural. Por lo tanto, creemos que es el enfoque correcto para la morfogénesis. Es claramente científico porque nuestros experimentos o simulaciones pueden reproducirse incondicionalmente, y la Evolución siempre tiene el mismo comportamiento que muestra una dura batalla contra la complejidad. Ahora, hemos encontrado para nuestros casos de prueba simples una tendencia ascendente en la dirección de la perfección, en consecuencia tenemos tres predicciones obligatorias para la Teoría Evolutiva:\n",
    "1. Los rasgos morfológicos simples pueden evolucionar en el laboratorio. [Esta predicción es cierta](https://www.researchgate.net/publication/51658530_Scrutinising_snail_shells) (Schilthuizen, Menno. (2011). Scrutinizing snail shells. Heredity. 108. 364-365. 10.1038/hdy.2011.88.)\n",
    "2. Las poblaciones reales deben mostrar diversidad de rasgos morfológicos simples. Esto se debe a que según nuestras simulaciones la Evolución siempre lucha contra la complejidad y algo se logra.  Según lo que vemos, esta predicción es correcta porque distinguimos fácilmente a un amerindio de un europeo y a nuestros hijos de los del vecino. Y todos nosotros somos hermanos y hermanas.\n",
    "3. El registro fósil debe ser llenado con todo tipo de formas deformadas que muestren que la Evolución tuvo una tremenda batalla contra la complejidad para generar rasgos tan delicados como los de los [huesos del oído](https://youtu.be/5IU91r-MGL0).\n",
    "\n",
    "\n",
    "\n",
    "Esos huesos deben transmitir tanto susurros como explosiones.  O, considere que todas nuestras falanges son aproximadamente iguales pero, si uno presta atención, resultan ser todas muy diferentes. O, piensa en las delicadas complejidades de los rasgos de una vértebra que debe ser un tubo de transmisión y protección para la médula pero con orificios para los vasos y nervios además de servir  como eje de soporte altamente móvil y resistente:  ¿dónde está el registro fósil de las infinitas pruebas que la Evolución debería haber hecho para generarlas? No están en ninguna parte. Por lo tanto, no hay razón para considerar que nosotros y nuestra morfología seamos el resultado de la Evolución.\n",
    "\n",
    "El comportamiento saltacionista observado por la Evolución de las redes de iluminación tendrá una explicación matemática.   \n",
    "\n",
    "**Ejercicio.** Tenemos árboles asociados con la pleiotropía. Por eso, sospechamos que la morfogénesis, según el modelo de red de iluminación, también está cargada de pleiotropía. Mostrar esto, de lo contrario probar que no hay pleiotropía en absoluto. Advertencia: para mostrar que el modelo de red de iluminación es presa de la pleiotropía, debes exhibir la firma de la pleiotropía que consiste en que un cambio da lugar a muchos efectos.\n",
    ">\n",
    "> *Respuesta.* La pleiotropía fue transparente en el problema de ajustar una matriz de distancia a un árbol filogenético: si uno cambia la distancia entre dos nodos en un árbol, todas las distancias asociadas a todos los caminos que pasan por este subcamino cambian. Vemos inmediatamente que un cambio tiene muchos efectos. Por el mismo motivo, debemos encontrar una variable intermedia en el modelo de red de iluminación y mostrar que un cambio en un valor asociado a un nodo causa efectos colaterales en otras variables asociadas con otros nodos y que integran la aptitud del árbol. Nuestra propuesta es la siguiente:\n",
    ">\n",
    "> Si un píxel está iluminado, se ilumina con lámparas específicas. Imaginemos ahora que apagamos todas las luces redundantes, que son aquellas lámparas cuyo círculo de acción está completamente contenido en los de otros. Ahora podemos hacer una partición del área iluminada en conjuntos disjuntos. Ejemplos:\n",
    "> 1. Si la región iluminada es $I_2 = A \\cup B$, entonces la partición disyuntiva es $P_2 = A \\cup (B-A)$.  \n",
    "> 2. Si la región iluminada es $I_3 = A \\cup B \\cup C$, entonces la partición disyuntiva es $P_3 = [ A \\cup (B-A)]  \\cup (C- (A \\cup B))$.\n",
    ">\n",
    "> La generalización de este procedimiento define los nodos esenciales más su participación personal en la tarea general de iluminar la región objetivo.  ¿Qué sucede si cambiamos el radio de un círculo? El nodo podría volverse redundante o dominante, o la partición disjunta puede cambiar en muchos componentes, los subconjuntos disjuntos. Por lo tanto, tenemos desde cambios traumáticos a cambios blandos en valores diversos. Esta es una pleiotropía que resulta de la interacción de la complejidad con la función de fitness. La complejidad resulta de la información esencial adjunta a cada nodo: sus coordenadas x e y, y el radio de iluminación. La función de aptitud mide la diferencia simétrica entre las áreas iluminadas de dos redes de iluminación completas, el objetivo y las redes de prueba, y esto es un observable global que no se puede explicar mediante la adición de los efectos iluminantes de nodos aislados. La razón es que hay muchas regiones con iluminación múltiple y con patrones complejos de sobrelapameinto.  \n",
    "\n",
    "**Ejercicio.** Proponer una explicación de por qué Gemini 2.5 Flash, una aplicación extremadamente poderosa, no puede producir un software perfecto.\n",
    ">\n",
    "> *Respuesta.* El núcleo de Gemini 2.5 Flash es una red neuronal. Estos aprenden de sus maestros, que en este caso consisten en código existente, que para 2026 ha sido creado principalmente por desarrolladores humanos. Así, para tareas conocidas, Gemini puede producir código perfecto. Pero para las tareas desconocidas, debe crear, y sigue el mismo modo de vida que nosotros: desarrollar un programa que posiblemente encaje en un proyecto, probarlo, encontrar errores, hacer correcciones y repetir. Los humanos somos muy buenos para ese proceso. Esto significa que podemos resolver tareas, pero tal vez con un gran esfuerzo. Por ejemplo, para proponer un remedio al viejo problema de la iluminación, el autor ha invertido hasta ahora, aparte de largas discusiones con Gemini, una semana de trabajo.\n",
    "\n",
    "**Ejercicio.** Exprese su opinión sobre la siguiente pregunta: ¿Es el estilo de codificación que corrige errores una necesidad o una opción que será superada por los avances técnicos en computación en un futuro próximo?\n",
    ">\n",
    "> *Respuesta.* La humanidad tiene hambre de códigos. Por lo tanto, siempre buscamos un código de un grado de complejidad que supere las posibilidades del momento. Por lo tanto, el estilo de codificación que corrige errores será una necesidad para todas las edades.\n",
    "\n",
    "**Ejercicio.** El ADN contiene instrucciones para continuar la vida. Estas están codificadas usando el código genético. Así, el ADN es software. La teoría evolutiva dice que todo el software de ADN de todas las especies apareció por la Evolución Natural. A partir de esto, predecimos que debe ser posible diseñar software utilizando una simulación de la Evolución. Correcto. Esta es una disciplina moderna que se llama Programación Genética cuya esencia es el estilo de codificación con corrección de errores.  ¿Consideras que esto también debe ser la esencia de la Evolución Natural? ¿Tienes predicciones concretas comprobables?\n",
    ">\n",
    "> *Respuesta.* Por su propia naturaleza, la esencia de la Evolución Natural es el estilo de codificación que corrige errores para reunir pequeños avances: inicializar el proceso al azar, seleccionar el mejor, hacer cambios, reproducirlo y repetirlo. La predicción inmediata es que una Evolución de la Perfección debe acompañar a cada rama evolutiva. Por lo tanto, el registro fósil debe estar lleno de todo tipo de esqueletos malformados. Y, como la Tierra es muy reciente, toda población viva debe tener todo tipo de esqueletos malformados y disfunciones. Por lo tanto, para saber si la Teoría de la Evolución es la explicación de nuestra existencia, basta mirar al propio cuerpo. Si está lleno de todo tipo de defectos de anatomía y fisiología, aparecimos por la Evolución. Pero, si tenemos unas pocas decenas de defectos genéticos, no estamos aquí como un subproducto de la Evolución. Por favor, mírate a ti mismo y decide.\n",
    "\n",
    "**Ejercicio.** Convierte el programa anterior en un laboratorio. Para lograrlo, algunas tareas son las siguientes:\n",
    ">\n",
    "> 1. Incluye un ID para cada experimento. La hora actual es una buena opción.\n",
    "> 2. Imprime los nombres y valores de los argumentos o variables de control.\n",
    "> 3. Simplificar el programa, si es que eso es posible.\n",
    "\n",
    ">\n",
    "> *Respuesta.* Le pedimos ayuda a Colab. Gemini respondió:\n",
    ">>>\n",
    ">> Bien, he convertido el programa en una configuración de laboratorio. Ahora incluye un ID de experimento basado en una marca de tiempo e imprime todas las variables de control (árbol objetivo y parámetros GA) al comienzo de cada ejecución. También he refactorizado el código eliminando los sufijos numéricos de las clases y funciones para simplificarlo. La función de ejecución principal es ahora `run_evolutionary_lighting_lab`.\n",
    ">>>\n",
    ">> Al ejecutar el código se verán los detalles del experimento y luego se procederá con la simulación evolutiva y el trazado.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 1000
    },
    "executionInfo": {
     "elapsed": 2102353,
     "status": "ok",
     "timestamp": 1788358306053,
     "user": {
      "displayName": "jose rodriguez",
      "userId": "08454562216435392883"
     },
     "user_tz": 300
    },
    "id": "aZljnoIb7_Qz",
    "outputId": "9a4cc0dd-b440-4803-bf64-35ae1bd7d03e"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "--- Starting Experiment: 20260902_133643 ---\n",
      "Target Tree Parameters:\n",
      "  max_depth: 100\n",
      "  max_children: 3\n",
      "  max_node_radius: 3.0\n",
      "  overlap_factor: 0.7\n",
      "\n",
      "Genetic Algorithm Parameters:\n",
      "  seed: 679182\n",
      "  pop_size: 200\n",
      "  generations: 500\n",
      "  max_depth: 100\n",
      "  max_children: 3\n",
      "  max_node_radius: 3.0\n",
      "  mutation_rate: 0.1\n",
      "  crossover_rate: 0.7\n",
      "  overlap_factor: 0.7\n",
      "  illumination_resolution: 1\n",
      "\n",
      "--- Generating Target Tree ---\n",
      "Target Tree Generated with 8 nodes. Illuminated area size: 37\n",
      "\n",
      "--- Initializing Population of 200 Trees ---\n",
      "Population initialized with 200 individuals.\n",
      "\n",
      "--- Starting Evolutionary Loop for 500 Generations ---\n",
      "Generation 1/500: Best Fitness = 0.7838 (Overall Best: 0.7838)\n",
      "Generation 2/500: Best Fitness = 0.8222 (Overall Best: 0.8222)\n",
      "Generation 3/500: Best Fitness = 0.8222 (Overall Best: 0.8222)\n",
      "Generation 4/500: Best Fitness = 0.8571 (Overall Best: 0.8571)\n",
      "Generation 5/500: Best Fitness = 0.9250 (Overall Best: 0.9250)\n",
      "Generation 6/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 7/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 8/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 9/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 10/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 11/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 12/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 13/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 14/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 15/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 16/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 17/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 18/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 19/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 20/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 21/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 22/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 23/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 24/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 25/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 26/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 27/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 28/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 29/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 30/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 31/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 32/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 33/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 34/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 35/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 36/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 37/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 38/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 39/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 40/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 41/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 42/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 43/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 44/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 45/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 46/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 47/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 48/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 49/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 50/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 51/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 52/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 53/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 54/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 55/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 56/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 57/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 58/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 59/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 60/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 61/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 62/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 63/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 64/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 65/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 66/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 67/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 68/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 69/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 70/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 71/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 72/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 73/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 74/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 75/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 76/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 77/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 78/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 79/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 80/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 81/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 82/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 83/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 84/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 85/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 86/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 87/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 88/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 89/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 90/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 91/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 92/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 93/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 94/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 95/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 96/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 97/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 98/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 99/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 100/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 101/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 102/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 103/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 104/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 105/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 106/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 107/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 108/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 109/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 110/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 111/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 112/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 113/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 114/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 115/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 116/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 117/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 118/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 119/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 120/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 121/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 122/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 123/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 124/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 125/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 126/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 127/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 128/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 129/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 130/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 131/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 132/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 133/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 134/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 135/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 136/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 137/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 138/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 139/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 140/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 141/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 142/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 143/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 144/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 145/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 146/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 147/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 148/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 149/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 150/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 151/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 152/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 153/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 154/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 155/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 156/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 157/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 158/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 159/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 160/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 161/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 162/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 163/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 164/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 165/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 166/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 167/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 168/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 169/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 170/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 171/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 172/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 173/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 174/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 175/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 176/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 177/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 178/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 179/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 180/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 181/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 182/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 183/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 184/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 185/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 186/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 187/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 188/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 189/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 190/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 191/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 192/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 193/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 194/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 195/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 196/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 197/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 198/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 199/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 200/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 201/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 202/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 203/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 204/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 205/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 206/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 207/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 208/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 209/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 210/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 211/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 212/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 213/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 214/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 215/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 216/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 217/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 218/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 219/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 220/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 221/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 222/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 223/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 224/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 225/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 226/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 227/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 228/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 229/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 230/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 231/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 232/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 233/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 234/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 235/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 236/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 237/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 238/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 239/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 240/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 241/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 242/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 243/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 244/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 245/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 246/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 247/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 248/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 249/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 250/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 251/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 252/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 253/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 254/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 255/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 256/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 257/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 258/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 259/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 260/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 261/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 262/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 263/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 264/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 265/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 266/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 267/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 268/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 269/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 270/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 271/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 272/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 273/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 274/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 275/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 276/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 277/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 278/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 279/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 280/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 281/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 282/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 283/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 284/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 285/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 286/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 287/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 288/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 289/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 290/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 291/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 292/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 293/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 294/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 295/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 296/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 297/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 298/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 299/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 300/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 301/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 302/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 303/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 304/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 305/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 306/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 307/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 308/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 309/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 310/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 311/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 312/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 313/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 314/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 315/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 316/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 317/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 318/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 319/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 320/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 321/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 322/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 323/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 324/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 325/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 326/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 327/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 328/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 329/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 330/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 331/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 332/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 333/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 334/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 335/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 336/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 337/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 338/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 339/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 340/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 341/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 342/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 343/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 344/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 345/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 346/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 347/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 348/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 349/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 350/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 351/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 352/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 353/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 354/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 355/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 356/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 357/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 358/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 359/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 360/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 361/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 362/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 363/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 364/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 365/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 366/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 367/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 368/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 369/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 370/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 371/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 372/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 373/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 374/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 375/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 376/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 377/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 378/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 379/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 380/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 381/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 382/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 383/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 384/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 385/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 386/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 387/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 388/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 389/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 390/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 391/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 392/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 393/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 394/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 395/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 396/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 397/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 398/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 399/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 400/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 401/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 402/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 403/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 404/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 405/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 406/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 407/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 408/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 409/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 410/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 411/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 412/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 413/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 414/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 415/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 416/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 417/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 418/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 419/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 420/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 421/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 422/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 423/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 424/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 425/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 426/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 427/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 428/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 429/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 430/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 431/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 432/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 433/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 434/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 435/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 436/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 437/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 438/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 439/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 440/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 441/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 442/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 443/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 444/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 445/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 446/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 447/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 448/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 449/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 450/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 451/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 452/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 453/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 454/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 455/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 456/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 457/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 458/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 459/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 460/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 461/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 462/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 463/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 464/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 465/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 466/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 467/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 468/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 469/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 470/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 471/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 472/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 473/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 474/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 475/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 476/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 477/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 478/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 479/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 480/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 481/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 482/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 483/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 484/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 485/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 486/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 487/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 488/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 489/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 490/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 491/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 492/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 493/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 494/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 495/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 496/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 497/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 498/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 499/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "Generation 500/500: Best Fitness = 0.9487 (Overall Best: 0.9487)\n",
      "\n",
      "--- Evolution Finished ---\n",
      "Final Best Fitness: 0.9487\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAACVYAAAMvCAYAAAAz3hnmAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQABAABJREFUeJzs3Xl8XFX9//H3vbNv2btRoCtQKMhO2UvBUtkR20L5skNBAUEE2VSg8EUFUeQHWhYFFFvZEfDLVrTIjqCAQNlaum/ZM8lMZr3n90eaoZkkbdImnaR5PR+PPNLcuTPzmTN3pvfc+77nWMYYIwAAAAAAAAAAAAAAAABAjl3oAgAAAAAAAAAAAAAAAACgryFYBQAAAAAAAAAAAAAAAAB5CFYBAAAAAAAAAAAAAAAAQB6CVQAAAAAAAAAAAAAAAACQh2AVAAAAAAAAAAAAAAAAAOQhWAUAAAAAAAAAAAAAAAAAeQhWAQAAAAAAAAAAAAAAAEAeglUAAAAAAAAAAAAAAAAAkIdgFQAAAAAAAAAAAAAAAADkIVgFAOgRS5YskWVZevDBB7t93wcffFCWZWnJkiW5ZYcddpgOO+ywHqtvc+vpT2644QZZllXoMgAAANALRo4cqbPOOmuLP+8rr7wiy7L0yiuvbPHn7g233nqrxo0bJ8dxunyfQvZR0HtOOeUUTZ8+vdBlAAAAFESh+hetLMvSDTfc0GbZu+++qwMPPFChUEiWZemDDz6QJL3wwgvaY4895Pf7ZVmW6uvrt3i9fc2FF16oyZMnF7oMdNPVV1+tCRMmFLoMAN1AsApAr7Esq0s/fe3A/JtvvqkbbrhhozvlrScWuvKDr7W22+OPP17oUgpq1apVuuGGG3KdwkKbPn26LMvSVVddVehSAADAANYacF//Z/DgwZo0aZKef/75XnveeDyuG264oct9k431BR5++OFeq7Uv6y99wGg0qltuuUVXXXWVbPvrQ2Od1Tt06NAOH6ev7dP3hmQyqauuukrbbLONAoGAJkyYoHnz5nX5/g8//LD22msv+f1+DRo0SOeee66qq6s3eJ/XX3891/Ydrfvyyy9r0qRJqqioUElJifbbbz899NBDbdbp6Ltk/Z85c+bk1r3qqqv0xBNP6MMPP+zy6wIAAH3XRx99pKlTp2rEiBHy+/0aPny4Jk+erDvvvLPQpfWqBQsW6IYbbijoxcIjR47M7W/Ztq2SkhLttttuOv/88/XOO+906THS6bSmTZum2tpa3X777XrooYc0YsQI1dTUaPr06QoEAvrtb3+rhx56SKFQqJdfUd+2ePFi/f73v9e1116bW9Z6AXxnP7/4xS8KWHHX/O53v5NlWf0ueLR8+XLNmjVL++23n0pLS1VRUaHDDjtML7/8crt1f/CDH+jDDz/UM888U4BKAWwKd6ELALD1yj+w+ac//Unz5s1rt3znnXfekmVt1JtvvqlZs2bprLPOUklJSafr7bzzzu1eyzXXXKNwOKwf//jHvVwletPpp5+uU045RT6fr9eeY9WqVZo1a5ZGjhypPfbYo9eepyui0aieffZZjRw5Un/5y1/0i1/8gkAgAAAoqBtvvFGjRo2SMUZr167Vgw8+qKOPPlrPPvusjj322B5/vng8rlmzZklSt0YkuuSSS7Tvvvu2W37AAQf0VGn9Sn/pA95///3KZDKaMWNGu9smT56sM844o82yQCAgSXrppZfaLO9L+/S95ayzztLjjz+uH/zgB9phhx1yn8X58+fr4IMP3uB9Z8+erQsvvFBHHHGEfv3rX2vFihW644479N577+mdd96R3+9vdx/HcfT9739foVBIsVis3e3PPPOMTjzxRB1wwAG5kXofffRRnXHGGaqurtZll10mSTr00EPbbXeSdPvtt+vDDz/UEUcckVu25557ap999tGvfvUr/elPf+puEwEAgD7kzTff1KRJk7T99ttr5syZGjp0qJYvX663335bd9xxh77//e8XusRes2DBAs2aNUuHHXaYRo4c2eX7ff75520uNthce+yxhy6//HJJUmNjoz799FM99thjuu+++3TZZZfp17/+dZv1m5ub5XZ/fbp60aJFWrp0qe677z6dd955ueUvvPCCGhsbddNNN+mb3/xmj9Xbn91xxx0aNWqUJk2a1O62GTNm6Oijj263fM8999wSpW2WOXPmaOTIkfrXv/6lhQsXauzYsYUuqUuefvpp3XLLLTrxxBN15plnKpPJ6E9/+pMmT56s+++/X2effXZu3aFDh+qEE07QbbfdpuOPP76AVQPoKoJVAHrNaaed1ubvt99+W/PmzWu3fFMYY5RIJHIHuAthyJAh7V7LL37xC1VUVGzwNTqOo1Qq1eFBZPQNLpdLLper0GVsMU888YSy2azuv/9+HX744Xr11Vc1ceLEjd4vFosN+KuCAABA7zjqqKO0zz775P4+99xzNWTIEP3lL3/plWDVpjrkkEM0derUQpfRZ2xqHzAejysYDPZmaW088MADOv744zvsk+24446d1uv1enu7tD7lX//6lx5++GH98pe/1BVXXCFJOuOMM7Trrrvqyiuv1JtvvtnpfVOplK699lodeuihmjdvXu7CjQMPPFDHHXec7rvvvg5PbN57771avny5zjvvPN1xxx3tbr/rrrs0bNgw/eMf/8hdCHPBBRdo3LhxevDBB3PBqtGjR2v06NFt7tvc3KwLL7xQhx9+eLtRyKZPn67rr79ev/vd7xQOh7vRSgAAoC+5+eabVVxcrHfffbfdRdOVlZWFKaoPWv/8Sk9fXDx8+PB2+9O33HKLTj31VN1+++3aYYcd9L3vfS93W/4+eev71Nn7t6GL4burPx/fTqfTmjNnjr773e92ePtee+3V7XNxGzrvlkgk5PV6NyuE15X2Xrx4sd588009+eSTuuCCCzRnzhxdf/31G33sTCYjx3EK2mebNGmSli1bpoqKityy7373u9pjjz103XXXtQlWSS19kGnTpumrr75q13cB0PcwFSCAgnrggQd0+OGHa/DgwfL5fNpll100e/bsduuNHDlSxx57rF588UXts88+CgQCuueeeyRJS5cu1fHHH69QKKTBgwfrsssu04svvtjhFBPvvPOOvvWtb6m4uFjBYFATJ07UG2+8kbv9hhtu0I9+9CNJ0qhRo3LDo27O8LmWZeniiy/WnDlzNH78ePl8Pr3wwguSpJUrV+qcc87RkCFD5PP5NH78eN1///3tHiOZTOr666/X2LFj5fP5tN122+nKK69UMpnc6PO/9tprmjZtmrbffvvcfS+77DI1Nze3We+ss85SOBzWypUrdeKJJyocDmvQoEG64oorlM1m26xbX1+vs846S8XFxSopKdGZZ57Z6/OZt07lkP9etE7Dsv57fdhhh2nXXXfVf//7X02cOFHBYFBjx47NTT/4z3/+UxMmTFAgENBOO+3UbijWjp6rdRt8/fXXtd9++8nv92v06NHtrmiura3VFVdcod12203hcFhFRUU66qij2kwr8corr+RGNjj77LNz29mDDz6YW2dj22qr119/Xfvuu6/8fr/GjBmT+1x0x5w5czR58mRNmjRJO++8c5tpMfLb5J///KcuvPBCDR48WNtuu23u9ueff16HHHKIQqGQIpGIjjnmGH3yySdtHuO///2vzjrrLI0ePVp+v19Dhw7VOeeco5qamm7XDAAABpaSkhIFAoE2VzJLLRct/OY3v9H48ePl9/s1ZMgQXXDBBaqrq2uz3nvvvacpU6aooqJCgUBAo0aN0jnnnCOpZaqEQYMGSZJmzZqV2ze74YYbNrvuXXfdtcOrhx3H0fDhw9uEsmKxmC6//HJtt9128vl82mmnnXTbbbfJGNPp47/33nuyLEt//OMf293W2if629/+llvW1f7HihUrdOKJJ7bpY3Wl79EVrfvq//73v3XooYcqGAzmpq7oTr/nz3/+s/bee28FAgGVlZXplFNO0fLlyzf6/IsXL9Z///vfTbrK/bDDDsuNaLaxffrW17lgwQJNmjRJwWBQw4cP16233trucbv6uufNm6eDDz5YJSUlCofD2mmnndpM+yFJd955p8aPH69gMKjS0lLts88+mjt3bpt1PvvsMy1btmyjr/fxxx+Xy+XS+eefn1vm9/t17rnn6q233tpge3/88ceqr6/XySef3GY03GOPPVbhcLjD6TJra2v1k5/8RDfeeGOnJ8yi0ahKS0vbnAB0u925z/aGPPvss2psbNT//M//tLtt8uTJisVi3ZrmEAAA9D2LFi3S+PHjO9yXGDx4cO7fEydO1O67797hY+y0006aMmWKpK+nVbvtttv029/+VqNHj1YwGNSRRx6p5cuXyxijm266Sdtuu60CgYBOOOEE1dbWtnm81uPKr7zySu7cxm677ZY7nv3kk09qt912k9/v1957763333+/XU2fffaZpk6dqrKyMvn9fu2zzz5tphB78MEHNW3aNEkt4Y78Kbg3dH5l5MiROuuss9o8X319vS677DKNHDlSPp9P2267bW6E0E0RCAT00EMPqaysTDfffHObPs76fa+zzjord8HvtGnTZFlWbh/8zDPPlCTtu+++siyrTc1dOZbeOtrpggULdOqpp6q0tLTNCKxd6V90Zx8/kUjohhtu0I477ii/369hw4bppJNO0qJFi3LrdLU/25HXX39d1dXVmzV6V2fbRes5l4cfflg/+clPNHz4cAWDQUWjUUnSY489lmur1oEGVq5c2eaxW883LVq0SEcffbQikUiH++H55syZo9LSUh1zzDGaOnVqh+cq1v9c/uY3v9GYMWPk8/m0YMECSRv/vEhdO4/TatmyZfrss882Wvv48ePbhKokyefz6eijj9aKFSvU2NjY5rbW9+7pp5/e6GMDKDxGrAJQULNnz9b48eN1/PHHy+1269lnn9WFF14ox3F00UUXtVn3888/14wZM3TBBRdo5syZ2mmnnRSLxXT44Ydr9erVuvTSSzV06FDNnTtX8+fPb/dc//jHP3TUUUdp77331vXXXy/btnPBrtdee0377befTjrpJH3xxRf6y1/+ottvvz23E9R6omVT/eMf/9Cjjz6qiy++WBUVFRo5cqTWrl2r/fffPxe8GjRokJ5//nmde+65ikaj+sEPfiCpZef6+OOP1+uvv67zzz9fO++8sz766CPdfvvt+uKLL/TXv/51g8/92GOPKR6P63vf+57Ky8v1r3/9S3feeadWrFihxx57rM262WxWU6ZM0YQJE3Tbbbfp5Zdf1q9+9SuNGTMmdxWJMUYnnHCCXn/9dX33u9/VzjvvrKeeeirXsekr6urqdOyxx+qUU07RtGnTNHv2bJ1yyimaM2eOfvCDH+i73/2uTj31VP3yl7/U1KlTtXz5ckUikQ0+5sKFCzV16lSde+65OvPMM3X//ffrrLPO0t57763x48dLkr766iv99a9/1bRp0zRq1CitXbtW99xzjyZOnKgFCxZom2220c4776wbb7xR1113nc4//3wdcsghklqu3pa6tq1K0kcffaQjjzxSgwYN0g033KBMJqPrr79eQ4YM6XI7rVq1SvPnz8+djJsxY4Zuv/123XXXXR1e3XHhhRdq0KBBuu6663JTczz00EM688wzNWXKFN1yyy2Kx+OaPXu2Dj74YL3//vu5oafnzZunr776SmeffbaGDh2qTz75RPfee68++eQTvf3220w/CAAAchoaGlRdXS1jjCorK3XnnXeqqamp3RW3F1xwgR588EGdffbZuuSSS7R48WLdddddev/99/XGG2/I4/GosrIyt8909dVXq6SkREuWLNGTTz4pqWVff/bs2fre976nb3/72zrppJMkSd/4xjc2WmdjY2OHJxfKy8tlWZZOPvlk3XDDDVqzZk2bEXJef/11rVq1Sqeccoqkln3s448/XvPnz9e5556rPfbYQy+++KJ+9KMfaeXKlbr99ts7fP599tlHo0eP1qOPPtpuf/yRRx5RaWlp7qRQV/sfzc3NOuKII7Rs2TJdcskl2mabbfTQQw/pH//4x0bbo6tqamp01FFH6ZRTTtFpp52mIUOGdKvfc/PNN+unP/2ppk+frvPOO09VVVW68847deihh+r999/f4FXsraMs7bXXXh3enkgk2r2nkUik3ZX8G9unl1r6JN/61rd00kknafr06Xr88cd11VVXabfddtNRRx0lqev9vU8++UTHHnusvvGNb+jGG2+Uz+fTwoUL25wwuu+++3TJJZdo6tSpuvTSS5VIJPTf//5X77zzjk499dQ2tU+cOLHdhUj53n//fe24444qKipqs7y1P/LBBx9ou+226/C+raGwjsJOgUBA77//vhzHaXPF+09/+lMNHTpUF1xwgW666aYOH/ewww7TLbfcop/+9Kc688wzZVmW5s6dq/fee0+PPvroBl/PnDlzFAgEcp/x9e2yyy4KBAJ644039O1vf3uDjwMAAPquESNG6K233tLHH3+sXXfdtdP1Tj/9dM2cObPdeu+++66++OIL/eQnP2mz/pw5c5RKpfT9739ftbW1uvXWWzV9+nQdfvjheuWVV3TVVVdp4cKFuvPOO3XFFVe0u3hh4cKFOvXUU3XBBRfotNNO02233abjjjtOd999t6699lpdeOGFkqSf//znmj59epvp+T755BMddNBBGj58uK6++mqFQiE9+uijOvHEE/XEE0/o29/+tg499FBdcskl+n//7//p2muvzU29vf4U3B2dX+lIU1OTDjnkEH366ac655xztNdee6m6ulrPPPOMVqxY0S440lXhcFjf/va39Yc//EELFizIHU9f3wUXXKDhw4frZz/7WW7a9dZj3TvttJPuvffe3LTxY8aMkdT1Y+mtpk2bph122EE/+9nPcgGv7vQvurKPn81mdeyxx+rvf/+7TjnlFF166aVqbGzUvHnz9PHHH+dq70p/tjNvvvmmLMvqdGq/eDzeYV+1pKSkzQVLG9oubrrpJnm9Xl1xxRVKJpPyer25evfdd1/9/Oc/19q1a3XHHXfojTfeaNdWmUxGU6ZM0cEHH6zbbrutS6MUz5kzRyeddJK8Xq9mzJih2bNn6913381d1LK+Bx54QIlEQueff758Pp/Kysq69HmRunYep9UZZ5yhf/7znxu86GlD1qxZo2Aw2O71FxcXa8yYMXrjjTdyI+8C6MMMAGwhF110kcn/2onH4+3WmzJlihk9enSbZSNGjDCSzAsvvNBm+a9+9Ssjyfz1r3/NLWtubjbjxo0zksz8+fONMcY4jmN22GEHM2XKFOM4TpvnHzVqlJk8eXJu2S9/+UsjySxevLjbr3H8+PFm4sSJbZZJMrZtm08++aTN8nPPPdcMGzbMVFdXt1l+yimnmOLi4lzbPPTQQ8a2bfPaa6+1We/uu+82kswbb7yxwZo6auOf//znxrIss3Tp0tyyM88800gyN954Y5t199xzT7P33nvn/v7rX/9qJJlbb701tyyTyZhDDjnESDIPPPDABuuZP3++kWQee+yx3LIHHnigXZtPnDixTVt2tM76j9f6XrfeV5KZO3dubtlnn32Wey/efvvt3PIXX3yxXd0dPVfrNvjqq6/mllVWVhqfz2cuv/zy3LJEImGy2WybGhcvXmx8Pl+btn333Xc7bK/ubKsnnnii8fv9bd7HBQsWGJfL1e6z1pnbbrvNBAIBE41GjTHGfPHFF0aSeeqpp9qs19omBx98sMlkMrnljY2NpqSkxMycObPN+mvWrDHFxcVtlne0Lf7lL39p164AAGDgat3nyP/x+XzmwQcfbLPua6+9ZiSZOXPmtFn+wgsvtFn+1FNPGUnm3Xff7fR5q6qqjCRz/fXXd6nO1n3Qzn5Wr15tjDHm888/N5LMnXfe2eb+F154oQmHw7n9o9Z97P/93/9ts97UqVONZVlm4cKFuWUjRowwZ555Zu7va665xng8HlNbW5tblkwmTUlJiTnnnHNyy7ra//jNb35jJJlHH300t04sFjNjx45tt9+9MR31AVv31e++++42y7va71myZIlxuVzm5ptvbrPeRx99ZNxud7vl+X7yk58YSaaxsbHdbZ29n6377Pl9lM726dd/nX/6059yy5LJpBk6dKj5zne+0+3XffvttxtJpqqqqtPXdsIJJ5jx48dv8PW3vs78fmtHxo8fbw4//PB2yz/55JMO38P1VVVVGcuyzLnnnttmeWu/TFKbbfHDDz80LpfLvPjii8YYY66//voOX29TU5OZPn26sSwr9zjBYLDNMYGO1NTUGK/Xa6ZPn97pOjvuuKM56qijNvg4AACgb3vppZeMy+UyLpfLHHDAAebKK680L774okmlUm3Wq6+vN36/31x11VVtll9yySUmFAqZpqYmY0zLcV1JZtCgQaa+vj633jXXXGMkmd13392k0+nc8hkzZhiv12sSiURuWetx5TfffDO3rPWYdCAQaHNs95577mm3z33EEUeY3Xbbrc1jOo5jDjzwQLPDDjvklj322GOd7q93dn6l9bb1+xfXXXedkWSefPLJduuuf7y6IyNGjDDHHHNMp7e37tM+/fTTuWX5/bCOzh8Y83Vfcf1+XXeOpbfuX86YMaPN43anf9HVffz777/fSDK//vWv27VBa51d7c925rTTTjPl5eXtlrdus539vPXWW7l1O9suWt+D0aNHtzmmn0qlzODBg82uu+5qmpubc8v/9re/GUnmuuuuyy1rPd909dVXb/B1rO+9994zksy8efOMMS1tte2225pLL720w9dYVFRkKisr29zW1c9LV8/jGPP1+74pvvzyS+P3+83pp5/e4e1HHnmk2XnnnTfpsQFsWUwFCKCg1r96tfWq9IkTJ+qrr75SQ0NDm3VHjRqVu9q61QsvvKDhw4fr+OOPzy3z+/2aOXNmm/U++OADffnllzr11FNVU1Oj6upqVVdXKxaL6YgjjtCrr74qx3F64RW2mDhxonbZZZfc38YYPfHEEzruuONkjMnVU11drSlTpqihoUH/+c9/JLWMOLXzzjtr3LhxbdY7/PDDJanD0bnWt34bx2IxVVdX68ADD5QxpsNhhfPn5D7kkEP01Vdf5f5+7rnn5Ha728yD7nK59P3vf78bLdL7wuFwbgQAqeWKlpKSEu28886aMGFCbnnrv9d/jZ3ZZZddcleiSy2jG+y0005t7uvz+XJXE2WzWdXU1OSm6Wh9Tzekq9tqNpvViy++qBNPPFHbb7997v4777xzu8/JhsyZM0fHHHNMbrSuHXbYQXvvvXeHQ+xK0syZM+VyuXJ/z5s3T/X19ZoxY0ab7dPlcmnChAltts/1t8XWkQD2339/SepS2wAAgIHjt7/9rebNm6d58+bpz3/+syZNmqTzzjsvN8qU1LKfXFxcrMmTJ7fZD9l7770VDodz+yGtV8z+7W9/Uzqd7tE6r7vuulyd6/+UlZVJknbccUftscceeuSRR3L3yWazevzxx3Xcccfl9o+ee+45uVwuXXLJJW0e//LLL5cxRs8//3ynNZx88slKp9Nt2uall17KTcMmda//8dxzz2nYsGFtpikMBoNtpoPbXD6fT2effXabZV3t9zz55JNyHEfTp09vs97QoUO1ww47bLR/VFNTI7fbrXA43OHtJ5xwQrv3szv71+sLh8NtRlnzer3ab7/92vQfuvq6W7fjp59+utO+a0lJiVasWKF33313g3UZYzY6WpXUMnpZ/khdUkufu/X2zlRUVGj69On64x//qF/96lf66quv9Nprr+nkk0/OXXm//v0vueQSHXXUUTryyCM3WJPP59OOO+6oqVOn6i9/+Yv+/Oc/a5999tFpp52mt99+u9P7Pf7440qlUhucfqS0tHSTp7cBAAB9w+TJk/XWW2/p+OOP14cffqhbb71VU6ZM0fDhw9tMBVZcXKwTTjhBf/nLX3Kj0GSzWT3yyCO5KbHXN23aNBUXF+f+bj2mfNppp7UZ/WfChAlKpVLtpkXbZZdddMABB7S7/+GHH97m2G7+sera2lr94x//0PTp03Oj5VZXV6umpkZTpkzRl19+2e65OtPR+ZWOPPHEE9p99907HMVzc2ccaN0Hz58SbVNtynmf/PMf3e1fdGUf/4knnlBFRUWH50xa27Cr/dnO1NTUqLS0tNPbzz///A77quufp5I2vF2ceeaZbY7pv/fee6qsrNSFF16Y6xNI0jHHHKNx48bp//7v/9o9xvrnkTZmzpw5GjJkiCZNmiRJuVGgH374YWWz2Xbrf+c732kz20x3Pi/dOY/zyiuvbNJoVfF4XNOmTVMgENAvfvGLDtehDwL0H0wFCKCg3njjDV1//fV66623FI/H29zW0NDQprMyatSodvdfunSpxowZ026HfuzYsW3+/vLLLyVpg9PVNTQ0bHBHdHPk115VVaX6+nrde++9uvfeezu8T2VlpaSW2j/99NNOpyNsXa8zy5Yt03XXXadnnnmm3dzc+eE1v9/f7nlKS0vb3G/p0qUaNmxYuxMRnQ0dXCjbbrttu+2iuLi43VQVrdtYV+YtX7+T2yq/fRzH0R133KHf/e53Wrx4cZsd/vLy8o0+R1e31WQyqebmZu2www7tbt9pp5303HPPbfS5Pv30U73//vs644wztHDhwtzyww47TL/97W8VjUbbTfuRvy231tt64iff+vevra3VrFmz9PDDD7fbbvO3RQAAMLDtt99+2meffXJ/z5gxQ3vuuacuvvhiHXvssfJ6vfryyy/V0NCgwYMHd/gYrfsbEydO1He+8x3NmjVLt99+uw477DCdeOKJOvXUUzsMjXTHbrvtpm9+85sbXOfkk0/Wtddeq5UrV2r48OF65ZVXVFlZmQs9SS372Ntss027qalbp+5YunRpp4+/++67a9y4cXrkkUd07rnnSmqZBrCioiK3j9ad/sfSpUs1duzYdvvSPbm/P3z48HbTTne13/Pll1/KGNPhfrCkDU6X0RXbbrvtRt/T7jxWfjuWlpbqv//9b+7vrr7uk08+Wb///e913nnn6eqrr9YRRxyhk046SVOnTs2dELjqqqv08ssva7/99tPYsWN15JFH6tRTT9VBBx20SfUHAoHclH7rSyQSuds35J577lFzc7OuuOIKXXHFFZJaTj6OGTNGTz75ZK5P+cgjj+jNN9/Uxx9/vNGaLr74Yr399tv6z3/+k3vd06dP1/jx43XppZfqnXfe6fB+c+bMUVlZWW56lo4YY5ieHACArcC+++6rJ598UqlUSh9++KGeeuop3X777Zo6dao++OCDXLDkjDPO0COPPKLXXntNhx56qF5++WWtXbtWp59+ervHzD8u3HpMuavHmjf1/gsXLpQxRj/96U/105/+tMPXW1lZqeHDh3fSGl/r6PxKRxYtWqTvfOc7XVq3u5qamiSpXb9nU23KeZ+Ojm93p3/RlX38RYsWaaeddmoTuuuo9q70ZzdkQ2GfHXbYoUv9mg1tF/m3tfZLO+objhs3Tq+//nqbZW63W9tuu+1Ga5Bawk0PP/ywJk2apMWLF+eWT5gwQb/61a/097//vd1FGPn1defzsrnncbryek455RQtWLBAzz//fJupBddHHwToPwhWASiYRYsW6YgjjtC4ceP061//Wtttt528Xq+ee+453X777e2uJNjYQdsNaX2sX/7yl9pjjz06XKezK5Z7Qn7trfWcdtppne70f+Mb38itu9tuu+nXv/51h+vld77Wl81mNXnyZNXW1uqqq67SuHHjFAqFtHLlSp111lnt2nj9kYj6ms52Lju6UkHq/LV0trwrVxx05b4/+9nP9NOf/lTnnHOObrrpJpWVlcm2bf3gBz/o0qhoXd1WOzrB0V1//vOfJUmXXXZZh3N4P/HEE+1GEuhsW37ooYc0dOjQdo+xfudx+vTpevPNN/WjH/1Ie+yxh8LhsBzH0be+9a1eHTEOAAD0f7Zta9KkSbrjjjv05Zdfavz48XIcR4MHD+50pM3WoIplWXr88cf19ttv69lnn9WLL76oc845R7/61a/09ttv92o/QGoJxFxzzTV67LHH9IMf/ECPPvqoiouL9a1vfatHn+Pmm29WdXW1IpGInnnmGc2YMSO3L9ad/seW0FHfrqv9HsdxZFmWnn/++Q73zzf2fpaXlyuTyaixsbHHTuh0piv9h66+7kAgoFdffVXz58/X//3f/+mFF17QI488osMPP1wvvfSSXC6Xdt55Z33++ef629/+phdeeEFPPPGEfve73+m6667TrFmzul3/sGHDOhwBYfXq1ZLU6cmBVsXFxXr66ae1bNkyLVmyRCNGjNCIESN04IEHatCgQblRuH70ox9p2rRp8nq9WrJkiSSpvr5ekrR8+XKlUilts802SqVS+sMf/qArr7wyF6qSWk52HXXUUbrrrruUSqXahfaWLVum1157Teeff/4Gg3d1dXWdnlADAAD9j9fr1b777qt9991XO+64o84++2w99thjuv766yVJU6ZM0ZAhQ/TnP/9Zhx56qP785z9r6NChHYZRNvdY86bev3U//oorruh0VKH8i8w7sznnV3pKa5C+qzVvzKac9+no+HZ3+hebc34h/3m70p/tTHl5eZcuFt+YDW0Xm7vNrD8q1Mb84x//0OrVq/Xwww/r4Ycfbnf7nDlz2gWrOjtX0ZXPy+aex9mYmTNn6m9/+5vmzJnT6UXpUksfpKKiYrOfD0DvI1gFoGCeffZZJZNJPfPMM22u2NjYEKfrGzFihBYsWNAu1b3+6DuSNGbMGEkto+dsLKW/JdLhgwYNUiQSUTab3Wg9Y8aM0Ycffqgjjjii27V99NFH+uKLL/THP/5RZ5xxRm75vHnzNqluqaXN//73v6upqalNp+Lzzz/f5MfsitarSloPsLfa0NX7hfD4449r0qRJ+sMf/tBmeX19fZsd5M7ey65uq4MGDVIgEMhdlbO+rrwXxhjNnTtXkyZN0oUXXtju9ptuuklz5sxpF6zqrN7BgwdvsN66ujr9/e9/16xZs3TdddfllndUPwAAQEcymYykr69yHjNmjF5++WUddNBBXTrgu//++2v//ffXzTffrLlz5+p//ud/9PDDD+u8887r1T7AqFGjtN9+++mRRx7RxRdfrCeffFInnnhim9GyRowYoZdffrld2Oezzz7L3b4hJ598smbNmqUnnnhCQ4YMUTQabTMtdnf6HyNGjNDHH3/cro/V2/v7Xe33jBkzRsYYjRo1SjvuuGO3n2fcuHGSpMWLF292mKwntpvu9Pds29YRRxyhI444Qr/+9a/1s5/9TD/+8Y81f/783PsaCoV08skn6+STT1YqldJJJ52km2++Wddcc02b6Tq6Yo899tD8+fPbjWTbOipUZyev8m2//fa5Pn99fb3+/e9/txkFYfny5Zo7d67mzp3b7r577bWXdt99d33wwQeqqalRJpPp8OKadDqdmzI9X+sUPxuaBjCTyWj58uU6/vjju/SaAABA/9I6Gm5rQFxqCciceuqpevDBB3XLLbfor3/9q2bOnNmnLj4ePXq0pJYg+ZY6rzFmzJgujSTaXU1NTXrqqae03Xbb5Ubm3VzdOe+zocfYnP5FZ4/5zjvvKJ1Odxrs725/Nt+4ceM0Z86cdjO/9KbWfunnn3/eLiz0+eefb7TfuiFz5szR4MGD9dvf/rbdbU8++aSeeuop3X333Rtsq+58Xrp6HmdT/OhHP9IDDzyg3/zmN5oxY8YG1128eLF23333zXo+AFtG12KiANALWjso6yf5Gxoa9MADD3T5MaZMmaKVK1e2mR89kUjovvvua7Pe3nvvrTFjxui2227LnYhZX1VVVe7frfOn5wd4epLL5dJ3vvMdPfHEEx12UtavZ/r06Vq5cmW71yRJzc3NisViG3weqW0bG2N0xx13bHLtRx99tDKZjGbPnp1bls1mdeedd27yY3ZFayfp1VdfbfO8nU1lUigul6vd1SmPPfZYuyu9O9vOurqtulwuTZkyRX/961+1bNmy3O2ffvqpXnzxxY3W+cYbb2jJkiU6++yzNXXq1HY/J598subPn69Vq1Zt8HGmTJmioqIi/exnP1M6nd5gvVL7K3d+85vfbLRWAACAdDqtl156SV6vN3cQfvr06cpms7rpppvarZ/JZHL7WXV1de32QVoDIa2jgAaDQUm91wc4+eST9fbbb+v+++9XdXV1m2kApZZ97Gw2q7vuuqvN8ttvv12WZW1w+jKpZcrA3XbbTY888ogeeeQRDRs2TIceemju9u70P44++mitWrVKjz/+eG5ZPB7v9f3urvZ7TjrpJLlcLs2aNavd+2qMUU1NzQaf54ADDpAkvffee5tdc0/0Hbv6umtra9vdnr8d5792r9erXXbZRcaYNvvqn332WZs+RGemTp3ars+VTCb1wAMPaMKECW1GT162bFkuCLgh11xzjTKZTJsRc5966ql2P62fkT/96U+6/fbbJbVczFFSUqKnnnpKqVQqd/+mpiY9++yzGjduXIcnWubOnavtt99eBx98cKd1LViwQIlEQgceeOBGXwMAAOi75s+f3+HIQc8995yk9lOYnX766aqrq9MFF1ygpqYmnXbaaVukzq4aPHiwDjvsMN1zzz1tQmGteuO8xne+853cFIr5ujsqU6vm5madfvrpqq2t1Y9//OMeC4F157xPZza3f9GR73znO6qurm7Xv2t9TKnr/dnOHHDAATLG6N///ne369tU++yzjwYPHqy77767zYwazz//vD799FMdc8wxm/S4zc3NevLJJ3Xsscd2eK7i4osvVmNjY5vzgB3pzuelq+dxpK73daSW0dNuu+02XXvttbr00ks3uG5DQ4MWLVpEHwToJxixCkDBHHnkkfJ6vTruuONyHZf77rtPgwcP7nCnpyMXXHCB7rrrLs2YMUOXXnqphg0bpjlz5uSuxG3dQbdtW7///e911FFHafz48Tr77LM1fPhwrVy5UvPnz1dRUZGeffZZSS0745L04x//WKeccoo8Ho+OO+64XMekp/ziF7/Q/PnzNWHCBM2cOVO77LKLamtr9Z///Ecvv/xy7sD56aefrkcffVTf/e53NX/+fB100EHKZrP67LPP9Oijj+rFF1/MXXGTb9y4cRozZoyuuOIKrVy5UkVFRXriiSc2a4jY4447TgcddJCuvvpqLVmyRLvssouefPJJNTQ0bPJjdsX48eO1//7765prrlFtba3Kysr08MMP50Yu6CuOPfZY3XjjjTr77LN14IEH6qOPPtKcOXNyV0u0GjNmjEpKSnT33XcrEokoFAppwoQJGjVqVJe31VmzZumFF17QIYccogsvvFCZTEZ33nmnxo8f32ZO947MmTNHLper087O8ccfrx//+Md6+OGH9cMf/rDTxykqKtLs2bN1+umna6+99tIpp5yiQYMGadmyZfq///s/HXTQQbrrrrtUVFSkQw89VLfeeqvS6bSGDx+ul156qc186QAAAK2ef/753IHLyspKzZ07V19++aWuvvrq3Mg5EydO1AUXXKCf//zn+uCDD3TkkUfK4/Hoyy+/1GOPPaY77rhDU6dO1R//+Ef97ne/07e//W2NGTNGjY2Nuu+++1RUVKSjjz5aUssUArvssoseeeQR7bjjjiorK9Ouu+6qXXfddYN1vvbaa0okEu2Wf+Mb32gzGtL06dN1xRVX6IorrlBZWVm7q2ePO+44TZo0ST/+8Y+1ZMkS7b777nrppZf09NNP6wc/+EHuIoMNOfnkk3XdddfJ7/fr3HPPbTflQlf7HzNnztRdd92lM844Q//+9781bNgwPfTQQ7nwWW/par9nzJgx+t///V9dc801WrJkiU488URFIhEtXrxYTz31lM4//3xdccUVnT7P6NGjteuuu+rll1/WOeecs1k1b2ifvqdf94033qhXX31VxxxzjEaMGKHKykr97ne/07bbbpsLDB155JEaOnSoDjroIA0ZMkSffvqp7rrrLh1zzDFtRkLbeeedNXHiRL3yyisbrG3ChAmaNm2arrnmGlVWVmrs2LH64x//qCVLlrS7svuMM87QP//5zzYnJ37xi1/o448/1oQJE+R2u/XXv/5VL730kv73f/9X++67b269E088sd1zf/DBB5Kko446KnfFuMvl0hVXXKGf/OQn2n///XXGGWcom83qD3/4g1asWJGb6nx9H3/8sf773//q6quv3uAJvHnz5ikYDGry5MkbbBMAANC3ff/731c8Hte3v/1tjRs3TqlUSm+++aYeeeQRjRw5st3o/Hvuuad23XVXPfbYY9p555211157Fajyzv32t7/VwQcfrN12200zZ87U6NGjtXbtWr311ltasWKFPvzwQ0ktoXuXy6VbbrlFDQ0N8vl8OvzwwzV48OBuPd+PfvQjPf7445o2bZrOOecc7b333qqtrdUzzzyju+++e6Oj66xcuTK3X9bU1KQFCxboscce05o1a3T55Zfrggsu2LSG6EB3zvt0ZnP7Fx0544wz9Kc//Uk//OEP9a9//UuHHHKIYrGYXn75ZV144YU64YQTutyf7czBBx+s8vJyvfzyyx1ONfef//ynw/3jMWPG5C426S6Px6NbbrlFZ599tiZOnKgZM2Zo7dq1uuOOOzRy5Mg2F090xzPPPKPGxsZOR4/df//9NWjQIM2ZM6fdRUr5uvp56ep5HKnjvk5HnnrqKV155ZXaYYcdtPPOO7dr/8mTJ2vIkCG5v19++WUZY3TCCSds8HEB9BEGALaQiy66yOR/7TzzzDPmG9/4hvH7/WbkyJHmlltuMffff7+RZBYvXpxbb8SIEeaYY47p8HG/+uorc8wxx5hAIGAGDRpkLr/8cvPEE08YSebtt99us+77779vTjrpJFNeXm58Pp8ZMWKEmT59uvn73//eZr2bbrrJDB8+3Ni23a6WDRk/fryZOHFim2WSzEUXXdTh+mvXrjUXXXSR2W677YzH4zFDhw41RxxxhLn33nvbrJdKpcwtt9xixo8fb3w+nyktLTV77723mTVrlmloaNhgTQsWLDDf/OY3TTgcNhUVFWbmzJnmww8/NJLMAw88kFvvzDPPNKFQqN39r7/++nbvW01NjTn99NNNUVGRKS4uNqeffrp5//332z1mR+bPn28kmcceeyy37IEHHmjXzhMnTmzXlosWLTLf/OY3jc/nM0OGDDHXXnutmTdvnpFk5s+f3+a+48ePb/fcnW1H+e9RR/V0dt/8OhOJhLn88svNsGHDTCAQMAcddJB56623Onw9Tz/9tNlll12M2+1u13Zd3Vb/+c9/mr333tt4vV4zevRoc/fdd3f4nq0vlUqZ8vJyc8ghh3S6jjHGjBo1yuy5555t2uTdd9/tcN358+ebKVOmmOLiYuP3+82YMWPMWWedZd57773cOitWrDDf/va3TUlJiSkuLjbTpk0zq1atMpLM9ddfv8FaAADAwNC6z7H+j9/vN3vssYeZPXu2cRyn3X3uvfdes/fee5tAIGAikYjZbbfdzJVXXmlWrVpljDHmP//5j5kxY4bZfvvtjc/nM4MHDzbHHntsm/0UY4x58803c/tVG9s/ad2n7eyno/sedNBBRpI577zzOnzMxsZGc9lll5ltttnGeDwes8MOO5hf/vKX7V7ziBEjzJlnntnu/l9++WXu+V9//fUOn6Or/Y+lS5ea448/3gSDQVNRUWEuvfRS88ILL7Tb796YjvqAne2rG9O9fs8TTzxhDj74YBMKhUwoFDLjxo0zF110kfn88883Wtevf/1rEw6HTTweb7N8Q3231tq7uk/f2es888wzzYgRI7r9uv/+97+bE044wWyzzTbG6/WabbbZxsyYMcN88cUXuce55557zKGHHprrQ4wZM8b86Ec/atd2ktq9js40NzebK664wgwdOtT4fD6z7777mhdeeKHDtsl/r//2t7+Z/fbbz0QiERMMBs3+++9vHn300S49b2ufpqqqqt1tc+bMMfvtt58pKSkxgUDATJgwwTz++OMdPs7VV19t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a1KFft3ViYiIiIiIiIiIiIiIiIg8koJVIiIiQBkFDDZ7DNe7NIZTOrsjXnitoHvnkCwJyJoxVkGgpxbkJdE4I8xLimbC6OpVXr8Gk06kcX8iIiIiIiIiIiIiIiIishAUrBIREXkH5xkmvSZpt81+6/3csUe0dw5pDqd4ZUUZBuSNiDIOFBB6J+cI04J4ms/WUxSQtRN2NrtMe2266VXSzh4YW3elIiIiIiIiIiIiIiIiIiJPRcEqERGRR6gaDQ67qxxc6hJPMpJRSmt/RDJKaQ4mWM8jb0bkSQTe8oWsTGWJpjlRWmCso0hCRv0249UWaTshb8y6U3nOg7TuakVERERERERERERERERETkbBKhERkSdwniFtJ6TthMOtHmFazMJVRxOaR2O6e0MA8iQkb0TY4OKODPSLkmiaE2YlGEPWiDi4ssq01yRtxZRxWHeJIiIiIiIiIiIiIiIiIiKnQsEqERGRkzCGohFRNCKGG138vCQZZySDKe2DEc3BFK+ajbsrA58yDiijYCHDVn5REuSzm19acI4qmo1CPLi8StZpkLbihfxvExERERERERERERERERF5EgWrREREnkMVBYyjgPFqi/2r/eNuTgXRNCcZpsSTbCHCVo8KUZVhwLjfJm03KJKQIp515XJLOPpQRERERERERERERERERJaLglUiIiKnxPkeWTshayf3f+aVFWFa3A9bNYYp0b2wVVmBMYDDGYP1PSrfx/reAzeeI8RkrMWrHn4zDnAOMFSR/9AQVZGEsxpERERERERERERERERERJaMglUiIiJnyAY+Wdt/eNgqL/HKCr+0+Pnsz0FW4Bd29ndVhV85sPY4gAW44/87DmTBO74eh6Qw7vh+BucZbOBhvVlIK08iyngWmqoiHxv4VL43+5lCVCIiIiIiIiIiIiIiIiIi9ylYJSIics7uh60e8femsviVvR+68soKv7IY647DU7M4Fc7NMlQGMGaWpeL4e89Q+d4sOBX697/XCD8RERERERERERERERERkaejYJWIiMiccb5H6XsQ6WNaRERERERERERERERERKQumvcjIiIiIiIiIiIiIiIiIiIiIiLyLgpWiYiIiIiIiIiIiIiIiIiIiIiIvIuCVSIiIiIiIiIiIiIiIiIiIiIiIu9yLsGqLMv4xm/8RowxfOELXziPRYqIiIiIyBLQvoaIiIiI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",
      "text/plain": [
       "<Figure size 2400x800 with 3 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA18AAAIjCAYAAAD80aFnAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAZc5JREFUeJzt3Xlc1VXi//H3ZQcRcUFwQVFMzXIpTTK1zYWRhskt18kltSwpk6w0F7SmqGZSHHOpqbRf5mSL1WTqiKaWuTUuU43puKap4NIoCop4Ob8/+HLzCigQcj98ej0fDx5wz+fcz+d84HQ7b8+55zqMMUYAAAAAgGvKy9MNAAAAAIDfAsIXAAAAAJQDwhcAAAAAlAPCFwAAAACUA8IXAAAAAJQDwhcAAAAAlAPCFwAAAACUA8IXAAAAAJQDwhcAAAAAlAPCFwCUMYfDoSlTpni6GShHBw4ckMPh0Pz58z3dFFRAvGYAvx2ELwCWMH/+fDkcDrevmjVr6q677tKyZcuu2XWzsrI0ZcoUrVmzplj116xZU6Cd+V/9+vUr9Dnr16/XlClTdOrUqbJruAdc/jcKCAhQ48aNlZCQoPT0dE837zdvyZIl+t3vfqfq1au7/jZjx47VyZMnPd20Iu3fv18JCQlq3LixgoKCFBQUpGbNmmnUqFH69ttvPd28MrV06VICFgD5eLoBAHCpZ599Vg0aNJAxRunp6Zo/f77i4uL02Wef6fe//32ZXy8rK0tTp06VJN15553Fft5jjz2mW265xa0sKipKknTu3Dn5+Pzy8rp+/XpNnTpVQ4YMUWho6K9tssfl/43Onz+vdevWac6cOVq6dKm+//57BQUFebp5HlG/fn2dO3dOvr6+Hrn+2LFj9corr6hly5Z6+umnVa1aNW3dulWvvvqq3nvvPa1atUpNmjTxSNuKsmTJEvXt21c+Pj4aOHCgWrZsKS8vL+3cuVOLFy/WnDlztH//ftWvX9/TTS0TS5cu1axZswoNYJe/ZgCwL/5LB2Ap3bp1U5s2bVyPhw0bpvDwcP3973+/JuGrtDp27KjevXsXeiwgIKCcW1O+Lv0bDR8+XNWrV9e0adP06aefqn///oU+JzMzU5UqVSqX9pXntfLlzwR6wt///ne98sor6tu3r9599115e3u7jg0ZMkR33XWX7rvvPm3durVcB/hX+jvs3btX/fr1U/369bVq1SrVqlXL7fhLL72k2bNny8vLugt0yrKf2f01A8AvrPuqBgCSQkNDFRgYWGDQmJubq5SUFN1www0KCAhQeHi4HnroIf3vf/9zq/evf/1LsbGxqlGjhgIDA9WgQQM98MADkvLepxMWFiZJmjp1qms53a9dGnTpOaZMmaInn3xSktSgQQPXNQ4cOOCqm5CQoE8++UQ33nij/P39dcMNN2j58uUFznv48GE98MADCg8Pd9V76623CtSbOXOmbrjhBgUFBalq1apq06aNFi5c6Dp+5swZPf7444qKipK/v79q1qypLl26aOvWraW637vvvltS3hIyKW/AHxwcrL179youLk6VK1fWwIEDJeUNWJ944glFRkbK399fTZo00V/+8hcZY9zOee7cOT322GOqUaOGKleurD/84Q86fPhwgb/PlClT5HA4tGPHDg0YMEBVq1ZVhw4dXMcXLFig1q1bKzAwUNWqVVO/fv106NAht2vt3r1bvXr1UkREhAICAlS3bl3169dPp0+fdtVJTU1Vhw4dFBoaquDgYDVp0kTPPPOM63hR7/n64osv1LFjR1WqVEmhoaG699579cMPP7jVyb+HPXv2uGZHq1SpoqFDhyorK+uqv/+pU6eqatWqev31192ClyS1bdtWTz/9tL777jt9+OGHkqSEhAQFBwcXeu7+/fsrIiJCTqfTVbZs2TLXPVSuXFn33HOP/vOf/7g970p/88K8/PLLyszM1Lx58woEL0ny8fHRY489psjISLfynTt3qnfv3qpWrZoCAgLUpk0b/eMf/3Crk7889uuvv1ZiYqLCwsJUqVIl9ejRQ8ePHy9wrV97f1999ZXuu+8+1atXT/7+/oqMjNSYMWN07tw5t+fPmjVLktyW7uYr7HVn27Zt6tatm0JCQhQcHKxOnTpp48aNpb7XK70WAig/zHwBsJTTp0/rxIkTMsbo2LFjmjlzps6ePas//vGPbvUeeughzZ8/X0OHDtVjjz2m/fv369VXX9W2bdv09ddfy9fXV8eOHVPXrl0VFhamcePGKTQ0VAcOHNDixYslSWFhYZozZ44efvhh9ejRQz179pQktWjR4qrtPHPmjE6cOOFWVq1atQL/Ut+zZ0/997//1d///ndNnz5dNWrUcF0737p167R48WI98sgjqly5sv7617+qV69eOnjwoKpXry5JSk9P16233uoKa2FhYVq2bJmGDRumjIwMPf7445Kkv/3tb3rsscfUu3dvjR49WufPn9e3336rTZs2acCAAZKkkSNH6sMPP1RCQoKaNWumkydPat26dfrhhx908803F/dP5bJ3715JcrVVki5evKjY2Fh16NBBf/nLXxQUFCRjjP7whz9o9erVGjZsmFq1aqV//vOfevLJJ3X48GFNnz7d9fwhQ4bo/fff1/33369bb71Va9eu1T333FNkG+677z5dd911euGFF1xB7vnnn9ekSZPUp08fDR8+XMePH9fMmTN1++23a9u2bQoNDdWFCxcUGxur7OxsPfroo4qIiNDhw4e1ZMkSnTp1SlWqVNF//vMf/f73v1eLFi307LPPyt/fX3v27NHXX399xd/LypUr1a1bNzVs2FBTpkzRuXPnNHPmTLVv315bt251LVPN16dPHzVo0EDJycnaunWr3njjDdWsWVMvvfRSkdfYvXu3du3apSFDhigkJKTQOoMGDVJSUpKWLFmifv36qW/fvpo1a5Y+//xz3Xfffa56WVlZ+uyzzzRkyBBXiHvnnXc0ePBgxcbG6qWXXlJWVpbmzJmjDh06aNu2bW73UNjfvChLlixRo0aNFBMTc8Xf4aX+85//qH379qpTp47GjRunSpUq6f3331f37t310UcfqUePHm71H330UVWtWlVJSUk6cOCAUlJSlJCQoEWLFrnqlMX9ffDBB8rKytLDDz+s6tWra/PmzZo5c6Z++uknffDBB5LyXq+OHDmi1NRUvfPOO8W6144dOyokJERPPfWUfH199dprr+nOO+/U2rVrC/zernavV3stBFCODABYwLx584ykAl/+/v5m/vz5bnW/+uorI8m8++67buXLly93K//444+NJPPNN98Ued3jx48bSSYpKalY7Vy9enWh7ZRk9u/fb4wxBc735z//2e34pSQZPz8/s2fPHlfZv//9byPJzJw501U2bNgwU6tWLXPixAm35/fr189UqVLFZGVlGWOMuffee80NN9xwxXuoUqWKGTVqVLHu91L5f6OVK1ea48ePm0OHDpn33nvPVK9e3QQGBpqffvrJGGPM4MGDjSQzbtw4t+d/8sknRpL505/+5Fbeu3dv43A4XL+DLVu2GEnm8ccfd6s3ZMiQAr/bpKQkI8n079/fre6BAweMt7e3ef75593Kv/vuO+Pj4+Mq37Ztm5FkPvjggyLve/r06UaSOX78eJF19u/fbySZefPmucpatWplatasaU6ePOkq+/e//228vLzMoEGDCtzDAw884HbOHj16mOrVqxd5TWN++Z1Onz79ivVCQkLMzTffbIwxJjc319SpU8f06tXLrc77779vJJkvv/zSGGPMmTNnTGhoqBkxYoRbvbS0NFOlShW38qL+5oU5ffq0kWS6d+9e4Nj//vc/c/z4cddXfr82xphOnTqZ5s2bm/Pnz7vKcnNzzW233Wauu+46V1l+P+3cubPJzc11lY8ZM8Z4e3ubU6dOlen9XdrGfMnJycbhcJgff/zRVTZq1ChT1LDr8n7dvXt34+fnZ/bu3esqO3LkiKlcubK5/fbbS3yvxXktBFA+WHYIwFJmzZql1NRUpaamasGCBbrrrrs0fPhwt3+h/eCDD1SlShV16dJFJ06ccH21bt1awcHBWr16tSS5NrdYsmSJcnJyyrSdkydPdrUz/ysiIqJU5+rcubOio6Ndj1u0aKGQkBDt27dPkmSM0UcffaT4+HgZY9zuOTY2VqdPn3YtGQwNDdVPP/2kb775psjrhYaGatOmTTpy5Eip2xsWFqbIyEj169dPwcHB+vjjj1WnTh23eg8//LDb46VLl8rb21uPPfaYW/kTTzwhY4xrV8v8JZePPPKIW71HH320yDaNHDnS7fHixYuVm5urPn36uP2+IiIidN1117n6SJUqVSRJ//znP4tc4pffjz799FPl5uYW2YZLHT16VNu3b9eQIUNUrVo1V3mLFi3UpUsXLV269Kr30LFjR508eVIZGRlFXufMmTOSpMqVK1+xPZUrV3adx+Fw6L777tPSpUt19uxZV51FixapTp06rmWbqampOnXqlPr37+/2O/T29lZMTIzrd3ipy//mhclvR3BwcIFjd955p8LCwlxf+Uv1fv75Z33xxRfq06ePa9b5xIkTOnnypGJjY7V7924dPnzY7VwPPvig29K+jh07yul06scffyzT+wsMDHT9nJmZqRMnTui2226TMUbbtm276u/jck6nUytWrFD37t3VsGFDV3mtWrU0YMAArVu3rkCfuNq9XsvXQgAlw7JDAJbStm1btw03+vfvr5tuukkJCQn6/e9/Lz8/P+3evVunT59WzZo1Cz3HsWPHJEl33HGHevXqpalTp2r69Om688471b17dw0YMED+/v6/qp3NmzdX586df9U58tWrV69AWdWqVV3vXzt+/LhOnTql119/Xa+//nqh58i/56efflorV65U27Zt1ahRI3Xt2lUDBgxQ+/btXXVffvllDR48WJGRkWrdurXi4uI0aNAgt4HelcyaNUuNGzeWj4+PwsPD1aRJkwLLLX18fFS3bl23sh9//FG1a9cuEBSuv/561/H8715eXmrQoIFbvUaNGhXZpsvr7t69W8YYXXfddYXWz9+VsEGDBkpMTNS0adP07rvvqmPHjvrDH/6gP/7xj65g1rdvX73xxhsaPny4xo0bp06dOqlnz57q3bt3kRtC5N9LYTsMXn/99frnP/9ZYMOGy/tB1apVJUn/+9//ilxSmP+7zA9hRTlz5ozbfy99+/ZVSkqK/vGPf2jAgAE6e/asli5dqoceesg1iN+9e7ekX97Td7nL21TY3/xKbb40+OV77bXXdObMGaWnp7stNd6zZ4+MMZo0aZImTZpU6HmPHTvm9g8AV/p9SmV3fwcPHtTkyZP1j3/8o8B7Ti9932BxHT9+XFlZWUX2ndzcXB06dEg33HCDq/xq93otXwsBlAzhC4CleXl56a677tKMGTO0e/du3XDDDcrNzVXNmjX17rvvFvqc/PdTORwOffjhh9q4caM+++wz/fOf/9QDDzygV155RRs3biz0X9494fJNEvKZ/3vvUv5syx//+EcNHjy40Lr571O7/vrrtWvXLi1ZskTLly/XRx99pNmzZ2vy5MmuLfX79Omjjh076uOPP9aKFSv05z//WS+99JIWL16sbt26XbW9lwfkwvj7+5frTnWXzj5Ieb8zh8OhZcuWFfr7vfRv/8orr2jIkCH69NNPtWLFCj322GNKTk7Wxo0bVbduXQUGBurLL7/U6tWr9fnnn2v58uVatGiR7r77bq1YsaLIv19JXa0fFCY/uF7pM7F+/PFHZWRkqFmzZq6yW2+9VVFRUXr//fc1YMAAffbZZzp37pz69u3rqpPf7955551CZ3Uv3wSnuH/zKlWqqFatWvr+++8LHMt/L1P+hjSXt2Xs2LGKjY0t9LyXh/Pi/nf1a+7P6XSqS5cu+vnnn/X000+radOmqlSpkg4fPqwhQ4YUe6b017ravVaU10Lgt4DwBcDyLl68KOmXfymPjo7WypUr1b59+wKD7sLceuutuvXWW/X8889r4cKFGjhwoN577z0NHz7cbanOtfJrrxEWFqbKlSvL6XQWa7atUqVK6tu3r/r27asLFy6oZ8+eev755zV+/HjXlta1atXSI488okceeUTHjh3TzTffrOeff75Y4au06tevr5UrV+rMmTNus187d+50Hc//npubq/3797vNXO3Zs6fY14qOjpYxRg0aNFDjxo2vWr958+Zq3ry5Jk6cqPXr16t9+/aaO3eu/vSnP0nK+0eATp06qVOnTpo2bZpeeOEFTZgwQatXry70b5J/L7t27SpwbOfOnapRo0aZbFPeuHFjNW7cWJ988olmzJhR6PLD//f//p8kFfiohj59+mjGjBnKyMjQokWLFBUVpVtvvdV1PH8pbM2aNctsljffPffcozfeeEObN29W27Ztr1o/f1bW19e3zNpSFvf33Xff6b///a/efvttDRo0yFWemppaoG5xXwfCwsIUFBRUZN/x8vIqsAtkcV3ptRBA+eA9XwAsLScnRytWrJCfn5/rX/n79Okjp9Op5557rkD9ixcv6tSpU5LyltxcPmvQqlUrSVJ2drYkuXYsy3/OtZA/yC7tNby9vdWrVy999NFHhc4WXLql9MmTJ92O+fn5qVmzZjLGKCcnR06ns8BSqJo1a6p27dqu38m1EhcXJ6fTqVdffdWtfPr06XI4HK7glz+zMXv2bLd6M2fOLPa1evbsKW9vb02dOrVAHzDGuH5PGRkZrnCfr3nz5vLy8nL9Pn7++ecC57+8H12uVq1aatWqld5++223v/v333+vFStWKC4urtj3cjWTJ0/W//73P40cOdJti3hJ2rJli1566SXdeOON6tWrl9uxvn37Kjs7W2+//baWL1+uPn36uB2PjY1VSEiIXnjhhULfJ1TYtu3F9dRTTykoKEgPPPCA0tPTCxy//G9Ws2ZN3XnnnXrttdd09OjRMmlLWdxf/ozTpe01xmjGjBkF6hb3dcDb21tdu3bVp59+6jYDmJ6eroULF6pDhw5FLkMtSnFeCwGUD2a+AFjKsmXLXDMhx44d08KFC7V7926NGzfONeC444479NBDDyk5OVnbt29X165d5evrq927d+uDDz7QjBkz1Lt3b7399tuaPXu2evTooejoaJ05c0Z/+9vfFBIS4hr8BgYGqlmzZlq0aJEaN26satWq6cYbb9SNN95YZvfUunVrSdKECRPUr18/+fr6Kj4+vkQzHy+++KJWr16tmJgYjRgxQs2aNdPPP/+srVu3auXKla6A0LVrV0VERKh9+/YKDw/XDz/8oFdffVX33HOPKleurFOnTqlu3brq3bu3WrZsqeDgYK1cuVLffPONXnnllTK758LEx8frrrvu0oQJE3TgwAG1bNlSK1as0KeffqrHH3/cNRPRunVr9erVSykpKTp58qRrq/n//ve/koo3gxAdHa0//elPGj9+vA4cOKDu3burcuXK2r9/vz7++GM9+OCDGjt2rL744gslJCTovvvuU+PGjXXx4kW98847rsArSc8++6y+/PJL3XPPPapfv76OHTum2bNnq27dum6fKXa5P//5z+rWrZvatWunYcOGubaar1Klyq/+LLlLDRw4UN98841mzJihHTt2aODAgapataq2bt2qt956S9WrV9eHH37oep9bvptvvlmNGjXShAkTlJ2d7bbkUMp7z9OcOXN0//336+abb1a/fv0UFhamgwcP6vPPP1f79u0LBOniuu6667Rw4UL1799fTZo00cCBA9WyZUsZY7R//34tXLhQXl5ebu+xmjVrljp06KDmzZtrxIgRatiwodLT07Vhwwb99NNP+ve//12iNpTF/TVt2lTR0dEaO3asDh8+rJCQEH300UcF3vsl/fI68Nhjjyk2Nlbe3t7q169foef905/+5PpsuUceeUQ+Pj567bXXlJ2drZdffrlE9ympWK+FAMpJ+W6uCACFK2yr+YCAANOqVSszZ84ct22U873++uumdevWJjAw0FSuXNk0b97cPPXUU+bIkSPGGGO2bt1q+vfvb+rVq2f8/f1NzZo1ze9//3vzr3/9y+0869evN61btzZ+fn5X3XY+f6v5K21NXtg5nnvuOVOnTh3j5eVVYFv6wrZ9r1+/vhk8eLBbWXp6uhk1apSJjIw0vr6+JiIiwnTq1Mm8/vrrrjqvvfaauf3220316tWNv7+/iY6ONk8++aQ5ffq0McaY7Oxs8+STT5qWLVuaypUrm0qVKpmWLVua2bNnF3k/+fL/Rlfbrnrw4MGmUqVKhR47c+aMGTNmjKldu7bx9fU11113nfnzn/9c4O+bmZlpRo0aZapVq2aCg4NN9+7dza5du4wk8+KLL7rq5W/TXtQ28B999JHp0KGDqVSpkqlUqZJp2rSpGTVqlNm1a5cxxph9+/aZBx54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qdD+kn8sLS1NNWvWdDvu4+OjatWquerAnnJzc/X444+rffv2uvHGGyXl9Qc/Pz+Fhoa61b28zxTWp/KPwZ6+++47tWvXTufPn1dwcLA+/vhjNWvWTNu3b6fPoID33ntPW7du1TfffFPgGK8zKExMTIzmz5+vJk2a6OjRo5o6dao6duyo77//vsL3GcIXAECjRo3S999/77amHihKkyZNtH37dp0+fVoffvihBg8erLVr13q6WbCgQ4cOafTo0UpNTVVAQICnm4MKolu3bq6fW7RooZiYGNWvX1/vv/++AgMDPdiyX49lhxVYjRo15O3tXWB3l/T0dEVERHioVbCq/D5xpf4SERFRYLOWixcv6ueff6ZP2VhCQoKWLFmi1atXq27duq7yiIgIXbhwQadOnXKrf3mfKaxP5R+DPfn5+alRo0Zq3bq1kpOT1bJlS82YMYM+gwK2bNmiY8eO6eabb5aPj498fHy0du1a/fWvf5WPj4/Cw8PpM7iq0NBQNW7cWHv27KnwrzOErwrMz89PrVu31qpVq1xlubm5WrVqldq1a+fBlsGKGjRooIiICLf+kpGRoU2bNrn6S7t27XTq1Clt2bLFVeeLL75Qbm6uYmJiyr3NuLaMMUpISNDHH3+sL774Qg0aNHA73rp1a/n6+rr1mV27dungwYNufea7775zC+2pqakKCQlRs2bNyudG4HG5ubnKzs6mz6CATp066bvvvtP27dtdX23atNHAgQNdP9NncDVnz57V3r17VatWrYr/OuPR7T7wq7333nvG39/fzJ8/3+zYscM8+OCDJjQ01G13F/x2nDlzxmzbts1s27bNSDLTpk0z27ZtMz/++KMxxpgXX3zRhIaGmk8//dR8++235t577zUNGjQw586dc53jd7/7nbnpppvMpk2bzLp168x1111n+vfv76lbwjX08MMPmypVqpg1a9aYo0ePur6ysrJcdUaOHGnq1atnvvjiC/Ovf/3LtGvXzrRr1851/OLFi+bGG280Xbt2Ndu3bzfLly83YWFhZvz48Z64JZSDcePGmbVr15r9+/ebb7/91owbN844HA6zYsUKYwx9Bld36W6HxtBnUNATTzxh1qxZY/bv32++/vpr07lzZ1OjRg1z7NgxY0zF7jOELxuYOXOmqVevnvHz8zNt27Y1Gzdu9HST4CGrV682kgp8DR482BiTt938pEmTTHh4uPH39zedOnUyu3btcjvHyZMnTf/+/U1wcLAJCQkxQ4cONWfOnPHA3eBaK6yvSDLz5s1z1Tl37px55JFHTNWqVU1QUJDp0aOHOXr0qNt5Dhw4YLp162YCAwNNjRo1zBNPPGFycnLK+W5QXh544AFTv3594+fnZ8LCwkynTp1cwcsY+gyu7vLwRZ/B5fr27Wtq1apl/Pz8TJ06dUzfvn3Nnj17XMcrcp9xGGOMZ+bcAAAAAOC3g/d8AQAAAEA5IHwBAAAAQDkgfAEAAABAOSB8AQAAAEA5IHwBAAAAQDkgfAEAAABAOSB8AQAAAEA5IHwBAAAAQDkgfAEAYAHz589XaGiop5sBALiGCF8AgAolLS1No0ePVqNGjRQQEKDw8HC1b99ec+bMUVZWlqebVyxRUVFKSUlxK+vbt6/++9//eqZBAIBy4ePpBgAAUFz79u1T+/btFRoaqhdeeEHNmzeXv7+/vvvuO73++uuqU6eO/vCHP3ikbcYYOZ1O+fiU7n+tgYGBCgwMLONWAQCshJkvAECF8cgjj8jHx0f/+te/1KdPH11//fVq2LCh7r33Xn3++eeKj4+XJJ06dUrDhw9XWFiYQkJCdPfdd+vf//636zxTpkxRq1at9M477ygqKkpVqlRRv379dObMGVed3NxcJScnq0GDBgoMDFTLli314Ycfuo6vWbNGDodDy5YtU+vWreXv769169Zp7969uvfeexUeHq7g4GDdcsstWrlypet5d955p3788UeNGTNGDodDDodDUuHLDufMmaPo6Gj5+fmpSZMmeuedd9yOOxwOvfHGG+rRo4eCgoJ03XXX6R//+EeZ/b4BAGWL8AUAqBBOnjypFStWaNSoUapUqVKhdfKDzH333adjx45p2bJl2rJli26++WZ16tRJP//8s6vu3r179cknn2jJkiVasmSJ1q5dqxdffNF1PDk5Wf/v//0/zZ07V//5z380ZswY/fGPf9TatWvdrjlu3Di9+OKL+uGHH9SiRQudPXtWcXFxWrVqlbZt26bf/e53io+P18GDByVJixcvVt26dfXss8/q6NGjOnr0aKH38vHHH2v06NF64okn9P333+uhhx7S0KFDtXr1ard6U6dOVZ8+ffTtt98qLi5OAwcOdLtPAICFGAAAKoCNGzcaSWbx4sVu5dWrVzeVKlUylSpVMk899ZT56quvTEhIiDl//rxbvejoaPPaa68ZY4xJSkoyQUFBJiMjw3X8ySefNDExMcYYY86fP2+CgoLM+vXr3c4xbNgw079/f2OMMatXrzaSzCeffHLVtt9www1m5syZrsf169c306dPd6szb948U6VKFdfj2267zYwYMcKtzn333Wfi4uJcjyWZiRMnuh6fPXvWSDLLli27apsAAOWP93wBACq0zZs3Kzc3VwMHDlR2drb+/e9/6+zZs6pevbpbvXPnzmnv3r2ux1FRUapcubLrca1atXTs2DFJ0p49e5SVlaUuXbq4nePChQu66aab3MratGnj9vjs2bOaMmWKPv/8cx09elQXL17UuXPnXDNfxfXDDz/owQcfdCtr3769ZsyY4VbWokUL18+VKlVSSEiI6z4AANZC+AIAVAiNGjWSw+HQrl273MobNmwoSa7NKs6ePatatWppzZo1Bc5x6XuqfH193Y45HA7l5ua6ziFJn3/+uerUqeNWz9/f3+3x5Usgx44dq9TUVP3lL39Ro0aNFBgYqN69e+vChQvFvNOSudJ9AACshfAFAKgQqlevri5duujVV1/Vo48+WuT7vm6++WalpaXJx8dHUVFRpbpWs2bN5O/vr4MHD+qOO+4o0XO//vprDRkyRD169JCUF+QOHDjgVsfPz09Op/OK57n++uv19ddfa/DgwW7nbtasWYnaAwCwDsIXAKDCmD17ttq3b682bdpoypQpatGihby8vPTNN99o586dat26tTp37qx27dqpe/fuevnll9W4cWMdOXJEn3/+uXr06FFgmWBhKleurLFjx2rMmDHKzc1Vhw4ddPr0aX399dcKCQlxC0SXu+6667R48WLFx8fL4XBo0qRJBWaioqKi9OWXX6pfv37y9/dXjRo1CpznySefVJ8+fXTTTTepc+fO+uyzz7R48WK3nRMBABUL4QsAUGFER0dr27ZteuGFFzR+/Hj99NNP8vf3V7NmzTR27Fg98sgjcjgcWrp0qSZMmKChQ4fq+PHjioiI0O23367w8PBiX+u5555TWFiYkpOTtW/fPoWGhurmm2/WM888c8XnTZs2TQ888IBuu+021ahRQ08//bQyMjLc6jz77LN66KGHFB0drezsbBljCpyne/fumjFjhv7yl79o9OjRatCggebNm6c777yz2PcAALAWhynsFR8AAAAAUKb4nC8AAAAAKAeELwAAAAAoB4QvAAAAACgHhC8AAAAAKAeELwAAAAAoB4QvAAAAACgHhC8AAAAAKAeELwAAAAAoB4QvAAAAACgHhC8AAAAAKAeELwAAAAAoB/8fxVlPExkykrcAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 1000x600 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Program morpho_trees_evolution_lab.py\n",
    "import random\n",
    "import matplotlib.pyplot as plt\n",
    "import matplotlib.patches as patches\n",
    "import numpy as np\n",
    "import copy  # For deep copying trees during reproduction and mutation\n",
    "import sys  # Import sys module to adjust recursion limit\n",
    "import math  # For math.floor, math.ceil, math.sqrt\n",
    "from datetime import datetime # For generating unique experiment IDs\n",
    "\n",
    "sys.setrecursionlimit(3000)  # Increase the recursion limit for potentially deep trees\n",
    "\n",
    "\n",
    "# --- SPATIAL TREE NODE FOR DIFFUSION ---\n",
    "\n",
    "class SpatialTreeNode_Evolution_Diffusion5:\n",
    "    def __init__(self, value, x, y, radius, occupied_squares_set, diffusion_nodes_info):\n",
    "        self.value = value\n",
    "        self.x = x\n",
    "        self.y = y\n",
    "        self.children = []\n",
    "\n",
    "        self.radius = radius\n",
    "        self.occupied_squares_set = occupied_squares_set  # Reference to the set of squares occupied by *this* tree's nodes\n",
    "        self.diffusion_nodes_info = diffusion_nodes_info  # Reference to the list of (x,y,radius) for *all* nodes in *this* tree\n",
    "\n",
    "        self.occupied_squares_set.add((x, y))  # Add current node's (x,y) square to the set\n",
    "        self.diffusion_nodes_info.append((x, y, radius))  # Add current node's (x,y,radius) to the list\n",
    "\n",
    "    def add_child(self, child_node):\n",
    "        if not isinstance(child_node, SpatialTreeNode_Evolution_Diffusion5):\n",
    "            raise TypeError(\"Child must be an instance of SpatialTreeNode_Evolution_Diffusion\")\n",
    "        self.children.append(child_node)\n",
    "\n",
    "    def get_neighboring_coordinates(self):\n",
    "        neighbors = []\n",
    "        for dx in [-1, 0, 1]:\n",
    "            for dy in [-1, 0, 1]:\n",
    "                if dx == 0 and dy == 0:\n",
    "                    continue  # Exclude the current square itself\n",
    "                neighbors.append((self.x + dx, self.y + dy))\n",
    "        return neighbors\n",
    "\n",
    "    def _is_diffusion_overlapping_local(self, potential_nx, potential_ny, potential_radius, overlap_factor):\n",
    "        \"\"\"\n",
    "        Checks if a potential new node's diffusion circle overlaps \"too much\" with EXISTING nodes IN THE SAME TREE.\n",
    "        \"Too much overlap\" is defined by the overlap_factor.\n",
    "        \"\"\"\n",
    "        potential_center_x, potential_center_y = potential_nx + 0.5, potential_ny + 0.5\n",
    "\n",
    "        for ex, ey, er in self.diffusion_nodes_info:\n",
    "            # Skip checking against self if self is already in diffusion_nodes_info\n",
    "            if (ex, ey) == (self.x, self.y):\n",
    "                continue\n",
    "\n",
    "            existing_center_x, existing_center_y = ex + 0.5, ey + 0.5\n",
    "\n",
    "            # Calculate distance between centers\n",
    "            distance = np.sqrt((potential_center_x - existing_center_x) ** 2 + (potential_ny - existing_center_y) ** 2)\n",
    "\n",
    "            # Check for significant overlap\n",
    "            # If distance is less than a fraction of the sum of radii, it's too much overlap.\n",
    "            if distance < overlap_factor * (potential_radius + er):\n",
    "                return True  # Significant overlap detected\n",
    "        return False\n",
    "\n",
    "    def add_child_in_random_neighbor(self, child_value_prefix, max_node_radius, overlap_factor):\n",
    "        coordinates_neighbors = self.get_neighboring_coordinates()\n",
    "\n",
    "        # First, filter for unoccupied grid squares *within this tree*\n",
    "        available_square_neighbors = [coord for coord in coordinates_neighbors if\n",
    "                                      coord not in self.occupied_squares_set]\n",
    "\n",
    "        valid_child_candidates = []  # Store (nx, ny, child_radius) for candidates that pass overlap check\n",
    "\n",
    "        for nx, ny in available_square_neighbors:\n",
    "            # Generate potential radius for this child, ensuring it's not too large or small\n",
    "            child_radius = random.uniform(0.5, max_node_radius)\n",
    "            if not self._is_diffusion_overlapping_local(nx, ny, child_radius, overlap_factor):\n",
    "                valid_child_candidates.append((nx, ny, child_radius))\n",
    "\n",
    "        if not valid_child_candidates:\n",
    "            return None  # No available neighbors that satisfy both square and diffusion overlap conditions\n",
    "\n",
    "        # Choose a random valid candidate\n",
    "        chosen_nx, chosen_ny, chosen_child_radius = random.choice(valid_child_candidates)\n",
    "\n",
    "        child_value = f\"{child_value_prefix}_{len(self.children) + 1}\"\n",
    "        # Create child node; its __init__ will update occupied_squares_set and diffusion_nodes_info\n",
    "        child_node = SpatialTreeNode_Evolution_Diffusion5(child_value, chosen_nx, chosen_ny, chosen_child_radius,\n",
    "                                                            self.occupied_squares_set, self.diffusion_nodes_info)\n",
    "        self.add_child(child_node)\n",
    "        return child_node\n",
    "\n",
    "    def get_all_nodes(self):\n",
    "        all_nodes = []\n",
    "        stack = [self]\n",
    "        while stack:\n",
    "            node = stack.pop()\n",
    "            all_nodes.append(node)\n",
    "            for child in node.children:\n",
    "                stack.append(child)\n",
    "        return all_nodes\n",
    "\n",
    "    def __repr__(self):\n",
    "        return f\"SpatialTreeNode_Evolution_Diffusion(value={self.value}, x={self.x}, y={self.y}, R={self.radius:.2f}, children={[child.value for child in self.children]!r})\"\n",
    "\n",
    "\n",
    "# --- TREE GENERATION ---\n",
    "\n",
    "def generate_random_spatial_tree_diffusion5(\n",
    "        max_depth, max_children, max_node_radius, initial_x, initial_y, node_prefix=\"Node\",\n",
    "        current_depth=0, parent_node=None, occupied_squares_set=None, diffusion_nodes_info=None, overlap_factor=0.7\n",
    "):\n",
    "    if occupied_squares_set is None:\n",
    "        occupied_squares_set = set()  # Initialize a new set for this tree's square coordinates\n",
    "    if diffusion_nodes_info is None:\n",
    "        diffusion_nodes_info = []  # Initialize a new list for this tree's node (x,y,radius) information\n",
    "\n",
    "    if parent_node is None:\n",
    "        # Root node at (initial_x, initial_y) with a random initial radius\n",
    "        node_value = f\"{node_prefix}_Root_{random.randint(0, 99)}\"\n",
    "        initial_radius = random.uniform(0.5, max_node_radius)\n",
    "        current_node = SpatialTreeNode_Evolution_Diffusion5(node_value, initial_x, initial_y, initial_radius,\n",
    "                                                            occupied_squares_set, diffusion_nodes_info)\n",
    "    else:\n",
    "        # Children are added by the parent's method, which handles their coordinates and radius\n",
    "        current_node = parent_node.add_child_in_random_neighbor(f\"{node_prefix}_{current_depth}\", max_node_radius,\n",
    "                                                                overlap_factor)\n",
    "        if current_node is None:\n",
    "            return None  # Branch terminated if no available neighbor\n",
    "\n",
    "    if current_depth < max_depth:\n",
    "        num_children = random.randint(0, max_children)  # Random number of children for this node\n",
    "        for _ in range(num_children):\n",
    "            generate_random_spatial_tree_diffusion5(\n",
    "                max_depth, max_children, max_node_radius, initial_x, initial_y, node_prefix,\n",
    "                current_depth + 1, current_node, occupied_squares_set, diffusion_nodes_info, overlap_factor\n",
    "            )\n",
    "    return current_node\n",
    "\n",
    "\n",
    "# --- ILLUMINATION AND FITNESS FUNCTIONS ---\n",
    "\n",
    "def get_illuminated_area5(tree):\n",
    "    \"\"\"\n",
    "    Calculates the set of (x,y) integer coordinates illuminated by the tree using the\n",
    "    algebraic approach described in the text, based on intersections with horizontal\n",
    "    and vertical grid lines.\n",
    "    \"\"\"\n",
    "    if tree is None:\n",
    "        return set()\n",
    "\n",
    "    illuminated_coords = set()\n",
    "\n",
    "    all_nodes_in_tree = tree.get_all_nodes()\n",
    "\n",
    "    if not all_nodes_in_tree:\n",
    "        return set()\n",
    "\n",
    "    for node_i in all_nodes_in_tree:\n",
    "        circle_center_x = node_i.x + 0.5\n",
    "        circle_center_y = node_i.y + 0.5\n",
    "        r_sq = node_i.radius ** 2\n",
    "\n",
    "        # 1. Add the cell containing the center of the circle\n",
    "        illuminated_coords.add((math.floor(circle_center_x), math.floor(circle_center_y)))\n",
    "\n",
    "        # 2. Horizontal Scan: Check intersections with horizontal grid lines\n",
    "        for y_line in range(math.floor(circle_center_y - node_i.radius),\n",
    "                            math.ceil(circle_center_y + node_i.radius) + 1):\n",
    "            dy = y_line - circle_center_y\n",
    "            discriminant = r_sq - dy * dy\n",
    "\n",
    "            if discriminant >= 0:\n",
    "                dx = math.sqrt(discriminant)\n",
    "                x_min_intersect = circle_center_x - dx\n",
    "                x_max_intersect = circle_center_x + dx\n",
    "\n",
    "                for ix in range(math.floor(x_min_intersect), math.floor(x_max_intersect) + 1):\n",
    "                    illuminated_coords.add((ix, y_line))\n",
    "                    illuminated_coords.add((ix, y_line - 1))\n",
    "\n",
    "        # 3. Vertical Scan: Check intersections with vertical grid lines\n",
    "        for x_line in range(math.floor(circle_center_x - node_i.radius),\n",
    "                            math.ceil(circle_center_x + node_i.radius) + 1):\n",
    "            dx = x_line - circle_center_x\n",
    "            discriminant = r_sq - dx * dx\n",
    "\n",
    "            if discriminant >= 0:\n",
    "                dy = math.sqrt(discriminant)\n",
    "                y_min_intersect = circle_center_y - dy\n",
    "                y_max_intersect = circle_center_y + dy\n",
    "\n",
    "                for iy in range(math.floor(y_min_intersect), math.floor(y_max_intersect) + 1):\n",
    "                    illuminated_coords.add((x_line, iy))\n",
    "                    illuminated_coords.add((x_line - 1, iy))\n",
    "\n",
    "    return illuminated_coords\n",
    "\n",
    "\n",
    "def calculate_fitness_illumination5(candidate_tree_root, target_illuminated_area):\n",
    "    \"\"\"\n",
    "    Calculates fitness based on the symmetric difference between illuminated areas.\n",
    "    Fitness is 1.0 for a perfect match, and decreases as symmetric difference increases.\n",
    "    \"\"\"\n",
    "    if candidate_tree_root is None:\n",
    "        # If the tree generation failed, assign a very low fitness\n",
    "        return 0.0001  # A small non-zero value to avoid division by zero issues later\n",
    "\n",
    "    candidate_illuminated_area = get_illuminated_area5(candidate_tree_root)\n",
    "\n",
    "    # Symmetric difference: (A U B) - (A intersect B)\n",
    "    # Or, the elements in A, but not B, plus elements in B but not A.\n",
    "    symmetric_difference = candidate_illuminated_area.symmetric_difference(target_illuminated_area)\n",
    "\n",
    "    # Union size: used for normalization\n",
    "    union_size = len(candidate_illuminated_area.union(target_illuminated_area))\n",
    "\n",
    "    if union_size == 0:\n",
    "        if not target_illuminated_area and not candidate_illuminated_area:\n",
    "            return 1.0  # Perfect match if both are empty\n",
    "        else:\n",
    "            return 0.0001  # Should not happen if target is non-empty, but handles cases where both are empty but expected non-empty\n",
    "\n",
    "    # Fitness is 1.0 - (len(symmetric_difference) / union_size)\n",
    "    # This gives 1.0 for a perfect match (symmetric_difference_area = 0)\n",
    "    # and approaches 0.0 for large differences.\n",
    "    fitness = 1.0 - (len(symmetric_difference) / union_size)\n",
    "    return max(0.0001, fitness)  # Ensure fitness is always positive\n",
    "\n",
    "\n",
    "# --- la EvoluciónARY ALGORITHM COMPONENTS ---\n",
    "\n",
    "def create_initial_population_diffusion5(pop_size, max_depth, max_children, max_node_radius, initial_x, initial_y,\n",
    "                                         overlap_factor, node_prefix=\"Individual\"):\n",
    "    population = []\n",
    "    for i in range(pop_size):\n",
    "        # Each tree needs its own occupied_squares_set and diffusion_nodes_info for independent generation\n",
    "        occupied_squares = set()\n",
    "        diffusion_info = []\n",
    "        tree = generate_random_spatial_tree_diffusion5(\n",
    "            max_depth=max_depth, max_children=max_children, max_node_radius=max_node_radius,\n",
    "            initial_x=initial_x, initial_y=initial_y, node_prefix=f\"{node_prefix}_{i}\",\n",
    "            occupied_squares_set=occupied_squares, diffusion_nodes_info=diffusion_info, overlap_factor=overlap_factor\n",
    "        )\n",
    "        if tree:\n",
    "            population.append(tree)\n",
    "    # If not enough trees generated due to space constraints, fill with more random ones (or handle error)\n",
    "    while len(population) < pop_size:\n",
    "        occupied_squares = set()\n",
    "        diffusion_info = []\n",
    "        new_tree = generate_random_spatial_tree_diffusion5(\n",
    "            max_depth=max_depth, max_children=max_children, max_node_radius=max_node_radius,\n",
    "            initial_x=initial_x, initial_y=initial_y, node_prefix=f\"RandomFill_{len(population)}\",\n",
    "            occupied_squares_set=occupied_squares, diffusion_nodes_info=diffusion_info,\n",
    "            overlap_factor=overlap_factor\n",
    "        )\n",
    "        if new_tree:\n",
    "            population.append(new_tree)\n",
    "        else:\n",
    "            # Handle case where a new tree could not be generated\n",
    "            # This might happen if parameters are too restrictive or space is exhausted\n",
    "            break  # Exit if we can't generate enough valid trees\n",
    "    return population\n",
    "\n",
    "\n",
    "def select_parents_diffusion5(population, fitness_scores, num_parents):\n",
    "    parents = []\n",
    "    # Use roulette wheel selection or tournament selection. Tournament is generally robust.\n",
    "    for _ in range(num_parents):\n",
    "        tournament_size = min(5, len(population))\n",
    "        if tournament_size == 0:\n",
    "            break\n",
    "        tournament_candidates = random.sample(list(zip(population, fitness_scores)), tournament_size)\n",
    "        winner = max(tournament_candidates, key=lambda x: x[1])[0]\n",
    "        parents.append(winner)\n",
    "    return parents\n",
    "\n",
    "def update_nodes_info_for_tree5(tree_root):\n",
    "    # This function rebuilds the occupied_squares_set and diffusion_nodes_info for a tree\n",
    "    # This is necessary after deepcopy, mutation, or crossover to ensure consistency\n",
    "    # for the mutated/crossed-over part.\n",
    "    new_occupied_squares_set = set()\n",
    "    new_diffusion_nodes_info = []\n",
    "\n",
    "    # Traverse the tree to collect all current node info\n",
    "    stack = [tree_root]\n",
    "    visited = set()\n",
    "    while stack:\n",
    "        node = stack.pop()\n",
    "        # Avoid processing same node multiple times if tree structure has cycles (unlikely here but good practice)\n",
    "        if node in visited: continue\n",
    "        visited.add(node)\n",
    "\n",
    "        new_occupied_squares_set.add((node.x, node.y))\n",
    "        new_diffusion_nodes_info.append((node.x, node.y, node.radius))\n",
    "        for child in node.children:\n",
    "            stack.append(child)\n",
    "\n",
    "    # Now, update all nodes in the tree with the new references\n",
    "    stack = [tree_root]\n",
    "    visited.clear()\n",
    "    while stack:\n",
    "        node = stack.pop()\n",
    "        if node in visited: continue\n",
    "        visited.add(node)\n",
    "\n",
    "        node.occupied_squares_set = new_occupied_squares_set\n",
    "        node.diffusion_nodes_info = new_diffusion_nodes_info\n",
    "        for child in node.children:\n",
    "            stack.append(child)\n",
    "    return tree_root\n",
    "\n",
    "\n",
    "def mutate_tree_diffusion5(tree_root, max_depth, max_children, max_node_radius, mutation_rate, overlap_factor):\n",
    "    mutated_tree = copy.deepcopy(tree_root)  # Work on a deep copy\n",
    "    mutated_tree = update_nodes_info_for_tree5(mutated_tree) # Ensure info sets are consistent after deepcopy\n",
    "\n",
    "    all_nodes = mutated_tree.get_all_nodes()\n",
    "\n",
    "    if not all_nodes:\n",
    "        return mutated_tree\n",
    "\n",
    "    node_to_mutate = random.choice(all_nodes)\n",
    "\n",
    "    # Mutation 1: Add a child\n",
    "    if random.random() < mutation_rate:\n",
    "        # Ensure node_to_mutate has correct references to the tree's global sets\n",
    "        # which should be updated by update_nodes_info_for_tree already.\n",
    "        node_to_mutate.add_child_in_random_neighbor(\"MutatedChild\", max_node_radius, overlap_factor)\n",
    "        mutated_tree = update_nodes_info_for_tree5(mutated_tree) # Re-update after potential addition\n",
    "\n",
    "    # Mutation 2: Change node radius\n",
    "    if random.random() < mutation_rate:\n",
    "        node_to_mutate.radius = random.uniform(0.5, max_node_radius)\n",
    "\n",
    "    # Mutation 3: Remove a child (if any)\n",
    "    if random.random() < mutation_rate and node_to_mutate.children:\n",
    "        child_to_remove = random.choice(node_to_mutate.children)\n",
    "        node_to_mutate.children.remove(child_to_remove)\n",
    "        mutated_tree = update_nodes_info_for_tree5(mutated_tree) # Re-update after potential removal\n",
    "\n",
    "    return mutated_tree\n",
    "\n",
    "\n",
    "def crossover_trees_diffusion5(parent1_root, parent2_root, crossover_rate, max_node_radius, overlap_factor):\n",
    "    if random.random() > crossover_rate:\n",
    "        return copy.deepcopy(parent1_root), copy.deepcopy(parent2_root)\n",
    "\n",
    "    child1_root = copy.deepcopy(parent1_root)\n",
    "    child2_root = copy.deepcopy(parent2_root)\n",
    "\n",
    "    # Ensure consistency after deepcopy for both children\n",
    "    child1_root = update_nodes_info_for_tree5(child1_root)\n",
    "    child2_root = update_nodes_info_for_tree5(child2_root)\n",
    "\n",
    "    all_nodes_child1 = child1_root.get_all_nodes()\n",
    "    all_nodes_child2 = child2_root.get_all_nodes()\n",
    "\n",
    "    # Ensure there are nodes to swap beyond just the root\n",
    "    if len(all_nodes_child1) < 2 or len(all_nodes_child2) < 2:\n",
    "        return child1_root, child2_root\n",
    "\n",
    "    # Choose random nodes (not roots) to be crossover points\n",
    "    cross_point1 = random.choice([n for n in all_nodes_child1 if n != child1_root])\n",
    "    cross_point2 = random.choice([n for n in all_nodes_child2 if n != child2_root])\n",
    "\n",
    "    # Find parent of cross_point1 in child1_root tree\n",
    "    parent_cross_point1 = None\n",
    "    for node in all_nodes_child1:\n",
    "        if cross_point1 in node.children:\n",
    "            parent_cross_point1 = node\n",
    "            break\n",
    "\n",
    "    # Find parent of cross_point2 in child2_root tree\n",
    "    parent_cross_point2 = None\n",
    "    for node in all_nodes_child2:\n",
    "        if cross_point2 in node.children:\n",
    "            parent_cross_point2 = node\n",
    "            break\n",
    "\n",
    "    if parent_cross_point1 and parent_cross_point2:  # Perform swap\n",
    "        # Remove subtrees from parents\n",
    "        parent_cross_point1.children.remove(cross_point1)\n",
    "        parent_cross_point2.children.remove(cross_point2)\n",
    "\n",
    "        # Attach swapped subtrees\n",
    "        parent_cross_point1.add_child(cross_point2)\n",
    "        parent_cross_point2.add_child(cross_point1)\n",
    "\n",
    "        # After crossover, the `occupied_squares_set` and `diffusion_nodes_info` of the affected trees\n",
    "        # need to be re-synced across all nodes within each child tree.\n",
    "        child1_root = update_nodes_info_for_tree5(child1_root)\n",
    "        child2_root = update_nodes_info_for_tree5(child2_root)\n",
    "\n",
    "    return child1_root, child2_root\n",
    "\n",
    "\n",
    "# --- PLOTTING FUNCTIONS ---\n",
    "\n",
    "def plot_illuminated_area5(ax, illuminated_coords, title, color='blue', alpha=0.5):\n",
    "    ax.set_aspect('equal', adjustable='box')\n",
    "    if not illuminated_coords:\n",
    "        ax.set_title(title)\n",
    "        ax.grid(True)\n",
    "        return\n",
    "\n",
    "    for x, y in illuminated_coords:\n",
    "        rect = patches.Rectangle((x, y), 1, 1, facecolor=color, alpha=alpha, edgecolor='black', linewidth=0.5)\n",
    "        ax.add_patch(rect)\n",
    "\n",
    "    min_x = min(c[0] for c in illuminated_coords) - 1\n",
    "    max_x = max(c[0] for c in illuminated_coords) + 2\n",
    "    min_y = min(c[1] for c in illuminated_coords) - 1\n",
    "    max_y = max(c[1] for c in illuminated_coords) + 2\n",
    "\n",
    "    ax.set_xlim(min_x, max_x)\n",
    "    ax.set_ylim(min_y, max_y)\n",
    "    ax.set_xticks(range(int(min_x), int(max_x)))\n",
    "    ax.set_yticks(range(int(min_y), int(max_y)))\n",
    "    ax.grid(True)\n",
    "    ax.set_title(title)\n",
    "\n",
    "\n",
    "def plot_tree_with_illumination5(tree_root, illuminated_coords, ax, tree_color='lightblue', diff_color='red', title=\"\"):\n",
    "\n",
    "    # Plot illuminated area first (background)\n",
    "    for x, y in illuminated_coords:\n",
    "        rect = patches.Rectangle((x, y), 1, 1, facecolor=diff_color, alpha=0.5,\n",
    "                                 zorder=0)  # Changed alpha for more transparency\n",
    "        ax.add_patch(rect)\n",
    "\n",
    "    if tree_root is None:\n",
    "        return\n",
    "\n",
    "    # Plot tree nodes and their diffusion circles\n",
    "    all_nodes = tree_root.get_all_nodes()\n",
    "    for node in all_nodes:\n",
    "        # Plot the square representing the cell\n",
    "        rect = patches.Rectangle((node.x, node.y), 1, 1, facecolor=tree_color, edgecolor='black', linewidth=1, zorder=1)\n",
    "        ax.add_patch(rect)\n",
    "        ax.text(node.x + 0.5, node.y + 0.5, node.value.split('_')[-1], ha='center', va='center', color='darkblue',\n",
    "                fontsize=7, zorder=2)\n",
    "\n",
    "        # Plot the circle representing the radius of influence\n",
    "        circle = patches.Circle((node.x + 0.5, node.y + 0.5), node.radius, color='red', alpha=0.2, zorder=2)\n",
    "        ax.add_patch(circle)\n",
    "\n",
    "    # Draw lines connecting parent to children\n",
    "    for node in all_nodes:\n",
    "        for child in node.children:\n",
    "            ax.plot([node.x + 0.5, child.x + 0.5], [node.y + 0.5, child.y + 0.5], 'k--', linewidth=0.8, zorder=3)\n",
    "\n",
    "    ax.set_aspect('equal', adjustable='box')\n",
    "    ax.set_title(title)\n",
    "\n",
    "    # Set plot limits based on the illuminated coordinates\n",
    "    if illuminated_coords:\n",
    "        all_x = [c[0] for c in illuminated_coords]\n",
    "        all_y = [c[1] for c in illuminated_coords]\n",
    "\n",
    "        min_x_val = min(all_x) - 1\n",
    "        max_x_val = max(all_x) + 2\n",
    "        min_y_val = min(all_y) - 1\n",
    "        max_y_val = max(all_y) + 2\n",
    "\n",
    "        ax.set_xlim(min_x_val, max_x_val)\n",
    "        ax.set_ylim(min_y_val, max_y_val)\n",
    "        ax.set_xticks(range(int(min_x_val), int(max_x_val)))\n",
    "        ax.set_yticks(range(int(min_y_val), int(max_y_val)))\n",
    "    ax.grid(True)\n",
    "\n",
    "\n",
    "# --- MAIN la EvoluciónARY SIMULATION LOOP ---\n",
    "\n",
    "def run_evolutionary_lighting_lab5(target_tree_params, ga_params):\n",
    "    experiment_id = datetime.now().strftime(\"%Y%m%d_%H%M%S\")\n",
    "    print(f\"\\n--- Starting Experiment: {experiment_id} ---\")\n",
    "    print(\"Target Tree Parameters:\")\n",
    "    for key, value in target_tree_params.items():\n",
    "        print(f\"  {key}: {value}\")\n",
    "    print(\"\\nGenetic Algorithm Parameters:\")\n",
    "    for key, value in ga_params.items():\n",
    "        print(f\"  {key}: {value}\")\n",
    "\n",
    "    # 1. Generate Target Tree and its Illuminated Area\n",
    "    print(\"\\n--- Generating Target Tree ---\")\n",
    "    random.seed(ga_params['seed'] + 1)  # Use a different seed for target generation\n",
    "    target_occupied_squares = set()\n",
    "    target_diffusion_info = []\n",
    "    target_tree_root = generate_random_spatial_tree_diffusion5(\n",
    "        max_depth=target_tree_params['max_depth'], max_children=target_tree_params['max_children'],\n",
    "        max_node_radius=target_tree_params['max_node_radius'], initial_x=0, initial_y=0,\n",
    "        node_prefix=\"Target\", occupied_squares_set=target_occupied_squares,\n",
    "        diffusion_nodes_info=target_diffusion_info, overlap_factor=target_tree_params['overlap_factor']\n",
    "    )\n",
    "\n",
    "    if not target_tree_root:\n",
    "        print(\"Failed to generate target tree. Exiting.\")\n",
    "        return None, None, None, None, []\n",
    "\n",
    "    target_illuminated_area = get_illuminated_area5(target_tree_root)\n",
    "    print(\n",
    "        f\"Target Tree Generated with {len(target_tree_root.get_all_nodes())} nodes. Illuminated area size: {len(target_illuminated_area)}\")\n",
    "\n",
    "    # 2. Initialize Population\n",
    "    random.seed(ga_params['seed'])  # Reset seed for GA population generation\n",
    "    print(f\"\\n--- Initializing Population of {ga_params['pop_size']} Trees ---\")\n",
    "    population = create_initial_population_diffusion5(\n",
    "        pop_size=ga_params['pop_size'], max_depth=ga_params['max_depth'], max_children=ga_params['max_children'],\n",
    "        max_node_radius=ga_params['max_node_radius'], initial_x=0, initial_y=0,\n",
    "        overlap_factor=ga_params['overlap_factor']\n",
    "    )\n",
    "    print(f\"Population initialized with {len(population)} individuals.\")\n",
    "\n",
    "    best_tree_overall = None\n",
    "    best_fitness_overall = -1.0\n",
    "    history = []\n",
    "\n",
    "    # 4. la Evoluciónary Loop\n",
    "    print(f\"\\n--- Starting la Evoluciónary Loop for {ga_params['generations']} Generations ---\")\n",
    "    for generation in range(ga_params['generations']):\n",
    "        fitness_scores = [calculate_fitness_illumination5(tree, target_illuminated_area) for tree in population]\n",
    "\n",
    "        current_best_fitness = max(fitness_scores)\n",
    "        current_best_tree = population[np.argmax(fitness_scores)]\n",
    "\n",
    "        if current_best_fitness > best_fitness_overall:\n",
    "            best_fitness_overall = current_best_fitness\n",
    "            best_tree_overall = copy.deepcopy(current_best_tree)  # Deepcopy to save the best tree\n",
    "            best_tree_overall = update_nodes_info_for_tree5(best_tree_overall) # Ensure consistency\n",
    "\n",
    "        history.append(current_best_fitness)\n",
    "\n",
    "        print(\n",
    "            f\"Generation {generation + 1}/{ga_params['generations']}: Best Fitness = {current_best_fitness:.4f} (Overall Best: {best_fitness_overall:.4f})\")\n",
    "\n",
    "        if best_fitness_overall >= 0.999:  # Almost perfect match\n",
    "            print(\"Target illumination achieved (or very close)! Stopping la Evolución.\")\n",
    "            break\n",
    "\n",
    "        # Selection\n",
    "        parents = select_parents_diffusion5(population, fitness_scores, ga_params['pop_size'] // 2)\n",
    "\n",
    "        # Create next generation\n",
    "        next_population = []\n",
    "        # Elitism: Keep the best individual from the current generation\n",
    "        if best_tree_overall and current_best_fitness == best_fitness_overall:  # Only if it's the current best in this generation\n",
    "            next_population.append(copy.deepcopy(current_best_tree))\n",
    "\n",
    "        while len(next_population) < ga_params['pop_size']:\n",
    "            if len(parents) < 2:  # Not enough parents for crossover, fill with new random trees\n",
    "                occupied_squares = set()\n",
    "                diffusion_info = []\n",
    "                new_tree = generate_random_spatial_tree_diffusion(\n",
    "                    max_depth=ga_params['max_depth'], max_children=ga_params['max_children'],\n",
    "                    max_node_radius=ga_params['max_node_radius'], initial_x=0, initial_y=0,\n",
    "                    node_prefix=f\"RandomFill_{len(next_population)}\",\n",
    "                    occupied_squares_set=occupied_squares, diffusion_nodes_info=diffusion_info,\n",
    "                    overlap_factor=ga_params['overlap_factor']\n",
    "                )\n",
    "                if new_tree:\n",
    "                    next_population.append(new_tree)\n",
    "                continue\n",
    "\n",
    "            # Randomly pick two parents (can be the same parent multiple times with replacement for simplicity)\n",
    "            p1 = random.choice(parents)\n",
    "            p2 = random.choice(parents)\n",
    "\n",
    "            # Crossover\n",
    "            child1, child2 = crossover_trees_diffusion5(p1, p2, ga_params['crossover_rate'],\n",
    "                                                        ga_params['max_node_radius'], ga_params['overlap_factor'])\n",
    "\n",
    "            # Mutation\n",
    "            mutated_child1 = mutate_tree_diffusion5(child1, ga_params['max_depth'], ga_params['max_children'],\n",
    "                                                    ga_params['max_node_radius'], ga_params['mutation_rate'],\n",
    "                                                    ga_params['overlap_factor'])\n",
    "            mutated_child2 = mutate_tree_diffusion5(child2, ga_params['max_depth'], ga_params['max_children'],\n",
    "                                                    ga_params['max_node_radius'], ga_params['mutation_rate'],\n",
    "                                                    ga_params['overlap_factor'])\n",
    "\n",
    "            next_population.append(mutated_child1)\n",
    "            if len(next_population) < ga_params['pop_size']:\n",
    "                next_population.append(mutated_child2)\n",
    "\n",
    "        population = next_population[:ga_params['pop_size']]\n",
    "\n",
    "    print(\"\\n--- la Evolución Finished ---\")\n",
    "    print(f\"Final Best Fitness: {best_fitness_overall:.4f}\")\n",
    "\n",
    "    return target_tree_root, target_illuminated_area, best_tree_overall, best_fitness_overall, history\n",
    "\n",
    "\n",
    "# --- MAIN EXECUTION ---\n",
    "\n",
    "if __name__ == \"__main__\":\n",
    "    # Parameters for the target tree generation\n",
    "    TARGET_TREE_PARAMS = {\n",
    "        'max_depth': 100,\n",
    "        'max_children': 3,\n",
    "        'max_node_radius': 3.0,\n",
    "        'overlap_factor': 0.7\n",
    "    }\n",
    "\n",
    "    # Parameters for the Genetic Algorithm\n",
    "    GA_PARAMS = {\n",
    "        'seed': 679182,\n",
    "        'pop_size': 200,\n",
    "        'generations': 500,\n",
    "        'max_depth': 100,\n",
    "        'max_children': 3,\n",
    "        'max_node_radius': 3.0,\n",
    "        'mutation_rate': 0.1,\n",
    "        'crossover_rate': 0.7,\n",
    "        'overlap_factor': 0.7,\n",
    "        'illumination_resolution': 1  # This parameter is no longer used by get_illuminated_area\n",
    "    }\n",
    "\n",
    "    target_tree, target_area, evolved_best_tree, evolved_best_fitness, history = run_evolutionary_lighting_lab5(\n",
    "        TARGET_TREE_PARAMS, GA_PARAMS)\n",
    "\n",
    "    # --- Plotting Results ---\n",
    "    if target_tree and evolved_best_tree:\n",
    "        fig, axes = plt.subplots(1, 3, figsize=(24, 8))\n",
    "\n",
    "        # Plot 1: Target Tree Structure and its Illumination\n",
    "        plot_tree_with_illumination5(target_tree, target_area, axes[0], tree_color='skyblue', diff_color='green',\n",
    "                                     title=\"Target Tree and Illuminated Area\")\n",
    "\n",
    "        # Plot 2: Best Evolved Tree Structure and its Illumination\n",
    "        evolved_best_area = get_illuminated_area5(evolved_best_tree)\n",
    "        plot_tree_with_illumination5(evolved_best_tree, evolved_best_area, axes[1], tree_color='lightcoral',\n",
    "                                     diff_color='purple',\n",
    "                                     title=f\"Best Evolved Tree (Fitness: {evolved_best_fitness:.4f})\")\n",
    "\n",
    "        # Plot 3: Symmetric Difference Area\n",
    "        symmetric_diff_area = target_area.symmetric_difference(evolved_best_area)\n",
    "        plot_illuminated_area5(axes[2], symmetric_diff_area,\n",
    "                               title=f\"Symmetric Difference (Error Area: {len(symmetric_diff_area)})\")\n",
    "\n",
    "        plt.tight_layout()\n",
    "        plt.show()\n",
    "\n",
    "        # Plot Fitness History\n",
    "        plt.figure(figsize=(10, 6))\n",
    "        plt.plot(history, marker='o', linestyle='-', color='blue')\n",
    "        plt.title('Best Fitness Progression Over Generations')\n",
    "        plt.xlabel('Generation')\n",
    "        plt.ylabel('Fitness')\n",
    "        plt.grid(True)\n",
    "        plt.show()\n",
    "    else:\n",
    "        print(\"No plot\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "9xDMw5I3O_zr"
   },
   "source": [
    "**Ejercicio.** Juega con el programa para ver cómo funciona. ¿Logra la Evolución la perfección en cada caso de complejidad?\n",
    ">\n",
    "> *Respuesta.* La perfección se alcanza en menos de 500 generaciones para un caso simple del árbol objetivo con parámetros de complejidad `max_depth = 3`, `max_children = 2`. La perfección también se alcanzó después de un período muy largo de éxtasis para el caso `max_depth = 7`, `max_children = 3`. Pasó lo mismo para el caso `max_depth = 10`, `max_children = 3`. Pasó lo mismo para el caso `max_depth = 20`, `max_children = 3`. Pasó lo mismo para el caso `max_depth = 50`, `max_children = 3`.  El tiempo necesario para correr 500 generacione fue mucho más largo para el caso `max_depth = 100`, `max_children = 3`.\n",
    "\n",
    "**Protest.** El programa anterior no tiene un indicador preciso de complejidad, como podría ser el número real de nodos. Esto es comprensible porque se puede suponer que el número de hijos y la arquitectura final de los árboles deben ser aleatorios. Pero el resultado no es transparente. Por ejemplo, para un caso con `max_depth = 100`, `max_children = 3`, el número real de nodos era 8, y los números de hijos eran 0, 1 y 2.\n",
    ">\n",
    "> *Respuesta.* La crítica es correcta. Para atacarla, sin perder la variabilidad debida a la aleatoriedad, necesitamos estadísticas.\n",
    "\n",
    "**Un regalo de Gemini.**  El siguiente programa produce un gráfico de la dependencia del costo en número de generaciones para lograr una aptitud de 0,9999 como función del número promedio de nodos en la población. La aleatoriedad no se pierde ni se restringe porque se puede fijar un número de generaciones para saber hasta dónde ha aumentado la aptitud dependiendo de los indicadores de complejidad, profundidad máxima y número de hijos que determinan el árbol objetivo.  El programa funciona bien para valores bajos de profundidad máxima."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 1000
    },
    "executionInfo": {
     "elapsed": 89233,
     "status": "ok",
     "timestamp": 1788353917297,
     "user": {
      "displayName": "jose rodriguez",
      "userId": "08454562216435392883"
     },
     "user_tz": 300
    },
    "id": "HwXhb4PWKgJ1",
    "outputId": "efa3154b-2448-42bb-a901-d830830d4de5"
   },
   "outputs": [],
   "source": [
    "# Program cost_to_match_target_tree_with_n_nodes.py\n",
    "# By Gemini 2.5 Flash\n",
    "\n",
    "import random\n",
    "import matplotlib.pyplot as plt\n",
    "import matplotlib.patches as patches\n",
    "import numpy as np\n",
    "import copy  # For deep copying trees during reproduction and mutation\n",
    "import sys  # Import sys module to adjust recursion limit\n",
    "import math  # For math.floor, math.ceil, math.sqrt\n",
    "import re # Regular expressions, for finding patterns inside strings\n",
    "from datetime import datetime # For generating unique experiment IDs\n",
    "\n",
    "sys.setrecursionlimit(3000)  # Increase the recursion limit for potentially deep trees\n",
    "\n",
    "\n",
    "# --- SPATIAL TREE NODE FOR DIFFUSION --- #\n",
    "\n",
    "class SpatialTreeNode_Evolution_Diffusion6:\n",
    "    def __init__(self, value, x, y, radius, occupied_squares_set, diffusion_nodes_info):\n",
    "        self.value = value\n",
    "        self.x = x\n",
    "        self.y = y\n",
    "        self.children = []\n",
    "\n",
    "        self.radius = radius\n",
    "        self.occupied_squares_set = occupied_squares_set  # Reference to the set of squares occupied by *this* tree's nodes\n",
    "        self.diffusion_nodes_info = diffusion_nodes_info  # Reference to the list of (x,y,radius) for *all* nodes in *this* tree\n",
    "\n",
    "        self.occupied_squares_set.add((x, y))  # Add current node's (x,y) square to the set\n",
    "        self.diffusion_nodes_info.append((x, y, radius))  # Add current node's (x,y,radius) to the list\n",
    "\n",
    "    def add_child(self, child_node):\n",
    "        if not isinstance(child_node, SpatialTreeNode_Evolution_Diffusion6):\n",
    "            raise TypeError(\"Child must be an instance of SpatialTreeNode_Evolution_Diffusion\")\n",
    "        self.children.append(child_node)\n",
    "\n",
    "    def get_neighboring_coordinates(self):\n",
    "        neighbors = []\n",
    "        for dx in [-1, 0, 1]:\n",
    "            for dy in [-1, 0, 1]:\n",
    "                if dx == 0 and dy == 0:\n",
    "                    continue  # Exclude the current square itself\n",
    "                neighbors.append((self.x + dx, self.y + dy))\n",
    "        return neighbors\n",
    "\n",
    "    def _is_diffusion_overlapping_local(self, potential_nx, potential_ny, potential_radius, overlap_factor):\n",
    "        \"\"\"\n",
    "        Checks if a potential new node's diffusion circle overlaps \"too much\" with EXISTING nodes IN THE SAME TREE.\n",
    "        \"Too much overlap\" is defined by the overlap_factor.\n",
    "        \"\"\"\n",
    "        potential_center_x, potential_center_y = potential_nx + 0.5, potential_ny + 0.5\n",
    "\n",
    "        for ex, ey, er in self.diffusion_nodes_info:\n",
    "            # Skip checking against self if self is already in diffusion_nodes_info\n",
    "            if (ex, ey) == (self.x, self.y):\n",
    "                continue\n",
    "\n",
    "            existing_center_x, existing_center_y = ex + 0.5, ey + 0.5\n",
    "\n",
    "            # Calculate distance between centers\n",
    "            distance = np.sqrt((potential_center_x - existing_center_x) ** 2 + (potential_ny - existing_center_y) ** 2)\n",
    "\n",
    "            # Check for significant overlap\n",
    "            # If distance is less than a fraction of the sum of radii, it's too much overlap.\n",
    "            if distance < overlap_factor * (potential_radius + er):\n",
    "                return True  # Significant overlap detected\n",
    "        return False\n",
    "\n",
    "    def add_child_in_random_neighbor(self, child_value_prefix, max_node_radius, overlap_factor):\n",
    "        coordinates_neighbors = self.get_neighboring_coordinates()\n",
    "\n",
    "        # First, filter for unoccupied grid squares *within this tree*\n",
    "        available_square_neighbors = [coord for coord in coordinates_neighbors if\n",
    "                                      coord not in self.occupied_squares_set]\n",
    "\n",
    "        valid_child_candidates = []  # Store (nx, ny, child_radius) for candidates that pass overlap check\n",
    "\n",
    "        for nx, ny in available_square_neighbors:\n",
    "            # Generate potential radius for this child, ensuring it's not too large or small\n",
    "            child_radius = random.uniform(0.5, max_node_radius)\n",
    "            if not self._is_diffusion_overlapping_local(nx, ny, child_radius, overlap_factor):\n",
    "                valid_child_candidates.append((nx, ny, child_radius))\n",
    "\n",
    "        if not valid_child_candidates:\n",
    "            return None  # No available neighbors that satisfy both square and diffusion overlap conditions\n",
    "\n",
    "        # Choose a random valid candidate\n",
    "        chosen_nx, chosen_ny, chosen_child_radius = random.choice(valid_child_candidates)\n",
    "\n",
    "        child_value = f\"{child_value_prefix}_{len(self.children) + 1}\"\n",
    "        # Create child node; its __init__ will update occupied_squares_set and diffusion_nodes_info\n",
    "        child_node = SpatialTreeNode_Evolution_Diffusion6(child_value, chosen_nx, chosen_ny, chosen_child_radius,\n",
    "                                                            self.occupied_squares_set, self.diffusion_nodes_info)\n",
    "        self.add_child(child_node)\n",
    "        return child_node\n",
    "\n",
    "    def get_all_nodes(self):\n",
    "        all_nodes = []\n",
    "        stack = [self]\n",
    "        while stack:\n",
    "            node = stack.pop()\n",
    "            all_nodes.append(node)\n",
    "            for child in node.children:\n",
    "                stack.append(child)\n",
    "        return all_nodes\n",
    "\n",
    "    def __repr__(self):\n",
    "        return f\"SpatialTreeNode_Evolution_Diffusion(value={self.value}, x={self.x}, y={self.y}, R={self.radius:.2f}, children={{[child.value for child in self.children]!r}})\"\n",
    "\n",
    "\n",
    "# --- TREE GENERATION --- #\n",
    "\n",
    "def generate_random_spatial_tree_diffusion6(\n",
    "        max_depth, max_children, max_node_radius, initial_x, initial_y, node_prefix=\"Node\",\n",
    "        current_depth=0, parent_node=None, occupied_squares_set=None, diffusion_nodes_info=None, overlap_factor=0.7\n",
    "):\n",
    "    if occupied_squares_set is None:\n",
    "        occupied_squares_set = set()  # Initialize a new set for this tree's square coordinates\n",
    "    if diffusion_nodes_info is None:\n",
    "        diffusion_nodes_info = []  # Initialize a new list for this tree's node (x,y,radius) information\n",
    "\n",
    "    # Recursive approach for random tree generation\n",
    "    if parent_node is None:\n",
    "        node_value = f\"{node_prefix}_Root_{random.randint(0, 99)}\"\n",
    "        initial_radius = random.uniform(0.5, max_node_radius)\n",
    "        current_node = SpatialTreeNode_Evolution_Diffusion6(node_value, initial_x, initial_y, initial_radius, occupied_squares_set, diffusion_nodes_info)\n",
    "    else:\n",
    "        current_node = parent_node.add_child_in_random_neighbor(f\"{node_prefix}_{current_depth}\", max_node_radius, overlap_factor)\n",
    "        if current_node is None:\n",
    "            return None # Branch terminated if no available neighbor\n",
    "\n",
    "    if current_depth < max_depth:\n",
    "        num_children = random.randint(0, max_children) # Random number of children for this node\n",
    "        for _ in range(num_children):\n",
    "            generate_random_spatial_tree_diffusion6(\n",
    "                max_depth, max_children, max_node_radius, initial_x, initial_y, node_prefix,\n",
    "                current_depth + 1, current_node, occupied_squares_set, diffusion_nodes_info, overlap_factor\n",
    "            )\n",
    "    return current_node\n",
    "\n",
    "\n",
    "def update_nodes_info_for_tree6(tree_root):\n",
    "    # This function rebuilds the occupied_squares_set and diffusion_nodes_info for a tree\n",
    "    # This is necessary after deepcopy, mutation, or crossover to ensure consistency\n",
    "    # for the mutated/crossed-over part.\n",
    "    if tree_root is None:\n",
    "        return None\n",
    "\n",
    "    new_occupied_squares_set = set()\n",
    "    new_diffusion_nodes_info = []\n",
    "\n",
    "    # Traverse the tree to collect all current node info\n",
    "    stack = [tree_root]\n",
    "    visited = set()\n",
    "    while stack:\n",
    "        node = stack.pop()\n",
    "        # Avoid processing same node multiple times if tree structure has cycles (unlikely here but good practice)\n",
    "        if node in visited: continue\n",
    "        visited.add(node)\n",
    "\n",
    "        new_occupied_squares_set.add((node.x, node.y))\n",
    "        new_diffusion_nodes_info.append((node.x, node.y, node.radius))\n",
    "        for child in node.children:\n",
    "            stack.append(child)\n",
    "\n",
    "    # Now, update all nodes in the tree with the new references\n",
    "    stack = [tree_root]\n",
    "    visited.clear()\n",
    "    while stack:\n",
    "        node = stack.pop()\n",
    "        if node in visited: continue\n",
    "        visited.add(node)\n",
    "\n",
    "        node.occupied_squares_set = new_occupied_squares_set\n",
    "        node.diffusion_nodes_info = new_diffusion_nodes_info\n",
    "        for child in node.children:\n",
    "            stack.append(child)\n",
    "    return tree_root\n",
    "\n",
    "\n",
    "# --- ILLUMINATION AND FITNESS FUNCTIONS --- #\n",
    "\n",
    "def get_illuminated_area6(tree):\n",
    "    \"\"\"\n",
    "    Calculates the set of (x,y) integer coordinates illuminated by the tree using the\n",
    "    algebraic approach described in the text, based on intersections with horizontal\n",
    "    and vertical grid lines.\n",
    "    \"\"\"\n",
    "    if tree is None:\n",
    "        return set()\n",
    "\n",
    "    illuminated_coords = set()\n",
    "    all_nodes_in_tree = tree.get_all_nodes()\n",
    "\n",
    "    if not all_nodes_in_tree:\n",
    "        return set()\n",
    "\n",
    "    for node_i in all_nodes_in_tree:\n",
    "        circle_center_x = node_i.x + 0.5\n",
    "        circle_center_y = node_i.y + 0.5\n",
    "        r_sq = node_i.radius ** 2\n",
    "\n",
    "        # 1. Add the cell containing the center of the circle\n",
    "        illuminated_coords.add((math.floor(circle_center_x), math.floor(circle_center_y)))\n",
    "\n",
    "        # 2. Horizontal Scan: Check intersections with horizontal grid lines\n",
    "        for y_line in range(math.floor(circle_center_y - node_i.radius),\n",
    "                            math.ceil(circle_center_y + node_i.radius) + 1):\n",
    "            dy = y_line - circle_center_y\n",
    "            discriminant = r_sq - dy * dy\n",
    "\n",
    "            if discriminant >= 0:\n",
    "                dx = math.sqrt(discriminant)\n",
    "                x_min_intersect = circle_center_x - dx\n",
    "                x_max_intersect = circle_center_x + dx\n",
    "\n",
    "                for ix in range(math.floor(x_min_intersect), math.floor(x_max_intersect) + 1):\n",
    "                    illuminated_coords.add((ix, y_line))\n",
    "                    illuminated_coords.add((ix, y_line - 1))\n",
    "\n",
    "        # 3. Vertical Scan: Check intersections with vertical grid lines\n",
    "        for x_line in range(math.floor(circle_center_x - node_i.radius),\n",
    "                            math.ceil(circle_center_x + node_i.radius) + 1):\n",
    "            dx = x_line - circle_center_x\n",
    "            discriminant = r_sq - dx * dx\n",
    "\n",
    "            if discriminant >= 0:\n",
    "                dy = math.sqrt(discriminant)\n",
    "                y_min_intersect = circle_center_y - dy\n",
    "                y_max_intersect = circle_center_y + dy\n",
    "\n",
    "                for iy in range(math.floor(y_min_intersect), math.floor(y_max_intersect) + 1):\n",
    "                    illuminated_coords.add((x_line, iy))\n",
    "                    illuminated_coords.add((x_line - 1, iy))\n",
    "\n",
    "    return illuminated_coords\n",
    "\n",
    "\n",
    "def calculate_fitness_illumination6(candidate_tree_root, target_illuminated_area):\n",
    "    \"\"\"\n",
    "    Calculates fitness based on the symmetric difference between illuminated areas.\n",
    "    Fitness is 1.0 for a perfect match, and decreases as symmetric difference increases.\n",
    "    \"\"\"\n",
    "    if candidate_tree_root is None:\n",
    "        # If the tree generation failed, assign a very low fitness\n",
    "        return 0.0001  # A small non-zero value to avoid division by zero issues later\n",
    "\n",
    "    candidate_illuminated_area = get_illuminated_area6(candidate_tree_root)\n",
    "\n",
    "    # Symmetric difference: (A U B) - (A intersect B)\n",
    "    # Or, the elements in A, but not B, plus elements in B but not A.\n",
    "    symmetric_difference = candidate_illuminated_area.symmetric_difference(target_illuminated_area)\n",
    "\n",
    "    # Union size: used for normalization\n",
    "    union_size = len(candidate_illuminated_area.union(target_illuminated_area))\n",
    "\n",
    "    if union_size == 0:\n",
    "        if not target_illuminated_area and not candidate_illuminated_area:\n",
    "            return 1.0  # Perfect match if both are empty\n",
    "        else:\n",
    "            return 0.0001  # Should not happen if target is non-empty, but handles cases where both are empty but expected non-empty\n",
    "\n",
    "    # Fitness is 1.0 - (len(symmetric_difference) / union_size)\n",
    "    # This gives 1.0 for a perfect match (symmetric_difference_area = 0)\n",
    "    # and approaches 0.0 for large differences.\n",
    "    fitness = 1.0 - (len(symmetric_difference) / union_size)\n",
    "    return max(0.0001, fitness)  # Ensure fitness is always positive\n",
    "\n",
    "\n",
    "# --- la EvoluciónARY ALGORITHM COMPONENTS --- #\n",
    "\n",
    "def create_initial_population_diffusion6(pop_size, max_depth, max_children, max_node_radius, initial_x, initial_y,\n",
    "                                         overlap_factor, node_prefix=\"Individual\"):\n",
    "    population = []\n",
    "    for i in range(pop_size):\n",
    "        # Each tree needs its own occupied_squares_set and diffusion_nodes_info for independent generation\n",
    "        occupied_squares = set()\n",
    "        diffusion_info = []\n",
    "        tree = generate_random_spatial_tree_diffusion6(\n",
    "            max_depth=max_depth, max_children=max_children, max_node_radius=max_node_radius,\n",
    "            initial_x=initial_x, initial_y=initial_y, node_prefix=f\"{node_prefix}_{i}\",\n",
    "            occupied_squares_set=occupied_squares, diffusion_nodes_info=diffusion_info, overlap_factor=overlap_factor\n",
    "        )\n",
    "        if tree:\n",
    "            population.append(tree)\n",
    "    # If not enough trees generated due to space constraints, fill with more random ones (or handle error)\n",
    "    while len(population) < pop_size:\n",
    "        occupied_squares = set()\n",
    "        diffusion_info = []\n",
    "        new_tree = generate_random_spatial_tree_diffusion6(\n",
    "            max_depth=max_depth, max_children=max_children, max_node_radius=max_node_radius,\n",
    "            initial_x=initial_x, initial_y=initial_y, node_prefix=f\"RandomFill_{len(population)}\",\n",
    "            occupied_squares_set=occupied_squares, diffusion_nodes_info=diffusion_info,\n",
    "            overlap_factor=overlap_factor\n",
    "        )\n",
    "        if new_tree:\n",
    "            population.append(new_tree)\n",
    "        else:\n",
    "            # Handle case where a new tree could not be generated\n",
    "            # This might happen if parameters are too restrictive or space is exhausted\n",
    "            break  # Exit if we can't generate enough valid trees\n",
    "    return population\n",
    "\n",
    "\n",
    "def select_parents_diffusion6(population, fitness_scores, num_parents):\n",
    "    parents = []\n",
    "    # Use roulette wheel selection or tournament selection. Tournament is generally robust.\n",
    "    for _ in range(num_parents):\n",
    "        tournament_size = min(5, len(population))\n",
    "        if tournament_size == 0:\n",
    "            break\n",
    "        tournament_candidates = random.sample(list(zip(population, fitness_scores)), tournament_size)\n",
    "        winner = max(tournament_candidates, key=lambda x: x[1])[0]\n",
    "        parents.append(winner)\n",
    "    return parents\n",
    "\n",
    "\n",
    "def mutate_tree_diffusion6(tree_root, max_depth, max_children, max_node_radius, mutation_rate, overlap_factor):\n",
    "    mutated_tree = copy.deepcopy(tree_root)  # Work on a deep copy\n",
    "    mutated_tree = update_nodes_info_for_tree6(mutated_tree) # Ensure info sets are consistent after deepcopy\n",
    "\n",
    "    all_nodes = mutated_tree.get_all_nodes()\n",
    "\n",
    "    if not all_nodes:\n",
    "        return mutated_tree\n",
    "\n",
    "    node_to_mutate = random.choice(all_nodes)\n",
    "\n",
    "    # Mutation 1: Add a child\n",
    "    if random.random() < mutation_rate:\n",
    "        # Ensure node_to_mutate has correct references to the tree's global sets\n",
    "        # which should be updated by update_nodes_info_for_tree already.\n",
    "        node_to_mutate.add_child_in_random_neighbor(\"MutatedChild\", max_node_radius, overlap_factor)\n",
    "        mutated_tree = update_nodes_info_for_tree6(mutated_tree) # Re-update after potential addition\n",
    "\n",
    "    # Mutation 2: Change node radius\n",
    "    if random.random() < mutation_rate:\n",
    "        node_to_mutate.radius = random.uniform(0.5, max_node_radius)\n",
    "\n",
    "    # Mutation 3: Remove a child (if any)\n",
    "    if random.random() < mutation_rate and node_to_mutate.children:\n",
    "        child_to_remove = random.choice(node_to_mutate.children)\n",
    "        node_to_mutate.children.remove(child_to_remove)\n",
    "        mutated_tree = update_nodes_info_for_tree6(mutated_tree) # Re-update after potential removal\n",
    "\n",
    "    return mutated_tree\n",
    "\n",
    "\n",
    "def crossover_trees_diffusion6(parent1_root, parent2_root, crossover_rate, max_node_radius, overlap_factor):\n",
    "    if random.random() > crossover_rate:\n",
    "        return copy.deepcopy(parent1_root), copy.deepcopy(parent2_root)\n",
    "\n",
    "    child1_root = copy.deepcopy(parent1_root)\n",
    "    child2_root = copy.deepcopy(parent2_root)\n",
    "\n",
    "    # Ensure consistency after deepcopy for both children\n",
    "    child1_root = update_nodes_info_for_tree6(child1_root)\n",
    "    child2_root = update_nodes_info_for_tree6(child2_root)\n",
    "\n",
    "    all_nodes_child1 = child1_root.get_all_nodes()\n",
    "    all_nodes_child2 = child2_root.get_all_nodes()\n",
    "\n",
    "    # Ensure there are nodes to swap beyond just the root\n",
    "    if len(all_nodes_child1) < 2 or len(all_nodes_child2) < 2:\n",
    "        return child1_root, child2_root\n",
    "\n",
    "    # Choose random nodes (not roots) to be crossover points\n",
    "    cross_point1 = random.choice([n for n in all_nodes_child1 if n != child1_root])\n",
    "    cross_point2 = random.choice([n for n in all_nodes_child2 if n != child2_root])\n",
    "\n",
    "    # Find parent of cross_point1 in child1_root tree\n",
    "    parent_cross_point1 = None\n",
    "    for node in all_nodes_child1:\n",
    "        if cross_point1 in node.children:\n",
    "            parent_cross_point1 = node\n",
    "            break\n",
    "\n",
    "    # Find parent of cross_point2 in child2_root tree\n",
    "    parent_cross_point2 = None\n",
    "    for node in all_nodes_child2:\n",
    "        if cross_point2 in node.children:\n",
    "            parent_cross_point2 = node\n",
    "            break\n",
    "\n",
    "    if parent_cross_point1 and parent_cross_point2:  # Perform swap\n",
    "        # Remove subtrees from parents\n",
    "        parent_cross_point1.children.remove(cross_point1)\n",
    "        parent_cross_point2.children.remove(cross_point2)\n",
    "\n",
    "        # Attach swapped subtrees\n",
    "        parent_cross_point1.add_child(cross_point2)\n",
    "        parent_cross_point2.add_child(cross_point1)\n",
    "\n",
    "        # After crossover, the `occupied_squares_set` and `diffusion_nodes_info` of the affected trees\n",
    "        # need to be re-synced across all nodes within each child tree.\n",
    "        child1_root = update_nodes_info_for_tree6(child1_root)\n",
    "        child2_root = update_nodes_info_for_tree6(child2_root)\n",
    "\n",
    "    return child1_root, child2_root\n",
    "\n",
    "\n",
    "# --- PLOTTING FUNCTIONS --- #\n",
    "\n",
    "def plot_illuminated_area6(ax, illuminated_coords, title, color='blue', alpha=0.5):\n",
    "    ax.set_aspect('equal', adjustable='box')\n",
    "    if not illuminated_coords:\n",
    "        ax.set_title(title)\n",
    "        ax.grid(True)\n",
    "        return\n",
    "\n",
    "    for x, y in illuminated_coords:\n",
    "        rect = patches.Rectangle((x, y), 1, 1, facecolor=color, alpha=alpha, edgecolor='black', linewidth=0.5)\n",
    "        ax.add_patch(rect)\n",
    "\n",
    "    min_x = min(c[0] for c in illuminated_coords) - 1\n",
    "    max_x = max(c[0] for c in illuminated_coords) + 2\n",
    "    min_y = min(c[1] for c in illuminated_coords) - 1\n",
    "    max_y = max(c[1] for c in illuminated_coords) + 2\n",
    "\n",
    "    ax.set_xlim(min_x, max_x)\n",
    "    ax.set_ylim(min_y, max_y)\n",
    "    ax.set_xticks(range(int(min_x), int(max_x)))\n",
    "    ax.set_yticks(range(int(min_y), int(max_y)))\n",
    "    ax.grid(True)\n",
    "    ax.set_title(title)\n",
    "\n",
    "\n",
    "def plot_tree_with_illumination6(tree_root, illuminated_coords, ax, tree_color='lightblue', diff_color='red', title=\"\"):\n",
    "\n",
    "    # Plot illuminated area first (background)\n",
    "    for x, y in illuminated_coords:\n",
    "        rect = patches.Rectangle((x, y), 1, 1, facecolor=diff_color, alpha=0.5,\n",
    "                                 zorder=0)  # Changed alpha for more transparency\n",
    "        ax.add_patch(rect)\n",
    "\n",
    "    if tree_root is None:\n",
    "        return\n",
    "\n",
    "    # Plot tree nodes and their diffusion circles\n",
    "    all_nodes = tree_root.get_all_nodes()\n",
    "    for node in all_nodes:\n",
    "        # Plot the square representing the cell\n",
    "        rect = patches.Rectangle((node.x, node.y), 1, 1, facecolor=tree_color, edgecolor='black', linewidth=1, zorder=1)\n",
    "        ax.add_patch(rect)\n",
    "        ax.text(node.x + 0.5, node.y + 0.5, node.value.split('_')[-1], ha='center', va='center', color='darkblue',\n",
    "                fontsize=7, zorder=2)\n",
    "\n",
    "        # Plot the circle representing the radius of influence\n",
    "        circle = patches.Circle((node.x + 0.5, node.y + 0.5), node.radius, color='red', alpha=0.2, zorder=2)\n",
    "        ax.add_patch(circle)\n",
    "\n",
    "    # Draw lines connecting parent to children\n",
    "    for node in all_nodes:\n",
    "        for child in node.children:\n",
    "            ax.plot([node.x + 0.5, child.x + 0.5], [node.y + 0.5, child.y + 0.5], 'k--', linewidth=0.8, zorder=3)\n",
    "\n",
    "    ax.set_aspect('equal', adjustable='box')\n",
    "    ax.set_title(title)\n",
    "\n",
    "    # Set plot limits based on the illuminated coordinates\n",
    "    if illuminated_coords:\n",
    "        all_x = [c[0] for c in illuminated_coords]\n",
    "        all_y = [c[1] for c in illuminated_coords]\n",
    "\n",
    "        min_x_val = min(all_x) - 1\n",
    "        max_x_val = max(all_x) + 2\n",
    "        min_y_val = min(all_y) - 1\n",
    "        max_y_val = max(all_y) + 2\n",
    "\n",
    "        ax.set_xlim(min_x_val, max_x_val)\n",
    "        ax.set_ylim(min_y_val, max_y_val)\n",
    "        ax.set_xticks(range(int(min_x_val), int(max_x_val)))\n",
    "        ax.set_yticks(range(int(min_y_val), int(max_y_val)))\n",
    "    ax.grid(True)\n",
    "\n",
    "\n",
    "# --- MAIN EVOLUTIONARY SIMULATION LOOP (adapted) --- #\n",
    "\n",
    "def _run_single_evolution_experiment6(target_tree_params, ga_params, print_progress=True):\n",
    "    # 1. Generate Target Tree and its Illuminated Area\n",
    "    if print_progress: print(\"\\n--- Generating Target Tree ---\")\n",
    "    random.seed(ga_params['seed'] + 1)  # Use a different seed for target generation\n",
    "    target_occupied_squares = set()\n",
    "    target_diffusion_info = []\n",
    "    target_tree_root = generate_random_spatial_tree_diffusion6(\n",
    "        max_depth=target_tree_params['max_depth'], max_children=target_tree_params['max_children'],\n",
    "        max_node_radius=target_tree_params['max_node_radius'], initial_x=0, initial_y=0,\n",
    "        node_prefix=\"Target\", occupied_squares_set=target_occupied_squares,\n",
    "        diffusion_nodes_info=target_diffusion_info, overlap_factor=target_tree_params['overlap_factor']\n",
    "    )\n",
    "\n",
    "    if not target_tree_root:\n",
    "        if print_progress: print(\"Failed to generate target tree. Returning 0 generations.\")\n",
    "        return 0, 0, None, None, [] # Return 0 generations, 0 nodes, None for trees and history\n",
    "\n",
    "    target_illuminated_area = get_illuminated_area6(target_tree_root)\n",
    "    num_target_nodes = len(target_tree_root.get_all_nodes())\n",
    "    if print_progress: print(f\"Target Tree Generated with {num_target_nodes} nodes. Illuminated area size: {len(target_illuminated_area)}\")\n",
    "\n",
    "    # 2. Initialize Population\n",
    "    random.seed(ga_params['seed'])  # Reset seed for GA population generation\n",
    "    if print_progress: print(f\"\\n--- Initializing Population of {ga_params['pop_size']} Trees ---\")\n",
    "    population = create_initial_population_diffusion6(\n",
    "        pop_size=ga_params['pop_size'], max_depth=ga_params['max_depth'], max_children=ga_params['max_children'],\n",
    "        max_node_radius=ga_params['max_node_radius'], initial_x=0, initial_y=0,\n",
    "        overlap_factor=ga_params['overlap_factor']\n",
    "    )\n",
    "    if print_progress: print(f\"Population initialized with {len(population)} individuals.\")\n",
    "\n",
    "    best_tree_overall = None\n",
    "    best_fitness_overall = -1.0\n",
    "    history = []\n",
    "    generations_taken = ga_params['generations'] # Default to max generations if not converged\n",
    "\n",
    "    # 3. la Evoluciónary Loop\n",
    "    if print_progress: print(f\"\\n--- Starting la Evoluciónary Loop for {ga_params['generations']} Generations ---\")\n",
    "    for generation in range(ga_params['generations']):\n",
    "        fitness_scores = [calculate_fitness_illumination6(tree, target_illuminated_area) for tree in population]\n",
    "\n",
    "        current_best_fitness = max(fitness_scores)\n",
    "        current_best_tree = population[np.argmax(fitness_scores)]\n",
    "\n",
    "        if current_best_fitness > best_fitness_overall:\n",
    "            best_fitness_overall = current_best_fitness\n",
    "            best_tree_overall = copy.deepcopy(current_best_tree)  # Deepcopy to save the best tree\n",
    "            best_tree_overall = update_nodes_info_for_tree6(best_tree_overall) # Ensure consistency\n",
    "\n",
    "        history.append(current_best_fitness)\n",
    "\n",
    "        if print_progress: print(f\"Generation {generation + 1}/{ga_params['generations']}: Best Fitness = {current_best_fitness:.4f} (Overall Best: {best_fitness_overall:.4f})\")\n",
    "\n",
    "        if best_fitness_overall >= 0.999:  # Almost perfect match\n",
    "            if print_progress: print(\"Target illumination achieved (or very close)! Stopping la Evolución.\")\n",
    "            generations_taken = generation + 1\n",
    "            break\n",
    "\n",
    "        # Selection\n",
    "        parents = select_parents_diffusion6(population, fitness_scores, ga_params['pop_size'] // 2)\n",
    "\n",
    "        # Create next generation\n",
    "        next_population = []\n",
    "        # Elitism: Keep the best individual from the current generation\n",
    "        if best_tree_overall and current_best_fitness == best_fitness_overall:  # Only if it's the current best in this generation\n",
    "            next_population.append(copy.deepcopy(current_best_tree))\n",
    "\n",
    "        while len(next_population) < ga_params['pop_size']:\n",
    "            if len(parents) < 2:  # Not enough parents for crossover, fill with new random trees\n",
    "                occupied_squares = set()\n",
    "                diffusion_info = []\n",
    "                new_tree = generate_random_spatial_tree_diffusion6(\n",
    "                    max_depth=ga_params['max_depth'], max_children=ga_params['max_children'],\n",
    "                    max_node_radius=ga_params['max_node_radius'], initial_x=0, initial_y=0,\n",
    "                    node_prefix=f\"RandomFill_{len(next_population)}\",\n",
    "                    occupied_squares_set=occupied_squares, diffusion_nodes_info=diffusion_info,\n",
    "                    overlap_factor=ga_params['overlap_factor']\n",
    "                )\n",
    "                if new_tree:\n",
    "                    next_population.append(new_tree)\n",
    "                continue\n",
    "\n",
    "            # Randomly pick two parents (can be the same parent multiple times with replacement for simplicity)\n",
    "            p1 = random.choice(parents)\n",
    "            p2 = random.choice(parents)\n",
    "\n",
    "            # Crossover\n",
    "            child1, child2 = crossover_trees_diffusion6(p1, p2, ga_params['crossover_rate'],\n",
    "                                                        ga_params['max_node_radius'], ga_params['overlap_factor'])\n",
    "\n",
    "            # Mutation\n",
    "            mutated_child1 = mutate_tree_diffusion6(child1, ga_params['max_depth'], ga_params['max_children'],\n",
    "                                                    ga_params['max_node_radius'], ga_params['mutation_rate'],\n",
    "                                                    ga_params['overlap_factor'])\n",
    "            mutated_child2 = mutate_tree_diffusion6(child2, ga_params['max_depth'], ga_params['max_children'],\n",
    "                                                    ga_params['max_node_radius'], ga_params['mutation_rate'],\n",
    "                                                    ga_params['overlap_factor'])\n",
    "\n",
    "            next_population.append(mutated_child1)\n",
    "            if len(next_population) < ga_params['pop_size']:\n",
    "                next_population.append(mutated_child2)\n",
    "\n",
    "        population = next_population[:ga_params['pop_size']]\n",
    "\n",
    "    if print_progress: print(\"\\n--- la Evolución Finished ---\")\n",
    "    if print_progress: print(f\"Final Best Fitness: {best_fitness_overall:.4f}\")\n",
    "\n",
    "    return generations_taken, num_target_nodes, target_tree_root, best_tree_overall, history\n",
    "\n",
    "\n",
    "def study_evolution_cost6(target_complexity_configs, ga_params, num_runs_per_complexity=3):\n",
    "    results = []  # Stores (num_nodes, avg_generations)\n",
    "\n",
    "    print(\"\\n=== Starting Evolution Cost Study ===\")\n",
    "    print(f\"GA Parameters used for study: {ga_params}\")\n",
    "\n",
    "    for i, config in enumerate(target_complexity_configs):\n",
    "        target_tree_params = {\n",
    "            'max_depth': config['max_depth'],\n",
    "            'max_children': config['max_children'],\n",
    "            'max_node_radius': 3.0,  # Keep constant for now\n",
    "            'overlap_factor': 0.7  # Keep constant for now\n",
    "        }\n",
    "\n",
    "        print(f\"\\n--- Studying Target Tree Complexity Config {i+1}/{len(target_complexity_configs)} ---\")\n",
    "        print(f\"  Target Tree Params: Max Depth={config['max_depth']}, Max Children={config['max_children']}\")\n",
    "\n",
    "        generations_list = []\n",
    "        num_nodes_for_this_config = []\n",
    "        for run in range(num_runs_per_complexity):\n",
    "            print(f\"  Run {run+1}/{num_runs_per_complexity} for this complexity...\")\n",
    "            # Vary seed for each run to get different initial populations and target trees\n",
    "            ga_params['seed'] = random.randint(0, 100000)\n",
    "\n",
    "            generations, num_nodes, _, _, _ = _run_single_evolution_experiment6(target_tree_params, ga_params, print_progress=False)\n",
    "\n",
    "            if generations > 0 and num_nodes > 0: # Only record valid runs\n",
    "                generations_list.append(generations)\n",
    "                num_nodes_for_this_config.append(num_nodes)\n",
    "\n",
    "        if generations_list:\n",
    "            avg_generations = np.mean(generations_list)\n",
    "            # Take the average or median number of nodes if they varied across runs,\n",
    "            # or just the first one if they are expected to be similar.\n",
    "            avg_num_nodes = np.mean(num_nodes_for_this_config)\n",
    "            results.append({'num_nodes': avg_num_nodes, 'avg_generations': avg_generations})\n",
    "            print(f\"  Average Generations: {avg_generations:.2f}, Average Nodes: {avg_num_nodes:.2f}\")\n",
    "        else:\n",
    "            print(\"  No successful runs for this complexity config.\")\n",
    "\n",
    "    # Sort results by number of nodes for better plotting\n",
    "    results.sort(key=lambda x: x['num_nodes'])\n",
    "\n",
    "    # Plotting\n",
    "    if results:\n",
    "        node_counts = [res['num_nodes'] for res in results]\n",
    "        avg_gens = [res['avg_generations'] for res in results]\n",
    "\n",
    "        plt.figure(figsize=(10, 6))\n",
    "        plt.plot(node_counts, avg_gens, marker='o', linestyle='-', color='blue')\n",
    "        plt.title('la Evoluciónary Cost (Generations) vs. Target Tree Complexity (Nodes)')\n",
    "        plt.xlabel('Average Number of Nodes in Target Tree (n)')\n",
    "        plt.ylabel('Average Generations to Achieve >= 0.999 Fitness')\n",
    "        plt.grid(True)\n",
    "        plt.show()\n",
    "    else:\n",
    "        print(\"No data to plot for la Evolución cost.\")\n",
    "\n",
    "    return results\n",
    "\n",
    "\n",
    "# --- MAIN EXECUTION --- #\n",
    "\n",
    "if __name__ == \"__main__\":\n",
    "\n",
    "      # Define a range of target tree complexities to study\n",
    "    # This will generate target trees of increasing node counts\n",
    "\n",
    "    target_complexity_configs = [\n",
    "        {'max_depth': 1, 'max_children': 1},\n",
    "        {'max_depth': 2, 'max_children': 1},\n",
    "        {'max_depth': 2, 'max_children': 2},\n",
    "        {'max_depth': 3, 'max_children': 1},\n",
    "        {'max_depth': 3, 'max_children': 2},\n",
    "        {'max_depth': 3, 'max_children': 3}\n",
    "    ]\n",
    "\n",
    "    '''\n",
    "    # Define a range of target tree complexities to study\n",
    "    # This will generate target trees of increasing node counts\n",
    "    # Add complexity with care because the program may not converge to a solution.\n",
    "\n",
    "    # Define a range of target tree complexities to study\n",
    "    # This will generate target trees of increasing node counts\n",
    "    target_complexity_configs = [\n",
    "        {'max_depth': 1, 'max_children': 1},\n",
    "        {'max_depth': 2, 'max_children': 1},\n",
    "        {'max_depth': 2, 'max_children': 2},\n",
    "        {'max_depth': 3, 'max_children': 1},\n",
    "        {'max_depth': 3, 'max_children': 2},\n",
    "        {'max_depth': 3, 'max_children': 3},\n",
    "        {'max_depth': 4, 'max_children': 1},\n",
    "        {'max_depth': 4, 'max_children': 2},\n",
    "        {'max_depth': 4, 'max_children': 3},\n",
    "        {'max_depth': 4, 'max_children': 4},\n",
    "        {'max_depth': 5, 'max_children': 1},\n",
    "        {'max_depth': 5, 'max_children': 2},\n",
    "        {'max_depth': 5, 'max_children': 3},\n",
    "        {'max_depth': 5, 'max_children': 4},\n",
    "        {'max_depth': 5, 'max_children': 5},\n",
    "        {'max_depth': 7, 'max_children': 3},\n",
    "        {'max_depth': 10, 'max_children': 4},\n",
    "        {'max_depth': 20, 'max_children': 5},\n",
    "        {'max_depth': 30, 'max_children': 6},\n",
    "        {'max_depth': 50, 'max_children': 5},\n",
    "        {'max_depth': 100, 'max_children': 5}\n",
    "    ]\n",
    "    '''\n",
    "\n",
    "    # Parameters for the Genetic Algorithm (kept constant across target complexities)\n",
    "    ga_params_for_study = {\n",
    "        'seed': 12345, # Initial seed, will be varied per run\n",
    "        'pop_size': 50,\n",
    "        'generations': 200, # Max generations to allow for convergence\n",
    "        'max_depth': 4, # Max depth for evolved trees\n",
    "        'max_children': 3, # Max children for evolved trees\n",
    "        'max_node_radius': 3.0,\n",
    "        'mutation_rate': 0.1,\n",
    "        'crossover_rate': 0.7,\n",
    "        'overlap_factor': 0.7\n",
    "    }\n",
    "\n",
    "    num_runs_per_complexity = 5 # Number of times to run GA for each target tree complexity\n",
    "\n",
    "    cost_study_results = study_evolution_cost6(\n",
    "        target_complexity_configs,\n",
    "        ga_params_for_study,\n",
    "        num_runs_per_complexity\n",
    "    )\n",
    "\n",
    "    print(\"\\nCost Study Results:\")\n",
    "    for res in cost_study_results:\n",
    "        print(f\"  Nodes: {res['num_nodes']:.2f}, Avg. Generations: {res['avg_generations']:.2f}\")\n",
    "\n",
    "    # Optional: You can still run the full plotting of a single la Evolución if needed for detailed visualization\n",
    "    # For example, for the last target complexity studied\n",
    "    # final_target_tree_params = target_complexity_configs[-1]\n",
    "    # generations_taken, num_target_nodes, target_tree, evolved_best_tree, history = _run_single_evolution_experiment(\n",
    "    #     {'max_depth': final_target_tree_params['max_depth'], 'max_children': final_target_tree_params['max_children'], 'max_node_radius': 3.0, 'overlap_factor': 0.7},\n",
    "    #     ga_params_for_study,\n",
    "    #     print_progress=True\n",
    "    # )\n",
    "\n",
    "    # if target_tree and evolved_best_tree:\n",
    "    #     fig, axes = plt.subplots(1, 3, figsize=(24, 8))\n",
    "\n",
    "    #     plot_tree_with_illumination(target_tree, get_illuminated_area(target_tree), axes[0], tree_color='skyblue', diff_color='green', title=\"Target Tree and Illuminated Area\")\n",
    "    #     evolved_best_area = get_illuminated_area(evolved_best_tree)\n",
    "    #     plot_tree_with_illumination(evolved_best_tree, evolved_best_area, axes[1], tree_color='lightcoral', diff_color='purple', title=f\"Best Evolved Tree (Fitness: {evolved_best_tree:.4f})\")\n",
    "    #     symmetric_diff_area = get_illuminated_area(target_tree).symmetric_difference(evolved_best_area)\n",
    "    #     plot_illuminated_area(axes[2], symmetric_diff_area, title=f\"Symmetric Difference (Error Area: {len(symmetric_diff_area)})\")\n",
    "\n",
    "    #     plt.tight_layout()\n",
    "    #     plt.show()\n",
    "\n",
    "    #     plt.figure(figsize=(10, 6))\n",
    "    #     plt.plot(history, marker='o', linestyle='-', color='blue')\n",
    "    #     plt.title('Best Fitness Progression Over Generations')\n",
    "    #     plt.xlabel('Generation')\n",
    "    #     plt.ylabel('Fitness')\n",
    "    #     plt.grid(True)\n",
    "    #     plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "e_02I7te5hD2"
   },
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "VyTuIPkoAo5e"
   },
   "source": [
    "**Observación.** El programa funciona perfectamente.\n",
    "\n",
    "**Protesta.* Los programas anteriores se ejecutan muy lentamente: pequeños ejercicios duran media hora. Por lo tanto, estos programas no son apropiados para un estudio serio de la Evolución de la morfología. Entonces, no se puede afirmar la estabilidad evolutiva de los morfo-árboles. Algo anda mal con nosotros. ¿Qué haremos?\n",
    "\n",
    "**Se necesita un cambio.**  Algunas opciones son las siguientes:\n",
    "- Modificar o cambiar el prometedor Modelo de Red de Iluminación.\n",
    "- Sustituir la clase  `node` muy costosa que hemos utilizado para codificar árboles.\n",
    "- Detectar y ajustar o cambiar los procedimientos que queman intensamente tiempo o memoria.\n",
    "- Entender claramente por qué la recombinación causa una disrupción de la forma.\n",
    "\n",
    "Estas opciones se examinarán en la próxima contribución."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "CsW-ArFKIPF_"
   },
   "source": [
    "# CONCLUSIÓN\n",
    "\n",
    "Hemos formulado modelos concretos de morfogénesis basados en las dos premisas siguientes:\n",
    "1. Hijo de cebra sale rayado. Por esta razón, algunas propiedades de la morfogénesis deben estar codificadas en el ADN, producir herencia y ser objeto de Evolución.\n",
    "2. La morfología será una modulación del proceso reproductivo celular, que se representa naturalmente por un árbol.\n",
    "\n",
    "Para empezar, propusimos el modelo de impresión en el que la posición de cada célula está totalmente determinada por el programa genético. Descubrimos rápidamente que este modelo quema demasiado tiempo y memoria, por lo que no es adecuado para explicar la existencia del hígado con millones de células.\n",
    "\n",
    "Motivados por la literatura, examinamos la posibilidad de explicar la morfología con mensajeros que son expulsados por células especializadas que se encuentran a lo largo de un sub-árbol reproductivo, y cuya acción es sentida por cada célula alrededor de la cual la concentración del mensajero está por encima de cierto umbral. Este es el *Modelo de Red de Iluminación*. Se llama así porque cada centro de producción de mensajeros es como una lámpara que es alimentada por una red en forma de árbol, y que ilumina una región donde la intensidad de la luz está por encima de un umbral dado. Nos gusta este modelo. Predijimos que este modelo es presa de la pleiotropía. Por eso, debe ser reticente a evolucionar. Su simulación fue espectacularmente acelerada con la ayuda de algún truco matemático, pero, en cualquier caso, sigue produciendo hijos que están lejos de su padre. No nos gusta esto. Imaginemos que tuviésemos el corazón dividido en dos partes, una dentro del pecho y la otra debajo del pie izquierdo. La disrupción podría remediarse con grandes poblaciones de organismos que están a punto de morir, pero no es lo que vemos a nuestro alrededor. Así que estamos atrapados entre problemas técnicos y científicos. Por lo tanto, el trabajo continúa. \n"
   ]
  }
 ],
 "metadata": {
  "colab": {
   "authorship_tag": "ABX9TyMS1y9lLdC5fSBcHByj9d6P",
   "provenance": [],
   "toc_visible": true
  },
  "kernelspec": {
   "display_name": "Python 3",
   "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.14.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}
