{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# QuTiP example: Physical implementation of Spin Chain Qubit model" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "Author: Anubhav Vardhan (anubhavvardhan@gmail.com)\n", "\n", "\n", "For more information about QuTiP see [http://qutip.org](http://qutip.org)" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "%matplotlib inline" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "from qutip import *" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "from qutip.qip.models.circuitprocessor import *" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "from qutip.qip.models.spinchain import *" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Hamiltonian:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "$\\displaystyle H = - \\frac{1}{2}\\sum_n^N h_n \\sigma_z(n) - \\frac{1}{2} \\sum_n^{N-1} [ J_x^{(n)} \\sigma_x(n) \\sigma_x(n+1) + J_y^{(n)} \\sigma_y(n) \\sigma_y(n+1) +J_z^{(n)} \\sigma_z(n) \\sigma_z(n+1)]$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The linear and circular spin chain models employing the nearest neighbor interaction can be implemented using the SpinChain class." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Circuit Setup" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAFoAAABeCAQAAAAJMMufAAAABGdBTUEAALGPC/xhBQAAAAFzUkdC\nAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAJiS0dE\nAP+Hj8y/AAAACXBIWXMAAABkAAAAZAAPlsXdAAABmUlEQVR42u3bMUoDURDG8f+TNJbPCwRWbGxz\nhT2ATexsLDZHMEfIDSRip1XS2W6OoNjZJeAFEgTB8lm4UUnaGZjA96XIY4vZH8Owr9h9FDx+DFlT\nWDLwqJ4K9kmZJRmAVTm1r99LEwd1vyNDlW75MG+KU6fX3XJTTuzrHzmYKRtGP+Tu37opHp0GSBec\ncV82HrVdOg3AJ68+ZE+0Y4QWWugAEVpooQNEaKGFDhChhRY6QIQWWugAEVpooQNEaKGFDpCEx8tP\ngHPgzQnt9kquhrLwqX2Q4yG00EIHiNBCCx0gQgstdIAILbTQASK00EIHiNBCCx0gQgstdIAcJLrn\nUTRlaq5JKbPwOL/l0Ok0pKXiiUcq2jR06Ir56dqGKblATV0gM2Vifg/jchVtt6qpu1VrfTzYejwa\n7vaujWhsb2KNrsp891JZ/R4TNor1C/0rHrpVH3jv1pfMTO9iPNMz8u5MF7ZzHnWmX/bnNzVYf41g\n/jhqqf53mszztvtROw1jZn8bSqppGVnvig4fqaTMDQO+gGNWjO038m8/HOaCCn0Y0wAAACV0RVh0\nZGF0ZTpjcmVhdGUAMjAxNS0wMS0xM1QxNDoxNDowMiswOTowMDc4/R8AAAAldEVYdGRhdGU6bW9k\naWZ5ADIwMTUtMDEtMTNUMTQ6MTQ6MDIrMDk6MDBGZUWjAAAAFHRFWHRwZGY6VmVyc2lvbgBQREYt\nMS41IAVcCzkAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "N = 3\n", "qc = QubitCircuit(N)\n", "\n", "qc.add_gate(\"CNOT\", targets=[0], controls=[2])\n", "\n", "qc.png" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The non-adjacent interactions are broken into a series of adjacent ones by the program automatically." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "Quantum object: dims = [[2, 2, 2], [2, 2, 2]], shape = [8, 8], type = oper, isherm = True\\begin{equation*}\\left(\\begin{array}{*{11}c}1.0 & 0.0 & 0.0 & 0.0 & 0.0 & 0.0 & 0.0 & 0.0\\\\0.0 & 0.0 & 0.0 & 0.0 & 0.0 & 1.0 & 0.0 & 0.0\\\\0.0 & 0.0 & 1.0 & 0.0 & 0.0 & 0.0 & 0.0 & 0.0\\\\0.0 & 0.0 & 0.0 & 0.0 & 0.0 & 0.0 & 0.0 & 1.0\\\\0.0 & 0.0 & 0.0 & 0.0 & 1.0 & 0.0 & 0.0 & 0.0\\\\0.0 & 1.0 & 0.0 & 0.0 & 0.0 & 0.0 & 0.0 & 0.0\\\\0.0 & 0.0 & 0.0 & 0.0 & 0.0 & 0.0 & 1.0 & 0.0\\\\0.0 & 0.0 & 0.0 & 1.0 & 0.0 & 0.0 & 0.0 & 0.0\\\\\\end{array}\\right)\\end{equation*}" ], "text/plain": [ "Quantum object: dims = [[2, 2, 2], [2, 2, 2]], shape = [8, 8], type = oper, isherm = True\n", "Qobj data =\n", "[[ 1. 0. 0. 0. 0. 0. 0. 0.]\n", " [ 0. 0. 0. 0. 0. 1. 0. 0.]\n", " [ 0. 0. 1. 0. 0. 0. 0. 0.]\n", " [ 0. 0. 0. 0. 0. 0. 0. 1.]\n", " [ 0. 0. 0. 0. 1. 0. 0. 0.]\n", " [ 0. 1. 0. 0. 0. 0. 0. 0.]\n", " [ 0. 0. 0. 0. 0. 0. 1. 0.]\n", " [ 0. 0. 0. 1. 0. 0. 0. 0.]]" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "U_ideal = gate_sequence_product(qc.propagators())\n", "\n", "U_ideal" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Circular Spin Chain Model Implementation" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "Quantum object: dims = [[2, 2, 2], [2, 2, 2]], shape = [8, 8], type = oper, isherm = True\\begin{equation*}\\left(\\begin{array}{*{11}c}1.000 & 0.0 & 0.0 & 0.0 & 0.0 & 0.0 & 0.0 & 0.0\\\\0.0 & 0.0 & 0.0 & 0.0 & 0.0 & 1.000 & 0.0 & 0.0\\\\0.0 & 0.0 & 1.000 & 0.0 & 0.0 & 0.0 & 0.0 & 0.0\\\\0.0 & 0.0 & 0.0 & 0.0 & 0.0 & 0.0 & 0.0 & 1.000\\\\0.0 & 0.0 & 0.0 & 0.0 & 1.000 & 0.0 & 0.0 & 0.0\\\\0.0 & 1.000 & 0.0 & 0.0 & 0.0 & 0.0 & 0.0 & 0.0\\\\0.0 & 0.0 & 0.0 & 0.0 & 0.0 & 0.0 & 1.000 & 0.0\\\\0.0 & 0.0 & 0.0 & 1.000 & 0.0 & 0.0 & 0.0 & 0.0\\\\\\end{array}\\right)\\end{equation*}" ], "text/plain": [ "Quantum object: dims = [[2, 2, 2], [2, 2, 2]], shape = [8, 8], type = oper, isherm = True\n", "Qobj data =\n", "[[ 1. 0. 0. 0. 0. 0. 0. 0.]\n", " [ 0. 0. 0. 0. 0. 1. 0. 0.]\n", " [ 0. 0. 1. 0. 0. 0. 0. 0.]\n", " [ 0. 0. 0. 0. 0. 0. 0. 1.]\n", " [ 0. 0. 0. 0. 1. 0. 0. 0.]\n", " [ 0. 1. 0. 0. 0. 0. 0. 0.]\n", " [ 0. 0. 0. 0. 0. 0. 1. 0.]\n", " [ 0. 0. 0. 1. 0. 0. 0. 0.]]" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p1 = CircularSpinChain(N, correct_global_phase=True)\n", "\n", "U_list = p1.run(qc)\n", "\n", "U_physical = gate_sequence_product(U_list)\n", "\n", "U_physical.tidyup(atol=1e-5)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.0" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(U_ideal - U_physical).norm()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The results obtained from the physical implementation agree with the ideal result." ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[Gate(CNOT, targets=[0], controls=[2])]" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p1.qc0.gates" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The gates are first convert to gates with adjacent interactions moving in the direction with the least number of qubits in between." ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[Gate(CNOT, targets=[0], controls=[2])]" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p1.qc1.gates" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "They are then converted into the basis [ISWAP, RX, RZ]" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[Gate(GLOBALPHASE, targets=None, controls=None),\n", " Gate(ISWAP, targets=[2, 0], controls=None),\n", " Gate(RZ, targets=[0], controls=None),\n", " Gate(RZ, targets=[2], controls=None),\n", " Gate(RX, targets=[2], controls=None),\n", " Gate(RZ, targets=[2], controls=None),\n", " Gate(RZ, targets=[2], controls=None),\n", " Gate(ISWAP, targets=[2, 0], controls=None),\n", " Gate(RZ, targets=[0], controls=None),\n", " Gate(RX, targets=[0], controls=None),\n", " Gate(RZ, targets=[0], controls=None),\n", " Gate(RZ, targets=[0], controls=None)]" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p1.qc2.gates" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The time for each applied gate:" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[1.25, 0.125, 0.125, 0.5, 0.125, 0.125, 1.25, 0.125, 0.5, 0.125, 0.125]" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p1.T_list" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The pulse can be plotted as:" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n3dzmfG+H871hpZSfS3Jtkt99z7ec8w37gGPvvG9AKWVeKeUPkhxO8m+rqtr3nh9xzjdgBsfd+d6c\n/ynJl5JMneX7znl4j16F6Zm+rPq9f8vlJdcXZibH7/eSfLiqqmsy3R77fza7JN7F+d5/zvcGnW4z\n/j+SbDxdJf2xH3nP1875HjnHsXfeN6Cqqqmqqn4h02Hhr5dSVr/Pjznne2wGx9353oBSyn+V5D9X\nVfX7+eDKv3Me3qVXYfqVJB9+19cfzvTfVn3Qz1xx+t9x/s553KuqOnqmZaqqqt9KMr+Ucmn/ljhn\nOd9b4HxvTillfpInkvzvVVW9382rc74h5zr2zvtmVVV1JMn/leQvvedbzvkGne24O98b81eSfLqU\n8sdJ/kWS/6KU8t75JM55eI9ehennklxZSvm5UsqCJH8nydh7fmYsya8mSSnlLyf5YVVVh3v0+XPV\nOY97KeWyUko5/c8fT1Kqqnq/54/oLed7C5zvzTh9TH8zyb6qqv7RWX7MOd+AmRx7533vlVJ+opTy\nodP/fHGSNUl+/z0/5pzvsZkcd+d7M6qq+nJVVR+uqmpFkr+b5Omqqn71PT/mnIf36Mk076qqTpVS\nbk/ybzI9LOI3q6raX0r5+6e//79UVbWzlPKpUsp3kxxP8vlefPZcNpPjnuS/TrK+lHIqyZuZ/gOS\nC1RK+RdJPpnkJ0opLyfZlGR+4nxv0rmOe5zvTfmrSX4lyQullDM3tl9O8jOJc75h5zz2cd434fIk\n20op8zJdePjfqqra5b6mcec87nG+90uVJM55+GClqjzqAAAAAHX0qs0bAAAA5gxhGgAAAGoSpgEA\nAKAmYRoAAABqEqYBAACgJmEaAAAAahKmAQAAoKb/H0bNIBFz4lncAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "p1.plot_pulses();" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Linear Spin Chain Model Implementation" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "Quantum object: dims = [[2, 2, 2], [2, 2, 2]], shape = [8, 8], type = oper, isherm = True\\begin{equation*}\\left(\\begin{array}{*{11}c}1.000 & 0.0 & 0.0 & 0.0 & 0.0 & 0.0 & 0.0 & 0.0\\\\0.0 & 0.0 & 0.0 & 0.0 & 0.0 & 1.000 & 0.0 & 0.0\\\\0.0 & 0.0 & 1.000 & 0.0 & 0.0 & 0.0 & 0.0 & 0.0\\\\0.0 & 0.0 & 0.0 & 0.0 & 0.0 & 0.0 & 0.0 & 1.000\\\\0.0 & 0.0 & 0.0 & 0.0 & 1.000 & 0.0 & 0.0 & 0.0\\\\0.0 & 1.000 & 0.0 & 0.0 & 0.0 & 0.0 & 0.0 & 0.0\\\\0.0 & 0.0 & 0.0 & 0.0 & 0.0 & 0.0 & 1.000 & 0.0\\\\0.0 & 0.0 & 0.0 & 1.000 & 0.0 & 0.0 & 0.0 & 0.0\\\\\\end{array}\\right)\\end{equation*}" ], "text/plain": [ "Quantum object: dims = [[2, 2, 2], [2, 2, 2]], shape = [8, 8], type = oper, isherm = True\n", "Qobj data =\n", "[[ 1. 0. 0. 0. 0. 0. 0. 0.]\n", " [ 0. 0. 0. 0. 0. 1. 0. 0.]\n", " [ 0. 0. 1. 0. 0. 0. 0. 0.]\n", " [ 0. 0. 0. 0. 0. 0. 0. 1.]\n", " [ 0. 0. 0. 0. 1. 0. 0. 0.]\n", " [ 0. 1. 0. 0. 0. 0. 0. 0.]\n", " [ 0. 0. 0. 0. 0. 0. 1. 0.]\n", " [ 0. 0. 0. 1. 0. 0. 0. 0.]]" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p2 = LinearSpinChain(N, correct_global_phase=True)\n", "\n", "U_list = p2.run(qc)\n", "\n", "U_physical = gate_sequence_product(U_list)\n", "\n", "U_physical.tidyup(atol=1e-5)" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.0" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(U_ideal - U_physical).norm()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The results obtained from the physical implementation agree with the ideal result." ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[Gate(CNOT, targets=[0], controls=[2])]" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p2.qc0.gates" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The gates are first convert to gates with adjacent interactions moving in the direction with the least number of qubits in between." ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[Gate(SWAP, targets=[0, 1], controls=None),\n", " Gate(CNOT, targets=[1], controls=[2]),\n", " Gate(SWAP, targets=[0, 1], controls=None)]" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p2.qc1.gates" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "They are then converted into the basis [ISWAP, RX, RZ]" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[Gate(GLOBALPHASE, targets=None, controls=None),\n", " Gate(ISWAP, targets=[0, 1], controls=None),\n", " Gate(RX, targets=[0], controls=None),\n", " Gate(ISWAP, targets=[0, 1], controls=None),\n", " Gate(RX, targets=[1], controls=None),\n", " Gate(ISWAP, targets=[1, 0], controls=None),\n", " Gate(RX, targets=[0], controls=None),\n", " Gate(GLOBALPHASE, targets=None, controls=None),\n", " Gate(ISWAP, targets=[2, 1], controls=None),\n", " Gate(RZ, targets=[1], controls=None),\n", " Gate(RZ, targets=[2], controls=None),\n", " Gate(RX, targets=[2], controls=None),\n", " Gate(RZ, targets=[2], controls=None),\n", " Gate(RZ, targets=[2], controls=None),\n", " Gate(ISWAP, targets=[2, 1], controls=None),\n", " Gate(RZ, targets=[1], controls=None),\n", " Gate(RX, targets=[1], controls=None),\n", " Gate(RZ, targets=[1], controls=None),\n", " Gate(RZ, targets=[1], controls=None),\n", " Gate(GLOBALPHASE, targets=None, controls=None),\n", " Gate(ISWAP, targets=[0, 1], controls=None),\n", " Gate(RX, targets=[0], controls=None),\n", " Gate(ISWAP, targets=[0, 1], controls=None),\n", " Gate(RX, targets=[1], controls=None),\n", " Gate(ISWAP, targets=[1, 0], controls=None),\n", " Gate(RX, targets=[0], controls=None)]" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p2.qc2.gates" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The time for each applied gate:" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[1.25,\n", " 0.5,\n", " 1.25,\n", " 0.5,\n", " 1.25,\n", " 0.5,\n", " 1.25,\n", " 0.125,\n", " 0.125,\n", " 0.5,\n", " 0.125,\n", " 0.125,\n", " 1.25,\n", " 0.125,\n", " 0.5,\n", " 0.125,\n", " 0.125,\n", " 1.25,\n", " 0.5,\n", " 1.25,\n", " 0.5,\n", " 1.25,\n", " 0.5]" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p2.T_list" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The pulse can be plotted as:" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA9MAAAGpCAYAAACOK2XLAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3X+UXOV93/HPMz92R7urXRvZEkRQe+06hBXGBqW2aerD\nqqpS11S2IDk4NSbUPaeOdEQRoOJUiIMEKEjFhKax1XBCjc/iOHFUg9oNlVuDlLXjk7QV+AdIK5Ac\njEHILMJrC2mlnf1xn/4xK7yS5s7uvTvz3Ofeeb/OUSxpuHufk0czcz/3+X7vY6y1AgAAAAAAs5dL\negAAAAAAAKQNYRoAAAAAgIgI0wAAAAAARESYBgAAAAAgIsI0AAAAAAARFRp9AmMMjwsHAAAAkDnW\nWpP0GJAcJyvT1lp+pfDXpk2bEh8Dv5i7ZvvF3KX3F3OX3l/MXXp/MXfp/ZWFuQMo8wYAAAAAICLC\nNAAAAAAAERGmEaq3tzfpISAm5i69mLv0Yu7Si7lLL+YuvZg7ZIFpdL2/McbSUwAAAAAgS4wxsjyA\nrKmxMg0AAAAAQESEaQAAAAAAIiJMAwAAAAAQEWEaAAAAAICICNMAAAAAAEREmAYAAAAAICLCNAAA\nAAAAERGmAQAAAACIiDANAAAAAEBEhGkAAAAAACIiTAMAAAAAEBFhGgAAAACAiAjTAAAAAABERJgG\nAAAAACAiwjQAAAAAABERpgEAAAAAiIgwDQAAAABARIRpAAAAAAAiIkwDAAAAABARYRoAAAAAgIgI\n0wAAAAAARESYBgAAAAAgIsI0AAAAAAAREaYBAAAAAIiIMA0AAAAAQESEaQAAAAAAIiJMAwAAAAAQ\nEWEaAAAAAICICNMAAAAAAEREmAYAAAAAICLCNAAAAAAAERGmAQAAAACIiDANAAAAAEBEhGkAAAAA\nACIiTAMAAAAAEBFhGgAAAACAiAjTAAAAAABERJgGAAAAACAiwjQAAAAAABERpgEAAAAAiIgwDQAA\nAABARIRpAAAAAAAiIkwDAAAAABARYRoAAAAAgIgI0wAAAAAARESYBgAAAAAgIsI0AAAAAAAREaYB\nAAAAAIiIMA0AAAAAQESEaQAAAAAAIiJMAwAAAAAQEWEaAAAAAICICNMAAAAAAEREmAYAAAAAICLC\nNAAAAAAAERGmAQAAAACIiDANAAAAAEBEhGkAAAAAACIiTAMAAAAAEBFhGgAAAACAiApJDwAAgDCv\nvfZneumluyIeldOll+5UR8f7GzImzM2xvzumA585INlox733wffqnave2ZhBAQAQA2EaAOCtU6cO\nacGClbrwwnWzPub552/U2NgRSYRpH5VfKavt4ja970vvm/UxP9nyE42+ONrAUQEAEB1hGgDgMati\ncYHmzXvPrI/I5dpkbcRlT7hjpfz8vOa9Z96sDym8rRB5JRsAgEajZxoA4DEryUQ6wpicSF7+stZG\nnVIpJ26QAAC8Q5gGAHirEqCiJi8jwrTHrGRM1BskhikFAHiHMA0A8JiNHLwI057j/ggAICMI0wAA\nj8VLXpQEe4wwDQDICMI0AMBjcXqmSV4+i9UzbeiZBgD4hzANAPAWPdMZRM80ACAjCNMAAI8FsXqm\nrQ0aMhrUQaB490eYUgCAZwjTAACPsTKdNZR5AwCygjANAPBWnDJveqY9x/0RAEBGEKYBAB4jeWUO\nPdMAgIwgTAMAPBZvn2lKgj3G/REAQEYQpgEAHiN5ZQ090wCArCBMAwC8Rc90BnF/BACQEYRpAIDH\nrIyJ+lVF8vKalUyOnmkAQPoRpgEAHouzjJmjJNhn8aaUMA0A8A5hGgDgMcq8s4aeaQBAVhCmAQDe\nitMzTZm359gaCwCQEYRpAIDH4m2NRfLyGPdHAAAZQZgGAHgsXvKiJNhjhGkAQEYQpgEAHqNnOmvo\nmQYAZEVhrj/AGPOSpDclTUoat9Z+aK4/EwAASbI2ULxlzKABo0FdBDF7pplSAIBn5hymVbn932ut\nHa7DzwIAYJp4PdOsYnqMMm8AQEbUq8w76tciAACzQPLKGsq8AQBZUY8wbSU9ZYx52hjzb+vw8wAA\nkBRvayx6pj3H/REAQEbUo8z7N6y1PzXGvFPSk8aY5621f1OHnwsAaHokr8xhn2kAQEbMOUxba386\n9b9HjTE7JX1I0hlhevPmzW/9vre3V729vXM9LQCgKdAznTncHwGQUgMDAxoYGEh6GPDInMK0MaZN\nUt5ae9wY0y7pNyXdffZ/Nz1MAwAwe1bRO5JIXj6z1saaUm6QAEja2YuCd999TuxBk5nryvQiSTun\nVg0Kkr5mrf3WnEcFAIDomc6kGGXe3B8BAPhoTmHaWvtjSR+s01gAADhLvDJvkpfHYpR50zMNIE2M\nMXxiZZC19pxvr3o8gAwAgAaJ02CboyTYZ/GmlDANIFX4HsqWsBv79dpnGgCABqDMO2vYZxoAkBWE\naQCAt+L0TFPm7Tm2xgIAZARhGgDgMXqmM4f7IwCAjCBMAwA8FihO8rI2aMRgUAc2iFnmHZCmAQB+\nIUwDALzF1lgZxMo0ACAjeJo3AMBjJK/MoWcaALw1PDyshx9+WAsXLtRll12mpUuXJj0kr7EyDQDw\nWLyeaZ787DHujwCAt/r6+rRs2TLdcMMNevDBB5MejvcI0wAAj5G8soatsQDAXy+++KIuuOACFQoF\nDQ8PJz0c7xGmAQDeomc6g7g/AgDeCoJA+XxeUvSWnGZEmAYAeMzKmKhfVSQvr1nJ5OiZBgAfXXzx\nxRoaGtLo6Kg6OzuTHo73eAAZAMBj8ZYxKQn2GCvTAOCt66+/Xo888oj27t2rdevWJT0c7xGmAQAe\nI3lljbUxHipHzzQA1M3Bgwd155136ujRo3r66afV29urq6++WqtXr9aCBQt0++23Jz3E1CBMAwC8\nRc90BsXYGov7IwCypF6tyHHuMQ4PD2v16tXatWuXSqWSVq1apb6+PnV1ddVnUE2GMA0A8FicrbFy\nInl5LEaxgcnRMw0gO5IstNm+fbvWrl2rUqkkSSqXy2pra0tuQCnHA8gAAB6jZzpzqNwHgMQcP35c\nPT09kqT9+/dryZIlKhaLCY8qvViZBgB4jDLvrGGfaQBIzpo1a9Tf36/BwUEdPnxY27ZtkyQdOXJE\nBw4c0O7du7Vo0SL19PRoxYoVCY/Wf4RpAIC3rA0UbxkzaMBoUBdB9J5pYwxTCgB10N3dHfqU7uXL\nl2vHjh3atGmTCgVi4mxQ5g0A8FicnmnKvL1GmTcAeKejo0NDQ0NauHChyuWyRkZGkh5SKhCmAQAe\nI3llDWXeAOCfLVu2aGBgQO3t7dqzZ486OzuTHlIqsH4PAPAWW2NlEPdHAMA7999/f9JDSCVWpgEA\nHiN5ZU6MfaaNYWssAIB/CNMAAI/RM5053B8BAGQEYRoA4DGr6F9VJC+fWWtjTSk3SAAAviFMAwC8\nRc90BsUo8+b+CADAR4RpAIDH4pV5k7w8FqPMm55pAICPCNMAAI/Fa7ClJNhj9EwDADKCMA0A8BjJ\nK2vYZxoAkBWEaQCAt+iZziB6pgEAGUGYBgB4LE7PdE4kL4/F6ZnO0TMNAPAPYRoA4LFA8Xqmg0YM\nBnVgg5hl3gFpGgAa7dixY3r88ce1devWpIeSCoRpAIC3KPPOINrgAcBbXV1dWrp0qcbGxpIeSioQ\npgEAHiN5ZU6Mnmm2xgIA+IgwDQDwWLx9pnnys8e4PwIAyAjCNADAYySvrGFrLADwG5+3s0eYBgB4\ni57pDOL+CAB468SJE3rsscf0zDPPaN++fUkPx3uEaQCAx6yMifpVRfLymp3a6ioCeqYBoH4OHjyo\n6667TsuWLdP8+fO1cuVKPfTQQ5Kkjo4OrV+/Xv39/br00ksTHqn/CkkPAACAcPGWMSlR8xgr0wCa\nnLk76odgdXZT9A/G4eFhrV69Wrt27VKpVNKqVavU19enrq6uuoyp2RCmAQAeI3llDT3TAJpdnBBc\nL9u3b9fatWtVKpUkSeVyWW1tbYmNJ+0o8wYAeIue6QyKsTUW90cAoD6OHz+unp4eSdL+/fu1ZMkS\nFYvFhEeVXqxMAwA8Fm9rLJKXx2IUG9AzDQD1sWbNGvX392twcFCHDx/Wtm3bJElHjhzRgQMHtHv3\nbi1atEg9PT1asWJFwqP1H2EaAOAxeqYzh8p9AEhMd3e31q1bV/W15cuXa8eOHdq0aZMKBWLibFDm\nDQDwGMkra+iZBgD/dHR0aGhoSAsXLlS5XNbIyEjSQ0oFwjQAwFvWBorXMx00ZDyogyBmzzRTCgAN\ns2XLFg0MDKi9vV179uxRZ2dn0kNKBdbvAQAei9MznWMV02dxeqZz9EwDQCPdf//9SQ8hlViZBgB4\njDLvrKHMGwCQFYRpAIC32Borg7g/AgDICMI0AMBjJK/MibHPNFtjAQB8RJgGAHgs3j7TlAR7jPsj\nAICMIEwDADxmFf2riuTlM2ttrCnlBgkAwDeEaQCAt+iZzqAYZd7cHwEA+IgwDQDwWLwyb5KXx+Js\njUXPNADAQ4RpAIDH4jXYUhLsMXqmAQAZQZgGAHiM5JU17DMNAMgKwjQAwFv0TGcQPdMAgIwoJD0A\nAADC0TOdOfRMA4C3Dh06pH379unZZ5/VypUrdcUVVyQ9JK+xMg0A8FigeD3TQSMGgzqwQcwy74A0\nDQCN9sQTT2jx4sW67bbb9MADDyQ9HO+xMg0A8FacMm9Wpj3HlAKAt2699VZJ0uDgoLq7uxMejf9Y\nmQYAeCxOz3ROJC+PxeiZNjnKvAHApZ07d2rjxo1JD8N7hGkAgMfi9Uzz5GePsTINAF7r7+/XzTff\nrFdffTXpoXiPMA0A8BjJK2vYGgsA/LVz507de++9uvbaa7Vjx46kh+M9eqYBAN5ia6wM4v4IACTq\n4MGDuvPOO3X06FE9/fTT6u3t1dVXX63Vq1frmmuu0TXXXJP0EFODMA0A8Jid6oGOguTlNTvVAx0B\nW2MByJTI7UshYlTsDA8Pa/Xq1dq1a5dKpZJWrVqlvr4+dXV11WdMTYYwDQDwWLxlTEqCPcbKNIBm\nl+B31Pbt27V27VqVSiVJUrlcVltbW2LjSTt6pgEAHiN5ZQ090wCQnOPHj6unp0eStH//fi1ZskTF\nYjHhUaUXK9MAAG/RM51BMbbG4v4IANTHmjVr1N/fr8HBQR0+fFjbtm2TJB05ckQHDhzQ7t27tWjR\nIvX09GjFihUJj9Z/hGkAgMfibY1F8vJYjGIDeqYBoD66u7u1bt26qq8tX75cO3bs0KZNm1QoEBNn\ngzJvAIDH6JnOHCr3AcA7HR0dGhoa0sKFC1UulzUyMpL0kFKBMA0A8BjJK2vomQYA/2zZskUDAwNq\nb2/Xnj171NnZmfSQUoH1ewCAt+iZziB6pgHAO/fff3/SQ0glVqYBAB4LYvVMWxs0ZDSog0DxeqaZ\nUgCAZwjTAACPUeadNZR5AwCygjANAPBWnDJvwrTnmFIAQEYQpgEAHovTM50TyctjMXqmTY6tsQAA\n/iFMAwA8Fm+faUqCPcbKNAAgIwjTAACPkbyyhp5pAEBWEKYBAN6qBKhoX1VsjeU5O1W2HQVTCgDw\nEGEaAOCxeGXeJC+PxSg2MIaeaQCAfwjTAACPxSvzpiTYY1TuAwAyopD0AAAACEfyyhp6pgHAX8PD\nw3r44Ye1cOFCXXbZZVq6dGnSQ/IaK9MAAG/F2WeanmnPxdgai/sjAOBGX1+fli1bphtuuEEPPvhg\n0sPxHmEaAOAxeqYzh55pAPDWiy++qAsuuECFQkHDw8NJD8d7hGkAgMfomc4cKvcBwFtBECifz0uK\nUUXUhAjTAABvWRsoXvIKGjAa1IMNYvZMB6RpAGi0iy++WENDQxodHVVnZ2fSw/EeDyADAHiMnunM\noWcaALx1/fXX65FHHtHevXu1bt26pIfjPcI0AMBj8XqmKfP2GD3TAJCogwcP6s4779TRo0f19NNP\nq7e3V1dffbVWr16tBQsW6Pbbb096iKlBmAYAeIwG26xhaywAzc4MDNTl59je3sjHDA8Pa/Xq1dq1\na5dKpZJWrVqlvr4+dXV11WVMzYYwDQDwXNQy75wI0x6Lc3+EKQWQIXFCcL1s375da9euValUkiSV\ny2W1tbUlNp604wFkAAAvnV6JZGusjInRM02ZNwDUx/Hjx9XT0yNJ2r9/v5YsWaJisZjwqNKLlWkA\ngKfiLGFK9Ex7zir6rXzujwBAXaxZs0b9/f0aHBzU4cOHtW3btrdeu/feexUEgVpaWrRhw4YER5ke\nhGkAgKfih2mSl7/omQaA5HR3d4c+pfuOO+7QXXfdpVtuucXxqNKLMm8AgJcq4Sl6mGZrLM+xNRYA\neMdaqy1btuimm25SuVxOejipQZgGAHgqzrZYEsnLc2yNBQDeeeqpp3TVVVdp8+bNOnToUNLDSQ3K\nvAEAnqJnOpPY7QwAvLNixQpJUm+CTxpPI1amAQCeomc6i+iZBgBkBWEaAOAleqYzip5pAEBGEKYB\nAJ4KYvdMWxvUfTSok0DxeqaZUgCAZ+Ycpo0xHzPGPG+MOWSM+f16DAoAAMq8s4kybwBAVswpTBtj\n8pK+JOljknok/StjzCX1GBgAoLnFLfMmTHuOB5ABADJirivTH5L0I2vtS9bacUlfl/TJuQ8LAAB6\npjOJnmkAQEbMdWusxZJemfbnw5I+fPZ/9Lv/4pE5niY7AhvoJ0M/UxC4af7K53J61/nvkIm1upNd\nr77+pkbLE25OZqR/cEGXivm8m/OlxNFjb+rNkVPOznf+eX+r9tJRZ+dLgzdG36UjJ5dUfc0Onydz\nqu3cF3KTyp93LN6CcUTGBHrb22/QGy9E+w4ptJ7Qh5YP6Yt3faRBI0unwyNLNFx+V9XX2k7Nkwnc\nfE/Ms3kN/9ZuBflo34Mfvrhbj3A9cYZjIyf1xrHjzs53XmeH3t7R7ux8aXCqPK4jr7ubg/ntrVp4\nHnMw3fjkpF4Z+pmsoztu1kqOLuORAnMN07P6V/vdZ5966/dvn/9+vb3z/XM8bXqdGp3Q/91vdf6C\neU7O99M3TsnqHWotEuTeYqS//v6kLlgwL+bDjaJ54xejOjnWpQVdpYafK032Dhq1tpynlkLjn4N4\n7MTlen3BhN51wZ80/FxpYazR8y+u07HgXZrX9qMzXsvnJlQ43qbyaMc5x+VbRlUIcpoYc/Pv+cjL\nFyk4MT/SJdIvxq/WxF8/rXe8/amZ/+MmkQ9y+t7z25WbN6Riyxtnvmil1nJBQd7Rhaisxo8sUJSP\n3+PHJnTivKLe/bO3N25gKXTgx7/QyXKH2ktzvZyb2cnRCbW25LXkPczBdK8MndCrR1v0to6Whp9r\nfCLQydEJffjSdzb8XGny8zfL2v9iTu94W2vDz1UeO6DR8QMNPw9SxFob+5ekj0j6X9P+vEHS75/1\n31j80m/+5g/sRRe939n5Fi78h/baaw86O18a3LPnHisjGwSBk/P1fqzXvuf33uPkXGnR32/t/PlL\n7HPPPefkfHfcYW0u5+RUqTFycMSu6Dhqv/a1c1976aUtdmDtZ+zY8Ng5r/3sd95nf/DtDzkY4ZQN\nG6z9gz+IdMhv/Za1O3Y0aDwp9frO1+375p+0P/jBua/93pd/zz75jiedjeXPfvhn9tOPfTrSMXfd\ndZfdtGlTYwaUUj/+sbVtbb9jv1btTdwA3/jGN2x7+7X2+eednC41Wn6zxd767291cq4XXnjBtp/f\nbv/b/v/m5Hxp8Wu/9lf2yiuvdna+zZutveuuyu+nck61jORsPHAjbK7nuiT0tKT3GWPebYxpkfQp\nSf1z/JmZZsyIWlrcledUzjXi7HypMCEVW4tOVqUlqXVeq8w4ZfbTFYvSxMSI2tvdvBdKJYkq+7MY\n6VSQU/UpMJIJqpdyF/OVGjdXJiYq/2AiaG+XRvjYO4MxRqcmq893i1qclO2fNhFMqJiLOqftGmFS\nz1AsSpOT7j5H29vbFQQjUd+OmZcbz6nU5qZSp729XROj0d8/WWfMiFpb3V1bx/haQobNKUxbayck\n3STpf0salPSX1lpqH2qwdkQtLVX6EBukWGyTtVyATDdZnlShtfElcae1lFqkcWenS4VCoRKm29rc\nvBdaWxWppLQZGGN0Ksir+hRUnvZU7YaTzefdPghqYqLyDyaCtjbC9DmMdGoyV3W+C6Yga9xN6kQw\noUIu6py2EabPUihIQeDuc7StrU2TkyNR346ZZ8aNSvPchOm2trbKNUzE90/2ub22jvG1lCrHjh3T\n448/rq1btyY9lFSY8z8Fa+03JX2zDmNpCtaeVLHo7u5Zsdgua086O18aBGOBCg76y05rmddCccBZ\nCgVpcvKk05VpwvRZjDRaa2V62v+coZBzG6bHxyNftbS3Syf52DuTkUZDVqbzJu/swT2SNB6MRw4D\n7e3tOsmknqESpt19jlZWpk9mOkTEMi61lhrfqytV5mByjDB9NmtPOq36jPG1lCpdXV1aunSpnnvu\nuaSHkgqNf/IPzlApkXIbpoOAJDed65Xp1nmtsuPs6TJdPm8VBKecrkzjLEYatdXDlTGmEq6qhel8\nXsZ1mXeMMM0i5pmspFMT4SvTrsu844RpVqbPVChUqt1chmlrWZk+mxk3ap3n5kumpaXykDM7wTXF\nmdy2UGZ9ZRrREKYdC4IRFQruSlEKhTbC9FmCcuA0TBdbi7JjfPFNFwSnZEyLcjk3H0GUeVdhVLvM\n24SE6UICZd4Rm9Mo8z7X2IRRztiq/68smqLTlek4PdOUeZ+rWKyEaZdl3vRMVzE+1c7lSK4lp8mx\nSWfnSwNrR1Qsui3z5n2A0wjTjgWB2zLvQqFSloVfmixPKt/q7mlUxRJh+mwTEyeVy7l7H7S2un1m\nVhoYY1QOWZmesWc68H9lmorgM50aM5oXsq9zGnqmKfM+V2Vl2m2Zt7WUeZ9jfKqdy5FcS04T5Qln\n50sD19fWzbAybblomjXCtGOVlWm3YXpykrv5002UJ5RrdfdPv1gqKhirfhHbrMbGRpyGae4gV5GT\nToWWeeeksDLvQs7tnYmYPdMsYp7pZI0wnTduH3U/PhmvZ5qV6TNV3hYjamtzF6YlyrzPZses2zDd\nmtP4KE81na6yMk3PdL2cOHFCjz32mJ555hnt27cv6eF4jzDt2OTkiPJ5d2/4fJ4wfbaJ8oTyLY5X\npsvc4ZtufHxExrjcIo6V6bNZSaO29tO8q35DFPIy1mWDLVtj1cPJcniYLuaKzlemi3m2xporY6yk\nEZVKrp490SppXLkcJcbT2THrtMzbtBiNnyJMT+d6oSoLZd4HDx7Uddddp2XLlmn+/PlauXKlHnro\nIUlSR0eH1q9fr/7+fl166aUJj9R/Gb6v4qdKmF7g7Hz5fJsmJrgAmW58dFy5Fnf3kfKtefqbzjI2\nNiJjXG4RR5g+29iYUU5WxWK1YFzpma66F3sKyrzpmT7XybJRKVd93tJQ5k3P9LnK5bKkvIxxdVVv\nJLVpdHREra2djs7pPztmnT6HxRSNxkbHnJ0vDSpbtqVra6wBM1CXsfTa3sjHDA8Pa/Xq1dq1a5dK\npZJWrVqlvr4+dXV11WVMzYYw7djExMkEVqaPOjtfGkyUJ2Ra3a2sFVoLCsqUeU83Pn7S6co0Yfpc\nJ0eleSZQ9eXn8K2xbD4dZd60157pVNloXr76Tb0ktsZqLUR7+jE90+eq/P+jXePjbnYsmJiQpHad\nOnVSXV2E6dOCsUDFkrtlStNiKPM+y+Sk22vrepR5xwnB9bJ9+3atXbtWpVJlf/RyuezsQYZZ5CRM\nv/DCCy5OkwojI685fcPncu36xS+OMAfTvPHTN9yuTJfyKp8oMwfTvPzyQUluw/TkpMQU/NLLLxiV\nzKSqfQ1UVqTDtsbKyXi+Mt3eLv3sZ8z3dH//ai71DyA7ceIEn6PTvPbaazKmfSrkNt7pML1v3z4d\nO3bMzUlTIBh1G6bVIr3y0iu8F6Ypl99wXuad5p7p48ePq6enR5K0f/9+LVmyRMW0160nyMk/hU98\n4hMuTpMKP/+50RVX/Kqz83V2/pr27/9D5mCakfERnffPz3N2vq53dkkB74PpKl9Ev+PsfPl8JWAx\nBb9kJwu6rPgzSe+s8mq6t8a68MLK4jnz/UvByXnqnX9U0rkrigVT8H5rrHnz5umDH/wgn6NnKRb/\nidMwXSj8htauXevmhCnRdkGb0weQtVzUoq8+/FV9/ctfd3ZO301OFjR//j9wdr6090yvWbNG/f39\nGhwc1OHDh7Vt27a3Xrv33nsVBIFaWlq0YcOGBEeZHqxMO/ZHfyS99JK78y1c+FHdc8/z+tzn3J3T\nd7tf3K37vnufs/N1vKNDn/6TT+tLH/+Ss3P67uhRackSd+ebnJSuuEL69rfdndN3Y0MT2vv+gwoN\n0yFbY6WhZ/pXfkXiAaRn+vmeN/WTe1+TdP45ryURpqOuTOdyOf3d3/1dg0aUXuefL6dhuqPjUSo+\nzrLiqytkQ55H0Ajty9v1nb/4ji7svNDZOX23fr3kst037SvT3d3dWrduXdXX7rjjDt1111265ZZb\nHI8qvXiat2OFQqXXwpWsP74/jkKuoPFJd5MQZxuYrON94IGpSu6aL4b1TLsM00xefZjwfUMLclvm\nzWdi/bj8LOWtWF0hV9B44PCaIuD9czauKerDWqstW7bopptumnrAIWaDMO1YsejuLrKU/lKURijm\ni5oI3E1CnJLGrON94IEa4cqYWmXeORmXDyBj8uqjxs2TQi6BMu+IW2OhOpefpbwVqyvmuKZIGtcU\n9fHUU0/pqquu0ubNm3Xo0KGkh5MaGbyv4rdCwf0bPot3z+aikCs4/+LjLvKZeB94wEgKeci8tUr1\n1lg4lzEmdL7zcvs07wnLZ2K9uPws5a1YHdcUyeOaoj5WrFghSert7U12ICnDyrRjlKIkj5Ks5PE+\nSJ4xJnSl0px+AFkVlHmnVK0yb8dP86bMu34o804erWPJ45oCSSJMO8bds+RxFzl5+XzloWCuqoV5\nH1RRI1ypRphWzvE+00xefdQo886bvIKwZesG4DOxfliZTh7XFMnj2hpJIkw7Rl9H8hLpb6I/8AzG\nVL6IJiffKkJ9AAAbN0lEQVTdnI/3QRU1wlWlzDvkuELe/T7TTN7c1eqZTsHWWKiOnunkJfIcFq4p\nzsC1NZJEmHaMUpTkUZLlB8oTk2Vytcq8c+Er05R5p1Kt+XZe5k3rS93wOZq8gnHXOjYZVO5A5wyX\n79NxbY0k8W50jFKU5FGS5QfKExM209ZYISvTznummbz6qFHW7/wBZHwm1g2fo8lzeU3Be6c6rq2R\nJMK0Y5SiJI+tsfxAeWLCavVM2xo90/kEeqaZvLmbYWss1z3TlKnWB5+jyXN5TcF7pzqurZEkwrRj\n3D1LHivTfmBFJWEzrUznwsO0cZe7mLw6qfX09rzJOy3z5jOxfvgcTR4r08nj2hpJIkw7Rl9H8tga\nyw/0+iWrVriqVeatXE6adJimmbz6qPU0b7l9mjfPkagfPkeT5/I5LFxPVMe1NZJEmHaMu2fJY2Xa\nD6yoJKxGuDI1yrxtEmXeTN7c1eqZNvRMpxWfo8ljZTp5XFsjSfxTcIy+juSxNZYf6PVLWNx9pvNs\njZVKM2yN5bxnmudI1AWfo8lzeU3Be6c6rq3r69ChQ9q3b5+effZZrVy5UldccUXSQ/IaK9OOUYqS\nPOdbY1GWVRXliQmbcZ/p0AZbyrxTqGbPtOOnefOZWD98jibPZesYLRLVcW1dX0888YQWL16s2267\nTQ888EDSw/Fehv8p+IlSlORR5u0HyhOTVStcGWtkwrbGyrE1VirN1DPt8KlyfCbWD5+jySvkCiqP\nl52ci/dOdVxb19ett94qSRocHFR3d3fCo/EfK9OOUYqSvHwuL0kKrJuLR8qyqqM8MWEz7jNdY2ss\nV2E6CCRjKg89w9zUKOsv5ArOe6ZpfakPPkeTx9ZYyePaujF27typjRs3Jj0M73GF4hh3z/zAA0OS\nx4pKwoxkQ0KxtZphayxHwYuJqx8jhbVFu36aN5+J9cPnaPK4nkiey/eBtZVz5fNuzpeU/v5+3Xzz\nzXr11VeTHor3eEc6VihIb74pffObbs534gRfftUUcgX9z4P/U6VCqeHneu3Ea3z5VVEoSN/5jvT6\n640/16FD0pVXNv48qVLrad61VqZzRjp50s2HWLnMB1idzLTP9KSd1DcPuflierP8Jp+JdVIoSN//\nvnT++Y0/1/e+x9uxmkKuoB8N/8jJ++fvf/73vHeqKBSkoSE3X0tBUAnSYa1QWbBz507dd999+uIX\nv6je3l5Wp2fAO9KxRYukD39Y+uM/dnO+3l7p7W93c640uf791+tPv/enTs51fsf5et+C9zk5V5p8\n4hPSt75V+eXCP/pHbs6TFjX3mbbh+0zbRQultjZ3H2Kf/rSb82RdjTLvzpZOdZY69cf/z82cXnnh\nlXpn2zudnCvrli2TvvrVyg1DFz71KTfnSZNf/5Vf1zd/9E1n759PXvxJJ+dJk/e+V3rXu9x9LX3m\nM27O00gHDx7UnXfeqaNHj+rpp59Wb2+vrr76aq1evVrXXHONrrnmmqSHmBomfGuUOp3AGNvocwAA\norHW6tu5b6vX9p7z2pG//5oOff3LumrjnnNee/XVP9GJEz/UxRc/5GCUqJcT+05o8FOD+tD+D53z\n2i++8wv9eOOPdfnfXJ7AyAAgvYwxstaec/t5pvwzMFCfpe3e3ugZa3h4WL/927+tXbt2qVQqadWq\nVerr61NXV1ddxpRVYXPNyjQANCEzVaNmrX3r99NeDS/zVrX/Hr6rXYmg0EoEAED9xQnB9bJ9+3at\nXbtWpVKl1bFcLqutrS2x8aQdDyADgGZW7fvc1g7TJK8UqrmvuGVKAaBJHD9+XD09PZKk/fv3a8mS\nJSo2w+PJG4SVaQBoVqEBq0bPtCVMp1KNnmnujwBA81izZo36+/s1ODiow4cPa9u2bW+9du+99yoI\nArW0tGjDhg0JjjI9CNMA0KymApY5K0kZa8K3xpKVMRQ1pU6tfcWtZHKkaQBoBt3d3Vq3bl3V1+64\n4w7ddddduuWWWxyPKr24IgKAZhUSsOy0/1v9VYJX2tAzDQCoxVqrLVu26KabblK5XE56OKlBmAaA\nJhUasGpsjUXySil6pgEANTz11FO66qqrtHnzZh1ytd9eBlDmDQDNKiRgmRoPILM2EMkrhWr1TAfi\nCe0A0ORWrFghSert7U12ICnDyjQANKuQgFV5xhhbY2XKDD3T3B8BACA6wjQANKsYT/MmeaVTrZ5p\nyrwBAIiHMA0ATSosYBlrZELLvAnTqcTKNAAAdUeYBoBmVXNlmuSVKTPsM03pPgAA0RGmAaBZGckG\n1Xumbc19pgleqWMkBSGvcX8EAIBYCNMA0KRMLqTMWzlWpjMmbK4leqYBAIiLMA0AzSqszNsahS0+\n0zOdUjOUeTOlAABER5gGgGYVFrAsT6vKnBmmlNJ9AACiI0wDQLOqFbDYZzpTam2Nxf0RAADiKSQ9\nAABAMkIDluVp3plT48YJPdMAgNOGh4f18MMPa+HChbrsssu0dOlSp8dHcezYMe3evVsvvPCCNmzY\n4Px4iZVpAGheNbfGqn4IPdMpRc80AGAW+vr6tGzZMt1www168MEHnR8fRVdXl5YuXaqxsbFEjpcI\n0wDQvGr1TNcs8+arI3Vm6pnOkaYBANKLL76oCy64QIVCQcPDw86PTxuuiACgWYU+zVuUeWcMPdMA\ngNkIgkD5fF5SvIdTxjl++/btkc/jC8I0ADSp2j3T1Y+xNhDJK4Vq9UwH9EwDACouvvhiDQ0NaXR0\nVJ2dnU6Of+ONNyKf57TQFiZHxxOmAaBZ1dhnmpXpjJmhZ5ontAMAJOn666/XU089pUcffVTr1q1z\nfnwUJ06c0GOPPaZnnnlG+/btc368RJgGgOYVGrBm6pkmeKUOW4cDAKYcPHhQ1113nZYtW6b58+dr\n5cqVeuihhyRJCxYs0O23367Pfe5zuvLKKxtyfL3G2tHRofXr16u/v1+XXnppQ46fCVtjAUCzqtUz\nTfLKlFo902yNBQDNY3h4WKtXr9auXbtUKpW0atUq9fX1qaury8nxknTgwAE9+uijb/35u9/9rkZH\nR9/680c/+lF9/OMf92KsMyFMA0CTitczzcp0KrEyDQDeqNf3aJx+3+3bt2vt2rUqlUqSpHK5rLa2\nNmfHS9Ill1yirVu3vvXnu+++W5s2bfJyrDMhTANAszJTD5+q9kIuCDmI5JVKoXMteqYBwLG5PvRq\nLo4fP66enh5J0v79+7VkyRIVi0Vnx2dtrIRpAGhWOYWsTIe9INEznU4mx9ZYAABpzZo16u/v1+Dg\noA4fPqxt27ZJko4cOaIDBw5o9+7dWrRokXp6erRixYpZHx/lZ8x1rJK0d+9ePf7449q6davuuece\nrV+/Xu3t7XU9fjYI0wDQpMLLvFUjXJG8UqnW1lj0TANA0+ju7g59yvby5cu1Y8cObdq0SYVC9ZhY\n6/jZ/oyzzZs3L/K5LrzwQh07dkyS9PLLL1cNwnM9fjZ4mjcANKsYW2NVStNIXqkzw9ZYTCkANLeO\njg4NDQ1p4cKFKpfLGhkZcfYzPv/5z0c+V3t7uxYsWKDx8fFZh/Z6Hn8aYRoAmlVIwDIzbI1F8kqh\nGR5ARuk+ADS3LVu2aGBgQO3t7dqzZ486OzsT+RmzVSqVNDk5qS984Qu6/PLLnR9/GmXeANCsQgKW\ntbWTF8ErfWptjcX9EQDA/fff78XPmK2Wlhbdd9992rhxo2688Ubnx59GmAaAJkXPdBOhZxoAkCFf\n+cpX1NHRoQ984ANavHix8+NPI0wDQLOK3TNNh1DqzNAzbXKkaQBAenz2s59N9PjTuCICgGYVFrBq\nhGkpoMw7jWpV7gdiZRoAgBgI0wDQrEJXpsUDyDKmVs80Zd4AAMRDmAaAJhXeMx2erNgaK6VmeJo3\nUwoAQHSEaQBoVqEBi62xMmemnmlK9wEAiIwwDQDNKrRnWjXDNMErhViZBgCg7gjTANCsaj3Nm+SV\nKfRMAwBQf4RpAGhSJhfWM50LDVf0TKdUTtwfAQCgzgjTANCsjGSDsK2xgpCDSF5pdLo0P6ysn9J9\nAACiI0wDQLOqVc1Nz3Q2hW6F5nogAACkH2EaAJpUza2xQsMVySu1Qm6e0DMNAEA8haQHAABISIwH\nkNEznWJTT283Z88fUwoAmHLs2DHt3r1bL7zwgjZs2OD8+CgOHTqkffv26dlnn9XKlSt1xRVXOD1e\nYmUaAJpX6NZY7DOdSaE3T+iZBgBUdHV1aenSpRobG0vk+CieeOIJLV68WLfddpseeOAB58dLrEwD\nQPOqEa5qPfqZ4JVO4WX94v4IACB1br31VknS4OCguru7nR8vsTINAE0rNFwF4T3T1gYieaVUWM90\nQM80ACA527dvn9PxO3fu1MaNGxM5njANAM2qVs90zTJvvjpSKbSsf2rPcQAAFPJd0cDj33jjjdjn\n6u/v180336xXX301keO5IgKAZhUSruy0/3suyrxTq1ZZP1MKAJB04sQJPfbYY3rmmWe0b98+58dH\nsXPnTt1777269tprtWPHDufHS4RpAGheIeHK8ACyTAor62drLABoLgcPHtR1112nZcuWaf78+Vq5\ncqUeeughSVJHR4fWr1+v/v5+XXrppQ05vl5jveaaa7R37149+eSToWXacz1+JjyADACaVJx9ptka\nK8VYmQaApjc8PKzVq1dr165dKpVKWrVqlfr6+tTV1eXkeEk6cOCAHn300bf+/N3vflejo6Nv/fmj\nH/2oPv7xj3sx1pkQpgGgWcXYZ5rklWK1eqYp3QcAZ+r1kRuntXn79u1au3atSqWSJKlcLqutrc3Z\n8ZJ0ySWXaOvWrW/9+e6779amTZu8HOtMCNMA0KxyIT3TM5R5E7zSyeTYGgsAfDDH53vNyfHjx9XT\n0yNJ2r9/v5YsWaJisejs+KyNlTANAE2qZpk3K9PZE7Y1Fj3TANA01qxZo/7+fg0ODurw4cPatm2b\nJOnIkSM6cOCAdu/erUWLFqmnp0crVqyY9fFRfsZcxypJe/fu1eOPP66tW7fqnnvu0fr169Xe3l7X\n42eDMA0AzSrGA8jomU4xeqYBoOl1d3dr3bp1VV9bvny5duzYoU2bNqlQqB4Tax0/259xtnnz5kU+\n14UXXqhjx45Jkl5++eWqQXiux88GT/MGgGZlJBtUW6o0sjzNO3tC55ueaQBodh0dHRoaGtLChQtV\nLpc1MjLi7Gd8/vOfj3yu9vZ2LViwQOPj47MO7fU8/jTCNAA0q9CyX9EznUHhZf3i/ggANLktW7Zo\nYGBA7e3t2rNnjzo7OxP5GbNVKpU0OTmpL3zhC7r88sudH38aZd4A0KTomW4y9EwDAELcf//9XvyM\n2WppadF9992njRs36sYbb3R+/GmEaQBoVjV7aOmZzpwaW2MxpQCANPnKV76ijo4OfeADH9DixYud\nH38aYRoAmlVYuApqHRSI5JVSYTdPAnqmAQDp8tnPfjbR40+jZxoAmlXoyjT7TGdRWFk/Zd4AAMRD\nmAaAJhWnZ5oy7xRjaywAAOqKMA0AzSrmyjRfHSlVo2fa5EjTAABExRURADSrkHBV+SvKvDOHlWkA\nAOqKMA0AzSokXBlraoQrklda0TMNAEB9EaYBoEmZXFjPdE70TGdQ2LQypQAAxBI7TBtjNhtjDhtj\nvj/162P1HBgAoMFi90yTvFKpVs80pfsAAEQ2l32mraQHrbUP1mswAACH6JluKuFPbxf3RwCgzviu\nbA5zCdMSX78AkFpxtsYieaVYyLTSMw0A9WWt5VO1Scy1Z/rfGWN+aIz5sjHmbXUZEQDADSMpqPLX\n1siGlHnTM51iRrJB9TJvphQAgOhqhmljzJPGmOeq/PqEpD+R1C3pg5J+KukPHYwXAFAvoT209Exn\nUo2tsShHBAAguppl3tbaFbP5IcaY/yrpr8Je37x581u/7+3tVW9v7+xGBwBonFplv/RMZw490wAw\nNwMDAxoYGEh6GPBI7J5pY8wF1tqfTv3xGknPhf2308M0AMAPoeEqCF+ZtjYQySulwm6eBPRMA8Bs\nnL0oePfddyc3GHhhLg8g+4/GmA+q8tX8Y0m/V58hAQCcqLU1Fg8gy54aW2MxpQAARBc7TFtrf7ee\nAwEAOBa2NVaVh5JNe1Ukr5SiZxoAgLqa69O8AQBpFRKuzAwPICN4pVNYWT9bYwEAEA9hGgCaVJx9\npisr2Xx1pFKNlWmmFACA6Pj6BIBmRc90c6nRM021AQAA0RGmAaBZ5UJ6pinzziSTY2ssAADqiTAN\nAE2qZpl3jTBN8kqpWvuKM6UAAERGmAaAZlXrAWQhKivZJK9UqtUzzZQCABAZYRoAmlWtcKWQ/lqS\nV3rRMw0AQF0RpgGgWYXtM21tjYeQ0TOdVuFl/eL+CAAAMRCmAaBJ1QxX1ARnDz3TAADUFWEaAJqV\nkRRU+XsryRpZe+6L9EynmJFsUL3MmykFACA6wjQANKuwMu/gdLqqtjIdiOSVUjWmlNJ9AACiI0wD\nQLOq+QAyeqazJqysnzJvAADiIUwDQJOq2TNtazycjOSVTrTBAwBQV4RpAGhWMVemSV4pVWNrLKYU\nAIDoCNMA0KxqbY1FmM6eGlNK6T4AANERpgGgWdUKV/RMZw490wAA1BdhGgCalMnV6pnO1Vi15qsj\nlXIKn2+mFACAyPj6BIBmRc90c6nRM021AQAA0RGmAaBZ1eyZlijzzpaaT29nSgEAiIwwDQBNqvbW\nWKxMZ07IlNIzDQBAPIRpAGhWM5R5s890xnB/BACAuiJMA0Czome6udAzDQBAXRWSHgAAIBn5+Xn9\n6NYf6cX/8OIZfz95alK5/9Gh//N/3i1jzrznOjFxXPl8u8thok4K8wt69mPPKlc8c04nT0xq4acW\nJjQqAADSy1S9S13PExhjG30OAEB0dtJq4s2Jqq+ZjnFZlc/9e1NQoTC/0UNDAwRjgSZHJs99wUiF\nrgKr0wAQkTFG1lo+PJsYYRoAAAAAIiJMg55pAAAAAAAiIkwDAAAAABARYRoAAAAAgIgI0wAAAAAA\nRESYBgAAAAAgIsI0AAAAAAAREaYBAAAAAIiIMA0AAAAAQESEaQAAAAAAIiJMAwAAAAAQEWEaAAAA\nAICICNMAAAAAAEREmAYAAAAAICLCNAAAAAAAERGmAQAAAACIiDANAAAAAEBEhGkAAAAAACIiTAMA\nAAAAEBFhGgAAAACAiAjTAAAAAABERJgGAAAAACAiwjQAAAAAABERpgEAAAAAiIgwDQAAAABARIRp\nAAAAAAAiIkwDAAAAABARYRoAAAAAgIgI0wAAAAAARESYBgAAAAAgIsI0AAAAAAAREaYBAAAAAIiI\nMA0AAAAAQESEaQAAAAAAIiJMAwAAAAAQEWEaAAAAAICICNMAAAAAAEREmAYAAAAAICLCNAAAAAAA\nERGmAQAAAACIiDANAAAAAEBEhGkAAAAAACIiTAMAAAAAEBFhGgAAAACAiAjTAAAAAABERJgGAAAA\nACAiwjQAAAAAABERpgEAAAAAiIgwDQAAAABARIRpAAAAAAAiIkwDAAAAABARYRoAAAAAgIgI0wAA\nAAAARESYBgAAAAAgIsI0AAAAAAAREaYBAAAAAIiIMA0AAAAAQESEaQAAAAAAIiJMAwAAAAAQEWEa\nAAAAAICICNMAAAAAAEREmEaogYGBpIeAmJi79GLu0ou5Sy/mLr2Yu/Ri7pAFhGmE4kMuvZi79GLu\n0ou5Sy/mLr2Yu/Ri7pAFhGkAAAAAACIiTAMAAAAAEJGx1jb2BMY09gQAAAAAkABrrUl6DEhOw8M0\nAAAAAABZQ5k3AAAAAAAREaYBAAAAAIiIMA0AAAAAQEQNC9PGmI8ZY543xhwyxvx+o86D+jPGXGSM\n+WtjzH5jzD5jzM1JjwmzZ4zJG2O+b4z5q6THgmiMMW8zxnzDGHPAGDNojPlI0mPC7BhjNkx9Zj5n\njPlzY0xr0mNCdcaYR4wxQ8aY56b93XnGmCeNMQeNMd8yxrwtyTGiupC5+8LUZ+YPjTGPG2O6khwj\nqqs2d9NeW2+MCYwx5yUxNmAuGhKmjTF5SV+S9DFJPZL+lTHmkkacCw0xLulWa+0SSR+RtJb5S5V1\nkgYl8XTB9PnPknZZay+RdJmkAwmPB7NgjHm3pH8r6Qpr7fsl5SX9TpJjQk1fUeX6ZLr/IOlJa+2v\nSto99Wf4p9rcfUvSEmvtByQdlLTB+agwG9XmTsaYiyStkPQT5yMC6qBRK9MfkvQja+1L1tpxSV+X\n9MkGnQt1Zq19zVr7g6nfn1Dlgv5Xkh0VZsMYc6Gkj0v6r5LYqiFFplZTPmqtfUSSrLUT1tpjCQ8L\ns/OmKjch24wxBUltkl5NdkgIY639G0k/P+uvPyGpb+r3fZJWOR0UZqXa3Flrn7TWBlN//L+SLnQ+\nMMwo5H0nSQ9K+rzj4QB106gwvVjSK9P+fHjq75AyUysul6vyBQX//SdJt0sKZvoP4Z1uSUeNMV8x\nxnzPGPOwMaYt6UFhZtbaYUl/KOllSUck/cJa+1Syo0JEi6y1Q1O/H5K0KMnBILZ/I2lX0oPA7Bhj\nPinpsLX22aTHAsTVqDBNeWkGGGM6JH1D0rqpFWp4zBjzLyW9bq39vliVTqOCpCsk/Rdr7RWSRkSp\naSoYY94r6RZJ71aliqfDGHN9ooNCbNZaK65jUscYs1HSmLX2z5MeC2Y2dbP4Dkmbpv91QsMBYmtU\nmH5V0kXT/nyRKqvTSAljTFHSY5L+zFr735MeD2blH0v6hDHmx5L+QtI/NcY8mvCYMHuHVblDv3fq\nz99QJVzDf78u6W+ttT+z1k5IelyV9yPSY8gYc74kGWMukPR6wuNBBMaYf61KixM3sdLjvarcgPzh\n1HXLhZKeMcYsTHRUQESNCtNPS3qfMebdxpgWSZ+S1N+gc6HOjDFG0pclDVpr/yjp8WB2rLV3WGsv\nstZ2q/Lwoz3W2t9NelyYHWvta5JeMcb86tRf/TNJ+xMcEmbveUkfMcbMm/r8/GeqPAQQ6dEv6cap\n398oiZvIKWGM+Zgq7U2ftNaOJj0ezI619jlr7SJrbffUdcthVR7iyI0spEpDwvTUnfmbJP1vVS4o\n/tJay1Np0+M3JH1G0rKpLZa+P/VlhXShTDF9/p2krxljfqjK07zvS3g8mAVr7Q8lParKjeTTvX9/\nmtyIUIsx5i8k/a2ki40xrxhjPitpm6QVxpiDkv7p1J/hmSpz928kfVFSh6Qnp65X/kuig0RV0+bu\nV6e976bjmgWpZCqtQQAAAAAAYLYaVeYNAAAAAEBmEaYBAAAAAIiIMA0AAAAAQESEaQAAAAAAIiJM\nAwAAAAAQEWEaAAAAAICICNMAAAAAAET0/wF7SrsIXONQ8gAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "p2.plot_pulses();" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Software versions:" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
SoftwareVersion
SciPy0.14.1
Numpy1.9.1
QuTiP3.1.0
matplotlib1.4.2
OSposix [linux]
Python3.4.0 (default, Apr 11 2014, 13:05:11) \n", "[GCC 4.8.2]
Cython0.21.2
IPython2.3.1
Tue Jan 13 14:14:17 2015 JST
" ], "text/plain": [ "" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from qutip.ipynbtools import version_table\n", "version_table()" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" } }, "nbformat": 4, "nbformat_minor": 1 }