{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "5f78b14c-8c80-4f65-8e80-5f71f0e802cf",
   "metadata": {},
   "source": [
    "# Options basket, pytorch et réduction de variance"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 77,
   "id": "2997c1ad",
   "metadata": {},
   "outputs": [],
   "source": [
    "import math\n",
    "import time\n",
    "import os\n",
    "import pickle\n",
    "import numpy as np \n",
    "import scipy.stats as sps \n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns \n",
    "sns.set_theme()\n",
    "import pandas as pd\n",
    "from tqdm import tqdm\n",
    "\n",
    "from numpy.random import default_rng, SeedSequence\n",
    "sq = SeedSequence()\n",
    "seed = sq.entropy        # on sauve la graine pour reproduire les résultats\n",
    "rng = default_rng(sq)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a21391bb-67a2-441d-a36a-66add60ca264",
   "metadata": {},
   "source": [
    "## Retour sur Monte Carlo avec erreur préscrite\n",
    "\n",
    "Pour un échantillon $(X_i)_{1 \\leq i \\leq n}$ de taille $n$ l’estimateur\n",
    "Monte Carlo se contruit à partir de l’estimation de la moyenne empirique\n",
    "$\\hat m_n$ et de l’estimation de la variance empirique $\\hat \\sigma^2_n$\n",
    "définies par $$\n",
    "  \\hat m_n = \\frac{1}{n} \\sum_{i=1}^n X_i \\quad \\text{et} \\quad \n",
    "  \\hat \\sigma_n^2 = \\frac{n}{n-1} \\big( \\frac{1}{n} \\sum_{i=1}^n X_i^2 - \\hat m_n^2 \\big) \n",
    "$$ La taille de l’intervalle de confiance de niveau $\\alpha$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 78,
   "id": "a5cfa0ca",
   "metadata": {},
   "outputs": [],
   "source": [
    "def monte_carlo_adaptive(sampling_function, epsilon: float, \n",
    "                         batch_size: int = 100000, \n",
    "                         proba: float = 0.95) -> dict:\n",
    "    \"\"\"\n",
    "    Effectue une estimation Monte Carlo adaptative jusqu'à ce que l'intervalle\n",
    "    de confiance de la moyenne soit inférieur à epsilon.\n",
    "\n",
    "    Args:\n",
    "    - sampling_function (callable): Une fonction qui produit des échantillons \n",
    "      de taille donnée en argument.\n",
    "    - epsilon (float): La taille maximum tolérée pour l'IC.\n",
    "    - proba (float): Niveau de confiance pour l'intervalle (défaut: 0.95).\n",
    "    - batch_size (int): Taille du batch pour les simulations.\n",
    "\n",
    "    Returns:\n",
    "    - dict: Un dictionnaire contenant les valeurs suivantes :\n",
    "        - \"mean\" (float): Moyenne de l'échantillon final.\n",
    "        - \"var\" (float): Variance de l'échantillon final.\n",
    "        - \"ci_size\" (float): Taille de l'intervalle de confiance.\n",
    "        - \"samples_size\" (int): Nombre de tirages effectués.\n",
    "        - \"time (s)\" (float): Temps d'execution en secondes.\n",
    "    \"\"\"\n",
    "    alpha = 1 - proba\n",
    "    quantile = sps.norm.ppf(1 - alpha / 2)\n",
    "\n",
    "    sum_, sum2_, size_ = 0, 0, 0\n",
    "    start = time.time()\n",
    "    with tqdm(total=None, desc=\"Adaptive Monte Carlo\") as pbar:\n",
    "        while True:\n",
    "            # Génération d'un nouveau batch d'échantillons\n",
    "            samples = sampling_function(batch_size)\n",
    "            sum_ += samples.sum().item()\n",
    "            sum2_ += (samples**2).sum().item()\n",
    "            size_ += batch_size\n",
    "\n",
    "            mean = sum_ / size_\n",
    "            var = size_ / (size_-1) * (sum2_ / size_ - mean**2)\n",
    "            ci_size = 2 * quantile * math.sqrt(var / size_)\n",
    "    \n",
    "            # Mise à jour de tqdm avec la taille de l'IC actuelle\n",
    "            pbar.set_postfix({\"IC_size\": ci_size, \"mean\": mean, \"var\": var})\n",
    "            pbar.update(batch_size)\n",
    "\n",
    "            if ci_size <= epsilon:\n",
    "                break\n",
    "    stop = time.time()\n",
    "    return {\n",
    "        \"mean\": mean,\n",
    "        \"var\": var,\n",
    "        \"ci_size\": ci_size,\n",
    "        \"samples_size\": size_,\n",
    "        \"time (s)\": stop-start,\n",
    "    }"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8b1fa86d-45d7-4612-96fa-ec0da3fa4db8",
   "metadata": {},
   "source": [
    "## Options basket: pricing Monte Carlo\n",
    "\n",
    "Dans cette première partie on na fait pas de la programmation orientée\n",
    "objet mais on s’en approche en rassemblant tous les paramètres dans un\n",
    "dictionnaire.\n",
    "\n",
    "> **Note**\n",
    ">\n",
    "> Il est conseillé d’éviter les variables globales (pour prendre de\n",
    "> bonnes habitudes de programmation et réutiliser facilement son code),\n",
    "> donc on va regrouper les différents paramètre dans un dictionnaire."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 79,
   "id": "2868dd4e",
   "metadata": {},
   "outputs": [],
   "source": [
    "def model_bs(d, r, S0, sigma, correlation, T):\n",
    "    \"\"\"\n",
    "    Initialise les paramètres du modèle multidimensionnel de Black-Scholes.\n",
    "\n",
    "    Args:\n",
    "    - d (int): Dimension, représentant le nombre d'actifs dans le panier.\n",
    "    - r (float): Taux d'intérêt sans risque.\n",
    "    - S0 (np.ndarray): Vecteur des prix initiaux des actifs, de taille (d,).\n",
    "    - sigma (np.ndarray): Vecteur des volatilités des actifs, de taille (d,).\n",
    "    - correlation (np.ndarray): Matrice de corrélation, de taille (d, d).\n",
    "    - T (float): Maturité de l'option (temps jusqu'à l'échéance).\n",
    "\n",
    "    Returns:\n",
    "    - dict: Un dictionnaire contenant les paramètres du modèle.\n",
    "    \"\"\"\n",
    "    return {\n",
    "        \"d\": d,\n",
    "        \"r\": r,\n",
    "        \"S0\": S0,\n",
    "        \"sigma\": sigma,\n",
    "        \"mu\": r - 0.5 * sigma**2,\n",
    "        \"correlation\": correlation,\n",
    "        \"correlation_cholesky\": np.linalg.cholesky(correlation),\n",
    "        \"T\": T,\n",
    "        \"actualization\": math.exp(-r * T)\n",
    "    }\n",
    "\n",
    "d = 40\n",
    "rho = 0.3\n",
    "bs = model_bs(d=d, r=0.1, S0=np.full((d), 100), \n",
    "              sigma=np.full((d), 0.3), \n",
    "              correlation=np.full((d,d), rho) + (1-rho)*np.eye(d),\n",
    "              T=1)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "42375da0-5d08-4b2d-a2a6-9334188a15ef",
   "metadata": {},
   "source": [
    "### Code `numpy`\n",
    "\n",
    "On considère $d \\ge 2$ actifs financiers dont la loi à l’instant $T > 0$\n",
    "est modélisée par une loi log-normale c’est à dire $$\n",
    "    \\forall i \\in \\{1,\\dots,d\\}, \\quad\n",
    "    S^i_T = S^i_0 \\exp\\Bigl( \\bigl(r-\\frac{\\sigma_i^2}{2}\\bigr) T + \\sigma_i \\sqrt{T} \\tilde G_i \\Bigr)\n",
    "$$ où le vecteur $(\\tilde G_1,\\dots, \\tilde G_d)$ est gaussien centré de\n",
    "matrice de covariance $\\Sigma$ et les constantes $r > 0$, $\\sigma_i > 0$\n",
    "sont fixées. Il s’agit d’actifs financiers $(S^i_t)_{t \\in [0,T]}$,\n",
    "$1 \\le i \\le d$, modélisés par un processus de Black-Scholes\n",
    "multidimensionnel. On introduit la matrice $L$ triangulaire inférieure\n",
    "obtenue par la décomposition de Cholesky de la matrice\n",
    "$\\Sigma = L L^\\top$.\n",
    "\n",
    "A l’aide de cette matrice $L$, on définit la fonction\n",
    "$\\Phi:\\mathbf{R}^d \\to \\mathbf{R}^d$ telle que $$\n",
    "    (S^1_T, \\dots, S^d_T) = \\Phi(G_1, \\dots, G_d) \\quad \\text{ou encore} \\quad S^i_T = \\Phi_i(G_1, \\dots, G_d)\n",
    "$$ où $(G_1, \\dots, G_d) \\sim \\mathcal{N}(0, I_d)$ (l’égalité précédente\n",
    "est à considérer en loi)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 80,
   "id": "39e0f974",
   "metadata": {},
   "outputs": [],
   "source": [
    "def phi(bs, Gn):\n",
    "    mu_T = bs[\"mu\"] * bs[\"T\"]\n",
    "    sig_T = bs[\"sigma\"] * math.sqrt(bs[\"T\"]) * bs[\"correlation_cholesky\"] \n",
    "    ST = bs[\"S0\"] * np.exp(mu_T + np.einsum('ij,pj->pi', sig_T, Gn))\n",
    "    return ST"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a1b2f9df-be5a-439d-8fd1-c41b8b6695d4",
   "metadata": {},
   "source": [
    "La fonction `phi` correspond au modèle financier choisi (ici\n",
    "Black-Scholes) et doit être modifié si on change de modèle. Il est utile\n",
    "d’écrire cette fonction comme transformation d’un vecteur\n",
    "$(G_n)_{n=1,\\dots,d}$ pour faciliter l’implémentation des méthodes de\n",
    "réduction de variance.\n",
    "\n",
    "La fonction suivante `sampling_payoffs` regroupe\n",
    "\n",
    "-   la simulation du vecteur $(G_n)_{n=1,\\dots,d}$ (en fait un nombre\n",
    "    `size` de vecteurs de $\\mathbf{R}^d$)\n",
    "-   l’application du modèle via l’appel de `phi`\n",
    "-   la transformation via la fonction payoff\n",
    "    $g:\\mathbf{R}^d \\to \\mathbf{R}$ $$\n",
    "        g(S_T) = \\Bigl( \\frac{1}{d} \\sum_{i=1}^d S^i_T - K \\Big)_+\n",
    "    $$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 81,
   "id": "a42002fa",
   "metadata": {},
   "outputs": [],
   "source": [
    "def sampling_payoffs(K, size, bs, rng): \n",
    "    Gn = rng.standard_normal((size, bs[\"d\"]))\n",
    "    samples = phi(bs, Gn)\n",
    "    payoffs = np.maximum(np.mean(samples, axis=1)-K, 0.) \n",
    "    return bs[\"actualization\"] * payoffs"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4f1c0de4-1384-409c-9316-ffe63976ac76",
   "metadata": {},
   "source": [
    "On regroupe dans une fonction `run` l’appel de la fonction\n",
    "`monte_carlo_adaptive` pour différentes valeurs de\n",
    "$K \\in \\{80,90,100,110,120\\}$. La fonction prend comme argument la\n",
    "fonction `sampling_payoffs` (et ses arguments) car c’est la fonction qui\n",
    "sera modifiée dans la suite."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 82,
   "id": "17a820c7",
   "metadata": {},
   "outputs": [],
   "source": [
    "def run(name, function, epsilon, batch_size, **kwargs): \n",
    "\n",
    "    result = {} \n",
    "    for K in [80, 90, 100, 110, 120]:\n",
    "      result[K] = monte_carlo_adaptive(\n",
    "          lambda size: function(K, size, **kwargs), \n",
    "          epsilon=epsilon, \n",
    "          batch_size=batch_size)\n",
    "    result_df = pd.DataFrame(result).T\n",
    "    result_df[\"K\"] = result_df.index\n",
    "    result_df[\"method\"] = name \n",
    "\n",
    "    return result_df"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a9ba1a9f-824b-4be2-bfc0-30f44ed29ce5",
   "metadata": {},
   "source": [
    "On vérifie que le temps d’execution est proportionnel au nombre de\n",
    "d’échantillons utilisé dans l’estimateur Monte Carlo.\n",
    "\n",
    "> **Note**\n",
    ">\n",
    "> Avant de lancer des gros calculs, pensez à vérifier que votre\n",
    "> algorithme se comporte comme attendu. Ici l’estimateur Monte Carlo est\n",
    "> linéaire donc le temps d’execution doit être proportionnel au au\n",
    "> nombre de simulations. Si ce n’est pas le cas il y a un problème\n",
    "> d’implémentation ou de gestion de la mémoire)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 83,
   "id": "e54bb71d",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Adaptive Monte Carlo: 44000000it [00:36, 1189714.25it/s, IC_size=0.0099, mean=27.8, var=281]\n",
      "Adaptive Monte Carlo: 39000000it [00:32, 1184472.25it/s, IC_size=0.00992, mean=19.4, var=250]\n",
      "Adaptive Monte Carlo: 30000000it [00:25, 1195204.81it/s, IC_size=0.00991, mean=12.3, var=192]\n",
      "Adaptive Monte Carlo: 19000000it [00:15, 1198813.95it/s, IC_size=0.00996, mean=6.96, var=123]\n",
      "Adaptive Monte Carlo: 11000000it [00:09, 1181993.16it/s, IC_size=0.0096, mean=3.56, var=66] \n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>mean</th>\n",
       "      <th>var</th>\n",
       "      <th>ci_size</th>\n",
       "      <th>samples_size</th>\n",
       "      <th>time (s)</th>\n",
       "      <th>K</th>\n",
       "      <th>method</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>80</th>\n",
       "      <td>27.766534</td>\n",
       "      <td>280.616704</td>\n",
       "      <td>0.009899</td>\n",
       "      <td>44000000.0</td>\n",
       "      <td>36.985466</td>\n",
       "      <td>80</td>\n",
       "      <td>numpy</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>90</th>\n",
       "      <td>19.391415</td>\n",
       "      <td>249.953203</td>\n",
       "      <td>0.009924</td>\n",
       "      <td>39000000.0</td>\n",
       "      <td>32.926979</td>\n",
       "      <td>90</td>\n",
       "      <td>numpy</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>100</th>\n",
       "      <td>12.264333</td>\n",
       "      <td>191.765775</td>\n",
       "      <td>0.009911</td>\n",
       "      <td>30000000.0</td>\n",
       "      <td>25.101238</td>\n",
       "      <td>100</td>\n",
       "      <td>numpy</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>110</th>\n",
       "      <td>6.964153</td>\n",
       "      <td>122.694511</td>\n",
       "      <td>0.009961</td>\n",
       "      <td>19000000.0</td>\n",
       "      <td>15.849783</td>\n",
       "      <td>110</td>\n",
       "      <td>numpy</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>120</th>\n",
       "      <td>3.555150</td>\n",
       "      <td>66.036318</td>\n",
       "      <td>0.009604</td>\n",
       "      <td>11000000.0</td>\n",
       "      <td>9.307451</td>\n",
       "      <td>120</td>\n",
       "      <td>numpy</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          mean         var   ci_size  samples_size   time (s)    K method\n",
       "80   27.766534  280.616704  0.009899    44000000.0  36.985466   80  numpy\n",
       "90   19.391415  249.953203  0.009924    39000000.0  32.926979   90  numpy\n",
       "100  12.264333  191.765775  0.009911    30000000.0  25.101238  100  numpy\n",
       "110   6.964153  122.694511  0.009961    19000000.0  15.849783  110  numpy\n",
       "120   3.555150   66.036318  0.009604    11000000.0   9.307451  120  numpy"
      ]
     },
     "execution_count": 83,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "epsilon = 0.01\n",
    "batch_size = int(1e6)\n",
    "result_numpy = run(\"numpy\", sampling_payoffs, epsilon=epsilon, \n",
    "    batch_size=batch_size, bs=bs, rng=rng)\n",
    "result_numpy"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 84,
   "id": "8fee1267",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAm8AAAHPCAYAAAAFwj37AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvZiW1igAAAAlwSFlzAAAPYQAAD2EBqD+naQAAbGVJREFUeJzt3QV4U+f+B/BvtGnSpl4qtAWKFyvuw8YYjME25mPC3O7ddudyZ//duTt3250wFyYML4MxYLi7Uyil7vGc//Me1o60BdqS9kS+n+cJSc45Sd8fJ/LLqypJkiQQERERkV9QK10AIiIiImo4Jm9EREREfoTJGxEREZEfYfJGRERE5EeYvBERERH5ESZvRERERH6EyRsRERGRH2HyRkRERORHmLwRERER+RGt0gXwVd9m7cK6nXl49rahDTp+854CPPzusnr3tYo24oNHzvZyCYmIiCgYMXmrx6/L9mPGnO3o2i6mwY/p3CYanz5+jse2HQeL8Ownq3HZ2R2boZREREQUjJi8naCw1IK3v9so16IlxYU16rE6rRpRZkPNfavNiQ9+2oJRfVMwpn9aM5SWiIiIghGTtxPsPVwKrUaNN+8diS/n70RecZXH/lXbcvHFvB3Izi1HTEQohmcm49KzO0Kn1dR5rm+ydsHmcOH687u1YAREREQU6Ji8naB/RoJ8qc/aHcfw/KdrcMOkbujVIQ5HCysxfeYmHM6vwINX9/M4trTChp+W7MU1E7oi3KhvodITERFRMOBo0wb6ZuEujBuYhnMHtUFirAm9O8Xjtik9sWxjDo4VedbQzV5+AMZQHc4Z1Eax8hIREVFgYs1bA+09Uopdh0owf+XBmm3SX9fZx8rlEaXVFq05hNF9UxCiq9ucSkRERHQmmLw1kOSWcNHI9hjVL6XOvujwvwcq7M8pRW5hFc7q3bqFS0hERETBgM2mDZSaaJb7tyXFhtVcCkus+N8vW2GxOWuO27qvEJFhIWibFKFoeYmIiCgwMXlroCkjO2D5phx5FOqR/Aps3JWP175ahyqr02OKkH1HStEm0axoWYmIiChwsdm0gYb0TML96ItvF+6WBy+EG3XyyNRrz8vwOK6ozIpwE0eYEhERUfNQSZJU3e+eiIiIiHwcm02JiIiI/AiTNyIiIiI/wj5vYhoQthwTERH5LZVKhWDC5O0vBQUVXn9OrVisPsqE4uJKOJ1uBJpAjy8YYgz0+ATG6P8CPT6BMTZdbGwYgo1PJW9iCo67XlmMmy/ogTH9U+s9ZvHabLz8xbo62z945GyPVQ6IiIiIApHPJG9Olxsvfb4WVrvrlMcdOFqG7umxuO+qPh7bzWEhzVxCIiIiIuX5TPL2xbwdMIacvjgieWuTZPaYGJeIiIgoWPjEaNMtewswd8UB3HVZ7wYlbynxwde+TUREROQTNW8VFgde+XIdbrqgB+KiQk99bJUdhaVWbN1XhF+X7Ud5lR0dUqJw3cQMJMedPKEbPXr0SffNmzcPGo1G7kjpbRqN2uM60AR6fMEQY6DHJzBG/xfo8QmMkfwqeXv3u43okhaNEb1bn/bYg7nlNVN7iFo6m8MlL1X1wFtL8ea9IxEV3vSmVDECprmYzadOSv1doMcXDDEGenwCY/R/gR6fwBjJ55O3RWuysXV/Id66d2SDjs9oF4MZT46D2aSvmdPloWv7YdrTC5C1OhtTRnWo93FZWVmnfF6RDIqhy94mfl2IF2lZmQUuV+AN/Q70+IIhxkCPT2CM/i/Q4xMYY9NFRho5z1tLWrjqEErKbbju6fke29/5fiOWbjyCJ28cVOcxEbVGlRr0WrSKMaKwxHJGZWnOeXXEizRQ5+0JhviCIcZAj09gjP4v0OMTGCP5fPL2ryuPN32e6OZns3DlOZ0xok/dZlQxqOHT2dvw0aNjYfhrZGqV1YGc/AqMPcm8cERERESBRNFegzERoUiKDfO4VNeuiX0ut4TiMmtNgtencyu4JcgDHA7mlmF3djGe/Xg1IkwhGN2PyRsREREFPp8e8lFQYsHVT87D0vVH5PtiNOr/3TIYFpsTD7y5FI++txymUB2euXUI9DoNfInL6cLetSuxetZP8rW4T0RERHSmVBJXZZcHLHhzbdOdf2TBtPUHRKj+HgRRKplQmXEhOg09+bQl/oZr8fm/QI9PYIz+L9DjExjjma1tqgqyAQs+XfPmj0Tilrj1M5jhOXpV3BfbxX4iIiKipmLy5kWiaVTUuAm1fwRU3xf72YRKRERETcXkzYsObl4nN5WerPZWbBf7xXFERERETcHkzYusZYVePY6IiIioNiZvXmQwx3j1OCIiIqLamLx5UVr33vKo0pON3xXbxX5x3KEtG7Dj61dRdnhfSxeTiIiI/BiTNy/SaDXydCBC7QSu+r7YL44rWzMLyaUboZr9FA6tX6lAaYmIiMgfKbo8ViAS87jt/GtUacQJ04WU4e953spKShFrzZZT5zLJiISumYqWmYiIiPwHk7dmIBI018AROLx1HSRrOVSGcLTO6C3XuAnmyAg4L34eW5fMRqjJiOQQvcfjd837Bga1E62HTIDaGKFQFEREROSLmLw1E5GopfcZcNLZpKNjIjHwwivqPM5aVYWIA1kwqmwo2v8bIqa+Bl2oqQVLTkRERL6Mfd58zPY1qxECu3z7aGgHJm5ERETkgcmbj+k5dDgODnwI6zS9EDNgosc+t9uN/d+/htLNiyG5HIqVkYiIiJTDZlMfo1ar0LNnR0Bcajm4eT1iCzcAKzbg0JY/kHb5o4qUkYiIiJTDmjc/cnTjiprblQl9FC0LERERKYPJmx/pPOl6rEi+BpvQGR2GjPbYV1aQh9yZL8OZsx3SyWYJJiIiIr/HZlM/Eh0RirETRsItjYBarHJ/gv1Lfka7ws2wzNqMiowLkDhkkmLlJCIioubDmjc/VDtxs9gcMORtk2+7JBVC0vsrVDIiIiJqbkzeAkCIXouqkfdjrm4stpuHIDoh0WN/7oY/ULbkU7jL8hQrIxEREXkHm00DpCYus3MCMjtfAYfTVWd6kfLVP8Mk5aFi5yLoJj+J0Pg0xcpKREREZ4Y1bwFG99cSXNX27NyLaHehfDsPsQiJTVGoZEREROQNTN4CXHxKKn5P/yfm2nrD3mU81GrPU56/+AvYNs6FZK9SrIxERETUcGw2DXCRYSG4YEwPVA3tihC9Z+JWnJcH7c6FsKvcqNgwD9FTX4aqVnJHREREvoXf1EHCaNBCUysx275iKbQqt3w729SFiRsREZEf4Ld1EAvrNgKfhVyBFbaOaDP8fI99TqcdZXNeh2P/Gkju4wkeERERKY/NpkGsR3oMeqSPRV7xUERGGT327Vq2CCnZ62HNXg9nu6GIGnODYuUkIiJqLq7KUhQu/BhV+zZActhhSO2KmDHXQB/bWt6f/+u7KN+w0OMx2og4pN7xnkIlZvJGYlBDrcRNLK9VsWttzf3imJ6IUqBcREREzS332+cByY2ESx+BWm9A8ZIvcfTzJ5Fy21tQ60JgzzuIyMEXwtxvfM1jVCplGy7ZbEp1OF0SDqZfgg+tY7FB3R1tevbx2F91dB+qst6DM/+AYmUkIiI6Uy5LBbSRcYibcBsMSe3l2rbIoRfDVVEEe362XJkhrkMS20MbFlVz0ZgioCTWvFEdOq0aF4/qgKrBbVFaaaszvcjehd+jjWUryvf+Cf2ke4DkXoqVlYiIKCcnB1OnTj3p/qysrHq3a0LD0Gry3R5NqKWrfoEmPEZO5JzFuZAcVuhik+FLmLzRKUeoisuJiorLEVW5T66zrZL0aJXWE3anYkUkIiLyiuq+bSqNDq0ueVBuQrXkHZL3la2ejaq960V7KYzpmYgecQXUBhOUwuSNGqXKocKXpmsQVbABvdpFolt4GOzFlTX7rVuyoKoqhq7bGKiNkYqWlYiIgkNSUtJJa9caKqL/eTD3HovSNXNw7NvnkXT1M7DnHwJUamjCo5FwyUNwFOeiMOsTuSk18aonFOv7xuSNGqV1fBjumzoQew53QVKc568Oh8OOwmU/wKyqhG3TXIRd+QrUoWbFykpERNRQ+rjjy0fGnXcbbDm75SQu7rxbYe4zDhpj+PFj4lOhCYtEzscPwZazB4bkjlACByxQk7RvHQGzSe+xbevqdTDh+DJb2Zo0Jm5EROTTXFVlqNj6ByS3q2abqE3Tx6bAVVEo365O3Krp41Lla2f58XXDlcDkjbymyNAaz1suxgJLNxj7TKiz3/L7x7DvWALJaVekfERERCdyVZQg78dXYdm/qWab5HLClrsPutgU5P38Bo5+/oTHY2xH98jXIsFTCptNyWtG9W6NQRkJWLcrE226JXjsO7JrO8w7FsO5YzEcO5fCNOlRxcpJRERU3Qwamp6JwvkfQjXhVmgM4She/j3c1kpE9j8PtmMHcOzb51C89BuEdRsOR2EOCub9F2EZw2om8VUCkzfyqtAQLYZ0T6yzff+aZej51+0Dhi7IaPGSERER1SWmCin67XPkzXxVTtoMqV2QdPXT8ioK4hJ/4b9QsuwHlCyfKY8wFYlb1IjLoSQmb9Ts3G4Jy9EbC0vNGGHajYHDzvXYL9kqYV3yIXRdR0GTnAGVSqVYWYmIKLioDSbEnnuTfKlPWJfB8sWXMHmjZqdWq3D/Fb2x50g6isrOgsHouRzX1gU/IS1nHZwH1kHf9wKE9J6kWFmJiIh8HZM3ajHtkyMAcTmB0+UGDm+Uh864JaAqIRMhipWQiIjI9zF5I0Udya/E+5Zz0d69H33jrRiSdHwIdjVn9ubjNXLdx0IdWbcvHRERUbBh8kaKSksIxwu3DcWSDe2QlFp3RYaDv32HeOtBOLb/BuOkR6Fp1V6RchIREfkKJm/kEyNUxw3wrHETDh04ArPlCKACSlSRCItvp0j5iIiIfIlPJW9H8itw1yuLcfMFPTCmf90vc6Gs0o7pMzdjzY5j4jsdwzOTcd3EDBj0PhUKecH6w3bMK5mCQSG70aNbOlJqrSFnW/ezGA0BfZeRUIUot0AwERFRS/KZjEd0XH/p87Ww2v9eoqI+z32yGla7E/93y2BUWhx44+v18mPuvrx3i5WVWsakoW3RrW00Fq9PRZezOnnsqygtgWPtL9BKDjg2z4fpipeh0ugUKysREVHQLY/1xbwdMIacOpfccaAIm/cWyIla+9aR6NkhDrdf3Au/rc1GYamlxcpKLSc9OQLXn9cVep3GY/vWFcuhdjvk27lhXZi4ERFR0PCJmrctewswd8UBvH7PSEz7v/knPW7rvkJEm0OQ0urvRWK7p8fKzafb9hVhWGZyvY8bPXr0SZ9z3rx50Gg00Gq9n8dqNGqP60CjVHySJOHn7Gh8XzoZIwzbMaD/eI/zJ0luVC54F/q2faBr1xcqTdNf5jyH/o8x+r9Aj09gjORXyVuFxYFXvlyHmy7ogbio0FMeW1BqQWyk5zE6rRrhJj3yS86s5i0qqvn6TJnNp47L3ykR32v3jMD8lYeQV9wLnXt189i3belvMOxZCceelTB1HYJWF9xzxn+P59D/MUb/F+jxCYyR/CJ5e/e7jeiSFo0RvU+/wKvN7oJO69l8JohtDufJ+8plZWWdtianuLgS3iZ+XYgXaVmZBS4xGW2AUTq+s3okyNe1z93e5Ytr1k4tiekJ/RmcW6VjbG6BHp/AGP1foMcnMMami4w0Bt2yioomb4vWZGPr/kK8de/IBh0foqs/SRPbQs5wtKnT2XxvFvEibc7nV5ovxSdGLE/Py0R7bRKGmrMxpFMfj7K5S4/Btvo76Luf06g543wpxuYQ6PEJjNH/BXp8AmMkn0/eFq46hJJyG6572rOf2zvfb8TSjUfw5I2DPLaLJtM/txz12OZwulFeaUdMhKFFyky+LTkuDI9c3RdzVx6CKn0ENGrPmtpDv/+ImKOr4dy3Goazroeu0zDFykpEROR3ydu/ruwNm8OzJu3mZ7Nw5TmdMaJP3WbUjPQYfPzrNuQUVCApNkzeJkafCl3bRrdQqcnXpSdF4PYLutfZXl5pg3RkizzG2gktNKm9Tvk8ktsNx5GdqMixwCGFAnEdoFKzoy0REQVx8hYTUX+nxYiwEHmfyy2hrMIGY6hObjLtlBqFLm2i8eJna3DrRT3l+d7e/m4jRvZNOelzEVVbsvEofi45H330+9EzxYCBoX+PWhYcu5bBVXQY+m5j4MrfD9vyzyFVFqPir/0qUxRCBl8JXdu+ipSfiIjIJwYsnEpBiQU3PLMA/7w0U15xQXRIfPja/njvh0145N1l8txfQ3om4YbzPUcbEtVndJ/W0GvVWLjWhIvOzvTY53K7UPrnTIRYC+DYNE/0jqvzeJHIWRe8BZx9BxM4IiJSjEoSQy2DnPgvKCiorl/xHjH3mJiCRIyGDMTOmf4an1uSoK41Mmnb+k1IXPUatCo33CoNVJJLnj+wNvFmUZuiYbr8pYBoQvXXc9gYjNH/BXp8AmNsutjYsKAbber/3z5EjVQ7cRN+2urAEyUXYaWtHdQnSdwEsV2qLIIrd2ezl5OIiKg+TN6IAFw6qgM6dkxFnqFtg453V5Y0e5mIiIjqw+SNCEC7JLM8QrVfZscGHX+4wqe7ixIRUQBj8kZ0gsLQFBS7jDhZT1CxXezP09e/ji4REVFzY/JGdILIsFD8UNVPvl07gau+L/aL44iIiJTA5I3oBB1TIpFt6IiPKs5CidvosU/cF9sPGzrKx0kOG5yHNipWViIiCk7suEN0ArVahSvGdMDbM23YXJqCdG0ezGoLytyh2OuMhwQ1bj+vA1SQUDznLehyN0Pfbwr0vSYE3VB1IiJSBmveiGrp0yket1/QDZHhodjjTMA6e1v5Oio8VN4u9hdvWSYnboJtwyx5Al8iIqKWwJo3onqIBC2zQxz25pTCIamgU0nymqmiZk5M6jx9YyhSqzJxbuhGLDFNxOQwrq1LREQtg8kb0UmIRE2spVt7RnDRPHr1uV3wxvcOHEIX3Hn+SKWLSkREQYTJG1ETJMWa8OjVfVFldcBk0Hnss+9YAk10CjTx7RQrHxERBS4mb0RNFBaqky8nsu5bB/vvH0Ol0cEw6mbo2vZRrHxERBSYOGCByEvcbjcOLZ0lj0SFy46Kw7uVLhIREQUg1rwReUlRuQ1vFw3DJC2gVUtISR+HKKULRUREAYc1b0ReEhsRioeuGYCFIWfDMOIGtE2KVLpIREQUgJi8EXlRQrQRT04bgP4ZnmufussLUDX7JbgrihQrGxERBQYmb0ReptN6vq0kexUKfnwRrsNbUDnzKbiKjihWNiIi8n9M3oia2f4DOaisqJRvF1kkWNUmpYtERER+jMkbUTNzGGLwvm0iNttbY23yZTBFsi8cERE1HUebEjWzTqlRuOeaYZi7qo286P2JJLdT/g2lUvN3FBERNQy/MYhaQHyUEVef0wlazd9vObFGamnWR7DMfwOSw6Zo+YiIyH8weSNSSPnqn6HZvxyuQxtQMetFSNLxtVOJiIhOhckbkQJErdusnYDFfXx5rT/snaFS8e1IRESnxz5vRApQqVToO+IsTJ+pQjttLs4dP1HpIhERkZ9g8kakkI4pkbjl6rNRaXUiKjzEY5+7LA9qc7xiZSMiIt/FdhoiBcVGhiItIdxjmyNnJ8q/fgiWFV+xHxwREdXB5I3Ih0jWCpTNfg1qyQXn5rmo2LRI6SIREZGPYfJG5EMKrBr8XNkTLkmFnY5EHDH3UrpIRETkY5i8EfmQuMhQDJtyOT5xjENlv+vRuW2s0kUiIiIfwwELRD6mfXIErr/+QoSFHp9GpJrbWg53cQ60iZ0UKxsRESmPNW9EPqh24iY57Sj46WVU/vI8rNuXKFYuIiJSHpM3Ij+Qv2oOQksPQA03Sv74BlXl5UoXiYiIFMLkjcgPHIkZiKW2LrBJWiyJuhChYWFKF4mIiBTCPm9EfiCzUytEmm/Fz79vxFWTBssrNBAR0ZlzVZaicOHHqNq3AZLDDkNqV8SMuQb62NbyflvufhQu+Ai2o3uhMZoRMWAiIvpNgJJY80bkJ9ommjHt0mHQ6zQe2yvWzYGr5Khi5SIi8me53z4PR9FRJFz6CJKnPQ+1To+jnz8Jt8MGV1U5jn75FHRRCUie9gKihl2CokUzUL5R2Tk4mbwR+bHKLb9BWvM1ir99ErbD25UuDhGRX3FZKqCNjEPchNtgSGov17ZFDr0Yrooi2POzUbZ+AVRqLWLH3yLvC+85ChH9z0PJ8pmKlpvNpkR+yu1yIm/lHIiZ4EIkK5b/sRYjL+uidLGIiFpcTk4Opk6detL9WVlZ9W7XhIah1eS7PZpQS1f9Ak14jJysFf/+FQxpXaFS/93iYWjTDSXLf4CzogTasEgogckbkZ9Sa7QoHnAHCn9/DwVSJHqNvVDpIhER+a38X99F+YaFUGl0aHXJg1DrDXCVF0Ifn+ZxnDYsWr52lRUweSOixuvdLRUHo+9HmN2FhGij0sUhIlJEUlLSSWvXGko0h5p7j0Xpmjk49u3zSLr6Gbgddqg0nqmSSnt8Hk7J5YBS2OeNyM+lJUWic5sYj23Owmwc/f4FuK0VipWLiMif6ONSEJKYjrjzboM2Ml5O4lRaPSSX0+M4yXk8aVPpQhQqqQ/UvJWU2/DhL1uwbkce7A4XuqXHYtrEDKS0Cq/3+MVrs/HyF+vqbP/gkbPRijUPRHBXlaD455cQ5ihFzuf/RtyFDyEkKk7pYhER+RxXVRks+zfB1GVQTb82lUoNfWwKXBWF0Jpj4Cov8niMs+L4fW2454/moErenvnfSkgS8PgNAxEaosWMudvx6HvL8f5Do2HQ1y3egaNl6J4ei/uu6uOx3RymXAZM5EsKj+XBYbPBoAZKbSqUFjiQEaV0qYiIfI+rogR5P76KBIMJxvRMeZuoabPl7oOxYz9oTREoWzcfkttVk9xZD2yBLiYJGlNEcDabVlTZER9txJ2X9ELH1Ci5tu2yszuhqMyKQ7n1L/8jkrc2SWZEmQ0eF42ak5YSCXFtO6Jg0N3Y4UxGdtdrkdEhSekiERH5JH18KkLTM1E4/0NYDm2FPe8Q8n55E25rJSL7n4fwnqPhtlmQ/+s78tQhYn630lWzEDlY2QFiita8hRn1uO+qvjX3Syts+HHJXsRGGJB6kmZTkbwNyEho1N8ZPXr0SffNmzcPGo0GWq3381iNRu1xHWgCPT5/jrF3ny7Ia/cYBkaGeqzGIHewVWtrtvlrfI3BGP1foMcnMEbltJp8N4p++xx5M1+VkzZDahckXf00tBHHu5skXP6YnNwd+fA+aMKiED1qKsJ7jFS0zCpJEo2Wynvr2w2Y9+dB6LRqPDptAHp3iq+3pu7yx+bgrMzWOHC0FOVVdnRIicJ1EzOQHBd2RskblxuiQCeq/fd88jQK7SHoN+1eaHTHR0wREZF/8Znk7VBuGewON2Yt24elG3Lw/B1D0b615/wpW/cV4sG3/8DwXsm4YER72BwufLNwF/YeKcGb945EVLihSX9b/BeUlFTB28SvC7M5FGVlFrhcbgSaQI8v0GIUa/epdx1f0uVgSEd0vfohhBp0ARNfMJzDYI0x0OMTGGPTRUYag64CRvEBC9VSE8zy9T8uycSuQ8X49Y/9+OdlxzsPVstoF4MZT46D2aSvOVEPXdsP055egKzV2ZgyqkOT/77T2XxvFvEibc7nV1qgxxcoMR6W4pAkqaGChM3abugiSTUfoIEQ3+kwRv8X6PEJjJF8PnkTfdw27s7HkB5JNW3garUKqa3MKCy11PuYiFqjSsWI1FYxRhSW1H88ER2XMfJc7AiPxaZNOzHponOhUftWvxMiImoYtdJzvL04Yy027i6o2eZ0ueVm0JSEugMW5q44gCsemw2r7e8J86qsDuTkVyC1nuOJyFPnvv0w5borYTR49nezlxxTrExERORHyVtaohl9Osfj/ZmbsGVvAQ4eLcOrX65DRZUDk4anw+WWUFxmlfu2CX06t4JbAl75ch0O5pZhd3Yxnv14NSJMIRjdL1XJUIj8hrpW35Cy7X+i7IsHsObHL+BysymDiMjXKd5uIqYK6dkxDi/OWIN7Xv8d5ZV2PHfHUMRHGVFQYsHVT87D0vVH5GPjokLxf7cMhsXmxANvLpUn8zWF6vDMrUOg1x2fPI+IGs5Zkovcma9BAzc65c1H1k+zlS4SERH5+oAFkXzddlFP+VKbWO7ql5cneWwTI1CfvnlwC5aQKHCpzfEoSjkL8YcWYp2jHToNHK50kYiIyNeTNyJSjlqtxsCpt2LlnDYIN7WTuzIQEZFvY/JGROg4cHidofvu8nwcPpKP1M5dFSsXERH5YJ83IvI9kq0SBT++COOSV/DbrDlwi5FCRETkE5i8EVEdxSt+QKglDyEqJ1pnz8XmPXlKF4mIiP7C5I2I6ogaeimKorqhwh2CramXo2fHVkoXiYiI/sI+b0RUh0qrR+qUe3BwzwFMTG+jdHGIiOgErHkjonqpVGq06dDOYxktSZKQt/Q7rFi9Q9GyEREFMyZvRNRgZat+ROj2WUha8yZmzV7GFRmIiBTA5I2IGkSyW+DYvkS+Ha2pRHluNlwujkIlImppTN6IqEFU+lBEX/IEKk3JyHL3x7mXXMBl6YiIFMABC0TUYGpjJFpd+jjGS2rodZ4fH6I/nKrWovdEROR9rHkjokaPRK2duDmO7MDGT57H4rUHFCsXEVGwYPJGRGfEXZKLsjmvI92+A9Er38JPi7YoXSQiooDG5I2IzoirohBqySXftkoh6Ng2QekiEREFNCZvRHRGdK0zYL7gEZRFdoR14DR0aRurdJGIiAIaBywQ0RnTxKYh+ZKHkVxru+RyorDCgdiIUIVKRkQUeJi8EVGzkJx25H/3DJbmRSBi0BSM7pvC0ahERF7AZlMi8joxbUjJ/PcQWnYQYw2bYFnxJTbvK1S6WEREAYHJGxE1C2NKJ4j1F2ySFpbkfujeLkbpIhERBQQ2mxKR14nm0ZDu50AdHofcoxWY3HcIm0yJiLyEyRsRNRtdm97o2Kbu9vwjh5FrC2VtHBFRE7DZlIhaVOXmRdD++m/8/uOPmLfqkNw/joiIGo7JGxG1GFfeXrhWzIAWblwdthQ7N2yE3eFWulhERH6FyRsRtRh1bBp0nYbKt5c6MnDpxaMRotcoXSwiIr/CPm9E1GJUai0Mw6+DM6U7hsV3R3iYQekiEREFT81bRZUdK7ccxZzl+1FaYcPhvHL2XSGi0xKjTnXt+tVJ3JyF2fhu1kps2F2gWNmIiAK25u3rhTvxbdZu2B0uiMH/HVKjMGPOdpRV2vHUzYMRFqrzfkmJKGC5K4tR8vOLGGyz44PtI5E3YjDG9ktRulhERIFR8zbrj334Yt5OTD4rHS/9Y7g8Cadw3tB2yC2sxOdztnu/lEQU0Gx/foUQRxnC1VacZ1yHmHC90kUiIgqs5O3iUR1w1bguSG8dWbO9b5dWmHpuF6zcluvtMhJRgDMMvRqaxM6w6CKR130q+nRupXSRiIgCp9k0r9iCbun1T6zZOj4cJeU2b5SLiIKIKsSE0PH3wlBVgnHhsXX2V1mdMBo4voqIqEk1b7GRodhxsLjefbuzS+T9RESNpdJooa6VuEluF44s+gqPvbsYa3fmKVY2IiJf0uifsmf3T8WX83dCr9WgX9fjTRtWmxPLNuXg26xdmDwivTnKSURBRoxeL138Kcx7luCmkEhM/6kKIRcPQbe2XFKLiIJbo5O3KaM64FhRFT75dat8ER55d5l8fVbv1rh4VEfvl5KIgo5UVQJN9hr5ditNKfomq9AlLUrpYhER+V/yJuZouuPiXrhwRHts3FOA8ko7TKE6dGsXg7REc/OUkoiCjtoUBdPkx1A151Ucih6CScPHQaPmojBERI1O3rbsLZDndUuKC5MvJyostWD+ykO4fGwnb5aRiIKUOiIBpilPo4e27tQhYnLw4gob2iTwRyMRBZdG/4x9+N1luP/Npcgrrqqzr6DEgq/m7/BW2YiIoKoncbPuWY1NX7+NF2aswartxxQpFxGRUprUBlFUasXdry7Bpj353i8REdEpuPL2wfrb++jl2oSrDVn44bcdsDlcSheLiMi3k7d7r+qDjHYxeHz6Cvz0+17vl4qI6CTcZXnQ/LW2i1UVglsvyESITqN0sYiIWkyTZr0MDdHi4Wv747M52/Hhz1uw93AJ7ryklzyYgYioOenaD4Qq1Az7lgXo3PtaJMSxzxsRBZczmrJcLIeVlhCON77ZgOy8Ckwd18V7JSMiOgltclf5Yqy1XXI78cvybGS0jUZ6coRCpSMial5nvN7M8MzWSIgx4T8fr8Jzn65u9OPFclof/rIF63bkwe5woVt6LKZNzEBKq/B6jy+rtGP6zM1Ys+MYRD3f8MxkXDcxAwY9l84hCmaSrRL53zyF/II2eH5FF0wb3xn9u7TC9gNFcOwvhk4lIT0pAmo1WwiIyL81OuPp1i5WbjY9UcfUKLz8z+F45n+r5CbUxnjmfyshScDjNwyUn3fG3O149L3leP+h0fUmZM99shpWuxP/d8tgVFoceOPr9bDaXbj78t6NDYWIAoSocbMseAuhlmO4xHQM+iondmUn4LvFuxFtyYZZbUGZOxRFoSm4fEwn9OkUr3SRiYhaLnn7z21D6t0eExGKF+4cJo9EbaiKKjvio424ZHTHmgl+Lzu7E/7x8mIcyi2Xk8IT7ThQhM17C/DO/aNqauZuv7gXnvjvClw9votcBiIKQio1NHFt4crZDqvaCHtCD5RvXYF/GFcjyvz3tEbFLiN+mNUPwAQmcEQU2MnbojWH0LdLAswmvXz71FQYFV27J0r9wox63HdVX49JN39cshexEQak1tNsunVfIaLNIR5Nqt3TY+Xm0237ijAsM7lBf5eIAotKpUbIgEugMscjJDIZ0syVmBa2pM5xkeoqefs3WTpkdriSTahEBJelHEW/fYGqPWvgtlmgj09DzKirYEg53o//6BdPwrJ/k8djDKkZSJr6lG8nb699tR4v/WO4nLyJ26ciPgpH9U1pdEHe+nYD5v15EDqtGo9OGwBDraZZoaDUgthIz9o1cXy4SY/8EstJn3v06NEn3Tdv3jxoNBpotd5fdkejUXtcB5pAjy8YYgy0+LTdR2H7/gKMVS2X79ceAC/ui24aYv/eI+PRpW0sAkGgncdgi09gjMrJm/kqXJXFiJ98NzSmSJSt/hVHv3gKyTe8BH1MMux5BxE77iYYO/WveYxKo2w/+wb99Q8ePhtRZkPN7eZw/rB2GDewDWYt2yf3nXv+jqFo3zrS4xib3QWdtu58TmKbw3lmk3RGRZnQXMzmwG7ODfT4giHGQIpPvWYVojR1V4A5MYET+/MK9yGqdxoCSSCdx2CMT2CMLctRdBSW/RuRdPUzMKR0lrfFnHMDqvZtQMWW3xHRdzxclaUISe4AbZhnV66GcFWVo3LnSlgObIKzJA9uWxU0RjO0EXEITc+EsX0faAym5kneRL+0+m7XFM7lRpXNiXBj3WVsGir1r/UJ/3FJJnYdKsavf+zHPy/L9DhGTMRZX5ImtoWcYrRpVlbWKf+2JEkoLq6Et4lfF+JFWlZmkf+PAk2gxxcMMQZifHp7aYOPa473vRIC8TwGU3wCY2y6yEhjk+eZVRvNSLj0YYQkptdsq34ut7UStrwDcpuiLqZx3bJcVWUo/uM7lG/MAtxu+fHayHjoohPl57XnHULF1j+g0upg7j0WkYMugMbU8OmNGl3vJ/7Dv1m4C4lxYRjRuzU27ynAs5+skkd+imk+Hrqmn9yXrSFEH7eNu/MxpEdSTTWq6IOS2sosL3Jfm2gy/XPLUY9tDqcb5ZV2xEQcrxlsKqez+d4s4v+sOZ9faYEeXzDEGEjxJSQlwbqhYccFSsyBeB6DMT6BMTZNTk4Opk6d2uhKHFHrJWq/TlSxYwWcxbkwtsuUkyy1wYiCuf+Va+jUegNMnQcjaugUOfGqT8X25Sic9wFCEtsjbvytMHbsB7UupM5xohauau96lK9fgOzpdyH2nBsQ1rX+QaG1Nbrh+fN5O/D1wl1ysia8P3OTXON2/aRuOFpYiU9mb2/UHG8vzliLjbsLarY5XW7sPVKClIS6AxYy0mNQUGpFTkFFzTYx+lTo2ja6saEQUQDSJnWCQx8h922rj9juCImQjyMiOpH18A7k//I2jJ0GwNihDxz5hyA5HTAkdUDiZY8hcsgUlG9YiPzZ7+JkytbMRcJlj8k1emEZQ+tN3AR1iFFO1hKvfAKJlz6CsjVz0Gw1b7+vP4Krx3fFhCFtkX2sHIeOleOuyzIxqm8qzEY9PvplK26f0rNBzyWmB+nTOV5OAMXyWiIJ/CZrFyqqHJg0PB0ut4SyChuMoTq5ybRTahS6tInGi5+twa0X9ZTne3v7u40Y2TeF04QQkUylViP8rKnyvG8iUTuxNUVO6FRA+PCpcEsSZv2xH2P6tobJUP8vaCLyD0lJSaftInU6lTtXIe+n12Bo3Rnxk++St8WOvwXRo6+BJjRMvq+PT5UHK+TNfAXRo66GNiyyblmaMAo1JKk9kq7+vwYf3+iat6IyKzqlHe+0t3rbMbltuE/nVvL9mMhQVFqdjXo+MVVIz45xeHHGGtzz+u9yE+hzdwxFfJQRBSUWXP3kPCxdf0Q+VvwtsaZqq2gTHnl3GZ7/dI2c/N12UcOSRSIKDrq2fRF69h1Q1+pgrA6LlrcjIhFHPnkQq1asw8tfbUCV9XhLAhEFp9LVs3Hs+xdh7NAXCZc+BLX2ePcvlVpTk7hV08cdn1HDVV7YpL9lO7oXlTv+hMva9D63ja55izYbcKyoEhntYrBqWy7aJUcgIiykZhJdMUdbY5hCdXLyVV8C1iraiF9enuSxLTI8BA9eIybZJCI6dQKnTesN5O+GUWVBlRQKxHWAVJaHip//gyhnGW4PX4C3C8bhQG46urZh1wuiYFS2di4K538Ic7/xiDl7msfgh5zP/g1tZCvET7y9ZpstZw+g0cqDD07HWV6MvJ9eRWibHnI/OZEkFi74n9wMoDaGI+mqJ6GPS210mRtd83ZW79b44KeteHz6CmzbX4iz+x//o//9cTO+mLcTI/o0fo43IqLmakLVJXdBWMYw+VrcVxkjoAk/Pr9bhcqES8dnMnEjClL2whwUzP+f3MctcvCFcFWWwFlRLF/EqFBT54Go2LwYZWvnwVGci4pty1C46DNEDjhf7rN2OkWLPoWjMEcezSpJbpQs+x6hbbsfn0MutjWKFs1omZq3q8Z1hkGvwZZ9hbhmfFeMH9xW3r47uwQXjEjHpWM6NqkgREQtQaUPhXH8v2D782u06XsR9I0Ynk9EgaVyxwrA7UTVzpU4tHOlx76wHiMQP/FOefm90jXHa8w0YVGI6H8eIgdf0KDnF/PFxZ49Dcb0TFizt8tzxkX0m4CQVm0QOXCy3MeuRZI3UZ148eiOuLjWogViXVMiIn+gCjHBcNa0evftOVKKlLgwhOjrTghORIElashF8uVUIvqOky9NIdmt0JiP1+xX7VknTy9iaNP9+E6tFicZFH9avrVGBRGRQiS3G4fnfYwPvvwdr3+3ETbHma3aQkSki06C9dB2SC6nXMsn1kStHgwhVnDQN6DfXH2YvBFR0JPcLlQtmo6Ig4txi2kejh0+jPmrDildLCLyc5GDJ6N46Tc4+Op1cBQfQ8SAifL2Ix89gIrNvyNioOegzIZSdmVVIiJfYLcARceTtUh1JYanSjh3YGCte0pELU8MltKa4+T+boa0DBiSj48LMKR1RdRZl8l94ZqCyRsRBT2VIQyh590Py+yXYOk4Hud1GwiNmg0TRNR4oolUTORbTSx4X73ofbWY0dec9nGn4pVPp+IyK/YcLpFXRCAi8kdqYySMFz6J+B6D6yRuFptTXrqPiOh0Dv/3blTuWo3GqNi+Aoen3918NW9iJvLpP25Gh9aRmDC0Hf7YeAQvf74ObrcbSXFheOqmwYiL4lJVROR/xGzqtVUe3Ib3FxdAFxaJWyd3g1bDGjkiOrm4if9A/qy3ULzkK4R1GwZTpwH1Tuhrzz8kj0AVa6VKkoT48/+BZkvePvl1G5ZvOorMjvHy/Y9nbUPbJLM8v9uMuTvw8a9b5SWviIj8nSN7M+zzXsN5znC8mTsWn83T4brxXZQuFhH5MENyB7S+/iWUrp2D0pWzUPTb51AbjNBGxMuL1LttlXCWFcFtq4LGaEbEoEkw9xlXMwq1WZK3lVtzcf35GfJKC3uyS5BXXIXrJmZgQLdEON0S3vluY2OfkojIJ0eg2pZ/Di1cSNSW4Nyw7ejed7jSxSIiPyDmcxOrMET0HQ/Lgc2wHNwCZ8kxOWHTm2NhbN8Xoe16wpAiVn5p/JySjU7exMLxrePD5dtrdhyDRq1CZsc4+X64UQc750YiogAgPlCN596Dql+eRaUpBT0GXY/W8Z4LVBMRnYoYgCBGlDZ1VKnXkrf4aCMOHC2TF6ZfsfkoOqVFw2jQyfvWbM+TF5MnIgoEanM8jJMehckYAZW67sel6Kdy4iLWREQtodE9b88d1AYf/rwFt72Qhf05pZjw19qm//l4FX5askfeT0QUKNRhMXUSN8luweJVe/DR7O1wc5Q9EbWwRte8nT88HRFhIdi6rxCXj+2MYb2Sjz+RRo1bL+qJcUzeiCiAicTt6LfPIrrEgq/Lx0AFFa4d3xlq1sARUQtp0iS9YrCCuJzo/qkcYUpEgc+y6D2EVx5CuA6YGrYUx8KngWkbEfl88lZaYcPMxXuwfle+PEHvkzcNwp+bj6JtcgQGdmvaIqtERP4gpO+FqDq2B06XBGu7CbhgeDuli0REQabRyVtuYSUeeGspbA43MtrG4EBOqbyywuH8Cny1cBceva4/+nVNaJ7SEhEpTBObBuOE+8QwMoyKSVG6OETk41xVZSj58ydY9m2Eq6IYCZc/hqqdq6Bv1QamTv1bZsDCR79slfu8ffDI2Xj42n6o7qorJuYdkJGAb7N2N6kgRET+QhPbBpp6Ere84kr8smy/PAqViMhRcgyH/3sPytcvgNYcIydycLthLzqCY9+/iKrda1smedu4Ox+Xnt0JYaE6oFYH3XED2+BgblmTCkJE5M8KV89B9tfP4eele/D1oj1M4IgIhQs/gcYYgZTb30WrKfeL+YXk7a0m3w1jx34oXv59k563SYv0adX1d891OF3suEtEQce+NQv69V+jozob08KWYMvefFjtnLCcKNhZDmxG5LAp0BhMdfaZM8+GPT+7ZZK3rm1j5KZRq81Zs00kbGKuo9krDqBL25gmFYSIyF+po1sDf61LWB4Sj/uv6IPQkCaNByOiAKOqZ4JvQXI5m1zh1ehPl2sndMX9by3Fzc8tRLf0WPkPz1y8F9nHynG0sALP3T6siUUhIvJP2sROCB13N1y5uzGyxwTotI1fq5CIAk9oSheULPseoW26y+udylSi9dSNsrXzENK6c8vUvKUlmvHKXWehe3ocNu8pgFqtwobdeUiMNeGFO4ejXXJEkwpCROTPtEldENL7/DqJm1uSsGlvgWLlIiLlRI+8CvbCI8h+9w7k/fyGPFag9M+fceTD+2E9vB3RI65o0vM2qV4/OS4M917Vp0l/kIgoWDjL8rHx12/xzsGOmDy8PSYO5go0RMFEH5+K1tOeR/Hv38j936BSo2r/RoSmZiD+/Duhj09rvuRtSyN/NYrmVCKiYOYuy0P5j8+io7UYl5sK8dVSFXp3jENybN2Oy0QUuHTRSYiffJdXn7NBydvD7y6r06mu9iB41V/bxPVPL03yXgmJiPyQu+QotLbjUye10Rbg1nPbMnEjCkKS0yE3nbptlfXuF7VwzZK8PXPrkEY/MRFRMNOm9oRhzK2wr/sJYQNvQ/tkLh1IFGwsBzYj78dX4aoqr5njTSbmyRX3VSq0e/jb5kneup+kGVTM61ZhcSDcqIdW06Qp44iIApaubV9o0zJhUtcdfVpaaUeE6fj0IkQUmArmfwS10YzYcTdBHRrutedt0oCFtTuO4av5O7Eru0TOHMWIUzH/21XjuqBL22ivFY6IyN+paiVuYuWFQ6uX4Lk/gEtGtMfI3q0VKxsRNS9ncS5aXfwgjO16evV5G11dtmxTDp764E/YnW5cMbYTbr2oJy4Z0wnlVXa5b9zWfYVeLSARUaAQczuVZH2E6A0fY5xmFT6bvxMb9nAaEaJApY9Pg7PM++/xRte8iRq3wT2S8MDV/Ty2Xz62E/7z8Sp88us2vHAnJ+olIqrNdWwPtPuWyrdHGLajLL4XMtpEKV0sImomMWOnIe/H16BSqxGS1AFqXUidY7QRcc2fvOUUVOK6ifWPjBAL0//nk1WNLgQRUTDQJnREyLBrYfvjM2S3n4LLho+BTsv+wkSBTHI5kD/rnZPub7YBCydKaRWG3dnF6N0pvs6+w/nlaBVtbHQhiIiChb7LCGiTu6Kbue5nqOgPpxKj0IgoIBTMmS73e40eeSU0Ju+tQNXo5O22i3ri6Q9XQgUVRvVNQbTZIPd3+3PLUXwxd4fcBy6vuKrm+PgoJnNERCdS15O4WYsL8Na8bAzrkYQBXVspUi4i8i5H4RG0uvBeGDt4d1WqRidv977xu3w9Y+52fD53e8326tlLXvlircfxnLCXiOjUrNnbUTnnFSRWdcd/D3aHRq1C3851Ezwi8i/aqAS4HVbvP29jH/CPSzLlueWIiOjMuSuK4FjwGvRw4HzjOpSrzYgy91a6WETkBdFnXYbCrE+hNoTB0Loj1PpQZZK3Mf1TvfKHiYgIUIdFQ585EfbV3yEvtB3OGX8e2iZ5r28MESmn6LfP4aooQe5X/6fsgAWhsNSCPdklqLQ66tl7vC8cERE1TEjmeVCHx6Jdm95QabnqAlGgCOs6tFmet9HJ29L1R/DaV+vgcLnr3S9aVJm8ERE1jq79wHon9V22+RjMJh16nGSZQiLyXVHDL/GN5O2zudvRITUKN0zqBrPxzH8hipGqn87ejtXbclFldaJNohnXTOiKjHYx9R7/9cKdmDFnR53tv7zMgRFEFDgkpw05372IbTlxWOPqhH9c1B3dTvK5SES+w3JoK0IS2sn928Tt0wlNrX/uXK8mb0VlVtxxcU+0bx0Jb3jhszUoKbfhvqv6IjI8BL8s3Yd/T1+B1+85C63j6y7ieiCnDCP7tMZ15zU+WCIifyA57bDMeRXmsj241LQHzko1th1szeSNyA8c/exxJF37LAzJHeTb8ihPqXpOjr9Ub1OpWqbPW+e0KOzPKUOP9o1fzqG2nIIKbNiVj+fvGCovbC/cfEF3rNuRh8XrDssL3dd2MLcMYwe0QZTZcMZ/n4jIJ2l0UMekwnV0B5xqPdp1ao9zRqQrXSoiaoDEq56EPq51ze3m0OjkTUzC+/SHf6LK4pCbTw16TZ1jujWwb4bZFILHbxiIDil/1+LJs4urgMqquoMhHE4XjuRXyqs8EBEFKvE5GDLocqi0OoSkZuKcVulceYHIT4SmndAyqEJNE2ptLmslLHvXt0zydiS/AsXlNny5YGd1uWpIf91v6MS8YaE69O3iOZP4sk05OFpQid6T6k5QeSi3HG63hGUbczB95mbYnW50S4+Rm1DFSg8nM3r06JPumzdvHjQaDbTNsL6gRqP2uA40gR5fMMQY6PH5e4y6wZeetPtKYZkVHf7qvuLPMTZEoMcnMMbAdHTGE8ebUJPa19lnz92H/FlvIyxjaPMnbx/9vBUJMSZMGdVB7qPmTdv3F+H1r9ZjUPdE9OuaUGf/wdxy+doQosWD1/ST+8p9Omc7Hn5nGV7/1wiE6OrWAjZUVJQJzcVs9s6kfL4q0OMLhhgDPb5AijFnxXz8sOggVlcm4skbB6NL2+iAi/FkAj0+gTH6v7yf34SzrOD4HUmS1zdVh9SN2VGUA42paeMHGp285RdX4bHrB6BXR+8u3SLWRn3p87Xo0iYa915Z/xpgYgqSPp3jERH2d9KYlmjGtU/Nw6otuRiWmVzv47Kysk75t8Vi0MXFlfA28etCvEjLyixwnWRqFX8W6PEFQ4yBHl+gxWjbvgSW3z7EJEmNQvcIvP2dEU9e3x86rSZgYgz0c3gyjLHpIiONPtWtwNR5IEpX/VKrXdJzwIJKpYYhuSPMfc9tmeRNJEsFJRZ406w/9uG/P27GkJ7JuPvy3tCdognzxMRNEM2l4UY9CkrPrExOZ/O9WcSLtDmfX2mBHl8wxBjo8QVCjOJHpv3IDrlrilblRo+wAvS5sDvcLgkulTsgYjydQI9PYIz+z9Sxn3wRcmb8G7HjboI+9vgABm9pdPIm5ncTNWQut4TOadEINdR9ivgoY4Ofb/by/Xh/5mZMHNYON07qdsrs+bM527Fs4xG8+8DomuOOFVWhrNKO1IS604oQEQUK8ZlnGH49rC4XpJBw9Ot5ESLDOeqeyJclXfVUszxvo5O3x95bDqdbwtvfbfQYrHCihg5YEIMfRI2b6ON28agOch+2anqdRr5UVNkRZtTLtXGDuiXih9/24N3vN2HSWekoLrPivz9tkZtae3fybjMuEZGvUanVMIy8SZ4byljrh66omRMDGbwxeToR+bZGJ2+3TenptT8uRo06XRJWbD4qX2r3bxvTLxUPv7sM/7l1CLq3j0X7lEg8ccNAfD5vB+56ZbHcz2NgtwRMm5jhU+3dRETNmcDV5qooxndzluD7bcB9l/VCaiu2RBAFMpUkfq4FOfFfUFBQ4fXnFdOPiFGsYjBEILbvB3p8wRBjoMcXDDG6K4pQ+P0zUFlL8V75aBToW+M/Nw2CsZ4uLf4q0M+hwBibLjY2LOgqcJr07i4stWDb/iI45P/847mf2w3Y7E5s3V+E+6f29XY5iYioHvYNs2CwFcqTbE4xrkL+4GEBlbgRUV3apjR1Hh+w4K7p81Y9Oa+QXM96pERE1DxCBl4GqaIAUukxuLrfiGFdvTuqjSjQuSzlKPrtC1TtWQO3zQJ9fBpiRl0FQ8rxJTotBzajMOszOAqyoY2IRdSwS5s0sa6iyds3C3chvXUEbr2wB35dtl8edSom7F2z/Rg+nb1dHjFKREQtQ6XVI2zcPyAWmTE79XWao9ySBHWQNSkRNUbezFfhqixG/OS75Ulzy1b/iqNfPIXkG16SJ9nN/fo/iBgwEWGT/oGqPWuR9/Mb0BjNCG3bA0pp9BoVh/MrcNHIDkhvHYke7WNxIKcMKa3CccGI9jh/WDt8k7WreUpKREQnTeC04VF1+vIe3HcIj3+0CseKqxQrG5EvcxQdhWX/RsSOuxmhqV2hj0lCzDk3QBMejYotv6N01Sy5Ji56xBXyXG2RAyfB1GUQSv78UdFyNzp5U6uAcKNOvp0Ya8LhvOPrjQp9usQj+9jxJayIiEgZInHLX/QZQhY8A6noMF74Yr3XJ1cnCgRqoxkJlz6MkMT0mm3Vgx/c1kpYs7cjtE13j8eEpnWHNXuH/D7zm2bT1q3Csf1AEbqlx6J1fDgcLjf255TKNXEVVY6/BjEQEZFSHFuzELp3kdwZ+bbwBfgm/Bp5JRqiQJWTk4OpU6eedP/JlsnUGEwwtvdckrNixwo4i3NhbJeJ8k2LoTXHeOwXtdySwwa3pVxuPvWLmrdxA9tgxtwd+HT2NphCdXLT6etfr8cvS/fJ29q3btoiq0RE5B26jkOgjk+HBBX2xI7ErZf0R4heo3SxiHye9fAO5P/yNoydBsDYoY+cpEFzvLXxxG4KguR0+E/N2zkD0+B0upBbdLwPxR0X98IT//0T//1ps7ws1o2TPasXiYioZan0oTCO/xecOdsxvI1nrQJRIEpKSjpp7VpDVe5chbyfXoOhdWfET75L3qbS6QGXZ5ImOe1/7fNca70lNWkyoAlD29XcTogx4d0HRsnri9ZeNJ6IiJSh0huhqydxszuc+Oa3vZgwqA2iwvmZTSSUrp6NwgX/kwcjxJ9/J1R/1bZpzbFwlhfjROK+Sm+A2tDwddwVbzYVqqwOeaJewely48cle/HVgp3YsrfA2+UjIiIvseXuRc4nD2Ljhh144cv1KKn4ez1pomBVtnYuCud/CHPfcfJ0IdWJm2BI6Qrroa0ex1sObpZr51SqJqVQXtHov7zzYBGm/d8CzPpjv3x/+szN+N+srVi89jAeeW85Vm7xXKOUiIiU58o/ANuclxDjLsAd4fOBikLkcwQqBTl7YQ4K5v9P7uMWOfhCuCpL4Kwoli9itGlEv3NhPbIbhYs+g73gMEr+/BmV21cgctBkRcvd6GbTGXN2ICU+TO77ZrU7sWhtNsYPbotbLuyBt77dIM/zNqBbYvOUloiImkQVFg1NWBTcxRZUasyYdkFfdOAAMwpylTtWAG4nqnauxKGdKz32hfUYgfiJdyLhkgdRtOhTlK36FdrIeMRP+med6UN8PnnbeahYXrtU9HVbsfkoHA4XRvY5vhzL8MxkLF53uDnKSUREZ0AdakbohAdgX/MDOg28HBq9QekiESkuashF8uVUjOmZ8sWXNGmSXr3u+MPW78yTpwvpmHp8Zu8qqxMhOg5HJyLyRWpjBAzDr6s3cdu0twAVFuWmPiCiZqx5a58SiXl/HoRep8EfG4+gX9cEeTbiknIbvlu0W95PRET+QXI5cHDOx/hoWzIi42Jx72WZCAv1nNeKiODfNW/XnpeBjbvzcf+bS6FRq3HpmI7y9jteWoSc/EpMHdelOcpJREReJuarqpr3BmJyluG2sHkoysvHkg1HlC4WEXm95q11JKY/NEZewzQtwQxDyPGnuPWinujaJhpRZvajICLyB5K1AlJJjnw7RlOBczrpce7ANKWLRUTNMUmv0aBDp7Roj21DeiQ15amIiEgh6rBoGM97AJa5r0Ld5wqc264b1H8tyk1EAZa8ERFRYFCb42Gc8gxM6rq9aMqq7NBp1Aj9q4WFiHwD35FEREFOVU/iVrpnA974rQy6UBPuuqQnDHp+XRD5CuXWdiAiIp9k3/MnsOh1THL8jIOH8/Hp3J1KF4mITsDkjYiIakgOK+wrvoQaEtpqCzA2Yi8mD2urdLGI6ARM3oiIqIZKZ0Do+HuBEBOsqYMw9LJrER9lVLpYRHQCdmIgIiIPmpgUmC58EmFh0VCp6v7Gd7nd8jyfRKQMvvuIiKgOdXhsncTNbSnHz0t24c3vN8PhdCtWNqJgx+SNiIhOy20pw7FvnkarzR9j6948vPvjFrglSeliEQUlJm9ERHRKkiTBMu81hNny0FWfg4uNK9ElLYoT+hIphMkbERGdkkqlQsjAywBtCJwhkQjrOxFn90tRulhEQYsDFoiI6LS0CR0Reu49UJuiMNgcr3RxiIIaa96IiKhBtImd5OW0ajt8rAwz5u+E280+cEQtgTVvRETUZHm/f4P9W3bit7JBsNhcuH5CF6jV7AtH1JxY80ZERE1iW/sTQnfMRi/tXlxhWo7cwkrYHC6li0UU8Ji8ERFRk2hiUwG1Rr5tD0/Gvy7LRGgIG3SImhvfZURE1CTatEwYxtwOqaIQ4zLGyKNSiaj5MXkjIqIm07XpXe92p8uNFVtzMbR7IpM6Ii9j8kZERF5lzz+E1fNm43+HO+DQsQpcMaYDEzgiL2KfNyIi8hpXYTaqZj2PHlV/YrJxDZZsOIycgkqli0UUUFjzRkREXuMuPgyNo0q+3V6Xh3+e2xnJcWFKF4sooDB5IyIir9G1HwQ4HbDv/B3Jw25HRHSU0kUiCjhM3oiIyKt0nYdD23EoVOq6PXOOFlYiIdrIPnBEZ4B93oiIyOtqJ26S24Vdyxfh3x+uws/LDihWLqJAoHjNW3mVHZ/O3o7V23JRZXWiTaIZ10zoiox2MfUef6yoCu/9sAlb9xXCoNdg7IA0XH5OZ2i4HAsRkU+S3E6Uzn0HiYfXYaQ+Ez/9IaF1XBj6dIpTumhEfknxmrcXPluDHQeKcN9VffHq3WehXXIE/j19BQ7nldc5Vswb9Pj05fLtF+8chlsv6onZy/fjq/k7FSg5ERE1hOvQZmgOr5Nvnxu6EaM7haBXh/p/oBORjydvOQUV2LArH7de1EOuaRMjkm6+oDtizAYsXne4zvHLNuYgr9iCf13RG2mJZgzqnoirx3fFz0v3wuHkenpERL5I2yYT+v6XABotCnpNw+WTBkNTT384IvKDZlOzKQSP3zAQHVIia7bJnVhVQGWVo87xW/cXIj05AmFGfc22Hh1i5ebWfUdK0Sktut6/M3r06JOWYd68edBoNNBqvf9BotGoPa4DTaDHFwwxBnp8AmP0Ddq+58HQcQCizHH1tqpoT1F2f4jvTDFG8pvkLSxUh75dWnlsW7YpB0cLKtF7Unyd4wtLrIiNDPXYFm02yNcFJVZ0Smt6WaKiTGguZrNnmQNNoMcXDDEGenwCY/QB9XzOluTl4j9f7MSoPimYOKydf8fnBYyR/GLAwom27y/C61+tl5tD+3VNqLPf5nDCFHo8Waum12rka/spmk2zsrJO+XclSUJxsfdnABe/LsSLtKzMApfLjUAT6PEFQ4yBHp/AGH1X1Z61qJz/FmIr+2P6jyVwOZw4KzM5YOJrDMbYdJGRwTf1jM8kb39uOYqXPl+LLm2ice+Vfeo9Rq/TwOH0POHVSZsYeXomnLWe15vEi7Q5n19pgR5fMMQY6PEJjNG3uIqOwLbwLWjhwqXGFbDqItEmccApy+9P8TUVY6SG8ImG51l/7MOzH69C/64J+Pf1A+UkrT6iybSozOqxrfp+TASrYYmI/IU6Kgm6jDHy7YLIbrj40nORHNt83VeIAoniNW9iqo/3Z26W+zrcOKnbKas+u7WLwaI12aiyOmA06ORtm3YXIDREi7ZJES1YaiIiOhPisz5k4GXQxKahXfoAqNRn1npCFEwUrXk7kl+B//64We7jdvGoDigpt6G4zCpfKi0OuYlU3K5uKh3YLRHR4QY8/9ka7M8plZtaP529DReclQ5dM4wWJSKi5k3gdB0G10ncJMmNeasOYfmWo3C7JWw/UIQl6w7L1+I+UbBTtOZNzNvmdElYsfmofDnRqL4pGNMvFQ+/uwz/uXUIurePlZtTn7hpIN79fhPuff13ecqQ8UPa4tKzOykWAxEReY9kq8SRb5/D9mPtsMmRhi8X7kal1VmzPyo8BFeM6YA+nerOSEAULFSSGGoZ5MR/QUFBhdefV8wdJ6YgESNZA7FzZqDHFwwxBnp8AmP0H5LdgqpZz8FdcBAuSYUPK0ZgqyOl3mNvv6BbQCVwgXIOlYgxNjYs6Eabsq2RiIh8gy4E6qjW8s0qKQRF7jCo4EZ7bS566/fL1+K+IGrk2IRKwUrxAQtERESCSqWG4azrkWvT4M1NkWilKcXNYVmI0lTVHFPsMuKHqn7YVJ6GXdkl6JwWpWiZiZTAmjciIvIZKrUaB1PHy4nbtLAliFT/nbgJ4r7Y3kN3ECWVNsXKSaQkJm9ERORTIo06XGhcLd+u3ZWp+r7YL44jCkZsNiUiIp+Srs2D9YSm0tpEAieaUhO1eWKK9hYtG5EvYM0bERH5Fmupd48jCjBM3oiIyKeojBGNOq6w1Io9h5nIUfBgsykREfkUTUInqExRkCqLT3qMyhQtH2fbtxaf/GHBtqMOXDC8Lc4dmAZ1kM35RcGHNW9ERORzI05DBl95ymNCBl8Bd9EhWLPewSVVn6O95giWbMiBze5qsXISKYXJGxER+Rxd274wnH2HXANXu8ZNbBf7bcu/gFpyIUJtQdeQo7h5UgZCQ9igRIGPr3IiIvJJIkHTpvUG8nfDqLKgSgoF4jrINXOCYcxtsC7+AJK1AsNG3YaoSJPH4x1ON8Shmr+OJwoUTN6IiMhniURNm9wFYVEmOGqtiak2RiL03HsAWxVMBs/EzV1ZjC+XHsPhgkrcPDEDMREGBUpP/qZ42Q+w7NuApKlP1WzL//VdlG9Y6HGcNiIOqXe8p0AJ//r7iv1lIiIiLyypBUOYxza3pQyl3/4baeXRWFk1CP+ZsRbP3TwQOq1GsXKS7ytdMxfFS76EIaWLx3Z73kFEDr4Q5n7jPV93CmLyRkREAUOSJFiXfAStvRy9Q8rhgBb6odczcaOTcpYXoWD2e7Ac3ApddGKd15M9PxuRgy6ANsx31tFl8kZERAFDpVJB13EIXLm7ALUG2u4XYVgPzy9kCjw5OTmYOnXqSfdnZWWddJ/t6F5Ao0XrG19G8R/fwlmSX7PPWZwLyWGFLjYZvoTJGxERBRRdu37QxLeDu6IQIxI61qlJWb4lF2q1CoMyEhQrI/kOU8d+8qU+9rxD8nXZ6tmo2rteXpvNmJ6J6BFXQF2rn2VLYvJGREQBRx0WI19OJLldKP7lZWzaH4vV1jbYfqAY157bWU7kyL8lJSWdsnatqez5h8SoGWjCo5FwyUNwFOeiMOsTuSk18aonFOv7xuSNiIiCgn3dz9Ad24arjECcqhhV2mQmbnRKkUMvgrnPOGiM4fJ9fXwqNGGRyPn4Idhy9sCQ7Fmz21I4+Q0REQU80VzqLi84fhtqlEZ2xmWj2itdLPJxKlHr9lfiVk0flypfO8sLFSoVa96IiChIBjKEjrwRjtYZkCzlmNZ9rLztREcKKhEVFgKjgV+NdFzez2/AVV6ExCufOGGAwx75Wh+bAqXwFUpEREFD12Fwvdsr1s/FR39qUA4TbpnUDe2SzC1eNvI9ps6DcOzb51C89BuEdRsOR2EOCub9F2EZw6CPba1YuZi8ERFRUHPsXwNp9Ve4UaXHF5VD8N1iA+67PLNOzRwFH1PHfoi/8F8oWfYDSpbPlEeYisQtasTlipaLyRsREQUtSXLDvvYn+bZJbUe03oGJE7oycQtS8RPvrLMtrMtg+eJLmLwREVFQd0g3nvcArL//D26oMKbnpXXWQXVLEtRM5siHMHkjIqKgpjKEwXD2HYDLAZNW77HPWZiNNxYUIL11JCYObsOpRcgnMHkjIqKgJzeT1krcXMVHUPHDkxhsa4UvDg5GblEVbj4/Q7EyElXjPG9ERES1SG43rIveg0ZyIkN/BCMN2zC8Z5LSxSKSMXkjIiKqRaVWI6T/xVCFmuEIS0T4wIvQJS1K6WIRydhsSkREVA9tSg8YL3oaRocFYyIS6qyTunjDUWS0i0F8ZKhiZaTgxJo3IiKik1AbI6CunbjZKlH0xcPYveRXPPm/lVi9I0+x8lFwYs0bERFRI9ZItS79GPqqY7jcdAzmKguKy9opXSwKMqx5IyIiaijJDVVImHzTrgpBRWIfnN1PuTUuKTix5o2IiKiBVGoNDMOugSalGwwScE1KrzqrMRSUWOSJfrlKAzUXJm9ERESNpGvTp97pRUqWzMBrG6KRmt4WU8/phNAQfs2S97HZlIiIyAtsG2dDu3sR/mn8CVW7V+GX5QeULhIFKCZvREREZ0hyOeHavUy+rYcDIWFmeTktoubA+lwiIqIzpNJoYZz8b1iXz4BFE46Jnc9hkyk1G76yiIiIvEClD0XoiBthkNyIVnk2bFUd2Ij3Vjhx3tB0dEyJVKyMFBjYbEpERORFqlqJmzN7E1zzX8WIom8w/cs/8Memo4qVjQIDkzciIqJmIjntsCz5SL7dQXcMPUIPo0PrCKWLRX7Op5pNv83ahXU78/DsbUNPeszitdl4+Yt1dbZ/8MjZaBVtbOYSEhERNZxKq0fo6FthXfQ+8hGNDoMn8buKAid5+3XZfsyYsx1d28Wc8rgDR8vQPT0W913lOceOOSykmUtIRETUeNrETjBNeRpGyY22hnCPfW5bFVbsKsWQHomKlY/8j+LJW2GpBW9/txGb9xQgKe74kiOnS97aJJkRZTa0SPmIiIjOlCrEhNrrLbjL8lDy7RPYW9YVSzYMxEPXDoCOizKQPyRvew+XQqtR4817R+LL+TuRV1x12uRtQEZCo/7G6NGjT7pv3rx50Gg00Gq93/1Po1F7XAeaQI8vGGIM9PgExuj/AjE+MS9cxcJ3oXNV4QLTGswsAA7kdkHnAO4PF4jnMWiTt/4ZCfKlISqq7CgstWLrviK5mbW8yo4OKVG4bmIGkhtQa3cqUVEmNBezORSBLNDjC4YYAz0+gTH6v0CKT3I5ILXvgdKC/ShEBKL7jkX/ro2rmPBXgXQegzZ5a4yDueXytSRJuOuy3rA5XPhm4S488NZSueYuKrz+ptSsrKxTPq94vuLiSq+XV/y6EC/SsjILXC43Ak2gxxcMMQZ6fAJj9H+BGp+690UIi+sErSoE7ZI7yNtOjLHK6oTR4Fdf04qcx8hII1Sq4Gpv9qtXRUa7GMx4chzMJn3NiXro2n6Y9vQCZK3OxpRRx1/8TeF0Nt8HgniRNufzKy3Q4wuGGAM9PoEx+r9AjE+V2BWiHkqt+jtGh6UK+bPfwbv703H2mP4Y3C2wBjME4nlsaX7X8BwRFuKRYRv0WrSKMaKwxKJouYiIiLyh4vfPEHpsE+4I/Rmr5s3F+l35SheJfIxfJW9zVxzAFY/NhtXmrNlWZXUgJ78CqQmew6+JiIj8jWS3QFW4//htqBCa0AY928cqXSzyMT6dvLncEorLrHLfNqFP51ZwS8ArX67Dwdwy7M4uxrMfr0aEKQSj+6UqXVwiIqIzXh/VdOET0HUdjfyOF+CS8wdDXd2mSuQPyVtBiQVXPzkPS9cfke/HRYXi/24ZDIvNiQfeXIpH31sOU6gOz9w6BHqdRuniEhEReWVVBsPQqegycgKiwkM8B9dtWIT//bpFbnWi4OVTAxbuvry3x32xhMgvL0/y2Na+dSSevnlwC5eMiIhIWbYtC6Bd9QX6OWPw2kdjcM3Fw854mizyTz5d80ZERESAZKuEffUP8u00bSFiVCWIPKFWjoILkzciIiI/WF7LNPEBSGHx2KjthdETx8Nk0CldLFKITzWbEhERUf00cW0RfvFTGAw11Dq9xz57aQEOlevQPoCX16K/seaNiIjIT6h0hjqJmzNnByxf3491332EH5fsgcvNCXADHZM3IiIiP+4LV7HwPajhxrnGjchbvxh5xZy0PtAxeSMiIvJXOgMMGSPkCX13OxLQYfg5SIwxKV0qambs80ZEROSnVGoNDH0mQ5ucgUR7KDJTkj32u91uSKK/nJp1NYGEZ5OIiMjPaRM6IDG1tcfa3+6KQuR99TimfzwHecVVipaPvIvJGxERUYCR3G6Uzn8XpopsXOb4Hl9/+j2KyqxKF4u8hMkbERFRgJFsFYDTLt8uc4ciun13RJsNSheLvIR93oiIiAKMOtSMyIv+jcqV32NPaTymjOmudJHIi5i8ERERBSCVRouwwZdidK3tktOOY8t+wm5zfwztlerRT478A5tNiYiIgkjl8q9g2vkr4le8ii9/WAKb3aV0kaiRmLwREREFCXdFEVy7lsq3YzXlKC23QaNhzZu/YfJGREQUJNRh0Qi76AlYTQlY6B6IiycPh1bDVMDfsM8bERFRENFEJSP2sqdxoaSGTqup2S5JEipy9kEVnYqwUJ2iZaRTY/JGREQUZFQaHWqnZ/advwO//w9/uHqg3fir0TEtVqHS0emwrpSIiCjIucsLYPljhnx7iGYTsn5dCIeTAxl8FZM3IiKiIKcKiwZ6ToYLaiy3dsDw8WM9mlTJt7DZlIiIKMipVGpE9psAR5tuSCvVo3ObaI/9bpcTag1TBl/BmjciIiKS6eLS0Ll9osc2V94+5H96HxbMXgSny61Y2ehvTKOJiIioXpLdgtJ5b8PoKEb/7M/w1YwyXDF1EtTqwJwbrnjZD7Ds24CkqU/VbLPl7kfhgo9gO7oXGqMZEQMmIqLfBEXLyZo3IiIiqpfktMGqNcu3D7piENupR8AmbqVr5qJ4yZce21xV5Tj65VPQRSUgedoLiBp2CYoWzUD5xkVQEmveiIiIqF5qYyQSL30Mx5bNxK7SZFw4oC0CjbO8CAWz34Pl4Fbooj2bjMvWL4BKrUXs+FugUmugj20NR9FRlCyfifCeoxQrM5M3IiIiOimVWo2EYRdhSq3t7qpSHF3yLdSZFyAxIQZKysnJwdSpU0+6Pysr66T7RHMoNFq0vvFlFP/xLZwl+TX7rNnbYEjrKidu1QxtuqFk+Q9wVpRAGxYJJTB5IyIiokaRJDfKFr4Pc+42FBzciDWZ16PvgF7wR6aO/eRLfVzlhdDHp3ls04ppVcS+sgImb0REROQf3CW5cB/bA1EfpYMTm3Ps6CNJUKmU6Q+XlJR0ytq1pnI77FDVmiJFpT2+NoXkckApHLBAREREjaKJSoLxgidRqE/CrxiJy8b3Vixxa04qrR6Sy+mxTXIeT9pUuhAohTVvRERE1GiG2ESkXfMMrrI5ERrydzohkp2KA1sQ1q6n3yd0WnMMXOVFHtucFcfva8OV6+fH5I2IiIiaRCRnJoPnEvdVq34ANs/G2mU90fnCGxEWFgaX04WDG1dDspZDZQhH64ze0PjB8luhqV1Rtm4+JLerZtCC9cAW6GKSoDFFKFYuJm9ERETkFa7CQ3Btng1R35Zu2YyZv6xA/xQ1TFt/QLSqsua4o3+aUJlxIToNHQ1fFt5zNEpW/IT8X99B5MDJsOXsRumqWYg99yZFy8U+b0REROQV6ugU5He6GHZJi7m23uga60Li1s9gxt+JmyDui+07//D+IANvErVrCZc/BkdhDo58eB+Kl36L6FFTEd5jJJTEmjciIiLyWjNq+lkTUNShJ7pUaBD72//9tb32cWK6Ecg1cq6BI3ymCTV+4p11thmS2iP52mfhS1jzRkRERF4VndQa5srDiFBV1kncqontYv/Bzetaunh+j8kbEREReZ21rNCrx9HfmLwRERGR1xnMMV49jv7G5I2IiIi8Lq17b5RKJrlvW33EdrFfHEeNw+SNiIiIvE4MQhDTgQi1E7jq+2K/rwxW8CccbUpERETNQszjtlMs/r71B0ScMF1IGfxjnjdfxeSNiIiImo1I0MR0IIe3rvO7FRZ8lU8lb99m7cK6nXl49rahJz2mrNKO6TM3Y82OY/IMzsMzk3HdxAwY9D4VChEREf1FJGrpfQYgKsqE4uJKOJ1upYvk13wm4/l12X7MmLMdXdudetTJc5+shtXuxP/dMhiVFgfe+Ho9rHYX7r6cHR6JiIgo8Ck+YKGw1IKnPvwTH8/aiqS4sFMeu+NAETbvLZATtfatI9GzQxxuv7gXflubLT8PERERUaBTvOZt7+FSaDVqvHnvSHw5fyfyiqtOeuzWfYWINocgpVV4zbbu6bFy8+m2fUUYlplc7+NGjz55h8h58+ZBo9FAq/V+HqvRqD2uA02gxxcMMQZ6fAJj9H+BHp/AGMmvkrf+GQnypSEKSi2IjQz12KbTqhFu0iO/5Mxq3kQ7fHMxmz3LHGgCPb5giDHQ4xMYo/8L9PgExkh+kbw1hs3ugq6e0Slim8PpOunjsrKyTvm8kiTJHSi9Tfy6EC/SsjILXK7A65wZ6PEFQ4yBHp/AGP1foMcnMMami4w0QnWyBVQDlF8lbyG6+pM0sS3kDEebNufIF/EiDeSRNYEeXzDEGOjxCYzR/wV6fAJjpIbwq4Zn0WRaVGr12OZwulFeaUdMhEGxchERERG1FL9K3jLSY1BQakVOQUXNNjH6VOjaNlrBkhERERG1DJ9O3lxuCcVlVtgcx5tKO6VGoUubaLz42RrsOlSMTXvy8fZ3GzGybwpiItgBkoiIiAKfShK99X3Eq1+uk6cKqV5h4VhRFW54ZgH+eWkmxvRPlbeVlNvw3g+bsHbHMeh1GgzpmYQbzu8m326q5vwvEJ0ofei/2OsCPb5giDHQ4xMYo/8L9PgExnhmzxtMfCp5IyIiIiI/bjYlIiIiIk9M3oiIiIj8CJM3IiIiIj/C5I2IiIjIjzB5IyIiIvIjTN6IiIiI/AiTNyIiIiI/wuSNiIiIyI8weSMiIiLyI0zeiIiIiPwIkzciIiIiP8LkjYiIiMiPMHkjIiIi8iNM3rzA6XTi9ddfx8iRI5GZmYkrr7wSGzZsqNm/fft2XHXVVejVqxdGjRqFTz/9FIEU36OPPopOnTp5XESc/qSiogKPP/44hg4div79++Pee+9FYWFhzf4VK1bgwgsvRM+ePTFu3Dj8+uuv8Deni/G6666rcx6nTp0Kf/D+++/XKevp3ndutxtvvPEGhg0bJh9z4403Ijs7G4EU47Fjx+qcU3H54Ycf4C8xCgcPHpRjPHz4sMd2m82GJ598EoMGDZI/m/71r3+hqKgIvqqx8a1du7be87dy5Ur4U4yLFi3CRRddJJ8j8Tp9/vnnYbVa/fY8+gSJztgbb7whDRkyRFq6dKl04MAB6ZFHHpH69OkjHTt2TCoqKpIGDBggPfTQQ9KePXuk7777Turevbt8HQjxCVOmTJFeeeUVKS8vr+ZSWFgo+ZNp06ZJZ511lrR48WJp165d0m233SaNHz9estls8nkT50zEKG5/8MEHUteuXaXly5dLgRKjMGjQIOmLL77wOI/FxcWSr5sxY4bUuXNn6aqrrqrZ1pD33Ztvvikf89tvv0nbt2+X/3/Gjh1b8/8RCDGKcy22iffqiefVYrFI/hCjIGIbNWqU1LFjRyk7O9tj34MPPiiNGTNGWr16tbRx40Zp8uTJ0pVXXin5oqbE9/nnn8vxnXjuxMUXX6Mni1Gcmy5dukjvvvuutH//fvk1OXz4cPnc+eN59BVM3rzg/PPPl5599tma++Xl5fIbcd68edJ7770nDR06VHI4HDX7X375ZflLIhDic7vdUq9evaT58+dL/mrbtm1yPEuWLKnZVlFRIfXt21f64YcfpMcee0xOUE90zz33yF/2gRJjQUGBvH/r1q2Sv8jNzZVuvvlm+fU3btw4jy+M073vxJdfZmam/OVYrbS0VOrRo4f0yy+/SIEQozB9+nRp4sSJki87XYxi+wUXXFAnuRGPE4mCSAaq7du3Tz5u3bp1kr/HJzz++OPSLbfcIvm6U8X4r3/9S7r22ms9jp85c6aUkZEhvw/95Tz6GjabekFMTAx+++03ucrb5XLh66+/hl6vR+fOnbFmzRq5iUqr1dYcP3DgQBw4cAAFBQXw9/gOHTqEqqoqtGvXDv5KnAuhb9++NdtMJhPS0tKwatUq+RyK6vwTiXMomjTED6BAiHHnzp1QqVRo27Yt/MXWrVuh0+nw888/y83ZJzrd+27Hjh2orKz0OK9msxldu3bF6tWrEQgxCuK8pqenw5edKsaFCxfi2WefxQMPPFDnceL9Vx1zNfH6bdWqld+cw1PF5y/n73QxTps2rU58arUaDodD7srhL+fR1/z9rqcme+SRR/DPf/4To0ePhkajkV+Yb775JlJTU5Gbm4uOHTt6HB8fHy9fHz16FLGxsfDn+BYsWCAf89lnn+H333+X9w0fPhx33303wsPD4Q9OPB/VH5QiSRXnTiSu4johIaHOYywWC4qLixEdHQ1/j3HXrl3y+XrqqaewbNkyGI1GuW/fbbfdJifqvkj0nTlZ38rTve/EfiExMbHOMdX7/D1G8dkizmtUVJTcT3X//v1ysn7rrbfK71F/iPHbb7+Vr+vr4yX684nYQkJC/PYcnio+Yffu3XKMor+tiFecb/HZ2qNHD/iSU8UofhCdSCRtH3/8Mbp16yZ/dvrLefQ1rHnzgj179shffG+//bZcKyXeaKIzuOhMLDpl1v7yq36Rik6a/h6f+HIQCZt4o7333nt48MEH8ccff8hf+qJDuD/o3r27XHMoOvOLDxJxzl5++WU5MRMfNPWdw+r7drsdgRCjOI/i9Si+FD744AP5C158sYjBKP7odO87kXgL9R3jL+/L08UoBhrt27cPpaWluPPOOzF9+nS5U/xNN90kD8Dxd+Ic1vfDwp/O4amIBLy8vFxu2RDvw3feeUdOyMUAFfGZ7I/Ea/L++++Xk1LxWRQM57G5sObNC28wMTJG/JKobpISX5TizSVqpwwGQ50v+OoXpKjd8Pf43nrrLVxxxRXyLydB/DKMi4vDJZdcgs2bN9epQvdF4oNDxCE+VESNhKj+nzhxojy6ViSm4kOk9jmsvh8aGgp/cLoYRY2baNqIiIioOY/iGPErXzzGH2qIT3S6953YL4hjqm9XH+Mv5/R0MYrmVFGjI2rLq2MUtR3ii/PDDz+s0xXA39QXv7+dw1MRtcKi2VDEIt6L1Z+927Ztk1s6xOhMfyKaSO+66y65m4b4LKquPQz089hcmLydoY0bN8o1F+JNdSKRtIhmxKSkJOTl5Xnsq74v2vT9PT7xxV+duFXr0KGDfC2qvP0heRNEU+L333+PkpIS+UsvLCwMU6ZMkfthiA/R+s6h+IL0l6bh08Uo7lcnbvWdR39L3kQz96ned6IGoHqbaP4/8RgxFUMgxFjdr7E2cV5F7bi/E/GL17L44j+x5kb8H/jDZ2tDiH6YJxKft+J9LGrP/Yk4J2IqniNHjsg/HPr16xdU57E5sNn0DFX3hRIdS08kmqHatGkjv0hFh0zRv6jan3/+KXfIFH2N/D0+UStz7bXXeuwTNW5C+/bt4S+/CEVThOjEHhkZKSc1YnCG+IU7ZMgQucZR/Fo8kTiHvXv3lj9MAyFGMS/TQw89VOc8il/84jz7m9O978RgG/F/cGJfo7KyMvn/48QvFn+OUdSwiddo7f5UW7Zs8Zv35qn06dNH7ppR3eFdEP36RGLjL+fwVMSPYzHn2YlzD4ofHeI97E/nTzTbX3PNNfK8bZ9//nmdcxPo57G5+Mc3jw8TVb/ixSeanMQHpxjp9dprr8l9SkTfEjExofjiFJ3+RVOjmBxTNEHefPPNCIT4zjnnHPm2qAYXI0+XLFmChx9+GOedd55fjJISxJe4GDX6zDPPyF94ImkRfb5EjZRoWhKJzaZNm/DSSy9h7969+OijjzB37lzccMMN8Beni1Gcx59++glffvml/GUxe/ZsvPDCC7j++uvlx/qb073vxC98kcyKc5qVlSV/IYomYvFjZezYsQiEGMX7T/RzFE3iYmSqeO2KkY1igm1x7v2dqJWZMGGC3B9MJKjiPXrPPffII3BF3z5/JxJv0aohPntFwi1+QIvbopaq9g9mXyZec+Iz5cUXX5QHKOTn59dcxA+PQD+PzUbpuUoCQUlJifTEE09II0aMkOeOuvTSS6WVK1fW7BeTDl5yySVSt27dpJEjR0qfffaZFEjxzZ49W55UUcyRJSbzfe655ySr1Sr5EzHX0O233y5PPiwmqxXzK4l50KqJ+dHOO+88+RyKeYx+/fVXyd+cLkYxwea5555b8zoVk2q6XC7JHzzwwAN1Jj893fvO6XRKL7zwgjRw4EB5fqobb7yxzjxb/h5jfn6+PAGqeF+KyXrFe1dMhOpPMQp//vlnvfOgVVZWypOGi/kKxUXMvygmLw6U+A4ePCjdeeedUv/+/aWePXvKc0vu3LlT8mUnxijeY+J1J2Kr71Idr7+dR1+gEv80X2pIRERERN7EZlMiIiIiP8LkjYiIiMiPMHkjIiIi8iNM3oiIiIj8CJM3IiIiIj/C5I2IiIjIjzB5IyIiIvIjTN6IiIiI/AiTNyIiIiI/wuSNiHyWry0As3TpUnTq1EleB/ZElZWV8pqiXbp0waeffqpY+YgoODB5IyKfJBaMFwtxn86oUaPw4IMPnvS+N4kF7IXOnTvXbDt27BiuvPJKrFq1Cm+99RauvvrqZvnbRETVtDW3iIh8yMcff9yg40TCFBYWhpawc+dO6HQ6tGvXriaZu+mmm+B2u/HZZ5+hW7duLVIOIgpurHkjIr/WtWtXpKamtljylp6eLidwS5YsweWXX46IiAh88803TNyIqMUweSMiRWzZsgXXXHMN+vTpg8zMTFx77bXYsGGDvG/q1KlyM6S4iD5mK1eulJtD//Of/8iP6dGjBx555JEGNZN+9913cjPn22+/XbPt22+/xYQJE+SEa8SIEXjzzTfhcrlOWV673Y79+/fLz/X555/j1ltvlcv95ZdfIikpyWv/L0REp8PkjYhaXEVFBW644QZERUXJidOrr74Ki8WC66+/HuXl5Xj88cflGjVx+frrr5GRkSE/TiRN3bt3xzvvvIMpU6ac9u/Mnj0bjz32GG677Tbcfvvt8rb3339f3jZo0CC89957cn+1//73v/K2U9m7dy8cDoecSD711FO48MILMX369BZrsiUiqsY+b0TU4vbs2YPi4mK5c3/v3r3lbaIfmUjUxMjN9u3b1yRFvXr1qnmcqOG69957G/Q3fvvtN9x///1yn7R//OMf8jaRGIrE79JLL8Wjjz4qbxs6dCgiIyPl+9dddx06dOhw0iZToaysDAaDQU4ItVp+hBJRy2PNGxG1OJEgRUdH45ZbbsG///1vLFiwALGxsbjvvvuQkJBw0seJqTgaYuvWrfjnP/+J+Ph4+bra+vXrYbVa5aZWp9NZcxH3hWXLlp12pKlI/lQqlZwQiqZUIqKWxuSNiFqcyWSSm0DPOusszJkzB3fccYfcjCkSuVMlREajsUHPv2vXLvn5jhw5Iv+daiUlJfK1qI0TTbHVl8GDB8vb8/LyTvqcouYtLi4OAwcOxBNPPIHNmzfjmWeeaUTURETewTp/IlKEaCZ98cUX5YECmzZtkie+FZ3/xchR0R/uTAwbNkzu23b33XfjlVdewZgxY5CYmAiz2Szvf+mll9CmTZs6jxO1f6dK3qpr/iZPnoy1a9fiq6++kgctiPtERC2FNW9E1OLmzp0r12Dl5+dDo9HICZCozRLJVU5OjnyMWt30j6fqJOyhhx6Sn188t9CzZ095mg8xsa4Y+FB9EX3XRJJ3+PDhep9PlLOwsBAdO3as2Sb6yIkBFeK5q/vDERG1BCZvRNTixCAFMbGtGAG6cOFCrFixQm4yFQMKxo4dKx8jEjkxNYfYV1pa2qS/I/q8idq3xYsXY9asWfLoVlGr9/rrr+O1116Tn/vHH3+UBx8cPHjQY+WE+vq7iWlLqoWEhOCNN96Qk0HR/02MoCUiaglM3oioxYmk6oMPPkB4eLg8X5tYF1QMMhDThogaOUFM4SESoxtvvBG///57k/+WmEhXzAsn+qeJEa533XWXPC+cGCQhnls03Yq55mbMmCGXpz7VNWu1k7uUlBQ8++yzcuLXkKW8iIi8QSX52srPRERERHRSrHkjIiIi8iNM3oiIiIj8CJM3IiIiIj/C5I2IiIjIjzB5IyIiIvIjTN6IiIiI/AiTNyIiIiI/wuSNiIiIyI8weSMiIiLyI0zeiIiIiPwIkzciIiIi+I//B9iNFeLbJ+dlAAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 640x480 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, ax1 = plt.subplots(layout=\"tight\")\n",
    "\n",
    "color = 'C0'\n",
    "ax1.set_xlabel(r'strike $K$')\n",
    "ax1.set_ylabel('samples size', color=color)\n",
    "ax1.plot(result_numpy[\"K\"], result_numpy[\"samples_size\"], \n",
    "         marker=\"o\", ls=':', lw=2, color=color)\n",
    "ax1.tick_params(axis='y', labelcolor=color)\n",
    "\n",
    "ax2 = ax1.twinx() \n",
    "\n",
    "color = 'C1'\n",
    "ax2.set_ylabel('time (s)', color=color) \n",
    "ax2.plot(result_numpy[\"K\"], result_numpy[\"time (s)\"], \n",
    "         marker=\"o\", ls=':', lw=2, color=color)\n",
    "ax2.tick_params(axis='y', labelcolor=color)\n",
    "ax2.grid(False);"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a4387c9c-430c-4321-b638-8e6d24f6cb3a",
   "metadata": {},
   "source": [
    "### Passage du code en `pytorch`\n",
    "\n",
    "PyTorch est une bibliothèque open-source de calcul scientifique et\n",
    "d’apprentissage automatique largement utilisée dans la recherche et\n",
    "l’industrie. Elle est particulièrement conçue pour le développement et\n",
    "l’entraînement de modèles d’apprentissage profond, mais elle offre\n",
    "également des outils puissants pour la simulation et les probabilités\n",
    "numériques.\n",
    "\n",
    "-   PyTorch repose sur la manipulation de tenseurs, des structures\n",
    "    multidimensionnelles similaires à des matrices, qui permettent des\n",
    "    opérations rapides et efficaces sur de grandes quantités de données.\n",
    "-   PyTorch peut exécuter des calculs sur GPU, offrant ainsi des\n",
    "    performances considérablement améliorées pour les tâches exigeantes\n",
    "    en ressources.\n",
    "-   Différentiation automatique (Autograd): L’un des points forts de\n",
    "    PyTorch est son système de différenciation automatique, qui\n",
    "    simplifie le calcul des gradients pour optimiser des fonctions\n",
    "    complexes. Cela est essentiel pour l’entraînement des modèles\n",
    "    d’apprentissage profond.\n",
    "\n",
    "Pour passer d’un code NumPy à un code PyTorch il faut remplacer les\n",
    "objets `np.ndarray` par des objets `torch.tensor`. Une nouveauté est la\n",
    "notion de `device`.\n",
    "\n",
    "> **Important**\n",
    ">\n",
    "> En PyTorch, un device désigne l’endroit où les calculs et les données\n",
    "> sont stockés et exécutés. En pratique il y a essentiellement 2 types\n",
    "> de device:\n",
    ">\n",
    "> -   CPU (Central Processing Unit) : l’unité de traitement standard de\n",
    ">     l’ordinateur.\n",
    "> -   GPU (Graphics Processing Unit) : une unité de traitement\n",
    ">     spécialisée, capable d’exécuter des opérations massivement\n",
    ">     parallèles.\n",
    "\n",
    "Le type de données stockées dans le `torch.tensor` doit être\n",
    "**compatible avec le device utilisé**. Dans la suite on utilise le type\n",
    "`torch.float32` pour que le code suivant puisse être executé sur un GPU\n",
    "Nvidia d’il y a quelques années ou sur le GPU intégré de la puce ARM\n",
    "d’apple."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 85,
   "id": "e3a9ded1",
   "metadata": {},
   "outputs": [],
   "source": [
    "import torch\n",
    "dtype = torch.float32\n",
    "device = torch.device(\"cpu\")\n",
    "rng_torch = torch.Generator(device=device)\n",
    "\n",
    "bs_torch = { \n",
    "    key: torch.tensor(item, dtype=dtype, device=device) \n",
    "        if type(item) is np.ndarray else item \n",
    "        for key, item in bs.items() \n",
    "}"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "78906369-6991-413d-90e1-99dbe8f5213a",
   "metadata": {},
   "source": [
    "Il faut remplacer la fonction `phi` par la version `pytorch` tout\n",
    "simplement en remplaçant les appels `np.exp` et `np.einsum` par les\n",
    "versions `torch.exp` et `torch.einsum`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 86,
   "id": "1156dc67",
   "metadata": {},
   "outputs": [],
   "source": [
    "def phi_torch(bs, Gn):\n",
    "    mu_T = bs[\"mu\"] * bs[\"T\"]\n",
    "    sig_T = bs[\"sigma\"] * math.sqrt(bs[\"T\"]) * bs[\"correlation_cholesky\"] \n",
    "    ST = bs[\"S0\"] * torch.exp(mu_T + torch.einsum('ij,pj->pi', sig_T, Gn)) \n",
    "    return ST"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d3c85c9c-f7b0-433f-9605-44c0341e9e81",
   "metadata": {},
   "source": [
    "De même on modifie la fonction `sampling_payoffs`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 87,
   "id": "0bee5beb",
   "metadata": {},
   "outputs": [],
   "source": [
    "def sampling_payoffs_torch(K, size, bs, device, rng): \n",
    "    Gn = torch.randn((size, bs[\"d\"]), dtype=dtype, \n",
    "                     device=device, generator=rng)\n",
    "    samples = phi_torch(bs, Gn)\n",
    "    payoffs = torch.nn.functional.relu(torch.mean(samples, axis=1) - K)\n",
    "    #payoffs = torch.maximum(torch.mean(samples, axis=1) - K, \n",
    "    #                        torch.full((size,), 0.0, device=device)) \n",
    "    return bs[\"actualization\"] * payoffs"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "aa80f0c0-06cc-4833-a50c-1e5619ee3f47",
   "metadata": {},
   "source": [
    "> **Warning**\n",
    ">\n",
    "> Dans certains cas, la fonction `pytorch` a le même nom que la fonction\n",
    "> `numpy` mais les appels autorisés peuvent être différents par exemple\n",
    "> la fonction `np.maximum` peut comparer un objet `np.ndarray` et un\n",
    "> scalaire alors que la version pytorch `torch.maximum` fair la\n",
    "> comparaison uniquement entre 2 objets `torch.tensor`.\n",
    ">\n",
    "> Une alternative ici est d’utiliser la fonction `ReLU` (qui est\n",
    "> simplement la fonction partie positive) dans `torch.nn.functional`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 88,
   "id": "5819d660",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Adaptive Monte Carlo: 44000000it [00:06, 6375267.95it/s, IC_size=0.0099, mean=27.8, var=281]\n",
      "Adaptive Monte Carlo: 39000000it [00:06, 6327924.80it/s, IC_size=0.00993, mean=19.4, var=250]\n",
      "Adaptive Monte Carlo: 30000000it [00:04, 6461682.90it/s, IC_size=0.00991, mean=12.3, var=192]\n",
      "Adaptive Monte Carlo: 19000000it [00:02, 6461918.87it/s, IC_size=0.00996, mean=6.96, var=123]\n",
      "Adaptive Monte Carlo: 11000000it [00:01, 6525178.40it/s, IC_size=0.0096, mean=3.55, var=65.9]\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>mean</th>\n",
       "      <th>var</th>\n",
       "      <th>ci_size</th>\n",
       "      <th>samples_size</th>\n",
       "      <th>time (s)</th>\n",
       "      <th>K</th>\n",
       "      <th>method</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>80</th>\n",
       "      <td>27.769639</td>\n",
       "      <td>280.706259</td>\n",
       "      <td>0.009901</td>\n",
       "      <td>44000000.0</td>\n",
       "      <td>6.903001</td>\n",
       "      <td>80</td>\n",
       "      <td>torch_cpu</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>90</th>\n",
       "      <td>19.399929</td>\n",
       "      <td>250.090608</td>\n",
       "      <td>0.009926</td>\n",
       "      <td>39000000.0</td>\n",
       "      <td>6.164299</td>\n",
       "      <td>90</td>\n",
       "      <td>torch_cpu</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>100</th>\n",
       "      <td>12.259754</td>\n",
       "      <td>191.608462</td>\n",
       "      <td>0.009907</td>\n",
       "      <td>30000000.0</td>\n",
       "      <td>4.644058</td>\n",
       "      <td>100</td>\n",
       "      <td>torch_cpu</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>110</th>\n",
       "      <td>6.963109</td>\n",
       "      <td>122.697598</td>\n",
       "      <td>0.009961</td>\n",
       "      <td>19000000.0</td>\n",
       "      <td>2.941267</td>\n",
       "      <td>110</td>\n",
       "      <td>torch_cpu</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>120</th>\n",
       "      <td>3.552353</td>\n",
       "      <td>65.912922</td>\n",
       "      <td>0.009595</td>\n",
       "      <td>11000000.0</td>\n",
       "      <td>1.687111</td>\n",
       "      <td>120</td>\n",
       "      <td>torch_cpu</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          mean         var   ci_size  samples_size  time (s)    K     method\n",
       "80   27.769639  280.706259  0.009901    44000000.0  6.903001   80  torch_cpu\n",
       "90   19.399929  250.090608  0.009926    39000000.0  6.164299   90  torch_cpu\n",
       "100  12.259754  191.608462  0.009907    30000000.0  4.644058  100  torch_cpu\n",
       "110   6.963109  122.697598  0.009961    19000000.0  2.941267  110  torch_cpu\n",
       "120   3.552353   65.912922  0.009595    11000000.0  1.687111  120  torch_cpu"
      ]
     },
     "execution_count": 88,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "result_torch_cpu = run(\"torch_cpu\", sampling_payoffs_torch, epsilon=epsilon, \n",
    "    batch_size=batch_size, bs=bs_torch, device=device, rng=rng_torch)\n",
    "result_torch_cpu"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "bf63764b-3efc-4871-a661-d4b6852631e4",
   "metadata": {},
   "source": [
    "> **Note**\n",
    ">\n",
    "> On remarque que le code `pytorch` sur CPU est 2 fois plus rapide que\n",
    "> le code `numpy`. C’est étonnant car les deux codes tournent sur le CPU\n",
    "> et devraient donc donner des résultats équivalents. Sur votre machine\n",
    "> vous avez peut-être des temps comparables. Les différences qui peuvent\n",
    "> expliquer les temps de calculs sont\n",
    ">\n",
    "> -   le générateur de nombres pseudo-aléatoires (différence entre `rng`\n",
    ">     et `rng_torch`)\n",
    "> -   le type utilisé ici `dtype` est sur 32 bits alors que le type\n",
    ">     `numpy` est 64 bits\n",
    "\n",
    "### Changement de `device`\n",
    "\n",
    "Cette section ne peut s’executer que si vous avec un ordinateur Apple\n",
    "récent (puce ARM). Il est facilement executable sur un carte graphique\n",
    "Nvidia en changeant le device, par exemple"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 89,
   "id": "36719c9d",
   "metadata": {},
   "outputs": [],
   "source": [
    "device = torch.device(\"cuda\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2a47c53b-1815-46d6-8a38-5a889ddc501e",
   "metadata": {},
   "source": [
    "> **Note**\n",
    ">\n",
    "> Le device `mps` dans PyTorch fait référence à l’utilisation du backend\n",
    "> Metal Performance Shaders (MPS), qui est une technologie développée\n",
    "> par Apple. Elle permet d’exécuter des calculs tensoriels sur les GPU\n",
    "> des appareils Apple, comme les Mac équipés de processeurs Apple\n",
    "> Silicon (M1, M2, etc.) ou d’autres GPU compatibles Metal. C’est une\n",
    "> alternative à CUDA mais encore partielle (toutes les fonctionnalités\n",
    "> PyTorch ne sont pas encore être entièrement prises en charge pour MPS)\n",
    "> et les performances sont inférieures à celles des GPU NVIDIA haut de\n",
    "> gamme utilisant CUDA.\n",
    "\n",
    "Dans le code précédent on doit modifié l’objet `bs_torch` pour déplacer\n",
    "les données des `torch.tensor` vers le device utilisé. Les fonctions\n",
    "`phi_torc` et `sampling_payoffs_torch` n’ont pas besoin d’être\n",
    "réécrites, il suffit de changer les arguments!"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 90,
   "id": "162798c9",
   "metadata": {},
   "outputs": [],
   "source": [
    "#device = torch.device(\"mps\")\n",
    "rng_torch = torch.Generator(device=device)\n",
    "bs_torch = { \n",
    "    key: torch.tensor(item, dtype=dtype, device=device) \n",
    "        if type(item) is np.ndarray else item \n",
    "        for key, item in bs.items() \n",
    "}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 91,
   "id": "8bf73d4d",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Adaptive Monte Carlo: 44000000it [00:00, 60674099.91it/s, IC_size=0.0099, mean=27.8, var=281]\n",
      "Adaptive Monte Carlo: 39000000it [00:00, 114762243.72it/s, IC_size=0.00993, mean=19.4, var=250]\n",
      "Adaptive Monte Carlo: 30000000it [00:00, 129859973.58it/s, IC_size=0.00991, mean=12.3, var=192]\n",
      "Adaptive Monte Carlo: 19000000it [00:00, 138765738.56it/s, IC_size=0.00997, mean=6.97, var=123]\n",
      "Adaptive Monte Carlo: 11000000it [00:00, 139111204.92it/s, IC_size=0.0096, mean=3.55, var=66] \n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>mean</th>\n",
       "      <th>var</th>\n",
       "      <th>ci_size</th>\n",
       "      <th>samples_size</th>\n",
       "      <th>time (s)</th>\n",
       "      <th>K</th>\n",
       "      <th>method</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>80</th>\n",
       "      <td>27.767202</td>\n",
       "      <td>280.529912</td>\n",
       "      <td>0.009898</td>\n",
       "      <td>44000000.0</td>\n",
       "      <td>0.726342</td>\n",
       "      <td>80</td>\n",
       "      <td>torch_cuda</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>90</th>\n",
       "      <td>19.395393</td>\n",
       "      <td>250.044280</td>\n",
       "      <td>0.009926</td>\n",
       "      <td>39000000.0</td>\n",
       "      <td>0.340875</td>\n",
       "      <td>90</td>\n",
       "      <td>torch_cuda</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>100</th>\n",
       "      <td>12.265392</td>\n",
       "      <td>191.688457</td>\n",
       "      <td>0.009909</td>\n",
       "      <td>30000000.0</td>\n",
       "      <td>0.232198</td>\n",
       "      <td>100</td>\n",
       "      <td>torch_cuda</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>110</th>\n",
       "      <td>6.965617</td>\n",
       "      <td>122.798718</td>\n",
       "      <td>0.009965</td>\n",
       "      <td>19000000.0</td>\n",
       "      <td>0.137718</td>\n",
       "      <td>110</td>\n",
       "      <td>torch_cuda</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>120</th>\n",
       "      <td>3.552220</td>\n",
       "      <td>66.027713</td>\n",
       "      <td>0.009604</td>\n",
       "      <td>11000000.0</td>\n",
       "      <td>0.080104</td>\n",
       "      <td>120</td>\n",
       "      <td>torch_cuda</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          mean         var   ci_size  samples_size  time (s)    K      method\n",
       "80   27.767202  280.529912  0.009898    44000000.0  0.726342   80  torch_cuda\n",
       "90   19.395393  250.044280  0.009926    39000000.0  0.340875   90  torch_cuda\n",
       "100  12.265392  191.688457  0.009909    30000000.0  0.232198  100  torch_cuda\n",
       "110   6.965617  122.798718  0.009965    19000000.0  0.137718  110  torch_cuda\n",
       "120   3.552220   66.027713  0.009604    11000000.0  0.080104  120  torch_cuda"
      ]
     },
     "execution_count": 91,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "result_torch_mps = run(\"torch_cuda\", sampling_payoffs_torch, epsilon=epsilon, \n",
    "    batch_size=batch_size, bs=bs_torch, device=device, rng=rng_torch)\n",
    "result_torch_mps"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 92,
   "id": "65fdd5ac",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAnEAAAHMCAYAAAC6Mf4OAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvZiW1igAAAAlwSFlzAAAPYQAAD2EBqD+naQAATnNJREFUeJzt3Qd0FFXbwPEnhRJKMPQiSBNQ6VJEOtJEUAE7RRABBRRBpDeliCgISglN6SoI2BVFBQSBV1CQ3kVEOoEQQkuy33ku365JCMkm2TbZ/++cPbs7sztzZ+7M7LO3TYDNZrMJAAAALCXQ2wkAAABA6hHEAQAAWBBBHAAAgAURxAEAAFgQQRwAAIAFEcQBAABYEEEcAACABRHEAQAAWBBBHAAAgAURxAEAAFgQQRwAAIAFEcT5IW6X6x7+vF99bdt/+eUXKVu2rHz++ecJpl+6dEm6d+8ud911l8yfP1/8IR98LW8AeCmIGzhwoLkwJvfo0KGDZCTLly832/XPP//Ipk2bzGudZlU//vijDBgwwPG+UaNGJl+t7sSJE9KuXTupUKGC1KpVSy5fvuzX+zX+cevpbb+V+PvE3ftnz5495rlcuXKOaSdPnjTHyP/+9z+ZMmWKdOzYUTKSpPLB2bxJzFX548nj0KoWL15s9tFXX33l9nzyp+uSq61bt07atm0rlSpVMvtxzpw5Tv1BSs339HesWrVqJtZwVnBqNqJHjx7y1FNPOd5PmzZNdu3aZS6Idjly5JCMKiAgIMGzFc2dOzfBe827jJBn8+bNk61bt8rbb78tBQoUkJCQEI+uP6Pu17Rs+614cp/s3btXMmXKJCVLlnQEdd26dZO4uDhZsGCBlC9fXvwhH5zNm8T86fj1pmvXrsmMGTPkxRdflJYtW7o9n8jXtNHflhdeeEEefPBB6d27t2zZssX81sTGxprriiu+d/z4cenSpYtcvHgxVWlLVRBXrFgx87DLnTu3ZM6cWSpXriz+IF++fOZZg4SM4u6775aM4Pz585I/f35p0aKF+IKMsl+tuk80iCtVqpQJ5NasWSOvvPKK3H777eYHs3Dhwh5Lh1Vx/HqGlsh8+OGHUqJECY/kU0bK16ioKJk1a5Z89913JgDKmjWr2Y9a0lilShWXruv99983TTA0AFP16tWTmJgYCQ8PNyX6uu60fk//WH722Wfy1ltv+V6buKVLl8pDDz1k/vU2aNDAbJBGoHZatKj/DMaOHSs1a9Y0O/7VV1817VZmzpxpNvjee++Vl156SSIiIhJ879133zXfq169uvlu//79zQ+53Y4dO+TZZ58139fldurUyUTFydGdqaWLmlYt+tSSxwsXLjjm33HHHZIlSxZTHOzsNmp1hn5ep9sdPHhQKlasKIMHD3Z6OXqy679qjej1u02aNElQLJt4HUrfx0+rVnVrVZI+dLoW2SYuXtd1Llq0SFq1amXWo2l555135OrVqwn2/3vvvWcOuvvvv998Tv9B/PXXX8nuX2e2My3L1u9oMf2///6bYD+4altS2vfe3q8pHbfOHh9JSek8utW267mp39NtGDJkSIpVOZ9++qmp+pw6dWqqjpdblW4cPnzYLE/3uZZyaNo/+uijFAM4Z64tzuSls/v8VvsqsStXrsiECROkadOmZl9UrVpVOnfuLLt3775lPiQ1zdl9mrjq25nj0pnj8Fbbm5Z8dvaYdjb9aUmDM8dLctvcpk0befjhh6Vhw4ZJri+la0/icyql89XXrktp3e+6/ZqGBQsWSOPGjWX48OGmxKtIkSKSPXv2mz6v1bdpbQam1xM9d3Tfx9esWTMTq2jpWnq+p384R4wYIY8++qiMHz8+2e2+1c5IswEDBtgaNmyY5Lzw8HBb2bJlbaNGjbL98ssvtpkzZ9oqVKhgGzRokOMz+t0qVarYevXqZVu/fr1txowZtjJlytiaNWtm69Chg2316tW2hQsX2u666y7byJEjE3yvWrVqtrZt29p++OEH2yeffGKrUaOG7YknnrDFxcXZLl68aKtZs6atd+/eZrk///yzmVe1alVbZGTkLbdn3Lhxtrvvvtv2/vvv29auXWvSes8995g0HT16NE3bqPr162eWc+DAAdv169dtbdq0sTVu3NgWFRXl9HI0bbofxo8fb7ZJv1OuXDnzrDSN7733XoL16nudbrd//37bo48+ah5//PGH2U+6LzUf7QYPHmzSOmnSJNu6detMWipVqmR77rnnzL617/97773X1q1bN5NHn3/+uWP/J8fZYyK1y965c6eta9euttq1a5vtOn78uEu3JaV97+396sxx68zxkZgz59Gttl3T8/bbb5t8/v333x3bZ98n8V9//fXXZn9Onjw51cdLUnbt2mW2q379+uZ5yJAh5rxzRkrXFmfz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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "result = pd.concat([ result_numpy, result_torch_cpu, result_torch_mps ])\n",
    "ax = sns.barplot(data=result, x=\"K\", y=\"time (s)\", hue=\"method\")\n",
    "ax.set_title(fr\"Temps d'execution en fonction du strike $K$ pour \" + \n",
    "             fr\"atteindre une précision de $\\epsilon$ = {epsilon}\");"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b2665367-327c-4e34-8fe4-acd388534e21",
   "metadata": {},
   "source": [
    "## Méthodes de réduction de variance\n",
    "\n",
    "On rappelle que le modèle est codé à travers la fonction `phi`. Cette\n",
    "fonction ne sera pas modifiée dans la suite. Le payoff est donné par une\n",
    "fonction $g:\\mathbf{R}^d \\to \\mathbf{R}_+$ et le code est fait dans la\n",
    "fonction `sampling_payoffs`. On va implémenter les méthodes des\n",
    "réduction de variance vues en cours en modifiant la fonction\n",
    "`sampling_payoffs`.\n",
    "\n",
    "### Variables antithétiques\n",
    "\n",
    "Pour utiliser les variables antithétiques on utilise le fait que\n",
    "$G \\sim \\mathcal{N}(0, \\operatorname{Id}_d)$ et $-G$ ont même loi et\n",
    "donc que $$\n",
    "  \\mathbf{E} \\big[ (g \\circ \\Phi)(G) \\big] = \\frac{1}{2} \n",
    "  \\mathbf{E} \\big[ (g \\circ \\Phi)(G) + (g \\circ \\Phi)(-G) \\big]. \n",
    "$$ Cela suggère d’utiliser la représentation de droite pour écrire un\n",
    "estimateur Monte Carlo de la forme $$\n",
    "  \\tilde I_n = \\frac{1}{2 n} \\sum_{i=1}^n \\big( g \\circ \\Phi(G_i) + g \\circ \\Phi(-G_i) \\big),\n",
    "$$ où $(G_i)_{i \\ge 1}$ est une suite *i.i.d.* de loi\n",
    "$\\mathcal{N}(0, \\operatorname{Id}_d)$.\n",
    "\n",
    "Voici le code modifié pour implémenter les variables antithétiques."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 93,
   "id": "28b183d2",
   "metadata": {},
   "outputs": [],
   "source": [
    "def sampling_payoffs_antithetic(K, size, bs, rng): \n",
    "    Gn = rng.standard_normal((size, bs[\"d\"]))\n",
    "    payoffs_1 = np.maximum(np.mean(phi(bs, Gn), axis=1) - K, 0) \n",
    "    payoffs_2 = np.maximum(np.mean(phi(bs, -Gn), axis=1) - K, 0) \n",
    "    payoffs = 0.5 * (payoffs_1 + payoffs_2)\n",
    "    return bs[\"actualization\"] * payoffs"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d47e15a7-49ed-419a-85c6-18288b0fe2d2",
   "metadata": {},
   "source": [
    "> **Warning**\n",
    ">\n",
    "> Dans la suite comme le nombre d’échantillons va diminuer (car on\n",
    "> utilise des méthodes de réduction de variance) on change le\n",
    "> `batch_size` dans le Monte Carlo adaptatif: on passe de $1\\,000\\,000$\n",
    "> à $100\\,000$."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 94,
   "id": "9c76b825",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Adaptive Monte Carlo: 1200000it [00:01, 696174.60it/s, IC_size=0.00984, mean=27.8, var=7.57]\n",
      "Adaptive Monte Carlo: 2500000it [00:03, 687148.39it/s, IC_size=0.00983, mean=19.4, var=15.7]\n",
      "Adaptive Monte Carlo: 4600000it [00:06, 684916.69it/s, IC_size=0.00992, mean=12.3, var=29.5]\n",
      "Adaptive Monte Carlo: 5700000it [00:08, 681781.83it/s, IC_size=0.01, mean=6.96, var=37.1]  \n",
      "Adaptive Monte Carlo: 4100000it [00:06, 680311.51it/s, IC_size=0.00999, mean=3.55, var=26.6]\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>mean</th>\n",
       "      <th>var</th>\n",
       "      <th>ci_size</th>\n",
       "      <th>samples_size</th>\n",
       "      <th>time (s)</th>\n",
       "      <th>K</th>\n",
       "      <th>method</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>80</th>\n",
       "      <td>27.763688</td>\n",
       "      <td>7.565365</td>\n",
       "      <td>0.009842</td>\n",
       "      <td>1200000.0</td>\n",
       "      <td>1.724977</td>\n",
       "      <td>80</td>\n",
       "      <td>antithetic</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>90</th>\n",
       "      <td>19.399543</td>\n",
       "      <td>15.724141</td>\n",
       "      <td>0.009831</td>\n",
       "      <td>2500000.0</td>\n",
       "      <td>3.639759</td>\n",
       "      <td>90</td>\n",
       "      <td>antithetic</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>100</th>\n",
       "      <td>12.264132</td>\n",
       "      <td>29.457681</td>\n",
       "      <td>0.009920</td>\n",
       "      <td>4600000.0</td>\n",
       "      <td>6.717031</td>\n",
       "      <td>100</td>\n",
       "      <td>antithetic</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>110</th>\n",
       "      <td>6.962649</td>\n",
       "      <td>37.074154</td>\n",
       "      <td>0.009997</td>\n",
       "      <td>5700000.0</td>\n",
       "      <td>8.361540</td>\n",
       "      <td>110</td>\n",
       "      <td>antithetic</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>120</th>\n",
       "      <td>3.548517</td>\n",
       "      <td>26.633407</td>\n",
       "      <td>0.009991</td>\n",
       "      <td>4100000.0</td>\n",
       "      <td>6.027799</td>\n",
       "      <td>120</td>\n",
       "      <td>antithetic</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          mean        var   ci_size  samples_size  time (s)    K      method\n",
       "80   27.763688   7.565365  0.009842     1200000.0  1.724977   80  antithetic\n",
       "90   19.399543  15.724141  0.009831     2500000.0  3.639759   90  antithetic\n",
       "100  12.264132  29.457681  0.009920     4600000.0  6.717031  100  antithetic\n",
       "110   6.962649  37.074154  0.009997     5700000.0  8.361540  110  antithetic\n",
       "120   3.548517  26.633407  0.009991     4100000.0  6.027799  120  antithetic"
      ]
     },
     "execution_count": 94,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "batch_size = int(1e5)\n",
    "result_antithetic = run(\"antithetic\", sampling_payoffs_antithetic, \n",
    "    epsilon=epsilon, batch_size=batch_size, bs=bs, rng=rng)\n",
    "result_antithetic"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 95,
   "id": "24c806dc",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x640 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "result = pd.concat([ result_numpy, result_antithetic ])\n",
    "fig, (ax1, ax2) = plt.subplots(nrows=2, ncols=1, figsize=(6.4,6.4), \n",
    "                               sharex=True, layout=\"tight\")\n",
    "sns.barplot(data=result, x=\"K\", y=\"var\", hue=\"method\", ax=ax1)\n",
    "sns.barplot(data=result, x=\"K\", y=\"time (s)\", hue=\"method\", ax=ax2)\n",
    "fig.suptitle(fr\"Variance et temps d'execution en fonction du strike $K$, \"\n",
    "             +fr\"précision demandée $\\epsilon$ = {epsilon}\");"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "dfc495a5-bc21-475b-ad64-e44d9232054e",
   "metadata": {},
   "source": [
    "#### Passage en `pytorch`\n",
    "\n",
    "Pas de difficulté particulière ici, si suffit de modifier la fonction\n",
    "`sampling_payoffs_torch` pour évaluer 2 fois $g \\circ \\Phi$ (via `relu`,\n",
    "`torch.mean` et `phi_torch`)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 112,
   "id": "25f38a46",
   "metadata": {},
   "outputs": [],
   "source": [
    "from torch.nn.functional import relu \n",
    "def sampling_payoffs_torch_antithetic(K, size, bs, device, rng): \n",
    "    Gn = torch.randn((size, bs[\"d\"]), dtype=dtype, \n",
    "                     device=device, generator=rng)\n",
    "    #samples = phi_torch(bs, Gn)\n",
    "    payoffs_1 = relu(torch.mean(phi_torch(bs, Gn), axis=1) - K)\n",
    "    payoffs_2 = relu(torch.mean(phi_torch(bs, -Gn), axis=1) - K)\n",
    "    payoffs = 0.5 * (payoffs_1 + payoffs_2)\n",
    "    return bs[\"actualization\"] * payoffs"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 113,
   "id": "3531b1e6",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Adaptive Monte Carlo: 1180000it [00:00, 9147256.66it/s, IC_size=0.00993, mean=27.8, var=7.57]\n",
      "Adaptive Monte Carlo: 2420000it [00:00, 11499575.92it/s, IC_size=0.00997, mean=19.4, var=15.7]\n",
      "Adaptive Monte Carlo: 4540000it [00:00, 15031852.39it/s, IC_size=0.00998, mean=12.3, var=29.4]\n",
      "Adaptive Monte Carlo: 5720000it [00:00, 18833446.41it/s, IC_size=0.00998, mean=6.96, var=37.1]\n",
      "Adaptive Monte Carlo: 4120000it [00:00, 19881923.06it/s, IC_size=0.00998, mean=3.55, var=26.7]\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>mean</th>\n",
       "      <th>var</th>\n",
       "      <th>ci_size</th>\n",
       "      <th>samples_size</th>\n",
       "      <th>time (s)</th>\n",
       "      <th>K</th>\n",
       "      <th>method</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>80</th>\n",
       "      <td>27.765727</td>\n",
       "      <td>7.574819</td>\n",
       "      <td>0.009932</td>\n",
       "      <td>1180000.0</td>\n",
       "      <td>0.132232</td>\n",
       "      <td>80</td>\n",
       "      <td>antithetic_cuda</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>90</th>\n",
       "      <td>19.393324</td>\n",
       "      <td>15.652379</td>\n",
       "      <td>0.009969</td>\n",
       "      <td>2420000.0</td>\n",
       "      <td>0.211281</td>\n",
       "      <td>90</td>\n",
       "      <td>antithetic_cuda</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>100</th>\n",
       "      <td>12.263614</td>\n",
       "      <td>29.434453</td>\n",
       "      <td>0.009981</td>\n",
       "      <td>4540000.0</td>\n",
       "      <td>0.303142</td>\n",
       "      <td>100</td>\n",
       "      <td>antithetic_cuda</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>110</th>\n",
       "      <td>6.962103</td>\n",
       "      <td>37.108212</td>\n",
       "      <td>0.009984</td>\n",
       "      <td>5720000.0</td>\n",
       "      <td>0.304725</td>\n",
       "      <td>110</td>\n",
       "      <td>antithetic_cuda</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>120</th>\n",
       "      <td>3.553585</td>\n",
       "      <td>26.681542</td>\n",
       "      <td>0.009976</td>\n",
       "      <td>4120000.0</td>\n",
       "      <td>0.208037</td>\n",
       "      <td>120</td>\n",
       "      <td>antithetic_cuda</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          mean        var   ci_size  samples_size  time (s)    K  \\\n",
       "80   27.765727   7.574819  0.009932     1180000.0  0.132232   80   \n",
       "90   19.393324  15.652379  0.009969     2420000.0  0.211281   90   \n",
       "100  12.263614  29.434453  0.009981     4540000.0  0.303142  100   \n",
       "110   6.962103  37.108212  0.009984     5720000.0  0.304725  110   \n",
       "120   3.553585  26.681542  0.009976     4120000.0  0.208037  120   \n",
       "\n",
       "              method  \n",
       "80   antithetic_cuda  \n",
       "90   antithetic_cuda  \n",
       "100  antithetic_cuda  \n",
       "110  antithetic_cuda  \n",
       "120  antithetic_cuda  "
      ]
     },
     "execution_count": 113,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "result_antithetic_mps = run(\"antithetic_cuda\", \n",
    "    sampling_payoffs_torch_antithetic, epsilon=epsilon, \n",
    "    batch_size=batch_size, bs=bs_torch, device=device, rng=rng_torch)\n",
    "result_antithetic_mps"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 114,
   "id": "0b555005",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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kAZo8JY9eyYJDna9giUmJlbOnYsmkAMsgiAOANJIEKcB3LT3NsjRk+dT/P2CebJJj9Y1zXII4gBrIIgDgDREA7hDRyN9nQwAXkDHBgAAAAvy6yBu1qxZZjDhuIYMGSKlSpWK97APPAwAABAo/LY6denSpTJp0iSpXLlyvOl79uyRbt26Sdu2bR3TgoODfZBCAAAA3/G7IO7EiRMyfPhw2bRpkxQpUiTePL0n6/79+6VLly6SO3dun6URAADA1/wuiPvzzz8lffr08tlnn8m0adPk6NGjjnlHjhyR6OhoKVasmMfXGxKSdM2yO932U2M5gYy88B/khf8gL4DA43dBnLZvu10bt7179zru17pu3ToJCgqS2rVrS58+fSRr1qwur1O71EdEZBZvCA8P88p6kDzywn+QF/6DvACsw++CuKRoEKeBW548eWTmzJmmZG7cuHGyb98+WbhwoZnnCh0TKSoqOtl/p564uEVFXTYDasJ15IX/IC/8B3mBQBMeHhbwJceWCuJeeOEFeeaZZyQiIsK8L1mypGkb9+STT8r27dulYsWKLi/7xg3vXLT04uitdSFp5IX/IC/8B3kBWIelQlgtabMHcHZ33XWXeT5+/LiPUgUAAOB9lgri+vfvLx06dIg3TUvgVIkSJXyUKgAAAO+zVBDXuHFj+fnnn2Xq1KmmPdzatWtl0KBB0rRpUylevLivkwcAAOA1lmoTV79+fTMA8OzZs2XOnDmmR2qzZs2kd+/evk4aAACAV/l1EDd27Nhbpj388MPmAQAAEMgsVZ0KAACAmwjiAAAALIggDgAAwIII4gAAACyIIA4AAMCCCOIAAAAsiCAOAADAggjiAAAALIggDgAAwIII4gAAACyIIA4AAMCCCOIAAAAsiCAOAADAggjiAAAALIggDgAAwIII4gAAACyIIA4AAMCCCOIAAAAsiCAOAADAggjiAAAALIggDgAAwIII4gAAACyIIA4AAMCCCOIAAAAsiCAOAADAggjiAAAALIggDgAAwIII4gAAACyIIA4AAMCCCOIAAAAsiCAOAADAggjiAAAALIggDgAAwIII4gAAACyIIA4AAMCC/DqImzVrlrRr1y7etF27dknbtm2lUqVKUq9ePVm0aJHP0gcAAOArfhvELV26VCZNmhRvWmRkpHTs2FEKFy4sK1eulB49eshbb71lXgMAAASS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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "result = pd.concat([ result_numpy, result_torch_cpu, result_torch_mps, \n",
    "  result_antithetic, result_antithetic_mps ])\n",
    "ax = sns.barplot(data=result, x=\"K\", y=\"time (s)\", hue=\"method\")\n",
    "ax.set_title(fr\"Temps d'execution en fonction du strike $K$ pour \" + \n",
    "             fr\"atteindre une précision de $\\epsilon$ = {epsilon}\");"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f597ae0f-c0af-4d07-911f-54783c1f0532",
   "metadata": {},
   "source": [
    "### Variable de contrôle\n",
    "\n",
    "On rappelle que le prix d’un Call dans un modèle de Black-Scholes en\n",
    "dimension 1, le prix est donnée par une formule fermée. Pour une option\n",
    "Basket (en dimension $d \\ge 2$) on approche le prix par Monte Carlo mais\n",
    "on peut utiliser des approximations pour trouver un produit\n",
    "unidimensionnel proche du produit Basket. Ces approximations servent de\n",
    "variables de contrôles: **on ne rajoute pas une erreur, on retire de la\n",
    "variance**…\n",
    "\n",
    "On rappelle que, en posant $\\mu_i = r - \\frac{1}{2}\\sigma_i^2$, $$\n",
    "    X = \\biggl(\\frac{1}{d} \\sum_{i=1}^d S^i_0 e^{\\mu_i T + \\sigma_i \\sqrt{T} \\tilde G_i}  - K\\biggr)_+\n",
    "$$ et en introduisant $a^i_0 = \\frac{S^i_0}{\\sum_{j=1}^d S^j_0}$ (t.q.\n",
    "$\\sum a^i_0 = 1$) et $\\bar S_0 = \\frac{1}{d} \\sum_{i=1}^d S^i_0$ on a $$\n",
    "    X = \\biggl(\\bar S_0 \\sum_{i=1}^d a^i_0 e^{\\mu_i T + \\sigma_i \\sqrt{T} \\tilde G_i}  - K\\biggr)_+.\n",
    "$$ La variable de contrôle proposée est obtenue en échangeant\n",
    "l’exponentielle et la moyenne pondérée par les poids\n",
    "$\\big(a^i_0\\big)_{i=1,\\dots,d}$: $$\n",
    "    Y = \\bigl(\\bar S_0 e^Z  - K\\bigr)_+\n",
    "    \\quad \\text{avec} \\quad \n",
    "    Z = \\sum_{i=1}^d a^i_0 \\big(\\mu_i T + \\sigma_i \\sqrt{T} \\tilde G_i\\big) \n",
    "$$ La variable aléatoire $Z$ suit une loi gaussienne\n",
    "$Z \\sim \\mathcal{N}(m T, s^2 T)$ avec $$\n",
    "    m = \\sum_{i=1}^d a^i_0 \\mu_i\n",
    "    \\quad \\text{et} \\quad\n",
    "    s^2 = \\sum_{i=1}^d \\Big( \\sum_{j=1}^d a^i_0 \\sigma_i L_{ij} \\Big)^2. \n",
    "$$ Ainsi l’espérance de la variable de contrôle $Y$ est connue par la\n",
    "formule de Black-Scholes, car elle correspond au prix d’un call de\n",
    "strike $K$ d’un actif Black-Scholes de dimension 1, de valeur initiale\n",
    "$\\bar S_0$, de taux $\\rho = m+\\frac{1}{2} s^2$ et de volatilité $s$ (à\n",
    "un facteur d’actualisation près… attention à ça). On a donc $$\n",
    "    e^{-\\rho T} \\mathbf{E} \\big[ Y \\big] = P_{\\text{BS}}\\big(\\bar S_0, \\rho, s, T, K\\big),\n",
    "$$ où $$\n",
    "    P_{\\text{BS}}\\big(x, r, \\sigma, T, K\\big) = x F_{\\mathcal{N}(0,1)}(d_1) - K e^{-r T} F_{\\mathcal{N}(0,1)}(d_2),\n",
    "$$ avec $F_{\\mathcal{N}(0,1)}$ est la fonction de répartition de la loi\n",
    "normale centrée réduite et la notation $$\n",
    "    d_1 = \\frac{1}{\\sigma \\sqrt{T}} \\Big( \\log\\big( \\frac{x}{K} \\big) \n",
    "    + \\big(r + \\frac{\\sigma^2}{2}\\big) T \\Big)\n",
    "    \\quad \\text{et} \\quad\n",
    "    d_2 = d_1 - \\sigma \\sqrt{T}\n",
    "$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 99,
   "id": "3b52ec13",
   "metadata": {},
   "outputs": [],
   "source": [
    "def black_scholes_call(S0: float, K: float, T: float, \n",
    "                       r: float, sigma: float) -> float:\n",
    "    \"\"\"\n",
    "    Calcule le prix d'un Call européen dans le modèle de Black-Scholes.\n",
    "\n",
    "    Args:\n",
    "    - S0 (float): Prix actuel de l'actif sous-jacent.\n",
    "    - K (float): Prix d'exercice du Call.\n",
    "    - T (float): Temps jusqu'à l'échéance en années.\n",
    "    - r (float): Taux d'intérêt sans risque.\n",
    "    - sigma (float): Volatilité du sous-jacent.\n",
    "\n",
    "    Returns:\n",
    "    - float: Prix du Call européen.\n",
    "    \"\"\"\n",
    "    # Calcul des paramètres d1 et d2\n",
    "    d1 = (math.log(S0/K) + (r + 0.5*sigma**2)*T) / (sigma*math.sqrt(T))\n",
    "    d2 = d1 - sigma*math.sqrt(T)\n",
    "    \n",
    "    # Calcul du prix du Call\n",
    "    call_price = S0*sps.norm.cdf(d1) - K*math.exp(-r*T)*sps.norm.cdf(d2)\n",
    "    return call_price"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6279cf4b-a9eb-48d2-873f-d97fd0ce8de4",
   "metadata": {},
   "source": [
    "> **Note**\n",
    ">\n",
    "> On code une fonction `payoffs_control` qui renvoie des réalisation de\n",
    "> la variable de contrôle centrée $\\tilde Y = Y - \\mathbf{E}[Y]$. Il est\n",
    "> important de noter que\n",
    ">\n",
    "> -   l’espérance est calculée en utilisant la formule fermée obtenue\n",
    ">     car $Z \\sim \\mathcal{N}(m T, s^2 T)$\n",
    "> -   les réalisations de $Y$ (et donc de $Z$) sont obtenues par\n",
    ">     transformation de $G$ et donc la fonction `payoffs_control` doit\n",
    ">     prendre comme argument l’objet `Gn`"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 100,
   "id": "5d9d6519",
   "metadata": {},
   "outputs": [],
   "source": [
    "def payoffs_control(bs, K, Gn): \n",
    "    weight = bs[\"S0\"] / bs[\"S0\"].sum()\n",
    "    m = (weight * bs[\"mu\"]).sum()\n",
    "    s2 = (((weight * bs[\"sigma\"]) @ bs[\"correlation_cholesky\"])**2).sum()\n",
    "    rho = m + 0.5*s2\n",
    "\n",
    "    mu_T = bs[\"mu\"] * bs[\"T\"]\n",
    "    sig_T = bs[\"sigma\"] * math.sqrt(bs[\"T\"]) * bs[\"correlation_cholesky\"] \n",
    "    Z = np.sum(weight * (mu_T + np.einsum('ij,pj->pi', sig_T, Gn)), axis=1)\n",
    "    Y = np.maximum(bs[\"S0\"].mean() * np.exp(Z) - K, 0)\n",
    "    Y_mean = np.exp(rho*bs[\"T\"]) * \\\n",
    "        black_scholes_call(bs[\"S0\"].mean(), K, bs[\"T\"], \n",
    "                           r=rho, sigma=math.sqrt(s2))\n",
    "    return Y - Y_mean"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "288b7880-7a5a-4973-b684-b5a902c15bac",
   "metadata": {},
   "source": [
    "Etant donné cette variable aléatoire\n",
    "$\\tilde Y = Y - \\mathbf{E}[Y]  = \\psi(G)$ centrée, l’estimateur Monte\n",
    "Carlo s’écrit $$\n",
    "  \\bar I_n = \\frac{1}{n} \\sum_{i=1}^n \\big( (g \\circ \\Phi)(G_i) - \\psi(G_i) \\big).\n",
    "$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 101,
   "id": "d76fab43",
   "metadata": {},
   "outputs": [],
   "source": [
    "def sampling_payoffs_control_variate(K, size, bs, rng): \n",
    "    Gn = rng.standard_normal((size, bs[\"d\"]))\n",
    "    payoffs_X = np.maximum(np.mean(phi(bs, Gn), axis=1) - K, 0) \n",
    "    payoffs_Y = payoffs_control(bs, K, Gn)\n",
    "    payoffs = payoffs_X - payoffs_Y\n",
    "    return bs[\"actualization\"] * payoffs"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8a17eb2f-1e40-456f-9573-87d5d1831c4b",
   "metadata": {},
   "source": [
    "> **Warning**\n",
    ">\n",
    "> On réduit encore le `batch_size` et on passe à $20\\,000$."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 102,
   "id": "3e1d3bf1",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Adaptive Monte Carlo: 180000it [00:00, 793527.46it/s, IC_size=0.00961, mean=27.8, var=1.08]\n",
      "Adaptive Monte Carlo: 300000it [00:00, 766177.62it/s, IC_size=0.00972, mean=19.4, var=1.85]\n",
      "Adaptive Monte Carlo: 440000it [00:00, 784494.61it/s, IC_size=0.00996, mean=12.3, var=2.84]\n",
      "Adaptive Monte Carlo: 500000it [00:00, 787215.67it/s, IC_size=0.00998, mean=6.96, var=3.24]\n",
      "Adaptive Monte Carlo: 420000it [00:00, 796634.97it/s, IC_size=0.00998, mean=3.56, var=2.72]\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>mean</th>\n",
       "      <th>var</th>\n",
       "      <th>ci_size</th>\n",
       "      <th>samples_size</th>\n",
       "      <th>time (s)</th>\n",
       "      <th>K</th>\n",
       "      <th>method</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>80</th>\n",
       "      <td>27.767146</td>\n",
       "      <td>1.080913</td>\n",
       "      <td>0.009606</td>\n",
       "      <td>180000.0</td>\n",
       "      <td>0.227993</td>\n",
       "      <td>80</td>\n",
       "      <td>var_cont</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>90</th>\n",
       "      <td>19.392709</td>\n",
       "      <td>1.846307</td>\n",
       "      <td>0.009725</td>\n",
       "      <td>300000.0</td>\n",
       "      <td>0.392570</td>\n",
       "      <td>90</td>\n",
       "      <td>var_cont</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>100</th>\n",
       "      <td>12.268541</td>\n",
       "      <td>2.838352</td>\n",
       "      <td>0.009956</td>\n",
       "      <td>440000.0</td>\n",
       "      <td>0.561966</td>\n",
       "      <td>100</td>\n",
       "      <td>var_cont</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>110</th>\n",
       "      <td>6.964850</td>\n",
       "      <td>3.243183</td>\n",
       "      <td>0.009983</td>\n",
       "      <td>500000.0</td>\n",
       "      <td>0.636577</td>\n",
       "      <td>110</td>\n",
       "      <td>var_cont</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>120</th>\n",
       "      <td>3.557704</td>\n",
       "      <td>2.724161</td>\n",
       "      <td>0.009983</td>\n",
       "      <td>420000.0</td>\n",
       "      <td>0.528792</td>\n",
       "      <td>120</td>\n",
       "      <td>var_cont</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          mean       var   ci_size  samples_size  time (s)    K    method\n",
       "80   27.767146  1.080913  0.009606      180000.0  0.227993   80  var_cont\n",
       "90   19.392709  1.846307  0.009725      300000.0  0.392570   90  var_cont\n",
       "100  12.268541  2.838352  0.009956      440000.0  0.561966  100  var_cont\n",
       "110   6.964850  3.243183  0.009983      500000.0  0.636577  110  var_cont\n",
       "120   3.557704  2.724161  0.009983      420000.0  0.528792  120  var_cont"
      ]
     },
     "execution_count": 102,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "batch_size = 20000\n",
    "result_varcont = run(\"var_cont\", \n",
    "    sampling_payoffs_control_variate, epsilon=epsilon, \n",
    "    batch_size=batch_size, bs=bs, rng=rng)\n",
    "result_varcont"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "bc7872cd-45e5-43e2-ac0b-b20f6ca1feb6",
   "metadata": {},
   "source": [
    "#### Version `pytorch`"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 103,
   "id": "b60d3b3c",
   "metadata": {},
   "outputs": [],
   "source": [
    "def payoffs_control_torch(bs, K, Gn): #, S0, mu, sigma, sq_correl, maturity, strike):\n",
    "    weight = bs[\"S0\"] / bs[\"S0\"].sum()\n",
    "    m = (weight * bs[\"mu\"]).sum().item()\n",
    "    s2 = (((weight * bs[\"sigma\"]) @\\\n",
    "            bs[\"correlation_cholesky\"])**2).sum().item()\n",
    "    rho = m + 0.5*s2\n",
    "\n",
    "    mu_T = bs[\"mu\"] * bs[\"T\"]\n",
    "    sig_T = bs[\"sigma\"] * math.sqrt(bs[\"T\"]) * bs[\"correlation_cholesky\"] \n",
    "    Z = torch.sum(weight*(mu_T+torch.einsum('ij,pj->pi', sig_T, Gn)), axis=1)\n",
    "    Y = relu(bs[\"S0\"].mean() * torch.exp(Z) - K)\n",
    "    Y_mean = math.exp(rho*bs[\"T\"]) * \\\n",
    "        black_scholes_call(bs[\"S0\"].mean().item(), K, bs[\"T\"], \n",
    "                           r=rho, sigma=math.sqrt(s2))\n",
    "    return Y - Y_mean"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 104,
   "id": "662bd6ff",
   "metadata": {},
   "outputs": [],
   "source": [
    "def sampling_payoffs_control_variate_torch(K, size, bs, device, rng): \n",
    "    Gn = torch.randn((size, bs[\"d\"]), dtype=dtype, \n",
    "                     device=device, generator=rng)\n",
    "    payoffs_X = relu(torch.mean(phi_torch(bs, Gn), axis=1) - K) \n",
    "    payoffs_Y = payoffs_control_torch(bs, K, Gn)\n",
    "    payoffs = payoffs_X - payoffs_Y\n",
    "    return bs[\"actualization\"] * payoffs"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 105,
   "id": "0127fddb",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Adaptive Monte Carlo: 180000it [00:00, 9847838.88it/s, IC_size=0.00959, mean=27.8, var=1.08]\n",
      "Adaptive Monte Carlo: 300000it [00:00, 10241666.94it/s, IC_size=0.00975, mean=19.4, var=1.85]\n",
      "Adaptive Monte Carlo: 440000it [00:00, 10261123.03it/s, IC_size=0.00996, mean=12.3, var=2.84]\n",
      "Adaptive Monte Carlo: 500000it [00:00, 9502489.86it/s, IC_size=0.00998, mean=6.96, var=3.24]\n",
      "Adaptive Monte Carlo: 420000it [00:00, 10241786.03it/s, IC_size=0.00999, mean=3.56, var=2.73]\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>mean</th>\n",
       "      <th>var</th>\n",
       "      <th>ci_size</th>\n",
       "      <th>samples_size</th>\n",
       "      <th>time (s)</th>\n",
       "      <th>K</th>\n",
       "      <th>method</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>80</th>\n",
       "      <td>27.768241</td>\n",
       "      <td>1.076860</td>\n",
       "      <td>0.009588</td>\n",
       "      <td>180000.0</td>\n",
       "      <td>0.019557</td>\n",
       "      <td>80</td>\n",
       "      <td>var_cont_cuda</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>90</th>\n",
       "      <td>19.393873</td>\n",
       "      <td>1.854623</td>\n",
       "      <td>0.009746</td>\n",
       "      <td>300000.0</td>\n",
       "      <td>0.030391</td>\n",
       "      <td>90</td>\n",
       "      <td>var_cont_cuda</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>100</th>\n",
       "      <td>12.262587</td>\n",
       "      <td>2.838412</td>\n",
       "      <td>0.009956</td>\n",
       "      <td>440000.0</td>\n",
       "      <td>0.043680</td>\n",
       "      <td>100</td>\n",
       "      <td>var_cont_cuda</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>110</th>\n",
       "      <td>6.963644</td>\n",
       "      <td>3.239082</td>\n",
       "      <td>0.009977</td>\n",
       "      <td>500000.0</td>\n",
       "      <td>0.053451</td>\n",
       "      <td>110</td>\n",
       "      <td>var_cont_cuda</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>120</th>\n",
       "      <td>3.558166</td>\n",
       "      <td>2.727846</td>\n",
       "      <td>0.009990</td>\n",
       "      <td>420000.0</td>\n",
       "      <td>0.041741</td>\n",
       "      <td>120</td>\n",
       "      <td>var_cont_cuda</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          mean       var   ci_size  samples_size  time (s)    K         method\n",
       "80   27.768241  1.076860  0.009588      180000.0  0.019557   80  var_cont_cuda\n",
       "90   19.393873  1.854623  0.009746      300000.0  0.030391   90  var_cont_cuda\n",
       "100  12.262587  2.838412  0.009956      440000.0  0.043680  100  var_cont_cuda\n",
       "110   6.963644  3.239082  0.009977      500000.0  0.053451  110  var_cont_cuda\n",
       "120   3.558166  2.727846  0.009990      420000.0  0.041741  120  var_cont_cuda"
      ]
     },
     "execution_count": 105,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "result_varcont_mps = run(\"var_cont_cuda\", \n",
    "    sampling_payoffs_control_variate_torch, epsilon=epsilon, \n",
    "    batch_size=batch_size, bs=bs_torch, device=device, rng=rng_torch)\n",
    "result_varcont_mps"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "61688494-a9d8-4869-8a2d-e98da4f3f268",
   "metadata": {},
   "source": [
    "#### Variable de contôle optimale\n",
    "\n",
    "Lorsqu’on travaille avec une variable de contrôle centrée $\\tilde Y$, la\n",
    "formule pour obtenir la combinaison linéaire entre le payoff $X$ et la\n",
    "variable de contrôle $\\tilde Y$ se simplifie en $$\n",
    "  \\lambda^* = \\frac{\\mathbf{E}\\big[X \\tilde Y]}{\\mathbf{E}[\\tilde Y^2]}.\n",
    "$$ On rappelle que c’est le paramètre $\\lambda^* \\in \\mathbf{R}$\n",
    "solution de $$\n",
    "  \\lambda^* = \\operatorname{argmin}_{\\mathbf{R}} \\operatorname{var}(X - \\lambda \\tilde Y).\n",
    "$$ Ainsi on peut écrire un estimateur de $\\lambda^*$ comme le ratio $$\n",
    "  \\lambda_n = \\frac{\\sum_{i=1}^n X_i \\tilde Y_i}{\\sum_{i=1}^n \\tilde Y_i^2}\n",
    "$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 106,
   "id": "771927d9",
   "metadata": {},
   "outputs": [],
   "source": [
    "def sampling_payoffs_control_variate_opt(K, size, bs, rng): \n",
    "    Gn = rng.standard_normal((size, bs[\"d\"]))\n",
    "    payoffs_X = np.maximum(np.mean(phi(bs, Gn), axis=1) - K, 0) \n",
    "    payoffs_Y = payoffs_control(bs, K, Gn)\n",
    "\n",
    "    cntxt[\"lambda_numerator\"] += (payoffs_X * payoffs_Y).sum() \n",
    "    cntxt[\"lambda_denominator\"] += (payoffs_Y**2).sum() \n",
    "    cntxt[\"lambda\"] = cntxt[\"lambda_numerator\"] / cntxt[\"lambda_denominator\"]\n",
    "\n",
    "    payoffs = payoffs_X - cntxt[\"lambda\"] * payoffs_Y\n",
    "    return bs[\"actualization\"] * payoffs"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0a99a3a3-d7b1-416f-a674-e5f25bcb1792",
   "metadata": {},
   "source": [
    "> **Warning**\n",
    ">\n",
    "> Ici on utilise une variable `cntxt` (un dictionnaire) pour stocker les\n",
    "> quantités $\\sum_{i=1}^n X_i \\tilde Y_i$ et $\\sum_{i=1}^n \\tilde Y_i^2$\n",
    "> qui sont mis à jour à chaque itération de la fonction\n",
    "> `monte_carlo_adaptive`. Cette variable doit être initialisée avant le\n",
    "> premier appel de `sampling_payoffs_control_variate_opt`, il faut donc\n",
    "> adapter la fonction `run`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 107,
   "id": "fd9ee875",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Adaptive Monte Carlo: 120000it [00:00, 769806.58it/s, IC_size=0.00924, mean=27.8, var=0.667]\n",
      "Adaptive Monte Carlo: 180000it [00:00, 784590.66it/s, IC_size=0.00963, mean=19.4, var=1.09]\n",
      "Adaptive Monte Carlo: 240000it [00:00, 792289.37it/s, IC_size=0.00984, mean=12.3, var=1.51]\n",
      "Adaptive Monte Carlo: 260000it [00:00, 790053.14it/s, IC_size=0.00983, mean=6.97, var=1.64]\n",
      "Adaptive Monte Carlo: 220000it [00:00, 792340.34it/s, IC_size=0.0097, mean=3.56, var=1.35]\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>mean</th>\n",
       "      <th>var</th>\n",
       "      <th>ci_size</th>\n",
       "      <th>samples_size</th>\n",
       "      <th>time (s)</th>\n",
       "      <th>lambda</th>\n",
       "      <th>K</th>\n",
       "      <th>method</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>80</th>\n",
       "      <td>27.768880</td>\n",
       "      <td>0.667401</td>\n",
       "      <td>0.009244</td>\n",
       "      <td>120000.0</td>\n",
       "      <td>0.157157</td>\n",
       "      <td>1.038273</td>\n",
       "      <td>80</td>\n",
       "      <td>var_cont_opt</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>90</th>\n",
       "      <td>19.392490</td>\n",
       "      <td>1.085898</td>\n",
       "      <td>0.009628</td>\n",
       "      <td>180000.0</td>\n",
       "      <td>0.230559</td>\n",
       "      <td>1.062720</td>\n",
       "      <td>90</td>\n",
       "      <td>var_cont_opt</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>100</th>\n",
       "      <td>12.264128</td>\n",
       "      <td>1.513434</td>\n",
       "      <td>0.009844</td>\n",
       "      <td>240000.0</td>\n",
       "      <td>0.304000</td>\n",
       "      <td>1.090117</td>\n",
       "      <td>100</td>\n",
       "      <td>var_cont_opt</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>110</th>\n",
       "      <td>6.966865</td>\n",
       "      <td>1.636613</td>\n",
       "      <td>0.009835</td>\n",
       "      <td>260000.0</td>\n",
       "      <td>0.330056</td>\n",
       "      <td>1.128270</td>\n",
       "      <td>110</td>\n",
       "      <td>var_cont_opt</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>120</th>\n",
       "      <td>3.555140</td>\n",
       "      <td>1.345922</td>\n",
       "      <td>0.009696</td>\n",
       "      <td>220000.0</td>\n",
       "      <td>0.278473</td>\n",
       "      <td>1.170608</td>\n",
       "      <td>120</td>\n",
       "      <td>var_cont_opt</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          mean       var   ci_size  samples_size  time (s)    lambda    K  \\\n",
       "80   27.768880  0.667401  0.009244      120000.0  0.157157  1.038273   80   \n",
       "90   19.392490  1.085898  0.009628      180000.0  0.230559  1.062720   90   \n",
       "100  12.264128  1.513434  0.009844      240000.0  0.304000  1.090117  100   \n",
       "110   6.966865  1.636613  0.009835      260000.0  0.330056  1.128270  110   \n",
       "120   3.555140  1.345922  0.009696      220000.0  0.278473  1.170608  120   \n",
       "\n",
       "           method  \n",
       "80   var_cont_opt  \n",
       "90   var_cont_opt  \n",
       "100  var_cont_opt  \n",
       "110  var_cont_opt  \n",
       "120  var_cont_opt  "
      ]
     },
     "execution_count": 107,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "name = \"var_cont_opt\"\n",
    "function = sampling_payoffs_control_variate_opt\n",
    "\n",
    "result = {} \n",
    "for K in [80, 90, 100, 110, 120]:\n",
    "    cntxt = { \"lambda_numerator\": 0., \"lambda_denominator\": 1e-7 }\n",
    "    result[K] = monte_carlo_adaptive(\n",
    "        lambda size: function(K, size, bs, rng), \n",
    "        epsilon=epsilon, \n",
    "        batch_size=batch_size)\n",
    "    result[K][\"lambda\"] = cntxt[\"lambda\"]\n",
    "result_df = pd.DataFrame(result).T\n",
    "result_df[\"K\"] = result_df.index\n",
    "result_df[\"method\"] = name \n",
    "\n",
    "result_varcont_opt = result_df\n",
    "result_varcont_opt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 108,
   "id": "de73667b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAnEAAAHMCAYAAAC6Mf4OAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvZiW1igAAAAlwSFlzAAAPYQAAD2EBqD+naQAAVVBJREFUeJzt3Qd0FNXbx/EnhRJKQoJSlS69CwiCSBMVAQVERZpIU0BAQEGkKVIEQUB6E2kKiIIVFBUV/oqiFKUjRUCKhBJ6SfY9z+XdNQkh2STbZvf7OScnyZaZu3Nndn975947QTabzSYAAACwlGBvFwAAAACpR4gDAACwIEIcAACABRHiAAAALIgQBwAAYEGEOAAAAAsixAEAAFgQIQ4AAMCCCHEAAAAWRIgDAACwIEIcAACABRHiAhCXy3WPQN6uvvbaf/zxRylRooSsXLkywe0XLlyQrl27SqlSpWT+/PkSCPXga3UDwEshbsCAAeaNMbmftm3bij/56KOPzOs6fPiwbNiwwfytt1nVN998I/3793f8X69ePVOvVnfs2DFp3bq1lCtXTmrUqCGXLl0K6O0af7/19Gu/lfjbxN3bZ+fOneZ3yZIlHbcdP37c7CO//PKLTJ48Wdq1ayf+JKl6cLZuEnNV/XhyP7SqxYsXm2302Wefub2eAul9ydXWrVsnLVq0kAoVKpjtOGfOHKe+IKXmefo5VqVKFZM1nBWamhfRrVs3eeqppxz/T506VbZv327eEO2yZcsm/iooKCjBbyuaN29egv+17vyhzt577z3ZvHmzjB07VnLnzi1hYWEeXb+/bte0vPZb8eQ22bVrl2TIkEGKFCniCHVdunSRuLg4WbBggZQtW1YCoR6crZvEAmn/9aarV6/KjBkz5Pnnn5fGjRu7vZ6o17TRz5bnnntOHn74YenVq5f89ttv5rMmNjbWvK+44nlHjx6Vjh07yrlz51JVtlSFuAIFCpgfu6ioKMmYMaNUrFhRAsHtt99ufmtI8BelS5cWf3DmzBnJlSuXNGrUSHyBv2xXq24TDXFFixY1Qe7777+X3r17yx133GE+MPPly+exclgV+69naIvMu+++K4ULF/ZIPflTvZ4/f15mzZolq1atMgEoc+bMZjtqS2OlSpVcuq533nnHdMHQAKZq164t169fl+nTp5sWfV13Wp+nXyxXrFghb775pu/1iVu2bJk88sgj5ltvnTp1zAvSBGqnTYv6zWDkyJFyzz33mA3ft29f029l5syZ5gXffffd8sILL8jp06cTPO/tt982z6tatap57ssvv2w+yO3+/PNPad++vXm+LveZZ54xqTg5ujG1dVHLqk2f2vJ49uxZx/0FCxaUTJkymeZgZ1+jns7Qx+vtdn/99ZeUL19eBg4c6PRy9GDXb9Wa6PW5DzzwQIJm2cTrUPp//LLqqW49laQ/ers22SZuXtd1Llq0SJo0aWLWo2V566235MqVKwm2/6RJk8xOd++995rH6TeIAwcOJLt9nXmdaVm2Pkeb6f/5558E28FVryWlbe/t7ZrSfuvs/pGUlI6jW712PTb1efoaXn311RRP5Xz44Yfm1OeUKVNStb/cqnVj//79Znm6zbWVQ8v+/vvvpxjgnHlvcaYund3mt9pWiV2+fFnGjRsnDRs2NNuicuXK0qFDB9mxY8ct6yGp25zdpolPfTuzXzqzH97q9aalnp3dp50tf1rK4Mz+ktxrbt68uTRt2lTq1q2b5PpSeu9JfEyldLz62vtSWre7vn4tw4IFC6RBgwYyZMgQ0+KVP39+yZo1602P19O3ae0Gpu8neuzoto/vwQcfNFlFW9fS8zz9wjl06FB57LHHZMyYMcm+7lttjDTr37+/rW7dukneN336dFuJEiVsw4cPt/3444+2mTNn2sqVK2d75ZVXHI/R51aqVMnWo0cP2/r1620zZsywFS9e3Pbggw/a2rZta1u7dq1t4cKFtlKlStmGDRuW4HlVqlSxtWjRwvb111/blixZYqtWrZrtiSeesMXFxdnOnTtnu+eee2y9evUyy/3uu+/MfZUrV7bFxMTc8vWMHj3aVrp0ads777xj++GHH0xZy5QpY8p06NChNL1G1a9fP7OcvXv32q5du2Zr3ry5rUGDBrbz5887vRwtm26HMWPGmNekzylZsqT5rbSMkyZNSrBe/V9vt9uzZ4/tscceMz+bNm0y20m3pdaj3cCBA01ZJ0yYYFu3bp0pS4UKFWzPPvus2bb27X/33XfbunTpYupo5cqVju2fHGf3idQue9u2bbbOnTvbatasaV7X0aNHXfpaUtr23t6uzuy3zuwfiTlzHN3qtWt5xo4da+r5999/d7w++zaJ//fnn39utufEiRNTvb8kZfv27eZ13X///eb3q6++ao47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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "result = pd.concat([ result_antithetic, result_antithetic_mps, \n",
    "                     result_varcont, result_varcont_opt ])\n",
    "ax = sns.barplot(data=result, x=\"K\", y=\"time (s)\", hue=\"method\")\n",
    "ax.set_title(fr\"Temps d'execution en fonction du strike $K$ pour \" + \n",
    "             fr\"atteindre une précision de $\\epsilon$ = {epsilon}\");"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "aff696b2-cfe2-4d99-b9af-ba29fef340b2",
   "metadata": {},
   "source": [
    "### Combinaison des 2 méthodes\n",
    "\n",
    "Il est possible de combiner plusieurs méthodes de réduction de variance.\n",
    "Ici on fait une variable de contrôle (optimale) sur des variables\n",
    "antithétiques."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 109,
   "id": "62176a17",
   "metadata": {},
   "outputs": [],
   "source": [
    "def sampling_payoffs_antithetic_control_variate_opt(K, size, bs, rng): \n",
    "    Gn = rng.standard_normal((size, bs[\"d\"]))\n",
    "    payoffs_X1 = np.maximum(np.mean(phi(bs, Gn), axis=1) - K, 0) \n",
    "    payoffs_X2 = np.maximum(np.mean(phi(bs, -Gn), axis=1) - K, 0)\n",
    "    payoffs_X = 0.5 * (payoffs_X1 + payoffs_X2)\n",
    "    payoffs_Y1 = payoffs_control(bs, K, Gn)\n",
    "    payoffs_Y2 = payoffs_control(bs, K, -Gn)\n",
    "    payoffs_Y = 0.5 * (payoffs_Y1 + payoffs_Y2)\n",
    "\n",
    "    cntxt[\"lambda_numerator\"] += (payoffs_X * payoffs_Y).sum() \n",
    "    cntxt[\"lambda_denominator\"] += (payoffs_Y**2).sum() \n",
    "    cntxt[\"lambda\"] = cntxt[\"lambda_numerator\"] / cntxt[\"lambda_denominator\"]\n",
    "\n",
    "    payoffs = payoffs_X - cntxt[\"lambda\"] * payoffs_Y\n",
    "    return bs[\"actualization\"] * payoffs"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 110,
   "id": "afdce2a0",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Adaptive Monte Carlo: 80000it [00:00, 428014.23it/s, IC_size=0.00992, mean=27.8, var=0.512]\n",
      "Adaptive Monte Carlo: 100000it [00:00, 417425.51it/s, IC_size=0.00901, mean=19.4, var=0.528]\n",
      "Adaptive Monte Carlo: 100000it [00:00, 424307.82it/s, IC_size=0.00902, mean=12.3, var=0.53]\n",
      "Adaptive Monte Carlo: 60000it [00:00, 413794.52it/s, IC_size=0.00884, mean=6.97, var=0.305]\n",
      "Adaptive Monte Carlo: 100000it [00:00, 424733.62it/s, IC_size=0.00901, mean=3.55, var=0.528]\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>mean</th>\n",
       "      <th>var</th>\n",
       "      <th>ci_size</th>\n",
       "      <th>samples_size</th>\n",
       "      <th>time (s)</th>\n",
       "      <th>lambda</th>\n",
       "      <th>K</th>\n",
       "      <th>method</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>80</th>\n",
       "      <td>27.766779</td>\n",
       "      <td>0.511902</td>\n",
       "      <td>0.009916</td>\n",
       "      <td>80000.0</td>\n",
       "      <td>0.188013</td>\n",
       "      <td>0.972516</td>\n",
       "      <td>80</td>\n",
       "      <td>antithetic_var_cont_opt</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>90</th>\n",
       "      <td>19.398933</td>\n",
       "      <td>0.528058</td>\n",
       "      <td>0.009008</td>\n",
       "      <td>100000.0</td>\n",
       "      <td>0.240708</td>\n",
       "      <td>0.931822</td>\n",
       "      <td>90</td>\n",
       "      <td>antithetic_var_cont_opt</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>100</th>\n",
       "      <td>12.266264</td>\n",
       "      <td>0.529686</td>\n",
       "      <td>0.009022</td>\n",
       "      <td>100000.0</td>\n",
       "      <td>0.236727</td>\n",
       "      <td>0.952754</td>\n",
       "      <td>100</td>\n",
       "      <td>antithetic_var_cont_opt</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>110</th>\n",
       "      <td>6.965330</td>\n",
       "      <td>0.304993</td>\n",
       "      <td>0.008838</td>\n",
       "      <td>60000.0</td>\n",
       "      <td>0.146040</td>\n",
       "      <td>1.060539</td>\n",
       "      <td>110</td>\n",
       "      <td>antithetic_var_cont_opt</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>120</th>\n",
       "      <td>3.552981</td>\n",
       "      <td>0.528052</td>\n",
       "      <td>0.009008</td>\n",
       "      <td>100000.0</td>\n",
       "      <td>0.236170</td>\n",
       "      <td>1.140471</td>\n",
       "      <td>120</td>\n",
       "      <td>antithetic_var_cont_opt</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          mean       var   ci_size  samples_size  time (s)    lambda    K  \\\n",
       "80   27.766779  0.511902  0.009916       80000.0  0.188013  0.972516   80   \n",
       "90   19.398933  0.528058  0.009008      100000.0  0.240708  0.931822   90   \n",
       "100  12.266264  0.529686  0.009022      100000.0  0.236727  0.952754  100   \n",
       "110   6.965330  0.304993  0.008838       60000.0  0.146040  1.060539  110   \n",
       "120   3.552981  0.528052  0.009008      100000.0  0.236170  1.140471  120   \n",
       "\n",
       "                      method  \n",
       "80   antithetic_var_cont_opt  \n",
       "90   antithetic_var_cont_opt  \n",
       "100  antithetic_var_cont_opt  \n",
       "110  antithetic_var_cont_opt  \n",
       "120  antithetic_var_cont_opt  "
      ]
     },
     "execution_count": 110,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "name = \"antithetic_var_cont_opt\"\n",
    "function = sampling_payoffs_antithetic_control_variate_opt\n",
    "\n",
    "result = {} \n",
    "for K in [80, 90, 100, 110, 120]:\n",
    "    cntxt = { \"lambda_numerator\": 0., \"lambda_denominator\": 1e-7 }\n",
    "    result[K] = monte_carlo_adaptive(\n",
    "        lambda size: function(K, size, bs, rng), \n",
    "        epsilon=epsilon, \n",
    "        batch_size=batch_size)\n",
    "    result[K][\"lambda\"] = cntxt[\"lambda\"]\n",
    "result_df = pd.DataFrame(result).T\n",
    "result_df[\"K\"] = result_df.index\n",
    "result_df[\"method\"] = name \n",
    "\n",
    "result_antithetic_varcont_opt = result_df\n",
    "result_antithetic_varcont_opt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 111,
   "id": "84d1ddc2",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x640 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "result = pd.concat([ result_varcont, result_varcont_opt, \n",
    "                     result_antithetic_varcont_opt ])\n",
    "fig, (ax1, ax2) = plt.subplots(nrows=2, ncols=1, figsize=(6.4,6.4), \n",
    "                               sharex=True, layout=\"tight\")\n",
    "sns.barplot(data=result, x=\"K\", y=\"var\", hue=\"method\", ax=ax1)\n",
    "sns.barplot(data=result, x=\"K\", y=\"time (s)\", hue=\"method\", ax=ax2)\n",
    "fig.suptitle(fr\"Variance et temps d'execution en fonction du strike $K$, \"\n",
    "             +fr\"précision demandée $\\epsilon$ = {epsilon}\");"
   ]
  }
 ],
 "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.13.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
