{ "cells": [ { "cell_type": "markdown", "metadata": { "nbpages": { "level": 0, "link": "[](https://jckantor.github.io/CBE30338/A.02-Modular-Approach-to-Simulation-using-Python-Generators.html)", "section": "" } }, "source": [ "\n", "*This notebook contains material from [CBE30338](https://jckantor.github.io/CBE30338);\n", "content is available [on Github](https://github.com/jckantor/CBE30338.git).*\n" ] }, { "cell_type": "markdown", "metadata": { "nbpages": { "level": 0, "link": "[](https://jckantor.github.io/CBE30338/A.02-Modular-Approach-to-Simulation-using-Python-Generators.html)", "section": "" } }, "source": [ "\n", "< [A.1 Python Library for CBE 30338](https://jckantor.github.io/CBE30338/A.01-Python-Library-for-CBE30338.html) | [Contents](toc.html) | [Tag Index](tag_index.html) | [A.3 Animation in Jupyter Notebooks](https://jckantor.github.io/CBE30338/A.03-Animation-in-Jupyter-Notebooks.html) >

\"Open

\"Download\"" ] }, { "cell_type": "markdown", "metadata": { "nbpages": { "level": 1, "link": "[A.2 Modular Simulation using Python Generators](https://jckantor.github.io/CBE30338/A.02-Modular-Approach-to-Simulation-using-Python-Generators.html#A.2-Modular-Simulation-using-Python-Generators)", "section": "A.2 Modular Simulation using Python Generators" } }, "source": [ "# A.2 Modular Simulation using Python Generators\n", "\n", "This notebook show how to use Python generators for creating system simulation. This technique implements simulation blocks as Python generators, then pieces blocks together to create more complex systems. This is an advanced technique that may be useful in control projects and a convenient alternative to block diagram simulators." ] }, { "cell_type": "markdown", "metadata": { "nbpages": { "level": 2, "link": "[A.2.1 Simulation using scipy.integrate.odeint()](https://jckantor.github.io/CBE30338/A.02-Modular-Approach-to-Simulation-using-Python-Generators.html#A.2.1-Simulation-using-scipy.integrate.odeint())", "section": "A.2.1 Simulation using scipy.integrate.odeint()" } }, "source": [ "## A.2.1 Simulation using scipy.integrate.odeint()" ] }, { "cell_type": "markdown", "metadata": { "nbpages": { "level": 3, "link": "[A.2.1.1 Typical Usage](https://jckantor.github.io/CBE30338/A.02-Modular-Approach-to-Simulation-using-Python-Generators.html#A.2.1.1-Typical-Usage)", "section": "A.2.1.1 Typical Usage" } }, "source": [ "### A.2.1.1 Typical Usage\n", "\n", "The SciPy library provides a convenient and familiar means of simulating systems modeled by systems of ordinary differential equations. As demonstrated in other notebooks, the straightforward approach consists of several common steps\n", "\n", "1. Initialize graphics and import libraries\n", "2. Fix parameter values\n", "3. Write a function to evaluate RHS of the differential equations\n", "4. Choose initial conditions and time grid\n", "5. Perform the simulation by numerical solution of the differential equations\n", "6. Prepare visualizations and post-processing\n", "\n", "Here we demonstrate this approach for a two gravity-drained tanks connected in series with constant inflow." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "nbpages": { "level": 3, "link": "[A.2.1.1 Typical Usage](https://jckantor.github.io/CBE30338/A.02-Modular-Approach-to-Simulation-using-Python-Generators.html#A.2.1.1-Typical-Usage)", "section": "A.2.1.1 Typical Usage" } }, "outputs": [ { "data": { "image/png": "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\nScEYY0yT/w/LWN3tD38gFwAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# 1. Initialize graphics and import libraries\n", "%matplotlib inline\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "from scipy.integrate import odeint\n", "\n", "# 2. Fix parameter values\n", "A = 0.2\n", "Cv = 0.5\n", "qin = 0.4\n", "\n", "# 3. Write a function to evaluate RHS of the differential equations\n", "def deriv(X,t,qin=0):\n", " h1,h2 = X\n", " dh1 = (qin - Cv*np.sqrt(h1))/A\n", " dh2 = (Cv*np.sqrt(h1) - Cv*np.sqrt(h2))/A \n", " return [dh1,dh2]\n", "\n", "# 4. Choose initial conditions and time grid\n", "IC = [0,0]\n", "t = np.linspace(0,8,500)\n", "\n", "# 5. Perform the simulation by numerical solution of the differential equations\n", "sol = odeint(deriv,IC,t,args=(qin,))\n", "\n", "# 6. Prepare visualizations and post-processing\n", "plt.plot(t,sol)\n", "plt.legend(['Tank 1','Tank 2'])\n", "plt.xlabel('Time')\n", "plt.ylabel('Height [m]')\n", "plt.title('Simulation of Two Gravity-Drained Tanks in Series')\n", "plt.grid()" ] }, { "cell_type": "markdown", "metadata": { "nbpages": { "level": 2, "link": "[A.2.2 What's Wrong with That?](https://jckantor.github.io/CBE30338/A.02-Modular-Approach-to-Simulation-using-Python-Generators.html#A.2.2-What's-Wrong-with-That?)", "section": "A.2.2 What's Wrong with That?" } }, "source": [ "## A.2.2 What's Wrong with That?\n", "\n", "If direct simulation as outlined above meets the needs of your project, then be satisfied and move on. This is how these tools are intended to be used.\n", "\n", "However, as written above, simulation with scipy.integrate.odeint requires you to write a function that calculates the right hand side of a system of differential equations. This can be challenging for complex system. For example, you may have multiple PID controllers, each implementing logic for anti-reset windup. Or you may have components in the process that exhibit hysterisis, time-delay, or other difficult-to-model dynamics. These cases call for a more modular approach to modeling and simulation.\n", "\n", "In these cases we'd like to combine the continous time dynamics modeled by differential equations with more complex logic executed at discrete points in the time." ] }, { "cell_type": "markdown", "metadata": { "nbpages": { "level": 2, "link": "[A.2.3 Python Generators](https://jckantor.github.io/CBE30338/A.02-Modular-Approach-to-Simulation-using-Python-Generators.html#A.2.3-Python-Generators)", "section": "A.2.3 Python Generators" } }, "source": [ "## A.2.3 Python Generators" ] }, { "cell_type": "markdown", "metadata": { "nbpages": { "level": 3, "link": "[A.2.3.1 Yield Statement](https://jckantor.github.io/CBE30338/A.02-Modular-Approach-to-Simulation-using-Python-Generators.html#A.2.3.1-Yield-Statement)", "section": "A.2.3.1 Yield Statement" } }, "source": [ "### A.2.3.1 Yield Statement\n", "\n", "One of the more advanced and often overlooked features of Python is the use of [generators and iterators](http://nvie.com/posts/iterators-vs-generators/) for performing operations on sequences of information. In particular, a generator is a function that returns information to via the `yield` statement rather then the more commonly encountered return statement. When called again, the generator picks right up at the point of the yield statement.\n", "\n", "Let's demonsrate this by writing a generator of Fibonacci numbers. This generator returns all Fibonacci numbers less or equal to a given number $n$." ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": true, "nbpages": { "level": 3, "link": "[A.2.3.1 Yield Statement](https://jckantor.github.io/CBE30338/A.02-Modular-Approach-to-Simulation-using-Python-Generators.html#A.2.3.1-Yield-Statement)", "section": "A.2.3.1 Yield Statement" } }, "outputs": [], "source": [ "def fib(n):\n", " i = 0\n", " j = 1\n", " while j <= n:\n", " yield j\n", " i,j = j,i+j" ] }, { "cell_type": "markdown", "metadata": { "nbpages": { "level": 3, "link": "[A.2.3.1 Yield Statement](https://jckantor.github.io/CBE30338/A.02-Modular-Approach-to-Simulation-using-Python-Generators.html#A.2.3.1-Yield-Statement)", "section": "A.2.3.1 Yield Statement" } }, "source": [ "Here's a typical usage. What are the Fibonacci numbers less than or equal to 100?" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "nbpages": { "level": 3, "link": "[A.2.3.1 Yield Statement](https://jckantor.github.io/CBE30338/A.02-Modular-Approach-to-Simulation-using-Python-Generators.html#A.2.3.1-Yield-Statement)", "section": "A.2.3.1 Yield Statement" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1\n", "1\n", "2\n", "3\n", "5\n", "8\n", "13\n", "21\n", "34\n", "55\n", "89\n" ] } ], "source": [ "for k in fib(100):\n", " print(k)" ] }, { "cell_type": "markdown", "metadata": { "nbpages": { "level": 3, "link": "[A.2.3.1 Yield Statement](https://jckantor.github.io/CBE30338/A.02-Modular-Approach-to-Simulation-using-Python-Generators.html#A.2.3.1-Yield-Statement)", "section": "A.2.3.1 Yield Statement" } }, "source": [ "The generator can also be used inside list comprehensions." ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "nbpages": { "level": 3, "link": "[A.2.3.1 Yield Statement](https://jckantor.github.io/CBE30338/A.02-Modular-Approach-to-Simulation-using-Python-Generators.html#A.2.3.1-Yield-Statement)", "section": "A.2.3.1 Yield Statement" } }, "outputs": [ { "data": { "text/plain": [ "[1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987]" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "[k for k in fib(1000)]" ] }, { "cell_type": "markdown", "metadata": { "nbpages": { "level": 3, "link": "[A.2.3.2 Iterators](https://jckantor.github.io/CBE30338/A.02-Modular-Approach-to-Simulation-using-Python-Generators.html#A.2.3.2-Iterators)", "section": "A.2.3.2 Iterators" } }, "source": [ "### A.2.3.2 Iterators\n", "\n", "When called, a generator function creates an intermediate function called an iterator. Here we construct the iterator and use it within a loop to find the first 10 Fibonacci numbers." ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "nbpages": { "level": 3, "link": "[A.2.3.2 Iterators](https://jckantor.github.io/CBE30338/A.02-Modular-Approach-to-Simulation-using-Python-Generators.html#A.2.3.2-Iterators)", "section": "A.2.3.2 Iterators" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1\n", "1\n", "2\n", "3\n", "5\n", "8\n", "13\n", "21\n", "34\n", "55\n" ] } ], "source": [ "f = fib(500)\n", "for k in range(0,10):\n", " print(next(f))" ] }, { "cell_type": "markdown", "metadata": { "nbpages": { "level": 3, "link": "[A.2.3.2 Iterators](https://jckantor.github.io/CBE30338/A.02-Modular-Approach-to-Simulation-using-Python-Generators.html#A.2.3.2-Iterators)", "section": "A.2.3.2 Iterators" } }, "source": [ "Using `next` on an iterator returns the next value. " ] }, { "cell_type": "markdown", "metadata": { "nbpages": { "level": 3, "link": "[A.2.3.3 Two-way communcation with Generators using Send](https://jckantor.github.io/CBE30338/A.02-Modular-Approach-to-Simulation-using-Python-Generators.html#A.2.3.3-Two-way-communcation-with-Generators-using-Send)", "section": "A.2.3.3 Two-way communcation with Generators using Send" } }, "source": [ "### A.2.3.3 Two-way communcation with Generators using Send\n", "\n", "So far we have demonstrated the use of `yield` as a way to communicate information from the generator to the calling program. Which is fine if all you need is one-way communication. But for the modular simulation of processes, we need to be able to send information both ways. A feedback control module, for example, will need to obtain current values of the process variable in order to update its internal state to provide an update of the manipulated variable to calling programm.\n", "\n", "Here's the definition of a generator for negative feedback proportional control where the control gain $K_p$ and setpoint $SP$ are specified constants." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "nbpages": { "level": 3, "link": "[A.2.3.3 Two-way communcation with Generators using Send](https://jckantor.github.io/CBE30338/A.02-Modular-Approach-to-Simulation-using-Python-Generators.html#A.2.3.3-Two-way-communcation-with-Generators-using-Send)", "section": "A.2.3.3 Two-way communcation with Generators using Send" } }, "outputs": [], "source": [ "def proportionalControl(Kp,SP):\n", " MV = None\n", " while True:\n", " PV = yield MV\n", " MV = Kp*(SP-PV)" ] }, { "cell_type": "markdown", "metadata": { "nbpages": { "level": 3, "link": "[A.2.3.3 Two-way communcation with Generators using Send](https://jckantor.github.io/CBE30338/A.02-Modular-Approach-to-Simulation-using-Python-Generators.html#A.2.3.3-Two-way-communcation-with-Generators-using-Send)", "section": "A.2.3.3 Two-way communcation with Generators using Send" } }, "source": [ "The `yield` statement is now doing double duty. When first called it sends the value of MV back to the calling program, then stops and waits. It is waiting for the calling program to send a value of PV using the `.send()` method. Execution resumes until the yield statement is encountered again and the new value of MV returned to the calling program.\n", "\n", "With this behavior in mind, gettting the generator ready for use is a two step process. The first step is to create an instance (i.e., an iterator). The second step is to initialize the instance by issuing `.send(None)` command. This is will halt execution at the first `yield` statement. At that point the generator instance will be ready to go for subsequent simulation.\n", "\n", "Here's the initialization of a new instance of proportional control with $K_p = 2.5$ and $SP = 2$." ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "nbpages": { "level": 3, "link": "[A.2.3.3 Two-way communcation with Generators using Send](https://jckantor.github.io/CBE30338/A.02-Modular-Approach-to-Simulation-using-Python-Generators.html#A.2.3.3-Two-way-communcation-with-Generators-using-Send)", "section": "A.2.3.3 Two-way communcation with Generators using Send" } }, "outputs": [], "source": [ "pc = proportionalControl(2.5,2)\n", "pc.send(None)" ] }, { "cell_type": "markdown", "metadata": { "nbpages": { "level": 3, "link": "[A.2.3.3 Two-way communcation with Generators using Send](https://jckantor.github.io/CBE30338/A.02-Modular-Approach-to-Simulation-using-Python-Generators.html#A.2.3.3-Two-way-communcation-with-Generators-using-Send)", "section": "A.2.3.3 Two-way communcation with Generators using Send" } }, "source": [ "This shows it in use." ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "nbpages": { "level": 3, "link": "[A.2.3.3 Two-way communcation with Generators using Send](https://jckantor.github.io/CBE30338/A.02-Modular-Approach-to-Simulation-using-Python-Generators.html#A.2.3.3-Two-way-communcation-with-Generators-using-Send)", "section": "A.2.3.3 Two-way communcation with Generators using Send" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0 5.0\n", "1 2.5\n", "2 0.0\n", "3 -2.5\n", "4 -5.0\n" ] } ], "source": [ "for PV in range(0,5):\n", " print(PV, pc.send(PV))" ] }, { "cell_type": "markdown", "metadata": { "nbpages": { "level": 3, "link": "[A.2.3.3 Two-way communcation with Generators using Send](https://jckantor.github.io/CBE30338/A.02-Modular-Approach-to-Simulation-using-Python-Generators.html#A.2.3.3-Two-way-communcation-with-Generators-using-Send)", "section": "A.2.3.3 Two-way communcation with Generators using Send" } }, "source": [ "You can verify that these results satisfy the proportional control relationship." ] }, { "cell_type": "markdown", "metadata": { "nbpages": { "level": 2, "link": "[A.2.4 Example Application: Modeling Gravity-Drained Tanks with Python Generators](https://jckantor.github.io/CBE30338/A.02-Modular-Approach-to-Simulation-using-Python-Generators.html#A.2.4-Example-Application:-Modeling-Gravity-Drained-Tanks-with-Python-Generators)", "section": "A.2.4 Example Application: Modeling Gravity-Drained Tanks with Python Generators" } }, "source": [ "## A.2.4 Example Application: Modeling Gravity-Drained Tanks with Python Generators" ] }, { "cell_type": "markdown", "metadata": { "nbpages": { "level": 2, "link": "[A.2.4 Example Application: Modeling Gravity-Drained Tanks with Python Generators](https://jckantor.github.io/CBE30338/A.02-Modular-Approach-to-Simulation-using-Python-Generators.html#A.2.4-Example-Application:-Modeling-Gravity-Drained-Tanks-with-Python-Generators)", "section": "A.2.4 Example Application: Modeling Gravity-Drained Tanks with Python Generators" } }, "source": [ "The first step in using a Python generator for simulation is to write the generator. It will be used to create instances of the dynamical process being modeled by the generator. Parameters should include a sample time `dt` and any other model parameters you choose to specify a particular instance of the process. The yield statement should provide time plus any other relevant process data. The yield statement will produce new values of process inputs valid for the next time step." ] }, { "cell_type": "markdown", "metadata": { "nbpages": { "level": 3, "link": "[A.2.4.1 Generator for a Gravity-Drained Tank](https://jckantor.github.io/CBE30338/A.02-Modular-Approach-to-Simulation-using-Python-Generators.html#A.2.4.1-Generator-for-a-Gravity-Drained-Tank)", "section": "A.2.4.1 Generator for a Gravity-Drained Tank" } }, "source": [ "### A.2.4.1 Generator for a Gravity-Drained Tank" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "nbpages": { "level": 3, "link": "[A.2.4.1 Generator for a Gravity-Drained Tank](https://jckantor.github.io/CBE30338/A.02-Modular-Approach-to-Simulation-using-Python-Generators.html#A.2.4.1-Generator-for-a-Gravity-Drained-Tank)", "section": "A.2.4.1 Generator for a Gravity-Drained Tank" } }, "outputs": [], "source": [ "# generator for a gravity-drained tank model\n", "\n", "def gravtank_generator(dt, A=1, Cv=1, IC=0):\n", " \n", " def qout(h):\n", " return Cv*np.sqrt(float(h))\n", " \n", " def deriv(h,t):\n", " dh = (qin - qout(h))/A\n", " return dh\n", " \n", " h = IC\n", " t = 0\n", " while True:\n", " qin = yield t,qout(h),float(h)\n", " h = odeint(deriv,h,[t,t+dt])[-1]\n", " t += dt" ] }, { "cell_type": "markdown", "metadata": { "nbpages": { "level": 3, "link": "[A.2.4.2 Simulation of a Single Tank with Constant Inflow](https://jckantor.github.io/CBE30338/A.02-Modular-Approach-to-Simulation-using-Python-Generators.html#A.2.4.2-Simulation-of-a-Single-Tank-with-Constant-Inflow)", "section": "A.2.4.2 Simulation of a Single Tank with Constant Inflow" } }, "source": [ "### A.2.4.2 Simulation of a Single Tank with Constant Inflow\n", "\n", "Next we show how to use the generator to create a simulation consisting of a single gravity drained tank with constant inflow.\n", "\n", "1. Choose a sample time for the simulation.\n", "2. Create instances of the processes to be used in your simulation.\n", "3. The first call to an instance is f.send(None). This will return the initial condition.\n", "4. Subsequent calls to the instance should be f.send(u) where u is variable, tuple, or other data time being passed to the process. The return value will be a tuple contaning the next value of time plus other process data.\n" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "nbpages": { "level": 3, "link": "[A.2.4.2 Simulation of a Single Tank with Constant Inflow](https://jckantor.github.io/CBE30338/A.02-Modular-Approach-to-Simulation-using-Python-Generators.html#A.2.4.2-Simulation-of-a-Single-Tank-with-Constant-Inflow)", "section": "A.2.4.2 Simulation of a Single Tank with Constant Inflow" } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# 1. select sample time\n", "dt = 0.02\n", "\n", "# 2. create a process instance\n", "tank = gravtank_generator(dt, A=0.2, Cv=.5)\n", "\n", "# 3. get initial condition\n", "y = [tank.send(None)]\n", "\n", "# 4. append subsequent states \n", "y += [tank.send(0.5) for t in np.arange(0,10,dt)]\n", "\n", "# 5. extract information into numpy arrays for plotting\n", "t,q,h = np.asarray(y).transpose()\n", "plt.plot(t,q,t,h)\n", "plt.xlabel('Time')\n", "plt.legend(['Outlet Flow','Level'])\n", "plt.grid()" ] }, { "cell_type": "markdown", "metadata": { "nbpages": { "level": 3, "link": "[A.2.4.3 Simulation of Two Tanks in Series](https://jckantor.github.io/CBE30338/A.02-Modular-Approach-to-Simulation-using-Python-Generators.html#A.2.4.3-Simulation-of-Two-Tanks-in-Series)", "section": "A.2.4.3 Simulation of Two Tanks in Series" } }, "source": [ "### A.2.4.3 Simulation of Two Tanks in Series" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "nbpages": { "level": 3, "link": "[A.2.4.3 Simulation of Two Tanks in Series](https://jckantor.github.io/CBE30338/A.02-Modular-Approach-to-Simulation-using-Python-Generators.html#A.2.4.3-Simulation-of-Two-Tanks-in-Series)", "section": "A.2.4.3 Simulation of Two Tanks in Series" } }, "outputs": [ { "data": { "text/plain": [ "[,\n", " ]" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\ngg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "dt = 0.02\n", "\n", "tank1 = gravtank_generator(dt, A=0.2, Cv=.5)\n", "tank2 = gravtank_generator(dt, A=0.2, Cv=.5)\n", "\n", "y1 = [tank1.send(None)]\n", "y2 = [tank2.send(None)]\n", "\n", "for t in np.arange(dt,10,dt):\n", " t1,q1,h1 = tank1.send(0.5)\n", " t2,q2,h2 = tank2.send(q1)\n", " \n", " y1.append([t1,q1,h1])\n", " y2.append([t2,q2,h2])\n", " \n", "t1,q1,h1 = np.asarray(y1).transpose()\n", "t2,q2,h2 = np.asarray(y2).transpose()\n", "plt.plot(t1,q1,t1,h1)\n", "plt.plot(t2,q2,t2,h2)" ] }, { "cell_type": "markdown", "metadata": { "nbpages": { "level": 3, "link": "[A.2.4.4 Simulation of Two Tanks in Series with PI Level Control on the Second Tank](https://jckantor.github.io/CBE30338/A.02-Modular-Approach-to-Simulation-using-Python-Generators.html#A.2.4.4-Simulation-of-Two-Tanks-in-Series-with-PI-Level-Control-on-the-Second-Tank)", "section": "A.2.4.4 Simulation of Two Tanks in Series with PI Level Control on the Second Tank" } }, "source": [ "### A.2.4.4 Simulation of Two Tanks in Series with PI Level Control on the Second Tank" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "nbpages": { "level": 3, "link": "[A.2.4.4 Simulation of Two Tanks in Series with PI Level Control on the Second Tank](https://jckantor.github.io/CBE30338/A.02-Modular-Approach-to-Simulation-using-Python-Generators.html#A.2.4.4-Simulation-of-Two-Tanks-in-Series-with-PI-Level-Control-on-the-Second-Tank)", "section": "A.2.4.4 Simulation of Two Tanks in Series with PI Level Control on the Second Tank" } }, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "dt = 0.02\n", "\n", "tank1 = gravtank_generator(dt, A=0.2, Cv=.5)\n", "tank2 = gravtank_generator(dt, A=0.2, Cv=.5)\n", "\n", "y1 = [tank1.send(None)]\n", "y2 = [tank2.send(None)]\n", "\n", "u = 0.0\n", "r2 = 1.5\n", "Kp = .6\n", "Ki = .6\n", "ecurr = 0\n", "ulog = [u]\n", "\n", "for t in np.arange(dt,10,dt):\n", " t1,q1,h1 = tank1.send(u)\n", " t2,q2,h2 = tank2.send(q1)\n", " \n", " eprev,ecurr = ecurr,r2-h2\n", " u += Kp*(ecurr-eprev) + Ki*ecurr*dt\n", " u = max(0,min(1,u))\n", " \n", " y1.append([t1,q1,h1])\n", " y2.append([t2,q2,h2])\n", " ulog.append(u)\n", " \n", "t1,q1,h1 = np.asarray(y1).transpose()\n", "t2,q2,h2 = np.asarray(y2).transpose()\n", "plt.plot(t1,q1,t1,h1)\n", "plt.plot(t2,q2,t2,h2)\n", "plt.plot(t1,ulog)" ] }, { "cell_type": "markdown", "metadata": { "nbpages": { "level": 3, "link": "[A.2.4.5 Adding a PI Control Generator](https://jckantor.github.io/CBE30338/A.02-Modular-Approach-to-Simulation-using-Python-Generators.html#A.2.4.5-Adding-a-PI-Control-Generator)", "section": "A.2.4.5 Adding a PI Control Generator" } }, "source": [ "### A.2.4.5 Adding a PI Control Generator" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "nbpages": { "level": 3, "link": "[A.2.4.5 Adding a PI Control Generator](https://jckantor.github.io/CBE30338/A.02-Modular-Approach-to-Simulation-using-Python-Generators.html#A.2.4.5-Adding-a-PI-Control-Generator)", "section": "A.2.4.5 Adding a PI Control Generator" } }, "outputs": [], "source": [ "def PI_generator(dt, Kp, Ki, MVmin = 0, MVmax = np.Inf):\n", "\n", " ecurr = 0\n", " eprev = 0\n", " t = 0\n", " u = MVmin\n", " \n", " while True:\n", " r,y,u = yield t,u\n", " eprev,ecurr = ecurr,r-y\n", " u += Kp*(ecurr - eprev) + Ki*ecurr*dt\n", " u = max(MVmin,min(MVmax,u))\n", " t += dt" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "nbpages": { "level": 3, "link": "[A.2.4.5 Adding a PI Control Generator](https://jckantor.github.io/CBE30338/A.02-Modular-Approach-to-Simulation-using-Python-Generators.html#A.2.4.5-Adding-a-PI-Control-Generator)", "section": "A.2.4.5 Adding a PI Control Generator" } }, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "dt = 0.02\n", "\n", "tank1 = gravtank_generator(dt, A=0.2, Cv=.5)\n", "tank2 = gravtank_generator(dt, A=0.2, Cv=.5)\n", "pi = PI_generator(dt, Kp = 0.6, Ki = 0.6, MVmin = 0, MVmax = 1)\n", "\n", "y1 = [tank1.send(None)]\n", "y2 = [tank2.send(None)]\n", "ulog = [pi.send(None)[1]]\n", "\n", "u = 0\n", "\n", "for t in np.arange(dt,10,dt):\n", " t1,q1,h1 = tank1.send(u)\n", " t2,q2,h2 = tank2.send(q1)\n", " t3,u = pi.send((r2,h2,u))\n", " \n", " y1.append([t,q1,h1])\n", " y2.append([t,q2,h2])\n", " ulog.append(u)\n", " \n", "t1,q1,h1 = np.asarray(y1).transpose()\n", "t2,q2,h2 = np.asarray(y2).transpose()\n", "\n", "plt.plot(t1,q1,t1,h1)\n", "plt.plot(t2,q2,t2,h2)\n", "plt.plot(t1,ulog)" ] }, { "cell_type": "markdown", "metadata": { "nbpages": { "level": 3, "link": "[A.2.4.6 Implementing Cascade Control for Two Tanks in Series with Unmeasured Disturbance](https://jckantor.github.io/CBE30338/A.02-Modular-Approach-to-Simulation-using-Python-Generators.html#A.2.4.6-Implementing-Cascade-Control-for-Two-Tanks-in-Series-with-Unmeasured-Disturbance)", "section": "A.2.4.6 Implementing Cascade Control for Two Tanks in Series with Unmeasured Disturbance" } }, "source": [ "### A.2.4.6 Implementing Cascade Control for Two Tanks in Series with Unmeasured Disturbance" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "nbpages": { "level": 3, "link": "[A.2.4.6 Implementing Cascade Control for Two Tanks in Series with Unmeasured Disturbance](https://jckantor.github.io/CBE30338/A.02-Modular-Approach-to-Simulation-using-Python-Generators.html#A.2.4.6-Implementing-Cascade-Control-for-Two-Tanks-in-Series-with-Unmeasured-Disturbance)", "section": "A.2.4.6 Implementing Cascade Control for Two Tanks in Series with Unmeasured Disturbance" } }, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n7o7jOF3IL+F3WjNQRyOLAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# disturbance function\n", "def d(t):\n", " if t > 10:\n", " return 0.1\n", " else:\n", " return 0\n", "\n", "# simulation\n", "dt = 0.02\n", "\n", "tank1 = gravtank_generator(dt, A=0.2, Cv=.5)\n", "tank2 = gravtank_generator(dt, A=0.2, Cv=.5)\n", "\n", "# level control for tank 1. \n", "pi1 = PI_generator(dt, Kp = 1, Ki = 0.6, MVmin = 0, MVmax = 1)\n", "\n", "# cascade level control for tank 2. Manipulated variable is the setpoint to pi1\n", "pi2 = PI_generator(dt, Kp = 0.6, Ki = 0.6, MVmin = 0, MVmax = 2)\n", "\n", "y1 = [tank1.send(None)]\n", "y2 = [tank2.send(None)]\n", "ulog = [pi1.send(None)[1]]\n", "pi2.send(None)\n", "\n", "u = 0\n", "r1 = 0\n", "r2 = 1.3\n", "\n", "for t in np.arange(dt,20,dt):\n", " t1,q1,h1 = tank1.send(u)\n", " t2,q2,h2 = tank2.send(q1 + d(t))\n", " t3,r1 = pi2.send((r2,h2,r1))\n", " t4,u = pi1.send((r1,h1,u))\n", " \n", " y1.append([t,q1,h1])\n", " y2.append([t,q2,h2])\n", " ulog.append(u)\n", " \n", "t1,q1,h1 = np.asarray(y1).transpose()\n", "t2,q2,h2 = np.asarray(y2).transpose()\n", "plt.plot(t1,q1,t1,h1)\n", "plt.plot(t2,q2,t2,h2)\n", "plt.plot(t1,ulog)" ] }, { "cell_type": "markdown", "metadata": { "nbpages": { "level": 2, "link": "[A.2.5 Enhancing Modularity with Class Definitions for Process Units](https://jckantor.github.io/CBE30338/A.02-Modular-Approach-to-Simulation-using-Python-Generators.html#A.2.5-Enhancing-Modularity-with-Class-Definitions-for-Process-Units)", "section": "A.2.5 Enhancing Modularity with Class Definitions for Process Units" } }, "source": [ "## A.2.5 Enhancing Modularity with Class Definitions for Process Units\n", "\n", "One of the key goals of a modular approach to simulation is to implement process specific behavior within the definitions of the process, and separate from the organization of information flow among units that takes place in the main simulation loop.\n", "\n", "Below we define two examples of class definitions demonstrating how this can be done. The class definitions add features for defining names and parameters for instances of each class, and functions to log and plot data gathered in the course of simulations." ] }, { "cell_type": "markdown", "metadata": { "nbpages": { "level": 3, "link": "[A.2.5.1 Gravity-Drained Tank Class](https://jckantor.github.io/CBE30338/A.02-Modular-Approach-to-Simulation-using-Python-Generators.html#A.2.5.1-Gravity-Drained-Tank-Class)", "section": "A.2.5.1 Gravity-Drained Tank Class" } }, "source": [ "### A.2.5.1 Gravity-Drained Tank Class" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": true, "nbpages": { "level": 3, "link": "[A.2.5.1 Gravity-Drained Tank Class](https://jckantor.github.io/CBE30338/A.02-Modular-Approach-to-Simulation-using-Python-Generators.html#A.2.5.1-Gravity-Drained-Tank-Class)", "section": "A.2.5.1 Gravity-Drained Tank Class" } }, "outputs": [], "source": [ "class gravtank():\n", " \n", " def __init__(self, name='', A=1, Cv=1):\n", " self.name = name\n", " self.A = A\n", " self.Cv = Cv\n", " self._log = []\n", " self.qin = 0\n", " \n", " def qout(self,h):\n", " return self.Cv*np.sqrt(float(h))\n", " \n", " def deriv(self,h,t):\n", " dh = (self.qin - self.qout(h))/self.A\n", " return dh\n", " \n", " def plot(self):\n", " t,qout,h = np.asarray(self._log).transpose()\n", " plt.plot(t,qout,label=self.name + ' qout')\n", " plt.plot(t,h,label=self.name + ' h')\n", " plt.legend()\n", " \n", " def generator(self,dt,IC = 0):\n", " h = IC\n", " while True:\n", " t,self.qin = yield self.qout(h),float(h)\n", " h = odeint(self.deriv,h,[t,t+dt])[-1]\n", " self._log.append([t,self.qout(h),float(h)])\n", " t += dt" ] }, { "cell_type": "markdown", "metadata": { "nbpages": { "level": 3, "link": "[A.2.5.2 PI Controller Class](https://jckantor.github.io/CBE30338/A.02-Modular-Approach-to-Simulation-using-Python-Generators.html#A.2.5.2-PI-Controller-Class)", "section": "A.2.5.2 PI Controller Class" } }, "source": [ "### A.2.5.2 PI Controller Class" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "nbpages": { "level": 3, "link": "[A.2.5.2 PI Controller Class](https://jckantor.github.io/CBE30338/A.02-Modular-Approach-to-Simulation-using-Python-Generators.html#A.2.5.2-PI-Controller-Class)", "section": "A.2.5.2 PI Controller Class" } }, "outputs": [], "source": [ "class PI():\n", " \n", " def __init__(self, name='', Kp = 0, Ki = 0, MVmin = 0, MVmax = np.Inf):\n", " self.name = name\n", " self.Kp = Kp\n", " self.Ki = Ki\n", " self.MVmin = MVmin\n", " self.MVmax = MVmax\n", " self._log = []\n", " \n", " def plot(self):\n", " t,r,y,u = np.asarray(self._log).transpose()\n", " plt.subplot(1,2,1)\n", " p = plt.plot(t,y,label=self.name + ' PV')\n", " plt.plot(t,r,'--',color=p[-1].get_color(),label=self.name + ' SP')\n", " plt.legend()\n", " plt.title('Process Variable and Setpoint')\n", " plt.subplot(1,2,2)\n", " plt.plot(t,u,label=self.name + ' MV')\n", " plt.title('Manipulated Variable')\n", " plt.legend()\n", " plt.tight_layout()\n", " \n", " def generator(self,dt):\n", " ecurr = 0\n", " eprev = 0\n", " u = self.MVmin\n", " while True:\n", " t,r,y,u = yield u\n", " self._log.append([t,r,y,u]) \n", " eprev,ecurr = ecurr,r-y\n", " u += Kp*(ecurr - eprev) + Ki*ecurr*dt\n", " u = max(self.MVmin,min(self.MVmax,u))\n", " t += dt" ] }, { "cell_type": "markdown", "metadata": { "nbpages": { "level": 3, "link": "[A.2.5.3 Modular Simulation of Cascade Control for Two Tanks in Series](https://jckantor.github.io/CBE30338/A.02-Modular-Approach-to-Simulation-using-Python-Generators.html#A.2.5.3-Modular-Simulation-of-Cascade-Control-for-Two-Tanks-in-Series)", "section": "A.2.5.3 Modular Simulation of Cascade Control for Two Tanks in Series" } }, "source": [ "### A.2.5.3 Modular Simulation of Cascade Control for Two Tanks in Series\n", "\n", "The following simulation shows how to use the class definitions in a simulation. Each process instance used in the simulation requires three actions:\n", "\n", "1. Create an instance of the process. This is the step at which you can provide an instance name, parameters specific to the process and instance. Methods associated with the instance will be used to examine simulation logs and plot simulation results.\n", "\n", "2. Create a generator. A call to the generator function for each process instance creates an associated iterator. A sample time must be specified.\n", "\n", "3. An initial call to the iterator with an argument of `None` is needed to advance execution to the first `yield` statement." ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "nbpages": { "level": 3, "link": "[A.2.5.3 Modular Simulation of Cascade Control for Two Tanks in Series](https://jckantor.github.io/CBE30338/A.02-Modular-Approach-to-Simulation-using-Python-Generators.html#A.2.5.3-Modular-Simulation-of-Cascade-Control-for-Two-Tanks-in-Series)", "section": "A.2.5.3 Modular Simulation of Cascade Control for Two Tanks in Series" } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAxAAAAEYCAYAAADMNRC5AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xd4VGX2wPHvyaSTRuhNAqHXCFG6gKgIiFiQBRVFsGAX\ndX+WtaCurou6rh0RGzbAsoICgthAASmCdJBO6IQQSgIp8/7+eG/CEJKQZJJMyvk8zzwzc+uZyeTe\ne+7bxBiDUkoppZRSShWEn68DUEoppZRSSpUfmkAopZRSSimlCkwTCKWUUkoppVSBaQKhlFJKKaWU\nKjBNIJRSSimllFIFpgmEUkoppZRSqsA0gVCVioj0EJENBVx2hIj8ms/8n0Xk5uKLrmjKShxnIyLH\nRKSxr+NQSpV/IvKoiEwspm1tE5GLimNbBdjXByLyz9LYl7O/8SLyeAGXzfNcIiIxImJExL94I1Tl\nlSYQFZRzQEx1Ltr2OQetMF/HVRgisl5ERuYy/V4RWVqUbRpj5htjmnsfXfkgIlEi8p6I7BWRoyKy\nUUQeLuC6xXqiM8aEGWO2FHDfRkSaFNe+lVKlxzn/pIlI9RzTlzv/2zHe7sMY85wxptRvnJTUsUlE\nOovI8dzO0873dldRtmuMGW2Mecb7CJU6nSYQFdtAY0wY0AGIBx7LuYBYZfV38CFwQy7ThzvzCqWS\n3jl5GQgDWgKRwOXAJp9GpJSqDLYCw7LeiEhbINR34ZRtxphFQAIw2HO6iLQBWgGfFXabIuIqnuiU\nOlNZvXBUxcgYswuYBbSB7GLKZ0XkNyAFaCwidUVkuogcEpFNInJL1voi4nKKizc7d7GXiUgDZ14L\nEfneWW+DiAzxWK+/iKx11tklIg8606uLyLcicthZb34eScxHQHcRaeixzVZAO5yDqYjcJCLrnH1s\nEZHbPJbtJSIJIvKQiOwF3s+a5rHMwx6fa62IXJkjBhGR10Uk2SkR6ZPX9ywiI51YkkRktmfcuSz7\nuVMqkCwi80Sktce8D0TkDRGZ4cT1u4jEesy/2IklWUReBySv/QDnAZ8aY5KMMW5jzHpjzBce28r1\n7ycitwLXAf/nlGJ940zfJiKPON9Vkoi8LyLBHtu7xfn9HHJ+T3U95mXfucvvM4rIPGeVP519/y2f\nz6eUKps+4vQbQDcCkzwXEJEBzt31IyKyU0TGeszLqjJzo4jsEJGDIvIPj/ljReTjHMveKiK7RWRP\n1vnGmX9aaWrO80COmM4XkYXO+WmPc/wPdOblemwSkctEZIWzzgIRaeexvXNF5A/nODcFCD5zr9ly\nu2l2AzDTGJPobO9s5463RGSmiBwHent+dhGpKvbce8A5fn8rIvVz7C9WRBY7f5NpIhKdx/cUKSLv\nOt/RLhH5p2jCUqloAlEJiL3Y7w8s95g8HLgVCAe2A5Oxdz/qYu+APCciFzrL3o+9k9QfiABGAiki\nUgX4HvgUqAkMBd4Ue5EP8C5wmzEmHJu8/OhMf8DZVw2gFvAoYHLGbYxJAH5yYvWMe6Yx5qDzfj9w\nmRPXTcDLItLBY/naQDTQ0Pm8OW0GemDvzj8FfCwidTzmd3KWqQ48CXyV2wFVRAY5n+Mq53PNJ/87\nRrOAptjv7Q/gkxzzhzrxVMWWGDzr7Kc68BW2NKm6E1u3fPazCHhWbKLVNEfMef79jDETnJjGOVWP\nBnqseh3QF4gFmjmx4Pxe/gUMAepw6neVl1w/ozHmAmd+e2ffU/LZhlKqbFoERIhIS+fCcijwcY5l\njmMvkKOAAcDtInJFjmW6A82BPsATItIyn332xh5XLwEekqK1a8gExmCPr12c/d4BuR+bRORc4D3g\nNqAa8DYwXUSCnMTja2wyFQ18Dlydz74/Ai6QUzfo/IBrOb3E/Wznjmuxx9JwIGcbPj/gfez58Bwg\nFXg9xzI3YM/xdYAM4NU8Yv3Amd8EOBf7nZf5tniqGBlj9FEBH8A24BhwGHsh9yYQ4sz7GXjaY9kG\n2INmuMe0fwEfOK83AINy2cffgPk5pr0NPOm83oE9qEbkWOZpYBrQpACf43pgg/Paz9nmlfks/zVw\nr/O6F5AGBHvM7wUk5LP+iqzPCowAdgPiMX8xMNzje7zZeT0LGOWxnB+2dKdhAT5jFDaBinTefwBM\n9JjfH1jvvL4BWOQxT7DJ2M15bDsEm9gsA9KxF+r9Cvj3+wD4Zy6/q9E5YtvsvH4Xm3BkzQtz9hnj\nvDdZf/P8PmPOZfWhD32Ur4dznLgIe3PhX8Cl2JsV/s7/dkwe6/0XeNl5HeMsW99j/mJgqPN6LPBx\njmVbeCw7DnjXeX3asSzneSAr3jxiug/4n8f7045NwFvAMznW2QD0BC7gzHPIgpzH1RzrzgUedV5f\nDBwAAvJYNrdzx6Qcy5xxHPeYFwckebz/GXje430r7DnU5fEd+2Nv/J3EuaZwlh0G/OTr354+Su+h\nJRAV2xXGmChjTENjzB3GmFSPeTs9XtcFDhljjnpM2w7Uc143wN7pzqkh0Mkptj0sIoexd6drO/Ov\nxl4YbheRX0SkizP9BeyF7Byx1Y7ya9T7FVBHRDpjD/qhwIysmSLST0QWOVVmDjv782y4d8AYcyKv\njYvIDR5Fz4exJSWe6+8yxniWjmzHfl+5fReveGznEPbivl7OBcVWCXtebNWpI9iTFzn2u9fjdQr2\nYhxn39l/Oyc2z7/laYwxqcY2NuyIvTs2FfjcKUU5298vL5778/w+6jrvs/Z9DEgkl+/gLJ9RKVUx\nfIS9Iz6CHNWXAESkk4j85FSpSQZGc/pxEAp3nMjr2FRgItLMqdqz1zk+P5dLTJ4aAg/kOI42cPZd\nl9zPIfn5kFOl7sOBycaYdCe2gpw78jwfiEioiLwtItud9ecBUTmqHuX8DgM48/M3dKbv8fjMb2NL\nRVQloQlE5eV5QNsNRItIuMe0c4Bdzuud2OoqOe0EfnGSlKxHmDHmdgBjzBJjzCDsQeVr7MUrxpij\nxpgHjDGNsY1675c82hYYY1KAL7B33rMOpmkAIhIEfAm8CNQyxkQBMzm9TcAZVaOyiG2j8A5wF1DN\nWX91jvXriYjn+3Oc7yu37+K2HN9FiDFmQS7LXgsMwt6hi8Te2SHHfvOyB3tyyvoM4vk+P8aYrJNh\nFaARZ/n7kfd357k/z+9jN/bEkhVbFWzSsgulVKVjjNmObUzdH3szKKdPgelAA2NMJDCegh0H85LX\nsek4pzfgzu8myVvAeqCpMSYCW4KbX0w7gWdzHEdDjTGfYY/XuZ1D8vMVUF9EemOrxHpWXyrIuSPP\ncx62+nBzoJPz2bKqZHmun/M7TAcOcrqd2BKI6h6fOcIY0xpVaWgCoTDG7MQWq/5LRIKdBmCjOFVf\ndSLwjIg0FaudiFQDvgWaichwEQlwHuc5dV4DReQ6EYl07p4cAdyQ3eCsiXNQTcZWn3LnE+KH2Oo2\nV3P6wTQQCMIW8WaISD9sPcyCqoI92B5w4roJp6G5h5rAPc5nuwbbm9HMXLY1HnhEnAZtTgOza/LY\nbzj24JuIPak9V4iYZwCtReQqsb1K3UM+J0MRedz5mwSKbex8L7Za2wby+fs5q+8Dchu34U4Rqe+U\nYvwDyGqj8Blwk4jEOcndc8Dvxphthfh8WfLat1KqfBkFXGiMOZ7LvHBs6fcJETkfe4Hsjcedu+yt\nsW3iso5NK4D+IhItIrWx1ZLyEo49Xx0TkRbA7Tnm5zw2vQOMdkpTRESqiG0cHg4sxLYTyDqHXAWc\nn98HcL6nL7BtFbYbYzy7LPfm3JG1fipw2Dl+P5nLMteLSCsRCcVWN/7CGJOZI8Y9wBzgJRGJEBE/\nEYkVkZ6FjEeVY5pAqCzDsHczdgP/w9aDn+vM+w+29GAO9sD6Lrbu41HsBftQZ729wL+xF/VgSwy2\nOUWlo7HVY8A2AJuLbaOxEHjTGPNTPrHNwyYaCcaYJVkTnf3f48SWhD35TC/oBzbGrAVecmLYB7QF\nfsux2O9OvAexDdMGG6c3jBzb+h/2s092Pu9qoF8eu56ELRreBazFNjYsaMwHgWuA57Enkaa5xHza\nKtgT0UHs3+hiYIAx5lgB/n7vAq2cIuqvPbb5Kfa3sAVbte2fTmxzgcexpUJ7sKVWQwv62XIYC3zo\n7HvI2RZWSpVNxpjNOS6CPd0BPC0iR4EncEqpvfALtnrsD8CLxpg5zvSPgD+xVX7mcCqxyM2D2HPJ\nUWxykHPZsXgcm5zPdgu2MXKSs/8RAE5p+VXO+0PYG2G5lcTk9CG2NDdnta8inzsc/8W2izvorPtd\nLst8hG03sRfbY9Q9eWzrBuxNvLXYz/0FtuG1qiTk9Kp5SimVNxHZhm2wPfdsyyqlVGkQOzDdVmxj\n4wzfRqNU5aAlEEoppZRSSqkC0wRCKaWUUkopVWBahUkppZRSSilVYFoCoZRSSimllCow/7MtICLv\nAZcB+40xObu4zFqmF7Z1fwBw0Bhz1q68qlevbmJiYgoVrFJKqeKzbNmyg8aYGr6Ow5OeG5RSyncK\nel44awKB7c7rdXIZRRJARKKAN4FLjTE7RKRAIxHGxMSwdGlePbsppZQqaSJytlFxS52eG5RSyncK\nel44axUmY8w8bP/FebkW+MoYs8NZfn+BIlRKKaWUUkqVO8XRBqIZUFVEfhaRZSJyQ14LisitIrJU\nRJYeOHCgGHatlFJKKaWUKk3FkUD4Ax2BAUBf7FDyzXJb0BgzwRgTb4yJr1GjTFW7VUoppZRSShVA\nQdpAnE0CkGiMOQ4cF5F5QHtgYzFsWymllFJKVULp6ekkJCRw4sQJX4dS4QQHB1O/fn0CAgKKtH5x\nJBDTgNdFxB8IBDoBLxfDdpVSSimlVCWVkJBAeHg4MTExiIivw6kwjDEkJiaSkJBAo0aNirSNgnTj\n+hnQC6guIgnAk9juWjHGjDfGrBOR74CVgBuYaIxZXaRolFJKKaWUAk6cOKHJQwkQEapVq4Y37ZHP\nmkAYY4YVYJkXgBeKHIVSSimllFI5aPJQMrz9XnUkaqWUUkoppVSBFUcbCKVUYWWchPUzYMciOLgR\n3BkQEgXVm0OjHnBOV/AP9HWUSqmyJv0EHN3jPPbCiWQ4eRROHnGej4E7HTLTneeMU+8BxA/8XPZZ\nnGc/v9PfuwLsMn4BzmvnfdZrl78zzd+Z5vHsOT+37bj8PZbLWifndrKmu0DvPisfSkxMpE+fPgDs\n3bsXl8tFVi+iixcvJjCw4Ofp66+/nsGDB3PFFVfkucyUKVN46qmnWL9+PX/88QdxcXFnLLNp0yaa\nNm3Kk08+ydixYwHYt28f9erV46677mLgwIGMHTuW+fPnZ6+Tnp5OvXr1WLVqFbVq1SpwzPnRBEKp\n0uR2w5KJMG8cHD8AAVWgRnPwD4L962H9TJj/IgRHQdy10Ok2qBrj66iVUqUteRfs/sMeFw5usDca\nkhMgJTGPFQSCIiAozONiPccFOgImE4wb3M5z1iP7faa9oeGZeLgznGnpdn5pyjXRyJmI5JXQ5Ex8\nshIaf/tdiJ9NUMQvx3vJY35hlvWD5v2gWmzpfl+qWFWrVo0VK1YAMHbsWMLCwnjwwQdLbH9t27bl\n66+/ZuTIkfkuFxsbyzfffJOdQEydOpU2bdoA0KtXL7Zs2UJCQgL169cHYPbs2cTFxRVb8gCaQChV\nelIOwecjYOsv0KgndLsHGve2J7Qsacdh6zxYORUWv2Mf542CC/4OVar7LHSlVAk7vAP+mgNbfoGE\npXB096l5kQ2gejOo2wEi6kJ4HYioY59DqkJQOASGlc7derf7VEKRs4TDM9Fwp+efiGSvm2N+rsul\n2wQn3+147C/jhC2NyXN/GYABY2zSlP3a8707l/nO64La/AMM/1+J/BmU7w0cOJDdu3dz4sQJxowZ\nw80330xGRgbVq1dn9OjRzJo1i9DQUKZNm0bNmjVPW/eRRx5h//79vPPOO/j5nWpN0KpVqwLtOyws\njNjYWFasWEFcXBxTp07lmmuu4cCBA7hcLgYPHsyUKVN44IEHAJg8eTLDhp21SXOhaAKhVGk4fhAm\nDYKDf8HAV6DDjbmf7AOr2LtWzfvBkd3w8/OweAIs/wR6jIGu9zh3EpVS5d6hLbDiM1j3DRxYZ6dF\nngMx3aD+eVCvI9RoYUsVygo/P/ALxPbaXkmdNdlw22P37+MhNckmecprT32zhrW7jxTrNlvVjeDJ\nga2LtO6HH35IdHQ0KSkpxMfHc/XVVxMeHk5ycjI9e/bk+eef5/777+e9997j4Ycfzl5vzJgxpKWl\nMXHiRK8aMg8dOpTJkycTFRVFSEgItWrVyu5VadiwYdx999088MADpKamMnv2bN54440i7ys3mkAo\nVdLST8DHV0HiJhj2GTTpU7D1IurC5a9Cl7tg7lj44WlY8z8Y9AbUaV+iISulSkhmOqz+Cv74ELb/\nZqu6NOwG5z4LzfpCtSZa77+sy666lE8/NK2vgoWvw4bvIK547/yqsuHll19m+vTpgB2vYvPmzcTF\nxRESEkK/fv0A6Nix42ltEZ588km6devGm2++6fX++/fvz9NPP01UVBRDhw7F7XZnz+vcuTOJiYls\n3ryZ5cuX0717dyIjI73epydNIJQqad89DHv+hGGTC548eKrRDIZ9Cuu+hRn3w4Te0P0+6PmwNrRW\nqrzIOAkrPoFfX7bVlaJjoc8T0H6YvVmgKpa650JEPVg3XROIYlLUkoKSMHfuXObNm8eiRYsICQmh\ne/fu2aNlezasdrlcZGRkZL8///zzWbJkCUlJSVSt6l3JVHBwMO3ateOVV15h3bp1fPHFF6fNzyqh\nWL58ebFXXwJNIJQqWWunwbL3odt9tlqSN1peZqs2zP4HzH8JNv8IV7+rjfSUKsuMgdVfwpzHbbuG\nevHQ/0VoeomWNFRkfn7QciAsfd+2xwgK93VEqhglJycTHR1NSEgIa9asYcmSJQVab8CAAfTp04fL\nLruM2bNnExbmXfXEv//971x88cVERUWdMW/YsGEMHjyYpKQkPvroI6/2kxsdB0KpknLyGHz3CNRu\nBxc+XjzbDKkKV7wJQz6CQ1vh7QvgzynFs22lVPE6uAk+ugK+HAVhNeGGaXDzXFtVSZOHiq/l5ZB5\nEv763teRqGI2YMAAUlJSaNWqFY899hidOnUq8LpDhw5lxIgRDBo0KLvUIsvnn39O/fr1WbJkCX37\n9mXAgAH5bqtt27YMHz48z3kBAQFccsklhISEFDi+ghJjCtGjQDGKj483S5cu9cm+lSoVc5+CX/8D\nI+fAOQU/uBTY4Z3w1a2wYwG0GwoDXtS7XKpQRGSZMSbe13F4qhDnBmNg0Zu27ZJ/sK2qFD/y9B7X\nVMXnzoSXmkNMd7jmA19HUy6tW7eOli1b+jqMCiu377eg5wUtgVCqJBzZbRvQtRtaMskDQFQDuPEb\n6PUIrJoK43vArmUlsy+lVMGcSIapw2H2o9DkIrhrKZx/iyYPlZGfC1oMgI1zID3V19EoVaw0gVCq\nJCx8w9596v1Iye7H5Q+9HoYRM2zvLu9eAr/+1/bVrpQqXfvWwIRedkDIS/4JQz+F8OIbuEmVQy0v\nh/Tjts2aUhWIJhBKFbeUQ7bhXNtrSm8U6YZd4fZfoXl/mPskfDTIloIopUrHjt/hvX72TvOIGdD1\nbm3noKDRBRAcZcf6UKoC0QRCqeK2eIK949R9TOnuN6QqDJkEl79mR7J9q6uetJQqDZt/so2lq1SH\nUd9Dwy6+jkiVFa4AW41p/Qw7JpBSFYQmEEoVp8wMWPaB7aKxZovS378IdLgBbpsPUQ1hyvUw/R5I\nO176sShVGaz7Fj4dAtGNYeR3tm2SUp7aXA0nj8Bfc3wdiVLFRhMIpYrTprlwdA90uNG3cVRvYu+E\ndrsX/pgEb/eE3St8G5NSFc2mH+DzEbar5hHf2q5alcqpUU+oUtN2dqFUBaEJhFLF6Y9J9kTRrK+v\nI7GjVF/8tO17Pu04TOwDP/7TjoirlJdE5D0R2S8iq/OYf52IrBSRVSKyQETal3aMJWrXHzBlONRo\nDtd/aasQKpUblz+0ucr2xpR62NfRqEJITEwkLi6OuLg4ateuTb169bLfp6WlFWpb119/PV9//XW+\ny9x///00b96cdu3acfXVV5OcnHzGMps2bUJEGDt2bPa0ffv24e/vz3333ccPP/xAjx49TlsnPT2d\nmjVrsm/fvkLFnB9NIJQqLkf3wsbv4NzrbL3XsqJxT7j9N9uoe94LML67bfCplHc+AC7NZ/5WoKcx\npi3wDDChNIIqFUd2w2fDILSakzycOQqsUqdpO8QOKqft0sqVatWqsWLFClasWMHo0aMZM2ZM9vvA\nwMBi31/fvn1Zs2YNK1euJCYmhnHjxuW6XGxsLN98c+q3NHXqVNq0aQNAr1692LJlCwkJCdnzZ8+e\nTVxcHLVqFV+vcGdNIM52l8ljufNEJENEBhdbdEqVJ2u+BpMJcdf5OpIzhUbDlePhui9tLzHv9YVZ\nD9nRspUqAmPMPOBQPvMXGGOSnLeLgPqlElhJSz8Bk6+FtGNw7WQIr+3riFR5UK+DbSej1ZgqjIED\nB9KxY0dat27NxIkTAcjIyCAqKoqHH36Y9u3b06VLF/bv33/Guo888gijRo3CnaPL9b59++Lv7w9A\n586dT0sCPIWFhREbG8uKFbZq8tSpU7nmmmsAcLlcDB48mClTpmQvP3nyZIYNG+b9h/bgX4BlPgBe\nBybltYCIuIB/A9pCSFVea6dBzdZQvamvI8lb04vgjoXwwzPw+9v2bthFT0HbwdrlpCpJo4BZvg6i\nWHz3MOxebsd4qNXa19Go8kLElgL/Mg6O7IGIOr6OqPyZ9TDsXVW826zdFvo9X6RVP/zwQ6Kjo0lJ\nSSE+Pp6rr76a8PBwkpOT6dmzJ88//zz3338/7733Hg8//HD2emPGjCEtLY2JEycieZx3jTG89957\n3Hhj3u0phw4dyuTJk4mKiiIkJIRatWpx4MABAIYNG8bdd9/NAw88QGpqKrNnz+aNN94o0ufMy1lL\nIM52l8lxN/AlcGaapVRlcHQv7FgIra/wdSRnFxQO/cfByNlQpQZ8dTO8e7Ht+lWpYiYivbEJxEP5\nLHOriCwVkaVZJ8AyadUXsOx96Haf7ZpTqcJoOwQwsPpLX0eiisHLL7+cXcqQkJDA5s2bAQgJCaFf\nv34AdOzYkW3btmWv8+STT3Ly5EneeOONPJMHgKeffpqwsDCGDh2a5zL9+/fnu+++Y/LkyWcs17lz\nZxITE9m8eTMzZsyge/fuREZGevFpz1SQEoh8iUg94EqgN3Ce1xEpVR6t+wYw0GqQryMpuHM6wS0/\nwZ+fwQ9P2UbWbYfARU9CZMWobaJ8S0TaAROBfsaYxLyWM8ZMwGkjER8fb0opvMI5vBO+HQMNOsOF\nj/s6GlUeVW8Cdc+11Zi63uXraMqfIpYUlIS5c+cyb948Fi1aREhICN27d+fECTvOh2fbCJfLRUZG\nRvb7888/nyVLlpCUlETVqrl3vPDuu+8yZ84cfvjhh3xjCA4Opl27drzyyiusW7eOL7744rT5WSUU\ny5cvL/bqS1A8jaj/CzxkjHGfbcFyc5dJqcJaOw1qtLA9spQnfn620ffdy6DHA/ZzvHouzHhQR7JW\nXhGRc4CvgOHGmI2+jscrbjd8fTsYN1z1tu1VR6miaDsE9vwJ+9b4OhLlheTkZKKjowkJCWHNmjUs\nWbKkQOsNGDCABx54gMsuu4xjx85sgzhjxgxefvllpk+fTnBw8Fm39/e//51x48YRFXVmRw7Dhg1j\n0qRJzJs3j4EDBxYovsIojgQiHpgsItuAwcCbIpJrPQ5jzARjTLwxJr5GjRrFsGulyoDUw7B9Qfmu\n0hAUDn2esIlE3LW2msYrcTaRSNrm6+hUGSQinwELgeYikiAio0RktIiMdhZ5AqiGPSesEJHyW0du\n6buwbT70fQ6qxvg6GlWetfsbuALtgKOq3BowYAApKSm0atWKxx57jE6dOhV43aFDhzJixAgGDRqU\nXWqR5c477+TIkSP06dOHuLg47rzzzny31bZtW4YPH57nvICAAC655BJCQkIKHF9BiTFnLy0WkRjg\nW2NMm7Ms94Gz3Bf5LQe2mHrp0vJ7PlEq29ppMPUGuOk7aNjF19EUj6RtMO9F+HOy7Vmq5eXQ9W6o\n11EbW1cgIrLMGBPv6zg8lblzw5Hd8Pr5UD8ehv9Pf//Ke1/ebMeEeGA9BIb6Opoybd26dbRs2dLX\nYVRYuX2/BT0vFKQb17PdZVKqcvvrewiKhPoVqAlQ1RgY9DrctxK63gObf7JtJN7uAYvfgdSks25C\nqQph1v+BOwMue1mTB1U8Ot4EJ5NhzVe+jkSpIjtrRU5jTIFbXhhjRngVjVLljTGw6QeI7VUx60VH\n1IWLn4ILHrSlEX9MgpkPwpzHbIPxuOsgpjv4uXwdqVLFb+s820FCnycgupGvo1EVRcOuUL05LH0f\nzr3e19EoVSQV8IpHqVK0fx0c3Q1NLvJ1JCUrKBzOv8U+dq+A5R/Bys9h5RQIrW7bf7S6HGIuAP/i\nH51TqVLndsPsf0DkOdA5/3rIShWKCHQcAbMfseMa1G7r64jKNGNMvl2eqqIpSBOG/BRHI2qlKq/N\nTjdrsX18G0dpqhsHA16y9Xev+RAa97T9mn98NbzYBL4YBcs/tt1eKlVerZwMe1fabo0Dzt4bilKF\n0n4ouIJsKYTKU3BwMImJiV5f7KrTGWNITEwsUE9PedESCKW8sXU+VGsKkfV8HUnpCwy1A+e1vgLS\nT8CWn2DtdNj0Pax2+lGo1gQa9YSYblAvHqLO0XrkquxLS7GjtdfrCG2u9nU0qiIKjYbWV8LKqXDJ\nMxBYxdcRlUn169cnISEB7fq/+AUHB1O/ftHHfNIEQqmicmfa0afbXOXrSHwvIBia97MPY2D/Wtjy\ns338Odl2gwl25Ov659kLszrtoWZLiKinSYUqWxa+bqsmDn5Pf5uq5MSPtCVdKz611UPVGQICAmjU\nSNsflUWaQChVVHtXwskjENPD15GULSJQq7V9dLkTMtNh32pIWAq7ltnnDTNPLR8UaROJmi2hWqzt\nAapqI/sPjwqQAAAgAElEQVQcFOarT6Eqq2MH4Nf/QsuBFadbZlU2NTjflswueM32zFQRO+JQFZb+\nWpUqqm2/2ueG3XwbR1nnCoC659oHzl221MO2lGL/WtsQfd9aWPv1md3DVqlhE4nIBhBeG8JqQXgd\nCK8FYbXtc1CkHVFbqeKw6A1IT4E+T/o6ElXRiUD3MTDlOnv8azvY1xEpVWCaQJRBaRlu9h89weGU\ndI6cSOfoiQzqVw2hdd1ITqRn8s68LaRnuknLNKRnuknPdNOlcTX6ta3DifRMnpu5DgFEBBEQhC6x\n1bi4VS3SMty89uNf+Pv54e8SAlyCv58f7epHEh8TTXqmm5mr9pwxv0F0KI2qVyHTbVi35wj+zvQA\nlxDg8iM82J/w4ACMMaSmZ+Lys/P9hIrbe8K23yA6FiLq+DqS8ickynZl2LDr6dNTk+wgdlmPQ1sh\naSvs+RM2zob042duS/wgOApCqubyiLJ1iwOrQIDzHBgKgWEQEOoxL8Q2aHQFajJSmaUmweKJtl1P\n9aa+jkZVBs37Q/Vm8Nt/bXubinq+VBVO+U0g3h9w5rRmfaHbPeVifvrEfqSkZ5KalklqeiZhQf7U\n6HA5yR1up/1Tc5gc+Axgu8mKBKpEBEOXq8iIv4OXvt/I5MBnEAE/bJJQe3MwHLmS9I63M/3P3bzj\n9rh7ZqDWX8GQdCWp547m9Z828VnAM6eFViUkgGUxF7Gw1rW8OGdj9v6zHAlw8XV0d2ZGXMOcNfvO\nmB/o8mN9RFf+F3IVS7Yl5Tp/XXgXZodexrod+5jg/wIu3PiJwYWbQD/YHdqc5SGd2HngCLfL5wjG\nJkIYAgQOBjdkU3BrDiQfZ6D7R4RTvTL4+wlJwfXZFtSS/UdSuThzvv3ggAAuP+FIcF0Sgptx4OgJ\nemQsyJ4H4OcnHA2ux66Q5uw/epLuab+dCl7AJcKR0PrsCW3J/qMn6XpiHlXdh0jxr0rKq32oGR6E\nNLu0zPy+yvX8kKow+7HT54XXsd0ext8ER/fB5zfaqlGZaeBOtwN9BYZCcASkHIRt8yAzw46iXVh+\n/mDcgNjkRPzsST0owiaLrkA4sME50cup57Ca9qJTXLZ0Kms62NeRDWy7Dz8XrPvWmZX1CxSIbgwN\nzrOvV07xCMhZpnpTp0qN2PE4Oo6wfciH1Sz8Z1S5W/wOpB2FHg/4OhJVWfj52cE6p99le/Wr6F2C\nqwqj/CYQ5YjBkOk2+GNLFy586WdePH6qqoZLBH8/e5EQEezPAxc3o/GaKvi7/Jw7+UKgy94VrRLo\nYtOz/XBNegPhzDsVAS4/Pr25MzW/qsLJdDdpmW7SMtwkp6Tzyg9/8frMueTWG1pyajo/rN7LO39u\nzJ7mmaBkug17kk+wKfUodSODCUzzw4WbANIJIIMgMmieupzhaYmMqHKYFpkJuMjEn0xcZOIymcQd\nWcN1RyZCbsMEGIg9vp0ex+eQy8cCA3VT99Iu9ffTJ2d9FjdEpxykUcoqjAF/MrNWszIhLOUwNVI2\n4TYQyonTt++G0ONHqXpsE5DLfCD0yGGqHVmPYAgmDYOQkBZK8sHjJB1Po1Gsm6BcQlfFKCjcPoKj\nzpyXa4JibDLgzrQ9QbW52vaw8+0Ym1xkzTOZtseoevE2KVk52f64jPvUc5XqttpUZprdtNttt4+x\nT6mH4eAmu620Y6emY+w20o7b0hR3Jpw8emp6lqO7Yftvp2LOKXnHqW6DAX54Cpr00QSiuJw8Bove\nhGaXar/8qnS1GwI/PWfb3mgCocoJ8VXfuvHx8Wbp0qU+2XdpSM90M2/jAb5bvZdfNh6gZZ0IPhx5\nPgDPfLuW2hHBtKgTTpOaYdSOCC5SNZ8DR0+yYudhVuxMYt2eo2zaf4ydSSmnXZNEBPtTOzKY2pEh\n1I4IIrpKEFGhAUSGBBAVYp8jQwMIDwogOMCPoAAXwQF+BLr8bExH98HBjZC4yXlshkNb4Mhue6cu\nJ/8Q2z1ddpWSKPsIjnKqjITaqiQBIc7rrEeIrSvvF+A8+9tH9jT/HPN8P/Lx7R8v4/eth7jrwlie\nnbGeTo2i+WhUJ1x+WgStionJSjLMqUQGj2muIK+qXInIMmNMfHGFWxx8dm5Y8DrM+QeM+t42blWq\nNC14DeY8Bjf/CPU7+joaVYkV9LygJRAl4I2fNvHer1tJPJ5GRLA/PZrV4OKWtbLnP35ZqyJtNzkl\nnQWbDzLvr4P8tukgOw6lALb6TpOaYbSrH8lVHeoRWyOMJjXDOCc6lCpBhfgTH9kD25bZ+uZ7Vtjn\nY/tOzXcF2V5yqjeF2N5OY9Y6tlpHeF3byLUS9ZpzTXx9ft5wgPMaVuO5K9vw0JerGP/LZu7s3cTX\noamKQkTrRJeG9BP2Ai6mhyYPyjc6joB5L8Iv/4brpvo6GqXOShOIYmCMYfHWQ8THROPyE9xuQ6fG\n0Vx1bn16Nq9BgKvodwiTU9KZvWYv36zczYLNiWS6DWFB/nRuXI0bujQkrkEUbepFEhxQhDvyxxNh\n23zYOg+2/mJLGMDW+a7RAmIvtHW2azS31Tsi6msDUw8XNK3B4n/0ITw4gDb1Ipj/10H+8/1GLmha\ng7b1I30dnlKqoFZNhWN74crxvo5EVVZB4dDtXls1ccciOKezryNSKl9ahclLS7cd4pkZ6/hz52He\nuq4D/dp63yOPMYal25OYtHA7363eQ3qm4ZzoUC5rV4cLW9SkfYOooiclBzfBummw7hvYvdxOCwyz\nXZE2ugAadLL99weGev05KpNMt+HYyQz6vPQLDaJD+HJ0V/y0KpMq47QKE7Y62Ns9bJuW23/TEh/l\nO2kp8Gqc7d3vppn6W1Q+oVWYStie5FSen7WeaSt2UzsimOeubEvvFt41Zsx0G775czcT5m1h7Z4j\nRAT7M7xzDFecW5e29SKL3h3q8YO2V5fln8D+NXZavY7Q+zFo3NP2z+8K8Cr2yiolLYNrxi9kYPu6\njO4Zy0OXNufvX6zkq+W7GNyx6EPEK6VKyc7FsHcVXPayXrAp3woMhQv+DjMfhA2zoEV/X0ekVJ40\ngSiCjEw3Q95eyL4jJ7mrdxNu7xVbuLYGORhjmL1mH//5fgMb9x2jea1w/nVVWwbF1SU0sIjbNcb2\n6PL7eHsgcmfYpOHS5+0Iq5F6cVscQgP9CQlw8fnSndx2QWOu7lCfTxfv4N/frad/29pF//sppUrH\n4gm2i962Q3wdiVK2LcTid2yD/iZ9wF/79lNlk17dFEJyajphQf74u/x4eUgcNcODOaead1V9Nuw9\nyiNfreSPHYdpXKMKr197Lv3b1Cl69ZfMDFtFacFrtopSSDR0Gm37i6/Z0qtYVe6uia/PQ1+u4o8d\nh+nYsCqP9m/JNeMX8uGC7dzeK9bX4Sml8nJsP6ydBueNqlQdQKgyzBUAfZ+DT662NwC73evriJTK\nlbaILaDlO5K49L/zGP/LZgDiY6K9Sh5OpGfy0pwNDHh1PtsSUxh3dTvm3HcBl7WrW7TkwRhYOx3e\n6gJfjIQTR2yR/P1roe+zmjyUoAHt6hIS4GLqkp0AnBcTTe/mNRj/y2aSU9N9HJ1SKk/LPrQDEZ53\ns68jUeqUphdB077wyzhITvB1NErlShOIAvh+7T6GvbMIf5fQo2l1r7e3Ye9RBrw6n9d+3MTl7esy\n9/6eDDmvAf5FbRi9fQFM7ANTh9v3QybBXUshfqQdX0GVqLAgfwbF1WXan7tITrEJwwOXNCc5NZ2J\n87f4ODqlVK4yM2DZ+9C4t+2aWqmypP84O+jkrId8HYlSudIqTGfx0aLtPDltNW3rRfLuiPOoHuZd\nfcRpK3bx8JerCAv258OR59OzWY2ib+x4Inz/OKz4BCLqweWvQ/thdtA1Vapu6taI5rXDCfC3pUdt\n6kVyWbs6vPvrVm7sGuP170YpVcw2zIQju6D/C76ORKkzVY2BXg/D3Cdt7YJWl/s6IqVOc9Zb3iLy\nnojsF5HVecy/TkRWisgqEVkgIu2LP0zf2LjvKE9MW03v5jX57NbOXl0Epme6GTt9DfdOXkGbehHM\nuLt70ZMHY2DFZ/B6vO1dqfsYW+LQYbgmDz7SvHY4N3VrdFqj6fsvbsbJDDdv/rTZh5EppXK17AM7\ntk2zS30diVK563In1G4H346BYwd8HY1SpylInZkPgPyOsFuBnsaYtsAzwIRiiKtMaFYrnE9GdeLt\n4R296k3nRHomt3+8jA8WbGNkt0Z8ektnakYEF21jqYfh8xHw9Whb7H7bfLhorI7bUAaczMhk8uId\nLNt+CIDGNcIY3KE+Hy/azq7DqT6OTimV7chu2PITxA0DvyIMwqlUaXAFwJVvw8kj8O199uahUmXE\nWRMIY8w84FA+8xcYY5Kct4uAct8/6OdLdzJvo832uzapXvS2CcDxkxmM/GAJc9ft55lBrXliYKui\nDwK3YxGM7wHrv4U+T8JNs6BWqyLHporfC7M38NbPp9o93HuRrVv92g9/+SokpVROf04G47ZVPpUq\ny2q1gj5P2PP+kom+jkapbMXdiHoUMCuvmSJyq4gsFZGlBw6UzeK4Wav28NCXK5m0cBvejtKdnJLO\n9e/+zu9bD/GfIe0Z3iWm6Btb/A683x/8/GDkHOhxv945K2OC/F0MPb8BP67fR0JSCgB1o0K4ttM5\nfL4sga0Hj/s4QqWKTwGqt4qIvCoim5xqrh1KO8ZcGQN/fgbndIFq2s2yKgc63wlNLobZj8LuFb6O\nRimgGBMIEemNTSDy7DLAGDPBGBNvjImvUcOLxsMlZPWuZO6bsoK4BlG8Ouzcoo/8jK22NPLDJazZ\ndYQ3ru3AVR2KWDCTmQEzHrAjUza9xFZZqt+xyHGpknVtp4YAfPL7juxpd/ZuQqDLj//O3eirsJQq\nCR+Qf/XWfkBT53Er8FYpxHR2u5bBwY0Qd62vI1GqYPz8bFWmKjVgynBtD6HKhGJJIESkHTARGGSM\nSSyObZa25JR0bv9kGdFVAnnnhniv2jxkug1jpqzgjx1J/HdoHJe2qV20DZ1ItoPJLJkIXe+BoZ9A\ncESR41Ilr15UCBe1rMXkxTtIScsAoEZ4ECO6xTD9z91s2HvUxxEqVTzOVr0VGARMMtYiIEpE6pRO\ndPlY8Qn4h0CrK3wdiVIFV6Ua/O1jOL4fpt4AGSd9HZGq5LxOIETkHOArYLgxptzeYv1w4Tb2Jp/g\nzes6UM3LLjefnbGOWav38tiAVvRvW8TzZcoh+HAgbPvNds96yTNaZamcuK1nLFGhgew8dKrh9G0X\nNCYs0J+X5mzwYWRKlap6wE6P9wnOtDOUWvXW9BOw6ktoOVBvxqjyp14HGPQG7FgAX46yNRSU8pGz\n3mYXkc+AXkB1EUkAngQCAIwx44EngGrAm06VnwxjTHxJBVxS7urdhJ7NatC+QZRX23n/t62899tW\nRnZrxKjujYq2kWP7YdIVkLgJhn4KzS7xKiZVujo2rMoP9/c8bUTxqNBAbrmgMf/5fiMrdh4mzsvf\nmVIViTFmAk4PfvHx8SXX1cyGGXAyWasvqfKr7WB7jTD7EZh+t00o/HRMYFX6zppAGGPy7abCGHMz\ncHOxRVTK1u05QnSVQGpFBHudPCzbnsQ/Z6zjkla1eGxAy6Jt5MgemHQ5HN4J106B2N5exaR8w89P\nSEnLYOehVJrXDgdgZPdGTFq4jWdnrGXqbV28amOjVDmwC2jg8b6+M813Vnxmx35odIFPw1DKK13u\ngLRj8NOzEBQG/caBnk9UKavUaeuJ9Ezu/OQPRn6wpFh6XLrns+XUiQzmxSHtT7v7XGAph2DSINtH\n+fVfavJQzt320TJGf7yMTLf9bYUF+XP/xc1Zsi2J2Wv2+jg6pUrcdOAGpzemzkCyMWaPz6I5ngib\nf7R3cLU6qCrvLvg7dL0bFk+wnay4M30dkapkKnUC8fL3G9ly8DiP9m/p1d1gYwwPfbmSfUdO8Pq1\nHYgIDij8RtJS4LOhkLQVhk2GmG5FjkeVDUPPO4etB4/z3epTycKQ+Po0qxXGv2atJy3D7cPolPKO\nU711IdBcRBJEZJSIjBaR0c4iM4EtwCbgHeAOH4VqrZsOJhPaXOXTMJQqFiJw8TO2g5UlE2HK9ZCm\nXYWr0lNpE4jlO5J4Z/4Whp1/Dt2aVPdqWx8v2s53a/byf5c2L1rd9swM+GIk7FwMV70DjXp4FY8q\nGy5tU5vG1avw5s+bsku4/F1+PNq/JdsTU5i0cJtP41PKG8aYYcaYOsaYAGNMfWPMu8aY8U7bOJze\nl+40xsQaY9oaY5b6NOA1X0F0LNRu59MwlCo2IraDlf4vwsbv4IPLbPsIpUpBpUwgTmZk8n9frKRW\nRDCP9G/h1ba2HTzOP2eso2ezGtzcvXHhN2AMzHwANs6C/i9Aa+1asKJw+Qm394plze4jp5VC9Gpe\nkx5Nq/Paj5s4nJLmwwiVqiSO7Ydtv9rSB60rriqa82+xHa4cWA/je8Dmn3wdkaoEKmUCcfREBo2q\nV+G5q9oWrbqRwxjD49NWE+DyY9zgdkVr97D0PVj2AXQfYw8CqkK5qoOtsjRz9eltHv4xoCVHT6Tz\n0pxy2/OxUuXH2mlg3NBaqy+pCqp5Pxj1PYREwUdXwOx/6FgRqkRVygSielgQE26Ip3fzml5tZ/qf\nu5n/10EevKQZtSKCC7+BnYth1kN2iPoLH/cqFlU2ufyEj0d14pW/xZ02vUXtCG7oEsPHv2/njx1J\nPopOqUpi9VdQoyXUauXrSJQqObXbwC0/QfwoWPg6vHMhbF/g66hUBVXpEoiPFm1ny4FjXm8nOTWd\nZ75dR7v6kQzvElP4DRzdZ4ekj6wHV7+jvYJUYDUjgvHzExKPneTYyVMD/zxwSTNqhQfz6FerSM/U\nBtVKlYgju2HHQm08rSqHwFC47D+2M5bUw/B+P9vGMjnB15GpCqZSJRBrdx/hiWmr+fT3HV5va9x3\n6zl0/CTPXdkWV2GrLmVmwOc3wskj8LdPIKSq1/Gosi3peBq9XvyZt37elD0tPDiApwe1Zv3eo7wz\nf4sPo1OqAlvzNWC0+pKqXJr3g7uWQM+HYN238Fo8zHoYkn07FIuqOCpNAmGM4dmZa4kMCeDuC5t6\nta1VCcl8ungHN3aNoU29yMJvYP6L9o7YwFdskaOq8KpWCeTCFjWZOH8ruw+nZk+/pHVt+rauxStz\n/2J7onbBp1SxW/MV1G4L1Zv4OhKlSldgKPR+1CYSra+0Y0a80t6OYL13ta+jU+VcpUkgfly/n982\nJXJfn6ZEhha94TTAuNnriQoJYMzFzQq/csIy+GUctB0C7YZ4FYcqX/7etzkAz3y79rTpT13ehgCX\nHw9/uQq327sBDZVSHpJ3QYJz8aRUZVW1IVz5FtyzHDqOgJVTYXw3mNDbduSSetjXEapyqFIkEG63\n4YXZG2hUvQrXdW7o1bYWbD7I/L8OckevJoXvwSntOHx1C4TXsV22qkqlftVQ7unTlFmr9/Lj+n3Z\n02tHBvP4ZS1ZuCWR8fM2+zBCpSqYjd/Z5xaX+TYOpcqCqg1hwItw/zq49N+2l6Zvx8ALsTDpCjsg\nnVZxUgXk7+sASsOJjEziGkTRJbYaAa6i50zGGMZ9t4HaEcEM71KERGTO43BoC9w43Xa1piqdW3o0\n5uvlu/hp/QEubFEre/qQ+AbM++sgL83ZSOfG1ehwjraLUcprG2ZBdGOoXoTSYqUqqtBo6DwaOt0G\nu5fbbo7XfwszHrCPak0gpgfEdIe659r/IR0/ReVQKRKI0EB/nr/a+9FHv1+7jxU7D/P8VW0JDihk\nr0mbf4Sl70KXu6DRBV7HosqnQH8/ptzWhao5qtGJCM9d2ZYVOw5zz2fLmXlvD6/GKFGq0jt5DLb+\nAuffqhc/SuVGBOp1sI+LxsKBDbD5B9g6D1Z9Acvet8sFRUKddlA3Dmq1hWqxNqkIjfZl9MrHKnwC\n8ceOJPxEiGvg3R3/TLfhxTkbaFy9CoM71i/cyump8O39EB2r4z0ooqsEArA98TgHjp4kPsYehCND\nAnh12LkMeXshj361iteGnYvohY9SRbP5R8hMg2aX+joSpco+EajZwj663Gl7i9y/BnavgD0r7PPv\nEyDTY3C6kKr2uqZqQwirDeG1bRXtrOewmhAUrgl8BVWhEwhjDGOnr+FwSjo/Pdir8N2tevjmz91s\n3HeM1689F//CVoOa/x9I2go3TIOAIgw4pyocYwz3Tl7BjkMpfHt3d+pGhQDQsWFV7r+4GS/M3kCr\nuhHc0Ut7jlGqSDZ+B8FRcE5nX0eiVPnj8oc67e2DG+20zHQ4tBUObYbETZC42b7evRyO7oX0lDO3\n4+cPwZH2fzEk6tRzYBgEhEJAiMez8zow1D77B4MrAPwCbDx+AXZ7Wa9dzns/f4/XATZh0aSlxFXo\nBOLnDQdYmZDMv68uwlgNHowxjP9lM81qhdG/TZ3CrXxgI/z6su11qXGvIsegKhYR4aUh7bn8tV+5\n89M/mHJrFwL9bWJ6R69YNuw9yrjvNhBTrQr92xbyN6dUZefOtAlE00vshYVSynuuAKjRzD5yMgZO\nHrWJxNE99vnYXtvD04nDznOyfZ20zXYqk55qkw53esnEK36Ak0xkv/bL8T4r2chrnsfrogfixapF\nWLdWG7h2ctH3WUAVOoF47ce/qBcVwpXnFrLKUQ7z/zrI+r1HeWFwO/wKk4gYAzPut5l032e9ikFV\nPLE1whg3uD13fvoHz81cx9jLWwM2uRg3uB27DqcyZsoK6kaFeF0FT6lKJWEJpCRCc62+pFSpEIHg\nCPvILcHIT2a6TSSyEor01FOvM9PBneE8p9ubA9mvM2xVK3f6qeXcGfbay7gB59mY018bt91vnvNy\nWa+ovOqZvYgrR3nX22hBVdgE4o8dSfyx4zBjB7bKvrNbVO/M30LN8CAuj6tbuBVXfQ7b5sOA/9i6\ngErlMKBdHZZuj+H937bRJbYafVvXBiA4wMWE4R254s3fuPnDpXwxugsx1av4NlilyosNM211hiYX\n+ToSpdTZuALAFWmrOqly46xX1iLynojsF5Fchy0U61UR2SQiK0WkQ/GHWXib9x+jdkQw18Q38Go7\na3cfYf5fBxnRLYYg/0L0vJSeCnPHQp046HiTVzGoiu2Rfi2558ImdI2tdtr0amFBvD/iPDLdboZO\nWMS2gzpStVIFsmGW7YJSL0iUUqpEFOTW/AdAfuXA/YCmzuNW4C3vw/LeNfENmP9Qb6oEeVfIMnH+\nFkIDXVx3fiGLhBa9CUd22apLfpVivD5VRIH+ftx/SXPCgwM4fjKDTfuPZs9rUjOcT2/pTFqmm79N\nWMhWTSKUyl/iZji4EZr183UkSilVYZ31ytYYMw84lM8ig4BJxloERImIT1t9JiSlYIzxatA4gD3J\nqUz/czd/O68BkaGFaIh3/CDMf9mewGK6exWDqlwe/PxPhk5YdFqi0LJOBJ/e0on0TMPQCQtPSzCU\nUjkc2mKf657r2ziUUqoCK45b4/WAnR7vE5xpPnH8ZAb9XpnPv7/b4PW2PvhtG25jGNmtUeFW/OXf\ntvHPxU95HYOqXB7s2xy3gesn/s6WA8eyp7eoHcFnt3Qm02248s0FzP/rgA+jVKoMc2faZ1eFbeKn\nlFI+V6p1a0TkVhFZKiJLDxwomQugL5YlcPREBpe0ruXVdk5mZDJ16U4uaVWbBtGhBV/x4CZY+h50\nuAFqNPcqBlX5xNYIY9LI8zmRnsng8QtZviMpe17z2uF8fWc36kWFMOL9JUxauM1ncSpVZhkngZBC\ntFlTSilVKMWRQOwCPFsq13emncEYM8EYE2+Mia9Ro0Yx7Pp0brfh/d+2Etcgig7nVPVqW9+v3UdS\nSjrDOp1TuBV/fBpcQdDrEa/2ryqvNvUi+eL2rlQJcnHP5OWkZ57qQq5+1VC+uL0rvZrV4Ilpa3j4\ny5WkpGX4MFqlypisEgg/TSCUUqqkFEcCMR24wemNqTOQbIzZUwzbLbRfNx1kW2IKN3WL8Xpbkxfv\npF5UCN2bVC/4SvvWwNpp0OUOCPeuBERVbo2qV+Gr27sxYXg8AS4/MjLduN22T+iwIH8m3BDPHb1i\nmbJ0JwNe/ZUVOw/7OGKlyggtgVBKqRJXkG5cPwMWAs1FJEFERonIaBEZ7SwyE9gCbALeAe4osWjP\n4vNlCURXCeTSNrW92s7OQyn8uukgQ+IbFG4E61/GQWA4dPbZV6AqkBrhQbSsEwHAi3M2MvLDJSQe\nOwmAy0/4v0tb8NktnUnLcHP1Wwv4z/cbOZGe6cuQlfI9LYFQSqkSV5BemIYZY+oYYwKMMfWNMe8a\nY8YbY8Y7840x5k5jTKwxpq0xZmnJh527Z69swzs3dCzceA25mLJkJ34C18QXYgTr/ets6UOnWyE0\n2qv9K5VT/aohLNicSL9X5vPT+v3Z0zs3rsbMe3twefu6vPrDX1z88i/MWbMXY7wa/lKpsxKRS0Vk\ngzMG0MO5zI8UkW9E5E8RWSMipTMgTtaosVoCoZRSJaZCDVAQERxAx4beXbxnZLr5fNlOejarQd2o\nkIKvOO8FCAiFznd6tX+lcnN954Z8fUc3IkMCuOmDJdz20VJ2H04FIDIkgJf/FsenN3ciJMDFrR8t\n44b3Fp/WAFup4iQiLuAN7DhArYBhItIqx2J3AmuNMe2BXsBLIhJY4sFll0BUqNObUkqVKRXiCOt2\nG27+cCk/rNvn9bZ+3nCAfUdOMvT8QjSePrARVn8F598CVaqdfXmliqBV3Qhm3NODhy5twa9/HeSg\nU50pS9cm1Zl5Tw/GDmzFql3JXPnmAoa/+ztLtuU3jItSRXI+sMkYs8UYkwZMxo4J5MkA4SIiQBh2\nPKGSb/GvbSCUUqrEVYgEYv6mg8xdt4+UNO/rf09espMa4UFc2KJmwVea9wIEhEDXu73ev1L5CfT3\n4/ZesSx8tA/t6kcB8MS01fx37kaSU9Pxd/kxolsjfnvoQh7p14K1u49wzfiFDHr9V6Yu2ak9Nqni\nUoaib4QAACAASURBVJDxf14HWgK7gVXAvcYYN7ko1i6+tQ2EUkqVuAqRQHz2+w6iqwR6PfbDoeNp\n/LxhP1d1qFfwUayTtsPqLyB+JFQpRI9NSnkhItiOjJ7pNhw4epL/zv2Lrv/6gUf/t4o1u5OpEuTP\nbT1j+fWhC3nq8takpGXyf1+upNNzP/DIV6tYsOkgmW5tJ6FKVF9gBVAXiANeF5GI3BYs1i6+tQRC\nKaVKXLkfqnP/kRN8v24fo7o38rrx9KzVe8hwGwa1L8RA2r+PB/HTnpeUT7j8hLeu78ia3cm8/9s2\nvlyWwKe/7+DR/i249YJYQgJd3Ng1hhu6NGTJtiQ+/X0701bs4rPFO6geFkTf1rXo1bwmXWOrUSWo\n3B8OVOkpyPg/NwHPG9uif5OIbAVaAItLNDItgVBKqRJX7q8Y/rd8F5luw9/Oa3D2hc/imz93E1uj\nCi3rhBdshRPJ8MckaH0VRBYi6VCqmLWuG8mL17Tn8QGt+Gp5Ahc0s3dx5208wH++30jv5jXp3rQa\nL17TnvRMw4/r9/Ptyt38b/kuPvl9BwEuoWPDqpwXE02HhlXp0KAqkaEBPv5UqgxbAjQVkUbYxGHo\n/7d37/FV1Xf+71+fvXMnQQgh3MKtCmgUDIIgAyrWWi7BUtvpCNZxnI4Pfzg406H6G/XoUX+dc3Ha\nqU5/p7X+1DJ1zqOVnnZQLmq1iBZqhxrohEtAJEEukUsghCQQctl7f88feyeEkMsmydrZO7yfj6bZ\na63vWuuzF9v1zWd/Lwu4p02ZQ8DtwGYzGwZMIjzlt7c0C5OIiOcSPoEYfkUa35iWx5VDM3t0nOM1\n9fzxs1N8+/YJhMf8ReFP/w6NZ8IPjhOJA1dkJPPXs8e3LAedwznHv77/KS9sgKzUJKaOHcy/fGMK\nhVNGcLahie2Hq/ndpyf4qOwkL35Y1tK1aUJuJtePHsTVw7OYOCyLScOzyM1Kjf6/D+m3nHMBM3sY\neBfwAyudcyXNzweKTPP9T8DPzGwnYMBjzrmTngenWZhERDyX8AnE4oJRLC7o+bf/b+04inOwaMrI\n6HYIBmDLSzB2Doyc2uPzi3jhtkm53DYpl6qzjfyhrJLfl55k1+fVDEoPz6b5L+99ym92HWPCsCym\nj83mqwWjCDlHQ1OQPx06zYd7T/DrbeUtx7siPZkrhw5gdHYGY7IzGJ2dwejBGYwclMbQrFQyUhL+\nliJRcs69TfhBoq3XvdTq9RHgy7GOS2MgRES8l9C1ffHh00zIzeyVvtvrdhwhf8RArsqNsiVjzxqo\nKYeF3+/xuUW8NnhACoVTRlA4ZcQF66ePzabyTCNlJ86w9cAp6hqDZKYmsfPZL2NmPLu2hKIDp8hI\n8WNmNDQFqTkXYNvBKtZtP0LbcdiZqUkMzUo9/5OZysD0ZK5IT2ZgWlL4d/NyZF16sp+kaCctEOlK\ncwuE6TMlIuKVhE0gAsEQf/OzImZflcP/XNqzFoDDp+r4r0OneXzB1dHt4Bz84UeQ/QWYOL9H5xbp\nS62TCuccx2rqOV7T0NJNadjANLIHpHCsup5jNfXU1gcYNSidjx7/Ik3BEN98ZQsfHwg/sC7JZzQF\nQ1TVNTI0K5XdR2r4vKqOxmDXsz35zUjyGylJPlKTfORkppKe4qcxEMJnkOz34fcZfp+P9GQfeYMz\nSPIb1XVNBEIhknw+kpN8JPmMtGQ/44Zk4Pf5qDzTQGMwhAE+M8wHKf7w/j4zTtbW0xBwmIHfB2ZG\nit/H6Ozw9oqa+pb9m69Jkt8YnZ0BhCdxONcU5HyvLiPJZ+QNzsAs3DWyoSn8B62ZYYTf56jIQyor\nautpCIQwzncLa739eE099a2Obxh+3/nzj88ZQFqyvmm/gNMgahERryVsAvFRWSWVZxsv+ka1O9bt\nOAJA4eQoj1VeBEf+BAv/Rf1spd8wM0Zckc6IK84/gf2huVfy0NwrW5brGgPU1oefJZHs9/HtL03k\nQOVZTtc1UXOuibrGIANSk1qS8WfXlrD14CnONgQ52xCgMRhicEYK/33eJGrONfGT35VxsLKOoHME\nA46GQIhQip8x2RmcawpSXHG65XzNfAaDMlJoCoY42xC4qBXkcrL+7+Zw3agr+jqM+BLSIGoREa8l\nbAKxbvsRstKSmDuph3OGA+u2H+WGMYNavtXr0taVkJIF1y/p8blFEklGStIF4xxmX5XD7Ks6fv7J\ns1+5ttPj3X3jaAIhR1MwRFPA0RgM4Zwjd2AaAOVVdZxrDBJy4WdehJwj2e9j0vDwTGl7j9VSU99E\nMBjetykYwmfGdaOuIOQc2w+f5vS5JkKRLKN5/6ljBhFysOvzak7XNeGcI4TDuXBiNCXvCkIOSo5U\nU32uKfxMZcKNj6lJPibnDcLh2HusNry9lZQkH5Mjf9TvOVYTToBc6+3GlLxBOAefHKuh5tz5BMkR\nOX5k/73Ha1sSKOfO79+8Pep71uVELRAiIp5LyASivinIu7uOMe+64T1+9sP+E2fYc7SGpxflR7dD\n3SnYtRqm3gupUU73KiLtMjOS/RZ+cGPKxdvzBnf+B3JzItGRL187vNPtE4d1vv+N47I73X7zhM6/\nwJg7qfMn2t9+TecPv+wqfmmHxkCIiHguIe+wH5WepLYhwFeuj3LGpE5s2HMcgHnXRVlRb38dgg0w\n/a97fG4REellLhhOHjTdsIiIZxKyBeKLV+fyHw/9Gdfn9bzv74bdFeSPGNgyaLFTzsHWf4O8G2H4\n5B6fW0REelkoqPEPIiIeS8gWCLPwU3N7OvXjqbONbD14ii/ld96NoMWB30PlPpj+rR6dV0REPOKC\nGv8gIuKxhEwgessHn1QQcvClazrvp9xi60pIuwKuvcvbwEREpHtCIbVAiIh47LJOIDbsOc6wgalc\nNzKKrlBnTsCedXD9PZAcRXcnERGJPRdSC4SIiMcu2wSivinI7z49we3XDMPni2Kw3fZfQKgJpt3v\neWwiItJNzYOoRUTEM1HdZc1svpntNbNSM3u8ne1XmNk6M9tuZiVmFvdTFG3ZX0ldY5A7uphGEQgP\nni7+RXjwdG6UT6sWEZHYC2kMhIiI17pMIMzMD/wYWADkA0vNrO1DE5YDu51z1wNzgR+YWTuzuseP\nDXuOk57sZ9aVQ7oufLQYTnwC1y/1PjAREek+p1mYRES8Fk0LxAyg1Dm33znXCKwCFrcp44AsMzMg\nEzgFBIhTzjk27K7glok5pCVHUdEUvw7+VLjua94HJyIi3acWCBERz0WTQIwCDrdaLo+sa+1HwDXA\nEWAn8G3nXKjtgczsQTPbamZbT5w40c2Qe67kSA3Haur5UjTdlwKNsPNXMGkBpA/2PjgREek+p1mY\nRES81lsjzeYBxcBIoAD4kZkNbFvIOfeyc266c2760KFDe+nUl+7DvRUA3HZ1FNO3lv4Wzp2Cgns8\njkpERHosFASfBlGLiHgpmrvs58DoVst5kXWt/TWw2oWVAp8BcTvaePO+k1w7ciA5maldFy7+BQwY\nCld+0fvARESkZzQGQkTEc9EkEEXABDMbHxkYvQRY26bMIeB2ADMbBkwC9vdmoL3lbEOAPx2qYs6E\nnK4L152CT9+FyX8B/mTvgxMRkZ7RGAgREc8ldVXAORcws4eBdwE/sNI5V2JmyyLbXwL+CfiZme0E\nDHjMOXfSw7i77Y+fVdIUdNx8VRRdqHb+OvzshwLNviQikhDUAiEi4rkuEwgA59zbwNtt1r3U6vUR\n4Mu9G5o3Nu87SWqSj+njohgQvfP/g2HXwfDJ3gcmIiI9pxYIERHPXXYjzTbvO8mM8dldT996+hCU\nF2nqVhGRRKJZmEREPHdZJRBHq89RWnGGm6MZ/1DyRvj3tUogREQShmZhEhHx3GV1l/39vvCwjJsn\nRDH+YddqGDkVssd7HJWIiPQajYEQEfHcZZVAbN53kpzMVK4entV5wcoyOFqs1gcRkUSjMRAiIp67\nbBKIUMjxUelJbp6Qg5l1Xril+9Jd3gcmIpKAzGy+me01s1Ize7yDMnPNrNjMSszsdzEJTC0QIiKe\ni2oWpv5gz7EaKs82MueqKMc/jJ4Jg0Z3XVZE5DJjZn7gx8AdQDlQZGZrnXO7W5UZBLwIzHfOHTKz\n3JgEFwqpBUJExGOXTQvE5sj4hy4fIHfiUzi+S92XREQ6NgModc7td841AquAxW3K3AOsds4dAnDO\nVcQkMhcEu2yqNhGRPnHZ3GW37K/kqtxMhg1M67xgyWrAIL9tXSgiIhGjgMOtlssj61qbCAw2sw/N\nbJuZ3dfRwczsQTPbamZbT5w40bPINAZCRMRzl0UCEQw5th2o4sZx2V0X3rUaxs6GgSO8D0xEpP9K\nAqYBhcA84H83s4ntFXTOveycm+6cmz50aBSz5HVGYyBERDx3WSQQnxyrobYhwIzxXTx9+sSncHIv\n5H8lNoGJiCSmz4HWg8TyIutaKwfedc6ddc6dBDYB13semVogREQ8d1kMoi767BRA1y0Qe98K/766\n0OOIREQSWhEwwczGE04clhAe89DaGuBHZpYEpAAzgRc8jyzBWiBCIUddU5C6hgANgRCBkCMYCtEU\ndASCjkAovC4QdDhcj85lGGZg0DIb4fnlSAlrLhsuYy1lzm+jzbrm1z0+XpvtrY9Hm33aOx7GBft0\ndDzarLvoOnUwUWNH8zd2NLOj39fFjI8iCezySCAOVDFqUDp5gzM6L/jJW+GHx12RF5vAREQSkHMu\nYGYPA+8CfmClc67EzJZFtr/knNtjZr8BdgAh4FXn3C7PYwsFOXUuQLZzXU/Z7ZHqc00cOHmWg6fq\nqKip58SZBk7Uhn9OnW3kbEOAs41BzjYEqGsM9kmM4r0Hb/kC/9vCa/o6DBFP9PsEwjnHxwdOMfvK\nIZ0XrDkK5UXwxadiE5iISAJzzr0NvN1m3Uttlr8PfD+WcZ1raOKPR6vJOVDFjPFRjHvroSOnz/Ff\nh06z4/PT7CyvZu+xWirPNl5QJsXvY2hWKkOzUhk2MI3M1CQGpCYxIMXPgNQkMlOTyEj1k+L3kez3\n4fcZyX7D7/OR5DeSfIbfZ/h6kBA5R7gFI/y/C9a5yDrnwltc5P9atl2wj4uUDRdyURzvom3tHI82\n+7Z3PFrFFz7O+VhaH6/dfdus6/g6tb+xo306OtSW/ZX87KMD/M2c8V1P3iKSgPp9AnGwso4TtQ3c\n2FVFsjdSD169yPugRETEEy4UIITxybEaTxKIYMjxh7KTfPDJCTbtO0FpxRkgnCRcMyKLO/KHMT5n\nAONyBjB2SAbDB6ZxRXpyn7WGSN/4asEobvvBh7yyaT9PLcrv63BEel2/TyA+jox/mNHV+IdP3oLs\nK2Ho1TGISkREPOFChPC1/GHfW0oravn1ts9547/KOV7TQGqSjxnjs1ly42hmjh/CpOFZpCRdFvOS\nSBTGDMngK9eP5Od/PMSyuVeSk5na1yGJ9Kr+n0AcOMXgjGSuys3suFB9NXy2CW56qOPRUyIiEv9C\nQYL42He8dxKI7YdP88P397Hxkwr8PuO2Sbn8j6+MYu6kXNKSE2ewtsTew1+8ivU7jvBP63fzwyVT\n+zockV7V7xOIogOnmD4uu/Pm432/hVCTui+JiCQ4c0FC+NjXwxaIPUdr+OfffMKHe08wKCOZR788\nkbtvHMPQLH2TLNG5cmgmfzv3Kn74/j4WF4zki1cP6+uQRHpNv04gKmrqOVhZx70zx3Ze8JP1MCAX\n8m6MTWAiIuINFyLofJw808DpukYGZaRc0u71TUF++P4+Xt60n4FpSfzj/EncN2scman9uroUj/zt\nbVfyzq6jPPYfO3lz+UBGDUrv65BEekVUHTbNbL6Z7TWzUjN7vIMyc82s2MxKzOx3vRtm93x8IPL8\nh84G0gUawi0QVy8En/qviogkMnPhLkzAJY+D+OP+Sub/6yZ+8mEZX5s6ig8encvfzr1KyYN0W2qS\nnx/dcwP1jUG+9W9F1NQ39XVIIr2iy7+YzcwP/BhYAOQDS80sv02ZQcCLwFecc9cC3/Ag1ktW9Nkp\n0pP9XDtyYMeFDvweGs/ApIWxC0xERDzR3IUJiLobk3OOlzeVsfSVLTjgFw/M5PvfuP6SWy9E2jNx\nWBY/uXcaZSfOcM8rW6iore/rkER6LJqv3GcApc65/c65RmAVsLhNmXuA1c65QwDOuYreDbN7ig5U\nccPYQST7O3mb+34LSWkw/pbYBSYiIt5w7pJaIM42BHj49f/i/3r7E+ZfN5y3/v5m/uyqHK+jlMvM\nnAk5vHzfNMoqznLXj//QMkOkSKKKJoEYBRxutVweWdfaRGCwmX1oZtvM7L7eCrC7zjUG2Xu8lqmj\nB3decN974eQhWf0SRUQSXXMXpjHZGV22QBw4eZavvfgH3tl5lMfmX82P77lB3ZXEM1+8ehi//G83\n4fPB3S//J0+v2cWJ2oa+DkukW3rrTpkETANuB9KB/zSzLc65T1sXMrMHgQcBxowZ00unbt+uI9UE\nQ46C0YM6LlRZBqfKwtO3iohIwrPIcyBuGDOId0uOc6K2od2ZkzZ+cpxvryrG7zNe+9YMbp4wtA+i\nlcvNlLxB/Obbt/DPv/mEn//xEL/eVs6fT8vjnpljmDQsSw8clIQRTQvE58DoVst5kXWtlQPvOufO\nOudOApuA69seyDn3snNuunNu+tCh3t6stx8+DcCU0Vd0XGjfe+HfE+7wNBYREYmN5haIh+ZeRWMw\nxIsfll6wPRhy/HDDPv7mta2MHpzBuofnKHmQmBqQmsR3F1/Hb1fcwvzrhrPq48PM/9fNzP2XD/k/\n1u/mD2UnOdcY7OswRToVTQtEETDBzMYTThyWEB7z0Noa4EdmlgSkADOBF3oz0EtVfPg0owalk5uV\n1nGhfe9BziQYPC5mcYmIiHeaWyAm5Gby9RtG8fMth7j3prFcOTSTT47V8OQbu9h2sIqvTR3F/3nX\nZNJT9DA46RtfGJrJ839RwJMLr+E3Jcf47e7j/Pt/HuTV33+G32dMGpbF9aMHMSE3k/FDB/CFnAGM\nGpROUmfjOkVipMsEwjkXMLOHgXcBP7DSOVdiZssi219yzu0xs98AO4AQ8KpzbpeXgXdle/npzrsv\nNZwJz8A048HYBSUiIp4ygoQwfD7j72+fwPodR7nj+d8xOjuDg5V1DExL4gffuJ6v3TBK3UUkLgzJ\nTOWbM8fyzZljOdMQYEtZJdvLT1N8+DRv7ThCTX2gpWyy3xg9OIPcgankZqWRm5V6wevszBQGpiUz\nMD2ZASl+fcbFM1GNgXDOvQ283WbdS22Wvw98v/dC677KMw0cPnWOv7ypkwfIfbYJgo0w4cuxC0xE\nRDzlcyGchVsV8gZn8O4/3MKqokOUHKnhr2aN4ysFI8nJ1NOkJT5lpibxpfxhfCk//NRq5xyVZxs5\ncPIs+0+e5bOTZzlUWcfxmnqKD5+morae+qZQu8fyGQxMT44kFEkMTEtmQGoS6cl+0pP9pCX7SEvx\ntyynp/hJSw7/pPiNZL+PJL+P5ObXvvDv8HojJfI72e8j2Rd+neQ3fNb8gxKYfqxfTjexo7wagOvz\nOmmB2PcepGTBmFkxikpERDzlHIYD3/luSaOzM/jv867uw6BEus/MyMlMJSczlenjLn4ornOO2oYA\nFTUNVNTWc7quiZpzTdTUN1FzLkBtfRM19QFqzjVRfa6Jqrpz1DcFOdcY5FxT+Kcx0H4C0jvxc0Ey\n4WtZjrz22UXb/Wbh175wWeN8ItKSjrTKS6zlXNbOuublVtva5DSd7dfeMaydc1900D40ITeTf/nG\nRcOQe12/TSDM4LpRHQygdi6cQFw5F5L0oCARkX4hFB546kx9xOXyYGbhFoa0ZK7KzezWMYIhR0Pg\nfFJR3xSkMeBoCoYIhEI0BSOvg47GyO9AKERjIEQg5AgEQzQGw78DIYdzjmAIQi78OuTCr0OOyLbz\n69puD4XcBWWbXwNEfuGca4ndXfQCXGShuZjrbFur6+DaOVjbcu2du/Xx40GspqLulwlEyZFqxucM\nYEBHF7FiN9R8DnMfj21gIiLiHReZucY0MFokWn6fkZGSREZKv/yTUDzSL7+m2X20hvwRAzsuULoh\n/PuqL8UmIBER8V5LC4QSCBERL/W7BKL6XBPlVee4dmQnz3/Y/yEMvRoGjoxZXCIi4rGWFoh+V7WJ\niMSVfneX3X2kBoD8kR20QDTVw8E/wBdui2FUIiLiuUgLROtB1CIi0vv6XwJxNJJAdNSF6fAWCNTD\nF+bGLCYREYkBF5lNRl2YREQ81e8SiJIj1eRmpTI0q4N5vvd/CL4kGDc7pnGJiIjH1AIhIhIT/S6B\n2H2kpuPuSwBlH0DeDEjNil1QIiLiPadB1CIisdCvEoiGQJDSijMdd1+qOwVHt6v7kohID5nZfDPb\na2alZtbhnNhmdqOZBczszz0PKtICYWqBEBHxVL9KIA6crCMQckwa3kHrwme/AxxcqQHUIiLdZWZ+\n4MfAAiAfWGpm+R2U+2fgvZgEpudAiIjERL9KIEorzgB0/DTGsg8gdSCMvCGGUYmI9DszgFLn3H7n\nXCOwCljcTrm/A/4DqIhJVM0tEP5+VbWJiMSdfnWX3VdRixlcObSDBGL/hzDuZvDraYsiIj0wCjjc\nark8sq6FmY0C7gJ+0tXBzOxBM9tqZltPnDjR/ag0C5OISEz0qwSitOIMowdnkJbcTuVxaj+cPqjx\nDyIisfGvwGPONf9V3zHn3MvOuenOuelDhw7t/hlbxkDoSyIRES/1q7tsacWZjrsv7f8w/FvjH0RE\neupzYHSr5bzIutamA6vMDCAHWGhmAefcm55F5TSNq4hILPSbBCIQDLH/5FlundjBt1f7fwcDR8GQ\nq2IbmIhI/1METDCz8YQThyXAPa0LOOfGN782s58B6z1NHkCzMImIxEi/SSAOV52jMRDiyvZaIJyD\ngx/BF26D8LdhIiLSTc65gJk9DLwL+IGVzrkSM1sW2f5S3wSmBEJEJBb6TQLRPAPThPYSiJP74OwJ\nPX1aRKSXOOfeBt5us67dxME5d38sYlILhIhIbPSbQdT7KmoB2m+BOPj78O+xc2IYkYiIxFRkvLbP\n12+qNhGRuBTVXTYunzjaRlnFWYYNTGVgWvLFGw98BJnDYMiVsQ5LRERiRbMwiYjERJd32VZPHL2D\n8FzfRWa21jm3u51ysXviaBuHTp1l7JABF29oHv8wdrbGP4gkgKamJsrLy6mvr+/rUPqNtLQ08vLy\nSE5u5wuW/kRjIEREYiKar2lanjgKYGbNTxzd3aZc8xNHb+zVCKN06FQdN09oZwamU/uh9qjGP4gk\niPLycrKyshg3bhympL/HnHNUVlZSXl7O+PHju94hkUVaIHx+JRAiIl6KpgtTrz1xtNeeNtpGfVOQ\n4zUNjB6ccfHGgx+Ff2v8g0hCqK+vZ8iQIUoeeomZMWTIkMujRcepC5OISCz01kizqJ442mtPG23j\n89PnABidnX7xxgMfQUYODJ3Ua+cTEW8peehdl831bBlErRYIEREvRfM1TXw+cbSVQ6fqABiT3UEL\nxNg/0/gHEZH+LhROIExdmEREPBVNC0TLE0fNLIXwE0fXti7gnBvvnBvnnBsH/Br421glDwDlkQRi\ndNsEouogVB+Gceq+JCLRqayspKCggIKCAoYPH86oUaNalhsbGy/pWPfeey9vvtn5rfCXv/wl+fn5\n+Hw+iouL2y1TWlpKeno6BQUF5Ofns3z5cpxzjB07lrKysgvKPvzww/zgBz+4pDj7jUgXJp+6MImI\neKrLu2zcPnG0lcNV50hJ8jE0M/XCDS3jHzSAWkSiM2TIkJY/5J999lkyMzN59NFHPTvf5MmTefPN\nN/nWt77VablJkyZRXFxMU1MTc+fOZd26ddx9992sWrWKJ598EoBgMMjq1av5+OOPPYs3nrlQAEMt\nECIiXovqa5q4fOJoK4cq68gbnI7P16ab0sGPIH0w5ObHOiQR6QX/Y10Ju4/U9Oox80cO5Jk7r+3W\nvnfeeSdHjhyhvr6eFStW8MADDxAIBMjJyWHZsmW88847ZGRksGbNGnJzcy/Y94knnqCiooJXXnnl\ngged5edf2v0pOTmZWbNmUVpaytKlS7nvvvtaEogPPviACRMmkJeX1633l+iCwSBJgF8JhIiIp/rF\n4zoPV9V1MP7hP2HMLNBTSUWkF7z22mts27aNoqIinn/+eaqqqgCorq7m1ltvZfv27cyaNYuVK1de\nsN+KFSuoqanh1Vdf7fFTks+ePcvGjRuZPHkyU6dOpampid27w7Nqr1q1iqVLl/bo+IksGAgAmoVJ\nRMRr/eIue/hUHTeMGXzhyrMn4VQZ3PCXfROUiPRYd1sKvPLCCy+wdm14CFh5eTllZWUUFBSQnp7O\nggULAJg2bRqbN29u2eeZZ55h9uzZvPjiiz069969eykoKMDn83HXXXdxxx13ALB06VJef/11nn76\nadatW8dzzz3Xo/MkslAonECoBUJExFsJn0BU1zVRUx+4eArX8qLw77wZsQ9KRPqdDRs2sGnTJrZs\n2UJ6ejpz5sxpebZCSkpKSzm/308g8k04wIwZMygqKqKqqorBgwdfdNxoNY+BaGvp0qUsWrSImTNn\nMm3aNHJycrp9jkQXDESeA+FP+KpNRCSuJXzfnsNVHUzhWl4EviQYObUPohKR/qa6uprs7GzS09Mp\nKSmhqKgoqv0KCwt55JFHWLRoEWfOnOn1uCZOnEhWVhZPPfXUZd19CVq3QCiBEBHxUsInEEciD5Eb\nOahNC8Thj2HYdZDSztgIEZFLVFhYSF1dHfn5+Tz11FPMnDkz6n2XLFnC/fffz+LFiy96IvSvfvUr\n8vLyKCoqYt68eRQWFl5ybEuXLmXv3r189atfveR9+5NQMJxA+NSFSUTEU+ac65MTT58+3W3durXH\nx/n5Hw/y5Bu72PLE7Qy/Ii28MhiA58bA1G/Cwu/3+BwiEjt79uzhmmuu6esw+p32rquZbXPO8Ezn\ncQAAF/xJREFUTe+jkNrVk7rh1OZXyX7/Edbf/lsW3azuqyIilyraeiHhWyBO1DYAMCTzfB9kKnZD\n01mNfxARuYyEguExEBpELSLirYRPICpqG8gekEKyv9VbKY88RGn0jX0TlIiIxJzGQIiIxEbCJxAn\nahvIzWrzBOrDRTAgFwaN7ZugREQk5s63QCiBEBHxUsInEBW1DQxtm0CUfwyjZ4BZ+zuJiEi/40LN\ng6iVQIiIeCnhE4iTbROIsyfh1H7Ii6txgSIi4rGgWiBERGIioRMI5xwn2iYQeoCciMhlqbkFwp+k\nQdQiIl5K6ASi+lwTjcEQQzNbJRCHP9YD5ESk2yorKykoKKCgoIDhw4czatSoluXGxsZLOta9997L\nm2++2WmZX/7yl+Tn5+Pz+dp90jSEv1lfvnw51113HZMnT2bGjBkcPHgQgLy8PCZPnsyUKVOYP38+\nFRUVlxRjf6IxECIisZHQd9nmKVxzB6adX1lepAfIiUi3DRkypOUP+WeffZbMzEweffRRz843efJk\n3nzzTb71rW91WOYXv/gFlZWV7NixA5/Px6FDhxg4cGDL9s2bNzNo0CD+8R//keeee47nn3/es3jj\nmQuFE4ikpISu2kRE4l5C32WbE4iWFohgAD7/U/gBciLSL9z9v/7zonW3X5PLg7dc2a3tv/xvs7od\ny5133smRI0eor69nxYoVPPDAAwQCAXJycli2bBnvvPMOGRkZrFmzhtzc3Av2feKJJ6ioqOCVV17B\n5zvf+Jufn9/leY8ePcqIESNa9hszZky75W655RZefvnlbr+/S2Fm84EfAn7gVefcc222fxN4DDCg\nFnjIObfdy5g0iFpEJDYSugtTRXMC0TwG4uSn4QfIjZrWh1GJSH/12muvsW3bNoqKinj++eepqqoC\noLq6mltvvZXt27cza9YsVq5cecF+K1asoKamhldfffWC5CFaS5YsYfXq1UydOpVHH3203a5OzjnW\nr1/P5MmTu/fmLoGZ+YEfAwuAfGCpmbXNhD4DbnXOTQb+CfA8s3GRLkzJSiBERDyV0HfZ812YIgnE\n0UilOqKgjyISkd7WVYtBT7dfihdeeIG1a9cCUF5eTllZGQUFBaSnp7NgwQIApk2bxubNm1v2eeaZ\nZ5g9ezYvvvhit887ZswY9u7dy8aNG9m4cSO33XYbb7zxBnPnzgXg5ptvxufzUVBQwGOPPdb9Nxi9\nGUCpc24/gJmtAhYDu5sLOOf+0Kr8FiDP66BcKEjQGX5/Qn83JiIS9xI6gaiorSc1yUdWauRtHN0O\nyQMgZ0LfBiYi/c6GDRvYtGkTW7ZsIT09nTlz5lBfXw9ASkpKSzm/308gEGhZnjFjBkVFRVRVVTF4\n8OBunz8tLY2FCxeycOFCcnJyWLNmTUsC0TwGIoZGAYdbLZcDMzsp/zfAOx1tNLMHgQeh4+5Z0XCh\nIEF8JPv1DCARES9F9TWNmc03s71mVmpmj7ez/ZtmtsPMdprZH8zs+t4P9WInahvIHZiKNT8w7kgx\nDJ8MPk3hJyK9q7q6muzsbNLT0ykpKaGoqCiq/QoLC3nkkUdYtGgRZ86c6da5t23bxtGjRwEIhULs\n3LmTsWPHdutYsWZmtxFOIDpsGnHOveycm+6cmz506NBun8uFgoTw4fcpgRAR8VKXCUS89nUFOHGm\n4fwA6lAQju2Akeq+JCK9r7CwkLq6OvLz83nqqaeYObOzL9wvtGTJEu6//34WL17c0mrR7Fe/+hV5\neXkUFRUxb948CgsLL9r/2LFjFBYWtkzjmp6ezkMPPdTj99QDnwOjWy3nRdZdwMymAK8Ci51zlV4H\ndb4FQl2YRES8ZM65zguYzQKedc7Niyw/AeCc+787KD8Y2OWcG9XZcadPn+62bt3araCb3fH87/jC\n0AH8r7+cDhWfwIsz4as/gYJ7enRcEek7e/bs4ZprrunrMPqd9q6rmW1zzk2/1GOZWRLwKXA74cSh\nCLjHOVfSqswYYCNwX5vxEJ3qSd2w92fLGfHZf3BmxWeMHJTerWOIiFzOoq0XohkD0at9XXtTVV0T\n2QOaB1BHZgfUAGoREU855wJm9jDwLuFpXFc650rMbFlk+0vA08AQ4MVIN9NAd5KVS4or0oUpSWMg\nREQ81auDqFv1dZ3TwfZeGSjXrLa+iYFpzQOoiyEpHXIm9vi4IiLSOefc28Dbbda91Or1A8ADMQ0q\n0oUpqRtT5YqISPSiucv2Wl/X3hooB9AYCNEQCJHZPANT8wBqzf8tInJZCrdAmFogREQ8Fk0CUQRM\nMLPxZpYCLAHWti4Q6eu6GvhL59ynvR/mxc40hKdJzEpLglBIA6hFRC53LtKFSbMwiYh4qsuv6+O1\nr2ttfRMAWWnJUFkKjWdgRExmjxURkXjkQgQ1jauIiOei6u8Tj31da+vDLRCZaUkaQC0iIi2DqJM1\nBkJExFMJe5dtTiCy0pIiA6jTYOjVfRyViCS6yspKCgoKKCgoYPjw4YwaNaplubGx8ZKOde+99/Lm\nm292WuY73/kOkyZNYsqUKXz961+nurr6ojKlpaWkp6dTUFBAfn4+y5cvxznH2LFjKSsru6Dsww8/\nzA9+8INLirPfiAyi9qkFQkTEUwmcQIS7MA1MSw4PoB52nQZQi0iPDRkyhOLiYoqLi1m2bBkrVqxo\nWU5JSen1882bN4+SkhJ27NjBuHHj+N73vtduuUmTJlFcXMz27dspLi5m3bp13H333axataqlTDAY\nZPXq1dx99929HmdCiIyBEBERbyXsX9wtXZhSfOEuTNdfphWmSH/2zuNwbGfvHnP4ZFjwXLd2vfPO\nOzly5Aj19fWsWLGCBx54gEAgQE5ODsuWLeOdd94hIyODNWvWkJube8G+TzzxBBUVFbzyyiv4WnWx\nmTdvXsvrm266ifXr13caQ3JyMrNmzaK0tJSlS5dy33338eSTTwLwwQcfMGHCBPLy8rr1/hJeSAmE\niEgsJOydtnkWpivOHYbGWg2gFhHPvfbaa2zbto2ioiKef/55qqqqAKiurubWW29l+/btzJo1i5Ur\nV16w34oVK6ipqeHVV1+9IHlozTnHypUrWbBgQacxnD17lo0bNzJ58mSmTp1KU1MTu3fvBmDVqlUs\nXbq0F95pgnIhQubv6yhERPq9BG6BCHdhyqwqCa9QAiHS/3SzpcArL7zwAmvXhmexLi8vp6ysjIKC\nAtLT01v+8J82bRqbN29u2eeZZ55h9uzZvPjii50e+7vf/S6ZmZksWbKk3e179+6loKAAn8/HXXfd\nxR133AHA0qVLef3113n66adZt24dzz0XX9csliwUxCXu92IiIgkjgROIAClJPpJP7gFfkgZQi4in\nNmzYwKZNm9iyZQvp6enMmTOH+vp6gAvGRvj9fgKBQMvyjBkzKCoqoqqqisGDB7d77J/+9Ke89957\nvP/++x2ev3kMRFtLly5l0aJFzJw5k2nTppGTk9Pdt5j4NAZCRCQmEvZOW9sQYGBaEhzbBTkTISm1\nr0MSkX6surqa7Oxs0tPTKSkpoaioKKr9CgsLeeSRR1i0aBFnzpy5aPtbb73V0rKRlpZ2yXFNnDiR\nrKwsnnrqqcu7+xKEEwhL2GpNRCRhJOydtrY+EH6I3PFd4RmYREQ8VFhYSF1dHfn5+Tz11FPMnDkz\n6n2XLFnC/fffz+LFi1taLZotX76cmpoabr/9dgoKCli+fPklx7Z06VL27t3LV7/61Uvetz8xF8Jp\nDISIiOfMOdcnJ54+fbrbunVrt/e//98+pqGmkterlsAd34XZ3+7F6ESkr+zZs4drrrmmr8Pod9q7\nrma2zTk3vY9CaldP6oa937uNpvo6rnv6j70clYjI5SHaeiFhWyDO1Ae41n8wvKAWCBGRy565kLow\niYjEQMLeaWvrA0x0kQRi+OS+DUZERPqeC6oLk4hIDCRwAtHEuOABGJALmbldlhcRkf4tPAYiYas1\nEZGEkbB32tqGAHkNZTBc3ZdERATMBXGoBUJExGsJmUCEQo5zDQ3k1n8Gw67t63BERCQOqAVCRCQ2\nEvJOe7YxwFiOkeQaIVcJhIiIRFogNAZCRMRzCZlAnGkIMMkOhxeG5fdtMCLSr1RWVlJQUEBBQQHD\nhw9n1KhRLcuNjY2XdKx7772XN998s9My3/nOd5g0aRJTpkzh61//OtXV1ReVCQaDLF++nOuuu47J\nkyczY8YMDh4MTyKRl5fH5MmTmTJlCvPnz6eiouKSYuxPfITAl5DVmohIQknIO21tfYBJvsOEzA85\nk/o6HBHpR4YMGUJxcTHFxcUsW7aMFStWtCynpKT0+vnmzZtHSUkJO3bsYNy4cXzve9+7qMwvfvEL\nKisr2bFjBzt37uTXv/41V1xxRcv2zZs3s2PHDqZMmcJzzz3X6zEmCj1ITkQkNpL6OoDuqK1v4mo7\nzLmscQxITuvrcETES/9WePG6ifNg9t93b/tfv9XtUO68806OHDlCfX09K1as4IEHHiAQCJCTk8Oy\nZct45513yMjIYM2aNeTmXjg73BNPPEFFRQWvvPIKvlbfks+bN6/l9U033cT69esvOu/Ro0cZMWJE\ny35jxoxpN75bbrmFl19+udvvL9GpC5OISGwkbguEHaYxW60PIhI7r732Gtu2baOoqIjnn3+eqqoq\nAKqrq7n11lvZvn07s2bNYuXKlRfst2LFCmpqanj11VcvSB5ac86xcuVKFixYcNG2JUuWsHr1aqZO\nncqjjz5KcXFxu/uvX7+eyZMv3+fi+AiBBlGLiHguqhYIM5sP/BDwA686555rs90i2xcCdcD9zrk/\n9XKsLerO1DDGKqgaeo1XpxCReNFVi0FPt1+CF154gbVr1wJQXl5OWVkZBQUFpKent/zhP23aNDZv\n3tyyzzPPPMPs2bN58cUXOz32d7/7XTIzM1myZMlF28aMGcPevXvZuHEjGzdu5LbbbuONN95g7ty5\nANx88834fD4KCgp47LHHeunddi7e6gUAn7owiYjERJcJhJn5gR8DdwDlQJGZrXXO7W5VbAEwIfIz\nE/hJ5Lcn/Cf34jOHT8+AEJEY2bBhA5s2bWLLli2kp6czZ84c6uvrAS4YG+H3+wkEAi3LM2bMoKio\niKqqKgYPHtzusX/605/y3nvv8f7773d4/rS0NBYuXMjChQvJyclhzZo1LQnE5s2bGTRoUC+8y+jE\nY70AYARBCYSIiOeiaeudAZQ65/Y75xqBVcDiNmUWA//uwrYAg8xsRC/H2iKt6hMAUkYqgRCR2Kiu\nriY7O5v09HRKSkooKiqKar/CwkIeeeQRFi1axJkzZy7a/tZbb7W0bKSltT+ma9u2bRw9ehSAUCjE\nzp07GTt2bPffTM/FXb0A4RYIfEogRES8Fk0CMQo43Gq5PLLuUstgZg+a2VYz23rixIlLjbVFakMV\n1W4AGcOu7PYxREQuRWFhIXV1deTn5/PUU08xc2b0X6YvWbKE+++/n8WLF7e0WjRbvnw5NTU13H77\n7RQUFLB8+fKL9j927BiFhYUt07imp6fz0EMP9fg99UCv1QvQe3VDvS8dl5Te7f1FRCQ65pzrvIDZ\nnwPznXMPRJb/EpjpnHu4VZn1wHPOud9Hlt8HHnPObe3ouNOnT3dbt3a4uWuhoL5pEumH9uzZwzXX\naHxTb2vvuprZNufc9Es9llf1AvRC3SAiIt0Wbb0QTQvE58DoVst5kXWXWqZ3KXkQEekr8VkviIhI\nTESTQBQBE8xsvJmlAEuAtW3KrAXus7CbgGrn3NFejlVEROKD6gURkctYl7MwOecCZvYw8C7h6fpW\nOudKzGxZZPtLwNuEp+orJTxd3197F7KI9HfOOcKzgEpv6KqrajeOp3pBROQyFtVzIJxzbxOuDFqv\ne6nVawdcPPJPROQSpaWlUVlZyZAhQ5RE9ALnHJWVlR3O8NSD46peEBG5TEWVQIiIxEpeXh7l5eX0\nZDYeuVBaWhp5eXl9HYaIiPQTSiBEJK4kJyczfvz4vg5DREREOhDNIGoRERERERFACYSIiIiIiFwC\nJRAiIiIiIhK1Lp9E7dmJzU4AB3twiBzgZC+F45V4j1Hx9Vy8x6j4ei7eY+xJfGOdc0N7M5ieugzq\nhniPD+I/RsXXc/Eeo+Lrue7GGFW90GcJRE+Z2dZoHrXdl+I9RsXXc/Eeo+LruXiPMd7ji7V4vx7x\nHh/Ef4yKr+fiPUbF13Nex6guTCIiIiIiEjUlECIiIiIiErVETiBe7usAohDvMSq+nov3GBVfz8V7\njPEeX6zF+/WI9/gg/mNUfD0X7zEqvp7zNMaEHQMhIiIiIiKxl8gtECIiIiIiEmNKIEREREREJGpx\nn0CY2Xwz22tmpWb2eDvbzcz+Z2T7DjO7IYaxjTazD8xst5mVmNm32ykz18yqzaw48vN0rOJrFcMB\nM9sZOf/Wdrb35TWc1OraFJtZjZn9Q5syMb+GZrbSzCrMbFerddlm9lsz2xf5PbiDfTv9zHoY3/fN\n7JPIv+EbZjaog307/Tx4GN+zZvZ5q3/HhR3s6/n16yTGX7aK74CZFXewbyyuYbv3l3j6HPaVeK4X\nIueP+7ohnuuFyPnjrm6I93qhkxhVN/QsPtUL7XHOxe0P4AfKgC8AKcB2IL9NmYXAO4ABNwF/jGF8\nI4AbIq+zgE/biW8usL6Pr+MBIKeT7X12Ddv59z5G+CEmfXoNgVuAG4BdrdZ9D3g88vpx4J87eA+d\nfmY9jO/LQFLk9T+3F180nwcP43sWeDSKz4Dn16+jGNts/wHwdB9ew3bvL/H0OeyLn3ivFzr7t2tT\npk/rhkSpF1r9m/d53RDv9UInMapu6EF8bbarXoj8xHsLxAyg1Dm33znXCKwCFrcpsxj4dxe2BRhk\nZiNiEZxz7qhz7k+R17XAHmBULM7dy/rsGrZxO1DmnOvJU2h7hXNuE3CqzerFwGuR168BX21n12g+\ns57E55x7zzkXiCxuAfJ6+7zR6uD6RSMm1w86j9HMDPgL4HUvzh2NTu4vcfM57CNxXS9Av6kb4qVe\ngDipG+K9XugoRtUN0VO9EL14TyBGAYdbLZdz8U04mjKeM7NxwFTgj+1s/rNI0+E7ZnZtTAMLc8AG\nM9tmZg+2sz0uriGwhI7/w+zrawgwzDl3NPL6GDCsnTLxci2/Rfjbw/Z09Xnw0t9F/h1XdtDEGi/X\n72bguHNuXwfbY3oN29xfEulz6IWEqRcgruuGRKkXIL7rhkT771F1Q/epXmgl3hOIhGBmmcB/AP/g\nnKtps/lPwBjn3BTg/wHejHV8wBznXAGwAFhuZrf0QQydMrMU4CvAr9rZHA/X8AIu3B4Yl3Mgm9mT\nQAD4eQdF+urz8BPCTacFwFHCTcHxaimdf8sUs2vY2f0lnj+HEvd1Q9zXC5BYdUO8//eouqHHVC+0\nEu8JxOfA6FbLeZF1l1rGM2aWTPgf8efOudVttzvnapxzZyKv3waSzSwnVvFFzvt55HcF8AbhZqzW\n+vQaRiwA/uScO952Qzxcw4jjzU34kd8V7ZTp68/j/cAi4JuRm8hFovg8eMI5d9w5F3TOhYBXOjhv\nn38WzSwJ+Brwy47KxOoadnB/ifvPocfivl6A+K8bEqRegPivGxLiv0fVDT2jeuFi8Z5AFAETzGx8\n5FuIJcDaNmXWAvdZ2E1AdatmHE9F+sP9FNjjnHu+gzLDI+UwsxmEr3llLOKLnHOAmWU1vyY8mGpX\nm2J9dg1b6TCz7+tr2Mpa4K8ir/8KWNNOmWg+s54ws/nAPwJfcc7VdVAmms+DV/G17j99Vwfn7bPr\n18qXgE+cc+XtbYzVNezk/hLXn8MYiOt6AeK/bkigegHiv26I+/8eVTf0CtULbTkPR4v3xg/hmSA+\nJTxy/MnIumXAsshrA34c2b4TmB7D2OYQbibaARRHfha2ie9hoITwaPctwJ/F+Pp9IXLu7ZE44uoa\nRs4/gPBN/4pW6/r0GhKusI4CTYT7Cf4NMAR4H9gHbACyI2VHAm939pmNUXylhPs3Nn8WX2obX0ef\nhxjF9/9GPl87CN+0RvTV9esoxsj6nzV/9lqV7Ytr2NH9JW4+h3310957i7N7WlzXDR19huPpGkZi\niKu6oYP7Wlz999hBjKobehBfZP3PUL1wwY9FDigiIiIiItKleO/CJCIiIiIicUQJhIiIiIiIRE0J\nhIiIiIiIRE0JhIiIiIiIRE0JhIiIiIiIRE0JhIiIiIiIRE0JhIiIiIiIRO3/B4tO/6MO0LURAAAA\nAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# disturbance function\n", "def d(t):\n", " if t > 10:\n", " return 0.1\n", " else:\n", " return 0\n", "\n", "# sample time\n", "dt = 0.1\n", "\n", "# create and initialize tank1\n", "tank1_obj = gravtank(name='Tank 1',A=0.2, Cv=.5)\n", "tank1 = tank1_obj.generator(dt)\n", "tank1.send(None)\n", "\n", "# create and initailize tank2\n", "tank2_obj = gravtank(name='Tank 2',A=0.2, Cv=0.5)\n", "tank2 = tank2_obj.generator(dt)\n", "tank2.send(None)\n", "\n", "# level control for tank 1. \n", "pi1_obj = PI('Tank 1',Kp = 1, Ki = 0.6, MVmin = 0, MVmax = 1)\n", "pi1 = pi1_obj.generator(dt)\n", "pi1.send(None)\n", "\n", "# cascade level control for tank 2. Manipulated variable is the setpoint to for pi1\n", "pi2_obj = PI('Tank 2',Kp = 0.6, Ki = 0.6, MVmin = 0, MVmax = 2)\n", "pi2 = pi2_obj.generator(dt)\n", "pi2.send(None)\n", "\n", "# initial signals\n", "u, r1 = 0, 0\n", "\n", "# setpoint for tank 2 level\n", "r2 = 1.3\n", "\n", "for t in np.arange(0,20,dt):\n", " qout1,h1 = tank1.send((t,u))\n", " qout2,h2 = tank2.send((t,qout1 + d(t)))\n", " r1 = pi2.send((t,r2,h2,r1))\n", " u = pi1.send((t,r1,h1,u)) \n", "\n", "plt.figure()\n", "tank1_obj.plot()\n", "tank2_obj.plot()\n", "\n", "plt.figure(figsize=(11,4))\n", "pi1_obj.plot()\n", "pi2_obj.plot()" ] }, { "cell_type": "markdown", "metadata": { "nbpages": { "level": 3, "link": "[A.2.5.3 Modular Simulation of Cascade Control for Two Tanks in Series](https://jckantor.github.io/CBE30338/A.02-Modular-Approach-to-Simulation-using-Python-Generators.html#A.2.5.3-Modular-Simulation-of-Cascade-Control-for-Two-Tanks-in-Series)", "section": "A.2.5.3 Modular Simulation of Cascade Control for Two Tanks in Series" } }, "source": [ "\n", "< [A.1 Python Library for CBE 30338](https://jckantor.github.io/CBE30338/A.01-Python-Library-for-CBE30338.html) | [Contents](toc.html) | [Tag Index](tag_index.html) | [A.3 Animation in Jupyter Notebooks](https://jckantor.github.io/CBE30338/A.03-Animation-in-Jupyter-Notebooks.html) >

\"Open

\"Download\"" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.4" } }, "nbformat": 4, "nbformat_minor": 2 }