Skip to content

Instantly share code, notes, and snippets.

@t-flora
Created November 30, 2020 11:51
Show Gist options
  • Save t-flora/bfd4b18fc854c3fc16d8fe0e7e6144c1 to your computer and use it in GitHub Desktop.
Save t-flora/bfd4b18fc854c3fc16d8fe0e7e6144c1 to your computer and use it in GitHub Desktop.
CS164 - Duality
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Duality\n",
"\n",
"### Task 1\n",
"\n",
"5.1 *A simple example*. Consider the optimization problem:\n",
"\n",
"minimize $x^2 + 1$\n",
"\n",
"subject to $(x − 2)(x − 4) ≤ 0$,\n",
"\n",
"\n",
"with variable $x \\in \\mathbb R$.\n",
"\n",
"\n",
"(a) Analysis of primal problem. Give the feasible set, the optimal value, and the optimal solution."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Feasible set:\n",
"$$x \\in [2, 4]$$\n",
"\n",
"Optimal value:\n",
"$$f(x^*) = 5$$\n",
"\n",
"Optimal solution:\n",
"$$x^* = 2$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"(b) Lagrangian and dual function. Plot the objective $x^2 + 1$ versus $x$. On the same plot, show the feasible set, optimal point and value, and plot the Lagrangian L(x, λ) versus x for a few positive values of λ. Verify the lower bound property ($p^* \\geq \\inf_x L(x, λ)$\n",
"for λ ≥ 0). Derive and sketch the Lagrange dual function g."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"p* = 5.0\n"
]
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"import pandas as pd\n",
"\n",
"f0 = lambda x: x**2 + 1\n",
"\n",
"x = np.linspace(0, 6)\n",
"f0s = f0(x)\n",
"\n",
"plt.plot(x, f0s, color = 'black')\n",
"plt.axvline(2, ls = '--')\n",
"plt.axvline(4, ls = '--')\n",
"plt.fill_between(np.linspace(2,4), -1, 40, alpha = 0.1, label = 'Feasible set')\n",
"plt.scatter(2, 5, color = 'red', label = 'Minimum')\n",
"plt.ylim((-1, 40))\n",
"plt.legend()\n",
"plt.show()\n",
"\n",
"f0s = f0(np.linspace(2,4))\n",
"print(f'p* = {min(f0s)}')"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAYgAAAEYCAYAAABGJWFlAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy86wFpkAAAACXBIWXMAAAsTAAALEwEAmpwYAABkj0lEQVR4nO39d3xUV57g/X+OSjkjISEhCYRACJGDABEMGDAGTLCNAQN2u9vd457+de+MZ3Z/M92zzz4zOzs90zs709s9qXvczgEwJhkwOSeTkYQSSCighHJOpao6zx+3JAtRkkqlKpUkzvv1uq9KNxyFut97T/oKKSWKoiiK0pWLswugKIqiDE4qQCiKoigWqQChKIqiWKQChKIoimKRChCKoiiKRSpAKIqiKBapAKEoiqJYpAKEoiiKYpEKEEqPhBD/IIR414H7vyGEmNLLOnFCiLtCiHohxJ84oAwfCyH+rtPrNCHEMkvHdnRZnEkIkSeEWOnscoDj/+aKdVydXQDF+YQQI4FyIFJKWdTp/RDge8AEOxwjA/ADXpRSpnX66J+AvwU29bD5XwDnpZSz+lsOa0gpOwesJ44thPhgIMvSlRAiD/iRlPK0M44/gHr9m/fwP6XYibqDUABmARWdg4PZ94GjUspmOxxjKvCApwPBIeB5IUR4D9uOBfp8AhBC2OMCqOuxbSqLHcvzrLDm99zd/5RiJypAKAAzgSQL768BLnR+Qwjxj0KIA51e/x8hxBkhhFtPB5BSGoHLwIwu77cAt4FVlrYTQpwFngf+TQjRIISYKISIF0KcF0LUmKuDNnRaP08I8ZdCiBSg0dJJWQgxSwhxx1x98SXg2eXzPCHESgvHtlSW0UKIfUKIciFEbtfqEEvl6Wkb8/r/TQiRIoSoFUJ8KYTwNH/2GTAGOGw+/l90OdbPhRB7u7z3WyHEv3T6/KH5504XQrxi6XduXlcKISZ0et21Gq6nn+EvhRBF5uPcF0Ks6OYYFv+Oln7Plrbv7n9KsSMppVqe8QX4Avg/Ft4vB+Z2eS8YqEELKn8M3AMCrDiGF9rVXpaFz/4F+HUP255Hq1YBcAOygb8C3IHlQD0QZ/48Dy3YRQFeFvblDuQDf2be12tAG/B3ndbJA1Z2PbaFsrigBbf/17zfGCAHrcoDS+XpbRvz+jeA0UAQkAH8saWyWfjZxgJNgL/5tQ4oARLNrzeb9+sCbAUagfBufm4JTOj02cftv6OefgYgDigARpvXjQbGWyhrb3/HJ37vff2fUot9FnUHoUD3dxCBaF/aDlLKSuA3wKfAL4C1UspaK47xS6AIGC+E8O3yWb35WNZIBHyBX0kp9VLKs8ARYFundf5FSlkgLVeNJaKdnH4jpWyTUu4Fblp57K7mAiFSyr81lyUH+APwepf1OpfHmm3+RUpZLKWsAg6j/X16JaXMB+4AL5vfWg40SSmvmT//yrxfk5TySyALmGfnn9sIeACThRBuUso8KeVDC/uw5u/Ym57+pxQ7UAHiGWeuvogD7lr4uBqtEbCru8A04BdSygIrjrEA2IJWV1yLVnfcmR/aXYk1RgMFUkpTp/fygYhOr3sq02igSJovQTttb4uxwGhzFUmNEKIG7Yp4VJf1Cvq4zeNOz5vQTqTW2sl3J9nt5tcACCG+J4RI6nTcqcDIPuy7Xbc/g5QyG3gX+BugTAixWwgx2sI+rPk7dsuK/ynFDlSAUKYBeuC+hc9SgCfqf4UQ04DfAZ8Ab/e2c3MA+hCtmqQKSObpOuN48/vWKAaihBCd/3fHoF1JtuspyUkJECGEEF22t0UBkCulDOy0+Ekp13ZZT9qwTXd6S+DyFbBMCBEJvII5QAghxqJd5f8MCJZSBgKpgOhmP02Ad6fXYdb+DFLKnVLKxWiBRAL/28L+rfk7WmTl/5RiBypAKDOBdMBNCOFpXjzMnx0FlravKISIQKvy+GPg/wdME+bxAubPPxZCfNxl/38LfCulPGJ+nQRM77SNBzAHOGVlea+j1Z3/hRDCzXz89cBuK7f/FjAAf2JuMH4V26pZQGsrqDM3ynoJIXRCiKlCiLl23qazUrQ6f4uklOVo9fcfoZ3EM8wf+aCdrMsBhBA/oOer7iRgu7l8q+n0f9DTzyC08QvLzX/XFqAZrdqpq/78HXv8n1LsRwUIZQbaCbq505Ju/uxTYK35JOCPFjB+LaU8JKVsAv4PWj1wuyjgSvsLIcQ8tIbRP+u0ThJPXu1tQOvvXmxNYaWUevM2a4AK4D+A70kpM/uw/atoXXir0Rpr91uzrYV9GdFOajOBXHN53gcC7LlNF/8A/D/mqp3/1s06O4GVdKpeklKmA/+MFiBL0e4cr1jcWvOn5nLWADuAg1b+DB7Ar8zvPQZC0aqfnmDr39HK/ynFTsSTVbGK8iQhxN8DZVLK3/Synjvarf50KWVbH/Z/HfihlDK1XwVVFMXuVIBQFEVRLFJVTIqiKIpFKkAoiqIoFqkAoSiKolg0bCYPGzlypIyOjnZ2MRRFUYaU27dvV0gpQyx9NmwCRHR0NLdu3XJ2MRRFUYYUIUS3MwmoKiZFURTFIhUgFEVRFItUgFAURVEsGjZtEMqzq62tjcLCQlpaWpxdlCHJ09OTyMhI3Nx6zPmkPINUgFCGvMLCQvz8/IiOjubJSVqV3kgpqayspLCwkHHjxjm7OMogo6qYlCGvpaWF4OBgFRxsIIQgODhY3X0pFqkAoQwLKjjYTv3ulO6oAKEoijKUXb8O9y3l++o/FSAURVGGqtZWOHMGMq1Kh9JnAxIgzFnKbgghkoUQaUKI/2l+/2+EEEXmPLlJQoi1nbb5hRAiWwhxXwjx4kCUU1EUZUhJSYG2NkhIcMjuB+oOohVYLqWcgZaFarUQItH82f+VUs40L0cBhBCTgdeBKcBq4D+EELoBKqui2OTevXuMHTuW3/3ud3bb5/Hjx4mLi2PChAn86le/6vd6yjAiJdy+DWFhMHq0Qw4xIAFCahrML93MS0+ZijYCu6WUrVLKXCAb2/MGK8qAmDZtGrt37+bTTz+1y/6MRiM//elPOXbsGOnp6ezatYv09HSb11OGmaIiKC2FOXPAQR0NBqwNwpzYPAkoA05JKa+bP/qZECJFCPGhEGKE+b0IoKDT5oXm97ru8x0hxC0hxK3y8nJHFl9RrBIaGkpaWppd9nXjxg0mTJhATEwM7u7uvP7663z99dc2r6cMM7dvg5sbTJvmsEMM2EA5c6LzmUKIQOCAEGIq8Dvgf6HdTfwvtKTqbwOWwuFTdxxSyveA9wASEhJU7lSFd48fJ+nxY7vuc2ZYGL9ZvdqqdX/+85/T2tpKfn4+Y8eOfeKz5557jvr6+qe2+ad/+idWrlz51PtFRUVERUV1vI6MjOT69es2r6cMIy0tkJoK06eDh4fDDjPgI6mllDVCiPPAainlP7W/L4T4A3DE/LIQiOq0WSRQPGCFVBQbHD9+nMbGRl566SXS0tKeChCXLl3q0/4s5Yu3NGbB2vWUYSQlBQwGrXrJgQYkQAghQoA2c3DwAlYC/1sIES6lLDGv9gqQan5+CNgphPg1MBqIBW4MRFmVoc3aK317a2lp4S/+4i84dOgQH330Eampqaxdu/aJdfp6BxEZGUlBwXc1rYWFhYy20Bhp7XrKMNHeOB0e7rDG6XYDdQcRDnxi7onkAuyRUh4RQnwmhJiJVn2UB/wYQEqZJoTYA6QDBuCn5ioqRRmU/u7v/o7vfe97REdHM23aNA4dOvTUOn29g5g7dy5ZWVnk5uYSERHB7t272blzp83rKcNEYSGUlcG6dQ4/1IAECCllCjDLwvtv9rDNL4FfOrJcimIP9+/f59SpU1y5cgXQejP9/d//fb/36+rqyr/927/x4osvYjQaefvtt5kyZUrH52vXruX9999n9OjRPa6nDDO3b4O7u0Mbp9sJS/WXQ1FCQoJUKUefTRkZGcTHxzu7GEOa+h0OEc3N8Otfw4wZdruDEELcllJaHGmnptpQFEUZKpKTtcZpB42c7koFCEVRlKGgvXE6IkIbPT0AVIBQFEUZCh49gooKh3dt7UwFCEVRlKHg9m1tUNwAdkBQAUJRFGWwa2qC9HRt5LS7+4AdVgUIRVGUwe7OHTAaB6xxup0KEKANOjGZnF0KRVGUp5lMcOsWREdDaOiAHloFiNxc+N3vICvL2SVRFEV5WlYW1NbC3LkDfmgVIMaOBX9/uKGmelL6xxEJg95++21CQ0OZOnXqU59ZkyRIJRIaBm7eBD8/iIsb8EOrAOHionUby8nRupApio3snTAI4Pvf/z7Hjx9/6n1rkgSpRELDQGUlPHyonaN0A59UUwUI+O6Xf/Oms0uiDHH2TBgEsGTJEoKCgp5635okQSqR0DBw8+Z3F7FOMOD5IAYlHx+tb3FSEixf7tAEHIpj/dvx42TbOWHQhLAwfuaEhEE9sSZJkEokNMTp9do5afJk8PV1ShFUgGg3b56WhCM5WXuuKH1k74RBPbEmSZBKJDTEpaRAa6tTGqfbqQDRLiJCS75x86b2B1FfpCHJ2it9e3NEwqCeWJMkSCUSGsKk1M5FYWEQFdX7+g6iAkRn8+bBwYNa19eYGGeXRhlCHJEwqCfWJAlSiYSGsEePtPFZ69c79WJ1QBqphRCeQogbQohkIUSaEOJ/mt8PEkKcEkJkmR9HdNrmF0KIbCHEfSHEiwNRTqZMAW9v1eVV6ZP2hEHvvvsuoPVmSk1N7XkjK23bto0FCxZw//59IiMj+eCDD4AnkwnFx8ezZcuWjiRBa9eupbi4uMd1lEHu5k3w9ByQpEA9GZCEQUKr+PSRUjYIIdyAy8CfAq8CVVLKXwkhfg6MkFL+pRBiMrALmIeWk/o0MLGntKN2Sxh05gxcuQJ/8icQGNj//SkOp5Ld9J/6HQ4i9fXwm99oNRovOv7a2OkJg6SmwfzSzbxIYCPwifn9T4CXzc83ArullK1SylwgGy1YOF77XCcqO52iKM5w+7Y2vYYTG6fbDdg4CCGETgiRBJQBp6SU14FRUsoSAPNj+0QjEUBBp80Lze913ec7QohbQohb5eXl9iloQABMmqRNjtXWZp99KoqiWMNo1ALEhAlgYfzLQBuwACGlNEopZwKRwDwhxNNzB3zHUqvMU3VhUsr3pJQJUsqEkJAQO5UU7dauuRnsVI+sKIpilYwMaGgYFHcP4ISR1FLKGuA8sBooFUKEA5gfy8yrFQKd+3ZFAsUDVsixYyEkRGusHoA2GkVRFACuX9fuHGJjnV0SYOB6MYUIIQLNz72AlUAmcAh4y7zaW0D7PACHgNeFEB5CiHFALDBwXYuE0O4iHj+GwsIBO6yiKM+wwkJtmT9/0IzDGqg7iHDgnBAiBbiJ1gZxBPgV8IIQIgt4wfwaKWUasAdIB44DP+2pB5NDTJ+uTbmhpiZQFGUgXLumnXNmznR2SToMyEA5KWUKMMvC+5XAim62+SXwSwcXrXvu7jB7tvZHq63VGq8VRVEcobZWSymamDigKUV7o2Zz7cn8+dqjGjinKIojtc8kPcjmgVMBoicBAdpMirdvazMrKkoP7J0wqKCggOeff574+HimTJnCb3/72yc+VwmDhgm9XjvHxMcPusG5KkD0JjFRm1Hx7l1nl0QZ5OydMMjV1ZV//ud/JiMjg2vXrvHv//7vHQl/VMKgYSQlBVpavquxGERUgOhNZKS2XL+ujW5UlB7YM2FQeHg4s2fPBsDPz4/4+HiKiooAlTBo2JBSO7eMHu3UWVu7o2ZztUZiIuzdCw8eaKOslUHr+PHjPLZzwqCwsDBWOzlhUF5eHnfv3mW++SpTJQwaJh4+1FIdv/LKoOna2pkKENaIj9faI65dUwFC6ZajEgY1NDSwadMmfvOb3+Dv7w+ohEHDxrVrWra4fsyym3XsGF5BQUQ6oIpKBQhruLhovQtOnYKSEggPd3aJlG5Ye6Vvb45KGNTW1samTZvYsWMHr776asf7KmHQMFBWpt1BPP886HQ27aKhtJSiGzeIWrjQzoXTqABhrdmz4fx5LeK/8oqzS6MMMo5IGCSl5Ic//CHx8fH8+Z//+ROfqYRBw8D16+DqCnPm2LyL3HPn0Hl4MGbxYjsW7Duqkdpanp4wa5Y2gZ+Fq0Dl2eWohEFXrlzhs88+4+zZs8ycOZOZM2dy9OhRQCUMGvKamrTeS9OmgY+PTbuoLSig8v59xixciJuXl50LqBmQhEEDwW4Jg3pSVQX/+q/w3HOwfLljj6VYTSW76T/1Oxxgly7B2bPwk59AaGjv63chpSTpk09oqqhg/p/8Ca79GH3t9IRBw0ZQkNZIfeuWyhWhKIptDAatemn8eJuCA0D1w4fU5uczdsmSfgWH3qgA0VeJiVquiJQUZ5dEUZShKCUFGhvBxoZlKSU5Z8/iGRjI6H60X1hDBYi+GjNG68X07bcqV4SiKH0jJVy9CmFhMG6cTbsoT0+noaSE6GXLcLGx95O1VIDoKyG0yF9ZCffvO7s0iqIMJffva+eORYtsGhhnMpnIPXcO75AQRk2b5oACPkkFCFtMnqxNqnXlirqLUBTFelevaueOyZNt2rw0KYnmykrGLV+OcHH86VsFCFu4uMCCBVr2p0ePnF0aRVGGgoICbUlM1M4hfWQ0GMi7cAG/iAhGxsU5oIBPUwHCVrNmgbe3dkWgKIrSm6tXwctLO3fYoPjmTVrr6ohZsWLApkwZqJzUUUKIc0KIDCFEmhDiT83v/40QokgIkWRe1nba5hdCiGwhxH0hxIsDUc4+cXPTpt948EAbMq8oitKdykrIzISEBJsyxhlaWsi/dIkRMTGMsLFx2xYDdQdhAP6rlDIeSAR+KoRor4T7v1LKmeblKID5s9eBKcBq4D+EEI5trrfF3LlaoFB3EQr2TxjU0tLCvHnzmDFjBlOmTOGv//qvn/hcJQwaQq5e1eZbsjFj3KMrVzA0NxOzwmKGZocZkAAhpSyRUt4xP68HMoCIHjbZCOyWUrZKKXOBbGBw5eIDrYpp1iy4dw/q6pxdGsXJ7J0wyMPDg7Nnz5KcnExSUhLHjx/n2rVrgEoYNKQ0NEByMsycqc3c2kcttbUUXrtG6LRp+A3wZIsD3gYhhIgGZgHtE9P/TAiRIoT4UAgxwvxeBFDQabNCLAQUIcQ7QohbQohb5eXljix29xYs0Hoyffutc46vDCr2TBgkhMDXfEJpa2ujra2to+5ZJQwaQm7cAKNRO1fYIPfcOaSUxDhhep8Bnc1VCOEL7APelVLWCSF+B/wvQJof/xl4G7DUAvNUf1Ip5XvAe6DNxeSocvcoMBCmToU7d2DJEq0RSnGarOPHabBzwiDfsDBinZQwyGg0MmfOHLKzs/npT3+qEgYNNXo93Lyp5ZQJDu7z5g2PH1OanEzUggV4OiFf9YAFCCGEG1pw+EJKuR9ASlna6fM/AEfMLwuBzvn3IoHiASpq3y1cqFUz3bqlTeSnPJMckTBIp9ORlJRETU0Nr7zyCqmpqUydOlUlDBoq7t7V8k3bOK3Gw1OncPX0ZIyTzisDEiCE9l/5AZAhpfx1p/fDpZQl5pevAO1zJB8Cdgohfg2MBmKBG44omzSZKEtPJyQ+3vZh62Fh2sRb169rt5GuKs2Gs1h7pW9vjkoY1C4wMJBly5Zx/Phxpk6dqhIGDQVGo9Y4PWaMlte+j6oePqQ6J4fxq1Y5bDrv3gzUmWwR8CZwTwiRZH7vr4BtQoiZaNVHecCPAaSUaUKIPUA6Wg+on0opjY4oWE1eHhn79tG2enX/UvYtWgSffqo1Rjl4Ai1l8HFEwqDy8nLc3NwIDAykubmZ06dP85d/+ZeAShg0JKSkaJ1X1q/v86bSZOLhqVN4BgYSMXeuAwpnnQEJEFLKy1huVzjawza/BH7psEKZBY4bR+C4ceRduMCo6dNtj9TR0TB6tHbFMGuWTSMllaGpPWHQlStXAK0309///d/3e78lJSW89dZbGI1GTCYTW7ZsYd26dcCTCYOMRiNvv/32EwmD3n//fUaPHt3tOoqDmUxw+bI2sef48X3e/HFKCo2lpUzetAkXJ9ZIqIRBaHldb/3+90QmJjLhxX6MycvIgD174NVXtUxRyoBQyW76T/0O7Sw1Ffbtgy1btAbqPjC2tXH9X/8VDz8/Zv/oRw5vN1IJg3rhO2oU4bNmUXTjBk2VlbbvaNIkCAnRskUNk8CrKEofSamdA0aO1M4JfVR47Rr6+nrGr1rl9E4FKkCYRS9fjourKzmnT9u+EyG0Xkzl5dqwekVRnj3t0+8sXtznKb31jY08unyZ4Lg4Arv0gnMGFSDMPHx9GbN4MRWZmVTn5dm+oylTtNSk6i5CUZ497XcPgYE2VTPnnjuHsa2NmF56tQ0UFSA6iUxMxMPfn4cnTljsQ24VFxftyqGkBLKz7VtARVEGt9xcKCrSejX2saNKQ2kpJXfuEDF3Lj4jRzqogH2jAkQnOjc3YlaupOHxYx4nJ9u+o+nTISAALl5UdxGK8iy5dAn8/LR5l/pASkn28eO4enoSvWyZQ4pmCxUgugidOhW/iAhyz5zBqNfbthOdTruCKCyE/lRXKYoydDx6pH3fbRgsW5GZSU1eHuOWLXPaoDhLVIDoQgjBhBdfRN/QwKP+TOM9a5Y2c+PFi/YrnKIog9elS9oMz30cKGsyGHh46hTeISGEJ1jsbeo0KkBYEBAVRciUKRRcuUKLrdN4u7pq86/k5am0pIoy3LW3Oc6f3+eEQIXXrtFSXc2EF1/EZZANsB1cpRlEYlauRErZv26vc+ZoVxQ2TNKmDD32ThjUzmg0MmvWrI5R1O1UwqBB5NIl8PDoc0Kg1oYG8i9dInjiRIJsGHHtaCpAdMMrMJCohQspu3ePGlvvANzdtfrI7GwoHryT0Sr2Ye+EQe1++9vfPjXKWSUMGkRKS7VZFObOBU/PPm2ae+YMJoOB8atWOahw/aMCRA/GLl6Mh78/2ceOIU0m23bS/k+j7iKeCfZMGATaDKzffPMNP/rRj554XyUMGkQuXNAuBvs4pXd9SQmPk5KInD8fbxtyRQwENS91D3Tu7oxftYr0vXspvn3btlkVPTy0eskLF+DxY21qcMVxjh/Xfs/2FBYGTkoY9O677/KP//iPT22nEgYNEo8fa3cPfUwW1t6t1c3bm7FLljiwgP2jAkQvQiZPJjA6mtxz5widMgU3b+++72T+fLh2TQsSW7fav5DKoGDvhEFHjhwhNDSUOXPmcP78+Sc+UwmDBokLF7SLwMTEPm1Wnp5O7aNHTFy3Dtc+VksNJBUgeiGEYMLq1dz6z/8k99w5Jr70Ut934uWltUWcP6+1RaikLY4zjBIGXblyhUOHDnH06FFaWlqoq6vjjTfe4PPPP1cJgwaDkhJtzrWlS/t092DQ68k+cQLfsDDCZ81yYAH7T7VBWMF31Cgi5s6l+PZt6m2tvkhM1NoiulwJKsND14RBqampT61z6dIlkpKSnlq6q176h3/4BwoLC8nLy2P37t0sX76czz//HHgyGZBer2f37t1s2LDhie2tWUfphwsXtO90H+8e8i9cQF9fT+zatYhB1q21qwEpnRAiSghxTgiRIYRIE0L8qfn9ICHEKSFElvlxRKdtfiGEyBZC3BdC9CNJg31Em0c4Zh87Zts8TR4eWiNWVpY2wloZNtoTBr377rsA3QYIe+qcMCg+Pp4tW7Y8kTCouLi4x3WUfiouhvv3v7vws1JjeTmF164RNnMmAZ3ahwarAUkYJIQIB8KllHeEEH7AbeBl4PtAlZTyV0KInwMjpJR/KYSYDOwC5qHlpD4NTOwp7Wh/EgZZq/jOHR4cPkz8K68wavr0vu9Ar4ff/lZr9HzzTfsX8Bmlkt30n/od9tGuXdoA2Hff1S7+rCClJPmzz2goKWHez36Gu4+PY8toJacnDJJSlkgp75if1wMZQASwEfjEvNonaEED8/u7pZStUspcIBstWDhV+KxZ+I0ezcNTpzC0tvZ9B+7u2hxNOTmQn2//AiqK4nhFRVrOh4ULrQ4OoDVM1+TmMm758kETHHoz4BVgQohoYBZwHRglpSwBLYgAoebVIoCCTpsVmt/ruq93hBC3hBC3ysvLHVpu8/GIXbMGfUMD+bbOsTR3rjZHk2qLUJSh6fx5rVG6D6OmOzdMj+7jXE29MRq7rVjptwENEEIIX2Af8K6UsqdJjiz1xXuqLkxK+Z6UMkFKmRASEmKvYvbIPzKSsJkzKbx2jcaysr7vwM1NyxeRl6fNHa/YxXDJre4M6nfXB4WF2swIfbx76GiYfukluzZMSynZvXs3p06dsts+OxuwACGEcEMLDl9IKfeb3y41t0+0t1O0n3ELgc4tOJHAoJmrIuaFF9B5ePDgm29s+3LNmaPNGX/unMoXYQeenp5UVlaqE50NpJRUVlbiOYj74g8q589r86v14e7hiYbpyEi7FufSpUtkZ2czYsSI3le2wYCMgxDa6JwPgAwp5a87fXQIeAv4lfnx607v7xRC/BqtkToWuDEQZbWGu7c34194gfuHDvE4KanvfZldXbXc1UePau0Rg3CSrqEkMjKSwsJCBqKacTjy9PQk0s4nrmHp0SN4+BBWrrR6xlYpJVnHjqFzd7d7GtGcnBzOnTvHtGnTmGPnaqt2AzVQbhHwJnBPCJFkfu+v0ALDHiHED4FHwGYAKWWaEGIPkA4YgJ/21IPJGcJmzuRxUhIPT50iOC4O976OsJ41C65c0e4iYmL6nNxc+Y6bmxvjxo1zdjGU4UxKOH1aaz/sw91DeVoaNbm5xK5da9eG6bq6Ovbt20dISAjr1q1z2Aj5gerFdFlKKaSU06WUM83LUSllpZRyhZQy1vxY1WmbX0opx0sp46SUxwainH0hhCD2pZcwtraSY0v9n6urNn9Le48IRVEGr6wsKCjQRk27uVm1iaGlRWuYDg+3a8O00Whk7969GAwGtmzZgnsf80/0RZ8DhBDCRwihc0Rhhhrf0FAiExN5nJREjS3dVmfMgKAgOHsWbJ0tVlEUxzKZ4MwZ7bvah+rknDNn0Dc2ErdunV0bpk+fPk1BQQHr169n5MiRdtuvJb2WWgjhIoTYLoT4RghRBmQCJeYR0f9HCBHr0BIOctFLl+IREMCDb77B1NfuZjodLF8OZWWQkuKYAiqK0j/37mnf0eXLte+sFWoLCii+dYvIefPws+P8V+np6Vy7do158+YxdepUu+23O9aEtXPAeOAXQJiUMkpKGQo8B1wDfiWEeMOBZRzUdO7uxK5ZQ1N5OYXfftv3HUyerE3ed+4cGAz2L6CiKLYzGLSeS+Hh2nfVCiajkfuHD+Ph70/08uV2K0plZSVff/01ERERrBqgBEPWBIiVUsr/JaVMkVJ21INIKauklPuklJuALx1XxMFvZFwcIydNIu/CBZpravq2sRBar4i6Orh50yHlUxTFRrdvQ00NrFhhdUeSgqtXaSovJ3btWlzt1D6g1+vZs2cPOp2OzZs3o7PyTqa/eg0QUso2e6wz3E1YvRqEIOvo0b73xx83TuvqeukStLQ4poCKovRNaytcvAjR0VpPQys0VVWRd+ECIZMnMzIuzi7FkFJy6NAhysvL2bRpEwEBAXbZrzX61HJinpV1tRDivwkhPhFCOHZ2vCHEMyCAcc8/T1VWFmW2pJxcuRKam7Wur4qiON+1a9DUZPXdg5SSB0eO4OLqql0w2snVq1dJS0tj+fLljB/gMVPWNFL/WAhxVQhRAzwAfgT4og1m2+7Y4g0tEfPn4zd6NNnHjqFvaurbxmFhMG2a9k9pIamMoigDqLERrl6FSZPAykGEpSkp1OTmErNiBR5+fnYpxsOHDzlz5gyTJ09m0aJFdtlnX1hzB/EL4M+AOcARwBP40Nz+oDrwd+Li4kLchg0YWlp4eOJE33fw/PNalzo1kZ+iONfly9DWpvVcsoK+qYnsEyfwj4xkdILFmbP7rLq6mr179xISEsLGjRudki7WmgCxTkp5XUr5UEq5Gfg34LAQ4s+EEIM7HZIT+I4axZjFiylNSaEyK6tvG48YAQkJcPcuVFQ4poCKovSspkbrMDJjBlg5CejDkycxtrYycf16u5zI9Xo9X36p9f3ZunWrQwfD9cSaRurULq+Po+VmCAJUhbkFY597Du+QEB4cOdL3vBFLlmgjNc+edUzhFEXp2dmzWpvDsmVWrV6ZnU1pcjJRCxfiGxra+wa9aG+ULi0tZdOmTQQFBfV7n7ay6Q7AnMjnf6BNsKd04eLqStyGDbTW1ZFz+nTfNvbx0aYSzshQqUkVZaAVFWkD4xITwYreQoaWFh4cPoz3yJGMXbrULkX49ttvSUtLY8WKFUyYMMEu+7RVv6qIVBtE9wIiI4mcP5/iW7f6Pg3HggVaoDh5Uk0HrigDRUo4cUL77i1ebNUmD0+dorW+nkkbN6Jz7f/cp9nZ2Zw+fdppjdJd2RwghBDhQgjrM2Y8g8YtX45nYCD3Dx/G2JdR0u7uWoN1QQGkpzuugIqifCcjQ/vOPf+8VcmAqnJyKLlzh6gFC/C3w3TpFRUV7N27l9DQUKc1SnfVnzuIz4BMIcQ/2aswzmAwGDh37hx6vd7u+9a5uzNx3TqaKyvJv3ChbxvPmgWjRsGpU2oKDkVxNINB+66Fhlo1IZ+htZX7hw7hFRxMtJVtFT1pampi586duLq68vrrrzutUbormwOElHIlEAN8ZL/iDLyioiIuXbrE/v37HZKRLGj8eMJmzuTRlSvUF/chKZ6LC7z4ItTWgi1zPCmKYr0bN7TeS6tWad+9XuScPk1rba1WtWTl9N/dMRqNfPXVV9TV1bF161YCAwP7tT97sjpACCF+I7rc80iNDcOGB4+xY8fy4osvcv/+fU73tUHZSuNXrcLd15eMgwf7VtU0bhzExWl9shsaHFI2RXnmNTZqU2rExlqV3bE6N1ebqTUxkYCoqF7X74mUkqNHj5KXl8f69euJ6uf+7K0vdxANwCEhhA+AEGKVEGJYdHOdN28eCQkJXL16lTt37th9/25eXkzasIGm8nLy+tp99YUXtNtf1e1VURzjwgXQ67XvWi+Mer1WtRQUxDg7zNR648YN7ty5w6JFi5gxY0a/92dvVgcIKeX/A+wCzgshLgP/Ffi5NdsKIT4UQpQJIVI7vfc3QogiIUSSeVnb6bNfCCGyhRD3hRAvWv/j2EYIwZo1axg/fjzffPMNubm5dj9G0IQJhM+ZQ8G331Lz6JH1GwYHaykO796FkhK7l0tRnmnl5XDrFsyZY9WguJwzZ2ipqSFuw4Z+Vy1lZ2dz4sQJJk2axIoVK/q1L0fpSxXTCuCPgEYgBPgTKeUlKzf/GLA0e9X/7ZyC1HycycDrwBTzNv8xEBnsXFxceO211wgODmbPnj1UVlba/RjjX3gBz8BAMg8exNCXRvGlS8HLS+uCp7q9Kor9nDql9Rq0oqG5Oi+Pohs3iJg3j8CxY/t12PLy8o4eS6+88sqg6LFkSV+qmP478D+klMuA14AvhRBW3WNJKS8CVb2uqNkI7DYPxssFstFGbjucp6cn27Ztw8XFhZ07d9Lc3GzX/bt6eDDp5Zdpqa7uWx5rT0+t611+PmRm2rVMivLMysnRck0vWaKNfeiBoaWFzAMH8AoKIqafV/sNDQ0dPZa2bds2aHosWdKXKqblUsrL5uf3gDXA3/Xz+D8TQqSYq6BGmN+LAAo6rVNofu8pQoh3hBC3hBC3ysvL+1kUzYgRI9i6dSu1tbV8+eWXGPuaRrQXgWPHEpmYSPGtW1Q9fGj9hu23wKrbq6L0n9EIx49r85/N6/36M+vYMVrr64l/9VV0/Tih6/V6du3aRWNjI9u2bRvQ3A62sGa6b4v3PlLKEmBFT+v04ndoqUxnAiXAP7cf0tLhuinDe1LKBCllQoiVk2pZY8yYMWzYsIH8/HwOHz5s9+6v45Yvx3vkSO4fOkSbtQmCXFy0LnjV1XD9ul3LoyjPnOvXtfaHF1+EXkZAl6WlUZqSQvSSJfhHWLxWtYrJZGLfvn2UlJSwadMmIvqxr4FiVU5qIcR/EUKM6fymEMIdWCCE+AQb5mSSUpZKKY3mNKZ/4LtqpEKgc1+vSKAPAwjsY/r06Sxbtozk5GTOnTtn133r3NyY9PLLtNbXk338uPUbTpigdcW7eFHljFAUW9XXaz2XYmO1buQ9aK2r48GRI/hFRDDmuedsPqSUkuPHj/PgwQNWr15NnJ2yzTmaNQFiNWAEdgkhioUQ6UKIHCAL2IbW0PxxXw8shAjv9PIVoL2H0yHgdSGEhxBiHBAL3Ojr/u1hyZIlzJ49m0uXLnHrln2T5/lHRDD2uecoTU6mPCPD+g1Xr9Zuj/vShqEoyndOndK+Q71kfZNSknnoECajkfhXXsGlH3mgr127xs2bN1mwYAHzrKjSGix6nV1KStkC/AdabyI3YCTQLKWssfYgQohdwDJgpBCiEPhrYJkQYiZa9VEe8GPz8dKEEHuAdMAA/FRKad+GACsJIXjppZeor6/n6NGj+Pn52TXyj12yhMqsLO4fPoxfRASe/v69bxQUBIsWaXcRs2Zpg+kURbFOfr42W+uSJdp3qQdFN29S/fAhsS+9hHdwsM2HTE9P5+TJk0yePJkXrBhrMZj0aaoNKWWblLKkPThYO1BOSrlNShkupXSTUkZKKT+QUr4ppZwmpZwupdxgbtNoX/+XUsrxUso4KeWxPv1Edtbe/TU8PJy9e/dSaMcpuF10OiZv2oTJYCDzwAGkyWTdhosXQ2AgHD2qXQkpitI7k0n7zgQE9Dpba2NFBTmnThEUG8voOXNsPmRBQQH79+8nKiqKl19+edB2Z+1OfzPCjbZLKQY5d3d3tm3bhp+fH7t27aKqytoeu73zDg4mdu1aavLyeHT1qnUbublpt8cVFVoOa0VRenfzJpSVaQ3TPQxyMxmNZOzfj4ubG3EbNth8Ui8vL2fXrl0EBATw+uuv49bPgXXOYE0vpn81dyddIITomon7mRm15evry44dO5BS8vnnn9PY2Gi3fYfNmEHIlCnknTtHXVGRdRvFxcHEiVpjW12d3cqiKMNSQwOcO6fNtTRpUo+r5p07R0NJCXHr1+Ph62vT4Wpra/n888/R6XS88cYbeHt727QfZ7PmDuIeMB34FZAnhMgVQhwSQvwS6BowhrXg4GC2b99OfX09O3fupLWv6US7IYRg4rp1uPv5kb5vn/VpSlev/i7JiaIo3Tt9GtraYM0aLZ1oN6oePuTRlSuEz55NSHy8TYdqamri888/p7W1lR07djBixIjeNxqkrMlJ/Z6U8mdSyqVSymDgOeD3QB3wzJ2ZIiMj2bx5MyUlJezevRuDnQatuXl6Ev/qq7TU1JB1zMpmlxEjtLrU9HToy6A7RXmWFBRAcrKWqbGHxubWhgYyDhzAOySECb30cOqOXq9n586dVFdXs23bNsLCwmwt9aDQ5zYIKWWhlPKolPJ/SynfcEShBruJEyfy8ssvk5eXx759+zBZ27jci8AxYxi7ZAmlycmU3rtn3UaLFmmB4tgxNcJaUboyGuGbb8DfX+u51A0pJZkHDmBsbWXKa6/ZNBGf0Whkz549FBcX89prrzG2n/M1DQb9baR+Zk2fPp3Vq1eTmZlp19HWY5cswT8qigfffENzdXXvG7i6wtq1UFmpEgspSlfXrkFpqVYd28MUGY8uX6Y6J4cJa9bgExra58NIKTl48CAPHz5k3bp1TOqlnWOoUAGiH+bPn8/SpUtJSkri5MmTdgkSLi4uxL/6KgDp+/ZhsqYb64QJWsPbxYvaVByKokBVFZw/r303emhPqC0oIPfcOUKmTCHcinSjXbWPkk5NTWXFihXMnj27H4UeXFSA6KelS5cyd+5crl27xuXLl+2yT6/AQCZt3Eh9UREPT560bqM1a7T5mo4cUVOCK4qUWtWSTqd9N7rR1txM+r59eAYGErdunU1dWs+ePcuNGzdITExk0aJF/Sn1oKMCRD+1JxuaNm0aZ8+etduUHCHx8UTOn0/RjRuUpVmR1dXfH1au1KYwTk62SxkUZchKSdG+CytWaN8NC6SU3D90CH19PZM3bcLV07PPh7l06RKXL19m1qxZrFq1asgNhOuNChB2IIRg48aNTJw4kW+++YakpCS77DfmhRfwj4zk/qFDNFmTwCghAcaM0bq9qhzWyrOqsVH7DkRFad+JbhTdvElFZiYxK1bYNEvrtWvXOHv2LNOmTWOdjXcf9tDS1kaTnbrcd6UChJ3odDo2b95MTEwMhw4d4p61vZB64KLTMfm11xA6HWlffYWxra3nDYSA9eu1/t59mSVWUYaTkyehtRXWret2zENtQQEPT5wgKDaWyAUL+nyI27dvc+LECeLj43n55ZdxcXHOqTT78WP++L33+M3Row7ZvwoQduTq6srrr7/O2LFjOXDgAOnp6f3ep2dAAPGvvEJjaal14yNGjtS686Wlwf37/T6+ogwpDx9q1UuLF0M3vZH0jY2kffUVHubvVl+v/FNSUjhy5AixsbFs2rTJKcHBJCV7rl7lJ3/4Aw0tLayaPt0hx1EBws7c3NzYtm0bkZGR7Nu3j0w7pAgNjo1lzHPP8fjuXR5bU321aJH25fjmG7A2IZGiDHVtbVonjeBg6CZ3g8lkIn3vXgzNzUzZsgU3L68+HSI9PZ2DBw8ybtw4Nm/ejK4fU4Dbqryujv//Z5/xu1OnSJw4kQ9+8hMSxo93yLFUgHAAd3d3duzYQXh4OF999RVZWVn93ue4ZcsIjI7mwTff0FBW1vPKOh1s2KAlRjlzpt/HVpQh4fx5qKnRqpa6yRKXe+YMNXl5TFy3Dr8+jnLOzMxk3759REZGOm3yvUsZGfzo978nvbCQ/7puHX+7ZQsBDpznSQUIB/Hw8GDHjh2MGjWKL7/8kpycnH7tT7i4EG/uaZH25Ze9pyqNiID58+HWLW0OfEUZzoqKtIGis2ZBdLTFVcozMii4epXRc+YQNmNGn3afkZHBV199RXh4ONu3b8e9H3mpbdHU2so/HTrE/7tnD2GBgfznO++wbs4chzeMqwDhQF5eXrzxxhuMHDmSXbt29TtIePj6MnnzZlpqasjYv7/3/BHLl2t5Iw4fVtNwKMNXWxscPAh+flredguaKirIPHgQv4iIPs+zlJ6ezt69exk9ejRvvPEGnjZ0h+2PlPx8fvT733P07l22LVrEv/3wh4wZOXJAjj0gAUII8aEQokwIkdrpvSAhxCkhRJb5cUSnz34hhMgWQtwXQrw4EGV0FG9vb958802CgoLYuXMn2dnZ/dpf4JgxTFizhqqsLHJ7y5Xt7q7dbldWwtmz/TquogxaZ89quVE2bgQLJ2+DXk/qnj24uLoyZfNmXLqpfrIkLS3NacFBbzDwu5MneffjjxFC8Nsf/IB3Vq7EbQDbPQbqDuJjtNzWnf0cOCOljAXOmF8jhJgMvA5MMW/zH0KIgW8JsiMfHx/eeustQkJC2L17N/f72bsoIiGB8NmzeXT5cu+D6MaPhzlztNtvVdWkDDf5+dp8SwkJEBPz1Mftg+GaKiqYvGkTngEBVu86LS2to83hjTfewMPDw54l79H94mLeee899nz7LevnzOH9P/5jpo0ZM2DHbzcgAUJKeRHomoZtI/CJ+fknwMud3t8tpWyVUuYC2cDQyfLdDW9vb773ve8RFhbGnj17+t0FNnbtWvyjosj8+msaHj/ueeVVq7QZXw8e1PqHK8pwoNfD119r/9vd5HrOv3iR8rQ0YlasYISFANKd1NRU9u3bR1RUFDt27Biw4GAwGvnk/Hl++sEHNLa08L937ODP1q3Da4DbPNo5sw1iVHseavNje6flCKCg03qF5veeYs50d0sIcau8vNyhhbUHLy8v3nzzTSIiIti7dy+pqam9b9QNF52OKVu24OrpSeqXX6Jvaup+ZXd3ePllqK1VyYWU4ePUKW1yyo0bLc7UWp6eTt7584yaPp2ohQut3m1ycnJHHumBDA5ZJSX85P33+fjCBZ6fMoUPf/IT5k2YMCDH7s5gbKS21CxvcfY5czKjBCllQkhIiIOLZR8eHh688cYbjBkzhv3795Pcj3mTPHx9mbp1K6319aTv3dtzXooxY2DhQrh7Fx48sPmYijIoPHyo9dBLTAQLeRfqS0rIOHgQ/8hIJq5fb3Vvnxs3bnDw4EHGjh3Ljh07BqS3kt5g4MOzZ/nJ++9TWV/P327Zwn9/9VX8+jhGwxGcGSBKhRDhAObH9s79hUBUp/UigeIBLptDubu7s337dqKjozl48GC/Jvjzj4ggbv16anJzedjb3cGyZTBqFBw6BD3dcSjKYNbSov0Pjxyp9dTrorWhgdTdu3Hz8mLK1q3orGiUllJy6dIljh07Rlxc3IAFh4yiIt557z0+u3SJldOm8fFPf8pzNqY6dQRnBohDwFvm528BX3d6/3UhhIcQYhwQC9xwQvkcyt3dnW3btnVM8Hfx4kWb80mEzZjRMfNr0c2b3a/o6gqvvALNzWpacGXoOnFCGwS6cSN0GaxmNBi0cULNzUx9/XU8fH173Z2UktOnT3dMvLd582Zc+9DTyRatbW38/tQpfvbBBzS1tvIP27fz85dfxn8Q3DV05tjfgpkQYhewDBgphCgE/hr4FbBHCPFD4BGwGUBKmSaE2AOkAwbgp1JKK7LmDD1ubm5s2bKFQ4cOce7cOZqbm22eMjhm1SqaqqrIOnYMz8BAgmNjLa84ahQ8/7w2wvrePXDQHC6K4hAZGZCUpM21FBn5xEdSSh4cOUJdYSGTN2/GLzy8192ZTCaOHj3K7du3mTNnDi+99JLDB5/dzsnh10eOUFxdzbrZs/nxCy/gO8BjK6wl7JUq09kSEhKkvXIxDDQpJSdOnOD69evMmDGD9evX2zTHi0GvJ+mjj2iuqmLWD36Ab3dTCZhM8PHHUFYGP/kJ9KHrn6I4TW0t/P73Wq+lH/5Qm1Kmk0dXrpBz+jTRy5YRvXRpr7szGo0cPHiQ1NRUFi1axIoVKxwaHGoaG/mPkyc5lZJCZFAQf7ZuHbPHjXPY8awlhLgtpbQ4L/pgbKR+5gghePHFF1m2bBnJycns2bOHtt6m9rbA1d2dadu2ofPwIGXnTlrr6iyv6OKi9WoymeDAAe1RUQYzkwn279ceX3vtqeBQlpZGzunThEyZwtglS3rdnV6vZ/fu3R1pQleuXOmw4CCl5Njdu7z17//OudRU3nzuOT74yU8GRXDojQoQg4QQgqVLl7J27VoePHjAF198QYsNM7F6+Pszfft2jK2t3Nu1C4Neb3nFoCB46SVtoNGFC/0svaI42MWL8OiR9j8bFPTERzX5+WQcOIB/VBSTNm7s9UTf0NDAxx9/zMOHD1m3bh2LFy92WLELKiv5r59+yj8eOsSYkSP5wx//MW8vX467g9s47EUFiEFm7ty5bNq0iYKCAj766CPqursL6IFvWBiTX3uNhtJSMvbt637OphkztOXiRcjN7WfJFcVB8vO1/9Hp059qM2ssLyd19248AwOZ9vrr6HqZYbWyspIPP/yQ8vJytm7dypw5cxxS5Ja2Nt4/c4Yf/u53PCgp4c/XreO3P/gB0UOkO367Zz5ANLa28jdffcXD0lJnF6XD1KlT2bFjBzU1Nbz//vs87m2ktAXBsbHErllD5YMHZPfU/XXtWm3+/P37tVSNijKYNDdr/5sjRmj/q5201teT8sUXuLi6Mv2NN3DrZdrrwsJCPvzwQ1pbW3nrrbeIi4uze3GllFzOzOT7//7vfHH5MsumTOHTn/2M9XPm4DIE81U/8wEiv7ycu7m5vPOf/8m/HD1KfXOzs4sEQExMDG+//TZCCD766CObJvmLmDuXyMREim7c4NGVK5ZXcnfX6nSbm7WpOIZJpwVlGJBSG+/Q0ACbNkGnEc2G1lZSvvgCQ3Mz07ZvxyswsMddPXjwgE8++QQPDw/efvttIrv0gLKHoqoqfrFzJ//jyy/x9vDgN9//Pn/1yisEWdHVdrBSvZiAuuZmPjp3jkO3buHn5cWPli9nzaxZ6JyUZ/aJstXVsXPnTsrKyli3bh2zZ8/u0/ZSSjL276csNZW49esJ7277mzfh6FFYuVLLSKcoztb+P/nCC9osAGYmo5F7O3dSnZvL9O3bCeplOopbt25x9OhRwsPD2bZtG752PmE36/XsunKF3Veu4KbT8YPnn+fluXNxdUK2OVv01ItJBYhOsh8/5l+PHSPl0SMmhofzp2vXMtkBVxp91drayt69e8nOzmbx4sUsX768Tz0uTEYj93btojonhymbNxNiaaSmlPDVV1oe6x/84Kk+5ooyoEpL4f33tWk0duwA8/+7lJLMgwcpTUkhbuNGwmfO7HYXJpOJkydPcv36dSZMmMDmzZvtOjpaSsnpe/d47/RpKurrWT51Kj9ZtYqRfn52O8ZAUAGiD6SUnE1N5fenTlFRX88L06fzRytWEOLvb4dS2s5oNPLNN99w9+5dpk6dyoYNG/qU8tCo15P82WfUl5QwfccORljqYtfSovUzFwJ+/GOLc+srisO1tMAf/qDN1vrjH4P5il9KycMTJyi8fr3XsQ6dL6rmz5/PqlWrcLFjjUBGURH/dvw46YWFTAwP52erVztlOm57UAHCBs16PZ9fusRX336LixBsWbiQbYsWOW3aXTA3gF2+zNmzZwkPD+f111/Hvw+Bq625mbsffURrbS0z33oLv9Gjn16psBA++ghiY2Hr1o4rN0UZEFLC7t2QnQ1vvaVNMmmWe+4c+RcvEjFvHhNWr+72Lrq6uppdu3ZRWVnJmjVrSEiweO6zSUV9PX84c4aTyckE+fryo+XLeXHmzCHZAN1OBYh+eFxTwx/OnOFsaipBvr78cPlyXpwxw6ntE/fv32f//v24u7uzdevWPjW4tdbVcefDDzG1tTHr7bfxDg5+eqVr17T5bp5/HqwYdKQodnPxIpw7B6tXaznVzdpHSYfNnEnchg3dBof8/Hz27NmDyWRiy5YtjLPTYLRmvZ4vr17ly6tXMZpMbE5MZMdzz+E9gEmEHEUFCDtIKyjgP06eJL2wkPGjRvGTVauY04cEJPZWVlbG7t27qaurY926dczsoS62q6bKSu5++CEubm7M+sEPns6yJaXWoyklBbZtg4kT7Vp2RbEoKwt27oRp07RJJc1BoOjmTbKOHiVkyhQmv/oqopuLs6SkJA4fPsyIESPYtm0bwZYufvrIaDLxzZ07fHz+PNWNjSydPJk/WrGCiC6D9YYyFSDsRErJubQ03jt9mtLaWhLGj+edFSuItWJSMEdoamriq6++Ii8vj8TERF544QWr61nrS0pI+uQT3H18mPnWW3h0rapqa4MPP9QSsvzRH2ljJRTFUaqr4b33tHnBfvjDjllaHycnk3nwIMETJzJlyxZcLPQMMhqNHD9+nFu3bjFu3Dg2b96MVz9nRZVScvXBA947fZpHFRVMjYriJ6tWDYpOK/amAoSd6Q0GDt68yReXLlHX3MzyqVN5+/nnnXJVYTQaOXHiBDdv3mT8+PG8+uqrePcyYKhdbWEhKZ99hruvLzO//308uva+qKnRvrS+vtqXdhjcTiuDUPvFSE2NdjFi/h6VZ2SQ9tVXBEZHM237dot5Herq6vjqq68oLCxkwYIFrFy5st+N0akFBfzhzBlS8vOJCg7mnZUrWRQX5/BZXp1FBQgHaWhp4curV9l77RptRiPr58zhzSVLnDIw5vbt2xw7dgxfX182b95MRITFLK1PqS0oIOXzz3H389PuJLoGiZwc+PxzmDQJNm9WjdaKfUmp5ZVOTobt27XOEUDlgwekfvklfqNHM/3NN3G10DkkLy+PvXv3otfr2bhxI1OmTOlXUbIfP+aDs2e5lpXFCB8f3lq6lJdmzx4y4xlspQKEg1XW1/PpxYscuX0bd1dXXpk3j60LFxJg5ZW8vRQXF7Nnzx7q6+tZvXo1CQkJVl311D56RPLnn+MZEMCMt956OsnKt9/CyZNa9q7nnnNQ6ZVn0o0bcOwYLF2qZTwEKjIzSfvqK3xGjWLG976HW5fu1lJKrl27xqlTpwgKCmLr1q30J+Xwo4oKPjp/nvNpafh6evL6woW8On++U3ssDiQVIAZIYWUln1y4wJl79/B0d2fT/PlsXrBgQLNENTc3c+DAAbKyspg6dSrr16+3anBQTX4+KV98gWdAADPfegv3zkFCSm0+nNTUJ67yFKVfsrO1RunYWHj9dRCCsvR0Mvbtwzc8XJtfqUtwaG1t5fDhw6SlpTFp0iRefvllPGys+nxcU8MnFy5wMjkZd1dXXktMZOvChYM2eY+jqAAxwPLKy/nkwgXOp6Xh4+HB5sRENiUmDtg/Xvt4iXPnzhEcHMyWLVususKqycsjZedOPAMDtSDh4/Pdh21t8MEHWj3x229DaKjjfgBl+Cst1dodgoK0kfvu7pTeu6dN2x0ZyfQdO3DtcuIvLi5m3759VFdX8/zzz7N48WKb2gWKqqr44tIlTqak4CIEG+fOZfvixYzo/P/+DBnUAUIIkQfUA0bAIKVMEEIEAV8C0UAesEVKWd3TfgZTgGiXU1rKxxcucCkjA19PT16dN49X588fsKqn3Nxc9u3bh16vZ82aNcycObPXL1R1Xh73vvgCz8BApr/5Jp6dezfV1mrTH+h0WqP1EJtSQBkkGhq0/yOTCX70I/D313orff01AWPGMG379ifaHKSUXL9+nVOnTuHr68urr77K2LFj+3zYwspKPr90iVMpKehcXFg3Zw7bFi1y+iwJzjYUAkSClLKi03v/CFRJKX8lhPg5MEJK+Zc97WcwBoh2WSUlfHrxIpczM/F0c2Pj3LlsWbBgQBqz6+rqOHDgAHl5eUyePJl169b12gWwJj+fe7t24erpyYw333xyMF1JiTbSeuRI+P73tdlgFcVabW1autvycu3OITyckjt3uH/4MIHjxmk5HTr9TzU1NfH111/z4MED4uLi2LBhg9W99No9qqjg80uXOHPvHq46HRvmzOH1RYsIVhc4wNAMEPeBZVLKEiFEOHBeStnj5O2DOUC0yy0r4/NLlzifloarTsdLs2axddEiRjk4J7TJZOLq1aucO3fO6iuw+pISUj7/HIRgxhtvPJnf+sEDbTqE9uk4BsGst8oQ0D4hZEaG1uYQF0fRjRtkHTvGiPHjmbp16xMJf/Ly8ti/fz9NTU288MILzJs3r09VSumFhey+coXLmZl4uLmxMSGBLQsXDunptx1hsAeIXKAakMB/SinfE0LUSCkDO61TLaUcYWHbd4B3AMaMGTMnPz9/gErdP4WVley6coUTyckArJg2ja0LFhAzapRDj1tUVMT+/fuprq5m8eLFLF26FF0PXfgaKypI+ewzDK2tTN++nYDOk5G1T8WckKAlclHdX5XenD4NV67AqlXIxERyz53j0aVLBMfFMfm11zrGORgMBi5cuMCVK1cICgpi06ZNhFs5GFVKyc2HD9l15QpJeXn4eXry8ty5vDp/PoHPaBtDbwZ7gBgtpSwWQoQCp4D/AhyyJkB0NhTuILoqra1lz9WrHL17l5a2NuZNmMCWBQuYPW6cwwbltLa2cvz4cZKSkoiIiOCVV17pcUqCltpakj/7jNbaWqZs3Upw57n3T52Cq1dh1SpYsMAh5VWGiTt34PBhSEjAtHo1D775hsd37xI2axYT163rGNz2+PFjDhw4QFlZGbNmzWL16tVW9cIzGI1cSE9n99WrZD9+zEg/PzYvWMC62bOHxXxJjjSoA0RnQoi/ARqAP2IYVjF1p665mUO3brH/+nWqGxuJDQtjy8KFLJs82WGDdNLS0jhy5AgGg4Hly5czf/78bkeg6hsbSfn8cxrLyoh/5RVCp07VPpAS9u6F9HRtEN3kyQ4pqzLEZWRoVUsxMRg3byZ9/34qHzxg7JIlRC9bhhACk8nE5cuXuXDhAt7e3qxfv56JVswBVt/czJHbtzlw8ybldXVEBQezbdEiVk6fjtswH+BmL4M2QAghfAAXKWW9+fkp4G+BFUBlp0bqICnlX/S0r6EcINrpDQZOpaSw59tveVRRwUg/PzYmJLBuzhyH3B7X1dVx5MgRsrKyiIqKYuPGjd3eTbS1tJC6axe1jx4Rs3IlUQsXanc5bW3w6afw+LGW2CU62u7lVIawnBxtrEN4OG2bNnFv3z7qCguJXbuWiLlzAaioqODAgQMUFxczdepU1qxZ02tD9KOKCvZfv86J5GRa2tqYNW4cmxMTmR8bO6Sn3naGwRwgYoAD5peuwE4p5S+FEMHAHmAM8AjYLKWs6mlfwyFAtDNJyfWsLPbfuMGthw9x0+lYPnUqr8ybR5ylHA79IKUkJSWF48eP93o3YWxrI/PrrylPSyN89mxi167VJk9ratJ6ptTUwPe+p7LRKZrCQu3iYcQIWl59lZS9e2murmbypk2ExMdjMpm4du0a586dw83NjZdeeqnH6TJMUnIzO5uDN29yLSsLN52OFdOmsWn+fCZ07kSh9MmgDRD2NJwCRGf55eUcuHGj40ppSmQkL8+bx5L4eNwtTF5mq/r6eo4cOcKDBw+IjIxk48aNjBw58qn1pJTknj3Lo8uXGRETw5TNm3H19IT6ei1INDVpiV7UF/bZVlqq/T94eVG/Zg33Dh3C2NbGtG3bCBw7luLiYg4fPszjx4+Ji4vjpZdewq+bbqe1TU0cu3uXw7dvU1xdzQgfHzYmJLA+IeGZ75FkNJl43NCAUUrG2NgbUgWIYaChpYXjSUkcuHGD4upq/L28WD1zJi/Nns0YCydyW0gpuXfvHseOHUOv17Nw4UKWLFliMbVpyd27PDhyBK/gYKZt345XYKB2B/HRR2AwaH3c7VQuZYipqtL+D4SgfMEC0s+cwcPPj2nbtuEaEMC5c+e4ceMGPj4+rFmzhvj4+Kc6ZUgpySgq4uDNm5xPS6PNaGTG2LFsSEjgufj4Z6Z9oamtjYLaWh7V1pLf9bGmhsK6OtpMJl6fOpVdmzbZdAwVIIYRk5TcycnhyJ07XM7MxGgyMTM6mnWzZ/Ocne4qGhoaOHXqFCkpKQQGBrJmzRqLDYbVubmk7dmD0OmYtm0b/hERUFmpnRxcXLQgMaLHzmfKcFNfDx9+iGxtpSAujpykJAKjo5m8eTO5BQUcPXqUuro6EhISWLFiBZ5dpp+pbWriVEoKR+/eJbesDG93d1bNmMGGhATGDbPpXQwmEyX19TyqraWgrq4jEBTU1fHI/LyyufmJbVyEIMLPjzEBAYwNDGRsQABjAgKYMWoUC6KibCqHChDDVFVDA8eTkjhy+zYlNTX4e3mxYto0Xpwxg4nh4f3uKpuXl8c333xDRUUFkyZNYvXq1QR0uY1trKjg3hdfoG9oIPallwifOVOrXvjkEy1/xA9+AM/4VAbPjIYG+PRTZG0t2aNGUVRQwOg5cxiZmMjps2fJyMggNDSUdevWEdXpZGY0mbidk8PRu3e5kpmJwWRiUkQEa2fNYsXUqUOym6rRZKK0sZFC84m/PQAU1td3vC6pr8fY5fzr7+FBlL+/FgDMJ//2JSoggAg/P7vfPakAMcyZpOR2Tg7H7t7lcmYmbUYj40JDeXHGDF6YPr1f9bRGo5Fvv/2WCxcuIIRgyZIlJCYm4trpTkXf2Ej6vn3U5OYSPmcOsatX41JaqjVQ+vtrbRLPeF3xsFdX1xEcMn18KK2rY9wLL/CwuZmrV6/i4uLCc889x8KFCzsGZ+aVl3MqJYVTKSmU19Xh7+XFqunTWTt79qC+W2g1GCiur6eovp7CujqK6uo6nrcvxRZO/p6urkT5+xMVEECUvz+R5kDQ+b0AJ8wkqwLEM6S+uZlzaWmcSE4mvbAQFyGYO2ECK6ZOZfGkSTbPcV9TU8Px48e5f/8+gYGBrFy5ksmTJ3fcpZhMJvLOnuXRlSv4jR7NlC1b8KypgS++0Cb1+973tHSSyvBTWwuffIKpvp5UFxfqXFzwSkjgQnIy9fX1TJ8+nRUrVuDv709lfT1nUlM5nZJC1uPHuAhBwvjxrJ01i4VxcU5tW5BSUtncrJ38zSf9jsf6+o73y5uantrW282NSH//jhN/1yXK358gL69BmZVOBYhn1KOKCk4kJ3M6JYWyujo8XF1JnDiRFVOnMj821qb2ipycHE6ePElpaSlRUVGsWrWKyE7dWsszM8k8eBAXnY74TZsIcnPTgoSnpxYkhlGydwWorkZ+8gmmhgaSjEZag4J44OZGfmkpERERWrVkcDBX7t/nzL173MnNxSQlk0aPZuX06Tw/ZYrDeyJJKaluaaG4vp4S84m+uL6ekoaGjuftr/VG41Pbh/r4MNrPjwjzEunvT4S//xPPAzw8BuXJ3xoqQDzjTFKSVlDAmXv3uJCeTk1TEz4eHiyeNImlkyczJyamT8HCZDKRnJzM2bNnaWhoYOrUqaxYsYLAwEAAmiorSf3yS5oqKhj3/POMGT8e8cUXWsP1m2+qXBLDRWUl8uOPMTY1kWQyUTZiBLeqq/Hx9WXhkiVU63RczMjgdk4OBpOJ8MBAVk6fzspp0+zS885gMlHW2EhJfT2PGxooaWjQHs0n+xLz88cNDbRaOPEHeHgQbj7pj7awRPj5Ee7nh/sw7zGlAoTSwWgycSc3l7OpqVzKyKCxtRVvd3fmx8byXHw88ydMsLpRUK/Xc+XKFa5evYqUktmzZ/Pcc8/h5+eHUa/n/uHDlKWmMiImhvjFi3Hfvx+MRnjjDbDzgD9lgJWVYfroIwwtLSQJwS0pqXF3JyQ6mmyDgdt5eRhNJsICA1k6eTLLJk8mbvToXq+yTVJS0dREaUMDpY2NlJpP+qWNjTzu9Lykvp6KpiYsnb2CvLwI9/Ul3M9PezQ/H21+Pdp84ve20H37WaQChGKR3mDgbm4ulzIzuZKZSU1TE246HQnjx7MoLo75sbGMtGLO/Lq6Oi5cuEBSUhIuLi7MmTOHxYsX4+PjQ8mdO2SfOIGLTsek559n5LffaoPptm8HG5K+KM5nevQI02efYTQYuArcFIJKHx/uNjTQBoS3B4UpU5gYHo7eaKTcfNIva2ykrLGRUvNj+/P2QFDe1ITJwjnJ09WVUT4+hPn6Msp80g/r9Nh58bDjANJngQoQSq+MJhOpBQVcysjgcmYmpbW1AEwICyMxNpbE2FgmRUSg6yH3Q3V1NRcvXiQ5ORmdTsfcuXNZtGgRoqWFjAMHqC8qIiI+ngmlpYi6OtiyReW3HmLKz5wh6PJl9MBJ4DiQC3j5++MXGIjw9qbGZKKiubkjANS1tlrcl5erK6N8fQn18WFU++Lr+8Rj+0nffwjX8Q92KkAofSKlJLesjGtZWVzLyiKtoACTlAR4e5Mwfjxzxo1jTkwMod30SqqsrOTixYvcu3cPV1dXZs+ezfy5c6lJSSH/0iV8/fyY6eqKa3U1vPgizJ8/wD+h0s5gMlHV3ExlUxMVXZZK80m+vKYGY2Ul/72xkSVALfABsA8tH3AloAd0QhDi40Oojw8h3t6Emp93ft0eEEJ9fPBV2QgHBRUglH6pb27m5sOHXMvK4tbDh1Q3NgIQFRzM7HHjmB0Tw6zoaPy6pDKtqKjg0qVLpKamIqVk6tSpzIqJofTiRdqqq5k1YgS+1dUwdy6sXq0y0/WDlJJ6vb7jZF/V3Exl1+fm150fa1pantqXJxAIjBSCSCmZDfwQiEGbOfMP48cTFhvLaH9/Qswn/xAfHwI9PdVMqkOQChCK3bTfXdzOyeFObi5JeXm0tLUhgHGhoUwbM4bpY8cybcyYjmTwtbW1XLt2jTt37qDX6xkfHU2cqyuN2dlMdHdntF4PEybAa69po6+fUVJKmtraqG5podp88m5/3v5Y1f680+v2pevArM783N0J9vYm2Mvru0cvL4K8vPAEWhsaqKqpobCsjOqGBoKBaCGYISUvAqFAfUwMfjt2qEA+zKgAoThMm9FIZlERd3JzuffoEWkFBbS0tQFaY+W0sWOJj4ggPiKC0QEBJN+9y/Xr12loaGBMQAAxBgNhjY1MBGRwMC5vvAHm7rJDjUlK6ltbqW1tpbalhdrWVmpaWp56XtPSQo35dfvSHhDaTKZu9y+AAE9PRnh6EuTlxQjzCT7I/LrzEuztrT2aX7cPQGvW67lfXExaQQHphYWkFRZSax74FeTlxTQ/P9zr6/FpbmaqEMyVEj/AtHw5uueeG4DfojLQVIBQBozRZCL78WNS8vO59+gRqQUFHVVSbjodE8LCiAsPZ6TJRE1hIZVlZYx1cWGGycRUQLi74/LGGwgbJx6zhd5opL61lXq9nvrWVurMz+taW594XdvSQl1rK3Xmz+o6BYLalhbq9fpej+Wh0zHCy4tAT88nFw8PAj09Oz4bYX4+wvx5kJcX/h4ePXYS6KqlrY2c0lIelJTwoLiYrMePySkt7eglFBUczOTISKJ9fTFUVpKfnY3OYGCatzejm5qYIgRuLi6I116DSZNs/v0qg5sKEIrTSCkpra0ls6iIzKIiMoqLeVBc3HGXEejiQqynJyObm5ktJYsAD6Bh5kz8N2yATnXaJilpbmujsa2NRr3+iccGvZ5GvZ6GTktjWxv1ra00mD9vMAeABr2+IxjU6/UWR89a4u3mRoCHB/7mJcDTU3tsf21+r/NjoKcnAeaTfICHh0O6YJqkpLSmhrzycvLKysgtLyerpIRHFRUdwSDA25vY8HAmjR7N5MhIogICyH3wgJSUFCoqKnB3dWV2aCiepaVESkmMyQRBQYgtW2DUKLuXWRk8hmyAEEKsBn4L6ID3pZS/6m5dFSCcw2gy0Wo00tzWRovBQLPBoD12et3c1vbEY2NrK5V1dVTW1lJbV0djYyNtjY2MNJlYDGwCRgGFwK+E4LxOR5WU1BiNtIDFwVGWuOt0+Lq74+furj16eODb/rx98fB44nM/d/eOAODX/mj+zNXJde9Nra0UVVVRVFVFofkxr6yMvPLyjoALMNLPj9jwcGLDwogND2dieDgh/v60tbWRmZlJcnIyOTk5AIyJimJyWBgyO5u26mqm+/oS0NAA8fGwYYM2RYoyrA3JACGE0AEPgBfQzhU3gW1SynRL6w+HACGlxCglRpMJQw9Lm8lEm9Fo8bneaKTNaLT4vPPSajB897z9tclEq8HQ8brzY4vB8MTz9sXQQ515b9xcXPByc8PbzQ1vV1d8XFzwBkbp9bzb2MhSKdED59H63BcAVYCHpyf+Pj4E+voS7O9PqL8/oQEBhAUEEDFiBCG+vvi6uw+ppDJSSupbWiirrdWWujrKa2spraujtKaGoqqqjqq6dkG+vkSHhBAdEsK40FCiQ0OJDgnBt9NJvaWlhQcPHpCZmUlWVhYGg4HAwECmT59OTFAQFTdvUl9URHBAAJNNJnSNjbByJSQmPnH3pgxfPQWIwTzkcB6QLaXMARBC7AY2AhYDhK0yysv50eHDgPYlhe+uUKWUSCseTVIipdQe0a6qTebXJvNJ32Q+8Rt7eLQ0gtSRPHQ6PFxdcdfp8NDptEfza09XVzx0Onzc3Qlqf21+z9PV9anFQ6fDy80NL/NrLzc37dH8vP3Ru9Pz3q7I9dnZiD17WNXWRgxwFSgWAoObG/UmE4UVFTzIz3/qjsLTzY1gPz+CfX0J8PHB38uLAC8vAry98ff2xt/LCx9PT7zc3fFyd8fb/Ojp7t6vbppSSgwmE3qDgda2NhpbW2lsaaGhpYXG1lbtsaWFmqYmqhsbqW5spKaxkeqGBqobG2nrUtWlc3EhxN+fUQEBLJg4kYigoCeW7mbmbWho4P79+2RkZJCbm4vJZMLX15eZM2cyZcoUAl1cyDt3jtyLF/Hw82PmtGkEZGQgvLy0qdnHjLH5d6AML4M5QESgXTS2KwSeGFElhHgHeAdgjI3/1C5CPDEnS/vpoX3UpjA/7+7RxfzcRYiO93UuLujMn3VedEJ0fNb10dXF5annrubFrdPzjvd0uo73Oz931+k6Xnd+3n7ib1905vIOZu4TJsCf/zmGr75iYk4OwUAmUKTX87C+Hl9gWVgY4VFR+AQHIz09qWpqorK+ngrzUlBRQV1zM7VNTRituNtx0+lw1em033On5zoXl44A3n5BANrFgN5g6FisCfKuLi4E+vgwwteXET4+jA0JYYSPD0G+vowKCOgICiN8fa0KWG1tbeTn55OTk0NOTg6lpaUAjBgxgsTEROLj44mIiKChpITc8+fJy8rCzceHuKVLCSsoQNy7BzEx8Oqr4OPT6/GUZ8dgrmLaDLwopfyR+fWbwDwp5X+xtP5wqGJSuiEl3LyJPHUKk8lEtsnEYyEgPJx8KcktKQHA1dWVyMhIoqOjiY6OJiIioiOxkZSSJr2euqYmapuaaNLraWptpVmv71iaWlvRm6vNjObqOYPJpN3hmUwdFwTw5MWBh5sb7uY7LHdXV9zd3PBwdcXbwwNfT098PT3xMT/38fTE2929X8FZr9dTXFxMQUEBOTk5FBQUYDQa0el0REVFMW7cOOLi4ggNDQUpqXzwgIJr16jNz8fV05OohQuJ8vDA5cwZ7Xf7wguQkKCqlJ5RQ7WKqRDo3NcxEih2UlkUZxIC5s1DTJiA7sgR4nJzifLxIfXxY8ZIyaxJk2D0aIobG8nLz+f8+fMA6HQ6wsLCCA8P71hCQ0MJH0J5sk0mExUVFRQVFVFYWEhRURFlZWUddzCjRo1i3rx5xMTEMGbMGNzN1U4GvZ6imzcpvHaNlupqPAICiHnhBUZPmIDryZPw8CGMG6c1RA/RcSeK4w3mOwhXtEbqFUARWiP1dillmqX11R3EM0JKuHsXTp5EGgxURUSQXlKCsa0N75EjCZ89m4C4OErKy8nPz6e4uJiSkhL05jEKOp2OUaNGERISQlBQEMHBwQQHBxMUFNRxcnUGg8FAdXU15eXlTyyVlZUYzW0Tnp6eREREEBERQWRkJBEREXh7ez+xn8bych7fvUvJ3bsYWlrwi4ggasECRsbF4ZKUBKdOqbsG5QlDshcTgBBiLfAbtG6uH0opf9nduipAPGPq6+Gbb+D+feSoUVSNH0/+o0fUFRYidDpCJk9m9OzZBJinFK+qqqKkpITi4mIeP35MRUUF9fX1T+zSz8+PwMBAfH19n1p8fHxwc3PD3d2949HV1bXbqiKTyYRer6elpYWWlhZaW1s7ntfX11NXV9ex1NbW0tQljeWIESMICQlh5MiRhIaGEhERQXBwsMXj6RsbKUtN5XFyMg0lJSAEIfHxRCYmEhAVBTk5cOIElJWpuwblKUM2QPSFChDPICkhPV07+dXXw8SJNM2cSVFuLo9TUjC2tuLu58fISZMIiY8nYOxYXDr1nNLr9VRVVVFZWUllZSVVVVXU1tbS0NBAQ0MDLRYmsuuqcxtH56U3Hh4eBAQE4O/v37F0DgpuvSSzMej1VGVlUZqSQmVWFkiJb1gYo2bMYNTUqbj7+kJFhXbH8OCBFhBWroTJk9Vdg/IEFSCU4a2tDa5fh8uXQa+HmTMxLl5MRVER5RkZVGVlYTIYcPXyYmRcHCHx8QSOG4eut5OwwdARLJqammhra0Ov1z/x2NbWpvVes7B4eHjg6emJp6fnE899fHzw6OOkhFJKmisrqczKoio7m5q8PKTJhLufH6OmTWPUjBn4tqdybW6G8+fh1i1wdYXnntPGNahEOooFKkAoz4amJrh4EW7e1GYcXbAAFizA6OpKVXY25RkZVD54gLG1FeHigl9EBIFjxxIYHY1/VBSugyg/gZSS1ro66oqKqM3PpzIri5bqagC8Q0IIjo0lKDaWwDFjEO13RQ0NWqC8eVMLlLNnw/PPq66rSo9UgFCeLdXVcPYspKaCmxvMmKFdQQcHYzIYqM7LoyY3l5r8fOqLi7WqKiHwGz0a/4gIfEJD8QkJwTs0FLcBmGpCSklbUxONpaXUFRVRV1REfVER+oYGAFxcXRkRE0PQhAkEx8bi2bX9oKoKrl6FpCQt53d8PCxdquZQUqyiAoTybCothWvX4N497cQZF6cFirFjO+rhDXo9dQUF1OTnU5ufT31JCaZO8xq5+/nhExqKd1AQ7n5+uPv44O7ri5uvL+6+vrh7eyN0OouNx1JKTAYDhpYWbWltxdDSQmttLc1VVTRXV9NSXU1zdTXGTmk5vYKD8Y+IwD8iAr+ICHzDwnCxNG1ISQlcuaK1w7i4aIFw4UIIDrb/71IZtlSAUJ5tDQ1atcutW1o1VFgYzJmjXWl3qX6RUtJSW0tTWRmNZWU0lpfTWF5Oc1XVEyfxpwiBcHH5bhECo16P7Gb0tnBxwXPECLzMi2dQED4hIfiNHo1bl8x8T/0sqamQkqIFCA8Prbvq/Png52fLb0d5xqkAoSigNWanpGj19OXl2l1ETAxMnarlO+ilOsnY1kZbYyP6hgZtaWykrakJaTQiTSZMJhPSvGAyoXN3R+fpiaunJ64eHtqjpycefn54+Pt/13ZgTbkzM7WyP3yoVYmFh8P06TBzpppxVekXFSAUpTMpteqn1FRIS4OaGtDptLSnkyZpVVCBgc7rDiql1q6QkwO5uVpQ0OvB3x+mTdOqkkJCnFM2ZdgZqlNtKIpjCKFVM4WFwYoVUFz8XbC4f19bx99fCxRjxkB0tFav76iAYTJpQaqwUAsIOTlQV/ddOaZM0QJDdLQaw6AMKBUglGebEBARoS2rVmlVT/n52pKbqzVwg1aNExT09BIYqLUDuLpqDcWWmEzQ0gKtrdoYhepqbRBbRYV2vMpKMBi0db28tNHO7UtQkAoKitOoAKEo7YSA0FBtmTtXq+qprtaCRXGxVu1TWKjdaViqmnV11brVurlpz9vatMDQqVfUEwIDtaqimBjtsf2uRgUEZZBQAUJRuiPEd3cKs2Z9977RqFUJVVZCba3WPtDW9uRiMGhBwtPzu8XDQ3sMCICRI7VAoiiDmAoQitJXOp3WJqHGGyjDnHOzsCuKoiiDlgoQiqIoikUqQCiKoigWqQChKIqiWKQChKIoimKRChCKoiiKRSpAKIqiKBapAKEoiqJYNGxmcxVClAP5/djFSKDCTsVxpuHyc4D6WQaj4fJzgPpZ2o2VUlqcHnjYBIj+EkLc6m7K26FkuPwcoH6WwWi4/BygfhZrqComRVEUxSIVIBRFURSLVID4znvOLoCdDJefA9TPMhgNl58D1M/SK9UGoSiKolik7iAURVEUi1SAUBRFUSx65gOEEGK1EOK+ECJbCPFzZ5fHVkKID4UQZUKIVGeXpb+EEFFCiHNCiAwhRJoQ4k+dXSZbCCE8hRA3hBDJ5p/jfzq7TP0lhNAJIe4KIY44uyz9IYTIE0LcE0IkCSFuObs8thJCBAoh9gohMs3flwV23f+z3AYhhNABD4AXgELgJrBNSpnu1ILZQAixBGgAPpVSTnV2efpDCBEOhEsp7wgh/IDbwMtD7e8ihBCAj5SyQQjhBlwG/lRKec3JRbOZEOLPgQTAX0q5ztnlsZUQIg9IkFIO6YFyQohPgEtSyveFEO6At5Syxl77f9bvIOYB2VLKHCmlHtgNbHRymWwipbwIVDm7HPYgpSyRUt4xP68HMoAI55aq76SmwfzSzbwM2SsyIUQk8BLwvrPLooAQwh9YAnwAIKXU2zM4gAoQEUBBp9eFDMET0XAmhIgGZgHXnVwUm5irZJKAMuCUlHJI/hxmvwH+AjA5uRz2IIGTQojbQoh3nF0YG8UA5cBH5mq/94UQPvY8wLMeIISF94bsFd5wI4TwBfYB70op65xdHltIKY1SyplAJDBPCDEkq/+EEOuAMinlbWeXxU4WSSlnA2uAn5qraIcaV2A28Dsp5SygEbBrO+qzHiAKgahOryOBYieVRenEXGe/D/hCSrnf2eXpL/Ot/3lgtXNLYrNFwAZz3f1uYLkQ4nPnFsl2Uspi82MZcACtunmoKQQKO92V7kULGHbzrAeIm0CsEGKcuYHndeCQk8v0zDM37n4AZEgpf+3s8thKCBEihAg0P/cCVgKZTi2UjaSUv5BSRkopo9G+J2ellG84uVg2EUL4mDs/YK6SWQUMud5/UsrHQIEQIs781grArh05XO25s6FGSmkQQvwMOAHogA+llGlOLpZNhBC7gGXASCFEIfDXUsoPnFsqmy0C3gTumevvAf5KSnnUeUWySTjwibm3nAuwR0o5pLuHDhOjgAPadQiuwE4p5XHnFslm/wX4wnyBmwP8wJ47f6a7uSqKoijde9armBRFUZRuqAChKIqiWKQChKIoimKRChCKoiiKRSpAKIqiKBapAKEoiqJYpAKEoiiKYpEKEIriIEKIuUKIFHNeCB9zToghOReT8mxSA+UUxYGEEH8HeAJeaPPm/IOTi6QoVlMBQlEcyDwFwk2gBVgopTQ6uUiKYjVVxaQojhUE+AJ+aHcSijJkqDsIRXEgIcQhtOmxx6GlUf2Zk4ukKFZ7pmdzVRRHEkJ8DzBIKXeaZ3S9KoRYLqU86+yyKYo11B2EoiiKYpFqg1AURVEsUgFCURRFsUgFCEVRFMUiFSAURVEUi1SAUBRFUSxSAUJRFEWxSAUIRVEUxaL/D4Uj+qyHHeKgAAAAAElFTkSuQmCC\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"h = lambda x: (x - 2)*(x - 4)\n",
"L = lambda x, lambda_: f0(x) + lambda_*h(x)\n",
"\n",
"lambdas = np.linspace(0,40,5)\n",
"\n",
"for lambda_ in lambdas:\n",
" plt.plot(x, L(x, lambda_), \n",
" color = (lambda_/40, 0.5, 0.5), label = fr'$\\lambda =$ {lambda_}')\n",
"\n",
"\n",
"plt.xlabel('x')\n",
"plt.ylabel(fr'$L(x, \\lambda)$')\n",
"plt.title(fr'$L(x, \\lambda)$ for different values of $\\lambda$')\n",
"plt.legend()\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"for lambda_ in lambdas:\n",
" plt.plot(x, L(x, lambda_), \n",
" color = (lambda_/40, 0.5, 0.5), \n",
" label = fr'$\\lambda =$ {lambda_}')\n",
"\n",
"plt.axvline(2, ls = '--')\n",
"plt.axvline(4, ls = '--')\n",
"plt.fill_between(np.linspace(2,4), -60, 400, alpha = 0.1, label = 'Feasible set')\n",
"plt.scatter(2, 5, color = 'red', label = 'Minimum')\n",
"plt.ylim((-50, 360))\n",
"\n",
"plt.xlabel('x')\n",
"plt.ylabel(fr'$L(x, \\lambda)$')\n",
"plt.title(fr'$L(x, \\lambda)$ for different values of $\\lambda$')\n",
"plt.legend()\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"g = lambda xs, lambda_: min(L(xs, lambda_))\n",
"\n",
"lambdas = np.linspace(0,6)\n",
"\n",
"x = np.linspace(2, 4)\n",
"\n",
"gs = [g(x, lambda_) for lambda_ in lambdas]\n",
"\n",
"plt.plot(lambdas, gs, \n",
" color = 'black')\n",
"plt.axhline(5, ls = '--', label = r'$p^*$')\n",
"\n",
"plt.xlabel(r'$\\lambda$')\n",
"plt.ylabel(fr'$g(\\lambda)$')\n",
"plt.title(fr'$g(\\lambda)$')\n",
"plt.legend()\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"(c) Lagrange dual problem. State the dual problem, and verify that it is a concave maximization problem. Find the dual optimal value and dual optimal solution $λ^*$. Does strong duality hold?"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The dual problem at hand is:\n",
"\n",
"maximize $g(\\lambda) = \\inf_{x \\in \\mathcal D}L(\\lambda)$\n",
"\n",
"s.t. $\\lambda \\succeq 0$\n",
"\n",
"To verify that it is a concave maximization problem, we check that the objective is concave and the constraint is convex."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The objective can be observed to be concave from the graph of $g(\\lambda)$ above. We can show that the function is indeed concave for being the infimum of a set of Lagrangian functions, a set of quadratic (and so convex) functions. We know that the pointwise infimum of a set of concave functions is a concave function, so by the definition of $g(\\lambda)$ and the convexity of $L(\\lambda)$, we have that the objective is concave.\n",
"\n",
"The constraint requires the values $\\lambda_i$ to all belong to the first orthant, and so the constraint is convex."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"For the feasible set defined, we have that for any $\\lambda$ smaller $\\lambda \\approx 2.06$ we obtain strong duality"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"lambda* ~<= 2.0625262526252626\n",
"g(x, l*) = 4.999997900664702\n",
"d* = 5.0, p* = 5.0\n"
]
}
],
"source": [
"fine_ls = np.linspace(1.8, 2.4, 10000)\n",
"\n",
"for l in fine_ls:\n",
" if abs(max(gs) - g(x, l)) > 0.000001:\n",
" l_star = l\n",
" print(fr'lambda* ~<= {l}')\n",
" print(fr'g(x, l*) = {g(x, l)}')\n",
" print(fr'd* = {g(x, 0)}, p* = {min(f0s)}')\n",
" break"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"(d) Sensitivity analysis. Let $p^*(u)$ denote the optimal value of the problem\n",
"\n",
"minimize $x^2 + 1$\n",
"\n",
"subject to $(x − 2)(x − 4) ≤ u$,\n",
"\n",
"\n",
"as a function of the parameter $u$. Plot $p^*(u)$. Verify that $\\displaystyle \\frac{dp^*(0)}{du} = -\\lambda^*$."
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"us = np.linspace(-2, 2, 100)\n",
"\n",
"lambdas = np.linspace(0, 20, 5)\n",
"\n",
"h_u = lambda x, u: (x - 2)*(x - 4) - u\n",
"L_u = lambda x, lambda_, u: f0(x) + lambda_*h_u(x, u)\n",
"\n",
"g_u = lambda xs, lambda_, u: min(L_u(xs, lambda_, u))\n",
"\n",
"gs_u = [g_u(x, l_star, u) for u in us]\n",
"\n",
"plt.plot(us, gs_u, \n",
" color = (0.2, 0.2, 0.8), label = fr'$\\lambda =$ {l_star:.4f}', alpha = 0.5)\n",
"\n",
"plt.xlabel(r'$u$')\n",
"plt.ylabel(fr'$g(u)$')\n",
"plt.title(fr'$g(u)$')\n",
"plt.legend()\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"dp*(0)/du = -2.0625\n",
"-l* = -2.0625\n"
]
}
],
"source": [
"dpdu = (g_u(x, l_star, 0.001) - g_u(x, l_star, 0))/(0.001)\n",
"print(f'dp*(0)/du = {dpdu:.4f}')\n",
"print(f'-l* = {-l_star:.4f}')\n",
"assert(abs(dpdu - (-l_star)) < 0.00001)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We can see from the code above that we obtain that the slope of the function at 0 is equal to the optimal dual value $\\lambda^*$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Task 2"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Strong duality implies $g(\\lambda^*, \\nu^*) = p^*$, and so that\n",
"\n",
"$$\\inf_{x\\in \\mathcal D} L(x, \\lambda^*, \\nu^*) = \\min_x f_0(x)$$\n",
"\n",
"s.t. $Ax \\preceq b,\\quad Cx = d$\n",
"\n",
"\n",
"The statement above implies the stationarity condition, in which the gradient of the Lagrangian function with respect to the variables $\\mathbf{x}$ is equal to 0.\n",
"\n",
"\n",
"The condition for equality constraints are obtained from taking the gradient of the Lagrangian function with respect to the multipliers $C_i$ and checking if it equals 0. This could be obtained from the observation that for a given set of equality constraints, strong duality implies that the Lagrangian will have the same value for any set of multipliers, at the boundary points."
]
}
],
"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.8"
}
},
"nbformat": 4,
"nbformat_minor": 4
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment