diff --git a/.buildinfo b/.buildinfo new file mode 100644 index 00000000..66366d9e --- /dev/null +++ b/.buildinfo @@ -0,0 +1,4 @@ +# Sphinx build info version 1 +# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. +config: 1b90b7a87d83483e91aa630c474b09cf +tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/.doctrees/algorithms.doctree b/.doctrees/algorithms.doctree new file mode 100644 index 00000000..ec91dd1c Binary files /dev/null and b/.doctrees/algorithms.doctree differ diff --git a/.doctrees/api.doctree b/.doctrees/api.doctree new file mode 100644 index 00000000..6a9788f4 Binary files /dev/null and b/.doctrees/api.doctree differ diff --git a/.doctrees/environment.pickle b/.doctrees/environment.pickle new file mode 100644 index 00000000..533ba551 Binary files /dev/null and b/.doctrees/environment.pickle differ diff --git a/.doctrees/example_big_circuit.doctree b/.doctrees/example_big_circuit.doctree new file mode 100644 index 00000000..64e1db75 Binary files /dev/null and b/.doctrees/example_big_circuit.doctree differ diff --git a/.doctrees/example_deutsch_jozsa.doctree b/.doctrees/example_deutsch_jozsa.doctree new file mode 100644 index 00000000..5618c721 Binary files /dev/null and b/.doctrees/example_deutsch_jozsa.doctree differ diff --git a/.doctrees/example_grover.doctree b/.doctrees/example_grover.doctree new file mode 100644 index 00000000..bab1dad1 Binary files /dev/null and b/.doctrees/example_grover.doctree differ diff --git a/.doctrees/example_grover_factors.doctree b/.doctrees/example_grover_factors.doctree new file mode 100644 index 00000000..62d74b86 Binary files /dev/null and b/.doctrees/example_grover_factors.doctree differ diff --git a/.doctrees/example_grover_hash.doctree b/.doctrees/example_grover_hash.doctree new file mode 100644 index 00000000..28013d82 Binary files /dev/null and b/.doctrees/example_grover_hash.doctree differ diff --git a/.doctrees/example_grover_subset.doctree b/.doctrees/example_grover_subset.doctree new file mode 100644 index 00000000..d8a9761c Binary files /dev/null and b/.doctrees/example_grover_subset.doctree differ diff --git a/.doctrees/example_grover_sudoku.doctree b/.doctrees/example_grover_sudoku.doctree new file mode 100644 index 00000000..8a2cea40 Binary files /dev/null and b/.doctrees/example_grover_sudoku.doctree differ diff --git a/.doctrees/example_simon.doctree b/.doctrees/example_simon.doctree new file mode 100644 index 00000000..2997de7d Binary files /dev/null and b/.doctrees/example_simon.doctree differ diff --git a/.doctrees/example_unitary_of_f.doctree b/.doctrees/example_unitary_of_f.doctree new file mode 100644 index 00000000..71bba919 Binary files /dev/null and b/.doctrees/example_unitary_of_f.doctree differ diff --git a/.doctrees/exporter.doctree b/.doctrees/exporter.doctree new file mode 100644 index 00000000..309ccec5 Binary files /dev/null and b/.doctrees/exporter.doctree differ diff --git a/.doctrees/generated/qlasskit.algorithms.grover.Grover.doctree b/.doctrees/generated/qlasskit.algorithms.grover.Grover.doctree new file mode 100644 index 00000000..120baf62 Binary files /dev/null and b/.doctrees/generated/qlasskit.algorithms.grover.Grover.doctree differ diff --git a/.doctrees/generated/qlasskit.algorithms.qalgorithm.doctree b/.doctrees/generated/qlasskit.algorithms.qalgorithm.doctree new file mode 100644 index 00000000..77bc221c Binary files /dev/null and b/.doctrees/generated/qlasskit.algorithms.qalgorithm.doctree differ diff --git a/.doctrees/generated/qlasskit.qcircuit.gates.doctree b/.doctrees/generated/qlasskit.qcircuit.gates.doctree new file mode 100644 index 00000000..a41277d5 Binary files /dev/null and b/.doctrees/generated/qlasskit.qcircuit.gates.doctree differ diff --git a/.doctrees/generated/qlasskit.qcircuit.qcircuit.QCircuit.doctree b/.doctrees/generated/qlasskit.qcircuit.qcircuit.QCircuit.doctree new file mode 100644 index 00000000..9a7fb124 Binary files /dev/null and b/.doctrees/generated/qlasskit.qcircuit.qcircuit.QCircuit.doctree differ diff --git a/.doctrees/generated/qlasskit.qcircuit.qcircuitwrapper.QCircuitWrapper.doctree b/.doctrees/generated/qlasskit.qcircuit.qcircuitwrapper.QCircuitWrapper.doctree new file mode 100644 index 00000000..210f1b41 Binary files /dev/null and b/.doctrees/generated/qlasskit.qcircuit.qcircuitwrapper.QCircuitWrapper.doctree differ diff --git a/.doctrees/generated/qlasskit.qlassfun.QlassF.doctree b/.doctrees/generated/qlasskit.qlassfun.QlassF.doctree new file mode 100644 index 00000000..7b975f60 Binary files /dev/null and b/.doctrees/generated/qlasskit.qlassfun.QlassF.doctree differ diff --git a/.doctrees/generated/qlasskit.qlassfun.qlassf.doctree b/.doctrees/generated/qlasskit.qlassfun.qlassf.doctree new file mode 100644 index 00000000..c28ce830 Binary files /dev/null and b/.doctrees/generated/qlasskit.qlassfun.qlassf.doctree differ diff --git a/.doctrees/generated/qlasskit.qlassfun.qlassfa.doctree b/.doctrees/generated/qlasskit.qlassfun.qlassfa.doctree new file mode 100644 index 00000000..6e58ed12 Binary files /dev/null and b/.doctrees/generated/qlasskit.qlassfun.qlassfa.doctree differ diff --git a/.doctrees/how_it_works.doctree b/.doctrees/how_it_works.doctree new file mode 100644 index 00000000..0cbc3c6e Binary files /dev/null and b/.doctrees/how_it_works.doctree differ diff --git a/.doctrees/index.doctree b/.doctrees/index.doctree new file mode 100644 index 00000000..944a44c3 Binary files /dev/null and b/.doctrees/index.doctree differ diff --git a/.doctrees/quickstart.doctree b/.doctrees/quickstart.doctree new file mode 100644 index 00000000..8ba92093 Binary files /dev/null and b/.doctrees/quickstart.doctree differ diff --git a/.doctrees/supported.doctree b/.doctrees/supported.doctree new file mode 100644 index 00000000..7bb1ab34 Binary files /dev/null and b/.doctrees/supported.doctree differ diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 00000000..e69de29b diff --git a/_images/0bbdd89eb860f79383739a338f04baa3d8ea7e54646d1bd690b5b22e96f2fa4a.png b/_images/0bbdd89eb860f79383739a338f04baa3d8ea7e54646d1bd690b5b22e96f2fa4a.png new file mode 100644 index 00000000..5053ce3f Binary files /dev/null and b/_images/0bbdd89eb860f79383739a338f04baa3d8ea7e54646d1bd690b5b22e96f2fa4a.png differ diff --git a/_images/18da646c905ecbbabade2933b32d33141624835efe4bc3d00deb9641993228fc.png b/_images/18da646c905ecbbabade2933b32d33141624835efe4bc3d00deb9641993228fc.png new file mode 100644 index 00000000..f6f568bb Binary files /dev/null and b/_images/18da646c905ecbbabade2933b32d33141624835efe4bc3d00deb9641993228fc.png differ diff --git a/_images/1be99e37f13150ae81db33daa1ab2beb28fb6ea6b341a213e05f0f61f52f1d0c.png b/_images/1be99e37f13150ae81db33daa1ab2beb28fb6ea6b341a213e05f0f61f52f1d0c.png new file mode 100644 index 00000000..8acd7cf0 Binary files /dev/null and b/_images/1be99e37f13150ae81db33daa1ab2beb28fb6ea6b341a213e05f0f61f52f1d0c.png differ diff --git a/_images/274e5b7a04d1b45c692c85a2df1435fc8fead62305c8707868952747e0ca9a74.png b/_images/274e5b7a04d1b45c692c85a2df1435fc8fead62305c8707868952747e0ca9a74.png new file mode 100644 index 00000000..eb034c42 Binary files /dev/null and b/_images/274e5b7a04d1b45c692c85a2df1435fc8fead62305c8707868952747e0ca9a74.png differ diff --git a/_images/27a749800d923fb69b5d38e7722422621f8acf4ee5c2b6f517f89d74a936444a.png b/_images/27a749800d923fb69b5d38e7722422621f8acf4ee5c2b6f517f89d74a936444a.png new file mode 100644 index 00000000..ded32487 Binary files /dev/null and b/_images/27a749800d923fb69b5d38e7722422621f8acf4ee5c2b6f517f89d74a936444a.png differ diff --git a/_images/2915c0b805d9c8511df8953092a6bcabff47bf8837755424101f63b16dfa26c7.png b/_images/2915c0b805d9c8511df8953092a6bcabff47bf8837755424101f63b16dfa26c7.png new file mode 100644 index 00000000..015c5061 Binary files /dev/null and b/_images/2915c0b805d9c8511df8953092a6bcabff47bf8837755424101f63b16dfa26c7.png differ diff --git a/_images/293285b423513d39c4a73e871f2211a526039c0ce9d988d5f7d9abe704adabc2.png b/_images/293285b423513d39c4a73e871f2211a526039c0ce9d988d5f7d9abe704adabc2.png new file mode 100644 index 00000000..ea911e7e Binary files /dev/null and b/_images/293285b423513d39c4a73e871f2211a526039c0ce9d988d5f7d9abe704adabc2.png differ diff --git a/_images/37afe42937c3ad9b42eae8b9bb2821891d10c2c845dd4d77462ec4486194799a.png b/_images/37afe42937c3ad9b42eae8b9bb2821891d10c2c845dd4d77462ec4486194799a.png new file mode 100644 index 00000000..f0ba8733 Binary files /dev/null and b/_images/37afe42937c3ad9b42eae8b9bb2821891d10c2c845dd4d77462ec4486194799a.png differ diff --git a/_images/44c9a3aa43eda23fe096518b175fdade8ee74a3e2c36a0a34f565ca369046c0b.png b/_images/44c9a3aa43eda23fe096518b175fdade8ee74a3e2c36a0a34f565ca369046c0b.png new file mode 100644 index 00000000..cfc19c7f Binary files /dev/null and b/_images/44c9a3aa43eda23fe096518b175fdade8ee74a3e2c36a0a34f565ca369046c0b.png differ diff --git a/_images/491cb9b1407c5f41003d5da03c7ef3a35fa8acf294c42364e650599ca92ede80.png b/_images/491cb9b1407c5f41003d5da03c7ef3a35fa8acf294c42364e650599ca92ede80.png new file mode 100644 index 00000000..e9ce6fd0 Binary files /dev/null and b/_images/491cb9b1407c5f41003d5da03c7ef3a35fa8acf294c42364e650599ca92ede80.png differ diff --git a/_images/5174bb0c6ea65db88c99511f9658fc0a3c9afceb5058f8a187fa4d462337954a.png b/_images/5174bb0c6ea65db88c99511f9658fc0a3c9afceb5058f8a187fa4d462337954a.png new file mode 100644 index 00000000..08ee9fb9 Binary files /dev/null and b/_images/5174bb0c6ea65db88c99511f9658fc0a3c9afceb5058f8a187fa4d462337954a.png differ diff --git a/_images/5180fed86778dda3aef0affffed4a07321f62d24284f239022a14036426635b7.png b/_images/5180fed86778dda3aef0affffed4a07321f62d24284f239022a14036426635b7.png new file mode 100644 index 00000000..7123f208 Binary files /dev/null and b/_images/5180fed86778dda3aef0affffed4a07321f62d24284f239022a14036426635b7.png differ diff --git a/_images/54dbe21e590e5ff31a74aa41c1e7db7e8b05a5eea8718ec877d21d82a5b931ae.png b/_images/54dbe21e590e5ff31a74aa41c1e7db7e8b05a5eea8718ec877d21d82a5b931ae.png new file mode 100644 index 00000000..aed757e9 Binary files /dev/null and b/_images/54dbe21e590e5ff31a74aa41c1e7db7e8b05a5eea8718ec877d21d82a5b931ae.png differ diff --git a/_images/642fa811702d720260ecca7dc2f819674d1abd91223b3474a21deba2feece93f.png b/_images/642fa811702d720260ecca7dc2f819674d1abd91223b3474a21deba2feece93f.png new file mode 100644 index 00000000..70c8ab03 Binary files /dev/null and b/_images/642fa811702d720260ecca7dc2f819674d1abd91223b3474a21deba2feece93f.png differ diff --git a/_images/8e1bf07bbbab0c0a595d9144710a8af6c22cf9a2661a42ccd01e899e85ffb12e.png b/_images/8e1bf07bbbab0c0a595d9144710a8af6c22cf9a2661a42ccd01e899e85ffb12e.png new file mode 100644 index 00000000..0e762d3e Binary files /dev/null and b/_images/8e1bf07bbbab0c0a595d9144710a8af6c22cf9a2661a42ccd01e899e85ffb12e.png differ diff --git a/_images/b05e4f779a0b4670c648fd32d723f5b20c77402dfdbb9e21f6f2d293de8c4fa6.png b/_images/b05e4f779a0b4670c648fd32d723f5b20c77402dfdbb9e21f6f2d293de8c4fa6.png new file mode 100644 index 00000000..3745701d Binary files /dev/null and b/_images/b05e4f779a0b4670c648fd32d723f5b20c77402dfdbb9e21f6f2d293de8c4fa6.png differ diff --git a/_images/be3abba3958dd65682b17997972df3f803e8698846e140e95797a368e23e2236.png b/_images/be3abba3958dd65682b17997972df3f803e8698846e140e95797a368e23e2236.png new file mode 100644 index 00000000..63a751f6 Binary files /dev/null and b/_images/be3abba3958dd65682b17997972df3f803e8698846e140e95797a368e23e2236.png differ diff --git a/_images/beafab15f915183b637909d537345580eba0f3a7fb66329311dd39909074d252.png b/_images/beafab15f915183b637909d537345580eba0f3a7fb66329311dd39909074d252.png new file mode 100644 index 00000000..9348565b Binary files /dev/null and b/_images/beafab15f915183b637909d537345580eba0f3a7fb66329311dd39909074d252.png differ diff --git a/_images/c11daf869c135eac3524304f0b40bd3d1ae514f73d769f0de4a9d577f9da51ba.png b/_images/c11daf869c135eac3524304f0b40bd3d1ae514f73d769f0de4a9d577f9da51ba.png new file mode 100644 index 00000000..cde433bd Binary files /dev/null and b/_images/c11daf869c135eac3524304f0b40bd3d1ae514f73d769f0de4a9d577f9da51ba.png differ diff --git a/_images/c7ef1f01b80363cad58e444c34d85d42122df00d7131ad1f1fec37e2b481452c.png b/_images/c7ef1f01b80363cad58e444c34d85d42122df00d7131ad1f1fec37e2b481452c.png new file mode 100644 index 00000000..658952e4 Binary files /dev/null and b/_images/c7ef1f01b80363cad58e444c34d85d42122df00d7131ad1f1fec37e2b481452c.png differ diff --git a/_images/d5eecd09f0811026c2add991efdd35dd7e04fdefb326b0414c542dd0e32b203a.png b/_images/d5eecd09f0811026c2add991efdd35dd7e04fdefb326b0414c542dd0e32b203a.png new file mode 100644 index 00000000..2ff69c21 Binary files /dev/null and b/_images/d5eecd09f0811026c2add991efdd35dd7e04fdefb326b0414c542dd0e32b203a.png differ diff --git a/_images/f3b3957c4548aaf8d56ce1f0541c259dddd1458d1a1e74443a16ae7a87e145f7.png b/_images/f3b3957c4548aaf8d56ce1f0541c259dddd1458d1a1e74443a16ae7a87e145f7.png new file mode 100644 index 00000000..65bad653 Binary files /dev/null and b/_images/f3b3957c4548aaf8d56ce1f0541c259dddd1458d1a1e74443a16ae7a87e145f7.png differ diff --git a/_images/fc1d93821ee269bc89af7272200aae50aed37301baea1590dd42a82a9a297029.png b/_images/fc1d93821ee269bc89af7272200aae50aed37301baea1590dd42a82a9a297029.png new file mode 100644 index 00000000..24350e2c Binary files /dev/null and b/_images/fc1d93821ee269bc89af7272200aae50aed37301baea1590dd42a82a9a297029.png differ diff --git a/_sources/algorithms.rst.txt b/_sources/algorithms.rst.txt new file mode 100644 index 00000000..20fd2430 --- /dev/null +++ b/_sources/algorithms.rst.txt @@ -0,0 +1,16 @@ +Algorithms +==================================== + +Qlasskit implements high level representation of quantum algorithms that relies on black boxes functions and oracles. + +Grover search +----------------- + + +Simon periodicity +---------------------- + + + +Deutsch Jozsa +---------------------- diff --git a/_sources/api.rst.txt b/_sources/api.rst.txt new file mode 100644 index 00000000..9a31913d --- /dev/null +++ b/_sources/api.rst.txt @@ -0,0 +1,15 @@ +API +=== + +.. autosummary:: + :toctree: generated + :recursive: + + qlasskit.qlassfun.qlassf + qlasskit.qlassfun.qlassfa + qlasskit.qlassfun.QlassF + qlasskit.algorithms.qalgorithm + qlasskit.algorithms.grover.Grover + qlasskit.qcircuit.qcircuit.QCircuit + qlasskit.qcircuit.qcircuitwrapper.QCircuitWrapper + qlasskit.qcircuit.gates \ No newline at end of file diff --git a/_sources/example_big_circuit.ipynb.txt b/_sources/example_big_circuit.ipynb.txt new file mode 100644 index 00000000..ee235e22 --- /dev/null +++ b/_sources/example_big_circuit.ipynb.txt @@ -0,0 +1,74 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Working with big circuits" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Qlasskit is capable of producing large circuit without any issue. The only thing that you have to do, is to use the `fastOptimizer`, since running CSE is too slow on large expressions lists.\n", + "\n", + "In the next example we are going to create a quantum circuit with 64 `Qint8` in input, and one `Qint8` in output, resulting on a circuit of ~21984 qubits and ~1044 gates in around 5 seconds." + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [], + "source": [ + "from qlasskit import Qint8, Qlist, boolopt, qlassfa\n", + "\n", + "@qlassfa(bool_optimizer=boolopt.fastOptimizer)\n", + "def test(a_list: Qlist[Qint8, 64]) -> Qint8:\n", + " h_val = Qint8(0)\n", + " for c in a_list:\n", + " h_val = h_val + c\n", + " return h_val" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "QCircuit(21984 gates, 1044 qubits)\n" + ] + } + ], + "source": [ + "print(test.circuit())" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "qlasskit_310-env", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.13" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/_sources/example_deutsch_jozsa.ipynb.txt b/_sources/example_deutsch_jozsa.ipynb.txt new file mode 100644 index 00000000..cbb83460 --- /dev/null +++ b/_sources/example_deutsch_jozsa.ipynb.txt @@ -0,0 +1,131 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Deutsch Jozsa algorithm" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "from qlasskit import qlassf, Qint4\n", + "\n", + "\n", + "@qlassf\n", + "def f(a: Qint4) -> bool:\n", + " return a > 7" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "f.export(\"qiskit\").draw(\"mpl\")" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "from qlasskit.algorithms import DeutschJozsa\n", + "\n", + "q_algo = DeutschJozsa(f)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjMAAAFvCAYAAAC/9krTAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAzF0lEQVR4nO3df3TV9Z3v+9dOCGwIkBCiBEggEBKBQKAjoIhHhQu9IAa1VaEHbDmHVtdRrpQ6hOloR7sWazCVmY4MvXOZOlw6U8tNC1otobYzQqc0Z+QEEYokKcRJgIRsaxqCIYGQH/v+kWNaJMDeOzv7k+/n83ysxUqb/d17v/H9fX98+f1+93f7gsFgUAAAAB4VZ7oAAACA3iDMAAAATyPMAAAATyPMAAAATyPMAAAATyPMAAAATyPMAAAATyPMAAAATyPMAAAATyPMAAAATyPMAAAATyPMAAAATyPMAAAATyPMAAAATyPMAAAATyPMAAAATyPMAAAATyPMAAAATyPMAAAATyPMAAAATyPMAAAATyPMAAAATyPMAAAATyPMAAAATyPMAAAATyPMAAAATyPMAAAATyPMAAAATyPMAAAATyPMAAAATyPMAAAATyPMAAAATyPMAAAATyPMAHBKVVWVHnroId1yyy3y+XxavXq16ZIA9NIA0wUAQCytXr1av/3tb/Xcc88pLS1NWVlZpksC0Eu+YDAYNF0EAMRCa2urBg8erLVr12rr1q2mywEQJZxmAuCMjz76SMFgUCkpKaZLARBFHJlxxOXLl/XSSy9p165dOnv2rAYOHKiMjAwtXrxYL7/8sunyrhEMSlc6TFcRnoHxks9nugpcz+rVq/WDH/zgmt8fOHBA9913X+wLQsyxDvY9U+sgYcYRa9as0Y4dO/TlL39Zd911l9rb23Xq1CkdPHhQ7733nunyrtHaLm0sMl1FeAqXS4O4Cq3f+o//+A8dOnRI69ev18MPP6wvfOELkqRFixZp1KhRhqtDLLAO9j1T6yBLryPeeOMNLVmypMf/MgVcMHfuXI0ePVrr169XXl6eVq1aZbokxBjroL24ZsYRSUlJOnHihD744APTpQCAEayD9iLMOOLv/u7vdP78eU2fPl1ZWVn66le/qjfffFOdnZ2mSwOAmGAdtBdhxhEPPvigqqur9S//8i9asGCB3nnnHT300EO67777dOXKFdPlAUCfYx20F2HGISkpKVq1apW+//3v6z//8z9VUFCggwcP6s033zRdGgDEBOugnQgzDujo6FBjY+NVv/P5fPrc5z4nSWpoaDBQFQDEDuug3fg0kwOampo0evRoLVu2TJ/73Od06623qqqqSv/wD/+gESNGKD8/33SJANCnWAftRphxwJAhQ/T1r39d77zzjv7t3/5NFy9e7B7qb37zmxozZozpEgGgT7EO2o0w44CBAwdq8+bNpssAjMvMzBT3CXUT66DduGYGAAB4GmEGAAB4GqeZPK6ioiKs7X//+9/rxz/+sR577DHdeuutIT1n8uTJkZQGxAQzgHD2gUj6L7EP9HccmXHMxx9/rO9973v6+OOPTZcCGMEMuI3+28mJMFNfX6+CggJNmjRJfr9fGRkZWrdunZqbm7VmzRr5fD5t27bNdJkAACAC1oeZo0ePavr06Xr55ZcVCAQ0depUtbW1aevWrVq+fLnKy8slSTNnzjRbKPpETdmv9Moqn94r3nLdbV5Z5dObWx6IYVUAEDsurINWh5n6+nrl5+crEAjo2WefVV1dnY4cOaJAIKDCwkIVFxertLRUPp9PeXl5pssFAAARsDrMPPPMM6qpqdHatWu1ZcsWDRs2rPuxgoICzZgxQ+3t7crMzNTw4cMNVho7SUlJys/PV1JSkulSACOYAbfRfztZG2bKy8tVVFSk1NTU694o6fbbb5ckzZgx46rfV1VVadmyZRo2bJhGjBihL3/5y/rDH/7Q5zXHQnp6ur7zne8oPT3ddCmAEcyA2+i/naz9aPauXbvU2dmplStXaujQoT1uM3jwYElXh5mmpibNnz9fKSkp2rVrly5duqSCggI98MADKikpUVyct/Nfa2urAoGA0tLSNGjQINPlxEz7lRZdaqo3XQb6AVdnAF1c7r/N66C1YWb//v2SpPnz5193m5qaGklXh5l//Md/VG1trX79619r3LhxkrqS/F133aW33npLDz30UN8VHQOVlZV65JFHtHv3buXm5pouJ2be3fOC3t3zguky0A+4OgPo4nL/bV4HrQ0zp0+fliSNHz++x8fb29tVUlIi6eows3fvXt19993dQUaS5s6dq4kTJ+pnP/tZRGFm1qxZCgQCYT8vFKtXrw5r+7q6OknSvn379P7774f0nJ07d4ZZVe/FJwzWw5tORe31ps1/Qtl3PNrjY2+8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", + "text/plain": [ + "
" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc = q_algo.export(\"qiskit\")\n", + "qc.draw(\"mpl\")" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAoUAAAH5CAYAAAD3IUTzAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA5+UlEQVR4nO3deVTVdeL/8de9bAKyCKhIIOKSmmi4ZmiCG5o2VpNpVqbOZKWjjuNM9WsmM1t0bBnrqzW5hWU2mZbalAalouWGS7iVCikCKiYugKhs9/7+8Hvv1yuLiMDl4vNxjme678/73vu+9kfP+awGs9lsFgAAAG5pRnsvAAAAAPZHFAIAAIAoBAAAAFEIAAAAEYUAAAAQUQgAAAARhQAAAJDkbO8F3GpMJpNOnDghLy8vGQwGey8HAADUcWazWbm5uQoKCpLRWPb+QKKwhp04cUIhISH2XgYAALjFpKenKzg4uMztRGEN8/LyknTlX4y3t7edVwMAAOq6nJwchYSEWBukLERhDbMcMvb29iYKAQBAjbneaWtcaAIAAACiEAAAAEQhANSoTZs26Xe/+52CgoJkMBi0atUqm+1ms1kvvfSSmjRpInd3d/Xr10/JycnW7ampqfrjH/+osLAwubu7q0WLFpo2bZoKCgpK/b6UlBR5eXnJ19e3Gn8VgLqAKASAGpSXl6c777xT7733Xqnb33jjDf3P//yPPvjgA23fvl2enp4aMGCALl++LEk6ePCgTCaT5s2bpwMHDmj27Nn64IMP9Pe//73EZxUWFmrEiBG65557qvU3AagbDGaz2WzvRdxKcnJy5OPjo+zsbC40AW5xBoNBK1eu1AMPPCDpyl7CoKAg/fWvf9Xf/vY3SVJ2drYaN26sxYsX65FHHin1c9588039+9//1pEjR2zGn3/+eZ04cUJ9+/bV5MmTdf78+er8OQBqqYq2B3sKAaCWOHr0qDIzM9WvXz/rmI+Pj+666y5t3bq1zPdlZ2fLz8/PZmz9+vVavnx5mXskAeBaRCEA1BKZmZmSpMaNG9uMN27c2LrtWikpKZozZ46efvpp69iZM2c0evRoLV68mCMSACqMKAQAB3X8+HENHDhQDz/8sMaOHWsdHzt2rB599FH16tXLjqsD4GiIQgCoJQIDAyVJp06dshk/deqUdZvFiRMn1Lt3b0VGRmr+/Pk229avX6+33npLzs7OcnZ21h//+EdlZ2fL2dlZH374YfX+CAAOiyeaAEAtERYWpsDAQK1bt04RERGSrpwgvn37do0bN8467/jx4+rdu7c6d+6s2NjYEg+437p1q4qLi62vV69erVmzZmnLli267bbbauS3AHA8RCEA1KALFy4oJSXF+vro0aNKSkqSn5+fmjZtqsmTJ+u1115Tq1atFBYWpqlTpyooKMh6hfLx48cVHR2t0NBQvfXWWzp9+rT1syx7E9u2bWvznTt37pTRaFR4eHj1/0AADosoBIAatHPnTvXu3dv6esqUKZKkUaNGafHixXruueeUl5enp556SufPn1fPnj317bffql69epKk7777TikpKUpJSVFwcLDNZ3OHMQA3g/sU1jDuUwgAAGoS9ykEAABAhRGFAAAAIAoBAABAFAIAAEBEIQAAAEQUAgAAQEQhAAAARBQCAABARCEAAABEFAIAAEBEIQAAAEQUAgAAQEQhAAAARBQCAABARCEAAABEFAIAAEBEIQAAAEQUAgAAQEQhAAAAJDnbewGoHmPfsfcKAABARSyYbO8VXMGeQgAAABCFAAAAqKVR+Mknn+jpp59Wly5d5ObmJoPBoMWLF5c5PycnR1OmTFFoaKjc3NzUrFkzPfvss7pw4UKp800mk+bMmaP27dvL3d1dDRs21IgRI3TkyJEyvyMuLk5RUVHy8vKSt7e3evfurXXr1t3sTwUAAKgVamUUvvjii5o/f76OHTumJk2alDs3Ly9PUVFRmj17ttq0aaO//OUvat26td566y316dNHly9fLvGep59+WpMmTZLZbNakSZM0cOBAffnll+ratauSk5NLzP/kk080cOBA/fLLLxo9erRGjRqlAwcOqH///lqxYkWV/W4AAAB7qZVRuHDhQqWmpur06dN65plnyp37xhtvKCkpSc8//7zi4uL0z3/+U3FxcXr++ee1Y8cOzZ4922b+hg0btHDhQvXq1Uu7d+/WrFmztGTJEq1atUpnz57VhAkTbOafO3dOEydOVEBAgHbv3q05c+Zozpw52r17t/z9/TVu3Djl5uZW+d8BAABATaqVUdivXz+FhoZed57ZbNbChQtVv359TZ061Wbb1KlTVb9+fS1cuNBmfMGCBZKkV199Va6urtbxe++9V9HR0YqPj1daWpp1fPny5Tp//rwmTpyo4OBg63hwcLAm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rdShQwc1atRIX375pY4dO6aIiAitXr1aISEhdvwFAG5V3KcQAKqQyWSSJH3wwQfy8/NT//79rdvOnj0rZ2dnmc1mvffee4qNjdXbb7+tX375RWPGjFFSUpK+/fZbey0dwC2OKASAKmS51czSpUsVExNjvR+hJB05ckTJyckaPny4evbsKWdnZxUUFKhevXoaN26cPDw8tHfvXm5YDcAuiEIAqCKWmNu2bZtOnTqlZs2a2dx8OjExURkZGRo3bpykK3sVLReUWC4ycXFxsbllDQDUFC5vA4AqYom5RYsWSZL+/e9/6+eff9aAAQN055136rvvvlPTpk111113WQPS8p7Dhw8rLy9PMTEx9lk8gFseUQgAVezZZ59Vs2bN9MUXX+irr77SV199JX9/f+Xl5enee++VdCUGLUF4/vx5bdiwQfXr19fAgQPtuXQAtzCuPgaAalJUVKTExER9/vnnWrlypdLT0yVJHTp0UHR0tGJiYjRw4EAdOnRI9957r/r27WvdywgANY0oBIAakJubq40bN2rp0qVas2aNcnNz5erqqm7duqlBgwb673//q8TERHXp0sXeSwVwiyIKAaCGZWZm6ptvvtGnn36qH374QUVFRWrcuLFOnjxp76UBuIURhQBgRwcPHtSSJUvUsmVLjRkzxt7LAXALIwoBAADAfQoBAABAFAIAAEBEIQAAAEQUAgAAQEQhAAAARBQCAABARCEAAABEFAIAAEBEIQAAAEQUAgAAQNL/BxiXs8lKQi0SAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from qiskit import Aer, QuantumCircuit, transpile\n", + "from qiskit.visualization import plot_histogram\n", + "\n", + "qc.measure_all()\n", + "simulator = Aer.get_backend(\"aer_simulator\")\n", + "circ = transpile(qc, simulator)\n", + "result = simulator.run(circ).result()\n", + "counts = result.get_counts(circ)\n", + "\n", + "counts_readable = q_algo.decode_counts(counts)\n", + "plot_histogram(counts_readable)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "qlasskit_310-env", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.13" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/_sources/example_grover.ipynb.txt b/_sources/example_grover.ipynb.txt new file mode 100644 index 00000000..aa416ec2 --- /dev/null +++ b/_sources/example_grover.ipynb.txt @@ -0,0 +1,167 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Grover search\n", + "\n", + "Qlasskit offer a class to easily perform a `Grover` search over a qlasskit oracle. \n", + "First, we define a function named `and_all` that returns `True` iff all the element of an input list `a_list` are `True`. We want to use a Grover search to find the input value that led to a `True` result of the function." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "from qlasskit import qlassf, Qlist, Qint2\n", + "\n", + "\n", + "@qlassf\n", + "def and_all(a_list: Qlist[bool, 4]) -> bool:\n", + " r = True\n", + " for i in a_list:\n", + " r = r and i\n", + " return r" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The qlasskit compiler will produce an optimized quantum circuit performing the given function." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAALAAAAFvCAYAAADqqEEQAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAa+ElEQVR4nO3df1CU973o8fci0eXHEvlhslYQQcQIAdYj8UhuThIcPBOOiUlukyZHNMlc23E6YUJ7vGKb3NT2/FGjdaa3Sm+P6Z2207n3cmiT9tZInPRmyJwSpkkhFEqQaAUhLrCaDRBhBRV27x/bmBCWH7vsDz4Pn9eMk7jP893no759ePbZVU0ej8eDUkJFRXoApeZDA1aiacBKNA1YiaYBK9E0YCWaBqxE04CVaBqwEk0DVqJpwEo0DViJpgEr0TRgJZoGrETTgJVoGrASTQNWomnASjQNWImmASvRNGAlmgasRNOAlWgasBJNA1aiacBKNA1YiaYBK9E0YCWaBqxE04CVaBqwEk0DVqJpwEo0DViJpgEr0TRgJZoGrETTgJVoGrASTQNWomnASjQNWImmASvRNGAlmgasRNOAlWgasBJNA1aiacBKNA1YibYoAnY6nVRWVpKVlYXZbCYtLY2KigpcLhd79uzBZDJRVVUV6TFDyvUx2Fug+0/e/7o+jvREwREd6QFCraWlhdLSUhwOB3FxceTk5NDX18exY8fo7OxkYGAAAJvNFtlBQ8TZCT1NMHhx6rbENEgvhJS14Z8rWEwej8cT6SFCxel0snHjRux2O/v27ePgwYNYLBYAjhw5woEDB4iOjmZiYoKhoSESEhIiPHFwXXgXOutn32/tP0DG34d+nlAwdMA7d+6kurqa8vJyjh8/PmW7zWajtbWVjIwMurq6IjBh6PT+BTp+P/f9N/wjrMoP3TyhYthr4I6ODmpqakhJSeHQoUM+99m0aRMABQUFkx6/cOECO3bswGKxkJiYyFNPPcXHH8u5aJwYh/NzOPN+3vl67zppDBtwdXU1brebsrIy4uPjfe4TExMDTA54eHiY4uJi7HY71dXVvPzyy9TX1/Pggw/idrvDMvt8XT4LN0b9W3NjFC6fC808oWTYF3F1dXUAFBcXT7uP3W4HJgf88ssv09vbyx/+8AdWr14NQGpqKnfffTcnT57kkUceCd3QQeL4IMB1HbAyJ7izhJphA+7p6QEgPT3d5/bx8XEaGhqAyQGfOnWKe+6552a8AEVFRWRmZvLaa68FFHBhYSEOh8PvdYE6+M+1ZNxeMPuOX9D0TisPVWwPwUSzs1qtNDU1+b3OsAG7XC4ARkd9fy2tqanB6XRisVjIyMi4+fiZM2d4/PHHp+yfm5vLmTNnAprF4XDQ29sb0NpAjI35ef3wN6NjV8M6ZzAYNmCr1crg4CDNzc0UFRVN2tbf38/+/fsByM/Px2Qy3dw2ODjI8uXLpzxfUlISZ8+eDXiWcBq8GliEg65eVq1aFeRp5ibQnyPDBlxSUkJHRweHDx9m27ZtZGdnA9DY2Mju3btxOp1AeN7ACORL43wM2uG9f/d/XcW/PsbBnz0W/IFCyLB3ISorK0lOTubixYvk5uaSl5fHunXr2Lx5M5mZmWzduhWYegstMTGRoaGhKc83MDBAUlJSOEaft+WrID7FvzXxKXBrZE6+82LYgFNTU6mvr2f79u2YzWa6u7tJSkrixIkT1NbWcu6c957RFwPesGGDz2vdM2fOsGHDhrDMPl8mE+SUwpJb5rb/klsg95+866Qx9Dtx0xkZGSEhIQGTycTw8DCxsbE3tx09epTnn3+erq4uUlNTAXj33XfZsmULv/nNb3j00UcjNbbfPumDlt/OfE/4lhiwPQq3fil8cwXTogz40yDXr1/PBx9Mvml65coV8vLySElJ4Xvf+x5jY2NUVlayYsUK/vjHPxIVJeuL1o1R6GuH3la4OvjZ4yYTZN0HX8r1RiyVrF+NIGlrawOmXj4AJCQkUFdXx8qVK3nyySf56le/yt13382pU6fExQveONMLoei/wD174Za/fbG5Jdb7uOR4wcB3IWYyU8AAa9eu5dSpU+EcKeRMJjBb4NPfgxKvd32Rd0oJgtkCVnIsyjPwp5+TUPItyjOwMg4NWImmASvRNGAlmgasRNOAlWgasBJNA1aiacBKNA1YiaYBK9E0YCWaBqxE04CVaBqwEk0DVqJpwEo0DViJpgEr0TRgJZoGrETTgJVoGrASTQNWomnASjQNWImmASvRNGAlmgasRNOAlWgasBJNA1aiacBKNA1YiaYBK9E0YCWaBqxE04CVaBqwEk0DVqJpwEo0DViJpgEr0TRgJZoGrERbFAE7nU4qKyvJysrCbDaTlpZGRUUFLpeLPXv2YDKZqKqqivSYIeceB48n0lMEV3SkBwi1lpYWSktLcTgcxMXFkZOTQ19fH8eOHaOzs5OBgQEAbDZbZAcNkYlxuHwW7C3wSf9nj1+/Cv3tcNt6WCK4ApPHY7Tfk59xOp1s3LgRu93Ovn37OHjwIBaLBYAjR45w4MABoqOjmZiYYGhoiISEhAhPHFwjTmj5DYxdmX4fcwLY/jPEp4RvrmAydMA7d+6kurqa8vJyjh8/PmW7zWajtbWVjIwMurq6IjBh6LgGoOn/wI2x2fe9xQyFOyEuKfRzBZthr4E7OjqoqakhJSWFQ4cO+dxn06ZNABQUFNx8zG63U15ezubNm1m2bBkmkyks8wZb++tzixe8+7W/Htp5QsWwAVdXV+N2uykrKyM+Pt7nPjExMcDkgM+fP8+rr76K1WrlrrvuCsuswfZJP1xx+LfmimPyNbIUhg24rq4OgOLi4mn3sdvtwOSA7733Xvr7+zl58iQlJSWhHTJEev8S3nWRJPj158x6enoASE9P97l9fHychoYGYHLAUVHB/z1dWFiIw+HnKXEe/tsTvyNr5Sa/1/3HG038455Hgj/QHFitVpqamvxeZ9iAXS4XAKOjoz6319TU4HQ6sVgsZGRkhHQWh8NBb29vSI/xeZ6JwK7bPW5TWOcMBsMGbLVaGRwcpLm5maKioknb+vv72b9/PwD5+fkhf6FmtVpD+vxfdG1iOOB1q1atCvI0cxPoz5FhAy4pKaGjo4PDhw+zbds2srOzAWhsbGT37t04nU4gPG9gBPKlcT7srfDB//N/3Ve+dj/fPG4P/kAhZNgXcZWVlSQnJ3Px4kVyc3PJy8tj3bp1bN68mczMTLZu3QpMvv41ipUbYMlS/9ZELwPrHaGZJ5QMG3Bqair19fVs374ds9lMd3c3SUlJnDhxgtraWs6dOwcYM+AlSyGzaPb9Pi9ji//RLwSGvYQA2LBhA6dOnZry+MjICN3d3URFRXHnnXdGYLLQW10I11zw4RyuXlYXer9JZOiAp9Pe3o7H4yE7O5vY2Ngp21955RUAzpw5M+n7a9asobBQxq+0yQTZ94NlBXQ3gss5dZ/4FEi/C1bmhn28oFmUAbe1tQHTXz48/vjjPr//9NNP84tf/CKkswXbylyw5sAnvTBwEXr+BBM34JYY+PunvaFLpgH7YLTPN5lMsDzV+6231Rtw1BL58YKBX8TNZLaAlRyL8gz86ecklHyL8gysjEMDVqJpwEo0DViJpgEr0TRgJZoGrETTgJVoGrASTQNWomnASjQNWImmASvRNGAlmgasRNOAlWgasBJNA1aiacBKNA1YiaYBK9E0YCWaBqxE04CVaBqwEk0DVqJpwEo0DViJpgEr0TRgJZoGrETTgJVoGrASTQNWomnASjQNWImmASvRNGAlmgasRNOAlWgasBJNA1aiacBKNA1YiaYBK9E0YCXaogjY6XRSWVlJVlYWZrOZtLQ0KioqcLlc7NmzB5PJRFVVVaTHDJnx62BvhbZTcGPU+9jEDe/j0kVHeoBQa2lpobS0FIfDQVxcHDk5OfT19XHs2DE6OzsZGBgAwGazRXbQEHC7oettuNgCE1+Idfwa1P8bpNkg8x6IEnoqM3k8Hk+khwgVp9PJxo0bsdvt7Nu3j4MHD2KxWAA4cuQIBw4cIDo6momJCYaGhkhISIjwxMHjnoC/nARn5+z7pqyF/B0QtST0cwWboQPeuXMn1dXVlJeXc/z48SnbbTYbra2tZGRk0NXVFYEJQ+dsHVxsnvv+aX8H67eGbp5QEfqFY3YdHR3U1NSQkpLCoUOHfO6zadMmAAoKCm4+9sorr/DlL3+Z9PR0YmNjueOOO3jhhRcYGRkJy9zBcP2q95rXH72t3nXSGDbg6upq3G43ZWVlxMfH+9wnJiYGmBzw0aNHWbJkCd///vc5ffo0X//61/nJT37CAw88gNvtDsvs89XXBp4J/9a4J6Dv/dDME0qGfRFXV1cHQHFx8bT72O12YHLAr732GitWrLj5/fvuu48VK1ZQVlbG22+/zb333huiiYPn4+4A112ANZuDOkrIGTbgnp4eANLT031uHx8fp6GhAZgc8Ofj/VRhYSEAvb29Ac1SWFiIw+EIaG0gvrvzNGtuy/N73Z/fa+PhfaUhmGh2VquVpqYmv9cZNmCXywXA6Oioz+01NTU4nU4sFgsZGRkzPtdbb70FwIYNGwKaxeFwBBx/IEZcnwS0bnhkKKxzBoNhA7ZarQwODtLc3ExRUdGkbf39/ezfvx+A/Px8TCbTtM/T29vLiy++yAMPPBDwvWKr1RrQukDZB89wZ8Y9fq/rHTzDqlWrQjDR7AL9OTJswCUlJXR0dHD48GG2bdtGdnY2AI2NjezevRun0wnM/AbGyMgIDz/8MEuXLuVnP/tZwLME8qVxPlwD8McAxv3X/7GXo4l7gz9QCBn2LkRlZSXJyclcvHiR3Nxc8vLyWLduHZs3byYzM5OtW703PT9//ft5o6OjPPTQQ1y4cIHf//73rFy5Mpzjz0tcEqRk+rcmJRNiE0MzTygZNuDU1FTq6+vZvn07ZrOZ7u5ukpKSOHHiBLW1tZw7dw7wHfCNGzd47LHHaGpq4vTp0+Tk5IR7/HnLeWDuQcYmeveXyNDvxE1nZGSEhIQETCYTw8PDxMbG3tzmdrt58sknOXnyJK+//vrNM7VE113eD/AMXpx+n8Q0yHsQlsaFb65gMuw18Eza29vxeDxkZ2dPihfg2Wef5de//jXf+ta3iI2N5Z133rm5be3atT5vsy1US+Ng0xPwSb/3nbmhizD6txsUUdHebbfKuTLyaVEG3NbWBvi+fDh9+jQAL730Ei+99NKkbT//+c955plnQj5fsN268rNQ6/8Nro3ALWb58YIGPGVbd3d3mKdR82HYF3EzmSlgJcuiPAN/+jkJJd+iPAMr49CAlWgasBJNA1aiacBKNA1YiaYBK9E0YCWaBqxE04CVaBqwEk0DVqJpwEo0DViJpgEr0TRgJZoGrETTgJVoGrASTQNWomnASjQNWImmASvRNGAlmgasRNOAlWgasBJNA1aiacBKNA1YiaYBK9E0YCWaBqxE04CVaBqwEk0DVqJpwEo0DViJpgEr0TRgJZoGrETTgJVoGrASTQNWomnASrRFEbDT6aSyspKsrCzMZjNpaWlUVFTgcrnYs2cPJpOJqqqqSI8ZUjfG4OMemBj3ft/jiew8wRId6QFCraWlhdLSUhwOB3FxceTk5NDX18exY8fo7OxkYGAAAJvNFtlBQ2TkI/iwGRwd4B7/7PHrLjjzBqz+O4hfEbn55svk8Rjl9+JUTqeTjRs3Yrfb2bdvHwcPHsRisQBw5MgRDhw4QHR0NBMTEwwNDZGQkBDhiYPL8QG0nwbPxPT7mJZAbilY7wjfXMFk6IB37txJdXU15eXlHD9+fMp2m81Ga2srGRkZdHV1RWDC0HF2Qsv/Bebyq2sC2yOQsja0M4WCYa+BOzo6qKmpISUlhUOHDvncZ9OmTQAUFBTcfKy+vp6SkhJWrlzJsmXLSE1N5YknnqCjoyMscweDxw0dbzK3ePHu98Gb3nXSGPYauLq6GrfbTVlZGfHx8T73iYmJASYHPDg4SF5eHnv37uW2227Dbrdz6NAhioqKeP/990lNTQ3L/PPh7IJrw/6tGRsG5wVYIewsbNiA6+rqACguLp52H7vdDkwOeMeOHezYsWPSfnfddRfr16/n1VdfpaKiIgTTBldfe4Dr3teAF4yenh4A0tPTfW4fHx+noaEBmBywL8nJyQBERwf201VYWIjD4QhobSC+8+QpMq02v9e9W9/C9mcfDP5Ac2C1WmlqavJ7nWEDdrlcAIyOjvrcXlNTg9PpxGKxkJGRMWX7xMQEbrebnp4evv3tb2O1WvnKV74S0CwOh4Pe3t6A1gbi+vXrAa27dv1aWOcMBsMGbLVaGRwcpLm5maKioknb+vv72b9/PwD5+fmYTKYp6++7776bZ+isrCzq6upYsSKwG6ZWqzWgdYEaueYMeN2qVauCPM3cBPpzZNjbaM899xzHjx8nLS2NN998k+zsbAAaGxvZvXs3XV1d3Lhxg2effdbnu3Bnz55laGiICxcu8IMf/IDLly/T0NDA6tWrw/1D8dtHndD6W//X2R6VdyvNsAHb7XZsNhsff/wx0dHR3HHHHYyNjXH+/HlKS0txu9288cYbvPzyy3zta1+b8bmGhoZYs2YNu3btEvGWs8cNDf8Txq7MfY05Af7TV8Ek7MaqsHHnLjU1lfr6erZv347ZbKa7u5ukpCROnDhBbW0t586dA2Z/AQewfPlysrKyOH/+fKjHDgpTFGzYBky9MppmgXd/afGCgc/AMxkZGSEhIQGTycTw8DCxsbEz7n/58mXWrl3LU089xY9//OMwTTl/l85C++vgnuGt5KglkPtPcPv68M0VTIZ9ETeT9vZ2PB4P2dnZU+LdtWsXWVlZ2Gw2li9fzl//+ld++MMfEh0dzTe/+c0ITRyY29dDfApc/DP0t8PEjcnbU22QthHikiMyXlAsyoDb2toA35cPW7Zs4Ze//CU/+tGPGBsbIy0tjeLiYp5//vlp7ykvZHHJcEcJZN0Lw5eg9XcwPgZL47yPS6cBf0F5eTnl5eXhHinkopdCYhosiYZxwMedQ5EEXrbP30wBK1kW5Rn4089JKPkW5RlYGYcGrETTgJVoGrASTQNWomnASjQNWImmASvRNGAlmgasRNOAlWgasBJNA1aiacBKNA1YiaYBK9E0YCWaBqxE04CVaBqwEk0DVqJpwEo0DViJpgEr0TRgJZoGrETTgJVoGrASTQNWomnASjQNWImmASvRNGAlmgasRNOAlWgasBJNA1aiLcp/pWix8Hhg9BMYdsCVS3DNBTfGvNvGr8GlD8BihZhb5f67cYvy30o2uuuj0P8+2FthdGj2/WOWQ2oBrLwTlsaEerrg0oANxD0OF96Bnibv//srKhpWF0LmFu//S6ABG8SVS9B+GlzO+T9XXArkPgAJ1vk/V6hpwAZw+Ty8/xq4J4L3nFFL4M6H4Las4D1nKOhdCOE+6oS23wU3XvA+X9vvvM+/kGnAgo04oe01792GUPB4vM8/EoTLklDRSwih3G5o+t/ea19/bN4FS+Pgugv+9L/mtibBCoU7IWoBnu4W4EhqLj5s9D9e8MZrtnj/O1dXHN7jLUSGD9jpdFJZWUlWVhZms5m0tDQqKipwuVzs2bMHk8lEVVVVpMf0y8QN6A5zUD2N3uMuNELu9gWmpaWF0tJSHA4HcXFx5OTk0NfXx7Fjx+js7GRgYAAAm80W2UH9dOksjI+F95g3xrzH/dKd4T3ubAx7BnY6nTz00EM4HA727dtHf38/zc3NOBwODh8+TG1tLY2NjZhMJvLz8yM9rl/srYvruDMxbMDPPfccdrud8vJyjh49isViubmtsrKSgoICxsfHWbNmDQkJCRGc1D/j1+FKf2SOfcUBE9cjc+zpGDLgjo4OampqSElJ4dChQz732bRpEwAFBQXTPk9paSkmk4nvfve7oRgzICOXI3hwDwx/FMHj+2DIgKurq3G73ZSVlREfH+9zn5gY76dWpgv4V7/6FS0tLaEaMWBXIhkwgd35CCVDvoirq6sDoLi4eNp97HY74DvgK1eu8I1vfIOjR4+ya9euec9TWFiIw+GY9/MAPLrlv/Lwlm/43PbpPd6ZLIv77L/37J1+v+nuE//g+/+d375zdG7D+sFqtdLU1OT3OkMG3NPTA0B6errP7ePj4zQ0NAC+A37hhRfIzs6mrKwsKAE7HA56e3vn/TwAV6+OTrvt03u8c2GKmvu+Xzx+sH4swWDIgF0uFwCjo75/sWtqanA6nVgsFjIyMiZta2pq4qc//Snvvfde0OaxWoP3sa6Y2GXTbrvumn39sjhvvB639wPu/j5XTOwyVq1aNfuB/BToz5EhA7ZarQwODtLc3ExRUdGkbf39/ezfvx+A/Px8TJ/7owgTExPs3buX8vJycnNzgzZPIF8ap9PbBh1v+N42l7eG79nrPfNec8HbJ/w//vMH/4WqvH/xf2GIGPJFXElJCQCHDx/m3LlzNx9vbGykuLgYp9P76ZQvvoFRVVXFpUuXFtRdhy9KuD2yx7cssM8IGzLgyspKkpOTuXjxIrm5ueTl5bFu3To2b95MZmYmW7duBSZf/zqdTl588UW+853vMD4+ztDQEENDQwCMjY0xNDSE2+2OxA9nkrhk72d1IyEq2nv8hcSQAaemplJfX8/27dsxm810d3eTlJTEiRMnqK2tvXlW/nzAdrud4eFh9u7dS2Ji4s1v4D2TJyYm8uGHH0bkx/N5UUsgOWP2/UIhec3C+0SaIa+BATZs2MCpU6emPD4yMkJ3dzdRUVHceednb+xnZWXx1ltvTdm/uLiYp59+mmeeeSaoL8bmI9UGH52PwHE3hv+YszFswNNpb2/H4/GQnZ1NbGzszcfj4+O5//77fa5Zs2bNtNsiISkdYhPh6mD4jhmbCEmrw3e8uVpgXxBCr62tDZj5LeSFzmSCdfeH95jr7l+Yf3fEojsD+xvwQv0DKyvWgjUHHGdCf6yVOd7jLUR6BhZsfTGY/fwg3XUXjA3P7U0P8D5/9lb/ZwsX/TNxwl0dhKZ/n3uQ/lgaB4X/DLHLg//cwaIBG8DVIfjzK3P7a6TmKmY5bHxsYccLGrBhjF+H8/8RnD81kVoAWfdB9NL5P1eoacAGM/AhdL4Nn/T5v/bWlbD2Hxbm7bLpaMAGdeUS2FtgoAfGrky/nznBe1851Rb5z1kEQgNeBK5fheG//f3A7gnv29HL4sByOyyNnX39QqYBK9EW3X1gZSwasBJNA1aiacBKNA1YiaYBK9E0YCWaBqxE04CVaBqwEk0DVqJpwEo0DViJpgEr0TRgJZoGrETTgJVoGrASTQNWomnASjQNWImmASvRNGAlmgasRNOAlWgasBJNA1aiacBKNA1YiaYBK9E0YCXa/wf+Bu+0T/iYjwAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "and_all.export(\"qiskit\").draw(\"mpl\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We now can use our quantum function as an oracle for a Grover search. For instance, we want to find the input value that yeld to a `True` value of the function:" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "from qlasskit.algorithms import Grover\n", + "\n", + "q_algo = Grover(and_all, True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Qlasskit prepares the quantum circuit for the Grover search:" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc = q_algo.export(\"qiskit\")\n", + "qc.draw(\"mpl\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Then we use our prefered framework and simulator for sampling the result; this is an example using `qiskit` with `aer_simulator`.\n", + "\n", + "The `Grover` class, along with all circuit wrappers in qlasskit, provides utilities to encode inputs and decode outputs from a quantum circuit using the high level type definitions. In the output histogram, it's now evident that the input leading to a `True` result in the `and_all` function is a list where all elements are set to `True`, aligning with our expectations.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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0Lx5c3z++eeoWrWqwfbx8fEYM2YM/vzzT8TGxqJkyZLo2rUrRo8eDRcXl2zvn5GRgR9++AFz5szBmTNn4OzsjFatWmHixImoUKHCE7WVxSEREREVJIssDp8mLA6JiIioIJm69ih0Yw6JiIiIyHxYHBIRERGRwuKQiIiIiBQWh0RERESksDgkIiIiIoXFIREREREppn1yMxEREdFTpv93+Xv93EHGaIX58MwhERERESksDomIiIhIYXFIRERERAqLQyIiIiJSWBwSERERkcLikIiIiIgUFodEREREpLA4JCIiIiKFxSERERERKSwOiYiIiEhhcUhERERECotDIiIiIlJYHBIRERGRwuKQiIiIiBQWh0RERESksDgkIiIiIoXFIREREREpLA6JiIiISGFxSEREREQKi0MiIiIiUlgcEhEREZHC4pCIiIiIFBaHRERERKSwOCQiIiIihcUhERERESksDomIiIhIYXFIRERERAqLQyIiIiJSWBwSERERkcLikIiIiIgUFodEREREpLA4JCIiIiKFxSERERERKSwOiYiIiEhhcUhERERECotDIiIiIlJYHBIRERGRwuKQiIiIiBQWh0RERESksDgkIiIiIoXFIREREREpLA6JiIiISGFxSEREREQKi0MiIiIiUlgcEhEREZHC4pCIiIiIFBaHRERERKSwOCQiIiIihcUhERERESksDomIiIhIYXFIRERERAqLQyIiIiJSWBwSERERkcLikIiIiIgUFodEREREpLA4JCIiIiKFxSERERERKSwOiYiIiEhhcUhERERECotDIiIiIlJYHBIRERGRwuKQiIiIiBQWh0RERESksDgkIiIiIoXFIREREREpLA6JiIiISGFxSEREREQKi0MiIiIiUlgcEhEREZFSqIvDVatW4aWXXoKnpyccHBxQrlw5dO/eHVFRUQbbJSQkYMiQIfDz84O9vT3Kli2LYcOGITExMcf3zcjIwMyZM1GjRg04OjqiePHi6N69O86dO1cQaREREREVWjbmbkBORATvvvsu5syZgwoVKuD111+Hi4sLoqOjERYWhosXL8LX1xcAkJSUhKZNmyIiIgJBQUHo3r07Dh06hGnTpiEsLAzbtm2Dg4ODwfu/8847mDdvHgICAvDRRx8hOjoa//3vfxEcHIw9e/bA39/fHGkTERERmV2hLA6///57zJkzBwMHDsT3338Pa2trg/VpaWnq/7/66itERETg008/xZQpU9TyESNGYOrUqfj222/x2WefqeUhISGYN28emjRpgk2bNsHOzg4A0KNHD7Rr1w4ffPABNm7caOIMiYiIiAonTUTE3I3I6t69eyhVqhQ8PDxw6tQp2NjkXr+KCEqXLo2EhATExsbCyclJrUtKSoK3tze8vLxw9uxZtbxHjx5YtmwZwsLC0KRJE4P3a968OUJDQ3Hx4kWUKVPmsdqbkJAANzc3xMfHw9XV9QmzJSIiosKm/3f5e/3cQcZoRe5MXXsUujGHwcHBuHXrFjp27Ij09HSsXLkSU6ZMwU8//YQzZ84YbBsZGYno6GgEBgYaFIYA4OTkhMDAQJw7d85gjGJoaKha96DWrVsDAMLCwkyQGREREVHhV+guKx84cAAAYG1tjZo1a+L06dNqnZWVFQYPHoxp06YByCwOAeQ6RtDf3x8bN25EZGQkfH19kZSUhJiYGFSvXj3bpeqs76O/b06Sk5ORnJys/p2QkAAASE1NRWpqqmqntbU10tPTkZGRYdB+a2trpKWlIesJW2tra1hZWeW6XH9fnX42Nevl9Yctt7W1RUZGBtLT09UyTdNgY2OT6/Lc2s6cmBNzYk7MiTk9+znZIj8KIidTKnTF4bVr1wAA33zzDerWrYvw8HBUrVoVhw4dwoABAzB9+nRUqFAB7733HuLj4wEAbm5uOb6XfqpV3+5Jt8/J5MmTMXbs2GzLg4ODUaRIEQBAmTJlUKdOHRw5cgSXLl1S21SuXBlVqlRBeHg4rl+/rpbXrl0bfn5+2LZtG+7cuaOWN2zYEF5eXggODjbYEZo3bw5HR0esX7/eoA3t2rXDvXv3EBISopbZ2Nigffv2uHHjBnbv3q2Wu7i4oEWLFoiKikJERIRaXrx4cTRq1AiRkZE4deqUWs6cmBNzYk7MiTlZSk5Ae+SHqXPST6SZSqEbczhgwADMnTsXjo6OOHPmDHx8fNS6Y8eOoVatWihXrhzOnDmDpUuXomfPnhg5ciQmTJiQ7b1GjhyJSZMmYeXKlejUqROio6NRqlQpBAYGYseOHdm237RpE4KCgvDRRx9hxowZObYvpzOHvr6+uHHjhiou+cuMOTEn5sScmBNzenpzGjgrf2cOf/7ItDnFxcXB09PTZGMOC92ZQ/2sXr169QwKQwCoXr06ypcvjzNnzuD27dtq29zO9OmXfPXtnnT7nNjb28Pe3j7bcltbW9jaGu5M1tbWOV6+zu0mm9yWP/i+eVluZWUFK6vsQ0xzW55b25kTc3rS5cyJOQHMKbc2Puly5mS+nJ6EuXIylkJ3Q0rlypUBAO7u7jmu15ffu3fvkWMEHxyT6OTkhJIlS+L8+fMGlXtu2xMRERFZmkJXHDZv3hwAcOLEiWzrUlNTcebMGTg5OaF48eLw9/eHj48Pdu7ciaSkJINtk5KSsHPnTpQrV05NmA0ATZs2VesepM9v+OAUN0RERESWotAVhxUqVEBQUBDOnDmDefPmGaybMmUKbt++jU6dOsHGxgaapqFfv35ITEzE+PHjDbYdP348EhMT0b9/f4PlAwYMAACMGjUKKSkpavk///yD0NBQBAUFwc/Pz0TZERERERVuhe6GFAA4e/YsGjVqhGvXrqF9+/aoUqUKDh06hK1bt8LPzw979uyBt7c3gMwzhIGBgTh8+DCCgoJQt25dHDx4EMHBwahfvz7CwsLg6Oho8P79+/dXj89r3749YmJisGLFCjg7O2P37t2oVKnSY7eVk2ATERE9WzgJdiFUoUIF7N+/H71798aBAwfw/fffIzIyEu+//z7Cw8NVYQhkjiMMCwvDoEGDcOLECUyfPh0nT57E0KFDsWXLlmyFIQD8/PPP6m7kGTNmYP369ejUqRPCw8OfqDAkIiIietYUyjOHTxOeOSQiInq28MwhEREREdH/Y3FIRERERAqLQyIiIiJSWBwSERERkcLikIiIiIgUFodEREREpLA4JCIiIiKFxSERERERKSwOiYiIiEhhcUhERERECotDIiIiIlJYHBIRERGRwuKQiIiIiBQWh0RERESksDgkIiIiIoXFIREREREpLA6JiIiISGFxSEREREQKi0MiIiIiUlgcEhEREZHC4pCIiIiIFBaHRERERKSwOCQiIiIihcUhERERESksDomIiIhIYXFIRERERAqLQyIiIiJSWBwSERERkcLikIiIiIgUFodEREREpLA4JCIiIiKFxSERERERKSwOiYiIiEhhcUhERERECotDIiIiIlJYHBIRERGRwuKQiIiIiBQWh0RERESksDgkIiIiIoXFIREREREpLA6JiIiISGFxSEREREQKi0MiIiIiUlgcEhEREZHC4pCIiIiIFBaHRERERKTkuTjctm0bLl269NBtoqKisG3btryGICIiIqIClufisHnz5li0aNFDt1myZAmaN2+e1xBEREREVMDyXByKyCO3ycjIgKZpeQ1BRERERAXMpGMOIyMj4ebmZsoQRERERGRENk+y8dtvv23w79WrV+PChQvZtktPT1fjDdu2bZuvBhIRERFRwXmi4jDrGENN0xAREYGIiIgct9U0DfXr18e3336bn/YRERERUQF6ouLw/PnzADLHG5YvXx6DBg3Cxx9/nG07a2treHh4wMnJyTitJCIiIqIC8UTFoZ+fn/r/hQsXok6dOgbLiIiIiOjp9kTFYVZvvfWWMdtBRERERIVAnotDXXh4OPbt24fbt28jPT0923pN0zBq1Kj8hiEiIiKiApDn4jAuLg4dO3bEzp07HzrnIYtDIiIioqdHnovDIUOGYMeOHWjWrBneeustlC5dGjY2+T4RSURERERmlOdqbt26dWjQoAG2bNnCp6AQERERPSPy/ISUe/fuoUmTJiwMiYiIiJ4heS4Oa9eunePTUYiIiIjo6ZXn4nD06NFYu3Yt9uzZY8z2EBEREZEZ5XnMYWxsLNq3b4+mTZuiZ8+eqFu3LlxdXXPctlevXnluIBEREREVHE0eNg/NQ1hZWUHTNINpbB4cfygi0DQtx/kPnxUJCQlwc3NDfHx8rsUxERERPT36f5e/188dZIxW5M7UtUeezxwuXLjQmO0gIiIiokKAj88jIiIiIiXPN6QQERER0bMnz2cOL1269NjblilTJq9hiIiIiKgA5bk4LFu27GNNgK1pGtLS0vIahoiIiIgKUJ6Lw169euVYHMbHx+Pw4cM4f/48mjZtirJly+anfURERERUgPJcHC5atCjXdSKC6dOn46uvvsL8+fPzGoKIiIiICphJbkjRNA2ffPIJAgICMGzYMFOEICIiIiITMOndyvXq1cPWrVtNGYKIiIiIjMikxeHZs2d5MwoRERHRUyTPYw5zk5GRgStXrmDRokVYs2YNWrZsaewQRERERGQieS4O9Wcr50ZE4OHhgenTp+c1BBEREREVsDxfVm7SpEmO/zVr1gydOnXC5MmTceLECdSoUSPfjZw6dSo0TYOmadizZ0+29QkJCRgyZAj8/Pxgb2+PsmXLYtiwYUhMTMzx/TIyMjBz5kzUqFEDjo6OKF68OLp3745z587lu61ERERET7M8nzkMDQ01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v6z8RGcON2/ejC+//BKenp4PvdXbzs4Onp6eGDlypMGEl0RERERUuD1RcbhkyRJ4eHjggw8+eOS277//PooWLYqFCxfmuXFEREREVLCeqDjctWsXWrVqleMk0A+yt7dHq1atsHPnzjw3joiIiIgK1hMVh9HR0Shfvvxjb1+uXDnExMQ8caOIiIiIyDyeqDjM6TmKD5OamprjY2KIiIiIqHB6osrNx8cHx44de+ztjx07hlKlSj1xo4iIiIjIPJ6oOHzxxRexdetWXLhw4ZHbXrhwAVu3buWj6IiIiIieIk9UHL7//vtITU3Fa6+9hhs3buS63c2bN9G1a1ekpaXhvffey3cjiYiIiKhgPNHj8+rWrYtBgwbhu+++Q7Vq1fDuu++iefPmKF26NADgypUr2LJlC+bMmYPr169jyJAhqFu3rkkaTkRERETG98TPVp4+fTocHBzw9ddfY+LEiZg4caLBehGBtbU1PvvsM0yYMMFoDSUiIiIi03vi4lDTNEyaNAl9+/bFwoULsWvXLsTGxgIAvL29ERgYiN69e6NChQpGbywRERERmdYTF4e6ChUq8MwgERER0TOGkxASERERkcLikIiIiIgUFodEREREpLA4JCIiIiKFxSERERERKSwOiYiIiEhhcUhERERECotDIiIiIlJYHBIRERGRwuKQiIiIiBQWh0RERESksDgkIiIiIoXFIREREREpLA6JiIiISGFxSEREREQKi0MiIiIiUlgcEhEREZHC4pCIiIiIFBaHRERERKSwOCQiIiIihcUhERERESksDomIiIhIYXFIRERERAqLQyIiIiJSWBwSERERkcLikIiIiIgUFodEREREpLA4JCIiIiKFxSERERERKSwOiYiIiEhhcUhERERECotDIiIiIlJYHBIRERGRwuKQiIiIiBQWh0RERESksDgkIiIiIoXFIREREREpLA6JiIiISGFxSEREREQKi0MiIiIiUlgcEhEREZHC4pCIiIiIFBaHRERERKSwOCQiIiIihcUhERERESksDomIiIhIYXFIRERERAqLQyIiIiJSWBwSERERkcLikIiIiIgUFodEREREpLA4JCIiIiKFxSERERERKSwOiYiIiEhhcUhERERECotDIiIiIlJYHBIRERGRwuKQiIiIiBQWh0RERESksDgkIiIiIoXFIREREREpLA6JiIiISGFxSEREREQKi0MiIiIiUgpdcXjlyhV89913CAoKQpkyZWBnZwdvb2906dIFe/fuzfE1CQkJGDJkCPz8/GBvb4+yZcti2LBhSExMzHH7jIwMzJw5EzVq1ICjoyOKFy+O7t2749y5c6ZMjYiIiKjQK3TF4cyZMzF48GCcO3cOQUFBGDp0KBo3bow1a9agUaNGWLFihcH2SUlJaNq0Kb799ltUqVIFgwcPRuXKlTFt2jS0aNEC9+/fzxbjnXfewUcffQQRwUcffYQ2bdpg5cqVqF+/PiIjIwsqVSIiIqJCx8bcDXhQgwYNEBoaiqZNmxos3759O1q2bIn33nsPHTt2hL29PQDgq6++QkREBD799FNMmTJFbT9ixAhMnToV3377LT777DO1PCQkBPPmzUOTJk2wadMm2NnZAQB69OiBdu3a4YMPPsDGjRsLIFMiIiKiwkcTETF3Ix5X69atERwcjH379qFevXoQEZQuXRoJCQmIjY2Fk5OT2jYpKQne3t7w8vLC2bNn1fIePXpg2bJlCAsLQ5MmTQzev3nz5ggNDcXFixdRpkyZx2pTQkIC3NzcEB8fD1dXV+MkSkRERGbT/7v8vX7uIGO0Inemrj0K3WXlh7G1tQUA2NhknvCMjIxEdHQ0AgMDDQpDAHByckJgYCDOnTuHqKgotTw0NFSte1Dr1q0BAGFhYaZKgYiIiKhQK3SXlXNz6dIlbN68GSVLlkSNGjUAQI0P9Pf3z/E1/v7+2LhxIyIjI+Hr64ukpCTExMSgevXqsLa2znH7rO+bk+TkZCQnJ6t/JyQkAABSU1ORmpoKALCysoK1tTXS09ORkZGhttWXp6WlIesJW2tra1hZWeW6XH9fnV4cp6WlPdZyW1tbZGRkID09XS3TNA02Nja5Ls+t7cyJOTEn5sScmNOzn5Mt8qMgcjKlp6I4TE1NxZtvvonk5GRMnTpVFXbx8fEAADc3txxfp59q1bd70u1zMnnyZIwdOzbb8uDgYBQpUgQAUKZMGdSpUwdHjhzBpUuX1DaVK1dGlSpVEB4ejuvXr6vltWvXhp+fH7Zt24Y7d+6o5Q0bNoSXlxeCg4MNdoTmzZvD0dER69evN2hDu3btcO/ePYSEhKhlNjY2aN++PW7cuIHdu3er5S4uLmjRogWioqIQERGhlhcvXhyNGjVCZGQkTp06pZYzJ+bEnJgTc2JOlpIT0B75YeqcDhw4kK/2PUqhH3OYkZGBN998E0uXLkX//v0xZ84ctW7p0qXo2bMnRo4ciQkTJmR77ciRIzFp0iSsXLkSnTp1QnR0NEqVKoXAwEDs2LEj2/abNm1CUFAQPvroI8yYMSPH9uR05tDX1xc3btxQxSV/mTEn5sScmBNzYk5Pb04DZ+XvzOHPH5k2p7i4OHh6eppszGGhPnOYkZGBt99+G0uXLsUbb7yBn376yWC9fgYwtzN9+iVffbsn3T4n9vb26k7prGxtbdWYSJ21tXWOl6/1P5LHXf7g++ZluZWVFayssg8xzW15bm1nTszpSZczJ+YEMKfc2viky5mT+XJ6EubKyVgK7Q0pGRkZ6NOnDxYvXozu3btj0aJF2T7QR40RfHBMopOTE0qWLInz588bVO65bU9ERERkaQplcagXhkuWLMF//vMf/PLLL7neQOLj44OdO3ciKSnJYF1SUhJ27tyJcuXKwdfXVy1v2rSpWvcgfX7DB6e4ISIiIrIUha441C8lL1myBF27dsWvv/6aY2EIZF6r79evHxITEzF+/HiDdePHj0diYiL69+9vsHzAgAEAgFGjRiElJUUt/+effxAaGoqgoCD4+fkZOSsiIiKip0OhuyFlzJgxGDt2LJydnfHxxx/neF29Y8eOqF27NoDMM4SBgYE4fPgwgoKCULduXRw8eBDBwcGoX78+wsLC4OjoaPD6/v37Y968eQgICED79u0RExODFStWwNnZGbt370alSpUeu72cBJuIiOjZYumTYBe6G1IuXLgAAEhMTMTEiRNz3KZs2bKqOHRyckJYWBjGjBmDP//8EyEhIShZsiSGDh2K0aNHZysMAeDnn39GjRo1MGfOHMyYMQPOzs7o1KkTJk6ciAoVKpgqNSIiIqJCr9CdOXza8MwhERHRs8XSzxwWujGHRERERGQ+LA6JiIiISGFxSEREREQKi0MiIiIiUlgcEhEREZHC4pCIiIiIFBaHRERERKSwOCQiIiIihcUhERERESksDomIiIhIYXFIRERERAqLQyIiIiJSWBwSERERkcLikIiIiIgUFodEREREpLA4JCIiIiKFxSERERERKSwOiYiIiEhhcUhERERECotDIiIiIlJYHBIRERGRwuKQiIiIiBQWh0RERESksDgkIiIiIoXFIREREREpLA6JiIiISGFxSEREREQKi0MiIiIiUlgcEhEREZHC4pCIiIiIFBaHRERERKSwOCQiIiIihcUhERERESksDomIiIhIYXFIRERERAqLQyIiIiJSWBwSERERkcLikIiIiIgUFodEREREpLA4JCIiIiKFxSERERERKSwOiYiIiEhhcUhERERECotDIiIiIlJYHBIRERGRwuKQiIiIiBQWh0RERESksDgkIiIiIoXFIREREREpLA6JiIiISGFxSEREREQKi0MiIiIiUlgcEhEREZHC4pCIiIiIFBaHRERERKSwOCQiIiIihcUhERERESksDomIiIhIYXFIRERERAqLQyKiQmzy5MmoX78+XFxc4OXlhY4dO+LUqVMG27zzzjuoUKECHB0dUbx4cbz66qs4efJkgcTWiQjatm0LTdOwevXqfMcmIvNhcUhPhcf5kpozZw6aNWsGV1dXaJqG27dvP/WxCwNLz9/cwsLC8P7772PPnj3YtGkTUlNTERQUhKSkJLXNc889h4ULF+LEiRPYuHEjRARBQUFIT083eWzdd999B03T8hWPiAoHFof0VHicL6m7d++iTZs2+Pzzz5+Z2IWBpedvbhs2bEDv3r0REBCAWrVqYdGiRbh06RIOHDigthkwYACaNGmCsmXLom7dupgwYQKioqJw4cIFk8cGgIiICEyfPh0LFizIVzwqXLZt24ZXXnkFPj4+OZ4RTkxMxAcffIDSpUvD0dER1apVw08//VRg8a9evYrevXvDx8cHRYoUQZs2bRAZGWm0+JbMxtwNoMe3bds2fP311zhw4ABiYmKwatUqdOzYUa3P7Vf7V199hWHDhhVQK01jw4YNBv9etGgRvLy8cODAATRp0gQAMGjQIABAaGjoMxO7MLD0/Aub+Ph4AEDRokVzXJ+UlISFCxeiXLly8PX1NXnsu3fvokePHpg1axa8vb2NGo/MKykpCbVq1cLbb7+Nzp07Z1s/ZMgQbN26Fb/++ivKli2L4OBgDBw4ED4+PujQoYNJ44sIOnbsCFtbW6xZswaurq745ptv0KpVK/z7779wcnLKd3xLxjOHTxH9D2XWrFk5ro+JiTH4b8GCBdA0DV26dMl37Ef9guvduzc0TTP4r02bNvmOm5tHfUGakjljFwaWnr85ZWRkYNCgQQgMDET16tUN1v34449wdnaGs7Mz/vnnH2zatAl2dnYmjz148GA0atQIr776qtFi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tr+x2rVry7vvvitr166V69evi4io79j84GVlypfU1FSEhISgcePGuHbtGjw9PWFvb4/jx4/j2rVruHDhAsLDw7F582ZERUWhZs2aGD58OHr06JHv2FevXsX+/fvRuHFjWFtbIyoqCkWKFMH9+/exe/dubNq0CXv27MH58+cBAD179sTHH3+MevXqGeWXnbni37lzBxs2bEDDhg1x69YtlCxZEsnJyTh+/Dhu3ryJU6dOYffu3di5cyfS0tLQqlUrjBo1Cs8//3yec2Xu5o9/8OBBnDx5Ei1btkRiYiJu3rwJJycnxMbGIiwsDGFhYTh48CCSkpLg5OSEoUOHok+fPvDz80N6ejqsra2N8AlkYv9bXv9bcu7min/lyhWsX78ederUQWpqKkqWLInr16/j1KlTuH37Ng4fPozdu3fj33//RbFixdCtWzd88cUX8Pb2zle+AHjmkEwrPT1dkpKS5PDhwzJlyhSpUqWKaJomHTt2lFOnTolI/s8gPszly5dl1qxZUr16ddE0TRo2bCh79+41WbzCED85OVlu3LghW7Zskffee088PT1F0zQZPny4UX9ZPool5m7u+OHh4TJ06FBxc3MTTdOkR48eEhMTY7J4D8P+t6z+t+TczRU/ISFBLly4IL/88ou8/PLLYmNjI8WKFZO5c+fKvXv3RCTv368sDilfctvxclp+7949CQ0NlU6dOommadKlSxe5efOmSdqUlpaWbfns2bOlTJky4ubmJosWLTJ63IKKn9Nnm5GRkePyGzduyLJly+S5554TTdNkxIgReY77uG17lnM3Z/ysMbL+f3p6erbP/MaNGzJ48GBxdHSUKlWqSEhISK7tNyb2v+nim7v/mXvBx9df82DMB98rPT1dzp07J19//bWUKFFCnJ2dZfHixU8cLysWh2QS+s6b0x+PiMjcuXPFw8NDmjVrZrQCMWtM/Rdq1vhpaWnyzz//SKVKlaR48eKyYcMGo8QtDPGzHizS0tKy/UK/c+eODBo0SKytraV///6SmppqtNhZ41ty7uaKn/XvK2v8xMREmTNnjri6ukrdunXl3LlzRo2bFfvffPHN2f+WnLu54mctGNPS0rIViidOnJA2bdqIlZWVTJs2Lc9xWBxSgdL/eFJSUmTevHlibW0tgwYNyrGAfBJP8qvs2rVr0rp1a6lYsaKcP38+X3ELS/zcZGRk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Job3f40aNfjbA0Po/+Ji4yK3fu52ANmDEn379oWDgwPMzc3h6uqKzz//HMHBwfluX9wQyWExISsrC+PGjcPx48e1+r3JycmwtrbG+PHjkZycDCC75oIxBm9vb77d5s2bYWFhgcOHDxd5femGf+HCBaxcuRKXL19GZmZmnhvBvXv3+KsFfSONbGzatAnffPMNr8sp7MNKesh++eWXKFu2LL8RRkZGon379vDw8NDYvkqVKhg2bJjWZobLpS8dt7i4OCxduhSXL1/OU0sUExODR48eISkpCS9fvuR/l+MBIfpfu/pSHyYnJ2PdunXw8fHJs01cXBxiY2ORlJSExMTEPPvqGknn5cuXWLBgAcLDw7X6vZGRkTA2NsbcuXP531avXg3GGAIDA/n23333Hezt7XHx4sUiry+db35+frh3716+27x58waXL19GTExMsU4GcyNmKxdBkGNGlvT/e/bsodWrV9PHH39MXl5efLZVYbly5QplZWWRvb09WVpaUlJSEgUHB5OZmRn16dOHb/fo0SOysrIie3v7PG0savqSd9j06dNpxowZZG5uTkZGRnxGWmxsLKnVaqpUqRKVLl26ENG9H/nFIq1+MHfuXFq2bBnNnj2bnj17VmhvR8kj88GDB2Rvb0/Vq1cnIqIbN27QmTNnaMSIEXzba9eukZGRERkbG5OJiYlW+lwufalv16xZQ1OnTqU+ffrQqFGjaNu2bXTnzh0iInJ2dqby5cuTlZUVWVtb85mpup6pKPpf9/pSX3p7e9O3335LBw8eJCLNY+/k5EQWFhZkZWXFZzAT6bb/84tp3bp1NGvWLGratClt3rxZa1qhoaGkUqmobNmyxBijZ8+eUUBAADk5OdFHH33Et0tMTCRLS0uys7N7axuLir6RkRElJydTjx49yMPDg7p37067du2iFy9e8G1MTEyoXr165OzsTIyxYjEj/X0QyWERREk2LvrWV6vVRER08OBBCg0NpRkzZvAF1wGQr68vDR48mDw8PGjixIn05MmTQkT3fijRxkPf+tIxHjx4MM2fP5+srKxoy5YtNHToUOrduzdNnjyZ/Pz8KDY2lm+vL5N30f+615eS0l9//ZVq1KhB8+bNI6LsY3/v3j2aNGkStWrVir7++mu6cOFCgXX+jdz3ayXYuMitn5qaSnPmzKGOHTtSUFAQ9evXjzw8PGjEiBF0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", + "text/plain": [ + "
" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from qiskit import Aer, QuantumCircuit, transpile\n", + "from qiskit.visualization import plot_histogram\n", + "\n", + "qc.measure_all()\n", + "simulator = Aer.get_backend(\"aer_simulator\")\n", + "circ = transpile(qc, simulator)\n", + "result = simulator.run(circ).result()\n", + "counts = result.get_counts(circ)\n", + "\n", + "counts_readable = q_algo.decode_counts(counts)\n", + "plot_histogram(counts_readable)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "qlasskit_310-env", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.13" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/_sources/example_grover_factors.ipynb.txt b/_sources/example_grover_factors.ipynb.txt new file mode 100644 index 00000000..5809def1 --- /dev/null +++ b/_sources/example_grover_factors.ipynb.txt @@ -0,0 +1,104 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Grover: factorize number" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [], + "source": [ + "from typing import Tuple\n", + "from qlasskit import qlassf, Qint2\n", + "from qlasskit.algorithms import Grover\n", + "\n", + "\n", + "@qlassf\n", + "def factorize(a: Tuple[Qint2, Qint2]) -> bool:\n", + " return a[0] * a[1] == 9\n", + "\n", + "\n", + "q_algo = Grover(factorize)" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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gACr/PYbEREREZmn1CFvzpw5yMzMxMyZM9Ug5+DggBYtWqjL5OTkYOrUqXB3d8ekSZOs11siIiIiKpFSXXixa9cuvPfee/D09HzgkTpHR0d4enpi6tSpiIqKsriTRERERFQ6pQp569atQ40aNTBq1Khilx05ciRq1qyJNWvWmN05IiIiIjJPqULe/v378cwzz8DJyanYZZ2cnPDMM88gNjbW7M4RERERkXlKFfKSk5PRuHHjEi/fqFEjXLlypdSdIiIiIiLLlCrk6XQ65Obmlnj53Nxc6HRm32+ZiIiIiMxUqgTm7e2NkydPlnj5kydPon79+qXuFBERERFZplQh76mnnsKePXvw559/Frvsn3/+iT179iA4ONjcvhERERGRmUoV8kaOHInc3Fz885//xI0bN4pc7ubNm3jhhReg1+vxxhtvWNxJIiIiIiqdUt0MuXXr1hgzZgyWLVuGRx99FCNGjEBISAgaNGgAAPjrr7+we/durFq1CtevX8e4cePQunXrMuk4ERERERWt1L94sXjxYjg7O+ODDz7AnDlzMGfOHJPHRQR2dnaYPHkyZs+ebbWOEhEREVHJlTrkKYqCuXPn4vXXX8eaNWuwf/9+pKSkAADq1q2LoKAgDBo0CE2aNLF6Z4mIiIioZEod8oyaNGnCI3VEREREFRRvYkdERESkQQx5RERERBrEkEdERESkQQx5RERERBrEkEdERESkQQx5RERERBrEkEdERESkQQx5RERERBrEkEdERESkQQx5RERERBrEkEdERESkQQx5RERERBrEkEdERESkQQx5RERERBrEkEdERESkQQx5RERERBrEkEdERESkQQx5RERERBrEkEdERESkQQx5RERERBrEkEdERESkQQx5RERERBrEkEdERESkQQx5RERERBrEkEdERESkQQx5RERERBrEkEdERESkQQx5RERERBrEkEdERESkQQx5RERERBrEkEdERESkQQx5RERERBrEkEdERESkQQx5RERERBrEkEdERESkQQx5RERERBrEkEdERESkQQx5RERERBrEkEdERESkQQx5RERERBrEkEdERESkQQx5RERERBrEkEdERESkQQx5RERERBrEkEdERESkQQx5RERERBrEkEdERESkQQx5RERERBrEkEdERESkQQx5RERERBrEkEdERESkQQx5RERERBrEkEdE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3FgURREXFxeZP39+sV/rlIRx7idOnCjdunWTf//73xIfH1/gK6TCTg+wBmOdCRMmiKIo8sILL8hXX30l69atk6CgIFEURWbMmCEiZTv3b731llSrVk3mzZsnN2/elBMnTkizZs2kY8eO8scff8iTTz4piqKInZ2d/POf/5SjR49atb4t5l6kas8/577qzn3++raaf0sx5FUyUVFR4uzsLEuXLhWR/+2AhV1htX//fvH29pY6derIyZMnrVLfYDCon6Rq1qwpXbt2lVmzZsmuXbskJSWlwLIiIlevXpUpU6bIl19+aZX61atXl2effVZu3LghIvd27Li4OPHz85MGDRoUCFWZmZmyfft2iYuLs0p9T09P6d+/v8mRupdeeknq168v7dq1k6ZNm0pISIh6RPXVV19V+2mN+tWqVSsy5BsMBjly5IhMmTJF3N3dRVEUWbFihfqYpbXt7OzUF7KmTZvK66+/LuvXr1ffdPIvK3Lv0/eQIUPkgw8+sKi2cZ0eHh7St29f9YiCXq+XU6dOSdu2bcXV1VWOHDkiIv/7W9++fVu++uorq9w2yGAwSI0aNeSVV14xOXl62LBhUq1aNQkMDJT27dtLv379pEmTJqIoinTu3PmBRxlKW99Wc29cR1Wdf8591Z17Y31bzr8lGPIqmePHj4uLi4tMmDChyGX0er26o61bt04URZHPPvvMorrGHWfXrl2iKIp069ZNXn31ValXr576dek//vEPWbFihcTFxUlaWpr63K1bt4qTk5O88847ImLei46x/vfffy/Ozs7y9ddfq2M1Wr58uSiKIlOnThWR/52YGxsbK40bN5Z58+aZrMuc+t999504OTmp9Y2PGY+czp07Vw27f//9t3Tv3l0URZHvvvuu1DUL88svv4irq6vMnTtXRB4c8i9cuCBt2rQRJycn2bt3r9k1jWPfs2ePKIoivXv3lilTpkjTpk1FURRxdHSUNm3ayNtvvy1bt241+bro559/Fp1OJ2+++abaT3Prb968WVxcXAqd+++//14URZHhw4eLyP/mfv/+/eLr6yvvvvuuybrMqf/999+Li4uLfPXVV+pjBoNBhg0bpr6pGt8A7t69K4MHDxZFUSy+XZGRLeZepGrPP+e+6s59/ufYev4twZBXydy5c0cef/xx8fDwkI0bNxZ6+xSR/+1QFy5ckOrVq8uoUaMs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", + "text/plain": [ + "
" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from qiskit import Aer, QuantumCircuit, transpile\n", + "from qiskit.visualization import plot_histogram\n", + "\n", + "qc = q_algo.export(\"qiskit\")\n", + "qc.measure_all()\n", + "simulator = Aer.get_backend(\"aer_simulator\")\n", + "circ = transpile(qc, simulator)\n", + "result = simulator.run(circ).result()\n", + "counts = result.get_counts(circ)\n", + "\n", + "counts_readable = q_algo.decode_counts(counts, discard_lower=5)\n", + "plot_histogram(counts_readable)" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAABtoAAAn8CAYAAABsxTVgAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdeXxU9d33//eZyUZCIISwJoGwJAJhUwT3BastakFb9xts6WVre1WrVSte1++yl73u2+u2WKytl72vetVSuliLFatW1NaKVqAuKKskLMGwZANCEsi+zJzfH0eWSIDMMOecmXNez8cjDzRzzsxnMt853+XzPd+vYZqmKQAAAAAAAAAAAAARCbgdAAAAAAAAAAAAAJCISLQBAAAAAAAAAAAAUSDRBgAAAAAAAAAAAESBRBsAAAAAAAAAAAAQBRJtAAAAAAAAAAAAQBRItAEAAAAAAAAAAABRINEGAAAAAAAAAAAARIFEGwAAAAAAAAAAABAFEm0AAAAAAAAAAABAFEi0AQAAAAAAAAAAAFEg0QYAAAAAAAAAAABEgUQbAAAAAAAAAAAAEAUSbQAAAAAAAAAAAEAUSLQBAAAAAAAAAAAAUSDRBgAAAAAAAAAAAESBRBsAAAAAAAAAAAAQBRJtAAAAAAAAAAAAQBRItAEAAAAAAAAAAABRINEGAAAAAAAAAAAARIFEGwAAAAAAAAAAABAFEm0AAAAAAAAAAABAFEi0AQAAAAAAAAAAAFEg0QYAAAAAAAAAAABEgUQbAAAAAAAAAAAAEAUSbQAAAAAAAAAAAEAUSLQBAAAAAAAAAAAAUSDRBgAAAAAAAAAAAESBRBsAAAAAAAAAAAAQhSS3AwAAAAAAAEhUW7Zsiej4ffv26bnnntONN96owYMH9+qccePGRRMaAAAAHMAdbQAAAAAAAA7Zv3+/fvazn2n//v1uhwIAAIAYINEGAAAAAAAAAAAARIFEGwAAAAAAAAAAABAFEm0AAAAAAAAAAABAFEi0AQAAAAAAOKR///6aPXu2+vfv73YoAAAAiAESbQBc8/777+vyyy9XZmam+vXrp1mzZmn9+vVuhwUAAAAAtsnLy9Ojjz6qvLw8t0MBALjsjTfe0Le+9S1Nnz5daWlpMgxDb7/9ttthAYgQiTYArnjvvfd0ySWXqLy8XP/7f/9v/cd//Ie2b9+uiy66SJs2bXI7PAAAAACwRXt7u3bt2qX29na3QwEAuOyZZ57R4sWLFQqFNH78eLfDARAlEm0AXHHXXXcpJSVF77zzju655x7dc889euedd2QYhu677z63wwMAAAAAW5SVlWnWrFkqKytzOxQAgMv+8z//U42NjVq7dq3mzp3rdjgAopTkdgDwh7a2Nv3whz/Us88+qz179iglJUX5+fmaNWuWfvSjH7kd3nFMU+oIuR1FZFKCkmG4G8POnTt133336Y033pAkzZw5Uz/5yU80c+ZMFRQUHLn1vaysTGvWrNE//dM/KTc398j5ubm5uuGGG/SrX/1KNTU1Gjp0qBtvAwAAAAB8z+/9YtM01RJOrD9AeiAow+2BAQ+hDCTedSAexsak3o+PSeo2LgYgcZFogyPuuOMOLV68WF/5yld07733qqurS9u3b9eKFSvcDq1HHSHpgaVuRxGZhTdJqS5+ow8cOKCLLrpIe/fu1be+9S2NHz9eK1eu1MyZM9Xc3Nzt2DVr1kiSzjvvvOOe59xzz9XixYv10Ucf6eqrr3YkdgAAAABAd37vF7eEQxqw4o3YPJlD6i+7QhlBhvpihTKQeNcBt8fGpMjGxwB4B7UvHPGnP/1JV155pX7961+7HQpssnDhQlVUVOh3v/vdkVvd//mf/1kLFiw47q7FqqoqST3P2jn8u8rKSpsjBgAAAAAAAGInkvExAN7BHm1wRP/+/bV582Z9/PHHbocCm/z5z3/WsGHDdMstt3T7/fe+973jjm1paZEkpaamHvdYWlpat2MAAAAAAACARBDJ+BgA7yDRBkf85Cc/UX19vSZNmqQxY8bo61//ul566SWFw2G3Q0OMlJeXa+zYsQoEul9WBg8erKysrG6/S09PlyS1t7cf9zxtbW3djgEAAAAALykuLlZpaamKi4vdDgUAEGORjI8B8A4SbXDENddco507d+q3v/2tLrvsMr355pu69tprdemll6qjo8Pt8OCw4cOHS+p5ecjDv2MzWAAAAAAAAABAvCPRBsdkZ2dr3rx5+sUvfqFPPvlECxYs0MqVK/XSSy+5HRpioKCgQGVlZcfdpbhv3z41NDR0+9306dMlSe++++5xz/Pee+/JMAxNmzbNtlgBAAAAwC3l5eW6+eabVV5e7nYoAIAYi2R8DIB3kGiD7UKh0HEViWEYOvPMMyVJdXV1LkSFWJs9e7aqq6v17LPPdvv9okWLjjt27NixOvvss/XHP/5RVVVVR35fVVWlP/7xj7rssss0dOhQ22MGAAAAAKe1tLRow4YN7EsNAB4UyfgYAO9IcjsAeF9jY6OGDRumOXPm6Mwzz9TgwYNVXl6u//7v/9aAAQM0e/Zst0NEDDzwwAP6/e9/r6997Wv64IMPNG7cOK1cuVL/+Mc/lJOTI8Mwuh3/05/+VDNnztRFF12k73znO5Kk//qv/1I4HNZjjz3mxlsAAAAAAAAAohbp+NjGjRv18ssvS5JWr14tSfrtb3+rVatWSZK+853vqH///s6+CQARI9EG26Wnp+u73/2u3nzzTf3tb39TU1PTkcTbv/7rvx7ZrwuJLScnR6tWrdJ9992nxYsXyzAMzZw5U2+99ZamT5+uPn36dDv+/PPP19tvv60HH3xQDz74oAzD0Pnnn68//vGPmjJlikvvAgAAAAAAAIhOpONja9eu1fe///1uv1u8ePGR/543bx6JNiABkGiD7VJSUvTII4+4HQYcMGrUKL3wwgvdfnfgwAEdOHBAI0aMOO748847T2+++aZT4QEAAAAAAAC2imR8bP78+Zo/f76D0QGwA3u0AYiZ1tbW4373wx/+UJJ0xRVXOB0OAAAAAMSd3NxcLVy4ULm5uW6HAgCwAeNjgP9wRxuAmLnqqqs0cuRInXXWWQqHw3rzzTf1yiuv6Pzzz9e1117rdngAAAAA4LqsrCzNmTPH7TAAADZhfAzwHxJtOC1btmyJ6Ph9+/bpueee04033qjBgwf36pxx48ZFExoccmwZmDFjhl566SUtW7ZM7e3tGjJkiL72ta/pjjvu0Pbt2yVRBgAAAAD4W11dnV577TVdeeWVys7OdjscAMBp+uz46KnGxxgbA7yHRBsctX//fv3sZz/TzJkze12RIHF87Wtf09e+9rWTHkMZAAAAAOBn1dXVevjhhzV16lQSbQDgQacaH2NsDPAe9mhzQG1trRYsWKCxY8cqLS1N+fn5uvvuu9Xc3KzbbrtNhmHoySefdDtMADYyw1Ldbqlqk1S5STqwUwqH3Y4KgJPam6SaLVLlRqmmVGptcDsiOK1pv1RdYpWBvVulzja3I4KTTPPTtsDHVlug9hMpHHI7KsA5pikdrJaqNlvXwX3bpVCH21EBcFJXu7Rvm3UNqN4sNe5zOyIATju01/r+V260rgddtAXgEdzRZrP169fryiuvVE1NjTIyMjRhwgRVVVXpiSee0I4dO1RXVydJmjp1qruBwhYVJW9r2f+dqQtv+ZGmXf29Ho/56TxDBVOv1jXfe8Xh6OCEUIe0Z51UsUFqO9T9sdS+Uu4UacRZUlKqO/EBsN/BamnXGml/mZV0P1bOaGnENCl7pDuxwX6mKe3bKu1eJx2s7P5YIEkaOl4aOV3K4IYGzwp1SRWftgU+m2BPyZByJ1nXgeQ+roQH2M40rQRzxbrjB9WTUqVhxdLIs6W0fu7EB/vRL5ZCi5co/IfnFLz3uwrM+ny3x0zTVOj+f5FZWqqkJ5+QMarAnSBt1NIg7V5jTTgKdXZ/rN8wKf9Mq01kGK6EZzu/f/5cA2CaUk2JNT52qKb7Y8Fkqy0w4mwpPcuV8ICY4I42G9XW1mr27NmqqanRfffdp+rqaq1du1Y1NTVauHChli9frjVr1sgwDE2ePNntcAHEWEeL9OFSqWzl8Uk2ybq75ZPV0ppnpbZG5+MDYL+qj6U1v7dm6n02ySZZd7Ss/aO08wPnY4P9TFPa+jdp0yvHJ9kkKdxl3en8we+kA7ucjw/262yzvuPb/97zXawdzVL5e9Z1ovWg4+EBtguHpE1/lkr/0vOdK13t0p610vu/PX7gDfCSwK1zpYKRCj31C5n7a7s9Fn7hRZkbNylw6zxPJlkaKqQPfmtNOPlskk2SDlVLm1+VSl7vub3sBX7+/IFwWNr8mvXTU10f6pQq1lt9ooYe+kxAoiDRZqO77rpLFRUVuvPOO7Vo0SJlZmYeeWzBggWaMmWKurq6VFBQoH79/DF9r3///po9e7b69+/vdihwiV/KQKhTWv+C1Lj31Mc210rrl3G7POA1+8qsAQOZpz627B1r6Qx4S9k71qDSqYQ6pA1/YpDZa8IhacOLPSdZP6ulXlr3PMuJwltMUyr5izXZ5FQ6W63vQEuD7WHFhYyMDF1wwQXKyMhwOxQ4xEhOVtL990ltbQr9+CdHfm/uqVB4yW9kjDtDgRuucy9AmzTVSutesJLqp1K9Wdr6lv0xucGvnz9OzC9jY5K09U3rbrZT6WqzxtGaak99LBCPSLTZpLS0VEuXLlVOTo4eeeSRHo+ZNm2aJGnKlCndfl9eXq45c+YoMzNTAwYM0Fe+8hUdOHDA9pidkJeXp0cffVR5eXluhwKX+KUMVJdENmDaVCtV9mIwFkBiMMPSthWRnbP97z3P8kViam2wlgztrXCXdQc0vGPvVmsWf2+11Ft39gBecaimdwNrh3W2SZ/8w7544klBQYGefvppFRQUuB0KHGQUjlXg5htlfrRW4eWvyQyFFHp0kWSaCt5/n4xg0O0QY65sZWR7MVask5q9Mfx1HD9+/jgxv4yNNe2PbKyrq13asdq+eAA7sUebTZ599lmFw2HNnTtXffv27fGYPn2sjRiOTbQ1NjZq5syZys7O1rPPPqvW1lYtWLBAX/ziF7V69WoFAomdG21vb1dNTY2GDh2q1FT/bErV1dGi1kamZEj+KAOmad32HqmKDdaa1F5dlx7wkwPlPS8ZezJd7VLNFmu/JiS+iijuUKzbJTXXsV+bV0TTFqjcKBWcIwUYa4MHVKyL/Jy9W6WiS6WU9JiHE1dCoZBaW1vVp08fBX00uE6/WArMvUXhd99X6BdPK7DjE5lbtylw+9dl5HtvsL31oLVMeqQq1ktnfC7m4cQFP33+PeEacJQfxsak3q3u8Vn7y6ztVdIyT30sEE9ItNlkxQprGvvMmTNPeExFhTXF9dhE2//8z/+osrJS77zzjkaMGCHJmuVw/vnn6+WXX9a1115rX9AOKCsr0/XXX6/nn39excXFbofjmPeWPaT3lj3kdhhxwQ9loLnWmrUTqdYG6WC1lDU85iEBcFh1aXTn1ZSQaPOKSO7i6HZeqTTmgtjGAue1NkgHqyI/r71Jqq+QBo6MeUiAo8IhK2kWKTNkLTWZNzXmIcWVLVu2eL5P1BP6xZKRlKSk++9V13e+q/Ary2VMLFbgy9e6HZYt9m5Rr5ZQ/6zqUu8m2vz0+feEa8BRfhgbM01rtafIT7SuHyOnxzwkoEemaaqlpUWSlJ6eLiPKOyBItNlk1y5rR/uRI3vuJXd1dWn1aute2GMTba+88oouvPDCI0k2STrvvPM0evRo/fnPf44q0Xb22WerpsaeTT/mz58f0fHV1dWSpFdffVXr1vVuiuOSJUsijOr0BZP76EsPb4/Z802cebsKz7mhx8f+9MMrYvIaRYWFCnW2xuS5IuHVMnA6ikdcpPu//GxU5371lm/oox2vxTgiAE77l+v/qHF550V8XsmGMl1z36WxDwiO++VdOxUMRN7U/tX/PKMlNz1gQ0Rw0thh0/TgTS9Fde4/33a3/rFlWYwjApyV2Weg/uub0a2LvvDhn+hP7y2KcUT28mqfyO/9YjMlRXrqZzF5rm4yMqTkZKmrS8b0s2XEcOWiosIiGR3xsfn3/7rkB/r8mV+P+LyuNqlg5Gh1RbLmpE1sKQM2fv5S7MtALK8DiXYNiIRX64HTkZKUpv+5syyqc//rx0/pDyv/T4wjAnoWDoePfCenTp3a6+/kZ5Fos0lzc7MkqbW154v70qVLVVtbq8zMTI0aNerI70tKSnTDDcdXOsXFxSopiW5qdE1NjSore7ELexQOZ3t7q62t7ci/vT3XrthPJik1tmuVZA0t1IiJl8f0OT+rqrpKXe2RfR6x4NUycDoGpe2N+tz9B/Yl3PsFcLzW1uiux20dbVwDPCIcDisYxbhJY9MhyoAHZAZyoz639sB+ygASXmZ69IOcDQfrEu474NU+ke/7xWmpSo7NMx1hmqZCjz0udXVKI/IV/v0fFLjkYhnDh8Xk+auqq6S29pg81+k6dOhg1OdWVOxRKNwVw2iiFOMyYPfnL8W+DMTyOpBw14AIeLUeOB3JwZSozz3YeDDh3i+8Ye/e6Md0SbTZZOjQoaqvr9fatWt13nndZ7RXV1fr/vvvlyRNnjy52+2I9fX1ysrKOu75srOztXVrFGtvfBqLXdLTI6tw09LSjvzb23Nzc6MfqIhWMLmP4695uoYPG+7KrB2vloHTYaZYn4Npmr2+3fjwseGkloR7vwCOd6gtusbZwZZqrgEeUXtot4Zlj434vJauOsqABwTSOhQ2wwoYvc+2Hm4LhJKaKANIeIYRUHNbgzLSsiI+t908mHDfAa/2ifzeLzZTUhTFjgAnFX7xZZkbNirwta8qcN656rrjOwo99riCixZGvVTVsYYPGx43d7S1huqiOu9AY5WGDhsS42iiE+syYPfnL8W+DCTadYCxsfhS31SjAX0jH5duC9cn5PtFYjr2jrYhQ6Kvf0i02eTyyy9XaWmpFi5cqCuuuEJFRUWSpDVr1ujWW29Vba21+efUqVNtj+XDDz+07bm3bNkS0fGbN2/W4sWLddVVV/V6DeKHH344mtBOS3uX9MBSx1/2tGzbvl2pLnyjvVoGTtdHz0n1u3vfUDYMQ/2GSu+tf8PGqAA45WCVtOb3kZ/3lXuv0Pf+X0XsA4Ljdn4glb0T2TlGQHry9/+m1Ix/sycoOGr9n6TaHb0/3jAMZQyU3v7gZcVorA1w1ba3pN0fRXZOUqr07Gs/VTD5p/YEZROv9on83i9uDnVpwIrY9c/MykqFFy+RcUaRAjdeLyMYVGDeXIV/9WuFX3xZwS9dc9qvsW37NmUE42Oor7NVWvlza8/GSEz/wnBV/Ed8tIdjWQac+Pyl2JeBRLsOMDYWX3asksrfi+ycQJK0+IVHlJz2iD1BAZ/R3Nysvn37SpJWrVoV9fPEdiFgHLFgwQINHDhQe/bsUXFxsSZNmqTCwkLNmDFDo0eP1mWXXSap+/5skjRgwAA1NDQc93x1dXXKzs52InRbFRcXq7S01LMbfeLU/FIG8qac+pjjzpka8zAAuKTfMClzcGTnpGZKOaPtiQfOGz5RCgQjO2dwoZSaYU88cF409XreVJFkg2fkRtEeHlYsBWO9Vl8cKioq0urVq49MyIX3meGwQj/6sRQOK3j/vTKCViMhcOP1MooKFV68RGZVtctRxlZyH2nI+MjOMQwpd7I98bjJj58/Ts4vY2O5UyRF2LYdOl5KTrMlHMBWJNpskpeXp5UrV+rqq69WWlqadu7cqezsbD311FNavny5tm3bJun4RNv48eN73IutpKRE48dH2EIB4JrBRdZPb+WMloZOsC8eAM4yDGn8F3o/WGgEpOJZUoz3QoeLUtKlMyLYgiK1r1R4qW3hwAUDC6ykQW8NGOHNwUX4V0a2NObCyI4ffb598cST5ORkZWdnKznZB1lFSJLCz78gs6RUga/OkzFixJHfG8Gggt+7VwqHFHrscZmm6WKUsTf2IimtX++PL5pptYm8xq+fP5CWKRVd2vvj+/SXxkbQdgDiCcM5Nho/frxeeeUVNTY2qrGxUe+//75uv/12NTc3a+fOnQoEApo4cWK3c774xS9q1apVqqg4epv8+++/rx07dmj27NlOv4WYKy8v180336zy8nK3Q4FL/FIGDEOaeJU0ZNypj80ZI02azQA74DX9hkhnXiclnWI2XiBJmnyNlD3SmbjgnNxJ0rjLdcpZnH36S2fdaHVE4R2GIY3/vDRs4qmPzS6Qplwb+V2QQLwrOKd3ybO+g6Qzb/DPDPbdu3fr29/+tnbv3u12KHCAuXu3wr/+rYzx4xS47svHPW4UjFRg3lyZmz5W+MWXXYjQPqkZ0rQbpfReLNBUeKmUf5btITnOz58/TswvY2OSNGKaNPbiUx+XkW31iVJY4QMJKj4WbvaZzZs3yzRNFRUVHbfh5e23367/+q//0jXXXKP/+I//UFtbmxYsWKAZM2bommtis16zm1paWrRhwwa1tLS4HYoj8iZcqrt/d/IZSad63Gv8VAYCSdLEq6VhE6SK9VLtJ90fH1hgLRGVM9q6mwWA92TlSed9TaraJFVskNobj3nQkApmWEvNRjLTF4klb6pVDirWS9WbpVDn0ccysq3HhxVb+xLBewJBacIXrCVwKtZL+8skHdP0GzDCKgODxjLhBt5kGFaibeAo6zuwd0v3/Zoyh1jfgaHj/LFk5GGNjY166623dMcdd7gdiiP83i82RoxQ8vKXTnpM8JabFLzlJociclafLGnGPKmmVKpYJzXVdn88d7J1HYh02fVE4ffPX+Ia0BM/jY1JVr93YMGnfaISKdx19LG+gz7tE42XgikuBQjEAIk2F2zatEnS8ctGSlK/fv20YsUK3X333br55puVlJSkL37xi3r88ccVoPcNJBzDsBJpOaOl9mbpvSXWptAp6dKZ17sdHQAnpGZIo86VRs6QWuulD/9w9Dow9iK3o4MT+uZYd7aNvVha/Qvr809Ol879Gvtx+YFhSANHWj8dLdK7vzp6DZh2o9vRAc7oP8z6KZop/eOXR78DM+ZxHQT8ICnFmlyWO1lqbbCuA4eN/7xrYQFwUOZg6/teeIm0+umjbYFzvkJbAN5Aos0FJ0u0SdKYMWP0yiuvOBkSAAekZhxdEoo72AD/CQSkjIHHXAfoTPhOUsrRzz8QoAz4UUo6bQH4W3Ja9+8A10HAXwxDSh8ga1ltU6dcXhuA9ySl0haAN9G9c8GpEm0AAAAAAAAAAACIf9zR5oIVK1a4HYJrcnNztXDhQuXm5rodClxCGQAAAADgZ0OGDNEDDzygIUOGuB0KAMAFjI0B3kOiDY7KysrSnDlz3A4DLqIMAAAAAPCznJwczZ8/3+0wAAAuYWwM8B6WjoSj6urq9Mwzz6iurs7tUOASygAAAAAAPzt48KBef/11HTx40O1QAAAuYGwM8B4SbXBUdXW1Hn74YVVXV7sdClxCGQAAAADgZxUVFbrnnntUUVHhdigAABcwNgZ4D4k2AAAAAAAAAAAAIAok2gAAAAAAAAAAAIAokGgDAAAAAAAAAAAAokCiDY7KyMjQBRdcoIyMDLdDgUsoAwAAAAD8LC0tTePHj1daWprboQAAXMDYGOA9SW4HAH8pKCjQ008/7XYYcBFlAAAAAICfjRkzRi+88ILbYQAAXMLYGOA93NEGR4VCITU1NSkUCrkdClxCGQAAAAAAAIBfMTYGeA+JNjhqy5Ytmj59urZs2eJ2KHAJZQAAAACAn5WUlGjy5MkqKSlxOxQAgAsYGwO8h0QbAAAAAACAQ0zTVGdnp0zTdDsUAAAAxAB7tAE9SAlKC29yO4rIpATdjgAAAAAA4BV+7xenB4Kqv+yK2D2hA9IDDAzEEmUg8a4DjI0BcAuJNqAHhiGl8u0AAAAAAPiU3/vFhmEoI+jjPwAoA+I6AAC9xdKRAAAAAAAAAAAAQBSYkwBHFRUVafXq1crMzHQ7FLiEMgAAAADAz8aMGaOXX35Z+fn5bocCAHABY2OA95Bog6OSk5OVnZ3tdhhwEWUAAAAAgJ+lpaWpsLDQ7TAAAC5hbAzwHpaOhKN2796tb3/729q9e7fbocAllAEAAAAAflZZWakHH3xQlZWVbocCAHABY2OA95Bog6MaGxv11ltvqbGx0e1Q4BLKAAAAAAA/a2ho0LJly9TQ0OB2KAAAFzA2BngPiTYAAAAAAAAAAAAgCiTaAAAAAAAAAAAAgCiQaAMAAAAAAAAAAACiQKINjgoGg7rgggsUDAbdDgUuoQwAAAAA8LNAIKDp06crEGBIBgD8iLExwHto1cFRoVBIq1evVigUcjsUuIQyAAAAAMDPwuGw1qxZo3A47HYoAAAXMDYGeA+JNgAAAAAAAAAAACAKJNoAAAAAAAAAAACAKJBoAwAAAAAAAAAAAKJAog2O6t+/v2bPnq3+/fu7HQpcQhkAAAAA4Gf0iQDA36gHAO9JcjsA+EteXp4effRRt8OAiygDAAAAAPyMPhEA+Bv1AOA93NEGR7W3t2vXrl1qb293OxS4hDIAAAAAwM/oEwGAv1EPAN5Dog2OKisr06xZs1RWVuZ2KHAJZQAAAACAn9EnAgB/ox4AvIelI4EemKbUEXI7isikBCXDcDsKAAAAAIAX+L1fbJqmWsKJ9QdIDwRlMDAQM5SBxLsOMDYGwC0k2oAedISkB5a6HUVkFt4kpfKNBgAAAADEgN/7xS3hkAaseCM2T+aQ+suuUEaQgYFYoQwk3nWAsTEAbmHpSAAAAAAAAAAAACAKJNoAAAAAAAAAAACAKHAzLRxVXFys0tJSt8OAiygDAAAAAPyMPhEA+Bv1AOA93NEGAAAAAAAAAAAARIFEGxxVXl6um2++WeXl5W6HApdQBgAAAAD4GX0iAPA36gHAe0i0wVEtLS3asGGDWlpa3A4FLqEMAAAAAPAz+kQA4G/UA4D3kGgDAAAAAAAAAAAAokCiDQAAAAAAAAAAAIgCiTYAAAAAAAAAAAAgCiTa4Kjc3FwtXLhQubm5bocCl1AGAAAAAPgZfSIA8DfqAcB7ktwOAP6SlZWlOXPmuB0GXEQZAAAAAOBn9IkAwN+oBwDv4Y42OKqurk7PPPOM6urq3A4FLqEMAAAAAPAz+kQA4G/UA4D3kGiDo6qrq/Xwww+rurra7VDgEsoAAAAAAD+jTwQA/kY9AHgPiTYH1NbWasGCBRo7dqzS0tKUn5+vu+++W83NzbrttttkGIaefPJJt8MEANuZphQOux0F3GSakunzMmCabkcAN/H5w+9lgLaA9f79Xg4A+BzXQAA+R3vQe9ijzWbr16/XlVdeqZqaGmVkZGjChAmqqqrSE088oR07dhy5RXjq1KnuBgpbVJS8rWX/d6YuvOVHmnb193o85qfzDBVMvVrXfO8Vh6MDnBEOSfu2SxXrpYPVkhmSAknSwFFS3lQpe4RkGG5HCTt1tklVH0uVG6XWeqsxmdxHGnKGVQb65rgdob1MUzpQbn0H6nZL4S7r9x2t0t5t0qAxUiDoaoiwWahTqtkiVa6XOpqt37U3SR+/KuVNkfoP5zrode3NUtUm6+dIGWiWtv9dyp0ipWe5Gp7twiFp/45P2wKV1v8HkqTskdZ3YOAo738HmvZLFRukvVulzlbr/fYZIOVOloZPlJLT3I4QsA/9Yim0eInCf3hOwXu/q8Csz3d7zDRNhe7/F5mlpUp68gkZowrcCdJmB6utemB/2TG/NK1r49DxUlKKW5HZz++fP9cAwBoXaKiwroO1n1h9RCMg9RtqjYsMLpKCZGoSGh+fjWprazV79mzV1NTovvvu00MPPaTMzExJ0qOPPqoHHnhASUlJMgxDkydPdjlaAIi9xn3Shj9JbY3dfx/ukvZvt376DZOmXCulZrgSImxWs0Uqef1ocumwzlargVmx3hpgHHeFN5NNbY3S+j9JTfuOf8wMSZtelvpkSVO/JGUMdDw8OKB+j7TxZavMf1ZNifUzsECaNFtKSnU8PDhgzzpp21s93M1rSrvWWD8jp0tjL/Zmsqn5gHUdbG3o/vtwl1S7w/rpO9i6DqZluhKircIhqfQNqfrj7r83TamlTtr+trRjlTRhljR0nCshAnBA4Na5Cr/3vkJP/ULGtLNkDDo60yz8wosyN25S4J/mezLJEuqwJhd1S7AdY8sbUtk7VltoYIGjoTnGz58/AGuS7caXrETbscywdLDK+tn+d2tsrP8wV0JEDLB0pI3uuusuVVRU6M4779SiRYuOJNkkacGCBZoyZYq6urpUUFCgfv36uRipczIyMnTBBRcoI4MRdb+iDPhH037po6XHJ9k+61C19NEfrIYHvKW6RPr4leOTbJ9V9bG06RXvLSnZ3iR9+GzPSbZjtTZYx7XUOxIWHFRfIa17vuck27EO7JTW/tEaiIK37PpQ2vrmqa9vu9Z8epzHlo9prrOub59Nsn1W0z7ruPZmR8JyjBm26rfPJtk+K9xl1Zc1pc7EBffRJ/IfIzlZSfffJ7W1KfTjnxz5vbmnQuElv5Ex7gwFbrjOvQBtEu6S1r1w4iTbYV3t0voXrDaRF/n188eJUQ/4R1e7tHbp8Um2z+poltY+Jx2qcSYuxB6JNpuUlpZq6dKlysnJ0SOPPNLjMdOmTZMkTZky5cjvDifmZsyYodTUVBkem9ZaUFCgp59+WgUFBW6HApdQBvzBNKWNf7YaFL3RUi9t/Zu9McFZbYesO9l6a/+ny4t6SclfrL9Db3S2SZv+7L1Bdj8LdVqzFsOh3h1/qEYqW2VvTHDWob3W3Uq9VbHeWmrZK0zTSh51tvXu+EjrjURQsd6q33pr82u9rzeQ2OgT+ZNROFaBm2+U+dFahZe/JjMUUujRRZJpKnj/fTKC3lve4ZN3Tz24fJgZttrDXR6deOTHzx8nRj3gH1vfkppqe3fskT6kxyYh+wVLR9rk2WefVTgc1ty5c9W3b98ej+nTp4+k7om2srIyLVu2TNOnT1dKSopWr17tSLxOCYVCam1tVZ8+fRT0USOiq6NFrY29vKp6nF/LgN/U7bKWQ4rEvm3WHUCpPV8ykWAqN0Z+h9qe9VLemd5YOq2l3tqXLRKN+6wlI7Jy7YkJzjq8D1Mkqj6Wxlzo7T1K/CSayQMV66QhRTEPxRUHq6zrWiQOlEstDd7Ys840rWVDIzonbNWfYy60JybED7/2iegXS4G5tyj87vsK/eJpBXZ8InPrNgVu/7qM/Dy3Q4u5UJd1TYtEV7u1rHbeVFtCcp2fPv+ecA04yq/1gN90tEh7I1yxoK3RWlp9cKE9McE+JNpssmLFCknSzJkzT3hMRYU1refYRNvFF1+s6upqSdIPfvADzyXatmzZouuvv17PP/+8iouL3Q7HMe8te0jvLXvI7TDigl/LgN9EM7homlZHbPT5MQ8HDguHI+9US1Zytn6PlD0i9jE5rXJDdOdVbCDR5hUVUZSBUIe1dFzelFMfi/jW1R7dMoD1e6w9zbywZ2M03wHJun4WXhLbWNxQvye6JYErN0qjzpcCrD3jaX7tE9EvloykJCXdf6+6vvNdhV9ZLmNisQJfvtbtsGyxb1vkk44kqy/p1USbnz7/nnANOMqv9YDfVG/u/Qonx6pYT6ItEZFos8muXbskSSNHjuzx8a6uriNJtGMTbQEbelRnn322amrsWeB1/vz5ER1/OIn46quvat263k3xXLJkSYRRnb5gch996eHYrd0zcebtKjznhh4f+9MPr4jJaxQVFioUTSv2NHm1DNjlx7etUXbmMFVXVysvb7rb4djm0a+t1uD+PV//Tua5X7+qJ2+83YaI4KSsjKH6yTc+jOrc793xkP667pcxjsh53/vSM5o4MvKR4g/+XqJZt3/ehojgtP+5s0wpSWkRn/fkj5bod28/aENEcFLB4Mn6wf96Napzb73hn/XBtj/HOCLn/Z+5byh/0PiIz3vlj2/rsbnzbIjIWZ8/8+v6X5f8IOLzOlqkyeOnqaF5b+yDihNebA97tU/k936xmZIiPfWzmDxXNxkZUnKy1NUlY/rZMmI4DlRUWCSjIz7WXrzxwn/TVWf/c8TnNdVK+fkjZMbBBs62lAEbP38p9mUglteBRLsGRMKr9YBdvNgW6MntX/ipzh8f+f6L5SX7NCfvLBsiQk/Cx6zVeeGFF/b6O/lZJNps0txs7eTd2trzxX3p0qWqra1VZmamRo0aZWssNTU1qqystOW5W1paIjq+ra3tyL+9Pdeu2E8mKTU9ps+XNbRQIyZeHtPn/Kyq6ip1tUf2ecSCV8uAXUKh0JF/vfS+Piuo5KjOC3d56/P2q/DA1KjPbW3u8EQZCIeiW/8yoCRPvH9ISYHo1n/s7PB2/eAXWckFUZ/b3NjqiTIQiLKraYYMT7z/1qJeblTbg7oDDao+kPh/gxPxYnvYq30i3/eL01Kj7NWcmGmaCj32uNTVKY3IV/j3f1DgkotlDB8Wk+evqq6S2qK//sRSe1tn1Ofu31urdheSJceJcRmw+/OXYl8GYnkdSLhrQAS8Wg/YxYttgZ50dUQ3YSApkOrpv0s827s3+sluJNpsMnToUNXX12vt2rU677zzuj1WXV2t+++/X5I0efJkGTZvRjN06FDbnjs9PbIKNy0t7ci/vT03N9f5NbSCyX0cf83TNXzYcFdm7Xi1DNjl8NrbwWDQU+/rs1o7D0kaHvF5XWrz9N/FLzJSo7+GBlPDnigDXWZ0nbv2riZPvH9ILe0H1bfPgMhPDHRSBjwgPdMaljNNM+K2fnIfwxNloK2rMarzOs1WT7z/YGr0d2L07Z+m3LTE/xuciBfbw17tE/m9X2ympGh/TJ7pqPCLL8vcsFGBr31VgfPOVdcd31HosccVXLQwJmNDw4cNj5s72oykrqjO6+hqU87g7BhHE51YlwG7P38p9mUg0a4DjI0lBi+2BXoSCkSX9G7pOOjpv0u8CYfDR+4yHTJkSNTPQ6LNJpdffrlKS0u1cOFCXXHFFSoqsnY1X7NmjW699VbV1lqbf06dOtX2WD78MLrlu3pjy5YtER2/efNmLV68WFdddVWv1yB++OGHownttLR3SQ8sdfxlT8u27duV6sI32qtlwC4rfy61N0nDhg07sk+jF5Wtkna+F/l533zgy/r3X3459gHBcR/+QWqIsIgbhvT0cwuVlrnQnqAcVPWxVPJ65Od94caz9M3HvHtt8JOS161yEKnvP/YtPZb7rdgHBEeZpvTuYqmlPrJBs2CK9OLffqWk6G6IjCs735fKVkZ+3q3fmaUHfp7418G2Rmn1/1hlIRJZedK2HZvtCSpOeLE97NU+kd/7xc2hLg1Y8UZsnkySWVmp8OIlMs4oUuDG62UEgwrMm6vwr36t8IsvK/ila077NbZt36aMYHwM9TXuk97/TeTn5U9Mi5trQyzLgBOfvxT7MpBo1wHGxhKDF9sCPan9RFr/QuTnTbtshCr+j3f/LvGmublZffv2lSStWrUq6udhi2WbLFiwQAMHDtSePXtUXFysSZMmqbCwUDNmzNDo0aN12WWXSeq+P5sfFBUVafXq1UcSj/AfyoA/5E2WFOGEvNS+0qAxtoQDF0SzgfmgsVJaZsxDccWQM6RIt+cygtLwSfbEA+dF8x3oO0jqH/nNwIhDhhFdGRhWLE8k2SRp+ETJiLC3mZxmXT+9IC1Tyhkb+Xn5U2MeCuIQfSL/McNhhX70YykcVvD+e2V8ejdH4MbrZRQVKrx4icyqapejjK3MwdG1a6KpP+OdHz9/nBz1gD8MHCX16R/5ebn+Shd4Bok2m+Tl5WnlypW6+uqrlZaWpp07dyo7O1tPPfWUli9frm3btknyX6ItOTlZ2dnZSk6O9UrnSBSUAX9I6yflTo7snFHnSYGgPfHAeYMLpb6De398ICgVnGNfPE4LJkujInw/+WdKKbHdCgUu6jfUSh5HYvT5VoIG3jCsOLKOdVKqNGKaffE4LSVDyo9wD/eCc6Q4uREjJkadE1nbJnOwNKjQvngQP+gT+U/4+RdklpQq8NV5MkaMOPJ7IxhU8Hv3SuGQQo89LjPS22Dj3OjzFdEEzOyRUpYHV0vz6+ePE6Me8AfD+PQ6GIGhE6SM+Fg9FxEi0Waj8ePH65VXXlFjY6MaGxv1/vvv6/bbb1dzc7N27typQCCgiRMnuh2mo3bv3q1vf/vb2r17t9uhwCWUAf8447LeDzIXnCvl+WvegecFgtKZX5bSe9FANILSxNlWYsJLRpzd+0HmIeOkwovtjQfOK76q94NFRZdZCWp4R3KaNPU6647tUwmmSFO+JKVn2R6Wowovtq5vvZF/lnXd9JJ+Q6WJX7TquVNJz5amfplJR35Bn8hfzN27Ff71b2WMH6fAdccvk28UjFRg3lyZmz5W+MWXXYjQPgMLpPFXqFfJtn5DpclzvDfpyM+fP06MesA/hhVLYy7s3bEDC6Txn7c1HNjIQ/MFE8fmzZtlmqaKiop63PDy+eeflySVlJR0+/+CggKdfXZi9z4bGxv11ltv6Y477nA7FEfkTbhUd//u5DOSTvW41/itDPhZIGh1lHZ+IO1ZJ3U0H39MerY1e31475YkR4JJ7StNv0Xa/o5UUyqFe9gPfUC+1ej04sxVw5CKZkoZA6Vda6TWhuOPSe1rDS6PnO69QQVYSwCeeYP0yWqpcpPU1Xb8MZmDpVHnS4OjWGIO8S8jW5o+V9r+d2nfNskMH3/MwFFWQqrvIOfjs5sRkCZebZXzPWutvTg+q0+WVDDDWjrXi9fBwYXStBulHauk+j3HPx5IkoaOt8pAch/n44M7/NYn8nu/2BgxQsnLXzrpMcFbblLwlpscishZuZOl1EyrPXSo5vjHk1KlYROlsRdYE0+8xu+fv8Q1oCd+qwf8btS5Vpu3/F2p+cDxjyf3sSafs9JTYiPR5oJNmzZJOvGykTfccEOP///Vr35VS5YssTU2AIglI2A1KEZOl/Zvl0r+IoU6rWX1pnzJSrJ4cVANRyX3kSZ8QSq8xEq2lb1ztAxMnyv1zXE7QnsZhtVgzp0s1e2U6nZJe9ZbScekNOmC26UA6wt4WjDJKv+jz5f2bpW2vnn0O3DWjdbsba6D3paWKU36otTebF0Hd6yWwp3WYOK5X7E63V5mGFYibcTZUu0OafOrR78Dk6+xlgnz+ncgK1eadpPUVGtdB3at+bQeSLHqgeQI9/QEgESTM8r6OVQj7dsu7Xz/6GMXfdObCTYAONbQcdZexA2VUu0n1iS0cJc12eCib1qTr5DYGNpxwakSbaZp9vhDkg1AogoEraWjklKt/09KlbJHeH9gDUclp1l7kB1bBryeZDuWYXx618qlRwdUg0kk2fwkmCwNn9j9O9B/GNdBP0nNkEaeLSUfLgMp3k+yHSsQsO7uOvY7MLDAX9+BvjnSmAuOqQdSSLIB8Jd+Q6WxF+noUpIGSTYA/mEY0oC8T1cyONweTCbJ5hUM77jgVIk2AAAAAAAAAAAAxD/ypS5YsWKF2yG4ZsiQIXrggQc0ZMgQt0OBSygDAAAAAPyMPhEA+Bv1AOA9JNrgqJycHM2fP9/tMOAiygAAAAAAP6NPBAD+Rj0AeA9LR8JRBw8e1Ouvv66DBw+6HQpcQhkAAAAA4Gf0iQDA36gHAO8h0QZHVVRU6J577lFFRYXbocAllAEAAAAAfkafCAD8jXoA8B4SbQAAAAAAAAAAAEAUSLQBAAAAAAAAAAAAUSDRBgAAAAAAAAAAAESBRBsclZaWpvHjxystLc3tUOASygAAAAAAP6NPBAD+Rj0AeE+S2wHAX8aMGaMXXnjB7TDgIsoAAAAAAD+jTwQA/kY9AHgPd7QBAAAAAAAAAAAAUSDRBkeVlJRo8uTJKikpcTsUuIQyAAAAAMDP6BMBgL9RDwDeQ6INjjJNU52dnTJN0+1Q4BLKAAAAAAA/o08EAP5GPQB4D3u0AT1ICUoLb3I7isikBN2OAAAAAADgFX7vF6cHgqq/7IrYPaED0gMMDMQSZSDxrgOMjQFwC4k2oAeGIaXy7QAAAAAA+JTf+8WGYSgj6OM/ACgD4joAAL3F0pEAAAAAAAAAAABAFJiTAEeNGTNGL7/8svLz890OBS6hDAAAAADwM/pEAOBv1AOA95Bog6PS0tJUWFjodhhwEWUAAAAAgJ/RJwIAf6MeALyHpSPhqMrKSj344IOqrKx0OxS4hDIAAAAAwM/oEwGAv1EPAN5Dog2Oamho0LJly9TQ0OB2KHAJZQAAAACAn9EnAgB/ox4AvIdEGwAAAAAAAAAAABAFEm0AAAAAAAAAAABAFEi0AQAAAAAAAAAAAFEg0QZHBQIBTZ8+XYEARc+vKAMAAAAA/Iw+EQD4G/UA4D18m+GocDisNWvWKBwOux0KXEIZAAAAAOBn9IkAwN+oBwDvIdEGAAAAAAAAAAAARIFEGwAAAAAAAAAAABAFEm0AAAAAAAAAAABAFEi0wVH9+/fX7Nmz1b9/f7dDgUsoAwAAAAD8jD4RAPgb9QDgPUluBwB/ycvL06OPPup2GHARZQAAAACAn9EnAgB/ox4AvIc72uCo9vZ27dq1S+3t7W6HApdQBgAAAAD4GX0iAPA36gHAe0i0wVFlZWWaNWuWysrK3A4FLqEMAAAAAPAz+kQA4G/UA4D3kGgDAAAAAAAAAAAAosAebUAPTFPqCLkdRWRSgpJhuB0FAAAAAMAL/N4vNk1TLeHE+gOkB4IyGBiIGcpA4l0HGBsD4BYSbUAPOkLSA0vdjiIyC2+SUvlGAwAAAABiwO/94pZwSANWvBGbJ3NI/WVXKCPIwECsUAYS7zrA2BgAt7B0JAAAAAAAAAAAABAFcvxwVHFxsUpLS90OAy6iDAAAAADwM/pEAOBv1AOA93BHGwAAAAAAAAAAABAFEm1wVHl5uW6++WaVl5e7HQpcQhkAAAAA4Gf0iQDA36gHAO8h0QZHtbS0aMOGDWppaXE7FLiEMgAAAADAz+gTAYC/UQ8A3kOiDQAAAAAAAAAAAIgCiTYAAAAAAAAAAAAgCiTaAAAAAAAAAAAAgCiQaIOjcnNztXDhQuXm5rodClxCGQAAAADgZ/SJAMDfqAcA70lyOwD4S1ZWlubMmeN2GHARZQAAAACAn9EnAgB/ox4AvIc72uCouro6PfPMM6qrq3M7FLiEMgAAAADAz+gTAYC/UQ8A3kOiDY6qrq7Www8/rOrqardDgUsoAwAAAAD8jD4RAPgb9QDgPSTaAAAAAAAAAAAAgCiQaHNIbW2tFixYoLFjxyotLU35+fm6++671dzcrNtuu02GYejJJ590O0zEWEXJ2/rpPEMfLV90wmN+Os/QS4u+6GBUgPNCnVLVx1Jnm/X/ne3S/h2SGXY3LsAp4bC0b7u05W9HvwehTinc5W5ccE5Xu7Rn3dHPv6tdqtstmaa7ccE5bYekT97tXgaaat2NCc46VCNtf/uYMtAhdTS7GhLgCPrFUmjxEnV+/iqFX//rcY+Zpqmu7z2gzqvnyCzf6XxwDjFNqX6PtPUtSYfbP+bRa6KX+f3z5xoAWExTqi2XtrzZfVwg1OFuXIiNJLcD8IP169fryiuvVE1NjTIyMjRhwgRVVVXpiSee0I4dO46sxzt16lR3AwWAGAuHpE/+IVVskLqO6UCFO6UNf5LS+kkFM6TcKZJhuBcnYBfTlPaslXatkdqbuj/W1S6tfErKP1Mada5kMP3Jk0Id0vaVUvXHVifqyO87pbXPSenZ0ujzpaHj3IsR9mptkLa9bU0w0TGJ1VCn9N4SaUC+VHiJ1G+oO/HBfnW7pbJ3rETbsUIdVj0w5Ayp6FIpJcOV8AA4IHDrXIXfe1+hp34hY9pZMgblHHks/MKLMjduUuCf5ssYVeBekDbat13asVpq7mGCycqfS8OKpcKLpaRU52Nzgt8/fwDW5PPy96y+wbEOjwsMnySNvVAKkK1JWAzp2Ky2tlazZ89WTU2N7rvvPlVXV2vt2rWqqanRwoULtXz5cq1Zs0aGYWjy5Mluh2u7jIwMXXDBBcrIoBfpV5QB/wh3Wcm0ne93T7Idq+2QdYfP9re5qwPeY5rSljekbW8dn2Q7rLPVSkZvfNlKTMNbutqlj56TKtZ1T7Idq6VO+vgVaecHzsYGZzTtlz74vbS/TN2SbMeq3yN9+AepbpejocEhNVukdc8fn2Q7zAxLNaXSmt9b7SL4A30i/zGSk5V0/31SW5tCP/7Jkd+beyoUXvIbGePOUOCG69wL0EZ71kobX+o5ySZZ/cbKDVZd2NnqbGxO8fPnj55RD/jLjlVSyevHJ9kO62qXdn8orX3+xP1GxD8SbTa76667VFFRoTvvvFOLFi1SZmbmkccWLFigKVOmqKurSwUFBerXr5+LkTqjoKBATz/9tAoKCtwOBS6hDPhH6d+kAzt7d+zuj6wl1QAv2fm+VLmxd8fuL7MSzvAO05Q2/fnEg+ufVfaOtHeLvTHBWZ2t0roXpM6WUx8b7pI2vCQ119kfF5xzsFra/GrvlspuPSitW8aSwn5Bn8ifjMKxCtx8o8yP1iq8/DWZoZBCjy6STFPB+++TEQy6HWLM7d8hbV3Ru2Ob9lt1oVcnYPrx88eJUQ/4R+Um60623miosBJySEwk2mxUWlqqpUuXKicnR4888kiPx0ybNk2SNGXKlCO/e/7553Xddddp5MiRSk9P17hx4/Rv//Zvamo6wXT4BBIKhdTU1KRQyF/T9rs6WtTaWNvjj9/4tQz4TWuDtUxaJHa+xx098I5Qh7VcZCQqNkjt7NXjGYdqej/Z4LBP3vXu4JIfVX0stTf2/vhQhzXxBN5R/l5k+9E2H7CWV4P3+bVPRL9YCsy9RRo9WqFfPK3wz34uc+s2BeZ/RUZ+ntuh2aL83ciOb6iw7vT2Kr99/p/FNeAov9YDfmOGpfJ/RHbO3q1WmxCJh1U/bfTss88qHA5r7ty56tu3b4/H9OnTR1L3RNuiRYs0YsQI/d//+3+Vl5en9evX6z/+4z/097//Xe+8844CgcTNj27ZskXXX3+9nn/+eRUXF7sdjmPeW/aQ3lv2kNthxAW/lgG/qejlXTzH6mixBpfYpwheULPFWv4hEmZYqtpk7deGxFcRxV26zQesAaYB+bGPB84yTalifeTn1ZR4e48aP2k9KNV+Evl5e9ZLQ8fHPBzEGb/2iegXS0ZSkpLuv1dd3/muwq8slzGxWIEvX+t2WLY4WN37O/uPVbFeyh4R83Digp8+/55wDTjKr/WA39SWS20RTLw7rGK9dMbnYh4ObEaizUYrVlj3x8+cOfOEx1RUVEjqnmj785//rEGDBh35/0suuUSDBg3S3LlztWrVKl188cU2RQy7TJx5uwrPuaHHx/70wyscjgawX+2O6M8j0QYv2B/ld2B/GYk2r9gfxQC7ZJUdEm2Jr/mAlWiJVKhTqtsjDR4b+5jgrAPlOuG+fCdzsNJadjS5T8xDAlxHv/hTGRlScrLU1SVj+tkyEngy9clEM9lAstpCpikZRmzjiRs++fx7wjUAfhPt2Nj+HSTaEhGJNhvt2mXtaD5y5MgeH+/q6tLq1asldU+0HZtkO+zss8+WJFVWVkYcx9lnn62amiimEfXC/PnzIzq+urpakvTqq69q3breTfVesmRJhFGdvmByH33p4dit25I1tFAjJl4es+frSVFhoUIu7Bzs1TJglx/ftkbZmcNUXV2tvLzpbodjm8e//qEG9B0a8Xl/efVNzfrmV22ICPHCL9+Bf73+eZ2RF3nGbFvpJ/pyHhNqvGDx3bsVMCIfOPntkmf1q3n32xARnFQ4fLr+7cY/RXXud/75u1pd+nyMI4offqkHrp5+h2644F+jOnfGtPO1/9DuGEcUP7xYBrzaJ/J7v9hMSZGe+llMnuvIc5qmQo89LnV1SiPyFf79HxS45GIZw4fF5PmLCotkdHTE5LlO19xL/reuOPOfIj7PDEmjC8aqM9RmQ1QRxhLjMmD35y/FvgzE8jqQaNeASHi1HrCLF9sCPbnjqp9retEXIz6vbv9B5eVxp6NTwuGja71feOGFvf5OfhaJNhs1N1sbrbS29nyBX7p0qWpra5WZmalRo0ad9LneeustSdL48ZGvI1JTUxNVgq43Wlp6sbv7Mdra2o7829tz7Yr9ZJJS0x1/zdNVVV2lrvbIPo9Y8GoZsMvh9bdDoZCn3tdntbY3a0DPK+ae1MHGek//XeCf70BjcxS3skhqbj3k6b+Ln3R0tiktJfL2RH1DLWXAA9I1JOpza/ZVeboM+KUe2D9qb9Tn7q4oV12jPRMl44EXy4BX+0S+7xenpSo5Ns90RPjFl2Vu2KjA176qwHnnquuO7yj02OMKLlooIwa3cFVVV0ltEa5fbpO6hv1RnRcOh7Vrzycy42Hj2hiXAbs/fyn2ZSDRrgOMjSUGL7YFetLQWBfVea3tLZ7+u8SzvXujb8OTaLPR0KFDVV9fr7Vr1+q8887r9lh1dbXuv9+arTx58uSTVqiVlZX6/ve/r1mzZmnq1KlRxWGX9PTIKty0tLQj//b23Nzc3IjjOl3BBFyrZfiw4a7M2vFqGbBLMBg88q+X3tdnVdZt0fCBYyI+b3/jDk//XeCf78DeQ2WSvhDxedUN2zz9d/GTPbWbVTg88tmZda27KAMeEE5pVltHs9JSMnp9jmmaMgxDTaFqT5cBv9QDBzusLQIOf669Vd9Uo4z+KerTz7t/Gy+WAa/2ifzeLzZTUhRdqugEz1dZqfDiJTLOKFLgxutlBIMKzJur8K9+rfCLLyv4pWtO+zWGDxseN3e01bXuiuq8PbUlGj58eIyjiU4sy4ATn78U+zKQaNcBxsYSgxfbAj3Z3xTdGrqVdVs8/XeJN+Fw+MhdpkOGRD9hkkSbjS6//HKVlpZq4cKFuuKKK1RUVCRJWrNmjW699VbV1tZK0kmTZ01NTbrmmmuUkpKixYsXRxXHhx9+GNV5vbFly5aIju/s7NRtt92mzMxMJSf3bl7Qww8/HE1op6W9S3pgqeMve1q2bd+uVBe+0V4tA3ZZ+XOpvUkaNmzYkT0avahut7T2ucjOMQLST373gP474wF7gkJc8Mt3oLVBWv105Ofd85836geLb4x5PHBedYm0+dXIzklKlX77yiIFkxfZExQcVfqGVLmh98cbhqHskdJHH6+0L6g44Jd6wDSl95ZIzQciu0Nh2ueHavcPohucThReLANe7RP5vV/cHOrSgBVvxOS5zHBYoR/9WAqHFbz/XhmfDjIHbrxe5up/KLx4iQLnzDjtJQS3bd+mjGB8DPWFQ9Kqp6SOCG8umjVvom57ND6uDbEqA059/lLsy0CiXQcYG0sMXmwL9KSzzXqv4a7Izrv1npm690nv/l3iTXNzs/r2tZblWrVqVdTP458dN12wYMECDRw4UHv27FFxcbEmTZqkwsJCzZgxQ6NHj9Zll10mqfv+bMdqbW3V7NmzVV5err/+9a8aNix2aza7JTk5WdnZ2b2uROA9lAF/GJAvZeREds6QcVJq7yf+A3GtT5Y0aGxk5/QbJvWz7yZ0OGxIkRTBzUySpNxJUpDq0TPyp0qKcBWo/LPsiARuMIzIP89AUMqdbE88iC/0ifwn/PwLMktKFfjqPBkjRhz5vREMKvi9e6VwSKHHHo+P5RJjJBCUcnse7jqh5DRp6Dh74nGTHz9/nBz1gD8kp0nDJkR2Tp/+Us7Jd5hCnCLRZqO8vDytXLlSV199tdLS0rRz505lZ2frqaee0vLly7Vt2zZJPSfaOjs7df311+vDDz/Ua6+9pgkTIvxWxqndu3fr29/+tnbv9u7m3jg5yoA/GIY0eY7VqOiNjBzpjMvsjQlw2vjPS+kDendsSoY06YvWdwfeEEiSplxr/dsbWXnS6AttDQkO6ztIGve53h8/4mxpUOSrLiOO5U6WhvZ2i21Dmni1lBrFHrdIPPSJ/MXcvVvhX/9WxvhxClz35eMeNwpGKjBvrsxNHyv84ssuRGifUedK2SN7d2wgKE2+Rgqm2BuT0/z8+ePEqAf8o/BSKbOXqxEGU6w+pEHGJiHFx/3kHjZ+/Hi98sorx/2+qalJO3fuVCAQ0MSJE7s9Fg6HNXfuXL355pt69dVXNWPGDKfCtV1jY6Peeust3XHHHW6H4oi8CZfq7t+dfEbSqR73Gr+VAT/LyJbOvkXa8KLUUn/i4wbkS5MiSMoBiSIlXZp2s7TxJelg1YmPyxgoTfmSNXMN3tJ/mDTtJqsMtDed+LhBhdLEK6U4WekJMZQ3VTKC0tY3T7xkjGFIo86zfuAthiFNuFJKSpMq1p34uGCKNPGqyO+ERuLyW5/I7/1iY8QIJS9/6aTHBG+5ScFbbnIoIucEgtagcclfpL0nWVkvJd3qEw7Icyw0x/j58z/M79eAnvitHvCzpBRp2o3Spj9LB3ae+Li0fta4QN9BjoWGGKM775LNmzfLNE0VFRUdt+nlHXfcoT/+8Y/6l3/5F6Wnp+u999478tiYMWM0aBDfOACJIWOgdN7XpNpya4Dp2EbF0AnWAGT/YdzFA+9KzbASzg0VUsV6a//Cw3tzB4LS5GulgQV8B7ys/zDpgm9I+7ZbZaDh8FL7hrVUZN5UKXOwiwHCdrmTpMGFUtXHUtUmqfnApw8Y1kz/3MlSWqarIcJGgYB1Z+OIadaefTVbpPZG6zEjIJ3xOeuutySP3cEBAIcFk62VG0ada7WF9m2XOpqPPl58lTS4iAlHALwrKVU683rpYLV1Haz95Oi4gBGUJl0t5Yy12o1IXHx8Ltm0aZOknpeNfO211yRJP/zhD3Xeeed1+1m+fLmjcQLA6TIC1lJYZ15/dDmk1L7WzO2s4SQY4H2G8emdm7OlS+44+j1I7mOtvc53wPsCQWu/kbNvPuY6mGEtL0qSzR+S06SRZ1uTT44tA2MuIMnmF+lZUuEl0kXfPFoGUtKlvCkk2QD4Q98cadzl0sX/rKN7mBrW/kUk2QD4Qf9hUvGV3ccFUvpYkw1IsiU+qjKXnCzRtnPnToejAQAAAAAAAAAAQKTIlbrkZIk2LxsyZIgeeOABDRnSy10g4TmUAQAAAAB+Rp8IAPyNegDwHu5oc8mKFSvcDsEVOTk5mj9/vtthwEWUAQAAAAB+Rp8IAPyNegDwHu5og6MOHjyo119/XQcPHnQ7FLiEMgAAAADAz+gTAYC/UQ8A3kOiDY6qqKjQPffco4qKCrdDgUsoAwAAAAD8jD4RAPgb9QDgPSTaAAAAAAAAAAAAgCiQaAMAAAAAAAAAAACiQKINAAAAAAAAAAAAiAKJNjgqLS1N48ePV1pamtuhwCWUAQAAAAB+Rp8IAPyNegDwniS3A4C/jBkzRi+88ILbYcBFlAEAAAAAfkafCAD8jXoA8B7uaAMAAAAAAAAAAACiQKINjiopKdHkyZNVUlLidihwCWUAAAAAgJ/RJwIAf6MeALyHRBscZZqmOjs7ZZqm26HAJZQBAAAAAH5GnwgA/I16APAeEm0AAAAAAAAAAABAFJLcDgCIRylBaeFNbkcRmZSg2xEAAAAAALzC7/3i9EBQ9ZddEbsndEB6gIGBWKIMJN51gLExAG4h0Qb0wDCkVL4dAAAAAACf8nu/2DAMZQR9/AcAZUBcBwCgt7hUwlFjxozRyy+/rPz8fLdDgUsoAwAAAAD8jD4RAPgb9QDgPSTa4Ki0tDQVFha6HQZcRBkAAAAA4Gf0iQDA36gHAO8JuB0A/KWyslIPPvigKisr3Q4FLqEMAAAAAPAz+kQA4G/UA4D3kGiDoxoaGrRs2TI1NDS4HQpcQhkAAAAA4Gf0iQDA36gHAO8h0QYAAAAAAAAAAABEgUQbAAAAAAAAAAAAEAUSbQAAAAAAAAAAAEAUSLTBUTk5OfrGN76hnJwct0OBSygDAAAAAPyMPhEA+Bv1AOA9JNrgKMMwlJKSIsMw3A4FLqEMAAAAAPAz+kQA4G/UA4D3kGiDo/bv36+f/exn2r9/v9uhwCWUAQAAAAB+Rp8IAPyNegDwHhJtAAAAAAAAAAAAQBRItAEAAAAAAAAAAABRINEGAAAAAAAAAAAARIFEGxzVv39/zZ49W/3793c7FLiEMgAAAADAz+gTAYC/UQ8A3pPkdgDwl7y8PD366KNuhwEXUQYAAAAA+Bl9IgDwN+oBwHu4ow2Oam9v165du9Te3u52KHAJZQAAAACAn9EnAgB/ox4AvIdEGxxVVlamWbNmqayszO1Q4BLKAAAAAAA/o08EAP5GPQB4D0tHAj0wTakj5HYUkUkJSobhdhQAAAAAAC/we7/YNE21hBPrD5AeCMpgYCBmKAOJdx1gbAyAW0i0AT3oCEkPLHU7isgsvElK5RsNAAAAAIgBv/eLW8IhDVjxRmyezCH1l12hjCADA7FCGUi86wBjYwDcwtKRAAAAAAAAAAAAQBRItAEAAAAAAAAAAABR4GZaOKq4uFilpaVuhwEXUQYAAAAA+Bl9IgDwN+oBwHu4ow0AAAAAAAAAAACIAok2OKq8vFw333yzysvL3Q4FLqEMAAAAAPAz+kQA4G/UA4D3kGiDo1paWrRhwwa1tLS4HQpcQhkAAAAA4Gf0iQDA36gHAO8h0QYAAAAAAAAAAABEgUQbAAAAAAAAAAAAEAUSbQAAAAAAAAAAAEAUSLTBUbm5uVq4cKFyc3PdDgUuoQwAAAAA8DP6RADgb9QDgPckuR0A/CUrK0tz5sxxOwy4iDIAAAAAwM/oEwGAv1EPAN7DHW1wVF1dnZ555hnV1dW5HQpcQhkAAAAA4Gf0iQDA36gHAO8h0QZHVVdX6+GHH1Z1dbXbocAllAEAAAAAfkafCAD8jXoA8B4SbQ6ora3VggULNHbsWKWlpSk/P1933323mpubddttt8kwDD355JNuhwnAZq0HpXDI+m8z7G4sgBvam49+B8JhyTTdjcdp4S7pUI31r+S/9w+ps+2Y70CIusCP2g51vw76Taij+3fg8PUQ/tHR/JnrIHUh4CumKTXul3T4u881APCdjhbaAvAmEm02W79+vSZNmqQf/ehHqqmp0YQJE9TZ2aknnnhCN910k0pLSyVJU6dOdTdQ2KKi5G39dJ6hj5YvOuExP51n6KVFX3QwKjjJDEt7t0ofLZVW/0LqbLV+39EiffisVFN6tIEBeJFpSnW7pA0vSSt/fvQ70Nkivf9rqWK9NfDqZW2HpLKV0sqnpA9+ZyVbJGuwcesKqZnVQjzvUI20+TVp5X8f8x1olVY/Le18X+podTc+2Ms0pX1l0trnpVX/0/06+MEzUtVm77cFmuus693Kp7p/B1Y+ZV0f2w65Gx/sV79H2vjy8WXgvV9Ju9dKXR5vC/gd/WIptHiJOj9/lcKv//W4x0zTVNf3HlDn1XNklu90PjgHdLZJuz6U/vFLqw9wrI+XSwer3InLKX7//LkGQJIaKq3ve7dxgVbp3cXW9eFwPxlIVEluB+BltbW1mj17tmpqanTffffpoYceUmZmpiTp0Ucf1QMPPKCkpCQZhqHJkye7HC2AWAt1Wo2I/WU9P95Qaf1kb5Ymz5GSUpyND7CbGZa2vSXtWdfz40210pa/SRUbpDOvk1L7OhufEw4nGU+UTNyzVqrcIBVfJQ05w9nY4Ixda6Ttf+/5scNJ2D3rpTO/LPUd5GhocEC4S9r8urR3S8+PH6qWSqqlqk3SlGul5DRHw3PE3q3S5ld7TiZ2tlrJ5j3rpCnXSNkjnY8P9jJNqewd61rYk+Y6adsKa+LNmddJffo7Gh7gmMCtcxV+732FnvqFjGlnyRiUc+Sx8Asvyty4SYF/mi9jVIF7QdqkuU5av8xa4aUnNaXWz+gLpFHnSobhbHxO8PPnD5imVP6u9Mk/en68pV7a/vbRtkD6ACejA2KHO9psdNddd6miokJ33nmnFi1adCTJJkkLFizQlClT1NXVpYKCAvXr18/FSJ2TkZGhCy64QBkZGW6HApf4pQyYYWnTKydOsh2rbqe08SXvz2aH/2z/+4mTbMdq2i+t/aP3ZrAdrJLWv3DqO/bCIet6UfuJM3HBOXvWnTjJdqz2RumjP0qtDbaHBAeZ5smTbMdqqJA2/EkKeWwpxdpPrOvbqdo4oQ5p/Z+kg2xT4jmfrD5xku1YLXVWW6Cjxf6Y4oFf+kQ4ykhOVtL990ltbQr9+CdHfm/uqVB4yW9kjDtDgRuucy9Am7Q1Wt/tEyXZjtXb60Ui8uvnjxPzUz2w64MTJ9mO1dogffSc1N5ke0iALUi02aS0tFRLly5VTk6OHnnkkR6PmTZtmiRpypQpR363cuVKXX755Ro2bJhSU1OVl5fXbYnJRFdQUKCnn35aBQUFbocCl/ilDOzdJtXu6P3xdbuk6s32xQM47VCNtPuj3h/ffEDa+YF98TjNNKXSv0aQQI/0eMS9jmZp29u9P76zpXdJOSSO2k96l2Q7rKHSusPVK8IhqeQv6vX+O+Eu6zrIPh3e0XxAKn+v98e3NkifvGtbOHHFL30idGcUjlXg5htlfrRW4eWvyQyFFHp0kWSaCt5/n4xg0O0QY65spTWhKJLjvbqcsB8/f5yYX+qB1oPW97q32hsjOx6IJywdaZNnn31W4XBYc+fOVd++Pa+F1adPH0ndE2319fWaNGmSvvnNb2rw4MGqqKjQI488ovPOO08ff/yx8vLyHInfLqFQSK2trerTp4+CPmpEdHW0qLWx1u0w4oJfykDF+sjP2bNeGj7Jm0tlwH+i+Q5UbZJGny8FPdA6OVhpLY0ZifYmaf8OaUiRPTHBWZUfS2aEidP9ZdbM77TMUx+L+BfNdbBivZR/ljfaAvvLrIRzJJr2W3cDZ+XaExOcFc13oHqzNPYi7y+p7pc+0WfRL5YCc29R+N33FfrF0wrs+ETm1m0K3P51GfmJPdbTk44Wa/ngiJhS5UZpzIW2hOQ6P33+PeEacJRf6oHKjZGfs3eLVHiplNIn5uEAtvLAUFZ8WrFihSRp5syZJzymoqJCUvdE25w5czRnzpxux02fPl1nnHGGli1bprvvvtuGaJ2zZcsWXX/99Xr++edVXFzsdjiOeW/ZQ3pv2UNuhxEX/FAGWuqtJaAi1bRPatwn9RsS+5gAJ4U6pZoI7uI4rLPVuhPUC3uVVX4c3XlVm0i0eUXVpsjPMU2pukQadU7s44Gz2pukA+WRn9dSbyXqszww3lZ1GtdBEm2JLxyWqqJYrSHUIe3bJg2fGPuY4okf+kQ9oV8sGUlJSrr/XnV957sKv7JcxsRiBb58rdth2aJmS+STjiSpcpN3E21++vx7wjXgKL/UA9H0icIhaW+pNfkMSCQk2myya9cuSdLIkT3v6N3V1aXVq1dL6p5o68nAgQMlSUlJ0X1cZ599tmpqaqI691Tmz58f0fHV1dbGC6+++qrWrevFxj2SlixZEmFUpy+Y3Edfenh7zJ5v4szbVXjODT0+9qcfXhGT1ygqLFSoszUmzxUJr5aB0zE+/wI9cN3SqM6dd+NtWrvjLzGOKH78+LY1ys4cpurqauXlTXc7HNhkYGauHrvt/ajO/bf7/49eX/tUjCNy3oLrlmpC/gURn7fxw62afffnbIgITnv6O+VKCiZHft7PfqtfX/evNkQEJ40Zepa+f/PLUZ37ja9+R+9u/VOMI3Lef966QrkDI5858MarK/X5r99iQ0Txww/tob5pA/Tkt6IYXZP0nw89ppfefzzGEdnLq30iv/eLzZQU6amfxeS5usnIkJKTpa4uGdPPlhGI3a4uRYVFMjpOsUGwQ26++N8166zbIz6vo1kaOaJAobD7G5faUgZs/Pyl2JeBWF4HEu0aEAmv1gOnIzmYql98J4I9VY7xk0d/rqWrHo5xRPHFD+3BRBEOh4/894UXXtjr7+RnkWizSXOztU5Ka2vPF/elS5eqtrZWmZmZGjVq1HGPh0IhhcNh7dq1S//6r/+qoUOH6sYbb4wqlpqaGlVWVkZ17qm0tES2W3VbW9uRf3t7rl2xn0xSanpMny9raKFGTLw8ps/5WVXVVepqd373cK+WgdMxOP1A1OfW1dUl3PuNRCgUOvKvl9+n33UNiL55cejQIU+UjY726Dq3oa6wJ94/otfc0kIZ8IB+SflRn1vfUO+JMhAKhU99UA86Ojo98f5Pxg/tof4Z7VGf29TUlHB/F6/2iXzfL05LVeRTZk7ONE2FHntc6uqURuQr/Ps/KHDJxTKGD4vJ81dVV0lt0X//Yqm5KcL1g49RXVWtzlAcJAxjXAbs/vyl2JeBWF4HEu4aEAGv1gOnIyUpLepzm5oTry0QKT+0BxPR3r17oz6XRJtNhg4dqvr6eq1du1bnnXdet8eqq6t1//33S5ImT54so4dNGC655JIjd7yNHTtWK1as0KBBg6KOxS7p6ZFVuGlpaUf+7e25ubnOrx0TTE68hYCHDxvuyqwdr5aB0xFMtWbemabZ4/e7J4ePDaR2Jdz7jcThtceDwaCn36ffpSQlqyvUGdXdPGawzRNlo6WzPqrzGttrPfH+ITU071VOv8jX/+s0mygDHpDcx0oyRdIWOMxI7vBEGWhqi24PltbOek+8/5PxQ3soGEhSe2erUqPoV3UZLQn3d/Fqn8jv/WIzJUX7Y/JMR4VffFnmho0KfO2rCpx3rrru+I5Cjz2u4KKFEdcXPRk+bHjc3NHWqaaozmtsrdPgodGNf8VarMuA3Z+/FPsykGjXAcbG4ktTW4P6pmVFfF6XmhPy/UbCD+3BRBEOh4/cZTpkSPT7+ZBos8nll1+u0tJSLVy4UFdccYWKiqxlU9asWaNbb71VtbVWx3Pq1Kk9nv/LX/5SDQ0NKi8v149+9CN9/vOf1+rVqzVixIiIY/nwww+jfh+nsmVLZJvwbN68WYsXL9ZVV13V6zWIH37Y+VuF27ukB6Jb+c8127ZvV6oL32ivloHTYZrSB7+TGvf2vqFsGIbSs6W/r/mzYtS+jksrf27tWzNs2LAj+1TCmzb9OfLNz4Mp0rOv/ZeSUv7LnqAcdKBcWrcs8vNu+OZFuvsJvhteULZK2vle5Of96Jf36WdZ98U+IDjuwz9IDRWRVeppmdJf//GcjNiuIuWKqo+lktcjP++O71+nf//ldbEPKI74pT1U8nrke/UFgtKSPy1Ucp+F9gRlE6/2ifzeL24OdWnAijdi82SSzMpKhRcvkXFGkQI3Xi8jGFRg3lyFf/VrhV98WcEvXXPar7Ft+zZlBONjqK+tUVr9P1b/OBLFF2ar4vvxcW2MZRlw4vOXYl8GEu06wNhYfNm6QtqzNrJzjID0/559SKl9vb2fn1/ag4mgublZffv2lSStWrUq6ufxQBcuPi1YsEADBw7Unj17VFxcrEmTJqmwsFAzZszQ6NGjddlll0k68f5sZ5xxhs455xzdfPPNevPNN9XY2KhHH33Uybdgi6KiIq1evfpI4hH+44cyYBhS3tTIz8ubIk8n2eAv0XwHhhVLSSkxD8UV2QVSn6zIzklOk4acYUc0cEPeZEkRXtMHFkjpWTYEA1dEcx3MnSJPJNkk63qWHOGKQekDpOyet7hGAormOzBkvJRgN09ExQ99InRnhsMK/ejHUjis4P33yvj0TobAjdfLKCpUePESmVXVLkcZW2mZUs7YyM/L7XmYLKH58fPHyfmlHsiL4vs8aKyU2jf2sQB280g3Lv7k5eVp5cqVuvrqq5WWlqadO3cqOztbTz31lJYvX65t27ZJOnGi7VhZWVkaO3asysrK7A7bdsnJycrOzlZycqxXOkei8EsZGDZeyorgzu/MIVLuJPviAZyWlScNHd/741MzpVHn2BeP0wxDOuNziijRUjhTipMJyIiBtH7SqHN7f3wwRRp7iX3xwHmDCyNLGmUMlPLPtC8epwWTretarxlS0WVMOvKSfkOl3Mm9Pz4lXRp93qmP8wK/9IlwVPj5F2SWlCrw1XkyjlmpyAgGFfzevVI4pNBjj8uM9PavODf2IimSbZpGnC1lZNsXj1v8+vnjxPxSD2QMlPKn9f74pDTrugEkIhJtNho/frxeeeUVNTY2qrGxUe+//75uv/12NTc3a+fOnQoEApo4ceIpn2ffvn3aunWrxowZ40DU9tq9e7e+/e1va/fu3W6HApf4pQwEkqQp10r9h5/62Mwh0tQvW4OsgFcYhjThC9LgXkzQS+snnXW992at5YySJl4tGcFTH3vGZdLw3q0YggQy+nxpRC86lkmp0tQvSZnxsR0JYiQQlCbPkQb0YuX3jIHSmddbZcFLhhdb17dTMYLW9TJnlP0xwVlnfE4aOuHUx6X2lc68QerT3/6Y4oFf+kSwmLt3K/zr38oYP06B67583ONGwUgF5s2VueljhV982YUI7ZORLZ15Xe/uVM2dIhV6cNKRnz9/nJif6oGiS3o38Sa5j3W9SB9gf0yAHZg37YLNmzfLNE0VFRUdt+HlvHnzNHbsWE2dOlVZWVnavn27Hn/8cSUlJemee+5xKeLYaWxs1FtvvaU77rjD7VAckTfhUt39u5PPSDrV417jpzKQ3Ec66wapcpNUsV5qqev+eJ8s6zb63CneWS4POFYgSZo0W6ousb4Dhz6zGkpKhtXgzj/TmsXuRUPHWQMMuz+S9m6RwqHujw8ushIxkdwBi8RhGFLRTCvRsmedVLez++NJqdaSqflnsWSkVyWlWgMGVZukPeul5truj6f1s9oCeVO9l2Q7LP8sa1LR7o+k/WWSGT76WCAoDRlnXQczB7sXI+wTCErFV1pJ1Ir1UkNl98eT+xxtC3htws3J+KlPJNEvNkaMUPLyl056TPCWmxS85SaHInJW/2HSObdKu9da+zZ2tXV/fMAIKX+qNKjQm3c1+/3zl7gG9MRP9YARkMZdYW2vULFOqt/T/fHkNGn4RKvNmNbPlRCBmCDR5oJNmzZJ6nnZyHPPPVe/+c1v9NOf/lRtbW3Kz8/XzJkz9f/9f/+fRo5kwwIg0QSTpRFnWYMHh6qldcukrnZrUOH827zZkQCOZRjWHQ3Di6XG/dJHS63OdXKadOHt1gCc12UOtgYZCy+VDlZKm1+zrgMp6dbdLvC+QWOsn5Z66YNnrO9AUpp00e3czewHgaCVSMudIh2qkdY9f7QtcMHXvbMn28lk5Vo/7U3Su0uOfgfOv01K8cF+XH5nGNZy0kPHS0210od/ONoWuOib1sQcAN6W1k8qulQac4FUXyGtX3b0sWk3uhYWAIcYhjSkyPppPiCtefaYcYFvWmNnQKKjSeuCkyXa7rzzTt15551OhwTAZoZhLSMZTLYG1wJBkmzwn8xB1h5kXbIG1fyQZDtWSh9rY+fD1wE/DK6ju/QBR78DwSSSbH5jGNas/m5tAZ9dB1L7dv8OkGTzn745n2kLMCIB+Eow+dNlgg1JpiLazxiAN2QM7N4WIMkGr/BZ1y4+nCzRBgAAAAAAAAAAgMTA/DEXrFixwu0QXDNkyBA98MADGjJkiNuhwCWUAQAAAAB+Rp8IAPyNegDwHhJtcFROTo7mz5/vdhhwEWUAAAAAgJ/RJwIAf6MeALyHpSPhqIMHD+r111/XwYMH3Q4FLqEMAAAAAPAz+kQA4G/UA4D3kGiDoyoqKnTPPfeooqLC7VDgEsoAAAAAAD+jTwQA/kY9AHgPiTYAAAAAAAAAAAAgCiTaAAAAAAAAAAAAgCiQaAMAAAAAAAAAAACiQKINjkpLS9P48eOVlpbmdihwCWUAAAAAgJ/RJwIAf6MeALwnye0A4C9jxozRCy+84HYYcBFlAAAAAICf0ScCAH+jHgC8hzvaAAAAAAAAAAAAgCiQaIOjSkpKNHnyZJWUlLgdClxCGQAAAADgZ/SJAMDfqAcA7yHRBkeZpqnOzk6Zpul2KHAJZQAAAACAn9EnAgB/ox4AvIc92oAepASlhTe5HUVkUoJuRwAAAAAA8Aq/94vTA0HVX3ZF7J7QAekBBgZiiTKQeNcBxsYAuIVEG9ADw5BS+XYAAAAAAHzK7/1iwzCUEfTxHwCUAXEdAIDeYulIAAAAAAAAAAAAIArMSYCjxowZo5dffln5+fluhwKXUAYAAAAA+Bl9IgDwN+oBwHtItMFRaWlpKiwsdDsMuIgyAAAAAMDP6BMBgL9RDwDew9KRcFRlZaUefPBBVVZWuh0KXEIZAAAAAOBn9IkAwN+oBwDvIdEGRzU0NGjZsmVqaGhwOxS4hDIAAAAAwM/oEwGAv1EPAN5Dog0AAAAAAAAAAACIAok2AAAAAAAAAAAAIAok2gAAAAAAAAAAAIAokGiDowKBgKZPn65AgKLnV5QBAAAAAH5GnwgA/I16APAevs1wVDgc1po1axQOh90OBS6hDAAAAADwM/pEAOBv1AOA95BoAwAAAAAAAAAAAKJAog0AAAAAAAAAAACIAok2AAAAAAAAAAAAIAok2uCo/v37a/bs2erfv7/bocAllAEAAAAAfkafCAD8jXoA8J4ktwOAv+Tl5enRRx91Owy4iDIAAAAAwM/oEwGAv1EPAN7DHW1wVHt7u3bt2qX29na3Q4FLKAMAAAAA/Iw+EQD4G/UA4D0k2uCosrIyzZo1S2VlZW6HApdQBgAAAAD4GX0iAPA36gHAe0i0AQAAAAAAAAAAAFFgjzYAAHpgmqZawiG3w4hIeiAowzDcDgOAR3AdBAAAAAD/ok/YeyTaAADoQUs4pAEr3nA7jIjUX3aFMoJU7QBig+sgAAAAAPgXfcLeY+lIAAAAAAAAAAAAIApM94SjiouLVVpa6nYYcBFlAAAAAICf0ScCAH+jHgC8hzvaAAAAAAAAAAAAgCiQaIOjysvLdfPNN6u8vNztUOASygAAAAAAP6NPBAD+Rj0AeA9LR8JRLS0t2rBhg1paWtwOBS7xWxkIh6WWA9KhvVJzrdTZZv2+q12q3CT1GyplDJQCHp720N4sHaqRGvdKne3W77rapZ0fWO8/c7CUnOZujAAAAHYJdUlN+622UHN99/ZgzRap3xCpT5ZkGK6GaRvTlFoPWu+/cV/39uCeddb77ztICia7G6eT/NYnAgB057d6wDSltkPW2FjTZ9oCu9dabYHMwd5uC3S1W++/ca/U1ti9Pbi/zBofS+3rbow4PSTaAMAGTfulivVSdakU6jj+8VCnVPoX678DSdLQ8VLeVKtx4QVd7VLVZqlyvdRcd/zjoU6p7J2j/98/V8qfKg0utP4eAAAAicw0pfo9Vntwf5lkho8/JtQpffyK9d8p6dLwiVLuFKlPf0dDtU1bo1S5wZpc1tF8/OOhTmnrm9Z/G4aUM8ZqD2eP9G7SEQAAP2lvstoBlRul9sbjHw91SttWfPo/hpQzymoLDBzljbZAOGS1AyvWW+3CnoQ6pQ0vWv+dPsBqCw4vlpL7OBUlYoXhTACIoZZ6acvfpLpdvT8n3CVVbbJ+svKkcZdLfXPsi9FO4S6p/D1p14fWf/fWwUrrJyVdGnOhNHySNxpVAADAf+orpC1vSM0Hen9OR4t1t//OD6Qh46QzZkopGfbFaKeOVmn7W1JNqZVw7A3TtAai9pdJ6dnSuM9ZCTcAAJB4OtusydVVH/c82ahHplT7ifXTp790xueknNG2hmkb07TaQdv/3vNkoxNpqZe2vy3tWCXlnymNPt/bd/l5DYk2AIgB05T2rJXKVkaWYPqshgrp/d9KY86XRkxPrCUlD9VIm1+3lsiMVkeLVPpXae82acLnpbR+sYsPAADATqEOqWyV1SY8HXu3WJO2xn3OSrolkn1l0pa/Wm26aLXUSWv/aM3oLrxESkqJXXwAAMBetZ9Y4zrtTdE/R+tBaf0L0rBiqWhmYm030t4klb4h1e6I/jnCXdKuNdL+HdKEWVLW8NjFB/sk0BAuvCA3N1cLFy5Ubm6u26HAJV4sA+GQtOnP0ra3Ti/JdpgZshJ2G1+0biFPBHu3Smt+f3pJtmPV7bQSjof2xub5AAAA7NTRIn249PSTbId1tkqbXrFmQvf2rjA3maa0Y7XVfj2dJNuxKjdY7cvTGaiLV17sEwEAes+r9cDOD6wEWazq7urN0ppnrP3dEkHTfmss63SSbMdqqZM+etb6OyD+kWiDo7KysjRnzhxlZWW5HQpc4rUyEA5bSbZ922L/3LWfSBteik3yzk57t1oDQb1eDqCXOlultc+RbAMAAPGts1X66Dlrc/tY27XGWkIo3pNtn6yWyt+N/fM210ofLY1s2aVE4LU+EQAgMl6sB3a+by0XGWst9dKHf7D2fo1nTbVWezDWbRbTlDa/JlWRbIt7JNrgqLq6Oj3zzDOqq6tzOxS4xGtlYPvb1l4Sdqnbae35Fq8OVksfL5dk0+BPV7u0fpn3BlcAAIA3mKY1MSpWd/X3ZPdHUsV6+57/dFVtsvbotUtLvbT+RWuCm1d4rU8EAIiM1+qBvVutlZns0nbIGhuK14nonW3SumXW5Cu7lL5u7QOM+EWiDY6qrq7Www8/rOrqardDgUu8VAbq90S+PNCMedKF37T+7a2qj2N323kshbqkktcju5Mtmvff0SJteTPy+AAAAOy2Z621x24komkPbf+71NIQ2es4oe2QtPWtyM6J5v0fqrbu7vMKL/WJAACR81I90N4c+QTxaNoCTbXSJzbcPR8L21ZI7RHecRfp38A0rTG4UEfk8cEZJNoAIAqhDquCi1RKhpSWaf0bidI3rBky8aT8Xan5QGTnRPv+922zZkgBAADEi5aG6GZvR9MeCh+e4BRHS0iaplT618gHfKJtD37yD2uQDQAAxI+tf4v8Tq5o2wK7PpAO1UR2jt1qd0jVJZGfF83foLVBKlsV+WvBGSTaHFBbW6sFCxZo7NixSktLU35+vu6++241Nzfrtttuk2EYevLJJ90OE0AEqjZLrQede732Jqlyo3OvdyqdrdYyRk7asTq+Bpd6K7R4iTo/f5XCr//1uMdM01TX9x5Q59VzZJbvdD44AI4wTesu6E2vHF0Kt6PFGjSO1Ubh8YzrILxq5/vOLmHUUCHV7Xbu9U7lYJV0YKdzr2eG7F2iEgAARKZxn7Rvu3OvZ5rxdVebaVpjVU6qWG/dRZho/NAnJNFms/Xr12vSpEn60Y9+pJqaGk2YMEGdnZ164okndNNNN6m0tFSSNHXqVHcDBdBrpilVbHD+dSs3RLZMo52qNju/NnZLnTVQnWgCt86VCkYq9NQvZO7vPg07/MKLMjduUuDWeTJGFbgTIABbNddJ7/9G+miptHfL0QkDZthKtK16ylpqJRxyN047cR2EF3W2STWlzr9uPO3V5kYs+7axdy8AAPHCjbGx2k+cnfh+ModqrGSjk8xwfE3E7y0/9AlJtNmotrZWs2fPVk1Nje677z5VV1dr7dq1qqmp0cKFC7V8+XKtWbNGhmFo8uTJbofriIyMDF1wwQXKyIjw3mB4hhfKwMFKeze8P5HWg87OGj4R07SSfm6Ip8Gl3jKSk5V0/31SW5tCP/7Jkd+beyoUXvIbGePOUOCG69wLEIBtmg9IH/5eatp/4mNM07q2bfpz/EymiDWug/Ci6hLnJx1J0v4yqS3CPUDs0NEi7d3m/OuaYWv/4kTnhT4RACB6XqgHujqkmiiWTDxtplS5yYXX7YFbY1SVGxNvxSc/9AlJtNnorrvuUkVFhe68804tWrRImZmZRx5bsGCBpkyZoq6uLhUUFKhfv34uRuqcgoICPf300yooKHA7FLjEC2XAzSV74mG5oPZGqaXendeu3514jQlJMgrHKnDzjTI/Wqvw8tdkhkIKPbpIMk0F779PRjDodogAYiwcltb/qff7a+4vk8rftzcmN3EdhNfU7XLphU1rCUm3NVRaSzm6IR7aw6fLC30iAED0vFAPHKyWQp3uvHa9W+2wz3CrTdLeaK36lGi83ick0WaT0tJSLV26VDk5OXrkkUd6PGbatGmSpClTppzwea688koZhqEf/OAHdoTpuFAopKamJoVCHl4fCSflhTJwaK97r93o4msf5ub772yT2g659/qnIzD3Fmn0aIV+8bTCP/u5zK3bFJj/FRn5eW6HBsAGtTuszaojUbHO40tIch2Eh7jZJjtU495rH+bq+9+bmBOvjuWFPhEAIHpeqAcaXWyPNO63Jja6qaPZSni5xc2xudPh5T4hiTabPPvsswqHw5o7d6769u3b4zF9+vSRdOJE23PPPaf169fbFaIrtmzZounTp2vLli1uhwKXeKEM+H1gwe1kX6I2JoykJCXdf6/U0anwK8tlTCxW4MvXuh0WAJtEs4xIR4uzm4k7jesgvKK9WWpvcu/1nd4LpCdutse62qS2ONmbJVpe6BMBAKLnhXrAzfZIuEtqOeDe60vSIZfbY26PzUXLy33CJLcD8KoVK1ZIkmbOnHnCYyoqrDU/ekq0HTp0SN/97ne1aNEizZs377RiOfvss1VTY880g/nz50d0fHV1tSTp1Vdf1bp163p1zpIlSyKMCk7yYxn45V07FQz0fPmcMU9KOckS26kZR/+98JsnPq6jWfrgd8f/PtQhjS4Yo85QewQRx9b8zy3UpZPm9vhYrN6/dOK/wfe++696a+Nvexlt9MyUFOmpn8X2STMypORkqatLxvSzZQRiO9+lqLBIRkdHTJ8z1n582xplZw5TdXW18vKmux2OK/gb+MPPv71VaSe7IJ7Aj//PL/X7vz9kQ0SR4zpoD79fA7zw/vMGjtPDt/6tx8dO1RaSTr89+PH6bbrmvst6Ga09HrpluUYN6XnCqBPtwVmXz9GOmrW9jNZ+fuwTAadj8V27FAgEFQ6FlJc30u1wgNPmx3rgX65/XuPyzu3xMSfaAl+ac5NK96zuZbSxd8H46/WNL/ykx8ecaA/+4Xcv6H9uvat3wZ4GP/QJw8fcHnnhhRf2+jv5WSTabLJrl7VY7MiRPTcYurq6tHq1dTHoKdH2b//2byoqKtLcuXNPO9FWU1OjysrK03qOE2lpaYno+La2tiP/9vZcu2JHbPitDBiGccIkm2RVpGmZJ3z46PMEendcT/bt3a8WF+9P72g/8SLcTrz/5sYWZ8pEWqqSY/h0pmkq9NjjUlenNCJf4d//QYFLLpYxfFjMXqOqukpqcy8J2xuHl8YIhUJx9d12En8Df4gmySZZ+xzETbngOmgLv18DvPD+0zXkhI/1ti0knUZ7yAy4/rczw8YJH3OiPVhf1+D63+BYfusTAafLlHnkX8o2vMCP9UA4dOLllpxoCxysP+Tq36Qxt/mEjznRHuzs6GJs7AROp0+4d2/0twqSaLNJc7P1ZWttbe3x8aVLl6q2tlaZmZkaNWpUt8c+/PBD/eIXv9BHH30Uk1iGDh0ak+fpSXp6ekTHp6WlHfm3t+fm5uZGHBec48cy0BXqVFKw52qm48T1rCRrpooRkMywtezQiZzseQYNyVFXqF8vIrVHcuqJq45Yvf+TPVdG3z6OlAkzJUX7Y/h84RdflrlhowJf+6oC552rrju+o9Bjjyu4aKEM48SDVZEYPmx43N/JEfx0c9tgMBh3322n8Dfwh5b2Q0pPjfxaHUgKx0254DpoD79fA7zw/gcMzDrhY6dqC0kxaA8aIff/dsaJN0Zxoj2Yld1fuR3xU3782CcCToch48i/lG14gR/rgUDwxI850Rbon5Xp6t+kb78Tf25OtAeTU5xpS/uhTxgOh4/cZTpkyIkn1J2KYZpu7/bjTRMmTFBpaamefPJJ3XHHHd0eq66u1rRp01RdXa0LLrhAq1atOvJYKBTSjBkzNHPmTC1atEiSdQfNQw89pB/84AdOvoVeiXQt4c2bN+v666/X888/r+Li4l6dM27cuGhCg0P8WAZW/0JqjXJfiAu/ac1UaWuUVj0V+fnJfaSLvy3FqO6JyifvSp9EeXf+6b5/SZryJWnQmOjOjURzqEsDVrwRk+cyKyvV9a07ZRSMVPAnj8kIBhV6dqnCv/q1Av/8TQW/dE1MXqf+siuUEYzvOTQrf27ta5PaV7roW25H4w7+Bv6w8aXo9lub+mUpZ3Ts44kG10F7+P0a4IX339km/f3J6M8/3fZQdoF01vXRv34sbHhR2l8W3bmxaA8efo544cc+EXA6/vaYJFOSIV1+n9vRAKfPj/XAx69KNSXRnRuLtsB5/yRlZEd3bizU7ZbWPhf9+af7Nxg5Qyq8OPrX7y0/9Ambm5vVt29fSVJTU5MyMqJbnSa2C2DiiMsvv1yStHDhQm3btu3I79esWaOZM2eqtrZWkjR16tRu5z355JPau3dvXCbVYqGoqEirV69WUVGR26HAJV4oA5nRT244bf2GuJtkOxyDn18/UmY4rNCPfiyFwwref6+MT2fyB268XkZRocKLl8isqnY5SgCxlndm5Of06S8NLIh5KK7jOgivSU6zvq9uiYe2kJvt4UiWY4pXXugTAQCi54V6wM32SDBFSh/g3utLUuZgd18/HtqDkfBDn5BEm00WLFiggQMHas+ePSouLtakSZNUWFioGTNmaPTo0brsMmvz6mP3Z6utrdX3v/99/fu//7u6urrU0NCghoYGSdaavQ0NDd0250tEycnJys7OVnJyLFd3RSLxQhlwszJzc1AjHmJIybBmwCeS8PMvyCwpVeCr82SMGHHk90YwqOD37pXCIYUee1zcYA54y4B8qV+Ey8yPnGEtH+I1XAfhRW62h+KhPehmezjRBpZ64oU+EQAgel6oB1xtCw12fxJ6cprUJ8u910+09pAf+oQe7MrHh7y8PK1cuVJXX3210tLStHPnTmVnZ+upp57S8uXLj9zldmyiraKiQo2NjfrmN7+pAQMGHPmRrDvjBgwYoN27d7vyfmJl9+7d+va3v53w7wPR80IZGDjq1MfYJcfF1z4sNcO9BlU8vP9ImLt3K/zr38oYP06B67583ONGwUgF5s2VueljhV982YUIAdjFMKQp1/Z+pmX+WVLuZFtDcgXXQXiVW0u8BpKsRL7bsvKkE2xZbDs32+Kx4oU+EQAgel6oB/oNtbY3cUO8jA25FUd6tpTm4uoKkfJLnzC+NzBIcOPHj9crr7xy3O+bmpq0c+dOBQIBTZw48cjvx44dq7feeuu442fOnKmvfvWrmj9/voYOHWprzHZrbGzUW2+9ddy+dfAPL5SBzMFS/+HSwSpnX7fvIKl/nOx9mzdVKv2LC68bxVJsbjJGjFDy8pdOekzwlpsUvOUmhyIC4KTUDOnsW6TSNz7dy6iHyXnJfaSCc6QR09yflWkHroPwqiFnSNvelrranH/dFJcGtY6VlCINK5Yq1jv7usFkadgEZ1/TDl7oEwEAoueFeiCYJA2fKO1a4+zrBoLS8EnOvuaJ5E2V9qxz53UTqe/olz4hiTYXbN68WaZpqqioSOnp6Ud+37dvX1166aU9nlNQUHDCxwA4L2+q84m2vCnxU5EOHSdtf1vqanfuNfsNTbxb4wEgJV2aco3UelCq3CTtXiOFQ1YHcfwXpMFFVicVQGIJJluDS7s/dPZ186Y6+3onkzfF+UTb0AlSUqqzrwkAAHqWO8X5RNvgM6w+VjzIGGitNFC/x7nXDCRJw4udez30HktHumDTpk2Sui8bCSCxDDnD2eUTMwZKwyae+jinBJOl0ec7+5pjL3b29QAglvr0l8ZeeHR5leQ+1l0ZJNmAxDVyurNLJg0ukvpHuPejnfoOcvbusmCKNOpc514PAACcXHqWNfHGKYEk58eiTmXsxZIcnBQ/6jwmHcUrEm0uiDTRZpqmfvCDH9gYEYBIBYJS8SzJcOIqakgTZsXfYGz+Wdb+HE7IO1PKHnHq4wAAAJySmiGd8TlnXiu5jzTOodeKRNFlUkqGQ681U0rLdOa1AABA74y9RErr59BrXWwl9+JJ/2HSyLOdea1+Q6yJXohPJNpc4Oc72oYMGaIHHnhAQ4aw/ptfeakM9B0kjbkwsnM6mqW2Ruvf3hp1TnzNXj7MMKQJX4hsJk007z89Wxp7UeTxAQAA2G3IGdKQcZGdE017aPwVziW0IpGcZrUHI5nJHc37zxljLdXpFV7qEwEAIueleiApRSq+MrKJ6NG0BbJHSPlnRh6fE0ZfYI0RRiLSv0EwWZpwpRQgmxO34uz+CH9YsWKF2yG4JicnR/Pnz3c7DLjIa2Vg5HSpvUnas7Z3x3/wu8ief/hEq8KOV+kDpKlfltb+UQp3nfr4SN9/aqZ01vVWww0AACDeGJ+uPNDZItXt7t05kbaHii6zlo2MVzmjpfGfl0r/0rvjI33//XOlSV+Mn72KY8FrfSIAQGS8Vg8MyLeSbR+/Ksk89fGRtgUyh0iTr4nftkAwSTrzOunDP0itDb07J5K/QSAoTblW6psTTXRwCjlQOOrgwYN6/fXXdfDgQbdDgUu8VgYMw1rGxo5bt/OmSuO/EL8NicOycqWzbpCS0mL7vOkDpLNvdm4JAgAAgGgEk6QpX7LuuoopQxp3hTTirBg/rw1yJ1mzrGPdbs0eaQ1cBZNj+7xu81qfCAAQGS/WA0PHfzoxJhjb583Kk6bdGP/7kqX2tcawMmKcDAumSFOvs9pEiG8k2uCoiooK3XPPPaqoqHA7FLjEi2XAMKTCS6wBllgs6ZPcR5o0Wxp3efwn2Q7LypXO/ao0cFRsni9vijTjVqlP/9g8HwAAgJ2CydZM46LLpEAM1o1Jz5am/y+rTZQohhdL0+fFZrZ1IGjtw3Lmdd5c2cCLfSIAQO95tR4YcoZ0zjzrDrTTZQSsFZ7OuiH+k2yHpfaVZsyV8qfF5vkGjLDG2rJHxOb5YC+WjgSAGBk0RsqaL5WtlKpLereU4rGMoDR0nJW0S0m3JURbpWVay0hWb5Y++YfUdijy58gcLBVeSiMCAAAkHsOw7j7LGSVte1uq3RH5cySlSnlnSqPOte6USzT9hliTpXa+by2t3tkW+XMMLLBWjMgYGPPwAACAzfoOsiYL7f5Q2vWh1Nka+XNkj5AKZ0qZEe57Fg+CydIZM6UhhdK2v0uHqiN/jtRMqy2YOzlxJuCDRBsAxFRyH2uPijEXSdUfS1Wbpebak5+TkS0NLZZyJ8bnJveRMAxrX7lhE6QD5VLFBql+jxTqPPE5yX2sAam8M6V+Q2lEAACAxJY+QJr6JWuPjoqN0t4tJ5+AZASsmd+5k6xJV8EEv4MrEJRGn28trb53q1S5STpUI5mhE5+TmmnNgs+bYv39AABA4goEpYJzpBHTpL3bpMqNVsIpfLK2QF9rT9q8Kd6YbJOVZ93ddqhGqlgv1X4idbSc+PhAkjQgT8qdau1/G2AdwoRDog0AbJDSxxpcGDld6uqQmvZLTbVSqMN6PJhsNRwyh3hzORwjYO1TkjNGMsNSS73UuM9qVIRDVgMiLdOa9ZyaSXINAAB4T58sqfBi66ejVWrcK7XUSaEuq62UlGrN1O6bE5vlJuNNMNmagDV8otX+a6q12oNd7Vb7MJBkJdX6DUnM1RwAAMDJBZKsidjDJlhtgeYDVlugs+2YtkCWNTaWmuATz0+k31BpwizJNKX2JunQXmsCVrjLSkgm97FWd8rIttqHSFwebM4jnqWlpWn8+PFKS0tzOxS4xI9lICnF2sMsK9ftSNxhBKykohdmJAEAAEQjpY+1JOLAArcjcUcgaCXU+sVgzxYv8GOfCABwlB/rgUDQSihlDnY7EncYhjXhPC3T7UhgFxJtcNSYMWP0wgsvuB0GXEQZAAAAAOBn9IkAwN+oBwDv4YZEAAAAAAAAAAAAIAok2uCokpISTZ48WSUlJW6HApdQBgAAAAD4GX0iAPA36gHAe0i0wVGmaaqzs1OmabodClxCGQAAAADgZ/SJAMDfqAcA72GPNgAAepAeCKr+sivcDiMi6YGg2yEA8BCugwAAAADgX/QJe49EGwAAPTAMQxlBqkkA/sV1EAAAAAD8iz5h77F0JAAAAAAAAAAAABAF0pFw1JgxY/Tyyy8rPz/f7VDgEsoAAAAAAD+jTwQA/kY9AHgPiTY4Ki0tTYWFhW6HARdRBgAAAAD4GX0iAPA36gHAe1g6Eo6qrKzUgw8+qMrKSrdDgUsoAwAAAAD8jD4RAPgb9QDgPSTa4KiGhgYtW7ZMDQ0NbocCl1AGAAAAAPgZfSIA8DfqAcB7SLQBAAAAAAAAAAAAUSDRBgAAAAAAAAAAAESBRBsAAAAAAAAAAAAQBRJtcFROTo6+8Y1vKCcnx+1Q4BLKAAAAAAA/o08EAP5GPQB4D4k2OMowDKWkpMgwDLdDgUsoAwAAAAD8jD4RAPgb9QDgPSTa4Kj9+/frZz/7mfbv3+92KHAJZQAAAACAn9EnAgB/ox4AvIdEGwAAAAAAAAAAABAFEm0AAAAAAAAAAABAFEi0AQAAAAAAAAAAAFEg0QZH9e/fX7Nnz1b//v3dDgUuoQwAAAAA8DP6RADgb9QDgPckuR0A/CUvL0+PPvqo22HARZQBAAAAAH5GnwgA/I16APAe7miDo9rb27Vr1y61t7e7HQpcQhkAAAAA4Gf0iQDA36gHAO8h0QZHlZWVadasWSorK3M7FLiEMgAAAADAz+gTAYC/UQ8A3sPSkQAAADiOaZpqCYfcDiMi6YGgDMNwOwzPoAwAAAAAAHBqJNoAAABwnJZwSANWvOF2GBGpv+wKZQRp3sYKZQAAAAAAgFNj6UgAAAAAAAAAAAAgCiTaAAAAAAAAAAAAgCiwrgocVVxcrNLSUrfDgIsoAwAAAAD8jD4RAPgb9QDgPdzRBgAAAAAAAAAAAESBRBscVV5erptvvlnl5eVuhwKXUAYAfzLDUku9FA5Z/x8OSaFOd2NyWkeLdGjv0b+BGZZM092YADgnHJaaD3zmOtjlbkxOMk2pvan7++9ocTcmwC30iQDA36gHAO9h6Ug4qqWlRRs2bFBLC71qv6IMAP7RXCdVbZIOVkmN+7on1jpbpbeekDKypX5DpSFnSANHSYbhXryx1tUh1ZRIB3ZaCbb2xu6Pd7RIK/9byhwiZY+UhhdLyX1cCRWATRr3SVUfSwerpab9UviYxFpnq/T2E1JGjtR/qDR0vJSV563rYGerVLVZqtslNe7tnljrbJXe+X9SaqbUb4hVBwwdLyWluBcv4BT6RADgb9QDgPeQaAMAADF1oFzatUaq232KA03r7o7mA1L1ZqlPfylvqpR/phRI4BZKW6O08wPrPYU6Tn5sR4v19zpQLu1YJQ0ZJ406R0of4EysAGLPNKV926TdH1kTDU56bFhq2mf9VG6UMgZK+WdJuZMkI4HXHmmpl8rfl/Zu6Z5c7El7o7S/UdpfJm3/uzSsWCqYIaVlOhMrAAAAAJyuBB7GAgAA8aSzTdq2Qqouie781oPWIGvVZql4lnWnWyIxTSu5tu0tqas98vPDXVL1x9bA9NiLrMF2L93ZAvhBe5NU+oZUuyO685sPSFvesK4lE2ZZd/0mEjMs7V5rTRw4VYKtJ6EOqWKddTdw0Uwr6cZ1EAAAAEC8S+B5kgAAIF4crJbeWxJ9ku1YzbXSmmesu8ISRahT2viSVPJ6dEm2Y4W7rGTdR0utpdUAJIYDO6V3l0SfZDvWwSrp/d9Yy04mis5W6aPnpO1vR5dkO1ZXu3U93fiS//bzBAAAAJB4SLTBUbm5uVq4cKFyc3PdDgUuoQwA3lNfIa19zrqTI1ZMUyp7RypbGbvntEtXh7RumbXsWSw1VFjJtg6W7Qfi3r4yaf0LUldb7J4z3GUlm3avjd1z2qWjRfpwqXXdiqX9Zdb19VTL8AKJhj4RAPgb9QDgPSTa4KisrCzNmTNHWVlZbocCl1AGAG9p3G8NLtt1x8HO96393uJVOGzdcRHrweXDmmo/HWTmjg4gbtXvkTb92Vo20Q6nsySvE0Kd1nWqudae52+okDa8bN/fF3ADfSIA8DfqAcB7SLTBUXV1dXrmmWdUV1fndihwCWUA8I5wSNq8PLI7DWbMky78pvVvb5W9Ix3aG3l8Ttj9oVS3K7JzIv0bNO619jsCEH+62qWPX5XMUO/PieY6uOUNax/LeFS2yrpO9VY0779up7Trw4hDA+IWfSIA8DfqAcB7SLTBUdXV1Xr44YdVXV3tdihwCWUA8I7yd607riKRkiGlZVr/9pZpWsunhSMYyHZC8wHpk9WRnxfN32D3R/bdNQcgetveltobIzsnmmtAqFMq+Yt1PYwn9RXSno8iOyea9y9Z19vmA5GdA8Qr+kQA4G/UA4D3kGhzQG1trRYsWKCxY8cqLS1N+fn5uvvuu9Xc3KzbbrtNhmHoySefdDtMAAB6rfWgtayjU5r2SxXrnXu93tj6lrPJvy1/i79B9t4ILV6izs9fpfDrfz3uMdM01fW9B9R59RyZ5TudD85Bpikd2Gnt6SdZd4K2NrgZkXO8WgYO1UhVm5x7vfrd0t6tzr3eqZimtPVvzr1eOGRddwEAAAAg3iS5HYDXrV+/XldeeaVqamqUkZGhCRMmqKqqSk888YR27Nhx5BbhqVOnuhsoAAARqNzofNKnYr2Uf5ZkGM6+bk+a66ylzJzUVCs1VEoD8px93dMVuHWuwu+9r9BTv5Ax7SwZg3KOPBZ+4UWZGzcp8E/zZYwqcC9IG5lhac866+fYxFpXx//P3r3HR1Xf+R9/n5mEDCThEiIBEiBcEoFwU4QWwSqutCoFteKtaEVt7dbrz1Jgt+u22112LS7W1mq3VqtYa5UW0CKorRa1iFVBrhIit3BJSIAAgVzIbeb8/jgSQQLMHGbOSc55PR+PPNA5t88k3/l+5/v9nO/3SCueljL7Sblfljr3dC3EhPNqGdi9xvlrlqyVug90/rotqSyJfVbz2Tq4w6p/UzOcvS4AAAAAnA4z2hKooqJCkyZNUnl5uaZPn66ysjKtXr1a5eXlmjNnjpYuXaqVK1fKMAwNGzbM7XABAIhKpMlKtDmt9lDsz0NLFLdm17W2WX3RMJKTlTRjulRXp/DPft78urm7RJF5v5Mx8FwFrrvWvQATKBKW1r8qbX771LPXKrZLH78klRc5GpqjvFgGGo66M7usssSa4dsauFUfla5z57oAAAAAcCok2hLovvvuU0lJie655x7NnTtX6enpzdtmzpyp4cOHq6mpSbm5uerYsaOLkTonNTVVY8eOVWpqjA9lgGdQBoC279BuqfGoO9duLcum7dvsznX3b2l9z6qLhpE3QIEbr5f58WpFlr4uMxxW+OG5kmkqOGO6jGDQ7RATougt6292JmZE2viadHBX4mNyi9fKQMU266YDN7SGejASlvZvdefareH9A2eLPhEA+BvtAOA9JNoSZNOmTZo/f74yMzP10EMPtbjPyJEjJUnDhw9vfu2dd96RYRgn/Xhlacnc3Fw9/fTTys3NdTsUuIQyALR9R/a6eO1y9659TH219eOGSNj5pdriJTD1JqlfP4WfelqRJ34t89PNCkz7loxebWwtzCjVHIjt+V1mRNr2XuLiaQ28VAb8Xg9WV7iX9K+vlupr3Lk2EC/0iQDA32gHAO8h0ZYgL774oiKRiKZOnaq0tLQW92nfvr2kExNtxzzxxBP6xz/+0fzz/PPPJzRep4TDYVVXVyscboO34yMuKANA2+fmAHPNASns0iySY9x8/5JU5fL17TKSkpQ04/tSQ6MiS5bKGFKgwDeudjushLGzrN7hPVLVvriH0mp4qQy4+Tk8stf5Z2R+kdv1UFUrSDYCZ4M+EQD4G+0A4D0k2hJk2bJlkqTx48efcp+SkhJJLSfaBg8erC9/+cvNP0OHDk1MoA4rKirSqFGjVFTk4QeR4LQoA0DbV3vIvWubEanusHvXl9x9/63h+mclNVVKTpYkGaMukBHw7ldRu8vbeX5ZPI+UATc/h41HpaZ6964vuV8P1bTlehAQfSIA8DvaAcB7ktwOwKt27twpSerTp0+L25uamrRixQpJLSfa4umCCy5QeXlibvucNm1aTPuXlZVJkl577TWtWbMmqmPmzZsXY1RwEmUA8J85095TVufcFreNvllqd5pl5lNSP/933HdPf52GGumj35/8+oTLvqZd+zdGF2wCTBp1r64dO6vFbWd6/1L0v4NTvf/fPvWsfj/136OM1j6zXTvpySfidz7TVPiRR6WmRql3L0X+8JICF39FRs8ecbtGfl6+jIaGuJ3vbDxz304FArE/d+y5p/+gZ2+amYCIYkcZOLUn796slOQOLW6LVz14qjpAkkYMO0+Ha/dHGW383XzJbF02YlqL25xoBx76759qycrHowsWcAB9IiA2x74nRcJh5eS0PG4GtCW0A0DbFYlEmv973LhxUX8mv4hEW4LU1FgPDjh69GiL2+fPn6+Kigqlp6erb9++J22/4YYbVFFRoa5du2ry5Mn66U9/qszMTFuxlJeXq7S01NaxZ1JbWxvT/nV1dc3/RntsomJHfFAGAP9paDj1VIp2qVIo/cznMALR7deS8r1lKi1zr144lH/qqRTRvn/J/u/gSNVhZ+rFUIqS43i6yCuLZa5br8Bttyow5stquvtehR95VMG5c2QYRlyusadsj1Tn8lSfzzSFG9XORqLtcNWh1tPuUQZOqSncpJRT/HKcqAdL95TocI17D2ysqjr11GIn3n9lZSv6nACiTwTEypTZ/C9lG15AOwB4w9699tfIJ9GWIN27d9ehQ4e0evVqjRkz5oRtZWVlmjFjhiRp2LBhJwwsdOrUSTNmzNBXvvIVpaWl6R//+IceeughffDBB1q1apVCoZCtWBKlQ4eW7+Q9lWPxh0KhqI/Nzs6OOS44hzIA+E9jpOWbSCRr9sHppKRag6tmRKo/w76nOlfHzh2UHXCvXkhOOfW2M71/KfrfwanOFUg2HakXzXbtFK/5MmZpqSLPzJNxbr4C10+REQwqcPNURZ59TpFXFit4zVVxuU7PHj1bzYy28srt6n3O4JiPq2rY12raPcrAqdU1VCk11LHFbfGqB091nogZUZeunZTW+TSVUYIZyZFTbnOiHUgOGa3mcwJI9ImAWBkymv+lbMMLaAeAtisSiTTPMs3KyrJ9HsM03X6Utjfdd999+uUvf6levXrprbfeUn5+viRp5cqVuuWWW7R9+3Y1Njbq7rvv1uOPn37Zk1dffVWTJ0/WM888o9tuu82J8KMW61rCGzdu1JQpU7RgwQIVFBREdczAgQPthAaHUAYA/yn8i7Rng71jx33XmsFQVyW992TsxyelSBffI8Vp8ostlXukVX+wf/zZ/g6GXSV1y7N//WjVhJvUZdmbZ30eMxJR+PszZG7ZqqT/+6WM3r2t18Nhhe//vsydu5T05K/isnzgoUsnKDXYOu4j271G+vRvsR0TCEoX/bOU3D4xMcWKMnBqaxdJFdvtHXu2dUCHDOnC2+1dO172bZbWL7Z37Nm+f0ka9U2pU097xwKJQJ8IiM1bj0gyJRnSZdPdjgY4e7QDQNtVU1OjtLQ0SVJ1dbVSU8/wPJBTaJtPH28DZs6cqa5du2r37t0qKCjQ0KFDlZeXp9GjR6tfv3669NJLJUX3fLavf/3rSk1N1apVqxIddsLl5+drxYoVzYlH+A9lAGj7OiZuovSZr53lbpJNktLPkeRiDB3t32DlisiCRTILNylw683NCRZJMoJBBX/wfSkSVviRR+W1e796DJaC7WI7JmtQ60myxZMXy0C6i59DN+vg1hCDYUhp57h3fSAe6BMBgL/RDgDeQ6ItQXJycrR8+XJNnDhRoVBIO3bsUEZGhp588kktXbpUmzdvlhRdou2YeD27wk3JycnKyMhQcnI8n/iBtoQyALR9nV2cRdAaZjAEk6X0bu5cOyXd+mkrzF27FHnueRmDBipw7TdO2m7k9lHg5qkyN3yiyCs2p8e0UkkpUsGVijop26GLlHdxQkNyhVfLQGcXV+5xsw4+xs26KD3LqoeBtow+EQD4G+0A4D0k2hJo0KBBWrJkiaqqqlRVVaUPP/xQd955p2pqarRjxw4FAgENGTLkjOdZvHixampqNHr0aAeiTqxdu3bprrvu0q5du9wOBS6hDABtX9o57s1m6HnmZtMR2UPdu25buu/G6N1byUv/rKRf/ExGMNjiPsGbblDyX1+L2zO6WpNuA6Rhk6wlIU8nrZs08gapnQdns3m1DGT0lk7xiLaECiRJWa1g1SDDcK8+7ulS/QvEE30iAPA32gHAe0i0uWDjxo0yTVN5eXknPfDy5ptv1o9+9CO98soreuutt/Rf//VfuvnmmzVixAjdeOONLkUcP1VVVXr77bdVVVXldihwCWUA8IacEc5fM7Of1L6z89dtSXcbywKeLcNggLkt6pYvjb1T6jf25BlAXXpLQydLo6dKKWnuxAd7jICUE/3CFHHTfZCUHHL+ui3JHuZ84j/YzvodAG0dfSIA8DfaAcB7SLS5YMOGDZJaXjayoKBAL7/8sr71rW/piiuu0DPPPKPvfOc7euedd9SuncMjegAAnELWuc7P5ugzytnrnU5SO+eTjd0HS6E2tGwkPpeSKvUbI437jtTus+cqt0uVRl4vZeWfecYbWqeeQ6UkB5NeRkDqPdK5651JKN2ql5zUa4RV/wIAAABAa0KizQWnS7T967/+qzZs2KAjR46osbFRxcXF+tnPfqZOnTo5HSYAAKcUTJYGfc2562UPl7r0cu560eg3xnqulhPapUr5lzhzLSSOEfh8BlBbWgIULWvXQTr3Uueu1/fLUlqmc9eLRt4l1u/BCR0ypL5jnLkWAAAAAMSCRJsLTpdoAwCgrejax0qAxaKhRqqrsv6NVihdyrs4tus4IZgsDb489uPs/A4GTZCSPfj8LqCt6z5Iyuwf2zF26oC0blLul2K7jhPatZcGfjW2Y+y8fxlSweVWvQsAAAAArU2S2wH40bJly9wOwTVZWVmaNWuWsrKy3A4FLqEMAN6Sf4lUc0CqLIlu/49+H9v5k1Kk4de03qXCOmdLAy+Tit6K/phYfwf9LpTOGRDbMQCcYRhSwRXSxy9J1RXRHRNrHZCSJg2f3HqXGO02wJppVvyP6PaP9f1LVj3bqWfsxwGtFX0iAPA32gHAe5jRBkdlZmZq2rRpysxsZevewDGUAcBbgsnSiGukzjnxP3dySDpvipTeLf7njqecEVJ+gpaPy/0yS6UBrV1ySDr/OintnPifOyVdOv96qX3n+J87nvpdaNVXiXDupVIOC4HAY+gTAYC/0Q4A3kOiDY46fPiw3njjDR0+fNjtUOASygDgPUkp0nnXWgmneOmYJV1wk9SpR/zOmUi9z5eGXRW/5R2D7axn4A0Yx7O8gLagXao08gYpa2D8ztmltzTqJik1I37nTBTDsOqrQV+z6q94SG5v1au9zo/P+YDWhD4RAPgb7QDgPSTa4KiSkhI98MADKimJco0xeA5lAPCmYLK1tNf510uhjvbPYwSl/hdJF0yVUrvGLz4ndMuTxtwmdcs/u/Nk5EpjpknZQ+MRFQCnJIekoV+3kkPtOtg/T3N9et3Z1aduyB5q1V8Zfc7uPN3yP6tP8+ISFtDq0CcCAH+jHQC8h2e0AQCAuMnoLV14u7R3s1SyVjq8J7rjUtKk7GHWT0paQkNMqHYdpGGTpSPl1vsvL5IiTWc+zghYA8s5I6znvjGLDWi7uuVJXftYn//da6Tq/dEd176TVQf0GCK1i9PsWDeEOlrL/laWWvXgvs2SGTnzcYEkqfsga5nIjt0THiYAAAAAxA2JNgAAEFeBJKnHYOun5oBUuUeqKpeq9ktNDZIi1j4dMqwlItOzrORSIOh25PHTsbs0+HIp7xLpUIn1/o/sleqrpUjYeq/tOhz3/nOklFS3owYQL8F21o0DPYdaibbDZVYCvrpCCjdIMqVAsjVzt2OWVWd06umdJLthSF1yrJ/6GqmyRKraa9WDDbWf14MpaZ/Vg92tfZNDbkcOAAAAALEj0QYAABImtetnS0D6dBnE5JDUbYD1A8B/DENK72b9aLjb0bgjJVXKOtf6AQAAAAAv4hltcFQoFNKgQYMUCnG7ql9RBgAAAAD4GX0iAPA32gHAe5jRBkf1799fixYtcjsMuIgyAAAAAMDP6BMBgL/RDgDew4w2AAAAAAAAAAAAwAYSbXBUYWGhhg0bpsLCQrdDgUsoAwAAAAD8jD4RAPgb7QDgPSTa4CjTNNXY2CjTNN0OBS6hDAAAAADwM/pEAOBvtAOA9/CMNgAAAJykQyCoQ5dOcDuMmHQIBN0OwVMoAwAAAAAAnBmJNgAAAJzEMAylBvmq6GeUAQAAAAAAzoylIwEAAAAAAAAAAAAbuEUVjurfv78WL16sXr16uR0KXEIZAAAAAOBn9IkAwN9oBwDvIdEGR4VCIeXl5bkdBlxEGQAAAADgZ/SJAMDfaAcA72HpSDiqtLRUDz74oEpLS90OBS6hDAAAAADwM/pEAOBvtAOA95Bog6MqKyu1cOFCVVZWuh0KXEIZAAAAAOBn9IkAwN9oBwDvIdEGAAAAAAAAAAAA2ECiDQAAAAAAAAAAALCBRBsAAAAAAAAAAABgA4k2OCoQCGjUqFEKBCh6fkUZAAAAAOBn9IkAwN9oBwDv4dMMR0UiEa1cuVKRSMTtUOASygAAAAAAP6NPBAD+RjsAeA+JNgAAAAAAAAAAAMAGEm0AAAAAAAAAAACADSTaAAAAAAAAAAAAABtItMFRnTp10qRJk9SpUye3Q4FLKAMAAAAA/Iw+EQD4G+0A4D1JbgcAf8nJydHDDz/sdhhwEWUAAAAAgJ/RJwIAf6MdALyHGW1wVH19vXbu3Kn6+nq3Q4FLKAMAAAAA/Iw+EQD4G+0A4D0k2uCorVu36vLLL9fWrVvdDgUuoQwAAAAA8DP6RADgb7QDgPeQaAMAAAAAAAAAAABsINEGAAAAAAAAAAAA2ECiDQAAAAAAAAAAALCBRBsAAAAAAAAAAABgQ5LbAcBfCgoKtGnTJrfDgIsoAwAAAAD8jD4RAPgb7QDgPcxoAwAAAAAAAAAAAGwg0QZHFRcX68Ybb1RxcbHbocAllAEAAAAAfkafCAD8jXYA8B6WjoSjamtrtW7dOtXW1rodClxCGQAA+EndEamyVDpSLlXtkxo+a/4aaqV1f5Y6Zkkdu0uds6VgsruxAgCcQZ8IAPyNdgDwHhJtAAAAQByZEelAsbR7rfXvqfbZv8X6kaSkkNSzQMoZIXXo4lSkAAAAAADgbJFoAwAAAOKker+08Q2pam9sxzXVSbs+tn56nS8NGCcF2yUmRgAAAAAAED8k2gAAAICzZJrSjg+l7e9bs9XOxu7VUsV2qeAKa0lJAAAAAADQegXcDgD+kp2drTlz5ig7m1Ejv6IMAAC8JhKRNr4ubXvv7JNsxxytlFb/Udq/NT7nAwC0HvSJAMDfaAcA72FGGxzVuXNnTZ482e0w4CLKAADAS0xTKnxDKi+M/7kjYWn9YmnENVLXvvE/PwDAHfSJAMDfaAcA72FGGxx18OBBvfDCCzp48KDbocAllAEAgJfsWpWYJNsxZkRa/6pUdyRx1wAAOIs+EQD4G+0A4D0k2uCosrIyzZ49W2VlZW6HApdQBgAAXlFzUNq2IrZjRt8sjfuu9W+0wg1S4V+s2XMAgLaPPhEA+BvtAOA9JNocUFFRoZkzZ2rAgAEKhULq1auX7r//ftXU1OiOO+6QYRh6/PHH3Q4TAAAAUTJNadNfpEhTbMe1S5VC6da/sTi4U9rzSWzHtEb1jdKhGqm6ToqQOAQAAAAAeADPaEuwtWvX6oorrlB5eblSU1M1ePBg7dmzR4899pi2bdvWPEV4xIgR7gYKAACAqB3eI1WWOnvNnSulnkMkw3D2umcrHJE+KZHe2yxt2fv56106SGPypDH9pfT27sUHAAAAAMDZYEZbAlVUVGjSpEkqLy/X9OnTVVZWptWrV6u8vFxz5szR0qVLtXLlShmGoWHDhrkdLgAAAKJUstb5a9YelA7tdv66Z+NwrfToG9Kzy09MsknSoVrptXXST/4srW9j7wsAAAAAgGNItCXQfffdp5KSEt1zzz2aO3eu0tPTm7fNnDlTw4cPV1NTk3Jzc9WxY0cXI3VOamqqxo4dq9TUGNdLgmdQBgAAbV1TvbR3szvXLl3vznXtqKmXnvibVHLo9Ps1haVn/27NegMAP6BPBAD+RjsAeA+JtgTZtGmT5s+fr8zMTD300EMt7jNy5EhJ0vDhw0/a9vLLL+vCCy9UamqqOnXqpLFjx2rjxo0JjdkJubm5evrpp5Wbm+t2KHAJZQAA0NYdKZfMsDvXPrzHnevasXiNtO9IdPuakp5fIdU1JjQkAGgV6BMBgL/RDgDeQ6ItQV588UVFIhFNnTpVaWlpLe7Tvr31MIovJtoee+wxXX/99Ro3bpwWL16sF198UZdddpmOHj2a8LgTLRwOq7q6WuGwS6NTcB1lAADQ1h3Ze+Z9EqXuiNRQ6971o1VTL328I7Zj6pukVcUJCQcAWhX6RADgb7QDgPeQaEuQZcuWSZLGjx9/yn1KSqz1cY5PtG3btk0zZszQo48+qocfflj/9E//pCuvvFI/+clPdMEFFyQ2aAcUFRVp1KhRKioqcjsUuIQyAABo66r3+/v60VhVbC0JGav3t8Y/FgBobegTAYC/0Q4A3pPkdgBetXPnTklSnz59Wtze1NSkFStWSDox0fbMM88oOTlZ3/nOd+IWywUXXKDy8vK4ne9406ZNi2n/srIySdJrr72mNWvWRHXMvHnzYowKTqIMAAD85oGrntPwvv/U4rbRN0vtTvOohZTUz/8d993TX6ehRvro9ye/fvutd2rV1teijNYd5139P+o/5lsxH7d7X51ycgYkICIASBz6REBsnrlvpwKBoCLhsHJyWh43A9oS2gGg7YpEIs3/PW7cuKg/k19Eoi1BampqJOmUyz3Onz9fFRUVSk9PV9++fZtff//993Xuuefq97//vWbPnq3du3crLy9PP/rRj3TTTTfZiqW8vFylpaW2jj2T2trY1i6qq6tr/jfaYxMVO+KDMgAA8JuGhlM/SKxdqhRKP/M5jEB0+7Xk0KHKVt82Dqq397A1I5jc6t8bAHwRfSIgNqbM5n8p2/AC2gHAG/butf+cCBJtCdK9e3cdOnRIq1ev1pgxY07YVlZWphkzZkiShg0bJsMwTthWWlqqf/3Xf9WcOXPUq1cv/fa3v9U3v/lNnXPOObrssstsxZIoHTp0iGn/UCjU/G+0x2ZnZ8ccF5xDGQAA+I0RNE+5raHm9MempFpJNjMi1Z9h31OdK71jh1bfNgZNe88Wbqg52OrfGwB8EX0iIDaGjOZ/KdvwAtoBoO2KRCLNs0yzsrJsn8cwTfPUIwWw7b777tMvf/lL9erVS2+99Zby8/MlSStXrtQtt9yi7du3q7GxUXfffbcef/zx5uPy8/O1ZcsWvfzyy7r66qslSaZpasSIEercubPeffddN97OKcW6lvDGjRs1ZcoULViwQAUFBVEdM3DgQDuhwSGUAQCA32x5V9q50t6x475rzWSrq5Lee9LeOcbcLqVm2DvWKbsPSo+8HvtxF50rXdv2H0sMwGfoEwGxeesRSaYkQ7psutvRAGePdgBou2pqapSWliZJqq6uVmrqaZ4FcRqBeAaFz82cOVNdu3bV7t27VVBQoKFDhyovL0+jR49Wv379dOmll0o68flskpSRYY2aHD9zzTAMXXbZZfrkk0+cewMJkp+frxUrVjQnHuE/lAEAQFuXbv8mt7MWbCd16OLe9aPVK0Pqkxn7cWPz4h8LALQ29IkAwN9oBwDvIdGWIDk5OVq+fLkmTpyoUCikHTt2KCMjQ08++aSWLl2qzZs3Szo50Xa6uxiOrd/bliUnJysjI0PJycluhwKXUAYAAG1dx8Styn1G6d2k41Ydb9UmDpcCMcQ6up/UvVPi4gGA1oI+EQD4G+0A4D0k2hJo0KBBWrJkiaqqqlRVVaUPP/xQd955p2pqarRjxw4FAgENGTLkhGOuuuoqSdJf//rX5tcikYjefPNNjRo1ytH4E2HXrl266667tGvXLrdDgUsoAwCAtq59J/dmtWWd68517cjvLk29MLpk27Be0vWjEx8TALQG9IkAwN9oBwDvIdHmgo0bN8o0TeXl5Z30wMtJkybpoosu0p133qmnnnpKf/nLX3TDDTdo48aN+tGPfuRSxPFTVVWlt99+W1VVVW6HApdQBgAAbZ1hSDkjnL9uMFnqMdj5656NkbnSvROkwT2llvJtmWnS1SOlaeOkpKDT0QGAO+gTAYC/0Q4A3pPkdgB+tGHDBkknLxspWc9jW7x4sWbNmqUf/vCHOnLkiIYPH67XXnut+bluAAAAcFf3gdLWd6VGB1f27jFYSkpx7nrx0vcc6c7xUkWVtLFUevnjz7f9cHJsy0sCAAAAANDaMKPNBadLtElS586d9eSTT2r//v2qr6/XRx99pK997WtOhggAAIDTCCZLeZc4d712HaR+Y527XiJkpksXD/x8ZpshkmwAAAAAgLaPRJsLzpRoAwAAQOvXo0DK7OfMtQZeZiXbAAAAAABA68LSkS5YtmyZ2yG4JisrS7NmzVJWVpbbocAllAEAgFcYhjToq9JHL0j1UT5eoaHmxH+jkT1M6pYfe3wAgNaJPhEA+BvtAOA9JNrgqMzMTE2bNs3tMOAiygAAwEtS0qTzr5M+nh9d8uyj38d2/qxzrdlsAADvoE8EAP5GOwB4D0tHwlGHDx/WG2+8ocOHD7sdClxCGQAAeE1qhnTBTVKHjPieN2eENGSiZPCNHQA8hT4RAPgb7QDgPXTb4aiSkhI98MADKikpcTsUuIQyAADwog6dpS/dIvUZJck4u3OlpEkjvmHNZCPJBgDeQ58IAPyNdgDwHpaOBAAAAOIgmCzlXWw9T23HR9L+rZLM6I9Pbm89j63PKCk5lLAwAQAAAABAHJFoAwAAAOKoUw9p+FVS3RFpzyfSoRKpaq/UVH/yvu07Sx2zpHMGSN3ypADfzgEAAAAAaFPoygMAAAAJEOoo9bvQ+m/TlOoOS411UiQiBYJS+07MXAMAAAAAoK0j0QZHhUIhDRo0SKEQo0p+RRkAAPiRYViz19q7HQgAwHX0iQDA32gHAO8h0QZH9e/fX4sWLXI7DLiIMgAAAADAz+gTAYC/0Q4A3hNwOwAAAAAAAAAAAACgLSLRBkcVFhZq2LBhKiwsdDsUuIQyAAAAAMDP6BMBgL/RDgDeQ6INjjJNU42NjTJN0+1Q4BLKAAAAAAA/o08EAP5GOwB4D4k2AAAAAAAAAAAAwAYSbQAAAAAAAAAAAIANJNoAAAAAAAAAAAAAG5LcDgD+0r9/fy1evFi9evVyOxS4hDIAAAAAwM/oEwGAv9EOAN5Dog2OCoVCysvLczsMuIgyAAAAAMDP6BMBgL/RDgDew9KRcFRpaakefPBBlZaWuh0KXEIZAAAAAOBn9IkAwN9oBwDvIdEGR1VWVmrhwoWqrKx0OxS4hDIAAAAAwM/oEwGAv9EOAN5Dog0AAAAAAAAAAACwgUQbAAAAAAAAAAAAYAOJNgAAAAAAAAAAAMAGEm1wVCAQ0KhRoxQIUPT8ijIAAAAAwM/oEwGAv9EOAN7DpxmOikQiWrlypSKRiNuhwCWUAQAAAAB+Rp8IAPyNdgDwHhJtAAAAAAAAAAAAgA0k2gAAAAAAAAAAAAAbSLQBAAAAAAAAAAAANpBog6M6deqkSZMmqVOnTm6HApdQBgAAAAD4GX0iAPA32gHAe5LcDgD+kpOTo4cfftjtMOAiygAAAAAAP6NPBAD+RjsAeA8z2uCo+vp67dy5U/X19W6HApdQBgAAAAD4GX0iAPA32gHAe0i0wVFbt27V5Zdfrq1bt7odClxCGQAAAADgZ/SJAMDfaAcA7yHRBgAAAAAAAAAAANjAM9qAFpim1BB2O4rYtAtKhuF2FAAAAAAAL/B7v9g0TdVG2tYvoEMgKIOBgbihDLS9eoCxMQBuIdEGtKAhLM2a73YUsZlzg5TCJxoAAAAAEAd+7xfXRsLqsuzN+JzMIYcunaDUIAMD8UIZaHv1AGNjANzC0pEAAAAAAAAAAACADeT44aiCggJt2rTJ7TDgIsoAAAAAAD+jTwQA/kY7AHgPM9oAAAAAAAAAAAAAG0i0wVHFxcW68cYbVVxc7HYocAllAAAAAICf0ScCAH+jHQC8h0QbHFVbW6t169aptrbW7VDgEsoAAAAAAD+jTwQA/kY7AHgPiTYAAAAAAAAAAADABhJtAAAAAAAAAAAAgA0k2gAAAAAAAAAAAAAbSLTBUdnZ2ZozZ46ys7PdDgUuoQwAAAAA8DP6RADgb7QDgPckuR0A/KVz586aPHmy22HARZQBAAAAAH5GnwgA/I12APAeZrTBUQcPHtQLL7yggwcPuh0KXEIZAAAAAOBn9IkAwN9oBwDvIdEGR5WVlWn27NkqKytzOxS4hDIAAAAAwM/oEwGAv9EOAN5Dog0AAAAAAAAAAACwgUSbAyoqKjRz5kwNGDBAoVBIvXr10v3336+amhrdcccdMgxDjz/+uNthIgFKCt/RL2429PHSuafc5xc3G/rz3K87GBUAAICzmsLSqmJp3nLJ/Ow1U9KhGjejAgA4gX6xFH5mnhq/eqUib/z1pG2maarpB7PUOHGyzOIdzgfnkEhYKi+SNryqE74MHK10MSiH+P3vTx0AwA+S3A7A69auXasrrrhC5eXlSk1N1eDBg7Vnzx499thj2rZtW/NavCNGjHA3UAAAACDOTFN691PpzU+kmvqTt//nn6VhvaTrR0upKc7HBwCAEwK3TFXkgw8VfvIpGSPPl3FOZvO2yKJXZK7foMDt02T0zXUvyAQqWSdtf19qaOEGmxVPS5n9pUFflVJSnY/NCX7/+wOAHzCjLYEqKio0adIklZeXa/r06SorK9Pq1atVXl6uOXPmaOnSpVq5cqUMw9CwYcPcDtcRqampGjt2rFJTPfrtCWdEGQAAwB9MU3pltfTKxy0n2Y7ts26X9PO/SFVHnY0PANxCn8h/jORkJc2YLtXVKfyznze/bu4uUWTe72QMPFeB6651L8AE2vaeVPRmy0m2Yyq2SStfkOqqnIvLSX7++6NltAOA95BoS6D77rtPJSUluueeezR37lylp6c3b5s5c6aGDx+upqYm5ebmqmPHji5G6pzc3Fw9/fTTys3NdTsUuIQyAACAP/xjq/RuUXT77q+Sfvt3K/EGAF5Hn8ifjLwBCtx4vcyPVyuy9HWZ4bDCD8+VTFPBGdNlBINuhxh3ZYVS8QfR7Vt3RFq7SDIjiY3JLX78++PUaAcA7yHRliCbNm3S/PnzlZmZqYceeqjFfUaOHClJGj58ePNrl1xyiQzDaPHnn//5nx2JPZHC4bCqq6sVDofdDsVRTQ21OlpV0eKP3/i1DAAA4CeRiPS3wtiO2VEhbd2XmHgAoDXxa5+IfrEUmHqT1K+fwk89rcgTv5b56WYFpn1LRq8ct0OLO9OUdnwY2zHV+6UDxYmJpzXw09+/JdQBn/NrOwB4Gc9oS5AXX3xRkUhEU6dOVVpaWov7tG/fXtKJibZf/epXOnLkyAn7LV26VLNnz9bXv972HwpaVFSkKVOmaMGCBSooKHA7HMd8sPDH+mDhj90Oo1XwaxkAAMBPisqkA9WxH/feZikvK/7xAEBr4tc+Ef1iyUhKUtKM76vp3v+nyJKlMoYUKPCNq90OKyEqS6SaA7Eft3ut9cw2L/LT378l1AGf82s7AHgZibYEWbZsmSRp/Pjxp9ynpKRE0omJtsGDB5+033//93/rnHPO0eWXXx7nKOGUIePvVN6Xrmtx28s/neBwNAAAAIn1abnN48riGwcAoPWgX/yZ1FQpOVlqapIx6gIZAW8uNnVgp73jDu60ZsMZRnzjaTV88vdvCXUAAC8j0ZYgO3da3yj69OnT4vampiatWLFC0omJti/av3+/3njjDd11111KSrL357rgggtUXm5ztOMMpk2bFtP+ZWXW6Mlrr72mNWvWRHXMvHnzYozq7AWT2+ua2Vvidr7O3fPUe8hlcTtfS/Lz8hRuPJrQa7TEq2UAAADYN3LKXPUddWPMxx2tjygnp3cCIgKAxPFqn8jv/WKzXTvpySficq7mc5qmwo88KjU1Sr17KfKHlxS4+CsyevaIy/nz8/JlNDTE5Vxna+rF/6kJ590e83FmROrfd4AamuoSEFWMscS5DCT67y/FvwzEsx5oa3VALLzaDgB+EIl8/nDQcePGRf2Z/CISbQlSU1MjSTp6tOXKff78+aqoqFB6err69u17yvO8+OKLampq0i233GI7lvLycpWWlto+/nRqa2tj2r+urq7532iPTVTsp5OU0sHxa56tPWV71FQf298jHrxaBgAAgH0DDtp72FpjfQ3tPoA2x6t9It/3i0MpSo7PmZpFXlksc916BW67VYExX1bT3fcq/MijCs6dIyMOU7j2lO2R6urjEOnZqzi019Zx4UhYO3Ztl2macY7IhjiXgUT//aX4l4G2Vg8wNgbgbOzda6/tkki0JUz37t116NAhrV69WmPGjDlhW1lZmWbMmCFJGjZs2Gkb0+eff16DBg3SBRdccFaxJEqHDrE1uKFQqPnfaI/Nzs6OOa6zFUxu7/g1z1bPHj1duWvHq2UAAADYV3/gU1vHHSpZQ7sPoM3xap/I7/1is1077Y/LmT47X2mpIs/Mk3FuvgLXT5ERDCpw81RFnn1OkVcWK3jNVWd9jZ49eraaGW17qzfbOm57+Rr17NkzztHYE88y4MTfX4p/GWhr9QBjYwBiFYlEmmeZZmXZf2A4ibYEueyyy7Rp0ybNmTNHEyZMUH5+viRp5cqVuuWWW1RRUSFJGjFixCnPUVRUpFWrVul//ud/ziqWVatWndXxp1NUVBTT/o2NjbrjjjuUnp6u5OTo7guaPXu2ndDOSn2TNGu+45c9K5u3bFGKC59or5YBAABgX1NY+o+XpeoYb6j+1zu+ohf/oyQxQQFAgni1T+T3fnFNuEldlr0Zl3OZkYjC//szKRJRcMb3ZQSDkqTA9VNkrnhfkWfmKfCl0We9hODmLZuVGmwdQ31mRFrxlFRXFdtxV3/7An3vZ63ju0C8yoBTf38p/mWgrdUDjI0BiFVNTY3S0tIkSe+9957t8/jniZsOmzlzprp27ardu3eroKBAQ4cOVV5enkaPHq1+/frp0ksvlXT657M9//zzMgxDU6dOdSrshEtOTlZGRkbUjQi8hzIAAID3JQWlcefGdkxmulTAjboAfIA+kf9EFiySWbhJgVtvltH782eRGsGggj/4vhQJK/zIo61jucQ4MQJSr5GxHZOSLmXlJyYeN/nx74/Tox0AvIdEW4Lk5ORo+fLlmjhxokKhkHbs2KGMjAw9+eSTWrp0qTZvtqbQnyrRZpqmXnjhBV1yySXq3ds7D4TftWuX7rrrLu3atcvtUOASygAAAP4woUAakhPdvqkp0nculoL0TgD4AH0ifzF37VLkuedlDBqowLXfOGm7kdtHgZunytzwiSKvLHYhwsTpPVLKGhjdvkkp0ohrpEDrmJAXN37+++PUaAcA7/FY89W6DBo0SEuWLDnp9erqau3YsUOBQEBDhgxp8di///3v2rlzp3784x8nOkxHVVVV6e2339bdd9/tdiiOyBl8ie7//envSDrTdq/xWxkAAMCvggHptoukl1dJ72+VIqf4ytOzszTtIqlbR0fDAwDX+K1P5Pd+sdG7t5KX/vm0+wRvukHBm25wKCLnGIY05EopJVXavcZaTrIlqRnS0ElS2jnOxucEP//9j/F7HdASv7UDgB+QaHPBxo0bZZqm8vPzT/nAy+eff17t27fXlClTHI4OAAAAiI9gQJoyWrpsiPSPrdInJVJtg5QclLK7SOPypH7drIE4AADgPUZAyh8v9Rktla6X9m+RGuusmWtpXaWcEVKX3nwXAAC0bSTaXLBhwwZJp142sq6uTgsWLNDVV1+t9PR0J0MDAAAA4q5zB+mKYdYPAADwn5RUqd8Y6wcAAK8h0eaCMyXaQqGQKisrHYwIAAAAAAAAAAAAseJx4y44U6LNy7KysjRr1ixlZWW5HQpcQhkAAAAA4Gf0iQDA32gHAO9hRpsLli1b5nYIrsnMzNS0adPcDgMuogwAAAAA8DP6RADgb7QDgPcwow2OOnz4sN544w0dPnzY7VDgEsoAAAAAAD+jTwQA/kY7AHgPiTY4qqSkRA888IBKSkrcDgUuoQwAAAAA8DP6RADgb7QDgPeQaAMAAAAAAAAAAABsINEGAAAAAAAAAAAA2ECiDQAAAAAAAAAAALCBRBscFQqFNGjQIIVCIbdDgUsoAwAAAAD8jD4RAPgb7QDgPUluBwB/6d+/vxYtWuR2GHARZQAAAACAn9EnAgB/ox0AvIcZbQAAAAAAAAAAAIANJNrgqMLCQg0bNkyFhYVuhwKXUAYAAAAA+Bl9IgDwN9oBwHtItMFRpmmqsbFRpmm6HQpcQhkAAAAA4Gf0iQDA32gHAO/hGW1AC9oFpTk3uB1FbNoF3Y4AAAAAAOAVfu8XdwgEdejSCfE7oQM6BBgYiCfKQNurBxgbA+AWEm1ACwxDSuHTAQAAAADwKb/3iw3DUGrQx78AUAZEPQAA0WLpSAAAAAAAAAAAAMAG7kmAo/r376/FixerV69ebocCl1AGAAAAAPgZfSIA8DfaAcB7SLTBUaFQSHl5eW6HARdRBgAAAAD4GX0iAPA32gHAe1g6Eo4qLS3Vgw8+qNLSUrdDgUsoAwAAAAD8jD4RAPgb7QDgPSTa4KjKykotXLhQlZWVbocCl1AGAAAAAPgZfSIA8DfaAcB7SLQBAAAAAAAAAAAANpBoAwAAAAAAAAAAAGwg0QYAAAAAAAAAAADYQKINjsrMzNR3vvMdZWZmuh0KXEIZAAAAAOBn9IkAwN9oBwDvMUzTNN0OAgAAAAAAAAAAAHBKTU2N0tLSJEnV1dVKTU21dR5mtAEAAAAAAAAAAAA2kGgDAAAAAAAAAAAAbCDRBgAAAAAAAAAAANhAog0AAAAAAAAAAACwgUQbAAAAAAAAAAAAYAOJNgAAAAAAAAAAAMAGEm0AAAAAAAAAAACADSTaAAAAAAAAAAAAABtItAEAAAAAAAAAAAA2kGgDAAAAAAAAAAAAbCDRBgAAAAAAAAAAANhAog0AAAAAAAAAAACwgUQbJEmRSET/+Z//qQEDBqh9+/bq3bu37rvvPtXU1LgdGgAAAAAAAAAAQKuU5HYAaB0eeeQRzZ07V88++6xGjhypTz/9VLfddpvq6+v15JNPuh0eAAAAAAAAAABAq0OiDZKkFStWaMKECbr22mslSbm5ubrpppu0bNkylyMDAAAAAAAAAABonVg6EpKkcePGacWKFVq/fr0kafv27Xrttdc0ceJElyMDAAAAAAAAAABonZjRBknS9OnTVVdXp/PPP1+GYaipqUnf+c539F//9V9uhwYAAAAAAAAAANAqMaMNkqQFCxboV7/6lZ599lmtXr1af/rTn/T666/rwQcfdDs0AAAAAAAAAACAVskwTdN0Owi4r3fv3rr77rs1a9as5teef/553X777aqqqlIoFHIxOgAAAAAAAAAAgPipqalRWlqaJKm6ulqpqam2zsOMNkiyClQgcGJxCAaDMk1T5GIBAAAAAAAAAABOxjPaIEm6+uqrNXfuXA0YMEDnnXeePv30Uz344IO64oor1L59e7fDAwAAAAAAAAAAaHVItEGS9NhjjykjI0PTp0/Xnj171K1bN33961/X7Nmz3Q4NAAAAAAAAAACgVeIZbQAAAAAAAAAAAPAVntEGV+ws3asFr72rA5VH3A4FAAAAAAAAAADAVSTaEJO33vtYqzZ8qnf+sdbtUAAAAAAAAAAAAFzlmUSbYRgyDEOS9Oqrr+qiiy5Sx44dlZmZqSlTpmjbtm3N+y5ZskQXX3yxOnfurI4dO+qqq67Sli1bTnnu+vp6/eIXv9CFF16ozp07KxQK6dxzz9WMGTNUUVHR4jEffvihZs2apVGjRql79+5KSUlRdna2rr/+eq1cufKU13rttdd05ZVXqlu3bkpOTlbXrl01aNAg3X777VqxYoXN30587Cwp15YdJQoEDI0fM8LVWAAAAAAAAAAAANzmmWe0HUuyPf7447rnnnvUs2dPZWVlqaioSEePHlV2drbWrFmjF154QQ888IB69Oih7t27N2/v3r271q9fr3POOeeE8+7du1dXXHGF1qxZo0AgoF69eqljx47avHmz6uvr1bt3b7399tvq16/fCccNGDBA27ZtU0ZGhnr06KF27dpp165dOnDggJKSkvTSSy/p2muvPeGYX/3qV7r77rslSV27dlWfPn109OhR7d69W9XV1frud7+rX//61wn8LZ7eb+e/pi07SjRq2EBde8VXXIsDAAAAAAAAAADgbPCMtlOYOXOmnnvuOZWWlmr16tUqKSnRqFGjVFpaqttvv10//OEP9dxzz2nPnj1avXq1du/erZEjR6q8vFyPPPLICecyTVM33HCD1qxZo4kTJ2rbtm3asWOH1q9fr4qKCt1+++3atWuXbr755pPi+NGPfqQtW7bowIED+uSTT7R69Wrt27dPixYtUigU0re//W1VV1c379/U1KQHH3xQkpVw27t3rz7++GMVFhbqyJEjevfdd/W1r30tsb+802A2GwAAAAAAAAAAwIk8N6Pt3nvv1WOPPXbCtjfeeENXXHHFKbe//vrruvLKKzVs2DCtW7eu+fXXXntNEydO1JAhQ7Ry5UqFQqETjguHwxo9erRWr16t9957T2PHjo0q1n//93/X7Nmz9eKLL+rGG2+UJJWXl6tHjx7q0qWLDh48GNubP4NfPrdIVdVHz+octUfr1BQOKzk5Se1TUuIUGQAAAAAAAAAAgPMa6uv0k+nfliT975Mv6Ad3ftPWeZLiGVRr8O1vf/uk184///yotm/fvv2E1xcuXChJuvXWW09KsklSMBjU5MmTtXr1ar3zzjsnJdq2bNmil156SevWrdOBAwfU2NgoSdq3b58kae3atc2JtnPOOUehUEiVlZV68803NWHChKjf85lUVR/VkeqauJyrsbFJjY1NcTkXAAAAAAAAAACAGxoa6pv/u/osJit5LtHWv3//k147/rlrLW3v1q2bJJ2wlKMkrV+/XpL07LPP6pVXXmnxenv37pUklZaWnvD6I488on/5l39RU9Opk1IHDhxo/u9gMKj7779fc+bM0Ve/+lWdf/75uuyyyzRu3DhdfPHF6tix4ynPcybpae1tHysxmw0AAAAAAAAAAHhLQ32w+b/TziKP4rmlI0/1duxsz8vL09atW6O6/q233qp58+ZJklasWKFx48YpGAzqJz/5ia666irl5uYqNTVVhmHomWee0R133HHCMZIUiUT0q1/9Sk888YSKioqaX09JSdE3v/lNzZ07VxkZGVHFEy87S8r1fy8sViBg6AffuUEZne0n/AAAAAAAAAAAAFqDmpoapaWlSbImYqWmpto6j+dmtMXTsV/w4sWLNWnSpKiPe/755yVJ06dP17/927+dtP34mWzHCwQCuueee3TPPfeopKREy5cv15tvvqk//vGPevbZZ7V79269+eabMb+Ps3lGW+3ROknWjLtfv/CqrXMAAAAAAAAAAAC0JqZp6sePPC1J+u2f3tB90661dR4SbadRUFCgtWvX6pNPPokp0VZcXCxJGjduXIvbP/jggzOeIycnRzfddJNuuukmTZ8+XUOHDtVbb72l4uJi9e3bN+pYpPg8o41nswEAAAAAAAAAAC+qrqmzfSyJttOYMmWKXnjhBf3mN7/Rvffe2zzD7Uzat7fW8iwvLz9p25YtW7RkyZKY4igoKFCnTp1UWVmpPXv2xJxos/uMNp7NBgAAAAAAAAAAvM5uHkUi0XZaV111lS6++GK9++67+upXv6rf/OY3GjJkSPP2SCSiDz/8UM8995xmzpypfv36SZIuuugi/fnPf9ZDDz2kSy+9VP3795ckbdy4Uddee60CgcBJ1yosLNSjjz6qO+64Q1/60peanxkXDof1y1/+UpWVlQqFQiooKIj5fdx76zdiPub4Z7M9cPsUns0GAAAAAAAAAADwBYZpmqbbQcTDscTUqd6O3e0VFRW66qqr9P7770uS+vTpo+7du+vo0aPatm2bamqsJRk3bdqkgQMHSpKqqqp0/vnna+vWrUpOTta5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cAAAAIhJktsBAAAAAGh9TFNqCLsdRWzaBSXDiM+5TNNUbaRt/QI6BIIy4vULgO/LgN/rALt27Nih6dOn680335QkjR8/Xj//+c81fvx45ebm6p133pEkde3aVV27dj3p+MGDB2vIkCH65JNPnAwbAAAAZ4FEGwAAAICTNISlWfPdjiI2c26QUuLUw6mNhNVl2ZvxOZlDDl06QalBunjx4vcy4Pc6wI4DBw7ooosu0t69e/XP//zPGjRokJYvX67x48erpqYmqnNEIhGVlZUpKysrwdECAAAgXgJuBwAAAAAAANDWzZkzRyUlJXr22Wf12GOP6Xvf+57+8Ic/6Prrr1dFRUVU5/j1r3+tsrIy3XrrrQmOFgAAAPFCog0AAAAAAOAsvfrqq+rRo4duuummE17/wQ9+ENXx77//vr7//e9r+PDh+uEPf5iIEAEAAJAArCsCAAAAOKSgoECbNm1yOwwAQAIUFxdr9OjRCgROvKe5W7du6ty582mP/fjjjzVx4kT17NlTS5cuVSgUSmCkAAAAiCdmtAEAAAAAALhk9erVmjBhgjp16qS3335b2dnZbocEAACAGJBoAwAAABxSXFysG2+8UcXFxW6HAgCIs9zcXG3dulWRSOSE1/ft26fKysoWj1m9erUuu+wypaen6+2331afPn0ciBQAAADxRKINAAAAcEhtba3WrVun2tpat0MBAMTZpEmTVFZWphdffPGE1+fOndvi/mvWrNGECROUlpamt99+W3379nUiTAAAAMQZz2gDAAAAAAA4S7NmzdIf/vAH3Xbbbfroo480cOBALV++XO+//74yMzNlGEbzvjt37tSECRN06NAh3XfffXr//ff1/vvvn3C+a665RqmpqU6/DQAAAMSIRBsAAAAAAMBZyszM1Hvvvafp06frmWeekWEYGj9+vN5++22NGjVK7du3b963uLhYBw4ckCT9x3/8R4vnKy4uJtEGAADQBpBoAwAAAAAAiIO+fftq0aJFJ7x24MABHThwQL17925+7ZJLLpFpmk6HBwAAgATgGW0AAACAQ7KzszVnzhxlZ2e7HQoAIAGOHj160ms//elPJUkTJkxwOhwAAAA4gBltAAAAgEM6d+6syZMnux0GACBBrrzySvXp00fnn3++IpGI/va3v2nJkiW68MILdfXVV7sdHgAAABKARBsAAADgkIMHD+r1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b3f/vP3xwV7p/helJRtOTLJJVlvZih3SD/8svbrBm/gQHyTaEuj2229XXV2dbrvtNj344IMqKDg2ZGP+/PmaOnWqwuGwqqqqNGDAAA8jBWDH3i1SpMf985oRac8m98/r1LvbpGeWnX7gX1dYevyvUm2TK2EBgKfy8vJ03nnnKS/P5jwpAADfoC4AAKS69oPSod3enNvumnBeqjsg/ferVmfz0/nDcqvDOlITibYE2bBhgxYuXKiSkhLdd999vW5z1llnSZKmTp160mu///3v9bGPfUx5eXkqLCzUeeedp3Xr1iU0ZgCxOdzo3bkPeXhuO7rC0nPvxb59T8Te9gCQqqqqqvT444+rqqrK61AAAB6hLgAApDov28YOp9CsSL9/32oji9UflkvtXaffDsmHRFuCPP3004pGo5ozZ47y8/N73SYnJ0fSyYm2Rx55RNddd51mzZqlRYsW6emnn9Yll1yijg5WRwSSweE93p27xcNz27G8Vuq0Oepv537rBwD8LBKJqLW1VZFIxOtQAAAeoS4AAKQ6LxNtHYeknk7vzh+rhmZr2kg7eiLSuyk2NSYsJNoSZMmSJZKkiy66qM9t6urqJJ2YaPvggw80b948Pfzww7r//vv1iU98QldccYX+5V/+RWeffXZigwYQkzYPpzhsOyCZ0dNv57V3P3B3PwBIFRs3btT06dO1ceNGr0MBAHiEugAAkOpaPe4o3ZYCHbWXbXO237sO94O3MrwOwK927NghSRoxYkSvr4fDYS1dulTSiYm2J554QpmZmfrqV78a13iqq6sVCJBXBeLhyW/U9fnajJukrFMstZCdd+z3rFv63q67TXr31728YEpjRteoq6c9tmA9csW331FuUZnt/X77hz/rG1f/XQIiAoDEmTt3bszbNjRY85y8+OKLWrFiRcz7PfnkkzajApLTE7fvUCAQVDQSUXl5789KQKqxUw9IzuoC6gEAQDL5zuefU03ZjF5fi1fbmNR3+9gN183R2h1/jTFab8y48VFVTvus7f221x1Uefnk+AeEXkWjx0Y0zJo1y9Zz+vFItCVIW1ubJPU53ePChQvV1NSkgoICjRw58ujf33zzTY0dO1a//vWvde+992rXrl2qrq7WP//zP+vGG290HM+RG3kAiZWVJ4UKTr+dEYhtu97s3r1bnd1tznZ2SSTsbBqczs5O1dfXxzka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wwEAAAAAAAAAAHCVZxJthmG0TWf45ptv6oILLlDv3r01YMAAXXfdddq1a1fbvm+99ZYuuugi9e3bV71799ZVV12lHTt2HPfcTU1N+tnPfqbzzjtPffv2VUpKik477TQ99NBDqqio6PSYTz/9VAsXLtS0adM0ZMgQJScnKzMzUzfccINWr1593Pd6++23dfnll2vQoEFKTExU//79NX78eN15551atWqVzW8nOvK271FpeaWSkxI146yJrsYCAAAAAAAAAADgNs+s0XYkyfb000/r/vvv19ChQzV48GBt3bpVDQ0NyszM1Lp16/TSSy/p29/+tjIyMjRkyJC27UOGDNHGjRs1cODAductKyvTZZddpnXr1ikQCGjYsGHq3bu3tm/frqamJg0fPlzvv/++Ro0a1e64MWPGaNeuXUpPT1dGRoaSkpJUWFiogwcPKiEhQX/4wx907bXXtjvmF7/4he677z5JUv/+/TVixAg1NDRo3759qq2t1T333KNf/vKXXf5OorlGW9g09dRvlqm0vFKzzjtDl1xwlu1zAQAAAAAAAAAAuIk12o5jwYIFevHFF1VcXKy1a9eqqKhI06ZNU3Fxse688079+7//u1588UXt379fa9eu1b59+3TmmWeqtLRUTzzxRLtzmaapG2+8UevWrdMVV1yhXbt2ac+ePdq4caMqKip05513qrCwULfcckuHOP7zP/9TO3bs0MGDB7V582atXbtWBw4c0KuvvqqUlBR97WtfU21tbdv+ra2tevjhhyVZCbeysjKtWbNGeXl5Onz4sD788EN9+ctfju2XdwKMZgMAAAAAAAAAAGjPcyPavvnNb+qpp55qt+3dd9/VZZdddtzt77zzji6//HJNnjxZGzZsaHv97bff1hVXXKGJEydq9erVSklJaXdcKBTS9OnTtXbtWn300Uc6//zzuxTr97//fT3yyCN6+eWXddNNN0mSSktLlZGRoX79+qmysjKyD38cx2Zjf/DE80pKTjnJEcdXW1+vcNhUclKikpOSohIfAAAAAAAAAACAG5qbGvWj+V+TJD3+7Ev67t3/Yus8CdEMqjv42te+1uG1M844o0vbd+/e3e71ZcuWSZJuu+22Dkk2SQoGg5o7d67Wrl2rDz74oEOibceOHfrDH/6gDRs26ODBg2ppaZEkHThwQJK0fv36tkTbwIEDlZKSourqar333nuaPXt2lz9zVxyuq1dSS+iUz9PU3KKm5pYoRAQAAAAAAAAAAOCO5uamtv+urW2wfR7PJdpGjx7d4bVj113rbPugQYMkqd1UjpK0ceNGSdJvfvMbvfbaa52+X1lZmSSpuLi43etPPPGEvve976m1tfW4sR48eLDtv4PBoB588EEtWrRIl1xyic444wxdfPHFmjFjhi666CL17t37uOfpit6pPW2PaGM0GwAAAAAAAAAA8JLmpmDbf/fq1cP2eTw3deTxPo6d7Tk5Odq5c2eX3v+2227TkiVLJEmrVq3SjBkzFAwG9aMf/UhXXXWVsrOzlZqaKsMw9MILL+iuu+5qd4wkhcNh/eIXv9AzzzyjrVu3tr2enJysf/mXf9HixYuVnp7epXik6Czkt3lbgX732ntKTkrUwq/frJ497E8/CQAAAAAAAAAA0B1EI4cikWg74fbTTz9d69ev1xtvvKE5c+Z0OZavf/3revbZZ7VgwQItWrSow/bHH39cCxYs6JBoO1ZRUZFWrlyp9957T3/84x9VV1eniy++WO+9916X4zBNU/X19fqfl15XU3O47TNGgtFsAAAAAAAAAADAa0zTVMvn00emp/fVA7dfa+s8nps6Mppyc3O1fv16bd68OaJEW0FBgSRpxowZnW7/5JNPTnqOrKws3Xzzzbr55ps1f/58TZo0SX/9619VUFCgkSNHdikOwzCUmpqq5hZTNXX1XY6/M6zNBgAAAAAAAAAAvKi2rtH2sSTaTuC6667TSy+9pF/96lf65je/2TaE8GR69LDm8iwtLe2wbceOHXrrrbciiiM3N1d9+vRRdXW19u/f3+VE2xFpNucWZTQbAAAAAAAAAADwOrt5FIlE2wldddVVuuiii/Thhx/qkksu0a9+9StNnDixbXs4HNann36qF198UQsWLNCoUaMkSRdccIFef/11Pfroo5o1a5ZGjx4tSdqyZYuuvfZaBQKBDu+Vl5enJ598UnfddZfOPvvstmkeQ6GQfv7zn6u6ulopKSnKzc2N+HN887ZrIj6GtdkAAAAAAAAAAABOjDXaTrK9oqJCV111lT7++GNJ0ogRIzRkyBA1NDRo165dqqurkyTl5+dr3LhxkqSamhqdccYZ2rlzpxITE3XaaacpHA4rPz9fGRkZuvfee/Xwww+3W6Nt/fr1Ov300yVJaWlpGj16tILBoPbs2aODBw9Kkn7xi1/oG9/4hq3vJxJh09RTv1mm0vJKzTrvDF1ywVkxf08AAAAAAAAAAIB403FoFdoZMGCAPvzwQy1ZskSzZ89WXV2dPvvsMxUUFGjMmDF68MEH9eGHH2rs2LFtx6Slpemjjz7SnXfeqX79+mnbtm2qra3VPffco7Vr1yozM7PD+4wdO1bPP/+8brzxRmVkZGj37t3asGGDUlJSdP3112vlypWOJNkkaX9ZhQ5UVCk5KVEzzpp48gMAAAAAAAAAAAB8yDMj2hBdB6sOq7S8Urljs90OBQAAAAAAAAAAoFsi0QYAAAAAAAAAAADYwNSRAAAAAAAAAAAAgA0k2gAAAAAAAAAAAAAbSLQBAAAAAAAAAAAANpBoAwAAAAAAAAAAAGwg0QYAAAAAAAAAAADYQKINAAAAAAAAAAAAsIFEGwAAAAAAAAAAAGADiTYAAAAAAAAAAADABhJtAAAAAAAAAAAAgA0k2gAAAAAAAAAAAAAbSLQBAAAAAAAAAAAANpBoAwAAAAAAAAAAAGwg0QYAAAAAAAAAAADYQKINAAAAAAAAAAAAsIFEGwAAAAAAAAAAAGADiTYAAAAAAAAAAADABhJtAAAAAAAAAAAAgA0k2gAAAAAAAAAAAAAbSLQBAAAAAAAAAAAANpBoAwAAAAAAAAAAAGwg0QYAAAAAAAAAAADYQKINAAAAAAAAAAAAsIFEGwAAAAAAAAAAAGADiTYAAAAAAAAAAADABhJtAAAAAAAAAAAAgA0k2gAAAAAAAAAAAAAbSLQBAAAAAAAAAAAANpBoAwAAAAAAAAAAAGwg0QYAAAAAAAAAAADYQKINAAAAAAAAAAAAsIFEGwAAAAAAAAAAAGADiTYAAAAAAAAAAADABhJtAAAAAAAAAAAAgA0k2gAAAAAAAAAAAAAbSLQBAAAAAAAAAAAANpBoAwAAAAAAAAAAAGwg0QYAAAAAAAAAAADYQKINAAAAAAAAAAAAsIFEGwAAAAAAAAAAAGADiTYAAAAAAAAAAADABhJtAAAAAAAAAAAAgA0k2gAAAAAAAAAAAAAbSLQBAAAAAAAAAAAANpBoAwAAAAAAAAAAAGwg0QYAAAAAAAAAAADYQKINAAAAAAAAAAAAsIFEGwAAAAAAAAAAAGADiTYAAAAAAAAAAADABhJtAAAAAAAAAAAAgA0k2gAAAAAAAAAAAAAbSLQBAAAAAAAAAAAANpBoAwAAAAAAAAAAAGwg0QYAAAAAAAAAAADYQKINAAAAAAAAAAAAsIFEGwAAAAAAAAAAAGADiTYAAAAAAAAAAADABhJtAAAAAAAAAAAAgA0k2gAAAAAAAAAAAAAbSLQBAAAAAAAAAAAANpBoAwAAAAAAAAAAAGwg0QYAAAAAAAAAAADYQKINAAAAAAAAAAAAsIFEGwAAAAAAAAAAAGADiTYAAAAAAAAAAADABhJtAAAAAAAAAAAAgA0k2gAAAAAAAAAAAAAbSLQBAAAAAAAAAAAANpBoAwAAAAAAAAAAAGwg0QYAAAAAAAAAAADYQKINAAAAAAAAAAAAsIFEGwAAAAAAAAAAAGADiTYAAAAAAAAAAADABhJtAAAAAAAAAAAAgA0k2gAAAAAAAAAAAAAbSLQBAAAAAAAAAAAANpBoAwAAAAAAAAAAAGwg0QYAAAAAAAAAAADYQKINAAAAAAAAAAAAsIFEGwAAAAAAAAAAAGADiTYAAAAAAAAAAADABhJtAAAAAAAAAAAAgA0k2gAAAAAAAAAAAAAbSLQBAAAAAAAAAAAANpBoAwAAAAAAAAAAAGwg0QYAAAAAAAAAAADYQKINAAAAAAAAAAAAsIFEGwAAAAAAAAAAAGBDgtsBAEA827p1a0T7HzhwQH/84x91ww03aNCgQV0+bty4cZGGBgAAAAAAAMRcJP1j9I3BixjRBgAOKi8v1zPPPKPy8nK3QwEAAAAAAAAcRd8YvIhEGwAAAAAAAAAAAGADiTYAAAAAAAAAAADABhJtAAAAAAAAAAAAgA0k2gDAQX369NGcOXPUp08ft0MBAAAAAAAAHEXfGLzIME3TdDsIAIhXW7dudeR9xo0b58j7AAAAAAAAAJFwon+MvjF0Z4xoAwAHNTU1ae/evWpqanI7FACAy773ve/pvPPO06BBg5ScnKxhw4bpyiuv1AcffOB2aAAAAAAQE/SNwYtItAGAg3bu3KlLL71UO3fudDsUAIDLPvnkE02ePFkLFy7U//zP/+gb3/iGdu/erZkzZ+q3v/2t2+EBAAAAQNTRNwYvSnA7AAAAAMCPOhu59sADD2j06NF69NFHdeuttzofFAAAAAAAiAiJNgBAB6YpNYfcjiIySUHJMKJ3PtM0VR+Ory+hZyAoI5pfgs/F2zUQ7d8/9wF79uzZo/nz5+u9996TJM2cOVM//elPNXPmTGVnZ590WshevXqpf//+qqqqciBaAAAAAMDx+L1dHG/9IpJ7fWMk2gAAHTSHpIVL3Y4iMotulJKjWKrVh0Pqt+K96J3QAVWzZis1SNEeLfF2DUT79899IHIHDx7UBRdcoLKyMn3961/X+PHjtXLlSs2cOVN1dXXHPa6iokLhcFglJSV67rnnlJ+frzvvvNPByAEAAAAAX+T3dnG89YtI7vWN0RsHAAAARMGiRYtUVFSk3/3ud5o3b54k6Rvf+IYWLFigxx9/vNNjamtrNXDgwLb/79Gjh+6++2795Cc/cSRmAAAAAABwaki0AYCDcnNzlZ+f73YYAIAYePPNN5WRkaGbb7653evf/e53j5to69Gjh9577z21trZq7969eumll1RbW6v6+nqlpqY6ETYAAAAAOIa+MXgRiTYAAAAgCgoKCjR9+nQFAoF2rw8aNEh9+/bt9JhgMKiLL7647f+/9rWv6Utf+pJmzZqltWvXKjExMZYhAwAAAACAUxQ4+S4AgGgpKCjQTTfdpIKCArdDAQB0Q8FgUPPmzdPmzZv197//3e1wAAAAACCq6BuDF5FoAwAH1dfXa8OGDaqvr3c7FABAlGVnZ2vnzp0Kh8PtXj9w4ICqq6u7fJ6GhgZJUmVlZTTDAwAAAADX0TcGLyLRBgAAAETBnDlzVFJSopdffrnd64sXL+6wb1VVlZqbmzu8XldXp1//+tcKBAKaPn16zGIFAAAAAADRwRptAAAAQBQsXLhQv//973XHHXfon//8p8aNG6eVK1fq448/1oABA2QYRtu+H374oe655x5de+21GjNmjNLS0lRQUKDf/va3Kioq0g9+8AONGDHCxU8DAAAAAAC6gkQbAAAAEAUDBgzQRx99pPnz5+uFF16QYRiaOXOm3n//fU2bNk09evRo23fSpEmaM2eOPvjgA7300kuqr69X//79NW3aNP3yl7/UFVdc4eInAQAAAAAAXUWiDQAclJmZqUWLFikzM9PtUAAAMTBy5Ei9+uqr7V47ePCgDh48qOHDh7e9Nnr0aD3//PNOhwcAAAAArqJvDF5Eog0AHNS3b1/NnTvX7TAAADHS0NDQbuSaJP34xz+WJM2ePduNkAAAAACg26BvDF5Eog0AHFRZWal33nlHl112mdLT090OBwAQZZdffrlGjBihM844Q+FwWH/729/01ltv6bzzztPVV1/tdngAAAAA4Cr6xuBFJNoAwEElJSV65JFHNHXqVCoTAOARW7dubfvv6dOn6/XXX9eyZcvU1NSkwYMH64477tB9992nHTt26MCBA/rjH/+oG264QYMGDerye4wbNy4WoQMAAACAo+gbgxeRaAMAAACi5I477tAdd9xx3O3l5eV65plnNHPmzIgSbQAAAAAAoHsKuB2AH1RUVGjBggUaM2aMUlJSNGzYMD344IOqq6vTXXfdJcMw9PTTT7sdJhAzrU1S4Vpp3SvSP38nrVkq7fhAqq9yOzLEWlHeB/rZLYbWLF983H1+douh1xdf6WBUzgq9sEQtl1yu8Lt/6bDNNE21fnehWq6YK7Ngj/PBOcQ0pUMlUt7/SZ/9QfrnS9L6P0ul+VK41e3oYs/v1wD3AUhSa7NUtP5oXeCzP0jbVkh1B92ODIBTDpdJ+e8dUxd4Vdq/RQr5oC4AyQxLFbukTW9Kq38vrX5Z2vSWdHCPVVeE94WapeKN0rplR+sCW/8m1Za7HRngjHBIKtsmbXhNWv2S9NnL0pZ3pOpi7oN+4Pd2sR/6RRjRFmPr16/XZZddptLSUqWmpmrChAnav3+/nnrqKe3atUuVlZWSpKlTp7obKBADZljatUoqXNOxM71qn7T3M2nAKGnCpVJST3diBGItcOs8hT/5VKFnn5Nx5hkyBg5o2xZ+9TWZGzcpcOftMkZmuxdkDNVWSHnvWJ1rX1Sxy/rbH32BlDnJ+dic4vdrAP5mmlLBP6S9q6VQS/tt1UXSvrVSeraUe6mU3MuVEAHEWF2llPeudGh/x20Vu60H8EadJw073fHQ4JCK3dLWv0qNh9u/fkhS2VapZz9p3Gwpfbgr4SHGTNOqB+z51HoI91jVRVLROqnfMCn3MimltzsxArFWkift+FBqrmv/enWxVLJF6jXQ6hvrPdid+IBY80O/CCPaYqiiokJz5sxRaWmp5s+fr5KSEq1du1alpaVatGiRli9frtWrV8swDE2ePNntcIGoMk1p89tWZfpEI1YqdltPNDbVHX8fL0lNTdX555+v1NRUt0OBQ4zERCU8NF9qbFToJz9te93cV6Twkv+VMe40Ba6/1r0AY+hwmfWUXmdJtiOa66X8/7PuFV7l52sA/maaUv5fpN0fd0yyHatyj/VU7xc7YAHEv9oK6bPfd55kO6KlQdr2N2nXR87FBeeUbrVmMjjRPb6+yhrxXL7LubjgDNOUtr8v7fx7xyTbsar2WSNd66sdCw1wTOFaacvbHZNsx6otl9b8wUq8+QF9Y/7jh34REm0x9MADD6ioqEj333+/Fi9erLS0tLZtCxYs0JQpU9Ta2qrs7Gz17s1jO/CWPZ9aTyd2RUO1tPF1fwyVz87O1vPPP6/s7Gy3Q4GDjJwxCtx0g8w1axVe/o7MUEihxxZLpqngQ/NlBINuhxh1rU3WlFAnalAfa+dKa4SbV/nxGkDn+vTpozlz5qhPnz5uhxJz+9ZK+zd1bd/GGmn9a/6oCwB+EWqR1i+TWhq7tn/BJ11vPyA+1JRb06KpC/d2M2xNK8nyAt6yf7NVH+iK5jqr/RAOxzYmwEmVhdL2FV3bN9Qibfiz9TCq19E35k9e7xch0RYj+fn5Wrp0qQYMGKBHH320033OPPNMSdKUKVPavV5QUKC5c+cqLS1N/fr101e/+lUdPMgCFogf4VZrushIHNp/4iddvSIUCqm2tlahUMjtUBzV2lyvhpqKTn/8IjDvZmnUKIWee17hZ34pc9t2BW7/qoxhWW6HFhMleSd+Yq8ze1bHJpbuwm/XwBdxH7BkZWXpscceU1aWt3/v4bA1RXQkag9IlXtjEw8A55Vts5Lokdjr8bqA3+xbI5kRNHvCrdZ6nvAG05T2/jOyY+orvf3wHfwn0nKtpdFKUHudX/vGJNrFXu4XYY22GHn55ZcVDoc1b9489erV+YITPXr0kNQ+0VZTU6OZM2cqPT1dL7/8shoaGrRgwQJdeeWVWrVqlQIBcqPo/sq2W1PARKpovdQ3M+rhdCtbt27Vddddp1deeUW5ubluh+OYT5b9QJ8s+4HbYbjKSEhQwkPfUes3v6XwW8tlTMxV4Jqr3Q4rJkzTXidJdZE1xVSvASffNx756RroDPcBS1NTk0pLSzVkyBAlJye7HU7MVOyWmiLsYJese0f/7GhHA8ANduoCh8ukQyVSn4yohwOHtTRKpfmRH7d/szR6hhRMjH5McFZlob0RikXrpUE5UQ8HcFx9tXSwIPLjijdII6ZJhhH1kLoNv/aNSbSLvdwvQqItRlassMYFz5w587j7FBUVSWqfaPvVr36l4uJi/f3vf9fw4dZKwFlZWTrvvPP0xhtv6Oqrr+5yDKZpqr7eGm/cs2dPGV6+Q6NbqSq0d1ylzePQ/U2cebdyzr6+021//vFsh6NxUWqqlJgotbbKmHaWDI8+PNFcL9XZHIhdVejdRJsk31wDneE+YNm5c6cvGpXUBQB/a22WDpfaO7aqkESbFxzaL4VtDFRobZJqDnj/AUw/sFsXqCq0HtyjCwvxrmqfveMaDkmNh6QefaMaDroJ2sXqdv0i0cqhkGiLkb17rXlvRowY0en21tZWrVq1SlL7RNtbb72lGTNmtCXZJOncc8/VqFGj9Oabb0aUaKuvr28bTZeRkcFoODjmG5f/QmePnRvxcYeqapWVNS4GEcXO7bffHtH+JSUlkqS3335b69at6/JxS5Ysieh9TlUwsYe+8siOqJ2v75AcDZ94cdTO15mxOTkK2RlKeRxmUpL07DPRO59pKvTEk1JrizR8mMK//4MCF10oY2j0epLG5oyV0dwctfPZNbDPCD1+xypbxz7y/z2q5auj972fini7BqL9++c+0HWRlAXxUg6cqjtnL9aFuTdFfFxLU1hZWcNPviOAbq1Pz4H62d1dv8cd68knntKyjx+LckRw2rScK3TfFc/aOvamG+Zp894PoxwRnDbvov/S7NPvjPg405RGjxyj5tYuLvAIdFMXT71Tt3zpv2wdO+tLs7WvwsawYBd5tU3k93ZxvPWLSJH3jYTD4bZrcurUqRFdk8ci0RYjdXXWwjQNDZ1f1EuXLlVFRYXS0tI0cuTIttfz8vJ0/fUds9q5ubnKy8uzHc+RiwVwQmV1ua3j6hsOq7i4OMrRxNaRJx66qrGxse3fSI51+ntJSO7p6PtFw/6S/WptiuKqwSnJiuaMNeHX3pC5YaMCd9ymwLnnqPW+byr0xJMKLl4UtRHH+0v2S41NUTnXqag71CLJqkBF+tnKDhR3n/tAnF0D0f79cx/oukju5/FSDpyqg1UHbB3X0FQbd58VQEcHk6ptH1tWsZ/7gAcM7WV/iPK+4gKuAQ+oqLQ3rDUUDqlgLwu1If6VDi2yfeyefbtUWhlf90Gvtol83y6Os34R6dT6RsrKymy/L4m2GBkyZIiqqqq0du1anXvuue22lZSU6KGHHpIkTZ48ud1FVFVVpb59+3Y4X3p6urZt22Y7Hka0wUnF1fZWbt1VtkaZmfE1R0jPnpEVuCkpKW3/RnKs099LMLGHo+8XDUMzhkZ9RJu9lHEn5youVviFJTJOG6vADdfJCAYVuGWewr95UeHX3lDwK1dF5X2GZgztFiPaJKmkcpcy0kd3ef8jSbkD9du7zX0g3q6BaP/+uQ90XST383gpB05VcfUWW8ftLPks7j4rgM7tPbBZIwZN7PL+R+oCpTVbuQ94wOHWIrW0NioxISWi4xqaatRoVHANeMD+GnujcXbsX83vH55QXm+Ngor0AdSDh4uV2DOkzB7x9Xfg1TaR39vF8dYvIkXeN3LsiLbBgwfbfl8SbTFy8cUXKz8/X4sWLdLs2bM1duxYSdLq1at16623qqKiQpI1HNEJO3bsUGpqqiPvBYRapI+etRbAjsQ3vj9H//6rObEJKka2bt0a0f4tLS266667lJaWpsTErj8T8sgjj0Qa2ilpapUWLnX0LU/Z9h07lBzFUq0u1Kp+K9475fOY4bBCj/9ECocVfOg7MoJBSVLghutkrvpY4ReWKHD29KgMk9++Y7tSg92jaC9cI21/v+v7G4ahPkOlj9f9JXZBRSjeroFo//65D3RdJGXBli1b9MILL+jyyy+PaI02p8uBUxUOSR/9Smqui+y4274zS/Ofsf/0L4Duo3ijlB9BsW4YhnoNlN7/52uszeQRm9+WSiOcmCfnnDTt+o/tsQkIjjJN6ePnrfWmInH918/R/T+lLgBvWPsnqXJvZIXa9MszVfhfe2MUUexE0iaKl74xiXZxvPWLSJH3jdTV1bUtv/XRRx/Zfl+GOMXIggUL1L9/f+3bt0+5ubmaNGmScnJyNH36dI0aNUqzZs2S1H59Nknq16+fqqurO5yvsrJS6enpToQOnLJgopR1emTH9B4s9c2KTTzdSWJiotLT0yOqSCC+hV95VWZevgK33SLjmPU3jWBQwe9+RwqHFHriSZmm6WKU0ZeRK0X64NeIabGJxW1+vQbQudzcXOXn50eUZItHgaA0/MzIjkntL/UfefL9AMSHIeOkpAif9RxxlkiyecjwMyUjgl6nQFAaNjVm4cBhhiENPyuyY3r0kQbmxCYewA0jIvwbSEiWhk6KTSzdCX1j/uOHfhESbTGSlZWllStX6oorrlBKSor27Nmj9PR0Pfvss1q+fLm2b7ee0Ppiom38+PGdrsWWl5en8ePHOxI7EA0jz5UGjunavilp0uSr/dGoLiws1L333qvCQvtrFiB+mIWFCr/4Wxnjxylw7TUdthvZIxS4ZZ7MTZsVfu0NFyKMncQUacpXrMR7V4w8RxrkwUa1n68BYMQ0aUgXq69JqdY9I5IOWQDdWzBJmnqN1WnYFcPPtB7UgXf0HiyNv6SLOxtS7uXWQxfwjqypUubkru2b2MO6ZwSCMQ0JcFT/kdKYC7q2byAoTb5KSvbBhGT0jfmLX/pFDDOe04Rxqra2Vr1795ZhGKqpqWk3F+3ixYv17//+79q9e7eysqzhPZ9++qnOOeccvfrqq/rKV77S5fc5dthjbW0tU0fCceGwtOMDqWiDZIY636ffMGniFVJyL0dDi5pIp47csmWLrrvuOr3yyisRjWYYN25cpKGdkngcGr/oRnXLqSOdVDVrdreZOvKIw2XSluVSXWXn2xOSpVHnS8PPcDauroi3ayDav3/uA10XSVlQUFCgf/u3f9Ojjz6qkSO7PnzL6XIgWsywtPMjad8aazrJzvTJlCZebj3FDsB7aiukzcul2uMs8BFMsh64GTHNHw/e+VHZdmnb344/nXBymjR+tjRglLNxwRmmKe3+WNq7Wgq3dr5P7yFWv0DPfs7GBjileKO08+/HX2KlZz8p9zKpz1Bn44qmSKfTj4e+MYl2cbz1i0iR941EK4fSvXrjfGLLli0yTVNjx47tsODj3XffrZ///Oe66qqr9KMf/UiNjY1asGCBpk+frquuis6CgIBTAgHptFlWw3n/Jqlit3SoxOp0CyRI0+dJvQa6HSWAWOo9WDrnDqlqn9W4KDum7j3+y9KQ06wONsAv6uvrtWHDBtXX17sdiiOMgJRzodWBXrJZKt8lHdp/tC5w1s3WfQKAd/UaIJ39VelQsVT0eV3ADEtGUDptpjRkgpRAXcDTBo+VBo6WyndKJVukg3s+LweC0sQ5VoItwIhmzzIMafT51qjVkjzpwPb2dYEzb5T6nPqSPEC3ljnZmumhbJtUulWqKjz6NzDlail9BA+bAPGOqowLNm3aJKnjtJGS1Lt3b61YsUIZGRm66aab9LWvfU3nnXee3nrrLQWoeSJOJfWUss+2OtOSPs8tJ6aQZAP8wjCk9OHSpCslHWk8GFLmJJJsgF8k9bCSbWfd1L4uQJIN8AfDsNZjnnj50XtAUg9rWjmSbP4QCEqDT7OmBmwrB3pIg8aQZPOLxBRrFosv1gVIssEvgonS0InSGde1/xvon02SDfACRrS54ESJNkkaPXq03nrrLSdDAgAAAAAAAAAAQIR4bsgFJ0u0AfCuwYMHa+HChRo8mEf4AQAAAAAA4C/0jcGLGNHmghUrVrgdAgCXDBgwQLfffrvbYQAAXJKZmalFixYpMzPT7VAAAAAAwHH0jcGLGNEGAA46dOiQ3n33XR06dMjtUAAALujbt6/mzp2rvn37uh0KAAAAADiOvjF4EYk2AHBQUVGRvv3tb6uoqMjtUAAALqisrNRLL72kyspKt0MBAAAAAMfRNwYvItEGAAAAOKSkpESPPPKISkpK3A4FAAAAAABEAYk2AAAAAAAAAAAAwAYSbQAAAAAAAAAAAIANJNoAwEEpKSkaP368UlJS3A4FAAAAAAAAcBR9Y/CiBLcDAAA/GT16tF599VW3wwAAuCQ1NVXnn3++UlNT3Q4FAAAAABxH3xi8iEQbAAAA4JDs7Gw9//zzbocBAAAAAACihKkjAcBBeXl5mjx5svLy8twOBQDgglAopNraWoVCIbdDAQAAAADH0TcGLyLRBgAOMk1TLS0tMk3T7VAAAC7YunWrpk2bpq1bt7odCgAAAAA4jr4xeBFTRwIAOkgKSotudDuKyCQFo3u+noGgqmbNju5JY6xnIMpfgs/F2zUQ7d8/9wEAAAAAgJ/5vV0cb/0iknt9YyTaAAAdGIaU7PMSwjAMpQZ9/iX4nN+vAe4DAAAAAAA/83u72O/9IpFg6kgAAAAAAAAAAADABtKRAOCg0aNH64033tCwYcPcDgUAAAAAAABwFH1j8CISbQDgoJSUFOXk5LgdBgDAJWPHjtWqVauUlpbmdigAAAAA4Dj6xuBFTB0JAA4qLi7Www8/rOLiYrdDAQC4IDExUenp6UpMTHQ7FAAAAABwHH1j8CISbQDgoOrqai1btkzV1dVuhwIAcEFhYaHuvfdeFRYWuh0KAAAAADiOvjF4EYk2AAAAwCE1NTV6//33VVNT43YoAAAAAAAgCki0AQAAAAAAAAAAADaQaAMAAAAAAAAAAABsINEGAA4aMGCA/vVf/1UDBgxwOxQAAAAAAADAUfSNwYtItAGAgwzDUFJSkgzDcDsUAIALgsGgzj//fAWDQbdDAQAAAADH0TcGLyLRBgAOKi8v1zPPPKPy8nK3QwEAuCAUCmnVqlUKhUJuhwIAAAAAjqNvDF5Eog0AAAAAAAAAAACwgUQbAAAAAAAAAAAAYAOJNgAAAAAAAAAAAMAGEm0A4KA+ffpozpw56tOnj9uhAABcQDkAAAAAwM9oE8GLEtwOAAD8JCsrS4899pjbYQAAXEI5AAAAAMDPaBPBixjRBgAOampq0t69e9XU1OR2KAAAF1AOAAAAAPAz2kTwIhJtAOCgnTt36tJLL9XOnTvdDgUA4ALKAQAAAAB+RpsIXsTUkQCADkxTag65HUVkkoKSYUTvfKZpqj4cX19Cz0BQRjS/BJ+Lt2sg2r9/7gMAAAAAAD/ze7s43vpFJPf6xki0AQA6aA5JC5e6HUVkFt0oJUexVKsPh9RvxXvRO6EDqmbNVmqQoj1a4u0aiPbvn/sAAAAAAMDP/N4ujrd+Ecm9vjGmjgQAAAAAAAAAAABsINEGAAAAAAAAAAAA2MDkOgDgoNzcXOXn57sdBgDAJZQDAAAAAPyMNhG8iBFtAAAAAAAAAAAAgA0k2gDAQQUFBbrppptUUFDgdigAABdQDgAAAADwM9pE8CISbQDgoPr6em3YsEH19fVuhwIAcAHlAAAAAAA/o00ELyLRBgAAAAAAAAAAANhAog0AAAAAAAAAAACwgUQbAAAAAAAAAAAAYAOJNgBwUGZmphYtWqTMzEy3QwEAuIByAAAAAICf0SaCFyW4HQAA+Enfvn01d+5ct8MAALiEcgAAAACAn9Emghcxog0AHFRZWamXXnpJlZWVbocCAHAB5QAAAAAAP6NNBC8i0QYADiopKdEjjzyikpISt0MBALiAcgAAAACAn9EmgheRaHNARUWFFixYoDFjxiglJUXDhg3Tgw8+qLq6Ot11110yDENPP/2022HGVKhVKt8lFW+UijdJVfsk03Q7KmcdLpP2b5aKNkhl26TWJrcjAmKvKO8D/ewWQ2uWLz7uPj+7xdDri690MCpnhV5YopZLLlf43b902Gaaplq/u1AtV8yVWbDH+eAcZJpSdbGkI/d+Uwq1uBmRc/x+DXAfACymKVUWWnXh4o1SxS4pHHI7Kjgp1CId2GG1B/ZvsspFP7WJTFM6VHK0/A+1Sq3N7sYEZ4VDUkXB0Wsg3CqZYXdjgrNam6z+kLZrwGfloGla/WFH6gLlu6x7oZ80HJJK8qyysCRPajzsdkSAM/zeLvZDvwhrtMXY+vXrddlll6m0tFSpqamaMGGC9u/fr6eeekq7du1qGyI7depUdwONkaY6qfAzK8HU0tB+W89+UtZU6ycQdCO62DPNzysQ66TDpe23BROlIROkEWdZ3wUAbwrcOk/hTz5V6NnnZJx5hoyBA9q2hV99TebGTQrcebuMkdnuBRlD4bC0f6O0b51Ud7D9tpW/lIZOlIafJaWkuROfE/x+DQB+F2qx7oHFG6zOpWMl9ZSGTpaGnykl9XAnPsReY83RNtEXH7ZL7S8NO926DgIefQzWDFuffd86qbb86OutjZ/XBXKtukCPPu7FiNhqaZT2rbUSC0217V9f9ZyUOdX6O0hIci1ExFh9lbT3M6k0r/3Ddi0N0j9/Z/3+h0yQDMO9GGMp3GollorWW9/FsRJ7SEMnWXWB5FRXwnNE1T7rGqjYraMPX0qSIQ0YJY2YJvXLcis6ALHmh34Rj1blu4eKigrNmTNHpaWlmj9/vkpKSrR27VqVlpZq0aJFWr58uVavXi3DMDR58mS3w426ukpp9UvS3tUdk2ySVbnY/r607hVvju4Kh6Ut70h573RMsklW5bJ4g1WprNrnfHwAnGEkJirhoflSY6NCP/lp2+vmviKFl/yvjHGnKXD9te4FGEOhFmnDn6Wtf+2YZJOse3/hGus+WFPecbtX+PkaAPyupUFa+ydp5987Jtkkqble2vOJ9NnvpYZqx8ODA2rKrXKucE3nbZ66g1Y5ueHP3hzpHW6VNr4p5f+lfZLtiFCzlYD75++s0W7wnsYa6bOXpd0ft0+yHbt910ppzVKpuc75+BB7Vfusv/HiDZ3f5w6XHu07CXtwhGNrk7RumdX/9cUkm2TVFfb+0+o/q/PoclWFa62/8Ypdap9kk/X/FbukNX+wygMA3uSHfhESbTH0wAMPqKioSPfff78WL16stLSjj+svWLBAU6ZMUWtrq7Kzs9W7d28XI42+pjpp3Z+6NgS8ap/V+PJahWr736yntU6mtUla/+fOG57wntTUVJ1//vlKTfXwo2rowMgZo8BNN8hcs1bh5e/IDIUUemyxZJoKPjRfRtB7w3pNU9r8tnSw4OT7NtdZD114edoQP14D6BzlgH+EQ9KG16VD+0++b32V1QnX2cNpiF+Nh63yrSvJg4MFVrnppakkTVPK+z+pfMfJ921pkNYv67wTGvHrSIKhsweuvqimzGoXezHh7Ge15dbvtSsPV5fkSdtXxD4mJ4XD0sY3uvZw9ZEyo8ljCedIfq/b/iaV5sc2HnQPtIn8yev9IiTaYiQ/P19Lly7VgAED9Oijj3a6z5lnnilJmjJlSttrRxJz06dPV3Jysow4HTdfuNp6Mq2rKvd8PnzcI2orrGkBuirULO1aFbt40H1kZ2fr+eefV3Z2ttuhOKq1uV4NNRWd/vhFYN7N0qhRCj33vMLP/FLmtu0K3P5VGcO8OT9G1b6udawd0VwnFXwau3i6A79dA1/EfcDi13LAj8q2SdVFXd+/voonub2m4NPIRuiU7/DWTBeHSyPrMG1plHb/I3bxwHnFG6W6CIr5w6VWpzy8Y+dHVn9HVxWt71piNl5U7JIq93Z9/8bD1lTDXhEOSTs+iOyY7R/4b+0+P/Jzm8jv7WIv94uwRluMvPzyywqHw5o3b5569erV6T49elgLMRybaNu5c6eWLVumadOmKSkpSatWxV/2JdRizcEfqaL10qAxUQ/HFUXrIz+mfJdVqUrx1uBGfEEoFFJDQ4N69OihYJw/qRGJT5b9QJ8s+4HbYbjKSEhQwkPfUes3v6XwW8tlTMxV4Jqr3Q4rZux0FpfmSTkXSgnJ0Y+nO/DbNfBF3Acsfi0H/MhOfbB4o5R9tnfXL/aT1qauzW7xRUXrpPTh0Y/HDXbqAmXbpLFfstYvRHwzTXv3waL1UuZk767V5ScNh+w9UL1vvTTu/0U9HFfY+RvYv0kadZ4UTIx6OI47sN2aJjsSzXXWgyeDx8UmJnQPfm4T+b1d7OV+ERJtMbJihTUueubMmcfdp6jIesT12ETbhRdeqJISa3L6H/7wh3GZaDu4x3oaMVKVe6wCNckDo4ZtDXU3reOyz456OOhGtm7dquuuu06vvPKKcnNz3Q7HMRNn3q2cs6/vdNuffzzb4WhclJoqJSZKra0ypp0lI+DNgeWtzVLFzsiPC7VIB3ZKQ738p+GTa6Az3Acsfi0H/KahumtTRn5RU601oql/drQjgtMO7LQ3BV75TqscTUiKfkxOCoekA9siP84MWR2zWVOjHhIcdmh/52tTnkxtuTUKrtfA6McEZ5VtVcf1uLqgNM8bibamushGsx3R0mj1qw3KiXpIjrM7DWRJPok2r/Nzm4h2sTzbL0KiLUb27rVK0xEjRnS6vbW1tS2JdmyiLRCjCysnJydm5/6iWZO/qq/O+m9bx154/mwVVcT3hMyJwWQ9981dto595mfP6eW//yjKEXUvP7lrtdLTMlRSUqKsrGluh3PKbr/99oj2P5JIf/vtt7VuXdcf812yZElE73Oqgok99JVHIpj37yT6DsnR8IkXR+18nRmbk6NQFBe3MZOSpGefid75TFOhJ56UWluk4cMU/v0fFLjoQhlDM6L2HmNzxspojmBulhgZ0HuYFt9pb+6nH/z7/0/vrPmfKEdkT7xdA9H+/XMf6LpIyoJ4KQdiyWt1gc6MyThTD9/4uq1jv/G1B/Xx1mVRjghOu/yse3XDjH+P+DjTlM6aeo4qDkcw72g3lNajv35+TwRz6R9j0SM/1Z8/WRzliOC0s8Zcrvuv/JWtY6+Ze5Py9n0U5YjgtH+56Ie65PSvRXxca5OUPWKUWiOZc7IbGjZgvP6/W96zdez8B/9N72/8bZQjct4Pb35b2YMnR3zcP1et15XfvDIGEXUfXqwPe7VN5Pd2cbz1i0iR942Ew+G2/54xY0ZE1+SxSLTFSF2dNRl/Q0PnF/XSpUtVUVGhtLQ0jRw5MubxHLmBOeFglv05ZUtKilV8oDiK0TgvGLD/Z3W45pCKi+P7859MKBRq+9cLn7W+PrJ5EBobG9v+jeRYp7+rhOT4m69nf8l+tTZFOC/FiaQkK5qzdYRfe0Pmho0K3HGbAueeo9b7vqnQE08quHhR1Nbj3F+yX2rswkrjMdZcZ//Bjurqyu5zb4izayDav3/uA10Xyf08XsqBWPJaXaAzaYFM28dWHCz37PfiJ1VjKm0fu39/scoPxfc1kNbTfudO9aFuVBeAbSP6HrB97IHyMq4BDzh82MaQxs8VFe1TKNwaxWicl9Dax/axBw9WeOJvoLHJxnRXkhqbGjzx+U/Ei/Vhr7aJfN8ujrN+EenU+kbKyspsvy+JthgZMmSIqqqqtHbtWp177rnttpWUlOihhx6SJE2ePDlqF9GJZGRkODaircU4bO+41iYlpZrKzLTfMdFdHKzZr/5pQyM+riFU6YnPfyJH5l4OBoOe+Kw9e0ZW4KakpLT9G8mxTn9XwcQejr5fNAzNGBr1EW3l0TpXcbHCLyyRcdpYBW64TkYwqMAt8xT+zYsKv/aGgl+5KirvMzRjaLcY0ZYYTFRjc51SbMwF3KRD3ebeEG/XQLR//9wHui6S+3m8lAOx5LW6QGcCKc0Kh0MKRLDYmmmaMgxDoWCtZ78XP2k27XUwNzbXKbVPkpJ6xfc1YBgB1TZWq1dK34iPbTSr+RvwgFCC9fDxkXtbV7Ttm9TANeABDSF7DxwcPFysIRmDoxyN85KSTbWGmpUQjHwu4JbAYU/8DRxqsPfQ/6GGUk98/hPxYn3Yq20iv7eL461fRIq8byQcDrcNUho82H75Q6ItRi6++GLl5+dr0aJFmj17tsaOHStJWr16tW699VZVVFijvqZOnepIPDt27FBqqjOLn5lh6eNfRz4f+7BJydqxO76njTxi98fWTyQCCdKvX/1vJabYm3YzXqz8pbX+SEZGRts6hfFs69atEe2/ZcsWvfDCC7r88ssjmof6kUceiTS0U9LUKi1c6uhbnrLtO3YoOYqlWl2oVf1W2Jvq41hmOKzQ4z+RwmEFH/qOjM8r1IEbrpO56mOFX1iiwNnTozJMfvuO7UoNdo+iPf89qTjCGaOSekqvrXheEfRLx1S8XQPR/v1zH+i6SMqCeCkHYslrdYHjWf9nqSKC2cQNw1Bqf+mD1W/IgefwEGPhkPTRs1JzhA8Tj56WqoJ/tzcNfXez/X2pcE1kxyQkS3945ykFE5+KTVBw1D9/Jx0u7foNzTAMpY+Q1ud9EsOo4JSWRqvMj3Rg2rRLM1X0X96oH2xeHvk6ZT36SH/5eKkn6gIH90rr/hT5cff951f0/ee/Ev2AuhEv1oe92ibye7s43vpFpMj7Rurq6tSrVy9J0kcf2Z+62hsrzXVDCxYsUP/+/bVv3z7l5uZq0qRJysnJ0fTp0zVq1CjNmjVLUvv12bzCCEiZNj6Wlxa8zpxsfQ+RGDJeSkyJTTzoPsaOHatVq1a1Jd/hfeFXXpWZl6/AbbfIGD687XUjGFTwu9+RwiGFnnhSpmljpfBuzM49PXOyuk2SLZr8eg2gc5QD/jFsauTHZE2VJzrWYJVnQyNflsZTbSI7nyVjohSM5vxEcJWdayDLe10kvpWYIg0ZF9kxRsBqE3iFrTbRFO/UBdKHSz37RXZMarrUb1hs4kH3QZvIf/zQL0KiLUaysrK0cuVKXXHFFUpJSdGePXuUnp6uZ599VsuXL9f27dsleTPRJknDTpf6RDBz4rAzItu/u0vuJY2d2fX9e/SRxsyIXTzoPhITE5Wenq7ERHoQ/MAsLFT4xd/KGD9OgWuv6bDdyB6hwC3zZG7arPBrb7gQYeykDZSyz4lg/8HSiOmxi8ctfr4G0DnKAf9Iz5aGToxg/xHe6lyElD1dShvU9f1HnmOVn17Rs580+oKu75/aXxp17sn3Q/wYMkEaMKrr+w8eJw3MiV08cN6YC6z+jq4aO9PqT/GKPkOt/rEu759p9Y95hWFIEy7r+sOUgQRrf68kGnF8tIn8xS/9It1jfimPGj9+vN56660Or9fW1mrPnj0KBAKaODGC1nccCSZKU6+RNrwmVZ9kBPSw06WxX/JeQTrsdGsaze3vn3i/1HRp6rWSjaWMEIcKCwv14x//WN/73vc0/JgnOLwqa8KX9ODvTvw0ysm2xzNj+HAlLn/9hPsEb75RwZtvdCgiZ40+X5Ip7fn0xPv1zpCmfkVKiHz5gm7P79eAxH3gi/xWDviZYUjjZksypP2bTrxv/2xp0lxvjur1s4Qk6fTrrGlED59kmZrss6VR5zsTl5Oyp1ttot2rTrxfr0HS6dcww4fXBALSpDnW9HnlO0+875Dx0oQve69fwO+SUqUzbpDWLZPqT7Jk29iZkSWl4oFhWJ/LlFS07sT79hsmTb5K6iYrAURN36FWn9eG16TQCZZMSki2Pn+fU581DnHAj20iP7eL/dIv4rHbd3zYsmWLTNPU2LFjO13w8ZVXXpEk5eXltfv/7OxsnXXWWc4FeooSU6QzrpfKd0j71ndMuA0eZw2j75vp3cr08DOlfsOlovVSaZ4Uajm6rddAqxI5ZJxkY21cxKmamhq9//77uu+++9wOBYg5w7CeYh04Rtq3TirbJpmho9v7DLXKgcFjracXAT+gHPCXQFAaf4nVgVy0zupoPnY2lPQR1n1wwGirQxrek9RTOutGqWy71SY4tL/99owJUtbp3u1YNAxrlNqAkZ+3ifKt9euO6D3k87rAaUwZ6VXBRGnyXKmiwLoPHtzTfvvAMdY1kD7Cu/0Cftejj3T2LVLpVqtNUFvefnvmFGu65V4eGtF7LCMgnTbLus8VrZcObLceQDii3zDrb2DgGO8+cJM+XDrvTql4o/XTVHt0W3Iva0R/5mRvjWbEidEmghfRreWCTZusR1qPN23k9ddf3+n/33bbbVqyZElMY4u2QNBKqA0eJzXWSJ/+r9TSYD3VNOlKt6NzRtpAafxsKeciadVzn3/+ntLZX6UhAcAf+mRYP6fNkj58+ujr0/7FvZgAwCmGYXUwpQ+Xmuulf/zmaH3wjOtPfjziXyDBSqhlTJAaD0uf/vZomyj3crejc0bvIdKES62RHaueP/o3MP0WtyODE4yANHC09dNUJ32y5OjfwJSr3Y4OTggmWYmUoZOkhkPS6peOXgPjZ7sdXewZhtQvy/ppaZA+fuHoffDM+B7A0WXJvaRR51kjuFc+K7XUS4k9pfP/1bsJRgD+QqLNBSdLtMXzon8nkpJ2tPD0Y4IpIemYzx/w53cAwN8SUyQZsuZO4R4IwIeSeravD8J/Unr7vE2UzN+A3yWn+vtvwO8MQ+rZ19/XQGIPf98HA8Gjo/gDAZJsALzDh7d0950s0QYAAAAAAAAAAIDujxFtLlixYoXbIQBwyeDBg7Vw4UINHjzY7VAAAC6gHAAAAADgZ7SJ4EUk2gDAQQMGDNDtt9/udhgAAJdQDgAAAADwM9pE8CKmjgQABx06dEjvvvuuDh065HYoAAAXUA4AAAAA8DPaRPAiEm0A4KCioiJ9+9vfVlFRkduhAABcQDkAAAAAwM9oE8GLSLQBAAAAAAAAAAAANpBoAwAAAAAAAAAAAGwg0QYAAAAAAAAAAADYQKINAByUkpKi8ePHKyUlxe1QAAAuoBwAAAAA4Ge0ieBFCW4HAAB+Mnr0aL366qtuhwEAcAnlAAAAAAA/o00EL2JEGwAAAAAAAAAAAGADiTYAcFBeXp4mT56svLw8t0MBALiAcgAAAACAn9EmgheRaAMAB5mmqZaWFpmm6XYoAAAXUA4AAAAA8DPaRPAi1mgDAHSQFJQW3eh2FJFJCkb3fD0DQVXNmh3dk8ZYz0CUvwSfi7drINq/f+4DAAAAAAA/83u7ON76RST3+sZItAEAOjAMKdnnJYRhGEoN+vxL8Dm/XwPcBwAAAAAAfub3drHf+0UiwdSRAAAAAAAAAAAAgA2kIwHAQaNHj9Ybb7yhYcOGuR0KAMAFlAMAAAAA/Iw2EbyIRBsAOCglJUU5OTluhwEAcAnlAAAAAAA/o00EL2LqSABwUHFxsR5++GEVFxe7HQoAwAWUAwAAAAD8jDYRvIhEGwA4qLq6WsuWLVN1dbXboQAAXEA5AAAAAMDPaBPBi0i0AQAAAAAAAAAAADaQaAMAAAAAAAAAAABsINEGAAAAAAAAAAAA2ECiDQAcFAgENG3aNAUC3H4BwI8oBwAAAAD4GW0ieBFXMwA4KBwOa/Xq1QqHw26HAgBwAeUAAAAAAD+jTQQvItEGAAAAAAAAAAAA2ECiDQAAAAAAAAAAALCBRBsAAAAAAAAAAABgA4k2AHBQnz59NGfOHPXp08ftUAAALqAcAAAAAOBntIngRQluBwAAfpKVlaXHHnvM7TAAAC6hHAAAAADgZ7SJ4EWMaAMABzU1NWnv3r1qampyOxQAgAsoBwAAAAD4GW0ieBGJNgBw0M6dO3XppZdq586dbocCAHAB5QAAAAAAP6NNBC9i6kgAQAemKTWH3I4iMklByTCidz7TNFUfjq8voWcgKCOaX4LPxds1EO3fP/cBAAAAAICf+b1dHG/9IpJ7fWMk2gAAHTSHpIVL3Y4iMotulJKjWKrVh0Pqt+K96J3QAVWzZis1SNEeLfF2DUT79899AAAAAADgZ35vF8dbv4jkXt8YU0cCAAAAAAAAAAAANpBoAwAAAAAAAAAAAGxgch0AcFBubq7y8/PdDgMA4BLKAQAAAAB+RpsIXsSINgAAAAAAAAAAAMAGEm0A4KCCggLddNNNKigocDsUAIALKAcAAAAA+BltIngRiTYAcFB9fb02bNig+vp6t0MBALiAcgAAAACAn9EmgheRaAMAAAAAAAAAAABsINEGAAAAAAAAAAAA2ECiDQAAAAAAAAAAALCBRBsAOCgzM1OLFi1SZmam26EAAFxAOQAAAADAz2gTwYsS3A4AAPykb9++mjt3rtthAABcQjkAAAAAwM9oE8GLGNEGAA6qrKzUSy+9pMrKSrdDAQC4gHIAAAAAgJ/RJoIXkWgDAAeVlJTokUceUUlJiduhAABcQDkAAAAAwM9oE8GLSLQ5pKKiQgsWLNCYMWOUkpKiYcOG6cEHH1RdXZ3uuusuGYahp59+2u0wEWOm6XYEAOAy7oMAfI76IPyOvwFwDYBrwN+O/P65DgB4CYk2B6xfv16TJk3S448/rtLSUk2YMEEtLS166qmndOONNyo/P1+SNHXqVHcDRUy0NktF66VPXpSa66zXmmqlLW9Lh0qoWMDbivI+0M9uMbRm+eLj7vOzWwy9vvhKB6NyVuiFJWq55HKF3/1Lh22maar1uwvVcsVcmQV7nA/OIc0N0t7V0se/PuZFU8p/T6otdy0sx/j9GuA+AFh1v90fSx89e0x9sE7a/r5UX+VubIATWhqlwjXSP15o3ybK+z/pcJm7scEZDdXSjr9Lf/+f9vfBXR9JjTWuhgYHmKbV/7H5ben9nx29Bprrrf6S1mZXw4MDwmHpwA5p7Z+O+f3XWf9/YIe1HfAyv7eL/dAvkuB2AF5XUVGhOXPmqLS0VPPnz9cPfvADpaWlSZIee+wxLVy4UAkJCTIMQ5MnT3Y5WkTbwQJp01tSa1PHbSV51s+A0dLEK6SEJOfjAxB7gVvnKfzJpwo9+5yMM8+QMXBA27bwq6/J3LhJgTtvlzEy270gY6g03+pEC7d23Fa8wfrJyJXGXyIFgs7H5wS/XwOA3xWulXZ8IJlf7EAyrcRD4Rpp+FlSzkWSYbgRIRBbB3ZYDxmGWjpu27/J+hl8mjThUimY6Hx8iC3TlHavkgo+6Wyj9fqeT6XRM6QR07kPelFrs7R5uVSxq+M2Myxt/au0c6U0aY7UP9vx8OCA+ipp/Z+l+k6W46rca/30TJemXiP17Ot4eAAc4Id+EUa0xdgDDzygoqIi3X///Vq8eHFbkk2SFixYoClTpqi1tVXZ2dnq3bu3i5Ei2g4WWBWJzpJsx6rYJa1/VQp10gkN70lNTdX555+v1NRUt0OBQ4zERCU8NF9qbFToJz9te93cV6Twkv+VMe40Ba6/1r0AY6gkz2pUd5Zka7ffFuuhhA6d0B7h52sAHVEO+Mve1dL2FSe/vxV+ZnU0MtMBvKZsu7Tx9c6TbO3222btFw45Execs+OD4yTZjmGaVqKl4B+OhAQHhVql9cs6T7Idq7XJ6hc5WOBMXHBOwyHpsz90nmQ7Vn2l9NnL1v7wPtpE/uOHfhESbTGUn5+vpUuXasCAAXr00Uc73efMM8+UJE2ZMqXttVdeeUXXXnutRowYoZ49e2rcuHH6j//4D9XW1joSN05da5O08c2udxpXF9Go8Ivs7Gw9//zzys7OdjsUOMjIGaPATTfIXLNW4eXvyAyFFHpssWSaCj40X0bQe0O5Gg9Lee92ff/yHdK+9TELx3V+vAbQOcoB/zhcJu34sOv7F2+QDmyPXTyA05rrpC3Lu77/wT3S3s9iFg5cULHbGrXbVbs/ttrG8I6Cf0jVxV3b1wxb/Sgne1gZ8WXL20enijyZ5jppyzuxjQfdA20if/J6vwhTR8bQyy+/rHA4rHnz5qlXr16d7tOjRw9J7RNtixcv1vDhw/Xf//3fysrK0vr16/WjH/1IH374of7+978rECA/2t2V5EmhCOcYL94ojTxXCvJX6WmhUEgNDQ3q0aOHgnFegESitbleDTUVbofhqsC8mxX+x6cKPfe8Art2y9y2XYG7vyZjWJbbocVE0cbIR6gVrZOGne7dKYP8dg18EfcBi1/LAT8qWhf5MfvWWVPoAV5QvDnyEWpF66UR0ySavN6wz+Z9sK8/qkaeF2q1+jkiOqbZ6k8ZdnpsYoKzDpd1PdF6RHWRVFMupQ2MTUzoHvzcJvJ7u9jL/SJ06cfQihUrJEkzZ8487j5FRdbjWscm2t58800NHHi0RLnooos0cOBAzZs3Tx999JEuvPDCGEWMaClaH/kxLQ3WU8wZE6IeDrqRrVu36rrrrtMrr7yi3Nxct8NxzCfLfqBPlv3A7TBcZSQkKOGh76j1m99S+K3lMibmKnDN1W6HFRPhkLQ/wka1ZM3dX7VPSh8e/Zi6Az9dA53hPmDxazngNy2N1hqVkaoukmorpF4DTr4v0J2ZplS8PvLjmmqkg7ulgWOiHhIc1lBtbxrAAzukpjopmdnE4t6B7VY/R6SKNpBo84riDTaPWy+Nmx3VUNDN+LlN5Pd2sZf7RUi0xdDevXslSSNGjOh0e2trq1atWiWpfaLt2CTbEWeddZYkqbg4wkdBPpeTk9MtRsL95K7VSk/LUElJibKyprkdTkwYRkC/ebDQ1rGP/dcv9KeP/jvKEXUvXrsGbr/99oj2LykpkSS9/fbbWreu6494LlmyJKL3OVXBxB76yiM7ona+iTPvVs7Z13e67c8/jk4NemxOjkJ2WnLHYSYlSc8+E7XzSZJSU6XERKm1Vca0s2RE+b48NmesjOYIh9PGQN/UIfrpv9qb++m79/1Af1n36yhHZE+8XQPR/v1zH+i6SMqCeCkHYslrdYHOZA+arB/+y9u2jv3qDd/QP7e/GeWI0J344W+gZ3Jv/eIbebaO/c+HFunN1T+PckRw2tSRF+tbVy2J+DgzLF0261ptL/40+kHBUTfM+A9dftY3Ij6urkIaNmy4TK8u4Cx/lAOS9PCNr2tMxpkRH7fi7X/q4juuiUFE3YcXrwGvton83i6Ot34RKfK+kXD4aHkzY8aMiK7JY5Foi6G6OmsS4oaGzi/spUuXqqKiQmlpaRo5cuQJz/X+++9LksaPH28rliM3MLeFQqG2f+0mDbu75MQeto9tbmjx7PdyhNeugfr6+oj2b2xsbPs3kmOd/q4SkntG9Xx9h+Ro+MSLo3rOL9pfsl+tTZH9Pk4oJVmJ0TubTNNU6IknpdYWafgwhX//BwUuulDG0Iyovcf+kv1So/uLGoT7J9s+tr6uqfvcG+LsGoj275/7QNdFcj+Pl3IglrxWF+hM38Rs28fWHq737PcCix/+Bvqltdo+ttEHbSI/GN2/i4sydeJwdQ3XgAc0NbbYPvZAabmaWxujGE334odyQJIUttl5Hg54+3uRN68Br7aJfN8ujrN+EenU+kbKyspsvy+JthgaMmSIqqqqtHbtWp177rnttpWUlOihhx6SJE2ePFnGCRakKS4u1ve//31deumlmjp1qq1YMjIyusWItiPz7gaDQWVmZrocTew0tzYqKSEl8gMTWj39vUjeuwZ69oyswE1JSWn7N5Jjnf6ugqeQMHbL0IyhUR/RVh61s0nh196QuWGjAnfcpsC556j1vm8q9MSTCi5edMIyIBJDM4Z2ixFtPZNt3P8+F0wyu829Id6ugWj//rkPdF0k9/N4KQdiyWt1gc706GU1s0zTjPjvO6mH4dnvBRY//A0kBpMVNsMKGJG3QY1E77eJ/CCph/26TUpqAteAFwTtJdqaWxs1cHD/KAfTvfihHJCkplCtreOaw3We/l4kb14DXm0T+b1dHG/9IlLkfSPhcLhtkNLgwYNtvy+Jthi6+OKLlZ+fr0WLFmn27NkaO3asJGn16tW69dZbVVFhLXx4ouRZbW2trrrqKiUlJemFF16wHcuOHTuUmur+JOcrfyk11VqJvyPr03nRpreksq2RH/fj/5mvZwbNj35A3YjXroGtWyP7RW/ZskUvvPCCLr/88ojmoX7kkUciDe2UNLVKC5c6+panbPuOHUqOYqlWF2pVvxXvReVcZnGxwi8skXHaWAVuuE5GMKjALfMU/s2LCr/2hoJfuSoq77N9x3alBrtH0f7ZH6y1hiJhGNILryxScq9FsQkqQvF2DUT79899oOsiKQvipRyIJa/VBTpjmtI/fiPVV0bWWAwmSa/9bYkSkmIUGLoFP/wNSNK6ZfbW6Hr6tz9Uz74/jHo8cFaoVfro2cjX6EpJk1Z+9rZs5GjRzdQckD7938iPGzYxxdP3Rsk/5cC+tdK2FZEfd91dF+lbP/fu9yJ58xrwapvI7+3ieOsXkSLvG6mrq1OvXr0kSR999JHt96XqEkMLFixQ//79tW/fPuXm5mrSpEnKycnR9OnTNWrUKM2aNUtS+/XZjtXQ0KA5c+aooKBAf/nLX5SREb0hlIitrKmRH9MnU0obFPVQ0M2MHTtWq1ataku8w/vMcFihx38ihcMKPvQdGZ8/uRa44ToZY3MUfmGJzP3dY3rfaBo2NfJjBuZIyb2iHorr/HoNoHOUA/5gGFJW51X8ExqaK5Js8Aw7dYH+2VLPvlEOBK4IJkhDJ0V+XOYUkWTziLRBUp+hkR9n596B7ikjVwpGOOdcMFEaMiE28aD7oE3kP37oF6H6EkNZWVlauXKlrrjiCqWkpGjPnj1KT0/Xs88+q+XLl2v79u2SOk+0tbS06LrrrtNnn32md955RxMmUMrEk76ZUvqICA4wpFHnnnw3xL/ExESlp6crMTGaMxyjOwu/8qrMvHwFbrtFxvDhba8bwaCC3/2OFA4p9MSTMk3TxSijb2BOZA8PBIJS9tmxi8dNfr0G0DnKAf8YOlHq0afr+yekSMPOjF08gNP6j4ysk90ISCNpE3nKsNOlSGbcSk6TMifHLh44b9R5kiIY3J2ebT2EDG9ISJZGTIvsmBHTeejID2gT+Y8f+kVItMXY+PHj9dZbb6mmpkY1NTX69NNPdffdd6uurk579uxRIBDQxIkT2x0TDoc1b948/e1vf9Prr7+u6dOnuxQ97DIMafJcqfeQruwsjb/EenoT3ldYWKh7771XhYWFbocCB5iFhQq/+FsZ48cpcO01HbYb2SMUuGWezE2bFX7tDRcijJ1AUJp6jdQzvWv7Tpoj9bY/FXa35edrAJ2jHPCPhGRp6rVWx/HJBJOkqVczkgfeYgSkKVdLvQZ2bd/cy60HFuEdKWlWfbAry5cn9ZROv8b6F97RP9vq7+hKsq13hjR5jtWfAu8YeW7XR7dmTpZGnhPbeNA90CbyF7/0i3SPhVx8aMuWLTJNU2PHju2w6ON9992nP/3pT/re976nnj176pNPPmnbNnr0aA0c2IWWClyXkCydeaO06yNp/2aptanjPn0ypFHnk2Tzk5qaGr3//vu677773A7FEVkTvqQHf3fip1FOtj2eGcOHK3H56yfcJ3jzjQrefKNDETkruZc07WZp50qpJE8Kt3bcJ324NHqGvWll4oHfrwGJ+8AX+a0c8LvUdGnav0g7/y6VbZfMUMd9BoySxlzQtWQEEG+Sekpn3XS0LhDqZF36vlnS6POlfsOcjw+x1yfj8/vgSql8p6QvFPlGQBqUI425MLJRwIgfmZOklF7S7o+lQ53MCpaQbI0CHz0j8mkG0f0Znz9cnjZQ2vuZ1Hi44z49+kjDz7KWYSHR6g9+bBP5uV3sl34REm0u2bRpk6TOp4185513JEk//vGP9eMf/7jdtt/85je6/fbbYx4foiOYKI2daTUcy7ZZi8CGWqzXz7zJm6M3AOBYiT2shlXORVJpvrT1r0e3nXuHlNrfvdgAwAkpadLEK6w6YWm+9RBWqMUaxXbObXQsw/sSkqVxF1uJlNJ8accHR9tE0/6FJLMfpKZLU66SGmusa2D3P6Tw5/fB8+6SklPdjhCx1n+k9XO4TCrfYSVcwq3W/eGCr5Ng8zrDkIadYSXSDu6RNr15tByYNMe6NkiwAYh3TB3pkhMl2vbs2SPTNDv9IckWn4JJ1lD5hGTr/xOSSbIB8JeEZKth1TZtjEGSDYC/JPWUhp95TH0wiSQb/CUhScqa0r5NRJLNX1LSpOzpUuIx90GSbP7Se7A1ci3x8+lEg4kk2fzECFgj+Y8tBwaMIskGwBtItLnkRIk2AAAAAAAAAAAAdH9MHemSFStWuB0CABcMHjxYCxcu1ODBDGkEAD+iHAAAAADgZ7SJ4EUk2gDAQQMGDGAKWADwMcoBAAAAAH5GmwhexNSRAOCgQ4cO6d1339WhQ4fcDgUA4ALKAQAAAAB+RpsIXkSiDQAcVFRUpG9/+9sqKipyOxQAgAsoBwAAAAD4GW0ieBGJNgAAAAAAAAAAAMAGEm0AAAAAAAAAAACADSTaAAAAAAAAAAAAABtItAGAg1JSUjR+/HilpKS4HQoAwAWUAwAAAAD8jDYRvCjB7QAAwE9Gjx6tV1991e0wAAAuoRwAAAAA4Ge0ieBFjGgDAAAAAAAAAAAAbCDRBgAOysvL0+TJk5WXl+d2KAAAF1AOAAAAAPAz2kTwIhJtAOAg0zTV0tIi0zTdDgUA4ALKAQAAAAB+RpsIXsQabQCADpKC0qIb3Y4iMknB6J6vZyCoqlmzo3vSGOsZiPKX4HPxdg1E+/fPfQAAAAAA4Gd+bxfHW7+I5F7fGIk2AEAHhiEl+7yEMAxDqUGffwk+5/drgPsAAAAAAMDP/N4u9nu/SCSYOhIAAAAAAAAAAACwgXQkADho9OjReuONNzRs2DC3QwEAuIByAAAAAICf0SaCF5FoAwAHpaSkKCcnx+0wAAAuoRwAAAAA4Ge0ieBFTB0JAA4qLi7Www8/rOLiYrdDAQC4gHIAAAAAgJ/RJoIXkWgDAAdVV1dr2bJlqq6udjsUAIALKAcAAAAA+BltIngRiTYAAAAAAAAAAADABhJtAAAAAAAAAAAAgA0k2gAAAAAAAAAAAAAbSLQBgIMCgYCmTZumQIDbLwD4EeUAAAAAAD+jTQQv4moGAAeFw2GtXr1a4XDY7VAAAC6gHAAAAADgZ7SJ4EUk2gAAAAAAAAAAAAAbSLQBAAAAAAAAAAAANpBoAwAAAAAAAAAAAGwg0QYADurTp4/mzJmjPn36uB0KAMAFlAMAAAAA/Iw2Ebwowe0AAMBPsrKy9Nhjj7kdBgDAJZQDAAAAAPyMNhG8iBFtAOCgpqYm7d27V01NTW6HAgBwAeUAAAAAAD+jTQQvItEGAA7auXOnLr30Uu3cudPtUAAALqAcAAAAAOBntIngRSTaAAAAAAAAAAAAABtYow0A0IFpSs0ht6OITFJQMozonc80TdWH4+tL6BkIyojml+Bz8XYNRPv3z30AAAAAAOBnfm8Xx1u/iORe3xiJNgBAB80haeFSt6OIzKIbpeQolmr14ZD6rXgveid0QNWs2UoNUrRHS7xdA9H+/XMfAAAAAAD4md/bxfHWLyK51zfG1JEAAAAAAAAAAACADTzzCwAOys3NVX5+vtthAABcQjkAAAAAwM9oE8GLGNEGAAAAAAAAAAAA2ECiDQAcVFBQoJtuukkFBQVuhwIAcAHlAAAAAAA/o00ELyLRBgAOqq+v14YNG1RfX+92KAAAF1AOAAAAAPAz2kTwIhJtAAAAAAAAAAAAgA0k2gAAAAAAAAAAAAAbSLQBAAAAAAAAAAAANpBoAwAHZWZmatGiRcrMzHQ7FACACygHAAAAAPgZbSJ4UYLbAQCAn/Tt21dz5851OwwAgEsoBwAAAAD4GW0ieBEj2gDAQZWVlXrppZdUWVnpdigAABdQDgAAAADwM9pE8CISbQDgoJKSEj3yyCMqKSlxOxQAgAsoBwAAAAD4GW0ieBGJNgAAAAAAAAAAAMAGEm0OqKio0IIFCzRmzBilpKRo2LBhevDBB1VXV6e77rpLhmHo6aefdjvMmKo5IO34UGpptP6/tVlqrHE3JjjHNKWK3dLWvx69BkIt1nUAbyvK+0A/u8XQmuWLj7vPz24x9PriKx2MylmhF5ao5ZLLFX73Lx22maap1u8uVMsVc2UW7HE+OAc11Ul7PpVkfv6CKR3yycNrfr8GuA9AsuoCB/dIW/92TF2gWWptcjUswFGHSqTt77dvEzXVuRuTk5rrpb2rj/n8TVJ1sXV/gD/UHZR2rmx/DdRXuxoSHGSaUmWhtG1F+/vgkf/2g8YaqeCT9n8DNQfcjQnOOlwm7fiA/lE/8nu72A/9IgluB+B169ev12WXXabS0lKlpqZqwoQJ2r9/v5566int2rWrbS7aqVOnuhtojFQXSTv+Lh3a3/71ULO06lfSgDHSaTOllN7uxIfY27/Jqkg2HGr/emuTtPKX0tBJ0pgLpCB3I3hU4NZ5Cn/yqULPPifjzDNkDBzQti386msyN25S4M7bZYzMdi/IGGqqszoVD2yXzHD7batfknoPlsZcKKWPcCc+J/j9GgBK86XdH0v1Ve1fb2226gIZuVLOhVIwyZ34gFir3Gu1iWrK2r8eapY+elYaNFYaO1NKTnUnvlhrbrDqAmXbJDN09PVQi/TZy1KvgVZ7YMAo92JEbNUckLZ/IFUVtn891CJ9/LzUP9v6G0jt70Z0cMKB7dKuj6S6LyzHFPq8LjBkvDT2S1JCsivhxVzjYWnb+1LFzvYPF4RapE//V+oz1KoL9c1yL0bEVlWRtPPDjg+btusfnSWlpLkTHxBrfugXYURbDFVUVGjOnDkqLS3V/PnzVVJSorVr16q0tFSLFi3S8uXLtXr1ahmGocmTJ7sdbtSV75TW/Kljku0I05TKd0irf9+xsgVv2PWRlPd/HZNsR4SapX1rpHV/sv7bD1JTU3X++ecrNdWjPSnowEhMVMJD86XGRoV+8tO21819RQov+V8Z405T4Ppr3QswhhoOWcm0sq0dk2xHHC6T1i2TSrc6G5uT/HwNoCO/lQMFn0qbl3dMsh0RapGK1ktr/sjoNnhT6VZp7Ssdk2xHmGGrnFz90vHrzPGsqVb67PdSaV77JNuxasul9X+Wijc5GxucUVVkJVS/mGQ71sE90uqXpcOljoUFBxWulTa+cfx+n3Cr9YDuZ3+wEvNeU1dp9XuV7zj+CN5D+63+s/KdzsYGZxzYIa390/FndGnrH33p+HVmr/Fbmwj+6Bch0RZDDzzwgIqKinT//fdr8eLFSks7+ljCggULNGXKFLW2tio7O1u9e3trSFfNAWnTm8dvTB2rqVZav4xpBL2m+PORbF1RXSxtfie28XQX2dnZev7555Wdne12KHCQkTNGgZtukLlmrcLL35EZCin02GLJNBV8aL6MYNDtEKMu1Cqtf9V6evNkzLC05e3jP5jhBX68BtA5P5UDpVulXSu7tu/h0s/rjkwhBw+p3m+Vb+rCdd142Co3w60xD8sx4bD1mbrUaWhK+X+xppWDdzQckjb82Xqo4mRaG6V1r/prOlU/KN8lbV/RtX1ry6WNr3urLtDabPV3NdWefF8zZNWFmErSWw6XSZvf6nr/6Dqf9I/6qU2Eo7zeL0KiLUby8/O1dOlSDRgwQI8++min+5x55pmSpClTprS9tnLlSl188cXKyMhQcnKysrKydOONNyo/P9+RuKNl72op3IVC5IiGQ9ZTjvAGMywV/COyY8p3WBVrrwuFQqqtrVUoFMEfiAe0Nteroaai0x+/CMy7WRo1SqHnnlf4mV/K3LZdgdu/KmOYN+cHObDdWoejq8ywNfLFy/x2DXwR9wGLX8oB05QKPo7smIN7GM0Ab9nz6fFHdHem7qBUtj128TitYleEHcZm1x/UQ3zYtzay0cot9dYoZ3hHpHWB6iKpal9sYnFDyZbIRiuHQ1Z/Grwj4v7Ramvada/zS5uoM35vF3u5X4RVkWLk5ZdfVjgc1rx589SrV69O9+nRo4ek9om2qqoqTZo0Sffcc48GDRqkoqIiPfroozr33HO1efNmZWV1/4uuuc5eA7FovZQ5RTKMqIcEh1UUdG0UyxcVbZDGXRz9eLqTrVu36rrrrtMrr7yi3Nxct8NxzCfLfqBPlv3A7TBcZSQkKOGh76j1m99S+K3lMibmKnDN1W6HFTN2OkkqdlsN0R59oh5Ot+C3a+CLuA9Y/FIOVO2zNzV40TqpT0b04wGc1nDISjRFqmi9lDEh6uG4wk5doKrQSjiyVlf8C7VI+zdHftz+TdLIc6RAfD/UDlnT5B0+zrS5J1K0TkofHv14nGaaVh9HpMq2W2sWJvWMfkxwVlOd9QBqpIrWS5mTvd0/6pc2UWf83i72cr8IibYYWbHCGhs/c+bM4+5TVFQkqX2ibe7cuZo7d267/aZNm6bTTjtNy5Yt04MPPhiDaKPr4N6uDYn+otoKKznj1Q5WP6nYbe+48l3eT7T51cSZdyvn7Os73fbnH892OBoXpaZKiYlSa6uMaWfJCHhzYHlzg81pIE3pYIGUNTXaEXUjPrkGOsN9wF/sJBgkqdxmHQLobg4W2Dvu0H6ppUFK7BHdeJwWapEq99o7tmI3iTYvqN5vb+3NplprJCQPXcQ/2/0Cu60kVbwnGRoPS3U2BqiYIev+OWR89GOCsyr3RDay/YjacqmpRkrx1ipD+BztYnm2X4REW4zs3Wu1KkaMGNHp9tbWVq1atUpS+0RbZ/r3t1oZCQn2f105OTkKOHTR/r8pt+vWmY/YO/ZLX1Zh+ZYoR9R9/OSu1UpPy1BJSYmysqa5HU7MfOPyX+jssXNPvuMXVB+sVVbWuBhEFDu33357RPuXlFir37799ttat25dl49bsmRJRO9zqoKJPfSVR3ZE7Xx9h+Ro+MTYZlHH5uQo1BK91bPNpCTp2Weidz7TVOiJJ6XWFmn4MIV//wcFLrpQxtDo9SKMzRkro9n9Cd0H9hmhx+9YZevY/+9Hj2r56uh976ci3q6BaP/+uQ90XSRlQbyUA6fqztmLdWHuTREf19wQVlaWBx5jPwG/1Af97opp9+n68//N1rHTzzpf5YdsZqm6iT49B+pnd3f9Hnesnzz+lJZ9/FiUI4LTpuVcofuueNbWsTdeN0+b934Y5YjgtHkX/Zdmn35nxMeZIWn0yDFqbm2MQVTOGT4wV/817/9sHbvwuw/rbxuWRDegbsQvdaGLp96pW770X7aOnXnhbO2riK85JL3aJvJ7uzje+kWkyPtGwuGjGfEZM2ZEdE0ei0RbjNTVWSv4NjR0flEvXbpUFRUVSktL08iRIztsD4VCCofD2rt3r/7t3/5NQ4YM0Q033GA7niM3MCeUDbUzjMFSWFSg4oriKEbTvRyZezgUCqm42Luf89BhG3NFSWpsqou776W+vj6i/RsbG9v+jeRYp7+XhOT4m6dif8l+tTZF9vs4oZRkJUbvbAq/9obMDRsVuOM2Bc49R633fVOhJ55UcPEiGVF6XHN/yX6p0cajw1HWWGPjsb3PlVeUdp/7QJxdA9H+/XMf6LpI7ufxUg6cqqpqe2sMNLU0xN1njZRf6oN+Vz7Sxnxpnyvct1uVNfG9YGFVSo3tY8sPdqO6AGzL6m3/d1hcUsg14AGV1fYWYQ+Hw9pTuFumaUY5ImcZzam2jy07UOzpvwG/1IUOZNrviy0sKtD+g/H13Xi1TeT7dnGc9YtIp9Y3UlZmvw5Poi1GhgwZoqqqKq1du1bnnntuu20lJSV66KGHJEmTJ0/u9CK66KKL2ka8jRkzRitWrNDAgQNtx5ORkeHYiLbDLdaUmKZpRvQHUttQpcSeIWVmZsYqNNcFg8G2f738OQ/U2psjouhgftx9Lz17RlbgpqSktP0bybFOfy/BOJyvaGjG0KiPaLPXNOzkXMXFCr+wRMZpYxW44ToZwaACt8xT+DcvKvzaGwp+5aqovM/QjKHdYkRbwAiqqrZU/XoN6fIxR8qM6uaibnMfiLdrINq/f+4DXRfJ/TxeyoFTVVFnb968feVb4u6zRsov9UG/q27eJynyNlFVbalS+ySpR+/4vzbKqvdocN/siI+ratrH34YH1IfLFA6HFIhwsbWW1ia1BKq5BjzgYMMeW8ftq8jT0KFDoxuMCxKCraptrFavlL5dPuZImXG4tdjTfwN+qQsdstk/WtNQqcTUsDJT4uu78WqbyO/t4njrF5Ei7xsJh8Ntg5QGDx5s+31JtMXIxRdfrPz8fC1atEizZ8/W2LFjJUmrV6/WrbfeqooK6ynfqVOndnr8r3/9a1VXV6ugoECPP/64LrnkEq1atUrDh9ubSmfHjh1KTbX/NE2kVr8kHSqJLAude0E/FXzf5oIecWLlL6055zMyMtrW6POilkbrs4ZbIzvulm99Sd9+Or6+l61bt0a0f0tLi+666y6lpaUpMbHrz4Q88oi96VjtamqVFi519C1P2fYdO5QcxVKtLtSqfiveO+XzmOGwQo//RAqHFXzoOzI+b1QEbrhO5qqPFX5hiQJnT4/KMPntO7YrNdg9ivbdH1s/XWUYhlL7S3/7ZFm3WY8h3q6BaP/+uQ90XSRlQbyUA6cq1GLVBSJdn+eau6fr3ifjqy4QKb/UB/3ONKVPlkh1ByMr1M68ZIgKfxjf00YesXe1tCPC2f969JHeXvnbblMXwKlZ/+fI1+wcNjlZW3duik1AcFQ4JH30rNQc4aCKS2+ZqLse80b5uP0DqfCzru9vGIb6DJU+XveXmMXUHfipLvTP30mHSyMr1CZemK4934+/hYu92ibye7s43vpFpMj7Rurq6tSrVy9J0kcffWT7fb2x0lw3tGDBAvXv31/79u1Tbm6uJk2apJycHE2fPl2jRo3SrFmzJB1/fbbTTjtNZ599tm666Sb97W9/U01NjR57LH7mqR92RmT7GwEpc2pMQoELElOkobmRHdOjjzRgVGzi6U4SExOVnp4eUUUC8S38yqsy8/IVuO0WGcc8LGEEgwp+9ztSOKTQE0/G/dQoX5Q5WYrwAWYNPzP+Fz3vjF+vAXTOL+VAMFHKnBTZMcm9pEE5sYkHcJphRN4mCgSt8tMrhk607gWRyDrdm3UBvxp+ZuTHDDs9+nHAHYGglDU1smMSU6Qh8bVs+wllTbH6uyIRadmB7s1W/2jnXcWe4pc2EY7yQ78IibYYycrK0sqVK3XFFVcoJSVFe/bsUXp6up599lktX75c27dvl3T8RNux+vbtqzFjxmjnzp2xDjtqBo+LrGCY8GWpZ9+YhQMX5Fwk9e7irHHBJGny1ZFXQONRYWGh7r33XhUWFrodChxgFhYq/OJvZYwfp8C113TYbmSPUOCWeTI3bVb4tTdciDB2kntJE6+U1MXOsiETpKERdsrHAz9fA+icn8qBUTOkvlld2zeQIE2+yvoX8IrMyVb51iWGVW4m94ppSI5K7CFNmtv1Ov7AHGk4Hcyekj5cGnnuyfc7IudLUp9Tf5Ad3Uj22VL/7K7tGwha/QLBpFhG5Kye/az+rq7KmiINPi128cB5Q8ZH2D96qT/6R/3UJoJ/+kVoysbQ+PHj9dZbb3V4vba2Vnv27FEgENDEiRNPep4DBw5o27ZtOvvss2MRZkwYhjTuYikxWdqzWtJxktHBRGn8l731xBIswSTpjOulzculihOMeE/pLU35ipRmfwnCuFJTU6P3339f9913n9uhOCJrwpf04O9O/DTKybbHM2P4cCUuf/2E+wRvvlHBm290KCJnDcqRplwtbXn7xNPHDTtDGvslbz7B7vdrQOI+8EV+KgeCCdLp10hb3pEO7Dj+fslp0uS5dK7CewxDyr3UGqGxb+3x90tIlnIvlwaOdi42pwwYKU29xmoTnGipkMzJ0mn/zx8P3vnNqPOsdv+ujyQz3Pk+gaA0dmbko5/Q/R1JnuX/n1Saf/z9klKtukDf+FqSqksyciUjaH0HoZbj7GRI2dOk0Rd4s03kZ0f6RxOSpL2f6YT9oxMu9U+i1U9toiP83C72S78IiTYXbNmyRaZpauzYsR0WfLzllls0ZswYTZ06VX379tWOHTv05JNPKiEhQd/+9rdditgew5DGXGhVlos3WpWqhkOfbwtYFemMCVbDEt6UkGw1rA+XSkUbrPn5j8zPbgSlSVdKA0ZLARrUgGcNHC1dcI9UulUq3iAdLju6bcR0KWuy1KOva+EBiLFgkjVSraZcKlovle+UmuusbUZQmni5NHBM5FPNAvHCCEinzbJGahVtlMq2So2Hj24bd7H10KGXRnB8Uf9sacbdUtk2q01wuOTzDYb1vWRNtUZ9wJsMQ8qebi0tULxZKtki1Vd+vi0gjblAypgoJfVwN07ETjBBmniFNbqtaINUvsNan0uyroHcy6wH9Lw8qn3IOOvBg5I8qXiTVHvg8w2GNPJs62GDlN6uhogYMgxr1qdhp39eF/hC/+hps6wR8AkergsAfkD3tgs2bbIW9u1s2shzzjlHb7/9tu644w5ddtllevzxx3XBBRdo/fr1GjNmjNOhRkVKb2n0DOn8fz06FUpST6uAIcnmD72HWNMlXHjvMddAj88r09yFAM8LJlmNx+m36uhUkoaUcyFJNsAv0gZK42dLF36jfV1g8Gkk2eAPPfpa5d6Mu9u3iTInezvJdkQw0Vqzbfq8o58/OdV6+JIkmz8kpVoJhfPubP83MGIaSTa/6DVAGvf/pAu+3v4aGDLe20m2IxKSrX6wc77a/j44egZJNr9I6S2N6aR/NGsqSTbAC3xQlHU/J0q03X///br//vudDgkAAAAAAAAAAAARYiyJC06UaAPgbYMHD9bChQs1ePBgt0MBALiAcgAAAACAn9Emghcxos0FK1ascDsEAC4ZMGCAbr/9drfDAAC4hHIAAAAAgJ/RJoIXMaINABx06NAhvfvuuzp06JDboQAAXEA5AAAAAMDPaBPBi0i0AYCDioqK9O1vf1tFRUVuhwIAcAHlAAAAAAA/o00ELyLRBgAAAAAAAAAAANhAog0AAAAAAAAAAACwgUQbAAAAAAAAAAAAYAOJNgBwUEpKisaPH6+UlBS3QwEAuIByAAAAAICf0SaCFyW4HQAA+Mno0aP16quvuh0GAMAllAMAAAAA/Iw2EbyIEW0AAAAAAAAAAACADSTaAMBBeXl5mjx5svLy8twOBQDgAsoBAAAAAH5GmwheRKINABxkmqZaWlpkmqbboQAAXEA5AAAAAMDPaBPBi0i0AQAAAAAAAAAAADYkuB0AAKD7SQpKi250O4rIJAWje76egaCqZs2O7kljrGcgyl+Cz8XbNRDt3z/3AQAAAACAn/m9XRxv/SKSe31jJNoAAB0YhpTs8xLCMAylBn3+Jfic368B7gMAAAAAAD/ze7vY7/0ikeBbAgAHjR49Wm+88YaGDRvmdigAABdQDgAAAADwM9pE8CISbQDgoJSUFOXk5LgdBgDAJZQDAAAAAPyMNhG8KOB2AADgJ8XFxXr44YdVXFzsdigAABdQDgAAAADwM9pE8CISbQDgoOrqai1btkzV1dVuhwIAcAHlAAAAAAA/o00ELyLRBgAAAAAAAAAAANhAog0AAAAAAAAAAACwgUQbAAAAAAAAAAAAYAOJNgBw0IABA/Sv//qvGjBggNuhAABcQDkAAAAAwM9oE8GLSLQBgIMMw1BSUpIMw3A7FACACygHAAAAAPgZbSJ4EYk2AHBQeXm5nnnmGZWXl7sdCgDABZQDAAAAAPyMNhG8iEQbAAAAAAAAAAAAYAOJNgAAAAAAAAAAAMAGEm0AAAAAAAAAAACADSTaAMBBffr00Zw5c9SnTx+3QwEAuIByAAAAAICf0SaCFyW4HQAA+ElWVpYee+wxt8MAALiEcgAAAACAn9Emghcxog0AHNTU1KS9e/eqqanJ7VAAAC6gHAAAAADgZ7SJ4EUk2gDAQTt37tSll16qnTt3uh0KAMAFlAMAAAAA/Iw2EbyIqSMBAAAAAB2Ypqn6cMjtMLqsZyAowzDcDgOAR8TbPVDiPggAgFtItAEAAAAAOqgPh9RvxXtuh9FlVbNmKzVIExdAdMTbPVDiPggAgFuYOhIAAAAAAAAAAACwgUQbAAAAAAAAAAAAYAPjyQHAQbm5ucrPz3c7DACASygHAAAAAPgZbSJ4ESPaAAAAAAAAAAAAABtItAGAgwoKCnTTTTepoKDA7VAAAC6gHAAAAADgZ7SJ4EVMHQnEiBmWKgul6iLpcJlUc0BqrrO2NdVKn7wopQ2Weg+WBo6WUnq7G28s1FdJFbs///ylUsNhKdxqbWuqk9b/2fr8/YZJfbMkw3A3XifU19drw4YNqq+vdzsUAIAL/FYONFRL5butesDhMqnxsBRqsbY11UnrX7XqQ/2ypH7DvVcXCLVYdaFD+63PX1chtTRa25pqpdUvfV4fHCINHCMlprgbLwAAQLQdLpMq93zeN1Rm1YEk699Vzx3tG0vPtv71muYGqXyndLjU+vx1lVKo2drWVCut+aP1uftkSANGSQEf9Nb7rU0Ef/DBny7grJYGqXijVLTB6kw6ntpy66dks7RthdW5Mmxq/HcymaZUsUsqWi8d3HOiHa39KnZZ/9szXcqaKg2dKCUkxT5OAAAQG6YpHSyw6gIVu0+0o7W9YrdUIKlHX6sukDlJSkh2JNSYaai2Pv/+zUcTa505VGL9SFanSsYEKet0KW2gE1ECAADERjgklW616kOHS46/X8Mh6+fAdkkrrWRT1lRp8DgpEHQo2Bg5XCrtWyeVbbW+j+OpKrR+JCmppzR0kpQ1xZsP5ANeRqINiKKybdLWv1rJtoiYUvkO62fgGGncbCk5NSYhxlRDtZT3f1LVvsiPra+Utq+Q9q6WJnxZ6p8d7egAAECsNdZI+f93kodtjqOhWtrxgVUXGH+JNeI/3phhae9n0u5VJ+5Q6Uy41XpYq3ijNPxMafQMKZgYmzgBAABi5XCptOVdayR/pI48hLT3Myn3MiltUPTji7XWZmnHh1LxhsiPba6X9nwqFa6RxlwoDTs9vh/GB/yERBsQBa3NUt67nz+Bc4rKd1rTTY7/sjQo59TP55TiTVai7Mh0UHY11UjrXpEyJ0unzfLHkHkAALygNF/Kf+/oVDh2NddJG/4sDZkgjZ8dP8mmhkPSprdO/NR2VxWusUb6TbzSm1MoAQAA7zFNqeAf1o9pntq5asulf/5OGnmuNPKc+Ek2VRdLm5efeIarrgi3Wn1sB7ZLk66UkntFJz4AsRNwOwAg3rU0Smv/GJ0k27Hn3Pi69URzPCj4xHp6/VSTbMcq3mit4RbNc3YHmZmZWrRokTIzM90OBQDgAq+WA4VrrE6FU02yHas0T1q3zHqgqburOyh99nJ0kmxH1FdJa5bamykAAADASWbYmuFo98ennmQ79py7V0n5f4neOWOpokBa+6dTT7Idq7rIqmM2VEfvnN2BV9tE8DcSbcApCDVL65dZw+JjIf8vUklebM4dLXs/k3Z9FJtzV+6VNr4R+dRL3Vnfvn01d+5c9e3b1+1QAAAu8GI5ULxR2v5+bM5dXWSNbgu1xub80dBwyOpUaaqN/rlDzdL6V4+u4wYAANDdmKa07W9SyebYnH//Juv83TnZVrXPemA+HIM6ayzrmm7xYpsIINEGnILtH8a+4yP/L1JdZWzfw67q/dZaKrF0sMCan9orKisr9dJLL6myspv+UgEAMeW1cqDmgLU+bSxV7ZN2x+ihnlNlhq2RfLHs+Ai1SJvejI+RfQAAwH9K86UiG+uRRaJovVS2NbbvYVdzg1VXi0WS7YiGQ9KWd7p3sjESXmsTARKJNsC2yr2RL2w6/RZpxj3Wv10VbrXWfzPDkb1XrIVapLx3Ij/OzndQ8InVkecFJSUleuSRR1RSwqPpAOBHXioHwqHPG/wR1lHs1AX2fmY94NPdFK6RDkUYl53P33hY2vFhZO8DAAAQa0210rYVkR1jpy4kWaPamuoiO8YJ2/4mNddHdoyd76ByrzW6zwu81CYCjiDR5oCKigotWLBAY8aMUUpKioYNG6YHH3xQdXV1uuuuu2QYhp5++mm3w0QEwiFr7ulIJaVKKWnWv5E4tD/2TwdFas+n1tohkbLzHRyZ69srT+4AAOAFhZ9ZC9VHym59KP/d7lUXaDhkb/psu5+/eINUXRz5+wFAd1JfdXTUR3d7mBRA5La/L7U2RnaM3bpQS2Pspiu3q6LA3kg7u9/B9g+k5m6YbARAoi3m1q9fr0mTJunxxx9XaWmpJkyYoJaWFj311FO68cYblZ+fL0maOnWqu4EiIuU7o7u4aVcUruk+nUuhFmvYvpNqyuhcAgCguwiHpH3rnH3PukprSunuoniD8+vIFq5x9v2iJfTCErVccrnC7/6lwzbTNNX63YVquWKuzII9zgcHIObCIWvt8dW/lz7+tdVZLlkjQNYslcq2eT/pxn0QXtR4WCrb7ux7HtgmNdY4+54n4nTdLNQs7Y/RWngATg2JthiqqKjQnDlzVFpaqvnz56ukpERr165VaWmpFi1apOXLl2v16tUyDEOTJ092O1xEwOkkkyQ1VFvDxLuDsu1HG0dOcuN7BwAAHVXscmdB9u5SFwi3SsUuTN1TvtOd7/1UBW6dJ2WPUOjZ52SWV7TbFn71NZkbNylw6y0yRma7EyCAmGltkta/Km15u/Opdvxd8CMAAPK+SURBVKv2WWsbbXjdeqDTq7gPwouKNkpy+IFw05SKNzr7nsdTXyVV7nH+fYs2eP/hBCAekWiLoQceeEBFRUW6//77tXjxYqWlpbVtW7BggaZMmaLW1lZlZ2erd+/eLkaKSDQcshoDbuguT62UuBTHge1Sa7M77x0tqampOv/885WaGuH8AAAAT/BKObB/izvvW7G7e0yXU1EgtTQ4/75mWCrNd/59T5WRmKiEh+ZLjY0K/eSnba+b+4oUXvK/MsadpsD117oXIICYCIesBFpXHhit2CVtesu7ncfcB+E1pule35Bb7/tFJS7VhxsPS1VF7rx3tHilTQQci0RbjOTn52vp0qUaMGCAHn300U73OfPMMyVJU6ZMOe55LrvsMhmGoR/+8IexCBM2HHZxnc7Dpe699xGm6V4cZtiaQjKeZWdn6/nnn1d2drbboQAAXOCFcsA0Xa4PdYO6gJuf/1Ccrhlv5IxR4KYbZK5Zq/Dyd2SGQgo9tlgyTQUfmi8jGHQ7RABRVrJFqirs+v4Vu5yfhs5J3AfhJU217o2yb6yRmrrBg1eHXOyji9f64BFeaBMBX0SiLUZefvllhcNhzZs3T7169ep0nx49ekg6fqLtj3/8o9avXx+rEGGTm507DdXuTNl4rPoqd6f06A6da6ciFAqptrZWoZDDi7oAALoFL5QDTbXWujpu6Q51ATdjiOeHjgLzbpZGjVLouecVfuaXMrdtV+D2r8oYluV2aACizDTtreXZXaYIjhXug/AKt+sjbr+/abobQ003eBD/VHihTQR8EYm2GFmxYoUkaebMmcfdp6jIGufbWaLt8OHD+ta3vqXFixfHJkDYVltx8n1iqc7l93f787v9/qdq69atmjZtmrZu3ep2KAAAF3ihHHC7LHa7LiS5+x00HJJCcTqVtpGQoISHviM1tyj81nIZE3MVuOZqt8MCEAM1B6Ta8siPqy6yHu70Ku6D8Aq364N27i/R1FzvzjTiR7j9/Z8qL7SJgC9KcDsAr9q715qEfMSIEZ1ub21t1apVqyR1nmj7j//4D40dO1bz5s3TLbfccsrx5OTkKBBwP6/6k7tWKz0tQyUlJcrKmuZ2OLZ877pXNC7rnE63Tb9FSjrB9MLJqUf/nXHPid+nuU765+86vn7zjbdo094PuhZsDMyYcL2+dsmTnW472eeXuv4dHO/zv/7qm/ry177RxWhj7/bbb49o/5ISa3z/22+/rXXruv6I55IlSyJ6H6C7euGBvQoEggqHQsrK6ryMBOJNJGWBF8qBaTlX6L4rnu10mxN1gb+8+zdd9o3buhhtbPzPvVvVI6nzWSuiVR883ueXpIm5U1TTcLCL0dpnJiVJzz4T3ZOmpkqJiVJrq4xpZ8mIYhtlbM5YGc3dPwvphTbRqfD75/eLM0ZfqgfmPG/r2Ksuu0H5RR9HOaLIxeQeKHEfFPcBL3z+a89bqDnTv9npNif6xn6y+Kd69R/uDU4Y3HekFt2+8rjbY10fLN5Xqqyss7oYrTP81iaCd4TDRxeInTFjRkTX5LFItMVIXZ01WXBDQ+ePNyxdulQVFRVKS0vTyJEj22377LPP9Nxzz2nNmjVRi+fIDcxtR4YEh0IhFRcXuxyNPc0nqLQmpUopaSc/hxHo2n6dOXjwoKvfXXVG9XG3dfXzS/a/g8aGxm517dTXRzZ3VmNjY9u/kRzbnT4zcCpMmW3/cl3DKyK5n3uhHBjd//hDDZyoCzQ1Nrn/fZjH3+REfbCsrExVTsxXlJKsxCiezjRNhZ54UmptkYYPU/j3f1DgogtlDM2Iyvn3l+yXGpuicq5Y8kKb6FT4/fP7xch+lbaPdbvN2ybK90CJ++ARfr8PeOHz19Yef4E2J+pCNTW17n53TT1PuDnW30E4FO52147f2kTwprIy+20sEm0xMmTIEFVVVWnt2rU699xz220rKSnRQw89JEmaPHmyDMNo2xYKhXTPPffo/vvvV25ubtTiycjI6BYj2oKfL+4bDAaVmZnpcjT2GIHwcbc1n2Qx1uRUqxA1wydfuPV45+rVp6er312PXsnH3Xayzy91/Ts43rkCiWa3unZ69jxx5eqLUlJS2v6N5Nju9JmBU2HIaPuX6xpeEcn93AvlQK+0lONuc6IuYATDrn8fza0N6pHc+Yi2aNUHT3Se9P591LN37JtyZlKSojkzU/i1N2Ru2KjAHbcpcO45ar3vmwo98aSCixe1axPZNTRjaFyM5PBCm+hU+P3z+4WRbC3sbZpml/++j+wbTGntFtdGtO+BEvfBI/x+H/DC509OOX49xIm+saQe7n53fVN7n3B7rOuDLeGmbnft+K1NBO8Ih8Ntg5QGDx5s+zyGaZoneB4Tdj3wwAP6+c9/rmHDhumvf/2rxo4dK0lavXq1br31Vu3evVstLS2677779PTTT7cd97Of/UyPP/64tm7dql69rMa7YRj6wQ9+oB/+8IcRxVBXV9d2jtraWqWmnmQeHwes/KXUVCsl95Iu+Lrb0diz/X2p0OZgwxn3WE+qNNZIH3U+49JJXXivlBRZbieqasulT160f/ypfgdjLpSyp9t//2iLdD7pLVu26LrrrtMrr7wSUTJ93LhxkYYGdEt/fULWSBBDuni+29EA0RFJWeCFcqChWlplbzYwSadeFxh5rjT6fPvvHw1rlkpV++wde6qfPzlNuuAk0yxFS12oVf1WvBeVc5nFxWr9+v0yskco+NMnZASDCr28VOHfvKjAN+5R8CtXnfJ7VM2ardRg93+W1AttolPh98/vF6Yp/eM3Un2EA9t6D7GmXOsOonkPlLgPHsvv9wEvfP6y7dKmN+wdG42+sclXS4PG2Ds2GkxT+vBpqdXmANJT/Q4GjJamfsXee8eK39pE8I5o5VDcH+LkUQsWLFD//v21b98+5ebmatKkScrJydH06dM1atQozZo1S1L79dkqKir0/e9/X//5n/+p1tZWVVdXq7q6WpI1lLa6urrdnKFwR+8h7r13Spq7STZJ6tlfCrhYb3fz+4+GsWPHatWqVW3JdwCAv3ihHEjpIyUef1BbzPW2/5Bh1KS5GEN3+PyRMsNhhR7/iRQOK/jQd2R8/iR/4IbrZIzNUfiFJTL3d4+p7gFEh2FIWR2Xoz8pO8fEA+6D8Bq36yNuv79hSGmD3Ht/+saA7odEW4xkZWVp5cqVuuKKK5SSkqI9e/YoPT1dzz77rJYvX67t27dLap9oKyoqUk1Nje655x7169ev7UeSFi1apH79+qmwsNCVz4Oj3CzMukNBGgi4WKFxuSITDYmJiUpPT1diYrRn+wcAxAMvlAOGQX2oj88/f6TCr7wqMy9fgdtukTF8eNvrRjCo4He/I4VDCj3xpJhsBfCWzEmRtR37ZklDxscuHjdxH4TXpPR270HwpFRrNKDbekdnaUV77x2H9cFjeaFNBHwRibYYGj9+vN566y3V1NSopqZGn376qe6++27V1dVpz549CgQCmjhxYtv+Y8aM0fvvv9/hR5Juu+02vf/++xoyJM7vpB7Qs597hemQ6C3bd0qGTHDnfQeMcvcJ+mgoLCzUvffeS9IcAHzKK+WAW3WB9OHdo2NlwCgp4fjL1sZUvHVCm4WFCr/4Wxnjxylw7TUdthvZIxS4ZZ7MTZsVfs3mHFQAuqVgkjT1mq6NAu6bKU252t3ZU2KF+yC8yDDcq5NkTLDe320ZLn3+pP8/e38eZ2dd343/rzOTZZLJRhJIQhYCIYEQCJugCBahYFE2FWQRUSp1BaWKhPb+edf2vvnWslhbi7aopVgXpAVUCuhdLaiIiuxgEpZAWBISIIRAMpNtZs7vjyORmARmTs6ca+bM8/l4zGMyc23vc+bk+pzP9Tqfz9VaeU/cnzVKnwherQHfwvR98+fPT7lczqxZsza74eOIESPy1re+davbTJ8+fZvLqL8p+yUL6jyrw9CRlYs6fcHE2cmjP0s663yP5an71fd4vWH16tW59dZbc8455xRdCgAFaJR2YKdZlfvWblxb3+NO2a++x9uW5iHJpDnJ0/fU97jjd0uGja7vMbdXadq0DL7pB6+5TvPpp6b59FPrVBFQT0Nakzecmix5IFl6f9L+4ubLW8dVzu0775P0g1uLVcV5kEY1Zb/kqbvrf9zJfWSK2RE7VkbirlpS3+NO3idpaq7vMWutUfpE8GpGtBXgwQcfTLL5tJH0LxP2qP8Q+an7VaZt7AsGDak07PU0fGwydnp9jwkAbF3zoPrfR6dlVDK+wJve/6Ep+9X/09RTD6jv8QBqoXlIsssbkkM+mLzh9GTQ72YpGTwsedNZydT9Gzdkg0Y2fIf6fyB8/Ixk+Jj6HvO11Pu9WVNz3wkagc31kcv2A0tPg7ZyuZy//uu/7sWK6KnmQcmeR9fveCPGJ9PeUL/jdcdub66MsquXvd7WN6YGAAAqpr8xGTamfseb/ba+86GjJGkdW3kO6mXCnsm46fU7HkCtlUqVKSJfCdWamvXxoL+bdWTSXKfbbDUPTvY4sj7H6q6dZtY3bNzt0KSljtfigO7rQ13VgcOItsaw08zKBY+e2NCWrFtd+d5dpVKy19v73rDwQUOTvf6k59tV8xxMPbAyHB8A6DuaBydzjun5dtW8F5g8t2+GTLseUvlAVE9U8/iHDE/2+OOeHQcAoLcNH5Ps/kc926aa90JJMvPwvjeFdqlU+SB+T+/dW81zMHpSZXQw0DcZnF+AW265pegSqJE9/zhZ83zS9kL31v/Nt3p+jJlHJKO6cfPoIoybXvkk9xN3dH+bnj4Ho3dOdj+sZ9v0ZRMmTMiFF16YCRP66B8VgF7VaO3AmCnJjLckj93W/W16+l5g5ITKhZW+qKk52fu45K7vJh3rurdNTx9/qTnZ+9hkyLCe1wcA0Num7Fe5T9mzD3dv/WqujU3Ys+9OmdgyMpnz9uSBHyTlcve26elzMKQ1mXNsUmqQITON1ieCxIg22C6DhyUHvKdy/7DeMOMtybQ+fi+OGYdVRpz1hlETk/3eXb9pCOph/PjxOeusszJ+fA8//g5AQ2jEdmD6wcn0N/XOvkfsmOx/Us8/JVxPI8b/rsaW2u+71JzMPT4Zu0vt9w0AUAulUjLnHcmOvXQv3R1nVoKsvjzV7I67V56D3qhxyPDkgJP71r3ptlcj9olA0AbbaeiI5A2nJTtMrd0+mwZV7kOyax3v+1GtUimZ9dZk97fU9pM1O+6eHHBKMrgXLloV6aWXXsqPfvSjvPTSS0WXAkABGrEdKJUqo89nHVkJhmpl3PTkwFMrFxf6utGTkjecmgzfoXb7HNJaCfB666IVAECtNDUn+5xQGd1WS1P2T/Y5vu/dTmVrJs5O9n1n5UP5tTJifPKG0ysfPmskjdgnAkEb1MCQ4ZVQaI8/roRk22PM5ORNH6jci6S/KJUqU0ge/L7tb/wHtVQ+BTT3xGTQkNrU15csWbIkn/rUp7JkyZKiSwGgAI3cDkw7IHnjmZUR6dujeUgy+0+S/U7qXx+4GbFj8sb3J9NqcO+MibOTQ85Kxk7b/n0BANRDU1Oy51HJ/icnQ0du375aRlVmkNrzjyv77S/Gz0jedFZlFN72KJWSXd+UHHxmbT/I1Vc0cp+Igcs92qBGSqVk6v7J+N2Sp+9Nnvlt9+/VkSSjJydT96vMO92Xh8O/lpE7VcK2ZfOTp+9L1jzX/W2HDK+Ei1P2T4a29lqJAEAvGjE+ecN7k+ULkiX3JS8v7/62g4clk/epvBdo2c6LM0VpHlwZ6T9xdvL03ZV7lXR1dnPjUrLjjMr7SVNFAgD91bjplQ8MLX2g8n5wbQ8GLQ0bk0zZt3I/tv764euhrcncE5IXFleuD76wuPvbNg2qvI+cdkDjjWKDRidogxobNrpygWXGoclzjyarllYuMq15Pil3/X69Ia3JqAnJyAnJTjMrIVUjaGquBGY775O8vCx5/rFk9bPJy88mG9e+ar1BycgdK49/h6mVaZH6w1QAAMBra2pKdt678vXy8uT5RZX3AaufTTa0v2q95soFhFETkjFTk5123/6ZAfqKURMqI/RnvrUStr20LFm9PGlbufl6w0ZX3guNmphM3LPy6W0AgP5u0NBkl4MqI/1XPpG88MTv3g8+l3Ru+P16zUN+f21s3PTKh43664fPX61UqnwQf/xuSfuq5LmHK++LX342Wffyq1dMWsdVnoPROycT9uhfMzoAv9cgXVnoe5oHJ5P2qnwlSVdX0rWx8r15UGV5IyuVKm8SRu9c+blcrjz+zs7KhbXmQbW9pxsA0PeMmvj7qSQ3ey/QVHkv1OjvBYYMr4xQm7p/5eeuzqRzY+XfzYMaJ1gEANiaUikZt2vlK6m8H+zcWHlP1NT8u/eDDRCsvZbhYyq3W3lFZ0flPXGpqfJe0IfOoTHo2kGdNDUlTUOLrqI4pVLlk0oD/f1DS0tLZs+enZYWH1ECGIgGcjvgvUDlQoqLKQDAQFUq9d8pIWuleVDlayAbyH0iGtcA/28NUF8zZszI9ddfX3QZABREOwAAAAxk+kQ0ogafrAUAAAAAAAB6h6ANoI4WLFiQuXPnZsGCBUWXAkABtAMAAMBApk9EIxK0AdRRuVzOxo0bUy6Xiy4FgAJoBwAAgIFMn4hG5B5tAAAAbGF4U3NePPLoosvotuFNzUWXADSQ/nYOTJwHAaAogjYAAAC2UCqV0tqsywgMTM6BAEB3mToSAAAAAAAAquCjOQB1NGPGjNxwww2ZOnVq0aUAUADtAAAAMJDpE9GIBG0AddTS0pKZM2cWXQYABdEOAAAAA5k+EY3I1JEAdbR06dJ89rOfzdKlS4suBYACaAcAAICBTJ+IRiRoA6ijVatW5brrrsuqVauKLgWAAmgHAACAgUyfiEYkaAMAAAAAAIAqCNoAAAAAAACgCoI2AAAAAAAAqIKgDaCOmpqactBBB6WpyekXYCDSDgAAAAOZPhGNyKsZoI66urpy5513pqurq+hSACiAdgAAABjI9IloRII2AAAAAAAAqIKgDQAAAAAAAKogaAMAAAAAAIAqCNoA6mj06NE5/vjjM3r06KJLAaAA2gEAAGAg0yeiEQ0qugCAgWTKlCm55JJLii4DgIJoBwAAgIFMn4hGZEQbQB2tX78+Tz75ZNavX190KQAUQDsAAAAMZPpENCJBG0AdLVq0KMccc0wWLVpUdCkAFEA7AAAADGT6RDQiQRsAAAAAAABUwT3aAAAAAP5AuVxOe1dn0WX0yPCm5pRKpaLLaAj+/gBAdwnaAAAAAP5Ae1dndrjlx0WX0SMvHnl0Wptd6qkFf38AoLtMHQkAAAAAAABV8DEXgDqaM2dOFi5cWHQZABREOwAAAAxk+kQ0IiPaAAAAAAAAoAqCNoA6Wrx4cU477bQsXry46FIAKIB2AAAAGMj0iWhEpo6kV3V2JGueT1Y/m7StTDauq/y+Y32ybEEyakIyfIekJPJlgGhvb8/999+f9vb2oksBoADaARh4OjdW+kQvP5u0v7h5n2j5wmTkK32iUrF19pZyOVm7qvL41zy3+eN/6p5Kn3DkTknz4ELLBHpRx4Zk9XOVa0PtqzY/Dzz7cOU80DK6gc+DXZXz/8vPVtqDVz/+JfdV2oGROyZNrtIyQOgT0Yicwqm5cjlZtSRZcn/y3KNJuXPLdTo3JvNvrvx7UEsyaU4yZd+kdWx9awUAAKi1cjlZ+VTlAuqKxyoXWf9Q58bktzdV/j14WLLz3snkfZPhY+pZae9Z93KlT/jMg8mGrVxH69yYPHJL5d+lUjJut2TKfsm46Y17sR0GknJXsuLxynnwhSe2vk7nxuTB/6r8e+iIZPLcytfQEfWqsne1raycB5fNTzrWbbm8c2Py0E8q/y41JzvNrJwHx0x2HgTobwRt1NRLzyQLf1z5hE53daxLnr678jV+RrLnUUnLyN6rEQAAoLesfCp5+CeVC6zdtXFt8uSdla+dZiV7/HEytLX3auxNG9qTR25Nlj+UpNy9bcrlSiC54rFk2JhKn3Dc9F4sEuhVzy2qBOnrXu7+NuvXJI//Mln8q2TS3snMw5PBLb1XY29a93Ly0P9UzmndVe5Mnn2o8jVix2T20cnonXuvRgBqS9BGTXR2JI/fnjx5V7rdmdqaFY8lv3o6mXVE5ROdPsEDAAD0B50bkkdvS5bcu337ee6R5MWnKmHbhD37V5/ouUcqozO2NoKtu9auSu69tjKqZebhyaChNSsP6GUb1yYP31KZFrda5XJlJOwLi5PZb0vG71a7+npbuZw889vKhw06N1S/nzXPJ3denezyhmS3Q5NmV28B+jynarbbxnXJfddXRrPVQueGZOH/S15eXvkkY3/qWMLrmTx5ci6++OJMnjy56FIAKIB2ABrThvZKOLT6udrsb+O6yrSSq59Ndj+87/eJyuXKBy8X/7p2+1z6QLJqaXLAexpnGjloZGtfSu75z0pYXgvr11SuNc08PNnloNrsszeVuyqj2JbeX6sdVkY5r1qa7Pfu/ju6D7ZGn4hG1FR0AfRvHeuTe/+zdiHbqy29P1n435VOGzSKMWPG5IQTTsiYMWOKLgWAAmgHoPFsWJvcfU3tQrZXe/KuysiIvt4neuwXtQ3ZXtH2QuW5Xd9W+30DtbPu5eSu79YuZHu1R3+WPHFH7fdbS+Vy5TYqNQvZXuWlZyrX3TrW137fUBR9IhqRoI2qlcvJgzcmLz/be8d45sG+/4YKemLlypX59re/nZUre3DTDgAahnYAGku5nDzwg0og1Fuevmf7p6PsTUt7uc/W/mJy//eSrs7eOwZQvc6O5N7rkvWre+8Yi25Lnn249/a/vZ64o3L9qre8/GxllHNf/9AFdJc+EY1I0EbVnvltZc7snjj4fclhH6l8767Hf5msfr5nx4G+atmyZbnooouybNmyoksBoADaAWgsT9+TrFrSs22q6RM9+vNK4NTXrHu5MuKuJ6p5/C8vr0yhBvQ9j9/e8w8bVHMeeOgnyYY+OLp19fOV61Y9Uc3jX/F45TocNAJ9IhqRoI2qrFvd8w5VkgxpTVpGVr53V7krWfDDpKur58cDAADoDe0vVkZZ9FQ1faKujmTB/+tboxnK5WTBf1fusd0T1Tz+pHIhe40PYEKf8tKyyhS3PVXNeWDj2so90PqSrt9dryr38HpVtefBR26tXI8DoO8RtNXBihUrMm/evOy+++5paWnJ1KlTc95556WtrS1nn312SqVSLr/88qLL7JGn7up5h2p7rH4uWbGofscDAAB4LU/8phKA1cuqJcnKJ+t3vNfz0jPJyifqd7xyV7K4n95WoPPKq7Lxbe9I14/+e4tl5XI5HZ+5MBuPPSHlxU/Uv7g66dyQLH2gch+vV+65t2Ft8sz8ytSDja5RXwOP/zJJHT8A8NwjfStwf35R79yfc1s6N1SuxwHQ9wjaetl9992XffbZJ5deemmWL1+evfbaKxs3bsyXvvSlnHrqqVm4cGGSZL/99iu20B7o3FjMcPUl99X/mAAAAH9o47pk+cL6H7cv9YmKqOW5R34f0vQnTWeekUzfJZ1XfC3l51dstqzr+u+n/MCDaTrzfSntOr2YAnvZM79NbrsiWfjfv5tq9XfBTLmzMhroF1f07ftv1UIjvgbaV/X8diK1MNDPg8/Mr1yXA6BvEbT1ohUrVuT444/P8uXLc/7552fZsmW55557snz58lx88cW56aabcuedd6ZUKmXu3LlFl9ttzz6cdKyv/3FXPpW0uUcm/Vxra2sOPfTQtLb2cI4IABqCdgAaw7IF9R3N9ornH+sb04ZtaC8mGCl39c97FJUGD86gC85P1q1L59//w6bfl59ekq6r/j2lPfdI03tOKq7AXvT0PcmCH732NYSNa5MH/6t//m27qxFfA888UMxxly1IOuo4w9K2tK1MXnyq/sftWNf4wTSNT5+IRiRo60Wf/OQns2TJkpx77rm57LLLMnLkyE3L5s2bl3333TcdHR2ZPn16Ro0aVWClPbOygDcSr3jx6eKODbUwffr0fP3rX8/06dOLLgWAAmgHoDEUNoVj+Xcjggq2amnP70lUK0Vc2K6F0szd03TaKSnffU+6bvphyp2d6bzksqRcTvMF56fU3Fx0iTX30jPJw7d0f/2F/923pgWstUZ7DRR1bahzY/Ly8mKO/WpFnouKvC4HtaBPRCMStPWShQsX5pprrsn48ePz+c9/fqvrHHjggUmSfffdd9PvfvrTn6ZUKm3x1ZemlizyDU1feDMF26OzszNr1qxJZ2dn0aUAUADtADSG1c8Wd+y+0Ccq9PE/m5TreE+oWmo64/Rkt93S+bWvp+vL/5Lyw4+k6az3pzR1StGl9Yqn7unZ+uWu5Ol7e6eWvqJRXgNdncnqAkPRvnAefLnA8+DqPvD4YXvoE9GIBG295Oqrr05XV1fOOOOMjBgxYqvrDBs2LMnmQdsrvvzlL+dXv/rVpq9vfvObvVpvd3VsSNoLnL6xyA4d1MJDDz2Ugw46KA899FDRpQBQAO0A9H/r25L1a4o7fpEXd/tCDR3rkrUvFXf87VEaNCiDLvh0smFjum68KaW956Tp3e8suqxesb6tck+9nlq2oJhbVdRLo7wG2l6o3GOvKH3h2lCRNbStTDr7wPSZUC19IhrRoKILaFS33FKZH+GII47Y5jpLllTm/Nha0LbXXnvlTW96U83qmTlzZpqatj9XHT9qSi774K+3ufzg9yVDXmN63aGtv/9+2Ee2vd6GtuQ339ry908+tiwnTTmom9VC7zvrrLN6tP6yZcuSJDfffHPuvbf7H9e86qqrenQc6Kuu/OSTaWpqTldnZ6ZM2aXocqAmetIWaAeg/5sybs9cdOZPtrrs9fpDyfb3iebf/0je+Zkju1lt7/jc6Tdl1wlb9mOT2vUJk20/B28/6oQ8tryHw6WqUB4yJLniy7XdaWtrMnhw0tGR0kFvSKkG/fRXmzVzVkobir8CP3f6kfn0O/+9x9t1dSRHHfbOLFp2Vy9U1TO98vdPevU1UK+//5xpf5QL3v2drS6rx3nw1h//Im//2GndrLZ3fPHP7soOIyZudVlvXxtLkgP2fWNeWL20m9VC79Mnor/q6vr9fOiHHXZYj16TryZo6yVPPlmZtH+XXbZ+EbGjoyO33357kq0HbbX2yglsu60f/pqLh7QmLSNfc5UkSampe+ttsV2pOUuXeiNB39He3t6j9detW7fpe0+29bqnUZRT3vTd65pG0ZPzuXYA+r/hmbDNZd3tDyXV94lSbir8nFDuKm1zWW/3CZPkxZWr6vMctAzN4Brurlwup/MLX0w6NibTpqbrO99N0+F/lNLOk2p2jGeWPZOsK35I2Ixxa6vetu3ltYW/xpPU/O+f9P5roF5//ymjXt7msnqcBzs7iu9LlLLte+rV4zz4woqVWbqiD/w/gd/RJ6IRPPts9cOVBW29pK2tLUmydu3W31xec801WbFiRUaOHJldd911i+WnnnpqVqxYkXHjxuWEE07I3/3d32X8+PFV1zNp0qSajGgbN3KH11y+oe21tx/aWnkjUe6qTCXR0/10lTsyefLk16kS6mf48NcOn/9QS0vLpu892dbrnkZRSmnTd69rGkVPzufaAej/dhg3ZpvLXq8/lGx/nyilzuLPCaWubS6qVZ/wtfY1ZuzoTN7Q+89BeciQ1PI2VF3fvyHl+x9I059+IE2HvCkd53winV/4Ypovuzil0rbDy57YedLOfWJE27ARQ6redvioocW/xlP7v3/S+6+Bev39R4/ZdjpUj/Ng06Di3xt1lTu2uay3r40lydjxOyRDi/9/Aq/QJ6K/6urq2jRIacKEbX+g7vWUyuX+ehvhvm2vvfbKwoULc/nll+ecc87ZbNmyZcty4IEHZtmyZTn00EPzi1/8YtOye++9N1dffXX+6I/+KCNGjMivfvWrfP7zn8+0adNy1113bToRdUdbW9um+8OtWbMmra2vM3a/Gzo7kp9+qfJmoBqHfaTyaZ11q5NfXNHz7UfvnBz03uqODb2hp/NJz58/PyeffHKuvfbazJkzp9vb7bnnnj0tDfqkn3whSTlJKTnq/KKrgdroSVugHYD+b+O65GeXV7/99vaJxk1P9j+5+uPXwv0/SJ5/tLptt/fxJ8lbPpoM3fqt0GuqrbMjO9zy45rsq7x0aTo+em5K03dJ8z98IaXm5nRefU26/u0bafrYR9L8rhNrcpwXjzw6rc3Ff6a6Y31y278knRt7tt3gYZXXSB94CDX9+yf1eQ3U6+/f9kLyq3+rfvvtPQ9MmpPMeXv1x6+FO7+dvFTl5FHb+/hLTckRn6wEjtBX6BPRX9UqQ6ntZOBsctRRRyVJLr744jzyyO/vAHznnXfmiCOOyIoVK5Ik++2332bb7b///rnkkkty3HHH5a1vfWv+8i//Mt/+9rczf/78XH311XWrf1uaByWt1Q+s224jqw+VoU+YNWtWbr/99syaNavoUgAogHYA+r/BLcmw0cUdvy/0iUYVWMOQ1vqEbLVU7upK56V/n3R1pfmCT6fUXJlyrumUk1OaNTNdV16V8jM1ut1DHzFoaDJxr55vt/PefSNkq7VGew0M3yFprvW8mj3QF86DRdYwYryQjf5Nn4hGJGjrJfPmzcu4cePy9NNPZ86cOdlnn30yc+bMHHzwwdltt91y5JGVm1d35/5sxx13XFpbW3PXXcXfDDgptlNV5LGhFgYPHpyxY8dm8OACeyUAFEY7AI2hyAusfaFPNNAff091XXt9ygsWpukD70tp2rRNvy81N6f5M59OujrT+YUvptEmHJp2QM/CgOYhyZT9eq2cQjXaa6DUlIzcqbjj94XzQJE19IWgEbaHPhGNSNDWS6ZMmZLbbrstxx57bFpaWvLEE09k7NixueKKK3LTTTdtGuXWnaDtFbWas317jd/ylnJ1USolY3cp5thQK0899VQ+/vGP56mnniq6FAAKoB2AxjB+t2KO2zQo2WFqMcd+tTGTixvNMq6g/mi1yk89la5vfDOl2Xum6aR3b7G8NH2XNL3vjJQf/G26vn9DARX2ntZxyT7HJ6Xm11+3aVCy7zuLHS3aWxr1NTCuoPPg4GF9I2gbO71ynaoIRbVBUCv6RDQiA4170ezZs3PjjTdu8fs1a9bkiSeeSFNTU/bee+/X3c8NN9yQtra2HHzwwb1RZo+N370yVcf6NfU97o67V+awhv5s9erVufXWW7e4dyMAA4N2ABrDhD2SR39auV9bvY87eFh9j7k1g4ZU7pG05L76Hrd5cDKpiukIi1SaNi2Db/rBa67TfPqpaT791DpVVF87zkgOODl5+H+SNSu2vs7ICcmeRyWjJ9W3tnpp1NfA5L2Tx3+ZlDvrfNy5fWPaxJaRletj1d6vslpDRyTjZ9T3mFBr+kQ0oj7QNA088+fPT7lczqxZszJ8+PDNlr3vfe/LbrvtlgMOOCAjRozIr371q1xyySXZb7/9ctpppxVU8eaamipvbB7/ZX2P26hTSAAAAP1L8+DKvaSerPPs/n2pTzRlv/oHbRP3qtz7i/5lh6nJGz+QvLQ0eWZ+smxBJZxpGpQceGoyamJxI4Oo3pDWZMKsZPnCOh60VLke1VdM3a/+QdvkuZXrcgD0LU7NBXjwwQeTbH3ayDlz5uR73/te3v/+9+ftb397rrzyynzoQx/KT3/60wwZMqTepW7T1APqewPqcdOTHaa97moAAAB1sctB9R1dttOsvjXiZ8T4yqi2ehk0NNn1TfU7HrVVKiVjpiR7/Uky5Hf/bwa3VF7TQrb+a7c313d02dT9+9b0ojtMq1yvqpehI5NpB9bveAB0n6CtAK8VtP3lX/5lHnzwwbz88svZuHFjFi9enL//+7/P6NF96J1EKm+IZ7+tPsdqHpLM/hNvvgEAgL5jSGuy5x/X51iDh1Wm1utrZh1Rvw9gznqrWwlAXzN8h2T3t9TnWMPGJLsfVp9jdVepVLk21lynz8XPPtqoXoC+StBWgNcK2vqT8bslk3v4EDa0JetWV753155/rENF45gwYUIuvPDCTJjQB+7eDEDdaQegsUzYs/LVE9X0iWa/LRky/PXXq7fBLZUPRaYHH4qs5vHvuHsy6fVvbw4UYOoBPZ+BqKfngVJTMueY+gVaPdEyqucfuqjmPDh538p1OGgE+kQ0IvdoK8Att9xSdAk1s8cfV94YPL+oe+v/5ls92//ub6nvdCTQ28aPH5+zzjqr6DIAKIh2ABrPnGOSjWuTlU92b/2e9on2ODLZaWbP66qX8btWgsCF/6976/f08Y+Zkux9rBlOoK8qlZJ9T0zu/o9k9bPd26ZH54FSsvc7KueCvmrSnGT9mmTRbd1bv6fnwR13r1x/g0ahT0QjMqKN7dLUlOxzfM8/xdkdM9+aTH9j7fcLRXrppZfyox/9KC+99FLRpQBQAO0ANJ6mQcm+76pcCK2p301JNvWAGu+3F0zeJ5nzjsqok1oaOz3Z/91J8+Da7heorUFDkwNPqX0Y1tSczD2hd6451dr0N1auY9XaxNmV625NruDSQPSJaERO02y3pubKJwxn/0lthvEPG5MceFqyyxu2f1/Q1yxZsiSf+tSnsmTJkqJLAaAA2gFoTM2DkrknVkafNdVg3pjWcclB700mz93+fdXLpL2Sg9+XjNhx+/fVNCiZefjvQrY+OFUcsKVBQ5MD3pPsdmhtQvdRE5ODz+zbI3r/0C5vSA48tXJda3s1D6lcZ5vzjsp1N2gk+kQ0IlNHUhOlUuVTjON2SR79WfLcI0m53LN9NA9Jpuyb7PZmn1gEAAD6l1KpMvps3G7Joz/t/vT6rzZoaDJ1/2T6myrhXX8zcqdK2PbEb5Kn76lMqdlT43ZNZh2RtI6tfX1A72pqTnY7pDLC99Fbk5VP9XwfQ4YnuxyUTD2wf47i2mFq8qb3J4//Kllyf9K5oWfbl0rJTrMqHzZoGdU7NQJQe/3wrTt9WcuoypD2dauTpQ8kzz6UtL+47fVLTZXO2M57JxP3Sgb5tCIAANCPDR+T7PvOZO1Lv+8TrX2NmZFKTZWRGzvvk0zcs/9/6PCVC+27HJQ893Cy9MHk5WVJV+e2t2kZlUzYI5m8b+X5A/q3kTsmB5yStL1QCZueezRZv3rb6zcNSkZPqpwDdprZ/0dwNQ+pBGW7HpIsX5A889tk9XNJuWvb2wzfoTJF5uS5ScvI+tUKQG0I2ugVLSOTGYdWvjauq7yhaF+ZdG6sdCSbhyQjxlemFemPn9QEAAB4LcNGJ7u/pfK1cV2y+tmkbWXS1VHpEw0akozYqdIv6u8XlbemeVAyaU7lq6uzcsF99XNJx/rKxeamQZULyyMnJEOGFV0t0Btax1Wm1N3jyGRDW/Lyc8naVa86D7Yko3ZKho/rn6PXXs+gIcmU/SpfnR3JmueTNSsq58GUKx+sGD42GTWhMqIZgP5LxEGvG9ySjJ1W+YKBrqWlJbNnz05LS0vRpQBQAO0ADEyDW5Kxu1S+BqKm5spMJiN3KroSoChDWpPxuxZdRXGafzdqb/SkoiuB4ukT0YgEbQB1NGPGjFx//fVFlwFAQbQDAADAQKZPRCNqwIHZAAAAAAAA0PsEbQB1tGDBgsydOzcLFiwouhQACqAdAAAABjJ9IhqRoA2gjsrlcjZu3JhyuVx0KQAUQDsAAAAMZPpENCL3aAMAAAD4A8ObmvPikUcXXUaPDG9qLrqEhuHvDwB0l6ANAAAA4A+USqW0NrtsMlD5+wMA3WXqSAAAAAAAAKiCj+YA1NGMGTNyww03ZOrUqUWXAkABtAMAAMBApk9EIxK0AdRRS0tLZs6cWXQZABREOwAAAAxk+kQ0IlNHAtTR0qVL89nPfjZLly4tuhQACqAdAAAABjJ9IhqRoA2gjlatWpXrrrsuq1atKroUAAqgHQAAAAYyfSIakaANAAAAAAAAqiBoAwAAAAAAgCoI2gAAAAAAAKAKgjaAOho/fnw+9KEPZfz48UWXAkABtAMAAMBApk9EIxK0AdRRqVTKkCFDUiqVii4FgAJoBwAAgIFMn4hGJGgDqKPnn38+X/7yl/P8888XXQoABdAOAAAAA5k+EY1I0AYAAAAAAABVELQBAAAAAABAFQRtAAAAAAAAUAVBG0AdjR49Oscff3xGjx5ddCkAFEA7AAAADGT6RDSiQUUXADCQTJkyJZdccknRZQBQEO0AAAAwkOkT0YiMaAOoo/Xr1+fJJ5/M+vXriy4FgAJoBwAAgIFMn4hGJGgDqKNFixblmGOOyaJFi4ouBYACaAcAAICBTJ+IRiRoAwAAAAAAgCoI2gAAAAAAAKAKgjYAAAAAAACogqANAAAAAAAAqjCo6AIABpI5c+Zk4cKFRZcBQEG0AwAAwECmT0QjMqINAAAAAAAAqiBoA6ijxYsX57TTTsvixYuLLgWAAmgHABioOjuSNc8nXZ2Vn7s6f/9vAAYOfSIakakjAeqovb09999/f9rb24suBYACaAcAGCjK5WTV0mT5guSl5UnbiqTc9fvlG9cmt34pGTE+GT0xmbR3MmpiUioVVzMAvU+fiEYkaAMAAACgJsrl5JnfJk/fnaxZ8Trrdiarn618Lbk/GTkhmXZgMnG2wA0A6D8EbQAAAABst/YXkwX/L1m1pLrtVz+bzL85WTY/2etPkpZRta0PAKA3uEcbAAAAANtl+cLk19+oPmR7tZVPJr+6Knnu0e3fFwBAbxO0AdTR5MmTc/HFF2fy5MlFlwJAAbQDADSipQ8kv70p6eqo3T47NyQP3lAJ8ABoHPpENCJTRwLU0ZgxY3LCCScUXQYABdEOANBonn04WfjfvbPvcrkyleSglmT8rr1zDADqS5+IRmREG0AdrVy5Mt/+9rezcuXKoksBoADaAQAaybrVPQ/ZDn5fcthHKt+7o1xOFvww2dDe8/oA6Hv0iWhEgjaAOlq2bFkuuuiiLFu2rOhSACiAdgCARlEuV0K2jvU9225Ia9IysvK9uza0Jw/f0rPjANA36RPRiARtdbBixYrMmzcvu+++e1paWjJ16tScd955aWtry9lnn51SqZTLL7+86DIBAAAAumXF48kLi+t3vGcfSl58un7Hq7WucvLI8uR/5ic/fCD56UPJcy8XXRUAUAvu0dbL7rvvvrz97W/P8uXL09ramr322ivPPPNMvvSlL+Wxxx7bNER2v/32K7ZQAAAAgG56+t5ijrnD1Pofd3t0lZPbH0l+/nDy/OrNl33/7mTWxOTovZOZE4qpDwDYfka09aIVK1bk+OOPz/Lly3P++edn2bJlueeee7J8+fJcfPHFuemmm3LnnXemVCpl7ty5RZcLAAAA8LraX0xWPlH/4z6/KFm/pv7HrVZnV/Kt25Pr7toyZHvFI8uTf/6f5NeP1bc2AKB2BG296JOf/GSWLFmSc889N5dddllGjhy5adm8efOy7777pqOjI9OnT8+oUaMKrBSol9bW1hx66KFpbe3BDQkAaBjaAQAawbOPFHPcclfy3KPFHLsa3787uefJ11+vq5xc8+tk/tLerwmgaPpENCJBWy9ZuHBhrrnmmowfPz6f//znt7rOgQcemCTZd999t1j2ve99L29+85vT2tqa0aNH59BDD838+fN7tWag902fPj1f//rXM3369KJLAaAA2gEAGsHLyws89rPFHbsnXliT/KIHgWQ5yY33JeVyb1UE0DfoE9GIBG295Oqrr05XV1fOOOOMjBgxYqvrDBs2LMmWQduXvvSlnHLKKTnssMNyww035Oqrr85RRx2VtWvX9nrdQO/q7OzMmjVr0tnZWXQpABRAOwBAI1hdYNhV5LF74pePVsKznli2Kln8fG9UA9B36BPRiARtveSWW25JkhxxxBHbXGfJkiVJNg/aHnvssVxwwQX54he/mEsuuSR//Md/nHe84x35m7/5m7zhDW/o3aKBXvfQQw/loIMOykMPPVR0KQAUQDsAQH/X1Zmse7m447e/WNyxe+K+p6rb7t5uTDUJ0J/pE9GIBhVdQKN68snKO6Nddtllq8s7Ojpy++23J9k8aLvyyiszePDgfOhDH6ppPTNnzkxTk1wVau2ss87q0frLli1Lktx888259957u73dVVdd1aPjQF915SefTFNTc7o6OzNlytbbSOhvetIWaAcA6O9ahozIv3x82xdHD35fMuQ1brsztPX33w/7yLbX29CW/OZbW/6+qyOZMmVKN6stzon/56EMHrr1GY5ey7f/4/s5713n9kJFAL1Hn4j+qqura9O/DzvssB69Jl9N0NZL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0UfnpJNOSpJMnz49p59+em655ZaCKwMAAAAAAOibTB1JkuSwww7L7bffngceeCBJ8vjjj+fmm2/OscceW3BlAAAAAAAAfZMRbSRJzj///Kxbty4HHHBASqVSOjo68qEPfSj/9//+36JLAwAAAAAA6JOMaCNJcu211+YrX/lK/u3f/i333HNP/vM//zM//OEP89nPfrbo0gAAAAAAAPqkUrlcLhddBL2jra0tI0aMSJKsWbMmra2t21x32rRpOeecc3LhhRdu+t03v/nNfPCDH8zq1avT0tLS6/UCAAAAAADUQ08ylNdiRBtJKi+opqbNXw7Nzc0pl8uRxQIAAAAAAGzJPdpIkrzzne/MZZddlt133z37779/Hn744Xz2s5/N29/+9gwbNqzo8gAAAAAAAPocQRtJki996UsZO3Zszj///DzzzDPZaaedctxxx+Wiiy4qujQAAAAAAIA+yT3aGlit5hd9tY6Ozmzo6MjwlqHbvS8AAAAAAIAiuEcbhbjzgYdy8T9/J7ff/duiSwEAAAAAACiUoI1u29jRkVt/dV/Wb9iY5iYvHQAAAAAAYGBrmLSkVCqlVColSf7rv/4rb3nLWzJq1KiMHz8+J598ch577LFN69544405/PDDM2bMmIwaNSonnnhiHn300W3ue/369fnHf/zHvPnNb86YMWPS0tKSPfbYIxdccEFWrFix1W3uuOOOXHjhhTnooIMyceLEDB06NJMnT84pp5ySO++8c5vHuvnmm/OOd7wjO+20UwYPHpxx48Zl9uzZ+eAHP5jbb7+9ymenNu564OG8vKYto0e25g377FFoLQAAAAAAAEVrmHu0vRKyXX755Tn33HOz8847Z8KECXnooYeydu3aTJ48Offee2++/e1v51Of+lQmTZqUiRMnblo+ceLEPPDAA9lxxx032++zzz6bt7/97bn33nvT1NSUqVOnZtSoUXnkkUeyfv36TJs2Lbfeemt22223zbbbfffd89hjj2Xs2LGZNGlShgwZkqeeeiovvPBCBg0alO9+97s56aSTNtvmK1/5Ss4555wkybhx47LLLrtk7dq1efrpp7NmzZp85CMfyb/8y790+zmp5T3aNnZ05NIrrsnLa9ryzrcdljftv1fV+wIAAAAAAChSrTKUhgvahg8fnn/+53/O+9///iTJypUrc8wxx+TOO+/Mcccdl//5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TJJccsklufDCCzNo0KCUSqXMnTu34Gprr1xOFv08efLOLZeteT555JbK8r3+JJk4u/711UvTmWek69d3pPOKr6V04AEp7fj70T1d138/5QceTNMHz2rIkI2B44ADDsgPf/jD7LTTTpt+9/Of/zyXX355vve976Wjo2Ob244YMSJnnnlmzj333Oy1115pamrK+eefn/e+972ZNGnSpvWEbAAAAABAX2PqyF70yU9+MkuWLMm5556byy67bFPIliTz5s3Lvvvum46OjkyfPj2jRo0qsNLaK5eTh3689ZDt1bo6kt/elDzz2/rUVYTS4MEZdMH5ybp16fz7f9j0+/LTS9J11b+ntOceaXrPSdveAQ2ltbU1hx566KYRXI3goIMOyq233ropZHv++efznve8J4cffnj+8z//8zVDtiRZs2ZN/vmf/zn77LNPLrjggqxbty5JhGwAAAAAQJ8naOslCxcuzDXXXJPx48dv8+LwgQcemCTZd999N/v94sWLc8IJJ2TkyJHZYYcd8v73vz8vvPBCr9dcS88+VJkusrsW/nfS/mLv1VO00szd03TaKSnffU+6bvphyp2d6bzksqRcTvMF56fU3Fx0idTJ9OnT8/Wvfz3Tp08vupSamD59en74wx9u+rDAz3/+8+y111659tpre7yvrq6uXHbZZVvcs3L58uX5h3/4h1qUCwAAAABQU4K2XnL11Venq6srZ5xxRkaMGLHVdYYNG5Zk86Bt9erVOeKII7JkyZJcffXV+epXv5rbbrstxx13XLq6uupSey08dU/P1i93JUvu751a+oqmM05PdtstnV/7erq+/C8pP/xIms56f0pTpxRdWl10bGjP2tUrtvo1kHR2dmbNmjXp7OwsupTtViqV8q//+q8ZN25ckuTWW2/NMccckxUrqv+bfuYzn8lnPrP5vfwmTpyY//t//+921QoAAAAA0Bvco62X3HLLLUmSI444YpvrLFmyJMnmQdtXv/rVLF26ND//+c8zbdq0JMmUKVPy5je/OTfccEPe+c53druGcrmc9vb2JMnw4cNTKpV6+jCq8vKzycvLer7dM79NZhyWNDfoq7I0aFAGXfDpdHziz9N1400p7T0nTe9+Z9Fl1c2vr/tcfn3d54ouo3APPfRQTj755Fx77bWZM2dO0eVsl4985CM58sgjkyRPPvlk3vnOd2bt2rVV7+8zn/lMLr300k0/f/GLX8zHPvaxtLS05FOf+lSuv/76/PKXv9zuugEAAAAAaqVBI43iPfnkk0mSXXbZZavLOzo6cvvttyfZPGi78cYbc9hhh20K2ZLkkEMOyW677Zb/+q//6lHQ1t7evmk03aRJk9LUVJ8BjG/Z69Sc/bYv9Hi7jnXJwfu9Jc+uWtwLVfVMeciQ5Iov137Hra3J4MFJR0dKB70hpRr+TWbNnJXShg0121/z4GF510WP1mx/ex/x4cx843u2uux7f3d0TY4xa+bMdG6sPuipxllnndWj9Zctq6TQN998c+69995ub3fVVVf16Djb6/VG0La0tOSiiy7a9PPZZ5+dl19+uerj/WHI9so92ZYuXZrLLrssTU1NueSSS3LYYYdtcx8zZ86s23kOAAAAAGgcEydOzF133VXVtoK2XtLW1pYk2xzdcc0112TFihUZOXJkdt11102/X7BgQd7zni3DiDlz5mTBggVV1/PKxf16WLvL+qq3fenF1Vn6zNIaVlOllqEZXONdlsvldH7hi0nHxmTa1HR957tpOvyPUtp5Uk32/8yyZ5J11T/3f2jQ0OE121eSjJk4M9P2Pqqm+/xDzyx7Jh3r23v1GH/olVGj3bVu3bpN33uy7dKlfeD/xauccsopm6aMvPrqq/M///M/Ve9rWyFbUhnV9qd/+qeZM2dODj300MydOzcPPLD1G0DW8zwHAAAAAJAI2nrNxIkT8+KLL+aee+7JIYccstmyZcuW5YILLkiSzJ07d7MpHV988cWMGTNmi/2NHTs2Dz/8cNX11HNE2+CWnk9RWS6XUyqV0jpqaCaXJvdCVT2sZ8iQPF/jfXZ9/4aU738gTX/6gTQd8qZ0nPOJdH7hi2m+7OKaTOu586Sdaz6irb/ZedLOdR/RNnx4zwLJlpaWTd97su3kyfX9f9HV1fWawdXHP/7xTf/+x3/8x6qP81oh2yt1XH755fnnf/7nTcf96Ec/utV91fM8BwAAAAA0jokTJ1a9raCtlxx11FFZuHBhLr744hx99NGZNWtWkuTOO+/MmWeemRUrViRJ9ttvv7rU8+ijj6a1tbUux9rQntx2RVLu7P42pVIpI3ZM7ltwR+p0K7nX1NbZkR1u+XHN9ldeujRdV16V0h6z0nTKySk1N6fpfWek69++ka7v35Dmd5243cd45NFH0lrDG9yt70guvKZmu6uLRx59NEPrfFZ76KGHerT+/Pnzc+WVV+Yd73hHj+7R9uppGuuhra1t09Szf2j8+PF54xvfmCS5//77c8cdd1R1jNcL2V7xrW99K5deemlGjBiRY489dpv7q+d5DgAAAAAgSXz0v5fMmzcv48aNy9NPP505c+Zkn332ycyZM3PwwQdnt912y5FHHplk8/uzJckOO+yQVatWbbG/lStXZuzYsfUofbsNGZ5M2KPn203ZL30iZKu1cldXOi/9+6SrK80XfDql5uYkqQRus2am68qrUn7GlHcDxaxZs3L77bdvCt/7owMPPHDTv6udMrK7IVuSrFmzJnfeeWeSZMqUKZkwYUJVxwQAAAAAqDVBWy+ZMmVKbrvtthx77LFpaWnJE088kbFjx+aKK67ITTfdlEceeSTJlkHb7Nmzt3ovtgULFmT27Nl1qb0WdjkoaerByKJhY5KJ/efh9UjXtdenvGBhmj7wvpSmTdv0+1Jzc5o/8+mkqzOdX/hiyuVygVVSL4MHD87YsWMzeHCt7wJYP68O2u6+++4eb9+TkG1rx3n18QEAAAAAiiRo60WzZ8/OjTfemNWrV2f16tW544478uEPfzhtbW154okn0tTUlL333nuzbY477rj84he/yJIlSzb97o477shjjz2W448/vt4PoWojd0z2OT5pan79dYeOSPY/KRk0pPfrqrfyU0+l6xvfTGn2nmk66d1bLC9N3yVN7zsj5Qd/m67v31BAhdTbU089lY9//ON56qmnii6latNeFRgvXLiwR9tWE7Il2ewDCFOnTu3RMQEAAAAAeot7tBVg/vz5KZfLmTVrVoYPH77Zsg9/+MP5p3/6p5x44on5m7/5m6xbty7z5s3LwQcfnBNP3P77eNXTjjOSA05JFv08WbV0y+WlpmTH3ZNZRyQtI+tfXz2Upk3L4Jt+8JrrNJ9+appPP7VOFdXflL3emvO+9dqj9V5veSNZvXp1br311pxzzjlFl1K1n//850mSlpaWPPvss93e7rjjjqsqZEsq98K76qqrsnbt2h6HewAAAAAAvUXQVoAHH3wwyZbTRibJqFGjcsstt+S8887LaaedlkGDBuW4447LF7/4xTQ19b8BiGMmJ284PVn9fLJ8YfLkb36/7LAPV0azAf3Ld77znXznO9/p8XY//OEPc/XVV+f000/vUciWJL/6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TzzxhKQLJdvQoUM1depUj/+dq1q1qqZOnaqgoCDXc4GBgRozZowv4gIAAAAA4HMUbaVk4cKFcjgcGjx4sMLCwordJyQkRFLRou31119X//791bZtWy1dulQLFy5Uly5dCt0sHkD5tGvXLrVs2VK7du0yOgoAAF4JDw/XO++843o8duxYffDBBx6PV7VqVa1Zs8Z17+Iff/xRJ0+elCTddddduvXWW72JCwAAAABAqQgwOsC1au3atZKkTp06XXaf9PR0SYWLtv3792v8+PF65ZVXNGrUKNfzPXr0KKWkAAAAgPueeuop1apVS5K0Zs0avf766x6P9duS7eI92Vq1aqX33ntP0oX7wK1YsaLQspIAAAAAABiNoq2UHD58WJJUu3btYrcXFBRow4YNkgoXbXPmzFFgYKAeeOABn+ZJSEiQ2Wz8BMY5jx6W2WyRw25XXFzxrw1QngwbNsyt/TMzMyVJK1as0HfffVfi4+bNm+fWecqa2+4dI1tYJWVmZSouLq7I44qgor8GXH/R663orwHXX/av3+FwXHZbSEiI7r//fknS2bNnXd974nIl2969e7V3714NGjRIPXv2VI0aNXT77bfr73//+2XHKiu/8wIAAAAAypfo6Ght2rTJo2Mp2kpJbm6uJF12ucdFixYpOztb4eHhqlOnjuv5r776Sg0aNNB7772nKVOm6OjRo0pISNDTTz+tQYMGeZzn4pv7RnPK6fqakZFhcBrAe3l5eW7tf/bsWddXd44t7z8vjv/eq8dhtysjI6PI44qgor8GXH/R663orwHXX76vf9CgQapSpYqkC0umX/yQmbuuVLJdNH36dPXs2VOS9PDDD1+xaCsrv/MCAAAAACoOirZSEh0drV9//VVbtmxR69atC23LzMzU+PHjJUkpKSkymUyFtmVkZOgPf/iDpk+frpo1a+rdd9/VXXfdpWrVqqlLly4e5YmJiSkTn+41yeT6Ghsba3AawHuhoaFu7W+1Wl1f3Tm2vP+8mC0W19fY2NgijyuCiv4acP1Fr7eivwZcf9m/fofDcdni6tIPgL311lsejV+Skk2S1q9frx9++EGNGzdW27ZtVbNmTR09erTYMcvK77wAAAAAgPIlOjra42Mp2kpJly5dlJaWpunTp6tr165KTEyUJG3cuFFDhw5Vdna2JLneWLjI4XAoJydHCxYscN3w/Xe/+5127typP/3pTx4XbXv37pXNZvP4enxlzUuSnBfeVLp4jzqgPNu1a5db++fn52v48OEKDw9XYGBgiY+bMmWKu9HKlKmz3tepnFzFRMcoPT29yOOKoKK/Blx/0eut6K8B11/2rz83N1dhYWHFbmvRooWkCzOuPVlao6Ql20WffvqpGjduLElq3rz5ZYu2svI7LwAAAACg4uDjnqVkwoQJqlq1qo4ePark5GQ1adJECQkJatWqlerWravOnTtLKnx/NkmKjIyUpEKFmslkUpcuXfTDDz/47wIAlIrAwEBFRka6VbIBAFCW1KtXT5UrV5Ykbd682e3j3S3Zfnue5s2bu31OAAAAAABKC0VbKYmLi9P69evVs2dPWa1WHTp0SJGRkZo9e7aWL1+uPXv2SCpatCUnJ192zIv3dgJQfh05ckQjR47UkSNHjI4CAIBHGjZs6Pp+27Ztbh3rSckmSVu3bnV9n5SU5NY5AQAAAAAoTRRtpSgpKUnLli3T6dOndfr0aX377bd68MEHlZubq0OHDslsNruWwLmob9++kqR//etfruccDodWr16tli1b+jU/AN87ffq01q1bp9OnTxsdBQAAjxQUFOjAgQPKzMxUVlZWiY+LiIjwqGSTpF9//VU//fSTDh8+rF9//dXT6AAAAAAA+Bz3aDPAjh075HQ6lZiYqNDQ0ELbevfurXbt2unBBx/UL7/8olq1aumdd97Rjh07tHr1aoMSAwAAABd89tlnqlevntvH5eTkaOfOnUpNTXWrZJOkEydOqHr16m6fEwAAAACA0kbRZoDt27dLKrpspHThfmxLly7VxIkT9cc//lGnTp1S06ZNtWLFCtd93QAAAIDyxm636+6779bPP/+sWbNmlbhkAwAAAACgLKNoM8CVijZJqly5smbPnq3Zs2f7MxYAAABQqux2u8aMGWN0DAAAAAAAfIZ7tBngakUbgGtX9erVNXHiRJa/AgAAAAAAAIBrADPaDLB27VqjIwAwSFRUlIYNG2Z0DAAAAAAAAACADzCjDQD86OTJk1q1apVOnjxpdBQAAAAAAAAAgJco2gDAj9LT0zV27Filp6cbHQUAAAAAAAAA4CWKNgAAAAAAAAAAAMADFG0AAAAAAAAAAACAByjaAAAAAAAAAAAAAA9QtAGAH1mtViUlJclqtRodBQAAAAAAAADgpQCjAwBARVKvXj0tWbLE6BgAAAAAAAAAAB9gRhsAAAAAAAAAAADgAYo2APCjnTt3KiUlRTt37jQ6CgAAAAAAAADASxRtAOBHTqdT+fn5cjqdRkcBAAAAAAAAAHiJog0AAAAAAAAAAADwQIDRAQAAAACUPaGhocrJyfHZeC/O/rtO5eapki1U40cMLPLYF0JDQ30yDgAAAAAAJUXRBgAAAKAIk8kkm83ms/GCgq0KyrcrKNgqm81W5DEAAAAAAOURRRsA+FG9evW0dOlS1axZ0+goAAAAAAAAAAAvUbQBgB9ZrVYlJCQYHQMAAAAAAAAA4ANmowMAQEWSkZGhSZMmKSMjw+goAAAAAAAAAAAvUbQBgB+dOHFCixcv1okTJ4yOAgAAAAAAAADwEkUbAAAAAAAAAAAA4AGKNgAAAAAAAAAAAMADFG0AAAAAAAAAAACAByjaAMCPoqKi9MADDygqKsroKAAAAAAAAAAAL1G0AYAfmUwmBQUFyWQyGR0FAAAAAAAAAOAlijYA8KOff/5Zs2bN0s8//2x0FAAAAAAAAACAlyjaAAAAAAAAAAAAAA9QtAEAAAAAAAAAAAAeoGgDAAAAAAAAAAAAPEDRBgB+FBERod69eysiIsLoKAAAAAAAAAAALwUYHQAAKpK4uDjNmDHD6BgAAAAAAAAAAB9gRhsA+NG5c+d0+PBhnTt3zugoAAAAAAAAAAAvUbQBgB/t27dP3bp10759+4yOAgAAAAAAAADwEktHAsVwOp3Kc9iNjuGWULNFJpPJZ+M5ndL58vUSKMgi+fAlAAAAFZjT6VReXp7RMdwSGhrq098HAQAAAABXR9EGFCPPYVeVtauNjuGWXzt3lc3iux/p83Zp4iKfDecX0wdIwfytBgAAfCAvL09hYWFGx3BLTk6ObDab0TEAAAAAoEJh6UgAAAAAAAAAAADAAxRtAAAAAAAAAAAAgAdYZA0A/Cg5OVlpaWlGxwAAAAAAAAAA+AAz2gAAAAAAAAAAAAAPULQBgB8dPHhQAwcO1MGDB42OAgAAAAAAAADwEkUbAPhRXl6etm3bpry8PKOjAAAAAAAAAAC8RNEGAAAAAAAAAAAAeICiDQAAAAAAAAAAAPAARRsAAAAAAAAAAADgAYo2APCj2NhYTZ8+XbGxsUZHAQAAAAAAAAB4iaINAPyocuXK6tOnjypXrmx0FAAAUM7UrFnT6AgAAAAAgN8IMDoAAFQkx48f18qVK9W9e3dFRkYaHQcAAJSyuLg4tWrVSi1atFCTJk0UHh4uk8mk3NxcpaWlafPmzfrPf/6jffv2XXGc66+/XmvWrNH8+fP12GOP+Sk9AAAAAOBqKNoAwI8yMzM1ZcoUpaamUrQBAHCNslgs6tOnj37/+9+ra9eul92ve/furu//85//6K233tKiRYt09uzZQvtdLNkiIyM1duxY7du3T2+99Vap5QcAAAAAlBxLR/pBdna2JkyYoPr168tqtapmzZoaPXq0cnNzNXz4cJlMJr355ptGxyxVTqd0MlOS8+ITRqYBAAAASkf79u21a9cuLVmy5Iol22+1atVK8+bN0+HDh9WvXz/X85eWbJL0xRdfaP78+T7PDQAAAADwDEVbKdu6dauaNGmiF198UVlZWWrUqJHy8/P1+uuva8CAAUpLS5MkpaamGhu0lBSckw5vkr56V9r4fuFtmxZKWWkXSrhrmX3OPOXf3EOOVf8qss3pdKrg8YnK79lHzoOH/B/OD9J3/luvDTFp8/KZl93ntSEmfTqzlx9TAQAA+JbVatVrr72mzz//XPXr13c9v3fvXk2ZMkV9+/ZVrVq1ZLVaFRwcrOjoaHXr1k1PPvmktmzZ4tr/uuuu04cffqhFixapY8eORUq2Hj16KDc31+/XBwAAAAAoHktHlqLs7Gz17t1bWVlZGjdunCZPnqzw8HBJ0owZMzRx4kQFBATIZDIpJSXF4LS+d/a09N1HUu4vxW8/kXHhz097pOSekuUa/a/RPHSwHN98K/vst2Vq3kymalGubY4ln8j5/XaZ7xsmU51440ICAADAY5UqVdI///lPtW/f3vXchg0b9Oyzz2rNmjVyFvPJsh9//FGfffaZPvvsM02dOlU33HCD/vjHP6pPnz6SpP79++uOO+6QxWKRRMkGAAAAAGUVM9pK0aOPPqr09HSNGjVKM2fOdJVskjRhwgQ1bdpUBQUFio+PV6VKlQxM6nv5Z69csl3qp73SzpXX7sw2U2CgAsaPk86elf3lV13PO4+myzHvbzI1bCDznXcYFxB+ZbPZ1KZNG9lsNqOjAAAAHwgNDdXy5ctdJVteXp7GjBmj9u3ba/Xq1cWWbMX59ttv1bdvXw0aNEgnTpyQJFfJ9vXXX1OyAQAAAEAZRdFWStLS0rRo0SJFRUVp2rRpxe7TvHlzSVLTpk1dz3Xs2FEmk6nYPw899JBfsvvCkU0lK9ku+nG3dPxw6eUxmimhvswD+8u5eYscy1fKabfLPmOm5HTKMn6cTP99EwXXvvj4eL3zzjuKj483OgoAAPCBv/zlL2rbtq2kCytatGvXTq+99pocDodH4+3evbvIc06nU2fOnPEqJwAAAACgdFyji/UZb+HChXI4HBo8eLDCwsKK3SckJERS4aLtrbfe0qlTpwrtt3z5ck2ZMkW9epWPe1g57FLGdvePS98qVY33dZqywzx4kBxffyv72+/IvP+AnLv3yPzg/TLVjDM6ml8UnM/TmdPZRscwnN1u15kzZxQSEuL6lDoAACifevfuraFDh0qSTp48qa5du2rr1q0ej3f99ddrzZo1qly5siTp7Nmzslqtuummm/Too4/q1Vdf9T40AAAAAMCnKNpKydq1ayVJnTp1uuw+6enpkgoXbY0aNSqy3/PPP69q1aqpW7duPk5ZOo4fks57sKrNz/ul82ekoBCfRyoTTAEBChj/mAoeGSPHsuUyNU6W+fZbjY7lN98snqxvFk82Oobhdu3apX79+umjjz5ScnKy0XEAAICHKlWqpNmzZ7seP/rooz4p2SIjIyVduCfb888/r88++0ySNHXqVC1dulQHDhzwKjcAAAAAwLco2krJ4cMX1kGsXbt2sdsLCgq0YcMGSYWLtt/6+eeftWrVKo0cOVIBAZ7/z5WQkCCz2T8rhXZqMkT3/O4F9w90Su1v7KL0X3b5PpS7UYKCpNmzfD+wzSYFBkoFBTK1bCGTD/83SUxIlOn8eZ+NZwkM0W1T9vpsvMadHlTCDXcWu+3jF7r65ByJCQmy5/t3WaVhw4a5tX9mZqYkacWKFfruu+9KfNy8efPcOk9Zc9u9Y2QLq6TMrEzFxcUVeVwRVPTXgOsver0V/TXg+ivW9Uvl7zW42tKPw4YNU0xMjCRp2bJl+tvf/ubxuYor2S7ek+21117T6NGjFRISotGjR2v06NGXHcefv/MDAAAAwLUkOjpamzZt8uhYirZScvFG5Ze7l8KiRYuUnZ2t8PBw1alT57LjLFy4UAUFBa4laTx18c19fzhR84THx/74Y5YyfszwXRhPWYMV6OMhnU6n7C+9IhXkS7VqyvHB32Xu0F6mGjE+Gf9Y5jHp7DmfjCVJAcGhPhtLkipHJ6hW4y4+HfO3jmUeU8G5vFI9x2/l5bl3vrNnz7q+unNsRkYZ+LnwgsNud33NyMgo8rgiqOivAddf9Hor+mvA9Ves65euvddg5MiRru8nTJjg8ThXKtkk6ZlnntEDDzyg0NBQ3XPPPfrjH//o2vZb/vydHwAAAABwAUVbKYmOjtavv/6qLVu2qHXr1oW2ZWZmavz48ZKklJQUmUymy46zYMECJSUlqUWLFl7liYmJ8dunW+0Wz4oOh8OuoDApNiDWx4nc5wwK0s8+HtPxyVI5t30v8733yNz6RhU8/IjsL70iy8zpV/xvoKRqxNTw+Yy28qZGTA2/z2gLDXWvkLRara6v7hwbG2v8z4U3zP+9H53ZYlFsbGyRxxVBRX8NuP6i11vRXwOuv2Jdv1T+XgOHw3HZ4qp9+/Zq0KCBJGndunVKS0vz6BxXK9kk6cSJE/rggw90//33KyIiQv3799fcuXOLHc+fv/MDAAAAwLUkOjra42Mp2kpJly5dlJaWpunTp6tr165KTEyUJG3cuFFDhw5Vdna2JCk1NfWyY+zatUubNm3S1KlTvc6zd+9e2Ww2r8cpCYdd+vKv7t+nrXoDi3bv+6F0Qrkp116gKmtX+2w8Z0aGHHPmydQgUeb+/WSyWGQeMliOufPl+GSpLLf19foce/bukc3iux/pcwXSxEU+G84v9uzdq2A//622a5d7S53u2LFDc+bMUY8ePdy6R9uUKVPcjVamTJ31vk7l5ComOkbp6elFHlcEFf014PqLXm9Ffw24/op1/VL5ew1yc3MVFhZW7LZ27dq5vvd0eeeSlGyXnuP+++93nftyRZs/f+cHAAAAAFzAxx1LyYQJE1S1alUdPXpUycnJatKkiRISEtSqVSvVrVtXnTt3lnTl+7MtWLBAJpNJgwcP9ldsnzBbpNgU94+LS/V5lDLB6XDI/uLLksMhy/jHZLr46e3+/WRKTJBjzjw5j7HMT0WRmJioDRs2uMp3AABQ/jRv3tz1/TfffOP28e6UbJK0efNmFRQUFDk3AAAAAMB4FG2lJC4uTuvXr1fPnj1ltVp16NAhRUZGavbs2Vq+fLn27Nkj6fJFm9Pp1Pvvv6+OHTuqVq1a/ozuE7VbSLaoku8fnSRFlr/LLBHHR0vk3Jkm8z1DZLrkf0uTxSLL449JDrvsL70ip9NpYEr4S2BgoCIjIxUY6Ou7AAIAAH+5uCrFqVOntHfvXreOdbdkky7c2/WHHy6s/JCcnKzg4GDPggMAAAAAfI6irRQlJSVp2bJlOn36tE6fPq1vv/1WDz74oHJzc3Xo0CGZzWY1bty42GO/+OILHT58WEOHDvVzat8ICJaa9ZPCql193+oNpUa3SD64TVmZ4zxyRI75C2RKaijzHbcX2W6Kry3zkMFybv9Bjk+WGpAQ/nbkyBGNHDlSR44cMToKAADwUNWqVSVJ6enpbn1YypOS7aKjR49KkiwWi8LDwz1IDQAAAAAoDdyjzQA7duyQ0+lUYmKiQkNDi91nwYIFCgkJUb9+/fyczneCw6QWg6RjP0jpW6W844W3V6l5YbnI6xKvzZJNkky1ailw+adX3McyaIAsgwb4KZH/xTXqqNHvXfkNqKttv5acPn1a69at08MPP2x0FAAA4KHu3bsrNDRU58+fd+u4Bx980KOSTZKee+45vfHGGzp79qxOnjzpdmYAAAAAQOmgaDPA9u3bJV1+2cizZ8/qo48+0q233lruP60aECTVaibVvF46/ZN0PlcymaWQCCm0itHpAAAAAPd99dVXHh03atQoRUREKDY21q2STZI2bdrk0TkBAAAAAKWLos0AVyvarFarTpw44cdEpc9kkipVNzoFAAAAYBy73a6hQ4cqODhYeXl5RscBAAAAAPgA92gzwNWKNgAAAADXJrvdTskGAAAAANcQZrQZYO3atUZHAGCQ6tWra+LEiapenSmeAAAAAAAAAFDeUbQBgB9FRUVp2LBhRscAAAAAAAAAAPgAS0cCgB+dPHlSq1at0smTJ42OAgAAAAAAAADwEkUbAPhRenq6xo4dq/T0dKOjAAAAAAAAAAC8RNEGAAAAAAAAAAAAeICiDQAAAAAAAAAAAPAARRsAAAAAAAAAAADgAYo2APAjq9WqpKQkWa1Wo6MAAAAAAAAAALwUYHQAAKhI6tWrpyVLlhgdAwAAAAAAAADgA8xoAwAAAAAAAAAAADxA0QYAfrRz506lpKRo586dRkcBAAAAAAAAAHiJog0A/MjpdCo/P19Op9PoKAAAAAAAAAAAL3GPNqAYoWaLfu3c1egYbgk1W3w6XpBFmj7Ap0OWuiDfvgQAAKACCw0NVU5Ojs/Ge3H233UqN0+VbKEaP2Jgkce+EBoa6pNxAAAAAAAlR9EGFMNkMslmqdg/HiaTFFyxXwIAAFCBmUwm2Ww2n40XFGxVUL5dQcFW2Wy2Io8BAAAAAOUTS0cCAAAAAAAAAAAAHmC+CgD4Ub169bR06VLVrFnT6CgAAAAAAAAAAC9RtAGAH1mtViUkJBgdAwAAAAAAAADgAywdCQB+lJGRoUmTJikjI8PoKAAAAAAAAAAAL1G0AYAfnThxQosXL9aJEyeMjgIAAAAAAAAA8BJFGwAAAAAAAAAAAOABijYAAAAAAAAAAADAAxRtAAAAAAAAAAAAgAcCjA4AAOVZw4YN3do/IiJCkydP1k033aSYmJhSSgUAAAAAAAAA8AeKNgDwo5iYGD3zzDNGxwAAAAAAAAAA+ABLRwIAAAAAAAAAAAAeoGgDAAAAAAAAAAAAPEDRBgAAAAAAAAAAAHiAog0AAAAAAAAAAADwAEUbAAAAAAAAAAAA4AGKNgAAAAAAAAAAAMADFG0AAAAAAAAAAACAByjaAAAAAAAAAAAAAA9QtAEAAAAAAAAAAAAeoGgDAAAAAAAAAAAAPEDRBgAAAAAAAAAAAHiAog0AAAAAAAAAAADwAEUbJEkOh0PPPfec6tevr5CQENWqVUuPPvqocnNzjY4GAJe1YsUKpaamKjg4WPHx8Xr55ZeNjuQ3X3zxhfr27avatWvLZDJpypQpRkfyqxdffFGtW7dWlSpVVLlyZbVt21arVq0yOpZfLViwQM2bN1eVKlUUEhKipKQkvfzyy3I6nUZHM8TatWtlsVhUv359o6P4xTPPPCOTyVTkz759+4yO5lfZ2dn6/e9/rxo1aig4OFh16tTR22+/bXQsv4iPjy/2v4Hk5GSjowEAAABAhRJgdACUDS+99JJmzpypuXPnqnnz5tq9e7fuvfdenTt3TrNnzzY6HgAUsWnTJvXt21ePP/64Fi5cqG+//VYPPfSQQkND9dBDDxkdr9Tl5OSoUaNGuuuuuzRmzBij4/jd2rVrdd9996lly5YKDQ3VO++8o169eunzzz9XmzZtjI7nF9ddd52eeuopNWjQQMHBwVq/fr1Gjhwpi8Wi0aNHGx3Pr7KysnTPPffo5ptv1t69e42O4zfx8fH6+uuvCz1XrVo1g9L4X05Ojtq3b6/Y2FgtXLhQtWvXVmZmpux2u9HR/GLjxo2FrjUnJ0cpKSkaOHCggakAAAAAoOKhaIMkacOGDeratavuuOMOSRfeuBk0aJDWrl1rcDIAKN7LL7+sli1batq0aZKkpKQk7dixQy+88EKFKNp69OihHj16SJImTpxocBr/W7lyZaHHM2bM0KpVq7RkyZIKU7TdcssthR7XrVtXn3zyif79739XqKLN4XBoyJAhevjhh3X27NkKVbRZLBZFR0cbHcMwL774ovLy8rRs2TIFBwdLuvA7bEXx21L17bffVn5+vu6//36DEgEAAABAxUTRBklS27ZtNXPmTH3//fdKSUnRgQMHtGLFClfxBgAldfBopvILCs8mKPjvJ+4L7HbtOZhe5PGlwkKtqlE96qrn2bBhg4YPH17ouW7dumnmzJlKT09XXFycN5fhsV9+PaVfTpwq8rw7r0G9WjVksZTP1Z3zCwp08GhWkefduf6oyAhFRoS7dV6Hw6FTp07JZrN5mNx30rN+Vt6Zc4WeK+56L/caBAcGqHace+WJ0+nUxo0btWHDBk2aNMmb+F47lZOnrJ+PF3nenf8GatW4TtbgoBKd709/+pNMJpMmTpyoZ5991sv03nM6ndp/+Jgcv1nC053rrxxu03VRVa56rkv/rmvSpImeeuop3XTTTb64DK/8mP2rTp4uuvx4SV8Ds8mkerVryGQyXfE8ixcvVtu2bTV27Fh9/PHHioiIUO/evfXss88qNDTUh1fknrPnzuvIsZ+KPO/OfwPR1SJVKcy9a5g9e7Z69+6tmJgYD5MDAAAAADxhclbUG3lUALm5uQoLC5N0YSmZK7356HQ69fzzz7vu91FQUKAHHnhAs2fPvuqbHABwqQ2bftA//+8rj441SXpgUC/VrVXjqvsGBQXpzTff1IMPPuh6bseOHWrcuLH+85//qGXLlh5l8NaJUzl6dc5HOnvuvEfHN2+cqDt7dnTrmPj4eN1///2GFyzShX9PPvh0jbbvPujR8bZQq8bc10/hNvfeYJ4yZYpmzpypH374wbCS9aJd+49o3kee3y+uX/cOapHSoET7njx5UrGxsTp//rwcDocmT56sp556yuNz+8K58/l6be5HOn7itEfH16kZowcG9pTZfPWyed26dbrrrrv03XffKTo6Ws8884zee+89w+9Tturz/+jf32z16FiLxaxH7rld0dUir7jfihUrdPLkSTVq1EinTp3S7NmztXDhQq1atUpdu3b16Ny+kvXzcb0xf4nsdodHx3e8MVXdOrS66n4hISFyOp3q16+fxowZo2PHjmnUqFFq166d3n//fY/O7QsOh0N/XbhMh9KLfuigJKpWrqRH771DwUGBJT5m06ZNatmypVatWlVktisAAAAAoHSVz4/Lw+c++ugjvfXWW5o7d662bNmiDz/8UCtXriwTb9oCKF9aN09W/dqxHh3btmVKiUq2sqxypTD17erZ0oWVK4WpdxfjZ6N4w2Qy6dZb2incFuLR8bd3a+92yfbWW29p6tSp+uijjwwv2SSpYb1auiE1yaNjGyXUVvMmiSXePzw8XFu3btWmTZv05ptv6uWXX9a7777r0bl9JTgoUAN6dvLogzrBQYG6s2fHEpVs2dnZGjJkiObOnVvmlk/s0ra5Yq6r6tGxt7RvddWSTbqwfOygQYPUtGlTtWvXTu+9957atWunF1980aPz+lJ0tUjd0s6zDzvEXFdVXdo2L9G+DodDkZGRmjt3rlq0aKE+ffro5Zdf1gcffKDjx4vOqvQXs9ms/r06uVWUXWQymTw6dvbs2apTp45uvvlmt88JAAAAAPAORRskSePGjdPo0aM1dOhQNWnSRP369dPUqVM1Y8YMnT171uh4AMoRs8mkO3t0KPGybxdVj6qim9u3KPH+MTExysoqPFvgxx9/dG0zUmqj+kppWNetY0yS+vfq5PbrVhbZQqzq172D28e1aNJAyQnxbh0zc+ZMjR8/XkuXLlWXLl3cPmdp6dHpRlWtXMmtY8JCQ3T7Le3dKqjMZrPq16+vlJQUPfTQQ5owYYKefPJJd+P6XO24aHW8sanbx/XuclOJlw394YcfdOzYMfXq1UsBAQEKCAjQc889p/379ysgIEAffPCB2+f3lQCLRQN6dXJ7Cdi6tWLUtmUTj8/bunVrHTp0yOPjfaltyyaqU9O9v4sDLBYN7NVJARZLifaPiYlRYmKiAgP/V0olJydLkg4fPuzWuX0tMiJcvX/n/gcnOt6Yqtqx1d065tSpU1q4cKEefPBBVqIAAAAAAANQtEHShWUmf/vpcYvFIqfTKVYXBeCuiEphuvXmtiXe32I2a0DvzgoMKPmtQ9u0aaPPPvus0HOrVq1S7dq1DZ/VZDKZdOvNbRXuxv112rVKUV0335Quyxq4OaurSkS4ev2utVvnePrpp/Xss89qxYoVZapkky7MzOrfy71ZXbd3b68wD2cCXuRwOMrMB2R+16a5alQv+ayu5MR4NW9c8tl8LVu21Pbt27V161bXn4ceekg1a9bU1q1b1bNnT09i+0x0tUh1a3/15Q8vCg4K1J09OsrsRVGyZcsW1axZ0+PjfclsNqt/z45uzcy6pUNLVS/BbL6L2rVrp3379qmgoMD13O7duyVdWFLXaM2bJKqRGx8eqFG9qn7Xppnb53nvvfd0/vx53XvvvW4fCwAAAADwHkUbJEm33nqrZs6cqY8//liHDh3SZ599pkmTJql79+4KCfHuTT8AFZM7s7q6tmuhGm4uszZ27Fj95z//0ZNPPqldu3Zp/vz5euONN/TEE094EtfnQkOsurOEs7qiq0XqZjeXWcvJyXGVC+fPn1dWVpa2bt1q+L2pLtWz042qWuXqs7pMkvr37OjWbL4xY8boxRdf1IIFC9SgQQNlZWUpKytLJ0+e9CKxb9WOra6ON6aWaN+WKQ3VqH5tt8afPHmy1qxZowMHDmj37t16++23NX36dN1zzz0epPW9AItFA3qWbHZSmC1Et93Szq1i0mazqXHjxoX+XHfddQoKClLjxo0VERHhTXyfaNOyierWKlmB3qdrG1Up4Ww+SXrssce0du1aHThwQFu3btXDDz+s1atXa8yYMR6m9b0qEeHq06VkS+nWrVVDbVq4N5vv8ccf188//6yRI0dq165dWrdunR5//HHdfffdqlKliieRfcpkMun2bu0UFnr136UvzILsXOLZfJeaPXu2br31VlWv7t5MOAAAAACAb1C0QZL0+uuv6+6779a4cePUsGFDPfDAA+rWrZvmz59vdDQA5ditN7dVpavM6oqPi1b7Viluj92yZUt98sknWrZsmZo2baqnn35azz//vB566CFP4/pcYt2auvH6Rlfcx2Ixa0CvTgoIcO/N1U2bNun666/X9ddfr8zMTM2aNUvXX3+97r//fm8i+1RQCe/V1f6Gpm4vMffaa6/p7Nmzuu222xQTE+P6M3r0aG8i+9zv2jRTbPWoK+4TGRGuXp1vdHvsU6dO6aGHHlJycrJuvPFG/eUvf9G0adP08ssvexrX56pXi9QtHa5eIt/RrX2Jyojy5sJSulef1ZWcGK9myQlujZ2Zmam7775bSUlJuvnmm7V7926tWbNGvXv39iayzzVrnKDkxPgr7hMcFKj+Pd2fzde0aVOtWLFC3333nVJTU3Xvvffqtttu05///GcvEvtWWGiIbu/e/qr7devQ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", + "text/plain": [ + "
" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc.draw(\"mpl\")" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "qlasskit_310-env", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.13" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/_sources/example_grover_hash.ipynb.txt b/_sources/example_grover_hash.ipynb.txt new file mode 100644 index 00000000..2dc622a1 --- /dev/null +++ b/_sources/example_grover_hash.ipynb.txt @@ -0,0 +1,194 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Grover search: hash function preimage attack\n", + "\n", + "In the ever-evolving landscape of cybersecurity, the advent of quantum computing presents both an extraordinary opportunity and an unprecedented challenge. In this notebook we exploit a Grover Search to perform a preimage attack on a toy hash function.\n", + "\n", + "A preimage attack on a cryptographic hash function `h(m)` tries to find a message `m` that has a specific hash value. Using qlasskit it is easy to write an hash function like the following `hash_simp`:" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "from qlasskit import qlassf, Qint4, Qint8, Qlist\n", + "\n", + "\n", + "@qlassf\n", + "def hash_simp(m: Qlist[Qint4, 2]) -> Qint8:\n", + " hv = 0\n", + " for i in m:\n", + " hv = ((hv << 4) ^ (hv >> 1) ^ i) & 0xFF\n", + "\n", + " return hv" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Thanks to the fact that qlasskit function are standard python functions, we can call the `original_f` to perform some kind of analysis on the hash function. Since the input space is tiny (it is a toy hash function), we can detect if the hash function is uniform (if it maps equally to the output space)." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Hash function output space: 256\n" + ] + } + ], + "source": [ + "from collections import Counter\n", + "\n", + "d = Counter(\n", + " hex(hash_simp.original_f((x, y))) for x in range(2**4) for y in range(2**4)\n", + ")\n", + "\n", + "print(\"Hash function output space:\", len(d))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We got that `hash_simp` is following an uniform distribution. \n" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "hash_simp.export(\"qiskit\").draw(\"mpl\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "Now we use our quantum function as an oracle for a Grover search, in order to find which input maps to the value `0xca`." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "from qlasskit.algorithms import Grover\n", + "\n", + "q_algo = Grover(hash_simp, Qint8(0xCA))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Then we use our prefered framework and simulator for sampling the result; this is an example using `qiskit` with `aer_simulator`." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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KlNJs0eVDHkAkJycjOnTp+PXX39Feno6AgMD0b9/f0yfPh21atWyWzczMxMzZszAjz/+iLS0NNSuXRuPPvooIiIi4O3tXei5rVYrPvnkE3z55Zc4fPgwvLy80KtXL8yaNQuNGzcuVT0Z8ojIkcYscHQNgK9ecnQNiFyL04c8Z8GQR0SOxJBH5HqcdlozIiIiIrp1DHlEREREGsSQR0RERKRBDHlEREREGsSQR0RERKRBDHlEREREGsSQR0RERKRBDHlEREREGsSQR0RERKRBDHlEREREGsSQR0RERKRBDHlEREREGsSQR0RERKRBDHlEREREGsSQR0RERKRBDHlEREREGsSQR0RERKRBDHlEREREGsSQR0RERKRBDHlEREREGsSQR0RERKRBDHlEREREGsSQR0RERKRBDHlEREREGsSQR0RERKRBDHlEREREGsSQR0RERKRBDHlEREREGsSQR0RERKRBDHlEREREGsSQR0RERKRBDHlEREREGsSQR0RERKRBDHlEREREGsSQR0RERKRBDHlEREREGsSQR0RERKRBDHlEREREGsSQR0RERKRBDHlEREREGsSQR0RERKRBDHlEREREGsSQR0RERKRBDHlEREREGsSQR0RERKRBDHlEREREGsSQR0RERKRBDHlEREREGsSQR0RERKRBDHlEREREGsSQR0RERKRBDHlEREREGsSQR0RERKRBDHlEREREGsSQR0RERKRBDHlEREREGsSQR0RERKRBDHlEREREGsSQR0RERKRBDHlEREREGsSQR0RERKRBDHlEREREGsSQR0RERKRBDHlEREREGsSQR0RERKRBDHlEREREGsSQR0RERKRBDHlEREREGsSQR0RERKRBDHlEREREGsSQR0RERKRBDHlEREREGsSQR0RERKRBDHlEREREGuQUIe/999+HoihQFAXx8fF2y2bMmKEuK+rf8ePHi3zOjRs3onv37vD29oaPjw969uyJLVu2VEJriIiIiCqewdEVuJmDBw8iIiICnp6eyM3NLXa94cOHo0GDBoXKa9SoUajsm2++wdChQxEQEIARI0YAAFatWoXevXtj9erVGDRoUDnVnoiIiMgxqnTIM5lMGD58OFq1aoWQkBB88803xa47YsQI9OjR46bPefHiRbzwwgvw9/fHnj17UK9ePQDApEmT0Lp1azz33HMIDw+Ht7d3eTWDiIiIqNJV6cO1s2bNwp9//omlS5dCr9eXy3P+97//RUZGBl544QU14AFAvXr1MH78eJw/fx4//fRTubwWERERkaNU2ZC3Z88ezJo1CxEREbjzzjtvun5sbCzef/99zJkzB2vXrkVOTk6R623btg0AEBYWVmhZeHg4ACAmJqbsFSciIiKqAqrk4dq8vDwMGzYMrVq1wuuvv16ix0RERNj9XaNGDSxcuBDDhg2zK09KSgIAhISEFHoOW5ltneLqlpeXp/6dlZUFoODQsslkAgDodDro9XpYLBZYrVZ1XVu52WyGiKjler0eOp2u2HLb89oYDAVvm9lsLlG50WiE1WqFxWJRyxRFgcFgKLa8uLqzTWwT21S12lQVfqubTCa+T2wT21TJbSqJKhnypk+fjqSkJPzxxx83PUx71113YenSpejRowdq166NtLQ0rF+/HtOnT8eIESNQo0YN9O/fX10/MzMTAODr61vouXx8fOzWKcq7776LmTNnFiqPiopC9erVAQD169dH69atsX//fpw8eVJdp2nTpggNDUVCQgLOnTunlrdq1QrBwcGIjY1Fdna2Wt6pUyfUqlULUVFRdm9oz5494eHhgcjISLs69O3bF5cvX0Z0dLRaZjAY0K9fP5w/fx5xcXFqube3N+69914kJycjMTFRLQ8ICEDnzp2RlJSEQ4cOqeVsE9vENlXNNgG14GiRkZF8n9gmtqkS2/THH3+gJBS5NsZWAXFxcejatStmzJiBadOmqeUjRozAihUrEBcXh44dO970ebZs2YLevXujefPm2L9/v1repEkTJCUlwWQyqSncxmQywc3NDS1btsS+ffuKfN6i9uQFBQXh/Pnzakh01V8VbBPbxDZVfpue+cjxe/I+G8c9eWwT21SZbbpw4QL8/PyQmZmpZo+iVKk9eWazGcOHD0fLli3xxhtv3NJz3XfffWjcuDEOHDiArKwstRNse/AyMzPh5+dn9xjbodei9vLZuLu7w93dvVC50WiE0Wi0K9Pr9UXuibw+XN6s/PrnLUu5TqeDTlf4y6C48uLqzjaxTaUtZ5sqvk2Odm0f8X1im0pbzjaVX5sKvV6J1qokOTk5SEpKQmJiItzc3OxuarxixQoABbtTFUXB2rVrb/p8/v7+AIBLly6pZTc67+5G5+sREREROZMq9bPQ3d0dTz/9dJHLYmNj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iw8//BAffvhhidbX6XSYMGFCme/hR0RERFTVleqcvKLuH3MjtrugExEREVHlKlUCq1OnDg4ePFji9Q8ePIi6deuWulJEREREdGtKFfLuuecebN26FcePH7/pusePH8fWrVt5OxIiIiIiByhVyBs3bhxMJhMGDRqE8+fPF7teeno6Hn30UZjNZjz33HO3XEkiIiIiKp1SXXjRpk0bvPTSS1iwYAHuvPNOPPvss+jZsyfq1asHADh16hS2bNmCL7/8EufOncPEiRPRpk2bCqk4ERERERWv1NOazZs3D9WqVcOcOXMwa9YszJo1y265iECv12Py5Ml45513yq2iRERERFRypQ55iqJg9uzZePrpp7Fs2TLs3LkTaWlpAIDAwEB06dIFI0aM4P3miIiIiByo1CHPpnHjxtxTR0RERFRF8SZ2RERERBrEkEdERESkQQx5RERERBrEkEdERESkQQx5RERERBrEkEdERESkQQx5RERERBrEkEdERESkQQx5RERERBrEkEdERESkQQx5RERERBrEkEdERESkQQx5RERERBrEkEdERESkQQx5RERERBrEkEdERESkQQx5RERERBrEkEdERESkQQx5RERERBrEkEdERESkQQx5RERERBrEkEdERESkQQx5RERERBrEkEdERESkQQx5RERERBrEkEdERESkQQx5RERERBrEkEdERESkQQx5RERERBrEkEdERESkQQx5RERERBrEkEdERESkQQx5RERERBrEkEdERESkQQx5RERERBrEkEdERESkQQx5RERERBrEkEdERESkQQx5RERERBrEkEdERESkQQx5RERERBrEkEdERESkQQx5RERERBrEkEdERESkQQx5RERERBrEkEdERESkQQx5RERERBrEkEdERESkQQx5RERERBrEkEdERESkQQx5RERERBrEkEdERESkQQx5RERERBrEkEdERESkQQx5RERERBrEkEdERESkQQx5RERERBrEkEdERESkQQx5RERERBrEkEdERESkQQx5RERERBrEkEdERESkQQx5RERERBrEkEdERESkQQx5RERERBrEkEdERESkQVUy5H3zzTd45pln0LZtW7i7u0NRFCxfvrzIdWfMmAFFUYr9d/z48SIft3HjRnTv3h3e3t7w8fFBz549sWXLloprFBEREVElMji6AkWZOnUqTpw4AX9/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554TNzc3ef311+XAgQOSmZkp69evl65du4qbm5u6R6tWrVry3XffObjWFcPWFyNGjBBvb29Zvny5uuzvv/+W5s2bi16vL/Lwiu0kYq2wWq2SlpYm3bp1k7CwMPnxxx9l6NCh6heZoihy1113yeuvvy4Gg0GGDBmiPraqnEhdXmyf/507d4qXl5d07txZ/v77b/nrr7/ks88+kxo1akjt2rUlLi5OROzbn5eXZ3fOrzNuS2ztGTZsmDRs2FB++eUXddnSpUtFURSZMmWKKIoi/v7+4ufnJwaDQQYMGCCnT592VLUrhKuPBVudExMT5fbbbxdfX18ZN26cTJgwQerWrSuKosjUqVNvug2oim1nyNMgi8Uibm5udieArly5UqpVq6beGiQvL8+BNawcFotFvLy8ZNiwYYXaGx0dLT4+PjJixAh5+umnRVEUady4cZkOazsDi8UiNWvWlLFjx6qHIG19sn79elEURUaPHm33mAsXLsiDDz4ozZo1q/T6VrSoqCjx9vaWGTNmiEjB+ZdLly6Vzp07q2FPp9NJaGiofPnll3LkyBEH17j82b6wBg8eLMHBwRIbG2u3/NdffxVFUWTAgAF264uIbNiwQSZPnuz0PwJsn4vRo0fbHZpfvHixeqrLt99+K0ePHpWoqCgJCwvTzDm613L1sWBrz9ChQ+W2226TH374QV124cIF6d27tyiKIps3by702GPHjlWZQ7NFYcjTENuviJUrV4pOp5P/9//+n1puNptlzZo10qRJE3Fzc5Px48erv0a1tofCJioqSvR6vXoo8vp2durUSd544w0REVm3bp0oiiIPPPCApgKwbUxs2rRJatasKZ988kmR6z3yyCNiMBhk7969atnvv/8u9erVk1GjRolI4dsHOLslS5aIh4eH/Pzzz3blly9fljp16oi7u7vdIZsVK1Y4qKYVx2q1qudd2c7LNJlMkp+fLyIFX3rVqlWTLVu2qI/JyMiQRx55RNzd3R1S5/Jg+1xs2LBBbrvtNvnss8/UZWazWd2DFx8fb/e4o0ePire3twwaNKhS61sZXHUs2FgsFvHz85NnnnlGDfy2Uzfi4uLEzc1NHnroIbvvhwsXLshDDz0kTZs2dUidS6IK3ZaZbpVtDr3FixejXbt2aN26NYCCu4/r9XoMHDgQixcvRkhICD799FO8/PLLOHv2bNW6O3c5slgssFqt6h3rdTqdOiVPamoq3N3dERMTAwAICwvDq6++il9++QXHjx93VJXLne2u86dOnUJ+fj6CgoIAXB0rNlOnToXFYsGKFSvUsri4OJw6dQovvfQSgKo7N2NZWK1WDBs2DH379sWLL76Iw4cPq8syMzNx+vRpjBs3Drt378b48eMBAK1atVIfqxX79u3DlStXcNttt8HLywsAYDAY1M/MuHHjYDQasWjRIvUxhw4dwu+//46RI0cCAMxmc+VX/BbZPhd//fUX8vLy7OYiTUlJQWRkJJo3b44OHTqo2xEAaNiwIRo0aIC0tDRkZmY6pO4VxVXHgvzfpF8xMTEQEdxxxx3w9PQEUDDlJQB07NgRo0aNwrp16xAbG6s+NikpCbt370bXrl0BVM32a2erTdDr9Thz5gx+++033HfffQgODgZg/+V8zz334KeffsKAAQOwatUqDBo0CDt37oSIaOrLCwCaN2+O2267DQsXLkR8fDzy8/Oh1+sBAFu3bsUff/yBXr16ASj4MIeHh0NRFCQmJjqw1hXD29sbly5dUidWv3ZMWK1WtGrVCg899BCWLFmC5ORkpKenY8OGDWjUqBFatGgBEdFUyNPpdDAYDHj77bdhsVgwevRopKenAwAWLFgAvV6Pzp07o02bNvjoo49gtVrRsmVL9bFaYbVakZmZiRo1agCA+iPIpkOHDujTpw8iIyPxxx9/ALga/p999lkAzt0fISEhuPvuu9GxY0e1TK/Xo2vXrnjnnXcA2E/RdezYMeh0Onh4eMDX19chda4orjoWbO/t2bNnkZubizp16gAo/GNu0qRJUBQFS5YsUYNhXFwcUlNT8eKLLwKoou134F5EqgBHjx6V5557TqKjo0Wk+BNB//33X3nwwQdFURS5++67Zd++fZVYy8phMplk4sSJoiiKdOzYUd577z1ZsmSJLFy4UGrUqCEBAQF294n7/vvvxdvbW7755hsR0dZh7NOnT8ukSZNueJPS6OhoURRFPvjgA9m2bZt4e3vL22+/LSLaO1R7rS1btoi7u7vMnj1bRApuPdSxY0dJTk4WkauHbKriSdW3Ki0tTR555BG7C7JsbOM/Ojpa9Hq9jB8/XnJycqR3797SqFEjEXH+PsnOzpYDBw6IiH1b0tPT7dazLfv555/F09NT3n//fRHRzhW1IhwLmzZtEoPBUOTtYmzbv6efflr0er3s2bNHMjMzJTw8XBo3biwiVbf9DHkaVZIBl5+fL9OnTxd3d3fx8vIqdE8wLTCZTDJ9+nSpW7euGAwGu1unfP/993brvfnmm6LT6dQTiKvqh7ai5OfnS9euXcXPz0+GDBkiiqKo521qtS9sX16TJ0+WunXrSkREhCiKItOmTXNwzSrPyZMni71FkC3E9OnTR2rVqiULFy6U//znPzJz5kwR0Xb4v15+fr48++yz4uHhIWfOnBER7X0uXHksnD9/XubOnStRUVHFrrN3715RFEVeeukl2bRpk/j4+FT5H8KKyP/tdySXYrVaodPpkJWVhVdffRV//fUXtm/fDovFoh7SdHbyf4dZMjIykJCQgP379yMnJwfVqlXDI488gpCQEHXd6OhojB49Gk2aNMGGDRvU/tEKq9UKRVHUQxPFWb16NZ544gkYjUZ07NgRMTExmuuLopw/fx4DBgzAzp07UatWLSxfvhz333+/S7T9RmyfofXr12PgwIEICAhAWloaTp06hdq1a9sdytS6devWYezYsQgLC8PKlStdbmxwLBR46KGHsGXLFoSFhWHt2rVITU1FYGBglW0/Qx4BALKzs+Ht7a2pkHe9G30IR4wYgZ07d+Kzzz5Dr169NN0PxbH1T/v27bF792588803ePLJJ12mL44cOYJFixbBzc0Nr7zyCm677bYqu+GubJcuXcIjjzyCjRs34p577nGZ8G+TmpqK8PBwuLu744svvsDdd9/tMp+L62l1LJT0h/DmzZvRp08fWCwWdOvWDdu2bavS7WfIc3ElHdjO7Nov6qK+tE0mEyIjI+Hl5YX77rvPEVWsUFJwWkaJN0J79+7FF198gU8++QQGg6GCa1e1ZGdn48qVKwgICHB0VSqUbbNfms/9unXr8MYbb+Ddd9/FQw89BLPZ7FLjY9++fTCbzbj77rsdXZVyxbFQcrYw9/DDD2Pt2rX49ttvMXjw4CrdfoY8Io2xBdnMzEzodDp4e3vbLQNKt0En7bJdQVnSPVKHDx9G48aNOX40iGOh5P7++298//33iIiIqPJ7cxnyiHDjQ7nOxnYY6Y033sCePXvw0EMPoWvXrmjRokWhW6dofS8uXWUb44mJidi6dStGjx4NHx8fdbnZbIaiKEV+aWnp81FWWuoDjgXXwZBHpEFWqxVubm7q4YXGjRvjnnvuQc+ePdG5c2c0bNjQbl2dTofTp09j6tSpuOOOO/Dqq686sPZUEWzv8yOPPIKffvoJOp0O999/P8aOHYv+/fvbrWs2m6HT6dQfBfHx8dDpdGjTpk2VPSxFJcexcGuq8jl412PII9IQ26/s6Oho3Hfffejfvz+aNWuG//f//h+SkpJgNBrRsmVL9OjRA927d0eHDh3U888iIyPx4IMP4tlnn8Wnn37qVBsyKhkRQXBwMHJzc+Hj44MTJ04AADw9PfHEE09g9OjR6NChg91jTp48iQEDBiAnJwf//vuvI6pNFYBjwTVwC06kIbbDKP/88w8AYODAgZg1axY2bdqEH3/8EYMHD0ZycjLmzZuHIUOGYPDgwZg9ezZ27NiByMhIiAief/55RzaBKlBiYiJycnIQHh6OY8eOYfXq1Xj88cfh5uaGJUuWoFOnTmjQoAEiIiJw5MgRAEBycjIOHTqkXpRUFaduotLjWHARFXYHPiJyCIvFIh9//LFUq1ZN9uzZY7fsypUrkpSUJF999ZX069dPPD09RVEUqVOnjhiNRrnzzjtFRHs3eS0prbd73bp1oiiKTJ8+3a48JSVFFi1aJL169bK7aXi7du2kV69eoiiKOjOElmaCuRktjweOBdfAw7VEGvTHH39g48aNGD58OOrWrVvkOrm5ufjnn38QGxuLL7/8EocOHcK8efPw8ssvV+lbAlDZHTp0CFOnTsXIkSPRt29fWCwW6HQ6uxPpDx48iDVr1uDnn39W5yht1qwZDhw4wJPuNYRjoXSc9fQVhjwX5ao38rye1vuhJBvivLw8jBw5Ej/88APOnDmDgIAAl9mA29p56dIl7NixA61atUJAQIDTbtBLIiMjA25ubqhevbpaJiKwWq2FPgtTp07F7NmzMWfOHLzyyiuaD/+uNh44FrRPe6OWCrGdN7F27VosWbIEeXl5mg42xXGlfrBarQBufD882zoHDx5EdHQ07rnnHvULzRUCHnC1Dz799FM88MADmDNnjno1oVbVqFHD7ksdgN3tMmz3SxMRXLx4EQAwdOhQACW/h1pVdbN9Gq42Hlx5LNyMbaxkZ2fj66+/Vi9MsY0RZ6HNkUt2bL+2nn76aYwZMwa9e/fGwYMHHVyryudK/VCSLyXbOikpKcjKysLIkSMBON9G7FbYvqiys7MRFBSEuXPn4uGHH8bZs2cdXDPHsfXJ7t27sWTJEtx9992oVauWJsL/zerP8WBPq2OhJNs4W8j77LPPMHz4cLz++utIS0tzvsBf6WcBkkOYzWZZsGCB9OjRQxRFkT59+sjp06cdXa1Kx34o7PTp0/Lzzz9r+iTzm8nIyJC4uDgZO3asuLm5yRNPPCFms9nR1XKoixcvyssvvyyrV68WERGTyeTgGt2auLg42bx5s/z++++Sl5dXaLnValUvJOB4sKeFsVDW7duiRYuka9euYjQapV27dnLw4MFyrlnFYshzYmX9oK1evVrq1asnw4cPL98KOQj7gcrTqlWrZOjQoY6uBpWTzMxM+eKLL8THx0cURRE/Pz+ZOHGi5Obmql/8NwoAHA/aMnXqVNm9e3eh8mvHwLWB//Lly5KUlCSzZs2SOnXqSI8ePeTKlSuVVt9bxQsvnIwUcUK81WqFiNzwHAkRgcViUQ9ZRkZGws/Pr9DNLp0F+6H8FNWXzsh2cvyuXbtQs2ZNBAUFwd3dvUzPpfULckrCdkjL6Q5P/R/bePjggw8wffp0NGvWDB06dMCePXuQkJCAVatW4ZFHHsHGjRtx4MABeHh4oGfPnmjevDksFgsURVHb7urjwdnHgm0bt2nTJvTp0wc//PADBg0aVGi9K1euQK/Xw2g0Fvk8mzdvxk8//YRPP/20oqtcbhjynJDFYsHgwYPx8MMPo3///nYnzl6/cdIy9gNdz2KxwM3NDSEhIejXrx/uv/9+tGzZEn5+foWuBLSFgEuXLuGff/5B/fr14e/v76CaU0WwWq1o1KgRGjZsiPXr18PT0xMnTpxA27ZtMWDAAFitVixfvlw9/6pDhw6YP38+OnXq5OCaU3m6dhq3/fv348cff0TLli0BAJcvX8Zvv/2GpUuXwmAwwNfXF+3bt0evXr1Qt25d55/j2yH7D6lMbLuTf/jhB/UGlUFBQfL8889LTExMofXNZrPk5+eLiEhCQoKsWbPG7hCFs2I/0PVs7+XatWvVQ3J6vV4MBoN07NhR3nnnHfn999/l4sWLhd73devWSevWreWbb75xRNWpAtje42+//VaMRqN8++23dsvbtWsnbm5ucu+998qiRYtk8+bN8sorr4iiKNK2bVs5deqUI6pNFchsNovRaJQXXnhBcnNz1fJnn31WPDw8RFEU8fLyEp1OJ56envLMM89IZmam3XM443cGQ54TsQ2wxx9/XBRFka5du4pOp1ODTsuWLWXmzJlFnhg6cuRIURRFDh06VNnVLnfsB7qebUy88cYboiiKLFy4UL7++mt57LHHpH79+uoGvG/fvrJo0SL5888/1Q39hAkTRFEUdbw444ac7NnOp3rsscekRYsW8ueff6rLDh06JK1bt5a77rpLUlJS1PKLFy/KoEGDRFEUSUhIqPQ6U8WwfZ6XL18uOp1OVq1aJSIi+fn5smzZMlEURTp37ixr166V2NhY+emnn+SBBx4QRVHkmWeecarz74rCkOdkcnNzpUePHlKvXj0REcnOzpZPP/1UOnTooIYcRVGkZ8+e8umnn0pmZqacPXtW2rZtq6kpq9gPdL28vDwZPny4uLm5qXtuMzMzZfv27fLee+/J/fffL35+fqIoigQGBsqoUaPko48+kpCQEI4JDcrOzpb27dtL//791fEgIvLdd9+JoiiydOlSESkIhLYrZ9evXy+KosiKFSscUmcqf7bAf88990jHjh3l3LlzIiLy559/Sps2baRTp06F9tzu27dP7rjjDqlevbocP3680utcnhjynMyRI0ckNDRUmjdvXmhZUlKSTJs2TRo1aqSGHF9fX+nUqZMoiiJz5swREee8/P167Ae6XnZ2tgwfPlz+85//yNmzZwvNq3nmzBn55Zdf5I033pCOHTuKh4eHGI1GURRF5s2bJyIcE1oKuadOnZJ77rlHHnzwQREp+LK3WCyyYsUK8ff3twt+trHyxRdfiLu7u3qrEFeem1VLYyEtLU09yrNixQpJT0+X6OhoMRqN8sMPP4iIFLpFzsKFC0VRFNmyZYsjqlxueOGFk8nMzMRnn32GmjVrYuzYsdDpdDCbzdDr9XYnhu7cuRMrVqzA6tWrkZmZCQA4d+4c/Pz8NHE1Jfvh1mn1isETJ04gMDAQ7u7uxV4VePLkScTExOCdd95BUlISx4RGHTlyBADQuHFj9eR7i8WCc+fOITAw0G66MrPZjMmTJ2PBggVIS0vjeNCQ33//Hffeey8uX74MAGjatCn8/f1x8OBBnDhxAj4+Puq6tu3i/Pnz8eabb2L16tXo37+/044FhjwnYtsg5ebmwmw2w9fXt9Byq9VqdxXhrl27cN9996FDhw7YtGmTJuZgZD+Unm2eybVr1yI9PR1Dhgwp8+1FqqqbbYSl4MiFeqXcP//8g969e+P2229HdHS0y40JwPXmai2Kra2JiYkYNmwYAgICsGXLFpfqA8A1xsKuXbvw1VdfYfXq1cjKysKdd96J3377DTVr1rRbz2QyYdKkSfj000+Rmprq1IFfG++ci7B90Dw9PQsFG9tyW7AxmUwAgPj4eOTk5KhTVmkh07Mfrtbftnfy2rKiuMKUbjfbAF9/S52NGzfi1KlTePrppwE4/5goC1ebq7UotnGzfPlyJCcnY/z48QBcbzxoeSzY5i1v164dvvzyS2RkZOB///sfHn30UVy6dEldz9YHf/31FzZv3owuXbrAz8/Pqadxc/53z0XMnTtXDSwlmXfPaDQiJycHP/30EwDgiSeeAOD8k0qzHwrYNjhjxozBr7/+aldWHIvFgunTp6N79+7Yvn27Ohejq1EUBWazGVarFc2aNcPgwYMBOP+YuJHiAgvnai0YDzt37sTSpUsRHh6OAQMGANDWeChJYNXyWLD9yLVarWrge/DBBxEREYG6deuq69m2oStWrMDx48cxbtw4AE4e+Cvv9D8qq+joaDEYDPLjjz+W6nEWi0W2bNkiixYtEhHnP6mc/VDAdkJ0dHS0KIoiRqNRPvroo1I9h9amdCvre5qWliYi2jzBPj8/v9C8zMWdTK+1uVpLMx7MZrNs27ZNZs+erd5GR0vj4fpbgNzsggqtjYXiFPcex8XFibe3t/Tr108T44Ahr4qzWCySn58vw4YNEy8vL5kzZ456VZjFYtHUFVA3wn64yrbhefjhh6V69eri7+8vvr6+MmfOHLl8+bLdOteyWq12G+tffvlF4uPjK6fSFaCo9/za22GU9rFaEhsbKw888IBUr15dQkJCZMaMGXLhwgURuXnbnXWu1lsZD1pj64vNmzeLl5eXvPbaa/L7778XWs/WN9nZ2UU+j7OOhWuVJvBbLBaJiYmRiIgItb+cPegx5DmJlJQU6dGjh7i7u8ukSZOKvBO31r+4RNgPNiaTSYxGo7z44ovqLSEURZFx48Y5/c07S8NsNsujjz4q33//vd1d7G3LnH0DXRq2ti5evFgCAgJEURS5/fbb1dvE9OvXr9gv8+s5azDieChga+eoUaNEURTR6/WiKIq0atVKPvjgAzly5Ii6blZWlrRr107WrVsnIgXb0Gv7yRnHQnkEfq18jzDkORGz2SzPPvusKIoiTZo0kUWLFtl9WG2u/eXi7Icmi+LK/WDb8Cxbtkx0Op2sWbNGRAoO3bZr1050Op088cQT8s8//4hI8b9CnX0DVl5T22mNxWKRBg0aSNOmTWXr1q1isVhk//798tRTT4miKDJ9+vQiH5Odne2UX+Y2HA9Fmzx5siiKIg888ID07dtXnb5LURS59957Ze3atTJ79mxRFEUWL14sIs4Z6orCwF+AIc9J2D54KSkp8vrrr4vBYBCDwSD33nuvzJ07VzZv3mw3Rc+1tLRnx9X7wbZh6tixo3To0EEOHz6sLvv999/l7rvvVjfqJ06ccFQ1KxyntrN37Vyter1elixZYrc8PT1dmjZtKoGBgfL333+LyNUfPgkJCTJ8+HDZvn175Va6HHE8FO3KlSvy5JNPSr9+/eTSpUuSkJAgU6ZMkfbt26v9YzAYxM/PT7766itHV7dcMPDbY8hzUvv375exY8dKrVq1RFEUqVWrltx9990SHh4uL7/8snzwwQfy6quvygsvvCCjRo1S5+vTGlfsB9vd22fMmFHo1+i5c+fUQzTNmjWTyMhIMZvNmjyMzantrrKNg8GDB0urVq3UuVptszyIFJyDqSiKvPbaayJyte1z584VRVFk3759duXOhuPBnq0t8fHx4u3tLWPGjFGXZWRkyNatW9U9vLZ/wcHB8txzzzn1D2IGfnsMeU7m2vMlsrKy5LfffpP58+fLwIEDJTAwUAwGg3h6eoq7u7vUrFlTmjZtKg8//LAcO3bMsRUvZ67YD7b2vvXWW+Lt7S2bNm0SkasbNdt/jx07pm6877zzTtmxY4djKlzBOLWdvUuXLsm9994r7dq1KxT+be3s1q2b1K1bV/0SO3XqlPTp00dCQ0NFxLlDDsdD8RYtWiQGg0Hmz58vIlff5+nTp4vBYJAJEybI8OHDxdPTUxo1auTIqpYLBv6rGPI0wGQyqbubDx06JHFxcZKeni5JSUmaOb+iJFylHx599FF56KGH1NtjFLcxWrBggVSvXl30er18+OGHcunSpcqsZoXLyMiQ2bNny+eff66GGpPJVKg/duzYIWPHjpUaNWqoG/fz58+LiHY25CIiFy9elN69e0vHjh1FpOjzMW2HsGzn5m3cuFG8vLxk9uzZIuLcIYfj4cZefvllCQwMtNtLVbduXenatat6eHLv3r2yZ88eEXHuscDAfxVDnsZpeaNVGlrrh3PnzhW7zPYFl5mZKe+8845Uq1ZN3N3d1Ym4tcDWxpycHMnIyChy+fUb6YSEBPH29pZevXrZPYdWmM1mmTFjhowfP16ysrKKXCc/P1+aN28uoaGhcvLkSZk+fbooiiJnz54VEef9nHA8FM/2np46dUqaNWsm7dq1ExGRxMREURRFpk2b5sjqVQgG/qsMN79dMjkzZ52KpbxprR/8/f2LXWabhsjHxwdTpkxBp06dEBYWpt7pXQtzUV47tV1xy23rmEwmGI1GzU1tdz29Xo+IiAikpqbC29u70HKLxQKj0Yjx48dj3LhxmDNnDv7++2+0b9/e6eco5Xgonm3bV6dOHcydOxf9+/fHW2+9hb/++gteXl7o2bMnAKhTdzn7ttJqtcLX1xcTJkywm5bt2lkvbHObd+7cGZ07d8bo0aPVuc1t05g562ehEEenTCIqmetvAH0ztptEm0wm+eWXXzTzy7S0/SBScE5Oz549RVEUze+xuRGLxSJ5eXkSEhIi1apVE0VR5OuvvxYR5711BsdD6Xz88cfqvRMHDBhQ4ptka5Ft3Hz00UeiKIp8++23IuK8n4WiaCSqEmnbtm3bMHnyZPz8888AUKJfmTqdDoqiwGAwoG/fvk7/Cx0oWz8AQPXq1TF16lR8/vnn0Ol06l5NLSnJ+6soCtzc3DBu3Djk5eXBzc0NTz75JADnnKuV46Hk5P/2VA4dOhTPP/88mjdvjrZt26JmzZoAtHG0g3ObF8HRKZOIbuxWp3TTyi90Tm1XvNKeJJ6SkiK9evWSl19+WUScc88Fx0PRSjoWTp06Jenp6SKijfMRObd50RQRjZ6IQKQxp06dwpAhQxAXF4eXXnoJb775Jnx8fNTlto+yFn6R3wj7oYCIFGqj1WqFiJR4T0Rubi48PT2d+hwkjofyGQvOzGq1wmKxYPTo0VizZg0iIiLw4osvwmg0auZcwzJzWLwkolIry5RuzriX5mZceWq7a3HqpgIcD6UbC1rdy8m5zQvjnjwiJ2GxWKDX63Hq1Cl89NFHmD9/PgCgW7du6Nu3L1q1aoXQ0FDUrVu30GPz8vLg7u5e2VWuEOyHq3tuVq1ahcGDBwMA6tWrhwcffBCPP/44unXrZre+xWKB1WqF0WjErl27kJKSgvDwcFSvXt0R1S9Xrj4ebnUsJCcn4/7779fEWAAK2jd+/Hh88cUXCAkJwcSJE9G7d280atTIbj2z2axecXvt/2sNQx6Rkzpw4AA++eQTrF27FufOnUNAQACCgoLg7++PO++8E7Vr18bZs2eRl5eH3NxchIeH47HHHnN0tcudK/aD7Yv9iSeewOrVq9GlSxfs3LlTPTTZokULPPLII3jkkUfQrFkzu8eOGjUKy5cvxz///IMmTZo4ovoVytXGA8fCVa4e+IvCkEfkZKTgJubQ6XTIzs7Gvn37sGvXLvz222+Ii4vD+fPn4e7uDrPZjOrVq6NWrVpo1qwZ5s2bhwYNGji6+uXG1fvh0qVL6NevHw4fPozk5GTk5ORg5cqVWLlyJRISEtT1evTogUGDBmHIkCHIy8tD3759cenSJfz5559FnsvlrFx5PHAsFM3VAn9RGPKINMBsNkNEYDQa8e+//+LChQto0qQJLly4gIYNG7rEydeAa/XD0aNH0a9fPxgMBhw4cMBu2eHDh7Fy5Up8++23OHbsGICCm2PfeeediI+PxwcffIBXX31V04epANcZDxwL9lw58F+PIY9I47T4C70stNYPmZmZ+Oyzz1CzZk2MHTtWvd+bXq+3a+fOnTuxYsUKrF69GpmZmQCAc+fOwc/PT3N9UhpaajvHws25SuC/HkMeEZGTsd3yJDc3F2azGb6+voWW26Zustm1a5c6ddOmTZuc+rYpdBXHwq3TcsDVxr5ZIiIXwrlayYZj4dZpNeABgOtGdyIiJ8Spm8iGY4FuhiGPiMhJcK5WsuFYoJLgOXlERE6AUzeRDccClRRDHhGRE+FcrWTDsUA3w5BHRORkOHUT2XAs0I0w5BERORFO3UQ2HAt0Mwx5REROjFM3kQ3HAl2PIY+IyAlx6iay4Vig4jDkERFphKtO3USFcSwQwJBHROQStDx1E5UOx4LrYMgjIiIi0iDOeEFERESkQQx5RERERBrEkEdERESkQQx5RERERBrEkEdERESkQQx5RERERBrEkEdERESkQQx5RERERBrEkEdERESkQQx5RERERBr0/wGrJ4pjMaTFHQAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from qiskit import Aer, QuantumCircuit, transpile\n", + "from qiskit.visualization import plot_histogram\n", + "\n", + "qc = q_algo.export(\"qiskit\")\n", + "qc.measure_all()\n", + "simulator = Aer.get_backend(\"aer_simulator\")\n", + "circ = transpile(qc, simulator)\n", + "result = simulator.run(circ).result()\n", + "counts = result.get_counts(circ)\n", + "\n", + "counts_readable = q_algo.decode_counts(counts, discard_lower=5)\n", + "plot_histogram(counts_readable)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Using `QlassF.original_f` we can double check the result without invoking a quantum simulator; calling it with the tuple `(12,12)` must result in the hash value `0xca`." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0xca\n" + ] + } + ], + "source": [ + "print(hex(hash_simp.original_f((12, 12))))" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "qlasskit_310-env", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.13" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/_sources/example_grover_subset.ipynb.txt b/_sources/example_grover_subset.ipynb.txt new file mode 100644 index 00000000..d3c34102 --- /dev/null +++ b/_sources/example_grover_subset.ipynb.txt @@ -0,0 +1,109 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Grover search: subset problem\n", + "\n", + "We define a function named `subset_sum(i,j)` that returns the sum of the elements `i` and `j` of a list `l`. We want to use a Grover search to find which `i` `j` combination led to a given value." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [], + "source": [ + "from qlasskit import qlassf, Qint2, Qint3\n", + "from typing import Tuple\n", + "\n", + "\n", + "@qlassf\n", + "def subset_sum(ii: Tuple[Qint2, Qint2]) -> Qint3:\n", + " l = [0, 5, 2, 3]\n", + " return l[ii[0]] + l[ii[1]] if ii[0] != ii[1] else 0" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Our quantum function `subset_sum` will be used as an oracle for a Grover search. For instance, here we want to find the input value that produce the value `7`. Since we know that there are at least two result (`(i,j)` and `(j,i)`), we set `n_matching=2`." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [], + "source": [ + "from qlasskit.algorithms import Grover\n", + "\n", + "q_algo = Grover(subset_sum, Qint3(7), n_matching=2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Then we use our prefered framework and simulator for sampling the result; this is an example using `qiskit` with `aer_simulator`.\n", + "\n", + "In the output histogram, it's now evident that the input leading to a value of `7` are the tuples `(1,2)` and `(2,1)` (5+2 and 2+5), aligning with our expectations.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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6NFi669fvx5PPPEEYmNj8eabb5bYx5KO5AUFBeHy5cvqkUBn/VTBMXFMlTGmlz+07kjeP8fwSJ6lY3rpA+uOA/xzDI/kcUwcU2WMKSsrC/7+/sjOzlazR0kc6khebm6uej5c0Stfi+rSpQsA4N///rd6QUZp59Ddfs6el5cXAgICcPr0aRgMhmJfBZd1jh8AeHh4wMPDo1i7m5ubWSgFbr1gSvq62fTCKG/77du1pF2n00GnK34KZmntpfWdY+KYKtpuqzFZ6vY+OdKYqsM8WaNoHUcakxbniWPimEriUCHPw8MDzz//fInLdu7cibS0NPTv3x/16tVDkyZN0LJlSwQGBmLPnj3Iy8szu8I2Ly8Pe/bsQdOmTdUrawGge/fu+PLLL7Fnzx5ERESY1UhISACAYu1ERERE1Y1DhTxPT89i97UzGTZsGNLS0jBt2jT161oAGDlyJN58803MmTMH8+fPV9vnzJmD3NxcTJ8+3Ww7o0ePxpdffonY2Fhs3bpVPWK4efNmJCcnIyoqCsHBwZUwOiIiIqKq41AhzxJTpkzBd999hwULFuDnn39Ghw4dkJKSgsTERISFhWH8+PFm60dGRmLkyJGIj49Hhw4d0LdvX2RmZuKrr75CnTp1Sjy3j4iIiKi6ccj75FWEl5cXduzYgfHjx+PYsWN499138dtvv2HSpEnYvn07PD09iz1m+fLlWLp0KQBg6dKl2LRpEwYOHIgDBw6gVatWVT0EIiIiIptzqKtrq6OcnBz4+fmVeYULEVmGv7pgP3zuiRxTebNHtT+SR0RERETFMeQRERERaRBDHhEREZEGMeQRERERaRBDHhEREZEGMeQRERERaRBDHhEREZEGMeQRERERaRBDHhEREZEGMeQRERERaRBDHhEREZEGMeQRERERaRBDHhEREZEGMeQRERERaRBDHhEREZEGMeQRERERaRBDHhEREZEGMeQRERERaRBDHhEREZEGMeQRERERaRBDHhEREZEGMeQRERERaRBDHhEREZEGMeQRERERaRBDHhEREZEGMeQRERERaRBDHhEREZEGMeQRERERaRBDHhEREZEGMeQRERERaRBDHhEREZEGMeQRERERaRBDHhEREZEGMeQRERERaRBDHhEREZEGMeQRERERaRBDHhEREZEGMeQRERERaRBDHhEREZEGMeQRERERaRBDHhER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du3aYcWKFVi6dCm8vb0xcOBAzJ07F82bN6/K4RIRERFVCoe/hYqjy8nJgZ+fX5mXMRORZUYtse7xK8fbohfOic89kWMqb/ZwuHPyiIiIiMh6DHlEREREGsSQR0RERKRBDHlEREREGsSQR0RERKRBDHlEREREGsSQR0RERKRBDHlEREREGsSQR0RERKRBDHlEREREGsSQR0RERKRBDHlEREREGsSQR0RERKRBDHlEREREGsSQR0RERKRBDHlEREREGsSQR0RERKRBDHlEREREGsSQR0RERKRBDHlEREREGsSQR0RERKRBDHlEREREGsSQR0RERKRBDHlEREREGsSQR0RERKRBDHlEREREGmRxyNu5cyfOnj17x3XS09Oxc+dOS0sQERERkYUsDnmRkZFYvXr1HddZu3YtIiMjLS1BRERERBayOOSJSJnrGI1GKIpiaQkiIiIislClnpOXlpYGPz+/yixBRERERCVwrcjKI0aMMPv3t99+iz/++KPYegaDQT0fr0+fPlZ1kIiIiIgqrkIhr+g5eIqiIDU1FampqSWuqygKwsLCsHjxYmv6R0REREQWqFDIO336NIBb5+M1a9YM48ePx//93/8VW8/FxQW1a9eGl5eXbXpJRERERBVSoZAXHBys/v+qVavQvn17szYiIiIicgwVCnlFDR061Jb9ICIiIiIbsjjkmRw4cAAHDx7E1atXYTAYii1XFAWxsbHWliEiIiKiCrA45GVlZeHRRx/Fnj177njPPIY8IiIioqpnccibOHEidu/ejR49emDo0KFo1KgRXF2tPjBIRERERDZgcSr7z3/+g06dOmH79u38VQsiIiIiB2PxL17cuHEDERERDHhEREREDsjikBcaGlrir10QERERkf1ZHPJmzpyJ77//Hvv377dlf4iIiIjIBiw+J+/8+fPo27cvunfvjueeew4dOnSAr69viesOGTLE4g4SERERUcVZHPKGDRsGRVEgIli9ejVWr15d7Pw8EYGiKAx5RERERFXM4pC3atUqW/aDiIiIiGyIP2tGREREpEEWX3hBRERERI7L4iN5Z8+eLfe6jRs3trQMEREREVnA4pDXpEmTct0IWVEU6PV6S8sQERERkQUsDnlDhgwpMeRlZ2fj8OHDOH36NLp3744mTZpY0z8iIiIisoDFIW/16tWlLhMRvPvuu1i4cCE+/vhj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AgIwadIkzJw5E56ensW2v3z5crRr1w4rVqzA0qVL4e3tjYEDB2Lu3Llo3rx55Q6OiIiIqAo4/C1UHF1OTg78/PzKvIyZiCwzaol1j1853ha9cE587okcU3mzR7U+J4+IiIiISsaQR0RERKRBDHlEREREGsSQR0RERKRBDHlEREREGsSQR0RERKRBDHlEREREGsSQR0RERKRBDHlEREREGsSQR0RERKRBDHlEREREGsSQR0RERKRBDHlEREREGsSQR0RERKRBDHlEREREGsSQR0RERKRBDHlEREREGsSQR0RERKRBDHlEREREGsSQR0RERKRBDHlEREREGsSQR0RERKRBDHlEREREGsSQR0RERKRBDHlEREREGsSQR0RERKRBDHlEREREGsSQR0RERKRBDHlEREREGsSQR0RERKRBDHlEREREGsSQR0RERKRBDHlEREREGsSQR0RERKRBDHlEREREGsSQR0RERKRBDHlEREREGsSQR0RERKRBDHlEREREGsSQR0RERKRBDHlEREREGsSQR0RERKRBDHlEREREGsSQR0RERKRBDHlEREREGsSQR0RERKRBDHlE1cDOnTvxyCOPIDAwEIqi4NtvvzVbfuHCBQwbNgyBgYGoWbMmYmJikJaWZp/OEhGRQ2DII6oG8vLycN999+HDDz8stkxE8Oijj+LUqVP47rvv8PPPPyM4OBi9evVCXl6eHXqrLWUF7NzcXIwdOxaNGjWCp6cn2rRpg2XLltmns0RERTDkUbVQ1hutoigl/vfOO+/Yp8M21qdPH7z11lsYOHBgsWVpaWnYv38/PvroI4SFhaF169b46KOPcOPGDXzxxRd26K223ClgA8DEiROxZcsWfPrppzh27BjGjx+PsWPH4vvvv6/inpLWOPt+j6zHkEflUtbOBgCOHTuG/v37w8/PD15eXggLC8PZs2dtUr+sN9rMzEyz/z755BMoioLHH3/cJvUdWX5+PgCgRo0aaptOp4OHhwd2795tr25pxp0CNgDs3bsXQ4cORY8ePdCkSROMHj0a9913Hw4cOFDFPSWt4X6PrMWQV42UFbSGDRtW7BNdTEyMTWqXtbM5efIkunXrhpCQECQnJ+PIkSOIjY01Cx7WKOuNtkGDBmb/fffdd4iMjESzZs1sUt+RhYSEoHHjxpg2bRr++usvFBQUYMGCBfjzzz+RmZlp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XLx4Ufbu3Stz5syRHj16iJubmyiKIi1btpQ1a9aUeVi7vEw7irlz58qLL74o//73v+XUqVPF/sgr6+ot0/hNh7179eol7777rsyePVuaNGkiiqLIJ598Uml9MNWfMGGC1KhRQ2bMmCG//vqrfPfdd+Lv7y/9+/eXM2fOyCOPPCL169eXBg0ayNixY232R22qP2rUKPHy8pKZM2fKqVOnRETk8OHDsnLlShk2bJg0a9ZMFEURT09PmT9/fplf65SHae6nTp0qvXv3lg8++EBSU1OLfYVUWfeDMtWZMmWKKIoiTz75pKxbt07Wrl0r4eHhoiiKzJo1S0Qqd+5feeUV8fX1lXnz5smVK1fkyJEj0rp1a+natav873//kwceeEAURREXFxd54oknJCUlxab17TH3Is49/5x75537ovXtNf/WYsirZgwGg/j4+MjIkSNLPGql1+slKSlJBg8eLIqiSP369dXbplTkZNU71Td9kqpTp4707NlT5syZI9u2bZPz588XW1dE5MKFCzJ9+nRZvXq1RTVv32atWrWkX79+cvnyZRG5NZb9+/dLcHCwNGrUqFioysvLk82bN1t85PL2+v7+/vLss8+aHal7+umnpWHDhtKpUydp1aqVREZGqmF78ODBaj9tUd/X17fU+TcYDHLo0CGZPn26eoQ3Li5OXWZtbRcXF3VH1qpVK3n++efl008/Vd90iq4rcuvT94gRI+Sdd96xqrZpm35+fjJw4ED1iIJer5djx45JWFiYeHl5yaFDh0Tk7+f62rVrsm7dOptdUV67dm35xz/+YXby9KhRo8TX11dCQ0Olc+fOMmjQIGnevLkoiiLdu3e/41GGita319ybtuGs88+5d965N9W35/xbgyGvmklKSpIaNWrI4sWLReTvT1klXUa/d+9eCQwMlLvuukt++eUXq+qa/nC2bdsmiqJI7969ZfDgwRIQEKB+XfrYY49JXFyc7N+/X7Kzs9XH/vDDD+Lh4SGTJ09W+2pp/W+++UZq1Kghn332mYiI2S1jli5dKoqiyIwZM0Tk7xNz9+zZI82aNZN58+aZbcuS+l9//bV4eHio9U3LTKH67bffVsPuX3/9JTExMaIoinz99dcVrlmS3bt3i5eXl7z99tsicuf5P336tHTs2FE8PDxk586dFtc0jf2///2vKIoiAwYMkOnTp0urVq1EURRx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", + "text/plain": [ + "
" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from qiskit import Aer, QuantumCircuit, transpile\n", + "from qiskit.visualization import plot_histogram\n", + "\n", + "qc = q_algo.export(\"qiskit\")\n", + "qc.measure_all()\n", + "simulator = Aer.get_backend(\"aer_simulator\")\n", + "circ = transpile(qc, simulator)\n", + "result = simulator.run(circ).result()\n", + "counts = result.get_counts(circ)\n", + "\n", + "counts_readable = q_algo.decode_counts(counts)\n", + "plot_histogram(counts_readable)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "qlasskit_310-env", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.13" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/_sources/example_grover_sudoku.ipynb.txt b/_sources/example_grover_sudoku.ipynb.txt new file mode 100644 index 00000000..d29a793f --- /dev/null +++ b/_sources/example_grover_sudoku.ipynb.txt @@ -0,0 +1,141 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Grover search: sudoku solver\n", + "\n", + "In this example we are going to solve a sudoku puzzle. Since we have few qubits, we cannot solve a real 9x9 sudoku puzzle; our toy examples uses a 2x2 matrix where a valid solution is when in every row and every column there are no repeated values (`0` or `1`). We encode these xor-ing the values for each row and column. \n", + "Since we want a specific solution, we add a constraint `constr`: we want the `[0][0]` element to be `True`.\n", + "\n", + "`sudoku_check` is already an oracle so this time we instantiate the `Grover` algorithm without value." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "from qlasskit import qlassf, Qmatrix\n", + "from qlasskit.algorithms import Grover\n", + "\n", + "@qlassf\n", + "def sudoku_check(m: Qmatrix[bool, 2, 2]) -> bool:\n", + " constr = m[0][0]\n", + " sub0 = m[0][0] ^ m[0][1]\n", + " sub1 = m[1][0] ^ m[1][1]\n", + " sub2 = m[0][0] ^ m[1][0]\n", + " sub3 = m[0][1] ^ m[1][1]\n", + " return sub0 and sub1 and sub2 and sub3 and constr\n", + "\n", + "q_algo = Grover(sudoku_check)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Then we use our prefered framework and simulator for sampling the result; this is an example using `qiskit` with `aer_simulator`.\n", + "\n", + "We obtain that the solution for this puzzle is the matrix `[[True, False], [False, True]]`." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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EhEREWkUC0EiIiIijWIhSERERKRRLASJiIiINIqFIBEREZFGsRAkIiIi0igWgkREREQaxUKQiIiISKNYCBIRERFpFAtBIiIiIo1iIUhERESkUSwEiYiIiDSKhSARERGRRrEQJCIiItIoFoJEREREGsVCkIiIiEijWAgSERERaRQLQSIiIiKNYiFIREREpFEsBImIiIg0ioUgERERkUaxECQiIiLSKBaCRERERBrFQpCIiIhIo1gIEhEREWkUC0EiIiIijWIhSERERKRRLASJiIiINIqFIBEREZFGsRAkIiIi0igWgkREREQaxUKQiIiISKNYCBIRERFpFAtBIiIiIo1iIUhERESkUSwEiYiIiDSKhSARERGRRrEQJCIiItIoFoJEREREGsVCkIiIiEijWAgSERERaRQLQSIiIiKNYiFIREREpFEsBImIiIg0ioUgERERkUaxECQiIiLSKBaCRERERBrFQpCIiIhIo1gIEhEREWkUC0EiIiIijWIhSERERKRRLASJiIiINIqFIBEREZFGsRAkIiIi0igWgkREREQaxUKQiIiISKNYCBIRERFpFAtBIiIiIo1iIUhERESkUSwEiYiIiDSKhSARERGRRrEQJCIiItIoFoJEREREGsVCkIiIiEijWAgSERERaRQLQSIiIiKNsupC8Ndff0W3bt3g5eUFJycnBAQEYODAgTh//rzJdmlpaXjllVfg7+8PR0dH1KpVC5MmTUJGRkaRn2swGPDpp5+iUaNGcHZ2RpUqVTBw4ECcPn26LJpFREREZBXsLB1AUUQEI0eOxKJFi1CnTh0MGDAA7u7uSExMxNatW3Hu3Dn4+fkBADIzMxEaGoq4uDiEhYVh4MCBOHDgAObMmYOtW7di27ZtcHJyMvn8ESNGYPHixWjQoAHGjRuHxMRE/PTTT4iMjMTu3bsRGBhoiWYTERERlSmrLAQXLFiARYsW4aWXXsKCBQtga2trsl6n06l/nj17NuLi4vD6669j1qxZ6vI33ngDH374IebNm4c333xTXR4dHY3FixcjJCQEmzdvhoODAwBg0KBB6NmzJ8aMGYOIiIhSbiERERGR5SkiIpYOoqCsrCxUr14dFStWxPHjx2FnV3ytKiKoUaMG0tLSkJSUBFdXV3VdZmYmfHx84O3tjVOnTqnLBw0ahBUrVmDr1q0ICQkx+bxOnTohJiYG586dQ82aNUsUb1paGjw9PZGamgoPDw8zW0tED5phn1g6gqJ9Pd7SERBRWbmftYfVjQhGRkbi+vXrGDp0KPR6PX7//XecOHECFSpUQNeuXfHQQw+p28bHxyMxMRHdu3c3KQIBwNXVFe3bt0dERATOnz+vXkqOiYlR192qe/fuiImJwdatW/HMM88UGV9OTg5ycnLUv6elpQEA8vLykJeXBwCwsbGBra0t9Ho9DAaDuq1xuU6nQ8H629bWFjY2NsUuN36ukbE4Ljgyervl9vb2MBgM0Ov16jJFUWBnZ1fs8uJiZ5vYJq23CbCHNSrYLv47sU1sU/lv0/1idYXgvn37AOT/gzz88MM4ceKEus7GxgYTJkzAnDlzAOQXggCKvacvMDAQERERiI+Ph5+fHzIzM3Hp0iU0bNiw0OXmgp9j/NyizJw5E9OmTSu0PDIyEi4uLgCAmjVromnTpjh06BASEhLUbYKCghAcHIzY2FhcvXpVXd6kSRP4+/tj27ZtSE9PV5e3bdsW3t7eiIyMNPlH79SpE5ydnbFhwwaTGHr27ImsrCxER0ery+zs7NCrVy8kJydj165d6nJ3d3d07twZ58+fR1xcnLq8SpUqaNeuHeLj43H8+HF1OdvENrFNxgN/L1ijgvHz34ltYpvKd5uMtdL9YHWXhkeOHImFCxfC1tYWzZo1w+eff4569erhwIEDGD58OI4dO4YvvvgCo0aNwvLlyzF48GBMnjwZ77//fqHPmjx5Mj744AOsWbMGffv2RWJiIqpXr4727dtj+/bthbbfvHkzwsLCMG7cOMyfP7/I+IoaEfTz80NycrI6PKvVbydsE9ukhTa99Ll1jgh+MZojgmwT26SVNqWkpMDLy6t8Xho2NtjBwQFr165FtWrVAAAdOnTAzz//jMaNG2Pu3LkYNWqUReJzdHSEo6NjoeX29vawtzc9Qdja2hY58ljcfY/FLb/1c+9muY2NDWxsCs8WVNzy4mJnm9gmc5eXxzZZo6Li1Pq/E9vENgHaatPdsLp5BD09PQEALVq0UItAo4YNG6J27do4deoUbty4oW6bmppa5GcZ798zbmfu9kRERETlmdUVgkFBQQCAChUqFLneuDwrK+uO9/Tdeg+hq6srfH19cebMGZOh2eK2JyIiIirPrK4Q7NSpEwDg6NGjhdbl5eXh5MmTcHV1RZUqVRAYGIhq1aphx44dyMzMNNk2MzMTO3bsQEBAgPrEMACEhoaq625lnD/w1mlliIiIiMojqysE69Spg7CwMJw8eRKLFy82WTdr1izcuHEDffv2hZ2dHRRFwYsvvoiMjAxMnz7dZNvp06cjIyMDw4YNM1k+fPhwAMCUKVOQm5urLt+4cSNiYmIQFhYGf3//UmodERERkfWwuqeGAeDUqVNo164drly5gl69eiE4OBgHDhxAVFQU/P39sXv3bvj4+ADIH/lr3749Dh48iLCwMDRr1gz79+9HZGQkWrZsia1bt8LZ2dnk84cNG6a+Yq5Xr164dOkSVq1aBTc3N+zatQt169YtcaycUJpIWzihNBFZ2v2sPaxuRBDIHxXcu3cvhgwZgn379mHBggWIj4/H6NGjERsbqxaBQP59f1u3bsX48eNx9OhRzJ07F8eOHcPEiRPx559/FioCAWDhwoXq9DDz58/Hhg0b0LdvX8TGxppVBBIRERE9yKxyRPBBwhFBIm3hiCARWVq5HxEkIiIiotLHQpCIiIhIo1gIEhEREWkUC0EiIiIijWIhSERERKRRLASJiIiINIqFIBEREZFGsRAkIiIi0igWgkREREQaxUKQiIiISKNYCBIRERFpFAtBIiIiIo1iIUhERESkUSwEiYiIiDSKhSARERGRRrEQJCIiItIoFoJEREREGsVCkIiIiEijWAgSERERaRQLQSIiIiKNYiFIREREpFEsBImIiIg0ioUgERERkUaxECQiIiLSKBaCRERERBrFQpCIiIhIo1gIEhEREWkUC0EiIiIijWIhSERERKRRLASJiIiINIqFIBEREZFGsRAkIiIi0igWgkREREQaxUKQiIiISKNYCBIRERFpFAtBIiIiIo1iIUhERESkUSwEiYiIiDSKhSARERGRRrEQJCIiItIoFoJEREREGsVCkIiIiEijWAgSERERaRQLQSIiIiKNYiFIREREpFEsBImIiIg0ioUgERERkUaxECQiIiLSqLsuBLdt24aEhITbbnP+/Hls27btbn8FEREREZWiuy4EO3XqhKVLl952m++++w6dOnW6219BRERERKXorgtBEbnjNgaDAYqi3O2vICIiIqJSVKr3CMbHx8PT07M0fwURERER3SU7czZ+/vnnTf6+du1anD17ttB2er1evT/w0UcfvacAiYiIiKh0mFUIFrwnUFEUxMXF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E1G7du0Sbx8QEIBLly6ZHRQRERERlT6zCkEbGxvk5eWVePu8vLwiX65MRERERJZnVpVWrVo1HD58uMTbHz58GNWrVzc7KCIiIiIqfWYVgh06dEBUVBTOnj17x23Pnj2LqKgovreXiIiIyEqZVQiOHj0aeXl5+N///ofk5ORit7t27Rr69+8PnU6HUaNG3XOQRERERHT/mTWhdLNmzTB+/Hh88sknqF+/PkaOHIlOnTqhRo0aAICLFy/izz//xKJFi3D16lW88soraNasWakETkRERET3xuw3i8ydOxdOTk746KOPMGPGDMyYMcNkvYjA1tYWb775Jt5///37FigRERER3V9mF4KKouCDDz7ACy+8gCVLlmDnzp1ISkoCAPj4+KB9+/YYMmQI6tSpc9+DJSIiIqL7x+xC0KhOnToc8SMiIiJ6gHGSPyIiIiKNYiFIREREpFEsBImIiIg0ioUgERERkUaxECQiIiLSKBaCRERERBrFQpCIiIhIo1gIEhEREWkUC0EiIiIijWIhSERERKRRLASJiIiINIqFIBEREZFGsRAkIiIi0igWgkREREQaxUKQiIiISKNYCBIRERFpFAtBIiIiIo1iIUhERESkUSwEiYiIiDSKhSARERGRRrEQJCIiItIoFoJEREREGsVCkIiIiEijWAgSERERaRQLQSIiIiKNYiFIREREpFEsBImIiIg0ioUgERERkUaxECQiIiLSKBaCRERERBrFQpCIiIhIo1gIEhEREWkUC0EiIiIijWIhSERERKRRLASJiIiINIqFIBEREZFGsRAkIiIi0igWgkREREQaxUKQiIiISKNYCBIRERFpFAtBIiIiIo1iIUhERESkUSwEiYiIiDSKhSARERGRRrEQJCIiItIoFoJEREREGsVCkIiIiEijWAgSERERaRQLQSIiIiKNYiFIREREpFEsBImIiIg0ioUgERERkUaxECQiIiLSKBaCRERERBrFQpCIiIhIo1gIEhEREWkUC0EiIiIijWIhSERERKRRLASJiIiINIqFIBEREZFGsRAkIiIi0igWgkREREQaxUKQiIiISKNYCBIRERFplNUVghcvXsQnn3yCsLAw1KxZEw4ODvDx8UG/fv3w999/F/kzaWlpeOWVV+Dv7w9HR0fUqlULkyZNQkZGRpHbGwwGfPrpp2jUqBGcnZ1RpUoVDBw4EKdP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", + "text/plain": [ + "
" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from qiskit import Aer, QuantumCircuit, transpile\n", + "from qiskit.visualization import plot_histogram\n", + "\n", + "qc = q_algo.export(\"qiskit\")\n", + "qc.measure_all()\n", + "simulator = Aer.get_backend(\"aer_simulator\")\n", + "circ = transpile(qc, simulator)\n", + "result = simulator.run(circ).result()\n", + "counts = result.get_counts(circ)\n", + "\n", + "counts_readable = q_algo.decode_counts(counts, discard_lower=20)\n", + "plot_histogram(counts_readable)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can create a more realistic sudoku game using numbers instead of booleans, but the resources required will scale exponentially. In the following code snippets, we recreate `sudoku_check` using `Qint2` and a 4x4 matrix. The sum of each column and row must be equal to 6 (3+2+1+0). As we can see, the resulting circuit of the checker requires more than 100 qubits, way above our simulation capabilities." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "QCircuit(1309 gates, 178 qubits)\n" + ] + } + ], + "source": [ + "from qlasskit import Qint2, Qint4\n", + "\n", + "@qlassf\n", + "def sudoku_check(m: Qmatrix[Qint2, 4, 4]) -> bool:\n", + " res = True\n", + " \n", + " # Constraints\n", + " res = (m[0][2] == 3) and (m[0][0] == 1)\n", + " \n", + " # Check every row and column\n", + " for i in range(4):\n", + " c = (Qint4(0) + m[i][0] + m[i][1] + m[i][2] + m[i][3]) == 6 \n", + " r = (Qint4(0) + m[0][i] + m[1][i] + m[2][i] + m[3][i]) == 6 \n", + " res = res and c and r\n", + " \n", + " return res\n", + "\n", + "#q_algo = Grover(sudoku_check)\n", + "print(sudoku_check.circuit())" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "qlasskit_310-env", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.13" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/_sources/example_simon.ipynb.txt b/_sources/example_simon.ipynb.txt new file mode 100644 index 00000000..05728d9b --- /dev/null +++ b/_sources/example_simon.ipynb.txt @@ -0,0 +1,131 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Simon function periodicity" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "from qlasskit import qlassf, Qint4\n", + "\n", + "\n", + "@qlassf\n", + "def f(a: Qint4) -> Qint4:\n", + " return (a >> 3) + 1" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "f.export(\"qiskit\").draw(\"mpl\")" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "from qlasskit.algorithms import Simon\n", + "\n", + "q_algo = Simon(f)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc = q_algo.export(\"qiskit\")\n", + "qc.draw(\"mpl\")" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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AAAMROQBAAAYiMgDAAAwEJEHAABgICIPAADAQEQeAACAgYg8AAAAAxF5AAAABnI78tLS0pSVlXXTZbKzs5WWlubuWwAAAMBNbkdebGysNm3adNNl3n77bcXGxrr7FgAAAHCT25HncDiqXaasrEwWi8XdtwAAAICbGvScvMzMTAUHBzfkWwAAAKASPrVZ+JFHHnF5/P777+v06dMVlistLXWejzd69Og6TRAAAAC1V6vI+/E5eBaLRRkZGcrIyKh0WYvFov79++u1116ry/wAAADghlpF3qlTpyTdOB+va9eumj9/vp544okKy9lsNrVq1UoBAQH1M0sAAADUSq0ir1OnTs6/JyUlKSYmxmUMAAAA3sHtCy+mTZum6Ojo+pyLJOmHH37QggULNHjwYLVv317NmzdX27ZtNWjQICUlJclut1d4TUFBgRYsWKBOnTrJz89PnTt31lNPPaWioqJK36OsrExr165Vnz595O/vr/DwcE2ePFnffvttvW8PAACAJ9TqSF5lDh8+rE8//VSXL19WaWlphectFouWLFlS4/UVFRXpT3/6k+68806NHTtW4eHhunTpknbt2qVHHnlEW7Zs0a5du2S13ujT4uJiDRkyRBkZGRo1apQmT56szz//XK+++qr27duntLQ0NW/e3OU9fvvb32rDhg26/fbbNW/ePOXk5Gjbtm1KTk7WoUOHFBUVVbd/FAAAAA9zO/IuXryoX//610pPT7/pPfNqG3mtW7dWfn6+mjVr5jJeUlKikSNHKjk5Wbt27dLYsWMlSa+88ooyMjK0cOFCvfzyy87ln3nmGSUmJuq1117TokWLnOMpKSnasGGDBg8erH/84x/O93nwwQc1ZswYzZ07V7t3767xfAEAALyR25G3YMEC7d+/X0OHDtW0adMUEREhH586HxiU1WqtEHiS5OPjo/Hjxys1NVVff/21pBsXgGzYsEEtW7asEJJLlizRG2+8oQ0bNrhE3ltvvSVJevHFF13eZ/To0Ro6dKiSk5OVlZWljh071nlbAAAAPMXtKtuxY4fuvPNO7dmzp1F+q0VZWZk++ugjSVLv3r0l3bjZck5OjuLi4ipcyRsQEKBBgwZp9+7dys7OVmRkpCQpNTXV+dxPxcXFKTU1Vfv27dOUKVMqnce1a9d07do15+OCggJJkt1ud54vaLVaZbPZVFpaqrKyMuey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8yQBAABQO25feLFkyRLt2LFDK1as0Pr163XnnXfqZz/7mb7//nt9+umnunDhgrp27aolS5bU53wBAABQA25HXmhoqA4dOqSnn35aW7Zs0c6dO53PNW/eXNOnT1diYqJat25dLxMFAABAzdXpZshhYWHauHGj1q9fry+//NL5Gy969uwpX1/f+pojAAAAaqnWkbd8+XIVFxdr2bJlzpDz9fVVnz59nMtcv35dzz77rAIDA/XMM8/U32wBAABQI7W68OLjjz/W888/r9DQ0JseqWvWrJlCQ0P17LPPcp88AAAAD6hV5L399ttq1aqV5s6dW+2yjz32mFq3bq2kpCS3JwcAAAD31CryDhw4oBEjRsjPz6/aZf38/DRixAilp6e7PTkAAAC4p1aRl5OTo65du9Z4+S5duujcuXO1nhQAAADqplaRZ7VaZbfba7y83W6X1er2/ZYBAADgploVWPv27fXFF1/UePkvvvhCHTp0qPWkAAAAUDe1irx77rlHe/fu1enTp6td9vTp09q7d68GDx7s7twAAADgplpF3mOPPSa73a4JEyYoNze3yuXy8vJ0//33q6SkRLNnz67zJAEAAFA7tboZcr9+/TR//ny9/vrruu222/Sv//qvio2NVUREhCTpu+++0549e/Tmm2/qwoULWrBggfr169cgEwcAAEDVav0bL1avXq3mzZtr1apVWr58uZYvX+7yvMPhkM1m06JFi/TSSy/V20QBAABQc7WOPIvFohUrVmjGjBlKSkrSgQMHdP78eUlS27ZtNWjQIMXHx6tbt271PlkAAADUTK0jr1y3bt04UgcAAOCluIkdAACAgYg8AAAAAxF5AAAABiLyAAAADETkAQAAGIjIAwAAMBCRBwAAYCAiDwAAwEBEHgAAgIGIPAAAAAMReQAAAAYi8gAAAAxE5AEAABiIyAMAADAQkQcAAGAgIg8AAMBARB4AAICBiDwAAAADEXkAAAAGIvIAAAAMROQBAAAYiMgDAAAwEJEHAABgICIPAADAQEQeAACAgYg8AAAAAxF5AAAABiLyAAAADETkAQAAGIjIAwAAMBCRBwAAYCAiDwAAwEBEHgAAgIGIPAAAAAMReQAAAAYi8gAAAAxE5AEAABiIyAMAADAQkQcAAGAgIg8AAMBARB4AAICBiDwAAAADEXkAAAAGIvIAAAAMROQBAAAYiMgD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aNOmTfrkk0/4YdhgPp6eAFDfSkpKlJ6ero0bN+qrr76S1WqVv7+/+vbtq/vuu08DBw709BQBwCOysrK0atUqvfHGG5KkDh06aOXKlXr44Yc9PDM0BO6TB+O8+uqrevHFF1VYWKhu3brJx8dHJ0+edD7fs2dPzZo1Sw888IDatm3rwZkCQOOaNWuW/v3f/11Dhw5VTEyM3n77bYWFhWnHjh0qLS3V3r17lZ2drdGjR6t///6eni7qiMiDUU6dOqU+ffqoX79+2rx5s5o1a6af/exnOn/+vD788EP99a9/VWpqqiRp2LBheuWVV9SvXz/PThoAGsG3336r3r17a9KkSfrzn/8sPz8/paen65//+Z81e/Zs7dq1y+X3uQ8cOFB//OMf+YxswjgnD0ZJSkpSQECAEhIS1KVLF3Xo0EE2m00RERGaM2eO9u7dq6NHj2rKlClKT0/Xgw8+qCNHjnh62gDQ4N599121atVKDz/8sPz8/CRJvXr1UlBQkN5++221adNG//3f/63XXntNd9xxhw4cOKDExERdvXrVwzOHu4g8GOXEiRNq2bKloqKiJN04P6/8IozS0lJJUp8+fbR582a9/PLL+uqrr7Ru3TpPThkAGsWnn36q4OBg9ezZ0zn25Zdfqri4WAMGDNBf//pXjR49Wk888YTS09P1q1/9Su+9956ysrI8OGvUBZEHo8TExOjUqVMqKiqSJPn43Li2yGKxyGazSfq/26o88cQTuu+++7R37159++23npkwADQCu92uDh066LvvvlPr1q2d4x999JHy8vI0b948tWzZUqWlpbp69ap8fX01bNgw2Ww2vu1owog8GCU2NlaS9NBDD2nv3r26fv16pcuVH9Xr0aOHcnNznVEIAKZxOBzy9fVVdHS0CgsLdd999ykpKUmJiYl66aWXFBwcrH/6p3+SJNlsNvn7+0u68U1IWVmZIiMjPTl91AGRB6PcddddWrBggY4ePaq5c+fqrbfe0vfff++yTPlRvUuXLuns2bMKCAhQdHS0h2YMAA3LYrFIkkaNGqURI0Zo9+7dmjFjhhYtWqRZs2bpjjvucF6QVi43N1eff/65goODdc8993hg1qgPXF0LI61fv16rVq3St99+q/bt22v8+PEaPXq0IiMjZbPZFBISorVr1+r111/XnDlztHr1ak9PGQAaXGlpqT788EMdP35c3bt3129+8xuNHTtWxcXF+uMf/6jOnTsrNDRUf/jDH7Rw4UI99thjev311z09bbiJyIORHA6Hvv76a7311lvasmWLzp49K0lq06aNfH19de7cOZWVlWny5MlKTExURESEh2cMAJ6xfft23X///YqMjFRMTIy+/PJLZWZmKjo6Wtu3b1fXrl09PUW4iciD8YqLi3X48GF9+OGHysnJ0f/+7/8qKChIEydO1G9+8xs1b97c01MEAI9KSkrS2rVrlZ2drcLCQg0aNEgvv/wyN0Ru4og83FLsdrt8fX09PQ0A8Dr5+fk6deqUAgMDFRoaqpCQEOfvAEfTROQBAAAYiKtrAQAADETkAQAAGIjIAwAAMBCRBwAAYCAiDwAAwEBEHgAAgIGIPAAAAAMReQAAAAYi8gAAAAxE5AEAABjo/wHAJsQ7N3YlRQAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from qiskit import Aer, QuantumCircuit, transpile\n", + "from qiskit.visualization import plot_histogram\n", + "\n", + "qc.measure_all()\n", + "simulator = Aer.get_backend(\"aer_simulator\")\n", + "circ = transpile(qc, simulator)\n", + "result = simulator.run(circ).result()\n", + "counts = result.get_counts(circ)\n", + "\n", + "counts_readable = q_algo.decode_counts(counts)\n", + "plot_histogram(counts_readable)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "qlasskit_310-env", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.13" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/_sources/example_unitary_of_f.ipynb.txt b/_sources/example_unitary_of_f.ipynb.txt new file mode 100644 index 00000000..4feb6d3a --- /dev/null +++ b/_sources/example_unitary_of_f.ipynb.txt @@ -0,0 +1,120 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Unitary of qlasskit function\n", + "\n", + "In qlasskit, we can exploit external low-level frameworks to perform operations on the resulting quantum circuit. In this example, we use qiskit in order to obtain the unitary matrix of our `QlassF` function." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "QlassF(a:bool, b:bool) -> bool:\n", + "\t_ret = a ^ ~b\n", + "\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAbIAAAEvCAYAAAAgi0SBAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAny0lEQVR4nO3de3RU5b3G8e/kOhASQgiQkACBGCAEA5ZLBS9cihWLgFhttUhFra23A8tSoFZb9JQlQlHPwSsctViOx6KClIIoWmKLaC33UhKEQAIkZJSQkCvEZGafP6akpCSQSSazZ+88n7VmZTHz7r1/M5p58r773e92GIZhICIiYlEhZhcgIiLSGgoyERGxNAWZiIhYmoJMREQsTUEmIiKWpiATERFLU5CJiIilKchERMTSFGQiImJpCjIREbE0BZmIiFiagkxERCxNQSYiIpamIBMREUtTkImIiKUpyERExNIUZCIiYmkKMhERsTQFmYiIWJqCTERELE1BJiIilqYgExERS1OQiYiIpSnIRETE0hRkIiJiaQoyERGxNAWZiIhYmoJMREQsTUEmIiKWpiATERFLU5CJiIilKchERMTSFGQiImJpCjIREbE0BZmIiElmzpyJw+EI6DHHjh1LSkpKQI/Z1hRkIiJtaN26dTz++ONml2FrCjIRkTa0bt06nnjiCbPLsDUFmYiIWJqCTETajY8//hiHw8HKlSt58cUXGTBgAE6nk8svv5wNGzYAsG/fPiZOnEhMTAxdu3Zl1qxZ1NbWXrCvQ4cOMWPGDBITE4mIiCAlJYW5c+dSVVVV32bs2LG8/vrrADgcjvrHypUrG+yrrKyM+++/n+7du+N0Ornqqqv4/PPPLzhmVVUVjzzyCKmpqURGRpKQkMAPf/hDjh49ekHb0tJS7r33XuLj44mKimLs2LHs3LmzNR9f0AozuwARkUB74YUXKC0t5Uc/+hFOp5Nly5Yxbdo03n77be69915uv/12brrpJjZv3sxzzz1H9+7deeyxx+q337lzJ+PHjyc2Npaf/OQnJCUlsXfvXpYtW8a2bdv485//THh4OI8++igej4etW7eyatWq+u1Hjx7doJ7rr7+ebt268atf/YpTp07xzDPPMGnSJPLy8oiOjgagtraW66+/nm3btnHLLbcwZ84cDh06xEsvvcTmzZvZsWMHycnJDdpu376dGTNmcOWVV7Jnzx4mTJhA165dA/AJB5ghItJOZGVlGYDRs2dP4/Tp0/XP79271wAMh8NhrFmzpsE23/jGN4yEhIQGz2VmZhoDBgwwysvLGzy/du1aAzB++9vf1j935513Gk191Z577f7772/w/FtvvWUAxssvv1z/3IoVKwzAmDt3boO2GzZsMADjjjvuqH9u+fLlBmD86le/atD22WefNQCjT58+jdZjVRpaFJF2Z+bMmXTu3Ln+35mZmcTExNCzZ09uvvnmBm2vvvpqXC4XlZWVgHfo8e9//zs/+MEPqKmpobi4uP5x9dVXExUVxebNm32q5+GHH27w7/HjxwPe4ctz3n33XUJCQnjkkUcatJ00aRJDhw7lD3/4Ax6PB/BOMAkNDWXOnDkN2t5///3ExMT4VJsVKMhEpN3p16/fBc916dKFvn37Nvo8wKlTpwDIyckBYMGCBXTr1q3Bo3v37lRVVfHll1+2qp5zw3/njgmQl5dHz5496+s5X0ZGBhUVFRQXFwNw5MgREhMTLwityMjIRt+71ekcmYi0O6GhoT49D2AYRoOfc+bMYeLEiY22bSxsWlLPuWPJxSnIRER8kJaWBnjDZ8KECZds76+VO/r168f777/P6dOniY2NbfBadnY2MTExxMfH17fdvHkz5eXlDXplNTU1HDlyxOegDXYaWhQR8cEVV1zB4MGDefnllzly5MgFr9fV1VFSUlL/706dOgE0eK4lbrrpJjweD0899VSD5zdt2sTu3buZMmUKISHer/SpU6fidrt5+umnG7R96aWXKC8vb1UdwUg9MhERHzgcDlatWsX48ePJzMzk7rvvJiMjg+rqanJzc1m7di2LFi1i5syZAFx55ZU8//zzPPDAA0yaNInw8HC++c1vNno+7mJmzpzJ66+/zuLFi8nPz+faa68lNzeXF198kR49evDkk0/Wt73rrrtYsWIF//mf/0leXh6jRo1i9+7dvP3226SmplJXV+fPj8R0CjIRER8NHTqU3bt3s2jRItavX8/LL79MdHQ0KSkpzJw5k29961v1bW+//XZ2797N73//e95++208Hg+//e1vfQ6y8PBwPvjgAxYuXMjq1atZu3YtsbGx3HrrrSxcuJBevXrVt42IiODDDz9k7ty5rFu3jjVr1jBixAg+/PBDfvazn5Gfn++vjyIoOAydTRQREQvTOTIREbE0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", + "text/plain": [ + "
" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from qiskit import QuantumCircuit, transpile, execute\n", + "from qiskit_aer import AerSimulator\n", + "from qiskit.visualization import array_to_latex\n", + "from qlasskit import qlassf\n", + "\n", + "\n", + "@qlassf\n", + "def f(a: bool, b: bool) -> bool:\n", + " return a ^ (not b)\n", + "\n", + "\n", + "print(f\"\\n{f}\\n\")\n", + "\n", + "qc = QuantumCircuit(f.num_qubits, f.num_qubits)\n", + "qc.append(f.gate(), f.qubits)\n", + "\n", + "qc.save_state()\n", + "qc.decompose().draw(\"mpl\")" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$$\n", + "\n", + "\\begin{bmatrix}\n", + "0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 \\\\\n", + " 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 \\\\\n", + " 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 \\\\\n", + " 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 \\\\\n", + " 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\\\\n", + " 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 \\\\\n", + " 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 \\\\\n", + " 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 \\\\\n", + " \\end{bmatrix}\n", + "$$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "simulator = AerSimulator(method=\"unitary\")\n", + "job = execute(qc, simulator, shots=8192)\n", + "result = job.result()\n", + "array_to_latex(result.get_unitary(qc, 3), max_size=16)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "qlasskit_310-env", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.13" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/_sources/exporter.ipynb.txt b/_sources/exporter.ipynb.txt new file mode 100644 index 00000000..87301c8c --- /dev/null +++ b/_sources/exporter.ipynb.txt @@ -0,0 +1,226 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Exporting to other frameworks" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Qlasskit implements circuit / gate exporters for Qiskit, Cirq, Qasm, Sympy and Pennylane. " + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "from qlasskit import Qint2, qlassf\n", + "\n", + "\n", + "@qlassf\n", + "def hello_world(a: bool, b: Qint2) -> Qint2:\n", + " return b + (1 if a else 0)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Qiskit" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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/OAHdHd3U1payqxZs9i3bx9RUWZ9iensgcojsPcj+OSSA/lRDrjzOliSaYW5iF31nwP3h+CqgfZLj4E6ION6mJ0PsQmRqi44bHuw83L2798PDB1WAUhMTKSiooKNGzdy//33ExMTwx133METTzxhXIiDFdK3zoebr4W2Ltj2MnT0QPxfnhexu+hJMDsPrl4IvWfhrf8L587C5DgzT/7xRUHuwzXXXMPu3bvDWVLIRTlgehxE/+VvkcbDZaJxOGDKNIiy4WfAvF3MIBgpyEVETDIh98jPX4dFRMQOJuQeuYiInSjIRUQMpyAXETGcglxExHAKchERwynIRUQMpyAXETGcglxExHAKchERwynIRUQMpyAXETGcglxExHAKchERwynIRUQMpyAXETGcglxExHAKchERwynIRUQMpyAXETGcglxExHAKchERwynIRUQMpyAXETGcglxExHAKchERwynIRUQMpyAXETGcglxExHAKchERwynIRUQMpyAXETGcglxExHAKchERwynIRUQMpyAXETGcglxExHAKchERwynIRUQMpyAXETGcglxExHAKchERwynIRUQMpyAXETGcglxExHAKchERw02IIPd4PJSWlpKVlUVsbCxpaWls3LiRzs5O1q1bh8PhYMeOHZEuUySkvF7o6YPOHugfiHQ1kTHQb/072E1MpAsItZqaGlauXInb7WbatGksWLCA48ePs337durr62lpaQFg0aJFkS1UJEQ6uuHtenjzMJzqsJ6LcsDCVLghG3Kc4HBEtsZQ8g6A5wi4auBUw8XnezuhsRpSciFmSqSqCw5bB7nH42H16tW43W42bdrEo48+SkJCAgCPP/44jzzyCDExMTgcDvLz8yNcrUjwvf8x/PJNONc/+PkBL/y50frJvgq+djPETY5MjaHU0wE1v4L2E0OXeb1wqALq90L+XZA0J/z1BYuth1Y2bNiAy+Vi/fr1bNu27UKIA5SWllJQUEBfXx/p6ekkJiZGsFKR4Hv/Y/jFnqEh/mkfnYCfVVjDLnbSexbeLfMd4pfq64H3nofWxvDUFQq2DfLa2lrKysqYOXMmW7Zs8bnO4sWLASgoKLjw3PngLyoqYsqUKTjs/J1TbKuzB/7jTRjtcPDHp+C3fw5pSWFX9zqcbR3dut5+2P+SNYZuItsG+a5duxgYGGDNmjXEx8f7XGfq1KnA4CA/fPgwzz//PE6nkyVLloSlVpFge+cI9PoZSm/XQ69N9sp7OuHEIf/a9J6Fkx+Fpp5Qs22QV1RUAFBSUjLsOi6XCxgc5DfffDPNzc28+OKLrFixIrRFioTImwEE0tleqPk4+LVEQvMH1kFOf7lqgl5KWNj2YOexY8cAmDt3rs/lfX197N27Fxgc5FFRwf/bVlhYiNvtDvp2A/G571QSd0UKze5mUlP1jcOOHFEx3LOlIaC2j275N/a/8sPgFhQBf/vZf2HZ/Hv8bvdxnYfPpy4KfkGj4HQ6qaqqCqitbYO8s7MTgK6uLp/Ly8rK8Hg8JCQkkJGREdJa3G43TU1NIe1jtPr7+y88jpeaJLhipsQF3PZsd68t3hfn/B1X+ovoqMlG/v62DXKn00lrayvV1dUUFxcPWtbc3MzmzZsByM/PD/kBTafTGdLt+yM6OvrC4+zZsyNcjYRK/7luoifF+t1ukqPXFu+LPnzvwI2ks7slYr//WHLCtkG+YsUKamtr2bp1K7fddhs5OTkAVFZWsnbtWjweDxCeE4EC/boUCo++AGe6IMWZcuEYgdjPL/dCVUMA7Z4sxXlFadDrCbeWj6H6Gf/bLbktHdf/NO9zYduDnaWlpSQnJ9PY2Ehubi55eXlkZ2dTVFREZmYmy5cvBwaPj4vYxY3z/G+TfRU4rwh+LZEwIw3ikvxvN9vQOLBtkKemprJnzx5WrVpFbGwsDQ0NJCUlsXPnTsrLy6mrqwMU5GJPc5OtU/BHKzoKVtro5GaHA7Ju8q/N7AKImx6SckLOtkMrAPPnz2f37t1Dnu/o6KChoYGoqCgWLlwYgcpEQsvhgLU3wNN/hMMjnNkYHQVrl0HmlWEpLWyuzIZ5fw2HXht53VnZMG956GsKFVsH+XAOHDiA1+slJyeHuLihR/ife+45AA4ePDjo/9PT0yksLAxfoSJjMCUGvl4Crx6w5pW3dQ9dZ14KfHah/UL8vLTrYOp0aHgLTvuYjBKbaK0zZzE4DB6fmJBBvn//fmD4YZX77rvP5/8/9NBD/OIXvwhpbSLBFBMNt+fDilz4oAl27bOuqRIbA5tWwqwJcImhmRnWT/tJ8By1Qr3/HMTEwg1/Y3aAn6cg98FrxwsWy4QWEw2L5sCvqqwgnzJpYoT4pRKutH5c71lBHh1jjxAHGx/svJyRglxExCQTco/8/HVYRETsYELukYuI2ImCXETEcApyERHDKchFRAynIBcRMZyCXETEcApyERHDKchFRAynIBcRMZyCXETEcApyERHDKchFRAynIBcRMZyCXETEcApyERHDKchFRAynIBcRMZyCXETEcApyERHDKchFRAynIBcRMZyCXETEcApyERHDKchFRAynIBcRMZyCXETEcApyERHDKchFRAynIBcRMZyCXETEcApyERHDKchFRAynIBcRMZyCXETEcApyERHDKchFRAynIBcRMZyCXETEcApyERHDKchFRAynIBcRMZyCXETEcApyERHDKchFRAynIBcRMZyCXETEcBMiyD0eD6WlpWRlZREbG0taWhobN26ks7OTdevW4XA42LFjR6TLlBDxeqH+BDzzNvz7f8HP/wQvvgcn2yJdmUhwxES6gFCrqalh5cqVuN1upk2bxoIFCzh+/Djbt2+nvr6elpYWABYtWhTZQiUkao/Db6rBfWbosoqDMM8J9xbBrITw1yYSLLbeI/d4PKxevRq3282mTZtobm6muroat9vN1q1bKS8vp7KyEofDQX5+fqTLlSB7twGe/qPvED/vkBv+9+/geGu4qhIJPlsH+YYNG3C5XKxfv55t27aRkHBxt6u0tJSCggL6+vpIT08nMTExgpVKsB3zwH/ugwHvyOt29sBTf4Su3pCXJRIStg3y2tpaysrKmDlzJlu2bPG5zuLFiwEoKCi48Nxzzz3HPffcw9y5c4mLi+Paa6/lu9/9Lh0dHWGpW4Kjohb6B0a//umzUHk0dPWIhJJtg3zXrl0MDAywZs0a4uPjfa4zdepUYHCQb9u2jejoaH74wx/yyiuv8I1vfIOf/vSn3H777QwM+JEMEjFnzsL+Rv/bvVFnHRgVMY1tD3ZWVFQAUFJSMuw6LpcLGBzkL730ErNmzbrw/7fccguzZs1izZo1vPHGG9x8880hqliC5ZB7dEMqn3ayDVo6Idn3332Rccu2QX7s2DEA5s6d63N5X18fe/fuBQYH+aUhfl5hYSEATU1NAdVSWFiI2+0OqG2wfe47lcRdkUKzu5nU1CWRLickrln2Na67638E1Pbmks9wpvlgkCsaPybC6z+Sn6yrJCkhhebm8fVv4HQ6qaqqCqitbYO8s7MTgK6uLp/Ly8rK8Hg8JCQkkJGRcdltvf766wDMnz8/oFrcbnfAfwSCrb+/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", + "text/plain": [ + "
" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc = hello_world.export(\"qiskit\")\n", + "qc.draw(\"mpl\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## QASM" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "OPENQASM 3.0;\n", + "\n", + "gate hello_world a b.0 b.1 anc_0 _ret.0 _ret.1 {\n", + "\tcx a _ret.0\n", + "\tcx b.0 _ret.0\n", + "\tcx b.1 anc_0\n", + "\tccx a b.0 anc_0\n", + "}\n", + "\n", + "\n" + ] + } + ], + "source": [ + "qc = hello_world.export(\"qasm\")\n", + "print(qc)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Cirq" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
0: ───hello_world───\n",
+       "      │\n",
+       "1: ───hello_world───\n",
+       "      │\n",
+       "2: ───hello_world───\n",
+       "      │\n",
+       "3: ───hello_world───\n",
+       "      │\n",
+       "4: ───hello_world───
" + ], + "text/plain": [ + "0: ───hello_world───\n", + " │\n", + "1: ───hello_world───\n", + " │\n", + "2: ───hello_world───\n", + " │\n", + "3: ───hello_world───\n", + " │\n", + "4: ───hello_world───" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import cirq\n", + "\n", + "qc = hello_world.export(\"cirq\")\n", + "qc" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Pennylane" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import pennylane as qml\n", + "\n", + "tape = hello_world.export(\"pennylane\")\n", + "tape" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Sympy" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle C_{0,1}{\\left(X_{4}\\right)} \\text{CNOT}_{2,4} \\text{CNOT}_{1,3} \\text{CNOT}_{0,3} {\\left|00000\\right\\rangle }$" + ], + "text/plain": [ + "C((0,1),X(4))*CNOT(2,4)*CNOT(1,3)*CNOT(0,3)*|00000>" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc = hello_world.export(\"sympy\")\n", + "qc" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "qlasskit_310-env", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.13" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/_sources/generated/qlasskit.algorithms.grover.Grover.rst.txt b/_sources/generated/qlasskit.algorithms.grover.Grover.rst.txt new file mode 100644 index 00000000..c5426915 --- /dev/null +++ b/_sources/generated/qlasskit.algorithms.grover.Grover.rst.txt @@ -0,0 +1,40 @@ +qlasskit.algorithms.grover.Grover +================================= + +.. currentmodule:: qlasskit.algorithms.grover + +.. autoclass:: Grover + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~Grover.__init__ + ~Grover.circuit + ~Grover.decode_counts + ~Grover.decode_output + ~Grover.draw + ~Grover.encode_input + ~Grover.export + ~Grover.gate + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~Grover.input_qubits + ~Grover.input_size + ~Grover.num_qubits + ~Grover.output_qubits + ~Grover.output_size + ~Grover.qubits + + \ No newline at end of file diff --git a/_sources/generated/qlasskit.algorithms.qalgorithm.rst.txt b/_sources/generated/qlasskit.algorithms.qalgorithm.rst.txt new file mode 100644 index 00000000..d819a261 --- /dev/null +++ b/_sources/generated/qlasskit.algorithms.qalgorithm.rst.txt @@ -0,0 +1,41 @@ +qlasskit.algorithms.qalgorithm +============================== + +.. automodule:: qlasskit.algorithms.qalgorithm + + + + + + + + .. rubric:: Functions + + .. autosummary:: + + oraclize + + + + + + .. rubric:: Classes + + .. autosummary:: + + QAlgorithm + + + + + + .. rubric:: Exceptions + + .. autosummary:: + + ConstantOracleException + + + + + diff --git a/_sources/generated/qlasskit.qcircuit.gates.rst.txt b/_sources/generated/qlasskit.qcircuit.gates.rst.txt new file mode 100644 index 00000000..f95b2ca8 --- /dev/null +++ b/_sources/generated/qlasskit.qcircuit.gates.rst.txt @@ -0,0 +1,53 @@ +qlasskit.qcircuit.gates +======================= + +.. automodule:: qlasskit.qcircuit.gates + + + + + + + + .. rubric:: Functions + + .. autosummary:: + + apply + + + + + + .. rubric:: Classes + + .. autosummary:: + + Barrier + CCX + CP + CX + H + I + MCX + MCtrl + NopGate + P + QControlledGate + QGate + S + Swap + T + Toffoli + X + Y + Z + + + + + + + + + diff --git a/_sources/generated/qlasskit.qcircuit.qcircuit.QCircuit.rst.txt b/_sources/generated/qlasskit.qcircuit.qcircuit.QCircuit.rst.txt new file mode 100644 index 00000000..9dd024df --- /dev/null +++ b/_sources/generated/qlasskit.qcircuit.qcircuit.QCircuit.rst.txt @@ -0,0 +1,53 @@ +qlasskit.qcircuit.qcircuit.QCircuit +=================================== + +.. currentmodule:: qlasskit.qcircuit.qcircuit + +.. autoclass:: QCircuit + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~QCircuit.__init__ + ~QCircuit.add_qubit + ~QCircuit.append + ~QCircuit.append_circuit + ~QCircuit.barrier + ~QCircuit.ccx + ~QCircuit.copy + ~QCircuit.cp + ~QCircuit.cx + ~QCircuit.draw + ~QCircuit.export + ~QCircuit.get_key_by_index + ~QCircuit.h + ~QCircuit.iqft + ~QCircuit.mctrl + ~QCircuit.mcx + ~QCircuit.qft + ~QCircuit.random + ~QCircuit.repeat + ~QCircuit.s + ~QCircuit.swap + ~QCircuit.t + ~QCircuit.x + ~QCircuit.y + ~QCircuit.z + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~QCircuit.num_gates + ~QCircuit.used_qubits + + \ No newline at end of file diff --git a/_sources/generated/qlasskit.qcircuit.qcircuitwrapper.QCircuitWrapper.rst.txt b/_sources/generated/qlasskit.qcircuit.qcircuitwrapper.QCircuitWrapper.rst.txt new file mode 100644 index 00000000..fc0e682b --- /dev/null +++ b/_sources/generated/qlasskit.qcircuit.qcircuitwrapper.QCircuitWrapper.rst.txt @@ -0,0 +1,40 @@ +qlasskit.qcircuit.qcircuitwrapper.QCircuitWrapper +================================================= + +.. currentmodule:: qlasskit.qcircuit.qcircuitwrapper + +.. autoclass:: QCircuitWrapper + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~QCircuitWrapper.__init__ + ~QCircuitWrapper.circuit + ~QCircuitWrapper.decode_counts + ~QCircuitWrapper.decode_output + ~QCircuitWrapper.draw + ~QCircuitWrapper.encode_input + ~QCircuitWrapper.export + ~QCircuitWrapper.gate + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~QCircuitWrapper.input_qubits + ~QCircuitWrapper.input_size + ~QCircuitWrapper.num_qubits + ~QCircuitWrapper.output_qubits + ~QCircuitWrapper.output_size + ~QCircuitWrapper.qubits + + \ No newline at end of file diff --git a/_sources/generated/qlasskit.qlassfun.QlassF.rst.txt b/_sources/generated/qlasskit.qlassfun.QlassF.rst.txt new file mode 100644 index 00000000..148773ed --- /dev/null +++ b/_sources/generated/qlasskit.qlassfun.QlassF.rst.txt @@ -0,0 +1,52 @@ +qlasskit.qlassfun.QlassF +======================== + +.. currentmodule:: qlasskit.qlassfun + +.. autoclass:: QlassF + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~QlassF.__init__ + ~QlassF.bind + ~QlassF.circuit + ~QlassF.compile + ~QlassF.decode_counts + ~QlassF.decode_output + ~QlassF.draw + ~QlassF.encode_input + ~QlassF.export + ~QlassF.f + ~QlassF.from_function + ~QlassF.gate + ~QlassF.to_logicfun + ~QlassF.truth_table + ~QlassF.truth_table_header + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~QlassF.input_qubits + ~QlassF.input_size + ~QlassF.num_qubits + ~QlassF.output_qubits + ~QlassF.output_size + ~QlassF.qubits + ~QlassF.name + ~QlassF.original_f + ~QlassF.args + ~QlassF.returns + ~QlassF.expressions + + \ No newline at end of file diff --git a/_sources/generated/qlasskit.qlassfun.qlassf.rst.txt b/_sources/generated/qlasskit.qlassfun.qlassf.rst.txt new file mode 100644 index 00000000..51d99df6 --- /dev/null +++ b/_sources/generated/qlasskit.qlassfun.qlassf.rst.txt @@ -0,0 +1,6 @@ +qlasskit.qlassfun.qlassf +======================== + +.. currentmodule:: qlasskit.qlassfun + +.. autofunction:: qlassf \ No newline at end of file diff --git a/_sources/generated/qlasskit.qlassfun.qlassfa.rst.txt b/_sources/generated/qlasskit.qlassfun.qlassfa.rst.txt new file mode 100644 index 00000000..cb63d945 --- /dev/null +++ b/_sources/generated/qlasskit.qlassfun.qlassfa.rst.txt @@ -0,0 +1,6 @@ +qlasskit.qlassfun.qlassfa +========================= + +.. currentmodule:: qlasskit.qlassfun + +.. autofunction:: qlassfa \ No newline at end of file diff --git a/_sources/how_it_works.ipynb.txt b/_sources/how_it_works.ipynb.txt new file mode 100644 index 00000000..fe3b9699 --- /dev/null +++ b/_sources/how_it_works.ipynb.txt @@ -0,0 +1,252 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# How it works\n", + "\n", + "To convert Python code into a quantum circuit, qlasskit implements a series of transformations:\n", + "\n", + "1. It begins with the Python *AST* (Abstract Syntax Tree), converting it into a more streamlined form using the `ast2ast` module. \n", + "2. Next, the streamlined AST is translated into *boolean expressions* as an intermediate step by the `ast2logic` module. \n", + "During this phase, boolean expressions are refined and optimized in preparation for the final transformation.\n", + "3. Finally, the `compiler` module takes these optimized boolean expressions and compiles them into a \n", + "*quantum circuit*.\n", + "\n", + "Unlike other libraries that translate individual operations into quantum circuits before combining them, \n", + "qlasskit constructs a single boolean expression for each output qubit of the entire function. \n", + "This unique approach facilitates advanced optimization leveraging boolean algebraic properties.\n", + "\n", + "\n", + "For instance, let assume we have the following function:\n" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "from qlasskit import qlassf, Qint2, Qint4\n", + "from qiskit import QuantumCircuit\n", + "\n", + "\n", + "@qlassf\n", + "def f_comp(b: bool, n: Qint2) -> Qint2:\n", + " for i in range(3):\n", + " n += 1 if b else 2\n", + " return n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If we decompose the algorithm in 3 separate additions and we compile them separately, we obtain the following circuit:" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Operations: OrderedDict([('cx', 12), ('barrier', 3), ('x', 3), ('ccx', 3)])\n" + ] + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "@qlassf\n", + "def f1(b: bool, n: Qint2) -> Qint2:\n", + " return n + (1 if b else 2)\n", + "\n", + "\n", + "qc = QuantumCircuit(f_comp.num_qubits * 2 - 1)\n", + "\n", + "for i in range(3):\n", + " qc.barrier(label=f\"it_{i}\")\n", + " qc.append(f1.gate(), [0] + list(range(1 + i * 2, 5 + i * 2)))\n", + "\n", + "print(\"Operations:\", qc.decompose().count_ops())\n", + "qc.decompose().draw(\"mpl\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "While if we compile the whole function to a quantum circuit using qlasskit, we obtain the following quantum circuit:" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Operations: OrderedDict([('cx', 4), ('x', 1), ('ccx', 1)])\n" + ] + }, + { + "data": { + "image/png": "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XLhySvg7NyrI/XfqIBx5E1r8eOpM8mTIvh6SDBo2REEuttTaAX89AuXVcOJ0/w9ZGR1tnZJdMN0a8EUBbh8fNcPuKthXZ/13fxJjIetya2yCrMvCH+DnKMiHx+uFMyegtgIaa6Cj/6ffEjcOJmRCej6MMfB5Cgpysb3uHivMTzVZR+kOrNvX0pJhYmJo70WW8GjrhNpGaGy19ocop3UNPD0FxsZFTnhfTEEeWB0t0HwSOtvA0wPOKIhNsq6DjzJ8xMbI/IuLBFB0FEweb/3IyBQXA9kR9sQqCa3RCdaPHanXuoiIiMEU5CIiIgZTkIuIiBhMQS4iImIw9VoXEYlAXq+Xsx4fB0MIs3hnFI5IvAXA5hTkIiIiBtOpdREREYMpyEVERAymIBcRETGYglxERMRgCnIRERGDKchFREQMpiAXERExmIJcRETEYApyERERgynIRUREDKYgFxERMZiCXERExGAKchEREYMpyEVERAymIBcRETGYglxERMRgCnIRERGDKchFREQMpiAXERExmIJcRETEYApyERERgynIRUREDKYgFxERMZiCXERExGAKchEREYP9f/bRrXXb6XzvAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc = QuantumCircuit(f_comp.num_qubits)\n", + "qc.append(f_comp.gate(), f_comp.qubits)\n", + "\n", + "print(\"Operations:\", qc.decompose().count_ops())\n", + "qc.decompose().draw(\"mpl\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As we can see from the circuit drawings, qlasskit approach needs half the number of qubits and half the number of gates." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## AST Traslator\n", + "Given a python function, the `qlasskit.ast2logic` module walks its syntax tree translating all the statements / \n", + "expressions to boolean expressions.\n", + "\n", + "\n", + "For instance, the following function:" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [], + "source": [ + "@qlassf\n", + "def f(n: Qint4) -> bool:\n", + " return n == 3" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Is translated to this boolean expression:" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[(_ret, n.0 & n.1 & ~n.2 & ~n.3)]\n" + ] + } + ], + "source": [ + "print(f.expressions)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "## Compiler\n", + "\n", + "The boolean expressions are then being fed to the `qlasskit.compiler`` which compiles boolean expressions\n", + "to invertible circuits, introducing auxiliary qubits. In this step, the compiler will automatically uncompute \n", + "auxiliary qubits in order to reduce the number of qubits needed and the circuit footprint. \n", + "\n", + "For the compilation, two backends are supported:\n", + "\n", + "- InternalCompiler\n", + "- Tweedledum.xag_synth\n", + "\n", + "\n", + "## Result \n", + "\n", + "The result of the compiler is a quantum circuit represented with qlasskit `QCircuit`. This circuit\n", + "can now be exported to one of the supported framework as a gate or as a standalone circuit.\n", + "\n", + "\n", + "The previous example function `f`, is translated to the following quantum circuit: the \n", + "result is available at qubit `q6`." + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjMAAAHwCAYAAABTxu5FAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA+w0lEQVR4nO3de3xV9Z3v/9dOAoSEIASoQRJuQrhfFETxDgOtSKG2ttaKjnaYtnNOGZlThljto9X5nfkdikPrDNLT0ovj9PRXhmlrWwTtT1tsi3gpSEFEFAWCCWSjG8IthEuy9/ljFxRJIDvsS9bO6/l45BHda33X96N7Z+/3/q7v+q5QLBaLIUmSFFA5mS5AkiTpQhhmJElSoBlmJElSoBlmJElSoBlmJElSoBlmJElSoBlmJElSoBlmJElSoBlmJElSoBlmJElSoBlmJElSoBlmJElSoBlmJElSoBlmJElSoBlmJElSoBlmJElSoBlmJElSoBlmJElSoBlmJElSoBlmJElSoBlmJElSoBlmJElSoBlmJElSoBlmJElSoBlmJElSoBlmJElSoBlmJElSoBlmJElSoBlmJElSoBlmJElSoBlmJElSoBlmJElSoBlmJElSoBlmJElSoBlmJElSoBlmJElSoBlmJElSoBlmJElSoBlmJElSoBlmJElSoBlmJElSoBlmJElSoBlmJElSoBlmJElSoBlmJElSoBlmJElSoBlmJElSoBlmJElSoBlmJElSoBlmJElSoBlmJElSoBlmJElSoLWLMBOJRKioqGDQoEHk5+dTVlbG3LlzqaurY/bs2YRCIZYsWZLpMiWlUCwGdfvg4B44/B40nsx0RZKSJS/TBaTaxo0bmTZtGuFwmMLCQoYPH86ePXtYvHgx27dvZ//+/QCMHTs2s4VKSomT9bDnNajeBPUH3n88rxP0HgGlY6GwOFPVSUqGUCwWi2W6iFSJRCJcdtllVFdXM2/ePB588EGKiooAePjhh7nvvvvIy8ujsbGRAwcO0LVr1wxXLCmZDr8HG38Bx480v08oB4Z9FC4Zmb66JCVXVoeZO+64g2XLljFnzhweffTRs7aPHTuWTZs2MWDAAHbs2JGBCiWlytFaWPfT+MhMS4z8OJQMTW1NklIja+fMbN26leXLl9OzZ08WLFjQ5D7jxo0DYMyYMWc8vnPnTmbOnElRURHdu3fnr//6r9m3b1/Ka5aUPG+ubnmQAdj6DDScSF09klIna8PMsmXLiEajzJo1iy5dujS5T+fOnYEzw8zhw4eZNGkS1dXVLFu2jO9///usWbOGj3/840Sj0bTULunCHD0A+3Ym1qbxBIS3pqQcSSmWtROAV69eDcCkSZOa3ae6uho4M8x8//vfZ/fu3fzxj3+kb9++AJSWlnL11VezYsUKbrnlltQVLSkpal5rXbs9r0LpmPPvJ6ltydows2vXLgD69evX5PaGhgbWrl0LnBlmVq5cybXXXns6yABMnDiRgQMH8uSTT7YqzIwfP55wOJxwO0mt86WbHmXi0E8m3G535X5KS0enoCJJ51NSUsL69etb1TZrw0xdXR0A9fVNnzRfvnw5kUiEoqIiBgwYcPrx119/nc985jNn7T9ixAhef/31VtUSDofZvXt3q9pKStyxY8db1S5Ejn+rUgBlbZgpKSmhtraWDRs2MHHixDO21dTUMH/+fABGjx5NKBQ6va22tpZu3bqddbzi4mLefPPNVtciKX1ORA+3qt3Bo+/Sp0+fJFcjqSUu5LMya8PMlClT2Lp1KwsXLmTq1KmUl5cDsG7dOu666y4ikQiQnsXyWjtsJql1DoXhTz9JvN31nyinekF18guSlFJZezVTRUUFPXr0oKqqihEjRjBq1CgGDx7MhAkTGDhwIJMnTwbOviy7e/fuHDhw4Kzj7d+/n+JilwmVgqBrSfwnEaEcuGRUauqRlFpZG2ZKS0tZs2YN06dPJz8/n8rKSoqLi1m6dCmrVq1i27ZtwNlhZtiwYU3OjXn99dcZNmxYWmqXdOHKb4RQbsv3HzAROhWmrBxJKZTVKwA358iRI3Tt2pVQKMThw4cpKCg4vW3RokU88MAD7Nixg9LSUgBefvllrrrqKp544gk++cnEr5CQlBnvbYfNT0K04dz79bsCBl0PH5g+JylA2mWYORVOhgwZwhtvvHHGtkOHDjFq1Ch69uzJP/3TP3Hs2DEqKiro1asXL774Ijk5WTuYJWWlI+/BrvWw9w2INp65rXtfKLscPjIoM7VJSo52+cm8efNm4OxTTABdu3Zl9erV9O7dm9tvv52//du/5eqrr2blypUGGSmAuvSCEdPg2r+DUTPid8sG6FAA424zyEjZIGuvZjqXc4UZgEsvvZSVK1emsyRJKdaxM1w8BLY9Bw3Hwe8mUvZol3/O5wszkiQpONrlyMyp+zZJkqTga5cjM5IkKXsYZiRJUqAZZiRJUqAZZiRJUqAZZiRJUqAZZiRJUqAZZiRJUqAZZiRJUqAZZiRJUqAZZiRJUqAZZiRJUqAZZiRJUqAZZiRJUqAZZiRJUqAZZiRJUqAZZiRJUqAZZiRJUqAZZiRJUqAZZiRJUqAZZiRJUqAZZiRJUqAZZiRJUqAZZiRJUqAZZiRJUqAZZiRJUqAZZiRJUqAZZiRJUqAZZiRJUqAZZiRJUqAZZiRJUqAZZiRJUqAZZiRJUqAZZiRJUqAZZiRJUqAZZiRJUqAZZiRJUqAZZiRJUqAZZiRJUqAZZiRJUqAZZiRJUqAZZiRJUqAZZiRJUqAZZiRJUqAZZiRJUqAZZiRJUqC1izATiUSoqKhg0KBB5OfnU1ZWxty5c6mrq2P27NmEQiGWLFmS6TIlSVIr5GW6gFTbuHEj06ZNIxwOU1hYyPDhw9mzZw+LFy9m+/bt7N+/H4CxY8dmtlBJKXO8DvZshsgOOFEXf+zkMTj8LhR9JLO1SbpwoVgsFst0EakSiUS47LLLqK6uZt68eTz44IMUFRUB8PDDD3PfffeRl5dHY2MjBw4coGvXrhmuWFIyRRth2+9h9yaIRZvep1spjJwO+UVpLU1SEmV1mLnjjjtYtmwZc+bM4dFHHz1r+9ixY9m0aRMDBgxgx44dGahQUqpEo/DqryGy/fz7diqCKz4H+X6fkQIpa+fMbN26leXLl9OzZ08WLFjQ5D7jxo0DYMyYMacfq66uZs6cOUyYMIFOnToRCoXSUq+k5Nr5QsuCDMDxw7Dp15C9X+2k7Ja1YWbZsmVEo1FmzZpFly5dmtync+fOwJlh5u233+YXv/gFJSUlXHHFFWmpVVJyNZ6Eqo2JtTm8Fw5Up6QcSSmWtWFm9erVAEyaNKnZfaqr4+9cHwwz119/PTU1NaxYsYIpU6aktkhJKRF+AxqOJd6u6s/Jr0VS6mXt1Uy7du0CoF+/fk1ub2hoYO3atcCZYSYnJ/n5bvz48YTD4aQfV1LTZk/9FteN+GzC7d7cEObm/z4+BRVJOp+SkhLWr1/fqrZZG2bq6uLXX9bX1ze5ffny5UQiEYqKihgwYEBKawmHw+zevTulfUh6X6yhdV9KOuUV+rcqBVDWhpmSkhJqa2vZsGEDEydOPGNbTU0N8+fPB2D06NEpn+RbUlKS0uNL+pDcxlY1O95QR58+fZJcjKSWuJDPyqwNM1OmTGHr1q0sXLiQqVOnUl5eDsC6deu46667iEQiQHoWy2vtsJmk1ql5HbY8lXi7YRNKqH7IWcBS0GTtBOCKigp69OhBVVUVI0aMYNSoUQwePJgJEyYwcOBAJk+eDJw5X0ZSdri4HDp0Trxd2diklyIpDbI2zJSWlrJmzRqmT59Ofn4+lZWVFBcXs3TpUlatWsW2bdsAw4yUjXLyoO+4xNp0K4WuvVNTj6TUytrTTADDhg1j5cqVZz1+5MgRKisrycnJYeTIkRmoTFKq9b8S6vZBeOv59y3oDqNngGtkSsGU1WGmOVu2bCEWi1FeXk5BQcFZ23/+858D8Prrr5/x7/3792f8eC/blIIgFIIRN0Pni+CdV+IL6TWl1yAY9jHo2IrTUpLahnYZZjZv3gw0f4rpM5/5TJP/fvfdd/P444+ntDZJyRMKwaXXQr8r4pOCIztg/674TSdzO8BVd0PnbpmuUtKFMsw0IYvvvSm1S3mdoOyy+M+a78HxI/HHDDJSdsjaCcDncr4wI0mSgqNdjsycum+TJEkKvnY5MiNJkrKHYUaSJAWaYUaSJAWaYUaSJAWaYUaSJAWaYUaSJAWaYUaSJAWaYUaSJAWaYUaSJAWaYUaSJAWaYUaSJAWaYUaSJAWaYUaSJAWaYUaSJAWaYUaSJAWaYUaSJAWaYUaSJAWaYUaSJAWaYUaSJAWaYUaSJAWaYUaSJAWaYUaSJAWaYUaSJAWaYUaSJAWaYUaSJAWaYUaSJAWaYUaSJAWaYUaSJAWaYUaSJAWaYUaSJAWaYUaSJAWaYUaSJAWaYUaSJAWaYUaSJAWaYUaSJAWaYUaSJAWaYUaSJAWaYUaSJAWaYUaSJAWaYUaSJAWaYUaSJAWaYUaSJAWaYUaSJAWaYUaSJAWaYUaSJAWaYUaSJAVauwgzkUiEiooKBg0aRH5+PmVlZcydO5e6ujpmz55NKBRiyZIlmS4zpcIHYe02WP16/Hf4YKYrkiSlU91x+NOO+OfAH9+EN2sgGst0VcmRl+kCUm3jxo1MmzaNcDhMYWEhw4cPZ8+ePSxevJjt27ezf/9+AMaOHZvZQlNky254biu8vffsbYMuhknDYESf9NclSUqPvQfht1vgz7ugIXrmtp5d4JpyuH4I5AZ4eCMUi8WyJJedLRKJcNlll1FdXc28efN48MEHKSoqAuDhhx/mvvvuIy8vj8bGRg4cOEDXrl0zXHFyPfsarNp0/v2mj4GpI1Nfj9QWrPkeHD8CnbrAdX+X6Wqk1Hp7L/zwD3Ds5Ln3G9ob/uZ66BjQIY4A57Dzu/fee6murmbOnDksWrTodJABqKioYMyYMTQ0NNC/f/+sCzIvvt2yIAPx/V58O7X1SJLSq+YA/OD35w8yAG/UwE9egKAOb2RtmNm6dSvLly+nZ8+eLFiwoMl9xo0bB8CYMWNOP/bzn/+cW2+9lX79+lFQUMDQoUP52te+xpEjR9JSdzKcbISVGxNrs3JjvJ0kKTv8ZjMcb2j5/q9Wwc73UldPKmVtmFm2bBnRaJRZs2bRpUuXJvfp3LkzcGaYWbRoEbm5ufyv//W/ePrpp/lv/+2/8d3vfpebbrqJaDTa5HHamo274hO9ElF3HDa9k5p6JEnpdfAobK5KvN3at5JfSzoE9OzY+a1evRqASZMmNbtPdXU1cGaYefLJJ+nVq9fpf7/hhhvo1asXs2bN4vnnn+f6669PUcXJs2FXK9tVwvgBSS1FkpQBm6pad6XSxnfgjonBmwyctWFm1674J3q/fv2a3N7Q0MDatWuBM8PMB4PMKePHjwdg9+7drapl/PjxhMPhVrVtjcl/v4ri0jHn3/FDnv/TJv6fu6anoCKp7fj27HUUF/WmpqaG0tIrMl2OlBIjPjqfYX81N+F2jVEYPGw0J+r2p6CqcyspKWH9+vWtapu1Yaaurg6A+vr6JrcvX76cSCRCUVERAwacezjiueeeA2DYsGGtqiUcDrc6CLXG8WNN/zeft1390bTWKWVCY2Pj6d++3pWtSg+0Pozsrn6HE0eDtRhZ1oaZkpISamtr2bBhAxMnTjxjW01NDfPnzwdg9OjRhEKhZo+ze/duvv71r3PTTTe1ei2akpKSVrVrrROHWvcGfeLQbvr0cdEZZbfc3NzTv329K1uFTuxrVbtjRyL0Ki6C7k3PNU2lC/mszNowM2XKFLZu3crChQuZOnUq5eXlAKxbt4677rqLSCQCnHuxvCNHjvCJT3yCjh078thjj7W6ltYOm7XW9nfh0WcTb/etr36agd/+dPILktqQU+vM9O7d+/S8OSnbnGyEB5+AoycSazfjyp58r6oVM4czLGBTfFquoqKCHj16UFVVxYgRIxg1ahSDBw9mwoQJDBw4kMmTJwNnzpf5oPr6embMmMHOnTt55pln6N27dzrLvyADe0Hvbom16d0NBpw9XUiSFEAdcuHKSxNrEwrBxEGpqSfVsjbMlJaWsmbNGqZPn05+fj6VlZUUFxezdOlSVq1axbZt24Cmw8zJkyf59Kc/zfr163n66acZPnx4usu/IKEQzJoInVo47tYpL77/Oc62SZIC5mOjoE/3lu//qXFQnP6zS0mR1bczaM6RI0fo2rUroVCIw4cPU1BQcHpbNBrl9ttvZ8WKFTz11FOnR3CCqDISX/3xXGvOFHaCL9wI/Xumqyops7ydgdqTI8fgB3+AXZHm9wkBt4yDG4amrayky9o5M+eyZcsWYrEY5eXlZwQZgC9/+cv87Gc/46tf/SoFBQW89NJLp7ddeumlTV663Vb17wkPzIB1O+ILIb13+P1tOSGYeRlcMTAeaCRJ2adLPtw7FV6rhue3wVsfuunwDUPh6sFwccDv6NMuw8zmzZuBpk8xPf300wB885vf5Jvf/OYZ2/793/+de+65J+X1JVNhJ7hxGFw/FA7Vw6Kn4Mhx6PKXxyVJ2S03B8b0jf/UHYcFT8Y/B7rmwyfHZbq65DDMfEhlZWWaq0mPnBB0K3h/VUfnx0hS+1PYKTs/B7J2AvC5nCvMSJKkYGmXIzOn7tskSZKCr12OzEiSpOxhmJEkSYFmmJEkSYFmmJEkSYFmmJEkSYFmmJEkSYFmmJEkSYFmmJEkSYFmmJEkSYFmmJEkSYFmmJEkSYFmmJEkSYFmmJEkSYFmmJEkSYFmmJEkSYFmmJEkSYFmmJEkSYFmmJEkSYFmmJEkSYFmmJEkSYFmmJEkSYFmmJEkSYFmmJEkSYFmmJEkSYFmmJEkSYFmmJEkSYFmmJEkSYFmmJEkSYFmmJEkSYFmmJEkSYFmmJEkSYFmmJEkSYFmmJEkSYFmmJEkSYFmmJEkSYFmmJEkSYFmmJEkSYFmmJEkSYFmmJEkSYFmmJEkSYFmmJEkSYFmmJEkSYFmmJEkSYFmmJEkSYFmmJEkSYHWLsJMJBKhoqKCQYMGkZ+fT1lZGXPnzqWuro7Zs2cTCoVYsmRJpstUikWjcPQ4HDsJsVimq5GUCScaoO44NEYzXYmSKS/TBaTaxo0bmTZtGuFwmMLCQoYPH86ePXtYvHgx27dvZ//+/QCMHTs2s4UqZd7ZB89vgz/vgpON8ce6dIKrBsE1g6F7YWbrk5Rax0/C+p3w/FtQc+D9xwdfDNeWw8hSyG0XX+2zV1aHmUgkwowZMwiHw8ybN48HH3yQoqIiAB5++GHuu+8+8vLyCIVCjB49OsPVKtkaGuE/X4L1lWdvO3IcfrsFfvc63HI53DA07eVJSoOd78EP/xAfjfmwt/bGf0ougi9N8otNkGV1Fr333nuprq5mzpw5LFq06HSQAaioqGDMmDE0NDTQv39/unbtmsFKlWzRKPx4bdNB5oNiMfjlK/Dc1rSUJSmNdkXgf/+u6SDzQeGDsPhZOFifnrqUfFkbZrZu3cry5cvp2bMnCxYsaHKfcePGATBmzJjTj61Zs4YpU6bQu3dvOnXqRGlpKZ/97GfZutVPuyB58W14tarl+/96w5nDz5KCLRqFx59//9Ty+dTWwc/+lNqalDpZG2aWLVtGNBpl1qxZdOnSpcl9OnfuDJwZZmpraxk1ahSLFy/mmWeeYeHChWzZsoWJEydSXV2dltp1YWKx+ByZRK1tRRtJbdPre+IBJRFbdsP+I6mpR6mVtXNmVq9eDcCkSZOa3edUOPlgmJk5cyYzZ848Y78rrriCIUOG8Itf/IK5c+emoFolU2UEag4m3m7dTphxOXTK2r8Kqf144a3E28Ri8NJ2uHnM+fdV25K1b9u7du0CoF+/fk1ub2hoYO3atcCZYaYpPXr0ACAvr3X/u8aPH084HG5V22S7+YF1FFzUm5pwDaWlV2S6nJQYMOEOxt36cMLtjjfAmPHXcySyIwVVqa349ux1FBf1pqYme/8GBNPue5HC4rKE2z227Cm+OP2LKaio7WirnwMlJSWsX7++VW2zNszU1cXHF+vrm57RtXz5ciKRCEVFRQwYMOCs7Y2NjUSjUXbt2sX9999PSUkJt912W6tqCYfD7N69u1Vtk62xsfH077ZSU7L1OHK01W331R4kkqX/XxTXHv4GBOS07uPtZEM0618X2fg3kLVhpqSkhNraWjZs2MDEiRPP2FZTU8P8+fMBGD16NKFQ6Kz2N9xww+mRm0GDBrF69Wp69erV6lraitzc3NO/+/Tpk+FqUqNzh8RXw4rFYoRCIS4qyKNTlv5/UVx7+BsQNNQfhG69E24Xajya9a+Ltvo3cCGflVkbZqZMmcLWrVtZuHAhU6dOpby8HIB169Zx1113EYlEgOYXy/vRj37EgQMH2LlzJ//yL//CRz/6UdauXUvfvn0TrqW1w2ap8OAT8csPe5f0ztoJzUdPwENPwIkWXsUAEAqF6N8T3t76SuoKU5uw5ntw/Aj07p29fwOC37wKv9mceLv/d95tjHikdaPwQZGNnwNZezVTRUUFPXr0oKqqihEjRjBq1CgGDx7MhAkTGDhwIJMnTwaany8zZMgQrrzySm6//XZ+97vfcfjwYR5+OPF5GEq/go4w7uwzh+d1bXnya5GUGRMHQc7Zg+7n1L0Qhl2SmnqUWlkbZkpLS1mzZg3Tp08nPz+fyspKiouLWbp0KatWrWLbtvh1uOeb/AvQrVs3Bg0axNtvv53qspUkk4dD5w4t37+0O4xJfNBNUht1UUHiK3tPHwM5WfupmN2y9jQTwLBhw1i5cuVZjx85coTKykpycnIYOXLkeY/z7rvv8uabb3LllVemokylQK8i+MKN8P3fx28seS4lF8EXJkGH3HRUJildZoyFw/XnXwkcYOZlML4VI7pqG7I6zDRny5YtxGIxysvLKSgoOGPbnXfeyaBBgxg7dizdunXjrbfe4pFHHiEvL4//8T/+R4YqVmsM/Aj8w8fi585frYLoh+6Und8BJgyEm0bHT01Jyi45OXDH1dCvJ/zhDYg0sSBevx4wZQSMSvwqbrUh7TLMbN4cnxXW1Cmmq666ih//+Mf827/9G8eOHaOsrIxJkybxwAMPNLtmjdqukovgnuvg4FHY+A48tSm+nkznDvDQp1wgT8p2OSG4bghcUw5v1sDja+LvAZ3yYM4UKOuR6QqVDO3yrfxcYWbOnDnMmTMn3SUpxU6dP1/9evyNrGOeQUZqT3JC8cm9+R3i7wH5HQwy2aRdTnU6V5iRJEnB0i6/m566b5MkSQq+djkyI0mSsodhRpIkBZphRpIkBZphRpIkBZphRpIkBZphRpIkBZphRpIkBZphRpIkBZphRpIkBZphRpIkBZphRpIkBZphRpIkBZphRpIkBZphRpIkBZphRpIkBZphRpIkBZphRpIkBZphRpIkBZphRpIkBZphRpIkBZphRpIkBZphRpIkBZphRpIkBZphRpIkBZphRpIkBZphRpIkBZphRpIkBZphRpIkBZphRpIkBZphRpIkBZphRpIkBVpepguQdLZYLMbRaGOmy0hIQU4uoVAo02VkDV8DUssZZqQ26Gi0ke6rn810GQmpnTyVwlzfUpLF14DUcp5mkiRJgWaYkSRJgWaYkSRJgWaYkSRJgeZMrXbgYD1U74NDx+B4Q/yxk43xxy/qnNnaJEmpd+wk7N4P7x15/3PgRAPsPQi9ukJOwC9CM8xkoVgMdu2DtW/BmzVwqP7sfY6egAefgK6dYUhvuGYw9OsBXlUpSdmhtg5efBs2vgPvHYLYh7bXn4QFK6FTHvTvCRMHwagyyA3gORvDTJbZugdWbYLq/S3b/1A9rNsR/ykthuljYNglqa1RkpQ6kcOw4s+wuTr+5fZ8jjfAm+H4T9fOMGkYXD8kWKHGMJMl6k/ArzfAS9tbf4zq/bD0ObjqUvjE5dC5Y/LqkySlVjQGa7fBk3+GE61cb/FQffyz5M+74I6JUHJRcmtMlQDlLjXnvUPwL09dWJD5oJe2x4/33qHkHE+SlFonGuBHf4BfrG99kPmgd/bBoqfip6iCwDATcO8egsXPwv665B53f138uO8aaCSpTTvZCD/4PWzZndzjNkThP56HVyqTe9xUMMwEWN1x+O7v4PCx1Bz/8LH48euOp+b4kqQLE4vBT16At/am7vj/3wvwVjg1x08Ww0yAPbEeao8m1uYrN8FDn4z/bonao/F+JEltz/qdsCnBU0GJfg5EY/DTl+KXd7dVhpmAerWqdUN/XTtDt4L475Z6pRI2VyXelyQpdQ7WwxOvJN6uNZ8DtXWwYkPifaVL1oeZSCRCRUUFgwYNIj8/n7KyMubOnUtdXR2zZ88mFAqxZMmSTJeZkGgs/S+qX/853q+Cp/Gxxzn50ZuJ/uaZs7bFYjEa/vE+Tk6fSWxnZfqLS5NoI4TfgNeegpN/WXep4QScSHBkM4h8/rPXs6/Fr2RNlxfehr1tdB5lVl+avXHjRqZNm0Y4HKawsJDhw4ezZ88eFi9ezPbt29m/P74Yy9ixYzNbaILerIHIkfT2GTkM28IwtHd6+9WFy7lrFtGXXqZx6Q8IjbucUK+ep7dFn/gVsVc3k/M39xAa0D9zRaZILAZVG6Dy5bODS+MJeH4plAyH8kmQl6VLEbTn5z+bHTsZXx8s3V54Cz45Lv39nk/WjsxEIhFmzJhBOBxm3rx51NTUsGHDBsLhMAsXLmTVqlWsW7eOUCjE6NGjM11uQta+lZl+n9+WmX51YUIdOpA3fx4cO0bjt//19OOxqmqij/+Y0NAh5Hzm1swVmCKxGGxbDduea34EJtoIezbDK8uhIUsnurfX5z/bvbLz/dsSpNPL2zPT7/lkbZi59957qa6uZs6cOSxatIiioqLT2yoqKhgzZgwNDQ3079+frl27ZrDSxDRG4Y09men7jT3x/hU8ocGDyLn9NmKvbCC66mlijY00PrwIYjFy588jlJub6RKTrvrPUPXnlu17eC9sXpnaejKpPT7/2S7Zl2G31LGTUPleZvo+l6wMM1u3bmX58uX07NmTBQsWNLnPuHHxcbIxY8Y0e5xp06YRCoV46KGHUlFmq9QciF/7nwkNUQgfzEzfunA5sz4HAwfS+IMfEv3O94i9uY2ce/6aUFlppktLumgjVP4psTb7dsKhFF3e2ha0p+e/PWjpLWtSoSqDfTcnK8PMsmXLiEajzJo1iy5dujS5T+fO8WnczYWZ//qv/2Ljxo2pKrHVqmsz239bfBGrZUJ5eeTN/wqcOEl05SpCI0eQ86lbMl1WSry3HY63Yl7Z7k3Jr6WtaE/Pf7Y7eBQOpWh9sZZoi58DWRlmVq9eDcCkSZOa3ae6uhpoOswcOnSIf/iHf2DRokWpKfAC1CZ5pd+g9a8LVFgIHToAELpiPKGcrHwLYN/O1rWLtLJdYLST5z/bJbq+WLIdaIOfA1l5NdOuXbsA6NevX5PbGxoaWLt2LdB0mPna175GeXk5s2bN4s4777zgesaPH084nJzlE0fe9FWGTprT5Lav3HT+dQO65r//+6FPNr/foXr49m/OfvzfFi/hC7/5ZgurbXtufmAdBRf1piZcQ2npFZkup1mxjh1h6XeSe8xYjMZvPQINJ6FvGdGf/ic5N1xP6JLkXKJWPric0Ik0Xid6Dv/95u8yoXxGwu0O7DtCaenQFFSUuGS/BlL9/EPbeg00JyjvAefSc8BV3Ph3P29yWzo+BzZt3kLp336shdW2XElJCevXt26V1qwMM3V18dhYX1/f5Pbly5cTiUQoKipiwIABZ2xbv349P/jBD3jllVasRNSMcDjM7t3Jma1VdqD58b1TCyG1RE5Oy/f9oIO1+5L235IJjY2Np3+36f+O/E50SPIho79aQWzTq+R8/m5yJl5Fw5f/nsZvPULuooWEQqELPv6emj1wrG1cEnTg0L5WtTt67HDbeV0k+TWQ6ucf2tZroDmBeQ84h2hB81eBpONz4Fh9XZv7f5eVYaakpITa2lo2bNjAxIkTz9hWU1PD/PnzARg9evQZf8SNjY186UtfYs6cOYwYMSKp9SRLx5zm15M+1HR2O0PX/PgLOBo99znX5o7VMbeBPn36nL+jNir3L1dt5Obmtun/jljHjiTzgoHY7t1EH3uc0JBycm77NKHcXHLunEX03/+D6K9WkPvJT1xwH5f0vqTNfCsPH2rdOgK73nu1zbwukvkaSMfzD23rNdCcoLwHnEuXzs1ffZaOz4HYicMp+X93IZ+VWRlmpkyZwtatW1m4cCFTp06lvLwcgHXr1nHXXXcRiUSAsxfLW7JkCXv37k361UutHTZryo5343ezbkpTw4Ef9tAn40n80DF46JeJ9//4d/4nA3r9z8QbthEPPhFfArx3Se/T86baorrGBrqvbuaJTlAsGqXxX74N0Si5879y+jLcnNs+TWztC0Qfe5ycKydc8OmGbW9tozC3bbylNByHNd+DxgTvJfM3FR+j4rtt43WRrNdAup5/aFuvgeYE5T3gXKIxeOBnTd8rKR2fA3d/5q9Y/s9t6/9dVs7+qqiooEePHlRVVTFixAhGjRrF4MGDmTBhAgMHDmTy5MnAmfNlIpEIX//61/nGN75BQ0MDBw4c4MCBAwAcO3aMAwcOEI1mfpGVPsWQpBHhhIVC0Kd7ZvpW60V//gSx17eSc/edhPr2Pf14KDeX3H/8CkQbafzWI8Ri2XO/irxOcMmoxNoUFkOP/ikpJ6Pa4/Of7XJCUFqcuf4z2XdzsjLMlJaWsmbNGqZPn05+fj6VlZUUFxezdOlSVq1axbZt8SHoD4aZ6upqDh8+zJe+9CW6d+9++gdg4cKFdO/enXfeSfDWpCnQKQ/69shM3/16QMe2/aVLHxJ75x2i//F/CA0bSs6tnzpre6h/P3LunEVs82tEf7UiAxWmzqDroVsLl1Dp0BlG35K5Lwqp0p6f/2w36OLM9JubAwN7Zabvc8naj6Zhw4axcuXZS3oeOXKEyspKcnJyGDly5OnHBw0axHPPPXfW/pMmTeLuu+/mnnvuSerclwtxzWDYFUl/v1cPTn+fujChvn3psOrX59wn93OfJfdzn01TRemTmweX3Qqv/wb2vtn8foU9YPQn4iMz2aY9P//Z7qpL4ZnN6b8B8Ogy6JKf3j5bImvDTHO2bNlCLBajvLycgoL3p3F36dKFG2+8sck2/fv3b3ZbJlzWD371ChxN4zy7wk7xfqUgye0Ao2bAwGugehPs2wFHDwAxyMmFsZ+C7n2zb0RG2a9bAYwqhU1V6e33uvL09tdSWXma6Vw2b94MnPs2Bm1dh1yYkryLrVrkr4bH+5WCqLAYhkyCq2dDp8L4Yx06Q3E/g4yCa+rI+PyZdBl8MQxog6eYoB2OzCQaZtrqpLgbh8Kmd2BX65bTSEi/nvH+JEltR2lx/IvtM6+lvq9OeXD7VW03/DsyE1A5OXDHxMRHSw7Vw4GjLVuLAOLHv+OqeH+SpLbloyPhkgSvMk30cwBg5uXQo+lbHbYJ7W5k5tR9m7LBxRfB56+DH/6h5ZPAWrIGwSk5ofjxL76odfVJklIrLxe+eCMsfgb2t/CeSYl8DgBMGgZXD0q4tLTy+3bADe8Ds29I/nyWDrnwtzfEjy9Jaru6FcCcKdCrKPnH/qvhMPOytnt66RTDTBYY0Qf+4WPJW9CuT/f48QwykhQMxV3i79vj+yfneAUd4a5rYEYAggy0w9NM2apP9/jdUp99DVa/DicaEz9Gx1yYPDw+Qz7XmCtJgVLYCe68Bsb0hV+sj8+LaY0xfeHW8ee/+3ZbYpjJIrk5cNNouH4orNsBa9+Cdw+dv91HusYX4rtiYDyNS5KCa1RZfGR9y25Yuw3eDJ+/TUFHuPLS+OKoqThdlWqGmSxU0BFuGArXD4kn86r9ULUvflOxhsb4hLGu+VDWA8qK4+dbgzCMKElqmdyc+Gq9o8viC6xW/+Vz4L3DcLIxfoVqQcf4qH5ZcfxLbZBH5A0zWSwUgu6F8Z/RZZmuRpKUCQUdobwk/pOtApzDJEmSDDOSJCngDDOSJCnQDDOSJCnQDDOSJCnQvJpJaoMKcnKpnTw102UkpCAnyffUaOd8DUgtZ5iR2qBQKERhrn+e7ZmvAanlPM0kSZICzTAjSZICzTAjSZICzTAjSZICzTAjSZICzTAjSZICzTAjSZICzTAjSZICzTAjSZICzTAjSZICzTAjSZICzTAjSZICzTAjSZICzTAjSZICzTAjSZICzTAjSZICzTAjSZICLS/TBUg6WywW42i0MdNlJKQgJ5dQKJTpMrKGrwGp5QwzUht0NNpI99XPZrqMhNROnkphrm8pyeJrQGo5TzNJkqRAM8xIkqRAM8xIkqRAM8xIkqRAM8yo3YjGIBaL//Op35LaF98DspPTzpW1DhyFje9A1T6o2g/vHYJT71+HjsG3noayYujfC8aUQacOGS1XUpJFY/BmDby1N/4+UF0L9Sfi2w4dg288EX8PKCuG4X2gb4/M1qvWM8wo67y1F9a8Ca9Vx9/MmlO1P/7zwtvwi3VwxUC4bghc3DV9tUpKvqMn4KW3Ye1bsO9I8/sdqoctu+M/v9kcDzXXlsO4/pCXm7ZylQSGGWWNuuPwxHp4pTLxtscb4Plt8OLb8LFR8FfDIdeTsFLgbNkN//UyHKxPvG3Vflj2EvzhTZg1Efp0T359Sg3DjLLCtjD8n7Vw+NiFHacxCk9tgs1VcM910KNLcuqTlFonG+Fnf4I/7bjwY+2pjZ+GvnlM/IuNixq3fX73VOC9WgVLn7vwIPNBVfth8TOw92DyjikpNU40wA9+n5wgc0o0Bis3whOvOFk4CAwzCrSte+A/no+PqCTbwXr437879zl3SZnVGIXH/hgfnU2FNW/CkxtTc2wlj2FGgXW4Hn7yQmqCzCkH/9JHNIV9SGq9326BN2pS28fq1+NzcdR2OWdGgRSLwc/WxSf9JuIrN0HXzvGrGL79m5a12fke/HEb3Dg08Tolpc6eWnjmtcTatOY9AGD5y/DV6VDQKbH+lB7tYmQmEolQUVHBoEGDyM/Pp6ysjLlz51JXV8fs2bMJhUIsWbIk02UqAVt2x+fKJKprZ+hWEP+diFUb4eDRxPtrCxofe5yTH72Z6G+eOWtbLBaj4R/v4+T0mcR2Vqa/uDRqPAn734HGhvi/x9rJaFu2Pv+xWDxgJDoy29r3gEP1sGpTYm2UPlk/MrNx40amTZtGOBymsLCQ4cOHs2fPHhYvXsz27dvZv38/AGPHjs1soUrIH95Ib38nG+OXbd80Or39JkPOXbOIvvQyjUt/QGjc5YR69Ty9LfrEr4i9upmcv7mH0ID+mSsyheoPQtWfYc9r0PCBSeInjsKrK6Dv5dCtNHP1pVq2Pv+79sV/0ulPO2D6WCjomN5+dX5ZPTITiUSYMWMG4XCYefPmUVNTw4YNGwiHwyxcuJBVq1axbt06QqEQo0cH8FOqnQofjC+Ml24vvp3a+TmpEurQgbz58+DYMRq//a+nH49VVRN9/MeEhg4h5zO3Zq7AFKqtgpd/DO+sPzPInPLuNlj/n1D5cvprS5dsff6f35b+Pk82wrokXjGl5MnqMHPvvfdSXV3NnDlzWLRoEUVFRae3VVRUMGbMGBoaGujfvz9du7rsa1C8sjMz/R6sT90VE6kWGjyInNtvI/bKBqKrnibW2Ejjw4sgFiN3/jxCudm33Onhd2HjE9DQgnlVb6+Bqg2prylTsu35P9kIG3dlpu91GXr/0bllbZjZunUry5cvp2fPnixYsKDJfcaNGwfAmDFjTj/2+9//nlAodNaPp6HajnfSPLT8QVUZ7PtC5cz6HAwcSOMPfkj0O98j9uY2cu75a0Jl2XmO5c3V8XkyLfXWH+BkK1aNDYpsev5rDkBDhkZJ99TGw5TalqydM7Ns2TKi0SizZs2iS5eml3Ht3Dk+A+yDYeaU73znO1x++eWn/72wsDA1hSohsVh8QbtMeSeDfV+oUF4eefO/QsPf/wPRlasIjRxBzqduyXRZKXEkAgeqE2sTbYQ9W6Df+NTUlGnZ9Pxn8ktFNBYPNP16nn9fpU/WhpnVq1cDMGnSpGb3qa6Ov9s1FWaGDx/OVVddlZri1GqHjsVvIpcp4aCvCFxYCB06QEMDoSvGE8rJzsHZmi2tb5etYQbImuc/03+H4YOGmbYma8PMrl3xE6r9+vVrcntDQwNr164Fmg4zyTR+/HjC4YBOtmhjuvQYwE0Va5rdfmoNieZ0zX//90OfbH6/5tagqNq9l9LScS2stvViHTvC0u8k95ixGI3fegQaTkLfMqI//U9ybrie0CW9k3L88sHlhE5kMGl+wN9NW8JVQ25JuN3eqgOUlo5MfkGtkOzXQKqff0jfa2D8Z75F//GfbXJbst4DoPn3gYr7v872F/69hdWqpUpKSli/fn2r2mZtmKmrqwOgvr7pk+DLly8nEolQVFTEgAEDztr+2c9+lkgkQo8ePZg5cybf/OY36dmzdVE8HA6ze7fLRybDRQ3559x+ag2J88nJadl+H9bY2Jie5zK/Ex2SfMjor1YQ2/QqOZ+/m5yJV9Hw5b+n8VuPkLtoIaEk3ElvT80eOJbgKoYpcvRo6xYFaoxG287fapJfA6l+/iF9r4Fhf3l/b0qq3wMADhyobTuvEwFZHGZKSkqora1lw4YNTJw48YxtNTU1zJ8/H4DRo0ef8Yd80UUXMX/+fK6//nq6dOnCiy++yIIFC3jppZdYv349+fnn/jBtrhYlR6cuRefcfug8Ezi75sffxKLR+CmrRI8TazxOnz59zlPlhYt17Mh7yTze7t1EH3uc0JBycm77NKHcXHLunEX03/+D6K9WkPvJT1xwH5f0vqTNjMzUNx5oVbsDdeG0PL8tkczXQDqef0jfa6DjOT65kvUecK5jdSno2GZeJ9nkQj4rQ7FYdt4P9N577+XRRx+lrKyM3/72t5SXlwOwbt067rrrLnbs2MHJkyf58pe/fN7Vf5988klmzpzJY489xuc///l0lK9mxGLwtZ+3ft7MQ5+Mfxs7cBQe+mXi7UeVwuwbWtd3IuoaG+i++tmkHCsWjdL4lfnE3nqbvO8+Sqhv3/jjjY00zv0KsV3vkLf0f1/w6YbayVMpzG0b34/q9sGLrTgLUD4J+qb+LGKLJOs1kK7nH9L3Glj7FvzsT61re6HvARA/ldW3R+vaKjWCOfurBSoqKujRowdVVVWMGDGCUaNGMXjwYCZMmMDAgQOZPHky0LL5Mh//+McpLCxs9bk8JU8oBGXFmes/k323VvTnTxB7fSs5d995+oMMIJSbS+4/fgWijTR+6xGy6XtNYQ/oXpZYm5w86D0iNfVkUjY+/5n8O8wJQe9umetfTcvaMFNaWsqaNWuYPn06+fn5VFZWUlxczNKlS1m1ahXbtsWXj0xk8m+yzivrwmTyKoK+AbuCIfbOO0T/4/8QGjaUnFs/ddb2UP9+5Nw5i9jm14j+akUGKkyd8smQm8Cy8+WToEPiZ5HbtGx9/i/pBh0ytM5fn+6Z61vNaxtjwikybNgwVq5cedbjR44cobKykpycHEaOPP+VCytWrKCuro4JEyakokwlaNyAxO+UmwwXdYbBF6e/3wsR6tuXDqt+fc59cj/3WXI/1/SVIUFW1AsuuxU2/rLpWxl80OAboTS1FzVmRLY+/3m5MLZfZm4tcMXA9Pep88vqMNOcLVu2EIvFKC8vp6DgzOnsd955JwMHDuTyyy8/PQH44YcfZuzYsdx+++0ZqlgfdHFXKC9J/60Frh4MuVk7lpmduvWBq+6G6o2w+9WzV/gtGQZll8FFl2SkPF2AawenP8x0zIUrzr74VW1AuwwzmzdvBpo+xTRixAh++tOf8q//+q/U19dTWlrKF77wBR588EE6dvRWqW3FDUPTG2Y65sJVg9LXn5InvwgGXQcDJ8KhMGz8VXykpmMhjJye6erUWv16woCesDOSvj6vvBQ6+zHQJhlmPuT+++/n/vvvT3dJStCIPjC2L2x8Jz39ffyy+GkmBVdOHnQrhdw8aCA+mVzBdtuVsOjp9NzNvlsB3JyFpyKzRbscND9XmFFwfPoKKOyUWJtD9fFLMs+3FsUHXfoRuLY8sX4kpV7vbnDTqMTatOY9AOCzVzoq05a1y5GZU/dtUrB1yYe7r4Wlz7X8m1lTS5OfS7cCuPPq+OWYktqeycOhMgJbWrggb6LvAQBTR8Aw51W1ae1yZEbZo7wEPn9daibmdiuA//5X0N0bpkttVm5O/EvN0OTdYuoMNwz19FIQGGYUeCNL4e8mJ3dOS98ecO9U+EjX5B1TUmp0zIO/vQEmJnGSfm4OzLwMbrnc+VVB0C5PMyn7DL4Y7psOv9oAf7qAyzXzcmDaaLhxmJdhS0GSlxuf1zK6DJa/HJ8X01plxXDHRFf6DRLDjLJGQaf4G9BVl8KabbDpHYi2cIX2zh1hwkC4rhx6nvtelpLasGGXwFc/Di9th7Xb4L3DLW87oCdcUw6X9fPLTNAYZpR1Bn4k/nOoPh5oqvbHf9499P5E4Y558SXRy4rj61WMLjv3nXglBUd+B7hxKFw/BN7eC2+F4+8B1bVw5C+rQYeAboXx94Cy4ngIKg3gvdcU59u3slbXznDdkDMfa4zGz397dZKU/XJC8YsEykvefywWi4/Y5oScC5NNDDNqVxw6ltq3UAhyDTFZx7d2SZIUaIYZSZIUaIYZSZIUaIYZSZIUaE4AltqggpxcaidPzXQZCSnIyc10CVnF14DUcoYZqQ0KhUIU5vrn2Z75GpBaztNMkiQp0AwzkiQp0AwzkiQp0AwzkiQp0AwzkiQp0AwzkiQp0AwzkiQp0AwzkiQp0AwzkiQp0AwzkiQp0AwzkiQp0AwzkiQp0AwzkiQp0AwzkiQp0AwzkiQp0AwzkiQp0AwzkiQp0AwzkiQp0AwzkiQp0AwzkiQp0AwzkiQp0AwzkiQp0AwzkiQp0AwzkiQp0PIyXYAkpUosBsePwKG9cDgMxw7ByWPxbQ3HoWYLFF0MhcUQ8qudFFihWCwWy3QRkpRMjScg/AZUbYQj755//44F0Gd0/Ce/a8rLk5RkhhlJWSMWg+qNsP35+MhLwkLQZxQMvgHyOiW7OkmpYpiRlBWOHoCt/z/UVl34sToVwfCPQo8BF34sSalnmJEUeAdrYOMv3p8PkyxDJkPZ5ck9pqTkcwKwpEA7tBc2/Cw+TybZ3lwd/22gkdo25+9LCqwTR+MjMqkIMqe8uRr27Uzd8SVdOE8zSQqsV1fAu9sSazPhTuhYCCfq4E8/aVmbTkUw8R4nBUttVdaPzEQiESoqKhg0aBD5+fmUlZUxd+5c6urqmD17NqFQiCVLlmS6TEkJ2rst8SAD8SCTXxT/3VLHD8O23yfel6T0yOo5Mxs3bmTatGmEw2EKCwsZPnw4e/bsYfHixWzfvp39+/cDMHbs2MwWKikhsRjsfCG9fe55DQZOdB0aqS3K2pGZSCTCjBkzCIfDzJs3j5qaGjZs2EA4HGbhwoWsWrWKdevWEQqFGD16dKbLlZSAg7vhSCTNncag+tU09ympRbI2zNx7771UV1czZ84cFi1aRFFR0eltFRUVjBkzhoaGBvr370/Xrn7VkoKkelNm+t3zKkSjmelbUvOyMsxs3bqV5cuX07NnTxYsWNDkPuPGjQNgzJgxZ2375S9/ydVXX01hYSEXXXQR11xzDVu2bElpzZJaLhkL47XGiaNwdF9m+pbUvKwMM8uWLSMajTJr1iy6dOnS5D6dO3cGzg4zixcv5rbbbuPaa69lxYoVLFu2jClTplBfX5/yuiWd3/G6+M0jM+XQ3sz1LalpWTkBePXq+EpXkyZNanaf6upq4Mwws337dubPn88jjzzCnDlzTj9+8803p6hSSYk6nOEwcXgvMDKzNUg6U1aGmV27dgHQr1+/Jrc3NDSwdu1a4Mww89hjj9GhQwe+8IUvJLWe8ePHEw6Hk3pMqb26etitfPFj/9bktlNryJxLp8L3f1/7peb3a24dmv9a9iuW3j3n7A2SLkhJSQnr169vVdusDDN1dXUAzZ4aWr58OZFIhKKiIgYMeP9Oci+88AJDhgzhJz/5Cf/8z/9MVVUVgwcP5hvf+Aaf+9znWl1POBxm9+7drW4v6X2HL2n+HNOpNWRaIpTT8n0/6OSJBv+epTYmK8NMSUkJtbW1bNiwgYkTJ56xraamhvnz5wMwevRoQqHQGdt2797N/fffz8KFCykrK+NHP/oRd9xxB7169WLKlCmtrkdScnTp2vzQy4m687fvVBgPMrFofP5NosfK65BDnz59zt+RpIRcyGdlVt7O4N577+XRRx+lrKyM3/72t5SXlwOwbt067rrrLnbs2MHJkyf58pe/fMbqv+Xl5bz11lv88pe/5JZbbgEgFosxduxYunXrxh/+8IdM/OdI+oDaKnhleevbX/ul+IjMscPw/NLE2/e/EgZd1/r+JSVfVl7NVFFRQY8ePaiqqmLEiBGMGjWKwYMHM2HCBAYOHMjkyZOBs69kKi4uBjhjBCYUCjFlyhRee+219P0HSGpW0cWZ7b9rhvuXdLasDDOlpaWsWbOG6dOnk5+fT2VlJcXFxSxdupRVq1axbVv8hi4fDjMjRoxo9pjHjh1Lac2SWiavIxQUZ67/TIcpSWfLyjADMGzYMFauXMnhw4c5fPgwL7/8Ml/84hepq6ujsrKSnJwcRo488/rKT3ziEwA888wzpx+LRqM8++yzXHHFFWmtX1Lzeg3MTL9denpvJqktysoJwOeyZcsWYrEY5eXlFBQUnLFtxowZXHfddXzxi19k37599O3blx/+8Ids2bKFZ599NkMVS/qwPmNhV+uu4LwgpWPhA9cMSGojsnZkpjmbN28Gmr6NQSgUYsWKFdx666088MADzJw5k127dvHUU0+dnmcjKfMKukGP/untM7cDlAxPb5+SWqbdjcycK8wAdOvWjaVLl7J0aSsuc5CUNoOuh/3vxC+xToeB18Tn60hqexyZkRRIRR+BAVelp6+L+kDfy9PTl6TEtbuRmVP3bZIUfP2vhH074WBNy9ucWgyvJQvsAeR1ghE3xRfak9Q2ZeWieZLajxP1sGE5HIkk/9i5HeCyz0C3S5J/bEnJY5iRFHgn6mHTE4mN0JxPh84w9lNwUe/kHVNSahhmJGWFaCNUvgw7X7rwScG9BsPQKe/fYVtS22aYkZRVDr8Lb/8R9lUm3rawBwyYCBcPcT0ZKUgMM5Ky0tFaqN4IkR3xf25OxwLoXgZ9xsR/G2Kk4DHMSMp6Dcfh0F44dih+OionBzoUxC/v7tTFACMFnWFGkiQFmisnSJKkQDPMSJKkQDPMSJKkQDPMSJKkQDPMSJKkQDPMSJKkQDPMSJKkQDPMSJKkQDPMSJKkQDPMSJKkQDPMSJKkQDPMSJKkQDPMSJKkQDPMSJKkQDPMSJKkQDPMSJKkQDPMSJKkQDPMSJKkQDPMSJKkQDPMSJKkQDPMSJKkQDPMSJKkQDPMSJKkQDPMSJKkQDPMSJKkQDPMSJKkQDPMSJKkQDPMSJKkQDPMSJKkQDPMSJKkQDPMSJKkQPu/gPKEsnfXOuEAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "f.export().draw(\"mpl\")" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "qlasskit_310-env", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.13" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/_sources/index.rst.txt b/_sources/index.rst.txt new file mode 100644 index 00000000..5b4865de --- /dev/null +++ b/_sources/index.rst.txt @@ -0,0 +1,51 @@ +Qlasskit +==================================== + +Qlasskit is a Python library that allows quantum developers to write classical algorithms in pure +Python and translate them into unitary operators (gates) for use in quantum circuits. + +.. toctree:: + :maxdepth: 2 + :caption: Qlasskit + + quickstart.ipynb + how_it_works.ipynb + supported + algorithms + exporter.ipynb + api + +.. toctree:: + :maxdepth: 2 + :caption: Examples + + example_grover.ipynb + example_grover_subset.ipynb + example_grover_hash.ipynb + example_grover_sudoku.ipynb + example_grover_factorize.ipynb + example_simon.ipynb + example_deutsch_jozsa.ipynb + example_unitary_of_f.ipynb + example_big_circuit.ipynb + + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` + + +Cite +====== + +.. code-block:: latex + + @software{qlasskit2023, + author = {Davide Gessa}, + title = {qlasskit: a python-to-quantum circuit compiler}, + url = {https://github.com/dakk/qlasskit}, + year = {2023}, + } \ No newline at end of file diff --git a/_sources/quickstart.ipynb.txt b/_sources/quickstart.ipynb.txt new file mode 100644 index 00000000..f1fe0361 --- /dev/null +++ b/_sources/quickstart.ipynb.txt @@ -0,0 +1,145 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Quickstart\n", + "\n", + "First install qlasskit using pip.\n", + "\n", + "```pip install qlasskit```\n", + "\n", + "We now define a qlassf function that sums two numbers:" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "from qlasskit import qlassf, Qint2\n", + "\n", + "\n", + "@qlassf\n", + "def sum_two_numbers(a: Qint2, b: Qint2) -> Qint2:\n", + " return a + b" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can now export the resulting quantum circuit to any supported framework:" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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7GIwzZgxgwMHDvSbdu7cOebOnUt6ejo//OEP6e7uprKykkmTJrF7925iYsw5iD3fCy+8A38+Cn0D3MsdGwNl0+DeeQoxEbtqa4L6V+HjQZ70Ez8BZi6EtJxwVhVco3LztXevNRLi06cVAVJSUti+fTurVq3iK1/5CnFxcdx999385Cc/MSrEwAqnB26CzxfBngbr6fdHPrRCbVwc/K8vQLKB58NFZPgmZkP5N61AO/mBddOzz2uddiz+AqTmgMPPa+rRRkE2gOnTp7N169ZwlhRSyfGwaA4sAtY+D2e7rAcEK8RERgeHA1KnWD9tJ6wn4Y9xQpqf19KjlVmHGEEyVJCJiIg5RuUR2cXnMIqIiPlG5RGZiIjYh4JMRESMpiATERGjKchERMRoCjIRETGagkxERIymIBMREaMpyERExGgKMhERMZqCTEREjKYgExERoynIRETEaAoyERExmoJMRESMpiATERGjKchERMRoCjIRETGagkxERIymIBMREaMpyERExGgKMhERMZqCTEREjKYgExERoynIRETEaAoyERExmoJMRESMpiATERGjKchERMRoCjIRETGagkxERIymIBMREaMpyERExGgKMhERMZqCTEREjKYgExERoynIRETEaAoyERExmoJMRESMpiATERGjKchERMRoCjIRETGagkxERIymIBMREaMpyERExGgKMhERMdqoCDKPx0NlZSV5eXk4nU6ys7NZtWoVnZ2dLF++HIfDwaZNmyJdpoiIBCAu0gWEWl1dHRUVFbjdbhITEyksLOTkyZNs3LiRhoYGWltbASgpKYlsoRJS3RdgnwvOdUOMA9KTYWYmxI6KXTkRe7N1kHk8HpYsWYLb7Wb16tWsXbuW5ORkAJ588kkeeeQR4uLicDgcFBUVRbhaCYW2Tnh1H7xzDHp6+08bHw/z82HBLBhr6/8TROzN1vujK1euxOVysWLFCjZs2HApxAAqKyspLi6mt7eXnJwcUlJSIliphIKrFX78e3jr8JUhBnC2C15+H376GnT2hL8+EQkO2wZZfX09VVVVpKens27dugHnmTdvHgDFxcWXXrsYfGVlZYwbNw6HwxGWeiW42jrh6R3Q3j30vMdPwy/+CH3e0NclIsFn2yDbsmULXq+XpUuXkpSUNOA88fHxQP8gO3LkCM899xwZGRnceOONYalVgm97vXU9bLiOfgR7XaGrR0RCx7ZBtn37dgAWLFgw6Dwul7XlujzIbrvtNlpaWnjxxRdZuHBhaIuUkOi5ANVH/W+361DwaxGR0LNtkB0/fhyAqVOnDji9t7eXXbt2Af2DLCbGtn+SUaO+xRql6K/DH8K5ruDXIyKhZduxWp2dnQB0dQ28ZaqqqsLj8ZCcnExubm5IayktLcXtdoe0j+H6/GPVJIzPpMXdQlaWPU+dTi9/iOu/+H8Calv+mUWcddcHuSKR6PHj5dWkJmfS0hJd24CMjAxqamoCamvbIMvIyKCtrY3a2lrKy8v7TWtpaWHNmjUAFBUVhXxAh9vtprm5OaR9DFdfX9+l39FSU7BNPP1RwG1bTjbR1mLPv4sI2HMbYNsgW7hwIfX19axfv55FixZRUFAAQHV1NcuWLcPj8QDhuRE6IyMj5H0MV2xs7KXfkydPjnA1oRHXewYAn8/n105K34VuUpw+Emz6dxGB6N0GjGQ7adsgq6ys5D/+4z9oampi9uzZzJw5k+7ubo4cOUJFRQU5OTm88sor/a6PhUqgh8uhsPZ56/6pzIzMS4Nd7Mbrgx+9BJ52/460y2c4eerowRBVJRIddv4cejogM9M+2wDbjmzIyspi586dLF68GKfTSWNjI6mpqWzevJlt27Zx6JA1RC0cQSbhFeOAW/L9b3drQfBrEZHQs+0RGcCsWbPYunXrFa93dHTQ2NhITEwMc+bMiUBlEmqfKYD9zdZIxOFYNBumpIW2JhEJDVsH2WD27duHz+ejoKCAhISEK6Y/++yzAOzfv7/fv3NycigtLQ1foRKwuFj4q9vhl29C/cmrz7toNnxeB+YixhqVQbZ3715g8NOK999//4D/fuihh/jlL38Z0tokeMaNgW/dAQdOwq7D1hGa77Lp5XnWKcis1EhVKCLBoCAbgM/nG/B1MU+MAwonWz8fn4cfvQgdPZDihAduinR1IhIMth3scTVDBZnYU8LYT75/TM+CFrGPUXlEdvE5jCIiYr5ReUQmIiL2oSATERGjKchERMRoCjIRETGagkxERIymIBMREaMpyERExGgKMhERMZqCTEREjKYgExERoynIRETEaAoyERExmoJMRESMpiATERGjKchERMRoCjIRETGagkxERIymIBMREaMpyERExGgKMhERMZqCTEREjKYgExERoynIRETEaAoyERExmoJMRESMpiATERGjKchERMRoCjIRETGagkxERIymIBMREaMpyERExGgKMhERMZqCTEREjKYgExERoynIRETEaAoyERExmoJMRESMpiATERGjKchERMRoCjIRETGagkxERIymIBMREaMpyERExGgKMhERMZqCTEREjKYgExERo42KIPN4PFRWVpKXl4fT6SQ7O5tVq1bR2dnJ8uXLcTgcbNq0KdJlioSUzwc9vdDZA33eSFcjkeDzWT8X/9su4iJdQKjV1dVRUVGB2+0mMTGRwsJCTp48ycaNG2loaKC1tRWAkpKSyBYqEiId3fB2A7x1BE53WK/FOGBOFtySDwUZ4HBEtkYJrc5WcNVByz7o7bFeO98JB16DrBJISo9kdSNn6yDzeDwsWbIEt9vN6tWrWbt2LcnJyQA8+eSTPPLII8TFxeFwOCgqKopwtSLB994J+Pe34EJf/9e9Pni/yfrJvxa+eRskjI1MjRI6Ph80vAmNbw883VVn/UyZB/l3mLtDY+tTiytXrsTlcrFixQo2bNhwKcQAKisrKS4upre3l5ycHFJSUiJYqUjwvXcCfrnzyhD7tMMfws+3W6cdxV4O/3HwELvciXesozNTTzfaNsjq6+upqqoiPT2ddevWDTjPvHnzACguLr702rPPPst9993H1KlTSUhIYObMmXz/+9+no6MjLHWLBENnD/zqLRjudunEafj9+yEtScLs9HE4UTP8+Zvfg48aQldPKNk2yLZs2YLX62Xp0qUkJSUNOE98fDzQP8g2bNhAbGwsP/rRj3j55Zf5zne+w89+9jPuuusuvF5dIRcz/PkonB/iSOzT3m6A8zoqsw3Xu+FpEw1se41s+/btACxYsGDQeVwuF9A/yF566SUmTZp06d+33347kyZNYunSpbz55pvcdtttIapYJHjeOux/m4/PQ90JKJsW/HokvHo6Aju6aj0OH5+BhAnBrii0bBtkx48fB2Dq1KkDTu/t7WXXrl1A/yC7PMQuKi0tBaC5uTmgWkpLS3G73QG1DbbPP1ZNwvhMWtwtZGXdGOlywm40vH9HTBz3rWsMqO3adf/E3pd/FNyCJOxmZs3ne1/6dUBt71/yEO8dez3IFQ0tIyODmho/zoVexrZB1tnZCUBXV9eA06uqqvB4PCQnJ5Obm3vVZe3YsQOAWbNmBVSL2+0OOASDra+v79LvaKkpnEbD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kRlqQgLcO8//due64MzH/j14+N554d/7l6EVToayaf61CeTzj42Br5Xr26Eleo26I7KLz2G0g7JpcPQjeLth+G2G+/X2F9003f+NpYTPX5bCyTPWNzgPh7+fP1hHfhnj/W8nEi7axzKYw2FtZOblhGb583LggTKNVIxmzjHw7QVw3cTQLP++UmtnRiSaKcgMFxsDS+fDXxQGL3AcDmt5S+fra+1NkOSEFQthdhCfNuQcA1+/BT4zI3jLFAmVUXdq0Y5iHLDkepiTBVv2wKnBnys8pGtS4Ks3W/cpiTkSxsJf3W59i/cL70DX+cCXNTMTvnKzrouKORRkNpI7Cf5nBdQcgzcPWddOhuu6ida9SaW5MFZrhZEcDut65qxM2HUYdh8Z/jd6O7DuEbs13xpEotPJYhJtsmxmbJx1w3R5HjR64GCL9fX0rlZrpJoPa6OVEm89sy87FWZkQk66Nl52kRwPdxXBojmwv9kaEORqBVfbJ0dqMQ7rfsTsVMhOg7lZ1hNDREykILMph8M6Qrv8FKHPB16ftRFTaNlfbAzMzbZ+LvL6rPVAQ+nFThRko4jDAbEKsFEtxoF1SC5iI9ovExERoynIRETEaAoyERExmoJMRESMpiATERGjKchERMRoCjIRETGagkxERIymIBMREaMpyERExGgKMhERMZqCTEREjKYgExERoynIRETEaAoyERExmoJMRESMpiATERGjKchERMRoCjIRETGagkxERIymIBMREaMpyERExGgKMhERMZqCTEREjKYgExERoynIRETEaAoyERExmoJMRESMpiATERGjKchERMRocZEuQCSUPu4BVxs0nYZT7fDxeev1rvPw5iHISoXrJsBY/Z9gSz4fnO2yPv+mVmjr7L8OVB+11oFrUyDGprv1veeh4xSc+xA6T8OFbuv1C91wvAZSroXkayFubGTrHAmHz+fzRboIkWDyeqG+xQqqAydhqBV8TCzMy4FbCiA7NRwVSqj19EJto7UONLcNPX+yE8rzrJ+JiSEvL+R8PjjbDE11cOoQ+LxXn9/hgEn5kFUCE7Otf5tEQSa2crAFfvNn8HQE1j7/WvjyTTApObh1SXh4fbDrEGx7D7ov+N/e4YCbp8M910O8oUco7aeg/hXrCCwQSZNg1mdhfGZw6wolBZnYQvcFeLEW3joy8mWNiYW7S+AzMyDGsD3T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", + "text/plain": [ + "
" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "circuit = sum_two_numbers.export(\"qiskit\")\n", + "circuit.draw(\"mpl\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The qlassf function can be also exported as a gate, if the destination framwork supports it. We can use `encode_input` and `decode_output` in order to convert from/to high level types of qlasskit without worrying about the binary representation." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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yWezOjonVylqktEpzMfJ1egEAABUHGXOAVkskrOb0SkAAEBN4DArAACAiVHmAAAATIwyBwAAYGKUOQAAABOjzAEAAJgYZQ4AAMDEKHMAAAAmRpkDAAAwMcocAACAiVHmAAAATIwyBwAAYGKUOQAAABOjzAEAAJgYZQ4AAMDEKHMAAAAmRpkDAAAwMcocAACAiVHmAAAATMzF6AAAAKCkoqIinT171ugYFeLl5SWLxWJ0jDqHMgcAQC109uxZ+fj4GB2jQrKysuTt7W10jDqHw6wAAAAmRpkDAAAwMcocAACAiVHmAAAATIwyBwAAYGKUOQAAABOjzAEAAJgYZQ4AAMDEKHMAAAAmRpkDAAAwMcocAAB1gJOTk5o2bao2bdooJCRE9erVq9D6Xl5emjp1qpycqA61Dc9mBQDAQfXt21e33nqrunfvri5dupR41uuRI0e0c+dObdmyRUuWLJHNZit1O15eXlq7dq0GDBigzp07a/z48SosLKyJHwHlYCkqKioyOgSA6lWQJ22Yb3QKoHaJmiQ5uxmdomzZ2dklyld5ODs76+6779aDDz6oyMjIcq937tw5vffee5o3b5727Nljn35pkZOkkydPqkePHjp48GCJbWRlZcnb27vCmXF1HH6s1GazKT4+XqGhofLw8FDz5s01efJkZWdna8KECbJYLFqwYIHRMYFaJzfvrMbNbK2YOIte+ijW6DgAyqFjx4769ttvtWjRohJF7vDhw1q5cqWWLl2q5cuX66uvvtKZM2fs893d3TVu3DglJibq2WeflZubW6lFLjo6utQiB+M49GHWpKQkDRkyRFarVd7e3goPD9exY8c0f/58HTp0SJmZmZKkLl26GBsUqIXe/uwpncr+zegYAMopNjZWc+fOlbu7u33aN998o1dffVVr1661/867lJOTkzp06KDx48drwoQJatiwoVxcXPT4449r1KhRysrKUq9evST9r8jt3Lmzxn4mlI/DjszZbDYNHz5cVqtVU6ZMUUZGhnbt2iWr1apZs2ZpzZo12rFjhywWiyIiIoyOC9QqKWm79OHXL2h8zDNGRwFQDk899ZReeukle5Hbv3+/+vTpo759+2rp0qWlFjlJKiws1L59+zR16lQFBwfrySefVF5enqQLo3wUOXNw2DI3adIkpaWl2f9S8fX1tc+Lj49XZGSk8vPzFRISIj8/PwOTArVLQWGBnn9/onq0G6zrOt9idBwAVzB58mQ988z//vCaN2+errnmGm3durVC28nNzdWzzz6rfv36KTs72z69sLBQY8eOpcjVYg5Z5pKTk7VixQoFBARo5syZpS7TrVs3SbrsyaFDhgyRxWLR008/XR0xgVrpw6+e19Fff1DsKM4lBWq7rl27au7cufbXDz/8sB555BGdO3euUtvz8vLS7Nmzi13E4OTkpIcfflgWi+Wq86J6OGSZW758uQoLCzVmzJgyrwTy9PSUVHaZe++995SUlFRdEYFaKSPzsJasn64xMU8psEGI0XEAXIarq6sWL14sF5cLp7/PnDlTL7zwQqW39/uLHU6dOiWr1SpJuv7663XPPfdcdWZUD4cscwkJCZKkqKioMpdJS0uTVHqZO336tB566KFif+0AdcGLH9ynwIatdWv/vxodBcAVTJo0yX7Od1JSkqZPn17pbZV21er111+vcePG2ZeZM2eO/P39ry40qoVDXs165MgRSVLLli1LnZ+fn68tW7ZIKr3MPf744woLC9OYMWM0duzYq87TvXt3+183gBHcXDy1KDblsst8sXOpdqV8rn/e/5VcnF1rKBlgnLZhbZWXn2N0jDJd7qa8Tk5OevDBB+2v//SnP+n8+fOVep+ybj9y8Ry5N998UxMmTJCvr6/uvPPOy47+tW3blidEVFJgYKASExMrta5DlrmLJ27m5JT+JV2xYoVsNpt8fX3VqlWrYvMSExP1+uuvV+mJnlarVenp6VW2PaCiPFy9Ljs/L/+cFn7yV/VsP1T+voFKt124h5Tt1IX9Njv3lNJtB1XPO0A+nvWrOy5QIzKOHVPu+bNGx6iUwYMH239/ffrpp5U+LehKRU6SZs+erQkTJkiSHnjgAb344osq63kDGRkZlcqBq+OQZS4wMFAnTpzQrl271Lt372LzMjIyFBcXJ0mKiIgodkJnQUGB7r33XsXGxqpjx45VmgcwkpuL52Xn553P0cns37QteY22Ja8pMf/LXUv15a6luuemObpt4CPVFROoUUFNm9b6kbmyytEf//hH+3+/8sorldp+eYqcJB04cEBffPGFoqOj1bZtW3Xr1q3MEaSgoCBG5irparqCQ5a56OhoJScna9asWYqJiVFYWJgkaceOHRo3bpz92XO/v1nwggUL9Msvv1T51auVHTYFqsqVHufl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", + "text/plain": [ + "
" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from qiskit import QuantumCircuit\n", + "\n", + "qc = QuantumCircuit(sum_two_numbers.num_qubits, len(sum_two_numbers.output_qubits))\n", + "\n", + "qc.initialize(\n", + " sum_two_numbers.encode_input(Qint2(1), Qint2(2)), sum_two_numbers.input_qubits\n", + ")\n", + "qc.append(sum_two_numbers.gate(\"qiskit\"), sum_two_numbers.qubits)\n", + "qc.measure(sum_two_numbers.output_qubits, range(len(sum_two_numbers.output_qubits)))\n", + "qc.draw(\"mpl\")" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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+Piod+/eOnLkiE6dOuUy1+l06h//+Id8fX11zz33GOOxsbGS9O+HN1wlJye7zAEAAGisqhSFPXr00IwZM3TgwAHdeeedmjdvnrZv3y6LxSKLxaK0tDTNnTtXd955p/bv368XX3xRPXr0qK21S5K+//57Xblyxe34rFmzJElPPPGEMT5lyhRJ1x4Auf4hjdWrV+vEiRP65S9/KR8fH2N80qRJ8vLy0sKFC10uI2dkZOj9999X586ddf/999f45wIAAKhLVf5FE6fTqZdffllLly41vhfvxu2enp763e9+p9dff93lC6JrwyuvvKI//vGPGjBggMLDw+Xr66ujR49qy5Ytstvtmj17thYtWmTMdzgceuCBB4yfuYuNjdWxY8f08ccfKyIiQvv27avwZ+4ef/xx42fuioqKqvwzd/yiCQAAuF5D+UWTKkdhqePHjyshIUG7d+827rdr27at+vXrp4kTJ7o8Kl2bduzYob/85S/65ptvdO7cOV25ckVBQUG699579eyzz7r90unCwkL94Q9/0IYNG5SVlaVWrVppxIgRev3119WmTRu3x3n33Xf11ltv6fDhw2revLn69eun1157rcpnQolCAABwvUYfhageohAAAFyvoURh7X+JIAAAABo8ohAAAABEIQAAAIhCAAAAiCgEAACAiEIAAACIKAQAAICIQgAAAIgoBAAAgIhCAAAAiCgEAACAiEIAAACIKAQAAICIQgAAAIgoBAAAgIhCAAAAiCgEAACAiEIAAACIKAQAAICIQgAAAIgoBAAAgIhCAAAAiCgEAACAiEIAAACIKAQAAICIQgAAAIgoBAAAgIhCAAAAiCgEAACAiEIAAACIKAQAAICIQgAAAIgoBAAAgIhCAAAAiCgEAACAiEIAAACIKAQAAICIQgAAAIgoBAAAgIhCAAAAiCgEAACAiEIAAACIKAQAAICIQgAAAIgoBAAAgIhCAAAAiCgEAACAiEIAAACIKAQAAICIQgAAAIgoBAAAgIhCAAAAiCgEAACAiEIAAACIKAQAAICIQgAAAIgoBAAAgIhCAAAAiCgEAACAiEIAAACIKAQAAICIQgAAAIgoBAAAgIhCAAAAiCgEAACAiEIAAACIKAQAAICIQgAAAIgoBAAAgIhCAAAAqAlE4ZkzZ/TWW28pPj5e7du3V/PmzdW2bVs9/vjj2rdvX5n5r7zy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", + "text/plain": [ + "
" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from qiskit import Aer, QuantumCircuit, transpile\n", + "from qiskit.visualization import plot_histogram\n", + "\n", + "simulator = Aer.get_backend(\"aer_simulator\")\n", + "circ = transpile(qc, simulator)\n", + "result = simulator.run(circ).result()\n", + "counts = result.get_counts(circ)\n", + "\n", + "counts_readable = sum_two_numbers.decode_counts(counts)\n", + "plot_histogram(counts_readable)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "qlasskit_310-env", + "language": "python", + "name": "python3" + }, + "language_info": { + "name": "python", + "version": "3.10.13" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/_sources/supported.rst.txt b/_sources/supported.rst.txt new file mode 100644 index 00000000..b1e371f6 --- /dev/null +++ b/_sources/supported.rst.txt @@ -0,0 +1,259 @@ +Supported python subset +==================================== + +Qlasskit supports a subset of python. This subset will be expanded, but it is +limited by the linearity of quantum circuits and by the number of qubits. + +The structure of a qlasskit function has the following pattern: + +.. code-block:: python + + @qlasskit + def f(param: type, [...param: type]) -> type: + statement + ... + statement + + +Types +----- + +All types has a static size. + +bool +^^^^ + +Boolean type. + + +Qint +^^^^ + +Unsigned integers; this type has subtypes for different Qint sizes (Qint2, Qint4, Qint8, Qint12, Qint16). +Single bit of the Qint are accessible by the subscript operator `[]`. + + +Tuple +^^^^^ + +Container type holding different types. + + +List +^^^^ + +Qlist[T, size] denotes a fixed-size list in qlasskit. +For example, the list `[1,2,3]` is typed as `Qlist[Qint2,3]`. + + +Matrix +^^^^ + +Qmatrix[T, m, n] denotes a fixed-size list in qlasskit. +For example, the matrix `[[1,2],[3,4]]` is typed as `Qmatrix[Qint2,2,2]`. + + + + + +Expressions +----------- + +Constants +^^^^^^^^^^^^^ + +.. code-block:: python + + True + +.. code-block:: python + + 42 + + +Tuple +^^^^^ + +.. code-block:: python + + (a, b) + +List (fixed size) +^^^^^^^^^^^^^^^^^ + +.. code-block:: python + + [a, b] + + +2D Matrix (fixed size) +^^^^^^^^^^^^^^^^^ + +.. code-block:: python + + [[a, b], [c,d]] + + +Subscript +^^^^^^^^^ + +.. code-block:: python + + a[0] + +Boolean operators +^^^^^^^^^^^^^^^^^ + +.. code-block:: python + + not a + +.. code-block:: python + + a and b + +.. code-block:: python + + a or b + + + +If expressions +^^^^^^^^^^^^^^ + +.. code-block:: python + + a if b else c + +Comparators +^^^^^^^^^^^ + +.. code-block:: python + + a > b or b <= c and c == d or c != a + + +Unary Op +^^^^^^^^^ + +.. code-block:: python + + ~a + + + +Bin Op +^^^^^^^^^ + +.. code-block:: python + + a << 1 + +.. code-block:: python + + a >> 2 + +.. code-block:: python + + a + b + +.. code-block:: python + + a - b + +.. code-block:: python + + a * b + +.. code-block:: python + + a % 2 + +.. note:: + Modulo operator only works with 2^n values. + + +Function call +^^^^^^^^^^^^^ + +Bultin functions: +- `print()`: debug function, ignore by conversion +- `len(Tuple)`, `len(Qlist)``: returns the length of a tuple +- `max(a, b, ...)`, `max(Tuple)`, `max(Qlist)`: returns the max of a tuple +- `min(a, b, ...)`, `min(Tuple)`, `min(Qlist)`: returns the min of a tuple +- `sum(Tuple)`, `sum(Qlist)`: returns the sum of the elemnts of a tuple / list +- `all(Tuple)`, `all(Qlist)`: returns True if all of the elemnts are True +- `any(Tuple)`, `any(Qlist)`: returns True if any of the elemnts are True + + + +Statements +---------- + +Assign +^^^^^^ + +.. code-block:: python + + c = not a + +Return +^^^^^^ + +.. code-block:: python + + return b+1 + + +For loop +^^^^^^^^ + +.. code-block:: python + + for i in range(4): + a += i + + +.. note:: + Please note that in qlasskit, for loops are unrolled during compilation. Therefore, + it is essential that the number of iterations for each for loop is known at the + time of compilation. + +Function def +^^^^^^^^^^^^ + +.. code-block:: python + + def f(t: Qlist[Qint4,2]) -> Qint4: + return t[0] + t[1] + + +If then else +^^^^^^^^^^^^ + +.. code-block:: python + + c = 0 + if cond: + c += 12 + else: + c += 13 + +.. note:: + At present, the if-then-else statement in qlasskit is designed to support branch bodies + that exclusively contain assignment statements. + + + +Quantum Hybrid +--------------- + +In a qlassf function, you have the option to utilize quantum gates through the Q module. It's +important to keep in mind that incorporating quantum gates within a qlasskit function leads +to a Python function that exhibits distinct behaviors compared to its quantum counterpart. + +.. code-block:: python + + def bell(a: bool, b: bool) -> bool: + return Q.CX(Q.H(a), b) + diff --git a/_static/_sphinx_javascript_frameworks_compat.js b/_static/_sphinx_javascript_frameworks_compat.js new file mode 100644 index 00000000..81415803 --- /dev/null +++ b/_static/_sphinx_javascript_frameworks_compat.js @@ -0,0 +1,123 @@ +/* Compatability shim for jQuery and underscores.js. + * + * Copyright Sphinx contributors + * Released under the two clause BSD licence + */ + +/** + * small helper function to urldecode strings + * + * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL + */ +jQuery.urldecode = function(x) { + if (!x) { + return x + } + return decodeURIComponent(x.replace(/\+/g, ' ')); +}; + +/** + * small helper function to urlencode strings + */ +jQuery.urlencode = encodeURIComponent; + +/** + * This function returns the parsed url parameters of the + * current request. Multiple values per key are supported, + * it will always return arrays of strings for the value parts. + */ +jQuery.getQueryParameters = function(s) { + if (typeof s === 'undefined') + s = document.location.search; + var parts = s.substr(s.indexOf('?') + 1).split('&'); + var result = {}; + for (var i = 0; i < parts.length; i++) { + var tmp = parts[i].split('=', 2); + var key = jQuery.urldecode(tmp[0]); + var value = jQuery.urldecode(tmp[1]); + if (key in result) + result[key].push(value); + else + result[key] = [value]; + } + return result; +}; + +/** + * highlight a given string on a jquery object by wrapping it in + * span elements with the given class name. + */ +jQuery.fn.highlightText = function(text, className) { + function highlight(node, addItems) { + if (node.nodeType === 3) { + var val = node.nodeValue; + var pos = val.toLowerCase().indexOf(text); + if (pos >= 0 && + !jQuery(node.parentNode).hasClass(className) && + !jQuery(node.parentNode).hasClass("nohighlight")) { + var span; + var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.className = className; + } + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + node.parentNode.insertBefore(span, node.parentNode.insertBefore( + document.createTextNode(val.substr(pos + text.length)), + node.nextSibling)); + node.nodeValue = val.substr(0, pos); + if (isInSVG) { + var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect"); + var bbox = node.parentElement.getBBox(); + rect.x.baseVal.value = bbox.x; + rect.y.baseVal.value = bbox.y; + rect.width.baseVal.value = bbox.width; + rect.height.baseVal.value = bbox.height; + rect.setAttribute('class', className); + addItems.push({ + "parent": node.parentNode, + "target": rect}); + } + } + } + else if (!jQuery(node).is("button, select, textarea")) { + jQuery.each(node.childNodes, function() { + highlight(this, addItems); + }); + } + } + var addItems = []; + var result = this.each(function() { + highlight(this, addItems); + }); + for (var i = 0; i < addItems.length; ++i) { + jQuery(addItems[i].parent).before(addItems[i].target); + } + return result; +}; + +/* + * backward compatibility for jQuery.browser + * This will be supported until firefox bug is fixed. + */ +if (!jQuery.browser) { + jQuery.uaMatch = function(ua) { + ua = ua.toLowerCase(); + + var match = /(chrome)[ \/]([\w.]+)/.exec(ua) || + /(webkit)[ \/]([\w.]+)/.exec(ua) || + /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || + /(msie) ([\w.]+)/.exec(ua) || + ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || + []; + + return { + browser: match[ 1 ] || "", + version: match[ 2 ] || "0" + }; + }; + jQuery.browser = {}; + jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true; +} diff --git a/_static/basic.css b/_static/basic.css new file mode 100644 index 00000000..30fee9d0 --- /dev/null +++ b/_static/basic.css @@ -0,0 +1,925 @@ +/* + * basic.css + * ~~~~~~~~~ + * + * Sphinx stylesheet -- basic theme. + * + * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/* -- main layout ----------------------------------------------------------- */ + +div.clearer { + clear: both; +} + +div.section::after { + display: block; + content: ''; + clear: left; +} + +/* -- relbar ---------------------------------------------------------------- */ + +div.related { + width: 100%; + font-size: 90%; +} + +div.related h3 { + display: none; +} + +div.related ul { + margin: 0; + padding: 0 0 0 10px; + list-style: none; +} + +div.related li { + display: inline; +} + +div.related li.right { + float: right; + margin-right: 5px; +} + +/* -- sidebar --------------------------------------------------------------- */ + +div.sphinxsidebarwrapper { + padding: 10px 5px 0 10px; +} + +div.sphinxsidebar { + float: left; + width: 230px; + margin-left: -100%; + font-size: 90%; + word-wrap: break-word; + overflow-wrap : break-word; +} + +div.sphinxsidebar ul { + list-style: none; +} + +div.sphinxsidebar ul ul, +div.sphinxsidebar ul.want-points { + margin-left: 20px; + list-style: square; +} + +div.sphinxsidebar ul ul { + margin-top: 0; + margin-bottom: 0; +} + +div.sphinxsidebar form { + margin-top: 10px; +} + +div.sphinxsidebar input { + border: 1px solid #98dbcc; + font-family: sans-serif; + font-size: 1em; +} + +div.sphinxsidebar #searchbox form.search { + overflow: hidden; +} + +div.sphinxsidebar #searchbox input[type="text"] { + float: left; + width: 80%; + padding: 0.25em; + box-sizing: border-box; +} + +div.sphinxsidebar #searchbox input[type="submit"] { + float: left; + width: 20%; + border-left: none; + padding: 0.25em; + box-sizing: border-box; +} + + +img { + border: 0; + max-width: 100%; +} + +/* -- search page ----------------------------------------------------------- */ + +ul.search { + margin: 10px 0 0 20px; + padding: 0; +} + +ul.search li { + padding: 5px 0 5px 20px; + background-image: url(file.png); + background-repeat: no-repeat; + background-position: 0 7px; +} + +ul.search li a { + font-weight: bold; +} + +ul.search li p.context { + color: #888; + margin: 2px 0 0 30px; + text-align: left; +} + +ul.keywordmatches li.goodmatch a { + font-weight: bold; +} + +/* -- index page ------------------------------------------------------------ */ + +table.contentstable { + width: 90%; + margin-left: auto; + margin-right: auto; +} + +table.contentstable p.biglink { + line-height: 150%; +} + +a.biglink { + font-size: 1.3em; +} + +span.linkdescr { + font-style: italic; + padding-top: 5px; + font-size: 90%; +} + +/* -- general index --------------------------------------------------------- */ + +table.indextable { + width: 100%; +} + +table.indextable td { + text-align: left; + vertical-align: top; +} + +table.indextable ul { + margin-top: 0; + margin-bottom: 0; + list-style-type: none; +} + +table.indextable > tbody > tr > td > ul { + padding-left: 0em; +} + +table.indextable tr.pcap { + height: 10px; +} + +table.indextable tr.cap { + margin-top: 10px; + background-color: #f2f2f2; +} + +img.toggler { + margin-right: 3px; + margin-top: 3px; + cursor: pointer; +} + +div.modindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +div.genindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +/* -- domain module index --------------------------------------------------- */ + +table.modindextable td { + padding: 2px; + border-collapse: collapse; +} + +/* -- general body styles --------------------------------------------------- */ + +div.body { + min-width: 360px; + max-width: 800px; +} + +div.body p, div.body dd, div.body li, div.body blockquote { + -moz-hyphens: auto; + -ms-hyphens: auto; + -webkit-hyphens: auto; + hyphens: auto; +} + +a.headerlink { + visibility: hidden; +} + +a:visited { + color: #551A8B; +} + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink, +caption:hover > a.headerlink, +p.caption:hover > a.headerlink, +div.code-block-caption:hover > a.headerlink { + visibility: visible; +} + +div.body p.caption { + text-align: inherit; +} + +div.body td { + text-align: left; +} + +.first { + margin-top: 0 !important; +} + +p.rubric { + margin-top: 30px; + font-weight: bold; +} + +img.align-left, figure.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; +} + +img.align-right, figure.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; +} + +img.align-center, figure.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +img.align-default, figure.align-default, .figure.align-default { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + text-align: center; +} + +.align-default { + text-align: center; +} + +.align-right { + text-align: right; +} + +/* -- sidebars -------------------------------------------------------------- */ + +div.sidebar, +aside.sidebar { + margin: 0 0 0.5em 1em; + border: 1px solid #ddb; + padding: 7px; + background-color: #ffe; + width: 40%; + float: right; + clear: right; + overflow-x: auto; +} + +p.sidebar-title { + font-weight: bold; +} + +nav.contents, +aside.topic, +div.admonition, div.topic, blockquote { + clear: left; +} + +/* -- topics ---------------------------------------------------------------- */ + +nav.contents, +aside.topic, +div.topic { + border: 1px solid #ccc; + padding: 7px; + margin: 10px 0 10px 0; +} + +p.topic-title { + font-size: 1.1em; + font-weight: bold; + margin-top: 10px; +} + +/* -- admonitions ----------------------------------------------------------- */ + +div.admonition { + margin-top: 10px; + margin-bottom: 10px; + padding: 7px; +} + +div.admonition dt { + font-weight: bold; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +/* -- content of sidebars/topics/admonitions -------------------------------- */ + +div.sidebar > :last-child, +aside.sidebar > :last-child, +nav.contents > :last-child, +aside.topic > :last-child, +div.topic > :last-child, +div.admonition > :last-child { + margin-bottom: 0; +} + +div.sidebar::after, +aside.sidebar::after, +nav.contents::after, +aside.topic::after, +div.topic::after, +div.admonition::after, +blockquote::after { + display: block; + content: ''; + clear: both; +} + +/* -- tables ---------------------------------------------------------------- */ + +table.docutils { + margin-top: 10px; + margin-bottom: 10px; + border: 0; + border-collapse: collapse; +} + +table.align-center { + margin-left: auto; + margin-right: auto; +} + +table.align-default { + margin-left: auto; + margin-right: auto; +} + +table caption span.caption-number { + font-style: italic; +} + +table caption span.caption-text { +} + +table.docutils td, table.docutils th { + padding: 1px 8px 1px 5px; + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 1px solid #aaa; +} + +th { + text-align: left; + padding-right: 5px; +} + +table.citation { + border-left: solid 1px gray; + margin-left: 1px; +} + +table.citation td { + border-bottom: none; +} + +th > :first-child, +td > :first-child { + margin-top: 0px; +} + +th > :last-child, +td > :last-child { + margin-bottom: 0px; +} + +/* -- figures --------------------------------------------------------------- */ + +div.figure, figure { + margin: 0.5em; + padding: 0.5em; +} + +div.figure p.caption, figcaption { + padding: 0.3em; +} + +div.figure p.caption span.caption-number, +figcaption span.caption-number { + font-style: italic; +} + +div.figure p.caption span.caption-text, +figcaption span.caption-text { +} + +/* -- field list styles ----------------------------------------------------- */ + +table.field-list td, table.field-list th { + border: 0 !important; +} + +.field-list ul { + margin: 0; + padding-left: 1em; +} + +.field-list p { + margin: 0; +} + +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +/* -- hlist styles ---------------------------------------------------------- */ + +table.hlist { + margin: 1em 0; +} + +table.hlist td { + vertical-align: top; +} + +/* -- object description styles --------------------------------------------- */ + +.sig { + font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; +} + +.sig-name, code.descname { + background-color: transparent; + font-weight: bold; +} + +.sig-name { + font-size: 1.1em; +} + +code.descname { + font-size: 1.2em; +} + +.sig-prename, code.descclassname { + background-color: transparent; +} + +.optional { + font-size: 1.3em; +} + +.sig-paren { + font-size: larger; +} + +.sig-param.n { + font-style: italic; +} + +/* C++ specific styling */ + +.sig-inline.c-texpr, +.sig-inline.cpp-texpr { + font-family: unset; +} + +.sig.c .k, .sig.c .kt, +.sig.cpp .k, .sig.cpp .kt { + color: #0033B3; +} + +.sig.c .m, +.sig.cpp .m { + color: #1750EB; +} + +.sig.c .s, .sig.c .sc, +.sig.cpp .s, .sig.cpp .sc { + color: #067D17; +} + + +/* -- other body styles ----------------------------------------------------- */ + +ol.arabic { + list-style: decimal; +} + +ol.loweralpha { + list-style: lower-alpha; +} + +ol.upperalpha { + list-style: upper-alpha; +} + +ol.lowerroman { + list-style: lower-roman; +} + +ol.upperroman { + list-style: upper-roman; +} + +:not(li) > ol > li:first-child > :first-child, +:not(li) > ul > li:first-child > :first-child { + margin-top: 0px; +} + +:not(li) > ol > li:last-child > :last-child, +:not(li) > ul > li:last-child > :last-child { + margin-bottom: 0px; +} + +ol.simple ol p, +ol.simple ul p, +ul.simple ol p, +ul.simple ul p { + margin-top: 0; +} + +ol.simple > li:not(:first-child) > p, +ul.simple > li:not(:first-child) > p { + margin-top: 0; +} + +ol.simple p, +ul.simple p { + margin-bottom: 0; +} + +aside.footnote > span, +div.citation > span { + float: left; +} +aside.footnote > span:last-of-type, +div.citation > span:last-of-type { + padding-right: 0.5em; +} +aside.footnote > p { + margin-left: 2em; +} +div.citation > p { + margin-left: 4em; +} +aside.footnote > p:last-of-type, +div.citation > p:last-of-type { + margin-bottom: 0em; +} +aside.footnote > p:last-of-type:after, +div.citation > p:last-of-type:after { + content: ""; + clear: both; +} + +dl.field-list { + display: grid; + grid-template-columns: fit-content(30%) auto; +} + +dl.field-list > dt { + font-weight: bold; + word-break: break-word; + padding-left: 0.5em; + padding-right: 5px; +} + +dl.field-list > dd { + padding-left: 0.5em; + margin-top: 0em; + margin-left: 0em; + margin-bottom: 0em; +} + +dl { + margin-bottom: 15px; +} + +dd > :first-child { + margin-top: 0px; +} + +dd ul, dd table { + margin-bottom: 10px; +} + +dd { + margin-top: 3px; + margin-bottom: 10px; + margin-left: 30px; +} + +.sig dd { + margin-top: 0px; + margin-bottom: 0px; +} + +.sig dl { + margin-top: 0px; + margin-bottom: 0px; +} + +dl > dd:last-child, +dl > dd:last-child > :last-child { + margin-bottom: 0; +} + +dt:target, span.highlighted { + background-color: #fbe54e; +} + +rect.highlighted { + fill: #fbe54e; +} + +dl.glossary dt { + font-weight: bold; + font-size: 1.1em; +} + +.versionmodified { + font-style: italic; +} + +.system-message { + background-color: #fda; + padding: 5px; + border: 3px solid red; +} + +.footnote:target { + background-color: #ffa; +} + +.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; +} + +.line-block .line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; +} + +.guilabel, .menuselection { + font-family: sans-serif; +} + +.accelerator { + text-decoration: underline; +} + +.classifier { + font-style: oblique; +} + +.classifier:before { + font-style: normal; + margin: 0 0.5em; + content: ":"; + display: inline-block; +} + +abbr, acronym { + border-bottom: dotted 1px; + cursor: help; +} + +.translated { + background-color: rgba(207, 255, 207, 0.2) +} + +.untranslated { + background-color: rgba(255, 207, 207, 0.2) +} + +/* -- code displays --------------------------------------------------------- */ + +pre { + overflow: auto; + overflow-y: hidden; /* fixes display issues on Chrome browsers */ +} + +pre, div[class*="highlight-"] { + clear: both; +} + +span.pre { + -moz-hyphens: none; + -ms-hyphens: none; + -webkit-hyphens: none; + hyphens: none; + white-space: nowrap; +} + +div[class*="highlight-"] { + margin: 1em 0; +} + +td.linenos pre { + border: 0; + background-color: transparent; + color: #aaa; +} + +table.highlighttable { + display: block; +} + +table.highlighttable tbody { + display: block; +} + +table.highlighttable tr { + display: flex; +} + +table.highlighttable td { + margin: 0; + padding: 0; +} + +table.highlighttable td.linenos { + padding-right: 0.5em; +} + +table.highlighttable td.code { + flex: 1; + overflow: hidden; +} + +.highlight .hll { + display: block; +} + +div.highlight pre, +table.highlighttable pre { + margin: 0; +} + +div.code-block-caption + div { + margin-top: 0; +} + +div.code-block-caption { + margin-top: 1em; + padding: 2px 5px; + font-size: small; +} + +div.code-block-caption code { + background-color: transparent; +} + +table.highlighttable td.linenos, +span.linenos, +div.highlight span.gp { /* gp: Generic.Prompt */ + user-select: none; + -webkit-user-select: text; /* Safari fallback only */ + -webkit-user-select: none; /* Chrome/Safari */ + -moz-user-select: none; /* Firefox */ + -ms-user-select: none; /* IE10+ */ +} + +div.code-block-caption span.caption-number { + padding: 0.1em 0.3em; + font-style: italic; +} + +div.code-block-caption span.caption-text { +} + +div.literal-block-wrapper { + margin: 1em 0; +} + +code.xref, a code { + background-color: transparent; + font-weight: bold; +} + +h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { + background-color: transparent; +} + +.viewcode-link { + float: right; +} + +.viewcode-back { + float: right; + font-family: sans-serif; +} + +div.viewcode-block:target { + margin: -1px -10px; + padding: 0 10px; +} + +/* -- math display ---------------------------------------------------------- */ + +img.math { + vertical-align: middle; +} + +div.body div.math p { + text-align: center; +} + +span.eqno { + float: right; +} + +span.eqno a.headerlink { + position: absolute; + z-index: 1; +} + +div.math:hover a.headerlink { + visibility: visible; +} + +/* -- printout stylesheet --------------------------------------------------- */ + +@media print { + div.document, + div.documentwrapper, + div.bodywrapper { + margin: 0 !important; + width: 100%; + } + + div.sphinxsidebar, + div.related, + div.footer, + #top-link { + display: none; + } +} \ No newline at end of file diff --git a/_static/css/badge_only.css b/_static/css/badge_only.css new file mode 100644 index 00000000..c718cee4 --- /dev/null +++ b/_static/css/badge_only.css @@ -0,0 +1 @@ +.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}@font-face{font-family:FontAwesome;font-style:normal;font-weight:400;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#FontAwesome) format("svg")}.fa:before{font-family:FontAwesome;font-style:normal;font-weight:400;line-height:1}.fa:before,a .fa{text-decoration:inherit}.fa:before,a .fa,li .fa{display:inline-block}li .fa-large:before{width:1.875em}ul.fas{list-style-type:none;margin-left:2em;text-indent:-.8em}ul.fas li .fa{width:.8em}ul.fas li .fa-large:before{vertical-align:baseline}.fa-book:before,.icon-book:before{content:"\f02d"}.fa-caret-down:before,.icon-caret-down:before{content:"\f0d7"}.fa-caret-up:before,.icon-caret-up:before{content:"\f0d8"}.fa-caret-left:before,.icon-caret-left:before{content:"\f0d9"}.fa-caret-right:before,.icon-caret-right:before{content:"\f0da"}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60}.rst-versions .rst-current-version:after{clear:both;content:"";display:block}.rst-versions .rst-current-version .fa{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}} \ No newline at end of file diff --git a/_static/css/fonts/Roboto-Slab-Bold.woff b/_static/css/fonts/Roboto-Slab-Bold.woff new file mode 100644 index 00000000..6cb60000 Binary files /dev/null and b/_static/css/fonts/Roboto-Slab-Bold.woff differ diff --git a/_static/css/fonts/Roboto-Slab-Bold.woff2 b/_static/css/fonts/Roboto-Slab-Bold.woff2 new file mode 100644 index 00000000..7059e231 Binary files /dev/null and b/_static/css/fonts/Roboto-Slab-Bold.woff2 differ diff --git a/_static/css/fonts/Roboto-Slab-Regular.woff b/_static/css/fonts/Roboto-Slab-Regular.woff new file mode 100644 index 00000000..f815f63f Binary files /dev/null and b/_static/css/fonts/Roboto-Slab-Regular.woff differ diff --git a/_static/css/fonts/Roboto-Slab-Regular.woff2 b/_static/css/fonts/Roboto-Slab-Regular.woff2 new file mode 100644 index 00000000..f2c76e5b Binary files /dev/null and b/_static/css/fonts/Roboto-Slab-Regular.woff2 differ diff --git a/_static/css/fonts/fontawesome-webfont.eot b/_static/css/fonts/fontawesome-webfont.eot new file mode 100644 index 00000000..e9f60ca9 Binary files /dev/null and b/_static/css/fonts/fontawesome-webfont.eot differ diff --git a/_static/css/fonts/fontawesome-webfont.svg b/_static/css/fonts/fontawesome-webfont.svg new file mode 100644 index 00000000..855c845e --- /dev/null +++ b/_static/css/fonts/fontawesome-webfont.svg @@ -0,0 +1,2671 @@ + + + + +Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016 + By ,,, +Copyright Dave Gandy 2016. All rights reserved. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/_static/css/fonts/fontawesome-webfont.ttf b/_static/css/fonts/fontawesome-webfont.ttf new file mode 100644 index 00000000..35acda2f Binary files /dev/null and b/_static/css/fonts/fontawesome-webfont.ttf differ diff --git a/_static/css/fonts/fontawesome-webfont.woff b/_static/css/fonts/fontawesome-webfont.woff new file mode 100644 index 00000000..400014a4 Binary files /dev/null and b/_static/css/fonts/fontawesome-webfont.woff differ diff --git a/_static/css/fonts/fontawesome-webfont.woff2 b/_static/css/fonts/fontawesome-webfont.woff2 new file mode 100644 index 00000000..4d13fc60 Binary files /dev/null and b/_static/css/fonts/fontawesome-webfont.woff2 differ diff --git a/_static/css/fonts/lato-bold-italic.woff b/_static/css/fonts/lato-bold-italic.woff new file mode 100644 index 00000000..88ad05b9 Binary files /dev/null and b/_static/css/fonts/lato-bold-italic.woff differ diff --git a/_static/css/fonts/lato-bold-italic.woff2 b/_static/css/fonts/lato-bold-italic.woff2 new file mode 100644 index 00000000..c4e3d804 Binary files /dev/null and b/_static/css/fonts/lato-bold-italic.woff2 differ diff --git a/_static/css/fonts/lato-bold.woff b/_static/css/fonts/lato-bold.woff new file mode 100644 index 00000000..c6dff51f Binary files /dev/null and b/_static/css/fonts/lato-bold.woff differ diff --git a/_static/css/fonts/lato-bold.woff2 b/_static/css/fonts/lato-bold.woff2 new file mode 100644 index 00000000..bb195043 Binary files /dev/null and b/_static/css/fonts/lato-bold.woff2 differ diff --git a/_static/css/fonts/lato-normal-italic.woff b/_static/css/fonts/lato-normal-italic.woff new file mode 100644 index 00000000..76114bc0 Binary files /dev/null and b/_static/css/fonts/lato-normal-italic.woff differ diff --git a/_static/css/fonts/lato-normal-italic.woff2 b/_static/css/fonts/lato-normal-italic.woff2 new file mode 100644 index 00000000..3404f37e Binary files /dev/null and b/_static/css/fonts/lato-normal-italic.woff2 differ diff --git a/_static/css/fonts/lato-normal.woff b/_static/css/fonts/lato-normal.woff new file mode 100644 index 00000000..ae1307ff Binary files /dev/null and b/_static/css/fonts/lato-normal.woff differ diff --git a/_static/css/fonts/lato-normal.woff2 b/_static/css/fonts/lato-normal.woff2 new file mode 100644 index 00000000..3bf98433 Binary files /dev/null and b/_static/css/fonts/lato-normal.woff2 differ diff --git a/_static/css/theme.css b/_static/css/theme.css new file mode 100644 index 00000000..19a446a0 --- /dev/null +++ b/_static/css/theme.css @@ -0,0 +1,4 @@ +html{box-sizing:border-box}*,:after,:before{box-sizing:inherit}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}[hidden],audio:not([controls]){display:none}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}blockquote{margin:0}dfn{font-style:italic}ins{background:#ff9;text-decoration:none}ins,mark{color:#000}mark{background:#ff0;font-style:italic;font-weight:700}.rst-content code,.rst-content tt,code,kbd,pre,samp{font-family:monospace,serif;_font-family:courier new,monospace;font-size:1em}pre{white-space:pre}q{quotes:none}q:after,q:before{content:"";content:none}small{font-size:85%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}dl,ol,ul{margin:0;padding:0;list-style:none;list-style-image:none}li{list-style:none}dd{margin:0}img{border:0;-ms-interpolation-mode:bicubic;vertical-align:middle;max-width:100%}svg:not(:root){overflow:hidden}figure,form{margin:0}label{cursor:pointer}button,input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}button,input{line-height:normal}button,input[type=button],input[type=reset],input[type=submit]{cursor:pointer;-webkit-appearance:button;*overflow:visible}button[disabled],input[disabled]{cursor:default}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}textarea{resize:vertical}table{border-collapse:collapse;border-spacing:0}td{vertical-align:top}.chromeframe{margin:.2em 0;background:#ccc;color:#000;padding:.2em 0}.ir{display:block;border:0;text-indent:-999em;overflow:hidden;background-color:transparent;background-repeat:no-repeat;text-align:left;direction:ltr;*line-height:0}.ir br{display:none}.hidden{display:none!important;visibility:hidden}.visuallyhidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.visuallyhidden.focusable:active,.visuallyhidden.focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.invisible{visibility:hidden}.relative{position:relative}big,small{font-size:100%}@media print{body,html,section{background:none!important}*{box-shadow:none!important;text-shadow:none!important;filter:none!important;-ms-filter:none!important}a,a:visited{text-decoration:underline}.ir a:after,a[href^="#"]:after,a[href^="javascript:"]:after{content:""}blockquote,pre{page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}.rst-content .toctree-wrapper>p.caption,h2,h3,p{orphans:3;widows:3}.rst-content .toctree-wrapper>p.caption,h2,h3{page-break-after:avoid}}.btn,.fa:before,.icon:before,.rst-content .admonition,.rst-content .admonition-title:before,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .code-block-caption .headerlink:before,.rst-content .danger,.rst-content .eqno .headerlink:before,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content p .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-alert,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before,.wy-menu-vertical li button.toctree-expand:before,input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week],select,textarea{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}/*! + * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */@font-face{font-family:FontAwesome;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713);src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix&v=4.7.0) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#fontawesomeregular) format("svg");font-weight:400;font-style:normal}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li button.toctree-expand{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14286em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14286em;width:2.14286em;top:.14286em;text-align:center}.fa-li.fa-lg{left:-1.85714em}.fa-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa-pull-left.icon,.fa.fa-pull-left,.rst-content .code-block-caption .fa-pull-left.headerlink,.rst-content .eqno .fa-pull-left.headerlink,.rst-content .fa-pull-left.admonition-title,.rst-content code.download span.fa-pull-left:first-child,.rst-content dl dt .fa-pull-left.headerlink,.rst-content h1 .fa-pull-left.headerlink,.rst-content h2 .fa-pull-left.headerlink,.rst-content h3 .fa-pull-left.headerlink,.rst-content h4 .fa-pull-left.headerlink,.rst-content h5 .fa-pull-left.headerlink,.rst-content h6 .fa-pull-left.headerlink,.rst-content p .fa-pull-left.headerlink,.rst-content table>caption .fa-pull-left.headerlink,.rst-content tt.download span.fa-pull-left:first-child,.wy-menu-vertical li.current>a button.fa-pull-left.toctree-expand,.wy-menu-vertical li.on a button.fa-pull-left.toctree-expand,.wy-menu-vertical li button.fa-pull-left.toctree-expand{margin-right:.3em}.fa-pull-right.icon,.fa.fa-pull-right,.rst-content .code-block-caption .fa-pull-right.headerlink,.rst-content .eqno .fa-pull-right.headerlink,.rst-content .fa-pull-right.admonition-title,.rst-content code.download span.fa-pull-right:first-child,.rst-content dl dt .fa-pull-right.headerlink,.rst-content h1 .fa-pull-right.headerlink,.rst-content h2 .fa-pull-right.headerlink,.rst-content h3 .fa-pull-right.headerlink,.rst-content h4 .fa-pull-right.headerlink,.rst-content h5 .fa-pull-right.headerlink,.rst-content h6 .fa-pull-right.headerlink,.rst-content p .fa-pull-right.headerlink,.rst-content table>caption .fa-pull-right.headerlink,.rst-content tt.download span.fa-pull-right:first-child,.wy-menu-vertical li.current>a button.fa-pull-right.toctree-expand,.wy-menu-vertical li.on a button.fa-pull-right.toctree-expand,.wy-menu-vertical li button.fa-pull-right.toctree-expand{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left,.pull-left.icon,.rst-content .code-block-caption .pull-left.headerlink,.rst-content .eqno .pull-left.headerlink,.rst-content .pull-left.admonition-title,.rst-content code.download span.pull-left:first-child,.rst-content dl dt .pull-left.headerlink,.rst-content h1 .pull-left.headerlink,.rst-content h2 .pull-left.headerlink,.rst-content h3 .pull-left.headerlink,.rst-content h4 .pull-left.headerlink,.rst-content h5 .pull-left.headerlink,.rst-content h6 .pull-left.headerlink,.rst-content p .pull-left.headerlink,.rst-content table>caption .pull-left.headerlink,.rst-content tt.download span.pull-left:first-child,.wy-menu-vertical li.current>a button.pull-left.toctree-expand,.wy-menu-vertical li.on a button.pull-left.toctree-expand,.wy-menu-vertical li button.pull-left.toctree-expand{margin-right:.3em}.fa.pull-right,.pull-right.icon,.rst-content .code-block-caption .pull-right.headerlink,.rst-content .eqno .pull-right.headerlink,.rst-content .pull-right.admonition-title,.rst-content code.download span.pull-right:first-child,.rst-content dl dt .pull-right.headerlink,.rst-content h1 .pull-right.headerlink,.rst-content h2 .pull-right.headerlink,.rst-content h3 .pull-right.headerlink,.rst-content h4 .pull-right.headerlink,.rst-content h5 .pull-right.headerlink,.rst-content h6 .pull-right.headerlink,.rst-content p .pull-right.headerlink,.rst-content table>caption .pull-right.headerlink,.rst-content tt.download span.pull-right:first-child,.wy-menu-vertical li.current>a button.pull-right.toctree-expand,.wy-menu-vertical li.on a button.pull-right.toctree-expand,.wy-menu-vertical li button.pull-right.toctree-expand{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s linear infinite;animation:fa-spin 2s linear infinite}.fa-pulse{-webkit-animation:fa-spin 1s steps(8) infinite;animation:fa-spin 1s steps(8) infinite}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scaleX(-1);-ms-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scaleY(-1);-ms-transform:scaleY(-1);transform:scaleY(-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:""}.fa-music:before{content:""}.fa-search:before,.icon-search:before{content:""}.fa-envelope-o:before{content:""}.fa-heart:before{content:""}.fa-star:before{content:""}.fa-star-o:before{content:""}.fa-user:before{content:""}.fa-film:before{content:""}.fa-th-large:before{content:""}.fa-th:before{content:""}.fa-th-list:before{content:""}.fa-check:before{content:""}.fa-close:before,.fa-remove:before,.fa-times:before{content:""}.fa-search-plus:before{content:""}.fa-search-minus:before{content:""}.fa-power-off:before{content:""}.fa-signal:before{content:""}.fa-cog:before,.fa-gear:before{content:""}.fa-trash-o:before{content:""}.fa-home:before,.icon-home:before{content:""}.fa-file-o:before{content:""}.fa-clock-o:before{content:""}.fa-road:before{content:""}.fa-download:before,.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{content:""}.fa-arrow-circle-o-down:before{content:""}.fa-arrow-circle-o-up:before{content:""}.fa-inbox:before{content:""}.fa-play-circle-o:before{content:""}.fa-repeat:before,.fa-rotate-right:before{content:""}.fa-refresh:before{content:""}.fa-list-alt:before{content:""}.fa-lock:before{content:""}.fa-flag:before{content:""}.fa-headphones:before{content:""}.fa-volume-off:before{content:""}.fa-volume-down:before{content:""}.fa-volume-up:before{content:""}.fa-qrcode:before{content:""}.fa-barcode:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-book:before,.icon-book:before{content:""}.fa-bookmark:before{content:""}.fa-print:before{content:""}.fa-camera:before{content:""}.fa-font:before{content:""}.fa-bold:before{content:""}.fa-italic:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-align-left:before{content:""}.fa-align-center:before{content:""}.fa-align-right:before{content:""}.fa-align-justify:before{content:""}.fa-list:before{content:""}.fa-dedent:before,.fa-outdent:before{content:""}.fa-indent:before{content:""}.fa-video-camera:before{content:""}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:""}.fa-pencil:before{content:""}.fa-map-marker:before{content:""}.fa-adjust:before{content:""}.fa-tint:before{content:""}.fa-edit:before,.fa-pencil-square-o:before{content:""}.fa-share-square-o:before{content:""}.fa-check-square-o:before{content:""}.fa-arrows:before{content:""}.fa-step-backward:before{content:""}.fa-fast-backward:before{content:""}.fa-backward:before{content:""}.fa-play:before{content:""}.fa-pause:before{content:""}.fa-stop:before{content:""}.fa-forward:before{content:""}.fa-fast-forward:before{content:""}.fa-step-forward:before{content:""}.fa-eject:before{content:""}.fa-chevron-left:before{content:""}.fa-chevron-right:before{content:""}.fa-plus-circle:before{content:""}.fa-minus-circle:before{content:""}.fa-times-circle:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before{content:""}.fa-check-circle:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before{content:""}.fa-question-circle:before{content:""}.fa-info-circle:before{content:""}.fa-crosshairs:before{content:""}.fa-times-circle-o:before{content:""}.fa-check-circle-o:before{content:""}.fa-ban:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-arrow-up:before{content:""}.fa-arrow-down:before{content:""}.fa-mail-forward:before,.fa-share:before{content:""}.fa-expand:before{content:""}.fa-compress:before{content:""}.fa-plus:before{content:""}.fa-minus:before{content:""}.fa-asterisk:before{content:""}.fa-exclamation-circle:before,.rst-content .admonition-title:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before{content:""}.fa-gift:before{content:""}.fa-leaf:before{content:""}.fa-fire:before,.icon-fire:before{content:""}.fa-eye:before{content:""}.fa-eye-slash:before{content:""}.fa-exclamation-triangle:before,.fa-warning:before{content:""}.fa-plane:before{content:""}.fa-calendar:before{content:""}.fa-random:before{content:""}.fa-comment:before{content:""}.fa-magnet:before{content:""}.fa-chevron-up:before{content:""}.fa-chevron-down:before{content:""}.fa-retweet:before{content:""}.fa-shopping-cart:before{content:""}.fa-folder:before{content:""}.fa-folder-open:before{content:""}.fa-arrows-v:before{content:""}.fa-arrows-h:before{content:""}.fa-bar-chart-o:before,.fa-bar-chart:before{content:""}.fa-twitter-square:before{content:""}.fa-facebook-square:before{content:""}.fa-camera-retro:before{content:""}.fa-key:before{content:""}.fa-cogs:before,.fa-gears:before{content:""}.fa-comments:before{content:""}.fa-thumbs-o-up:before{content:""}.fa-thumbs-o-down:before{content:""}.fa-star-half:before{content:""}.fa-heart-o:before{content:""}.fa-sign-out:before{content:""}.fa-linkedin-square:before{content:""}.fa-thumb-tack:before{content:""}.fa-external-link:before{content:""}.fa-sign-in:before{content:""}.fa-trophy:before{content:""}.fa-github-square:before{content:""}.fa-upload:before{content:""}.fa-lemon-o:before{content:""}.fa-phone:before{content:""}.fa-square-o:before{content:""}.fa-bookmark-o:before{content:""}.fa-phone-square:before{content:""}.fa-twitter:before{content:""}.fa-facebook-f:before,.fa-facebook:before{content:""}.fa-github:before,.icon-github:before{content:""}.fa-unlock:before{content:""}.fa-credit-card:before{content:""}.fa-feed:before,.fa-rss:before{content:""}.fa-hdd-o:before{content:""}.fa-bullhorn:before{content:""}.fa-bell:before{content:""}.fa-certificate:before{content:""}.fa-hand-o-right:before{content:""}.fa-hand-o-left:before{content:""}.fa-hand-o-up:before{content:""}.fa-hand-o-down:before{content:""}.fa-arrow-circle-left:before,.icon-circle-arrow-left:before{content:""}.fa-arrow-circle-right:before,.icon-circle-arrow-right:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-arrow-circle-down:before{content:""}.fa-globe:before{content:""}.fa-wrench:before{content:""}.fa-tasks:before{content:""}.fa-filter:before{content:""}.fa-briefcase:before{content:""}.fa-arrows-alt:before{content:""}.fa-group:before,.fa-users:before{content:""}.fa-chain:before,.fa-link:before,.icon-link:before{content:""}.fa-cloud:before{content:""}.fa-flask:before{content:""}.fa-cut:before,.fa-scissors:before{content:""}.fa-copy:before,.fa-files-o:before{content:""}.fa-paperclip:before{content:""}.fa-floppy-o:before,.fa-save:before{content:""}.fa-square:before{content:""}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:""}.fa-list-ul:before{content:""}.fa-list-ol:before{content:""}.fa-strikethrough:before{content:""}.fa-underline:before{content:""}.fa-table:before{content:""}.fa-magic:before{content:""}.fa-truck:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-square:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-plus:before{content:""}.fa-money:before{content:""}.fa-caret-down:before,.icon-caret-down:before,.wy-dropdown .caret:before{content:""}.fa-caret-up:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-columns:before{content:""}.fa-sort:before,.fa-unsorted:before{content:""}.fa-sort-desc:before,.fa-sort-down:before{content:""}.fa-sort-asc:before,.fa-sort-up:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-rotate-left:before,.fa-undo:before{content:""}.fa-gavel:before,.fa-legal:before{content:""}.fa-dashboard:before,.fa-tachometer:before{content:""}.fa-comment-o:before{content:""}.fa-comments-o:before{content:""}.fa-bolt:before,.fa-flash:before{content:""}.fa-sitemap:before{content:""}.fa-umbrella:before{content:""}.fa-clipboard:before,.fa-paste:before{content:""}.fa-lightbulb-o:before{content:""}.fa-exchange:before{content:""}.fa-cloud-download:before{content:""}.fa-cloud-upload:before{content:""}.fa-user-md:before{content:""}.fa-stethoscope:before{content:""}.fa-suitcase:before{content:""}.fa-bell-o:before{content:""}.fa-coffee:before{content:""}.fa-cutlery:before{content:""}.fa-file-text-o:before{content:""}.fa-building-o:before{content:""}.fa-hospital-o:before{content:""}.fa-ambulance:before{content:""}.fa-medkit:before{content:""}.fa-fighter-jet:before{content:""}.fa-beer:before{content:""}.fa-h-square:before{content:""}.fa-plus-square:before{content:""}.fa-angle-double-left:before{content:""}.fa-angle-double-right:before{content:""}.fa-angle-double-up:before{content:""}.fa-angle-double-down:before{content:""}.fa-angle-left:before{content:""}.fa-angle-right:before{content:""}.fa-angle-up:before{content:""}.fa-angle-down:before{content:""}.fa-desktop:before{content:""}.fa-laptop:before{content:""}.fa-tablet:before{content:""}.fa-mobile-phone:before,.fa-mobile:before{content:""}.fa-circle-o:before{content:""}.fa-quote-left:before{content:""}.fa-quote-right:before{content:""}.fa-spinner:before{content:""}.fa-circle:before{content:""}.fa-mail-reply:before,.fa-reply:before{content:""}.fa-github-alt:before{content:""}.fa-folder-o:before{content:""}.fa-folder-open-o:before{content:""}.fa-smile-o:before{content:""}.fa-frown-o:before{content:""}.fa-meh-o:before{content:""}.fa-gamepad:before{content:""}.fa-keyboard-o:before{content:""}.fa-flag-o:before{content:""}.fa-flag-checkered:before{content:""}.fa-terminal:before{content:""}.fa-code:before{content:""}.fa-mail-reply-all:before,.fa-reply-all:before{content:""}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:""}.fa-location-arrow:before{content:""}.fa-crop:before{content:""}.fa-code-fork:before{content:""}.fa-chain-broken:before,.fa-unlink:before{content:""}.fa-question:before{content:""}.fa-info:before{content:""}.fa-exclamation:before{content:""}.fa-superscript:before{content:""}.fa-subscript:before{content:""}.fa-eraser:before{content:""}.fa-puzzle-piece:before{content:""}.fa-microphone:before{content:""}.fa-microphone-slash:before{content:""}.fa-shield:before{content:""}.fa-calendar-o:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-rocket:before{content:""}.fa-maxcdn:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-html5:before{content:""}.fa-css3:before{content:""}.fa-anchor:before{content:""}.fa-unlock-alt:before{content:""}.fa-bullseye:before{content:""}.fa-ellipsis-h:before{content:""}.fa-ellipsis-v:before{content:""}.fa-rss-square:before{content:""}.fa-play-circle:before{content:""}.fa-ticket:before{content:""}.fa-minus-square:before{content:""}.fa-minus-square-o:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before{content:""}.fa-level-up:before{content:""}.fa-level-down:before{content:""}.fa-check-square:before{content:""}.fa-pencil-square:before{content:""}.fa-external-link-square:before{content:""}.fa-share-square:before{content:""}.fa-compass:before{content:""}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:""}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:""}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:""}.fa-eur:before,.fa-euro:before{content:""}.fa-gbp:before{content:""}.fa-dollar:before,.fa-usd:before{content:""}.fa-inr:before,.fa-rupee:before{content:""}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:""}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:""}.fa-krw:before,.fa-won:before{content:""}.fa-bitcoin:before,.fa-btc:before{content:""}.fa-file:before{content:""}.fa-file-text:before{content:""}.fa-sort-alpha-asc:before{content:""}.fa-sort-alpha-desc:before{content:""}.fa-sort-amount-asc:before{content:""}.fa-sort-amount-desc:before{content:""}.fa-sort-numeric-asc:before{content:""}.fa-sort-numeric-desc:before{content:""}.fa-thumbs-up:before{content:""}.fa-thumbs-down:before{content:""}.fa-youtube-square:before{content:""}.fa-youtube:before{content:""}.fa-xing:before{content:""}.fa-xing-square:before{content:""}.fa-youtube-play:before{content:""}.fa-dropbox:before{content:""}.fa-stack-overflow:before{content:""}.fa-instagram:before{content:""}.fa-flickr:before{content:""}.fa-adn:before{content:""}.fa-bitbucket:before,.icon-bitbucket:before{content:""}.fa-bitbucket-square:before{content:""}.fa-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-long-arrow-down:before{content:""}.fa-long-arrow-up:before{content:""}.fa-long-arrow-left:before{content:""}.fa-long-arrow-right:before{content:""}.fa-apple:before{content:""}.fa-windows:before{content:""}.fa-android:before{content:""}.fa-linux:before{content:""}.fa-dribbble:before{content:""}.fa-skype:before{content:""}.fa-foursquare:before{content:""}.fa-trello:before{content:""}.fa-female:before{content:""}.fa-male:before{content:""}.fa-gittip:before,.fa-gratipay:before{content:""}.fa-sun-o:before{content:""}.fa-moon-o:before{content:""}.fa-archive:before{content:""}.fa-bug:before{content:""}.fa-vk:before{content:""}.fa-weibo:before{content:""}.fa-renren:before{content:""}.fa-pagelines:before{content:""}.fa-stack-exchange:before{content:""}.fa-arrow-circle-o-right:before{content:""}.fa-arrow-circle-o-left:before{content:""}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:""}.fa-dot-circle-o:before{content:""}.fa-wheelchair:before{content:""}.fa-vimeo-square:before{content:""}.fa-try:before,.fa-turkish-lira:before{content:""}.fa-plus-square-o:before,.wy-menu-vertical li button.toctree-expand:before{content:""}.fa-space-shuttle:before{content:""}.fa-slack:before{content:""}.fa-envelope-square:before{content:""}.fa-wordpress:before{content:""}.fa-openid:before{content:""}.fa-bank:before,.fa-institution:before,.fa-university:before{content:""}.fa-graduation-cap:before,.fa-mortar-board:before{content:""}.fa-yahoo:before{content:""}.fa-google:before{content:""}.fa-reddit:before{content:""}.fa-reddit-square:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-stumbleupon:before{content:""}.fa-delicious:before{content:""}.fa-digg:before{content:""}.fa-pied-piper-pp:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-drupal:before{content:""}.fa-joomla:before{content:""}.fa-language:before{content:""}.fa-fax:before{content:""}.fa-building:before{content:""}.fa-child:before{content:""}.fa-paw:before{content:""}.fa-spoon:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-behance:before{content:""}.fa-behance-square:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-recycle:before{content:""}.fa-automobile:before,.fa-car:before{content:""}.fa-cab:before,.fa-taxi:before{content:""}.fa-tree:before{content:""}.fa-spotify:before{content:""}.fa-deviantart:before{content:""}.fa-soundcloud:before{content:""}.fa-database:before{content:""}.fa-file-pdf-o:before{content:""}.fa-file-word-o:before{content:""}.fa-file-excel-o:before{content:""}.fa-file-powerpoint-o:before{content:""}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:""}.fa-file-archive-o:before,.fa-file-zip-o:before{content:""}.fa-file-audio-o:before,.fa-file-sound-o:before{content:""}.fa-file-movie-o:before,.fa-file-video-o:before{content:""}.fa-file-code-o:before{content:""}.fa-vine:before{content:""}.fa-codepen:before{content:""}.fa-jsfiddle:before{content:""}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:""}.fa-circle-o-notch:before{content:""}.fa-ra:before,.fa-rebel:before,.fa-resistance:before{content:""}.fa-empire:before,.fa-ge:before{content:""}.fa-git-square:before{content:""}.fa-git:before{content:""}.fa-hacker-news:before,.fa-y-combinator-square:before,.fa-yc-square:before{content:""}.fa-tencent-weibo:before{content:""}.fa-qq:before{content:""}.fa-wechat:before,.fa-weixin:before{content:""}.fa-paper-plane:before,.fa-send:before{content:""}.fa-paper-plane-o:before,.fa-send-o:before{content:""}.fa-history:before{content:""}.fa-circle-thin:before{content:""}.fa-header:before{content:""}.fa-paragraph:before{content:""}.fa-sliders:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-bomb:before{content:""}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:""}.fa-tty:before{content:""}.fa-binoculars:before{content:""}.fa-plug:before{content:""}.fa-slideshare:before{content:""}.fa-twitch:before{content:""}.fa-yelp:before{content:""}.fa-newspaper-o:before{content:""}.fa-wifi:before{content:""}.fa-calculator:before{content:""}.fa-paypal:before{content:""}.fa-google-wallet:before{content:""}.fa-cc-visa:before{content:""}.fa-cc-mastercard:before{content:""}.fa-cc-discover:before{content:""}.fa-cc-amex:before{content:""}.fa-cc-paypal:before{content:""}.fa-cc-stripe:before{content:""}.fa-bell-slash:before{content:""}.fa-bell-slash-o:before{content:""}.fa-trash:before{content:""}.fa-copyright:before{content:""}.fa-at:before{content:""}.fa-eyedropper:before{content:""}.fa-paint-brush:before{content:""}.fa-birthday-cake:before{content:""}.fa-area-chart:before{content:""}.fa-pie-chart:before{content:""}.fa-line-chart:before{content:""}.fa-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-toggle-off:before{content:""}.fa-toggle-on:before{content:""}.fa-bicycle:before{content:""}.fa-bus:before{content:""}.fa-ioxhost:before{content:""}.fa-angellist:before{content:""}.fa-cc:before{content:""}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:""}.fa-meanpath:before{content:""}.fa-buysellads:before{content:""}.fa-connectdevelop:before{content:""}.fa-dashcube:before{content:""}.fa-forumbee:before{content:""}.fa-leanpub:before{content:""}.fa-sellsy:before{content:""}.fa-shirtsinbulk:before{content:""}.fa-simplybuilt:before{content:""}.fa-skyatlas:before{content:""}.fa-cart-plus:before{content:""}.fa-cart-arrow-down:before{content:""}.fa-diamond:before{content:""}.fa-ship:before{content:""}.fa-user-secret:before{content:""}.fa-motorcycle:before{content:""}.fa-street-view:before{content:""}.fa-heartbeat:before{content:""}.fa-venus:before{content:""}.fa-mars:before{content:""}.fa-mercury:before{content:""}.fa-intersex:before,.fa-transgender:before{content:""}.fa-transgender-alt:before{content:""}.fa-venus-double:before{content:""}.fa-mars-double:before{content:""}.fa-venus-mars:before{content:""}.fa-mars-stroke:before{content:""}.fa-mars-stroke-v:before{content:""}.fa-mars-stroke-h:before{content:""}.fa-neuter:before{content:""}.fa-genderless:before{content:""}.fa-facebook-official:before{content:""}.fa-pinterest-p:before{content:""}.fa-whatsapp:before{content:""}.fa-server:before{content:""}.fa-user-plus:before{content:""}.fa-user-times:before{content:""}.fa-bed:before,.fa-hotel:before{content:""}.fa-viacoin:before{content:""}.fa-train:before{content:""}.fa-subway:before{content:""}.fa-medium:before{content:""}.fa-y-combinator:before,.fa-yc:before{content:""}.fa-optin-monster:before{content:""}.fa-opencart:before{content:""}.fa-expeditedssl:before{content:""}.fa-battery-4:before,.fa-battery-full:before,.fa-battery:before{content:""}.fa-battery-3:before,.fa-battery-three-quarters:before{content:""}.fa-battery-2:before,.fa-battery-half:before{content:""}.fa-battery-1:before,.fa-battery-quarter:before{content:""}.fa-battery-0:before,.fa-battery-empty:before{content:""}.fa-mouse-pointer:before{content:""}.fa-i-cursor:before{content:""}.fa-object-group:before{content:""}.fa-object-ungroup:before{content:""}.fa-sticky-note:before{content:""}.fa-sticky-note-o:before{content:""}.fa-cc-jcb:before{content:""}.fa-cc-diners-club:before{content:""}.fa-clone:before{content:""}.fa-balance-scale:before{content:""}.fa-hourglass-o:before{content:""}.fa-hourglass-1:before,.fa-hourglass-start:before{content:""}.fa-hourglass-2:before,.fa-hourglass-half:before{content:""}.fa-hourglass-3:before,.fa-hourglass-end:before{content:""}.fa-hourglass:before{content:""}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:""}.fa-hand-paper-o:before,.fa-hand-stop-o:before{content:""}.fa-hand-scissors-o:before{content:""}.fa-hand-lizard-o:before{content:""}.fa-hand-spock-o:before{content:""}.fa-hand-pointer-o:before{content:""}.fa-hand-peace-o:before{content:""}.fa-trademark:before{content:""}.fa-registered:before{content:""}.fa-creative-commons:before{content:""}.fa-gg:before{content:""}.fa-gg-circle:before{content:""}.fa-tripadvisor:before{content:""}.fa-odnoklassniki:before{content:""}.fa-odnoklassniki-square:before{content:""}.fa-get-pocket:before{content:""}.fa-wikipedia-w:before{content:""}.fa-safari:before{content:""}.fa-chrome:before{content:""}.fa-firefox:before{content:""}.fa-opera:before{content:""}.fa-internet-explorer:before{content:""}.fa-television:before,.fa-tv:before{content:""}.fa-contao:before{content:""}.fa-500px:before{content:""}.fa-amazon:before{content:""}.fa-calendar-plus-o:before{content:""}.fa-calendar-minus-o:before{content:""}.fa-calendar-times-o:before{content:""}.fa-calendar-check-o:before{content:""}.fa-industry:before{content:""}.fa-map-pin:before{content:""}.fa-map-signs:before{content:""}.fa-map-o:before{content:""}.fa-map:before{content:""}.fa-commenting:before{content:""}.fa-commenting-o:before{content:""}.fa-houzz:before{content:""}.fa-vimeo:before{content:""}.fa-black-tie:before{content:""}.fa-fonticons:before{content:""}.fa-reddit-alien:before{content:""}.fa-edge:before{content:""}.fa-credit-card-alt:before{content:""}.fa-codiepie:before{content:""}.fa-modx:before{content:""}.fa-fort-awesome:before{content:""}.fa-usb:before{content:""}.fa-product-hunt:before{content:""}.fa-mixcloud:before{content:""}.fa-scribd:before{content:""}.fa-pause-circle:before{content:""}.fa-pause-circle-o:before{content:""}.fa-stop-circle:before{content:""}.fa-stop-circle-o:before{content:""}.fa-shopping-bag:before{content:""}.fa-shopping-basket:before{content:""}.fa-hashtag:before{content:""}.fa-bluetooth:before{content:""}.fa-bluetooth-b:before{content:""}.fa-percent:before{content:""}.fa-gitlab:before,.icon-gitlab:before{content:""}.fa-wpbeginner:before{content:""}.fa-wpforms:before{content:""}.fa-envira:before{content:""}.fa-universal-access:before{content:""}.fa-wheelchair-alt:before{content:""}.fa-question-circle-o:before{content:""}.fa-blind:before{content:""}.fa-audio-description:before{content:""}.fa-volume-control-phone:before{content:""}.fa-braille:before{content:""}.fa-assistive-listening-systems:before{content:""}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before{content:""}.fa-deaf:before,.fa-deafness:before,.fa-hard-of-hearing:before{content:""}.fa-glide:before{content:""}.fa-glide-g:before{content:""}.fa-sign-language:before,.fa-signing:before{content:""}.fa-low-vision:before{content:""}.fa-viadeo:before{content:""}.fa-viadeo-square:before{content:""}.fa-snapchat:before{content:""}.fa-snapchat-ghost:before{content:""}.fa-snapchat-square:before{content:""}.fa-pied-piper:before{content:""}.fa-first-order:before{content:""}.fa-yoast:before{content:""}.fa-themeisle:before{content:""}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:""}.fa-fa:before,.fa-font-awesome:before{content:""}.fa-handshake-o:before{content:""}.fa-envelope-open:before{content:""}.fa-envelope-open-o:before{content:""}.fa-linode:before{content:""}.fa-address-book:before{content:""}.fa-address-book-o:before{content:""}.fa-address-card:before,.fa-vcard:before{content:""}.fa-address-card-o:before,.fa-vcard-o:before{content:""}.fa-user-circle:before{content:""}.fa-user-circle-o:before{content:""}.fa-user-o:before{content:""}.fa-id-badge:before{content:""}.fa-drivers-license:before,.fa-id-card:before{content:""}.fa-drivers-license-o:before,.fa-id-card-o:before{content:""}.fa-quora:before{content:""}.fa-free-code-camp:before{content:""}.fa-telegram:before{content:""}.fa-thermometer-4:before,.fa-thermometer-full:before,.fa-thermometer:before{content:""}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:""}.fa-thermometer-2:before,.fa-thermometer-half:before{content:""}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:""}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:""}.fa-shower:before{content:""}.fa-bath:before,.fa-bathtub:before,.fa-s15:before{content:""}.fa-podcast:before{content:""}.fa-window-maximize:before{content:""}.fa-window-minimize:before{content:""}.fa-window-restore:before{content:""}.fa-times-rectangle:before,.fa-window-close:before{content:""}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:""}.fa-bandcamp:before{content:""}.fa-grav:before{content:""}.fa-etsy:before{content:""}.fa-imdb:before{content:""}.fa-ravelry:before{content:""}.fa-eercast:before{content:""}.fa-microchip:before{content:""}.fa-snowflake-o:before{content:""}.fa-superpowers:before{content:""}.fa-wpexplorer:before{content:""}.fa-meetup:before{content:""}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-dropdown .caret,.wy-inline-validate.wy-inline-validate-danger .wy-input-context,.wy-inline-validate.wy-inline-validate-info .wy-input-context,.wy-inline-validate.wy-inline-validate-success .wy-input-context,.wy-inline-validate.wy-inline-validate-warning .wy-input-context,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li button.toctree-expand{font-family:inherit}.fa:before,.icon:before,.rst-content .admonition-title:before,.rst-content .code-block-caption .headerlink:before,.rst-content .eqno .headerlink:before,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content p .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before,.wy-menu-vertical li button.toctree-expand:before{font-family:FontAwesome;display:inline-block;font-style:normal;font-weight:400;line-height:1;text-decoration:inherit}.rst-content .code-block-caption a .headerlink,.rst-content .eqno a .headerlink,.rst-content a .admonition-title,.rst-content code.download a span:first-child,.rst-content dl dt a .headerlink,.rst-content h1 a .headerlink,.rst-content h2 a .headerlink,.rst-content h3 a .headerlink,.rst-content h4 a .headerlink,.rst-content h5 a .headerlink,.rst-content h6 a .headerlink,.rst-content p.caption a .headerlink,.rst-content p a .headerlink,.rst-content table>caption a .headerlink,.rst-content tt.download a span:first-child,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li a button.toctree-expand,a .fa,a .icon,a .rst-content .admonition-title,a .rst-content .code-block-caption .headerlink,a .rst-content .eqno .headerlink,a .rst-content code.download span:first-child,a .rst-content dl dt .headerlink,a .rst-content h1 .headerlink,a .rst-content h2 .headerlink,a .rst-content h3 .headerlink,a .rst-content h4 .headerlink,a .rst-content h5 .headerlink,a .rst-content h6 .headerlink,a .rst-content p.caption .headerlink,a .rst-content p .headerlink,a .rst-content table>caption .headerlink,a .rst-content tt.download span:first-child,a .wy-menu-vertical li button.toctree-expand{display:inline-block;text-decoration:inherit}.btn .fa,.btn .icon,.btn .rst-content .admonition-title,.btn .rst-content .code-block-caption .headerlink,.btn .rst-content .eqno .headerlink,.btn .rst-content code.download span:first-child,.btn .rst-content dl dt .headerlink,.btn .rst-content h1 .headerlink,.btn .rst-content h2 .headerlink,.btn .rst-content h3 .headerlink,.btn .rst-content h4 .headerlink,.btn .rst-content h5 .headerlink,.btn .rst-content h6 .headerlink,.btn .rst-content p .headerlink,.btn .rst-content table>caption .headerlink,.btn .rst-content tt.download span:first-child,.btn .wy-menu-vertical li.current>a button.toctree-expand,.btn .wy-menu-vertical li.on a button.toctree-expand,.btn .wy-menu-vertical li button.toctree-expand,.nav .fa,.nav .icon,.nav .rst-content .admonition-title,.nav .rst-content .code-block-caption .headerlink,.nav .rst-content .eqno .headerlink,.nav .rst-content code.download span:first-child,.nav .rst-content dl dt .headerlink,.nav .rst-content h1 .headerlink,.nav .rst-content h2 .headerlink,.nav .rst-content h3 .headerlink,.nav .rst-content h4 .headerlink,.nav .rst-content h5 .headerlink,.nav .rst-content h6 .headerlink,.nav .rst-content p .headerlink,.nav .rst-content table>caption .headerlink,.nav .rst-content tt.download span:first-child,.nav .wy-menu-vertical li.current>a button.toctree-expand,.nav .wy-menu-vertical li.on a button.toctree-expand,.nav .wy-menu-vertical li button.toctree-expand,.rst-content .btn .admonition-title,.rst-content .code-block-caption .btn .headerlink,.rst-content .code-block-caption .nav .headerlink,.rst-content .eqno .btn .headerlink,.rst-content .eqno .nav .headerlink,.rst-content .nav .admonition-title,.rst-content code.download .btn span:first-child,.rst-content code.download .nav span:first-child,.rst-content dl dt .btn .headerlink,.rst-content dl dt .nav .headerlink,.rst-content h1 .btn .headerlink,.rst-content h1 .nav .headerlink,.rst-content h2 .btn .headerlink,.rst-content h2 .nav .headerlink,.rst-content h3 .btn .headerlink,.rst-content h3 .nav .headerlink,.rst-content h4 .btn .headerlink,.rst-content h4 .nav .headerlink,.rst-content h5 .btn .headerlink,.rst-content h5 .nav .headerlink,.rst-content h6 .btn .headerlink,.rst-content h6 .nav .headerlink,.rst-content p .btn .headerlink,.rst-content p .nav .headerlink,.rst-content table>caption .btn .headerlink,.rst-content table>caption .nav .headerlink,.rst-content tt.download .btn span:first-child,.rst-content tt.download .nav span:first-child,.wy-menu-vertical li .btn button.toctree-expand,.wy-menu-vertical li.current>a .btn button.toctree-expand,.wy-menu-vertical li.current>a .nav button.toctree-expand,.wy-menu-vertical li .nav button.toctree-expand,.wy-menu-vertical li.on a .btn button.toctree-expand,.wy-menu-vertical li.on a .nav button.toctree-expand{display:inline}.btn .fa-large.icon,.btn .fa.fa-large,.btn .rst-content .code-block-caption .fa-large.headerlink,.btn .rst-content .eqno .fa-large.headerlink,.btn .rst-content .fa-large.admonition-title,.btn .rst-content code.download span.fa-large:first-child,.btn .rst-content dl dt .fa-large.headerlink,.btn .rst-content h1 .fa-large.headerlink,.btn .rst-content h2 .fa-large.headerlink,.btn .rst-content h3 .fa-large.headerlink,.btn .rst-content h4 .fa-large.headerlink,.btn .rst-content h5 .fa-large.headerlink,.btn .rst-content h6 .fa-large.headerlink,.btn .rst-content p .fa-large.headerlink,.btn .rst-content table>caption .fa-large.headerlink,.btn .rst-content tt.download span.fa-large:first-child,.btn .wy-menu-vertical li button.fa-large.toctree-expand,.nav .fa-large.icon,.nav .fa.fa-large,.nav .rst-content .code-block-caption .fa-large.headerlink,.nav .rst-content .eqno .fa-large.headerlink,.nav .rst-content .fa-large.admonition-title,.nav .rst-content code.download span.fa-large:first-child,.nav .rst-content dl dt .fa-large.headerlink,.nav .rst-content h1 .fa-large.headerlink,.nav .rst-content h2 .fa-large.headerlink,.nav .rst-content h3 .fa-large.headerlink,.nav .rst-content h4 .fa-large.headerlink,.nav .rst-content h5 .fa-large.headerlink,.nav .rst-content h6 .fa-large.headerlink,.nav .rst-content p .fa-large.headerlink,.nav .rst-content table>caption .fa-large.headerlink,.nav .rst-content tt.download span.fa-large:first-child,.nav .wy-menu-vertical li button.fa-large.toctree-expand,.rst-content .btn .fa-large.admonition-title,.rst-content .code-block-caption .btn .fa-large.headerlink,.rst-content .code-block-caption .nav .fa-large.headerlink,.rst-content .eqno .btn .fa-large.headerlink,.rst-content .eqno .nav .fa-large.headerlink,.rst-content .nav .fa-large.admonition-title,.rst-content code.download .btn span.fa-large:first-child,.rst-content code.download .nav span.fa-large:first-child,.rst-content dl dt .btn .fa-large.headerlink,.rst-content dl dt .nav .fa-large.headerlink,.rst-content h1 .btn .fa-large.headerlink,.rst-content h1 .nav .fa-large.headerlink,.rst-content h2 .btn .fa-large.headerlink,.rst-content h2 .nav .fa-large.headerlink,.rst-content h3 .btn .fa-large.headerlink,.rst-content h3 .nav .fa-large.headerlink,.rst-content h4 .btn .fa-large.headerlink,.rst-content h4 .nav .fa-large.headerlink,.rst-content h5 .btn .fa-large.headerlink,.rst-content h5 .nav .fa-large.headerlink,.rst-content h6 .btn .fa-large.headerlink,.rst-content h6 .nav .fa-large.headerlink,.rst-content p .btn .fa-large.headerlink,.rst-content p .nav .fa-large.headerlink,.rst-content table>caption .btn .fa-large.headerlink,.rst-content table>caption .nav .fa-large.headerlink,.rst-content tt.download .btn span.fa-large:first-child,.rst-content tt.download .nav span.fa-large:first-child,.wy-menu-vertical li .btn button.fa-large.toctree-expand,.wy-menu-vertical li .nav button.fa-large.toctree-expand{line-height:.9em}.btn .fa-spin.icon,.btn .fa.fa-spin,.btn .rst-content .code-block-caption .fa-spin.headerlink,.btn .rst-content .eqno .fa-spin.headerlink,.btn .rst-content .fa-spin.admonition-title,.btn .rst-content code.download span.fa-spin:first-child,.btn .rst-content dl dt .fa-spin.headerlink,.btn .rst-content h1 .fa-spin.headerlink,.btn .rst-content h2 .fa-spin.headerlink,.btn .rst-content h3 .fa-spin.headerlink,.btn .rst-content h4 .fa-spin.headerlink,.btn .rst-content h5 .fa-spin.headerlink,.btn .rst-content h6 .fa-spin.headerlink,.btn .rst-content p .fa-spin.headerlink,.btn .rst-content table>caption .fa-spin.headerlink,.btn .rst-content tt.download span.fa-spin:first-child,.btn .wy-menu-vertical li button.fa-spin.toctree-expand,.nav .fa-spin.icon,.nav .fa.fa-spin,.nav .rst-content .code-block-caption .fa-spin.headerlink,.nav .rst-content .eqno .fa-spin.headerlink,.nav .rst-content .fa-spin.admonition-title,.nav .rst-content code.download span.fa-spin:first-child,.nav .rst-content dl dt .fa-spin.headerlink,.nav .rst-content h1 .fa-spin.headerlink,.nav .rst-content h2 .fa-spin.headerlink,.nav .rst-content h3 .fa-spin.headerlink,.nav .rst-content h4 .fa-spin.headerlink,.nav .rst-content h5 .fa-spin.headerlink,.nav .rst-content h6 .fa-spin.headerlink,.nav .rst-content p .fa-spin.headerlink,.nav .rst-content table>caption .fa-spin.headerlink,.nav .rst-content tt.download span.fa-spin:first-child,.nav .wy-menu-vertical li button.fa-spin.toctree-expand,.rst-content .btn .fa-spin.admonition-title,.rst-content .code-block-caption .btn .fa-spin.headerlink,.rst-content .code-block-caption .nav .fa-spin.headerlink,.rst-content .eqno .btn .fa-spin.headerlink,.rst-content .eqno .nav .fa-spin.headerlink,.rst-content .nav .fa-spin.admonition-title,.rst-content code.download .btn span.fa-spin:first-child,.rst-content code.download .nav span.fa-spin:first-child,.rst-content dl dt .btn .fa-spin.headerlink,.rst-content dl dt .nav .fa-spin.headerlink,.rst-content h1 .btn .fa-spin.headerlink,.rst-content h1 .nav .fa-spin.headerlink,.rst-content h2 .btn .fa-spin.headerlink,.rst-content h2 .nav .fa-spin.headerlink,.rst-content h3 .btn .fa-spin.headerlink,.rst-content h3 .nav .fa-spin.headerlink,.rst-content h4 .btn .fa-spin.headerlink,.rst-content h4 .nav .fa-spin.headerlink,.rst-content h5 .btn .fa-spin.headerlink,.rst-content h5 .nav .fa-spin.headerlink,.rst-content h6 .btn .fa-spin.headerlink,.rst-content h6 .nav .fa-spin.headerlink,.rst-content p .btn .fa-spin.headerlink,.rst-content p .nav .fa-spin.headerlink,.rst-content table>caption .btn .fa-spin.headerlink,.rst-content table>caption .nav .fa-spin.headerlink,.rst-content tt.download .btn span.fa-spin:first-child,.rst-content tt.download .nav span.fa-spin:first-child,.wy-menu-vertical li .btn button.fa-spin.toctree-expand,.wy-menu-vertical li .nav button.fa-spin.toctree-expand{display:inline-block}.btn.fa:before,.btn.icon:before,.rst-content .btn.admonition-title:before,.rst-content .code-block-caption .btn.headerlink:before,.rst-content .eqno .btn.headerlink:before,.rst-content code.download span.btn:first-child:before,.rst-content dl dt .btn.headerlink:before,.rst-content h1 .btn.headerlink:before,.rst-content h2 .btn.headerlink:before,.rst-content h3 .btn.headerlink:before,.rst-content h4 .btn.headerlink:before,.rst-content h5 .btn.headerlink:before,.rst-content h6 .btn.headerlink:before,.rst-content p .btn.headerlink:before,.rst-content table>caption .btn.headerlink:before,.rst-content tt.download span.btn:first-child:before,.wy-menu-vertical li button.btn.toctree-expand:before{opacity:.5;-webkit-transition:opacity .05s ease-in;-moz-transition:opacity .05s ease-in;transition:opacity .05s ease-in}.btn.fa:hover:before,.btn.icon:hover:before,.rst-content .btn.admonition-title:hover:before,.rst-content .code-block-caption .btn.headerlink:hover:before,.rst-content .eqno .btn.headerlink:hover:before,.rst-content code.download span.btn:first-child:hover:before,.rst-content dl dt .btn.headerlink:hover:before,.rst-content h1 .btn.headerlink:hover:before,.rst-content h2 .btn.headerlink:hover:before,.rst-content h3 .btn.headerlink:hover:before,.rst-content h4 .btn.headerlink:hover:before,.rst-content h5 .btn.headerlink:hover:before,.rst-content h6 .btn.headerlink:hover:before,.rst-content p .btn.headerlink:hover:before,.rst-content table>caption .btn.headerlink:hover:before,.rst-content tt.download span.btn:first-child:hover:before,.wy-menu-vertical li button.btn.toctree-expand:hover:before{opacity:1}.btn-mini .fa:before,.btn-mini .icon:before,.btn-mini .rst-content .admonition-title:before,.btn-mini .rst-content .code-block-caption .headerlink:before,.btn-mini .rst-content .eqno .headerlink:before,.btn-mini .rst-content code.download span:first-child:before,.btn-mini .rst-content dl dt .headerlink:before,.btn-mini .rst-content h1 .headerlink:before,.btn-mini .rst-content h2 .headerlink:before,.btn-mini .rst-content h3 .headerlink:before,.btn-mini .rst-content h4 .headerlink:before,.btn-mini .rst-content h5 .headerlink:before,.btn-mini .rst-content h6 .headerlink:before,.btn-mini .rst-content p .headerlink:before,.btn-mini .rst-content table>caption .headerlink:before,.btn-mini .rst-content tt.download span:first-child:before,.btn-mini .wy-menu-vertical li button.toctree-expand:before,.rst-content .btn-mini .admonition-title:before,.rst-content .code-block-caption .btn-mini .headerlink:before,.rst-content .eqno .btn-mini .headerlink:before,.rst-content code.download .btn-mini span:first-child:before,.rst-content dl dt .btn-mini .headerlink:before,.rst-content h1 .btn-mini .headerlink:before,.rst-content h2 .btn-mini .headerlink:before,.rst-content h3 .btn-mini .headerlink:before,.rst-content h4 .btn-mini .headerlink:before,.rst-content h5 .btn-mini .headerlink:before,.rst-content h6 .btn-mini .headerlink:before,.rst-content p .btn-mini .headerlink:before,.rst-content table>caption .btn-mini .headerlink:before,.rst-content tt.download .btn-mini span:first-child:before,.wy-menu-vertical li .btn-mini button.toctree-expand:before{font-size:14px;vertical-align:-15%}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.wy-alert{padding:12px;line-height:24px;margin-bottom:24px;background:#e7f2fa}.rst-content .admonition-title,.wy-alert-title{font-weight:700;display:block;color:#fff;background:#6ab0de;padding:6px 12px;margin:-12px -12px 12px}.rst-content .danger,.rst-content .error,.rst-content .wy-alert-danger.admonition,.rst-content .wy-alert-danger.admonition-todo,.rst-content .wy-alert-danger.attention,.rst-content .wy-alert-danger.caution,.rst-content .wy-alert-danger.hint,.rst-content .wy-alert-danger.important,.rst-content .wy-alert-danger.note,.rst-content .wy-alert-danger.seealso,.rst-content .wy-alert-danger.tip,.rst-content .wy-alert-danger.warning,.wy-alert.wy-alert-danger{background:#fdf3f2}.rst-content .danger .admonition-title,.rst-content .danger .wy-alert-title,.rst-content .error .admonition-title,.rst-content .error .wy-alert-title,.rst-content .wy-alert-danger.admonition-todo .admonition-title,.rst-content .wy-alert-danger.admonition-todo .wy-alert-title,.rst-content .wy-alert-danger.admonition .admonition-title,.rst-content .wy-alert-danger.admonition .wy-alert-title,.rst-content .wy-alert-danger.attention .admonition-title,.rst-content .wy-alert-danger.attention .wy-alert-title,.rst-content .wy-alert-danger.caution .admonition-title,.rst-content .wy-alert-danger.caution .wy-alert-title,.rst-content .wy-alert-danger.hint .admonition-title,.rst-content .wy-alert-danger.hint .wy-alert-title,.rst-content .wy-alert-danger.important .admonition-title,.rst-content .wy-alert-danger.important .wy-alert-title,.rst-content .wy-alert-danger.note .admonition-title,.rst-content .wy-alert-danger.note .wy-alert-title,.rst-content .wy-alert-danger.seealso .admonition-title,.rst-content .wy-alert-danger.seealso .wy-alert-title,.rst-content .wy-alert-danger.tip .admonition-title,.rst-content .wy-alert-danger.tip .wy-alert-title,.rst-content .wy-alert-danger.warning .admonition-title,.rst-content .wy-alert-danger.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-danger .admonition-title,.wy-alert.wy-alert-danger .rst-content .admonition-title,.wy-alert.wy-alert-danger .wy-alert-title{background:#f29f97}.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .warning,.rst-content .wy-alert-warning.admonition,.rst-content .wy-alert-warning.danger,.rst-content .wy-alert-warning.error,.rst-content .wy-alert-warning.hint,.rst-content .wy-alert-warning.important,.rst-content .wy-alert-warning.note,.rst-content .wy-alert-warning.seealso,.rst-content .wy-alert-warning.tip,.wy-alert.wy-alert-warning{background:#ffedcc}.rst-content .admonition-todo .admonition-title,.rst-content .admonition-todo .wy-alert-title,.rst-content .attention .admonition-title,.rst-content .attention .wy-alert-title,.rst-content .caution .admonition-title,.rst-content .caution .wy-alert-title,.rst-content .warning .admonition-title,.rst-content .warning .wy-alert-title,.rst-content .wy-alert-warning.admonition .admonition-title,.rst-content .wy-alert-warning.admonition .wy-alert-title,.rst-content .wy-alert-warning.danger .admonition-title,.rst-content .wy-alert-warning.danger .wy-alert-title,.rst-content .wy-alert-warning.error .admonition-title,.rst-content .wy-alert-warning.error .wy-alert-title,.rst-content .wy-alert-warning.hint .admonition-title,.rst-content .wy-alert-warning.hint .wy-alert-title,.rst-content .wy-alert-warning.important .admonition-title,.rst-content .wy-alert-warning.important .wy-alert-title,.rst-content .wy-alert-warning.note .admonition-title,.rst-content .wy-alert-warning.note .wy-alert-title,.rst-content .wy-alert-warning.seealso .admonition-title,.rst-content .wy-alert-warning.seealso .wy-alert-title,.rst-content .wy-alert-warning.tip .admonition-title,.rst-content .wy-alert-warning.tip .wy-alert-title,.rst-content .wy-alert.wy-alert-warning .admonition-title,.wy-alert.wy-alert-warning .rst-content .admonition-title,.wy-alert.wy-alert-warning .wy-alert-title{background:#f0b37e}.rst-content .note,.rst-content .seealso,.rst-content .wy-alert-info.admonition,.rst-content .wy-alert-info.admonition-todo,.rst-content .wy-alert-info.attention,.rst-content .wy-alert-info.caution,.rst-content .wy-alert-info.danger,.rst-content .wy-alert-info.error,.rst-content .wy-alert-info.hint,.rst-content .wy-alert-info.important,.rst-content .wy-alert-info.tip,.rst-content .wy-alert-info.warning,.wy-alert.wy-alert-info{background:#e7f2fa}.rst-content .note .admonition-title,.rst-content .note .wy-alert-title,.rst-content .seealso .admonition-title,.rst-content .seealso .wy-alert-title,.rst-content .wy-alert-info.admonition-todo .admonition-title,.rst-content .wy-alert-info.admonition-todo .wy-alert-title,.rst-content .wy-alert-info.admonition .admonition-title,.rst-content .wy-alert-info.admonition .wy-alert-title,.rst-content .wy-alert-info.attention .admonition-title,.rst-content .wy-alert-info.attention .wy-alert-title,.rst-content .wy-alert-info.caution .admonition-title,.rst-content .wy-alert-info.caution .wy-alert-title,.rst-content .wy-alert-info.danger .admonition-title,.rst-content .wy-alert-info.danger .wy-alert-title,.rst-content .wy-alert-info.error .admonition-title,.rst-content .wy-alert-info.error .wy-alert-title,.rst-content .wy-alert-info.hint .admonition-title,.rst-content .wy-alert-info.hint .wy-alert-title,.rst-content .wy-alert-info.important .admonition-title,.rst-content .wy-alert-info.important .wy-alert-title,.rst-content .wy-alert-info.tip .admonition-title,.rst-content .wy-alert-info.tip .wy-alert-title,.rst-content .wy-alert-info.warning .admonition-title,.rst-content .wy-alert-info.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-info .admonition-title,.wy-alert.wy-alert-info .rst-content .admonition-title,.wy-alert.wy-alert-info .wy-alert-title{background:#6ab0de}.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .wy-alert-success.admonition,.rst-content .wy-alert-success.admonition-todo,.rst-content .wy-alert-success.attention,.rst-content .wy-alert-success.caution,.rst-content .wy-alert-success.danger,.rst-content .wy-alert-success.error,.rst-content .wy-alert-success.note,.rst-content .wy-alert-success.seealso,.rst-content .wy-alert-success.warning,.wy-alert.wy-alert-success{background:#dbfaf4}.rst-content .hint .admonition-title,.rst-content .hint .wy-alert-title,.rst-content .important .admonition-title,.rst-content .important .wy-alert-title,.rst-content .tip .admonition-title,.rst-content .tip .wy-alert-title,.rst-content .wy-alert-success.admonition-todo .admonition-title,.rst-content .wy-alert-success.admonition-todo .wy-alert-title,.rst-content .wy-alert-success.admonition .admonition-title,.rst-content .wy-alert-success.admonition .wy-alert-title,.rst-content .wy-alert-success.attention .admonition-title,.rst-content .wy-alert-success.attention .wy-alert-title,.rst-content .wy-alert-success.caution .admonition-title,.rst-content .wy-alert-success.caution .wy-alert-title,.rst-content .wy-alert-success.danger .admonition-title,.rst-content .wy-alert-success.danger .wy-alert-title,.rst-content .wy-alert-success.error .admonition-title,.rst-content .wy-alert-success.error .wy-alert-title,.rst-content .wy-alert-success.note .admonition-title,.rst-content .wy-alert-success.note .wy-alert-title,.rst-content .wy-alert-success.seealso .admonition-title,.rst-content .wy-alert-success.seealso .wy-alert-title,.rst-content .wy-alert-success.warning .admonition-title,.rst-content .wy-alert-success.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-success .admonition-title,.wy-alert.wy-alert-success .rst-content .admonition-title,.wy-alert.wy-alert-success .wy-alert-title{background:#1abc9c}.rst-content .wy-alert-neutral.admonition,.rst-content .wy-alert-neutral.admonition-todo,.rst-content .wy-alert-neutral.attention,.rst-content .wy-alert-neutral.caution,.rst-content .wy-alert-neutral.danger,.rst-content .wy-alert-neutral.error,.rst-content .wy-alert-neutral.hint,.rst-content .wy-alert-neutral.important,.rst-content .wy-alert-neutral.note,.rst-content .wy-alert-neutral.seealso,.rst-content .wy-alert-neutral.tip,.rst-content .wy-alert-neutral.warning,.wy-alert.wy-alert-neutral{background:#f3f6f6}.rst-content .wy-alert-neutral.admonition-todo .admonition-title,.rst-content .wy-alert-neutral.admonition-todo .wy-alert-title,.rst-content .wy-alert-neutral.admonition .admonition-title,.rst-content .wy-alert-neutral.admonition .wy-alert-title,.rst-content .wy-alert-neutral.attention .admonition-title,.rst-content .wy-alert-neutral.attention .wy-alert-title,.rst-content .wy-alert-neutral.caution .admonition-title,.rst-content .wy-alert-neutral.caution .wy-alert-title,.rst-content .wy-alert-neutral.danger .admonition-title,.rst-content .wy-alert-neutral.danger .wy-alert-title,.rst-content .wy-alert-neutral.error .admonition-title,.rst-content .wy-alert-neutral.error .wy-alert-title,.rst-content .wy-alert-neutral.hint .admonition-title,.rst-content .wy-alert-neutral.hint .wy-alert-title,.rst-content .wy-alert-neutral.important .admonition-title,.rst-content .wy-alert-neutral.important .wy-alert-title,.rst-content .wy-alert-neutral.note .admonition-title,.rst-content .wy-alert-neutral.note .wy-alert-title,.rst-content .wy-alert-neutral.seealso .admonition-title,.rst-content .wy-alert-neutral.seealso .wy-alert-title,.rst-content .wy-alert-neutral.tip .admonition-title,.rst-content .wy-alert-neutral.tip .wy-alert-title,.rst-content .wy-alert-neutral.warning .admonition-title,.rst-content .wy-alert-neutral.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-neutral .admonition-title,.wy-alert.wy-alert-neutral .rst-content .admonition-title,.wy-alert.wy-alert-neutral .wy-alert-title{color:#404040;background:#e1e4e5}.rst-content .wy-alert-neutral.admonition-todo a,.rst-content .wy-alert-neutral.admonition a,.rst-content .wy-alert-neutral.attention a,.rst-content .wy-alert-neutral.caution a,.rst-content .wy-alert-neutral.danger a,.rst-content .wy-alert-neutral.error a,.rst-content .wy-alert-neutral.hint a,.rst-content .wy-alert-neutral.important a,.rst-content .wy-alert-neutral.note a,.rst-content .wy-alert-neutral.seealso a,.rst-content .wy-alert-neutral.tip a,.rst-content .wy-alert-neutral.warning a,.wy-alert.wy-alert-neutral a{color:#2980b9}.rst-content .admonition-todo p:last-child,.rst-content .admonition p:last-child,.rst-content .attention p:last-child,.rst-content .caution p:last-child,.rst-content .danger p:last-child,.rst-content .error p:last-child,.rst-content .hint p:last-child,.rst-content .important p:last-child,.rst-content .note p:last-child,.rst-content .seealso p:last-child,.rst-content .tip p:last-child,.rst-content .warning p:last-child,.wy-alert p:last-child{margin-bottom:0}.wy-tray-container{position:fixed;bottom:0;left:0;z-index:600}.wy-tray-container li{display:block;width:300px;background:transparent;color:#fff;text-align:center;box-shadow:0 5px 5px 0 rgba(0,0,0,.1);padding:0 24px;min-width:20%;opacity:0;height:0;line-height:56px;overflow:hidden;-webkit-transition:all .3s ease-in;-moz-transition:all .3s ease-in;transition:all .3s ease-in}.wy-tray-container li.wy-tray-item-success{background:#27ae60}.wy-tray-container li.wy-tray-item-info{background:#2980b9}.wy-tray-container li.wy-tray-item-warning{background:#e67e22}.wy-tray-container li.wy-tray-item-danger{background:#e74c3c}.wy-tray-container li.on{opacity:1;height:56px}@media screen and (max-width:768px){.wy-tray-container{bottom:auto;top:0;width:100%}.wy-tray-container li{width:100%}}button{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle;cursor:pointer;line-height:normal;-webkit-appearance:button;*overflow:visible}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}button[disabled]{cursor:default}.btn{display:inline-block;border-radius:2px;line-height:normal;white-space:nowrap;text-align:center;cursor:pointer;font-size:100%;padding:6px 12px 8px;color:#fff;border:1px solid rgba(0,0,0,.1);background-color:#27ae60;text-decoration:none;font-weight:400;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 2px -1px hsla(0,0%,100%,.5),inset 0 -2px 0 0 rgba(0,0,0,.1);outline-none:false;vertical-align:middle;*display:inline;zoom:1;-webkit-user-drag:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transition:all .1s linear;-moz-transition:all .1s linear;transition:all .1s linear}.btn-hover{background:#2e8ece;color:#fff}.btn:hover{background:#2cc36b;color:#fff}.btn:focus{background:#2cc36b;outline:0}.btn:active{box-shadow:inset 0 -1px 0 0 rgba(0,0,0,.05),inset 0 2px 0 0 rgba(0,0,0,.1);padding:8px 12px 6px}.btn:visited{color:#fff}.btn-disabled,.btn-disabled:active,.btn-disabled:focus,.btn-disabled:hover,.btn:disabled{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:.4;cursor:not-allowed;box-shadow:none}.btn::-moz-focus-inner{padding:0;border:0}.btn-small{font-size:80%}.btn-info{background-color:#2980b9!important}.btn-info:hover{background-color:#2e8ece!important}.btn-neutral{background-color:#f3f6f6!important;color:#404040!important}.btn-neutral:hover{background-color:#e5ebeb!important;color:#404040}.btn-neutral:visited{color:#404040!important}.btn-success{background-color:#27ae60!important}.btn-success:hover{background-color:#295!important}.btn-danger{background-color:#e74c3c!important}.btn-danger:hover{background-color:#ea6153!important}.btn-warning{background-color:#e67e22!important}.btn-warning:hover{background-color:#e98b39!important}.btn-invert{background-color:#222}.btn-invert:hover{background-color:#2f2f2f!important}.btn-link{background-color:transparent!important;color:#2980b9;box-shadow:none;border-color:transparent!important}.btn-link:active,.btn-link:hover{background-color:transparent!important;color:#409ad5!important;box-shadow:none}.btn-link:visited{color:#9b59b6}.wy-btn-group .btn,.wy-control .btn{vertical-align:middle}.wy-btn-group{margin-bottom:24px;*zoom:1}.wy-btn-group:after,.wy-btn-group:before{display:table;content:""}.wy-btn-group:after{clear:both}.wy-dropdown{position:relative;display:inline-block}.wy-dropdown-active .wy-dropdown-menu{display:block}.wy-dropdown-menu{position:absolute;left:0;display:none;float:left;top:100%;min-width:100%;background:#fcfcfc;z-index:100;border:1px solid #cfd7dd;box-shadow:0 2px 2px 0 rgba(0,0,0,.1);padding:12px}.wy-dropdown-menu>dd>a{display:block;clear:both;color:#404040;white-space:nowrap;font-size:90%;padding:0 12px;cursor:pointer}.wy-dropdown-menu>dd>a:hover{background:#2980b9;color:#fff}.wy-dropdown-menu>dd.divider{border-top:1px solid #cfd7dd;margin:6px 0}.wy-dropdown-menu>dd.search{padding-bottom:12px}.wy-dropdown-menu>dd.search input[type=search]{width:100%}.wy-dropdown-menu>dd.call-to-action{background:#e3e3e3;text-transform:uppercase;font-weight:500;font-size:80%}.wy-dropdown-menu>dd.call-to-action:hover{background:#e3e3e3}.wy-dropdown-menu>dd.call-to-action .btn{color:#fff}.wy-dropdown.wy-dropdown-up .wy-dropdown-menu{bottom:100%;top:auto;left:auto;right:0}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu{background:#fcfcfc;margin-top:2px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a{padding:6px 12px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a:hover{background:#2980b9;color:#fff}.wy-dropdown.wy-dropdown-left .wy-dropdown-menu{right:0;left:auto;text-align:right}.wy-dropdown-arrow:before{content:" ";border-bottom:5px solid #f5f5f5;border-left:5px solid transparent;border-right:5px solid transparent;position:absolute;display:block;top:-4px;left:50%;margin-left:-3px}.wy-dropdown-arrow.wy-dropdown-arrow-left:before{left:11px}.wy-form-stacked select{display:block}.wy-form-aligned .wy-help-inline,.wy-form-aligned input,.wy-form-aligned label,.wy-form-aligned select,.wy-form-aligned textarea{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-form-aligned .wy-control-group>label{display:inline-block;vertical-align:middle;width:10em;margin:6px 12px 0 0;float:left}.wy-form-aligned .wy-control{float:left}.wy-form-aligned .wy-control label{display:block}.wy-form-aligned .wy-control select{margin-top:6px}fieldset{margin:0}fieldset,legend{border:0;padding:0}legend{width:100%;white-space:normal;margin-bottom:24px;font-size:150%;*margin-left:-7px}label,legend{display:block}label{margin:0 0 .3125em;color:#333;font-size:90%}input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}.wy-control-group{margin-bottom:24px;max-width:1200px;margin-left:auto;margin-right:auto;*zoom:1}.wy-control-group:after,.wy-control-group:before{display:table;content:""}.wy-control-group:after{clear:both}.wy-control-group.wy-control-group-required>label:after{content:" *";color:#e74c3c}.wy-control-group .wy-form-full,.wy-control-group .wy-form-halves,.wy-control-group .wy-form-thirds{padding-bottom:12px}.wy-control-group .wy-form-full input[type=color],.wy-control-group .wy-form-full input[type=date],.wy-control-group .wy-form-full input[type=datetime-local],.wy-control-group .wy-form-full input[type=datetime],.wy-control-group .wy-form-full input[type=email],.wy-control-group .wy-form-full input[type=month],.wy-control-group .wy-form-full input[type=number],.wy-control-group .wy-form-full input[type=password],.wy-control-group .wy-form-full input[type=search],.wy-control-group .wy-form-full input[type=tel],.wy-control-group .wy-form-full input[type=text],.wy-control-group .wy-form-full input[type=time],.wy-control-group .wy-form-full input[type=url],.wy-control-group .wy-form-full input[type=week],.wy-control-group .wy-form-full select,.wy-control-group .wy-form-halves input[type=color],.wy-control-group .wy-form-halves input[type=date],.wy-control-group .wy-form-halves input[type=datetime-local],.wy-control-group .wy-form-halves input[type=datetime],.wy-control-group .wy-form-halves input[type=email],.wy-control-group .wy-form-halves input[type=month],.wy-control-group .wy-form-halves input[type=number],.wy-control-group .wy-form-halves input[type=password],.wy-control-group .wy-form-halves input[type=search],.wy-control-group .wy-form-halves input[type=tel],.wy-control-group .wy-form-halves input[type=text],.wy-control-group .wy-form-halves input[type=time],.wy-control-group .wy-form-halves input[type=url],.wy-control-group .wy-form-halves input[type=week],.wy-control-group .wy-form-halves select,.wy-control-group .wy-form-thirds input[type=color],.wy-control-group .wy-form-thirds input[type=date],.wy-control-group .wy-form-thirds input[type=datetime-local],.wy-control-group .wy-form-thirds input[type=datetime],.wy-control-group .wy-form-thirds input[type=email],.wy-control-group .wy-form-thirds input[type=month],.wy-control-group .wy-form-thirds input[type=number],.wy-control-group .wy-form-thirds input[type=password],.wy-control-group .wy-form-thirds input[type=search],.wy-control-group .wy-form-thirds input[type=tel],.wy-control-group .wy-form-thirds input[type=text],.wy-control-group .wy-form-thirds input[type=time],.wy-control-group .wy-form-thirds input[type=url],.wy-control-group .wy-form-thirds input[type=week],.wy-control-group .wy-form-thirds select{width:100%}.wy-control-group .wy-form-full{float:left;display:block;width:100%;margin-right:0}.wy-control-group .wy-form-full:last-child{margin-right:0}.wy-control-group .wy-form-halves{float:left;display:block;margin-right:2.35765%;width:48.82117%}.wy-control-group .wy-form-halves:last-child,.wy-control-group .wy-form-halves:nth-of-type(2n){margin-right:0}.wy-control-group .wy-form-halves:nth-of-type(odd){clear:left}.wy-control-group .wy-form-thirds{float:left;display:block;margin-right:2.35765%;width:31.76157%}.wy-control-group .wy-form-thirds:last-child,.wy-control-group .wy-form-thirds:nth-of-type(3n){margin-right:0}.wy-control-group .wy-form-thirds:nth-of-type(3n+1){clear:left}.wy-control-group.wy-control-group-no-input .wy-control,.wy-control-no-input{margin:6px 0 0;font-size:90%}.wy-control-no-input{display:inline-block}.wy-control-group.fluid-input input[type=color],.wy-control-group.fluid-input input[type=date],.wy-control-group.fluid-input input[type=datetime-local],.wy-control-group.fluid-input input[type=datetime],.wy-control-group.fluid-input input[type=email],.wy-control-group.fluid-input input[type=month],.wy-control-group.fluid-input input[type=number],.wy-control-group.fluid-input input[type=password],.wy-control-group.fluid-input input[type=search],.wy-control-group.fluid-input input[type=tel],.wy-control-group.fluid-input input[type=text],.wy-control-group.fluid-input input[type=time],.wy-control-group.fluid-input input[type=url],.wy-control-group.fluid-input input[type=week]{width:100%}.wy-form-message-inline{padding-left:.3em;color:#666;font-size:90%}.wy-form-message{display:block;color:#999;font-size:70%;margin-top:.3125em;font-style:italic}.wy-form-message p{font-size:inherit;font-style:italic;margin-bottom:6px}.wy-form-message p:last-child{margin-bottom:0}input{line-height:normal}input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;*overflow:visible}input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week]{-webkit-appearance:none;padding:6px;display:inline-block;border:1px solid #ccc;font-size:80%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 3px #ddd;border-radius:0;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}input[type=datetime-local]{padding:.34375em .625em}input[disabled]{cursor:default}input[type=checkbox],input[type=radio]{padding:0;margin-right:.3125em;*height:13px;*width:13px}input[type=checkbox],input[type=radio],input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}input[type=color]:focus,input[type=date]:focus,input[type=datetime-local]:focus,input[type=datetime]:focus,input[type=email]:focus,input[type=month]:focus,input[type=number]:focus,input[type=password]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=time]:focus,input[type=url]:focus,input[type=week]:focus{outline:0;outline:thin dotted\9;border-color:#333}input.no-focus:focus{border-color:#ccc!important}input[type=checkbox]:focus,input[type=file]:focus,input[type=radio]:focus{outline:thin dotted #333;outline:1px auto #129fea}input[type=color][disabled],input[type=date][disabled],input[type=datetime-local][disabled],input[type=datetime][disabled],input[type=email][disabled],input[type=month][disabled],input[type=number][disabled],input[type=password][disabled],input[type=search][disabled],input[type=tel][disabled],input[type=text][disabled],input[type=time][disabled],input[type=url][disabled],input[type=week][disabled]{cursor:not-allowed;background-color:#fafafa}input:focus:invalid,select:focus:invalid,textarea:focus:invalid{color:#e74c3c;border:1px solid #e74c3c}input:focus:invalid:focus,select:focus:invalid:focus,textarea:focus:invalid:focus{border-color:#e74c3c}input[type=checkbox]:focus:invalid:focus,input[type=file]:focus:invalid:focus,input[type=radio]:focus:invalid:focus{outline-color:#e74c3c}input.wy-input-large{padding:12px;font-size:100%}textarea{overflow:auto;vertical-align:top;width:100%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif}select,textarea{padding:.5em .625em;display:inline-block;border:1px solid #ccc;font-size:80%;box-shadow:inset 0 1px 3px #ddd;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}select{border:1px solid #ccc;background-color:#fff}select[multiple]{height:auto}select:focus,textarea:focus{outline:0}input[readonly],select[disabled],select[readonly],textarea[disabled],textarea[readonly]{cursor:not-allowed;background-color:#fafafa}input[type=checkbox][disabled],input[type=radio][disabled]{cursor:not-allowed}.wy-checkbox,.wy-radio{margin:6px 0;color:#404040;display:block}.wy-checkbox input,.wy-radio input{vertical-align:baseline}.wy-form-message-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-input-prefix,.wy-input-suffix{white-space:nowrap;padding:6px}.wy-input-prefix .wy-input-context,.wy-input-suffix .wy-input-context{line-height:27px;padding:0 8px;display:inline-block;font-size:80%;background-color:#f3f6f6;border:1px solid #ccc;color:#999}.wy-input-suffix .wy-input-context{border-left:0}.wy-input-prefix .wy-input-context{border-right:0}.wy-switch{position:relative;display:block;height:24px;margin-top:12px;cursor:pointer}.wy-switch:before{left:0;top:0;width:36px;height:12px;background:#ccc}.wy-switch:after,.wy-switch:before{position:absolute;content:"";display:block;border-radius:4px;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.wy-switch:after{width:18px;height:18px;background:#999;left:-3px;top:-3px}.wy-switch span{position:absolute;left:48px;display:block;font-size:12px;color:#ccc;line-height:1}.wy-switch.active:before{background:#1e8449}.wy-switch.active:after{left:24px;background:#27ae60}.wy-switch.disabled{cursor:not-allowed;opacity:.8}.wy-control-group.wy-control-group-error .wy-form-message,.wy-control-group.wy-control-group-error>label{color:#e74c3c}.wy-control-group.wy-control-group-error input[type=color],.wy-control-group.wy-control-group-error input[type=date],.wy-control-group.wy-control-group-error input[type=datetime-local],.wy-control-group.wy-control-group-error input[type=datetime],.wy-control-group.wy-control-group-error input[type=email],.wy-control-group.wy-control-group-error input[type=month],.wy-control-group.wy-control-group-error input[type=number],.wy-control-group.wy-control-group-error input[type=password],.wy-control-group.wy-control-group-error input[type=search],.wy-control-group.wy-control-group-error input[type=tel],.wy-control-group.wy-control-group-error input[type=text],.wy-control-group.wy-control-group-error input[type=time],.wy-control-group.wy-control-group-error input[type=url],.wy-control-group.wy-control-group-error input[type=week],.wy-control-group.wy-control-group-error textarea{border:1px solid #e74c3c}.wy-inline-validate{white-space:nowrap}.wy-inline-validate .wy-input-context{padding:.5em .625em;display:inline-block;font-size:80%}.wy-inline-validate.wy-inline-validate-success .wy-input-context{color:#27ae60}.wy-inline-validate.wy-inline-validate-danger .wy-input-context{color:#e74c3c}.wy-inline-validate.wy-inline-validate-warning .wy-input-context{color:#e67e22}.wy-inline-validate.wy-inline-validate-info .wy-input-context{color:#2980b9}.rotate-90{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.rotate-180{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.rotate-270{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.mirror{-webkit-transform:scaleX(-1);-moz-transform:scaleX(-1);-ms-transform:scaleX(-1);-o-transform:scaleX(-1);transform:scaleX(-1)}.mirror.rotate-90{-webkit-transform:scaleX(-1) rotate(90deg);-moz-transform:scaleX(-1) rotate(90deg);-ms-transform:scaleX(-1) rotate(90deg);-o-transform:scaleX(-1) rotate(90deg);transform:scaleX(-1) rotate(90deg)}.mirror.rotate-180{-webkit-transform:scaleX(-1) rotate(180deg);-moz-transform:scaleX(-1) rotate(180deg);-ms-transform:scaleX(-1) rotate(180deg);-o-transform:scaleX(-1) rotate(180deg);transform:scaleX(-1) rotate(180deg)}.mirror.rotate-270{-webkit-transform:scaleX(-1) rotate(270deg);-moz-transform:scaleX(-1) rotate(270deg);-ms-transform:scaleX(-1) rotate(270deg);-o-transform:scaleX(-1) rotate(270deg);transform:scaleX(-1) rotate(270deg)}@media only screen and (max-width:480px){.wy-form button[type=submit]{margin:.7em 0 0}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=text],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week],.wy-form label{margin-bottom:.3em;display:block}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week]{margin-bottom:0}.wy-form-aligned .wy-control-group label{margin-bottom:.3em;text-align:left;display:block;width:100%}.wy-form-aligned .wy-control{margin:1.5em 0 0}.wy-form-message,.wy-form-message-inline,.wy-form .wy-help-inline{display:block;font-size:80%;padding:6px 0}}@media screen and (max-width:768px){.tablet-hide{display:none}}@media screen and (max-width:480px){.mobile-hide{display:none}}.float-left{float:left}.float-right{float:right}.full-width{width:100%}.rst-content table.docutils,.rst-content table.field-list,.wy-table{border-collapse:collapse;border-spacing:0;empty-cells:show;margin-bottom:24px}.rst-content table.docutils caption,.rst-content table.field-list caption,.wy-table caption{color:#000;font:italic 85%/1 arial,sans-serif;padding:1em 0;text-align:center}.rst-content table.docutils td,.rst-content table.docutils th,.rst-content table.field-list td,.rst-content table.field-list th,.wy-table td,.wy-table th{font-size:90%;margin:0;overflow:visible;padding:8px 16px}.rst-content table.docutils td:first-child,.rst-content table.docutils th:first-child,.rst-content table.field-list td:first-child,.rst-content table.field-list th:first-child,.wy-table td:first-child,.wy-table th:first-child{border-left-width:0}.rst-content table.docutils thead,.rst-content table.field-list thead,.wy-table thead{color:#000;text-align:left;vertical-align:bottom;white-space:nowrap}.rst-content table.docutils thead th,.rst-content table.field-list thead th,.wy-table thead th{font-weight:700;border-bottom:2px solid #e1e4e5}.rst-content table.docutils td,.rst-content table.field-list td,.wy-table td{background-color:transparent;vertical-align:middle}.rst-content table.docutils td p,.rst-content table.field-list td p,.wy-table td p{line-height:18px}.rst-content table.docutils td p:last-child,.rst-content table.field-list td p:last-child,.wy-table td p:last-child{margin-bottom:0}.rst-content table.docutils .wy-table-cell-min,.rst-content table.field-list .wy-table-cell-min,.wy-table .wy-table-cell-min{width:1%;padding-right:0}.rst-content table.docutils .wy-table-cell-min input[type=checkbox],.rst-content table.field-list .wy-table-cell-min input[type=checkbox],.wy-table .wy-table-cell-min input[type=checkbox]{margin:0}.wy-table-secondary{color:grey;font-size:90%}.wy-table-tertiary{color:grey;font-size:80%}.rst-content table.docutils:not(.field-list) tr:nth-child(2n-1) td,.wy-table-backed,.wy-table-odd td,.wy-table-striped tr:nth-child(2n-1) td{background-color:#f3f6f6}.rst-content table.docutils,.wy-table-bordered-all{border:1px solid #e1e4e5}.rst-content table.docutils td,.wy-table-bordered-all td{border-bottom:1px solid #e1e4e5;border-left:1px solid #e1e4e5}.rst-content table.docutils tbody>tr:last-child td,.wy-table-bordered-all tbody>tr:last-child td{border-bottom-width:0}.wy-table-bordered{border:1px solid #e1e4e5}.wy-table-bordered-rows td{border-bottom:1px solid #e1e4e5}.wy-table-bordered-rows tbody>tr:last-child td{border-bottom-width:0}.wy-table-horizontal td,.wy-table-horizontal th{border-width:0 0 1px;border-bottom:1px solid #e1e4e5}.wy-table-horizontal tbody>tr:last-child td{border-bottom-width:0}.wy-table-responsive{margin-bottom:24px;max-width:100%;overflow:auto}.wy-table-responsive table{margin-bottom:0!important}.wy-table-responsive table td,.wy-table-responsive table th{white-space:nowrap}a{color:#2980b9;text-decoration:none;cursor:pointer}a:hover{color:#3091d1}a:visited{color:#9b59b6}html{height:100%}body,html{overflow-x:hidden}body{font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;font-weight:400;color:#404040;min-height:100%;background:#edf0f2}.wy-text-left{text-align:left}.wy-text-center{text-align:center}.wy-text-right{text-align:right}.wy-text-large{font-size:120%}.wy-text-normal{font-size:100%}.wy-text-small,small{font-size:80%}.wy-text-strike{text-decoration:line-through}.wy-text-warning{color:#e67e22!important}a.wy-text-warning:hover{color:#eb9950!important}.wy-text-info{color:#2980b9!important}a.wy-text-info:hover{color:#409ad5!important}.wy-text-success{color:#27ae60!important}a.wy-text-success:hover{color:#36d278!important}.wy-text-danger{color:#e74c3c!important}a.wy-text-danger:hover{color:#ed7669!important}.wy-text-neutral{color:#404040!important}a.wy-text-neutral:hover{color:#595959!important}.rst-content .toctree-wrapper>p.caption,h1,h2,h3,h4,h5,h6,legend{margin-top:0;font-weight:700;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif}p{line-height:24px;font-size:16px;margin:0 0 24px}h1{font-size:175%}.rst-content .toctree-wrapper>p.caption,h2{font-size:150%}h3{font-size:125%}h4{font-size:115%}h5{font-size:110%}h6{font-size:100%}hr{display:block;height:1px;border:0;border-top:1px solid #e1e4e5;margin:24px 0;padding:0}.rst-content code,.rst-content tt,code{white-space:nowrap;max-width:100%;background:#fff;border:1px solid #e1e4e5;font-size:75%;padding:0 5px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#e74c3c;overflow-x:auto}.rst-content tt.code-large,code.code-large{font-size:90%}.rst-content .section ul,.rst-content .toctree-wrapper ul,.rst-content section ul,.wy-plain-list-disc,article ul{list-style:disc;line-height:24px;margin-bottom:24px}.rst-content .section ul li,.rst-content .toctree-wrapper ul li,.rst-content section ul li,.wy-plain-list-disc li,article ul li{list-style:disc;margin-left:24px}.rst-content .section ul li p:last-child,.rst-content .section ul li ul,.rst-content .toctree-wrapper ul li p:last-child,.rst-content .toctree-wrapper ul li ul,.rst-content section ul li p:last-child,.rst-content section ul li ul,.wy-plain-list-disc li p:last-child,.wy-plain-list-disc li ul,article ul li p:last-child,article ul li ul{margin-bottom:0}.rst-content .section ul li li,.rst-content .toctree-wrapper ul li li,.rst-content section ul li li,.wy-plain-list-disc li li,article ul li li{list-style:circle}.rst-content .section ul li li li,.rst-content .toctree-wrapper ul li li li,.rst-content section ul li li li,.wy-plain-list-disc li li li,article ul li li li{list-style:square}.rst-content .section ul li ol li,.rst-content .toctree-wrapper ul li ol li,.rst-content section ul li ol li,.wy-plain-list-disc li ol li,article ul li ol li{list-style:decimal}.rst-content .section ol,.rst-content .section ol.arabic,.rst-content .toctree-wrapper ol,.rst-content .toctree-wrapper ol.arabic,.rst-content section ol,.rst-content section ol.arabic,.wy-plain-list-decimal,article ol{list-style:decimal;line-height:24px;margin-bottom:24px}.rst-content .section ol.arabic li,.rst-content .section ol li,.rst-content .toctree-wrapper ol.arabic li,.rst-content .toctree-wrapper ol li,.rst-content section ol.arabic li,.rst-content section ol li,.wy-plain-list-decimal li,article ol li{list-style:decimal;margin-left:24px}.rst-content .section ol.arabic li ul,.rst-content .section ol li p:last-child,.rst-content .section ol li ul,.rst-content .toctree-wrapper ol.arabic li ul,.rst-content .toctree-wrapper ol li p:last-child,.rst-content .toctree-wrapper ol li ul,.rst-content section ol.arabic li ul,.rst-content section ol li p:last-child,.rst-content section ol li ul,.wy-plain-list-decimal li p:last-child,.wy-plain-list-decimal li ul,article ol li p:last-child,article ol li ul{margin-bottom:0}.rst-content .section ol.arabic li ul li,.rst-content .section ol li ul li,.rst-content .toctree-wrapper ol.arabic li ul li,.rst-content .toctree-wrapper ol li ul li,.rst-content section ol.arabic li ul li,.rst-content section ol li ul li,.wy-plain-list-decimal li ul li,article ol li ul li{list-style:disc}.wy-breadcrumbs{*zoom:1}.wy-breadcrumbs:after,.wy-breadcrumbs:before{display:table;content:""}.wy-breadcrumbs:after{clear:both}.wy-breadcrumbs>li{display:inline-block;padding-top:5px}.wy-breadcrumbs>li.wy-breadcrumbs-aside{float:right}.rst-content .wy-breadcrumbs>li code,.rst-content .wy-breadcrumbs>li tt,.wy-breadcrumbs>li .rst-content tt,.wy-breadcrumbs>li code{all:inherit;color:inherit}.breadcrumb-item:before{content:"/";color:#bbb;font-size:13px;padding:0 6px 0 3px}.wy-breadcrumbs-extra{margin-bottom:0;color:#b3b3b3;font-size:80%;display:inline-block}@media screen and (max-width:480px){.wy-breadcrumbs-extra,.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}@media print{.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}html{font-size:16px}.wy-affix{position:fixed;top:1.618em}.wy-menu a:hover{text-decoration:none}.wy-menu-horiz{*zoom:1}.wy-menu-horiz:after,.wy-menu-horiz:before{display:table;content:""}.wy-menu-horiz:after{clear:both}.wy-menu-horiz li,.wy-menu-horiz ul{display:inline-block}.wy-menu-horiz li:hover{background:hsla(0,0%,100%,.1)}.wy-menu-horiz li.divide-left{border-left:1px solid #404040}.wy-menu-horiz li.divide-right{border-right:1px solid #404040}.wy-menu-horiz a{height:32px;display:inline-block;line-height:32px;padding:0 16px}.wy-menu-vertical{width:300px}.wy-menu-vertical header,.wy-menu-vertical p.caption{color:#55a5d9;height:32px;line-height:32px;padding:0 1.618em;margin:12px 0 0;display:block;font-weight:700;text-transform:uppercase;font-size:85%;white-space:nowrap}.wy-menu-vertical ul{margin-bottom:0}.wy-menu-vertical li.divide-top{border-top:1px solid #404040}.wy-menu-vertical li.divide-bottom{border-bottom:1px solid #404040}.wy-menu-vertical li.current{background:#e3e3e3}.wy-menu-vertical li.current a{color:grey;border-right:1px solid #c9c9c9;padding:.4045em 2.427em}.wy-menu-vertical li.current a:hover{background:#d6d6d6}.rst-content .wy-menu-vertical li tt,.wy-menu-vertical li .rst-content tt,.wy-menu-vertical li code{border:none;background:inherit;color:inherit;padding-left:0;padding-right:0}.wy-menu-vertical li button.toctree-expand{display:block;float:left;margin-left:-1.2em;line-height:18px;color:#4d4d4d;border:none;background:none;padding:0}.wy-menu-vertical li.current>a,.wy-menu-vertical li.on a{color:#404040;font-weight:700;position:relative;background:#fcfcfc;border:none;padding:.4045em 1.618em}.wy-menu-vertical li.current>a:hover,.wy-menu-vertical li.on a:hover{background:#fcfcfc}.wy-menu-vertical li.current>a:hover button.toctree-expand,.wy-menu-vertical li.on a:hover button.toctree-expand{color:grey}.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand{display:block;line-height:18px;color:#333}.wy-menu-vertical li.toctree-l1.current>a{border-bottom:1px solid #c9c9c9;border-top:1px solid #c9c9c9}.wy-menu-vertical .toctree-l1.current .toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .toctree-l11>ul{display:none}.wy-menu-vertical .toctree-l1.current .current.toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .current.toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .current.toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .current.toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .current.toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .current.toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .current.toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .current.toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .current.toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .current.toctree-l11>ul{display:block}.wy-menu-vertical li.toctree-l3,.wy-menu-vertical li.toctree-l4{font-size:.9em}.wy-menu-vertical li.toctree-l2 a,.wy-menu-vertical li.toctree-l3 a,.wy-menu-vertical li.toctree-l4 a,.wy-menu-vertical li.toctree-l5 a,.wy-menu-vertical li.toctree-l6 a,.wy-menu-vertical li.toctree-l7 a,.wy-menu-vertical li.toctree-l8 a,.wy-menu-vertical li.toctree-l9 a,.wy-menu-vertical li.toctree-l10 a{color:#404040}.wy-menu-vertical li.toctree-l2 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l3 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l4 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l5 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l6 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l7 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l8 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l9 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l10 a:hover button.toctree-expand{color:grey}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a,.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a,.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a,.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a,.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a,.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a,.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a,.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{display:block}.wy-menu-vertical li.toctree-l2.current>a{padding:.4045em 2.427em}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{padding:.4045em 1.618em .4045em 4.045em}.wy-menu-vertical li.toctree-l3.current>a{padding:.4045em 4.045em}.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{padding:.4045em 1.618em .4045em 5.663em}.wy-menu-vertical li.toctree-l4.current>a{padding:.4045em 5.663em}.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a{padding:.4045em 1.618em .4045em 7.281em}.wy-menu-vertical li.toctree-l5.current>a{padding:.4045em 7.281em}.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a{padding:.4045em 1.618em .4045em 8.899em}.wy-menu-vertical li.toctree-l6.current>a{padding:.4045em 8.899em}.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a{padding:.4045em 1.618em .4045em 10.517em}.wy-menu-vertical li.toctree-l7.current>a{padding:.4045em 10.517em}.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a{padding:.4045em 1.618em .4045em 12.135em}.wy-menu-vertical li.toctree-l8.current>a{padding:.4045em 12.135em}.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a{padding:.4045em 1.618em .4045em 13.753em}.wy-menu-vertical li.toctree-l9.current>a{padding:.4045em 13.753em}.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a{padding:.4045em 1.618em .4045em 15.371em}.wy-menu-vertical li.toctree-l10.current>a{padding:.4045em 15.371em}.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{padding:.4045em 1.618em .4045em 16.989em}.wy-menu-vertical li.toctree-l2.current>a,.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{background:#c9c9c9}.wy-menu-vertical li.toctree-l2 button.toctree-expand{color:#a3a3a3}.wy-menu-vertical li.toctree-l3.current>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{background:#bdbdbd}.wy-menu-vertical li.toctree-l3 button.toctree-expand{color:#969696}.wy-menu-vertical li.current ul{display:block}.wy-menu-vertical li ul{margin-bottom:0;display:none}.wy-menu-vertical li ul li a{margin-bottom:0;color:#d9d9d9;font-weight:400}.wy-menu-vertical a{line-height:18px;padding:.4045em 1.618em;display:block;position:relative;font-size:90%;color:#d9d9d9}.wy-menu-vertical a:hover{background-color:#4e4a4a;cursor:pointer}.wy-menu-vertical a:hover button.toctree-expand{color:#d9d9d9}.wy-menu-vertical a:active{background-color:#2980b9;cursor:pointer;color:#fff}.wy-menu-vertical a:active button.toctree-expand{color:#fff}.wy-side-nav-search{display:block;width:300px;padding:.809em;margin-bottom:.809em;z-index:200;background-color:#2980b9;text-align:center;color:#fcfcfc}.wy-side-nav-search input[type=text]{width:100%;border-radius:50px;padding:6px 12px;border-color:#2472a4}.wy-side-nav-search img{display:block;margin:auto auto .809em;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-side-nav-search .wy-dropdown>a,.wy-side-nav-search>a{color:#fcfcfc;font-size:100%;font-weight:700;display:inline-block;padding:4px 6px;margin-bottom:.809em;max-width:100%}.wy-side-nav-search .wy-dropdown>a:hover,.wy-side-nav-search>a:hover{background:hsla(0,0%,100%,.1)}.wy-side-nav-search .wy-dropdown>a img.logo,.wy-side-nav-search>a img.logo{display:block;margin:0 auto;height:auto;width:auto;border-radius:0;max-width:100%;background:transparent}.wy-side-nav-search .wy-dropdown>a.icon img.logo,.wy-side-nav-search>a.icon img.logo{margin-top:.85em}.wy-side-nav-search>div.version{margin-top:-.4045em;margin-bottom:.809em;font-weight:400;color:hsla(0,0%,100%,.3)}.wy-nav .wy-menu-vertical header{color:#2980b9}.wy-nav .wy-menu-vertical a{color:#b3b3b3}.wy-nav .wy-menu-vertical a:hover{background-color:#2980b9;color:#fff}[data-menu-wrap]{-webkit-transition:all .2s ease-in;-moz-transition:all .2s ease-in;transition:all .2s ease-in;position:absolute;opacity:1;width:100%;opacity:0}[data-menu-wrap].move-center{left:0;right:auto;opacity:1}[data-menu-wrap].move-left{right:auto;left:-100%;opacity:0}[data-menu-wrap].move-right{right:-100%;left:auto;opacity:0}.wy-body-for-nav{background:#fcfcfc}.wy-grid-for-nav{position:absolute;width:100%;height:100%}.wy-nav-side{position:fixed;top:0;bottom:0;left:0;padding-bottom:2em;width:300px;overflow-x:hidden;overflow-y:hidden;min-height:100%;color:#9b9b9b;background:#343131;z-index:200}.wy-side-scroll{width:320px;position:relative;overflow-x:hidden;overflow-y:scroll;height:100%}.wy-nav-top{display:none;background:#2980b9;color:#fff;padding:.4045em .809em;position:relative;line-height:50px;text-align:center;font-size:100%;*zoom:1}.wy-nav-top:after,.wy-nav-top:before{display:table;content:""}.wy-nav-top:after{clear:both}.wy-nav-top a{color:#fff;font-weight:700}.wy-nav-top img{margin-right:12px;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-nav-top i{font-size:30px;float:left;cursor:pointer;padding-top:inherit}.wy-nav-content-wrap{margin-left:300px;background:#fcfcfc;min-height:100%}.wy-nav-content{padding:1.618em 3.236em;height:100%;max-width:800px;margin:auto}.wy-body-mask{position:fixed;width:100%;height:100%;background:rgba(0,0,0,.2);display:none;z-index:499}.wy-body-mask.on{display:block}footer{color:grey}footer p{margin-bottom:12px}.rst-content footer span.commit tt,footer span.commit .rst-content tt,footer span.commit code{padding:0;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:1em;background:none;border:none;color:grey}.rst-footer-buttons{*zoom:1}.rst-footer-buttons:after,.rst-footer-buttons:before{width:100%;display:table;content:""}.rst-footer-buttons:after{clear:both}.rst-breadcrumbs-buttons{margin-top:12px;*zoom:1}.rst-breadcrumbs-buttons:after,.rst-breadcrumbs-buttons:before{display:table;content:""}.rst-breadcrumbs-buttons:after{clear:both}#search-results .search li{margin-bottom:24px;border-bottom:1px solid #e1e4e5;padding-bottom:24px}#search-results .search li:first-child{border-top:1px solid #e1e4e5;padding-top:24px}#search-results .search li a{font-size:120%;margin-bottom:12px;display:inline-block}#search-results .context{color:grey;font-size:90%}.genindextable li>ul{margin-left:24px}@media screen and (max-width:768px){.wy-body-for-nav{background:#fcfcfc}.wy-nav-top{display:block}.wy-nav-side{left:-300px}.wy-nav-side.shift{width:85%;left:0}.wy-menu.wy-menu-vertical,.wy-side-nav-search,.wy-side-scroll{width:auto}.wy-nav-content-wrap{margin-left:0}.wy-nav-content-wrap .wy-nav-content{padding:1.618em}.wy-nav-content-wrap.shift{position:fixed;min-width:100%;left:85%;top:0;height:100%;overflow:hidden}}@media screen and (min-width:1100px){.wy-nav-content-wrap{background:rgba(0,0,0,.05)}.wy-nav-content{margin:0;background:#fcfcfc}}@media print{.rst-versions,.wy-nav-side,footer{display:none}.wy-nav-content-wrap{margin-left:0}}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60;*zoom:1}.rst-versions .rst-current-version:after,.rst-versions .rst-current-version:before{display:table;content:""}.rst-versions .rst-current-version:after{clear:both}.rst-content .code-block-caption .rst-versions .rst-current-version .headerlink,.rst-content .eqno .rst-versions .rst-current-version .headerlink,.rst-content .rst-versions .rst-current-version .admonition-title,.rst-content code.download .rst-versions .rst-current-version span:first-child,.rst-content dl dt .rst-versions .rst-current-version .headerlink,.rst-content h1 .rst-versions .rst-current-version .headerlink,.rst-content h2 .rst-versions .rst-current-version .headerlink,.rst-content h3 .rst-versions .rst-current-version .headerlink,.rst-content h4 .rst-versions .rst-current-version .headerlink,.rst-content h5 .rst-versions .rst-current-version .headerlink,.rst-content h6 .rst-versions .rst-current-version .headerlink,.rst-content p .rst-versions .rst-current-version .headerlink,.rst-content table>caption .rst-versions .rst-current-version .headerlink,.rst-content tt.download .rst-versions .rst-current-version span:first-child,.rst-versions .rst-current-version .fa,.rst-versions .rst-current-version .icon,.rst-versions .rst-current-version .rst-content .admonition-title,.rst-versions .rst-current-version .rst-content .code-block-caption .headerlink,.rst-versions .rst-current-version .rst-content .eqno .headerlink,.rst-versions .rst-current-version .rst-content code.download span:first-child,.rst-versions .rst-current-version .rst-content dl dt .headerlink,.rst-versions .rst-current-version .rst-content h1 .headerlink,.rst-versions .rst-current-version .rst-content h2 .headerlink,.rst-versions .rst-current-version .rst-content h3 .headerlink,.rst-versions .rst-current-version .rst-content h4 .headerlink,.rst-versions .rst-current-version .rst-content h5 .headerlink,.rst-versions .rst-current-version .rst-content h6 .headerlink,.rst-versions .rst-current-version .rst-content p .headerlink,.rst-versions .rst-current-version .rst-content table>caption .headerlink,.rst-versions .rst-current-version .rst-content tt.download span:first-child,.rst-versions .rst-current-version .wy-menu-vertical li button.toctree-expand,.wy-menu-vertical li .rst-versions .rst-current-version button.toctree-expand{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}}.rst-content .toctree-wrapper>p.caption,.rst-content h1,.rst-content h2,.rst-content h3,.rst-content h4,.rst-content h5,.rst-content h6{margin-bottom:24px}.rst-content img{max-width:100%;height:auto}.rst-content div.figure,.rst-content figure{margin-bottom:24px}.rst-content div.figure .caption-text,.rst-content figure .caption-text{font-style:italic}.rst-content div.figure p:last-child.caption,.rst-content figure p:last-child.caption{margin-bottom:0}.rst-content div.figure.align-center,.rst-content figure.align-center{text-align:center}.rst-content .section>a>img,.rst-content .section>img,.rst-content section>a>img,.rst-content section>img{margin-bottom:24px}.rst-content abbr[title]{text-decoration:none}.rst-content.style-external-links a.reference.external:after{font-family:FontAwesome;content:"\f08e";color:#b3b3b3;vertical-align:super;font-size:60%;margin:0 .2em}.rst-content blockquote{margin-left:24px;line-height:24px;margin-bottom:24px}.rst-content pre.literal-block{white-space:pre;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;display:block;overflow:auto}.rst-content div[class^=highlight],.rst-content pre.literal-block{border:1px solid #e1e4e5;overflow-x:auto;margin:1px 0 24px}.rst-content div[class^=highlight] div[class^=highlight],.rst-content pre.literal-block div[class^=highlight]{padding:0;border:none;margin:0}.rst-content div[class^=highlight] td.code{width:100%}.rst-content .linenodiv pre{border-right:1px solid #e6e9ea;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;user-select:none;pointer-events:none}.rst-content div[class^=highlight] pre{white-space:pre;margin:0;padding:12px;display:block;overflow:auto}.rst-content div[class^=highlight] pre .hll{display:block;margin:0 -12px;padding:0 12px}.rst-content .linenodiv pre,.rst-content div[class^=highlight] pre,.rst-content pre.literal-block{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:12px;line-height:1.4}.rst-content div.highlight .gp,.rst-content div.highlight span.linenos{user-select:none;pointer-events:none}.rst-content div.highlight span.linenos{display:inline-block;padding-left:0;padding-right:12px;margin-right:12px;border-right:1px solid #e6e9ea}.rst-content .code-block-caption{font-style:italic;font-size:85%;line-height:1;padding:1em 0;text-align:center}@media print{.rst-content .codeblock,.rst-content div[class^=highlight],.rst-content div[class^=highlight] pre{white-space:pre-wrap}}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning{clear:both}.rst-content .admonition-todo .last,.rst-content .admonition-todo>:last-child,.rst-content .admonition .last,.rst-content .admonition>:last-child,.rst-content .attention .last,.rst-content .attention>:last-child,.rst-content .caution .last,.rst-content .caution>:last-child,.rst-content .danger .last,.rst-content .danger>:last-child,.rst-content .error .last,.rst-content .error>:last-child,.rst-content .hint .last,.rst-content .hint>:last-child,.rst-content .important .last,.rst-content .important>:last-child,.rst-content .note .last,.rst-content .note>:last-child,.rst-content .seealso .last,.rst-content .seealso>:last-child,.rst-content .tip .last,.rst-content .tip>:last-child,.rst-content .warning .last,.rst-content .warning>:last-child{margin-bottom:0}.rst-content .admonition-title:before{margin-right:4px}.rst-content .admonition table{border-color:rgba(0,0,0,.1)}.rst-content .admonition table td,.rst-content .admonition table th{background:transparent!important;border-color:rgba(0,0,0,.1)!important}.rst-content .section ol.loweralpha,.rst-content .section ol.loweralpha>li,.rst-content .toctree-wrapper ol.loweralpha,.rst-content .toctree-wrapper ol.loweralpha>li,.rst-content section ol.loweralpha,.rst-content section ol.loweralpha>li{list-style:lower-alpha}.rst-content .section ol.upperalpha,.rst-content .section ol.upperalpha>li,.rst-content .toctree-wrapper ol.upperalpha,.rst-content .toctree-wrapper ol.upperalpha>li,.rst-content section ol.upperalpha,.rst-content section ol.upperalpha>li{list-style:upper-alpha}.rst-content .section ol li>*,.rst-content .section ul li>*,.rst-content .toctree-wrapper ol li>*,.rst-content .toctree-wrapper ul li>*,.rst-content section ol li>*,.rst-content section ul li>*{margin-top:12px;margin-bottom:12px}.rst-content .section ol li>:first-child,.rst-content .section ul li>:first-child,.rst-content .toctree-wrapper ol li>:first-child,.rst-content .toctree-wrapper ul li>:first-child,.rst-content section ol li>:first-child,.rst-content section ul li>:first-child{margin-top:0}.rst-content .section ol li>p,.rst-content .section ol li>p:last-child,.rst-content .section ul li>p,.rst-content .section ul li>p:last-child,.rst-content .toctree-wrapper ol li>p,.rst-content .toctree-wrapper ol li>p:last-child,.rst-content .toctree-wrapper ul li>p,.rst-content .toctree-wrapper ul li>p:last-child,.rst-content section ol li>p,.rst-content section ol li>p:last-child,.rst-content section ul li>p,.rst-content section ul li>p:last-child{margin-bottom:12px}.rst-content .section ol li>p:only-child,.rst-content .section ol li>p:only-child:last-child,.rst-content .section ul li>p:only-child,.rst-content .section ul li>p:only-child:last-child,.rst-content .toctree-wrapper ol li>p:only-child,.rst-content .toctree-wrapper ol li>p:only-child:last-child,.rst-content .toctree-wrapper ul li>p:only-child,.rst-content .toctree-wrapper ul li>p:only-child:last-child,.rst-content section ol li>p:only-child,.rst-content section ol li>p:only-child:last-child,.rst-content section ul li>p:only-child,.rst-content section ul li>p:only-child:last-child{margin-bottom:0}.rst-content .section ol li>ol,.rst-content .section ol li>ul,.rst-content .section ul li>ol,.rst-content .section ul li>ul,.rst-content .toctree-wrapper ol li>ol,.rst-content .toctree-wrapper ol li>ul,.rst-content .toctree-wrapper ul li>ol,.rst-content .toctree-wrapper ul li>ul,.rst-content section ol li>ol,.rst-content section ol li>ul,.rst-content section ul li>ol,.rst-content section ul li>ul{margin-bottom:12px}.rst-content .section ol.simple li>*,.rst-content .section ol.simple li ol,.rst-content .section ol.simple li ul,.rst-content .section ul.simple li>*,.rst-content .section ul.simple li ol,.rst-content .section ul.simple li ul,.rst-content .toctree-wrapper ol.simple li>*,.rst-content .toctree-wrapper ol.simple li ol,.rst-content .toctree-wrapper ol.simple li ul,.rst-content .toctree-wrapper ul.simple li>*,.rst-content .toctree-wrapper ul.simple li ol,.rst-content .toctree-wrapper ul.simple li ul,.rst-content section ol.simple li>*,.rst-content section ol.simple li ol,.rst-content section ol.simple li ul,.rst-content section ul.simple li>*,.rst-content section ul.simple li ol,.rst-content section ul.simple li ul{margin-top:0;margin-bottom:0}.rst-content .line-block{margin-left:0;margin-bottom:24px;line-height:24px}.rst-content .line-block .line-block{margin-left:24px;margin-bottom:0}.rst-content .topic-title{font-weight:700;margin-bottom:12px}.rst-content .toc-backref{color:#404040}.rst-content .align-right{float:right;margin:0 0 24px 24px}.rst-content .align-left{float:left;margin:0 24px 24px 0}.rst-content .align-center{margin:auto}.rst-content .align-center:not(table){display:block}.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink{opacity:0;font-size:14px;font-family:FontAwesome;margin-left:.5em}.rst-content .code-block-caption .headerlink:focus,.rst-content .code-block-caption:hover .headerlink,.rst-content .eqno .headerlink:focus,.rst-content .eqno:hover .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink:focus,.rst-content .toctree-wrapper>p.caption:hover .headerlink,.rst-content dl dt .headerlink:focus,.rst-content dl dt:hover .headerlink,.rst-content h1 .headerlink:focus,.rst-content h1:hover .headerlink,.rst-content h2 .headerlink:focus,.rst-content h2:hover .headerlink,.rst-content h3 .headerlink:focus,.rst-content h3:hover .headerlink,.rst-content h4 .headerlink:focus,.rst-content h4:hover .headerlink,.rst-content h5 .headerlink:focus,.rst-content h5:hover .headerlink,.rst-content h6 .headerlink:focus,.rst-content h6:hover .headerlink,.rst-content p.caption .headerlink:focus,.rst-content p.caption:hover .headerlink,.rst-content p .headerlink:focus,.rst-content p:hover .headerlink,.rst-content table>caption .headerlink:focus,.rst-content table>caption:hover .headerlink{opacity:1}.rst-content p a{overflow-wrap:anywhere}.rst-content .wy-table td p,.rst-content .wy-table td ul,.rst-content .wy-table th p,.rst-content .wy-table th ul,.rst-content table.docutils td p,.rst-content table.docutils td ul,.rst-content table.docutils th p,.rst-content table.docutils th ul,.rst-content table.field-list td p,.rst-content table.field-list td ul,.rst-content table.field-list th p,.rst-content table.field-list th ul{font-size:inherit}.rst-content .btn:focus{outline:2px solid}.rst-content table>caption .headerlink:after{font-size:12px}.rst-content .centered{text-align:center}.rst-content .sidebar{float:right;width:40%;display:block;margin:0 0 24px 24px;padding:24px;background:#f3f6f6;border:1px solid #e1e4e5}.rst-content .sidebar dl,.rst-content .sidebar p,.rst-content .sidebar ul{font-size:90%}.rst-content .sidebar .last,.rst-content .sidebar>:last-child{margin-bottom:0}.rst-content .sidebar .sidebar-title{display:block;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif;font-weight:700;background:#e1e4e5;padding:6px 12px;margin:-24px -24px 24px;font-size:100%}.rst-content .highlighted{background:#f1c40f;box-shadow:0 0 0 2px #f1c40f;display:inline;font-weight:700}.rst-content .citation-reference,.rst-content .footnote-reference{vertical-align:baseline;position:relative;top:-.4em;line-height:0;font-size:90%}.rst-content .citation-reference>span.fn-bracket,.rst-content .footnote-reference>span.fn-bracket{display:none}.rst-content .hlist{width:100%}.rst-content dl dt span.classifier:before{content:" : "}.rst-content dl dt span.classifier-delimiter{display:none!important}html.writer-html4 .rst-content table.docutils.citation,html.writer-html4 .rst-content table.docutils.footnote{background:none;border:none}html.writer-html4 .rst-content table.docutils.citation td,html.writer-html4 .rst-content table.docutils.citation tr,html.writer-html4 .rst-content table.docutils.footnote td,html.writer-html4 .rst-content table.docutils.footnote tr{border:none;background-color:transparent!important;white-space:normal}html.writer-html4 .rst-content table.docutils.citation td.label,html.writer-html4 .rst-content table.docutils.footnote td.label{padding-left:0;padding-right:0;vertical-align:top}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.field-list,html.writer-html5 .rst-content dl.footnote{display:grid;grid-template-columns:auto minmax(80%,95%)}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dt{display:inline-grid;grid-template-columns:max-content auto}html.writer-html5 .rst-content aside.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content div.citation{display:grid;grid-template-columns:auto auto minmax(.65rem,auto) minmax(40%,95%)}html.writer-html5 .rst-content aside.citation>span.label,html.writer-html5 .rst-content aside.footnote>span.label,html.writer-html5 .rst-content div.citation>span.label{grid-column-start:1;grid-column-end:2}html.writer-html5 .rst-content aside.citation>span.backrefs,html.writer-html5 .rst-content aside.footnote>span.backrefs,html.writer-html5 .rst-content div.citation>span.backrefs{grid-column-start:2;grid-column-end:3;grid-row-start:1;grid-row-end:3}html.writer-html5 .rst-content aside.citation>p,html.writer-html5 .rst-content aside.footnote>p,html.writer-html5 .rst-content div.citation>p{grid-column-start:4;grid-column-end:5}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.field-list,html.writer-html5 .rst-content dl.footnote{margin-bottom:24px}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dt{padding-left:1rem}html.writer-html5 .rst-content dl.citation>dd,html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dd,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dd,html.writer-html5 .rst-content dl.footnote>dt{margin-bottom:0}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.footnote{font-size:.9rem}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.footnote>dt{margin:0 .5rem .5rem 0;line-height:1.2rem;word-break:break-all;font-weight:400}html.writer-html5 .rst-content dl.citation>dt>span.brackets:before,html.writer-html5 .rst-content dl.footnote>dt>span.brackets:before{content:"["}html.writer-html5 .rst-content dl.citation>dt>span.brackets:after,html.writer-html5 .rst-content dl.footnote>dt>span.brackets:after{content:"]"}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref{text-align:left;font-style:italic;margin-left:.65rem;word-break:break-word;word-spacing:-.1rem;max-width:5rem}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref>a,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref>a{word-break:keep-all}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref>a:not(:first-child):before,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref>a:not(:first-child):before{content:" "}html.writer-html5 .rst-content dl.citation>dd,html.writer-html5 .rst-content dl.footnote>dd{margin:0 0 .5rem;line-height:1.2rem}html.writer-html5 .rst-content dl.citation>dd p,html.writer-html5 .rst-content dl.footnote>dd p{font-size:.9rem}html.writer-html5 .rst-content aside.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content div.citation{padding-left:1rem;padding-right:1rem;font-size:.9rem;line-height:1.2rem}html.writer-html5 .rst-content aside.citation p,html.writer-html5 .rst-content aside.footnote p,html.writer-html5 .rst-content div.citation p{font-size:.9rem;line-height:1.2rem;margin-bottom:12px}html.writer-html5 .rst-content aside.citation span.backrefs,html.writer-html5 .rst-content aside.footnote span.backrefs,html.writer-html5 .rst-content div.citation span.backrefs{text-align:left;font-style:italic;margin-left:.65rem;word-break:break-word;word-spacing:-.1rem;max-width:5rem}html.writer-html5 .rst-content aside.citation span.backrefs>a,html.writer-html5 .rst-content aside.footnote span.backrefs>a,html.writer-html5 .rst-content div.citation span.backrefs>a{word-break:keep-all}html.writer-html5 .rst-content aside.citation span.backrefs>a:not(:first-child):before,html.writer-html5 .rst-content aside.footnote span.backrefs>a:not(:first-child):before,html.writer-html5 .rst-content div.citation span.backrefs>a:not(:first-child):before{content:" "}html.writer-html5 .rst-content aside.citation span.label,html.writer-html5 .rst-content aside.footnote span.label,html.writer-html5 .rst-content div.citation span.label{line-height:1.2rem}html.writer-html5 .rst-content aside.citation-list,html.writer-html5 .rst-content aside.footnote-list,html.writer-html5 .rst-content div.citation-list{margin-bottom:24px}html.writer-html5 .rst-content dl.option-list kbd{font-size:.9rem}.rst-content table.docutils.footnote,html.writer-html4 .rst-content table.docutils.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content aside.footnote-list aside.footnote,html.writer-html5 .rst-content div.citation-list>div.citation,html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.footnote{color:grey}.rst-content table.docutils.footnote code,.rst-content table.docutils.footnote tt,html.writer-html4 .rst-content table.docutils.citation code,html.writer-html4 .rst-content table.docutils.citation tt,html.writer-html5 .rst-content aside.footnote-list aside.footnote code,html.writer-html5 .rst-content aside.footnote-list aside.footnote tt,html.writer-html5 .rst-content aside.footnote code,html.writer-html5 .rst-content aside.footnote tt,html.writer-html5 .rst-content div.citation-list>div.citation code,html.writer-html5 .rst-content div.citation-list>div.citation tt,html.writer-html5 .rst-content dl.citation code,html.writer-html5 .rst-content dl.citation tt,html.writer-html5 .rst-content dl.footnote code,html.writer-html5 .rst-content dl.footnote tt{color:#555}.rst-content .wy-table-responsive.citation,.rst-content .wy-table-responsive.footnote{margin-bottom:0}.rst-content .wy-table-responsive.citation+:not(.citation),.rst-content .wy-table-responsive.footnote+:not(.footnote){margin-top:24px}.rst-content .wy-table-responsive.citation:last-child,.rst-content .wy-table-responsive.footnote:last-child{margin-bottom:24px}.rst-content table.docutils th{border-color:#e1e4e5}html.writer-html5 .rst-content table.docutils th{border:1px solid #e1e4e5}html.writer-html5 .rst-content table.docutils td>p,html.writer-html5 .rst-content table.docutils th>p{line-height:1rem;margin-bottom:0;font-size:.9rem}.rst-content table.docutils td .last,.rst-content table.docutils td .last>:last-child{margin-bottom:0}.rst-content table.field-list,.rst-content table.field-list td{border:none}.rst-content table.field-list td p{line-height:inherit}.rst-content table.field-list td>strong{display:inline-block}.rst-content table.field-list .field-name{padding-right:10px;text-align:left;white-space:nowrap}.rst-content table.field-list .field-body{text-align:left}.rst-content code,.rst-content tt{color:#000;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;padding:2px 5px}.rst-content code big,.rst-content code em,.rst-content tt big,.rst-content tt em{font-size:100%!important;line-height:normal}.rst-content code.literal,.rst-content tt.literal{color:#e74c3c;white-space:normal}.rst-content code.xref,.rst-content tt.xref,a .rst-content code,a .rst-content tt{font-weight:700;color:#404040;overflow-wrap:normal}.rst-content kbd,.rst-content pre,.rst-content samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace}.rst-content a code,.rst-content a tt{color:#2980b9}.rst-content dl{margin-bottom:24px}.rst-content dl dt{font-weight:700;margin-bottom:12px}.rst-content dl ol,.rst-content dl p,.rst-content dl table,.rst-content dl ul{margin-bottom:12px}.rst-content dl dd{margin:0 0 12px 24px;line-height:24px}.rst-content dl dd>ol:last-child,.rst-content dl dd>p:last-child,.rst-content dl dd>table:last-child,.rst-content dl dd>ul:last-child{margin-bottom:0}html.writer-html4 .rst-content dl:not(.docutils),html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple){margin-bottom:24px}html.writer-html4 .rst-content dl:not(.docutils)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt{display:table;margin:6px 0;font-size:90%;line-height:normal;background:#e7f2fa;color:#2980b9;border-top:3px solid #6ab0de;padding:6px;position:relative}html.writer-html4 .rst-content dl:not(.docutils)>dt:before,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt:before{color:#6ab0de}html.writer-html4 .rst-content dl:not(.docutils)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt{margin-bottom:6px;border:none;border-left:3px solid #ccc;background:#f0f0f0;color:#555}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils)>dt:first-child,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt:first-child{margin-top:0}html.writer-html4 .rst-content dl:not(.docutils) code.descclassname,html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descclassname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descname{background-color:transparent;border:none;padding:0;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descname{font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .optional,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .optional{display:inline-block;padding:0 4px;color:#000;font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .property,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .property{display:inline-block;padding-right:8px;max-width:100%}html.writer-html4 .rst-content dl:not(.docutils) .k,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .k{font-style:italic}html.writer-html4 .rst-content dl:not(.docutils) .descclassname,html.writer-html4 .rst-content dl:not(.docutils) .descname,html.writer-html4 .rst-content dl:not(.docutils) .sig-name,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .sig-name{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#000}.rst-content .viewcode-back,.rst-content .viewcode-link{display:inline-block;color:#27ae60;font-size:80%;padding-left:24px}.rst-content .viewcode-back{display:block;float:right}.rst-content p.rubric{margin-bottom:12px;font-weight:700}.rst-content code.download,.rst-content tt.download{background:inherit;padding:inherit;font-weight:400;font-family:inherit;font-size:inherit;color:inherit;border:inherit;white-space:inherit}.rst-content code.download span:first-child,.rst-content tt.download span:first-child{-webkit-font-smoothing:subpixel-antialiased}.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{margin-right:4px}.rst-content .guilabel,.rst-content .menuselection{font-size:80%;font-weight:700;border-radius:4px;padding:2.4px 6px;margin:auto 2px}.rst-content .guilabel,.rst-content .menuselection{border:1px solid #7fbbe3;background:#e7f2fa}.rst-content :not(dl.option-list)>:not(dt):not(kbd):not(.kbd)>.kbd,.rst-content :not(dl.option-list)>:not(dt):not(kbd):not(.kbd)>kbd{color:inherit;font-size:80%;background-color:#fff;border:1px solid #a6a6a6;border-radius:4px;box-shadow:0 2px grey;padding:2.4px 6px;margin:auto 0}.rst-content .versionmodified{font-style:italic}@media screen and (max-width:480px){.rst-content .sidebar{width:100%}}span[id*=MathJax-Span]{color:#404040}.math{text-align:center}@font-face{font-family:Lato;src:url(fonts/lato-normal.woff2?bd03a2cc277bbbc338d464e679fe9942) format("woff2"),url(fonts/lato-normal.woff?27bd77b9162d388cb8d4c4217c7c5e2a) format("woff");font-weight:400;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold.woff2?cccb897485813c7c256901dbca54ecf2) format("woff2"),url(fonts/lato-bold.woff?d878b6c29b10beca227e9eef4246111b) format("woff");font-weight:700;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold-italic.woff2?0b6bb6725576b072c5d0b02ecdd1900d) format("woff2"),url(fonts/lato-bold-italic.woff?9c7e4e9eb485b4a121c760e61bc3707c) format("woff");font-weight:700;font-style:italic;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-normal-italic.woff2?4eb103b4d12be57cb1d040ed5e162e9d) format("woff2"),url(fonts/lato-normal-italic.woff?f28f2d6482446544ef1ea1ccc6dd5892) format("woff");font-weight:400;font-style:italic;font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:400;src:url(fonts/Roboto-Slab-Regular.woff2?7abf5b8d04d26a2cafea937019bca958) format("woff2"),url(fonts/Roboto-Slab-Regular.woff?c1be9284088d487c5e3ff0a10a92e58c) format("woff");font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:700;src:url(fonts/Roboto-Slab-Bold.woff2?9984f4a9bda09be08e83f2506954adbe) format("woff2"),url(fonts/Roboto-Slab-Bold.woff?bed5564a116b05148e3b3bea6fb1162a) format("woff");font-display:block} \ No newline at end of file diff --git a/_static/dark_mode_css/custom.css b/_static/dark_mode_css/custom.css new file mode 100644 index 00000000..989c2ada --- /dev/null +++ b/_static/dark_mode_css/custom.css @@ -0,0 +1,77 @@ +.wy-side-nav-search input[type='text'] { + border-radius: 3px; +} + +input[type='color'], +input[type='date'], +input[type='datetime-local'], +input[type='datetime'], +input[type='email'], +input[type='month'], +input[type='number'], +input[type='password'], +input[type='search'], +input[type='tel'], +input[type='text'], +input[type='time'], +input[type='url'], +input[type='week'] { + box-shadow: none; +} + +.theme-switcher { + border-radius: 50%; + position: fixed; + right: 1.6em; + bottom: 1.4em; + z-index: 3; + border: none; + height: 2.2em; + width: 2.2em; + background-color: #fcfcfc; + font-size: 20px; + -webkit-box-shadow: 0px 3px 14px 4px rgba(0, 0, 0, 0.62); + box-shadow: 0px 3px 14px 4px rgba(0, 0, 0, 0.62); + color: #404040; + transition: all 0.3s ease-in-out; +} + +.wy-nav-content a, +.wy-nav-content a:visited { + color: #3091d1; +} + +body, +.wy-nav-content-wrap, +.wy-nav-content, +.section, +.highlight, +.rst-content div[class^='highlight'], +.wy-nav-content a, +.btn-neutral, +.btn, +footer, +.wy-nav-side, +.wy-menu-vertical li, +.wy-menu-vertical a, +.wy-side-nav-search .wy-dropdown, +.wy-side-nav-search a, +.wy-side-nav-search input, +html.writer-html4 .rst-content dl:not(.docutils) > dt, +html.writer-html5 + .rst-content + dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) + > dt, +.rst-content code, +.rst-content tt, +html.writer-html4 .rst-content dl:not(.docutils) dl:not(.field-list) > dt, +html.writer-html5 + .rst-content + dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) + dl:not(.field-list) + > dt, +code, +.rst-content code.xref, +.rst-content tt.xref { + transition: all 0.2s ease-in-out; +} diff --git a/_static/dark_mode_css/dark.css b/_static/dark_mode_css/dark.css new file mode 100644 index 00000000..e863889c --- /dev/null +++ b/_static/dark_mode_css/dark.css @@ -0,0 +1,520 @@ +:root { + --dark-text-color: #c1c1c1; + --dark-link-color: #249ee8; +} + +html[data-theme="dark"] body { + color: #bfbfbf; +} + +html[data-theme="dark"] .wy-nav-content-wrap { + background-color: #101010; +} + +html[data-theme="dark"] .wy-nav-content { + background-color: #141414; +} + +html[data-theme="dark"] .section { + color: var(--dark-text-color); +} + +html[data-theme="dark"] .highlight { + background-color: #17181c; +} + +html[data-theme="dark"] .highlight .nn { + color: var(--dark-text-color); +} + +html[data-theme="dark"] .highlight .nb { + color: #8bb8df; +} + +html[data-theme="dark"] .highlight .nv { + color: #40ffff; +} + +html[data-theme="dark"] .highlight .kn, +html[data-theme="dark"] .highlight .kc, +html[data-theme="dark"] .highlight .k { + color: #41c2ea; +} + +html[data-theme="dark"] .highlight .s1, +html[data-theme="dark"] .highlight .s2 { + color: #b3e87f; +} + +html[data-theme="dark"] .highlight .nt { + color: #ccb350; +} + +html[data-theme="dark"] .highlight .c1 { + color: #686868; +} + +html[data-theme="dark"] .highlight .hll { + background-color: #002c4d; +} + +html[data-theme="dark"] .rst-content div[class^="highlight"] { + border-color: #1a1a1a; +} + +html[data-theme="dark"] .wy-nav-content a, +html[data-theme="dark"] .wy-nav-content a:visited { + color: var(--dark-link-color); +} + +html[data-theme="dark"] .btn-neutral { + background-color: #17181c !important; +} + +html[data-theme="dark"] .btn-neutral:hover { + background-color: #101114 !important; +} + +html[data-theme="dark"] .btn-neutral:visited { + color: #c1c1c1 !important; +} + +html[data-theme="dark"] .btn { + box-shadow: none; +} + +html[data-theme="dark"] footer { + color: #bdbdbd; +} + +html[data-theme="dark"] .wy-nav-side { + background-color: #0d0d0d; +} + +html[data-theme="dark"] .wy-menu-vertical li.current { + background-color: #141414; +} + +html[data-theme="dark"] .wy-menu-vertical li.current > a, +html[data-theme="dark"] .wy-menu-vertical li.on a { + background-color: #141415; + color: var(--dark-text-color); +} + +html[data-theme="dark"] .wy-menu-vertical li.toctree-l1.current > a, +html[data-theme="dark"] .wy-menu-vertical li.current a { + border-color: #0b0c0d; +} + +html[data-theme="dark"] .wy-menu-vertical li.current a { + color: #bbb; +} + +html[data-theme="dark"] .wy-menu-vertical li.current a:hover { + background-color: #222; +} + +html[data-theme="dark"] .wy-menu-vertical a:hover, +html[data-theme="dark"] .wy-menu-vertical li.current > a:hover, +html[data-theme="dark"] .wy-menu-vertical li.on a:hover { + background-color: #1e1e1e; +} + +html[data-theme="dark"] .wy-menu-vertical li.toctree-l2.current > a, +html[data-theme="dark"] + .wy-menu-vertical + li.toctree-l2.current + li.toctree-l3 + > a { + background-color: #18181a; +} + +html[data-theme="dark"] .wy-side-nav-search { + background-color: #0b152d; +} + +html[data-theme="dark"] .wy-side-nav-search .wy-dropdown > a, +html[data-theme="dark"] .wy-side-nav-search > a { + color: #ddd; +} + +html[data-theme="dark"] .wy-side-nav-search input[type="text"] { + border-color: #111; + background-color: #141414; + color: var(--dark-text-color); +} + +html[data-theme="dark"] .theme-switcher { + background-color: #0b0c0d; + color: var(--dark-text-color); +} + +html[data-theme="dark"].writer-html4 .rst-content dl:not(.docutils) > dt, +html[data-theme="dark"].writer-html5 + .rst-content + dl[class]:not(.option-list):not(.field-list):not(.footnote):not( + .glossary + ):not(.simple) + > dt { + background-color: #0b0b0b; + color: #007dce; + border-color: #282828; +} + +html[data-theme="dark"] .rst-content code, +html[data-theme="dark"] .rst-content tt { + color: var(--dark-text-color); +} + +html[data-theme="dark"].writer-html4 + .rst-content + dl:not(.docutils) + dl:not(.field-list) + > dt, +html[data-theme="dark"].writer-html5 + .rst-content + dl[class]:not(.option-list):not(.field-list):not(.footnote):not( + .glossary + ):not(.simple) + dl:not(.field-list) + > dt { + background-color: #0f0f0f; + color: #959595; + border-color: #2b2b2b; +} + +html[data-theme="dark"] .rst-content code, +html[data-theme="dark"] .rst-content tt, +html[data-theme="dark"] code { + background-color: #2d2d2d; + border-color: #1c1c1c; +} + +html[data-theme="dark"] .rst-content code.xref, +html[data-theme="dark"] .rst-content tt.xref, +html[data-theme="dark"] a .rst-content code, +html[data-theme="dark"] a .rst-content tt { + color: #cecece; +} + +html[data-theme="dark"] .rst-content .hint, +html[data-theme="dark"] .rst-content .important, +html[data-theme="dark"] .rst-content .tip, +html[data-theme="dark"] .rst-content .wy-alert-success.admonition, +html[data-theme="dark"] .rst-content .wy-alert-success.admonition-todo, +html[data-theme="dark"] .rst-content .wy-alert-success.attention, +html[data-theme="dark"] .rst-content .wy-alert-success.caution, +html[data-theme="dark"] .rst-content .wy-alert-success.danger, +html[data-theme="dark"] .rst-content .wy-alert-success.error, +html[data-theme="dark"] .rst-content .wy-alert-success.note, +html[data-theme="dark"] .rst-content .wy-alert-success.seealso, +html[data-theme="dark"] .rst-content .wy-alert-success.warning, +html[data-theme="dark"] .wy-alert.wy-alert-success { + background-color: #00392e; +} + +html[data-theme="dark"] .rst-content .hint .admonition-title, +html[data-theme="dark"] .rst-content .hint .wy-alert-title, +html[data-theme="dark"] .rst-content .important .admonition-title, +html[data-theme="dark"] .rst-content .important .wy-alert-title, +html[data-theme="dark"] .rst-content .tip .admonition-title, +html[data-theme="dark"] .rst-content .tip .wy-alert-title, +html[data-theme="dark"] + .rst-content + .wy-alert-success.admonition-todo + .admonition-title, +html[data-theme="dark"] + .rst-content + .wy-alert-success.admonition-todo + .wy-alert-title, +html[data-theme="dark"] + .rst-content + .wy-alert-success.admonition + .admonition-title, +html[data-theme="dark"] + .rst-content + .wy-alert-success.admonition + .wy-alert-title, +html[data-theme="dark"] + .rst-content + .wy-alert-success.attention + .admonition-title, +html[data-theme="dark"] + .rst-content + .wy-alert-success.attention + .wy-alert-title, +html[data-theme="dark"] + .rst-content + .wy-alert-success.caution + .admonition-title, +html[data-theme="dark"] .rst-content .wy-alert-success.caution .wy-alert-title, +html[data-theme="dark"] .rst-content .wy-alert-success.danger .admonition-title, +html[data-theme="dark"] .rst-content .wy-alert-success.danger .wy-alert-title, +html[data-theme="dark"] .rst-content .wy-alert-success.error .admonition-title, +html[data-theme="dark"] .rst-content .wy-alert-success.error .wy-alert-title, +html[data-theme="dark"] .rst-content .wy-alert-success.note .admonition-title, +html[data-theme="dark"] .rst-content .wy-alert-success.note .wy-alert-title, +html[data-theme="dark"] + .rst-content + .wy-alert-success.seealso + .admonition-title, +html[data-theme="dark"] .rst-content .wy-alert-success.seealso .wy-alert-title, +html[data-theme="dark"] + .rst-content + .wy-alert-success.warning + .admonition-title, +html[data-theme="dark"] .rst-content .wy-alert-success.warning .wy-alert-title, +html[data-theme="dark"] + .rst-content + .wy-alert.wy-alert-success + .admonition-title, +html[data-theme="dark"] + .wy-alert.wy-alert-success + .rst-content + .admonition-title, +html[data-theme="dark"] .wy-alert.wy-alert-success .wy-alert-title { + background-color: #006a56; +} + +html[data-theme="dark"] .rst-content .admonition, +html[data-theme="dark"] .rst-content .note, +html[data-theme="dark"] .rst-content .seealso, +html[data-theme="dark"] .rst-content .wy-alert-info.admonition, +html[data-theme="dark"] .rst-content .wy-alert-info.admonition-todo, +html[data-theme="dark"] .rst-content .wy-alert-info.attention, +html[data-theme="dark"] .rst-content .wy-alert-info.caution, +html[data-theme="dark"] .rst-content .wy-alert-info.danger, +html[data-theme="dark"] .rst-content .wy-alert-info.error, +html[data-theme="dark"] .rst-content .wy-alert-info.hint, +html[data-theme="dark"] .rst-content .wy-alert-info.important, +html[data-theme="dark"] .rst-content .wy-alert-info.tip, +html[data-theme="dark"] .rst-content .wy-alert-info.warning, +html[data-theme="dark"] .wy-alert.wy-alert-info { + background-color: #002c4d; +} + +html[data-theme="dark"] .rst-content .admonition .admonition-title, +html[data-theme="dark"] .rst-content .note .admonition-title, +html[data-theme="dark"] .rst-content .note .wy-alert-title, +html[data-theme="dark"] .rst-content .seealso .admonition-title, +html[data-theme="dark"] .rst-content .seealso .wy-alert-title, +html[data-theme="dark"] + .rst-content + .wy-alert-info.admonition-todo + .admonition-title, +html[data-theme="dark"] + .rst-content + .wy-alert-info.admonition-todo + .wy-alert-title, +html[data-theme="dark"] + .rst-content + .wy-alert-info.admonition + .admonition-title, +html[data-theme="dark"] .rst-content .wy-alert-info.admonition .wy-alert-title, +html[data-theme="dark"] .rst-content .wy-alert-info.attention .admonition-title, +html[data-theme="dark"] .rst-content .wy-alert-info.attention .wy-alert-title, +html[data-theme="dark"] .rst-content .wy-alert-info.caution .admonition-title, +html[data-theme="dark"] .rst-content .wy-alert-info.caution .wy-alert-title, +html[data-theme="dark"] .rst-content .wy-alert-info.danger .admonition-title, +html[data-theme="dark"] .rst-content .wy-alert-info.danger .wy-alert-title, +html[data-theme="dark"] .rst-content .wy-alert-info.error .admonition-title, +html[data-theme="dark"] .rst-content .wy-alert-info.error .wy-alert-title, +html[data-theme="dark"] .rst-content .wy-alert-info.hint .admonition-title, +html[data-theme="dark"] .rst-content .wy-alert-info.hint .wy-alert-title, +html[data-theme="dark"] .rst-content .wy-alert-info.important .admonition-title, +html[data-theme="dark"] .rst-content .wy-alert-info.important .wy-alert-title, +html[data-theme="dark"] .rst-content .wy-alert-info.tip .admonition-title, +html[data-theme="dark"] .rst-content .wy-alert-info.tip .wy-alert-title, +html[data-theme="dark"] .rst-content .wy-alert-info.warning .admonition-title, +html[data-theme="dark"] .rst-content .wy-alert-info.warning .wy-alert-title, +html[data-theme="dark"] .rst-content .wy-alert.wy-alert-info .admonition-title, +html[data-theme="dark"] .wy-alert.wy-alert-info .rst-content .admonition-title, +html[data-theme="dark"] .wy-alert.wy-alert-info .wy-alert-title { + background-color: #004a7b; +} + +html[data-theme="dark"] .rst-content .admonition-todo, +html[data-theme="dark"] .rst-content .attention, +html[data-theme="dark"] .rst-content .caution, +html[data-theme="dark"] .rst-content .warning, +html[data-theme="dark"] .rst-content .wy-alert-warning.admonition, +html[data-theme="dark"] .rst-content .wy-alert-warning.danger, +html[data-theme="dark"] .rst-content .wy-alert-warning.error, +html[data-theme="dark"] .rst-content .wy-alert-warning.hint, +html[data-theme="dark"] .rst-content .wy-alert-warning.important, +html[data-theme="dark"] .rst-content .wy-alert-warning.note, +html[data-theme="dark"] .rst-content .wy-alert-warning.seealso, +html[data-theme="dark"] .rst-content .wy-alert-warning.tip, +html[data-theme="dark"] .wy-alert.wy-alert-warning { + background-color: #533500; +} + +html[data-theme="dark"] .rst-content .admonition-todo .admonition-title, +html[data-theme="dark"] .rst-content .admonition-todo .wy-alert-title, +html[data-theme="dark"] .rst-content .attention .admonition-title, +html[data-theme="dark"] .rst-content .attention .wy-alert-title, +html[data-theme="dark"] .rst-content .caution .admonition-title, +html[data-theme="dark"] .rst-content .caution .wy-alert-title, +html[data-theme="dark"] .rst-content .warning .admonition-title, +html[data-theme="dark"] .rst-content .warning .wy-alert-title, +html[data-theme="dark"] + .rst-content + .wy-alert-warning.admonition + .admonition-title, +html[data-theme="dark"] + .rst-content + .wy-alert-warning.admonition + .wy-alert-title, +html[data-theme="dark"] .rst-content .wy-alert-warning.danger .admonition-title, +html[data-theme="dark"] .rst-content .wy-alert-warning.danger .wy-alert-title, +html[data-theme="dark"] .rst-content .wy-alert-warning.error .admonition-title, +html[data-theme="dark"] .rst-content .wy-alert-warning.error .wy-alert-title, +html[data-theme="dark"] .rst-content .wy-alert-warning.hint .admonition-title, +html[data-theme="dark"] .rst-content .wy-alert-warning.hint .wy-alert-title, +html[data-theme="dark"] + .rst-content + .wy-alert-warning.important + .admonition-title, +html[data-theme="dark"] + .rst-content + .wy-alert-warning.important + .wy-alert-title, +html[data-theme="dark"] .rst-content .wy-alert-warning.note .admonition-title, +html[data-theme="dark"] .rst-content .wy-alert-warning.note .wy-alert-title, +html[data-theme="dark"] + .rst-content + .wy-alert-warning.seealso + .admonition-title, +html[data-theme="dark"] .rst-content .wy-alert-warning.seealso .wy-alert-title, +html[data-theme="dark"] .rst-content .wy-alert-warning.tip .admonition-title, +html[data-theme="dark"] .rst-content .wy-alert-warning.tip .wy-alert-title, +html[data-theme="dark"] + .rst-content + .wy-alert.wy-alert-warning + .admonition-title, +html[data-theme="dark"] + .wy-alert.wy-alert-warning + .rst-content + .admonition-title, +html[data-theme="dark"] .wy-alert.wy-alert-warning .wy-alert-title { + background-color: #803b00; +} + +html[data-theme="dark"] .rst-content .danger, +html[data-theme="dark"] .rst-content .error, +html[data-theme="dark"] .rst-content .wy-alert-danger.admonition, +html[data-theme="dark"] .rst-content .wy-alert-danger.admonition-todo, +html[data-theme="dark"] .rst-content .wy-alert-danger.attention, +html[data-theme="dark"] .rst-content .wy-alert-danger.caution, +html[data-theme="dark"] .rst-content .wy-alert-danger.hint, +html[data-theme="dark"] .rst-content .wy-alert-danger.important, +html[data-theme="dark"] .rst-content .wy-alert-danger.note, +html[data-theme="dark"] .rst-content .wy-alert-danger.seealso, +html[data-theme="dark"] .rst-content .wy-alert-danger.tip, +html[data-theme="dark"] .rst-content .wy-alert-danger.warning, +html[data-theme="dark"] .wy-alert.wy-alert-danger { + background-color: #82231a; +} + +html[data-theme="dark"] .rst-content .danger .admonition-title, +html[data-theme="dark"] .rst-content .danger .wy-alert-title, +html[data-theme="dark"] .rst-content .error .admonition-title, +html[data-theme="dark"] .rst-content .error .wy-alert-title, +html[data-theme="dark"] + .rst-content + .wy-alert-danger.admonition-todo + .admonition-title, +html[data-theme="dark"] + .rst-content + .wy-alert-danger.admonition-todo + .wy-alert-title, +html[data-theme="dark"] + .rst-content + .wy-alert-danger.admonition + .admonition-title, +html[data-theme="dark"] + .rst-content + .wy-alert-danger.admonition + .wy-alert-title, +html[data-theme="dark"] + .rst-content + .wy-alert-danger.attention + .admonition-title, +html[data-theme="dark"] .rst-content .wy-alert-danger.attention .wy-alert-title, +html[data-theme="dark"] .rst-content .wy-alert-danger.caution .admonition-title, +html[data-theme="dark"] .rst-content .wy-alert-danger.caution .wy-alert-title, +html[data-theme="dark"] .rst-content .wy-alert-danger.hint .admonition-title, +html[data-theme="dark"] .rst-content .wy-alert-danger.hint .wy-alert-title, +html[data-theme="dark"] + .rst-content + .wy-alert-danger.important + .admonition-title, +html[data-theme="dark"] .rst-content .wy-alert-danger.important .wy-alert-title, +html[data-theme="dark"] .rst-content .wy-alert-danger.note .admonition-title, +html[data-theme="dark"] .rst-content .wy-alert-danger.note .wy-alert-title, +html[data-theme="dark"] .rst-content .wy-alert-danger.seealso .admonition-title, +html[data-theme="dark"] .rst-content .wy-alert-danger.seealso .wy-alert-title, +html[data-theme="dark"] .rst-content .wy-alert-danger.tip .admonition-title, +html[data-theme="dark"] .rst-content .wy-alert-danger.tip .wy-alert-title, +html[data-theme="dark"] .rst-content .wy-alert-danger.warning .admonition-title, +html[data-theme="dark"] .rst-content .wy-alert-danger.warning .wy-alert-title, +html[data-theme="dark"] + .rst-content + .wy-alert.wy-alert-danger + .admonition-title, +html[data-theme="dark"] + .wy-alert.wy-alert-danger + .rst-content + .admonition-title, +html[data-theme="dark"] .wy-alert.wy-alert-danger .wy-alert-title { + background-color: #b9372b; +} + +html[data-theme="dark"] .wy-nav-top { + background-color: #0b152d; +} + +html[data-theme="dark"] .rst-content table.docutils thead, +html[data-theme="dark"] .rst-content table.field-list thead, +html[data-theme="dark"] .wy-table thead { + color: var(--dark-text-color); +} + +html[data-theme="dark"] + .rst-content + table.docutils:not(.field-list) + tr:nth-child(2n-1) + td, +html[data-theme="dark"] .wy-table-backed, +html[data-theme="dark"] html[data-theme="dark"] .wy-table-odd td, +html[data-theme="dark"] .wy-table-striped tr:nth-child(2n-1) td { + background-color: #181818; +} + +html[data-theme="dark"] .rst-content table.docutils td, +html[data-theme="dark"] .wy-table-bordered-all td, +html[data-theme="dark"].writer-html5 .rst-content table.docutils th, +html[data-theme="dark"] .rst-content table.docutils, +html[data-theme="dark"] .wy-table-bordered-all { + border-color: #262626; +} + +html[data-theme="dark"] .rst-content table.docutils caption, +html[data-theme="dark"] .rst-content table.field-list caption, +html[data-theme="dark"] .wy-table caption { + color: var(--dark-text-color); +} + +html[data-theme="dark"] .wy-menu-vertical li.toctree-l3.current > a, +html[data-theme="dark"] + .wy-menu-vertical + li.toctree-l3.current + li.toctree-l4 + > a { + background-color: #18181a; +} + +html[data-theme="dark"] .guilabel { + background-color: #343434; + border-color: #4d4d4d; +} diff --git a/_static/dark_mode_css/general.css b/_static/dark_mode_css/general.css new file mode 100644 index 00000000..aa614f81 --- /dev/null +++ b/_static/dark_mode_css/general.css @@ -0,0 +1,68 @@ +input[type='color'], +input[type='date'], +input[type='datetime-local'], +input[type='datetime'], +input[type='email'], +input[type='month'], +input[type='number'], +input[type='password'], +input[type='search'], +input[type='tel'], +input[type='text'], +input[type='time'], +input[type='url'], +input[type='week'] { + box-shadow: none; +} + +.theme-switcher { + border-radius: 50%; + position: fixed; + right: 1.6em; + bottom: 1.4em; + z-index: 3; + border: none; + height: 2.2em; + width: 2.2em; + background-color: #fcfcfc; + font-size: 20px; + -webkit-box-shadow: 0px 3px 14px 4px rgba(0, 0, 0, 0.62); + box-shadow: 0px 3px 14px 4px rgba(0, 0, 0, 0.62); + color: #404040; + transition: all 0.3s ease-in-out; +} + +body, +.wy-nav-content-wrap, +.wy-nav-content, +.section, +.highlight, +.rst-content div[class^='highlight'], +.wy-nav-content a, +.btn-neutral, +.btn, +footer, +.wy-nav-side, +.wy-menu-vertical li, +.wy-menu-vertical a, +.wy-side-nav-search .wy-dropdown, +.wy-side-nav-search a, +.wy-side-nav-search input, +html.writer-html4 .rst-content dl:not(.docutils) > dt, +html.writer-html5 + .rst-content + dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) + > dt, +.rst-content code, +.rst-content tt, +html.writer-html4 .rst-content dl:not(.docutils) dl:not(.field-list) > dt, +html.writer-html5 + .rst-content + dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) + dl:not(.field-list) + > dt, +code, +.rst-content code.xref, +.rst-content tt.xref { + transition: all 0.2s ease-in-out; +} diff --git a/_static/dark_mode_js/default_dark.js b/_static/dark_mode_js/default_dark.js new file mode 100644 index 00000000..ea63e072 --- /dev/null +++ b/_static/dark_mode_js/default_dark.js @@ -0,0 +1,13 @@ +const loadTheme = () => { + let theme = localStorage.getItem('theme'); + + if (theme !== null) { + if (theme === 'dark') + document.documentElement.setAttribute('data-theme', 'dark'); + } else { + localStorage.setItem('theme', 'dark'); + document.documentElement.setAttribute('data-theme', 'dark'); + } +}; + +loadTheme(); diff --git a/_static/dark_mode_js/default_light.js b/_static/dark_mode_js/default_light.js new file mode 100644 index 00000000..2b19f92e --- /dev/null +++ b/_static/dark_mode_js/default_light.js @@ -0,0 +1,13 @@ +const loadTheme = () => { + let theme = localStorage.getItem('theme'); + + if (theme !== null) { + if (theme === 'dark') + document.documentElement.setAttribute('data-theme', 'dark'); + } else { + localStorage.setItem('theme', 'light'); + document.documentElement.setAttribute('data-theme', 'light'); + } +}; + +loadTheme(); diff --git a/_static/dark_mode_js/theme_switcher.js b/_static/dark_mode_js/theme_switcher.js new file mode 100644 index 00000000..8e260552 --- /dev/null +++ b/_static/dark_mode_js/theme_switcher.js @@ -0,0 +1,39 @@ +const createThemeSwitcher = () => { + let btn = document.createElement('BUTTON'); + btn.className = 'theme-switcher'; + btn.id = 'themeSwitcher'; + btn.innerHTML = + ''; + document.body.appendChild(btn); + + if (localStorage.getItem('theme') === 'dark') $('#themeMoon').hide(0); + else $('#themeSun').hide(0); +}; + +$(document).ready(() => { + createThemeSwitcher(); + $('#themeSwitcher').click(switchTheme); + + $('footer').html( + $('footer').html() + + 'Dark theme provided by MrDogeBro.' + ); +}); + +const switchTheme = () => { + if (localStorage.getItem('theme') === 'dark') { + localStorage.setItem('theme', 'light'); + document.documentElement.setAttribute('data-theme', 'light'); + + $('#themeSun').fadeOut(200, () => { + $('#themeMoon').fadeIn(200); + }); + } else { + localStorage.setItem('theme', 'dark'); + document.documentElement.setAttribute('data-theme', 'dark'); + + $('#themeMoon').fadeOut(200, () => { + $('#themeSun').fadeIn(200); + }); + } +}; diff --git a/_static/doctools.js b/_static/doctools.js new file mode 100644 index 00000000..d06a71d7 --- /dev/null +++ b/_static/doctools.js @@ -0,0 +1,156 @@ +/* + * doctools.js + * ~~~~~~~~~~~ + * + * Base JavaScript utilities for all Sphinx HTML documentation. + * + * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ +"use strict"; + +const BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([ + "TEXTAREA", + "INPUT", + "SELECT", + "BUTTON", +]); + +const _ready = (callback) => { + if (document.readyState !== "loading") { + callback(); + } else { + document.addEventListener("DOMContentLoaded", callback); + } +}; + +/** + * Small JavaScript module for the documentation. + */ +const Documentation = { + init: () => { + Documentation.initDomainIndexTable(); + Documentation.initOnKeyListeners(); + }, + + /** + * i18n support + */ + TRANSLATIONS: {}, + PLURAL_EXPR: (n) => (n === 1 ? 0 : 1), + LOCALE: "unknown", + + // gettext and ngettext don't access this so that the functions + // can safely bound to a different name (_ = Documentation.gettext) + gettext: (string) => { + const translated = Documentation.TRANSLATIONS[string]; + switch (typeof translated) { + case "undefined": + return string; // no translation + case "string": + return translated; // translation exists + default: + return translated[0]; // (singular, plural) translation tuple exists + } + }, + + ngettext: (singular, plural, n) => { + const translated = Documentation.TRANSLATIONS[singular]; + if (typeof translated !== "undefined") + return translated[Documentation.PLURAL_EXPR(n)]; + return n === 1 ? singular : plural; + }, + + addTranslations: (catalog) => { + Object.assign(Documentation.TRANSLATIONS, catalog.messages); + Documentation.PLURAL_EXPR = new Function( + "n", + `return (${catalog.plural_expr})` + ); + Documentation.LOCALE = catalog.locale; + }, + + /** + * helper function to focus on search bar + */ + focusSearchBar: () => { + document.querySelectorAll("input[name=q]")[0]?.focus(); + }, + + /** + * Initialise the domain index toggle buttons + */ + initDomainIndexTable: () => { + const toggler = (el) => { + const idNumber = el.id.substr(7); + const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`); + if (el.src.substr(-9) === "minus.png") { + el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`; + toggledRows.forEach((el) => (el.style.display = "none")); + } else { + el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`; + toggledRows.forEach((el) => (el.style.display = "")); + } + }; + + const togglerElements = document.querySelectorAll("img.toggler"); + togglerElements.forEach((el) => + el.addEventListener("click", (event) => toggler(event.currentTarget)) + ); + togglerElements.forEach((el) => (el.style.display = "")); + if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler); + }, + + initOnKeyListeners: () => { + // only install a listener if it is really needed + if ( + !DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS && + !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS + ) + return; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + // bail with special keys + if (event.altKey || event.ctrlKey || event.metaKey) return; + + if (!event.shiftKey) { + switch (event.key) { + case "ArrowLeft": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const prevLink = document.querySelector('link[rel="prev"]'); + if (prevLink && prevLink.href) { + window.location.href = prevLink.href; + event.preventDefault(); + } + break; + case "ArrowRight": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const nextLink = document.querySelector('link[rel="next"]'); + if (nextLink && nextLink.href) { + window.location.href = nextLink.href; + event.preventDefault(); + } + break; + } + } + + // some keyboard layouts may need Shift to get / + switch (event.key) { + case "/": + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break; + Documentation.focusSearchBar(); + event.preventDefault(); + } + }); + }, +}; + +// quick alias for translations +const _ = Documentation.gettext; + +_ready(Documentation.init); diff --git a/_static/documentation_options.js b/_static/documentation_options.js new file mode 100644 index 00000000..7e4c114f --- /dev/null +++ b/_static/documentation_options.js @@ -0,0 +1,13 @@ +const DOCUMENTATION_OPTIONS = { + VERSION: '', + LANGUAGE: 'en', + COLLAPSE_INDEX: false, + BUILDER: 'html', + FILE_SUFFIX: '.html', + LINK_SUFFIX: '.html', + HAS_SOURCE: true, + SOURCELINK_SUFFIX: '.txt', + NAVIGATION_WITH_KEYS: false, + SHOW_SEARCH_SUMMARY: true, + ENABLE_SEARCH_SHORTCUTS: true, +}; \ No newline at end of file diff --git a/_static/file.png b/_static/file.png new file mode 100644 index 00000000..a858a410 Binary files /dev/null and b/_static/file.png differ diff --git a/_static/jquery.js b/_static/jquery.js new file mode 100644 index 00000000..c4c6022f --- /dev/null +++ b/_static/jquery.js @@ -0,0 +1,2 @@ +/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="
",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=y.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=y.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),y.elements=c+" "+a,j(b)}function f(a){var b=x[a[v]];return b||(b={},w++,a[v]=w,x[w]=b),b}function g(a,c,d){if(c||(c=b),q)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():u.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||t.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),q)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return y.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(y,b.frag)}function j(a){a||(a=b);var d=f(a);return!y.shivCSS||p||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),q||i(a,d),a}function k(a){for(var b,c=a.getElementsByTagName("*"),e=c.length,f=RegExp("^(?:"+d().join("|")+")$","i"),g=[];e--;)b=c[e],f.test(b.nodeName)&&g.push(b.applyElement(l(b)));return g}function l(a){for(var b,c=a.attributes,d=c.length,e=a.ownerDocument.createElement(A+":"+a.nodeName);d--;)b=c[d],b.specified&&e.setAttribute(b.nodeName,b.nodeValue);return e.style.cssText=a.style.cssText,e}function m(a){for(var b,c=a.split("{"),e=c.length,f=RegExp("(^|[\\s,>+~])("+d().join("|")+")(?=[[\\s,>+~#.:]|$)","gi"),g="$1"+A+"\\:$2";e--;)b=c[e]=c[e].split("}"),b[b.length-1]=b[b.length-1].replace(f,g),c[e]=b.join("}");return c.join("{")}function n(a){for(var b=a.length;b--;)a[b].removeNode()}function o(a){function b(){clearTimeout(g._removeSheetTimer),d&&d.removeNode(!0),d=null}var d,e,g=f(a),h=a.namespaces,i=a.parentWindow;return!B||a.printShived?a:("undefined"==typeof h[A]&&h.add(A),i.attachEvent("onbeforeprint",function(){b();for(var f,g,h,i=a.styleSheets,j=[],l=i.length,n=Array(l);l--;)n[l]=i[l];for(;h=n.pop();)if(!h.disabled&&z.test(h.media)){try{f=h.imports,g=f.length}catch(o){g=0}for(l=0;g>l;l++)n.push(f[l]);try{j.push(h.cssText)}catch(o){}}j=m(j.reverse().join("")),e=k(a),d=c(a,j)}),i.attachEvent("onafterprint",function(){n(e),clearTimeout(g._removeSheetTimer),g._removeSheetTimer=setTimeout(b,500)}),a.printShived=!0,a)}var p,q,r="3.7.3",s=a.html5||{},t=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,u=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,v="_html5shiv",w=0,x={};!function(){try{var a=b.createElement("a");a.innerHTML="",p="hidden"in a,q=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){p=!0,q=!0}}();var y={elements:s.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:r,shivCSS:s.shivCSS!==!1,supportsUnknownElements:q,shivMethods:s.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=y,j(b);var z=/^$|\b(?:all|print)\b/,A="html5shiv",B=!q&&function(){var c=b.documentElement;return!("undefined"==typeof b.namespaces||"undefined"==typeof b.parentWindow||"undefined"==typeof c.applyElement||"undefined"==typeof c.removeNode||"undefined"==typeof a.attachEvent)}();y.type+=" print",y.shivPrint=o,o(b),"object"==typeof module&&module.exports&&(module.exports=y)}("undefined"!=typeof window?window:this,document); \ No newline at end of file diff --git a/_static/js/html5shiv.min.js b/_static/js/html5shiv.min.js new file mode 100644 index 00000000..cd1c674f --- /dev/null +++ b/_static/js/html5shiv.min.js @@ -0,0 +1,4 @@ +/** +* @preserve HTML5 Shiv 3.7.3 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed +*/ +!function(a,b){function c(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=t.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=t.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),t.elements=c+" "+a,j(b)}function f(a){var b=s[a[q]];return b||(b={},r++,a[q]=r,s[r]=b),b}function g(a,c,d){if(c||(c=b),l)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():p.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||o.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),l)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return t.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(t,b.frag)}function j(a){a||(a=b);var d=f(a);return!t.shivCSS||k||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),l||i(a,d),a}var k,l,m="3.7.3-pre",n=a.html5||{},o=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,p=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,q="_html5shiv",r=0,s={};!function(){try{var a=b.createElement("a");a.innerHTML="",k="hidden"in a,l=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){k=!0,l=!0}}();var t={elements:n.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:m,shivCSS:n.shivCSS!==!1,supportsUnknownElements:l,shivMethods:n.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=t,j(b),"object"==typeof module&&module.exports&&(module.exports=t)}("undefined"!=typeof window?window:this,document); \ No newline at end of file diff --git a/_static/js/theme.js b/_static/js/theme.js new file mode 100644 index 00000000..1fddb6ee --- /dev/null +++ b/_static/js/theme.js @@ -0,0 +1 @@ +!function(n){var e={};function t(i){if(e[i])return e[i].exports;var o=e[i]={i:i,l:!1,exports:{}};return n[i].call(o.exports,o,o.exports,t),o.l=!0,o.exports}t.m=n,t.c=e,t.d=function(n,e,i){t.o(n,e)||Object.defineProperty(n,e,{enumerable:!0,get:i})},t.r=function(n){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},t.t=function(n,e){if(1&e&&(n=t(n)),8&e)return n;if(4&e&&"object"==typeof n&&n&&n.__esModule)return n;var i=Object.create(null);if(t.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:n}),2&e&&"string"!=typeof n)for(var o in n)t.d(i,o,function(e){return n[e]}.bind(null,o));return i},t.n=function(n){var e=n&&n.__esModule?function(){return n.default}:function(){return n};return t.d(e,"a",e),e},t.o=function(n,e){return Object.prototype.hasOwnProperty.call(n,e)},t.p="",t(t.s=0)}([function(n,e,t){t(1),n.exports=t(3)},function(n,e,t){(function(){var e="undefined"!=typeof window?window.jQuery:t(2);n.exports.ThemeNav={navBar:null,win:null,winScroll:!1,winResize:!1,linkScroll:!1,winPosition:0,winHeight:null,docHeight:null,isRunning:!1,enable:function(n){var t=this;void 0===n&&(n=!0),t.isRunning||(t.isRunning=!0,e((function(e){t.init(e),t.reset(),t.win.on("hashchange",t.reset),n&&t.win.on("scroll",(function(){t.linkScroll||t.winScroll||(t.winScroll=!0,requestAnimationFrame((function(){t.onScroll()})))})),t.win.on("resize",(function(){t.winResize||(t.winResize=!0,requestAnimationFrame((function(){t.onResize()})))})),t.onResize()})))},enableSticky:function(){this.enable(!0)},init:function(n){n(document);var e=this;this.navBar=n("div.wy-side-scroll:first"),this.win=n(window),n(document).on("click","[data-toggle='wy-nav-top']",(function(){n("[data-toggle='wy-nav-shift']").toggleClass("shift"),n("[data-toggle='rst-versions']").toggleClass("shift")})).on("click",".wy-menu-vertical .current ul li a",(function(){var t=n(this);n("[data-toggle='wy-nav-shift']").removeClass("shift"),n("[data-toggle='rst-versions']").toggleClass("shift"),e.toggleCurrent(t),e.hashChange()})).on("click","[data-toggle='rst-current-version']",(function(){n("[data-toggle='rst-versions']").toggleClass("shift-up")})),n("table.docutils:not(.field-list,.footnote,.citation)").wrap("
"),n("table.docutils.footnote").wrap("
"),n("table.docutils.citation").wrap("
"),n(".wy-menu-vertical ul").not(".simple").siblings("a").each((function(){var t=n(this);expand=n(''),expand.on("click",(function(n){return e.toggleCurrent(t),n.stopPropagation(),!1})),t.prepend(expand)}))},reset:function(){var n=encodeURI(window.location.hash)||"#";try{var e=$(".wy-menu-vertical"),t=e.find('[href="'+n+'"]');if(0===t.length){var i=$('.document [id="'+n.substring(1)+'"]').closest("div.section");0===(t=e.find('[href="#'+i.attr("id")+'"]')).length&&(t=e.find('[href="#"]'))}if(t.length>0){$(".wy-menu-vertical .current").removeClass("current").attr("aria-expanded","false"),t.addClass("current").attr("aria-expanded","true"),t.closest("li.toctree-l1").parent().addClass("current").attr("aria-expanded","true");for(let n=1;n<=10;n++)t.closest("li.toctree-l"+n).addClass("current").attr("aria-expanded","true");t[0].scrollIntoView()}}catch(n){console.log("Error expanding nav for anchor",n)}},onScroll:function(){this.winScroll=!1;var n=this.win.scrollTop(),e=n+this.winHeight,t=this.navBar.scrollTop()+(n-this.winPosition);n<0||e>this.docHeight||(this.navBar.scrollTop(t),this.winPosition=n)},onResize:function(){this.winResize=!1,this.winHeight=this.win.height(),this.docHeight=$(document).height()},hashChange:function(){this.linkScroll=!0,this.win.one("hashchange",(function(){this.linkScroll=!1}))},toggleCurrent:function(n){var e=n.closest("li");e.siblings("li.current").removeClass("current").attr("aria-expanded","false"),e.siblings().find("li.current").removeClass("current").attr("aria-expanded","false");var t=e.find("> ul li");t.length&&(t.removeClass("current").attr("aria-expanded","false"),e.toggleClass("current").attr("aria-expanded",(function(n,e){return"true"==e?"false":"true"})))}},"undefined"!=typeof window&&(window.SphinxRtdTheme={Navigation:n.exports.ThemeNav,StickyNav:n.exports.ThemeNav}),function(){for(var n=0,e=["ms","moz","webkit","o"],t=0;t0 + var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1 + var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1 + var s_v = "^(" + C + ")?" + v; // vowel in stem + + this.stemWord = function (w) { + var stem; + var suffix; + var firstch; + var origword = w; + + if (w.length < 3) + return w; + + var re; + var re2; + var re3; + var re4; + + firstch = w.substr(0,1); + if (firstch == "y") + w = firstch.toUpperCase() + w.substr(1); + + // Step 1a + re = /^(.+?)(ss|i)es$/; + re2 = /^(.+?)([^s])s$/; + + if (re.test(w)) + w = w.replace(re,"$1$2"); + else if (re2.test(w)) + w = w.replace(re2,"$1$2"); + + // Step 1b + re = /^(.+?)eed$/; + re2 = /^(.+?)(ed|ing)$/; + if (re.test(w)) { + var fp = re.exec(w); + re = new RegExp(mgr0); + if (re.test(fp[1])) { + re = /.$/; + w = w.replace(re,""); + } + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1]; + re2 = new RegExp(s_v); + if (re2.test(stem)) { + w = stem; + re2 = /(at|bl|iz)$/; + re3 = new RegExp("([^aeiouylsz])\\1$"); + re4 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re2.test(w)) + w = w + "e"; + else if (re3.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + else if (re4.test(w)) + w = w + "e"; + } + } + + // Step 1c + re = /^(.+?)y$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(s_v); + if (re.test(stem)) + w = stem + "i"; + } + + // Step 2 + re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step2list[suffix]; + } + + // Step 3 + re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step3list[suffix]; + } + + // Step 4 + re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/; + re2 = /^(.+?)(s|t)(ion)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + if (re.test(stem)) + w = stem; + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1] + fp[2]; + re2 = new RegExp(mgr1); + if (re2.test(stem)) + w = stem; + } + + // Step 5 + re = /^(.+?)e$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + re2 = new RegExp(meq1); + re3 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) + w = stem; + } + re = /ll$/; + re2 = new RegExp(mgr1); + if (re.test(w) && re2.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + + // and turn initial Y back to y + if (firstch == "y") + w = firstch.toLowerCase() + w.substr(1); + return w; + } +} + diff --git a/_static/minus.png b/_static/minus.png new file mode 100644 index 00000000..d96755fd Binary files /dev/null and b/_static/minus.png differ diff --git a/_static/mystnb.4510f1fc1dee50b3e5859aac5469c37c29e427902b24a333a5f9fcb2f0b3ac41.css b/_static/mystnb.4510f1fc1dee50b3e5859aac5469c37c29e427902b24a333a5f9fcb2f0b3ac41.css new file mode 100644 index 00000000..33566310 --- /dev/null +++ b/_static/mystnb.4510f1fc1dee50b3e5859aac5469c37c29e427902b24a333a5f9fcb2f0b3ac41.css @@ -0,0 +1,2342 @@ +/* Variables */ +:root { + --mystnb-source-bg-color: #f7f7f7; + --mystnb-stdout-bg-color: #fcfcfc; + --mystnb-stderr-bg-color: #fdd; + --mystnb-traceback-bg-color: #fcfcfc; + --mystnb-source-border-color: #ccc; + --mystnb-source-margin-color: green; + --mystnb-stdout-border-color: #f7f7f7; + --mystnb-stderr-border-color: #f7f7f7; + --mystnb-traceback-border-color: #ffd6d6; + --mystnb-hide-prompt-opacity: 70%; + --mystnb-source-border-radius: .4em; + --mystnb-source-border-width: 1px; +} + +/* Whole cell */ +div.container.cell { + padding-left: 0; + margin-bottom: 1em; +} + +/* Removing all background formatting so we can control at the div level */ +.cell_input div.highlight, +.cell_output pre, +.cell_input pre, +.cell_output .output { + border: none; + box-shadow: none; +} + +.cell_output .output pre, +.cell_input pre { + margin: 0px; +} + +/* Input cells */ +div.cell div.cell_input, +div.cell details.above-input>summary { + padding-left: 0em; + padding-right: 0em; + border: var(--mystnb-source-border-width) var(--mystnb-source-border-color) solid; + background-color: var(--mystnb-source-bg-color); + border-left-color: var(--mystnb-source-margin-color); + border-left-width: medium; + border-radius: var(--mystnb-source-border-radius); +} + +div.cell_input>div, +div.cell_output div.output>div.highlight { + margin: 0em !important; + border: none !important; +} + +/* All cell outputs */ +.cell_output { + padding-left: 1em; + padding-right: 0em; + margin-top: 1em; +} + +/* Text outputs from cells */ +.cell_output .output.text_plain, +.cell_output .output.traceback, +.cell_output .output.stream, +.cell_output .output.stderr { + margin-top: 1em; + margin-bottom: 0em; + box-shadow: none; +} + +.cell_output .output.text_plain, +.cell_output .output.stream { + background: var(--mystnb-stdout-bg-color); + border: 1px solid var(--mystnb-stdout-border-color); +} + +.cell_output .output.stderr { + background: var(--mystnb-stderr-bg-color); + border: 1px solid var(--mystnb-stderr-border-color); +} + +.cell_output .output.traceback { + background: var(--mystnb-traceback-bg-color); + border: 1px solid var(--mystnb-traceback-border-color); +} + +/* Collapsible cell content */ +div.cell details.above-input div.cell_input { + border-top-left-radius: 0; + border-top-right-radius: 0; + border-top: var(--mystnb-source-border-width) var(--mystnb-source-border-color) dashed; +} + +div.cell div.cell_input.above-output-prompt { + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; +} + +div.cell details.above-input>summary { + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + border-bottom: var(--mystnb-source-border-width) var(--mystnb-source-border-color) dashed; + padding-left: 1em; + margin-bottom: 0; +} + +div.cell details.above-output>summary { + background-color: var(--mystnb-source-bg-color); + padding-left: 1em; + padding-right: 0em; + border: var(--mystnb-source-border-width) var(--mystnb-source-border-color) solid; + border-radius: var(--mystnb-source-border-radius); + border-left-color: var(--mystnb-source-margin-color); + border-left-width: medium; +} + +div.cell details.below-input>summary { + background-color: var(--mystnb-source-bg-color); + padding-left: 1em; + padding-right: 0em; + border: var(--mystnb-source-border-width) var(--mystnb-source-border-color) solid; + border-top: none; + border-bottom-left-radius: var(--mystnb-source-border-radius); + border-bottom-right-radius: var(--mystnb-source-border-radius); + border-left-color: var(--mystnb-source-margin-color); + border-left-width: medium; +} + +div.cell details.hide>summary>span { + opacity: var(--mystnb-hide-prompt-opacity); +} + +div.cell details.hide[open]>summary>span.collapsed { + display: none; +} + +div.cell details.hide:not([open])>summary>span.expanded { + display: none; +} + +@keyframes collapsed-fade-in { + 0% { + opacity: 0; + } + + 100% { + opacity: 1; + } +} +div.cell details.hide[open]>summary~* { + -moz-animation: collapsed-fade-in 0.3s ease-in-out; + -webkit-animation: collapsed-fade-in 0.3s ease-in-out; + animation: collapsed-fade-in 0.3s ease-in-out; +} + +/* Math align to the left */ +.cell_output .MathJax_Display { + text-align: left !important; +} + +/* Pandas tables. Pulled from the Jupyter / nbsphinx CSS */ +div.cell_output table { + border: none; + border-collapse: collapse; + border-spacing: 0; + color: black; + font-size: 1em; + table-layout: fixed; +} + +div.cell_output thead { + border-bottom: 1px solid black; + vertical-align: bottom; +} + +div.cell_output tr, +div.cell_output th, +div.cell_output td { + text-align: right; + vertical-align: middle; + padding: 0.5em 0.5em; + line-height: normal; + white-space: normal; + max-width: none; + border: none; +} + +div.cell_output th { + font-weight: bold; +} + +div.cell_output tbody tr:nth-child(odd) { + background: #f5f5f5; +} + +div.cell_output tbody tr:hover { + background: rgba(66, 165, 245, 0.2); +} + +/** source code line numbers **/ +span.linenos { + opacity: 0.5; +} + +/* Inline text from `paste` operation */ + +span.pasted-text { + font-weight: bold; +} + +span.pasted-inline img { + max-height: 2em; +} + +tbody span.pasted-inline img { + max-height: none; +} + +/* Font colors for translated ANSI escape sequences +Color values are copied from Jupyter Notebook +https://github.com/jupyter/notebook/blob/52581f8eda9b319eb0390ac77fe5903c38f81e3e/notebook/static/notebook/less/ansicolors.less#L14-L21 +Background colors from +https://nbsphinx.readthedocs.io/en/latest/code-cells.html#ANSI-Colors +*/ +div.highlight .-Color-Bold { + font-weight: bold; +} + +div.highlight .-Color[class*=-Black] { + color: #3E424D +} + +div.highlight .-Color[class*=-Red] { + color: #E75C58 +} + +div.highlight .-Color[class*=-Green] { + color: #00A250 +} + +div.highlight .-Color[class*=-Yellow] { + color: #DDB62B +} + +div.highlight .-Color[class*=-Blue] { + color: #208FFB +} + +div.highlight .-Color[class*=-Magenta] { + color: #D160C4 +} + +div.highlight .-Color[class*=-Cyan] { + color: #60C6C8 +} + +div.highlight .-Color[class*=-White] { + color: #C5C1B4 +} + +div.highlight .-Color[class*=-BGBlack] { + background-color: #3E424D +} + +div.highlight .-Color[class*=-BGRed] { + background-color: #E75C58 +} + +div.highlight .-Color[class*=-BGGreen] { + background-color: #00A250 +} + +div.highlight .-Color[class*=-BGYellow] { + background-color: #DDB62B +} + +div.highlight .-Color[class*=-BGBlue] { + background-color: #208FFB +} + +div.highlight .-Color[class*=-BGMagenta] { + background-color: #D160C4 +} + +div.highlight .-Color[class*=-BGCyan] { + background-color: #60C6C8 +} + +div.highlight .-Color[class*=-BGWhite] { + background-color: #C5C1B4 +} + +/* Font colors for 8-bit ANSI */ + +div.highlight .-Color[class*=-C0] { + color: #000000 +} + +div.highlight .-Color[class*=-BGC0] { + background-color: #000000 +} + +div.highlight .-Color[class*=-C1] { + color: #800000 +} + +div.highlight .-Color[class*=-BGC1] { + background-color: #800000 +} + +div.highlight .-Color[class*=-C2] { + color: #008000 +} + +div.highlight .-Color[class*=-BGC2] { + background-color: #008000 +} + +div.highlight .-Color[class*=-C3] { + color: #808000 +} + +div.highlight .-Color[class*=-BGC3] { + background-color: #808000 +} + +div.highlight .-Color[class*=-C4] { + color: #000080 +} + +div.highlight .-Color[class*=-BGC4] { + background-color: #000080 +} + +div.highlight .-Color[class*=-C5] { + color: #800080 +} + +div.highlight .-Color[class*=-BGC5] { + background-color: #800080 +} + +div.highlight .-Color[class*=-C6] { + color: #008080 +} + +div.highlight .-Color[class*=-BGC6] { + background-color: #008080 +} + +div.highlight .-Color[class*=-C7] { + color: #C0C0C0 +} + +div.highlight .-Color[class*=-BGC7] { + background-color: #C0C0C0 +} + +div.highlight .-Color[class*=-C8] { + color: #808080 +} + +div.highlight .-Color[class*=-BGC8] { + background-color: #808080 +} + +div.highlight .-Color[class*=-C9] { + color: #FF0000 +} + +div.highlight .-Color[class*=-BGC9] { + background-color: #FF0000 +} + +div.highlight .-Color[class*=-C10] { + color: #00FF00 +} + +div.highlight .-Color[class*=-BGC10] { + background-color: #00FF00 +} + +div.highlight .-Color[class*=-C11] { + color: #FFFF00 +} + +div.highlight .-Color[class*=-BGC11] { + background-color: #FFFF00 +} + +div.highlight .-Color[class*=-C12] { + color: #0000FF +} + +div.highlight .-Color[class*=-BGC12] { + background-color: #0000FF +} + +div.highlight .-Color[class*=-C13] { + color: #FF00FF +} + +div.highlight .-Color[class*=-BGC13] { + background-color: #FF00FF +} + +div.highlight .-Color[class*=-C14] { + color: #00FFFF +} + +div.highlight .-Color[class*=-BGC14] { + background-color: #00FFFF +} + +div.highlight .-Color[class*=-C15] { + color: #FFFFFF +} + +div.highlight .-Color[class*=-BGC15] { + background-color: #FFFFFF +} + +div.highlight .-Color[class*=-C16] { + color: #000000 +} + +div.highlight .-Color[class*=-BGC16] { + background-color: #000000 +} + +div.highlight .-Color[class*=-C17] { + color: #00005F +} + +div.highlight .-Color[class*=-BGC17] { + background-color: #00005F +} + +div.highlight .-Color[class*=-C18] { + color: #000087 +} + +div.highlight .-Color[class*=-BGC18] { + background-color: #000087 +} + +div.highlight .-Color[class*=-C19] { + color: #0000AF +} + +div.highlight .-Color[class*=-BGC19] { + background-color: #0000AF +} + +div.highlight .-Color[class*=-C20] { + color: #0000D7 +} + +div.highlight .-Color[class*=-BGC20] { + background-color: #0000D7 +} + +div.highlight .-Color[class*=-C21] { + color: #0000FF +} + +div.highlight .-Color[class*=-BGC21] { + background-color: #0000FF +} + +div.highlight .-Color[class*=-C22] { + color: #005F00 +} + +div.highlight .-Color[class*=-BGC22] { + background-color: #005F00 +} + +div.highlight .-Color[class*=-C23] { + color: #005F5F +} + +div.highlight .-Color[class*=-BGC23] { + background-color: #005F5F +} + +div.highlight .-Color[class*=-C24] { + color: #005F87 +} + +div.highlight .-Color[class*=-BGC24] { + background-color: #005F87 +} + +div.highlight .-Color[class*=-C25] { + color: #005FAF +} + +div.highlight .-Color[class*=-BGC25] { + background-color: #005FAF +} + +div.highlight .-Color[class*=-C26] { + color: #005FD7 +} + +div.highlight .-Color[class*=-BGC26] { + background-color: #005FD7 +} + +div.highlight .-Color[class*=-C27] { + color: #005FFF +} + +div.highlight .-Color[class*=-BGC27] { + background-color: #005FFF +} + +div.highlight .-Color[class*=-C28] { + color: #008700 +} + +div.highlight .-Color[class*=-BGC28] { + background-color: #008700 +} + +div.highlight .-Color[class*=-C29] { + color: #00875F +} + +div.highlight .-Color[class*=-BGC29] { + background-color: #00875F +} + +div.highlight .-Color[class*=-C30] { + color: #008787 +} + +div.highlight .-Color[class*=-BGC30] { + background-color: #008787 +} + +div.highlight .-Color[class*=-C31] { + color: #0087AF +} + +div.highlight .-Color[class*=-BGC31] { + background-color: #0087AF +} + +div.highlight .-Color[class*=-C32] { + color: #0087D7 +} + +div.highlight .-Color[class*=-BGC32] { + background-color: #0087D7 +} + +div.highlight .-Color[class*=-C33] { + color: #0087FF +} + +div.highlight .-Color[class*=-BGC33] { + background-color: #0087FF +} + +div.highlight .-Color[class*=-C34] { + color: #00AF00 +} + +div.highlight .-Color[class*=-BGC34] { + background-color: #00AF00 +} + +div.highlight .-Color[class*=-C35] { + color: #00AF5F +} + +div.highlight .-Color[class*=-BGC35] { + background-color: #00AF5F +} + +div.highlight .-Color[class*=-C36] { + color: #00AF87 +} + +div.highlight .-Color[class*=-BGC36] { + background-color: #00AF87 +} + +div.highlight .-Color[class*=-C37] { + color: #00AFAF +} + +div.highlight .-Color[class*=-BGC37] { + background-color: #00AFAF +} + +div.highlight .-Color[class*=-C38] { + color: #00AFD7 +} + +div.highlight .-Color[class*=-BGC38] { + background-color: #00AFD7 +} + +div.highlight .-Color[class*=-C39] { + color: #00AFFF +} + +div.highlight .-Color[class*=-BGC39] { + background-color: #00AFFF +} + +div.highlight .-Color[class*=-C40] { + color: #00D700 +} + +div.highlight .-Color[class*=-BGC40] { + background-color: #00D700 +} + +div.highlight .-Color[class*=-C41] { + color: #00D75F +} + +div.highlight .-Color[class*=-BGC41] { + background-color: #00D75F +} + +div.highlight .-Color[class*=-C42] { + color: #00D787 +} + +div.highlight .-Color[class*=-BGC42] { + background-color: #00D787 +} + +div.highlight .-Color[class*=-C43] { + color: #00D7AF +} + +div.highlight .-Color[class*=-BGC43] { + background-color: #00D7AF +} + +div.highlight .-Color[class*=-C44] { + color: #00D7D7 +} + +div.highlight .-Color[class*=-BGC44] { + background-color: #00D7D7 +} + +div.highlight .-Color[class*=-C45] { + color: #00D7FF +} + +div.highlight .-Color[class*=-BGC45] { + background-color: #00D7FF +} + +div.highlight .-Color[class*=-C46] { + color: #00FF00 +} + +div.highlight .-Color[class*=-BGC46] { + background-color: #00FF00 +} + +div.highlight .-Color[class*=-C47] { + color: #00FF5F +} + +div.highlight .-Color[class*=-BGC47] { + background-color: #00FF5F +} + +div.highlight .-Color[class*=-C48] { + color: #00FF87 +} + +div.highlight .-Color[class*=-BGC48] { + background-color: #00FF87 +} + +div.highlight .-Color[class*=-C49] { + color: #00FFAF +} + +div.highlight .-Color[class*=-BGC49] { + background-color: #00FFAF +} + +div.highlight .-Color[class*=-C50] { + color: #00FFD7 +} + +div.highlight .-Color[class*=-BGC50] { + background-color: #00FFD7 +} + +div.highlight .-Color[class*=-C51] { + color: #00FFFF +} + +div.highlight .-Color[class*=-BGC51] { + background-color: #00FFFF +} + +div.highlight .-Color[class*=-C52] { + color: #5F0000 +} + +div.highlight .-Color[class*=-BGC52] { + background-color: #5F0000 +} + +div.highlight .-Color[class*=-C53] { + color: #5F005F +} + +div.highlight .-Color[class*=-BGC53] { + background-color: #5F005F +} + +div.highlight .-Color[class*=-C54] { + color: #5F0087 +} + +div.highlight .-Color[class*=-BGC54] { + background-color: #5F0087 +} + +div.highlight .-Color[class*=-C55] { + color: #5F00AF +} + +div.highlight .-Color[class*=-BGC55] { + background-color: #5F00AF +} + +div.highlight .-Color[class*=-C56] { + color: #5F00D7 +} + +div.highlight .-Color[class*=-BGC56] { + background-color: #5F00D7 +} + +div.highlight .-Color[class*=-C57] { + color: #5F00FF +} + +div.highlight .-Color[class*=-BGC57] { + background-color: #5F00FF +} + +div.highlight .-Color[class*=-C58] { + color: #5F5F00 +} + +div.highlight .-Color[class*=-BGC58] { + background-color: #5F5F00 +} + +div.highlight .-Color[class*=-C59] { + color: #5F5F5F +} + +div.highlight .-Color[class*=-BGC59] { + background-color: #5F5F5F +} + +div.highlight .-Color[class*=-C60] { + color: #5F5F87 +} + +div.highlight .-Color[class*=-BGC60] { + background-color: #5F5F87 +} + +div.highlight .-Color[class*=-C61] { + color: #5F5FAF +} + +div.highlight .-Color[class*=-BGC61] { + background-color: #5F5FAF +} + +div.highlight .-Color[class*=-C62] { + color: #5F5FD7 +} + +div.highlight .-Color[class*=-BGC62] { + background-color: #5F5FD7 +} + +div.highlight .-Color[class*=-C63] { + color: #5F5FFF +} + +div.highlight .-Color[class*=-BGC63] { + background-color: #5F5FFF +} + +div.highlight .-Color[class*=-C64] { + color: #5F8700 +} + +div.highlight .-Color[class*=-BGC64] { + background-color: #5F8700 +} + +div.highlight .-Color[class*=-C65] { + color: #5F875F +} + +div.highlight .-Color[class*=-BGC65] { + background-color: #5F875F +} + +div.highlight .-Color[class*=-C66] { + color: #5F8787 +} + +div.highlight .-Color[class*=-BGC66] { + background-color: #5F8787 +} + +div.highlight .-Color[class*=-C67] { + color: #5F87AF +} + +div.highlight .-Color[class*=-BGC67] { + background-color: #5F87AF +} + +div.highlight .-Color[class*=-C68] { + color: #5F87D7 +} + +div.highlight .-Color[class*=-BGC68] { + background-color: #5F87D7 +} + +div.highlight .-Color[class*=-C69] { + color: #5F87FF +} + +div.highlight .-Color[class*=-BGC69] { + background-color: #5F87FF +} + +div.highlight .-Color[class*=-C70] { + color: #5FAF00 +} + +div.highlight .-Color[class*=-BGC70] { + background-color: #5FAF00 +} + +div.highlight .-Color[class*=-C71] { + color: #5FAF5F +} + +div.highlight .-Color[class*=-BGC71] { + background-color: #5FAF5F +} + +div.highlight .-Color[class*=-C72] { + color: #5FAF87 +} + +div.highlight .-Color[class*=-BGC72] { + background-color: #5FAF87 +} + +div.highlight .-Color[class*=-C73] { + color: #5FAFAF +} + +div.highlight .-Color[class*=-BGC73] { + background-color: #5FAFAF +} + +div.highlight .-Color[class*=-C74] { + color: #5FAFD7 +} + +div.highlight .-Color[class*=-BGC74] { + background-color: #5FAFD7 +} + +div.highlight .-Color[class*=-C75] { + color: #5FAFFF +} + +div.highlight .-Color[class*=-BGC75] { + background-color: #5FAFFF +} + +div.highlight .-Color[class*=-C76] { + color: #5FD700 +} + +div.highlight .-Color[class*=-BGC76] { + background-color: #5FD700 +} + +div.highlight .-Color[class*=-C77] { + color: #5FD75F +} + +div.highlight .-Color[class*=-BGC77] { + background-color: #5FD75F +} + +div.highlight .-Color[class*=-C78] { + color: #5FD787 +} + +div.highlight .-Color[class*=-BGC78] { + background-color: #5FD787 +} + +div.highlight .-Color[class*=-C79] { + color: #5FD7AF +} + +div.highlight .-Color[class*=-BGC79] { + background-color: #5FD7AF +} + +div.highlight .-Color[class*=-C80] { + color: #5FD7D7 +} + +div.highlight .-Color[class*=-BGC80] { + background-color: #5FD7D7 +} + +div.highlight .-Color[class*=-C81] { + color: #5FD7FF +} + +div.highlight .-Color[class*=-BGC81] { + background-color: #5FD7FF +} + +div.highlight .-Color[class*=-C82] { + color: #5FFF00 +} + +div.highlight .-Color[class*=-BGC82] { + background-color: #5FFF00 +} + +div.highlight .-Color[class*=-C83] { + color: #5FFF5F +} + +div.highlight .-Color[class*=-BGC83] { + background-color: #5FFF5F +} + +div.highlight .-Color[class*=-C84] { + color: #5FFF87 +} + +div.highlight .-Color[class*=-BGC84] { + background-color: #5FFF87 +} + +div.highlight .-Color[class*=-C85] { + color: #5FFFAF +} + +div.highlight .-Color[class*=-BGC85] { + background-color: #5FFFAF +} + +div.highlight .-Color[class*=-C86] { + color: #5FFFD7 +} + +div.highlight .-Color[class*=-BGC86] { + background-color: #5FFFD7 +} + +div.highlight .-Color[class*=-C87] { + color: #5FFFFF +} + +div.highlight .-Color[class*=-BGC87] { + background-color: #5FFFFF +} + +div.highlight .-Color[class*=-C88] { + color: #870000 +} + +div.highlight .-Color[class*=-BGC88] { + background-color: #870000 +} + +div.highlight .-Color[class*=-C89] { + color: #87005F +} + +div.highlight .-Color[class*=-BGC89] { + background-color: #87005F +} + +div.highlight .-Color[class*=-C90] { + color: #870087 +} + +div.highlight .-Color[class*=-BGC90] { + background-color: #870087 +} + +div.highlight .-Color[class*=-C91] { + color: #8700AF +} + +div.highlight .-Color[class*=-BGC91] { + background-color: #8700AF +} + +div.highlight .-Color[class*=-C92] { + color: #8700D7 +} + +div.highlight .-Color[class*=-BGC92] { + background-color: #8700D7 +} + +div.highlight .-Color[class*=-C93] { + color: #8700FF +} + +div.highlight .-Color[class*=-BGC93] { + background-color: #8700FF +} + +div.highlight .-Color[class*=-C94] { + color: #875F00 +} + +div.highlight .-Color[class*=-BGC94] { + background-color: #875F00 +} + +div.highlight .-Color[class*=-C95] { + color: #875F5F +} + +div.highlight .-Color[class*=-BGC95] { + background-color: #875F5F +} + +div.highlight .-Color[class*=-C96] { + color: #875F87 +} + +div.highlight .-Color[class*=-BGC96] { + background-color: #875F87 +} + +div.highlight .-Color[class*=-C97] { + color: #875FAF +} + +div.highlight .-Color[class*=-BGC97] { + background-color: #875FAF +} + +div.highlight .-Color[class*=-C98] { + color: #875FD7 +} + +div.highlight .-Color[class*=-BGC98] { + background-color: #875FD7 +} + +div.highlight .-Color[class*=-C99] { + color: #875FFF +} + +div.highlight .-Color[class*=-BGC99] { + background-color: #875FFF +} + +div.highlight .-Color[class*=-C100] { + color: #878700 +} + +div.highlight .-Color[class*=-BGC100] { + background-color: #878700 +} + +div.highlight .-Color[class*=-C101] { + color: #87875F +} + +div.highlight .-Color[class*=-BGC101] { + background-color: #87875F +} + +div.highlight .-Color[class*=-C102] { + color: #878787 +} + +div.highlight .-Color[class*=-BGC102] { + background-color: #878787 +} + +div.highlight .-Color[class*=-C103] { + color: #8787AF +} + +div.highlight .-Color[class*=-BGC103] { + background-color: #8787AF +} + +div.highlight .-Color[class*=-C104] { + color: #8787D7 +} + +div.highlight .-Color[class*=-BGC104] { + background-color: #8787D7 +} + +div.highlight .-Color[class*=-C105] { + color: #8787FF +} + +div.highlight .-Color[class*=-BGC105] { + background-color: #8787FF +} + +div.highlight .-Color[class*=-C106] { + color: #87AF00 +} + +div.highlight .-Color[class*=-BGC106] { + background-color: #87AF00 +} + +div.highlight .-Color[class*=-C107] { + color: #87AF5F +} + +div.highlight .-Color[class*=-BGC107] { + background-color: #87AF5F +} + +div.highlight .-Color[class*=-C108] { + color: #87AF87 +} + +div.highlight .-Color[class*=-BGC108] { + background-color: #87AF87 +} + +div.highlight .-Color[class*=-C109] { + color: #87AFAF +} + +div.highlight .-Color[class*=-BGC109] { + background-color: #87AFAF +} + +div.highlight .-Color[class*=-C110] { + color: #87AFD7 +} + +div.highlight .-Color[class*=-BGC110] { + background-color: #87AFD7 +} + +div.highlight .-Color[class*=-C111] { + color: #87AFFF +} + +div.highlight .-Color[class*=-BGC111] { + background-color: #87AFFF +} + +div.highlight .-Color[class*=-C112] { + color: #87D700 +} + +div.highlight .-Color[class*=-BGC112] { + background-color: #87D700 +} + +div.highlight .-Color[class*=-C113] { + color: #87D75F +} + +div.highlight .-Color[class*=-BGC113] { + background-color: #87D75F +} + +div.highlight .-Color[class*=-C114] { + color: #87D787 +} + +div.highlight .-Color[class*=-BGC114] { + background-color: #87D787 +} + +div.highlight .-Color[class*=-C115] { + color: #87D7AF +} + +div.highlight .-Color[class*=-BGC115] { + background-color: #87D7AF +} + +div.highlight .-Color[class*=-C116] { + color: #87D7D7 +} + +div.highlight .-Color[class*=-BGC116] { + background-color: #87D7D7 +} + +div.highlight .-Color[class*=-C117] { + color: #87D7FF +} + +div.highlight .-Color[class*=-BGC117] { + background-color: #87D7FF +} + +div.highlight .-Color[class*=-C118] { + color: #87FF00 +} + +div.highlight .-Color[class*=-BGC118] { + background-color: #87FF00 +} + +div.highlight .-Color[class*=-C119] { + color: #87FF5F +} + +div.highlight .-Color[class*=-BGC119] { + background-color: #87FF5F +} + +div.highlight .-Color[class*=-C120] { + color: #87FF87 +} + +div.highlight .-Color[class*=-BGC120] { + background-color: #87FF87 +} + +div.highlight .-Color[class*=-C121] { + color: #87FFAF +} + +div.highlight .-Color[class*=-BGC121] { + background-color: #87FFAF +} + +div.highlight .-Color[class*=-C122] { + color: #87FFD7 +} + +div.highlight .-Color[class*=-BGC122] { + background-color: #87FFD7 +} + +div.highlight .-Color[class*=-C123] { + color: #87FFFF +} + +div.highlight .-Color[class*=-BGC123] { + background-color: #87FFFF +} + +div.highlight .-Color[class*=-C124] { + color: #AF0000 +} + +div.highlight .-Color[class*=-BGC124] { + background-color: #AF0000 +} + +div.highlight .-Color[class*=-C125] { + color: #AF005F +} + +div.highlight .-Color[class*=-BGC125] { + background-color: #AF005F +} + +div.highlight .-Color[class*=-C126] { + color: #AF0087 +} + +div.highlight .-Color[class*=-BGC126] { + background-color: #AF0087 +} + +div.highlight .-Color[class*=-C127] { + color: #AF00AF +} + +div.highlight .-Color[class*=-BGC127] { + background-color: #AF00AF +} + +div.highlight .-Color[class*=-C128] { + color: #AF00D7 +} + +div.highlight .-Color[class*=-BGC128] { + background-color: #AF00D7 +} + +div.highlight .-Color[class*=-C129] { + color: #AF00FF +} + +div.highlight .-Color[class*=-BGC129] { + background-color: #AF00FF +} + +div.highlight .-Color[class*=-C130] { + color: #AF5F00 +} + +div.highlight .-Color[class*=-BGC130] { + background-color: #AF5F00 +} + +div.highlight .-Color[class*=-C131] { + color: #AF5F5F +} + +div.highlight .-Color[class*=-BGC131] { + background-color: #AF5F5F +} + +div.highlight .-Color[class*=-C132] { + color: #AF5F87 +} + +div.highlight .-Color[class*=-BGC132] { + background-color: #AF5F87 +} + +div.highlight .-Color[class*=-C133] { + color: #AF5FAF +} + +div.highlight .-Color[class*=-BGC133] { + background-color: #AF5FAF +} + +div.highlight .-Color[class*=-C134] { + color: #AF5FD7 +} + +div.highlight .-Color[class*=-BGC134] { + background-color: #AF5FD7 +} + +div.highlight .-Color[class*=-C135] { + color: #AF5FFF +} + +div.highlight .-Color[class*=-BGC135] { + background-color: #AF5FFF +} + +div.highlight .-Color[class*=-C136] { + color: #AF8700 +} + +div.highlight .-Color[class*=-BGC136] { + background-color: #AF8700 +} + +div.highlight .-Color[class*=-C137] { + color: #AF875F +} + +div.highlight .-Color[class*=-BGC137] { + background-color: #AF875F +} + +div.highlight .-Color[class*=-C138] { + color: #AF8787 +} + +div.highlight .-Color[class*=-BGC138] { + background-color: #AF8787 +} + +div.highlight .-Color[class*=-C139] { + color: #AF87AF +} + +div.highlight .-Color[class*=-BGC139] { + background-color: #AF87AF +} + +div.highlight .-Color[class*=-C140] { + color: #AF87D7 +} + +div.highlight .-Color[class*=-BGC140] { + background-color: #AF87D7 +} + +div.highlight .-Color[class*=-C141] { + color: #AF87FF +} + +div.highlight .-Color[class*=-BGC141] { + background-color: #AF87FF +} + +div.highlight .-Color[class*=-C142] { + color: #AFAF00 +} + +div.highlight .-Color[class*=-BGC142] { + background-color: #AFAF00 +} + +div.highlight .-Color[class*=-C143] { + color: #AFAF5F +} + +div.highlight .-Color[class*=-BGC143] { + background-color: #AFAF5F +} + +div.highlight .-Color[class*=-C144] { + color: #AFAF87 +} + +div.highlight .-Color[class*=-BGC144] { + background-color: #AFAF87 +} + +div.highlight .-Color[class*=-C145] { + color: #AFAFAF +} + +div.highlight .-Color[class*=-BGC145] { + background-color: #AFAFAF +} + +div.highlight .-Color[class*=-C146] { + color: #AFAFD7 +} + +div.highlight .-Color[class*=-BGC146] { + background-color: #AFAFD7 +} + +div.highlight .-Color[class*=-C147] { + color: #AFAFFF +} + +div.highlight .-Color[class*=-BGC147] { + background-color: #AFAFFF +} + +div.highlight .-Color[class*=-C148] { + color: #AFD700 +} + +div.highlight .-Color[class*=-BGC148] { + background-color: #AFD700 +} + +div.highlight .-Color[class*=-C149] { + color: #AFD75F +} + +div.highlight .-Color[class*=-BGC149] { + background-color: #AFD75F +} + +div.highlight .-Color[class*=-C150] { + color: #AFD787 +} + +div.highlight .-Color[class*=-BGC150] { + background-color: #AFD787 +} + +div.highlight .-Color[class*=-C151] { + color: #AFD7AF +} + +div.highlight .-Color[class*=-BGC151] { + background-color: #AFD7AF +} + +div.highlight .-Color[class*=-C152] { + color: #AFD7D7 +} + +div.highlight .-Color[class*=-BGC152] { + background-color: #AFD7D7 +} + +div.highlight .-Color[class*=-C153] { + color: #AFD7FF +} + +div.highlight .-Color[class*=-BGC153] { + background-color: #AFD7FF +} + +div.highlight .-Color[class*=-C154] { + color: #AFFF00 +} + +div.highlight .-Color[class*=-BGC154] { + background-color: #AFFF00 +} + +div.highlight .-Color[class*=-C155] { + color: #AFFF5F +} + +div.highlight .-Color[class*=-BGC155] { + background-color: #AFFF5F +} + +div.highlight .-Color[class*=-C156] { + color: #AFFF87 +} + +div.highlight .-Color[class*=-BGC156] { + background-color: #AFFF87 +} + +div.highlight .-Color[class*=-C157] { + color: #AFFFAF +} + +div.highlight .-Color[class*=-BGC157] { + background-color: #AFFFAF +} + +div.highlight .-Color[class*=-C158] { + color: #AFFFD7 +} + +div.highlight .-Color[class*=-BGC158] { + background-color: #AFFFD7 +} + +div.highlight .-Color[class*=-C159] { + color: #AFFFFF +} + +div.highlight .-Color[class*=-BGC159] { + background-color: #AFFFFF +} + +div.highlight .-Color[class*=-C160] { + color: #D70000 +} + +div.highlight .-Color[class*=-BGC160] { + background-color: #D70000 +} + +div.highlight .-Color[class*=-C161] { + color: #D7005F +} + +div.highlight .-Color[class*=-BGC161] { + background-color: #D7005F +} + +div.highlight .-Color[class*=-C162] { + color: #D70087 +} + +div.highlight .-Color[class*=-BGC162] { + background-color: #D70087 +} + +div.highlight .-Color[class*=-C163] { + color: #D700AF +} + +div.highlight .-Color[class*=-BGC163] { + background-color: #D700AF +} + +div.highlight .-Color[class*=-C164] { + color: #D700D7 +} + +div.highlight .-Color[class*=-BGC164] { + background-color: #D700D7 +} + +div.highlight .-Color[class*=-C165] { + color: #D700FF +} + +div.highlight .-Color[class*=-BGC165] { + background-color: #D700FF +} + +div.highlight .-Color[class*=-C166] { + color: #D75F00 +} + +div.highlight .-Color[class*=-BGC166] { + background-color: #D75F00 +} + +div.highlight .-Color[class*=-C167] { + color: #D75F5F +} + +div.highlight .-Color[class*=-BGC167] { + background-color: #D75F5F +} + +div.highlight .-Color[class*=-C168] { + color: #D75F87 +} + +div.highlight .-Color[class*=-BGC168] { + background-color: #D75F87 +} + +div.highlight .-Color[class*=-C169] { + color: #D75FAF +} + +div.highlight .-Color[class*=-BGC169] { + background-color: #D75FAF +} + +div.highlight .-Color[class*=-C170] { + color: #D75FD7 +} + +div.highlight .-Color[class*=-BGC170] { + background-color: #D75FD7 +} + +div.highlight .-Color[class*=-C171] { + color: #D75FFF +} + +div.highlight .-Color[class*=-BGC171] { + background-color: #D75FFF +} + +div.highlight .-Color[class*=-C172] { + color: #D78700 +} + +div.highlight .-Color[class*=-BGC172] { + background-color: #D78700 +} + +div.highlight .-Color[class*=-C173] { + color: #D7875F +} + +div.highlight .-Color[class*=-BGC173] { + background-color: #D7875F +} + +div.highlight .-Color[class*=-C174] { + color: #D78787 +} + +div.highlight .-Color[class*=-BGC174] { + background-color: #D78787 +} + +div.highlight .-Color[class*=-C175] { + color: #D787AF +} + +div.highlight .-Color[class*=-BGC175] { + background-color: #D787AF +} + +div.highlight .-Color[class*=-C176] { + color: #D787D7 +} + +div.highlight .-Color[class*=-BGC176] { + background-color: #D787D7 +} + +div.highlight .-Color[class*=-C177] { + color: #D787FF +} + +div.highlight .-Color[class*=-BGC177] { + background-color: #D787FF +} + +div.highlight .-Color[class*=-C178] { + color: #D7AF00 +} + +div.highlight .-Color[class*=-BGC178] { + background-color: #D7AF00 +} + +div.highlight .-Color[class*=-C179] { + color: #D7AF5F +} + +div.highlight .-Color[class*=-BGC179] { + background-color: #D7AF5F +} + +div.highlight .-Color[class*=-C180] { + color: #D7AF87 +} + +div.highlight .-Color[class*=-BGC180] { + background-color: #D7AF87 +} + +div.highlight .-Color[class*=-C181] { + color: #D7AFAF +} + +div.highlight .-Color[class*=-BGC181] { + background-color: #D7AFAF +} + +div.highlight .-Color[class*=-C182] { + color: #D7AFD7 +} + +div.highlight .-Color[class*=-BGC182] { + background-color: #D7AFD7 +} + +div.highlight .-Color[class*=-C183] { + color: #D7AFFF +} + +div.highlight .-Color[class*=-BGC183] { + background-color: #D7AFFF +} + +div.highlight .-Color[class*=-C184] { + color: #D7D700 +} + +div.highlight .-Color[class*=-BGC184] { + background-color: #D7D700 +} + +div.highlight .-Color[class*=-C185] { + color: #D7D75F +} + +div.highlight .-Color[class*=-BGC185] { + background-color: #D7D75F +} + +div.highlight .-Color[class*=-C186] { + color: #D7D787 +} + +div.highlight .-Color[class*=-BGC186] { + background-color: #D7D787 +} + +div.highlight .-Color[class*=-C187] { + color: #D7D7AF +} + +div.highlight .-Color[class*=-BGC187] { + background-color: #D7D7AF +} + +div.highlight .-Color[class*=-C188] { + color: #D7D7D7 +} + +div.highlight .-Color[class*=-BGC188] { + background-color: #D7D7D7 +} + +div.highlight .-Color[class*=-C189] { + color: #D7D7FF +} + +div.highlight .-Color[class*=-BGC189] { + background-color: #D7D7FF +} + +div.highlight .-Color[class*=-C190] { + color: #D7FF00 +} + +div.highlight .-Color[class*=-BGC190] { + background-color: #D7FF00 +} + +div.highlight .-Color[class*=-C191] { + color: #D7FF5F +} + +div.highlight .-Color[class*=-BGC191] { + background-color: #D7FF5F +} + +div.highlight .-Color[class*=-C192] { + color: #D7FF87 +} + +div.highlight .-Color[class*=-BGC192] { + background-color: #D7FF87 +} + +div.highlight .-Color[class*=-C193] { + color: #D7FFAF +} + +div.highlight .-Color[class*=-BGC193] { + background-color: #D7FFAF +} + +div.highlight .-Color[class*=-C194] { + color: #D7FFD7 +} + +div.highlight .-Color[class*=-BGC194] { + background-color: #D7FFD7 +} + +div.highlight .-Color[class*=-C195] { + color: #D7FFFF +} + +div.highlight .-Color[class*=-BGC195] { + background-color: #D7FFFF +} + +div.highlight .-Color[class*=-C196] { + color: #FF0000 +} + +div.highlight .-Color[class*=-BGC196] { + background-color: #FF0000 +} + +div.highlight .-Color[class*=-C197] { + color: #FF005F +} + +div.highlight .-Color[class*=-BGC197] { + background-color: #FF005F +} + +div.highlight .-Color[class*=-C198] { + color: #FF0087 +} + +div.highlight .-Color[class*=-BGC198] { + background-color: #FF0087 +} + +div.highlight .-Color[class*=-C199] { + color: #FF00AF +} + +div.highlight .-Color[class*=-BGC199] { + background-color: #FF00AF +} + +div.highlight .-Color[class*=-C200] { + color: #FF00D7 +} + +div.highlight .-Color[class*=-BGC200] { + background-color: #FF00D7 +} + +div.highlight .-Color[class*=-C201] { + color: #FF00FF +} + +div.highlight .-Color[class*=-BGC201] { + background-color: #FF00FF +} + +div.highlight .-Color[class*=-C202] { + color: #FF5F00 +} + +div.highlight .-Color[class*=-BGC202] { + background-color: #FF5F00 +} + +div.highlight .-Color[class*=-C203] { + color: #FF5F5F +} + +div.highlight .-Color[class*=-BGC203] { + background-color: #FF5F5F +} + +div.highlight .-Color[class*=-C204] { + color: #FF5F87 +} + +div.highlight .-Color[class*=-BGC204] { + background-color: #FF5F87 +} + +div.highlight .-Color[class*=-C205] { + color: #FF5FAF +} + +div.highlight .-Color[class*=-BGC205] { + background-color: #FF5FAF +} + +div.highlight .-Color[class*=-C206] { + color: #FF5FD7 +} + +div.highlight .-Color[class*=-BGC206] { + background-color: #FF5FD7 +} + +div.highlight .-Color[class*=-C207] { + color: #FF5FFF +} + +div.highlight .-Color[class*=-BGC207] { + background-color: #FF5FFF +} + +div.highlight .-Color[class*=-C208] { + color: #FF8700 +} + +div.highlight .-Color[class*=-BGC208] { + background-color: #FF8700 +} + +div.highlight .-Color[class*=-C209] { + color: #FF875F +} + +div.highlight .-Color[class*=-BGC209] { + background-color: #FF875F +} + +div.highlight .-Color[class*=-C210] { + color: #FF8787 +} + +div.highlight .-Color[class*=-BGC210] { + background-color: #FF8787 +} + +div.highlight .-Color[class*=-C211] { + color: #FF87AF +} + +div.highlight .-Color[class*=-BGC211] { + background-color: #FF87AF +} + +div.highlight .-Color[class*=-C212] { + color: #FF87D7 +} + +div.highlight .-Color[class*=-BGC212] { + background-color: #FF87D7 +} + +div.highlight .-Color[class*=-C213] { + color: #FF87FF +} + +div.highlight .-Color[class*=-BGC213] { + background-color: #FF87FF +} + +div.highlight .-Color[class*=-C214] { + color: #FFAF00 +} + +div.highlight .-Color[class*=-BGC214] { + background-color: #FFAF00 +} + +div.highlight .-Color[class*=-C215] { + color: #FFAF5F +} + +div.highlight .-Color[class*=-BGC215] { + background-color: #FFAF5F +} + +div.highlight .-Color[class*=-C216] { + color: #FFAF87 +} + +div.highlight .-Color[class*=-BGC216] { + background-color: #FFAF87 +} + +div.highlight .-Color[class*=-C217] { + color: #FFAFAF +} + +div.highlight .-Color[class*=-BGC217] { + background-color: #FFAFAF +} + +div.highlight .-Color[class*=-C218] { + color: #FFAFD7 +} + +div.highlight .-Color[class*=-BGC218] { + background-color: #FFAFD7 +} + +div.highlight .-Color[class*=-C219] { + color: #FFAFFF +} + +div.highlight .-Color[class*=-BGC219] { + background-color: #FFAFFF +} + +div.highlight .-Color[class*=-C220] { + color: #FFD700 +} + +div.highlight .-Color[class*=-BGC220] { + background-color: #FFD700 +} + +div.highlight .-Color[class*=-C221] { + color: #FFD75F +} + +div.highlight .-Color[class*=-BGC221] { + background-color: #FFD75F +} + +div.highlight .-Color[class*=-C222] { + color: #FFD787 +} + +div.highlight .-Color[class*=-BGC222] { + background-color: #FFD787 +} + +div.highlight .-Color[class*=-C223] { + color: #FFD7AF +} + +div.highlight .-Color[class*=-BGC223] { + background-color: #FFD7AF +} + +div.highlight .-Color[class*=-C224] { + color: #FFD7D7 +} + +div.highlight .-Color[class*=-BGC224] { + background-color: #FFD7D7 +} + +div.highlight .-Color[class*=-C225] { + color: #FFD7FF +} + +div.highlight .-Color[class*=-BGC225] { + background-color: #FFD7FF +} + +div.highlight .-Color[class*=-C226] { + color: #FFFF00 +} + +div.highlight .-Color[class*=-BGC226] { + background-color: #FFFF00 +} + +div.highlight .-Color[class*=-C227] { + color: #FFFF5F +} + +div.highlight .-Color[class*=-BGC227] { + background-color: #FFFF5F +} + +div.highlight .-Color[class*=-C228] { + color: #FFFF87 +} + +div.highlight .-Color[class*=-BGC228] { + background-color: #FFFF87 +} + +div.highlight .-Color[class*=-C229] { + color: #FFFFAF +} + +div.highlight .-Color[class*=-BGC229] { + background-color: #FFFFAF +} + +div.highlight .-Color[class*=-C230] { + color: #FFFFD7 +} + +div.highlight .-Color[class*=-BGC230] { + background-color: #FFFFD7 +} + +div.highlight .-Color[class*=-C231] { + color: #FFFFFF +} + +div.highlight .-Color[class*=-BGC231] { + background-color: #FFFFFF +} + +div.highlight .-Color[class*=-C232] { + color: #080808 +} + +div.highlight .-Color[class*=-BGC232] { + background-color: #080808 +} + +div.highlight .-Color[class*=-C233] { + color: #121212 +} + +div.highlight .-Color[class*=-BGC233] { + background-color: #121212 +} + +div.highlight .-Color[class*=-C234] { + color: #1C1C1C +} + +div.highlight .-Color[class*=-BGC234] { + background-color: #1C1C1C +} + +div.highlight .-Color[class*=-C235] { + color: #262626 +} + +div.highlight .-Color[class*=-BGC235] { + background-color: #262626 +} + +div.highlight .-Color[class*=-C236] { + color: #303030 +} + +div.highlight .-Color[class*=-BGC236] { + background-color: #303030 +} + +div.highlight .-Color[class*=-C237] { + color: #3A3A3A +} + +div.highlight .-Color[class*=-BGC237] { + background-color: #3A3A3A +} + +div.highlight .-Color[class*=-C238] { + color: #444444 +} + +div.highlight .-Color[class*=-BGC238] { + background-color: #444444 +} + +div.highlight .-Color[class*=-C239] { + color: #4E4E4E +} + +div.highlight .-Color[class*=-BGC239] { + background-color: #4E4E4E +} + +div.highlight .-Color[class*=-C240] { + color: #585858 +} + +div.highlight .-Color[class*=-BGC240] { + background-color: #585858 +} + +div.highlight .-Color[class*=-C241] { + color: #626262 +} + +div.highlight .-Color[class*=-BGC241] { + background-color: #626262 +} + +div.highlight .-Color[class*=-C242] { + color: #6C6C6C +} + +div.highlight .-Color[class*=-BGC242] { + background-color: #6C6C6C +} + +div.highlight .-Color[class*=-C243] { + color: #767676 +} + +div.highlight .-Color[class*=-BGC243] { + background-color: #767676 +} + +div.highlight .-Color[class*=-C244] { + color: #808080 +} + +div.highlight .-Color[class*=-BGC244] { + background-color: #808080 +} + +div.highlight .-Color[class*=-C245] { + color: #8A8A8A +} + +div.highlight .-Color[class*=-BGC245] { + background-color: #8A8A8A +} + +div.highlight .-Color[class*=-C246] { + color: #949494 +} + +div.highlight .-Color[class*=-BGC246] { + background-color: #949494 +} + +div.highlight .-Color[class*=-C247] { + color: #9E9E9E +} + +div.highlight .-Color[class*=-BGC247] { + background-color: #9E9E9E +} + +div.highlight .-Color[class*=-C248] { + color: #A8A8A8 +} + +div.highlight .-Color[class*=-BGC248] { + background-color: #A8A8A8 +} + +div.highlight .-Color[class*=-C249] { + color: #B2B2B2 +} + +div.highlight .-Color[class*=-BGC249] { + background-color: #B2B2B2 +} + +div.highlight .-Color[class*=-C250] { + color: #BCBCBC +} + +div.highlight .-Color[class*=-BGC250] { + background-color: #BCBCBC +} + +div.highlight .-Color[class*=-C251] { + color: #C6C6C6 +} + +div.highlight .-Color[class*=-BGC251] { + background-color: #C6C6C6 +} + +div.highlight .-Color[class*=-C252] { + color: #D0D0D0 +} + +div.highlight .-Color[class*=-BGC252] { + background-color: #D0D0D0 +} + +div.highlight .-Color[class*=-C253] { + color: #DADADA +} + +div.highlight .-Color[class*=-BGC253] { + background-color: #DADADA +} + +div.highlight .-Color[class*=-C254] { + color: #E4E4E4 +} + +div.highlight .-Color[class*=-BGC254] { + background-color: #E4E4E4 +} + +div.highlight .-Color[class*=-C255] { + color: #EEEEEE +} + +div.highlight .-Color[class*=-BGC255] { + background-color: #EEEEEE +} diff --git a/_static/plus.png b/_static/plus.png new file mode 100644 index 00000000..7107cec9 Binary files /dev/null and b/_static/plus.png differ diff --git a/_static/pygments.css b/_static/pygments.css new file mode 100644 index 00000000..c15243c2 --- /dev/null +++ b/_static/pygments.css @@ -0,0 +1,85 @@ +pre { line-height: 125%; } +td.linenos .normal { color: #3c4354; background-color: transparent; padding-left: 5px; padding-right: 5px; } +span.linenos { color: #3c4354; background-color: transparent; padding-left: 5px; padding-right: 5px; } +td.linenos .special { color: #3c4354; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +span.linenos.special { color: #3c4354; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +.highlight .hll { background-color: #6e7681 } +.highlight { background: #1d2331; color: #d4d2c8 } +.highlight .c { color: #7e8aa1 } /* Comment */ +.highlight .err { color: #f88f7f } /* Error */ +.highlight .esc { color: #d4d2c8 } /* Escape */ +.highlight .g { color: #d4d2c8 } /* Generic */ +.highlight .k { color: #FFAD66 } /* Keyword */ +.highlight .l { color: #D5FF80 } /* Literal */ +.highlight .n { color: #d4d2c8 } /* Name */ +.highlight .o { color: #FFAD66 } /* Operator */ +.highlight .x { color: #d4d2c8 } /* Other */ +.highlight .p { color: #d4d2c8 } /* Punctuation */ +.highlight .ch { color: #f88f7f; font-style: italic } /* Comment.Hashbang */ +.highlight .cm { color: #7e8aa1 } /* Comment.Multiline */ +.highlight .cp { color: #FFAD66; font-weight: bold } /* Comment.Preproc */ +.highlight .cpf { color: #7e8aa1 } /* Comment.PreprocFile */ +.highlight .c1 { color: #7e8aa1 } /* Comment.Single */ +.highlight .cs { color: #7e8aa1; font-style: italic } /* Comment.Special */ +.highlight .gd { color: #f88f7f; background-color: #3d1e20 } /* Generic.Deleted */ +.highlight .ge { color: #d4d2c8; font-style: italic } /* Generic.Emph */ +.highlight .ges { color: #d4d2c8 } /* Generic.EmphStrong */ +.highlight .gr { color: #f88f7f } /* Generic.Error */ +.highlight .gh { color: #d4d2c8 } /* Generic.Heading */ +.highlight .gi { color: #6ad4af; background-color: #19362c } /* Generic.Inserted */ +.highlight .go { color: #7e8aa1 } /* Generic.Output */ +.highlight .gp { color: #d4d2c8 } /* Generic.Prompt */ +.highlight .gs { color: #d4d2c8; font-weight: bold } /* Generic.Strong */ +.highlight .gu { color: #d4d2c8 } /* Generic.Subheading */ +.highlight .gt { color: #f88f7f } /* Generic.Traceback */ +.highlight .kc { color: #FFAD66 } /* Keyword.Constant */ +.highlight .kd { color: #FFAD66 } /* Keyword.Declaration */ +.highlight .kn { color: #FFAD66 } /* Keyword.Namespace */ +.highlight .kp { color: #FFAD66 } /* Keyword.Pseudo */ +.highlight .kr { color: #FFAD66 } /* Keyword.Reserved */ +.highlight .kt { color: #73D0FF } /* Keyword.Type */ +.highlight .ld { color: #D5FF80 } /* Literal.Date */ +.highlight .m { color: #DFBFFF } /* Literal.Number */ +.highlight .s { color: #D5FF80 } /* Literal.String */ +.highlight .na { color: #FFD173 } /* Name.Attribute */ +.highlight .nb { color: #FFD173 } /* Name.Builtin */ +.highlight .nc { color: #73D0FF } /* Name.Class */ +.highlight .no { color: #FFD173 } /* Name.Constant */ +.highlight .nd { color: #7e8aa1; font-weight: bold; font-style: italic } /* Name.Decorator */ +.highlight .ni { color: #95E6CB } /* Name.Entity */ +.highlight .ne { color: #73D0FF } /* Name.Exception */ +.highlight .nf { color: #FFD173 } /* Name.Function */ +.highlight .nl { color: #d4d2c8 } /* Name.Label */ +.highlight .nn { color: #d4d2c8 } /* Name.Namespace */ +.highlight .nx { color: #d4d2c8 } /* Name.Other */ +.highlight .py { color: #FFD173 } /* Name.Property */ +.highlight .nt { color: #5CCFE6 } /* Name.Tag */ +.highlight .nv { color: #d4d2c8 } /* Name.Variable */ +.highlight .ow { color: #FFAD66 } /* Operator.Word */ +.highlight .pm { color: #d4d2c8 } /* Punctuation.Marker */ +.highlight .w { color: #d4d2c8 } /* Text.Whitespace */ +.highlight .mb { color: #DFBFFF } /* Literal.Number.Bin */ +.highlight .mf { color: #DFBFFF } /* Literal.Number.Float */ +.highlight .mh { color: #DFBFFF } /* Literal.Number.Hex */ +.highlight .mi { color: #DFBFFF } /* Literal.Number.Integer */ +.highlight .mo { color: #DFBFFF } /* Literal.Number.Oct */ +.highlight .sa { color: #F29E74 } /* Literal.String.Affix */ +.highlight .sb { color: #D5FF80 } /* Literal.String.Backtick */ +.highlight .sc { color: #D5FF80 } /* Literal.String.Char */ +.highlight .dl { color: #D5FF80 } /* Literal.String.Delimiter */ +.highlight .sd { color: #7e8aa1 } /* Literal.String.Doc */ +.highlight .s2 { color: #D5FF80 } /* Literal.String.Double */ +.highlight .se { color: #95E6CB } /* Literal.String.Escape */ +.highlight .sh { color: #D5FF80 } /* Literal.String.Heredoc */ +.highlight .si { color: #95E6CB } /* Literal.String.Interpol */ +.highlight .sx { color: #95E6CB } /* Literal.String.Other */ +.highlight .sr { color: #95E6CB } /* Literal.String.Regex */ +.highlight .s1 { color: #D5FF80 } /* Literal.String.Single */ +.highlight .ss { color: #DFBFFF } /* Literal.String.Symbol */ +.highlight .bp { color: #5CCFE6 } /* Name.Builtin.Pseudo */ +.highlight .fm { color: #FFD173 } /* Name.Function.Magic */ +.highlight .vc { color: #d4d2c8 } /* Name.Variable.Class */ +.highlight .vg { color: #d4d2c8 } /* Name.Variable.Global */ +.highlight .vi { color: #d4d2c8 } /* Name.Variable.Instance */ +.highlight .vm { color: #d4d2c8 } /* Name.Variable.Magic */ +.highlight .il { color: #DFBFFF } /* Literal.Number.Integer.Long */ \ No newline at end of file diff --git a/_static/searchtools.js b/_static/searchtools.js new file mode 100644 index 00000000..7918c3fa --- /dev/null +++ b/_static/searchtools.js @@ -0,0 +1,574 @@ +/* + * searchtools.js + * ~~~~~~~~~~~~~~~~ + * + * Sphinx JavaScript utilities for the full-text search. + * + * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ +"use strict"; + +/** + * Simple result scoring code. + */ +if (typeof Scorer === "undefined") { + var Scorer = { + // Implement the following function to further tweak the score for each result + // The function takes a result array [docname, title, anchor, descr, score, filename] + // and returns the new score. + /* + score: result => { + const [docname, title, anchor, descr, score, filename] = result + return score + }, + */ + + // query matches the full name of an object + objNameMatch: 11, + // or matches in the last dotted part of the object name + objPartialMatch: 6, + // Additive scores depending on the priority of the object + objPrio: { + 0: 15, // used to be importantResults + 1: 5, // used to be objectResults + 2: -5, // used to be unimportantResults + }, + // Used when the priority is not in the mapping. + objPrioDefault: 0, + + // query found in title + title: 15, + partialTitle: 7, + // query found in terms + term: 5, + partialTerm: 2, + }; +} + +const _removeChildren = (element) => { + while (element && element.lastChild) element.removeChild(element.lastChild); +}; + +/** + * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping + */ +const _escapeRegExp = (string) => + string.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string + +const _displayItem = (item, searchTerms, highlightTerms) => { + const docBuilder = DOCUMENTATION_OPTIONS.BUILDER; + const docFileSuffix = DOCUMENTATION_OPTIONS.FILE_SUFFIX; + const docLinkSuffix = DOCUMENTATION_OPTIONS.LINK_SUFFIX; + const showSearchSummary = DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY; + const contentRoot = document.documentElement.dataset.content_root; + + const [docName, title, anchor, descr, score, _filename] = item; + + let listItem = document.createElement("li"); + let requestUrl; + let linkUrl; + if (docBuilder === "dirhtml") { + // dirhtml builder + let dirname = docName + "/"; + if (dirname.match(/\/index\/$/)) + dirname = dirname.substring(0, dirname.length - 6); + else if (dirname === "index/") dirname = ""; + requestUrl = contentRoot + dirname; + linkUrl = requestUrl; + } else { + // normal html builders + requestUrl = contentRoot + docName + docFileSuffix; + linkUrl = docName + docLinkSuffix; + } + let linkEl = listItem.appendChild(document.createElement("a")); + linkEl.href = linkUrl + anchor; + linkEl.dataset.score = score; + linkEl.innerHTML = title; + if (descr) { + listItem.appendChild(document.createElement("span")).innerHTML = + " (" + descr + ")"; + // highlight search terms in the description + if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js + highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted")); + } + else if (showSearchSummary) + fetch(requestUrl) + .then((responseData) => responseData.text()) + .then((data) => { + if (data) + listItem.appendChild( + Search.makeSearchSummary(data, searchTerms) + ); + // highlight search terms in the summary + if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js + highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted")); + }); + Search.output.appendChild(listItem); +}; +const _finishSearch = (resultCount) => { + Search.stopPulse(); + Search.title.innerText = _("Search Results"); + if (!resultCount) + Search.status.innerText = Documentation.gettext( + "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories." + ); + else + Search.status.innerText = _( + `Search finished, found ${resultCount} page(s) matching the search query.` + ); +}; +const _displayNextItem = ( + results, + resultCount, + searchTerms, + highlightTerms, +) => { + // results left, load the summary and display it + // this is intended to be dynamic (don't sub resultsCount) + if (results.length) { + _displayItem(results.pop(), searchTerms, highlightTerms); + setTimeout( + () => _displayNextItem(results, resultCount, searchTerms, highlightTerms), + 5 + ); + } + // search finished, update title and status message + else _finishSearch(resultCount); +}; + +/** + * Default splitQuery function. Can be overridden in ``sphinx.search`` with a + * custom function per language. + * + * The regular expression works by splitting the string on consecutive characters + * that are not Unicode letters, numbers, underscores, or emoji characters. + * This is the same as ``\W+`` in Python, preserving the surrogate pair area. + */ +if (typeof splitQuery === "undefined") { + var splitQuery = (query) => query + .split(/[^\p{Letter}\p{Number}_\p{Emoji_Presentation}]+/gu) + .filter(term => term) // remove remaining empty strings +} + +/** + * Search Module + */ +const Search = { + _index: null, + _queued_query: null, + _pulse_status: -1, + + htmlToText: (htmlString) => { + const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html'); + htmlElement.querySelectorAll(".headerlink").forEach((el) => { el.remove() }); + const docContent = htmlElement.querySelector('[role="main"]'); + if (docContent !== undefined) return docContent.textContent; + console.warn( + "Content block not found. Sphinx search tries to obtain it via '[role=main]'. Could you check your theme or template." + ); + return ""; + }, + + init: () => { + const query = new URLSearchParams(window.location.search).get("q"); + document + .querySelectorAll('input[name="q"]') + .forEach((el) => (el.value = query)); + if (query) Search.performSearch(query); + }, + + loadIndex: (url) => + (document.body.appendChild(document.createElement("script")).src = url), + + setIndex: (index) => { + Search._index = index; + if (Search._queued_query !== null) { + const query = Search._queued_query; + Search._queued_query = null; + Search.query(query); + } + }, + + hasIndex: () => Search._index !== null, + + deferQuery: (query) => (Search._queued_query = query), + + stopPulse: () => (Search._pulse_status = -1), + + startPulse: () => { + if (Search._pulse_status >= 0) return; + + const pulse = () => { + Search._pulse_status = (Search._pulse_status + 1) % 4; + Search.dots.innerText = ".".repeat(Search._pulse_status); + if (Search._pulse_status >= 0) window.setTimeout(pulse, 500); + }; + pulse(); + }, + + /** + * perform a search for something (or wait until index is loaded) + */ + performSearch: (query) => { + // create the required interface elements + const searchText = document.createElement("h2"); + searchText.textContent = _("Searching"); + const searchSummary = document.createElement("p"); + searchSummary.classList.add("search-summary"); + searchSummary.innerText = ""; + const searchList = document.createElement("ul"); + searchList.classList.add("search"); + + const out = document.getElementById("search-results"); + Search.title = out.appendChild(searchText); + Search.dots = Search.title.appendChild(document.createElement("span")); + Search.status = out.appendChild(searchSummary); + Search.output = out.appendChild(searchList); + + const searchProgress = document.getElementById("search-progress"); + // Some themes don't use the search progress node + if (searchProgress) { + searchProgress.innerText = _("Preparing search..."); + } + Search.startPulse(); + + // index already loaded, the browser was quick! + if (Search.hasIndex()) Search.query(query); + else Search.deferQuery(query); + }, + + /** + * execute search (requires search index to be loaded) + */ + query: (query) => { + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const titles = Search._index.titles; + const allTitles = Search._index.alltitles; + const indexEntries = Search._index.indexentries; + + // stem the search terms and add them to the correct list + const stemmer = new Stemmer(); + const searchTerms = new Set(); + const excludedTerms = new Set(); + const highlightTerms = new Set(); + const objectTerms = new Set(splitQuery(query.toLowerCase().trim())); + splitQuery(query.trim()).forEach((queryTerm) => { + const queryTermLower = queryTerm.toLowerCase(); + + // maybe skip this "word" + // stopwords array is from language_data.js + if ( + stopwords.indexOf(queryTermLower) !== -1 || + queryTerm.match(/^\d+$/) + ) + return; + + // stem the word + let word = stemmer.stemWord(queryTermLower); + // select the correct list + if (word[0] === "-") excludedTerms.add(word.substr(1)); + else { + searchTerms.add(word); + highlightTerms.add(queryTermLower); + } + }); + + if (SPHINX_HIGHLIGHT_ENABLED) { // set in sphinx_highlight.js + localStorage.setItem("sphinx_highlight_terms", [...highlightTerms].join(" ")) + } + + // console.debug("SEARCH: searching for:"); + // console.info("required: ", [...searchTerms]); + // console.info("excluded: ", [...excludedTerms]); + + // array of [docname, title, anchor, descr, score, filename] + let results = []; + _removeChildren(document.getElementById("search-progress")); + + const queryLower = query.toLowerCase(); + for (const [title, foundTitles] of Object.entries(allTitles)) { + if (title.toLowerCase().includes(queryLower) && (queryLower.length >= title.length/2)) { + for (const [file, id] of foundTitles) { + let score = Math.round(100 * queryLower.length / title.length) + results.push([ + docNames[file], + titles[file] !== title ? `${titles[file]} > ${title}` : title, + id !== null ? "#" + id : "", + null, + score, + filenames[file], + ]); + } + } + } + + // search for explicit entries in index directives + for (const [entry, foundEntries] of Object.entries(indexEntries)) { + if (entry.includes(queryLower) && (queryLower.length >= entry.length/2)) { + for (const [file, id] of foundEntries) { + let score = Math.round(100 * queryLower.length / entry.length) + results.push([ + docNames[file], + titles[file], + id ? "#" + id : "", + null, + score, + filenames[file], + ]); + } + } + } + + // lookup as object + objectTerms.forEach((term) => + results.push(...Search.performObjectSearch(term, objectTerms)) + ); + + // lookup as search terms in fulltext + results.push(...Search.performTermsSearch(searchTerms, excludedTerms)); + + // let the scorer override scores with a custom scoring function + if (Scorer.score) results.forEach((item) => (item[4] = Scorer.score(item))); + + // now sort the results by score (in opposite order of appearance, since the + // display function below uses pop() to retrieve items) and then + // alphabetically + results.sort((a, b) => { + const leftScore = a[4]; + const rightScore = b[4]; + if (leftScore === rightScore) { + // same score: sort alphabetically + const leftTitle = a[1].toLowerCase(); + const rightTitle = b[1].toLowerCase(); + if (leftTitle === rightTitle) return 0; + return leftTitle > rightTitle ? -1 : 1; // inverted is intentional + } + return leftScore > rightScore ? 1 : -1; + }); + + // remove duplicate search results + // note the reversing of results, so that in the case of duplicates, the highest-scoring entry is kept + let seen = new Set(); + results = results.reverse().reduce((acc, result) => { + let resultStr = result.slice(0, 4).concat([result[5]]).map(v => String(v)).join(','); + if (!seen.has(resultStr)) { + acc.push(result); + seen.add(resultStr); + } + return acc; + }, []); + + results = results.reverse(); + + // for debugging + //Search.lastresults = results.slice(); // a copy + // console.info("search results:", Search.lastresults); + + // print the results + _displayNextItem(results, results.length, searchTerms, highlightTerms); + }, + + /** + * search for object names + */ + performObjectSearch: (object, objectTerms) => { + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const objects = Search._index.objects; + const objNames = Search._index.objnames; + const titles = Search._index.titles; + + const results = []; + + const objectSearchCallback = (prefix, match) => { + const name = match[4] + const fullname = (prefix ? prefix + "." : "") + name; + const fullnameLower = fullname.toLowerCase(); + if (fullnameLower.indexOf(object) < 0) return; + + let score = 0; + const parts = fullnameLower.split("."); + + // check for different match types: exact matches of full name or + // "last name" (i.e. last dotted part) + if (fullnameLower === object || parts.slice(-1)[0] === object) + score += Scorer.objNameMatch; + else if (parts.slice(-1)[0].indexOf(object) > -1) + score += Scorer.objPartialMatch; // matches in last name + + const objName = objNames[match[1]][2]; + const title = titles[match[0]]; + + // If more than one term searched for, we require other words to be + // found in the name/title/description + const otherTerms = new Set(objectTerms); + otherTerms.delete(object); + if (otherTerms.size > 0) { + const haystack = `${prefix} ${name} ${objName} ${title}`.toLowerCase(); + if ( + [...otherTerms].some((otherTerm) => haystack.indexOf(otherTerm) < 0) + ) + return; + } + + let anchor = match[3]; + if (anchor === "") anchor = fullname; + else if (anchor === "-") anchor = objNames[match[1]][1] + "-" + fullname; + + const descr = objName + _(", in ") + title; + + // add custom score for some objects according to scorer + if (Scorer.objPrio.hasOwnProperty(match[2])) + score += Scorer.objPrio[match[2]]; + else score += Scorer.objPrioDefault; + + results.push([ + docNames[match[0]], + fullname, + "#" + anchor, + descr, + score, + filenames[match[0]], + ]); + }; + Object.keys(objects).forEach((prefix) => + objects[prefix].forEach((array) => + objectSearchCallback(prefix, array) + ) + ); + return results; + }, + + /** + * search for full-text terms in the index + */ + performTermsSearch: (searchTerms, excludedTerms) => { + // prepare search + const terms = Search._index.terms; + const titleTerms = Search._index.titleterms; + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const titles = Search._index.titles; + + const scoreMap = new Map(); + const fileMap = new Map(); + + // perform the search on the required terms + searchTerms.forEach((word) => { + const files = []; + const arr = [ + { files: terms[word], score: Scorer.term }, + { files: titleTerms[word], score: Scorer.title }, + ]; + // add support for partial matches + if (word.length > 2) { + const escapedWord = _escapeRegExp(word); + Object.keys(terms).forEach((term) => { + if (term.match(escapedWord) && !terms[word]) + arr.push({ files: terms[term], score: Scorer.partialTerm }); + }); + Object.keys(titleTerms).forEach((term) => { + if (term.match(escapedWord) && !titleTerms[word]) + arr.push({ files: titleTerms[word], score: Scorer.partialTitle }); + }); + } + + // no match but word was a required one + if (arr.every((record) => record.files === undefined)) return; + + // found search word in contents + arr.forEach((record) => { + if (record.files === undefined) return; + + let recordFiles = record.files; + if (recordFiles.length === undefined) recordFiles = [recordFiles]; + files.push(...recordFiles); + + // set score for the word in each file + recordFiles.forEach((file) => { + if (!scoreMap.has(file)) scoreMap.set(file, {}); + scoreMap.get(file)[word] = record.score; + }); + }); + + // create the mapping + files.forEach((file) => { + if (fileMap.has(file) && fileMap.get(file).indexOf(word) === -1) + fileMap.get(file).push(word); + else fileMap.set(file, [word]); + }); + }); + + // now check if the files don't contain excluded terms + const results = []; + for (const [file, wordList] of fileMap) { + // check if all requirements are matched + + // as search terms with length < 3 are discarded + const filteredTermCount = [...searchTerms].filter( + (term) => term.length > 2 + ).length; + if ( + wordList.length !== searchTerms.size && + wordList.length !== filteredTermCount + ) + continue; + + // ensure that none of the excluded terms is in the search result + if ( + [...excludedTerms].some( + (term) => + terms[term] === file || + titleTerms[term] === file || + (terms[term] || []).includes(file) || + (titleTerms[term] || []).includes(file) + ) + ) + break; + + // select one (max) score for the file. + const score = Math.max(...wordList.map((w) => scoreMap.get(file)[w])); + // add result to the result list + results.push([ + docNames[file], + titles[file], + "", + null, + score, + filenames[file], + ]); + } + return results; + }, + + /** + * helper function to return a node containing the + * search summary for a given text. keywords is a list + * of stemmed words. + */ + makeSearchSummary: (htmlText, keywords) => { + const text = Search.htmlToText(htmlText); + if (text === "") return null; + + const textLower = text.toLowerCase(); + const actualStartPosition = [...keywords] + .map((k) => textLower.indexOf(k.toLowerCase())) + .filter((i) => i > -1) + .slice(-1)[0]; + const startWithContext = Math.max(actualStartPosition - 120, 0); + + const top = startWithContext === 0 ? "" : "..."; + const tail = startWithContext + 240 < text.length ? "..." : ""; + + let summary = document.createElement("p"); + summary.classList.add("context"); + summary.textContent = top + text.substr(startWithContext, 240).trim() + tail; + + return summary; + }, +}; + +_ready(Search.init); diff --git a/_static/sphinx_highlight.js b/_static/sphinx_highlight.js new file mode 100644 index 00000000..8a96c69a --- /dev/null +++ b/_static/sphinx_highlight.js @@ -0,0 +1,154 @@ +/* Highlighting utilities for Sphinx HTML documentation. */ +"use strict"; + +const SPHINX_HIGHLIGHT_ENABLED = true + +/** + * highlight a given string on a node by wrapping it in + * span elements with the given class name. + */ +const _highlight = (node, addItems, text, className) => { + if (node.nodeType === Node.TEXT_NODE) { + const val = node.nodeValue; + const parent = node.parentNode; + const pos = val.toLowerCase().indexOf(text); + if ( + pos >= 0 && + !parent.classList.contains(className) && + !parent.classList.contains("nohighlight") + ) { + let span; + + const closestNode = parent.closest("body, svg, foreignObject"); + const isInSVG = closestNode && closestNode.matches("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.classList.add(className); + } + + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + const rest = document.createTextNode(val.substr(pos + text.length)); + parent.insertBefore( + span, + parent.insertBefore( + rest, + node.nextSibling + ) + ); + node.nodeValue = val.substr(0, pos); + /* There may be more occurrences of search term in this node. So call this + * function recursively on the remaining fragment. + */ + _highlight(rest, addItems, text, className); + + if (isInSVG) { + const rect = document.createElementNS( + "http://www.w3.org/2000/svg", + "rect" + ); + const bbox = parent.getBBox(); + rect.x.baseVal.value = bbox.x; + rect.y.baseVal.value = bbox.y; + rect.width.baseVal.value = bbox.width; + rect.height.baseVal.value = bbox.height; + rect.setAttribute("class", className); + addItems.push({ parent: parent, target: rect }); + } + } + } else if (node.matches && !node.matches("button, select, textarea")) { + node.childNodes.forEach((el) => _highlight(el, addItems, text, className)); + } +}; +const _highlightText = (thisNode, text, className) => { + let addItems = []; + _highlight(thisNode, addItems, text, className); + addItems.forEach((obj) => + obj.parent.insertAdjacentElement("beforebegin", obj.target) + ); +}; + +/** + * Small JavaScript module for the documentation. + */ +const SphinxHighlight = { + + /** + * highlight the search words provided in localstorage in the text + */ + highlightSearchWords: () => { + if (!SPHINX_HIGHLIGHT_ENABLED) return; // bail if no highlight + + // get and clear terms from localstorage + const url = new URL(window.location); + const highlight = + localStorage.getItem("sphinx_highlight_terms") + || url.searchParams.get("highlight") + || ""; + localStorage.removeItem("sphinx_highlight_terms") + url.searchParams.delete("highlight"); + window.history.replaceState({}, "", url); + + // get individual terms from highlight string + const terms = highlight.toLowerCase().split(/\s+/).filter(x => x); + if (terms.length === 0) return; // nothing to do + + // There should never be more than one element matching "div.body" + const divBody = document.querySelectorAll("div.body"); + const body = divBody.length ? divBody[0] : document.querySelector("body"); + window.setTimeout(() => { + terms.forEach((term) => _highlightText(body, term, "highlighted")); + }, 10); + + const searchBox = document.getElementById("searchbox"); + if (searchBox === null) return; + searchBox.appendChild( + document + .createRange() + .createContextualFragment( + '" + ) + ); + }, + + /** + * helper function to hide the search marks again + */ + hideSearchWords: () => { + document + .querySelectorAll("#searchbox .highlight-link") + .forEach((el) => el.remove()); + document + .querySelectorAll("span.highlighted") + .forEach((el) => el.classList.remove("highlighted")); + localStorage.removeItem("sphinx_highlight_terms") + }, + + initEscapeListener: () => { + // only install a listener if it is really needed + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) return; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + // bail with special keys + if (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey) return; + if (DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS && (event.key === "Escape")) { + SphinxHighlight.hideSearchWords(); + event.preventDefault(); + } + }); + }, +}; + +_ready(() => { + /* Do not call highlightSearchWords() when we are on the search page. + * It will highlight words from the *previous* search query. + */ + if (typeof Search === "undefined") SphinxHighlight.highlightSearchWords(); + SphinxHighlight.initEscapeListener(); +}); diff --git a/algorithms.html b/algorithms.html new file mode 100644 index 00000000..6f2319fc --- /dev/null +++ b/algorithms.html @@ -0,0 +1,147 @@ + + + + + + + Algorithms — qlasskit documentation + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Algorithms

+

Qlasskit implements high level representation of quantum algorithms that relies on black boxes functions and oracles.

+ +
+

Simon periodicity

+
+
+

Deutsch Jozsa

+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/api.html b/api.html new file mode 100644 index 00000000..a1bb7a79 --- /dev/null +++ b/api.html @@ -0,0 +1,170 @@ + + + + + + + API — qlasskit documentation + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

API

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

qlasskit.qlassfun.qlassf(f[, types, defs, ...])

Decorator / function creating a QlassF object

qlasskit.qlassfun.qlassfa([types, defs, ...])

Decorator with parameters for qlassf

qlasskit.qlassfun.QlassF(name, original_f, ...)

Class representing a qlassf function

qlasskit.algorithms.qalgorithm

qlasskit.algorithms.grover.Grover(oracle[, ...])

qlasskit.qcircuit.qcircuit.QCircuit([...])

qlasskit.qcircuit.qcircuitwrapper.QCircuitWrapper()

Wrapper interface for a class containing a qcircuit

qlasskit.qcircuit.gates

+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/example_big_circuit.html b/example_big_circuit.html new file mode 100644 index 00000000..5ca29b23 --- /dev/null +++ b/example_big_circuit.html @@ -0,0 +1,158 @@ + + + + + + + Working with big circuits — qlasskit documentation + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Working with big circuits

+

Qlasskit is capable of producing large circuit without any issue. The only thing that you have to do, is to use the fastOptimizer, since running CSE is too slow on large expressions lists.

+

In the next example we are going to create a quantum circuit with 64 Qint8 in input, and one Qint8 in output, resulting on a circuit of ~21984 qubits and ~1044 gates in around 5 seconds.

+
+
+
from qlasskit import Qint8, Qlist, boolopt, qlassfa
+
+@qlassfa(bool_optimizer=boolopt.fastOptimizer)
+def test(a_list: Qlist[Qint8, 64]) -> Qint8:
+    h_val = Qint8(0)
+    for c in a_list:
+        h_val = h_val + c
+    return h_val
+
+
+
+
+
+
+
print(test.circuit())
+
+
+
+
+
QCircuit<test>(21984 gates, 1044 qubits)
+
+
+
+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/example_deutsch_jozsa.html b/example_deutsch_jozsa.html new file mode 100644 index 00000000..0f02188f --- /dev/null +++ b/example_deutsch_jozsa.html @@ -0,0 +1,198 @@ + + + + + + + Deutsch Jozsa algorithm — qlasskit documentation + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Deutsch Jozsa algorithm

+
+
+
from qlasskit import qlassf, Qint4
+
+
+@qlassf
+def f(a: Qint4) -> bool:
+    return a > 7
+
+
+
+
+
+
+
f.export("qiskit").draw("mpl")
+
+
+
+
+
/opt/hostedtoolcache/Python/3.10.13/x64/lib/python3.10/site-packages/qiskit/visualization/circuit/matplotlib.py:266: FutureWarning: The default matplotlib drawer scheme will be changed to "iqp" in a following release. To silence this warning, specify the current default explicitly as style="clifford", or the new default as style="iqp".
+  self._style, def_font_ratio = load_style(self._style)
+
+
+_images/1be99e37f13150ae81db33daa1ab2beb28fb6ea6b341a213e05f0f61f52f1d0c.png +
+
+
+
+
from qlasskit.algorithms import DeutschJozsa
+
+q_algo = DeutschJozsa(f)
+
+
+
+
+
+
+
qc = q_algo.export("qiskit")
+qc.draw("mpl")
+
+
+
+
+_images/5174bb0c6ea65db88c99511f9658fc0a3c9afceb5058f8a187fa4d462337954a.png +
+
+
+
+
from qiskit import Aer, QuantumCircuit, transpile
+from qiskit.visualization import plot_histogram
+
+qc.measure_all()
+simulator = Aer.get_backend("aer_simulator")
+circ = transpile(qc, simulator)
+result = simulator.run(circ).result()
+counts = result.get_counts(circ)
+
+counts_readable = q_algo.decode_counts(counts)
+plot_histogram(counts_readable)
+
+
+
+
+_images/f3b3957c4548aaf8d56ce1f0541c259dddd1458d1a1e74443a16ae7a87e145f7.png +
+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/example_grover.html b/example_grover.html new file mode 100644 index 00000000..6c1a8ef5 --- /dev/null +++ b/example_grover.html @@ -0,0 +1,208 @@ + + + + + + + Grover search — qlasskit documentation + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ + + + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/example_grover_factors.html b/example_grover_factors.html new file mode 100644 index 00000000..2f0f5125 --- /dev/null +++ b/example_grover_factors.html @@ -0,0 +1,179 @@ + + + + + + + Grover: factorize number — qlasskit documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Grover: factorize number

+
+
+
from typing import Tuple
+from qlasskit import qlassf, Qint2
+from qlasskit.algorithms import Grover
+
+
+@qlassf
+def factorize(a: Tuple[Qint2, Qint2]) -> bool:
+    return a[0] * a[1] == 9
+
+
+q_algo = Grover(factorize)
+
+
+
+
+
+
+
from qiskit import Aer, QuantumCircuit, transpile
+from qiskit.visualization import plot_histogram
+
+qc = q_algo.export("qiskit")
+qc.measure_all()
+simulator = Aer.get_backend("aer_simulator")
+circ = transpile(qc, simulator)
+result = simulator.run(circ).result()
+counts = result.get_counts(circ)
+
+counts_readable = q_algo.decode_counts(counts, discard_lower=5)
+plot_histogram(counts_readable)
+
+
+
+
+_images/5180fed86778dda3aef0affffed4a07321f62d24284f239022a14036426635b7.png +
+
+
+
+
qc.draw("mpl")
+
+
+
+
+
/opt/hostedtoolcache/Python/3.10.13/x64/lib/python3.10/site-packages/qiskit/visualization/circuit/matplotlib.py:266: FutureWarning: The default matplotlib drawer scheme will be changed to "iqp" in a following release. To silence this warning, specify the current default explicitly as style="clifford", or the new default as style="iqp".
+  self._style, def_font_ratio = load_style(self._style)
+
+
+_images/fc1d93821ee269bc89af7272200aae50aed37301baea1590dd42a82a9a297029.png +
+
+
+ + +
+
+
+ +
+ +
+

© Copyright 2023, Davide Gessa (dakk).

+
+ + Built with Sphinx using a + theme + provided by Read the Docs. + + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/example_grover_hash.html b/example_grover_hash.html new file mode 100644 index 00000000..2aaea456 --- /dev/null +++ b/example_grover_hash.html @@ -0,0 +1,229 @@ + + + + + + + Grover search: hash function preimage attack — qlasskit documentation + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Grover search: hash function preimage attack

+

In the ever-evolving landscape of cybersecurity, the advent of quantum computing presents both an extraordinary opportunity and an unprecedented challenge. In this notebook we exploit a Grover Search to perform a preimage attack on a toy hash function.

+

A preimage attack on a cryptographic hash function h(m) tries to find a message m that has a specific hash value. Using qlasskit it is easy to write an hash function like the following hash_simp:

+
+
+
from qlasskit import qlassf, Qint4, Qint8, Qlist
+
+
+@qlassf
+def hash_simp(m: Qlist[Qint4, 2]) -> Qint8:
+    hv = 0
+    for i in m:
+        hv = ((hv << 4) ^ (hv >> 1) ^ i) & 0xFF
+
+    return hv
+
+
+
+
+

Thanks to the fact that qlasskit function are standard python functions, we can call the original_f to perform some kind of analysis on the hash function. Since the input space is tiny (it is a toy hash function), we can detect if the hash function is uniform (if it maps equally to the output space).

+
+
+
from collections import Counter
+
+d = Counter(
+    hex(hash_simp.original_f((x, y))) for x in range(2**4) for y in range(2**4)
+)
+
+print("Hash function output space:", len(d))
+
+
+
+
+
Hash function output space: 256
+
+
+
+
+

We got that hash_simp is following an uniform distribution.

+
+
+
hash_simp.export("qiskit").draw("mpl")
+
+
+
+
+
/opt/hostedtoolcache/Python/3.10.13/x64/lib/python3.10/site-packages/qiskit/visualization/circuit/matplotlib.py:266: FutureWarning: The default matplotlib drawer scheme will be changed to "iqp" in a following release. To silence this warning, specify the current default explicitly as style="clifford", or the new default as style="iqp".
+  self._style, def_font_ratio = load_style(self._style)
+
+
+_images/c7ef1f01b80363cad58e444c34d85d42122df00d7131ad1f1fec37e2b481452c.png +
+
+

Now we use our quantum function as an oracle for a Grover search, in order to find which input maps to the value 0xca.

+
+
+
from qlasskit.algorithms import Grover
+
+q_algo = Grover(hash_simp, Qint8(0xCA))
+
+
+
+
+

Then we use our prefered framework and simulator for sampling the result; this is an example using qiskit with aer_simulator.

+
+
+
from qiskit import Aer, QuantumCircuit, transpile
+from qiskit.visualization import plot_histogram
+
+qc = q_algo.export("qiskit")
+qc.measure_all()
+simulator = Aer.get_backend("aer_simulator")
+circ = transpile(qc, simulator)
+result = simulator.run(circ).result()
+counts = result.get_counts(circ)
+
+counts_readable = q_algo.decode_counts(counts, discard_lower=5)
+plot_histogram(counts_readable)
+
+
+
+
+_images/54dbe21e590e5ff31a74aa41c1e7db7e8b05a5eea8718ec877d21d82a5b931ae.png +
+
+

Using QlassF.original_f we can double check the result without invoking a quantum simulator; calling it with the tuple (12,12) must result in the hash value 0xca.

+
+
+
print(hex(hash_simp.original_f((12, 12))))
+
+
+
+
+
0xca
+
+
+
+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/example_grover_subset.html b/example_grover_subset.html new file mode 100644 index 00000000..d334119f --- /dev/null +++ b/example_grover_subset.html @@ -0,0 +1,180 @@ + + + + + + + Grover search: subset problem — qlasskit documentation + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Grover search: subset problem

+

We define a function named subset_sum(i,j) that returns the sum of the elements i and j of a list l. We want to use a Grover search to find which i j combination led to a given value.

+
+
+
from qlasskit import qlassf, Qint2, Qint3
+from typing import Tuple
+
+
+@qlassf
+def subset_sum(ii: Tuple[Qint2, Qint2]) -> Qint3:
+    l = [0, 5, 2, 3]
+    return l[ii[0]] + l[ii[1]] if ii[0] != ii[1] else 0
+
+
+
+
+

Our quantum function subset_sum will be used as an oracle for a Grover search. For instance, here we want to find the input value that produce the value 7. Since we know that there are at least two result ((i,j) and (j,i)), we set n_matching=2.

+
+
+
from qlasskit.algorithms import Grover
+
+q_algo = Grover(subset_sum, Qint3(7), n_matching=2)
+
+
+
+
+

Then we use our prefered framework and simulator for sampling the result; this is an example using qiskit with aer_simulator.

+

In the output histogram, it’s now evident that the input leading to a value of 7 are the tuples (1,2) and (2,1) (5+2 and 2+5), aligning with our expectations.

+
+
+
from qiskit import Aer, QuantumCircuit, transpile
+from qiskit.visualization import plot_histogram
+
+qc = q_algo.export("qiskit")
+qc.measure_all()
+simulator = Aer.get_backend("aer_simulator")
+circ = transpile(qc, simulator)
+result = simulator.run(circ).result()
+counts = result.get_counts(circ)
+
+counts_readable = q_algo.decode_counts(counts)
+plot_histogram(counts_readable)
+
+
+
+
+_images/274e5b7a04d1b45c692c85a2df1435fc8fead62305c8707868952747e0ca9a74.png +
+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/example_grover_sudoku.html b/example_grover_sudoku.html new file mode 100644 index 00000000..d25e30a7 --- /dev/null +++ b/example_grover_sudoku.html @@ -0,0 +1,208 @@ + + + + + + + Grover search: sudoku solver — qlasskit documentation + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Grover search: sudoku solver

+

In this example we are going to solve a sudoku puzzle. Since we have few qubits, we cannot solve a real 9x9 sudoku puzzle; our toy examples uses a 2x2 matrix where a valid solution is when in every row and every column there are no repeated values (0 or 1). We encode these xor-ing the values for each row and column. +Since we want a specific solution, we add a constraint constr: we want the [0][0] element to be True.

+

sudoku_check is already an oracle so this time we instantiate the Grover algorithm without value.

+
+
+
from qlasskit import qlassf, Qmatrix
+from qlasskit.algorithms import Grover
+
+@qlassf
+def sudoku_check(m: Qmatrix[bool, 2, 2]) -> bool:
+    constr = m[0][0]
+    sub0 = m[0][0] ^ m[0][1]
+    sub1 = m[1][0] ^ m[1][1]
+    sub2 = m[0][0] ^ m[1][0]
+    sub3 = m[0][1] ^ m[1][1]
+    return sub0 and sub1 and sub2 and sub3 and constr
+
+q_algo = Grover(sudoku_check)
+
+
+
+
+

Then we use our prefered framework and simulator for sampling the result; this is an example using qiskit with aer_simulator.

+

We obtain that the solution for this puzzle is the matrix [[True, False], [False, True]].

+
+
+
from qiskit import Aer, QuantumCircuit, transpile
+from qiskit.visualization import plot_histogram
+
+qc = q_algo.export("qiskit")
+qc.measure_all()
+simulator = Aer.get_backend("aer_simulator")
+circ = transpile(qc, simulator)
+result = simulator.run(circ).result()
+counts = result.get_counts(circ)
+
+counts_readable = q_algo.decode_counts(counts, discard_lower=20)
+plot_histogram(counts_readable)
+
+
+
+
+_images/2915c0b805d9c8511df8953092a6bcabff47bf8837755424101f63b16dfa26c7.png +
+
+

We can create a more realistic sudoku game using numbers instead of booleans, but the resources required will scale exponentially. In the following code snippets, we recreate sudoku_check using Qint2 and a 4x4 matrix. The sum of each column and row must be equal to 6 (3+2+1+0). As we can see, the resulting circuit of the checker requires more than 100 qubits, way above our simulation capabilities.

+
+
+
from qlasskit import Qint2, Qint4
+
+@qlassf
+def sudoku_check(m: Qmatrix[Qint2, 4, 4]) -> bool:
+    res = True
+    
+    # Constraints
+    res = (m[0][2] == 3) and (m[0][0] == 1)
+    
+    # Check every row and column
+    for i in range(4):
+        c = (Qint4(0) + m[i][0] + m[i][1] + m[i][2] + m[i][3]) == 6 
+        r = (Qint4(0) + m[0][i] + m[1][i] + m[2][i] + m[3][i]) == 6 
+        res = res and c and r
+        
+    return res
+
+#q_algo = Grover(sudoku_check)
+print(sudoku_check.circuit())
+
+
+
+
+
QCircuit<sudoku_check>(1309 gates, 178 qubits)
+
+
+
+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/example_simon.html b/example_simon.html new file mode 100644 index 00000000..3d3f2c5b --- /dev/null +++ b/example_simon.html @@ -0,0 +1,198 @@ + + + + + + + Simon function periodicity — qlasskit documentation + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Simon function periodicity

+
+
+
from qlasskit import qlassf, Qint4
+
+
+@qlassf
+def f(a: Qint4) -> Qint4:
+    return (a >> 3) + 1
+
+
+
+
+
+
+
f.export("qiskit").draw("mpl")
+
+
+
+
+
/opt/hostedtoolcache/Python/3.10.13/x64/lib/python3.10/site-packages/qiskit/visualization/circuit/matplotlib.py:266: FutureWarning: The default matplotlib drawer scheme will be changed to "iqp" in a following release. To silence this warning, specify the current default explicitly as style="clifford", or the new default as style="iqp".
+  self._style, def_font_ratio = load_style(self._style)
+
+
+_images/8e1bf07bbbab0c0a595d9144710a8af6c22cf9a2661a42ccd01e899e85ffb12e.png +
+
+
+
+
from qlasskit.algorithms import Simon
+
+q_algo = Simon(f)
+
+
+
+
+
+
+
qc = q_algo.export("qiskit")
+qc.draw("mpl")
+
+
+
+
+_images/18da646c905ecbbabade2933b32d33141624835efe4bc3d00deb9641993228fc.png +
+
+
+
+
from qiskit import Aer, QuantumCircuit, transpile
+from qiskit.visualization import plot_histogram
+
+qc.measure_all()
+simulator = Aer.get_backend("aer_simulator")
+circ = transpile(qc, simulator)
+result = simulator.run(circ).result()
+counts = result.get_counts(circ)
+
+counts_readable = q_algo.decode_counts(counts)
+plot_histogram(counts_readable)
+
+
+
+
+_images/d5eecd09f0811026c2add991efdd35dd7e04fdefb326b0414c542dd0e32b203a.png +
+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/example_unitary_of_f.html b/example_unitary_of_f.html new file mode 100644 index 00000000..25acb628 --- /dev/null +++ b/example_unitary_of_f.html @@ -0,0 +1,189 @@ + + + + + + + Unitary of qlasskit function — qlasskit documentation + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Unitary of qlasskit function

+

In qlasskit, we can exploit external low-level frameworks to perform operations on the resulting quantum circuit. In this example, we use qiskit in order to obtain the unitary matrix of our QlassF function.

+
+
+
from qiskit import QuantumCircuit, transpile, execute
+from qiskit_aer import AerSimulator
+from qiskit.visualization import array_to_latex
+from qlasskit import qlassf
+
+
+@qlassf
+def f(a: bool, b: bool) -> bool:
+    return a ^ (not b)
+
+
+print(f"\n{f}\n")
+
+qc = QuantumCircuit(f.num_qubits, f.num_qubits)
+qc.append(f.gate(), f.qubits)
+
+qc.save_state()
+qc.decompose().draw("mpl")
+
+
+
+
+
QlassF<f>(a:bool, b:bool) -> bool:
+	_ret = a ^ ~b
+
+
+_images/37afe42937c3ad9b42eae8b9bb2821891d10c2c845dd4d77462ec4486194799a.png +
+
+
+
+
simulator = AerSimulator(method="unitary")
+job = execute(qc, simulator, shots=8192)
+result = job.result()
+array_to_latex(result.get_unitary(qc, 3), max_size=16)
+
+
+
+
+
+\[\begin{split}\begin{bmatrix} +0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 \\ + 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 \\ + 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 \\ + 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 \\ + \end{bmatrix} +\end{split}\]
+
+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/exporter.html b/exporter.html new file mode 100644 index 00000000..315e9c62 --- /dev/null +++ b/exporter.html @@ -0,0 +1,250 @@ + + + + + + + Exporting to other frameworks — qlasskit documentation + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Exporting to other frameworks

+

Qlasskit implements circuit / gate exporters for Qiskit, Cirq, Qasm, Sympy and Pennylane.

+
+
+
from qlasskit import Qint2, qlassf
+
+
+@qlassf
+def hello_world(a: bool, b: Qint2) -> Qint2:
+    return b + (1 if a else 0)
+
+
+
+
+
+

Qiskit

+
+
+
qc = hello_world.export("qiskit")
+qc.draw("mpl")
+
+
+
+
+
/opt/hostedtoolcache/Python/3.10.13/x64/lib/python3.10/site-packages/qiskit/visualization/circuit/matplotlib.py:266: FutureWarning: The default matplotlib drawer scheme will be changed to "iqp" in a following release. To silence this warning, specify the current default explicitly as style="clifford", or the new default as style="iqp".
+  self._style, def_font_ratio = load_style(self._style)
+
+
+_images/be3abba3958dd65682b17997972df3f803e8698846e140e95797a368e23e2236.png +
+
+
+
+

QASM

+
+
+
qc = hello_world.export("qasm")
+print(qc)
+
+
+
+
+
OPENQASM 3.0;
+
+gate hello_world a b.0 b.1 _ret.0 _ret.1 {
+	cx a _ret.0
+	cx b.0 _ret.0
+	cx b.1 _ret.1
+	ccx a b.0 _ret.1
+}
+
+
+
+
+
+
+

Cirq

+
+
+
import cirq
+
+qc = hello_world.export("cirq")
+qc
+
+
+
+
+
0: ───hello_world───
+      │
+1: ───hello_world───
+      │
+2: ───hello_world───
+      │
+3: ───hello_world───
+      │
+4: ───hello_world───
+
+
+
+

Pennylane

+
+
+
import pennylane as qml
+
+tape = hello_world.export("pennylane")
+tape
+
+
+
+
+
<QuantumTape: wires=[0, 3, 1, 2, 4], params=0>
+
+
+
+
+
+
+

Sympy

+
+
+
qc = hello_world.export("sympy")
+qc
+
+
+
+
+
+\[\displaystyle C_{0,1}{\left(X_{4}\right)} \text{CNOT}_{2,4} \text{CNOT}_{1,3} \text{CNOT}_{0,3} {\left|00000\right\rangle }\]
+
+
+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/generated/qlasskit.algorithms.grover.Grover.html b/generated/qlasskit.algorithms.grover.Grover.html new file mode 100644 index 00000000..949346cd --- /dev/null +++ b/generated/qlasskit.algorithms.grover.Grover.html @@ -0,0 +1,228 @@ + + + + + + + qlasskit.algorithms.grover.Grover — qlasskit documentation + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

qlasskit.algorithms.grover.Grover

+
+
+class qlasskit.algorithms.grover.Grover(oracle: QlassF, element_to_search: Qtype | None = None, n_iterations: int | None = None, n_matching: int = 1)
+
+
+__init__(oracle: QlassF, element_to_search: Qtype | None = None, n_iterations: int | None = None, n_matching: int = 1)
+
+
Parameters:
+
    +
  • oracle (QlassF) – our f(x) -> bool that returns True if x satisfies the function or +a generic function f(x) = y that we want to compare with element_to_search

  • +
  • element_to_search (Qtype, optional) – the element we want to search

  • +
  • n_iterations (int, optional) – force a number of iterations +(otherwise, pi/4*sqrt(N/n_matching))

  • +
  • n_matching (int) – the number of expected matching values (default: 1)

  • +
+
+
+
+ +

Methods

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

__init__(oracle[, element_to_search, ...])

+
param oracle:
+

our f(x) -> bool that returns True if x satisfies the function or

+
+
+

circuit()

decode_counts(counts[, discard_lower])

Decode data from a circuit counts dict

decode_output(istr)

draw()

encode_input(*qvals)

export([framework])

Export the circuit to a supported framework

gate([framework])

Returns the gate for a specific framework

+

Attributes

+ + + + + + + + + + + + + + + + + + + + + +

input_qubits

Returns the list of input qubits

input_size

num_qubits

output_qubits

Returns the list of output qubits

output_size

qubits

Returns all the qubits of the circuit

+
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/generated/qlasskit.algorithms.qalgorithm.html b/generated/qlasskit.algorithms.qalgorithm.html new file mode 100644 index 00000000..20c6cd1a --- /dev/null +++ b/generated/qlasskit.algorithms.qalgorithm.html @@ -0,0 +1,167 @@ + + + + + + + qlasskit.algorithms.qalgorithm — qlasskit documentation + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

qlasskit.algorithms.qalgorithm

+

Functions

+ + + + + + +

oraclize(qf, element[, name])

Transform a QlassF qf and an element to an oracle {f(x) = x == element}

+

Classes

+ + + + + + +

QAlgorithm()

+

Exceptions

+ + + + + + +

ConstantOracleException

+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/generated/qlasskit.qcircuit.gates.html b/generated/qlasskit.qcircuit.gates.html new file mode 100644 index 00000000..643c443d --- /dev/null +++ b/generated/qlasskit.qcircuit.gates.html @@ -0,0 +1,213 @@ + + + + + + + qlasskit.qcircuit.gates — qlasskit documentation + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

qlasskit.qcircuit.gates

+

Functions

+ + + + + + +

apply(gate, qubits[, param])

+

Classes

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Barrier()

CCX()

CP()

CX()

H()

I()

MCX(n_controls)

MCtrl(gate, n_controls)

NopGate([name])

P()

QControlledGate(gate, n_controls)

QGate(name[, n_qubits])

S()

Swap()

T()

Toffoli

alias of CCX

X()

Y()

Z()

+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/generated/qlasskit.qcircuit.qcircuit.QCircuit.html b/generated/qlasskit.qcircuit.qcircuit.QCircuit.html new file mode 100644 index 00000000..9f540752 --- /dev/null +++ b/generated/qlasskit.qcircuit.qcircuit.QCircuit.html @@ -0,0 +1,256 @@ + + + + + + + qlasskit.qcircuit.qcircuit.QCircuit — qlasskit documentation + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

qlasskit.qcircuit.qcircuit.QCircuit

+
+
+class qlasskit.qcircuit.qcircuit.QCircuit(num_qubits=0, name='qc', native=None)
+
+
+__init__(num_qubits=0, name='qc', native=None)
+

Initialize a quantum circuit.

+
+
Parameters:
+

num_qubits (int, optional) – The number of qubits in the circuit. Defaults to 0.

+
+
+
+ +

Methods

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

__init__([num_qubits, name, native])

Initialize a quantum circuit.

add_qubit([name])

Add a qubit to the circuit.

append(gate, qubits[, param])

Append a gate operation to the circuit.

append_circuit(other[, qubits])

Add a qcircuit, remapping to qubits

barrier([label])

Add a barrier to the circuit

ccx(w1, w2, w3)

CCX gate

copy()

cp(phase, w1, w2)

CP gate

cx(w1, w2)

CX gate

draw()

Draw the circuit

export([mode, framework])

Exports the circuit to another framework.

get_key_by_index(i)

Return the qubit name given its index

h(w)

H gate

iqft(wl)

Apply the inverse quantum fourier transform

mctrl(g, wl, target[, param])

Multi controlled gate

mcx(wl, target)

Multi CX gate

qft(wl)

Apply the quantum fourier transform

random(qubits_n, depth[, gate_list])

repeat(n)

Return a copy of the QCircuit repeated n times

s(w)

S gate

swap(w1, w2)

t(w)

T gate

x(w)

X gate

y(w)

Y gate

z(w)

Z gate

+

Attributes

+ + + + + + + + + +

num_gates

used_qubits

+
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/generated/qlasskit.qcircuit.qcircuitwrapper.QCircuitWrapper.html b/generated/qlasskit.qcircuit.qcircuitwrapper.QCircuitWrapper.html new file mode 100644 index 00000000..0e2236b3 --- /dev/null +++ b/generated/qlasskit.qcircuit.qcircuitwrapper.QCircuitWrapper.html @@ -0,0 +1,212 @@ + + + + + + + qlasskit.qcircuit.qcircuitwrapper.QCircuitWrapper — qlasskit documentation + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

qlasskit.qcircuit.qcircuitwrapper.QCircuitWrapper

+
+
+class qlasskit.qcircuit.qcircuitwrapper.QCircuitWrapper
+

Wrapper interface for a class containing a qcircuit

+
+
+__init__()
+
+ +

Methods

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

__init__()

circuit()

decode_counts(counts[, discard_lower])

Decode data from a circuit counts dict

decode_output(istr)

draw()

encode_input(*qvals)

export([framework])

Export the circuit to a supported framework

gate([framework])

Returns the gate for a specific framework

+

Attributes

+ + + + + + + + + + + + + + + + + + + + + +

input_qubits

Returns the list of input qubits

input_size

num_qubits

output_qubits

Returns the list of output qubits

output_size

qubits

Returns all the qubits of the circuit

+
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/generated/qlasskit.qlassfun.QlassF.html b/generated/qlasskit.qlassfun.QlassF.html new file mode 100644 index 00000000..53c83812 --- /dev/null +++ b/generated/qlasskit.qlassfun.QlassF.html @@ -0,0 +1,248 @@ + + + + + + + qlasskit.qlassfun.QlassF — qlasskit documentation + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

qlasskit.qlassfun.QlassF

+
+
+class qlasskit.qlassfun.QlassF(name: str, original_f: Callable, args: List[Arg], returns: Arg, exps: List[Tuple[Symbol, Boolean]])
+

Class representing a qlassf function

+
+
+__init__(name: str, original_f: Callable, args: List[Arg], returns: Arg, exps: List[Tuple[Symbol, Boolean]])
+
+ +

Methods

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

__init__(name, original_f, args, returns, exps)

bind(**kwargs)

Returns a new QlassF with defined params

circuit()

compile([compiler, uncompute])

decode_counts(counts[, discard_lower])

Decode data from a circuit counts dict

decode_output(istr)

draw()

encode_input(*qvals)

export([framework])

Export the circuit to a supported framework

f()

Returns the classical python function

from_function(f[, types, defs, to_compile, ...])

Create a QlassF from a function or a string containing a function

gate([framework])

Returns the gate for a specific framework

to_logicfun()

truth_table([max])

Returns the truth table for the function using the sympy boolean for computing

truth_table_header()

Returns the list of string containing the truth table header

+

Attributes

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

input_qubits

Returns the list of input qubits

input_size

num_qubits

output_qubits

Returns the list of output qubits

output_size

Return the size of the return type (in bits)

qubits

Returns all the qubits of the circuit

name

original_f

args

returns

expressions

+
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/generated/qlasskit.qlassfun.qlassf.html b/generated/qlasskit.qlassfun.qlassf.html new file mode 100644 index 00000000..c6f5d225 --- /dev/null +++ b/generated/qlasskit.qlassfun.qlassf.html @@ -0,0 +1,167 @@ + + + + + + + qlasskit.qlassfun.qlassf — qlasskit documentation + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

qlasskit.qlassfun.qlassf

+
+
+qlasskit.qlassfun.qlassf(f: str | ~typing.Callable, types: ~typing.List[~qlasskit.types.qtype.Qtype] = [], defs: ~typing.List[~qlasskit.qlassfun.QlassF] = [], to_compile: bool = True, compiler: ~typing.Literal['internal', 'recompiler', 'tweedledum'] = 'internal', bool_optimizer: ~qlasskit.boolopt.bool_optimizer.BoolOptimizerProfile = <qlasskit.boolopt.bool_optimizer.BoolOptimizerProfile object>, uncompute: bool = True) QlassF
+

Decorator / function creating a QlassF object

+
+
Parameters:
+
    +
  • f (Union[str, Callable]) – the function to be parsed, as a str code or callable

  • +
  • types (List[Qtype]) – list of qtypes to inject

  • +
  • defs (List[Qlassf]) – list of qlassf to inject

  • +
  • to_compile (boolean, optional) – if True, compile to quantum circuit (default: True)

  • +
  • compiler (SupportedCompiler, optional) – override default compiler (default: internal)

  • +
  • bool_optimizer (BoolOptimizerProfile, optional) – override default optimizer +(default: defaultOptimizer)

  • +
  • uncompute (bool, optional) – whenever uncompute input qubits during compilation +(default: True)

  • +
+
+
+
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/generated/qlasskit.qlassfun.qlassfa.html b/generated/qlasskit.qlassfun.qlassfa.html new file mode 100644 index 00000000..788335e0 --- /dev/null +++ b/generated/qlasskit.qlassfun.qlassfa.html @@ -0,0 +1,152 @@ + + + + + + + qlasskit.qlassfun.qlassfa — qlasskit documentation + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

qlasskit.qlassfun.qlassfa

+
+
+qlasskit.qlassfun.qlassfa(types: ~typing.List[~qlasskit.types.qtype.Qtype] = [], defs: ~typing.List[~qlasskit.qlassfun.QlassF] = [], to_compile: bool = True, compiler: ~typing.Literal['internal', 'recompiler', 'tweedledum'] = 'internal', bool_optimizer: ~qlasskit.boolopt.bool_optimizer.BoolOptimizerProfile = <qlasskit.boolopt.bool_optimizer.BoolOptimizerProfile object>, uncompute: bool = True)
+

Decorator with parameters for qlassf

+
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/genindex.html b/genindex.html new file mode 100644 index 00000000..35a7d824 --- /dev/null +++ b/genindex.html @@ -0,0 +1,203 @@ + + + + + + Index — qlasskit documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/how_it_works.html b/how_it_works.html new file mode 100644 index 00000000..5509510a --- /dev/null +++ b/how_it_works.html @@ -0,0 +1,269 @@ + + + + + + + How it works — qlasskit documentation + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

How it works

+

To convert Python code into a quantum circuit, qlasskit implements a series of transformations:

+
    +
  1. It begins with the Python AST (Abstract Syntax Tree), converting it into a more streamlined form using the ast2ast module.

  2. +
  3. Next, the streamlined AST is translated into boolean expressions as an intermediate step by the ast2logic module. +During this phase, boolean expressions are refined and optimized in preparation for the final transformation.

  4. +
  5. Finally, the compiler module takes these optimized boolean expressions and compiles them into a +quantum circuit.

  6. +
+

Unlike other libraries that translate individual operations into quantum circuits before combining them, +qlasskit constructs a single boolean expression for each output qubit of the entire function. +This unique approach facilitates advanced optimization leveraging boolean algebraic properties.

+

For instance, let assume we have the following function:

+
+
+
from qlasskit import qlassf, Qint2, Qint4
+from qiskit import QuantumCircuit
+
+
+@qlassf
+def f_comp(b: bool, n: Qint2) -> Qint2:
+    for i in range(3):
+        n += 1 if b else 2
+    return n
+
+
+
+
+

If we decompose the algorithm in 3 separate additions and we compile them separately, we obtain the following circuit:

+
+
+
@qlassf
+def f1(b: bool, n: Qint2) -> Qint2:
+    return n + (1 if b else 2)
+
+
+qc = QuantumCircuit(f_comp.num_qubits * 2 - 1)
+
+for i in range(3):
+    qc.barrier(label=f"it_{i}")
+    qc.append(f1.gate(), [0] + list(range(1 + i * 2, 5 + i * 2)))
+
+print("Operations:", qc.decompose().count_ops())
+qc.decompose().draw("mpl")
+
+
+
+
+
Operations: OrderedDict([('cx', 12), ('barrier', 3), ('x', 3), ('ccx', 3)])
+
+
+
/opt/hostedtoolcache/Python/3.10.13/x64/lib/python3.10/site-packages/qiskit/visualization/circuit/matplotlib.py:266: FutureWarning: The default matplotlib drawer scheme will be changed to "iqp" in a following release. To silence this warning, specify the current default explicitly as style="clifford", or the new default as style="iqp".
+  self._style, def_font_ratio = load_style(self._style)
+
+
+_images/b05e4f779a0b4670c648fd32d723f5b20c77402dfdbb9e21f6f2d293de8c4fa6.png +
+
+

While if we compile the whole function to a quantum circuit using qlasskit, we obtain the following quantum circuit:

+
+
+
qc = QuantumCircuit(f_comp.num_qubits)
+qc.append(f_comp.gate(), f_comp.qubits)
+
+print("Operations:", qc.decompose().count_ops())
+qc.decompose().draw("mpl")
+
+
+
+
+
Operations: OrderedDict([('cx', 7), ('x', 1), ('ccx', 1)])
+
+
+_images/491cb9b1407c5f41003d5da03c7ef3a35fa8acf294c42364e650599ca92ede80.png +
+
+

As we can see from the circuit drawings, qlasskit approach needs half the number of qubits and half the number of gates.

+
+

AST Traslator

+

Given a python function, the qlasskit.ast2logic module walks its syntax tree translating all the statements / +expressions to boolean expressions.

+

For instance, the following function:

+
+
+
@qlassf
+def f(n: Qint4) -> bool:
+    return n == 3
+
+
+
+
+

Is translated to this boolean expression:

+
+
+
print(f.expressions)
+
+
+
+
+
[(_ret, n.0 & n.1 & ~n.2 & ~n.3)]
+
+
+
+
+
+
+

Compiler

+

The boolean expressions are then being fed to the `qlasskit.compiler`` which compiles boolean expressions +to invertible circuits, introducing auxiliary qubits. In this step, the compiler will automatically uncompute +auxiliary qubits in order to reduce the number of qubits needed and the circuit footprint.

+

For the compilation, two backends are supported:

+
    +
  • InternalCompiler

  • +
  • Tweedledum.xag_synth

  • +
+
+
+

Result

+

The result of the compiler is a quantum circuit represented with qlasskit QCircuit. This circuit +can now be exported to one of the supported framework as a gate or as a standalone circuit.

+

The previous example function f, is translated to the following quantum circuit: the +result is available at qubit q6.

+
+
+
f.export().draw("mpl")
+
+
+
+
+_images/293285b423513d39c4a73e871f2211a526039c0ce9d988d5f7d9abe704adabc2.png +
+
+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 00000000..4ef379cd --- /dev/null +++ b/index.html @@ -0,0 +1,208 @@ + + + + + + + Qlasskit — qlasskit documentation + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Qlasskit

+

Qlasskit is a Python library that allows quantum developers to write classical algorithms in pure +Python and translate them into unitary operators (gates) for use in quantum circuits.

+ + +
+
+

Indices and tables

+ +
+
+

Cite

+
@software{qlasskit2023,
+  author = {Davide Gessa},
+  title = {qlasskit: a python-to-quantum circuit compiler},
+  url = {https://github.com/dakk/qlasskit},
+  year = {2023},
+}
+
+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/objects.inv b/objects.inv new file mode 100644 index 00000000..4785a519 Binary files /dev/null and b/objects.inv differ diff --git a/py-modindex.html b/py-modindex.html new file mode 100644 index 00000000..bd5eb9c2 --- /dev/null +++ b/py-modindex.html @@ -0,0 +1,153 @@ + + + + + + Python Module Index — qlasskit documentation + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + +
  • +
  • +
+
+
+
+
+ + +

Python Module Index

+ +
+ q +
+ + + + + + + + + + + + + +
 
+ q
+ qlasskit +
    + qlasskit.algorithms.qalgorithm +
    + qlasskit.qcircuit.gates +
+ + +
+
+
+ +
+ +
+

© Copyright 2023, Davide Gessa (dakk).

+
+ + Built with Sphinx using a + theme + provided by Read the Docs. + + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/quickstart.html b/quickstart.html new file mode 100644 index 00000000..4336af06 --- /dev/null +++ b/quickstart.html @@ -0,0 +1,202 @@ + + + + + + + Quickstart — qlasskit documentation + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Quickstart

+

First install qlasskit using pip.

+

pip install qlasskit

+

We now define a qlassf function that sums two numbers:

+
+
+
from qlasskit import qlassf, Qint2
+
+
+@qlassf
+def sum_two_numbers(a: Qint2, b: Qint2) -> Qint2:
+    return a + b
+
+
+
+
+

We can now export the resulting quantum circuit to any supported framework:

+
+
+
circuit = sum_two_numbers.export("qiskit")
+circuit.draw("mpl")
+
+
+
+
+
/opt/hostedtoolcache/Python/3.10.13/x64/lib/python3.10/site-packages/qiskit/visualization/circuit/matplotlib.py:266: FutureWarning: The default matplotlib drawer scheme will be changed to "iqp" in a following release. To silence this warning, specify the current default explicitly as style="clifford", or the new default as style="iqp".
+  self._style, def_font_ratio = load_style(self._style)
+
+
+_images/27a749800d923fb69b5d38e7722422621f8acf4ee5c2b6f517f89d74a936444a.png +
+
+

The qlassf function can be also exported as a gate, if the destination framwork supports it. We can use encode_input and decode_output in order to convert from/to high level types of qlasskit without worrying about the binary representation.

+
+
+
from qiskit import QuantumCircuit
+
+qc = QuantumCircuit(sum_two_numbers.num_qubits, len(sum_two_numbers.output_qubits))
+
+qc.initialize(
+    sum_two_numbers.encode_input(Qint2(1), Qint2(2)), sum_two_numbers.input_qubits
+)
+qc.append(sum_two_numbers.gate("qiskit"), sum_two_numbers.qubits)
+qc.measure(sum_two_numbers.output_qubits, range(len(sum_two_numbers.output_qubits)))
+qc.draw("mpl")
+
+
+
+
+_images/c11daf869c135eac3524304f0b40bd3d1ae514f73d769f0de4a9d577f9da51ba.png +
+
+
+
+
from qiskit import Aer, QuantumCircuit, transpile
+from qiskit.visualization import plot_histogram
+
+simulator = Aer.get_backend("aer_simulator")
+circ = transpile(qc, simulator)
+result = simulator.run(circ).result()
+counts = result.get_counts(circ)
+
+counts_readable = sum_two_numbers.decode_counts(counts)
+plot_histogram(counts_readable)
+
+
+
+
+_images/beafab15f915183b637909d537345580eba0f3a7fb66329311dd39909074d252.png +
+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/search.html b/search.html new file mode 100644 index 00000000..b47c9a49 --- /dev/null +++ b/search.html @@ -0,0 +1,143 @@ + + + + + + Search — qlasskit documentation + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + +
  • +
  • +
+
+
+
+
+ + + + +
+ +
+ +
+
+
+ +
+ +
+

© Copyright 2023, Davide Gessa (dakk).

+
+ + Built with Sphinx using a + theme + provided by Read the Docs. + + +
+
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/searchindex.js b/searchindex.js new file mode 100644 index 00000000..dc94279b --- /dev/null +++ b/searchindex.js @@ -0,0 +1 @@ +Search.setIndex({"docnames": ["algorithms", "api", "example_big_circuit", "example_deutsch_jozsa", "example_grover", "example_grover_factors", "example_grover_hash", "example_grover_subset", "example_grover_sudoku", "example_simon", "example_unitary_of_f", "exporter", "generated/qlasskit.algorithms.grover.Grover", "generated/qlasskit.algorithms.qalgorithm", "generated/qlasskit.qcircuit.gates", "generated/qlasskit.qcircuit.qcircuit.QCircuit", "generated/qlasskit.qcircuit.qcircuitwrapper.QCircuitWrapper", "generated/qlasskit.qlassfun.QlassF", "generated/qlasskit.qlassfun.qlassf", "generated/qlasskit.qlassfun.qlassfa", "how_it_works", "index", "quickstart", "supported"], "filenames": ["algorithms.rst", "api.rst", "example_big_circuit.ipynb", "example_deutsch_jozsa.ipynb", "example_grover.ipynb", "example_grover_factors.ipynb", "example_grover_hash.ipynb", "example_grover_subset.ipynb", "example_grover_sudoku.ipynb", "example_simon.ipynb", "example_unitary_of_f.ipynb", "exporter.ipynb", "generated/qlasskit.algorithms.grover.Grover.rst", "generated/qlasskit.algorithms.qalgorithm.rst", "generated/qlasskit.qcircuit.gates.rst", "generated/qlasskit.qcircuit.qcircuit.QCircuit.rst", "generated/qlasskit.qcircuit.qcircuitwrapper.QCircuitWrapper.rst", "generated/qlasskit.qlassfun.QlassF.rst", "generated/qlasskit.qlassfun.qlassf.rst", "generated/qlasskit.qlassfun.qlassfa.rst", "how_it_works.ipynb", "index.rst", "quickstart.ipynb", "supported.rst"], "titles": ["Algorithms", "API", "Working with big circuits", "Deutsch Jozsa algorithm", "Grover search", "Grover: factorize number", "Grover search: hash function preimage attack", "Grover search: subset problem", "Grover search: sudoku solver", "Simon function periodicity", "Unitary of qlasskit function", "Exporting to other frameworks", "qlasskit.algorithms.grover.Grover", "qlasskit.algorithms.qalgorithm", "qlasskit.qcircuit.gates", "qlasskit.qcircuit.qcircuit.QCircuit", "qlasskit.qcircuit.qcircuitwrapper.QCircuitWrapper", "qlasskit.qlassfun.QlassF", "qlasskit.qlassfun.qlassf", "qlasskit.qlassfun.qlassfa", "How it works", "Qlasskit", "Quickstart", "Supported python subset"], "terms": {"qlasskit": [0, 2, 3, 4, 5, 6, 7, 8, 9, 11, 20, 22, 23], "implement": [0, 11, 20], "high": [0, 4, 22], "level": [0, 4, 10, 22], "represent": [0, 22], "quantum": [0, 2, 4, 6, 7, 10, 15, 18, 20, 21, 22], "reli": 0, "black": 0, "box": 0, "function": [0, 4, 7, 12, 13, 14, 17, 18, 20, 21, 22], "oracl": [0, 4, 6, 7, 8, 12], "i": [2, 4, 6, 7, 8, 20, 21, 23], "capabl": [2, 8], "produc": [2, 4, 7], "larg": 2, "without": [2, 6, 8, 22], "ani": [2, 22, 23], "issu": 2, "The": [2, 3, 4, 5, 6, 8, 9, 11, 15, 20, 22, 23], "onli": [2, 23], "thing": 2, "you": [2, 23], "have": [2, 8, 20, 23], "do": 2, "us": [2, 4, 6, 7, 8, 10, 20, 21, 22], "fastoptim": 2, "sinc": [2, 6, 7, 8], "run": [2, 3, 4, 5, 6, 7, 8, 9, 22], "cse": 2, "too": 2, "slow": 2, "express": [2, 20, 21], "list": [2, 4, 7, 17, 18, 19, 20], "In": [2, 4, 6, 7, 8, 10, 20, 23], "next": [2, 20], "exampl": [2, 4, 6, 7, 8, 10, 20, 23], "we": [2, 4, 6, 7, 8, 10, 12, 20, 22], "ar": [2, 4, 6, 7, 8, 20, 23], "go": [2, 8], "creat": [2, 8, 18], "64": 2, "qint8": [2, 6, 23], "input": [2, 4, 6, 7, 18], "one": [2, 20], "output": [2, 4, 6, 7, 20], "result": [2, 3, 4, 5, 6, 7, 8, 9, 10, 21, 22], "21984": 2, "qubit": [2, 8, 10, 15, 18, 20, 22, 23], "1044": 2, "gate": [2, 8, 10, 11, 20, 21, 22, 23], "around": 2, "5": [2, 5, 6, 7, 20], "second": 2, "from": [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 20, 22], "import": [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 20, 22, 23], "qlist": [2, 4, 6, 23], "boolopt": [2, 18, 19], "qlassfa": [2, 21], "bool_optim": [2, 18, 19], "def": [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 18, 19, 20, 22], "test": 2, "a_list": [2, 4], "h_val": 2, "0": [2, 5, 6, 7, 8, 10, 11, 15, 20, 23], "c": [2, 8, 23], "return": [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 17, 20, 22], "print": [2, 6, 8, 10, 11, 20, 23], "qcircuit": [2, 8, 20, 21], "qlassf": [3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 19, 20, 21, 22, 23], "qint4": [3, 6, 8, 9, 20, 23], "f": [3, 9, 10, 12, 18, 20, 23], "bool": [3, 4, 5, 8, 10, 11, 12, 18, 19, 20], "7": [3, 7, 20], "export": [3, 4, 5, 6, 7, 8, 9, 20, 21, 22], "qiskit": [3, 4, 5, 6, 7, 8, 9, 10, 20, 21, 22], "draw": [3, 4, 5, 6, 9, 10, 11, 20, 22], "mpl": [3, 4, 5, 6, 9, 10, 11, 20, 22], "opt": [3, 4, 5, 6, 9, 11, 20, 22], "hostedtoolcach": [3, 4, 5, 6, 9, 11, 20, 22], "python": [3, 4, 5, 6, 9, 11, 20, 21, 22], "3": [3, 4, 5, 6, 7, 8, 9, 10, 11, 20, 22, 23], "10": [3, 4, 5, 6, 9, 11, 20, 22], "13": [3, 4, 5, 6, 9, 11, 20, 22, 23], "x64": [3, 4, 5, 6, 9, 11, 20, 22], "lib": [3, 4, 5, 6, 9, 11, 20, 22], "python3": [3, 4, 5, 6, 9, 11, 20, 22], "site": [3, 4, 5, 6, 9, 11, 20, 22], "packag": [3, 4, 5, 6, 9, 11, 20, 22], "visual": [3, 4, 5, 6, 7, 8, 9, 10, 11, 20, 22], "circuit": [3, 4, 5, 6, 8, 9, 10, 11, 15, 18, 20, 21, 22, 23], "matplotlib": [3, 4, 5, 6, 9, 11, 20, 22], "py": [3, 4, 5, 6, 9, 11, 20, 22], "266": [3, 4, 5, 6, 9, 11, 20, 22], "futurewarn": [3, 4, 5, 6, 9, 11, 20, 22], "default": [3, 4, 5, 6, 9, 11, 12, 15, 18, 20, 22], "drawer": [3, 4, 5, 6, 9, 11, 20, 22], "scheme": [3, 4, 5, 6, 9, 11, 20, 22], "chang": [3, 4, 5, 6, 9, 11, 20, 22], "iqp": [3, 4, 5, 6, 9, 11, 20, 22], "follow": [3, 4, 5, 6, 8, 9, 11, 20, 22, 23], "releas": [3, 4, 5, 6, 9, 11, 20, 22], "To": [3, 4, 5, 6, 9, 11, 20, 22], "silenc": [3, 4, 5, 6, 9, 11, 20, 22], "thi": [3, 4, 5, 6, 7, 8, 9, 10, 11, 20, 22, 23], "warn": [3, 4, 5, 6, 9, 11, 20, 22], "specifi": [3, 4, 5, 6, 9, 11, 20, 22], "current": [3, 4, 5, 6, 9, 11, 20, 22], "explicitli": [3, 4, 5, 6, 9, 11, 20, 22], "style": [3, 4, 5, 6, 9, 11, 20, 22], "clifford": [3, 4, 5, 6, 9, 11, 20, 22], "new": [3, 4, 5, 6, 9, 11, 20, 22], "self": [3, 4, 5, 6, 9, 11, 20, 22], "_style": [3, 4, 5, 6, 9, 11, 20, 22], "def_font_ratio": [3, 4, 5, 6, 9, 11, 20, 22], "load_styl": [3, 4, 5, 6, 9, 11, 20, 22], "deutschjozsa": 3, "q_algo": [3, 4, 5, 6, 7, 8, 9], "qc": [3, 4, 5, 6, 7, 8, 9, 10, 11, 15, 20, 22], "aer": [3, 4, 5, 6, 7, 8, 9, 22], "quantumcircuit": [3, 4, 5, 6, 7, 8, 9, 10, 20, 22], "transpil": [3, 4, 5, 6, 7, 8, 9, 10, 22], "plot_histogram": [3, 4, 5, 6, 7, 8, 9, 22], "measure_al": [3, 4, 5, 6, 7, 8, 9], "simul": [3, 4, 5, 6, 7, 8, 9, 10, 22], "get_backend": [3, 4, 5, 6, 7, 8, 9, 22], "aer_simul": [3, 4, 5, 6, 7, 8, 9, 22], "circ": [3, 4, 5, 6, 7, 8, 9, 22], "count": [3, 4, 5, 6, 7, 8, 9, 22], "get_count": [3, 4, 5, 6, 7, 8, 9, 22], "counts_read": [3, 4, 5, 6, 7, 8, 9, 22], "decode_count": [3, 4, 5, 6, 7, 8, 9, 22], "offer": 4, "class": [4, 12, 13, 14, 15, 16, 17], "easili": 4, "perform": [4, 6, 10], "over": 4, "first": [4, 22], "defin": [4, 7, 22], "name": [4, 7, 15, 17], "and_al": 4, "true": [4, 8, 12, 18, 19, 23], "iff": 4, "all": [4, 20, 23], "element": [4, 7, 8, 12], "an": [4, 6, 7, 8, 20], "want": [4, 7, 8, 12], "find": [4, 6, 7], "valu": [4, 6, 7, 8, 12, 23], "led": [4, 7], "qint2": [4, 5, 7, 8, 11, 20, 22, 23], "4": [4, 6, 8, 11, 12, 23], "r": [4, 8], "compil": [4, 18, 19, 21, 23], "optim": [4, 18, 20], "given": [4, 7, 20], "now": [4, 6, 7, 20, 22], "can": [4, 6, 8, 10, 20, 22], "our": [4, 6, 7, 8, 10, 12], "For": [4, 7, 20], "instanc": [4, 7, 20], "yeld": 4, "algorithm": [4, 5, 6, 7, 8, 9, 20, 21], "prepar": [4, 20], "Then": [4, 6, 7, 8], "prefer": [4, 6, 7, 8], "framework": [4, 6, 7, 8, 10, 20, 21, 22], "sampl": [4, 6, 7, 8], "along": 4, "wrapper": [4, 16], "provid": 4, "util": [4, 23], "encod": [4, 8], "decod": 4, "type": [4, 5, 7, 18, 19, 21, 22], "definit": 4, "histogram": [4, 7], "": [4, 7, 23], "evid": [4, 7], "lead": [4, 7, 23], "where": [4, 8], "set": [4, 7], "align": [4, 7], "expect": [4, 7, 12], "tupl": [5, 6, 7, 17], "1": [5, 6, 7, 8, 9, 10, 11, 12, 20, 22, 23], "9": 5, "discard_low": [5, 6, 8], "ever": 6, "evolv": 6, "landscap": 6, "cybersecur": 6, "advent": 6, "comput": 6, "present": [6, 23], "both": 6, "extraordinari": 6, "opportun": 6, "unpreced": 6, "challeng": 6, "notebook": 6, "exploit": [6, 10], "toi": [6, 8], "A": 6, "cryptograph": 6, "h": [6, 23], "m": [6, 8, 23], "tri": 6, "messag": 6, "ha": [6, 23], "specif": [6, 8], "easi": 6, "write": [6, 21], "like": 6, "hash_simp": 6, "2": [6, 7, 8, 11, 20, 22, 23], "hv": 6, "0xff": 6, "thank": 6, "fact": 6, "standard": 6, "call": 6, "original_f": [6, 17], "some": 6, "kind": 6, "analysi": 6, "space": 6, "tini": 6, "detect": 6, "uniform": 6, "map": 6, "equal": [6, 8], "collect": 6, "counter": 6, "d": [6, 23], "hex": 6, "x": [6, 12, 20], "y": [6, 12], "rang": [6, 8, 20, 22, 23], "len": [6, 22, 23], "256": 6, "got": 6, "distribut": 6, "order": [6, 10, 20, 22], "which": [6, 7, 20], "0xca": 6, "doubl": 6, "check": [6, 8], "invok": 6, "12": [6, 20, 23], "must": [6, 8], "subset_sum": 7, "j": 7, "sum": [7, 8, 22, 23], "l": 7, "combin": [7, 20], "qint3": 7, "ii": 7, "els": [7, 11, 20], "here": 7, "know": 7, "least": 7, "two": [7, 20, 22], "n_match": [7, 12], "solv": 8, "puzzl": 8, "few": 8, "cannot": 8, "real": 8, "9x9": 8, "2x2": 8, "matrix": [8, 10], "valid": 8, "solut": 8, "when": 8, "everi": 8, "row": 8, "column": 8, "repeat": 8, "xor": 8, "ing": 8, "each": [8, 20, 23], "add": 8, "constraint": 8, "constr": 8, "sudoku_check": 8, "alreadi": 8, "so": 8, "time": [8, 23], "instanti": 8, "qmatrix": [8, 23], "sub0": 8, "sub1": 8, "sub2": 8, "sub3": 8, "obtain": [8, 10, 20], "fals": 8, "20": 8, "more": [8, 20], "realist": 8, "game": 8, "number": [8, 12, 15, 20, 22, 23], "instead": 8, "boolean": [8, 17, 18, 20], "resourc": 8, "requir": 8, "scale": 8, "exponenti": 8, "code": [8, 18, 20], "snippet": 8, "recreat": 8, "4x4": 8, "6": 8, "As": [8, 20], "see": [8, 20], "checker": 8, "than": 8, "100": 8, "wai": 8, "abov": 8, "re": 8, "1309": 8, "178": 8, "extern": 10, "low": 10, "oper": [10, 20, 21], "execut": 10, "qiskit_a": 10, "aersimul": 10, "array_to_latex": 10, "b": [10, 11, 20, 22, 23], "n": [10, 12, 20, 23], "num_qubit": [10, 15, 20, 22], "append": [10, 20, 22], "save_st": 10, "decompos": [10, 20], "_ret": [10, 11, 20], "method": [10, 12, 15, 16, 17], "job": 10, "shot": 10, "8192": 10, "get_unitari": 10, "max_siz": 10, "16": 10, "begin": [10, 20], "bmatrix": 10, "end": 10, "hello_world": 11, "openqasm": 11, "cx": [11, 20, 23], "ccx": [11, 20], "qml": 11, "tape": 11, "quantumtap": 11, "wire": 11, "param": [11, 23], "displaystyl": 11, "c_": 11, "left": 11, "x_": 11, "right": 11, "text": 11, "cnot": 11, "_": 11, "00000": 11, "rangl": 11, "element_to_search": 12, "qtype": [12, 18, 19], "none": [12, 15], "n_iter": 12, "int": [12, 15], "__init__": [12, 15, 16, 17], "paramet": [12, 15, 18, 19], "satisfi": 12, "gener": 12, "compar": 12, "option": [12, 15, 18, 23], "search": [12, 21], "forc": 12, "iter": [12, 23], "otherwis": 12, "pi": 12, "sqrt": 12, "match": 12, "attribut": [12, 15, 16, 17], "except": 13, "nativ": 15, "initi": [15, 22], "interfac": 16, "contain": [16, 23], "str": [17, 18], "callabl": [17, 18], "arg": 17, "exp": 17, "symbol": 17, "repres": [17, 20], "to_compil": [18, 19], "liter": [18, 19], "intern": [18, 19], "recompil": [18, 19], "tweedledum": [18, 19, 20], "booloptimizerprofil": [18, 19], "object": [18, 19], "uncomput": [18, 19, 20], "decor": [18, 19], "union": 18, "pars": 18, "inject": 18, "supportedcompil": 18, "overrid": 18, "defaultoptim": 18, "whenev": 18, "dure": [18, 20, 23], "convert": [20, 22], "seri": 20, "transform": 20, "It": [20, 23], "abstract": 20, "syntax": 20, "tree": 20, "streamlin": 20, "form": 20, "ast2ast": 20, "modul": [20, 21, 23], "translat": [20, 21], "intermedi": 20, "step": 20, "ast2log": 20, "phase": 20, "refin": 20, "final": 20, "take": 20, "them": [20, 21], "unlik": 20, "other": [20, 21], "librari": [20, 21], "individu": 20, "befor": 20, "construct": 20, "singl": [20, 23], "entir": 20, "uniqu": 20, "approach": 20, "facilit": 20, "advanc": 20, "leverag": 20, "algebra": 20, "properti": 20, "let": 20, "assum": 20, "f_comp": 20, "If": 20, "separ": 20, "addit": 20, "f1": 20, "barrier": 20, "label": 20, "it_": 20, "count_op": 20, "ordereddict": 20, "while": 20, "whole": 20, "need": 20, "half": 20, "walk": 20, "its": [20, 23], "statement": [20, 21], "being": 20, "fed": 20, "invert": 20, "introduc": 20, "auxiliari": 20, "automat": 20, "reduc": 20, "footprint": 20, "backend": 20, "support": [20, 21, 22], "internalcompil": 20, "xag_synth": 20, "standalon": 20, "previou": 20, "avail": 20, "q6": 20, "allow": 21, "develop": 21, "classic": 21, "pure": 21, "unitari": 21, "quickstart": 21, "how": 21, "work": [21, 23], "ast": 21, "traslat": 21, "subset": 21, "hybrid": 21, "grover": 21, "simon": 21, "period": 21, "deutsch": 21, "jozsa": 21, "qasm": 21, "cirq": 21, "pennylan": 21, "sympi": 21, "api": 21, "qlassfun": 21, "qalgorithm": 21, "qcircuitwrapp": 21, "problem": 21, "hash": 21, "preimag": 21, "attack": 21, "sudoku": 21, "solver": 21, "big": 21, "index": 21, "page": 21, "softwar": 21, "qlasskit2023": 21, "author": 21, "david": 21, "gessa": 21, "titl": 21, "url": 21, "http": 21, "github": 21, "com": 21, "dakk": 21, "year": 21, "2023": 21, "instal": 22, "pip": 22, "sum_two_numb": 22, "also": 22, "destin": 22, "framwork": 22, "encode_input": 22, "decode_output": 22, "worri": 22, "about": 22, "binari": 22, "output_qubit": 22, "input_qubit": 22, "measur": 22, "expand": 23, "limit": 23, "linear": 23, "structur": 23, "pattern": 23, "static": 23, "unsign": 23, "integ": 23, "subtyp": 23, "differ": 23, "qint12": 23, "qint16": 23, "bit": 23, "access": 23, "hold": 23, "t": 23, "denot": 23, "42": 23, "modulo": 23, "bultin": 23, "debug": 23, "ignor": 23, "convers": 23, "length": 23, "max": 23, "min": 23, "elemnt": 23, "pleas": 23, "note": 23, "unrol": 23, "therefor": 23, "essenti": 23, "known": 23, "cond": 23, "At": 23, "design": 23, "branch": 23, "bodi": 23, "exclus": 23, "through": 23, "q": 23, "keep": 23, "mind": 23, "incorpor": 23, "within": 23, "exhibit": 23, "distinct": 23, "behavior": 23, "counterpart": 23, "bell": 23}, "objects": {"qlasskit.algorithms.grover": [[12, 0, 1, "", "Grover"]], "qlasskit.algorithms.grover.Grover": [[12, 1, 1, "", "__init__"]], "qlasskit.algorithms": [[13, 2, 0, "-", "qalgorithm"]], "qlasskit.qcircuit": [[14, 2, 0, "-", "gates"]], "qlasskit.qcircuit.qcircuit": [[15, 0, 1, "", "QCircuit"]], "qlasskit.qcircuit.qcircuit.QCircuit": [[15, 1, 1, "", "__init__"]], "qlasskit.qcircuit.qcircuitwrapper": [[16, 0, 1, "", "QCircuitWrapper"]], "qlasskit.qcircuit.qcircuitwrapper.QCircuitWrapper": [[16, 1, 1, "", "__init__"]], "qlasskit.qlassfun": [[17, 0, 1, "", "QlassF"], [18, 3, 1, "", "qlassf"], [19, 3, 1, "", "qlassfa"]], "qlasskit.qlassfun.QlassF": [[17, 1, 1, "", "__init__"]]}, "objtypes": {"0": "py:class", "1": "py:method", "2": "py:module", "3": "py:function"}, "objnames": {"0": ["py", "class", "Python class"], "1": ["py", "method", "Python method"], "2": ["py", "module", "Python module"], "3": ["py", "function", "Python function"]}, "titleterms": {"algorithm": [0, 3, 12, 13], "grover": [0, 4, 5, 6, 7, 8, 12], "search": [0, 4, 6, 7, 8], "simon": [0, 9], "period": [0, 9], "deutsch": [0, 3], "jozsa": [0, 3], "api": 1, "work": [2, 20], "big": 2, "circuit": 2, "factor": 5, "number": 5, "hash": 6, "function": [6, 9, 10, 23], "preimag": 6, "attack": 6, "subset": [7, 23], "problem": 7, "sudoku": 8, "solver": 8, "unitari": 10, "qlasskit": [10, 12, 13, 14, 15, 16, 17, 18, 19, 21], "export": 11, "other": 11, "framework": 11, "qiskit": 11, "qasm": 11, "cirq": 11, "pennylan": 11, "sympi": 11, "qalgorithm": 13, "qcircuit": [14, 15, 16], "gate": 14, "qcircuitwrapp": 16, "qlassfun": [17, 18, 19], "qlassf": [17, 18], "qlassfa": 19, "how": 20, "ast": 20, "traslat": 20, "compil": 20, "result": 20, "exampl": 21, "indic": 21, "tabl": 21, "cite": 21, "quickstart": 22, "support": 23, "python": 23, "type": 23, "bool": 23, "qint": 23, "tupl": 23, "list": 23, "matrix": 23, "express": 23, "constant": 23, "fix": 23, "size": 23, "2d": 23, "subscript": 23, "boolean": 23, "oper": 23, "If": 23, "compar": 23, "unari": 23, "op": 23, "bin": 23, "call": 23, "statement": 23, "assign": 23, "return": 23, "For": 23, "loop": 23, "def": 23, "els": 23, "quantum": 23, "hybrid": 23}, "envversion": {"sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx": 60}, "alltitles": {"Algorithms": [[0, "algorithms"]], "Grover search": [[0, "grover-search"], [4, "grover-search"]], "Simon periodicity": [[0, "simon-periodicity"]], "Deutsch Jozsa": [[0, "deutsch-jozsa"]], "API": [[1, "api"]], "Working with big circuits": [[2, "working-with-big-circuits"]], "Deutsch Jozsa algorithm": [[3, "deutsch-jozsa-algorithm"]], "Grover: factorize number": [[5, "grover-factorize-number"]], "Grover search: hash function preimage attack": [[6, "grover-search-hash-function-preimage-attack"]], "Grover search: subset problem": [[7, "grover-search-subset-problem"]], "Grover search: sudoku solver": [[8, "grover-search-sudoku-solver"]], "Simon function periodicity": [[9, "simon-function-periodicity"]], "Unitary of qlasskit function": [[10, "unitary-of-qlasskit-function"]], "Exporting to other frameworks": [[11, "exporting-to-other-frameworks"]], "Qiskit": [[11, "qiskit"]], "QASM": [[11, "qasm"]], "Cirq": [[11, "cirq"]], "Pennylane": [[11, "pennylane"]], "Sympy": [[11, "sympy"]], "qlasskit.algorithms.grover.Grover": [[12, "qlasskit-algorithms-grover-grover"]], "qlasskit.algorithms.qalgorithm": [[13, "module-qlasskit.algorithms.qalgorithm"]], "qlasskit.qcircuit.gates": [[14, "module-qlasskit.qcircuit.gates"]], "qlasskit.qcircuit.qcircuit.QCircuit": [[15, "qlasskit-qcircuit-qcircuit-qcircuit"]], "qlasskit.qcircuit.qcircuitwrapper.QCircuitWrapper": [[16, "qlasskit-qcircuit-qcircuitwrapper-qcircuitwrapper"]], "qlasskit.qlassfun.QlassF": [[17, "qlasskit-qlassfun-qlassf"]], "qlasskit.qlassfun.qlassf": [[18, "qlasskit-qlassfun-qlassf"]], "qlasskit.qlassfun.qlassfa": [[19, "qlasskit-qlassfun-qlassfa"]], "How it works": [[20, "how-it-works"]], "AST Traslator": [[20, "ast-traslator"]], "Compiler": [[20, "compiler"]], "Result": [[20, "result"]], "Qlasskit": [[21, "qlasskit"], [21, null]], "Examples": [[21, null]], "Indices and tables": [[21, "indices-and-tables"]], "Cite": [[21, "cite"]], "Quickstart": [[22, "quickstart"]], "Supported python subset": [[23, "supported-python-subset"]], "Types": [[23, "types"]], "bool": [[23, "bool"]], "Qint": [[23, "qint"]], "Tuple": [[23, "tuple"], [23, "id1"]], "List": [[23, "list"]], "Matrix": [[23, "matrix"]], "Expressions": [[23, "expressions"]], "Constants": [[23, "constants"]], "List (fixed size)": [[23, "list-fixed-size"]], "2D Matrix (fixed size)": [[23, "d-matrix-fixed-size"]], "Subscript": [[23, "subscript"]], "Boolean operators": [[23, "boolean-operators"]], "If expressions": [[23, "if-expressions"]], "Comparators": [[23, "comparators"]], "Unary Op": [[23, "unary-op"]], "Bin Op": [[23, "bin-op"]], "Function call": [[23, "function-call"]], "Statements": [[23, "statements"]], "Assign": [[23, "assign"]], "Return": [[23, "return"]], "For loop": [[23, "for-loop"]], "Function def": [[23, "function-def"]], "If then else": [[23, "if-then-else"]], "Quantum Hybrid": [[23, "quantum-hybrid"]]}, "indexentries": {"grover (class in qlasskit.algorithms.grover)": [[12, "qlasskit.algorithms.grover.Grover"]], "__init__() (qlasskit.algorithms.grover.grover method)": [[12, "qlasskit.algorithms.grover.Grover.__init__"]], "module": [[13, "module-qlasskit.algorithms.qalgorithm"], [14, "module-qlasskit.qcircuit.gates"]], "qlasskit.algorithms.qalgorithm": [[13, "module-qlasskit.algorithms.qalgorithm"]], "qlasskit.qcircuit.gates": [[14, "module-qlasskit.qcircuit.gates"]], "qcircuit (class in qlasskit.qcircuit.qcircuit)": [[15, "qlasskit.qcircuit.qcircuit.QCircuit"]], "__init__() (qlasskit.qcircuit.qcircuit.qcircuit method)": [[15, "qlasskit.qcircuit.qcircuit.QCircuit.__init__"]], "qcircuitwrapper (class in qlasskit.qcircuit.qcircuitwrapper)": [[16, "qlasskit.qcircuit.qcircuitwrapper.QCircuitWrapper"]], "__init__() (qlasskit.qcircuit.qcircuitwrapper.qcircuitwrapper method)": [[16, "qlasskit.qcircuit.qcircuitwrapper.QCircuitWrapper.__init__"]], "qlassf (class in qlasskit.qlassfun)": [[17, "qlasskit.qlassfun.QlassF"]], "__init__() (qlasskit.qlassfun.qlassf method)": [[17, "qlasskit.qlassfun.QlassF.__init__"]], "qlassf() (in module qlasskit.qlassfun)": [[18, "qlasskit.qlassfun.qlassf"]], "qlassfa() (in module qlasskit.qlassfun)": [[19, "qlasskit.qlassfun.qlassfa"]]}}) \ No newline at end of file diff --git a/supported.html b/supported.html new file mode 100644 index 00000000..3edf77d3 --- /dev/null +++ b/supported.html @@ -0,0 +1,364 @@ + + + + + + + Supported python subset — qlasskit documentation + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Supported python subset

+

Qlasskit supports a subset of python. This subset will be expanded, but it is +limited by the linearity of quantum circuits and by the number of qubits.

+

The structure of a qlasskit function has the following pattern:

+
@qlasskit
+def f(param: type, [...param: type]) -> type:
+   statement
+   ...
+   statement
+
+
+
+

Types

+

All types has a static size.

+
+

bool

+

Boolean type.

+
+
+

Qint

+

Unsigned integers; this type has subtypes for different Qint sizes (Qint2, Qint4, Qint8, Qint12, Qint16). +Single bit of the Qint are accessible by the subscript operator [].

+
+
+

Tuple

+

Container type holding different types.

+
+
+

List

+

Qlist[T, size] denotes a fixed-size list in qlasskit. +For example, the list [1,2,3] is typed as Qlist[Qint2,3].

+
+
+

Matrix

+

Qmatrix[T, m, n] denotes a fixed-size list in qlasskit. +For example, the matrix [[1,2],[3,4]] is typed as Qmatrix[Qint2,2,2].

+
+
+
+

Expressions

+
+

Constants

+
True
+
+
+
42
+
+
+
+
+

Tuple

+
(a, b)
+
+
+
+
+

List (fixed size)

+
[a, b]
+
+
+
+
+

2D Matrix (fixed size)

+
[[a, b], [c,d]]
+
+
+
+
+

Subscript

+
a[0]
+
+
+
+
+

Boolean operators

+
not a
+
+
+
a and b
+
+
+
a or b
+
+
+
+
+

If expressions

+
a if b else c
+
+
+
+
+

Comparators

+
a > b or b <= c and c == d or c != a
+
+
+
+
+

Unary Op

+
~a
+
+
+
+
+

Bin Op

+
a << 1
+
+
+
a >> 2
+
+
+
a + b
+
+
+
a - b
+
+
+
a * b
+
+
+
a % 2
+
+
+
+

Note

+

Modulo operator only works with 2^n values.

+
+
+
+

Function call

+

Bultin functions: +- print(): debug function, ignore by conversion +- len(Tuple), len(Qlist)`: returns the length of a tuple +- max(a, b, …), max(Tuple), max(Qlist): returns the max of a tuple +- min(a, b, …), min(Tuple), min(Qlist): returns the min of a tuple +- sum(Tuple), sum(Qlist): returns the sum of the elemnts of a tuple / list +- all(Tuple), all(Qlist): returns True if all of the elemnts are True +- any(Tuple), any(Qlist): returns True if any of the elemnts are True

+
+
+
+

Statements

+
+

Assign

+
c = not a
+
+
+
+
+

Return

+
return b+1
+
+
+
+
+

For loop

+
for i in range(4):
+   a += i
+
+
+
+

Note

+

Please note that in qlasskit, for loops are unrolled during compilation. Therefore, +it is essential that the number of iterations for each for loop is known at the +time of compilation.

+
+
+
+

Function def

+
def f(t: Qlist[Qint4,2]) -> Qint4:
+   return t[0] + t[1]
+
+
+
+
+

If then else

+
c = 0
+if cond:
+   c += 12
+else:
+   c += 13
+
+
+
+

Note

+

At present, the if-then-else statement in qlasskit is designed to support branch bodies +that exclusively contain assignment statements.

+
+
+
+
+

Quantum Hybrid

+

In a qlassf function, you have the option to utilize quantum gates through the Q module. It’s +important to keep in mind that incorporating quantum gates within a qlasskit function leads +to a Python function that exhibits distinct behaviors compared to its quantum counterpart.

+
def bell(a: bool, b: bool) -> bool:
+   return Q.CX(Q.H(a), b)
+
+
+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file