{ "cells": [ { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [ { "data": { "image/png": "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uor4+HhmzZrFkCFD2LFjR8FXD5mZmdSoUaPQ7yQnJxc8VrNmzZKOXGwyMzMLxnJYhQoVKFWqFJmZmQXTRNL47733Xho2bEiFChVYvHgxw4YNY/369UycOBEo2jwJRzt27CAQCBwxtuTk5LAe17E0btyY119/ndq1a7Nt2zYeffRRmjVrxurVqwvGe7R5sWHDBhtxg64oY87MzKRUqVJUqFDhiGki4W+kXbt2dOvWjerVq7N+/XoefvhhrrzySpYtW0ZsbGzEj//PtGXGsqPt2Pfn29KlS4v8fA899BBNmzalQYMGDBkyhFGjRvHPf/6z0DSO4xT62Rza+fXP95eE4h7/0cZgjCl0fyiN/2hOZp7cd999tGzZkgsvvJA77riDCRMmMGnSJHbu3FnwfEWZJ+HqaMsyEsb1Z+3ateO6666jXr16tGrVik8++QSA1157rWCaaJkX/+tUxhwp8+WGG26gffv21K1bl44dO/LZZ5+xZs2agr+NY4mU8f+ZtsxYNnDgQG688cbjTvPnLQkno0mTJmRlZbFt2zaSk5NJSUk5opUf3jT55085JaE4x5+SksK3335b6L5du3aRn59fMLZQG//RnM48OXw0wy+//ELFihWLNE/CUVJSEl6v96jLMpzHVVRlypShXr16rF27li5dugAHt0RUqVKlYJpInheHj+Q63phTUlLIy8tj165dhbZObN++nWbNmpVs4BJQpUoVqlevztq1a4HoG7+2zFiWlJTEeeedd9xbXFzcKT//8uXLiYuLKziUuWnTpsydO7fQfhXp6emkpqaeVmk6VcU5/qZNm7Jq1Sq2bt1acF96ejqxsbE0atSoYJpQGv/RnM48Wb58OUDBCr4o8yQclSpVikaNGjFz5sxC98+cOTMiV9R/lpuby48//kiVKlWoWbMmKSkpheZFXl4ec+bMidh5UZQxN2rUiJiYmELTbN26lVWrVkXkfNm5cycbN24seO1H2/h1NFMY2bBhg1m+fLkZOXKkSUhIMMuXLzfLly832dnZxhhjPvroI/PSSy+ZlStXml9++cW8/PLLply5cuaee+4peI7du3eb5ORk06NHD7Ny5UrzwQcfmHLlypmnnnrK1rCK7ETj9/v9pm7duuaqq64y3333nfnyyy9N1apVzcCBAwueI5zH/2cLFiwwY8eONcuXLzfr1q0zU6dONampqaZTp04F0xRlnoSrKVOmmJiYGDNp0iTzww8/mEGDBpkyZcqY3377zXa0YjdkyBAze/Zss27dOrNo0SLToUMHU7Zs2YKxPvHEEyYxMdF88MEHZuXKlaZHjx6mSpUqJisry3LyU5ednV3wGgcK/tY3bNhgjCnamPv162eqVq1qvvzyS/Pdd9+ZK6+80tSvX9/4/X5bwyqy440/OzvbDBkyxCxYsMCsX7/efP3116Zp06bmzDPPjJjxnyyVmTDSu3dvAxxx+/rrr40xxnz22WemQYMGJiEhwZQuXdrUrVvXPPvssyY/P7/Q8/z3v/81zZs3N7GxsSYlJcWMGDEiLA5LPtH4jTlYeNq3b2/i4+PNGWecYQYOHFjoMGxjwnf8f7Zs2TLTuHFjk5iYaOLi4sy5555rhg8fbvbu3VtouqLMk3D1/PPPm+rVq5tSpUqZhg0bmjlz5tiOFBQ33HCDqVKliomJiTGpqamma9euZvXq1QWPu65rhg8fblJSUkxsbKxp0aKFWblypcXEp+/rr78+6uu9d+/expiijXn//v1m4MCB5owzzjDx8fGmQ4cOJiMjw8JoTt7xxr9v3z7Tpk0bU6lSJRMTE2OqVatmevfufcTYwnn8J8sxJkxPfSoiIiKC9pkRERGRMKcyIyIiImFNZUZERETCmsqMiIiIhDWVGREREQlrKjMiIiIS1lRmREREJKypzIiIiEhYU5kRERGRsKYyIyIiImFNZUZERETCmsqMiIiIhLX/B9P+GflOOHN7AAAAAElFTkSuQmCC", "text/plain": [ "<Figure size 640x480 with 1 Axes>" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "''' \n", "Import all the phidl functions and classes into the global namespace\n", "'''\n", "\n", "from phidl import Device, Layer, LayerSet, Group\n", "from phidl import quickplot as qp\n", "import phidl.geometry as pg\n", "import phidl.routing as pr\n", "import phidl.utilities as pu\n", "\n", "\n", "'''\n", "Firstly, create a layer set, which distuingishes between different layers such that a specific layer can be extracted from the file\n", "'''\n", "\n", "\n", "lys = LayerSet()\n", "lys.add_layer('dot', gds_layer = 1, gds_datatype = 0, color = 'red', description = \"This is the dot layer, which is red, and composed of Pd and Ti\", alpha = 1)\n", "lys.add_layer('barrier', gds_layer = 2, gds_datatype = 0, color = 'black', description = \"This is the barrier layer, which is black, and composed of Ti and Pd\", alpha = 1)\n", "lys.add_layer('marker', gds_layer = 3, gds_datatype = 0, color = 'blue', description = \"This is the marker layer, which is blue, and composed of Ti and Pt\", alpha = 1)\n", "\n", "'''\n", "The arguments for add_layer are: name, gds_layer, gds_datatype, color, description, alpha, where alpha is the transparency of the layer.\n", "You can leave almost all of the arguments out, and it will resign to default values. Just make sure to assign a gds_layer, or everything will be in layer 0.\n", "There are more arguments; see documentation.\n", "'''\n", "\n", "dot_layer = lys['dot'] # Assigning the dot layer to a variable, for ease of use\n", "barrier_layer = lys['barrier'] # Assigning the barrier layer to a variable, for ease of use\n", "marker_layer = lys['marker'] # Assigning the marker layer to a variable, for ease of use\n", "\n", "'''\n", "Defining parameters\n", "'''\n", "\n", "r = 120 # Define a radius for a circle\n", "zero = (0, 0) # Define a zero-coordinate \n", "angle_resol = 1 # How jagged the circle edge is. The higher the number, the lower the resolution.\n", "\n", "'''\n", "Create a blank Device and add a polygon to it\n", "'''\n", "\n", "D = Device() # Create a blank Device \n", "\n", "dot1 = D << pg.circle(radius = r, angle_resolution=angle_resol, layer = dot_layer) # Create a circle with radius r, and pipe it to the blank Device D. Naming each\n", " # circle uniquely, allows you to fetch the circles attributes later on.\n", "dot1.center = zero # Setting the center of the dot to be the zero-coordinate\n", "\n", "'''\n", "The function quickplot (imported as qp), will show a preview of the Device D\n", "'''\n", "\n", "qp(D)\n" ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Center of circle one is: (0.0, 0.0) and the center of circle two is: (400.0, 0.0)\n", "The x- and y-size of the first circle is: 240.0, 240.0. And of the second circle: 288.0, 288.0\n", "The size of the first circle is: [240. 240.]. And of the second circle: [288. 288.]\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjoAAAGdCAYAAAAbudkLAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAA9hAAAPYQGoP6dpAABSxElEQVR4nO3dd3wUdf7H8dfsbhJCmkCAEAgdUQxSLaBIE1ARxY6cCIqcLQgCx4meUjzBU+FUEM6KBRHvFNQ7UQFFiqAiRcCCgEAoiQGNKZSE3fn+/gjJz0iRkmR2Z9/Px2Mfkc0kvj/Z2c07s1MsY4xBRERExIU8TgcQERERKS8qOiIiIuJaKjoiIiLiWio6IiIi4loqOiIiIuJaKjoiIiLiWio6IiIi4loqOiIiIuJaPqcDVATbttm1axdxcXFYluV0HBERETkOxhjy8vJITk7G4zm5bTNhUXR27dpFSkqK0zFERETkJGzfvp06deqc1NeGRdGJi4sDin5Q8fHxDqcpO7Zts337dlJSUk666Yai/Px8lixZQocOHYiNjXU6ToUJ18cbwnd2za25w8Gx5s7NzSUlJaXk9/jJCIuiU/x2VXx8vOuKTlxcHPHx8WH1pPB4PFSuXJn4+PiwKzrh+HhD+M6uuTV3ODieuU9lt5Pw+UmKiIhI2FHREREREddS0RERERHXUtERERER11LREREREddS0RERERHXUtERERER11LREREREddS0RERERHXUtERERER11LREREREddS0RERERHXUtERERER11LREREREddS0RERERHXUtERERER11LREREREddS0RERERHXUtERERER11LREREREddS0RERERHXUtERERER11LREREREddS0RERERHXUtERERER11LREREREddS0RERERHXUtERERER11LREREREddS0RERERHXUtERERER11LREREREddS0RERERHXUtERERER11LREREREddS0RERERHXUtERERER11LREREREddS0RERERHXUtERERER11LREREREddS0RERERHXUtERERER11LREREREddS0RERERHXUtERERER11LREREREddS0RERERHXUtERERER11LREREREddS0RERERHXUtERERER11LREREREdcq16IzYcIEzjnnHOLi4qhRowa9e/dmw4YNpZYxxjBmzBiS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4MGDpZZJTk4mNTU1ZH42OTk5AFStWhUIn7kDgQCzZs1i7969tGvXzvVz33333fTs2ZOLL7641P1un3vjxo0kJyfToEED+vTpw48//gi4e+733nuPtm3bct1111GjRg1atWrF888/X/L5ipxdRccFMjMzqVmzZqn7qlSpQmRkJJmZmUddpvjfxcsEsz179hAIBI44QyjkP1nFsx1r7szMTCIjI6lSpcpRlwlmxhiGDRvGhRdeSGpqKuD+udetW0dsbCxRUVHccccdzJkzh2bNmrl67lmzZrFq1SomTJhw2OfcPPd5553Hq6++ykcffcTzzz9PZmYm7du35+eff3b13D/++CPTpk2jSZMmfPTRR9xxxx3cc889vPrqq0DFPuZhcfXyYDRmzBjGjh17zGVWrFhB27Ztj+v7WZZ12H3GmFL3/34Zc2hH5CN9bbA60gyhlP9knczcofKzSUtLY+3atSxduvSwz7l17qZNm7JmzRp+/fVX3n77bfr378+iRYtKPu+2ubdv386QIUOYN28elSpVOupybpsb4NJLLy357+bNm9OuXTsaNWrEK6+8wvnnnw+4c27btmnbti3jx48HoFWrVnzzzTdMmzaNm2++uWS5iphdW3QckpaWxnfffXfMW/Fft38kKSnpsHabnZ3NwYMHS9rykZbJysoCDm/UwSgxMRGv13vEGUIh/8kqPjrjWHMnJSVRWFhIdnb2UZcJVoMHD+a9995j4cKF1KlTp+R+t88dGRlJ48aNadu2LRMmTKBFixY89dRTrp175cqVZGVl0aZNG3w+Hz6fj0WLFvH000/j8/mOunU51Oc+kpiYGJo3b87GjRtd+3gD1KpVi2bNmpW678wzzyQ9PR2o2Oe4io5DEhMTOeOMM455O9ZfPr/Vrl071q9fT0ZGRsl98+bNIyoqijZt2pQss3jx4lKHnM+bN4/k5GTq169fprOVh8jISNq0acP8+fNL3T9//nzat2/vUKry16BBA5KSkkrNXVhYyKJFi0rmbtOmDREREaWWycjIYP369UH7szHGkJaWxuzZs/nkk09o0KBBqc+7de6jMcZQUFDg2rm7du3KunXrWLNmTcmtbdu2/OlPf2LNmjU0bNjQlXMfSUFBAd999x21atVy7eMNcMEFFxx2yogffviBevXqARX8HD/u3ZbFMdu2bTOrV682Y8eONbGxsWb16tVm9erVJi8vzxjz/4eXd+3a1axatcosWLDA1KlTp9Th5b/++qupWbOmufHGG826devM7NmzTXx8fEgeXv7iiy+ab7/91gwdOtTExMSYrVu3Oh3tlOTl5ZU8poCZNGmSWb16dclh848++qhJSEgws2fPNuvWrTM33njjEQ/BrFOnjlmwYIFZtWqV6dKlS1AffnrnnXeahIQE8+mnn5Y67Hbfvn0ly7hxbmOMGTVqlFm8eLHZsmWLWbt2rbn//vuNx+Mx8+bNM8a4d+7f++1RV8a4d+7hw4ebTz/91Pz444/m888/N5dffrmJi4sred1y69xffvml8fl85pFHHjEbN240r7/+uqlcubKZMWNGyTIVNbuKTgjo37+/AQ67LVy4sGSZbdu2mZ49e5ro6GhTtWpVk5aWVupQcmOMWbt2renQoYOJiooySUlJZsyYMSFzaHmxZ555xtSrV89ERkaa1q1blxyOHMoWLlx4xMe3f//+xpiiwzBHjx5tkpKSTFRUlLnooovMunXrSn2P/fv3m7S0NFO1alUTHR1tLr/8cpOenu7ANMfnSPMCZvr06SXLuHFuY4y59dZbS9bh6tWrm65du5aUHGPcO/fv/b7ouHXu4nPDREREmOTkZHP11Vebb775puTzbp3bGGP++9//mtTUVBMVFWXOOOMM89xzz5X6fEXNbhkTYqfGFRERETlO2kdHREREXEtFR0RERFxLRUdERERcS0VHREREXEtFR0RERFxLRUdERERcS0VHREREXEtFR0RERFxLRUdERERcS0VHREREXEtFR0RERFxLRUdERERc6/8AYFSJK1m/cloAAAAASUVORK5CYII=", "text/plain": [ "<Figure size 640x480 with 1 Axes>" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "'\\nThat covers the circle. But there are other useful shapes, such as rectangles, hard-coded polygons, crosses, and paths.\\n'" ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" } ], "source": [ "'''\n", "We can now create another dot, and add it to the Device D\n", "'''\n", "\n", "dot2 = D << pg.circle(radius = r*1.2, angle_resolution=angle_resol, layer = dot_layer) # Create a circle with altered radius, and pipe it to the blank Device D\n", "dot2.center = (400, 0) # Setting the center of the dot to be a tuple\n", "\n", "'''\n", "As mentioned, when each polygon is named uniquely, we can fetch the attributes of each polygon. Such as their position, center, the x-size, y-size, and so forth.\n", "'''\n", "\n", "center_circle1 = (dot1.center[0], dot1.center[1]) # Fetching the information about the center of the circle, and putting it into a tuple\n", "center_circle2 = (dot2.center[0], dot2.center[1]) # Fetching the information about the center of the circle, and putting it into a tuple\n", "xsize1, ysize1 = dot1.xsize, dot1.ysize # Fetching the x-size and y-size of the circle. (Note: since it's a circle, it should be half the radius.)\n", "xsize2, ysize2 = dot2.xsize, dot2.ysize # Fetching the x-size and y-size of the circle. (Note: since it's a circle, it should be half the radius.)\n", "print(f'Center of circle one is: {center_circle1} and the center of circle two is: {center_circle2}')\n", "print(f'The x- and y-size of the first circle is: {xsize1}, {ysize1}. And of the second circle: {xsize2}, {ysize2}')\n", "\n", "'''\n", "The size measure of the polygon is also available as a numpy array, which can be fetched with the size function.\n", "'''\n", "\n", "size1, size2 = dot1.size, dot2.size\n", "\n", "print(f'The size of the first circle is: {size1}. And of the second circle: {size2}')\n", "\n", "qp(D)\n", "\n", "'''\n", "That covers the circle. But there are other useful shapes, such as rectangles, hard-coded polygons, crosses, and paths.\n", "'''" ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAk4AAAGdCAYAAADkG/zpAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAA9hAAAPYQGoP6dpAABGP0lEQVR4nO3dfXRU9b3v8c/kaQghDA+RTEYSCF5EaFBL8EDw0giVBMtDtSpSbA5ZB1GuRoTA7TXaXgEPQU4RWYcW6bGIPWLF05OmVysLE0SxlIAYQImgpBZI0ESEhjyJeZrf/QOyy5AQdiDjJPB+rTWLzN7f2fObLz8mH/bsvcdhjDECAADARQUFegAAAABdBcEJAADAJoITAACATQQnAAAAmwhOAAAANhGcAAAAbCI4AQAA2ERwAgAAsCkk0AO40ni9Xn3xxReKjIyUw+EI9HAAAIANxhhVV1fL4/EoKOjC+5UITh3siy++UGxsbKCHAQAALkFpaan69+9/wfUEpw4WGRkp6Uzje/bsGeDRdH5er1elpaWKjY1tM+Gjfeirf9TU1OjPf/6zxo4dqx49egR6OFcE5qp/0Nf2q6qqUmxsrPV7/EIITh2s+eO5nj17Epxs8Hq9ioyMVM+ePfnH3YHoq38EBQWpe/fu6tmzJ8GpgzBX/YO+XrqLHWZDNwEAAGwiOAEAANhEcAIAALCJ4AQAAGATwQkAAMAmghMAAIBNfg1O7733nqZMmSKPxyOHw6E//vGPPuuNMVq0aJE8Ho/Cw8N122236eOPP/apqaur06OPPqqoqChFRERo6tSpOnbsmE9NRUWF0tLS5HK55HK5lJaWplOnTvnUlJSUaMqUKYqIiFBUVJTmzp2r+vp6n5r9+/crOTlZ4eHhuvbaa7VkyRIZYzqsHwAAoGvza3Cqra3VTTfdpF/+8petrv+3f/s3rVy5Ur/85S+1e/duud1uTZgwQdXV1VbNvHnzlJubq40bN2r79u2qqanR5MmT1dTUZNXMmDFD+/bt0+bNm7V582bt27dPaWlp1vqmpiZNmjRJtbW12r59uzZu3KicnBwtWLDAqqmqqtKECRPk8Xi0e/durV69WitWrNDKlSv90BkAANAlmW+JJJObm2vd93q9xu12m2eeecZa9s033xiXy2XWrl1rjDHm1KlTJjQ01GzcuNGq+fzzz01QUJDZvHmzMcaYAwcOGElm586dVk1BQYGRZD755BNjjDGbNm0yQUFB5vPPP7dqXn31VeN0Ok1lZaUxxpg1a9YYl8tlvvnmG6tm2bJlxuPxGK/Xa/t1VlZWGknWdtG2pqYmc/jwYdPU1BTooVxR6Kt/VFdXm9dff91UV1cHeihXDOaqf9DX9rP7+ztgVw4/fPiwysvLlZKSYi1zOp1KTk7Wjh079NBDD6mwsFANDQ0+NR6PRwkJCdqxY4dSU1NVUFAgl8ulUaNGWTWjR4+Wy+XSjh07NGTIEBUUFCghIUEej8eqSU1NVV1dnQoLCzVu3DgVFBQoOTlZTqfTpyYrK0tHjhxRfHx8q6+jrq5OdXV11v2qqipJZ67a6vV6L79RV7jmPtGrjkVf/ePcvtLbjkE//YO+tp/dXgUsOJWXl0uSoqOjfZZHR0fr6NGjVk1YWJh69+7doqb58eXl5erXr1+L7ffr18+n5vzn6d27t8LCwnxqBg4c2OJ5mtddKDgtW7ZMixcvbrG8tLT0ot93gzPHuVVUVMjhcFz0Mvewj776x9dff63q6modO3ZM3bt3D/RwrgjMVf+gr+137mFCbQn4d9Wd/xdqjLnoX/L5Na3Vd0SNOXtgeFvjycrKUmZmpnW/+UsCY2Nj+a46G7xer4wxfBFlB6Ov/lFTU6Pi4mL179+f76rrIMxV/6Cv7df8idHFBCw4ud1uSWf25sTExFjLjx8/bu3pcbvdqq+vV0VFhc9ep+PHj2vMmDFWzZdfftli+1999ZXPdnbt2uWzvqKiQg0NDT41zXufzn0eqeVesXM5nU6fj/eaBQUFMVltau4V/epY9LXjndtT+tpx6Kl/0Nf2sdungHUzPj5ebrdb+fn51rL6+npt27bNCkWJiYkKDQ31qSkrK1NRUZFVk5SUpMrKSr3//vtWza5du1RZWelTU1RUpLKyMqsmLy9PTqdTiYmJVs17773nc4mCvLw8eTyeFh/hAQCAq5Nfg1NNTY327dunffv2STpzQPi+fftUUlIih8OhefPmKTs7W7m5uSoqKlJ6erq6d++uGTNmSJJcLpdmzZqlBQsW6O2339bevXv1k5/8RMOHD9ftt98uSRo6dKgmTpyo2bNna+fOndq5c6dmz56tyZMna8iQIZKklJQUDRs2TGlpadq7d6/efvttLVy4ULNnz7Y+TpsxY4acTqfS09NVVFSk3NxcZWdnKzMzk8+HAQDAGf47sc+Yd955x0hqcZs5c6Yx5swlCZ566injdruN0+k03/ve98z+/ft9tnH69GmTkZFh+vTpY8LDw83kyZNNSUmJT83JkyfN/fffbyIjI01kZKS5//77TUVFhU/N0aNHzaRJk0x4eLjp06ePycjI8Ln0gDHGfPTRR2bs2LHG6XQat9ttFi1a1K5LERjD5Qjai1Nm/YO++geXI+h4zFX/oK/tZ/f3t8MYLo3dkaqqquRyuVRZWcnB4TZ4vV6VlJQoLi6Oz+E7EH31j5qaGr3zzjsaN24cB4d3EOaqf9DX9rP7+5tuAgAA2ERwAgAAsIngBAAAYBPBCQAAwCaCEwAAgE0EJwAAAJsITgAAADYRnAAAAGwiOAEAANgUEugBAEBnVVxcrOrqauv+6dOnVV5erg8//FDh4eGSpMjISA0ePDhQQwTwLSM4AUAriouLdf311/ssCw4O1i233KLdu3erqanJWn7o0CHCE3CVIDgBQCv+sadpg6ShZ38+LemApBWSwiUdlPQTn71SAK5sBCcAaNNQSSPO/lwj6e+SbpLEl/wCVyMODgcAALCJ4AQAAGATwQkAAMAmghMAAIBNBCcAAACbCE4AAAA2EZwAAABsIjgBAADYRHACAACwieAEAABgE8EJAADAJoITAACATQQnAAAAmwhOAAAANhGcAAAAbCI4AQAA2ERwAgAAsIngBAAAYBPBCQAAwKaAB6eBAwfK4XC0uD3yyCOSpPT09BbrRo8e7bONuro6Pfroo4qKilJERISmTp2qY8eO+dRUVFQoLS1NLpdLLpdLaWlpOnXqlE9NSUmJpkyZooiICEVFRWnu3Lmqr6/36+sHAABdR8CD0+7du1VWVmbd8vPzJUn33nuvVTNx4kSfmk2bNvlsY968ecrNzdXGjRu1fft21dTUaPLkyWpqarJqZsyYoX379mnz5s3avHmz9u3bp7S0NGt9U1OTJk2apNraWm3fvl0bN25UTk6OFixY4OcOAACAriIk0AO45pprfO4/88wzuu6665ScnGwtczqdcrvdrT6+srJS69at08svv6zbb79dkrRhwwbFxsZqy5YtSk1N1cGDB7V582bt3LlTo0aNkiS98MILSkpK0qeffqohQ4YoLy9PBw4cUGlpqTwejyTp2WefVXp6upYuXaqePXv64+UDAIAuJODB6Vz19fXasGGDMjMz5XA4rOXvvvuu+vXrp169eik5OVlLly5Vv379JEmFhYVqaGhQSkqKVe/xeJSQkKAdO3YoNTVVBQUFcrlcVmiSpNGjR8vlcmnHjh0aMmSICgoKlJCQYIUmSUpNTVVdXZ0KCws1bty4VsdcV1enuro6635VVZUkyev1yuv1dkxjrmDNfaJXHYu+Xj5jjEJCQiQZSWf6GBzslcPhVUjImT/PrAuRMYZeXyLmqn/Q1/az26tOFZz++Mc/6tSpU0pPT7eW3XHHHbr33ns1YMAAHT58WD//+c81fvx4FRYWyul0qry8XGFhYerdu7fPtqKjo1VeXi5JKi8vt4LWufr16+dTEx0d7bO+d+/eCgsLs2pas2zZMi1evLjF8tLSUkVGRtp+7VcrY4wqKiqs49fQMejr5autrdX48eMl1UoqkSQZ87WioqrVo8cxORzdz64br9raWpWUlARwtF0Xc9U/6Gv7VVdX26rrVMFp3bp1uuOOO3z2+tx3333WzwkJCRo5cqQGDBigN998Uz/60Y8uuC1jjM9kaW3iXErN+bKyspSZmWndr6qqUmxsrGJjY/l4zwav1ytjjGJjYxUUFPBD7q4Y9PXynTx5Ulu3bpWULSlOkhQcXKMRI4q1Z09/NTX1kHRS0lZlZ2crLi4ugKPtupir/kFf26/5E6OL6TTB6ejRo9qyZYv+8Ic/tFkXExOjAQMGqLi4WJLkdrtVX1+viooKn71Ox48f15gxY6yaL7/8ssW2vvrqK2svk9vt1q5du3zWV1RUqKGhocWeqHM5nU45nc4Wy4OCgpisNjX3in51LPp6eRwOhxobGyU51HwejTFBMiZIjY1BamoKOruuUQ6Hgz5fBuaqf9DX9rHbp07TzfXr16tfv36aNGlSm3UnT55UaWmpYmJiJEmJiYkKDQ21zsaTpLKyMhUVFVnBKSkpSZWVlXr//fetml27dqmystKnpqioSGVlZVZNXl6enE6nEhMTO+x1AgCArqtTBCev16v169dr5syZZw/GPKOmpkYLFy5UQUGBjhw5onfffVdTpkxRVFSU7rrrLkmSy+XSrFmztGDBAr399tvau3evfvKTn2j48OHWWXZDhw7VxIkTNXv2bO3cuVM7d+7U7NmzNXnyZA0ZMkSSlJKSomHDhiktLU179+7V22+/rYULF2r27Nl85AYAACR1kuC0ZcsWlZSU6F/+5V98lgcHB2v//v364Q9/qOuvv14zZ87U9ddfr4KCAp8Dr5977jndeeedmjZtmm699VZ1795db7zxhoKDg62aV155RcOHD1dKSopSUlJ044036uWXX/Z5rjfffFPdunXTrbfeqmnTpunOO+/UihUr/N8AAADQJXSKY5xSUlJkjGmxPDw8XG+99dZFH9+tWzetXr1aq1evvmBNnz59tGHDhja3ExcXpz/96U8XHzAAALgqdYo9TgAAAF0BwQkAAMAmghMAAIBNBCcAAACbCE4AAAA2EZwAAABsIjgBAADYRHACAACwieAEAABgE8EJAADAJoITAACATQQnAAAAmwhOAAAANhGcAAAAbCI4AQAA2ERwAgAAsIngBAAAYBPBCQAAwCaCEwAAgE0EJwAAAJsITgAAADYRnAAAAGwiOAEAANhEcAIAALCJ4AQAAGATwQkAAMAmghMAAIBNBCcAAACbCE4AAAA2EZwAAABsIjgBAADYRHACAACwKeDBadGiRXI4HD43t9ttrTfGaNGiRfJ4PAoPD9dtt92mjz/+2GcbdXV1evTRRxUVFaWIiAhNnTpVx44d86mpqKhQWlqaXC6XXC6X0tLSdOrUKZ+akpISTZkyRREREYqKitLcuXNVX1/vt9cOAAC6loAHJ0n6zne+o7KyMuu2f/9+a92//du/aeXKlfrlL3+p3bt3y+12a8KECaqurrZq5s2bp9zcXG3cuFHbt29XTU2NJk+erKamJqtmxowZ2rdvnzZv3qzNmzdr3759SktLs9Y3NTVp0qRJqq2t1fbt27Vx40bl5ORowYIF304TAABApxcS6AFIUkhIiM9epmbGGK1atUpPPvmkfvSjH0mSfvvb3yo6Olq/+93v9NBDD6myslLr1q3Tyy+/rNtvv12StGHDBsXGxmrLli1KTU3VwYMHtXnzZu3cuVOjRo2SJL3wwgtKSkrSp59+qiFDhigvL08HDhxQaWmpPB6PJOnZZ59Venq6li5dqp49e35L3QAAAJ1VpwhOxcXF8ng8cjqdGjVqlLKzszVo0CAdPnxY5eXlSklJsWqdTqeSk5O1Y8cOPfTQQyosLFRDQ4NPjcfjUUJCgnbs2KHU1FQVFBTI5XJZoUmSRo8eLZfLpR07dmjIkCEqKChQQkKCFZokKTU1VXV1dSosLNS4ceNaHXtdXZ3q6uqs+1VVVZIkr9crr9fbYT26UjX3iV51LPp6+YwxCgkJkWQkneljcLBXDodXISFn/jyzLkTGGHp9iZir/kFf289urwIenEaNGqX//M//1PXXX68vv/xS//qv/6oxY8bo448/Vnl5uSQpOjra5zHR0dE6evSoJKm8vFxhYWHq3bt3i5rmx5eXl6tfv34tnrtfv34+Nec/T+/evRUWFmbVtGbZsmVavHhxi+WlpaWKjIy82Mu/6hljVFFRYR3fho5BXy9fbW2txo8fL6lWUokkyZivFRVVrR49jsnh6H523XjV1taqpKQkgKPtupir/kFf2+/cQ4DaEvDgdMcdd1g/Dx8+XElJSbruuuv029/+VqNHj5akFn/pxpiLToTza1qrv5Sa82VlZSkzM9O6X1VVpdjYWMXGxvLxng1er1fGGMXGxiooqFMccndFoK+X7+TJk9q6daukbElxkqTg4BqNGFGsPXv6q6mph6STkrYqOztbcXFxARxt18Vc9Q/62n7NnxhdTMCD0/kiIiI0fPhwFRcX684775R0Zm9QTEyMVXP8+HFr75Db7VZ9fb0qKip89jodP35cY8aMsWq+/PLLFs/11Vdf+Wxn165dPusrKirU0NDQYk/UuZxOp5xOZ4vlQUFBTFabmntFvzoWfb08DodDjY2NkhxqPo/GmCAZE6TGxiA1NQWdXdcoh8NBny8Dc9U/6Gv72O1Tp+tmXV2dDh48qJiYGMXHx8vtdis/P99aX19fr23btlmhKDExUaGhoT41ZWVlKioqsmqSkpJUWVmp999/36rZtWuXKisrfWqKiopUVlZm1eTl5cnpdCoxMdGvrxkAAHQNAd/jtHDhQk2ZMkVxcXE6fvy4/vVf/1VVVVWaOXOmHA6H5s2bp+zsbA0ePFiDBw9Wdna2unfvrhkzZkiSXC6XZs2apQULFqhv377q06ePFi5cqOHDh1tn2Q0dOlQTJ07U7Nmz9etf/1qS9OCDD2ry5MkaMmSIJCklJUXDhg1TWlqafvGLX+jvf/+7Fi5cqNmzZ/ORGwAAkNQJgtOxY8f04x//WCdOnNA111yj0aNHa+fOnRowYIAk6ac//alOnz6thx9+WBUVFRo1apTy8vJ8Drx+7rnnFBISomnTpun06dP6/ve/r5deeknBwcFWzSuvvKK5c+daZ99NnTpVv/zlL631wcHBevPNN/Xwww/r1ltvVXh4uGbMmKEVK1Z8S50AAACdncMYYwI9iCtJVVWVXC6XKisr2VNlg9frVUlJieLi4vgcvgPR18u3Z8+esx/TF0oaIenMweG33PKOdu8ed/bg8D2SElVYWKgRI0YEcLRdF3PVP+hr+9n9/U03AQAAbCI4AQAA2ERwAgAAsIngBAAAYBPBCQAAwCaCEwAAgE0EJwAAAJsITgAAADYRnAAAAGwiOAEAANhEcAIAALCJ4AQAAGATwQkAAMAmghMAAIBNBCcAAACbCE4AAAA2EZwAAABsIjgBAADYRHACAACwieAEAABgE8EJAADAJoITAACATQQnAAAAmwhOAAAANhGcAAAAbCI4AQAA2ERwAgAAsIngBAAAYBPBCQAAwCaCEwAAgE0EJwAAAJsITgAAADYFPDgtW7ZMt9xyiyIjI9WvXz/deeed+vTTT31q0tPT5XA4fG6jR4/2qamrq9Ojjz6qqKgoRUREaOrUqTp27JhPTUVFhdLS0uRyueRyuZSWlqZTp0751JSUlGjKlCmKiIhQVFSU5s6dq/r6er+8dgAA0LUEPDht27ZNjzzyiHbu3Kn8/Hw1NjYqJSVFtbW1PnUTJ05UWVmZddu0aZPP+nnz5ik3N1cbN27U9u3bVVNTo8mTJ6upqcmqmTFjhvbt26fNmzdr8+bN2rdvn9LS0qz1TU1NmjRpkmpra7V9+3Zt3LhROTk5WrBggX+bAAAAuoSQQA9g8+bNPvfXr1+vfv36qbCwUN/73ves5U6nU263u9VtVFZWat26dXr55Zd1++23S5I2bNig2NhYbdmyRampqTp48KA2b96snTt3atSoUZKkF154QUlJSfr00081ZMgQ5eXl6cCBAyotLZXH45EkPfvss0pPT9fSpUvVs2dPf7QAAAB0EQEPTuerrKyUJPXp08dn+bvvvqt+/fqpV69eSk5O1tKlS9WvXz9JUmFhoRoaGpSSkmLVezweJSQkaMeOHUpNTVVBQYFcLpcVmiRp9OjRcrlc2rFjh4YMGaKCggIlJCRYoUmSUlNTVVdXp8LCQo0bN67FeOvq6lRXV2fdr6qqkiR5vV55vd4O6MiVrblP9Kpj0dfLZ4xRSEiIJCPpTB+Dg71yOLwKCTnz55l1ITLG0OtLxFz1D/rafnZ71amCkzFGmZmZ+p//838qISHBWn7HHXfo3nvv1YABA3T48GH9/Oc/1/jx41VYWCin06ny8nKFhYWpd+/ePtuLjo5WeXm5JKm8vNwKWufq16+fT010dLTP+t69eyssLMyqOd+yZcu0ePHiFstLS0sVGRnZvgZchYwxqqiosI5dQ8egr5evtrZW48ePl1QrqUSSZMzXioqqVo8ex+RwdD+7brxqa2tVUlISwNF2XcxV/6Cv7VddXW2rrlMFp4yMDH300Ufavn27z/L77rvP+jkhIUEjR47UgAED9Oabb+pHP/rRBbdnjPGZMK1NnkupOVdWVpYyMzOt+1VVVYqNjVVsbCwf7dng9XpljFFsbKyCggJ+yN0Vg75evpMnT2rr1q2SsiXFSZKCg2s0YkSx9uzpr6amHpJOStqq7OxsxcXFBXC0XRdz1T/oa/s1f2J0MZ0mOD366KN6/fXX9d5776l///5t1sbExGjAgAEqLi6WJLndbtXX16uiosJnr9Px48c1ZswYq+bLL79ssa2vvvrK2svkdru1a9cun/UVFRVqaGhosSeqmdPplNPpbLE8KCiIyWpTc6/oV8eir5fH4XCosbFRkkPN59EYEyRjgtTYGKSmpqCz6xrlcDjo82VgrvoHfW0fu30KeDeNMcrIyNAf/vAHbd26VfHx8Rd9zMmTJ1VaWqqYmBhJUmJiokJDQ5Wfn2/VlJWVqaioyApOSUlJqqys1Pvvv2/V7Nq1S5WVlT41RUVFKisrs2ry8vLkdDqVmJjYIa8XAAB0XQHf4/TII4/od7/7nf7f//t/ioyMtI4lcrlcCg8PV01NjRYtWqS7775bMTExOnLkiJ544glFRUXprrvusmpnzZqlBQsWqG/fvurTp48WLlyo4cOHW2fZDR06VBMnTtTs2bP161//WpL04IMPavLkyRoyZIgkKSUlRcOGDVNaWpp+8Ytf6O9//7sWLlyo2bNn87EbAAAI/B6n559/XpWVlbrtttsUExNj3V577TVJUnBwsPbv368f/vCHuv766zVz5kxdf/31Kigo8Dn4+rnnntOdd96padOm6dZbb1X37t31xhtvKDg42Kp55ZVXNHz4cKWkpCglJUU33nijXn75ZWt9cHCw3nzzTXXr1k233nqrpk2bpjvvvFMrVqz49hoCAAA6rYDvcTLGtLk+PDxcb7311kW3061bN61evVqrV6++YE2fPn20YcOGNrcTFxenP/3pTxd9PgAAcPUJ+B4nAACAroLgBAAAYBPBCQAAwCaCEwAAgE0EJwAAAJsITgAAADYRnAAAAGwiOAEAANhEcAIAALCJ4AQAAGATwQkAAMAmghMAAIBNBCcAAACbCE4AAAA2EZwAAABsIjgBAADYRHACAACwieAEAABgE8EJAADAJoITAACATQQnAAAAmwhOAAAANhGcAAAAbCI4AQAA2BQS6AEAQOd28JyfT0sql/ShpPDz1gG4GhCcAKAVkZGRZ3/6yTlLgyXdImm3pKZWagFc6QhOANCKwYMH69ChQ6qurraWFRcX69ixY1qxYoXCw8MlnQlNgwcPDtQwAXzLCE4AcAHnBqLi4mLdf//9uuWWW3T77bfrpptuCuDIAAQKB4cDgA3n7nmqqakJ4EgABBLBCQAAwCY+qsMVo7i42GevwNXMGKPa2lqdPHlSDocj0MPp9PxxnBLz0R7maus4dq7zIji1Ys2aNfrFL36hsrIyfec739GqVas0duzYQA8LbSguLtb1118f6GF0GiEhIRo/fry2bt2qxsbGQA+nSzh06FCH/aJiPtrHXL2wjpyT6DgEp/O89tprmjdvntasWaNbb71Vv/71r3XHHXfowIEDiouLC/TwcAH/+J/9BklDAzmUTsJIqpWULYn/xbftoKSfdOjeIeZjezBXW+r4OYmOQ3A6z8qVKzVr1iw98MADkqRVq1bprbfe0vPPP69ly5YFeHS4uKGSRgR6EJ2AV1KJpDhxKGMgMR8vjrmKroXgdI76+noVFhbq8ccf91mekpKiHTt2tPqYuro61dXVWferqqoknTnrJiiIN4GL8Xq9qq2tvex+nT59WsHBwTpzZWfOeAoO9sqYWgUH18gY5mHbTksK1unTp/Xhhx9e8Iy5Tz/9VMHBwTLG6KOPPrrg1nr06MF8bAfmamv+MScv9QzOjnpvvZrY7TXB6RwnTpxQU1OToqOjfZZHR0ervLy81ccsW7ZMixcvbrH8z3/+s7p37+6XcV5JjDGqqqrSZ599dlkHhpaXl+uWW26RdEDS3ztsfF2Vw2EUFVWlESM+kzF8/NG2ckm3aOfOnfrv//7vNitvvvlm9erVSy+99FKbv4zuuece5qNNzNXWnJmTBw4c0N//fmnzp6PeW68mX3/9ta06glMrzp9kxpgLTrysrCxlZmZa96uqqhQbG6uxY8eqZ8+efh3nlcDr9aq0tFSxsbGX9b+iDz/8ULt375a0QhIXJgwJ8apHj1Lt2ROrxkb+t9m2DyXt1rx5887OoQsLDg7Wd7/7Xe3bt09NTU0XrPvHtpiPF8Ncbc2ZOblixYpLvtBqR723Xk2aPzG6GILTOaKiohQcHNxi79Lx48db7IVq5nQ65XQ6Wyzv0aOHevTo4ZdxXkm8Xq8iIiLUo0ePy/rHHR4efvYXWbgk+u5weOVwRKipqYeamnjTbFu4pCYNHjxYBw8evOABuQcPHtTMmTPlcDj0/PPP6+abb261LjIyUtXV1cxHm5irrTkzJ8PDwy/590hHvbdeTbxer606gtM5wsLClJiYqPz8fN11113W8vz8fP3whz8M4MgAfBvsnvo9ZMgQjRhx4YO+9+zZ01FDAtDJEJzOk5mZqbS0NI0cOVJJSUn6j//4D5WUlGjOnDmBHhpsORjoAXQSzad4nxSneF+MP+cM8/HimKstMW86M4LTee677z6dPHlSS5YsUVlZmRISErRp0yYNGDAg0ENDGyIjI8/+9JOAjqPzCJE0XtJWSVxU0I5/zKGO3Bbz8eKYqxfSkXMSHYfg1IqHH35YDz/8cKCHgXYYPHiwDh06xAXjzmr+Govs7GzOqLGho7/egvloH3O1dXzlSudFcMIVgzeZf/B6vSopKVFcXBwHhgYI89Ee5iq6GmYpAACATQQnALDh3ONNuNQIcPXiozoAuIDi4mKf45ReeeUVHTt2TDU1NdYlBzgWBbi6EJwAoBXFxcW6/vrrfZYFBwfrlltu0f/5P//H58rhhw4dIjwBVwmCEwC04h97mjZIGnr259M68/1zK3Tm6s4HJf2Es+eAqwjBCQDaNFRS81XCa3TmS3tvEl+lAlydODgcAADAJoITAACATQQnAAAAmwhOAAAANhGcAAAAbCI4AQAA2ERwAgAAsIngBAAAYBPBCQAAwCaCEwAAgE0EJwAAAJsITgAAADYRnAAAAGwiOAEAANhEcAIAALCJ4AQAAGATwQkAAMAmghMAAIBNBCcAAACbCE4AAAA2EZwAAABsIjgBAADYRHACAACwieAEAABgE8EJAADApoAFpyNHjmjWrFmKj49XeHi4rrvuOj311FOqr6/3qXM4HC1ua9eu9anZv3+/kpOTFR4ermuvvVZLliyRMcanZtu2bUpMTFS3bt00aNCgFtuQpJycHA0bNkxOp1PDhg1Tbm5ux79wAADQZYUE6ok/+eQTeb1e/frXv9b/+B//Q0VFRZo9e7Zqa2u1YsUKn9r169dr4sSJ1n2Xy2X9XFVVpQkTJmjcuHHavXu3Dh06pPT0dEVERGjBggWSpMOHD+sHP/iBZs+erQ0bNugvf/mLHn74YV1zzTW6++67JUkFBQW677779PTTT+uuu+5Sbm6upk2bpu3bt2vUqFHfQkcAAEBnF7DgNHHiRJ8wNGjQIH366ad6/vnnWwSnXr16ye12t7qdV155Rd98841eeuklOZ1OJSQk6NChQ1q5cqUyMzOtPVRxcXFatWqVJGno0KH64IMPtGLFCis4rVq1ShMmTFBWVpYkKSsrS9u2bdOqVav06quv+qEDAACgqwlYcGpNZWWl+vTp02J5RkaGHnjgAcXHx2vWrFl68MEHFRR05lPGgoICJScny+l0WvWpqanKysrSkSNHFB8fr4KCAqWkpPhsMzU1VevWrVNDQ4NCQ0NVUFCg+fPnt6hpDlsXUldXp7q6Out+VVWVJMnr9crr9bbr9V+NmvtErzoWfb18xhiFhIRIMpLO9DE42CuHw6uQkDN/nlkXImMMvb5EzFX/oK/tZ7dXnSY4ffbZZ1q9erWeffZZn+VPP/20vv/97ys8PFxvv/22FixYoBMnTuhnP/uZJKm8vFwDBw70eUx0dLS1Lj4+XuXl5dayc2saGxt14sQJxcTEXLCmvLy8zXEvW7ZMixcvbrG8tLRUkZGRtl771cwYo4qKCuv4NXQM+nr5amtrNX78eEm1kkokScZ8raioavXocUwOR/ez68artrZWJSUlARxt18Vc9Q/62n7V1dW26jo8OC1atKjVIHGu3bt3a+TIkdb9L774QhMnTtS9996rBx54wKe2OSBJ0s033yxJWrJkic/y8ydF84Hh5y6/1JqLTbisrCxlZmZa96uqqhQbG6vY2Fj17NmzzcfiTMI3xig2Ntbai4jLR18v38mTJ7V161ZJ2ZLiJEnBwTUaMaJYe/b0V1NTD0knJW1Vdna24uLiAjjarou56h/0tf2aPzG6mA4PThkZGZo+fXqbNefuIfriiy80btw4JSUl6T/+4z8uuv3Ro0erqqpKX375paKjo+V2u1vsFTp+/Likf+x5ulBNSEiI+vbt22bN+Xuhzud0On0+JmwWFBTEZLWpuVf0q2PR18vjcDjU2NgoyaHmE5CNCZIxQWpsDFJTU9DZdY1yOBz0+TIwV/2DvraP3T51eHCKiopSVFSUrdrPP/9c48aNU2JiotavX29r0Hv37lW3bt3Uq1cvSVJSUpKeeOIJ1dfXKywsTJKUl5cnj8djBbSkpCS98cYbPtvJy8vTyJEjFRoaatXk5+f7HOeUl5enMWPG2HotAADgyhewGPrFF1/otttuU2xsrFasWKGvvvpK5eXlPnt93njjDb3wwgsqKirSZ599pt/85jd68skn9eCDD1p7eWbMmCGn06n09HQVFRUpNzdX2dnZ1hl1kjRnzhwdPXpUmZmZOnjwoF588UWtW7dOCxcutJ7rscceU15enpYvX65PPvlEy5cv15YtWzRv3rxvtS8AAKDzCtjB4Xl5efrrX/+qv/71r+rfv7/Puubjj0JDQ7VmzRplZmbK6/Vq0KBBWrJkiR555BGr1uVyKT8/X4888ohGjhyp3r17KzMz0+e4o/j4eG3atEnz58/Xr371K3k8Hv37v/+7dSkCSRozZow2btyon/3sZ/r5z3+u6667Tq+99hrXcAIAAJaABaf09HSlp6e3WXP+tZ4uZPjw4XrvvffarElOTtaePXvarLnnnnt0zz33XPT5AADA1YkjxgAAAGwiOAEAANhEcAIAALCJ4AQAAGATwQkAAMAmghMAAIBNBCcAAACbCE4AAAA2EZwAAABsIjgBAADYRHACAACwieAEAABgE8EJAADAJoITAACATQQnAAAAmwhOAAAANhGcAAAAbCI4AQAA2ERwAgAAsIngBAAAYBPBCQAAwCaCEwAAgE0EJwAAAJsITgAAADYRnAAAAGwiOAEAANhEcAIAALCJ4AQAAGATwQkAAMAmghMAAIBNBCcAAACbCE4AAAA2BTQ4DRw4UA6Hw+f2+OOP+9SUlJRoypQpioiIUFRUlObOnav6+nqfmv379ys5OVnh4eG69tprtWTJEhljfGq2bdumxMREdevWTYMGDdLatWtbjCcnJ0fDhg2T0+nUsGHDlJub2/EvGgAAdFkhgR7AkiVLNHv2bOt+jx49rJ+bmpo0adIkXXPNNdq+fbtOnjypmTNnyhij1atXS5Kqqqo0YcIEjRs3Trt379ahQ4eUnp6uiIgILViwQJJ0+PBh/eAHP9Ds2bO1YcMG/eUvf9HDDz+sa665RnfffbckqaCgQPfdd5+efvpp3XXXXcrNzdW0adO0fft2jRo16lvsCAAA6KwCHpwiIyPldrtbXZeXl6cDBw6otLRUHo9HkvTss88qPT1dS5cuVc+ePfXKK6/om2++0UsvvSSn06mEhAQdOnRIK1euVGZmphwOh9auXau4uDitWrVKkjR06FB98MEHWrFihRWcVq1apQkTJigrK0uSlJWVpW3btmnVqlV69dVX/d8IAADQ6QU8OC1fvlxPP/20YmNjde+99+p//+//rbCwMEln9gIlJCRYoUmSUlNTVVdXp8LCQo0bN04FBQVKTk6W0+n0qcnKytKRI0cUHx+vgoICpaSk+Dxvamqq1q1bp4aGBoWGhqqgoEDz589vUdMcti6krq5OdXV11v2qqipJktfrldfrvaSeXE2a+0SvOhZ9vXzGGIWEhEgyks70MTjYK4fDq5CQM3+eWRciYwy9vkTMVf+gr+1nt1cBDU6PPfaYRowYod69e+v9999XVlaWDh8+rN/85jeSpPLyckVHR/s8pnfv3goLC1N5eblVM3DgQJ+a5seUl5crPj6+1e1ER0ersbFRJ06cUExMzAVrmp/nQpYtW6bFixe3WF5aWqrIyMiLN+EqZ4xRRUWFdYwbOgZ9vXy1tbUaP368pFpJJZIkY75WVFS1evQ4Joej+9l141VbW6uSkpIAjrbrYq76B31tv+rqalt1HR6cFi1a1GqQONfu3bs1cuRInz08N954o3r37q177rlHy5cvV9++fSWp1b9wY4zP8vNrmg8M74iai024rKwsZWZmWverqqoUGxur2NhY9ezZs83H4kzCN8YoNjZWQUGc5NlR6OvlO3nypLZu3SopW1KcJCk4uEYjRhRrz57+amrqIemkpK3Kzs5WXFxcAEfbdTFX/YO+tl/zJ0YX0+HBKSMjQ9OnT2+z5vw9RM1Gjx4tSfrrX/+qvn37yu12a9euXT41FRUVamhosPYOud3uFnuFjh8/LkkXrQkJCbEC2oVqzt8LdT6n0+nzMWGzoKAgJqtNzb2iXx2Lvl4eh8OhxsZGSQ41n4BsTJCMCVJjY5CamoLOrmuUw+Ggz5eBueof9LV97Papw4NTVFSUoqKiLumxe/fulSTFxMRIkpKSkrR06VKVlZVZy/Ly8uR0OpWYmGjVPPHEE6qvr7eOjcrLy5PH47ECWlJSkt544w2f58rLy9PIkSMVGhpq1eTn5/vsBcvLy9OYMWMu6bUAAIArT8BiaEFBgZ577jnt27dPhw8f1n/913/poYce0tSpU61d3ikpKRo2bJjS0tK0d+9evf3221q4cKFmz55tfQw2Y8YMOZ1Opaenq6ioSLm5ucrOzrbOqJOkOXPm6OjRo8rMzNTBgwf14osvat26dVq4cKE1nscee0x5eXlavny5PvnkEy1fvlxbtmzRvHnzvvXeAACATsoESGFhoRk1apRxuVymW7duZsiQIeapp54ytbW1PnVHjx41kyZNMuHh4aZPnz4mIyPDfPPNNz41H330kRk7dqxxOp3G7XabRYsWGa/X61Pz7rvvmu9+97smLCzMDBw40Dz//PMtxvT73//eDBkyxISGhpobbrjB5OTktPt1VVZWGkmmsrKy3Y+9GjU1NZnDhw+bpqamQA/likJfL19hYaGRZKRCIxkjGRMcXG1Gj37dBAdXn112pqawsDDQw+2ymKv+QV/bz+7v74CdVTdixAjt3LnzonVxcXH605/+1GbN8OHD9d5777VZk5ycrD179rRZc8899+iee+656JgAAMDViSPGAAAAbCI4AQAA2ERwAgAAsIngBAAAYBPBCQAAwCaCEwAAgE0EJwAAAJsITgAAADYRnAAAAGwiOAEAANhEcAIAALCJ4AQAAGATwQkAAMAmghMAAIBNBCcAAACbCE4AAAA2EZwAAABsIjgBAADYRHACAACwieAEAABgE8EJAADAJoITAACATQQnAAAAmwhOAAAANhGcAAAAbCI4AQAA2ERwAgAAsIngBAAAYBPBCQAAwCaCEwAAgE0EJwAAAJsITgAAADYFLDi9++67cjgcrd52795t1bW2fu3atT7b2r9/v5KTkxUeHq5rr71WS5YskTHGp2bbtm1KTExUt27dNGjQoBbbkKScnBwNGzZMTqdTw4YNU25urn9ePAAA6JICFpzGjBmjsrIyn9sDDzyggQMHauTIkT6169ev96mbOXOmta6qqkoTJkyQx+PR7t27tXr1aq1YsUIrV660ag4fPqwf/OAHGjt2rPbu3asnnnhCc+fOVU5OjlVTUFCg++67T2lpafrwww+VlpamadOmadeuXf5vBgAA6BJCAvXEYWFhcrvd1v2Ghga9/vrrysjIkMPh8Knt1auXT+25XnnlFX3zzTd66aWX5HQ6lZCQoEOHDmnlypXKzMy09lDFxcVp1apVkqShQ4fqgw8+0IoVK3T33XdLklatWqUJEyYoKytLkpSVlaVt27Zp1apVevXVV/3QAQAA0NUELDid7/XXX9eJEyeUnp7eYl1GRoYeeOABxcfHa9asWXrwwQcVFHRmZ1lBQYGSk5PldDqt+tTUVGVlZenIkSOKj49XQUGBUlJSfLaZmpqqdevWqaGhQaGhoSooKND8+fNb1DSHrQupq6tTXV2ddb+qqkqS5PV65fV629OCq1Jzn+hVx6Kvl88Yo5CQEElG0pk+Bgd75XB4FRJy5s8z60JkjKHXl4i56h/0tf3s9qrTBKd169YpNTVVsbGxPsuffvppff/731d4eLjefvttLViwQCdOnNDPfvYzSVJ5ebkGDhzo85jo6GhrXXx8vMrLy61l59Y0NjbqxIkTiomJuWBNeXl5m+NetmyZFi9e3GJ5aWmpIiMjbb32q5kxRhUVFdbxa+gY9PXy1dbWavz48ZJqJZVIkoz5WlFR1erR45gcju5n141XbW2tSkpKAjjarou56h/0tf2qq6tt1XV4cFq0aFGrQeJcu3fv9jmO6dixY3rrrbf0X//1Xy1qmwOSJN18882SpCVLlvgsP39SNB8Yfu7yS6252ITLyspSZmamdb+qqkqxsbGKjY1Vz54923wsziR8Y4xiY2OtvYi4fPT18p08eVJbt26VlC0pTpIUHFyjESOKtWdPfzU19ZB0UtJWZWdnKy4uLoCj7bqYq/5BX9uv+ROji+nw4JSRkaHp06e3WXP+HqL169erb9++mjp16kW3P3r0aFVVVenLL79UdHS03G53i71Cx48fl/SPPU8XqgkJCVHfvn3brDl/L9T5nE6nz8eEzYKCgpisNjX3in51LPp6eRwOhxobGyU51HwejTFBMiZIjY1BamoKOruuUQ6Hgz5fBuaqf9DX9rHbpw4PTlFRUYqKirJdb4zR+vXr9c///M8KDQ29aP3evXvVrVs39erVS5KUlJSkJ554QvX19QoLC5Mk5eXlyePxWAEtKSlJb7zxhs928vLyNHLkSOs5k5KSlJ+f73OcU15ensaMGWP7tQAAgCtbwGPo1q1bdfjwYc2aNavFujfeeEMvvPCCioqK9Nlnn+k3v/mNnnzyST344IPWXp4ZM2bI6XQqPT1dRUVFys3NVXZ2tnVGnSTNmTNHR48eVWZmpg4ePKgXX3xR69at08KFC63neuyxx5SXl6fly5frk08+0fLly7VlyxbNmzfvW+kDAADo/AJ+cPi6des0ZswYDR06tMW60NBQrVmzRpmZmfJ6vRo0aJCWLFmiRx55xKpxuVzKz8/XI488opEjR6p3797KzMz0Oe4oPj5emzZt0vz58/WrX/1KHo9H//7v/25dikA6c12pjRs36mc/+5l+/vOf67rrrtNrr72mUaNG+bcBAACgywh4cPrd7353wXUTJ07UxIkTL7qN4cOH67333muzJjk5WXv27Gmz5p577tE999xz0ecDAABXp4B/VAcAANBVEJwAAABsIjgBAADYRHACAACwieAEAABgE8EJAADAJoITAACATQQnAAAAmwhOAAAANhGcAAAAbCI4AQAA2ERwAgAAsIngBAAAYBPBCQAAwCaCEwAAgE0EJwAAAJsITgAAADaFBHoAANC5HTzn59OSyiV9KCn8vHUArgYEJwBoRWRk5NmffnLO0mBJt0jaLamplVoAVzqCEwC0YvDgwTp06JCqq6utZadPn9aBAwe0YsUKhYeHSzoTmgYPHhyoYQL4lhGcAOACzg9ENTU1+vvf/66bbrpJPXr0CNCoAAQSB4cDAADYRHACAACwieAEAABgE8EJAADAJoITAACATQQnAAAAmwhOAAAANhGcAAAAbCI4AQAA2ERwAgAAsMmvwWnp0qUaM2aMunfvrl69erVaU1JSoilTpigiIkJRUVGaO3eu6uvrfWr279+v5ORkhYeH69prr9WSJUtkjPGp2bZtmxITE9WtWzcNGjRIa9eubfFcOTk5GjZsmJxOp4YNG6bc3NwWNWvWrFF8fLy6deumxMRE/fnPf770BgAAgCuKX4NTfX297r33Xv2v//W/Wl3f1NSkSZMmqba2Vtu3b9fGjRuVk5OjBQsWWDVVVVWaMGGCPB6Pdu/erdWrV2vFihVauXKlVXP48GH94Ac/0NixY7V371498cQTmjt3rnJycqyagoIC3XfffUpLS9OHH36otLQ0TZs2Tbt27bJqXnvtNc2bN09PPvmk9u7dq7Fjx+qOO+5QSUmJH7oDAAC6HPMtWL9+vXG5XC2Wb9q0yQQFBZnPP//cWvbqq68ap9NpKisrjTHGrFmzxrhcLvPNN99YNcuWLTMej8d4vV5jjDE//elPzQ033OCz7YceesiMHj3auj9t2jQzceJEn5rU1FQzffp06/4/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", "text/plain": [ "<Figure size 640x480 with 1 Axes>" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "\"\\nNone of the structures we've made so far, have what are called ports. Ports are what you can use to connect two structures together, via a path between ports.\\nThis is particularly useful when you've made two structures, and you want to connect them together, but you don't want to manually draw a path between them.\\n\"" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "'''\n", "We can now look at the cross function. We'll use it to build the outer markers, where there is a cut-out in the middle, with a smaller marker.\n", "This is how I have built my markers in my designs.\n", "'''\n", "\n", "D2 = Device() # Making a blank device\n", "\n", "outer_marker = pg.cross(length = 180000, width = 5000, layer = marker_layer) # Making a cross, with a length of 180 um, and a width of 5 um. The layer is the marker layer.\n", "\n", "rectangle_cutout = pg.rectangle(size = (12000, 12000), layer = marker_layer) # Defining the rectangle, that will serve as the stencil, for the cutout in the marker.\n", "rectangle_cutout.center = (0, 0) # Defining its position\n", "outer_marker_cutout = pg.boolean(A = outer_marker, B = rectangle_cutout, operation = 'A-B', layer = marker_layer) # The boolean function will cut out the rectangle from the cross.\n", " # The operation keyword describes what action to take. In this case, we want to cut out the rectangle from the cross.\n", " # It can also join two structures, and various other things. See documentation for more information.\n", "inner_marker = pg.cross(length = 10000, width = 500, layer = marker_layer)\n", "\n", "D2 << inner_marker # Piping the inner marker to the empty device.\n", "D2 << outer_marker_cutout # Piping the outer marker to the empty device.\n", "\n", "qp(D2)\n", "\n", "'''\n", "None of the structures we've made so far, have what are called ports. Ports are what you can use to connect two structures together, via a path between ports.\n", "This is particularly useful when you've made two structures, and you want to connect them together, but you don't want to manually draw a path between them.\n", "'''\n" ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [ { "data": { "image/png": "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fv7559XQ0KBHHnlEmZmZTf/94Ac/sLNMAA4juADoCFuvvNxwww2yLKvV55cvX97s8caNG+0sB0AMIrgA6CgmIQE4huAC4HwQXgA4guAC4HwRXgB0OYILgAtBeAHQpQguAC4U4QVAlyG4AOgMhBcAXYLgAqCzEF4A2I7gAqAzxdzXAwDofs4NLpenp8u0LP3+/feb9ctMTta12dmK46PkAbSB8ALAVh98+mmz4CJJ+8rKtK+sLGr/H157rf7pyiu7oDIAbsXpDQBb+ePiOtT/o/JymyoB0F1w5QWArb6clqZX77tPB06caLVPWW2tfrFtWxdWBcDNCC8AbJfVt6+y+vZt9fkjlZWEFwDtxrQRAABwFcILAABwFcILAABwFcILAABwFcILAABwFcILAABwFcILAABwFcILAABwFcILAABwFcILAABwFcILAABwFcILAABwFcILAABwFcILAABwFcILAABwFcILAABwFcILAABwFcILAABwFcILAABwFcILAABwFcILAABwFVvDy+bNm3X77bdr4MCBMgxDr7322hcus2nTJuXk5CghIUGXXHKJnnvuOTtLBAAALuO185efPHlSo0aN0gMPPKC77rrrC/sfPnxYX//61/XQQw9pxYoV2rp1q/Lz8zVgwIB2LQ90hGmaKq+rU21trarCYZXV1krx8TIMw+nSepy6cFimZUmSwpGITobDUftFTFOmZSlimq32gfMsy1JdfX3TNpZQW6v0pCR5PFzsR+ewNbzk5eUpLy+v3f2fe+45DR48WIsWLZIkDR8+XLt27dLPfvYzwgs6XXldnSb97neKRCKqrKxU37IyTbjkEvni4pwurcepOnVKpTU1kqStR4/qPzdvjtrvaFWVToZCaqioaLUPnBeORLTt6FFZlqVQKCS/36/V992n9KQkp0tDN2FreOmo7du3a+LEic3abr31Vi1dulT19fWKj49vsUwoFFIoFGp6HAwGJZ05qzZN096CW9G4bqfWj/YxTVOWZcmyLDU0NKi2tlYlJSWK5+ywy9WEw6qvrz/zc02Njh8/HrVfKBRSJBLR6dOnW+0D5zWYpmrOhlHLsuT3+9knuoDTx66OrDemwktpaakyMjKatWVkZKihoUHl5eXKzMxssczChQu1YMGCFu3FxcVKTk62rda2WJalyspKGYbBFEQMK6+rUygU0unTp/VZ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OHGiJOmOO+7Qr3/962Z9PvzwQ1VXV0uSjh07pj/84Q+SpCuvvLJZvw0bNuiGG26ws1wAMe6WL39ZQ32+bnuPCID2sTW89OvXTytWrGizj2VZTT9nZ2c3ewwAAHAu7qACAACuQngBAACuQngBAACuQngBAACuQngBAACuYuu7jQAA//DCzp3685EjkqS/nv2Otxd27tTGQ4ckSd+6/HJ96ytfcao8wDUILwDQRf585Ij+3/fea9a29ehRbT16VJKU3bcv4QVoB8ILAHSR5ffco+X33ON0GYDrcc8LAABwFcILAABwFcILAABwFcILAABwFcILAABwFcILAABwFcILAABwFcILAABwFcILAABwFcILAABwFcILAABwFcILAABwFcILAABwFcILAABwFcILAABwFcILAABwFcILAABwFcILAABwFa/TBXQ2y7IkScFg0LEaTNNUTU2NgsGgPB7yYayrra1VXV2dgsGgTNN0uhy0gW3LXRgvd3F6vBqP243H8bZ0u/BSU1MjSQoEAg5XAgAAOqqmpkapqalt9jGs9kQcFzFNU8ePH1dycrIMw3CkhmAwqEAgoOLiYqWkpDhSA9qP8XIPxspdGC93cXq8LMtSTU2NBg4c+IVXfrrdlRePx6NBgwY5XYYkKSUlhQ3WRRgv92Cs3IXxchcnx+uLrrg0YhISAAC4CuEFAAC4CuHFBn6/X//+7/8uv9/vdCloB8bLPRgrd2G83MVN49XtbtgFAADdG1deAACAqxBeAACAqxBeAACAqxBeAACAqxBeOkFlZaWmTp2q1NRUpaamaurUqaqqqmpzmfvvv1+GYTT7b+zYsV1TcA+zePFiDRkyRAkJCcrJydGWLVva7L9p0ybl5OQoISFBl1xyiZ577rkuqhRSx8Zr48aNLbYjwzB04MCBLqy459q8ebNuv/12DRw4UIZh6LXXXvvCZdi+nNPR8Yrl7Yvw0gmmTJmivXv3av369Vq/fr327t2rqVOnfuFyt912m0pKSpr+W7duXRdU27OsWrVKs2fP1rx587Rnzx5NmDBBeXl5Kioqitr/8OHD+vrXv64JEyZoz549+td//Vc9+uijevXVV7u48p6po+PV6MMPP2y2LV166aVdVHHPdvLkSY0aNUq//vWv29Wf7ctZHR2vRjG5fVm4IPv27bMkWTt27Ghq2759uyXJOnDgQKvLTZ8+3brzzju7oMKe7eqrr7ZmzZrVrG3YsGHWnDlzovb/8Y9/bA0bNqxZ28MPP2yNHTvWthrxDx0drw0bNliSrMrKyi6oDm2RZK1du7bNPmxfsaM94xXL2xdXXi7Q9u3blZqaqmuuuaapbezYsUpNTdW2bdvaXHbjxo1KT0/XZZddpoceekhlZWV2l9ujhMNh7d69WxMnTmzWPnHixFbHZvv27S3633rrrdq1a5fq6+ttqxXnN16NRo8erczMTN10003asGGDnWXiArB9uVMsbl+ElwtUWlqq9PT0Fu3p6ekqLS1tdbm8vDytXLlSb7/9tn7+859r586d+trXvqZQKGRnuT1KeXm5IpGIMjIymrVnZGS0OjalpaVR+zc0NKi8vNy2WnF+45WZmanf/OY3evXVV7VmzRoNHTpUN910kzZv3twVJaOD2L7cJZa3r273rdKdZf78+VqwYEGbfXbu3ClJMgyjxXOWZUVtbzR58uSmn0eMGKExY8YoKytLf/zjH/Wd73znPKtGNOeOwxeNTbT+0dphj46M19ChQzV06NCmx7m5uSouLtbPfvYzXXfddbbWifPD9uUesbx9EV5a8b3vfU/33ntvm32ys7P1l7/8RZ9++mmL506cONHiDKMtmZmZysrK0sGDBztcK6JLS0tTXFxci7P2srKyVsfmoosuitrf6/Wqf//+ttWK8xuvaMaOHasVK1Z0dnnoBGxf7hcr2xfhpRVpaWlKS0v7wn65ubmqrq7Wu+++q6uvvlqS9M4776i6ulrjxo1r9/oqKipUXFyszMzM864Zzfl8PuXk5KiwsFDf/va3m9oLCwt15513Rl0mNzdXb7zxRrO2t956S2PGjFF8fLyt9fZ05zNe0ezZs4ftKEaxfblfzGxfjt4u3E3cdttt1hVXXGFt377d2r59uzVy5Ejrm9/8ZrM+Q4cOtdasWWNZlmXV1NRYP/zhD61t27ZZhw8ftjZs2GDl5uZaF198sRUMBp34E7qt3//+91Z8fLy1dOlSa9++fdbs2bOt3r17W0eOHLEsy7LmzJljTZ06tan/oUOHrMTEROuxxx6z9u3bZy1dutSKj4+3XnnlFaf+hB6lo+P1X//1X9batWutjz76yPrb3/5mzZkzx5Jkvfrqq079CT1KTU2NtWfPHmvPnj2WJOuZZ56x9uzZYx09etSyLLavWNPR8Yrl7Yvw0gkqKiqs++67z0pOTraSk5Ot++67r8VbyyRZL774omVZllVXV2dNnDjRGjBggBUfH28NHjzYmj59ulVUVNT1xfcAzz77rJWVlWX5fD7rq1/9qrVp06am56ZPn25df/31zfpv3LjRGj16tOXz+azs7GxryZIlXVxxz9aR8frJT35ifelLX7ISEhKsvn37Wtdee631xz/+0YGqe6bGt9Ke+9/06dMty2L7ijUdHa9Y3r4Myzp7txQAAIAL8FZpAADgKoQXAADgKoQXAADgKoQXAADgKoQXAADgKoQXAADgKoQXAADgKoQXAADgKoQXAADgKoQXAADgKoQXAADgKoQXAADgKv8/r1AsW2uMJAEAAAAASUVORK5CYII=", "text/plain": [ "<Figure size 640x480 with 1 Axes>" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "''' \n", "All the previous examples have been pre-defined shapes, but you can also make your own shapes, by defining a polygon, with a list of coordinates.\n", "'''\n", "\n", "D3 = Device()\n", "\n", "polygon_1 = D3 << pg.polygon_ports(xpts = [0, 1, 1, 0], ypts = [0, 0, 1, 1], layer = barrier_layer) # Defining a polygon, with a list of x-coordinates, and a list of y-coordinates.\n", "\n", "''' \n", "Defining a polygon such as this, is more manual, but is also does allow you to make more complex shapes, with each side having a port, as can be seen below. \n", "'''\n", "\n", "qp(D3)" ] }, { "cell_type": "code", "execution_count": 45, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/home/nihilol/.local/lib/python3.10/site-packages/phidl/routing.py:155: UserWarning: [PHIDL] Warning: route_basic() will be deprecated\n", " in August 2022, please replace with `route_quad()` or `route_smooth()`\n", " warnings.warn(\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAicAAAGdCAYAAADJ6dNTAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAA9hAAAPYQGoP6dpAAAzZUlEQVR4nO3deZzO9f7/8ee1zFyMmSEz2ZoZS/SVJU70iywhSbToW0olx9GpU1HJ6RxLHFEMJafiIL6l1LfyPbcIJ4k2dJOSJUXZEmMP01yzMNvn8/vDua5jDLrMXNd83jPzuN9ubreuzyzXy7tZHj7XZ3HZtm0LAADAEG6nBwAAADgdcQIAAIxCnAAAAKMQJwAAwCjECQAAMApxAgAAjEKcAAAAoxAnAADAKF6nBzgfy7J04MABxcXFyeVyOT0OAAAIgW3byszMVL169eR2X/h+EKPj5MCBA0pOTnZ6DAAAUAJpaWlKSkq64I8zOk7i4uIknfrLxcfHOzzNuWVlZWn16tXq1KmTYmNjnR7HaJZlKS0tTcnJySWq6cqEtQodaxU61ip0rFXozlwrv9+v5OTk4O/xC2V0nAReyomPjzc6Ttxut2JiYhQfH0+c/AbLshQXF6f4+Hi+2X8DaxU61ip0rFXoWKvQnWutSnpIBqsNAACMQpwAAACjECcAAMAoxAkAADAKcQIAAIxCnAAAAKMQJwAAwCjECQAAMApxAgAAjEKcAAAAoxAnAADAKMQJAAAwCnECAACMQpwAAACjECcAAMAoxAkAADAKcQIAAIxCnAAAAKMQJwAAwCjECQAAMApxAgAAjEKcAAAAoxAnAADAKMQJAAAwCnECAACMQpwAAACjECcAAMAoEY+T/fv3q3///kpISFBMTIxat26t9evXR/ppAQBAOeWN5CdPT09Xhw4d1LVrV3344YeqVauWdu3apRo1akTyaQEAQDkW0TiZPHmykpOTNXfu3OC2Bg0aRPIpAQBAORfROFm8eLFuuOEG9e3bVytXrtQll1yiRx55RA888MBZ3z83N1e5ubnBx36/X5JkWZYsy4rkqKUSmM/0OU3AOoWOtQodaxU61ip0rFXozlyr0q5ZROPkp59+0syZMzVs2DCNGjVKX3/9tR577DH5fD4NGDCg2PunpqZq3LhxxbanpaUpLi4ukqOWSk5OjjIzM7Vv3z7FxMQ4PY7RbNtWenq6XC6XXC6X0+MYjbUKHWsVOtYqdKxV6M5cq8zMzFJ9Ppdt23aYZismOjpabdu21Zo1a4LbHnvsMa1bt05ffvllsfc/256T5ORkpaenKz4+PlJjllpWVpY+++wzde3aVbGxsU6PYzTLsrR3716lpKTI7eZksfNhrULHWoWOtQodaxW6M9fK7/froosuUkZGRol+f0d0z0ndunXVrFmzItsuv/xyvffee2d9f5/PJ5/PV2y72+02+gsjMJ/pc5qCtQodaxU61ip0rFXoWKvQhfN3YURXu0OHDtq2bVuRbdu3b1f9+vUj+bQAAKAci2icPPHEE1q7dq0mTpyonTt36u2339bs2bM1ePDgSD4tAAAoxyIaJ1dddZUWLlyod955Ry1atNAzzzyjF198Uffee28knxYAAJRjET3mRJJuuukm3XTTTZF+GgAAUEFwhA8AADAKcQIAAIxCnAAAAKMQJwAAwCjECQAAMApxAgAAjEKcAAAAoxAnAADAKMQJAAAwCnECAACMQpwAAACjECcAAMAoxAkAADAKcQIAAIxCnAAAAKMQJwAAwCjECQAAMApxAgAAjEKcAAAAoxAnAADAKMQJAAAwCnECAACMQpwAAACjECcAAMAoxAkAADAKcQIAAIxCnAAAAKMQJwAAwCjECQAAMApxAgAAjEKcAAAAoxAnAADAKMQJAAAwCnECAACMQpwAAACjECcAAMAoxAkAADAKcQIAAIxCnAAAAKMQJwAAwCjECQAAMApxAgAAjEKcAAAAoxAnAADAKMQJAAAwCnECAACMQpwAAACjECcAAMAoxAkAADAKcQIAAIxCnAAAAKMQJwAAwCjECQAAMApxAgAAjEKcAAAAoxAnAADAKMQJAAAwCnECAACMQpwAAACjECcAAMAoxAkAADAKcQIAAIxCnAAAAKMQJwAAwChlFiepqalyuVwaOnRoWT0lAAAoh8okTtatW6fZs2friiuuKIunAwCgxGzbVnZenrLz8pSTn6/svDzZtu30WJVKxOMkKytL9957r+bMmaOLLroo0k8HAECp5OTn6/lVqzRl9WrN/vZbTVm9Wjn5+U6PVal4I/0EgwcPVu/evdW9e3c9++yz533f3Nxc5ebmBh/7/X5JkmVZsiwronOWRmA+0+c0AesUOtYqdKxV6CrzWlmWpczMTGVmZurEiRPKzs5WdnZ28HdPfn6+8vLylJ2fr82HD8u2beXk5KigoED66itFu1xO/xWCLrnkEg0YMMDpMYLO/Loq7ddXROPk3Xff1YYNG7Ru3bqQ3j81NVXjxo0rtj0tLU1xcXHhHi9scnJylJmZqX379ikmJsbpcYxm27bS09PlcrnkMugb3USsVehYq9BVpLWyLEt+v1/p6eny+/3KyMiQ3++X3+9XVlZWMESys7N18uRJ5eXlhfR5C9xu/Vy7tlwulxITE3X06FHp0CF5DQu66OhoXXPNNU6PIan411VmZmapPl/E4iQtLU2PP/64li9fripVqoT0MSNHjtSwYcOCj/1+v5KTk5WcnKz4+PhIjVpqWVlZ2rFjh5KSkhQbG+v0OEazLEu2bSs5OVluNyeLnQ9rFTrWKnTlaa0KCwuVlpamXbt26aefftKePXu0Z88e7dy5U2lpaTp27FiRf6G7XC55vd7gx5b0X+92VJSsq64Krs/PP/+sn7/6Si7DXtrp3Lmz+vXr5/QYkop/XQVe+SipiMXJ+vXrdeTIEbVp0ya4rbCwUKtWrdL06dOVm5srj8dT5GN8Pp98Pl+xz+V2u43+JgrMZ/qcpmCtQsdahY61Cp1pa5WZmaktW7boxx9/1I8//qgffvhB3333ndLS0k69pPJvUVFRvxkd+eEICJdLsixZOrVHwLIs2QUFUkGBFBsrNW0qXXqpVLPmqccnTkj790tr10oHD5b++UNk27Yx/w+l8P4ujFicXHfddfruu++KbPvDH/6gpk2bavjw4cXCBABQsVmWpZ9++kkbN27Upk2btGnTJn377bfav39/8H2ioqJUUFBw1rNjwhIepdWmjdS+vZSeLv38s5STI110kXTZZVKTJtLixdKPPzo9ZbkXsTiJi4tTixYtimyrVq2aEhISim0HAFQstm1r165d+uabb7Ru3Tp99dVX2rhxo3JyciRJXq9XhYWFxSLEiAA5n4MHpbfekvbtK7o9KUm6+27phhukHTukwkJn5qsgIn62DgCg4svKytJXX32lL7/8UmvWrNGaNWuUkZEh6dTekDOj4/SXa8qV7dvPvn3fPmnPHqlRI+nii6VDh8p2rgqmTOPk888/L8unAwBEyLFjx7Rq1SqtWrVKn3/+uTZv3izLsuTxeIIHRwYYvzckXALHwhh2Vk95xJ4TAMBvysjI0Oeff65PP/1UK1as0A8//CDp1Mszp+8FKaysL2fEx0sNGkhZWdIvvzg9TblHnAAAiikoKNDatWv10UcfadmyZdqwYYMsyyoWI+X25Zlwcrulm26SvF7ps88kLnVfasQJAECStH//fi1dulQffvihli9fruzsbGIkFL16SSkp0qZN0pYtTk9TIRAnAFBJWZaldevWafHixVq0aJG2/PsXq8fjCb48Q4z8hhtvlFq0kL7/Xlq2zOlpKgziBAAqkZMnT2rz5s2aOHGiFi5cqKNHjxaJEakSHzdyoXr1kq644tTekg8+cHqaCoU4AYAKLisrS0uXLtV7772npUuX6pprrtGqVat08uRJScRIiQTCZOtW6V//4jiTMCNOAKACyszM1L/+9S/Nnz9fH374ofLy8oL3nZF4uaZUAmHyww/SkiWESQQQJwBQQZw4cUIffPCB/vd//1dLly5VXl5eseNHTg8UlECPHqfCJDdXOn5c6tCh+Pts3y4dOVL2s1UgfJUCQDlWUFCgTz75RG+++aYWLFigEydOFAkSXrIJo6pVT930T5J8vrOHiSRlZBAnpUScAEA5Y9u2NmzYoDfffFNvvfWWjh07VuSUX4IkDDwe2U2b6mDVqrKrVJHq1DkVJxkZp/5IUlqa9PnnXBE2AogTACgnDhw4oLfeekuvvfaatm3bViRIOIYkzFwuKSpKhW63FBUlxcQUP7YkOVnq0oVAiQDiBAAMlpubqyVLlmjOnDlasWKFXC6XrH//IiRIIsjtDu39kpOlli2lb7+N7DyVDHECAAb6/vvvNWfOHL3xxhvKyMiQx+ORbdtFbqiHCLqQl8aqVo3cHJUUcQIAhsjKytL8+fM1a9YsffPNNxzY6iTLkg4fVnxioo4ePSr99NPZg+XkyVNvQ1gRJwDgsM2bN2vmzJmaN2+ecnJy5HK5JBEkjrJtuQ4fVnxMjI4dPix782YpP9/pqSoN4gQAHHDy5En985//1LRp07Ru3boiB7fy0g0qO+IEAMrQ7t27NWvWLL3yyivKyMiQ+98HXnJwK/AfxAkARJht2/r444/10ksvaenSpXK73cGXbCxOQQWKIU4AIEKysrI0b948/f3vf9fOnTuDZ9xwLAlwfsQJAITZnj17NG3aNL3yyivKzs4OHkNClAChIU4AIEy+/PJLTZkyRQsXLizy0g2AC0OcAEApFBQUaMGCBXruuee0fv16XroBwoA4AYASyMrK0muvvabnn39e+/btC551Q5QApUecAMAFOHz4sF5++WVNmzZNWVlZweNJOOsGCB/iBABCsGPHDj3//PN6/fXXZVkWe0iACCJOAOA81q9fr9TUVC1YsEAej4eLpQFlgDgBgDPYtq3PPvtMzz77rD777DN5vV7Ztk2YAGWEOAGAf7MsS0uWLNH48eO1YcMGeTweSVxaHihrxAmASq+goED/93//p/Hjx2vbtm2ceQM4jDgBUGnl5eXprbfe0jPPPKOff/5ZLpdLEmfeAE4jTgBUOrm5uXrttdf07LPP6sCBA8EoCZwWjMrJ5XLJ7XbL9nhku91yOT1QJUacAKg0Tpw4oTlz5mjChAn65ZdfgjFClFQcbrdbHo/nnKd7e71excbGKi4uTvHx8YqNjVVsbKyqVasmn88nn88nOypKW2NjlZ6e7sDfIHRJSUlOjxAxxAmACi8nJ0ezZs3SxIkTdfz4cWKkHAvER35+fnCbx+NRnTp1lJKSovr16+uSSy5R3bp1Vbt2bdWuXVsXX3yxEhISlJCQoKpVqwb3lJ1Ldl6enl+1SrZt6/vvv1f9lBR17N5d0b/xcWUpKSlJAwcOdHqMiCFOAFRY2dnZmjlzplJTU5Wenk6UlCOBM6UCez+io6PVuHFjNW/eXE2aNFHjxo116aWXqmHDhqpXr17w/cMhJipKf+ncWZZlKa1BAyUnJyvW5/vNqEH4ECcAKpxAlEycOFG//vorUWK4qKio4J4Qj8ejyy67TG3atFHLli3VokULNWvWTCkpKcGzqCLN5XKpWnS0LMtSTFSUqkVHEyZljDgBUGGc/vINUWKmwF2bLcuS1+tVy5Yt1a5dO7Vp00ZXXnmlmjVrJp/P5/SYcBhxAqDcO3HihD7++GONGjVKR48eJUoM4vV6gxexq127tq699lpdc801ateunVq3bk2I4KyIEwDl1smTJ4Nn37Rq1YrjSgxweow0bNhQ3bt3V+fOndWpUyfVr1/f4elQXhAnAMqdvLw8vfrqqxo3bpyOHDkS1oMhcWECx4FYlqU6deqoZ8+euu6669StWzfVq1fP4elQXhEnAMqN/Px8zZs3T2PHjtX+/fudHqfSCuwd8fl86tq1q2688UbdcMMNuuyyyzhwFGFBnAAwXmFhod555x2NGTOmyGXmUXbcbrcsy1JSUpL69Omj3r17q0uXLqpSpYrTo6ECIk4AGMuyLC1YsECjRo3Sjh07uMx8GXK73bJtW7Ztq02bNrr99tt1yy23qFmzZsQhIo44AWAc27a1dOlSjRw5Ut99913wuAaiJLICQeJyudS5c2f17dtXffr04dgRlDniBIBRPv30U40YMULr1q0rcrAlIiOwF8TlcqlLly7q16+fbrvtNiUmJjo8GSoz4gSAEdauXasRI0Zo5cqVwbNviJLIcbvdcrlc6tChg+69917dfvvtuvjii50eC5BEnABw2LfffqtRo0Zp6dKlxe6ngvAKrG+9evU0YcIE9evXr0Lf2RblF3ECwBHbtm3TmDFj9M9//lNe76kfRURJ+AVO+61Vq5YGDhyo/v37Ky4urkzvVQNcKOIEQJnas2ePxo0bp9dffz34L/nAFUURHoHjSLxer2677TYNGjRI3bt3l8fjkWVZ2rt3r8MTAudHnAAoE4cPH9aECRM0c+bM4CmqREl4BfaStGjRQn/605909913q2bNmk6PBVww4gRARKWnp2vKlCmaOnWq8vPzeekmzFwul2zbVrVq1XTffffpgQce0JVXXun0WECpECcAIiI7O1svv/yyUlNTlZ2dzZk3YRbYS9K6dWsNGTJEd911l6pVq+b0WEBYECcAwio3N1ezZ8/WuHHjdPz4cS6cFkaBY0l8Pp/69++vhx9+mL0kqJCIEwBhUVBQoDfffFOjR4/WwYMHiZIw8ng8KiwsVKNGjfTYY49pwIABqlGjhtNjARFDnAAoFcuy9N5772nkyJHatWuX0+NUKIGza2644QY9/vjj6t69O6f/olIgTgCUiG3b+vDDDzV8+HB9//333AwujFwul2JiYvTAAw/o0UcfVaNGjZweCShTxAmAC7Zq1SoNHz5ca9eu5aZ8YRJ46aZBgwYaNmyYBg4cqLi4OKfHAhxBnAAI2TfffKORI0fq448/5v43YRI466Z9+/b6y1/+ot69ewfXFqisiBMAv2nLli166qmntGjRIu5/EyYej0e2beuOO+7Qk08+qTZt2jg9EmAM4gTAOe3cuVN/+9vf9O677xIlYeJ2u+Xz+fSnP/1JTzzxhFJSUpweCTAOcQKgmLS0NI0fP16vvfaa3G43l5oPk4SEBP35z3/WQw89pIsuusjpcQBjEScAgg4dOqSJEycG739jWRbHlJSC2+2WZVmqX7++Ro0apQEDBqhKlSpOjwUYjzgBoGPHjmny5Ml6+eWXVVBQwEs3pRQ486ZZs2YaM2aMbr/9dg5yBS4AcQJUYr/++qumTp2qKVOmKC8vjygppUCUXH311RozZoxuuOEGrv8ClABxAlRCfr9fL7/8sp577jluyhcGgdOBu3Xrpr/97W/q2LGj0yMB5VpEr4Ocmpqqq666SnFxcapVq5b69Omjbdu2RfIpAZxHVlaWJk2apJSUFI0dO1aZmZmESSkEXqrp1auXvvnmGy1fvpwwAcIgonGycuVKDR48WGvXrtWKFStUUFCgHj16KDs7O5JPC+AMOTk5mjJlilJSUjRq1ChlZGQQJaXg9Xrlcrl0++23a/PmzVq0aBHXKQHCKKIv6yxbtqzI47lz56pWrVpav369OnfuHMmnBqBTUTJr1ixNmDBB6enpXGK+lAIXTuvXr59Gjx6t//qv/3J6JKBCKtNjTjIyMiRJNWvWPOvbc3NzlZubG3zs9/slyfjTGQPzmT6nCVin0JVmrU6cOKE5c+Zo0qRJOn78uGzbrtBni3i9Xrndbnm9kfmRFoiSe++9VyNGjFDjxo0llc9L9/M9GDrWKnRnrlVp16zM4sS2bQ0bNkwdO3ZUixYtzvo+qampGjduXLHtaWlpRt8AKycnR5mZmdq3b59iYmKcHsdotm0rPT1dLpeLsxh+Q0nWKi8vT6tXr9bSpUuVlZWlVq1aRXhKM7jdbjVt2lRSeIMhcAG6a665Rr169VJiYqIkae/evWF7jrLG92DoWKvQnblWmZmZpfp8ZRYnQ4YM0ebNm/XFF1+c831GjhypYcOGBR/7/X4lJycrOTlZ8fHxZTFmiWRlZWnHjh1KSkpSbGys0+MYzbIs2bat5OTk4N1scXYXslbZ2dmaPXu2nnvuuUr58k1gj8nnn38elivZBvaU9O/fXyNHjlSjRo1K/TlNwfdg6Fir0J25VoFXPkqqTOLk0Ucf1eLFi7Vq1SolJSWd8/18Pp98Pl+x7W632+gvjMB8ps9pCtYqdL+1VpmZmZoxY4YmT56sX3/9tdJFyeksy1JBQUGp4sTr9cqyLPXv319jxoypUFFyOr4HQ8dahS6cvwsjGie2bevRRx/VwoUL9fnnn6thw4aRfDqg0vj11181bdo0vfDCC/L7/ZU6SsLB6/WqsLBQ/fr109ixY4PHlABwRkTjZPDgwXr77be1aNEixcXF6dChQ5Kk6tWrq2rVqpF8aqBCOnr0qF566SW9+OKLysnJ4UC9UgpEyR133KGnn36as28AQ0Q0TmbOnClJ6tKlS5Htc+fO1cCBAyP51ECFcvDgQU2ZMkUzZsxQXl4eUVJKgSu63nrrrRo/fryaNWvm9EgAThPxl3UAlNzRo0c1adIkvfrqq7Jtm3vflFLg3jc33nijnnnmmUpzNhNQ3nBvHcBAmzdv1uTJk3X06FGtXLkyLGegVGaBKOnWrZsmTJigq666yumRAJwHhx8DhrBtW6tXr1bPnj3VqlUrLViwQJLYW1IKgQvPtW/fXqtXr9by5csJE6AcYM8J4LDCwkItWrRIqamp+uabb4K/UNlbUnJut1uWZalVq1aaPHmyrrvuOi6iBZQjxAngkBMnTmjevHmaPHmydu/eHbwuAHtKSi6whk2bNtWkSZN00003ESVAOUScAGXsl19+0YwZM/Tiiy/q119/Df7y5AyckgusYf369fXMM8+ob9++XDQLKMeIE6CMbN26VX//+981b948FRQUBGOEs9pKx+VyqU6dOhowYID69u2r6Ohop0cCUEr80wKIIMuytGzZMvXo0UPNmzfX66+/znVKwsTlcikhIUEvvfSStm3bpg4dOkTsrsQAyhbfyUAEZGdna968eZo6dap27tzJQa5h5Ha7Va1aNY0aNUqPPvqoqlWrRuwBFQxxAoTRzp079Y9//EP/8z//o+zs7OB2DnItPY/Ho6ioKP35z3/Wk08+qRo1ajg9EoAIIU6AUiosLNSyZcs0bdo0LV++XG63mxgJI4/HI5fLpUceeUSjRo1S7dq1nR4JQIQRJ0AJHTlyRHPnztX06dO1b98+eTweLjEfRoGb8g0YMEBPP/20UlJSnB4JQBkhToALYNu2Vq5cqZkzZ2rBggWyLCt4vANREh6Bm/LddttteuaZZ7hTMFAJESdACA4fPqw33nhDs2bN0u7du4O/QBE+gfvfdO/eXampqWrdurXTIwFwCHECnENBQYGWLVumV199VUuWLJFt28G9JIRJ+ASipF27dpo8ebI6dOjg9EgAHEacAGfYunWr3njjDb322ms6evRo8Jcnwitw/5uWLVtq8uTJuv7667nUPABJxAkg6dQl5efPn69XX31VmzZtKhIkhEl4uVwu2batxo0ba9KkSerTpw9RAqAI4gSVVnZ2thYvXqw333xTH330UZHLyBMkkZOcnKxnn31W99xzT/DidABwOuIElUpubq4++ugjvfPOO3r//fd18uRJeTwerjAaYS6XS7Vq1dK4ceM0aNAgRUVFOT0SAIMRJ6jw8vLytGLFCs2fP18LFy5UVlZWkbNt2EsSOW63W9WrV9eYMWP00EMPqWrVqk6PBKAcIE5QIWVnZ2vZsmV67733tGTJkmJBwtk2kRW4/82IESP02GOPKTY21umRAJQjxAkqjMOHD2vJkiV6//33tWLFCuXl5REkZczj8Sg6OlpPPvmkhg0bxv1vAJQIcYJyy7Isbdy4UR988IEWLVqkjRs3yrbtImfaECRlw+PxyOv16tFHH9Xw4cOVmJjo9EgAyjHiBOXKkSNHtGLFCi1btkxLly7V8ePHi12HhGNIyo7H45Hb7dbDDz+skSNHqk6dOk6PBKACIE5gtMzMTK1evVqffPKJli1bpq1bt0oSB7Q6LHCn4Pvvv1+jR49WUlKS0yMBqECIExjl+PHjWrNmjVavXq2PP/5YmzZtkmVZxe5lw8s1zghcl+QPf/iDRo8erfr16zs8EYCKiDiBYyzL0o8//qi1a9fqyy+/1KpVq7R9+3ZJIkYM4/F4ZNu27rvvPo0ZM0aNGjVyeiQAFRhxgjJRWFioHTt2aNOmTdq3b5+WLFmib775Rjk5OZKIEVN5vV4VFhbq3nvv1ZgxY9S4cWOnRwJQCRAnCCvbtnXgwAH98MMP2rJli77//ntt3LhRW7Zs0cmTJ+X1etW9e3etWbOGGDGY1+uVZVm65557NHr0aDVp0sTpkQBUIsRJBWPbtnLy84tsi4mKCuuN1QoLC3Xw4EH9/PPP2r17t3bu3KmdO3dq69at2r59e3BviNvtltvtLhYeXCreXKdHCXtKADiFOKlgcvLz9fyqVUW2/aVzZ1WLjj7vx1mWpaysLB07dkzHjh3T0aNHdeTIER0+fFiHDh0KxkhaWpoOHTpUJDiioqJkWVaxs2YsyyJEyonTjyl56qmndOmllzo9EoBKjDgJk+PHj+vbb791/N4hJwoKdPDgQR06dEg//vijoqKitHnOHLkKCnTy5Enl5ubqxIkTysrKUnZ2trKzs4P/ffpdeQMC17E4W3wE5J+xpwblR+CU4IEDB2rUqFFq2LCh0yMBAHESDrt27dKsWbO0bt0656+5ERUlXX31fx67XNry1Vdy5eefNT5+S2FhofN/J4RdIDofeOABDR8+XCkpKU6PBABBxEkYZGVlOT3Cudm2ZNslChNUPB6PR1FRUXr44Yf15JNPql69ek6PBADFECdAJeB2uxUTE6OhQ4fq8ccf5943AIxGnAAVmMvlUo0aNfTXv/5VDz/8sKpXr+70SADwm4gToIIJHMB8ySWXaMSIERo0aJBiYmKcHgsAQkacABVE4O7Ml112mZ566indddddioqKcnosALhgxAlQzgUu/d++fXuNGDFCvXr1CutF9wCgrBEnQDnl8XhkWZZuvvlmDR8+XFeffgo5AJRjxAlQzrjdbkVFRen+++/XE088wSXmAVQ4xAlQDgQOck1ISNDQoUP18MMPKyEhwemxACAiiBPAYG63W5LUtGlT/fWvf1W/fv3k8/kcngoAIos4AQwUuOdNixYt9OSTT6pbt24c5Aqg0iBOAEME4qNatWq6//77NWTIEHm9XqWkpBAmACoV4gRw2OnXJxk6dKj69++v2NhYWZalvXv3Oj0eAJQ54gRwSOB4kltvvVVDhgxRly5d2EMCACJOgDIV2EtSq1YtPfzww3rwwQe5MzAAnIE4AcpA4IJp3bp10+DBg9W7d295vXz7AcDZ8NOxvEpOlmrXLr7d45FO/5d4ZmbZzYQiTt9L8uCDD2rQoEFq2LCh02MBgPGIk/KoenWpW7ezv83lkqpV+89jyyqbmRDkdrvlcrnUq1cvPfjgg+rZsyd7SQDgAvATszw6eVIqKJBC+YV3tr0rCLvAzfeaNGmiP/3pT+rfv79qs/YAUCLESXnRvLmUlCTVqSNdfPGpMDl+XMrNPf/HpaeXzXyVUOBlm/j4ePXv318DBw5U27ZtOeMGAEqJOCkvOnc+9XJOTo6UnX3qv7dulS69tOj7+f1F96icOFG2c1ZwgXvceL1e3XzzzbrvvvvUq1cvLikPAGFEnJQXS5ee2gvi90vt2kldukgZGdLy5dJ11506EPbbb6UtW6Srr3Z62grl9D0hHTt21IABA3T77berRo0azg0FABUYcVJe7Nlz9u0HD0rvvy8lJEhpaaciBaXmcrnkcrlkWZauvPJK3XfffbrzzjtVt25dp0cDgAqPOKkIsrJO/ZGIk1I4M0juvvtu3XHHHapfv77TowFApUKcoFILHNTqcrnUoUMH9e3bV3369FFKSorTowFApUWcoNIJnPbr8/nUo0cP3Xrrrbr55ptVq1Ytp0cDAIg4QSXgcrnkdrtVWFio2rVr65ZbbtFNN92k7t27KyYmxunxAABnIE5QIQX2jng8HrVr1069evVS7969dcUVV3AdEgAwHHGCCiEQI5LUsGFD9ezZUz169FC3bt0UHx/v8HQAgAtBnKBcOj1G6tatq+uvv15du3bVddddp+TkZIenAwCUBnGCcuHMPSNdu3ZVp06d1KVLFzVo0MDZ4QAAYUWclBdXXCEF9ghcfPF/tgVOed2+Xdqxw5nZwiwqKkr5+fmSJJ/Pp7Zt26pjx466+uqr1aFDB86qAYAKrkziZMaMGXr++ed18OBBNW/eXC+++KI6depUFk9dcSQnSy1bFt8WCJaMjHIZJ6eHiNfrVbNmzdS+fXu1bdtWV111lZo1a6aoqCiHpwQAlKWIx8n8+fM1dOhQzZgxQx06dNArr7yiG2+8UVu3buVCVxfigw9O/SmnTo8QSUpISFCLFi3UqlUrtW7dWq1bt1bTpk0JEQBA5ONk6tSpuv/++/XHP/5RkvTiiy/qo48+0syZM5Wamhrpp0cZcbvd8ng8KigokG3bwW2XXHKJLr/8cjVv3lyXX365LrvsMiUmJuryyy+X2+12eGoAgIkiGid5eXlav369RowYUWR7jx49tGbNmkg+NcIkEB22bQcPSD39bYmJiUpKSlLjxo3VoEGD4J8mTZqofv36xfaEWJalvXv3luVfAQBQzkQ0To4ePRq8KufpateurUOHDhV7/9zcXOXm5gYf+/1+SVJWVpbR/8o+ceKEbNuWx4Cb7tkej+wzLjLm8njksqzf/Fiv16tq1aopNjZWF110kRITE5WYmBj879q1a6tWrVqqVauW6tatq9q1a8vrPfeX0Jn/P6VTcZKdnW38/1MTsFahY61Cx1qFjrUK3ZlrlRW4GW0JlckBsWdekdO27bNepTM1NVXjxo0rtn316tVGX2b84MGDqlGjhlq3bu34F3Ch260Dl1wSfNz40kvV45ZbVOXfe0C8Xm9wb0hUVFTwT3R0tDweT0hXT83MzFRmZqa2b99+wfPZti2/369du3ZxpdbfwFqFjrUKHWsVOtYqdGeuVU5OTqk+X0TjJDExUR6Pp9hekiNHjhTbmyJJI0eO1LBhw4KP/X6/kpOT1alTJ6Ov8hkoxEaNGqlq1aqOznKioEBv79olSYqOjlbNmjV1f7t2qhYd7ehcAZZlKS0tTcnJyY6HnOlYq9CxVqFjrULHWoXuzLUKvPJRUhGNk+joaLVp00YrVqzQbbfdFty+YsUK3XrrrcXe3+fzyefzFdseGxur2NjYSI5aanXr1lW7du0cn9O2bbVv377ItpioKGOq37Ks4EtHfLOfH2sVOtYqdKxV6Fir0J25VlYIhxKcT8Rf1hk2bJjuu+8+tW3bVu3bt9fs2bO1d+9ePfTQQ5F+6krJ5XIZs5cEAICSiHic3HXXXTp27JjGjx+vgwcPqkWLFlq6dKnq168f6acGAADlUJkcEPvII4/okUceKYunAgAA5RwvogEAAKMQJwAAwCjECQAAMApxAgAAjEKcAAAAoxAnAADAKMQJAAAwCnECAACMQpwAAACjECcAAMAoxAkAADAKcQIAAIxCnAAAAKMQJwAAwCjECQAAMApxAgAAjEKcAAAAoxAnAADAKMQJAAAwCnECAACMQpwAAACjECcAAMAoxAkAADAKcQIAAIxCnAAAAKMQJwAAwCjECQAAMApxAgAAjEKcAAAAoxAnAADAKMQJAAAwCnECAACMQpwAAACjECcAAMAoxAkAADAKcQIAAIxCnAAAAKMQJwAAwCjECQAAMApxAgAAjEKcAAAAoxAnAADAKMQJAAAwCnECAACMQpwAAACjECcAAMAoxAkAADAKcQIAAIxCnAAAAKMQJwAAwCjECQAAMApxAgAAjEKcAAAAoxAnAADAKMQJAAAwCnECAACMQpwAAACjECcAAMAoxAkAADAKcQIAAIxCnAAAAKMQJwAAwCjECQAAMApxAgAAjEKcAAAAo0QsTn7++Wfdf//9atiwoapWrapLL71UY8eOVV5eXqSeEgAAVADeSH3iH3/8UZZl6ZVXXlHjxo31/fff64EHHlB2dramTJkSqacFAADlXMTipGfPnurZs2fwcaNGjbRt2zbNnDmTOAEAAOcUsTg5m4yMDNWsWfOcb8/NzVVubm7wsd/vlyRZliXLsiI+X0kF5jN9ThOwTqFjrULHWoWOtQodaxW6M9eqtGtWZnGya9cuTZs2TS+88MI53yc1NVXjxo0rtj0tLU1xcXGRHK9UcnJylJmZqX379ikmJsbpcYxm27bS09PlcrnkcrmcHsdorFXoWKvQsVahY61Cd+ZaZWZmlurzXXCcPP3002cNiNOtW7dObdu2DT4+cOCAevbsqb59++qPf/zjOT9u5MiRGjZsWPCx3+9XcnKykpOTFR8ff6GjlpmsrCzt2LFDSUlJio2NdXoco1mWJdu2lZycLLebk8XOh7UKHWsVOtYqdKxV6M5cq8ArHyV1wXEyZMgQ9evX77zv06BBg+B/HzhwQF27dlX79u01e/bs836cz+eTz+crtt3tdhv9hRGYz/Q5TcFahY61Ch1rFTrWKnSsVejC+bvwguMkMTFRiYmJIb3v/v371bVrV7Vp00Zz587lfy4AAPhNETvm5MCBA+rSpYtSUlI0ZcoU/fLLL8G31alTJ1JPCwAAyrmIxcny5cu1c+dO7dy5U0lJSUXeZtt2pJ4WAACUcxF7nWXgwIGybfusfwAAAM6Fg0AAAIBRiBMAAGAU4gQAABiFOAEAAEYhTgAAgFGIEwAAYBTiBAAAGIU4AQAARiFOAACAUYgTAABgFOIEAAAYhTgBAABGIU4AAIBRiBMAAGAU4gQAABiFOAEAAEYhTgAAgFGIEwAAYBTiBAAAGIU4AQAARiFOAACAUYgTAABgFOIEAAAYhTgBAABGIU4AAIBRiBMAAGAUr9MDnI9t25Ikv9/v8CTnl5WVpZycHPn9flmW5fQ4RrMsS5mZmfL7/XK7aePzYa1Cx1qFjrUKHWsVujPXKvB7O/B7/EIZHSeZmZmSpOTkZIcnAQAAFyozM1PVq1e/4I9z2SXNmjJgWZYOHDiguLg4uVwup8c5J7/fr+TkZKWlpSk+Pt7pcYzGWoWOtQodaxU61ip0rFXozlwr27aVmZmpevXqlWivk9F7Ttxut5KSkpweI2Tx8fF8AYeItQodaxU61ip0rFXoWKvQnb5WJdljEsCLaAAAwCjECQAAMApxEgY+n09jx46Vz+dzehTjsVahY61Cx1qFjrUKHWsVunCvldEHxAIAgMqHPScAAMAoxAkAADAKcQIAAIxCnAAAAKMQJ6U0Y8YMNWzYUFWqVFGbNm20evVqp0cyTmpqqq666irFxcWpVq1a6tOnj7Zt2+b0WOVCamqqXC6Xhg4d6vQoxtq/f7/69++vhIQExcTEqHXr1lq/fr3TYxmnoKBAo0ePVsOGDVW1alU1atRI48eP535gklatWqWbb75Z9erVk8vl0vvvv1/k7bZt6+mnn1a9evVUtWpVdenSRVu2bHFmWIedb63y8/M1fPhwtWzZUtWqVVO9evU0YMAAHThw4IKfhzgphfnz52vo0KF66qmntHHjRnXq1Ek33nij9u7d6/RoRlm5cqUGDx6stWvXasWKFSooKFCPHj2UnZ3t9GhGW7dunWbPnq0rrrjC6VGMlZ6erg4dOigqKkoffvihtm7dqhdeeEE1atRwejTjTJ48WbNmzdL06dP1ww8/6LnnntPzzz+vadOmOT2a47Kzs9WqVStNnz79rG9/7rnnNHXqVE2fPl3r1q1TnTp1dP311wfv/1aZnG+tcnJytGHDBo0ZM0YbNmzQggULtH37dt1yyy0X/kQ2Suz//b//Zz/00ENFtjVt2tQeMWKEQxOVD0eOHLEl2StXrnR6FGNlZmbaTZo0sVesWGFfe+219uOPP+70SEYaPny43bFjR6fHKBd69+5tDxo0qMi2//7v/7b79+/v0ERmkmQvXLgw+NiyLLtOnTr2pEmTgttOnjxpV69e3Z41a5YDE5rjzLU6m6+//tqWZO/Zs+eCPjd7TkooLy9P69evV48ePYps79Gjh9asWePQVOVDRkaGJKlmzZoOT2KuwYMHq3fv3urevbvToxht8eLFatu2rfr27atatWrpd7/7nebMmeP0WEbq2LGjPvnkE23fvl2S9O233+qLL75Qr169HJ7MbLt379ahQ4eK/Kz3+Xy69tpr+VkfgoyMDLlcrgvem2n0jf9MdvToURUWFqp27dpFtteuXVuHDh1yaCrz2batYcOGqWPHjmrRooXT4xjp3Xff1YYNG7Ru3TqnRzHeTz/9pJkzZ2rYsGEaNWqUvv76az322GPy+XwaMGCA0+MZZfjw4crIyFDTpk3l8XhUWFioCRMm6O6773Z6NKMFfp6f7Wf9nj17nBip3Dh58qRGjBihe+6554JvnEiclJLL5Sry2LbtYtvwH0OGDNHmzZv1xRdfOD2KkdLS0vT4449r+fLlqlKlitPjGM+yLLVt21YTJ06UJP3ud7/Tli1bNHPmTOLkDPPnz9dbb72lt99+W82bN9emTZs0dOhQ1atXT7///e+dHs94/Ky/MPn5+erXr58sy9KMGTMu+OOJkxJKTEyUx+MptpfkyJEjxQobpzz66KNavHixVq1apaSkJKfHMdL69et15MgRtWnTJritsLBQq1at0vTp05WbmyuPx+PghGapW7eumjVrVmTb5Zdfrvfee8+hicz1l7/8RSNGjFC/fv0kSS1bttSePXuUmppKnJxHnTp1JJ3ag1K3bt3gdn7Wn1t+fr7uvPNO7d69W59++ukF7zWROFunxKKjo9WmTRutWLGiyPYVK1bommuucWgqM9m2rSFDhmjBggX69NNP1bBhQ6dHMtZ1112n7777Tps2bQr+adu2re69915t2rSJMDlDhw4dip2Wvn37dtWvX9+hicyVk5Mjt7voj3yPx8OpxL+hYcOGqlOnTpGf9Xl5eVq5ciU/688iECY7duzQxx9/rISEhBJ9HvaclMKwYcN03333qW3btmrfvr1mz56tvXv36qGHHnJ6NKMMHjxYb7/9thYtWqS4uLjg3qbq1auratWqDk9nlri4uGLH4lSrVk0JCQkco3MWTzzxhK655hpNnDhRd955p77++mvNnj1bs2fPdno049x8882aMGGCUlJS1Lx5c23cuFFTp07VoEGDnB7NcVlZWdq5c2fw8e7du7Vp0ybVrFlTKSkpGjp0qCZOnKgmTZqoSZMmmjhxomJiYnTPPfc4OLUzzrdW9erV0x133KENGzboX//6lwoLC4M/72vWrKno6OjQn6iEZxDh3/7xj3/Y9evXt6Ojo+0rr7yS02PPQtJZ/8ydO9fp0coFTiU+vyVLltgtWrSwfT6f3bRpU3v27NlOj2Qkv99vP/7443ZKSopdpUoVu1GjRvZTTz1l5+bmOj2a4z777LOz/oz6/e9/b9v2qdOJx44da9epU8f2+Xx2586d7e+++87ZoR1yvrXavXv3OX/ef/bZZxf0PC7btu2SNxQAAEB4ccwJAAAwCnECAACMQpwAAACjECcAAMAoxAkAADAKcQIAAIxCnAAAAKMQJwAAwCjECQAAMApxAgAAjEKcAAAAoxAnAADAKP8fn2mJre5TmA4AAAAASUVORK5CYII=", "text/plain": [ "<Figure size 640x480 with 1 Axes>" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "''' \n", "Let's define another polygon, and connect them via a path.\n", "'''\n", "\n", "polygon_2 = D3 << pg.polygon_ports(xpts = [10, 11, 11, 10], ypts = [3, 3, 4, 4], layer = barrier_layer) # Defining a polygon, with a list of x-coordinates, and a list of y-coordinates.\n", "\n", "''' \n", "There are several ways of connecting these kinds of shapes. The first, is simply to draw a path between the two ports. The two ports are accessible via the ports attribute\n", "of the polygon.\n", "'''\n", "\n", "port_1_1 = polygon_1.ports['1'] # Fetching the port of the polygon. The ports are numbered from 1 and up.\n", "port_1_2 = polygon_1.ports['2'] # Fetching the port of the polygon. The ports are numbered from 1 and up.\n", "port_1_3 = polygon_1.ports['3'] # Fetching the port of the polygon. The ports are numbered from 1 and up.\n", "port_1_4 = polygon_1.ports['4'] # Fetching the port of the polygon. The ports are numbered from 1 and up.\n", "port_2_1 = polygon_2.ports['1'] # Fetching the port of the polygon. The ports are numbered from 1 and up.\n", "port_2_2 = polygon_2.ports['2'] # Fetching the port of the polygon. The ports are numbered from 1 and up.\n", "port_2_3 = polygon_2.ports['3'] # Fetching the port of the polygon. The ports are numbered from 1 and up.\n", "port_2_4 = polygon_2.ports['4'] # Fetching the port of the polygon. The ports are numbered from 1 and up.\n", "\n", "D4 = Device() # Making an empty device, so D3 remains unchanged.\n", "\n", "D4.add_ref(D3) # Adding a reference to the empty device, by simply referencing the full device.\n", "D4.add_ref(pr.route_basic(port_1_2, port_2_4, layer = barrier_layer)) # Adding a path between the two ports. The route_basic function takes two ports, and draws a path between them.\n", "\n", "''' \n", "Note: The route_basic function only works, when the two ports are facing opposite eachother, so a 180 degree difference in their orientation. \n", "Note: The route_basic function is also being deprecated in future Phidl packages, so better to stick with one of the other functions.\n", "'''\n", "\n", "qp(D4)" ] }, { "cell_type": "code", "execution_count": 48, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "<Figure size 640x480 with 1 Axes>" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "D5 = Device() # Making an empty device, so D3 remains unchanged.\n", "\n", "D5.add_ref(D3) # Adding a reference to the empty device, by simply referencing the full device.\n", "D5.add_ref(pr.route_smooth(port_1_2, port_2_4, layer = barrier_layer)) # Adding a path between the two ports. The route_basic function takes two ports, and draws a path between them.\n", "\n", "\n", "''' \n", "This type of routing, has several options, such as the width of the path, the radius of the corners, and so forth. See documentation for more information.\n", "The default routing type is Manhattan, which also has its own function, pr.path_manhattan(). See documentation.\n", "Note: The complex routing pattern it has created. \n", "'''\n", "\n", "qp(D5)" ] }, { "cell_type": "code", "execution_count": 49, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAicAAAGdCAYAAADJ6dNTAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAA9hAAAPYQGoP6dpAAAjcklEQVR4nO3de3BU9f3/8dduQpaEJCgECDEbDMq3qGi1ia2BEKFY6rW3EcQbWi9TR1AwMx2ItqPYSqpVxxkpaJwO/3Tw0kErvdiBIjd/1JIJBrkpBBESLqZIJrshuiTZ8/sjTSQXwsnl5Hz27PMxwwx7ssl58yaXJ2c3xGdZliUAAABD+N0eAAAA4EzECQAAMApxAgAAjEKcAAAAoxAnAADAKMQJAAAwCnECAACMQpwAAACjJLo9QE+i0aiOHj2qtLQ0+Xw+t8cBAAA2WJalcDisrKws+f29vw5idJwcPXpUwWDQ7TEAAEAfVFdXKzs7u9evZ3ScpKWlSWr9w6Wnp7s8zdk1NDRoy5Ytmjp1qlJTU90ex2jRaFTV1dUKBoN9qul4wq7sY1f2sSv72JV9nXcVCoUUDAbbv473ltFx0vZQTnp6utFx4vf7lZKSovT0dOLkHKLRqNLS0pSens4H+zmwK/vYlX3syj52Zd/ZdtXXp2SwbQAAYBTiBAAAGIU4AQAARiFOAACAUYgTAABgFOIEAAAYhTgBAABGIU4AAIBRiBMAAGAU4gQAABiFOAEAAEYhTgAAgFGIEwAAYBTiBAAAGIU4AQAARiFOAACAUYgTAABgFOIEAAAYhTgBAABGIU4AAIBRiBMAAGAU4gQAABiFOAEAAEYhTgAAgFGIEwAAYBTiBAAAGIU4AQAARnE8To4cOaK77rpLI0eOVEpKiq688kpVVFQ4fVoAABCjEp1843V1dZoyZYqmT5+u9957T6NHj9aBAwd03nnnOXlaAAAQwxyNk2effVbBYFArV65sP3bhhRc6eUoAABDjHI2TNWvW6Ic//KFmzZqlTZs26YILLtDDDz+sBx98sNv7RyIRRSKR9tuhUEiSFI1GFY1GnRy1X9rmM31OE7An+9iVfezKPnZlH7uyr/Ou+rszR+Pks88+04oVK1RcXKzHH39c27Zt06OPPqpAIKC5c+d2uX9paamWLFnS5Xh1dbXS0tKcHLVfGhsbFQ6HVVNTo5SUFLfHMZplWaqrq5PP55PP53N7HKOxK/vYlX3syj52ZV/nXYXD4X69PZ9lWdYAzdZFUlKS8vPztXXr1vZjjz76qMrLy/Xvf/+7y/27u3ISDAZVV1en9PR0p8bst4aGBm3YsEHTp09Xamqq2+MYLRqN6vDhw8rJyZHfzzeL9YRd2ceu7GNX9rEr+zrvKhQK6fzzz1d9fX2fvn47euVk7NixuvTSSzscu+SSS7R69epu7x8IBBQIBLoc9/v9Rr9jtM1n+pymYFf2sSv72JV97Mo+dmXfQH4tdHTbU6ZM0aefftrh2L59+zRu3DgnTwsAAGKYo3Hy2GOP6cMPP9TSpUtVVVWlVatWqaysTPPmzXPytAAAIIY5GidXX3213nnnHb3++uuaNGmSfvOb3+ill17SnXfe6eRpAQBADHP0OSeSdPPNN+vmm292+jQAAMAjeIYPAAAwCnECAACMQpwAAACjECcAAMAoxAkAADAKcQIAAIxCnAAAAKMQJwAAwCjECQAAMApxAgAAjEKcAAAAoxAnAADAKMQJAAAwCnECAACMQpwAAACjECcAAMAoxAkAADAKcQIAAIxCnAAAAKMQJwAAwCjECQAAMApxAgAAjEKcAAAAoxAnAADAKMQJAAAwCnECAACMQpwAAACjECcAAMAoxAkAADAKcQIAAIxCnAAAAKMQJwAAwCjECQAAMApxAgAAjEKcAAAAoxAnAADAKMQJAAAwCnECAACMQpwAAACjECcAAMAoxAkAADAKcQIAAIxCnAAAAKMQJwAAwCjECQAAMApxAgAAjEKcAAAAoxAnAADAKMQJAAAwCnECAACMQpwAAACjECcAAMAoxAkAADAKcQIAAIxCnAAAAKMQJwAAwCjECQAAMApxAgAAjEKcAAAAoxAnAADAKMQJAAAwCnECAACMQpwAAACjECcAAMAogxYnpaWl8vl8Wrhw4WCdEgAAxKBBiZPy8nKVlZXpiiuuGIzTAQDQZ5Zl6dTp0zp1+rQam5p06vRpWZbl9lhxxfE4aWho0J133qnXXntN559/vtOnAwCgXxqbmvT7zZv1/JYtKtuxQ89v2aLGpia3x4oriU6fYN68ebrpppt03XXX6be//W2P941EIopEIu23Q6GQJCkajSoajTo6Z3+0zWf6nCZgT/axK/vYlX3s6tyi0agsy9KXX36pqqoqNTU1Sf/5j5J8PrdHa3fBBRdo7ty5bo/RrvP7VX/fvxyNkzfeeEPbt29XeXm5rfuXlpZqyZIlXY5XV1crLS1toMcbMI2NjQqHw6qpqVFKSorb4xjNsizV1dXJ5/PJZ9AHuonYlX3syj521bPa2lptLS/Xmk8+UbihQRkZGTpx4oR0/LgSDQu6pKQkTZ482e0xJHV9vwqHw/16e47FSXV1tRYsWKC1a9dq6NChtl6npKRExcXF7bdDoZCCwaCCwaDS09OdGrXfGhoatH//fmVnZys1NdXtcYzW9i+SYDAov59vFusJu7KPXdnHrrqqqqrS6tWr9dZbb2nXrl3yJSWpOT+/fT+ff/65Pv/Pf+Qz7KGdoqIizZkzx+0xJHV9v2p75KOvHIuTiooK1dbWKi8vr/1YS0uLNm/erGXLlikSiSghIaHD6wQCAQUCgS5vy+/3G/1B1Daf6XOagl3Zx67sY1f2savWIPnzn/+s119/XTt37pTf7//moQifT4pGFVXrFYFoNCqruVlqbpZSU6WJE6WLLpJGjGi9/dVX0pEj0ocfSseODdqfwbIso/4OB/JroWNxMmPGDO3cubPDsZ///OeaOHGiFi1a1CVMAABwUk9BYvs5Enl5UkGBVFcnff651NgonX++9H//J02YIK1ZI33yiXN/iDjhWJykpaVp0qRJHY4NGzZMI0eO7HIcAAAnDEiQnOnYMelPf5Jqajoez86Wbr9d+uEPpf37pZaWAZg+fjn+3ToAAAymAQ+SM+3b1/3xmhrp0CFp/Hhp1Cjp+PH+nSfODWqcbNy4cTBPBwCIE44GiV1t5zHsu3piEVdOAAAxyYggaZOeLl14odTQIP33v4N7bg8iTgAAMcOoIGnj90s33ywlJkobNkj8V/f9RpwAAIxmZJCc6cYbpZwcqbJS2r3b7Wk8gTgBABjH+CBpc8MN0qRJ0q5d0j//6fY0nkGcAACMEDNB0ubGG6Urrmi9WvL3v7s9jacQJwAA18RckLRpC5M9e6S//Y3nmQww4gQAMKhiNkjatIXJ3r3SX/9KmDiAOAEAOC7mg6TNzJmtYRKJSCdPSlOmdL3Pvn1Sbe3gz+YhxAkAwBGeCZI2ycmtP/RPkgKB7sNEkurriZN+Ik4AAAPGM0GSkCBr4kQdS06WNXSolJnZGif19a2/JKm6Wtq4kf8R1gHECQCgXzwTJGfy+aQhQ9Ti90tDhkgpKV2fWxIMStOmESgOIE4AAL3mySA5k99v737BoHT55dKOHc7OE2eIEwCALZ4PkjO1tNi/b3Kyc3PEKeIEAHBWcRUkZ4pGpS++UHpGhk6cOCF99ln3wfL1160vw4AiTgAAHcRtkJzJsuT74gulp6Toyy++kPXxx1JTk9tTxQ3iBABAkMAoxAkAxCmCBKYiTgAgjlRVVWn9+vUqKytTZWUlQQIjEScA4HFnXiHZu3evZsyYoV27dkkiSGAm4gQAPOhsD9kkJibK4gfVwXDECQB4BM8hgVcQJwAQwwgSeBFxAgAxhiCB1xEnABADCBLEE+IEAAxFkCBeEScAYBCCBCBOAMB1BAnQEXECAC4gSICzI04AYJAQJIA9xAkAOIggAXqPOAGAAUaQAP1DnADAACBIvCMhMVEtkpKSktwepUfZ2dluj+AY4gQA+ogg8Y7ExEQ1Nzdr1KhR+uns2Tp91VUKBoPavXu3xuXkqPC665Tk87k9Zrvs7Gzde++9bo/hGOIEAHqBIPGOM4Nk9uzZuu222zRlyhT5fD41NjUpGo2qOjdXwWBQqYGAfAbFidcRJwBwDgSJd5wtSPx+f4f7DUtKUjQaVcqQIRqWlESYDDLiBAC6QZB4h90ggTmIEwD4H4LEOwiS2EacAIhrBIl3ECTeQZwAiDsEiXcQJN5EnACICwSJdxAk3kecAPAsgsQ7CJL4QpwA8BSCxDsIkvhFnACIeVVVVVq/fr3KyspUWVlJkMQwggQScQIgRp15hWTv3r2aMWOGdu3aJYkgiTUECTojTgDEjLM9ZJOYmCjLstweD71AkKAnxAkAo/EcEu8gSGAXcQLAOASJdxAk6AviBIARCBLvIEjQX8QJANcQJN5BkGAgEScABhVB4h0ECZxCnABwHEHiHQQJBgNxAsARBIl3ECQYbMQJgAFDkHgHQQI3EScA+oUg8Q6CBKYgTgD0GkHiHQQJTEScALCFIPGOtvAgSGAq4gTAWREk3tF2hSQjI0NFRUUqKSlRYWEhQQIjEScAOiBIvKO7h2wKCgpUU1OjnJwcwgTGIk4AECQecq7nkPD3iVhAnABxiiDxDp7UCq8hToA4QpB4B0ECLyNOAI8jSLyDIEG8IE4ADyJIvIMgQTwiTgCPIEi8gyBBvHM0TkpLS/X222/rk08+UXJysiZPnqxnn31W3/rWt5w8LRA3CBLvIEiAbzgaJ5s2bdK8efN09dVXq7m5WU888YRmzpypPXv2aNiwYU6eGvAsgsQ7CBKge47GyT//+c8Ot1euXKnRo0eroqJCRUVFTp4a8BSCxDsIEuDcBvU5J/X19ZKkESNGdPvySCSiSCTSfjsUCklq/eRr8ifgtvlMn9ME7Mm+/fv36/3339cf//hH7dixoz1IEhNbP2z5YvaNxMRE+f3+9t2Y5sz/Ov7WW2/VrFmzNHny5A5/h4P1McHHoH3syr7Ou+rvzgbtI9myLBUXF6uwsFCTJk3q9j6lpaVasmRJl+PV1dVKS0tzesQ+a2xsVDgcVk1NjVJSUtwex2iWZamurk4+n08+n8/tcYxTW1uriooKlZeX69ixY5o4caJGjRql73//+26PZjS/36+JEydKMudKUltMpqamKj8/X/n5+br44ovb3+9rampcmYuPQfvYlX2ddxUOh/v19gYtTubPn6+PP/5YH3zwwVnvU1JSouLi4vbboVBIwWBQwWBQ6enpgzFmnzQ0NGj//v3Kzs5Wamqq2+MYLRqNyrIsBYNB/uX/P1VVVVq9erXeeust7dq1q8sVko0bN6q5udnlKc1myq7sXCFxGx+D9rEr+zrvqu2Rj74alDh55JFHtGbNGm3evFnZ2dlnvV8gEFAgEOhy3O/3G/2O0Taf6XOagl31/BySM0WjUTU3NxMnNri1q1h8Dgkfg/axK/sG8muho3FiWZYeeeQRvfPOO9q4caNyc3OdPB1gNJ7U6h2xGCRALHE0TubNm6dVq1bp3XffVVpamo4fPy5JGj58uJKTk508NWAEgsQ7CBJg8DgaJytWrJAkTZs2rcPxlStX6t5773Xy1IBrCBLvIEgAdzj+sA4QDwgS7yBIAPeZ+Z8CADGAIPEOggQwC3EC9AJB4h0ECWAu4gQ4B4LEOwgSIDYQJ0A3CBLvIEiA2EOcAP9DkHgHQQLENuIEcY0g8Y628CBIgNhHnCDuECTecebPsikqKlJJSYkKCwsJEiDGESeICwSJd3T3kE1BQYFqamqUk5NDmAAeQJzAswgS7zjXc0j4+wS8hTiBpxAk3sGTWoH4RZwg5hEk3kGQAJCIE8QogsQ7CBIAnREniBkEiXcQJAB6QpzAaASJdxAkAOwiTmAcgsQ7CBIAfUGcwAgEiXcQJAD6iziBawgS7yBIAAwk4gSDqqqqSuvXr1dZWZkqKysJkhhGkABwCnECx515hWTv3r2aMWOGdu3aJYkgiTUECYDBQJzAEWd7yCYxMVGWZbk9HnqBIAEw2IgTDBieQ+IdBAkANxEn6BeCxDsIEgCmIE7QawSJdxAkAExEnMAWgsQ7CBIApiNOcFYEiXcQJABiCXGCDggS7yBIAMQq4gQEiYcQJAC8gDiJUwSJdxAkALyGOPEYy7LU2NTU4VjKkCHy+XwEiYcQJAC8jDjxmMamJv1+8+b22ydPntTIqiqtfuMNgiTGESQA4gVxMkBOnjypHTt2KDk52dU5vmpu1rFjx3Ts2DH9v61bdfLLL+UrL5cViUgiSGJNW3gQJADiCXEyAA4cOKBXXnlF5eXlamlpcXeYIUOk732vwyGLIIkpbVdIMjIyVFRUpJKSEhUWFhIkAOIGcTIAGhoa3B4BMa67h2wKCgpUU1OjnJwcwgRAXCFOAJec6zkkPAQHIF4RJ8Ag4kmtAHBuxAngMIIEAHqHOAEcQJAAQN8RJ8AAIUgAYGAQJ0A/ECQAMPCIE6CXCBIAcBZxAthAkADA4CFOgLMgSADAHcQJcAaCBADcR5wg7hEkAGAW4gRxiSABAHMRJ4gbBAkAxAbiBJ5GkABA7CFO4DkECQDENuIkVgWD0pgxXY8nJEhZWd/cDocHbyYXESQA4B3ESSwaPlz6/ve7f5nPJw0b9s3taHRwZnIBQQIA3kScxKKvv5aam6VEG3993V1diWEECQB4H3ESKy67TMrOljIzpVGjWsPk5EkpEun59erqBmc+BxEkABBfiJNYUVTU+nBOY6N06lTr7/fskS66qOP9QqGOV1S++mpw5xwgBAkAxC/iJFb84x+tV0FCIemaa6Rp06T6emntWmnGjNYnwu7YIe3eLX3ve25P2ycECQBAIk5ix6FD3R8/dkz6y1+kkSOl6urWSIkhBAkAoDPixAsaGlp/STERJ23hQZAAALpDnGBQtF0hycjIUFFRkUpKSlRYWEiQAAC6IE7gmO4esikoKFBNTY1ycnIIEwBAt4gTDKhzPYck6uH/FA4AMDCIE/QbT2oFAAwk4gR9QpAAAJxCnMA2ggQAMBiIE/SIIAEADDbiJFZccYUUDLb+ftSob47l5LT+ft8+af/+ATkVQQIAcNOgfLVZvny5cnNzNXToUOXl5WnLli2DcVpvCQalyy9v/ZWZ2fVYP3/6cOL/fh7PqFGj9Itf/EKbN2/W8ePHtWzZMk2dOpUwAQAMGsevnLz55ptauHChli9frilTpujVV1/VDTfcoD179iin7V/9OLe//7311wDiCgkAwESOfxV68cUXdf/99+uBBx7QJZdcopdeeknBYFArVqxw+tToBldIAACmc/TKyenTp1VRUaHFixd3OD5z5kxt3brVyVPjDAmJiWppauIKCQAgJjgaJydOnFBLS4vGdHo+xJgxY3T8+PEu949EIopEIu23Q6GQJKmhocHoL6RfffWVLMtSggE/dM9KSJDl87XfHjp0qG6fO1e3/exnuuaaa9r32NjY6Mp80WhUp06dMv7v1ATsyj52ZR+7so9d2dd5Vw1tP4y2jwblu3V8Z3yxlCTLsrock6TS0lItWbKky/EtW7YoJSXFsfn669ixYzrvvPN05ZVXuv4O3OL36+gFF7Tfzs/L0/UXX6xIJKJNmza5OFkry7IUCoV04MCBbt8H8A12ZR+7so9d2ceu7Ou8q/7+A9jROMnIyFBCQkKXqyS1tbVdrqZIUklJiYqLi9tvh0IhBYNBTZ06Venp6U6O2i9thTh+/HglJye7OstXzc1adeCAJCkpKUkjRoxQ0TXXaFhSkqtztYlGo6qurlYwGHQ95EzHruxjV/axK/vYlX2dd9X2yEdfORonSUlJysvL07p16/TTn/60/fi6dev04x//uMv9A4GAAoFAl+OpqalKTU11ctR+Gzt2rK655hrX57QsSwUFBR2OpQwZYkz1R6NRDRs2TKmpqXywnwO7so9d2ceu7GNX9nXeVX9/yKvjD+sUFxfr7rvvVn5+vgoKClRWVqbDhw/roYcecvrUccnn8xlzlQQAgL5wPE5uu+02ffnll3r66ad17NgxTZo0Sf/4xz80btw4p08NAABi0KA8Ifbhhx/Www8/PBinAgAAMY4H0QAAgFGIEwAAYBTiBAAAGIU4AQAARiFOAACAUYgTAABgFOIEAAAYhTgBAABGIU4AAIBRiBMAAGAU4gQAABiFOAEAAEYhTgAAgFGIEwAAYBTiBAAAGIU4AQAARiFOAACAUYgTAABgFOIEAAAYhTgBAABGIU4AAIBRiBMAAGAU4gQAABiFOAEAAEYhTgAAgFGIEwAAYBTiBAAAGIU4AQAARiFOAACAUYgTAABgFOIEAAAYhTgBAABGIU4AAIBRiBMAAGAU4gQAABiFOAEAAEYhTgAAgFGIEwAAYBTiBAAAGIU4AQAARiFOAACAUYgTAABgFOIEAAAYhTgBAABGIU4AAIBRiBMAAGAU4gQAABiFOAEAAEYhTgAAgFGIEwAAYBTiBAAAGIU4AQAARiFOAACAUYgTAABgFOIEAAAYhTgBAABGIU4AAIBRiBMAAGAU4gQAABiFOAEAAEYhTgAAgFGIEwAAYBTiBAAAGIU4AQAARiFOAACAURyLk88//1z333+/cnNzlZycrIsuukhPPvmkTp8+7dQpAQCAByQ69YY/+eQTRaNRvfrqq7r44ou1a9cuPfjggzp16pSef/55p04LAABinGNxcv311+v6669vvz1+/Hh9+umnWrFiBXECAADOyrE46U59fb1GjBhx1pdHIhFFIpH226FQSJIUjUYVjUYdn6+v2uYzfU4TsCf72JV97Mo+dmUfu7Kv8676u7NBi5MDBw7o5Zdf1gsvvHDW+5SWlmrJkiVdjldXVystLc3J8fqlsbFR4XBYNTU1SklJcXsco1mWpbq6Ovl8Pvl8PrfHMRq7so9d2ceu7GNX9nXeVTgc7tfb63WcPPXUU90GxJnKy8uVn5/ffvvo0aO6/vrrNWvWLD3wwANnfb2SkhIVFxe33w6FQgoGgwoGg0pPT+/tqIOmoaFB+/fvV3Z2tlJTU90ex2jRaFSWZSkYDMrv55vFesKu7GNX9rEr+9iVfZ131fbIR1/1Ok7mz5+vOXPm9HifCy+8sP33R48e1fTp01VQUKCysrIeXy8QCCgQCHQ57vf7jX7HaJvP9DlNwa7sY1f2sSv72JV97Mq+gfxa2Os4ycjIUEZGhq37HjlyRNOnT1deXp5WrlzJXy4AADgnx55zcvToUU2bNk05OTl6/vnn9d///rf9ZZmZmU6dFgAAxDjH4mTt2rWqqqpSVVWVsrOzO7zMsiynTgsAAGKcY4+z3HvvvbIsq9tfAAAAZ8OTQAAAgFGIEwAAYBTiBAAAGIU4AQAARiFOAACAUYgTAABgFOIEAAAYhTgBAABGIU4AAIBRiBMAAGAU4gQAABiFOAEAAEYhTgAAgFGIEwAAYBTiBAAAGIU4AQAARiFOAACAUYgTAABgFOIEAAAYhTgBAABGIU4AAIBRiBMAAGAU4gQAABiFOAEAAEYhTgAAgFGIEwAAYJREtwfoiWVZkqRQKOTyJD1raGhQY2OjQqGQotGo2+MYLRqNKhwOKxQKye+njXvCruxjV/axK/vYlX2dd9X2dbvt63hvGR0n4XBYkhQMBl2eBAAA9FY4HNbw4cN7/Xo+q69ZMwii0aiOHj2qtLQ0+Xw+t8c5q1AopGAwqOrqaqWnp7s9jtHYlX3syj52ZR+7so9d2dd5V5ZlKRwOKysrq09XnYy+cuL3+5Wdne32GLalp6fzDmwTu7KPXdnHruxjV/axK/vO3FVfrpi04UE0AABgFOIEAAAYhTgZAIFAQE8++aQCgYDboxiPXdnHruxjV/axK/vYlX0DvSujnxALAADiD1dOAACAUYgTAABgFOIEAAAYhTgBAABGIU76afny5crNzdXQoUOVl5enLVu2uD2ScUpLS3X11VcrLS1No0eP1k9+8hN9+umnbo8VE0pLS+Xz+bRw4UK3RzHWkSNHdNddd2nkyJFKSUnRlVdeqYqKCrfHMk5zc7N+9atfKTc3V8nJyRo/fryefvppfh6YpM2bN+uWW25RVlaWfD6f/vKXv3R4uWVZeuqpp5SVlaXk5GRNmzZNu3fvdmdYl/W0q6amJi1atEiXX365hg0bpqysLM2dO1dHjx7t9XmIk3548803tXDhQj3xxBP66KOPNHXqVN1www06fPiw26MZZdOmTZo3b54+/PBDrVu3Ts3NzZo5c6ZOnTrl9mhGKy8vV1lZma644gq3RzFWXV2dpkyZoiFDhui9997Tnj179MILL+i8885zezTjPPvss3rllVe0bNky7d27V88995x+//vf6+WXX3Z7NNedOnVK3/72t7Vs2bJuX/7cc8/pxRdf1LJly1ReXq7MzEz94Ac/aP/5b/Gkp101NjZq+/bt+vWvf63t27fr7bff1r59+/SjH/2o9yey0Gff/e53rYceeqjDsYkTJ1qLFy92aaLYUFtba0myNm3a5PYoxgqHw9aECROsdevWWddee621YMECt0cy0qJFi6zCwkK3x4gJN910k3Xfffd1OPazn/3Muuuuu1yayEySrHfeeaf9djQatTIzM63f/e537ce+/vpra/jw4dYrr7ziwoTm6Lyr7mzbts2SZB06dKhXb5srJ310+vRpVVRUaObMmR2Oz5w5U1u3bnVpqthQX18vSRoxYoTLk5hr3rx5uummm3Tddde5PYrR1qxZo/z8fM2aNUujR4/WVVddpddee83tsYxUWFio9evXa9++fZKkHTt26IMPPtCNN97o8mRmO3jwoI4fP97hc30gENC1117L53ob6uvr5fP5en010+gf/GeyEydOqKWlRWPGjOlwfMyYMTp+/LhLU5nPsiwVFxersLBQkyZNcnscI73xxhvavn27ysvL3R7FeJ999plWrFih4uJiPf7449q2bZseffRRBQIBzZ071+3xjLJo0SLV19dr4sSJSkhIUEtLi5555hndfvvtbo9mtLbP5919rj906JAbI8WMr7/+WosXL9Ydd9zR6x+cSJz0k8/n63Dbsqwux/CN+fPn6+OPP9YHH3zg9ihGqq6u1oIFC7R27VoNHTrU7XGMF41GlZ+fr6VLl0qSrrrqKu3evVsrVqwgTjp588039ac//UmrVq3SZZddpsrKSi1cuFBZWVm655573B7PeHyu752mpibNmTNH0WhUy5cv7/XrEyd9lJGRoYSEhC5XSWpra7sUNlo98sgjWrNmjTZv3qzs7Gy3xzFSRUWFamtrlZeX136spaVFmzdv1rJlyxSJRJSQkODihGYZO3asLr300g7HLrnkEq1evdqlicz1y1/+UosXL9acOXMkSZdffrkOHTqk0tJS4qQHmZmZklqvoIwdO7b9OJ/rz66pqUmzZ8/WwYMH9f777/f6qonEd+v0WVJSkvLy8rRu3boOx9etW6fJkye7NJWZLMvS/Pnz9fbbb+v9999Xbm6u2yMZa8aMGdq5c6cqKyvbf+Xn5+vOO+9UZWUlYdLJlClTunxb+r59+zRu3DiXJjJXY2Oj/P6On/ITEhL4VuJzyM3NVWZmZofP9adPn9amTZv4XN+NtjDZv3+//vWvf2nkyJF9ejtcOemH4uJi3X333crPz1dBQYHKysp0+PBhPfTQQ26PZpR58+Zp1apVevfdd5WWltZ+tWn48OFKTk52eTqzpKWldXkuzrBhwzRy5Eieo9ONxx57TJMnT9bSpUs1e/Zsbdu2TWVlZSorK3N7NOPccssteuaZZ5STk6PLLrtMH330kV588UXdd999bo/muoaGBlVVVbXfPnjwoCorKzVixAjl5ORo4cKFWrp0qSZMmKAJEyZo6dKlSklJ0R133OHi1O7oaVdZWVm69dZbtX37dv3tb39TS0tL++f7ESNGKCkpyf6J+vgdRPifP/zhD9a4ceOspKQk6zvf+Q7fHtsNSd3+WrlypdujxQS+lbhnf/3rX61JkyZZgUDAmjhxolVWVub2SEYKhULWggULrJycHGvo0KHW+PHjrSeeeMKKRCJuj+a6DRs2dPs56p577rEsq/XbiZ988kkrMzPTCgQCVlFRkbVz5053h3ZJT7s6ePDgWT/fb9iwoVfn8VmWZfW9oQAAAAYWzzkBAABGIU4AAIBRiBMAAGAU4gQAABiFOAEAAEYhTgAAgFGIEwAAYBTiBAAAGIU4AQAARiFOAACAUYgTAABgFOIEAAAY5f8DmI9PwWj8WFAAAAAASUVORK5CYII=", "text/plain": [ "<Figure size 640x480 with 1 Axes>" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "''' \n", "However, the routing that I have used most frequently, is the route_quad function. It has fewer restrictions, as some of the other functions use algorithms to route the path\n", "in a clever way, which sometimes puts restrictions on the orientation of the ports and how far apart they are, and such.\n", "The route_quad function, simply draws a path between the two ports, and is more flexible. However, this also means that it is more angular in its routing.\n", "'''\n", "\n", "D6 = Device() # Making an empty device, so D3 remains unchanged.\n", "\n", "D6.add_ref(D3) # Adding a reference to the empty device, by simply referencing the full device.\n", "D6.add_ref(pr.route_quad(port_1_2, port_2_4, layer = barrier_layer)) # Adding a path between the two ports. The route_basic function takes two ports, and draws a path between them.\n", "\n", "\n", "qp(D6)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.12" }, "orig_nbformat": 4 }, "nbformat": 4, "nbformat_minor": 2 }