{ "cells": [ { "cell_type": "markdown", "metadata": { "id": "SzKwuqYESWwm" }, "source": [ "##### Copyright 2021 The Cirq Developers" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "cellView": "form", "execution": { "iopub.execute_input": "2025-05-30T10:24:50.240348Z", "iopub.status.busy": "2025-05-30T10:24:50.239795Z", "iopub.status.idle": "2025-05-30T10:24:50.243777Z", "shell.execute_reply": "2025-05-30T10:24:50.243185Z" }, "id": "4yPUsdJxSXFq" }, "outputs": [], "source": [ "# @title Licensed under the Apache License, Version 2.0 (the \"License\");\n", "# you may not use this file except in compliance with the License.\n", "# You may obtain a copy of the License at\n", "#\n", "# https://www.apache.org/licenses/LICENSE-2.0\n", "#\n", "# Unless required by applicable law or agreed to in writing, software\n", "# distributed under the License is distributed on an \"AS IS\" BASIS,\n", "# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n", "# See the License for the specific language governing permissions and\n", "# limitations under the License." ] }, { "cell_type": "markdown", "metadata": { "id": "zC1qlUJoSXhm" }, "source": [ "\n", " \n", " \n", " \n", " \n", "
\n", " View on QuantumAI\n", " \n", " Run in Google Colab\n", " \n", " View source on GitHub\n", " \n", " Download notebook\n", "
" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "execution": { "iopub.execute_input": "2025-05-30T10:24:50.246528Z", "iopub.status.busy": "2025-05-30T10:24:50.245999Z", "iopub.status.idle": "2025-05-30T10:25:03.209929Z", "shell.execute_reply": "2025-05-30T10:25:03.209074Z" }, "id": "bd9529db1c0b" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "installing cirq...\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[31mERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.\r\n", "tensorflow-metadata 1.17.1 requires protobuf<4.22,>=4.21.6; python_version < \"3.11\", but you have protobuf 5.29.5 which is incompatible.\u001b[0m\u001b[31m\r\n", "\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "installed cirq.\n" ] } ], "source": [ "try:\n", " import cirq\n", "except ImportError:\n", " print(\"installing cirq...\")\n", " !pip install --quiet cirq\n", " print(\"installed cirq.\")" ] }, { "cell_type": "markdown", "metadata": { "id": "dd95be2a71eb" }, "source": [ "# Isolated XEB\n", "\n", "This notebook demonstrates how to use the functionality in `cirq.experiments` to run Isolated XEB end-to-end. \"Isolated\" means we do one pair of qubits at a time." ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "execution": { "iopub.execute_input": "2025-05-30T10:25:03.212965Z", "iopub.status.busy": "2025-05-30T10:25:03.212687Z", "iopub.status.idle": "2025-05-30T10:25:04.901730Z", "shell.execute_reply": "2025-05-30T10:25:04.901015Z" }, "id": "046b07823210" }, "outputs": [], "source": [ "import cirq\n", "import numpy as np" ] }, { "cell_type": "markdown", "metadata": { "id": "ace31cc4d258" }, "source": [ "## Set up Random Circuits\n", "\n", "We create a library of 20 random, two-qubit `circuits` using the sqrt(ISWAP) gate on the two qubits we've chosen." ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "execution": { "iopub.execute_input": "2025-05-30T10:25:04.905572Z", "iopub.status.busy": "2025-05-30T10:25:04.905170Z", "iopub.status.idle": "2025-05-30T10:25:05.034014Z", "shell.execute_reply": "2025-05-30T10:25:05.033349Z" }, "id": "03ad48eb554a" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "20\n" ] } ], "source": [ "from cirq.experiments import random_quantum_circuit_generation as rqcg\n", "\n", "circuits = rqcg.generate_library_of_2q_circuits(\n", " n_library_circuits=20,\n", " two_qubit_gate=cirq.ISWAP**0.5,\n", " q0=cirq.GridQubit(4, 4),\n", " q1=cirq.GridQubit(4, 5),\n", ")\n", "print(len(circuits))" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "execution": { "iopub.execute_input": "2025-05-30T10:25:05.036414Z", "iopub.status.busy": "2025-05-30T10:25:05.036184Z", "iopub.status.idle": "2025-05-30T10:25:05.043595Z", "shell.execute_reply": "2025-05-30T10:25:05.042962Z" }, "id": "c7c044ec12ac" }, "outputs": [ { "data": { "text/plain": [ "array([ 3, 23, 43, 63, 83])" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# We will truncate to these lengths\n", "max_depth = 100\n", "cycle_depths = np.arange(3, max_depth, 20)\n", "cycle_depths" ] }, { "cell_type": "markdown", "metadata": { "id": "4bf3dbdfac5a" }, "source": [ "### Set up a `Sampler`.\n", "\n", "For demonstration, we'll use a density matrix simulator to sample noisy samples. However, input a `device_name` (and have an authenticated Google Cloud project name set as your `GOOGLE_CLOUD_PROJECT` environment variable) to run on a real device." ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "execution": { "iopub.execute_input": "2025-05-30T10:25:05.045912Z", "iopub.status.busy": "2025-05-30T10:25:05.045692Z", "iopub.status.idle": "2025-05-30T10:25:05.050469Z", "shell.execute_reply": "2025-05-30T10:25:05.049688Z" }, "id": "f974bb59afb4" }, "outputs": [], "source": [ "device_name = None # change me!\n", "\n", "if device_name is None:\n", " sampler = cirq.DensityMatrixSimulator(noise=cirq.depolarize(5e-3))\n", "else:\n", " import cirq_google as cg\n", "\n", " sampler = cg.get_engine_sampler(device_name, gate_set_name='sqrt_iswap')\n", " device = cg.get_engine_device(device_name)\n", "\n", " import cirq.contrib.routing as ccr\n", "\n", " graph = ccr.gridqubits_to_graph_device(device.qubits)\n", " pos = {q: (q.row, q.col) for q in graph.nodes}\n", " import networkx as nx\n", "\n", " nx.draw_networkx(graph, pos=pos)" ] }, { "cell_type": "markdown", "metadata": { "id": "bd50664b583a" }, "source": [ "## Take Data" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "execution": { "iopub.execute_input": "2025-05-30T10:25:05.052924Z", "iopub.status.busy": "2025-05-30T10:25:05.052697Z", "iopub.status.idle": "2025-05-30T10:25:23.582124Z", "shell.execute_reply": "2025-05-30T10:25:23.581295Z" }, "id": "a1deda080b5b" }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "\r", " 0%| | 0/108 [00:00\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
sampled_probstimestamppair
circuit_icycle_depth
03[0.4475, 0.1613, 0.2565, 0.1347]1.748601e+09(q(4, 4), q(4, 5))
13[0.1757, 0.1558, 0.6124, 0.0561]1.748601e+09(q(4, 4), q(4, 5))
23[0.5577, 0.137, 0.0355, 0.2698]1.748601e+09(q(4, 4), q(4, 5))
33[0.4909, 0.0619, 0.3096, 0.1376]1.748601e+09(q(4, 4), q(4, 5))
43[0.039, 0.2137, 0.1022, 0.6451]1.748601e+09(q(4, 4), q(4, 5))
...............
1583[0.2616, 0.2508, 0.2176, 0.27]1.748601e+09(q(4, 4), q(4, 5))
1683[0.2234, 0.298, 0.2231, 0.2555]1.748601e+09(q(4, 4), q(4, 5))
1783[0.2322, 0.2576, 0.2842, 0.226]1.748601e+09(q(4, 4), q(4, 5))
1883[0.2863, 0.2383, 0.242, 0.2334]1.748601e+09(q(4, 4), q(4, 5))
1983[0.2162, 0.2179, 0.3538, 0.2121]1.748601e+09(q(4, 4), q(4, 5))
\n", "

100 rows × 3 columns

\n", "" ], "text/plain": [ " sampled_probs timestamp \\\n", "circuit_i cycle_depth \n", "0 3 [0.4475, 0.1613, 0.2565, 0.1347] 1.748601e+09 \n", "1 3 [0.1757, 0.1558, 0.6124, 0.0561] 1.748601e+09 \n", "2 3 [0.5577, 0.137, 0.0355, 0.2698] 1.748601e+09 \n", "3 3 [0.4909, 0.0619, 0.3096, 0.1376] 1.748601e+09 \n", "4 3 [0.039, 0.2137, 0.1022, 0.6451] 1.748601e+09 \n", "... ... ... \n", "15 83 [0.2616, 0.2508, 0.2176, 0.27] 1.748601e+09 \n", "16 83 [0.2234, 0.298, 0.2231, 0.2555] 1.748601e+09 \n", "17 83 [0.2322, 0.2576, 0.2842, 0.226] 1.748601e+09 \n", "18 83 [0.2863, 0.2383, 0.242, 0.2334] 1.748601e+09 \n", "19 83 [0.2162, 0.2179, 0.3538, 0.2121] 1.748601e+09 \n", "\n", " pair \n", "circuit_i cycle_depth \n", "0 3 (q(4, 4), q(4, 5)) \n", "1 3 (q(4, 4), q(4, 5)) \n", "2 3 (q(4, 4), q(4, 5)) \n", "3 3 (q(4, 4), q(4, 5)) \n", "4 3 (q(4, 4), q(4, 5)) \n", "... ... \n", "15 83 (q(4, 4), q(4, 5)) \n", "16 83 (q(4, 4), q(4, 5)) \n", "17 83 (q(4, 4), q(4, 5)) \n", "18 83 (q(4, 4), q(4, 5)) \n", "19 83 (q(4, 4), q(4, 5)) \n", "\n", "[100 rows x 3 columns]" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from cirq.experiments.xeb_sampling import sample_2q_xeb_circuits\n", "\n", "sampled_df = sample_2q_xeb_circuits(\n", " sampler=sampler, circuits=circuits, cycle_depths=cycle_depths, repetitions=10_000\n", ")\n", "sampled_df" ] }, { "cell_type": "markdown", "metadata": { "id": "99b51deacbe4" }, "source": [ "## Benchmark fidelities" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "execution": { "iopub.execute_input": "2025-05-30T10:25:23.584636Z", "iopub.status.busy": "2025-05-30T10:25:23.584387Z", "iopub.status.idle": "2025-05-30T10:25:24.443171Z", "shell.execute_reply": "2025-05-30T10:25:24.442512Z" }, "id": "3896c772ad49" }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
cycle_depthfidelityfidelity_variancepair
030.9277710.161473(q(4, 4), q(4, 5))
1230.6034470.140176(q(4, 4), q(4, 5))
2430.3849360.151169(q(4, 4), q(4, 5))
3630.2559040.150423(q(4, 4), q(4, 5))
4830.1727890.183794(q(4, 4), q(4, 5))
\n", "
" ], "text/plain": [ " cycle_depth fidelity fidelity_variance pair\n", "0 3 0.927771 0.161473 (q(4, 4), q(4, 5))\n", "1 23 0.603447 0.140176 (q(4, 4), q(4, 5))\n", "2 43 0.384936 0.151169 (q(4, 4), q(4, 5))\n", "3 63 0.255904 0.150423 (q(4, 4), q(4, 5))\n", "4 83 0.172789 0.183794 (q(4, 4), q(4, 5))" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from cirq.experiments.xeb_fitting import benchmark_2q_xeb_fidelities\n", "\n", "fids = benchmark_2q_xeb_fidelities(\n", " sampled_df=sampled_df, circuits=circuits, cycle_depths=cycle_depths\n", ")\n", "fids" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "execution": { "iopub.execute_input": "2025-05-30T10:25:24.446117Z", "iopub.status.busy": "2025-05-30T10:25:24.445874Z", "iopub.status.idle": "2025-05-30T10:25:24.740347Z", "shell.execute_reply": "2025-05-30T10:25:24.739539Z" }, "id": "8c08c9ab8109" }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjcAAAG0CAYAAADO5AZFAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvZiW1igAAAAlwSFlzAAAPYQAAD2EBqD+naQAAce5JREFUeJzt3Wd0FGUfhvFrNz2kEUihJCT03ltAmqKAVBuKCoiIIqIUFUFfxYJiA5GiICpNlCYCgoD0LkjvJfSSQksChLTdeT+sBiIQEkjYlPt3zh7ZmWdm/9kV9s7MU0yGYRiIiIiI5BFmexcgIiIikpUUbkRERCRPUbgRERGRPEXhRkRERPIUhRsRERHJUxRuREREJE9RuBEREZE8xdHeBdxrVquVM2fO4Onpiclksnc5IiIikgGGYXDp0iWKFi2K2Zz+tZl8F27OnDlDUFCQvcsQERGRO3Dy5EmKFy+ebpt8F248PT0B25vj5eVl52pEREQkI+Li4ggKCkr9Hk9Pvgs3/96K8vLyUrgRERHJZTLSpUQdikVERCRPUbgRERGRPEXhRkRERPKUfNfnRkTkXrNYLCQnJ9u7DJEcz9nZ+bbDvDNC4UZEJJsYhkFkZCQxMTH2LkUkVzCbzYSGhuLs7HxX51G4ERHJJv8GG39/f9zd3TVxqEg6/p1kNyIiguDg4Lv6+6JwIyKSDSwWS2qwKVSokL3LEckV/Pz8OHPmDCkpKTg5Od3xedShWEQkG/zbx8bd3d3OlYjkHv/ejrJYLHd1HoUbEZFspFtRIhmXVX9fFG5EREQkT7FruFm9ejVt27alaNGimEwm5syZc9tjVq5cSc2aNXFxcaF06dJMnDgx2+sUERGR3MOu4ebKlStUq1aNMWPGZKj90aNHad26Nc2aNWP79u307duXF154gcWLF2dzpSIikp+EhIQwYsSIDLefOHEiPj4+2VbP9d5//30CAgIyfFEgP7JruGnVqhVDhgzhkUceyVD7sWPHEhoayrBhw6hQoQK9e/fm8ccf56uvvsrmSjMmPPoyR89dsXcZIiJ37LnnnsNkMt3waNmypb1Lyxa3CiV///03L774Ypa+1vXvp5eXF3Xq1GHu3LmZOse+ffv44IMPGDduHBEREbRq1SpLa8wrclWfmw0bNtC8efM021q0aMGGDRtueUxiYiJxcXFpHtlh0e5IWo9cQ7/p20mxWLPlNURE7oWWLVsSERGR5vHLL7/Yu6x7ys/PL1tGuk2YMIGIiAg2b95Mw4YNefzxx9m1a1eGjz98+DAA7du3JzAwEBcXlzuqI6/PmJ2rwk1kZCQBAQFptgUEBBAXF8fVq1dveszQoUPx9vZOfQQFBWVLbVWLe+PsaGb7yRjGrT6SLa8hIrmXYRjEJ6XY5WEYRqZqdXFxITAwMM2jYMGCgK3fo7OzM2vWrElt//nnn+Pv709UVBQATZs2pXfv3vTu3Rtvb28KFy7Mu+++m6aOixcv0qVLFwoWLIi7uzutWrXi0KFDqfv/vaKyePFiKlSogIeHR2rout73339PhQoVcHV1pXz58nzzzTep+44dO4bJZGL27Nk0a9YMd3d3qlWrlvoL8cqVK+nWrRuxsbGpV1Tef/994MbbUsOHD6dKlSoUKFCAoKAgevXqxeXLlzP1vgL4+PgQGBhI2bJl+eijj0hJSWHFihWp+0+ePEnHjh3x8fHB19eX9u3bc+zYMcB2O6pt27aAbSbf60cWZeR9mD59Ok2aNMHV1ZWpU6fe9fv3r3Xr1tG0aVPc3d0pWLAgLVq04OLFi4BtYr6hQ4cSGhqKm5sb1apVY9asWZl+3zIrz0/iN2jQIPr375/6PC4uLlsCTlEfN95vW4nXZ+5gxNKD3F/enwpFvLL8dUQkd7qabKHie/bpH7j3wxa4O2fNP/dNmzalb9++dO7cmR07dnDkyBHeffddZs6cmeaXz0mTJtG9e3c2bdrE5s2befHFFwkODqZHjx6A7fbXoUOHmDdvHl5eXrz11ls8/PDD7N27N3Xytvj4eL788kumTJmC2Wzm2Wef5Y033kj9Yp46dSrvvfceo0ePpkaNGmzbto0ePXpQoEABunbtmlrLO++8w5dffkmZMmV455136NSpE+Hh4TRo0IARI0bw3nvvceDAAQA8PDxu+nObzWZGjhxJaGgoR44coVevXgwYMCBNGMiMlJQUfvjhB+Da3C7Jycm0aNGCsLAw1qxZg6OjI0OGDKFly5bs3LmTN954g5CQELp165Ym5GX0fRg4cCDDhg2jRo0aqQHnbt4/R0dHtm/fzgMPPMDzzz/P119/jaOjIytWrEidp2bo0KH89NNPjB07ljJlyrB69WqeffZZ/Pz8aNKkyR29dxmRq8JNYGBg6m8G/4qKisLLyws3N7ebHuPi4nLHl+0y69GaxVi4O5Kl+6J4fcYO5rzSEGfHXHVxTESE+fPn3/Al//bbb/P2228DMGTIEJYsWcKLL77I7t276dq1K+3atUvTPigoiK+++gqTyUS5cuXYtWsXX331FT169EgNNevWraNBgwaA7Qs6KCiIOXPm8MQTTwC2L/uxY8dSqlQpAHr37s2HH36Y+hqDBw9m2LBhPProowCEhoayd+9exo0bl+bL+Y033qB169YAfPDBB1SqVInw8HDKly+Pt7c3JpOJwMDAdN+Tvn37pv45JCSEIUOG0LNnz0yHm06dOuHg4MDVq1exWq2EhITQsWNHAKZPn47VauX7779PvSozYcIEfHx8WLlyJQ899FBq/6Dr683o+9C3b9/UNln1/n3++efUrl07zftQqVIlwNYt5JNPPmHp0qWEhYUBULJkSdauXcu4ceMUbv4VFhbGH3/8kWbbkiVLUt80ezOZTHzyaGW2fHWBvRFxjF5+iP4PlbN3WSKSA7g5ObD3wxZ2e+3MaNasGd9++22abb6+vql/dnZ2ZurUqVStWpUSJUrcdFBH/fr109w2CQsLY9iwYVgsFvbt24ejoyP16tVL3V+oUCHKlSvHvn37Ure5u7unBhuAIkWKEB0dDdhG2x4+fJju3bunXg0C2xURb2/vNLVUrVo1zTkAoqOjKV++fMbeEGDp0qUMHTqU/fv3ExcXR0pKCgkJCcTHx2eqb85XX31F8+bNOXLkCP369WPkyJGp7+2OHTsIDw/H09MzzTEJCQmpfW3+KzPvQ+3ate/ouPTev+3bt6eG0f8KDw8nPj6eBx98MM32pKQkatSocdNjsopdw83ly5cJDw9PfX706FG2b9+Or68vwcHBDBo0iNOnTzN58mQAevbsyejRoxkwYADPP/88y5cvZ8aMGSxYsMBeP8IN/D1dGdKhCq/8vJUxKw/zQIUAqgX52LssEbEzk8mUZbeGsluBAgUoXbp0um3Wr18PwIULF7hw4QIFChTI8jr+u7aQyWRK7bfzb3+X8ePHpwlJAA4OacPc9ef5N3BZrRkf+HHs2DHatGnDyy+/zMcff4yvry9r166le/fuJCUlZSrcBAYGUrp0aUqXLs2ECRNSb8X5+/tz+fJlatWqlXrb7Xp+fn43PV9m3ofrP6Osev9uddfk+tdYsGABxYoVS7Mvu++o2PWeyebNm6lRo0Zqguvfvz81atTgvffeAyAiIoITJ06ktg8NDWXBggUsWbKEatWqMWzYML7//ntatLDPb0O30rpqEdpULYLFavD6zB0kJN/dGhkiIjnJ4cOH6devX+oXY9euXW8ICxs3bkzz/K+//qJMmTI4ODhQoUIFUlJS0rQ5f/48Bw4coGLFihmqISAggKJFi3LkyJHUsPDvIzQ0NMM/i7Oz823XMdqyZQtWq5Vhw4ZRv359ypYty5kzZzL8GrdSt25datWqxccffwxAzZo1OXToEP7+/jf8TP+9mvKvO30fsur9q1q1KsuWLbvpvooVK+Li4sKJEydueI3sGtzzL7v+GtG0adN0e/HfbPbhpk2bsm3btmysKmt81L4yfx25QHj0ZYYvOcjbD1ewd0kiIhmSmJhIZGRkmm2Ojo4ULlwYi8XCs88+S4sWLejWrRstW7akSpUqDBs2jDfffDO1/YkTJ+jfvz8vvfQSW7duZdSoUQwbNgyAMmXK0L59e3r06MG4cePw9PRk4MCBFCtWjPbt22e4zg8++IDXXnsNb29vWrZsSWJiIps3b+bixYtpBpKkJyQkhMuXL7Ns2TKqVauGu7v7DVdiSpcuTXJyMqNGjaJt27asW7eOsWPHZrjO9PTt25dHHnmEAQMG8Mwzz/DFF1/Qvn17PvzwQ4oXL87x48eZPXs2AwYMoHjx4jc9x52+D1nx/g0aNIgqVarQq1cvevbsibOzMytWrOCJJ56gcOHCvPHGG/Tr1w+r1cp9991HbGws69atw8vLK02/nixn5DOxsbEGYMTGxmb7ay3ZE2mUeGu+ETJwvrHp6Plsfz0RyTmuXr1q7N2717h69aq9S8mUrl27GsANj3LlyhmGYRgffPCBUaRIEePcuXOpx/z666+Gs7OzsX37dsMwDKNJkyZGr169jJ49expeXl5GwYIFjbffftuwWq2px1y4cMHo3Lmz4e3tbbi5uRktWrQwDh48mLp/woQJhre3d5rafvvtN+O/X1tTp041qlevbjg7OxsFCxY0GjdubMyePdswDMM4evSoARjbtm1LbX/x4kUDMFasWJG6rWfPnkahQoUMwBg8eLBhGIZRokQJ46uvvkptM3z4cKNIkSKptU6ePNkAjIsXL96y3v8CjN9++y3NNqvVapQvX954+eWXDcMwjIiICKNLly5G4cKFDRcXF6NkyZJGjx49Ur+zbvYe3Mn7kJXv38qVK40GDRoYLi4uho+Pj9GiRYvU98VqtRojRowwypUrZzg5ORl+fn5GixYtjFWrVt30PUrv701mvr9NhpHJCRByubi4OLy9vYmNjcXLK/uHar8xcweztpyiRCF3FvZplGvuuYvI3UlISODo0aOEhobi6upq73LuqaZNm1K9evVMLV8gAun/vcnM97fGKWez99pWpKi3K8fPx/Ppwv32LkdERCTPU7jJZl6uTnz+eDUAJm84zrrwc3auSEREJG9TuLkH7itTmM71SwAwYNZO4hLy9poeIpK/rVy5UrekxK4Ubu6Rga3KE+zrzumYq3z0+157lyMiIpJnKdzcIwVcHPnyiWqYTDBzyyn+3BN5+4NEREQk0xRu7qG6ob682KgkAANn7yL6UoKdKxIREcl7FG7usf4PlaVCES8uXEliwKyd6U5iKCIiIpmncHOPuTg68PVT1XF2NLPywFl+2nji9geJiIhIhinc2EHZAE8GtrStRvvxgr2ER1+2c0UiIrmDyWRizpw5d3WO5557jg4dOmRJPZIzKdzYyXMNQmhUpjAJyVb6Td9OUkrGV6gVkXzEaoGja2DXLNt/rdm/EO/Zs2d5+eWXCQ4OxsXFhcDAQFq0aMG6deuy/bVFsoLWArATs9nEF49Xo8WI1ew6HcvIZYd4o0U5e5clIjnJ3nmw6C2Iu24Faq+i0PIzqNgu2172scceIykpiUmTJlGyZEmioqJYtmwZ58+fz7bXFMlKunJjR4Hergx9tAoA36wM5+9jF+xckYjkGHvnwYwuaYMNQFyEbfveednysjExMaxZs4bPPvuMZs2aUaJECerWrcugQYNo184WqIYPH06VKlUoUKAAQUFB9OrVi8uXr91enzhxIj4+PsyfP59y5crh7u7O448/Tnx8PJMmTSIkJISCBQvy2muvYbFcuxIVEhLCRx99RKdOnShQoADFihVjzJgx6dZ78uRJOnbsiI+PD76+vrRv355jx46l7rdYLPTv3x8fHx8KFSrEgAEDNJAjH1C4sbOHqxThsZrFsRrQb/p2Lmn2YpG8yTAg6UrGHglxsHAAtgW5bziR7T+L3rK1y8j5MvFl7uHhgYeHB3PmzCExMfGmbcxmMyNHjmTPnj1MmjSJ5cuXM2DAgDRt4uPjGTlyJNOmTWPRokWsXLmSRx55hD/++IM//viDKVOmMG7cOGbNmpXmuC+++IJq1aqxbds2Bg4cSJ8+fViyZMlN60hOTqZFixZ4enqyZs0a1q1bh4eHBy1btiQpKQmAYcOGMXHiRH788UfWrl3LhQsX+O233zL8fkjupFXBc4BLCcm0+noNpy5e5fFaxfnyiWr2LklE7tINqxsnXYFPitqnmLfPgHOBDDf/9ddf6dGjB1evXqVmzZo0adKEp556iqpVq960/axZs+jZsyfnztnWzps4cSLdunUjPDycUqVKAdCzZ0+mTJlCVFQUHh4eALRs2ZKQkBDGjh0L2K7cVKhQgYULF6ae+6mnniIuLo4//vgDsHUo/u233+jQoQM//fQTQ4YMYd++fZhMJgCSkpLw8fFhzpw5PPTQQxQtWpR+/frx5ptvApCSkkJoaCi1atW6647JkvW0Knge4unqxPCO1TGbYNaWU/yxK8LeJYlIPvbYY49x5swZ5s2bR8uWLVm5ciU1a9Zk4sSJACxdupQHHniAYsWK4enpSefOnTl//jzx8fGp53B3d08NNgABAQGEhISkBpt/t0VHR6d57bCwsBue79u376Z17tixg/DwcDw9PVOvOPn6+pKQkMDhw4eJjY0lIiKCevXqpR7j6OhI7dq17/i9kdxBHYpziLolvPmkRgzrt+9l9uyD1Ap6kQCfjP+mJSI5nJO77QpKRhxfD1Mfv327Z2ZBiQYZe+1McnV15cEHH+TBBx/k3Xff5YUXXmDw4ME0bdqUNm3a8PLLL/Pxxx/j6+vL2rVr6d69O0lJSbi7217LyckpzflMJtNNt1mtdz5S9PLly9SqVYupU6fesM/Pz++Ozyu5n8JNTvDPiIin4s7wlDNgwPlRo7E+Ohxzpfb2rk5EsoLJlPFbQ6Xut42Kiovg5v1uTLb9pe4Hs0NWVnlLFStWZM6cOWzZsgWr1cqwYcMwm20X/2fMmJFlr/PXX3/d8LxChQo3bVuzZk2mT5+Ov7//LW9TFClShI0bN9K4cWPAdltqy5Yt1KxZM8tqlpxHt6Xs7RYjIgqmnMM0s2u2jYgQkRzM7GAb7g2A6T87/3ne8tNsCTbnz5/n/vvv56effmLnzp0cPXqUmTNn8vnnn9O+fXtKly5NcnIyo0aN4siRI0yZMiW1z0xWWLduHZ9//jkHDx5kzJgxzJw5kz59+ty07TPPPEPhwoVp3749a9as4ejRo6xcuZLXXnuNU6dOAdCnTx8+/fRT5syZw/79++nVqxcxMTFZVq/kTAo39mS12EY83OQ3M7MJDMMgacGAezJpl4jkMBXbQcfJ4FUk7Xavorbt2TTPjYeHB/Xq1eOrr76icePGVK5cmXfffZcePXowevRoqlWrxvDhw/nss8+oXLkyU6dOZejQoVn2+q+//jqbN2+mRo0aDBkyhOHDh9OiRYubtnV3d2f16tUEBwfz6KOPUqFCBbp3705CQkLqlZzXX3+dzp0707VrV8LCwvD09OSRRx7JsnolZ9JoKXs6ugYmtblts6tPz8WtbNPsr0dEskx6oz4yxWqx9cG5HAUeAbY+NvfoVtS9FhISQt++fenbt6+9SxE7yarRUupzY0+XozLU7NfVW3hW4UYkfzI7QGgje1chkqvotpQ9eQRkqNn8I1bmbj+dzcWIiIjkDbpyY08lGtxmRATEOQewKaE8u3/bTY2gggQXyvyQThGR3OD6ZRNE7oau3NhTuiMibAo07k2tkEJcTkzh1WnbSLZo9XAREZH0KNzY261GRDi42P6zaRwj2xbHy9WRHSdjGL7koB2KFJE7lc/GbIjclaz6+6JwkxNUbAd9d0PX+fDYD7b/9t8HhUpD3CmKLHqBLzqUB2DsqsOsPXTOzgWLyO38Oxvv9UsSiEj6/l3w1MHh7kYEaih4TnbuEIx/ABJjofqzvG19iZ83ncTP04VFfRpRyMPF3hWKSDoiIiKIiYnB398fd3f31MUdReRGVquVM2fO4OTkRHBw8A1/XzLz/a1wk9OFL7OtMWNYSWo+hNabqnIo+jLNyvnx43N19I+lSA5mGAaRkZGaEVckg8xmM6GhoTg7O9+wT+EmHbku3ABs+AYWDwKTmZOtJvLAPGeSUqy816Yiz98Xau/qROQ2LBYLycnJ9i5DJMdzdnZOXbPsvxRu0pErw41hwLzesO0ncPFibu3J9FkWj7ODmdm9GlC5mLe9KxQREclWmfn+Vofi3MBkgtbDIag+JMbRbt/rtC/nTpLFSu+ft3IpQb8RioiI/EvhJrdwdIEnfwLvIEwXDvMlXxHs7cyx8/EMnL1Lw01FRET+oXCTm3j4QadfwKkATsdXMavUfBzNJhbsjOCnjSfsXZ2IiEiOoHCT2wRWgUfHAeC/dyITqu4F4KPf97L7dKw9KxMREckRFG5yowptodk7ANx38FNeDo0iyWLlFfW/ERERUbjJtRq/CZUewWRN5s2YIdTyusTx8/EM/FX9b0REJH9TuMmtTCZo/w0UqYb56nl+KvAV3uYEFuyK4Ke/jtu7OhEREbtRuMnNnN3hqZ+hgD9uF/czt+hkTFj5aP4+9b8REZF8S+Emt/Mubgs4Di6EnFvJqICFqf1v4tT/RkRE8iGFm7wgqA60GwlAm9ipdPHc/E//m53qfyMiIvmOwk1eUe0paPAaAO9bx1DD8Qh/7IpkivrfiIhIPqNwk5c0fx/KtMBsSeSnAiPx4yJD5u9j1yn1vxERkfxD4SYvMTvAY99D4XIUSIxmuvcoTJYEXp66hZj4JHtXJyIick8o3OQ1rl62JRpcfSiZuJ9RBSZw6mI8/aZvx2pV/xsREcn7FG7yokKloONkMDnwkGUVvZ3ms+LAWUYtD7d3ZSIiItlO4SavKtkEWn0GwOsO03jAvIURyw6y8kC0nQsTERHJXgo3eVndHlD7eUwYfOP6DaU5Rd/p2zl5Id7elYmIiGQbhZu8rtXnENIIF+tVJrsNh/gL9Jq6lYRki70rExERyRYKN3mdgxM8MQl8SlDEGsl415HsO32eD37fY+/KREREsoXCTX5QoBA8PR2cPajDHgY7TeaXTSeZsfmkvSsTERHJcgo3+YV/BdscOJjo7LCUZx2W8O6c3VpgU0RE8hyFm/ykXCt44D0APnCaRE3rLl6euoXYeC2wKSIieYfCTX5zXz+o0hEHrIx1/hrTxWP0nb5NE/yJiEieoXCT35hMthXEi9XCm8v86Pwlfx84rgn+REQkz1C4yY+c3OCpn8GzCKVNp/naaQwjl+1n2b4oe1cmIiJy1xRu8ivPQFvAcXTlAYdtvOkwnb7TtnP47GV7VyYiInJXFG7ys2I1of0YAHo6/k7z5BW8OHkzlxLUwVhERHIvhZv8rsrj0Oh1AD5zHo/Xue30m75DHYxFRCTXUrgRaPY/KNcaZ1L4znk4u/ft5etlh+xdlYiIyB1RuBEwm+HRceBfET9TLOOdhzFu2W4W74m0d2UiIiKZpnAjNi6e0OkXcC9EFfMxvnAaR//p2zgUdcnelYmIiGSKwo1cUzAEOk7BMDvS1uEvull+5cUpW4i9qg7GIiKSeyjcSFohDTG1HgbAG04zKXthJX2mbcOiDsYiIpJLKNzIjWo9B3VfAmC40zdEHdzM8CUH7FuTiIhIBincyM21+ARKNqWAKZHxzsOYtmIrC3ZG2LsqERGR21K4kZtzcITHJ4BvSYqbzvGt8wgGzdzCnjOx9q5MREQkXQo3cmvuvtBpOoaLJ3XNB3jbGE+PiX8TfSnB3pWJiIjcksKNpM+vLKbHJ2CYzDzluJIWV+bw0pQtJCRb7F2ZiIjITSncyO2VeRDTgx8B8D+nn/A4tZq3Z+/CMDSCSkREch67h5sxY8YQEhKCq6sr9erVY9OmTem2HzFiBOXKlcPNzY2goCD69etHQoJuk2S7sFeg+jM4YDDaaRTbtm9m7Koj9q5KRETkBnYNN9OnT6d///4MHjyYrVu3Uq1aNVq0aEF0dPRN2//8888MHDiQwYMHs2/fPn744QemT5/O22+/fY8rz4dMJmjzFQTVw9t0he+dvmTs4s0s2Rtl78pERETSsGu4GT58OD169KBbt25UrFiRsWPH4u7uzo8//njT9uvXr6dhw4Y8/fTThISE8NBDD9GpU6d0r/YkJiYSFxeX5iF3yNEFnvwJvIpTyhzBKMdR9J+2mX0Rek9FRCTnsFu4SUpKYsuWLTRv3vxaMWYzzZs3Z8OGDTc9pkGDBmzZsiU1zBw5coQ//viDhx9++JavM3ToULy9vVMfQUFBWfuD5Dce/tDpZwwndxo77KKvdQovTNrMucuJ9q5MREQEsGO4OXfuHBaLhYCAgDTbAwICiIy8+WrUTz/9NB9++CH33XcfTk5OlCpViqZNm6Z7W2rQoEHExsamPk6ePJmlP0e+VKQapg7fAtDdcSENLi2k55QtJKZoBJWIiNif3TsUZ8bKlSv55JNP+Oabb9i6dSuzZ89mwYIFfPTRR7c8xsXFBS8vrzQPyQKVOkDTQQB84vQDnNjA27N3awSViIjYnaO9Xrhw4cI4ODgQFZW2Q2pUVBSBgYE3Pebdd9+lc+fOvPDCCwBUqVKFK1eu8OKLL/LOO+9gNueqrJb7NR4A0Xtx2juXcc4jaLe1EN8FePBSk1L2rkxERPIxu6UBZ2dnatWqxbJly1K3Wa1Wli1bRlhY2E2PiY+PvyHAODg4AOiKgT2YzdDhWwisQiFTHOOdhzNy0Xb+3HPz24oiIiL3gl0vdfTv35/x48czadIk9u3bx8svv8yVK1fo1q0bAF26dGHQoEGp7du2bcu3337LtGnTOHr0KEuWLOHdd9+lbdu2qSFH7jHnAvDULxgF/KhoPs6Xjt/Sd9pWdp6KsXdlIiKST9ntthTAk08+ydmzZ3nvvfeIjIykevXqLFq0KLWT8YkTJ9Jcqfnf//6HyWTif//7H6dPn8bPz4+2bdvy8ccf2+tHEACfIExPTsWY1IZW/M3BlBl0n+TMnFcaUszHzd7ViYhIPmMy8tn9nLi4OLy9vYmNjVXn4qy2bSrM7QXAK0mvEe73IDNfDsPL1cnOhYmISG6Xme9v9cCVrFPjGQjrDcAw57E4Ru/klalbSbZY7VyYiIjkJwo3krUe/BBKN8eVJL53Hs7+Q+G8N1dDxEVE5N5RuJGsZXaAx3+EwmUpYjrPOOfhzN50mHGrtcimiIjcGwo3kvVcvaHTNHD1oaY5nE+cfuDThfv4Y1eEvSsTEZF8QOFGskehUvDERDA58JjDGno4LKDf9O1sPXHR3pWJiEgep3Aj2adUM2g5FIBBTr/QwLqFHpM2c+J8vJ0LExGRvEzhRrJX3RehZlfMGIxxHk3B+CN0m7iJ2Phke1cmIiJ5lMKNZC+TCR7+Eko0xJ2rTHQZzvmzkfSYspmEZK0iLiIiWU/hRrKfozN0nAw+wRQnkrEuo9h6NJr+M7ZjtWqIuIiIZC2FG7k3ChS2jaBy9qC+aTeDnX7ij12RfLRgr+bAERGRLKVwI/dOQCV49DvARGeHP3naYRkT1h3j+zVH7V2ZiIjkIQo3cm+Vbw33/w+AIc6TqG/ey8d/7GPu9tN2LkxERPIKhRu59xq9DpUfx2yk8KPbSIJMUbwxcwfrw8/ZuzIREckDFG7k3jOZoP1oKFoDd0sc0z2/xsVyhZembGHvmTh7VyciIrmcwo3Yh5MbPPUzeARSNOkYE73HcyUxiW4TN3E65qq9qxMRkVxM4Ubsx6uoLeA4uFA7cSOfeP9GVFwiXX/cREx8kr2rExGRXErhRuyreC3bLSrgqcRf6VpgI+HRl+kxWZP8iYjInVG4Efur2hHu6wfAYMYS5nqMv49dpM+0baRYrHYuTkREchuFG8kZ7n8PyrbCbElkktsIghxiWLwnind+261J/kREJFMUbiRnMJvhsfHgVwHnq9HM9/8GN1MS0zef5LNFB+xdnYiI5CIKN5JzuHhCp1/AzRfvi7tZHDodMBi76jDjVh22d3UiIpJLKNxIzuIbaltk0+xI8JmFzKiwHoChC/cz4++Tdi5ORERyA4UbyXlCG0GrzwGoe3QMX1Y5BcDA2TtZvCfSnpWJiEguoHAjOVOd7lCnBwCPHfuA1yonYjXg1V+2seHweTsXJyIiOZnCjeRcLYdCaGNMyVfod24wj5ZzISnFSo/Jm9l9Otbe1YmISA6lcCM5l4MTPDEJCoZiijnBl8YwGoZ6cjkxha4/buLI2cv2rlBERHIghRvJ2dx9odM0cPbEfGI9E/xnULmoJ+evJNH5h01ExGodKhERSUvhRnI+//Lw+I+ACecdU5hWfRclCxfgdMxVOv+wifOXE+1doYiI5CAKN5I7lH0IHvwAAI8V7zL9wQSKeLsSHn2Zzj9sIvZqsp0LFBGRnELhRnKPBq9B1afAsOC38EWmP+5HYQ9n9kbE8dyETVxJTLF3hSIikgMo3EjuYTJB26+heB1IiCV4cXemPlsBbzcntp2I4YVJWklcREQUbiS3cXKFJ6eCVzE4d5Bya/sw+blaeLg4suHIeV7+aQtJKVpJXEQkP8t0uJkwYQLx8fHZUYtIxngGwFM/g6MbhC+l2v7h/NC1Nq5OZlYcOEu/6dtJsSjgiIjkV5kONwMHDiQwMJDu3buzfv367KhJ5PaKVocO39j+vGE09WIXMa5zbZwdzCzYFcFbv+7CajXsWqKIiNhHpsPN6dOnmTRpEufOnaNp06aUL1+ezz77jMhIrfkj91jlR6HxANuf5/eliesRRj1dAweziV+3nmLwvD0YhgKOiEh+k+lw4+joyCOPPMLcuXM5efIkPXr0YOrUqQQHB9OuXTvmzp2L1apbAnKPNB0E5duAJQmmP0OLYskM71gNkwmm/HWcTxfuV8AREcln7qpDcUBAAPfddx9hYWGYzWZ27dpF165dKVWqFCtXrsyiEkXSYTbDI+MgoDJcOQvTOtG+og9DH6kCwLjVRxi5LNzORYqIyL10R+EmKiqKL7/8kkqVKtG0aVPi4uKYP38+R48e5fTp03Ts2JGuXbtmda0iN+fiAZ1+AffCELkL5rzMU7WL826bigB8tfQg36xUwBERyS9MRiav2bdt25bFixdTtmxZXnjhBbp06YKvr2+aNtHR0QQGBubI21NxcXF4e3sTGxuLl5eXvcuRrHR8A0xqC9Zk2+2qpgMZsyKcLxYfAODth8vzYuNSdi5SRETuRGa+vx0ze3J/f39WrVpFWFjYLdv4+flx9OjRzJ5a5O6UCIM2X8G83rByKPiV55VmHbBYDYYvOcgnf+zHbDLxQqOS9q5URESyUaZvSzVp0oSaNWvesD0pKYnJkycDYDKZKFGixN1XJ5JZNTtD/V62P//WEyJ28NoDZXjtgTIADFmwj4nrFLxFRPKyTN+WcnBwICIiAn9//zTbz58/j7+/PxZLzp7+Xrel8gFLCvzcEQ4vA6/i8OIKjAJ+DPvzIKNX2PrefNS+Ep3DQuxbp4iIZFhmvr8zfeXGMAxMJtMN20+dOoW3t3dmTyeS9Rwc4fEfoVBpiDsF057BZEni9YfK0rOJrc/Nu3P38PPGE3YuVEREskOG+9zUqFEDk8mEyWTigQcewNHx2qEWi4WjR4/SsmXLbClSJNPcfKDTNBj/AJzaBPP7YWo/hrdalsNitTJ+zVHe/m0XDmZ4sk6wvasVEZEslOFw06FDBwC2b99OixYt8PDwSN3n7OxMSEgIjz32WJYXKHLHCpeBJybA1Mdh+1Twr4ipQW/efrgCFiv8uO4oA2fvwmwy8UTtIHtXKyIiWSTTfW4mTZrEk08+iaura3bVlK3U5yYf+utbWDQQTGZ4egaUeRDDMHh/3h4mbTiOyQTDO1bjkRrF7V2piIjcQrb2uenatWuuDTaST9XrCTU6g2GFWc/D2YOYTCbeb1eJZ+sHYxjw+owdzN56yt6ViohIFsjQbSlfX18OHjxI4cKFKViw4E07FP/rwoULWVacSJYwmaD1cDgfDic2wC9PwgvLMLn78mG7ylgN+HnjCV6fuYMUq0FH3aISEcnVMhRuvvrqKzw9PVP/nF64EcmRHJ2h4xQY3wwuHIFZ3eCZXzE7ODKkfWXMJvjprxMMmLUTi9WgU111MhYRya0y3ecmt1Ofm3wuchf80AKSr0Ddl+DhzwHbFAcf/L6XieuPAZoHR0Qkp8ny5Rfi4uIy/OIKDJKjBVaBR8fB9Gdh0zgIqAi1nsNkMjG4bUWcHEyMX3OUd+fuIcVq0K1hqL0rFhGRTMpQuPHx8bntrah/J/fL6TMUi1ChLTR7B1Z8DAteh0JlIKQhJpOJtx+ugKODmW9XHuaD3/eSYjHo0VhrUYmI5CYZCjcrVqzI7jpE7q3Gb0L0XtjzG8zoDD1WQMESmEwmBrQoh5PZxMjl4Xz8xz6SrVZ6NS1t74pFRCSD1OdG8q+keJjQEiJ2gH8l6L4YXDxTd3+99BBfLT0IQP8Hy6YuvikiIvdets5zA7BmzRqeffZZGjRowOnTpwGYMmUKa9euvZPTidiHszs89Qt4BED0Hpj9Elitqbv7NC/Dmy3KATB8yUGG/3mAfPa7gIhIrpTpcPPrr7/SokUL3Nzc2Lp1K4mJiQDExsbyySefZHmBItnKuxg8ORUcXODAAlgxJM3uV5qV5u2HywMwcnk4ny7cr4AjIpLDZTrcDBkyhLFjxzJ+/HicnJxStzds2JCtW7dmaXEi90RQHWg30vbnNcNg16w0u19sXIr32lQEYNzqI/xvzm6sVgUcEZGcKtPh5sCBAzRu3PiG7d7e3sTExGRFTSL3XrWnoMFrtj/PfQVOb0mz+/n7Qhn6aBVMJpj672zGFutNTiQiIvaW6XATGBhIeHj4DdvXrl1LyZIaMiu5WPP3oUwLSEmAac9AXESa3Z3qBjPiyeo4mk38tu00r/y8lcQUTX0gIpLTZDrc9OjRgz59+rBx40ZMJhNnzpxh6tSpvPHGG7z88svZUaPIvWF2gMe+h8Ll4FIETH8Gkq+madK+ejHGPlsLZ0czi/dE8cKkzVxNUsAREclJMj0U3DAMPvnkE4YOHUp8fDwALi4uvPHGG3z00UfZUmRW0lBwua3zh+H7B+DqRajSER79zrb45nXWhZ+zBZtkC3VCCvLDc3XwcnW6xQlFRORuZeb7+47nuUlKSiI8PJzLly9TsWJFPDw87qjYe03hRjLkyCqY8ggYFtvtqvv63dBky/ELPDfhby4lpFClmDeTn69LwQLO975WEZF8INvnuQFwdnamYsWK1K1bN9cEG5EMK9kEWn1m+/PSD+DAwhua1Crhyy896uNbwJldp2N58rsNRMcl3ONCRUTkvzJ05ebRRx/N8Alnz559VwVlN125kUyZ3w82/wjOHtB9iW2hzf8Ij77EM99vJCoukRKF3Pmpez2CfN3tUKyISN6V5VduvL29Ux9eXl4sW7aMzZs3p+7fsmULy5Ytw9vb++4qF8lpWn0OIY0g6TL88hRcOX9Dk9L+nsx8qQFBvm4cPx/P42PXczDqkh2KFRERuIM+N2+99RYXLlxg7NixODg4AGCxWOjVqxdeXl588cUX2VJoVtGVG8m0K+dhfDOIOW4LOp1/A4cbOw9HxibQ+YeNHIq+jLebEz8+V4daJQraoWARkbwnWzsU+/n5sXbtWsqVK5dm+4EDB2jQoAHnz9/4m21OonAjdyR6H3zf3HYFp/bz0OarmzaLiU+i28S/2XYiBjcnB755tibNyvnf42JFRPKebO1QnJKSwv79+2/Yvn//fqxWzdgqeZR/BdscOJhsfXA2jQerBY6usS3XcHQNWC34uDsz9YV6NCnrx9VkCz0mbWbOttP2rl5EJF9xzOwB3bp1o3v37hw+fJi6desCsHHjRj799FO6deuW5QWK5BjlWkHzwbD0ffhjAKwcCvHXXan0KgotP8O9Yju+71qbN2buYO72M/Sdvp2L8Ul0axhqt9JFRPKTTN+WslqtfPnll3z99ddERNimpy9SpAh9+vTh9ddfT+2Hk1PptpTcFcOAia3h+Lqb7Pxnor+Ok6FiO6xWgw/n72Xi+mMA9G5WmtcfKovpPxMCiojI7WXrbSmz2cyAAQM4ffo0MTExxMTEcPr0aQYMGHBHwWbMmDGEhITg6upKvXr12LRpU7rtY2JieOWVVyhSpAguLi6ULVuWP/74I9OvK3JHDCtcOHKrnbb/LBoIVgtms4nBbSvyxkNlARi9Ipx35uzGohXFRUSy1R1P4gfg5eV1V1c/pk+fTv/+/Rk8eDBbt26lWrVqtGjRgujo6Ju2T0pK4sEHH+TYsWPMmjWLAwcOMH78eIoVK3bHNYhkyvH1tnWnbsmAuNO2doDJZKL3/WX45JEqmE3w88YT9NaCmyIi2SpDfW5q1qzJsmXLKFiwIDVq1Ej3svrWrVsz/OLDhw+nR48eqX11xo4dy4IFC/jxxx8ZOHDgDe1//PFHLly4wPr163Fysg3FDQkJSfc1EhMTSUxMTH0eFxeX4fpEbnA56o7aPV0vmILuTvSZtp2FuyOJ+fFvxnWppfWoRESyQYbCTfv27XFxcQGgQ4cOWfLCSUlJbNmyhUGDBqVuM5vNNG/enA0bNtz0mHnz5hEWFsYrr7zC3Llz8fPz4+mnn+att9665S2xoUOH8sEHH2RJzSJ4BNxxu1ZViuDt5kSPyZvZcOQ8HcduYEK3OhTxdsviIkVE8rcMhZuCBQtiNtvuYHXr1o3ixYunPr9T586dw2KxEBCQ9ksgICDgpkPNAY4cOcLy5ct55pln+OOPPwgPD6dXr14kJyczePDgmx4zaNAg+vfvn/o8Li6OoKCgu6pd8rESDWyjouIiSO1j818uXhBU/6a7GpQuzIyeYTw34W/2R17i0W/WM7FbXcoFemZfzSIi+UyGEkr//v1Tb+eEhoZy7ty5bC3qVqxWK/7+/nz33XfUqlWLJ598knfeeYexY8fe8hgXF5fUvkF320dIBLMDtPxnQU1ucXs2MQ5+fR6Srtx0d6Wi3vzWqwGl/AoQEZvA42PXs+Fwzp78UkQkN8lQuClatCi//vorx48fxzAMTp06xYkTJ276yKjChQvj4OBAVFTavglRUVEEBgbe9JgiRYpQtmzZNLegKlSoQGRkJElJSRl+bZG7UrGdbbi3V5G0272KQe3uYHaCffPghxYQc/O/E8ULuvPryw2oE1KQSwkpdP1xE/N2nLkHxYuI5H0ZCjf/+9//6Nu3LyVLlsRkMlGnTh1CQ0PTPEJCQggNzfgkZc7OztSqVYtly5albrNarSxbtoywsLCbHtOwYUPCw8PTzIR88OBBihQpgrOzc4ZfW+SuVWwHfXdD1/nw2A+2//bdBW2Gw3PzoYAfRO2C75rCsZvNiQM+7s5M6V6PVpUDSbJYee2XbYxffYRMTj0lIiL/keFJ/C5dusTx48epWrUqS5cupVChQjdtV61atQy/+PTp0+natSvjxo2jbt26jBgxghkzZrB//34CAgLo0qULxYoVY+jQoQCcPHmSSpUq0bVrV1599VUOHTrE888/z2uvvcY777yTodfUJH5yT8SegmlPQ8QOMDvaVhev0/2mTS1Wg4+um+yvW8MQ/te6Ig5mTfYnIvKvzHx/Z3j5BU9PTypXrsyECRNo2LBh6uipu/Hkk09y9uxZ3nvvPSIjI6levTqLFi1K7WR84sSJNB2Xg4KCWLx4Mf369aNq1aoUK1aMPn368NZbb911LSJZyrs4dFsE83rD7l9hQX+I2gOtPrthRXGHfyb7K17QjSEL9jFh3TEiYxP46snquDrl7Bm/RURyokwvv5Db6cqN3FOGAWu/gmUfAgaUaGjrr1Og8E2b/77jDK/P2EGSxUrtEgX5rkttfAvolquISLYuvyAimWAyQaP+0GkaOHva1qT6rhlE7rpp87bVijLp+bp4ujqy+fhFHv1mHUfOXr7HRYuI5G4KNyL3QrmW8MJS8C0JsSfgh4dg79ybNg0rVYjZLzegeEE3jp2P55Fv1vPXEQ0VFxHJKIUbkXvFvzz0WA4lm0FyPMzoAis+getG//2rTIAnv/VqSPUgH2KvJtP5h438uuWUHYoWEcl9Mh1uPvzwQ+Lj42/YfvXqVT788MMsKUokz3IrCM/Mgvqv2J6v+gxmdIbEG289+Xm6MO3F+rSuUoRki8HrM3cw/M8DGiouInIbme5Q7ODgQEREBP7+/mm2nz9/Hn9/fyyWnL3asToUS46x/Wf4vQ9YksC/Ijz1M/jeOFeU1Wrw5Z8H+GblYQDaVSvK549X1UgqEclXsrVDsWEYN10VfMeOHfj6+mb2dCL5V/Wn4bk/bItsRu+F8c3g6OobmpnNJga0LM/nj1XF0Wxi3o4zPPP9Rs5fTrzJSUVEJMPhpmDBgvj6+mIymShbtiy+vr6pD29vbx588EE6duyYnbWK5D1BdeDFlVC0Jly9CJM7wMbvbEPI/6NjnaDUkVRbjl/kkW/WEx6tkVQiIv+V4dtSkyZNwjAMnn/+eUaMGIG3t3fqPmdnZ0JCQm65bEJOottSkiMlX7Xdoto53fa8Zhd4eBg43jjHTXj0JbpN/JuTF67i5erIN8/U4r4yN583R0Qkr8jM93em+9ysWrWKBg0a4OTkdPvGOZDCjeRYhgHrR8HSwWBYITgMOk4BD78bmp67nMiLkzez9URM6gzHneuXuOktYxGRvCDLw01cXFzqieLi4tJtm9MDg8KN5HiHlsCs7pAYC17FodPPUOTGNdsSki0Mmr2L37adBuCZesG8364STg6a4UFE8p4sDzfXj5Aym803/e3w347GGi0lkgXOHYJfnoLz4eDoBh3GQOXHbmhmGAZjVx3h88X7MQyoX9KXb5+pRUEt2SAieUyWh5tVq1bRsGFDHB0dWbVqVbptmzRpkrlq7zGFG8k1rsbAr90hfKnteaPXodn/wHzjlZmle6PoM20bV5IsBPu680PX2pQJ8Ly39YqIZKNs7XOT2yncSK5itcDS92H9SNvzsq3g0e/A9cb/dw9EXqL7pL85dfEqHi6OjOxUnfvLB9zbekVEskm2hpvVq2+ch+N6jRs3zszp7jmFG8mVdkyHea+CJRH8ytsm/CtU6oZm5y8n8vLUrWw6egGTCQa1Kk+PRiXV0VhEcr1sDTfmm1wSv/4fTvW5Eckmp7fAtGfgUgS4+sATE6FUsxuaJaVYeW/ubqb9fRKAx2oW55NHK+PiqBmNRST3ytYZii9evJjmER0dzaJFi6hTpw5//vnnHRctIrdRrJZtwr9itSEhBn56FP769oYJ/5wdzQx9tAqD21bEbIJft57iyXF/ERmbYJeyRUTutSzrc7Nq1Sr69+/Pli1bsuJ02UZXbiTXS06A+f1gx8+259WfhTbDwdHlhqarD56l989biUtIobCHC98+W5M6IVomRURyn2y9cnMrAQEBHDhwIKtOJyK34uQKHb6BFp+AyQzbf4KJbeBS1A1NG5f14/dX76NcgCfnLifS6bu/mPLXca0sLiJ5Wqav3OzcuTPNc8MwiIiI4NNPPyUlJYW1a9dmaYFZTVduJE8JXwazukFCLHgWhaemQrGaNzS7kpjCgFk7WbArAoAnawfxYYdK6ocjIrlGtncoNplMN/zmV79+fX788UfKly+f+YrvIYUbyXPOH4ZfOsG5A+DoCu1GQ9UnbmhmGAbjVh/h80X7sRpQPciHsc/WItDb1Q5Fi4hkTraGm+PHj6d5bjab8fPzw9U1d/wDqXAjeVJCHPz6AhxabHvesA88MBjMN16ZWX3wLK/+so3Yq8nqhyMiuYYm8UuHwo3kWVYLLB8Ca4fbnpd5CB77Hly9b2h6/PwVXpqyhf2Rl3A0mxjcrhLP1gvWfDgikmNla4fi1157jZEjR96wffTo0fTt2zezpxORrGJ2gOaD4bEfbLenDv0J4x+Ac+E3NC1RqACzezWgddUipFgN3p2zmwGzdpKQnLPnqRIRyYhMh5tff/2Vhg0b3rC9QYMGzJo1K0uKEpG7UOVxeH4ReBWD84dg/P3X1qe6jruzI6M71WBgq/KYTTBzyyke/WY9x89fsUPRIiJZJ9Ph5vz583h733iZ28vLi3PnzmVJUSJyl4rWgB4rIKgeJMbC1Cdg/agbJvwzmUz0bFKKKd3rUaiAM3sj4mgzai1L9944rFxEJLfIdLgpXbo0ixYtumH7woULKVmyZJYUJSJZwDMAuv4ONTqDYYU//we/9bRNAvgfDUsXZv5r91Ez2IdLCSm8MHkzny/aT4rFaofCRUTujmNmD+jfvz+9e/fm7Nmz3H///QAsW7aMYcOGMWLEiKyuT0TuhqMLtBsFgVVg0SDYOc12q+rJqeBVJE3TIt5uTHsxjE/+2MfE9cf4ZuVhtp+MYWSnGhT2uHH2YxGRnOqORkt9++23fPzxx5w5cwaAkJAQ3n//fbp06ZLlBWY1jZaSfOvISpj5HFy9CB6Btgn/ite+adN5O84w8NedxCdZCPRyZcwzNahVQsPFRcR+sm0oeEpKCj///DMtWrQgICCAs2fP4ubmhoeHx10Xfa8o3Ei+duEI/PI0nN0HDi7Q9muo3ummTcOjL/HSlC0cPnsFR7OJd1pX4LkGIRouLiJ2ka3z3Li7u7Nv3z5KlChxV0Xai8KN5HuJl2D2S3Bgge15WG9o/gE43HiX+nJiCgN/3cn8nbZlG1pXLcKnj1bB09XpXlYsIpK989zUrVuXbdu23XFxImJnLp7w5E/Q+E3b8w2j4eeOtttV/+Hh4sioTjUY3LYijmYTC3ZG0HbUWnafjr3HRYuIZFymr9zMmDGDQYMG0a9fP2rVqkWBAgXS7K9atWqWFpjVdOVG5Dp7foM5vSA5HnxLQadp4Ff2pk23nrjIqz9v43TMVZwdzLzbpgLP1i+h21Qick9k+8KZN5zkn4U0TSYTFkvOnuFU4UbkPyJ2wrSnIfYkuHjZZjgu+9BNm8bEJ/HGzJ0s3WebB+fhKoF8+lhVvHSbSkSy2T1dOPO/cnpfHIUbkZu4fBZmdIET6wGTbRmHhn3hJldlDMPgx3XH+HThPpItBsG+7ox5uiZVit84uaeISFbRwpnpULgRuYWUJFj4JmyZaHte5QnbHDlObjdtvv1kDL1/3sqpi7bbVG8/XJ6uGk0lItkky8PNvHnzaNWqFU5OTsybNy/dtu3atctctfeYwo3Ibfz9PSx8C6wpUKQ6PPUzeBe7adPYq8kMmLWDxXtst6laVgrks8er4u2m21QikrWyPNyYzWYiIyPx9/e/aZ+b1JOpz41I3nB0je021dULUMDfNroquN5NmxqGwcT1x/jkD9ttquIF3fj6qRrUKlHwHhctInlZlg8Ft1qt+Pv7p/75Vo+cHmxEJINCG8GLK8C/ElyJhkltYOuUmzY1mUx0axjKry83INjXnVMXr9Jx3AZGLz+ExZqv7nqLSA6R6XluRCSfKBgC3f+ECm3BkgTzesPCgWBJuWnzqsV9mP/afbSvXhSL1eDLPw/y9Pi/iIi9em/rFpF8L8PhZvny5VSsWJG4uLgb9sXGxlKpUiVWr16dpcWJiJ25eMATk6HpINvzjd/C1Mcg/sJNm3u5OjHiyeoMe6IaBZwd2Hj0Ai1HrGHR7sh7WLSI5HcZDjcjRoygR48eN73P5e3tzUsvvcRXX32VpcWJSA5gNkPTgdBxCjgVsC3AOf5+iN530+Ymk4nHahVnwWuNqFrcm9iryfT8aQtv/7aLq0m6dS0i2S/D4WbHjh20bNnylvsfeughtmzZkiVFiUgOVLGd7TaVTzBcPArfN4cDC2/ZPKRwAWb1bMBLTUoC8PPGE7QbvZZ9ETde/RURyUoZDjdRUVE4Od16eKejoyNnz57NkqJEJIcKrAw9VkJII0i6DL90gtVfwi0GXTo7mhnUqgI/da+Hn6cLh6Iv037MOiauO0o+m2JLRO6hDIebYsWKsXv37lvu37lzJ0WKFMmSokQkBytQCDr/BnVeAAxY/hHMeh6S4m95yH1lCrOoTyPuL+9PUoqV93/fy3MT/iY6LuHe1S0i+UaGw83DDz/Mu+++S0LCjf8YXb16lcGDB9OmTZssLU5EcigHJ2g9DNqMALMj7JkNP7aAmJO3PKSQhws/dK3N+20r4uJoZtXBs7QYsZpFuyPuXd0iki9kePmFqKgoatasiYODA71796ZcuXIA7N+/nzFjxmCxWNi6dSsBAQHZWvDd0iR+Ilns+HqY3hniz4F7YduEfyXC0j3kUNQl+k7fzp4ztv43j9UszvvtKuKpBThF5BaybW2p48eP8/LLL7N48eLU++Umk4kWLVowZswYQkND767ye0DhRiQbxJywrSweuQvMTtD6S6j1XLqHJKVYGbH0IN+uOoxhQPGCbgzvWJ26ob73pmYRyVWyfeHMixcvEh4ejmEYlClThoIFc8806wo3Itkk6QrM6QV759ie1+kBLYfabmGl4+9jF+g3fTunLl7FZIKeTUrRr3lZnB01x6iIXKNVwdOhcCOSjQwD1nwJy4fYnoc0gicm2Tohp+NSQjIf/r6XmVtOAVCxiBcjnqpO2QDP7K5YRHKJLF9bSkQkQ0wmaPymbSVxZw84tgbGN4OoPeke5unqxBdPVGPsszUp6O7E3og42oxay/drjmh9KhHJNIUbEcl65VvDC0tt61PFHIfvH4R9v9/2sJaVi7C4X2OalvMjKcXKkAX7eOq7DRw7dyX7axaRPEPhRkSyh38F6LECQhtD8hWY/iys/Ays1vQP83RlwnN1GPpoFQo4O/D3sYu0+noNk9Yfw6qrOCKSAQo3IpJ93H3h2d+gXk/b85WfwMyukHg53cNMJhOd6gazqG9jwkoW4mqyhcHz9vDsDxs5eeHWkwWKiIDCjYhkNwdHaPUZtBttGya+b55twr+Lx297aJCvO1NfqMeH7Svh5uTA+sPnaTliNT9vPKHlG0TklhRuROTeqNkZnlsABfwhareto/Gxtbc9zGw20SUshIV9GlEnpCBXkiy8/dsuuk74m4jYq/egcBHJbRRuROTeCa4HL66AItUh/jxMbg9/f5+hQ0MKF2Dai2H8r3UFXBzNrD54loe+Ws2MzSd1FUdE0lC4EZF7y7s4dFsIlR8DawoseB3m94OUpNse6mA28UKjkix4rRHVg3y4lJDCgFk76fLjJk5dVF8cEbFRuBGRe8/ZHR77AR4YDJhg848wpQNcOZehw0v7ezCrZxgDW5XHxdHMmkPneOir1RpRJSKAZii2dzkicmAR/PoCJF0C72Do9DMEVsnw4UfOXuatX3fy97GLANQJKchnj1WlpJ9HdlUsInagGYpFJPco1xJ6LAPfkhB7An54CPbMyfDhJf08mP5iGB+2r5Q6L07Lr9fw7crDpFjSn1NHRPImhRsRsT+/ctBjOZS6H5LjbXPhLP/4thP+/evfEVWL+zWmUZnCJKVY+WzRfh75Zj37IuKyuXgRyWkUbkQkZ3ArCE/PhLDetuerP4cZnSHxUoZPUbygO5Ofr8sXj1fFy9WRXadjaTtqLcP+PEBCsiWbCheRnEZ9bkQk59n+M/zeByxJ4F/RthCnb2imThEdl8C7c3ezeE8UACULF+DjR6oQVir9FcpFJGfKzPe3wo2I5Ewn/4bpz8DlKNtVnScmQckmmTqFYRgs3B3J+/P2EH0pEYAnahXn7YcrULCAc3ZULSLZRB2KRST3C6oDL66EojXh6kWY8ghs/A4y8fuYyWTi4SpFWPp6E56tHwzAzC2naD58FXO2ndbkfyJ5lK7ciEjOlnzVdotq53Tb85pd4OFh4Jj5Ky+bj11g0OxdHIq2LdzZqExhPu5QheBC7llZsYhkA92WSofCjUguZBiwfhQsHQyGFYLqw5NTwMM/06dKSrHy3erDjFweTlKKFVcnM30eKMsLjUJxctDFbJGcSuEmHQo3IrnYoaUw63lIjAWv4vDUVCha/Y5OdeTsZd75bTcbjpwHoHygJ0M6VKZ2iG8WFiwiWUXhJh0KNyK53LlD8EsnOH8IHN2gwxjbOlV3wDAMZm05xcd/7CMmPhmAjrWLM7BVBXzV4VgkR1GHYhHJuwqXgReWQukHIeWq7UrO0g8yPOHf9UwmE0/UDmJZ/yZ0rF0cgBmbT3H/sJVM23RC61SJ5FI5ItyMGTOGkJAQXF1dqVevHps2bcrQcdOmTcNkMtGhQ4fsLVBEchY3H3h6OjTsY3u+djhM6wQJdzYbcSEPFz5/vBqzeoZRPtCTmPhkBs7exWNj17PnTGzW1S0i94Tdw8306dPp378/gwcPZuvWrVSrVo0WLVoQHR2d7nHHjh3jjTfeoFGjRveoUhHJUcwO8OCH8Mh34OACBxfB983h/OE7PmXtEF/mv3of/2tdgQLODmw7EUPbUWv54Pc9XEpIzsLiRSQ72b3PTb169ahTpw6jR48GwGq1EhQUxKuvvsrAgQNveozFYqFx48Y8//zzrFmzhpiYGObMmZOh11OfG5E86PQWmPYMXIoAVx94YoJtnaq7EBmbwEcL9rJgZwQA/p4uvNO6Au2qFcVkMmVB0SKSGbmmz01SUhJbtmyhefPmqdvMZjPNmzdnw4YNtzzuww8/xN/fn+7du9/2NRITE4mLi0vzEJE8plgt24R/xetAQgz89Bhs+CZTE/79V6C3K2Oersnk5+sSUsid6EuJ9Jm2nU7j/2J/pP4dEcnJ7Bpuzp07h8ViISAgIM32gIAAIiMjb3rM2rVr+eGHHxg/fnyGXmPo0KF4e3unPoKCgu66bhHJgTwDoet8qP6MbS6cxYNg7iuQknhXp21c1o9FfRvTr3lZXBzN/HXkAq1HruX9eXuIjdetKpGcyO59bjLj0qVLdO7cmfHjx1O4cOEMHTNo0CBiY2NTHydPnszmKkXEbpxcof0YaDEUTGbYPhUmtoZLkWC1wNE1sGuW7b/WjK8S7urkQJ/mZVjavwktKwVisRpMXH+MZsNW8sumE1g0qkokR3G054sXLlwYBwcHoqKi0myPiooiMDDwhvaHDx/m2LFjtG3bNnWb9Z/hn46Ojhw4cIBSpUqlOcbFxQUXF5dsqF5EciSTCcJ6gV85mNUNTv0NY+qDgyNcOXutnVdRaPkZVGyX4VMH+boztnMt1h46x/u/7yE8+jKDZu/i540n+KB9JWoGF8yGH0hEMsuuV26cnZ2pVasWy5YtS91mtVpZtmwZYWFhN7QvX748u3btYvv27amPdu3a0axZM7Zv365bTiJyTekHoMcK8CwKCRfTBhuAuAiY0QX2zsv0qe8rU5iFfRrxv9YV8HRxZNfpWB79Zj2vz9hB9KWELPoBRORO2fXKDUD//v3p2rUrtWvXpm7duowYMYIrV67QrVs3ALp06UKxYsUYOnQorq6uVK5cOc3xPj4+ADdsFxGhYAhwq1tGBmCCRQOhfGvb0PJMcHIw80KjkrSvXozPFu1n1pZT/Lr1FIv3RPLq/aV5rmEILo6ZO6eIZA27h5snn3ySs2fP8t577xEZGUn16tVZtGhRaifjEydOYDbnqq5BIpJTHF9vGx5+SwbEnba1C72zObP8PF348olqPFMvmPfn7WHHqViGLtzPz5tOMKhVBVpUCtDQcZF7zO7z3NxrmudGJB/ZNQt+vf2UEbQfAzWeveuXs1oNft16ii8WHyD6km2UVv2SvrzbpiKVinrf9flF8rNcM8+NiEi28gi4fRuARYNg9ZeQcHdLLZjNtrWqVrzRlFfvL506dLzNqLUM/HUnZy/d3bB0EckYXbkRkbzLaoERlW2dh2/V98bkAMY/w8JdvKHei1DvZShQ6K5f/tTFeD5bdIDfd5wBwMPFkV7NSvF8w1BcndQfRyQzMvP9rXAjInnb3nm2UVFA2oDzTz+YxyeANdl25ebcAds2J3eo/Tw0eNU2OeBd2nL8Ah/O38eOkzEAFC/oxsBW5WldpYj644hkkMJNOhRuRPKhvfNg0VsQd+baNq9i0PLTa/PcWK2w/3dbyIncadvm4AI1O9tWH/cJvqsSrFaDuTtO89nCA0TG2YaLVw/y4Z3WFagT4ntX5xbJDxRu0qFwI5JPWS22UVGXo2x9cUo0uPnwb8OAQ0tgzZdwcqNtm9kRqj4F9/WDwqXvqoz4pBTGrz7KuNWHiU+y3Q57qGIAb7UqTyk/j7s6t0hepnCTDoUbEckQw4Bja2H1F3B0lW2byQwVO0Cj1yHw7ubWir6UwIilh5i26QRWAxzMJp6uG0yf5mUo7KFZ1UX+S+EmHQo3IpJpJ/+2Xck5uOjatnKtofHrthXJ70J49CU+XbifpfuiASjg7EDPJqV4oVFJ3JzV6VjkXwo36VC4EZE7FrET1gyDvXNJ7Zxc6n5o9AaENLyrU284fJ6hC/ex85RtOHqAlwv9HyzLYzWL4+igWTtEFG7SoXAjInft7EFYOxx2zrg2jDw4DBq/AaUesC3eeQesVoPfd57hi8UHOHXxKgCl/ArwZotytKgUqJFVkq8p3KRD4UZEsszFY7B2BGyfCpYk27Yi1aHxm1DuYbjDpWMSUyxM2XCc0SvCiYlPBqBakA9vtSxHg1KFs6R0kdxG4SYdCjcikuXizsD6UbB5AqTYrrjgX9HW8bjSI5lelDP1tAnJjF99hO/XHOVqsu0KUaMyhRnQojxVims5B8lfFG7SoXAjItnm8ln46xvYNB6SLtm2+ZaE+/pD1SfB0fmOTnv2UiKjlx/i500nSLbY/sluXbUIrz9YlpIaPi75hMJNOhRuRCTbXb1oCzh/fWP7M4BXcbivr22BTie3OzrtifPxDF9ygLk7zmD8M3y8Y+0gXr2/NEV97uycIrmFwk06FG5E5J5JvAxbJthuWV2Osm3zCICw3rblHVzu7KrL3jNxfPnnAZbvtw0fd3Yw83S9YHo1K4W/p2tWVS+SoyjcpEPhRkTuueQE2DYF1n0NsSdt29wKQv1eUPdFcPO5o9P+fewCXyw+wKajFwBwdTLTtUEILzUuhW+BO7sFJpJTKdykQ+FGROwmJQl2TrcNI79wxLbN2RPq9oCwV6BA5kdCGYbBuvDzfPnnAbb/szBnAWcHut8XSvdGJfF2c8rCH0DEfhRu0qFwIyJ2Z7XAnt9sEwJG77Vtc3SD2t1sK5F7Fc30KQ3DYMWBaIb9eZA9Z+IA8HJ15MXGJXmuYSgeLo5Z+ROI3HMKN+lQuBGRHMNqhYMLbetXndlm2+bgDNWfsXU+LhhyB6c0+HNvJMOXHORg1GUAfAs406NRSbqElaCAQo7kUgo36VC4EZEcxzDg8HJY/SWcWG/bZnKAqh1tw8j9ymb6lBarwfydZxix9BBHz10BoKC7Ez0al6RLWIiu5Eiuo3CTDoUbEcnRjq2zLdJ5ePk/G0xQsb1tQsAiVTN9uhSLlbnbzzB6RXhqyPFxd0q9kuPpqj45kjso3KRD4UZEcoXTW2D1MDiw4Nq2si1ti3QG1cn06VIsVubtOMPo5eEcuS7kvHBfKF0bhCjkSI6ncJMOhRsRyVWi9tg6Hu/5DQyrbVtoE9sinSGNMr1Ip8Vq8PuOM4xcfogjZ20hx9vNie73hfJcwxC8FHIkh1K4SYfCjYjkSufCYe1XsHMaWFNs24Lq2a7klHnwjkLO/J1nGLnsEIf/CTmeLo50aVCC5xuGUsjDJat/ApG7onCTDoUbEcnVYk7YJgPcOgUsibZtgVVtV3LKt830SuQWq8GCXRGMWnaIQ9G20VVuTg50qhvMi41LEuitGY8lZ1C4SYfCjYjkCZcir61Enmy78oJfedvoqsqPgUPmRkPZhpBHMWZFOLtOxwK2ZR0eq1Wcl5uUIriQe1b/BCKZonCTDoUbEclTrpyHjd/Cxu8g0RZKKBgC9/WDap3AMXO3lwzDYPWhc4xZHs6mY7ZlHRzMJtpVK0qvpqUoE+CZxT+ASMYo3KRD4UZE8qSE2Gsrkceft23zKgYNXoOaXcA581deNh29wOgV4aw+eBawdet5sEIAPZuWomZwwaysXuS2FG7SoXAjInla0hXYMtF2y+pShG1bAT/b2lW1u4Nr5v/d23kqhjErwlm8Jyp1W71QX3o2LUXTsn6YMtmZWeROKNykQ+FGRPKFlETYPtU2wirmhG2bqw/U6wn1XgJ330yf8lDUJcatPsKcbadJsdq+OsoHevJSk5K0qVoUJ4fMdWYWyQyFm3Qo3IhIvmJJhl2zbHPlnD9k2+bsAXW6Q1hv8PDP9CkjYq/yw5qj/LLpBFeSLAAU83HjhUahPFknCHdnLe0gWU/hJh0KNyKSL1ktsHeuLeRE7bZtc3SFml2h4WvgXTzTp4yNT2bKX8eYsO4Y568kAbb1qzqHhdAlrASFNVeOZCGFm3Qo3IhIvmYYcHCxbSXy05tt28xOUL2TbYSVb8lMnzIh2cKsLacYv+YIx8/HA+DsaObRGsV4oVEopf01wkrunsJNOhRuRESwhZyjq2wrkR9bY9tmMkPlx22LdPqXz/QpLVaDhbsjGL/mKDtOxqRub1bOjx6NShJWqpA6H8sdU7hJh8KNiMh/nPjLFnLCl1zbVqGtbWmHotUzfTrDMNh8/CLjVx9hyb4o/v2WqVTUix6NStK6ahF1PpZMU7hJh8KNiMgtnNlm65Oz7/dr20o/aFvaIbj+HZ3y6Lkr/Lj2KDO3nCQh2bbwZ6CXK881DKFTnWC83bVQp2SMwk06FG5ERG4jeh+sGQ67Z11biTykkS3khDbJ9CKdABevJDF143Emrj/Oucu2NbHcnBx4tGYxujUMUb8cuS2Fm3Qo3IiIZND5w7BuBGz/BazJtm3FakPjN6FsizsKOYkpFuZuP8OPa4+yP/JS6vZGZQrzfMNQmpT1w2xWvxy5kcJNOhRuREQyKfYUrBsJWydBSoJtW0AVaNQfKrYHs0OmT2kYBn8ducCEdUfT9MspWbgAXRuE8Hit4hRw0Xw5co3CTToUbkRE7tDlaNgwGv7+AZIu27YVKmMbXVXlcXC4s/4zJy/EM2n9MaZvPsmlhBQAPF0c6VgniC5hJShRqEBW/QSSiyncpEPhRkTkLsVfgI3jYONYSIixbfMJts2TU/2ZTK9E/q8riSn8uvUUE9cd48i5K4DtzleTsn50CStB07L+umWVjyncpEPhRkQkiyResl3F2TAarthWDsezCDR4FWo9B853dsXFajVYdegsk9cfY+XBs6m3rIJ93Xm2fjAdawfh4+6cNT+D5BoKN+lQuBERyWJJ8bB1MqwfCXGnbdvcC9lWIq/zArh63/Gpj527wk9/HWfG5pPE/XPLysXRTPvqRekSFkLlYnd+bsldFG7SoXAjIpJNUhJhxy+2lcgvHrNtc/G2rUJe/+U7Won8X1eTLMzdfprJG46zNyIudXvNYB+erV+Ch6sUwdUp8x2bJfdQuEmHwo2ISDazpMCe2bZZj88dsG1zKgC1u9luWXkG3vGpDcNgy/GLTN5wnIW7I0i22L7CfNydeLxmcTrVC6aUn0dW/BSSwyjcpEPhRkTkHrFaYf982yKdkTtt2xxcoGYXaNgHfILu6vTRlxKYvukk0/4+yemYq6nbw0oW4pn6wTxUMRBnRy3zkFco3KRD4UZE5B4zDDi0BNZ8CSc32raZHaHaU3BffyhU6q5Ob7EarDoYzdS/TrDiQDTWf77VCns407F2EJ3qBhPk636XP4TYm8JNOhRuRETsxDDg2FrblZyjq2zbTGao9IhtrpyASmnbWy1wfD1cjgKPACjR4LYTBp6Oucr0TSeY9vdJoi/ZlnkwmaBRGT+eqhNE8woBupqTSyncpEPhRkQkBzj5t+1KzsFF17aVaw2NX4ditWDvPFj0FsSdubbfqyi0/Awqtrvt6ZMtVpbti2LqxhOsOXQudXuhAs48Vqs4HWsHUdpffXNyE4WbdCjciIjkIBE7bSuR750L/PN1FFAZonbfpPE/E/h1nJyhgPOvE+fjmb75BDM3n0q9mgNQN8SXJ+sE8XCVIrg5a6RVTqdwkw6FGxGRHOjsQVg7HHZMB6zpNDTZruD03ZXpNa1SLFZWHDjL9L9PsHz/tb45nq6OdKhejCfrBFGpqBemO1gQVLKfwk06FG5ERHKwXTPh1xdu367rfAhtdMcvExmbwKwtJ5m++SQnL1wbaVU+0JMnagfRoXpRCnnc2TISkj0UbtKhcCMikoPtmgW/dr99u8ZvQpOB4HB3K4dbrQYbjpznl00n+HNvFEkptqtGTg4m7i/vzxO1gmhazg9HB3VCtjeFm3Qo3IiI5GBH18CkNhlr6+YLZVtC+dZQ6n5wvrvh3jHxSfy+4wwzt5xi56nY1O2FPVx4tGYxnqhVnDIBnnf1GnLnFG7SoXAjIpKDWS0wojLERZDawfi/nNzBwfnaiuQAjm5Qqpkt6JRtCQUK31UZ+yPjmLX5FL9tO835K0mp26sV9+bRmsVpW60ovgW0eOe9pHCTDoUbEZEcbu88mNHlnyfXf0VdN1qq3MNw8i/Yv8A2C3LMieuamSGoPpR/2NbuLiYJTLZYWbE/mplbTrFifzQp//RCdjSbaFben8dqFqNZeX9cHDXaKrsp3KRD4UZEJBe46Tw3xaDlpzcOAzcMiNpjCzoHFkDEjrT7/SrYruiUfxiK1rTN6ncHzl1OZN72M8zedordp68t3unt5kTbakV4pEZxagb7aLRVNlG4SYfCjYhILnEHMxQDEHMSDiy0XdE5vg6sKdf2eRaFcq1sYSekETje2a2lg1GXmL31NHO2nSYyLiF1e0ghdx6pUZwONYpSolCBOzq33JzCTToUbkRE8pGrF23rWu1fAOFLIenytX0uXlDmQVvQKf0guGb+O8FiNdhw+Dyzt55i4e5IriZbUvdVD/KhQ/WitK5aFD9PDSu/Wwo36VC4ERHJp5IT4Nga2xWdAwttV4T+ZXaC0MbX+ul4Fc306a8kprBodyRztp9mXfi51EkCHcwmGpYuTIfqRXmoUiAeLnc3fD2/UrhJh8KNiIhgtcLpLf8EnT/g3MG0+4vW/KefTmvwK5/pfjrRlxKYvyOCudtPs+O6YeWuTmaaVwigffViNCnrp0U8M0HhJh0KNyIicoNzh/4ZebUATv1NmlFaviVtV3PKt4Gguple9uHouSvM3X6audvPcPTcldTtXq6OtKwcSNtqRQkrWUgTBd6Gwk06FG5ERCRdl6Lg4ELY/wccWQmWa4tt4l4YyrW0BZ2STcHJLcOnNQyDXadjmbPtDL/vPMPZ6xbxLFTAmVZVAmlTtSh1QnxxMGvE1X8p3KRD4UZERDIs8TIcXma7onNwESRcu8WEk7ttZuR/Jw50983waS1Wg01HLzB/5xkW7o7kwnUTBQZ4ufBwlSK0rVaUGkEaWv4vhZt0KNyIiMgdsSTbhqbvX2DrpxN78to+k4NtqHq5h22dkguGZPi0yRYr6w+fZ/6OMyzaE8mlhGtD14v5uNGqciCtqhShRpAP5nx8RUfhJh0KNyIictcMAyJ32m5d7V8AUbvS7g+obLuiU+5hKFItwx2SE1MsrDl4jt93nmHJ3ijik64NLS/i7UqrykVoXTWQGkEF813QUbhJh8KNiIhkuYvHbVdz9i+wXd0xroUSvIrbruaUbw0lGoKDU4ZOmZBsYeWBs/yxK4Jl+6K4cl3QCfRypWXlQFpXLUKt4PwRdBRu0qFwIyIi2Sr+AhxcbFsKInwZJMdf2+fqDWVa2MJO6ebgkrFVxhOSLaw+aAs6S/dFcznx2q0rf08XHqoUQMtKRahX0henPDrqSuEmHQo3IiJyzyRfhSOrbPPpHFwEV85e2+fgDKFNrt2+8gzI0Cn/vXX1x64IluyN4tJ1QcfbzYnmFQJoUSmAxmX9cHXKOwt6KtykQ+FGRETswmqxzaHz73w6Fw5ft9MExWv/E3Rag1/ZDJ0yKcXK+sPnWLwnkj/3RHH+ulFX7s4ONC3nR4tKgTQr74+Xa8Zuh+VUCjfpULgRERG7MwzbrMj759s6JZ/enHZ/oTL/9NNpA8Vqg/n2t5osVoPNxy6waE8ki3dHcib22oKeTg4m6pcsxEMVA2heMYAi3hmfnyenyHXhZsyYMXzxxRdERkZSrVo1Ro0aRd26dW/advz48UyePJndu3cDUKtWLT755JNbtv8vhRsREclx4iJsHZIP/GG7jWVNvravgP+1lcxDm4CT621PZxgGu0/HsWhPBAt3R3Lk7JU0+6sW9+bBCgE8WCmAcgGeuWIunVwVbqZPn06XLl0YO3Ys9erVY8SIEcycOZMDBw7g7+9/Q/tnnnmGhg0b0qBBA1xdXfnss8/47bff2LNnD8WKFbvt6ynciIhIjpYQZ1vBfP8C24rmiddPHFgAyjS33boq+xC4FczQKcOjL7NkbxRL9kay7WQM13/zB/m68WCFQB6sGEDtkII5tkNyrgo39erVo06dOowePRoAq9VKUFAQr776KgMHDrzt8RaLhYIFCzJ69Gi6dOly2/YKNyIikmukJMHxtf/00/kDLp25ts/kACENbbeuyj0MPkEZOuXZS4ks2xfFkr1RrA0/R2KKNXWfl6sjTcr507yCP03K+uHj7pzVP9EdyzXhJikpCXd3d2bNmkWHDh1St3ft2pWYmBjmzp1723NcunQJf39/Zs6cSZs2bW7Yn5iYSGLitfU74uLiCAoKUrgREZHcxTDgzLZr8+lE7027P7DqtZXMAypnaOLA+KQUVh88x5K9Uaw4EJ1mGQgHs4laJQryQHl/HqgQQCm/Ana9fZVrws2ZM2coVqwY69evJywsLHX7gAEDWLVqFRs3brztOXr16sXixYvZs2cPrq433od8//33+eCDD27YrnAjIiK52oUjtqs5B/6AExvAuHYFBp9g262r8q0hOAwcHG97OovVYPvJiyzbF82yfdEciLqUZn+JQu48UD6A+8v7Uye0IC6O93aYeb4JN59++imff/45K1eupGrVqjdtoys3IiKS5105Z5s4cP8COLwcUq5e2+dW0LawZ7mHofQD4FwgQ6c8eSGe5fujWbY/mr8OnyfJci08uTs70KBUYZqV96NpOX+K+WT/6KtcE27u5rbUl19+yZAhQ1i6dCm1a9fO8Guqz42IiORpSfFwZMW1qzpXL1zb5+gKJZv+s5J5K/Dwy9ApLyemsPbQOZbti2LlwbOcvZSYZn+5AE+alvejWTl/apXInk7JuSbcgK1Dcd26dRk1ahRg61AcHBxM7969b9mh+PPPP+fjjz9m8eLF1K9fP1Ovp3AjIiL5hiUFTm78p5/OfLh47LqdJgiqd20+nUKlMnRKq9Vgb0QcKw9Es+LAWbaduIj1uiTh6eLIAxX8+erJ6lnaRydXhZvp06fTtWtXxo0bR926dRkxYgQzZsxg//79BAQE0KVLF4oVK8bQoUMB+Oyzz3jvvff4+eefadiwYep5PDw88PDwuO3rKdyIiEi+ZBgQvc926+rAAlvn5OsVLvdPh+Q2ULRGhiYOBIiJT2L1oXOs3B/NyoNnuXAliUZlCjOle70sLT9XhRuA0aNHp07iV716dUaOHEm9erY3pWnTpoSEhDBx4kQAQkJCOH78+A3nGDx4MO+///5tX0vhRkREBIg9fW3k1bE1YL22RhUegbYrOuVaQ2gjcHTJ0CmtVoOdp2OxWA1qlcjYHDwZlevCzb2kcCMiIvIfV2P+mThwPhxaCknXjZRy9rRNHFi+jW0lczefW5/HaoHj6+FyFHgEQIkGYM6aUVUKN+lQuBEREUlHSiIcXWO7dbX/D7gceW2f2RFCGl1bydz7upUB9s6DRW9B3HUTDXoVhZafQcV2d12Wwk06FG5EREQyyGq19c3ZP992C+vs/rT7i9aw3bpyLgCL3wb+Gyn+6VDccfJdBxyFm3Qo3IiIiNyhc+HXruic3MiNYeZmTLYrOH133dUtqsx8f+fM1bFEREQk5ylcGhr2ge6L4Y2D0G4UFK9zm4MMiDtt64tzj9x+PmYRERGR//Lwh5pdwMkdTv19+/aXo7K/pn/oyo2IiIjcOY+ArG2XBRRuRERE5M6VaGDrU8OtZiM2gVcxW7t7ROFGRERE7pzZwTbcG7gx4PzzvOWnWTbfTYZKumevJCIiInlTxXa24d5eRdJu9yqaJcPAM0sdikVEROTuVWxnm9wvm2YozgyFGxEREckaZgfbWlT2LsPeBYiIiIhkJYUbERERyVMUbkRERCRPUbgRERGRPEXhRkRERPIUhRsRERHJUxRuREREJE9RuBEREZE8ReFGRERE8pR8N0OxYRgAxMXF2bkSERERyah/v7f//R5PT74LN5cuXQIgKCjIzpWIiIhIZl26dAlvb+9025iMjESgPMRqtXLmzBk8PT0xmf67NPvdiYuLIygoiJMnT+Ll5ZWl55asp88r99FnlvvoM8tdcvLnZRgGly5domjRopjN6feqyXdXbsxmM8WLF8/W1/Dy8spx/1PIrenzyn30meU++sxyl5z6ed3uis2/1KFYRERE8hSFGxEREclTFG6ykIuLC4MHD8bFxcXepUgG6PPKffSZ5T76zHKXvPJ55bsOxSIiIpK36cqNiIiI5CkKNyIiIpKnKNyIiIhInqJwIyIiInmKwk0WGTNmDCEhIbi6ulKvXj02bdpk75LkH0OHDqVOnTp4enri7+9Phw4dOHDgQJo2CQkJvPLKKxQqVAgPDw8ee+wxoqKi7FSxXO/TTz/FZDLRt2/f1G36vHKe06dP8+yzz1KoUCHc3NyoUqUKmzdvTt1vGAbvvfceRYoUwc3NjebNm3Po0CE7Vpy/WSwW3n33XUJDQ3Fzc6NUqVJ89NFHadZtytWfmSF3bdq0aYazs7Px448/Gnv27DF69Ohh+Pj4GFFRUfYuTQzDaNGihTFhwgRj9+7dxvbt242HH37YCA4ONi5fvpzapmfPnkZQUJCxbNkyY/PmzUb9+vWNBg0a2LFqMQzD2LRpkxESEmJUrVrV6NOnT+p2fV45y4ULF4wSJUoYzz33nLFx40bjyJEjxuLFi43w8PDUNp9++qnh7e1tzJkzx9ixY4fRrl07IzQ01Lh69aodK8+/Pv74Y6NQoULG/PnzjaNHjxozZ840PDw8jK+//jq1TW7+zBRuskDdunWNV155JfW5xWIxihYtagwdOtSOVcmtREdHG4CxatUqwzAMIyYmxnBycjJmzpyZ2mbfvn0GYGzYsMFeZeZ7ly5dMsqUKWMsWbLEaNKkSWq40eeV87z11lvGfffdd8v9VqvVCAwMNL744ovUbTExMYaLi4vxyy+/3IsS5T9at25tPP/882m2Pfroo8YzzzxjGEbu/8x0W+ouJSUlsWXLFpo3b566zWw207x5czZs2GDHyuRWYmNjAfD19QVgy5YtJCcnp/kMy5cvT3BwsD5DO3rllVdo3bp1ms8F9HnlRPPmzaN27do88cQT+Pv7U6NGDcaPH5+6/+jRo0RGRqb5zLy9valXr54+Mztp0KABy5Yt4+DBgwDs2LGDtWvX0qpVKyD3f2b5buHMrHbu3DksFgsBAQFptgcEBLB//347VSW3YrVa6du3Lw0bNqRy5coAREZG4uzsjI+PT5q2AQEBREZG2qFKmTZtGlu3buXvv/++YZ8+r5znyJEjfPvtt/Tv35+3336bv//+m9deew1nZ2e6du2a+rnc7N9JfWb2MXDgQOLi4ihfvjwODg5YLBY+/vhjnnnmGYBc/5kp3Ei+8sorr7B7927Wrl1r71LkFk6ePEmfPn1YsmQJrq6u9i5HMsBqtVK7dm0++eQTAGrUqMHu3bsZO3YsXbt2tXN1cjMzZsxg6tSp/Pzzz1SqVInt27fTt29fihYtmic+M92WukuFCxfGwcHhhpEaUVFRBAYG2qkquZnevXszf/58VqxYQfHixVO3BwYGkpSURExMTJr2+gztY8uWLURHR1OzZk0cHR1xdHRk1apVjBw5EkdHRwICAvR55TBFihShYsWKabZVqFCBEydOAKR+Lvp3Mud48803GThwIE899RRVqlShc+fO9OvXj6FDhwK5/zNTuLlLzs7O1KpVi2XLlqVus1qtLFu2jLCwMDtWJv8yDIPevXvz22+/sXz5ckJDQ9Psr1WrFk5OTmk+wwMHDnDixAl9hnbwwAMPsGvXLrZv3576qF27Ns8880zqn/V55SwNGza8YXqFgwcPUqJECQBCQ0MJDAxM85nFxcWxceNGfWZ2Eh8fj9mcNgI4ODhgtVqBPPCZ2btHc14wbdo0w8XFxZg4caKxd+9e48UXXzR8fHyMyMhIe5cmhmG8/PLLhre3t7Fy5UojIiIi9REfH5/apmfPnkZwcLCxfPlyY/PmzUZYWJgRFhZmx6rletePljIMfV45zaZNmwxHR0fj448/Ng4dOmRMnTrVcHd3N3766afUNp9++qnh4+NjzJ0719i5c6fRvn37XDOsOC/q2rWrUaxYsdSh4LNnzzYKFy5sDBgwILVNbv7MFG6yyKhRo4zg4GDD2dnZqFu3rvHXX3/ZuyT5B3DTx4QJE1LbXL161ejVq5dRsGBBw93d3XjkkUeMiIgI+xUtafw33Ojzynl+//13o3LlyoaLi4tRvnx547vvvkuz32q1Gu+++64REBBguLi4GA888IBx4MABO1UrcXFxRp8+fYzg4GDD1dXVKFmypPHOO+8YiYmJqW1y82dmMozrpiMUERERyeXU50ZERETyFIUbERERyVMUbkRERCRPUbgRERGRPEXhRkRERPIUhRsRERHJUxRuREREJE9RuBEREZE8ReFGRERE8hSFGxEREclTFG5E5J5r2rQpffv2tXcZdy2rf44hQ4ZQv379LDufSH6lcCMiN4iMjOTVV1+lZMmSuLi4EBQURNu2bVm2bJm9S0v13HPPYTKZMJlMODk5ERAQwIMPPsiPP/6I1WrN8te7F4Fsx44dVK9ePVtfQyQ/ULgRkTSOHTtGrVq1WL58OV988QW7du1i0aJFNGvWjFdeecXe5aXRsmVLIiIiOHbsGAsXLqRZs2b06dOHNm3akJKSYu/yMk3hRiRrKNyISBq9evXCZDKxadMmHnvsMcqWLUulSpXo378/f/31F5MnT6ZQoUIkJiamOa5Dhw507twZAKvVyueff07p0qVxcXEhODiYjz/++JavabVaGTp0KKGhobi5uVGtWjVmzZp121pdXFwIDAykWLFi1KxZk7fffpu5c+eycOFCJk6cmOHzN23alN69e9O7d2+8vb0pXLgw7777LoZhALarRKtWreLrr79OvVp07Nix1HMPGDAAX19fAgMDef/99zP0Pm/ZsoXGjRvj5uZGjRo12LhxI4cPH1a4EckKhojIP86fP2+YTCbjk08+uWWb+Ph4w9vb25gxY0bqtqioKMPR0dFYvny5YRiGMWDAAKNgwYLGxIkTjfDwcGPNmjXG+PHjU9s3adLE6NOnT+rzIUOGGOXLlzcWLVpkHD582JgwYYLh4uJirFy58pZ1dO3a1Wjfvv1N91WrVs1o1apVhs/fpEkTw8PDw+jTp4+xf/9+46effjLc3d2N7777zjAMw4iJiTHCwsKMHj16GBEREUZERISRkpJiNGnSxPDy8jLef/994+DBg8akSZMMk8lk/Pnnn7d+kw3D2Ldvn+Hp6Wn873//M8LDw41Zs2YZgYGBhtlsNq5cuZLusSJyewo3IpJq48aNBmDMnj073XYvv/xymvAwbNgwo2TJkobVajXi4uIMFxeXNGHmv64PNwkJCYa7u7uxfv36NG26d+9udOrU6ZbnSC/cPPnkk0aFChUyfP4mTZoYFSpUMKxWa+r+t956K/Uc/635+m333Xdfmm116tQx3nrrrVvWbRiGcf/99xudO3dOs+3xxx83ypUrl+5xIpIxjva+ciQiOYfxz22Y2+nRowd16tTh9OnTFCtWjIkTJ6Z28N23bx+JiYk88MADGTpXeHg48fHxPPjgg2m2JyUlUaNGjUz/DGD7OUwmU6bOX79+/dRjAMLCwhg2bBgWiwUHB4dbvlbVqlXTPC9SpAjR0dG3bH/8+HGWL1/O1q1b02x3cnLSLSmRLKJwIyKpypQpg8lkYv/+/em2q1GjBtWqVWPy5Mk89NBD7NmzhwULFgDg5uaWqde8fPkyAAsWLKBYsWJp9rm4uGTqXP/at28foaGh2Xb+6zk5OaV5bjKZ0h2ttX37dhwdHalSpUqa7du2baNr1653XY+IKNyIyHV8fX1p0aIFY8aM4bXXXqNAgQJp9sfExODj4wPACy+8wIgRIzh9+jTNmzcnKCgIsAUkNzc3li1bxgsvvHDb16xYsSIuLi6cOHGCJk2a3PXPsHz5cnbt2kW/fv0ydf6NGzemef7XX39RpkyZ1Ks2zs7OWCyWu67PbDZjtVpJSkrC0dH2T/Aff/zB/v37deVGJIso3IhIGmPGjKFhw4bUrVuXDz/8kKpVq5KSksKSJUv49ttv2bdvHwBPP/00b7zxBuPHj2fy5Mmpx7u6uvLWW28xYMAAnJ2dadiwIWfPnmXPnj107979htfz9PTkjTfeoF+/flitVu677z5iY2NZt24dXl5e6V7NSExMJDIyEovFQlRUFIsWLWLo0KG0adOGLl26ZOr8J06coH///rz00kts3bqVUaNGMWzYsNTXCgkJYePGjRw7dgwPDw98fX3v6P2tVasWTk5OvPnmm7z++uvs3r2bl19+GUDhRiSr2LvTj4jkPGfOnDFeeeUVo0SJEoazs7NRrFgxo127dsaKFSvStOvcubPh6+trJCQkpNlusViMIUOGGCVKlDCcnJyM4ODgNCOw/ts512q1GiNGjDDKlStnODk5GX5+fkaLFi2MVatW3bLGrl27GoABGI6Ojoafn5/RvHlz48cffzQsFkuatrc7f5MmTYxevXoZPXv2NLy8vIyCBQsab7/9dpoOxgcOHDDq169vuLm5GYBx9OjRm3Yybt++vdG1a9d0398pU6YYxYsXN1xdXY3GjRsbAwcONAICAtI9RkQyzmQYGexBKCLyHw888ACVKlVi5MiR9i7lrjRt2pTq1aszYsQIe5ciIllAt6VEJNMuXrzIypUrWblyJd988429yxERSUPhRkQyrUaNGly8eJHPPvuMcuXK2bscEZE0dFtKRERE8hStLSUiIiJ5isKNiIiI5CkKNyIiIpKnKNyIiIhInqJwIyIiInmKwo2IiIjkKQo3IiIikqco3IiIiEieonAjIiIieYrCjYiIiOQp/wfA9MqE8WPEcAAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%matplotlib inline\n", "from matplotlib import pyplot as plt\n", "\n", "# Exponential reference\n", "xx = np.linspace(0, fids['cycle_depth'].max())\n", "plt.plot(xx, (1 - 5e-3) ** (4 * xx), label=r'Exponential Reference')\n", "\n", "\n", "def _p(fids):\n", " plt.plot(fids['cycle_depth'], fids['fidelity'], 'o-', label=fids.name)\n", "\n", "\n", "fids.name = 'Sampled'\n", "_p(fids)\n", "\n", "plt.ylabel('Circuit fidelity')\n", "plt.xlabel('Cycle Depth $d$')\n", "plt.legend(loc='best')" ] }, { "cell_type": "markdown", "metadata": { "id": "9715be97ec17" }, "source": [ "## Optimize `PhasedFSimGate` parameters\n", "\n", "We know what circuits we requested, and in this simulated example, we know what coherent error has happened. But in a real experiment, there is likely unknown coherent error that you would like to characterize. Therefore, we make the five angles in `PhasedFSimGate` free parameters and use a classical optimizer to find which set of parameters best describes the data we collected from the noisy simulator (or device, if this was a real experiment)." ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "execution": { "iopub.execute_input": "2025-05-30T10:25:24.743232Z", "iopub.status.busy": "2025-05-30T10:25:24.742989Z", "iopub.status.idle": "2025-05-30T10:25:24.873673Z", "shell.execute_reply": "2025-05-30T10:25:24.872907Z" }, "id": "ed89fa788b84" }, "outputs": [], "source": [ "import multiprocessing\n", "\n", "pool = multiprocessing.get_context('spawn').Pool()" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "execution": { "iopub.execute_input": "2025-05-30T10:25:24.877383Z", "iopub.status.busy": "2025-05-30T10:25:24.876709Z", "iopub.status.idle": "2025-05-30T10:25:49.035332Z", "shell.execute_reply": "2025-05-30T10:25:49.034542Z" }, "id": "33a7946b11f0" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Simulating with theta = -0.785 zeta = 0 chi = 0 gamma = 0 phi = 0 \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Loss: 0.531\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Simulating with theta = -0.685 zeta = 0 chi = 0 gamma = 0 phi = 0 \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Loss: 0.581\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Simulating with theta = -0.785 zeta = 0.1 chi = 0 gamma = 0 phi = 0 \n", "Loss: 0.564\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Simulating with theta = -0.785 zeta = 0 chi = 0.1 gamma = 0 phi = 0 \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Loss: 0.553\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Simulating with theta = -0.785 zeta = 0 chi = 0 gamma = 0.1 phi = 0 \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Loss: 0.595\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Simulating with theta = -0.785 zeta = 0 chi = 0 gamma = 0 phi = 0.1 \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Loss: 0.564\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Simulating with theta = -0.745 zeta = 0.04 chi = 0.04 gamma = -0.1 phi = 0.04 \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Loss: 0.61\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Simulating with theta = -0.775 zeta = 0.01 chi = 0.01 gamma = 0.05 phi = 0.01 \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Loss: 0.554\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Simulating with theta = -0.881 zeta = 0.044 chi = 0.044 gamma = 0.02 phi = 0.044 \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Loss: 0.601\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Simulating with theta = -0.734 zeta = 0.011 chi = 0.011 gamma = 0.005 phi = 0.011 \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Loss: 0.543\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Simulating with theta = -0.761 zeta = 0.0484 chi = 0.0484 gamma = 0.022 phi = -0.0916 \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Loss: 0.572\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Simulating with theta = -0.779 zeta = 0.0121 chi = 0.0121 gamma = 0.0055 phi = 0.0521 \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Loss: 0.544\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Simulating with theta = -0.759 zeta = -0.0868 chi = 0.0532 gamma = 0.0242 phi = 0.0292 \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Loss: 0.578\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Simulating with theta = -0.779 zeta = 0.0533 chi = 0.0133 gamma = 0.00605 phi = 0.00731 \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Loss: 0.539\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Simulating with theta = -0.77 zeta = 0.0206 chi = 0.0446 gamma = -0.0434 phi = 0.0182 \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Loss: 0.551\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Simulating with theta = -0.754 zeta = 0.0388 chi = -0.0676 gamma = -0.0107 phi = 0.0354 \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Loss: 0.564\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Simulating with theta = -0.777 zeta = 0.0097 chi = 0.0581 gamma = -0.00268 phi = 0.00886 \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Loss: 0.535\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Simulating with theta = -0.772 zeta = 0.0139 chi = -0.00676 gamma = 0.0489 phi = 0.0135 \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Loss: 0.559\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Simulating with theta = -0.77 zeta = 0.0189 chi = 0.0317 gamma = -0.0203 phi = 0.017 \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Loss: 0.534\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Simulating with theta = -0.759 zeta = 0.0251 chi = 0.0336 gamma = -0.0103 phi = -0.0344 \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Loss: 0.55\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Simulating with theta = -0.774 zeta = 0.0153 chi = 0.0175 gamma = 0.00156 phi = 0.0305 \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Loss: 0.534\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Simulating with theta = -0.82 zeta = 0.0279 chi = 0.0372 gamma = -0.0112 phi = 0.0145 \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Loss: 0.548\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Simulating with theta = -0.756 zeta = 0.0152 chi = 0.0176 gamma = 0.000962 phi = 0.0119 \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Loss: 0.533\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Simulating with theta = -0.767 zeta = -0.0296 chi = 0.0366 gamma = -0.0142 phi = 0.02 \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Loss: 0.536\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Simulating with theta = -0.77 zeta = -0.00891 chi = 0.0308 gamma = -0.00917 phi = 0.0168 \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Loss: 0.531\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Simulating with theta = -0.765 zeta = 0.00652 chi = -0.0191 gamma = -0.0081 phi = 0.0216 \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Loss: 0.537\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Simulating with theta = -0.774 zeta = 0.0089 chi = 0.0388 gamma = -0.00404 phi = 0.012 \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Loss: 0.531\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Simulating with theta = -0.773 zeta = -0.00667 chi = 0.0101 gamma = 0.016 phi = 0.0115 \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Loss: 0.533\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Simulating with theta = -0.769 zeta = -0.0119 chi = 0.0215 gamma = -4.04e-05 phi = -0.0096 \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Loss: 0.529\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Simulating with theta = -0.767 zeta = -0.0256 chi = 0.0234 gamma = -0.000839 phi = -0.0296 \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Loss: 0.533\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Simulating with theta = -0.768 zeta = 0.00799 chi = 0.0333 gamma = -0.0209 phi = 0.000983 \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Loss: 0.536\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Simulating with theta = -0.772 zeta = -0.003 chi = 0.0159 gamma = 0.00679 phi = 0.00884 \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Loss: 0.53\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Simulating with theta = -0.792 zeta = -0.0212 chi = 0.0252 gamma = -0.00354 phi = -0.000627 \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Loss: 0.533\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Simulating with theta = -0.765 zeta = 0.00612 chi = 0.0195 gamma = -0.000165 phi = 0.00874 \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Loss: 0.53\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Simulating with theta = -0.777 zeta = 0.00895 chi = 0.00746 gamma = 0.0102 phi = -0.00879 \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Loss: 0.529\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Simulating with theta = -0.78 zeta = 0.0179 chi = -0.00421 gamma = 0.0199 phi = -0.0216 \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Loss: 0.531\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Simulating with theta = -0.757 zeta = 0.00362 chi = 0.0412 gamma = 0.00509 phi = 0.0045 \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Loss: 0.532\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Simulating with theta = -0.778 zeta = 0.000905 chi = 0.0103 gamma = 0.00127 phi = 0.00112 \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Loss: 0.529\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Simulating with theta = -0.77 zeta = -0.00848 chi = -0.00896 gamma = 0.0113 phi = -0.0119 \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Loss: 0.533\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Simulating with theta = -0.773 zeta = 0.00456 chi = 0.0269 gamma = -0.000214 phi = 0.00605 \n", "Loss: 0.529\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Simulating with theta = -0.773 zeta = 0.00645 chi = 0.0183 gamma = -0.00237 phi = -0.00983 \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Loss: 0.529\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Simulating with theta = -0.783 zeta = -0.00254 chi = 0.0143 gamma = 0.0037 phi = -0.0172 \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Loss: 0.528\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Simulating with theta = -0.792 zeta = -0.00688 chi = 0.0117 gamma = 0.00563 phi = -0.0301 \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Loss: 0.53\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Simulating with theta = -0.785 zeta = 0.0192 chi = 0.00944 gamma = 0.00507 phi = -0.00184 \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Loss: 0.53\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Simulating with theta = -0.773 zeta = -0.00413 chi = 0.0184 gamma = 0.00124 phi = -0.00766 \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Loss: 0.528\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Simulating with theta = -0.773 zeta = 0.00441 chi = 0.0238 gamma = 0.00374 phi = -0.0161 \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Loss: 0.528" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Simulating with theta = -0.771 zeta = 0.00616 chi = 0.0306 gamma = 0.00497 phi = -0.0247 \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Loss: 0.529\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Simulating with theta = -0.779 zeta = -0.00195 chi = 0.018 gamma = 0.00983 phi = -0.00762 \n", "Loss: 0.528\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Simulating with theta = -0.782 zeta = -0.00615 chi = 0.0179 gamma = 0.0159 phi = -0.00652 \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Loss: 0.529\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Simulating with theta = -0.781 zeta = -0.00266 chi = 0.00596 gamma = 0.0117 phi = -0.029 \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Loss: 0.528" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Simulating with theta = -0.779 zeta = -0.0117 chi = 0.0248 gamma = 0.00189 phi = -0.0222 \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Loss: 0.529\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Simulating with theta = -0.778 zeta = -0.00654 chi = 0.0204 gamma = 0.00396 phi = -0.0189 \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Loss: 0.528\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Simulating with theta = -0.785 zeta = 0.000411 chi = 0.0146 gamma = 0.0119 phi = -0.0278 \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Loss: 0.527\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Simulating with theta = -0.791 zeta = 0.00268 chi = 0.0126 gamma = 0.0173 phi = -0.0379 \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Loss: 0.528\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Simulating with theta = -0.779 zeta = 0.000178 chi = 0.0305 gamma = 0.00158 phi = -0.00603 \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Loss: 0.528\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Simulating with theta = -0.774 zeta = 0.00115 chi = 0.0287 gamma = 0.00872 phi = -0.0134 \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Loss: 0.527\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Simulating with theta = -0.777 zeta = -0.00119 chi = 0.0117 gamma = 0.0137 phi = -0.0275 \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Loss: 0.528\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Simulating with theta = -0.784 zeta = -0.00766 chi = 0.0136 gamma = 0.0155 phi = -0.022 \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Loss: 0.528\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Simulating with theta = -0.781 zeta = 0.00284 chi = 0.0142 gamma = 0.0199 phi = -0.0205 \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Loss: 0.527\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Simulating with theta = -0.782 zeta = 0.000175 chi = 0.015 gamma = 0.0181 phi = -0.0368 \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Loss: 0.527\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Simulating with theta = -0.783 zeta = 0.00124 chi = 0.0135 gamma = 0.0222 phi = -0.0515 \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Loss: 0.528\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Simulating with theta = -0.776 zeta = 0.00901 chi = 0.0201 gamma = 0.0134 phi = -0.0284 \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Loss: 0.527\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Simulating with theta = -0.782 zeta = 0.00662 chi = 0.0253 gamma = 0.0151 phi = -0.0233 \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Loss: 0.527\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Simulating with theta = -0.784 zeta = 0.0105 chi = 0.0321 gamma = 0.0158 phi = -0.0212 \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Loss: 0.527\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Simulating with theta = -0.786 zeta = -0.00453 chi = 0.019 gamma = 0.0161 phi = -0.0203 \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Loss: 0.527\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Simulating with theta = -0.782 zeta = -0.00131 chi = 0.0269 gamma = 0.00807 phi = -0.0282 \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Loss: 0.528\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Simulating with theta = -0.782 zeta = 0.0018 chi = 0.0174 gamma = 0.017 phi = -0.0224 \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Loss: 0.527\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Simulating with theta = -0.792 zeta = 0.000646 chi = 0.00784 gamma = 0.0226 phi = -0.0389 \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Loss: 0.528\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Simulating with theta = -0.779 zeta = 0.00102 chi = 0.0235 gamma = 0.0122 phi = -0.0198 \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Loss: 0.527\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Simulating with theta = -0.779 zeta = 0.00163 chi = 0.0255 gamma = 0.0194 phi = -0.0212 \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Loss: 0.527\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Simulating with theta = -0.777 zeta = 0.00223 chi = 0.031 gamma = 0.0232 phi = -0.018 \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Loss: 0.527\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Simulating with theta = -0.775 zeta = 0.00903 chi = 0.0237 gamma = 0.0166 phi = -0.0291 \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Loss: 0.527\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Simulating with theta = -0.778 zeta = 0.00564 chi = 0.0225 gamma = 0.0165 phi = -0.0269 \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Loss: 0.527\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Simulating with theta = -0.778 zeta = 0.00651 chi = 0.0306 gamma = 0.014 phi = -0.00861 \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Loss: 0.528\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Simulating with theta = -0.781 zeta = 0.00176 chi = 0.0189 gamma = 0.0171 phi = -0.0298 \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Loss: 0.527\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Simulating with theta = -0.778 zeta = 0.00486 chi = 0.0289 gamma = 0.0152 phi = -0.026 \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Loss: 0.527\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Simulating with theta = -0.78 zeta = 0.00718 chi = 0.025 gamma = 0.0211 phi = -0.0311 \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Loss: 0.526\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Simulating with theta = -0.781 zeta = 0.0103 chi = 0.0258 gamma = 0.0256 phi = -0.0368 \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Loss: 0.527\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Simulating with theta = -0.777 zeta = 0.00181 chi = 0.023 gamma = 0.0206 phi = -0.0307 \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Loss: 0.526\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Simulating with theta = -0.774 zeta = -0.000604 chi = 0.0219 gamma = 0.0233 phi = -0.0344 \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Loss: 0.527\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Simulating with theta = -0.78 zeta = 0.00234 chi = 0.0171 gamma = 0.0227 phi = -0.0299 \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Loss: 0.527\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Simulating with theta = -0.781 zeta = 0.000245 chi = 0.0213 gamma = 0.0239 phi = -0.0302 \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Loss: 0.526\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Simulating with theta = -0.783 zeta = -0.00245 chi = 0.0207 gamma = 0.0276 phi = -0.0318 \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Loss: 0.526\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Simulating with theta = -0.78 zeta = 0.00371 chi = 0.0166 gamma = 0.0227 phi = -0.0395 \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Loss: 0.527\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Simulating with theta = -0.78 zeta = 0.00215 chi = 0.0233 gamma = 0.0203 phi = -0.0258 \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Loss: 0.526\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Simulating with theta = -0.779 zeta = 0.00291 chi = 0.0276 gamma = 0.0185 phi = -0.0291 \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Loss: 0.526\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Simulating with theta = -0.778 zeta = 0.00396 chi = 0.0292 gamma = 0.0247 phi = -0.029 \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Loss: 0.526\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Simulating with theta = -0.779 zeta = 0.00341 chi = 0.0266 gamma = 0.0228 phi = -0.0292 \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Loss: 0.526\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Simulating with theta = -0.778 zeta = -0.00298 chi = 0.0237 gamma = 0.0212 phi = -0.0269 \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Loss: 0.526\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Simulating with theta = -0.778 zeta = -0.000436 chi = 0.024 gamma = 0.0212 phi = -0.028 \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Loss: 0.526\n" ] } ], "source": [ "from cirq.experiments.xeb_fitting import (\n", " parameterize_circuit,\n", " characterize_phased_fsim_parameters_with_xeb,\n", " SqrtISwapXEBOptions,\n", ")\n", "\n", "# Set which angles we want to characterize (all)\n", "options = SqrtISwapXEBOptions(\n", " characterize_theta=True,\n", " characterize_zeta=True,\n", " characterize_chi=True,\n", " characterize_gamma=True,\n", " characterize_phi=True,\n", ")\n", "# Parameterize the sqrt(iswap)s in our circuit library\n", "pcircuits = [parameterize_circuit(circuit, options) for circuit in circuits]\n", "\n", "# Run the characterization loop\n", "characterization_result = characterize_phased_fsim_parameters_with_xeb(\n", " sampled_df,\n", " pcircuits,\n", " cycle_depths,\n", " options,\n", " pool=pool,\n", " # ease tolerance so it converges faster:\n", " fatol=5e-3,\n", " xatol=5e-3,\n", ")" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "execution": { "iopub.execute_input": "2025-05-30T10:25:49.038774Z", "iopub.status.busy": "2025-05-30T10:25:49.038265Z", "iopub.status.idle": "2025-05-30T10:25:49.042869Z", "shell.execute_reply": "2025-05-30T10:25:49.042304Z" }, "id": "fb24fa496cbe" }, "outputs": [ { "data": { "text/plain": [ "{(cirq.GridQubit(4, 4),\n", " cirq.GridQubit(4, 5)): {'theta': np.float64(-0.7783379736657015), 'zeta': np.float64(-0.00043573822845567947), 'chi': np.float64(0.0240391542895369), 'gamma': np.float64(0.021218997340166138), 'phi': np.float64(-0.027952516833367733)}}" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "characterization_result.final_params" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "execution": { "iopub.execute_input": "2025-05-30T10:25:49.045457Z", "iopub.status.busy": "2025-05-30T10:25:49.045002Z", "iopub.status.idle": "2025-05-30T10:25:49.053228Z", "shell.execute_reply": "2025-05-30T10:25:49.052625Z" }, "id": "9845785f9a6a" }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
cycle_depthfidelityfidelity_variancepair
030.9360750.166842(q(4, 4), q(4, 5))
1230.6129050.150976(q(4, 4), q(4, 5))
2430.3839200.156385(q(4, 4), q(4, 5))
3630.2597450.173207(q(4, 4), q(4, 5))
4830.1757070.212425(q(4, 4), q(4, 5))
\n", "
" ], "text/plain": [ " cycle_depth fidelity fidelity_variance pair\n", "0 3 0.936075 0.166842 (q(4, 4), q(4, 5))\n", "1 23 0.612905 0.150976 (q(4, 4), q(4, 5))\n", "2 43 0.383920 0.156385 (q(4, 4), q(4, 5))\n", "3 63 0.259745 0.173207 (q(4, 4), q(4, 5))\n", "4 83 0.175707 0.212425 (q(4, 4), q(4, 5))" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "characterization_result.fidelities_df" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "execution": { "iopub.execute_input": "2025-05-30T10:25:49.055759Z", "iopub.status.busy": "2025-05-30T10:25:49.055289Z", "iopub.status.idle": "2025-05-30T10:25:49.424055Z", "shell.execute_reply": "2025-05-30T10:25:49.423302Z" }, "id": "55d1bc779f0f" }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
a_0layer_fid_0cycle_depths_0fidelities_0a_std_0layer_fid_std_0a_clayer_fid_ccycle_depths_cfidelities_ca_std_clayer_fid_std_ccharacterized_anglesthetazetachigammaphi
pair
(q(4, 4), q(4, 5))0.9883840.978728[3, 23, 43, 63, 83][0.9277707576109281, 0.6034474735321084, 0.384...0.006207[0.40183770462121454, 0.3744005241786973, 0.38...0.9980190.978734[3, 23, 43, 63, 83][0.9360748893403936, 0.6129045406059934, 0.383...0.009444[0.4084634927754985, 0.388556097934968, 0.3954...{'theta': -0.7783379736657015, 'zeta': -0.0004...-0.778338-0.0004360.0240390.021219-0.027953
\n", "
" ], "text/plain": [ " a_0 layer_fid_0 cycle_depths_0 \\\n", "pair \n", "(q(4, 4), q(4, 5)) 0.988384 0.978728 [3, 23, 43, 63, 83] \n", "\n", " fidelities_0 \\\n", "pair \n", "(q(4, 4), q(4, 5)) [0.9277707576109281, 0.6034474735321084, 0.384... \n", "\n", " a_std_0 \\\n", "pair \n", "(q(4, 4), q(4, 5)) 0.006207 \n", "\n", " layer_fid_std_0 \\\n", "pair \n", "(q(4, 4), q(4, 5)) [0.40183770462121454, 0.3744005241786973, 0.38... \n", "\n", " a_c layer_fid_c cycle_depths_c \\\n", "pair \n", "(q(4, 4), q(4, 5)) 0.998019 0.978734 [3, 23, 43, 63, 83] \n", "\n", " fidelities_c \\\n", "pair \n", "(q(4, 4), q(4, 5)) [0.9360748893403936, 0.6129045406059934, 0.383... \n", "\n", " a_std_c \\\n", "pair \n", "(q(4, 4), q(4, 5)) 0.009444 \n", "\n", " layer_fid_std_c \\\n", "pair \n", "(q(4, 4), q(4, 5)) [0.4084634927754985, 0.388556097934968, 0.3954... \n", "\n", " characterized_angles \\\n", "pair \n", "(q(4, 4), q(4, 5)) {'theta': -0.7783379736657015, 'zeta': -0.0004... \n", "\n", " theta zeta chi gamma phi \n", "pair \n", "(q(4, 4), q(4, 5)) -0.778338 -0.000436 0.024039 0.021219 -0.027953 " ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from cirq.experiments.xeb_fitting import before_and_after_characterization\n", "\n", "before_after_df = before_and_after_characterization(fids, characterization_result)\n", "before_after_df" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "execution": { "iopub.execute_input": "2025-05-30T10:25:49.427085Z", "iopub.status.busy": "2025-05-30T10:25:49.426513Z", "iopub.status.idle": "2025-05-30T10:25:49.522548Z", "shell.execute_reply": "2025-05-30T10:25:49.521851Z" }, "id": "39d3e22dc65a" }, "outputs": [ { "data": { "image/png": "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RIVT3/DeY98A8Npr8McfFuYTERFxASojKSVnTpgxA4AB21sQ/OifREVB587gcFgbTUREJD1TGUlJTz0Fffvijp1ZFxvh42Py44/w+edWBxMREUm/VEZS2vDhUKoUD1/axqjikwAYNAgOHLA4l4iISDqlMpLSsmSBOXPAw4NX93Sjftmz3L4NHTpAbKzV4URERNIflZHUULEivPceBjD1+JPk9LMTFgYffmh1MBERkfRHZSS1vPkm1KhBwRuH+SL/MACGDYMdOyzOJSIiks6ojKQWNzfnQiNZs/LCwXdpXf4gdrvzcM2NG1aHExERST9URlLTQw/BmDEAfPF7HQrki+XwYejf39pYIiIi6YnKSGp76SVo0oRcsRHMytoDwzCZNAmWL7c6mIiISPqgMpLaDAMmT4a8eXnqxBTeqLwRgJdfhrNnLc4mIiKSDqiMpAV/f5gyBYBhO+vz2CNRXLkCnTppdVYRERGVkbTStCm88gqexDDvamN8fExCQ2H0aKuDiYiIWEtlJC199hmULEmJi5sZ88gEAN56C3bvtjiXiIiIhVRG0pKPDyxYAJ6evLy3N8+VP05sLLRtq+m+IiKSeamMpLXy5eHjjzGAyQdrUyBfLIcOabqviIhkXiojVnjtNWjYkNzR55jl0z1+uu+KFVYHExERSXsqI1YwDJgxA/z9eerkVN6o8D3gnO577py10URERNKayohV8uWDmTMBGPZLYx576CqXL0PHjpruKyIimYvKiJXq14f+/fEklnmXG5DF26HpviIikumojFht+HCoWJESV7czJmgs4Jzuu2uXxblERETSiMqI1by8YP588PGh68H+NC9ziNhYaN0aIiOtDiciIpL6VEbSgxIlYNw4DGDKgVoUyR/N8ePw6qtgmlaHExERSV0qI+lFly7QsiU57ZdYYGuHu7vJwoXxl7QRERHJsFRG0gvDgK++gsKFqX52KcPLzAecS5L8+qvF2URERFKRykh6kjOnc7l4d3de39OehmVOcfs2tGql5eJFRCTjUhlJb4KDYfhwbJjMPFyDAnljOXgQeve2OpiIiEjqUBlJj15/HRo1Im/MWeZ6dcFmM5k+HebMsTqYiIhIylMZSY9sNufqrIUKUefMHIaUXgZAt25w+LDF2URERFKYykh6lSeP8/wRNzf+79dW1Clxjhs3nOeP3L5tdTgREZGUozKS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bL9Dhw5x6tQpbT+LPPXUU/z666/s2bMn/la5cmXatWsX/9/aZulHzZo175guf/jwYYoUKQJA0aJFCQgISLC9oqKi2L59u7aXRW7evInNlvAr283NDYfDAWSAbWb1GbRWWbBggenl5WXOmDHD/P33381XXnnFzJEjhxkeHm51tEyve/fupp+fn7lhwwbz/Pnz8bebN2/Gj+nWrZtZuHBh84cffjB37dplBgcHm8HBwRamln/752wa09Q2S0927Nhhuru7mx9++KF55MgRc+7cuaaPj485Z86c+DEjR440c+TIYX799dfmvn37zGeffdZlpolmRJ06dTILFiwYP7V32bJlZp48ecw333wzfowrb7NMW0ZM0zQ///xzs3Dhwqanp6dZtWpVc9u2bVZHEtM0gbvepk+fHj/m1q1bZo8ePcycOXOaPj4+5nPPPWeeP3/eutByh3+XEW2z9OXbb781y5QpY3p5eZklS5Y0J02alOBxh8NhvvPOO6a/v7/p5eVlPvXUU+ahQ4csSitRUVFmnz59zMKFC5ve3t5msWLFzLffftuMjo6OH+PK28wwzX8s3yYiIiKSxjLlOSMiIiKSfqiMiIiIiKVURkRERMRSKiMiIiJiKZURERERsZTKiIiIiFhKZUREREQspTIiIiIillIZEREREUupjIiIiIilVEZERETEUiojIiIiYqn/ByPxVUyQdk5aAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from cirq.experiments.xeb_fitting import exponential_decay\n", "\n", "for i, row in before_after_df.iterrows():\n", " plt.axhline(1, color='grey', ls='--')\n", " plt.plot(row['cycle_depths_0'], row['fidelities_0'], '*', color='red')\n", " plt.plot(row['cycle_depths_c'], row['fidelities_c'], 'o', color='blue')\n", "\n", " xx = np.linspace(0, np.max(row['cycle_depths_0']))\n", " plt.plot(xx, exponential_decay(xx, a=row['a_0'], layer_fid=row['layer_fid_0']), color='red')\n", " plt.plot(xx, exponential_decay(xx, a=row['a_c'], layer_fid=row['layer_fid_c']), color='blue')\n", "\n", " plt.show()" ] } ], "metadata": { "colab": { "name": "isolated_xeb.ipynb", "toc_visible": true }, "kernelspec": { "display_name": "Python 3", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.17" } }, "nbformat": 4, "nbformat_minor": 0 }