{ "cells": [ { "cell_type": "markdown", "id": "6179bd66-14d1-40ad-923f-541c37de5349", "metadata": {}, "source": [ "# 07 - Vehicle Routing\n", "### Modified for use with Quantum Rings toolkit for Qiskit 2.x" ] }, { "cell_type": "code", "execution_count": 1, "id": "eb14ece1-c457-4648-a3e3-973300376a07", "metadata": {}, "outputs": [], "source": [ "# This tutorial is at:\n", "# https://qiskit-community.github.io/qiskit-optimization/tutorials/07_examples_vehicle_routing.html\n", "\n", "# Modified for use with Quantum Rings SDK" ] }, { "cell_type": "code", "execution_count": 2, "id": "5d90d05a-9ba8-4d3f-89f3-2a2d3b1f67ed", "metadata": {}, "outputs": [], "source": [ "#\n", "# Setup your account\n", "# You can also save your account locally using the class method QrRuntimeService.save_account(...) and\n", "# invoke the QrRuntimeService class constructor without any arguments.\n", "#\n", "\n", "import os\n", "my_token = os.environ[\"QR_TOKEN\"]\n", "my_name = os.environ[\"QR_ACCOUNT\"]\n", "\n", "#\n", "# Set the backend of your choice, depending upon the task and your hardware configuration.\n", "# See SDK documentation for additional help.\n", "#\n", "\n", "my_backend = \"scarlet_quantum_rings\"" ] }, { "cell_type": "code", "execution_count": 3, "id": "7edc3025-fbb2-4a4f-8a6b-9575f74257b9", "metadata": {}, "outputs": [], "source": [ "# Import from Quantum Rings Toolkit\n", "from quantumrings.toolkit.qiskit import QrRuntimeService\n", "\n", "# Acquire Quantum Rings backend\n", "qr_services = QrRuntimeService(name = my_name, token = my_token)\n", "qr_backend = qr_services.backend(name = my_backend, precision = \"single\")" ] }, { "cell_type": "code", "execution_count": 4, "id": "ee7f5c84-b4e9-4922-ad9f-937b5fe82a05", "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "\n", "try:\n", " import cplex\n", " from cplex.exceptions import CplexError\n", "except:\n", " print(\"Warning: Cplex not found.\")\n", "import math\n", "\n", "from qiskit_algorithms.utils import algorithm_globals\n", "from qiskit_algorithms import SamplingVQE\n", "from qiskit_algorithms.optimizers import SPSA\n", "from qiskit.circuit.library import RealAmplitudes\n", "\n", "\n", "# Switch to Quantum Rings's Sampler\n", "#from qiskit.primitives import Sampler\n", "from quantumrings.toolkit.qiskit import QrSamplerV2 as Sampler" ] }, { "cell_type": "code", "execution_count": 5, "id": "9f5f1985-fbf8-4f49-af5d-80f25ca3253c", "metadata": {}, "outputs": [], "source": [ "# Initialize the problem by defining the parameters\n", "n = 3 # number of nodes + depot (n+1)\n", "K = 2 # number of vehicles" ] }, { "cell_type": "code", "execution_count": 6, "id": "d8157656-d60a-456c-802c-1ae9fd1a8d03", "metadata": {}, "outputs": [], "source": [ "# Get the data\n", "class Initializer:\n", " def __init__(self, n):\n", " self.n = n\n", "\n", " def generate_instance(self):\n", "\n", " n = self.n\n", "\n", " # np.random.seed(33)\n", " np.random.seed(1543)\n", "\n", " xc = (np.random.rand(n) - 0.5) * 10\n", " yc = (np.random.rand(n) - 0.5) * 10\n", "\n", " instance = np.zeros([n, n])\n", " for ii in range(0, n):\n", " for jj in range(ii + 1, n):\n", " instance[ii, jj] = (xc[ii] - xc[jj]) ** 2 + (yc[ii] - yc[jj]) ** 2\n", " instance[jj, ii] = instance[ii, jj]\n", "\n", " return xc, yc, instance" ] }, { "cell_type": "code", "execution_count": 7, "id": "4437574c-f3f4-44ff-a230-4da8a2cd3ed8", "metadata": {}, "outputs": [], "source": [ "# Initialize the problem by randomly generating the instance\n", "initializer = Initializer(n)\n", "xc, yc, instance = initializer.generate_instance()" ] }, { "cell_type": "markdown", "id": "3d46006e-a561-4b3c-be36-b99795fc3c04", "metadata": {}, "source": [ "# Classical solution using IBM ILOG CPLEX" ] }, { "cell_type": "code", "execution_count": 8, "id": "6e32076e-ab29-4016-9e32-954062fae956", "metadata": {}, "outputs": [], "source": [ "class ClassicalOptimizer:\n", " def __init__(self, instance, n, K):\n", "\n", " self.instance = instance\n", " self.n = n # number of nodes\n", " self.K = K # number of vehicles\n", "\n", " def compute_allowed_combinations(self):\n", " f = math.factorial\n", " return f(self.n) / f(self.K) / f(self.n - self.K)\n", "\n", " def cplex_solution(self):\n", "\n", " # refactoring\n", " instance = self.instance\n", " n = self.n\n", " K = self.K\n", "\n", " my_obj = list(instance.reshape(1, n**2)[0]) + [0.0 for x in range(0, n - 1)]\n", " my_ub = [1 for x in range(0, n**2 + n - 1)]\n", " my_lb = [0 for x in range(0, n**2)] + [0.1 for x in range(0, n - 1)]\n", " my_ctype = \"\".join([\"I\" for x in range(0, n**2)]) + \"\".join(\n", " [\"C\" for x in range(0, n - 1)]\n", " )\n", "\n", " my_rhs = (\n", " 2 * ([K] + [1 for x in range(0, n - 1)])\n", " + [1 - 0.1 for x in range(0, (n - 1) ** 2 - (n - 1))]\n", " + [0 for x in range(0, n)]\n", " )\n", " my_sense = (\n", " \"\".join([\"E\" for x in range(0, 2 * n)])\n", " + \"\".join([\"L\" for x in range(0, (n - 1) ** 2 - (n - 1))])\n", " + \"\".join([\"E\" for x in range(0, n)])\n", " )\n", "\n", " try:\n", " my_prob = cplex.Cplex()\n", " self.populatebyrow(my_prob, my_obj, my_ub, my_lb, my_ctype, my_sense, my_rhs)\n", "\n", " my_prob.solve()\n", "\n", " except CplexError as exc:\n", " print(exc)\n", " return\n", "\n", " x = my_prob.solution.get_values()\n", " x = np.array(x)\n", " cost = my_prob.solution.get_objective_value()\n", "\n", " return x, cost\n", "\n", " def populatebyrow(self, prob, my_obj, my_ub, my_lb, my_ctype, my_sense, my_rhs):\n", "\n", " n = self.n\n", "\n", " prob.objective.set_sense(prob.objective.sense.minimize)\n", " prob.variables.add(obj=my_obj, lb=my_lb, ub=my_ub, types=my_ctype)\n", "\n", " prob.set_log_stream(None)\n", " prob.set_error_stream(None)\n", " prob.set_warning_stream(None)\n", " prob.set_results_stream(None)\n", "\n", " rows = []\n", " for ii in range(0, n):\n", " col = [x for x in range(0 + n * ii, n + n * ii)]\n", " coef = [1 for x in range(0, n)]\n", " rows.append([col, coef])\n", "\n", " for ii in range(0, n):\n", " col = [x for x in range(0 + ii, n**2, n)]\n", " coef = [1 for x in range(0, n)]\n", "\n", " rows.append([col, coef])\n", "\n", " # Sub-tour elimination constraints:\n", " for ii in range(0, n):\n", " for jj in range(0, n):\n", " if (ii != jj) and (ii * jj > 0):\n", "\n", " col = [ii + (jj * n), n**2 + ii - 1, n**2 + jj - 1]\n", " coef = [1, 1, -1]\n", "\n", " rows.append([col, coef])\n", "\n", " for ii in range(0, n):\n", " col = [(ii) * (n + 1)]\n", " coef = [1]\n", " rows.append([col, coef])\n", "\n", " prob.linear_constraints.add(lin_expr=rows, senses=my_sense, rhs=my_rhs)" ] }, { "cell_type": "code", "execution_count": 9, "id": "44dfc141-92ab-4cc1-9a7d-e27f20bdb571", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Number of feasible solutions = 3.0\n" ] } ], "source": [ "# Instantiate the classical optimizer class\n", "classical_optimizer = ClassicalOptimizer(instance, n, K)\n", "\n", "# Print number of feasible solutions\n", "print(\"Number of feasible solutions = \" + str(classical_optimizer.compute_allowed_combinations()))" ] }, { "cell_type": "code", "execution_count": 10, "id": "5da141c3-2c9a-4c07-b11a-673ecdb46007", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[np.float64(1.0), np.float64(1.0), np.float64(1.0), np.float64(0.0), np.float64(1.0), np.float64(0.0)]\n" ] } ], "source": [ "# Solve the problem in a classical fashion via CPLEX\n", "x = None\n", "z = None\n", "try:\n", " x, classical_cost = classical_optimizer.cplex_solution()\n", " # Put the solution in the z variable\n", " z = [x[ii] for ii in range(n**2) if ii // n != ii % n]\n", " # Print the solution\n", " print(z)\n", "except:\n", " print(\"CPLEX may be missing.\")" ] }, { "cell_type": "code", "execution_count": 11, "id": "16f9b089-29e2-48ca-a892-ceb47afbf848", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAisAAAGzCAYAAADuc1ebAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvZiW1igAAAAlwSFlzAAAPYQAAD2EBqD+naQAAVopJREFUeJzt3Qd4k9UeBvC3ewAtLR1sCgVkD1kCKihLQAQERREFlSGCiiIIXhQQEUFEZYigyJApIqBctmzZBWTI3rsU6KClO/f5n5LcQtNJ0u9L8v6eJ+Y0/ZKcHEPy9nxnOBkMBgOIiIiIdMpZ6woQERERZYVhhYiIiHSNYYWIiIh0jWGFiIiIdI1hhYiIiHSNYYWIiIh0jWGFiIiIdI1hhYiIiHSNYYWIiIh0jWGFKBdCQkLQo0cPzZ5fnlvqYC1NmzZVFyIiPWFYIQJw+vRp9OnTB+XKlYOnpyd8fHzQuHFjfPfdd7h7967W1XN4X3zxBZYtW6bJcy9atAjdunVDhQoV4OTklGmYO3LkCF544QX1HvL29kZAQACefPJJ/Pnnn/cdl5qailmzZuG5555DqVKlUKBAAVSrVg2ff/454uPjc1SntWvX4s0331T3c3FxyTLAjh49Wj1XcHCwqv+IESNy2QJE2nPVugJEWvvvf/+rvmQ8PDzw2muvqS+AxMREbNu2DYMGDVJfQtOnT4ce/Pjjj+rLzhHDSufOndGhQ4d8f+6pU6ciLCwM9erVw82bNzM97vz584iJiUH37t1RvHhxxMXFYcmSJSooTJs2Db1791bHye2vv/46HnvsMbz11lsICgrCjh07MHz4cPz111/YsGGDChVZmT9/vgpRjz76qHqurAwbNgxFixZF7dq1sWbNmjy2ApG2GFbIoZ09exYvvfQSypQpo74kihUrZvpdv379cOrUKRVm9MLNzU3rKjicX375BSVKlICzs7MKsplp06aNuqTXv39/1KlTBxMmTDCFFXd3d/z9999o1KiR6bhevXqp3hFjYGnevHm24U2Cq7wfnn32WRw+fDjL97g8dkREBAIDA3Pxyon0g6eByKGNGzcOd+7cwYwZM+4LKkbly5fHe++9l+n9b926hQ8//BDVq1dHwYIF1emj1q1b459//slw7KRJk1C1alV1isDPzw9169ZVfyEbyV/lAwYMUF8s0ssjf3G3aNEC+/bty3LMivS0yOkqqYOcwpIvpGeeeQZ79+41HTNz5kw8/fTT6jHlsatUqaJ6DB7G3LlzUb9+fdPrkVMecnoive+//169ZnlO6QGQABgZGXnfMSdPnkSnTp3UX/9S/5IlS6oAGRUVpX4vvQyxsbGYPXu2KsslP8cNyakaCSp5Iado5P7pX7OElfRBxahjx47q+ujRo9k+rrRlToOrNcc4EeUX9qyQQ5PxBDLGwNyXR06cOXNGjaWQ00hly5bF9evXVZd/kyZN8O+//5q66OWv4HfffVedypDwI2MTDh48iF27dqFr167qGDkl8Ntvv6m/xiVMyCkHORUlX17S3Z8ZGbsgYyAkJPXs2RPJycnYunUrdu7cqQKRkGAioUFOSbi6uqrX/fbbb6ugIwEit0aOHKnGPki7ffbZZ+oLWF6L9E61bNlSHSO/l+Okl6Bv3744fvy4qseePXtUz4J82crptlatWiEhIQHvvPOOCiyXL1/GihUr1Be8r6+v6tmQ1yXByNg7ERoammX9pBchJwoVKqSClCVJsJJxThK2/vjjD6xatQpdunTJ9n7Xrl1T1zLWhYgeYCByUFFRUQb5J9C+ffsc36dMmTKG7t27m36Oj483pKSk3HfM2bNnDR4eHobPPvvMdJs8R9WqVbN8bF9fX0O/fv2yPEaeW+pgtGHDBvUa3n333QzHpqammspxcXEZft+qVStDuXLl7rutSZMm6pKVkydPGpydnQ0dO3bM8NqNzxkeHm5wd3c3tGzZ8r5jJk+erOr7888/q5/379+vfl68eHGWz1mgQIH72j078pg5ucycOdOQG/L/MLv26dOnj+nxpZ06d+5suHXrVraP3bx5c4OPj4/h9u3buapT27Zt73tPZObGjRuqTsOHD8/V4xPpAXtWyGFFR0eb/rrOq/R/laekpKjeADkd9Mgjj9x3+qZw4cK4dOmS6lWQgZrmyDHSO3HlypVsB00ayQBOOS0iYx0elH6QppeXl6ksf/EnJSWp3h8ZcCk/Sw9GTklPkvTIfPrppxlOjxifc/369arXRE5rpT9GxmZ8/PHHahyQDDI1Pq/UQ8Z7yCklS1i3bl2OjpPeJkuT1yw9aPL/8ddff1XvC2mL7MagSJvJaTN5HxDR/RhWyGHJ+BLjWJG8Mo4XkS8ZGcgoX0xGRYoUMZU/+ugj9WUkpzJkHIycKpHTPzI9Ov34GZlJImMcZFCmfHnL7CQ5TZXVlGsJNv7+/lnWU067SKCRWScyGyW93IYVeU4JIHKqKquZMUJCW3pyukhej/H3cursgw8+UANQ582bhyeeeEKdqpKpwrmp04OyG6BqTZUqVVIXIf//5P91u3btVBA1N8tHZvXIjB05nSeny4goIw6wJYcOK/JFn9VMiuzIX8TyZSuDS2XAqfQQyF/18hd7+inGlStXVmM2Fi5ciMcff1z1iMh1+h6RF198UY2BkYG4Uq+vvvpKPY6MeXgYEi6aNWumxnFIKJBeDanj+++/r36v9VTor7/+Wo3fkR4XGeshY3vkdUtPVF7J+I+cXPJjDR3pZZEetRMnTmT4nfx/kEDTtm1b/PDDD1avC5GtYlghhybTPuXLXHoc8kIGxD711FNqNpHMYJG/ouWv+gdnvAhZ/EsGWsrMnAsXLqgvKFmwK/1CYDIjSQa+yqkW6amR3hk5JjMy0FRON8ispMzIYFoZwCqDPWXhO+mxkTqmPzWUG/KcEnBkAHFmZCq4kICWnpwOkddl/L2RzGSS3oUtW7aowcEyyDb9l3d26448SNoxJxfp1bA2YyAyzm4ykp4WmQEkg6DldJEMfCYi8xhWyKENHjxYhQiZbSIzeR4kQUZO82Q1NTVtPOf/LV68WH3ZpvfgYmJyOkROo8h9ZfyInD568MtMphlLD4sEjczIlF95DJl18yBjvaSO6X8W8lwSmvJCFmaT00AyC+jBXhnjc0gYktc4ceLE+55XQp08twQ147ghmb30YHCRx0//uuX/kbkAmBnpscjJRWYiWUp4eHiG2+T/7Zw5c1QwTH/aTGZ4SRvItGKZ+ZRVcDx27JgKt0SOjFGeHJr0EshaJ9LjIadq0q9gu337dhU8slrTQ3pm5EtbBovKNN5Dhw6psRcPjjORHheZlitjVGTZc/mymjx5svrCkgG+8kUs64vIKYOaNWuqQboyxkVOH8hpksxIr86rr76qQoGsVyLrq0iAkN4J+Z1Mg5bnluAg4yakZ0XWlZGp1BKGrl69mus2kzE3//nPfzBq1Cg1xuT5559XA42lrhKuxowZo9Z6GTp0qApRUicZhyK9LDK2RwYYy5gUIVOdpY4y9btixYoquMhUZQlYEsSMZAyPtIecxpLnkLEuDRo0yJcxK9LbIxdx48YNNTVZlsYXcvpPLkLaVsKX/CyLyMlpJnkvSNiQ/4fy/9Q4RkpC0u3bt9UKyQ8uOijvyYYNG5p+lvelDIbetGmT6TY5bSY9ZUIWLpQAaKyTvH/k/7WRtKeMETKOVZLXYjxW3jsP9nIR6ZLW05GI9ODEiROGXr16GUJCQtSU20KFChkaN25smDRpkpqenNXU5YEDBxqKFStm8PLyUvfZsWNHhinA06ZNMzz55JOGIkWKqGnNoaGhhkGDBqnp0yIhIUH9XLNmTfXcMlVXyt9//32WU5dFcnKy4auvvjJUqlRJ1T0wMNDQunVrQ1hYmOmYP/74w1CjRg2Dp6eneo1jx45V04flI0CmWudm6rKR3L927drq9fj5+an7rVu37r5jZKqy1MvNzc0QHBxs6Nu3731Tc8+cOWN44403VHtI3fz9/Q1PPfWUYf369fc9zrFjx1T7SRtLnXMzjflhyVTfzKY+p58GvGDBAjX9WF6nq6urahP5efny5fc9nrR3VtOpH3xtctuD/09kynVO7y/3zezYjRs3WqXNiCzNSf6jdWAiIiIiygzHrBAREZGuMawQERGRrjGsEBERka4xrBAREZGuMawQERGRrjGsEBERka7pelE4WdxKlhKXRbNyu9w2ERERaUNWRZEFEGURxwd3Z7e7sCJBRXagJSIiIttz8eJFtTq3XYcV6VExvljZIVfPZA+QtWvXqqXN3dzctK6ObrBdzGO7ZMQ2MY/tYh7bRb/t4nzyJJJWrsTyTz9FMdl/SzY0TUkBRo0Chg2zv7BiPPUjQcUWwoq3t7eqJ//h/B/bxTy2S0ZsE/PYLuaxXXTcLr/8Anz3HdSualnszp4bHGBLREREllOtGhLeeQddAdzZs0d2zHzoh2RYISIiIsvp2RMJn3+OBTJRpmJFwAIDbBlWiIiIHExqqm3tYazrMStERET08A5fjsLivRex+9wtnAq/g6QUA9xcnFA+qCDqh/jjhbqlUK2EL/SKYYWIiMhOnYuIxeAlB7H77C24ODshJV2PigSWo1djcOL6HczecR71y/pjXKcaCAkoAL3haSAiIiI7tPzAZbT8ZgvCzt9WP6cPKukZb5fj5Hi5n96wZ4WIiMjOrDx0FQN+PYTcjEyR0JICAwYsPKB+bl+rBPSCPStERER2ZtjSw7kKKunJ/QYtPqhOIekFwwoREZGdSclzVLl3f4NBjXVxiLAydepU1KhRw7QCbcOGDbFq1SprPiUREZHD+vdKdJbjU3JK7i+DcmUWkd2HFdm86Msvv0RYWBj27t2Lp59+Gu3bt8eRI0es+bREREQOaZkFB8fK7CGZ7mz3YaVdu3Zo06YNKlSogIoVK2L06NEoWLAgdu7cac2nJSIickhh92b+WIL0ruw5Z7nHs4nZQCkpKVi8eDFiY2PV6SBzEhIS1MUoOjratDGTXPTMWD+91zO/sV3MY7tkxDYxj+1iHtvFvMs3Y4AygIez+dNAhtRUJEVchHtQGeTEhYjo3Lfx/v3wevtt7ADg3awZcO5c2u3TpgErVvz/uKVLgWLFcvSQTgaDwapr7h46dEiFk/j4eNWrMn/+fNXbYs6IESMwcuTIDLfLfWQXSSIiItK3IocO4fFPPsn+wLNngZAQfYSVxMREXLhwAVFRUfjtt9/w008/YfPmzahSpUqOelZKlSqFiIgINUBXzyR5rlu3Di1atOB25emwXcxju2TENjGP7WIe28W8xz5fg08fTcEne52RkOoEpKYg9tjfiNmzDEm3LpmOK9z0DRSq/Qyy4+bshP2ftkRuyfd3QECA+u63xPe31U8Dubu7o3z58qpcp04d7NmzB9999x2mSXfQAzw8PNTlQfJGtJU3oy3VNT+xXcxju2TENjGP7WIe2+V+JYoUAhCJhMRkRBxYj+hdS5AcdR1uwaFIuntXHeMaUBoxV07DvYYTshMa5JOn9rX0/5N8X2clNTX1vt4TIiIisowaQWl/8F+Z2R+31k6Fe7GKCHjuIyRdP61uL9F3JjyCQ5F442yOZgPVC/GDHli1Z2Xo0KFo3bo1SpcujZiYGDX2ZNOmTVizZo01n5aIiMih3L59G5MmTcL076ei3rQf4FmmJnw6DIezVyFcmthVHRPc9Uu4+gTCLTAEcSd2wGBIhZOTc5azgWQ3ZrsPK+Hh4Xjttddw9epV+Pr6qgXiJKjIOUYiIiJ6ONevX8eECRMwecoUderHv07aBBb/lm8jPikVF75qn/Zzi7fgWaqaKrsHhsCQFI/kqHC4FS6aaa9KnTJ+qFbCF3YfVmbMmGHNhyciInJI58+fx7hx4/DTjJ+R6uQM75pt4F+vPbx9CqvF9mEwmIKKd+UmKPTos6b7ugWVVddJ4WczDytOThjXqQb0grsuExER2Yjjx49jzJgvMXfeXDi7e8O7XicUqtMOLp4F7x2RNsE3fMln6trZyweBzw267zFcCvip2xNvnIN3xYzrnsmw269eqIGQgALQC4YVIiIinTtw4AA+Hz0avy9ZArdC/vB5ojsK1noGzu5eZo9PuJi2rU3Jd+Zm+J2TkxPcg0JUz8qDp36kR0WCSvtaJaAnDCtEREQ6tX37doz6/HOsXrUKHn7F4NfybRSs1hxOruanBt89sxeoX1uVS72/ONMBtG4BIWnH3gspMpi2bhk/jO2krx4VI4YVIiIiHZG1WtevX4/PRn2ObVu3wDOwDIo8OxAFKj8JJ2eXTO+XdPMibi8fB7y0AMXemIyUTHpdhPSsxIT9iYr+bmj4SHE160cvg2nNYVghIiLSAVmH7I8//sCoz0djX9heeBWviMCO/4FXhQZZTjFW902IxZWf+sLLKy2guPoGISUl8+PdAmWQrQGfNy2M+vXTZgnpWb4vCkdERET/l5ycjHnz5qFKtero2LEjjkUkIOjFUQjs9rUaAOuUTVAxpKbg4rddVNn3iVdy9JxuAaXU4x48eBC2gD0rREREGpDV3GfPno3RY77EhXNn4R1aD8GvjINnyYx752XlwoTO6tortB586sp05Sy6VO5xdvOEZ0AJtdmwLWBYISIiymf79+9H6zZtcf3aVTh5eKNw0x7wCnkUzt6+MKQkw8klZ1/P4UtGASlJgLMLgjoPN01dzgkn/zLYf+Af2AKGFSIionzm6ekJD08veBcoiLjYO4jcNAuRmGX6vZt3IbgWKAwnL1/A0wfOBQrDxdsXLt6FTeW449tx99QudXzpgb/nug5uQSE4ePC/akCvTGfWM4YVIiKifFa5cmWcP5u2ueDdu3fV9jSZXa5dv44rVy/ixsl9uHUrAinJyfc/mLMzrk9/UwUYT99AoP4Q3N48B0muBeByL9g4exeGSwFfOHv5wtktbbND98CyuBF5G1euXEGJEvpaV+VBDCtEREQakhk8ZcqUUZeczBhasWIF2rdPW0p/5MiRCAgIMAUb2dBQBEQexeVLlxAZFZnhMVw9veFWoDAMLu7qZxm3wrBCREREFhEREWEKKh9//DE+/fTT+36flJSElStX4p/9++Dm5obExER1H9nw0FyvTWqqAU888QT0jmGFiIjIRqY4BwcHq7IEjNGjR2d7H3d3dxQvXlxdbBnXWSEiIrIBHh5pY018fHywZcsWOBKGFSIiIp0rW7asGq8ijONSHAnDChERkY69/PLLOHfunCrHxsbC2dnxvrod7xUTERHZiO+//x4LFy5U5ePHj8Pb2xuOiGGFiIhIh/bs2YN+/fqp8qJFi1CxYkU4KoYVIiIinYmMjET9+vVV+Z133sGLL74IR8awQkREpCMykNbPz0+VH330UUycOBGOjmGFiIhIZ/sGGa/DwsK0ro4uMKwQERHpRNWqVdUqtMaZP5SGYYWIiEgHevfujX///VeVo6KiHHKKcmbYEkRERBqbM2cOfvzxR1X+559/1Cq19H8MK0RERBo6fPgwunfvrsozZsxAjRo1tK6S7jCsEBERaeTOnTuoXr26Kvfo0QNvvPGG1lXSJYYVIiIijaYoFypUSJUfeeQRzJw5U+sq6RbDChERkQaMQcXFxQXHjh3Tujq6xrBCRESUz2R12ri4OFVOTEzUujq6x7BCRESUjz744AO174+4efMmpyjnAFuIiIgonyxZsgTffPONKu/cuRP+/v5aV8kmMKwQERHlg9OnT6Nz586qLPv9NGjQQOsq2QyGFSIiIiuLj49H+fLlVVkCi+ykTDnHsEJERGTlKcpeXl6qXKpUKSxevFjrKtkcq4aVMWPGoF69emp6VlBQEDp06IDjx49b8ymJiIh0JSAgQF07OTnhwoULWlfHJlk1rGzevBn9+vVTg4jWrVundpJs2bIld5IkIiKH8PTTT+P27duqzCnKeecKK1q9evV9P8+aNUv1sISFheHJJ5/McHxCQoK6GEVHR6trCTnGLbP1ylg/vdczv7FdzGO7ZMQ2MY/tYrvt8sUXX6g/1uUU0IkTJ2AwGKxe3ySdtIuln9/JIK2XT06dOoUKFSrg0KFDqFatWobfjxgxAiNHjsxw+/z58+Ht7Z1PtSQiIqKHIQvede3aFVFRURbZQTrfwooMMHruuecQGRmJbdu2mT3GXM+KDEaKiIjQ/XbZkiLlVFeLFi3g5uamdXV0g+1iHtslI7aJeWwX22uXK1euoHLlyqr8ySef4MMPP3S4domOjlZjdSwVVqx6Gig9Gbsi22BnFlSEh4eHujxIGlxvb8bM2FJd8xPbxTy2S0ZsE/PYLrbRLjIuJSQkRJVbtWqFoUOHOmS7uFn4ufMlrPTv3x8rVqzAli1bULJkyfx4SiIionxn/IM7MDAww7hN0mlYkTNMsvDN0qVLsWnTJpQtW9aaT0dERKSZ4sWLm8rh4eGa1sXeuFr71I8Mjl2+fLlaa+XatWvqdl9fX9MCOURERLauXbt2uHr1qiqnH3tJNrDOytSpU9XgmqZNm6JYsWKmy6JFi6z5tERERPnmq6++UkMdxLlz5+Du7q51leyO1U8DERER2autW7di8ODBqvznn3+iTJkyWlfJLnFvICIiojyQcSnGBU6HDBmCZ599Vusq2S2GFSIiolxKTk5GcHCwKjdu3FjthUfWw7BCRESUxynKsuBZVuuHkWUwrBAREeVCaGioWpVdGDcpJOtiWCEiIsoh2e/mzJkzqhwbGwtnZ36N5ge2MhERUQ6X41iwYIEqHzt2jBvs5iOGFSIiomzs3bsXb7/9tiovXLgQjzzyiNZVcigMK0RERFmIjIxEvXr1THvddenSResqORyGFSIiokzIQFo/Pz9Vrl27NiZNmqR1lRwSwwoREVEmPD09Tdf79u3TujoOi2GFiIjIjOrVqyMpKck084e0w7BCRET0gD59+uDw4cOqLBvycoqyttj6RERE6cydOxfTp09X5f3796tVaklbDCtERET3HDlyBK+++qoq//jjj6hVq5bWVSKGFSIiojR37txBtWrVVLl79+7o2bOn1lWiexhWiIjI4ckU5UKFCqlyxYoVMWvWLK2rROkwrBARkcMzjktxcXHB8ePHta4OPYBhhYiIHNpjjz1mmpqckJCgdXXIDIYVIiJyWAMHDsSuXbtU+caNG6pnhfSHYYWIiBzS0qVLMWHCBFXevn07AgICtK4SZYJhhYiIHM6ZM2fw/PPPq/I333yDhg0bal0lygLDChEROZT4+HiEhoaqsgSWAQMGaF0lygbDChEROdQUZS8vL1UuWbIklixZonWVKAcYVoiIyGEEBgaayhcvXtS0LpRzDCtEROQQmjVrhlu3bqmycTdlsg0MK0REZPdGjBiBDRs2qPLly5fh6uqqdZUoFxhWiIjIrq1duxYjR45U5fXr16N48eJaV4lyiWGFiIjslvSitGrVSpVHjRqlTgWR7WFYISIiu5SYmKhm/IiWLVti2LBhWleJ8ohhhYiI7JKHh4e6lpVp16xZo3V16CEwrBARkd0pUaKEqSx7/pBtY1ghIiK70qFDB1y5ckWV7969q3V1yAIYVoiIyG58/fXXWL58uSqfPXsWnp6eWleJ9B5WtmzZgnbt2qlpYk5OTli2bJk1n46IiBzYtm3b8OGHH6qyBJaQkBCtq0S2EFZiY2NRs2ZNTJkyxZpPQ0REDi4iIgJPPPGEKg8ePBjPPfec1lUiC7LqEn6tW7dWFyIiImtJTk427fnTqFEjjB07VusqkYXpar3hhIQEdTGKjo427eGg930cjPXTez3zG9vFPLZLRmwT89gu2bdLUFCQ2km5YMGC2LRpk0O3VZJO3i+Wfn4ng8FgsOgjZvZETk5YunSpGqWd1d4NxiWR05s/fz68vb2tXEMiIiKyhLi4OHTt2hVRUVHw8fGxr7BirmelVKlS6lykJV6stVPkunXr0KJFC7i5uWldHd1gu5jHdsmIbWIe2yXrdnnjjTfU9ORr166p3hVHl6ST94t8f8tifJYKK656W23QuOJgetLgtvKP1Jbqmp/YLuaxXTJim5jHdrnfzJkzERwcrILKvn37dP8HraO9X9ws/NxcZ4WIiGyKhJMBAwao8owZM1CpUiWtq0RWZtWelTt37uDUqVOmn2WBngMHDsDf3x+lS5e25lMTEZEdioyMRJ06dUynfDp37qx1lcjWw8revXvx1FNPmX7+4IMP1HX37t0xa9Ysaz41ERHZmdTUVPj5+alyjRo1tK4O2UtYadq0KfJp/C4REdk5Y2+KjG3cunUrVq5cqXWVKJ9wzAoREeme9KQkJiaapsWSY2FYISIiXevbty8OHTqkyjIV1tmZX12Ohv/HiYhIt+bNm4cffvhBlffv388pyg6KYYWIiHTp6NGj6NatmypPmzYNtWrV0rpKpBGGFSIi0p3Y2FhUqVJFlV977TX07t1b6yqRhhhWiIhId1OUZVNCUaFCBcyePVvrKpHGGFaIiEhXfH191bWLiwtOnDihdXVIBxhWiIhINxo1aqRWPxfx8fFaV4d0gmGFiIh0YdCgQdixY4cq37hxA66uutprlzTEsEJERJpbvnw5xo8fr8rbtm1DQECA1lUiHWFYISIiTckmtx06dFDlCRMmoHHjxlpXiXSGYYWIiDQj41LKlSunyhJY3n//fa2rRDrEsEJERJpvTliiRAksXbpU6+qQTjGsEBGRJtKPS7l06ZKmdSF9Y1ghIqJ816JFC9y8eVOVExIStK4O6RzDChER5avPPvsM69evV+XLly/D3d1d6yqRzjGsEBFRvlm3bh2GDx9uKhcvXlzrKpENYFghIqJ8ceXKFbRs2VKVR44ciebNm2tdJbIRDCtERGR1iYmJasaPkJDy6aefal0lsiEMK0REZHUeHh7qukiRIur0D1FuMKwQEZFVlSxZ0lSOiIjQtC5kmxhWiIjIajp27Khm/Ii7d+9qXR2yUQwrRERkFbLPz7Jly1T5zJkz8PT01LpKZKMYVoiIyOL+/vtvDBw4UJUlsJQtW1brKpENY1ghIiKLknEpjz/+uCoPGjQI7du317pKZOMYVoiIyGKSk5MRGBioyg0bNsS4ceO0rhLZAYYVIiKyGOO4lIIFC2L79u1aV4fsBMMKERFZRMWKFZGSkqLKUVFRWleH7AjDChERPbTXXnsNJ0+eVOXY2Fg4O/PrhSyH7yYiInoo06dPxy+//KLK//77L7y9vbWuEtkZhhUiIsqzffv2oU+fPqo8d+5cVK5cWesqkR1iWCEiojyJjo5GnTp1VPmtt97CK6+8onWVyE4xrBARUa6lpqbC19dXlWvUqIGpU6dqXSWyY/kSVqZMmYKQkBA1pa1BgwbYvXt3fjwtERFZiXFciru7O/755x+tq0N2zuphZdGiRfjggw8wfPhwdW6zZs2aaNWqFcLDw6391EREZAW1atVCQkKCKnNzQrKLsCIbWfXq1Quvv/46qlSpgh9++EEl8p9//tnaT01ERBbWr18/U09KZGQkpyhTvnC15oMnJiYiLCwMQ4cONd0mb+zmzZtjx44dGY6XpG5M68bBWyIpKUld9MxYP73XM7+xXcxju2TENtF/u/z222+YOXMmvLy8sGXLFvWHp1b10lO76EmSTtrF0s/vZDAYDLCSK1euoESJEmrJZdkjwmjw4MHYvHkzdu3add/xI0aMwMiRIzM8zvz58zlvn4iIyEbExcWha9euaiVjHx8fffes5Jb0wMj4lvQ9K6VKlULLli0t8mKtnSLXrVuHFi1awM3NTevq6AbbxTy2S0ZsE/22i4xLKVq0qCp36dJFLQKnNT20ix4l6aRdjGdGLMWqYSUgIAAuLi64fv36fbfLz8Y3fnoeHh7q8iBpcFt5M9pSXfMT28U8tktGbBN9tUv6KcqhoaHqNJCe8P2iz3ax9HNbdWSUTGmTBYP++uuv+9748nP600JERKRPxqAi4w1PnTqldXXIQVn9NJCc1unevTvq1q2L+vXr49tvv1WbXMnsICIi0q/GjRvjzp07qpx+8gOR3YUVOb9548YNfPrpp7h27Zqan7969WoEBwdb+6mJiCiPPvroIzU5QshnuKurroY4koPJl3df//791YWIiPTvjz/+wLhx41R569atavwhkZa4mg8REZmcO3cO7du3V+Xx48fj8ccf17pKRAwrRESUJj4+HmXLllVlCSwDBw7UukpECsMKEREpsjKtKF68OJYtW6Z1dYhMGFaIiAiBgYGm8uXLlzWtC9GDGFaIiBycrBIeERGhypyiTHrEsEJE5MA+//xztTy7uHjxolrMk0hvGFaIiByUrCb+ySefqLKsf1WyZEmtq0RkFsMKEZEDunLlCpo3b67Kw4cPR6tWrbSuElGmGFaIiBxMcnIySpQoocrNmjXDiBEjtK4SUZYYVoiIHIxxR1x/f3+sX79e6+oQZYthhYjIgZQqVcpUlj1/iGwBwwoRkYPo1KkTLl26pMp3796FszO/Asg28J1KROQAvvvuO/z++++qfPr0aXh6empdJaIcY1ghIrJzO3bswIABA1RZAku5cuW0rhJRrjCsEBHZMVmZtlGjRqosGxN27NhR6yoR5RrDChGRHU9RNu7506BBA4wfP17rKhHlCcMKEZGdMo5LKVCgAHbu3Kl1dYjyjGGFiMgOVaxYESkpKaocHR2tdXWIHgrDChGRnenevTtOnjypyjExMZyiTDaP72AiIjsyY8YMzJkzR5UPHz6MggULal0loofGsEJEZCcOHDiAnj17qvIvv/yCqlWral0lIotgWCEisgMyLqV27dqq3Lt3b3Tr1k3rKhFZDMMKEZGNS01Nha+vrypXr14d06ZN07pKRBbFsEJEZONkarJwc3fHwYMHta4OkcUxrBAR2TA59RMfH6/K8Xfval0dIqtgWCEislHvvPOOGlQrbt++zSnKZLf4ziYiskGLFi3C5MmTVXnPnj0oXLiw1lUishqGFSIiG3P8+HG89NJLqjx16lTUrVtX6yoRWRXDChGRDYmLi0OlSpVUuWvXrnjrrbe0rhKR1TGsEBHZ0BRl48yfcuXKYd68eVpXiShfMKwQEdkI47gUGUh7+vRpratDlG8YVoiIbMAzzzyjNiUUCQkJWleHKF8xrBAR2YAdO3ao6+vXr8PV1VXr6hDlK4YVIiIdW716tam8detWBAUFaVofIrsKK6NHj0ajRo3g7e3N+f9ERHlw/vx5dOnSRZU///xzPP7441pXici+wkpiYiJeeOEF9O3b11pPQURkt2QJ/ZCQkPtWqyVyVFY78Tly5Eh1PWvWLGs9BRGR3fLy8lLXRYsW1boqRJrT1SgtGeGefpR7dHS0uk5KSlIXPTPWT+/1zG9sF/PYLhmxTf4vNDTUFFYOHz6MdevWsV0ewPeLvtvF0s/vZDAYDLAi6VkZMGAAIiMjsz12xIgRph6Z9ObPn6/GvhAREZFtrLQsKyxHRUXBx8cnf3tWhgwZgrFjx2Z5zNGjR01LQefW0KFD8cEHH9zXs1KqVCm0bNnSIi/W2ilS/vpp0aIF3NzctK6ObrBdzGO7ZMQ2AcaPH49Ro0aZPkuLFy/OdskE20Xf7WI8M2IpuQorAwcORI8ePbI8RpaAzisPDw91eZA0uK28GW2prvmJ7WIe2yUjR22TDRs24OOPP1blVatWoUyZMvf93lHbJTtsF322i6WfO1dhJTAwUF2IiMhyrl27hmbNmqnyp59+qlarJaJ8GGB74cIF3Lp1S12npKTgwIED6vby5cujYMGC1npaIiKbkpycjGLFiqnyU089ZXbcHpGjs1pYkb8OZs+ebfq5du3a6nrjxo1o2rSptZ6WiMimuLu7q2s/Pz91KoiI8nFROJkFJBONHrwwqBARpSldurT6XBQRERFaV4dIt7g3EBGRBjp37oyLFy+q8t27d+HszI9joszwXwcRUT6bNGkSlixZosqnTp2Cp6en1lUi0jWGFSKifLRjxw68++67qvzbb7+p1WqJKGsMK0RE+URmSMpu9OL9999Hp06dtK4SkU1gWCEiygepqakoUqSIKterVw8TJkzQukpENoNhhYgoH7jfW51b9jnbvXu31tUhsikMK0REVib7paUkJ6tyTEyM1tUhsjkMK0REVvT666/j+PHjpqDCKcpEucd/NUREVjJjxgy1QKY4dOgQtxohyiOGFSIiKzh48CB69uypyrL1SLVq1bSuEpHNYlghIrKw6Oho1KxZU5V79eqF1157TesqEdk0hhUiIgtPUfb19VXlqlWrYvr06VpXicjmMawQEVlQgQIF1LWbmxsOHz6sdXWI7ALDChGRhdSpUwfx8fGqbLwmoofHsEJEZAGy38++fftU+fbt25yiTGRB/NdERPSQFi1apHZSFnv27EHhwoW1rhKRXWFYISJ6CCdPnsRLL72kylOmTEHdunW1rhKR3WFYISLKo7i4OFSsWFGVJbC8/fbbWleJyC4xrBAR5XGKsnHmT9myZbFgwQKtq0RktxhWiIjywM/PT107OTnhzJkzWleHyK4xrBAR5dKTTz6pVqkViYmJWleHyO4xrBAR5cLHH3+MrVu3qvL169fh6uqqdZWI7B7DChFRDq1YsQJjxoxR5c2bNyMoKEjrKhE5BIYVIqIcOH/+PNq1a6fKY8eOVaeCiCh/MKwQEWVDxqWEhISoctu2bTF48GCtq0TkUBhWiIiy4eHhoa6LFi2qTgURUf5iWCEiykJwcLCpfPXqVU3rQuSoGFaIiDLRunVrhIeHq3JCQoLW1SFyWAwrRERmyKyf1atXq/KFCxfg7u6udZWIHBbDChHRAzZt2qTWUxErV65EqVKltK4SkUNjWCEiSufatWt46qmnVHnYsGHqVBARaYthhYjonuTkZBQrVkyVmzRpglGjRmldJSJiWCEi+j/juJTChQurU0FEZOdh5dy5c3jzzTfV1uleXl4IDQ3F8OHDuekXEemSLPpmMBhU+ebNm1pXh4jSsdoOXMeOHUNqaiqmTZuG8uXL4/Dhw+jVqxdiY2Mxfvx4az0tEVGuvfjii2o5fXH37l04O7PTmcghwsozzzyjLkblypXD8ePHMXXqVIYVItKNyZMnY/Hixap88uRJeHp6al0lInpAvu5tHhUVBX9//0x/L4supV94KTo6Wl0nJSWpi54Z66f3euY3tot5bBd9tMnevXvVPj9yqnrOnDkoU6aM7v6f8L1iHttF3+1i6ed3MhhP0lrZqVOnUKdOHdWrIqeDzBkxYgRGjhyZ4fb58+fD29s7H2pJREREDysuLg5du3ZVnRQ+Pj75H1aGDBmitkfPytGjR1GpUiXTz5cvX1bTAJs2bYqffvopVz0rshhTRESERV6stVPkunXr0KJFC7i5uWldHd1gu5jHdtG2TWQ8nZ+fnyrXrl1b1zN/+F4xj+2i73aR7++AgACLhZVcnwYaOHAgevTokeUxMj7F6MqVK2qBpUaNGmH69OnZ7mxq3N00PWlwW3kz2lJd8xPbxTy2izZtIo8va6rI6Z+///4btoDvFfPYLvpsF0s/d67DSmBgoLrkhPSoSFCR0z8zZ87kCHsi0lzlypVVUBF37tzRujpEpOUAWwkqctpHBqzJOJUbN26Yfle0aFFrPS0RUabeeOMNtayCiImJ4R9QRI4eVuScmQyqlUvJkiXv+10+jeklIjKR3l25iEOHDqFgwYJaV4mIcshqf1bIuBYJJeYuRET56eDBg6pXRcyaNQvVqlXTukpElAvsAyUiuybjUmrWrKnKsgVI9+7dta4SEeUSwwoR2S2ZolyoUCFVrlKlSpZLJxCRfjGsEJHdMo5LcXV1xZEjR7SuDhHlEcMKEdmlunXrqk0JRfrFJonI9jCsEJHdee+99xAWFqbKt27d4hRlIhvHf8FEZFd+/fVXTJw4UZV3795tWlafiGwXwwoR2Y2TJ0+iS5cuqjxp0iTUq1dP6yoRkQUwrBCR3ezyWrFiRVV+8cUX0b9/f62rREQWwrBCRHYxRblAgQKqLFt8LFq0SOsqEZEFMawQkc3z9/dX105OTjh37pzW1SEiC2NYsYakJOCvv4BBgwA5Z164sOyXLTs4As89B/z3v1rXkMhuNGnSBFFRUaqcmJiodXWIyJY2MnRomzcDLVqklSWgPP44IF3U//4L/Pln2qV3b+CHH+RPQa1rS2Sz/vOf/2DLli2qfPXqVbX4GxHZH/asWIOs6dCpEyAfolevAitWAHIO/dAhYOFCwMUFmD4d+OUXrWtKZLNWrlyJL774QpU3btyIovKHARHZJYYVa3j6aeC334Annsj4O5lW2aNHWnnOnHyvGpE9uHDhAtq2bavKX375JZo2bap1lYjIihw6rKSmGrR54tq1064vXtTm+YlsmIxLkRk/ok2bNvjoo4+0rhIRWZlDneA9fDkKi/dexO5zt3Aq/A6SUgxwc3FC+aCCqB/ijxfqlkK1Er7Wr8jJk2nXxYpZ/7mI7IyHh4e6Dg4Oxn85WJ3IIThEWDkXEYvBSw5i99lbcHF2Qkq6HhUJLEevxuDE9TuYveM86pf1x7hONRASkLZmg8VduwbMmpVWlnEtRJRj6celXJN/S0TkEOz+NNDyA5fR8pstCDt/W/2cPqikZ7xdjpPj5X4Wl5wMdOsGyDTL6tWBPn0s/xxEdkrGqFy/fl2VuYsykWOx654VCRwDFh5AbkamSGhJgUHdT7SvVcJyFXrrrbT1V4oUSRuA6+5uuccmsmMyiFZm/4jz58/Dnf92iByK3fasnI2IxaDFB3MVVNKT+8n95RSSRbz3HjBjBiA7wK5bB9zbw4SIsibrqAwdOlSVZYxK6dKlta4SEeUzuw0rHy05iBTDw832kfvLWJeHNnAgIFvWy0q2a9f+fzYQEWVJTvvICrXi448/VrN/iMjx2GVYOXQpSg2mzWx8Sk7J/eVxZBZRng0eDEyYAPj6pgWVunUfqk5EjiI5Odk0oPbJJ5/E6NGjta4SEWnELsPKb2EX4epsmWXsZfaQTHfOkyFDgK++SgsqcupH9gkiohwxjkvx9fXFZtnCgogcll2GFVlHJdlCC75J78qec2kziXJl2DBg7Ni0Uz8MKkS5UrZsWRjunca9deuW1tUhIo3Z5WwgWfAtO8nRN5B6NwbuweWyPfZkeEzuKvDHH4Cxy7p8eWDKFPPHBQQA48fn7rGJ7Nzrr7+Oc+fOqXJsbCycZa8tInJorva4hL4s9Jadmyu/Q/z5A2rX4wLVm8O7/GPwLF0Nzh4ZF4OTx5PHdc7pqaX0fwnu3Zt2MUeWDGdYIbrP77//rq5PnDgBb29vratDRDpgd2FFAoUsoZ9dYPGu9ERaWDEYEHtwnboATnAvXhGeZWrBK6QmPIpXhpOrm3q8HAcVIRsVGjcrJKIc2bdvn6n866+/okKFCprWh4j0w+7CipC9fmQJ/awUqtUKKXduIurv+eluNSAp/BySbl1B9I5FcHL1gEfJKihdrT7CwoJRq1YtuLi4WL3+RI5GxqU89dRTWLBgAd566y288MILWleJiHTELk8Gy6aEMosnO76NuqheFGfvwgh4Lm3nVkNyAgzxMXDxCYJvwxcAJ2ecWjMbdevWhX+RADz//POYOnWq6qI2DgAkorxLTU1FEVnV+Z6xMjCdiMjew4rsnpyTNVacnF0Q0O5DODk7I2bfCpQetBxBL4xUv0uJDkfk1rlIib2N4n1/RnDXL+FUrTXW7D2Ofu+8g0ceeQTFS5ZCjx49MHfuXNOeJUSUO56envddExE5RFipVsJX7Z6ck94VlwLSqzIYCZePInLrL/AqVwdlPlqBwOeHqd8nhZ/BpYldEblpFnwadEJg13Eo+c4CBHUejtjidfHrmq149dVXUfHe8vmDBg3C8uXLERkZafXXSWTrqlSpgqSkJFW+evWq1tUhIp2yyzErYlynGmr3ZNmUMDuepaqhcJPXVCDxKFkV3qH14F3hMRVaYo9uRcQfY5Fw5RguTugMzzI1ENR5BLxC66mLSImNBK4eUeU5i//Ad999p6Zb1nq0Dlq1aI7mzZujUaNG/MuRKJ2ePXvi6NGjqhwdHc0pykSUKbv9dAgJKICvXqiBnM7h8an/PLzK18fNFV8jOSrcdHuByk+o0FKk7fvq5/jzB3Hh6+cR/ttIGFKSTL0z3o80UuXAHhNRvM9PKNyyH47FeuLrSVPRrFkz+Bb2w1NPN1O7x+7ZswcpKSlWeNVEtmH27NmYIRt7Ajh48CAKFSqkdZWISMfsNqyI9rVK4NuXasHdxTnbU0JOTs4o0uZ9OLt748byL01BxKhgtWYqtPi36q9+vnt6Dy6M74gby76EIfX+4OFWuCgK1WyFwOc+QtG356DY65NQoHE37L4QjWEjPkP9+vXh518E7Tt0wJQpU3Ds2DEO1iWHcfjwYTXWS/z888+oXr261lUiIkcOK88995zazl1OfxQrVkyN7bhy5QryO7Csff9J1Cnjp37OLLTI7S5ehdCk7xdIuXEWtzfONHtcoVrPqNDi16y3+jnu+DZc+Ko9bq2enGkIcg8qC596HRDYeQRKvLMAwa+Mg3P1tli//zTefW8AKleujKLFS6B79+6YM2cOLl++bLHXT6Qnd+7cMYUTWalWLkREmo5ZkXUTZFt3CSryBfzhhx+ic+fO2L59O/L7lNCvfRqq3ZNlU0LZ60eW0JeF42TBtwpBhVAvxE/NIpLBuZNL3sU777yj1lgpUOlxs4/pU/c5FKrTDtG7l6ixLrFHtwDoi9t/TYdXk14qpJjj5OIKz5JV1AXoitTEeCRcOoL4cweweO3fKqyI0PIV8UyrFuoUUtOmTeHnlxa2iGx5irLxdE+lSpVUrwoRkeZh5f3308Z5iDJlymDIkCHo0KGDGv3v5uaG/CZBRC5GmS2h369fP2zavBnLV0xUewe5+RU3+3hOTk7wbdAZPvU7IWHvb+q2OwfX48auP1GoznPwa9Yz09Bi5OzuqWYgyUUkRVxE1O7fcfrIRnWKSC69evfB9Gk/POSrJ9JWwYIF1bWrq6tpYC0Rka5mA8kKlfPmzVOzYjILKgkJCepiJDMEhIQb4/RGS8tsnOv0adNw5IknEb72WxR4YRSc3NK2q8+Mb6NOEn8Q2Kgzbmz/Dcn/rsONf9ehUL0OKNz4ZbUH0YNSYyORGH4GCdfPIDn8LFIiziIhKkL9LjCgiFoxt86jtdGuXTurvX5rM9bbVutvLY7WLtI7KLy8vHD79m2zr9vR2iSn2C7msV303S6Wfn4ng5VHdn700UeYPHky4uLi8Nhjj2HFihX3rVaZ3ogRIzByZNqibOnNnz+fG5oRERHZCPnO79q1K6KiouDj45P/YUVO5WS3HLZ08co5aREREaF6Vc6fP6+CiK+vrwoscgolJz0rpUqVUo9hiRebF7/88gv69+8P/2feUdOYM+PhbMCouqn4ZK8T4qJuIzH8LBKuncbdo5uRHJPWW2LUpEkT1KlTR/WcyEUGIZtrD3sg6XrdunVo0aKFJqf+9MpR2kUWSHzttddU+a+//lLbVjh6m+QW28U8tou+20W+vwMCAiwWVnJ9GmjgwIGmaYeZKVeunKkslZWLrPAqs14kfOzcuRMNGzbMcD8PDw91eZA0uFaNLrMVNm7ahAWLJiLIPwTuAaVNv5OclxITgcRrp+B8+zxQtzMuTOuLqBtpM54K+xfBY3XroM6jj6oN2iSwidWrV6NAgQL4/PPP4Si0/H+oZ/bcLqdPnzZtSDhx4kSz/+YdrU0eBtvFPLaLPtvF0s+d67ASGBioLnmdDSDS957onfR4/DB1KvbsDcP5P75EocbdkHD9NJKvn0Jy+Gkk3klbVl/2CQI6472+PVG7dm08+uijKpgZe0zGjBmjusVkT6FLly5hyZIl6ncynds4A4jIXsTHx6N8+fKqLIFFZtcREelunZVdu3apsSoHDhxQPQobNmzAyy+/jNDQ0Bz/haUX0guydMlvcIq9iRvLvoD76U1oUikYQz54F8uWLcPFixdx9vQpdeywYcPUjCdzp3Zk3I0cGxMTg6CgINNpJjnurbfe0uS1EVma/FEiA2mNswB//fVXratERDbOarOB5Iv5999/x/DhwxEbG6vWWnnmmWfUl7m5Uz16J6ewwvbuUWNuihcv/lAjn2UKp+zSLJsdyikzmR0xbdo0dRkwYAC++eYbC9eeKP8YB9BLCD937pzW1SEiO2C1nhVZpVJ6U27evKm6hM+ePYupU6eiRIkSsFUSWMwFlbwqXLiwGnx848YN02JZ3377rfqQ/89//mOx5yHKL7IQpHHH8cTERK2rQ0R2wq73BrIVMgBZRk7LKr/G7vMvvvhChZbRo0drXT2iHPnkk0+wadMmVb569apa/I2IyBIYVnREem1kEK6M8XF3T1uETk6bSWiZMGGC1tUjytSqVatMs9tkinLRokW1rhIR2RGGFR2SwbkyY+rEiRNwcXExTRmX0CKn0oj0RAaNt2nTxtQj+PTTT2tdJSKyMwwrOlahQgUkJyfj8OHDpplFb7/9tirPnj1b6+oRqXEpEq6FDKAfOnSo1lUiIjvEsGIDqlatqqaDhoWFmW6ThfkktCxatEjTupFjM87sk7WX5FQQEZE1MKzYEFloTlbN3b59u+m2l156SYWWP/74Q9O6keOR5QiMwsPDNa0LEdk3hhUbJIvqSWjZuHGj6bb27dur0CJ7QhBZm+wEfu3aNZtbkZqIbBPDig1r2rSpCi0rV6403dayZUsVWrZs2aJp3ch+jRs3Tm1GKmTRN+PMNSIia2FYsQOtW7dWoUVWDE6/s7OElj179mhaN7IvEoI/+ugjVf7zzz/VcvpERNbGsGJHOnbsqELL3LlzTbfVr19fhRbZo4noYci4FAnBQmb9PPvss1pXiYgcBMOKHXrllVdUaPnpp59Mt8lO0LJmy9GjRzWtG9kmmUIfHBysyk888YRaT4WIKL8wrNixN998U4WWSZMmqZ9l+nOVKlXg5uaGM2fOaF09ssEpyj4+PhwPRUT5jmHFAfTv31+FFhkYafwrOTQ0VH0BXbp0Sevqkc7JzuASdIXsEE5ElN8YVhzIoEGDVGgZMWKEafXRUqVKoUCBAqZpqETpvfzyy2rHdBEbGwtnZ35kEFH+4yePAxo+fLgKLYMHD1Y/y+aJssCXr68vbt26pXX1SCdkH6qFCxeq8vHjx+Ht7a11lYjIQTGsOLCxY8eq0PLOO++on6Ojo1GkSBF1kTI5rr1796p9qIQElooVK2pdJSJyYAwrhIkTJ6rQ0rNnT/Wz9K5IL4v0tkivCzmWyMhI1KtXzzTeqUuXLlpXiYgcHMMKmfz4448qtHTt2lX9LONYZDyL7KobHx+vdfUoH8hAWj8/P9N0d+NMMiIiLTGsUAbz5s1ToUUWmRMXL16El5cXKlSooAblkv3y9PQ0Xe/bt0/r6hARKQwrlClZvj8lJQWtWrVSP586dUpNd65WrZqa/kz2Rf6/JiUlmWb+EBHpBcMKZUmmqq5evVqFFuNS60eOHFELy9WtW9e0/gbZtt69e6v/ryIqKopTlIlIV/iJRDkiX16bNm1SoUX2GxJhYWFqCf/GjRsztNiwOXPmqPFKQvaQklVqiYj0hGGFch1adu3apU4X1KhRQ922fft2FVqaN2/O0GJjpDele/fuqix7SdWsWVPrKhERZcCwQnni6uqKf/75BwkJCXjkkUfUbX/99ZcKLe3atWNosQF37txR41REjx491F5SRER6xLBCD8Xd3R3Hjh1TU5tDQkLUbStWrFCh5cUXX9S6epQJCZOFChVSZQmbM2fO1LpKRESZYlghi5BZQrKHjMwiKV68uLpt8eLFanE50h9jUJFQKWGTiEjPGFbIomT/mMuXLyMmJgaBgYGm2yW0GJdvJ201aNDAtDIx180hIlvAsEJWUbBgQYSHh+PChQv3bYzn5OSEgQMHalo3RyZtv3v3blW+efMmpygTkU3gJxVZlfE0kCwoJ0v3iwkTJqjQ8sknn2hcO8eyZMkS1fZi586d8Pf317pKREQ5wrBC+UJOCcnsEzlFZFzS/fPPP1ehZcyYMVpXz+6dPn0anTt3VuXvvvtOnQoiIrIVDCuUr2Tw7d27d3Hu3Dm1Cq74+OOPVWj59ttvta6eXZKZWuXLl1dlCSzvvvuu1lUiIsoVhhXSRJkyZdTgTpmJIjNSxPvvv69Cy/Tp07Wunl1NUZZNKEWpUqXUDC0iIlvDsEKakjU+ZFPEQ4cOqaAi+vTpo8qyDDw9nICAAHUt7Zl+sDMRkS3Jl7Aiq5zWqlVLfWDK3iNED5KVVKUXYM+ePabbZBl4ec+wNyBvmjVrhtu3b6sypygTkS3Ll7AyePBg00JhRFmRnZwNBgO2bdtmuk1WwpXQIivjUs4MHz4cGzZsUOWrV6+q7RGIiGyV1cPKqlWrsHbtWowfP97aT0V2RHZyltAi+w0ZyZ5DElrS30YZrVmzBp999pkqS1sVLVpU6yoRET0Uq/65df36dfTq1QvLli1TK5vm5HSRXIyio6PVtezwKxc9M9ZP7/W0tXZ54okn1CkMCbwvvPCCKbSI1atXo2HDhrBF1nq/XLlyBR07dlSDamUdG2k/W3lP8t+QeWwX89gu+m4XSz+/k0H+fLUCedg2bdqov5CHDRumpqqWLVsW+/fvV+NXzBkxYgRGjhyZ4fb58+fnKOwQERGR9mRLj65duyIqKgo+Pj75H1aGDBmCsWPHZnnM0aNH1V/Cv/76KzZv3qympuYkrJjrWZHplhERERZ5sdZOkevWrUOLFi1M64eQ9dpl0aJF6N27t+lnOT30999/o2rVqnDUdjGuFiwzgGQROFvDf0PmsV3MY7vou13k+1s+iywVVlzzsrdIjx49sjymXLlyanDfjh071G68Dw6gfOWVVzB79uwM95NjHzxeSIPbypvRlupqy+3SrVs3dfnpp5/UqUZRu3ZttdfNv//+q6ZEO1K7GBfbE7Y+RZn/hsxju5jHdtFnu1j6uV3zsmx6+t10MzNx4kS1nHr6c+mtWrVSfxFzqW+ylJ49e6qLLCE/YMAANf25UqVKavaL7Ecki8/Zu/bt26sZP8bVaomI7I3VZgOVLl1arZ1hvFSsWFHdHhoaipIlS1rraclBvffee2qclHGfIVloLiQkRO1DdOnSJdirr7/+Gn/88Ycqy6lWcz2TRES2jivYkl2RMVUSWow7OssYKBn3VLBgQYSHh8OeyFo0H374oSpLYHGEXiQickz5Flbkr1z5EslscC2RJck6I/J+M36Zx8bGIjg4GIULF8atW7dg6yR4ybRkY0AzTucmIrJH7Fkhu/bVV1+p0PL222+rn2VkepEiRdQodeM6PpaYoieDyQ8fPpztsQsWLESLli1NM5lkrM2sWbOwcuVK7N27Vw2OzW7ciZzikuAlZGkA46kvIiJ7xTW4ySFMmTJFXd544w3MnDkTN2/eVFN9ixUrpgbi5nQdH+mhkf2t9u3bh7CwMOzcvRcnjx9VA3sDg4Jx8J8DWa4Y+/3Uqdi+9wD8SlVAhw4dMOrLcYi+eSPDcd4FCyIgIFCFkmLBwQgODlLloKAgvPvuu+oYGUT8+++/IyUlxbRzNRGRPWJYIYfy888/q8vLL7+MhQsXqlk0BQoUUOM9jh07pgbkGt25c0cFEwklxmBy+uRxFUycXd3gGVQWzkHlULjFU3DzL4HbK75Cl5dexoa/1mcaHmrXqomwY2dRpPMIACko2udnFE5MRkpcFFLjopASG3mvHInIuCjcjI3C4SOX4RR2FKmxkUiIuZWhh0Wmaxf2L6Jm6UmwKVo0LdQYL8aQY7zI6zXucE1EZAsYVsghLViwAPPmzcPzzz+P5cuX4/z582qJehlb1ahRI+zeu08FEzmF5OzqDs/gEDgHhqJwy+bwKFoebgGl4eRy/zoCfs8OwtaF/1GbCKaftp9ejRo1ED95CgxJsgtyWqCRx3EtFADIJRtSn9S70UiNv4OUuGgVaiTcpMRF4kpcFC5eiwTOHQXu7kRybCQSY6PQ2WBAP6mfPBeAQ05O+Kd6Dby6d48shmChFiUish6GFXI4MlZFVlKW3hLpZShXvgLOnDppmv575a4r3ItXhF+rlumCSfb/VDxLV4fvE90wevRoPP7443jmmWfMhhWDIRVJty7B90wKflrwC8Y0eR3/BpfLUd2lR8TF21ddpDcnO5+sn4Y3w/5EkpMzNnkUQHR8DJ42GFDj4D/A008Da9cCXl45em4iIq0wrJBdkwG1xvEle/eGYffeMJw9nRZMXNw84B5cFq5BFVGkdRu4SzApUjJDj0lu+DzWGYmXj+Llrq+o8SsybTo92Q5AAkfSjfMo/vd5VDy7HweDy+c4rORGyxM7VFCJcXZFMzc3HEhJQI9evfBor17we/NNmfsMyBRv7ohORDrHsEJ2Z+7cufjzzxXYtWcvzp9N2yPHxd0THsHl4BJUCUXaPAv3oqFwK1IKTs6WHZjq5OQM/7bv48bsAXjhxS7YumXzfctOq/ExZcshNuICip3boW5rdWIHvmrS3aL1SI65iT5rp6jyeGcnNO7bB0s//BAlStzrjfn+e9nSGpg8OS2w3NtXiIhIjxhWyO5MmvI9du9MCwJO7t4oVLs1CtVuC1ffoHx5fhcvH/i1G4w9Cz5Sa6DIKrPpPVqrFs7uP4lCV66on8vfuoSSUddxyTdtOvLDSIq8huhdv6HwofWok5Ksbntv5w7416lz/4GPPw5Ir8/Fi8DKlcDLLz/0cxMRWQvXWSG7s2H9OqxatUotCFe1UgVE71qCyz+8gfCf++Lm2qmIO74dKfF3rFoHjxKV4NvkDUyYMEEN4DU6fDkKNz2C8fT10zDcm5GTCic8fWr3Qz1f4o3ziFjxNa7+2AfuF/diwitd037h758xqBjVrZt2vX//Qz03EZG1sWeF7I6capHBrXL56isgIiICGzduxPr167Fm7Xqc3/9fOV8Dr2IV4FaqBjzL1IRHySpwdrPsvjqF6j6HxMtH0O211/Dfv/7G5LAY7D57C/EJfhgeHwfDvdk5BiegxcmdmFMn96vQJlw9iZidvyL2xA4UK1ESY779Bm+++Sa8Z8wA5syRTboyv7NxPM3Zsw/xKomIrI9hheyerFb7wgsvqIuQacp//fUX1q//C2vXr0f4rt/SpieXqAz30mnhxb1YhYcezyIDaf1bv4frswegZbuOKPbqV4CzG3x9gvG4rNVy7zgXgwGPXTyMAglxiPXwztH05YSLhxGzazHizuxD2dDyGDZjBrp16wZ3d/e0g2Ji0q4LFMj8gQoWTLu20Eq+RETWwrBCDkcWgJOVbOUiX/xHjhxR4WXd+vXYuGkpIrf+AlfPAnAvVQ0epWuq8KKmL+dhITVnjwLwf+4jXJs7CBHrf0KRln3x9O3LeHC+kVtqCp44tx+rH2mc6WNJXePP7MUdCSkX/0XVatXxycKF6Ny5M1ewJSK7xrBCDk0CSLVq1dTlvffeU6vC7tmzR4WXtevWY+eWWbidlAj3Qv6mU0aeITXh6pPzwbqyVot/8964tWYKPEtWQfMzYUiSgJLumCRnFzQ/tdtsWDGkpiDuxA7E7lqMu9dOo179Bvj0+z/Rtm3bzANUoUJp17GxmVfszr1xOz4+OX4tRERaYFghSkf222nYsKG6DBs2TG1SuG3bNhVe1qxbj4OrJ6oeDs8iJeBqDC9laqgZQMExEQiIjTT/wMHlEVm2DhJWTUQzZ2ezPSsybqXatVNqLIuSmoK7Z8Jw59B6JEeHo169eug5YhDqSkgpWTLrFxISknYts30yY/yd8VgiIp1iWCHKgmxw2LJlS3UZOxa4deuWGqyrwsva9TizfFXaYN2ioZgXcxuN79zM9jFTM7m9UEIsVswekPkd9+xJuzz5JLB5c9ZPUrt22vXNm2kDaMuWzXjM3r1p148+mm2diYi0xKnLRLng7++PTp064fvvv8fpUydw4cIFzPz5Zzz/9GNY4JyMu1mEkez+0WX7j1FO+chGi7L6bHak56VevbTy/PkZfy+r10rPiocH0KZN9o9HRKQhhhWihyDL6ffo0QNz5/6CSZG3cXn5ckQFBSHFws+T4uQMVKwIhIUBr72Wszt9/HHa9ZdfAvv2/f926W15++20cv/+XL2WiHSPYYXIQmSwa/nnnoPfmTNYWqO5ui27XpbsGO//e/VmaYGjSpWc37lDB+Ddd9MG0j72GNC6NdC5M1C+PHDoENC4MTBq1EPWkIjI+hhWiCws1csbH7YegIFt3keiixuSpVckD+R+cv8P2r6PQa3fQ6pnHnZH/u47YNEioGFDYPv2tKX15RSR9LZs2MAdl4nIJnCALZGFOTs7wc3FCUuqN8M/xSpg+u+jUSbyilr8LTenfc77FUPvjsNwOqCUejx53Dx58cW0CxGRjWLPCpEVlA9KWx32VEBptO3xHdZUbJir+6+p+Ji6nwQVUSHo3ropREQOiGGFyArqh/jD5V5PyF13T1wvWATJTjlbZVaOk+Pj3TzVz/I49UL8rFpfIiI9Y1ghsoIX6pZCSmraaR8nQyraHd0CV0PO5gjJcXK83E/I48jjERE5KoYVIiuoVsIX9cum9a7UuXwUAXFRGY4xjmAxN2NIjn/08jF1f3kceTwiIkfFsEJkJeM61YCLkxPaHtuW4RSQzPRJdXPDzPrtzc4YkuOfPbZV3V8eh4jIkTGsEFlJSEABfNWpWoZTQDLT54JfMWyeMAFfNu+JZ3t8hwuFiyEl3aaExlNBcn95HCIiR8awQmRF7ePOm04BGU/3/FbtaXR881vElCp134yhJdWevu84uV/7uxc0qTcRkZ4wrBBZ06+/qiuDiwuSXd3VAm8fP/u+aaaPkcwYGvrsB2ohOTlOjk9/fyIiR8awQmQtqalpq8fKjKDy5eH+z368MW04ujUojUrBPqbDZMG3KsV81O2vTx+ujnMKDU375cKFaY9DROTAuIItkbXcvQtI6GjbFpg8GfD2RrV7M4WSkpKwcuVKHPy0JTw83O+/n8z8kX2AZJPB48fTHqcAx60QkeNiWCGyFgkY27bJ+vuZHpLpEvpy35kz03pVsrg/EZEj4KcgkTU9bNBgUCEiYlghIiIifWNYISIiIl3T9ZgVgyFtQfLo6GjonQyYjIuLU3V1c3PTujq6wXYxj+2SEdvEPLaLeWwXfbeL8Xvb+D1u12ElJiZGXZe6t3gWERER2Q75Hvf1ffi9zZwMloo9VpCamoorV66gUKFCcEq3FLkeSYqUUHXx4kX4+Px/DQ1Hx3Yxj+2SEdvEPLaLeWwXfbeLRAsJKsWLF4ezBSYK6LpnRV5gyZIlYUvkzcF/OBmxXcxju2TENjGP7WIe20W/7WKJHhUjDrAlIiIiXWNYISIiIl1jWLEQDw8PDB8+XF3T/7FdzGO7ZMQ2MY/tYh7bxbHaRdcDbImIiIjYs0JERES6xrBCREREusawQkRERLrGsEJERES6xrBCREREusaw8hBu3bqFV155Ra0SWLhwYbz55pu4c+dOlvdp2rSp2jog/eWtt96CLZsyZQpCQkLg6emJBg0aYPfu3Vkev3jxYlSqVEkdX716daxcuRL2KDftMmvWrAzvC7mfPdmyZQvatWunlt+W17ds2bJs77Np0yY8+uijahpm+fLlVTvZm9y2i7TJg+8VuVy7dg32YsyYMahXr57aaiUoKAgdOnTA8ePHs72fvX+2jMlDu9jLZwvDykOQoHLkyBGsW7cOK1asUB86vXv3zvZ+vXr1wtWrV02XcePGwVYtWrQIH3zwgZrXv2/fPtSsWROtWrVCeHi42eO3b9+Ol19+WQW7/fv3q39scjl8+DDsSW7bRUjoTf++OH/+POxJbGysagcJcTlx9uxZtG3bFk899RQOHDiAAQMGoGfPnlizZg0cuV2M5Esq/ftFvrzsxebNm9GvXz/s3LlTfb7KTsItW7ZUbZUZR/hs2ZyHdrGbzxZZZ4Vy799//5X1aQx79uwx3bZq1SqDk5OT4fLly5ner0mTJob33nvPYC/q169v6Nevn+nnlJQUQ/HixQ1jxowxe/yLL75oaNu27X23NWjQwNCnTx+DPcltu8ycOdPg6+trcBTyb2fp0qVZHjN48GBD1apV77utS5cuhlatWhkcuV02btyojrt9+7bBUYSHh6vXvHnz5kyPcZTPlty2i718trBnJY927NihTv3UrVvXdFvz5s3V5ou7du3K8r7z5s1DQEAAqlWrhqFDhyIuLg62KDExEWFhYep1G8nrl5+lfcyR29MfL6THIbPjHaVdhJxCLFOmjNoxtX379qrXzpE5wnvlYdSqVQvFihVDixYt8Pfff8OeRUVFqWt/f/9Mj3HE90tUDtrFXj5bGFbySM4PP9jt6urqqt40WZ077tq1K+bOnYuNGzeqoPLLL7+gW7dusEURERFISUlBcHDwfbfLz5m1gdyem+MdpV0eeeQR/Pzzz1i+fLl6f6SmpqJRo0a4dOkSHFVm75Xo6GjcvXsXjkoCyg8//IAlS5aoi3wByVg4Od1oj+TfgpwCbNy4sfoDLzOO8NmSl3axl88WV60roDdDhgzB2LFjszzm6NGjeX789GNaZACYfPA0a9YMp0+fRmhoaJ4fl2xbw4YN1cVIPkwqV66MadOmYdSoUZrWjfRFvnzkkv69Ip8f33zzjfrjx97IGA0Zd7Jt2zatq2KT7dLQTj5bGFYeMHDgQPTo0SPLY8qVK4eiRYtmGCyZnJysZgjJ73JKZomIU6dO2VxYkVNZLi4uuH79+n23y8+ZtYHcnpvjbVFe2uVBbm5uqF27tnpfOKrM3isyWNDLy0uzeulR/fr17fLLvH///qbJCyVLlszyWEf4bMlLu9jLZwtPAz0gMDBQTX3L6uLu7q6SamRkpBqbYLRhwwbVxWYMIDkhsxyE9LDYGmmHOnXq4K+//jLdJq9ffk6f5NOT29MfL2RUe2bH26K8tMuD5DTSoUOHbPJ9YSmO8F6xFPkcsaf3iow1li/kpUuXqs/VsmXLZnsfR3i/GPLQLnbz2aL1CF9b9swzzxhq165t2LVrl2Hbtm2GChUqGF5++WXT7y9dumR45JFH1O/FqVOnDJ999plh7969hrNnzxqWL19uKFeunOHJJ5802KqFCxcaPDw8DLNmzVIzpHr37m0oXLiw4dq1a+r3r776qmHIkCGm4//++2+Dq6urYfz48YajR48ahg8fbnBzczMcOnTIYE9y2y4jR440rFmzxnD69GlDWFiY4aWXXjJ4enoajhw5YrAXMTExhv3796uLfPRMmDBBlc+fP69+L+0h7WJ05swZg7e3t2HQoEHqvTJlyhSDi4uLYfXq1QZ7ktt2+eabbwzLli0znDx5Uv27kdmFzs7OhvXr1xvsRd++fdUMlk2bNhmuXr1qusTFxZmOccTPlr55aBd7+WxhWHkIN2/eVOGkYMGCBh8fH8Prr7+uPniMJJDIh49MNRQXLlxQwcTf3199kZUvX159EEdFRRls2aRJkwylS5c2uLu7qym7O3fuvG+qdvfu3e87/tdffzVUrFhRHS9TU//73/8a7FFu2mXAgAGmY4ODgw1t2rQx7Nu3z2BPjFNuH7wY20GupV0evE+tWrVUu0iwl2mY9ia37TJ27FhDaGio+sKRz5KmTZsaNmzYYLAn5tpDLun//zviZwvy0C728tniJP/RuneHiIiIKDMcs0JERES6xrBCREREusawQkRERLrGsEJERES6xrBCREREusawQkRERLrGsEJERES6xrBCREREusawQkRERLrGsEJERES6xrBCRERE0LP/AXaWEae/YUV8AAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Visualize the solution\n", "def visualize_solution(xc, yc, x, C, n, K, title_str):\n", " plt.figure()\n", " plt.scatter(xc, yc, s=200)\n", " for i in range(len(xc)):\n", " plt.annotate(i, (xc[i] + 0.15, yc[i]), size=16, color=\"r\")\n", " plt.plot(xc[0], yc[0], \"r*\", ms=20)\n", "\n", " plt.grid()\n", "\n", " for ii in range(0, n**2):\n", "\n", " if x[ii] > 0:\n", " ix = ii // n\n", " iy = ii % n\n", " plt.arrow(\n", " xc[ix],\n", " yc[ix],\n", " xc[iy] - xc[ix],\n", " yc[iy] - yc[ix],\n", " length_includes_head=True,\n", " head_width=0.25,\n", " )\n", "\n", " plt.title(title_str + \" cost = \" + str(int(C * 100) / 100.0))\n", " plt.show()\n", "\n", "\n", "if x is not None:\n", " visualize_solution(xc, yc, x, classical_cost, n, K, \"Classical\")" ] }, { "cell_type": "markdown", "id": "121f6426-4622-4098-9b12-d1cd09ed8cb0", "metadata": {}, "source": [ "# Quantum solution from the ground up" ] }, { "cell_type": "code", "execution_count": 12, "id": "b24da458-2bf1-4126-b4ee-e8a6d0d91136", "metadata": {}, "outputs": [], "source": [ "from qiskit_optimization import QuadraticProgram\n", "from qiskit_optimization.algorithms import MinimumEigenOptimizer\n", "\n", "\n", "class QuantumOptimizer:\n", " def __init__(self, instance, n, K):\n", "\n", " self.instance = instance\n", " self.n = n\n", " self.K = K\n", "\n", " def binary_representation(self, x_sol=0):\n", "\n", " instance = self.instance\n", " n = self.n\n", " K = self.K\n", "\n", " A = np.max(instance) * 100 # A parameter of cost function\n", "\n", " # Determine the weights w\n", " instance_vec = instance.reshape(n**2)\n", " w_list = [instance_vec[x] for x in range(n**2) if instance_vec[x] > 0]\n", " w = np.zeros(n * (n - 1))\n", " for ii in range(len(w_list)):\n", " w[ii] = w_list[ii]\n", "\n", " # Some variables I will use\n", " Id_n = np.eye(n)\n", " Im_n_1 = np.ones([n - 1, n - 1])\n", " Iv_n_1 = np.ones(n)\n", " Iv_n_1[0] = 0\n", " Iv_n = np.ones(n - 1)\n", " neg_Iv_n_1 = np.ones(n) - Iv_n_1\n", "\n", " v = np.zeros([n, n * (n - 1)])\n", " for ii in range(n):\n", " count = ii - 1\n", " for jj in range(n * (n - 1)):\n", "\n", " if jj // (n - 1) == ii:\n", " count = ii\n", "\n", " if jj // (n - 1) != ii and jj % (n - 1) == count:\n", " v[ii][jj] = 1.0\n", "\n", " vn = np.sum(v[1:], axis=0)\n", "\n", " # Q defines the interactions between variables\n", " Q = A * (np.kron(Id_n, Im_n_1) + np.dot(v.T, v))\n", "\n", " # g defines the contribution from the individual variables\n", " g = (\n", " w\n", " - 2 * A * (np.kron(Iv_n_1, Iv_n) + vn.T)\n", " - 2 * A * K * (np.kron(neg_Iv_n_1, Iv_n) + v[0].T)\n", " )\n", "\n", " # c is the constant offset\n", " c = 2 * A * (n - 1) + 2 * A * (K**2)\n", "\n", " try:\n", " max(x_sol)\n", " # Evaluates the cost distance from a binary representation of a path\n", " fun = (\n", " lambda x: np.dot(np.around(x), np.dot(Q, np.around(x)))\n", " + np.dot(g, np.around(x))\n", " + c\n", " )\n", " cost = fun(x_sol)\n", " except:\n", " cost = 0\n", "\n", " return Q, g, c, cost\n", "\n", " def construct_problem(self, Q, g, c) -> QuadraticProgram:\n", " qp = QuadraticProgram()\n", " for i in range(n * (n - 1)):\n", " qp.binary_var(str(i))\n", " qp.objective.quadratic = Q\n", " qp.objective.linear = g\n", " qp.objective.constant = c\n", " return qp\n", "\n", " def solve_problem(self, qp):\n", " algorithm_globals.random_seed = 10598\n", " vqe = SamplingVQE(sampler=Sampler(backend = qr_backend), optimizer=SPSA(), ansatz=RealAmplitudes())\n", " optimizer = MinimumEigenOptimizer(min_eigen_solver=vqe)\n", " result = optimizer.solve(qp)\n", " # compute cost of the obtained result\n", " _, _, _, level = self.binary_representation(x_sol=result.x)\n", " return result.x, level" ] }, { "cell_type": "markdown", "id": "294790aa-752e-406e-9233-5b3ad6700287", "metadata": {}, "source": [ "# Step 1" ] }, { "cell_type": "code", "execution_count": 13, "id": "3420e4d1-b219-4acf-9e9c-c9f14a61de43", "metadata": {}, "outputs": [], "source": [ "# Instantiate the quantum optimizer class with parameters:\n", "quantum_optimizer = QuantumOptimizer(instance, n, K)" ] }, { "cell_type": "markdown", "id": "91c48df2-496c-45bf-bc94-90054da90fde", "metadata": {}, "source": [ "# Step 2" ] }, { "cell_type": "code", "execution_count": 14, "id": "63677eda-847e-431a-a19b-dedcf3bf6d0d", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Binary cost: 132.11148115684045 classical cost: 132.1114811568365\n", "Binary formulation is correct\n" ] } ], "source": [ "# Check if the binary representation is correct\n", "try:\n", " if z is not None:\n", " Q, g, c, binary_cost = quantum_optimizer.binary_representation(x_sol=z)\n", " print(\"Binary cost:\", binary_cost, \"classical cost:\", classical_cost)\n", " if np.abs(binary_cost - classical_cost) < 0.01:\n", " print(\"Binary formulation is correct\")\n", " else:\n", " print(\"Error in the binary formulation\")\n", " else:\n", " print(\"Could not verify the correctness, due to CPLEX solution being unavailable.\")\n", " Q, g, c, binary_cost = quantum_optimizer.binary_representation()\n", " print(\"Binary cost:\", binary_cost)\n", "except NameError as e:\n", " print(\"Warning: Please run the cells above first.\")\n", " print(e)" ] }, { "cell_type": "markdown", "id": "10eef6ab-d1c1-4e58-b156-627c0e16e05a", "metadata": {}, "source": [ "# Step 3" ] }, { "cell_type": "code", "execution_count": 15, "id": "e669902c-8208-4bab-bf62-143d831d7237", "metadata": {}, "outputs": [], "source": [ "qp = quantum_optimizer.construct_problem(Q, g, c)" ] }, { "cell_type": "markdown", "id": "2f6caf84-e7e5-4ed3-9c54-eaf57172ddb6", "metadata": {}, "source": [ "# Step 4" ] }, { "cell_type": "code", "execution_count": 16, "id": "476f8569-ddd6-439c-9815-72b9541a49f7", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "C:\\Users\\vkasi\\AppData\\Local\\Temp\\ipykernel_58292\\3032963208.py:86: DeprecationWarning: The class ``qiskit.circuit.library.n_local.real_amplitudes.RealAmplitudes`` is deprecated as of Qiskit 2.1. It will be removed in Qiskit 3.0. Use the function qiskit.circuit.library.real_amplitudes instead.\n", " vqe = SamplingVQE(sampler=Sampler(backend = qr_backend), optimizer=SPSA(), ansatz=RealAmplitudes())\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "[1. 1. 1. 0. 1. 0.] 132.11148115684045\n" ] } ], "source": [ "quantum_solution, quantum_cost = quantum_optimizer.solve_problem(qp)\n", "\n", "print(quantum_solution, quantum_cost)" ] }, { "cell_type": "markdown", "id": "616589c9-13c8-4bb7-806e-95f587535525", "metadata": {}, "source": [ "# Step 5" ] }, { "cell_type": "code", "execution_count": 17, "id": "e88b5181-fc39-4709-9df0-e93551e65dfa", "metadata": {}, "outputs": [ { "data": { "image/png": "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YdiyZYuhatWqhp49e5ruv3DhgqFatWrqfnHixAnDxx9/bNi9e7fh9OnThqVLlxoqVapkeOihhwy2av78+QYPDw/DjBkz1Ayp/v37G/z9/Q1XrlxR9z/33HOGYcOGmc7/559/DK6urobx48cbDh8+bBgxYoTBzc3NcODAAYM9KWi9jBo1yrBq1SrDyZMnDREREYZnnnnG4OnpaTh06JDBXsTFxRn27t2rDvnomTBhgiqfPXtW3S/1IfVidOrUKYO3t7dhyJAh6r0yadIkg4uLi2HlypUGe1LQevnqq68MS5YsMRw/flz93sjsQmdnZ8PatWsN9uK1115TM1g2bNhguHz5sulISEgwneOIny2vFaJe7OWzhcnKPbh+/bpKTooXL27w9fU1vPDCC+qDx0gSEvnwkamG4ty5cyoxCQwMVF9kVapUUR/EMTExBlv27bffGsqXL29wd3dXU3a3b99+11TtPn363HX+r7/+aggPD1fny9TUv/76y2CPClIvgwYNMp0bGhpq6NChg2HPnj0Ge2Kccpv1MNaDXEq9ZH1M/fr1Vb1IYi/TMO1NQetl7NixhsqVK6svHPksadWqlWHdunUGe2KuPuTI/P/viJ8tKES92Mtni5P8o3XrDhEREVFOOGaFiIiIdI3JChEREekakxUiIiLSNSYrREREpGtMVoiIiEjXmKwQERGRrjFZISIiIl1jskJERES6xmSFiIiIdI3JChEREekakxUiIiKCnv0fvEzQfdquPEAAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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YLRhwwbVxWYMIDkhsxyE9LDYGmmHOnXq4K+//jLdJq9ffk6f5NOT29MfL2RUe2bH26K8tMuD5DTSoUOHbPJ9YSmO8F6xFPkcsaf3iow1li/kpUuXqs/VsmXLZnsfR3i/GPLQLnbz2aL1CF9b9swzzxhq165t2LVrl2Hbtm2GChUqGF5++WXT7y9dumR45JFH1O/FqVOnDJ999plh7969hrNnzxqWL19uKFeunOHJJ5802KqFCxcaPDw8DLNmzVIzpHr37m0oXLiw4dq1a+r3r776qmHIkCGm4//++2+Dq6urYfz48YajR48ahg8fbnBzczMcOnTIYE9y2y4jR440rFmzxnD69GlDWFiY4aWXXjJ4enoajhw5YrAXMTExhv3796uLfPRMmDBBlc+fP69+L+0h7WJ05swZg7e3t2HQoEHqvTJlyhSDi4uLYfXq1QZ7ktt2+eabbwzLli0znDx5Uv27kdmFzs7OhvXr1xvsRd++fdUMlk2bNhmuXr1qusTFxZmOccTPlr55aBd7+WxhWHkIN2/eVOGkYMGCBh8fH8Prr7+uPniMJJDIh49MNRQXLlxQwcTf3199kZUvX159EEdFRRls2aRJkwylS5c2uLu7qym7O3fuvG+qdvfu3e87/tdffzVUrFhRHS9TU//73/8a7FFu2mXAgAGmY4ODgw1t2rQx7Nu3z2BPjFNuH7wY20GupV0evE+tWrVUu0iwl2mY9ia37TJ27FhDaGio+sKRz5KmTZsaNmzYYLAn5tpDLun//zviZwvy0C728tniJP/RuneHiIiIKDMcs0JERES6xrBCREREusawQkRERLrGsEJERES6xrBCREREusawQkRERLrGsEJERES6xrBCREREusawQkRERLrGsEJERES6xrBCRERE0LP/AXaWEae/YUV8AAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Put the solution in a way that is compatible with the classical variables\n", "x_quantum = np.zeros(n**2)\n", "kk = 0\n", "for ii in range(n**2):\n", " if ii // n != ii % n:\n", " x_quantum[ii] = quantum_solution[kk]\n", " kk += 1\n", "\n", "\n", "# visualize the solution\n", "visualize_solution(xc, yc, x_quantum, quantum_cost, n, K, \"Quantum\")\n", "\n", "# and visualize the classical for comparison\n", "if x is not None:\n", " visualize_solution(xc, yc, x, classical_cost, n, K, \"Classical\")" ] }, { "cell_type": "code", "execution_count": 18, "id": "681a4b20-8440-435d-911d-5f52a609150b", "metadata": {}, "outputs": [ { "data": { "text/html": [ "

Version Information

SoftwareVersion
qiskit2.2.1
qiskit_optimization0.7.0
qiskit_algorithms0.4.0
qiskit_ibm_runtime0.40.1
qiskit_aer0.17.1
System information
Python version3.12.9
OSWindows
Tue Oct 21 15:37:41 2025 Mountain Daylight Time
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "

Quantum Rings Version Information

SoftwareVersion
QuantumRingsLib0.11.0
quantumrings-toolkit-qiskit0.2.0
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "

This code is a part of a Qiskit project

© Copyright IBM 2017, 2025.

This code is licensed under the Apache License, Version 2.0. You may
obtain a copy of this license in the LICENSE.txt file in the root directory
of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.

Any modifications or derivative works of this code must retain this
copyright notice, and modified files need to carry a notice indicating
that they have been altered from the originals.

Modifications (c) Copyright Quantum Rings Inc, 2025
Modified from the originals
Added support for Quantum Rings toolkit for Qiskit.

" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import tutorial_magics\n", "\n", "%qiskit_version_table\n", "%quantumrings_version_table\n", "%qiskit_copyright" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.12.9" } }, "nbformat": 4, "nbformat_minor": 5 }