{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "615b77f5",
   "metadata": {},
   "source": [
    "# A novel deep multi-criteria collaborative filtering model: reproduction\n",
    "\n",
    "**Paper.** N. Nassar, A. Jafar, Y. Rahhal, *A novel deep multi-criteria collaborative filtering model for\n",
    "recommendation system*, Knowledge-Based Systems 187 (2020) 104811.\n",
    "\n",
    "**What the paper proposes.** A recommender that predicts a user's overall rating of an item in two stages\n",
    "(the aggregation-function approach of Adomavicius & Kwon):\n",
    "\n",
    "1. **Criteria Ratings DNN.** The user ID and item ID become 64-dimensional embeddings, which are\n",
    "   concatenated and passed through ReLU layers `[128, 64, 32, 16, 8]` to predict the *k* criteria ratings.\n",
    "2. **Overall Rating DNN.** The criteria ratings, z-scored with the training mean and standard deviation,\n",
    "   go through ReLU layers `[64, 32, 16, 8]` to predict the overall rating.\n",
    "\n",
    "The two networks are trained **separately**: the second one learns from the *true* criteria ratings. At\n",
    "recommendation time, the criteria predicted by stage 1 are fed into stage 2.\n",
    "\n",
    "**What this notebook does.** It implements both networks from scratch in PyTorch with every setting\n",
    "in Section 4.3, and runs every experiment in Section 4 on the same TripAdvisor data:\n",
    "\n",
    "| Paper | Here |\n",
    "|---|---|\n",
    "| Table 1, 2: data statistics | Section 1 |\n",
    "| Table 5: per-criterion MAE | Section 4 |\n",
    "| Table 6: comparison with SVD, SVD++, SlopeOne, Baseline estimates, KNN with baseline, Single DNN | Section 4 |\n",
    "| Table 3: optimizers · Table 4: hidden layers · Fig. 4: embedding size | Section 5 |\n",
    "| **Improvement: DMCCF+** (not in the paper) | Section 7 |\n",
    "\n",
    "The code lives in three files next to this notebook: `prepare_data.py` (parsing and filtering),\n",
    "`deepmccf.py` (models, training, metrics) and `run_experiments.py` (the experiment loop, with cached\n",
    "test predictions in `results/preds/`). Delete that folder to recompute everything from scratch (about 30 minutes on a laptop CPU)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "4861e8cd",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-11-12T18:04:29.158008Z",
     "iopub.status.busy": "2026-11-12T18:04:29.157864Z",
     "iopub.status.idle": "2026-11-12T18:04:31.633804Z",
     "shell.execute_reply": "2026-11-12T18:04:31.633387Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "torch 2.15.0\n"
     ]
    }
   ],
   "source": [
    "import inspect, json, warnings\n",
    "from pathlib import Path\n",
    "import numpy as np, pandas as pd, torch\n",
    "import matplotlib.pyplot as plt\n",
    "from IPython.display import display, Markdown\n",
    "\n",
    "warnings.filterwarnings(\"ignore\", category=UserWarning)\n",
    "import deepmccf as D, prepare_data as P, run_experiments as X\n",
    "\n",
    "pd.set_option(\"display.precision\", 4)\n",
    "plt.rcParams.update({\"figure.dpi\": 110, \"axes.spines.top\": False, \"axes.spines.right\": False,\n",
    "                     \"axes.grid\": True, \"grid.color\": \"#e5e5e5\", \"axes.axisbelow\": True, \"font.size\": 10})\n",
    "PAPER_C, OURS_C = \"#9aa0a6\", \"#2563eb\"   # paper = grey, this reproduction = blue\n",
    "print(\"torch\", torch.__version__)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "24e5b515",
   "metadata": {},
   "source": [
    "## 1. Data\n",
    "\n",
    "The paper uses a TripAdvisor hotel dataset with seven criteria (Value, Rooms, Location, Cleanliness,\n",
    "Check in / front desk, Service, Business service) and an overall rating, all on 1–5. It is Hongning\n",
    "Wang's **LARA TripAdvisor** collection. The original host is offline, so `data/raw/Review_Texts.zip` was\n",
    "downloaded from the Internet Archive's 2015 copy.\n",
    "\n",
    "`prepare_data.py` keeps reviews whose eight ratings are all present and in 1..5, drops anonymous\n",
    "reviewers, and keeps one rating per (user, hotel) pair."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "90983eee",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-11-12T18:04:31.634804Z",
     "iopub.status.busy": "2026-11-12T18:04:31.634731Z",
     "iopub.status.idle": "2026-11-12T18:04:31.673202Z",
     "shell.execute_reply": "2026-11-12T18:04:31.672798Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/markdown": [
       "**Table 1: dataset statistics**"
      ],
      "text/plain": [
       "<IPython.core.display.Markdown object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "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>paper</th>\n",
       "      <th>ours</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>users</th>\n",
       "      <td>72119</td>\n",
       "      <td>70523</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>hotels</th>\n",
       "      <td>1850</td>\n",
       "      <td>1759</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>ratings</th>\n",
       "      <td>81085</td>\n",
       "      <td>78973</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>sparsity</th>\n",
       "      <td>99.94%</td>\n",
       "      <td>99.94%</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "           paper    ours\n",
       "users      72119   70523\n",
       "hotels      1850    1759\n",
       "ratings    81085   78973\n",
       "sparsity  99.94%  99.94%"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "csv = Path(\"data/tripadvisor_mc.csv\")\n",
    "if not csv.exists():                                   # parse the raw files once\n",
    "    table, stats = P.build_table(Path(\"data/raw\"))\n",
    "    table.to_csv(csv, index=False)\n",
    "df = D.load_ratings(csv)\n",
    "t1, t2 = P.describe(df)\n",
    "display(Markdown(\"**Table 1: dataset statistics**\"), t1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "e9602479",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-11-12T18:04:31.674147Z",
     "iopub.status.busy": "2026-11-12T18:04:31.674094Z",
     "iopub.status.idle": "2026-11-12T18:04:31.839776Z",
     "shell.execute_reply": "2026-11-12T18:04:31.839340Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAABK8AAAITCAYAAADB3D/QAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjExLjIsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvgI3uAAAAAAlwSFlzAAAQ6wAAEOsBUJTofAAAkE9JREFUeJzt3QeU1GT3x/FL770jCtKbIiAgIEUUC4gFFCwUBRQbimJ5bSgqgoqdV1RQQVRU7FhQVFR6sRcQpAhIL9I7+Z/f8z/Zd3bZvrNMMvv9nDNndzMzmWSSPJvc3Oc+uTzP8wwAAAAAAAAIoNyxXgAAAAAAAAAgJQSvAAAAAAAAEFgErwAAAAAAABBYBK8AAAAAAAAQWASvAAAAAAAAEFgErwAAAAAAABBYBK8AAAAAAAAQWASvAAAAAAAAEFgErwAAAAAAABBYBK8AAIHTt29fu++++9L12htvvNFuv/12y+mC+j088MAD1qdPn5gua3Kfl5F9LDuXA/GFtgsAgOyRN5vmCwDIYYYNG2bTpk1L83XHH3+8jRkzJtXXzJo1y+rWrZuuz503b54VLVrUomXfvn323nvv2fTp02316tVWpUoVO+uss+z888+3WLvmmmusVKlSNnz48Gz/HqLll19+sZ9++ikqy5ra+qcmuc/LyD4W79sI0dvGsWy7AACIZwSvAABRoeBOixYtEv7+8ccfXZbJDTfckCjwE+SLtV27dtlxxx1n+fLlc1kyZ599tgu89OzZ01q3bm2TJ092z8XKnDlzrGLFisk+9+yzz1revOH4t57ZZU1t/bPj83LyNkL098Ok2B8AAEg/zqAAAFHRsGFD90iqTp06dsYZZ4TiWz5w4IA1adLE3nzzTStTpoybdt5557lMih49etjYsWPt2muvtSBq1qzZUf28X3/91b7//nv3e65cuax8+fJ2wgknuEy1oC3r0f68oC9HpL///jvNjMmCBQvaJZdc4o6LE0880erXr5/q69955x2rXbu2ey3CtT8AABBUBK8AAEeNagzNnDnT/Z4nTx4XIGrbtq1deeWVVqBAgSNev2PHDnviiSdckKRs2bKunsypp56ars9au3atCzb98MMPdvDgQReUuu6666xChQopvqdYsWL2ySefWP78+RNNP/30093PuXPnJgpeffbZZ/b444/bnXfemfCalGjZjz32WJeNpoyL2bNnW4cOHeymm25y30uV6ml3Nbr+5jvczzHjJ1o0XdXnUvdTXSVfeeUV27hxozVt2tRuueUWe+qpp2zp0qU2fvz4RO/R96T17t27twterVixwmbMmGENGjRw2Wv++5OjrDYFRB599NGEafpMdSdVN0MFERUgufrqq913JhdccIFbDnXl9IOhyn557bXX0vx+k/u8jOxjXbp0cV1HlUUYSdtt1apV9vLLLx+xjLX7b7JYWDy2bLpfq3XVcbh79277/fffbfPmzbZ3717btGmTXX755QlZYjouFi5c6LrJVatWzXX9TenY1TzV7XbgwIH2/vvvp3nspuc4TW3bJnXrrbfaunXrEvaLSE8//bR9/vnnbvm0P6S1zyUnrf3Qt2fPHvd56kaoLob9+/e3Nm3aZPk4SI3WW/uivkvP86x58+auvSpevHjCa7SdX3rpJVu8eLEVKlTILVO/fv2sSJEiR3zf+i5TOza0PfQ9vPHGG0csy5NPPmlTp05N+K4BAMgqCrYDAI6abt262X/+8x/30IWnAhwPPvignXvuue5iK5IuZC+66CLXzVABEl0MtmvXzl5//fU0P0cXjLro04WquizqQlyBlUaNGtmSJUtSfJ8u5JMGrvwsIylXrlyi6f/884999dVX7gI8Pcuki0Ctkz6ne/fubp387yXWXn31Vff9KnihAuslSpSwiy++2C2zH3BMji6Ex40bZ1dddZUdPnzYXXSffPLJ7oJZ66UL8ORq/egC27d161Z3of3xxx+7fUGfX7hwYevYsaP7juXmm292AQ0FTvx9KDKQmNr3m/TzMrqPKTNp0aJFR7z/559/dp/ri1zGMNCya99VsKpXr14u4OAHSU477TS3XfVQwEjbUsEOBWxSO3Y1z9KlS7ttmdb3mt7jNLVtm1SNGjXc58yfP/+Iba3gm9ZBwZT07HPJSWs/lEOHDrl1URfjK664wv79918XbNN+mNXjICUKPNerV88Fi/R6ff62bdvc7753333XGjdu7L5bbe/27dvbiBEjXAaYApfJfd+pbUN93sSJE+27775LtCxqQx566KGE7xoAgGgg8woAcNQk7UbUqVMndyf/lFNOsS+//DLRhdYXX3zh7tzrgkl0IaWLIl0o6sJOwZWUCq6ri58urHRRlTv3/9+nUSBGF27KntHFcnop+HLHHXe4+egiLunyaxmT6y6Z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wvQWLVrYOeecY5s2bbIgUgZ7yZIlY70YCDgyrxBXrrjiCtfVb9KkSYmm//DDD/brr7+6lNmffvopodtP3bp1rWPHjjZq1Cg7ePBgivPVxWnLli2PmN68eXOX0RVp3bp1dvPNN7tMsBNPPNFuuOEG27x5cxTXEkCQ5MuXzwoVKpTojuHGjRtdO9CkSROXst+3b1+XVREprdcoU1TtlNoztV3qotiqVSt7+eWXbdeuXXbvvfdas2bN3OOBBx44og178cUX7fTTT3ftULdu3ezbb789Ct8GgOy8uLvwwgutQYMG7pxk+PDhLmMr0p9//mlXXXWVNW7c2E499VSXcXHo0CH33HvvvZdw/qN5dO7cOSELQ9RlRzcA//nnn4TX3Xrrre65t956y3r16pWh5dG8zjrrLPv0009dBkijRo3c63/++Wd2EiAb/P333+6c4ZZbbkkUuPIpq7Jr166pXu/ouqh+/fp29tln29SpUxM9r+PXbxt0DaS2JmmwW+c0zz//vN19990uA0yv0+979+5NddnVvqidycx80lruL774ws477zx3PqTnldDgeV66n0eAeECcadu2rXtEGjhwoFe6dGlv79697rFkyRL3+OOPP7y3337bO+6447zbb7894fXvv/++Wixvx44d7u8nn3zSq1ChwhGfVaZMGe/ZZ59N+HvNmjXeMccc45188sneF1984c2cOdPr2LGj16RJE+/QoUPZut4Ast+ECRNc27B8+fKEaWPHjnXT9Jzs37/fa9CggTvup06d6s2YMcM755xzXHuxYcOGdL9m4cKFbr7lypXzxo8f7/3000/enXfe6abVqVPHu+OOO7zvv//ee/fdd72iRYt6TzzxRKJlKlGihPfWW295v/76q/fhhx96HTp08FatWsVuAgSQzkl0bE+cODHZ53U+kTdvXu+mm27y5s+f745tnZdcdtllCa+ZN2+eV7hwYa979+7etGnTvFmzZnm33HKLN3r0aPf89u3bE85/1C6MGTPGK168uPfyyy+757du3erdfPPN7jzGf926devcc8OHD3fTM7I8d999t5cnTx6vdevW3pdffunaq4svvtgrX768t23btmz7LoGc6vXXX3ftyIIFC9J8rY5nHdeR10qFChXynnrqKe+HH37wHn/8ca9gwYLeN998k/AanUP4bYPal8svv9yrVKlSouNZ5x75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ufpWqos1YsQIN+3GG2+0Ro0a2W233ea6JKbkiSeesKFDhx4xfePGjZYvXz6LlU2bNlk8YD2Che2RdUmzQzMjiO0O+0awsD2CJ1bbhDYn+Dheg4XtEft2J4jnOcK+ESxsj2DZFJI2JxAF24cMGWKPP/647dq1K9H0yy67zP744w/76aefUnzvU089ZTfffLPLstJohb5bbrnFXnvtNduwYUOG7gw0b97cVqxY4UYtjEUEVzuOujtG425rrLAewcL2CH4WRKzaHfaNYGF7BE+stwltTnDFet+IFtYjWIKwPbIj84rrq/jYN6KB9QiWQwHYr0KXedWsWTPbvXu3LVy40HX78y1YsMB1B0yNGkNR9lUk/V24cOFU31u8eHH3SO4LjGWjEOvPjxbWI1jYHsEQxHaHfSNY2B7BE+ZtQpuTvcK8b0RiPYIlzNsjiG1OED4/WliPYGF75MDRBs8880w32tbIkSMTpk2ePNmWLFliffv2TfTa/v3726RJkxL+btmypZ1wwgn24osvJnQ9VPRQda86d+58FNcCAAAAAAAA0RaIzKsCBQrYxIkT7fzzz7fFixdbhQoV7NNPP7Vhw4ZZq1atEr32pZdecoXcL7744oSaV3pvp06drHHjxla3bl375ptvrGHDhjZ8+PAYrREAAAAAAADiJnglrVu3tqVLl9rXX39te/bssUceecRq1KhxxOvGjBljJ554YqJpDRo0sD///NOmTZtmW7dudYXamzZtehSXHgAAAAAAIFzqDdgatXktHlvW4j54JSVKlLALL7ww1deo22ByChYsaOecc042LRkAAAAAAEBsjRk/MWrz6tyxnYVFIGpeAQAAAAAAAMkheAUAAAAAAIDAClS3QQAAAADIid13/C48Yak/AwBHE5lXAAAAAAAACCyCVwAAAAAAAAgsglcAAAAAAAAILIJXAAAAAAAACCyCVwAAAAAAAAgsglcAAAAAAAAILIJXAAAAAAAACCyCVwAAAAAAAAgsglcAAAAAAAAILIJXAAAAAAAACCyCVwAAAAAAAIjP4NVff/1lf/75p/vd8zx75JFH7KKLLrJPPvkkWssHAAAAAACAHCzTwat9+/ZZt27dLG/evO7vN9980x566CHbu3evm75kyZJoLicAAAAAAAByoEwHr+bMmWNly5a1GjVquL/ffvttGzZsmH388cfWt29fe+edd6K5nAAAAAAAAMiBMh28Wr16tVWqVCmhy+DMmTPtnHPOcX83aNDA1q5dG72lBAAAAAAAQI70/33+MuHYY4912VfqJjhr1izLly+f1apVyz23YsUKO+6446K5nAAAAAAAAMiBMh28OvXUU61QoUIuSLVz506744473PRDhw7Zp59+ah9++GE0lxMAAAAAAAA5UKaDV7lz57bvvvvO3nvvPStZsqR17drVTf/777/t5ptvtpo1a0ZzOQEAAAAAAJADZTp4JaVKlbJ+/folmla9enX3AAAAAAAAAGJWsB0AAAAAAAAIbObV+++/b0OHDk32uVy5clmJEiWsVatWrgthuXLlsrKMAAAAAAAAyKEynXlVpUoVy58/vy1cuNCOP/54a9++vTVs2NDVvNq4caPVqFHDJkyYYG3btrX9+/dHd6kBAAAAAACQI2Q6eFW1alVbu3at/fDDDy4L66mnnrLXXnvNli1bZsWLF7devXrZokWLzPM8e+ONN6K71AAAAAAAAMgRMh28+vbbb61Zs2bWoEGDI4q49+nTxz7++GMrUqSIXX755fbHH39EY1kBAAAAAACQw2Q6eKWugJs3b072OU33uwqqa2HBggUzv4QAAAAAAADIsTIdvGrTpo3NmTPHhg8fbnv27HHTDh8+bJMmTbJRo0bZ6aef7qZNnTrVOnToEL0lBgAAAAAAQI6R6eDVcccdZ2PGjHHBq2LFilmlSpWscOHCdumll9r1119v559/vquJpZ8q5g4AAAAAAABkVF7Lgt69e1unTp1sypQptnLlSitfvry1a9fOatWq5Z5XQGvgwIFZ+QgAAAAAAADkYFkKXknZsmWtZ8+e0VkaAAAAAAAAIBrdBgEAAAAAAIBAB69mzZrlug3WqFHDqlSpkuhx++23R28pAQAAAAAAkCNlutvg+vXr7eyzz7bWrVtb3759rUCBAomeP/HEE6OxfAAAADHTfkh+M9salXktHls2KvMBAADIaTIdvJo5c6bVr1/fPvvss+guEYC4Mmb8xKjNq3PHdlZvQHQuIoULSSD+RLPN6duze9TmBQAAgBh0G8ybN68df/zxWfhoAAAAAAAAIJuCVyeffLLNnz/fdu/endlZAAAAAAAAANnTbXDXrl127LHH2qmnnmq9evWyUqVKJXq+du3a1qpVq8zOHgAAAAAAAMh88Gr69OnuIbfddtsRz/fr14/gFQAAAAAAAGITvNIIg3oAAAAAAAAAgQteZYf169fblClTXB2tU045xRo3bpzhecyZM8dmzJhhLVq0sDZt2mTLcgIAAAAAACCAwas//vjDvv76a2vQoIFVqFDB/Z4Svea0005L97ynTp1qXbt2tfbt27t533777XbdddfZI488ku55bN682S688ELbsGGD68pI8AoAAAAAACAHBa++//57u+eee6x3797WrFkz93tK9Jr0Bq/27Nnjir5feeWV9swzz7hpl112mZ1++ul29tlnp3s+11xzjXXq1MnefffddK4RAAAAAAAA4iZ4pQCTHpF/R4O6CqrL4MCBAxOmdejQwerVq2fjx49PV/Dq9ddft5kzZ7rsMIJXAAAAAAAA8SF3Zt+4detWW7NmTYafSymjq2jRolarVq1E05s0aeKeS8s///zjAl+jR4+2kiVLpvtzAQAAAAAAEKcF25XdpOLoY8eOzdBzyVGNqjJlyhwxXdM2btyY5vs16uGZZ55p559/vmXE9u3b3cO3du1a9/PQoUPucbT5nxmLz44m1iNY4mV7ZIeMfid58uTJ8mcGqd2Jl32D9QiWeNke2bEOtDnxt2+EfV1Yj/h3tNudIJ3n+J8b+TOsWI9giZftEbY2J1tGG9y7d68VKlQoQ+/JlStXstM8z0v1fc8995zLzlq4cGGGl/OJJ56woUOHHjFdAbN8+fJZrGzatMniAesRLPGyPaJJ3ZUzonLlyln+zCC2O/Gyb7AewRIP2+P/1yF/1OZHmxP5vcaHeFkX1iN+He12J4jnOcI+Hixsj/i1PhvbnAwHrxYtWmTffPONqy+1fPlye/755xM9v3v3bhszZoxdf/316Z6nMqy2bNlyxHRNSy4jK9Ljjz/uuheqNpZv3759Nm/ePBs5cqQbsbBw4cLJvveWW26x/v37J7oz0Lx5cytXrpwb8TAWUUodyGXLlo1KhkessB7BEi/bIzvE4jgPUrsTL/sG6xEs8bI9ROtg9r8MgqyizYmffSNe9nPWI/4d7XYnSOc5wj4eLGyP+FchG4/zDAev5s6da7feeqsdPHjQ7Xw//fRToueLFy9ubdu2tSuuuCLd8zzppJNceunKlSvtuOOOS5j+66+/WqNGjVJ9b79+/VyQa926dQnTlK21a9cuNy21tDUtqx5J6SQklicisf78aGE9giVetkc0xeL7CGK7Ey/7BusRLPGwPaK9/LQ58bNvxNu6sB7x62jvn0E8zwnC50cL6xEs8bI9oik7v48MB6/69OnjHhMmTLD58+fbM888k+WFOOecc1yhdWVsPfjgg27aggULXGDM/9unbKpmzZpZu3bt3N933XXXEfNTrS2NUDhixIgsLxsAAAAAAABiJ9M1r3r16uUe0aDovLofKiimbCmlmimQ1bt3bzv33HMTvfa2226zwYMHJwSvAAAAAAAAEL+yXLD9xx9/dBlYKsIXWVy9cePG1rlz53TPp0ePHq6L4Pvvv2979uyxcePGuYyspBS4at++farzGjhwoLVs2TKDawIAAAAAAIC4Cl7dc889Nnz4cCtRooSrgSU7duywIkWK2I033pih4JXUrVvX7rzzzlRfo26DaUna1RAAAAAAAADhlDuzb1y2bJk99dRTLvPq0Ucfte7du7ui6++8847lz5/frr766uguKQAAAAAAAHKcTAevfv75Z+vQoYOdeOKJlitXroTMq27dulnPnj1t4sSJ0VxOAAAAAAAA5ECZDl5t2bLFypcv734vXbq0q3nlq1mzpq1evTo6SwgAAAAAAIAcK9PBq8ji7PXr17cZM2bYihUrbN++ffbBBx9YpUqVorWMAAAAAAAAyKEyXbC9ZMmSCQGqOnXq2Jlnnmk1atRw9a5UsH3ChAnRXE4AAAAAAADkQJkOXl100UXu4XvzzTdtypQptmnTJjvrrLOsYsWK0VpGAAAAAAAA5FCZDl699957rmj70KFD3d958uSxzp07R3PZAAAAAAAAkMNluubVgQMHbPHixdFdGgAAAAAAACAawatTTjnF5syZYzt27MjsLAAAAAAAAIDs6Ta4f/9+q1q1qjVr1sx69+7tirfnypUr4fnatWtbq1atMjt7AAAAAAAAIPPBq+nTp9uMGTPc70OGDDni+X79+hG8AgAAAAAAQGyCV3379nUPAAAAAAAAIHA1rwAAAAAAAIDsRvAKAAAAAAAAgUXwCgAAAAAAAIFF8AoAAAAAAADxEbzauHGjLVu2LPuWBgAAAAAAAMjsaIMffvihzZkzx8aOHWuTJk2yH3/80R5++OGMzAIAAATQmPETozavzh3bRW1eAAAAQIaCV8WLF7ctW7a437dt22YbNmzgGwQAAEeoN2Br1L6VxWPL8g0DAADkYBkKXrVo0cL69Olj5557rm3evNl1I+zZs2eyrz3ttNOsX79+0VpOIEeJZgaEnwXBhSQAAAAAIO5rXlWtWtUmT55sZcuWtd27d9v+/fvt33//Tfah5wEAAAAAAICjlnklZ5xxhnuo7pVf/woAAAAAAACIeeZVpP79+xO4AgAAAAAAQDCDV7Jnzx677777rE6dOlagQAHXrVB1rtatWxe9JQQAAAAAAECOleFug5HOP/98mzt3rl1++eVWvXp1V8D9rbfesqlTp9qvv/5qJUqUiN6SAgAAAAAAIMfJdPBq/vz5tmDBAvvpp5/s+OOPT5h+//33W6tWrezVV1+1gQMHRms5AQAAAAAAkANlutvgokWLrEOHDokCV1KoUCG77LLL3PMAAAAAAABATDKvihUrZqtXr072uVWrVrnnAQAAACCpMeMnRu1L6duzu7Ufkt/MtkZlfovHlo3KfAAAAci8atu2rf3+++9222232dat//+PYt++fTZmzBh7/vnnrXPnzlFcTAAAAAAAAOREmc68Kl26tE2YMMGNLjhy5EhXnH3Hjh2WJ08eNwJhmzZtorukAAAAAAAAyHGyNNrgBRdc4IJUn3/+ua1YscIqVqxo7dq1sxo1akRvCQEAAAAAAJBjZSl4JWXKlHEF2gEAAAAAAIDA1LwCAAAAAAAAshvBKwAAAAAAAMRvt0EAAAAAAIAgGzN+YtTm1blju6jNC+lD8AoAAAAAACAD6g3YGrXva/HYsnz3R6vb4N69e2379u3Rmh0AAAAAAACQteDVzp07bejQoXbsscda4cKF7ZZbbrElS5ZY//79+WoBAAAAAAAQu26DnudZ586dbd26dTZ48GBbunSp7dmzx2rVquUCWLNnz7aWLVtmfQkBAAAAAACQY2U682r69Om2fPlymzdvng0aNMgaNWqU8Fy7du3s448/jtYyAgAAAAAAIIfKdPBKgStlVpUoUeKI58qWLWtbt0aveBkAAAAAAABypkx3G6xYsaL9+OOPduDAAcuXL1+i537//XerXr16huepeSmTa/fu3dakSRMrU6ZMut+7Zs0aW7hwoZUuXdrq169vBQoUyPDnAwAAAAAAIE4yr9q2bWs7duywbt262a+//mqHDx9207/77jt7++237eKLL87Q/H7++WerWbOmXX311TZs2DBXBP6FF15I83367I4dO1rt2rVt+PDh1qNHDzefTz75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4fqK/ZU2i33AsqnNCUTmlepT7dx5ZERc04oXL55t773lllusf//+CX/v3bvX3R04/vjjs5RZkVkqNt+8eXObN2+eVapUycKK9QgWtkd06c5AVgSp3WHfCBa2R/AEYZvQ5gRTEPaNaGA9giUo2yMr7U6QznOC9J1mFesRLGyP2LQ5gQhe1alTxzZu3OhSTCMDTn/99ZfVrl07296r1ycNcNWsWdNiTQ1rlSpVLOxYj2BhewRDENsd9o1gYXsET5i3CW1O9grzvhGJ9QiWMG+PILY5Yf9OI7EewcL2yIEF288++2zLlSuXffTRRwnTNm3a5EYR7Ny5c6LXLlq0yAWrMvNeAAAAAAAAhEsgMq+URnr99dfbrbfe6roBqgD73XffbdWqVUuUdir16tWzwYMH28iRIzP8XgAAAAAAAIRLIIJX8uSTT1qNGjXs0UcftT179ljLli1t4sSJVqhQoSO6CZYvXz5T7w06pdjed999adbqCjrWI1jYHmDfCAeO1eCJl20SFPH0fcbLurAewRIv2yNI4uU7ZT2Che0RG7lUtT1Gnw0AAAAAAAAEv+YVAAAAAAAAkByCVwAAAAAAAAgsglcAAAAAAAAILIJXAAAAAAAACKzAjDaYky1btszGjRtnixcvthtuuMFOPfVUC5sDBw7Ye++9Z7Nnz7b9+/dbo0aNrE+fPlawYEELk2eeecZmzZrlftdolccff7z16tXL/QyrgwcP2sCBA23r1q32xBNPWOXKlS0s/vzzTzdCTFKdOnWy3r17x2SZ4sG+ffvsww8/tI8//tjtDyNGjLAw+v333+3999+35cuX2zHHHGM9evSwBg0aWNja/7vuusv9nitXLqtYsaL7H9C1a1f3d1jp/8Hbb79tHTt2tH79+lmY3H333bZ06dIjpr/55psxWZ548dtvv9n48eNt1apVNmTIEKtfv76Fze7du+2tt96yBQsWWJ48eax58+Z26aWXut/D5P7777dFixa534sUKWK1atWyK6+80ipUqGBhtX37dncOrXPQCRMmWL58+SwsdO789NNPHzG9Z8+edu6558ZkmeLBjh073P+hr7/+2po0aWKDBw+2MJo7d659+umntnr1aqtWrZo7/61ataqFbR2efPJJ97vaS52z6fxAjzB74YUXbNq0aXbZZZfZeeedZ2FyzTXX2L///ptoWpkyZey///2vBRmZVzE2YMAAO/PMM23btm3uhGjFihUWxn8OCu7ceeedVqVKFXfxqB2/YcOGtnbtWguTZs2a2QUXXOAeuoD89ddfrU6dOvbFF19YWD300EP22muvuf1LJ3dhsnHjRrfcbdu2TdguepxwwgmxXrTQmjdvnjte33nnHfvjjz9sypQpFkb33nuvnXTSSfb3339bq1atbP369da4cWMbPXq0hUmpUqUS9usuXbpY6dKl3QmFToIOHz5sYbRy5Uq76qqr7KOPPrL58+db2Hz++ee2a9euRG2OHsg8XYBfcsklCec6GzZsCN3X+ddff9mxxx5rTz31lNWrV89dRN5zzz3WsmVLt7+ESZs2bRL26xYtWriL+xo1atiPP/5oYXXjjTe6mxnavw4dOmRhov9jWu6kbY6Cisgc3aDT9zdz5kybM2eOTZ8+PZRfZd++fe20005zbafOdRYuXOiuS7Svh4mCVf5+fc4557gA1oUXXmjXX3+9hZVuYujaV8euzqfD5oMPPrACBQokanPOOussCzwPMbVo0SLv8OHD3qpVqzxtjgkTJoRui2zcuNE766yzvO3btydM27p1q1eyZElv0KBBXtidfvrpXuPGjb0wWrBggVesWDHvsccec/vXwoULvTCZPn26W24dH4iODRs2eJs3b3a/9+jRw2vUqFEov9prrrnG++qrrxJNu+mmm7zChQt7u3fv9sLss88+c/t90vULA/0/69Chg3frrbd6VatW9QYMGOCFTdOmTb3BgwfHejHi7lxHZs+e7fbtadOmeWEzf/5874orrvD279+fMG3ZsmVerly5vKeeesoLs4MHD3oNGjTwunTp4oXRhx9+6FWoUMG799573f61Z88eL0wmTpzolhvRo/PGnTt3ut9btGjhnX/++aH8ert37+79+OOPiaZ169bNq1Klihd2o0ePdvv90qVLvbBRG1OvXj1v1KhRbh2GDx/uhU2FChW8J5980gsbMq9iTNHzMHcNkeLFi7vobbFixRKmlSxZ0mrXrp1s14uwUZaPujmEzd69e12XR3XPqFmzZqwXBwFRrlw5l90Tdo888oh16NAh0TRlEKhbT9gyPpPyMwvD2O6o67Uyrx544IFYLwoCdq4TdnXr1rWXXnopUXc0ZbGqTQ37uY6yIJRNFsY2RxnayvQcNWpUXPxvQ3SoJ4i6xIbdmDFjXJZ50nMd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3Nj2799v8+bNs2uvvdaWLFlizz77bFQ/T+cv+jzP86I633jF9wVkP53f6Eadrld0k65hw4YuiUDnPyeccIJ9/vnn1rRp00BtilWrVtm2bdtS/Bvxg+AVAm3Lli3WrVs3F7x69dVXE6bXrl3bOnbs6LKxwnLSpxNhZYpVqVIl1osCIAOWLVtmX3/9tb3yyit26aWXumn16tWztm3bHvUsqHfeecfy5ct3VD8TyGkqVarkbpT55xsLFiywcePGRT141alTJ3deUKBAgajON17xfQHZ7+qrr3Y3yhYtWpRws0zZV+3atXOPiy66yP7880/Lnz8/mwNHHd0GEWi6WFQAa9iwYck+P2LECCtYsGDC37///ru7uDzxxBPdheWbb755xHs0P6W+6q5B3bp1rXfv3rZy5cojXqPAWLNmzdy8rr/+etu0aVOKy/nGG2+4E9yPP/44xdf88ccfLntMdy8iuycosyytZQYQO8WLF09oX5LKm/fIe0Dvv/++nX322e5kr02bNvbaa68dcQGmLNKhQ4e6duj44493bZyO/6TUplSvXt3Wr1/v/h44cKA98cQTiV7zwQcfuHmqPTvrrLPs008/zdDyAEhdsWLFXDeaw4cPu7/HjBnjuqUkpf/jr7/+esLfO3futLvuustatGjhntP5hjI4fd9++607L1CGlx+cVlfF2bNnW9euXV3Gg7oof/HFF0d81urVq925SaNGjVxX5uuuuy7ReUpan53W88lJz3vSWi5/HadPn+7aK507qXuS2sEvv/wy0bx0c/KUU06xRx55JNnvy/88tYu6QaiHzt20nOldHgD/o2C6zikGDRp0RJZ3njx53LnLihUrXHaqKCv1sssuO+IrfP75512Wln+s6lgeO3as64atY17t2pQpUxK9R23KqFGj7Oabb3bHq85X5Lzzzkvoyt2kSRO78sor3U1F5FAeEGAXXHCBV61atTRfN3XqVKVfuddOmjTJ+/33371HHnnETZs5c2bC6/7991+vdu3aXv369b3PPvvM+/77771LLrnEq1q1qrdr1y73ms2bN3s1a9b0mjRp4n3yySfezz//7P33v//1BgwYkOiz1q5d6/5+4IEHvGLFinmffvppqss4e/Zs974lS5ZkaJkBxN4999zj5cqVy6tbt65rC1555RVvw4YNR7zu0Ucf9fLkyePahZ9++sl79dVXXfswbty4hNc0atTIy507t3fttde6Nmj58uXuZ3LH/rnnnuudfvrpCX+3bt06oS2SYcOGeQULFvSGDx/u/fjjj65d6dSpk7ds2bJ0Lw8AL9H/Zf2/9q1atcqrUaOGOx/xPfbYY94xxxxzxNdWokQJb/To0Ql/9+3b1zvhhBO8r7/+2v2Pf+ONNxIdz/rfr8/bs2eP+1vtiv5u2LChO//47bffvMGDB3v58+dPOHeQlStXehUqVPBatmzpTZs2zZs7d67XsWNHr2nTpt6hQ4fS9dlpPZ+ctN6TnuXy11HnYh999JG3dOlSb9u2bV6bNm28iy++ONHnffnll+61v/76a7Lfl9rO8uXLex06dHCvVRs4YsQI7+6770738gD4n9dee80dYzpekrN79273/MCBA93f7777rjufUTsZSe1Ev379Ev6+7rrrvMKFC3ujRo3yfvnlF+/pp5925y5qSyLbz7x583r33Xefe40/zzVr1rhjXY958+Z5vXv3dse1rul8ao91HpTS34gfBK8QaKeeeqp38sknp/uEc/LkyYmmK0h11113Jfw9dOhQL1++fO5kybd//37vuOOO8x5//HH397333usa0E2bNiWa18GDBxN9lk6K1ICqgdRFYVpSCl6ltcwAguGPP/5wwaCuXbt6pUqVcheUOgHzKfCtk7Ebb7wx0ftGjhzpValSJaENUfBKF09JnXTSSV7//v0T/laAXCdyukBMLni1ceNGtwzJnaDpwiy9ywPAS/R/uWLFiu6mVuXKld2FWatWrdzxlNHglY7pIUOGJHpN5HGXUvBKQZjIY7lkyZLec889lzDtqquuctMil2nr1q0uMP3WW2+l67PTej45ab0nPcvlr+N3332XaD6aXqBAgUTvvfzyy73mzZun+H1deeWVbjvt3bs32WVKz/IA+J+nnnoq0bVKckqXLu1deumlCddQ5cqV8x566KGE5+fPn+/mMWvWLPe3At36+4knnkg0nxtuuMEFliPbT51fpeXw4cOujY68CUfwKueg2yACrWjRoq5AZ3opZTxp3YoNGzYk/K3Cyuqmo244PtWPUR9udeOTGTNmuFENk0uXjaQ6XN9//73NnTvXpbdmVlrLDCAYVOfqtttus3fffdfVg1B3X6XWz58/3z2vws579+617t27J3qf6vOp60pk92R1u0lKqfBvvfWW654kqvOn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TjnlFPdz9+7diabr72LFiqX63uLFi7tHcl9gLBuFWH9+tLAewcL2CIYgtjvsG8HC9gieMG8T2pzsFeZ9IxLrESxh3h5BbHOC8PnRwnoEC9sjB4422LFjR6tWrZrLvvK9++67tnTpUuvfv3+i1/bs2dMmTpyY8Lci+eoiOHr06IS+pxrV4p133rEuXbocxbUAAAAAAABAtAUi80oF19966y0777zzXDCqfPny9vXXX9vIkSPd35Fef/11N4rgpZde6v5WN8M333zTOnXq5LK26tSpYzNmzHAZWcOGDYvRGgEAAAAAACBugleiIJUyrVS7Sl0In3/++WTrv0yYMMHq16+faFrt2rVt4cKFLmilkQsVtGrQoMFRXHoAAAAAAADEdfBKihQpYuecc06qr1G3weRo9IrTTjstm5YMAAAAAAAAObbmFQAAAAAAAJAcglcAAAAAAAAILIJXAAAAAAAACCyCVwAAAAAAAAgsglcAAAAAAAAILIJXAAAAAAAACCyCVwAAAAAAAAgsglcAAAAAAAAILIJXAAAAAAAACCyCVwAAAAAAAAgsglcAAAAAAAAILIJXAAAAAAAACKy8sV4AAMiIegO2Ru0LWzy2LF8+AAAAAAQcwSsA2WrM+IlRm1fnju2iNi8A8SmabU7fnt2t/ZD8ZhadoDkBcwAAgBh0G/zzzz9t0aJF7nfP82zYsGF2wQUX2IcffpiV2QIAAAAAAABZC17t27fPLrroIsufX3ckzSZOnGiPPPKI+7179+62ePHizM4aAAAAAAAAyFrwas6cOVahQgWrXr26+/vtt992mVcffPCBXXXVVfbOO+9kdtYAAAAAAABA1oJXq1evtooVKyZ0GZw5c6adc8457u+6deva2rVrMztrAAAAAAAAIGsF24877jibPXu27dmzxwWuChQoYDVr1nTPrVixwqpVq5bZWQMAAAAAAABZC161bt3aihYtalWqVLFdu3bZ3Xff7aYfPHjQPv30U/v4448zO2sAAAAAAAAga8Gr3Llz27fffutGFixZsqSdd955bvrKlSvttttuS6iFBQAAAAAAABz14JUoaNWnT59E0xS0InAFAAAAAACAmBZsBwAAAAAAALJbpjOv3nvvPRsyZEiyz+XKlctKlChhrVq1ssGDB1uFChWysowAAAAAAADIoTKdeVW1alUrUqSI/fXXX1avXj07++yz7eSTT7a1a9fa1q1brUGDBvbWW29Z27Ztbd++fdFdagAAAAAAAOQImc680iiDa9assZ9++snq1q2bMH3btm1uJMIePXrYk08+6QJab7zxhl155ZXRWmYAAAAAAADkEJkOXn333XfWvHnzRIErUXfB3r172yeffGIdOnSwyy67zBYuXBiNZQUAAAAAAMixxoyfGLV5de7YzuoN2Bq1+S0eW9YC123wwIEDtnHjxmSf03Q9L/ny5bNChQplfgkBAAAAAACQY2U6eKVaVnPnzrUHH3zQdu7c6aYdOnTIJk6caKNGjbKOHTu6aV988YWdfvrp0VtiAAAAAAAA5Bi5s1Lz6uWXX7bHH3/cihcvbuXKlbOCBQu6LoODBg2yLl26uJpYF110kQt0AQAAAAAAAEet5pVcfvnlds4557jsqpUrV1r58uVdoKp69eru+cqVK9u1116blY8AAAAAAABADpal4JWULl3aLrnkkugsDQAAAAAAABCNboMAAAAAAABAoINX06dPtzPPPNOqVq1qFStWTPQYPHhw9JYSAAAAAAAAOVKmuw2uW7fOOnXqZO3bt7frrrvOChQokOj5hg0bRmP5AAAAAAAAkINlOng1a9YsF6CaPHlydJcIAAAAAAAAyGq3wXz58rnuggAAAAAAAEDgglcnn3yyLViwwHbv3h3dJQIAAAAAAACy2m1w+/btVqVKFWvZsqX17NnTSpUqlej5unXr2qmnnprZ2QMAAAAAAACZD17Nnj3b5syZ436/9957j3j+yiuvJHgFAAAAAACA2ASvrrjiCvcAAAAAAAAAAhe8yg6rV6+2Tz75xNXRUnfEU045JcPzmD59un377bfWunVrO+2007JlOQEAAAAAABDA4NXvv/9uU6dOtYYNG1qlSpXc7ynRa84444x0z1tBq+7du1unTp2sQoUKNnToUOvTp489/fTT6Z7Hhg0b7KKLLrJNmzbZbbfdRvAKAAAAAAAgJwWvfvzxR3vooYesV69e1rRpU/d7SvSa9Aavdu3a5WpkXXPNNfb444+7aT169LC2bdtaly5d0j2fq6++2rp27WoTJ05M5xoBAAAAAAAgboJXGlVQj8i/o2HKlCm2ceNGu/766xOmtWnTxmVvvfrqq+kKXr3yyiv2/fffu+wwglcAAAAAAADxIXdm37hlyxZbtWpVhp9Lzg8//GBFixa1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itmqVauSfe7vv/+24sWLZ2W5AAAAAAAAgMwHr9q1a2cLFy60m2++2dW68gu4jx492p5//nk799xz+XoBAAAAAAAQm5pXpUqVstdff92uvPJKe+qpp6xIkSK2a9cuy58/vz300EOu7hUAAAAAJDVm/MSofSl9e3a39kPym9nWqMxv8diyUZkPACAgow126dLFlixZYlOnTrUVK1ZYxYoVrW3btlatWrXoLSEAAAAAAAByrCwFr/wMrO7du0dnaQAAAAAAAIBo1LwCAAAAAAAAshvBKwAAAAAAAMRvt0EAABB+0Sye3LljO6s3IDqFk4XiyQAAADkbwSsAAAAgh47SBwBAjgpe7dq1y/bv3+8KuAMAAAAIvvZD8ptZdDIlyZIEAAQyeLVjxw579NFHbezYsbZu3Trr16+f3XHHHTZs2DAbN25c9JYSyGGieVdV6MIDAAAAAMhxwavDhw/bOeecY5s3b7a7777blixZ4rKvatWqZX///bfNnDnTWrduHd2lBQAAAAAAQI6S6dEGv/vuO1u9erXNnTvXbrjhBjvhhBMSnmvbtq198skn0VpGAAAAAAAA5FCZDl4pu6pFixZWvHjxI54rU6aM/fvvv1ldNgAAAAAAAORwme42WKlSJfvhhx9ckfb8+VXo8X9+++03q1mzZobnuW/fPpszZ47t3r3bmjZtauXLl0/3e1euXGkLFy600qVLuyywggULZvjzAQAAAAAAECeZV+oaqBpXF154of3444926NAhN/3rr7+2SZMm2cUXX5yh+WkeCngNHDjQHn/8catWrZo999xzab7v559/ttNOO80aNGhgTz75pPXp08dq1KhhH330UWZXDQAAAAAAAGHPvFJmk4JUF1xwgTVp0sRy5cpluXPntgkTJtiLL75oxx9/fLrndeDAARfsOvXUU+2NN95w85o4caJdfvnldsopp7j5p2TatGku82v58uVWtmxZ8zzPBg0aZD169LBly5a5DDEAAAAAAADksMyrrVu3ugDV0qVL7bXXXrOHHnrInn32WTfqoLKfMuKrr75y87nzzjtd4EouvfRSq1q1qo0ZMybNDLDJkye7wJXo/ddcc43t3bvXpk+fntnVAwAAAAAAQJgzr95//32bNWuWjR071mVIZYVGLCxUqFCiEQulefPm7rnUJJeVpVEQpWLFillaLgAAAAAAAIQ0eFWh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XAIRvJLHH3/cpZQ+88wztmfPHmvZsqXde++9VqhQoUSva9CgwRH9ldP73qBTiu19992XZq2uoGM9goXtAfaNcOBYDZ542SZBEU/fZ7ysC+sRLPGyPYIkXr5T1iNY2B6xkUtV22P02QAAAAAAAEDwa14BAAAAAAAAySF4BQAAAAAAgMAieAUAAAAAAIDAIngFAAAAAACAwArMaIM52eLFi23cuHHu50033WRt2rSxsNm/f79NmjTJZs+e7X5v1KiR9e3bN3QjPj711FM2Y8YM97uW/fjjj7c+ffpYjRo1LKwOHDhg1113nW3dutWNyFm5cmULi0WLFtk999xzxPRzzz3XrrjiipgsUzzQqKzvv/++ffzxx3bMMcfYY489ZmH0888/u/VYvny5W49LLrnETjzxRAuTZcuW2e233+5+z5Url1WsWNFOPfVUu/jiiy137vDeX9L/g7feesvOPPNMu/rqqy1M7rjjDlu6dOkR0995552YLE+8+Omnn2z8+PG2atUqGzp0qBs9Omx27txpEydOtAULFliePHmsefPm1rNnT8ubN1yn0xqRe+HChe73IkWKWK1atdw5W5jOD5Latm2bXXvtte4cVNsoX758FhYzZ860J5988ojpOv/s0qVLTJYpHmifePPNN+3rr7+2pk2bJvyvDRvtH59++qmtXr3aqlWr5vaL6tWrW5jMmTPHRo4c6X5X26lzto4dO9o555xjYfbf//7Xpk2b5v4PXHDBBRYmV111lbs2jFSmTBl74YUXLMjC9d82DvXv39+mT5/uLsbfffddt+OHLXi1Y8cOq127thUtWtSuv/56F/R5/vnnXSOlBjdMJ0MtW7a0KlWquN937dplU6ZMsbp169pHH30U2gb2wQcfdBeR2k4PPfRQqLbHpk2b3HGhhrR06dIJ03WijcyZO3eua2dOO+00++uvv+yPP/4I5Vd59913u6Bbv379rEOHDjZv3jw7+eST7YknnrAbbrjBwqJUqVIu6CaHDx92QZMbb7zRXeQruBjGANbff/9tAwYMsL1791rZsmUtbL766ivXTvbu3TvWixI39P9z7dq17n+s2vQwHaO+JUuWuGCVbmopIKsgif6/Pvvss/btt9+6c6CwOP30091NRtm+fbsLNg8fPty+++47d5EfRgMHDnRtps51Dh06FKrglQK6Oi60HSLVqVMnZssUdrqxpRu3Cv59//33tm/fPgsjBap040SBWZ3r6P9TvXr17PXXX7eLLrrIwuLYY49NONc5ePCg/f7779a9e3e77LLLAh8sScn8+fPdjQAFgHT+GTaTJ092/5s7d+6cMK1w4cIWeB5iasmSJe7nqlWrPG2OCRMmhG6LbNy40evUqZO3Y8eOhGn//vuvV6pUKe+mm27ywq5jx47eSSed5IXRvHnzvOLFi3sjR450+9fChQu9MJk+fbpbbh0fiN7xquNTevTo4TVq1CiUX+21117rffPNN4mm3XzzzV6hQoW8Xbt2eWH2+eefu/3+yy+/9MLm8OHDXvv27b077rjDq1q1qjdgwAAvbJo2beoNHjw41osRl+c6s2fPdvv2tGnTvLCZP3++169fP+/AgQMJ05YvX+7lzp3be/LJJ70wO3TokNewYUPv3HPP9cLovffe8ypWrOgNGTLE7V979uzxwmTixIluuRE9q1ev9nbv3u1+b9GihXf++eeH8uu95JJLvF9++SXRtIsvvtg75phjvLB74YUX3H7/119/eWGjfatOnTre6NGj3ToMHz7cC5sKFSqE8n9X+G7pxpmaNWta2JUoUcLee++9RHcdNU3ZMeoSE3b169d3qbph7BrWq1cvu//++0Pd7RHRpUwYHZ9h98gjj1i7du0STWvWrJnb79etW2dhb3MkjO2Our6sWbPGtTtAPJ3rKNthzJgxiboIqguP2tSwn+sow1NZPmFsczZs2OAyPdV9R5msgKhbWthKlyTnxRdftBNOOOGIc51//vkntNlk8XCuo/ICKvOgtgdHF90GkWXJpWbrZOKXX36xQYMGhfobVn0LdR0MY5fB//znP1ayZElXR03dHsNMda/UDUDdNZQmHba6Roi+YsWKHTFt6tSprn5L1apVQ/2Vq+tIwYIFXdfOMFENHaXQq83U8oeZuk+phoUuhtUd4PLLLw9dXSNEl9qWpHSeo/OdMNbvirR+/XpXwkLdsMNGXTh1I6Nr166ubmmYqZubSlbohqPan7DVNcLRO9fRDYECBQqE+itXd8jy5cuHrquyaqi99NJLru6qapWG2Ycffui6P2o7tG7d2rp16xb4dSLzClHneZ4rAqeg1jXXXBO6b/jff/91ARL1AdaJgw7msPXHVsOquzVqXMNYMyeS6nKo7pgu5HV3W//klHUDRPryyy9dnajBgwe7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",
      "text/plain": [
       "<Figure size 1210x506 with 8 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, axes = plt.subplots(2, 4, figsize=(11, 4.6), sharey=True)\n",
    "x = np.arange(1, 6)\n",
    "for ax, (c, g) in zip(axes.flat, t2.groupby(\"rating\", sort=False)):\n",
    "    paper = g[g.source == \"paper\"].iloc[0, 2:].astype(float).values\n",
    "    ours = g[g.source == \"ours\"].iloc[0, 2:].astype(float).values\n",
    "    ax.bar(x - 0.2, paper / paper.sum(), 0.38, color=PAPER_C, label=\"Paper\")\n",
    "    ax.bar(x + 0.2, ours / ours.sum(), 0.38, color=OURS_C, label=\"This copy\")\n",
    "    ax.set_title(c.replace(\"_\", \" \").capitalize(), fontsize=10); ax.set_xticks(x)\n",
    "axes[0, 0].set_ylabel(\"share of ratings\"); axes[1, 0].set_ylabel(\"share of ratings\")\n",
    "fig.legend(*axes[0, 0].get_legend_handles_labels(), loc=\"upper center\", ncol=2, frameon=False)\n",
    "fig.suptitle(\"Table 2: rating distribution, paper vs this copy\", y=1.04, fontsize=11)\n",
    "fig.tight_layout(); plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1fab6d75",
   "metadata": {},
   "source": [
    "Every rating bucket holds about 97.4 % of the paper's count, and the shape of each distribution is the\n",
    "same. The archived copy has 1,759 of the paper's 1,850 hotels; the other 91 files are not in it.\n",
    "Sparsity is identical (99.94 %).\n",
    "\n",
    "## 2. The models\n",
    "\n",
    "These are the classes from `deepmccf.py`. Every weight starts from N(0, 0.05) and every bias at 0."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "3350e3ab",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-11-12T18:04:31.840696Z",
     "iopub.status.busy": "2026-11-12T18:04:31.840637Z",
     "iopub.status.idle": "2026-11-12T18:04:32.136630Z",
     "shell.execute_reply": "2026-11-12T18:04:32.136239Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "class CriteriaRatingsDNN(nn.Module):\n",
      "    \"\"\"Eqs. (1)-(5): x = concat(v_u, v_i); h_l = ReLU(W_l h_{l-1} + b_l); y_ui = ReLU(W_L h_{L-1} + b_L).\"\"\"\n",
      "\n",
      "    def __init__(self, n_users, n_items, n_criteria=7, emb=64, hidden=(128, 64, 32, 16, 8), init_std=0.05):\n",
      "        super().__init__()\n",
      "        self.user_emb = nn.Embedding(n_users, emb)\n",
      "        self.item_emb = nn.Embedding(n_items, emb)\n",
      "        self.mlp = _mlp([2 * emb, *hidden])\n",
      "        self.out = nn.Linear(hidden[-1], n_criteria)\n",
      "        _init_normal(self, init_std)\n",
      "\n",
      "    def forward(self, u, i):\n",
      "        x = torch.cat([self.user_emb(u), self.item_emb(i)], dim=1)\n",
      "        return torch.relu(self.out(self.mlp(x)))\n",
      "\n",
      "class OverallRatingDNN(nn.Module):\n",
      "    \"\"\"Eqs. (6)-(9): input = z-scored criteria ratings, dense ReLU layers, 1 ReLU output (the overall rating).\"\"\"\n",
      "\n",
      "    def __init__(self, n_criteria=7, hidden=(64, 32, 16, 8), init_std=0.05):\n",
      "        super().__init__()\n",
      "        self.mlp = _mlp([n_criteria, *hidden])\n",
      "        self.out = nn.Linear(hidden[-1], 1)\n",
      "        _init_normal(self, init_std)\n",
      "\n",
      "    def forward(self, z):\n",
      "        return torch.relu(self.out(self.mlp(z))).squeeze(1)\n",
      "\n",
      "class SingleDNN(nn.Module):\n",
      "    \"\"\"The paper's single-rating DNN baseline: predicts the overall rating straight from the IDs.\"\"\"\n",
      "\n",
      "    def __init__(self, n_users, n_items, emb=256, hidden=(512, 256, 128, 64, 32, 16, 8), init_std=0.05):\n",
      "        super().__init__()\n",
      "        self.user_emb = nn.Embedding(n_users, emb)\n",
      "        self.item_emb = nn.Embedding(n_items, emb)\n",
      "        self.mlp = _mlp([2 * emb, *hidden])\n",
      "        self.out = nn.Linear(hidden[-1], 1)\n",
      "        _init_normal(self, init_std)\n",
      "\n",
      "    def forward(self, u, i):\n",
      "        x = torch.cat([self.user_emb(u), self.item_emb(i)], dim=1)\n",
      "        return torch.relu(self.out(self.mlp(x))).squeeze(1)\n",
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CriteriaRatingsDNN      4,653,623 parameters\n",
      "OverallRatingDNN            3,265 parameters\n",
      "SingleDNN              18,942,081 parameters\n"
     ]
    }
   ],
   "source": [
    "for cls in (D.CriteriaRatingsDNN, D.OverallRatingDNN, D.SingleDNN):\n",
    "    print(inspect.getsource(cls))\n",
    "nu, ni = df.u.max() + 1, df.i.max() + 1\n",
    "for m in (D.CriteriaRatingsDNN(nu, ni), D.OverallRatingDNN(), D.SingleDNN(nu, ni)):\n",
    "    print(f\"{type(m).__name__:20s} {sum(p.numel() for p in m.parameters()):>12,} parameters\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d3e1934f",
   "metadata": {},
   "source": [
    "**Training** (`deepmccf.fit`): Adam with learning rate 0.001, batch 512 and MAE loss, as in the paper.\n",
    "The paper does not give an epoch count, so training stops when the MAE on the 1 % validation set has\n",
    "not improved for 10 epochs, and the best epoch is restored.\n",
    "\n",
    "A ReLU output unit that is negative for every input gets no gradient and stays at 0. With the\n",
    "paper's tiny N(0, 0.05) initialisation this happens in some runs. Such a run is re-initialised with a\n",
    "new seed, and the restarts are counted in the results.\n",
    "\n",
    "## 3. One fold, step by step\n",
    "\n",
    "This retrains the model on fold 0 without using the cache, to show the whole pipeline."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "792bdf4a",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-11-12T18:04:32.137578Z",
     "iopub.status.busy": "2026-11-12T18:04:32.137514Z",
     "iopub.status.idle": "2026-11-12T18:04:46.519315Z",
     "shell.execute_reply": "2026-11-12T18:04:46.518861Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "train 62,388  validation 790  test 15,795\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "criteria DNN: {'restarts': 1, 'best_val_mae': 0.7554304003715515, 'best_epoch': 2, 'epochs_run': 12, 'dead_output': False}\n",
      "overall  DNN: {'restarts': 0, 'best_val_mae': 0.2586374282836914, 'best_epoch': 33, 'epochs_run': 43, 'dead_output': False}\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>MAE</th>\n",
       "      <th>RMSE</th>\n",
       "      <th>Precision</th>\n",
       "      <th>Recall</th>\n",
       "      <th>F1</th>\n",
       "      <th>F2</th>\n",
       "      <th>FCP</th>\n",
       "      <th>MAP</th>\n",
       "      <th>MRR</th>\n",
       "      <th>users</th>\n",
       "      <th>pairs</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>fold 0</th>\n",
       "      <td>0.7923</td>\n",
       "      <td>1.0983</td>\n",
       "      <td>0.8766</td>\n",
       "      <td>0.8551</td>\n",
       "      <td>0.8657</td>\n",
       "      <td>0.8593</td>\n",
       "      <td>0.699</td>\n",
       "      <td>0.9981</td>\n",
       "      <td>0.9981</td>\n",
       "      <td>15348.0</td>\n",
       "      <td>299.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "           MAE    RMSE  Precision  Recall      F1      F2    FCP     MAP  \\\n",
       "fold 0  0.7923  1.0983     0.8766  0.8551  0.8657  0.8593  0.699  0.9981   \n",
       "\n",
       "           MRR    users  pairs  \n",
       "fold 0  0.9981  15348.0  299.0  "
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "folds = D.make_folds(len(df))\n",
    "f0 = folds[0]\n",
    "print(f\"train {len(f0.train):,}  validation {len(f0.val):,}  test {len(f0.test):,}\")\n",
    "r = D.run_dmccf(df, f0)\n",
    "print(\"criteria DNN:\", r[\"criteria_info\"])\n",
    "print(\"overall  DNN:\", r[\"overall_info\"])\n",
    "y0 = df.overall.values[f0.test].astype(float)\n",
    "pd.Series(D.evaluate(df.u.values[f0.test], y0, r[\"pred\"].astype(float))).to_frame(\"fold 0\").T"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5c255f35",
   "metadata": {},
   "source": [
    "## 4. Main results: Tables 5 and 6 (5-fold cross-validation)\n",
    "\n",
    "`run_experiments.Runner` runs every method on the same five folds. The baselines are scikit-surprise\n",
    "1.1.5 with default settings. KNN with baseline is item-based, because a user–user similarity matrix\n",
    "for 70k users would need about 40 GB.\n",
    "\n",
    "**Top-K metrics.** The paper does not state K or what counts as relevant. Here K = 10 and an item is\n",
    "relevant when its true overall rating is ≥ 4. Precision and recall follow the scikit-surprise FAQ recipe\n",
    "the paper's baselines come from: a user with nothing recommended has precision 1, and a user with nothing\n",
    "relevant has recall 1. With these choices our baselines reproduce the paper's F1 and F2 to within about 0.005."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "5483fca9",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-11-12T18:04:46.520541Z",
     "iopub.status.busy": "2026-11-12T18:04:46.520443Z",
     "iopub.status.idle": "2026-11-12T18:04:49.986170Z",
     "shell.execute_reply": "2026-11-12T18:04:49.985786Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/markdown": [
       "**Table 6: overall rating, mean of 5 folds (paper vs ours)**"
      ],
      "text/plain": [
       "<IPython.core.display.Markdown object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead tr th {\n",
       "        text-align: left;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr>\n",
       "      <th></th>\n",
       "      <th colspan=\"2\" halign=\"left\">MAE</th>\n",
       "      <th colspan=\"2\" halign=\"left\">F1</th>\n",
       "      <th colspan=\"2\" halign=\"left\">F2</th>\n",
       "      <th colspan=\"2\" halign=\"left\">FCP</th>\n",
       "      <th colspan=\"2\" halign=\"left\">MAP</th>\n",
       "      <th colspan=\"2\" halign=\"left\">MRR</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th></th>\n",
       "      <th>paper</th>\n",
       "      <th>ours</th>\n",
       "      <th>paper</th>\n",
       "      <th>ours</th>\n",
       "      <th>paper</th>\n",
       "      <th>ours</th>\n",
       "      <th>paper</th>\n",
       "      <th>ours</th>\n",
       "      <th>paper</th>\n",
       "      <th>ours</th>\n",
       "      <th>paper</th>\n",
       "      <th>ours</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>SVD</th>\n",
       "      <td>0.8071</td>\n",
       "      <td>0.8025</td>\n",
       "      <td>0.8370</td>\n",
       "      <td>0.8397</td>\n",
       "      <td>0.7951</td>\n",
       "      <td>0.7993</td>\n",
       "      <td>0.5024</td>\n",
       "      <td>0.6865</td>\n",
       "      <td>0.3935</td>\n",
       "      <td>0.9983</td>\n",
       "      <td>0.7272</td>\n",
       "      <td>0.9983</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>SVD++</th>\n",
       "      <td>0.8222</td>\n",
       "      <td>0.8191</td>\n",
       "      <td>0.8390</td>\n",
       "      <td>0.8417</td>\n",
       "      <td>0.7991</td>\n",
       "      <td>0.8041</td>\n",
       "      <td>0.5092</td>\n",
       "      <td>0.6819</td>\n",
       "      <td>0.3483</td>\n",
       "      <td>0.9982</td>\n",
       "      <td>0.7513</td>\n",
       "      <td>0.9982</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>SlopeOne</th>\n",
       "      <td>0.9160</td>\n",
       "      <td>0.9120</td>\n",
       "      <td>0.8666</td>\n",
       "      <td>0.8679</td>\n",
       "      <td>0.9248</td>\n",
       "      <td>0.9263</td>\n",
       "      <td>0.5096</td>\n",
       "      <td>0.0322</td>\n",
       "      <td>0.3006</td>\n",
       "      <td>0.9968</td>\n",
       "      <td>0.7502</td>\n",
       "      <td>0.9968</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Baseline estimates</th>\n",
       "      <td>0.8094</td>\n",
       "      <td>0.8066</td>\n",
       "      <td>0.8391</td>\n",
       "      <td>0.8408</td>\n",
       "      <td>0.7986</td>\n",
       "      <td>0.8013</td>\n",
       "      <td>0.5025</td>\n",
       "      <td>0.7052</td>\n",
       "      <td>0.3881</td>\n",
       "      <td>0.9983</td>\n",
       "      <td>0.7374</td>\n",
       "      <td>0.9984</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>KNN with baseline</th>\n",
       "      <td>0.8115</td>\n",
       "      <td>0.8066</td>\n",
       "      <td>0.8388</td>\n",
       "      <td>0.8408</td>\n",
       "      <td>0.7984</td>\n",
       "      <td>0.8012</td>\n",
       "      <td>0.5097</td>\n",
       "      <td>0.7005</td>\n",
       "      <td>0.3865</td>\n",
       "      <td>0.9983</td>\n",
       "      <td>0.7360</td>\n",
       "      <td>0.9984</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Single DNN</th>\n",
       "      <td>0.7855</td>\n",
       "      <td>0.8105</td>\n",
       "      <td>0.8572</td>\n",
       "      <td>0.8547</td>\n",
       "      <td>0.9176</td>\n",
       "      <td>0.8381</td>\n",
       "      <td>0.4957</td>\n",
       "      <td>0.6609</td>\n",
       "      <td>0.4481</td>\n",
       "      <td>0.9982</td>\n",
       "      <td>0.7244</td>\n",
       "      <td>0.9982</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Proposed (DMCCF)</th>\n",
       "      <td>0.7552</td>\n",
       "      <td>0.7765</td>\n",
       "      <td>0.8769</td>\n",
       "      <td>0.8662</td>\n",
       "      <td>0.9295</td>\n",
       "      <td>0.8582</td>\n",
       "      <td>0.5126</td>\n",
       "      <td>0.6702</td>\n",
       "      <td>0.4643</td>\n",
       "      <td>0.9981</td>\n",
       "      <td>0.7664</td>\n",
       "      <td>0.9981</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>DMCCF+ (improved)</th>\n",
       "      <td>NaN</td>\n",
       "      <td>0.7374</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.8645</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.8603</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.6868</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.9983</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.9983</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                       MAE              F1              F2             FCP  \\\n",
       "                     paper    ours   paper    ours   paper    ours   paper   \n",
       "SVD                 0.8071  0.8025  0.8370  0.8397  0.7951  0.7993  0.5024   \n",
       "SVD++               0.8222  0.8191  0.8390  0.8417  0.7991  0.8041  0.5092   \n",
       "SlopeOne            0.9160  0.9120  0.8666  0.8679  0.9248  0.9263  0.5096   \n",
       "Baseline estimates  0.8094  0.8066  0.8391  0.8408  0.7986  0.8013  0.5025   \n",
       "KNN with baseline   0.8115  0.8066  0.8388  0.8408  0.7984  0.8012  0.5097   \n",
       "Single DNN          0.7855  0.8105  0.8572  0.8547  0.9176  0.8381  0.4957   \n",
       "Proposed (DMCCF)    0.7552  0.7765  0.8769  0.8662  0.9295  0.8582  0.5126   \n",
       "DMCCF+ (improved)      NaN  0.7374     NaN  0.8645     NaN  0.8603     NaN   \n",
       "\n",
       "                               MAP             MRR          \n",
       "                      ours   paper    ours   paper    ours  \n",
       "SVD                 0.6865  0.3935  0.9983  0.7272  0.9983  \n",
       "SVD++               0.6819  0.3483  0.9982  0.7513  0.9982  \n",
       "SlopeOne            0.0322  0.3006  0.9968  0.7502  0.9968  \n",
       "Baseline estimates  0.7052  0.3881  0.9983  0.7374  0.9984  \n",
       "KNN with baseline   0.7005  0.3865  0.9983  0.7360  0.9984  \n",
       "Single DNN          0.6609  0.4481  0.9982  0.7244  0.9982  \n",
       "Proposed (DMCCF)    0.6702  0.4643  0.9981  0.7664  0.9981  \n",
       "DMCCF+ (improved)   0.6868     NaN  0.9983     NaN  0.9983  "
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/markdown": [
       "**Our results with fold standard deviation**"
      ],
      "text/plain": [
       "<IPython.core.display.Markdown object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "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>MAE</th>\n",
       "      <th>RMSE</th>\n",
       "      <th>F1</th>\n",
       "      <th>F2</th>\n",
       "      <th>FCP</th>\n",
       "      <th>MAP</th>\n",
       "      <th>MRR</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>method</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>SVD</th>\n",
       "      <td>0.8025 ± 0.0023</td>\n",
       "      <td>1.0455 ± 0.0033</td>\n",
       "      <td>0.8397 ± 0.0046</td>\n",
       "      <td>0.7993 ± 0.0060</td>\n",
       "      <td>0.6865 ± 0.0178</td>\n",
       "      <td>0.9983 ± 0.0003</td>\n",
       "      <td>0.9983 ± 0.0003</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>SVD++</th>\n",
       "      <td>0.8191 ± 0.0019</td>\n",
       "      <td>1.0569 ± 0.0040</td>\n",
       "      <td>0.8417 ± 0.0036</td>\n",
       "      <td>0.8041 ± 0.0050</td>\n",
       "      <td>0.6819 ± 0.0210</td>\n",
       "      <td>0.9982 ± 0.0002</td>\n",
       "      <td>0.9982 ± 0.0002</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>SlopeOne</th>\n",
       "      <td>0.9120 ± 0.0021</td>\n",
       "      <td>1.2089 ± 0.0043</td>\n",
       "      <td>0.8679 ± 0.0012</td>\n",
       "      <td>0.9263 ± 0.0006</td>\n",
       "      <td>0.0322 ± 0.0053</td>\n",
       "      <td>0.9968 ± 0.0004</td>\n",
       "      <td>0.9968 ± 0.0004</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Baseline estimates</th>\n",
       "      <td>0.8066 ± 0.0019</td>\n",
       "      <td>1.0474 ± 0.0036</td>\n",
       "      <td>0.8408 ± 0.0048</td>\n",
       "      <td>0.8013 ± 0.0066</td>\n",
       "      <td>0.7052 ± 0.0241</td>\n",
       "      <td>0.9983 ± 0.0004</td>\n",
       "      <td>0.9984 ± 0.0003</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>KNN with baseline</th>\n",
       "      <td>0.8066 ± 0.0020</td>\n",
       "      <td>1.0479 ± 0.0035</td>\n",
       "      <td>0.8408 ± 0.0048</td>\n",
       "      <td>0.8012 ± 0.0066</td>\n",
       "      <td>0.7005 ± 0.0225</td>\n",
       "      <td>0.9983 ± 0.0003</td>\n",
       "      <td>0.9984 ± 0.0003</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Single DNN</th>\n",
       "      <td>0.8105 ± 0.0085</td>\n",
       "      <td>1.1261 ± 0.0154</td>\n",
       "      <td>0.8547 ± 0.0056</td>\n",
       "      <td>0.8381 ± 0.0117</td>\n",
       "      <td>0.6609 ± 0.0246</td>\n",
       "      <td>0.9982 ± 0.0003</td>\n",
       "      <td>0.9982 ± 0.0003</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Proposed (DMCCF)</th>\n",
       "      <td>0.7765 ± 0.0104</td>\n",
       "      <td>1.0981 ± 0.0098</td>\n",
       "      <td>0.8662 ± 0.0031</td>\n",
       "      <td>0.8582 ± 0.0074</td>\n",
       "      <td>0.6702 ± 0.0330</td>\n",
       "      <td>0.9981 ± 0.0003</td>\n",
       "      <td>0.9981 ± 0.0003</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>DMCCF+ (improved)</th>\n",
       "      <td>0.7374 ± 0.0044</td>\n",
       "      <td>1.1336 ± 0.0069</td>\n",
       "      <td>0.8645 ± 0.0049</td>\n",
       "      <td>0.8603 ± 0.0120</td>\n",
       "      <td>0.6868 ± 0.0340</td>\n",
       "      <td>0.9983 ± 0.0003</td>\n",
       "      <td>0.9983 ± 0.0003</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                MAE             RMSE               F1  \\\n",
       "method                                                                  \n",
       "SVD                 0.8025 ± 0.0023  1.0455 ± 0.0033  0.8397 ± 0.0046   \n",
       "SVD++               0.8191 ± 0.0019  1.0569 ± 0.0040  0.8417 ± 0.0036   \n",
       "SlopeOne            0.9120 ± 0.0021  1.2089 ± 0.0043  0.8679 ± 0.0012   \n",
       "Baseline estimates  0.8066 ± 0.0019  1.0474 ± 0.0036  0.8408 ± 0.0048   \n",
       "KNN with baseline   0.8066 ± 0.0020  1.0479 ± 0.0035  0.8408 ± 0.0048   \n",
       "Single DNN          0.8105 ± 0.0085  1.1261 ± 0.0154  0.8547 ± 0.0056   \n",
       "Proposed (DMCCF)    0.7765 ± 0.0104  1.0981 ± 0.0098  0.8662 ± 0.0031   \n",
       "DMCCF+ (improved)   0.7374 ± 0.0044  1.1336 ± 0.0069  0.8645 ± 0.0049   \n",
       "\n",
       "                                 F2              FCP              MAP  \\\n",
       "method                                                                  \n",
       "SVD                 0.7993 ± 0.0060  0.6865 ± 0.0178  0.9983 ± 0.0003   \n",
       "SVD++               0.8041 ± 0.0050  0.6819 ± 0.0210  0.9982 ± 0.0002   \n",
       "SlopeOne            0.9263 ± 0.0006  0.0322 ± 0.0053  0.9968 ± 0.0004   \n",
       "Baseline estimates  0.8013 ± 0.0066  0.7052 ± 0.0241  0.9983 ± 0.0004   \n",
       "KNN with baseline   0.8012 ± 0.0066  0.7005 ± 0.0225  0.9983 ± 0.0003   \n",
       "Single DNN          0.8381 ± 0.0117  0.6609 ± 0.0246  0.9982 ± 0.0003   \n",
       "Proposed (DMCCF)    0.8582 ± 0.0074  0.6702 ± 0.0330  0.9981 ± 0.0003   \n",
       "DMCCF+ (improved)   0.8603 ± 0.0120  0.6868 ± 0.0340  0.9983 ± 0.0003   \n",
       "\n",
       "                                MRR  \n",
       "method                               \n",
       "SVD                 0.9983 ± 0.0003  \n",
       "SVD++               0.9982 ± 0.0002  \n",
       "SlopeOne            0.9968 ± 0.0004  \n",
       "Baseline estimates  0.9984 ± 0.0003  \n",
       "KNN with baseline   0.9984 ± 0.0003  \n",
       "Single DNN          0.9982 ± 0.0003  \n",
       "Proposed (DMCCF)    0.9981 ± 0.0003  \n",
       "DMCCF+ (improved)   0.9983 ± 0.0003  "
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "R = X.Runner()\n",
    "per_fold, t5 = R.main_table()\n",
    "mine = per_fold.groupby(\"method\", sort=False)[[\"MAE\", \"F1\", \"F2\", \"FCP\", \"MAP\", \"MRR\"]].mean()\n",
    "cmp6 = pd.concat({\"paper\": D.PAPER_TABLE6, \"ours\": mine}, axis=1).swaplevel(axis=1)\n",
    "cmp6 = cmp6[[(m, s) for m in [\"MAE\", \"F1\", \"F2\", \"FCP\", \"MAP\", \"MRR\"] for s in (\"paper\", \"ours\")]]\n",
    "display(Markdown(\"**Table 6: overall rating, mean of 5 folds (paper vs ours)**\"), cmp6.round(4))\n",
    "display(Markdown(\"**Our results with fold standard deviation**\"),\n",
    "        D.summarise(per_fold, [\"MAE\", \"RMSE\", \"F1\", \"F2\", \"FCP\", \"MAP\", \"MRR\"]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "c54a8ba2",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-11-12T18:04:49.987118Z",
     "iopub.status.busy": "2026-11-12T18:04:49.987057Z",
     "iopub.status.idle": "2026-11-12T18:04:50.086967Z",
     "shell.execute_reply": "2026-11-12T18:04:50.086603Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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efPMlClT7Hpv27bNtGnTxuzbt89MmDAh4LyTsl7B9pk8++yz5pJLLrHL379/vz02P/zwg83MPf/88wkyc3pP2VA1t9e0P/74o/03pm1Sk2/fgmRNmjQxa9assZndWbNm2fNk586dNjO+cuVKex4pS3j55Zfb5x988IFXsSztG/27UJN4Z92UmdW5l1h9+/a157BaOWj9lelWZlLngzKNTsGgjz/+2P69ePFi9/F89913A843km1z6Hjo/NZ2av8rI69WD+F8xwEIIJGBKgAghTOcgXTv3t2VNWtWd4bP8/Nff/2117Tnzp1zVa1a1U7vZK18szn79+93ZciQwXXXXXclWJYyPZdcconrxhtvDLpOFy5csPOsXLmy30xGlixZXD///LMrsTwznFKnTh3X9ddfb/9u2rSpq27duvbvYBnO++67z+6Hffv2uV+bOXOmnX748OF+lxfo4S97F65IjlUszoFIj7cz32+++SbsbXSyST/++KP7tQ0bNtjXnn76afdre/bscWXMmNHVv39/V2I4WTFl+Hw56z1r1iyv15Xd1etPPvmk+zXffxNJXa9A++zNN9+0r8+dOzfBZyZPnmzfmzRpklfWUhk8z0yd6PN6r2vXrl7TlihRIsG+UMayUKFCriNHjni9ruOhzJ4yxZ7TlixZMsE85syZ4862JibDqW3Inz+/3a/BfPzxx17/zj35y3BGsm3OOel7TPXvQ+vWpEmToOsGIDAynACQSh0/ftzewa9WrZqtzupk1z766CNz5swZe3fel/pueVImTNkRTa8+af4og6NMguewIs5Dn9fnAn3WoWmzZ89uszDqR/Xbb7/ZCrXKKD3++OPufnTRomzm7NmzbbZkzpw5IbObynyoj5z6pql/maNZs2a2L9moUaMiKhr09ttvJ3kbwjlWsTgHEnu8mzZtGva2qXhU5syZvaoAO38r4+pQP9MBAwbYbdSxePXVV22WzrN/YlKp76MnZRIl2Di00Vov332mfx+iLKTvvlfmVXz3fcOGDW2fR99tUv9Dp/+jo0GDBvbfoUPnjzJ56u+qbLkn9UlVdtGZh/aHplUVWM95iPq9anmJoe8BZSHVL1P7NVoi2bZg54POeX0HMC4xkHgEnACQSrVt29Y2RVOVV120+VIzv2hwmvoFo2AlFDUTFBVyUREUpzDI+++/bwsIqfDJ+fPno7LO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rl07O33BgsGL8SgY1YVCJBLzGQBA2rR8+XJ3cTv9DimYDBZwargu/W451BJHzWsdnvUB1NRWXU48K5yHeh8AkLIIOFOYms2qAI9nEZ5QdOc2kOeee84+EuvGG2+0j1h/BgCQ9qgJrZrUegaQ+lvVzANRfQIN76W+R2pSq9841QXwZ/fu3bYJroYOS8z7AIDkR8AJAACiwumz6VkkSH8HGx9OXUiUmVy8eLFtgquWOdmyZUsw3X///Wfeeecdc/PNN5tLL7004vcBACmDgBMAAESFCvUoePRs0qoKssEqkg8aNMjccccd7qax06ZNMx9++KEtJOQ4fvy47QuqWgf+Ct+Feh8AkHK8x+MAAABIgvLly5tVq1a5n+vvChUquJ+rqN2GDRvcRe4UkKrfpUN/q1q74+TJk+bNN9805cqVM507d06wvFDvAwBSFhlOAAAQNbfccovp37+/zXSqT+acOXPMK6+84n5/7ty55sCBA6ZHjx620nq9evXM8OHDzU033WSb1E6ZMsXUr1/fPb0yncpgXn755ebXX3911z9wms2Geh8AkLIIOAEAQNSoWevzzz/vLnD38ssv2+yjQ5XTPSumd+vWzQahf//9tw1AVUTIc4xpVV/PkyeP+eWXX9yv1ahRwx1QhnofAJCyMrjUngWIAxqwW8Or9Bs42OQvEHz4FgBAdHXpdDe7NJFUFGnPnj02s6pquwDnD5LL+VTw/UMfTgAAAABATBBwAgAAAABigoATAAAAABATBJwAAAAAgJigSi3iTru2rU3p0qVTejWQyqSGTvOIX5w/AADEBhlOAAAAAEBMEHACAAAAAGKCgBMAAAAAEBMEnAAAAACAmCDgBAAAAADEBAEnAAAAACAmCDgBAAAAADFBwAkAAAAAiInMsZktkHhNeh0xWXLtZxciEbIaYw6x55BInD9ICs4fpI3zZ8PIQim9CkhjCDgBAAAAxLULFy7Yh2TIkMFkypQppVcJYaJJLQAAAICoUnD41FNPmbx585o8efKYJ5980h0w+rNv3z5zxx132OkLFixo+vbt6/X+66+/brJnz26yZctmGjZsmODzv/zyi2natKnJmTOnKV26tBkwYABHNE4QcAIAAACIqg8//NBMnjzZLF++3KxYscJMmTLFvhZI165dzenTp822bdvMokWLzCeffGK++OIL9/svv/yyOXfunBk2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ICYIOAEAAAAAMUHACQAAAACICfpwIu60a9valC5dOqVXA6lMaug0DwAAkN6Q4QQAAAAAxAQBJwAAAAAgJgg4AQAAAAAxQcAJAAAAAIgJigYBAAAA6ch7771nfvrpJ/t3xowZTfHixU2jRo1M+/bt7XMgmgg4AQAAgCQYMWZsiu2/Lp3ujvgzK1asMH/88YcZPny4cblc5s8//zTdunUz3333nX0A0UTACQAAAKQzOXPmNK1atbJ/t27d2uTPn98GnUuWLDH16tVL6dVDGkLACQAAAKRzV199tf3/mjVrTJYsWczLL79sn+tvjY9+++2322a3jmnTppnPP//cvPbaa2bUqFFm06ZNplSpUubJJ580l1xyide8jx8/bkaPHm1++eUXm1Ft2rSpuf/++93jZjvzevPNN80HH3xgtm7daoPf5s2bJ+s+QGwQcCLuNOl1xGTJtT+lVwOpUlZjzKGUXolUY8PIQim9CgCAOHHs2DH7/4suusiULFnSPPzww/b5mTNnzPLly80NN9xghgwZYu699177+ubNm82ECRPM3LlzbZCpLKkCzyuvvNKsWrXKFClSxE534MABG8yePn3a9OzZ0wawCiznz59vg0zPeSm7+sgjj5jrrrvOVK5cOcX2BaKLgBMAAABIxy5cuGAGDx5sm9nWr1/fFC5c2N3cVtq2bWsD0TfeeMMdcMq5c+fMwIEDbbEhadeunSlfvryd7v3337ev9enTx2zbts1s2LDBFicSBaBVq1Y1jz76qLv5ruY1YsQIc/311yfz1iPWCDgBAKnCunXrbFOvihUrmmrVqgWc7t9//7V33H01adLENvPy974utqpUqWIuvvhi92unTp2yd+AzZ85sGjdu7G76BQBpwa5du2xQqSauf/31lzly5Ij55JNP3EHhggULbAEhfWeePHnS7N2712zcuNEGhvpedNx6663uv7NmzWrnqc86pk+fbl9z5ivO9/jMmTPdAafmee211ybT1iM5EXACAOLegAEDzOuvv24aNGhgFi9ebHr06GF69+7td9o9e/bYixjH4cOHbf8gNfFSwBnofWeIAFHFxptuuskUK1bMFCpUyLz99tvmhx9+MBkyZIjxlgJA8lDGUs1mNQyKvusUBCrDKcOGDbPNZB9//HEbUObJk8c2d126dKm9GZc7d247XbZs2UyOHDm85psvXz7bjNbz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K2PGjK7t27fHbBmIH+fPn3fVqlXL1aRJE9fBgwddx48fd919992uSy65xHXs2LGI5/f++++rArfrt99+c7+2b98++9qPP/4Y5bVHPGjRooWrZs2arp07d7pOnz7teuyxx1z58uVz7dq1K+jnjh496ipatKirZcuW9tw7e/asa9CgQfZcmTlzZlSWgfjXqVMn16WXXurauHGj/T3p27evK3v27K5169YF/ZymrVChgqthw4b2PNB32RdffOHKkCGDa8yYMV7TlihRwvXOO+/EeEuQEp577jlX4cKFXStXrnRduHDBNXToUFemTJlcCxcuDPq5EydO2PPnuuuuc+3Zs8d15swZV//+/V05cuRwrV27NirLQPwbPHiwPebz5s2zzydOnGiP7bfffhv0c/q+0XePfpc2b95sv48+++wzV+bMmV1z5871mvbmm292tWvXzpUSCDgRNfri0wm+d+9e92v6stRF26RJkyKal/7BFCtWzHXDDTfEbBmIL1OnTrXHcdWqVe7X9u/f78qSJYvro48+inh+V1xxhevyyy/3eo2AM+1atmyZPX9mzZrlfu3UqVOu/Pnzu1566aWgn509e7b97JIlS7xe182ORx55JCrLQHzTjU0FiLpQc+iC/rLLLnN16dIl6GfXrFnj9zfoyiuvdLVt29brNQLOtEk3RRUsKFD01KBBA1fr1q2DfnbChAkJfvukSpUqrs6dO0dlGYhvFy5ccBUvXtz1+OOPe72u5IquZYLR75bOn+nTp3u93qxZM9f1118fNwEnTWoRNT///LOpVq2abQ7gqFy5silatKh9LxKzZs2yKf77778/ZstAfNHx03HV8XUULFjQNi2K9NiuXr3aLF++PMH54ylQn0+kTjpH1J+7cePG7tfUj6Vhw4Yhzx814RbPfuROPz7nvaQuA/FNzRd1zNWs2qE+Tddee23IY+v0EfetQ6DnnuePJ75/0pZff/3VHlPP80euu+46v01jfZvTyqWXXur1upo6zp49OyrLQHxbv3697VLk79jqWsZf7YlQ54+ez58/3zbD9qXvJt++5LFGwImo2bJli+0350uv6b1IfPrppzbYuPnmm2O2DKTt80dFXzp27Oj3/VatWtk+MIUKFbLTbN++PdHrjfigc+Tiiy9OUGwjnPOnXr16pkWLFubZZ5+1fTm3bdtmevToYQOORx55JCrL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rJuf+v567rnn7PWUrx9++MEGrJqucuXKNuDUTbLkkEH/iX0eFQAAAACQ3tCHEwAAAAAQEwScAAAAAICYIOAEAAAAAMQEAScAAAAAICYIOAEAAAAAMUHACQAAAACICQJOAAAAAEBMEHACAAAAAGKCgBMAAAAAEBMEnACQTvXv39/cfvvtZvDgwQneO3PmjLn77rvt+7/++muC98+dO2c6dOhgOnfubFwuV8B5+3v89ddfSV73mTNnmm7dupk77rjD/PjjjxF99rnnnjOffvqpSe/69Oljhg4dGvB5Sq1Hcnr00UfNkiVL4mJdEisa65xa/0288MILZtasWSm9GgBCyBxqAgBA2vTLL7+YadOmmblz55qHH37YZMmSxf3elClTzPjx421geddddyX47PTp0824cePMhQsXTKdOncy1116bYN6rV682/fr1S/DZwoULJ3m9W7VqZd566y3TtGlTc9lll/md7qWXXjIlS5Y0Xbt29Xp99uzZ5vTp0ya9mzdvnilXrlzA59EW6HjEermBfPXVV2bGjBlm0KBBKb4uSRGNdY7mv4lAxznQ60lRvXp188gjj5g1a9aYbNmyRW2+AKKLgBMA0rE6deqYDRs22MDzlltucb/+2WefmRtuuMFMnTrV7+c++eQT07x5c3Po0CH7t2/AKfnz57cZzVhcYCvIfOaZZ4JO9/PPP5vLL7886stH4gQ6Hq+++qrJnTt3su5WZeW13Mcff9zrRktqlBL7LzHHORb/Hu+8807Ts2dP8+WXX5r7778/qvMGED0EnACQjmXNmtVmMMeMGeMOOPfv328zP7qI8xdw7tu3zwaoaoJ3+PBhG/h9+OGHJm/evFFZJzVxVPZ0z549NiOiZruVK1e272lZWqfdu3e7g9kvvvjCZM+ePUEzQzXd3bVrl3u6J554wlx99dXuaX766Se7nQqa69evby9YM2XK5DWfjRs32u3ctGmTzcxqXWrWrJmkbRg1apRZtWqVef/9970+s3z5cvPGG2/YJs7FihULa/lqCqn5FilSxEyaNMkcPHjQfP311+aDDz4wCxcutNPouFSqVMlmlvLly2eSIrHLC3Y85syZY7e3du3aXsu45JJLQh4fNa1WJl5NwBs2bGg/p3XRa8Fomf/8849p3759ko6l/h1899139pg6unTpYs9Hz6bq9957r20JoIx8Uo5rxowJ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",
      "text/plain": [
       "<Figure size 935x418 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "order = list(D.PAPER_TABLE6.index)\n",
    "fig, ax = plt.subplots(figsize=(8.5, 3.8))\n",
    "yy = np.arange(len(order))\n",
    "ax.barh(yy + 0.2, D.PAPER_TABLE6.loc[order, \"MAE\"], 0.38, color=PAPER_C, label=\"Paper\")\n",
    "ax.barh(yy - 0.2, mine.loc[order, \"MAE\"], 0.38, color=OURS_C, label=\"This reproduction\",\n",
    "        xerr=per_fold.groupby(\"method\")[\"MAE\"].std(ddof=0).reindex(order), error_kw={\"lw\": 1})\n",
    "sd = per_fold.groupby(\"method\")[\"MAE\"].std(ddof=0)\n",
    "for i, m in enumerate(order):\n",
    "    ax.text(mine.loc[m, \"MAE\"] + sd[m] + 0.004, i - 0.2, f\"{mine.loc[m, 'MAE']:.3f}\", va=\"center\", fontsize=8)\n",
    "    ax.text(D.PAPER_TABLE6.loc[m, \"MAE\"] + 0.006, i + 0.2, f\"{D.PAPER_TABLE6.loc[m, 'MAE']:.3f}\", va=\"center\",\n",
    "            fontsize=8, color=\"#555\")\n",
    "ax.set_yticks(yy, order); ax.invert_yaxis(); ax.set_xlim(0.7, 0.96)\n",
    "ax.set_xlabel(\"MAE of the overall rating (lower is better)\")\n",
    "ax.legend(loc=\"lower right\", frameon=False); ax.set_title(\"Table 6: MAE, paper vs this reproduction\")\n",
    "fig.tight_layout(); fig.savefig(\"results/fig_table6_mae.png\", bbox_inches=\"tight\"); plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "19836696",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-11-12T18:04:50.087865Z",
     "iopub.status.busy": "2026-11-12T18:04:50.087807Z",
     "iopub.status.idle": "2026-11-12T18:04:50.166131Z",
     "shell.execute_reply": "2026-11-12T18:04:50.165727Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/markdown": [
       "**Table 5: MAE of each criterion predicted by the Criteria Ratings DNN**"
      ],
      "text/plain": [
       "<IPython.core.display.Markdown object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "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>ours_mean</th>\n",
       "      <th>ours_std</th>\n",
       "      <th>paper</th>\n",
       "      <th>improved_mean</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>Value</th>\n",
       "      <td>0.8400</td>\n",
       "      <td>0.0045</td>\n",
       "      <td>0.8195</td>\n",
       "      <td>0.8226</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Rooms</th>\n",
       "      <td>0.7879</td>\n",
       "      <td>0.0071</td>\n",
       "      <td>0.7612</td>\n",
       "      <td>0.7586</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Location</th>\n",
       "      <td>0.6875</td>\n",
       "      <td>0.0069</td>\n",
       "      <td>0.6581</td>\n",
       "      <td>0.5782</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Cleanliness</th>\n",
       "      <td>0.6644</td>\n",
       "      <td>0.0076</td>\n",
       "      <td>0.6324</td>\n",
       "      <td>0.6232</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Check in / front desk</th>\n",
       "      <td>0.7844</td>\n",
       "      <td>0.0075</td>\n",
       "      <td>0.7582</td>\n",
       "      <td>0.7495</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Service</th>\n",
       "      <td>0.7681</td>\n",
       "      <td>0.0075</td>\n",
       "      <td>0.7401</td>\n",
       "      <td>0.7337</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Business service</th>\n",
       "      <td>0.8996</td>\n",
       "      <td>0.0019</td>\n",
       "      <td>0.8774</td>\n",
       "      <td>0.8608</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Mean</th>\n",
       "      <td>0.7760</td>\n",
       "      <td>0.0053</td>\n",
       "      <td>0.7495</td>\n",
       "      <td>0.7324</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                       ours_mean  ours_std   paper  improved_mean\n",
       "Value                     0.8400    0.0045  0.8195         0.8226\n",
       "Rooms                     0.7879    0.0071  0.7612         0.7586\n",
       "Location                  0.6875    0.0069  0.6581         0.5782\n",
       "Cleanliness               0.6644    0.0076  0.6324         0.6232\n",
       "Check in / front desk     0.7844    0.0075  0.7582         0.7495\n",
       "Service                   0.7681    0.0075  0.7401         0.7337\n",
       "Business service          0.8996    0.0019  0.8774         0.8608\n",
       "Mean                      0.7760    0.0053  0.7495         0.7324"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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kPy1zGyjOiLKnZtLMwDZC73UAkCCeeutt1zA8OCDD9qaNWts//797uJYvX6q99nULF682Hbs2JFk2s8//2xbt261qlWrprmumjVrur+fffaZW0dqD21HZui93377rfs/re1Oj7d96kk12hQQHzly5Lgek8yUbSyXn9YxOFbeOaceZpNLbVpqYlkOods4e/bsFK9508J9dgAguyDgBIAEpeFNChUq5C6sly5dat27d3eZwtRs377drrzySjc0yp49e2zBggVuiIj0qiTqPRoKokePHjZlyhTbsGGDyxpp2Ix33nnH2rRp47Jm4SxatMg6depkc+bMce/X8Bg//vijdenSxWU3q1evnqnsplxxxRWWN29ee+ihh+yRRx5x26XlK8Du1atXsNplZhQrVswNzbF27dok2bRoHJNolm0sl5/WMThWl1xyicsc3nHHHTZjxgzbtWuXW8fNN9/shiGJRKzL4dRTT7Vq1arZRx99ZHfddZfbPg0To6rg2u6MVOUGgCwt3o1IAQDHt9Mg9bzq9bgZ+mjYsKHrgKdJkyZRHRZFHa/kypUrzWEy1BFQON98802a782fP3/giy++OKZhUdR5TKTDonTp0iXVZaS23z179kxzSJCMHJOMrDejZZuWtNaZ0eWHOwZpdRqU2nqnTp3q3vvpp58Gp910002pDouiTor0/y+//JLufkajHLxOg9RbbnLqbTYjw6LoMwYA2Q0ZTgBIMKeccop98MEH1qRJE5epUsc/yuZ98sknrtOS1GgQelVVPPfcc61AgQJWqlQpGzhwoFuOqk2G07NnT5cRveyyy9z7lFFUVUJlmD799NNghzBpady4savy2r59eytfvrzbxooVK9rVV19t33//vbVs2fKYjseAAQPs448/ttatW7s2dAULFnTrnDRpkjtWmTVq1CiXwUre2VI0jkk0yzaWyw93DI7VU0895TovOvnkky1fvnyuEyudJ1411UjWGaty8KjDoLlz57psqc4tbWe9evXs2Wefteeee+6Ylg0AWUUORZ3x3ggAAIBjdfjwYRfQqXqsqoEfS6dCAIDoIMMJAACyHGWgR48e7Ya2UbtbtSVVu2INkdOhQweCTQDwCTKcAAAgy1GV1JtuuinVjorU6RM9wAKAP/hysCd1r55em6C0qIZwWlVoND5Y8hrEWo/abAAAgKxD7S//+ecf125z5cqVrm1xq1atbMSIEQSbAOAjvqlSqy7N+/Tp47pZ16DPzZs3d12pR0JjwV1wwQWuQb66OL/44ovt77//TjGfOjjQPOpIwHu0aNEiBnsDAABiSb/nI0eOtGXLlrkqtRoTdtq0aVarVi0OPAD4iG8CTo3hpbHWNMabBhevW7eu6zFwy5YtYd+3bt0610PhSSed5Aah1t1OBZLnn3++GysuuVdffdUNVO09vvvuuxjuFQAAAAAkLl8EnMpkfvjhh/b444+77s1VLebpp592vc298MILYd87btw4O3TokGvLoUCzePHi9uKLL9r69ettwoQJx20fAAAAAAA+DDg/++wzy5Url2t74VG12mbNmrnXwlG7jXLlyrkg1aNquRpPS+OCpdVGFAAAAACQAAGngkYNKq4BkUNVqlTJvRZOlSpVXDZz9+7dwWkae2vz5s2ptuO84YYb3ODUZcuWtW7duqW7fK99qarueo9Vq1bZb7/95jKwAAAAAAAf91K7b98+l9FMTh0A6bVw+vbta2PGjHEdDmk8LmUvb7311uByQ/Xq1csGDx5sNWvWtF9//dUGDBhgjRs3tiVLlrgsaVq0/GHDhqWYrjan5cuXz8CeAgAAAEDWlpEYyBcBp3qPVQ9zyWmaXgtHnQUtWLDAhgwZYmeddZYb5kTBZ+7cuW316tVJ5n3llVeC/9evX99mzJjhDpam33fffWmuY9CgQdavX7/g8w0bNrhAVdV2lZlFeEeOHHG9B5YsWdJVnUZ8UA7xRxn4A+UQf5SBP1AO8UcZ+APlEFu+CDirVavmqsAqI6mspkdVVyMZuLlBgwY2c+bMJNPULfo555wT9n0KFkuXLm1r165Nt+t1PZJT8EQAFTmOlz9QDvFHGfgD5RB/lIE/UA7xRxn4A+WQjdtwavgTVYX99NNPg9P+++8/+/rrr61NmzZJ5tVQJum1ndT7/vzzT1eFNhwNo7Jp0yarXLnyMe4BAAAAAMCXAafG3OzcubNrX/nzzz/bxo0b7brrrrOCBQva9ddfn2ReZUDvvvvuJNMuv/xy155S43fOmjXLunTp4joHat68eXAeDZUydOhQW7p0qW3bts3mz59vl156qes8KLS6LAAAAAAgGwWcMn78eGvfvr21a9fOTjnlFBc8zp0714oVK5ZkPvVkq15mQym4VEdB6rFWbTnvueceNy5nqJ49e7oAVlnP6tWrBwPSH374wbXFBAAAAABEV45AIBCI8jKzPQ2Nos6K1PazYsWK8d6cLNEQW1WX1WaWNq+UQyLjs+APlEP8UQb+QDnEH2XgD5RDgmQ4AQAAAADZCwEnAAAAACAmCDgBAAAAADFBwAkAAAAAiAkCTgAAAABATBBwAgAAAABigoATAAAAABATuWOzWGQXzzzzjO3du9f9ny9fPqtcubKdd955VqRIkXhvGjJg4sSJtn79evvvv/+sYMGCljNnyntNKtf8+fPbJ598YrfffnvY5f3222/23nvv2V133WU5cuRImLKYPXu2/fvvv3bVVVcdt3U++uijdskll1jdunWP2zoBAACihYDzOBs7carFw7W9umXqfcOHD7cqVarY+eefbwcOHLDx48fbddddZzNmzLDmzZtbIqvZb2vc1v3nuJIZmn/37t22Y8cOd/Pg8OHD9sILL1itWrXsggsuCM6j8l2yZIndd9996QacP//8s91zzz1uvty5E+dr5J133rHff/896gFnIBCwUaNGWceOHa1OnTpJXtNxrlixIgEnAADIkhLnShGZ1qxZM5dlkUOHDlnjxo2tf//+9uuvv3JUs4gbb7zRjhw5Yps2bbIyZcrYa6+9Zk2bNg2Wq+ePP/6IaHmnnHKKy26mlilFxqlsFFiqBkHygFPH+dRTT+WwAgCALImAExmSJ08eu+yyy2zo0KG2a9cu++677+z77793r5144olWs2ZNa926teXKlSv4nmnTprnsWatWrezrr792Qc/ZZ59tjRo1SrF8Zd9UpVOBT7Fixax9+/ZWsuT/ZfPeeustK1CggJ1xxhk2a9Ys27p1qw0cONCtG9Gjcvjss89s+fLlVq5cOVelM2/evEnOg6JFiyapTvv333/bvHnzbN++fXb66ae7gDYcZVNV1rfccot98MEHtnLlSneONGzYMOLzQOtZsGBBmudUuPNlxYoVbh+V9VVApyx+8urBP/30k9unE044wS688MIU+7Bz50773//+Zz179rTy5csHp2tdeq1r165J5tf6lSU9ePCgnXbaaW5/5bHHHnN/33//fVu1apX7X9tZqFAhd5x1vEOF23bdFHriiSfsiiuucGWxcOFCd2NAn8tKlSqFLRMAAIBoIz2BjJ80/39WS1kZXdCqqqYeqmqoTJou+tVW0KNquMOGDXMBgdrAffPNN+7/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AQAAAACJkeGcN2+e1apVy1544YXgtEKFCtnNN99sf/75p3344YfWrFmzaG0nAAAAACBRMpzKZqbVVlPT9ToAAAAAIHFlOuCsXbu2zZ0711WnDaV2nG+++abLfgIAAAAAElemq9Q2btzYGjRo4B69evWyKlWq2JYtW2zq1Km2d+9e69mzZ3S3FAAAAACQWL3UPvzwwy7IXLNmjZUuXdpat25tjzzyiBUtWjR6WwkAAAAASKyAs0CBAi7g1CMQCFiOHDmit2UAAAAAgMRsw5kcwSYAAAAAINMB55QpU6xs2bI2ePDg4P9pPTQPAAAAACBxZahKbb169ez222+3+vXrW7ly5dz/adE8AAAAAIDEleGAUw9ZvXq16yDotNNOi9rGrFu3zmbOnOl6uW3atKmdddZZ6b5nyZIl9v7776f6Wt26de2yyy475nUAAAAAAI5jG06Nwfnss89atCgI1Nidc+bMsRUrVtiFF15ot9xyS7rvO3LkiO3fvz/J4++//7b777/fvv/++6isAwAAAABwHHuprVixoq1atcqiYc+ePda7d2+7/vrr7YknnnDTunTpYuecc45dcsklLpOaltNPP909Qg0fPtz91fig0VgHAAAAAOA4ZjhbtmxpO3bssFdffdUNiXIsPv74Y9uyZYsNHDgwOK1FixZ26qmn2muvvZbh5ek9en+NGjVitg4AAAAAQIwCznfffdfWrFljffv2tUKFClm1atWsevXqwceQIUMiXtYPP/xgBQsWtKpVqyaZrvahei0j5s+f76rL9unTJ2brAAAAAADEsEqtAszQbGFyDRs2jHhZyjyWKFEixfTixYu71zJi4sSJLgDu1KlT1Naxa9cu9/Bs2LAh2H5UD4Tn52Pk521LpH3187bFYj8TZX/9inKIPz9/Bvy8bYm0r37etkTZTz9vWyLt6xGfbluuXLliH3AqoMxIUJmeHDlyRDQtHPU8O23aNNc288QTT4zaOsaMGWPDhg1LMV2Bap48eTK0jYlo69at5lebNm2yREE5+IefyyKRUA4c+9Twu+APiVIOfv4eSpQyEMoh48qXLx/7gNOjzN8777xjf/31l9WpU8fatGljmzdvtlNOOSXiZZQsWdL+/fffFNO3bdvmXovUjBkzbPfu3Smq0x7rOgYNGmT9+vVLkuFs3LixlSpVysqUKRPx9iUqHV+/fpATqfwoB3/cpdRnQWWRkTuDoByyG76P/IFyiD/KwB8oh9g6poDz7bfftv79+9vRo0ddRlHDjFx00UWu19effvrJVW2NhHqZVaCoXm8rV64cnP7zzz9naJzPCRMmWO3atd34mtFcR+HChd0jOV0wctGYPj8fIz9vWyLtq5+3LRb47vAHyiG+x96v/LxtibSvft62RNlPP29bIu1rLh9vW8w7DVKaXcOOPPjgg65qqf5KsWLF3BAjU6ZMiXhZClLVlvLFF18MTvv2229tyZIl1qNHjyTzjhgxwj777LMUy1i7dq0bGzS17GZG1wEAWUHz5s3dAwAAINtlOL/44gtr1qyZ3XTTTSleU9XapUuXRrws9R47btw4u+qqq2z9+vWumuP48ePt2muvdYFiqPvvv98GDx5s559/fpLpGtokZ86c1rNnz2NeBwAAAAAgjgGn2iKl1WHOnj17LH/+/Bla3mWXXWbLli2z9957z/bt22fTp0+3Vq1apZjv3nvvTfWOvgLI5557LmybvEjXAQAAAACIY8B5xhlnuOqr3333nTVp0iQ4Xe05FdDdeeedGV6mxsi87bbbws6jKrWpCe3U51jXAQAAAACIY8BZq1Ytu/LKK1228fLLL7dDhw653lvbtWtnhw8ftksvvZTyAYBU1Llue1SOy9q/Drm/Nfsdey/Qf46LvEdwAACA49JLrdpAVqtWzV599VVbt26d68lV1VYnT55suXMf84grAAAAAIAs7JiiQrXhHDZsmHuoTWd26LYXAAAAABDnYVE0BMnLL78cfB4abCZ/DQAAAACQeDIdcK5YscIWLlyY6mt//fWXLV68+Fi2CwAAAACQxcWkoeVvv/1mJUvSAQUAxNJJ7WdygAEAQPYKOKdOnWp33HGH7d271w4cOGAff/xxktc1fefOnTZv3rxobicAAAAAILsHnHXr1rUbb7zRFi1aZGvXrnVDooRST7UaKqV+/frR3E4AAAAAQHYPOBVI6rF06VI37mabNm1is2UAAAAAgMRsw1mvXj33AAAAAADgmHupnTJlipUtW9YGDx4c/D+th+YBACA7UxMSPQAAQBQynMpo3n777a5Kbbly5dz/aaENJwAAAAAkttyZrUa7evVqa926tZ122mmx2jYAAAAAQKJUqQ01d+5ce/bZZ6O7NQAAAACAbCPTAWfFihVt1apV0d0aAAAAAEC2kelealu2bGl33XWXvfrqq9a7d2/LkSNHdLcMAIAYqnPd9mNextq/Drm/NfttjcIWmf05rmRUlgMAQJbPcL777ru2Zs0a69u3rxUqVMiqVatm1atXDz6GDBkS3S0FAAAAACRGhlMB5sCBA9N8vWHDhpldNAAAAAAgkQNOBZTRDipfe+01mzZtmu3du9eaNm1qd955pxUuXDii927cuNGefvppW7RokZUoUcJlXtu0aZNkHo2Vdvjw4STTatas6dYLIHsZO3Gq+U2fHp3jvQkAAABZI+CU+fPn2wknnGCNGjUKTlu3bp199dVX1qVLlwwt695777X//e9/9uSTT1qZMmVs2LBh9tFHH9m3335refPmDfveZcuW2bnnnmtt27Z1Y4MeOXLEBZ/58+e3c845JziflnX//fe7+TwnnnhihrYTAADPSe1ncjAAAIhFwLljxw6XRVQQF6pChQou2KtatWqSQDQcBamPPfaYvfjii9arVy83rX79+la5cmWbMGGC9e/fP833BgIBu+qqq1w28/XXXw9Ov/jii23fvn2pVgU+66yzMrCnAAAAAIDj2mmQspt169Z11VdDqbfaDh062Pvvvx/xspTJVFXXyy+/PDitfPnyrlrte++9F/a9CxYssCVLltitt96a4jVlXwEAAAAAWSzDqXaWBw4cSPU1ZRZ3794d8bJ+//13K1mypBUrVizJ9Bo1atjcuXPDvvebb76x3Llzu+Dy6quvtvXr1wc7NDrttNNSzP/ss8/a2LFjrVy5ctaqVSuXpdX7w9m1a5d7eDZs2OD+ququHgjPz8fIz9uWSPvq521LlP3087Yl0r76edsSZT/9vG2JtK9+3rZE2U8/b1si7esRn25brly5Yh9wnnnmmW78zV9//dVOOeWU4HQFZpMmTXJtMCOl92holeTUYVBooJearVu3Ws6cOV27TI0L2rNnT5s+fbqrzvvJJ5+4oNJTp04dV2W3Vq1art3n0KFDbfz48fbFF1+49p5pGTNmTKr7s2XLFsuTJ0/E+5moVEZ+tWnTJksUlEP8UQZIT6J8J/FZ8AfKIf4oA3+gHDJOtVFjHnBqrE1VgW3SpIkLPJWNVE+x6vG1SJEi1rlz5L0xqlOg5L3HysGDB9PtMEgBn+YbNGiQ3XzzzW7aBRdc4AJhdRD05ZdfBudVD7ZeYHn++efb2Wef7QJTtRO9/vrr01yHlt2vX78kGc7GjRtbqVKlXAdHCE/Za79+kBOp/CiH+KMM/HO3mO+k+OKz4A+UQ/xRBv5AOfi4l1plBx988EEXsCkIU6DZsWNHGz16tOXLly/i5aijId3V1UVAaHpWy9Rr4VSsWNH9VXvPUHquqrOhkmcxlaVV0PjTTz+FXYcyrakNz6JtzUg6OVH5+Rj5edsSaV/9vG2Jsp9+3rZEkijl4Of99PO2JdK++nnbEmU//bxtibSvuXy8bTHvNEiUfRw5cqT9888/LkOpnmsnTpzogriMaNasmctSLl68ODjt6NGjrgdcvRaON+yJqreG0vP0sldqh6ptTt52FAAAAAAQ54AzWtG3gkZ18PPAAw+4wNPr3EdBY/KqrhrSRK95Tj31VGvdurU9/vjjwY6K1GvttGnTrHv37sH5Zs6cmaQDoj179gSXrWFVAAAAAAA+DTiPhTr9efvtt23z5s1WqVIlq127tg0fPtymTJniOvgJ9d1339nq1auTTJs8ebLLtp500kkuAFW7UvU+e/fddwfnURtTVfVVHW2N8Vm2bFlXlVZDstSrV++47SsAAAAAJIpjasMZTVWrVrUff/zRli9f7oZVUaCZWjtQDYOSvFek0qVL2+eff25r16617du3uw6NChQokGSemjVruiznzp07XcCqZSj4BAAAAABk84AzNBMZjqrUpkUZTj3CUcdGynACAAAAABKgSi0AAAAAIPsh4AQAAAAAxAQBJwAAAAAgMdpwAgCyj7ETp5rf9OnROd6bAABAwiDDCQAAAACICQJOAAAAAEBMEHACAAAAAGKCgBMAAAAAEBMEnAAAAACAmCDgBAAAAADEBAEnAAAAACAmCDgBAAAAADFBwAkAAAAAiAkCTgAAAABATBBwAgAAAABigoATAAAAABATBJwAAAAAgMQIOA8fPmx79+7N9Pv3799vR48ejek6AAAAAABZKODctm2bde7c2QoWLGglSpSw0047zb799tuI3//uu+9avXr1rGjRolamTBm75ZZbbM+ePVFdBwAAAAAgCwacXbp0sRUrVtiaNWts9+7d1qpVK2vbtq1t2LAh3fdOmTLFunfvbvfee68LMtevX2+1atWyn376KWrrAAAAAABkwYBz8eLFNmfOHHvsscesdOnSljt3bhs1apT7+8ILL4R9r6rG3njjjTZkyBDr2rWr5cqVy/LmzWs33HCDNWvWLCrrAAAAAABk0YBz7ty5LvBr0aJFcJqCRgWMei2cWbNm2fbt212GMxAIpKhGG411AAAAAAAyLrf5wOrVq13WUQFgqIoVK9qPP/4Y9r1Lly61AgUK2CeffGL33HOPy3iqHafacN55552WM2fOY17Hrl273MPjVcE9cuSIeyA8Px8jP29bIu2rn7ctUfbTz9uWSPvq521LlP3087Yl0r76edsSZT/9vG2JtK9HfLptqlWapQLOffv2Wf78+VNM1zS9Fs5///3ngsynnnrKFi1aZFWqVLEPP/zQLr/8csuXL5/ddtttx7yOMWPG2LBhw1JM37Jli+XJkyeCPUxsW7duNb/atGmTJQrKIf4oA3+gHOKPMvAHyiH+KAN/oBwyrnz58lkr4DzxxBNTHaZE1WPVo2x675UHHnjAqlat6v6/5JJLXMA5bty4YMB5LOsYNGiQ9evXL0mGs3HjxlaqVCnXIy7CK1mypG8/yIlUfpRD/FEG/kA5xB9l4A+UQ/xRBv5AOcSWLwLOGjVquEyTgj8vgJSVK1da9erV032vVK5cOcl0PZ89e3ZU1lG4cGH3SC2VnJF0cqLy8zHy87Yl0r76edsSZT/9vG2JtK9+3rZE2U8/b1si7aufty1R9tPP25ZI+5rLx9uWpToNatOmjevw5+OPPw5O27lzp3399ddu2JJQypSFZiovuOACV61VbTlD6XnNmjUztQ4AAAAAQDbJcGrMzF69etngwYOtbNmyrprjHXfcYSVKlLDrrrsuybyqxqr5Ro8e7Z5rXlV5VZXaChUq2CmnnGLTpk1zgeX777+fqXUAAAAAALJJwCkvvfSSjRgxwvr06eM68WnatKnNmzcvRVVWBYihVWJl5MiRrgda9VKrIVIUXKo6rbKfmVkHAAAAACAbBZzqUfahhx5yj3BS63xGQ58oy6lHNNYBAAAAAMgmbTgBAAAAANkPAScAAAAAICYIOAEAAAAAMUHACQAAAACICQJOAAAAAEBMEHACAAAAAGKCgBMAAAAAEBMEnAAAAACAmCDgBAAAAADEBAEnAAAAACAmCDgBAAAAADFBwAkAAAAAiAkCTgAAAABATBBwAgAAAABigoATAAAAABATBJwAAAAAgJgg4AQAAAAAxAQBJwAAAAAgJnKbj+zdu9cWLFjg/jZq1MgqVqwY0fumTJliR48eTTKtePHi1q5du0zNBwAAAADIRgHnwoULrUOHDlapUiUrXbq0de/e3UaMGGGDBg1K9709e/a0Jk2aWJUqVYLTTj755BSBZKTzAQAAAACyScB58OBB69Kli7Vp08Zee+01N+3tt9+2K6+80po3b26NGzdOdxkDBgywHj16RG0+AAAAAEA2aMM5Z84cW7Vqld15553BaVdccYVVq1bNXnnllbhuGwAAAAAgCwecqk57wgknWN26dZNMP/PMM91rkfj9999t2rRp9uWXX9ru3buPeT4AAAAAQDaoUrthwwYrVaqU5ciRI8l0teWcN29eRMuYMWOGLVu2zH777TfbsmWLjR492nr37p3p+ULt2rXLPUK3V44cOeIeCM/Px8jP25ZI++rnbUuU/fTztiXSvvp52xJlP/28bYm0r37etkTZTz9vWyLt6xGfbluuXLmyVsCpnmNz5kyZbNW0w4cPp/v+999/P9jxTyAQsPvuu8/69OljtWrVsrPPPjvD8yU3ZswYGzZsWIrpCljz5MkT8X4mqq1bt5pfbdq0yRIF5RB/lIE/UA7xRxn4A+UQf5SBP1AOGVe+fPmsFXAWK1bMdu7cmWK6pmnYkvSE9jKrLOnw4cPtySefdNnM0EAy0vmSU0+5/fr1S5LhVEdGysqWKVMm4v1MVCVLlvTtBzmRyo9yiD/KwB8oh/ijDPyBcog/ysAfKIfY8kXAWa9ePdu+fbtt3LjRypYtG5z+66+/2qmnnpqpFK/ahO7Zsycq8xUuXNg9Unt/RtLJicrPx8jP25ZI++rnbUuU/fTztiXSvvp52xJlP/28bYm0r37etkTZTz9vWyLtay4fb1uW6jRImccCBQrYpEmTknTus3jxYuvcuXOSeV9//XX74Ycfgs//+ecfVyU31KxZs2zbtm3WrFmzDM8HAAAAAMhGGc4SJUq4zntuu+021zmPqjmqqmvbtm2tU6dOSea9+uqrbfDgwdawYUP3fMGCBTZq1Ci75JJLrEKFCvbLL7/Y2LFj3Rie3bp1C74v0vkAAAAAANkowykDBgxw43Eq4FyyZInr0OeDDz5I0ZlQ9+7d7Ywzzgg+79Kli7311luWL18+lxFVm8/Zs2e7oU9CU9CRzgcAAAAAyEYZTk/z5s3dIxxVqU2uevXqNmTIkHSXH+l8AAAAAIBslOEEAAAAAGQvBJwAAAAAgJgg4AQAAAAAxAQBJwAAAAAgJgg4AQAAAAAxQcAJAAAAAIgJAk4AAAAAQEwQcAIAAAAAYoKAEwAAAAAQEwScAAAAAICYIOAEAAAAAMQEAScAAAAAICYIOAEAAAAAMUHACQAAAACICQJOAAAAAEBMEHACAAAAAGKCgBMAAAAAEBMEnAAAAACAmMhtPjJv3jybPn267d2715o2bWrXXHON5c6d/iZ2797djhw5kmRa5cqV7dFHH43aOgAAAAAAWTTD+dxzz9mFF15oJUuWtEaNGtmoUaPs4osvtqNHj6b73jfffNO979JLLw0+WrVqFdV1AAAAAAAyxhepva1bt9pdd91lI0aMsMGDB7tp5513ntWpU8cFk926dUt3GWeddZZ17do1pusAAAAAAGSxDOdHH33kqrj26NEjOK1mzZouC6nqr1llHQAAAAAAn2U4ly5dasWKFbMyZcokma7s49dffx3RMqZOnWqffvqplStXzlWnbdu2bdTXAQAAAADIYgHnjh07rEiRIimmFy1a1LZt25bu+0uVKmV169a1WrVq2bJly+yyyy6zdu3auaqyuXLlOuZ17Nq1yz08a9eudX/XrVuXorOieNu+7d94b0IKq1evdsf40J685jerV++JyXIph/iXA2UQ/zKgHDKOz0L88VnwBz4L8cdnIXuXw7FSjFW2bNnIOl8N+ED//v0DlSpVSjH9pptuCpQtWzbd92/ZsiXJ89mzZwe0a5MmTYrKOoYOHeqWx4NjwDnAOcA5wDnAOcA5wDnAOcA5wDnAOWCBtWvXBiLhiwynqsFu2bJFwa/lyJEjOH3z5s0uck6Pep0N1aZNGytevLh99dVXwTabx7KOQYMGWb9+/YLP9+/f77KcVapUYUiVCGzYsMEaN25sCxcudOWA+KAc4o8y8AfKIf4oA3+gHOKPMvAHyiFzIonTxBcBZ5MmTWzfvn32yy+/WL169YLTFy1aZBdccEGGl3f48GHXQVCBAgWiso7ChQu7R6jq1atneLsSnYLNihUrxnszEh7lEH+UgT9QDvFHGfgD5RB/lIE/UA7ZuJfa1q1bu2yhxsX0vPXWW7Zy5cokmUXR0CeTJ08OPl+wYIEtX748+Fxjat53330uC3nFFVdkah0AAAAAgGPniwxnnjx5XPDXoUMHa9iwoZUuXdrmz59vTz75pJ155plJ5lVHQMqSde/e3T3Pnz+/denSxVWTrVChgv3666/233//2YQJE+zss8/O1DoAAAAAANkk4BQFfStWrLAvv/zSVX0dP358qu39NPxJ7dq1g881jub333/vhj1ZtWqVlS9f3vVYe8IJJ2R6HYguVUceOnRoimrJOL4oh/ijDPyBcog/ysAfKIf4owz8gXKIrRzqOSjG6wAAAAAAJCBftOEEAAAAAGQ/BJwAAAAAgJgg4AQAAAAAxAQBJ2LuhhtucMPXIHOeeuopGzFihD388MM2duxYN5QPYkNN2nWst2zZclwO8V9//WWvvvpqkml///13immJRsf//PPPz/LrAGLxHTV79mz3uzB9+nTbs2dPzA6yvgvVwSKQlbz88ss2cuRIO3z4cJLpb7/9tjunN23aFLdtS2QEnIjIXXfdZS+99FKK6X/88Ye1atXK9u7dm+Z7lyxZYv/++y9HOpMeffRRN9yPfvg///xzO+WUU2zOnDkczxg4cuSI3X///cftB+n333+3F154IcU2HDhwwBKBegzXOMgaJ7lXr17uAlq0/1999VVM1x26DoLPyL377rv2ySefZJnlZif6brjooovs5ptvttWrV7vPi3rfX7ZsWUzWp/HM6VfSbMOGDfbFF1+4h26eR+um77p16+y3336LyrLwf5555hl76KGHbObMmUm+72+88UZ78MEHXXkigYdFgb/VqVPHHnnkEbvuuuuSTJ84caIVLFjQChQoELdtSwQ9e/a0Cy+80P3fu3dvl+nURbroy/Pjjz+2Q4cOWZs2baxy5crB96X12ty5c+3o0aOuG/BvvvnGqlSpYpdccokbWuj999+3EiVKWNeuXS1Xrlxufs370Ucf2fLly61BgwZ23nnnWSLSjZUPPvjANm/ebM2aNXNj+oZeDOpYa+ilFi1a2Omnnx4sg1deecX9X6pUKVcOOt66gaBxhfW67rrKvffe6455vnz50l3nn3/+ad9++621bNnSZTzy5s3rxiRObUgov14U3H333Xb77bfb5Zdfbtu2bbNp06bZmjVrrHPnzsd1W4oUKeIuUPB/vvvuO/c9oQu1U0891Y1hrfGsdbOrZMmS7jyOpows98MPP7ScOXNau3btIl6+PoP6/IQOq5YVy0Q3Sf755x8rVKiQm6bvj+Q3qBYtWuTm1XjjHTt2dN8n+n7Sb7hqHH366aduvHKd9xrX/Kyzzgq+V9/zGt9c3/H6qzHOPYsXL3bLrVSpkvu9SG+d2YUCl9tuu83OOOMMdxwVJDZp0sTdJNFnIrP0/a2b9vreR3RdeumlbuhDnYvy3nvv2dlnn50kCBXdzJ83b567jtV3nD4TolpG+pzpM6BrngsuuCD4HtUu0G+tym/t2rWupoyGY0R4ZDgRkSuvvNLWr1/vPmAe3fmcPHmyC4aGDBlizZs3d9lO/aBp3tR06tTJfcF63njjDVf1IdSECRPc+nTROWvWLEooGQUkCgDl559/tnr16rmA4+uvv3ZBjld9Odxrmta3b18bNGiQC5CuueYau/baa92XtKp06sJk4MCBwXVef/31roxVrsq4KguYaHbt2uWyCf/73/9cZlIXxs8//3wwE6Ag87777nPVZHVjRkGi9znR63oouNcyNHawputGQOjr+l+BpJf1DLdO/VAqYNNnRf/rPe3bt7esQNmZwYMHuwBz+PDhLnDo0aOHC8D79++fYv6dO3faPffc4+YbMGCAywzIwYMH3feOHhdffLGNHj3aXRCKzlVlg+bPn29XXXWVO7d13qdGy/fO6Ujel9b2yHPPPefKQe/V5y696X6j7xZlm3UMlMnROaly0cW2X6pXKtjyAq5I6JzQ95eCoaxMVQQVaIfSWOKhNxkfeOABu+KKK9z3yLhx49z3kr5n9NA5rhuVn332mfu+2bhxow0bNizJ8pQ99aoian6vyq7Od52/yqZqubfccku668xOatWqlSTD+cMPP7iAU/Qbqt9Nj45t8mZEquWloHz79u3BaQr0dbNNdKNN10b6Tvvpp5/SvIbSDYYff/wxxWcxteWHm57d6YbIwoUL3Y1aL4DUzfpQunGva9ZffvnFBaS6masbn6KbOCpHHW9dC+mGg0fXQEoAqPxVVo0bN3bLQDo0DicQiZ49ewYGDBgQfP75558HihYtGti/f3/g119/DSxYsCDw2WefBW655ZZAjRo1AocPH3bzNWvWLPDOO++4/08++eTAokWLgst4/PHHA7169Qo+v/feewP169cPTJ8+PTBlypRAhQoVAp988klCF1CZMmXcsX/ooYcCvXv3DpQqVSrwzTffuNfat28fuPPOO5Mcz8aNG6f72l133RU488wzA0ePHnXPX3jhhUCBAgUCmzdvds9VnieeeGLwvZUqVQosW7Ys+PyXX34JZEeHDh3SuMSBpUuXpnhtxIgR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",
      "text/plain": [
       "<Figure size 935x374 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "display(Markdown(\"**Table 5: MAE of each criterion predicted by the Criteria Ratings DNN**\"), t5.round(4))\n",
    "fig, ax = plt.subplots(figsize=(8.5, 3.4))\n",
    "xx = np.arange(len(t5))\n",
    "ax.bar(xx - 0.2, t5[\"paper\"], 0.38, color=PAPER_C, label=\"Paper\")\n",
    "ax.bar(xx + 0.2, t5[\"ours_mean\"], 0.38, color=OURS_C, label=\"This reproduction\", yerr=t5[\"ours_std\"], error_kw={\"lw\": 1})\n",
    "ax.set_xticks(xx, [s.replace(\" / \", \"/\\n\").replace(\"Business \", \"Business\\n\") for s in t5.index], fontsize=8)\n",
    "ax.set_ylim(0.5, 0.95); ax.set_ylabel(\"criterion MAE\")\n",
    "ax.legend(frameon=False, ncol=2, loc=\"upper left\"); ax.set_title(\"Table 5: criteria rating error\")\n",
    "fig.tight_layout(); fig.savefig(\"results/fig_table5_criteria.png\", bbox_inches=\"tight\"); plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "69dda6bf",
   "metadata": {},
   "source": [
    "## 5. Ablations: Table 3, Table 4 and Fig. 4\n",
    "\n",
    "Each one changes a single setting of the Criteria Ratings DNN and reports the MAE of the whole model,\n",
    "as the paper does: its Tables 3 and 4 both list 0.7552 for the chosen setting, which is the whole-model\n",
    "MAE in Table 6. The Overall Rating DNN is trained once per fold and shared. Table 3 uses each\n",
    "optimizer's Keras 2 default learning rate."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "f3d14487",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-11-12T18:04:50.167029Z",
     "iopub.status.busy": "2026-11-12T18:04:50.166970Z",
     "iopub.status.idle": "2026-11-12T18:04:50.221929Z",
     "shell.execute_reply": "2026-11-12T18:04:50.221635Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Table 3 (optimizers)\n",
      "Table 4 (hidden layers)\n",
      "Fig. 4 (embedding size)\n"
     ]
    },
    {
     "data": {
      "text/markdown": [
       "**Table 3: optimizer**"
      ],
      "text/plain": [
       "<IPython.core.display.Markdown object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "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>ours_mean</th>\n",
       "      <th>ours_std</th>\n",
       "      <th>restarts</th>\n",
       "      <th>paper</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>setting</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>adadelta</th>\n",
       "      <td>0.7509</td>\n",
       "      <td>0.0070</td>\n",
       "      <td>5</td>\n",
       "      <td>0.9112</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>adagrad</th>\n",
       "      <td>0.8942</td>\n",
       "      <td>0.0066</td>\n",
       "      <td>5</td>\n",
       "      <td>0.7565</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>adam</th>\n",
       "      <td>0.7765</td>\n",
       "      <td>0.0104</td>\n",
       "      <td>8</td>\n",
       "      <td>0.7552</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>adamax</th>\n",
       "      <td>0.7531</td>\n",
       "      <td>0.0052</td>\n",
       "      <td>8</td>\n",
       "      <td>0.7919</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>rmsprop</th>\n",
       "      <td>0.7992</td>\n",
       "      <td>0.0224</td>\n",
       "      <td>11</td>\n",
       "      <td>0.7612</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>sgd</th>\n",
       "      <td>0.8953</td>\n",
       "      <td>0.0065</td>\n",
       "      <td>5</td>\n",
       "      <td>3.2805</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          ours_mean  ours_std  restarts   paper\n",
       "setting                                        \n",
       "adadelta     0.7509    0.0070         5  0.9112\n",
       "adagrad      0.8942    0.0066         5  0.7565\n",
       "adam         0.7765    0.0104         8  0.7552\n",
       "adamax       0.7531    0.0052         8  0.7919\n",
       "rmsprop      0.7992    0.0224        11  0.7612\n",
       "sgd          0.8953    0.0065         5  3.2805"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/markdown": [
       "**Table 4: hidden layers** (written smallest first, as in the paper)"
      ],
      "text/plain": [
       "<IPython.core.display.Markdown object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "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>ours_mean</th>\n",
       "      <th>ours_std</th>\n",
       "      <th>restarts</th>\n",
       "      <th>paper</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>setting</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>[8]</th>\n",
       "      <td>0.8157</td>\n",
       "      <td>0.0090</td>\n",
       "      <td>0</td>\n",
       "      <td>3.4703</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>[8,16]</th>\n",
       "      <td>0.7690</td>\n",
       "      <td>0.0062</td>\n",
       "      <td>0</td>\n",
       "      <td>3.0678</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>[8,16,32]</th>\n",
       "      <td>0.7645</td>\n",
       "      <td>0.0059</td>\n",
       "      <td>2</td>\n",
       "      <td>0.9481</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>[8,16,32,64]</th>\n",
       "      <td>0.7782</td>\n",
       "      <td>0.0057</td>\n",
       "      <td>0</td>\n",
       "      <td>0.7776</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>[8,16,32,64,128]</th>\n",
       "      <td>0.7765</td>\n",
       "      <td>0.0104</td>\n",
       "      <td>8</td>\n",
       "      <td>0.7552</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>[8,16,32,64,128,256]</th>\n",
       "      <td>0.7784</td>\n",
       "      <td>0.0092</td>\n",
       "      <td>0</td>\n",
       "      <td>0.7830</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                      ours_mean  ours_std  restarts   paper\n",
       "setting                                                    \n",
       "[8]                      0.8157    0.0090         0  3.4703\n",
       "[8,16]                   0.7690    0.0062         0  3.0678\n",
       "[8,16,32]                0.7645    0.0059         2  0.9481\n",
       "[8,16,32,64]             0.7782    0.0057         0  0.7776\n",
       "[8,16,32,64,128]         0.7765    0.0104         8  0.7552\n",
       "[8,16,32,64,128,256]     0.7784    0.0092         0  0.7830"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/markdown": [
       "**Fig. 4: embedding size**"
      ],
      "text/plain": [
       "<IPython.core.display.Markdown object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "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>ours_mean</th>\n",
       "      <th>ours_std</th>\n",
       "      <th>restarts</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>setting</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>0.7524</td>\n",
       "      <td>0.0044</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>0.7527</td>\n",
       "      <td>0.0061</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>32</th>\n",
       "      <td>0.7627</td>\n",
       "      <td>0.0046</td>\n",
       "      <td>15</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>64</th>\n",
       "      <td>0.7765</td>\n",
       "      <td>0.0104</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>128</th>\n",
       "      <td>0.7994</td>\n",
       "      <td>0.0084</td>\n",
       "      <td>12</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "         ours_mean  ours_std  restarts\n",
       "setting                               \n",
       "8           0.7524    0.0044         0\n",
       "16          0.7527    0.0061         5\n",
       "32          0.7627    0.0046        15\n",
       "64          0.7765    0.0104         8\n",
       "128         0.7994    0.0084        12"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "t3, t4, f4 = R.ablations()\n",
    "display(Markdown(\"**Table 3: optimizer**\"), t3.round(4))\n",
    "display(Markdown(\"**Table 4: hidden layers** (written smallest first, as in the paper)\"), t4.round(4))\n",
    "display(Markdown(\"**Fig. 4: embedding size**\"), f4.round(4))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "7a8884f8",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-11-12T18:04:50.222818Z",
     "iopub.status.busy": "2026-11-12T18:04:50.222764Z",
     "iopub.status.idle": "2026-11-12T18:04:50.386012Z",
     "shell.execute_reply": "2026-11-12T18:04:50.385643Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAABRsAAAF2CAYAAADunk8nAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjExLjIsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvgI3uAAAAAAlwSFlzAAAQ6wAAEOsBUJTofAAA6vJJREFUeJzs3Qd4U2UXB/CTpJu2FFr2FhAQGYIgU5kisgQVUUFkuDcuwAGifk5wT1DEgaiAICLIFFBkKFNAEEFk071ncr/n/5bUJE3btE2am/T/88lTe3OT3nsT8uaee95zDJqmaUJERERERERERERUTsbyPgERERERERERERERg41ERERERERERETkNsxsJCIiIiIiIiIiIrdgsJGIiIiIiIiIiIjcgsFGIiIiIiIiIiIicgsGG4mIiIiIiIiIiMgtGGwkIiIiIiIiIiIit2CwkYiIiIiIiIiIiNyCwUYiIiIiIiIiIiJyCwYbiYiIiIiIiIiIyC0YbKRK55FHHhGDwSBxcXElrvvcc8+pdf/5558K2TZf5cnjxNeAiPzF9OnTXf6sfP3119W6f/zxh/gKT+5fSEiIjBo1yu3reoIvvnZEVPnk5eWpz6o777zT25vik3AuieOHc0s9nsc6rusrr7evbCeVjMFG0rXffvtNfdi4cqtfv774iqysLPnss8/kyiuvlDp16khERIS0bt1annzySYmPjxc9wrbhOJ84ccLbm0JE5HF//vmny+NPVFSUz74i+/btk+DgYLUfb7/9trc3h4iI3OTWW28tctyKiYnRxXEeOHCg2p6WLVt6e1OIyM0C3P2ERFSyOXPmyH333We3bP/+/er25Zdfyo4dO6Rq1ao+cygRiMTN156biKgyM5vNMn78eHXSeerUqQr92w8++KC6ERGRdwQEBIimaV47/HPnzpUtW7ZIaGio17ahMvH26+1v20klY2Yj6dqll16qPmxsbw8//LC6b9OmTXbLfSnjrkqVKnL33XfL+vXrVWp7WlqaGmy7dOkiR44cUQFHIiLyHmRZOI4/06ZNU/etWLHCbnlSUpJPvlSzZs2S06dPy9NPP+3tTSEiIg85cOBAofHMlWm4noSxZ9KkSfLWW29JWFiYV7eFiDyDwUbyC5iW/NFHH8nll18u0dHREh4eLt27d5fly5cXWw9i8uTJahozrqj16NFDfvnlF5f+HgZoZGQ0adJETT/Dc9x+++0SGxvr0uPHjRsn77zzjvTq1UttL4KPl112mTz66KPq/tTUVCmPgwcPyg033CA1atRQ23fhhReqk+Ts7GyntTzOnDlT7LEYPHiwPP/88+r/GzRoUDAFA3WpiqqraPvcU6dOlbp166rp4tdcc42cPXu24IQdAWX8zWbNmsk333xTaF8cn3vXrl3FTmfE+qV9nWy3FcepUaNGYjKZ1DR+IqLi5OTkyKeffiq9e/dWn7nWz/NFixYV+RiLxaLqG6L8Bz7/cKFp3bp1Lh1oBDYxVjRt2lR9rtWqVUuNKaXNTDx06JDaBmSWuDuTHieyr7zyijRu3FjVT+zYsWOh/SuqruGePXtkwIAB6jjieOLCXEZGhtO/U5p1XT1u1rqTR48eLXEfPPE+ef/999XfX7ZsWaHnyM3NVdvds2fPcu0bLmq+8MILamzEWPfTTz9JYmKiOvHHc+A9if2+8cYbWXeSyI8VVRsP5wtTpkyRevXqqUBgt27d1HlBaeoFluSuu+6SPn36yOjRo8WdFi9erM4Hcc6Bbcf4unTp0iJrLW7evFntH9Zt3ry5zJ8/X62TnJwsEydOVJ/XeK6bb7652POzn3/+Wbp27ao+PzG249wHn/tl2b6iXgNsqzOuruvs9bY9Fjt37lTnpngOnDM99thj6jHufm/gfA+Pq169uipDg2OA7yLWv+VsO6+66qoiz/1w3l+WY0wVQCPyMQ8//DDyqrVNmzYVLJs9e7Za5ngzGAzat99+6/Tx1113XaH1g4ODtS1bthSs++yzz6rlR48eLVh29uxZrUmTJk7/3oUXXqglJyeXep8yMjK033//XevRo4cWEBCg/fHHHwX3xcbGque+7LLLXHqu/fv3a1WrVnW6ff3799fMZnOpj8WgQYOcPt9rr71W5HGyPvfIkSMLPa5nz57aypUrNZPJZLccv//55592++P43Dt37nS6LdbXe8mSJaV+nYra1q1bt5b6tSQi/zVt2jT12bBixYqCZV9++WWRn0mff/6508c7+8wNDAzU1q9fX7AuPl+xfO/evQXLEhIStJYtWzr9W40aNdLi4uJc2g+LxaLGm3vvvdduH9566y279TIzM9Xy1q1bl+r4jB49utD2hYSEaH///Xex+3fw4EGn49eQIUPUmHTDDTeUad3SHLfS7ENRnO2bq++T1NRULSIiQu2Ho4ULF6r1v/jii3Ltm+NYt3btWm3AgAFOn8PV156I9Gfs2LHq3/GBAwec3p+bm6vuv+OOO+yWOxuj8PlnPR/AuUl54DOsRo0a2rlz59Tv0dHRWosWLQqtN2HCBPX3bMfG4ljPGZzd5s6dW+jcCp+zoaGhdusZjUb193De5fgc2B5b1ufBccHxcVx/1KhRZdo+uP766wutg20dPHhwodfA1XWdvd7WfRg2bJgaexyfZ8qUKW59byxbtqzIY2B9nZ1tZ1FjFG5du3Yt0zEmz2NmI/kFXLW4//77VSYarjrhqsoXX3yhrnQ89dRTTh+zevVqtQ4yAo4dO6ZqKOJqDa7sFwdXbpDxgCtyaCCQmZmpsu7uuecelSny2muvubzd1qtA2H5kTSBDE9l+aBZTVnhOXI277rrrVIYjjsfKlStVth722dkU7ZKOxffffy9PPPGE+v/jx48XTMFwpd7Wxo0b1dWklJQUdXw6deqkpsCjUygyMTD9HX8XGYWoH/bee+8V+3zt27cvNBUErwGuYL388ssybNiwMr9O1uOQkJCgnrdz584uH3ciqpyQ9YbPmW3btqnPXjT5wlV7XLEvavzBZzKu4uOzBp+pyB5A1toDDzxQ7N/C5zA+z5C1hsYu+FzD4/F5h8/uF1980aVtxrQ1ZJi/9NJL4gmYVfD555+rY4G/g4xyjG+ffPJJsY9DJgiOITJIDh8+rMaN7777TrZv314oM78065bluJV1H8r7PsH3FmT6/PDDD4UyE2fPnq2ybK699tpy7Ru+Z+D9h+9KGOuQjYPxD+Pr7t271X5ibMb2tW3btkz7S0T60apVq0LZYPh8cwaZzgsXLlTnDRircB6B781DhgwpdsaYqzC7CGPdBx98oD7P3AWffygJcsEFF6ixAJ+x2Hacw2B2Fcpw4fPRFjLIx4wZo84PMIZgbMTMg+HDh6vH4hwGpa5wftmwYUPV3BPrOcJxwfHBccL9+B2ZfwsWLFDnPKXdPrwG+PzFbDJ8XmM9nNOhmQ7Wt1WadYuDc7URI0bIX3/9Jenp6WoMwniE18laP9Ed7w1rhqH1O5D1+CKLNDAwsMjH4e85nv9hW3DOjONZ2mNMFaQCAppEHs9sLIr1Kr7tVRbr4995551C6yPjDvchK85ZVl12dra6UtSvXz+nf69t27Zap06dSr0v1ltMTIz28ssva2WVnp6uMiORuZeTk2N338aNG9XfuPbaa8t0LJ544gn1+/HjxwutW1xm41dffWW37tKlS9XygQMH2i1HxiWubOLKVUnPbSsvL09djXv88ccLlpX2dbJu67vvvut0fSKiojIbi/LKK6+odf/5559Cj3/ppZcKrX/VVVep+44cOeI0Ow6fkVFRUXZX8G1169ZNa9WqVYnbheePjIzUNm/eXLCsqMzG0rLu34cffmi3PCsrSwsKCtKuueaagmWO+4dMBnxuI0sPn+u2Fi9erNa1ZiuWZt3SHrfS7ENpMhtL8z7Zs2ePWvbcc88VLDt27JjKuHnssccKlpV13xy/Z+B58J64++67S9xeIvId1sxGZ7fPPvvMaQbZgw8+qJatXr3a7rlwXtG0adNyZzYiC++WW26xW1ZUZmNpTJ06VW3bb7/9Vui++fPnF2Rx22bzdejQQWX628JnJu7bvXu33XKM21iOGVZW1ue54IILCp13ff/99+q+SZMmlXr7HnroIfX7jz/+aLcezm+ss7asr0Fp1i0us7F9+/Z2s98AYwLuO3HihNveG5MnT9aqVKmisviLUlTGra01a9ZozZo10/7999+CZaU5xlQx2I2a/AJqYsycOVNd2cEVGVwlcSxCjG6btvr161foefr27auuQCEjrmbNmoXux5UvXBFZs2aNuiroDGpcuOrVV19VN1x12bt3r8rUQIYLMh0mTJggpYVsBtS5QA0Ux6tDqPGEK1So1eSoLMfCVajJYQtX3pwtNxqN6irguXPnSvX8t912m6p7aZu9UdbXCftMRFQa+Mx94403VNY4sgkcxx9kpyELoKTPXCzDlXt8RqOWniPUlEUW+K+//lrk5xrqExUHmQD4zERtQ2SzeYpjTUHUEaxdu3ahY+O4f/jcRk1D1BG01b9//3KtW5bjVpZ9cNf7pE2bNmqMRC1qfC/AduP/8frdcccd5d43x7EO4++HH36osjdRFxnHFfWU8V0iMjKyTPtLRPpqEIOmZ44c6/EBvvfjc/WKK66wW47zCnwu/v3332XeDtTSw+eVY61ed+0j4LOrKI7NRDEOOn524jzl33//LZTVbT1/cXaegmPleN6Fz1lrjdzSbh8eg9cA9RNtBQUFqb+F18iqNOsWB70OMBbYQu1esI5X7nhvILsQ9Y9RH3PQoEHqeGDMadGihbjKmgmJ7Evr61LW9wB5FqdRk1/A9CF8IUdhW2cnAo5TqsrKmkZeHGfFgEuCkwGcWHz77bfqg76s3ait21fUSYc3YOqYLeu2OS633ofpC65CYBZF7XGS5I7XCUFeIqLSQGkGTFn9/fffdT/+oIj72rVr1cUZ2+l0aAQCKKGB30sz9cqZoj7fi9sHV/bPU+s6O25l2Qd3vk8w5RondrhohnERU87QDAfTwzwx1qGpHE6wH3roITWlH6VGMO0MF0SJqPIo62ecK2bMmKGCPWgKYjsGYborLsLg/9EIpCzK8nlY1Od8UcuhNOcpZd2+4s7nHJ+nNOsWp7h9tj6PO94bSP7ZsmWLmk6NACOmqiPQiYCjtYFocfA+uf7669UUdZQHqIjzdCo7BhvJ5+FLOz5wOnTooL7Eo1YGav/hA+eZZ54p8nH4Au8IJ2HgLKsEUK8D2Q2o5eFYN8J6K0+HNnzBx3OUtRs1ti8gIEBdMXK8WomTTBwr2xOV0hwL69UuHFs9QJdQ1L5CYNYxs8XTrxMRkfXzEDX8UDNo69atqhafdfxBtn1RnH3mWpc5+4wGZNUhywyZe0V9rqHWXnFKut+bkG2OLp7r168vNM6gnmBZ13XHcfPG+wQnUzgpmzNnjsp4xcwFx46x7t43dCVHvWfU8tywYYM899xzqrYyLuQSUeWAMQifTwgCOZ6jWOsPlpUnP2svvPDCgmBUUZ+HyIbzBHxe4vg4nkfhb1rH9NJsX9OmTdVrgDHOMVDm+LqUZl29vDcQxERdfIwv6P6NusvIVrT2ByjKyZMnZfDgwaqO5GWXXaar9wA5x2Aj+TzrVReki2OaMK7MoPgwphwhIFUUZEIiUIUv/fgSjwYz+KBEhmFR04ZxcoMv4shARHFjTANAEV1k1yHwhQ/N559/vsRtRnMUFHrHhyEGXlzRw4nm0KFD1Qeh4xRjV6HRDE468LwoMG+dUo6TLxRAhmuuuaZMx6JatWrqJ056vH1VCCdt2F4U/3V2Jc5drxMRUXHweY0xCFOIkKGOzx58nqOI/LPPPlvk43DfvHnz1BRYfHmePHmy+mzFtK2iLnbhogoyEPF5jqm0aOSBz3d8buNCGz7Hn3zyyWK3F1O1nX35tmbTozg+fseX+YqGC2VXX321anYyduxYNTUMF95QwB/Tvsu6rjuOmzfeJ7hghlkbS5YsUcG/+vXrF3pd3LVv+/fvV8cTmSbIbsQYj2OKE2hraRIiqhxwLgIIyuCzBZ8pCAbdcsst5ZpCDfjMdjYGoRwSstzw/xgLywLNwvA5i+3H5ybOBZExjm1GQAvnNJ5KmMDnJc67cJxwvNCoxVrywnreVZrts30NfvzxR/WcOKe76aabCk2LLs26enhvYMzGmIbyYRkZGWq8wmwK/H9x24tmMsh6xUWwK6+8UnfvASpCBdWGJPJogxhrYX3bGwqpjxw5Uv3/9u3bCz0ejVIcHxMcHKxt2bKl2OYk586dUw1Yiiq4jOcvSbt27Yp8PIoM4284Fu697LLLXDo++/fv16pWrer0udEwxbb4b2mOxbZt2wqtgyL4RR0n63M7FgpGYWUsR1F8Z8cFN1uOz41GNyaTqcjjh/VL+zoVta1ERCU1iLnuuusKfb4YDAZt1KhR6v/Xr19f6PHOPnMDAwPt1nXWZCQxMVFr06ZNkZ9rxRVTL05RDWIyMzPV8tatW7v0PNb9c9bQq1GjRlrfvn2L3b+DBw+qRiWO+zV48GA1JlmbvpR23dIct9LsQ1Gc7Vtp3idWhw8fVuvg/hkzZjj9W+7YN2xnUY+vWbOmlpCQUOI+E5F+G8QcOHCgVI04hg8fXuizICQkRDV3xP8nJSUVrNuxY0e1DJ9FZVVUg5gJEyYU+fnozIsvvljkZxlu2F/bcytn52xoVIntKWqctB3/rc8zaNAgdXwc/x4+38uyfUWNGfgbGOMcz1lcXbe4BjHOjoW1gZnt+6c07w1nrrjiiiL3/4MPPihyO62NS53d0HCmLMeYPI+ZjeQXkB0wfvx4NaUIGQNIzV6+fLmq/1AUZHCgflKtWrVUdhzqRSDl3Vlatq0aNWqo7DhkDKDYMrIPcEWuS5cuMmvWLJeyCBYtWqQK5F588cVqe6tUqSLt2rVTj0U2Av5GWaF+BaZpjRw5Um0XMimaNWsmTz/9tMr6cCz+6+qx6NSpk6rhhBR6x2nLFWnfvn0uXZVyx+tERFQSZKljeivq2+HzEyU9UAQfhc+Lgqv6mC6Ex+CzCZ+1yOZwLPDuCHWuUFx/+vTpakou/h7q72HMw3P6esY2pkAhqx4Z+sjUx2c2mpagVEp51tXDcSvL+wTT41CIH5mcRU39cse+4XHIxBkxYoQqto/nQIYtMnPwfcI6s4GIKgdkgWEWEEpW4PMA350xAwszyHAOgJ969Pjjj6uxFBlw+NzC+IpGJMi8w+ckPks9AecZyCrE5y6OFxpeTpkyRc1gKOv2ff7552rWg3XMwPcEZBM6a6RSmnW9/d749NNP1bkZZnJg7Mb5Gr77LFy4UI3hRdmzZ4+u3wPknAERxyLuIyI/hwAj6kUhzdyxWzcRERF5D8qsIOiHjqkITBIReQtKVSB5AecLuPBPxPcGlYSZjUREREREOpKZmakyVc6cOaMyMoiIKsrrr7+umnCgXitqnqN5B2oPnjt3ToYNG8YXohLje4NKg3mkREREREQ6gelfmJIHmP41ZMgQb28SEVUiuMiBMgyOGjZsqGZFUeXF9waVBoONREREREQ6gtpX7du3l48++sirdZKJqPKZNGmSymhctWqVHDt2TNWGtXYCRk1Yqrz43qDSYM1GIiIiIiIiIiIicgvWbCQiIiIiIiIiIiK3YLCRiIiIiIiIiIiI3ILBRiIiIiIiIj+2dOlSGTFihPTu3VseeughOXv2rEuPy83Nlffee0+uvfZa6du3r9xxxx2yZ8+eQuuZzWb5/vvv5frrr5cuXbrIjh07PLAXRETkKxhstJGXlycnTpxQP4mIiHwNxzEiInKEYOGoUaNUsPDJJ5+UP//8UwUEExMTSzxYN954o0yfPl0GDx4sU6ZMUcHHSy+9VDZv3my3Xvfu3eX999+Xiy66SLZu3SopKSkcx4iIKjEGGx1auTdo0ED91BtcLTx16pT66Y/8ff+A++j7+BqS3nEc8x5+PvgHf38d/X3/Kss+lkZGRoZMnjxZ3e655x4VcFy4cKGkpqbKa6+9VuxjT58+LYsWLVJdiMeNGyf9+vVTHdKbNGki7777rt26K1euVJmNAwcO9Po4xveAe/A48hjqBd+LvnkcGWwkIiIiIiLyQz/99JPKMsQ0aKsqVarIgAED1NTq4iQlJamfderUKVhmMBikdu3aBfdZRUVFuX3biYjIdwV4ewOIiIiIiIjI/TBlGpo3b263HL8ja7E4LVq0kHbt2qlsxiuvvFKCgoLkt99+U9Ok58yZ45btQyDUdso1sikBmTdlzb6xPo7ZreXD41h+PIbuweOor+NoMplcWo/BRiIiIiIiIj+EQF5gYKAEBwfbLY+MjJTs7Gx1c7zPymg0yqpVq1RWZP369aVWrVpy5MgRef3112X06NFu2b5Zs2bJM888U2h5bGys2u7yiIuLK9fjicfRXfhe5HH0p/dj3bp1XVqPwUYiIiIiIiI/hGxEZ80vc3Jy1M/iAnp43K233qoaybz55ptSo0YNWbt2rTzyyCMq+IimMeU1adIkmThxol1mY+fOndXfQnCzLJC1g5PpmJgYlzNwiMfRE/he5HGszO9HBhuJiIiIiIj8UL169UTTNNVwBbUWbYN6qMWI7MWioJHMihUrZN++farLNKDBzPHjx+Xee+91S7ARGZa4OcKJcHlPht3xHMTj6A58L7oHj6NvHUc2iCEiIiIiIvJD3bt3Vz9/+eUXu+X43XpfSVPtkMVoC7/Hx8e7fVuJiMh/MNhIRERERETkh5o1ayYDBw6U559/XlJTU9UyNIbZsWOH3HfffXbrDh06VJ566qmC3y+//HKV/fLqq6+q7Ej4999/Zf78+dKnT58K3hMiIvIlDDYSERERERH5qXnz5qmpyo0aNZI2bdqoOozvvPOOCibaQgDyr7/+Kvi9bdu2MnfuXPnwww/VdGz8fuGFF0rr1q3VMlvTp0+XLl26FNRfvPvuu9XvtsFLIiKqPFizkYiIiIiIyE+h2cpPP/0kx44dU81emjdvLlWqVCm03rJlyyQiIsJu2ZgxY+TGG2+UEydOqM7WDRo0kGrVqhV6LNa76qqrCi1HIwIiIqp8GGwkIiIiIiLyc8hsxK0ol1xyidPlAQEB0rhx42Kfu2nTpupGRET6ZbFU3N/iNGoiIiIiIiIiIiI/lZGtyfF4kaT0iok4MthIRERERERERETkh9KyLHI81iyJaRWX3chp1ERERERERERERH4mJcMiJ2ItkpyuiVaBf5fBxkrqzTfflIyMDPX/wcHBqg5Lnz59pGrVqt7eNCIiIiIiokohPj5e1q5dKydPnlRdw3v27Km6fhMRlVdCqkVOxZslM0ckpqpBEhOlwjDY6Caz530p3nDb2BvL9LgZM2ZIkyZNpG/fvpKdnS1z586VO+64QxYvXiw9evRw+3YSERERERHpqX7Zd1uy5bstWRKfqkl0hEGGdgmRoV2CJSzYUGEJIFOnTpXLLrtM2rZtK6dPn5b7779fRowYIR9++KGEhoZWyHYQkX/RNE3iUzQ5GW+WPLOozzeLVjGfa1YMNlZi3bt3lxdffFH9f25urnTu3Fluv/122b9/v7c3jYhclJOTI0FBQeVeNysry+XnIf9nsVjEbDZLYGCgS+tjDMnMzFQZGZCXl1eQPW/7pUdPsM0mk0mMRqNL64Lt8cC/GfybssLxwsU7IiLSvyNn8uTWmSlyJtEiBgPGKJF/zor89leavPt9hnzycKRcUNuzp8pz5syRBx54QL744gu56aabCpYfPHhQLr/8chkzZowsXLjQo9tARP5H0zQ5l2yRU3EWEYNI9Yjz33Ur+Ks4g41UcAI1fPhwmTZtmqSkpMjWrVvl999/V/dVqVJFpfL369dPnZhZff311xIWFiaXXHKJbNq0Sc6ePSvdunWTTp06FTqqOPFctWqVGjyrVasmgwcPlpiYmIL7v/nmG3WShkxLrBcXFyf33HOP+ttEVNjhw4fVl1RMucG/3+uuu06uvvpqp4fq119/lS+//FJN06levbrcdttt6uo54OLCe++9J0lJSer33r17y4ABA3jIK3GQccmSJbJ8+XIVTGvYsKHcd999Urdu3WIfN3PmTNmxY4d8/vnnKmi9b98+la1hhaBcgwYN5N577xVvw3sd2fy7du1SY1PXrl1VZr+zwCq+rH300Ueyfv169TvGwXHjxhWMgRs2bChYF8FV/NvBySEREek7oxGBxnNJ+V0SrNfCrD+xHPevfK6axzIccd6DjMZBgwbZBRqhRYsW8uSTT6oMx82bN6vzK3j55ZfV+q1bty5Yd8uWLbJz50656667Cpa9/fbbKokEFwAxfuFiGMZfXDj78ccf5ciRI1KnTh1VQis6Otoj+0dE3mGxaHIm0SynEjQJNIlEhnmvJzS7UdN/b4bz2R0YkJChghMy3P788081QCGImJaWVrD+xx9/LJMmTVJp/xi4ENDAYDh9+nS7o3rs2DEV2LjzzjvVc82fP18FL3/77beCdXDi98wzz6gp3D///LMkJCToLguGSE8QJLz77rvls88+k6efflo+/fRTdaHAGQR+8IUWV85xUeGNN94o+PeFf48IkOB5EBzCl9rjx49X8N6QXiQmJqqxACcqeE81bdpUBdWKgzpTjsHIdu3aqSCd9Ybf9VKiw5oxgjHsgw8+kKNHj6qTNWe2b98ue/bskXfffVfdcEKHICXccsstBfuHgH1ISIh07NixgveGiIjwnSYn1+GWJ4WXnb99+0uWymi0FHGqgeW4f8nmrCKfo6ibq+cvOG+KjY1VY4kzY8eOVT+/++67gmX4LodxyNZPP/0kL730kt2y5557Tl1EGzJkiOzdu1eSk5PVd8QOHTrI5MmT5e+//5Zvv/1WzXIravwjIt+TZ86fNn0y3iIhgQavBhqBmY2kYGD84Ycf5IILLlCZh0OHDlU326tvyGBEkOKJJ56wy67CIIWrZ4DsKWR1IMvq4osvVstGjx6tslpwwhYVFaWWIUiCK3A4kbM6deqUOolr2bIlXxWiEuDfJzLPcEEAWcX4d4tghzMTJ04s+H980URGJC4qBAQEqMw1ZBIj6xHPg2XWf6dU+SDD4ZprrpHU1FR1YoKf9erVK3J9vHc2btwojz76qHz//fdO18FJDk52kFGbnp4u3oYLZMhoxLZg+/H/tWrVcrrutm3bVLavtXka/h9jXvv27QudNKIOMjNEiIgqXm6eyMV3xTssRWmY/FkbZTX9i3R1K40/3ouWIBcqkCC7EDB2OIOsRHy3wwWxsl48xNgbERGhfkddfpy3IaHDWgcS65w7d65Mz09E+pKbp8mpBLOcTbRIeIhRQiuo7mxxGGysxJBZiJqNCCSuXr1aBQNt64LgqheynBCAwMkYpjRjmpzjSZs10AijRo1StUeWLVumgo3//vuvylREloxtAAPrIKiI7KyLLrqo4LmaN29eIftO5A8w3XXFihUF02NcqbmIK+TI6kJQEXBhAFnFa9asUc+DK+nWuntUeSFrHZnsjRo1UkHCoi5SzZ49W00rtr6fnEHWBTL+wsPDdRFsBGTZz5o1S23PVVddVWTXT5yI4UKbVc2aNZ3WNV63bp0qA0JEROQKawZkcXWDUb4K5U3KYuTIkQWBRsC0aZzzITEE52sohYVgJm5E5NtycjU5EW+W2CSLVK1ilOBA7wcagdOoKzEMOMiKQoABJ4t//fWXOukCBB8w9XnRokUqYIj1EHBE9pOt+vXr2/1uMBjUdDrrNEzrz927d6vApvVmnZaHgKaVbQ1HIioZvizOmzdP1Vp9//331YWBkoKT+Pc8fvz4gmWvvvqq9O/fX9XawzRqrFPWq+jkPxBExNR6BOEwfdgZBKhx8oI6oMiABAQoHU+MEIhDXSg9wcUw6zRqBB6xL87gJNB2fzBe2tYutmblY6xzVq+YiIjIGVzMg3/++cfp/RhPkX3fuHHjMh1AXByzhfrEKPvxzjvvqCz8Ll26yCuvvKJmyRCR78rK0eTfWLNqCBMVrp9AIzCzsRKz7UZtCyeNCDailhuCGVbI5nCsCXfmzJlCj8cy67Q760Bnne5p6/HHH1cNA4iobFfEEdwHZARjGiiaxRQ1HRQB/kOHDsljjz1WkAGJ58A0nkceeUT9XqNGDWnWrJkKnOBLKFXu9xWyFVFnEeUznMEFKjQSQ4MwK0ynnjFjRsEYgHEDAToUsy9rdoYn9xEZ95gSjSC8M/g3gX9XtoFFLHMMpuI4sZs7EZF3BAbkT1+2wrhz9tw5qVWzZqELRPDNpix5Zn7JmfbTb64i1/UIKfW2uAJ17jEGLViwQK699tpC92M52Db/w7iM5A9b1ot9rkByCW4ob4KLbGhAg2AnApBE5HvSs/JrNCamWiQ6wigBJv0EGnUVbMSggCYjyK5B7QgUpi+p+6XVgQMH1ONwUoMMCzQ7uP766wtOJqh0cCUNJ2O2054RpMBUa0x1toVp1n/88UdBfUZMn8brZ82QRBAEU9CQtegY2MSU7DZt2vDlISqD1157TXUkxNVp1DrFvzvUXLUG9/H5FxwcrH7H5yOytx566CF1H26Y0oqsLdQKWrp0qSoijkAKmsng6jeVHoJpCDxh/MKxREZgUdNzHSHoiyxV1FdCfUDUBkS92+KmV3nC1q1b1XsJ5TFQaxc1nmy7XuKCk/W9g9q7VnhPocg9GqXYBt1wPLAvehqPcSENYxP+vZw+fVrVnLQW4sdJHLL+UTYEEETEvzVrjUY0w0FA1QrroyO1bS1jIiKqWBhjbOskmo0GCQoQCQo0iMnJyffw7iHywYpM1XXaWZMYo0GkZpRRrukWop7DEzCNGQ3+Hn74YVUSZ+DAgQX3nThxQl24wzktxlArfGezNikDdJfGuZcr8D0QFwIxtRrfMxDgxPc/nEcTke9JzbDIiTiL+hkdaRQTPrh0RjfBxhYtWqiTMqSUo5ZERkaGS4/DNK9bb71VNSXByQKuzuAECFk8tvUHyXWYFofAA44rbngt0MXWMR0fkJmIwCLqgqCD9SeffKJqx9l25MSVOVyVQ41IZFMisIxAI66qoag+EZUe/k3h3xYCQ7gwg0xh6wUCLEdACPUYAXVT8YUUWY2206dRp+e+++4r6GiNAMuNN95YZLFyKt6ll16qLnjh4guOaVHdwZ3V0USXcLxeGMsQAEO3SASJV65cWaEBR+wDOlTi4hBO3tBF+oYbblD34T2EgLX1veMIJzC2QUUEIHESg/eUnuCEDscWwV3UJ8UJlzWTFydxy5cvV6UJADWF0TDHOpUc69oGkHGxDf/+MM0NYxsREelfWLBBPnk4Um6dmaK6TmPoQglF608EGnE/1vOkBx98UNUGxneAwYMHqxJW+A6A73G48IuLY7ZwsQtdppHNiJksaO6JC4OuXtTEd0dcRGvatKkqmYPzZZx3E5FvSUqzqIzGjGxRgUajDgONYNCs1Wm9DLXG8KGJACGyEjE9C9P5SoK0b2TNWU+GAJkYOCFA1l1pMnRwFQnBM0whdKxFWJLZ87zzQX3b2LKdxD377LMq4xADmzM4acJxRJYTTiARUMRrgsDG7bffrtbBMhx7nJQhFR+vIaYEXHnllYWeDwMhOpUiawdBEHTEtb1ShxoiWAfP7Wy6gz9QUzrOv8+5j76JryEVx/rvG5+HqIO5fft2FbwrCTIhkU1n24jF2nAEJxK22Q6eHMc8zd///fj7/gH30ffxNSS9c8c45ur7PCNbk2Vbs+W7LVkSn6JJdKRBhnYJkSGXBXs80GgLpTww3mNWBC6CoZGfbQNOxxkI69evV5mRvXr1UsHKLVu2qIvOVs8//7x6jp49e9o9FuvifAyBR5QEwXlgw4YNK/XnhafxGPI4ultCan6gMTtHpHqEoVSzh8wWsxw6GiedWteQGlE26eD+ntlYVJ2xkkyYMEFCQuxraVin9GKw0nvQz1sfVE899VSx9+NvIOiLm5XtVDpbmI5WUhdpTKsbMWKEujmDDMqSmlsQEelZWccxZIbrYRwjIiKqTBBQvOHyEHXzJgT87rzzTpfWRUkrx7JWV1xxhd3vRZX2wKwEzKAgIt+jaZrEpWhyMs6syj8go1HvdBNsLCvHEzTAFRtAKnpxMMXNdpob0tatgT29TYeybo+etgtveNzcsU163D934z76Pr6G3uePV9Y5jvkHfj74B39/Hf19/3xhH/1xHCMiIs+xWDTVbfpUvEXVlK0Wrv9Ao18EG50Vv50+fbqqfYU6kMWZNWuW6rrsKDY2VgIDPZ9WWhZxcXGiF5hGjZNkd2Yk6mn/PIX76Pv08houX73B7c85qP8VutpHR642DvNlx44dU9OhMBXbMXuhosYxf39veWL/rPuoh/3zNO6j7+Nr6D2VYRwjIiL3MFs0OZNgllOJFgkJMEh4qG8EGv0u2Ig6Fyh8i+YGs2fPLnH9SZMmycSJE+0yG1EfAzUsyjodzlNwdRZfDFEjUS9XRO+//36/3j934z76vsrwGmLf/H0f9Sw+Pl6NY2j2gyYm/jSOVZb3lj/vX2X4DPT3ffT3/ass+0hERP4vz6zJqXiznE20SFiIsUJrybpDgD+doCELBLUBV61aVdCVtTgowIubI3wx0euXEz1vmzv4+/4B99H3+fNraN0vf95HvUJ3STSDSUtLk02bNknNmjX9ahyrLO8tf98/4D76Pr6GRERE+pWTdz7QmGSRyFCjhAT5VqDRb4KNqLs4YMAAycrKko0bN+oum4OIiKg4mZmZqivkyZMn1ThWXHdIIiIiIiLyT9m5mpyIM0tcskWiqhglKND3Ao3gOxO+z+vXr598+OGHhU7QUJ9q3bp1Uq9ePa9uHxERUXGuueYaVWvRKjc3V6699lpVc3jt2rXStGlTHkAiIiIiokomM1uT4+fMEptiUY1gfDXQqKvMxocfflh2794t586dU7+PHTtWQkNDZeTIkXL77bcXrIcTsfbt2xf8jhM2TDdr1aqVTJgwwe457777bhkxYkQF7gUREVVW06ZNk19++UUSEhLU7/fcc49ERESoGoyorWj1008/qVpiVriAtmLFCmnevLnce++9ds95yy23qBsREZE7WCwWMRrLlm+iaZoYDAaP/g0iosoqLcsiJ+MskpRmkZgIo5hMvhto1FWw8aabblK1qhw1atTI7vfVq1fbLRs1alSR3TpL6kZNRETkLshO7NmzZ6Hljhn3S5cutavHOGTIkCLHqwsuuIAvEBERlUtOTo48/vjjMm/ePFUf+OKLL5bXXntNevXqVeJjjx07Jo899pisWbNG1RRu3LixPPjgg3LXXXe57W8QEVV2KRkWORFrkbQsTaIjjWIy+nagUVfBxo4dO7o8jdoWpptxyhkREXlb27ZtXVrviiuusPsd9RlZo5GIiDzlgQcekO+//17NBrvwwgvlueeeU1n3O3fuLDY5A5mMuCAWHBwsv/32m9SvX1+++OILGT9+vFSpUsUu876sf4OIqLJLTENGo1kyc0SiIwxi9INAIzC/nYiIiIiIyA+dPXtWZs+erUp9tG7dWgIDA2X69Okq6/7VV18t9rGHDx+WvXv3qozFJk2aqMfeeuut0rlzZ1m8eLFb/gYRUWUWl2yRf8+ZJSvXc4HGrBxNftieLY9+lC7/Wxwgd7+TJgs2ZElGtiaVIrORvGPPnj2yatUqVSsTNcT69+8vl1xyCV8OIiIiIiIfhzrBZrPZbnYY6i726dNHlacqDjIaAY+3lZeXV3Bfef9GZYbeA//++6/6/4CAADXL4corr5SWLVuKr0Cma3h4uAwbNsyl9b/55hs5ffq03H///eLvvvvuOzlw4ICMGTPGbc/51VdfqfcKSveQb9M0Tc4lW+R0vEUQ8ouO8Ewe4PFYs0yZmyqxKai5i79rlNgUs+w+mibvfp8hnzwcKRfU9kxYkMFGN7lwYpx4XhCSbO2WHJrzX5OB0kBdlTvvvFMWLFggN998s2pMcOTIEVVvDIPFRx99JCEhIW7abiIiIiIiqmhHjx5VgT/Hch34HfUYi2v6gnVGjx4tzz77rJoK3aBBA/n888/lzz//lHfeecctfyMlJUXdrBCIAgQvHYOcrrI+rqTHY7tOnT4rx46flOycHAkOCpJGDepJ3Tq1XGqEU17z58+X7OxsGTdunArgohEqmqa+/fbbMnHiRPG2ko4jXlucT27ZssXl1wq1P//44w/VRM/fIQiP1xTBxrK+lx2hZuqAAQOkW7dudvW//Z2r/6Z9hcWiydkki5xOsEiAySARYQYxW8weyWicPDdN4lPzMxi184mM1p/nkixy68xkWf5MVQkLdv0zz2QyubQeg42VFDqjfv311/Lrr79Ku3btCpbjKhM+vNARdc6cOV7dRiIiIiIiKrvMzEw1rdmxO3RoaKjqGo1gV3EJBjNnzlRZVJj5hAAcsqreeOMNuwad5fkbyO575plnCi2PjY1Vz1kecXFFJ4MkJqXIrj8OSEZmlt3yP//6W8JCQ6T9xa2kWlSkeFJubq6aao6Gp4DALs7BcJ7Wt29fCQsLEz0o6jg+/fTTKlGlWrVqaiq9KzIyMtR+u7q+L8OxsTb6K+69WBoI+KP50owZM+Spp56SysZdx9GbzBaRc8n5t5BAkbBgkfgMz/ytdX8YJS6l6JCfRRM5k6jJl2viZPClFpeft27dui6tx2BjJYSrUO+//7488sgjdoFGuOiii1SBZ1zBRH0WZDwmJyerGixYjnottmnwGCgwKAKuyOE5cXXu5MmTsnnzZjU1Gx3rME0bwU0sxxWZ4cOHV6qrMUREREREFQ2NXDCjCRlBttkoCPrgd9vp0I4SEhLk0ksvla5du6qMQ3yvX7dunVx//fXqpN8a7CjP30BgzTaLD38HNSFr1KghtWrVKtM+YzuwfdheZxk452LjZevvu1Ug1JnMzCx1/8D+vaVmjWjxFARTcWxs9xPnSN9++60kJibKP//8I8uWLVPLsR4CV9ddd50K7lktXLhQHTM08vnhhx/kxIkTqmEdXiPHfcdrhOfevXu3CgRjNpttczvrc2E5zvNOnTolN910k7Rv377Qc+H8EM+FTFfH1wl/Z+nSpervREVFyTXXXCPNmjVT9yGAiv3Ga4R9O378uJo2joArAtm2cAxw/ojZd9HR0Wq7bJsN4fXDPu/YsUM9tkePHnL55ZeXaZ8RUC9pexyV9PcRnEdndkAg/oUXXnD6PLfffnvB1PmSthcmTJigzrlxIaC4f1v+pKR/074i16zJqXiz5Bg1qV/HIKGlyCYsi21/p4vBYC7IZHQGSdw/HQiWCYPcf3GFDWIqIdRoxD/YkSNHOr0fyzGt4Mcff1S/40MSVzARKLSFtHB8QFsh2Ij18GH90ksvqcGkTp068tdff6mudKjZUrVqVVVoulevXmoKBhEREREReUbTpk3VTwSubOF3JBEUN10YgR4EX9566y2pXbu2CqigpiC6USMj0R1/IzIyUnW5tt5w7gAIKJTnVtRzIOizYfNWFSgq6vwby3E/1sP65d2W4rYRx8Z2mTUAikzQ6tWrq+OHG4J2S5YsUUGpv//+u2D99evXy//+9z+VRWedzv7QQw+poKXt8yJBpGPHjvLEE0+o1xGZowgif/nll4Weq3fv3mp9TIMPCgpyuu0bNmxQGa2oy2m7HIG7Dh06qL+DfUHAEAHSX375Rd2P7cO5IR6H7UWwbOrUqWod2+fBfcjgmzdvnnqPoKs5kmQQBLWuM3bsWLnvvvvUOSjObZEsg79bln0uaXuc3Ur6+z///LOqsQh4Xutrab2hAdObb76pygi4ur24oTYqLgRs3brVY+9NPd7c8bngzZvZYpTTCSKxyQapFh4g4aEBYjKaPHpLTteKDTSqzztNJCG1dMfWVcxsrKSZjYAMQ2esy63rlRY+PBHQtH6xeOWVV1QWI65wWSUlJakpFURERERE5Bm4wI9MMiQR3H333WoZgkConTdo0CC7dfHdHME16/RlBJoAwRRbmAZrva+0f8PbTp46I6mpaSWuh/NzrHfy9BmpXzc/AOppSPZAcApZfJhdhoAjAndWCIIhSxBBrc8++6xgOYJSSOqwNuhBjUBkwyEwhwxHQI1EBKj279+vgpiA4B0Ck8iei4iIUMvi4+PVc+E+BNCKmu68bds2adSokUoksYUajtYmpMh4BXQmxzbaZkUi+Ih9BGQDYto4gm/WDEjMjEPwGQE76/sRWbCYUTdw4EB1bHCskI149dVXFzz3oUOHCv7f1X12ZXsc4d9KSX/fFgKm2Cer7du3q6Di5MmTVUCxNNuLqdR4j6BWJgLDpH9ZOZqciDNLXIpFqoUbJSjA8zVhIaqKQU7G5X+eFQUhm+hIz2wPMxsrIWs9FccvDlbWwquOdVdchStBtlcwkdWIwOUHH3xQMNDg6lxZp0YQEREREVHJEJRA9hXqIiKggmASgjYIamAqpi1kKNp2zr3qqqvU42+77TY1IwmPQbbjxx9/rBpMluVveNs//54o3frHSrd+aWHGF4JQCKJ16tRJHT/UzbfWuEQzFWSRPvbYYwWlqfAYWwg+2XYCb926taqpaZ2llpWVJd9//72arm4NYsGtt96qEkCQ3Wd73uZYZsuZM2fOqNfdFqbNr1y5UgUcrYFGwL5gG23LdlkDe2D9e9bMWJyLIuCJ0ly2dTsx3Rjvrd9++01lCiLzEqXBMI3ZmhGK7S/tPpe0Pc6U9PeLgwzKwYMHq8AxsipLu72A6cTWZkqkb+lZmvwba5b4FIvqOF1RgUZo1TCg2ECjNbNxaBfPNAZmZmMlZJ3qgPoXzuomYrnteqXlOPDgSgwGzblz56orM/hgvvHGG9WVnMpSZ4KIiIiIyBtQ3ghZUWhAgmmtqMGHcki2tditQSHbjEU0AUCQA80oEHjEdE8EjZCphu/0Zfkb3oaaeEiKQBZhSbAe1vcklJ3CrDJMm+3fv790795dBZKsxxTHHtmJyLALDw9X2XaopWjLWQIHzvGs6yFAhyQTZNPZZtcBXm/ruZ+z87iiYCqlY81LvO4IFKLpTXFsA5HW57JNhMH24rg77hem8oO1tBcyZ1EHEUE7ZCci4Io+A8jqLM0+l7Q9RSnu7xcFAXhkZiLAiXNja4JOabYXHOujkj6lZVrkeKxFUjPyA40mU8UFGg8cz5PvtxY/k9RoEKkZZZQhl3kmJsNgYyWELwsI8qEGRpcuXQrd/8knn6gBz5oSbv3SgSkTtnCVxVW4SoobBg4UlsYXEQzy+LJCRERERESege/1+M5d0vduBLIctWnTRk3Hddff8Dac17gSaASsZxt89QQkdzgGl6x/+8UXX1Q3ZI1aHTx4UGU72kJdTaxvO7MMy5ApCQhe4twPTXccy2g9//zz0q1bt1JvNwKKyGK0Zf07qClZHthONEf5999/7ZZbS3xh+rb12CGhxZotiEQWTH+2NjNy9z47Ku7vO2sug6nXSMJBkBBNYGzfW6XdXswWdLUjMHlHUppFTsabJT0L05SNYkRkrwIDjVM/SZXM89dK8JfxqYePCHz8WX8i0PjJw5ES5qFGNQw2VkK4SoRO0xi80MzFNu1+48aNarozpj6gTob1yhjqcaC7tLUuBK4ooS5jcVdurDZt2qQK/KJzGj5UEezE1TnHhjNERERERESe0rhhfTlw6LDr6zfKPx/yBmS62WbXIaCFZiEoR2ULdRWxHJ2jAc1bMLXX2v0YQSw0AMXUZ9QFtJ2a/Ouvv6ou16WF4BeyLvG3rRmI+DvIwnz77bfV9F/rcgTGkLln7bhcEgRNR4wYIR9++KGawo+MWQRTMZ0cmbXoVo4MwQMHDqhMUEAGLTIM0bwUjWvwGHfvsy1X/r4tbP8tt9yiAvqotej4GpbmNcJzIJPS+rdJfxJS8wON2TkiMZGGYptkeSrQmHE+qTEsWGTazeFyKt4ia3dly7mkXKkbHSjX9ghVGY2eCjQCg42VFK464kNvyJAhqnsZ6lQgPfunn36SBx54oKB+hBUGk4cfflh2796tplgg8FhSirwVru6gWxfSxTFAoM4IBkvrlSAiIiIiIiJPq1e3tkREhEtaalrxTRNEJDwiXOrVyZ+6W9EQnECdxilTpqiuw8iUW7FihSpHhenstpAggmYjixYtUokdaMqJ2n/oHG6FAOANN9ygglZIHkEwC+dk1vVL64orrlC1BZF8YlvnE53LEXTDeR/+Ps43cf74xRdflOr5X331VZUliMQWdIret2+fCu4tXrxYZT2ixiGODepEosaiteYhjpk10OfufXZ8fUr6+7aQBYp6p9in1157ze4+1LhEINbV7UU9S3RtR9CV9AXv97gUTU7Fm8VsEake4f1A4/NjI+SihgHS/gKRAR0D5NDROOnUuprUiPovoO0pDDa6yaE5+bU1PMXaDQxXiNxRnwFvegQQkZaPWiy44oTOW6gdYa2HYev+++9XneZQRwIDy8yZM9WHH67qWOEDER+eqNFiC1dpUJsCWZMnTpxQXemQTWktfExERERERORpOAfq3bOrLF+5VtUcdBZwNJxvlIn1PBkoQCIH6jAW5amnnlJlrX7//XcVcMK5G8690OnZFqYVL1++XM0mw7kWms04Zr2hGzKClbt27VLPh/NJZNDZdrvGORuCYa7AedyECRNUWS7bYCMy9pC8gmw8bCemB6OJijWTz9nfQPAQ55CtWrUqWIbzUQQpURcRCTEIXKKmpbV5CmbM4dxy586d6obMQDQosu0eXdZ9drY9jlz5+5gybW02g8YxjkFG27/n6vZaS54hQOlsqjZ5N9B4NsmiMggxY7paeMX2Yi4u0OgtBs3VohWVAD6ckXmHGhfWKcR64e5go974+/4B99H36e01nD3vS7c/5/jRI3W1j+Sdcczf31ue2D8Y1P8KXexfZfkM9AR/30d/37/Kso/+zB3jmCvvgbOxcbJ+06+SmpqmfrdtGoPMRwQaa9XwbDKJOyDohBqOP//8s9ufu6TjGBcXp4JoyNpjll3ZjmFpofcBpssfOnRIBScrC71/rpstmpxNNMvJBIsEBxgkIlSfgUazxXw+s7EGMxuJiIiIiIiI3AmBxBuGD5aTp8/IP8dOqCaWyB5EjUZMna7IqY++ClmLqFGYnp7u7U2pNNCwFQ2bKlOgUe/yzPnTps8mWiQ02ChVQir2s+OADjMarby/BUREREREREQVCAHF+nXrqJuvKs3UZ09APUWqOAMGDODh1pGcvPOBxiSLRIYaJSTI+4HG53QSaAR9bAURERERERERuYzBPiLvyM7V5EScWeKSLRJVxShBgRUbaPyziEBja50EGkE/W0JERERERERERKRTmdmanESgMc0i1cONEhhQ8YHGKToPNEKpKlei+zDa29tCF2N0iLKF7lPz5893zxYSERG5CQpqL1u2zG4ZOjv+9ddfdsvQCfCjjz7icSciIiIiIiUtyyL/xpolPtUiMQw0ui/YuHXrVvn666/tli1dulT+97//2S3bt2+f6pRERESkJ3v27JF58+bZLcN4NWXKFLtlhw8flhUrVlTw1hERERERkR6lZFjk37MWSU7XJDrSKCaTdzMaQ4P0mdFopc+tIiIiIiIiIiIi8rLENItqBpOeJRIdYRCj0fuBxudv1W+gEfS7ZURERERERERERF4Sn2JRzWByzSIxkQbVyb4i/emDgcZST6P2NLPZrGpCfv7555KWllZhjyUiInIHi8WipmVjLEItyIp6LBERERERuY+maXIuySLHY81isSCj0VjxgcYTvhlohICyHPC8vDy7kyNny0pr6tSp8tlnn0mVKlXk4MGDqlh/s2bNPP5YIiKqXDw1jj3//PMye/ZsCQsLkwMHDsj27dulevXqHn8sERERERG5j8WiydlEs5xK1CTAKFK1SsXn6alA41zfDDRCqbfy448/Vjdny21NmDChVM9bo0YN2bZtm/zyyy9y/fXXV9hjiYioclm8eLEEBgYWWu647Nprry3V80ZGRsrGjRtVx+v+/ftX2GOJiIiIiMg9zBZNziSY5VSCRUKDjFIlpGKzGf0h0Ail2tLOnTvLCy+84NK67dq1K9WGPPTQQ6Va312PJSKiyqNNmzYuj2MtW7Ys1XPfd9996icChqVVnscSEREREVH55eZpcjrBLGcTLVIlxCihwToJNI71rUAjlGpr27Ztq26uSElJKes2EREReUSLFi1k8uTJLq3LcYyIiIiIqHLIydXkZLxZYpMtEhFqlJAgHQUaG/lWoBHcusXJycny1Vdfydy5c+Xiiy9W9af0DCeStieTp0+fLmg2g5ueWLdHb9vlLv6+f8B99H18Db3PZDJ59PnRYGzhwoVqHKtZs6Z88803omccx/SH45hv8/fPeX/fP1/YR0+PY0REVHpZOZrqOI3O01HhRgkK8E6gceonaX4RaIRybzWK6qN7Jk7MUAcLA3vfvn1l5MiRonezZs2SZ555ptDy2NhYp/W89CAuLk78mb/vH3AffZ8/v4bWfdPrPtatW9cjz7tp0yY1jiG4mJWVJb169ZIxY8aI3vnSOKb395a7+Pv+AffR9/E19L9xjIiIyiYjOz/QmJhqkWrhRgn0YqAxPUvzi0AjlHnLjxw5IvPmzVO3Y8eOqeL2ODn78ssvpWrVquILJk2aJBMnTrTLbERdSjScqVWrlugJgrj4YhgTE+OXV0T9ff+A++j7KsNriH3z9320On78uHz66afyySefyOHDh9U41r59e1myZIlER0eLL/ClcayyvLf8ef8qw2egv++jv+9fZdlHIiJyj7RMixyPtUhqhkWiI4xiMjHQ6JVgY0ZGRsH0sg0bNqhBfNSoUXLLLbfIrl27ZMuWLT4TaAScWOLmCF9M9PrlRM/b5g7+vn/AffR9/vwaWvfLX/cxOztbBRM//vhjWbNmjURFRalMfFw4O3XqlCxYsMBnAo2+No75+3vLyt/3D7iPvo+vIRERVXbJ6RaV0ZieJRIdaRSjseIDjQedZDQ+d4tvZzRaGUuz8vz582Xs2LFqatbSpUvVidmbb74pl156qVSUzz//XHbs2FFhf4+IiPzHsmXL1EWyzMxM+frrr1Um4HvvvSfdunWrsG3A38XFOSIiIiIiqngJqRb5N9as6iPGRBq8Fmic4iTQeHFj3w80Qqn2okGDBiqDYuPGjRIREaGmKVx99dUSFBRU7g1ZvXq1nD17VrZv365+RzATU8Auuugi6dChQ8F6qKH18MMP2y1z9bFERFS51alTR6pXr66CfchqxDg2dOhQCQkJKfdzI+MfU7P37dunfl+xYoX8+eef0qxZM+nSpUvBerfffrtcd911dstcfSwREREREZW950hciian4s2SZxaJjjCIwcBAo9eDjQMGDJAzZ87IokWL1FTqESNGSLVq1eSGG26QgIDyRV+3bdsmBw4cUP9/8803y86dOwumedgGDHFfx44dy/RYIiKq3Lp3766y8nFRCuPYTTfdJOHh4Sr4V97p0xh7fvvtt4Kx6ODBg+rWu3dvu4AhxkzUVSzLY4mIiMp6go2xJjExUS6++GKX6vqi9mVRmfi4cOc4KwCzBvbv3y8pKSnqHMyXymsRUeX4HDybZJHT8RZBfLF6RKkm+rrNQT/PaLQq9d6EhobK6NGj1Q2NYVBYH7Wujh49Kk2aNJE33nhDnbTVq1evVM/7xBNPuDyNuqyPJSIiCg4OVnUacTt58mRBk5hDhw6psevVV19V41jjxo1LdbAefPBBl9b74IMPyvxYIiKi0kLm/KBBg1QQEOdrCCA++eSTJZ5DYYx8//337Zbl5ubKqlWrZPjw4bJ48eKC5d9++63ccccdKoiJi3h79+5V54UTJkzgC0ZEXme2aHI20SynEjQJChCJCNVHoDHETwONUK4j3KhRI5k2bZr8/fffsm7dOunRo4dMnTpVTbd++umn3beVREREHoDg4pQpU1QW4c8//yxXXXWVzJgxQ52MPfDAAzzmRETk85AkgixDjHXr169X9YsRbFy5cmWxj2vXrp18//33dre77rqr4Dmt/vrrLzVT4O6771ZBxl9//VU+++wzue222wqy9omIvCXPnD9t+mScRUICDboKND5fgYFGs1mT/L9cMdxylDHHHVO9kB2CadYffvih1KxZ0x1PTUREVGFTrOfMmaPGMWTs169fn0eeiIh8GqY1o97+448/rjL7oV+/ftK1a1fVIK20MBOgRo0aMmTIkIJly5cvl+zsbHn00UcLliHzEXWH3333XTftCRFR6eXkaXIy3iynEywSHmqUKiEVX58RDp30cqDRoklCmiZVQ6XCjoHb9wyNYyZOnOjupyUiIqoQYWFhcsstt/BoExGRz7PWXLzsssvslqMe8BdffFGq54qNjZUffvhB7r33XgkMDCxYjjqQ+B3ltmyhsejmzZvLtf1ERGWVnavJiTizxCVbpGoVowQHei/QOHmu9wKNqFWZkKpJZJhBQkKlwo5DqfYOjVi+/vprl9bFgHb99deXdbuIiIjcDtO7kLXoirZt2zLoSEREPg1N0YxGo8pGtFW7dm05d+6cmM1m1VTTFfPnz1c1G8ePH19ounVOTo4KLKKsFuC50cCzpOdGHUncrE6fPq1+YrtwKwvr48r6eOJxdBe+F713HDNzNDkZZ1ZBtqhwgwSYLGK2SIU7dNIsT8xLl/QsKQg0PjsmTFo1NIjZYq6QQGN8qiZVgg1SJ0okK738n42ujhmlCjbu2bNHZs6cqQYrDFol7RSDjUREpCeoV4VxLCYmpsSBElPEmOFIRES+LC8vz+l4Z11W1P1FTaHu1KmT6mZt65prrpFevXrJDTfcoOr3o0HM66+/rjpWx8fHF/ucs2bNkmeeecZpFqVt9mRZoJs2lR+PI4+hr70XM7JFziSKpGSKVA0TSckTrzhy1iAvfRsgGTn5mYTBgZo8MjRPaldJkvgK+nhKShfVEKdaYH6g0R3/puvWrev+YCOetEqVKqreB4oC4ySsVatWZd1GIiKiCoUumZjWFRAQoIrZYxxDRgYREZE/ioqKUtmIWVlZEhISUrAc2YT43VrH0ZWkk127djmt84gklNWrV8tHH32kmsPg76GJ6I8//qhuxZk0aZJdCS5kNnbu3Fklt2DMLgtk7eBk2pULi8Tj6El8L1b8cUzN1CQhziymEE2a1jSIyeitqdNmeWVpumTk/JfROGN0lQrtOp2cbpGaYSINapikWrixwt+PpdrTq6++WhXOX7RokWoG8/LLL0uHDh1k7NixMmrUKLXRREREetWzZ081ji1ZskSNYx07dpTWrVurcQzBR0wrIyIi8hcY4+DPP/+U9u3bFyzH79b7XM1qRE3GG2+80en9uIh3xx13qJvV9OnTVfO14uACIG6OcCJc3pNhdzwH8Ti6A9+LFXMcE9MscireIpk5RqkZZRCj1wKNefLkvAxJs5k6/dwt4dKmcfmytUsjJcMiJqNJ6seYJKaq0Svvx1J3o0ZaPE7K1q5dK//884/qNPb222+rrEek0G/atMkzW0pEROQG1pOlFStWyPHjx2XMmDEyd+5c1X0aF9WQnUFEROQPLr/8comOjpYvv/yyYFlSUpKsXLlSRowYYbcuzu927txZ6Dkw1RrNZLB+1apVnf4dPKctPD/qJN93331u2xcioqLEp1jkeKxZMnNEoiO8G2icMjdN0myawVR0oBGNaPIsInWijYUCjRWpXDmcDRo0UHU5Hn/8cXn++edlxowZKrsRmSNERER6V6dOHXnkkUfk4Ycfltdee00mT56sulH379/f25tGRERUbpgm/cYbb8i4cePU+NayZUt588031QW2+++/325dJJSgwcuCBQvsluPiHBq+TJgwoci/g1r9Xbt2Vc3VMOUaNRtfeuklNSWaiMhT0CskNlmTU/Fm0TQEGr0XXNNDoDEzW5PMHIvUjzZKTS8GGssdbNy3b5+ahvb5559LamqqGqDuuece920dERGRB/31119qHPvss89UMXoUt+c4RkRE/uTmm2+Whg0bqvEO2YYDBw5UgUbMWLPVr18/ueiiiwo9/siRI2pGAJrAFOXbb79Vs92++uordSFvzZo1DDQSkUdZLJqcTTTLqURNAowiVat4L7j2lw4CjVk5mqRnWaRutFFqVTOJweCd7M4yBxtxMoY0fAxWSLPv27evqt2ItHpMTSMiItKzxMREdTKEcWzr1q1qihkK2SMrw/HEi4iIyB9g5llJs89Ql9GZBx54oMTnx/iJ2QFERBXBbNHkTIJZTiVYJCTQIOGh3g00TnYMNI6p2EBjTq4mqZkWqV3NKLWrm7w2jbzMwUYU1B85cqQ0b95cdfBcunSp1KtXz3NbR0RE5Ebr1q1TdRlRBgTjGC6eNWrUiMeYiIiIiMgH5OZpcjrBLGcTLRIWYpSwYIP+Ao1NAiv0eCSh83SUUepUN3mtA7ejUoV/0SY7NzdX/v77b5UF0rRpUwkJCXF6u+uuuzy31URERGWQkJAg2dnZqjEMag23aNGiyHEM3amJiIiIiEgfcvI0ORFnljOJFpXNWNkDjWazJglpFtUIpl6MSQID9BFoLHVmIwr8vvDCCy6t265du7JuExERkUe0adPG5XEMRfSJiIiIiMj7UJPwdJJZ4pMtElXFKEGBlTzQaNEkPtWimuLUjzFJkI4CjaUONqK7GG5ERES+CJmMrClFREREROQ7MnNEkmPNkpJhkGrhRq9m8Okh0GixaJKQqklUeH5GY7AXA68e6UZNRERERERERETkCamZmpyMFwkM06RGpElMJi8GGk/lyeRP/gs0BgdWfKBR05DRqEl4iEHqxXh3KnlxvNeyh4iIiIiIiIiIyImEVIscO2eW9GyR6AiD9wONyGjM/C/Q+PwtFRtohIQ0TaqEiNSvYZTwEP2G9JjZSEREREREREREuoDsvXPJFjkdb5FcsybVqogYvdhlWS+BxqQ0iwQFiNSNNklkmH4DjaDvrSMiIiIiIiIiokohz6zJqXiz/BtrFoNBVI1G/KzsgcaUDIs6DvWiTeqY6B0zG4mIiIiIiIiIyKtycjU5lWCWc0kWqRKSX4/QbDFLZQ80pmVaxGwR1XU6OlL/gUZgsJGIiIiIiIiIiLwmMxuNYMwSn2KRqCpGCfJyh2VngcbnvBBozMjWJCtPkwYxJqlRVZ/NYModbFy8eLE8/fTTLq177bXXyjPPPFPW7SIiInK71atXy0MPPeTSuldeeaXMmjWLrwIRERERkQelZljkRJxFTRWuHmGUAC82giku0Ni2ggONWTmaZGRZpG60UWpWxXRyPw02NmjQQAYPHuzSuu3atSvrNhEREXlEnTp1XB7H2rRpw1eBiIiIiMjDHadRozEzR9QUYZMXG8HoKdCYk6tJSqZF6lQzSu3qJq82yPF4sLFTp07q5gkHDhyQuXPnyueffy7nzp2TgwcPStOmTV16bHp6ukyZMkW++eYbycjIkK5du8prr70mrVq18si2EhGRb7r44ovlxRdf9MhzHz58WD755BP59NNP5dSpU7J161bp2LGjS4/Nzs6Wp556SubPny/Jycly6aWXqqzKSy65xCPbSkRERESkl47TqEcYHWHweuaeXgKNuXmaJGVYpHY1o+o87e0AbFmUu7JkTk6OLF++XN544w357rvv1EnSiRMnSv08N998s8TExMjUqVPFbDarN56rbr31Vvnxxx9lzZo18vfff0vNmjWld+/ekpCQUOrtICKiyiUvL09Wrlwpb731lrpolZaWJseOHSv184wbN05CQkJUCZHSjmP33nuvLFiwQI2j//77r7pY1qdPHzl58mSpt4OIiIiISM/MlvyO08dj8zssY+q0twONh50EGp8dU/GBxjyzJgnpFomJNEqd6iavTyn3SrARwb3mzZvLsGHDZNq0aeokCdkZvXr1kszMzFI9144dO+Sxxx6T2rVrl+px+/btk4ULF8rMmTOldevWKmD53nvvqQzH999/v5R7RERElcnmzZvloosukkGDBqmaxF999ZVYLBYV6EtKSirVc23atEmefPJJVXKkNI4fPy4fffSR/O9//5MOHTpItWrV1AW84OBg9ZOIiIiIyF/k5GlyIs4sJ+MtEhpkkMgw73dXRqDxcSeBxnYXBFZ4EDYh1SIxEUbVeToowDcDjVDmVxVZg2gCg6xCZDO++uqrajmyCi+//HKVoVFRxf6NRqP07du3YFmVKlWke/fu6j4iIiJncFFq+PDhMmTIEDWmzZ49Wy2PjIxUF9FQ2qMirF27VmVBoiGNVWBgoMrQ5zhGRERERP7Ucfrfc2Y5k2BRQcawYO8H0/QSaLRYNNWJu1qEUepFmyTYy924K7Rmo61169apDAxnHadREwuZiphS5mmYNl2rVi0JDQ21W964cWP54Ycfin1sSkqKulmdPn1a/cT0N9z0xLo9etsud/H3/QPuo+/ja+h9JpPJrVmNdevWVZnxzsax9evXS0XAOIYxDBfrbHEc800cx3ybv3/O+/v+VbZxjIjI1zpOI5sxOV0fHaf1FGjUNE0S0jQVgEWgMVQHQVivBRsxXbpq1apF1nEMCCjzU5c6MwU1shzhxA2NY4qD4vvOgqWxsbEqq0SP4uLixJ/5+/4B99H3+fNraN03ve4jgoPuwnGsYun9veUu/r5/wH30fXwN/WMcIyLyFZgafDrBLOlZ+ug4XVyNRq8EGlM1CQsWqR9jlCoh3j827lDmiGDbtm3ljjvukP3796t6V7ZWrFih7qsIYWFhkpWVVWg5akbivuJMmjRJJk6caJfZ2LlzZ6lRo4bKltQTXJ3FF0PUpPTHK6L+vn/AffR9leE1xL75+z5atWnTRrZs2SLbt2+XTp06FRrHBgwYUCHbUVnGscry3vLn/asMn4H+vo/+vn+VZR+JiHwFAmmxyfnNYNBxOibS+x2nbQONqV4ONEJSuibBQaIyGiN0UL/S68FGnKShgD5O0FC3MTU1VRW5v+mmm+TMmTOqnmNFaNKkiZw7d06dqNlmOKKbJ+4rDupy4eYIX0z0+uVEz9vmDv6+f8B99H3+/Bpa98uf99GqYcOGMnLkSOnZs6fccsstahnGsQkTJsjOnTvls88+q5DtwFiFwCKy6hEk9NdxrLK8t/x9/4D76Pv4GhIRUUU0OzmTYJbTiZoEmvI7TuuBngKNyekWMRnzA41R4fo4Pu5SrrnOX375peog/emnn0paWpr64nLVVVepYvfoolkR0BgGVzBRW2vgwIFqGU7afvnlF5XxQUREVBQ0hUGtxDlz5qhmZ2g4FhERoeoSOwvieQIu3OEK75o1a+TGG29Uy/Ly8tS4NmrUKL54RERERORzHacxbfpcokXCQvTRCEZvgcbUTItomki9GJNuArHuVK49Qtfnd955R5KSkuTs2bMqu/H777+X+vXri6egFuTjjz9e8Hu7du1k6NCh8sgjj6gi+wh63nfffarm4l133eWx7SAiIt+HC2Ovvvqq6kZtHccQ9GvWrJnH/iam9tmWGkEjmDFjxsgTTzwhBw4cUBfMHn30UVV3+MEHH/TYdhARERERebLjNKYF6yXQ+Pdp/QQa07M0yckTqRNtVFPL/ZFbwqfIaERmiGNH6NJmKCKQeMMNN6jfW7ZsWSiwWFSn6M8//1y6desmHTt2lOjoaPnrr79UdqXtdDQiIqKiIKMR41hJNRKLg/IhGLestR67dOmifnesYYysRcdx7P3335dBgwZJ9+7dVfM11JJctWqVmupNREREROQL0jIt8m+sWTWEqRZulOBA/QQaH/9YH4HGzGxNMrMtUre6QWpFGXVRw9Lr06hRTwrZg67ASdsFF1zg8nPjpArFQ52dANrKzc0ttAxT3jAVDjciIqKiIIPx0KFDLh0gXLxq3ry5ywfzm2++EYvFUmi545gVHx9f6EsFLta99dZb6kZERORuqAO8cOFCSUxMlPbt28vw4cMLjU+OkMDxwQcfOL0PNYXvueceu2W7d+9WZUgw6w0zBHARrjwX8YjIdztOY1qwHjpOFxVonOGlQGN2riZpWRapU90otauZ/DbQWOpg49KlS+W2225zaV0U2EcNLFe5WkwdWSJERERlgZOg66+/3qV1cZKEEzNX4aStpBM38PfmIUREpC8//fSTDB48WIYMGaJmj6H8FJI0li1bpkpPFVdqpHbt2nbLEEh8/vnnZeLEiXbLX3zxRZk2bZqMHj1aGjRoIDNnzpSpU6fKr7/+6tESW0Skn47TCDTmmfXTcbq4QGN7LwQac/I01RCmdnWj1KluEqNOgrGeUqrIHQrV9+vXr+B3BB6RxYEBC1e3kPk4b948+fHHH2X69Ome2F4iIqIyu/rqq+Xo0aMFvz/88MNy5swZmTx5ssrCQMbHggULVAO0l156iUeaiIh8Gsp2jB8/Xl1omzt3rlp26623SosWLeSjjz6SO++8s8jHopQHzvMcy37AuHHjCpahwRrqDuP876mnnlLLUHu4adOmKjD53nvveWjviEgPHafPJprlVIK+Ok7rLdCYZ9YkMc2ipk3XrW6SAJN/BxpLHWwMDw9XN9i+fbscP35c9uzZI0FBQWoZrpT17NlTddP89ttvVaMWIiIivcB0LjRkAUyn3rZtmxw8eNBumhdqAKNkx/z58wtOmoiIiHwRagDjIhtq3Fs1atRI+vfvL1988UWxwUZnPvnkE3XOh7HSdoo2ElBQP9+2kehFF11kd4GPiPy343RosFGqhOgngKanQKPZrKkp5jGRRqkXbZLAAP0cJ08qc9gZHTPRCdoaaLTVuXNn+fPPP8u7bURERB6DcQonQs7qSXEcIyIif7Br1y71s02bNnbL8TtqLJZ23Ny6davKlLSFmQFozLlhwwa7Gsl4fjQ+IyI/7Tgd+1/HaQYai878TECznAij1I8xSZBOGuZUhDIXQMSAsnnzZpU2j86ZtvP1V65cKV27dnXXNhIREbkdxrHff/9dlQDB/9tasWKF1K1bl0ediIh8GpqSoeY9Gmraql69uqSmpkpOTo7T5BFnUC4Lz3XLLbcUanKG+o/Ikty3b5+q2bhmzRoZM2aMPP7448U+Z0pKirpZnT59umD6N25lYX1cWR9PPI7u4q/vxbRMTU7GmyU5XZOocIMEmCxiLtwj0W0s54+f9Wdxjpwxy5S5GXYZjdNuDpM2jY1itlTs66BpmsSnaBIRZpA61UQCcZzMvv9+dLnfSln/QN++fSUyMlIuu+wyueuuu9S0NJywYdoZTt6K6lxGRESkBxi/UE8KP+++++6Cmo3oKo1i+igXQkRE5OtwwlvUMlcamwGmSWMqNmof16pVq9D9a9eulbNnz6pMRlzAwwW7jRs3ypEjR9S066LMmjVLnnnmmULLcV5ZXPMaV8TFxZXr8cTj6C7+9F5MzhA5myiSmSsSFSaSklRxfxvf04tzLNYgL34bIGlZ+dmDQQGaPDQ4TxpEJkl8Bb8EmiaSmC4SGiQSHSySmiSSKv7xfnQ1IaPMwUZcAVu/fr3qMoaaVrgyho5lvXv3VhmP1ppYREREeoQTLGTiP/300/Lcc8+pTH2MbThR+vnnn6V169be3kQiIqJyqVmzpspiQRfpqKgou4xH/I5MRVcgU/HEiRPy9ttvOw00okHM6tWrC5qJojN1nz59VHZjcRfvJk2aZNfZGpmNKGWCgKWzoKYrsL84mY6JiXE5A4d4HD3Bn96LquN0iiaZGWYJixSpF15xHaeR0YhAY7Vq1cRYxHFERuNLSzIkLcs2o7GKtL+gzCGvcklItUjdCIM0iDFK1SrGSvl+DCjv4DVnzhx1Q10ODFiuXh0jIiLyNnxpeeutt9QNX2KQse/rXwaJiIisrE1bdu7cqZJCrHbs2GHX0MWVxjAI/g0aNKjQfXv37lU/HctooYnMzJkzi31ejLu4OcJYXN7x2B3PQTyO7uDr70XUHTyXZJbTiSIBRpNUC/dOzAeBRpPR5LQZzNRP7KdOzxgdLu2bVnwzGEhKt0hwoEka1DDpqjt3Rb8fy73nmZmZKsNx6dKl8uOPP/pVijAREfk/1KtCUfslS5aoWo2YBkZEROQPLr30UtUMzTYjcf/+/er8bezYsXbrIssfHaodoaYixkhkKTrLhLQ2n8G5oFVeXp7KdHRsTENEvtdx+kScWU7GWSQ4wCCRYfoKniHQOHlumqRk6CPQmJJhEeR71ovWZ6CxIpUrsxF1OFAg+NixYwXLcGUKV7Bs0+GJiIj0CFO7Ro8eLYcOHSpYhu7UOOF66KGHvLptRERE5YVpjp999pkMGDBATWtu0aKFLFy4UEaNGqXGP1vvv/++9OjRQ26++Wa75V999ZVKMHHsQm1byx81/G+88UYZMmSImv2G2seYMYDGMUTkm7Jy8hvBxCVbVJAxJMig+0DjM14MNKZnaZJnEakfY5SYqpU70FiuYCNqNI4YMULV5fjuu+/kggsuUIV8586dK3fccYdccsklpUrNJyIiquiMRoxjGK/Q3OzCCy9UJUG+/PJLefTRR6V9+/Z2U86IiIh8UYcOHdRFtR9++EEFABFMRFDREerw16tXr9Dy2rVrq+afrVq1KvJvvPvuu3LfffepRqHIhBw4cKA6T0SnaiLyPWmZFjkZb5GkNIuaNh0Y4BuBxku8FGjMyNYkM8ci9aONUpOBxvIFGzHlDF1ocIJmrdMYHh4uM2bMkJMnT6pUewYbiYhIr7Zt26amgy1atKig42VERIRMnjxZXTxbvHgxg41EROQ3NYodMxYdIWHEGWQrugLByOICkkTkGxLTLHIq3izpWSLRkUYxGRloLCkDNCPLInWjjVKrmqnCGuf4bbAR2R8tW7Z02hAGHTwPHz5c3m0jIiLyGIxjzZs3Lwg0Oo5j6LxJ5Ktmz/vS7c85fvRItz8nERER6afjdFyKpgKNuWaRmMiK6zhdVBBv3e4cWbMrWxJSAqR6ZLq0axIgy7ZmS2qm6CKjMSdXk9RMi9SuZpTa1U1i1Flg1ieDjU2bNpVNmzYVtM62baeNrMZhw4a5axuJiIjcDuMYshuRjW87bQxftJDViOnVRERERET+Dh2nzyai47QmJoNItJebmxyPNcuUuakSm6IJ4p2aZpQziWbZd8xcsE5QgHcDjbl5muo8XTPKKHWj0SmbgUa3BBu7desmDRs2lE6dOsntt98uTZo0UdPOUID4yJEjqvAwERGRXiF7EWNY586d5c4771RZjsh2XLBggezatcuucycRERERkb92nD6TYJaziRYJDTZKlRDvBs2Q0YhAY1xqfj1GLf+HnP9R4MlRVbwWaDSbNUlIt0iNqkapF2OSAERoyT3BRqTTrlixQqZMmSIvvviiKgQcEhKi6lsh4IguZERERHqGeo0oiD9r1ixJSkqSoKAgVTT/559/lsaNG3t784iIiIiIKlXHaUydRkZjSeLPByO9kQUan2qRmAij1I8xSZDOmufoRblyY6tXr646kyUnJ0t8fLykp6erLmctWrRw3xYSERF5SGRkpLzxxhuqOyeyGjMyMmTt2rXStm1bHnMiIiIi8ltpWRY5di4/0IiO03oINMLaXdlq6nRxcP+63dlS0SwWTRJSNYkKz89oDA7UxzHzq8xGZ4FHIiIiX+7USURERETk7/TccTopXSuYOl0U3J+YVrGZjajrnpCmSXiIQerFGCU0WD/HzC+DjZs3b5aDBw9KdrZ9VLlVq1ZyxRVXlPfpiYiIPGr79u2yf/9+ycw839bOpoFM//79efSJiIiIyC/oreO0o7gUi6RmWEpcD5tcLbxitxuBxrBgkfo1jBIe4t0GOn4dbMSbFB2nly1bpmpcBQbaF+a89dZbGWwkIiJdGzNmjHz++edqDMNYZmv48OEMNhIRERGRX9Bbx2lbeWZNlm7Jls/WZkpmTsnrI7OxT7tgqShJaRbV/Rpdp1HbkjwYbPzpp59UVuPvv/8ul1xyia6i4URERCXZuXOnLF26VDWD6datG8cxIiIiIvJLuXmanNZRx2lbe47mytvLMuTYuZIzGgGhp5gIg/RpZ58o4CkpGRb1N+tFm1RtS/JwsPHkyZMq46NDhw5lfQoiIiKvwTjWvXt3dSMiIiIi8kd67DgNCakWmbMyU9butk9lrBVllOt6BstXG7LUlG8E+pDJaP2JQOML4yIqZD/SMi1itojqOo3allQBwcaWLVvKm2++WdaHExEReVWLFi3k6NGjqiwIs/OJiIiIyB87Tp+Kt0hian7H6cAA7wcazWZNvtuaLZ+uzZQMm9YfgSaR63qEyKgrQlQg8cpLgmXd7hzVnTo+JVeiIwOlb/tgldFYEYHGjGxNsvI0aRBjkhpVvX/cKk2w8dJLL5U6derIww8/LBMnTizUxTMsLEwiIyNLXaR/8eLFkpGRIV27dpWRI0eK0eha9BhT4bZs2SI5OTnSr18/GThwYKn+NhERVS7NmzeXzp07y5133in333+/REdH290fEhIiUVFRpXrOPXv2yNdffy3JyclqnLz55pslIMC1oXbFihVqSnd6err06tVLrrnmmlL9bSIiIiIi2zqDJ3XWcXrfsTx5a1mGHD1jtlveoWmA3DMkTGUQWiGgeHWnYBnQMUDi4+IkOiZKTMb/7vd0NmhGlkXqRhulZlUjExPKoFx5oE2aNJFZs2bJRRddpAKPtrdJkyaV6rk+/vhj6dmzp+Tl5UmDBg3ksccek2uvvVZlnBTHYrHI0KFD1clieHi4OjEcO3as3H333eXZNSIiqgQuuOAC+fDDD+Xiiy8uNI7hQlppLFy4UDp16iQpKSnqeZ977jm56qqr1LhWktGjR6sbGtXUrFlT7r33XhWoJCIiIiIqDcRQYpMtcuycWTKz8ztOezvQiMDnq4vSZdLsVLtAI7btyRuryP9uDbcLNHpTTq4mqZkWqVXNKLWrm8SogyBtpcpsRBbiW2+9JU899ZR06dKlUBfPevXqufxciYmJ8sADD8jTTz8tU6dOVctwgta2bVuV6YigY1E+++wz+f7772X37t3Spk0btQxZjTjhu+GGGyq8I/bseV965HnHjx7pkeclIqqsDh06JM8884w88sgjKpMwONi+o12tWrVcfq7MzEy566671Fj28ssvq2UjRoxQ2ZPz5s2TCRMmFJuZ/8UXX8imTZukR48eahnGvdatW6txDBfUiIiIiIhc6Th97nzHacTIvF1nENuzfFu2fLImS9Kz/kskMxlFru0eLDf1CpXQYP0E83LyNEnKsEjtakbVedrbQdpKGWw8ePCgDBo0SGbMmFHujVi+fLmkpaXJrbfeWrAMWSYdO3aUBQsWFBtsREdsZEJaA42AqWs1atSQL7/8ssKDjURE5DvBRmTUv/LKK+V+rrVr10pcXJzdONaoUSM1BmEcKy7YiHEsIiKiINBorSeJ7Mj58+cz2EhEREREPtdx+sDxPHn7uww5fNp+ynT7CwLknsFh0rCmPjIZrfLMmiSmW6RGpFHqVDdJgImBRq8EG+vXr1/iFGdX7d27V01/rlu3rt1yZHWgDmNxkFGZlZVVaHl2drbKdiQiIqqIccxkMqkgoeM4hmBjSeNYbm6uKgtiW6cYYxvHMSIiIiLypY7TyekW+XhVpqz83b7LdHSEQW6/OkyuuDhQdzUQkYGJ7tgxkUbVECZIB410Km2wEUX19+3bJ+vXr5fevXuXayMSEhKcFuHHMtxXnP79+8vbb78t3377rQwfPlwtQ0YjambFx8cX+1isg5vV6dOn1U+z2axuemLdHr1tl7v4+/4B99H38TX0PgT03AWBQGQjfvfdd+XOHsRYhexEx+1zdRxDfUdMtx43blxBs5jjx4+rLP3icBzTH45jvs3fP+f9ff8q2zhGRGTbcTrhfMdpbwXKELBb+VuOfLw6U9Iy/7ugj2vpw7sGy+g+oRKmoynTVhYEGlMsUi3CKPWiTRIUqL9trFTBxjVr1qhMjL59+6qaVI7dqIcNGyZTpkxx6bmQyeEsuwRZHiUNyDhBRDOaUaNGyZVXXqkec+DAAVWzER09i4PmNqjX5Sg2NlYV6dcTnBDb/vRX/r5/wH30ff78Gur9s8YxA7480PkZ2YMYr5o1a1aoG3WfPn3kf//7n8fHscsvv1ymT5+uGp2hkzXGn127dqlp1UeOHCn2sRzH9Eev/3Yqw+eDO/n7Pvr7/lWWcYyIyLbjdEyEUUxemvp78ESevL0sQw6dtL/Q06ZxgNw7JEwa19LnhRZ8f09I0yQiLD/QqKf6kZU22IhsC5ygFQW1qlyFIvwI8Dn7kuBKgf6ZM2eq7tM4OcMJX79+/WTIkCGqo2dxEKS07TaKzEZkbGLfStMYoCLExMSo44Gf/nhFFFef/Xn/gPvo+yrDa2j9rOn1tH3TL3c48IH9RSlvw0Uy1B4uStOmTV1+LowZyDJECQ/bRjOujmPTpk1T9R537NihApTWLMeSpnlzHNOfyvD54M/76O+f8/6+f5VlH4mI8B0xPiV/6nRuXn5XZ29MTU7JsMjc1Zmy4rccsf3aWi3cILdfFSq92wXpbsq0XaAxVZOwYJH6Md6vcelvyhxs7Nq1q7q5A7IQMzIyVEZiq1atCpb/9ttvKuPDFTgptJ4YJiUlydatW+XVV18t9jGRkZHq5ghfTPT25cS6PXrcNne6+O7/prW7y6E5MaIn/v4aVoZ99Of98+R+6e2YtW/fXpXhcNc4hi8sCBbajo0Yx9C0zBW4SGe9UIfu1hs2bFCdsovDcUx/KsPngz/vo5W/76O/719l2Uciqpww7ffs+Y7TBi91nMY2rNqRIx+typSUDJsp0waRoV2C5Za+oboP3iWlaxIcJCqjEZmN5F5uOaLoJl2ebp6Y/oyO0rbBwWXLlslff/0l48ePt1sXmYjffPON3bJVq1bZXc188MEH1RQF266gRERERUFgD9mFZdW9e3dp2bKlyrS32rhxo2zfvr1QJ+r7779fZS7a+vHHHwv+H0HLxx9/XEJDQ1XWPhERERGRteP0iTiznIizqNqMUVUqPkj216k8eejDVHltSYZdoLF1Q5O8fXeE3DUoTPeBRjSxMRnzA41R4Qw06iqz0RamHx88eLDMj8eUMzR1wbTsQ4cOqSlnP/zwgzz//PPSrVs3u3U/+ugjVXD/+uuvL1j24YcfylNPPaVqR27btk0938qVK6VKlSrl2i8iIqocUMoDTc/KCiU85s+fL1dffbV06dJFZSjiQtxjjz0mAwcOtFv3008/Vdn8Y8eOLViGWo2oc3zRRRfJzp07VU1kjGOO9ZCJiIiIqHLKzs0PNHqr43RqpkXmrcmS5duyxWIzZbpqFYPcNiBU+rYPEiNSG3UO+4Ep3/ViTFI9goFGXQcb3QFZIX///besW7dOTR976aWXnNbLmj17trRt29Zu2cKFC9XJ2f79++Wuu+5SU9hw4kdERFRRLrnkEjl8+LCsXbtW1W9EAzJkOzp66623pEmTJoUupP3xxx+ye/dulcGP5jABAboZoomIiIioknacxpTpNbtyZM6PmZKcbj9lelDnYBnbL0QiQn0j/pKepUlOnkiDGkZV55I8R1dnMlWrVpXhw4cXu45tQxfHkzzciIiIvAUZ9UOHDi12nTFjxjhdfvHFF6sbERGRu3311VeqhEdiYqKqWfzkk09KvXr1in0MauDfcccdTu/r2LGjulBWmvWIqOwdpxFoTMvSKrzj9N+n8+SdZRmy71/7LtOtGpjkniFh0ryurkJKxcrM1iQzxyL1oo1Ss6pRt41r/IVb3hnXXHON9O/f3x1PRUREVOH69u0rHTp04JEnIiK/8/rrr8sTTzwhb775psq4f/nll1XJD8wMQ9fuorRu3Vo++eQTu2VHjhyRa6+91u7CmqvrEVHZOk6fSjBLTq5IdIShwqYpIwPw07WZ8t0W+ynTkWEGmXBlqFzZwTemTNtOQUd2aJ3qRqldzcRAoy8EG3NyctTVLEwdw7SwK664QlJTU6V+/fru2UIiIiIPysvLU+MYmpLVrl1b1ViMj48v6AxNRETkq9LT01Vt+6lTpxY0LFuwYIEa41577TVVI78o4eHhKgvS1uLFi9VJ+rhx40q9HhHpv+M0ApzrdufI7JWZkpj2X5QR23B1pyC5tV+oqhfpS3LyNNUQpnZ1o9SNNvlUkLTSBhvXrFmjBq2TJ0+qQea6665TV8l69eole/fuVZ00iYiI9Grz5s1y6623qprBkZGRKsNxwIAB0qdPH/n9999VQzIiIiJf9dNPP0laWppdqSqco2Gs++6774oNNjoLQnz22WfSu3fvQrWHy7IeERXdcfp0glnOJlpUE5jwCqqH+M9Zs7y9LEP2/pNnt/zCeia5d0iYtKjvO1OmrfLMmiSmWaRWlFHqVjeJiYHGClPmd0tCQoJKjX/wwQdVt010k96yZYvUrFlTLr/8cnXFjFeyiIhIr9ARGidfo0ePlqefflpWr16txi4EHYcNGyZz586Vhx56yNubSUREVGZ//vmn+tmsWTO75fj966+/LnXg8p9//pHnnnvOLesBGqrhZnX69Gn102w2q1tZWB9X1scTj6O7lOW9iOm+p+LNEpuiSUSoQUKCRMwWz76XM7I1+WJ9tizdkiMWy3/Lw0NFbu0XIgM6Bqognae3oyiW88fP+tNVZrMmCamaVI8wSO0oNLSxSGX+WDC76bPRZDJ5NtiIrtGob4Vum45Q4H7Hjh0MNhIRka6zGuvWrSszZ850Oo6tX7/eK9tFRETkLihvFRgYKEFBQXbLIyIiVDmsrKwsCQkJcem5UJcRDT1HjBjhlvVg1qxZTs8nY2Nj1XaXR1xcXLkeTzyO7uLqezEjW+RMokhypkjVUJH0XJF0D74RNU1ky19G+XKTSRLT7acWX3GRWW7obpaI0BxJShBdQIMrVyFompguEhkqElRFJFEn+6AH5f1sxPmTR4ON2dnZahBxBgNXQIDvpdgSEVHlwXGMiIj8HYKMqE2Mqc22nVdxvma939Xaj4sWLZIxY8YUWyrL1fWsJk2aJBMnTrTLbOzcubPUqFFDatWqJWWBrB2cTKP5jasZOMTj6AmleS+ipmB8tkWMIZo0q2HweMfpf2PN8t73WbL7qH2WW9M6RrlncIi0bKCfeA4yGhForFatmhhd+DdtbazTqJpBGtYwSVgwazR647OxzO+gtm3byh133CH79++Xiy66yO6+FStWqPuIiIj0qk2bNqr8x/bt26VTp06FxjHUsyIiIvJlaNqJE+8zZ85InTp1CpafOnVKZacYja7Vgvvmm29UIHH8+PFuWc8KpUtwc4QT4fKeDLvjOYjH0R2Key/+13EaU6iNUivKsx2nMzFl+qdMWfxLtphtpkxXCTGoKdODOgfrtq4hAo0mY/H/ptXxTNNU1+yGNY0VVu/Sl5gq6LMxoDwnaSigjxM0FNdHiv7x48flpptuUoMZ6jkSERHpVcOGDWXkyJHSs2dPueWWW9QyjGNofLZz505V3J6IiMiX9ejRQ/38+eef5frrry9Yjt+t97li3rx5qsSI48W5sq5HRPkdp88lWeR0gkXEIBLjwY7TCML9vC9X3v8hQ+JS/usyDf0vCZKJA0IlKtz3A3PooB0aJFIvhoFGbytXbiyawqA5zKeffqq6nCE6etVVV8natWslODjYfVtJRETkAbNnz1aNzebMmSPJyckqwwN1rFCX2FmmBRERkS+54IILZOjQoapZS//+/SUqKkrmz58vu3btkrfffttuXWT0X3LJJfLiiy/aLUezlw0bNjitcVyW9Ygov0syOk6fQcfpQM92nD4RZ5Z3v8+Q3w/bd5luUtsk9w4Ok4sb62fKdHkkpVskwCRSN9okVav4fuDU15XrXVWlShV555135M0335T4+Hh1guZKbQ4iIiI9wIWxV199VV5++WVVwyQ8PFzCwsK8vVlERERuM3fuXDX7DBn9qIOI5iu4yNatWze79fbt26dqojnLVkQ9/tGjRxf7d1xdj6iyK+g4nWyRiFCjhAR5ZtpyVo4mX27IkoU/Z0meTWnGsGCRsf1CZQimTHu4NmRFScmwIDlU6kWbpHoEA4164JYQNjIakRlCRETki5DRyHGMiIj8UfXq1WXlypWq1FVSUpI0adLE6Sy0VatWqWQSR2j2MmrUKNW0pTiurkdUmaVn5Qca49MsUq2KUYICDB6ZMv3rgVx5b3mmnEu2KcwoIn3bBcmEq0Il2o8CcjimeRaRBjEmianqP/tVqYKNixcvlqefftqldVGz8ZlnninrdhEREbnd6tWr5aGHHnJp3SuvvFJmzZrFV4GIiPxC7dq11a0ojk0/badiu8LV9YgqK3ScPhlnkbRMi8REGD2SVXgy3izvLc+Q7Yfsp0w3qmmUe4eESdsmgeJPMrI1ycyxSP1oo9So6h9ZmpUy2NigQQMZPHiwS+u2a9eurNtERETkEejE6eo4hkZoRERERETlkd9x2qICgdm5ItGRRrd3nMbU7K82ZsnXm7Ik1ybOiGYpo/uEyjVdgyXAT6ZM204Tz8iySN1oo9SqZhKDwb/2r1IFG9FVjJ3FiIjIV6FDpmPheyIiIiIiT7BYRM4laXI2Kb9ooic6Tm/5M0dNmUazGVu92gTKbQPDPNrl2ltycjVJzbRI7WpGqV3d5PbgLemgZmNmZqZs2bJFdR9DWj6CkTExMW7YNCIiIs/LycmRX3/9VY4cOaLqTGEcQwF9IiIiIqIyfb/M0yQF06YTRCTQLGEhJrd3nD6TYJb3fsiULX/m2i1vUMOouky3b+pfU6atcvM01Xm6ZpRRdZ42MdDof8HGjRs3yi233CLHjh0rWBYZGSkzZ86UiRMnumP7iIiIPGb79u2qa+ahQ4cKlqEb9XPPPedybUciIiIiIrNFU81KUjMskpSuSVqGWRLSRBrUNUiVEKNbs/q++TlLFmzIkhybKdPBgflTpod3DZZADzSe0QOzWZOEdIvUqGqUejEmv5sa7k/KHGxMTU2VESNGSL9+/eS7775TBYFjY2Nl7ty5cscdd8gll1wiHTt2dO/WEhERuTGjEeMYxqv58+fLhRdeKAkJCfLll1/Ko48+Ku3bt5fevXvzeBMRERFRkfUYM7JF0rIskpSWH2xE5l1IkEGiwg0iuaL+3122H8qVd77PkNMJ9lOme7YOlNsHhqlsP38O5ial5TfXqR9j8kgnb9JBsHHDhg1St25ddYJmNOa/ocPDw2XGjBly8uRJWbJkCYONRESkW9u2bZOAgABZtGiRBAbmTzOJiIiQyZMnq4tnixcvZrCRiIiIiJw2J0nLzJ/Oi59o0ILgV5VggwSFGwuCY+5yNtEs7/+QKZsP2E+ZrhdtlHsGh0nH5v45ZdoKhzIhRZPqkSaV0RgcyECj3wYbkf3RsmXLgkCjrdatW8vhw4fLu21EREQeg3GsefPmBYFGx3FszZo1PPpEREREpCBjMS1Lk5QMi6RkaJKZranGJAgwRoYZPNINGbUfF/2cJV9uyFKdrG2nTN94RYhc2yPErzP8LBZ0nNYkMU2kYT2D1IsxSmiw/+6vPylzsLFp06ayadMmiYuLs2sIYzabVVbjsGHD3LWNREREbodxDNmNyMavV6+e3XQYZDViejURERERVV4Wax3GTEyTFknPsYhmMUhYsEGqRxg82pzk98O58u73GXIizn7KdLdWgXLn1aFSq5pJ/BG+i2fmiArmWjRNggM0qR4h0iDGJOFurH1JOg02duvWTRo2bKi6dt5+++3SpEkTNe3ss88+Ux09Fy5c6N4tJSIiciNkL2IM69y5s9x5550qyxHZjgsWLJBdu3bJ22+/zeNNREREVMlYg13WadLpmZrKMFR1GMOMHm9KEptskQ9WZMimP+ynTNepbpS7B4VJ5xaBfnnMkbmZka2p6eeYJl0twiBVw0wSGmSR5ESR8FBmNFaKYCNShFesWCFTpkyRF198UVJSUiQkJETVt0LAsWbNmu7dUiIiIjdDvcannnpKZs2aJUlJSRIUFCQ9evSQn3/+WRo3bszjTURERFRJoMszpkkjwJiaoam6jOjqjCzGqPN1GD09TfvbX7Pli/WZkpXz3/KgAJEbLg+RkT1DJMjPahWi1iUCjNh3BBirVsHNJFVCDBIalB93QgfqZG9vKFVcsBGqV68uH3zwgbohGyQqKsppDcfSOHjwoGRkZEirVq1U8NJVeXl5cvToUfVYdMZGkX8iIqLiREZGyhtvvKFuiYmJ6neTqXxTUlCzODk5WY1jYWFhLj8OZUj++ecfSU1NVeMYtsXf9Ho6SEQS3f68h+b8V86FiIiIyFV55vxGL6jDmJqZXx9QDPkBxhpVPVOH0Zldf+d3mf431n7K9GUtAuWuQaFSp7rJr4K6GTmaZCNbNMCgMharVjGqACPqX1bUMScdBxsdA4/lPTkbMWKEqgGJ50INLQQxR44cWeJjv/vuO7n77rtVoBMBz7/++kvuv/9+eemll8q1TUREVHlUq1atXI8/ceKEGseOHTsmtWvXViVFEMQcP358iY9du3atTJw4UXJyclQd5EOHDqnHvfXWW+W+iEdEREREDk1HsvODjIlpmqRj6q5ZU41HqkUYPVqH0VF8ikU+XJEhP+21nzJdK8oodw8OlS4tcaHW9yFzEcccmYzIFg0NMqhp4eEh+YFdNNoh/1LuYCNOqnBSlJ2dbbcc9Rzbtm3r0nNYLBa59tprpX79+vL777+rzqColXXzzTer50DX66KcO3dObrzxRhk3bpw6KUMUfNWqVXLVVVfJxRdfLGPGjCnvLhIRkR9DkBBZ9ZmZmXbL69SpIx07dnT5eTAWBQcHq3ERmfmff/65jB07Vtq0aaNqQxYlLS1Nrr/+ehk0aJB88sknKrNy8+bNcsUVV6jx77777ivX/hERERFRfsMRTJNOTrOon1nnM+siQw0SGGCs8IzKpVuy5bO1mao+pFWgSeT6niFq2jRqRPoy7KMKMOZoYjTlZy3WjEImY34WY0UGdcnHgo333nuvvPPOO07vmzBhgsyZM8el59mwYYPs2bNHrY9AIyBT8YUXXpD3339fXn/99SIfu3PnTjV1Ghkh1nTbK6+8UjWsQbdsBhuJiKgoTzzxhKo7jItejnARzNVmZxiLUOcRF7usJUBGjx4tzz//vBonEUQsyr59+9QUboyb1incaMKGi20YxxhsJCIiIiobNHZBBmMy6jBmovGLJgHG/Gw6TN31hr1Hc+Xt7zPkn7P23z8vbR4gdw8Ok3rRvjtlGs1dENRFANVg1CQsyCDRMUaJOB9g9HRzHfKDYONvv/0mH3/8sXz77bfSs2dPlc1hyxo0dMUvv/yiHm+bQYJpY127dlXZHcWpV6+e+olp1+3bt1f/n5WVJfHx8SpTkoiIyBmU3HjllVdUBmL//v0L1QkOCAgo1TgGGLdsde/eXTZu3FjsY5FBiYtlGMds6xCfPXtWZTcSERERUekCXulZmqRmWCQpPT+7TtPyA4wxEZ6fsovGMut258iaXdmSkBIg1SPTpV/7YGl/QYB8vi5L1u62SWUUkZpVjXLnoFDp1irQJ+sVYlo6gos4zgbJn45eu5pBIsLyG70EBfjePpEXg42YOo0pX9dcc025N+LUqVOqe7VjXSqcgP3666/FPhZTpR944AGV+YFOoqi59e6770rTpk1V5mVx0EEbN6vTp08XFOnHTU+s26O37XIXT+6XXo6Zv7+GlWEf/X3/fOHfYnmbtzgGGxHMw/Rnd4xjaEwWHh5eaByzDSI6g7Ij6Ig9efJkyc3NVfUecTEPDWIeffRRvxvHfO25fXlb3K0yfQb66z76+/75wj66cxwjov9oWn7tRWQxJp2vw5iHadJBBqlWxSimCsqoOx5rlilzUyU2RUOfGdE0o5xJMsu+YxmCLdBs1g0wiVzXI0RuvML3pkzjeCPAiCxGi5YfYMQU6cgwk6rD6G9ds6kCg40NGjSQ9PR0cQcUxHeWQYLsSNxXkqFDh8qaNWvk6aefVid6x48fVyduaBZTnFmzZskzzzxTaHlsbGypMjMrAhrn2P4k1yE7SE8qw2vo7/t48d3/BXfc5acZJX/W+fpr545/i3Xr1hV30dM4hjrDy5cvl2nTpqmLZuhKjUBjjRo1/GwcC/L7z3l//vyrTN9F/H0f/X3/9LyP7hzHiCg/i1AFGNMt6icakCDQFR5skKBwY4VvCwKNcan5IUXtfGSx4KfNupc0DZB7BodJgxomnwowZueKCuQimzE4EA11DBJVJT+D0dcCpqTTYONll12msjXWr18vvXv3LtdGIHsjNTW10HJka1StWrXYx2KaNaa/oXM16jbCn3/+qepdoXkM6j4WZdKkSQWPsWaEdO7cWZ3c1apVS/QE3UnxpQk//fGKKK4+e+pLoV5eS+s++utrWBn2sTK8T62fNf68j1atW7dWtRq/++47ddGqvOMYGr3gS5jt9BdXxrG9e/eqDEuMVw8//LBahmAjxjE0r3nvvff8ZhwTcX+gHvS0r/76+VcZvotUpnHMX/evsuwjUWWHzsZo8JKSYZGUjPwagZgajQYkkWEGr01FxtRpZDSW5OpOQXL/0DCfmTKNICpqXeK4I8AYVQX1LvMDjKFB4jP7QToONuKE7H//+1/B75i23LdvX2nevLnKxLA1bNgwmTJlikvP26pVK/WlICEhQapXr243Vbu4TtSwZMkSqVKlit3JFh6DKd6LFi0qNtiIk0PcHOGLid6+nFi3R4/bpnd6O16V4TWsDPvobno5Xp7cDj3sIy6Q2Y5NuCiF8QqlN/KDYf/p06eP3ZhX0jiGKdAIEqJBWWnGsWXLlqmg5/3331+wrHHjxqpBzVdffVVssNEXxzFfe+7S0uOxd5fK9F3E3/fR3/evsuwjUWWrw5iBOoyZFklKE0nPsYhmya/DGF0BdRhdsWZndonrIC6HqdZ6D9Dl5GqSkaNJ9vmO3eGh+Q11wkOMEhbMACO5OdiITIlLL73UpXUbNWrk8vNeffXVavoZgoO33XabWoasyS1bthTqdo1un2j8ghMxQK1HdKNGQ5jo6OiC9f79919dZToQ6c3seV+6/TnHjx7p9uckcidcGHN1HEMA0lXIsA8LC1Pdq611FtFhet26dWpqtC2MbQhsNmvWrGAcQyYO6j7ajp3Hjh3jOEZERESVlrUuoHWadHqmprpLY7puVJhRN52NE1Itsnxbthw4XnKtWEypTkwrOfvRG5C5iCYvmIoeGICsRYPUqY4AY35QVw8BXfLTYCO6bDp22nQHdJRGYfzHHntMNYlBkHDGjBnStm1bGTt2rN266HyNaWavvvqq+n3MmDEyc+ZMFbB85JFHVM3GxYsXq+6f6JRNRERk1b59e3n77bfdfkBQIxjjFgKLGIdwQezFF19UdSHvvvvuQvUZr7vuOpkzZ476Hf+PDEpM5cZYiAz/H374QWU8zps3jy8eERERVSoIdtnWYcQ0XgS/EPCKquA6jMU5dDJPlmzOlg1/5Eieiz2pkNBYLVw/Qbs88/kAY44mJhzjoPxGL+GhRjVN2sQAI1V0zUZMRdu+fbv069dPLrnkknKnAT/77LNqqtnXX38tmZmZMnDgQBU8DAqyLybfvXt3uylqCEzu3r1bZUB+8cUXkpWVpe7HtrmavUJERJXP1q1bVXMxZCVivMDFrvLAhTAEGTEWoVYjai4iyxGlPmzhoh3Kj9gGKn/77Td599135ZtvvlFNa5DhiEx+jHlERERE/g5BLwQWbeswIjKHAGONqt6rw+hsO3/ZnytLfs2S/f+Wvus9Mhv7tAsWbzKb82swImvUYNRUgDE6xigR5wOMeskYpUoabMzLy1PZIY8//riaDobaVjhhQ/DROsW5tG6++WZ1Kw5OvhxhCpqzbpxERERFQZ3Ejz/+WJ588kkV8MM4hjEMY5l1inNpoc4ibsVZsWJFoWXIZsR2EBFVJp4o6QKD+l/hkef1h3EPSR2OF8GKglrEycnJTu8LDAwssgFaTk6OuoCHMllExb8n87PqEGTE1OL8Lseimo5UizDqKqsOQdAftmfLsq3ZEuekCUzDmkYZdGmwfPNzlsSnagUdqG0hXhoTYZA+7ewTqiqq5mVWjqjjbRBNwkIMUruaQSLC8hu9BAXo51iTfyhzGgdOxlAXEZ2fMW0MGYXI6kBWITI2rNPDiIiI9AgZhn///be6WZuJTZ06VY1huGj2+uuve3sTiYiIyg0BRtTFj4iIUEkaGOecXfhy9Ouvv6qZZ4431PG//vrrC62/YcMG6dKli/o7mH2GclhoAkpU6D2ZrUlsskX+Pm2Ww6fM8k+sWU2djgxFFqNRTeHVS6Dx6BmzvPZtutz8crLMXZ1lF2hE8PCyFoHywq3h8uF9kXJNtxB5cVyECiha77f9ieUvjItQNScrMpgbn2KRxFSLaKKpKdJN6wZI87oB0rBmgFQLNzLQSB5R7stNLVq0UDcMJpiO9vzzz8vvv/+uCuDbdogmonyt7kh0+6E4NMe+iy4Rue6CCy6QO++8U9UARokQBB43b96sMukffPBBHkqiStborNfTyDjx77HaE99FKsM+6mn/SgO1gxEI/OOPP1SZDtS+v+aaa1QJjzZt2hT5uMsvv7xQsBBjI2rojxgxwm752rVrZfDgweq5UTsfncBRHuuXX36RYcOGeWzfyHegsQsyGJPTLZJ6vg4jAoqYJo0ux3qCLMCtB3NVPcbdR/MK3Y9uzFd2CJahXYKlXrR91/sGNUwy58Gqsm53jqzdlS3xKbkSHRkofdsHq4xGTwca0VRHZTDmaGo/QgINUi3CIFFV8jMYKyrQSVTmYCM6Z27btk1Wr16tbgguohA+Mh5R4L5v3748ukREpOvpZDt27FBj2KpVq1SAEZkYmEp97733qp9ERES+7NSpU6rZ2Ny5cwvq3qMpJ8qIzJo1Sy0vDTxXaGio3HjjjXbBDVy0u/XWW+Wee+4pWG67DlVOCHYhwJiaaZHkdE0yspBblx9gjI7QX3fjtEyL/LgjR77bki1nEi2F7q8bbZRhXYKl/yXBKnBXFAT0ru4ULAM6Bkh8XJxEx0SJyWgflHQ3BG9RhzHX2q27CoK4JtVJOiQI2ZX6Otbk/8ocbPzkk09U5iKubKHOIn5v2rSpe7eOiIjIQ7799lvVCbpz584qq/H9999XmfpERET+AhmNCAb27t3bbjnqFP/www+lno6NbEXUJrat14gElMOHDxcELtHozNW6kOR/8H5Lt9ZhTNVUhl3e+QAYpuyadNh85HisWZZuyZbVO7NVVqCjDk0DZFjXYOl8YaCuAqQ5uec7SZs1CQlAB+n/MhiRfckAI/lksBGBxVatWqlU+rS0NDl69KhceeWV0qNHDwkO9m53JSIiopI0bNhQ2rZtK9u3b5eMjAw1jiE7/4orrlBZG0RlwambRKQnx44dUwGH+vXr2y3H76i/j8CQqwEJXKRLSUmR8ePH2y3fu3ev+nnw4EFVyzEpKUkFGydMmKCaeIaEhBT5nHg+3KxOnz5dMIsOt7KwPq6sj6eyHUdk1qVlaZKUZlHBxqxskeAgTDk2SGAY3mOodYipvfo4wqhnuONvsyz9NVt+P1x4H4MD0TU6UIZ1CZKGNfOzEjWxlGr7LeePnfWnOyBzEQHGnFwR9GCqEmyQWlHGggCj0Zh/nNFox1/w37S+jiPKZHg02NirVy/Zv3+/nDx5smAq9U033SSpqamqvgdqgwwdOrSsT09ERORRnTp1kt27d8vZs2cLxjGcGMXHx0v37t1VMf1Ro0bxVSAiIp+FbER0jkZ3aFsIACLQmJ2dXWww0BZmsmEqNs4DbSHxBJ5++mlZuXKltGvXTiWkDBo0SPLy8mTmzJlFPiemciMg6Sg2NlZtd3mwOY17FHcc88wi6dkiqZmYgiySlStiMmIasUhwQP79KZmiK8hc3HTAKKv3mOR0YuFAe3SEJv3bmuWK1hYJD0GaY7rEl7PPUWJi+WrI4jji2OIWcP74RoaKVAkQCUXcJ0ckHTfxb/w3rY/jWLdu3YppEFOvXj1Vn2PgwIGqQQwGjB9//FFdLWOwkYiI9A51GkePHq3GMRS4f+ONN2TdunVSrVo1BhuJnGD2JpHvQIZhTk6OCvoFIA3qPEx1xu+uBhpPnDihxsjp06cXyoS0Tpl+6KGHVKARMNsNJbc++uijYoONkyZNsmsqisxGlDdBx2uMz2WBrB2cTMfExLicgUOuH0fUYcxAgDHDIsnZmmTmaWIJEImOMUhokOhqmrEt1GBctjVHVu3IkfSswvdf3Mgkw7oGSZcWAW6b6o2MRgQa8Z3SWMr3otmMKegiWdmaBCK4GIUajAZVgxFZjAE6nI7uKfw37ZvHMaA8V8lQAwSZIAgyIn0egxUGlpdffll1OCMi8qcupTCo/xUeeV6qeMjm2LRpkxrDMJbt3LlTgoKCpFu3bvK///2P3TOJiMjnNW/eXP1EqRDr/1t/L029/c8++0z9RJJJUX+jcePGdsvxe3Jyssp8DA8Pd/q8kZGR6uYIJ8LlPRl2x3NQ/nFEZiwCjGlZFklKE0nPQiMSZNgZVadjvQa+kL2LbtJLfs2WLX/mioYZxjYCTSK92gbJNV2DpVndcudhFQmBRlcaxCCQi8xLNHoBayOdiLD8adJBAfo8zhWF/6Z96ziW+V/UF198Ibfffru0b99errrqKnXFCoFGV6+Oke9iEIeI/MGyZctUbak2bdqoWo3PP/+8KgMSFhbm7U0jIiJyC0x5Rj19NIN54IEH1DJkOeIi24gRI+zWRQYWsh0jIiKcdqHu16+fNGjQoNB9Xbt2VZlbSD5B4zUr/F6nTp0iA42kf9m5IvEpFknNym/4kpmtSVCgQdUJDAq3n5qvJ9m5mqzfnSNLtmTL0TOF69NVjzDIkM7BqmN0lJf3A7UjMT0adRgRDQ0JNkjNKINEhOZ3ksbxJvJFZQ42Xn311XLu3DmVgknkbzwRUB0/eqTbn5OIyg6BRUzXql27Ng8jEekOL+6SOyAI+Mgjj8iMGTOkZcuW6oaLa5hGjeW2cPENySMLFiywW75lyxbV/MVZbUVAMBPPP3XqVLnoooukS5cuKpiJAOWbb77JF1JnENxCkxOLll8LEL/n4XcLMuvys+vQhCQz2yynzomEZpglwGRSWXYRUQZddziOTcZU6WxZ8Vu2pGQ4pDGKSIv6Jrmma4j0bB0ogV7MEkTGJTIY0akbxzs0yCDRkQapGpbfSRqdu4kqbbDR1aKQ5D69ng7CNUe3H9JDcxgwJvfh+5R8Rc2aNb29CURERB6HQGBUVJQKLiJ7ETPTUA7LMUuxevXqTqc0L1myRDWGKa5M1r333qtqN7766qty5swZueCCC9TU65EjebG9ItgGDPMs2n+BQ7OIWdPUz5w8TfLyRHIRYMQya4BRy388go9gEIOg7KKm/hM1TToIXUl0CoG7/cfNsmRzlvy8P7dQF2Y0rOl5caAM7xoiLRt4bqq0qx27MUUawVwEFKOq4GYNMIquA7lEpeXdf21ERERERETkMai3h0CjYyajoz179jhd/uKLL6pbScaNG6du5B7IeFPBQhUQtPn/89mHaCCScz54mH9ffgARdQkReNTOBxARv9I0gwq64YbG5CajQXU1NgacX2YwFGrsguezZOWvq0cI2G38I0fVYzx0svBU6aphBhnUOVjdYiK9FyxFbcukNIt6TUICMT0ajV7yA4xhwQwwkv9isJGIiIiIiIjIwxl41mzC/CzE/N8LbmZNcnGzCSA6y0BUCYgqiIgAoTVYmB8UDAqw/n9+V2h/zJRLTLPI8m3Z6paQVniq9AW1MVU6WHq3DfJqvcOcXE0S0y2Sni1SPdog1SNNEh5qkLCgwoFdIn/EYCMRERERERFRGQKIqu6h9l/A0DaAiOAgpi/nmNGY53y2INa1PkbTxIKkPMN/AcT/sg/zMw5VABG/G/w3gOiKv07md5XesDdHBWNtIXbXtRWmSgfLxY0DvHqMEGRMydRURmm1KgapGiDStK5JgtD6mqgSYbCRiIiIiIiIyKaBim3A0LEeIgKIublF1z/EVGaUDjSiAqI109BgM4U58L/sQ71OU9YDBG9/OZCr6jHu+7fwVGl0ax54aZAMvixYalfzbjDPLsgYjoYvRtW1Oy5Wv1PRiTyJwUYiIiIiIiLyW9Z6htaGKSpwaP4vgJg/hTm/vl5+pmJ+xiKChiqAaM6fvozfkYZon33oOIWZ02TLKyXDIiu258h3W7MkLqXwVOmGNYwyrGuI9Gsf5PXOzc6CjJFh+UFkvK+IKisGG4mIiIiIiMgvZGRrEpsikmsyqyAjshJtG6hYMxALNVAxWacq5wcMMevVGlR01kCF3O+fs2ZZ8muWrNudI9m5he/v3CJQ1WPs0NS7U6Vtg4x4f1iDjGhKw/eJe8sUnDx1Ro4eOy4pKSkSGXlCmjRqIPXq1vb6608lY7CRiIiIiIiI/EJapibH40QyNYsEBBgqXQMVX4Mg8LaDuaoe464jeYXuDw0SubJDsAzrEiz1Yrxf95BBxopxNjZO1m/6VVJT0wqWnTobK3/+9bdERIRL755dpVaNmAraGioLBhuJiIiIiIjIbyCgGFPVKCaknZEupWdp8uOObPnu12w5nYgKl/bqVDeqACMCjVVCvB8UZpCxYgONy1euFQvSkJ1IS01T9w+6qi8DjjrGYCMRERERERERedyJOLMs3ZItq3dkS2ZO4fsvaRqgpkp3ujBQF41VEGRMztDUNHtOl66YqdPIaESgsaiKl1iO+7HeDcMHM0NZpxhsJCIiIiIiIiKPBZB+P5yn6jFuP1R4qnRwoEjfdkGq6UvjWt6fKg3ZqMl4PshYPdIgMRH5jV9Yk9GzUKPRduq0FBNwxHonT5+R+nXreHirqCwYbCQiIiIiIiIit8rM1mTNrhxZuiVLjscWnhJbo6pBhnYJkas6BklkmFF3QcboSINEM8hYof7590Tp1j92gsFGnWKwkYiIiIiIiIjc4kyiWb7bki0rf89RtRkdXdwoQK7pFizdWgaKCS3AdYBBRn3IyclR06KRDVsSrIf1SZ90E2w0m83yzjvvyDfffCMZGRnStWtXmTZtmtSoUaPYx3377bcyZcoUp/cNGTJEXnnlFQ9tMRER0X/wpWj27Nkyf/58SU5OlksvvVSmT58u9erVK/YwrV27Vu655x6n911xxRXywQcf8DATERGR7r8H7Tmap+ox/nogVywOsaJAk0ivtkGqHmOzuroJQ6ggY2qmJuglxExG7wsKCnIp0AhYD+uTPunmX/mkSZPkq6++UidVtWrVkieeeEIuv/xy2bFjh4SGhhb5uD59+siSJUvslm3atEluv/12efTRRytgy4mIiEQFFt988001jjVp0kRmzJgh3bt3l127dklUVFSRh+iyyy4rNI7t3r1bRo0aJbfddhsPLREREekWGqis35MjS37NliNnzIXurx5ukMGXBcvVnYKlWrg+pko7BhmrR3C6tF40blhfDhw67Pr6jep7dHvIx4ON//zzj7z99tsyb948GTZsmFqGwGP9+vVlzpw5ct999xX52KpVq6qbrRdeeEGqVKkiN9xwg8e3nYiIKC4uTl588UWZOXOmjBw5Uh2QL7/8Uo1jb731ljz11FNFHqTw8HBp2bKl3bL33ntPAgMDZcyYMTy4REREpDtxKRZZtjVbVmzPVt2aHV1YzyTDuwZLz4uDJDBAH1OlgUFGfatXt7ZERIRLWmpakd2oAe+o8IhwqVendgVuHflcsHHFihUqBXbo0KEFy2JiYqRbt26yfPnyYoONjtLS0mTRokXqZA8ncERERJ62evVqVTPGesEMMAYh+x7jWHHBRke5ubkqUDl48GCpWbOmh7aYiIiIqLCsHE3W7c6RNbuyJSElQKpHpku/9sHSp12Q6hp94LhZlv6aJZv25YrZoeeLySjSs3WgXNMtRFo10EWooVCQEdvITEb9Qh3G3j27yvKVa8VisTgNOCLQaDQa1XpYn/RJF58ABw8eVLUZIyMj7ZY3a9ZM1qxZU6rnWrhwoaSnp8v48eNLXDclJUXdrE6fPl1QPxI3PfHk9uhtX/11/yrDa1gZ9tHf90/vr6EJrQF1CONYcHCwNGjQoNA49tNPP5XquRCcjI2N5Tjmg/9+/H3/9P754A6VYR89yd/30Z/HMX+Qka2ppiQLN2XKmcQAqRH1X5AsJIgBCVccjzXLlLmpEpuiCWI4mmaUM0lm2XcsQz5elSnREQb551zhrtJVwwxqmjSmS8dE6meqNDDI6Htq1YiRQVf1lfWbfpXU1LRC9yOjEYFGrEf6pYtgY2pqqtMsRCyzDQa64pNPPpELL7xQevToUeK6s2bNkmeeeabQcpzkYfqa3qboiXim+OnZs2fFn+ll//Jfw8qwj3yf+v5rqN99rFu3rugRxjGU73DXOFanTh0ZOHBgietyHNPXvx9P0cv+6f3zwR04jvnH6+gp/jyO+bojZ/Lk1pkpcibRUhAki03JD5LNX58pL4yLkAY1GOgtKaMRgca41PxcMmuPDutPZAXiZqtJ7fyp0mj8Ehxo0N3+pGUxk9FXIZB4w/DBcvL0GTn6z3H1fRrJaU0aN1BTp5nRqH+6CDaGhIQ4bVmenZ2t7itN7ceNGzfK//73P5eb0kycONEus7Fz584qyxJNavQE08pFSnfC6iq97au/7h9eQ0+dqOlpH/k+9f3X0N/fp3oex3Dsf/jhBzU+uZL9wnHM/99betq/yvD5wHHMP15HT/H3/fPljEYEGs8lWZwGyRA8QxBtzoNVfTbDESXHMGU5zyzqp9mS/7u6mTXJO///FrWOzX1Yr+AxInkOj/tvPZE9R3NVRmNJcAS7XRSoukq3aRygu6APgowIigaYOF3a1+G9Vb9uHalTq6a62IPPYGaH+w5dBBtRQB9vnry8PAkI+G+TTp06VWhKWnHQYAZz98eOHevS+oiMO07dBryB9fYm9uT26G1f/XX/KsNrWBn20d/3j69h2ccx1AxOTk62a1pW2nHsiy++UDUbXSkFAhzH9PXvx9/3rzJ8PlSGffQkf99Hf98/X4Wp08hoLAqCjgiizf8pUy5rEaQCcM6DdvnBOATsrPf9t559cM4atMsP7hUO/v23nmPA7/x9Dr9bn0M9n5NAoaXkGGCFubC+SZ6+SX+9EWyDjNGRBjWdOyLUIEajvoKhRJWFLoKNl19+uTq52rJlS8H0ZwQeN2/e7HLgEFd7Pv30U7nqqqvU9DMiIqKKHMdg06ZNqrGLFX5Hk5jSXDTr3r27KgdCREREJftuS9b5qdPFr/fVxmx1o/JJz9JR5JNBRiLd0kWwEV2nu3TpIlOnTlXTx1Dj6oUXXlA1sO666y67dVu2bKkyPh577DG75TihO3LkiLzyyisVvPVERFTZtW7dWgYMGCDTpk1TF82ioqLkzTfflH///Vfuv/9+u3VRrgPrPvvss3bL9+7dKzt37pSPPvqogreeiIjId8WnaiUGGv2N0Zjf+Rm3AKOh4P+xPMD03+8mm/8PUD+R6Yfl9o/D7zv/zpPk9OIPJIK61cL1kSnITEYifQvQy1x8dJEePXq0KpqMIvuYTv3tt99KkyZNCnX8PHfunNOC+qi1OGTIkArcciIionyff/65jBkzRk2pxlRqdC1dsGCBXHzxxXaH6NChQ9K2bdtCh23u3LnqYtvIkSN5SImIiFykOiSfLTmzMShApG60UQXcCoJsNv+P6beYcmv9f7v1bH5H0M5+PZt1HdZTAUCToeD/1X0Fj8n/vdBzFGxP/u9Gh/UwK9gTU4N/2J4tbyzNKHYdHOM+7YJFL0HGmKoGiY7gdGkiPdJFsBHq1asn69evV52gMzMz1cka6i86OnDggERHRxda/tRTT8mMGTN010WaiIgqBzSWWLFihcTHx6vMfNRqdFbfa/v27RIREVFo+YMPPigPPPCACjgSERGRa4Z2CZHf/korcb27BoXJ1Z28GyjTsz7tglTnbjTUcRa4RVZjTIRBraeXIGNkmEF3DWqISGfBRitkJxYH06idccyAJCIi8gZcEHN2UcyqefPmTpc3bNjQg1tFRESVGbLtt27dKomJiSq73pXmZZhNtnHjxiIvsPXq1avgd1xsS09Pt1snODi4QmadDe0SLO9+n6G6UVt0GCTzFejU/cK4CNW5Gw11rHUwrT9xDHF/RXf0tgYZAxlkJPIpugs2EhERERERkXscPXpUBg4cKBaLRZo2bSobNmyQRx55RM0KK87Zs2dVORBbOTk5smzZMrn22mvtgo2os4+s/RYtWhQsi4yMrJBgY1iwQT55OFJunZmiulLrJUjmixrUMMmcB6vKut05snZXtsSn5Ep0ZKD0bR+sgrUVeQwZZCTybQw2EhERERER+SnUxa9Tp46sWrVKlZxCtiIChZ06dSo2GNimTRtVV9/WokWLVLARNYod3XzzzTJ58mTxhgtqB8jK56rJsq3ZsnBTppxOyJWaUd4Jkvk6HCtMNx/QMUDi4+IkOiZKTMbCZWEqIshYo6pBqnO6NJFPYrCRiIiIiIjID/3xxx+yefNmWb58eUFt+8svv1y6d+8uH374YakzD9GUs1atWjJo0CDRG2Q43nB5iFze2iQ7/4yVC5tUbJCMyodBRiL/UrgDCxEREREREfk81GmEzp072y3H79b7XIVp1StXrlRZjQEBhXNWTpw4obIet2zZohqlEbkaZIxNtqifyGS8oI5JGtcySdUqRjZ/IfJhzGwkIiIiIiLyQ6dPnxaj0agauthCdmJsbKxqHGMyuZb998UXX0heXp6MHz/e6f1LliyRv//+W9WIxN999tln5f777y/2OVNSUtTNdnsB24VbWVgfZynj40nsjp+njqPKZMzQJDBApHpEfnfpiFDU2tTE4qzTjw+yvhfL+l4mHkc9vh9dHTMYbCQiIiIiIvJDCA46OzG0LivqfmfmzZsnXbp0kVatWhW67/XXX5dhw4YVZKLNmjVLHnjgAdX1evjw4UU+J9Z75plnCi1HINQ67bu0Es7HLtF5m8rP3ccxK1ckPUskwCQSGSYSESwSqolkpubf/FFcXJy3N8Ev8Djq4zjWrVvXpfUYbCQiIiIiIvJD1apVk9zcXMnMzJTQ0NCC5cnJyer34OBgl55n586dsmfPHlXn0ZlrrrnG7vdJkybJm2++KV9//XWxwUasN3HiRLvMRkzxrlGjhsq+LAtLQK6ciE9Q+250MZBKTo6j2awCje46jtZMxiohIvXqWDMZDX49VRoZZAjsILPY1aA+8Tj6y/uRwUYiIiIiIiI/dPHFF6ufBw4ckA4dOhQsx+/W+1xtDBMWFiajRo1y+TFRUVGSlpZW7DqRkZHq5ggnwmU9GTaZLOonAmRsEFN+5T2O/zV+MUjt6gaJjvT/IKM738/E4+ir70c2iCEiIiIiIvJDPXv2lJo1a6p6i1bx8fGq0ct1111nt+4PP/zgtGkMMiPnz58v119/vURERBS6H5kymI5ta+/evbJv3z417Zoqd+OX7Nz8xi9N6+Y3fokMY+MXosqAmY1ERERERER+KCgoSN566y0ZPXq0+v+WLVvK22+/LU2bNpV7773Xbt3bb79devToIQsWLLBbvnz5chVQLKoxDKZXP/jggyp42aRJEzl8+LD6G506dVJ1G6lysWYyBgWICjJWxkxGImJmIxERERERkd8aOXKk/Pzzz2pK8+rVq+WGG26QX375RU2LtjVo0CCnmYgnT56UcePGyeWXX+70+fv06SPfffed6nqN509PT5fZs2ervxEeHu6x/SJ9ZzJeUIeZjESVGTMbiYiIiIiI/BiaruBWnA8++MDp8nvuuafE52/cuLE8+eSTZd4+8u0gY0qGRYIDDcxkJKICDDYSERERERGRfzCIGA2isuyMRvVr/kJM6zOIYDZvwU8j/t9gt8zufvWT03+dyczGdOn8IGOtakbVXTqc06WJ6DwGG4mIiIiIiMgvRIUZpGENkZgYkxiMJrFommgWkTyLJmaLSK5ZxGIRMZtFNE1EE00smkje+d8t528aHqflPyd+MGiZj0FGInIFg41ERERERETkF4ICDRJVRVRjEpPJWOR6CCaqwKLFPshosfy3PD/oaL2vcgctGWQkotJgsJGIiIiIiIgqFQTtTAaRwvHI0gXz/D1oiSBjRraZ06WJqFQYbCQiIiIiIiIqA38NWlo0i8SnigSEalK7ukmqh7MmIxG5jsFGIiIiIiIiIi/SW9AyN88gMZEiTesESNUqJjbKIaJSYbCRiIiIiIiIyA+4K2iZlydyLlAkgh2miagMiq6YS0RERERERESVjrca0RCRf2CwkYiIiIiIiIiIiNyCwUYiIiIiIiIiIiLyv5qNp06dkhUrVkhGRoZ07dpVLr300lI9fuvWrbJ9+3aJjo6Wq6++WqpWreqxbSUiInIUGxsry5cvl+TkZDWGde/evVQHaefOnfLrr79KZGSkDBw4UI1nREREREREvkQ3mY0rV66UCy+8UL7//nvZt2+f9O3bVx5++GGXHovg5JAhQ2TEiBHyxx9/yLp166Rbt27y559/eny7iYiI4Oeff5bmzZvL119/LYcOHZKhQ4fKxIkTXTo4OTk5ctNNN8mAAQNUwBHP1bNnT9mxYwcPLhERERER+RRdZDYiWDh27Fi57bbb5LXXXlPLRo0aJb1795ZBgwZJnz59in38HXfcIceOHZMDBw6obBA4c+aMZGdnV8j2ExFR5ZaXlydjxoyR4cOHy9y5c9UyBBo7duyoMu1xMaw4uLi2bds22b9/v8TExKhlCQkJ6kZERERERORLjHrJajx37pzce++9Bct69eolF110kcybN6/Yxx4+fFi++OILefbZZwsCjVC7dm1p1KiRR7ebiIgINm7cKP/884/dOHbJJZeokiAljWNnz56V999/X5566qmCQCNUr15dmjVrxgNMREREREQ+RReZjb///ruEh4dL06ZN7ZbjRK2kKWSrV69WPzHdbNGiRXLy5En1PP3795egoCCPbjcREZF1HDMajdK2bdtC49jSpUuLPUgo/YHMSFxkw7oIWjZp0kSNY6GhoTzARERERETkUwL0UlDfWRF8LMN9xcH06ZCQEFWzMTg4WFq1aiVvvvmmCjQiEFmvXr0iH5uSkqJuVsePH1c/T5w4IWazuUz7kpgQL56A/cxNT/PQc6frYh/RICg3Pcjr++epfcRriCmR/r6PfJ/6/muop/epI5PJpDLXAwJ0MXwVwFgVEREhgYGBZRrHDAaDTJgwQbKysqR9+/Yq0/Ghhx6SH3/8sdjsRk+MY8DPh7LhOOYfn4Ecx8pz/Pid0lfHMb3AxTc4ffp0mZ8D4x/G3tzcXHW8icfRW/he5HH01/ejS+OYpgO33Xab1rhx40LLH3jgAa1mzZrFPvbRRx/VsBvjxo0rWJaamqo1aNBAu/HGG4t97LRp09RjeeMx4HuA7wG+B3znPXD8+HFNbzAWRUVFOR1ngoKCin3s888/r/ZrxIgRmsViUcsyMzO1Vq1aaQMHDiz2sRzHvP9+5I3HgO8Bvgf8YRzTi23btvHfFP9N8T3A9wDfA+L745guLqkh88NZEXwss61f5Yz1/tGjRxcsw5TsYcOGyeLFi4t97KRJk+w6hSKjBFkhmL6mt6uNuLrXuXNn1UCgTp064m/8ff+A++j7+BrqA66k6Q3GMWQYIiPDdvwozTh28803qwxHQMb+tddeq5qmaZpWsNwRxzH94OeDf/D319Hf989X9lGP45hetGnTRr12NWrUKPP5mC+8B3wBjyOPoV7wvai/4+jKOKaLiBqmjOEkDVNXbJu67NmzR9q1a1fsYzt06KB+olaWLaSF4gStOGgoY9tUBvRejB9vivr164u/8vf9A+6j7+NrSM7GMYvFIvv27bMbt8o7jpWE45j+8PPBP/j76+jv+1dZ9tEf4WJbp06d3PJcfA+4B48jj6Fe8L3oW8dRF92or776aqlWrZp8+OGHBcsQbd29e7ddxiK8+OKLsn79+oLfr7jiCmnYsKFqDmOVnZ0t33//vbqPiIjI03r37i1169a1G8cOHDggP//8c6Fx7PXXX5cVK1YU/N6xY0e56KKL7MYxZEiiWQyanxWV1UhERERERKRHushsRFF9nKDhhAzF1WvVqiUfffSRjB8/XgUibU2ZMkUefvhhdWIHKMY/b9481SAGnahxwrZs2TKVETJz5kwv7REREVUmaEr28ccfy/DhwyUpKUkaN24sc+fOlWuuuUZGjRplt+706dPluuuuk4EDB6rfEUzEOHbllVfKoEGDVAfrVatWSWJioixcuNBLe0REREREROTDmY2AE6+9e/eqYGFYWJjMnz9fBRwdPf7449KnTx+7Zb169ZKDBw+qACRO+KZOnaqmriHLxF9gqty0adMKTfv2F/6+f8B99H18Dak4AwYMkP3796tMRVwImz17tnzzzTeFpkejy7TjhbRLL71U/vzzTxVsxGMffPBB9VxNmzb1m4Pu7/9+/H3/gPvo+/gaUmVQGd7nFYHHkcdQL/he9M3jaECXmAr5S0REREREREREROTXdJPZSERERERERERERL6NwUYiIiIiIiIiIiJyCwYbiYiIiIiIiIiIyC0YbCQiIiIiIiIiIiK3YLCRKsSBAwdk0qRJPNpEXrZixQp56623vL0Z5IeOHTsmH374ofiz1atXy/r168Vf5ebmqs+H+Ph48Vdnz56VN998U/zZli1bZNmyZeKvLBaLfPzxx3L06FFvbwrpSGJiotx///1ywQUXqE6rbdq0kbffftvbm6X7cXvGjBnStGlTCQgIkHXr1hW57h9//CHDhw+XmJgYqV+/vjz66KOSnp4ulR3GFBw73AIDA6Vu3boydOhQ2blzp9162dnZMnfuXLn88sulWrVq0qRJE5k4caKcOnXKa9uuRz/99JP06dNHqlatKs2bN5dXX31V8vLyilwf70kce7yPK6MdO3bIvffeq/5d4jg4+zeZkpIis2bNkk6dOqnjeuGFF8pjjz0mycnJhdbds2ePDBkyRGrXrq2eE6/Fhg0byrx9DDZShahXr5588cUXsmrVKh5xIi/Cl6AnnnhCTpw4wdeB3Oarr76SDh06yEMPPaS++PijcePGyahRo+SOO+6QnJwc8TcJCQnq5Hz69Okybdo08ddgcevWrdVn4MqVK8UfTZ48WQYPHqxOYnGC4W9wwn7ZZZepQAduRFajR49WQfYFCxbI8ePHZcqUKfLggw/KG2+8wYNUBIxnCOS88MILYjabVSDfGYzr3bp1k1atWqlgxN69e1XA8dtvv630x7ZWrVqSlZWlbhkZGfLzzz9LSEiI9O7dW/7555+C4/P555/LAw88IDfffLMcOXJEvVf3798v3bt3Z9D2PLyfrr76arn22mvVMdq0aZO6+Ll161an7zMEb/ft2ydGo7HI964/S05Olttuu01atGihLrTg37CmaYXWw79vBG3x/eDff/+VefPmyZIlS9Sxtl0/NjZW+vbtKyaTSbZv367en3juq666Sh3nMtGIKsjs2bO1iy66SMvNzeUx93ErV67Utm3b5u3N8AiLxaKlpqZq/uyOO+7QbrzxRm9vBvmR48ePq9vTTz+t9ejRQ/NHv//+u5aRkaFdcskl2iuvvKL5o82bN2t//fWXFhYWpu3du1fzN3FxcdqhQ4e0d999V2vZsqVffh/Zs2ePGsOuvPJK7eGHH9b80a+//qqdPXtWi4qK0tavX+/tzSEdwHveYDBob7zxht3ywYMHa127dvXadvmK7du3I+KgrV692un9HTp00EaNGlXh2+WrkpKS1Pvx9ddfL1i2ePFibdeuXXbr7d69Wx33b775Rqvs0tPTtejoaG369Okurf/PP/9oVatW1TZs2KAFBwdr06ZN0yqzt956S72XnJ3DIgZz4sQJu2WLFi1S6+/cubNg2YIFC9Syv//+u2BZdna2FhQUpD3//PNl2i5mNurE7t275b777pN77rlHDh8+LP7oxhtvVFd63n33XfFHSFt+55131BVUXNnyZ7gyguwCf7N27Vpp1KiRREREyIABA9TVH380depUldXzyy+/eHtTyEedO3dOfv/9dzXtFpDhgNvjjz+upmUhs8SX4UovruriajquFAMyN0NDQ9Vn/HPPPaeOga9DJoatrl27SrNmzdSUHGQE+Tpcibed2h8dHa2m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VauW+dtdf/31JqQxYQyj0kygAKEDMQQRriIm2DFBySmiqS8vZRKP0BZmhGHSzXtkeCJKJktReY3oQ2luWkGoIzsCfyhEKkqMY4dzNXfu3Gw2JsIhg1aYCUFZNAIkncH9AohyeZoExL4IRdznnuOaw4OLxRelWWS0hLCNb8yE2I/IUFqDhzDLUwhRtaG5CAJHWuB5TvZlRcELGjHLl30nM8xig/2bOnVqjqdkaRAU8mMbMC77TszeNiPm4yWLjzlhacFXmhMhCM+ZM8dsWxi7w07MQBNCsjtjZPz48eYFinhPOT8BTM5RCBVBfp4MiPscZ1j+j6Ace1m4EKJqEbPY+NRTT+W1DikkMe6TSD+r8D+uiOndu7dbY4013LBhw+z1zJkzXcuWLd2//vUvt+OOO7qpU6e6Tp06uQ4dOrhnn33WXXXVVe64445zsfPbb7+5zz//3NWrV8+tuuqq7vnnn3eHH364W7BgQXabl19+2bVq1cq98847btttt3ULFy50d999t9tyyy3dwQcf7KpVq1bQYyh2uDXvuusud+GFF7rvvvvOrtP77rvPtW7d2u28887uhBNOcP369ctuv+mmm7p11lnHvfvuu2611VZzsfPzzz+7Cy64wI7h0EMPdb/++qt77733sp81atTI3XDDDfYZfP31165hw4bu0UcfdbvvvnuB914IEQs8H3k28Lzcd999Xawwxnbr1s298sor7pdffnHt2rVzEydOtDG6LH744Qe3zTbbuJNPPtlNnz7dtW3b1v3tb39zMfLZZ5/ZcdWvX99ttdVWbvDgwa5WrVoV+t0lS5a4XXbZxZ133nmpmGfBrrvu6gYNGuTatGnjbrnlFvf666/b+HTSSSfZONy9e3ebi7311lvu7LPPtu/lxBNPdLNnz3abbbaZ/Q3mZRtttFGU4/aee+5p8w7mF/DQQw+5c845x33wwQfZbY499lj7nPkxcB/279/fffzxx2711Ve39z799FObjwohRMj3339vzwyeieutt5478sgj3fbbb5/9/Oabb7bnSLNmzdwzzzxjz0vGiaOPPtp98803bsKECe6TTz6xMbJHjx62VvIcdNBBbu2113bnn3++e+KJJ2wM5vncpUsXt8oqqyzTfgBrFLZZvHixrcN4hjPesU916tRZpu1Gjx7t/u///s90iPA499hjDzd58mT35ZdfuubN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mWOF7soIifXr13dXXHGFZWG+++67lgHo4fVuu+1mjVNoeIM/Y6dOndxOO+2U7cDNe1988YXbYostXGyQqbj++utbmbffV14/9dRTrkWLFjnbLl26NFti/fPPP1vHaUrL99tvv5zvRAghhBCispHYKIQQQghRpBx55JEmZl166aXu22+/dY0aNXJpgFJvmrqccsop7uyzz875jMy+o446yrIgv/vuOxNS8TGkfDw2+M7xZfR+kjS4YX95z7PeeutZZmaDBg2y73355ZdWDv7000+7rbfeuiD7LoQQQghRGiqjFkIIIYQoUq666io3YcIEE+6mTJni0sLqq6/urr76ajd48GAT6EJoejN37lx36qmnmn8jglxsQiMZmmQg1qlTxzplk6kJtWvXzhEaP/nkE8tSTAqK/A7l5C+//HKl77sQQgghRHkos1EIIYQQoohBbGzevLkJjoVm5syZ5iW51VZbVWj7du3auS233NK6T1eke3MMUBpNqTfZl3379nUzZsyw5jazZ88ucdyUiuNN+eCDD9prGvrgQwnXXHONlU3369evIMchhBBCCFEaymwUQgghhChi6O5caKHx7bfftg7KdGHedttt3QUXXFCh37vuuuvc2LFj3fXXX2+/P3nyZBc7b7zxhmvdurXr37+/ZS3S1AXB9N///neJbemqjRD566+/WhYq54kScujWrZs1+hFCCCGEiA2JjUIIIYQQomAsXrzYSorPOOMMt2DBAvf8889bN+X58+eX+7tk9m266aZuxIgRJjwecsghLnboGo1HpmfUqFHup59+cnfddZcde8jUqVPt+0Fk5DM6T1NCDhtuuKFbe+21K33/hRBCCCHK4z91GEIIIYQQQlQSYSflt956y7L6unfvbq933XVXExAzmUyZv/fRRx+5vffe21144YWud+/e2fLiNFCzZk3778CBA92kSZOsc/bXX39tZeGUVZOluWjRIvf555+7u+++28RUPhNCCCGESAPybBRCCCGEEJUCYuHIkSPNb/DNN9+0zDwy9zbffHN3+eWXu+OPP97dcMMNlu134IEHui5dulgZMcyZM8cyIGmKQiMVICMwtuy+H3/80b3yyiuufv365XpP0o2aTtS+KQxl5PwgPsKjjz5qDW9i96EUQgghhAhRGbUQQgghhKgUyNojCxEx0YuEdIqmCQp+i9tss439l07TCHUdOnRws2bNsu0aNGhgzWMQKT2xCY14TzZq1MgE02HDhrklS5aUuf0GG2yQFRrJbORYW7Rokf0cwVVCoxBCCCHSRnrqTYQQQgghRKrZfffd3WGHHeYeeOCBbMYiUA5NJiDv0RQFUREQIR977DHzLFxllVXMkxFRLlZo2HLRRRe5U089tULbf/nll1ZCPm3aNDdo0CDXq1cv17Zt25W+n0IIIYQQKxOVUQshhBBCiErjk08+cU2bNnUvvviia9KkSfZ9hMV+/fq5Dz/80LL5EOLwLhw/frxr3769bcN7lB37Jikx8cMPP9i+0S164cKFbvjw4e6rr75yRx11lJVC5/Oe/OCDD9wll1zi1lprLesK3qZNm4LtvxBCCCHEikJl1EIIIYQQotIgg/H000+37tMhZDfSFOaAAw5w/fv3d82bN3d9+vTJCo2w8cYbRyE0/vbbbyXe8w1qKPP2omGdOnVc586dTTD1kNXZqlUr+3fDhg3dhAkTrKxcQqMQQgghqgrKbBRCCCGEEJUKpcMIbTfddJPr1KlTTtbjzTff7FZbbTXL9KN8Oib++OMPd+edd1qpNM1bmjVrlvP5brvt5r755hvrrE2XbBg9erR1nZ43b55lM5L1SEMcGuOQ0SiEEEIIUdWQ2CiEEEIIISqdcePGuYsvvtiaosSQrVgR8FOkTJpu2HSSfu6553I+v//++62DNg1i+vbta+/RJAZR8dNPP3V169a191q3bm0Zjf61EEIIIURVQmKjEEIIIYSodCiZ3mOPPazpy3nnnZeKM/D++++7bbfd1prU0Dl75MiRJi6GcDzvvfeee/XVV63T9lNPPeW6du3qPvvss6yoivBYr169Ah2FEEIIIcTKRWKjEEIIIYQoCDNmzDBPRkS8jz76yO25556pORPXXnutu/76623f11hjjez7P/74o/k08j6NcBAdx4wZ4zp06FDQ/RVCCCGEqCwkNgohhBBCiIJxwgknuMmTJ5uP4fPPP+/WXnvtVJwNmsQgJpK1iCdjMmuTEmu6Z1N6XatWrYLtpxBCCCFEZSOxUQghhBBCFIz58+e7SZMmuV69elkDlUJCeTRNanbYYQdXo0aNcrd//PHHrYx69uzZbrPNNnO//PJLTpajEEIIIUQxIrFRCCGEEEIUNWQp4ht5++23m+C5zjrrWJblpptuWu7vHnDAAW7NNdd0G220kYmOU6dOrZR9FkIIIYSIlWqF3gEhhBBCCCEKyaBBg9xLL73k5s6d6xYuXGjNX4YNG1bu7/3666/WMIYycJrBkKEphBBCCFHsVC/0DgghhBBCCFHZLF26NFu2PWXKFNe9e3e3wQYbZLMVP//883J/77jjjrPS6ZkzZ7oGDRpU4t4LIYQQQsSLMhuFEEIIIUTRMGvWLLfffvu5G2+8Mfteq1at3G233WZZjXSP5rN58+a5IUOGuCVLluQ0sxk6dGj29ejRo93DDz8soVEIIYQQIkBioxBCCCGEKBpoRLPWWmu5Pn365JRR77777pbRuNdee7kePXq4Y445xt1zzz3uzDPPzG7HNtOnT8++TkvnbCGEEEKIykQNYoQQQgghRNGAN+P+++/vPvjgA1e7du2cz7p27eratm3rTjzxRHv9yCOPmDhJxiPw306dOtnfEEIIIYQQ+VFmoxBCCCGEKBpatmzpDjroIHfBBReU+OyVV15xNWvWzL6ms/SOO+6YfV2nTh3LdhRCCCGEEKWjzEYhhBBCCFFUfPHFF2677bYzMXGnnXbKvn/ZZZe56667zjIb33jjDbdo0SLzZKxbt25B91cIIYQQIk1IbBRCCCGEEEXH4MGD3ZNPPpnjwZjJZKzpy5tvvmn+jF26dHE1atQo6H4KIYQQQqQNiY1CCCGEEKLo+OWXXyy78YorrnBHHXVUoXdHCCGEEKLKILFRCCGEEEIUJffdd5/r37+/mz17tltzzTULvTtCCCGEEFUCiY1CCCGEEKJoadOmjf306NHD/fHHH65evXqF3iUhhBBCiFQjsVEIIYQQQhQt+DO2atXKrb766m748OHu6KOPLvQuCSGEEEKkGomNQgghhBCiqBk1apRr3769q1+/fqF3RQghhBAi9UhsFEIIIYQQQgghhBBCrBCqrZg/I4QQQgghhBBCCCGEKHYkNgohhBBCCCGEEEIIIVYIEhuFEEIIIYQQQgghhBArBImNQgghhBBCCCGEEEKIFYLERiGEEEIIIYQQQgghxApBYqMQQgghhBBCCCGEEGKFILFRCCGEEEIIIYQQQgixQpDYKIQQQgghhBBCCCGEWCFIbBRCCCGEEEIIIYQQQqwQJDYKIYQQQgghhBBCCCFWCBIbhRBCCCGEEEIIIYQQbkXw/8sZH+3FYZ13AAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 1320x385 with 3 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, axes = plt.subplots(1, 3, figsize=(12, 3.5))\n",
    "for ax, t, title in [(axes[0], t3, \"Table 3: optimizer\"), (axes[1], t4, \"Table 4: hidden layers\")]:\n",
    "    xx = np.arange(len(t))\n",
    "    ax.bar(xx - 0.2, t[\"paper\"].clip(upper=1.2), 0.38, color=PAPER_C, label=\"Paper\")\n",
    "    ax.bar(xx + 0.2, t[\"ours_mean\"].clip(upper=1.2), 0.38, color=OURS_C, label=\"Ours\")\n",
    "    for i, (p, o) in enumerate(zip(t[\"paper\"], t[\"ours_mean\"])):\n",
    "        if p > 1.2: ax.text(i - 0.2, 1.21, f\"{p:.2f}\", ha=\"center\", fontsize=7, color=\"#555\")\n",
    "        if o > 1.2: ax.text(i + 0.2, 1.21, f\"{o:.2f}\", ha=\"center\", fontsize=7)\n",
    "    ax.set_xticks(xx, t.index, rotation=30, ha=\"right\", fontsize=8); ax.set_ylim(0.6, 1.28)\n",
    "    ax.set_title(title); ax.set_ylabel(\"whole-model MAE\")\n",
    "axes[0].legend(frameon=False, loc=\"upper left\")\n",
    "e = f4.index.astype(int)\n",
    "axes[2].plot(e, f4[\"ours_mean\"], \"o-\", color=OURS_C, lw=2, ms=6, label=\"Ours\")\n",
    "axes[2].fill_between(e, f4[\"ours_mean\"] - f4[\"ours_std\"], f4[\"ours_mean\"] + f4[\"ours_std\"], color=OURS_C, alpha=0.15)\n",
    "axes[2].scatter([64], [0.7552], color=PAPER_C, s=50, zorder=3, label=\"Paper (chosen size)\")\n",
    "axes[2].set_xscale(\"log\", base=2); axes[2].set_xticks(e, e); axes[2].set_xlabel(\"embedding size\")\n",
    "axes[2].set_title(\"Fig. 4: embedding size\"); axes[2].legend(frameon=False)\n",
    "fig.tight_layout(); fig.savefig(\"results/fig_ablations.png\", bbox_inches=\"tight\"); plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4204a307",
   "metadata": {},
   "source": [
    "## 6. Findings\n",
    "\n",
    "**1. The data and the baselines reproduce closely.** Our copy of the data has 97.4 % of the paper's\n",
    "ratings, with the same distribution and sparsity. Every single-rating baseline lands within 0.005 MAE\n",
    "of the paper's Table 6: SVD 0.803 (paper 0.807), SVD++ 0.819 (0.822), SlopeOne 0.912 (0.916),\n",
    "Baseline estimates 0.807 (0.809), KNN with baseline 0.807 (0.812). This confirms the data and the\n",
    "evaluation protocol match the paper.\n",
    "\n",
    "**2. The paper's main claim holds: the two-stage model beats every baseline.** Its MAE is\n",
    "**0.777 ± 0.010**, against 0.803 for SVD (3.2 % better) and 0.811 for the single DNN (4.2 % better).\n",
    "It is also best on F1 (0.866) and the best non-SlopeOne model on F2. The absolute number is 0.021\n",
    "worse than the paper's 0.755, so the gain over SVD is 3 % rather than the paper's \"at least 5 %\".\n",
    "\n",
    "**3. Table 5 has the same shape, about 0.025 higher.** The per-criterion order matches the paper:\n",
    "Cleanliness and Location are easiest, Business service and Value hardest. Every criterion is\n",
    "0.02–0.03 above the paper's figure (mean 0.776 against 0.750).\n",
    "\n",
    "**4. The ablations do not support the paper's choices.**\n",
    "- **Embedding size:** smaller is better. Size 8 gives **0.752**, matching the paper's headline\n",
    "  0.755, while the paper's chosen 64 gives 0.777.\n",
    "- **Depth:** `[32 → 16 → 8]` gives 0.765, better than the paper's five layers (0.777).\n",
    "- **Optimizer:** Adadelta (0.751) and Adamax (0.753) beat Adam (0.777).\n",
    "\n",
    "The reason is the data. **84 % of test ratings come from users who have no rating in the training\n",
    "set** (most users wrote one review). Their user embedding is never trained and stays random, so a\n",
    "larger embedding injects more noise and more capacity to overfit. Training also stops after 1–3\n",
    "epochs because validation error starts rising almost at once.\n",
    "\n",
    "**5. The paper's very large errors look like dead networks.** The paper reports MAE 3.47 for the\n",
    "`[8]` network and 3.28 for SGD. That is the error of predicting about 0, which happens when the\n",
    "ReLU output unit is negative for every input and so gets no gradient. With the paper's N(0, 0.05)\n",
    "initialisation this happened in 1–2 of every 5 training runs here as well. This implementation\n",
    "re-initialises such runs (8 restarts for the main model over 5 folds), so those settings reach\n",
    "0.82 and 0.90 instead.\n",
    "\n",
    "**6. MAP, MRR and FCP cannot be compared with the paper.** A test fold has about 15,800 ratings from\n",
    "15,350 users, and only about 400 users have two or more test ratings. With one test item per user, the\n",
    "per-user ranking is trivial, so MAP and MRR are about 0.998 for every method. FCP has only about 300\n",
    "pairs per fold. The paper's MAP of 0.30–0.46 and MRR of 0.72–0.77 must come from a different ranking\n",
    "protocol, which the paper does not describe. SlopeOne's FCP is near 0 because it gives every item of\n",
    "an unseen user the same prediction, and Eq. (18) counts ties as discordant.\n",
    "\n",
    "### What was not specified in the paper, and what was chosen here\n",
    "\n",
    "| Paper leaves open | Choice |\n",
    "|---|---|\n",
    "| Exact data filtering | 8 ratings present and in 1..5, no anonymous users, one rating per (user, hotel) |\n",
    "| Number of epochs | early stopping on the 1 % validation MAE, patience 10, best epoch restored |\n",
    "| Top-K cutoff, relevance threshold | K = 10, relevant = overall ≥ 4 |\n",
    "| Precision/recall when undefined | 1, the 2018 scikit-surprise FAQ recipe (reproduces the paper's baseline F1/F2) |\n",
    "| KNN with baseline | item-based, Pearson-baseline similarity (user-based does not fit in memory) |\n",
    "| Dead ReLU output | re-initialise with a new seed, up to 5 times |\n",
    "| Framework | PyTorch instead of Keras 2 / TensorFlow |"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "77472695",
   "metadata": {},
   "source": [
    "## 7. Improving the model: DMCCF+\n",
    "\n",
    "**Where the paper's model loses accuracy.** The reproduction showed three problems:\n",
    "- **Most test ratings come from unseen users.** 84 % of them are from users with no training rating,\n",
    "  whose user embedding is never trained and stays random.\n",
    "- **Single-review users get memorised.** Most users have one rating, so a 64-dimensional embedding\n",
    "  just stores it.\n",
    "- **The two stages are trained on different inputs.** The Overall DNN learns from *true* criteria but\n",
    "  at test time receives *predicted* ones, which are much smoother.\n",
    "\n",
    "The paper's own suggestion is content features, but this dataset has no user content.\n",
    "\n",
    "**What DMCCF+ changes.** It keeps the two-stage structure (criteria network, then aggregation network)\n",
    "and changes how it is trained. Everything is in `improved.py`:\n",
    "\n",
    "| # | Change | Fixes |\n",
    "|---|---|---|\n",
    "| 1 | He initialisation, linear output on standardised targets, embedding 16, dropout 0.1, AdamW | dead ReLU outputs; memorising single-review users |\n",
    "| 2 | **Unknown-user token**: every user without training ratings shares one embedding; during training each user ID is swapped for it with probability 0.3 | random embeddings for the 84 % of cold test ratings |\n",
    "| 3 | **Joint fine-tuning**: after the paper's separate training, both stages are trained together on the overall rating, with the criteria loss kept as an extra term | stage 2 trained on true criteria but fed predicted ones |\n",
    "| 4 | Clip predictions to 1–5, deeper tower `[128, 64, 32]`, average of 5 seeds | small, steady gains |\n",
    "\n",
    "**How it was chosen.** Every setting was picked on an **inner split of fold 0's training data**\n",
    "(`dev_select.py`). The outer test folds were used only once, for the final comparison below."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "6d8aac59",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-11-12T18:04:50.386871Z",
     "iopub.status.busy": "2026-11-12T18:04:50.386816Z",
     "iopub.status.idle": "2026-11-12T18:04:50.390118Z",
     "shell.execute_reply": "2026-11-12T18:04:50.389861Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/markdown": [
       "**Selection on the inner split** (2 seeds each; lower is better)"
      ],
      "text/plain": [
       "<IPython.core.display.Markdown object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "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>step</th>\n",
       "      <th>inner_MAE</th>\n",
       "      <th>spread</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>paper model (as published)</td>\n",
       "      <td>0.7781</td>\n",
       "      <td>0.0053</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>paper model + clip to 1..5</td>\n",
       "      <td>0.7759</td>\n",
       "      <td>0.0064</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1&nbsp;&nbsp;He init, linear outputs, emb 16, [64,32], d...</td>\n",
       "      <td>0.7855</td>\n",
       "      <td>0.0400</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2&nbsp;&nbsp;+ unknown-user token (ID dropout 0.3)</td>\n",
       "      <td>0.7533</td>\n",
       "      <td>0.0002</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>3&nbsp;&nbsp;+ joint fine-tuning of both stages</td>\n",
       "      <td>0.7429</td>\n",
       "      <td>0.0060</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>4&nbsp;&nbsp;+ clip to 1..5</td>\n",
       "      <td>0.7427</td>\n",
       "      <td>0.0060</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>5&nbsp;&nbsp;+ deeper tower [128,64,32]&nbsp;&nbsp;(= DMCCF+)</td>\n",
       "      <td>0.7358</td>\n",
       "      <td>0.0030</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>tried: per-criterion user/item biases</td>\n",
       "      <td>0.7368</td>\n",
       "      <td>0.0037</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>tried: ID dropout 0.1</td>\n",
       "      <td>0.7396</td>\n",
       "      <td>0.0034</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>tried: ID dropout 0.5</td>\n",
       "      <td>0.7365</td>\n",
       "      <td>0.0003</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>tried: emb 8</td>\n",
       "      <td>0.7382</td>\n",
       "      <td>0.0007</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>tried: emb 32</td>\n",
       "      <td>0.7371</td>\n",
       "      <td>0.0037</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>tried: no criteria loss while fine-tuning</td>\n",
       "      <td>0.7334</td>\n",
       "      <td>0.0032</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>tried: wider tower [256,128,64]</td>\n",
       "      <td>0.7354</td>\n",
       "      <td>0.0027</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>tried: dropout 0.2</td>\n",
       "      <td>0.7398</td>\n",
       "      <td>0.0037</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>6&nbsp;&nbsp;5-seed ensemble of DMCCF+</td>\n",
       "      <td>0.7329</td>\n",
       "      <td>0.0000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                                 step  inner_MAE  spread\n",
       "0                          paper model (as published)     0.7781  0.0053\n",
       "1                          paper model + clip to 1..5     0.7759  0.0064\n",
       "2   1  He init, linear outputs, emb 16, [64,32], d...     0.7855  0.0400\n",
       "3            2  + unknown-user token (ID dropout 0.3)     0.7533  0.0002\n",
       "4               3  + joint fine-tuning of both stages     0.7429  0.0060\n",
       "5                                   4  + clip to 1..5     0.7427  0.0060\n",
       "6           5  + deeper tower [128,64,32]  (= DMCCF+)     0.7358  0.0030\n",
       "7               tried: per-criterion user/item biases     0.7368  0.0037\n",
       "8                               tried: ID dropout 0.1     0.7396  0.0034\n",
       "9                               tried: ID dropout 0.5     0.7365  0.0003\n",
       "10                                       tried: emb 8     0.7382  0.0007\n",
       "11                                      tried: emb 32     0.7371  0.0037\n",
       "12          tried: no criteria loss while fine-tuning     0.7334  0.0032\n",
       "13                    tried: wider tower [256,128,64]     0.7354  0.0027\n",
       "14                                 tried: dropout 0.2     0.7398  0.0037\n",
       "15                       6  5-seed ensemble of DMCCF+     0.7329  0.0000"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "dev = pd.read_csv(\"results/dev_selection.csv\")\n",
    "display(Markdown(\"**Selection on the inner split** (2 seeds each; lower is better)\"), dev.round(4))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "8b0f5ad7",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-11-12T18:04:50.390961Z",
     "iopub.status.busy": "2026-11-12T18:04:50.390913Z",
     "iopub.status.idle": "2026-11-12T18:04:50.402956Z",
     "shell.execute_reply": "2026-11-12T18:04:50.402609Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/markdown": [
       "**Outer 5-fold test: MAE overall, for users seen in training (warm) and unseen (cold)**"
      ],
      "text/plain": [
       "<IPython.core.display.Markdown object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "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>MAE</th>\n",
       "      <th>MAE warm users</th>\n",
       "      <th>MAE cold users</th>\n",
       "      <th>within 1 star</th>\n",
       "      <th>exact after rounding</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>method</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>SVD</th>\n",
       "      <td>0.8025</td>\n",
       "      <td>0.7380</td>\n",
       "      <td>0.8149</td>\n",
       "      <td>0.7347</td>\n",
       "      <td>0.4036</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Proposed (DMCCF)</th>\n",
       "      <td>0.7765</td>\n",
       "      <td>0.7384</td>\n",
       "      <td>0.7838</td>\n",
       "      <td>0.7491</td>\n",
       "      <td>0.4786</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>DMCCF+ (improved)</th>\n",
       "      <td>0.7374</td>\n",
       "      <td>0.7824</td>\n",
       "      <td>0.7288</td>\n",
       "      <td>0.7543</td>\n",
       "      <td>0.4892</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                      MAE  MAE warm users  MAE cold users  within 1 star  \\\n",
       "method                                                                     \n",
       "SVD                0.8025          0.7380          0.8149         0.7347   \n",
       "Proposed (DMCCF)   0.7765          0.7384          0.7838         0.7491   \n",
       "DMCCF+ (improved)  0.7374          0.7824          0.7288         0.7543   \n",
       "\n",
       "                   exact after rounding  \n",
       "method                                   \n",
       "SVD                              0.4036  \n",
       "Proposed (DMCCF)                 0.4786  \n",
       "DMCCF+ (improved)                0.4892  "
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/markdown": [
       "**DMCCF+ against each method, paired over the 5 folds**"
      ],
      "text/plain": [
       "<IPython.core.display.Markdown object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "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>relative MAE reduction</th>\n",
       "      <th>PLUS better on folds</th>\n",
       "      <th>paired t-test p</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>method</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>SVD</th>\n",
       "      <td>0.0812</td>\n",
       "      <td>5.0</td>\n",
       "      <td>0.000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Proposed (DMCCF)</th>\n",
       "      <td>0.0504</td>\n",
       "      <td>5.0</td>\n",
       "      <td>0.001</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                  relative MAE reduction  PLUS better on folds  \\\n",
       "method                                                           \n",
       "SVD                               0.0812                   5.0   \n",
       "Proposed (DMCCF)                  0.0504                   5.0   \n",
       "\n",
       "                  paired t-test p  \n",
       "method                             \n",
       "SVD                         0.000  \n",
       "Proposed (DMCCF)            0.001  "
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/markdown": [
       "**All methods, all metrics** (MAP/MRR are omitted: about 0.998 for every method, see finding 6)"
      ],
      "text/plain": [
       "<IPython.core.display.Markdown object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "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>MAE</th>\n",
       "      <th>RMSE</th>\n",
       "      <th>F1</th>\n",
       "      <th>F2</th>\n",
       "      <th>FCP</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>method</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>SVD</th>\n",
       "      <td>0.8025 ± 0.0023</td>\n",
       "      <td>1.0455 ± 0.0033</td>\n",
       "      <td>0.8397 ± 0.0046</td>\n",
       "      <td>0.7993 ± 0.0060</td>\n",
       "      <td>0.6865 ± 0.0178</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>SVD++</th>\n",
       "      <td>0.8191 ± 0.0019</td>\n",
       "      <td>1.0569 ± 0.0040</td>\n",
       "      <td>0.8417 ± 0.0036</td>\n",
       "      <td>0.8041 ± 0.0050</td>\n",
       "      <td>0.6819 ± 0.0210</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>SlopeOne</th>\n",
       "      <td>0.9120 ± 0.0021</td>\n",
       "      <td>1.2089 ± 0.0043</td>\n",
       "      <td>0.8679 ± 0.0012</td>\n",
       "      <td>0.9263 ± 0.0006</td>\n",
       "      <td>0.0322 ± 0.0053</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Baseline estimates</th>\n",
       "      <td>0.8066 ± 0.0019</td>\n",
       "      <td>1.0474 ± 0.0036</td>\n",
       "      <td>0.8408 ± 0.0048</td>\n",
       "      <td>0.8013 ± 0.0066</td>\n",
       "      <td>0.7052 ± 0.0241</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>KNN with baseline</th>\n",
       "      <td>0.8066 ± 0.0020</td>\n",
       "      <td>1.0479 ± 0.0035</td>\n",
       "      <td>0.8408 ± 0.0048</td>\n",
       "      <td>0.8012 ± 0.0066</td>\n",
       "      <td>0.7005 ± 0.0225</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Single DNN</th>\n",
       "      <td>0.8105 ± 0.0085</td>\n",
       "      <td>1.1261 ± 0.0154</td>\n",
       "      <td>0.8547 ± 0.0056</td>\n",
       "      <td>0.8381 ± 0.0117</td>\n",
       "      <td>0.6609 ± 0.0246</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Proposed (DMCCF)</th>\n",
       "      <td>0.7765 ± 0.0104</td>\n",
       "      <td>1.0981 ± 0.0098</td>\n",
       "      <td>0.8662 ± 0.0031</td>\n",
       "      <td>0.8582 ± 0.0074</td>\n",
       "      <td>0.6702 ± 0.0330</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>DMCCF+ (improved)</th>\n",
       "      <td>0.7374 ± 0.0044</td>\n",
       "      <td>1.1336 ± 0.0069</td>\n",
       "      <td>0.8645 ± 0.0049</td>\n",
       "      <td>0.8603 ± 0.0120</td>\n",
       "      <td>0.6868 ± 0.0340</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                MAE             RMSE               F1  \\\n",
       "method                                                                  \n",
       "SVD                 0.8025 ± 0.0023  1.0455 ± 0.0033  0.8397 ± 0.0046   \n",
       "SVD++               0.8191 ± 0.0019  1.0569 ± 0.0040  0.8417 ± 0.0036   \n",
       "SlopeOne            0.9120 ± 0.0021  1.2089 ± 0.0043  0.8679 ± 0.0012   \n",
       "Baseline estimates  0.8066 ± 0.0019  1.0474 ± 0.0036  0.8408 ± 0.0048   \n",
       "KNN with baseline   0.8066 ± 0.0020  1.0479 ± 0.0035  0.8408 ± 0.0048   \n",
       "Single DNN          0.8105 ± 0.0085  1.1261 ± 0.0154  0.8547 ± 0.0056   \n",
       "Proposed (DMCCF)    0.7765 ± 0.0104  1.0981 ± 0.0098  0.8662 ± 0.0031   \n",
       "DMCCF+ (improved)   0.7374 ± 0.0044  1.1336 ± 0.0069  0.8645 ± 0.0049   \n",
       "\n",
       "                                 F2              FCP  \n",
       "method                                                \n",
       "SVD                 0.7993 ± 0.0060  0.6865 ± 0.0178  \n",
       "SVD++               0.8041 ± 0.0050  0.6819 ± 0.0210  \n",
       "SlopeOne            0.9263 ± 0.0006  0.0322 ± 0.0053  \n",
       "Baseline estimates  0.8013 ± 0.0066  0.7052 ± 0.0241  \n",
       "KNN with baseline   0.8012 ± 0.0066  0.7005 ± 0.0225  \n",
       "Single DNN          0.8381 ± 0.0117  0.6609 ± 0.0246  \n",
       "Proposed (DMCCF)    0.8582 ± 0.0074  0.6702 ± 0.0330  \n",
       "DMCCF+ (improved)   0.8603 ± 0.0120  0.6868 ± 0.0340  "
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "imp = R.improvement(per_fold)\n",
    "show = imp[[\"MAE\", \"MAE warm users\", \"MAE cold users\", \"within 1 star\", \"exact after rounding\"]]\n",
    "display(Markdown(\"**Outer 5-fold test: MAE overall, for users seen in training (warm) and unseen (cold)**\"), show.round(4))\n",
    "display(Markdown(\"**DMCCF+ against each method, paired over the 5 folds**\"),\n",
    "        imp.loc[[\"SVD\", \"Proposed (DMCCF)\"], [\"relative MAE reduction\", \"PLUS better on folds\", \"paired t-test p\"]].round(4))\n",
    "full = D.summarise(per_fold, [\"MAE\", \"RMSE\", \"F1\", \"F2\", \"FCP\"])\n",
    "display(Markdown(\"**All methods, all metrics** (MAP/MRR are omitted: about 0.998 for every method, see finding 6)\"), full)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "2a5baf94",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-11-12T18:04:50.403778Z",
     "iopub.status.busy": "2026-11-12T18:04:50.403731Z",
     "iopub.status.idle": "2026-11-12T18:04:50.526164Z",
     "shell.execute_reply": "2026-11-12T18:04:50.525780Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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ZG3ZsEb/lq30PA8mBZ0endv6exNihKdPn8qlS5ckQ4YMEidOHH9vTsAcMx6rwG4rnjlzRrJmzSqBug94/2FQh1ixYoV7HEE3dG8tXLiwzfRz587pY1gGATzsv3lUV3/jdxERP0P0H2bMERERERERxVDuAoqpUqXSmz0MDoEbERHFbKwxR0RERERERERE5AcMzBEREREREREREfkBu7ISEZFV4qTJeDSIiIiIiIiiCQNzRERkVbhYKR4NIiIiIiKiaMKurERERERERERERH7AwBwREVkd2LNTb0RERERERBT1GJgjIiKrO7dv6o2IPHf48GHp3LmzlC9fXlq0aCEbNmxwu8zvv/+u81aoUEEaNWok3333nVgsFq/Wi/l//fVXad26tVSqVEnatWsnq1at4ktHREREFEAYmCO3tmzZIp9++qm88847MmXKFDl27Jj1sVu3bskbb7whq1evdrr8yJEj5euvv9b/hw0bJr1799Zbv379ZPjw4TJv3jy5ceMGXwkiIgo458+fl8qVK8uzZ89k9OjRkjt3bqlZs6aeO535+eefpVmzZhpMmzBhgv7ft29fGTFihFfrHTt2rPz2228amBszZozky5dPateuLX/88UeU7zcRkTfat28v27dvdzkPvgd37gysrP0LFy7ovhERRUYsi/3lWSKTTp066dX4Dh06yHPPPSdnzpyRv//+W39EIOAGZcuWlZQpU+p0e0ePHpW8efNqYK5nz566jrRp0+r6nj59KleuXNGgHk7UAwcOlCFDhnh1/M+ePSvZsmWTT8ZNklSp0/C1I4qkLRvW/Pe5rvQ8jyUFnR6d2/p8nbhoNX/+fD3fxY793/XOF154QRInTqxZcY507NhRzp07JytXrrROe+2112Tr1q2yefNmj9f78OFDSZAggc26q1SpIvnz59cMPGdw/r106ZJkyJBB4sSJ44OjEPxwzELlWB0/flz++usv3ecaNWpIoUKFPF52x44dsm3bNnny5IkUL15cKlasGG4evG+R2XnkyBHJmDGjBpzTpLFtw929e1cmTZoUblm0I5E9GpG2ItqwWbNmlUCCYP3ixYv1/xQpUki5cuXk7bff1nZ3oClSpIhMnjxZqlev7vC7CAG5Hj16WIN3+I2AbGKIGzeuvkfKlCkjL7/8svV1NOYpUKCATJs2zbreBw8eSJ06dSRp0qTW4wd4X8+aNUtOnz6t74mmTZvqbxp3j5u3xYDXYOnSpfp/kyZNpGvXrvqXKDrxfB48OCorOYUuMzNnzpRffvlFWrZsaZ2Oq/d79+613scJEllzaPDgJGaGk2SiRIn0ar4BJ09kzJn9+OOPGqzDvP379+erQkREAWHFihVSt25da/AMGjZsKIMHD9auprFixQq3DIIV+MF98eJFDUzcuXNHNm7cKNWqVfNqvfZBuVOnTsmhQ4eYvUERNmPGDHnllVc0GIH3FwLEeK8iGOQOlkO7sVWrVhI/fnx57733NOiGALPxPsbFXgShcZEWQb8FCxZoMAYXcM1txdu3b+sF27Zt20r27NltAnZRbfLie1G6/t4NEns8L3qp5MyZU/r06SPXrl2ToUOHagBr0aJFEmwQiO3SpYtNAHfTpk0a/EqSJIkGy/BeQqAYWcH4vjTmwWO4iIHArfE+Q+AXv1kMeB9/9tln+r7CxREE2+bMmSOXL1+WXr16uXwc373GtiBACvHixbOuGyUHEHRkYI6IIoqBOXIK3VQBPxrM0LgqVqyY9T4aTeiWisbY+++/b52OHw6YhsadcRJzBnVx0MgYNWqUvPXWWzYnOyKKPvHi2/7QJyLXcFEKWRVmmTNn1gDC9evXJXXq1OGWQWACgQf8iMQFLWT04IcguqN6u9779+9roA8ZIgjMffDBB/Lqq6/yZaMIdclDgAI9IoxAHAJrCDrUr19fChYs6HTZtWvXyjfffKNdq43gBAJuyPBC1220FeHff//VHhQobWIErd98803NNkKGk30mGOY1Z1iFIrTDUYvSyBxr3LixtrHr1aungVNc3EbWGYJVCOR9/PHH+l1QqlQpDeQnS5ZMg1R4TXE8f/jhB23LY1m8PgZnyyK4hYAVMnzxvYMgIepeAoJXH330kV6wz5Mnj3z44YeSKVMmfWz37t26PnxHoZ3vCvZn4cKFGhSzV7p0aQ3kAtaD7zfsx8GDB63z4OI+9gu/IwD/o9ePkUW3f/9+3bY1a9ZI1apVrcthfffu3XP7OIKi9ttihhICCCyjNE8gZjMSkf+xxhw5hdo2OXLkkDZt2mgDavny5XLzZvii8KlSpZKXXnpJpk+fbjMdJ3BcwUJGnSdwNQonNHSDICL/KFGmgt6IyDOPHz8Ol7lm3MdjjixZskR/QOKHILqcjh8/XoMX5u6nnq4X0/Djc+rUqdbspj///JMvH3lt7ty5+t5C5psBATUEGtC9zxVkaoI5qIFSJ+gJYQ6gIKiC+sLmTFIE8hD82LdvH181N9DVHd0+cfzQ9f3111/XgCba6WFhYRpoS5cunX4XIBiHrFtAQB/fOwj+I2BasmRJqVWrlrbTwdWyCLj+9NNPeuG8efPm8u6778qjR490nVgGQbUBAwZowAqvPx67evWqPP/881r3Eq85vp+wTmeQ7Yb3AOZ3B71u8H47ceKEdRqCx3iPIoiIfcLjCJYZEDBG12rz+9OA8gDuHncHAUz8ZkI3biKiiGDGHLk8yeAEg8LUuApnXIXCVdPPP//cpmsBgm/4UYHuryhmDfihgJMUrrZ6wugGi4LXrrL4jEw+4+ouERHRJ6OGuj0I076Z7HYeZP54A3WPkDWCOi8G3EdGCs6j5ukGZKKgThayzQHZJ/hhjB/EyBzCst6st2jRovoXmXPIdkHADz/WnTGWdbRtFLo15tDmQxYn6nIZsM94f7kr2o8MK8DgJMZ7b8+ePZothbpgBgxiYs8IyKHLpj3U/MIFW7QRETRBUCrUoH2Nru7IlEXAy1xLDdmNRs29cePGaXAJWWpGvUnUYsOyCRMm1Lp/6MmCY4mgG7rEImCGQCkurjtbFhm9COKh/Q/I2EPPFiyL1wy/EwDz4PsT3T0RaMP3GgKGRqYZMn6dwXcbLvQ76vpvL1euXNbfAMZvEfzeQE1r1LvGNiMD2fx5xT44eu95+rgBxw1Zi4ABH1DKx4DvbHR7JSKKCAbmyCWcZHD1HTdcAUOADichnHzR4MKJHnBVCidwNBYQmEMXHdR3QL04T06y5h8Irhq+aHQYJ3ki8r2jh/br3+fye17smyhQOMtgM0OXMG+g3tH69ettlkNhewzA4GzEcXSLQs0k8zLIfEPGCH4g4v+IrNfI7sCPd0/2A/OR51wFFoIBgiP2gzAApiHg6woCLxMnTtRu2kbgBu1ABInti+abIbiCC79oR2bJksXmMdSpQ1sTQRcEp3ARGCMRoxujK84u4qKdGROC0d5sA7LRUEsN3X2TJ0+uwSO0vY11IMPM+B/BMATXjPv4HkFdZ2SPYeAFvI54DxuPY14ERXHf1bLIoETtN2wHsuCQRYnvIXT/xOPoYYPtxA3rQWYc/qLsjbE+BN0QELR/DYz/sU8I4jp6zH4ZvE+NbTTPg6w5BAsRYEZ2IL5LjcewfnzvOjv27h43piOIaZTnMR9LwPe3+bUhig680BazeXNBj4E58hgaSKgXhx826N6KOiEo3Au4go9aDl988YU2zDBgBE6wOEl6CrUtnF0xNSC7oHv37jaNLXN9DCKKnOth/zV4iQLNe4PcZ8x17dDK58+LrmQoxYDsE2QKodYSaqYik8XI7sF9FG3HKOTIdsPFLUzDxStc1EKZCJw3UUfKyADxZL2o+4TMEKMWLGo6oZg+ah25yixCQx5BOXQ9C/YsMF8JlR/bji6mYhqCLq6gbYjgHY4TLs4iqwjdChEcQcDCUXdADHqCbqyY9/vvv7d5DJ8TvOeRBWVA/THUwENmqJEl6s1FXAR0PKthHLU1wrwJ/qMtjYCckSWG7wqjrAyOL4L0xvpwHNEuNq/fCGIhIxevC0aDNjK+8D/a9pjf1bL4jkCmHZ4LGXEIzuH7CseyRIkS4WpaIsB68uRJ7QFjrA/vHwS+kPXnaP8R7ML7BIE+o0ab8fz2mcNIEkAADPXujHmQqYbEACQPIKCI9w+eC8cIz4dpeI8haIjjac/d48bz4PvZXDfUvH/oQovHvL24Q+QLvNAW+Bf0GJgjp3BSTZ8+fbjGlPEDwCiEasDVNBSAxY8CZM7hxO1JWrgB9StwwsNVPWdwsnR0wiQiInInKoJQ6Nr0ySefaHcy1GfCSKuo4YQ6SMZIlPhBu2vXLus2oM4Tsn+QdYJsIPxARs0ndCczttGT9aLbIc616KKGH4b48Y150B3Nk33FPAzMkbvMOLT3HBW8tx9Rc8qUKXLgwAHrBVYEMzBgBIIVn376qc38GE0T9YlRJwwF9xGgNkNGqTkoB6htNnr0aO0q6Sow5+wiLj5HnnWFfShRyZvuuKjRh2PhaBmjy7vxGIKc+L5AMA+vAQJYCBJhkAgMJoOeL7///rsG0hDIQqAf3VCxvKtlcbyRLYfvK3zn4CI8ggC4SI/XEFl7xmio+A2AoBnWh8w6/C5AoM4I7CFzzrwvxkUCPCdqEh4/flyf05zhjNfNeP+tW7dOv99Q7w6/GYzvQvxeQRfsf/75R//iOfBceBz/I3kAo6ZikDpk1RlZbyjBgwCeu8eRTWi/LWbI7EQwEF2AiaITL7QFDwbmyClcqcQJFUOF44cDoOGPoBuusBkjRBnQgMIJCSdMLGs/GIQz+EGB1PAVK1ZoVwVPu74SERHFBBjtEJk8yJjAxSv8IDRD1z7UycIPN0BGCH7AImMIQTn8qLRfxpP14oc0bshKQuMcP4CNbBgibyH7yejxgICQ0e5D0MHdQF6bNm3S4Iy51wOCGFgnBiywb/e1atVK69ZhoDB02/aEEUR2l73o7CJuTAlEe7MNaBPj5mwZ8z4hExeZtggiIWiFgCSywPD9guw1BJQQjEMACvfRCwY3rN/Vsgia4nF0HUVwDa8X6s0hYIj2OzIYkRWCYB8CeAhsYR6MaIq/6MKK58ZvCWevAaZ169ZNByBBprD5ODVo0EC3Ed+DyIBDt14E0MzrMv43X9y3f2zZsmVawxPfkxhBFoFjZMp9/fXXGkx09bj9uuzNnz9fl40J7y8KTTHl+40iLpbFXW46hSzUh8BJEo0tdKPBFU80rnAFDd0EcHXJHk7iWAY/PnB13z7bDo02pL7jBI+TK056uLqF+YzMAG/gxwhO+J+MmySpUoevi0JE3tmyYY3+LVvpeR46Cjo9Orf19ybECAhs4FyOTBI25D0/ZsF+rBD4wEVWZFEZ3RNRJw5tMwTREGQDdIlE1tQLL7xgHdgBteSQCYq2Y6ZMmXQaulwimwpZVQhuANp+HTp0kMWLF8vy5cs1S8oRBAMRFDF3PcWFXwRkMMCEeUAJT9uKyBqzz8yL6VDmBcF24wK5GWqpFS5c2Frv2YDjjn1GcMl4DF3iEfDCdGRFYp32Nf2cLWu8buhmimCcefA3QCYeXnd8n9jXKMRvAQR60RUXXe0RuDUHTc3fRfgf7zEM4IBtw3qNQUewvfgdgvWYL+Ab8yAj0sieM6DOILbLGJjEgAw9vBewH45qKjp63HgevO/sL36gCy62GyV+HK2PKCrxfB48GJgjjxoF6IKDkzUaNKjhgBOzI7j6b4zG6qjYL4YyN4pWo7GFrAFcTcMVrohkyjEwR+RbW/79b0TKshWr8dBS0GFg7j9syHsvFAJzgGwqY3RgZEh9++230rdvX82Msm97jR8/Xvr06aPT0LbDqKno9ocujDhWyH5CQAeDmBh1drAeBPHQ1dG+50XTpk21uyT88MMPGuhDTwxkbeHCMLq8onbce++959U+BXJgzlfMgbmY/F2EoCEu1iPbMlAgAIgAJILQRNGN5/PgwcAcBTQG5oiIyFMMzP2HDXnvhUpgDnAx9s8//9R9Rg8HdFW0D0Sg1AkuwGJETgPmRyYc6szhf2TfIQCH8icGBOuQ6eUIMunMXRHR3RKja6K7NwJrGLk1IoE1BuYCJzBHRPwMhSoG5iigMTBHRESeYmDuP/wx7L1QCswFGwbm/utuia6oGGQmJuF3ERE/Q/Qf2874REQU0k6dOKo3IiIiCg7oHhrTgnJERPQ/DMwREZHV5Qvn9EZERERERERRj4E5IiIiIiIiIiIiP2BgjoiIiIiIiIiIyA8YmCMiIiIiIiIiIvIDBuaIiIiIiIgo2p06dUqGDh0a1Ef+q6++kt9++03/f/bsmbz66qs6Ui4RkSGu9T8iIgp5JcpWDPljQEREFBN88cUXsmrVKokVK5aOrJorVy5p1KiRlC5dOtw8H3zwgRQrVsw6/ZdfftEbgkC1atXSaQ8fPpTZs2fLhg0b9H6pUqXk5ZdflkSJErl93Hges1deeUVq164dqX0cPXq0tG7d2np/7Nixuh+RXW9MsnXrVnnuuef0/9ixY0uqVKlk4sSJMnDgQH9vGhHFEAzMERGRVbx48Xk0iIgoZOXrfjVK1394alqP592yZYs8ePBAunTpItevX5c9e/ZI1apVNSA2fvx46zwrV66UDBkyaPDMMHLkSDl37pzUrVtX74eFhUmNGjUkTpw40r59e0mdOrXs2LFDqlSpItu2bXP7uHlbDHny5InUsTh79qysX79efvrpJ+u0ypUrS/r06SWYde3aVapXry7vvvuuHm8iIgbmiIjI6vzZ0/o3c9bsPCpERER+hkyrFi1aWO8jMFauXDmpU6eONejWvHlz+fXXX2XcuHGSIEECDaIh4FOwYEHrcv3795ekSZPKmjVrJF68eNbply5d8uhxR9viCIKHv//+uwwaNMjtvi1YsEAqVaok8eP/76IgAnXImMudO7dm0xUpUkQOHjyo661YsaIGJWfNmiV///235M+fX9555x3r8pi/ZMmSOu/+/fs1qIggmAGPIwtw3759sn37dvnss88kTZo08uWXX2oQMmfOnNK7d2+dNnXqVD0OnTt3ti7//fffa/YisggtFotux9q1azWI2atXL81oBHRTReD0xIkTUrNmTYevaZIkSXRfq1WrJqHm2+lzJFj16NzW35tAAYo15oiIyOrc6RN6IyIiopgHgSUE5YyaZYBAEoJQxjQEkMwBqSdPnsjcuXM1+GYOugEy7dw97g0E8tatW+fRvJs3b5ZChQrZTPv333/l2LFj+v8///yjQbA7d+5oUG7w4MEayEKXWnTPRTASXXgNmL9t27Zy8eJFKV++vGYNDh8+3ObxDh06yOXLl6Vx48aSLFkyeemll3TfkYl4+PBhKVu2rAbWMmXKpIE8s48++kiyZMmi/3fv3l0mTZokFSpU0MAg/uJ5AetEFiOCjlj3vHnzHL6O2FciImDGHBERERERUYDImzevHDlyxGYaAliff/65NGnSRDPREJT6+eef9bErV67I3bt3JV++fA7X5+5xw+LFi7X7qWHOnDnhAnneQCALGW6uIGPNGBwCGWgIeCHwCOjyisw8cwCtYcOGMmbMGP0fmXcvvviizmN0GUXG38cff6z/o4sugojYp+TJk2swE4G56dOna+ANxwWZdNjGjRs3aoAQAUFk4yHgdvr0aUmZMqWuC12Nv/76a31+ZCxinciKw/Y7Oq7p0qWTCxcuRPjYEVFwYWCOiIiIiIgoQCBAhC6rZsiiQzdPBOeQVYYsOoPR1dPZSKDuHjeg62ibNm2s941gFwaMQDAQkI2GzDOjyyvmMQKE9rAPjx8/dvmchQsXtglmmTPscB8BMTNkrhnQ5ff+/fsaJMuRI4dOMwcC0UUWXWURlDMg8/DAgQMacMQ+IPiIZX788UcdpAL7s2vXLokbN652X0WXVtyOHj0qBQoU0Lp7RYsW1aCcsf/YDnsYaMMI6hERMTBHREREREQUABAEQkYWMuPMjEEbkB22aNEim8cQpMuePbt2nXQUJHL3uLsac8WLF7cGClHf7fbt29YAHkYhdQZBLHdZY6jp5uo+joeZObiI4NfTp091RFuDOcMP05EpaIb7RlCzXbt22vUVXVgxwu3ChQuty2FkVftjgW6u2B/7AKejgCeChejOSkQErDFHREREREQUw6EW3LBhw7QGm7mGnKFv3746wmnt2rXDPYb6cQgwIdvLgKAVum168rgryDpDkAo31GpDXTrjfrNmzZwuh5FJMQiDLyE779GjR/o/th1ZfsiscwRBSGT3IdAJV69e1Tp92Acw/o4YMUIHxkDdOkC9u5s3b+oAFcZ+Yl3Pnj3TedDVde/evdYA3IoVK2yeF/Ohvh5GwSUiAmbMUVBo3ayRNUWdXEMjC4V50WjiEO2eC5Xj1qjOf43EjBkzRnpdoXLMfInHjMeMiMhRXTd02UQXSwxYgGkYQdQezrcYodURjDaKbqaVK1fW7qDoRon1tWzZ0qPHo0L9+vXl9ddf1+fFYAu+gC6k6EqK7DXUkJs/f77TeTHPp59+qnXoUFtu9+7d0qhRI90uIzsP3VdHjRol77//vnU51LZDPTmMiouutgiYIqg3c+ZMXSdq4qFLLIJ0x48fD1djDiPfok6gu5p+RBQ6Ylns83+JAggaKtmyZZOTJ08yMOch/vCPGB43HrPowPcZjxnfZzH3s8kLDIHdVjxz5oxkzZpVAsnWrVu1jYsAUaJEiSRXrlxax8zcnRPzJEyYULPW7K1evVoDeOYg3rVr1zRghXWgC6p9Npmzx/E86AaKaa4YNeYQmPLkczVkyBDt7orBKgCDLCDwhWy09evX62tmXHzHem/duiVlypTR+whWYv569erpfQy8gOw1ZKIdOnRIt9U8qqz9+gznzp3TDDdMx/E1Q9dULGdkApoha27nzp16XEqXLm1T9w+Dc5w6dUq7q2LQCmTcIXsPmjZtqoNLNGjQQELRt9PnSLDq0blttD4f243Bg4E5CmgMzHmPX+AREyrHzehS4ou6J6FyzHyJx4zHjO+zmImBucAVyIG5UPhcIXiFIJoRXIsMIzDXpUsXianQjRUZj8jMC1UMzPkO243Bg11ZiYjIyhhVjQWJiYiIKKoh2w9dSUMFsgNDOShHRI4xMEdEREREREQBbeDAgcyKJKKAxMAcERERERERBTQMXEFEFIhi+3sDiIiIiIiIiIiIQhEDc0RERERERERERH7ArqxERGTVqVMnHg0iIiIiIqJowsAcERFZ5c2bl0eDiIiIiIgomrArKxERWR05ckRvREQUeu7cuSNvv/22FChQQC/U9OrVS8LCwjxa9tixY9KlSxcpUqSILt+6dWvZs2dPhJ8jMttCREQUSJgxR0Hh518XSarUafy9GUQBb8uGNfq3bKXn/b0pRDFKj85t/b0JRFGuRYsWcu7cOZk5c6YkSJBAXnvtNalTp45s2rRJ4sSJ43Q5BMyqVq0qhQsXllmzZkn8+PFl6NChUqVKFdm5c6fkypXL6+eI6LYQEREFGgbmiIiIiIhC3OrVq2XZsmWyYcMGKVu2rE6bMWOGPPfcczJv3jzNgHNm+fLlcuHCBVm3bp3kyZNHp33//feSMmVK+fXXXzXzzZvniMy2EBERBRp2ZSUiIiIiCnFLly6V1KlTS8WKFa3TcufOrV1JlyxZ4nLZR48e6d/EiRNbpyVMmFAz2548eeL1c0RmW4iIiAINM+aIiIiIiEIc6ouau5waMO3o0aMul23UqJFkyZJFhg8fLhMnTtSAHP5PkiSJtG3b1uvniMy23Lp1S28GZPLB06dP9UYxh/F68HWhYBHd72V+hmI2b8ouMDBHRERERBTiMNiCOePNgOAaar25gi6ryHJr2LChdmGNHTu2JEuWTBYtWiTZs2f3+jkisy3jxo2TYcOGhZt+5coViRcvnstlyT+uXr3KQ09B4dKlS355Xn6GYqbMmTN7PC8Dc0REZJXzufw8GkREIQhdT2/evBlu+sOHDyVRokQulz106JDUqlVLGjduLG+99ZbEjRtXpk6dKvXr15e//vpLypcv79VzRGZb+vXrJ927d7fJmCtXrpykS5dOMmTI4HJZkmjP9kFAIW3atBzQg4JCdH/H8DMUPBiYIyIiq3TpM/JoEBGFoBw5csjWrVvDTT9z5ozkzZvXbZYagnFff/21ZsvBmDFjdFCIjz76SBYuXOjVc0RmW5InT643R12KOJprzMTXhoKFv75j+BkKfBz8gYiIrO7dvaM3IiIKLTVq1JDz58/L4cOHrdPCwsJkz549+pi7wR/Q9dQIyhmSJk1qHRjCm+eIzLYQEREFGgbmiIjIat+ubXojIqLQggEcChUqpF1RUeMN3Ubxf/r06aVDhw42XUMzZswo3377rXUaurBiUIZJkybJs2fPxGKxyKxZs2TDhg36mLfP4el8REREwYCBOSIiIiKiEIeuqIsXL9YMN9RjS5UqlY6OumzZMs18M9c0QoHzu3fvWqc1bdpUu7GOHz9eB2jA7b333pPRo0fLq6++6vVzeDofERFRMGCNOSIiIiIikpw5c8qKFSvk3r17mvnmKAiGUeaQNWdfx61nz556e/DggS7raFRVT5/Dm/mIiIgCHQNzRERERERk5SyoBqgjh66szmBE1cg+R0TmIyIiClTsykpEREREREREROQHzJgjIiKrLNlz8WgQERERERFFEwbmiIjIKnPW7DwaRERERERE0YSBOSIisnr8+JH+jRcvPo8KURR78uSJFrc/ffq05MuXT55//nm3y9y+fVtWrVolly9f1iL8tWrVkgQJEni13tmzZ8uZM2ckWbJkWi/MkCtXLmnQoIEP95CIiIiIYkxg7sCBA/Lw4UP9P1asWJImTRptUJobhNFp7969kiFDBh2C3dH9QBZM+0JE0Wvnln/1b9lK7gMERBRxCLDVrl1bA2wVK1aUDz74QMqXLy/z5s2TuHEdN882bNiggbNChQpJwYIFZfPmzXLt2jUN1OXNm9fj9R47dkyDdiiqjzbZ48eP5ZtvvpE+ffowMEdEREQUzaItKtaoUSOpWbOmdOnSRTp37iylS5eWTJkyycyZM8UfqlevrleMnd0PBHv27JGrV6+Gmx7d++JsO4iIiMixjz/+WC5cuCDbtm3TczaCbn///bf88MMPTg/Z0KFDpUKFCrJ+/XqZOnWqbN++XVKkSCFjxozxar0I1o0aNUo+//xzmTx5srz44os6vVu3bny5iIiIiKJZtKarNW7cWHbu3Km3ixcvyiuvvCIvv/yy7Nu3T/ytaNGiAZdhVrVqVfnpp5/8vi/OtoOIiIgc+/nnn6VNmzaSKlUqazfS+vXr63RnkPGWMmVKm/vojmrOsIvIehHkQ3ZdkSJF+HIRERERRTP/9CP9/+6sr776qjx9+lSv5hoOHTqkgbtdu3bJ2bNnxWKxOFz+zp07cvjwYf3rDLp37N+/X27evOl2eyZNmmS9Ygy7d+/W5QFBRNRicbYt3j6XN8s52090V8WxO3funDXYef/+fbf7gqvox48ft1nXpUuX5MiRI1qTxp6718PVdkR2H4mIiILRgwcP9FyM7qhmuI/zpTPIjDt48KD06NFDxo4dKy1btpSECRPKkCFDIrxenNv/+usvXScRERERhVBgDsLCwvQvrvYaBg0aZO3uWq5cOa2VNmfOHOvjCAJ1795d0qdPr91js2fPLk2bNtVaKgYEierWrSsZM2bUefAXdVOePXvmdFvsu3/iufv16yf58+eXypUr61VkZKLZB7Ui8lyeLOduP9944w25d++edgXG8cIN9WKc7UuvXr0kZ86cUq1aNd2P4sWLy9atW3XeMmXKSJUqVfQ5tmzZYrOd7l4PV9sR2X0kIiIKRsaFKHP2GyDL7datW06Xix8/vnZdxQU3BNpw8QzriBMnToTXiy6uSZMmlVatWkV6v4iIiIgoho/KiswpZFQZmVvDhw/XIBG6uBpQnNgMQSB0d0VQKE+ePLJgwQLtNokGKQJNsGjRIi1kjAAPsr4QDAIE0bJmzarZWOhuiWLJPXv29Hh7ly5dqgWVcaUZjV2MajZw4EBrd5CIPpcny7nbT2wXGt4DBgyQ3r17u92Xf/75R9asWaPFoXHsCxcurMWgp0+fLh06dNAg2UsvvaSBM9Su8fT1cLYdvthHR/DDwvzjAvtCRL6TPlMWHk4KWZ+MGur0sWnfTHb62Nq1a716HgTYAJnkOP8abty4oQMymKeZIXiGC4azZs3S+5ivRo0aevHtl19+8Xi9xl+cqxGYa9u2rWbeOXte+u+YGQFQIiIiooANzCE4hIwqo9GIhiKKFKOxaN/4QcAFGXUIiuHq8OrVqzUQdPfuXa2lkiBBAuv8yLYyLFmyRLtXotAxgkGQL18+efPNN7ULiDeBOXS1NbqD4GoysrkQyIrsc3mynLv99Bbq+RkjtmHQDWQBIqMNQTlAYxOBOUdBPlevhzNRtY/jxo2TYcOGRfg4EJFrOXI9x0NE5ABGLnUGJSG8hQx0nCfNy+JCVY4cORyu79GjR7Jjxw7NYDc/jtpwyJI3pnmz3t9++01OnDih7ZuI7EOoyZw5s783gYiIiIJQtAbmkBk3bdo0632MJoauldevX9dMNJgwYYKMHDlSa9AhaypevHgaxEMQybhajCwuBIWwLLpgNm/e3BpAw0ASWBaBNCM7D3AfmVho2BpXlN3JksU2cwTruH37tvV+RJ/Lk+Xc7ae37PclSZIk4RqYmIb6NLiCbhSSdvd6OBNV+4juxej+akDAENl7REREkfXeIOcZc107+LarZ5MmTfQiFnoPoK2Ai5UrV66U/v37a3ANNm3apOfTrl27Ws/lOIcajwO6s+I8akzzZL244IbR1JG5XqpUKXnhhRd8um/BiNmEREREFBSBOXtoDCIgg/pkCMxt3rxZ+vbtK7///rtN5hQyvIy6ZIkSJdLujufPn9eumWh8ol4aumK0b99es69ix46t3TrsodssGqjOukl6K6LP5elyrvYzOnjyejgTVfuYPHlyvRFR1Njy739d8spWrMZDTGTi626MQ4cO1ZISKPuAwNj8+fMlW7ZsmlluPNeff/4pX331lXVghtGjR2uQDhfIUPsWg2ctX75cz5/GMp6sF3AeXrhwoYwfP55dNImIiIhCNTAHuGJrDP5w4MABDeg0bNjQ+ji6bWBUVAMyulAHBdleqImCGxqoqPuGYE7NmjU1aDR37lxr1037ZX0los/lyXLu9tMIUrrqWhNZnrwezrbDV/tIRNHMxejTROQ7uMiFjPIZM2booEkon9GxY0eb8h4VKlSwGTEd5ScwYBMuamGgJNS+xUjsRskIT9cLGG2+W7du0q5dO76sRERERKE4+AMK+OMqLkYBReMRKlWqpH9xVRdBGgwagFFBjW6VgCu76ALbokULHTAAXTjWrVsnH3zwgT6OjCsMYFCvXj0dkACDHKA2GjKyDh48qI1ZX4noc3mynLv9NDLPkM2GhjuCYygIjb++4snr4Ww7fLWPREREwSp16tR6rnQGF8bMF8egQIECeovMeo1zNzLqOKABERERUYgE5jASJ67cGoM/IEsud+7cOogArvgCMquWLVumdc3QoEQmFa4Eo2tjxowZdR4EeVATBaOPnTp1SqdPnjzZ5oovBgjAOlEM+dtvv9V5cN88aAAapOnSpXN6H4GlNGnS2OwDHkfXETNPnssRd8t5sp9TpkyRESNGaN21+/fva6YZgmKe7AsCYffu3bOZlipVKp0XteE8fT1cbYcv9pGIiIiIiIiIKFjFsljYb4kC19mzZ7V2zifjJkmq1LbBRyLy3pYNa/Rv2Ur/XTAhov/06Nw2qAYywCisGAyCGXOeHzMeq8BuK6L7trnbN/kfv4tC07fT50iwtxUmL7ZNgAkmvRvYlsagIKkxR0REMUeqNP/LtiUiIiIiIqKoxcAcERFZPZe/EI8GERERBa183a9KsDo8Na2/N4GIIiB2RBYiIiIiIiIiIiKiyGFgjoiIrHZu3ag3IiIiIiIiinrsykpERFaPHz3k0SAiIiIiIoomzJgjIiIiIiIiIiLyA2bMERERERGRunnzpqxbt06ePn0qlSpVknTp3I/WvXfvXtm5c6fDxwoVKiSlSpXyar4HDx7IvHnzws2TNWtWqV69Ol8pIiIKKgzMERERERGRLFmyRNq0aSMlSpSQBAkSSLt27eSbb76R9u3buzw6x44dk6VLl9pMO3funKxevVrGjh1rDbh5Ot+NGzekY8eO8sILL0iGDBms85YsWZKBOSIiCjoMzBERkVXSZCl4NIiIQtC1a9c0EPf666/LRx99pNMmTpwoXbt2lSpVqkiOHDmcLtukSRO9mfXr10/++ecfXae38xkGDRrEQBwREQU91pgjIiKrgkVL6I2IiEILuo7eunVL+vfvb5326quvaubcjBkzvFrXkydPZPbs2VKvXj3JmDFjpOcjIiIKZsyYIyIiIiIKcZs3b5bcuXNL6tSprdPix48vxYoV08e88eeff8rly5c12y4y8+3YsUOuXLki2bJlk+LFi0uiRIm82g4iIqJAwMAcERFZ7du9Xf8WLvZfnR8iIgoNFy5ckPTp04ebjmlnzpzxal3Tp0/X5Ro2bBip+ZCphy60GDDi8ePH8uWXX0rjxo1drhNZf7iZ9wswmAVuFHMYrwdfF98fU/KPUDj+obCPvhInThyP52VgjoiIrO7duc2jQUQUgp49eyaxY4evcoNp6HLqqbCwMPnjjz/kjTfekLhx40ZovsSJE2vducqVK+t9PP8rr7wiLVq0kAMHDkiePHmcrnfcuHEybNiwcNOReRcvXjyP94Oiz9WrV6P5cMeXYHXp0iV/b0JI+9/xTynBiu8xz2XOnNnjeRmYIyIiIiIKcalSpdIRUu3dvHnTpnurO3PmzJFHjx657cbqar7kyZNbg3KAwN3HH38s33//vSxatEj69OnjdL0YTKJ79+42GXPlypWTdOnS2YzwSjEj8wZBubRp03qVWRJ51yVY8T0eU47/QwlWfI9FDQbmiIiIiIhCXNGiReW3337TLqPmzDJkqDVv3tzj9UybNk0qVKgghQoV8sl8hqRJk0qsWLHk7t27LudDUA83ewj8RG/whzzF18Z3+B73r1A4/qGwj/7AwBwFhdbNGmkNEvLs6iRSkHG1g1+snguV43b66H7926Nz20ivK1SOmS/xmPGYEflLs2bNZPDgwTo6a9u2/50DVq5cqVl0rVq1ss537949+fXXX6VMmTJSoEABm3Xs27dPtm3bJt98843L53I3H2raYcAHM4zearFYbDLpiIiIggEDc0REZOVNdyUiIgoe+fPnl4EDB0qvXr3k5MmTkiBBAvnkk0+kW7duNsGwa9euSceOHWX8+PHhAnPIgkN9uNatW7t8LnfzITiIW926dXVwCIwKi4EgevfuLdWrV/fRHhMREcUMDMwREZFV3759eTSIiELUyJEjNQiHQRmQwTt58mRp2bKlzTxJkiSR9u3bS8GCBR2uY8SIEQ67knozH85FNWvW1K61yKzLmTOnbNq0SUqV4ojhREQUfBiYIyIiIiIiVa9ePb25GiRi1qxZDh/77LPPPDqKnsxXvHhxvREREQW78GOiExFRyMKPLWc/uIiIiIiIiMi3mDFHRERWhw4d4tEgIiIiIiKKJsyYIyIiIiIiIiIi8gMG5oiIiIiIiIiIiPyAgTkiIiIiIiIiIiI/YI05IiKyih8/Po8GERERERFRNGFgjoiIrIYMGcKjQUREREREFE0YmKOg8POviyRV6jT+3gwiIqJwenRuy6NCRERERA6xxhwREVmdPHZYb0RERERERBT1GJgjIiKrK5cu6I2IiIiIiIiiHgNzREREREREREREfsDAHBERERERERERkR8wMEdEREREREREROQHDMwREREREQWZW7du6Y2IiIhitrj+3gAiIoo5SpWr7O9NICIiF4YPH65/P/jgA+u0adOm6d8uXbpYp40bN07/Dh06lMeTiIgoBmNgjoiIrOLE5WkhJjp/5pSkSZdBEiRM6O9NISI/e/bsWbhpJ0+e9Mu2EBERUeSxKysREVmdO3NSbzHZudMn5cmTJxIoHj18qNscGcePHpL79+/5bJuIiIiIiChmYGCOiIhsMrNwi8mOHTkgTx4/lkCBgBq2mYiIiIiIyB77LBERkVtnTh6XDJmzyK0b1+XRo0eSJm16m26V58+elsePH0mc2HEkWYqUkiJlKo+Xhbt378jN62ESN158fTxOnDjWZTNmzio3b16XRw8eSOZsOWyWw3NevXxJ/8dy8RMkcLr9jtZz43qY3L19WxInTSqpUqfVaQ8fPJCwK5ckbYaMcu3qFYkdO7Z2IzW2CSwWiz724ME9SZ4ilSRLnsJm2XQZMsm1sCsSN248Cbt6SZ4+eSqnThzVebJkyylx/7/LsKPnh6dPn+p60GUtddp0fIcSEREREQUpBuaIiMitIwf3ytkzJyVx4iTy7OlTOXJgr5SpVE2SJEmqjz98cF+7bCKgdOzIQcmeM7fkei6/R8uePX1Cjh7aL+nSZ5QH9+/L8cMHpGylahInTlxd9tyZU5IocWJJmiy5NbCFWnh4vn/XrZAUKVNroOvkscNSvHR5Sfz/67Xffvv17NmxVW7dvKYBsVPHj0iqtOmkYJESmuF2+MAeDaQhyHj71k05eeyIlKlYVYN0CJbt2LxBHj16KMlTpJQjB/dJjtx5JVeefNZlT588JsmSp9Sg2sMHDzWQ9+Def11R8b+r58f6t238R549eypJk6eQ40cOypPHj/guJSKrv/76S+7cuWO9v2HDBv1rP+3FF1/kUSMiIorhGJgjIiKPpM+QSfLkK6j/79+zQ04cOShFSpTR+0YQDh7cvyf/rl0p2XM9Z80yc7bsw4cP5PCBvVKu0vPWgNmubZvk7KmTkiP3c3o/U5asGvgyGOu5cumCJEmSTEqUqaD3EShDZpoz5vVcunBObt28LhWq1tJtfPr0iaxfvVyyZr+pjz9+/FiKl6mgQTMEyjauWykXz5+RzFlzyMXzZ+XBg/tSsWpNiR0njgbuNq9fLZmyZLMuW7pCaWsWHQKF169dkfyFi1m3xdXz3751Q++Xr1JDA4HIvEOgjogIEiZMKPv379ebPftpjRs35kEjIiKK4RiYIyIijyC4ZsiQMYsc3LfLeh+ZcGFXL2vG2zPLM5FY/wXokiRN5nJZdG9F91cEn9A11HDr5g3r/+hG6gi6kOI5jh0+oPOg+2z8+LGcbr95PdevhWm3Vx3o4r8ENokXL57cvnlDEidNJvHixbd2LUVwDNl8t27c0MActhn3EZQDBOASJU4it2/elHjx40v8BAmtQTlnXD0/utumTZ9BnxdSp0mnjxERwYABA/RGREREwYGBOSIisipSsqzToxHr/wNF+n+sWNYumRiIYdP6VZIgQSKtlYZAm1gsNgM0OFsW2WgI4t2/e9f6eMKEiSRJsv8CemCu7WaGOnUVqtaUq1cu6YAV+3Ztk6Ily2r3UkfM60E30WdPn9k8LwJgCRMn+f/ttQ3wYZs14IhlLc8kTizbbfpvn5653F4zV89/48Y1iRXLdmwm+/tE0Q2fWbzPfbkMur5jhOUETmpDRua5Q939+/dlwYIFkihRImnatKm/N4eIiIhcYEufiIisEiVKrDdHzBltyHAzup7evHFNYseOozXYChUtqd1anz57ZiSCuVwWQTQEqLAMunrilrdgER3IwZ379+5p1hoGdShUrKSky5BRzp/1bERZZNfFjh1L8hUqan3eXHnzS7L/3y7Ur7tz+5bNNidL9l8WHP6GhV2xBhdRV+7e3TtaD84RBOoszywePz/Wj+czoKssuukSRbdbt25Jx44dJUmSJNp9sn79+nLmzBmXy2zevFmef/55XSZx4sRSsmRJ+eOPP2zm2bdvn/Tu3VtSp06t8/nquUlk06ZN0qtXL8mUKZO0b99eTpw4wcNCREQUwzEw5yP37t2TyZMnS7NmzaRq1arSqVMn+emnn/RqsNkLL7wgc+bMkajiq/Xj6mqZMmX0VqlSJW0Q9+/fX9auXety/mXLltlMx/5j+i+//BKheYkoel2+eF5vjmBAg8P798jBvbv0f6OuHLp+IkiG7qkYqGD75vXWbpjulkUX0Oy58sjmDWt0AAgMpIB6beaurM7cu3dHNv2zSpfBshgZ1jyyqSuZsmTXLLStG9fJ8SOHdLu2/rtOa7sBBpfYs2OLdpPdsQUDPTySzFmz62OZs2WXZ0+e6HQMdIH6bxjlFYNbOIJAJzLkUEsPA0ogQ8jV8+N5EBjcseVfff69O7fq9hBFt65du8rOnTtl7969GhTDebphw4bh2jaGhw8fSt26dSV37txy4cIFuX79ujRp0kTbRsePH7fO9+GHH0r+/Pll+PDhPnvuUHbx4kUZM2aMFC5cWCpUqCArVqyQ9957T44cOSL9+vXzal34fho/fry2J2vUqCEjR47U7Dt3vv/+e2u70f72+eefW+cLCwtzOE/fvn19ti1ERESBhi19H8APtsqVK+tIWIMGDZLnnntOG5GLFy/Wq8SzZs2yzotG5qVLlySq+Gr9e/bskYIFC2rjGY3gK1euyOrVq6VBgwZ6JXzu3LnaPcI8/7Fjx7QhiBHAjC4nyCjZtm2bXL58OULzElH0wuigkD5j5nCPYcTTG9fC5NHjRzaDNSDwhFFUMaABMucwqMPlixckQYKEbpc1BnNAhty1sKvahRTLG49ny5Fb4sZ1XF8Ny2C9ly6e1xp3JcpUlJSpUjuc1349CByWrlBFg5DISEMtvNz5Ckj8+AnkwYMH+rdYqXL6OLqYFi5e2hocw2ix5arUkIvnzuggEPkKFrEeL+wz6tCZYbnSFarqYBUYmRXfda6eH8pVfl4unD2tXX2xHZcunLc5nkRR7dSpUzJ//nxZtGiR5MqVS6chwFKgQAFZuXKl1K5dO9wyZ8+e1WBct27dJHny/z7Dr7/+ugwbNkwOHjyoATuYN2+e/p02bZrPnjvUYJAZtDF/+OEHWbJkiWYV4sInjlHRokVl4MCBEVpv586d5Z9//pEJEyZoF+N33nlH1qxZo6PAuupOXK9ePSlW7H8D3MDvv/8uI0aM0NffvN1o63311VdSunRp6/SUKVP6bFuIiIgCDQNzPrBq1SoNiKGxUK1aNev0tm3byl1T/SDAVUx0LwgEadKk0auYBlypRiYgMuhwZRONKrPq1atrRh0yBbHvrngzLxHFDHHjxpVsOf/7YW0Pgx2YBzwwB97cLQspU6fRmz10a3UFI57mypPP7bY7Wg9+2GXIlEVvjiBYZh5t1n5/sub4L2BglihxYsmdN/wy6LJrX/vO1fMjQGceidbROomi0saNG/UvLsYZkOWWMWNG+ffffx0GxxBEQ6+BSZMmSY4cOTSY8umnn+oFS0yPyucOJQhsvvrqq3Lt2jWpVauWZqshKxHdfocOHRrh9W7ZskV+/PFHDXwZxzhr1qxSvHhxvdiMdqAzaNvat28HDx4smTNn1ixKe3g9zW1MX24LERFRoGFXVh8wihajK4E9+9opb7/9tgbnDMi0+/nnn2X06NHayKhTp46m7dt31UAGB646IvCHRti4ceO062ybNm08asC1aNFCA2rt2rWTrVu3RnhfcTUU3UvQCLx9+7bNY+hCgXomH3zwgXY/cMWbeYmIiCh6Ifse7ZtkpoFYIH369E4z85EJOnv2bDlw4IBkz55dA2m4AId2jv16fP3coQTde69evartKGSTGbX4IgsZbsh0RDvT3O7LkyePPuaN8+fPy/Lly/WCricD4kTlthAREcV0zJjzAVwFxtU8BL3QpQDBNtwwHVkVrrqaIp3/5Zdf1iLICNqdPHlS+vTpozXr0C3WgIbNhg0b5JNPPpF06dLJlClTZOnSpXoV2hXUhcOVawTA0J0EVx4R3Fu/fr0WZI4IZLthndu3b7e5mg3oroCroAjc9ezZ0+V6vJnXXAwaNwNq2BBR1HPVpTQql/UHR91RKXB9MiriGUS+Mu2byf7eBJsascbFP1f12tCNGt2u7efRkZSdLIvzc5UqVTSYgi6nCK7hQmLNmjV1UAgEVTxZV0SeO6rhOSMSYIoKaDNhW9AVGBc60Z5DcC6yPRAOHTqkr5F9jdC8efPqY96YOXOmHjNczHXEaONmy5ZN6xhj+83dUyOzLc7aitge1iiMWTz5LqKIHVPyj1A4/qGwj77iTbuBgTkfHXAMZPDnn39qsAw1P1CbDSn9M2bM0AapKy1bttSuHobdu3drbRWj0YIAGGq6ocabEQjDOhHUcmX//v0yduxYLQiMoB+geC7q32Hd2N6IwBVro4Cvo24sPXr00ILOCCbaByYjOq8BDXxzrRIiih7uupRG1bL+4Kw7KlFEoa6WvznKNEPWlTOoI4sauocPH5YUKf7XTR29A5Cd5Wh9v/32m5w+fVpryGJZ3HCeR+kL3HCx0OzmzZsOty0izx0d0C0zJsB2DBkyRLuKIuCKi8K4jxpsuHj70ksvRSiQiGBW0qRJw01H5qK3F0KnT5+uQVoE0uyVL19eg4vo7oxeHG+99ZYOXIYuqkYgLjLb4qytiHrJ8eIFzkWiUOLquyhqxJdgxazimHL8w9fNDBZ8j0VNu4GBOR/BVT4MjIAbIPiF7qPNmzeXo0ePar02ZzCClhm6f5gbHaizgavO5vp1CGLhijSy6Jwxusx26NDBZjq6zKIwc0QZI2KZB38wQ+MQV3HR1RbZf654My9gdLHu3btb7+M4lStXzut9ICLH8hcuzkNDQeW9Qf7PmOvaoZXEJAja4Idw2rRpnQZvUMwfbRtc5EOgx9yFEgM3ZciQwToSK9aBdgmCQoA2T6pUqfR/ZL7hljp1ausyBiPoZj/d0+cO9QwBHCNcsMUNPRkwqj2CdAiC4gIv6s6hR0aRIp5dHIkfP741WGqGIKlRtsUTmzZt0u7M6BFhD+859Now3nfohZEvXz4dvRcXths3bhzpbXHWVsT70x/vHYrcd1HUuC7Biu/xmHL8H0qw4nssajAwF0WQmo9MMBS8RfcNNDKdsb96h4YWGrEG1HLDFWL7EagcXUk0wyixRsDQDOtDV1mMfmpkv3kDo6oCRm11BDVl3nzzTa2b56wLQ0TmBdQbMUZ6IyLfsx+gwIDvpPNnT0nYlcsSL158yZ4rjw6O4MjTJ09k947N4aanz5BZsmTPqf8fObhP7tz+34+uePETSJHi/xuhz93jRIEkpnSBdLRdzrYNFwlxYW/AgAE6miraHCiJgWwnXBg02iSFChXS4BlqnSErH8GP1157TXsCYKRQZO1jpFbMYzwXMgjN3QqNjEIEXLBeT5+bbDPJcNEVtyNHjmiADr020M7yNDCXJUsW2bVrV7jpCGxh4AVvsuXwmrVqFT4g7ah3BOor4zVFjxEjMBeZbXHWVnT1fif/4mvj22NJ/hMKxz8U9tEfOPiDD+zYsUNOnDgRZVdZUUcOI2/Zp43u27fP5XLo6oouAWgsG91IcENhZmThGVezvYErld99952OpJUz538/sB159913db/RldYdb+Yloqh1/dpVvdk7eeywHD9yUNKkS68/oLb8u1YePXR8NTBW7NiSNXsu6y1LtpwSdvWKxDNlOdy8fk2SJkthnSdTlmw263D3OBFFPbQZEDRBDTBk9+Oi48KFC20CYwimGRcYkfWCgv/IokOtXRTrRy3dJUuW2ASHXnnlFUmZMqW88cYbGqjB/7hhxFVvnpscQ/fRjz76SLsV9+rVy+PDhK6nWAa9PswXcxEgw+vpCbz2GPADQTlPB6TAQBFGVqUvt4WIiChQMDDnA+fOnZOKFStqbRUj0w11LEaOHKndOcxdUCMC2Xa4eozaIcYIpqjD8ffff7tcDl1W0T0AdTuQ3YZgGm64qoqizN7W2UCXXHSLOHXqlHz55Zcu50XQD9s7ceJEt+v1Zl4iilpHD+7Tmxm+104dPyIFCpfQIFuBIsUlSZJkcvb0SYfrwAWBdBkyWW8QL248SZsuQ7jsPGOeNGnDZ++6e5yIolbixIm11ASylFBXFu0J+y4sKMT/2WefWe8jGIcAGtpGyMxftWpVuFq76OKI0ebtbxg93pvnDlXo9YDuf+5uuKjrTS8DtPEQAB04cKB1oA3UTEbpks6dO1vnw+uK9iReE3sYMRUZks5KpsyaNUu7uhqwnQjUYjvx/N5uCxERUTBgYM4HcCUXjQQUskWBPwTB0JjAj1MMChHZrpe4Go3GDwZ/QNdTjFKFAsroJusquIb6HAje4YojujJg5C78bdq0qQbs3EGtDzS8SpUqpfuDv9gXDEaB6e6gmK+77rYRmZeIote9u3e0q1nqtGmt01KnTSc3b1zzaPnzZ09LxixZw42ud/bUCdm9fbMcO3xAHj0Kn33n7nEiolCEbsLoMuzJzTy4mDsIei1atEgHZEB3UQzOMG/ePA22mWslo/cEMiEdFQBH3WD02DAHWc3Q9RnBNmRXor2M50GWHQK4aKN6uy1ERETBgDXmfACNi08++URvSMdHsVo0IpCZ5mhABozWasDgDciGM2vXrp3WaTFDAwfdZXFlGsE4dG/FaK6oweFq/XgcDZsbN25odwA0eozizK4g+w9XrwHPhy4mRrDR2fz2AUh0Ydi4caNeDUWDKiLzEpH/ISgWOzZq8/zvlBE/fgJ57EGwDMtevXxRylex/U57rkAhefzokWYBXzx/VjatWyUVqtWyXmxw9zgRUahDd0+0BV1dAC5RooRX6yxevLgO3IBeEigzggu59m0/ZC6iJIp9+xVGjRrlslQKLvKi1wbaysiqRNvSUXvZ020hIiIKBgzM+Rgy5lwNi4tGhn0DxR6y4uwHZUC3ENRnwZVGQL0WTJs6darL9RuM+i2e8rRQsLv5UYfOvhadN/MSkf/FjhVbLJZn2qXVqO/07NlTrSXnzsVzZyVpsuSSLPl/oy8aUqb6X8ZDxsxZ5d+1K+TS+bOSNUcujx4nIgpVGCwLgSp0C8UAGRjRFD03ateu7ZOi3PieR506Z3CBxFnPCU8DgRiR1xiVNzLbQkREFAx42SlAIPMNo6tidDJcXWzevLnW2ujUqZO/N42IglzCxIk1KPfwwX3rtPv37kmiRIk96saaOWv4rAr7H16JkySRh04y8Nw9TkQUSpCpNmLECDl+/Lj8+eef2u0Tgy2gfYhSJ3v27PH3JhIREZEXGJgLELgyefDgQVm7dq3Wmrt165YMHjyYo5MRkU/lzltQb2YJEiTUgRiMwR7QPfXSxfPWgR3gyIG9cunCOZvl7ty+JXdu35SMmW1HVMVormFXLtnUsLseFiYpUqTy6HEiIvrvokX16tV1MI2LFy/qIBy7d+/WATg40j0REVHgYFfWAIPadUREUSVNOsejnxYoUkJ2bNkgYVcuy4MH9yRV6rSSPuP/uu3fuB4mce3qv50/c0rSps8o8RMksJkeJ24cOXPquBzat1viJUggt2/elCzZc0ra9Bk8epyIiGyhRu+pU6f0hsG/XNV5IyIiopiFgTkiIrLJcgPUhTNLkTKVVKnxoty8cV3ix4svyVLY1qzMW6BIuAAcAncJEiYMd3QxiESJMhXl7t078vDBA0mSJKnNfO4eJyIikTt37sj8+fNlxowZ2puibNmyOsp9mzZtJHXq1DxEREREAYKBOSIisjqwZ4f+LVvp+fAnjLjxJE1axxl1KVOn8WiaGQJuuEX0cSKiUIQacui2+uuvv2oArkOHDjJlyhTJnz+/vzeNiIiIIoCBOSIiIiKiAIEsuZkzZ0qVKlWkRo0aEjt2bJkzZ47DeVGDDjciIiKKuRiYIyIiIiIKEAkTJpQUKVJo5py7EVgxLwNzREREMRsDc0REREREAWLAgAF6IyIiouAQ298bQEREREREREREFIqYMUdERFbZcubh0SAiIgpRkxffi+ZnxCjvD6PlmXo3SBwtz0NE5C0G5oiIyCpj5qw8GkRERE58O93xQBuBrkfntv7eBCKikMWurEREZPXo4UO9ERERERERUdRjYI6IiKx2bduoNyIiIiIiIop6DMwRERERERERERH5AQNzREREREREREREfsDBHygotG7WSHLkyOHvzQgIT58+lUuXLkmGDBkkTpw4/t6cgBEqx+300f0+KwIdKsfMl3jMeMyIiIiIKLQwY46IiIiIiIiIiMgPmDFHRERWlStX5tEgIiIiIiKKJgzMERGRVd26dXk0iIiIiIiIogm7shIRkU2NM9yIiIiIiIgo6jFjjoiIrIYOHap/R4wYwaNCREREREQUxZgxR0RERERERERE5AcMzBEREREREREREfkBu7ISEREREZF69uyZ7N+/X+uNFi5cWOLGdf9z4cyZM3Lq1CmHj2XNmlVy5sxpM+327dty9OhRyZgxo2TKlCncMo8fP5ZNmzaFm546dWopVKgQXykiIj/L1/2qBKPDU9P65XkZmCMiIiIiItm6dau0atVKLBaLxIsXTwNos2fPlpo1a7o8OqtWrZJvvvnGZtqNGzdk3759MmrUKHn//fd12o4dO+SDDz6QFStWSP78+eXkyZP699tvv5WiRYtalw0LC5OqVatKkSJFJEWKFNbplStXlk8++YSvFBERBRUG5oiIyKp48eI8GkREIejevXvSpEkTqVOnjnz33XcSK1YsGThwoDRt2lSz29KlS+d02U6dOunNbMiQIZp517ZtW+s0BPkePXokx44d00y5u3fvSrNmzaR+/fo6LX78+DbrmDRpklSvXj0K9paIiCjmYGCOgsKM1Y8kVdp7/t6MAJJSRB76eyMCUAgct0T19c/kxb76PIXAMXOid4PE/t4EIiKPzZ8/X86fPy8jR47UoBwMHjxYJkyYINOnT5f+/ft7vC5k3M2cOVODarly5bJOr1evnowePdraPTZJkiTSt29fnY5suvLly/MVIyKikMPBH4iIiIiIQtz69eu1FlzmzJmt0xA4Qyb1hg0bvFoXurai5lzXrl1tpteqVStczbrr16/r35QpcSHH1oULF2TLli1y8eJFL/eGiIgocDBjjoiIrPauGK9/i9Tqy6NCRBRCkC3naCAGTDt37pxX60KGHWrDNW/e3OV8Dx8+lI8//ljrzOXNmzfc46+//rpkz55du9Lmy5dPvvrqKylXrpzLdd66dUtv5uAeYDAL3MixUDg23Efie4yfo+j8nogTJ47H8zIwR0REVk8esUs4EVEoQu03RyOwYhAIPOapO3fuaLfYDh06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ATV0CUBDDAFOM2Ta4JjiaicCbo7W89lnn2nDDQM2YMAIBP4++OADm3nwOiBAh8Ahujqglp990BRZfBix1z4IQURERETRAxdh0QMGN2fQ3sPFWHto5yLLzTwImTO4eOQKssfRXjTXfyYiIgpWsSyOioBRpCA9H4MmIGsuKq7q4SokCqrjCmawQKYlro6ijomndfEA9fxwtTVnm10SL0lwj5ZGUePw1LQezYd6N8jKxaAIwVw82Kgj5KjrkbdC5Zj5Eo8ZjxnfZzGTo5pnFBiMtiLq4tkPThER306fI8GoR+e2+nfy4nsSrHo3+K/3T77uwTtavKftWn8K1s8Q8HMU+A776TPk0xpz9L/AGeo5IZOPPGvs4srsmDFjvArKEZHvPXz4UG9EREREREQU9VikIQqg+ynqrkWVYBt5Dvty4MABf28GEREREREREVG0YmAuADmq90ZERERERERERIGFXVmJiIiIiIiIiIj8gBlzRERklS9fPh4NIiIiIiKiaMLAHBERWXXs2JFHg4iIiIiIKJqwKysREREREREREZEfMDBHRERWEyZM0BsRERERERFFPXZlJSIiq7CwMB4NIiIiIiKiaMKMOSIiIiIiIiIiIj9gYI6IiIiIiIiIiMgPGJgjIiIiIiIiIiLyA9aYIyIiq0yZMvFoEBERERERRRMG5oiIyOq1117j0SAiIiIiIoom7MpKRERERERERETkB8yYo6CwenQKyZEjrb83IyA8ffpULl26JBkyZJA4ceL4e3Mohvn+++/1b9euXf29KUREREREREGPgTkiIrI6ceIEjwYREREREVE0YVdWIiIiIiIiIiIiP2BgjoiIiIiIiIiIyA8YmCMiIiIiIiIiIvID1pgjIiKrZMmS8WgQERERERFFEwbmiIjI6t133+XRICIiIiIiiibsykpEREREREREROQHzJgjIiKrX375Rf+2atWKR4WIKARt3rxZ/vzzT3n69KnUqlVLqlev7vGyDx8+lAULFsiePXskc+bM0rZtW0mdOrX18du3b8uQIUPCLVe4cGHp0aOHT7eFiIgoUDBjjoiIrPBjCjciIgo948aN0+AXAmgIhjVp0kTee+89j5Y9deqUFC9eXNeRKFEiOX36tFSrVk3OnTtnnefu3bsyceJEefLkieTMmdN6y5Ahg0+3hYiIKJAwY46IiIiIKMSdPHlSBgwY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xPkB0I0V8zi62PTee+9pd0JkShvBE7SFChYsKOfOnZOXX35Zp+fMmVNr6iHoMXnyZH0OZCohQwnHFO0SBAdwbHGRE+cRV+sGZPvMnj1bg6IUOBB8mzdvnnbxNMN7DNBWNQJ2eJ8/ePAg3OcNF82RWYeMOnNwz5vPkVEjEp8j1KkbNmyYrF271qt9QTdbdE9NlSqVvlcRRPz222+lTp06smnTJnn//fd1vkmTJsn06dP1/Y6bGQLjCAoCekngNwW6xOO9DThWyBrEcUiSJIn+RUDaCDAiKNiqVSv9/KRPn173ZeDAgdpDxt26EeBOlCiRPkdUJUoEBAsRUQhbsGCBpXDhwpbEiRNbmjdvrreJEydaH79165be79Spk6Vr166W+fPn2yz/8OFDyw8//GDp2bOnpUePHpbvvvvO8vjxY4/Wbe/LL7/EJS7L3LlzLSlTprQ8ePDA+lj58uUtw4cPt+TPn9/SrVu3cMvi8Y4dO1qOHj2q6/jjjz8crvvKlSuWyFq1apWu68KFC14tN2vWLEv16tV12fr16+vx+Pfff/Wxc+fOWYYOHWpp166dpVevXpY///zTZtmPP/7YkiVLFptpR44csbz99tu6zJAhQ6z7vmTJEo9eH2fu3btnSZ48uWX27Nlut8HVdp89e1b38dixY9ZpkydP1mkXL160ThszZozePH3PzZkzx/Lmm29aDhw4YOnXr5+ldevWlq1btzrcF7wHse+ROR6DBg3S992+ffssgwcPtnTo0MEyYsQIy/Xr18PN62rbnX0eIvsZdHU8li9fbokbN67N8SYiCnRFihSxvPXWW04fv3//vp4Px48fH+6xjRs36mPvvPOOJX369JZ8+fJZkiRJYqlUqZKeV13BeS1RokTappgxY4b+j+/ev/76y5I7d249f+KccujQIf3flUePHlkKFChgqVevnnXedevWWRIkSGD5/PPPrfMZ5wV30qRJE25/nzx5YilatKieY7DtgHNypkyZrM/x66+/6n6cPHnSutzSpUst69evd7luw88//2yJHTu2w3MixVzG52DPnj020589e2Zp2rSppUSJEpbff//dsmzZMkutWrX083H37l2bedu0aWOpXbu228+cvdGjR1sKFixo+fvvv7VNVa1aNZ3eqlUrbc/CtWvX9L2K7XFl5cqV+rwzZ87U+0+fPrW89tpr2o412j54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",
      "text/plain": [
       "<Figure size 1265x396 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "names = [\"SVD\", \"Baseline estimates\", \"Single DNN\", \"Proposed (DMCCF)\", X.PLUS]\n",
    "pf = per_fold[per_fold.method.isin(names)]\n",
    "mu = pf.groupby(\"method\").MAE.mean().reindex(names); sdv = pf.groupby(\"method\").MAE.std(ddof=0).reindex(names)\n",
    "fig, axes = plt.subplots(1, 2, figsize=(11.5, 3.6), gridspec_kw={\"width_ratios\": [1.3, 1]})\n",
    "cols = [PAPER_C] * 3 + [\"#93b4f5\", OURS_C]\n",
    "axes[0].barh(range(len(names)), mu, xerr=sdv, color=cols, error_kw={\"lw\": 1})\n",
    "for i, (m, s) in enumerate(zip(mu, sdv)):\n",
    "    axes[0].text(m + s + 0.003, i, f\"{m:.3f}\", va=\"center\", fontsize=9)\n",
    "axes[0].axvline(0.7552, color=\"#555\", ls=\"--\", lw=1); axes[0].text(0.7562, 2.0, \"paper's reported\\n0.755\", fontsize=8, ha=\"left\", va=\"center\", color=\"#555\")\n",
    "axes[0].set_yticks(range(len(names)), names); axes[0].invert_yaxis(); axes[0].set_xlim(0.7, 0.84)\n",
    "axes[0].set_xlabel(\"test MAE, 5 folds (lower is better)\"); axes[0].set_title(\"Overall rating error\")\n",
    "grp = imp.loc[[\"SVD\", \"Proposed (DMCCF)\", X.PLUS], [\"MAE warm users\", \"MAE cold users\"]]\n",
    "xx = np.arange(2)\n",
    "for j, (m, c) in enumerate(zip(grp.index, [PAPER_C, \"#93b4f5\", OURS_C])):\n",
    "    axes[1].bar(xx + (j - 1) * 0.27, grp.loc[m], 0.26, color=c, label=m)\n",
    "axes[1].set_xticks(xx, [\"users seen in training\\n(16 % of test)\", \"unseen users\\n(84 % of test)\"])\n",
    "axes[1].set_ylim(0.65, 0.85); axes[1].set_ylabel(\"MAE\"); axes[1].legend(frameon=False, fontsize=8)\n",
    "axes[1].set_title(\"Where the gain comes from\")\n",
    "fig.tight_layout(); fig.savefig(\"results/fig_improvement.png\", bbox_inches=\"tight\"); plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "24d81ef0",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-11-12T18:04:50.527083Z",
     "iopub.status.busy": "2026-11-12T18:04:50.527027Z",
     "iopub.status.idle": "2026-11-12T18:04:50.530143Z",
     "shell.execute_reply": "2026-11-12T18:04:50.529840Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/markdown": [
       "**Criteria-rating MAE (Table 5) with DMCCF+**"
      ],
      "text/plain": [
       "<IPython.core.display.Markdown object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "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>paper</th>\n",
       "      <th>paper model (ours)</th>\n",
       "      <th>DMCCF+</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>Value</th>\n",
       "      <td>0.8195</td>\n",
       "      <td>0.8400</td>\n",
       "      <td>0.8226</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Rooms</th>\n",
       "      <td>0.7612</td>\n",
       "      <td>0.7879</td>\n",
       "      <td>0.7586</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Location</th>\n",
       "      <td>0.6581</td>\n",
       "      <td>0.6875</td>\n",
       "      <td>0.5782</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Cleanliness</th>\n",
       "      <td>0.6324</td>\n",
       "      <td>0.6644</td>\n",
       "      <td>0.6232</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Check in / front desk</th>\n",
       "      <td>0.7582</td>\n",
       "      <td>0.7844</td>\n",
       "      <td>0.7495</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Service</th>\n",
       "      <td>0.7401</td>\n",
       "      <td>0.7681</td>\n",
       "      <td>0.7337</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Business service</th>\n",
       "      <td>0.8774</td>\n",
       "      <td>0.8996</td>\n",
       "      <td>0.8608</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Mean</th>\n",
       "      <td>0.7495</td>\n",
       "      <td>0.7760</td>\n",
       "      <td>0.7324</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                        paper  paper model (ours)  DMCCF+\n",
       "Value                  0.8195              0.8400  0.8226\n",
       "Rooms                  0.7612              0.7879  0.7586\n",
       "Location               0.6581              0.6875  0.5782\n",
       "Cleanliness            0.6324              0.6644  0.6232\n",
       "Check in / front desk  0.7582              0.7844  0.7495\n",
       "Service                0.7401              0.7681  0.7337\n",
       "Business service       0.8774              0.8996  0.8608\n",
       "Mean                   0.7495              0.7760  0.7324"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "t5i = t5[[\"paper\", \"ours_mean\", \"improved_mean\"]].rename(columns={\"ours_mean\": \"paper model (ours)\",\n",
    "                                                                  \"improved_mean\": \"DMCCF+\"})\n",
    "display(Markdown(\"**Criteria-rating MAE (Table 5) with DMCCF+**\"), t5i.round(4))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "fd78bc64",
   "metadata": {},
   "source": [
    "### What the improvement achieved\n",
    "\n",
    "| | Paper's model (reproduced) | Paper's reported number | **DMCCF+** |\n",
    "|---|---|---|---|\n",
    "| Overall MAE | 0.777 ± 0.010 | 0.755 | **0.737 ± 0.004** |\n",
    "| Criteria MAE (mean of 7) | 0.776 | 0.750 | **0.732** |\n",
    "| Predictions within 1 star | 74.9 % | – | **75.4 %** |\n",
    "| Exact star after rounding | 47.9 % | – | **48.9 %** |\n",
    "\n",
    "- **5.0 % lower error than the paper's model.** It is better on all 5 folds (paired t-test p = 0.001),\n",
    "  and also below the paper's own reported 0.755.\n",
    "- **8.1 % lower error than SVD**, the best classical method (5/5 folds, p < 0.001).\n",
    "- **Fold-to-fold variation halves** (std 0.004 against 0.010): no dead networks, no restarts, and\n",
    "  a 5-seed average.\n",
    "\n",
    "**The gain comes from unseen users.** For the 84 % of test ratings whose user is new, the error falls\n",
    "from 0.784 to **0.729**. The unknown-user token gives them a learned \"typical reviewer\" instead of a\n",
    "random vector.\n",
    "\n",
    "**The trade-off.** For users seen in training, the error rises from 0.738 to 0.782. Swapping 30 % of IDs\n",
    "for the unknown token, plus a smaller embedding, means the model relies less on a user's one or two\n",
    "previous reviews. Since these users are only 16 % of test ratings, the trade is clearly worth it\n",
    "overall. A natural next step is a separate path or gate for returning users.\n",
    "\n",
    "**What did not change.** F1 and F2 stay at the paper model's level (0.865 / 0.860 against\n",
    "0.866 / 0.858). These metrics only check which side of 4 stars a prediction falls on, and the two\n",
    "models agree there almost everywhere. MAP and MRR stay at about 0.998 for every method, for the reason\n",
    "given in finding 6."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f4b587b7",
   "metadata": {},
   "source": [
    "## 8. Accuracy, not just error\n",
    "\n",
    "MAE measures how far off a prediction is. The metrics below instead ask how often the model is right,\n",
    "computed on the same cached test predictions (`accuracy_metrics.py`):\n",
    "\n",
    "- **Exact star / within 1 star:** the rounded prediction hits the true star / is at most 1 star off.\n",
    "- **Good-hotel accuracy:** predicted ≥ 4 agrees with true ≥ 4. Because 77.5 % of ratings are ≥ 4, also\n",
    "  shown as **balanced accuracy**, which counts good and not-good ratings equally.\n",
    "- **ROC-AUC:** how well the predictions rank good stays above bad ones (0.5 = random).\n",
    "- **R²:** share of rating variance explained.\n",
    "\n",
    "**DMCCF+ blend** is the plain 50/50 average of DMCCF+ and SVD. The weight was checked on the inner\n",
    "split, not tuned on the test folds."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "d74a8d3f",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-11-12T18:04:50.530886Z",
     "iopub.status.busy": "2026-11-12T18:04:50.530835Z",
     "iopub.status.idle": "2026-11-12T18:04:50.638418Z",
     "shell.execute_reply": "2026-11-12T18:04:50.638142Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "                            MAE  exact star  within 1 star  good-hotel acc  balanced acc  ROC-AUC      R2\n",
      "method                                                                                                   \n",
      "SVD                      0.8025      0.4036         0.7347          0.6937        0.6720   0.7322  0.1790\n",
      "Paper model              0.7765      0.4786         0.7491          0.7348        0.6407   0.7100  0.0942\n",
      "DMCCF+                   0.7374      0.4892         0.7543          0.7308        0.6251   0.7077  0.0348\n",
      "DMCCF+ blend (with SVD)  0.7657      0.4806         0.7397          0.7022        0.6662   0.7286  0.1494 \n",
      "always predicting 'good' scores 0.7747 \n",
      "\n",
      "                 method         metric   vs paper model  better folds      p\n",
      "                 DMCCF+            MAE 0.7765 -> 0.7374             5 0.0010\n",
      "                 DMCCF+     exact star 0.4786 -> 0.4892             5 0.0320\n",
      "                 DMCCF+  within 1 star 0.7491 -> 0.7543             4 0.1740\n",
      "                 DMCCF+ good-hotel acc 0.7348 -> 0.7308             2 0.5857\n",
      "                 DMCCF+   balanced acc 0.6407 -> 0.6251             0 0.0371\n",
      "                 DMCCF+        ROC-AUC 0.7100 -> 0.7077             1 0.1001\n",
      "                 DMCCF+             R2 0.0942 -> 0.0348             0 0.0003\n",
      "DMCCF+ blend (with SVD)            MAE 0.7765 -> 0.7657             4 0.0626\n",
      "DMCCF+ blend (with SVD)     exact star 0.4786 -> 0.4806             3 0.5262\n",
      "DMCCF+ blend (with SVD)  within 1 star 0.7491 -> 0.7397             0 0.0014\n",
      "DMCCF+ blend (with SVD) good-hotel acc 0.7348 -> 0.7022             0 0.0011\n",
      "DMCCF+ blend (with SVD)   balanced acc 0.6407 -> 0.6662             5 0.0006\n",
      "DMCCF+ blend (with SVD)        ROC-AUC 0.7100 -> 0.7286             5 0.0000\n",
      "DMCCF+ blend (with SVD)             R2 0.0942 -> 0.1494             5 0.0010\n"
     ]
    },
    {
     "data": {
      "text/markdown": [
       "**5-fold test, mean** (MAE lower is better; everything else higher is better)"
      ],
      "text/plain": [
       "<IPython.core.display.Markdown object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "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>MAE</th>\n",
       "      <th>exact star</th>\n",
       "      <th>within 1 star</th>\n",
       "      <th>good-hotel acc</th>\n",
       "      <th>balanced acc</th>\n",
       "      <th>ROC-AUC</th>\n",
       "      <th>R2</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>method</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>SVD</th>\n",
       "      <td>0.8025</td>\n",
       "      <td>0.4036</td>\n",
       "      <td>0.7347</td>\n",
       "      <td>0.6937</td>\n",
       "      <td>0.6720</td>\n",
       "      <td>0.7322</td>\n",
       "      <td>0.1790</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Paper model</th>\n",
       "      <td>0.7765</td>\n",
       "      <td>0.4786</td>\n",
       "      <td>0.7491</td>\n",
       "      <td>0.7348</td>\n",
       "      <td>0.6407</td>\n",
       "      <td>0.7100</td>\n",
       "      <td>0.0942</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>DMCCF+</th>\n",
       "      <td>0.7374</td>\n",
       "      <td>0.4892</td>\n",
       "      <td>0.7543</td>\n",
       "      <td>0.7308</td>\n",
       "      <td>0.6251</td>\n",
       "      <td>0.7077</td>\n",
       "      <td>0.0348</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>DMCCF+ blend (with SVD)</th>\n",
       "      <td>0.7657</td>\n",
       "      <td>0.4806</td>\n",
       "      <td>0.7397</td>\n",
       "      <td>0.7022</td>\n",
       "      <td>0.6662</td>\n",
       "      <td>0.7286</td>\n",
       "      <td>0.1494</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                            MAE  exact star  within 1 star  good-hotel acc  \\\n",
       "method                                                                       \n",
       "SVD                      0.8025      0.4036         0.7347          0.6937   \n",
       "Paper model              0.7765      0.4786         0.7491          0.7348   \n",
       "DMCCF+                   0.7374      0.4892         0.7543          0.7308   \n",
       "DMCCF+ blend (with SVD)  0.7657      0.4806         0.7397          0.7022   \n",
       "\n",
       "                         balanced acc  ROC-AUC      R2  \n",
       "method                                                  \n",
       "SVD                            0.6720   0.7322  0.1790  \n",
       "Paper model                    0.6407   0.7100  0.0942  \n",
       "DMCCF+                         0.6251   0.7077  0.0348  \n",
       "DMCCF+ blend (with SVD)        0.6662   0.7286  0.1494  "
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/markdown": [
       "**Against the paper's model, paired over 5 folds**"
      ],
      "text/plain": [
       "<IPython.core.display.Markdown object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "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>method</th>\n",
       "      <th>metric</th>\n",
       "      <th>vs paper model</th>\n",
       "      <th>better folds</th>\n",
       "      <th>p</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>DMCCF+</td>\n",
       "      <td>MAE</td>\n",
       "      <td>0.7765 -&gt; 0.7374</td>\n",
       "      <td>5</td>\n",
       "      <td>0.0010</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>DMCCF+</td>\n",
       "      <td>exact star</td>\n",
       "      <td>0.4786 -&gt; 0.4892</td>\n",
       "      <td>5</td>\n",
       "      <td>0.0320</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>DMCCF+</td>\n",
       "      <td>within 1 star</td>\n",
       "      <td>0.7491 -&gt; 0.7543</td>\n",
       "      <td>4</td>\n",
       "      <td>0.1740</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>DMCCF+</td>\n",
       "      <td>good-hotel acc</td>\n",
       "      <td>0.7348 -&gt; 0.7308</td>\n",
       "      <td>2</td>\n",
       "      <td>0.5857</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>DMCCF+</td>\n",
       "      <td>balanced acc</td>\n",
       "      <td>0.6407 -&gt; 0.6251</td>\n",
       "      <td>0</td>\n",
       "      <td>0.0371</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>DMCCF+</td>\n",
       "      <td>ROC-AUC</td>\n",
       "      <td>0.7100 -&gt; 0.7077</td>\n",
       "      <td>1</td>\n",
       "      <td>0.1001</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>DMCCF+</td>\n",
       "      <td>R2</td>\n",
       "      <td>0.0942 -&gt; 0.0348</td>\n",
       "      <td>0</td>\n",
       "      <td>0.0003</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>DMCCF+ blend (with SVD)</td>\n",
       "      <td>MAE</td>\n",
       "      <td>0.7765 -&gt; 0.7657</td>\n",
       "      <td>4</td>\n",
       "      <td>0.0626</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>DMCCF+ blend (with SVD)</td>\n",
       "      <td>exact star</td>\n",
       "      <td>0.4786 -&gt; 0.4806</td>\n",
       "      <td>3</td>\n",
       "      <td>0.5262</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>DMCCF+ blend (with SVD)</td>\n",
       "      <td>within 1 star</td>\n",
       "      <td>0.7491 -&gt; 0.7397</td>\n",
       "      <td>0</td>\n",
       "      <td>0.0014</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>DMCCF+ blend (with SVD)</td>\n",
       "      <td>good-hotel acc</td>\n",
       "      <td>0.7348 -&gt; 0.7022</td>\n",
       "      <td>0</td>\n",
       "      <td>0.0011</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>DMCCF+ blend (with SVD)</td>\n",
       "      <td>balanced acc</td>\n",
       "      <td>0.6407 -&gt; 0.6662</td>\n",
       "      <td>5</td>\n",
       "      <td>0.0006</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>DMCCF+ blend (with SVD)</td>\n",
       "      <td>ROC-AUC</td>\n",
       "      <td>0.7100 -&gt; 0.7286</td>\n",
       "      <td>5</td>\n",
       "      <td>0.0000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>DMCCF+ blend (with SVD)</td>\n",
       "      <td>R2</td>\n",
       "      <td>0.0942 -&gt; 0.1494</td>\n",
       "      <td>5</td>\n",
       "      <td>0.0010</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                     method          metric    vs paper model  better folds  \\\n",
       "0                    DMCCF+             MAE  0.7765 -> 0.7374             5   \n",
       "1                    DMCCF+      exact star  0.4786 -> 0.4892             5   \n",
       "2                    DMCCF+   within 1 star  0.7491 -> 0.7543             4   \n",
       "3                    DMCCF+  good-hotel acc  0.7348 -> 0.7308             2   \n",
       "4                    DMCCF+    balanced acc  0.6407 -> 0.6251             0   \n",
       "5                    DMCCF+         ROC-AUC  0.7100 -> 0.7077             1   \n",
       "6                    DMCCF+              R2  0.0942 -> 0.0348             0   \n",
       "7   DMCCF+ blend (with SVD)             MAE  0.7765 -> 0.7657             4   \n",
       "8   DMCCF+ blend (with SVD)      exact star  0.4786 -> 0.4806             3   \n",
       "9   DMCCF+ blend (with SVD)   within 1 star  0.7491 -> 0.7397             0   \n",
       "10  DMCCF+ blend (with SVD)  good-hotel acc  0.7348 -> 0.7022             0   \n",
       "11  DMCCF+ blend (with SVD)    balanced acc  0.6407 -> 0.6662             5   \n",
       "12  DMCCF+ blend (with SVD)         ROC-AUC  0.7100 -> 0.7286             5   \n",
       "13  DMCCF+ blend (with SVD)              R2  0.0942 -> 0.1494             5   \n",
       "\n",
       "         p  \n",
       "0   0.0010  \n",
       "1   0.0320  \n",
       "2   0.1740  \n",
       "3   0.5857  \n",
       "4   0.0371  \n",
       "5   0.1001  \n",
       "6   0.0003  \n",
       "7   0.0626  \n",
       "8   0.5262  \n",
       "9   0.0014  \n",
       "10  0.0011  \n",
       "11  0.0006  \n",
       "12  0.0000  \n",
       "13  0.0010  "
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import accuracy_metrics as A\n",
    "A.main()\n",
    "acc = pd.read_csv(\"results/accuracy_metrics.csv\", index_col=0)\n",
    "tests = pd.read_csv(\"results/accuracy_tests.csv\")\n",
    "display(Markdown(\"**5-fold test, mean** (MAE lower is better; everything else higher is better)\"), acc.round(4))\n",
    "display(Markdown(\"**Against the paper's model, paired over 5 folds**\"), tests.round(4))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8800444c",
   "metadata": {},
   "source": [
    "**What this shows.** No single model wins every metric:\n",
    "\n",
    "- **Error-type accuracy: DMCCF+ is best.** It has the lowest MAE, the most exact stars (48.9 % vs\n",
    "  47.9 %, better on 5/5 folds, p = 0.03) and the most predictions within 1 star.\n",
    "- **Ranking-type accuracy: SVD and the blend are best.** On ROC-AUC, balanced accuracy and R², DMCCF+ is\n",
    "  no better than the paper's model. Training on absolute error pulls predictions toward the typical\n",
    "  4–5 stars, which blurs which stays are worse. The blend fixes that: ROC-AUC 0.710 → **0.729**,\n",
    "  balanced accuracy 64.1 % → **66.6 %**, R² 0.094 → **0.149**, each better on 5/5 folds, while its MAE\n",
    "  (0.766) is still below the paper model's.\n",
    "- **Plain \"good hotel?\" accuracy is not a useful measure here.** Always answering \"good\" scores 77.5 %,\n",
    "  more than any model, because good stays dominate.\n",
    "\n",
    "So use DMCCF+ to predict the star rating, and the blend to rank hotels."
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "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.11.17"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
