{
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "# Parallel adjoint with a waveguide bend\n",
        "\n",
        "Adjoint methods are a core tool for inverse design, where the goal is to\n",
        "efficiently compute gradients of an objective with respect to many\n",
        "design parameters. In the standard adjoint workflow, Tidy3D first runs\n",
        "the forward simulation and then constructs the required adjoint\n",
        "simulations on the fly from the recorded monitor data. At that point, it\n",
        "determines which adjoint simulations are needed to obtain the requested\n",
        "gradients and runs them afterward.\n",
        "\n",
        "For some supported monitor outputs, however, the required adjoint\n",
        "simulations are known in advance and do not depend on the forward\n",
        "result. In those cases, Tidy3D can prepare one or more adjoint\n",
        "simulations, launch them in parallel with the forward simulation, and\n",
        "combine them with the forward data afterward. This is the idea behind\n",
        "parallel adjoint.\n",
        "\n",
        "To use parallel adjoint efficiently, the simulation has to be set up\n",
        "such that it is already clear beforehand which adjoint simulations will\n",
        "be needed. In practice, this means using only supported and\n",
        "gradient-relevant monitor outputs, and restricting those outputs to the\n",
        "data that actually enters the objective.\n",
        "\n",
        "When the supported adjoint work dominates the total runtime, this can\n",
        "lead to a speedup approaching 2x. In this notebook, we use a simple 2D\n",
        "waveguide bend as a toy example and compare the runtime of a single\n",
        "gradient evaluation with parallel adjoint switched off and on.\n",
        "\n",
        "If you are new to autograd in Tidy3D, useful general introductions are\n",
        "[Autograd0Overview](https://www.flexcompute.com/tidy3d/examples/notebooks/Autograd0Overview/),\n",
        "[Autograd0Quickstart](https://www.flexcompute.com/tidy3d/examples/notebooks/Autograd0Quickstart/),\n",
        "[Autograd1Intro](https://www.flexcompute.com/tidy3d/examples/notebooks/Autograd1Intro/),\n",
        "and\n",
        "[Autograd2GradientChecking](https://www.flexcompute.com/tidy3d/examples/notebooks/Autograd2GradientChecking/).\n",
        "\n",
        "<img src=\"./img/adjoint_30.png\" style=\"width:65%;\" alt=\"Schematic comparing regular adjoint and parallel adjoint workflows.\">"
      ],
      "id": "f6485e80-ee1c-4ee8-86a7-d1ae904ba6e7"
    },
    {
      "cell_type": "code",
      "execution_count": 1,
      "metadata": {},
      "outputs": [],
      "source": [
        "import time\n",
        "\n",
        "import autograd as ag\n",
        "import autograd.numpy as anp\n",
        "import matplotlib.pylab as plt\n",
        "import numpy as np\n",
        "import tidy3d as td\n",
        "import tidy3d.web as web\n",
        "from tidy3d.config import config\n",
        "\n",
        "# make sure that runtime measures are not impacted by caching\n",
        "td.config.web.enable_caching = False\n",
        "td.config.local_cache.enabled = False"
      ],
      "id": "b66d3428"
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "## Setup\n",
        "\n",
        "As a simple toy example, we use a 90 degree SiN waveguide bend and\n",
        "measure the gradient of the transmitted mode power with respect to a\n",
        "single geometric parameter. The parameter controls the waveguide width\n",
        "near the middle of the bend and tapers linearly back to the nominal\n",
        "width at the input and output.\n",
        "\n",
        "The point here is not this particular parameterization. It is just a\n",
        "compact example that makes the `parallel adjoint` workflow easy to see.\n",
        "\n",
        "We use a clean 2D approximation of the bend. The simulation is invariant\n",
        "in `z`, so the computational domain is collapsed with\n",
        "`size=(Lx, Ly, 0)`, PML is applied only in `x` and `y`, and we use a\n",
        "uniform cladding background for the 2D model."
      ],
      "id": "b83d086d-eaa9-4bca-9a26-c797d91eef29"
    },
    {
      "cell_type": "code",
      "execution_count": 2,
      "metadata": {},
      "outputs": [],
      "source": [
        "wavelength = 1.55\n",
        "freq0 = td.C_0 / wavelength\n",
        "fwidth = freq0 / 8\n",
        "monitor_freq = freq0\n",
        "\n",
        "# discretization of the bend profile\n",
        "num_pts = 40\n",
        "angles = np.linspace(0, np.pi / 2, num_pts + 2)[1:-1]\n",
        "bend_position = np.linspace(0.0, 1.0, num_pts + 2)[1:-1]\n",
        "middle_weight = 1.0 - np.abs(2.0 * bend_position - 1.0)\n",
        "\n",
        "# refractive indices\n",
        "n_wg = 2.0\n",
        "n_sub = 1.5\n",
        "\n",
        "# geometric parameters\n",
        "design_buffer = 1.0 * wavelength\n",
        "straight_length = 1.0 * wavelength\n",
        "h = 0.7\n",
        "wg_width = 1.5\n",
        "middle_width_max = 2.3\n",
        "radius = 6.0\n",
        "\n",
        "# simulation and mode settings\n",
        "monitor_name = \"mode\"\n",
        "min_steps_per_wvl = 20\n",
        "num_modes = 3\n",
        "mode_spec = td.ModeSpec(num_modes=num_modes)"
      ],
      "id": "1712eb25"
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "From these values, we can define the simulation size."
      ],
      "id": "8dd55225-1bb4-4bd1-a9cb-331336acb093"
    },
    {
      "cell_type": "code",
      "execution_count": 3,
      "metadata": {},
      "outputs": [],
      "source": [
        "outer_radius_max = radius + middle_width_max / 2\n",
        "Lx = Ly = straight_length + outer_radius_max + design_buffer\n",
        "Lz = design_buffer + h + design_buffer\n",
        "\n",
        "middle_width0 = 2.0"
      ],
      "id": "f1fc8531"
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "## Bend Parameterization\n",
        "\n",
        "Here we define how our waveguide bend is built dependent on a single\n",
        "parameter by defining vertex positions. Note that this parametrization\n",
        "is just for demonstration purposes.\n",
        "\n",
        "We keep the ends of the bend fixed and vary only the width towards the\n",
        "center. The bend starts with the nominal width at both ends, reaches a\n",
        "parameter-defined width at 45 degrees, and changes linearly along the\n",
        "arc.\n",
        "\n",
        "For a more deliberate waveguide-bend parametrization, see\n",
        "[Autograd8WaveguideBend](https://www.flexcompute.com/tidy3d/examples/notebooks/Autograd8WaveguideBend/)."
      ],
      "id": "e2682930-f203-4644-8b69-7676e62f5903"
    },
    {
      "cell_type": "code",
      "execution_count": 4,
      "metadata": {},
      "outputs": [],
      "source": [
        "def section_widths(middle_width):\n",
        "    \"\"\"Waveguide width along the bend.\"\"\"\n",
        "    return wg_width + (middle_width - wg_width) * middle_weight\n",
        "\n",
        "\n",
        "def make_vertices(middle_width):\n",
        "    \"\"\"Polygon vertices for the bend.\"\"\"\n",
        "    widths = section_widths(middle_width)\n",
        "    outer_radii = radius + widths / 2\n",
        "    inner_radii = radius - widths / 2\n",
        "\n",
        "    x0 = -Lx / 2 + straight_length\n",
        "    y0 = -Ly / 2 + straight_length\n",
        "\n",
        "    vertices = []\n",
        "\n",
        "    vertices.append((-Lx / 2 + 1e-2, y0 + radius + wg_width / 2))\n",
        "    vertices.append((x0, y0 + radius + wg_width / 2))\n",
        "\n",
        "    for angle, outer_radius in zip(angles, outer_radii):\n",
        "        x = outer_radius * np.sin(angle) + x0\n",
        "        y = outer_radius * np.cos(angle) + y0\n",
        "        vertices.append((x, y))\n",
        "\n",
        "    vertices.append((x0 + radius + wg_width / 2, y0))\n",
        "    vertices.append((x0 + radius + wg_width / 2, -Ly / 2 + 1e-2))\n",
        "    vertices.append((x0 + radius - wg_width / 2, -Ly / 2 + 1e-2))\n",
        "    vertices.append((x0 + radius - wg_width / 2, y0))\n",
        "\n",
        "    for angle, inner_radius in zip(angles[::-1], inner_radii[::-1]):\n",
        "        x = inner_radius * np.sin(angle) + x0\n",
        "        y = inner_radius * np.cos(angle) + y0\n",
        "        vertices.append((x, y))\n",
        "\n",
        "    vertices.append((x0, y0 + radius - wg_width / 2))\n",
        "    vertices.append((-Lx / 2 + 1e-2, y0 + radius - wg_width / 2))\n",
        "    return vertices\n",
        "\n",
        "\n",
        "def make_polyslab(middle_width):\n",
        "    \"\"\"`PolySlab` representation of the bend.\"\"\"\n",
        "    return td.PolySlab(vertices=make_vertices(middle_width), slab_bounds=(-h / 2, h / 2), axis=2)\n",
        "\n",
        "\n",
        "def make_bend(middle_width):\n",
        "    \"\"\"Waveguide bend structure.\"\"\"\n",
        "    return td.Structure(\n",
        "        geometry=make_polyslab(middle_width),\n",
        "        medium=td.Medium(permittivity=n_wg**2),\n",
        "    )"
      ],
      "id": "e1f09d51"
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "## Sources, Monitors, and Simulation\n",
        "\n",
        "Here, we add short straight input and output waveguide sections around\n",
        "the bend and then define the source, monitor, and full 2D simulation.\n",
        "The straight sections serve as clean ports: the `ModeSource` launches a\n",
        "guided mode from the input arm, and the ModeMonitor measures the\n",
        "outgoing modal amplitude on the output arm after the bend. The source\n",
        "and monitor planes are made slightly wider than the nominal waveguide\n",
        "using design_buffer so the modal fields are captured comfortably.\n",
        "Finally, `make_sim()` assembles the full simulation with the bend\n",
        "geometry, the two straight access waveguides, a uniform substrate-index\n",
        "background for the 2D model, automatic meshing, and PML boundaries in x\n",
        "and y."
      ],
      "id": "fed75893-86f5-4c6a-97ba-f0e97d2ca574"
    },
    {
      "cell_type": "code",
      "execution_count": 5,
      "metadata": {},
      "outputs": [],
      "source": [
        "box_in = td.Box.from_bounds(\n",
        "    rmin=(-Lx / 2 - 1, -Ly / 2 + straight_length + radius - wg_width / 2, -h / 2),\n",
        "    rmax=(\n",
        "        -Lx / 2 + straight_length + 1e-3,\n",
        "        -Ly / 2 + straight_length + radius + wg_width / 2,\n",
        "        +h / 2,\n",
        "    ),\n",
        ")\n",
        "box_out = td.Box.from_bounds(\n",
        "    rmin=(-Lx / 2 + straight_length + radius - wg_width / 2, -Ly / 2 - 1, -h / 2),\n",
        "    rmax=(-Lx / 2 + straight_length + radius + wg_width / 2, -Ly / 2 + straight_length, +h / 2),\n",
        ")\n",
        "\n",
        "wg_in = td.Structure(geometry=box_in, medium=td.Medium(permittivity=n_wg**2))\n",
        "wg_out = td.Structure(geometry=box_out, medium=td.Medium(permittivity=n_wg**2))\n",
        "sim_medium = td.Medium(permittivity=n_sub**2)\n",
        "\n",
        "mode_width = wg_width + 2 * design_buffer\n",
        "mode_height = Lz\n",
        "\n",
        "mode_src = td.ModeSource(\n",
        "    size=(0, mode_width, mode_height),\n",
        "    center=(-Lx / 2 + straight_length / 2, -Ly / 2 + straight_length + radius, 0),\n",
        "    direction=\"+\",\n",
        "    source_time=td.GaussianPulse(freq0=freq0, fwidth=fwidth),\n",
        ")\n",
        "\n",
        "mode_mnt = td.ModeMonitor(\n",
        "    size=(mode_width, 0, mode_height),\n",
        "    center=(-Lx / 2 + straight_length + radius, -Ly / 2 + straight_length / 2, 0),\n",
        "    name=monitor_name,\n",
        "    freqs=[monitor_freq],\n",
        "    mode_spec=mode_spec,\n",
        ")\n",
        "\n",
        "\n",
        "def make_sim(middle_width):\n",
        "    return td.Simulation(\n",
        "        size=(Lx, Ly, 0),\n",
        "        medium=sim_medium,\n",
        "        structures=[wg_in, wg_out, make_bend(middle_width)],\n",
        "        sources=[mode_src],\n",
        "        grid_spec=td.GridSpec.auto(min_steps_per_wvl=min_steps_per_wvl),\n",
        "        boundary_spec=td.BoundarySpec.pml(x=True, y=True, z=False),\n",
        "        monitors=[mode_mnt],\n",
        "        run_time=10 / fwidth,\n",
        "    )"
      ],
      "id": "6e44b28b"
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "Let’s visualize our experimental setup to review the correct arrangement\n",
        "of our components."
      ],
      "id": "387a1b3e-2f7a-42d7-86d8-06fb8a2eafb3"
    },
    {
      "cell_type": "code",
      "execution_count": 6,
      "metadata": {},
      "outputs": [
        {
          "output_type": "display_data",
          "metadata": {},
          "data": {
            "image/png": "iVBORw0KGgoAAAANSUhEUgAAA68AAAOsCAYAAAClDIBHAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90\nbGliIHZlcnNpb24zLjExLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlcelbwAAAAlwSFlzAAAd\nhwAAHYcBj+XxZQAA13lJREFUeJzs3Xd4HOW5/vF7m1ZdsuRuufdesI0xxYRmwAYDJpQEQggkBEhI\nO2mc3zlAzqElgQOk0BIICZ2EbptmML3ZuGBw77It2VaxrLbaMr8/nF0kWV2zOzO73891cXlXOzvz\nPGa0nntn5n1dhmEYAgAAAADAxtxWFwAAAAAAQHsIrwAAAAAA2yO8AgAAAABsj/AKAAAAALA9wisA\nAAAAwPYIrwAAAAAA2yO8AgAAAABsj/AKAAAAALA9wisAAAAAwPYIrwAAAAAA2yO8AgAAAABsj/AK\nAAAAALA9wisAAAAAwPYIrwAAAAAA2yO8AgAAAABsj/AKAAAAALA9wisAAAAAwPa8VhcAAIAZ9u3b\np88++0ySNHjwYI0dO9biiuxl5cqVKi0tlSQde+yxysnJsayWqqoqffDBB5Kkvn37asqUKZbVkghO\n6dcpdQJIXS7DMAyriwAAJF4kEtHevXu1e/duHTp0SGlpaSosLNSoUaPk9Xbsu81gMKilS5e2+JrH\n41FOTo5yc3NVUFCgvn37mln+EZ5//nmde+65kqRrr71Wf/zjH+O6Pac555xz9MILL0g6HGStDCbL\nly/XjBkzJEkLFy7UP//5T8tqSQQr+i0vL9cnn3wiSerfv78mTZrU7ntS7f8LAOfhzCsApJC33npL\nr7zyij755BOtWLFChw4dOmKZjIwMnXzyybruuut06qmntrm+gwcP6owzzujQtgsLCzV16lQdf/zx\nuuyyyzR48OAu9QCgfWvWrIn9bn7zm9/Uo48+anFFANB93PMKACnk9ttv129/+1stW7asxeAqSXV1\ndXr55Zd12mmn6dJLL1VDQ4Mp2y4rK9Mbb7yhG264QUOHDtVZZ52l7du3m7JuAACQ/DjzCgApyu12\nq7CwUD179lSvXr1kGIY2bNigffv2xZZ59NFHFQ6H9fjjj3donSeddJJ8Pl/seV1dnQ4ePKjdu3fr\nwIEDsZ8bhqGXX35Zy5Yt08MPP6zzzz/fvMZge3l5eZo7d64kaerUqRZXgyj+vwCwO8IrAKSQk046\nSSeddJKOPvpoTZ8+XVlZWU1eNwxDS5Ys0TXXXKMdO3ZIkp544gldeeWVOumkk9pd/1NPPaWePXu2\n+NrOnTu1ZMkS3XfffVq1apUkqbq6Wt/85jfVs2dPnXjiid3qDc4xcuRIvfLKK1aXgWb4/wLA7giv\nAJBCfvGLX7T5usvl0plnnql3331XkydPVkVFhaTDAbYj4bUtgwYN0lVXXaXvfe97uvPOO/XLX/5S\n4XBYDQ0Nuuiii7R161ZlZmZ2axut2bdvn3bs2KG6ujoNHDhQQ4cO7dJ6DMPQ1q1bVVpaqmAwqN69\ne2vUqFHyeDwdqqG10ZArKiq0detWHTp0SH369NGYMWPkcrk6XdumTZu0Z88e5ebmasiQISooKOhc\ng50U/fvYu3evGhoaVFhYqN69e6tXr15tDvrVkVFt2/r72r9/v3bs2KH6+noNHTpUAwYMaHVb9fX1\n2rZtm0pLS9WjRw+NHz++3QHJNm/erM2bN0uSJk6c2Ob6JWnFihXav3+/JOn4448/4kuhrqioqFBp\naan27dsnt9utXr16aeTIkXK7277ja+/evVq9erXWrFnT5GcthdIhQ4ZozJgxseddHW24qqpKW7du\nVXl5ufLy8jR48OBWv8RqLt6/FwCSjAEAQAt+/vOfG5IMScbxxx/f4jL79++PLSPJ2L9/f4fXf889\n9zR57+9///tu1fvcc8/F1nXttdcahmEYr732mnHsscc22Y4kY9SoUcbDDz/c4XXv2LHDuOqqq4ze\nvXsfsa78/HzjiiuuMHbs2NHp+j777DPj9NNPNzweT5N19urVy7j55puNYDDYbm2hUMi44447jIED\nBzZZh9vtNubOnWssX77cMAzDWLBgQey1lStXdrj3luzcudP47ne/a+Tn5x/x9yHJyMzMNObPn288\n8MADLb7/008/jS27cOHCFpdp6e/rnXfeMebMmWO4XK4m25sxY4bx5ptvNnl/SUmJcdVVVxnZ2dlN\nlu3Ro4dxyy23GOFwuNX+brjhhtjyHdlP5s6dG1t+3bp1Xeo3EokY9913n3HxxRcb/fv3b/HvNT8/\n3/j2t79tbN68udVa/vGPf7T43pb++9GPftTpOhtbtGiRccIJJxher7fJel0ulzFt2jTjkUceafPv\n2TDi93sBIDkxYBMAoEWjR4+OPTbiMKvaD3/4w9i0HJL04IMPmrr+u+66S3PnztX7779/xGsbN27U\n5Zdfrm9961uKRCJtrufRRx/VqFGjdP/99ze5HziqsrJSf/3rXzVhwgS9+uqrHa7v0Ucf1axZs/TK\nK68oHA43eW3//v36z//8T11wwQVt/t3X1dXp9NNP189+9jPt2rWryWuRSESvvvqqZs+eraeeeqrD\ndbXno48+0qRJk/Tggw+qsrKyxWVqa2v18ssv6yc/+Ylp273//vv1ta99TW+//fYRfyeffvqp5s6d\nqxdffFGStHr1ak2fPl3333+/qqurmyxbUVGh66+/Xt/73vdMq80M4XBY3//+9/XEE09oz549LS5T\nWVmpv/3tb5oyZYqWLFmS4Aq/EgqFdPnll2vevHl65513FAqFmrxuGIY+++wzXXbZZTr99NNbHRyu\nJWb8XgBIXlw2DABo0c6dO2OPR40aFZdt/PjHP9Y3v/lNSdKGDRtUUlJiynyw77//vu69914ZhiGX\ny6Xx48erV69eKikp0bp162LL/eMf/9CAAQN06623trieRx55RN/+9reb/KyoqEhDhw6V1+vVjh07\ntHXrVknSoUOHdM455+ijjz7S5MmT26zvo48+0gMPPKBgMCi3261x48apd+/eKisr09q1a2MH7c89\n95weeughXXHFFS2u5/LLL9cbb7wRe+52uzVx4kQVFBRo9+7d2rhxoxoaGvSd73zHlKmJwuGwvvGN\nbzQJrQUFBRo5cqRycnJUWVmpkpKS2GXVZvnggw90//33KxwOy+fzaeLEicrPz9eOHTu0ZcsWSYfn\nHL7yyiu1YsUKLViwQMXFxZKk4cOHa9CgQaqqqtLq1atjQeuvf/2rFi5c2OGpnhLJ4/GoV69e6t27\nt3r27Kn6+npt3LgxNuhZdXW1LrjgAq1atUrDhw9v8t7+/ftr7ty5Ki8v16effipJ6tevX4vzvDa+\nRLczrrnmGv3tb39r8rPRo0erf//+sX04+qXQ66+/rnPPPVevv/56u5f8mvV7ASCJWXnaFwBgT8Fg\n0Bg+fHjscr3Fixe3uFx3Lhs2DMPYu3dvk/c/++yzXa658eWH0f9OP/10Y9u2bU2WW79+vXHcccfF\nlvF4PMbq1auPWN/mzZuNzMzMJpdRfvHFF0cst3r1amP27NlNLmHtaH2XX365sWfPnibLbdu2zZg5\nc2ZsmYkTJ7a4vsWLFzdZ13nnnWfs3r27yTJr1qwxpk+ffsR2u3rZ8Pvvvx9bR0FBgbFo0SIjEokc\nsVxdXZ2xaNEi46c//WmL6+nsZcPR/374wx8a5eXlTZZ7+eWXjaysrNgy0Uu7Z86caaxatarJsjt3\n7jSOOuqo2LJnnnlmi9u24rLhcDhsXHvttcYLL7xgHDp06IjXI5GI8eabbxrjx4+PrevSSy9ttaa3\n3norttw3v/nNdnvoaJ2vv/56k/8nxx9/vPHll182WWbXrl3Gueee22S5P//5zy2uz+zfCwDJjfAK\nADjCb37zm9hB4rHHHtvqct0Nr4ZhGL169Yq9/9577+1yzc0PgufMmdPqvXG1tbXGlClTYsteccUV\nRyzz3e9+N/b6D37wgza3XVdXZ0ybNi22/Pvvv99ufW2tc/fu3Ybf748tW1paesQyp5xySuz1+fPn\nt3pvYVVVlTF69GhTwutTTz0VW8cNN9zQpXUYRtfC689//vNW13fLLbc0WXbChAlGTU1Ni8uuX78+\nds9sRkaGEQqFjljGivDaUeXl5bF7YtPT01vtM17h9bTTTmvyRU1dXV2Ly4XD4Sb3WQ8fPrzFfdTs\n3wsAyY17XgEATbz00ku66aabJEm5ubl6+OGH47q9Hj16xB6Xl5ebtt6777671VFlMzIydMcdd8Se\nP/vss03uoQuFQrG5bXv06KHbb7+9zW2lp6frP//zP2PPX3/99TaXz83N1S233NLq6/37928yunPj\nS50l6eDBg3rzzTclHR4h+p577ml1FNqcnBz99re/bbOejurdu3fscePLyuMtLy9PN9xwQ6uvN58n\n+Oabb2515OrRo0dr4sSJkg7fM7x9+3bT6kyEHj166LLLLpN0eCTllStXJmzbVVVVTS5T/8Mf/qD0\n9PQWl3W73frTn/4U+x3csmVLbIqs1nT39wJA8uOeVwBAzPvvv6+LLrpI4XBYHo9Hjz76qEaOHBnX\nbTY++A0EAqasc/To0e3ed3rSSSepT58+Ki0tVUVFhTZt2hS7t3fFihWqqamRJI0YMSI2fYj01eBV\njcOuYRixaYUk6Ysvvmhz2yeccIJycnLaXGbkyJGxQXkar1uSli9fHruncObMme1O/TNv3jzl5OR0\nauCclsyePVtFRUUqLi7Www8/rEAgoEsvvdS06WFac8IJJ7S5/sb9ezwenXrqqW2ub+jQobGpZJr/\n3dpFOBzW1q1btX//ftXU1DQZvKjxIFQbNmzQsccem5CaPv3009h+N2LECB199NFtLj9gwACddNJJ\neu211yQdvqd12rRprS7f3d8LAMmP8AoAkCS9/fbbmj9/vmpra+XxePTYY4/prLPOivt2G59tNWte\n0o7OTzlp0qTYWdJdu3bFwmt0jk/p8AF7e2GoubKysjZfb2/eUOnw2eGo+vr6Jq81PuvZkV49Ho8m\nTJigDz/8sN1l25KWlqannnpKZ599tsrKyvT444/r8ccfl8fj0ZgxYzRz5kyddNJJOuuss5SXl9et\nbTXWv3//Nl/3er3yeDwKh8PKz89v8nfXksZfmDT/u7Xaiy++qPvvv19vvvlmh2o7ePBgAqo6LDoI\nliRNnTq1Q++ZOnVqLLw2fn9Luvt7ASD5cdkwAEBLlizRGWecoerqanm9Xj3++OO68MIL477dhoaG\nJtPPmBVe8/PzO7Rc40uWG4eA7p7Rae8McmuXM3dUVVVV7HFXeu2O2bNna/369brhhhtiYT8cDuuL\nL77Qww8/rEsvvVR9+/bVdddd1+0zvVGd+fvq7t+tVRoaGnThhRdqwYIFWrx4cYeDWW1tbZwr+0rz\nUaY7orCwsMX3t8Sp/+8AJA6fEgCQ4p5++mldcsklCgaD8vl8evLJJ3XeeeclZNuffPKJGhoaYs/H\njRtnyno7evlx44DQ+Gxc44PowYMHa8yYMZ3a/oQJEzq1fGf5/f7Y46702l09e/bUjTfeqBtvvFEl\nJSX65JNP9OGHH+qNN97Q8uXLVV9frz/84Q9666239P777ys3N9e0bSerG264QU8//XSTn/Xs2VNF\nRUXKy8uT3++PTTVTXFwcuzTdSOB8p105Y93a7xgAdAXhFQBS2IMPPqjvf//7ikQi8vv9euaZZxJy\nqXDUE088EXucn5/f4UsR29PRQXgaL9f4DFHjgYlmzJihZ555xpS6zNK41q70aqa+ffvq7LPP1tln\nn61bb71V69ev18UXX6xVq1Zp7dq1uvPOO3XjjTfGZdvx4vF4Yo8b32vamu5euhsN+1HXXHONfvaz\nn2nYsGEtLv+nP/1JP/jBD7q1za5ovN9t27atQ++JzoMsHQ7jANAdXDYMACnqt7/9rb73ve8pEoko\nIyNDL7zwQkKD6+bNm/XQQw/Fnp955pmtjpjbWZ988km7l6yWlJTEzl5F7wmNmjFjRuzxm2++2eTs\nsB00Hozq3Xffbbe+rVu3NgkR8TRmzBjdd999seeLFy9OyHbN1HjQoP3797e5bENDg9auXdut7a1Z\nsyY2QNiJJ56oP/3pT60GV6ljo+ya9bvUWOP97pNPPmk3tIfDYS1durTF9wNAVxBeASAFXX/99frl\nL38pScrKytLLL7+suXPnJmz7paWlOuuss2KXFLrdbl1//fWmrb+2tlZ//OMf21zm97//feys2owZ\nM5qMZjtw4MDYdCrl5eXtTpXTWE1NTdzD7qhRo2KD25SVlemvf/1rm8ubNVVOR6cyajzAUnuDV9nR\nwIEDY4/feuutNpd98MEHm4z+2xWN7wVtb3Cq/fv3x6ZxakvjgY26W1/UyJEjY3839fX1uuuuu9pc\n/u9//7t27dol6fCl7okaFRlA8iK8AkAKMQxD1157rW699VZJh88wvfLKK03mToyn+vp6/e1vf9PE\niRO1fv362M+vvvpqjR8/3tRt3XTTTXr55ZdbfO3RRx9tcuD93e9+94hlfvWrX8Ue33DDDbrtttva\nvIS0trZWDzzwgEaNGmXqfLWtueKKK2KPf/7zn7cash544AE98MADpmzzz3/+s0455RS98847bS53\n5513xh63F8bsaObMmbHHr7/+uhYtWtTickuWLNHPf/7zbm+vT58+scevvvqqtmzZ0uJyxcXFOvPM\nMzs0oFjfvn1jj1etWhWb4qa7rrrqqtjjm2++udVL6pctW6Yf/ehHsecXXXRRhwcXA4DWcM8rAKSQ\nq666Sg8++GDs+X/8x3+ourpar7zySpvv8/l8Ovnkk9td/5tvvtlkcJ76+npVVVWpuLhYK1as0Ftv\nvXXEgfcZZ5yhu+++u5OdtM3v9ysQCOjss8/WOeeco/nz56tXr14qKSnRc889F5snUjp8KeO3vvWt\nI9Zx8cUX66mnntKLL74owzD061//Wvfee68WLlyoKVOmqKCgQHV1ddq9e7c+/PBDvfrqqwmdtuSn\nP/2p/vKXv2jPnj2qqanRKaecogsuuECnn366CgoKtHv3bj3zzDN68803m/yddNfSpUu1dOlSjRo1\nSqeddpqmTp2qnj17qqamRtu3b9fTTz+tVatWxZY///zzu73NRBs4cKDmzJmjt99+W4Zh6Nxzz9Vl\nl12mk08+WVlZWSouLtaiRYu0ePFiGYah9PT0bg2INXHiRPXv31979uxRWVmZpk+frssuu0xHHXWU\n8vPzdeDAAb333nt66qmnVFNT06HtDRw4UL169dL+/fu1Y8cOnXvuuTr//PPVs2fP2MBPQ4YM6fRg\nZNddd50eeughbd26VcFgUBdccIHOOOMMnXPOOerXr5/Kysr0yiuv6JlnnokF5vz8fP3mN7/p2l8O\nADRCeAWAFBKdbzHqhhtu6ND78vLy2p3mQlKnptfxer26/vrr9f/+3/9rMkCOGS699FKtXr1an376\nqZ577jk999xzLS7Xs2dPPf744y1O0eFyufTYY49p4cKFsb+3nTt36v/+7//a3HZ2dnaT0YDjJS8v\nT48//rjOOOMM1dXVKRKJ6Mknn9STTz55xLLz58+X2+3Wiy++2K1tNh6wZ+PGjdq4cWObyx933HG6\n5pprurVNq9xxxx2aNWuWQqGQgsGg/vKXv+gvf/nLEctdccUVKi4u1quvvtrlbbndbt12222xL1Eq\nKytb/UJn8ODBuuqqqzp0mf0ll1wS219ffPHFI/7//+hHP2r30t/mcnJy9M9//lOnnXaaDhw4IOnw\nGejGXwg1lpGRoccee0yDBg3q1HYAoCVcNgwASKjevXvrpz/9qdauXaubbrpJPp/P9G34/f7Y3LWt\nmTp1qpYtW9bm9DzZ2dlasmSJ7rjjjiaXdrYkJydH1157rTZt2mTanKrtmTNnjl577bU2B/e57LLL\n9OSTT8bOtnXH1Vdfrbffflunnnpqm+vzer36wQ9+oFdffTUu/38T4aijjtJzzz3X6nymbrdb/+//\n/T/df//9pmzv0ksv1T333NPmFx8nnXSS3n33XfXq1atD67zpppt0wgknmFJfY1OnTtWHH36oU045\npc3lpk2bpmXLlunMM880vQYAqYkzrwCQQubMmaPS0tJOvy87O7vFn6elpbU60JPH41F2drZyc3NV\nUFCg8ePHa9q0aRo7dqzpZ1qlw/cNRmsZN26cCgsLtXjxYn300Ud64YUXtH37dgUCARUVFWnu3Lk6\n/fTTO1SH2+3WT3/6U11zzTVatmyZ3nnnHe3atUuVlZXKzs7WwIEDdcwxx+i0005rMuhTe/W1Z/To\n0bHl+/Xr1+pyxx13nL744gu99NJLWrp0qUpKSpSdna3hw4fr61//emwU5WnTpsUuNe3OvKsnnHCC\nXnvtNW3btk2LFy/WZ599pv3798vn86lv376aOnWqzj777CbTDTWXl5cX66216ZE6+/c1d+5chcPh\nVsNmY1OmTIldSdDWFw3z58/Xli1b9NRTT+mjjz5SWVmZevTooXHjxuniiy+OnU2cPn167D0t/a50\n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\npJZk+WZjAOpBtvP/nnd/OqFuwuvzzz+v++67L+uyPffcU+eff74k6fXXX9evfvUrSdJtt93m+De8\np6FDh2r9+vXavHnw+cV6Lm9ubna8jVyKnde20ABLcAUAAH39eegMdfobFDK9RwQOmZTGx9er0eqW\nTyZnO8bnU3cgotWRbRX39R6tOOUL6I2mnR3tN1CP+p7/t7W1OXr1tW7C63vvvaff//73WZe1trb2\nCq+WZampqUl/+MMf9Ic//KHf+m+++Wbm44suukhNTU0aMmSIbr311oL6NHHiRL3//vtavXr1oOv1\nXD5pUu/BBJxoo5zyDbAEVwAAkM0n4RH6Y8t+/T4/PNmmsz/5Y8Ht/d/QvfRpuLg/zAPIre/5fyTi\nzCBrUh2F14MOOkj33HNP1mXjxo3r97n29vYBw25Pjz76qCSppaWl4PC6++67a+HChdq0aZNWrVql\nHXfcMet6ixcv7vU1TrdRbrkCLMEVAAAAqB32ufxgjx8Wo27C6y677KJddtkl53qDhVzbI488ogUL\nFkiSbrzxRo0cOVINDQ0F9+mQQw7RL37xC0nSM888ozlz5mRd75lnnpG0NdTts88+jrdRCQMF2L4f\nE1wBAAAA72tsbFQqlVJbm3PPk9dNeM1XPiH3n//8Zya8HnvssRo/fnxR2/rmN7+pHXfcUatWrdKt\nt96qM844o9894e+9914meJ5wwgn9ljvRRqUMFmAlgisAAABQS6LRqKMznfgdawn9XHbZZTrttNP0\ngx/8IOvyQCCQGc146dKl+v73v69kMplZvnbtWh1//PFKp9OKxWK68sory9JGJTU2NmrYsGH9Pk9w\nBQAAAGpPz2xSKq68ltFjjz2m999/X0OHDtVtt92WdZ2TTz5ZL7/8subNm6e7775bCxcu1H777aeO\njg698MIL6u7ult/v1/z58zVmzJiytQEAAAAAbkZ4dYE777xTU6dO1bXXXqt169b1GuF49913129+\n8xt94xvfKHsbldB3cCZbvvPAAgAAAPAOpsqpsuOOOy7zXOzIkSMHXO/666/X5s2bFQ6HB1xHknw+\nny644AKde+65WrRokdasWaNIJKKddtpJu+66a159cqKNcss2qrCU/zywAAAAALyjq6uLqXKqba+9\n9tJee+2Vc72jjjqqoHaDwaBmzpypmTNnFts1R9ooh1zT4RBgAQAAgNrR0dHh6EjDEgM2oQJyBde+\n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\nA8Bz3nzzTRMMBo0kI8k0NjY60u4777xjdt9990y7Pf81Njaau+66qyJtIH/PPPOMGTNmTNbvt/0v\nGo2auXPnmlQqVfL2EomEOf/8843P58u6rSOPPNJs2LCh7G0gt2eeecaMHj066/d4++23N88995xr\ntlOpvmKrX/3qV2b48OGDHjdaWlrM73//e0e29/nnn5vZs2dn3Y7P5zM/+tGPTDKZLHsbcMbFF1/c\n6/s/Z84cR9q96667TGNjY9b3ePfddzfvvPNORdqAuxFeAY9JJBJm+vTpRpJpaGhwLLyuWLHCjBo1\nKtPej370I3PvvfeaG2+80ey8886Zg/+8efPK2gYKM2/evMz3dcKECea8884zd955p7n//vvNT3/6\nU7PDDjtklp922mklb+/UU0/NtPetb33L3HHHHebuu+82J5xwQubzX/va10x3d3dZ28DgXnzxRRMO\nh40kM3r0aDN37lxz3333mZ/97Gdm2223NZJMJBIxL7/8ctW3U6m+4kvnnntu5mdtxowZ5tJLLzW/\n+93vzL333mvOP/9809zcnFl+8803l7Strq4us88++2RC5n/8x3+Y3/3ud+a2224z+++/f2Y7Z555\nZlnbgDNef/11EwgEMucfToXXnr/Ldt55Z3PTTTeZe++911xwwQUmFosZSWbUqFFm5cqVZW0D7kd4\nBTxm7ty5mZP7Qw891LHwethhh2UC8aJFi3ota29vNzNnzjSSTCwWM+vWrStbGyjMvHnzzIwZM8xT\nTz1lLMvqt3zz5s3mG9/4RuYX+h//+Meit/XUU09l2jnvvPP6Lb/tttsyy2+44YaytYHBxeNxM2HC\nBCPJjB071nz00Ue9lq9ZsyZztX7KlClFX61yYjuV6it6O/fcc82sWbPM3/72t6zLV65caXbccUcj\nyYTDYfPhhx8Wva1rrrlmwD9cWpZl5syZk1n+zDPPlK0NlC4ej5upU6caSebaa691LLx+9NFHmXC5\n3377mY6Ojl7LX3/9dROJRIwkc/jhh5etDXgD4RXwkCVLlphwOGxCoZBZunRpJiyWGl4XL16c+SV0\n+eWXZ11n6dKlmXUuuuiisrSBwn366acmnU4Pus6HH36YuUX3+OOPL3pb9pWP7bfffsCronZQHjFi\nhEkkEmVpA4O75557Mj9n//u//5t1nfvvvz+zzvz586u2nUr1Fb2tX78+5zqPPfZY5vt+3XXXFbWd\n7u5uM3To0MxdFtl0dnZmrrB//etfL0sbcMaVV15pJJmZM2eaDRs2OBZef/zjH2faWrp0adZ1Lrvs\nssw6ixcvLksb8AbCK+ARqVTK7L333kaSufLKK40xxrHwevnll2cO6IP9hd2+cjp+/PiytIHymTRp\nkpFkdtttt6K+fvXq1Zn395JLLhlwvd///veZ9RYuXOh4G8jNviNjxIgRA16pjMfjmUBwxBFHVG07\nleorCrdly5bMz+FJJ51UVBtPPvlkpo0HHnhgwPUuvPDCzC3Bfa++O9EGSrd48WITDAZNKBQyb7/9\nttm0aZNj4dW+yr/ffvsNuM7y5csz27viiivK0ga8galyAI+48cYb9cYbb2jKlCm68sorHW37pZde\nkiSNGzdOEyZMGHC9Aw44QJK0cuVKrVq1yvE2UD7JZFKSZIwp6uvt91f68j3MpueyP//5z463gdxe\nfvllSdLXv/71AUfWDIfD2m+//SQV/z12YjuV6isKZx8zpModN4wxmX3CyTZQmlQqpdNPP12pVEoX\nX3yxdtttN8faXrVqVeZcYLD3d+LEiRo7dqyk/scBJ9qAdxBeAQ/45z//qblz50qS7rzzTkUiEUfb\nf/fddyVJu+6666Dr7bLLLv2+xsk2UB7Lli3T6tWrJeV+fwaydOnSzMeDtTFu3DjFYjFJ/d9fJ9rA\n4FavXq0tW7ZIyv9nsbW1VR9//HHFt1OpvqI4zz//fObjUo8bQ4cO1XbbbTfgeoP9XnCiDZTm+uuv\n11tvvaXJkyfrpz/9qaNt5/t7QfryPS72d8tgbcA7CK+Ay1mWpTPOOEPxeFynn366DjzwQEfb7+rq\n0saNGyVJY8aMGXTdnsvXrl3raBson6uuuirz8YknnlhUGx999FHm41zv8fbbby+p//vrRBsYXCHf\n41J+Fp3YTqX6isKl02lde+21kqRAIKDjjjuuqHbs97iU99eJNlC8pUuX6uc//7kk6Y477nB87t9i\njgMbN25UV1eXo23AOwivgMvdcsst+utf/6ptttlGN954o+Pt21c+JKmxsXHQdXsub29vd7QNlMej\njz6q+fPnS5Jmzpypo446qqh27Pc4FAopFAoNuq79Hvd9f51oA4Or1M8ix43adtVVV+mtt96SJJ19\n9tnaaaedimrHfo9zvb+xWEw+n0/SwMeNUtpAcdLptE4//XQlEgmdcsop+va3v+34NjiWoFCEV8DF\nli1blrlF57//+7/V0tLi+DYSiUTm44GeObOFw+HMx/F43NE24LwlS5botNNOkyQ1Nzfr/vvvz5zc\nFcp+j3O9v9KX73Hf99eJNjC4Sv0sctyoXY8++mjmStsuu+yim266qei28v2Z9/l8mXWKPW4M1gaK\n88tf/lKLFi3SyJEj9ctf/rIs2+BYgkIRXgGXMsbozDPPVGdnp77zne/opJNOKst27GcLpdwH8p63\n2PT866UTbcBZK1eu1KxZs9Te3q5wOKxHH3100IG0crHf43x+2dvvcd/314k2MLhK/Sxy3KhNL730\nkk466SQZY7TtttvqySefLOn7ne/PfDqdzgwQVexxY7A2ULj3339f/+///T9JW0PsyJEjy7IdjiUo\nVO4/fwNw1F133aVnn30267Jjjz1WJ5xwgiRp3rx5eumllxSNRnXHHXeUrT9DhgyRz+eTMUatra2D\nrrt58+bMx83NzY62gS+tXLlSF110UdZlzc3N+t3vfjfo13/88cc66KCDtG7dOgUCAT344IM66KCD\nSurT0KFDJW19BnvLli0aMmTIgOva73Hf99eJNjA4+3ssqaw/i05sp1J9RX7eeOMNzZ49W93d3Ro2\nbJieffZZTZkypaQ27fe4lPfXiTZQuLPPPlvd3d369re/rVNOOaVs2ynmOODz+Xr9/nCiDXgH4RWo\nsL///e969NFHsy7rOVri3//+d0nS8OHDdckll2Rd/80335QkdXd369hjj5UkTZ06tdcAPbmEQiGN\nGzeu11DzA+m5fPLkyY62gS+1trYOuI/kunX8888/10EHHaTly5fL7/frnnvu0dFHH11ynyZNmpT5\neNWqVQNOlZBKpbRu3TpJ/d9fJ9rA4Hp+v/L9WfT5fL3em0ptp1J9RW7vvPOODjnkELW1tampqUkL\nFy7U9OnTS2530qRJeuONN7R27VpZliW/P/sNf4P9XnCiDRTOPgfp7OzMnF/01HMqpeeeey6zzve/\n//2Cno3t+3thMPbyHXfcsdftwU60Ae/gXQMqbM6cOQNeBcs2xPu6desGDDK2dDqdWefzzz8vuE/T\npk3TqlWrtGTJEqXTaQUCgazr2b/M/H6/pk6d6ngb2GrChAl65JFHsi4bbJqk1tZWHXzwwXr33Xfl\n8/l0++236+STT3akT9OmTct8vHjx4gGD5z/+8Q+l02lJ0u677+54Gxjc0KFDNXbsWK1Zs0aLFy8e\ndF37Z3H8+PFqamqq+HYq1VcM7l//+pcOOuggbdiwQbFYTE8//bT23XdfR9qeNm2aHn74YSUSCS1d\nunTAn2f7/ZWyHzdKbQPF++tf/5pznQ8//FAffvihJOmQQw4pqP3ddttNfr9flmUNehxIp9NasmSJ\npP7vrxNtwDsIr0CF7bHHHtpjjz1yrjdYyLXdcMMNevPNN9XQ0KD77rtPkrTNNtsU3KdZs2bpqaee\n0pYtW/TKK69o//3377eOZVmZ251nzpypYcOGOd4Gtho6dGjWv3QPpr29XbNmzcr84r7lllt0zjnn\nONanAw44QNFoVF1dXVqwYMGAoXjhwoWZjw899FDH20Bus2bN0l133aVFixbps88+y3pMWL9+fWY0\n2WK/x05sp1J9RXYrV67Ut7/9bX3yySeKRCJ6/PHH9c1vftOx9mfNmqUrrrhCkrRgwYIBA4P9M9/U\n1NRv+060gcLNnz9fqVRqwOWdnZ069dRTJUnf+c53Mr9v9t5774K2M2zYMO277776y1/+omeeeWbA\nq+svv/xyZnTgvscBJ9qAhxgAnnXYYYcZSaaxsbGkdj799FMTi8WMJHPYYYdlXeeBBx4wkowkc+ed\nd5alDRSnq6vLHHDAAZnv7S9+8YuybOekk04ykkw4HDbLli3rt3zLli1mhx12MJLMHnvsUbY2MLhX\nXnklsy9cccUVWde55JJLMuv87W9/q9p2KtVX9PfRRx+ZiRMnGkkmFAqZP/7xj2XZzu67724kmXHj\nxpn29vZ+y99//30TCoWMJHP66aeXrQ04a9OmTZmfyzlz5pTU1h133JFp68EHH8y6jn2+E4vFzKef\nflqWNuANhFfAw/IJr+l02hxzzDHmmGOOMVdeeeWA6/30pz/NHPh/9rOfmVQqlVn28ssvmxEjRhhJ\nZqeddjKJRKJsbaAwiUTCHHrooZnv+9VXX11UO7fffntmP1m9enXWdZYvX24aGhqMJDN9+nSzZs2a\nzLLNmzebww8/PNOPP/3pT2VrA7nNnj07E0oeeOCBXsvuvfdeEwwGjSRz9NFHZ/365cuXZ/aH3/72\nt2XbjlNtoDCfffaZ2XXXXY0kEwwGzaOPPlpUO5dccok55phjzPHHHz/gOk8//XTmZ/rII480bW1t\nmWUrV67MBNNoNGpWrlxZtjbgrHzD6wsvvJA5ljz77LNZ10kkEmannXYyksyIESPMK6+8klmWSqX6\nnVuUqw14A+EV8LB8wmsymcwcsL/2ta8Nut4hhxySWXeHHXYwhx56qNlrr70ynxs+fLh59913y9oG\nCnPDDTdkvrdNTU2Zk4SB/p144olZ2znzzDMz7bz99tsDbu/hhx82fr8/c/X0gAMOMAcffLBpbm7O\nfP3cuXMH7bMTbWBwn3/+udl5550z389dd93VHH744f0+t3Hjxqxfv2jRosx65557btm241QbKMwJ\nJ5zQ6zid67hx2WWXZW3HPrYHAoFBt3fllVdmtjd06FBz8MEHm/333z9ztTQQCOQM0E60AefkG17v\nueeezHq33377gOu9++67Zvjw4Zl19957b3PooYdm7sSRZA455BCTTCbL2gbcj/AKeJiT4dWYrX+5\nnDt3buYKqf0vEAiY2bNn5/UXbSfaQP6uuOKKXt/nXP8ikUjWdvINr8ZsvYre8w8S9r+JEycOeLtW\nOdrA4FpbW81ZZ51lotFor+9xLBYz55xzjtm8efOAX5tveC11O062gfzZvzvy/bfPPvtkbSff8GqM\nMfPnzzcTJkzo1/bee+9tXn311bz67UQbcIbT4dWYrVfRv/vd75pAINDr/R0xYoSZO3duXqHTiTbg\nbj5jjBEAT3r11Vf18ccfKxgM6sgjj8y6jjEmMxLxyJEjdcABB+RsN5lM6h//+IfWr1+vIUOG6Ctf\n+UrBA0E50QZyW7p0qd5777281w8EAjrqqKP6ff7NN9/UihUrJEkHH3xwXvMkrlixQsuWLVMqldK4\nceOKGj3aiTYwuPb2di1ZskQbNmxQS0uLpk2blnPE3k2bNun555+XtHXakRkzZpRlO+VoA7nZvzvy\n1dLSogMPPLDf5//v//5PGzdulN/vz3tKrqVLl2r16tUKBoOaMmWKxo8fn3c/nGwDpUkmk3riiSck\nbZ2qZqCBKFetWqVFixZJkvbcc09NnDgxZ9ufffaZ3n33XW3ZskWjR4/W9OnTFQqFCuqfE23AnQiv\nAAAAAADXyz7TMwAAAAAALkJ4BQAAAAC4HuEVAAAAAOB6hFcAAAAAgOsRXgEAAAAArkd4BQAAAAC4\nHuEVAAAAAOB6hFcAAAAAgOsRXgEAAAAArkd4BQAAAAC4HuEVAAAAAOB6hFcAAAAAgOsRXgEAAAAA\nrkd4BQAAAAC4HuEVAAAAAOB6hFcAAJDVPffco7POOktPPvlktbtSkj//+c8666yzdMstt1S7KwCA\nEviMMabanQAAAO6yZs0a7bzzzkqn01q2bJnGjh1b7S4VrbW1VePHj9eWLVu0ePFiTZs2rdpdAgAU\ngSuvAACgn0svvVRdXV06++yzPR1cJWnYsGG68MILZVmW/uu//qva3QEAFIkrrwAAoJe33npLe+65\np/x+v1atWqUxY8ZUu0sla2tr0/bbb6+Ojg4988wz+vd///dqdwkAUCCuvAIAgF5uvfVWGWP0ne98\npyaCqyQ1NzfryCOPlLS1PgCA9xBeAQBARmtrqx566CFJ0sknn1zl3jjLrmfhwoVauXJldTsDAChY\nsNodAAAAg1u+fLmuv/56SdJ+++2nM844I+t68XhcF198sTo7O7Xtttvq2muvlc/nK2hbDz74oDo7\nOxUOhzNXKrN54YUXdP/990uSfvvb3w643tNPP63HHntMsVhMv/rVr3ote++99/TLX/5SknT11Vdr\n++23V2trqx5++GG9//77isVi2nfffXX44Yf3a/e1117T888/r3Xr1mn06NE66qijNHXq1EFrO+ig\ngzRixAht3LhR99xzj6666qpB1wcAuIwBAACu973vfc9IMoFAwLzyyitZ1zn33HONJOPz+cyCBQuK\n2s7RRx9tJJmvfvWrg6536623Gkkm16nENddcYySZoUOH9lv23HPPZdp4++23zWOPPWaampoyn7P/\n7b///qa9vd0YY0x7e7s54ogj+q3j9/vNddddl7O+WbNmGUlmv/32y7kuAMBduG0YAAAPuP322zV5\n8mSl02mdeOKJ2rRpU6/lTzzxhH7zm99Iki688ELNmjWr4G0YY/Tyyy9Lkvbdd9/SO12AV199Vccc\nc4ymTp2q6667TrfeequOO+44SVvnaT377LNljNHs2bP1pz/9SWeddZZuvfVWXXPNNZo4caIsy9Ll\nl1+uBQsWDLqdmTNnSpIWLVqkzs7OstcFAHAOtw0DAOABQ4YM0cMPP6yZM2dqzZo1OuOMM/TYY49J\nktauXZu5lXivvfbK3GJcqOXLl+uzzz6TJM2YMcORfufr4osv1mWXXaaf//znmc+dd955uuqqqzR3\n7lw9/PDDGjVqlN555x298cYbvW4RPvfcczV9+nStWbNGN9xwgw499NABt7PHHntIkpLJpN544w19\n85vfLF9RAABHceUVAACP2HPPPXXDDTdIkh5//HH9+te/Vjqd1ve+9z1t3LhRTU1NeuihhxQOh4tq\n/+OPP858PHLkSEf6nK9ddtlF11xzTb/PX3TRRWpoaJBlWbrlllt0880393u2dfjw4Tr33HMlSa+8\n8ora29sH3M4222yT+bhnvQAA9yO8AgDgIRdeeGFmAKOLLrpIp59+ul566SVJ0m233abJkycX3bZ9\n1VWSWlpaSutogU4//fSsg0s1NjZmwmpTU5OOP/74rF//b//2b5K23vr8/vvvD7idnnX1rBcA4H6E\nVwAAPOaee+7RmDFjFI/Hdd9990mSTjnllJKntul5xbKxsbGktgo1ffr0AZfZV4F33XVXhUKhrOv0\nvKLa2to6YFs969qyZUuBvQQAVBPhFQAAjxk5cmSvaV5aWloygzWVYsSIEZmPBwuA5dDc3DzgsmAw\nmPc60tbnWQfSs66e9QIA3I/wCgCAx7S3t+sXv/hF5vWGDRv05JNPltxuz6uXGzduLLk9N9qwYUPm\n4571AgDcj/AKAIDH/OAHP9C//vUvBQIBfeUrX5Ek/ed//qeWL19eUrs77rhj5uP169eX1JYtlUo5\n0o5TetbVs14AgPsRXgEA8JD58+dnnnOdO3euFi5cqOHDh2vLli068cQTB71lNpfRo0dnBnx64403\n8v66wYLu2rVri+5PObz++uuStk49VOnpgAAApSG8AgDgEcuWLdP3v/99SdIBBxygyy+/XOPGjdO8\nefMkSYsWLdIVV1xR0jb2339/SdJrr72W99e8+uqrWT8fj8e1cOHCkvrjtL/97W+SpK997WsKBAJV\n7g0AoBCEVwAAPCCRSOiEE05Qe3u7WlpaNH/+fPn9W3+NH3PMMZozZ44k6aabbtKzzz5b9HYOPfRQ\nSdJ7772X91QyF110kd59991en+vs7NQZZ5yhdevWSZK6urpKuirshM7OTr355puSvqwTAOAdhFcA\nADzg0ksvzQQve6qcnm6++WZNnTpVxhidcsop+vTTT4vazuzZszV69GgZY/Tggw/m9TWWZWn69On6\nxje+oZNPPllHHHGExo4dqwceeEB77rmnpK3h++CDD9bPf/7zovrlhMcff1ydnZ2KRqMlTysEAKg8\nwisAAC63YMEC3XLLLZKk888/X7Nnz+63TjQa1UMPPaRoNKpPPvlEp556qowxBW8rFArprLPOkiTd\ne++9eX3NU089pfHjx+uVV17R/Pnz9eSTT6q1tVU//OEP9eKLL2rSpEmSpBdffLGkq8Klsp8VPuGE\nEzRs2LCq9QMAUByfKeY3GwAAqJgnnnhCn332mfx+v773ve8pEokMuO5LL72kf/3rX5K2XkUdNWpU\nwdv76KOPNGXKFHV1denvf/+79thjj37r/PrXv9YPf/hDSZIxRpZl6a9//atWrFihxsZG7bPPPtp+\n++0lSZs3b9af/vQnNTc368ADD8z0f926dVqwYIGkrbc+Dx8+PGt/nn32Wa1evVpjxozRrFmzsq6z\nefNmPfLII5KkQw45RDvssEOv5atXr9bEiRNljNHixYs1bdq0gr8vAIDqIrwCAIB+rrzySl177bX6\n7ne/qyeeeKLf8r7h1e3OOecczZs3T2eccYbuvvvuancHAFAEbhsGAAD9XHrppRo9erSefPLJgqbN\ncaMVK1bof/7nf9TU1FTVZ24BAKUJVrsDAADAfZqamvTYY4/pnXfeUTqdrnZ3SrJlyxbddtttmjRp\nkrbbbrtqdwcAUCTCKwAAyGrffffVvvvuW+1ulGzatGk84woANYDbhgEAAAAArseVVwAAULBvfetb\nmjdvXrW7AQCoI4w2DAAAAABwPW4bBgAAAAC4HuEVAAAAAOB6hFcAAAAAgOsRXgEAAAAArkd4BQAA\nAAC4HuEVAAAAAOB6hFcAAAAAgOsRXgEAAAAArkd4BQAAAAC4HuEVAAAAAOB6hFcAAAAAgOsRXgEA\nAAAArkd4BQAAAAC4HuEVAAAAAOB6hFcAAAAAgOsRXgEAAAAArkd4BQAAAAC4HuEVAAAAAOB6/z8p\naiE30fNqtwAAAABJRU5ErkJggg==\n"
          }
        }
      ],
      "source": [
        "# the bend overlaps slightly with the straight waveguide sections by construction. Ignore this warning.\n",
        "td.config.logging.level = \"ERROR\"\n",
        "sim = make_sim(middle_width0)\n",
        "\n",
        "fig, ax = plt.subplots(figsize=(6, 5), tight_layout=True)\n",
        "sim.plot(z=0.0, ax=ax)\n",
        "ax.set_title(\"2D bend simulation\")\n",
        "plt.show()"
      ],
      "id": "8ad51574"
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "## Select the Mode of Interest\n",
        "\n",
        "Next, we solve for a few modes on the input waveguide cross section and\n",
        "assume that we are interested in the mode that appears as\n",
        "`mode_index=2`. We then tighten the source and monitor setup around this\n",
        "physical mode before the differentiable simulation by using `to_source`\n",
        "on the `ModeSolver` result and by defining\n",
        "`ModeSpec(num_modes=1, target_neff=target_neff)`.\n",
        "\n",
        "This is the key step that makes the example compatible with\n",
        "`parallel adjoint`: the target mode is fixed before the forward run, so\n",
        "the required adjoint simulation is already known. After tightening the\n",
        "mode specification, the same physical mode is tracked as `mode_index=0`\n",
        "in the differentiable simulation.\n",
        "\n",
        "This matters because parallel adjoint prepares adjoint simulations from\n",
        "the monitor outputs that may contribute to the objective. If we kept\n",
        "`ModeSpec(num_modes=3)` and only selected one mode afterward inside the\n",
        "objective, Tidy3D would still need to prepare adjoint simulations for\n",
        "all three monitored mode indices. By shrinking the `ModeSpec` to the one\n",
        "mode we actually use, the `ModeMonitor` contributes only one adjoint\n",
        "simulation in this example."
      ],
      "id": "d640ef49-51e3-4ba7-ac5c-c49b60c1c673"
    },
    {
      "cell_type": "code",
      "execution_count": 7,
      "metadata": {},
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Effective index of computed modes: [[1.95681671 1.9488161  1.82578349]]"
          ]
        }
      ],
      "source": [
        "from tidy3d.plugins.mode import ModeSolver\n",
        "\n",
        "ms = ModeSolver(simulation=sim, plane=mode_src, mode_spec=mode_spec, freqs=[freq0])\n",
        "mode_data = ms.solve()\n",
        "\n",
        "print(\"Effective index of computed modes:\", np.array(mode_data.n_eff))"
      ],
      "id": "d187b8cc"
    },
    {
      "cell_type": "code",
      "execution_count": 8,
      "metadata": {},
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Targeting the mode that appeared as mode_index=2 in the initial solve.\n",
            "Using ModeSpec(num_modes=1, target_neff=1.8258) for the differentiable run."
          ]
        }
      ],
      "source": [
        "target_mode_index = 2\n",
        "target_neff = float(np.real(np.array(mode_data.n_eff).squeeze()[target_mode_index]))\n",
        "\n",
        "# Restrict the differentiable simulation to the one physical mode we want.\n",
        "# After tightening the ModeSpec, this target mode is tracked as mode_index = 0.\n",
        "mode_src = ms.to_source(\n",
        "    mode_index=target_mode_index,\n",
        "    source_time=mode_src.source_time,\n",
        "    direction=mode_src.direction,\n",
        ")\n",
        "mode_spec = td.ModeSpec(num_modes=1, target_neff=target_neff)\n",
        "mode_mnt = mode_mnt.updated_copy(mode_spec=mode_spec)\n",
        "mode_index = 0\n",
        "\n",
        "# at the output plane, the guided wave travels in the negative monitor direction\n",
        "output_direction = \"-\"\n",
        "\n",
        "print(f\"Targeting the mode that appeared as mode_index={target_mode_index} in the initial solve.\")\n",
        "print(f\"Using ModeSpec(num_modes=1, target_neff={target_neff:.4f}) for the differentiable run.\")"
      ],
      "id": "998aea12"
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "## Objective Function\n",
        "\n",
        "Our figure of merit is the transmission of the selected output mode at a\n",
        "single target frequency."
      ],
      "id": "3d08fa36-ae51-41cc-9e1d-774e99e330d0"
    },
    {
      "cell_type": "code",
      "execution_count": 9,
      "metadata": {},
      "outputs": [],
      "source": [
        "def objective(middle_width):\n",
        "    sim = make_sim(middle_width)\n",
        "    sim_data = web.run(\n",
        "        sim,\n",
        "        task_name=\"bend\",\n",
        "        verbose=False,\n",
        "    )\n",
        "\n",
        "    amps = (\n",
        "        sim_data[monitor_name]\n",
        "        .amps.sel(\n",
        "            direction=output_direction,\n",
        "            mode_index=mode_index,\n",
        "        )\n",
        "        .values\n",
        "    )\n",
        "    transmission = anp.abs(anp.array(amps)) ** 2\n",
        "    return anp.sum(transmission)\n",
        "\n",
        "\n",
        "value_and_grad = ag.value_and_grad(objective)"
      ],
      "id": "6f65f062"
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "Next, we define a small helper that toggles the relevant adjoint\n",
        "settings and measures the runtime of one gradient evaluation. Note that\n",
        "we can use the `with config as cfg:` context to use temporary changes\n",
        "which are reverted after leaving the `with` block."
      ],
      "id": "4bf728de-8082-41e4-853a-ec0386f1643b"
    },
    {
      "cell_type": "code",
      "execution_count": 10,
      "metadata": {},
      "outputs": [],
      "source": [
        "def timed_value_and_grad(middle_width, parallel_run):\n",
        "    with config as cfg:  # optional context manager to ensure temporary changes\n",
        "        cfg.adjoint.local_gradient = (\n",
        "            True  # note that parallel adjoint is currently only supported with local gradients\n",
        "        )\n",
        "        cfg.adjoint.parallel_run = parallel_run\n",
        "\n",
        "        t0 = time.perf_counter()\n",
        "        value, grad = value_and_grad(middle_width)\n",
        "        elapsed = time.perf_counter() - t0\n",
        "\n",
        "    return {\n",
        "        \"value\": float(value),\n",
        "        \"grad\": float(grad),\n",
        "        \"elapsed\": elapsed,\n",
        "    }"
      ],
      "id": "e32131ab"
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "## Compare Sequential and Parallel Adjoint\n",
        "\n",
        "We now evaluate the same gradient twice: once with `parallel adjoint`\n",
        "disabled, and once with it enabled."
      ],
      "id": "d4cff38d-1e63-4f5b-90cc-f8087cf0df16"
    },
    {
      "cell_type": "code",
      "execution_count": 11,
      "metadata": {},
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "method                   objective      gradient      time [s]\n",
            "--------------------------------------------------------------\n",
            "sequential adjoint      3.8934e-01    3.5759e-01         55.48\n",
            "parallel adjoint        3.8934e-01    3.5764e-01         24.98\n",
            "\n",
            "speedup = 2.22x"
          ]
        }
      ],
      "source": [
        "result_parallel = timed_value_and_grad(middle_width0, parallel_run=True)\n",
        "result_sequential = timed_value_and_grad(middle_width0, parallel_run=False)\n",
        "\n",
        "print(f\"{'method':<20}{'objective':>14}{'gradient':>14}{'time [s]':>14}\")\n",
        "print(\"-\" * 62)\n",
        "print(\n",
        "    f\"{'sequential adjoint':<20}\"\n",
        "    f\"{result_sequential['value']:>14.4e}\"\n",
        "    f\"{result_sequential['grad']:>14.4e}\"\n",
        "    f\"{result_sequential['elapsed']:>14.2f}\"\n",
        ")\n",
        "print(\n",
        "    f\"{'parallel adjoint':<20}\"\n",
        "    f\"{result_parallel['value']:>14.4e}\"\n",
        "    f\"{result_parallel['grad']:>14.4e}\"\n",
        "    f\"{result_parallel['elapsed']:>14.2f}\"\n",
        ")\n",
        "print()\n",
        "print(f\"speedup = {result_sequential['elapsed'] / result_parallel['elapsed']:.2f}x\")"
      ],
      "id": "f404d7f7"
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "In a successful run, the objective value and gradient should agree\n",
        "between the two evaluations (plus some numerical noise), while the\n",
        "parallel run finishes sooner.\n",
        "\n",
        "The achievable speedup is not determined only by the pure simulation\n",
        "time. It also depends on how much of the total wall-clock time is spent\n",
        "in work that cannot be overlapped: constructing the simulations,\n",
        "uploading them, monitoring them, downloading the results, and the local\n",
        "postprocessing that combines forward and adjoint data. If these fixed\n",
        "costs are large compared to the actual solver runtime, the observed\n",
        "speedup will be smaller. If the supported adjoint work dominates the\n",
        "runtime, the speedup can approach 2x.\n",
        "\n",
        "## Rules and Guardrails\n",
        "\n",
        "Parallel adjoint is controlled through the standard adjoint\n",
        "configuration. The direction policy determines how many mode directions\n",
        "are prepared for a `ModeMonitor`, and `max_num_adjoint_per_fwd` sets the\n",
        "per-run cap for parallel adjoint work.\n",
        "\n",
        "Supported monitor outputs:\n",
        "\n",
        "- `ModeMonitor` amplitudes.\n",
        "- `DiffractionMonitor` amplitudes.\n",
        "- point `FieldMonitor` probes with `size=(0, 0, 0)` and `colocate=True`.\n",
        "\n",
        "If any unsupported monitor is present in the differentiable simulation,\n",
        "Tidy3D falls back to the sequential adjoint pipeline for that run.\n",
        "Unsupported monitors include:\n",
        "\n",
        "- planar or volumetric `FieldMonitor` outputs.\n",
        "- All other monitors which are not listed above.\n",
        "\n",
        "Direction policy for `ModeMonitor` outputs:\n",
        "\n",
        "- `\"assume_outgoing\"` is the default. Tidy3D infers the outgoing mode\n",
        "  direction from the monitor position relative to the simulation center\n",
        "  and keeps only the mode that points away from the center toward the\n",
        "  outer simulation bounds. This avoids running adjoint simulations for\n",
        "  the other direction.\n",
        "- `\"run_both_directions\"` prepares both `\"+\"` and `\"-\"` directions for\n",
        "  each monitored mode. Use this if you are not sure in which direction\n",
        "  the mode propagates across the monitor. Tidy3D will then run adjoint\n",
        "  simulations for both directions, which increases the mode-monitor part\n",
        "  of the parallel adjoint work.\n",
        "\n",
        "How many parallel adjoint simulations can be produced?\n",
        "\n",
        "- `ModeMonitor`: one basis per `(freq, mode_index, direction)`. With\n",
        "  `\"assume_outgoing\"`, this is `num_freqs * num_modes`. With\n",
        "  `\"run_both_directions\"`, this becomes `2 * num_freqs * num_modes`.\n",
        "- `DiffractionMonitor`: one basis per\n",
        "  `(freq, order_x, order_y, polarization)` for propagating orders only.\n",
        "  In practice this is typically\n",
        "  `2 * num_freqs * num_propagating_orders`, because the polarizations\n",
        "  are `s` and `p`.\n",
        "- point `FieldMonitor`: one basis per `(freq, field_component)`, so\n",
        "  `num_freqs * num_components` for the selected components among `Ex`,\n",
        "  `Ey`, `Ez`, `Hx`, `Hy`, and `Hz`.\n",
        "- Tidy3D then groups compatible bases by port, so the number of launched\n",
        "  adjoint simulations can be smaller than the basis count.\n",
        "- If the grouped count exceeds `config.adjoint.max_adjoint_per_fwd`,\n",
        "  parallel adjoint is disabled and Tidy3D falls back to the sequential\n",
        "  path.\n",
        "\n",
        "Practical guidance:\n",
        "\n",
        "- Include only monitors in the differentiable simulation that are\n",
        "  actually used for the gradient calculation.\n",
        "- Restrict each supported monitor to the essential data that enters the\n",
        "  objective, such as the mode of interest, the relevant frequency, or\n",
        "  the needed field components.\n",
        "- Place `ModeMonitor` outputs such that the mode of interest points away\n",
        "  from the simulation center toward the outer boundary. This makes\n",
        "  efficient use of the default `\"assume_outgoing\"` policy.\n",
        "\n",
        "For more general autograd workflows:\n",
        "\n",
        "- [Autograd0Overview](https://www.flexcompute.com/tidy3d/examples/notebooks/Autograd0Overview/)\n",
        "- [Autograd0Quickstart](https://www.flexcompute.com/tidy3d/examples/notebooks/Autograd0Quickstart/)\n",
        "- [Autograd1Intro](https://www.flexcompute.com/tidy3d/examples/notebooks/Autograd1Intro/)\n",
        "- [Autograd2GradientChecking](https://www.flexcompute.com/tidy3d/examples/notebooks/Autograd2GradientChecking/)\n",
        "- [Autograd3InverseDesign](https://www.flexcompute.com/tidy3d/examples/notebooks/Autograd3InverseDesign/)\n",
        "\n",
        "For more waveguide bend examples:\n",
        "\n",
        "- [Autograd8WaveguideBend](https://www.flexcompute.com/tidy3d/examples/notebooks/Autograd8WaveguideBend/)\n",
        "- [Autograd18TopologyBend](https://www.flexcompute.com/tidy3d/examples/notebooks/Autograd18TopologyBend/)"
      ],
      "id": "1367265e-e01e-4910-8554-16cd51ec19bd"
    }
  ],
  "nbformat": 4,
  "nbformat_minor": 5,
  "metadata": {
    "kernelspec": {
      "display_name": "Python 3",
      "language": "python",
      "name": "python3"
    }
  }
}