Skip to content

Instantly share code, notes, and snippets.

@Pabla007
Created February 21, 2020 19:50
Show Gist options
  • Save Pabla007/95faeb41f379d3aaa8e3ba521e48d59b to your computer and use it in GitHub Desktop.
Save Pabla007/95faeb41f379d3aaa8e3ba521e48d59b to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/jasims/tardis/tardis/io/util.py:14: TqdmExperimentalWarning: Using `tqdm.autonotebook.tqdm` in notebook mode. Use `tqdm.tqdm` instead to force console mode (e.g. in jupyter console)\n",
" from tqdm.autonotebook import tqdm\n"
]
}
],
"source": [
"from tardis import run_tardis\n",
"from tardis.io.atom_data.util import download_atom_data"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[\u001b[1mtardis.io.atom_data.atom_web_download\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Downloading atomic data from https://media.githubusercontent.com/media/tardis-sn/tardis-refdata/master/atom_data/kurucz_cd23_chianti_H_He.h5 to /home/jasims/Downloads/tardis-data/kurucz_cd23_chianti_H_He.h5 (\u001b[1matom_web_download.py\u001b[0m:37)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1;37mINFO\u001b[0m:tardis.io.atom_data.atom_web_download:Downloading atomic data from https://media.githubusercontent.com/media/tardis-sn/tardis-refdata/master/atom_data/kurucz_cd23_chianti_H_He.h5 to /home/jasims/Downloads/tardis-data/kurucz_cd23_chianti_H_He.h5\n"
]
}
],
"source": [
"# the data is automatically downloaded\n",
"download_atom_data('kurucz_cd23_chianti_H_He')"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[\u001b[1mtardis.plasma.standard_plasmas\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Reading Atomic Data from /home/jasims/tardis/docs/examples/kurucz_cd23_chianti_H_He.h5 (\u001b[1mstandard_plasmas.py\u001b[0m:76)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1;37mINFO\u001b[0m:tardis.plasma.standard_plasmas:Reading Atomic Data from /home/jasims/tardis/docs/examples/kurucz_cd23_chianti_H_He.h5\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[\u001b[1mpy.warnings \u001b[0m][\u001b[1;33mWARNING\u001b[0m] /home/jasims/miniconda3/envs/tardis/lib/python3.6/site-packages/IPython/core/interactiveshell.py:3331: PerformanceWarning: indexing past lexsort depth may impact performance.\n",
" exec(code_obj, self.user_global_ns, self.user_ns)\n",
" (\u001b[1mwarnings.py\u001b[0m:99)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1;33mWARNING\u001b[0m:py.warnings:/home/jasims/miniconda3/envs/tardis/lib/python3.6/site-packages/IPython/core/interactiveshell.py:3331: PerformanceWarning: indexing past lexsort depth may impact performance.\n",
" exec(code_obj, self.user_global_ns, self.user_ns)\n",
"\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[\u001b[1mtardis.io.atom_data.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Read Atom Data with UUID=6f7b09e887a311e7a06b246e96350010 and MD5=864f1753714343c41f99cb065710cace. (\u001b[1mbase.py\u001b[0m:175)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1;37mINFO\u001b[0m:tardis.io.atom_data.base:Read Atom Data with UUID=6f7b09e887a311e7a06b246e96350010 and MD5=864f1753714343c41f99cb065710cace.\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[\u001b[1mtardis.io.atom_data.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Non provided atomic data: synpp_refs, ion_cx_th_data, ion_cx_sp_data (\u001b[1mbase.py\u001b[0m:178)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1;37mINFO\u001b[0m:tardis.io.atom_data.base:Non provided atomic data: synpp_refs, ion_cx_th_data, ion_cx_sp_data\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[\u001b[1mpy.warnings \u001b[0m][\u001b[1;33mWARNING\u001b[0m] /home/jasims/miniconda3/envs/tardis/lib/python3.6/site-packages/astropy/units/quantity.py:1070: AstropyDeprecationWarning: The truth value of a Quantity is ambiguous. In the future this will raise a ValueError.\n",
" AstropyDeprecationWarning)\n",
" (\u001b[1mwarnings.py\u001b[0m:99)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1;33mWARNING\u001b[0m:py.warnings:/home/jasims/miniconda3/envs/tardis/lib/python3.6/site-packages/astropy/units/quantity.py:1070: AstropyDeprecationWarning: The truth value of a Quantity is ambiguous. In the future this will raise a ValueError.\n",
" AstropyDeprecationWarning)\n",
"\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[\u001b[1mpy.warnings \u001b[0m][\u001b[1;33mWARNING\u001b[0m] /home/jasims/tardis/tardis/plasma/properties/ion_population.py:59: FutureWarning: \n",
"Passing list-likes to .loc or [] with any missing label will raise\n",
"KeyError in the future, you can use .reindex() as an alternative.\n",
"\n",
"See the documentation here:\n",
"https://pandas.pydata.org/pandas-docs/stable/indexing.html#deprecate-loc-reindex-listlike\n",
" partition_function.index].dropna())\n",
" (\u001b[1mwarnings.py\u001b[0m:99)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1;33mWARNING\u001b[0m:py.warnings:/home/jasims/tardis/tardis/plasma/properties/ion_population.py:59: FutureWarning: \n",
"Passing list-likes to .loc or [] with any missing label will raise\n",
"KeyError in the future, you can use .reindex() as an alternative.\n",
"\n",
"See the documentation here:\n",
"https://pandas.pydata.org/pandas-docs/stable/indexing.html#deprecate-loc-reindex-listlike\n",
" partition_function.index].dropna())\n",
"\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[\u001b[1mpy.warnings \u001b[0m][\u001b[1;33mWARNING\u001b[0m] /home/jasims/miniconda3/envs/tardis/lib/python3.6/site-packages/astropy/units/equivalencies.py:124: RuntimeWarning: divide by zero encountered in double_scalars\n",
" (si.m, si.Hz, lambda x: _si.c.value / x),\n",
" (\u001b[1mwarnings.py\u001b[0m:99)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1;33mWARNING\u001b[0m:py.warnings:/home/jasims/miniconda3/envs/tardis/lib/python3.6/site-packages/astropy/units/equivalencies.py:124: RuntimeWarning: divide by zero encountered in double_scalars\n",
" (si.m, si.Hz, lambda x: _si.c.value / x),\n",
"\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[\u001b[1mpy.warnings \u001b[0m][\u001b[1;33mWARNING\u001b[0m] /home/jasims/miniconda3/envs/tardis/lib/python3.6/site-packages/astropy/units/quantity.py:1070: AstropyDeprecationWarning: The truth value of a Quantity is ambiguous. In the future this will raise a ValueError.\n",
" AstropyDeprecationWarning)\n",
" (\u001b[1mwarnings.py\u001b[0m:99)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1;33mWARNING\u001b[0m:py.warnings:/home/jasims/miniconda3/envs/tardis/lib/python3.6/site-packages/astropy/units/quantity.py:1070: AstropyDeprecationWarning: The truth value of a Quantity is ambiguous. In the future this will raise a ValueError.\n",
" AstropyDeprecationWarning)\n",
"\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 1/20 (\u001b[1mbase.py\u001b[0m:266)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1;37mINFO\u001b[0m:tardis.simulation.base:Starting iteration 1/20\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 7.96915e+42 erg / s Luminosity absorbed = 2.63370e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1;37mINFO\u001b[0m:tardis.simulation.base:Luminosity emitted = 7.96915e+42 erg / s Luminosity absorbed = 2.63370e+42 erg / s Luminosity requested = 1.05928e+43 erg / s\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n",
"\t t_rad next_t_rad w next_w\n",
"\tShell \n",
"\t0 9926.501965 10171.209103 0.400392 0.500372\n",
"\t5 9852.611678 10306.111379 0.211205 0.191331\n",
"\t10 9779.813302 10174.379204 0.142695 0.116864\n",
"\t15 9708.082813 9910.442275 0.104556 0.085962\n",
"\n",
" (\u001b[1mbase.py\u001b[0m:348)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1;37mINFO\u001b[0m:tardis.simulation.base:Plasma stratification:\n",
"\t t_rad next_t_rad w next_w\n",
"\tShell \n",
"\t0 9926.501965 10171.209103 0.400392 0.500372\n",
"\t5 9852.611678 10306.111379 0.211205 0.191331\n",
"\t10 9779.813302 10174.379204 0.142695 0.116864\n",
"\t15 9708.082813 9910.442275 0.104556 0.085962\n",
"\n",
"\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 9933.952 K -- next t_inner 11453.040 K (\u001b[1mbase.py\u001b[0m:350)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1;37mINFO\u001b[0m:tardis.simulation.base:t_inner 9933.952 K -- next t_inner 11453.040 K\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[\u001b[1mpy.warnings \u001b[0m][\u001b[1;33mWARNING\u001b[0m] /home/jasims/tardis/tardis/plasma/properties/ion_population.py:59: FutureWarning: \n",
"Passing list-likes to .loc or [] with any missing label will raise\n",
"KeyError in the future, you can use .reindex() as an alternative.\n",
"\n",
"See the documentation here:\n",
"https://pandas.pydata.org/pandas-docs/stable/indexing.html#deprecate-loc-reindex-listlike\n",
" partition_function.index].dropna())\n",
" (\u001b[1mwarnings.py\u001b[0m:99)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1;33mWARNING\u001b[0m:py.warnings:/home/jasims/tardis/tardis/plasma/properties/ion_population.py:59: FutureWarning: \n",
"Passing list-likes to .loc or [] with any missing label will raise\n",
"KeyError in the future, you can use .reindex() as an alternative.\n",
"\n",
"See the documentation here:\n",
"https://pandas.pydata.org/pandas-docs/stable/indexing.html#deprecate-loc-reindex-listlike\n",
" partition_function.index].dropna())\n",
"\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 2/20 (\u001b[1mbase.py\u001b[0m:266)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1;37mINFO\u001b[0m:tardis.simulation.base:Starting iteration 2/20\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.40398e+43 erg / s Luminosity absorbed = 4.68639e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1;37mINFO\u001b[0m:tardis.simulation.base:Luminosity emitted = 1.40398e+43 erg / s Luminosity absorbed = 4.68639e+42 erg / s Luminosity requested = 1.05928e+43 erg / s\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n",
"\t t_rad next_t_rad w next_w\n",
"\tShell \n",
"\t0 10171.209103 11518.516702 0.500372 0.538298\n",
"\t5 10306.111379 11554.412119 0.191331 0.217946\n",
"\t10 10174.379204 11373.574056 0.116864 0.132935\n",
"\t15 9910.442275 11040.788763 0.085962 0.099700\n",
"\n",
" (\u001b[1mbase.py\u001b[0m:348)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1;37mINFO\u001b[0m:tardis.simulation.base:Plasma stratification:\n",
"\t t_rad next_t_rad w next_w\n",
"\tShell \n",
"\t0 10171.209103 11518.516702 0.500372 0.538298\n",
"\t5 10306.111379 11554.412119 0.191331 0.217946\n",
"\t10 10174.379204 11373.574056 0.116864 0.132935\n",
"\t15 9910.442275 11040.788763 0.085962 0.099700\n",
"\n",
"\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 11453.040 K -- next t_inner 9948.201 K (\u001b[1mbase.py\u001b[0m:350)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1;37mINFO\u001b[0m:tardis.simulation.base:t_inner 11453.040 K -- next t_inner 9948.201 K\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 3/20 (\u001b[1mbase.py\u001b[0m:266)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1;37mINFO\u001b[0m:tardis.simulation.base:Starting iteration 3/20\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 8.16814e+42 erg / s Luminosity absorbed = 2.50161e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1;37mINFO\u001b[0m:tardis.simulation.base:Luminosity emitted = 8.16814e+42 erg / s Luminosity absorbed = 2.50161e+42 erg / s Luminosity requested = 1.05928e+43 erg / s\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n",
"\t t_rad next_t_rad w next_w\n",
"\tShell \n",
"\t0 11518.516702 10501.129902 0.538298 0.438591\n",
"\t5 11554.412119 10869.940791 0.217946 0.160809\n",
"\t10 11373.574056 10558.269547 0.132935 0.103807\n",
"\t15 11040.788763 10185.648701 0.099700 0.079165\n",
"\n",
" (\u001b[1mbase.py\u001b[0m:348)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1;37mINFO\u001b[0m:tardis.simulation.base:Plasma stratification:\n",
"\t t_rad next_t_rad w next_w\n",
"\tShell \n",
"\t0 11518.516702 10501.129902 0.538298 0.438591\n",
"\t5 11554.412119 10869.940791 0.217946 0.160809\n",
"\t10 11373.574056 10558.269547 0.132935 0.103807\n",
"\t15 11040.788763 10185.648701 0.099700 0.079165\n",
"\n",
"\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 9948.201 K -- next t_inner 11328.896 K (\u001b[1mbase.py\u001b[0m:350)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1;37mINFO\u001b[0m:tardis.simulation.base:t_inner 9948.201 K -- next t_inner 11328.896 K\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 4/20 (\u001b[1mbase.py\u001b[0m:266)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1;37mINFO\u001b[0m:tardis.simulation.base:Starting iteration 4/20\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.34487e+43 erg / s Luminosity absorbed = 4.47931e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1;37mINFO\u001b[0m:tardis.simulation.base:Luminosity emitted = 1.34487e+43 erg / s Luminosity absorbed = 4.47931e+42 erg / s Luminosity requested = 1.05928e+43 erg / s\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n",
"\t t_rad next_t_rad w next_w\n",
"\tShell \n",
"\t0 10501.129902 11527.008679 0.438591 0.512509\n",
"\t5 10869.940791 11706.138980 0.160809 0.196458\n",
"\t10 10558.269547 11444.208532 0.103807 0.124092\n",
"\t15 10185.648701 11085.857161 0.079165 0.093694\n",
"\n",
" (\u001b[1mbase.py\u001b[0m:348)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1;37mINFO\u001b[0m:tardis.simulation.base:Plasma stratification:\n",
"\t t_rad next_t_rad w next_w\n",
"\tShell \n",
"\t0 10501.129902 11527.008679 0.438591 0.512509\n",
"\t5 10869.940791 11706.138980 0.160809 0.196458\n",
"\t10 10558.269547 11444.208532 0.103807 0.124092\n",
"\t15 10185.648701 11085.857161 0.079165 0.093694\n",
"\n",
"\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 11328.896 K -- next t_inner 10054.300 K (\u001b[1mbase.py\u001b[0m:350)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1;37mINFO\u001b[0m:tardis.simulation.base:t_inner 11328.896 K -- next t_inner 10054.300 K\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 5/20 (\u001b[1mbase.py\u001b[0m:266)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1;37mINFO\u001b[0m:tardis.simulation.base:Starting iteration 5/20\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 8.44348e+42 erg / s Luminosity absorbed = 2.68000e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1;37mINFO\u001b[0m:tardis.simulation.base:Luminosity emitted = 8.44348e+42 erg / s Luminosity absorbed = 2.68000e+42 erg / s Luminosity requested = 1.05928e+43 erg / s\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n",
"\t t_rad next_t_rad w next_w\n",
"\tShell \n",
"\t0 11527.008679 10659.382763 0.512509 0.433573\n",
"\t5 11706.138980 11038.244897 0.196458 0.158494\n",
"\t10 11444.208532 10790.696726 0.124092 0.099660\n",
"\t15 11085.857161 10450.666394 0.093694 0.074550\n",
"\n",
" (\u001b[1mbase.py\u001b[0m:348)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1;37mINFO\u001b[0m:tardis.simulation.base:Plasma stratification:\n",
"\t t_rad next_t_rad w next_w\n",
"\tShell \n",
"\t0 11527.008679 10659.382763 0.512509 0.433573\n",
"\t5 11706.138980 11038.244897 0.196458 0.158494\n",
"\t10 11444.208532 10790.696726 0.124092 0.099660\n",
"\t15 11085.857161 10450.666394 0.093694 0.074550\n",
"\n",
"\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 10054.300 K -- next t_inner 11261.489 K (\u001b[1mbase.py\u001b[0m:350)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1;37mINFO\u001b[0m:tardis.simulation.base:t_inner 10054.300 K -- next t_inner 11261.489 K\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 6/20 (\u001b[1mbase.py\u001b[0m:266)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1;37mINFO\u001b[0m:tardis.simulation.base:Starting iteration 6/20\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.32492e+43 erg / s Luminosity absorbed = 4.26229e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1;37mINFO\u001b[0m:tardis.simulation.base:Luminosity emitted = 1.32492e+43 erg / s Luminosity absorbed = 4.26229e+42 erg / s Luminosity requested = 1.05928e+43 erg / s\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n",
"\t t_rad next_t_rad w next_w\n",
"\tShell \n",
"\t0 10659.382763 11507.437689 0.433573 0.499441\n",
"\t5 11038.244897 11634.568776 0.158494 0.197953\n",
"\t10 10790.696726 11418.594559 0.099660 0.124085\n",
"\t15 10450.666394 10999.619473 0.074550 0.094676\n",
"\n",
" (\u001b[1mbase.py\u001b[0m:348)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1;37mINFO\u001b[0m:tardis.simulation.base:Plasma stratification:\n",
"\t t_rad next_t_rad w next_w\n",
"\tShell \n",
"\t0 10659.382763 11507.437689 0.433573 0.499441\n",
"\t5 11038.244897 11634.568776 0.158494 0.197953\n",
"\t10 10790.696726 11418.594559 0.099660 0.124085\n",
"\t15 10450.666394 10999.619473 0.074550 0.094676\n",
"\n",
"\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 11261.489 K -- next t_inner 10069.444 K (\u001b[1mbase.py\u001b[0m:350)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1;37mINFO\u001b[0m:tardis.simulation.base:t_inner 11261.489 K -- next t_inner 10069.444 K\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 7/20 (\u001b[1mbase.py\u001b[0m:266)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1;37mINFO\u001b[0m:tardis.simulation.base:Starting iteration 7/20\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 8.49858e+42 erg / s Luminosity absorbed = 2.69247e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1;37mINFO\u001b[0m:tardis.simulation.base:Luminosity emitted = 8.49858e+42 erg / s Luminosity absorbed = 2.69247e+42 erg / s Luminosity requested = 1.05928e+43 erg / s\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n",
"\t t_rad next_t_rad w next_w\n",
"\tShell \n",
"\t0 11507.437689 10679.650246 0.499441 0.431088\n",
"\t5 11634.568776 11048.266431 0.197953 0.157179\n",
"\t10 11418.594559 10825.714870 0.124085 0.098608\n",
"\t15 10999.619473 10506.321595 0.094676 0.073794\n",
"\n",
" (\u001b[1mbase.py\u001b[0m:348)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1;37mINFO\u001b[0m:tardis.simulation.base:Plasma stratification:\n",
"\t t_rad next_t_rad w next_w\n",
"\tShell \n",
"\t0 11507.437689 10679.650246 0.499441 0.431088\n",
"\t5 11634.568776 11048.266431 0.197953 0.157179\n",
"\t10 11418.594559 10825.714870 0.124085 0.098608\n",
"\t15 10999.619473 10506.321595 0.094676 0.073794\n",
"\n",
"\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 10069.444 K -- next t_inner 11241.826 K (\u001b[1mbase.py\u001b[0m:350)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1;37mINFO\u001b[0m:tardis.simulation.base:t_inner 10069.444 K -- next t_inner 11241.826 K\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 8/20 (\u001b[1mbase.py\u001b[0m:266)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1;37mINFO\u001b[0m:tardis.simulation.base:Starting iteration 8/20\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.30632e+43 erg / s Luminosity absorbed = 4.31719e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1;37mINFO\u001b[0m:tardis.simulation.base:Luminosity emitted = 1.30632e+43 erg / s Luminosity absorbed = 4.31719e+42 erg / s Luminosity requested = 1.05928e+43 erg / s\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n",
"\t t_rad next_t_rad w next_w\n",
"\tShell \n",
"\t0 10679.650246 11459.828312 0.431088 0.506176\n",
"\t5 11048.266431 11688.139012 0.157179 0.193468\n",
"\t10 10825.714870 11441.768967 0.098608 0.122412\n",
"\t15 10506.321595 11099.449886 0.073794 0.090915\n",
"\n",
" (\u001b[1mbase.py\u001b[0m:348)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1;37mINFO\u001b[0m:tardis.simulation.base:Plasma stratification:\n",
"\t t_rad next_t_rad w next_w\n",
"\tShell \n",
"\t0 10679.650246 11459.828312 0.431088 0.506176\n",
"\t5 11048.266431 11688.139012 0.157179 0.193468\n",
"\t10 10825.714870 11441.768967 0.098608 0.122412\n",
"\t15 10506.321595 11099.449886 0.073794 0.090915\n",
"\n",
"\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 11241.826 K -- next t_inner 10123.177 K (\u001b[1mbase.py\u001b[0m:350)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1;37mINFO\u001b[0m:tardis.simulation.base:t_inner 11241.826 K -- next t_inner 10123.177 K\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 9/20 (\u001b[1mbase.py\u001b[0m:266)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1;37mINFO\u001b[0m:tardis.simulation.base:Starting iteration 9/20\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 8.68357e+42 erg / s Luminosity absorbed = 2.75015e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1;37mINFO\u001b[0m:tardis.simulation.base:Luminosity emitted = 8.68357e+42 erg / s Luminosity absorbed = 2.75015e+42 erg / s Luminosity requested = 1.05928e+43 erg / s\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n",
"\t t_rad next_t_rad w next_w\n",
"\tShell \n",
"\t0 11459.828312 10666.223660 0.506176 0.445097\n",
"\t5 11688.139012 11000.288585 0.193468 0.163424\n",
"\t10 11441.768967 10822.884326 0.122412 0.101641\n",
"\t15 11099.449886 10384.181273 0.090915 0.078432\n",
"\n",
" (\u001b[1mbase.py\u001b[0m:348)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1;37mINFO\u001b[0m:tardis.simulation.base:Plasma stratification:\n",
"\t t_rad next_t_rad w next_w\n",
"\tShell \n",
"\t0 11459.828312 10666.223660 0.506176 0.445097\n",
"\t5 11688.139012 11000.288585 0.193468 0.163424\n",
"\t10 11441.768967 10822.884326 0.122412 0.101641\n",
"\t15 11099.449886 10384.181273 0.090915 0.078432\n",
"\n",
"\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 10123.177 K -- next t_inner 11180.783 K (\u001b[1mbase.py\u001b[0m:350)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1;37mINFO\u001b[0m:tardis.simulation.base:t_inner 10123.177 K -- next t_inner 11180.783 K\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 10/20 (\u001b[1mbase.py\u001b[0m:266)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1;37mINFO\u001b[0m:tardis.simulation.base:Starting iteration 10/20\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.28170e+43 erg / s Luminosity absorbed = 4.19511e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1;37mINFO\u001b[0m:tardis.simulation.base:Luminosity emitted = 1.28170e+43 erg / s Luminosity absorbed = 4.19511e+42 erg / s Luminosity requested = 1.05928e+43 erg / s\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n",
"\t t_rad next_t_rad w next_w\n",
"\tShell \n",
"\t0 10666.223660 11427.410445 0.445097 0.500788\n",
"\t5 11000.288585 11612.349822 0.163424 0.193129\n",
"\t10 10822.884326 11373.245169 0.101641 0.121622\n",
"\t15 10384.181273 11047.955461 0.078432 0.090937\n",
"\n",
" (\u001b[1mbase.py\u001b[0m:348)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1;37mINFO\u001b[0m:tardis.simulation.base:Plasma stratification:\n",
"\t t_rad next_t_rad w next_w\n",
"\tShell \n",
"\t0 10666.223660 11427.410445 0.445097 0.500788\n",
"\t5 11000.288585 11612.349822 0.163424 0.193129\n",
"\t10 10822.884326 11373.245169 0.101641 0.121622\n",
"\t15 10384.181273 11047.955461 0.078432 0.090937\n",
"\n",
"\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 11180.783 K -- next t_inner 10164.432 K (\u001b[1mbase.py\u001b[0m:350)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1;37mINFO\u001b[0m:tardis.simulation.base:t_inner 11180.783 K -- next t_inner 10164.432 K\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 11/20 (\u001b[1mbase.py\u001b[0m:266)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1;37mINFO\u001b[0m:tardis.simulation.base:Starting iteration 11/20\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 8.79074e+42 erg / s Luminosity absorbed = 2.82804e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1;37mINFO\u001b[0m:tardis.simulation.base:Luminosity emitted = 8.79074e+42 erg / s Luminosity absorbed = 2.82804e+42 erg / s Luminosity requested = 1.05928e+43 erg / s\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n",
"\t t_rad next_t_rad w next_w\n",
"\tShell \n",
"\t0 11427.410445 10741.337822 0.500788 0.439938\n",
"\t5 11612.349822 11230.515356 0.193129 0.153637\n",
"\t10 11373.245169 10870.696315 0.121622 0.101050\n",
"\t15 11047.955461 10538.170159 0.090937 0.074680\n",
"\n",
" (\u001b[1mbase.py\u001b[0m:348)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1;37mINFO\u001b[0m:tardis.simulation.base:Plasma stratification:\n",
"\t t_rad next_t_rad w next_w\n",
"\tShell \n",
"\t0 11427.410445 10741.337822 0.500788 0.439938\n",
"\t5 11612.349822 11230.515356 0.193129 0.153637\n",
"\t10 11373.245169 10870.696315 0.121622 0.101050\n",
"\t15 11047.955461 10538.170159 0.090937 0.074680\n",
"\n",
"\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 10164.432 K -- next t_inner 11157.711 K (\u001b[1mbase.py\u001b[0m:350)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1;37mINFO\u001b[0m:tardis.simulation.base:t_inner 10164.432 K -- next t_inner 11157.711 K\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 12/20 (\u001b[1mbase.py\u001b[0m:266)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1;37mINFO\u001b[0m:tardis.simulation.base:Starting iteration 12/20\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.27128e+43 erg / s Luminosity absorbed = 4.15415e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1;37mINFO\u001b[0m:tardis.simulation.base:Luminosity emitted = 1.27128e+43 erg / s Luminosity absorbed = 4.15415e+42 erg / s Luminosity requested = 1.05928e+43 erg / s\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n",
"\t t_rad next_t_rad w next_w\n",
"\tShell \n",
"\t0 10741.337822 11507.877578 0.439938 0.483114\n",
"\t5 11230.515356 11808.852053 0.153637 0.181826\n",
"\t10 10870.696315 11557.412757 0.101050 0.113563\n",
"\t15 10538.170159 11117.762050 0.074680 0.087418\n",
"\n",
" (\u001b[1mbase.py\u001b[0m:348)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1;37mINFO\u001b[0m:tardis.simulation.base:Plasma stratification:\n",
"\t t_rad next_t_rad w next_w\n",
"\tShell \n",
"\t0 10741.337822 11507.877578 0.439938 0.483114\n",
"\t5 11230.515356 11808.852053 0.153637 0.181826\n",
"\t10 10870.696315 11557.412757 0.101050 0.113563\n",
"\t15 10538.170159 11117.762050 0.074680 0.087418\n",
"\n",
"\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 11157.711 K -- next t_inner 10184.966 K (\u001b[1mbase.py\u001b[0m:350)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1;37mINFO\u001b[0m:tardis.simulation.base:t_inner 11157.711 K -- next t_inner 10184.966 K\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 13/20 (\u001b[1mbase.py\u001b[0m:266)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1;37mINFO\u001b[0m:tardis.simulation.base:Starting iteration 13/20\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 8.90399e+42 erg / s Luminosity absorbed = 2.80864e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1;37mINFO\u001b[0m:tardis.simulation.base:Luminosity emitted = 8.90399e+42 erg / s Luminosity absorbed = 2.80864e+42 erg / s Luminosity requested = 1.05928e+43 erg / s\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n",
"\t t_rad next_t_rad w next_w\n",
"\tShell \n",
"\t0 11507.877578 10727.217531 0.483114 0.443706\n",
"\t5 11808.852053 11171.758889 0.181826 0.160824\n",
"\t10 11557.412757 10971.722637 0.113563 0.098588\n",
"\t15 11117.762050 10574.916600 0.087418 0.075266\n",
"\n",
" (\u001b[1mbase.py\u001b[0m:348)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1;37mINFO\u001b[0m:tardis.simulation.base:Plasma stratification:\n",
"\t t_rad next_t_rad w next_w\n",
"\tShell \n",
"\t0 11507.877578 10727.217531 0.483114 0.443706\n",
"\t5 11808.852053 11171.758889 0.181826 0.160824\n",
"\t10 11557.412757 10971.722637 0.113563 0.098588\n",
"\t15 11117.762050 10574.916600 0.087418 0.075266\n",
"\n",
"\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 10184.966 K -- next t_inner 11108.923 K (\u001b[1mbase.py\u001b[0m:350)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1;37mINFO\u001b[0m:tardis.simulation.base:t_inner 10184.966 K -- next t_inner 11108.923 K\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 14/20 (\u001b[1mbase.py\u001b[0m:266)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1;37mINFO\u001b[0m:tardis.simulation.base:Starting iteration 14/20\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.25052e+43 erg / s Luminosity absorbed = 4.07335e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1;37mINFO\u001b[0m:tardis.simulation.base:Luminosity emitted = 1.25052e+43 erg / s Luminosity absorbed = 4.07335e+42 erg / s Luminosity requested = 1.05928e+43 erg / s\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n",
"\t t_rad next_t_rad w next_w\n",
"\tShell \n",
"\t0 10727.217531 11413.626870 0.443706 0.489526\n",
"\t5 11171.758889 11697.006992 0.160824 0.184795\n",
"\t10 10971.722637 11424.445844 0.098588 0.116722\n",
"\t15 10574.916600 11047.434163 0.075266 0.088067\n",
"\n",
" (\u001b[1mbase.py\u001b[0m:348)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1;37mINFO\u001b[0m:tardis.simulation.base:Plasma stratification:\n",
"\t t_rad next_t_rad w next_w\n",
"\tShell \n",
"\t0 10727.217531 11413.626870 0.443706 0.489526\n",
"\t5 11171.758889 11697.006992 0.160824 0.184795\n",
"\t10 10971.722637 11424.445844 0.098588 0.116722\n",
"\t15 10574.916600 11047.434163 0.075266 0.088067\n",
"\n",
"\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 11108.923 K -- next t_inner 10224.266 K (\u001b[1mbase.py\u001b[0m:350)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1;37mINFO\u001b[0m:tardis.simulation.base:t_inner 11108.923 K -- next t_inner 10224.266 K\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 15/20 (\u001b[1mbase.py\u001b[0m:266)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1;37mINFO\u001b[0m:tardis.simulation.base:Starting iteration 15/20\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 9.00727e+42 erg / s Luminosity absorbed = 2.88724e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1;37mINFO\u001b[0m:tardis.simulation.base:Luminosity emitted = 9.00727e+42 erg / s Luminosity absorbed = 2.88724e+42 erg / s Luminosity requested = 1.05928e+43 erg / s\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n",
"\t t_rad next_t_rad w next_w\n",
"\tShell \n",
"\t0 11413.626870 10712.622749 0.489526 0.455660\n",
"\t5 11697.006992 11125.894032 0.184795 0.164091\n",
"\t10 11424.445844 10816.390451 0.116722 0.104037\n",
"\t15 11047.434163 10421.687097 0.088067 0.080401\n",
"\n",
" (\u001b[1mbase.py\u001b[0m:348)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1;37mINFO\u001b[0m:tardis.simulation.base:Plasma stratification:\n",
"\t t_rad next_t_rad w next_w\n",
"\tShell \n",
"\t0 11413.626870 10712.622749 0.489526 0.455660\n",
"\t5 11697.006992 11125.894032 0.184795 0.164091\n",
"\t10 11424.445844 10816.390451 0.116722 0.104037\n",
"\t15 11047.434163 10421.687097 0.088067 0.080401\n",
"\n",
"\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 10224.266 K -- next t_inner 11087.666 K (\u001b[1mbase.py\u001b[0m:350)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1;37mINFO\u001b[0m:tardis.simulation.base:t_inner 10224.266 K -- next t_inner 11087.666 K\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 16/20 (\u001b[1mbase.py\u001b[0m:266)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1;37mINFO\u001b[0m:tardis.simulation.base:Starting iteration 16/20\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.23781e+43 erg / s Luminosity absorbed = 4.07435e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1;37mINFO\u001b[0m:tardis.simulation.base:Luminosity emitted = 1.23781e+43 erg / s Luminosity absorbed = 4.07435e+42 erg / s Luminosity requested = 1.05928e+43 erg / s\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n",
"\t t_rad next_t_rad w next_w\n",
"\tShell \n",
"\t0 10712.622749 11352.158138 0.455660 0.500754\n",
"\t5 11125.894032 11644.968350 0.164091 0.185289\n",
"\t10 10816.390451 11320.695930 0.104037 0.119195\n",
"\t15 10421.687097 10965.228363 0.080401 0.089940\n",
"\n",
" (\u001b[1mbase.py\u001b[0m:348)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1;37mINFO\u001b[0m:tardis.simulation.base:Plasma stratification:\n",
"\t t_rad next_t_rad w next_w\n",
"\tShell \n",
"\t0 10712.622749 11352.158138 0.455660 0.500754\n",
"\t5 11125.894032 11644.968350 0.164091 0.185289\n",
"\t10 10816.390451 11320.695930 0.104037 0.119195\n",
"\t15 10421.687097 10965.228363 0.080401 0.089940\n",
"\n",
"\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 11087.666 K -- next t_inner 10256.946 K (\u001b[1mbase.py\u001b[0m:350)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1;37mINFO\u001b[0m:tardis.simulation.base:t_inner 11087.666 K -- next t_inner 10256.946 K\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 17/20 (\u001b[1mbase.py\u001b[0m:266)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1;37mINFO\u001b[0m:tardis.simulation.base:Starting iteration 17/20\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 9.18956e+42 erg / s Luminosity absorbed = 2.86249e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1;37mINFO\u001b[0m:tardis.simulation.base:Luminosity emitted = 9.18956e+42 erg / s Luminosity absorbed = 2.86249e+42 erg / s Luminosity requested = 1.05928e+43 erg / s\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n",
"\t t_rad next_t_rad w next_w\n",
"\tShell \n",
"\t0 11352.158138 10738.799194 0.500754 0.452965\n",
"\t5 11644.968350 11210.269586 0.185289 0.160945\n",
"\t10 11320.695930 10911.463205 0.119195 0.103910\n",
"\t15 10965.228363 10545.065525 0.089940 0.078433\n",
"\n",
" (\u001b[1mbase.py\u001b[0m:348)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1;37mINFO\u001b[0m:tardis.simulation.base:Plasma stratification:\n",
"\t t_rad next_t_rad w next_w\n",
"\tShell \n",
"\t0 11352.158138 10738.799194 0.500754 0.452965\n",
"\t5 11644.968350 11210.269586 0.185289 0.160945\n",
"\t10 11320.695930 10911.463205 0.119195 0.103910\n",
"\t15 10965.228363 10545.065525 0.089940 0.078433\n",
"\n",
"\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 10256.946 K -- next t_inner 11012.230 K (\u001b[1mbase.py\u001b[0m:350)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1;37mINFO\u001b[0m:tardis.simulation.base:t_inner 10256.946 K -- next t_inner 11012.230 K\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 18/20 (\u001b[1mbase.py\u001b[0m:266)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1;37mINFO\u001b[0m:tardis.simulation.base:Starting iteration 18/20\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.20741e+43 erg / s Luminosity absorbed = 3.93375e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1;37mINFO\u001b[0m:tardis.simulation.base:Luminosity emitted = 1.20741e+43 erg / s Luminosity absorbed = 3.93375e+42 erg / s Luminosity requested = 1.05928e+43 erg / s\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n",
"\t t_rad next_t_rad w next_w\n",
"\tShell \n",
"\t0 10738.799194 11316.665617 0.452965 0.492135\n",
"\t5 11210.269586 11599.094127 0.160945 0.183929\n",
"\t10 10911.463205 11403.508986 0.103910 0.114400\n",
"\t15 10545.065525 10958.974248 0.078433 0.087415\n",
"\n",
" (\u001b[1mbase.py\u001b[0m:348)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1;37mINFO\u001b[0m:tardis.simulation.base:Plasma stratification:\n",
"\t t_rad next_t_rad w next_w\n",
"\tShell \n",
"\t0 10738.799194 11316.665617 0.452965 0.492135\n",
"\t5 11210.269586 11599.094127 0.160945 0.183929\n",
"\t10 10911.463205 11403.508986 0.103910 0.114400\n",
"\t15 10545.065525 10958.974248 0.078433 0.087415\n",
"\n",
"\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 11012.230 K -- next t_inner 10314.623 K (\u001b[1mbase.py\u001b[0m:350)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1;37mINFO\u001b[0m:tardis.simulation.base:t_inner 11012.230 K -- next t_inner 10314.623 K\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 19/20 (\u001b[1mbase.py\u001b[0m:266)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1;37mINFO\u001b[0m:tardis.simulation.base:Starting iteration 19/20\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 9.29848e+42 erg / s Luminosity absorbed = 3.02011e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1;37mINFO\u001b[0m:tardis.simulation.base:Luminosity emitted = 9.29848e+42 erg / s Luminosity absorbed = 3.02011e+42 erg / s Luminosity requested = 1.05928e+43 erg / s\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n",
"\t t_rad next_t_rad w next_w\n",
"\tShell \n",
"\t0 11316.665617 10862.505720 0.492135 0.444495\n",
"\t5 11599.094127 11194.462074 0.183929 0.162842\n",
"\t10 11403.508986 11065.620645 0.114400 0.099372\n",
"\t15 10958.974248 10599.851144 0.087415 0.077690\n",
"\n",
" (\u001b[1mbase.py\u001b[0m:348)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1;37mINFO\u001b[0m:tardis.simulation.base:Plasma stratification:\n",
"\t t_rad next_t_rad w next_w\n",
"\tShell \n",
"\t0 11316.665617 10862.505720 0.492135 0.444495\n",
"\t5 11599.094127 11194.462074 0.183929 0.162842\n",
"\t10 11403.508986 11065.620645 0.114400 0.099372\n",
"\t15 10958.974248 10599.851144 0.087415 0.077690\n",
"\n",
"\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 10314.623 K -- next t_inner 11009.102 K (\u001b[1mbase.py\u001b[0m:350)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1;37mINFO\u001b[0m:tardis.simulation.base:t_inner 10314.623 K -- next t_inner 11009.102 K\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 20/20 (\u001b[1mbase.py\u001b[0m:266)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1;37mINFO\u001b[0m:tardis.simulation.base:Starting iteration 20/20\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.21062e+43 erg / s Luminosity absorbed = 3.88405e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1;37mINFO\u001b[0m:tardis.simulation.base:Luminosity emitted = 1.21062e+43 erg / s Luminosity absorbed = 3.88405e+42 erg / s Luminosity requested = 1.05928e+43 erg / s\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Simulation finished in 20 iterations and took 175.90 s (\u001b[1mbase.py\u001b[0m:306)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1;37mINFO\u001b[0m:tardis.simulation.base:Simulation finished in 20 iterations and took 175.90 s\n"
]
}
],
"source": [
"#TARDIS now uses the data in the data repo\n",
"sim = run_tardis('/home/jasims/tardis/docs/examples/tardis_example.yml')"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Populating the interactive namespace from numpy and matplotlib\n",
"[\u001b[1mpy.warnings \u001b[0m][\u001b[1;33mWARNING\u001b[0m] /home/jasims/miniconda3/envs/tardis/lib/python3.6/site-packages/astropy/units/quantity.py:1070: AstropyDeprecationWarning: The truth value of a Quantity is ambiguous. In the future this will raise a ValueError.\n",
" AstropyDeprecationWarning)\n",
" (\u001b[1mwarnings.py\u001b[0m:99)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1;33mWARNING\u001b[0m:py.warnings:/home/jasims/miniconda3/envs/tardis/lib/python3.6/site-packages/astropy/units/quantity.py:1070: AstropyDeprecationWarning: The truth value of a Quantity is ambiguous. In the future this will raise a ValueError.\n",
" AstropyDeprecationWarning)\n",
"\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[\u001b[1mpy.warnings \u001b[0m][\u001b[1;33mWARNING\u001b[0m] /home/jasims/tardis/tardis/montecarlo/formal_integral.py:167: FutureWarning: Method .as_matrix will be removed in a future version. Use .values instead.\n",
" result = pd.DataFrame(att_S_ul.as_matrix(), index=transitions.transition_line_id.values)\n",
" (\u001b[1mwarnings.py\u001b[0m:99)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[1;33mWARNING\u001b[0m:py.warnings:/home/jasims/tardis/tardis/montecarlo/formal_integral.py:167: FutureWarning: Method .as_matrix will be removed in a future version. Use .values instead.\n",
" result = pd.DataFrame(att_S_ul.as_matrix(), index=transitions.transition_line_id.values)\n",
"\n"
]
},
{
"data": {
"application/javascript": [
"/* Put everything inside the global mpl namespace */\n",
"window.mpl = {};\n",
"\n",
"\n",
"mpl.get_websocket_type = function() {\n",
" if (typeof(WebSocket) !== 'undefined') {\n",
" return WebSocket;\n",
" } else if (typeof(MozWebSocket) !== 'undefined') {\n",
" return MozWebSocket;\n",
" } else {\n",
" alert('Your browser does not have WebSocket support. ' +\n",
" 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n",
" 'Firefox 4 and 5 are also supported but you ' +\n",
" 'have to enable WebSockets in about:config.');\n",
" };\n",
"}\n",
"\n",
"mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n",
" this.id = figure_id;\n",
"\n",
" this.ws = websocket;\n",
"\n",
" this.supports_binary = (this.ws.binaryType != undefined);\n",
"\n",
" if (!this.supports_binary) {\n",
" var warnings = document.getElementById(\"mpl-warnings\");\n",
" if (warnings) {\n",
" warnings.style.display = 'block';\n",
" warnings.textContent = (\n",
" \"This browser does not support binary websocket messages. \" +\n",
" \"Performance may be slow.\");\n",
" }\n",
" }\n",
"\n",
" this.imageObj = new Image();\n",
"\n",
" this.context = undefined;\n",
" this.message = undefined;\n",
" this.canvas = undefined;\n",
" this.rubberband_canvas = undefined;\n",
" this.rubberband_context = undefined;\n",
" this.format_dropdown = undefined;\n",
"\n",
" this.image_mode = 'full';\n",
"\n",
" this.root = $('<div/>');\n",
" this._root_extra_style(this.root)\n",
" this.root.attr('style', 'display: inline-block');\n",
"\n",
" $(parent_element).append(this.root);\n",
"\n",
" this._init_header(this);\n",
" this._init_canvas(this);\n",
" this._init_toolbar(this);\n",
"\n",
" var fig = this;\n",
"\n",
" this.waiting = false;\n",
"\n",
" this.ws.onopen = function () {\n",
" fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n",
" fig.send_message(\"send_image_mode\", {});\n",
" if (mpl.ratio != 1) {\n",
" fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n",
" }\n",
" fig.send_message(\"refresh\", {});\n",
" }\n",
"\n",
" this.imageObj.onload = function() {\n",
" if (fig.image_mode == 'full') {\n",
" // Full images could contain transparency (where diff images\n",
" // almost always do), so we need to clear the canvas so that\n",
" // there is no ghosting.\n",
" fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n",
" }\n",
" fig.context.drawImage(fig.imageObj, 0, 0);\n",
" };\n",
"\n",
" this.imageObj.onunload = function() {\n",
" fig.ws.close();\n",
" }\n",
"\n",
" this.ws.onmessage = this._make_on_message_function(this);\n",
"\n",
" this.ondownload = ondownload;\n",
"}\n",
"\n",
"mpl.figure.prototype._init_header = function() {\n",
" var titlebar = $(\n",
" '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
" 'ui-helper-clearfix\"/>');\n",
" var titletext = $(\n",
" '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
" 'text-align: center; padding: 3px;\"/>');\n",
" titlebar.append(titletext)\n",
" this.root.append(titlebar);\n",
" this.header = titletext[0];\n",
"}\n",
"\n",
"\n",
"\n",
"mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
"\n",
"}\n",
"\n",
"\n",
"mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
"\n",
"}\n",
"\n",
"mpl.figure.prototype._init_canvas = function() {\n",
" var fig = this;\n",
"\n",
" var canvas_div = $('<div/>');\n",
"\n",
" canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
"\n",
" function canvas_keyboard_event(event) {\n",
" return fig.key_event(event, event['data']);\n",
" }\n",
"\n",
" canvas_div.keydown('key_press', canvas_keyboard_event);\n",
" canvas_div.keyup('key_release', canvas_keyboard_event);\n",
" this.canvas_div = canvas_div\n",
" this._canvas_extra_style(canvas_div)\n",
" this.root.append(canvas_div);\n",
"\n",
" var canvas = $('<canvas/>');\n",
" canvas.addClass('mpl-canvas');\n",
" canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
"\n",
" this.canvas = canvas[0];\n",
" this.context = canvas[0].getContext(\"2d\");\n",
"\n",
" var backingStore = this.context.backingStorePixelRatio ||\n",
"\tthis.context.webkitBackingStorePixelRatio ||\n",
"\tthis.context.mozBackingStorePixelRatio ||\n",
"\tthis.context.msBackingStorePixelRatio ||\n",
"\tthis.context.oBackingStorePixelRatio ||\n",
"\tthis.context.backingStorePixelRatio || 1;\n",
"\n",
" mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
"\n",
" var rubberband = $('<canvas/>');\n",
" rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n",
"\n",
" var pass_mouse_events = true;\n",
"\n",
" canvas_div.resizable({\n",
" start: function(event, ui) {\n",
" pass_mouse_events = false;\n",
" },\n",
" resize: function(event, ui) {\n",
" fig.request_resize(ui.size.width, ui.size.height);\n",
" },\n",
" stop: function(event, ui) {\n",
" pass_mouse_events = true;\n",
" fig.request_resize(ui.size.width, ui.size.height);\n",
" },\n",
" });\n",
"\n",
" function mouse_event_fn(event) {\n",
" if (pass_mouse_events)\n",
" return fig.mouse_event(event, event['data']);\n",
" }\n",
"\n",
" rubberband.mousedown('button_press', mouse_event_fn);\n",
" rubberband.mouseup('button_release', mouse_event_fn);\n",
" // Throttle sequential mouse events to 1 every 20ms.\n",
" rubberband.mousemove('motion_notify', mouse_event_fn);\n",
"\n",
" rubberband.mouseenter('figure_enter', mouse_event_fn);\n",
" rubberband.mouseleave('figure_leave', mouse_event_fn);\n",
"\n",
" canvas_div.on(\"wheel\", function (event) {\n",
" event = event.originalEvent;\n",
" event['data'] = 'scroll'\n",
" if (event.deltaY < 0) {\n",
" event.step = 1;\n",
" } else {\n",
" event.step = -1;\n",
" }\n",
" mouse_event_fn(event);\n",
" });\n",
"\n",
" canvas_div.append(canvas);\n",
" canvas_div.append(rubberband);\n",
"\n",
" this.rubberband = rubberband;\n",
" this.rubberband_canvas = rubberband[0];\n",
" this.rubberband_context = rubberband[0].getContext(\"2d\");\n",
" this.rubberband_context.strokeStyle = \"#000000\";\n",
"\n",
" this._resize_canvas = function(width, height) {\n",
" // Keep the size of the canvas, canvas container, and rubber band\n",
" // canvas in synch.\n",
" canvas_div.css('width', width)\n",
" canvas_div.css('height', height)\n",
"\n",
" canvas.attr('width', width * mpl.ratio);\n",
" canvas.attr('height', height * mpl.ratio);\n",
" canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n",
"\n",
" rubberband.attr('width', width);\n",
" rubberband.attr('height', height);\n",
" }\n",
"\n",
" // Set the figure to an initial 600x600px, this will subsequently be updated\n",
" // upon first draw.\n",
" this._resize_canvas(600, 600);\n",
"\n",
" // Disable right mouse context menu.\n",
" $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n",
" return false;\n",
" });\n",
"\n",
" function set_focus () {\n",
" canvas.focus();\n",
" canvas_div.focus();\n",
" }\n",
"\n",
" window.setTimeout(set_focus, 100);\n",
"}\n",
"\n",
"mpl.figure.prototype._init_toolbar = function() {\n",
" var fig = this;\n",
"\n",
" var nav_element = $('<div/>');\n",
" nav_element.attr('style', 'width: 100%');\n",
" this.root.append(nav_element);\n",
"\n",
" // Define a callback function for later on.\n",
" function toolbar_event(event) {\n",
" return fig.toolbar_button_onclick(event['data']);\n",
" }\n",
" function toolbar_mouse_event(event) {\n",
" return fig.toolbar_button_onmouseover(event['data']);\n",
" }\n",
"\n",
" for(var toolbar_ind in mpl.toolbar_items) {\n",
" var name = mpl.toolbar_items[toolbar_ind][0];\n",
" var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
" var image = mpl.toolbar_items[toolbar_ind][2];\n",
" var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
"\n",
" if (!name) {\n",
" // put a spacer in here.\n",
" continue;\n",
" }\n",
" var button = $('<button/>');\n",
" button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n",
" 'ui-button-icon-only');\n",
" button.attr('role', 'button');\n",
" button.attr('aria-disabled', 'false');\n",
" button.click(method_name, toolbar_event);\n",
" button.mouseover(tooltip, toolbar_mouse_event);\n",
"\n",
" var icon_img = $('<span/>');\n",
" icon_img.addClass('ui-button-icon-primary ui-icon');\n",
" icon_img.addClass(image);\n",
" icon_img.addClass('ui-corner-all');\n",
"\n",
" var tooltip_span = $('<span/>');\n",
" tooltip_span.addClass('ui-button-text');\n",
" tooltip_span.html(tooltip);\n",
"\n",
" button.append(icon_img);\n",
" button.append(tooltip_span);\n",
"\n",
" nav_element.append(button);\n",
" }\n",
"\n",
" var fmt_picker_span = $('<span/>');\n",
"\n",
" var fmt_picker = $('<select/>');\n",
" fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n",
" fmt_picker_span.append(fmt_picker);\n",
" nav_element.append(fmt_picker_span);\n",
" this.format_dropdown = fmt_picker[0];\n",
"\n",
" for (var ind in mpl.extensions) {\n",
" var fmt = mpl.extensions[ind];\n",
" var option = $(\n",
" '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n",
" fmt_picker.append(option);\n",
" }\n",
"\n",
" // Add hover states to the ui-buttons\n",
" $( \".ui-button\" ).hover(\n",
" function() { $(this).addClass(\"ui-state-hover\");},\n",
" function() { $(this).removeClass(\"ui-state-hover\");}\n",
" );\n",
"\n",
" var status_bar = $('<span class=\"mpl-message\"/>');\n",
" nav_element.append(status_bar);\n",
" this.message = status_bar[0];\n",
"}\n",
"\n",
"mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n",
" // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n",
" // which will in turn request a refresh of the image.\n",
" this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n",
"}\n",
"\n",
"mpl.figure.prototype.send_message = function(type, properties) {\n",
" properties['type'] = type;\n",
" properties['figure_id'] = this.id;\n",
" this.ws.send(JSON.stringify(properties));\n",
"}\n",
"\n",
"mpl.figure.prototype.send_draw_message = function() {\n",
" if (!this.waiting) {\n",
" this.waiting = true;\n",
" this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n",
" }\n",
"}\n",
"\n",
"\n",
"mpl.figure.prototype.handle_save = function(fig, msg) {\n",
" var format_dropdown = fig.format_dropdown;\n",
" var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n",
" fig.ondownload(fig, format);\n",
"}\n",
"\n",
"\n",
"mpl.figure.prototype.handle_resize = function(fig, msg) {\n",
" var size = msg['size'];\n",
" if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n",
" fig._resize_canvas(size[0], size[1]);\n",
" fig.send_message(\"refresh\", {});\n",
" };\n",
"}\n",
"\n",
"mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n",
" var x0 = msg['x0'] / mpl.ratio;\n",
" var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n",
" var x1 = msg['x1'] / mpl.ratio;\n",
" var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n",
" x0 = Math.floor(x0) + 0.5;\n",
" y0 = Math.floor(y0) + 0.5;\n",
" x1 = Math.floor(x1) + 0.5;\n",
" y1 = Math.floor(y1) + 0.5;\n",
" var min_x = Math.min(x0, x1);\n",
" var min_y = Math.min(y0, y1);\n",
" var width = Math.abs(x1 - x0);\n",
" var height = Math.abs(y1 - y0);\n",
"\n",
" fig.rubberband_context.clearRect(\n",
" 0, 0, fig.canvas.width / mpl.ratio, fig.canvas.height / mpl.ratio);\n",
"\n",
" fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n",
"}\n",
"\n",
"mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n",
" // Updates the figure title.\n",
" fig.header.textContent = msg['label'];\n",
"}\n",
"\n",
"mpl.figure.prototype.handle_cursor = function(fig, msg) {\n",
" var cursor = msg['cursor'];\n",
" switch(cursor)\n",
" {\n",
" case 0:\n",
" cursor = 'pointer';\n",
" break;\n",
" case 1:\n",
" cursor = 'default';\n",
" break;\n",
" case 2:\n",
" cursor = 'crosshair';\n",
" break;\n",
" case 3:\n",
" cursor = 'move';\n",
" break;\n",
" }\n",
" fig.rubberband_canvas.style.cursor = cursor;\n",
"}\n",
"\n",
"mpl.figure.prototype.handle_message = function(fig, msg) {\n",
" fig.message.textContent = msg['message'];\n",
"}\n",
"\n",
"mpl.figure.prototype.handle_draw = function(fig, msg) {\n",
" // Request the server to send over a new figure.\n",
" fig.send_draw_message();\n",
"}\n",
"\n",
"mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n",
" fig.image_mode = msg['mode'];\n",
"}\n",
"\n",
"mpl.figure.prototype.updated_canvas_event = function() {\n",
" // Called whenever the canvas gets updated.\n",
" this.send_message(\"ack\", {});\n",
"}\n",
"\n",
"// A function to construct a web socket function for onmessage handling.\n",
"// Called in the figure constructor.\n",
"mpl.figure.prototype._make_on_message_function = function(fig) {\n",
" return function socket_on_message(evt) {\n",
" if (evt.data instanceof Blob) {\n",
" /* FIXME: We get \"Resource interpreted as Image but\n",
" * transferred with MIME type text/plain:\" errors on\n",
" * Chrome. But how to set the MIME type? It doesn't seem\n",
" * to be part of the websocket stream */\n",
" evt.data.type = \"image/png\";\n",
"\n",
" /* Free the memory for the previous frames */\n",
" if (fig.imageObj.src) {\n",
" (window.URL || window.webkitURL).revokeObjectURL(\n",
" fig.imageObj.src);\n",
" }\n",
"\n",
" fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
" evt.data);\n",
" fig.updated_canvas_event();\n",
" fig.waiting = false;\n",
" return;\n",
" }\n",
" else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n",
" fig.imageObj.src = evt.data;\n",
" fig.updated_canvas_event();\n",
" fig.waiting = false;\n",
" return;\n",
" }\n",
"\n",
" var msg = JSON.parse(evt.data);\n",
" var msg_type = msg['type'];\n",
"\n",
" // Call the \"handle_{type}\" callback, which takes\n",
" // the figure and JSON message as its only arguments.\n",
" try {\n",
" var callback = fig[\"handle_\" + msg_type];\n",
" } catch (e) {\n",
" console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n",
" return;\n",
" }\n",
"\n",
" if (callback) {\n",
" try {\n",
" // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n",
" callback(fig, msg);\n",
" } catch (e) {\n",
" console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n",
" }\n",
" }\n",
" };\n",
"}\n",
"\n",
"// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
"mpl.findpos = function(e) {\n",
" //this section is from http://www.quirksmode.org/js/events_properties.html\n",
" var targ;\n",
" if (!e)\n",
" e = window.event;\n",
" if (e.target)\n",
" targ = e.target;\n",
" else if (e.srcElement)\n",
" targ = e.srcElement;\n",
" if (targ.nodeType == 3) // defeat Safari bug\n",
" targ = targ.parentNode;\n",
"\n",
" // jQuery normalizes the pageX and pageY\n",
" // pageX,Y are the mouse positions relative to the document\n",
" // offset() returns the position of the element relative to the document\n",
" var x = e.pageX - $(targ).offset().left;\n",
" var y = e.pageY - $(targ).offset().top;\n",
"\n",
" return {\"x\": x, \"y\": y};\n",
"};\n",
"\n",
"/*\n",
" * return a copy of an object with only non-object keys\n",
" * we need this to avoid circular references\n",
" * http://stackoverflow.com/a/24161582/3208463\n",
" */\n",
"function simpleKeys (original) {\n",
" return Object.keys(original).reduce(function (obj, key) {\n",
" if (typeof original[key] !== 'object')\n",
" obj[key] = original[key]\n",
" return obj;\n",
" }, {});\n",
"}\n",
"\n",
"mpl.figure.prototype.mouse_event = function(event, name) {\n",
" var canvas_pos = mpl.findpos(event)\n",
"\n",
" if (name === 'button_press')\n",
" {\n",
" this.canvas.focus();\n",
" this.canvas_div.focus();\n",
" }\n",
"\n",
" var x = canvas_pos.x * mpl.ratio;\n",
" var y = canvas_pos.y * mpl.ratio;\n",
"\n",
" this.send_message(name, {x: x, y: y, button: event.button,\n",
" step: event.step,\n",
" guiEvent: simpleKeys(event)});\n",
"\n",
" /* This prevents the web browser from automatically changing to\n",
" * the text insertion cursor when the button is pressed. We want\n",
" * to control all of the cursor setting manually through the\n",
" * 'cursor' event from matplotlib */\n",
" event.preventDefault();\n",
" return false;\n",
"}\n",
"\n",
"mpl.figure.prototype._key_event_extra = function(event, name) {\n",
" // Handle any extra behaviour associated with a key event\n",
"}\n",
"\n",
"mpl.figure.prototype.key_event = function(event, name) {\n",
"\n",
" // Prevent repeat events\n",
" if (name == 'key_press')\n",
" {\n",
" if (event.which === this._key)\n",
" return;\n",
" else\n",
" this._key = event.which;\n",
" }\n",
" if (name == 'key_release')\n",
" this._key = null;\n",
"\n",
" var value = '';\n",
" if (event.ctrlKey && event.which != 17)\n",
" value += \"ctrl+\";\n",
" if (event.altKey && event.which != 18)\n",
" value += \"alt+\";\n",
" if (event.shiftKey && event.which != 16)\n",
" value += \"shift+\";\n",
"\n",
" value += 'k';\n",
" value += event.which.toString();\n",
"\n",
" this._key_event_extra(event, name);\n",
"\n",
" this.send_message(name, {key: value,\n",
" guiEvent: simpleKeys(event)});\n",
" return false;\n",
"}\n",
"\n",
"mpl.figure.prototype.toolbar_button_onclick = function(name) {\n",
" if (name == 'download') {\n",
" this.handle_save(this, null);\n",
" } else {\n",
" this.send_message(\"toolbar_button\", {name: name});\n",
" }\n",
"};\n",
"\n",
"mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n",
" this.message.textContent = tooltip;\n",
"};\n",
"mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
"\n",
"mpl.extensions = [\"eps\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\"];\n",
"\n",
"mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n",
" // Create a \"websocket\"-like object which calls the given IPython comm\n",
" // object with the appropriate methods. Currently this is a non binary\n",
" // socket, so there is still some room for performance tuning.\n",
" var ws = {};\n",
"\n",
" ws.close = function() {\n",
" comm.close()\n",
" };\n",
" ws.send = function(m) {\n",
" //console.log('sending', m);\n",
" comm.send(m);\n",
" };\n",
" // Register the callback with on_msg.\n",
" comm.on_msg(function(msg) {\n",
" //console.log('receiving', msg['content']['data'], msg);\n",
" // Pass the mpl event to the overridden (by mpl) onmessage function.\n",
" ws.onmessage(msg['content']['data'])\n",
" });\n",
" return ws;\n",
"}\n",
"\n",
"mpl.mpl_figure_comm = function(comm, msg) {\n",
" // This is the function which gets called when the mpl process\n",
" // starts-up an IPython Comm through the \"matplotlib\" channel.\n",
"\n",
" var id = msg.content.data.id;\n",
" // Get hold of the div created by the display call when the Comm\n",
" // socket was opened in Python.\n",
" var element = $(\"#\" + id);\n",
" var ws_proxy = comm_websocket_adapter(comm)\n",
"\n",
" function ondownload(figure, format) {\n",
" window.open(figure.imageObj.src);\n",
" }\n",
"\n",
" var fig = new mpl.figure(id, ws_proxy,\n",
" ondownload,\n",
" element.get(0));\n",
"\n",
" // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n",
" // web socket which is closed, not our websocket->open comm proxy.\n",
" ws_proxy.onopen();\n",
"\n",
" fig.parent_element = element.get(0);\n",
" fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n",
" if (!fig.cell_info) {\n",
" console.error(\"Failed to find cell for figure\", id, fig);\n",
" return;\n",
" }\n",
"\n",
" var output_index = fig.cell_info[2]\n",
" var cell = fig.cell_info[0];\n",
"\n",
"};\n",
"\n",
"mpl.figure.prototype.handle_close = function(fig, msg) {\n",
" var width = fig.canvas.width/mpl.ratio\n",
" fig.root.unbind('remove')\n",
"\n",
" // Update the output cell to use the data from the current canvas.\n",
" fig.push_to_output();\n",
" var dataURL = fig.canvas.toDataURL();\n",
" // Re-enable the keyboard manager in IPython - without this line, in FF,\n",
" // the notebook keyboard shortcuts fail.\n",
" IPython.keyboard_manager.enable()\n",
" $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n",
" fig.close_ws(fig, msg);\n",
"}\n",
"\n",
"mpl.figure.prototype.close_ws = function(fig, msg){\n",
" fig.send_message('closing', msg);\n",
" // fig.ws.close()\n",
"}\n",
"\n",
"mpl.figure.prototype.push_to_output = function(remove_interactive) {\n",
" // Turn the data on the canvas into data in the output cell.\n",
" var width = this.canvas.width/mpl.ratio\n",
" var dataURL = this.canvas.toDataURL();\n",
" this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n",
"}\n",
"\n",
"mpl.figure.prototype.updated_canvas_event = function() {\n",
" // Tell IPython that the notebook contents must change.\n",
" IPython.notebook.set_dirty(true);\n",
" this.send_message(\"ack\", {});\n",
" var fig = this;\n",
" // Wait a second, then push the new image to the DOM so\n",
" // that it is saved nicely (might be nice to debounce this).\n",
" setTimeout(function () { fig.push_to_output() }, 1000);\n",
"}\n",
"\n",
"mpl.figure.prototype._init_toolbar = function() {\n",
" var fig = this;\n",
"\n",
" var nav_element = $('<div/>');\n",
" nav_element.attr('style', 'width: 100%');\n",
" this.root.append(nav_element);\n",
"\n",
" // Define a callback function for later on.\n",
" function toolbar_event(event) {\n",
" return fig.toolbar_button_onclick(event['data']);\n",
" }\n",
" function toolbar_mouse_event(event) {\n",
" return fig.toolbar_button_onmouseover(event['data']);\n",
" }\n",
"\n",
" for(var toolbar_ind in mpl.toolbar_items){\n",
" var name = mpl.toolbar_items[toolbar_ind][0];\n",
" var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
" var image = mpl.toolbar_items[toolbar_ind][2];\n",
" var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
"\n",
" if (!name) { continue; };\n",
"\n",
" var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n",
" button.click(method_name, toolbar_event);\n",
" button.mouseover(tooltip, toolbar_mouse_event);\n",
" nav_element.append(button);\n",
" }\n",
"\n",
" // Add the status bar.\n",
" var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n",
" nav_element.append(status_bar);\n",
" this.message = status_bar[0];\n",
"\n",
" // Add the close button to the window.\n",
" var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n",
" var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n",
" button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
" button.mouseover('Stop Interaction', toolbar_mouse_event);\n",
" buttongrp.append(button);\n",
" var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
" titlebar.prepend(buttongrp);\n",
"}\n",
"\n",
"mpl.figure.prototype._root_extra_style = function(el){\n",
" var fig = this\n",
" el.on(\"remove\", function(){\n",
"\tfig.close_ws(fig, {});\n",
" });\n",
"}\n",
"\n",
"mpl.figure.prototype._canvas_extra_style = function(el){\n",
" // this is important to make the div 'focusable\n",
" el.attr('tabindex', 0)\n",
" // reach out to IPython and tell the keyboard manager to turn it's self\n",
" // off when our div gets focus\n",
"\n",
" // location in version 3\n",
" if (IPython.notebook.keyboard_manager) {\n",
" IPython.notebook.keyboard_manager.register_events(el);\n",
" }\n",
" else {\n",
" // location in version 2\n",
" IPython.keyboard_manager.register_events(el);\n",
" }\n",
"\n",
"}\n",
"\n",
"mpl.figure.prototype._key_event_extra = function(event, name) {\n",
" var manager = IPython.notebook.keyboard_manager;\n",
" if (!manager)\n",
" manager = IPython.keyboard_manager;\n",
"\n",
" // Check for shift+enter\n",
" if (event.shiftKey && event.which == 13) {\n",
" this.canvas_div.blur();\n",
" event.shiftKey = false;\n",
" // Send a \"J\" for go to next cell\n",
" event.which = 74;\n",
" event.keyCode = 74;\n",
" manager.command_mode();\n",
" manager.handle_keydown(event);\n",
" }\n",
"}\n",
"\n",
"mpl.figure.prototype.handle_save = function(fig, msg) {\n",
" fig.ondownload(fig, null);\n",
"}\n",
"\n",
"\n",
"mpl.find_output_cell = function(html_output) {\n",
" // Return the cell and output element which can be found *uniquely* in the notebook.\n",
" // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n",
" // IPython event is triggered only after the cells have been serialised, which for\n",
" // our purposes (turning an active figure into a static one), is too late.\n",
" var cells = IPython.notebook.get_cells();\n",
" var ncells = cells.length;\n",
" for (var i=0; i<ncells; i++) {\n",
" var cell = cells[i];\n",
" if (cell.cell_type === 'code'){\n",
" for (var j=0; j<cell.output_area.outputs.length; j++) {\n",
" var data = cell.output_area.outputs[j];\n",
" if (data.data) {\n",
" // IPython >= 3 moved mimebundle to data attribute of output\n",
" data = data.data;\n",
" }\n",
" if (data['text/html'] == html_output) {\n",
" return [cell, data, j];\n",
" }\n",
" }\n",
" }\n",
" }\n",
"}\n",
"\n",
"// Register the function which deals with the matplotlib target/channel.\n",
"// The kernel may be null if the page has been refreshed.\n",
"if (IPython.notebook.kernel != null) {\n",
" IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n",
"}\n"
],
"text/plain": [
"<IPython.core.display.Javascript object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAj0AAAGtCAYAAAD9H8XfAAAgAElEQVR4nOzdd1hT9+LH8RxvlwJBxVmVgIt1xL2vddXZ2qmtvfVWe293f73Wqg3T4MA9UdxAOhVXHbiq1rpbba1VXLgH7oHKhuTz+wNyJJCEBDAhnM/rec7zSJJz8k08z3Pez8kZChARERHJgMLRAyAiIiKyB0YPERERyQKjh4iIiGSB0UNERESywOghIiIiWWD0EBERkSwweoiIiEgWGD1EREQkC4weIiIikgVGDxEREckCo4eIiIhkgdFDREREssDoISIiIllg9BAREZEsMHqIiIhIFhg9REREJAuMHiIiIpIFRg8RERHJAqOHiIiIZIHRQ0RERLLA6CEiIiJZYPQQERGRLDB6iIiISBYYPURERCQLjB4iIiKSBUYPERERyQKjh4iIiGSB0UNERESywOghIiIiWWD0EBERkSwweoiIiEgWGD1EREQkC4weIiIikgVGDxEREckCo4eIiIhkgdFDREREssDoISIiIllg9Fhh7ty5aN26NZ555hm8+eabVs936tQptG3bFtWqVYO7uzs6dOiAXbt2Sc/n5OQgJCQE9evXh5ubG1577TXcvHnzSXwEIiIi2WP0WGH16tX46aef8Pnnn9sUPSkpKTh79ix0Oh30ej1Wr14NpVKJjIwMAMDEiRPRqlUrJCcnIz09HUOHDkWvXr2e1McgIiKSNUaPDTQaTZHoSUpKQr9+/eDh4QFvb2/MnDnT5Lw6nQ5r166FQqHA5cuXAQBt27bFN998I73m4sWLUCgUuHDhwhP7DERERHLF6LFB4ehJS0tDgwYNEBUVhezsbJw5cwbe3t5Ys2aN0Xyenp546qmnoFAoMGzYMOnx1q1bQ6vVSn+fP38eCoUC69ate/IfhoiISGYYPTYoHD3x8fFo1aqV0WumTp2KQYMGFZk3IyMDy5YtQ0xMjPTYmDFj0KJFC1y+fBmPHj3CkCFDIAgCvvvuuyf3IYiIiGSK0WODwtEzZcoUPP3003B3d5cmV1dXdOnSxewyAgICcODAAQB5ITRixAh4enqibt26mD59Otzc3LBp06Yn/lmIiIjkhtFjg8LRs2zZMnTu3NmmZTRt2hTffvutyedOnDiBZ599Fnfv3i3VOImIiKgoRo8VcnJykJGRgdDQULz++uvIyMhAVlYWHj16BJVKhYULFyIjIwO5ublITEzE/v37AQDbtm3DH3/8gZycHKSnp2Py5MmoXLkyzp8/DwC4du0aLl68CL1ej6SkJHTs2BHBwcGO/KhEREQVFqPHChqNBgqFwmjq2rUrAODMmTN49dVXUatWLVStWhXt2rVDQkICgLxT3f38/ODi4oLq1auja9eu+OWXX6Tl/vbbb/D29kblypXh6emJyMhI6PV6R3xEIiKiCo/RQ0RERLLA6CEiIiJZYPQQERGRLDB6iIiISBYYPcVQKBQQBIETJ06cOHGq0JNCUfGToOJ/wlISBMHRQyAiInri5LC9Y/QUQw4rARERkRy2d4yeYshhJSAiIpLD9o7RUww5rARERERy2N5V+OhxcXExmp566ik0a9bM6vnlsBIQkXPT6/XIzs7mxMnipNPpLK5HctjeVfjoKaxZs2aIjIy0+vVyWAmIyHmlp6fj9OnTOHHiBCdOxU5XrlxBTk6OyXVJDts7WUXP77//jn/84x9ITk62eh45rARE5Jz0ej1Onz6N5ORkZGVlOXxPAqfyO2VlZSE1NRXnzp1DUlKSyfs8ymF7J6vo+eijj/Dyyy/bNI8cVgIick7Z2dk4ceIEsrKyHD0UchKZmZk4ceIEsrOzizwnh+2dbKInLS0NSqUSa9eutfi6iIgI2V2siYickyF6TG3AiEyxtM4weiqQuLg41KlTx+xvmebIYSUgIufE6CFbMXpkonPnzlCr1TbPJ4eVgIicE6On9IYOHYqRI0fa/X1VKhU2bNhg9/dl9MjAqVOnIAgCTp8+bfO8clgJiMg5MXpKzxmjR6FQ4NixYyWal9EjA6NHj8YLL7xQonnlsBIQkXOSW/Q8ic/J6HlMDts7WURPachhJSAi5+QM0aNSqTB9+nS0b98erq6ueOGFF3D58mXp+UOHDqFTp05wd3eHn58ffvzxR+k5jUaDV155BR9++CGqVasGtVqNuLg4tG7dGuHh4fDw8EDt2rWxfPly7Nq1C/7+/lAqlfjggw+kC/E9evQIAwYMQM2aNeHu7o4ePXrg1KlT0ntYip4LFy5AoVAgJiYGKpUK1atXx6effiqdLVfcsjMzMxESEgJvb2+4urqiefPm0vMFo+fatWto3rw5wsLCAABZWVkIDg6Gl5cXPDw8MHDgQNy6dQsA0LFjRygUClSuXBkuLi6YMmUKMjIyMGzYMHh4eECpVCIgIAAHDx40+ZkYPWSRHFYCInJOzhI9oiji3LlzyMjIwMsvv4yhQ4cCAO7fvw8PDw9ER0cjOzsbu3fvhpubG/bu3QsgL3r+8Y9/4LvvvkNubi7S0tIQFxeHp556ClFRUcjJycHixYtRtWpVDBw4EHfu3MHVq1dRq1YtrFu3DgDw4MEDxMfHIzU1FWlpafjggw/Qpk0baXzWRM9LL72E+/fvIzk5Gc2bN0dERIRVyx4+fDjat2+Pc+fOQa/XIzExEdeuXZO+lw0bNuD06dNo2LAh5s6dK8331Vdf4cUXX8SNGzeQkZGBjz76CK+88or0fOE9PQsXLkSrVq1w//596dpNBcOyIEYPWSSHlYCInJOpDVinSTvQTLPliU6dJu2weowqlQqLFy+W/l6+fDlEUQQAfP/99wgICDB6/aeffooPP/wQQF70tG7d2uj5uLg41K9fX/o7LS0NCoUC27Ztkx4bNGgQNBqNyfFcuXIFCoUCqampAKyLnj///FN6bOXKlWjUqFGxy9br9ahcuTIOHDhg8rUqlQrh4eGoV68e4uPjpcf1ej1cXFxw9OhR6bFbt24Zjblw9MTGxqJJkybYv39/sbeaYPSQRXJYCYjIOTlL9BQ8dmXDhg1QqVQAgMmTJxe5YOy0adPQr18/AHnR8/rrrxs9b/h5q6DCEVAwZNLS0vDRRx9BpVLBzc0N7u7uUCgUuHjxYpHXFmaInjt37kiPHTp0CM8991yxy7558yYUCgVu375t9nupVasWevToYXQpFcN87u7uRtOzzz4r/TRW+PPm5ORgwoQJCAwMRPXq1TFs2DDcvXvX5PsyesgiOawEROScnOXnLXPR8/3330t7fQw+++wzoz09b775ptHztkbPuHHj0LFjR1y9ehXA470xFy5cKPLaworb02Np2Xq9HlWqVLG4p2fFihXo2bMnBg0aJIWPTqdD5cqVcebMGZPzAXnbJXMHMt+4cQPdu3fHl19+afJ5Rg9ZJIeVgIick7NHz71791C9enUsXLgQOTk52Lt3L5RKJfbs2QOgbKJn9OjR6NGjB9LS0vDgwQMMHTrU5ugZMGAAUlJSkJycjJYtW2LMmDFWLXv48OHo1KkTzp8/b/aYnvT0dPTq1QtvvPGG9P/45ZdfYsCAAVJM3bp1C6tXr5bGVadOHaxZs0b6e8eOHfjrr7+Qk5ODR48eoV+/fmY/E6OHLJLDSkBEzsnZowfIuxF0x44doVQq4evri++++056riyi5/r16+jWrRtcXFzQsGFDaLVam6MnJiYGnp6eqFatGj7++GNkZmZatezMzEyo1Wp4enrC1dUVLVu2lK4XV/B7ycjIQJ8+ffDaa68hKysLmZmZ0Gg0aNSoEVxdXeHt7Y0RI0ZI41q8eDHq1q0Ld3d3TJs2DT/++CN8fX3h4uKCGjVqYPDgwbh//77Jz8ToIYvksBIQkXNyhuhxZoboefTokaOHUmYYPWSRHFYCInJOjJ4ni9FT8TB6iiGHlYCInBOj58li9FQ8jJ5iyGElICLnxOghWzF6yCI5rARE5JwYPWQrRg9ZJIeVgIicE6OHbMXoIYvksBIQkXNi9JCtGD1kkRxWAiJyToweshWjhyySw0pARM6J0UO2YvSQRXJYCYjIOTl79ERGRmLIkCF2fU9TV3m2h65du2Lu3Ll2f9/CGD1kkRxWAiJyTs4ePdYofBuL0nLG6CnL74DRQxbJYSUgIudUkaPHcNdxRg+jpywxeoohh5WAiJxTeY+eGTNmoEePHkaPLV26VLphaOEAUSgUiI6Ohr+/P5555hm89tprEAQBzz33HFxcXPD555+bvEryyJEjMXToUOnvd999F3Xr1oWbmxvatWuHAwcOSM8VFz0KhQLz5s1D06ZN4e7ujrfeegspKSlWLVun02HmzJlo2rQpXF1d4ePjg927dwMwjp6HDx+iZ8+eGDZsGHJycqDX6zFjxgw0adIEVatWRe/evXH+/HkAwODBg4t8B3q9HqNGjULt2rXh5uaGJk2aWB1FjB6ySA4rARE5p/IePdevX8fTTz+Nq1evSo9169YNs2fPBmA6ev75z3/i2rVryMjIgF6vL7KXw5roiYuLQ0pKCrKzsxEREYF69eohKyvL5HsWplAo0LZtWyQnJ+P+/fvo1asXhg0bZtWyZ82ahSZNmuDIkSPQ6/U4d+4czpw5A+Bx9Ny4cQMtW7bE119/LS0zKioKzZs3x7lz55CTk4Nx48ahRYsW0Ol0AIru6dmyZQvq16+P5ORkAMClS5eku7cXh9FDFslhJSAi52RyAzZTBCY1eLLTTNHqMfbt2xdTp04FAFy+fBlPP/00bt68CcB09BTeY1GS6CkoNzcXzz77LBITE02+Z2EKhQKrV6+W/j506BCeeeYZKUAsLdvHxwfLli0zudyuXbti+PDhaNy4MWbOnGn0nJ+fH9avXy/9rdPp4OrqiuPHj5v8Dn755RfUqFEDP//8s83By+ghi+SwEhCRc3KG6Pnhhx8QGBgIAJg0aRL69+8vPWcqev7++2+j+W2NntzcXAQFBaFRo0Zwc3ODu7s7BEHAr7/+avI9C1MoFPjjjz+kv2/fvg2FQoEbN24Uu+zKlSvj0KFDJpfbtWtX1KpVC35+fkhNTTV6rnLlytLyDNNzzz2HrVu3mvwOACA6Ohrt2rWDUqnEG2+8gYsXL5r9TAUxesgiOawEROScyvvPWwCQlpYGNzc3HD16FAEBAUZ7QkxFz7Fjx4zm9/b2NtrgF4wQg3/9619S9Hz77bdo1KgRzpw5A71eL+2N2blzp8n3LMzSnp7ilu3r62txT8/s2bMxZMgQdOnSxSjafHx8sG3bNrNjKvwdFJSSkoJ33nkHr732mtn5C2L0kEVyWAmIyDk5Q/QAwNChQ9G7d2+4ubkhPT1detya6OnQoUORn4M8PT0xceJE6HQ67Ny5E25ublL0REdHw8/PD/fu3UNGRgbUajUqVapkU/S0b98e165dw/3799GnTx+89957Vi171qxZ8PHxwdGjR6HX63H+/Pkix/TodDq899576Ny5Mx4+fAgAmD17Njp06ICkpCQAeSGzcuVK6Qy2wt/BwYMHsW/fPmRlZSErKwsffPCB1WekMXrIIjmsBETknJwlerZv3w6FQoH333/f6HFromf9+vXw8vJC1apV8cUXXwAAduzYgSZNmsDV1RVvvfUWPv74Yyl6UlNT8dprr8HFxQX169fHvHnz4OHhYVP0zJ07F02bNoVSqcTAgQNx//59q5at0+kwbdo0NGrUCC4uLvD19cWePXsAGJ+9pdPpMGzYMHTs2BEPHjyATqdDVFQUfH194erqivr162PIkCHIzc01+R1s374dzZs3h6urK6pVq4b+/fvj0qVLVv1fMHrIIjmsBETknJwlepyJqfCqSBg9ZJEcVgIick6MnrLH6KnYGD3FkMNKQETOidFT9hg9FRujpxhyWAmIyDkxeshWjB6ySA4rARE5J0YP2YrRQxbJYSUgIufE6CFbMXrIIjmsBETknBg9ZCtGD1kkh5WAiJwTo4dsxeghi+SwEhCRc2L0kK0YPTKxbt06NG/eHFWqVEHdunWxYMECq+aTw0pARM7JGaLn1q1b6N69O9zc3DB48GBHDweA5dPSIyMjMWTIEDuPqHRsOc2e0SMDmzdvRr169bBz507k5ubi3r17OHnypFXzymElICLn5AzRM378ePTt2xc6nc7RQ5GU1bV4TN3x3REYPdaTRfS0adMGixYtKtG8clgJiMg5OUP0/Oc//8HIkSNLNK/hTuZlzZmix3DTUUsYPdar8NGTmpoKQRAwbdo0+Pj4oHbt2njrrbdw/fp1q+aXw0pARM6pvEfP4MGD8dRTT+Hpp5+Gi4sLtFot9Ho9pk+fjoYNG6JatWro06cPzp07J82jUqkwadIktG3bFs899xxOnjyJrl27Ijg4GD169ECVKlXQvn17JCcnIywsDB4eHqhfvz7WrVsnLWPr1q1o1aoVlEol6tatixEjRhjFg6VIMHUT1MWLFyMgIABubm4YMGAAUlJSAAB169aFQqGAi4sLXFxcsHz5cgDAli1b0Lp1a7i7u6N58+bYtm2btLz79+9j0KBBcHd3R9OmTTFv3jwoFI83xV27doVarUbPnj1RpUoVbN68uVSfpzBGTwV35coVKBQKBAYG4uLFi3j06BGGDBmCF1980eTrIyIiIAiCNBVcGYmIypPyHj0AMHToUKM9Pd988w3q16+PxMREZGZm4uuvv4afn5+0EVepVPD19UVSUhJycnKQnZ2Nrl27okGDBkhMTERGRgZ69OiBRo0aISoqCjk5OVi8eDFq1aolLWP37t04cuQIdDodTp06BW9vb8ybN08ag63R061bN9y4cQMpKSlo3bo1NBoNANN7eo4cOYJq1arh119/hU6nw9atW6FUKnH16lUAwJAhQ9C/f3+kpKTg2rVraN++fZHoqV27Ng4dOgSdToeMjIxSfZ7CGD0V3P3796FQKLB06VLpsQsXLkAQBKSmphY7vxxWAiJyTqY2YL1X9kbHHzs+0an3yt5Wj7Fw9Lz44ouYPn269HdWVhbc3d2xb98+AHnRM3fuXKNldO3aFaGhodLf0dHRqF+/vvR3WloaFAoFLly4YHIM48ePx8CBA6W/bY2en3/+Wfp78uTJePnllwGYjp5PP/0UX331ldEy+/fvj+joaOTm5uLpp5/G4cOHpefWrFlTJHqK+znQls9TGKNHBjw9PRETEyP9bYgea36HlcNKQETOyRmjx9fXF6tWrTJ6TUBAAOLj4wHkRU/Bn6qAvBAoGEJxcXFo3bq10WsKbvh/++03dO/eHTVr1oRSqUTlypXRrVs3k68tzFT0FHzt3Llz0bVrVwCmo6dfv36oXLky3N3dpalKlSoIDQ3FjRs3oFAocOfOHen1f/zxR5HomTNnjtGYSvN5CmP0yMCECRPQvHlzXL16Fenp6Rg6dKjZn7cKk8NKQETOyRl/3iq8pyc7OxtVq1Y12tOzYcMGo2XYGj0NGzbEpEmTkJaWBiBvz4ghVAq/tjBboufSpUtFoufjjz822itVkLV7egrv6SrN5ymM0SMDubm5+Oqrr+Dh4QEPDw8MHDiQBzITkdNzxujRarXw9PTE8ePHkZmZiaCgIPj6+hod01Pa6KlZsyYWLlwIADh69ChUKtUTiZ709HRUqlTJKGL+/PNP1K5dG7/++ityc3ORkZGBXbt24fz58wCAd999Fy+//DIePHiA69evo2PHjsVGT2k+T2GMHrJIDisBETknZ4wevV6PKVOmwNvbG1WrVkXv3r1x5swZ6fmyiJ41a9ZApVLBxcUFPXv2RFBQ0BOJHgAYO3YsatasCXd3d+knup9//hkdOnRA1apVUaNGDfTt21f6jPfu3cObb74pnb01c+ZMPPPMM2Y/a2k/T2GMHrJIDisBETknZ4gesiw+Ph6NGze22/sxesgiOawEROScGD3OJykpCYcOHYJer8eZM2fQrFkzBAcH2+39GT1kkRxWAiJyTowe5/PXX3/Bx8cHVapUwfPPP4/PP/9cOkDZHhg9ZJEcVgIick6MHrIVo4csksNKQETOidFDtmL0kEVyWAmIyDkxeshWjB6ySA4rARE5J8MGLCsry9FDISeRmZnJ6CHz5LASEJFz0uv1OH36NJKTk5GVlYXs7GxOnExOWVlZSE1Nxblz55CUlAS9Xl9kfZLD9o7RUww5rARE5LzS09Nx+vRpnDhxghOnYqcrV65IV78uTA7bO0ZPMeSwEhCRc9Pr9Q7fk8Cp/E86nc7ieiSH7R2jpxhyWAmIiIjksL1j9BRDDisBERGRHLZ3jJ5iyGElICIiksP2jtFTDDmsBERERHLY3jF6iiGHlYCIiEgO2ztGTzHksBIQERHJYXvH6CmGHFYCIiIiOWzvGD3FkMNKQEREJIftHaOnGHJYCYiIiOSwvWP0FEMOKwEREZEctneMnmLIYSUgIiKSw/aO0VMMOawEREREctjeMXqKIYeVgIiISA7bO0ZPMeSwEhAREclhe8foKYYcVgIiIiI5bO8YPcWQw0pAREQkh+0do6cYclgJiIiI5LC9Y/QUQw4rARERkRy2d4yeYshhJSAiIpLD9o7RUww5rARERERy2N4xeoohh5WAiIhIDts7Rk8x5LASEBERyWF7x+gphhxWAiIiIjls7xg9xZDDSkBERCSH7V2Fj56hQ4fi6aefhouLizSdPn3a6vnlsBIQERHJYXsni+gZOXJkieeXw0pAREQkh+0do6cYclgJiIiI5LC9k0X0VKtWDdWqVUNAQACio6Ntml8OKwEREZEctncVPnr+/PNP3Lp1C7m5udi9ezdq164NrVZr9vUREREQBEGaFIoK/xURERExeiqiiRMn4qWXXrL69XJYCYiIiOSwvZNd9EyePBn9+/e3+vVyWAmIiIjksL2r8NETHx+Phw8fQq/XY//+/ahTpw6WLl1q9fxyWAmIiIjksL2r8NHTpUsXuLu7w9XVFX5+foiKirJpfltWgnupWdCsS8SlO2m2DpOIiMihGD1k00rwVfwRqNQJ6D5t55MbEBER0RPA6CGbVoJ3Fh+ASp0A76CEJzgiIiKissfoIUYPERHJAqPHjtq2bWvV1KVLF7uOi9FDRERywOixo+eeew5ardbiFBcXB6VSaddxCYKA7FwdorYn4eytRxZfO3gRo4eIiJwTo8eO2rVrZ9XrOnXq9IRHYkwQBHyz/wJU6gQ0Dtlo8bWMHiIiclaMHoIgCJi06SRU6gSo1JZjhj9vERGRs2L0lAM6nQ6JiYn44YcfMHr0aLu/vyAImLjpBKOHiIgqNEaPHSQkJKBTp07o1asXdu/ejV27diEqKgr//e9/0bp1a1SuXBmVKlVC9erV0adPH7uPj9FDRERywOixgwYNGuDevXu4fv06BEHAs88+i8DAQLzzzjuIjIzE2rVr4eHhgZs3bzpkfIIgYOJG66KHx/QQEZGzYvTYwUsvvYQRI0ZgxIgReP755+Hq6ooJEyYgIyNDek2dOnUcGj2RjB4iIqrgGD12kJmZiVWrVuHvv/9GZmYmIiMjoVQq0aBBA3z33XfQ6/UOj54JCccZPUREVKExehzk1q1b+OSTT/DUU0+hdevWcHNzc2j0jN/A6CEiooqN0eNgx48fR//+/SEIAoYOHYoHDx7YfQyCIGAco4eIiCo4Ro+dPXpk+orH27dvR8uWLVG/fn07j4jRQ0RE8sDosbOqVauiV69eiIqKwoULF4ye0+v1iIuLs/uYBEHA2PXWRU/hU9bP305F/MHL0Ov19hgqERFRiTF67CwzMxMbN27EJ598gvr160MURQQHB2P//v0OG5MgCIhYn1iiPT2GefYk3bbHUImIiEqM0eNghw8fxtixY9GmTRvUrl0bw4YNw+rVq5Gammq3MZRF9MQfumyPoRIREZUYo6ccSU5OxuLFizFgwABMmzbNbu8rCAI060oXPSsYPUREVM4xeqhMomflH1fsMVQiIqISY/Q4SExMDI4dOwYAOHr0KFq2bIm2bdtKj9lT4ej56NtD2Hj0msnXmoueVYweIiIq5xg9DuLt7Y1bt24BAPr27YvRo0dj7Nix6Natm93HIggCxqw9JgWMpT0+5qJn9Z+MHiIiKt8YPQ7i5uYGAMjIyIBSqURmZiZyc3NRrVo1u49FEASEM3qIiKiCY/Q4iKenJ5KSkrBmzRpp705GRgbc3d3tPhZL0ZOWlYP/ag9h56m8W2SYi541hxk9RERUvjF6HGTatGmoUqUKqlSpgpUrVwIAtm3bhg4dOth9LIIgIOwn09ETs+e80d/mouenw1ftPm4iIiJbMHrsrOBtKE6fPo1z584Z/e2oA5lDfzpqMnrm7zxrVfSs/YvRQ0RE5Rujx84s3YbCUSxFT/TOM4weIiKqEBg9dlZeb0MRsqZ00bPuSLLDxk9ERGQNRo+DlZfbUASXMnrWF4qe6VtPIW7veZPvl5Ke/QQ/DRERkWmMnnLEkbehCFptOnrm/VKy6DF32vuWxOtQqRMw75czT/hTERERGWP0UH70/F2q6Nnwt3XR8+6S36y63QUREVFZY/Q4SLdu3dC9e/ciU9++ffHRRx9h+/btdhuLIAhQryqb6EnNzEF2rs5s2AxZyughIiLHYPQ4SFBQEGrVqoXhw4djxowZGD58OGrVqoVRo0bhs88+g1KpxIIFC+wyFnPR88vJm0UiyFz0JPx9Dbk6PVTqBLSZsM1s2Pw75ndGDxEROQSjx0G6d++OgwcPGj126NAh6erMO3bsgI+Pj13GIggCvl5ZNHpM7fkxFz0bj15DelZusbeyeI/RQ0REDsLocRClUomcnByjx3JycqR7cun1eri4uNi83Nu3b8PDwwOtW7e2eh5BEDB65ZFSRc8mK6NnaCyjh4iIHIPR4yAdO3bE+PHjodfrAeRFzoQJE9C+fXsAwJUrV1CvXj2bl/vuu++ie/fudo+ezcdMR092rs7ovYYxeoiIyEEYPQ5y/PhxNGrUCDVq1EBgYCBq1KiBRo0aITExEQCwZ88efPPNNzYtc+vWrejatSvi4uJsjniy5mUAACAASURBVJ5RK55M9IxeecTovd6PO8joISIih2D0OIBOp8Pp06eRk5ODPXv2ID4+Hnv27Cnyc5ct0tLS4OPjgxMnTpQoekaWOnqum4welToBNx9kSO/1H0YPERE5CKPHQapUqQKdTlf8C600cuRIhISEAECx0RMREQFBEKRJoVDYHD0NgzcCeBw9WxLNR49KnYAT1x7gvZjf0Xr8z4weIiJyCEaPg7Rr187oDuulcfjwYTRp0gTp6ekAio+ewgRBwFfxtu/pidlzXnpua+J1pGXlFLsMSwc5ExERPUmMHgeZPHky/P39MX/+fGzYsAEbN26UJlvNmjULzz33HDw8PODh4QFXV1c89dRT8PDwwM2bN4udXxAEjIj/y6boKTxtTbyO1ExGDxERlV+MHgfx8vIyOXl7e9u8rEePHuHKlSvSNHPmTAQGBuLKlStW/YRWFtHz8/EbeMToISKicozRUwGV5OetEctLFz3bjt/Aw4xsRg8REZVbjB6CIAj40sroeXvRfpPPbT9xAw8YPUREVI4xehxEp9Nh9uzZaNeunfST1o4dO2y+Nk9ZKIvo2XHyBsZvOM7oISKicovR4yAhISFo3749Vq5cCXd3dwDA+fPn0aJFC7uPRRAEDF922KpIMffcjpM3bAoeRg8REdkbo8dBGjRogFu3bgEAqlWrBiDvVhRVq1a1+1gEQcD/rIiec7cemX2u8B3ZGT1ERFTeMHocpHbt2sjKygLwOHpSU1NLdL+t0hIEAV/8WHz0HE9+YD56TjF6iIiofGP0OMjgwYMRHBwM4HH0aDQavPfee3YfiyAI+D8roufENfPRs5PRQ0RE5Ryjx0Fu3LiBdu3aoXbt2njqqafQoEEDtGvXzqqLCZY1QRDw+Q9/Fhspp64/NPvcr6dvMXqIiKhcY/Q4kF6vx8GDB7FixQr89ttvZXovLltYGz2nb5Sf6HmQkV1Gn56IiOSC0UMQBAGfWRE9Z26aj55ddoyeaVtOQaVOwJ6k22X4LRARUUXH6LGjPn36WPW6/v37P+GRGBMEAZ99b030mD97a3eS/aLHMP//lh0uw2+BiIgqOkaPHVWuXBmbNm0yurmoqclw3R57EQTBqkixdMr6nqTbdo+e4YweIiKyAaPHjlQqldkbjRacfHx87DouU9HzdchI/BzWDd7q9dJj52+nlqvo+XL5X2X4LRARUUXH6CGT0QONEtAoMShomvTYxTvmo2fvGftHz4h4Rg8REVmP0UNG0TM7dBg+Cw6Touft4KnSc5fupJkNmH0OiJ6v4o+U4bdAREQVHaOHpOhpo/5eih1T0WNpT48jomfkCkYPERFZj9FDUvR0UH9TJHoGB0+RIuOPi/fK1c9boxg9RERkA0YPSdHTvpjosTQ5InpGr2T0EBGR9Rg9DtKuXTssWLAA9+/fd/RQpOhpp/7W4s9bliZHnL3F6CEiIlswehxkyZIl6NKlC6pUqYK3334bW7ZsgV6vd8hYDNHTWjMZ/xfdEH9NrOHw6EnLyjH7nGF+9aq/y/qrICKiCozR42Bnz55FeHg4vL29Ua9ePYSEhOD06dN2HYMhegLn94WoFSFqRRyP9AA0SmSOqW50rZ4nGT0Z2bl4Z/EBDIv9HSp1AuIPXTY5XsP8QasZPUREZD1GTzmxf/9+tGjRApUqVYKLiwt69OiBo0eP2uW9DdHTbGkbKXq+jG4o7e3pFzSvULBswKiQUXghaKn0WElvQ1Fw71b8octGz3eatMPkeB9Hj32+HyIiqhgYPQ50+fJlREZGwsfHB56enggNDcW5c+eQmpqKCRMmoFGjRnYZhyAI8AqJh6gV8cpiH7wQ44fmcQF4FOEOaJR4KSjKKEb+HRwpBVFpoiclPRuiZgtmbD0FAPjx90tGz3eevAO/nbuDy3fTjMZreD54DaOHiIisx+hxkB49eqBKlSp46623sHnz5iLH8+j1eri6utplLIIgoGHEPIhaEaPmeWPUPG+IWhG/TaoJaJQYEDTHKEZCQr4sEj0luct6p0k7jPb6FI6epqGbTP4UJo2D0UNERDZg9DjInDlzcPfuXYuv0el0dhmLIAhoPGkMRK2I+bPq49sZ9SBqRSyeWR/QKPFa0CzsjHgR0CjxcfCYMouewj91LSsUPeaO/zE8FvoTo4eIiKzH6HGQL774wuTjw4cPt/NI8laCpjM+gagVsXlqHRyZWAOiVsT/5R/XkxD2otFp7KEhw4tEz68OiJ6wn47Z/bsiIiLnxehxEDc3N5OPV69e3c4jyVsJfOcOgqgVcTLSA1kaJVrGBeCFGD/oC123x1HR8+2Bi9J4DY+NWcvoISIi6zF67Gzjxo3YuHEjqlSpgk2bNkl/b9y4EbNnz4a3t7fdxyQIAvwWvghRK+LB2LyDl/+1sAlErYgL46tbFT0dJm5/otFTcG+P4W/NukS7f1dEROS8GD125uXlBS8vL1SqVEn6t5eXFxo2bIiOHTtiw4YNdh+TIAgIiGmNjjH+UszMndUAolaEdka9ItEzPuTTItGjUiegsXotRoeMRCv1D/gu9HXMDHkfnYNirbqVBQAsP8joISKiJ4fR4yDvvPOOo4cgUSgEiFoRbyxqKsVMYqQHRK2I9xY2LhI9BaeCUTIx5GNAo8TR8MAir2un/tZi0Jy5+YjRQ0RETxSjx462bt0q/bvgz1qFJ3szRM+HCxpJkaLXKNFzqS8C4wJwb2xVJEytg55LffH5/EZYO60ucgtEzzvBk7EprCc2hfU0G0dFL3BoPL29aL/N0ROxntFDRETWY/TYUUBAgPTvgj9tFZwccUyPIXpGz/M2/hkrSgVRK+K/CxqjeVyAdLVmUSvi3YVNcHF8dfQPmmdxT5Bh6hM0H/8LDsLkkI9MBs2ghfsRf/CyTdEzdv1xu39XRETkvBg9BIWQFz0T56iMQuW3STWNQmfttLrYP6mmdJDzCzF+uGziQGdTU++g+dK/G6vXlkn0jN/A6CEiIusxeggKQSFdmLBgqOg0SsyY7YlBi5pi7+Ra0uM5BfYC9Vnii+Tx1YqNnheDFkr/bqpeUybRM2nTScd9aURE5HQYPQ4SExODY8fyrjNz9OhRtGzZEm3btpUesydD9Cyb/rwUJkfCW1iMGJ1Gia/zb1fRZ4kvzkzwwL2xVXFwUk3snFwbl8ZXN7rGT4+gRdK/fdSrS3xaO/A4eqbn37OLiIjIGoweB/H29satW7cAAH379sXo0aMxduxYdOvWze5jMUTP5ql1pDBZHDq42L03OQXCx9T0+uKm+D3//l0Fo8dfvbJMomfWttN2/66IiMh5MXocxHBF5oyMDCiVSmRmZiI3NxfVqlWzeVnBwcHw9PSEm5sb6tati+HDhyMrK8vq+Q3RY7jBKDRKjAn5wqpjdXI0SiyaWR/vLGyCgYuaYvQ8b4yPUmHQoqYQtSJaxgXgt0k18UrQbGmeZur4EkXP1yv/RtKNh9Lfc3ck2fxdERGRfDF6HMTT0xNJSUlYs2aNtHcnIyMD7u7uNi/r1KlTePjwIQDg9u3b6NatGyIjI62e3xA9pyZ44I2gGfBXr8SokFFWRY+5Sa9RYvn05yFqRbSL9cexyBrScx3VWqjUCfgkOBxjQz63KXxajftZ+vf8nWdt/q6IiEi+GD0OMm3aNFSpUgVVqlTBypUrAQDbtm1Dhw4dSrXc27dvo0ePHvjPf/5j9TyG6Lk+rhpeCoqCSp1Q6ugxTEtm1oeoFfHPGD+cm/D4TC+VeoPFs7msmRbvOleq74qIiOSF0eNAp0+fxrlz54z+LumBzPPnz4erqysUCgU8PDzw559/Wj2vIXpSI9zRNyi6TKNHr1Fi+mxPiFoR3Zf64s+JNaXQsXQ2lzXTol3c00NERNZj9DjQsmXL0KdPHwQEBKBPnz5YtmxZqZd56tQphIeHIzk52exrIiIiIAiCNCkEBQLjAqDPv55OWUaPIXwMp7g3jwtA7Mx66KCOk573Va8qUfSo1AnQ6/Wl/s6IiEgeGD0OMnv2bNSrVw9Tp07FqlWrMHXqVDRo0ACzZs0q9bJXrFiBPn36WP16haBApxg/QKNEr6AFFqNnYND0EsfPuml10TbWH6JWxIIC1wQS1StKHD1nbz0q9fdFRETywOhxkMaNGyMx0fjeUcePH0ejRo1Kvewff/wRDRs2tPr1CkGBPkt8AY0SPYMWWowelTqhVHt9EiNroEN++HyXfwf3QPXyEkfPqesPS/Vd5eTq8Mq8vZi2hdf8ISKq6Bg9DlK9enVkZ2cbPZaVlVWiU9ajo6Nx9+5d6PV6JCYmIiAgAJ988onV8ysEBd7Mv8N6j6BFTzR6oFHi8MQaaJMfPrsm10Ir9Q8ljp6T1x/Y/H0VdLrAKfAAcOthJuIPXkZ2rq5UyyUiovKH0eMgffr0QWhoKHJzcwEAOp0O4eHh6N27t83L6tevHzw8PFClShV4eXlh5MiRSEtLs3p+haDA0AWNAY0S3YKWQKVOQDN1PJLHeGFCyCdmo2dbWNcSh8/2KbWlg5tbB8WWOHqOJ5dt9PSa+av09+W71n+HRERU/jF6HOTs2bPw9fWFh4cHAgMD4eHhAR8fH5w5c8buY1EICvxfdENAo8QLQUuLhIW56PFSry/VHp/R+VdzbjX10xJHz7GrKaX67IWjp/Dyr6dklMVXTERE5QCjx4Fyc3Oxd+9exMfHY9++fcjJyXHIOBSCAsFzvWHu9HFDpBwNDzT6W6VOQAf1NyWOnsvjq6FFXACaxbSCV0jJrtJ85PL9Un324qKHZ4gREVUcjB6CQlAgco4KaWNqmtzoh4X8D2vC+kGl3lAkeoruCdqA2NBBVofPpDl5p7J/OdcHKvV6m6Pnj4t3S/XZrYmeXB2jh4ioImD0OMjVq1fx/vvvIzAwEN7e3kaTvSkEBaJmNcCDMbWtCo3vQl/Hd6Gvm/35y0u9HuvDelsVPQ/GuqP7Ul+IWhEvzO2NhqHfS3GVN22wOJYD5+6U6rNbEz1ZOTyomYioImD0OEi3bt0wYMAAxMfHIyEhwWiyN4WgQNyMenhoRfQMWrAfaw5fsXjMj6nHLU2nIj3Qb4kPRK2IwLgAfDQ3EE3CYvGv4EnIHOOBfwVPMjue3Um3SvXZrYmejOzcsviaiYjIwRg9DuLm5mbTndCfJIWgwMrpdfFoTC2roufindQyjR5olEiNcMfM2Q3wQoxf3sHNsQH4cEEjfDy/EX6Y6oUPgseYPN7o19NlFz3zd541+ZnTshxzrBUREZUtRo+DdOjQARcvXnT0MADkRc/mqXWQPqZGsdHz5vx9uHQnrcTR80VwsMX4SYtwx8JZ9aUrNxumJTPrY37ou0XG88upm6X67AWjx9z0MCO7+AUREVG5x+hxkBkzZiAwMBAxMTHYuHGj0WRvCkGBXZNrIWdMVaui5/Jd09ETHzqg2OhRqTdgduiwYvf8PIpwR9IED+ydXAttYv3RIi4A68bnnT3WJSgG3vkHPe84eQOTNp1E6E9HS/TZrYmelDRGDxFRRcDocRAvLy+Tk6MOZD40qWaRPTWmpq/ijxSJnleDZmNUyKgir00dk7fMR2NqARolDoe3gkqdgHEhn9r009eP05+HqBXxyiJ/vBc8HtAosTqsP1TqBGw7fsPomBxbWRM991LLx8+QRERUOowegkJQ4ESkh8XoOXY1BR99ewh3HmUWiR5zUxP1T/BVr8KpcH9Ao8SmsJ5QqRPQNWiJTdGj1ygxZGETiFoRQZN7GP2UtjXx+hOPntuPMsv4Gy87Px2+ir1nbiNXp8e+M7eRnsWDromIzGH0EBSCAhfHV7cYPQVduWdd9BimLkEx+CH0VbRRfy891ky9HL+G/dPq8PlrYg2IWhGvLW4KfYHo2XzsyUfPzQfl86rMWTk6aYxxe89DpU7AZ9//6ehhERGVW4weO9q6dav078LH8Tj6mJ5b46o+segxN2238d5dby/K29tzLLKGNNZ1R5KfePSU11tRpGXlSGMcFvt7qb4HIiI5YPTYUUBAgPTv8nZMT1qEO2aFDrMqeq7eTy+T6Pk5rJtN0bMs/9ieiCiVFD0DF+wr1cb+1PXio+fq/fQi8z3KzMHRK6W771dppWY+jp4hS39j9BARFYPRQ1AICuiKOYi5oGQro6dJ6CaLzy8OHWxV7HweHApolHgY4Y62sf5oG+uP9Ah3qNQJaDF2q7S8ktwj6+T1B8V+DlN3Wzfcjf3PS/dK/L2X1oOMbGmM7yw+AJU6AV5BjB4iInMYPQ6m1+uRlpZmNNmbQlAU+Wlr39nb6DNrV6mip+BPT6Ymf/VKzA4dhveDx1mMnkFB06R/G+7MvmNKbajUG9BMs0VaXknukXU8+XH0DA6egveDx+XFQ4H7gF24nVpkPsNz3+y/UNKvvdTup2VJ4xi0cD9U6gQ0DrH/z6NERM6C0eMgv//+O1q1aoWnn34alSpVQqVKlSAIAipVqmT3sZiKHgDSwbGFo+dainXRs/avq0UeW7rnfJHHegQtshg9XYJipJuYbp5aB6JWhCbKC1NCPoBYIHpycm2/R1Zicsrjz6hRImWsO5ZG5N03zHDg9b4zt4vsRSoP0XP7UaY0jjfm5/3M5xO2yWHjISIq7xg9DuLj44Pw8HCcOHECFy9eNJrszdbouZ6SUeLoAYre36p30HyzwWO4/s+okFGARonbY6tKZ3FBo0TfMVppOSW5MeikTSel+XdProX2+RdCPBHpgeCQEdJz3kEJOHvrkTSf4fFvHRg9Nx88/n94dd7evL1n4ZsdNh4iovKO0eMgVatWLdExKE+Co6OnZ9BCk8EzNuRz6TUDg6ZLj/dZ4otmcQF4GOGO3DHu0mtKcmNQlToBvupV+DRsBDrn3/dL1IoYNc+7yHcyZu0xo/lU6gR8e8BxtxIpuMftpajdUKkT0EyzxWHjISIq7xg9DvLJJ59g3bp1jh4GANuj58YD66Lnt3N3rIoelXqDFDTvBE/Gm0HToQ75yug1TdVrihzXs7/QVaRtvTCf4To3P4a+ivFRKunMsA75B0tnRLgbjSG8nEVPwYtEFjz+ineFJyIyjdHjIPfu3UOTJk3QpUsXDBo0yGiyN1uj56aV0aPT6a2Mnsf36eofNM/s8n4O6w5olIidWQ+iVsR3M+oZjTs107a7od/JPybmjMYL7WL90SbWHylj3aWo+mVK7XIdPQXvdm84m8wQQEREVBSjx0H69++PgIAAfP3114iIiDCa7M1c9MSWInpGrzwCoGjgmHrMOHrmWlwuNEr8MqU2RK2I8QWu16NSF70bemJyCkbE/4X7aabvnXXhdl40aKflRY5mrhegUWLttLoQtSJmzPY0+fPWowLXx3Fk9Jy79UgaR/fpO4t8z0REZIzR4yAuLi548OCBo4cB4HH0jFpxxLroeVh89Ixa8eSi59yE6hC1Iv67oLFR9DwoED0Fx1hwD01BhgsTjpzbGKJWxN7JeTdGPVtg+R3U3xgtZ+qWk0bj+c6B0XPmpvkLKxIRUVGMHgdp27YtkpOTHT0MAIAgKLA9rCvUq/62KnpuPcy0GCaliZ6XgqKKjZ5sjRLN4wLQc6mvUfSkpD2Onv8tOyw9/vkPpu9HZbgwYa8lvgiMC8CjCHdAo0SuRom2sf7oGOOPkJD/GUVP4fEMX3YYKenZJpf/pFm6sOKvp285ZExEROUZo8dBpk2bhlatWiEmJsbh994SBAV6Bi1E8JqjZRY9I01Ez5ztSUUeM0ybwnoCGiV81auKjR5olHhpiQ9ErYi0Agcb30t9/DPWv2Me34vK3E04jyc/gFfo9xC1IgYuamp05pjhru5fjfnQYvSo1HnXyHGEgtcY4t4eIqLiMXocpDzde0sQFOgWtAShPxlHT8we09FT8KJ4KnUCfMM2F9ngzvvlDIDHgTN96ylpftMb6Q1oqF5XbEz9K3hS3q0p5jeCqBVxItJDeu7Oo0zpPQrei+qlqN0mP/exqyloFBkJUSsico7KKHpC5nrlnSE28fHBzOaixxGBkZ6Vi7k7khg9REQ2YPQQBEGBF4KWGm3UAWDN4SsmN6B3CkXPvdQso7+X7D6HzJy806atjx7rpy5BMZg6xxOiVsSmqXWkx289NB095gJg3i9n0HTmh9JyDMGTM6Yq5s+qD1ErYtW0uuUyer5c/lex3xMRERlj9BAEQYEuQTHQrEs02mDm5OoQufEEDhe6qWbh6AGAHgXOHiroSURPI/VarJied4bVgln1pcfXHUnGoQt3AQDvLik+elTqBPgt7AVRK+L6uGqARoleQQvgr16JtyYNgagVMXt2A/jl/+QW9lPpoic7V4ewn47hYP4YS6Nh8EZGDxGRjRg9DtKtWzd0797d5GRvgqBA56BYjNtw3KoN5t1Ce3YAYO+Z23aLHpU6AQcm1YSoFRE8t6HJjf2/lhywGAA3HmRAFbQGAXHNpAOiCx4U7R0RLV2ZeUrIB1CpE9B2wrZSBcaKQ5el10/ceKLEV+S29jpJRERkjNHjIPPmzTOaQkND0aBBA4SHh9t9LIKgQCd1HCYklDx6jl1NMTnvk4qet6PiIGpFvLmgWYmiJ2p7Erw18yFqRXwR3bBI9HiFLIOoFTF4URNoQ98sk8BYsvuc0Tynrj+0ar7CWo77mdFDRFQCjJ5y5MiRI+jTp4/d31cQFOio1mLixhNWbTBN/bxV8PTpgp5U9Gi3H0SLuAB0WSqa3Ni/s9h89GTm5EKlTkDjSWEQtSLmz6oPaJT4MFhTYJ4NaBPrj84xflgY+k6ZBMbiXcbR88fFkv3MZe13RERExhg95Uhubi7c3Nzs/r6CoEB79TeYvPmkVRvMwmdvAYBer8dX8Uew4tBlo9c+iehZfvASVuw5hn75p617B60uMp7Bi8xHj+FUfJ9Z70PUitg5uXaRK1Kr1Anos7gZRK2IOeFvlUlgLNp11mie388zeoiI7InR4yDHjx83mg4ePIjPPvsMLVu2tPtYDHt6pm05ZdUGs/B1eiwp6+jZk3QbALB6/0l8lH/a+tKx3YuM5+1F+82OcdKmvLhru6Cr0UHMX/x42GieznP7QNSKmDrupTIJjBGFzrg6cO4OgLyrR998mGHVMmz5/oiIyBijx0EEQUClSpUgCAIEQYCrqyu6du2Ko0ePOmAsCvQIWoQZW62LnsK3obCkrKNn75m86PnptySMy78z+q+Ta+Ht4KlG43lrofnoWfjrWajU69AyVsQ/Y/ygzz+eJy0rB+fz78elUifghZmDIGpFjJ3UvdhxFTTz59P4+fgNo8cKHuhtmPblfxZbI8Xa7+p2gesWnbn5EH1n75bObiMikiNGTzmSlZUFPz8/u7+voFAgQL0C83454zTRs/K3c9Ld1r+f8TwWhL5rNJ5BhaLnxoPHe1I2Hr0G7/AYo/t3QaNEVo4u76wuQ/RMybuGT8zMevBSry82ejYfu46NR6+Z/F7Grj9eZJ74/J8Cn1T0DJi7R5pn4IJ9UKkTEDBmi9XvQ0RU0TB6ypHMzExUqlTJ7u8rKBRQqRNw+W4a3o87iI1Hr1l8fcFTptf+ddXiawctyIuPgveCsiVy+s3ebTJ6lh+8hG35d1uflH81ZcNrdDp9kehRqRPw8bd/QK/X4/XovWgUOSHvp6s5nlL06HR6o5/uuowPytvTE6XCtrCuOBYeiGbqeJPjLHyBxsIR8/XKv03OV/D7sJYt35/Bq/P2QqVOgF/4Zqvfh4ioomH0lCMljZ7MzEx88MEH8PLygqurK3x8fBATE2P1/IboKXhFY0sK7g0pTnpWLo5eSTF6zJaNdsF7aBWMnh9/v4RD4z1N3m09O1cnxVbh6dCFu1CpE9Bk+ucQtSLWTav7+PYTgFG8dAyfBVEr4tXFj+/LFRHyucnlXrmXZjF6PvvhzycUPRvgpV6HdupvLUbPK3P3QKVOgD+jh4hkjNFTjpQ0elJTUxEeHo6zZ89Cr9fjwIEDqFq1KrZt22bV/IbouVvghp2W3LQhekyxJXreKxQ9hgOZf/jtEo6H+6NNrD865R+XY3hNRnYu3py/z+TytiZeRxv1d/jX/Lwzs05FeuQFzexAAEBKerb02tbqHzBoUVOIWhFJE/JeFxnycYmiZ1js7ybn0+67UOLo8QpZDr+FvfFCjB/+mFgTJ8JFjAoZZXIML0flRY/In7eISMYYPXYWHR1tdpozZ06Z/bz1+uuvIyIiwqrXGqLnfpp10aPX6/Hl8r+wZPe5Eo2tuNBpErJJ+vfQWNPR892Bi3g1aDaGLmgsxcsPoa/CS70e+84WPWjYMM3Yego/hL6G7kt90SIuANkaJZZN/wLITgcApGbmSK/1V6+UjhuaM7sBoFFiSsiHJpd7+a7l6Cl8WwxLe2Ws/f58ot6BqBUhakX0WeKLrEIXWCy4zJei8n4mbKZh9BCRfDF67Kxbt27FTqWVkZGBevXqYdWqVVa9XpEfPQ8yskv93tawJXoK7yExRM+3By6infpbLJ5Z3+gCg+8ETy72isVaTd6p6G8syvvZat7McdLYMrJzpdc1VK9D8vhqELUi+i/xgV6jxPSQ/5hc5oUCZ32ZipjC1w0qbfR4heddkbrHUj98uCDv1P3QuV7INRM9hmOjmo/dWsr/PSIi58XoqWD0ej3effdddOvWDTqdzuRrIiIipFPlBUGQoudRZo5dxmjYIHsHmd74Nw55fDPNwtGzOynvgOhv9l9AgHoFLoyvjhZxAWgX6487Y6vii+DgYuNiamR3iFoRIXO9AI0SUTPHS2PLztUZR4NGiXcXNoGoFZEY6YHZocMKLW8D3giagbNXrpuNmIS/rxU7Jlujp8nUkdINV6+Pq4aeS30hakX8Z0FjzA4fXGSZfWbtgkqdgBaMHiKSMUZPBaLX6/Hxxx+jTZs2SElJKX6GfIboSc/KfYKje8ywQf75+I1io+f9uINmo8dbvR7QKDF5jqd0avmI4K+LjYtR0ztB1IrQzqgHaJRYODNMGptOFike6wAAIABJREFUpzd67bawrvh+xvMQtSKmz/bE0fBAnItogM8nD4D/lJG4PK46oFEiPfoFsxFT+HFvzQL4LewNvwX94BX2jfR4rs66G5Cq1AnwW9DX6FijS+OrS8cfvb2oCXyDlsErqGj0tBr3cxn9LxIROR9GTwWh1+vx6aefomXLlrh3755N8xqiJyO7/EfPrvxT3x9mZOOlqN2ARolTkR4QtSKGLmhsVfT8O6oNRK2IA5NqAhol4maMNjk+w3RzXDU0iwtA21h/TJqjwj9j/KRjaVrGBWDX5FqFjqXZYCZ6NqDJ1K/QLDZQmt93/svS820mbLPqzuuGm6EafnIznFmWFuGO9xbmHePUb+YAdA2OA/KX12vmr1CpE9B6vHUHtxMRVUSMngris88+Q2BgIO7cuWPzvIboycox/XNYWTNs5LcmFv1JqHD0/MdM9Eg0Sug0SrSP9Ue7WH+MCvmq2Oh5cVELiFoR98ZWBTRK/DjtC5PjK/gTV9hcLylUmsUFIGyuFybOybsi9D9j/HBjXDV0VGsxJuQLQKNEt6AlGBb7O/T6x3uOGk8OgagV0SbWHzEz6+Gl/HuHeYXHSa+x5v+g0YRJELUixkWpHp9unz/dHFcNnWP8EBgXgLMTqgN/xwMAes74VQorIiK5YvRUABcvXoRCocCzzz4LFxcXafr444+tmt9w9pbOyp9XSsuW6Jm65aTF6EkK9wM0SuksruEa02dXSVPQTwiME/HiUl8pFKyJHp1GicMTa2Dz1Dp5MZE/75T8n9aGLWiM3ALxsST0bajUeWfEqdQJaBi+BGJsc7SMC0BiZI28n9Vm5R2E3WTKaOm9rNnb1nTmRxC1IhKm1nl8YcUx7tK/v5uRd8bZiOiGwK9TAADdp++ESp2AdpGMHiKSL0YPQRAUuHIvzW7vZ9jAb0m8jpT0bMTsOY835+9D3/wzjBoFP46eTUev4c9L96S/fy0UPV6Fjuv578RBRoHjFbKsyPE0olbE/0U3BDRK/BLWBe9FbzU5voLRY27K0iilY2lm5p/WDo0S0aFDoFIn4M6jTHip1+Jf+QdDG44jgkaJY5E1IGpFvBDdTXovaw4m91vYy+hGqR8ERxiNM0ujRLelfmgeF4CjK7/E3dQsdJ+WFz0dJm7HnqTbZq+knZKejcwc+/zMSURkb4wegiDY9ysybOA3H7tu9Ljh1hEFo2fzsWtG8xSOHsPGfv20OhC1IgbN7AOVOgFeYd/Cf3EXBMQFouH4xzcjbTwpHKJWRPSsBtJxOG/M32dyfIZpWsh/LYbPxfHV0Sn/OJ+YmXlRYzjL6+bDDLwX+Z50gHHBvUG5GiXaxfqjQ6y/dBxQSrr5ywbodHr8O+5XBMQ1Q6vF7QGNEn+Ft5DGOTw4COfDmwAaJWbMzovAz6a9iHaR29B16i9QqRPQceJ26fWFD5zOzMnl3iAiqtAYPWT3laC46GloY/R8HhyKMxPyDmbuFd0ZKnUCfGb/+/HBwtEDpPl9Zg+FqBWxY0ptq6NHpd6A6Rv/thg+f02sgbax/tKFDKeEfACVOgHX7qfjxYV5B04bDnguOL2TvwfIK/QHqNR59/Ay53jyAzQcP93odPvCFyM0RODfE/P2In00vxFU6gR0mZIXPZ0m7TB7/FDB+44REVVEjB4q59Fz3WienadumljWBlwfUx+tY/3ROcYPqqA1CIhtidaxIjrFiAiIawavsG/RdNZ/pBAy/DSkUifg9ei9JsdXcJq8+ST+GRRjMXyOTKyBzvl7fH6fVBMqdQLWnfolbw/UoqZGZ1oZJsMB0g3HzYRKbfn+Z0evpEj3DFudf8+wS+GNioz1t/B2yNUo0TnGD61iAzAv7G38c8oOo/hRqRPw5fK/cPNBBjYfuw69Xs/oIaIKj9FDDowe47u5m/p5a0uiNdGTgM+Cw6TjZt6c+iZErQj1PG/pZ54uS/JOE28d0wzLpz9vtJek3+zdJpdZcJq0Ke+A6ujQIRbDZ0v+nd8HLmoKlXo9Bq/P2+P0c/6epcKTNv+g48ZT1FCpE3DjQYbZ7+3I5fvwm/8SRK2IC+PzDqbuHzS3yFhF9QqEh3yB0fO8IWpF7J5cC10mboVKnYDOk3cYvbbNhG1QqRPwy6mbRtFz86H5cRAROStGDzksejYdNR09DUsQPR8GazA+Ku8U8rYxeTcT3TKlNk7mX8PHMH07rpNRdBh+8iloyuaTRUJi4qYTeXtKCuztyR5TrUjE6DVK/Dv/Wjmvzv0nRK2IVxb7QGcmktZOyruFhN/s96BSJyD5frrZ7+3PS3cQENsSHWP8pb1GTdVrTEZa76D5WDutLkStiIlzVPh8fN6epFZmbtExf+dZo+h5s9BPfkREFQGjh8pN9LxlRfT8YiZ6hgWPx6r8jbyoFdE8LgAPxrpDn/8zj6gV4b+oO7aFdS0SPR0nbjc7Ril6NuZFT6B6uTTvgzF1TIZMYqQHmscFSGNZP9X069LG1MSOiOYQtSI6L8g7FunyXfNn0W048RdErYj3FzQGNEo0Uf9kMmAM0XNrXFWIWhEvLfGRPqtv2GaTr5+9LQk3H2RIfzcN3VT6/2gionKG0UMOi56NZqKn4D25tloZPUODx+N4gb067y1sbPSTU4dYf7wxuehPUyp1Av66fN/sGA1TZH70qNQJGBH8Nd4ImoEvgoPN/sy1aWod/HthY8yZ3cDkXh5f9So0Uq/FzrDO6BDrj/ax/ng/OAIXbqea/d7m/b4ColbElDmeOBYeCJXa+OasBad26m8BjRID80+nvzy+utlAUqnzrtScmJxSouj55dRNfP7Dn2ZPdf/j4j2cvfXI6uURET0pjB5yWPQk/G0cPW8vsiJ6TpqPnlyNUoqehfl3Xb85xtNsmLwVNA3mDtq1FD0Fp0bqtVCpE9Be/Q3mh75r8Xifn8O6I2tMNXwUPEaaf3noK9INTa+Nq2YxDkbviISoFbFuWl38Ed4aKnUC/MNN77lRqRMwOHgKomY1kO5C76VebzF8Cp7Obkv0GOaJP3i5yHOG0+DNfc9ERPbE6CGHRc++M7eNHrcmenacvGFyWUODxwMaJVZMr4tBi5riWv7ZWT+Gvmo2QjoHxVodPWPXH8eBc3cQGLHVYji0VP+IluofTb6f4TWvR++V/j0waLp0BteBSTVx9vx5s9/b4HV5Z5+dmuCBvWEd835uK2Y8bcPmoGVcAFrEBWD05BeRdz2gDRbnsTZ6cnJ1+P/2zjusqev/49jx7VIctHUbFXBxwW0ddVStq9ZRtbXTDttatdNfvSEBAgiibJQtI3XjRIziXnVvcSsuHEhxIMhO8v79Ee7l3gwSN5DP63nu85A7Ts49OfXz7jmfcVSQODJht2HfHxSWPJLoybibjzlbLjy3OnAEQVgXJHqI5z4JTly/j4jtFw2Kax68chcSVoXkYzd4Q7nptE7kWCp6DKKj5GOMnveV/QwJaxg2zxG9I10kAlxXpQEAYndeMisYJKwKw6ThRgWWhFUh7t/Lonsjy8pRrAxoiF0Rkwyq3ecWliCvqBR9lgyAS6ITihW2SHdvXbYtpXNM1o/KEh7JAQ3hXOZj5Bw+Alc9GyJM/s0Ti56gjedEz8T9ayh67j4sfiTR071stSl08wWL7icIgngUSPQQlWoScELoWYue5mwKfl9ytMK+FJdq+Pb/XHoMABCx/WKFYuHMrQf4c+kxNGdTkOI2CFDYwlM2RXSPRqMVfZ7vb88nNYyVj4f32tOG7yhdKXJKhsIWbdxSeZHwQeB2HL12D9fu5Iva7um3FVDokieOjNX59wyZ1xpZ3nXhxC57ItHDZXnmjtidl1Ci1oiySmfmlDtHmyJmZzq6z9yCnILyVaFpy46b/X6CIIhHpTLZu2cFiR4zVMZJMHP9GTh5bEBuoc6AcsZwyxnjoudjaZhRcbNEPsLgXIz8c0hYFX5dXLHoEbY/acFhAEDYlgsVip6LWXmYv/eK0WtHrt3D+du5AIClB6/x5zt5+vF5haLln2Nc9F6DPrRQRItqhv3r1gNp13P4ZIN9/bcZ9FnCqvBBwHb+vQs9a+PPiJZglAxGxbbCZa930V8aY/Jd/l5+3KBUhRCuiCm/YrU9Hf3Kanw9LKshlnG3XISZG+Plh6+LvpsgCOJpUxnt3dOGRI8ZbCrpJBBuf5kTPRJWBQ/Zr5gr/5o38nLZ70aTCY53nQ0Jq8KURUfM9oFr+9uEAwCAoE3nKxQ9WQ8KsXD/VaPXhKw6Wm7gm8sXglEy+DraAZHyLzE2yrAshr2vNxglg5CyoqYd2cUAdFuFA4J2iCLQhN/ZTyB6oLBFicIWkyJ1K0v949rgkk89dGEXmHyfA5fvmhybgUE7RPeGbytfBbtcFoV2MSvPYtGz7FAG/ze74oTZ34YgCOJRIdFDVFrRI8QS0SNhVfjZ1YM38IOlkZgQuRnz5Z8gz6O87hV372QLRI9XymlIWBWSDukik4wlLuQO9+STAMSrOKZEz4HLdwXXUtAh0Qn949og3b21qBZYqVq3xeYYOFWX8yegAVRuAy0SEfwKkJ7oK1XYQlHmPD0mphXOuLc1+U7HjYTzcwwK3im6V7gKdu2OLt/QmVsPHkv0SFemmf1tCIIgHhUSPUSVEj2bT1csekZJQ3jj3oJNwZRFRyBhVRgtDebDxrl7uS2rilBrtEj/L49fdTIVui5hVThxXScQhMbblOgpKFaLrg2Z1xrOZU7Ko8P/5e9zXZUGCatC67njwCgZnPJ9G4vkoywWPX38tyFWPh5Q2EIm+4MfG63CFt9GOfDFSx0Dp6L1nC/Q0itM9PzJGzkmv2dI6C7RvcGCVbBhYbtQotbgeMb9xxI98tUkegiCePqQ6CGqleiRsCr8n+z/eF+Vv5KO8+d7S+P5vDoSVoWf5h965H54ppwyKXpO3dQJBOHWlSnRA+hy2BwrEwU/lAmQqzPqYcKcFIP3c4nVlbTI96wNpXxMhSJi/6U7/HNcoVGuXMU6t4G88LnsUw+dyyrDCw8Hv/I8Qkev3TP5PcPCxKInUC+aa9vZLD4iT8KqDKL19N9RKHq4VTOCIIinCYkeokqIHs5/5Po9cZkGoR+JscN77WmT137859FFj9vqkybbO5epc1IWhtxXJHo4JKwKX4T1BKNksMfvXfwYukx0TcImwzmRwcC4NoDCFqzsrwrbA4A+ZZFVPf3Eoewt2TWira4U/wb4JtoBYwI+gYOfHE4JHeCU0AHN3eZDwhrWOhMyYu6/orb1t/52XfgPey5m859L1BqT7y9hdVuI3N+KNacqfD+CIIjHgUQPUSUmQVGp2mQxztSTmXDx3GhQkuG7xIMViqJ5uy49cj+kK0+YbO9ili6bsurErUcWPZ8GfgxGyWB5YENMDlkkutbCPQGMksHEKHtAYYt27HKzooeLohJmWeb7UUHW6L+DuoJRMmgV/KPZfo8SJFmUsOVFWbnj8NW7SD1ZPhYFxWqUqjXIzBFXcDcmejxTSPQQBPH0qQr27kkh0WOG6jIJPoncY7DyoJ9kUMKqIF15AtvPZaHUxMpDRUxbdtygPe7g6mYJDb2loqeVrycYJYPQ0Kb4LThBdM3eZxYYJQPfMEmZI/Zas6KHCyd/z9dQ9Cw1EsbPHfe86qBDohM6xXWEhF1T4ffoj7ePSryqtvn0bdHnB4Ul+Cb+ACSsCmczH4jeUV/06OcqepEs3H8VYVsoWSJBVAeqi72rCBI9Zqguk2Bc1F6RkZ2VehbzdhlmUPZbf/axv+PE9XLH3Fby9cjJL0+od/WOTvRs0jP25oz4V3H70dIzHIySwd/hLfBXYAx/TcKq4Og/DYySweLARqLos4roXyZ6uvpsNuiLPZuMgdJok8Ln17JcPu1neFX4Pfrj7b0mDb2kifxn/YruwuzMwuzN3Dlh+RHfdWcs/UmeOVyfuJxRBEFUXaqLvasIEj1mqC6TYHzMPgNxk7D7soHRD9p0/om+h9vWcZTpshZz7V4oSzy49axY9Hw5b79JJ15AF5b+a9I2MEoGX0Q7gg2Yy1+TsCq0Dv2Gr83FRW6ZEz2cD1QXgejprrfVddbdCVDYYrpsGpLdhiDf4x1kezTBptn1wSgZDJ77Af89Go0WWq0WqSczMThkJzJzCvF5rHi8A2Q/AApbTHZ1M7rSdftBeXbmqB3pUKw5hYn/HDJ678z1louewhL1U6vVdSzjPn785xCy84oA6HJFcX2qKJKNIIiqQXWxdxVBoscM1WUSfDlvv9hwrjtjNDsyF2X1uHArHPau6wAADrJ1kLAq3CkzlDvO/2ewnWaOuVvPwyWRQb+4tnDzD+LPS1gV2kYNBaNkcNu7LpbJh1sker5N0G0jjQzfzRc4FecGUqE9uwQTXGdAvwBplNs49Ihvh04JTugpiwAA9PTbyheElbAqBG08hx/LBIuDIhxto4ZiWGwbbJ9VH8fcOxgVMjsF4xJsJsmjhNWV67CENm6paFn2Wzwp3GqT22pd9JgwtcC6tFtP5TsIgnhxVBd7VxEkesxQXSbB12X+IsItksUHDBMFPimfRuuMP2do7z4s5iO3AODfC9mi7/NKMe+fErMzHb1iO4FRMvCYPYM/L2HXwim+M7oltINWYYvVbkMgYVVYc/xmhe1lPSiEfHUart/LR0GxGqdv6nxoDl25a1Zs+Mp+htccCRglgyj/Nga1wiSszgn8u8SD+NjdA90EYe9dE9phj7cDJKwK02R/Y6bsR7TwiIP9TE84zJKhuZsSElYXnWWuH5aurHD3V7SaZilcW38m6Wqt3cop4M9F70h/4vYJgnixVBd7VxEkesxQXSaBvi+Nj+q0yDn2aYkebhutudR4W3vSxaLHkvDrxN2XMSSiBxglg7hZo/jzzWVLwCgZfBrjCChssa4sGzOX8fhxMCc2RkuDcWzm22CUDL6NckD8v4ZbhCuPXMdXcfvxSWQH3gE7JlhXLX5qeGtI2BQsCGqMD+LaiHIAOSW6wMHPHX8sOfrURc/T8Lnh2uJqfwkzSgdtPAcAJkPvCYKo/FQXe1cRJHrMUJ0mgdBoeq89jZVHDBMFPinHMu7DUb4eqSeNb3fsEyQHlLAqeFiQaG/h/qv4JLQ/GCWDWP9e/PmWXmF8MVIobPGNqy8krAoZd5+d6JGwKgTKvkO/uLbokOgEB6lhNfZlhzIwKkZXBHVEbGuUlhU07RvXFs6JTugQ3U/nDJ3ohAlRDggJbYqw0KZwSXAGo2Twc6QThsiCIGFTTPaBW52qCKHPzZOMif7Y/L38OPw3iB3hO3pv4rdLK6pJZkmfCYJ4MVQne2cKEj1mqE6TQH9byViiwKdBRYZL33fGkuzCyw5loLP/JDBKBoFBnfnzDn5uYJQMokOaYJ/7e5CwKjh5bHii1QZLRE9Ldg3+Dm8BRsmgl7fc4PrCfVfxcWw3MEoGqf4N+MivlQEN+VWdL6MdcdHHThQZttfvHfSNawtGyaBDohOYhPZwDJwKiSBTNnekXTe/0sPVJnuUlSFLxqaT96YKx+ejObseq/3iUg16zNwC6co0SFeeQPi2i0/cZ4IgLKc62TtTkOgxQ3WaBPrbSvqJAic+RhbmR0Xfb8YS0ZN87AbalOXqcQ9zAqCLmGoV9DMYJYONs+sj2W0IxkTusdjB1xSWiB4Jq8LPs4eBUTL4LHiwwTXvTWvAKBmMim0FjcIWe926Q+1RGxqFLSJDmmBRYCOoTYTEP/SsjT8jWup8gRJ1Kz+dIgZjqKu47tfhq+ZXUwpLyh2N/72Q/UTjIhwbZ8WGCsfGUb7+sdq/cDv3mYhwgiAsozrZO1OQ6DFDdZoE+qIn9WQm/3nfpTvPpQ+Hr4pFT0WVyjnWp91CC0UkGCWDKeGtcCevCJ4pp9Am/BMwSgbnfeywRD4CXXw2P3H/LBU9n3lMB6NkMDy6PbqyC0TXhiwdL1rl+Ug6B23ZFRVmezZ23PKui3ExrcAoGfiFSdCWXcF/x5508yLmQWF5nqS1Jyp27tYn7XoO/kw6hpyCcl8grq3es7dhoDQaw6VzTI6PJVy7ky+K+rqS/ZBED0G8QKqTvTMFiR4zVKdJIDQmHsknRVmBn5cvxZFr9/jvfFhUatEzh6/eK3dajm6Fb+N1ztLtYnuDSWRQ5GmLRPnYp2IkuZpZA8py+Zg6hknD0D+uDdonOuGhZ+3yrS/PuToxFNsaaoUtouRfgM8SbUTYHPPuhfGus1HkYWf0erZ3HfSMbwuXRCf84fkt/z1c3a8j1+5h4f6rRt9FmPBwxeHrjzQO3HPBgrxN3LlRM+YDCluUetRBZ3bRI4me/OJS/LLwMBbtL48cPHLtHjQaLf5ceoxED0G8QKqTvTMFiR4zVKdJIDQmbqtPYtu5rOduXLjK6Y/ynbrMzmvROYHRCQB2MSTSVXBKdMaQea0BhS22uPV9Ku9xJ68ISYcyzBZr7cbOB1vm17N9Vn1IWBU+kEZiWGRnMEoGKf4NMEf+jdiAGxE1Cv8ASFgVEuTjTK74zA9qDEbJQBrWGs3LnJs3nsoEUP6bpv+XZ/AuwoSHSQcz+PO3cgrMOkJzz81K1WXoFjpFr3b/iO9bvPxT6OcyMhW5Bxgvgrv66A2j6RNI9BDE86U62TtTkOgxQ3WaBEJjIl+dhl0X/nvuxkVYqsJSikt1DrlDo9uDUTIYIA9EC49YMEoGv0TqCo2qysLVnxb+G8qrov+93LCmWEt2DVL8G4BRMvCZI8Gnbgr8GGUPRslgdGwrlCpsMUwablT07HLryf89IlyXHLEduxyJ8rFGRc8Dr9ronNAOPeLbwVs+UbRdxbXtvfa0gfC5fi+fv75o/zX+PHeuoNh0pmbunsjtuvw7JWoNJLIk9PSfiF8i7eE1R4KMGfUAhS3myT/DYGkk/4x9BckQ/0wyXM1Zfvg6JiQcMDgvYVVQP6GPFkEQllOd7J0pSPSYoTpNAqExcV2VJsqZ87xIu57zyN/JJQD8ZE5vnV/PjM9h7zMTjJKBf1gzQGGLLmV+NU+LWzkFGBS8E6knM6HVajE0dBffby4B4xS333UiLK4NPojpCEbJ4JOYVrjtXRdQ2MKZXSoa80j5lzjh3h7ObBKS5B9jnDQAY/QKkzZnU8DK/gIr+wvz5Z/gR1eFrsJ72aqSyr8B2rIrsPSgTsRUtDJyWeAj88/eK/x57tzdh8Um35+7Z8G+qyhRl2DukSg4JXQU5RXqlOCElQENAYUtCjzeFq34mBIr46L3GvR56cFrBskzuSO/2LItUIIgnpzqZO9MQaLHDNVpEggdRaUr00ROxc+LkzceXfQAOiP8ccA43eqO/yA4BvwBRslgeWBDBMu+E61KPAsCN56DhFXh5/mHRVs9n0Y68yLgl0h7FHrW5ldoWrqad4jWr4lm7HBmk/Cety567YcohzJBlSTqh7ExFUZDxf97GVqtFlfvlM+BgA3nsDf9Do5n3EdxqTjMn7vHc8Mm9I7vpQujT2AwM0yCEzPfRnRIE11YvZLBhtn1+T5xz+WZ8Ndq555q0OcF+67ypUH0j4qEWVXj1M0cqE5QuQ6i8lKd7J0pSPSYobpNgnLRcwJqjRY/KA+ZdIR9Fpy++cCogTaHhFXhY5/JYJQMvg7riTZhX4BRMjjk9w4munpCwqqQ9aDwGfVat8W2Lu0Wb8y5d/jDbzgYJYPvoxxEggcKW7h4boRizSmj1ewlrK4S/XGBj1PFRwrem6crxXF9Rl385TodF7PyTIqe/JJ8HM4oj86L3XnJaIFZ7vi/Zcf5Z9VlK2v2M73AJOiySv8Uac9vZ3GH8p/v4FJWXuOcjx0WykdjumwaWrApRn8LY9FZElaFxN2XTYqem/cLntlv+rzh3ulWTvV5J6J6Ud3snTGqveiZO3cuOnfujP/9738YM2bMIz9f3SaBdOUJSFgVdpz/74V8/9nMxxc9Q9xngFEy+DzaEf2jdQ7Dd7zqoJc0EYOCdz6jHpvuj4RVYabsRxyb+TaK9fxwSj3qoPOMTQb3Cw8uYs6c4OEiyUYE6kL0PeY2BxS22L9NnLSwuXwxoo9HY8TKz+CU6AxnpQscZk+HhFUhYvtFo/40woPz+8krLIFj4K9glAxcEp3wT1BjaPXe7zNXfyw+cA3xJ+N1VefntUGOVx1AYQt32a+4fWAFcCcdGXfzsaHM6VroOC88onek46u4/UavXTLioP0syckv4avIP224dzqbaT6bNkG8CKqbvTNGtRc9K1euxOrVqzFlyhQSPdBF4dx+hisi5sjOK3ps0dNTGo/+cW3gUrat0jO+LbQKW0jYtSKflecB9w6jpCFGnY97sonoPnOLwf3CrSVT14THyPDdfN207+Uy9C4LXz/nY4dDcV/Ayf83OMxm0TrsazgnuvBbbe3m9YJTgs7x236mJ+ZsuWDUIdvYSlGPcJ24dIrrhsMz3zH6fvZsMlYcvg6tVotfFwwEo2QwMcoeGTPqlguk+aPh4rkRH0qjsP/0ZSQdzMB3rt5YIh+BHW498JNMBgm7FkEbz+GzmL1ozqZgsXwk/pZN4/tjSbmNZ/G7Psu2z9wi0UNUTqqbvTNGtRc9HAqFgkRPJeHw1bu48YjbFpzBmDbXQVTK4aS7CySs6oWJHgmrwiq3obwY6C+NQSt2FSSsCt18y5MlCkO1HWXrTbalf3w5bz8fZTdAGo3FgY349+d8arijZ3xbhIQ2xeRAGRbKRyLatztcEp3hkuACT9Vm/LrYfCHT47cuwCmhI5wS22O453QDsTPVVYahZVFpXATZySuX8ElZEkVGyaBzQjt8HNsakyLtMTJ0EEJCm8I7pjcmLZyAXyLtMUBQaNU5tic+XjIVsrDvUSL4Hl1+I10OH61Wi5VHrkOx5tRTySf1f8uO85XiOe7kFYkyWOv7OD0NuLafRkkQgngWWIO9I9FjBmuYBFUBzmD86juGN5gBYc3QS5r4wkXPP/IxvLGWsCp09dkMCatCW/dU0TPc+c4zxJmjN52+jblbLxgd66r9AAAgAElEQVQVIT/NP4S8olL+8xipP76J1gm/7gntEBzaFB1nT8aqgIYo0PMpgsIWCcGNyyrRdzIreCRsCj5YpBvfHv4/GLTlJZsiup/LFXQl+yH+cp8EvzAJvop2RJ/4tiIxpn+0T3TC4HltMDy2NZwFwm3wvDZYFdAQmrLva8Wuwt70O/h5/mH+O59m4VSOS//pfKOEkXQ5+U9eld7U9x6+eu+pt00QTwNrsHckevTw9PREjRo1+MPGxmqGqFLDGYxI+ecICm2Gv8Nb4K5XHbRnl7wQ0dNj5ha+T72kibjp0RyTXd341Rlj2yT9A7fzokifa3fyjQoRbkVCaPiPr5iFUoUtSrmszu4dTSY2LFXYYnhsazBKBi08IyoUPQ5+7rqtsajB2O7WQ9SOsAQGd3BZoW/cL0ALNgX9pPPgEx4LKGyR71kbF3zssGPWu0j1b4AU/wZI9W+AM752KPIsbzfHqzZU/g3wc6Q9L36+j3JAdpl/0NGd4krzT+rjwzlpS1gVX5h2iZHEiM/CgZpre8/FJ6+DRhDPAhI91Qha6anacAaDy1vDHY7sakhY4xmJnyU5+SU4eSNHFI3GHZMWlAsUIR+UiR7hthfHzfsFRoUIV5BVKHp279lpVOCccXdC2pxPDc4nc9Xd547GeNfZkLBrMUIaKkqe2Fy2FE7xXcAkOuOsr2FJDGN94+p//Zdb7qfluniX6LlCDzt4y34xKcoOu3fm/07zfRtjy7bJBs9rg0s+9ZAbKF6hOnXTsq0hrVaL5GM3DFaGcgX1yO7n68LhVxy+bvBu3yYceKzitRUlU+Ta3nr29iO3SxDPA2uwdyR6zGANk6AqIDRIn7vOEhjjtRYV33xefZOwuvBvo6InQCd63vPdYtBGlqBkhPBYckAXUXXhdi46z9iM1JO3sOnULWxx64siD3EI+QL5aOyZ862BsChR2GLwPJ0fTVJgI/yf22T8510HmjKHZAmrQquQ78EoGcwIa2nw/DV3e6N923VBFwGoKxOiOzdz3Rk4scugLNvy+8lVgZ5sIt/WMUUXhPv+gd1uPdCaXYmh0nBAYYvj7h2Q5dEMxQpbTC9LxNgnvi1uzqiLX8pW0CSsCgcum68uDwB7LuoSbzrIxNmhM3PKx/n6PZ0gSjQRyr/tbNYjzYPVR29UuH3FtSssskoQlQlrsHfVXvSUlpaisLAQcrkco0ePRmFhIYqLLU94Zg2ToCqgb5CCZN8jXP4VJOyLj4bR79vs1PISFkL6lYkeYVQXxx1BVBu3cqXcc8XoysG6tFuQsGvRil2FCa4+vKBg2GXYEvK90RWVXbPeRXs9x+deZY7PSbPs4ZLohPfj2+KBV7lfkJ/sJ3zj6stnu9Y/1pcZ74Licgfg2J26nESt2FXoK53Hn/eUTcEet+4YO3crv+LFHYOkkXBmk2DPJqMVuwp/uP4Nz7DmYJQMxsW0QrFHbXRkF+uEyDnLhMiyQxl8+1qtFicy7uPC3YtYdnoTmst0W6Jx/17G5EVHjL6bhFUh+diNx5oH42P2GVwTbqutOvpoxV8J4nlhDfau2osehUIBGxsb0dG3b1+Ln7eGSVAVMGWYJKwK5zJzK1XfhNslQj6P1WVfHhO5x6CN+/nFojYq2lrhHG+5oxs7H1wJiAHu85Ht0QSs7C+8L43Hp9IA9JHG4YZHCxyb+Ta+jXLAuJhW+DzaER31RFBSYCNe8Hzv6oUWbEqF456Vq0t9UKrW8OeSDmZU+MzUxUcx0EwFewmrQls2CS6RQ/h+yWW/Q8KWR4xVhHB7UcKqEL1/AzpF9xG9a5fYbvgs7H04zPRET7cQTJdNQ6j8W7QR+C49qujhsk1/NGeXwTWhMFx84JqRpwnixWMN9q7ai54nxRomQVWgIgN54XblEj2FJWp8Gr0XCbsvi+67lVMA11VpRp1khVtE+mLJGPo1u8THWoNzzuxSg9WfLO+6CA5tih+iHLAksJEoAaGptkeE74ZWq0VhibhYKXc95fhN/m9uO29UxG7+nOuqNItKb0hYFVp4xIBJ1G1z/evRhRdVFaFfmqO1nyuclc5lEWyOmB7bEV1ieomixhglg/ExjlgY1Aj7PBneaXv+IzrHdy9zbu89e1uFv6/+vCCIyoI12DsSPWawhklQFajIOF7Mer5OzOb69jhoNFq8P3urxW1MW1ZxosHBITsNzsXKxyNM/o1Jp+LPXP2R7DYEn7n6mxY9c/812h9nxQb08d+GrWdviwROiVqDdMHKlI/qtNm+i0RLWbmRlQENkeFuj96+qdBqtTh45S6Ghu4y+O2FTtUOs+R8YVSVfwORqMvxqoOts+tjdlgzfFwW3caF0w+L6A5mphTJC/2gLX6IqB3p2Hxa53x86mYOevptxf5LdwzG4MNg3QpWB6+N/LmsB4XIKShBVm65L1HUjmdXI44gngRrsHckesxgDZOgKlCRYXzekVvm+va4cCsopop1Cvl9ScWJBoVh8/qHE7sMEfKvECH/SiR6hAVDTR2mEuuVqDVQa7TYm36Hv5dzwhY6aQdvOo+wLeU5if5KOo4flAdNr/YoosAoGYyKbQWtwhbDpHNx5No9tHHTbSV9Fbef74NG4DfTckYAnyhxv5/xrNLcoVXY4oyvHfzDmqFvXHmOoQ6JTvgmsRve9/8BnRSz8aDoIT6e+y8krAoyLw8g+wJO3cxBxPaLIiFn76pznuaSHb7nuwXX75WnJAjZfP6x5whBPEuswd6R6DGDNUyCqkBFhvhy9sNK1bfnweSFph1wO3pvQvSOdJPXuWsMu0wUMm5sW0x4+K47Y7ZfwgKqJ67fBwA8FCRXjNmZjpyCEowM342F+69Cq9Vi/t4r/HVjNbgGR+sKrZ70fRu/usqQejITzaW6a5/F7OW/O+OuTlg0d/tHF36vZLClrAK8/pHu3hoaD53T9mzZj8j2aAK57HdMl/2JA37vwHuORCSAGCUDZ6UzOsX1Q885wzEvuAl2+jdEc/lCo+MWvOk8pCvTRMKc+9tv/VkAwPnbuUg+dgMPLRC5BPE8sAZ7R6LHDNYwCaoCCRVU4r5SiUTP8Yz7z+U7f/znkNGxcF2VBsB4wj3uiP9XHKK9OmUlQuMSRQbbf8NZg+f8N5w1268Lt3P5+/OLdcZc6GezYN9Vg2eWHizvK2AoIj3idVtcs8KaIVQ+QVS1XhgppdtaS0bbqMFglAxCQ5saFTxr3AajFbsKvaXxCPX5Q89hey0WykfjtkczfO3qg9O+dogNboLfIlryYf/6x3vxDEZGdUTv4HEI9O+EQQo3tJSKkzmeuVWez8kz5RQAYEjoLkhYnXN3RWi1WuQWms8QXaLWWLRKSBCmsAZ7R6LHDNYwCaoSwlUB7rh6p3KInvBtF5/bdxoTgMJ6UsuNJNzjjvn7roo/770iyi2UsPsy1Botfll4GIsPXIPrKt2KhSXRTFeyHxpd8eLOGQvX1o92MxS1N9FeyaBfXFtsdOsDj+ST/LXPY8tFT9SOdDgG/A5GyaBf5PtQl4mc9W4D+OSNZ9wZdGEXQsKqIFuVhuy8Ihy4fBfea0+LvpMTQn+6Tscpd2dRBumDfu9gYVAjKOY2xwfR3dA1oZ2BEHJOZMDE9MOAsMGYMbs7Nu9eU/47LT2GkeHlzt0Dg3Yg+dgNXMzKxdnMBxgVsVtUaJUbf3PZqKcuPoqWrutw96E4JceGU5l8pXtjLD98HT8oDxo4pwO6yDxaibIerMHekegxgzVMgqpGZV3peZ6iR7gNxAkgYWTTqqPGRc/vS46KrvUL2I68olKRkJhvZDXG0lpUJWoNRkfsxqxU8aoQ13bqSUPjK+wPAIRsPi/qs0ajxaRNP4FRMtjg1wwfBpXn+fly3n6UlpWT+HXFGjglOqOTshNuzKiLUo86GCcNgIRVoSu7AM0FKzp708WOyMKVmPv5xThw+a6oD4vkI5Hu3troypFaYYvLPvWQ6t8AYaFNMVmvqGr5ipAzXCIHoWPkt3D0/xP2Pr5o4RGLGfIfsNJtGBzYZHwdfwCh8gk47t4BKNJFJfZglWjOpiDuX9NRX8LtM2FYv3CVjUuDcPJGDsZF7+WzVQvf03vtaVG7n5RFCRoTRET1wxrsHYkeM1jDJKhq6BvyyuLTE7H9+YmehLIswuyKE8gvLsWei9mi3D7GRE/qyVvILy7FoSvlBp0zZsKoq6UHn34eGa7tLWcMSzAkH7thsDokLBcBACnpKWCUDGRzm2OwNJK/1tF7EySsCjE7z2FgfDcwSgb/ROj8lDz1CqQKj+y8IlEfLmblGvThNyPO4hNcZ+ATaRAGSSN50bPW7UMkyMcZiKH7XnWwc9a7CAhrhnExrdDZyIqQblVIV4B1cEQPtAr5Acqgxtg2uz7OJH2NOxu8AYUtdrv1wK05HwJnUnDwyl309NvKZ6fetHYpfnD1EgkXtUaLoE3nsT7tFn+eS5XARZl9UpYvSv8djf1uXFqIG/cLXvj/ZBDPDmuwdyR6zGANk6Cqof+P9JMWoXxa/XmeochqjRaHr95FUanx/wNfecRQ9HDcFkRTcdzKKa/9teLw088YzLW96bSh6BHm9hGy7VwWX5wzvyQf3f7pgK4J7bDdo5tB4sQOQboyGj9H2kOrsEWpRx24sEtNih6tVpz88d7DYoM+CLf8hOKBO/5P9n+Qyf6AhFVhrDQQUNjiga8DlrqNLBc+3i34vzUKW2R618U+v3eQFNgIs8Oa4ZdIewyZ19ogb5BQEH0Y1wY/RDlAMbc55s1xwLeJPpjs9R2i3UfhXtYNFHi8DShsESX/Am3ZFVg6+2ds/Hc/BksjRWPAjSWXHNLJY4Pot6lI9Owue5b7zK2uVSY0Gi2+TzyIyO2UEuBxsQZ7R6LHDNYwCaoa+v9IV5aQ9ZidlecfW2NFNDmEod0cwozQj5qJ2BK4trcbKSOxTiAoKkK+9Q8wSgbJAQ3xletM/pmWXiFglAx6xrdFpnddQGGLaPnnJgWPsTIggG7b5/aDQv7zLL1yIqba447/jqQA967g5s0MFB1ZBFzehcDUUxgpDYWb7Dd4yaYYrAYdd+8Ab9lkLHYfhnSfetg+qz7+CWqMGXMkmBDZBkPmtYaLCUHEKBm8l9AOn8U4QhreAjHBTbBqVnOk+9RDSVn7G9z68/1buF+3bflp9F6R+DM1T7iQewmrwvLD1/FAsPp2LjPXpNO0WqN9pGKth6/exQ/Kg7ijt/r2qAi3+IjHwxrsHYkeM1jDJKhq6P8jXVmSE87bdemF9kOIUPR8n3jQoG9p13NENcuKSssN3LMoiKk6cQtTFx81ukKQejLTImN1MPMgX48rTP41JKyuOrzzvPfAKBlsEoSnV7TK88CCSChAt8X2y8LDOHxVt43EPe8gW2f0b2N+L3GiSLm1+MnVAx9IYzHVVYb+0hj4qHQO1N3Y+fjHYzxfSPYLVz9IWBV+dFXga1dPjHB3w6RFUVgaZo/A0Gb4I6Ilxsa0wnsmtszaJzrho3mtMTWiJfoGfYZwfwYhweORuc0HIX7TYc8mI9VtAO4vnQRhyH1rdiWQpfPHunm/fPVvzpYLOCjYFuV8yriisxz5xaXo6bcVkxcdMRiLErUG285lGdST49r0SjmN4lINfFSnLa6xJuTUzRwSPU+INdg7Ej1msIZJUNUwFD2VowxFZRI9y03U/zKF8P/4N1YQ6fMs2HjKMtGj1Wrx2arRYJQMUv0bYJhrENpG6epzKeY2BxS2iJWPR8nh+RWuyDwu3PPtvTbyf5/NfFBhu1zlde4YIYja2nz6No4J8hpxKzDNTdQ8+0F5CMg6A2lwFCSsCp+5+iNEPgEfyv3hu3UNlkYw8AuT4KdIe3xoxJFamHTx/Xkd8G2UA1zntoAs2AURs53RQzETOz26Agpb3L50Aidv5OA7V28oZFPRc+YWSNi1cGRX6/ri6oWbHs0xcWYstp3L4ldbU0+Wr9rdzxdHkXml6ARe2JYLRsd12rLjmL78BCSszlerRK15pGLCey5mi1awiEfHGuwdiR4zWMMkqGroGwMuCuVFwSXKMxaZ9KIQVhm3FO7+bWcf/f+yn4QHhSVoJV8Pr5TTZu89VLba0zu+LUbG6Az7hCgHFHnawtXbE46y9QAq3op6XLjnhVXi9R2u9dmTni367o/m7OL/Pnz1rmhbUT9s3tixaP81vsaX8MgrKgUubsGJiK/wt2wapLI/cTxoMM742kHl3wB/Rw/C/4W3wJfRjugf18akDxGjZDB4Xht8GumCv+d1QVhoUywLbIj9fu8g07suCjzs8LdsGko86palAWAgYVVoWZaF+o+lx+DELkNLdg1WH72B6B3p+DbhAAqK1WAUGyBhdSVSjI3rn0uP8X+3kq+HfLUuVN/YyuPN+wUGwka4TZpTYNlqHiHGGuwdiR4zWMMkqGpw/7Axig2VwmnxSvZDzN93tVL93+WTiB79LYvnwaOM3ej5E3kDPS6mFXK8akPtURvvuy9FR+9NAJ6N6NlwKhOfx+7Dwv1XRW2tPnqDj6TS55LAz0TC6qLtuL85B3zu8wK9/EkSVudAvf1cFv/Z3nUd7F3Xie4R5uAR/u6nFk4HFLY46N4FycduoGB/PLa59wEUtihR2GKzV3sc9HsHqwMaIii0GaZGtMTQCpyqubIeo2Jb4beIlggKbYblgQ0xccYEdJfPQenuuchV1OdzInkvSOW3GWenngXjUbHoERai5SrWS1jD5I1bzugiDeforRgt2l+e5DL1ZCZcPDci9eTT36qtzliDvSPRYwZrmARVDe4ftq/jD7zorlRaNp0uD0G3FO7+PenZz7BnT87KI9fQ228KYoObIMerNmLkn6OPNA4SVoX3Z28FYCh6BgXvhOuqNBy6YlycPAobLNyOA8QlOHrM3IKcgvKVoXtlSQSHz9HV8xLmCvpl4WGRYzx3vq1ADHCHMOdQdl4Rvpi3DwOCduD2nbtYHSGFM5vEh6tH7UiHXPY7oLDFnzNm42dXDxR4vI3xrrPhKvsT02R/o9CzNi771IOP30f4we8TRIU0gWxuc3wY1RW9lB1MCqIuCe3wSUwrTA9vgXnBTZDm+zaKPOpimDQcHbw2op17Klqya0Si57wgg7dz2UqQ/jF9+QkAOmG8/PB19PHfxl9LOX4TYyL3YOb6MwjfdpE/39ptvcFvFL7tIgYF76Ss1RVgDfaORI8ZrGESVDVayXX/oI2K2P2iu1Jp0Wi08N9wFkeu3bP4mRe50vMocOH1vrKfESb/hvczkbAqDAndBcBQ9HA5aZ4GQr8VS9BfkdmbfgfLDpUnkiwqVaOgWF3WdqZRx/xrd/KNCgIJa7oILKDLqCw08qVqDSK3p+PitQyMithttL2D7l1w0b0NHNhk3baT63R84+oLCatCcfYV3PF+B6t9nNHZl0VkSBO4ztVtm/WOb2sghPrGtcXUiJb4LGgIxs8aj/0z38Vi70HQFOVi2cGrJv2XhMfI8N3YfPq20Xpyg0N28n8bK1zbzj3V4Hew1FH/cvZDDAzawYf6WwPWYO9I9JjBGiZBVWPjqUzYu64zuaVAPB6cUdh61jCXTmVjnZG8ORJWhS/m6cpS6J8X1uh6UradLd9usgR+Be0JjafQH+iDgHK/osf1aftl4WGjY9iSXSMSkkIfJgC4cPYEXKRJWLj/Ki6t8MQi+SjEyz/Fz64ekMiWYtHxregyxw1MxEfoYGKrrH0ig17x7dAvtj36RPXA6Igu6DtnGAaGjESbgKloN2saOvqy+MX3UzCeQRju4YYkxQcIln+D5mwKOrKLESz7DsOlc+DAJmOsNBDvu/5j8C49/XQrf0JHfeWeK2bHprBEzWc6b+OWanC9oFiN5GM3UGIkGrGgWI2kgxkoLq18uYzMYQ32jkSPGaxhElRFKpP/THVBf0WislPRqkf4tosYHbEbnimnIGFVopWVJ6VUrcGfSccsjnLjtqSu3Xkyh/tJC8pFirCCu6UlQvSpyHGay9osHEOhyCtVa/j/BoUOyLJVaboouxhdJFq422c4PvNtrA5oiLkhTTF2Ti+MjW6LgXFt0M1EuL25o2tCOwyY1xbjYlrh14iWmBXWDAuDGiFllgStPaLgLF2ARPlYjJSGoovPZhy5dg93Bckn5avTKhyX0zcfwFG2XjQe+nw5Txeyb6yArnSlzm/LI/nkY/0uj0rWg8KnFsxhDfaORI8ZrGESEARQLiK4vDSVnW0CB18Jq8LYKMMtLI1Gi/T/8l6oSL79oPCprEqGbr7Av6uwdId+3htLEVar1z+2ncvCkgPXkJNfgsCN5ypc2Zq57gx/nStOOk6QADF2Rzp+dFVgjDQQLV3XoT27BPMiZmO2bCKKPGrjrJcEl3zq4djMt7Fj1rtYE9AQC4IaIzykKXzDJJge3gKTIu0xMtoZA2MZvB/ftsKEjYySwaB5bfBVpBPeD/4UkwIGYuLiILh4+cHeLR6MdD5+UB6ERqOF99rTiOdqmmnUwNEFiF692WA8hPMnK7c8o7mwyC9HVx/d851nbH6s3+VRGRq6C53KQvyfFGuwdyR6zGANk4AgAF39KWHR0qqA0Kk4YMO5F92dZ8rDolJ8FbcfI+b+a7RW2KMijELjjvVpt/Dz/MOiRIvZeUUYGLTDZHmS4E3nDfrCrYS8P3urqISH3/qzou/72FMJR3Y1FshHI8ejAXxkk7Bp9T8YLp2DrW598L2rF067O+M/jybowi7U+eS4DYRGYYu0OYOQHP0pNobY4+fQ4ZgxR4JJkfYYaiaLNaNk0D6+AwYr38P7Ef0wak5fzFw/GQtUP2Lr7PpQzegAiXQVOrKLES3/HAOl0aJM3ULfos9jDbdNe8/eZrAt9l9uEaYtO45zmU83p1hhiZpPmXE207KcRnlFpZi+/AT6+m8zKAtjDfaORI8ZrGESEERVpmVZCPfRR3DarqpotVpotVpkGamf9qhwGYy/jj/wRG3N1ivXAehKQoyN2oPzt3Nx5No9/rowmSO3orTnYjZ81p5ER4+1WHH4uhF/rbVow67gV0+c2STMkX8D5NwAtFpAo0Hg2iPI83gXUNhimuxv+Mgn4oKPHVJmNcWiwEYICW0K2dzmmBhlj5GxrdAj3vzWWq84F/wR0RKJgU0RpZoJn7WLkHZ5N5bNnYhxMj+0YFMMVnNK1RrR1lhWmVgaXeY0/uW8/Qbjl3ZdXP5En4dFpdhy5ja0Wi0KS9QI3nSeTwZ5QRD9ZkyUarVa/L38uKgYsrC8yq966QCswd6R6DGDNUwCgqjKnMvMrVSJIZ8HwrpYT8LFrDwUlqix/PB1rD1x87HauJNXhLFRe0xG/RWVqvFp9F5Ebk9HqVrDR19KWBUuCyq2cyVK8opK8YPyoCg/kXBlxdh7X8zKxSBpJPpJ52FW6lnsOZ+JhLkz0EuaiCj5F9B41EaI/Fvsm++OQq8GgMIWC90+wn5vRxye+Q5S/RtAGdQYk0M74edIewyb19qkE3a5b5ET3ovthm9XjMD0WBd8tXAsvl03GW3mjkWb8FFoEzkcH84fglELesE5uh+coz5E17hxmL5zOtx3+WKY0hMj/wlCyxmB+DhmMW7l3UKRWlx/TKPR4sPAbXiP/QebTt/GP3uvQMKq8FfScQDA9oPH0IldBAmrQgevjRgfs09UZiXjri7qr617Kr/9NSS03CF+aFm0I4c12DsSPWawhklAEETV4/TNB3z+naqEsOCpuQin35ccFYkeLkuzMbEXvSNd5LD+8Vxd/qOW7Br0ZBPRQqqru5abvg/fuXrrHMJXnMAf0cnI83gXe9y6w0WxHsV7oqCd2wUFEd2RtDEYYwJGY3JoF7DhLfBLpD2+iHbEgHku6GUkRP9pHO8t6Ioh87vi47jO6B45BN/O7YAZcyTwiuqOgJAO+HnWCAyODMGxk4uR7tsQNxSNMEwaBgc2GT3ZRMTsuIgZa0/jVk4BNgvydR29do9fIfwgYDs6eG1Ea7f1ouKw1mDvSPSYwRomAUEQxPPi6p2HGBWxGz/NP2T23qJSNbJyCyFdmYZfFx/FtTv5aC61rM7dzvP/iQTToODypIhTFx/F+Jh9KCxRI/VkJjqwi+HIrsas1LOiNgpL1HxR2S9d/bDfvRs+loZhfMw+rFUl46KHPa7OqIddvk1w0Lchzvra4fwMO2TMqIdM77o45umIAwpn5HvWRqanHa7MqIejM9/Gltn1kRTYCJEhTeAzR4I/wlvis6h2GBzrhJ6PIaY6JTjhg7h2+DzaEb+Ft4IsuD2+j/4LPht3gCsoG7Ujna/Jp1hzCmMi90DCqnD9XnnklzXYOxI9ZrCGSUAQBFEdKSxRw3WVbnVo5RHjjtilag1mp57F4gPXjEb5dZ6xyWCbTbryBIpLNfguagu+dZ2Bbt4bEL/jHL4IXImIjWnQXNmDgvS9cJCuQWd2EaLkX2JK8AJ0YRdisDQS2bGjAeXHQNI3OBQ6HpkeEkBhqyv26tEMctkURM/4AhdjeuPout/R3dcTX/p9jg9mT8TUoF5QhDlgangbDIzohV4x3dAnznRE23vzOuLbOZ0QFdIFvysX63ypzmbxJVGidqTz24zWYO9I9JjBGiYBQRBEdeVhUSkOX318J/e/ko5DwqowacFhvj4YJ6Dyi0ux4VQmH6qvD+c/08d/G2SryrfmcgV+N4m7L0PCroUDmwwndhlalGWpDt9W7nw8gtuqc12H7xINM09n3crAxVP7MXjuWrT0nIOpweMQFNoMX0Q7or2eGOo2rxvcFw2AbHUg2sjjIGFT0H3mFqg1WquwdyR6zGANk4AgCIIwTl5RKeZsuYCc/BKUqDXYk57NO12bgxM6UxcfNZrkEQD2pGfz5/ekZ6On31a0dU/Fnbxyp2ZuteoH5SHE7BSX4/gqrjwiLKgsfcD6tFv4dq4Kn0iDcFXRBKuCO+CnkO4YG9PKaHZsl7iuGLKgl1XYOxI9ZrCGSUAQBEE8fbiSJSsOX+erw/+y8IrBzsQAABD4SURBVLDonuy8Il7AqDVaZOUW4oogqg0Adl/MRkfvTThw+S5UJ8pD+otK1SJH5KJSNY5l3AdQXo3+i6jtuPZfLlq6qhAqn4AbAQw2RThjVlgzfBbjiP5xbdApQbcaZA32jkSPGaxhEhAEQRDPhsycQt5X6Mi1e6LEjxxx/16G6oRlhVBz8kvQL2A7Irenm713T3o2MnN0OYCCNp3HmMg9uuK2GQcBfwfkrPPEw82zsNO9N5LcB1uFvSPRYwZrmAQEQRCElSFw2uYSVFqDvSPRYwZrmAQEQRCE9RKy+TyJHkKHNUwCgiAIwnrZUZbTyBrsHYkeM1jDJCAIgiCsl5yCEhI9hA5rmAQEQRCEdUOihwBAoocgCIKo/sxYe9oq7J1ViJ6SkhJMmTIFdevWRd26dTF16lSUlhrPoKmPNUwCgiAIwrrRUEbm6oOHhwc6deqEzMxM3Lp1C+3bt4eXl5dFz1rDJCAIgiAIa7B3ViF6mjRpgtWrV/OfV6xYgWbNmln0rDVMAoIgCIKwBntX7UXPvXv3YGNjgytXrvDnLl++DBsbG+Tk5Jh93homAUEQBEFYg72r9qInIyMDNjY2uH//Pn+OE0LXr183uN/T0xM1atTgDxubaj9EBEEQBEGipzrACZyrV6/y52ilhyAIgiDEWIO9q/aiB9D59CQnJ/OfV65ciaZNm1r0rDVMAoIgCIKwBntnFaLH3d0dnTt3RmZmJjIzM9GxY0eK3iIIgiAIAdZg76xC9JSUlGDy5MmoU6cO6tSpgylTplCeHoIgCIIQYA32zipEz5NgDZOAIAiCIKzB3pHoMYM1TAKCIAiCsAZ7R6LHDNYwCQiCIAjCGuwdiR4zWMMkIAiCIAhrsHckesxgDZOAIAiCIKzB3pHoMYM1TAKCIAiCsAZ7R6LHDNYwCQiCIAjCGuwdiR4zWMMkIAiCIAhrsHckesxgDZOAIAiCIKzB3pHoMYM1TAKCIAiCsAZ7R6LHDDY2NqhRowYdZg4aJxonGicap8p60DhZPk7Vner/hk9IjRrVX/k+DWicLIPGyTJonCyDxskyaJwswxrGiUSPGaxhEjwNaJwsg8bJMmicLIPGyTJonCzDGsaJRI8ZrGESPA1onCyDxskyaJwsg8bJMmicLMMaxolEjxk8PT1fdBeqBDROlkHjZBk0TpZB42QZNE6WYQ3jRKKHIAiCIAirgEQPQRAEQRBWAYkegiAIgiCsAhI9BEEQBEFYBVYhelxdXdGsWTPUqlULDRs2xO+//47i4mL++oMHD/D555+jVq1aePfdd+Ht7S16/ubNmxg6dCjefPNNNG3aFLGxsaLrZ86cQc+ePfHGG2/A0dERa9aseS7v9azIzs6GnZ0dOnfuzJ+jMSpnwoQJePXVV/HWW2/xx/nz5/nrNFZi1qxZg/bt2+PNN99Ew4YNERUVBYDGiUM4j9566y288sorcHZ25q/TOJVz48YNjBw5EvXq1YOdnR3GjRuH//77DwCNk5D09HQMGTIEderUQaNGjTB79mz+mrWPk1WInnPnziE3NxeAzqD369cPvr6+/PVvvvkGQ4cOxf3793H+/Hk0bdoU//zzD3+9T58+mDhxIh4+fIj9+/ejdu3a2LFjBwCgpKQE9vb28PT0RGFhIdauXYu33noLFy9efL4v+RT58ssv8cEHH4hED41RORMmTMC0adNMXqexKic1NRWNGzfG9u3boVarce/ePZw9exYAjZMpnJ2d6d8nE4wcORKffPIJ8vLykJeXh1GjRmH8+PEAaJw41Go12rVrB3d3d5SUlODcuXNo2rQpFi1aBIDGySpEj5Ds7Gz0798f33//PQAgPz8f//vf/3Ds2DH+nsDAQPTp0weATjG//PLLyM7O5q9PnToV33zzDQBgy5YtsLOzQ2lpKX99+PDh8PDweB6v89TZuHEj+vbti8TERF700BiJqUj00FiJ6dKlC2JiYgzO0zgZ58CBA3j55Zdx8+ZNADRO+jg7OyMpKYn/vHTpUjg5OdE4CTh9+jReffVV0bt4enqib9++NE6wItETGRmJmjVrwsbGBnZ2djhy5AgA4OjRo3jppZeg0Wj4e7dt24Y6deoAAFatWgWJRCJqKyEhAR06dAAABAcHo2/fvqLrHh4eGDVq1LN7mWdEfn4+WrdujTNnzohED42RmAkTJqBu3bqoW7cunJycEBERwV+jsSrn4cOHqFGjBgICAtC6dWvUr18fn376KTIzM2mcTPDTTz9h+PDh/GcaJzEJCQkYM2YMHjx4gJycHIwYMQLTp0+ncRJw8uRJvPrqqygpKeHPeXh4oG7dujROsCLRw3Hu3Dm4u7vz/ye1a9cu1K5dW3TP0aNH8fLLLwMA5s+fj/bt24uur1q1Cvb29gAAb29vjBw5UnQ9ODgYAwYMeFav8MyYNm0aZDIZAIhED42RmCNHjuC///6DWq3Grl27UL9+fSiVSgA0VkKuX78OGxsbuLi44OrVq8jLy8NXX32FgQMH0jgZIT8/H7a2tkhOTubP0TiJuXDhAnr27ImXXnoJNWrUQI8ePfDw4UMaJwHcFpRMJkNRURFOnTqFJk2a4OWXX6ZxghWKHgBYtmwZBg8eDMCy/5Nq3ry56Hl95duvXz/R9aqmfAHdODg6OqKgoAAAHnmlxxrGyBQzZ87ERx99BIDGSsj9+/dhY2ODuLg4/tyVK1dQo0YN7N69m8ZJj8TERDRo0EC0dUDzqRyNRgOJRAKpVIr8/Hzk5uZi0qRJGDp0KI2THqdOncKHH34IOzs7tG/fHu7u7nj33XdpnGClomfx4sVo2bIlgPI98+PHj/PXg4KC0Lt3bwDle5x37tzhr//666/4+uuvAej2ON9++22o1Wr++scffwx3d/fn8SpPjZCQELz++uuws7ODnZ0datasiVdeeQV2dna4du0ajVEFzJo1C8OGDQNA80mfZs2aIT4+nv/MiZ4HDx7QOOnRq1cvsCwrOkfzqZzs7GzY2NggMzOTP5eWloaXXnoJDx8+pHGqgOnTp2PcuHE0n2AloiciIgJ3796FVqvFqVOn4OTkhEmTJvHXv/76a3z00UfIycnBhQsX0KxZM5E3e+/evfHTTz8hPz8fBw4cQJ06dQy82b29vVFUVIR169ZVOW92AMjLy8P169f5Izg4GC4uLrh+/To0Gg2NkYCkpCTk5uZCq9Vi7969aNCggWg1g8aqHB8fH7Rv3x43btxAQUEBJkyYgIEDBwKgcRJy7tw51KhRQ5T6gIPGqRx7e3u4ubmhqKgI+fn5mDx5MlxcXADQOAk5ceIEHj58iOLiYqxcuRJvv/02Tpw4AYDGySpEz9ChQ2FnZ4c333wTzZs3x7Rp05Cfn89ff/DgAcaPH4+aNWvinXfegZeXl+j5GzduYMiQIXjzzTfRpEkTg7wFp0+fRs+ePfH666/DwcFBtCdfVRFubwE0RkJ69+6N2rVro2bNmmjbti3mzJkjuk5jVY5arcZff/3FryCOHTuW/z91Gqdy/v77bz6CRh8ap3JOnjyJgQMH8oEEgwYNwpkzZwDQOAmRy+WoW7cu3nzzTfTo0QO7d+/mr1n7OFmF6CEIgiAIgiDRQxAEQRCEVUCihyAIgiAIq4BED0EQBEEQVgGJHoIgCIIgrAISPQRBEARBWAUkegiCIAiCsApI9BAEQRAEYRWQ6CEIgiAIwiog0UMQBEEQhFVAoocgCMJCCgsLMWzYMDRu3BgpKSkvujsEQTwiJHoIgiAsZPny5fj9999x584d9OjR40V3hyCIR4RED0EQzxSJRIK1a9dWme+XSCR4/fXX8eGHHxpcO378OH7//XfcunULAwYM4M937doVr732mqhIL0EQlQ8SPQRRDfHz80P37t1F58aMGYPatWtDrVbz57y9vfH+++8/0748T9Fj7LseR/SYur+wsBCNGjWCjY0NduzYIbqWmJhIoocgKjkkegiiGrJ//3688soryMvLAwBotVq8++67aNOmDQ4dOsTf179/f7i7uz/TvlQn0ePr64u33noLr776KrZv3y66RqKHICo/JHoIohqiVqtRq1YtpKamAgBOnToFJycnuLq6IiAgAABQXFyMN954A9u2bQMABAYGwsHBATVr1oSDgwMSEhIAAEFBQejfv7+o/bi4OJGBz8zMxGeffYZ3330XjRs3hqurK0pLSwEYioiK7uXuDwwMxHvvvYeaNWuiT58+yMjI4N+je/fuqFmzJvr27QuWZdG3b18AwPjx41GjRg28/vrreOuttzBlyhSz7RnDlOjJyspCrVq14O3tDYZhEBoaKrpOoocgKj8kegiimjJs2DCwLAsACA8Px5QpU5CamoqPPvoIALBr1y689tprKCwsBACsWLECGRkZ0Gg0SE1NxWuvvYa0tDRkZmbi1VdfxY0bN/i2+/Xrxxt9jUaDrl27Yvr06SgoKMDt27fRtWtXBAcHAxCLCHP3cvczDINLly6hsLAQw4cPx4QJE1BSUoKWLVvC09MTxcXFOHDgAN555x1e9Oh/l7n2TGFK9EyaNAmNGzdGfn4+xo8fj++++050nUQPQVR+SPQQRDUlICAA7733HgBg7NixWLZsGXJzc1GvXj2o1Wp4e3ujX79+Jp8fMGAAwsPDAQBDhgyBv78/ACAjIwOvvvoqsrKyAIAXHxqNhn922bJl6Nq1KwCxiDB3L3d/bGws/3np0qVgGAa7du3i+87x22+/WSR6jLVnCmNtnD59Gi+//DKUSiUAwMfHBx07dhTdQ6KHICo/JHoIoppy+PBhvPLKK8jNzUX9+vV5kdKlSxccOnQI/fv3h5eXF3///Pnz0aFDB9SpUwe1a9fGq6++Ck9PTwDAokWL4OLiAkDnJD1s2DD+uaSkJLz88suoXbs2f9SqVQvNmjUDIBYR5u7Vvx8A1q5dC4lEYlSsBAYGWiR6jLVnCmNtDBs2DB07duTFWnJyMl577TXRthyJHoKo/JDoIYhqikajQZ06dRAUFIS2bdvy56dNmwZfX1+88cYb2LVrFwDg6tWreOWVV7Bt2zZ+JWXAgAFQKBQAgPz8fNSqVQtpaWlwcnLCkiVL+Pb27duHxo0bm+yHUESYu1f/fqBcpFiy0tOiRYunLnq2bNkCGxsbvPXWW6hfvz7q16+PevXqwcbGBmlpafx9JHoIovJDoocgqjEjRoxA/fr18csvv/Dn1qxZgwYNGuCNN95AcXExAN32zSuvvIKTJ09Co9Fg5cqV+N///seLHgCYMGECBg0ahFq1aqGgoIA/r1ar0aVLF3h4eCAvLw8ajQaXLl3Cli1bAIhFhLl79e8HykVKSUkJWrRoAW9vb5SUlODQoUMGPj3du3cX+QdV1J4p9H2QOnTogK+++gqZmZmio27duliwYAH/HIkegqj8kOghiGpMSEgIbGxssHTpUv7cvXv38NJLL4mS6wGAu7s76tWrh3r16uGnn37CiBEjRKKHW/HQd+AFdBFZX3/9NRo1agRbW1u4uLggMTERgPHoLVP3GrtfKFLS0tLQrVs3vPXWW+jTpw/++usvDBo0iL83JSUFzZs3R506dfDrr7+abc8YwvsTEhLQqFEj3L9/3+C+Dz/8ENOmTeM/k+ghiMoPiR6CIKosv/zyCyZOnPhU22zVqhVq1aqFIUOGWPxMjx49ULNmTfTs2fOp9oUgiKcLiR6CIKoMu3bt4sPqt27dipo1a2Ljxo0vulsEQVQRSPQQBFFlUCqVaNSoEd544w04OjryIfUEQRCWQKKHIAiCIAirgEQPQRAEQRBWAYkegiAIgiCsAhI9BEEQBEFYBf8PrQN2MeYiP20AAAAASUVORK5CYII=\" width=\"639.85\">"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"(3000, 9000)"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"%pylab notebook\n",
"\n",
"spectrum = sim.runner.spectrum\n",
"spectrum_virtual = sim.runner.spectrum_virtual\n",
"spectrum_integrated = sim.runner.spectrum_integrated\n",
"\n",
"plot(spectrum.wavelength, spectrum.luminosity_density_lambda, label='normal packets')\n",
"plot(spectrum.wavelength, spectrum_virtual.luminosity_density_lambda, label='virtual packets')\n",
"plot(spectrum.wavelength, spectrum_integrated.luminosity_density_lambda, label='formal integral')\n",
"xlabel('Wavelength [$\\AA$]')\n",
"ylabel('Luminosity [erg/s/$\\AA$]')\n",
"legend()\n",
"xlim(3000, 9000)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.7"
}
},
"nbformat": 4,
"nbformat_minor": 4
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment