diff --git a/tools/qi.py b/tools/qi.py new file mode 100644 index 0000000000..07ce8766a5 --- /dev/null +++ b/tools/qi.py @@ -0,0 +1,241 @@ +# -*- coding: utf-8 -*- + +# Copyright 2017 IBM RESEARCH. All Rights Reserved. +# +# This file is intended only for use during the USEQIP Summer School 2017. +# Do not distribute. +# It is provided without warranty or conditions of any kind, either express or +# implied. +# An open source version of this file will be included in QISKIT-DEV-PY +# reposity in the future. Keep an eye on the Github repository for updates! +# https://github.com/IBM/qiskit-sdk-py +# ============================================================================= + +""" +A collection of useful quantum information functions. + +Author: Christopher J. Wood + +Currently this file is very sparse. More functions will be added in +the future. +""" + + +import numpy as np +from scipy.linalg import sqrtm +from tools.pauli import pauli_group + + +############################################################### +# State manipulation. +############################################################### + + +def partial_trace(state, sys, dims=None): + """ + Partial trace over subsystems of multi-partite matrix. + + Note that subsystems are ordered as rho012 = rho0(x)rho1(x)rho2. + + Args: + state (NxN matrix_like): a matrix + sys (list(int): a list of subsystems (starting from 0) to trace over + dims (list(int), optional): a list of the dimensions of the subsystems. + If this is not set it will assume all subsystems are qubits. + + Returns: + A matrix with the appropriate subsytems traced over. + """ + # convert op to density matrix + rho = np.array(state) + if rho.ndim == 1: + rho = outer(rho) # convert state vector to density mat + + # compute dims if not specified + if dims is None: + n = int(np.log2(len(rho))) + dims = [2 for i in range(n)] + if len(rho) != 2 ** n: + print("ERRROR!") + else: + dims = list(dims) + + # reverse sort trace sys + if isinstance(sys, int): + sys = [sys] + else: + sys = sorted(sys, reverse=True) + + # trace out subsystems + for j in sys: + # get trace dims + dpre = dims[:j] + dpost = dims[j+1:] + dim1 = int(np.prod(dpre)) + dim2 = int(dims[j]) + dim3 = int(np.prod(dpost)) + # dims with sys-j removed + dims = dpre + dpost + # do the trace over j + rho = __trace_middle(rho, dim1, dim2, dim3) + return rho + + +def __trace_middle(op, dim1=1, dim2=1, dim3=1): + """ + Partial trace over middle system of tripartite state. + + Args: + op (NxN matrix_like): a tri-partite matrix + dim1: dimension of the first subsystem + dim2: dimension of the second (traced over) subsystem + dim3: dimension of the third subsystem + + Returns: + A (D,D) matrix where D = dim1 * dim3 + """ + + op = op.reshape(dim1, dim2, dim3, dim1, dim2, dim3) + d = dim1 * dim3 + return op.trace(axis1=1, axis2=4).reshape(d, d) + + +def vectorize(rho, basis='col'): + """Flatten an operator to a vector in a specified basis. + + Args: + rho (ndarray): a density matrix. + basis (str): the basis to vectorize in. Allowed values are + - 'col' (default) flattens to column-major vector. + - 'row' flattens to row-major vector. + - 'pauli'flattens in the n-qubit Pauli basis. + + Returns: + ndarray: the resulting vector. + + """ + if basis == 'col': + return rho.flatten(order='F') + elif basis == 'row': + return rho.flatten(order='C') + elif basis == 'pauli': + num = int(np.log2(len(rho))) # number of qubits + if len(rho) != 2**num: + print('error input state must be n-qubit state') + vals = list(map(lambda x: np.real(np.trace(np.dot(x.to_matrix(), rho))), + pauli_group(num))) + return np.array(vals) + + +def devectorize(vec, basis='col'): + """Devectorize a vectorized square matrix. + + Args: + vec (ndarray): a vectorized density matrix. + basis (str): the basis to vectorize in. Allowed values are + - 'col' (default): flattens to column-major vector. + - 'row': flattens to row-major vector. + - 'pauli': flattens in the n-qubit Pauli basis. + + Returns: + ndarray: the resulting matrix. + + """ + d = int(np.sqrt(vec.size)) # the dimension of the matrix + if len(vec) != d*d: + print('error input is not a vectorized square matrix') + + if basis == 'col': + return vec.reshape(d, d, order='F') + elif basis == 'row': + return vec.reshape(d, d, order='C') + elif basis == 'pauli': + num = int(np.log2(d)) # number of qubits + if d != 2 ** num: + print('error input state must be n-qubit state') + pbasis = np.array([p.to_matrix() for p in pauli_group(2)]) / num**2 + return np.tensordot(vec, pbasis, axes=1) + +def chop(op, epsilon=1e-10): + """ + Truncate small values of a complex array. + + Args: + op (array_like): array to truncte small values. + epsilon (float): threshold. + + Returns: + A new operator with small values set to zero. + """ + op.real[abs(op.real) < epsilon] = 0.0 + op.imag[abs(op.imag) < epsilon] = 0.0 + return op + +def outer(v1, v2=None): + """ + Construct the outer product of two vectors. + + The second vector argument is optional, if absent the projector + of the first vector will be returned. + + Args: + v1 (ndarray): the first vector. + v2 (ndarray): the (optional) second vector. + + Returns: + The matrix |v1> 0) diff --git a/tools/tomography.py b/tools/tomography.py index e06db2cc5d..62eaa60e27 100644 --- a/tools/tomography.py +++ b/tools/tomography.py @@ -17,468 +17,280 @@ from Smolin, Gambetta, Smith Phys. Rev. Lett. 108, 070502 (arXiv: 1106.5458) Author: Christopher J. Wood Jay Gambetta - Andrew Cross + +TODO: Process tomography, SDP fitting + """ import numpy as np from functools import reduce -from scipy import linalg as la -import matplotlib.pyplot as plt -from mpl_toolkits.mplot3d import proj3d -from matplotlib.patches import FancyArrowPatch -from tools.pauli import pauli_group, pauli_singles +from re import match +from itertools import product + +from qiskit import QuantumProgram +from tools.qi import vectorize, devectorize, outer + ############################################################### -# Plotting tools +# NEW CIRCUIT GENERATION ############################################################### -class Arrow3D(FancyArrowPatch): - """Standard 3D arrow.""" - - def __init__(self, xs, ys, zs, *args, **kwargs): - """Create arrow.""" - FancyArrowPatch.__init__(self, (0, 0), (0, 0), *args, **kwargs) - self._verts3d = xs, ys, zs - - def draw(self, renderer): - """Draw the arrow.""" - xs3d, ys3d, zs3d = self._verts3d - xs, ys, zs = proj3d.proj_transform(xs3d, ys3d, zs3d, renderer.M) - self.set_positions((xs[0], ys[0]), (xs[1], ys[1])) - FancyArrowPatch.draw(self, renderer) +""" +Basis should be specified as a dictionary {'X': [X0, X1], 'Y': [Y0, Y1], 'Z': [Z0, Z1]} +where X0 is the projector onto the 0 outcome state of 'X' +""" -# COMPLEMENT = {'1': '0', '0': '1'} +def build_state_tomography_circuits(Q_program, name, qubits, qreg, creg): + """ + """ + labels = __add_meas_circuits(Q_program, name, qubits, qreg, creg) + print('>> created state tomography circuits for "%s"' % name) + return labels + + +# Make private for now, since fit method not yet implemented +def __build_process_tomography_circuits(Q_program, name, qubits, qreg, creg): + """ + """ + # add preparation circuits + preps = __add_prep_circuits(Q_program, name, qubits, qreg, creg) + # add measurement circuits for each prep circuit + labels = [] + for circ in preps: + labels += __add_meas_circuits(Q_program, circ, qubits, qreg, creg) + # delete temp prep output + del Q_program._QuantumProgram__quantum_program['circuits'][circ] + print('>> created process tomography circuits for "%s"' % name) + return labels -# def compliment(value): -# """Swap 1 and 0 in a vector.""" -# return ''.join(COMPLEMENT[x] for x in value) +def __tomo_dicts(qubits, basis=None): + """Helper function. - -def plot_bloch_vector(bloch, title=""): - """Plot the Bloch sphere. - - Plot a sphere, axes, the Bloch vector, and its projections onto each axis. + Build a dictionary assigning a basis element to a qubit. Args: - bloch (list[double]): array of three elements where [, ,] - title (str): a string that represents the plot title + qubit (int): the qubit to add + tomos (list[dict]): list of tomo_dicts to add to + basis (list[str], optional): basis to use. If not specified + the default is ['X', 'Y', 'Z'] Returns: - none: plot is shown with matplotlib to the screen - + a new list of tomo_dict """ - # Set arrow lengths - arlen = 1.3 - - # Plot semi-transparent sphere - u = np.linspace(0, 2 * np.pi, 100) - v = np.linspace(0, np.pi, 100) - x = np.outer(np.cos(u), np.sin(v)) - y = np.outer(np.sin(u), np.sin(v)) - z = np.outer(np.ones(np.size(u)), np.cos(v)) - - fig = plt.figure(figsize=(6, 6)) - ax = fig.add_subplot(111, projection='3d') - ax.set_aspect("equal") - ax.plot_surface(x, y, z, color=(.5, .5, .5), alpha=0.1) - - # Plot arrows (axes, Bloch vector, its projections) - xa = Arrow3D([0, arlen], [0, 0], [0, 0], mutation_scale=20, lw=1, - arrowstyle="-|>", color=(.5, .5, .5)) - ya = Arrow3D([0, 0], [0, arlen], [0, 0], mutation_scale=20, lw=1, - arrowstyle="-|>", color=(.5, .5, .5)) - za = Arrow3D([0, 0], [0, 0], [0, arlen], mutation_scale=20, lw=1, - arrowstyle="-|>", color=(.5, .5, .5)) - a = Arrow3D([0, bloch[0]], [0, bloch[1]], [0, bloch[2]], mutation_scale=20, - lw=2, arrowstyle="simple", color="k") - bax = Arrow3D([0, bloch[0]], [0, 0], [0, 0], mutation_scale=20, lw=2, - arrowstyle="-", color="r") - bay = Arrow3D([0, 0], [0, bloch[1]], [0, 0], mutation_scale=20, lw=2, - arrowstyle="-", color="g") - baz = Arrow3D([0, 0], [0, 0], [0, bloch[2]], mutation_scale=20, lw=2, - arrowstyle="-", color="b") - arrowlist = [xa, ya, za, a, bax, bay, baz] - for arr in arrowlist: - ax.add_artist(arr) - - # Rotate the view - ax.view_init(30, 30) - - # Annotate the axes, shifts are ad-hoc for this (30, 30) view - xp, yp, _ = proj3d.proj_transform(arlen, 0, 0, ax.get_proj()) - plt.annotate("x", xy=(xp, yp), xytext=(-3, -8), textcoords='offset points', - ha='right', va='bottom') - xp, yp, _ = proj3d.proj_transform(0, arlen, 0, ax.get_proj()) - plt.annotate("y", xy=(xp, yp), xytext=(6, -5), textcoords='offset points', - ha='right', va='bottom') - xp, yp, _ = proj3d.proj_transform(0, 0, arlen, ax.get_proj()) - plt.annotate("z", xy=(xp, yp), xytext=(2, 0), textcoords='offset points', - ha='right', va='bottom') - - plt.title(title) - plt.show() - - -def plot_state_city(rho, title=""): - """Plot the cityscape of quantum state. - - Plot two 3d bargraphs (two dimenstional) of the mixed state rho - - Args: - rho (np.array[[complex]]): array of dimensions 2**n x 2**nn complex - numbers - title (str): a string that represents the plot title - - Returns: - none: plot is shown with matplotlib to the screen - """ - num = int(np.log2(len(rho))) + if basis is None: + basis = ['X', 'Y', 'Z'] + elif isinstance(basis, dict): + basis = basis.keys() - # get the real and imag parts of rho - datareal = np.real(rho) - dataimag = np.imag(rho) - - # get the labels - column_names = [bin(i)[2:].zfill(num) for i in range(2**num)] - row_names = [bin(i)[2:].zfill(num) for i in range(2**num)] - - lx = len(datareal[0]) # Work out matrix dimensions - ly = len(datareal[:, 0]) - xpos = np.arange(0, lx, 1) # Set up a mesh of positions - ypos = np.arange(0, ly, 1) - xpos, ypos = np.meshgrid(xpos+0.25, ypos+0.25) - - xpos = xpos.flatten() - ypos = ypos.flatten() - zpos = np.zeros(lx*ly) - - dx = 0.5 * np.ones_like(zpos) # width of bars - dy = dx.copy() - dzr = datareal.flatten() - dzi = dataimag.flatten() - - fig = plt.figure(figsize=(8, 8)) - ax1 = fig.add_subplot(2, 1, 1, projection='3d') - ax1.bar3d(xpos, ypos, zpos, dx, dy, dzr, color="g", alpha=0.5) - ax2 = fig.add_subplot(2, 1, 2, projection='3d') - ax2.bar3d(xpos, ypos, zpos, dx, dy, dzi, color="g", alpha=0.5) - - ax1.set_xticks(np.arange(0.5, lx+0.5, 1)) - ax1.set_yticks(np.arange(0.5, ly+0.5, 1)) - ax1.axes.set_zlim3d(-1.0, 1.0001) - ax1.set_zticks(np.arange(-1, 1, 0.5)) - ax1.w_xaxis.set_ticklabels(row_names, fontsize=12, rotation=45) - ax1.w_yaxis.set_ticklabels(column_names, fontsize=12, rotation=-22.5) - # ax1.set_xlabel('basis state', fontsize=12) - # ax1.set_ylabel('basis state', fontsize=12) - ax1.set_zlabel("Real[rho]") - - ax2.set_xticks(np.arange(0.5, lx+0.5, 1)) - ax2.set_yticks(np.arange(0.5, ly+0.5, 1)) - ax2.axes.set_zlim3d(-1.0, 1.0001) - ax2.set_zticks(np.arange(-1, 1, 0.5)) - ax2.w_xaxis.set_ticklabels(row_names, fontsize=12, rotation=45) - ax2.w_yaxis.set_ticklabels(column_names, fontsize=12, rotation=-22.5) - # ax2.set_xlabel('basis state', fontsize=12) - # ax2.set_ylabel('basis state', fontsize=12) - ax2.set_zlabel("Imag[rho]") - plt.title(title) - plt.show() - - -def plot_state_paulivec(rho, title=""): - """Plot the paulivec representation of a quantum state. - - Plot a bargraph of the mixed state rho over the pauli matricies - - Args: - rho (np.array[[complex]]): array of dimensions 2**n x 2**nn complex - numbers - title (str): a string that represents the plot title - - Returns: - none: plot is shown with matplotlib to the screen - - """ - num = int(np.log2(len(rho))) - labels = list(map(lambda x: x.to_label(), pauli_group(num))) - values = list(map(lambda x: np.real(np.trace(np.dot(x.to_matrix(), rho))), - pauli_group(num))) - numelem = len(values) - ind = np.arange(numelem) # the x locations for the groups - width = 0.5 # the width of the bars - fig, ax = plt.subplots() - ax.grid(zorder=0) - ax.bar(ind, values, width, color='seagreen') - - # add some text for labels, title, and axes ticks - ax.set_ylabel('Expectation value', fontsize=12) - ax.set_xticks(ind) - ax.set_yticks([-1, -0.5, 0, 0.5, 1]) - ax.set_xticklabels(labels, fontsize=12, rotation=70) - ax.set_xlabel('Pauli', fontsize=12) - ax.set_ylim([-1, 1]) - plt.title(title) - plt.show() - - -def n_choose_k(n, k): - """Return the number of combinations for n choose k. - - Args: - n (int): the total number of options . - k (int): The number of elements. - - Returns: - int: returns the binomial coefficient - - """ - if n == 0: - return 0 + if not tomos: + return [{qubit: b} for b in basis] else: - return reduce(lambda x, y: x * y[0] / y[1], - zip(range(n - k + 1, n + 1), - range(1, k + 1)), 1) - - -def lex_index(n, k, lst): - """Return the lex index of a combination.. - - Args: - n (int): the total number of options . - k (int): The number of elements. - lst - - Returns: - int: returns int index for lex order - + ret = [] + for t in tomos: + for b in basis: + t[qubit] = b + ret.append(t.copy()) + return ret """ - assert len(lst) == k, "list should have length k" - comb = list(map(lambda x: n - 1 - x, lst)) - dualm = sum([n_choose_k(comb[k - 1 - i], i + 1) for i in range(k)]) - return int(dualm) + if isinstance(qubits, int): + qubits = [qubits] + if basis is None: + basis = ['X', 'Y', 'Z'] + elif isinstance(basis, dict): + basis = basis.keys() + + return [dict(zip(qubits, b)) for b in product(basis, repeat=len(qubits))] - -def bit_string_index(s): - """Return the index of a string of 0s and 1s.""" - n = len(s) - k = s.count("1") - assert s.count("0") == n - k, "s must be a string of 0 and 1" - ones = [pos for pos, char in enumerate(s) if char == "1"] - return lex_index(n, k, ones) - - -def phase_to_color_wheel(complex_number): - """Map a phase of a complexnumber to a color in (r,g,b). - - complex_number is phase is first mapped to angle in the range - [0, 2pi] and then to a color wheel with blue at zero phase. +def __add_meas_circuits(Q_program, name, qubits, qreg, creg, prep=None): + """Helper function. """ - angles = np.angle(complex_number) - angle_round = int(((angles + 2 * np.pi) % (2 * np.pi))/np.pi*6) - # print(angleround) - color_map = {0: (0, 0, 1), # blue, - 1: (0.5, 0, 1), # blue-violet - 2: (1, 0, 1), # violet - 3: (1, 0, 0.5), # red-violet, - 4: (1, 0, 0), # red - 5: (1, 0.5, 0), # red-oranage, - 6: (1, 1, 0), # orange - 7: (0.5, 1, 0), # orange-yellow - 8: (0, 1, 0), # yellow, - 9: (0, 1, 0.5), # yellow-green, - 10: (0, 1, 1), # green, - 11: (0, 0.5, 1) # green-blue, - } - return color_map[angle_round] + if isinstance(qreg, str): + qreg = Q_program.get_quantum_registers(qreg) + if isinstance(creg, str): + creg = Q_program.get_classical_registers(creg) + orig = Q_program.get_circuit(name) + labels = [] -def plot_state_qsphere(rho): - """Plot the qsphere representation of a quantum state.""" - num = int(np.log2(len(rho))) - # get the eigenvectors and egivenvalues - we, stateall = la.eigh(rho) - for i in range(2**num): - # start with the max - probmix = we.max() - prob_location = we.argmax() - if probmix > 0.001: - print("The " + str(i) + "th eigenvalue = " + str(probmix)) - # get the max eigenvalue - state = stateall[:, prob_location] - loc = np.absolute(state).argmax() - # get the element location closes to lowest bin representation. - for j in range(2**num): - test = np.absolute(np.absolute(state[j]) - - np.absolute(state[loc])) - if test < 0.001: - loc = j - break - # remove the global phase - angles = (np.angle(state[loc]) + 2 * np.pi) % (2 * np.pi) - angleset = np.exp(-1j*angles) - # print(state) - # print(angles) - state = angleset*state - # print(state) - state.flatten() - # start the plotting - fig = plt.figure(figsize=(10, 10)) - ax = fig.add_subplot(111, projection='3d') - ax.axes.set_xlim3d(-1.0, 1.0) - ax.axes.set_ylim3d(-1.0, 1.0) - ax.axes.set_zlim3d(-1.0, 1.0) - ax.set_aspect("equal") - ax.axes.grid(False) - # Plot semi-transparent sphere - u = np.linspace(0, 2 * np.pi, 25) - v = np.linspace(0, np.pi, 25) - x = np.outer(np.cos(u), np.sin(v)) - y = np.outer(np.sin(u), np.sin(v)) - z = np.outer(np.ones(np.size(u)), np.cos(v)) - ax.plot_surface(x, y, z, rstride=1, cstride=1, color='k', - alpha=0.05, linewidth=0) - # wireframe - # Get rid of the panes - ax.w_xaxis.set_pane_color((1.0, 1.0, 1.0, 0.0)) - ax.w_yaxis.set_pane_color((1.0, 1.0, 1.0, 0.0)) - ax.w_zaxis.set_pane_color((1.0, 1.0, 1.0, 0.0)) + for dic in __tomo_dicts(qubits): - # Get rid of the spines - ax.w_xaxis.line.set_color((1.0, 1.0, 1.0, 0.0)) - ax.w_yaxis.line.set_color((1.0, 1.0, 1.0, 0.0)) - ax.w_zaxis.line.set_color((1.0, 1.0, 1.0, 0.0)) - # Get rid of the ticks - ax.set_xticks([]) - ax.set_yticks([]) - ax.set_zticks([]) + # Construct meas circuit name + label = '_meas' + for qubit, op in dic.items(): + label += op + str(qubit) + circ = Q_program.create_circuit(label, [qreg], [creg]) - d = num - for i in range(2**num): - # get x,y,z points - element = bin(i)[2:].zfill(num) - weight = element.count("1") - zvalue = -2 * weight / d + 1 - number_of_divisions = n_choose_k(d, weight) - weight_order = bit_string_index(element) - # if weight_order >= number_of_divisions / 2: - # com_key = compliment(element) - # weight_order_temp = bit_string_index(com_key) - # weight_order = np.floor( - # number_of_divisions / 2) + weight_order_temp + 1 - angle = (weight_order) * 2 * np.pi / number_of_divisions - xvalue = np.sqrt(1 - zvalue**2) * np.cos(angle) - yvalue = np.sqrt(1 - zvalue**2) * np.sin(angle) - ax.plot([xvalue], [yvalue], [zvalue], - markerfacecolor=(.5, .5, .5), - markeredgecolor=(.5, .5, .5), - marker='o', markersize=10, alpha=1) - # get prob and angle - prob will be shade and angle color - prob = np.real(np.dot(state[i], state[i].conj())) - colorstate = phase_to_color_wheel(state[i]) - a = Arrow3D([0, xvalue], [0, yvalue], [0, zvalue], - mutation_scale=20, alpha=prob, arrowstyle="-", - color=colorstate, lw=10) - ax.add_artist(a) - # add weight lines - for weight in range(d + 1): - theta = np.linspace(-2 * np.pi, 2 * np.pi, 100) - z = -2 * weight / d + 1 - r = np.sqrt(1 - z**2) - x = r * np.cos(theta) - y = r * np.sin(theta) - ax.plot(x, y, z, color=(.5, .5, .5)) - # add center point - ax.plot([0], [0], [0], markerfacecolor=(.5, .5, .5), - markeredgecolor=(.5, .5, .5), marker='o', markersize=10, - alpha=1) - plt.show() - we[prob_location] = 0 - else: - break + # add gates to circuit + for qubit, op in dic.items(): + circ.barrier(qreg[qubit]) + if op == "X": + circ.h(qreg[qubit]) + elif op == "Y": + circ.sdg(qreg[qubit]) + circ.h(qreg[qubit]) + if prep: + circ.barrier(qreg[qubit]) + else: + circ.measure(qreg[qubit], creg[qubit]) + # add circuit to QuantumProgram + Q_program.add_circuit(name+label, orig + circ) + # add label to output + labels.append(name+label) + # delete temp circuit + del Q_program._QuantumProgram__quantum_program['circuits'][label] + return labels -def plot_state(rho, method='city'): - """Plot the quantum state.""" - num = int(np.log2(len(rho))) - # Need updating to check its a matrix - if method == 'city': - plot_state_city(rho) - elif method == "paulivec": - plot_state_paulivec(rho) - elif method == "qsphere": - plot_state_qsphere(rho) - elif method == "bloch": - for i in range(num): - bloch_state = list(map(lambda x: np.real(np.trace( - np.dot(x.to_matrix(), rho))), - pauli_singles(i, num))) - plot_bloch_vector(bloch_state, "qubit " + str(i)) - else: - print("No method given") +def __add_prep_circuits(Q_program, name, qubits, qreg, creg): + """Helper function. + """ + if isinstance(qreg, str): + qreg = Q_program.get_quantum_registers(qreg) + if isinstance(creg, str): + creg = Q_program.get_classical_registers(creg) + orig = Q_program.get_circuit(name) + + labels = [] + for dic in __tomo_dicts(qubits): + + # Construct meas circuit name + label_p = '_prep' # prepare in positive eigenstate + label_m = '_prep' # prepare in negative eigenstate + for qubit, op in dic.items(): + label_p += op + 'p' + str(qubit) + label_m+= op + 'm' + str(qubit) + circ_p = Q_program.create_circuit(label_p, [qreg], [creg]) + circ_m = Q_program.create_circuit(label_m, [qreg], [creg]) + + # add gates to circuit + for qubit, op in dic.items(): + if op == "X": + circ_p.h(qreg[qubit]) + circ_m.x(qreg[qubit]) + circ_m.h(qreg[qubit]) + elif op == "Y": + circ_p.h(qreg[qubit]) + circ_p.s(qreg[qubit]) + circ_m.x(qreg[qubit]) + circ_m.h(qreg[qubit]) + circ_m.s(qreg[qubit]) + elif op == "Z": + circ_m.x(qreg[qubit]) + # add circuit to QuantumProgram + Q_program.add_circuit(name+label_p, circ_p + orig) + Q_program.add_circuit(name+label_m, circ_m + orig) + # add label to output + labels += [name+label_p, name+label_m] + # delete temp circuit + del Q_program._QuantumProgram__quantum_program['circuits'][label_p] + del Q_program._QuantumProgram__quantum_program['circuits'][label_m] + + return labels ############################################################### -# Constructing tomographic measurement circuits +# Tomography circuit labels ############################################################### +def __tomo_labels(name, qubits, basis=None, subscript=None): + """Helper function. + """ + if subscript is None: + subscript = '' + labels = [] + for dic in __tomo_dicts(qubits, basis): + label = '' + for qubit, op in dic.items(): + label += op + subscript + str(qubit) + labels.append(name+label) + return labels -def build_keys_helper(keys, qubit): - """Return array of measurement strings ['Xj', 'Yj', 'Zj'] for qubit=j.""" - tmp = [] - for k in keys: - for b in ["X", "Y", "Z"]: - tmp.append(k + b + str(qubit)) - return tmp +def state_tomography_labels(name, qubits, basis=None): + """ + """ + return __tomo_labels(name + '_meas', qubits, basis) + + +# Make private for now, since fit method not yet implemented +def __process_tomography_labels(name, qubits, basis=None): + """ + """ + preps = __tomo_labels(name + '_prep', qubits, basis, subscript='p') + preps += __tomo_labels(name + '_prep', qubits, basis, subscript='m') + return reduce(lambda acc, c: acc + __tomo_labels(c + '_meas', qubits, basis), preps, []) + +############################################################### +# Tomography measurement outcomes +############################################################### + +# Note: So far only for state tomography + +# Default Pauli basis +__default_basis = { 'X': [np.array([[0.5, 0.5], [0.5, 0.5]]), np.array([[0.5, -0.5], [-0.5, 0.5]])], + 'Y': [np.array([[0.5, -0.5j], [0.5j, 0.5]]), np.array([[0.5, 0.5j], [-0.5j, 0.5]])], + 'Z': [np.array([[1, 0], [0, 0]]), np.array([[0, 0], [0, 1]])]} -def build_tomo_keys(circuit, qubit_list): +def __counts_keys(n): + """helper function. """ - For input circuit string returns an array of all measurement circits orded in - lexicographic order from last qubit to first qubit. - Example: - qubit_list = [0]: [circuitX0, circuitY0, circuitZ0]. - qubit_list = [0,1]: [circuitX1X0, circuitX1Y0, circuitX1Z0, circuitY1X0,..., circuitZ1Z0]. - """ - keys = [circuit] - for j in sorted(qubit_list, reverse=True): - keys = build_keys_helper(keys, j) - return keys + return [bin(j)[2:].zfill(n) for j in range(2 ** n)] -# We need to build circuits in QASM lexical order, not standard! -def build_tomo_circuit_helper(Q_program, circuits, qreg: str, creg: str, qubit: int): - """ - Adds measurements for the qubit=j to the input circuits, so if circuits = [c0, c1,...] - circuits-> [c0Xj, c0Yj, c0Zj, c1Xj,...] - """ - for c in circuits: - circ = Q_program.get_circuit(c) - for b in ["X","Y","Z"]: - meas = b+str(qubit) - tmp = Q_program.create_circuit(meas, [qreg],[creg]) - qr = Q_program.get_quantum_registers(qreg) - cr = Q_program.get_classical_registers(creg) - if b == "X": - tmp.u2(0., np.pi, qr[qubit]) - if b == "Y": - tmp.u2(0., np.pi / 2., qr[qubit]) - tmp.measure(qr[qubit], cr[qubit]) - Q_program.add_circuit(c+meas, circ + tmp) +def __get_basis_ops(tup, basis): + return reduce(lambda acc, b: [np.kron(a,j) for a in acc for j in basis[b]], tup, [1]) -def build_tomo_circuits(Q_program, circuit, qreg: str, creg: str, qubit_list): + +def __counts_basis(n, basis): + return [dict(zip(__counts_keys(n), __get_basis_ops(key, basis))) + for key in product(basis.keys(), repeat=n)] + + +def marginal_counts(counts, meas_qubits): """ - Generates circuits in the input QuantumProgram for implementing complete quantum - state tomography of the state of the qubits in qubit_list prepared by circuit. + Returns a list of the measurement outcome strings for meas_qubits qubits in an + nq qubit system. """ - circ = [circuit] - for j in sorted(qubit_list, reverse=True): - build_tomo_circuit_helper(Q_program, circ, qreg, creg, j) - circ = build_keys_helper(circ, j) + + # Extract total number of qubits from count keys + nq = len(list(counts.keys())[0]) + + # keys for measured qubits only + qs = sorted(meas_qubits, reverse=True) + + meas_keys = __counts_keys(len(qs)) + + # get regex match strings for suming outcomes of other qubits + rgx = [reduce(lambda x, y: (key[qs.index(y)] if y in qs else '\d')+x, range(nq), '') for key in meas_keys] + + # build the return list + meas_counts = [] + for m in rgx: + c = 0 + for key, val in counts.items(): + if match(m, key): + c += val + meas_counts.append(c) + + # return as counts dict on measured qubits only + return dict(zip(meas_keys, meas_counts)) + + +def state_tomography_data(Q_program, name, meas_qubits, backend=None, basis=None): + """ + """ + if basis is None: + basis = __default_basis + labels = state_tomography_labels(name, meas_qubits) + counts = [marginal_counts(Q_program.get_counts(circ, backend), meas_qubits) for circ in labels] + shots = [sum(c.values()) for c in counts] + meas_basis = __counts_basis(len(meas_qubits), basis) + ret = [{'counts': i, 'meas_basis': j, 'shots': k} for i, j, k in zip(counts, meas_basis, shots)] + return ret ############################################################### @@ -486,18 +298,7 @@ def build_tomo_circuits(Q_program, circuit, qreg: str, creg: str, qubit_list): ############################################################### -def vectorize(op): - """Flatten an operator to a column-major vector.""" - return op.flatten(order='F') - - -def devectorize(v): - """Devectorize a column-major vectorized square matrix.""" - d = int(np.sqrt(v.size)) - return v.reshape(d, d, order='F') - - -def meas_basis_matrix(meas_basis): +def __tomo_basis_matrix(meas_basis): """Return a matrix of vectorized measurement operators. Measurement operators S = sum_j |j> + if weights is not None: + v = np.dot(W, freqs) #W.|n> + Sdg = S.T.conj() # S^*.W^* + inv = np.linalg.pinv(np.dot(Sdg,S)) + + # linear inversion of freqs + ret = devectorize(np.dot(inv, np.dot(Sdg, v))) + # renormalize to input trace value + ret = trace * ret / np.trace(ret) + return ret + + +def __state_leastsq_fit(state_data, weights=None, beta=0.5): + """ + """ + ks = state_data[0]['counts'].keys() + + # Get counts and shots + ns = np.array([dat['counts'][k] for dat in state_data for k in ks]) + shots = np.array([dat['shots'] for dat in state_data for k in ks]) + + # convert to freqs + freqs = (ns + beta) / (shots + 2 * beta) + + # Use standard least squares fitting weights + if weights is None: + weights = np.sqrt(shots / (freqs * (1 - freqs))) + + # Get measurement basis ops + ops = [dat['meas_basis'][k] for dat in state_data for k in ks] + + return __tomo_linear_inv(freqs, ops, weights, trace=1) + + +def __wizard(rho, epsilon=0.): """ Maps an operator to the nearest positive semidefinite operator by setting negative eigenvalues to zero and rescaling the positive eigenvalues. See arXiv:1106.5458 [quant-ph] """ - #print("Using wizard method to constrain positivity") - if normalize_flag: - rho = rho / np.trace(rho) dim = len(rho) rho_wizard = np.zeros([dim, dim]) - v, w = np.linalg.eigh(rho) # v eigenvecrors v[0] < v[1] <... + v, w = np.linalg.eigh(rho) # v eigenvecrors v[0] < v[1] <... for j in range(dim): if v[j] < epsilon: tmp = v[j] v[j] = 0. # redistribute loop x = 0. - for k in range(j+1,dim): + for k in range(j + 1, dim): x += tmp / (dim-(j+1)) - v[k] = v[k] + tmp / (dim -(j+1)) + v[k] = v[k] + tmp / (dim - (j+1)) for j in range(dim): - rho_wizard = rho_wizard + v[j] * outer(w[:,j]) + rho_wizard = rho_wizard + v[j] * outer(w[:, j]) return rho_wizard -def fit_state(freqs, meas_basis, weights=None, normalize_flag = True, wizard_flag = False): + +def fit_state(state_data, method='wizard', options=None): """ - Returns a matrix reconstructed by unconstrained least-squares fitting. """ - if weights is None: - W = np.eye(len(freqs)) # use uniform weights + if method in ['wizard', 'leastsq']: + rho = __state_leastsq_fit(state_data) + if method == 'wizard': + rho = __wizard(rho) else: - W = np.array(np.diag(weights)) - S = np.dot(W, meas_basis_matrix(meas_basis)) # actually W.S - v = np.dot(W, freqs) # W|f> - v = np.array(np.dot(S.T.conj(), v)) # S^*.W^*W.|f> - inv = np.linalg.pinv(np.dot(S.T.conj(), S)) # pseudo inverse of S^*.W^*.W.S - v = np.dot(inv, v) # |rho> - rho = devectorize(v) - if normalize_flag: - rho = rho / np.trace(rho) - if wizard_flag: - #rho_wizard = wizard(rho,normalize_flag) - rho = wizard(rho, normalize_flag=normalize_flag) - return rho - - - -############################################################### -# Parsing measurement data for reconstruction -############################################################### - -def nqubit_basis(n): - """ - Returns the measurement basis for n-qubits in the correct order for the - meas_outcome_strings function. - """ - b1 = np.array([ - np.array([[0.5, 0.5], [0.5, 0.5]]), np.array([[0.5, -0.5], [-0.5, 0.5]]), # Xp, Xm - np.array([[0.5, -0.5j], [0.5j, 0.5]]), np.array([[0.5, 0.5j], [-0.5j, 0.5]]), # Yp, Ym - np.array([[1, 0], [0, 0]]), np.array([[0, 0], [0, 1]]), # Zp, Zm - ]) - if n == 1: - return b1 - else: - bnm1 = nqubit_basis(n-1) - m = 2**(n-1) - d = bnm1.size // m**3 - return np.kron( bnm1.reshape(d, m, m, m), b1.reshape(3, 2, 2, 2)).reshape(3*d * 2*m, 2*m, 2*m) - -def meas_outcome_strings(nq): - """ - Returns a list of the measurement outcome strings for nq qubits. - """ - return [bin(j)[2:].zfill(nq) for j in range(2**nq)] - -def tomo_outcome_strings(meas_qubits,nq=None): - """ - Returns a list of the measurement outcome strings for meas_qubits qubits in an - nq qubit system. - """ - if nq is None: - nq = len(meas_qubits) - qs = sorted(meas_qubits, reverse=True) - outs = meas_outcome_strings(len(qs)) - res = []; - for s in outs: - label = "" - for j in range(nq): - if j in qs: - label = s[qs.index(j)] + label - else: - label = str(0) + label - res.append(label) - return res - -def none_to_zero(val): - """ - Returns 0 if the input argument is None, else it returns the input. - """ - if val is None: - return 0 - else: - return val - -############################################################### -# Putting it all together -############################################################### -def state_tomography(Q_program, tomo_circuits, shots, nq, - meas_qubits, method='leastsq_wizard'): - """ - Returns the reconstructed density matrix. - """ - m = len(meas_qubits) - counts = np.array([none_to_zero(Q_program.get_counts(c).get(s)) - for c in tomo_circuits - for s in tomo_outcome_strings(meas_qubits, nq)]) - if method == 'leastsq_wizard': - return fit_state(counts / shots, nqubit_basis(m), normalize_flag=True, wizard_flag=True) - elif method == 'least_sq': - return fit_state(counts / shots, nqubit_basis(m), normalize_flag=True, wizard_flag=False) - else: - print("error: unknown reconstruction method") - - -def state_fidelity(rho, psi): - """Return the state fidelity. - - F between a density matrix rho and a target pure state psi. - """ - return np.sqrt(np.abs(np.dot(psi, np.dot(rho, psi)))) - -def is_pos_def(x): - return np.all(np.linalg.eigvals(x) > 0) + # TODO: raise exception for unknown method + print('error: method unrecongnized') + pass + + return rho \ No newline at end of file diff --git a/tools/vizualization.py b/tools/vizualization.py new file mode 100644 index 0000000000..19d05982b1 --- /dev/null +++ b/tools/vizualization.py @@ -0,0 +1,413 @@ +# -*- coding: utf-8 -*- + +# Copyright 2017 IBM RESEARCH. All Rights Reserved. +# +# This file is intended only for use during the USEQIP Summer School 2017. +# Do not distribute. +# It is provided without warranty or conditions of any kind, either express or +# implied. +# An open source version of this file will be included in QISKIT-DEV-PY +# reposity in the future. Keep an eye on the Github repository for updates! +# https://github.com/IBM/qiskit-sdk-py +# ============================================================================= + +""" +Visualization functions for quantum states. + +Author: Jay Gambetta + Andrew Cross + Christopher J. Wood +""" + +import numpy as np +from functools import reduce +from scipy import linalg as la +import matplotlib.pyplot as plt +from mpl_toolkits.mplot3d import proj3d +from matplotlib.patches import FancyArrowPatch +from tools.pauli import pauli_group, pauli_singles + + +############################################################### +# Plotting tools +############################################################### + +class Arrow3D(FancyArrowPatch): + """Standard 3D arrow.""" + + def __init__(self, xs, ys, zs, *args, **kwargs): + """Create arrow.""" + FancyArrowPatch.__init__(self, (0, 0), (0, 0), *args, **kwargs) + self._verts3d = xs, ys, zs + + def draw(self, renderer): + """Draw the arrow.""" + xs3d, ys3d, zs3d = self._verts3d + xs, ys, zs = proj3d.proj_transform(xs3d, ys3d, zs3d, renderer.M) + self.set_positions((xs[0], ys[0]), (xs[1], ys[1])) + FancyArrowPatch.draw(self, renderer) + + +def plot_bloch_vector(bloch, title=""): + """Plot the Bloch sphere. + + Plot a sphere, axes, the Bloch vector, and its projections onto each axis. + + Args: + bloch (list[double]): array of three elements where [, ,] + title (str): a string that represents the plot title + + Returns: + none: plot is shown with matplotlib to the screen + + """ + # Set arrow lengths + arlen = 1.3 + + # Plot semi-transparent sphere + u = np.linspace(0, 2 * np.pi, 100) + v = np.linspace(0, np.pi, 100) + x = np.outer(np.cos(u), np.sin(v)) + y = np.outer(np.sin(u), np.sin(v)) + z = np.outer(np.ones(np.size(u)), np.cos(v)) + + fig = plt.figure(figsize=(6, 6)) + ax = fig.add_subplot(111, projection='3d') + ax.set_aspect("equal") + ax.plot_surface(x, y, z, color=(.5, .5, .5), alpha=0.1) + + # Plot arrows (axes, Bloch vector, its projections) + xa = Arrow3D([0, arlen], [0, 0], [0, 0], mutation_scale=20, lw=1, + arrowstyle="-|>", color=(.5, .5, .5)) + ya = Arrow3D([0, 0], [0, arlen], [0, 0], mutation_scale=20, lw=1, + arrowstyle="-|>", color=(.5, .5, .5)) + za = Arrow3D([0, 0], [0, 0], [0, arlen], mutation_scale=20, lw=1, + arrowstyle="-|>", color=(.5, .5, .5)) + a = Arrow3D([0, bloch[0]], [0, bloch[1]], [0, bloch[2]], mutation_scale=20, + lw=2, arrowstyle="simple", color="k") + bax = Arrow3D([0, bloch[0]], [0, 0], [0, 0], mutation_scale=20, lw=2, + arrowstyle="-", color="r") + bay = Arrow3D([0, 0], [0, bloch[1]], [0, 0], mutation_scale=20, lw=2, + arrowstyle="-", color="g") + baz = Arrow3D([0, 0], [0, 0], [0, bloch[2]], mutation_scale=20, lw=2, + arrowstyle="-", color="b") + arrowlist = [xa, ya, za, a, bax, bay, baz] + for arr in arrowlist: + ax.add_artist(arr) + + # Rotate the view + ax.view_init(30, 30) + + # Annotate the axes, shifts are ad-hoc for this (30, 30) view + xp, yp, _ = proj3d.proj_transform(arlen, 0, 0, ax.get_proj()) + plt.annotate("x", xy=(xp, yp), xytext=(-3, -8), textcoords='offset points', + ha='right', va='bottom') + xp, yp, _ = proj3d.proj_transform(0, arlen, 0, ax.get_proj()) + plt.annotate("y", xy=(xp, yp), xytext=(6, -5), textcoords='offset points', + ha='right', va='bottom') + xp, yp, _ = proj3d.proj_transform(0, 0, arlen, ax.get_proj()) + plt.annotate("z", xy=(xp, yp), xytext=(2, 0), textcoords='offset points', + ha='right', va='bottom') + + plt.title(title) + plt.show() + + +def plot_state_city(rho, title=""): + """Plot the cityscape of quantum state. + + Plot two 3d bargraphs (two dimenstional) of the mixed state rho + + Args: + rho (np.array[[complex]]): array of dimensions 2**n x 2**nn complex + numbers + title (str): a string that represents the plot title + + Returns: + none: plot is shown with matplotlib to the screen + + """ + num = int(np.log2(len(rho))) + + # get the real and imag parts of rho + datareal = np.real(rho) + dataimag = np.imag(rho) + + # get the labels + column_names = [bin(i)[2:].zfill(num) for i in range(2**num)] + row_names = [bin(i)[2:].zfill(num) for i in range(2**num)] + + lx = len(datareal[0]) # Work out matrix dimensions + ly = len(datareal[:, 0]) + xpos = np.arange(0, lx, 1) # Set up a mesh of positions + ypos = np.arange(0, ly, 1) + xpos, ypos = np.meshgrid(xpos+0.25, ypos+0.25) + + xpos = xpos.flatten() + ypos = ypos.flatten() + zpos = np.zeros(lx*ly) + + dx = 0.5 * np.ones_like(zpos) # width of bars + dy = dx.copy() + dzr = datareal.flatten() + dzi = dataimag.flatten() + + fig = plt.figure(figsize=(8, 8)) + ax1 = fig.add_subplot(2, 1, 1, projection='3d') + ax1.bar3d(xpos, ypos, zpos, dx, dy, dzr, color="g", alpha=0.5) + ax2 = fig.add_subplot(2, 1, 2, projection='3d') + ax2.bar3d(xpos, ypos, zpos, dx, dy, dzi, color="g", alpha=0.5) + + ax1.set_xticks(np.arange(0.5, lx+0.5, 1)) + ax1.set_yticks(np.arange(0.5, ly+0.5, 1)) + ax1.axes.set_zlim3d(-1.0, 1.0001) + ax1.set_zticks(np.arange(-1, 1, 0.5)) + ax1.w_xaxis.set_ticklabels(row_names, fontsize=12, rotation=45) + ax1.w_yaxis.set_ticklabels(column_names, fontsize=12, rotation=-22.5) + # ax1.set_xlabel('basis state', fontsize=12) + # ax1.set_ylabel('basis state', fontsize=12) + ax1.set_zlabel("Real[rho]") + + ax2.set_xticks(np.arange(0.5, lx+0.5, 1)) + ax2.set_yticks(np.arange(0.5, ly+0.5, 1)) + ax2.axes.set_zlim3d(-1.0, 1.0001) + ax2.set_zticks(np.arange(-1, 1, 0.5)) + ax2.w_xaxis.set_ticklabels(row_names, fontsize=12, rotation=45) + ax2.w_yaxis.set_ticklabels(column_names, fontsize=12, rotation=-22.5) + # ax2.set_xlabel('basis state', fontsize=12) + # ax2.set_ylabel('basis state', fontsize=12) + ax2.set_zlabel("Imag[rho]") + plt.title(title) + plt.show() + + +def plot_state_paulivec(rho, title=""): + """Plot the paulivec representation of a quantum state. + + Plot a bargraph of the mixed state rho over the pauli matricies + + Args: + rho (np.array[[complex]]): array of dimensions 2**n x 2**nn complex + numbers + title (str): a string that represents the plot title + + Returns: + none: plot is shown with matplotlib to the screen + + """ + num = int(np.log2(len(rho))) + labels = list(map(lambda x: x.to_label(), pauli_group(num))) + values = list(map(lambda x: np.real(np.trace(np.dot(x.to_matrix(), rho))), + pauli_group(num))) + numelem = len(values) + ind = np.arange(numelem) # the x locations for the groups + width = 0.5 # the width of the bars + fig, ax = plt.subplots() + ax.grid(zorder=0) + ax.bar(ind, values, width, color='seagreen') + + # add some text for labels, title, and axes ticks + ax.set_ylabel('Expectation value', fontsize=12) + ax.set_xticks(ind) + ax.set_yticks([-1, -0.5, 0, 0.5, 1]) + ax.set_xticklabels(labels, fontsize=12, rotation=70) + ax.set_xlabel('Pauli', fontsize=12) + ax.set_ylim([-1, 1]) + plt.title(title) + plt.show() + + +def n_choose_k(n, k): + """Return the number of combinations for n choose k. + + Args: + n (int): the total number of options . + k (int): The number of elements. + + Returns: + int: returns the binomial coefficient + + """ + if n == 0: + return 0 + else: + return reduce(lambda x, y: x * y[0] / y[1], + zip(range(n - k + 1, n + 1), + range(1, k + 1)), 1) + + +def lex_index(n, k, lst): + """Return the lex index of a combination.. + + Args: + n (int): the total number of options . + k (int): The number of elements. + lst + + Returns: + int: returns int index for lex order + + """ + assert len(lst) == k, "list should have length k" + comb = list(map(lambda x: n - 1 - x, lst)) + dualm = sum([n_choose_k(comb[k - 1 - i], i + 1) for i in range(k)]) + return int(dualm) + + +def bit_string_index(s): + """Return the index of a string of 0s and 1s.""" + n = len(s) + k = s.count("1") + assert s.count("0") == n - k, "s must be a string of 0 and 1" + ones = [pos for pos, char in enumerate(s) if char == "1"] + return lex_index(n, k, ones) + + +def phase_to_color_wheel(complex_number): + """Map a phase of a complexnumber to a color in (r,g,b). + + complex_number is phase is first mapped to angle in the range + [0, 2pi] and then to a color wheel with blue at zero phase. + """ + angles = np.angle(complex_number) + angle_round = int(((angles + 2 * np.pi) % (2 * np.pi))/np.pi*6) + # print(angleround) + color_map = {0: (0, 0, 1), # blue, + 1: (0.5, 0, 1), # blue-violet + 2: (1, 0, 1), # violet + 3: (1, 0, 0.5), # red-violet, + 4: (1, 0, 0), # red + 5: (1, 0.5, 0), # red-oranage, + 6: (1, 1, 0), # orange + 7: (0.5, 1, 0), # orange-yellow + 8: (0, 1, 0), # yellow, + 9: (0, 1, 0.5), # yellow-green, + 10: (0, 1, 1), # green, + 11: (0, 0.5, 1) # green-blue, + } + return color_map[angle_round] + + +def plot_state_qsphere(rho): + """Plot the qsphere representation of a quantum state.""" + num = int(np.log2(len(rho))) + # get the eigenvectors and egivenvalues + we, stateall = la.eigh(rho) + for i in range(2**num): + # start with the max + probmix = we.max() + prob_location = we.argmax() + if probmix > 0.001: + print("The " + str(i) + "th eigenvalue = " + str(probmix)) + # get the max eigenvalue + state = stateall[:, prob_location] + loc = np.absolute(state).argmax() + # get the element location closes to lowest bin representation. + for j in range(2**num): + test = np.absolute(np.absolute(state[j]) + - np.absolute(state[loc])) + if test < 0.001: + loc = j + break + # remove the global phase + angles = (np.angle(state[loc]) + 2 * np.pi) % (2 * np.pi) + angleset = np.exp(-1j*angles) + # print(state) + # print(angles) + state = angleset*state + # print(state) + state.flatten() + # start the plotting + fig = plt.figure(figsize=(10, 10)) + ax = fig.add_subplot(111, projection='3d') + ax.axes.set_xlim3d(-1.0, 1.0) + ax.axes.set_ylim3d(-1.0, 1.0) + ax.axes.set_zlim3d(-1.0, 1.0) + ax.set_aspect("equal") + ax.axes.grid(False) + # Plot semi-transparent sphere + u = np.linspace(0, 2 * np.pi, 25) + v = np.linspace(0, np.pi, 25) + x = np.outer(np.cos(u), np.sin(v)) + y = np.outer(np.sin(u), np.sin(v)) + z = np.outer(np.ones(np.size(u)), np.cos(v)) + ax.plot_surface(x, y, z, rstride=1, cstride=1, color='k', + alpha=0.05, linewidth=0) + # wireframe + # Get rid of the panes + ax.w_xaxis.set_pane_color((1.0, 1.0, 1.0, 0.0)) + ax.w_yaxis.set_pane_color((1.0, 1.0, 1.0, 0.0)) + ax.w_zaxis.set_pane_color((1.0, 1.0, 1.0, 0.0)) + + # Get rid of the spines + ax.w_xaxis.line.set_color((1.0, 1.0, 1.0, 0.0)) + ax.w_yaxis.line.set_color((1.0, 1.0, 1.0, 0.0)) + ax.w_zaxis.line.set_color((1.0, 1.0, 1.0, 0.0)) + # Get rid of the ticks + ax.set_xticks([]) + ax.set_yticks([]) + ax.set_zticks([]) + + d = num + for i in range(2**num): + # get x,y,z points + element = bin(i)[2:].zfill(num) + weight = element.count("1") + zvalue = -2 * weight / d + 1 + number_of_divisions = n_choose_k(d, weight) + weight_order = bit_string_index(element) + # if weight_order >= number_of_divisions / 2: + # com_key = compliment(element) + # weight_order_temp = bit_string_index(com_key) + # weight_order = np.floor( + # number_of_divisions / 2) + weight_order_temp + 1 + angle = (weight_order) * 2 * np.pi / number_of_divisions + xvalue = np.sqrt(1 - zvalue**2) * np.cos(angle) + yvalue = np.sqrt(1 - zvalue**2) * np.sin(angle) + ax.plot([xvalue], [yvalue], [zvalue], + markerfacecolor=(.5, .5, .5), + markeredgecolor=(.5, .5, .5), + marker='o', markersize=10, alpha=1) + # get prob and angle - prob will be shade and angle color + prob = np.real(np.dot(state[i], state[i].conj())) + colorstate = phase_to_color_wheel(state[i]) + a = Arrow3D([0, xvalue], [0, yvalue], [0, zvalue], + mutation_scale=20, alpha=prob, arrowstyle="-", + color=colorstate, lw=10) + ax.add_artist(a) + # add weight lines + for weight in range(d + 1): + theta = np.linspace(-2 * np.pi, 2 * np.pi, 100) + z = -2 * weight / d + 1 + r = np.sqrt(1 - z**2) + x = r * np.cos(theta) + y = r * np.sin(theta) + ax.plot(x, y, z, color=(.5, .5, .5)) + # add center point + ax.plot([0], [0], [0], markerfacecolor=(.5, .5, .5), + markeredgecolor=(.5, .5, .5), marker='o', markersize=10, + alpha=1) + plt.show() + we[prob_location] = 0 + else: + break + + +def plot_state(rho, method='city'): + """Plot the quantum state.""" + num = int(np.log2(len(rho))) + # Need updating to check its a matrix + if method == 'city': + plot_state_city(rho) + elif method == "paulivec": + plot_state_paulivec(rho) + elif method == "qsphere": + plot_state_qsphere(rho) + elif method == "bloch": + for i in range(num): + bloch_state = list(map(lambda x: np.real(np.trace( + np.dot(x.to_matrix(), rho))), + pauli_singles(i, num))) + plot_bloch_vector(bloch_state, "qubit " + str(i)) + else: + print("No method given") diff --git a/tutorial/sections/process_tomography_testing.ipynb b/tutorial/sections/process_tomography_testing.ipynb new file mode 100644 index 0000000000..54503b9a3d --- /dev/null +++ b/tutorial/sections/process_tomography_testing.ipynb @@ -0,0 +1,458 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "# Checking the version of PYTHON; we only support 3 at the moment\n", + "import sys\n", + "if sys.version_info < (3,0):\n", + " raise Exception(\"Please use Python version 3 or greater.\")\n", + " \n", + "# useful additional packages \n", + "import matplotlib.pyplot as plt\n", + "%matplotlib inline\n", + "import numpy as np\n", + "from scipy import linalg as la\n", + "from itertools import permutations\n", + "from functools import partial, reduce\n", + "import networkx as nx\n", + "\n", + "import sys\n", + "sys.path.append(\"../../\")\n", + "# importing the QISKit\n", + "from qiskit import QuantumProgram, QuantumCircuit\n", + "import Qconfig\n", + "\n", + "from re import match\n", + "import itertools as it\n", + "from functools import reduce\n", + "from tools.vizualization import plot_state\n", + "from tools.qi import *\n", + "from tools.pauli import pauli_group\n", + "import tools.tomography as tomo" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "X0 = np.array([[0.5, 0.5], [0.5, 0.5]])\n", + "X1 = np.array([[0.5, -0.5], [-0.5, 0.5]])\n", + "Y0 = np.array([[0.5, -0.5j], [0.5j, 0.5]])\n", + "Y1 = np.array([[0.5, 0.5j], [-0.5j, 0.5]])\n", + "Z0 = np.array([[1, 0], [0, 0]])\n", + "Z1 = np.array([[0, 0], [0, 1]])\n", + "\n", + "pauli_basis = {'X': [X0, X1], 'Y': [Y0, Y1], 'Z': [Z0, Z1]}" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "def process_tomo_data(Q_program, name, meas_qubits, basis=None):\n", + " if basis is None:\n", + " basis = pauli_basis\n", + " labels = tomo.process_tomography_labels(name, meas_qubits)\n", + " counts = [tomo.marginal_counts(Q_program.get_counts(circ), meas_qubits) for circ in labels]\n", + " meas_basis = counts_basis(len(meas_qubits), basis)\n", + " prep_basis = counts_basis(len(meas_qubits), basis)\n", + " ret = [ {'prep_basis': i, 'meas_basis': j} \n", + " for i in prep_basis for j in meas_basis]\n", + " for i in range(len(counts)):\n", + " ret[i]['counts'] = counts[i]\n", + " return ret" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def state_linear_inv(qp, name, meas_qubits):\n", + " if isinstance(meas_qubits, int):\n", + " meas_qubits = [meas_qubits]\n", + " state_dat = state_tomo_data(qp, name, meas_qubits)\n", + " ks = tomo.__counts_keys(len(meas_qubits))\n", + " state_cts = np.array([dat['counts'][k] for dat in state_dat for k in ks])\n", + " state_ops = [dat['meas_basis'][k] for dat in state_dat for k in ks]\n", + " return tomo_linear_inv(state_cts, state_ops)\n", + "\n", + "def process_linear_inv(qp, name, meas_qubits):\n", + " if isinstance(meas_qubits, int):\n", + " meas_qubits = [meas_qubits]\n", + " proc_dat = process_tomo_data(qp, name, meas_qubits)\n", + " ks = tomo.__counts_keys(len(meas_qubits))\n", + " proc_cts = np.array([dat['counts'][k] for dat in proc_dat for k in ks])\n", + " proc_ops = [np.kron(dat['prep_basis'][k].T, dat['meas_basis'][k]) for dat in proc_dat for k in ks]\n", + " return tomo_linear_inv(proc_cts, proc_ops, trace=2**len(meas_qubits))" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [], + "source": [ + "state_data = tomo.state_tomography_data(qp, 'x', [0])" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([dict_values([4893, 5107]), dict_values([4979, 5021]),\n", + " dict_values([0, 10000])], dtype=object)" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "cts = []\n", + "ops = []\n", + "[dat['counts'].values() for dat in state_data])" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def __state_least_sq_fit(state_data, weights=None, beta=0.5):\n", + " ks = state_data[0]['counts'].keys()\n", + " \n", + " # Get counts and shots\n", + " ns = np.array([dat['counts'][k] for dat in state_dat for k in ks])\n", + " shots = np.array([dat['shots'] for dat in state_dat for k in ks])\n", + " \n", + " # convert to freqs\n", + " freqs = (ns + beta) / (shots + 2 * beta)\n", + " \n", + " # Use standard least squares fitting weights\n", + " if weights is None:\n", + " weights = np.sqrt(shots / (freqs * (1 - freqs)))\n", + " \n", + " # Get measurement basis ops\n", + " ops = [dat['meas_basis'][k] for dat in state_dat for k in ks]\n", + " \n", + " return tomo_linear_inv(freqs, ops, weights, trace=1)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'pauli_basis' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[0;31m-----------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mcounts_basis\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mpauli_basis\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;31mNameError\u001b[0m: name 'pauli_basis' is not defined" + ] + } + ], + "source": [ + "def reconstruct_state(state_data=None, method='wizard'):\n", + " \"\"\"\n", + " Returns the reconstructed density matrix.\n", + " \"\"\"\n", + " m = len(meas_qubits)\n", + " counts = np.array([__none_to_zero(Q_program.get_counts(c).get(s))\n", + " for c in tomo_circuits\n", + " for s in tomo_outcome_strings(meas_qubits, nq)])\n", + " if method == 'leastsq_wizard':\n", + " return fit_state(counts / shots, nqubit_basis(m), normalize_flag=True, wizard_flag=True)\n", + " elif method == 'least_sq':\n", + " return fit_state(counts / shots, nqubit_basis(m), normalize_flag=True, wizard_flag=False)\n", + " else:\n", + " print(\"error: unknown reconstruction method\")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 95, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['id_pX0_mX0',\n", + " 'id_pX0_mY0',\n", + " 'id_pX0_mZ0',\n", + " 'id_pY0_mX0',\n", + " 'id_pY0_mY0',\n", + " 'id_pY0_mZ0',\n", + " 'id_pZ0_mX0',\n", + " 'id_pZ0_mY0',\n", + " 'id_pZ0_mZ0']" + ] + }, + "execution_count": 95, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "tomo.process_tomography_labels('id', [0])" + ] + }, + { + "cell_type": "code", + "execution_count": 68, + "metadata": {}, + "outputs": [], + "source": [ + "state_dat = state_tomo_data(qp, 'id', [0])\n", + "ks = tomo.__counts_keys(1)\n", + "state_cts = np.array([dat['counts'][k] for dat in state_dat for k in ks])\n", + "state_ops = [dat['meas_basis'][k] for dat in state_dat for k in ks]\n", + "beta = 0.5\n", + "state_fs = (state_cts + beta) / (10000 + 2 * beta)\n", + "state_ws = np.sqrt(10000 / (state_fs * (1-state_fs)))" + ] + }, + { + "cell_type": "code", + "execution_count": 67, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[ 1.0000+0.j 0.0026+0.0012j]\n", + " [ 0.0026-0.0012j 0.0000+0.j ]]\n", + "[[ 0.99995+0.j 0.00000+0.j]\n", + " [ 0.00000+0.j 0.00000+0.j]]\n", + "[[ 1.0000+0.j 0.0026+0.0012j]\n", + " [ 0.0026-0.0012j 0.0000+0.j ]]\n" + ] + } + ], + "source": [ + "print(chop(tomo_linear_inv(state_cts / 10000, state_ops),1e-5))\n", + "print(chop(tomo_linear_inv(state_fs, state_ops, weights=state_ws),1e-2))\n", + "print(chop(tomo_linear_inv(state_cts, state_ops),1e-5))" + ] + }, + { + "cell_type": "code", + "execution_count": 90, + "metadata": {}, + "outputs": [], + "source": [ + "proc_dat = process_tomo_data(qp, 'z', [0])\n", + "ks = tomo.__counts_keys(1)\n", + "proc_cts = np.array([dat['counts'][k] for dat in proc_dat for k in ks])\n", + "proc_ops = [np.kron(np.conj(dat['prep_basis'][k]), dat['meas_basis'][k]) for dat in proc_dat for k in ks]\n", + "beta = 0.5\n", + "proc_fs = (proc_cts + beta) / (10000 + 2 * beta)\n", + "proc_ws = np.sqrt(10000 / (proc_fs * (1-proc_fs)))" + ] + }, + { + "cell_type": "code", + "execution_count": 91, + "metadata": {}, + "outputs": [], + "source": [ + "choi1 = chop(tomo_linear_inv(proc_cts / 10000, proc_ops, trace=2),1e-5)\n", + "choi2 = chop(tomo_linear_inv(proc_fs, proc_ops, weights=proc_ws, trace=2),1e-4)\n", + "choi3 = chop(tomo_linear_inv(proc_cts, proc_ops, trace=2),1e-5)" + ] + }, + { + "cell_type": "code", + "execution_count": 92, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZEAAAEXCAYAAABsyHmSAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xu4HFWZ7/HvLwkhJEECEsMtyFWZiCAQA17QHYUYUIwi\nIIogiCaoCOIBYcYbKng4GmFEEchBFLxMBBVhEAUFAzIjQkCDhmuMMhA53MRIAEXIe/5Yq7HT2Zfq\n2tV7V7N/n+fpp7urq99+q6u73lprdVcpIjAzMytj1HAnYGZm3ctFxMzMSnMRMTOz0lxEzMysNBcR\nMzMrzUXEzMxKq00RkXS+pAcl/a6PxyXpTEnLJN0qadehztHMzNZUmyICfAOY3c/j+wDb58tc4Owh\nyMnMzPpRmyISEdcBf+5nljnAhZHcAEyStOnQZGdmZr0ZM9wJtGFz4N6m+/flafe3zihpLqm1wnrr\nrbfb1KlTS73g357++1rTxmg0T8cza0wbN2bdUvFXr17NqFHV1fHBxKvzsladW5F4ZZcT6rVeOxmr\n7vHqnFvV8arO7a677no4IiYXmbebikhhEbEAWAAwffr0WLx4cak4O88/eK1p86bO4tx7r1pj2pLj\nF5aKv2jRInp6eko9t+p4dV7WqnMrEq/sckK91msnY9U9Xp1zqzpe1blJuqfovLXpzipgBdDcpNgi\nTzMzs2HSTUXkMuCw/CutPYCVEbFWV5aZmQ2d2nRnSfoPoAfYWNJ9wKeAdQAi4hzgCmBfYBnwBHDE\n8GRqZmYNtSkiEfGOAR4P4INDlI6ZmRXQTd1ZZmZWMy4iZmZWmouImZmV5iJiZmaluYiYmVlpLiJm\nZlaai4iZmZXmImJmZqW5iJiZWWkuImZmVpqLiJmZleYiYmZmpbmImJlZaS4iZmZWmouImZmV5iJi\nZmaluYiYmVlpLiJmZlaai4iZmZXmImJmZqW5iJiZWWkuImZmVpqLiJmZleYiYmZmpbmImJlZaS4i\nZmZWmouImZmV5iJiZmaluYiYmVlpLiJmZlaai4iZmZXmImJmZqW5iJiZWWkuImZmVpqLiJmZleYi\nYmZmpbmImJlZaS4iZmZWmouImZmV5iJiZmaluYiYmVlpLiJmZlaai4iZmZXmImJmZqW5iJiZWWku\nImZmVlptioik2ZLulLRM0km9PN4jaaWk3+TLJ4cjTzMz+6cxw50AgKTRwFnA3sB9wE2SLouI21pm\n/UVEvGnIEzQzs17VpSUyA1gWEcsj4ilgITBnmHMyM7MBKCKGOwckHQDMjoj35vuHArtHxNFN8/QA\nPyC1VFYAx0fE0j7izQXmAkyZMmW3hQsXlsrrtgeWrzVt8tgNeOiplWtMmzZlm1LxV61axcSJE0s9\nt+p4dV7WqnMrEq/sckK91msnY9U9Xp1zqzpe1bnNnDnz5oiYXmTeWnRnFXQLsGVErJK0L/BDYPve\nZoyIBcACgOnTp0dPT0+pFzx2/jlrTZs3dRbn3nvVGtOWvL1ckVq0aBFlc6s6Xp2XtercisQru5xQ\nr/XayVh1j1fn3KqOV3Vu7SjcnSVpB0mfkHRW0/2dKspjBTC16f4WedqzIuKvEbEq374CWEfSxhW9\nvpmZlVCoiEg6ELgO2Bw4NE+eCJxeUR43AdtL2lrSWOBg4LKWHDaRpHx7Rs79kYpe38zMSijanfUZ\nYO+IWCLp7XnaEmDnKpKIiKclHQ1cCYwGzo+IpZKOyo+fAxwAvF/S08CTwMFRhwEdM7MRrGgReQFw\na74dTdeVbcRzF9UVLdPOabr9FeArVb2emZkNXtExkZv5ZzdWw8HAjdWmY2Zm3aRoS+QY4CpJRwIT\nJF0JvAiY1bHMzMys9goVkYi4Q9IOwJuAy4F7gcsbv5YyM7ORqfD/RCLiCeCiDuZiZmZdplARkfQL\n+hhEj4jXVJqRmZl1jaItkfNa7m8CHAl8q9p0zMysmxQdE7mgdZqk7wNfJ/2HxMzMRqDBHMV3BVDV\nYU/MzKwLFR0TeU/LpPHA/sANlWdkZmZdo+iYSOsfDR8H/hs4o9p0zMysmxQdE5nZ6UTMzKz79FlE\nJBU6K09ErH2GHzMzGxH6a4ksI/03RP3ME6Sj7pqZ2QjUZxGJiLqcf93MzGrKhcLMzEor+hPfMcAH\ngNcCG9PUxeXDnpiZjVxFWyJnAPNIp8jdDfg+6URV13QoLzMz6wJFi8j+wD4R8SXg6Xz9FsA//TUz\nG8GKFpHxpHOIADwpaXxE3AHs0pm0zMysGxT9x/rtwMtJp8NdDJws6a+k42eZmdkIVbSIHAs8k29/\nBDgbWB+Y24mkzMysOxQ97MlNTbfvBvbqWEZmZtY1Co2JSFoi6QRJUzudkJmZdY+iA+snk8ZEbpd0\nraR5kjbqXFpmZtYNinZnXQJcIml90s993wGcLunqiHhzJxM0q7Od5x+81rR5U2dx7Pxz1pi25PiF\ntYg3mFgjSZ3Xa9W5DVbRgXUAIuIxSd8B/gKMBfbtSFZmZtYVio6JSNLrJX0NeIDUvfVjYOsO5mZm\nZjVXtCXyJ2AVsBB4VUTc3rmUzMysWxQtInMi4saOZmJmZl2nUHeWC4iZmfXG5xMxM7PSXETMzKw0\nFxEzMyut8P9EJL0Y2BmY2Dw9Is6vOikzM+sORU+P+2/AJ4ElwBNNDwXgImJmNkIVbYl8GJgREbd2\nMhkzM+suRcdEngTu6GQiZmbWfYoWkU8AX5a0qaRRzZdOJmdmZvVWtDvrG/n6vU3TRBoTGV1lQmZm\n1j2KFhEfaNHMzNZS9Hwi9wDk7qspwAMRsbqTiZmZWf0VPRT88yRdCPwNWAE8KekCSRt0NDszM6u1\nogPjZwITgB2B9YCXAuPzdDMzG6GKjonMBraJiMYfDe+SdATw+86kZWZm3aBoS+RvwOSWaRsDf682\nHTMz6yZFi8h5wE8lHSVpH0lHAVcCC6pKRNJsSXdKWibppF4el6Qz8+O3Stq1qtc2M7NyinZnnUo6\nRe47gc3y7c9T0XGzJI0GzgL2Bu4DbpJ0WUTc1jTbPsD2+bI7cHa+NjOzYVL0J76NAy126mCLM4Bl\nEbEcQNJCYA7QXETmABfmXG6QNEnSphFxf4dyMjOzAShtk3t5QDo0Ir6Zb7+nrwBVHApe0gHA7Ih4\nb+O1gd0j4uimeS4HTouI6/P9q4ETI2JxL/HmAnMBpkyZstvChQsHm+KzVq1axcSJEweescVtDyxf\na9rksRvw0FMr15g2bco2wxKvN3VZ1ipzG4p4z9Xc6vwZ9meu2txmzpx5c0RMLzJvfy2RdwDfzLcP\n7WOeWh4KPiIWkMdrpk+fHj09PZXFXrRoEWXiHTv/nLWmzZs6i3PvvWqNaUveXqzgVR2vN3VZ1t6U\nzW0o4j1Xc6vzZ9ifuWpza0efRSQi9m26PbPDeawApjbd3yJPa3ceMzMbQkX/sf7rPqav1ZVU0k3A\n9pK2ljQWOBi4rGWey4DD8q+09gBWejzEzGx4Ff111natEyQJKN/B2CQinpZ0NOlnw6OB8yNiaf4p\nMRFxDnAFsC+wjHR2xSOqeG0zMyuv3yKSj5cFMLbpdsNWwNKqEomIK0iFonnaOU23A/hgVa9nZmaD\nN1BL5Pd93A7gv4CLK8/IzMy6Rr9FJCI+DSDphoi4cmhSMjOzblH0z4ZX5gHvF5OOmaWmx67pUG5m\nZlZzhYqIpFeTuq7WBZ4H/BVYH7iXigbXzcys+xQ9AOMZwOcjYiPgsXz9WeCrHcvMzMxqr2gReRHw\npZZppwHHVZuOmZl1k6JFZCWpGwvgfknTgA2B6g7WYmZmXadoEfkB6Y9+kI6V9XPgZuB7nUjKzMy6\nQ9FfZ3246fZ8STeQBtZ/0qnEzMys/ooeO+vM5vsRcX1E/Jg04G5mZiNU0e6sw/uY3tch4s3MbAQY\n6NhZjZNRjenlxFTbAA93JCszM+sKA42JNFoaY1mz1RHAA8C7O5GUmZl1h4GOnTUTQNIpEfHxoUnJ\nzMy6RdExkeskvah5gqQXS9q7AzmZmVmXKFpEzgIea5n2WJ5uZmYjVNEi8oJeTkV7P7BJxfmYmVkX\nKVpElkt6Xcu0HuAP1aZjZmbdpOg51k8GfiDpa6QzHG5LOse5z3NuNkIsOX7hWtMWLVrEkrevPX2o\n41WdmxVXqCUSEZcCs4AJwBvz9RvydDMzG6GKtkSIiBuBGzuYi5mZdZmix85aV9KpkpZLWpmnzZJ0\ndGfTMzOzOmvnzIY7AoeQ/q0OsBR4fyeSMjOz7lC0O+utwHYR8bik1QARsULS5p1LzczM6q5oS+Qp\nWgqOpMnAI5VnZGZmXaNoEbkYuEDS1gCSNgW+Avj3c2ZmI1jRIvJvpD8W/haYBNwN/An4dIfyMjOz\nLlD09LhPAccBx+VurIcjIgZ4mpmZPccV/p+IpO2Bg4DNgD9Juigi7u5YZmZmVntF/yfyTuDXwE7A\n48BLgVvydDMzG6GKtkROAfaNiOsaEyTtCXwT+E4nEjMzs/orOrC+PvDLlmk3kI6hZWZmI1TRInI6\n8DlJ4wAkrQecmqebmdkIVbQ76wOkE1AdK+lRYENAwP2Snj30SURsWX2KZmZWV0WLyLs6moWZmXWl\nov8Tuba36ZLWiYh/VJuSmZl1i6I/8f1pPtRJ87SdgMUdycrMzLpC0YH1W4Alkg5SchKwCDi7Y5mZ\nmVntFe3OOlHS5cCFwOdJx82aERHLOpmcmZnVW9GWCMDWwPOAh0j/DxnXkYzMzKxrFB0T+R7pSL6z\nI+LlwALgOkkndDI5MzOrt6ItkQeBXSLiJoCIOAvYAzigU4mZmVn9FR0T+UAv0+6S9MrqUzIzs27R\nb0tE0pkt949smeWiyjMyM7OuMVB31uEt97/Qcn/v6lIxM7NuM1B3lga4P2iSNgK+C2wF/BE4KCIe\n7WW+PwKPAc8AT0fE9KpzMTOz9gzUEmk9BW4nTol7EnB1RGwPXJ3v92VmRLzMBcTMrB4GaomMkTST\nf7ZAWu+PriCHOUBPvn0B6Z/wJ1YQ18zMOkwRfTcuchdSv62PiNh6UAlIf4mISfm2gEcb91vm+wOw\nktSddW5ELOgn5lxgLsCUKVN2W7hw4WBSXMOqVauYOHFi28+77YHla02bPHYDHnpq5RrTpk3ZZlji\n9aYuy1plbkMRz7nVI16dc6s6XtW5zZw58+aiPT79FpGqSPoZ6XwkrT4GXNBcNCQ9GhEb9hJj84hY\nIekFwE+BDzWfrrcv06dPj8WLqztO5KJFi+jp6Wn7eTvPP3itafOmzuLce69aY9qS44sVvKrj9aYu\ny9qbsrkNRTznVo94dc6t6nhV5yapcBEpej6RQYmIvfp6TNIDkjaNiPvzkYIf7CPGinz9oKRLgBnA\ngEXEzMw6p51jZ3XKZcC78+13A5e2ziBpgqT1G7eBWcDvhixDMzPrVR2KyGnA3pLuBvbK95G0maQr\n8jxTgOslLQFuBH4UET8ZlmzNzOxZQ9Kd1Z+IeAR4fS/T/wTsm28vB3Ye4tTMzGwAdWiJmJlZl3IR\nMTOz0lxEzMysNBcRMzMrzUXEzMxKcxExM7PSXETMzKw0FxEzMyvNRcTMzEpzETEzs9JcRMzMrDQX\nETMzK81FxMzMSnMRMTOz0lxEzMysNBcRMzMrzUXEzMxKcxExM7PSXETMzKw0FxEzMyvNRcTMzEpz\nETEzs9JcRMzMrDQXETMzK81FxMzMSnMRMTOz0lxEzMysNBcRMzMrzUXEzMxKcxExM7PSXETMzKw0\nFxEzMyvNRcTMzEpzETEzs9JcRMzMrDQXETMzK81FxMzMSnMRMTOz0lxEzMysNBcRMzMrzUXEzMxK\ncxExM7PSXETMzKw0FxEzMyvNRcTMzEpzETEzs9KGvYhIOlDSUkmrJU3vZ77Zku6UtEzSSUOZo5mZ\n9W7YiwjwO2B/4Lq+ZpA0GjgL2AeYBrxD0rShSc/MzPoyZrgTiIjbAST1N9sMYFlELM/zLgTmALd1\nPEEzM+uTImK4cwBA0iLg+IhY3MtjBwCzI+K9+f6hwO4RcXQfseYCc/PdFwN3VpjqxsDDNYxV93h1\nzq3qeM6tHvHqnFvV8arO7YURMbnIjEPSEpH0M2CTXh76WERcWvXrRcQCYEHVcQEkLY6IPsduhitW\n3ePVObeq4zm3esSrc25Vx6s6t3YMSRGJiL0GGWIFMLXp/hZ5mpmZDaM6DKwXcROwvaStJY0FDgYu\nG+aczMxGvGEvIpLeKuk+4BXAjyRdmadvJukKgIh4GjgauBK4HbgoIpYOU8pVdpNV3eVW53h1zq3q\neM6tHvHqnFvV8TrSfV9EbQbWzcys+wx7S8TMzLqXi4iZmZXmItKlNMC/M59rRtLyjqRlte7nIjJM\nBruhiKbBrLpudCRV9vmKiKhyOSWNruv7FhUOVEraSNLEqpZV0roVr4et8nXt1oWkrSRtnW/XKr/8\nw6Mpw50HuIgMSNKoKj5AksZLepukqTC4IiBpb0lHS3phcyxlJXJbV9LukjZs97n9iYjVVcSR9DpJ\nO1S5cY2IZ6qKl7/Qkyv6nOwrab0KC/BxwEG5CI+uIN7HgFnw7DHtSsvP/6qkLXJ+g1pmSR+XNKOK\n3LKTgS9LUl+flaLrXNL+kia385wBfAz45ACvOSSFz0VkABGxumkjPZj367Wknyl/QtLxecO4UX6N\nZ4tAwVivAHqA0yV9UdIcSRtG1mYsgDcDXwBOyIVuB0nj23j+WiTNk3T4YGI0eQ/wr7lGDvozm9//\n0ySNqeiLNg94T3+tpSKvk5ftBOCVEbG6+TmN2yXyfYS0XreKiGeaXqesScBHJI1qxBuEccBTwGeh\nkp2OfwE+kGMNKjdJ6wAHAa8BPtTXfEV2RCSNAS4GPtLXc9pZrzm3ucCRkt4ymNyq4CLSB0m7SFoi\n6TOSdoU1P+QlvogB/B/gIWB34IPApyUdJWm6pPEFP5DTSMXoW8AiYH3gCOBcSZ+UtKekddr8AG0B\nfA/YkrTn+lngWElvkPTC/KEt4z2SNs15j87XZTbapwHbAvtW1Lp5H+n937WiPfQ7gGMk7dlUxNeI\nWXB9iPRfqPMkbde8Q9C43e6GISL+nfQ5uVjSJnnaaknr59bxPEkT2gj5UWAdYKGkdRv5tZNTU26P\nkzasr5R0WmP6IFr/JwAvl/TFplhldxLeC/w3sCepaO7UOkPeEVm/QKzDgSeBOZLm9DZDm+v1SOB6\n4G3AF5S7BFtyO67N9VpeRPjSywV4CXAi8HXgv4AfAR8mHZis3VjbAn8Edsr3twYOA74KXAJ8Fzgb\n2LZArAn5Occ1xdoP+DhwAXA5cCEwumBuOwKPA4c1LfdJwBXAtcD5pC/nlDaXeaOcy5f6eHyzgnEa\n/2U6CrgH2KPpsdGNx9vIazrw/4DPANe1PDYqX29ZYh1/lHRag+2bpm2RL6cCz2sj1teA/wQ2zvcn\nAq/K78EXS+Q2Gvh2XuY5+fP2I1Ir5cI24ozN15sAlwJv7Wt9Fc2r6TN4MakFVvb7uk6+fimpaM4s\nGyvHuQU4PN++EPh6y3uwJ/BAwVi/AfYlFaZfA88n7TA0lv+VwBlt5nZovn0F8Pl8e1y+fjXpqOel\nl7+t92qoXqibLvlLdxiwG7Az8CZSH+QPgF8C38wfiHEDfWmaNoInkzb+41oefxGpu+b8xhehQH6v\nBZYAPU3TRgE7kFolh7SxrAuAZcDVwFYtj+0BnAFc00Zuarq9WY79r6TzwLyaVDi/AzwIrNvmeplP\najG9YhDr9huNDTGpBXFqy+PPA/7abm75ud/On40PA1eRdj4eBM5uI8YEYDJwL6mY/Dx/5n5PKspr\nbbj7iDOWtHPxofy8vwCrgZ8CnwLeSWp5Tm5zGbcEXgjcCvwB+ARpjOQFJd6vjfIG9GjgGWAp8O/A\ngbS505LjPZ9UcG8Cbs7LuCMwsc04mwGPNN3fGVgOzGmathD4QsFYKxvfDeBnwEcb6yhffw84t43c\n/tx0f2bObUbTtO9SYmej7MX/WO+FpM2Bn5A+2L8kdTEsJ30xtwF2IW3I3x0RdxeMuSWpUCyNiGNz\nM/gfpD3jlwF/i4jz2shxHvBvwFuA30XEP5oeGxUFu30kPQK8HjietOE8sDmGpNcDu0TE/KK55efv\nAUwh9VHvTXr/ngR+QdogXhL5/DD9xNiY1M99CKnbbr/83L+RNorXAJdHPidNwbweBl4bEUsl7Q18\nGTgUWBwRIek44M0RMbNArPWAdwObksaVNgC2An6cL7eQDtPzVKSum/5ivYF0TLjN8jI/QNpg/9+8\njDdIWjci/l5wOeeRdk7+Tipu95C6Ud9Hai09WSROU7xDSBvljfPlUtL4yHrAujnfu4CvNH8W+4l3\nNWk8ZBppPf6WtPM2FdicVEx/EOmI3APFegPpe7BNjncVqdCNBf5M2vv/Del9HHCsJHetvTwiXi9p\ndEQ8I+kYUgt994i4V9KjpO/FHweIdQowLSL2z/ffAnwF2Dv+eS6lP+dY9xTMbdeImNWU23xSS2d6\nRDxRNLfKDFW16sYLsCFp0PR3wK+AU4DXATvlFdluvINIXSnnkQrKI6Sm97X5AzDQ8yeQWj+NpvEK\nUr/t+0jN+EnkLpmC+ewH3JFvbwncB8zL98fk6+UU3PvN8+8B3E8qvktILbizSWM449t8v76eY3wJ\neD+p6257YC/SF/o/gavaiDenaXnXIW20vkpTlw7pRGdvKxjvXaS+6Yvyezkjr4uHabNLDPgiqaAd\nTGqdbgJ8nrRH3daedI53PGu3LEXqmllAarmOaSPesaQW1k40tTpIRe9AUrH7XMFYO5BaRe/I98c1\nPbYJaafjFOBVBePdm79T+5C6jhvdOtuQWmLXAF9tY1kPATZp/h7k25eSuo3fDtxWMNafWpcjv1c3\n5NsHAre2kduJwHaNz3Dj/SNtB+bl3Ja2+3kZzGXIXqjbL3kDdirpBFc3k/ZUijxvP1Jz9RfAjaTC\n8Q/gf+cNYqHuhLzB+z5pQ7+I1Kf9zryh+Q2pK+CHpD2Qost0DXBS0/0jSF0Bm+b729PUrC8Y89X5\ny9z4Eo4i7RXeDpzSRpzR+Qvzmj4en0DqqtipjZifBo5pxG9axvtIBWESTV0FBeK9kV6Kdl4nF5H2\n0Acs6qSWx/19PPYfwOltroMdgSdIJ3lrrIPGeM+0vME5uI1425I21C9pmjaKlq5cYIOC8SaQuoNO\nzPfH0EZBa4k1jVSQ3tU0Tb3ktnHBeNuRxi97WmMBLyftNPwVOKpArB3yd329Rqx8PY60c/RWUvfi\n/2pjvT4OnNCUW2O9zs6x7gM+WOa9LHsZshd6rlzyl2d3YFLBeX9FGnQ9jNQNMInU73tm03wDDkaS\n+smPzh/MtfboSQN93wX+peByjMlflg3z/XXyRu9H5EE+4HTg222+N4eSNszjaBrcJ40v3UXe+ywQ\nazNSv/tvSOMMB5D2LNtqzbTkdgCpxbYeTRt30s8lryN1YRZa3ryxuQd4XVN85cvUvLH5aMFYE0it\nqs80rYtGkZtB6uop1DrKz2mMc11F/iFIy/IeCTxKgXGupg3fp0hjem2PFfURt4fUzdTTy3pqpzW9\ngLSDck0fy1poLK+XZf1eb8tK2hF5hlwYCqzXS4CT8/0xTev1QOBuUrEfMFbLer2yj2X9bs5tXJF4\nVV2G7IV8WeNDOo20Z3fyIOOMouCvsHqJMY7cmmr5IL6KtKe1B/A/tDGITerL/i2pS+jreaO9Nbk7\nhrS3v4gCBbgp5oakjfxvSWMM80ldipu3uYHYnNQtuZTUldjIbXx+/FzSHu3L2nj/+9vY7EHqjx9b\nML/X5OXr6eWxE4DvtLGsj5DG2b4FXNw0vdFF+Vbgy21+XrYkDQp/Kd8fTyrG+5D+9HZ4ic/gPFIh\n3pk2Ckcfy/rNlmVtbKzfSW59DnJZx5MK38dJ4z5FY/W6XvP373LgxxWu18NJp8lo+30czGVIX2wk\nX1i7eb07qVtsr4rit/1z135ifQhYBdxT8vmtG/4v5g3/NPr4yW/BuFuR+srvzAWh7V9p9ZLb6Tm3\nN9JGqyvH6mvDOjtv+D/RZrw+N6rAhIIx+hvnamxY76aNca6m2L2N6V1NagUU7d7tb1xvR2D9NvIp\nsqx3AftXtKzX5uUttKwF12uhHaqCy3oHbbRYq7oM6Yv58uwHorHSz6TNvaQhym+9vHEcdG5NG/67\nSIPthccw+ok5itTNU7hFM0Bud5JaSDuWiNHbxubnOd5gfyyxI+kXX4Vbm1Q8zkVFY3o5VqXjejVf\n1oHW6yTa+09NkWUtPJ5X5cU/8R1G+R+/q6PATyKHmqTnA09Emz8F7SfeKNLA5J0R8ZcqYlYl5zaD\ntKc3YG6S9iP9tHcKaRxpW9L/S+aTCslfIuKhAnFGkwbgdyf1dT9O+jnuy0j/vViH1Gr4dET8ukC8\nMTnOLhHxaD7SwCjS/5vuiojjJJ1O+g/GIQXijSIV/u+TCuUVwNOk/zyNiohj8nx9HluqJd5k0q+H\nfgb8T0Q80fL4nqRxv5NjgJ9t13lZC67XZXk5h3y9Vm44KpcvvnTrhXr/WKLyca6W+JWM6bXEKjWu\nV+dl7bb1OtiLWyJmg9DYM83HNLsS+FpEnDyIOI2fzg724Iat8T9E6pZ5JCJeWDa/pvu7k/5jc2JE\n/KyiHEeTWuaD2ijVaVnrvl6r4AMwmpXUcmDE20i/+NpP0l7txmqKszr+ebTdKs95ch5wA+lHDm1r\n2aiOjohfkQ7rMq2a9Co9PH9tlrXu67UKbomYVaDpEBRnkg5+d+Zw59SqA+NcI2lMb8Qsa9uv7yJi\nVp06b2zMOsFFxMzMSvOYiJmZleYiYmZmpbmImJlZaS4iZjUl6Rv5pEZI2lPSncOdk1krFxGzCkj6\no6QnJa2S9EAuABOrih8Rv4iIF1cVz6wqLiJm1dkvIiYCu5JOe/zxYc7HrONcRMwqFhErSOdY31HS\nEZJul/SYpOX53OcASDpc0vXNz5UUkrZrjSmpR9J9nc/erD0uImYVkzSVdAjwXwMPAm8iHeX3COAM\nSbsOY3pmlRoz3AmYPYf8UNLTwErSuTI+13IoimslXUU6iustw5GgWdVcRMyq85bWo7xK2od0Gt0X\nkVr+40l+ZWhSAAAApklEQVRnVTR7TnB3llmH5ONofZ90sqopETGJdLKjxhFcHycVlcb8mwx5kmaD\n5CJi1jljSWc+fAh4OrdKZjU9vgR4iaSXSRpHOoueWVdxETHrkIh4DDiGdKrUR0nnE7+s6fG7gM+Q\nThd7N3B9L2HMas1H8TUzs9LcEjEzs9JcRMzMrDQXETMzK81FxMzMSnMRMTOz0lxEzMysNBcRMzMr\nzUXEzMxK+/+ncrBjsmr+egAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot_state(choi2, method='paulivec')" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + ">> quantum_registers created: q1 1\n", + ">> classical_registers created: c1 1\n", + ">> created state tomography circuits for \"id\"\n", + ">> created state tomography circuits for \"x\"\n", + ">> created state tomography circuits for \"y\"\n", + "running on backend: local_qasm_cpp_simulator\n" + ] + }, + { + "data": { + "text/plain": [ + "{'result': 'all done', 'status': 'COMPLETED'}" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qp = QuantumProgram()\n", + "qp.set_api(Qconfig.APItoken, Qconfig.config[\"url\"]) # set the APIToken and API url\n", + "\n", + "# Creating registers\n", + "q1 = qp.create_quantum_registers(\"q1\", 1)\n", + "c1 = qp.create_classical_registers(\"c1\", 1)\n", + "\n", + "# quantum circuit to make X, Y, Z gates \n", + "gi = qp.create_circuit(\"id\", [q1], [c1])\n", + "gx = qp.create_circuit(\"x\", [q1], [c1])\n", + "gx.x(q1[0])\n", + "gy = qp.create_circuit(\"y\", [q1], [c1])\n", + "gy.y(q1[0])\n", + "\n", + "c1s = ['id', 'x', 'y']\n", + "for c in c1s:\n", + " ls = tomo.build_state_tomography_circuits(qp, c, [0], q1, c1)\n", + " #lp = tomo.build_process_tomography_circuits(qp, c, 0, q1, c1)\n", + " qp.compile(ls, backend='local_qasm_cpp_simulator', shots=1000)\n", + "qp.run()" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "datx = tomo.state_tomography_data(qp, 'x', [0])\n", + "datid = tomo.state_tomography_data(qp, 'id', [0])\n", + "daty = tomo.state_tomography_data(qp, 'y', [0])" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 9.99500500e-01 -4.93639214e-25j,\n", + " 3.99600400e-03 -5.99400599e-03j],\n", + " [ 3.99600400e-03 +5.99400599e-03j,\n", + " 4.99500500e-04 +4.93639214e-25j]])" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "tomo.fit_state(datid, method='leastsq')" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 9.99500500e-01+0.j , 3.99600400e-03-0.00599401j],\n", + " [ 3.99600400e-03+0.00599401j, 4.99500500e-04+0.j ]])" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "tomo.fit_state(datid, method='wizard')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.0" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/tutorial/sections/state_tomography.ipynb b/tutorial/sections/state_tomography.ipynb index 2a17e08bdd..0947bc5687 100644 --- a/tutorial/sections/state_tomography.ipynb +++ b/tutorial/sections/state_tomography.ipynb @@ -30,196 +30,129 @@ "\n", "In this notebook we demonstrate how to design and run experiments to perform quantum state tomography using QISKit, and demonstrate this using both simulators, and the IBM Quantum Experience. \n", "\n", - "Methods implemented. \n", + "The functions used in this notebook to implement state tomography may be imported from the `tools.tomography` module.\n", + "\n", + "#### Experiment Design\n", + "\n", + "The tomography experiments demonstrated in this notebook append a state preparation circuit with to perform measurements of all qubits in each of the X, Y, and Z Pauli bases. For $n$-qubits this gives a total of $3^n$ measurement circuits which must be run, and the resulting counts for the $6^n$ measurement outcomes accross all circuits give a tomographically overcomplete basis for reconstruction of the quantum state.\n", + "\n", + "#### State Reconstruction Methods\n", + "\n", + "State reconstruction may be done using a variety of methods. In this notebook implement two simple cases, they are: \n", "* Linear Inversion\n", - "* Fast maximum likelihood see [J Smolin, JM Gambetta, G Smith, Phys. Rev. Lett. 108, 070502](https://journals.aps.org/prl/abstract/10.1103/PhysRevLett.108.070502) or arxiv: [1106.5458](https://arxiv.org/abs/1106.5458)." + "* Fast maximum likelihood (*see [J Smolin, JM Gambetta, G Smith, Phys. Rev. Lett. 108, 070502](https://journals.aps.org/prl/abstract/10.1103/PhysRevLett.108.070502), open access: [arXiv:1106.5458](https://arxiv.org/abs/1106.5458)*)." ] }, { "cell_type": "code", - "execution_count": 1, - "metadata": { - "collapsed": true - }, + "execution_count": 2, + "metadata": {}, "outputs": [], "source": [ "# Checking the version of PYTHON; we only support 3 at the moment\n", "import sys\n", "if sys.version_info < (3,0):\n", " raise Exception(\"Please use Python version 3 or greater.\")\n", - " \n", - "# useful additional packages \n", - "import matplotlib.pyplot as plt\n", - "%matplotlib inline\n", "import numpy as np\n", - "from scipy import linalg as la\n", - "from itertools import permutations\n", - "from functools import partial\n", - "import networkx as nx\n", - "\n", - "import sys\n", - "sys.path.append(\"../../\")\n", + " \n", "# importing the QISKit\n", + "sys.path.append(\"../../\")\n", "from qiskit import QuantumCircuit, QuantumProgram\n", "import Qconfig\n", "\n", - "# import basic plot tools\n", - "from qiskit.basicplotter import plot_histogram" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "# import state tomography functions\n", - "from tools.tomography import plot_state, build_tomo_circuits, build_tomo_keys, state_tomography, state_fidelity" + "# import tomography libary\n", + "import tools.tomography as tomo\n", + "\n", + "# useful additional packages \n", + "from qiskit.basicplotter import plot_histogram\n", + "from tools.vizualization import plot_state\n", + "from tools.qi import state_fidelity\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "### Ideal quantum state\n", + "## State tomography of an entangled Bell-state\n", "\n", - "As an example we will prepare and measure a 2-qubit entangled Bell-state $\\frac{1}{\\sqrt2}\\left(|00\\rangle+|11\\rangle\\right)$ and the mixed state $\\frac{1}{2}(|00\\rangle\\langle00| +|11\\rangle\\langle11|)$" + "We will demonstrate preparation, measurement, and tomographic reconstruction of a 2-qubit Bell state $\\frac{1}{\\sqrt2}\\left(|00\\rangle+|11\\rangle\\right)$.\n", + "\n", + "### State preparation\n", + "\n", + "We begin with constructing a circuit to prepare the target state, this circuit requires a 2-qubit quantum register, and a 2-bit classical register to store measurement outcomes." ] }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 11, "metadata": {}, "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + ">> quantum_registers created: qr 2\n", + ">> classical_registers created: cr 2\n" + ] + }, { "data": { "text/plain": [ - "True" + "" ] }, - "execution_count": 3, + "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Q_program = QuantumProgram()\n", - "Q_program.set_api(Qconfig.APItoken, Qconfig.config[\"url\"]) # set the APIToken and API url" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - ">> quantum_registers created: q 2\n", - ">> classical_registers created: c 2\n" - ] - }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# Creating registers\n", - "q2 = Q_program.create_quantum_registers(\"q\", 2)\n", - "c2 = Q_program.create_classical_registers(\"c\", 2)\n", + "Q_program.set_api(Qconfig.APItoken, Qconfig.config[\"url\"]) # set the APIToken and API url\n", "\n", + "# Creating registers\n", + "qr = Q_program.create_quantum_registers(\"qr\", 2)\n", + "cr = Q_program.create_classical_registers(\"cr\", 2)\n", "\n", "# quantum circuit to make an entangled bell state \n", - "bell = Q_program.create_circuit(\"bell\", [\"q\"], [\"c\"])\n", - "bell.h(q2[0])\n", - "bell.cx(q2[0], q2[1])\n", + "bell = Q_program.create_circuit(\"bell\", [qr], [cr])\n", + "bell.h(qr[0])\n", + "bell.cx(qr[0], qr[1])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Visualization of the ideal state\n", "\n", - "\n", - "# quantum circuit to make a mixed state \n", - "mixed1 = Q_program.create_circuit(\"mixed1\", [\"q\"], [\"c\"])\n", - "mixed2 = Q_program.create_circuit(\"mixed2\", [\"q\"], [\"c\"])\n", - "mixed2.x(q2[0])\n", - "mixed2.x(q2[1])\n" + "Before we perform tomographic measurement, lets visualize the ideal output state from the preparation circuit. We may do this by executing the circuit on the `local_qasm_simulator` backend. Since this is a simulation, it gives us direct access to the final state vector if we only perform a single shot." ] }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "running on backend: local_qasm_simulator\n", - "running on backend: local_qasm_simulator\n", "running on backend: local_qasm_simulator\n" ] } ], "source": [ - "device = 'local_qasm_simulator' # the device to run on\n", - "Q_program.execute([\"bell\"], device, 1)\n", - "state = Q_program.get_data(\"bell\")[\"quantum_state\"]\n", - "rho=np.outer(state, state.conj())\n", - "\n", - "Q_program.execute([\"mixed1\"], device, 1)\n", - "state1 = Q_program.get_data(\"mixed1\")[\"quantum_state\"]\n", - "rhomixed1=np.outer(state1, state1.conj())\n", - "\n", - "Q_program.execute([\"mixed2\"], device, 1)\n", - "state2 = Q_program.get_data(\"mixed2\")[\"quantum_state\"]\n", - "rhomixed2=np.outer(state2, state2.conj())\n", - "\n", - "rhomixed = (rhomixed1+rhomixed2)/2" + "Q_program.execute([\"bell\"], backend='local_qasm_simulator', shots=1)\n", + "state = Q_program.get_data(\"bell\")[\"quantum_state\"] # get the final state vector\n", + "rho=np.outer(state, state.conj()) # construct the density matrix from the state vector" ] }, { - "cell_type": "code", - "execution_count": 6, + "cell_type": "markdown", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "The 0th eigenvalue = 1.0\n" - ] - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAdMAAAHICAYAAAAV7wD1AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsvXl4W/WZt38frd7teJVkO4mXOImTOHsIUHYoS6dAaVna\nvu3bqwNTaOnQ+U3bocPSTgst7dXyMi2d6TrAMEOhtEwpFJgCbWkhJQkkJAGyOLGT2NZiybIsa1/O\n+f2hHCHZkq3dS859Xbps6Rydc7Sdz3m+3+f5PIIkSSgoKCgoKCjkjmquD0BBQUFBQWGho4ipgoKC\ngoJCnihiqqCgoKCgkCeKmCooKCgoKOSJIqYKCgoKCgp5ooipgoKCgoJCnihiqqCgoKCgkCeKmCoo\nKCgoKOSJIqYKCgoKCgp5oslyfcUuSUFBQUHhdELIZCUlMlVQUFBQUMgTRUwVFBQUFBTyRBFTBQUF\nBQWFPFHEVEFBQUFBIU8UMVVQUFBQUMgTRUwVFBQUFBTyRBFTBQUFBQWFPFHEVEFBQUFBIU8UMVVQ\nUFBQUMgTRUwVFBQUFBTyRBFTBQUFBQWFPFHEVEEBkCQJURSRJMV+WkFBIXuyNbpXUFg0SJKEJElE\no1Gi0SjBYBBRFFGpVAiCgFqtRhAEVCpV/H/5viBk5H2toKBwmqCIqcJpxVQBlSNRWSTl/yVJIhKJ\nxNeXH5eRhVUWWbVaHRdZ+a8iuAoKpw+KmCosejIRUBlZBGcSQvn5UwV36nMSBVelUsVviuAqKCw+\nFDFVWJTIc6CiKM4qoNkiC2Cugmuz2SgvL6empiZ+PFNviuAqKCwsFDFVWDTIAipHoDKFENBsmUlw\nA4EAWq02fkyy6M8U4SqCq6Awv1HEVGFBkyigx48fx2QyJSULzUemCm0mEW62gpsqYWq+vh8KCosB\nRUwVFhyygEYiEURRjD8+OjqK0WjMOQqVE4+KTTb7UQRXQWFhoIipwoIgMYFIFtCpyUJqtTppePd0\noViCm5ihrAiugsLMKGKqMG/JREATUalUSZHqfKVUEfDUfSb+TcVUwQ2Hw4rgKihkiCKmCvOGxBIW\n+YQOmZWrgCKm+ZKr4EJsiF2tVtPQ0BDfRirBTRRbRXAVFhOKmCrMKTPVgGZ7wlWr1QtCTBcy6QQ3\nHA7Ha2rTCW6qbSmCq7BYUMRUoeQUUkATUalUec2Zliqyna+RaT6IophzlnI0GlUEV2HBo4ipQkko\nloAmkq8YllLgFpuYpppbnYlCCm6iwCqCqzBXKGKqUDSysfErBIWILLMVhVxYjCd2SZIK/pkWQ3AT\nrR0VwVUoJIqYKhSUYtr4zcZCmTNdjMO8pbgISUUugpsORXAV8kERU4W8kaNPv9+PRvPeV6rUNn75\nzpkq5M5ciWkm5CO4fr8fu93O0qVLAUVwFdKjiKlCTkx1IYpGo+zZs4czzjhjzk4m+Q7zluq4BUFY\nEBF0NsxnMc2EdIIriiKhUGhalrIS4SpMRRFThYxJZaIAsROQRqNJyuicCxZSZLoYh3lL3UygFEQi\nEdRqNVD4IeV0zQsUwV2YKGKqMCPZuhDNJWq1Om0Cynxivr1vhWCuL6SKRTQajYtpJmQjuNFolEgk\nknY9RXAXFoqYKiQhZ+DKV9bzXUATWSiRqZKAtHDIVkwzoVSCK48ULMbPZT6iiKlCSWpAS8FCsRNc\njChiWlgUwV14KGJ6mlIsARVFcc7mzhaKmCqR6cIhGo2i0+nm+jBSUgjBtVqtNDQ0oNfrFcHNE0VM\nTyOKHYFqNBqi0eiciWm+daalzOZdbGKqzJnOT2YTXJvNRlNTE5BecOULpalCO7Uf7kz7OR1QxHSR\nU0oXIrmfqFarLeh2M2WhzJkuRhZrNu9CF9PZkH+vs11MT41wp45EKIKriOmiZK5ciDQazYxzN8Wm\nEN68kUik6MN6izEyXczDvItZTDP93DIdUpYv3GXBnfqc4eFhfvGLX3DvvffmeeTzD0VMFwmJGbiJ\n0VkpXYjkyHSuyEVMJUlifHwcq9WK0+mMvwZBENDpdJSVlVFWVoZer4//r9Pp8npPFTFdOCxmMS30\ndzCT6NZsNjM6OlrQ/c4XFDFdwMgC6nK50Ol0cSu/ucrAnevINNM5U0mScLlcWK1WxsbGqKurw2Aw\n0NPTExdSSZIIhUIEAoH4ze12EwgECAaDSJKEWq2eJrTyfY1GsyjFJR2KmC48RFEs6WsTBAG73Y7B\nYCjZPkuJIqYLjFQmCsePH6etrY26uro5Pbb5EJmm278kSUxMTGCxWBgbG6O2thaDwcDKlSvjUWai\na40gCOj1evR6PbW1tSm3GYlECAaDcYF1u92Mjo4SCASIRCIIgoBWq50W3YZCoQWRdZwNizUBKdEB\nabERDodLnt8wOjpKS0tLSfdZKhQxXQDM5kKk1WrnNCKUmevIdOowryRJuN1urFYrDoeD6urqaQI6\nlWwiLI1Gg0ajobKyMu22QqFQXHADgQAejwe3243f78fpdKJSqVIOJev1+nhiyEJgsSYglTp6KyVz\nJaabNm0q6T5LhSKm85TEBKLZXIi0Wu28sNGbL5GpLKB2u52qqiqMRiPd3d2znhRTvbdP7XuKp3c8\nTb2untWtq+lb3seGzg2U6cpmPZ7E6Lampib+uNPpxOl00t3dTTQanSa2DoeDQCAQ/0wTo9tE0dXr\n9fPmRL9Yh3nnsm662MyVmCrDvApFJZ8aUI1GMy/EVKPREAwGS75fSZLweDxYrVa8Xi8DAwMYDAa6\nurpyEpsX3n2BB158gN0HdxP2pXhfJVALaiq0FdRV1tFS28LSxqV0G7tZ276WjV0bWda8bNZjhtgF\nSEVFBRUVFWnXC4fD0wRXvi+f7BMFNlF0dTpdSetnFyOL9XWFQqGSi6ndbsdoNJZ0n6VCEdM5pFAm\nClqtFp/PV8xDzYhSR6aygI6OjlJeXo7BYKCyspINGzZkva0/Hvkj333+u7x64FWCnlkuCASIEmUy\nPMmka5Ih1xBvnHgjeR0J9Go9VWVVNFU1Yao30dHSwerW1XQ0dGCozOzqXM4q1ul0VFdXp1xHFMUk\nsfX5fDidTgKBAKFQCIhd6KSKbsvKyuZNdKtQWiKRiBKZFhBFTEtMMVyITqc5U6/Xi9VqxWazUVZW\nhsFgYNu2bfFM5sHBwYy39frg63z7uW/zyr5X8LkLfDEiQFAMEvQFGfONcWj0EBxKWH4qui3XllNX\nUUd7czt/f9Xf84G+D2S9K5VKRXl5OeXl5SmXy/WzcqJUIBBgfHw8/r+cwZwqupVLgRZrdHY6Ew6H\nqaqqKuk+/X5/2hyDhY4ipiWg2C5Ei33O1OfzxQVUp9NhMBjYunVrTlfV+0f2883ffZOX9r6EZ9xT\n8GPNGAGiYhSP5MFT4WG4cpjuQ905iemsuzqVpKbVameMbqeWArlcrnh0K0kSGo1m2jCy/P9iZLHV\nAk+l1HOmqUwcFhOKmBaJUroQzRcxLWRk6vf74wKq0WgwGAxs2bIlpx//uHecL/7qizy7+1kmHBMF\nOb6ckYj96hoAA5DwVYiKc5u8NZswTo1uJyYm4qVAXq+X3bt3x40upoqubKS+kFjMNaZQejH1+Xxp\ncwMWA4qYFpC5ciGaLwlI+UamgUAAq9WK1WpFrVZjMBjYtGlT1vZ+UzNLdw7s5L9/8d8x4SoDdMS+\n+WpAXi0KRIiJXaGRiO17CWAi7a9OKsrOC4dGo6Gqqirl0ODu3bvZsmVLUnQr195ONbpIF93ON6ML\nRUwLi81mo7m5uWT7KzWKmObJTAJaqhPDfJozzVZMA4EANpsNq9WKIAgYDAY2btyIXq/P6Rhk96LE\n975Sf2qORgR8p27p0AH6U3/VgAqq1FV4JjwxQcz0mkgiJtS1xAQ0g5cjSgvbyCETo4toNJoU3U5O\nTmK32wkGg/ELwnTRbVlZWUmj29NBTOVcg1Jgt9sVMVVIJpWZM8ydjd98uZpXq9UZiXowGIwLKEBL\nSwsbNmzIWUATkY0bEk+6VfoskixCp24JeJgyt6qa4SYA1cQENMsRrai0+DveqNVqKisrZzS6CIfD\nSdGtXHcbDAanlQJNFdtCGl0sdjEttdGGzWZbtO5HoIhpxkx1ITpy5AiNjY00NDTMGzGba1QqVdqk\njVAoFBdQURRpaWmhr6+v4Mkrqfx5a8pr0qydI+KpWyrOz32ziz3hJRMSS4ESjS4SSTS6CAaDcaOL\nYDAYLwWSjS5SiW6mArnYxbTULGYrQVDEdEZmciHS6XSEw+F5JaTzzYUmFAoxOjqK1WolEonQ0tLC\n2rVr05ZwFIJU/rzVZakzWOcbC32Yt1RkYnQhJ0vJN7nuVja6SCwFmhrdyqVAi1lM58LZyW63s3Hj\nxpLus5QoYppAYgmLLKSQugZUp9PFr4LnA3ISUrF7cc6GJEmMjIxgtVoJhUK0tLTQ29tbsiy+VG3Y\nCh6ZzoRI5vOqU5+6QMV0vkXUmZYCJUa3stGFHN3K5wL5N5+qK9BCRrESLDwL+xtRAHI1UdDr9bhc\nrlIe6ozISUhzIaaRSITR0VEsFgter5dAIMCqVavmpDg7lZiWactic5mlOOfnIabzPZt3MTGb0QXE\nGlkHAgFqa2uT6m6nGl2kMrvIt+dtsVHEtPCclmJaCBcinU43Jz606Sh1rWkkEsFut2O1WvH7/TQ3\nN7Ny5UoOHDhAR0fHnJ1I0vY0LaWY5shc1pnmw2JtvwZQUVFBY2NjymWy0UWilePExATBYHBaz9tU\n2clzWQqkiGnhOe3ENBqNEg6H8zZRmG/DvKUQ02g0GhdQn89HU1MT3d3dSUNpsnHDXA03p+tpKqgF\nJLEEapqHmM634dJMWazt1yKRyIzTE4lGF5n0vJUbzCf2vAWSotupXYGK9b7OhZj6/f6S2xeWktNO\nTOUTVr5f0vkmpsXyxY1GozgcjvgQblNTE11dXVRVVaW8qs6l1rSQpBrmBRBUQmmGUfMR0wU6zDvf\nEt8KRSESkDLteZtYe+t2u+P/yxcqqaLbfIwu5spKcDFz2ompSqUqyA8/7XDiHFHIyFQURRwOB1ar\nlcnJSRobG+no6KCmpmbW9y7TWtNikVZM1SU62efxlVjICUiLVUyLHXEnzrvOdByJ0e3k5GTePW/D\n4XBJrf18Ph/l5eWL8nsic9qJ6WL9MLVaLX6/P+fni6LI2NgYVqsVt9tNQ0MDy5Yty0hAE5nrBuHp\nLnJUKhVRSnBc+cyZLlDThsUspvMhazfTnreJ0a3H40lrdKHX65mYmECj0cR7mhb781vsVoJwGopp\nIREEYU7qtVKRiz+vKIo4nU6sVisul4uGhgba2tqoq6vL+cdVijZsM5FuzlStVhOmBAlaeYxmLdSh\nsPnyGyg0C6XONNHoIh1Te94Gg0HGx8dxOBxJRhfpfJPzfR/sdvuiNmyA01BMC3kFJs+bzocWVJkO\n80qSFBfQ8fFx6uvrMZlMrFmzpmDD3/NxzlStKdFJURnmXTTMBzH93du/48EXHsQ/7qe9sZ1uQze9\n7b1s7NxIt6k74+1MLQUaHR2lp6cnPrycruetfH9qz9tUpUAzfQcWu/sRnIZiCu+ZoeeLXq+fV2Ka\nLiKUJInx8XGsVitOp5MlS5ZgMBjo7e0t+ElwPkemJUER00XDXImp3WPnrqfv4umdT+N1eeOP7xna\nk7yiBDqVjqqyKhqqGjDWGels6WRl60r6lvexuWszFWWph4anJiBlY3Qhi63f75+1520oFMLpdHLy\n5MmCiOkLL7zAbbfdRjQa5cYbb+T2229PWv6nP/2Jq666io6ODgCuueYa7r777pz398tf/pLrr7/+\n/wCuhNsEMAl4JEmKn+wUMc0DrVY7b2pNp0amkiThcrmwWq2MjY1RV1eHwWBg1apVRR2Sm+vIVK1W\np4zQS3ZSzGeYV8nmnVeUWkz/c+d/8q//+6/0D/RndlEmQEgK4fQ7cfqd9Nv7+XP/n99bLoFKUFGu\nKaeuoo7mmmaWNi2l29CNPqSnzlSXV3SbikQbx2AwSH9/Pz/72c8YHBwkFArxyCOPYDQaWblyJd/9\n7ncz3jfEPo/Pfe5zvPjii7S1tbF161auvPJKent7k9Y755xzePbZZ7Padjq+8pWvAPQR6/ukJd5L\nChGICoIQBIYkSbr/tBTTQiFHpvMBOZkgUUBramowGAysXLmyZHNaGo0mr0SofEmMTMPhMDabDYvF\nUhrDBsgrMp2YmGDPnj1JWZmJt/k6L7lYxRSKn7A44Bjgzqfv5MU3XyToKfCFuQAiIt6IF6/by4h7\nhL3De+OLv/nyN6dFt231bXz6sk9z1earctrl1J63ra2tvP/97+cf/uEf+OQnP8nZZ5+N1WpldHQ0\n623v2rWL7u5uOjs7Abjhhht4+umnp4lpofB4PJx77rkMDAx8F2gAKon1gio/9VcPNAIfB05PMS3U\nD2Q+uCBJkoTb7cZqteL1ejl58iQGg4Genp45OfnOdWQK4Ha72bNnD8FgMMlcf5zx4u88D9GurK5k\n3bp1SQbtY2NjSVmZU5trT605nAsWawJSsRBFkQdfeZAfv/xjhoaGSnehlwo5uvU5caqd9Kv6aTzS\nmLOYpsNut2M0GlGr1bS2ttLa2pr1NkZGRmhvb4/fb2trY+fOndPW27FjB319fbS2tvLd736XNWvW\n5HTMFRUVfOc73+Ghhx4aBVKqvyAIDfL/p6WYFgqdTsfk5GTJ9ytJEpOTk1itVux2O1VVVRgMBhwO\nB319fSU/nkTmYs5Uzko2m82Mj4+j0+lYu3btNGemUlCmKyNAIKfnSkizzlvJzbUT7etsNluSX2y6\nyLZY9nWLOTItJPtH9nPXb+7iL/v+QiQwd3kFcSRiCtACJFStmKpNBd9VqawEN23axMmTJ6mqquK5\n557j6quvpr+/P6dtqVQqmpqaABAEoR64BIgAg0C/JEmTkiSNCYLwYzhNxbSQkWkph3kTBbSiogKD\nwUBXV1d8XufYsWNzfmIrVWQqSRITExOYzWacTif19fUsXbqU9vZ2LBbLNDHSakrj9hII5SakkFlp\nzGzNtaeWQMi9PhML/NNFtrNlZM503ItNTItRpnTRP19EMBwEHbGbHMxLxE7RpRrQkYg1sG8nNlA5\nhdaa7KPG2fD5fHlbCba2tsYi+VMMDw9Pi3ATe+BeccUVfPazn8XhcKT1V54J+XstCMIK4CZgDVAH\n1ADPCILwL5IkBSVJCoMipnlRCjH1eDzxOYby8nIMBgMdHR0pIy05Kiy152aqYygWHo8Hs9mM3W6n\nuroak8mUlFTldrtTirlem95hpqDkMmcahVWVq7j17Fvz3v1sSSKJ9nXybWpG5lQ3ncRSiFTDuYtV\nTAv9msK+MMw0K6QCyogJrYZYqosAZZEyAsFAbHmuhyRHoc3EItEZWFq/NMedpNl1gS5Mtm7dSn9/\nP4ODg7S2tvL444/z2GOPJa1jtVppaWlBEAR27dqFKIo0NDSk2eLMJHwHLgeaJEn6AIAgCCrgJ8Bt\nwHcEQVBJkiSelmJaKIolpl6vNy6ger0eg8HAtm3bZh2qlDN651JMixGZ+v1+LBYLNpsNvV6PyWRK\nisgTSVdnqtOWyHg/0/OGBI008uGVH+YrF36F+or6oh6WTKJ9XSpz9lSNteXIVvaKTeyEIpc/RCKR\neVGXWSiK8VrEyCxXWiLgO3VLIGnaQCAmqqlu8rJEJKCKWBSaYQVfV2NXZitmiN/vL4iVoEaj4cEH\nH+TSSy8lGo3y6U9/mjVr1vCjH/0IgJtvvplf/epX/Pu//zsajYby8nIef/zxnPebcBHQAlgSHhcF\nQbDy3qWNBEpkmhcqlapgV10+nw+r1YrNZkOn02EwGNiyZUtWwjjXNZ6FPIZQKITVasVisaBSqTAa\njRm9H+nE9OK+i3HanIw6RmNX+cVK+phluxWRCi5uu5irmq/i2ouvLdJB5E4m9YZTO6F4PB58Ph9v\nvfVW3M823VDyXF7oZUMkEimomIbCocIM40rEtjPTtmRxXXrqluX2Oxo6cjy41BTSSvCKK67giiuu\nSHrs5ptvjv9/6623cuut+Y/wQFI53bPA3wmCcCfwOjFxXUcsOo1zWorpfMHv98cFVKPR5CSgiZS6\np2kq8olME5uMh8NhDAYD69evz8oUI5037z3X38M9198Tvz9oHWTXkV0cGDzAkeEjnLCdwDpuZWJy\nIj+xTRF8qCNqtizZwj++7x+5bPVlAOzevTvHHeTHo39+lEdfeZS6yjq6DF30tvWypWsLq1tXZ7yN\nqZ1QtFotPp+P5cuXA7F528TIdnJyErvdHm87JtvfFXLettAUOjI1T5gLtq1ZEU/dmrJ/qhAVCj6K\nMzo6uqB9eSVJ+qsgCHpiJTDvB8aBeyRJ2n1q+ekdmRbKuEHukpJptmggEIgLqEqlwmAwsGnTpoL0\n/5wPYprtiVDuUCO3eGtubmbVqlVpE2xmI50D0lQ6DB10GDq4/tzrkx6PRCJEIhFGnCO82f8m+wf3\nc2TkCCdHT2Jz2nB5XASCgfS9UeWHo9Bd1s1Nm27iM2d+Zk5LR/YO7OXrv/46f3n3L4Si6acltGot\n1eXVNNY00rqklc6WTta2r2VDxwbWL12f9js+dX5RpVLNasyeGNn6/f64dV2iT2w287aFptAm92ZX\nCcVUJoc0AU0RZv4WiZXgQeBrgJvYzPe0iOe0FNNCIs+bzvTDCwQC2Gw2rFYrgiBgMBjYsGHDjG2X\ncmE+iGkmyPaGFouF8fFxGhsbWb58edYdalKRbpg3U+T9tze2097YztVnXp1yPZvLFo9sDw8f5oTt\nBLZxG7o6HZevvJzbL7iduoq6nI8jXxxuB/c+dS9P7XyKcW9m9bXhaBinx4nT4+SI+Qh/fOePScs1\nKg2VZZU0VDdgWmKis6WTVaZVLK1dSk9zT8bHlli+k4rELiiJ0a1cbyvb1qUT20JElIWOTK1ua8G2\nlTE5XHOUZTqxmgU2m60kZTHFQhCEzwMbib2jWmKXzOWCIHxKkqR4beRpK6aFikxlMZ16FR4MBuMC\nKklS0QQ0EY1GM+cmEumQa2MtFgsOh4Pa2lqMRmPB/YHzFdNMaalr4YPbPsgHt32w6PvKFFEU+clL\nP+HHL/6YY7ZjBd9+RIww4ZtgwjfBgG2AVw+9mrRcrVJToa9gSeUSWutbufPDd3LO6nOy3k9iF5TE\nUoekY5mSJOV0OuP/yyYSM9XbzkahxdThdhRsWxmR40+qQl34HqcOh4MNGzYUfLvFJhqNyhpxO/Bp\nYsYNOmKpXJWJQgqnuZgWgsSM3lAoFBdQURRpaWmhr6+vZEb4Wq0Wj8dTkn3Nhjz05/P54pm4FRUV\nGI1GVqxYUbShuvkw31Zq/nLwL3zzqW+ys38nEXHuEtCiYpRAKEBXZxd3X3s3mzs3F21fU23rph3L\nlIbabreb0dHRpHnbmZKkCi2mo5PZ2+flRY4/rxpt6ouXfLDZbAtymDfh8/8fSZL+d7b1T1sxLRRq\ntRqbzcbJkyeJRCJJ9nW5YHFZuOe5e/jtrt8yNjqGIApU6mJDa631rXQbulm7dC2bujexpXtLUrLA\nfBnmFQSB48ePMzo6ilqtxmg0ZlTak4pB2yD/8uS/8Pye54lEI9RX1WNcYqSjuYNVbavYuHwj23u2\nU1c1d0Oqc8GIc4Rv/OobPPvms7j97rk+HJY3LufzV3yemy6+aa4PBZi9obYoivF6W7/fj9frjVs3\nhsNhwuEwarUan8+Xcig524u28ckSWFkmkqOY1ukK/zuy2+0Lbph3cHCQiy++mO7uboCLBEH4LfAU\nYAZGgGFJkiYSn3Paimk+EUw4HGZ0dDTuh1tRUUFvb2/aH+5sODwO7nvhPn79119jMU83ZXeH3LjH\n3AyODfJqf8LQmhSbx6rSV9FY1YhpiYnGskbOHzqfrSu2sr5jfckSXyKRCDabDbPZjNfrRRTFnIe1\nXR4X33zqmzyx4wlsLlvSMm/Qy9DYELuO7kp6XCWoKNeVU19VT5W2ir43++ht62VDxwbO6D5j0Ynt\nkoolfPycj7O2fS0HRw5yzHYMs9OM0+PEG/QSFYtvp1NTXsPV267mxrNupKWuBaPRWPR9pqPf0k9X\nS1fG3/fEYeC6uunfjRMnTqBWq6mpqUmybpzabizTpgROr7MgrzNjcgyqmypySAGehVJZCRaS5uZm\n7rvvPsbHx/n973//KDH3o08BS4DlwG7gYtmwAU5jMc0WuWzDarUSDAbjWaeBQCBu75cNbr+b7/z+\nOzzx2hMMDQ/l5pwjQESK4Aq4cAVcHHUcBeCpA0/FlkugVWmpLquOtV9qXMoK0wr6lvexdcVWepfm\n120hGo3icDgwm834/X5aWlpYs2YNhw8fxmg0ZiWkkUiEB557gIdefiin+T5REvEGvXiDsf6PB60H\nk5arBFVsPq9qCcYlsb6Pq1tXs6ljE2f0nEFNRWx4a6EME1eUVXDO6nPSzkkGQgHeOv4Wewf38s7w\nOwyODmJ2mnFMOvAGvDkPB6tVarZ1b0uaDz158uScvG9HLUe584k7eXn/ywQjsVwBrVpLVVkVjdWN\nmOpN8c95Y8dGNnZsRKfJLGteFEUqKiqoqalJO287NUlqpqYEVkeJE5ByPLM3VxW+hMXv96etWZ6v\nVFZWcu2113Lw4EGAA5IkfTPVerKQwmksppn8+CORCHa7HavVit/vp7m5mZ6enqR5Gnm4KBMC4QD3\nv3g/j776KIMnBovvxSlAWArH+x0esh3i9+/8/r3lEujVepobm/ns33yWf3j/P8y6SUmS4qbybreb\nxsZGuru7qaqqir+n2Rg3PP7q4zzw7APsP7G/qM2xRUnEE/DgCXgYcgyxq396ZNve2M53P/ldLll3\nSdGOo1SU6crY3rOd7T3bUy6PRCLsPb6Xt46/xTtD73DMdowR5whjk2NMBiaJRJM/v/aGdm686EY+\nf9nnpw3Xi6JYMjGNRCL8v9/9P/7jj//BiHNk2vJwNMy4d5xx7zj91n5eefeVpOVqlZpKfWV8ukDO\nSO5b3sfWrq1UlcV+25nMmWbTlMAb8KZcp2jkeGY31hR2dEGSpKL4HBcb+fN/7bXXAM4BnpntOYqY\nTiEajcY3JlPhAAAgAElEQVQF1Ofz0dTURHd3d9ofjF6vnzGDNhKN8P0/fp+HX3mY/sF+pMg8+WKd\nshkLtgYZqhjipYGX+AdSi6nc5s1sNjM2NsaSJUtoa2ujrq4u5fs4m3HDK++8wn3/cx+vHXqNUGRu\n+8EKCPSYerjl0lv4u0v+DmDe9KgtJhqNhq3dW9navTXlclEU2X9yP28df4sL1lzAsqZlabclSVLR\npxNeP/I6//Lkv/B6/+t5DWFHxShuvxu3381x+3H+euSvScvlEYwqXVUssjV00mPqYcOyDWzp2kJj\nTeaG6YlNCYLREmfZ52g0tXRJYX15/X4/ZWVlC2bEZyperxfgg4IgeIA3iGX0jhFrCJ50xXnaimki\n8nCl1WrF4/HQ1NREV1dXUrSVjnRJPz965Uf89E8/5eDRg4jh4pdqZIRErK2tEZhiy+oOTk9i8Xg8\nWCwWRkdHqaqqwmQyZdRoPFVkKooiX3/y6/zwhR8y6S9927qptNS18NH3fZR/vuaf40O8QEnKahYC\nKpWKDcs3sGH57CUNxTK69wQ83POre/jFa7/IuFY2XxJHMKxuK3uO74kvq9RXcsv7b+Hua+/Oerte\nf4kj0xw9YJYtSX/RlAuFtBKcC071Qt0FbALOIHYGXQF8lljnGOG0dkCCWGQqz4FOTk7mbByQal1R\nFPnCt7/wXgcILe8lBJS63ZJI7DhaiPWKT8NkOCZwgUAAi8WC1WpFp9NhMpnSdqlJR6rIVKVS8bXr\nv8aXr/oyO4/uZO9AbC5vwDbAyNgITo8TX9BX1KHeqrIqLtt4GV+97qusMK6Yttzv9zMyMoLH46G8\nvDyeTFJeXp5TBudMHLMf46/P/ZX1y9aztWsrFWWFr+8rFYUW02feeIZvP/1tDpw8MC+GCHvbern9\n6tu5eltqA49MCARyb82XEzmKaaFN7u12+4Iui7nwwguRJOn/AgixL7mGmKAG4D0rQTiNxRRi5vJL\nly6ltrY275NB4glFpVKh0qoQfeK0DhBx1MRETk/sU5CDPZGY2OajKSKxH1MTs7ZbknEH3OzaFZtH\nNBgMbN68OWeLw5nmTCvKKrhg7QVcsPaClMtdHhc7j+5kz8AeDg0fYsA2gGXcgtPrxB/yZ31y1ag0\nbF+5na986Ctc1HfRtOWRSASr1YrZHLN7MxqN1NXVxWsUZU9Z2Xkn0eZOFtzy8vKMPGVd3liW8pOv\nP8nY5FjSMtnwoL6qPu4uJCfObO3aSpmuNLXKuVAoMbW5bNz045t4/cjrBMIlFp8pVGgruOaMa7jn\nY/dQX5V/R59AsMSvJxdvGBE0YQ2Tk5MFa0qwUGtMP/vZz/KDH/wgad78lHCGT92mcVqLaWdnZ0GG\n9VL1EdXqtTO7EUUB76lbKrRAGQghAQkpdbulROR+hQ2AgazrzPxRP+vWrcu5PjaRfMzu66rquHTD\npVy64dKUy0cnRtl5ZCd7B/dyaOQQg6ODWF1WXF4XgVAg9l4BPcYebr3i1vg8aCKiKDI2NhYv42lp\naYm/dlEUCYfDKTM4E9uT+f3+uBmA3+9P6gU6Nap9/PXH+ekffkq/pT9+fFOJilEm/ZNM+ic5YT8x\nbS4vVeLM6tbVbOrcxJbOLXMqtoUS05a6Fn77T7+N3z8+epzdx3bz9tDbHDEf4aTjJKPuUSa8EwTD\nwbTvZa4ICKxdupY7rrmDZrGZjRs3Fsy4oeTz8Dl8HVQRVUZNCeTvt1arnfVzX6hi+qMf/YihoSG6\nu7t54IEH7iDWgs0CWAGHJElDgiD8CbhIkqQonOZiWihkF6REMS2vKCfoziPp4NT1T9oTRmJfQwOw\njLw+zbAQLoiQQnFtDZtrm/ng1g/ywa2pbfyGHEMMDQyxfs36JLN82c7QbDbjcDior6/Pelh/tvZk\niZ6yrx18jfufv583j79ZEFei2RJnEsXWVG+iq6WL1a2r2dCxoehiK9v3FZrlzctZ3ryca89M3apu\nxDnC7qO72X9iP/2Wfk44TmBz2XD5ki+sZqOmvIZrz7yWr177VeoqYzWnu3btKuhrioRK7EyVw8et\nQ0dnZ2fSY7k2JZCb1DscDtavX5/XS3nhhRe47bbbiEaj3Hjjjdx+++3TjvG2227jueeeo6Kigocf\nfphNmzbltc/f/OY3mM1mRkdHIXaGXUusxrSGmC+vGjDJQgqnuZgW2lIw8eRdVVmFC1dBtp+SxL6G\nVeT9SYZTj1zkRDEahGdKe2M74+bx+IhD4hxwWVkZra2t9PT0pD1R5vOdGJ0Y5Ru//gZP736aCd/E\n7E8oIFPFdsfhHWjVWs5ZfQ5fu+5rGSUS5UqxEpBmo7W+ldZtrWnnMm0uG28ce4N9J/Zx2HyYk46T\nWF1Wxr3jhMIh1i1bx50fvpNL+lKXQhXyNUXDJf495CCm5cL0i+lcmxK8+uqr/Nu//Rs+n4/6+nqe\neeYZli1bxqZNm7jmmmsyPqZoNMrnPvc5XnzxRdra2ti6dStXXnklvb3v1cg///zz9Pf309/fz86d\nO7nlllvYuXNn9m9AAldeeWX8/7vvvvvzicsEQSgnlsKZ9Kac1mJaKPR6/bRhnNqqWoYZLs0BFCAI\njAjpr5xHxka4/5n7qSqrYmPHRrav3I6hLr2jyVw3KRcEAZvNxqFDhxBFEZPJlFef2JkQRZEHX3iQ\nn738M47bjxd8+7nQbejmc5d+jr+96G9Lsr+5EtPZaKlr4QObP8AHNn9grg+ltCVxOX4UzeXZZ92m\na0rQ09PDpz/9aT7xiU9w1113odPpOHHiRNY5D7t27aK7uzseMd9www08/fTTSWL69NNP88lPfhJB\nENi+fTsulwuLxZKzI9fx48e55JJLWLFiBUuWLOGxxx67n9jwroVYacwJSZIOTX3eaS2mhToBaLXT\n50cbamdInS00BQgqo6rkK2dPwMN9T93HL179RcrieEEQYvZ9lbFhxY6WjvcaTRtWlzwylSQpPg9q\nt9tpbm5mzZo1OVs8ZsIJ+wlu+ektHDh5oPRF+VOo1FVyfvf5fOa8z2BqMFFWVobdbk8yby8W81VM\n86GQr8fhceTebD4XshmdlqCRRm7acBNfOv9LBT8Um83GihUrqKmpYd26dVk/f2RkhPb29vj9tra2\naVFnqnVGRkZyFlOj0cjPf/5zxsbGOHHiBI899lgIWAW8j5iV4LvADYlWgqCIaUG2o9frmZxMrp1s\nrithbVUhpidVEAqH+MmLP+EnL/2EfnP6ZBmInUB9QR++oI9h53BKr1y592VbQxvdLTGD/i3dW9jS\nuaVgjZfleVC73c6SJUtob29Hp9PR2NhYVCEFWNa0jOf++bn4/VAkxJ6BPbw58CYHRw5y1Hq0qH65\nU639Eue3/H4/Ho8Hh8OB3+9P6pQyNUEq07Zk6ZDF9Nev/5of/u8PKdeV09XSRW9bL5s7N7Nx+caC\nNtouNoUux7FOlNhKMIOcKSEqsKlmE1+/+Ouc05V9m7xM8fl8C85KUK/Xc+6558bvf+ELX7g91XqJ\nQgqnuZgWisQ2bDKmelPpDqAQI6oC1H6qFilamBOJKInx7NTjo8d59WBy70uNWkN1eTVNNU0sbVxK\nj6mHvqV9bF+5nVWtq2bcdjAYxGKxYLFY0Ov1mEympLZuDodjTswXdBrdjBZ+voCP3cd289bxt/jz\nvj8zGZ3EPG7OusZ2aeNS/vbCv51m7Zc4v5XKvF0UxaRkklSZm6myNmcS2xP2E9z5mzvZMbADf9gf\nf/wvB/+StJ5GpaGqrCre/ajL0MWatjUxz9x5JraFbr9mqDXwfz/wf+kf7sfsMON0O/H6vUQjRRq9\nmeHQy0JlXLfyOu659J6iN68vxEVJa2srQ0ND8fvDw8O0trZmvU42yBeH4+PjPPXUU9x4440/BpyA\nH/AAL0mStH/q8+bPN3gOKEZPU5m2+raCbDsjCjQ9KQmlG4uKRCOMe8YZ94xzxHyEV955hbNXnU2X\nsSulmEajUUZHRzGbzYTDYUwmU9paWLVaPS+djCrKKjhvzXmct+Y8zmo+i61bk638XF5XTGwH3+Lg\nyEGO249jGbcw7h1HLai5bONlfO26r9He0J5mDzMjZ1imy9qWxTax7Gd0dBS/3080GkWlUqHX69Hr\n9Ty550n++6//zfB4ZnkBETGCy+fC5XNxzHaMPx/8c9JyWWwbaxpjYtvSxZr2NWzq3MT6petLKraF\nFtPGqkZ+8JkfTHs8EAqw59ge9h7by8GhgwxYBjCPmRmbGMPr8+aedzD10EXo1HXyxbO+SI/Yw7Zt\n23LbbpYUwkpw69at9Pf3Mzg4SGtrK48//jiPPfZY0jpXXnklDz74IDfccAM7d+6ktrY2rw5GcpOC\nRx55RBbp9cSKGF3AhcRasO1PdD+C01xMC0UqMe1s6UyzdhEoVK5Pabq1xREEgd62Xj5/+ef51IWf\nmrZ8qqm+3KknMWs6FSqVas6yibNh6lxjXWUdl/Rdkja7tNjMJrZ7B/byz0/8M68dfq3gTcgTxfao\n9eg0g3qNWhPvBiOL7Ye3fzht15x8KLSYpqNMV8ZZq8/irNVnpVweCofYN7iPvcf28s7JdzhmOYbZ\nYcYx4cDj8xAJp/kMTp3VNRENFxsv5r7L76OzsZNIJML+/dMCqqJRCCtBjUbDgw8+yKWXXko0GuXT\nn/40a9as4Uc/+hEAN998M1dccQXPPfcc3d3dVFRU8NBDDxXi8Nm5cydf+tKXuP/++58HdkuS9Jwg\nCN8hFqEmuR/BaS6mgiAgCELewxGpsle7m7vz2mZWLDAxba1v5f+c+3/4p6v/KaWNnsfjic+D1tbW\n0traytq1azO+wlWpVPMyMl2IBEIBvvWbb/Fff/4v7G77nB1HJBrB5XXh8rpw+92c2XMmZ6w4oyj7\nKpWYzoZOq2Nrz1a29qRuRhCJRDhw4gB7ju7h3ZPvctRylBH7CNTCh9d/mC+d/yU06vdO8eFwuKiJ\naFOREwHz5YorruCKK65Ieuzmm2+O/y8IAj/84Q/z3k/i9iD2fp1KLNUD7xMEYTewDfhDqued1mJa\nKFKd5EsqpgXSjfLycqKRaFE6udSU1/A3W/6Gr1731ZQdSEKhUHweVKvVYjKZ6Orqyumklklk+sif\nHuFnL/6MqvIqVhhXsG7pOrat2Mba9rVZ7y8X5Iu4+ZoF+9L+l7j3qXvZO7i3qH7JmaJWqXnfqvfx\njRu+UdSaWZg/YjobGo2GjV0b2di1MaP1Sy2mC9X9SM69+PKXv8yKFSsAfgJ8FXiYWInM26med9qL\naSEiU5nEk6NGrUHQCkjhEsxDFuhc94kLPsH3r/s+oihy4OQBdvXv4sDJAxwxH2FobAiH24En4Mk4\nK1Wr1vK+1e/jjg/fwftWv2/acrndndlsJhQKYTAY2LhxY1ZNxVOhVqtTdvJ5c+BNvvbE13jlnVeS\nLhj++PYfk9bTqXVUVyQ0VDeuoG9ZH9u6txVs+L6Q37tCs+PwDv7tf/+NycAktRW1eAIewtHCmXpk\nQ2NVI1euu5LrNl6HXqtH59MxMDCQlCCl1+sL6la0UMQ0W0otpqOjoxgM6evR5zvbtm3D5/NBbL70\nS8BySZLeSLf+aS+mhUJuxZaYEKMt0xIKl8CTs0DnZKffCcSuzNYvX8/65altwHwBH6/3v86bA2/y\n9sm3GbQNxkpAvE5C4RCr2lZx+YrL+fqNX58WeUmShMvlYmRkhImJCRobG6c1XM+XxMjU4Xbw9Se/\nzq/++iucHmdGzw9FQ4xNjjE2OcbBkYP8777/TVpepi2jtrIWQ62B5U3LWdm6ko3LN3LGijOy6nc5\nXzlr5Vk89aWnkh4TRZF9x/fxxsAbvDP0DketRxlxjuCYdODxe4hKhZuj1qg1nNd7HvfecC+97e8V\n58u+yHLpj8PhiN+XJAmNRpMyEzlbsZ0qpv2Wfm7/79vZO7iX+up62urbWGFcwZr2NWzp3MLapaUZ\nzciXUoupw+Ggr6+vZPsrNM8++yzPP/88wL9KkvQxQRBEQRDOlSTpz6nWP+3FtJC1psFgMElMy8rL\nCE0uHDF1+TOzP6woq+DCdRdy4boL066zc+dOotFoPAvT5/MxMjLC6OgoNTU1mEwm1qxZU7Rhzkd3\nPMqvH/w1R61HC77tQDhAwBXA5rKx78S+WMvgUwiCQIWugiVVS2LdX5o7Wd22muvOuo7W+tak9eZr\nZJoKlUrFxs6NnPSc5KHdDzF8YphqXTUrm1dSo67hrHVnUVFeQTAS5NjosZxqbNvq2/jMJZ/h85d/\nPqX4aTQaqqqq0l54RSKReCZyIBCI19jKHX80Gk3KGtup7fUikQhqtZqfvPgTvv/89znpOBlf5ph0\ncMR8hD+8nTxtplVr46VebQ1tdBu6553YKsO8meN2u3nggQe44YYbALacerge+D6Qcp5BEdMilcdI\nkkRFeQVupjfdLgoieScQuUOFO1aNRhM3xbZYLKjVakwmE2eccUbRyhxeeecV7vnVPew4vKPgBgmZ\nIkkS3qAXb9DL8NgwTo+TM1ackSSkCw2L28LdT9/NMzufwed+r6egy+diyBWr73vp2EuxByVQC2oq\ndZXUV9az1rSWrpYuuo3dlOnK8IQ8HLUeZXB0EPO4GbfPzfae7dz70XtT9pjNBo1GQ3V1dVqTgEQP\nWb/fz+Tk5LT2eq6gi/tfvJ8dAzuyGtoOR8M4PU6cHieHzYd5+cDLScvlqYOmmiba6mNiu3bpWrZ0\nbkmKvotJOFy4ZhaZsFB7mQJYLBYAbrzxRm666abRUw97OGWRM7UsBhQxLRg6nY5gMBj3hRwbG6NC\nX8KGzwEgz91NhiZnX2kWRFHEbrfjdrvZv38/JpOJ9evXpzXKzpeRsRG++sRX+e3u3+L2l+jCZRZq\nK2r50LYPcfdH7k477LsQItOH/voQ3//99zk2eCzzeXkBokRxh9y4Q26Ojx9nx7Ed7y2XQCNoqNRX\n0ljdSF9rH6YaE3/a/yc8Pg/rO9YXpQMNMGPHn//683/xvSe/xzHbsaLsO3Hq4NDIIV468FLS8kSx\nbW9o54I1F3Dr5bcW9BjmYs7UZCqheU0BUavVdHV18a1vfQsgLAhCBfBhiBuuC0wZEzztxbQQkanH\n42F8fBy3201DQwNGo5GVK1di/KORgSMDBTjK2dFGtXl3fvFGcvOXlSSJiYkJzGYzTqeTxsZGamtr\n6erqora2Nq9jmold/bv4x4f/keP243PeTFqtUnPGijO445o7Mqp9nK9ietR+lDt/cycv73mZoLcI\nbfQEiBBhIjjBRHCCY45j/Lk/YQpKAq1KS5W+Ki4s3YZu1i1fx0fP+ShaTeHEwO62c8djd/D0G0/j\nD/lnf0IRkcU2EApwZs+ZfPK8TxZ8H6UWU6/Xu+CsBGWWLVvGxz72MX7+859DLFT5HrFu0V87tcq0\nH68ipjmKaWJrL71eT2VlJVVVVaxcuTK+Tin9ecO+MOT5vfVHsjuh+Hw+LBYLNpuNyspKWltbWb16\nNYIgcPDgwaIbJ2xbsY2/3JtsW7f/xH5efftVXnv7NZxhJ0OOIexue1ZZyNmwtHEpN110U9p5vlLz\nuzd/x/ee/R6SJNHR3MHq1tVs7NjItu5t1FRMb3gOsdGEB/74AD/9w08ZGR4prSn7VAQIS2HGA+OM\nB8Y5Yj3Cy4MvwxCc23cuyxuW572LZ954hnt+fQ8HRw7mf7wFoquli9s/dDvXn3V90fZRSjGdjxeK\n2aDVajnvvPMwGo08+uij/wEMAW9JkhSA6YYNoIhpVoRCIWw2W3w83Wg0xi3t5AzVRIz1uVtaZU0B\nKheCGTjmh8NhbDYbZrMZQRAwmUxs27Zt2jzoXLVh61vWR3dTN2eazmTjxuT6O1/Ax86jO+NZyAO2\nASxOC2OeMfwhf8YngEp9JVdsuiIva79CRqY2l427n7ib377xW7zB90YX3hx4M2m9ePOBqgZM9Sbq\nauo47DzM8eHjRIPzyDFKIjaI1giYiOcC1JSlvhjIhh2Hd/Donx8FoKG6gUn/ZFHqqjNBo9Kwbfk2\nbjn7Fkx1JnQ6HUeOHEnZhKAQI2iRSKRktoyBQGBaYtdCYf/+/bz88sv09fVx0UUXIUnSk4IgrAJu\nFgRhryRJr6R63mkvprN92LInrMViIRgMYjAYWLdu3bSJ/FSWgrmeaHMij/OBLqLjXOO53HnRnSmX\ni6KIw+HAbDbj8/kwGAz09fXNOA86lw3C03nzVpRVcMHaC7hg7QUpn2dxWthxeAevH3qdfms/w85h\nbBM2JnwTRMUoG5Zv4J+u+icu23hZ3sdYiJPMf/zhP/jB8z/IeJ4v3nwgMMlx7/FYY/kIsb/zAZHY\nvH8rKUdZ6srzN2Y/a+VZnLVyun3fu0PvsuvYLt4Zeoe9/XsZD4zjmHQwGZgkEi3sRWFzbTOfufgz\n/OMH/zE+mpHY8ScQCOD1ehkbGyMQCBAOh+Mdf6aW/ZSXl2cskKU0CVmombw//vGPeeaZZ+js7OTd\nd9/l0KFD3HrrrfcCFxAb7n0NlASktEyNEkRRZGxsDIvFwuTkJM3NzbPWQqYS046mjqId8zSyjEyF\nqEBfdR+3nXUbH9vysWnLJUnC7XZjNpsZGxujoaGBjo4OampqMvpBzmWD8Fy8eYPBIIGJAEbJyA19\nNyCuFQmFQkiSNO0kNjk5mdVJLB25RKaHRw5z1xN38Ye3/5B7RKUGzFPulwM6YmcEebRaJPa9KuaI\nnRyFNhAT0XQj5SJFHUbvbe+NZ9Xu27ePVatWxc1DIpEI+07uY8/AHt4eeptj1mPv1dhmOH0gCAJb\nOrdw70fvTdlVKLFjTypksZVLfzwez7SOP8Vor5crhbISLDXPPPMMN9xwA5deeinDw8N8/OMfB1gD\n3CJJ0j55PWWYNw2CICCKYjwT1+l00tDQwNKlS6mtrc1YPKaewDcs20BnRydWmxWf31fck1ImYirC\nUu1SPrX+U/x/F/x/lGmn/3ADgQBmsxmr1UpFRQWtra2sXLky6xNZOheiUpCpN68oioyOjjIyMhLv\nRLNlyxai0SiiKKJSqZAkiXA4TCgUwu/3xyOGxB6h8olLPnnJf2d6z7IZ5g1FQnzvme/x8B8fxuKy\nZPw+ZEyUWNJ/OrTExFZL7IwhAJPEhE916n62iKe22UZmc/0ldDScatqg0WjY3LmZzZ2bU64fCAXY\nM7iHvYN7eXf4XY7ZjsVrbAE+sv0jfP36r6eds86E2cQ2k/Z6gUCA/v7+JMEtlthardYFGZn6/X6u\nvfZa9Ho9TU1NGAwGDh48+HFJkmbNzlTEFDh58iQnTpygpqYGo9EYT6LJl+WNy3n339+N3z80fIgd\n7+5g38A+jgwf4aTtJHaXHa/Pm/+QaLogUII6qY6ru6/mq5d+FWPt9HncSCQSnweVJAmTycTWrVvz\nSlaQ60xT4fK4uO839xGOhOlb3seZK86kp7Un531NZTYxdbvdjIyMMDY2RlNTEz09PVRWViKKIpIk\nJQ29ycX+Go0m3mxcXkcWRLlWMRAIxOtqA4EAoijGXXkShba8vDwjIX310Kt841ffYNfRXXNWNwvE\nLtRmui4SiEW3qhQ3gffENtMoNAUqqXTJXdnaCZbpytIOH5eK2Tr++Hw+Dh8+TENDQ7y9ns1mIxAI\nxNvrpetlm4u14kKtMd2xYwfd3d0sW7aM1tZWduzYAfAVQRD2Anbg1alNwWUUMQWampowGo15+3HK\nEW66iGRV2ypWtaVufO32udnx7g7e6H+Dd0+8y4BlAMuYBdekS+5cMDNTxFQb1nKB6QLuuvguti6b\n3nVCkqT4PKjX66WlpYU1a9bEBSNfUs2Z/vTFn/Lg8w9yxHwEKUWYXqYtY0nlEoxLjHQaOult7WVz\n92bOXnU2VWWZ2w2muhAKhUKYzWYsFgtlZWWYTCZ6emICLooi0Wg03kVo6pW6LMySJMX/l4VXHgbW\n6/XU1NTE56XkWzQajYut3+/H7XYTCASYmJhg375900S2rKwMrVbLHU/cwZOvP8mkf3JuhTQTJGbu\nXKQiJrZ95JxxLkilS2SZzw0IciUajVJWVkZ9fX3K5aIoJhlauFyu+P2pYjs1sk113rTb7QvSSnBy\ncjL+O7Xb7dx8881ceOGFJ4HNQA+n5kxTIWQ5b7Ow853TEIlECpIs8+abb7JmzZqiGBTsP76fnYd2\nsn9gP4eHDzM0OoRjwoHX50WMilAOqs0q+mr7+Ny2z9Gr6WXz5unDUpOTk4yMjOBwOKivr8dkMmU8\nlJ0NLpcLs9mMS+3iG09+g1cPvpqXWbpapaayrJKm6ibaGtvoMfbQt6yPM3rOoG/Z9B/tjh072L59\nOw6Hg5GREQKBAEajEaPRiEajiQshvNeKL1emiq283XTRsSAIHDp0iKVLl6LVauNRrd/vj8+JRSKR\n+AkMDfTb+3nX8i7H7Mc4OXYy7oWcTRZyHA3gyPnl5s75uT9VG9Ji/7KdB557gL8e/ivdxm7Wta9j\nW/c2uo2F7dC0a9eukjXQLhVOpxOn00l3d27vlXxRmHiTv6tyAFFeXs7Q0BAHDx7knXfe4corr+Qj\nH/lI3o0rnE4n119/PcePH2f58uX88pe/ZMmSJdPWW758OdXV1ajVajQaDW+8kdaTPlsyOjkoYkrs\ni1KIZJkDBw6wbNkyamryT+HPBuekkz0Dezh3zbnoNDqi0Si7d+9m+/ZYokNiTawclTU1NRUtocPq\nsnLnf93J07ufZjKYv6tSJug1+pj5fJ2B9vp2qqlmtXE15645l97uXqqrq5OELl8BzQZ5v9FoFIfD\ngcViIRqN0tvbOy0KnmkIOdF3NnEI2Rvx8q7tXQ5ZDzFgH2BobAjbhA23z00wkmJUYwGKqcqnQnVM\nlTaztkxbRm1FLS11LSxvWs4q0yrWLVvH9hXbaanLbrhxMYqpPKS7bNn09oeFQBbbw4cP8/LLL/PC\nCy/Q0NDA+Pg4wWCQyy67THYTypovf/nL1NfXc/vtt3PfffcxPj7Ot7/97WnrLV++nDfeeIPGxoI3\nm8kUINMAACAASURBVFDENFNEUSxIsow8J1GEDzNrXnvtNTo6OjCbzUSj0XhUVqyibVEU+dff/Ss/\nefEnDI4OFmUfuVBbUcsXPvAFvnjlF4HSiqiM3OxczopubW2lsrISSD2ELEfNqX6b8rHLQ8h+vz+e\nHCWL7dQs5CH3EIeshzhsO8xxx3EOWA7gHMysg07BEIDz8ni+G8jRTEwQBMp15fEphI7mDnpbe2Nm\nFiu2JU0hSJLE7t27F52YDg8Po1KpSmbvd+mll/L888/HHdDyqXFduXIlf/rTnzAajVgsFs4//3wO\nHz48bb25FlNlzrSApCqPKSWSJOF0OhkZGcHr9eL1elm9enX8xF0MXnzrRb75P99kV/8cJ8kkoFap\nWWNYw2cv+CxnrTyLioqKeDlLqRxgEpO6NBoNra2tdHd3TxsNSLyfau4p1RCy/L8gCJSXl1NRUUFd\nXawGM/FiIRQKEQwGqampoauxiwu7LiQQCPDwGw/z8ODDRXrlRSKPbF5JkvAFffiCPkacI7xxLHn4\nT61SU6mvpL6qntb6Vmo1tZzvOp/NnZvZuHzjnJSWFJpwOFzQNoezMdVKMJ/30GazYTTGEicNBgM2\nmy3leoIgcPHFF6NWq/nMZz7D3/3d3+W8z1xY+N+SAlCszjGlwuPxMDIygt1uZ8mSJbS3tzM5OUl3\nd3dRojBRFLnrF3fx4xd/jCcwU01FaVnWtCxu7SdJEj6fLymhQo7igKSkH1mQcs1clJE9ikdGRpic\nnKSlpYV169blNYeeidgmRrKJNzkLWb6YkoeQDcNz0LA5369hEUtjomIUt9+N2+/muP04AM+98xxa\ntZYrt1zJD//2h1SUlbBpRRGYCyvBbM49F198MVarddrj9957b9L9mUaWXn31VVpbWxkdHeWSSy5h\n1apVnHvuuVkceX4oYlpAdDodHk9pxCUYDGKxWLBYLOj1ekwmE93d3fETruwClG+GcipUKhX3fvxe\nbr38Vl47/Bp7B/ZycOQgx0ePx+fq8kk2yoZKfSV/s/lv+Op1X6W9oT3px1ZbW5vSaF+ei5SHRicm\nJrBarfj9/vh7liiy8v86nS5tprD8WVRVVWGP2Glb2kaHqfimHTPNe6dLjIqIc2Cmka+YlnCCqaGy\ngb//wN9z2xW3zQu/5UJQSjENBAKUlZVlJaYvvfRS2mUtLS1YLJb4MG86M4jW1libw+bmZj70oQ+x\na9cuRUxLjXwCztcrVa/XFzUyla0NzWYz4XA4yRt4KlqtlnA4XBQxlTHWG/nImR/hI2d+ZNqySCTC\nz3/zcwLlAQ6cOEC/pR+z05y1D24qVIKKTZ2b+PJVX+byjZdnPQ8qD4+mq8mTm0wniq3P54t/trLT\njCiKeDyeWNlBTRn/uf8/+Z9d/5PUCq5MW8aSqlPlPi2drG5dzZauLWzv2Z5VuU8upItqF6RAFNm0\nQSWo2Na9jTuuuoMmTRO9vaXpMVoqSimmNpuNpqamgm3vyiuv5JFHHuH222/nkUce4aqrrpq2jtfr\nRRRFqqur8Xq9/P73v+fuu+8u2DFkgiKmBaQYw7ySJDE+Po7ZbGZiYoKmpiZWrlw56/yHLKbF6iM6\nGxqNhnWmdZx1VupC9iHHEDsO72Dv4F4ODh/khP0EoxOjuP3utBmbpiUmPnn+J/nSlV9Cr42l2xdj\nGHumJtM+n4+TJ0/icDgoLy/nlYFXeOSvjzDoSJ10FQgHsIxbsIxb2DOwJ2mZWqWmqqyKxppG2urb\n6DHFyn22rdjG2va1BX9dMnMytz1Ph3mry6v56Nkf5WvXfY2qsqr4KMViIxwOl2zut9BWgrfffjvX\nXXcdP//5z1m2bBm//OUvATCbzdx4440899xz2Gw2PvShDwGxi+GPfexjXHZZ/h7a2aCI6SkKEZkW\nUky9Xi9ms5nR0VFqa2sxmUysWbMmY/GYS2/cTGhvbOf6xuu5/uxYy6loNIrNZmNkZIRgOMhoeJSB\n8QHeHnqbSDTCV675Cj3GnjnJxk0cEQAI68L8cPcP+f2+3+fVRzUqRpnwTTDhm+CY9RivvJvcjCKx\n3KejqYPVbavZ1LmJM1eeSX1V6uL7jPYrLTwxrdBV0GpojbfTy3eoeqVpJXdccwdXb7s66fFs3Y8W\nConOXsXGZrNhMBRuXr6hoYGXX3552uMmk4nnnnsOgM7OTvbt2zdtnVKiiGkBkb1ccyVx7k2r1WIy\nmejs7Mzpxy1HpnPJbI5QiQk7LpeL5uZment740Ooc1ETmohscDE+Pk5DQwMvnXiJh/70EENjQyXZ\nfzASZHRilNGJUfaf2M/TbzwdX6YSVFToK1jTvoaf3vJTulq6Mt5uJr7FBSfPj6+1upV//+C/x40s\nBK1A/2g/h22H6R/t54TjBObxmB+uL+RL+TvUqXVctvEyvvXxb6Xt6LRYxbSULFQrwXxRxPQUc2Uf\nJputm81mgsEgRqORjRs35u0aMh/EVDb/nyqmiWb6iU3F5USZRGu/Un8u4XAYq9UaT+xyRBx87w/f\n47VDr81N4k4a6qvq+cQ5n+Ar13yFyvLsSp8W4jBvXVUdmzdvjhu6B4NBaitrWWtcG6+vlTOYy8vL\n8Ua8HLId4pAtZmSxbcU2vvCBL8y6n8UopjNd0BaD0dFR1q1bV7L9zRcUMT1FoU7acvuvmX6QkiS9\nZ7fnctHY2MiKFStSztHlynwQU7VaTSQSQavVJnVoiUQi8Q4tarU67g4EcxOFyvPScn1ubUMtvz78\nax5/7XEck3NhFZQatUrN9u7tfPHyL9Ld2I3f7+fgOwfjXUESS30SvX6nnkgXopiWacriEXWiFzIk\nf2cikUjcxKKppomt7VvjJVG7d+9Gp9Ol7PAjzycuRjEtZfIRxMRUiUwV8kaeN02VKerz+TCbzdhs\nNqqrq2ltbaW3t7co4qHVavH5fAXfbjao1WomJiYYHBzE6XSm7NAimw/MhYjKNovy59He3k5tbS1P\n7HgCi8tCe2M7GrUGl9eV19xovhjqDNx08U188YNfTJtEIopiUgay3CZOjti0Wm1cRDzeOagNLsCc\nqZxMN1NtbaIh+5IlS5LsGSFWUiaLrdymzO/3x0dQRFGMjwrJ75der1+YGdCnKLWY2u32gs6ZLhQU\nMT1FoY0bZDGVhw3NZjNqtRqTycQZZ5xR9My6uUxAkju0jI2NEQwGWb58OStXrgTe69ACcxOFiqIY\nN79PjJATP48bzr6BG86+YdpzD40c4vXDr7PvxD6OWI5w0nESh9uBN+gteLSnUWk4b8153PvRe1m3\nbPYhM5VKRWVlZUq3K0mSiEQi+Hw+/H7/3IxY5Pkxl2veuzjNprZW/l++abVatFpt0vskfw9FUWRg\nYACtVht3E0s1hDy1049Wq53XXWbmIjKVHYtOJxQxLTB6vR6/308wGIx3KzEYDKxfv76kZSqlHuZN\nFKlAIIDJZKKlpYWmpibq6+vjJ7a5Sibyer3xHqYNDQ2sWLEia3u1Va2rWNU6Qwu9Izt4c+BNDg4d\nZMA2gNVlxeV1pTabT0NrfSs3v/9mvvCBLxQsGhIEAa1WGzexqKwqnr1kOjRaDZEZ+7TNTLk2dU3w\nVHK1Z4xGo7hcLiYmJujq6po2hCwIAuFwOKnpwMTERHwIWRCEuBdyuiHkuaLUYurxeAo6ZbVQUMT0\nFPme4CVJwu1243Q6GR4exmg0Jv0oS02pxNTj8TA8PIzD4aChoYHOzk5qamric6RHjx6NdziR3YQS\nXYWKeVU/1R9XdokqxpBdTUUNl224jMs2pK5tO3DiALuO7opFteYjDI8N45h04A14UavUXLjuQu75\n6D30thXXLMDtdjPmHCvqPlIREfIbJclUTGdjqthGIhEsFgsjIyNUV1fT29tLVVXVtOHjxDZj5eXl\naYeQZbFNNYQ8tW9tqYaQ57uV4GJBEdNT5Prh+/3++DxoZWUldXV1NDY20tWVealCMdBoNEUT03A4\njMXy/7N35vFR1ef+/5zZsu/rbAkJWYDIIhCpXitq5dqfG1Jt9XJdehHU2qIoemv1umtblboAIoj7\njksFtah1r4AKKAoqShKSzExmyWSdzL6d3x/wPT0zmSSzn5nJ9/16zYuQmeR8M8v5nOf5Ps/nMUCv\n10MqlUKlUqGxsRHAkSt/kl6uqKjgmrc9Hg+3n2e327kUmsfjGVU8Q8Q2Uksy4N/tNsTkIh7+uPFg\nZu3MsNK1icDn88FoNKKnp4cr3kk6MepFniy+0bTNZoNWq8Xg4CDnJDaR4Ew0t5akkEnGgz/hhwzf\nJvu1/f393Dg9kn4OjmrjdbHp8XiQm5scb2Gn04msrCwqppOdcI0bvF4vtw/KMAzkcjmOO+44SCQS\n9Pf3w2w2J2G140O8eeMFy7Lo7++HTqeD3W6HXC7HnDlzuP2lidK45EQTKlIPLp4hV/RO55GiH5lM\nFhDNkq/5aTzSo2s0GpGbm8u120zGDzVhZGQEOp0OQ0ND3FZDVlYWpHuTl/LjiPJlKPQV4qIZF+HW\n02O3hmNZFmazGVqtFgzDQK1Wo7m5Oez3SLgp5OACKfJ9UhhVWFg4Kqr1er0Rp5CDPwNjkczItLe3\nN67uR+kEFdMw8fv96O/vR09PD+x2O6qrqzFz5sxRVbtCj2EjxEtEyF6j2WxGcXExamtrUVRUxJ0k\n4lGNO1HxDLmat9vtGBkZQW9vL+x2O3w+H7ffxbIsSktLudR6qheFJAq+kxTJGkybNi3gufCzApg2\nRBKZ+oBaphbLGpfhl02/RE5ODob6h+DKcXGp0UheW7fbjZ6eHhiNRpSWlmLatGkJGUtIxDZU2nai\nwqhIU8i9vb1wOp1cCjl4n5afQk6mmMbbSjCdoGLKIzgyZVmWc8EhhSt1dXUoLCwc88OcKmIaCyTy\n7unpgVgshlKpRH19Pff8JLMal1yVZ2VlcTM7HQ5HgMCXlpZCJBLBbrfDbDZDo9FwV/T8q3h++jid\nWx1CQcbwDQwMoLKyctzUdnVhNWRZMrhdSXyfhvE2kXllOLP2TNx7xr1QFiu54efkZjKZuOI+YHTG\ngtxIwY/FYoFWq4XVaoVCoUBra6tgxUDRFEbxvx8qhUw+e36/n7vgdDqdo1LI5N+8vLwAsU3EBafR\naJyUPaYAFdMAyBuL79CTm5sLhUKB5ubmsE7AqSSmDMOE3YROjAt0Oh1GRka4yDs7OzsgbcUwjCBC\n5PP5YDab0dPTA+CIL2ddXd24fxvZpxqv9zJU+ljo6stw8fv9XBRKLnoaGxsnfH3u/s3duPs3d8M0\naMLOgzvxTcc3+EHzA7pN3TANmGCxWeBxx3m/fawlsYBCpMDK41bi6pOuDrhLLBYjPz8/ZNX1WBkL\n8voSY/eSkhIolUrk5uZyU5RSMWMRy9xa4Mh5RyaTcVkjflT71VdfQalUcs/X4OAgt38bnELmi200\n5hWT1UoQoGIawMDAAA4dOgSWZSGXy9Ha2hpxeiSVPqjhjGEjUZ7JZEJhYSFUKhWKi4tTwtoPCPTH\nraiowPTp08MuphCJRMjNzQ35eJZl4fF4uN5Lm802qvqSL7Dk37FmmiYTfptPRUUFWlpaxhwnNx5V\nJVX41Qm/wq9O+NWo+7xeL77q+Ap7Du3Bga4DaO9pR09fDwaGB2B32sH6I/SgDhJTkVeEE8pPwL3/\n717MUc2JeO3BGQun08ldCMrlcq7Pkby+ofbhQzlGJbOFJBIi7a0l0aper4ff7+e2UYqLi0d9nkkK\n2eFwwGKxwGQyhZ1CDmayWgkCVEwDyM7ORktLS1wq30gUJyRSqTSkcQN/X41lWSiVShx33HGcUb+Q\npgrAaH9ckhmI51oYhuGu5kn6mA9JMZKTsdFoDJhpSk4qwWnGREXtfr8fZrMZOp0ODMNAqVQmrM0H\nOFINvqB5ARY0Lwh5f09fD3Yd3IVvDn+Dg5qD6DZ1o3ewFxabBV5PiDaYoy9dkb8IF7dcjDtOvwPZ\n0tgqrEk2RavVwu12Q6VSob6+PuA5GWsfPvhCqq+vDw6HI2JrxlQgOKq12Wzo7u6GxWKBSqXCcccd\nx9l2xiOFTFLt/Cpk0gbX2dmJ+fPnx+X89+qrr+L222/HwYMHsXv3bsyfPz/k4959911cc8018Pl8\nWL58OW688caYjhstTIRTTpI47z75+P3+uLST7N69G3PnzhU8XfjDDz9ALpdzBQ3Dw8PQ6XQYHh5G\nZWUlFApFyAkt/H+TBX9uq9VqRXV1NRQKRcjB50JD9qH4YktuwdZ9wT21keJwOLg+3vLyci5lmcq4\nPW7sbduLPW17cKDzADr0HRCXiXHNWdfg7JazY/79Pp+P6w3Ny8vjbCDjRXB1Obk5nU74/f6QUW1u\nbi4kEolgF9DEsUmj0YBlWdTU1KCsrCys9UyUQg4+Tqgq5B9++AHbt2/HJ598gtzcXNjtdojFYlx4\n4YW4/vrro/qbDh48CJFIhCuuuAJr1qwJKaY+nw9NTU14//33oVKp0Nraipdeeinew93DelFpZJoA\nZDIZXC6X4GIqlUphs9kwODgYMKFlxowZAWlcQLgoNNgfV6VSoaioSPCofjz4kUtp6ei5ovyox263\nB0Q9pHk/OH3Mr1AlblI6nY7LHEydOjUlo6JQyKQynDDjBJwwI/Rg+Gix2WzQ6XQYGBhAdXU1jj32\n2IRcbE1UXc7vmXY4HKN6pvn7j4nOWpAeYp1Oh/z8/KicvaJJIQdXIc+bNw+zZs3Cu+++i48++ggl\nJSXw+Xyw2WxR/23Tp0+f8DG7d+9GQ0MD6uvrAQAXXnghtm3bFm8xDQsqpjzi7c+biPL7cCDuQ0aj\nEQAwZcqUlJnQQtY3kT9uOsO37gvG5/PB6XRyYsuvUCUnLI/Hg/z8fFRVVaG0tDRl04vJgGVZ9PX1\nQavVgmVZqNXqsIqsEgV/eyDU6xtc9EayLSRrwff35V9MRVpZ63K5oNPpuL7ORF5YEMYqjBoeHsbT\nTz+Nl156CXV1ddz+vVgsTrgDXE9PD9Tqf8+mValU+PLLLxN6zLHIjLNXiiFERS+xMyTtERUVFVAo\nFJy5frx6QmMhHv646Y5YLA6IeohY6HQ6eL1eVFZWIi8vjysI6ejo4NKL5EQcXIGcqkUzseDxeKDX\n62EwGFBcXIympqa0eK+MV/QGYFRUOzQ0xJkzABgV1ebmHpmWQ4RsZGQEGo0GVqsVarUaCxYsEOzC\nQqvVYsOGDfj444/x29/+Frt27YpYPE877TTuop/PPffcg8WLF8drqUmBiimPeEemyYBU7BkMBuTk\n5ECpVHITWoaHh3Hw4EHORo6fWiQf0kR/EEmxE39qTiILZ9IFMgjBZDKhpKQkrAuLZFkyCsnIyAi0\nWi0sFkvGZSyAiZ3AyEUUcUEyGAzca0wq80tLS6FWq7l2n2RWmLMsi2+//RZr165Fd3c3Vq5ciTVr\n1kR9QffBBx/EtB6lUgmtVsv9X6fTQalUxvQ7oyVz3qVxIlxLwfGQyWQx7RVMRKgJLaTgib+3UVhY\niJ/97GdgWRYul4tLLZJB2KTfkhRUBO/jRTskmR8lE3/cY445RnB/XKEhRSI6nQ5utxsKhYKrtAyH\nRFsyCgXZltDpdJBIJFCr1ZPSCpLvggQcuRDV6/Ww2+0oKyuDQqGASCTiXuPgCvOsrKyQFebxeI39\nfj/ef/99rFu3Drm5uVi9ejUWLlwo+EVxa2sr2tra0NnZCaVSiZdffhkvvviiIGuh1bxBeDyemD1t\nBwYGYDKZwtpAjwTSc0kmtCiVShQUFHApXCDyalx+mwC/aMbhcIxKLfLFNlS0EMoft6SkZNKdFIMh\ndnb8Xt5kThMiBgf8ymP+aywWi8dMHyfytePv+5WXl0OlUkXVL5tpOJ1OaLVa9PX1obq6GiqVasLI\nj1wwB7++5DUm6efgoqiJrBmdTideeeUVbN68GXPmzMF1112HGTNmJOUz/cYbb2DlypWc09mcOXPw\n3nvvQa/XY/ny5di+fTsAYPv27Vi1ahV8Ph+WLVuGm2++Od5LCeuPpWIaRDzE1Gq1or29HXPmRN6M\nHmo9ZEKLTCaDUqlEeXk5AASUrydqH5SkFvlCS3xxyZU0cKQ5nhQTKZXKlGxpSSZ8RymSPaiurk7J\nlKXX6x11Arbb7aOqU/kn42i3CEiLllarhcPhgEqlQlVVVUpEyEJjsVjQ3d0Nh8MBtVqNqqqquEV+\nwdaM5LUOtmYcHh5GW1sb5HI5Pv/8c7z55ptYvHgxVq5cierq6risJQ2hrTHREA9BysrKimnPlBSl\nEFN9MqFFJpONikITnWYZK7VI+h9NJhNyc3NRXFwMn8/HReVkD2+8FpBMhETnBoMBBQUFqK2tHdfL\nORWQSCQoKCgIOdCZX51qt9tHWTLyey75Yht80cAfA5eTk8P1hqby85IMyCQbjUYDqVSKmpoazqUo\nnoRrzXj48GG8/vrr0Ol0cLlcyMvLw4cffojs7GzccsstcV1TpkHFNIh4vIklEklI56GJINWuvb29\nKC0txZQpU7hxTalg7RfKH7e+vn7Mknn+FXCwSXlwryUpiErHkyvLshgaGuLG0ykUirDmY6YD/OrU\nsrKygPuCnYT4/rgkc0GK8ZxOJ8rKyjB9+nTk5+en5escT7xeL/R6PfR6PUpKSjBjxgxBzTj279+P\ntWvXwmQyYdWqVTj33HO5CyKn04mhoSHB1pYu0DRvED6fLyohDGbXrl044YSJm9ZDTWipqKjgCqES\nncYNh2B/XIVCEdMHnzgIBaeOSbFMcCEF+VfoYodg+Cn4/Pz8tDCcSAak0Kq7uxsejwclJSWQyWRc\nilEoS8ZUwOFwQKvVor+/HwqFAgqFQrCLLp/Ph3feeQfr169HWVkZrrvuOpx44omT/v0bArpnGg3x\nshTctWsXjj/++JBvTHKy6enp4Sa0KBQKZGVlpYS1HxDaH7esrCzhJzp+IUVwQRTfqi+4ICpZe26k\nUplvqi7kCTGV4F9cFBYWQq1Wh0wdA6EtGckF1ViWjGMVvqUDQ0ND0Gg0cLlcqKmpQUVFhWAXDXa7\nHS+++CKeeuopLFiwANdddx0aGxupiI4NFdNoiJeY7tmzB7Nnzw4oxLHb7dDr9TCZTCgqKoJCoQiY\n0EIQKgoN5Y8rl8uRlZWV9LWEgm/lFlx9TKpSg1PH8ZoE4vV6OaHIycmBSqWilcpHsVqt0Gq1GB4e\njsvFRfDrzC+a4Re+BUe1qbYfT1p+tFotsrKyUFtbG1cP4Ugxm8147LHHsG3bNvz617/GVVddhYqK\nCsHWk0ZQMY0GshkfK99++y2mTp2KnJycURNaKisruQktqZDGDfbHVSqVaZmu9Hq9o1LHfE/c4Cgn\nnPYPEoVaLJaUNt9PNvwpNiKRCGq1Omxj9ViZqDKVb1AixDaBx+NBT08PDAYDysvLoVarBeuxZlkW\nbW1tWL9+Pb7++mtcccUVuOSSS2gLUmRQMY0W8qGMFpZl8c0333CVkGRCS25ubkw9ofEk2B9XLpen\nbOtGPAgeqUb+JQOS+QVR2dnZsFqtMJlMyM7OhkqlQmlpadpdXCQC0jNrNBoDnHhShWCDEn76ONGW\njHa7HRqNBkNDQ9x+qFCfJ7/fj88//xxr166F1WrFtddeizPPPJO2IEUHFdNocbvdUbkgOZ1O6PV6\nGI1GsCyLyspKTJ06NWXSuMCRimG9Xo++vj6UlpZCqVSmhedpIiEXPf39/TAajbDZbJBKpdyoKX6h\nDF9wM7lQJhjSG2qz2aBUKiGXy9PyxDxW+jh4jmlwT+1Yn1eyNaLRaODz+aBWq7kCQiHwer146623\n8Mgjj0ClUuH6669Ha2srvRCMDSqm0RKJmJJ9Ef4ElKqqKhiNRvT396Oqqoo7CQt18uH744pEIq5i\neDKJwVjwB6VLpVKoVKqAdOVEhTJ8mz7+CTgdhSYY8tzodDpkZ2dDrVYnpAcyVeBbMvLFNpQlY3Z2\nNmw2G8xmM/Ly8lBTU5NUV6tgrFYrnn32WTz33HNYuHAhVq1axY0lo8QMFdNomcgFKdSEFqVSiby8\nPC6N6/V6OX9UvnUb+UDyb4nYzwnlj6tQKCa9Py7BarVyr19lZSWUSmXEzw2/2Z2/R8u3YgxVEJXq\nqXT+QPJon5tMg6SPLRYL9Ho9hoaGIJPJuLGG/OK3WEarRYrRaMSjjz6Kd999F0uXLsUVV1wRcsYu\nJSaomEaL1+vlZn7ycblcnLsNmdBSVlY2ajL9WGncYB9c/gk4XkIb7I+rUCjoft9R/H4/F4WSnt7y\n8vKERejBQ8LJ1z6fb5QfLr8gSghIulKr1cLtdnM2fzR7cQSr1QqNRgOLxQKVSjUqzR1syUj+5Vsy\nBottVlZW1JaMBw8exLp16/DDDz/gqquuwtKlSwWrujeZTPjzn/+MrKwsXHXVVZgyZYog60ggVEyj\nhS+mpGqxp6cHLpeL81iVSqWjekJjEaxYhJZlWfT393NDiOVyOeRyOe19PAp/jirJIghdzTjeyVck\nEnEnX77YJmLUFmn56enpQUFBAdRqtaDpylSCbz4BADU1NVFVLAdbMvK3CgCEtGQMtS3k9/vxr3/9\nC2vXroXf78fq1auxaNEiwS949u3bh7179+K+++6DRCLB3//+97gP+RAYKqbR4vP5uDFl8ZzQEi1j\nCa3NZoPb7YbP50N2djbKyspQUlKCvLy8jHeSmQh+6wbDMGm1TxxsxUheb9KyxT/xRju31GazQavV\nYnBwkOsNpS0/RyA+wjqdDgUFBaipqUlYkR5/qyB4r9bn82H//v147733kJubi3379qGpqQnXX389\nTj311JR6L/f19eH+++9Hf38/Hn30Ue5CfseOHTjmmGNQXFws8ApjgopptPT29qKjoyPpE1rCgRQ8\n6fV6sCwLuVyOkpISrh0gEanjdIK/31deXg6lUplSrRuxEhzlkNeab8UYqiCKZDDIBQYAqNVqlJeX\n0y2Ao/BHwlVVVUGlUgl6gTE8PIzHH38c//jHP1BXV4eGhgb09/ejo6MDU6ZMwaZNmwRbG4FlkZvc\nCgAAIABJREFUWTAMg48++giPPPIIzj77bPz2t78FAPT09GDFihX4/vvvMX/+fGzevDld93OpmEaL\n2+2G1+sdJaD8f5MN3x83XJEYL3UcPBQ8nYWW9MzqdLpRxhiTieAeS/6/5D2dnZ2N8vJyFBcXp9SA\ncCEZGRmBRqOB1WqFWq1GdXW1oO8dnU6HDRs24KOPPsKll16K5cuXC+qcFA733HMPvv32Wzz44INQ\nKpVcitzpdOKhhx7CG2+8gQ8++CBd91PpCLZo2bhxIx5//HEUFBRg6tSpmDp1KhoaGrivc3NzkyKq\nHo+Ha2khs0ybmprC/qAzDAOZTAaZTDYqzRJciTo8PAyDwcBFtHyz+VQVWqfTGTBlp7m5GXl5eUIv\nSzBIoQupvLVYLNBqtQCAKVOmoLy8nHvNR0ZGuEk+kQ6BzwTImEONRgORSITa2lpB7SFZluUmt3R2\ndmLlypW4//77U7rugUSl3333HX788UfMnDkTSqUSwJH3IpkytHPnTlx22WXcfZkKjUzHgIzVamtr\nw6FDh9DW1ob29nZ0dHTAbrejpKSEE1citvX19TH7g5Lj9vT0COaPG6rlg586Dk4lJlNoyUlQp9PB\n5/NxUehkj64IpGJZp9NBJpNBrVaHJRITDYEPTh2HY8WYivh8Puj1evT09KCoqAg1NTWCXoD5/X58\n8MEHWLduHbKzs3H99ddj4cKFKXXROhGbNm3C9u3bcdNNN2HBggVcTYlIJMKXX36JCy64AFu3bsWc\nOXMEXmnU0DRvoiDVsz/99BPa2tq4W1dXF5xOJ8rLyzF16lTU19ejsbERU6dORV1d3bgnH5fLxZng\nFxQUcCb4qXayIkIbquWDL7TxHp/mcrnQ09MDk8mEkpISqFSqSe/cxMfpdEKn08FsNse9Yplvxch/\n3UnbR6iCqFQznXc6ndBqtejr60N1dTVUKpWgUZ/L5cKWLVvw+OOPY9asWbjuuuvQ0tKSUs/ZeIyM\njGDz5s2YNWsW/vnPf4JhGNx7773c/aT96+KLL4ZIJMKGDRvSOWtExVQISBUpEdpDhw6hvb0dXV1d\n8Hq9qKqq4oS2rq4OnZ2d6OnpwZIlS9LeH3c8oeW7BYUrtGTfRafTwe12c21JNAo9AsliaLVaOJ1O\nrjc0mc9PqMrjiYbAR9tfGQ3Dw8PQaDRwOBxQq9WC984ODAzgiSeewKuvvopzzjkHK1euhFwuF2w9\n0WK32/GnP/0J69evB8uyuPTSS/HUU08FPKa/vx9z5szBxo0bceaZZwq00rhAxTTV8Pv9MBgM2LFj\nB5566il89dVXqKmpQVZWFux2O+Ry+ag9WrVazXnEpjN8oQ01p5QvtFKpFBaLBQMDAygqKoJKpaK9\njzx8Ph/XG5qXlwe1Wp2SBSqhhsCTtg8AEV9cRXJcMvpMKpVyo8+E/Ax1dXVh/fr12LlzJ5YvX45l\ny5alc6QWwDPPPIObb74ZixYtwhNPPIGhoSGUlpZi/fr12LJlC7Zs2QKFQiH0MmOBimmqcuDAAfz4\n448455xzuL1Qn88HrVY7ao+2p6cHAKBUKjmRJTe5XJ5WeytjQapQe3t7YTAY4HK5AloSEnXSTTfs\ndju0Wi0GBgZQXV0NpVKZtr2h411ckZauSIfAe71e9PT0QK/Xo7S0FDU1NYKac7Asi6+++goPP/ww\njEYjVq1ahSVLlqRt5mki+vr6UFxcjIaGBqjVavz444+45557cPnllwu9tFihYpoJsCwLn8+H7u5u\nTmhJ6thgMEAsFqOmpiagGKqxsTFtWkOI/aHBYEBBQQEXhfKN5vkn3WD/20Tt0aYKZH9eq9XC7/dz\nvaGZ8veFItIh8CKRCP39/dzoM6VSKahg+Xw+vPPOO3jkkUdQUlKC6667Dj//+c/TPrsULlarFWvX\nrsUzzzwDjUaD2267DTfeeKPQy4oFKqaZDjnpdHZ2jopoe3t7uRQXP3Xc0NCAsrIyQU/GZK9Pp9PB\nbrcHWDRG+nuChTbURBe+2KaL0Ho8Huj1ehgMBhQVFUGtVtOCq6OQIfB9fX0wGo3weDxccR/xPA6O\nahNhxRiMw+HAiy++iCeffBILFizAtddei6ampkkjoqF4/fXXcejQIfzpT38SeimxQMV0MkNSpx0d\nHQGFUG1tbRgYGIBMJuNcVfhCm8gKYo/HA4PBAL1ej/z8fKhUqoTtZaWr0I6MjECr1cJisUChUFCP\n5SCIA5hWq0V2djZqamoC9osjGQLPL4iK5T1oNpuxefNmbN26Feeffz5+//vfo6KiIh5/blRMAuP5\nZEPFlBIalmVht9s5oSWVx+3t7bBYLMjJyUF9fT3XO0uEtqCgIOKTDhkFp9PpMDIywvnACikQkQpt\nbm5uQoeBkwpwrVYLiUQCtVpNJ/0E4fF40NPTA4PBgPLycqjV6ojHwhErxuBqc1J5HGrLYKzXnWVZ\ntLW1Yf369fj6669x+eWX49JLLxV8gAIwKYznkw0VU0rksCwLq9UakDZua2tDR0cHrFYr8vPzw3KF\n8ng8MBqN0Ov1yM3NhVKpFNRhJlySKbT83tmysjKo1eqUOBmnEsSQf2hoCEqlEgqFIiGtP3wrxrGG\nwB84cABdXV3Izc3FJ598Ap/Ph9WrV+Oss85KuXatsYzngSOFbJnkV50EqJhS4gvLshgeHuaKoPiu\nUA6HA0VFRSguLsbQ0BAkEgluueUWTJ8+PaqINhWJh9CS51Cr1cLhcECpVNLe2SDIbNXu7m74/X7U\n1NQIasjPsiwcDgeee+45bNu2DU6nE0VFRbBYLHC5XDjzzDNx1113CbK2YIKN588880wsW7YMAHDw\n4EE8+OCD+OSTT1BbW4s1a9Zg9uzZAq84LaBiSkkeP/zwA377298iPz8fra2tEIvFnFlFtK5Q6UQ4\nQkvS6zk5OVCpVKioqKAiysPv93Ojz3Jzc1FbW4uCggJB12S1WvHcc8/h2WefxUknnYRVq1Zh6tSp\nAY9xu90p16JEjOf/9re/Qa1WY8eOHbj99ttRUFCAv/3tb3jggQdgNpuxZcsWoZeaDlAxpSQPm82G\nkZERVFdXj7ov2BWKRLRdXV3weDwBrlAkdVxbWwuJRJL2QutwOKDVamE2m1FUVIT8/Hxuko9Qe7Sp\nhtvthk6ng8lkQkVFBdRqdVK9qENhNBqxceNGbN++HUuXLsWVV16Z8uPD+Mbz9957LxobG3HrrbfC\nbrfjxhtvhNlsxmOPPYaCggKYzWacdNJJePzxx/Ef//EfQi891aFTYyjJIy8vb0xHF5FIhKqqKlRV\nVeGkk04KuI+4QpHU8c6dO7n+NJ/PB4VCkXauUMQGUavVwuv1QqVSoaGhYcxCFpfLxe3RkaH0RGhD\nTe/JFKG1Wq3QaDQYGRmBUqnEcccdJ2ikzrIsDh48iPXr1+O7777DVVddhbvuuktwYQ8X8nnYuXMn\nLBYLTjvtNADAJ598Aq1Wi/POO4+L9HNycqDRaNLdmSiloGJKERSRSASlUgmlUolTTjkl4D6fzwed\nTscVQ3344YfYtGnTKFcoYlQhtCuU1+uFXq+HXq9HYWEhpk6dOmGakj82raSkJOC+4PmkmSC0xIRC\no9EAAGpqajB9+nRBL4z8fj8+++wzPPzww/B6vVi9ejWefPLJlH4egyHG8zNnzkRHRwemTZuGE044\nAcARx7W8vLyACPT555/HggULaCFSHKFimgT8fn9afTBTBbFYjNraWtTW1nJX2UBoV6jt27dzrlAi\nkSiprlBWq5WrOFUoFJg3b15cWn+C55PyCUdog/sphRRa4ies0+lQWFiIpqYmwU0oPB4P/v73v2Pj\nxo1obGzEn//8Zxx77LEpm/EYD7FYjO7ubtxwww2c8TxhZGQEEokEdXV13PfefvttnHjiibR6PI7Q\nPdMEsXfvXohEIsyYMSPifjhK9LAsC6/Xi8OHD49yhTKbzZBKpQFCG60rlN/vR19fH7RaLRiG4Wz+\nUuFEPFGbRyT9lLHicrm4PeOqqiqoVCrBi3UsFguefvppvPDCC/jP//xPXHPNNaipqRF0TfGEGM+f\nfvrpePzxx7F06VLIZDI888wzAIB33nkH119/PTZs2ICFCxcKvNq0gBYgCcWSJUvQ3t6OrKwsrs/r\n+OOPT8nJHpMJIjLBQhuJK9TAwACGh4dhNBpRWloKlUqVVtM/xhJaMsmFL7REbKMR2pGREXR3d8Nu\nt0OlUqG6ulrw7ExPTw82bNiADz74AJdeeilWrFiR0Z9JMtv2448/xs0334w77rgDNpsN1157LS6+\n+GLceeedQi8xXaBiKgTr16/H448/js8//xwMw+COO+7A+++/j+XLl+M3v/lNylcETlZILyGxXOTb\nLw4PD8Pn84FhGDidTtxyyy2oq6tDY2NjxvTQAtEJbU5OTsBQgr6+Pmg0Gm4Ag9BGHSzL4sCBA1i7\ndi06OjqwcuVKXHDBBZPKotHn82HNmjV49NFH0dzcjNNOOw033HCD0MtKJ6iYCsGf//xn6HQ6bNiw\ngfveww8/jJdeegnXX389zj//fK6EnZL6+P1+LFq0CEVFRfjlL3+JgoICTmQjdYVKZ8ZLHfv9fq7P\nNi8vDwqFAqWlpcjOzhbs7/f7/fjwww+xdu1aZGVlYfXq1TjllFMEj46FZnBwkCt0o+ehsKFiKgSv\nvvoqbrzxRrz55ptoaWnhvn/HHXfgsccew/79+1FWVibgCimRYrFYxhxOThyNQtkvElcovsg2NDSg\nrq5OUKGJF06nk9sPraysRGFhIdxu94QRLdmjTcTf73K58Morr3CVratXr0ZLS4vgz3VfXx9cLheU\nSqWg66BEBRXTZLFp0yaYzWbMnz8fubm5eOONN+Dz+XD11VejoaGBe9zxxx+PZcuWYcWKFQKulpIs\nSL8p336xra2Nc4UqKysLMKsgQpvqrlDDw8Po7u6Gy+WCWq0et0o60tRxtEI7ODiIJ554Aq+++irO\nOussrFy5MmV6KB966CF8+OGH2LNnDxQKBZ555hnMnDlT6GVRwoeKaTJYvHgxtFotZsyYgc7OTtTX\n14NhGOTk5KCwsBDLli3jJjYsWbIE559/Pv77v/9b4FVThGY8Vyiv14vKysqUcoViWRa9vb3QaDSQ\nyWSora2NeXxesNDyB78D4QltV1cXHnnkEezYsQOXXXYZli1bJnjLDZ9t27bhsssuw1//+ldccskl\nuO2222CxWPDQQw9BKpXC5XKljSnEJIaKaaLZuXMnLr/8cuzfvx9isRh79+7F22+/jc8//xxFRUWo\nqqrCt99+i7POOgtOpxMPPvggvvzySzQ1NQm9dEoKQzxqgyNaIVyhvF4venp6oNfrUVpaipqamqT0\nJo4ntPfccw+sViucTidGRkawdOlSXHrppaivr08pr2OLxYKTTz4Zixcvxm233QYA2Lp1K6699loc\nPnwY/f39WLFiBQoLC3H55ZdTW7/UhdoJJprCwkIUFRWhr68PFRUVmD9/PkpKSiCVSvHNN9/g2GOP\nxfTp07Ft2zZUVlbi448/TmshTUVD70xEJBJBoVBAoVDg5JNPDrgv2BXqo48+wmOPPYaenh6wLBs3\nVyiHwwGNRoOBgQEolUq0trZCIkne6YJvWEEq4H0+H9599114vV5UVVXhlFNOQW5uLtrb2/G///u/\nWLp0KX79618nbY0T8emnn8JoNAZUzjqdTsybNw9dXV1wu90499xzsXnzZixZsgR79uxBbW2tgCum\nxAIV0xgoLS1FV1cXXnrpJaxatQoAMHXqVJx11lnYv38/GIbBVVddhRUrVkAsFqd1JeHvfvc7tLS0\n4LLLLqOuKQKSSFcov98Pk8mE3t5eeDweqNVqNDU1Cb5/63A48NJLL+GJJ57AggULsGnTJjQ3Nwu+\nronYsmULfv7zn3OWfU6nExqNhvNrlkqlaG5uxuuvv45LL70UlZWVAq+YEgtUTGNAqVTi0UcfxcUX\nX4yysjJcfPHFYFkWs2fPRl1dHV577TVceumlad/TdvXVV+PZZ59FaWkpcnJysHTpUiqoKQbDMJBI\nJJxQ/vKXv+TuI65QnZ2dnNBu3boV7e3t6O3thUQigUQiweDgIE455RScd955aG5uRllZmaCCZTab\nsXnzZmzduhXnnXce3nvvvbQSnB07dmDdunXc/3/88Ufs2bMnwG6yo6MDX3/9Nf74xz/Sz1SaQ8U0\nRs455xzce++9uPbaa2Gz2XDllVcCAAoKClBdXY0I96RTDp1Oh+7ubnz44Yf48ccfccstt8Dv9+Oi\niy6iH/40gWEYSKVSNDU1oampCWeeeSZ336effoqVK1di7ty5OP7449Hf34/XX3+dc4WSSqWoq6sL\ncIQKdoWKJyzLor29HevXr8fevXtx+eWXY8+ePWn3XrNarWhtbcXhw4e5723btg12ux0XXXQR9731\n69dj3rx5AW10lPSEimmMMAyDyy+/HEVFRVixYgVef/115Obm4tNPP8XHH3+cUgUR0aBSqfDAAw+g\nqKgIP/vZz+Dz+XD77bcDAJYuXZpWVnqU0cyZMweff/55yNcxlCvUrl270NbWBovFguzsbK7amN/e\nE40rFMuy+OKLL7B27VoMDQ3h2muvxcaNG9P285Ofn4/TTz8dDzzwAKqqqvD555/j448/xv/93/9x\nhvMsy2Lbtm246667MtrWcLJAq3njyKFDh/DFF1/A7XZj4cKFaGxsFHpJUcPvnW1ubg6YOPHEE0/g\n9ttvx6233ooVK1bg6aefxoIFC7gWIErmw7IsrFYr2tvbAyqO29vbI3KF8nq9eOutt7BhwwYoFAqs\nXr0aCxYsSPn90HB57LHHsGnTJpx00klYvHhxQEHZk08+iXXr1mHr1q208Ci1oa0xlOggvbMtLS1o\nb2+HSqXCxRdfjHPOOYd7zOOPP457770X06dPx9tvv40DBw7QVBUFQGhXqPb2ds4Visx6HRoaQkdH\nBxYuXIhVq1Zh6tSpQi89YXi9Xq4a+qKLLsKKFStw22234dxzz+WKFykpC22NoUTOzp070d7ezvXO\n7tu3D6+99hruu+8++Hw+LFmyBACwfPlyvPnmm9i5cyf27dtHhZTCwTAMiouL0draitbW1oD7+K5Q\nb7zxBjZv3ozy8nKBVpo8JBIJWJaF3+9HXV0dLrzwQphMJtTV1WFkZGTCIfKU1IdGppQADhw4gCuu\nuAJvvPEGKioqIBKJ0NXVhaeffhp79+7FHXfcgXnz5uGxxx7DlVdeiX379mH27NlCL5tCSTs++ugj\n/P73v0dLSwtee+01oZdDGZuwItP0bXykJAR+7yzpP5wyZQrOP/98ZGdnY//+/QCAY489Ft9++21G\nCOkjjzyCxx57DE8++WTA99O9EpuS2px66qk4ePAgXnjhBaGXQokDYlKZGSYRPZiSfhQWFqKhoQFX\nX301VCoVZs+eDZZlUVVVhX379uHjjz/GBRdcALVajaqqKqGXGzNnn302PvzwQ4jFYqxbtw579uzB\nlClToFAoMqYIhvJv+vr6MDg4OOYUICFIprMUJSruCOdBNDKljILfO7tx40ZOVPLz81FdXZ0xIrN3\n717o9Xrs378fmzZtQnt7O2w2G9asWYOdO3cKvTxKnHnooYfwP//zP5g3bx7mzp2LAwcOCL0kSgZB\nxZQyCtI7u3btWqxevRqLFi3C4sWLcf/99+MPf/hD2vb+BWO1WmE0GmGz2QAARUVFeOGFF+B2u/HQ\nQw9x00toujf92bZtG+6++24sXrwYGo0Gp59+OjZu3Aiv1yv00igZAi1AooxLJvXOBuP3+3Haaadh\n4cKFuPXWW7mIe3h4GDNnzsTy5ctx6623CrxKSqyEmt7yxhtv4LrrrkNnZydsNhs+++wz/OMf/8CS\nJUtw6qmnCrxiSooRViqO7plSxqWsrAyzZ8/G3LlzUVZWJvRyYubZZ59FYWEhSkpK4PV6Ybfb8cUX\nX8DpdGL27NnctBIAaG9vD+itpaQn//znP/Hyyy9jy5YtnCfuvn374PF4UFFRgbvvvhtPP/006urq\ncM8992BgYAC/+MUvBF41JYWge6YUCp+LLroIK1euxF/+8hd0dHRAKpXiv/7rv1BfX4+3334bDzzw\nAPdYvV4Pl8sFv98v4Iop8SB4eovD4YBer8fQ0BDeeecdGAwGvPjii1i3bh22bNmCL7/8EjqdTuBV\nU9INKqaUScFrr70Go9GIW265BR6PB/feey/a2tpQVlaGG2+8EfPnz8d7772HxsZGXHbZZdi4cSNu\nuOGGtB6bRznCjh07Aszlf/jhB/z4449wu93o7+/H6aefjlmzZgEA5s6di127dsHn8wm1XEqaQs8U\nlEnBCSecgKuuugqrVq3CeeedB7vdjvvuuw9tbW0oLy/H1Vdfjeeffx5XX301TjzxROzdu5c7waY7\nOp1u0hZRhZre8tZbb2FoaIjzw120aBF337Zt29DU1ISSkpKkr5WS3tAGJ8qkQKFQ4Oyzz4ZEIsFZ\nZ50Fv9+PV155Bffddx/++Mc/oqGhAV1dXbjiiisgk8mEXm7cOP/889HR0YFnnnkmYy4OIiHU9JZP\nPvkE1157Lbq7u6HX6zFz5kzu8W+99RZ+8Ytf0PQ+JWIirealUNIahmEY9uibnmGYxQB+DcAEQAxg\nIYBFLMv2CbjEuMEwzJ0AfgnADsAPYBXLsvuFXZUwMAxzOYArAPwLwDaWZT9hGOYNABqWZa85+pg5\nAJ4CcAfLsluFWy0lHaFiSpl0BAnq8QCeBiAHcCrLsnuFXFs8YRjm9wAsLMs+xzDMWwAKAaycrIIK\nAAzDiFmW9R39+lYA1SzLXsUwTAmA1wH04MhzNCTkOinpBxVTyqSECCrDMKsA/A3AbJZlvxN6XfGG\nYZhSlmUHjn5NBPUaAN8e/ftFLMtOypwmwzANAN4EUADgEI5se/2aZdleQRdGSUuomFImLQzD5AN4\nGMAGlmW/Eno98YBhmEsAfMaybCfvexKWZb1Hv34bR8TjAhxJe+awLHujIItNERiGOQVH0vz/YlnW\nPZkvMCjRQ8WUMqlhGEbKsqxH6HXEA4ZhngdwNoAtAP7KsuxhXgTOT2++DOBUACUATmRZ9kvhVk2h\nZAa0NYYyqckgIT0fQDWAuwBIAdzIMEz9USFlWJb1MQxDqvf3Hn3MHCqkFEp8oJEphZIBMAyjAPAz\nHNkD/CWAC3Gkijc4Qj0eRypaj8+kYisKRWiomFIoGQI/Zc0wzDkAfgPAAeAvRwX1GJZlv2MYpopl\nWZOgi6VQMgwqphRKBjFBH+2pAE4m1b0UCiV+UDGlUDKMydJHS6GkEtROkELJMHhFRyyABQAakKF9\ntBRKqkCreSmUDOSooOYDmAngOCqkFEpioWleCiWDyaQ+WgollaFiSqFQKBRKjNA0L4VCoVAoMULF\nlEKhUCiUGKFiSqFQKBRKjFAxpVAoFAolRqiYUigUCoUSI1RMKRQKhUKJESqmFAqFQqHECBVTCoVC\noVBihIophUKhUCgxQsWUQqFQKJQYoWJKoVAoFEqMUDGlUCgUCiVGqJhSKBQKhRIjVEwpFAqFQokR\nKqYUCoVCocQIFVMKhUKhUGKEiimFQqFQKDFCxZRCoVAolBihYkqhUCgUSoxQMaVQKBQKJUaomFIo\nFAqFEiNUTCkUCoVCiREqphQKhUKhxAgVUwqFQqFQYoSKKYVCoVAoMULFlEKhUCiUGJFE+Hg2Iaug\nUCgUCiU1YcJ5EI1MKRQKhUKJESqmFAqFQqHECBVTCoVCoVBihIophUKhUCgxQsWUQqFQKJQYoWJK\noVAoFEqMUDGlUCgUCiVGqJhSKBQKhRIjVEwpFAqFQokRKqYUCoVCocQIFVMKhUKhUGIkUm9eCiWj\nYFkWfr8ffr8fTqcTfr8fYrEYIpEo4MYwDESiI9eeDBOWVSeFQplEUDGlTDqIgPp8Pvh8voDvA4DP\n54PX6w35c0RU+TexWAyGYajgUiiTGCqmlEnBWAJKRJB8zf93rN8D/FtwicDy7w9HcKnYUiiZBRVT\nSsbCsiwnnn6/n/s+X0AjJVzBJccmgsv/mcHBQWRnZyMvL48KLoWSIVAxpWQUoQSUCFSyxGmiY1ks\nFrAsi9zc3DEFl/97iMhSwaVQUhcqppS0hkSBfr8fvb29KCoq4kQmmQIaCWRNZH81FERcWZblxHYi\nwQ1VMJWqzwGFkmlQMaWkHfw0qs/n40Tm8OHDmDVrFiSS6N7WDMNwvyvRTHScSPZvgwU3+Geo4FIo\niYeKKSUtGEtA+RGoSCRKmhjGQryEK96CG1w0RQWXQgkfKqaUlCUcAeUjFosDCo1SlWRGwJEILum3\nDVdwQ+3fUsGlTFaomFJSivEEdLw9RuDIHiS/7SVVSaaYhkM8BHdwcBBisZjbs6aCS5lsUDGlCA7f\nhShSAeUjEonSIjJNRyYSXLvdDqlUiuLiYhrhUiYlVEwpgjCeiUIkAsonVjFNZutMKkWm8YBl2bCE\nMJqUMimcooJLSWWomFKSRjguRLGQLnummUgoQQxFNCllj8dDBZeS8lAxpSSURLgQjUU89kzDFYVY\nyMTI1O/3C1KlzBfcsX5XKMFN9V5kSvpBxZQSd4RyIUqXPdNMFFOS5k0WVHApqQYVU0pc4BcQCWXj\nly5imokkI6KPlEgF1+fzjRJct9uNoaEhVFVVUcGljAsVU0pUBLeweL1e7N+/H3PnzhXsxJIue6YM\nw6TFOiMhFcU0HCYSXI/Hg6GhIVRXV48puAS+wFLBnXxQMaWEzXg9oGKxGC6XS9CTRax7pvREFz3p\nKqYT4fP5IJFIIqpSDkdw+daOVHAzAyqmlHEJ14UoFU4AIpFozJNYKkH3TNMHn88HsVg84eOiSSmP\nBRXc9ISKKWUUsbgQCUm67JlmopjGs5o3lQhXTMOBCm5mQ8WUAiB+LkRCki57pplIJqd54yWm4ZBo\nwQ0W20x8zYSCiukkJhEuREKeVKk3r3BksphGO9IvUcRTcC0WC4qKiiCVSqngxkhqvUufY1ciAAAg\nAElEQVQoCSeRLkRisVjQkw+1ExSOTBbTrKwsoZcRMeEKbldXF6ZPnz7u+zHUaD4quKOhYjoJIALq\n9XoT6kIkkUjg9XrTVkwp0ZPJYprMNG8yYRgGXq8XMplszEwUEVnS/jYW4wku+d2Z+P7gQ8U0QxHC\nhYhEpkKRLnummRiZ+v3+tNlbj4RUTPPGk4mqsCNJKYcjuAMDA/joo4+wbNmyKFecumTuu2QSIrQL\nEYlMhSLaPVOPxwOTyQSj0Qin0wmpVIrs7GzulpWVxf2bqVFKrGRqZOr1eulrPgGRCG5nZyc+++wz\nKqaU1IK0sLjd7oBIR6h9DKEj00jSvF6vF729vTAYDHC73aisrMS0adO4v8HlcsHpdMLpdMJqtXL/\nJxEYX2D5wiuVSid83jMxMs1UMc3kNG8yswnkvdHb24uqqqqkHDPZUDFNM0L1gH7//feoqalBYWGh\noCe0VIhMxxNTIqAkAq2qqsK0adOQl5cHAJwZulgshkwmQ0FBQcjf4/f7A8TWbrdjYGAATqeTGxcm\nlUoDhJb/NRXT9CGTxdTj8UAqlSb1mFRMKYIykQuRVCqF1+sV/GQmdGQaas/U5/PBbDbDYDDA4XCg\noqICTU1NyM/PD/k7whEFkUiEnJwc5OTkjPk7vF4vnE4nJ7qDg4Pc/91uN3w+H2w2W0ixlclkgr+W\nkUJNG9IPocR0xowZST1msqBimqJE4kIklUpTwkZPIpEInuYlz1dfXx8MBgPsdjsqKirQ0NCA/Pz8\ncU/48UqNkwscqVQaMrodGBhAf38/1Go1F906HA4MDQ3B6XRyaXuJRDIqjUz+n2pFMZlqJ5iphVWA\nMGJqNptRXV2d1GMmi9T6RE5yonUhShUxFYvFgq3D7/ejr68PDocDX3zxBcrLy1FfX4+CgoKUjJgY\nhuEEciyCo1siti6Xi8tEyGSykHu347U7JIpUfJ5jJVPT1wBN88YbKqYCwxdQ/n5jJC5EEokETqcz\nUUsMG7FYnNR1+P1+9Pf3w2AwYGRkBGVlZZDJZDjhhBOiPgEm4+QZ7p6pRCJBfn7+uClpt9vNRbcu\nlwsWi4X7mmVZiMXiUWLLj24zVSgoEyOUmMrl8qQeM1lQMRWAeLsQSaVSjIyMxHOJUZGMAiS/34+B\ngQEYDAZYLBaUlpaipqYGRUVFYBgGAwMDMQlEMsQlXgVIDMMgKysLWVlZKCoqCvkYn883ptiSLAKJ\nbkOJbqamOClHxDQ3NzepxxwZGRnzvZruUDFNEol0ISIFSEKTqAIkv9+PwcFBGAwGDA0NobS0FCqV\nCsXFxTSymgCxWIy8vDyuYjkYlmXh8Xg4wSWtQERwyZ5hqFRyVlZWWK1A6Uomp3iB5Eem/G2rTISK\naQJJlgtRquyZxjMyZVmWE9DBwUGUlJRAoVCgpaUl7T+MqdQaQ/ZdZTIZCgsLQz6G33frcrlgtVrR\n19fHtQIBgMPhwMGDB0NGt+laDZvJxUdA8sXU7XanZaV6uFAxjTNC2PilipjGGpmyLIuhoSEYDAYM\nDAyguLgYcrkc06dPz6iTWrqdTMRiMXJzc8dMCbIsiz179kClUnHRLem7JUYXpOAqVHSbqifYTG6L\nAZIvpr29vaioqEja8ZINFdMY4bewkEIiYHLZ+MWyDpZlMTw8DIPBgP7+fhQVFUEul2PatGlRCSjD\nMGkRUaRKZBoPyPu8oKAgLKMLl8vFGV2QvlvSCjTW3q0QrUBUTONLJlfyAlRMo2IiE4VkX2WLRKKU\nODmH22fKsiwsFgsnoAUFBZDL5Whubo5ZBIkLUiqLaSqleZNFuEYXfGcp0grkdDrh8/m4gqtQYpuV\nlRX3z12mi2myPycmkwmVlZVJO16yoWIaJsEC2t3djaKiIq4IJhXTVMmGRIWhYFkWIyMjMBgM6Ovr\nQ35+PuRyOZqamuL6gaZj2NITvtHFWK1Afr8/oBWICK7L5RrVChQqwo00us30iTHJJpMNGwAqpuMy\nXgRKrqJTSUSFrj4MPjbLsrBarTAYDDCbzcjLy4NcLkdDQ0PCrvjTQUwnY2QaD0hV8URGF/zodnh4\nGL29vXA6neMaXZDoln9h5/V6UzrDEQtC2D/29vZi+vTpST1mMqFiGkS4Nn5ZWVlwu91CLXMUpPgn\nFa6k+QKak5MDuVyOqVOnJiVlFutM03TqM6WMRiKRQCKRjNsKRKJbIrqhjC6ysrLg9/vBsizMZnNA\ndJtKF9DR4vV6BTFsOPnkk5N6zGQi/Jk3BYjGxk8mk6WEUQKBVPQKJaY2mw0GgwFWqxWHDh2CXC5H\nXV1d0tcT7UxTSvSk04UB3+hiLEgrkF6vh9PpxMjIyKhWoLGi2+zs7LSIZqmVYPyZtGI6ngtROB8G\nmUyWUpEpEdOxCjwSgd1uh8FgQG9vL2QyGeRyOfLz8zFnzhzBTiixpnlTyU4wXRB6eyHekFag7Oxs\n5ObmQqFQBNzPN7og0S0RW77RxVgj+FLB6EIok/tMtRIEJqGYEheiWG38Ui3NK5FIktJrarfbYTKZ\nYDQaIZPJUF1djfnz53MfTJ1OB5/Pl7ZiCmSeOCSaTB6/Fkpw+EYXY+H3+wPE1mazhZx5O1Z0m+gt\nESHE1GKxoLi4OKnHTCaTUkxJmX0sJwCZTAaXyxXHlcVGIo0bHA4HjEYjTCYTxGIx5HI55s2bF/Jk\nQnpNk/1BJcSyZ0reE4mOGjMxMk2H1GakxNIaIxKJJjS6IFOBiOgSsXW5XKNagYLFNlajC2olGH8m\nnZiKRKK4fPCFHoQdTLz9eZ1OJyegIpEIVVVVmDt37rhX44Dwz0s67Jlmophm4kkykX2mE828Bf5t\ndEGiW7vdzg2ZJ1mxUFOBwjG68Hg841ZFxxu3250S6e1EMunENF4vZqq9KaRSacyRssvl4lK4AFBd\nXY05c+aMW6wRTCoMCE/11phMg4ppYpjI6ALAqOh2LKOLYLMLh8MxZj9vIujt7c1owwZgEoppPEkl\n6zqpVAqr1Rrxz7ndbi4C9fv9qKqqwqxZs6K+ahWLxYJaG8YipuS54Df+JyIVRiPT9EBoMQ2HSGfe\nklag/v5+DA0NoaOjI+D9HsrGMR6vrdlszuhKXmASimkiprVEErklikh8cd1uN3p7e2EwGODz+VBV\nVYVjjjkmLpXAQkemke6Zer1emM1m6PV6uN1ulJWVwe/3w2w2h2z0J7ecnJyoKzMzTXhS5YIy3qSD\nmE7EWDNvnU4nmpqakJ2dHWB0QWbehjK6CFUoFe7M23S0Enz33Xfx008/YdWqVRcDGAYwdPQ2DMAC\nwMayLFeFOunEFIhfZEDaY1JBTCcqQPJ4PJyAer1eVFVVoaWlJe7DgVMhMp1IzP1+P/r7+6HX62G1\nWlFZWYnm5mbk5+fD4/GMqk5lWTbAVcfhcIzauyKVmcGCK5PJQp5saGSa+mSCmI4FvwApXKML/mfA\nYrFw+7n8mbfB0a1MJoNUKk3LHtOHH34Y5eXlANAIoAhH9FICQASABeBmGMYHYA3LstpJKabxIpV6\nTUOJqdfr5QTU7XajsrISM2bMiLuA8kkFMQ11UUHGu+n1egwODqKsrAxTpkxBYWHhhEJAxoeNlfoO\nNWB7ZGQkwFWHPxFFKpXC7XbDbren9bxPAhXT9COSv40f3YYz85YMmO/r68O+ffuwZs0aeDweFBQU\n4IcffkBNTQ3q6+tx0UUXRbzud999F9dccw18Ph+WL1+OG2+8MeD+Tz75BIsXL0ZdXR0A4Fe/+hVu\nvfXWiI8DALNnz8bSpUvx/PPPPwKgDEAugJyjtzwALgB/A7AJoJFpTKRSrykRU5K2NBgMcDqdAVFX\nMpBIJIK2DPH3TIk3sF6vR19fHwoLC6FQKDBjxoy4nvzDGbDNLxSx2WzweDw4fPgwN++Tf2UffEsF\ni8jxyFQxzdT0dSIYa+bt9OnTsXTpUtxwww04/fTTUVtbC41Gg8HBwYiP4fP58Pvf/x7vv/8+VCoV\nWltbcc4552DGjBkBj/v5z3+Ot99+O6a/BwBuuukmFBYWgmVZEwBTqMcwDDMNgA6YxGIaD+JRQRsP\nfD4fzGYzbDYbdu/ejYqKCjQ1NSW1Wo8gkUhgs9mSflyCWCyGy+VCR0cHTCYTcnJyoFAoojbXf+6D\n57Dp7U1wupxQlCtQL69Hy5QWzJk6B8dOPTZsoeMXihQXF6O/vx/HHHMMd3/wlX2ofavg9odUcdTJ\nVDHNVIR4vcxmM5qamtDS0oK5c+dG9Tt2796NhoYG1NfXAwAuvPBCbNu2bZSYxgtyYcwwjAjAf+NI\ndKoD8C3Lsm1HH/YgezQym5RiGi+ysrJgt9sFObbP50NfXx8MBgNsNhsqKiqQlZWF448/XtATm1B9\npi6XC0ajEVqtFl6vF42NjWhtbY2qGvfjbz7G/a/cj90/7obH9++U8aGeQ/jk208CHisWiZGfk4/S\nglLIy+SYKp+KZnUzZk+djdamVuRmj06ph8qMjHVlT+AP1ybRbX9/f0i/2OBbImZ98slU04ZMxev1\nJj3b0dvbG/P4tZ6eHqjVau7/KpUKX3755ajH7dq1C7NmzYJSqcSaNWvQ0tIS9TGdTicA3AmgHkf0\nshqAmWGYm1iW/YnlfZAnpZjG68SS7D1Tv9/PCajVakV5eTnq6+tRUFAAhmHQ19eXtLWMRTKreb1e\nL0wmE1eVXF1djaamJvT19UGpVEb0u77r/A53PXcX3v/qfdhd4V8g+fw+DNuGMWwbRqexE7u+3xVw\nv0gkQm5WLkrySyAvlaO2uhaNikYUMAWoa6xDaWFpWMcJZ7i2x+OBw+EIGD9GiqSC922Db7GIYaba\nCWYqQlkJlpSUJPw4c+fOhUajQX5+PrZv345zzz0XbW1tE//gGGg0GgA4HcAJLMt6AIBhmEsBPADg\nTIZhmEkdmaaTmJLKU4PBgJGRkXELZ1JhDFuiC5BI24rBYIDdbkdVVVVAUdXw8HDYrTHGASPufO5O\nbN2xFQMjAwlbr9VhhdVhhdasxe6fdnP3/enFP4FhGOTIcjC3cS42XL0BU6qnRHUc/r4tvwWCT3CR\nFIlsSUUmGT0W3P4zkVdsJqZ5M3m/NF2tBJVKJbRaLfd/nU436qKZX7Nwxhln4KqrrkJfXx+pyg0b\n8p42m80A4CBCepROHKnoBQAGRyp7J6eYxotEianf78fAwAAMBgOGh4dRVlaGmpoaFBUVjfuGJGb3\nQotpvCNTlmUDno/giDz4+OOJqd1px31b7sMLH7wArVk75uOSgYgRYVb9LFyz5Bqcd9J5CT/eRPZ1\nPp8vQGxDuemEimqTMWAh2WRyJW+yxTReVoKtra1oa2tDZ2cnlEolXn75Zbz44osBjzEajaiqqgLD\nMNi9ezf8fj/KysoiPhZZa3NzMwDsZBjmaQC7APgAHA9gJ3ko+ZlJKabxuoqOdRA1H7/fj8HBQRgM\nBgwNDaG0tBQqlQrHHHNM2OuNtz9vNERiHjEeLMvCYrHAYDCgr68PJSUlUCgUaGlpGff5GKvPtNPQ\niSsfuhL/2v8vwXs8ayprcNqM03DfH+6b0Os4mYjFYuTl5Y3Zbxi8b0vaH0ZGRuB2uzE4ODjmvm2s\nxuzJhopp/Ojt7UVFRUXMv0cikWD9+vU4/fTT4fP5sGzZMrS0tGDjxo0AgCuvvBKvvfYaHn30UUgk\nEuTk5ODll1+O6X13NKJdD+BCAAsBSAG8wLLsNgBgWZY72UxKMU0VWJblBHRwcDBswRiLRE6OCZdY\nI1MyZLy3txd5eXmQy+VoamoKO+U2lp1gnbwO7937HoasQ9jz4x583f41DmoOosvYBX2/HgOWAdhd\n9oT5+pYUlODcE87FTUtvQlVJFfbs2SOIkJoGTdj41kZUFldi9tTZmNs4F9my8Kwjx9q37e3thc1m\nw5QpU0ZZ15HoluzbhjK3iMRJJ1lkupgm870XTyvBM844A2eccUbA96688kru6z/84Q/4wx/+EJdj\n8XAD+CeAVwGMAJAxDCPjux8Bk1RM4zlqK1J/XmIeYDAYMDAwgOLiYsjlckyfPj3mk0kqiKlIJIr4\neSUTaoxGI6RSKeRyOY477rio0tUTefMW5xdj0fxFWDR/Ucj7hyxD+OLgF/j28Lf4SfsTOg2d0A/o\nMTgyCJvTBp8//AuFbGk2Tp59Mm5aehPmNMyJ+G+JF16vF4+8+QieeOcJdJm6Rt0vFomRl52HkoIj\nRVJ11XVoVjdjVv0sHDftOBTmhu6dJZBq3rGs6/iP4/fb8odqO51OsCwb4BMbfEumuGW6mI6VfUgE\nJpMp7dyPyDn9pZdeAoD7APhxZJ9UBKACwD04kv6d3AVI8YTsm45nDM+yLIaHhzkBLSwshFwux7Rp\n0+J6NZ6sAeHxwOPxcJW4fr8fcrk8rBFvExFr6r0grwAnzz4Zpx57asj77U47vm7/Gt+0f4ODmoM4\nbDgMfb8e/ZZ+2JxH+mtn18/Gql+twrknnhv1OuLBB19/gHtfvhd7D+0d9yLA5/fBYrfAYreg29SN\nLw5+EXC/iBEhJysHJfklqCqtQm1lLSe285vmh12AFM7YsWCxJbaNZManSCQat982XmS6mCYzzZuO\nJvderxcymQybNm0CgG8BvIUjrkdZAIoBHASASd8aA8TXBcnlco0SU/6eX39/PwoKCiCXy9Hc3Jyw\ndBaxqUtViLmEXq+Hy+WKq8E+IdHzTHOzc3HiMSfixGNOTNgxYqHL2IU7n78T7+x+hxP3WPGzftic\nNticNuj6dPjq0FcB9zNgkCXNQnF+MapKq6CuUKNR2YizfnYWWptbIzrWRFNQ/H7/KNvGsYYS8KuR\nIzW3oGIaP0wmE6ZNm5a048UDclG/aNEifPrpp/9gWbZjop+ZtGIaL/gVvSzLYmRkhCuayc/Pj3jP\nLxakUqlgJhLBkGiFVCbr9XqMjIygoqICjY2NY0YmsZJORS7xwul24oHXHsBz7z+Hnv6epB+fBQun\nxwnjoPHIbcCIaeppmFk3M+7HEolE45pbBA8lsNvtGBgYGHcoARFd/lACKqbxw2w2Y+HChUk7Xjxo\naWmBWCwmbm7bGIbZDuAnAFoARpZlvwn+mUkrpvG0FLRYLBgaGoLZbEZubi7kcnnU9nWxriUV0rwM\nw2BwcBBGoxEDAwMoLS0Nq7VnLLZ8vAXr3lgHh9uB2qpaNKmaMKt+FlqntaJR2ZiAvyA92LpjKx54\n/QHsP7wfflbYgegyiQynzTsNd1xyB5rVzYKtI15DCfx+PyQSSYDwZsJQAuBICjOZf0c6Tox5+eWX\nodVqMTAwgIsvvvhVAHUAZgGoBFDBMIyaZQM/dFRMo8RqtcJgMECv10MsFnOekUJ+2IQWU2Iqb7Va\nodFooFQqo94X/uzAZ/jLi3/BjgM74Pb+O3X9fdf32P7l9oDHZkmzUJRXhMqSStRU1iBflA+NU4PW\naa2Yqpga89+VirT3tOOLH79ARXEFmtRNMA+ZMWIfCXiuEg0DBtNrp+OSky/BkhOWQC6XJ+3Y0RLu\nUIKuri74/X4us0KEN92HEhCSmcExm81p8d7gM3PmTMycORM333wzWJa9LZyfSY9XPkWw2WwwGo0w\nmUzIzs5GdXU1pk2bhqGhoZh9J+NBvHo8I8HhcMBgMMBkMiErKwsKhQJlZWVoamqKeNTbIe0h3Pnc\nnXh3z7uwOqxh/5zL40LvUC96h3rxXed3AIBXPn+Fu5+IbVVJFWoqazjv3OOmHYc6eV3A70qXNHGD\nsgF/Xf7XkPf9pP0Jew/txfdd36O9px0aswbmITMsdgtcntgHM5QVluGCky/ATUtvQmFuITQajWDP\n2+btm/HItkfQbepGTlYOSgtKUV1SjdrqWkxTT8Ps+tmY3zQ/bNtG4MjnSCwWo7CwMORA63QfSpBs\nhoeHk2IlGG86Ozvx3Xffhf34SSum4b6h7XY71/cok8lGtW2QD1IqkKzI1O12w2g0wmAwQCQSQS6X\nY/78+dw+TG9vb9hFQH3Dfbj7+bvx+r9eh3nYnJD18sX2QOcB/OPLfwTcny3LRlFeERRlCty09CYs\nmhu6bSZdaFY3j5tqPWw4jD0/7cF3nd+hTd8GTa8GvYO9sNgscHqcIX9GKpbixJkn4vZLbsexDccG\n3JdsO8GDmoO49elb8dE3H8Hj/ff7ndg2ano1AbaNADjbxuL8YlSXVKOmsgZNqibMrJ+J+U3zoSwP\ntKUbb880nYcSJNtuNF5WgsmEvJ+Hhoawe/duMAzzGoAPABgA9AE4zLKsIfjnJq2YjofD4eAiUIlE\ngurq6gCx4JNKA8Lj6cgUDH/QuMfjQXV1NWbPnh1yb2qiCNntduPB1x/EU+89hS5jV0LWGwkMGLQ2\nt+LWS27FMVOOSZnXM1HUy+tRL6/HBSdfEPL+blM39v60F991fYd2fTtOmnUSVpyxYszflwwxdbvd\nWPPaGjz93tMwDhoj/nmWZWF32WF32aHv1+Pr9q8D7mfAIEt2JINRUVyBspwyTJ8yHXOb52J+03w0\nKBvCPlY4QwmCzS2SNZQg2cVHxN40ncSUrLWqqgq/+93vcNttt/UDOAFAAYApOCKsNzAMI6YOSBh9\npeRwOGAymWA0GiEWi1FdXR1W32MqiWm84U+p+f/svXd8W/XdPX4k2ZJsy3tpWvEeGWQvCNA2lBkI\nPOwCTwihrFIK6QjQX0LLN+xRQlIooxD2Xg8EQiglhWY4e3rFcWxtyUvD2tL9/WE+l6tlW/LVcKLz\nevkVx1fSvbrSvefzXucMDQ2hrKwMDQ0Now58R1JB2vj1Rmz4ZAMOdx1OesMMj8vDrLpZ+MOVf8CS\nhUvov8drMTKRoCxXQlmuHLNecDxF4b8/9D0efONBNLc1x/WzoUDB6XbC6XbCMDDsA7316FaAUZ7P\nEebgtiW3YfX1q8e1r9HELYCxmxIEj/+MJm6RDCnBcKnyiYCysjKsXr0aq1evvoX8jcPhZOJHkXsm\nkQKnOJkS5R2DwQAul4vy8vKohQNiUfyJN8YTKQRLHJaUlER0qYmESJHprNpZuP3i23Hw+EF0aIbT\ni6RxhukbGk9US6ux4oIVuHPpnSHpLoqi0NfXB4vFguzs7Lgq7/j9fhgGDCgvnFhdjuHAdmQ6aBvE\ng288iPe2vgfzkJm1140V2cJsLF24FA8uexClBePXmB0L4mVK4HA4EprmnYidvGvXrsWMGTNCZAsB\ngGHDxkuTKQPt7e3Iz8/H9OnTIRAIkn04rIDI6UVDAMHzsfn5+ZBIJGhqaorpJhkpMp1SOQVTKqeE\nfY7f78e+Y/uwp30PDh0/hA5NB9S9avSae2Fz2OD1xd5YVZJfgsvPvByrr18dthHFarVCq9XCZDKh\noKAA2dnZITcnZgdncDQQzbneenArHn77Yexs2Qmf3wcOOHTNlqgLNSgaMLVqKubWz4WkOPW7INki\nU8OAAb9++tf4bv93oJD8BWpjRSP+dPWfcNkZlyX7UEIQqymB2WyGz+dLmCmBwWCYcJHp9u3b8cwz\nz+Ciiy6CQCDA888/vxrD9VJSM90F4FUOh/M1RVGvk+ed0mR62mmnsRJVEg/PVGiLJ01IY7nBk+Yq\ng8FAz8fW1taOO2UXi0E4l8vFrLpZmFU3K+x2t9uN3R27sbttN452H8Ux7TFoejXoM/eF1czN4mfh\nnFnnDNdBwxC4y+WCTqeDTqeju5Bra4dnVj0eT8jNJFwkQIy4SZqTSbLM33X9Ovz19b/i8x2fw+qw\nBrwuBQoOtwMOtwP6AT0OdB7AZ9s/o7cTsi0QFaC8sBzKciXq5fWYWjUV8xvnp0RkyxaZlheW49O/\nfopB2yB2t+/Ggc4DaO1pxQnDCej6dei3xteMAABEWSJcdsZluHT6pTh74dlJHXU7oT+BD7//EI0V\njZjbOBcleWP35IxUt1WpVHQfSCJMCSailODjjz+OtrY29Pb2Qq/XA0AxgHoAhQDyAfABVAN4mfk8\nTpRkkvzlIovweDysXJj79u1DfX191KMg8cDBgwdRWVkZMT3kcrloUXkejweJRILy8nJWFwI6nQ4O\nhwNVVVWsveZosDvt2Nm6E3va90DgFeCmpTeFfB4+nw9GoxFarRYejwdSqRRisTggre/3+8OS6Whg\nkq3D4YDFZsE/t/wTnzZ/CoPZwMp7DAcOOBAKhCjIKYC4SAxlmRJ1ijqcVnUa5jfOT0hasr29HeXl\n5RHrf2zDZrdhV/suHDx+EC09LejSddFkG60ZATB8DqdUTsF9196HC+ddCADYtWsXZs+enZTGmVc2\nv4KnP3w6pDmPw/lxYZVTQI951cpqMbVqKmbVzoKyXDnqax8/fhx5eXmjmmWHMyVg/ozVlOCJJ55A\nfX09rr322pjPRwog4EvA4XAyABQBGGCahic/lEoi2LpQSBNSKpBpOLF7r9cLg8EArVYLv98PsVgc\n19R2LJHpeJEtzMbPpv8MP5v+Mxw8eJDePzEW12q1sFgsozZRxfqdIGm3rYe34vH3H8e+jn0JabKi\nQMHhcsDhckDXr8O+Y/sCttfJ6rD+t+sxv3F+/I4hwaMxomwR/VmHg9PtxO723dh/bD9aVa3o1HYO\n2+xZ+2Fz2GiyzcvOwxVnXYE1169Bgagg5HUS+Z50fTrc98/78MXOL+B0hx9PoqjAz3p/Z4iiHT1T\nXZpfCkWpAjWyGkyeNBkza2eisaJxzA1I4zUl2L59O1577TUIBALU1dWhr68PSqUSdXV1Uev0fvXV\nV7jrrrvg8/mwYsUKrFq1KuS83HXXXdi0aROys7Px6quvYubMmVHtI/j1OBwOli1bBqPRiC+//PIf\nALQYTvMeBKCiKCpEt/OUJlO2kEodvcQg3Ofzobe3F1qtFg6HA+Xl5Zg8eXLMhL/1wFYU5BRgatXU\nUVM8JO2dLHC5XNoX1WQyIT8/HzKZLCqj9WhwTHMMf339r/h6z9ewu5KvjSzMFOIXM3+BB254ICHS\nfn6/P6VGH4R84YhmBG63G+o+NaokkTMniWoq/PA/H+KRdx9Bm6qNlddjzlQf6f2oeoMAACAASURB\nVD4C7A7cnsHLQF52HkrySyAvkaNaWo2miibMrJuJqZOmRpWhGsmUYNasWbjppptw880345e//CW4\nXC727NmD1tbWqMjU5/PhjjvuwJYtWyCXyzFnzhxcfPHFaGpqoh/z5ZdfoqOjAx0dHdi5cyduu+02\n7Ny5c8z7CAb5LhuNRhJw2AA0ALgVw528eg6HcydFUf9hPu+UJlO2I9Nkg8yvdXV1oaOjAyUlJaip\nqYFIJIrpvTa3NmPtm2ux9cDWgNUyP4OPvJw8lBWUDdfwFPWYXj0d8xrnoVJSOW6D8FjhdrtpgQ2b\nzQalUonq6uq41b26Dd245W+3YPuR7SnRMFNdXo3l5yzHFWdeQafbEhE1JjoyHS/4fP6IRBpv9Fv6\nsXrjanz4/YesOfuMFV6fF/3WfvRb+9Gubse3+78Fl8PFwskL8djNj0VsEIwFWVlZGBgYwNKlS0dN\nK0dCc3MzLdUKAFdffTU+/fTTADL99NNPccMNN4DD4WD+/Pm0X/R4JAzNZjMoisLHH38MACsBgMPh\nyAGsAvB3AK8CmMt8TppMWYBAIEiaWwuxetNqtejr6wOfz0dubi4aGxtjen9dui48+MaD+GLHFxHH\nEtxeN3rNveg19+Jo91F82fxlwHYhXwiRQARFuQKVkko0VjRiRs0MzG+aj5L82C6qSCC2bhqNhhaT\nEIvFKC8vR3FxMav7CoayXImvHv4KwHB02tzWPKwq9OPYj3HQGHe93OK8Ylx51pX445V/BJ/Lp5ui\nLBYLHA5HSDMJaYxiOqWM9zogZNpr6cXfPvgbRNkiTK+ejrn1c6OS8UsVxGtx8PXur/GX1/+Cw12H\nU2LxlZ+Tj+t+cR3W3LAGQn5kP+bxwGKxoKgo9u+ARqOBQqGg/y+Xy0OiznCP0Wg04yLTvr4+nDhx\nAh0dHXRjIobF7mcC6EaY/qFTmkzZQmZmJlyu8WueRgMitG8ymZCTk0N7pZL292huBoO2QTz81sN4\n97t3oe+PXl0mGGT4vdfaG1LD43K4yBZkoyivCNISKaol1Zg8aTJm1c3CvMZ5Y7qoKYrC4OAgNBoN\nBgcHUVpaivr6ejrd1NHRkfDIuEZWM6JKztETR9Hc1owj3UfQoe7AMfUxWF1WWO3WqMd+MnmZWDR1\nEdbcsCZE2i9cfSucU0qw4g5zTIJJuGPRkv189+d479n30KHtCNnGNBYXF4kxSTwJDYqGYbJtmBu2\nVplssC1C4ff7serlVfjgPx/AMmRJOpE2KZuw+rrVuGBe6Bwlm5iIUoIEcrkcK1euxH333YcPPvjg\nMQAuDKsfvQ9ACqAv+DmnNJmyGZkmIs3rdDqh0+mg1+tpneDKysqAOke4BqRw8Hq9WPfxOrz85cvo\n1I7qe8sa/JQfNqcNNuewhuqOozvobeWF5fjL//4Fy85bFva5Q0ND0Gq1MBqNyMvLg1QqxeTJk0M+\nRzJrm0pomtSEpkk/paZ27dqFOXOGjbO9Xi8OHD+Avcf24nDXYXRqO6Hp1aDX0hvQMFMtrcbtF98+\norRfOIzmlMIkWxLZktEf8r0OFm43WAx4+N2H8c2+b0YUzw82Ft/dHljEY5KtpFgSQLZz6uckhWzZ\n9jLlcrl47ObH8NjNj9F/a+lpwd6O4c/7mPYYVCYVq2YEwRBkCnDR/Itw1ayrcN7Pz2P99cOBDSlB\nmUwGlUpF/1+tVkMmk0X9mGjB5/OxbNky1NXV4YMPPtAAEABYR1HULg6Hkw/gpuDnnNJkyhbiWTP1\neDy0qDwAiMVizJo1K6JKE2lAioR3vn0Hz3z0DA50Hki6pB8AZAuyce6cc7HmhjVoqAhtTGCK6vN4\nPEilUsyfP3/Em10qkmk4kHRiRkbGqDO2Tq8TednhLcPGi7GQrdvtht1ux7OfPIs3vnsjJn3ccAgm\n211tuwK202SbWwhJUSDZzmucF5dzkgi/z8aKRjRWNEbcfkxzjHb+YZYNRjIjCAdZiQy/Xfpb3Hbx\nbfD5fNi/P7QDOF4wGo0x10oJ5syZg46ODnR1dUEmk+Gdd97BW2+9FfCYiy++GOvXr8fVV1+NnTt3\n0qIz40V3dzcGBgaA4Q5eCwAfh8MppSjKBCCkBnZKkymbBuFsurWQeUidTgeXywWxWIypU6dGFM4e\ny7H888t/Ys2ra+LmzBINeFwe5jbMxaprVuHcOeeGbPf7/TCZTNBqtXA6nSOK6od9/TgK/icDhOiS\nhd3tu/HAaw9g25FtUc9wjhcBZGsaJlsel4f5jfPx12V/xZz6Oazvk+3INBaMVjY4oT+BPe17cLDr\nINrV7VCZVDAMGGAeGlY4mtc4D4+seATTqqbRz0mGLu94BRsyMjKwfv16nHvuufD5fFi+fDkmT56M\n559/HgBw66234oILLsCmTZtQU1OD7OxsvPLKKzHvj6T433vvPezduxfbtm0DgD9jeNa0BsC9AN7k\ncDjctDl4EDgczrjb4NkgZb/fj76+Puh0OlitVpSVlaGuri5s2/lIiESmy89fjuXnL4fT7cSutl3D\nriBdh9Gp64S2V4s+Sx/sLnvcRgI44KBWUYvbltyGWy66JaQmRVEUzGYztFot+vv76U7kSDNuI4HL\n5Y5aM9X36/H0B0+jKLcIM2tnDkc5OfGJ/MKBfO9StZ5ks9vw0NsP4a1v30K/tT/ZhwMAKCsow/Lz\nluP3l/8+rosLv9+fEmpmI2GSeBImiSeN2YwAmJhkCgAXXHBBiE7urbfeSv/O4XCwYcOGce8H+KnO\nu2nTJixZsgR9fX34/vvvNwLYDuCPAFrIQ4Ofm9rfmASADTIliPbmSBppdDod+vv7UVxcjIqKCuTn\n58d8kx0txSnkC7Fo6iIsmroo7HbjoBHbj2zHvmP70NLdghP6YSk385A5plpOeWE5rv7Z1bj/V/eH\nJSumpKFIJIJUKo25E5mAy+WGXVCQOvELX7wQ1vqNy+UiR5iD4txiSEukqJHWYLJyMmbUzsDM6ugM\nEEZDqpIoAGw7sg13/f0u9Bh6IgoIJAo8Dg/TlNNw5wV34rTq4eyExWKha7fxIL1EpHmTgUST6USU\nEiTQ6XSYOXMmNm/eDABeiqI6OByOAkDEN3TKkylbIE4pY/myElF5k8mE3NxcSKVSNDQ0sNJBON6b\ndFlBGS45/RJccvolYbcf7T6K5pZm7O/cP1zLMfTAZDYFiNHnCHMwu2o21v1uHeorQkUDmHVgDocD\nqVQaYLg+XgQvKLbs3oK1b63FrtZdI6Yp/X4/rPbhDtsThhPYdmRbwPYMXgZEWSKU5pdCXipHrbQW\nUyqnYG793IDmorEi1dyGCBZOXohdG36qXapMKjS3NONg10G0qdtoM/FYF1hjgaRIghUXrMDdl90N\nLpdLi7Y7HA5YLBYYjUY4HA7ahCDYjoz8Hgsphkvzrv9kPb7Y+QUqyirQpGzC9JrpmFM3B9nC5Kue\njRWJJlODwYC6urqE7Y8NkM/90ksvBQAsXrwYL7744i85HE41gBwAxyM995TW5gVAqwWNF/v370dt\nbW1EmTqHw0FHYEKhEBKJBKWlpXFZAW/btg0LFy5k/XVHg9PtRI+hB3WKOuzcuROzZs2iCZJ4o2q1\nWtjtdojFYkil0jHXQaOByWTCoWOHsHHrRnyx4wvYnDbW9xEO/Aw+8nPyaTGLOvmwRu7cxrlQlCoC\nHrt3715MmzYt5dOJY8HHX30MR6YDh0+Mb8Y2g5eBs6adhbU3ro1qceL3+wPGfkhHcjjHn2ATgnDX\nn06nG74vZPqw6uVV+GbPNxHfB4/L+2nUq0iKSkklmpRNmFEzA3Pq58RtfjMWqNVqcLlcSKXShOzv\nT3/6Ey677DIsXrw4IftjE3a7nVaL43A4VwGYD+AViqIORXrOxL+Sxwm2VZCYZMrsROVyuZBIJJg9\ne3bcV4ekZpjoVJWQL0SdYnglSiQFyThLX18fiouLUVlZGZU3ajRwup14/N3H8c8v/wldv4711x8N\nbq8bJrMJJrMJR7qPYFPzJgj5QiyeuRiP3vxoCKGeLJAXy+kxn3A4euIodnfsxqGuQzimGR4D6TX3\n0j62shIZbr3oVty59M6YsjNcLhfZ2dkRpTIJ2TLHfsj/ScMJk2Tf+NcbeO2716DqVYV9PSZ8fh+s\nDiusDiu6Dd3Y3rI9YDuPy0OOMAdFuUWQFEtQJanCZOVkTK+Zjtl1sxNKth6PJ+oejPHAaDRCLBYn\nbH9sgs/n44033oDNZgMAE4AXESR4H4xTnkzZgkAggMvlgtfrpTtxiSJPNJ2owTh4/CC+2fMNZtTO\nwIKmBWO6+MisabLqPuSmtXv3bohEIshkMtTX17M6CM/ER//5CI+/93jKjPtwwEGTsgn3XH4Prjjr\nivCPYbFWn+oInrFNNEYjW5/Phx59D/6/V/8/bN67mdXUtc/vg8VugcVuwQnDCWw/GoFs84ogLR4W\nMWlSNmFW3SzWzQmSUTOdiGQ6NDSE66+/HhUVFSRzdB2APABeANdEet4pT6ZsdeK6XC4YDAYcP358\nVGeS0aAxafDgGw/i022fYsA6ELCNx+UhNzsXZQVlqCirQL2iHtOqp2FB4wI6Khxt1jQeYDrTUBSF\njIwM1NXVjUtKbDQ0tzbjlqduQauqNSWIqTivGFeffTXuvfbeUecfU7kB6VTCRz98hIfffpg1oflo\nEUC2+uE6/WTlZFRLq1nfV6LJdHBwMK7Xf7yg0WjQ1taGjz76CFarFU8++eTvAQgBjBidnPJkGiso\nisLAwAC0Wi0GBweRnZ2NvLy8sIo8Y4HNbsNj7z6GN//1JjS9Ie4+NHx+HwZtgxi0DaJd3Y5v9n4T\nsF3IF0IkFEFWLEONvIaW6lvQtID10Q+Koug66NDQUIAzTUtLS9wJY27DXOx7YViukNmFfPj4YbSr\n2mF2mDFoG4xbkwwAZGZk4sypZ2LN9WswvWZ6VM+NxwLAYrfgsXceg5/yY1rVNMxtmJtUUfdURDKF\n5iNBkCnAkgVL8PBND8fN8D2RZDqRpQTz8/OxbNkytLW1obKyEgAGqTFcrKc8mUY7ymK1WqHVatHb\n24uCggJIJBJMnjyZHnGJ5vX8fj+e+7/n8MLnL6Bd1c6KZieti2vpxYGuA/jw+w/pbTwuDzlZOSjJ\nK4GiTIE6WR2mVU/DvMZ5AcPdo8FqtUKj0aC3txdFRUVQKpUh4zyJtmFjdiHb7Xa0tbVhxoyfdGtb\ne1qx4+gOHDw+POTeY+yBadAEqyN6bVwAqJHW4I6L78BNF4Soio0JbKd5P/rhIzz+7uM42n007PdI\nyBciPyd/WB+3fBLqFfUJNRBPFZCxH5VRBYfbkezDQVleGa45/Rpce/a1EAqF8Dv9GBwchFAohEAg\nYJWMiLxfIsCGlGCiQUYbvV4vDhw4gH/84x+46KKLAOBBDofjBLCdoqh/RXp+mkzH8GEzZyGzs7Mh\nlUpRV1cXUAOMRlLw0/9+iifffxJ72vckVFHG5/fBMmSBZciC47rj2HpgK71NWa7EM3c8g/Pmhtft\nZOoCC4XCsOeAiWQYhBOEm7VtqGgIK1cIDDeKNbc1Y0/HHhw6Ptwko+nVoN/aD4fLQddh83Pycenp\nl2L1DatRkjc+mTQ2bjIqkwqrX12NTc2b4HCNTAxkkWUYMOBA54GQY8kSZKFI9GOTjLgKjcphp595\nDfMm1PjHaAge+zEMGNDc2owDxw+gTdWGbkM31EY1bC4bXG5XXETpeVwezphyBh5d8SiaJjUFmBA4\nHA5YrVbaZJvp+BNsQhCt4w9FUXHrWwiGyWRCaenEWqT5/X7weDx89NFHcLvd+Nvf/oaenh5gWOS+\nBoAKAMKpHwFpMgUQPkpwuVw0eWRkZEAikYw4CzkamUbyBk0mRFkiXDjvQqy+YXXYGg1pptJqtfD5\nfFF1IyfTIDxabV4+n4/Tp5yORmkjNDUa2nWHx+NBKBTC6XNiyDOEqVXDko4/GgaPG7FGps999hye\n+7/ncMJwgrXjsDvtsDvtYfVxSZNMcV4xZCUy1Ehr6CaZGdUzIrzqxEB5YTmWLFiCJQuW0H87ePAg\n6urqIBQK0W3oxu623Thw/ADaNe3oMQyP/cQyY1sgKsCyXy7Dn6/9c4AASGZmJjIzMyM6/ni93oBu\n5HD2euFmbNmw14sVbKkfJRLkXA0NDWHJkiUkKsXtt9/+IOMxnHBECqTJNAAejwcGgwE6nQ5+vx9i\nsRgzZswY082TiDYE46E3H8K6j9dh0DYYj0OOGpm8TCycshD3XXsfzjrtrJDtFEWhv78fGo0GVqsV\n5eXlaGpqitgJGQnJJNNotHkdDgc0Gg0MBgPy8/Mhl8tRW1sLiqLokQoiGGAymQIiBj6fH+IPSmzL\nRkO0ad6Dxw9izcY1+M/B/8DjY08HeixgNsl06bvww+EfAABZ/CxctugyXDf3uoQeT7zBHCtTliuh\nLFdGlO3r0HRgV9uu4YyG9hi6jd3D5QPGjO2Uyin4yw1/wTmzzon6WDgczqhkGxzZhrPXEwgE9P0t\nGnu9WGEwGFBWVhaX144XyPXo8Xjw17/+FXv27EFjYyNuvfXWywHYAOygKCrijTxNphg2gu3u7obD\n4QhoookGkb6U9/3qPvxm6W+w7cg22gWiS9cFXb8u7s0xzGNrrGjEb5b+BsvPXx72MTabja6DFhQU\nQKFQoKCgIOaLLSMjY0SP1x1Hd8Dj88RlsH00bV6fzweDwQCNRgOKoiCTyTB37lw6ovV6vXT9JCsr\nK8BggMPh0ETo9XrhcrngcDhgt9vR19cHp9MJj8cDDocTECmMJhQQDk63E4+9+xhe2/IajIPGcZ8X\ntlAnr8M9l9+Da39+LYBhO7mTCdHMaNfKalErqwV+HrrN7/fD6XbGNU0+Vns9i8VCp48HBgZosgUC\n7fWY39PxkO1ElBIkKfA5c+bAYrHA6/Xi8OHDAHA+ACWAlQAGf4xO09q8kRCrqHowwunz5uXk4by5\n50WsRx48fhA7W3Zi/7FhiT6VSYXewV4MOYfGNTcpLZbiusXXYdU1q8Je0CSVrdPpIBAIIJVKUVtb\ny0pdhcfjhRCaxqTBmo1r8Nm2z2CxW+i/Z/AykJuVi9LCUijLhpWDpldPx/zJ84dvVFEi3A2AaShu\nNptRVlaGpqYmCIVCUBRFR6Lk5kTg9/vp7cE/PB4vYH6R1KQI2bpcLjqqJf6gTqeTHqXq6OiASCQK\niGoFAgF8Ph9WvbQKr2x+JeFRaCRkC7Jx8YKL8eCND8at2zRVwFZtkcvlJr3eTL7PQqEQIpEISqUy\nYDux1yNRrd1uR39/PxwOB70oZGZgmIQ7UoOR0WhEbW30124yQd7Leeedh/PO++le/eyzz97E4XCE\nADwAEKmzN02mAEpLS1lpliF102hratOqpkXspu239OO/h/+LPR170NLdguO649D362EeMoeVOMvN\nzsV5c87DlXOuxJLFS0K2E3s3rVYLj8cDiUQyoj9qrCBpb6/XiyfffxIvf/Uyegw9YR/r9XkxYBvA\ngG0A7ap2bNmzJWC7kC+k/SyrJFWYPGkyZtfNxoKmBRBlj6zo4nQ6odVqodfraSH9pqYmmjwJgZKf\nYIx0UyWpZPJa5G+EbEnEkJubSy+yyM+RI0cgFovB4XDoFDKzDnbd/Otw889uhnZAixZtC9p17ejS\nd0HTq4HJHHsXcrRorGjEH6/8Y1TuJPFEm6oN3+77Ni7mAyczIo3FcDgcCAQCCAQC5Ofnh2wnZEsW\ngkNDQyEZGGZka7VaYbFYoNfrccYZZ7By7P39/bjqqqtw4sQJTJo0Ce+99x4KCwtDHjdp0iTk5uaC\nx+MhIyMDu3fvDvNqkaFUKmGz2VBWVobi4mJIpVIoFAo89dRTvwVgAPDhSM8/5bV5gWGCYaO+d/Dg\nQVRWVrIS4Y4Ffr8f+47tQ3NrM1q6W3DF2Vdg0dRF8Hq92LNnD+bNmwcgcCbWbDajtLQUUqk0rtJi\n73/7Ph55+xG0qFviqkpExn1K80uhKFWgTl6HKZVTkGnPxLTqafB6vZBKpSgvLwePx6OJDkBEAmUL\nwWRLURTdFW0ymTBt2rQAMoiUQiZRg8PhgNfrpVPIvEweOvQdaNW04pjuGE4Yhx1++q39sDvtMZ93\nUZYIl55+Kf6y7C+jdi1TFIXdu3ePKCfIBp777Dk8++mzUJvUAX9n23wAGE5bx/v9JBpGoxF2ux2T\nJk1i9XVJBoZ8T5ubm/HOO++gpaUFfD4fIpEIcrkc559/Pn7961/HtI8//vGPKCoqwqpVq/DII49g\nYGAAjz76aMjjJk2ahN27d4/LkNzr9dJ1597eXuh0OlxwwQW3AqgGsCpS8xGQJlMA7JFpa2srSktL\nUVxczMJRxQ6KorB9+3acdtpp0Gq1MBqNyM/Ph1QqRWFhYdwIpEPTgTWvrsFXzV/B7rLHZR/RIi87\nD/dcfg9WXrESQPwJNBz8fj+dDaAoClKpFGVlZTRxhvsJRqQUMpNsSQqZx+MhKysLDq8DrdpWtGha\ncFx/HD3GHhgGDTDbzHB6AjvKOeBgcuVk3Hv1vQGdrWN5b3v37sXs2bPHfZ6C0W3oxr0v34uvd38d\nlWA+E/wMPvJy8obNB34sIRAxC2W5MuxzTkYy1WiGhWBkMllC9nfRRRfhgw8+QGFhIdRqNdxud8wO\nMvX19fjuu+8gkUig0+lw9tlno60tVLGKDTKNgDHdMNJpXrAvdp9MuN1u6HQ6DA0NobW1FVKpFFVV\nVXHT6bU77Xjk7Ufw+pbXkyIuHwn52flYOn8pfn/571FeUk7XOBMJIvBBzM4bGhrG3NgWTQqZgCwU\nfD4f3XVcVliGOVVzAlLIpAamM+vQommByWLCbRffhtLC6OcCiVA8m3hty2t46oOncFwX0e1qzHB7\n3eg196LX3Iuj3Ufx5a4v6W0ccCDkC1EgKggQs8hFLqrrq1GUN/Gk8CLB4/FE3VQ5HpjNZhQXF4PL\n5Y47GjYYDJBIJAAAsVgMg8EQ9nEcDgeLFy8Gj8fDLbfcEnMkHCvSZIqJT6bMyMflckEikSArKwuz\nZs2K2z7f+fYdPPXBUzjUdSgldHGBYWm/s6adhTXXr0F1eTUsFgucTic6OzvhcDhozeCsrCxkZ2dD\nKBQiOzub1TEBr9cLvV4PrVYLPp8PmUwWU1MX8/HhFgHhUsjk72PtQs7Pz4eyVAmn0wlVlwpdHV10\nCpnZFEV+D/cewjXcxQLDgAH3/fM+fL7984QpE1Gg4HA74Oh3QNevw75j++ht979zP3hcHpbMX4Ln\nf/d80huJxotESwlG+71YvHgx9Hp9yN/Xrl0b8P+RMks//PADZDIZjEYjzjnnHDQ0NODMM8+M7uDH\ngTSZsgg+nw+z2ZyQfZHuVKINXFJSgtraWjpSIbOy8VA88fv9qCivwK8W/woHOw/imPYYtL1a9Fn6\n4HA54qIaMxJqZbW445I7cNP5NwVcbOEaKjweD11/dDgcIWMChEAIyY7FZJrZKWyz2WinILbEHcJh\nLGQ73i5kh8NBy2QGp5CZHZ2x3DwJPvnhEzz09kNoVbXGfjJYBpfDxVmnnYVHVjyCxorGZB8OK0gk\nmcYiJfjNN99E3FZeXg6dTkeneSPNr5IUdllZGS699FI0NzenyTTRmEiRqd1uh1arhcFgQG5uLmQy\nGZqamkLeQ2ZmJjweT1xu6FwuFwsnL8TCyeENyFVGFbYd2YbPt34Oi8+Cbn03DIMGWO3sdaDm5+Tj\nsjMuw+rrV6Mkv2TMtVAyAB9uJo+MrBCiJYsVJpEwSZbH49GNCnl5eWgxtOCZz57Bgc4D4HK5EGWJ\nAtx9pldPx9yGuaiR1bByDkZCNF3IJKqNlEIm5zU4hUzO0dDQEHbv3h2QQg4Ws2DeyAdtg/jzK39O\nKaF5ACjMLcR1P78Ol8++HDNOm9jKTsFIJJmaTCZW65YXX3wxNm7ciFWrVmHjxo245JJLQh4zNDQE\nv9+P3NxcDA0N4euvv8bq1atZO4axIE2mP4IN4fF4kanH46FThzweD1KpFPPmzRtRtDqeZDoaFGUK\nXFV2FRQCBRYuDCRct9uNnW07sbNlJw6fOIzj2uPQmDTot/XD6XKOGNXyuDwsaFqA+6+9H2dMPYP1\nZiIulxuSHmWCmJ0bjUZ0dXXB4/HA6rLi5W9fxvdt3wekJ/0+/6juPoWiQtowurGiEbPrZ2N+w/xR\nx33YeJ8EY00hM+dwCUkWFBRgaGgIbrcbU6ZMATD8+ZJRCjJGEa4L+ZfTfglliRLt2nZ0G7uh7dOO\nuws5FnDAwdSqqXjghgeweOZiWCwWaLXahO0/UUgkmbJtCr5q1SpceeWVePnll6FUKvHee+8BALRa\nLVasWIFNmzbBYDDg0ksvBTB8nV577bUBs6KJQJpMfwRbZDqS6k808Pv96O3thUajgdPpjNpknBiE\npxr4fD4WTV2ERVMXhWwbGhrCzgM78d3+76AeVENn1kHdq4af8uPGc2/EnUvvpG/+ie7IHRoaot2C\nioqKsN+4Hy9segEdmo6YXs/pdkLXr4OuX4e9HXsDtvG4PIiyRCjJL4G8RP5TB2rjXEyZNIWNtzMi\nRiNbn89HS066XC4olUqacDMyMpCRkTFqCjk/Nx9NsiZaBs/v9yMjIwNCoRAuvwtH1UfRpm3DMf0x\nqIwq6Af0YbuQY4WQL8Slp1+KtTetDRj/iUb9aCIhXiWfcDAajaxKCRYXF+Nf/wo1a5FKpdi0aRMA\noKqqCgcOHAh5TCKRJlMWkZGREZXAejAoioLZbA7oAK2urg6bkhwNyTAID4fRammkYUej0YDH46Gx\nshFnzj0THA4n4FwmY6SFyA5qtVpwuVy4uC489fVT+GbfN3B74pfO9/l9MA+ZYR4yo1Pbia0HtwZs\nF2QKaDu1GlkNHvjfB1AtYd9MOhhut5sWwMjNzUVlZWVIXXqkxigAYVPI5HP1+Xy0YlRxXnFIFzIR\nB9Bb9DiqPooOXQeO649D3aseFrIYQxmhoqwCK69YiRvPvTHs9pOVTBOJ+VMZygAAIABJREFUiShy\nzwbSZPojkum753A46DpoTk4OpFIpGhoaxrWSJGneZILYsAWno5li+jabDeXl5bSAAbNRJhkESlEU\nLBYLLTtYVFSEr1q+wsYtG6HtS430n8vjQq+lF7XyWvzmkt/ElUhJc5VarYbdbodUKsWsWbMipgzH\n0xjF1DMuKCgIiGqBn1LI+fn5qCipwNkNZ4dNIXcaOtGqbUWHrgMnDCeg7dOiRlqDR29+FPWK+hHf\n78lIpiQ9nygYjUbU1MS/LyDVkCbTH8HWl41EVKMRIXOEgsPhjGrxFi1SgUyJcwx5T8zmKeLQQm6a\nY5H2iyfcbjf0ej10Oh2ysrKgsWnw9KdPY8fRHQn1nB0NxbnFWDp/Ka474zr4vX5QZgp79+6la73M\nsZ/x1Mg8Hg90Oh20Wi1EIhEUCkWIAXwsGE9jFDOFHCzPSNSlSAq5UdYYkkL2WX3o6uoKGPkJtik7\nGcnU6/UmrF4KDDcgnX766QnbX6ogTaYsgzQhhatt+v1+9PX1QaPRwG63QywWY+rUqREbXsaDjIwM\nOJ3J9U0lzjEkCgWG6xzEoYWiKFoTOVlRKDk2h8MBiUSCGTNm4K1/v4WnP3gaxkFjwsd8woHH5eH0\nKadj7Y1rMbNuZsA24gpit9vppp/e3t6AiI1JtIRsBQJBCLGRMoNarYbNZhs1CmUb45mtBUBrzJKy\nSKQUssPhoGeQSY8DSSG7XC4IBAJYrVZkZWWxtrhNJhLZfASw34A0UZCWE/wRfr+flUju0KFDUCqV\n9AVNURSsVis0Gg36+vpoAeW8vLy4kkdfXx+MRiMaGxM/J0dSg4cPHwZFUZBIJJBKpcjKygq4CSaD\nQIGf0upGoxEFBQWjfh4WuwXbjmzDnvY9ONp9FF26Luj79Rgciq+FnrhIjBUXrMAfrvhDzDd1v98f\nMFdLfpxOJ20sLRQK4fF4YLPZkJ2dDYVCgZKSkrDno13Vjj+/8me4ve6fxn0a5yakZjsaRkohByNc\nCtnlckGlUoHD4YDL5cLpdMLr9YLL5YY4powkZJFqGBwchNFojFnOL1osWbIE77//PkpLo1fUSlGM\n6SaVJtMfwRaZtrW1obi4GCKRiG7WyM7OhlQqRUlJScIuPovFgu7ubkydOjUh+wNCHVp8Ph8UCgUK\nCwvp6IE5s5hIMFWi/H5/gPj9eHHo+CE0tzZj//H96FB3QG1So9ccm4VeBi8DZ512FtbeuBZTq+L7\n2ZnNZvT09MBisSAvLw9ZWVn0WAvTkzUrKwsf7PgAr37zKjR9mrCvRaT5CnN/GvdpqmjCrLpZWNC0\nIOkKQpHkGcnfgGFC7ejoCNCwDk4hM3WQg7uQg+drg1PIyYLJZILNZkNlZWVC9nfGGWdg7969J1O6\nPE2m0YBYDY0HxEzWZrOBz+dDIpFALBYnNMVC4HA40NLSgpkzZ47+4HGAWLppNBr4fD5IpVKIxWJw\nuVyoVCqoVCpa6ICo7iRyVU9Mz0l3tFQqRU5OTtz3S9Bv6cf2lu3Y07YHLT0t6NJ3hbXQk5XIcOtF\nt+J3//O7uJ4XZq1eKBRCJpOhqKgo7E2/S9eFP734J2zZsyVmoXkC5rgPcfc5rfo0zG2YiyZlbO4u\nbIEsKux2OyQSCcrLy+nzEak7P1wKOdh0IDiFHEy2iUohkwWkXC6P+74oisKiRYuwf//+lFhIsIQ0\nmUaDWMmUoij09fVBq9XCZrPRpFFfP3LXYLwRbMPGJpgdr/39/SgrK4NUKkV2dnZIGtfv98PtdtM1\nPWJAzEwzMuX7yL/judEQwtDpdMjMzIRMJqNFt1MJfr8fB48fRLYgG3WK+KbgrFYr1Go1BgcHIRaL\nIZVKIwp6bNy8EU+8/wQrQvNjhSBTgIKcYcH5SkklmiqaML12Ok6ffDoKRAWs78/v99MjWQKBAAqF\nAgUFBREJgI0UcjDZhkshM0242fq+dnd3QygUJmRcxePx4JxzzsGePXvivq8EIu0aEw2YKZ2xgDiC\nmEwmFBUVoaKiAvn5+ejr60NfX1+cj3Z08Hg8VgzPmXC5XNBqtdDpdHTquqGhgU6dhWsmYmq5BoM0\nzxCCJc0zdrsdPp8vQJGIKeMnEAhCbnrh9HGnTZuWFAWosYLL5WJ6zfS4vT6Zk9VoNMjMzIRcLkdD\nQ0NYwjD0G3Dfy/fh022fJkxongmXxwXDoAGGQQMOHD+AT/77CYDh79L5c8/HK79/hRVlKKfTCbVa\nDZPJhLKyMkydOnVMQijRmsQzyZZ0IZOMCLPUEZxC7u/vh8PhgMvlolPI4UwHokkhezyehHkssy0l\nOJGQJtMoQMhEr9dDKBRCKpWGOIKkgg0bwF5N0u/3w2QyQaPRwO12QyKRYNasWbTA+Xi6cTkcDj3E\nH06U3ufzBUSzFouFvtEAoG8qbrcbNpsNubm5kMvlEdOWpwpsNhvUajUGBgZGJYyPfvgID735EFp6\nWhJ8lCNDkCnAuTPOxb1X3AtJqQTwxz62QlEUBgYGoFKp4Ha7IZfLUVVVxVrkNx55RmD4nhGuC5nD\n4cDj8dB1bKfTCbPZHJJCDm6KCs7sJLKb12AwnJKCDUCaTAMQLjJlquD4fD6aTPh8ftjXSBUyHS9I\nWrCvrw8lJSWoqalBbm4uPQ+aiJlQHo8HkUgEkSgwIiFSiyqVCoODg8jLy0NpaSlcLheOHTtGRwPM\naJZptXYyglm75vF4kMvlqKurC0sYRGj+/a3vw+awJeFoI6NSXIk/XvVHXHnmlfRCymw2Q6/Xw+Fw\nhDjXMH+CMxZerzdgVraysjImNbHxIlYhCzKvTtK+wMgpZJvNBpPJBIfDQWd2hEIhPebj8XhYTyEH\ng20pwYmENJkyQL6gZP5Qq9XCYrGgrKwMjY2NY2pcSSUyHauABAExFtdqtRAIBJDJZHQ7vd/vp+UJ\nkzXSEqyPW19fH0K0BMzZS4fDESK4Hpw6JrOXEy2iHRoaoseuSktLMXny5FHnlkVCEa5ffD3qZHU4\nfOIwOrWd0PRqhi303I6E+9Nm8DLw8xk/x+O/fjzAUUcoFKKwsDDk8SRjQT7f4IwFEQtxu90oLi5G\nbW0t8vLyUnZmNBYhC/L3cClk5n3M7Xbj4MGD4PF4dAqZ9CuwkUIOhslkOiVnTIE0mQbAbreju7sb\nJpMpQKEnmi8WESNIBWRkZMDr9UaMooHhC44I6jOFCzIzMwNSUcki0GB9XKlUiurq6lEXCJmZmcjP\nzw+bPiazl+RmbDKZYLfbQ1JnTLIllmupADLmo9FowOFwIJPJUFNTM+ZFU0ZGBuY1zsO8xvDNaSqT\nCtuPbMf+zv1oVbWi29ANwwC7FnoAUJJfgl9f8Gv86eo/RUV04TIW5Hvc09MDiqIgFoshEAjomeLO\nzs6QOjzzRygUpuRCajzyjBRFwWazwe/306lXEtVGSiETLWQgNIXM9LCNBKPRiOrq5M8cJwNpMmXA\n6XQiLy8P1dXVKXPjHA+IpGA4Mh0aGqIbMYqKijBp0iTk5eWlhLQf6RYmxudlZWVjirjGCi6Xi5yc\nnLCZBuJsMlKKMVL6ON7nyW63Q6PRoLe3FyUlJWhsbKTdWdiEolQBxdkKXHn2lSHb3G43mtuasat9\nF450HUGnbjiq7beObqEHDC/KZtbOxP+78f/hzGnjN24m4vs6nQ6FhYVoaGgYMYPErMOThRQhEwAB\nfqxsSTPGE+EWUD6fD3q9Hmq1GiKRCNOmTaMJMFIKmQQA0aaQCcGSOq5erw+xXYwV77//Ph544AG0\ntLSgubkZs2fPDvu4r776CnfddRd8Ph9WrFiBVatWsbL/aJEejWHA5/Ox4rSyY8cOzJ49O+lppSNH\njkAmk6GgYHi0gFlDysjIgEwmo5VumG3+yYpCiR4s0ccdaQYyWSDdx8zINljkIHjMZzxRD6kPq9Vq\nUBQFmUyGsrKylBvzIejSdWFHyw7s79yPNlUbug3dMA4a4ff7cdkZl2HtTWtZGXWxWCxQqVSwWq2Q\nyWSQSCTjvt6CpRmZP9FKMyYDLpcLarWarlsqFIoRs1KjpZCDwbwvkJE3MurT3NyMV199FZ2dnXSn\nf2VlJc4//3xcfvnlMb2flpYWcLlc3HLLLXjiiSfCkqnP50NdXR22bNkCuVyOOXPm4O2330ZTE6uz\ny+k502jBlgrSvn37UF9fH5eoIRq0tbWhsLAQPB4vYGREIpFAIBCkhLRfOH1csVg84k0gVeH3++F0\nOumbMfk3OOoJJttwWRCHwwGNRkNnDuRyeULFJlIRfr8fBoMBarUafD6fVtdK1Pd2LNKM4Ua54h3V\nWq1W9PT0wGazQaFQ0KIp40Uss7Xnn38+/u///g8ZGRno6upCRkYGpk2bNq7jOPvssyOS6fbt2/HA\nAw9g8+bNAICHH34YAHDvvfeOa59BSM+ZRgu2Lko+n590xxa73Q6z2QydToeSkpIQhxafz5e0NC4w\nnFLXaDQwGo3Iz8+n9YxTKQqNFlwul1Z5CgZpBiEka7VaYTQaYbfbAzpUSZ2L1ELnzJmT9AxHssH8\nrpSWlmLKlClxMYcYDaOVB4KzFqTpLViaMThrEQvxMWvEXC4XSqWS9YXFWBujfD4ftm3bhvXr19Ne\nt5Gax9iGRqOBQqGg/y+Xy7Fz58647zccTu2rNE7g8/l0M0si4fV66SF9kpIqLS1FRUVF0h1agMCZ\nVaKPO3fu3JOiPj0aOBwO7WpC0u4EREiA6DgXFxfD5/PR5wpASGpxIgmtxwIiwqFSqeByuSCTyVL6\nuzLazDTJWhCyJZ21DocjoLOW1Ggj1eJ9Ph+0Wi00Gg3y8/NHrRHHC1wuFx6PB5988gmef/55VFZW\n4sEHH8TMmTOjurcsXrwYer0+5O9r167FJZdcwuYhxx1pMmWAzcg0UeMxTOUfs9mM8vJyTJkyBUKh\nEL29vWhpaYHZbKYjpkQ2zBAE6+PW19ef8ilLIkNJxDBkMhkWLFgQsWPT5XLRaWMS8TDTi+GaoiZi\nROvz+aDT6aDRaJCTkwOlUhmWnCYaRspaAIG1eIfDgYGBATqqBX7KdjmdThQXF6OxsREikSgpiwur\n1YrXXnsNr7/+On7xi1/gnXfegVKpjOm1vvnmm3Edi0wmg0qlov+vVqshk8nG9ZqxYuJdbXFGNJKC\nkcDn8+FwxFeSjaS+SFpFJpOhqakpII1bWFiI+fPnB6SemBdp8LwludjZcLsI1scNpxZ1KoKpolVQ\nUICqqqpRpd6Y4xzBCOdnGtx1GW6mNlUcTQjsdjtUKhX6+/shFosxY8aMCVk3jxWZmZnIzMwMEZWw\nWCw4ceIE7HY7iouL6c7Z7u5u2rUmuMM8kvH5eKHT6fDcc89h8+bNuO6667B169aEpHJHwpw5c9DR\n0YGuri7IZDK88847eOutt5JyLOkGpCB4PJ6I3WxjRV9fH0wmExoaGlg6qmEEO7TIZDKUl5fTs63R\nNhMFz1va7XbY7XY6qg6OdEgKKtJrkyhZq9XCarWivLx8REH1UwVEzk6tVsPpdNLOOomIHIMFDsjv\n5DMmdbzgm3EiFj0kOlepVPD7/bSP6qm+4KIoCiaTCT09PcjMzERFRcWI8+5erzdshzlzXjQc2Y4l\nqqUoCkeOHMG6devQ3t6OO+64A9dcc01CFjoff/wx7rzzTphMJhQUFGD69OnYvHkztFotVqxYgU2b\nNgEANm3ahN/97nfw+XxYvnw57r//frYPJd3NGwvYIFOr1Yqurq5xd7EBkR1acnJy6HlQgH2fUGZq\nkUm2pDOVKWyQmZkJq9WKvr4+OkqOVuziZASZgdTr9cjLy4NMJkuplCURWQ++CZM6Xry6Uz0eDz0b\nmp+fD4VCEVHJ6lSC1+uFVquFVqtFYWEhKioqxt1oReamw437hJNm9Pl88Hg8UCgU+P777/Hss8+C\nw+Fg5cqV+MUvfnGqLnTSZBoLvF7vuN1WXC4XDh06FHHIeKyvwXRoITZiTFUiIDnNROQmrNfrodfr\nQ4QhmDU8Zp02VZtH2ASJztVqNex2Ox2FpurQ/0gInrkkvzOtw6KRZLRarVCpVLBYLJBKpZBIJBPy\nvLANh8OBnp4e9Pf3QyqVQiqVJuy8eL3egHGuvXv34qmnnoJer4fT6URTUxOmTZuGRYsW4eqrr07I\nMaUg0qMxyUKsDUjBDi1SqRSzZ88Gj8dLiW5cIFCFp6ioCFOmTAmo+QXX8MKNgDAJ9mQRoCeCE0RU\nXaFQID8/f0JH5yNJMvp8voCbsNFoDNDHJZmLrKwsuN1u9Pf3g8/no6KiAo2NjRP6vLCFwcFB9PT0\nwOVyoaKiIik9BRkZGRCJRPB6vXjzzTfxzjvv4IILLsBvf/tbSCQSGAwGHD9+fNzZulMB6cg0CGyp\nIG3btm3MslrBDi1SqTTAoQVgP40bDUitVqvVgsPhQCqVxqzC4/V6Q2q0zGgnOJolaeRUvPlSFAWz\n2Qy1Wg2bzZaOtn4ERVF0FNrX10fL8ZESChkDCa7HZ2RkpOTnzCaIrrJKpYJAIEh6t7JKpcKGDRvw\n3Xff4cYbb8RNN92UFGedFEc6zRsL2FJB2rZtGxYsWBDx5hDs0CKXy1FcXAwAMTUTsQ1yQ9RoNLQ+\nrlQqjeuwfHCzDCFbZudx8A04GU4vTFnG7OzsmAwRTkaQxYVKpYLD4YBMJoNYLA5J748myRhppnYi\nn1+PxwONRkOLqCgUijGZkscDFEVh//79eOaZZ6BWq3HnnXfi8ssvP+UXgSMgTaaxgC0ybW5upt1X\nmK9NZguJdB6JZFJB2g9IXX1cppQbk2yZRuHBUS3bogYWiwVqtRoWiwVisRhSqfSUGt+IBCKsrtFo\nkJWVNa4Ud7BkXzhJxnAztalaj7fb7ejp6cHg4CBrGsKxwu/34+uvv8b69euRk5ODlStX4swzzzxV\nm4qiQZpMYwGRfRsv9u/fj9raWuTk5NCiBURnVSaTITc3N8TijPlvIjHR9XHDdaWSzmOKogJuwEyy\nHctNhMzLarVaCIXClFlcpAIcDgfUajV6e3tRVlYGuVwe1zEocm2Ga4oK7kxNZpmAjEL19PTA5/Oh\noqKCNpRIBpxOJ95991289NJLmDlzJu6+++503To6pMk0FrBFpocPH0ZmZiYGBwdph5bS0lJ6H6kQ\nhTqdTmi1WhgMBuTn50Mmk014fdxgBN+ASerY6XTC5/NFFJ8nRDE4OEhHoaf6vCzw08JLpVLB6/VC\nLpenjIsNmbcMJttgbVxmZMtm9sLv99PWZ9nZ2VAqlaMKcsQTfX19eOmll/Dhhx/i0ksvxW9+8xva\n1zSNqJAm01jhdrtjUkEiNxq1Wo3+/n4UFxejtrY2rEML899EIpw+bnl5ecqmyeIN0nlst9sxNDSE\ngYEBWK1WWks3Ly8vJKo9FWtLzBnIvLw8KBSKpBJFtGBq4zLJNpwkI5Nsx5KSdbvdUKvVMBgMKC0t\nhUKhSOrCq7OzExs2bMCOHTtw880348Ybb0y6g9UER5pMY0W0ZErGRYgDikwmg8VigdPphEwmo2W9\nkhmFBuvjEuGHNIbPjVqtxsDAAMrKyiCTySAUCkMiHUK6zM7j4NRxqsn0jRc2mw0qlQpmsxkSiSSh\nM5CJQvA4F5NsiSRjuDqt2+2m52blcjkkEknSFqUURaG5uRnPPvssTCYTfve732Hp0qWn7CKZZaTJ\nNFaMRQUp2KGFmDYTbV+Hw4Hu7m5a1oupg8tcAcfz5svUx2WagadCSi7ZYEoz8ng8upt6rOeGdB4H\nky1TipFNk/BEghiSq1QqcDgcWuZvIhx7PMDsMrfb7RgcHMTg4CD8fj/4fD5EIlHSJBl9Ph+++OIL\nbNiwAWVlZbjnnnuwcOHCU/azihPSZBorIqkgMdVtLBYLrT2blZU16kzoSDq4wUQ7niiHjCdoNBpa\nH1cikSStDT/VMDQ0BI1Gg76+PpSWlkImk7E+7hOcUgzuSGVqpZLPOxXs1NxuN22eUFRUBIVCkU4P\n/gimm01ubi4qKiogEolGbX6LlySj3W7Hm2++iVdffRULFizA3XffjdraWpbebXQwGAx46KGHIBAI\ncPvtt2PSpElJOY44Ik2msSKYTB0OB62xmpubG2K0TRBrGpcNonW5XNDpdNDr9RCJRJBKpaybBU9U\nkEF5kkWQy+VJi9CDtVKZDVGk8zhcVBvPdB2ZDR0aGqLHN9LpwWG4XC6oVCqYTCaUl5dDLpePucs9\nnGE4+Zfp6BNMtiPNThuNRvzjH//A559/jiuvvBK33XYbSkpK2HzLUWPfvn3YvXs3HnvsMWRkZOCj\njz5CY2NjUo+JZaTJNFb4fD64XC5WHVpiBZNog9OJHA4HXC6XrvGWlpZCLpcjOzs7TaIIlD4sKSmB\nTCZL6UiLWbsLrt8xlYOCSwWxzC36/X4YDAao1WoIBAIoFIq08AQDVqsVPT09GBoaglwuh1gsZn3x\nxSwVMD9rpiSjTqfDvn37UFhYiO3bt+P48eO4/fbbcf3116dUtqm3txePP/44+vr68Nxzz9GR9w8/\n/IApU6agoKAgyUc4LqTJNFYYjUYcOnQoYQ4t0cJut0Or1cJoNCI3Nxf5+fl0nXakiDaVpfnYAqn3\nqdVqUBRF17KTnUJlAyTKCY5qg5tkRjKBdzqdUKvVMJlM9OIrlW7KyQRFUejt7UVPTw94PB4qKiqS\nlt0h1/OmTZvwxhtvYGBggG56crlcWLRoEdatW5fw4wp3nBwOB99++y02bNiAJUuWYNmyZQAAjUaD\nm2++GUeOHMHs2bPx4osvoqioKLkHHBvSZBorvF4vPB4PHYGmwkwoUx8XAD23GikdFxzRkhvwyUq0\nDocjQBhDLpefUt3KPp8vrOYxmbHk8XhwuVygKApisZjuWJ6onzeb8Pl80Gq10Gg0KCgogEKhSOp3\nx+Px4NNPP8Vzzz2HSZMmYeXKlZg1a1bIoiiVFkFr167FgQMH8PTTT0Mmk9Fjgk6nE3/729/w8ccf\n45tvvpmo9dS0a0yseP7557Fp0yZUV1ejqqoKtbW1qKmpgUwmS3gtiXiZEn3cpqamMTXMcLlc5OTk\nhL0pBBOtTqebkERLIgm1Wk2n4isrK0/Jeh+Px0Nubm7A7CfRENZoNMjMzERZWRmA4cxGa2trgBRj\nuIaoVPu82YbT6YRKpUJvby8kEglmzZqV1LEfq9WK1157Da+//jp+/vOf46233kJlZWXYx6YCkZKo\n9PDhw2htbcXUqVMhk8kADAceRGv8v//9L2666SZ628mKdGQaBj6fDz09Pejo6EB7ezs6Ojpw7Nix\ngAaWmpoaVFdXo6amBjU1NazWVIg+rl6vh1AohFQqRXFxcUJubuEi2mCx+WQTLVO5qbCwEHK5PG0u\nzcDQ0BAtHEJmQyM1zZBu1HANUUCgCTzz34mcNjebzejp6YHD4YBCoaB7IZIFnU6H5557Dps3b8av\nfvUr3HLLLSgsLEza8USLf/zjH9i0aRPuu+8+zJs3jy6Hcblc7Ny5E1dddRU++eQTTJ8+PclHGjPS\naV62QVEUvF4vTpw4EUK0er0eGRkZqKioQHV1Nf1TW1uL0tLSUS9Wouep0Whgt9shFoshkUhSSh83\nmURLURRtEuB2u+mGsFMxCg0HEqWrVCoAgFwuR2lp6bjOPek8Dq7TOhyOgLGP4IaoVPxMKIqirc8y\nMzNp67NkRd8UReHo0aNYt24d2tracMcdd+Caa65Jqet9JFitVrz44ouYNm0avv76a3A4HDz66KP0\ndp/PBx6Ph+uvvx5cLhd///vfJ3LZJU2miQTpxDx+/Dg6OjrQ1taGY8eOoaOjA729veDz+VAqlTTJ\nkojWbDZjx44dqKqqmtD6uPEiWpfLRY8lFRQUQC6XTygZu3iDae1VWFiYsHofc+wjuPuYaQIfriEq\nkfB6vQHnp6KiIq42gqPB7/dj69atdPPQypUrsXjx4gkX6dvtdtx7771Yv349KIrC//7v/+KVV14J\neExfXx+mT5+O559/HhdeeGGSjpQVpMk0VUBSaZ2dnejo6MDRo0fx73//G/v27UN2djbq6uogFosx\nadKkAKJN5sqZTURLtFlZWbT8odPphFQqhVgsTpp1VSrCYrFApVLBarUm3dorHMZqAh+seczW993h\ncKCnpwf9/f2QSqWQyWRJPT9utxsffPABXnjhBTQ0NGDlypWYNm3aSXF9b9y4Effffz/OOeccvPzy\nyxgcHERRURHWr1+Pd999F++++y6kUmmyD3M8SJNpquJf//oXNm/ejOXLl6O+vh5DQ0M4duwYnTYm\nqWOr1Yrs7GxUVVUF1Girq6shEolOiguRSbRWqxW9vb2w2Wzgcrm0VFuya7SpAiI+oVKpwOfzoVAo\nJqQwRzgTeGYDXLiGqLGYwBP1r+7ubng8HigUClriM1kwm8145ZVX8Pbbb+P888/Hb3/7W8jl8qQd\nTzzR29uLgoIC1NTUQKFQoLW1FWvXrsWvf/3rZB/aeJEm04kOiqJgtVrp+mx7ezuOHTuGzs5ODA0N\nITc3N6A+S4g2KytrwtxgmRKNdrudjkKJYXqqN0MlAk6nkzZSKCkpgVwuT2qqMp4gUozBqeORTOD5\nfD49H5qVlYWKigrk5+cn9X2oVCr8/e9/x7///W8sW7YMK1asQF5eXlKPKVGw2WxYt24dNm7ciJ6e\nHqxZswarVq1K9mGNB2kyPZlBSIiQLIlmOzs7YbfbUVxcHEC0ZMxnLCv8RIB0LGu1WohEIsjl8qjS\n2n6/PySNSIg2nKPLRCNa8vmqVCo4nU7I5fJTvuEqWAfXZrOhv78fDocDGRkZyMnJCSs6n6hzRlEU\n9u/fj3Xr1qGnpwd33nknrrjiipPOZScafPjhh2hvb8e9996b7EMZD9JkeqqCdHa2tbXRaeOOjg6c\nOHECLpcLpaWlIdHspEmT4k42JA2nVqths9kglUohkUhYv9lMZKJlCqrn5ORAoVAkPcpKNQwNDUGl\nUmFwcBAymQxSqZSW1Qyu0TKlGMM1RLFRR/X7/diyZQueffZZZGeOlfPBAAAUK0lEQVRn4/e//z3O\nPPPMpDUVnQLC84lGmkzTCAWpu7W2tgbUZ7u7u+H1eiEWi1FVVRVAtEqlEjweL2ayIeIBWq0W2dnZ\ntFFAsszRg1OIwUQbz8aYSLDb7VCr1ejr60N5eTlkMllSDaZTDWR0rLu7G36/HxUVFVHZwkXSPCYj\nHJE+95HgdDrx3nvv4cUXX8T06dOxcuVKNDY2Jn1RdgoIzycaaTJNIzr4/X5otdqQ1HFPTw8oioJU\nKg0Z7RlJFcpisdB2dWKxeETxgFRAuMaYcEQb7EcbK8jsrEqlgt/vp2dDJ9qYRDzh9/uh1+uhVquR\nnZ0NpVLJ+mhUOBN4phQj+ax1Oh3sdjtkMhm++OILfPjhh7jkkktw5513QiwWs3pM40Uk4XlgeOGW\nyoYPKYg0mabBHsaqCiWXy3HixAkYDAbcfffdE7bjNBjBBtHk91iI1uPxQKvVQqfTIT8/HwqFIq3g\nFAS32w21Wg2DwYDS0lIoFIqkROo+n49uiPrss8/w/vvv09FxaWkpKisrcdFFF+HGG29M+LGFQ7Dw\n/IUXXojly5cDAFpaWvD000/ju+++g1KpxBNPPIHTTjstyUc8IZAm0zTiD4qi4PP5sGPHDjz88MPY\nv38/6uvrwefzodPpwqpC1dTUnDROLsDYiZbD4cBiscDhcNCzoadyc0o42Gw29PT0BMzPJrPpiqIo\n7Nq1C+vWrYPJZMJdd92FpUuXIiMjA16vFz09PXC73WhoaEjaMYYDEZ5/8sknoVAo8MMPP+CBBx5A\nbm4unnzySTz11FMwmUx49913k32oEwFpMk0jcdDr9di/fz9++ctf0iQZrArFnKMdSRUqUTrEiQCJ\nQjUaDSiKQlZWFn1egiPasdbqTjaQdHdPTw8AQKlUoqioKKnfAZ/Ph02bNmHDhg0oKSnBPffcg9NP\nPz2lv5dM4flHH30UtbW1WL16Nex2O1atWgWTyYQXXngBubm5MJlMOPPMM/HSSy/h9NNPT/ahpzrS\nrjFpJA5isRjnnXdewN84HA74fD4aGhpCVu7BqlDt7e14++230dHRgYGBAQgEAlRWVoYYCkwUVSiX\nywWNRgODwYDi4mJMnz49pE4VHNEODAzQtbpTgWhJ57JarUZeXh7q6uqSnu622+1466238Morr2D+\n/Pl46aWXUFtbOyG+c+QY//vf/8JisWDx4sUAgO+++w4qlQr/8z//Q9ebs7Ky0NPTM9GViVIKaTJN\nIykgjR1TpkzBlClTArZRFBWiCvWf//wn5VWhyOiPSqWC3W6HXC7H3LlzI6YpeTweRCJRWAI5mYnW\n5XJBpVLBZDKhvLwcM2fOTHpjmtFoxAsvvIDPPvsMV1xxBb7++muUlpYm9ZiiARGenzp1Kjo7O9HQ\n0ICFCxcCAA4dOoScnJyACPSNN97AvHnz0o1ILCJNpmmkHDgcDkQiEaZPnx5i2xROFWrLli1JVYXy\n+XwwGAxQq9UQCoW0As949ncyEq3VakV3dze90Jg3b15S6+YURaG9vR0bNmzA3r17ceutt2LXrl0T\nUl2Kx+Ohu7sbf/jDH2jheQKr1YqMjIwAb9TPP/8cZ5xxxoR8r6mKdM00AfD7/SdNs00qYzRVqKKi\nIppc2VCFcjgcUKvV6O3tRVlZGeRyedJnQ4OJljnmkQyiJQIiPT094PF4qKioSHp3t9/vx7Zt27Bu\n3ToMDQ3h7rvvxoUXXnjSqEsR4flzzz0XL730Eq699lrw+Xxs3Pj/t3fvQVGWfx/H3xeIqaNLnJRT\nKIiakpKAYzYWPB7yN42KTD6ZBjkKiGnyQ8PRptQoO6AOQyCKh9IsNRXHUBwrx9CU0OCJBEctUTmF\nmHgGRA57PX/obuKhENCbXa7XX3jv/cd3Gdbv3tfhc30JwJ49e4iOjmbFihX4+/trXK1JUAuQtJSd\nnY2FhQX9+vWjQ4cOWpfT5jU2FcrDw4NevXo9MBVKSsmlS5coLi6mrq4OV1dXk1mZ/DgbrSGo488/\n/+TJJ598bEfD/VtNO3fuJCkpCTc3N6Kjo/Hz8zOJ+dCmuHDhAg4ODqSnp/Puu+8SExNj/PIQEhLC\nBx98oHWJpkI1U60EBQWRn5/PE088Ydw0PWTIEBUL10oZUqEMjdZwoMCdqVCurq5UVFRw7Ngx4uLi\neOaZZzRLcXoU7tdoq6qqjEem3Z0O9KBGW11dTXFxMeXl5Tg5OeHi4qL5EHNFRQUbNmzgq6++IiAg\ngKioqAZDnuauvr6eZcuWsXLlSvr06cOIESOYO3eu1mWZEtVMtbB8+XLWrl1LZmYmQghiYmLYu3cv\nYWFhvPrqq9ja2mpdovIQ6urqmDZtGj/99BMDBw7EycmJwsLCJqdCmaLGNFoLCwuuX79ujPpzcnLS\n/Gn93LlzJCcn89133zFp0iQiIiLa/Ofv8uXL2NjYAH9vpVH+lWqmWvj4448pKSlhxYoVxmufffYZ\nmzdvJjo6mvHjx6s/YhNz+PBhBg0adE+DbEwq1J1N1tPTE0dHR82bTEvR6/WcP3+ewsJCLCws6NKl\nC1LKJj3RthQpJcePHycxMZETJ04wc+ZMJk6cqPlcdnl5OTdv3sTFxUXTOpQmUc1UC9u2bWP+/Pns\n3LkTLy8v4/WYmBhWr15Nbm4udnZ2GlaoPGqGVKiCgoJ7FkOVlZWZfCqUIYiitLQUW1tb3Nzc7rsq\ntKWGjhtDr9dz4MABEhISkFLy9ttvM3LkyFbx+4yPj2ffvn1kZWXh7OzMl19+Sf/+/bUuS2k81Uwf\nl1WrVnHhwgX8/Pzo1KkTO3bsoL6+nsjISDw9PY33DRkyhKlTpxIeHq5htYqWHpQKlZ+fz4ULF1p1\nKtSNGzcoKiri8uXLODs74+zs3OQjzFqq0dbU1LB9+3aSk5N5+umnmTNnDs8++6zmvyuD1NRUQkND\n+fTTT3njjTdYtGgR165dIz4+HisrK27evKn5U7Pyr1QzfRwCAwMpLi6mX79+nD17Fg8PD2MggU6n\nY+rUqcbjj4KCghg/fjyvv/66xlUrrdH9UqHy8/M1TYUybDcqKiqitrYWNzc3HBwcHmmz+rdGu2nT\nJoQQVFZWkpmZycsvv8y8efNwdXV9ZDU1xbVr1wgICCAwMJBFixYB8O233zJ79mzOnDnDxYsXCQ8P\nR6fTMW3aNBXr13qpOMFHLSMjg/z8fHJzc7G0tCQ7O5u0tDQyMzOxtramffv2REREMHr0aKqrq9m/\nfz+xsbFal91kNTU1mifVmLOWTIUyNNumpkIZ5kOLi4vp2LEj7u7u6HS6lnqr/+ifAisKCwsBOHbs\nGPb29gwdOpS8vDzGjBnD/PnzmTBhwmOpsTEOHDhAWVlZg5Wz1dXV+Pr6UlBQQE1NDePGjWPNmjUE\nBQWRlZVF9+7dNaxYaQ7VTJtBp9NhbW1NeXk5Dg4O+Pn5YWNjg5WVFb/99hsDBw6kb9++pKam0rVr\nV9LT0+ndu7fWZTfJm2++iZeXF6GhoSo1RQMPkwp16tQpYypURUUFOp2u0alQtbW1lJSUUFZWhr29\nPQMGDNB8n7SUkqNHj5KQkEBhYSGzZs0iKSnpnmHfhxxle+S2bNnCCy+8YIzsq66upqioyLg/2crK\nij59+rB9+3YmT55M165dNa5YaQ7VTJvB1taWgoICNm/eTFRUFAA9e/Zk9OjR5ObmIoRgxowZhIeH\nY2lp2SoWQzRFZGQkGzZswNbWlo4dOzJp0iTVUFsRIQQ6nQ5fX198fX0bvHZ3KtTvv//O7t27OXPm\nDFVVVdjY2BiHio8fP46npyfTp09n0KBBTZ4PbSl6vZ69e/eSmJhIx44diY6Oxt/f/4Gfo9YyT2pw\n6NAhEhMTjf8+efIkWVlZ+Pr6Gr8InD59ml9//ZV58+apz5SJU820GVxcXFi5ciUhISHY2dkREhKC\nlBJvb2/c3d1JSUlh8uTJmm9ab46SkhIKCwvZt28fJ0+eZMGCBej1eoKDg9WH3wQIIbCxsWHw4MEM\nHjy4wWtSSg4ePMg777zD1atX8fHxoaysjClTptyTCmWYn71fKlRLq66uZuvWraxZswZvb28SExPp\n169fq2uW/6SiooJBgwZx5swZ47XU1FSqqqoIDg42Xlu+fDm+vr4NVv4rpkk102YaO3YssbGxzJ49\nm8rKSqZPnw5Aly5dcHR0bHVDTw/L1dWVuLg4rK2tee6556ivr+f9998HYNKkSZpHxClNJ4TAzc2N\nlStXMmDAgAav3Z0K9csvv7Bp06YGqVAeHh4Nho27d++OpaVlk5vepUuX+Pzzz9m2bRuBgYGkpaXh\n5OTUEm/1sevcuTOjRo0iLi6Obt26kZmZSXp6Ou+9954xfUlKSWpqKh9++KFKRzMDqpk2kxCCadOm\nYW1tTXh4ONu3b6dTp04cOHCA9PR0k03CuXO7T58+fbC3twcgNDQUwNhQw8PDWb9+PYMHDzauWlZM\nR48ePe573cLCAkdHRxwdHe8JQ9fr9ZSWlhqHjg8ePMi6desoKipCr9fj4uJyz/ysq6vrAz8LZ8+e\nJSkpiYyMDMLCwjhy5IhZfEkLCwtDr9ezdOlSXnzxRRISEggICDC+vm7dOqytrRk6dKhJPXUr96e2\nxrSgP/74g8OHD1NTU4O/vz+9evXSuqQmMWz38fLyIj8/H1dXV0JCQhg7dqzxnrVr1xIbG0vfvn1J\nS0sjLy9PDVUpjU6F6tmzJ3q9nv379/PXX38RFRVFUFCQ5vO0j0pdXZ3xvQUHBxMeHs6iRYsYN26c\ncb2F0mqprTGPW+/evU12ta7B3dt9cnJySElJYcmSJdTX1xMUFATc+ta9c+dOMjIyyMnJUY1UAW5t\na3F3d8fd3Z2XXnrJeP3OVChDo922bRuLFy/G39/f7J/M2rVrh5QSvV6Pu7s7r732GufPn8fd3Z3r\n16/TpUsXrUtUmkk9mSoN5OXlERERwY4dO3BwcMDCwoKCggLWr19PdnY2MTEx+Pr6snr1aqZPn05O\nTg7e3t5al60oJufHH39k5syZeHl5kZKSonU5yoM16pueae7VUB6ZO7f7GLYg9OjRg/Hjx9OhQwdy\nc3MBGDhwIEePHjWLRpqUlMTq1av54osvGlw39cVjSus2bNgwTpw4wcaNG7UuRWkBloaFJI30UDcr\npken0+Hp6UlkZCSurq54e3sjpaRbt27k5OSQnp7OhAkTeOqpp+jWrZvW5TbbmDFj2LdvH5aWliQm\nJpKVlUWPHj1wdnY2+6HHtqi8vJzLly8/tjSnxjDXeWIzEtOYm9STqXKPO7f7JCcnG5tK586dcXR0\nNJsmk52dTWlpKbm5uaxatYr8/HwqKytZtmwZGRkZWpentLD4+HimTJmCr68vPj4+5OXlaV2SYkZU\nM1XuYdjuk5CQYDzKKjAwkKVLl/LWW2+Z7Hafu1VUVFBWVkZlZSUA1tbWbNy4kZqaGuLj47lx4wag\nhnvNQWpqKosXLyYwMJCioiJGjRpFcnIydXV1WpemmAm1AEn5R+ay3ed+9Ho9I0aMwN/fn4ULFxqf\nuK9evUr//v0JCwtj4cKFGlepNNf9Tm/ZsWMHc+bM4ezZs1RWVnLw4EF2795NUFAQw4YN07hipZVp\n1FCcmjNV/pGdnR3e3t74+PiYxaHmGzZsQKfTYWNjQ11dHVVVVRw+fJjq6mq8vb0RQhiD3fPz8xvs\nrVVM0w8//MA333zDli1bjNGeOTk51NbW4uDgwOLFi1m/fj3u7u589NFHXLp0ieHDh2tctdKKqDlT\nRblTcHAws2bN4pNPPuH06dNYWVkxceJEPDw8SEtLIy4uznhvaWkpN2/eRK/Xa1ix0hLuPr3lxo0b\nlJaWcuXKFfbs2cO5c+fYtGkTiYmJbNmyhSNHjlBSUqJx1YqpUc1UaRNSUlIoKytjwYIF1NbWEhsb\ny6lTp7Czs2P+/Pn4+fnx/fff06tXL0JDQ0lOTmbu3Lkme9KP8rdDhw41CJc/fvw4J0+epKamhosX\nLzJq1ChjNrGPjw8///wz9fX1WpWrmCj1P4XSJjz//PPMmDGDqKgoXnnlFaqqqliyZAmnTp3C3t6e\nyMhIvv76ayIjIxk6dCjZ2dn3hL8rpud+p7fs2rWLK1euGA/iHjlypPG11NRUevfujY2NzWOvVTFt\naoOT0iY4OzszZswY2rVrx+jRo9Hr9WzdupUlS5Ywb948PD09KSgoICIigvbt22tdbosqKSnBxcXF\nbLY0PYz7nd6yf/9+Zs+eTWFhIaWlpfTv3994/65duxg+fLga3lce2sOu5lUUkyaEEPL2H70QIhD4\nX+A8YAn4AyOllOUaltiihBApQE9gspQyV+t6tCKEmAZEAD8BqVLK/UKIHUCRlPK/t+95FlgHxEgp\nv9WuWsUUqWaqtDl3NdQhwHrACRgmpczWsraWJIT4APgPUAXogai23FABhBCWUsr62z8vBByllDOE\nEDbAduBPYJaU8oqWdSqmR82ZKm2OlFKKv8c8BwOewPPm1EhvOw8kSikDgEogUQjRpieCDY30tk1A\ngBCiGEjh1ujE26qRKk2hnkyVNksI0Rn4DFghpfw/ret5FIQQtlLKS7d/3gXogP8CR29/qbCQUrbp\nCUIhxP9wq5H+JKWsUb8TpSlUM1XaNCGElZSyVus6WooQ4g3goJTy7B3X2kkp627/nAZ0ASZwaw6x\no5RyvibFKooZUc1UUcyEEOJrYAywBfhUSnnGMD9811zhN8AwwAYYKqU8ol3VimIe1JypopgBIcR4\nwBH4ELAC5gshPAzzw1LKeiGEYStc9u17nlWNVFFahnoyVRQzIIRwBp4DdnJrBe9r3FrFe/cT6hBu\nbQ8ZYoYLrhRFM6qZKoqZuHP+VwgxFngVuAF8cruhPiOlPCaE6CalPK9psYpiZlQzVRQz8i+hFMOA\nAMPqXkVRWo5qpopiZtpKKIWitCb/D7Czb3bwGBGZAAAAAElFTkSuQmCC\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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\nPitXtEtLS3VfMzg4qAsvvFDbtm3Tli1blM1mYyip2TKZjDZv3qzNmzdX/b3neZqbm9Onn36qY8eO\n6fjx4yuO9eLiog4ePKiDBw+ueN3w8LDGx8d16aWXamhoqOVzy6Zzs5564cyfWHN4eDjGUqGdcMsJ\nifA7mMYp6LddU74Ve56nqakpHTx4UB988EHd52/btk3j4+Patm2benp6Yihh48K+5ZQEz/M0Ozur\nv/3tbzp69KimpqbWfX5/f792796tL37xi8Z+LnEJ8re1ZcsWWmmwGn1oYC5/ZJO0/vo7poSLMNR7\nL4uLi3r//fd14MCBdUcNjYyMaMeOHbrkkku0YcOGKIoamXYINFL1z9J1XZ05c0ZHjx7VoUOH1p0F\nd9OmTbriiit00UUXUXlr5TWAEU+ogkADM7muq1OnTiVdjMTl83m99957euONN2o+x/92v2vXLvX2\n9sZYumi0S6AJyvM8TU5O6uDBg/rwww9rPm94eFj79u3TpZdeamzAievLRTab1ejoaOT7gVUINDDT\n3NycZmZmki5G7AqFgg4cOKA333yz5nN27typPXv2aOPGjW3TMlWp0wJNNaVSSZ9++qnefPNNTUxM\nVH3OwMCArr32Wl1yySXGBpwobd68OdCoOXQMRjnBTPVmBW4np06d0p///Oeac+1cdtlluuKKK6y7\ndYTmdXV16Qtf+IK+8IUvSFpu+Th58qTefPPN8rD6XC6n3/3ud+XX7Ny5U9dcc431t2KCtvIsLCxo\nYGAghhKhnRBoEKtisVh1ZE679JUpFAp6++239dZbb1X9/a5du7Rv3z4CDMocx9H555+v888/X9Ly\n38KpU6f06quv6vTp05KkQ4cO6dChQ5KW5wPav3+/la03Qf/G5+bmCDRoGIEGsarVOhNGmEkqFBUK\nBb366qtVRyL19fXp+uuv18UXX9wWgS0IE8OpiWWqxXEcbd26VXfffbek5TlzDhw4UO5rtbCwsKL1\n5qabbtKuXbuseX9BlEolFQoFphhAQ+hDg1idOnVKrusmXQxJrVVyCwsLevXVV3X48OE1v9u5c6eu\nvvpq9ffX7yuShCQrd/rQtMbzPH322Wd6+eWXNTk5ueb3+/fv1+7du61ruammr6+POWngo1MwzBLm\nuk3VKuWoK+pisahXX311zWRqknT55Zfr6quvViaTiWz/7YBAE67p6Wn98Y9/1Geffbbmd7fccovG\n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\naXX/qVRKu3bt0q5duyQtjzr585//rE8//VSSNDExoWeeeab8/M2bN+vKK6/U+eefX15MMeljUI/p\n5bNFoVDQoUOHagYYSdq7d6/27dtnzOikMFQ7x7PZLGEGLaGFBonK5XKanZ1d8ZjjONatkBxUqVTS\nJ598ojfeeKPmLbfh4WF96Utf0vbt29uqEpPsaqGJIljOzs7q/fff13vvvVe19U5aHl69b98+jYyM\ntE1wDHIsmRUY6+CWE+wQdgdhm3iep7///e/661//qrNnz9Z83vnnn68vfelLuvDCC5VO29uwWi3Q\nVKvshodLeuihedlsYWFBR44c0Xvvvadz587VfJ4fYDq5AzkdgVEHt5xgh+HhYZ0+fbrcKmPDLZew\nOI6jSy65pLy8QqlU0sTEhN5///3y8guSdOLEiTXDc8fGxjQ+Pq5LL73U6qb6ap+1qfO91CrH5ORk\necmMubnaLUvZbFa7d+/Wzp07NTg4aET5k5bJZAgzCAUtNDDCuXPn1v0W6zOlEouL53nlVpz33ntP\np06dqvuabdu2aXx8XFu3blV/f/+a49XqMWzl9UmMcgrrnHFdV9PT0/rkk0909OjRQKP0du7cqd27\nd2t0dDT20UdJ8+uWeuVjiQMEQAsN7LFhwwYtLCyoWCwmXZRINFvxOI5TbsW59NJLy48Xi0WdOnWq\n3CpQ2R/j2LFjOnbsWNVtXXjhhTr//PN14YUXamhoqG6fhWrlNrUC9VUrb9Dj70/6+Omnn+r48eOB\nJ4AcHBwst5YNDw9HPuzYfz+2fRarDQwMEGYQGlpoYIxGZxAO49tpu3VALhQKOnbsmD766CMdP368\n4YA4NDSkTZs2aXR0VKOjoxoeHlZ3d3fNCrrRzyCpTsGlUkkLCwuanJzUmTNndPr0aZ05c2bNOl31\nDAwM6Atf+ILGx8fbbr6UuFt70um0RkdH2+oYIjK00MAu2WxW/f396/ZBqBTGxbedwoy0fAzHx8c1\nPj6+5neLi4s6ceJEufWh2i2+mZkZzczM6MiRI4H219/frw0bNpQ7dXZ3dyubzaq7u3vFv9PptFKp\nlFw3reXvRet9dp48z1WxWJTneXJdV4VCQYVCQfl8XoVCQYuLi1pcXFQ+ny/frjx37lzNoc+NGBsb\n0wUXXKALL7zQqNASdeAIa9tByzk4OGjMsUV7oIUGRnFdVxMTEyvmpqnF9P4DppatFr+PiN964bdk\n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\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], "source": [ - "plot_state(rho,\"city\")\n", - "plot_state(rho,\"qsphere\")" + "We may visualize the final state using the `plot_state` function. This can either return a *city plot*, which is a 2D-bar plot of real and imaginary matrix elements of a density matrix $\\rho$." ] }, { @@ -227,45 +160,11 @@ "execution_count": 7, "metadata": {}, "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "The 0th eigenvalue = 0.5\n" - ] - }, { "data": { - "image/png": "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\nY5+3b9xtAAAAAElFTkSuQmCC\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZEAAAEXCAYAAABsyHmSAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xm4HFW57/HvLwkhExKQGKYwRzkRQSAEHNBEAQHlRBAQ\nRRBEE1QE8YJwHFHBy1WEI4pALqDicAI4wUEUFAjIOSKTBg1DiFEORC6TEAmgGPLeP9Zq7HT2UF27\neu9q9+/zPP10d3X12291dddba63uKkUEZmZmZYwY6gTMzKx7uYiYmVlpLiJmZlaai4iZmZXmImJm\nZqW5iJiZWWm1KSKSLpL0iKTf9fK4JJ0taYmkOyXtNNg5mpnZ6mpTRIBvAHv38fg+wNR8mQOcOwg5\nmZlZH2pTRCLiRuDPfcwyG7g4kpuBiZI2GpzszMysJ6OGOoE2bAI80HT/wTztodYZJc0htVYYO3bs\nzlOmTCn1gn9d+bc1po3SSFbG86tNGzNq7VLxV61axYgR1dXxOserc24Didfpz8hAcut0rLrHq3Nu\nA4k3GJ+5xYsXPxYRk4rM201FpLCImAfMA5g+fXrcdtttpeLscMYha0ybO2Uvzn/gmtWmLTxhfqn4\nCxYsYObMmaWe223x6pzbQOJ1+jMCXg91iFWneIPxmZN0f9F5a9OdVcAyoLlJsWmeZmZmQ6SbisgV\nwOH5V1q7AcsjYo2uLDMzGzy16c6S9B/ATGADSQ8CnwbWAoiI84CrgH2BJcAzwJFDk6mZmTXUpohE\nxDv6eTyADw5SOmZmVkA3dWeZmVnNuIiYmVlpLiJmZlaai4iZmZXmImJmZqW5iJiZWWkuImZmVpqL\niJmZleYiYmZmpbmImJlZaS4iZmZWmouImZmV5iJiZmaluYiYmVlpLiJmZlaai4iZmZXmImJmZqW5\niJiZWWkuImZmVpqLiJmZleYiYmZmpbmImJlZaS4iZmZWmouImZmV5iJiZmaluYiYmVlpLiJmZlaa\ni4iZmZXmImJmZqW5iJiZWWkuImZmVpqLiJmZleYiYmZmpbmImJlZaS4iZmZWmouImZmV5iJiZmal\nuYiYmVlpLiJmZlaai4iZmZXmImJmZqW5iJiZWWkuImZmVpqLiJmZleYiYmZmpbmImJlZabUpIpL2\nlnSvpCWSTu7h8ZmSlkv6Tb58aijyNDOzfxg11AkASBoJnAPsCTwI3Crpioi4q2XWX0TEWwY9QTMz\n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\nn1RBXDMz6zBF9N64yF1IfbY+ImLLASUgPRkRE/NtAU807rfM9wdgOak76/yImNdHzDnAHIDJkyfv\nPH/+/IGkuJoVK1YwYcKE2sWqe7w651Z1POdWzF0PL11j2qTR6/Loc8tXmzZt8laDnlu3xas6t1mz\nZt1euMcnIjp+AX4O/K6Hy2zgyZZ5n+glxib5+iXAQuB1RV575513jipdf/31tYxV93h1zq3qeM6t\nmO2/+PY1LufMv3CNaUORW7fFqzo34LYouH0vej6RAYmIPXp7TNLDkjaKiIfykYIf6SXGsnz9iKQf\nAjOAG3ua18zMBkc7x87qlCuAd+fb7wYub51B0nhJ6zRuA3uRWjJmZjaE6lBETgf2lHQfsEe+j6SN\nJV2V55kM3CRpIXAL8OOI+OmQZGtmZi8YlO6svkTE48Abe5j+J2DffHspsMMgp2ZmZv2oQ0vEzMy6\nlIuImZmV5iJiZmaluYiYmVlpLiJmZlaai4iZmZXmImJmZqW5iJiZWWkuImZmVpqLiJmZleYiYmZm\npbmImJlZaS4iZmZWmouImZmV5iJiZmaluYiYmVlpLiJmZlaai4iZmZXmImJmZqW5iJiZWWkuImZm\nVpqLiJmZleYiYmZmpbmImJlZaS4iZmZWmouImZmV5iJiZmaluYiYmVlpLiJmZlaai4iZmZXmImJm\nZqW5iJiZWWkuImZmVpqLiJmZleYiYmZmpbmImJlZaS4iZmZWmouImZmV5iJiZmaluYiYmVlpLiJm\nZlaai4iZmZXmImJmZqW5iJiZWWkuImZmVpqLiJmZlTbkRUTSQZIWSVolaXof8+0t6V5JSySdPJg5\nmplZz4a8iAC/Aw4AbuxtBkkjgXOAfYBpwDskTRuc9MzMrDejhjqBiLgbQFJfs80AlkTE0jzvfGA2\ncFfHEzQzs14NeREpaBPggab7DwK79jazpDnAnHx3haR7K8xlA+CxGsaqe7w651Z1POdW0ge5ZI14\nOvGSsuFqvawVx6s6t82LzjgoRUTSz4ENe3jo4xFxedWvFxHzgHlVxwWQdFtE9Dp2M1Sx6h6vzrlV\nHc+51SNenXOrOl7VubVjUIpIROwxwBDLgClN9zfN08zMbAjVYWC9iFuBqZK2lDQaOAS4YohzMjMb\n9oa8iEjaX9KDwKuAH0u6Ok/fWNJVABGxEjgGuBq4G7g0IhYNUcpVdpNV3eVW53h1zq3qeM6tHvHq\n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\nPydqol7R+2+BAAAAAElFTkSuQmCC\n", "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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\nmi2VSmnr1q3aurV2a5HrulpaWtJHH32kU6dO6fTp06v29crKit555x298847q143Pj6u3bt3a9eu\nXRobG+v42LLp2GymWTjzBtYcHx8PsVToJVxyQiS8DqZh8vtt15Rvxa7ram5uTu+8847ee++9ps/f\nuXOndu/erZ07d2pwcDCEErYu6EtOUXBdV5lMRn/729908uRJzc3NNXz+hg0btH//fn32s5819n0J\ni5/P1rZt22ilwVr0oYG5vDubpMbz75gSLoLQbFtWVlb07rvvampqquFdQxMTE9q7d68uv/xybdy4\nsRtF7ZpeCDRS7ffScRzNzMzo5MmTOnbsWMNRcDdv3qyrr75al156KZW3Vp8DuOMJNRBoYCbHcXT2\n7NmoixG5fD6vt99+W6+++mrd53jf7q+44goNDQ2FWLru6JVA45frupqdndU777yjv/71r3WfNz4+\nrkOHDmnXrl3GBpywvlyk02lNTk52fT2wCoEGZlpaWtLi4mLUxQhdoVDQ1NSUXnvttbrP2bdvnw4c\nOKBNmzb1TMtUtX4LNLWUy2V99NFHeu211zQ9XXsbR0ZG9PnPf16XX365sQGnm7Zu3errrjn0De5y\ngpmajQrcS86ePavnn3++7lg7V155pa6++mrrLh2hfYlEQp/5zGf0mc98RtKFlo8zZ87otddeq9xW\nn81m9bvf/a7ymn379umGG26w/lKM31ae5eVljYyMhFAi9BICDUJVKpVq3pnTK31lCoWC3njjDb3+\n+us1/37FFVfo0KFDBBhUxGIx7dixQzt27JB04bNw9uxZvfjiizp37pwk6dixYzp27JikC+MBHT58\n2MrWG7+f8aWlJQINWsYlJ4Qqk8l07XbtqEJRoVDQiy++WPNOpOHhYd1000267LLLeiKw+dHofYjq\nkpPNgblYLGpqaqpuX6svfvGLuuKKK6zdvnomJycZYgAe+tDAPGfPnpXjOFEXQ1Jnldzy8rJefPFF\nHT9+fN3f9u3bp+uvv14bNmzotIhdEWXlTh+azriuq08++UR//vOfNTs7u+7vhw8f1v79+61ruall\neHiYMWngIdDALEHO21SrUu52RV0qlfTiiy+uG0xNkq666ipdf/31SqVSXVt/LyDQBGthYUF/+MMf\n9Mknn6z722233abdu3eHFl6D/vzF43Ft27YtsOXBagQamGVhYSGwDsFhtTK4rqv3339/VQdNz9VX\nX61rr71WySRd0fwi0LSmleM8k8noj3/847r5ukZHR3XHHXf4bu0w6fLcxMRE3w9GCEkEGpjE6+jY\n4vG2bhlhnWjn5uZ09OjRdbeX7927VzfddBPX9tsUZaAxqaLuRKOBKD1zc3P67W9/q0wms+rxffv2\n6fDhw9Ycv4ODg5qYmIi6GIgegQbmyOfzTYeIj5rrunrrrbf0wgsvrHp848aNuuOOO7Rp06aISrae\nrZUzLTThO3HihJ555pl1j3/961/Xli1burruTo9T13W1ffv2nugThI4wDg3MYfLYMysrK/rtb3+r\nM2fOrHr81ltv1d69e40MDiaWqRFbA1gv2LNnj/bs2aNisagXXnihcjfeL3/5S0nSddddp0OHDnXl\n/aleZjvHQCwWUz6ft378HYSDFhp0nWlTHXgn1o8//lj/7//9v1V/m5iY0J133mnsHUpB6KW7nOpt\nSyfb2A/h6/Tp03riiSdWPbZ582bdfvvtxoWHgYEBXXTRRVEXA9HikhPMEMXM2o28//77evrpp1c9\nds011+j666/v+YqskTAqci45mSWfz+s3v/nNqikY4vG4vvWtb2l0dDTCkn0qFotpy5YtTIXQ3wg0\nMMPMzEzDmYfD8s477+i5555b9dhdd91VGaG1X/RSC0039UNLjcdxHL3xxht65ZVXVj1+7733GtEp\nd3R0lJGD+xuBBtErl8s1x8gIS70T9X333WdUJ99+YVOgqaUfQs6xY8f07LPPrnrs7rvv1vbt2yMq\nkZRKpbR58+bI1o/I0SkY0VteXo5s3W+99Zaef/75yu/pdFr33ntvZN/0Wq0M+6HytE3Q/XWaieIY\n2Ldvn/bt26cPPvhATz31lCTp17/+tSTpm9/8ZiT9WUqlkkqlEmM+oSFaaNBV09PTKpVKoa7zww8/\n1G9+85vK76Ojo/ra176moaGhUMuB9WxvofGrl8LomTNnKoHG893vfjf0zsMjIyPG9OtB6LjkhGgV\ni0WdO3cutJP77OysHnnkkVWP/fM//3NP37Fkm34JNJ7qQfBsDznVLTaStGnTJn39618PbbqPRCKh\nrVubHzvoSQQaRKubM2tXy+fz+ulPf7pq0suomsbRWL8FmmZsDDlvvvnmqsEn9+3bpy996UuhbAcz\ncPct+tAgWu0OptfKSf7FF1/U1NRU5ffbb79dl156aVvr7RU2VpL9Kuw+OUE4cOCArrrqKv3pT3/S\n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\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "The 1th eigenvalue = 0.5\n" - ] - }, - { - "data": { - "image/png": "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\n/POf/1wzMzN+FqurEESiYep2N6Vc7777rp588klJ0tjYmO66667ygJyV3Ccm77jjDmUymVW/Y4Zt\n1BJrMrmbd/kBI508ebKlq8JSqaTf/e53mpyclCTdcMMN2rNnj9/Fq7t+U07+XthW3iNHErrttgsb\nvm/r1oL+8pdJ39Zr23bqNO4kk0tLS5Kkr3/967ryyislnR+P5sCBAzp8+HB5pODt27dr165d68JM\nqVRSX1+fRkZGQv8OiJSnP14CDQIxMzOj5eXllj9/6NAhvfzyy5LOPwr+wAMPdP1AWp1QKUcVaMJk\n034Ko6xzc3P6n//5n/LPDz74oAYHBxuWS6resjQ8PKz+/n5/CwnTeTpIueWEQLTbaW/Hjh168MEH\nJUnLy8v6+c9/XnNiy25R7eRuYp+NblS5H2wJM1LwZX399dfLYWbDhg165JFHGoYZt1y1ykaHYNRC\noEEg/Oi0Nzg4qJ/+9KfauHGjJOmZZ57Rb37zm44d8XUtL+WzqfLsZGHsB9OP10rz8/P6z//8z/Io\nvzfddJMeeOCBtrdTIpGg/wxqItAgEMlkctXEce7JuNmTcjwe1/33369vf/vbkqSpqSk9+uijOnHi\nRNtlND0MmF4+hMuE48HLyL6vvvqq/vu//7v82kMPPaTdu3f7sq5WHjhA96APDQLTbj+atRzH0VNP\nPaXp6WlJ0saNG/X973/fuCu2tY/J2tSnImjd0IemW63tK3PzzTfry1/+sq/roP9M16JTMKK1uLio\nubm58s9+VewnT57UM888U/75q1/96rqxKmCmKAKNLYEyqnK2u95isainn3561ZxsDz/8cCCtKZs3\nb17V8ouuQaBBtAqFQvnxa78Vi0U9//zzq249ff/739emTZsCWZ8NbKi4aaExS7vHzLvvvqu33nqr\n/PMtt9yinTt3+lG0dZLJpMbGxgJZNozn6SA1q60eHSWZTCqZTK4b4tyPijeRSOjuu+/WwsKCfvWr\nX0k6P8llKpXSAw88ULNTcpSVftDrNj3MoDmlUknxeDzQzsCtHjNrW0kvu+wy3XHHHb61nlT7W2F0\nYDRCCw0CNT8/r2w26+syq53sjh8/rueee6788xVXXKHbb79diUTC13WjPbTQeGdii1s2m9Vjjz22\n6rWHHnrI17BR63uPjY0Z118OoeGWE6LnOI5OnToVyrpKpZLeeustvffee+XXtm3bpttuu63uuBZh\n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\n", - "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -273,8 +172,36 @@ } ], "source": [ - "plot_state(rhomixed,\"city\")\n", - "plot_state(rhomixed,\"qsphere\")" + "# plot the state\n", + "plot_state(rho,\"paulivec\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can compare the ideal entangled state to a non-entangled mixed state $\\frac{1}{2}(|00\\rangle\\langle00| +|11\\rangle\\langle11|)$:" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZEAAAEXCAYAAABsyHmSAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAH+JJREFUeJzt3Xm4HFW57/HvLwkhExoQDFOQKcqJCEJCwAFNFBBQTgQB\nUQRBNEFFEC8IxxEVvFxFOCII5CIqDieCExyMgjLKOSKTBg1DiFEORC4IAhJAMeS9f6y1sejsobp2\n9d7V7t/nefrp7urqt9/q6q631lrdVYoIzMzMqhg13AmYmVn3chExM7PKXETMzKwyFxEzM6vMRcTM\nzCpzETEzs8oaU0QkXSDpQUm/7eNxSTpT0jJJt0nacahzNDOz52pMEQG+BuzZz+N7AdPyZR5wzhDk\nZGZm/WhMEYmI64A/9zPLXODCSG4AJkvaaGiyMzOz3owZ7gTasAlwb+H+fXna/a0zSppHaq0wfvz4\nGVOnTq30gn9d9bc1po3RaFbFM8+ZNm7M2pXir169mlGj6qvjTY7X5NzqjufcmhGvybkNJl6nt0sA\nS5cufSgiNigzbzcVkdIiYgGwAGDmzJlx8803V4qz/WkHrTFt/tQ9OO/eK54zbfFxCyvFv+aaa5g9\ne3al53ZbvCbnVnc859aMeE3ObTDxOr1dApB0T9l5G9OdVcIKoNik2DRPMzOzYdJNReRS4ND8K61d\ngMciYo2uLDMzGzqN6c6S9B/AbGB9SfcBnwTWAoiIc4FFwN7AMuBJ4PDhydTMzHo0pohExNsGeDyA\n9w9ROmZmVkI3dWeZmVnDuIiYmVllLiJmZlaZi4iZmVXmImJmZpW5iJiZWWUuImZmVpmLiJmZVeYi\nYmZmlbmImJlZZS4iZmZWmYuImZlV5iJiZmaVuYiYmVllLiJmZlaZi4iZmVXmImJmZpW5iJiZWWUu\nImZmVpmLiJmZVeYiYmZmlbmImJlZZS4iZmZWmYuImZlV5iJiZmaVuYiYmVllLiJmZlaZi4iZmVXm\nImJmZpW5iJiZWWUuImZmVpmLiJmZVeYiYmZmlbmImJlZZS4iZmZWmYuImZlV5iJiZmaVuYiYmVll\nLiJmZlaZi4iZmVXmImJmZpW5iJiZWWUuImZmVpmLiJmZVeYiYmZmlbmImJlZZY0pIpL2lHSXpGWS\nTuzl8dmSHpP063z5xHDkaWZm/zBmuBMAkDQaOBvYHbgPuEnSpRFxe8usP4+INw15gmZm1qumtERm\nAcsiYnlEPA0sBOYOc05mZjYARcRw54Ck/YE9I+Ld+f4hwM4RcVRhntnA90ktlRXAcRGxpI9484B5\nAFOmTJmxcOHCSnnd/sDyNaZtMPb5/Onpx54zbfqULSvFX7lyJZMmTar03G6L1+Tc6o7n3JoRr8m5\nDSZep7dLAHPmzLklImaWmbcR3Vkl3QpsFhErJe0N/BCY1tuMEbEAWAAwc+bMmD17dqUXPOa0c9eY\nNn/qHpx37xXPmbb4rdWK1DXXXEPV3LotXpNzqzuec2tGvCbnNph4nd4utat0d5akbSR9XNLZhfvb\n1ZTHCmBq4f6medqzIuIvEbEy314ErCVp/Zpe38zMKihVRCQdAFwHbAIckidPAk6vKY+bgGmStpA0\nFjgIuLQlhw0lKd+elXN/uKbXNzOzCsp2Z30a2D0iFkt6a562GNi+jiQiYpWko4DLgdHABRGxRNKR\n+fFzgf2B90paBTwFHBRNGNAxMxvByhaRFwK35dtRuK5tI567qBa1TDu3cPss4Ky6Xs/MzAav7JjI\nLfyjG6vHQcCN9aZjZmbdpGxL5GjgCklHABMlXQ68GNijY5mZmVnjlSoiEXGnpG2ANwGXAfcCl/X8\nWsrMzEam0v8TiYgngYs6mIuZmXWZUkVE0s/pYxA9Il5Ta0ZmZtY1yrZEzm+5vyFwBPDNetMxM7Nu\nUnZM5Out0yR9D/gq6T8kZmY2Ag3mKL4rgLoOe2JmZl2o7JjIu1omTQD2A26oPSMzM+saZcdEWv9o\n+ATw38AZ9aZjZmbdpOyYyJxOJ2JmZt2nzyIiqdQZTSJizTOkmJnZiNBfS2QZ6b8h6meeIB1118zM\nRqA+i0hENOX862Zm1lAuFGZmVlnZn/iOAd4HvBZYn0IXlw97YmY2cpVtiZwBzCedIncG8D3Siaqu\n6lBeZmbWBcoWkf2AvSLii8CqfP1mwD/9NTMbwcoWkQmkc4gAPCVpQkTcCezQmbTMzKwblP3H+h3A\nTqTT4d4MnCTpL6TjZ5mZ2QhVtogcAzyTb38IOAdYB5jXiaTMzKw7lD3syU2F23cDu3UsIzMz6xql\nxkQkLZZ0vKSpnU7IzMy6R9mB9ZNIYyJ3SLpW0nxJ63UuLTMz6walikhE/CAiDgQ2Ai4A9gXulXRp\nJ5MzM7NmKzuwDkBEPC7p28CjwFhg745kZWZmXaHsmIgkvV7SV4AHSN1bPwa26GBuZmbWcGVbIn8E\nVgILgVdFxB2dS8nMzLpF2SIyNyJu7GgmZmbWdcoOrLuAmJnZGnw+ETMzq8xFxMzMKnMRMTOzykr/\nT0TSS4DtgUnF6RFxQd1JmZlZdyh7etyPAJ8AFgNPFh4K0j/YzcxsBCrbEvkgMCsibutkMmZm1l3K\njok8BdzZyUTMzKz7lC0iHwe+JGkjSaOKl04mZ2ZmzVa2O+tr+frdhWkijYmMrjMhMzPrHmWLiA+0\naGZmayh7etx7AHL31RTggYhY3cnEzMys+coeCv55ki4E/gqsAJ6S9HVJz+9odmZm1mhlB8bPBCYC\n2wLjgZcBE/J0MzMbocqOiewJbBkRPX80XCrpcOB3nUnLzMy6QdmWyF+BDVqmrQ/8rd50zMysm5Qt\nIucDP5V0pKS9JB0JXA4sqCsRSXtKukvSMkkn9vK4JJ2ZH79N0o51vbaZmVVTtjvrFNIpct8ObJxv\nf46ajpslaTRwNrA7cB9wk6RLI+L2wmx7AdPyZWfgnHxtZmbDpOxPfHsOtNipgy3OApZFxHIASQuB\nuUCxiMwFLsy53CBpsqSNIuL+DuVkZmYDUNom9/KAdEhEfCPffldfAeo4FLyk/YE9I+LdPa8N7BwR\nRxXmuQw4NSKuz/evBE6IiJt7iTcPmAcwZcqUGQsXLhxsis9auXIlkyZNGnjGIY7V9HhNzq3ueM6t\nGfGanFvd8erObc6cObdExMxSM0dErxdgUeH21X1crurr+e1cgP2B8wv3DwHOapnnMuDVhftXAjMH\nij1jxoyo09VXX93IWE2P1+Tc6o7n3JoRr8m51R2v7tyAm6Pk9rvP7qyI2Ltwe047VayCFcDUwv1N\n87R25zEzsyFU9h/rv+pj+hpdSRXdBEyTtIWkscBBwKUt81wKHJp/pbUL8Fh4PMTMbFiV/XXW1q0T\nJAnYso4kImKVpKNIPxseDVwQEUvyT4mJiHOBRcDewDLS2RUPr+O1zcysun6LSD5eFsDYwu0emwNL\n6kokIhaRCkVx2rmF2wG8v67XMzOzwRuoJfK7Pm4H8F/AxbVnZGZmXaPfIhIRnwKQdENEXD40KZmZ\nWbco+2fDy/OA90tIx8xS4bGrOpSbmZk1XKkiIunVpK6rtYHnAX8B1gHupabBdTMz6z5lD8B4BvC5\niFgPeDxffwb4cscyMzOzxitbRF4MfLFl2qnAsfWmY2Zm3aRsEXmM1I0FcL+k6cC6QH0HazEzs65T\ntoh8n/RHP0hH8r0auAX4bieSMjOz7lD211kfLNw+TdINpIH1n3QqMTMza76yx846s3g/Iq6PiB+T\nBtzNzGyEKtuddVgf0w+pKQ8zM+tCAx07q+dkVGN6OTHVlsBDHcnKzMy6wkBjIj0tjbE8t9URwAPA\nOzuRlJmZdYeBjp01B0DSyRHxsaFJyczMukXZMZHrJL24OEHSSyTt3oGczMysS5QtImcDj7dMezxP\nNzOzEapsEXlhL6eivR/YsOZ8zMysi5QtIsslva5l2mzg9/WmY2Zm3aTsOdZPAr4v6SukMxxuRTrH\nuc9zbmY2gpVqiUTEJcAewETgjfn6DXm6mZmNUGVbIkTEjcCNHczFzMy6TNljZ60t6RRJyyU9lqft\nIemozqZnZmZN1s6ZDbcFDib9Wx1gCfDeTiRlZmbdoWx31r7A1hHxhKTVABGxQtImnUvNzMyarmxL\n5GlaCo6kDYCHa8/IzMy6RtkicjHwdUlbAEjaCDgLWNipxMzMrPnKFpGPkP5Y+BtgMnA38EfgUx3K\ny8zMukDZ0+M+DRwLHJu7sR6KiBjgaWZm9k+u9P9EJE0DDgQ2Bv4o6aKIuLtjmZmZWeOV/Z/I24Ff\nAdsBTwAvA27N083MbIQq2xI5Gdg7Iq7rmSBpV+AbwLc7kZiZmTVf2YH1dYBftEy7gXQMLTMzG6HK\nFpHTgc9KGgcgaTxwSp5uZmYjVNnurPeRTkB1jKRHgHUBAfdLevbQJxGxWf0pmplZU5UtIu/oaBZm\nZtaVyv5P5NrepktaKyL+Xm9KZmbWLcr+xPen+VAnxWnbATd3JCszM+sKZQfWbwUWSzpQyYnANcA5\nHcvMzMwar2x31gmSLgMuBD5HOm7WrIhY1snkzMys2cq2RAC2AJ4H/In0/5BxHcnIzMy6Rtkxke+S\njuS7Z0TsBCwArpN0fCeTMzOzZivbEnkQ2CEibgKIiLOBXYD9O5WYmZk1X9kxkff1Mm2ppFfWn5KZ\nmXWLflsiks5suX9EyywX1Z6RmZl1jYG6sw5ruf/5lvu715eKmZl1m4G6szTA/UGTtB7wHWBz4A/A\ngRHxSC/z/QF4HHgGWBURM+vOxczM2jNQS6T1FLidOCXuicCVETENuDLf78uciHi5C4iZWTMM1BIZ\nI2kO/2iBtN4fXUMOc4HZ+fbXSf+EP6GGuGZm1mGK6LtxkbuQ+m19RMQWg0pAejQiJufbAh7pud8y\n3++Bx0jdWedFxIJ+Ys4D5gFMmTJlxsKFCweT4nOsXLmSSZMmNS5W0+M1Obe64zm3ZsRrcm51x6s7\ntzlz5txSuscnIjp+AX4G/LaXy1zg0ZZ5H+kjxib5+oXAYuA1ZV57xowZUaerr766kbGaHq/JudUd\nz7k1I16Tc6s7Xt25ATdHye172fOJDEpE7NbXY5IekLRRRNyfjxT8YB8xVuTrByX9AJgFXNfbvGZm\nNjTaOXZWp1wKvDPffidwSesMkiZKWqfnNrAHqSVjZmbDqAlF5FRgd0l3A7vl+0jaWNKiPM8U4HpJ\ni4EbgR9FxE+GJVszM3vWkHRn9SciHgZe38v0PwJ759vLge2HODUzMxtAE1oiZmbWpVxEzMysMhcR\nMzOrzEXEzMwqcxExM7PKXETMzKwyFxEzM6vMRcTMzCpzETEzs8pcRMzMrDIXETMzq8xFxMzMKnMR\nMTOzylxEzMysMhcRMzOrzEXEzMwqcxExM7PKXETMzKwyFxEzM6vMRcTMzCpzETEzs8pcRMzMrDIX\nETMzq8xFxMzMKnMRMTOzylxEzMysMhcRMzOrzEXEzMwqcxExM7PKXETMzKwyFxEzM6vMRcTMzCpz\nETEzs8pcRMzMrDIXETMzq8xFxMzMKnMRMTOzylxEzMysMhcRMzOrzEXEzMwqcxExM7PKXETMzKwy\nFxEzM6vMRcTMzCpzETEzs8pcRMzMrLJhLyKSDpC0RNJqSTP7mW9PSXdJWibpxKHM0czMejfsRQT4\nLbAfcF1fM0gaDZwN7AVMB94mafrQpGdmZn0ZM9wJRMQdAJL6m20WsCwilud5FwJzgds7nqCZmfVp\n2ItISZsA9xbu3wfs3NfMkuYB8/LdlZLuqjGX9YGHGhir6fGanFvd8ZxbM+I1Obe649Wd24vKzjgk\nRUTSz4ANe3nooxFxSd2vFxELgAV1xwWQdHNE9Dl2M1yxmh6vybnVHc+5NSNek3OrO17dubVjSIpI\nROw2yBArgKmF+5vmaWZmNoyaMLBexk3ANElbSBoLHARcOsw5mZmNeMNeRCTtK+k+4BXAjyRdnqdv\nLGkRQESsAo4CLgfuAC6KiCXDlHKd3WR1d7k1OV6Tc6s7nnNrRrwm51Z3vI5035ehiBiu1zYzsy43\n7C0RMzPrXi4iZmZWmYtIl9IA/878ZzOSlnckLat1PxeRYTLYDUUUBrOautGRVNvnKyKizuWUNLqp\n71vUOFApaT1Jk+paVklr17weNs/XjVsXkjaXtEW+3aj88g+Ppgx3HuAiMiBJo+r4AEmaIOktkqbC\n4IqApN0lHSXpRcVYyirktraknSWt2+5z+xMRq+uII+l1krapc+MaEc/UFS9/oTeo6XOyt6TxNRbg\nY4EDcxEeXUO8jwJ7wLPHtKssP//LkjbN+Q1qmSV9TNKsOnLLTgK+JEl9fVbKrnNJ+0naoJ3nDOCj\nwCcGeM0hKXwuIgOIiNWFjfRg3q/Xkn6m/HFJx+UN43r5NZ4tAiVjvQKYDZwu6QuS5kpaN7I2YwH8\nK/B54Phc6LaRNKGN569B0nxJhw0mRsG7gH/LNXLQn9n8/p8qaUxNX7T5wLv6ay2VeZ28bMcDr4yI\n1cXn9NyukO/DpPW6eUQ8U3idqiYDH5I0qifeIIwDngY+A7XsdPwL8L4ca1C5SVoLOBB4DfCBvuYr\nsyMiaQxwMfChvp7TznrNuc0DjpD05sHkVgcXkT5I2kHSYkmflrQjPPdDXuGLGMD/Af5EOu7X+4FP\nSTpS0kxJE0p+IKeTitE3gWuAdYDDgfMkfULSrpLWavMDtCnwXWAz0p7rZ4BjJL1B0ovyh7aKd0na\nKOc9Ol9X2WifCmwF7F1T6+Y9pPd/x5r20O8Ejpa0a6GIPydmyfUh0n+hzpe0dXGHoOd2uxuGiPh3\n0ufkYkkb5mmrJa2TW8fzJU1sI+SHgbWAhZLW7smvnZwKuT1B2rC+UtKpPdMH0fo/HthJ0hcKsaru\nJLwb+G9gV1LR3K51hrwjsk6JWIcBTwFzJc3tbYY21+sRwPXAW4DPK3cJtuR2bJvrtbqI8KWXC/BS\n4ATgq8B/AT8CPgi8qEKsrYA/ANvl+1sAhwJfBn4AfAc4B9iqRKyJ+TnHFmLtA3wM+DpwGXAhMLpk\nbtsCTwCHFpb7RGARcC1wAenLOaXNZV4v5/LFPh7fuGScnv8yHQncA+xSeGx0z+Nt5DUT+H/Ap4Hr\nWh4bla83q7COP0w6rcG0wrRN8+UU4HltxPoK8J/A+vn+JOBV+T34QoXcRgPfyss8N3/efkRqpVzY\nRpyx+XpD4BJg377WV9m8Cp/Bi0ktsKrf17Xy9ctIRXNO1Vg5zq3AYfn2hcBXW96DXYEHSsb6NbA3\nqTD9CngBaYehZ/lfCZzRZm6H5NuLgM/l2+Py9atJRz2vvPxtvVdD9ULddMlfukOBGcD2wJtIfZDf\nB34BfCN/IMYN9KUpbARPIm38x7U8/mJSd80FPV+EEvm9FlgMzC5MGwVsQ2qVHNzGsi4AlgFXApu3\nPLYLcAZwVRu5qXB74xz730jngXk1qXB+G3gQWLvN9XIaqcX0ikGs26/1bIhJLYhTWh5/HvCXdnPL\nz/1W/mx8ELiCtPPxIHBOGzEmAhuQjlr9FeDq/Jn7Hakor7Hh7iPOWNLOxQfy8x4FVgM/BT4JvJ3U\n8tygzWXcjHSE19uA3wMfJ42RvLDC+7Ve3oAeBTwDLAH+HTiANndacrwXkAruTcAteRm3BSa1GWdj\n4OHC/e2B5cDcwrSFwOdLxnqs57sB/Az4cM86ytffBc5rI7c/F+7PybnNKkz7DhV2Nqpe/I/1Xkja\nBPgJ6YP9C1IXw3LSF3NLYAfShvydEXF3yZibkQrFkog4JjeD/07aM3458NeIOL+NHOcDHwHeDPw2\nIv5eeGxUlOz2kfQw8HrgONKG84BiDEmvB3aIiNPK5pafvwswhdRHvTvp/XsK+Dlpg/iDyOeH6SfG\n+qR+7oNJ3Xb75Of+lbRRvAq4LPI5aUrm9RDw2ohYIml34EvAIcDNERGSjgX+NSLmlIg1HngnsBFp\nXOn5wObAj/PlVtJhep6O1HXTX6w3kI4Jt3Fe5gdIG+z/m5fxBklrR8TfSi7nfNLOyd9Ixe0eUjfq\ne0itpafKxCnEO5i0UV4/Xy4hjY+MB9bO+S4Fzip+FvuJdyVpPGQ6aT3+hrTzNpV06oeJwPcjHZF7\noFhvIH0PtszxriAVurHAn0l7/78mvY8DjpXkrrWdIuL1kkZHxDOSjia10HeOiHslPUL6XvxhgFgn\nA9MjYr98/83AWcDu8Y9zKf05x7qnZG47RsQehdxOI7V0ZkbEk2Vzq81QVatuvADrkgZNfwv8EjgZ\neB2wXV6R7cY7kNSVcj6poDxManpfmz8AAz1/Iqn109M0XkHqt30PqRk/mdwlUzKffYA78+3NSOdp\nmZ/vj8nXyym595vn3wW4n1R8F5NacOeQxnAmtPl+fTXH+CLwXlLX3TRgN9IX+j+BK9qIN7ewvGuR\nNlpfptClQzrR2VtKxnsHqW/6ovxezsrr4iHa7BIDvkAqaAeRWqcbAp8j7VG3tSed4x3Hmi1Lkbpm\nFpBarmPaiHcMqYW1HYVWB6noHUAqdp8tGWsbUqvobfn+uMJjG5J2Ok4GXlUy3r35O7UXqeu4p1tn\nS1JL7Crgy20s68HAhsXvQb59Canb+K3A7SVj/bF1OfJ7dUO+fQBwWxu5nQBs3fMZ7nn/SNuB+Tm3\nJe1+XgZzGbIX6vZL3oCdAtyVv9g7lXzePqTm6s+BG0mF4+/A/84bxFLdCXmD9z3Shv4aUp/22/OG\n5tekroAfkvZAyi7TVcCJhfuHk7oCNsr3p1Fo1peM+er8Ze75Eo4i7RXeAZzcRpzR+Qvzmj4en0jq\nqtiujZifAo7uiV9YxvtIBWEyha6CEvHeSC9FO6+Ti0h76AMWdVLL4/4+HvsP4PQ218G2wJPAcYV1\n0DPeMz1vcA5qI95WpA31SwvTRtHSlQs8v2S8iaTuoBPy/TG0UdBaYk0nFaR3FKapl9zWLxlva9L4\n5ezWWMBOpJ2GvwBHloi1Tf6uj++Jla/HkXaO9iV1L/6vNtbrE8Dxhdx61uueOdZ9wPurvJdVL0P2\nQv8sl/zl2RmYXHLeX5IGXQ8ldQNMJvX7nlmYb8DBSFI/+VH5g7nGHj1poO87wL+UXI4x+cuybr6/\nVt7o/Yg8yAecDnyrzffmENKGeRyFwX3S+NJS8t5niVgbk/rdf00aZ9iftGfZVmumJbf9SS228RQ2\n7qSfS15H6sIstbx5Y3MP8LpCfOXL1Lyx+XDJWBNJrapPF9ZFT5GbRerqKdU6ys/pGee6gvxDkJbl\nPQJ4hBLjXIUN3ydJY3ptjxX1EXc2qZtpdi/rqZ3W9ALSDspVfSxrqbG8Xpb1u70tK2lH5BlyYSix\nXn8AnJTvjyms1wOAu0nFfsBYLev18j6W9Ts5t3Fl4tV1GbIX8uU5H9LppD27kwYZZxQlf4XVS4xx\n5NZUywfxVaQ9rV2A/6GNQWxSX/ZvSF1CX80b7S3I3TGkvf1rKFGACzHXJW3kf0MaYziN1KW4SZsb\niE1I3ZJLSF2JPblNyI+fR9qjfXkb739/G5tdSP3xY0vm95q8fLN7eex44NttLOvDpHG2bwIXF6b3\ndFHuC3ypzc/LZqRB4S/m+xNIxXgv0p/eDqvwGZxPKsTb00bh6GNZv9GyrD0b67eTW5+DXNYJpML3\nMdK4T9lYva7X/P27DPhxjev1MNJpMtp+HwdzGdIXG8kX1mxe70zqFtutpvht/9y1n1gfAFYC91R8\nfuuG/wt5wz+dPn7yWzLu5qS+8rtyQWj7V1q95HZ6zu2NtNHqyrH62rDumTf8H28zXp8bVWBiyRj9\njXP1bFjvpo1xrkLs3sb0riS1Asp27/Y3rrctsE4b+ZRZ1qXAfjUt67V5eUsta8n1WmqHquSy3kkb\nLda6LkP6Yr48+4HoWeln0uZe0hDlNz5vHAedW2HDv5Q02F56DKOfmKNI3TylWzQD5HYXqYW0bYUY\nvW1srs7xBvtjiW1Jv/gq3dqk5nEuahrTy7FqHddr+LIOtF4n095/asosa+nxvDov/onvMMr/+F0d\nJX4SOdQkvQB4Mtr8KWg/8UaRBibviohH64hZl5zbLNKe3oC5SdqH9NPeKaRxpK1I/y85jVRIHo2I\nP5WIM5o0AL8zqa/7CdLPcV9O+u/FWqRWw6ci4lcl4o3JcXaIiEfykQZGkf7ftDQijpV0Ouk/GAeX\niDeKVPi/RyqUi4BVpP88jYqIo/N8fR5bqiXeBqRfD/0M+J+IeLLl8V1J434nxQA/227yspZcr8vy\ncg75eq3dcFQuX3zp1gvN/rFE7eNcLfFrGdNriVVpXK/Jy9pt63WwF7dEzAahZ880H9PscuArEXHS\nIOL0/HR2sAc3bI3/AVK3zMMR8aKq+RXu70z6j80JEfGzmnIcTWqZD2qj1KRlbfp6rYMPwGhWUcuB\nEW8n/eJrH0m7tRurEGd1/ONou3We8+R84AbSjxza1rJRHR0RvyQd1mV6PenVenj+xixr09drHdwS\nMatB4RAUZ5IOfnfmcOfUqgPjXCNpTG/ELGvbr+8iYlafJm9szDrBRcTMzCrzmIiZmVXmImJmZpW5\niJiZWWUuImYNJelr+aRGSNpV0l3DnZNZKxcRsxpI+oOkpyStlPRALgCT6oofET+PiJfUFc+sLi4i\nZvXZJyImATuSTnv8sWHOx6zjXETMahYRK0jnWN9W0uGS7pD0uKTl+dznAEg6TNL1xedKCklbt8aU\nNFvSfZ3P3qw9LiJmNZM0lXQI8F8BDwJvIh3l93DgDEk7DmN6ZrUaM9wJmP0T+aGkVcBjpHNlfLbl\nUBTXSrqCdBTXW4cjQbO6uYiY1efNrUd5lbQX6TS6Lya1/CeQzqpo9k/B3VlmHZKPo/U90smqpkTE\nZNLJjnqO4PoEqaj0zL/hkCdpNkguImadM5Z05sM/Aatyq2SPwuOLgZdKermkcaSz6Jl1FRcRsw6J\niMeBo0mnSn2EdD7xSwuPLwU+TTpd7N3A9b2EMWs0H8XXzMwqc0vEzMwqcxExM7PKXETMzKwyFxEz\nM6vMRcTMzCpzETEzs8pcRMzMrDIXETMzq+z/AxruJzuHUygxAAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "rho_mixed = np.array([[1,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,1]])/2\n", + "plot_state(rho_mixed,\"paulivec\")" ] }, { @@ -286,12 +213,12 @@ "Next we must construct a family of circuits which implement a tomographically complete set of measurements of the qubit. The `statetomo.py` example library contains functions to generate these measurement circuits for general n-qubit systems. We do this by measuring in the X, Y, and Z for each qubit. This results in $3^n$ measurement circuits which must be executed to gather count statistics for the tomographic reconstruction.\n", "\n", "The function to build the circuits is:\n", - "```\n", - "build_tomo_circuits(QP, 'prep', 'qr', 'cr', qubits)\n", + "```python\n", + "tomo.build_state_tomography_circuits(QP, 'prep', qr, cr, qubits)\n", "```\n", "The function to construct an array of the the corresponding labels for these circuits is:\n", - "```\n", - "build_tomo_keys('prep', qubits)\n", + "```python\n", + "tomo.state_tomography_labels('prep', qubits)\n", "```\n", "where \n", "- `QP` is the quantum program.\n", @@ -303,14 +230,15 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 17, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "['bellX1X0', 'bellX1Y0', 'bellX1Z0', 'bellY1X0', 'bellY1Y0', 'bellY1Z0', 'bellZ1X0', 'bellZ1Y0', 'bellZ1Z0']\n" + ">> created state tomography circuits for \"bell\"\n", + "['bell_measX0X1', 'bell_measX0Y1', 'bell_measX0Z1', 'bell_measY0X1', 'bell_measY0Y1', 'bell_measY0Z1', 'bell_measZ0X1', 'bell_measZ0Y1', 'bell_measZ0Z1']\n" ] } ], @@ -318,10 +246,8 @@ "# Qubits being measured\n", "meas_qubits = [0,1]\n", "# Construct the state tomography measurement circuits in QP\n", - "build_tomo_circuits(Q_program, \"bell\", \"q\", \"c\", meas_qubits)\n", - "# construct list of tomo circuit labels \n", - "circuits = build_tomo_keys(\"bell\", meas_qubits)\n", - "print(circuits)\n" + "tomo_labels = tomo.build_state_tomography_circuits(Q_program, \"bell\", meas_qubits, qr, cr)\n", + "print(tomo_labels)\n" ] }, { @@ -337,7 +263,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 19, "metadata": { "scrolled": true }, @@ -356,10 +282,10 @@ "device = 'local_qasm_simulator'\n", "\n", "# Take 1000 shots for each measurement basis\n", - "shots = 1000\n", + "shots = 5000\n", "\n", "# Run the simulation\n", - "result = Q_program.execute(circuits, device, shots)\n", + "result = Q_program.execute(tomo_labels, device, shots)\n", "print(result)" ] }, @@ -372,38 +298,128 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 21, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Circuit: bellX1X0\n", - "Counts: {'11': 510, '00': 490}\n", - "Circuit: bellX1Y0\n", - "Counts: {'11': 277, '01': 241, '00': 240, '10': 242}\n", - "Circuit: bellX1Z0\n", - "Counts: {'01': 270, '00': 262, '10': 227, '11': 241}\n", - "Circuit: bellY1X0\n", - "Counts: {'11': 256, '00': 236, '10': 243, '01': 265}\n", - "Circuit: bellY1Y0\n", - "Counts: {'10': 493, '01': 507}\n", - "Circuit: bellY1Z0\n", - "Counts: {'11': 256, '01': 241, '00': 260, '10': 243}\n", - "Circuit: bellZ1X0\n", - "Counts: {'01': 250, '10': 245, '00': 248, '11': 257}\n", - "Circuit: bellZ1Y0\n", - "Counts: {'10': 264, '01': 258, '00': 252, '11': 226}\n", - "Circuit: bellZ1Z0\n", - "Counts: {'00': 509, '11': 491}\n" + "[{'counts': {'00': 2490, '01': 0, '10': 0, '11': 2510}, 'meas_basis': {'00': array([[ 0.25, 0.25, 0.25, 0.25],\n", + " [ 0.25, 0.25, 0.25, 0.25],\n", + " [ 0.25, 0.25, 0.25, 0.25],\n", + " [ 0.25, 0.25, 0.25, 0.25]]), '01': array([[ 0.25, -0.25, 0.25, -0.25],\n", + " [-0.25, 0.25, -0.25, 0.25],\n", + " [ 0.25, -0.25, 0.25, -0.25],\n", + " [-0.25, 0.25, -0.25, 0.25]]), '10': array([[ 0.25, 0.25, -0.25, -0.25],\n", + " [ 0.25, 0.25, -0.25, -0.25],\n", + " [-0.25, -0.25, 0.25, 0.25],\n", + " [-0.25, -0.25, 0.25, 0.25]]), '11': array([[ 0.25, -0.25, -0.25, 0.25],\n", + " [-0.25, 0.25, 0.25, -0.25],\n", + " [-0.25, 0.25, 0.25, -0.25],\n", + " [ 0.25, -0.25, -0.25, 0.25]])}, 'shots': 5000}, {'counts': {'00': 1227, '01': 1290, '10': 1266, '11': 1217}, 'meas_basis': {'00': array([[ 0.25+0.j , 0.00-0.25j, 0.25+0.j , 0.00-0.25j],\n", + " [ 0.00+0.25j, 0.25+0.j , 0.00+0.25j, 0.25+0.j ],\n", + " [ 0.25+0.j , 0.00-0.25j, 0.25+0.j , 0.00-0.25j],\n", + " [ 0.00+0.25j, 0.25+0.j , 0.00+0.25j, 0.25+0.j ]]), '01': array([[ 0.25+0.j , 0.00+0.25j, 0.25+0.j , 0.00+0.25j],\n", + " [ 0.00-0.25j, 0.25+0.j , 0.00-0.25j, 0.25+0.j ],\n", + " [ 0.25+0.j , 0.00+0.25j, 0.25+0.j , 0.00+0.25j],\n", + " [ 0.00-0.25j, 0.25+0.j , 0.00-0.25j, 0.25+0.j ]]), '10': array([[ 0.25+0.j , 0.00-0.25j, -0.25+0.j , 0.00+0.25j],\n", + " [ 0.00+0.25j, 0.25+0.j , -0.00-0.25j, -0.25+0.j ],\n", + " [-0.25+0.j , 0.00+0.25j, 0.25+0.j , 0.00-0.25j],\n", + " [-0.00-0.25j, -0.25+0.j , 0.00+0.25j, 0.25+0.j ]]), '11': array([[ 0.25+0.j , 0.00+0.25j, -0.25+0.j , -0.00-0.25j],\n", + " [ 0.00-0.25j, 0.25+0.j , 0.00+0.25j, -0.25+0.j ],\n", + " [-0.25+0.j , -0.00-0.25j, 0.25+0.j , 0.00+0.25j],\n", + " [ 0.00+0.25j, -0.25+0.j , 0.00-0.25j, 0.25+0.j ]])}, 'shots': 5000}, {'counts': {'00': 1223, '01': 1239, '10': 1248, '11': 1290}, 'meas_basis': {'00': array([[ 0.5, 0. , 0.5, 0. ],\n", + " [ 0. , 0. , 0. , 0. ],\n", + " [ 0.5, 0. , 0.5, 0. ],\n", + " [ 0. , 0. , 0. , 0. ]]), '01': array([[ 0. , 0. , 0. , 0. ],\n", + " [ 0. , 0.5, 0. , 0.5],\n", + " [ 0. , 0. , 0. , 0. ],\n", + " [ 0. , 0.5, 0. , 0.5]]), '10': array([[ 0.5, 0. , -0.5, -0. ],\n", + " [ 0. , 0. , -0. , -0. ],\n", + " [-0.5, -0. , 0.5, 0. ],\n", + " [-0. , -0. , 0. , 0. ]]), '11': array([[ 0. , 0. , -0. , -0. ],\n", + " [ 0. , 0.5, -0. , -0.5],\n", + " [-0. , -0. , 0. , 0. ],\n", + " [-0. , -0.5, 0. , 0.5]])}, 'shots': 5000}, {'counts': {'00': 1276, '01': 1249, '10': 1244, '11': 1231}, 'meas_basis': {'00': array([[ 0.25+0.j , 0.25+0.j , 0.00-0.25j, 0.00-0.25j],\n", + " [ 0.25+0.j , 0.25+0.j , 0.00-0.25j, 0.00-0.25j],\n", + " [ 0.00+0.25j, 0.00+0.25j, 0.25+0.j , 0.25+0.j ],\n", + " [ 0.00+0.25j, 0.00+0.25j, 0.25+0.j , 0.25+0.j ]]), '01': array([[ 0.25+0.j , -0.25+0.j , 0.00-0.25j, 0.00+0.25j],\n", + " [-0.25+0.j , 0.25+0.j , 0.00+0.25j, 0.00-0.25j],\n", + " [ 0.00+0.25j, -0.00-0.25j, 0.25+0.j , -0.25+0.j ],\n", + " [-0.00-0.25j, 0.00+0.25j, -0.25+0.j , 0.25+0.j ]]), '10': array([[ 0.25+0.j , 0.25+0.j , 0.00+0.25j, 0.00+0.25j],\n", + " [ 0.25+0.j , 0.25+0.j , 0.00+0.25j, 0.00+0.25j],\n", + " [ 0.00-0.25j, 0.00-0.25j, 0.25+0.j , 0.25+0.j ],\n", + " [ 0.00-0.25j, 0.00-0.25j, 0.25+0.j , 0.25+0.j ]]), '11': array([[ 0.25+0.j , -0.25+0.j , 0.00+0.25j, -0.00-0.25j],\n", + " [-0.25+0.j , 0.25+0.j , -0.00-0.25j, 0.00+0.25j],\n", + " [ 0.00-0.25j, 0.00+0.25j, 0.25+0.j , -0.25+0.j ],\n", + " [ 0.00+0.25j, 0.00-0.25j, -0.25+0.j , 0.25+0.j ]])}, 'shots': 5000}, {'counts': {'00': 0, '01': 2496, '10': 2504, '11': 0}, 'meas_basis': {'00': array([[ 0.25+0.j , 0.00-0.25j, 0.00-0.25j, -0.25+0.j ],\n", + " [ 0.00+0.25j, 0.25+0.j , 0.25+0.j , 0.00-0.25j],\n", + " [ 0.00+0.25j, 0.25-0.j , 0.25+0.j , 0.00-0.25j],\n", + " [-0.25+0.j , 0.00+0.25j, 0.00+0.25j, 0.25+0.j ]]), '01': array([[ 0.25+0.j , 0.00+0.25j, 0.00-0.25j, 0.25+0.j ],\n", + " [ 0.00-0.25j, 0.25+0.j , -0.25+0.j , 0.00-0.25j],\n", + " [ 0.00+0.25j, -0.25+0.j , 0.25+0.j , 0.00+0.25j],\n", + " [ 0.25-0.j , 0.00+0.25j, 0.00-0.25j, 0.25+0.j ]]), '10': array([[ 0.25+0.j , 0.00-0.25j, 0.00+0.25j, 0.25-0.j ],\n", + " [ 0.00+0.25j, 0.25+0.j , -0.25+0.j , 0.00+0.25j],\n", + " [ 0.00-0.25j, -0.25+0.j , 0.25+0.j , 0.00-0.25j],\n", + " [ 0.25+0.j , 0.00-0.25j, 0.00+0.25j, 0.25+0.j ]]), '11': array([[ 0.25+0.j , 0.00+0.25j, 0.00+0.25j, -0.25+0.j ],\n", + " [ 0.00-0.25j, 0.25+0.j , 0.25-0.j , 0.00+0.25j],\n", + " [ 0.00-0.25j, 0.25+0.j , 0.25+0.j , 0.00+0.25j],\n", + " [-0.25+0.j , 0.00-0.25j, 0.00-0.25j, 0.25+0.j ]])}, 'shots': 5000}, {'counts': {'00': 1186, '01': 1281, '10': 1262, '11': 1271}, 'meas_basis': {'00': array([[ 0.5+0.j , 0.0+0.j , 0.0-0.5j, 0.0+0.j ],\n", + " [ 0.0+0.j , 0.0+0.j , 0.0+0.j , 0.0+0.j ],\n", + " [ 0.0+0.5j, 0.0+0.j , 0.5+0.j , 0.0+0.j ],\n", + " [ 0.0+0.j , 0.0+0.j , 0.0+0.j , 0.0+0.j ]]), '01': array([[ 0.0+0.j , 0.0+0.j , 0.0+0.j , 0.0+0.j ],\n", + " [ 0.0+0.j , 0.5+0.j , 0.0+0.j , 0.0-0.5j],\n", + " [ 0.0+0.j , 0.0+0.j , 0.0+0.j , 0.0+0.j ],\n", + " [ 0.0+0.j , 0.0+0.5j, 0.0+0.j , 0.5+0.j ]]), '10': array([[ 0.5+0.j , 0.0+0.j , 0.0+0.5j, 0.0+0.j ],\n", + " [ 0.0+0.j , 0.0+0.j , 0.0+0.j , 0.0+0.j ],\n", + " [ 0.0-0.5j, 0.0+0.j , 0.5+0.j , 0.0+0.j ],\n", + " [ 0.0+0.j , 0.0+0.j , 0.0+0.j , 0.0+0.j ]]), '11': array([[ 0.0+0.j , 0.0+0.j , 0.0+0.j , 0.0+0.j ],\n", + " [ 0.0+0.j , 0.5+0.j , 0.0+0.j , 0.0+0.5j],\n", + " [ 0.0+0.j , 0.0+0.j , 0.0+0.j , 0.0+0.j ],\n", + " [ 0.0+0.j , 0.0-0.5j, 0.0+0.j , 0.5+0.j ]])}, 'shots': 5000}, {'counts': {'00': 1259, '01': 1195, '10': 1262, '11': 1284}, 'meas_basis': {'00': array([[ 0.5, 0.5, 0. , 0. ],\n", + " [ 0.5, 0.5, 0. , 0. ],\n", + " [ 0. , 0. , 0. , 0. ],\n", + " [ 0. , 0. , 0. , 0. ]]), '01': array([[ 0.5, -0.5, 0. , -0. ],\n", + " [-0.5, 0.5, -0. , 0. ],\n", + " [ 0. , -0. , 0. , -0. ],\n", + " [-0. , 0. , -0. , 0. ]]), '10': array([[ 0. , 0. , 0. , 0. ],\n", + " [ 0. , 0. , 0. , 0. ],\n", + " [ 0. , 0. , 0.5, 0.5],\n", + " [ 0. , 0. , 0.5, 0.5]]), '11': array([[ 0. , -0. , 0. , -0. ],\n", + " [-0. , 0. , -0. , 0. ],\n", + " [ 0. , -0. , 0.5, -0.5],\n", + " [-0. , 0. , -0.5, 0.5]])}, 'shots': 5000}, {'counts': {'00': 1230, '01': 1244, '10': 1228, '11': 1298}, 'meas_basis': {'00': array([[ 0.5+0.j , 0.0-0.5j, 0.0+0.j , 0.0-0.j ],\n", + " [ 0.0+0.5j, 0.5+0.j , 0.0+0.j , 0.0+0.j ],\n", + " [ 0.0+0.j , 0.0-0.j , 0.0+0.j , 0.0-0.j ],\n", + " [ 0.0+0.j , 0.0+0.j , 0.0+0.j , 0.0+0.j ]]), '01': array([[ 0.5+0.j , 0.0+0.5j, 0.0+0.j , 0.0+0.j ],\n", + " [ 0.0-0.5j, 0.5+0.j , 0.0-0.j , 0.0+0.j ],\n", + " [ 0.0+0.j , 0.0+0.j , 0.0+0.j , 0.0+0.j ],\n", + " [ 0.0-0.j , 0.0+0.j , 0.0-0.j , 0.0+0.j ]]), '10': array([[ 0.0+0.j , 0.0-0.j , 0.0+0.j , 0.0-0.j ],\n", + " [ 0.0+0.j , 0.0+0.j , 0.0+0.j , 0.0+0.j ],\n", + " [ 0.0+0.j , 0.0-0.j , 0.5+0.j , 0.0-0.5j],\n", + " [ 0.0+0.j , 0.0+0.j , 0.0+0.5j, 0.5+0.j ]]), '11': array([[ 0.0+0.j , 0.0+0.j , 0.0+0.j , 0.0+0.j ],\n", + " [ 0.0-0.j , 0.0+0.j , 0.0-0.j , 0.0+0.j ],\n", + " [ 0.0+0.j , 0.0+0.j , 0.5+0.j , 0.0+0.5j],\n", + " [ 0.0-0.j , 0.0+0.j , 0.0-0.5j, 0.5+0.j ]])}, 'shots': 5000}, {'counts': {'00': 2479, '01': 0, '10': 0, '11': 2521}, 'meas_basis': {'00': array([[1, 0, 0, 0],\n", + " [0, 0, 0, 0],\n", + " [0, 0, 0, 0],\n", + " [0, 0, 0, 0]]), '01': array([[0, 0, 0, 0],\n", + " [0, 1, 0, 0],\n", + " [0, 0, 0, 0],\n", + " [0, 0, 0, 0]]), '10': array([[0, 0, 0, 0],\n", + " [0, 0, 0, 0],\n", + " [0, 0, 1, 0],\n", + " [0, 0, 0, 0]]), '11': array([[0, 0, 0, 0],\n", + " [0, 0, 0, 0],\n", + " [0, 0, 0, 0],\n", + " [0, 0, 0, 1]])}, 'shots': 5000}]\n" ] } ], "source": [ - "for c in circuits:\n", - " print('Circuit:', c)\n", - " print('Counts:', Q_program.get_counts(c))" + "bell_tomo_dat = tomo.state_tomography_data(Q_program, 'bell', meas_qubits)\n", + "print(bell_tomo_dat)" ] }, { @@ -414,7 +430,7 @@ "\n", "To reconstruct the maximum likelihod estimate of the measured quantum state we use the following function:\n", "```\n", - "state_tomography(QP, circuits, shots, total_qubits, meas_qubits)\n", + "fit_state(tomo_data, method, options)\n", "```\n", "where\n", "- `QP` is the quantum program containing the measurement results\n", @@ -426,35 +442,42 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 23, "metadata": {}, "outputs": [], "source": [ - "total_qubits = 2\n", - "rho_fit = state_tomography(Q_program, circuits, shots, total_qubits, meas_qubits)" + "rho_fit = tomo.fit_state(bell_tomo_dat, method='wizard')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "We can compare the reconstructed state to the target state vector. We use the Fidelity function, which for a comparing a density matrix $\\rho$ to a pure state $|\\psi\\rangle$ is given by $F = \\sqrt{\\langle \\psi| \\rho |\\psi\\rangle}$. This may be done by the function `fidelity(rho, psi)`. Finally we may wish to visualize the reconstructed state. This can be done by using various plotting libraries. One conveient one is the following which uses the [QuTiP (Quantum Toolbox in Python)](http://qutip.org/) library." + "We can compare the reconstructed state to the target state vector. We use the Fidelity function, which for a comparing a density matrix $\\rho$ to a pure state $|\\psi\\rangle$ is given by $F = \\sqrt{\\langle \\psi| \\rho |\\psi\\rangle}$. This may be done by the function **`state_fidelity`** from the **`qiskit.tools.qi`** module." ] }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 24, "metadata": {}, "outputs": [ { "data": { + "image/png": "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\n9RS4nTgl7inANRExBbgm3+/NzIh4lQuImVk99NcSGSVpJv9sgbTeH1lBDrOAGfn2N0n/hD+5grhm\nZtZhiui9cZG7kPpsfUTElgNKQHoiItbLtwU83rjfMt8fgeWk7qwLImJuHzFnA7MBJk2atPO8efMG\nkuJqVqxYwYQJE2oXq+7x6pxb1fGcWzF3PLRsjWkTR6/LI88uX23a1ElbDXpu3Rav6txmzpx5a+Ee\nn4jo+AX4BfD7Hi6zgCda5n28lxib5uuXAIuA1xd57Z133jmqdN1119UyVt3j1Tm3quM5t2K2/+Ih\na1zOnXfRGtOGIrdui1d1bsDCKLh9L3o+kQGJiD16e0zSQ5I2jogH85GCH+4lxgP5+mFJPwKmAzf0\nNK+ZmQ2Odo6d1SlXAO/Ot98NXN46g6TxktZp3Ab2IrVkzMxsCNWhiJwB7CnpHmCPfB9Jm0ian+eZ\nBNwoaRFwM/CTiPjZkGRrZmbPG5TurL5ExGPAm3qY/mdg33x7GbDDIKdmZmb9qENLxMzMupSLiJmZ\nleYiYmZmpbmImJlZaS4iZmZWmouImZmV5iJiZmaluYiYmVlpLiJmZlaai4iZmZXmImJmZqW5iJiZ\nWWkuImZmVpqLiJmZleYiYmZmpbmImJlZaS4iZmZWmouImZmV5iJiZmaluYiYmVlpLiJmZlaai4iZ\nmZXmImJmZqW5iJiZWWkuImZmVpqLiJmZleYiYmZmpbmImJlZaS4iZmZWmouImZmV5iJiZmaluYiY\nmVlpLiJmZlaai4iZmZXmImJmZqW5iJiZWWkuImZmVpqLiJmZleYiYmZmpbmImJlZaS4iZmZWmouI\nmZmV5iJiZmaluYiYmVlpLiJmZlaai4iZmZU25EVE0kGSFktaJWlaH/PtLeluSUslnTKYOZqZWc+G\nvIgAvwcOAG7obQZJI4FzgX2AqcA7JE0dnPTMzKw3o4Y6gYi4E0BSX7NNB5ZGxLI87zxgFnBHxxM0\ns45YdOK8NaYtWLCARYesOd3qa8iLSEGbAvc13b8f2LW3mSXNBmbnuysk3V1hLhsCj9YwVt3j1Tm3\nquM5t3rEq3NuVcerOreXFp1xUIqIpF8AG/Xw0Mcj4vKqXy8i5gJzq44LIGlhRPQ6djNUseoer865\nVR3PudUjXp1zqzpe1bm1Y1CKSETsMcAQDwCTm+5vlqeZmdkQqsPAehG3AFMkbSlpNHAocMUQ52Rm\nNuwNeRGRtL+k+4FXAz+RdFWevomk+QARsRI4FrgKuBO4NCIWD1HKVXaTVd3lVud4dc6t6njOrR7x\n6pxb1fE60n1fhCJiqF7bzMy63JC3RMzMrHu5iJiZWWkuIl1K/fw784VmOC3vcFpW634uIkNkoBuK\naBrMqutGR1Jln6+IiCqXU9LIur5vUeFApaQNJE2oalklrV3xetgiX9duXUjaQtKW+Xat8ss/PJo0\n1HmAi0i/JI2o4gMkaZykt0uaDAMrApL2lHSspJc2x1JWIre1Je0qaf12n9uXiFhVRRxJb5S0bZUb\n14h4rqp4+Qs9saLPyb6SxlZYgE8ADs5FeGQF8T4O7AXPH9OutPz8r0naLOc3oGWW9AlJ06vILTsV\n+Iok9fZZKbrOJR0gaWI7z+nHx4FP9fOag1L4XET6ERGrmjbSA3m/3kD6mfInJZ2YN4wb5Nd4vggU\njPVqYAZwlqQvSZolaf3I2owF8K/AF4GTcqHbVtK4Np6/BklzJB05kBhN3gP8W66RA/7M5vf/DEmj\nKvqizQHe01drqcjr5GU7CXhNRKxqfk7jdol8HyOt1y0i4rmm1ylrPeAjkkY04g3AGOBZ4HNQyU7H\nvwAfyLEGlJuktYCDgdcDH+ptviI7IpJGAZcBH+ntOe2s15zbbOBoSW8bSG5VcBHphaQdJS2S9FlJ\nO8HqH/ISX8QA/g/wCOm4Xx8EPiPpGEnTJI0r+IGcSipG3wYWAOsARwEXSPqUpN0lrdXmB2gz4PvA\n5qQ9188Bx0t6s6SX5g9tGe+RtHHOe2S+LrPRPgPYGti3otbN+0jv/04V7aHfBRwnafemIr5azILr\nQ6T/Ql0oaZvmHYLG7XY3DBHx76TPyWWSNsrTVklaJ7eO50ga30bIjwJrAfMkrd3Ir52cmnJ7irRh\nfY2kMxrTB9D6PwnYRdKXmmKV3Ul4L/DfwO6korl96wx5R2SdArGOBJ4BZkma1dMMba7Xo4EbgbcD\nX1TuEmzJ7YQ212t5EeFLDxfgFcDJwNeB/wJ+AnwYeGmJWFsDfwK2z/e3BI4Avgb8CPgecB6wdYFY\n4/NzTmiKtR/wCeCbwJXAJcDIgrltBzwFHNG03KcA84HrgYtJX85JbS7zBjmXL/fy+CYF4zT+y3QM\ncC+wW9NjIxuPt5HXNOD/AZ8Fbmh5bES+3rzEOv4o6bQGU5qmbZYvpwMvaiPWRcB/Ahvm+xOA1+b3\n4EslchsJfCcv86z8efsJqZVySRtxRufrjYDLgf17W19F82r6DF5GaoGV/b6ula9fSSqaM8vGynFu\nA47Mty8Bvt7yHuwOPFQw1m+BfUmF6TfAi0k7DI3lfw1wdpu5HZ5vzwe+kG+PydevIx31vPTyt/Ve\nDdYLddMlf+mOAHYGdgDeSuqD/CHwK+Bb+QMxpr8vTdNG8FTSxn9My+MvI3XXXNz4IhTI7w3AImBG\n07QRwLakVslhbSzrXGApcA2wRctjuwFnA9e2kZuabm+SY/8b6TwwryMVzu8CDwNrt7leziS1mF49\ngHX7jcaGmNSCOL3l8RcBf203t/zc7+TPxoeBq0k7Hw8D57URYzwwkXTU6ouA6/Jn7g+korzGhruX\nOKNJOxcfys97AlgF/Bz4NPBOUstzYpvLuDnpCK+3A38EPkkaI3lJifdrg7wBPRZ4DlgM/DtwEG3u\ntOR4LyYV3FuAW/MybgdMaDPOJsBjTfd3AJYBs5qmzQO+WDDW8sZ3A/gF8NHGOsrX3wcuaCO3vzTd\nn5lzm9407XuU2Nkoe/E/1nsgaVPgZ6QP9q9IXQzLSF/MrYAdSRvyd0fEPQVjbk4qFIsj4vjcDP4H\nac/4VcDfIuLCNnKcA3wMeBvw+4j4R9NjI6Jgt4+kx4A3ASeSNpwHNceQ9CZgx4g4s2hu+fm7AZNI\nfdR7kt6/Z4BfkjaIP4p8fpg+YmxI6uc+jNRtt19+7t9IG8VrgSsjn5OmYF6PAm+IiMWS9gS+AhwO\nLIyIkHQC8K8RMbNArLHAu4GNSeNK6wJbAD/Nl9tIh+l5NlLXTV+x3kw6JtwmeZkfIm2w/29expsk\nrR0Rfy+4nHNIOyd/JxW3e0ndqO8jtZaeKRKnKd5hpI3yhvlyOWl8ZCywds53CfDV5s9iH/GuIY2H\nTCWtx9+Rdt4mk079MB74YaQjcvcX682k78FWOd7VpEI3GvgLae//t6T3sd+xkty1tktEvEnSyIh4\nTtJxpBb6rhFxn6THSd+LP/UT6zRgakQckO+/DfgqsGf881xKf8mx7i2Y204RsVdTbmeSWjrTIuLp\norlVZrCqVTdegPVJg6a/B34NnAa8Edg+r8h24x1M6kq5kFRQHiM1va/PH4D+nj+e1PppNI0fIPXb\nvo/UjF+P3CVTMJ/9gLvy7c1J52mZk++PytfLKLj3m+ffDXiQVHwXkVpw55HGcMa1+X59Pcf4MvB+\nUtfdFGAP0hf6P4Gr24g3q2l51yJttL5GU5cO6URnby8Y712kvulL83s5Pa+LR2mzSwz4EqmgHUpq\nnW4EfIG0R93WnnSOdyJrtixF6pqZS2q5jmoj3vGkFtb2NLU6SEXvIFKx+3zBWNuSWkXvyPfHND22\nEWmn4zTgtQXj3Ze/U/uQuo4b3TpbkVpi1wJfa2NZDwM2av4e5NuXk7qNDwHuKBjrz63Lkd+rm/Lt\ng4Db28jtZGCbxme48f6RtgNzcm6L2/28DOQyaC/U7Ze8ATsduDt/sXcp+Lz9SM3VXwI3kwrHP4D/\nnTeIhboT8gbvB6QN/QJSn/Y784bmt6SugB+T9kCKLtO1wClN948idQVsnO9PoalZXzDm6/KXufEl\nHEHaK7wTOK2NOCPzF+b1vTw+ntRVsX0bMT8DHNeI37SM95MKwno0dRUUiPcWeijaeZ1cStpD77eo\nk1oeD/by2H8AZ7W5DrYDngZObFoHjfGeqXmDc2gb8bYmbahf0TRtBC1ducC6BeONJ3UHnZzvj6KN\ngtYSayqpIL2raZp6yG3DgvG2IY1fzmiNBexC2mn4K3BMgVjb5u/62EasfD2GtHO0P6l78X+1sV6f\nAk5qyq2xXvfOse4HPljmvSx7GbQXeqFc8pdnV2C9gvP+mjToegSpG2A9Ur/vOU3z9TsYSeonPzZ/\nMNfYoycN9H0P+JeCyzEqf1nWz/fXyhu9n5AH+YCzgO+0+d4cTtowj6FpcJ80vrSEvPdZINYmpH73\n35LGGQ4k7Vm21Zppye1AUottLE0bd9LPJW8gdWEWWt68sbkXeGNTfOXL5Lyx+WjBWONJrarPNq2L\nRpGbTurqKdQ6ys9pjHNdTf4hSMvyHg08ToFxrqYN36dJY3ptjxX1EncGqZtpRg/rqZ3W9FzSDsq1\nvSxrobG8Hpb1+z0tK2lH5DlyYSiwXn8EnJrvj2parwcB95CKfb+xWtbrVb0s6/dybmOKxKvqMmgv\n5MtqH9KppD27UwcYZwQFf4XVQ4wx5NZUywfxtaQ9rd2A/6GNQWxSX/bvSF1CX88b7S3J3TGkvf0F\nFCjATTHXJ23kf0caYziT1KW4aZsbiE1J3ZKLSV2JjdzG5ccvIO3RvqqN97+vjc1upP740QXze31e\nvhk9PHYS8N02lvUx0jjbt4HLmqY3uij3B77S5udlc9Kg8Jfz/XGkYrwP6U9vR5b4DM4hFeIdaKNw\n9LKs32pZ1sbG+p3k1ucAl3UcqfB9gjTuUzRWj+s1f/+uBH5a4Xo9knSajLbfx4FcBvXFhvOFNZvX\nu5K6xfaoKH7bP3ftI9aHgBXAvSWf37rh/1Le8E+ll5/8Foy7Bamv/O5cENr+lVYPuZ2Vc3sLbbS6\ncqzeNqx75w3/J9uM1+tGFRhfMEZf41yNDes9tDHO1RS7pzG9a0itgKLdu32N620HrNNGPkWWdQlw\nQEXLen1e3kLLWnC9FtqhKrisd9FGi7Wqy6C+mC/PfyAaK/0c2txLGqT8xuaN44Bza9rwLyENthce\nw+gj5ghSN0/hFk0/ud1NaiFtVyJGTxub63K8gf5YYjvSL74KtzapeJyLisb0cqxKx/Vqvqz9rdf1\naO8/NUWWtfB4XpUX/8R3COV//K6KAj+JHGySXgw8HW3+FLSPeCNIA5N3R8QTVcSsSs5tOmlPr9/c\nJO1H+mnvJNI40tak/5ecSSokT0TEIwXijCQNwO9K6ut+ivRz3FeR/nuxFqnV8JmI+E2BeKNynB0j\n4vF8pIERpP83LYmIEySdRfoPxmEF4o0gFf4fkArlfGAl6T9PIyLiuDxfr8eWaok3kfTroV8A/xMR\nT7c8vjtp3O/U6Odn23Ve1oLrdWlezkFfr5Ubisrliy/deqHeP5aofJyrJX4lY3otsUqN69V5Wbtt\nvQ704paI2QA09kzzMc2uAi6KiFMHEKfx09mBHtywNf6HSN0yj0XES8vm13R/V9J/bE6OiF9UlONI\nUst8QBulOi1r3ddrFXwARrOSWg6MeAfpF1/7Sdqj3VhNcVbFP4+2W+U5Ty4EbiL9yKFtLRvVkRHx\na9JhXaZWk16lh+evzbLWfb1WwS0Rswo0HYLiHNLB784Z6pxadWCcaziN6Q2bZW379V1EzKpT542N\nWSe4iJiZWWkeEzEzs9JcRMzMrDQXETMzK81FxKymJH0jn9QISbtLunuoczJr5SJiVgFJf5L0jKQV\nkh7KBWBCVfEj4pcR8fKq4plVxUXErDr7RcQEYCfSaY8/McT5mHWci4hZxSLiAdI51reTdJSkOyU9\nKWlZPvc5AJKOlHRj83MlhaRtWmNKmiHp/s5nb9YeFxGzikmaTDoE+G+Ah4G3ko7yexRwtqSdhjA9\ns0qNGuoEzF5AfixpJbCcdK6Mz7cciuJ6SVeTjuJ621AkaFY1FxGz6ryt9SivkvYhnUb3ZaSW/zjS\nWRXNXhDcnWXWIfk4Wj8gnaxqUkSsRzrZUeMIrk+Rikpj/o0GPUmzAXIRMeuc0aQzHz4CrMytkr2a\nHl8EvEKr7z96AAAAaElEQVTSqySNIZ1Fz6yruIiYdUhEPAkcRzpV6uOk84lf0fT4EuCzpNPF3gPc\n2EMYs1rzUXzNzKw0t0TMzKw0FxEzMyvNRcTMzEpzETEzs9JcRMzMrDQXETMzK81FxMzMSnMRMTOz\n0v4/y/jllDCZ5SkAAAAASUVORK5CYII=\n", "text/plain": [ - "0.99440816856466219" + "" ] }, - "execution_count": 12, "metadata": {}, - "output_type": "execute_result" + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Fidelity with ideal state\n", + "F = 0.997739655665\n" + ] } ], "source": [ @@ -462,8 +485,10 @@ "target = np.array([1., 0., 0., 1.]/np.sqrt(2.))\n", "\n", "# calculate fidelity\n", - "F_fit = state_fidelity(rho_fit, target)\n", - "F_fit" + "F_fit = state_fidelity(rho_fit, [0.707107, 0, 0, 0.707107])\n", + "plot_state(rho_fit, 'paulivec')\n", + "print(\"Fidelity with ideal state\")\n", + "print(\"F =\", F_fit)" ] }, { @@ -479,7 +504,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 45, "metadata": {}, "outputs": [ { @@ -489,52 +514,7 @@ "running on backend: ibmqx2\n", "status = RUNNING (20 seconds)\n", "status = RUNNING (40 seconds)\n", - "status = RUNNING (60 seconds)\n", - "status = RUNNING (80 seconds)\n", - "status = RUNNING (100 seconds)\n", - "status = RUNNING (120 seconds)\n", - "status = RUNNING (140 seconds)\n" - ] - }, - { - "ename": "ConnectionError", - "evalue": "HTTPSConnectionPool(host='quantumexperience.ng.bluemix.net', port=443): Max retries exceeded with url: /api/Jobs/d20532bfbb6321adf01aef09309b92c8?access_token=dVGLKK5FFt0ZWOIDnsr1BrqYxKSY0fkuoMOgvnDtCsuQDkxiPAsQE9zFpMHpWw6d (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 8] nodename nor servname provided, or not known',))", - "output_type": "error", - "traceback": [ - "\u001b[0;31m-----------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mgaierror\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m~/anaconda/envs/QISKitenv/lib/python3.6/site-packages/urllib3/connection.py\u001b[0m in \u001b[0;36m_new_conn\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 140\u001b[0m conn = connection.create_connection(\n\u001b[0;32m--> 141\u001b[0;31m (self.host, self.port), self.timeout, **extra_kw)\n\u001b[0m\u001b[1;32m 142\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/anaconda/envs/QISKitenv/lib/python3.6/site-packages/urllib3/util/connection.py\u001b[0m in \u001b[0;36mcreate_connection\u001b[0;34m(address, timeout, source_address, socket_options)\u001b[0m\n\u001b[1;32m 59\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 60\u001b[0;31m \u001b[0;32mfor\u001b[0m \u001b[0mres\u001b[0m \u001b[0;32min\u001b[0m \u001b[0msocket\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mgetaddrinfo\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mhost\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mport\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfamily\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msocket\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mSOCK_STREAM\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 61\u001b[0m \u001b[0maf\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msocktype\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mproto\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcanonname\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msa\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mres\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/anaconda/envs/QISKitenv/lib/python3.6/socket.py\u001b[0m in \u001b[0;36mgetaddrinfo\u001b[0;34m(host, port, family, type, proto, flags)\u001b[0m\n\u001b[1;32m 742\u001b[0m \u001b[0maddrlist\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 743\u001b[0;31m \u001b[0;32mfor\u001b[0m \u001b[0mres\u001b[0m \u001b[0;32min\u001b[0m \u001b[0m_socket\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mgetaddrinfo\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mhost\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mport\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfamily\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtype\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mproto\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mflags\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 744\u001b[0m \u001b[0maf\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msocktype\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mproto\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcanonname\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msa\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mres\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mgaierror\u001b[0m: [Errno 8] nodename nor servname provided, or not known", - "\nDuring handling of the above exception, another exception occurred:\n", - "\u001b[0;31mNewConnectionError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m~/anaconda/envs/QISKitenv/lib/python3.6/site-packages/urllib3/connectionpool.py\u001b[0m in \u001b[0;36murlopen\u001b[0;34m(self, method, url, body, headers, retries, redirect, assert_same_host, timeout, pool_timeout, release_conn, chunked, body_pos, **response_kw)\u001b[0m\n\u001b[1;32m 599\u001b[0m \u001b[0mbody\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mbody\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mheaders\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mheaders\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 600\u001b[0;31m chunked=chunked)\n\u001b[0m\u001b[1;32m 601\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/anaconda/envs/QISKitenv/lib/python3.6/site-packages/urllib3/connectionpool.py\u001b[0m in \u001b[0;36m_make_request\u001b[0;34m(self, conn, method, url, timeout, chunked, **httplib_request_kw)\u001b[0m\n\u001b[1;32m 344\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 345\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_validate_conn\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mconn\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 346\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mSocketTimeout\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mBaseSSLError\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0me\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/anaconda/envs/QISKitenv/lib/python3.6/site-packages/urllib3/connectionpool.py\u001b[0m in \u001b[0;36m_validate_conn\u001b[0;34m(self, conn)\u001b[0m\n\u001b[1;32m 843\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mgetattr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mconn\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'sock'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;31m# AppEngine might not have `.sock`\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 844\u001b[0;31m \u001b[0mconn\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mconnect\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 845\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/anaconda/envs/QISKitenv/lib/python3.6/site-packages/urllib3/connection.py\u001b[0m in \u001b[0;36mconnect\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 283\u001b[0m \u001b[0;31m# Add certificate verification\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 284\u001b[0;31m \u001b[0mconn\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_new_conn\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 285\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/anaconda/envs/QISKitenv/lib/python3.6/site-packages/urllib3/connection.py\u001b[0m in \u001b[0;36m_new_conn\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 149\u001b[0m raise NewConnectionError(\n\u001b[0;32m--> 150\u001b[0;31m self, \"Failed to establish a new connection: %s\" % e)\n\u001b[0m\u001b[1;32m 151\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mNewConnectionError\u001b[0m: : Failed to establish a new connection: [Errno 8] nodename nor servname provided, or not known", - "\nDuring handling of the above exception, another exception occurred:\n", - "\u001b[0;31mMaxRetryError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m~/anaconda/envs/QISKitenv/lib/python3.6/site-packages/requests/adapters.py\u001b[0m in \u001b[0;36msend\u001b[0;34m(self, request, stream, timeout, verify, cert, proxies)\u001b[0m\n\u001b[1;32m 439\u001b[0m \u001b[0mretries\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmax_retries\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 440\u001b[0;31m \u001b[0mtimeout\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mtimeout\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 441\u001b[0m )\n", - "\u001b[0;32m~/anaconda/envs/QISKitenv/lib/python3.6/site-packages/urllib3/connectionpool.py\u001b[0m in \u001b[0;36murlopen\u001b[0;34m(self, method, url, body, headers, retries, redirect, assert_same_host, timeout, pool_timeout, release_conn, chunked, body_pos, **response_kw)\u001b[0m\n\u001b[1;32m 648\u001b[0m retries = retries.increment(method, url, error=e, _pool=self,\n\u001b[0;32m--> 649\u001b[0;31m _stacktrace=sys.exc_info()[2])\n\u001b[0m\u001b[1;32m 650\u001b[0m \u001b[0mretries\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msleep\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/anaconda/envs/QISKitenv/lib/python3.6/site-packages/urllib3/util/retry.py\u001b[0m in \u001b[0;36mincrement\u001b[0;34m(self, method, url, response, error, _pool, _stacktrace)\u001b[0m\n\u001b[1;32m 387\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mnew_retry\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mis_exhausted\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 388\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mMaxRetryError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0m_pool\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0murl\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0merror\u001b[0m \u001b[0;32mor\u001b[0m \u001b[0mResponseError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcause\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 389\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mMaxRetryError\u001b[0m: HTTPSConnectionPool(host='quantumexperience.ng.bluemix.net', port=443): Max retries exceeded with url: /api/Jobs/d20532bfbb6321adf01aef09309b92c8?access_token=dVGLKK5FFt0ZWOIDnsr1BrqYxKSY0fkuoMOgvnDtCsuQDkxiPAsQE9zFpMHpWw6d (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 8] nodename nor servname provided, or not known',))", - "\nDuring handling of the above exception, another exception occurred:\n", - "\u001b[0;31mConnectionError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 8\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 9\u001b[0m \u001b[0;31m# Run the simulation\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 10\u001b[0;31m \u001b[0mresult\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mQ_program\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mexecute\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcircuits\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdevice\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mshots\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmax_credits\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mwait\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m20\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtimeout\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m240\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 11\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mresult\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/gitshare/qiskit-sdk-py-dev/qiskit/_quantumprogram.py\u001b[0m in \u001b[0;36mexecute\u001b[0;34m(self, name_of_circuits, backend, shots, max_credits, wait, timeout, silent, basis_gates, coupling_map, seed)\u001b[0m\n\u001b[1;32m 730\u001b[0m self.compile(name_of_circuits, backend, shots, max_credits,\n\u001b[1;32m 731\u001b[0m basis_gates, coupling_map, seed)\n\u001b[0;32m--> 732\u001b[0;31m \u001b[0moutput\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrun\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mwait\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtimeout\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msilent\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0msilent\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 733\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0moutput\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 734\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/gitshare/qiskit-sdk-py-dev/qiskit/_quantumprogram.py\u001b[0m in \u001b[0;36mrun\u001b[0;34m(self, wait, timeout, silent)\u001b[0m\n\u001b[1;32m 605\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__to_execute\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m{\u001b[0m\u001b[0;34m}\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 606\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;34m{\u001b[0m\u001b[0;34m\"status\"\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;34m\"Error\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m\"result\"\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0moutput\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'error'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m}\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 607\u001b[0;31m \u001b[0mjob_result\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mwait_for_job\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0moutput\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'id'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mwait\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mwait\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtimeout\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mtimeout\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msilent\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0msilent\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 608\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 609\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mjob_result\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'status'\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;34m'Error'\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/gitshare/qiskit-sdk-py-dev/qiskit/_quantumprogram.py\u001b[0m in \u001b[0;36mwait_for_job\u001b[0;34m(self, jobid, wait, timeout, silent)\u001b[0m\n\u001b[1;32m 680\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0msilent\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 681\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"status = %s (%d seconds)\"\u001b[0m \u001b[0;34m%\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mjob\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'status'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtimer\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 682\u001b[0;31m \u001b[0mjob\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__api\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_job\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mjobid\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 683\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;34m'status'\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mjob\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 684\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mpprint\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mpformat\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/anaconda/envs/QISKitenv/lib/python3.6/site-packages/IBMQuantumExperience/IBMQuantumExperience.py\u001b[0m in \u001b[0;36mget_job\u001b[0;34m(self, id_job)\u001b[0m\n\u001b[1;32m 493\u001b[0m \u001b[0mrespond\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m\"error\"\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m\"Job ID not specified\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 494\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mrespond\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 495\u001b[0;31m \u001b[0mjob\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mreq\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'/Jobs/'\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mid_job\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 496\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mjob\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 497\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/anaconda/envs/QISKitenv/lib/python3.6/site-packages/IBMQuantumExperience/IBMQuantumExperience.py\u001b[0m in \u001b[0;36mget\u001b[0;34m(self, path, params, with_token)\u001b[0m\n\u001b[1;32m 166\u001b[0m \u001b[0mretries\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mretries\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 167\u001b[0m \u001b[0;32mwhile\u001b[0m \u001b[0mretries\u001b[0m \u001b[0;34m>\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;31m# Repeat until no error\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 168\u001b[0;31m \u001b[0mrespond\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mrequests\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0murl\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mverify\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mverify\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 169\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcheck_token\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrespond\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 170\u001b[0m \u001b[0mrespond\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mrequests\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0murl\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mverify\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mverify\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/anaconda/envs/QISKitenv/lib/python3.6/site-packages/requests/api.py\u001b[0m in \u001b[0;36mget\u001b[0;34m(url, params, **kwargs)\u001b[0m\n\u001b[1;32m 70\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 71\u001b[0m \u001b[0mkwargs\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msetdefault\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'allow_redirects'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 72\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mrequest\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'get'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0murl\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mparams\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mparams\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 73\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 74\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/anaconda/envs/QISKitenv/lib/python3.6/site-packages/requests/api.py\u001b[0m in \u001b[0;36mrequest\u001b[0;34m(method, url, **kwargs)\u001b[0m\n\u001b[1;32m 56\u001b[0m \u001b[0;31m# cases, and look like a memory leak in others.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 57\u001b[0m \u001b[0;32mwith\u001b[0m \u001b[0msessions\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mSession\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0msession\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 58\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0msession\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrequest\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmethod\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mmethod\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0murl\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0murl\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 59\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 60\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/anaconda/envs/QISKitenv/lib/python3.6/site-packages/requests/sessions.py\u001b[0m in \u001b[0;36mrequest\u001b[0;34m(self, method, url, params, data, headers, cookies, files, auth, timeout, allow_redirects, proxies, hooks, stream, verify, cert, json)\u001b[0m\n\u001b[1;32m 500\u001b[0m }\n\u001b[1;32m 501\u001b[0m \u001b[0msend_kwargs\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mupdate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msettings\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 502\u001b[0;31m \u001b[0mresp\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mprep\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0msend_kwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 503\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 504\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mresp\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/anaconda/envs/QISKitenv/lib/python3.6/site-packages/requests/sessions.py\u001b[0m in \u001b[0;36msend\u001b[0;34m(self, request, **kwargs)\u001b[0m\n\u001b[1;32m 610\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 611\u001b[0m \u001b[0;31m# Send the request\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 612\u001b[0;31m \u001b[0mr\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0madapter\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrequest\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 613\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 614\u001b[0m \u001b[0;31m# Total elapsed time of the request (approximately)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/anaconda/envs/QISKitenv/lib/python3.6/site-packages/requests/adapters.py\u001b[0m in \u001b[0;36msend\u001b[0;34m(self, request, stream, timeout, verify, cert, proxies)\u001b[0m\n\u001b[1;32m 502\u001b[0m \u001b[0;32mraise\u001b[0m \u001b[0mProxyError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0me\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mrequest\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mrequest\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 503\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 504\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mConnectionError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0me\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mrequest\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mrequest\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 505\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 506\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mClosedPoolError\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0me\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mConnectionError\u001b[0m: HTTPSConnectionPool(host='quantumexperience.ng.bluemix.net', port=443): Max retries exceeded with url: /api/Jobs/d20532bfbb6321adf01aef09309b92c8?access_token=dVGLKK5FFt0ZWOIDnsr1BrqYxKSY0fkuoMOgvnDtCsuQDkxiPAsQE9zFpMHpWw6d (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 8] nodename nor servname provided, or not known',))" + "{'status': 'COMPLETED', 'result': 'all done'}\n" ] } ], @@ -561,14 +541,36 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 47, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Circuit: bellX1X0\n", + " Counts: {'00000': 542, '00001': 33, '00010': 27, '00011': 398}\n", + "Circuit: bellX1Y0\n", + " Counts: {'00000': 318, '00001': 257, '00010': 218, '00011': 207}\n", + "Circuit: bellX1Z0\n", + " Counts: {'00000': 323, '00001': 242, '00010': 241, '00011': 194}\n", + "Circuit: bellY1X0\n", + " Counts: {'00000': 295, '00001': 237, '00010': 278, '00011': 190}\n", + "Circuit: bellY1Y0\n", + " Counts: {'00000': 73, '00001': 455, '00010': 462, '00011': 10}\n", + "Circuit: bellY1Z0\n", + " Counts: {'00000': 272, '00001': 252, '00010': 231, '00011': 245}\n", + "Circuit: bellZ1X0\n", + " Counts: {'00000': 303, '00001': 221, '00010': 274, '00011': 202}\n", + "Circuit: bellZ1Y0\n", + " Counts: {'00000': 287, '00001': 249, '00010': 222, '00011': 242}\n", + "Circuit: bellZ1Z0\n", + " Counts: {'00000': 504, '00001': 38, '00010': 27, '00011': 431}\n" + ] + } + ], "source": [ - "# print measurement results\n", - "for c in circuits:\n", - " print('Circuit:', c)\n", - " print('Counts:', Q_program.get_counts(c))" + "bell_tomo_qx = tomo.state_tomography_data(Q_program, 'bell', meas_qubits)" ] }, { @@ -580,46 +582,40 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 49, "metadata": { "scrolled": false }, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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\nt+mvO0v9PB4wSesD3wW2AP4IHBwRT/Yw3x+Bp4EXgBURMa3qXMzMrD39tURaL4HbiUvingJcGxFT\ngGvz497MjIhXu4CYmdVDfy2RUZJm8o8WSOvjkRXkMAuYke9/g/RL+JMriGtmZh2miN4bF7kLqc/W\nR0RsOaAEpKciYkK+L+DJxuOW+f4ALCN1Z10QEfP6iDkbmA0wadKknefPnz+QFFexfPlyxo8fX7tY\ndY9X59yqjufcirnrkaWrTZs4+qU89vyyVaZNnbTVoOfWbfGqzm3mzJm3F+7xiYiO34CfA7/r4TYL\neKpl3id7ibFJ/vtyYCHwhiLvvfPOO0eVrr/++lrGqnu8OudWdTznVsz2Xzxktdu58y9abdpQ5NZt\n8arODbgtCm7fi15PZEAiYo/enpP0iKSNIuLhfKbgR3uJ8VD++6ikHwLTgRt7mtfMzAZHO+fO6pQr\ngCPy/SOAy1tnkDRO0rqN+8BepJaMmZkNoToUkTOAPSXdB+yRHyNpY0lX5XkmATdJWgjcAvw4In46\nJNmamdmLBqU7qy8R8QTw5h6m/wnYN99fCuwwyKmZmVk/6tASMTOzLuUiYmZmpbmImJlZaS4iZmZW\nmouImZmV5iJiZmaluYiYmVlpLiJmZlaai4iZmZXmImJmZqW5iJiZWWkuImZmVpqLiJmZleYiYmZm\npbmImJlZaS4iZmZWmouImZmV5iJiZmaluYiYmVlpLiJmZlaai4iZmZXmImJmZqW5iJiZWWkuImZm\nVpqLiJmZleYiYmZmpbmImJlZaS4iZmZWmouImZmV5iJiZmaluYiYmVlpo4Y6ATMbnhaeOH+1aQsW\nLGDhIatPt/pyS8TMzEpzETEzs9JcRMzMrDQXETMzK81FxMzMSnMRMTOz0lxEzMysNBcRMzMrzUXE\nzMxKcxExM7PSXETMzKw0FxEzMyvNRcTMzEpzETEzs9KGvIhIOkjSIkkrJU3rY769Jd0raYmkUwYz\nRzMz69mQFxHgd8ABwI29zSBpJHAusA8wFXinpKmDk56ZmfVmyC9KFRF3A0jqa7bpwJKIWJrnnQ/M\nAu7qeIJmZtarIS8iBW0CPND0+EFg195mljQbmJ0fLpd0b4W5bAA8XsNYdY9X59yqjufc6hGvzrlV\nHa/q3DYvOuOgFBFJPwc27OGpf4uIy6t+v4iYB8yrOi6ApNsiotexm6GKVfd4dc6t6njOrR7x6pxb\n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\n+nsAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Fidelity with ideal state\n", + "F = 0.946485921001\n" + ] + } + ], "source": [ - "rho_fit_real = state_tomography(Q_program, circuits, shots, 5, meas_qubits)\n", + "rho_fit_real = tomo.fit_state(bell_tomo_qx, method='wizard')\n", "# target state is (|00>+|11>)/sqrt(2)\n", "target = np.array([1., 0., 0., 1.]/np.sqrt(2.))\n", "\n", - "F_fit_real = state_fidelity(rho_fit_real, target)\n", - "F_fit_real" + "F_fit_real = state_fidelity(rho_fit_real, [0.707107, 0, 0, 0.707107])\n", + "plot_state(rho_fit_real, 'paulivec')\n", + "print(\"Fidelity with ideal state\")\n", + "print(\"F =\", F_fit_real)" ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "plot_state(rho_fit_real,\"city\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "plot_state(rho_fit_real,\"qsphere\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [] } ], "metadata": { @@ -628,18 +624,6 @@ "display_name": "Python 3", "language": "python", "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.1" } }, "nbformat": 4,