Skip to content

Instantly share code, notes, and snippets.

@alun
Last active December 29, 2021 15:47
Show Gist options
  • Save alun/85fbc0d865a1bb5ac297d509cf3845f3 to your computer and use it in GitHub Desktop.
Save alun/85fbc0d865a1bb5ac297d509cf3845f3 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Strategy"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- S&P 500 (SPY) vs Intermediate-term US Treasuries (IEF)\n",
"- Gold (GLD) vs Long-term US Treasuries (TLT)\n",
"- US Real Estate (VNQ) vs Intermediate-term US Treasuries (IEF)\n",
"\n",
"\n",
"![image](parameters.png)\n",
"\n",
"\n",
"[More info](https://allocatesmartly.com/stokens-active-combined-asset-strategy/)\n",
"\n",
"IEF - 7-10 years bonds\n",
"\n",
"TLT - 20+ bonds\n"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"CONFIG = {\n",
" 'SPY': {'upper': 126, 'lower': 252, 'defensive_asset': 'IEF'},\n",
" 'GLD': {'upper': 252, 'lower': 126, 'defensive_asset': 'TLT'},\n",
" 'VNQ': {'upper': 126, 'lower': 252, 'defensive_asset': 'IEF'}\n",
"}"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{'GLD', 'IEF', 'SPY', 'TLT', 'VNQ'}"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import numpy as np\n",
"\n",
"ASSETS = set(np.array([\n",
" [asset, config['defensive_asset']] \n",
" for (asset, config) in CONFIG.items()\n",
"]).flat)\n",
"\n",
"ASSETS"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Load assets history"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We will use yahoo finance client to load dividends and prices history for our `ASSETS`."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"# pip install --user pandas numpy datetime scipy pandas_datareader yfinance\n",
"\n",
"import pandas as pd\n",
"import pandas_datareader.data as web\n",
"import yfinance as yf\n",
"\n",
"from datetime import datetime, date, timedelta\n",
"\n",
"yf.pdr_override()"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead tr th {\n",
" text-align: left;\n",
" }\n",
"\n",
" .dataframe thead tr:last-of-type th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr>\n",
" <th>property</th>\n",
" <th colspan=\"5\" halign=\"left\">Close</th>\n",
" <th colspan=\"5\" halign=\"left\">Dividends</th>\n",
" </tr>\n",
" <tr>\n",
" <th>asset</th>\n",
" <th>GLD</th>\n",
" <th>IEF</th>\n",
" <th>SPY</th>\n",
" <th>TLT</th>\n",
" <th>VNQ</th>\n",
" <th>GLD</th>\n",
" <th>IEF</th>\n",
" <th>SPY</th>\n",
" <th>TLT</th>\n",
" <th>VNQ</th>\n",
" </tr>\n",
" <tr>\n",
" <th>Date</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>2004-11-18</th>\n",
" <td>44.380001</td>\n",
" <td>55.061245</td>\n",
" <td>84.751953</td>\n",
" <td>51.618969</td>\n",
" <td>25.282881</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2004-11-19</th>\n",
" <td>44.779999</td>\n",
" <td>54.759518</td>\n",
" <td>83.809807</td>\n",
" <td>51.207035</td>\n",
" <td>25.021564</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2004-11-22</th>\n",
" <td>44.950001</td>\n",
" <td>54.798038</td>\n",
" <td>84.209511</td>\n",
" <td>51.473919</td>\n",
" <td>25.194220</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2004-11-23</th>\n",
" <td>44.750000</td>\n",
" <td>54.746681</td>\n",
" <td>84.338005</td>\n",
" <td>51.537724</td>\n",
" <td>25.301552</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2004-11-24</th>\n",
" <td>45.049999</td>\n",
" <td>54.823730</td>\n",
" <td>84.537849</td>\n",
" <td>51.537724</td>\n",
" <td>25.740204</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
"property Close Dividends \\\n",
"asset GLD IEF SPY TLT VNQ GLD \n",
"Date \n",
"2004-11-18 44.380001 55.061245 84.751953 51.618969 25.282881 0.0 \n",
"2004-11-19 44.779999 54.759518 83.809807 51.207035 25.021564 0.0 \n",
"2004-11-22 44.950001 54.798038 84.209511 51.473919 25.194220 0.0 \n",
"2004-11-23 44.750000 54.746681 84.338005 51.537724 25.301552 0.0 \n",
"2004-11-24 45.049999 54.823730 84.537849 51.537724 25.740204 0.0 \n",
"\n",
"property \n",
"asset IEF SPY TLT VNQ \n",
"Date \n",
"2004-11-18 0.0 0.0 0.0 0.0 \n",
"2004-11-19 0.0 0.0 0.0 0.0 \n",
"2004-11-22 0.0 0.0 0.0 0.0 \n",
"2004-11-23 0.0 0.0 0.0 0.0 \n",
"2004-11-24 0.0 0.0 0.0 0.0 "
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"def load_max_history(assets):\n",
" df = None\n",
"\n",
" for asset in assets:\n",
" data = yf.Ticker(asset).history(period='max')\n",
" columns = pd.MultiIndex.from_product(\n",
" [data.columns, [asset]],\n",
" names=['property', 'asset']\n",
" )\n",
" multi_level_df = pd.DataFrame(data.values, index=data.index, columns=columns)\n",
" # display(multi_level_df.columns.to_numpy())\n",
" if df is None:\n",
" df = multi_level_df\n",
" else:\n",
" df = df.join(multi_level_df)\n",
"\n",
" df = df[sorted(df.columns)]\n",
" return df.dropna()\n",
"\n",
"df = load_max_history(ASSETS)[['Close', 'Dividends']]\n",
"df.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Generate price channels indicators"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Create upper and lower channels for risk-on assets defined in the `CONFIG`."
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead tr th {\n",
" text-align: left;\n",
" }\n",
"\n",
" .dataframe thead tr:last-of-type th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr>\n",
" <th>property</th>\n",
" <th colspan=\"5\" halign=\"left\">Close</th>\n",
" <th colspan=\"5\" halign=\"left\">Dividends</th>\n",
" <th colspan=\"3\" halign=\"left\">Lower Channel</th>\n",
" <th colspan=\"3\" halign=\"left\">Upper Channel</th>\n",
" </tr>\n",
" <tr>\n",
" <th>asset</th>\n",
" <th>GLD</th>\n",
" <th>IEF</th>\n",
" <th>SPY</th>\n",
" <th>TLT</th>\n",
" <th>VNQ</th>\n",
" <th>GLD</th>\n",
" <th>IEF</th>\n",
" <th>SPY</th>\n",
" <th>TLT</th>\n",
" <th>VNQ</th>\n",
" <th>GLD</th>\n",
" <th>SPY</th>\n",
" <th>VNQ</th>\n",
" <th>GLD</th>\n",
" <th>SPY</th>\n",
" <th>VNQ</th>\n",
" </tr>\n",
" <tr>\n",
" <th>Date</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>2005-11-15</th>\n",
" <td>46.660000</td>\n",
" <td>55.254726</td>\n",
" <td>89.463882</td>\n",
" <td>54.242683</td>\n",
" <td>29.501305</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>41.529999</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>90.154518</td>\n",
" <td>30.903225</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2005-11-16</th>\n",
" <td>47.779999</td>\n",
" <td>55.534771</td>\n",
" <td>89.645378</td>\n",
" <td>54.813057</td>\n",
" <td>29.333406</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>41.529999</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>90.154518</td>\n",
" <td>30.903225</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2005-11-17</th>\n",
" <td>48.480000</td>\n",
" <td>55.641373</td>\n",
" <td>90.480156</td>\n",
" <td>54.946583</td>\n",
" <td>29.817356</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>41.529999</td>\n",
" <td>81.930275</td>\n",
" <td>24.664762</td>\n",
" <td>47.779999</td>\n",
" <td>90.154518</td>\n",
" <td>30.903225</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2005-11-18</th>\n",
" <td>48.459999</td>\n",
" <td>55.508076</td>\n",
" <td>90.835892</td>\n",
" <td>54.691696</td>\n",
" <td>29.925989</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>41.529999</td>\n",
" <td>81.930275</td>\n",
" <td>24.664762</td>\n",
" <td>48.480000</td>\n",
" <td>90.480156</td>\n",
" <td>30.903225</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2005-11-21</th>\n",
" <td>48.990002</td>\n",
" <td>55.614750</td>\n",
" <td>91.293251</td>\n",
" <td>54.855534</td>\n",
" <td>30.074137</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>41.529999</td>\n",
" <td>81.930275</td>\n",
" <td>24.664762</td>\n",
" <td>48.480000</td>\n",
" <td>90.835892</td>\n",
" <td>30.903225</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
"property Close Dividends \\\n",
"asset GLD IEF SPY TLT VNQ GLD \n",
"Date \n",
"2005-11-15 46.660000 55.254726 89.463882 54.242683 29.501305 0.0 \n",
"2005-11-16 47.779999 55.534771 89.645378 54.813057 29.333406 0.0 \n",
"2005-11-17 48.480000 55.641373 90.480156 54.946583 29.817356 0.0 \n",
"2005-11-18 48.459999 55.508076 90.835892 54.691696 29.925989 0.0 \n",
"2005-11-21 48.990002 55.614750 91.293251 54.855534 30.074137 0.0 \n",
"\n",
"property Lower Channel \\\n",
"asset IEF SPY TLT VNQ GLD SPY VNQ \n",
"Date \n",
"2005-11-15 0.0 0.0 0.0 0.0 41.529999 NaN NaN \n",
"2005-11-16 0.0 0.0 0.0 0.0 41.529999 NaN NaN \n",
"2005-11-17 0.0 0.0 0.0 0.0 41.529999 81.930275 24.664762 \n",
"2005-11-18 0.0 0.0 0.0 0.0 41.529999 81.930275 24.664762 \n",
"2005-11-21 0.0 0.0 0.0 0.0 41.529999 81.930275 24.664762 \n",
"\n",
"property Upper Channel \n",
"asset GLD SPY VNQ \n",
"Date \n",
"2005-11-15 NaN 90.154518 30.903225 \n",
"2005-11-16 NaN 90.154518 30.903225 \n",
"2005-11-17 47.779999 90.154518 30.903225 \n",
"2005-11-18 48.480000 90.480156 30.903225 \n",
"2005-11-21 48.480000 90.835892 30.903225 "
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"for (asset, config) in CONFIG.items():\n",
" df['Upper Channel', asset] = df['Close', asset].shift(1).rolling(window=config['upper']).max()\n",
" df['Lower Channel', asset] = df['Close', asset].shift(1).rolling(window=config['lower']).min()\n",
"\n",
"df = df[sorted(df.columns)]\n",
"df.iloc[250:].head() # deliberate shift to check the first moment where 252 lower/upper channel appeared for the first time"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Run ACA trading algorithm"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>portfolio_value</th>\n",
" <th>cash</th>\n",
" <th>portfolio</th>\n",
" </tr>\n",
" <tr>\n",
" <th>Date</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>2004-11-18</th>\n",
" <td>50000.000000</td>\n",
" <td>84.698351</td>\n",
" <td>{'SPY': 196.0, 'GLD': 375.0, 'VNQ': 659.0}</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2004-11-19</th>\n",
" <td>49793.131025</td>\n",
" <td>84.698351</td>\n",
" <td>{'SPY': 196.0, 'GLD': 375.0, 'VNQ': 659.0}</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2004-11-22</th>\n",
" <td>50049.003464</td>\n",
" <td>84.698351</td>\n",
" <td>{'SPY': 196.0, 'GLD': 375.0, 'VNQ': 659.0}</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2004-11-23</th>\n",
" <td>50069.919992</td>\n",
" <td>84.698351</td>\n",
" <td>{'SPY': 196.0, 'GLD': 375.0, 'VNQ': 659.0}</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2004-11-24</th>\n",
" <td>50510.660894</td>\n",
" <td>84.698351</td>\n",
" <td>{'SPY': 196.0, 'GLD': 375.0, 'VNQ': 659.0}</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" portfolio_value cash \\\n",
"Date \n",
"2004-11-18 50000.000000 84.698351 \n",
"2004-11-19 49793.131025 84.698351 \n",
"2004-11-22 50049.003464 84.698351 \n",
"2004-11-23 50069.919992 84.698351 \n",
"2004-11-24 50510.660894 84.698351 \n",
"\n",
" portfolio \n",
"Date \n",
"2004-11-18 {'SPY': 196.0, 'GLD': 375.0, 'VNQ': 659.0} \n",
"2004-11-19 {'SPY': 196.0, 'GLD': 375.0, 'VNQ': 659.0} \n",
"2004-11-22 {'SPY': 196.0, 'GLD': 375.0, 'VNQ': 659.0} \n",
"2004-11-23 {'SPY': 196.0, 'GLD': 375.0, 'VNQ': 659.0} \n",
"2004-11-24 {'SPY': 196.0, 'GLD': 375.0, 'VNQ': 659.0} "
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"cash = 50000 # initial cash\n",
"portfolio = []\n",
"\n",
"def flatten_portfolio(portfolio): \n",
" dict = {}\n",
" for item in portfolio:\n",
" dict[item['asset']] = item['amount']\n",
" return dict\n",
"\n",
"results = {'portfolio_value': [], 'cash': [], 'portfolio': []}\n",
"\n",
"for x in range(0, df.shape[0]):\n",
"\n",
" today = df.iloc[x]\n",
" close_price = today['Close']\n",
" upper_channel = today['Upper Channel']\n",
" lower_channel = today['Lower Channel']\n",
" dividends = today['Dividends']\n",
"\n",
" # initialize portfolio - start with risk on\n",
" if len(portfolio) == 0:\n",
" portfolio = [{}] * len(CONFIG)\n",
" fraction = cash / len(CONFIG)\n",
"\n",
" for (index, (asset, config)) in enumerate(CONFIG.items()):\n",
" price = close_price[asset]\n",
" amount = np.floor(fraction / price)\n",
" cash -= amount * price\n",
" portfolio[index] = {'asset': asset, 'amount': amount}\n",
"\n",
" portfolio_value = cash\n",
" for item in portfolio:\n",
" portfolio_value += close_price[item['asset']] * item['amount']\n",
"\n",
" results['portfolio_value'].append(portfolio_value)\n",
" results['cash'].append(cash)\n",
" results['portfolio'].append(flatten_portfolio(portfolio))\n",
"\n",
" continue\n",
"\n",
" # add dividends\n",
" for item in portfolio:\n",
" maybe_divs = dividends[item['asset']]\n",
" if not np.isnan(maybe_divs):\n",
" cash += (item['amount'] * maybe_divs) * 0.85 # we pay 15% tax on dividends here (but it can vary a lot depending on circumstances)\n",
" # TODO rebalance if necessary\n",
"\n",
" # calculate portfolio value\n",
" portfolio_value = cash\n",
" for item in portfolio:\n",
" portfolio_value += close_price[item['asset']] * item['amount']\n",
"\n",
" # check if need to replace some assets with defensive assets\n",
" new_assets = [None] * 3\n",
" for (index, (asset, config)) in enumerate(CONFIG.items()):\n",
" if close_price[asset] > upper_channel[asset] and portfolio[index]['asset'] != asset:\n",
" new_assets[index] = asset\n",
" elif close_price[asset] < lower_channel[asset] and portfolio[index]['asset'] != config['defensive_asset']:\n",
" new_assets[index] = config['defensive_asset']\n",
"\n",
" needs_rotation = not all(v is None for v in new_assets)\n",
" if needs_rotation:\n",
" fraction = portfolio_value / 3\n",
" for (index, item) in enumerate(portfolio):\n",
" # do we need to replace item completely?\n",
" if not new_assets[index] is None and item['asset'] != new_assets[index]:\n",
" # sell current asset\n",
" cash += item['amount'] * close_price[item['asset']]\n",
" # buy new asset\n",
" # TODO may be unified with initialization\n",
" asset = new_assets[index]\n",
" price = close_price[asset]\n",
" amount = np.floor(fraction / price)\n",
" cash -= amount * price\n",
" # store new asset\n",
" item['asset'] = asset \n",
" item['amount'] = amount\n",
"\n",
" # do we need to rebalance?\n",
" else:\n",
" asset = item['asset']\n",
" price = close_price[asset]\n",
" new_amount = np.floor(fraction / price)\n",
" diff = item['amount'] - new_amount\n",
" if diff != 0:\n",
" # rebalance\n",
" # diff > 0 => item['amount'] > new_amount => sell\n",
" # diff < 0 => item['amount'] < new_amount => buy\n",
" cash += diff * price\n",
" item['amount'] = new_amount\n",
"\n",
" # calculate updated portfolio value\n",
" portfolio_value = cash\n",
" for item in portfolio:\n",
" portfolio_value += close_price[item['asset']] * item['amount']\n",
"\n",
" results['portfolio_value'].append(portfolio_value)\n",
" results['cash'].append(cash)\n",
" results['portfolio'].append(flatten_portfolio(portfolio))\n",
"\n",
"result_df = pd.DataFrame(results, index=df.index)\n",
"\n",
"# dumping results dataframe to HTML can be good for debug purposes\n",
"#\n",
"# with open('out.html', 'w') as file:\n",
"# file.write(df.join(result_df).to_html())\n",
"\n",
"result_df.head()"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>portfolio_value</th>\n",
" <th>cash</th>\n",
" <th>portfolio</th>\n",
" </tr>\n",
" <tr>\n",
" <th>Date</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>2021-12-22</th>\n",
" <td>413367.236932</td>\n",
" <td>5135.756555</td>\n",
" <td>{'SPY': 297.0, 'TLT': 800.0, 'VNQ': 1332.0}</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-12-23</th>\n",
" <td>413033.165948</td>\n",
" <td>5135.756555</td>\n",
" <td>{'SPY': 297.0, 'TLT': 800.0, 'VNQ': 1332.0}</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-12-27</th>\n",
" <td>419026.189961</td>\n",
" <td>6327.963155</td>\n",
" <td>{'SPY': 297.0, 'TLT': 800.0, 'VNQ': 1332.0}</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-12-28</th>\n",
" <td>418997.783894</td>\n",
" <td>6327.963155</td>\n",
" <td>{'SPY': 297.0, 'TLT': 800.0, 'VNQ': 1332.0}</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-12-29</th>\n",
" <td>417987.099690</td>\n",
" <td>6327.963155</td>\n",
" <td>{'SPY': 297.0, 'TLT': 800.0, 'VNQ': 1332.0}</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" portfolio_value cash \\\n",
"Date \n",
"2021-12-22 413367.236932 5135.756555 \n",
"2021-12-23 413033.165948 5135.756555 \n",
"2021-12-27 419026.189961 6327.963155 \n",
"2021-12-28 418997.783894 6327.963155 \n",
"2021-12-29 417987.099690 6327.963155 \n",
"\n",
" portfolio \n",
"Date \n",
"2021-12-22 {'SPY': 297.0, 'TLT': 800.0, 'VNQ': 1332.0} \n",
"2021-12-23 {'SPY': 297.0, 'TLT': 800.0, 'VNQ': 1332.0} \n",
"2021-12-27 {'SPY': 297.0, 'TLT': 800.0, 'VNQ': 1332.0} \n",
"2021-12-28 {'SPY': 297.0, 'TLT': 800.0, 'VNQ': 1332.0} \n",
"2021-12-29 {'SPY': 297.0, 'TLT': 800.0, 'VNQ': 1332.0} "
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"result_df.tail()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Total annualized returns"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Annualized return is: 13.21%\n",
"over the period of 17.11 years\n",
"from 2004-11-18 to 2021-12-29\n"
]
}
],
"source": [
"first = result_df.iloc[0]\n",
"last = result_df.iloc[-1]\n",
"\n",
"years = (last.name - first.name).days / 365.25\n",
"\n",
"annualized_return = (last['portfolio_value'] / first['portfolio_value']) ** (1/years) - 1\n",
"\n",
"print(\n",
" \"\"\"Annualized return is: %.2f%%\n",
"over the period of %.2f years\n",
"from %s to %s\"\"\" % (\n",
" 100 * annualized_return,\n",
" years,\n",
" date.fromtimestamp(first.name.timestamp()), \n",
" date.fromtimestamp(last.name.timestamp())\n",
" )\n",
")\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Returns by month/by year"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead tr th {\n",
" text-align: left;\n",
" }\n",
"\n",
" .dataframe thead tr:last-of-type th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr>\n",
" <th></th>\n",
" <th colspan=\"12\" halign=\"left\">change</th>\n",
" <th>total</th>\n",
" </tr>\n",
" <tr>\n",
" <th>month</th>\n",
" <th>1</th>\n",
" <th>2</th>\n",
" <th>3</th>\n",
" <th>4</th>\n",
" <th>5</th>\n",
" <th>6</th>\n",
" <th>7</th>\n",
" <th>8</th>\n",
" <th>9</th>\n",
" <th>10</th>\n",
" <th>11</th>\n",
" <th>12</th>\n",
" <th></th>\n",
" </tr>\n",
" <tr>\n",
" <th>year</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>2004</th>\n",
" <td>N/A</td>\n",
" <td>N/A</td>\n",
" <td>N/A</td>\n",
" <td>N/A</td>\n",
" <td>N/A</td>\n",
" <td>N/A</td>\n",
" <td>N/A</td>\n",
" <td>N/A</td>\n",
" <td>N/A</td>\n",
" <td>N/A</td>\n",
" <td>0.94%</td>\n",
" <td>3.20%</td>\n",
" <td>4.17%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2005</th>\n",
" <td>-4.79%</td>\n",
" <td>2.73%</td>\n",
" <td>-0.87%</td>\n",
" <td>1.66%</td>\n",
" <td>0.98%</td>\n",
" <td>3.80%</td>\n",
" <td>3.27%</td>\n",
" <td>-1.38%</td>\n",
" <td>3.84%</td>\n",
" <td>-1.92%</td>\n",
" <td>4.58%</td>\n",
" <td>3.30%</td>\n",
" <td>15.77%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2006</th>\n",
" <td>6.38%</td>\n",
" <td>0.41%</td>\n",
" <td>3.73%</td>\n",
" <td>3.11%</td>\n",
" <td>-2.16%</td>\n",
" <td>0.68%</td>\n",
" <td>2.48%</td>\n",
" <td>1.28%</td>\n",
" <td>0.57%</td>\n",
" <td>3.37%</td>\n",
" <td>4.38%</td>\n",
" <td>0.38%</td>\n",
" <td>27.26%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2007</th>\n",
" <td>4.28%</td>\n",
" <td>-0.73%</td>\n",
" <td>-0.35%</td>\n",
" <td>1.76%</td>\n",
" <td>0.06%</td>\n",
" <td>-3.35%</td>\n",
" <td>-3.21%</td>\n",
" <td>1.70%</td>\n",
" <td>5.14%</td>\n",
" <td>3.35%</td>\n",
" <td>-0.45%</td>\n",
" <td>2.48%</td>\n",
" <td>10.77%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2008</th>\n",
" <td>2.23%</td>\n",
" <td>2.85%</td>\n",
" <td>-1.03%</td>\n",
" <td>-2.73%</td>\n",
" <td>-1.26%</td>\n",
" <td>-0.82%</td>\n",
" <td>0.77%</td>\n",
" <td>-1.18%</td>\n",
" <td>1.30%</td>\n",
" <td>-5.32%</td>\n",
" <td>10.34%</td>\n",
" <td>8.85%</td>\n",
" <td>13.71%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2009</th>\n",
" <td>-7.10%</td>\n",
" <td>-0.67%</td>\n",
" <td>3.80%</td>\n",
" <td>-3.76%</td>\n",
" <td>-2.21%</td>\n",
" <td>-0.66%</td>\n",
" <td>2.74%</td>\n",
" <td>6.85%</td>\n",
" <td>4.34%</td>\n",
" <td>-0.93%</td>\n",
" <td>8.50%</td>\n",
" <td>1.22%</td>\n",
" <td>11.60%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2010</th>\n",
" <td>-3.45%</td>\n",
" <td>3.94%</td>\n",
" <td>5.76%</td>\n",
" <td>4.84%</td>\n",
" <td>-3.41%</td>\n",
" <td>-1.98%</td>\n",
" <td>3.44%</td>\n",
" <td>0.05%</td>\n",
" <td>6.33%</td>\n",
" <td>3.99%</td>\n",
" <td>0.05%</td>\n",
" <td>5.00%</td>\n",
" <td>26.63%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2011</th>\n",
" <td>-0.31%</td>\n",
" <td>4.58%</td>\n",
" <td>0.38%</td>\n",
" <td>5.72%</td>\n",
" <td>-0.43%</td>\n",
" <td>-1.94%</td>\n",
" <td>2.69%</td>\n",
" <td>0.73%</td>\n",
" <td>-9.01%</td>\n",
" <td>5.55%</td>\n",
" <td>-0.64%</td>\n",
" <td>-0.52%</td>\n",
" <td>6.09%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2012</th>\n",
" <td>5.28%</td>\n",
" <td>0.04%</td>\n",
" <td>2.88%</td>\n",
" <td>0.69%</td>\n",
" <td>-4.30%</td>\n",
" <td>3.12%</td>\n",
" <td>2.40%</td>\n",
" <td>0.45%</td>\n",
" <td>-0.02%</td>\n",
" <td>-1.00%</td>\n",
" <td>0.48%</td>\n",
" <td>1.56%</td>\n",
" <td>11.85%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2013</th>\n",
" <td>1.95%</td>\n",
" <td>1.29%</td>\n",
" <td>2.69%</td>\n",
" <td>4.33%</td>\n",
" <td>-3.11%</td>\n",
" <td>-1.44%</td>\n",
" <td>1.62%</td>\n",
" <td>-3.69%</td>\n",
" <td>3.10%</td>\n",
" <td>3.63%</td>\n",
" <td>-1.16%</td>\n",
" <td>1.52%</td>\n",
" <td>10.85%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2014</th>\n",
" <td>1.41%</td>\n",
" <td>3.51%</td>\n",
" <td>1.13%</td>\n",
" <td>1.88%</td>\n",
" <td>2.44%</td>\n",
" <td>1.67%</td>\n",
" <td>-0.26%</td>\n",
" <td>3.69%</td>\n",
" <td>-2.40%</td>\n",
" <td>4.68%</td>\n",
" <td>2.46%</td>\n",
" <td>2.11%</td>\n",
" <td>24.50%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2015</th>\n",
" <td>3.53%</td>\n",
" <td>-0.84%</td>\n",
" <td>0.67%</td>\n",
" <td>-2.33%</td>\n",
" <td>-0.16%</td>\n",
" <td>-2.63%</td>\n",
" <td>3.74%</td>\n",
" <td>-4.32%</td>\n",
" <td>1.06%</td>\n",
" <td>4.71%</td>\n",
" <td>-0.22%</td>\n",
" <td>0.63%</td>\n",
" <td>3.49%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2016</th>\n",
" <td>-1.54%</td>\n",
" <td>-0.74%</td>\n",
" <td>3.87%</td>\n",
" <td>0.58%</td>\n",
" <td>-0.85%</td>\n",
" <td>5.88%</td>\n",
" <td>3.27%</td>\n",
" <td>-2.34%</td>\n",
" <td>0.01%</td>\n",
" <td>-3.44%</td>\n",
" <td>-1.33%</td>\n",
" <td>3.22%</td>\n",
" <td>6.31%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2017</th>\n",
" <td>0.78%</td>\n",
" <td>3.06%</td>\n",
" <td>-0.55%</td>\n",
" <td>0.97%</td>\n",
" <td>0.89%</td>\n",
" <td>1.74%</td>\n",
" <td>0.95%</td>\n",
" <td>1.13%</td>\n",
" <td>0.45%</td>\n",
" <td>0.51%</td>\n",
" <td>2.20%</td>\n",
" <td>1.68%</td>\n",
" <td>14.67%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2018</th>\n",
" <td>-0.59%</td>\n",
" <td>-4.10%</td>\n",
" <td>-0.18%</td>\n",
" <td>-0.52%</td>\n",
" <td>0.81%</td>\n",
" <td>-0.13%</td>\n",
" <td>1.02%</td>\n",
" <td>2.44%</td>\n",
" <td>-0.96%</td>\n",
" <td>-4.23%</td>\n",
" <td>2.82%</td>\n",
" <td>-3.02%</td>\n",
" <td>-6.70%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2019</th>\n",
" <td>4.21%</td>\n",
" <td>-0.25%</td>\n",
" <td>4.49%</td>\n",
" <td>-0.23%</td>\n",
" <td>0.23%</td>\n",
" <td>5.08%</td>\n",
" <td>1.05%</td>\n",
" <td>3.35%</td>\n",
" <td>0.40%</td>\n",
" <td>1.96%</td>\n",
" <td>-0.37%</td>\n",
" <td>2.90%</td>\n",
" <td>25.10%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2020</th>\n",
" <td>1.89%</td>\n",
" <td>-5.02%</td>\n",
" <td>-5.24%</td>\n",
" <td>2.63%</td>\n",
" <td>1.16%</td>\n",
" <td>1.03%</td>\n",
" <td>4.41%</td>\n",
" <td>1.04%</td>\n",
" <td>-2.40%</td>\n",
" <td>-1.46%</td>\n",
" <td>1.24%</td>\n",
" <td>5.04%</td>\n",
" <td>3.77%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021</th>\n",
" <td>-1.39%</td>\n",
" <td>0.36%</td>\n",
" <td>1.78%</td>\n",
" <td>5.33%</td>\n",
" <td>0.55%</td>\n",
" <td>3.39%</td>\n",
" <td>3.55%</td>\n",
" <td>1.68%</td>\n",
" <td>-4.16%</td>\n",
" <td>5.64%</td>\n",
" <td>-0.18%</td>\n",
" <td>4.20%</td>\n",
" <td>22.30%</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" change \\\n",
"month 1 2 3 4 5 6 7 8 9 10 \n",
"year \n",
"2004 N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A \n",
"2005 -4.79% 2.73% -0.87% 1.66% 0.98% 3.80% 3.27% -1.38% 3.84% -1.92% \n",
"2006 6.38% 0.41% 3.73% 3.11% -2.16% 0.68% 2.48% 1.28% 0.57% 3.37% \n",
"2007 4.28% -0.73% -0.35% 1.76% 0.06% -3.35% -3.21% 1.70% 5.14% 3.35% \n",
"2008 2.23% 2.85% -1.03% -2.73% -1.26% -0.82% 0.77% -1.18% 1.30% -5.32% \n",
"2009 -7.10% -0.67% 3.80% -3.76% -2.21% -0.66% 2.74% 6.85% 4.34% -0.93% \n",
"2010 -3.45% 3.94% 5.76% 4.84% -3.41% -1.98% 3.44% 0.05% 6.33% 3.99% \n",
"2011 -0.31% 4.58% 0.38% 5.72% -0.43% -1.94% 2.69% 0.73% -9.01% 5.55% \n",
"2012 5.28% 0.04% 2.88% 0.69% -4.30% 3.12% 2.40% 0.45% -0.02% -1.00% \n",
"2013 1.95% 1.29% 2.69% 4.33% -3.11% -1.44% 1.62% -3.69% 3.10% 3.63% \n",
"2014 1.41% 3.51% 1.13% 1.88% 2.44% 1.67% -0.26% 3.69% -2.40% 4.68% \n",
"2015 3.53% -0.84% 0.67% -2.33% -0.16% -2.63% 3.74% -4.32% 1.06% 4.71% \n",
"2016 -1.54% -0.74% 3.87% 0.58% -0.85% 5.88% 3.27% -2.34% 0.01% -3.44% \n",
"2017 0.78% 3.06% -0.55% 0.97% 0.89% 1.74% 0.95% 1.13% 0.45% 0.51% \n",
"2018 -0.59% -4.10% -0.18% -0.52% 0.81% -0.13% 1.02% 2.44% -0.96% -4.23% \n",
"2019 4.21% -0.25% 4.49% -0.23% 0.23% 5.08% 1.05% 3.35% 0.40% 1.96% \n",
"2020 1.89% -5.02% -5.24% 2.63% 1.16% 1.03% 4.41% 1.04% -2.40% -1.46% \n",
"2021 -1.39% 0.36% 1.78% 5.33% 0.55% 3.39% 3.55% 1.68% -4.16% 5.64% \n",
"\n",
" total \n",
"month 11 12 \n",
"year \n",
"2004 0.94% 3.20% 4.17% \n",
"2005 4.58% 3.30% 15.77% \n",
"2006 4.38% 0.38% 27.26% \n",
"2007 -0.45% 2.48% 10.77% \n",
"2008 10.34% 8.85% 13.71% \n",
"2009 8.50% 1.22% 11.60% \n",
"2010 0.05% 5.00% 26.63% \n",
"2011 -0.64% -0.52% 6.09% \n",
"2012 0.48% 1.56% 11.85% \n",
"2013 -1.16% 1.52% 10.85% \n",
"2014 2.46% 2.11% 24.50% \n",
"2015 -0.22% 0.63% 3.49% \n",
"2016 -1.33% 3.22% 6.31% \n",
"2017 2.20% 1.68% 14.67% \n",
"2018 2.82% -3.02% -6.70% \n",
"2019 -0.37% 2.90% 25.10% \n",
"2020 1.24% 5.04% 3.77% \n",
"2021 -0.18% 4.20% 22.30% "
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"\n",
"def montly_results(result_df):\n",
" initial_value = result_df['portfolio_value'][0]\n",
"\n",
" grouping = pd.MultiIndex.from_tuples(\n",
" zip(result_df.index.year, result_df.index.month),\n",
" names=['year', 'month']\n",
" )\n",
"\n",
" by_month = result_df.groupby(by=grouping).last()[['portfolio_value']]\n",
" by_month = by_month.join(by_month.shift(1).add_prefix('prev_')).fillna(initial_value)\n",
"\n",
" table = pd.DataFrame(\n",
" {\n",
" 'change': 100 * (by_month['portfolio_value'] / by_month['prev_portfolio_value'] - 1),\n",
" },\n",
" index = grouping\n",
" ).dropna().reset_index()\n",
"\n",
" montly_results = table.pivot_table(index=['year'], columns=['month'], values=['change'])\n",
"\n",
" grouping = result_df.index.year\n",
" by_year = result_df.groupby(by=grouping).last()[['portfolio_value']]\n",
" by_year = by_year.join(by_year.shift(1).add_prefix('prev_')).fillna(initial_value)\n",
"\n",
" montly_results['total'] = 100 * (by_year['portfolio_value'] / by_year['prev_portfolio_value'] - 1)\n",
"\n",
" return montly_results\n",
"\n",
"pd.options.display.float_format = lambda x: 'N/A' if np.isnan(x) else '{:,.2f}%'.format(x)\n",
"display(montly_results(result_df))\n",
"pd.options.display.float_format = None \n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Performance analysis"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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z7oPhGnSa2/HNkXQqtfZ2fP8wmefxRaNjVj21lv4hG0e9autxZTGRrzredjYXUe55uNiUBbh0Pf9L5p+9zzvJABfAbCf76vFb9/3V3QfP/Y8734AuwIoEA59378RwI0AsPPOO/szZ84srvGlwPLlwG23oW6HHYC99xbX+vTpye9Ut8UWmLLnnsBdd6Fu++1FKPMXXuh5vG6bbQCb91y5Erj11tCluu23D54dMwa4777wMyNHol5T9uzZs9HTvzNnAs8+231q0Zbud1Pey/NajR3bsyNbt912wsfm/ffFs2lFAPv3vwEAE6kt7e3AU0+JOmfMEOYLgwYBv/gF6saOFX6FdXUYQ/e//XbwrfbYA5g4sbCO668HRo5EHYAt+TsvWgS88454dq+9ChJNz549G5839eebbwJLlwKw7Pc08dxzQL9+GEv1LlgAvPtuz88laQ+nlQkTeoIp1W22mUhb8vjj4v8pUzB15kzRVyzNxsyZMzF79myMGz8eGDECm82cCcybF3zPvfcOBzVasEB8x5137gk0U7fVVtia3lVF1++9F3zjnXcWu8mrVmGUqX/uuENoDCZOBF4N4m/FGlvy+OB91Y26LbYAXn9dnE+bJvoIAP70J9RPmYJpM2cCS5YIEyl6prrabr7pRs88sX498Pzz+Pzeewdm8s88A6xejbpddhFBOkaNEnPQtGmif157DejsxKZyfWvWAC+/jL332Se5T8/jjwNr14pvoktsnBTNzcANN6Buyy1j9VUBFi4Eli5F/ZFHAm+80XO5hw4efhioqcHiQYNKP/4BsVvePVcSim7HM8/0BPWomzIlmJcBEVhqzhxRh41W4MorezRodZMmYZKqbXfeCUyahMm77y40dQMHClNdrj0cMQJNffpg3ODBGCeX4ftiTpg+PZgHdG0ZORJ1a9ao26HDI4+EtHV1W29tR1MtLcB//hM8t+22ov7ddwe23FL4yTc3o27rrc3tltG3r3n9LgIhnmLJEmDBguzo+qWXAM9D3RFHAP/4B4BuHqPY+pYuBebMEeXV1wM1NRifIz401Mccd90FjB+PyTlqK9asEbTmedhks816LN7qdtlFaAwffhjYdNOQpV3o3draiqfVq68Wde6xhxg/O+xQSCPHHQfOuWn7OMfInVmp53kHAPghgEN931eG4/Q8b6DneYPpHMCXAMwtXStLBG7mwCNm8siLqsAbtogys1PtcJfbmZq3iUeUyxIqn0MeyY5fB8JmI7r2kanUGWfo601iAlFOkzJVtNJyQu57lfmiDtykZsqU4Lo8ZiipOffzijInkU1TbBNpJ0llERfcf0n2f6W6ZbOdpH4dKpNcnXko94vK2qw0i9yHUWal770XL1riFluor8tjsNy48cbiyzj66ODc5CcYF7pxR6a51I/t7YV92r+/3uwuLi0Wa35mSzdyPX/7mziqgvxkUX/eIUepBdQB/+KgoSGcxmndusoyK80baGzJ66YuWJNs0ZLmOxUbbyDnyONb/QHAYAhT0Tc9z7seADzP29TzvH913zMKwLOe580B8DKAf/q+/0h5mpsBVD6HPG2F7we+F6p0CLaLjYqo+TWVL4RtQJeswM1nZJ/DtCCXSZPN5MlC+0R1A2rh0MaHpK1NaLYmTw5f5+bAlSYcqqKVlhOyoMr/33PPwns4OOMnb0hwrF8vjirhUJd3k5JP83ttFphifQ5toPM5rKoKhMK0mEFTvkId7agY8tbWQEOdhnCYRSAu8olRCYcffACcey7wf/8XXQ4JfyZ/uXJC7v8xY4ovk48tlc8hkGxcRPkL8vyecn/PnKlPZWEb7IosELbf3r7NQGEf2wY5kjd1ui1uis4FV6r8eUn8S+OAeCn+/vffbw4qF4VuS5UerFpV/g12W+TR55CPWYoCCxT6CBN+/OP020C5sWnclZvPyQhlypSrh+/7UzTXVwA4qPv8fQAxZ9QKgorYuOawvT0cXl6e3MnxPAqqxYvXrWKS+C6uDSZNsrvPdiLizEGWmkNVtNJLLgkmdr6rbILOObrbzKQARx0VMnOMjc+65pDTkUk4lIM6mMAXJFk43GMPYd6nonOdEMVpy1YbWKoIaG++GZzzdyWN3dq15ryncWATkEa+d8GCIMcV9cmllwbtzqvm0POExkA1X6xYIY42fnm6/vnBD4CTTxYmyro0F6VA1nXLwmEx40L3DAmHRAdy5GMAOPZYYT5bjHBI+M537O7TwVY41L1v0kA0hKFDgYceSvZsXGS5+UGaQ7kfTjlFvF+S/pE3R7q6KktzmDfhkPNT3LdZji5M0OUlLgaU4o1S4jjh0KFkUOU04zvOPClvR0fI9wRTp9rbyKuYoCjh0CZZL+Hee+0XyK98BXjyyej7yqk5lDUpgFr4498t7mJWUyO0s83NyQTfcguH5dYc2gqHUQwRL8ckHB5wAPDFL4bHZ5T2i5dnm5+vVGalPHiSyqz0xBPTq8smlYUMSuHQ1BRo2blAm9dopYCYT1V5Dmnjj5iOKMi0DAgf1gsuEOcKX9KSYTSLM3fDDemXr2P2bJhYebMmSjjkdKAyc+ZzxHXXibaddlpwLWqTISm9zZU8aJKalRKIlooREksx12ddB2kOVetumvkJK0U4zCN06x8X6nlk/yysQGi80prvzEodSgbVJMgHBU/K29kpAoEQ9tnHfhJNojmMM0H36WO/8NmajMh5Dqk9Bx5o3y4bqDSHfLHnwrl8v22qgoMOUl+nxSNJGgj+fQ45BHj55fhlJEVnZ/mFQ5UAT1C1La5wqCpTl/tQV7acGsU2/QCZlXoesOuuwLRp0c8UA/6u1dXppyUxpQGJMnXLYkc7a+GwTx+1loeCi9ho3WR/OBXKuUFECagnTBCBIdIAf59iNIdyQmzV3LxsmdBMr1pVqDlXtYvq/de/RIqIJUuCcRL1HdLyWbIVDnVrURrCYSmQtSZL5XNIaFaGv4iGas6sJOEwb5pDEw0T3a5ZE1zXzRfFgNyGVBt9vQhOOMwjVAueLBzKwgkhjkkUnwTJD0rWFujalgVstCJ8sO+9d9CeNHxbdDBpDlXCoUozJMPzwv6FHPX14liscAgIhqVUyItZKUEeC/x/G0bIRnOoqjdqR1GmDxvhkFsTeB5w0UXA5ZebnykW8lxQbI4+GSoh+n//V/gwbbml+l6CjiEuhtGm8ZalcKjqQxJa+vePLoNoxUQvLJptydGnj8gh+/Ofp1emaUzH8TmUhUPVM2S9Mm9epHCo9Dl86SV7s9I0gigB9maluvVVjiOQV+Ewa5DmUEUXMu3EKVNGpQiHeaQDk+bQ5noa70SbwU5z6FByqIRDft7RERCozCTF8QdSMfImzQu/L23YDjDOuNXUBKk+dt453fZQf7//frBrqGIWaILg34cSpgN6Ac8kEFx0EXDWWYGQGAel0LDoIAuH5Zg0dZsbOm2LSXNI4N/Q5v516wrr143lG28UzJ2tWSn1cZSAEBf77194Tab3tHwNCSrhcNIk4UNIu7PyOx58sDjqGOK8+hwCYs5WCYe2miYg/P3zis99Dthkk2zK1pmJ2Wwsyn2veoavp7ILgwzPKyyjttZeOCQz4lJpDnVrgayxzittZe13TZvuKhqjOT0uKl04rCTNoQpZ+BxSmb3c59AJh3lEMZrDxYvt6+FMkGoSUxF9VgNBtdCqIO/qT50KzJoVjgCZRlsA0Z7vfEfkugLUgo+K2eO75iomNmrCHTYsuZmszl+yFJCjlZYDJuEwDbNSm3ppc0AnYPLyVq4UgS3impWmgR/+0Kxxl+k9bTMaGyZaHitbbSWOWQqHWfipAGK+NQkkNoxYuaORlhvFRCvla2W/ftHCoY1ZqYzaWntz0UsuAb75TXtfUx2KMSsdOzYQDss9d0ehFD6H5PN/223h33796+RlyqiUaKVAZQmHKvrIwgqE1gdag5zm0KHk0AmHXV1hn0OOOITK7+1OMoxXXtHfL6ddSBM6c45HpAwlWZl8qcD7XCdcRC3MJlO8LCYVucxSMpN50xzKiBOQBkguHH7ySeE1TidJvolsVpoG9toL+OMfgcMPFxH5dHUCou/4O6TxbZubhYYwTlnEsKft/whkrznUbYDRu9gyYnln4tNGWj6HfENhwAD1M3RPdXVhZGwJPlCc5rC+XgRiKxbFmJWOGxecV4LPIZDdmsY33YcNC//GrYHioNI1h3mDTUAa+XracJpDh7IhSnPIzcpk4SQOoaoWL1PwjSuvtC87CVSL9X33hf/PalefY/16EVhAl2QVCPqGJ2VVQaVtsY1QmQQy81TKnT9Vzs1Sw6QJjButlGCbpJ5AAUY4dJpD1fO68rlZaVqoqQG+8Q21/6vcXzqTu6Robo7Omyr3C43DLBjEuCkI4qK62iyQ2NBZmprjSoGNcNjaKoLImCDTr6q/aZz26WOvOeTlxBEO04C8aWOC6n35O77zjjjmlb6yNivlm+4yKNBSXFSycJhHFKs5dGal1nDCYR6hIjbVhFhbW7gwxFmQVPXogqQA2WrtbKOVZrWrz0F+hrw9SaMnmoTDLCB/oyiGKU3wKLpAeQRFU9+mkcoiaVuKFQ4pWmiWprvkv0uQo5XqhMMddkhW34YN8fPimVLIFIusmXqd5jCOWakTDtW/XXqpCGZEGygqcA2bTjikb1FTk73PYRqorS1Oc8jXU7Jy4TmV84Ss6Z5rDmXYpgeTQfPUzTcH1yrFrDSPPoc6SyzbgDRpwAWkcSgbVOYT/HzffcWxurrQ3KFY4VBlOlkK6BgneXIqheZQVbc8Kdn2s0k4zGJSkZknMnEsBWThkCNKQ5QWdIKcLoCLjp6K8TmM8mVKImwSE5i25pBjp53C/8smwjrhMOmmkY3mUB7/law5pFyRMuKYlX4WhUOOOXPC/9O3WrRIHA89FLjzTvWzNppvLmjp/Jfl32XNIX3PUgmHcXwO5TapmGeV5UMeIFvrpI3OTr0wkURIWrcOuOUWcT58eHC9UjSHeRQOr7tOfV031rKYK2XhsJfOx044zCNUxNbVBdTVicTyX/qSuFZTI4JZcBS7IPHJoNTCoWoi0jGHpUCcvqB75faWW3NYSrS36/10SrVbKvuJEnSa3yFDgIsvti9Thyhtf5TmMGrcUqTLDz/MNiiUrk2ycMi/Z1J6TkNzaMsY26BcmkNnVmoPm82uf/xDfd3GrJTukb8Tp4lu94oen0PZ/SBLtwEZthY3QPTG0ujR4njsscW3KwuUIlqpbv1MIpDyTQq+FlaKcJhHLF2qvp5FHl4dnHDoUDaoJkGa2CnEO6AWlJIyNmeeWVhnqYVDuX4V+vcXjOlZZ2XfJt4WWbjR9bPMrKrMILJkHkqpWZXBU6wA5TExNeWV1GnFp09X309l2Sw6Kh9FOf0MIYlZaW2tyL325pul29k3CYdc45eUWWtujhYOo3wO08y9SKZjxUaP1EHnc+jMSs0wbfKo5hWdmaU8N6v6+9NPxdEU6G2LLYJrKjPWO+4Qx1JuZNpAZZI+e3Zw/sc/isjcI0aUtFnWyFJz+OyzwOrV+m9WbJ28351ZafqQ8/BOmCDSRGUB+pZxUhBVIJxwmEcQsd1zD3DIIYLoVSYhaeYhpAlLp3nJGjrhQWVWevfdyVM9xIFJONT5HMpMhSn8fykC0gDAf/+bfj0qUChwAl9oienKGrqASlE+ozI8T2i2brzRLoWDyqzUFG04Lkoh9Mt9YopWapOwPQobNsQ3N85Sc3jiicBdd6XzbiqkEa3UCYfR9+s2DEho9LywmR8H5fKUv4WiXq+jQ5gOPvpocNH3gWeesW9rsRg71p6BV/EQHLW1+RZcshIOW1uB3/xGnOs0h7o+vv9+waOp5iHdOK0UzWHe5hmTQqC6ujAasSlNUzGQ3b6cz6FDyUDE19Agji0t9sJhUsdplZ9jOTSH8sT/8cfh/0s5EOMIhxs2AOeeaycc0juWSjjUmWKkDZNZaVtbaQId8G/G22ISfHTBaT74QOTQlNOpqGBrdgwk1xxmjSizUr74piFA2WgOZciawzR3tj0vO8EQ0PscOs2hPeR3f+ONwnt0EWFvvVWc/+lPwgJHdZ9OAKHrU6f2XKppbhYnf/ubuu5SrFVxtDuVTjtpm5W+/LIw0//gg+BaXM0hffs4FgyVIhwC+dIcmvgYefMySzqXedVKHlMGOOGwUqAyCVEtPhMmJCufopTy/D55NCstl8+hzDSq+v699+zMSgmlEg5L9R1ln41yRk6V6zeZlUb1T1ztlMqsNEpzWAnCYdo+hxs3RjNKpFmkXWBZc1hJSeFL5XN46qnx21YpsAmoourH3/wm2GisrdULVdS3u+1WWO9ttwG/+lXhM+vWqevOm88hbTB/85vZtikrpCkc+r7wNb/sMqCxMbiuoqeBA/XzjEl7VOmaQyBfwqEJVVXhjfmojZmxY5PX5TSHDmWDTGwdHWpnctXkk5RQd9pJaL5OPDHZ88VCpzmUUS7Nobxo6CZ+vgsJmCOwlko4LFWkUFk4lPus1AuNrc8jfYeddy68BsTPc5hEOIxCOXxJTcJhFIPz7W8LDY0OFMgjKoDShAnAT34CnH22+D9LzWHW0PkcxjUr/ayBjy05bYqtcPjSS8E50ZyuLydNAs47L3ytqkpsnEbRfak1h3KdUfdVVQFf+Qqw2WbZtikLpGlWSmNu+XK9tckeewT16vo4ie9zpQiHedWI7bVX4bXqanurtyuuAC6/vPh2OM2hQ9lB+c2y9Dn0PGC//cIBb0oJ23aXSziUoWvvRRfZl1uqgDRDh6ZfjwpyQJpyC4e8LVFmpX/+M3DBBerf40ZBU70nX7jkCMOAXbTSrBGlOdT9pnrfDz4AHnpIXxcJmjaWALvuGmgqZQaxN2gO45iVAtG00tt2sjldUhongk36Ixk1Nfq5t7MTqK8vHG+qPo2Krp115GiyhrClm87O4L3Ltc4XgzQ1h7rNOj4f/fjHwq1AN26BYOzGCX5SzojicZDXgDQq0/84msNp08z5vKPgzEodygaZ2OIIh5XKGOh2Bevr1feVArwt8iRpOyGUWnOoYrZLwUD7fmGeqHILh1tuGZxHad1HjdIzTHHbbWIaly1LZl6bN+GQI8l3ff55cfz3v+M9RzQVR9uWF+h8Dsms9NVXo8uoJGE4C8g0mqQ/SDjUbeKoaF21wRYlHMb1p7XFAQcEdcVh4Ftbg02WStFecaSpOeSaYdM6D5iFQwLl2XTIHioeJ47msFg44dChbJCJraND7XOoIspKJVTdrmB1dTjqVCmFQ74TZRG9Tgmb3I1pwtbMKm1QHbxf5B3ScpiV/u//inMbf10O1Vi7/Xa7ek1mpbrIp3nwOZRRTLTXKKxeLY4ffZSsTZVoVqpjMleuDB+jQH0waZL5994I+d10TLsp+JXJrFTe4DrqKHG01TSUQjjkZnVxhMOWlsDFoJwpj5LC1vXEBkuWBOePPRacq+ZnnTm4LUpluZMF8ji/6izmnHCYKnrxKlLBUGkOfd/O761SCVUnHHZ2Rud2zAom4bCYflYJUmmhnJpDINwv5c7zZWsWqYL8fYcMsV/ko3wObeqTUW7Noc3GVBxssok47rRTvOdkn8NK0qTJu9uAoJGWFvsy+CahLrJqpa4BOpiCR+m0/SZtUFWVvo+6usLzFpWTJNBXVr7etC5NnhxfOCSaKffcnAQ0H6UtsLz1VnBOEWg5bDSHKlqgoCeXXJK8beVEJcwj5DvreWF+rRTCIdXXSzfjeudbVTpUmkNVlLo0fA5/9zvhb1Vu2AqHTnNoRp6Fw1LvQvJAAnHpRh5HcZgp0zfX9UHehUMT5HeYHK9uAAAgAElEQVSy+c4kaB9zjF0dcptUZqV59+VRMfJJI+ECwPe+p6+nN8EkHJ5+uvoZG1NBG7NSg3DYNHmyud6sNIdkhjxyZDzhsLk5EA6/9jVxrCTfw6yEQw7VRk1S4ZDaWamaQxK40uIfli1LJ50VH5+XXgpceaU432or9T1pw2kOHcoGeSF65hmxIOiYt223LbxmiylThL9VuaHzJyincGhiMGyDlJgEhSwmFVX/xA2okgSq9yy3WWmafghJ6C5NzWE5dvpNTLnnCc0FUPhdeT5EHUgoiivQmTSHefejUvkcUtL1uOUAYt7efvvC33sbs2KiQ525p03qGBuzUkO4+kaKZqlDVvRIY8eUkkMFrjmklFf/8z/pty8rpGlWqoNKcxgnXQhHpac68Dxg3jzgO99Jp7wzzwR+8IPiy+FzwODBwBZbiPMttxRBFeV7skKlf98I9M63qnRUV4tdQcL99wvTh7Vrw/fRABg9uvBapSJPmkOTcGjL1CaJeFoMyuVzSKHi+fcpteZQLr+2Nj3NYZznVf5wxQqHpRjXcc1Kr7kG2HrrwnJshEOTuZ4JJs1hJQqHn3wS/j9qjMjPf+97wAknAL/4RXCt0tcAE5IEAosjHMqaQ5PpWHW1OUBOVt+Bb6wk9Tns00dE4jziiGzamAXSjFaq0voCwKBBhdd0gaSiIAsPBxwA7L9//HLKDTk9VzEwJbK3hWlcUcAl53NYNHJuh/MZhsqMjJL4EmjS6Q3EqTMZ6erKh8+hrH0bMkQkm775ZnMZprQGvSla6W9+E92WrIVDWSjhmsNSCocE/r50rtPixlk0hw2L3xYbxHlnE+3G0RzG7VdTQBryY8wrVEzmxReH/29vjzb1430/fHhgmjt8uNhA7A3rgQ5JhMM4ZqUxNIdK+D4wYgSw6aZ29ydBGprDSgQf+11doh+SmsWqvuepp6qFt6RmpTLtUK7WSkGW88gTT4gAXEk016Z2UV87s9Ki4TSHeYVNuHsKn8wT/FYqTD6HXFAuV55DlfnXuHHxypCv9aaANAQ+UZbarFSONFdTk54Jb5znVe/5+uviqBMOowQqXv8JJ9i3JQ7iaA75wii/r02AFeqHpGal9DynbR7VOI9QmafJEUqjkmlTInMVqC8qMdiICSazUhnnniuOKuGwf/8w8x/H51BXr+pb1NRku1FBc0Uc4dD3wz6HlQjOI/z610EkWY6uLrVpqOo+Gfvtp9ccRvWxSTjsbeMxDVx9NXDnncmetdm0dJrDouGEw96AdevK3YLiofMn6OwMTAWA8gmHBx5Y+HuU0KVbVGjxyiKaXbmFQ5NZadaQBXguHJZSc6gKPnPPPeKY1P+Tt+fzn09WRlzwcSf3x6OPBtdlGr/66uiy6VvxOmxg0hyedFK8skoNGw2EjXCoA80rWQVCKRc47UWNQ5XvOp0ffzxwzjmFZXLoNIe6uUy1aSJHPE0bJBzGMSvduFHcl1UE1VKAf9sXXhDn8+eHN1huvhk49tjocaQzNdbVm4bmsNKQZ6GHu11xUJtLoTmcMyf7usqI3vlWn0WcdBLwwx+mX+5vf5t+mSqYNIcjRgT/l8Pn8LvfVUdVjFowhg5VL9xPPSWOWSzUqv4pV7h/mUHKuh2ycMjNSuMudGkIhyqkERwoq0XbNthHFN5+O/qeYoVDWXN44YVAXV28skoNE5O5447iGKVBVkWtJtCzKu1Hb0EU7ZuEQ1kDGUdzqBv/cnsoumOW69TMmcD06UJzZiscEm1UUnRSGapve/75wGWXBf8/95w4yr68gBAYFy4U56p5WPfNPqsBadJEmlZDVVUiwv5996l/A0or2OZZiC4Cjmp7C7761XBy3LSw1Vai7F/9Kv2yOVQ+h74fLLQkIJYjlUWUGZcKP/iBXvi76y5xzGKHf/jwwmvlMivNk+aw2Ak8SSoL1YIYN3WBCnHf5cQT7VJGyOVmKWQkFQ7laKVZRv5NGyrhkEzTp00TR5XG44knAusQk3BIcMKh2qxUnsfl8dnWJrSv8+cH16IYfFmYb28v1D6mjcGDxXpcV2cvHNJaVskmjroNZB4whYJSqcbRH/8oAjg1NKgFeFPe0DQC0lQa0pxT0+RBPE+s7aq4HKU0K9X930tQoVT7GcCMGYXXZs5U35uFUMhx0klipzJLqCZ+btKTpZ+eDOr7qMldpwUaPhzYe+9wGSpkIRwOHVqYdPez4nNo0hyWw6xUhTTMSuMuRkcfncxPkWsOdXVGMae631pbBX0UG620khgwlQZin33EcdIkcZSZ2jVrhJnuL38pzt94A/joI3M9vU045LQXle9Tpg9ATSMqel6+XBxJu8SftRWqOjqy1xxyfJaEQ+pTOTAfB/WFas0ji52WFvH7Djuoy1fVm8SslPq8UoWHPAuHOpRCc5hGsLoKQO98q94AFXGfcYb63vPPz7YtpYBKOOQLWimdu3fdNVx/XM0htTFqgsrKN0iOZlnK/IImzWGphcPa2vKalaapOSxGOLSF/I6cPpMKh7r3bW1NlnqikjWHnic0gCofcZPGAwBWrwbefVecq0zmOHqzcBhFM8WYlapMLuNuPrS3Z+9zyBFXOKxkRpa+n7z5yWESDjkddHbab0wVE5DG8ypjbsoaSYTD9euDOe+RR4Lrpg1WpzlMDRU8U/RyqCYjW6f4SkSU5pCH7y5VW2yFQzIJI/DdK9OikhUTp4ssWQqU06xUjlYqa5zjjJO0U1kQ0vA5LIWwv8ce6QikOmHno4+SCYeyZuh3vxPHSpgDly0Tx6uuCq7RtyTBRDZTJAY2Ttj+So5IGYU4ZqVr1ohzohV57ZDHEa0x550XXIu7udTRIepzmsP0EWeMy/Ms0QIgvo0cBT2q3qRmpZXc32kiSf/96EfBWPx//y+4roocTyhlQBpCJW+4GNA736o3QMU49VIiBKDe8eULWjmFQ90ET7/LOa245lC1cA8dCmy+eXZJu1VBEsoBeWc2ayE1KpVFMUJV3LHn++kKh/RNa2uzCyrB6ebHP7Z/ztSvigAr1c3NwMsvhxk2W9BOPNESCVyVMDcSfTY1Bddk4VAnTJNGygaVIChnBaKDF14Q7hBvvhmO7klQ9RGtMdxXPK7GLa+aw96QVsHmG+g0h3yu8X3xrW15CRuzUhVKaV6cBcptVrpkiTjK9G0SDili8/r18euzxWdkfq1gyu3lUCVMreSJJgomzWFVVb41h/LvUZrDvn2BiROLb2cUKNhHXlJZZK3xksuvqVHv/E+eHF1WsaYjunctNiCNKklzWjC9o64/ovpFIexUyUJ8XFRXFwrZlbBgEy1yIYXoRGdWSr+nEcioUhHn29L8Q3lFP/wQ+PRTcc7nI9XcrBIi45qVLl4svmHeNIe9QTi0oQOdcLhhQ3De2RnPrBQQvr68DBkqvsQJhwGK4UEaG8P/m4TDp58Wx9deS15fXFTyNzagd75Vb8Dw4cCsWcK8i9BLiRBAMBH99a/AggXinGvudKZBWeKXvxTHKOFQXmSiNIdZLxrUl8Rw5sXnMGvI71mMWamMuO+StuawFL51cYRDk1/tEUcE5wrNoV8s7at28ithbtTNF0Awr+k0h5Q/77OIODRPdEl019YGfP/74lzWHOrMSvkaQ3Xbjv9XXhHHUuUe/iz5HNq0nd5Tnmf5hlRHh/izjZRM/MhNNxX+RlpmSkXD4YTDAMXMXYsXh/83CYebbJK8Hls4n0OHXKAUgSjyAHq3F14IFnOVWWcphUNCVLRSmXGI0hzahKNPA8QMlYupLHW0UlvNoU07ivUr8H31IlasiW9e5gCV9ovA26jK21fsO5DPUJpllgLU5o4Okay7rS2YC2gjR+4vU3Cjzwro29poeuRxSlpD1fM2wuFZZwEHH1wY2ZKw3Xbq8sm8LWt8lnwOTXNwS4s40pwrr3lcOKRclHF5CZXFgylXcaULh2mCz9dRuVxlrF4d/p++tQrkb51lv8vjrZd+4975Vr0JnxXhUJWDSrWgxQ19nwS2goHOVCdKc+j7pZm8yI/JFPo7bfD3isorljaiNIfFIIlwqPJ7SGoemFfNIVDY71xrcuuthUUVSwcUvZiXUwlzI80Xb78N3H8/8PDDgXCo0xxy4ZALOirMmAFMmJBum/MAk8ZVhjxOuZAQ5XOoMisdOVJECdcJVbw+LijkTTispJQvOpjG+OWXiyP1u7x5xMfV2rViHo7LS6howLR544TDAHwc8jyiOsyaFZzLc6LNBscvfmHXriSQNx4qYe1JAEe5eQcRXtZ5BssNeYC1tJRPc2grHO6+u2jPAQeEr5sYZ0C8V5YTCtVJi98//5ldXSbQt9p3X3EstXDIGae4myzPPx/+Py3hkDMt110XrzygfMKhDF0+qYULRdJ2ApnZcdC7nHNOvPbxumn3X25PniEzFSTgel6wkbN0afgeTtNXX20u/+KLw1H9egvo2+68c/S9srmzSTiUvwdt3MQRGt58MzjnqV/yJhz2Bs2haX565RXRD/RN5VQ3XOu3ZEmyoEEqupDrkX+rhHlJhzTXGt4/NhukN96ov59HE9YhSyWC/E2dcOhQFhAhVvIkYwN5gDU3q3c7y2FWqquzvh64777C3fqoRKyl0hyWA7IQNmsWcOih4v9ytCupWWmxPm2ffhqOSimXu+OOgn5skTRfYxyY3lFXr3z9ww+j6ylWi0GaQ/6NKmGBVtGUrDks10ZOntGvH3D99cB3vxt9r4mmkmgO44A/ZwpekiZshUPSxFSyeXLUfHH//cF5Vxdwww3B2kPCYW0tsHKlOE9Dc0hj+s47C38rZUqTLJCVz2FcGuTPHnJIafwKTRg8OPx/JX9jA3rnW/UmUNSlSmB+ioFKc1gu4VBuS9w6aRHRJc8tlXBYVQXss0929aigeq9S0O7cuWpfBOqLYnfM436vU04JQnGrcOGFYbqy2Q0Fsu3LYcPs7+V0zc8t0mx4nD6TgDSHXAtbCfOjacOB06dqU4Hj2mvTa1OlYOxYuxQutmalqrk5ieaQMHhweDzvvff/Z+/Ow+Sq6ryBf3+dzr4nTTobhAAhJEBkadYEaJBFRURQFgXxFRxm3HAUl/F1wwFHZEQceRGNiiLjgKKDrCOKTgsqIgQCJCRkJSEJIaSzdsje5/3j1kmdunXurXur7l7fz/P0U9W3blWdOnc593fPFv4z6hE0OHz8cefRr79W1tU6xn/yk/LzvXuBhx5ynm/fDjzyiPN82LByrW7Y849tfXP/MmuR9WsFDRxCM/PJq+Zw0SLglVf838v8TAxzOuv0HUhbJ97LLwdmzUo2PXFxH/RvvmlvSpdEs5iogkPAu7lJEs1KRYBx49K/cLZNUxKlDRucCXPvuKP6tagG46mnUNJ3qLUf/Qi4807nuZ6vL6gkmpW2tXm/5v5er/kjg8zd2ehv0TWHV17pnb4scl8UmTWHZvqvvbb8PM81PWlwH6fmDYR6BqSp5aMfLT/X7+vfH7jkkuCf0Yiw87fmecTbMOfg3t7yaKT33AOsXes8HzSofE0V9iaA7dxm5ueLL1a/ludgJq6aQ6+pjK69FvjEJ6qXm+fNLJ7n87yNfSQwugdFwjbKYVIFUBq2bQs+1HTcwgaHQUYrTaLmUKR8AZrUCKm274g7OPS74Ikqn+v5HHe67r+//DzstkiiWanf8eYVHLoFCA4jqTns7a3s05mHAtp9DjeDQ9OaNeXntnzOw29NiztvzAvLoDWHYc7306eXn+ubgv37J3cRGzY4bHS05DSF2e/37gWGD3dGLzVrowYMKAeHYW8020Ymtc3LbP6f5z6eUTLzJuwNijAtRNIIHrMYsEYgc6WMiFwnIqtFZG7p7x0e671NRF4WkSUi8i9JpzNxeq6donKf+MMOdxwl98Feb98EW8G9a5fTzMUcvCBqZnCo05LURUG9weGvfgXcckt93+l3Mad/f6OTiNdzQR4mz4MWMHEXRF/7GvC979X+Xq9g1X2snH9+9Wc1Ghya8556pS+L3K083OeHoH1p8vBb06L3KZ2v5n6ih7nX3Bep9fQ5NL9PByFJb59mqTkMk6+9veVgzmym3b9/uVlpnz7Af/xH8M907z/6ezTbCKlBmkJnVZT7sZk3jQSHtcqMNFpaFPRmXVZ/1S1KqaNKf4+4XxSRPgBuA/B2ANMBvE9EprvXoxyxXXwm0ZQuiLA1hwsXOo+24HDNGmfZ/vtHkzYb8zv1iSupiwK/beV34r7zTuCPf4w+PVEFx/XWHHq9L2hNnPv1uI+FY44Jv2/6pd3ymjRaC9rSUj33VZo3k4K66qrK/90ja557bvV7bHmb9vkwy/Txpm8GmfuFeXHvNyBNvbU9SY1QatK/d9myctNJP3me6sR2LjUDeTMQMwesMo8hs+awtRWYPDn49+tWEQsXAl1dTvBnzmXrPla3bYv3JnCemNcfYW8CZ3ngsX/5l3zfAPCR12alxwNYopRaBgAicg+A8wG8lGqqqH5eNRP6tdtvD1b4xZGWsMGhLnxsweHrrzuP7e31pS0Is2bGDI727nU67V94ITBqVDzfnUazUr/P1RcPaQSHW7eW+8fV+rwjj/T/rKjma6yXX82h1+A05nqmKGoO3S0p8tBczv173c1KbccOg8NwdB7rQM+cI80dHHrtq/XUHKZFT8nxyU86/5vzw2n6d7797cCUKcmlLWq2/b61tXwjwF2Lp/9fvLi8fMGCymalYY4lXZZ+9rPO49FHV77uPtf19DjzZOZVXH0Ow8rywGMzZ6adgthktebw4yLygojcISIjLa9PAGBOCLWqtIzyylaTYhbeEycGm+cqjrQ0MkKq+wJEX7QEGbij0e/UfQ4B5+Q8d67T7y3M/HpRiPuE7hccnnmmc2ev0YGbglwEfvCDwNSp5f+7u4PXQvgNBgOk3xws6DZMIjjUfQ5NZr7nxcCB/oG1l6xdIGXF179eXXNoBofmsegXHIbJX9uNrySPVffv2Lixeh39elw3BJNi2y5eg7/19lbfMBo/vnKKkUb7A7pbK9hqDocMaew70pRkcOh37stycFhgqdQcishjAMZaXvoigNsBXA9AlR5vBnClaz3bHmLdu0TkagBXA0B7ezu6urrqS3RK9uvoQPujj2LRtddiV8bT3tPTU3f+Dl66FJO7u/f9/+qcOdi5ciUO6e7GyueewxazkI/ZiLlzMdFIy7y//KXmSekIY/1do0ZhUVcXDlq1CqqlBcuNPBn+/PPYv7sbi556CruWLQudtiB53HfzZkzt7sYbM2Zgz/z5GNfdjQVdXRi0YgUmdXdj67JlWBHxvqR//6vPP4/Nrrzqv24dpnR349Vnn8Vmj75/+v3z6khX65YtOMzIf23fZ33iE8DChRiwZg0O6e7Gjr59scTne3p6erB+48aKAm3j0qVYXSttbW0YPWoUxhlp6e3fHy2W0dnm/elPAIL/7jEvvYQx3d14Y+FCvJ7CeWD8okUYZfwu1dqK+V1dmLR8Ofpu2bIvPwcvWVJxHG9YuBBrXOlVPT1Y392NFc8+i611DK1/8GuvYaBre8974on0a3ECMM8Tr7z0Eoa+/DJGvvEGXurqwn7z5qHdtT/03bABU12/ddGTT2JXjRqJRs7FebPvGNqwAX2XLsXU7m7sffNN9Nm+HW8uXoxBlmOs/eWX0fbGG5hvLBszfz7GdHdj3uOPB7oI7enpwV+ffBKHdnejd9s2tJSaGPZu24aXEsr78YsXY/jatehTatK65fOfx8r3v79inRFz5mBidzd6fvtbvDLWdtmVXeZ+3P/11zHFdSzs3rsXfTdtqnrfmmefRdvq1ei3YcO+ZUsvuQQHG/2pX33xRWwGMOSd70TvwIF402Ob6f1r9dy52Ni3777/Fz/2WEV6NixYUHGum7Z8OTYNG4bXMn4cep0rDli+HMMaKJdNg1auxEE+ZbTs3o3Dje8yz5MbFy7EyNL/6xYuxDqftEx+9VUM7u7G8qefxrb16xtKs5+w1yt5PB+nEhwqpc4Msp6I/BDAQ5aXVgEwO8ZMBLDGsh6UUrMBzAaAjo4O1dnZGSqtqevsBL76VdSoV8iErq4u1J2/48cDv/nNvn/bZswAJk0C7r4bbcceC5x4YjSJDKK31+lTUNJ5+um132NerF16KcZ3dgKPPgoAmGTmSW8v8NhjaJs1y5lmIqTAeTxrFtpGjXIm1X7ySZwya5Yzj93//A/aDjkEk6M+Dkq/v+2YY6rn+Fq1CrjrLrQddZT3/F+l99e1/2zYYG2+U/VZy5YBd98NTJiAiT7f09XVhbbf/MaZq7CkbepUTAmStp4e4Mkny/8PHVo5qqY7bUF/92uvAc89h7bp0zEtjXPYwoXAkiXl/1tbnTQ/8QSwfn05P0eMqBiVte3gg3GoK71Pvfoq2kaPRttxx9XXGuDBByv7+gDoPOOM8J+TBmM/bevocO6Yr1yJMZ2dwPr1wDPPADD2h7Vrq/bttpkzgRoX+Q2di/PGPIbWr3emtBkwwNlHxo3bV1tUkR8rVgAvv1y5bPVqYO7cYOd7OHl8ckcH8NOfOn3LdK3UgAHO9kzCggVOV4XSOaZtyhQcZH63UsDNNwOjR6OttRUH5myfqNiPX30V+M//rFzhwAOtc+O1TZniND03gvy297+/YrL6to4O4KSTnGssPz/9KXDttc41SWdnuaz7+c8rj+dDDimf65QCvv1ttB99NKZmPM89zxVPPrmvK0/D55IFC4B7761a3Hnaac422rq18jg28/Wgg4Dly53nhx+O6X5p+e1vgS1bnLLliCMaS7OfkNcreTwfZ+5Wq4iYV8wXAJhnWe1pAFNEZLKI9ANwKYAHkkgfxcQ9jH6WBqQJyy+9uolE3ENcjx5dPX+a/u56JnluRNx9DuPgbuYZtFbK1q8sCklMZRGG1zyHQZrURTHPYVGYfQ7Hj7e/7paVfSCL/JqVutezNSsNm7fu0VH15yTFfX5xn7fMuffyPnCG7VxqG0EUcG7Smdvhyiud93/qU+VlrhtMnnSgorexV/lpNtvds8dZP87uI3ni1Sdc56nX3IdA5XbMQeuQoshiTt8kIi+KyAsATgfwKQAQkfEi8ggAKKX2APg4gEcBLADwS6XU/LQSTBFwB4fuPodJavTiy2+ew6QDNDMw0yfgRvpQ1uJ38k5jQBqberZvI4OnRCGrA9K4ubeFbbTSKPocFoE7b04+GZg2rfb8rgwOK5mDrAQNDoHqfVipaI7XpPscmt830jVEg3nRnffg0MYvODQDEl3emvnjzisv7uPN/Z3vfa/zaNbm1zNnZtYk0edQL/cLDs2uKFma57Ao5ZCHzI1WqpT6gMfyNQDeYfz/CICqaS4op9x32PJcc+gXHOqTYVK1HzrvenvL8z0l3Uk+zdFKo1gfCF4QuPfVqAqQtGtd9e+aPNlp4uM1kIotOJwzB7juOuDHPwbGjMHQBQuc19IOuNOmlNN83Rwk49BDrc3kKuTtfBi3m24qX0C69ym/mkO3RmoOTUmOnFvrfGNeWOc9OLQFELYbKcOHV9cc6uBQ50FrK3DUUcG+111+DRxY2VVAf7b5fTrf83yuSnJAGr9jJosD0vznfybfAithxQ59KT/8JihO+oSQRM1hUnedzN+iC7ShQ5P5blsa0tRIOtIODr0+P2nui50g8zX+7nfO46JFwNat2O/xx+3vDcqdpx+w3k/MB3d/VHdzRzYrra21tRwkuPcNvxoJ2427sMerGThccon9c+Okaw69bsCZF9Z5Dw5tc5naLtCHDQMefxwwB7tyB4dBaw0Be3BoS4N7Kg2v9DWjWjWHfsFjFuc5HD688HNYMjikbHA3vzBrDpNWzwnIHFzGaw44ILk+h25KlS9EazVba/R73Mzay7yqNzistS9ddFGw7ZF2n0P3XHy6KVWt4NBdsJsX61E1Kz3ssPo+J21ex4qZZ7Z1Ct6cqSHu86rXxPRefQXDHl9m4LD//v7rxmX79vLvcJ9j//jH8vO8B4cHHFC9zFaOvlqa5cw2jYk+1zYyXYn7fG3OJazpmkMGh45a3RD8rg3C1Bzqgcls/bcpFJYylA22Pk1pNSut5/tmz3Y6vQPA5s3lz3Ff3CXd3MS8CNLNSuMMum0n+TTnOYxKI8Gh3i9srrjCOopb4M9PihkcPvigM6ejVqumyzyOzYK+3iAn7trZNNnOGQAwgdP4BuLeF7zODbaatkb6HPbtm04Twlq/9+mny8/z3P8NqKyxmzHDeQx67Oum7DpYq+c8GqbmkMFhpTDBoXu6qzBlxllnOeVT3uf0zIAClapUKFlsSlCL7sun+xBlqc/hrl3OdAhAvMGUre9AVvoc6oujYcPCf0dcNYdBZaX/re33+Y3U6B5YKszgAl7c2yKv/Xq8ag5twbZ5QVqkYDhqYfPGnddh90m9v6cVHAYdKKpodNAVtBWMu3lxmP3EXX65a2D1di9as9Ioy2uvkWFffdUpE8y8c89bmcU+h00gx3suFVrempXa3p+lZqW33gosXVqZhjj4XZykPajKxInARz/qjAoZViPBYRQFms7XrIxWaqo1IE3cNYd5DQ518zdzPi6vPofTppXnmeQFkjevfepd77KvZ+b13r3h81b3g8tDcDhrVrxpSdIZZwAHH+w0b3/44drrT5rkPLa3A6edBlxwQfDvqtV03hYc6v0ir+emqD37rH35pz8NnH22U+OnufuWvvRS+XmSgz01Od6CpGxyX1QWhb4ASeo36YugecZ0oUk3K/ULAnp7yxfJ9Qrze97+dqczeVhpB4dpHwvuPofu5Zq5LcaPr/zf3eew3oI+z8Hh7Nnl53fc4Tya+5a7z6E2bVrlOmTndZxedJF9uTsQD3vDYswY4Pjjgc9+Np390FZT7+WUU+JNS5IGDHCa5A8aVLn8ppvs6+tgsKUF+MxnnMAyLF2j5c7jog5IE+V1gnvgLdOTT1Z+l7uW1wwW/QaYokgxOKRsSrMpQVQ1h7aJlvfuTdBdkmQAACAASURBVOciwuxvEmfTI7/P/u53q4eWv+cepzYv6xrZZlEGh2mr9VvcweCePcBTTzn/P/ecc6dYM6dwCMPrzn0e2IIPM0+9mpW61yE7r7xx9xPzGpAmbHDYpw/w5S8DU6fGO9CXlwDzihaSWZ597nPl5+ZNFFMjLS70PvXLXzojLgepOWSfw0p+NwJbWipf95ub1DZiLcWCwSFlU1H6Trh/x333VXe4jpMu2Mw7rPVcQOzdC6xdW3u9WgPSuAMC3VSuEUlcENV7QR5VzaG+Y+qeDzRtXsGM9te/lp+vWRPNdy5eXPl/kYJDd9DCqSwaJ+I9UmejwaHJXYuVBL/RgYvMDA7jrhE1jzfbHKS24DCqc12aoixX58zxfq1Pn8q886sd9AscKVIMDimb0mxWWu/3uU+mts9Jus28LTisJw0//SnwD/8AdHf7r+c3II1NFMOrZ3200ij2Xz1nl7sGJClezUoB7+DQnWfuu+gdHfWlxR0M5mmAllr7gnvwC9YcNs420Iyt5rCeAWlMaQSHYZqVFkmSI6+a+0Rvb3We25qV6ubj7CNXmzs49AsAGRwmhnXelE15HpDG/Bz3bzjqKO+Ru+Kgf4vZ5Kmeu8tz5zqPmzcDo0d7rxf2s7NWE+alkcFTotifLr/cyfsTT2z8s+pRT59DN/e+0eyjlWq2gNpdi8XgMFq2EZSLUHP4q18B739/ZdeGItYm2oLDww+vXnbssc6AJ41wB4e1mpWa00Ydd1xj352mpK6/Wlsr99HrrvNel8FhYnJ0y5WaSprzHEZ1sWkLDnfvTnYy4lo1PY18jk3YAWlYcxjM2LHA9denX3NYi97+t99e/dujukjNc82hLa22aXv89mkGh43zmuewkX0pjWPTfUzt2QMsXJh8OpLmDg5/+Uvghhuq1/vSl+obndpkHm/uqXmAchmmt4XZLy7Px2qc5erRR5ef28Zm8MIBaRKTo1KVmob7bmdempXaPsd90tu1K50mMWZ+1nORHnSuwrDNSllzmC+15jnUz/v0cV4zAzmzxtx2lz8od3CYZB/eONgG32Kfw3jZzmf1TGVhSmPwkVrTUxS1mam7DB04sJz/H/tYeXnUrQr0TWtzkvV+/SpHGWYAU5uZf+5mpX5Yc5gYBoeUPTo4TKtgqzcQsPU5tNUcphEcmhegYYPDbduAFSuc57W2Sa3P9rrr2ghbmsy546LQ7MFh0N+gt0VLS/W8hmaNxmc+E11akqyJb1StmkOzWSlQmZ9aEfanrIiy5jANRx5ZvawZRsj0K0Pf9rby8yiOFVuzUjPo7NevMsApSgAT1fWX/hyzO4p5U9jdrFS79NLq2vii5G0ONMFZhHLHHRzmrebQ7J+VlWal7r41YXzkI+WL/HqCw6RrDu+9N/oLpKgmbM+rsAPS6PUGDgTefLP6PY3cINH72Be/CAwZArS11f9ZSbPln1+zUl0ral6MFmWfSpM+ntesAUaMAG680emXnbfg0Ma9rxSx9jDNAWncNxH69ats7bRunfNoTtvTzHS+mPulWe736WNvcdTSUh6IbcIEYPVq4N3vji+dVKEAZ0IqnLSbldbbFCVIzWFazUpXry4vCxscbtwY/vtqLdPiqDkcMCD64DDoPmhbrwgXnFrQAWlEnN/tNfdbFMHhoEHR1xDHrdbx4a45tE2mzeAwmI98pPY6114L3H+/Mz3Kiy8WI29Xrkw7BfFLq3ZUH49+waGedzEvXSa8RHVTQefZG2+Ul7mDw1o3lfv1Ax58MN8D/OQMaw4pe3QH5SyMVvqtbzX2/qwEh6ZG8tXrvWPGOHdMzz/fPw3u97sL0BtvBM48M9w0B80wIE3avH5DrUnbvW5ENHJTwOzXmDe2fLQFfvo36gsr1hwGp/fJiRO91zGP55Ej7cvrceutyZ7fbW6+2ZkM/s03izlSKZBsHpv7hFJObb55/nIHh1reg8OomDWHuiXEhAnl1/v0sZfhZr4nOcI7AWDNIWWR7tydVrNSfVIaMwaYOrX+z7Gl212wpOGhh6L/zP79nVHhbDVF5oWtuxBw3wH+y1+AO+6IPn2NimrahbwKOpWFvhDQfQ69Lk4bCexszZTywrYf2QI/Niutnz7m/C7OzTwcO7b6vfU68MDKC9+0bNoEXHNN2qmIT1oBuFdwaDvXMTh06BtcZn5Mnlx+7jXdinmMmiPAUiIKcuVChdLSYh/BLym1aj2Cvj8LzUqjrlWrZ4h98/cGSY/us5El9dYchnlvHgTtc6jX9drejRzTRas5NH+HV7NS2zpkZ/Z3rbUOYB8QKO+KWmOo1Tp/XHqpM8dh1N/V2+sEh+ZNzb59q69ZgPzvS1FdO+gbXDo/3vveyuB6795yC61PfKK8nMFhqnK+91IhuZuVptXnMOzJ8fjjgcGDgXPPdf63NblLerRS22AgXtatA+bNiz4NfjWHUQzVH1ez0jvvLD+vdx9shloeW3Coaw7j2DZFCw7DNiulYLz6uwLxzL9J2XHZZf6TqYdh7isbN1aX4V7NSvM+smbUfQ7NGn0z/8yg2jxmW1qAiy92nud9uqIcYp9Dyp60p7IIOqef26hRwD33VH6O+Rn6BJd2s9KhQ+3L//EfnTQ++GD4z1TKv1+auV7U4tpPomjKV7Q+h2EGpFm8OJ60FK1ZqRkcumsO9ZxpAwY4Q8F3dxdjf4qTzsN6gsM8BopXXeWc07/znfKyIo5QmhZzX3nkEefRbIqsB1Rx34g99ND405YH+pjS+djSUhkcmoGfecyKOH1nAdYcpoA1h5Q9aU9loS8uGi1g3cGhvpOYZM3hKadUL/O6Cxfk7lyjeeK++MrLJN+c59B5tI3Ia3JfCMShaMGhX59DfcE5cKDT9OoLX4g3fUXidxPOKzi0Damfde9+N/DWt1Yuy2OQmyfmnK0iwNatwOOPO/+3twOnn+6MpkzVNYcilTfEzJHU3TWH+hhmcJg41hxSdowaBWzYkP5UFo32OTQ/x7yY1ie4JGsObXfPt293fptXwOPuU2HyCg6DBo1B1stKs1JTvVNZFC04tE1rknSA30zNSnVwOGiQ85enOR3TEmTfK1JwaMOaw+jUuqHj5ld+5knUzUrN1ifmNZA5Eql7EB99I537c+JYc0jZ8YMfAHff7T/KYRLq7XPo5hUcpj3UOeDfF1E3ZQsryEWZUsC73lXZBKqezzH97nfh1g/KNv9co5+TdytWVC8z9/Ekag6LFhzaag51Ppo1hxTMeec5j/oCfcqU6nWaLTgcMiSddBSVV5Pl3l6n6feaNcmmJw5xBodewfPw4eXn7uanlCgGh5QdAwY4hZhuw5+3Poc2tmalafc5BPyDw+3bvV9rNE/0QEN/+IP3Otu2hfvMOAbRceM8h9Esj0LRmpXqYAao3s90MF6EfSgpV1wBPPCAcwF6113AN75RvU7Rg0PzN/Xv78x9SNHx6revR9qePz+5tMQlqusvfVNcB4R6sDKbwYPLz901jJQoBoeUPUXpc+i+0LPNWZYWvwDMr+awnqks/N7v9XlhBjOJa/8wP5cD0gRbz5zn8PDD40mL3mfy2HTLnY9f+xpw8MHVr+t8fPLJZNJVJOYxN2KEfb45czuYAWGeg0Oz36EZHJ53HjB+fPLpKTKvcw9ruqrpm+JmcOjFfI01h6licEjZ06dP5eAoeQ0OgcpC2hzmP231BoBJ9DkEnEmcg0oi2G724NCLu+m0OfXCgQfG851mAJo37n3B/RuibLVA3opYc2jWQJv7Tx6Pk6zr2xe49Vbgm9+sXK73pY99LPk0ZZXXQHwf+lB1GeG+IcvgMDU8a1D2DBzoNG1M6wLJPZx8vbxGcky6sLb1ufEbmTTOfA8yWikQLo+SCA6bvc+h32+w9TlsafHMs1ff977G0lK0ZqWmqM495K+IwaF5vHF0x3i1tjqBzfTplcv1/sOgpkzvi/qY03lz4YXAW95Sua65D7NZaaoYHFL2uIPDtEYrjXpAmrSCwxkzqpfVGxwmVXMYRhL7R72jlYZ5b5YF7VtoNp227edHHYXNRx7ZWFqKNCANaw7TUaR5DjXzN5ktL4pw/skar+Avz60a3MxzUCPnI11z6A4OgepzuLtZKYPD1BRgD6bC6du38s5nXpuVegWHSf8e291wvzvL9f7uIL8r6ChuYQrX9vbg69arkXkOm8neveWmtLY8iyI/hg2L7rOSFrTmUA/cRPEoYp9D80LbDA7z2DfXy7hxzl/avILDOXOcxzzeuHKLekAafcyZ+6N733TXHLIGNjUMDil7WludQjrvA9Lo4PDRR4GVK4G1ays/PylBgkPz/3prDv2206WXOo833ui9jinMNj/mmODrhlHPgDS20UqLcBfZi+0GiL4wsl0gRZEXN94IfOIT+b2rfMst5edeNYe9vfmuxco68zg1z315Dg7Nfcmcj7RIweHs2c5f2rzyVKetaOf8Rq6F9PgGY8c6jyNHll9z56NZZrS0FCPIzqkCnTWoMFpbneZpRehzqBTw//6f/fOTYrvgcS+zTW4OBK/pqxUc2vo9LlsGbNliXz9MHiWxnzRygyKPNVxuQZuV7t1bLtDj2s/b24Gzz47ns5NgDtfuZjYrzXOgknVewaFfc/usM48387xapOAwK2rVaBUhqImqWak+vq68EjjlFOCoo8qv+eVTEcrNHONZg7LHHRym1ecwis+xnVST/j22IPeOO4Cjjy5PjmxeQJhpfuqpyvfVW3Noe+2Tn/ReP4y4gkMzzUUo7BsRdECaWsEhC3z/GmnzxpQOVMwpCigaZr7rPlFAvpvymufwVavsyyka7uBwwABgx47y/6w5LNPH16BBwMknV77m3jejmD6KIlGwPZgKQQeHWlrNSqOoObTd/c9CzeH69cCPf1z+3zblBlCd1nqDw7C/OUzeZ6nmsKjNSusJDm0BNQv8yjzwG5BGH7fmPIgUDa+awzwzm1m/8kr5OYPD6LmDw8suq/zfr3VAXkRVrurg0DbfqFlGuOfiLEK5mWPMfcoePc9h2s1Ko+hzaGumlFZweMEFwDe+UV6+eXP5uRmMff/75efutHoFbbWCw7DCNKnLUnBYdG9/e+X/tmalep9hzaFdkJsoZs1hs9dax6GIwaFXU8e89s3NMve5zX2MTpyYXFqS0GizUhH7eeyZZ8rPb7218jWWFalicEjZ07dvus1KowoOgWwFh5MnA21t5eVe83stWFB+7j6h795tDxAbrTl03zXMWs1h0G1mqzksQiEXVZ/DIuRFlILUHLLmJ3pFDA69gsCBA5NNRzNwl4vu/4cPTy4tcYmyz2Frq/3cv3p1+bn75gZrDlPF3Kfs6dOnMljJa5/DlhZ7kLNtWzSfH5TOS/fcc7ZpNtzcJ+gbbgCuuaZ6vVqFR6081aOZ1kqPTRJ9DjkgjfNoy2uv0Urdw5Kbj2Rn5jNrDuNj7oc7dhRjv2xtBc4/v3o5g8PoeY2yOWYMMGlSMfanqJg3DN3Mct52YxUAPvc54Otfjydt5InBIWVP2gPSxH3Hqrs73s93O+MM5/HQQ71/m9eopLaT+ooV9nX98q3WNhw6tPL/rDUrbfaaQz9BBqTRF1NFz4sggg5Iw5rD+Jj5/uabxQmg3vWu6mVF+W1Z8s53Vv6vz3nr1nmXj3kTVc2hX3BoTmvhpo/RU04BZsyo//upLgwOKXuyMpVFo7wuhE86KZrPD+q444AHH3TmGTLTpPN38WLgX//V/t6gtRa9veFHKzUNGlT9eUFluebwueeq33vggXUnKTVeNYdBm5XqZQwOgw9Iw5rD+JjbYN48J0AsAlvZNWBA8ukoOndQU/RjNK7g8KqrvN/HZqWpYu5T9ug75frOeV5rDr3SnWZBYgsOX3vNe/2gaW20z6E7OMxazWHQfXDr1trvPfHExtOTtDB9Dm0D0jA4tHMfF6w5TEZR90Pb72LNYfyKGBxGVa6aXQ3cbCOYakU9RnOCwSFlj74YSmtC4ijnOYzz8+sRNPDVBUOY9Rv5XW1tlX0ZsxAcmr/njTeCvcfWpMidL+5AOA+C9jn0qjnUz1ngV2LNYTrc+6G+SD3uuOTTEiUGh/H4x3+snq7CVMRjNIlmpVFOf0WRylzui8gvRGRu6e8VEZnrsd4rIvJiab1nbOtQTungUI8iV7SawzRPemaaNm3yXu/5553HsMGklyCfc9ZZ5edhmpU2Oh9lELYaQRv3iGvnnlu9H7S3R5OmJPk1Kw0yII3OP3Mk3Gbl11xZ//9//y+wcKHznDWH0XPn+2WXAf/1X06+55ntPOtXO0PBvPOd5b77NkUMDk2NlLFmaxK3RrqiUKxClToiMgBAP6XUlpjSA6XUJcb33Qxgs8/qpyul1seVFkqJOzhMWtzBYVZqDqdP915v+3bnUV/4X3EF8LOfBf9st1q/2f26X+CaFDPomTkz2Htsw3Gb+XLxxcn3OY1C0H3WvEtsu2BKejCmLArS5xBwghWg+BeeabANBOQeFCuPbMcpby5Ew+8cWMRjNKoWOfXWHDI4TFXgq2AR+TCARwE8LCL/Fl+S9n2fALgYwN1xfxdljD6R6GZVeT1JZL3m0K9A00GOvmO4//7+n1trQJqgv/nOO53HMANExNWs1PzcoBNJ17oQmzUrn/uzX7PSbdvK81XVmueQKnmNVgqUp7zhxX303PlelJsWnFs0Ps0WHJrYrLTpeOa+iJznWnSmUuo0pdQpAM6NN1kAgFMAvK6UWuzxugLwOxGZIyJXJ5AeSooOTNJqVhpHn0O/2oIkufuHedGv6fWDFH5R5NuoUU4gloXRSs3PDbrN3Bfy7prDvF6o1RqtVPcXZXAYjlezUlPRLzzT4M7nLbE1hkoWg8P4+M3VWvRjtJEy1m9AGtYcZpbfLcm3lGoLv6KUeh7ACyLyczhB2fxGvlREHgMw1vLSF5VS95eevw/+tYYzlVJrRGQMgN+LyEKl1OOW77oawNUA0N7ejq6urkaSTj56enoiyd8RL76Iid3deOOFF7BfdzcW/fWv2DV6dOMJDOGI0p3keQ38nvYFC7Cf5Y70vD/9qe7CpNE87tPTg2mlNG1YuBBrurpw8G23YaArnSuffhpbtm/HiDlzMLG7G6/MnYsDjXXc+TJ97VpsXLQIr3mkbeCqVTjY5+78S48/jt7SwAlHvPYaMHs25gWcTLjtxRcx1idtYek87vPmm/vyav4TT0AF2GZt8+ZVpGX9yy9jS9++OKi0bMnf/oYdr7zSUPrSMPKFFzChuxublizBKiN/xy1ahNHGsXLQ8uVQfftieVcXxj3yyL7XTFGdJ/KqdetWHFbKl0V/+1vFuW3gypVVx8mSZ57BDr8RhS2aPY9rGbx0KSYb+bxh+XKsCZlfWczjlh07MN21/zR6PkxTlvK478aNmNrdjZ3t7VjsStPg5csr9qc85blXHh+8cuW+64IFTzyBvXUOpDZpyRL03bQJSyzfMWDtWhziutbS117LnnsOb2ahe0kEsrQfB+UZHCqlbhCRsQD+1Wnhia8AGAJgkFLqhUa+VCl1pt/rItIK4EIAx/p8xprS4zoRuQ/A8QCqgkOl1GwAswGgo6NDdXZ21p9w8tXV1YVI8relBfjDH9A2eTLw4otomznTmaMvSaULtoZ+z6pVwIsvVi3uPOOMuu+KNZzHe/YA994LbNiAtoMPxqEnnwzcfPO+36u1zZgBnHoqsGMH0NWFtpNPBh54oPwb3GnYbz+MmToVU73StmQJ8ItfeCbr1NNOK4/iaeZ9kHzauBF46invtIW0L4937wZuvx0AcFpnZ7CAfuNG4O9/3/dv27RpztQVv/qV8/9JJwGTJjWUvlTs3g088QTaDj4Yh5j5u2TJvoFTOjs7gYceAgYPxqTOTuDJJ6v2KwAYMmRINOeJvNq0CZg9GwCqz22LFzvHp6Ft5szQc2NGdi4uqtGjgd/8Zt+/bYcfjkND5lcm83jHDuC22yoWZS6NIWQqj5Vy+uKffTYmtLVVvtbeDvz3fzvPP/nJ7KQ5AM88fuCBfWMPnDJrFjBsWH1f8Kc/AcOHY6LtO1asAH7+cwDGfloqM9pmzgQOPbS+78yYTO3HAdXqzLANwD8DmAInwHoawL/HnSgAZwJYqJRaZXtRRAYDaFFKbS09PxuAxyzelFs6GEmjecEFFwAdHY19hrspqW4qmWZzidZWp1/fVVc5TQC9mm/qZqW6aW+QPneNDEhj49ccxaSbvJx6KnDYYeG/x4s5uEy9o7b69SnLo1rNi7z6l/Tt6+xLH/5wPOnKK78BaTT2OYxe0Y5LLYmRm5uVCPD+99tfM895b31rMulJUqN9DusZrZTnvVT59Tm8AcDDAP4AZ1TQdwF4Hs6ANB+IOV2XwtWkVETGi8gjpX/bAfxZRJ4H8HcADyulfhtzmigtaQRTV14JzJjR2GeY6c7acOJ9+jgnba9+h3owIP1YK/21LkrCjlYa5DPd611zDXCeu6t0RILug7bgsAgXnkELd/NCwMwLffE0dWr0acsbv6ksbPlc9P5MaShqf6aBA4EJE9JORfMxj9Gi7lv1CjIgje285x75mxLld9XyTqXUqQBOBnAFACilHgBwDoBRcSZKKfV/lFLfdy1bo5R6R+n5MqXUW0p/hyulvh5neojqkpVBaGx0cBi05jDIiTrqkcfC3q3MYqEs4h8M5E2tgN28EDDX1cvy/vujxprDdGTtfBwVEaebwJQpaaekuRTxBo5Z/sY1II3m1dqEUuN3hpwnIncBuBfAn/RCpdQepdR/xJ4yal5BRvDLAzPdelj6rOjTxzlpe13s6xrDoMGhUo1dcEVRc5iF/aRWzWEW0lgPW22g7X8zONxvv+r35/X3R8nvZkEzjoRI0Ro8GPj2t9NORXMp4jEaVXDoV3PoVy4wOEyV59WcUupyADcB+JJS6lPJJYmaXlGCQz2RvOm7300+HTa1mpU+84zzuHu3c5KuFfjVKjzqCRzD9p/J4n6SxTTVI+jvMO8Sn39+/Z/TLNzHhe04Yc0hUbYxOPTmFxxqbFaaOb6ljlKqeqhFIgqmp6d6WZ3DQUeuVrPSOXOcxzDBYdQD0gQtkPR6WQw8ij7PoZt5IWALavL6+6PEmkNKwgc/WDFyMsWIx6i3IAPSsDl95hS04T0VSl4vKG0X0lkpRFpa7DWHP/hB5f86OKy1DRodkKaez9TiDA5DTiFQtc3HjClGn0Ov4NDWrNTvJkFR+3rVizWH2dBIzUhWvfe9wE03pZ2K5pCVcj0ucdUcckCazGJJTdmX1wtqW5PNIFNCJEHXHOq+hdq4cZX/P/00sGVLsIt6v+0UZrTSf/on5zELweGNN+6b6zBUWrSDDipGQBQmONQXAkX43XFgzWH2FDE4pOQU/RhNo1kpb4qlKnTui8g4ABuUUjtjSA9R9QVSXk+8ejAXU5aCw95eYP78yuXuvF+/vnq5bSQ8paIbrTRoE0YtzgFpBg92/sI66yxg+nQnOFxlTNea1xsd9TQrtQVBDBgrMThMhzufBw5MJx1UDEU8RqO6YeI3WqlfuZDXsrIg6imp7wKwUES+FXViiKyyElCFlfXgcO9e4LXXgq3vd6KOoubONu1HmAFpslaQjBwJnHlmcUYrrWdAmrz+1rj5TXHDi6R0vOUtaaeA8qzowWHYweFMQUYr5U3DzAldc6iUOlNEBMD0GNJDVH0xlJWAKixbcJiVk2Ct0UrdzHR73VEMEkCG+a6wU1lkge13FrnPoZtXzaGWlf0/K4oyMnPeuPN5xox00kHFUMTgMCq1+qEDPO9lUKCSWkT6iMh4ETlARA4AsL9San7NNxJFIa8nXh0c6uA2S23o9YA07j6HJjMQME/eS5YAL71U/j9Is84wwWHYZqW1vjtJtYLDvGu0z2GR8qJeYWsOiSjb8nqNEtQjj9T/Xr+aQ31z2hx85uqrgWOOqf/7KBI1SyIR+QSA1wH8HsDDpb+HYk4XUf7p4PCyy5zHIUPSS4vN0qXAgw96v27WKrov6ru6ys+DNCsNU7vnNeG6l1rTaKTBq7Ywr8FR0G3idZfYb8jyZsaaQ6L8K2JwaJ7r4woO9c1pMzg87zzga1+r//soEkGqMj4JYKpSqjvuxBABKM4Fkg4OBwxwHrPU/DFIMGWm171NbDWOjdQc2mpTgjZ5zfpIg0Xuc+ieKNnsc8iaQzu/mkPmD1H+FPG4dZ/b6+U3II2+RspSqyoCEKxZ6asANsedEKLCcQeHWQ9i3FasKD93X8SawWHazUqzVHNoq0Ut0oWDX7NSvR/43UUvUl7Ui8Fhtowfn3YKKO+KeNxGdb3iV3M4ZozzeOGF0XwXRSZIuL4MQJeIPAxg3/QVSqlvx5Yqam5FOdGOHesEWMOHO//nrebQ7FcYpPlb1DWHYaeyyIJmHpBG1/Sy5rB+WbnJ0UxOOSXtFBBlW6PzHHqd14YM8e/aQqkJEhyuLP31K/0RURCf/jSwYIETJALZqjkMcpH+ox85j+ec4z9wRpA+hwccUH5+wgnAU095r6s/e+dO4NVXgf33r53WrF1UF63PYZB0u2sOzffofaSIfXMa4c5XNq9K3lvfmnYKiLKt0eCQ5/3cCVIS3aWUWhZ7Soi0vF5Auw0aBBx7bHkuwSzVcIXJ48mTq5eFDQ5bWoCLLwZ++cvgabv9dmDhQuBnP3PmDfSSpXwt6mil+je489r8vbrm0DaxsV4va0F8Gvz2BwaHydDbYMoUYNy4dNNClEVJNCulzApSUv9URJaKyD0i8lEROTL2VBEVib7gy0vN4dlnV/7f0lK9ftjgEAC2bw+2nn594ULncetW//WDfGZSzjnHqSU955zysiIPSOO3rjkCHWsOyxgcEhXTccelnYJsUcr543k/d2qWREqpU0WkH4DjAHQCeFhEhiilRsWdOKJC0CfGLAWHfs49F/jd78r/22p7zGVBBqQByn0LFiyofs18r7sgqTVqqVLZCbra2oDbbqtcVoRmpZrfPuze8+pqHgAAIABJREFUD9isNDzWrCYj78chZc999xXr+I1itNJdu5xH80Yh5ULN4FBEZgE4pfQ3As4ch0/EnC5qZkUruPUFcZaaP/qlRY+uqtku6G3Lgm63WvkQZNoM9+tZrnEpQnDoNSBN0Ga0epsX6eIpDnndP/IqLzfsKPuyXAY1qt7jZNMm53HEiOjSQokIsjf/CcAzAL4B4BGl1K54k0RUMFkMDm21ceed5zy6g8NaNYdBm5VqtkLUL4CqlW+7d2f7zmQRLvi9gkMzcPe7gGCfwzKdl7VqUb/wBWDLlvjTQ0TkFsWNkw0bnEe/MQMok4IEh6MBzARwKoBrRKQXwJNKqS/HmjIiAJg0Ke0UNC6LzUptAdfJJzuP/ftXLo8qOBw+HNi8GehnDHo8bVp1M1P39+n5Ir1kPTgscp/DnTvLz/32AwaHZeZgKH46OiqPFYpels7JRFkSxbFxzz3OI4PD3AnS53CTiCwDsD+AiQBOBpDhKzEqlGuvTTsFjcticGhrqqmXuYNDWw2HLTis5WMfA/7t3yo/76tfBdasqfw8dwBRq1lp1oNDU16DQ829rXdZGpLYAsAxY5xpSRgcOjXn3/gGcOCB/usxMCSiLKjn2mXTJuDZZ53nw4ZFmx6KXZA+h0sBvAzgzwC+D+BDbFpKiSnCBVIWB+GwNSvVF/ruZp9Baw5rXfjrAM4saAYPrq5BKVpwWISAyKtZqRkc/vGPzuOOHeVlP/mJsz/19jqjzxbheI7CEUeknQIC8n+zhigJ9XSJufXW8vMsl89kFaRZ6RSlVIY6S1FTKULhncXgwHay92q+GVWzUv2eOAakyXLhU+QBaczg8Be/cB7Xry8va2srP9fNlonSNmiQ8zh2bLrpIMqqRls69fSUnxd5sJ6CCnLVOl5E7hORdSLyuoj8WkQmxp4yIiC/F9MmEWewl29+M+2UlPnVHLoFbVZaa1sFHZjH3ayVfQ6zwy849AogibJmwgTgS18Crrkm7ZQQZdOHPtTY+81yO8vlM1kFCQ5/AuABAOMBTADwYGkZUTzMi8u8X0xrV18NTJ+edirKbLVxXsFh1DWHXt+juYPDIM1KeWcyXkEGpCnKsUrN4YQTgIED004FUTadfDJw6aXO83pu+OmRSgGWzzkUJDjcTyn1E6XUntLfTwHsF3O6iBy84IxHd3fl/336AMcea1+3VrNY3cfMHdS5jRvnPB52GHD55cA559jXqyc4zPKdySLUHAZpVqqx5pCIqLkdf7zzOHVqNrvWkK8g4fx6EbkcwN2l/98HoNtnfaLo5PViOuvMu3qDB5eHnLbRzUH/+7+BCy90nptNQ3VwWOsufFsb8L3vOSOXDR/uvR6blWZPkOBw69bk0kNERPFqpLxqbXWuLb71rejSQ4kJEs5fCeBiAGsBvAbgvaVlRPHL4kifzUYHN2YAZgYJb77pPAZporX//v6BIVAdHC5Z4r/+nj3ZbrZS5ODwkEOSTwsREcWvkfKK3T1yrWZwqJRaqZR6l1JqP6XUGKXUu5VSK5JIHBGDwwTUagZoaxJivkfXHA4YEE163MHh73/vv37Waw6LwCs4/Oxnq9dls1IiovxrJDjM+iji5MszrBeRWwF4lvJKKQ7zRfFjcBiPww8H5s8Ptq65DT73OeCmm+zBoR4evlGtrcDppwP/+7/B1s9TcJjXmkPNHfhFdUOAyu6+mwE2EeVb1lv0kC+/msNnAMwBMADAMQAWl/6OAmAZB58oBuzIHI+hQ8vPa12Imq+fcopzwlcKWLbM6Xu4fbvzWpSBwpFHBl83T3co8xoc5jXdeTRkSOXxSUSUN3m6aUtVPMN6pdSdACAi/wfA6Uqp3aX/vw/gd4mkjog1h/GrFRy6R6QUAZYuBe691xnqul8/Z3latUhK8SZC3DiHIRFRc2m0WSlrDnMryJYbD2AoAD284ZDSMqL48aI/frUu+M257ACnwFi/3nm+eDEwZ47zvNZUFmGE2e69vfmp2cpLOt0YHBIRNZdGyqudOxkc5liQLXcjgOdERHcAOg3AdbGliMi8AGXNYfxqXfC7RxcVsb8nrcCHwWH8wqSbASQRUfN67jlg7lxn7ADKpZrBoVLqJyLyPwBOKC36F6XU2niTRVTCmsP0TZ1a+b9XoBBl4BM2GOF+kowggR+DQyKi5vWVrziPkyalmw6qW80rKhG5C8B5AF5WSt3PwJASc+yx+a1pyboRI8rPbRfzn/+893uTqDkM81m9vfkJDvO6P4dpVtrbG29aiIgofo2WV6NGRZMOSlyQK6qfABgH4FYRWSoivxaRT8acLiK2V4/TVVcBl13m/fqsWd6vtbSUgwQzWEiz5jAvQVde0ukWJjhkzSERUf41Wl7ltbyj2sGhUuqPAL4O4MsAfgSgA8BHYk4XEcVpwADg7W93noe9mDdrDp99tnJ5VFhzmC2sOSQiai6Nllft7dGkgxIXpFnpHwD8BcAlAF4GcJxS6rC4E0ZNjDUPyag3oPJqVhqloIWSUvmqOcw723Y/7bTa6xARUfM49lhg2rS0U0F1CnJ1+AKAXQCOADADwBEiMjDWVBFR/HRwWE/NYZjl9TA/a8yY2uuz5jBeful25z2DQyKi/KunvNItRw5jHVKeBWlW+iml1KkALgDQDacP4qZGv1hELhKR+SLSKyIdrte+ICJLRORlETnH4/2TReQpEVksIr8QkX6NpomoqehpQhppVhoXs1Dy+y5dEOU16MqLMM1Kjzgi3rQQEVH86ilX9+xxHjlmRK4FaVb6cRH5BYC5AN4N4A4Ab4/gu+cBuBDA467vmw7gUgCHA3gbgO+JiG2yu28CuEUpNQXARgBXRZAmyhJe8MerkZrDuIND8/P9vku/lpeaw7zyCw7dx+lZZ8WfHiIiyp7Fi53HTQ3XIVGKgoT2AwF8G8AcpdSeqL5YKbUAAKQ6ADgfwD1KqZ0AlovIEgDHA3hSryDOm84A8P7SojsBXAfg9qjSRylis7Rk1BtQJRGI7d1bfs6aw/SFCQ65LYiI8q+ec7kOCqdPjzYtlKiawaFS6t8BQETGiMgAY/nKmNI0AcDfjP9XlZaZRgPYZASrtnWIyI9uVrrffvbXP/axyvkQTXEHiGGDQ9Ycxitos9J3vCP+tBARUTbpZqWTJqWbDmpIzeBQRM6DU3M4HsA6AJMALIDT7LPWex8DMNby0heVUvd7vc2yzH1FEmQdnYarAVwNAO3t7ejq6vL4WmpUT09PJPk7bP58HNDdjS3Ll2Mlt1eFqPJYG3b22dh+wAHYbfvMAQOAHTsA12tT160DRNDX1WxkXoTpGvnss5jQ3Q0A2LNzJxZ6fHbLzp2Y3t2NtfPnY31EE+5GnccAcETpt0SZR0nqv24dpnR3Y5cIFrl+w4SlSzGy9Ptef/11vFHjN8aRv1SJeRw/5nH8mMfx88vj0fPmYVzIsmvEnDmY2N2Nl//+d+weOTKiVOZbHvfjIM1KbwBwIoDHlFJHi8jpAN4X5MOVUmfWkaZVAPY3/p8IYI1rnfUARohIa6n20LaOTsNsALMBoKOjQ3V2dtaRJAqiq6sLkeRvv37Ab3+LtsmTcRC3V4XI8lir57PuvNN57FPZFTjSdG3fDjxe6o48YgTGen32tm3A6NFomzGjvt9iEXkeA8Do0QAizqMkrVoF3HUXMH48xrt/w/z5wCuvAADajjyy5naIJX+pAvM4fszj+DGP4+ebx5s3A089BSBE2VW6odx22mlARDds8y6P+3GQtli7lVLdAFpEpEUp9b8AjooxTQ8AuFRE+ovIZABTAPzdXEEppQD8L4D3lhZ9EIBXTSTlFfsuZVNLS2WzzzgEbVaalwFp8l5I+jUrNfOexywRUTHUcz7fudN57Ns32rRQooJcUW0SkSFwRhX9uYj8B4CGB6YRkQtEZBWAkwA8LCKPAoBSaj6AXwJ4CcBvAXxMKbW39J5HRGR86SM+D+DTpQFrRgP4caNpIqIARJINDnW/Qpu8DEhzyy3A9dennYr6+QWHfWyDSRMRUa4dfbTzeJRPfdADDwBvvFH+f/16p/XXkCHxpo1iFaRZ6fkAtgP4FIDLAAwH8K+NfrFS6j4A93m89nUAX7csf4fxfBmcUUyJKElJBId7At5/ylPNYZ5rD/2Cb9YcEhEVz8SJzuO0afbXN20CfvhD5w8ALrsMWLcOaG9nWZBzvsFhaX7B+0t9B3vhTBlBRM0sieBQN00BilFzmHf6LvDxlvtxZnA4cGAy6SEionjVKlfdLUnuvRc48ECgrS22JFEyfINDpdReEXlTRIYrpTYnlShqcvpi0y8ooPSIxL9tzODQy4YNwAc/WE4TxWfoUGdAmmHDql8zm5WefXZyaSIiovi5g8CnnnJa97hrFIcPd8puBoe5F6RZ6Q4AL4rI7wFs0wuVUtfElipqbq2l3TJo00JKVhLB4Xve4zRPGTgQ+POf7essX15+zn5v8Qsy52XWm/cSEVFjbrjBefyxa6iPESOAnh6nzyHlWpDg8OHSH1EydHC4e3e66SC7JEYrHTYM+PznncLHa7RSMyBkzWF6GBASETUf9w38gQOdFj0cqTT3agaHSqk7RWS/0vM3aq1P1DB9YmFwmF1+00tEScT7uzgQSjaw1paIqJj8ylb3TeIXXnAeWXOYe563fMVxnYisB7AQwCIReUNEvpJc8qgptbc7j7bBLyh9SdYUtbQECw5Ze5Ue5j0RUXF5lcFeXX8YHOaeX83hPwOYCeA4pdRyABCRgwDcLiKfUkrdkkQCqQm1tQH/9V+cJyerbHcSZ82K77vYrDTbGBwSERVX2OCQzUpzz69UvwLA+3RgCOybW/Dy0mtE8Rk6lBf8WeXeLgce6PQPjOu7WHOYbWxWSkRUTO7y3uzuw5rDwvK7ouqrlFrvXljqd8jbAkTNyl1YxBmYBa05ZHCYHuY9EVFz+NKXys8/9zn7Olu2JJMWio1fqb6rzteIqMjcwWGcNbx+02awZjkbGBwSERWTu5x96aXa79m4MZ60UGL8+hy+RURs4b8AGBBTeogo69zBQNzBoRezRrF///jSQP7YrJSIqLjCjk4e9zzIFDvP4FApxRKfiGqLOzj0KpjM5QN4vyo1rDkkIiqmesp3DiaYeyzViSgcdzDgnusoju+yBYgMDrOBNYdERMUVpuawtRW46qr40kKJYHBIRI3Zti3+76gVHHJ0tPSw5pCIiADg/POBgQPTTgU1iKU6EYWTZDAQtOaQg9OkxxzanIiIiiNI2WrOc8yyuBAYHBJROO6Tf9jO6vWoFRyOGRN/Gshu7dq0U0BERHGpVcZfeSUwZYrznC1JCoFbkYjCSfLOoC5oliypfk0XWNdfzz6HaWITIiKiYgpS3rcaY1syOCwEbkUiCifJmkP9XZ/9bOXyvXuB733Pnh5KVhI1x0RElI5a5/jW1nI5zPK4EBgcElE4aQSHbvPnAytW+K9DRERE8TJHrGbNYSFwKxJROEkGY17TJOzcWX7O4JCIiCgeQWoO9ToMDguBW5GIwnGf/OOsOezb176cwWF2sFkpEVExBSlfzZu4LI8LobX2KkREhrSDw498BFi1qvw/CyMiIqLoBSlfW1qAxYuDr0+Zx5pDIgrHq6lnHGyT25uBIcBmLGkbOjTtFBARUVxq3QA2A0KWx4XArUhE4bS6Ghyk0azUZAsgKTnveEfaKSAiorjt2VN7HQaHhcCtSEThuGsO4wwOgwR+DA7TxYsBIqLi0mX8m286j1dfDXzta87zU091Ht/yFueRzUoLgX0OiSicJGsOzcBPKWd+Q791KB133512CoiIKGpmsLdtm/M4ZAhw9NHA5ZeXW44MGeI88mZhITA4JKJwkuxzaDYr7e0FduyoXofBYfr0hQERERVTT4/zOGSIEzReckn1OgwOC4FbkYjCcdccBukXWC93cLh9e/U6DA6JiIiiJ1JuHaRrDgcPrl5Pr8NmpYXA4JCIwtHBoS4E4gwOzcBv795ynwdTnN9PRETUrGzNSm3Bocaaw0LgViSicHRwOGyY8xhnM1N3zeHatf7rEBERUXSC1BxqDA4LgVuRiMLZssV53LzZeXQ3M42SWXPY22sfkIbNWIiIiOKlu3UMHOi9DsvjQmBwSEThbNxY+X9SzUp7e+P7HiIiIvKmaxBttYN+r1HucCsSUTjuJiVx1hyagefevfFOm0FERERlZk3gb35TvUzbs8d5ZDePQmBwSEThDBhQ+X9SwWFvL4NDIiKiJOlyt7vbebQFh3qaKb8mp5QbDA6JKBzdbGTmTOcxzuDQHOyGzUqJiIiSY05lYS5z27nTeXTfPKZcYnBIROHo4HDXLucxzuDQZKs5HDs2me8mIiIie79C1hwWCoNDIgpHFwz6TmFSfQxsweGttybz3URERM0oSHcOfT3A4LAQGBwSUTg6OJw2zRlN9MILk/le24A0bMJCREQUD1sTUr+aQ5bJhZBQezAiKgzdD3DoUODXv07ue9ev54A0RERESTPLXvY5LDzWHBJROPquYdIDxHz5ywwOiYiIkqIDQT1VhbnMNH2688hmpYWQSnAoIheJyHwR6RWRDmP5WSIyR0ReLD2e4fH+60RktYjMLf29I7nUEzU5HRzu3ZtuOoiIiCheSpUHoPPyhS8At91mb3JKuZNWs9J5AC4E8APX8vUAzlNKrRGRIwA8CmCCx2fcopT6VoxpJCKbtGoOgXLN4dveBhxzTPLfT0RE1EyCBIcDBgAHHJBMeih2qQSHSqkFACCuqmml1HPGv/MBDBCR/kqpnQkmj4j8ZCE4fM97OI0FERFRnPR1eq3gkAoly/W/7wHwnE9g+HEReUFE7hCRkUkmjKippRkcarY+D0RERBQ9BodNJbaaQxF5DIDt1v4XlVL313jv4QC+CeBsj1VuB3A9AFV6vBnAlR6fdTWAqwGgvb0dXV1dQZJPdejp6WH+xiwLeTxm4UKM6e7GuvnzsS6BtBzR3b3v+eq5czGhuxsv//Wv2D0ynntCWcjjImP+xo95HD/mcfyYx/GrlceHvf46tixahA1/+QsOKZXF87hNQsnjfhxbcKiUOrOe94nIRAD3AbhCKbXU47NfN9b/IYCHfNIxG8BsAOjo6FCdnZ31JIsC6OrqAvM3XpnI41GjgLlz0fae92B6Ev3+Ro/e97RtxgygqwttM2cCY8bE8nWZyOMCY/7Gj3kcP+Zx/JjH8auZx3fcgbFTpgDHHbevLOY2CSeP+3Gm5jkUkREAHgbwBaXUX3zWG6eUeq307wVwBrghoiTMmAHccw8weHCy3zvBGJuKzUqJiIjipctajk7eVNKayuICEVkF4CQAD4vIo6WXPg7gEABfNqapGFN6z4+MaS9uKk138QKA0wF8KunfQNTUkg4MAeDII8sD0jA4JCIiip9SDA6bTFqjld4Hp+moe/kNAG7weM+HjecfiC91RJRJe/eWg0MiIiKKnxkcvvvd6aaFEpHl0UqJiMqUYs0hERFRUnRZq0cnP+GE9NJCiWFwSET5YE6dweCQiIgoGdu2OY99+qSbDkoEg0MiyofeXjYrJSIiSoq+Eftv/+Y8MjhsCgwOiSgfzOCQNYdERETxM2/KMjhsCgwOiSgf2KyUiIgoPQwOm0Km5jkkIvK0enX5OYNDIiKi+Jk1hy2sU2oGDA6JKB+WL3f+iIiIKH7uG7GsOWwKvAVARPnDmkMiIqJ4iZTnOARYc9gkuJWJKH84aikREVH89uwpP2fNYVNgcEhE2farXwGTJ1cu2707nbQQERE1EwaHTYfBIRFlW//+QL9+lctGj04nLURERM3EbFbK4LApMDgkouxz93Ngn0MiIqJ4ufscMjhsCgwOiSj72AmeiIgoeWazUpbFTYFbmYiyj3criYiIksWaw6bE4JCIsm/jxrRTQERE1FxEgDVryv+z5rApcCsTUfa9+mraKSAiImo+5s1Z1hw2BQaHRJQvU6aknQIiIqLmw5rDpsCtTET5Mm5c2ikgIiJqPhwpvCkwOCSifFEq7RQQEREVH4PBpsTgkIjyhcEhERFRsqZPTzsFlBAGh0SUfR/+cNopICIiai5mzeFhh6WXDkoUg0Miyr4DD0w7BURERM2Lg9E0DW5pIso+sykpm5USEREla+bMtFNACWFwSET5MmtW2ikgIiIqPrNZ6f77p5cOShSDQyLKjxkzGBwSEREljSOXNg0Gh0SUfbopKfs8EBERJcMMCFn+Ng1uaSIiIiIi8saaw6bB4JCIso+D0BAREaWHNYdNg1uaiLKvvd15POaYdNNBRETULMzaQtYcNo3WtBNARFTThAnAz34GjBiRdkqIiIiaCwPDpsLgkIjyYeTItFNARETUPHRQyCalTYVbm4iIiIiI7BgcNhVubSIiIiIiqqRrDtmstKkwOCQiIiIiIjvWHDYVbm0iIiIiIrJjzWFTYXBIRERERESVOCBNU+LWJiIiIiIiOwaHTYVbm4iIiIiIKnFAmqbE4JCIiIiIiOxYc9hUuLWJiIiIiMiOwWFTSWVri8hFIjJfRHpFpMNYfqCIbBeRuaW/73u8f5SI/F5EFpceRyaXeiIiIiKiJsFmpU0lrVsB8wBcCOBxy2tLlVJHlf7+yeP9/wLgD0qpKQD+UPqfiIiIiIiiwD6HTSmV4FAptUAp9XIDH3E+gDtLz+8E8O7GU0VERERERAA4lUWTyuLWniwiz4nIn0TkFI912pVSrwFA6XFMcskjIiIiImoSDA6biiil4vlgkccAjLW89EWl1P2ldboAfEYp9Uzp//4AhiilukXkWAC/AXC4UmqL67M3KaVGGP9vVEpZ+x2KyNUArgaA9vb2Y++5557GfxxZ9fT0YMiQIWkno9CYx/FjHseL+Rs/5nH8mMfxYx7Hr1YeH3zbbRi4ejV2jRqFRZ/5TIIpK46s7senn376HKVUh+211ri+VCl1Zh3v2QlgZ+n5HBFZCuBQAM+4Vn1dRMYppV4TkXEA1vl85mwAswGgo6NDdXZ2hk0WBdTV1QXmb7yYx/FjHseL+Rs/5nH8mMfxYx7Hr2YeP/AAsGMHMGECxnNb1CWP+3Gm6olFZD8R6VN6fhCAKQCWWVZ9AMAHS88/COD+ZFJIRERERNRE2Ky0qaQ1lcUFIrIKwEkAHhaRR0svnQrgBRF5HsCvAPyTUmpD6T0/Mqa9uBHAWSKyGMBZpf+JiIiIiChKHK20qcTWrNSPUuo+APdZlv8awK893vNh43k3gLfGlkAiIiIiombG0UqbErc2ERERERFV4jyHTYnBIRERERER2bHmsKlwaxMRERERUaWdO51HBodNhVubiIiIiIgqvfKK87h4carJoGQxOCQiIiIiIiIGh0RERERERMTgkIiIiIiIiMDgkIiIiIiIvHAqi6bC4JCIiIiIiOxaW9NOASWIwSEREREREdn16ZN2CihBDA6JiIiIiMiOwWFTYXBIRERERER2DA6bCoNDIiIiIiKya2G40Ey4tYmIiIiIiIjBIREREREReeBUFk2FwSERERERERExOCQiIiIiIg+sOWwqDA6JiIiIiIiIwSERERERERExOCQiIiIiIiIwOCQiIiIiIi/sc9hUGBwSEREREZGdUmmngBLE4JCIiIiIiIgYHBIRERERERGDQyIiIiIi8sJmpU2FwSEREREREdkxOGwqDA6JiIiIiKjSscemnQJKAYNDIiIiIiKq9IEPOI+sOWwqDA6JiIiIiKiSnt+QwWFTYXBIRERERESVWkphAoPDpsLgkIiIiIiIiBgcEhERERGRSwvDhGbErU5ERERERJXY57ApMTgkIiIiIqJK7HPYlBgcEhEREREREYNDIiIiIiJyYZ/DpsStTkRERERElXSfw97edNNBiWJwSEREREREldjnsCkxOCQiIiIiIiIGh0RERERE5MI+h00pla0uIheJyHwR6RWRDmP5ZSIy1/jrFZGjLO+/TkRWG+u9I9lfQERERERUYJznsCm1pvS98wBcCOAH5kKl1M8B/BwARORIAPcrpeZ6fMYtSqlvxZpKIiIiIqJmxOCwKaUSHCqlFgCA6J3O7n0A7k4kQUREREREVOZ/nU4FleXGxJfAPzj8uIi8ICJ3iMjIpBJFRERERFR47HPYlETFVFUsIo8BGGt56YtKqftL63QB+IxS6hnXe08A8COl1JEen90OYD0ABeB6AOOUUld6rHs1gKsBoL29/dh77rmnvh9ENfX09GDIkCFpJ6PQmMfxYx7Hi/kbP+Zx/JjH8WMex69WHvfZtg3Tvv51qD59MP/66xNMWXFkdT8+/fTT5yilOmyvxdasVCl1ZgNvvxQ+tYZKqdf1cxH5IYCHfNadDWA2AHR0dKjOzs4GkkV+urq6wPyNF/M4fszjeDF/48c8jh/zOH7M4/jVzOOtW4Hvfx9obeW2qFMe9+PM1ReLSAuAiwB4VvGJyDjj3wvgDHBDRERERERR0M1KOSBNU0lrKosLRGQVgJMAPCwijxovnwpglVJqmes9PzKmvbhJRF4UkRcAnA7gU4kknIiIiIiIqKDSGq30PgD3ebzWBeBEy/IPG88/EFviiIiIiIiaHWsOm1LmmpUSEREREVHKOM9hU2JwSERERERElTiVRVPiViciIiIiIjvWHDYVBodERERERFSJNYdNiVudiIiIiIgq6T6H1FQYHBIRERERUSXWHDYlbnUiIiIiIiJicEhERERERC66WenBB6ebDkpUa9oJICIiIiKiDLr5ZmD8+LRTQQlicEhERERERNUOPTTtFFDC2KyUiIiIiIiIGBwSERERERERg0MiIiIiIiICg0MiIiIiIiICg0MiIiIiIiICg0MiIiIiIiICg0MiIiIiIiICg0MiIiIiIiICg0MiIiIiIiICg0MiIiIiIiICg0MiIiIiIiICg0MiIiIiIiICg0MiIiIiIiICg0MiIiIiIiICg0MiIiIiIiICIEqptNOQGBF5A8CKtNNRYG0A1qediIJjHsc/b3vhAAAMnklEQVSPeRwv5m/8mMfxYx7Hj3kcP+Zx/LKax5OUUvvZXmiq4JDiJSLPKKU60k5HkTGP48c8jhfzN37M4/gxj+PHPI4f8zh+ecxjNislIiIiIiIiBodERERERETE4JCiNTvtBDQB5nH8mMfxYv7Gj3kcP+Zx/JjH8WMexy93ecw+h0RERERERMSaQyIiIiIiImJwSEREREQpEBFJOw1EVInBIYUiIgennYaiE5G+aaehyESkT+mRFyUxYd7GT0SGlx5ZjsdERA4XkQFpp6PgBqadgKJjmRe/ouUtCxUKRESOEZHHAdwoIsPSTk8RiciJInIPgH8XkSPSTk/RiMhMEbkTwJdEZJRih+vIicgJIvJDAJ8XEevkulQ/EWkRkWEi8hCA7wKAUqo35WQVjojMEJE/A7gBwOi001NEpfLu1wBuE5GzdQBD0WGZF7+ilnkMDqkmEekHp5D8hVLqIqXUltLyQt0pSZOIXATgdgAPARgA4NOl5czjCIjIQQC+B+B/AUwCcL2InJtuqopDRPqIyDfgjMr2FwDHAPiqiLSnm7JiKQWCWwH0BTBBRC4BWHsYgy8B+JVS6gKl1GqA5+IoiUgnnPPxfwN4GcDlAEammaaiYZkXr6KXeSxQKIhjAHQrpW4DABE5SUT68y5UpKYAeFAp9Z8AbgGc5qXM48gcC2CBUuqnAK4FMBfAO0Vk/1RTVRwtAFYCuKiUx/8M4ESwyVgcDgOwHsB3AFwmIkOVUr0MXhpXqpk9GECPUuo7pWVnicgIAGyaF50jATytlPo5gLvg3OzoSTdJhXMcWObFbRUKWuYxOKQqInKxiHxaRE4qLVoBYKqInCcivwfwVQA/FJH3pZfKfLPk8csALhSRzwF4EsB4OM1tjkstkTlWarJ0qLHoaQATRWR/pdRGOHf6NgG4IJUEFoArj3sB3K2UWlS6cbQGTsHZll4K88/MYyMoWQJgF4Dlpb8PisgBvJFUHzOPSzWz6wCcIiLnishvAHwGThPez5bWYT6HZDkfPwHgIhH5CoBnAYwD8L1SCxqqQ+n67OMicmJp0dMA9meZFx0jj49TSu1Fgcs8Boe0T6ma/CsAPl9aNFtE3gPgDQAPwmnqeKNS6m1wmiqcISKHpZPafLLk8Q9F5F1wmtd8EsCpAK4o5fEbAN4jImPTSW3+iMgIEXkYwO8BXCwiQ0ov7QDwZwAXl/5/GcBLAEZzwIlwbHmslNqrlNoEAEqpnSIyFMBkAGvSTGteWfJ4sBGUdADYopSaD2A+nJt1t4tIXzYvDc6WxwCglNoK4CcArgdwh1LqHAA/AnCiceFNAXidj5VScwG8DcCBAD6qlOqEE7y8TUSmpZTcXBKRcSLyIJybFyMB/EREzlFKLYNzo5llXoMsefwzETlbKbUBKGaZx4KE9indCZkK4Fql1LcBXAfgI3CaMT0P4HA4/eEA4I8AhgLYlnxK88uSx18F8CkAhyql/gAniHm5tPr9AGaAeRzGYACPAvhE6fmppeVvAPgbgCNF5PjSdlgNYKZSakcqKc0vdx6fYlnnBADzlVJrRGSIiExJMoEF4LUfA07z3aEi8gsAnwMwB8AipdRuDk4Til8ePwQncNH94J4B8DqAnQmmrwg8zxVKqb8D2A/AK6VFvKaoTweAPyulTlVKXQ/gPwD8Q+m1P4NlXhTcefwdONfGpkKVeQwOm5yIXCEip5X6VABOAThSRFqVUr8GsAjAeXCagdwE4JOlu9NnARgFJ5ghHwHyeD6AS0s1hEsBvLe03tFg/tZk5O+w0uARswH8Ek7eHS8iE0oF498APAfgltId7MMBrBSRQaklPidq5PEJIjK+tF5r6S0jALwqIh+C07zpqDTSnSdB8xhOwLIfgLVwzhEfgdPsnzUuNQTI4wkAoJR6AU4twcdFpA3OgClHAOhOKem5EeJc0R/AXwF8rPTWt8IZGZZlXg2lPO4s5eEfAPzMeLkbwOLSc13mfYdlXjg18ngDgAWl9fTUY4Uq84TN55tPqe/KWAD/Baev0FI4d/X+EcA1AFoBfFcptanUbPQXAN6m/n979x9qd13Hcfz57rr8MdcKzCTmNgTNJa6ZkYKQM2dB9Ud/aETiVKLImoYSQUHlr0AoFopZIpFjwUwcaZhgIZE0EU3bikwLWlC2alLIZmnbve/++Hyu3G3n3t1zz/mcc+89zweM3XPu+Y7P98XZ+X7f5/v5vL+ZeyLiNsp6uBXA5zLz98PYh/luDhnfRym411IOlm+nLNDflJnPD34P5rcZ8v18Zr5UX3MBZUrNrzJz65RtN1Pev6soU3hfQEfoMuOnazOlyW23ApcDW4Bv1ZNtHWau7+OIOGnK708E3jg5xUmH6vGz4gbgNErDsOsz87kBD39B6OF9fBZl9swpwAHK8c5zig6OlnGUBnYHIuI64J2Z+Zkp23rMm4UuM16TmddM2XZRHfO8cjhiImKsrl1ZBryYmRcDnwVepkxHuAu4AFgbESfUwuR5YLL5zJcoawTe74d4Z3PM+I+UrlePARuBT2XmBgvDI82Q778o31IDkJk7KFOW3hERy+uaAChXBD6Zmed5kOxsDhmfGeX+e5NrPH8CfCwzr17oB8lWengfL60nKmMR8YbM3G9h2FmvnxV16v/1mflBC8PO5pjxmyPi+Lpu9krgqsy82HOKzmaZ8eSU8kuAB+p2J9fnvojHvBnNIePtdbvJBjSPsIiOeccc/SVaDOp0r5uBsYh4BHgTMA6QmQcjYhNlmtJmyrcmH6d0EPshcJCyWHyyU5stpzvoMeP/UdYOkZn7gd8OfAfmuVnkex3wt4i4MDN/UTe7h3KPzp8BqyLinCxdxfYNfg/mvx4zfgxYGRHrMvO+IQx/Qejz+1gd9DPjzDwwhF2Y9/qQ8cqIeHedevqnwe/B/NdtxlHuSb0X+ENEfJ1y64r1WbqVeszroE8Zvy8ztw1rH1rwyuEIiIgLKYXHWyht0G+hTOG4KCLeC6+38L4J+EZmbgF+CmyMiF9TvkSwWJmBGbc1y3yT8iF/45RNP0z59m8XcLYn1NPrQ8Y7KRnvGeCwFxTfx+2ZcXt9/Kx4cYDDXlC6zPimutlxwFWUL+qWARtqYagO+pjxy4MdeXteORwNE8A3p8zzP4fScverwHeAc6M0mdlO+U9xamY+GBFPAidkaYmsmZlxW7PN90eUfFdn5p8pzQ02ZObjwxn2gmLG7Zlxe2bcnhm3123GKyi9Cn4AbM5yuxDNzIyn4ZXD0fAMcH9EjNXHO4CVmXkv5VL6tfWq1grgQGb+BSAz/27RMmtm3FY3+Y7XExEy8yFPRGbNjNsz4/bMuD0zbq+bjCcy86+Z+VRmblzMRUufmfE0LA5HQGb+JzNfy9LOH8pi2r3156uBNRHxMLANeHYYY1zozLitueQbETH4kS5cZtyeGbdnxu2ZcXtdZvwMmHG3zHh6TisdIfXbkQTeBvy4Pr0P+DLlHk67XQPQGzNuq5t861oBdcmM2zPj9sy4PTNuz4zbM+MjeeVwtEwAS4CXKLdReBj4CuVy+S8tWvrCjNsy3/bMuD0zbs+M2zPj9sy4PTM+TIxIEawqIs4Hnqh/vp+Z3xvykBYdM27LfNsz4/bMuD0zbs+M2zPj9sz4UBaHI6Z2W7qC0mnptWGPZzEy47bMtz0zbs+M2zPj9sy4PTNuz4wPZXEoSZIkSXLNoSRJkiTJ4lCSJEmShMWhJEmSJAmLQ0mSJEkSFoeSJEmSJCwOJUnqWUSMR8TOiPhdROyKiBsiYsZjbESsjohPDGqMkiQdjcWhJEm9+29mrsvMs4BLgA8BXzvKNqsBi0NJ0rzhfQ4lSepRROzPzBOnPD4NeBo4CVgFbAWW1l9vyswnIuJJYA2wG9gC3AHcBqwHjgW+nZl3D2wnJEkjz+JQkqQeHV4c1uf+DZwJ7AMmMvPViDgd2JaZ74mI9cAXMvMj9fWfBk7OzFsj4lhgB3BZZu4e6M5IkkbWMcMegCRJi1TUv5cAd0bEOmAcOGOa138AWBsRl9bHy4HTKVcWJUlqzuJQkqQ+q9NKx4F/UtYe/gN4F2Wt/6vTbQZcm5mPDmSQkiQdxoY0kiT1UUS8FfgucGeWtRvLgT2ZOQFcAYzVl+4Dlk3Z9FHgmohYUv+dMyJiKZIkDYhXDiVJ6t3xEbGTMoX0IKUBzeb6u7uA7RFxGfBz4JX6/G+AgxGxC7gXuJ3SwfTZiAhgL/DRQe2AJEk2pJEkSZIkOa1UkiRJkmRxKEmSJEnC4lCSJEmShMWhJEmSJAmLQ0mSJEkSFoeSJEmSJCwOJUmSJElYHEqSJEmSgP8DxqfqUTyHWBMAAAAASUVORK5CYII=",
"text/plain": [
"<Figure size 1080x576 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"log_returns = np.log(result_df['portfolio_value']).diff()\n",
"\n",
"cum_returns = log_returns.cumsum() \n",
"last_peak = cum_returns.cummax()\n",
"\n",
"log_dd = cum_returns - last_peak\n",
"\n",
"pct_dd = (np.exp(log_dd) - 1) * 100\n",
"perf = (np.exp(cum_returns) - 1) * 100\n",
"\n",
"\n",
"ax = pct_dd.plot(figsize=(15,8), color='r', alpha=0.7)\n",
"ax.grid(axis='both')\n",
"ax.set_ylabel('Drawdown, %')"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Annulaized return 13.23%\n",
"Annualized volatility 10.90%\n",
"Sharpe ratio 0.94\n",
"Sortino ratio 1.25\n",
"\n"
]
}
],
"source": [
"TRADING_DAYS_YEARLY = 252\n",
"RISK_FREE_RATE = 0.03\n",
"\n",
"annual_return = np.exp(log_returns.mean() * TRADING_DAYS_YEARLY) - 1\n",
"annual_volatility = log_returns.std() * np.sqrt(TRADING_DAYS_YEARLY)\n",
"\n",
"sharpe_ratio = (annual_return - RISK_FREE_RATE) / annual_volatility\n",
"\n",
"annualized_downside = log_returns.loc[log_returns<0].std() * np.sqrt(TRADING_DAYS_YEARLY)\n",
"sortino_ratio = (annual_return - RISK_FREE_RATE) / annualized_downside \n",
"\n",
"sortino_ratio = (annual_return - RISK_FREE_RATE) / annualized_downside \n",
"\n",
"print(\n",
" f\"\"\"Annulaized return {(annual_return * 100):.2f}%\n",
"Annualized volatility {(annual_volatility * 100):.2f}%\n",
"Sharpe ratio {sharpe_ratio:.2f}\n",
"Sortino ratio {sortino_ratio:.2f}\n",
"\"\"\" \n",
")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Max/longest drawdown"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"The longest drawdown\n",
"Drawdown: 427 days, 14 months\n",
"From 2018-01-24 to 2019-03-27\n",
"Max drawdown -18.17% on 2020-03-19\n"
]
}
],
"source": [
"\n",
"def find_true_streaks(array):\n",
" # finds all \"True\" streaks in array from longest to shortest\n",
"\n",
" masked = np.concatenate(([False], array, [False])) \n",
" true_streaks = np.flatnonzero(masked[1:] != masked[:-1]).reshape(-1, 2) \n",
" ends = true_streaks[:,1]\n",
" true_streaks_descending = (true_streaks[:,1] - true_streaks[:,0]).argsort()[::-1]\n",
" return true_streaks[true_streaks_descending]\n",
"\n",
"dd_streaks = find_true_streaks(pct_dd.values != 0)\n",
"\n",
"def print_streak(n):\n",
" start, end = dd_streaks[n]\n",
" days = (pct_dd.index[end] - pct_dd.index[start]).days\n",
" years = days / 365.25\n",
" months = years * 12\n",
"\n",
" print(\n",
" \"\"\"Drawdown: %d days, %d months\n",
"From %s to %s\"\"\" % \n",
" (days, months, pct_dd.index[start].date(), pct_dd.index[end].date())\n",
" )\n",
"\n",
"print(\"The longest drawdown\")\n",
"if dd_streaks.size > 0:\n",
" print_streak(0)\n",
"else:\n",
" print(\"No drawdown found\")\n",
"\n",
"max_dd_index = np.argmin(pct_dd)\n",
"print(f\"\"\"Max drawdown {pct_dd.iloc[max_dd_index]:.2f}% on {pct_dd.index[max_dd_index].date()}\"\"\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Bonus: a la value at risk analysis "
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"95% of time expected drawdown is no more than 10.08%\n",
"50% of time expected drawdown is no more than 2.33%\n"
]
},
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"from scipy.stats import expon\n",
"\n",
"ax = (-pct_dd[pct_dd < 0]).hist(bins=24, alpha=0.5, density=True, color='red')\n",
"\n",
"params = expon.fit(-pct_dd[pct_dd < 0])\n",
"\n",
"def q(p):\n",
" return expon.ppf(p, *params)\n",
"\n",
"xs = np.linspace(q(0.001), q(0.999), 100)\n",
"ax.plot(xs, expon.pdf(xs, *params))\n",
"\n",
"def print_quantile(p):\n",
" print(\"%.d%% of time expected drawdown is no more than %.2f%%\" % (p * 100, q(p)))\n",
"\n",
"print_quantile(0.95)\n",
"print_quantile(0.50)"
]
}
],
"metadata": {
"interpreter": {
"hash": "40d3a090f54c6569ab1632332b64b2c03c39dcf918b08424e98f38b5ae0af88f"
},
"kernelspec": {
"display_name": "Python 3.7.6 64-bit ('base': conda)",
"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.6"
},
"orig_nbformat": 4
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment