{ "cells": [ { "cell_type": "markdown", "id": "5cd0dbba", "metadata": {}, "source": [ "# Fair-Seldonian on real data: UCI Adult income\n", "\n", "This notebook applies the Quasi-Seldonian Algorithm (QSA) to the UCI Adult\n", "income dataset under a **demographic-parity** constraint, and shows both sides of\n", "the Seldonian guarantee on real data:\n", "\n", "* an ordinary logistic regression reaches good accuracy but predicts the positive\n", " class at very different rates for the two groups (a demographic-parity gap), and\n", "* QSA, asked to certify that gap is bounded, returns **No Solution Found**\n", " rather than shipping the biased model.\n", "\n", "**Task framing**\n", "\n", "| symbol | meaning |\n", "|--------|---------|\n", "| `Y` (label) | income > 50K |\n", "| `T` (sensitive) | sex (1 = Male, 0 = Female) |\n", "| `X` (features) | standardized numeric columns, with `T` appended as the final column (library convention) |\n", "\n", "> Requires network access on the first run to download the dataset (cached afterwards)." ] }, { "cell_type": "markdown", "id": "a2d0d68d", "metadata": {}, "source": [ "## Background: what is demographic parity?\n", "\n", "**Demographic parity** (also called *statistical parity* or the *independence*\n", "criterion) asks that a model's prediction be statistically independent of the\n", "sensitive attribute. For a binary classifier with prediction $\\hat{Y}$ and\n", "sensitive group $A$:\n", "\n", "$$P(\\hat{Y} = 1 \\mid A = a) = P(\\hat{Y} = 1 \\mid A = b) \\quad \\text{for all groups } a, b.$$\n", "\n", "In words: every group is predicted positive at the same rate, **regardless of the\n", "true label** $Y$. In practice we bound the gap by a tolerance $\\epsilon$:\n", "\n", "$$\\left| P(\\hat{Y}=1 \\mid A=1) - P(\\hat{Y}=1 \\mid A=0) \\right| \\le \\epsilon,$$\n", "\n", "which is exactly what we enforce below with $\\epsilon = 0.10$. A closely related\n", "industry rule of thumb is the *disparate-impact* \"four-fifths (80%) rule\", which\n", "compares the **ratio** of group positive rates rather than their difference\n", "(Feldman et al., 2015).\n", "\n", "**How it differs from equalized opportunity.** Because demographic parity ignores\n", "$Y$, it can be met by a model that is deliberately inaccurate for one group. Label-conditioned criteria such as *equalized odds* and *equalized opportunity*\n", "(Hardt et al., 2016) instead require error rates to match across groups. There is\n", "no single \"correct\" fairness metric: the appropriate choice is context-dependent,\n", "and several criteria are provably incompatible except in degenerate cases (Barocas,\n", "Hardt & Narayanan, 2023; Dwork et al., 2012).\n", "\n", "**Why demographic parity for this task?** Predicting `income > 50K` stands in here\n", "for an *allocative* decision - one where a positive prediction grants access to a\n", "benefit (a loan, an interview, a targeted offer). When the goal is equal access\n", "across groups, demographic parity is a natural target: it constrains the *rate at\n", "which the benefit is allocated* to each group. This is especially appropriate for\n", "Adult, where the labels themselves reflect historical disparities (men are labelled\n", "high-income far more often), so a label-conditioned criterion would bake that\n", "societal gap in as ground truth. If instead you trusted the labels and only wanted\n", "equal accuracy among the truly-qualified, equalized opportunity would fit better\n", "(see [`custom_constraint.py`](custom_constraint.py)).\n", "\n", "**In this library**, the predicted-positive rate is the base variable `PR(g)`,\n", "so demographic parity is written as the postfix constraint\n", "`PR(1) PR(0) - abs 0.1 -`. The builder `demographic_parity(epsilon)` produces\n", "exactly that, which is what we use below.\n", "\n", "`PR(g)` is equivalent to `TP(g) + FP(g)` — the confusion-matrix cells are\n", "fractions of each group and sum to 1 within it — but writing it as one base\n", "variable rather than two matters for the bound. Every leaf of the constraint\n", "spends its own slice of $\\delta$, so the two-leaf form is certifiable at a\n", "tighter $\\epsilon$ than the four-leaf one: on this data, 0.15 against 0.20.\n" ] }, { "cell_type": "code", "execution_count": 1, "id": "b94c85b1", "metadata": { "execution": { "iopub.execute_input": "2026-08-24T18:35:04.718783Z", "iopub.status.busy": "2026-08-24T18:35:04.718682Z", "iopub.status.idle": "2026-08-24T18:35:08.615150Z", "shell.execute_reply": "2026-08-24T18:35:08.614593Z" } }, "outputs": [], "source": [ "import numpy as np\n", "from sklearn.datasets import fetch_openml\n", "\n", "from fair_seldonian.algorithms import QSA\n", "from fair_seldonian.config import SeldonianConfig\n", "from fair_seldonian.models import predict, simple_logistic" ] }, { "cell_type": "markdown", "id": "799ce7f0", "metadata": {}, "source": [ "## 1. Load and frame the data\n", "\n", "We download Adult, derive the binary label and sensitive attribute, standardize\n", "the numeric features, and append the sensitive attribute as the final feature\n", "column. Then we take a deterministic subsample and train/test split." ] }, { "cell_type": "code", "execution_count": 2, "id": "ca151c74", "metadata": { "execution": { "iopub.execute_input": "2026-08-24T18:35:08.617028Z", "iopub.status.busy": "2026-08-24T18:35:08.616832Z", "iopub.status.idle": "2026-08-24T18:35:08.695690Z", "shell.execute_reply": "2026-08-24T18:35:08.695300Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Adult: 8000 examples, positive rate 0.241, male share 0.678\n" ] } ], "source": [ "frame = fetch_openml(\"adult\", version=2, as_frame=True, parser=\"auto\").frame.dropna()\n", "\n", "T = (frame[\"sex\"].astype(str) == \"Male\").astype(int).to_numpy()\n", "Y = frame[\"class\"].astype(str).str.contains(\">50K\").astype(int).to_numpy()\n", "\n", "numeric = frame.select_dtypes(\"number\")\n", "standardized = (numeric - numeric.mean()) / numeric.std()\n", "X = np.column_stack([standardized.to_numpy(), T]).astype(float)\n", "\n", "# deterministic subsample + split for a fast, reproducible demo\n", "rng = np.random.default_rng(0)\n", "idx = rng.permutation(len(X))[:8000]\n", "X, Y, T = X[idx], Y[idx], T[idx]\n", "cut = int(0.7 * len(X))\n", "X_tr, Y_tr, T_tr = X[:cut], Y[:cut], T[:cut]\n", "X_te, Y_te, T_te = X[cut:], Y[cut:], T[cut:]\n", "\n", "print(\n", " f\"Adult: {len(X)} examples, positive rate {Y.mean():.3f}, male share {T.mean():.3f}\"\n", ")" ] }, { "cell_type": "markdown", "id": "4f040316", "metadata": {}, "source": [ "## 2. Unconstrained baseline\n", "\n", "A plain logistic regression. We measure overall accuracy and the\n", "predicted-positive rate within each group; the gap between those rates is the\n", "demographic-parity violation the fairness constraint targets." ] }, { "cell_type": "code", "execution_count": 3, "id": "478755e9", "metadata": { "execution": { "iopub.execute_input": "2026-08-24T18:35:08.698729Z", "iopub.status.busy": "2026-08-24T18:35:08.698610Z", "iopub.status.idle": "2026-08-24T18:35:08.708769Z", "shell.execute_reply": "2026-08-24T18:35:08.708353Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "accuracy : 0.814\n", "positive rate (male) : 0.196\n", "positive rate (female) : 0.045\n", "demographic-parity gap : 0.151\n" ] } ], "source": [ "def positive_rate(pred, mask):\n", " # P(pred = 1 | T = group): the predicted-positive rate for a group\n", " return float(pred[mask].mean()) if mask.any() else float(\"nan\")\n", "\n", "\n", "theta, theta1 = simple_logistic(X_tr, Y_tr)\n", "pred = (predict(theta, theta1, X_te).detach().numpy() >= 0.5).astype(int)\n", "\n", "acc = float((pred == Y_te).mean())\n", "pr_male = positive_rate(pred, T_te == 1)\n", "pr_female = positive_rate(pred, T_te == 0)\n", "dp_gap = abs(pr_male - pr_female)\n", "\n", "print(f\"accuracy : {acc:.3f}\")\n", "print(f\"positive rate (male) : {pr_male:.3f}\")\n", "print(f\"positive rate (female) : {pr_female:.3f}\")\n", "print(f\"demographic-parity gap : {dp_gap:.3f}\")" ] }, { "cell_type": "markdown", "id": "62d2716e", "metadata": {}, "source": [ "The bars below show that gap directly. The male predicted-positive rate clears the $\\epsilon$ tolerance band drawn around the (lower) female rate, so the demographic-parity constraint is violated - which is exactly why QSA declines to certify this model in the next section." ] }, { "cell_type": "code", "execution_count": 4, "id": "92e8a4df", "metadata": { "execution": { "iopub.execute_input": "2026-08-24T18:35:08.710016Z", "iopub.status.busy": "2026-08-24T18:35:08.709935Z", "iopub.status.idle": "2026-08-24T18:35:09.244900Z", "shell.execute_reply": "2026-08-24T18:35:09.244395Z" } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAhwAAAGkCAYAAAB6j/z5AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjksIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvJkbTWQAAAAlwSFlzAAAPYQAAD2EBqD+naQAAZdFJREFUeJzt3QWcFPX7B/AH7rij++ju7pRSQEK6fpSKlIhISiopCNIgICUgIgIiCn8VSUHpbmnphruj47jb/+vz4Ky7e7vHxSwX+3nzmhe3s7MT36lnvjXxLBaLRYiIiIjcKL47Z05ERETEgIOIiIheCeZwEBERkdsx4CAiIiK3Y8BBREREbseAg4iIiNyOAQcRERG5HQMOIiIicjsGHEREROR2DDjolXjvvfckR44c0ZLa33zzjcSLF0/Onz8vMdnmzZt1PfF/TNlG7DPsO4q4119/XYoUKfLS6bDPsO+wD2MjrPvw4cOjezUoDNg/2E+RYea1hQFHGDvn9u3bThMNFxFcTOKSq1ev6nYfPHgwuleFiGKx7du367UkMDAwulclzunfv7/em1q2bBmt6/HVV19FKkD2dsvaUKwMOEaMGKFPtCVKlDB9/nPnzpWQkBDT50sU22XPnl0eP34sCRIkkNgI6+7t7W0XcOBagpyxlClTRuu6xSUWi0WWLFmi1+hffvlF7t+/L8mSJYu2gCNt2rQRzv1kDgdFyqNHjyI0PS6mvr6+TG2KUZ48eRLtgTCeWBMmTCheXl4SWyDNkHaAdbcNOMg9Nm/eLJcvX5b58+fL8+fP5aeffop1Sc2Aw8Sy9x9++EE+//xzyZIli56ENWrUkDNnzoSafteuXfLWW29JqlSpJEmSJFKsWDGZOnWq3TR//PGHVKlSRb/HU0KjRo3k+PHjTot+sAzjaSJFihTSvn37UAHB+vXrpXLlyjpN0qRJJX/+/PLJJ59Y179s2bL6N36LedqWKRtl0fv27ZOqVatK4sSJrb9dtWqV1KtXTzJlyqQBRe7cuWXkyJESHBwcZh0Oo9x6woQJMmfOHP0dfo/12LNnT6g0O3HihDRv3lxSp06taVumTBn5v//7v1DTHTt2TKpXry6JEiXS/TBq1Khw31CwjkibixcvSv369fXvzJkzy4wZM/T7I0eO6LyxT/BU+v3334eaxz///CMtWrTQ9UQ6VahQQX777bdQ0+HC0bhxY51XunTppHfv3vL06VOn64XjpU6dOrpvMc9q1arJtm3bXro9d+/e1XTD/+F5ekJaIc2wjDfeeEPT0hlklffq1UuyZs2q+yxPnjwyduxYu3S23b9Iv1y5cul8a9WqJZcuXdLl4TjB8rCvcHz7+/s7fZIqXLiwLgfHWLdu3Zxm1RvLwLzKlSsnW7Zs0ePWtujTOE+XLl0qgwcP1n2Ldbp3754uu2/fvlK0aFHd78mTJ5e6devKoUOH7JZjzGPZsmV6DmTIkEH3YcOGDXW7nPn77781PbEsLHPcuHHhqsOBffe///1P/Pz8dLtwzn766acS3uMYx2Lt2rV1/ZB2n332maa7Leyf1157TdKkSaPLKF26tPz444+h5on1++ijj2Tx4sXW/bFmzZpQdTjwf79+/fTvnDlzWq8l2EYct8WLF3e6ztg2rGtYcHxh/tgW4xhF2jrWM3LnvnR04MABnTeWgWXhmr9z506ndSC2bdsmffr00f2J5TRp0kRu3bol4YW0L1SokG53zZo19bMzW7du1esorpO4rs6ePTtC9YZeVicH6Y1rw59//mndv+GuYoDX05O9YcOG4ay03Lp1y2nSFC5c2FKtWjXr502bNun0JUuWtJQuXdoyefJky/Dhwy2JEye2lCtXzu6369ats/j4+FiyZ8+uy5k5c6alR48elpo1a1qnWb9+vcXb29uSL18+y7hx4ywjRoywpE2b1pIqVSrLuXPnQq0nltu0aVPLV199ZenUqZOO69+/v3W6o0eP6jLLlCljmTp1qmXWrFmWvn37WqpWrarfX79+3fLZZ5/p795//33LokWLdDh79qx+j23NkCGDxc/Pz9K9e3fL7NmzLStXrtTvGjdubPnf//5nGT9+vG5LixYtdD6Yv6127drpNhuwHca658mTxzJ27FjdVmxnlixZLM+ePbNb/xQpUlgKFSqk002fPl3XPV68eJaffvrJOt21a9d0HZFOSH+sU968eS3FihXTZdmmnTNYx4QJE+pyPvjgA8uMGTMsr732mv52wYIFlkyZMln69etnmTZtmh4DXl5eln/++cf6e6Rj+vTpLcmSJbN8+umnlkmTJlmKFy9uiR8/vt16Pnr0SPctloX9NGXKFD1ujPXE8WTYuHGj7ruKFStaJk6cqMcWpsO4Xbt2WafD+jluozEO/7/M4MGDddq33npL07dDhw66vdgfSBfDw4cPdflp0qSxfPLJJ3osvfvuu7ovevbsGWr/lihRQtMTaYFlYL0rVKigv0Xafvnll3r84/ft27e3Wyfj+Ma5gTT/6KOPNM3Lli1rd3zguMd0VapU0fn16dPHkjp1akvu3LmdnqdYH6wX1mnMmDG6TXv27NHpBw4cqMc3zofMmTPrcXflypVQ8yhatKimA+aB32BfYp9i3xqwbKRh1qxZNW2wntWrV9ffr169OlRa2e6nQ4cOWZInT67pPGjQIF0nHCtY7ssYxzGO/XfeeUf3Z/369XUZQ4YMsZsW59qHH36o02BbcL3CdL/++qvddBhXsGBBPb9wPcK5ceDAAet32FfGerdu3VrH4Vg1riUPHjywzJ07V8cfOXLEbt67d+/W8d9++22Y24Xtx3QNGjTQ9e3cubOuv+Mx6o596QyuS0mSJLFkzJjRMnLkSMsXX3xhyZkzp8XX19eyc+fOUOdhyZIldf/jWP7444/1WMa1MzyePHliSZkypS4HkFb4Pa55tg4fPmxJlCiRJVu2bHpsY3pck4xrS1jHnMF2fzq7tvz888+a7gUKFLDuX9zXwoMBh4kBB07Ip0+fWsfj5m57gj1//lwPSNx4AwIC7OYZEhJi/RsXw3Tp0lnu3LljHYcTGTcuXNwd1xM3B1tNmjTRC5UBJ35Y22OcpK4OQGwrvsPNxZGzk7JLly4abOEkeVnAgfX09/e3jl+1apWO/+WXX6zjatSooRcF2/khvXDDwkXV0KtXL/2t7Y345s2beqEJb8CB6UaPHm0dh/2EExg3xKVLl1rHnzhxItSJaSx/y5Yt1nH379/XfZ4jRw5LcHCwjkOAgel++OEH63S46SHwsg04sI3Yvtq1a9sdH0hzzPPNN980JeBAGiEQqFevnt1yEBTg97YXc1zAcJE9deqU3TxwocYF8OLFi3b7FzeowMBA63S4eWI8ArGgoCDreNyksA7GPjbWqVatWtZ0A9xo8Pv58+frZ5xvOIYQhNjO75tvvtHpnJ2nuXLlCnXcYrm2yzG2ATcP3LAc54Eb2L1796zjsS8xHue843ljeyPF+iJ4b9asmd1yHPcTAmoErhcuXLBbJ9v987LjGA8Htr/D/kWa2l4HHNMBgVyRIkX0xmgL88P159ixY6GW53geINB3dr7hOMDNfMCAAXbjEXDimEJQ4gqCeTyE4QHHFh4sHI9Rd+xLZ7AuSE/jwQyuXr2q+814mLM9D2vWrGm3/3r37q3njO354cqPP/6o8zh9+rR+xvoiLXFtd1wnjLc9bv7++29djlkBh7N7YHixSMVEKI7w8fGxfkaRCCBr08h+O3funGZHO1amMposXbt2TVuKIIsQ2fIGFLu8+eabsnr16lDL/eCDD+w+Y7l37tzRrGIwloXij8iWVyMLFdvnCNmwBlRiQsseLB9FOsgSfhnUtkbRku2626YZskdRvISsZWP+GLB9yII9ffq0XLlyRadF2qAIA1nqBmRftm3bNkLb2qlTJ+vfSDtk9yILFOtgwDh8Z6ynsXwsG0VXBmSzvv/++5qFiexfY7qMGTNqEZEBWcSYzhaOA2xfmzZtdHuNbX/48KFm3f71119h7k8cQ7h+vKxi14YNG+TZs2fSvXt3u6ZzOE4dLV++XPcR9pmxPhiQxYtiNKyTLRQvoSjIUL58ef3/7bfftiv3x3isg7EvjXXCOsSP/99lqnPnzpp9bRRT7d27V9MG423nh31ue1zZateund1xaxzfxnKwHZinUfS4f//+UPN499137SrsYV9inzqen5gHttWA6wOOEdvjxhGy2ZGOHTp0kGzZstl9F5GmjSgCsf0dPiNNkbYG23QICAjQ4jfsX2fbjCIRZOlHFo4DFJ2h4qNRtIO0RpGGUbzoysaNG7Xewocffmg3HsesI3ftS1uY77p163S9UZRnwO9wvqJYw7j+Gt5//327/Yd0xnwuXLggL4PiExQjo/gSsL4oyrYtVsG81q5dq+tke9wULFjwpcVVrwoDjkhyduI7XhyMCx5OZDh79qz+H1bbfOPgw8nhCAeOccOJyHJxU69UqZLeSNOnTy+tWrXS+iYRCT5Q9mwbTBlQloeySFxMcCPADd64wIan7sDL1h31U3BxGjJkiM7bdhg2bJhOc/PmTWva5c2bN9QynKWlKyj3xLxtYdtQ18Bxn2O8sZ7G8l3tN+N7439cOBzn5/hbBBvGDdJx27/++mut8xGeNH4ZY70c0w7LcbxpY51Qdu+4Pgg4bPeFq/1rBB+o/+FsvJGers4DHIO4wNumJRgXYgOCD1f9vqBugSOcC5MnT9Y0wA0LNfCxXYcPH3aaxo5phX2JdXDsq8DZcYM0tT1uHBnBSFjXCQQO169ftxts603hhmt7I4R8+fLp/7br+Ouvv2qQjuMeDzjY5pkzZzrdZmfpFlG4uaOOFOrYAIKfGzduyDvvvBPm71ztZ6yz4zHqrn3pGBTiocrV+Y51cKwHku0l1zpXUGcJwQ8CPlwPjQHXdATcp06dsq4TWgxF9RroTqxa7AROPsDOcwYHmjGNLVe1zB0rapntZcvFUwyemDZt2qRPhrhh4KkCFSARpYendrzjE6FxIuAkQKCBCmmooIR0wVPEgAEDwhXQvGzdjXmgEpirKN3xIhQVrtYnOvatse3jx4932VQZT26vEtYJOW3oD8AZ46YWE9MzrGN59OjRGtQiVwGVWXEjw00bOSxRacXiru1E01NUHrSF3NOIdK6Hmz4qSKIiOCrn4ukcrckWLFjgtEK0s3SLKJzDeOj57rvvdLn4H5U1jYDVDO7al1HlFcljAbmKeLiYOHGiDo6Qy4FmyBHhKqfMsbK/2RhwOIEWCHDy5MlQT2IINhC5orZ9ROGGDEePHnV5gtku2xGKKBCth5X16ApOOGTDY5g0aZKelKjxjiAE6xKZXuhQyxvZlWiehYuH7YXPLMZTGi6EL7soIe2MXAFbztLSHbB8V/vN+N74H8cALjS26e74W+N4QUBn5gXZ2XoD0s72qRhPTI5PX1inBw8euHV9bNcJaWK7Tniyx/FlLN+YDk98tjdgZL/jCRVFkeGBlhn4/bx580IF1TjnHDkeZ9iXWIfwLi8sxvbiGHEFrT3Q8swWbtwG3FiRU2IbABpPwkZQsmLFCn1AQDa8bZN1BBxREda1BDddFDmgdQRaNq1cuVKLw1720GO7n21zWnD9cTxGX8W+RI4JikFdne+43jreOyILAQVyu4wcXVtogYLgEAGH0ZopPNdAI3fFscVXeIp3ILK9lrJIxQnclJF1i6xFx4gYTThxMUNTqIgqVaqUnixTpkwJtaONKBdPGXiaXbhwod00uPggNwLNaSPKWXND44nZaIppBDER6R3QuEjYRui4IeBpySxoMoomVzixUL/FkW2zMqQNmqTt3r3b7ntXzcfMhuVj2Tt27LCOQ/EXjhlc5I3yb0yHjtZsmx8ikMV0ttBEETd4NF3ETd7Ry5rUhbdZLG7eCOimTZtmty9xnDpCPRZsH25SjnDs4NwwA9YJ5+CXX35pt064iWB7UH4NKNdGk050LGe7bOzzl2VVOx7Ljk+aeLI06pQ4+vbbb7VOkQH7EsdnZK4LjnDjQACP/hZQ/GDLWEfcMJBGtoNjruv06dPtfofP2M+4vhnbjBuH7VMtgjQEAVHxsmsJik+wb7p06aLHtW0dF1ewzigmwzXZ1Ta+yn2JZeChE/XibIteUDyEAAD1uPCgEFWXLl3S3Gmcd6hb4jigXh2CIzSdxzohBwn7z/a4QXcKjucr1g3Bl2Odq/Beu7GPI9OTLHM4XNzkhg4dqm31ceIj2xHRLLIxUeEJB1qDBg0inNiIenHC4Le44eNgQYCBmwLqQhgHBbLQcbBXrFhROnbsqEU7uBmgnDsy7yxAcQcOLFyk8aSAcnYcWChfNio44saGSpCzZs3SCkk4oFCRL6xyW7Tfx4UPdQx69OihF69FixaZni2OPhawnmhXj6chPAHixMaND/1ZGO3rkc2P5aPPip49e+o24CaObUb5rbsNHDhQjw/sO6QHsnIROOKJHE+TRkU2bAMulCjPRt8mOAaw3jjGbGF61NXA/ND3AY4X1KXBhRM5U7hooMdBV37++Wf9DZ5Yw6o4ihsciqzGjBmj/Y8gIEIF599//z3UEyH6WED/J5gO80RQhKAKfZTgQo2Lr7OnyIjCOg0aNEif3LA/cQ7iKQ3HLfoYMG5SCEpwTqDyIIoIcWHGOuAJGsd0eJ/EsD04T5BeOK6xPQhaHOtBGLBvcUxiehyLCM5QtId9awYEWpg/HlJQ2RDnIbYLRaLhef0Agg8UneLcxHmMfYnfor8Jo44SrgfI7UT6ItcB1wWca9iOqJwvOCYAOaioL4YgB9c8IxApWbKkPrEjCEB9B2zjy6AYBuc0ihRwLGCdcd4bx6jtfn5V+xL91hj9G6EyKwIiPBjhIc6xr5XI+v777/V6im12Bucqlovtw37G+YL9jgqpWCcE4bh34PrhuE9Rp++LL77Q/xG44x5h5IKFZx/jXoY0QFrhnonz76Ui3K7Fg3z33XfaZwCabKFJFdodow26bfNM2+ZVy5cvtxvvqunR1q1btUkjmk9h3mgjjbbZtjZs2GCpVKmSNslEe3y0PUfzpvA033VsxoS+HBo1aqR9AqAZF/5HM0THpo1okoo+CtD8zHa90fwJzaCc2bZtm6YR1hPzRVv5tWvXhupPwlWzWDShe1mzLEDTMzQJRpPCBAkSaFM29C2A5mKO7dCxvmgahmnQjHPevHnhbhaL/eHI1fZje9DU0HE9mzdvrm3msQ7o18CxTwNAs7WGDRtq82H0I4B+GtasWRMq3QD9HaCfFTT/xHGI5aL9PvarWf1woBkhjm30KYB9+frrr2s/A1iWbZNDo6kvmreiGS+OJ6w/mihPmDDB2j+Gq/3r6lwx1hXNs22hGSzOO+xz9CfQtWvXUE3KAf1vYF2RPkhzHJfo26ROnTovXTbgnEbfCMb249zbsWOH7ntnTWuXLFmiaYDm65gex4FjE1ZXx42rc8FxPyH90cTdOJby588fqh+NsI5jHItoVoxjDGmHc8qxuSjODTS9Nq5vWAfjumILn7t16+Z0ec7OV5x3OP/QlNbZuYc+dxyboL8MuhXA9uMagDRH093jx4/reYF+c9y5L13Zv3+/NltPmjSppvMbb7xh2b59e7iO7U3/Lt/xfLeF7gDQp0ZYcK5i3Y1m4X/++ace+zg30QQc3Rk426doEt2xY0ftNgD3IlxT0Bw9PM1i0UwZ6YTfOTY/DwsDDiKKc3BjRedf6AjPTGEFLTGFq8A5JkFfNOjbJrw3dlcQfGJ/jBo1Kk7uy7iGdTiIKFbDOz0ci/FQLo+6S3Htrc5xAfYV6uKghZtjU9GwOGs1aNQz4n6OHViHg4hiNVQUxrto0MkYKpCiWTZuaKgngHEUM6CuD+r/oP4R6lWgwmVEoCk/6uag3gKag6NzLaNOHfqkoJiPAQcRxWpoAYQmiKhoiVwNVAJEhVxUiHPWWR1FD7SqQuVUVE5H5VVXFSFdQTNVVJBEhUz04mlUJEXFRYod4qFcJbpXgoiIiOI21uEgIiIit2PAQURERG7HOhyRgN5H0VMkOsiKbBevREREMRVqW6AH1kyZMtm9sTkqGHBEAoINs/rJJyIiiqnQvTp6pTYDA45IQM6GsSPM6C+fiIgoJkFLIDxYG/c7MzDgiASjGAXBBgMOIiKKq+KZWG0gVlQaxQuF0NYeLyTCC2ps3wbqCG+NxItr8FIx442KjtPjpVNIRNsBLwMiIiIi94jxAQd6l+vTp48MGzZMexAsXry4voIXbzZ0ZvPmzdK6dWvtzQ5vE0WWEHqic3w1MQIMvILYGNBjHREREXlox1/I0cDrqPE6b6OFCIIIvI4arwN/meDgYM3pMF4HbuRwBAYGysqVKyNdtoVXxd+9e5dFKkQUY+H69+zZs+heDYrBfHx8xMvL65Xc52J0HQ6cKPv27ZNBgwZZx6F5DopJkHsRHo8ePZKgoCDt7tgxJyRdunQajFSvXl27x8V7GJx5+vSpDrY7gogoJkOTxvPnz4d6sR2RLVQpQJUFMyuHxsqA4/bt2xqho898W/h84sSJcM1jwIAB2o4YQYptcUrTpk0lZ86ccvbsWe3Xv27duhrEOIv0xowZIyNGjDBhi4iI3A/XTQQbeMkZHqzM6keB4paQkBCtnoBjpVChQk7vfx4TcEQVXt60dOlSzc1AhVNDq1atrH8XLVpUXwqUO3duna5GjRqh5oMcFtQjcWwuREQUU3OHkbOBYCNJkiTRvToUg6VLl05zw3DMJEqUyK3LitFhb9q0aTXiunHjht14fM6QIUOYv50wYYIGHOvWrdOAIiy5cuXSZZ05c8bp976+vtYmsGwKS0SxBXM2KCYdI/FjemWW0qVLy8aNG+2ygPC5YsWKLn+H1xePHDlS1qxZI2XKlHnpci5fvix37tyRjBkzmrbuREQxTXBIsAQFB5k+YL5EsTrgABRloG+NhQsXyvHjx6Vr167y8OFDad++vX6Plie2lUrHjh0rQ4YMkfnz52tFmOvXr+vw4MED/R7/9+vXT3bu3KnlVgheGjVqJHny5NHmtkREcRGCgst3r8n5wMumD5ivWUHHwYMHtSg8PFAMXqJECYltLBaL9hd14cIFa+MGdOeA+1C+fPnkxx9/dPnb5s2ba71EVPZEa0tbu3bt0q4jMA80hjC6g3jy5Ik+vKPFSXSK8QFHy5YttXhk6NChemDhYETOhVGR9OLFi9qPhmHmzJlaFoWdghwLY8A8AEU0hw8floYNG+pO6dixo+6ILVu2aNEJEVFcFGIJkWchQeIVL774evmYNmB+mC/m/6oDjsh6/vy5RKfly5fr/Sd79uz6Gfcn3H9QrL927Vr58MMPNdfdmQ8++EDTyBFy/9u2bStTpkyRU6dOyVtvvSW9evXS71CH8Z133pGJEydKtEI/HBQxd+/eRTsz/Z+IKKZ59OiR5dChQ/q/4dnzZ5ZTt/+xXAi4bLly77ppA+aH+WL+L/P5559b8ufPbylZsqSlXLlylgsXLth9f+PGDUvWrFktyZMntxQvXtzSpUsXHb9mzRr9TdGiRS1Vq1a1HDt2TMdv2rRJpzNgukqVKllKlSplKVu2rOWPP/6wTleoUCFLhw4ddPoffvjBsnjxYl2HEiVKWIoVK2b5v//7P+t8qlWrZvn4448tlStXtuTKlcu6HhAYGGjp2LGjpXDhwvq79u3bv0jfZ88sAwYM0OViGS1atLD4+/s7TYfq1atbNmzYYP2MdduxY4f1M347d+7cMNMS96CAgADr5927d2vaGu7du2fx9fW1PH78WD9fu3bNkiFDBktISMhLjxV33efidCsVIiKKGdCXEYq7T58+rRX1XbWY+Oyzz7RTRqNjRjTbbNOmjRafoFXh4sWLNQf72LFjdr/9559/ZPjw4ZpDgMr9yC1AsQWKzgFF8l999ZXMmzdPPyMHAcUYKJrANBUqVNAiDiOnG10moMdq9OOEJqPoNgF1B5FrgNYcyClHhctbt27p9OPHj9cWQcarNFCPcPDgwfpqDltBQUGybds27dTSgJx6I7cDUB0A4yLCcR7oVwPpgLebI73R0ALrjXQrUqSIRAcGHERE5Ha4keMVFbjZoRsCBBT4/2VQLwGBBgZAsUG3bt1Cva4CRe0IMqpWrWodh4DAuHHjplutWjXrd+fOndN5odGAt7e3+Pv767gCBQpYi/MxHgOK8xGAIOD49ddfdZ2M1h1+fn76P7YHdSRWrFihn1G0j8DBWf9SXl5e2kfKq4agA9vLgIOIiOIs5Cjg3Vh4wkani2ZDKcObb74p33//fajvEJw43uDRHxO6TkBuCaA3alSuNNj23YQA4WX1PrD8adOm6bu7wpI4cWLN7cH0xptYs2XLprkrRktJ5Li8bD6OjHkY0LcGAiBUMDVg+9zd10asrjRKRETmeR7yXJ4HmziEhK8CJloLooI/brhGb6jOWk2gGMB2PIo6jhw5IkePHtXPqFCaOXNmHWyhleGGDRu0qMMQ1pvFAwICrIHPd999p5/DAw0OUMkTlTTBKFJp3LixTJ48WVucAP53LPYBvJ8E644cE0OLFi1k1qxZ+jdyWVB8hPlFBBo/oLgGxUAwe/ZsadCggTVwQnpjmUZOUXRgkQoRkQeIHy+++MRPoC1KgoPNfaEb5ov5h6Vw4cLaJQGKPHATxBP+pEmT7F47AejtGTd0dNj42muv6Y0Y9TbQBQJyGfD+K7TyMHIHDGhSityNLl266M0eRRolS5Z0muMBU6dO1dyNlClTahNS5BCEB4KK3r176407QYIE+nJRdN2A12gg5wJ1M4x1wzhst6PmzZtrXROsMyBdOnTooEVMyE3By0bRGSVg+1EPA3VboF69enLo0CFrmubNm1cDFBTxIHDC9iMnAzkbixYtsi5z69atuq6O7xV7lWL822JjIr4tlohissePH2vlTNyMbLPQ0VeGWc1XbSHY8Irv3vdwxCUXL17UoAN1QRwDJ3dBERK6gUCxU3iOFY97WywREZkHQQH+UfTKli2b5n6gbkmWLFncvjzkeKDCrGOw8aox4CAiInrFmjVr9sqWhSIs9NId3VhplIiIiNyOAQcRURxltKQgignHCItUiIjiGLxpG5UR0Usneu/ka+rJVbCBYwTHCo4Zd2PAQUQUx6BpJXq5RAdS6ACKyBUEGzhWcMy4GwMOIqI4CO/SwDtA0B8FkSvI2XgVwQYw4CAiiqNwI4nOrqyJbLHSKBEREbkdAw4iIiJyOwYcRERE5HYMOIiIiMjtGHAQERGR2zHgICIiIrdjwEFERERux4CDiIiI3I4BBxEREbkdAw4iIiJyOwYcRERE5HYMOIiIiMjtGHAQERGR2zHgICIiIrdjwEFERERux4CDiIiI3I4BBxEREbkdAw4iIiJyOwYcRERE5HYMOIiIiMjtGHAQERGR2zHgICIiIrdjwEFERERux4CDiIiI3I4BBxEREbkdAw4iIiJyOwYcRERE5HYMOIiIiMjtGHAQERGR2zHgICIiIrfzNmtGQUFBcv36dXn06JH4+flJ6tSpzZo1EREReXIOx/3792XmzJlSrVo1SZ48ueTIkUMKFiyoAUf27Nmlc+fOsmfPHvPWloiIiDwr4Jg0aZIGGAsWLJCaNWvKypUr5eDBg3Lq1CnZsWOHDBs2TJ4/fy61atWSOnXqyOnTp81dcyIiIor7AQdyLkaMGCE7d+6UIUOGSO3ataVo0aKSJ08eKVeunHTo0EGDERSzNG7cWLZs2WLumlOsMWPGDA1OEyZMKOXLl5fdu3e7nPbYsWPSrFkznT5evHgyZcoUpzlrvXr10ly0RIkSyWuvveY0J+348ePSsGFDSZEihSRJkkTKli0rFy9eNH37iIjIjQHHkiVLpGfPnnL79u0wp/P19ZUPPvhAAxDyPMuWLZM+ffpojtf+/fulePHiGpzevHnT6fSoA5QrVy754osvJEOGDE6n6dSpk6xfv14WLVokR44c0Vw05LJduXLFOs3Zs2elcuXKUqBAAdm8ebMcPnxYA2MEPURE9OrFs1gslsj+OH78+JqDkS5dOvEk9+7d06fmu3fvat0Vcg05GshZmD59un4OCQmRrFmzSvfu3WXgwIFhJh1yOZCTgcHw+PFjSZYsmaxatUrq1atnHV+6dGmpW7eujBo1Sj+3atVKEiRIoEEJERFF/32OzWLJbZ49eyb79u3T3AfrARc/vn5GPZ/IQL2g4ODgUDkVKFrZunWrNaj57bffJF++fJqbgoAYgQ/qGRERUfSIcsCBViobN26UgIAAc9aI4gwUtyE4SJ8+vd14fEbOWGQgd6NixYoycuRIuXr1qs7/u+++0wDm2rVrOg2Kax48eKDFMqiwvG7dOmnSpIk0bdpU/vzzT1O2jYiIXnE/HMgqR+VRVPBDVnmpUqXsBlfl8ESRhWIS1AnKnDmzeHl56XHWunVrzU0xcjigUaNG0rt3b/27RIkSsn37dpk1a5Y24yYiolgWcKBVAbK5Dxw4oJUCMcydO1cuXbqkQQgCDtvKfOQ50qZNqwHBjRs37Mbjc1QC0dy5c2tOxcOHD7WcMWPGjNKyZUutbGos19vbWwoVKmT3O/QRYxS7EBFRLAo4EFBApkyZdLCtxHfnzh194kTfHOSZfHx8tDInitzQNNrIfcDnjz76KMrzR1NXDCjOW7t2rYwbN866XFRUPXnypN306CMGTWmJiCiWBRxhNXBJkyaNNlfEQJ4LTWLbtWsnZcqU0f5Z0K8Gcibat2+v37/77rtaNDJmzBhrRdO///7b+jdyxxC0Jk2aVPt4AQQXOPby588vZ86ckX79+mnzV2OegHHI9ahataq88cYbsmbNGvnll1+0iSwREUUDSxSsXbvW8uTJE4unuXv3LiIt/Z9ebtq0aZZs2bJZfHx8LOXKlbPs3LnT+l21atUs7dq1s34+d+6cpq3jgOkMy5Yts+TKlUvnlyFDBku3bt0sgYGBoZY7b948S548eSwJEya0FC9e3LJy5UruLiKiaLrPRakfDk/FfjiIiCguu+ep/XBEpGtsVFitUqWKpEqVSgf0+eA4PWKsoUOHamVD9N+AafiuFyIiIveJH9e6xkYZPZpIbtq0SftmQFNd1COxbSmDyoVffvmlNpHctWuXVjzEPJ88efIKt4yIiMhzxPgilah0jQ3oGAo5Hfg9Kihic9Gi5uOPP5a+ffvqNMgyQmdU33zzjXaJ/TIsUiEiorjsnqcVqZjRNTZeBhYUFCSpU6fWz+fOndNeLm3niURFYBPZ7raJiIjIzR1/RVfX2CdOnAjXPAYMGKA5GkaAYXSpHZHutp8+faqDbeRHREREryCHA8Uc6EUyvANyJvD/q4R3aSxdulR+/vnnKL2WHH1EIBfEGFCkQ0RERK8ghwO9RaKoIqZ2jT1hwgQNODZs2CDFihWzjjd+h3mglYrtPPG+DWcGDRqkFVdtczgYdBAREb2CgMOsSiTu6BobrVA+//xz7ZESPVzaypkzpwYdmIcRYCCAQGuVrl27Op2fr6+vDkRERBQH63BEpmvssWPHah8b33//vfbdYdTLQNfYGPD+l169esmoUaMkb968GoAMGTJE63kYQQ0RERGZK0a3UgG8DwPFIwgikCOB92rgvRhGpc+LFy/KtWvXrNPPnDlTW7c0b95ci0yMAfMw9O/fX5vVvv/++1oX5cGDBzrPiNbzQKVW27+NyqR4ey4CHaOiKQIk235D8GI7NDUCVIq1nRatamyLkPz9/SUwMNCau4Npjf5CHj9+rJ+Nls14iRkGwDh8h2kAv8Fn49XtmCfmbcAysWzAumBarBtgXbHOBmwLtsl2WmwzIA1s0+XWrVuavoD9gmmNorj79+/r97bTGmmIaTAtfgOYh20aviy9bdPQWXobaYhttq0s7Cy9jTR0TG9MZ6Q34DsjDcOT3o5paKQ3tssxvR3TMKz0RrrapqGr9HaWhq7SG+tjTOt4zDqmd1jHrGN6I/2MaR2PWSO9XaWhs/R2dcw6S29XaegsvY00xLSOx6xjetum4cvSm9cIXiNCYvA1wuNyOADFJ66KUBxfxnX+/PmXzg+5HJ999pkOUfHTTz9Z+/L4v//7P8mWLZu2hsFOW7hwoXZAhnFHjx6VnTt3Ss+ePXXa1atXa/2UunXr6kUV0269WSBK60Keq1HBW9KpUyf9+8cff5TChQvrS+twQcKxhRxCFCMeOHBAjh07Zi06XLlypebw1ahRQ2/QmLZt27aSJUsWOXLkiOzZs0d69Oih0/76668a5NepU0cvgpi2RYsWkitXLjl+/Lj89ddf1npOCN6TJUsmDRo00AslpkXuIV62hx598T1ajwHqWHl7e0uTJk30Yopp69evr9uAJux44V7v3r21eBXnOuaHhxD49ttvtVM/PIhcunRJz0c8SCROnFi2bt2qwczbb7+t0yLHs1KlSppLigcUdCj4wQcfaCVwnJtXr16V9957T6f94YcfpFSpUvLaa6/pxfe7776TDh06iJ+fnzbTxwsDO3furNNimXhxYLVq1XR5WH/kuuIhBw9Hhw4dkm7duplyjcBDVO7cubWF3h9//GG99qxbt063uWHDhnrjwLSNGjXS9cK6Yl54mSGue/gdNGvWTAM8TPvWW29J0aJF9dq5atUqzQFGETL2KQI6o2+iRYsWSfXq1TVtLl++rMcatg05x9u3b9eb2jvvvKPTLlmyRCpUqKDdDeDGic94wEOfSOj5GQ+KSFMjvdGhY+XKlfWYxX5FDna6dOm0s0dsb5cuXazHLF7iiBcy4gaN9cc+Ri734cOHdXrjXoFjFjnXOEaMYxbHDnK+cR5s27ZNjy34/fffdd3wxnPjmG3atKnmguMt00hjPKjC+vXrNX1wTOOmjmlxrBcqVEj++ecfXS76ecJxjQ4oMQ3OFcC0OIewvRcuXNDtwTmGHq+3bNmix0WbNm102sWLF+t5jNx9dFy5fPlyPXdRnQHpjXTFuQ1oHIGH54oVK2rwgd/imoCXqOI8xrkUmWuEx3X8FZM7RDl79qxecAEnGy6KOBhwgOEzDmAcmDjYMeAEAuxkHIyYBy6yuKh1Hr8rmreKYqsFgyrpzQlwLCGnDjd83HxwrOGikyBBAr2YIScAN05Xxyz6q8E4PC3hZmN7zGIemNY4Zm2Pb0xv5DriKQ2t0lKmTKlPb7gA4m+sF+aJ88eovI2bNG6E+B6XIlxEcV7gAowbLQIhrAPmhxsM5mf0qYMnM6wPbrbYLnyPbUNFc/wO24RtB8wXN0b0KowbCpaLNMN5iPXBU6GRhlhfzBPTYzy2x0hDTIvfG2noLL1t0xDbEFZ6R+QaYUyLNMS+DE96G2mIaZHORo4c5uWY3kYaukpvTIvtRNoYaegqvbEOSOvwpDe2Dct3lt6OxyymRRogDZ2lt+0x+7L0tj1mnaW3q2PWWXo7HrNGeiMNkc5YrqtjNqz0djxmjfTG+mD7bdPb8ZgNK73Dc41wR8dfbg048NSBLsnnz58vcYk7dkSDj1eZMh/yPL9MbBTdq0BEccy92NbTKKIsZNcQERGRZ4tSHQ6USYYF5VlERFGFMnzkmKIuBrKyicjDAg5UmkE5VVilMvieiCiyUPkSlTUBL2EcPHgwE5MoFopSkQpqYqOWNiq6OBtQY5iIKCrmzp1r/RutBYzmf0TkQQEHegE1njyceVnuBxHRy3I30AuwAS0G0ASQiDws4EDbbrRVdwXtpdEOmYgoqrkbBtTjYC4HkYcFHFWqVNFOTFxB+2F0iENEFJXcDfRTAOjrAM31mMtBFPvE+K7NicgzoX4Y2L7FGb2i2n5HRLEHAw4iipEQaKAnX3ThbbR2Q7fg6OoZXWYTUewSK96lQkSeB++ywGAL3TfPmjUr2taJiCKPORxEREQUewIOvD3QeM2u7d9EREREpgUceDWv8Wp427+JiIiITAs4bDv4YmdfREREZIt1OIiIiMjtGHAQERGR2zHgICIiIrdjwEFERERux4CDiIiI3I4BBxEREcWegOOTTz6R1KlTh/qbiIiIyLR3qQwaNMjp30REREQsUiEiIqKYHXD4+/ubtyZEREQUZ0Up4KhYsaKcO3fOvLUhIiKiOClCAceSJUvsPr/xxhtSoUIF2b17t9nrRURERJ4WcFy/fl2aNm0q69evtxs/a9Ys6dWrl9SoUUNWrVrlrnUkIiIiTwg45syZI0FBQTJ//vxQ36FFCgKP1q1by7Rp09yxjkREROQJAUePHj20X41mzZo5/b5t27ayYsUK6dOnj1SrVk369+8vy5Ytk9OnT5u9vkRERBRX++FImTKlLFy4UFavXh3qu8DAQJk+fboOfn5+kiVLFvn9999l8uTJEhwcLMmSJZO7d++6Y92JiIgoLnb89dZbb9l9Rv0NFLOkSpVKhgwZIp06dRJfX1/97vHjx3Lw4EE5cOCAuWtMREREntXT6C+//CKTJk2Sdu3aSYIECey+S5QokTabxUBERESeLUoBx6lTp8TLy8u8tSEiIqI4KdIdf128eDFCwcaVK1ciuygiIiLy1ICjbNmy0qVLF9mzZ4/LaVBZdO7cuVKkSBFtxUJERESeKdJFKn///bd8/vnn8uabb0rChAmldOnSkilTJv07ICBAvz927JiUKlVKxo0bF6rCKREREXmOSOdwpEmTRiuMXrt2TZvE5s2bV27fvm3tewN9c+zbt0927NjBYIOIiMjDRanSqNEapXnz5joQERERuSXguHDhghw+fFgyZMig9TqIiIiITA048PbY9957T9+zEi9ePClZsqT2MooeR4mIiIiiXIcDRowYIW3atJETJ07IunXrdNzAgQOjMksiIiKKg6KUw/HPP//ImjVrJEeOHJIvXz757rvvtLXKvHnzzFtDIiIi8uwcjufPn0vixImtnwsUKCAhISFy/fp1M9aNiIiI4ogoBRyAt8hu375dHjx4oJ+9vb3l0aNHZqwbERERxRFRKlKpUqWKjBo1Su7fvy/x48eXnDlzypMnT7RIpWbNmlKmTBl9PT0RERF5tigFHH/++af+j86+0MnX/v37dZg5c6aMGTNGgxB0CHb8+HGz1peIiIg8sR8OQFCBoVWrVtZx586dk71798qBAwfMWAQRERF5esDhDIpXMLRo0cJdiyAiIiJPqTRKRERE9DIMOIiIiMjtGHAQERGR2zHgICIiIrdjwEFERERux4CDiIiI3I4BBxEREbkdAw4iIiKKPQHHli1b5O2335aKFSvKlStXdNyiRYtk69atUZ73jBkzJEeOHJIwYUIpX7687N692+W0x44dk2bNmun08eLFkylTpoSaZvjw4fqd7YA33RIREVEMDjhWrFghtWvXlkSJEmlX5k+fPtXxd+/eldGjR0dp3suWLZM+ffrIsGHD9D0txYsX12XdvHnT6fR4U22uXLnkiy++kAwZMricb+HCheXatWvWwYzAiIiIiNwYcOCNsbNmzZK5c+dKggQJrOMrVaqkQUJUTJo0STp37izt27eXQoUK6XISJ04s8+fPdzp92bJlZfz48fpeF19fX5fz9fb21oDEGNKmTRul9SQiIiI3BxwnT56UqlWrhhqfIkUKCQwMjPR8nz17pm+hxavuDXgDLT7v2LFDogJvuM2UKZPmhrRt21YuXrwYpfkRERGRmwMO5BCcOXMm1HgUU+CGHlm3b9+W4OBgSZ8+vd14fL5+/Xqk54t6IN98842sWbNGZs6cqW+2rVKlity/f9/p9Cgiunfvnt1ARERErzjgQJFHz549ZdeuXVoB8+rVq7J48WLp27evdO3aVWKaunXr6ltsixUrpvVBVq9erTkxP/zwg9Ppx4wZo7k1xpA1a9ZXvs5ERETi6a+nHzhwoISEhEiNGjW00iaKV1B/AgFH9+7dIz1f1Kvw8vKSGzdu2I3H57AqhEZUypQpJV++fE5zaWDQoEFacdWAHA4GHURERK84h+PSpUt6U/b395ejR4/Kzp075datW/LZZ59FqW6Ej4+PlC5dWjZu3Ggdh8AGn9H81iwPHjyQs2fPSsaMGZ1+j+ApefLkdgMRERG94hyOnDlzatPSdOnSaUsSw507d/Q71MOILOQstGvXTsqUKSPlypXTfjUePnyorVbg3XfflcyZM2uxh1HR9O+//7b+jT5BDh48KEmTJpU8efLoeOS8NGjQQLJnz67FP2hyi5yU1q1bRzEliIiIyG0Bh8VicZlzgM66oqJly5aaWzJ06FCtKFqiRAmt7GlUJEUOClquGBBAlCxZ0vp5woQJOlSrVk02b96s4y5fvqzBBQIiPz8/qVy5subK4G8iIiKKYQGHUa8BFUUREKB/DANyNVCJFAFCVH300Uc6OGMEEQb0MOoqADIsXbo0yutEREREryjgQK+igBv8kSNHtM6FAX+jV1AUX8RVQcFBOhBF93HoKZ6HPPeo7SWKLu44z6IUcGzatEn/R32KqVOnelxlyot3r0jSEPbJQdHrfOBlj9kF1x/c8qjtJYouD1z0SxXtdTgWLFggnii+xBdfr/9ydYiigycdgwniJ/Co7SWKLo/c8DJ5UwIOA1qHoBInWofYatiwocRF3vG9xdvL1CQkivhx6EHHoFd8L4/aXqLovL+ZPk8zZvLPP/9IkyZNtB4HKpAalTbxN0SlWSwRERHFfqbkmaBbc/S3gVfGo6XKsWPH5K+//tK+MxxbkRAREZHnMSWHA29u/eOPP7QrcvSJgQF9W6Azrh49elhbsxAREZFnMiWHA0UmyZIl078RdKDzLUBPnnh1PREREXk2U3I4ihQpIocOHdJiFbz6fdy4cdoPx5w5c6L0enoiIiKKG0wJOAYPHqzvNwG8sK1+/fpSpUoVSZMmjSxbtsyMRRAREZGnBxy1a9e2/o0XpJ04cULfHJsqVSprSxUiIiLyXFGuwxEUFCQ1atSQ06dP241PnTo1gw0iIiIyJ+BIkCCBHD58OKqzISIiojjMlFYqb7/9tsybN8+MWREREVEcZEodjufPn8v8+fNlw4YNUrp0aUmSJInd95MmTTJjMUREROTJAcfRo0elVKlS+vepU6fsvmOlUSIiIjIl4DBeU09ERETkjPnvnyUiIiJywICDiIiI3I4BBxEREbkdAw4iIiKKPQHHli1btD+OihUrypUrV3TcokWLZOvWrWYtgoiIiDw54FixYoW+TyVRokRy4MABefr0qY6/e/eujB492oxFEBERkacHHKNGjZJZs2bJ3LlztatzQ6VKlWT//v1mLIKIiIg8PeA4efKkVK1aNdT4FClSSGBgoBmLICIiIk8PODJkyCBnzpwJNR71N3LlymXGIoiIiMjTA47OnTtLz549ZdeuXdqV+dWrV2Xx4sXSt29f6dq1qxmLICIiIk/v2nzgwIESEhIiNWrUkEePHmnxiq+vrwYc3bt3N2MRRERE5OkBB3I1Pv30U+nXr58WrTx48EAKFSokSZMmNWP2REREFMuZEnAYfHx8NNAgIiL3QxcEMyZOk41rN0jQsyAp91p56fNJX0mdJrXL3/y5cbOsWv6znDx+Uu7dvSfzl34jeQvks5ume8ducnDfAbtxjZo3lr6D+1s/Txk7SY4cPCLnzvwj2XPmkAU/LHTDFlJcYkodjk6dOsnmzZvNmBUREYXTtAlfyra/tsln40fJtHkz5PatW/Jpn0Fh/ubx48dStGRx+aDnh2FO16BpQ1m54Rfr0LVXt1DT1GtUX6rXrhHu/XXj2vVwT0txjyk5HLdu3ZI6deqIn5+ftGrVSnscLV68uBmzJiJyq0cPH8qEUeNly6a/JHHSJNKmXVvZunmL5M2fV3r076XTrPn1d/nx++Vy8fxFSZQooZQqW1p69O8pqVK/yEk4sGe/9Oj8kYz9crzMnjZLLl+4JHny55UBwwZKrjy53bLeD+4/kN9+/kWGjhkupcuV0XGDRnwqbzdpI8cOH5XCxYo4/V2d+nX1/2tXroU5/4QJE0qatGlcft9rQB/9P3BmgJw9dTZc6/z5kFESGBAgdRq8JbXq1Za0fmklIrAfvpu/SK5dvio+vr6SPWc2mTp3utYZJA8JOFatWiUBAQGyfPly+f7772XSpElSoEABadu2rbRp00Zy5MhhxmKIiNySS3Dk4GEZM3WcpE6TSuZ99bWcOnFSAw5D8PNg6fRhZ8mWI5sE+AfI9Alfyughn8v4GRPt5vXVlBnSs18vSZ02jcyZNksG9ugv369aJt4JnF9q+3brI4f3H3K5bukzZpBFPy12+t3J4yfk+fPnUqZ8Wes4FG2kz5hejh5yHXCE17rf18m61Wu1eOa1apXlvc7tJWGihFGa54hxI2XjmvWy5tc1mj5lK5STOg3rSuXXq7w0aECANHrIKPmwdzepVuMNCXoepMU5XvG9orROFAvrcKRKlUref/99HS5fvixLliyR+fPny9ChQ/WkICKKibkba375XXMJypT/L5egyZsN7aar17i+9e9MWTJLzwG9pXPbjtoqL3HixNbv2nfpIGUrltO/Px05RJrWbiR//fGny2KHAUMHWV8F4Yy3t+ubqf9tf+3ZOVnyZHbjU6dOLf537khUvFn3TUmfKYOk9fOTs6fOyKypX8ml8xfl80ljojTfVKlTSfM2/9Ph/D/nZc0vq+WrSdM1h6lG7RpSt+FbLgOl4OBg/T9bjuySMXPGF39nzxal9aFYXGkUgoKCZO/evdonx/nz5yV9+vRmL4KIyBRXL1/VB6JCRf6r7J40WVLJmsP+Rnby7xMyf9Y8OXPqjNy/d18sISE6/sa1G5Izd07rdEVsbpbJUyTXG+KFc+ddLt8vvV+M3JMNmze2/p07b25J45dGer3fQ65cuiyZs2YxZRk5cuXQeiTvd/9AlixcLF/PmCsb12yQ37euczp9lmxZZODwT2Ro/8ESEhwi+Qvml5nfzjFlXSiWBRybNm3S4hS8yA19cjRt2lR+/fVXqV69ulmLICJ65VDJ8uMPe0u5iuVl6OhhkjJVSg00MO55UFCU5h2VIpXUaVPrAx4CINtcDn9/f0mdxnXdi8goVLSw/n/ZxIDjxvUbsn71Wln761q5dvWqvPFmdXmrUT2X0wf4+8vc6bO1js3rb74hSdjtgmcGHJkzZ9aDHBVH58yZIw0aNGAlHiKK8TJlySTe3t5y/NhxvbkblTFR6bNEqRL6+eK5C3I38K506dlV0md4kWN74u8TTud37PAx63zu37snly5c0noVrkSlSCV/wQK67vt275XXa77xYl3PX9BgqEjxqNXfcHT6xGn9P03aiFXydFaEtXnDZln76+9ycN9BKVK8qLR8p5UGG0mSJgnzt5j+yZOn0qFrpyitA8XygGP48OHSokULSZkypRmzIyJ6JRInSSJ1GtSVrybP0CIQ1EWbN+triRc/Hno01GnSZUivdSVWLPlRGrdoLP+c+UcWzvnG6fy+mTNfkqdMoZVP8TSeIlUKqVI99IstzShSQdFPvSYNZPrEL3XdkyRJIlO+mKTFOrb1INo2biVdenSVqtWr6Wf0vYHmqbdv3dbPFy9c1P9R0RWtUlBssv739VKxckVJniKFnD19RqZNmCrFS5eQPPnyWOd7+eJlefzokfjf8deg6fSJUzo+R+6cdm8NtzWo90BtYVKrfh3pP3RghHJLULTz+PEjTdfa9euIl5eXnD19VrJmz2ZXrEVxPODAu1SIiGKj7n17aKXFAd37WZvF3rx+U3x8fawVHT/57FOZM222rFiyXPIVyCfd+nwkA3v+1wmWoUvPD+XLcZP1ZoxmsV9MHe/y5mvWusePF08Gf/yJXcdfttCUF7k2BjT5HTPsc+vn4QOGWiu8IvfAO0EC2btrjyxfvEyePH4i6dKn01Yh7Tq/ZzffsSPG2HUO1qHVi+9/+G2FtVKno48/6asBAnqnjihUFh01YbR8+/VC+XHJcq3HkS1ndhk4LOx+RyjmiGexWCyR+WGfPn1k5MiRGlXj77CgmWxccu/ePUmRIoUcvXBcn4jM0GX4TlPmQ55n9vAKEtc1qdlQWymMnjLW9OICZ3U2mr7ZSLp93F3qN2kQrt8Y/XCs/mttqFYjRLFRQECAFMleUO7evSvJkyeP3hyOAwcOaIUl429XIhPJEhG9KuhzA/U0ChYpJA8ePJRvZs/X8egbgojM4x2VVimGhQsXSpYsWSR+fPue0pF5cunSpaitIRGRmy35don2M4EOulAZc/qCmdoahYhiWB2OnDlzyrVr1yRdunR249FyBd8ZHbYQEcU0+Qrkl3lLFkRpHiXLlpItB7ebtk5EcZEpL29zVQ0Er6lHf/xERETk2aKUw2FUFkU9DXRhbtvFL3I10NtoiRIv2rITERGR54pSwGFUFkUOx5EjR8TH50UzMsDfeGNs3772TbSIiIjI80Qp4DAqjrZv316mTp1qWtMZIiIiiltMqTS6YEHUKlwRERFR3BbpgMOTO/4iIiKiiGHHX0RERBQ7Ov6y/ZuIiIjILf1w4N0Djx49sn6+cOGCTJkyRdatW2fG7ImIiCiWMyXgaNSokXz77bf6d2BgoJQrV04mTpyo42fOnGnGIoiIiMjTA479+/dLlSovXnT0448/SoYMGTSXA0HIl19+acYiiIiIyNMDDhSnJEv24pXMKEZp2rSpvsitQoUKGngQERGRZzMl4MiTJ4+sXLlS3wy7du1aqVWrlo6/efMmOwMjIiIicwIOvEcFXZjnyJFDypcvLxUrVrTmdpQsWZLJTERE5OFM6Wm0efPmUrlyZX1FPd6fYqhRo4Y0adLEjEUQERGRpwccgIqiGGyhtQoRERGRKUUqRnNYNIXt1KmTDpMnT5a7d++aMu8ZM2ZocU3ChAm1yGb37t0upz127Jg0a9ZMp48XL572BxLVeRIREVEMCDj27t0ruXPn1iDD399fB7w/BePQZDYqli1bpu9qGTZsmM4LRTa1a9fWCqmuWszkypVLvvjii1A5LpGdJxEREcWAgKN3797SsGFDOX/+vPz00086nDt3TurXry+9evWK0rwRuHTu3Fnat28vhQoVklmzZknixIll/vz5TqcvW7asjB8/Xlq1aiW+vr6mzJOIiIhiSA7HgAEDxNv7vyoh+Lt///76XWQ9e/ZM9u3bJzVr1rSOQ/8e+Lxjx45XNs+nT5/KvXv37AYiIiJ6xQFH8uTJ5eLFi6HGo18Oo0OwyLh9+7YEBwdL+vTp7cbj8/Xr11/ZPMeMGSMpUqSwDlmzZo3UsomIiDyVKQFHy5YtpWPHjlo3AkEGhqVLl2rl0datW0tsN2jQIK0AawzYPiIiInrFzWInTJigLULeffddCQoK0nE+Pj7StWtXrbwZWWnTphUvLy+5ceOG3Xh8dlUh1B3zRF0QV/VBiIiI6BXlcCC4mDp1qgQEBMjBgwfl0KFD2lIFrVaicqPGfEuXLi0bN260jgsJCdHPRm+mMWGeRERE9Ir64Zg3b5529IVWImXKlNG/v/766yjPF81X586dKwsXLpTjx49rrsnDhw+1hQkgVwVFHraVQhH0YMDfV65c0b/PnDkT7nkSERFRDCxSwbtU0NS0e/fu1lwCtPhAc1lUJv3ss8+iVD/k1q1bugxU6ixRooSsWbPGWukT80crE8PVq1ft3t+C4h4M1apVk82bN4drnkRERGSueBaLxRLVmfj5+cmXX34ZqoLokiVLNAhBy5C4BM1i0Vrl6IXjkipVKlPm2WX4TlPmQ55n9vAKEtc1qdlQW5eNnjJWihQvEt2rQxTnBQQESJHsBbWhBFqixpgiFVQURTGKI9SVeP78uRmLICIioljMlIDjnXfekZkzZ4YaP2fOHGnbtq0ZiyAiIqJYzNvMSqPr1q2TChVeZO/u2rVL61egUicqaRpQ14OIiIg8iykBx9GjR6VUqVL699mzZ639XWDAdwb01UFERESex5SAY9OmTWbMhoiIiOIo0/rhMGzbtk1fdkZERETktoCjbt262tkWERERkdsCDhO69SAiIqI4xvSAg4iIiMjtAcfs2bPZRTgRERG5px8OQ5s2bcyeJREREXlqwGHbmdfLsLMvIiIizxbpgOPAgQN2n/fv36/vTcmfP79+PnXqlHh5een7VIiIiMizeZvR2RdyMJIlSyYLFy60vj0Vb5pr3769VKlSxZw1JSIiIs+uNDpx4kQZM2aM3ava8feoUaP0OyIiIvJspgQc9+7dk1u3boUaj3H37983YxFERETk6QFHkyZNtPjkp59+ksuXL+uwYsUK6dixozRt2tSMRRAREZGnN4udNWuW9O3bV5vEBgUFvZixt7cGHOPHjzdjEUREROTpAUfixInlq6++0uDCeD197ty5JUmSJGbMnoiIiGI5Uzv+QoBRrFgxM2dJREREcYBpXZtv2bJF3n77balYsaL1bbGLFi2SrVu3mrUIIiIi8uSAAxVEa9euLYkSJdIOwZ4+farj7969K6NHjzZjEUREROTpAQf620DF0blz50qCBAms4ytVqqQ9kBIREZFnMyXgOHnypFStWjXU+BQpUkhgYKAZiyAiIiJPDzgyZMggZ86cCTUe9Tdy5cplxiKIiIjI0wOOzp07S8+ePWXXrl0SL148uXr1qixevFj75ujatasZiyAiIiJPbxY7cOBACQkJkRo1asijR4+0eMXX11cDju7du5uxCCIiIvL0gOPSpUsyaNAg6devnxatPHjwQAoVKqT9cly8eFGyZctmxmKIiIjIkwOOnDlzyrVr1yRdunQaaBju3Lmj3wUHB5uxGCIiIvLkOhwWi8XpeOR0JEyY0IxFEBERkafmcPTp00f/R0XRoUOH6jtVDMjVQCXSEiVKRH0tiYiIyHMDDvQqauRwHDlyRHx8fKzf4e/ixYtrxVEiIiLybFEKODZt2qT/t2/fXqZOnSrJkyc3a72IiIgoDjGl0uiCBQvMmA0RERHFUaZUGh0zZozMnz8/1HiMGzt2rBmLICIiIk8POGbPni0FChQINb5w4cL6UjciIiLybKYEHNevX5eMGTOGGu/n56f9cxAREZFnMyXgyJo1q2zbti3UeIzLlCmTGYsgIiIiT680ipe39erVS4KCgqR69eo6buPGjdK/f3/5+OOPzVgEEREReXrAgXeooBvzDz/8UJ49e6bj0MPogAED9B0rRERE5NlMCTjQ0yhaowwZMkSOHz8uiRIlkrx58+obY4mIiIhMCTgMSZMmlbJlyzJViYiIyJyAA+9RGTlypL6C3niniiuTJk2K7GKIiIjIkwMOvEcFlUSNv4mIiIhMDziM96g4/k1ERERkapFKeCuUTpw4MbKLISIiIk8vUrG1f/9+ef78ueTPn18/nzp1Sry8vKR06dJRX0siIiKK1UwpUkGl0GTJksnChQslVapUOi4gIEBfW1+lShVz1pSIiIg8u2tzFJngjbFGsAH4e9SoUSxOISIi9c2c+VK+SBnJ5Zdd6r9RVw7s3R9myvzy8/9J1dKVdfoaFV6XjWs3uJx2QK/+kjl5Bpk7Y47deCwP422H6ZOmcY/E1oDj3r17cuvWrVDjMe7+/ftmLIKIiGKxVStWyohPhkufgR/Lmi3rpFDRwtK2aWu57eTeAXt27ZFuHbpK63dby9qt66V2vbrSsU17OfH38VDT/v7Latm/Z59kyJjB6bz6ftpfDpw+bB06dOlg+vbRKwo4mjRposUnP/30k1y+fFmHFStWSMeOHaVp06ZmLIKIiGKxudNnS5t2baXl260lX4H88sWUcdor9dJFS51OP2/mXHm95hvStWc3yZs/n/QfMkCKFC8qC+YssJvu2tVrMrjfpzL96xnincDbZaeU6dKnsw6JkyRxyzbSKwg4Zs2aJXXr1pU2bdpI9uzZdcDfderUka+++sqMRRARUSyFd2wdPnhYqrxR1Toufvz4Uvn1KrJv916nv9m3e59Uef2/6eH1Gq/bTR8SEiI93v9Iuvb4UPIXLOBy+TMmT5PC2QtKrco1ZebUGdrAgWJp1+aJEyfWwGL8+PFy9uxZHZc7d27thZSIiDyb/x1/CQ4OlrR+fnbj/dL5ydlTZ5z+5taNm/q9rbTp/HS8Ycbk6eLt5S0du3ZyuewOH3SSosWLSspUqWTvrj3yxYjRcuP6TRk+ZkSUt4ui8V0qCDCKFStm5iyJiIhCOXzgkBa7rNmyXvt7cqXLRx9Y/y5UpJD4+CSQAT37y6Dhn/AFo7GxSAW2bNkib7/9tlSsWFGuXLmi4xYtWiRbt241axFERBQLpU6TWvtlcqwgeuvmLfFLn87pbzAe39u6bTP9ru275Pat21KuUGnJliqzDpcvXpbPPh2uLVNcKVmmlBapXLp4yZRto1cccKCCaO3atbUCEDoEe/r0qY6/e/eujB492oxFEBFRLOXj4yPFShSTrZu32NW/2PrnVildznlwULpcadn653/Tw1+b/rJO36xVc9mw4w9Zt22DdUArla49P5TFPzuviArHDh/T+iNp06Y1bfvoFRapoL8NVBx99913ZenS/3Z0pUqV9DsiIvJsnT/qIr0/6CnFShaXkmVKytyv5srjR4+k5dut9HtU/syYKaMMGv6pfu7YtbM0r9tEZk2bKTVr15RVP67UYpRxX4635ppgsIVWKn7p0kmevHn0895de7Wvj9eqVtKWKqhwOnzQUGnaspmkTJXylaeBpzMl4Dh58qRUrWpfmxhSpEghgYGBZiyCiDyMxWLR1g2+vr5244OeBUl8r/iaRU+xR6NmjcX/9h2ZMHqc3LpxSwoXLSzfrVhirRh69fIVzXkwlC1fVqbP+0rGjRwrY0eMkZy5c8q87xdIgUIFw71MX18f7f9j0hcT5NnTZ5I1e1bp3K2LvP9RF7dsI72CIpUMGTLImTOhaxqj/kauXLmiPP8ZM2ZIjhw5JGHChFK+fHnZvXt3mNMvX75cChQooNMXLVpUVq9ebff9e++9p5WMbAc04SWimGPR199Kq3otZM+O/873wIBA6dS6vQz4qG+0rhtFTvsuHWX3sX1y7vZF+XXT71KqbCnrdz+u/lmmzPrSbvoGTRrKlv3bdPo/dv0pNWrXDHP+u47ulc7d3rd+LlqimPz6x2o5fumUnL15Xjbv2SLdP+7ByqKxOeDo3Lmz9OzZU3bt2qU376tXr8rixYulb9++0rVr1yjNe9myZfpm2mHDhukL4ooXL671RW7e/K9plK3t27dL69attdMx1Cdp3LixDkePHrWbDgHGtWvXrMOSJUuitJ5EZK6HDx5oU8r5M+dpbgdsXr9JAvwD5OHDh0xuIk8MOAYOHKgdfdWoUUMePHigxSudOnWSLl26SPfu3aM0b7wYDgENejItVKiQ1hVBvx/z5893Ov3UqVM1mOjXr58ULFhQRo4cKaVKlZLp06fbTYdsWuTMGIPte2CIKPo1bN5Ys9ivXLpsDTj27dqj/zf+H3swJvLIgAO5Gp9++qn4+/trTsLOnTv1PSq42UcFym/37dsnNWv+l42GCxA+79ixw+lvMN52ekCOiOP0mzdvlnTp0kn+/Pk1F+bOnTtRWlciMlfmrJmlWo3X9W8j4ECOB7qmrl67BpObyNMCjqCgIM3ZOH36tDZ9Qi5EuXLltEZwVN2+fVsvMOnTp7cbj8/Xr193+huMf9n0yAH59ttvZePGjTJ27Fj5888/tWt2LMsZNPPFC+psByJyv/+908quIiG0eLulJEiQgMlP5GmtVHDiHz58WGKTVq1eNMMCVCpF76joih25HgieHI0ZM0ZGjGA3uETRlcuxaf0f+hndUzN3g8iDi1TQw+i8efPEbOiYBU3fbty4YTcen1HvwhmMj8j0gJY0WJazljYwaNAg7cTMGC5dYg91RK8yl8Pw5lu1mLtB5Mn9cKCbWFTi3LBhg5QuXTrUS9tQ8TMyUESD+aHoAy1NjN7p8Pmjjz5y+ht0rY7ve/XqZR23fv16He/K5cuXtQ5HxowZnX6PCqaOfQEQ0avL5WjYvJGcP3teWr/XhslO5MkBByqKoiUInDp1yu67sF6qEx5oEtuuXTspU6aM1g2ZMmWKNolDqxVA76aZM2fWYg9A89xq1arJxIkTpV69etrz6d69e2XOnDn6PVrRoHikWbNmmuuBt9v2799f8uTJo5VLiSjm6WTTtwIReXDAsWnTJuvfRm3yqAYahpYtW2qLl6FDh2rFzxIlSsiaNWusFUMvXrxoV6nstddek++//14GDx4sn3zyieTNm1dWrlwpRYoU0e9RRIM6JwsXLtReUDNlyiS1atXSFjXMxSAiInKPeBYjQogi1OGYPHmytlYB3OhRrIH+OOIatFJBt+1HLxw3rf+OLsN3mjIf8jyzh1eI7lUgojgmICBAimQvqPUWkydPHnNyOJD7gHoa6OTLqCuBfi969+6tORCfffaZxEX+d+5IsuTJ9O+7AYHinSCBJEmaRIKfB+vnZCmSSwKfBPL40WN58viJpErzIji5F3hXc1qSJEsqIcEhEugfEM1bQrHZndu3JcW/L6IK9A8UH18fSZwksTwPeq7HWvKUKfSlVo8ePtL3SaRM/WJaHKNoZZbY9phNmVzHhTpmA+6Kl7e3JEmWRJuP3/XH8Z1MEvj46HSPHz6SVGlfvEjrXuA9zXVMmjyp1rkKvBOgf/v4+srTx0/k4YOHktovjU57/+59QWZo0uTJNHc04La/nhe+CX3l6ZOn8vD+A0mZJpXO78G9+zoNzivwv3VH1z1hooS6Xfg+ZepU+p6VB/cfSEhwsG47YL4JEyeSRIkTSdCzZ7rcFKlT6nn48P5DrYeWItW/094JkIQJfSVRksTa7P9+4D1JniqFeHt7y6MHD/VdLimMNPQPlARGej9/rulkpDfSBNuA9TfjGoE0wr7FdNiXqf9N7/t370m8eC7S+980xL5BrjO2G7DvHNP72dOn8uCebXo/EIsl5L/0vu2v2+ksvbGMYNv0RhomSvhvegfpOuIY9fL20v3/PCjov2P2ToAuP5HtMWuk98NHEvT0mX16+7w4Zo30th6zDx/JkydPrWl4N+CuzsPZMavp/eixzTF7V+J7eUlSV+ltd8wivePp90Z6Ox6zRnq/OGZfpLdxzGL/+2oahk5vzC95yhfpjX2DNEE6Ojtmg58/13QKld7/HrNGeusxa5ve4bxGPA95LmYzJeCYOXOmzJ07V7sUNzRs2FCbmyIIiasBx/b12yRDx0z699b1W8Qvo58Uf62UHmTrfvpdqrz1uvhlSidnTp6Wk4dOSIN3XlR83bFpu54kpauW1QN/7U+/i0iBaN4aiq22rPtL3mz+4l1Af/7+h2TNk10KlymqXYBvWrle3mj8pqRKm0pOHD0ul85ckDqt6lt/lz5LBilWoYReRNf/tEaq1n9D0mbwk9PHT8npo6ek/tuNdNptf2yVlGlTSanKZfSihGO2Up2q+vuzp87Isb1HpNF7zXTaXX/ukERJEknZNyrIsydPddryNV6TzDmzyLl/zsuBrXulaaf/6bR7tu0Wr/jxpcKblfSmgGnLVCsv2fJml0sXL8meTTulYbumejHcv3Of3rwq162mv1338xo933IVzC1Xr1yRneu3Sb22DfVifmjPQXl474FUa1Bdp93wf+ukYKnCkrdofrl5/YZs/f1Pqd2ynt6Mjh44LHdu3pEaTWrptJt+2yi5C+WRAiULyZ1bt+XPX/6Qms1q68X978N/y7WLV6VWi7ov0nvtZt2uImWL6Q1t48/r5PVGNSW1X2o5ceyEnD95Tt5q0yBC1wivWX0l8b/71rjkJ7f57P3vZ+O7RGFM6/Xv5+BwTBv/388h/w4JIzCtr8O0yWw+x/t3Wsu/n33/HYxpk4axHJ9/B+O7JGFMm+DfITLTuiu9I5KGCSOYhs6mffrBBLl985b89esmvSbgPnPs0DG5cfl6hK8RIbpWMbBIJWXKlLJnzx4tRrGFCqSo6BnX3hhrFKmcOHXC+nK6O7fvaKsa5Hgg8karFxS3YBwqueIibbwVET2yent5S/IUyfUiiw7Ouk7cF81bRbHV3P7lJU3aF09ft2/d1icddLyHpxoca6lTp9YnQFSYxtNaWr+0/x2zvj6SLJmLY/bRI/Hz+/eYveOvN31krRrHLM571HvCsf3g4QPtuRdwEcMTW4qUKfSJDXWwcL7gZYoIsO/dv2etg4VsWzwJYl64FOEdSVhGokSJ5PHjx3quYR0wP1xHMI1RjInm7lh3vOrgyZMnmvVrNKXH31hPbDtgvmg9hwEd+WFeadKk0SdgLANphc+A9cXykYbo7RjraKTh/fv39fdYjqb37duaBlgPa3qnSq1P4UhvbIORhuG9Rlz64r9mwEQRkXXgUusxaxzfOGaRaxHRawTOi7Sp05papGJKwIFcDKysY/NXvLwNJxze9hoXAw4zd0SDj1eZMh/yPL9MfJELQXHDP5+/yCkiiqhcn66QmHyfM6VIxag0um7dOqlQ4UUFNrw5FvU30GwVTVuj2icHERERxV6m98OBfi0AWY4YbF8Lb1ZTWSIiIvLwfjiIiIiI3PIuFSIiIqKwMOAgIiIit2PAQURERG7HgIOIiIjcjgEHERERuR0DDiIiInI7BhxERETkdgw4iIiIyO0YcBAREZHbMeAgIiIit2PAQURERG7HgIOIiIjcjgEHERERuR0DDiIiInI7BhxERETkdgw4iIiIyO0YcBAREZHbMeAgIiIit2PAQURERG7HgIOIiIjcjgEHERERuR0DDiIiInI7BhxERETkdgw4iIiIyO0YcBAREZHbMeAgIiIit2PAQURERG7HgIOIiIjcjgEHERERuR0DDiIiInI7BhxERETkdgw4iIiIyO0YcBAREZHbMeAgIiIit2PAQURERG7HgIOIiIjcjgEHERERuR0DDiIiInI7BhxERETkdgw4iIiIyO0YcBAREZHbMeAgIiIit2PAQURERG7HgIOIiIjcjgEHERERuR0DDiIiInI7BhxERETkdgw4iIiIyO0YcBAREZHbMeAgIiIit2PAQURERG7HgIOIiIjcLlYEHDNmzJAcOXJIwoQJpXz58rJ79+4wp1++fLkUKFBApy9atKisXr3a7nuLxSJDhw6VjBkzSqJEiaRmzZpy+vRpN28FERGR54rxAceyZcukT58+MmzYMNm/f78UL15cateuLTdv3nQ6/fbt26V169bSsWNHOXDggDRu3FiHo0ePWqcZN26cfPnllzJr1izZtWuXJEmSROf55MmTV7hlREREniPGBxyTJk2Szp07S/v27aVQoUIaJCROnFjmz5/vdPqpU6dKnTp1pF+/flKwYEEZOXKklCpVSqZPn27N3ZgyZYoMHjxYGjVqJMWK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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Visualize the demographic-parity gap measured on the test set above: each\n", "# group's predicted-positive rate, with the epsilon tolerance band drawn up from\n", "# the lower rate. The constraint is violated when the other bar clears the band.\n", "import matplotlib.pyplot as plt\n", "\n", "eps = 0.10 # the tolerance enforced by the fairness constraint below\n", "rates = [pr_male, pr_female]\n", "labels = [\"Male (T=1)\", \"Female (T=0)\"]\n", "colors = [\"#4C72B0\", \"#DD8452\"]\n", "lo, hi = min(rates), max(rates)\n", "\n", "fig, ax = plt.subplots(figsize=(5.4, 4.3))\n", "ax.axhspan(\n", " lo,\n", " lo + eps,\n", " color=\"#55A868\",\n", " alpha=0.15,\n", " zorder=1,\n", " label=f\"\\u03b5 tolerance ({eps:.2f})\",\n", ")\n", "ax.axhline(lo, ls=\":\", color=\"#888888\", lw=1, zorder=2)\n", "ax.axhline(hi, ls=\":\", color=\"#888888\", lw=1, zorder=2)\n", "\n", "bars = ax.bar(labels, rates, color=colors, width=0.55, zorder=3)\n", "for bar, rate in zip(bars, rates):\n", " ax.text(\n", " bar.get_x() + bar.get_width() / 2,\n", " rate + 0.006,\n", " f\"{rate:.3f}\",\n", " ha=\"center\",\n", " va=\"bottom\",\n", " fontsize=10,\n", " )\n", "\n", "# gap arrow drawn in the empty space between the two bars\n", "ax.annotate(\n", " \"\",\n", " xy=(0.5, hi),\n", " xytext=(0.5, lo),\n", " arrowprops=dict(arrowstyle=\"<->\", color=\"#333333\", lw=1.6),\n", ")\n", "ax.text(\n", " 0.58,\n", " (lo + hi) / 2,\n", " f\"gap = {dp_gap:.3f} > \\u03b5\",\n", " va=\"center\",\n", " ha=\"left\",\n", " fontsize=10,\n", " color=\"#222222\",\n", ")\n", "\n", "ax.set_ylim(0, max(rates) * 1.3)\n", "ax.set_ylabel(r\"predicted-positive rate $P(\\hat{Y}=1 \\mid T)$\")\n", "ax.set_title(\"Unconstrained model: demographic-parity gap on Adult\", fontsize=12)\n", "ax.legend(loc=\"upper right\", fontsize=8, framealpha=0.9)\n", "fig.tight_layout()\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "a783b11e", "metadata": {}, "source": [ "## 3. The Seldonian guarantee (demographic parity)\n", "\n", "Now we ask QSA to return a model only if it can certify the demographic-parity\n", "constraint holds with high probability. On this data it declines." ] }, { "cell_type": "code", "execution_count": 5, "id": "1de61d3d", "metadata": { "execution": { "iopub.execute_input": "2026-08-24T18:35:09.246215Z", "iopub.status.busy": "2026-08-24T18:35:09.246058Z", "iopub.status.idle": "2026-08-24T18:35:09.415590Z", "shell.execute_reply": "2026-08-24T18:35:09.415199Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "No Solution Found - QSA will not certify demographic parity here,\n", "rather than return a model with the disparity shown above.\n", " reason: safety_test_rejected\n" ] } ], "source": [ "from fair_seldonian import demographic_parity\n", "\n", "# Demographic parity at a 10-point tolerance: PR(1) PR(0) - abs 0.1 -\n", "config = SeldonianConfig(constraint=demographic_parity(0.10))\n", "result = QSA(X_tr, Y_tr, T_tr, \"opt\", None, None, config)\n", "\n", "if result.passed_safety:\n", " print(\"certified: demographic parity holds with high confidence\")\n", "else:\n", " print(\"No Solution Found - QSA will not certify demographic parity here,\")\n", " print(\"rather than return a model with the disparity shown above.\")\n", " print(f\" reason: {result.diagnostics.failure_mode}\")" ] }, { "cell_type": "markdown", "id": "462e575b", "metadata": {}, "source": [ "## 4. What *would* certify, and what it costs\n", "\n", "Refusing is only half an answer. The unconstrained gap is 0.151, so no model can\n", "meet a tolerance below that without changing its predictions — the question is\n", "how much tolerance is needed, and what accuracy is surrendered to get it.\n", "\n", "Adult is 24.1% positive, so a model that predicts *nobody* earns over 50K\n", "scores about 0.76 — the exact figure for this test split is printed below. That\n", "is the number to judge the certified models against: anything below it is worse\n", "than a constant.\n" ] }, { "cell_type": "code", "execution_count": 6, "id": "c5a27701", "metadata": { "execution": { "iopub.execute_input": "2026-08-24T18:35:09.417028Z", "iopub.status.busy": "2026-08-24T18:35:09.416938Z", "iopub.status.idle": "2026-08-24T18:35:10.235948Z", "shell.execute_reply": "2026-08-24T18:35:10.235531Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " epsilon verdict accuracy gap\n", "--------------------------------------------------\n", " 0.10 safety_test_rejected - -\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 0.15 certified 0.479 0.069\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 0.20 certified 0.697 0.064\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 0.30 certified 0.760 0.126\n", "\n", "unconstrained : accuracy 0.814, gap 0.151\n", "predict-nobody: accuracy 0.765, gap 0.000\n" ] } ], "source": [ "baseline_acc = float(max(Y_te.mean(), 1 - Y_te.mean()))\n", "sweep = [] # (epsilon, certified, accuracy, gap) - reused by the chart below\n", "\n", "print(f\"{'epsilon':>8} {'verdict':>22} {'accuracy':>9} {'gap':>7}\")\n", "print(\"-\" * 50)\n", "for eps in (0.10, 0.15, 0.20, 0.30):\n", " r = QSA(\n", " X_tr,\n", " Y_tr,\n", " T_tr,\n", " \"opt\",\n", " None,\n", " None,\n", " SeldonianConfig(constraint=demographic_parity(eps)),\n", " )\n", " if r.passed_safety:\n", " p = (predict(r.theta, r.theta1, X_te).detach().numpy() >= 0.5).astype(int)\n", " model_acc = float((p == Y_te).mean())\n", " model_gap = abs(float(p[T_te == 1].mean()) - float(p[T_te == 0].mean()))\n", " sweep.append((eps, True, model_acc, model_gap))\n", " print(f\"{eps:>8.2f} {'certified':>22} {model_acc:>9.3f} {model_gap:>7.3f}\")\n", " else:\n", " sweep.append((eps, False, None, None))\n", " print(f\"{eps:>8.2f} {r.diagnostics.failure_mode:>22} {'-':>9} {'-':>7}\")\n", "print(f\"\\nunconstrained : accuracy {acc:.3f}, gap {dp_gap:.3f}\")\n", "print(f\"predict-nobody: accuracy {baseline_acc:.3f}, gap 0.000\")" ] }, { "cell_type": "code", "execution_count": 7, "id": "2b23b882", "metadata": { "execution": { "iopub.execute_input": "2026-08-24T18:35:10.237441Z", "iopub.status.busy": "2026-08-24T18:35:10.237345Z", "iopub.status.idle": "2026-08-24T18:35:10.344726Z", "shell.execute_reply": "2026-08-24T18:35:10.344328Z" } }, "outputs": [ { "data": { "image/png": "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hv7jFhZcVfsVDwi4zQcq7ufc5nSbJFtSAgdyjGAlxwnQ6wB7R8DREdDY2dhxgtawTYmIqF/061mai4srPDw9UVRUCB9fXzWvuKhQFUFsnXVgFBAQiKXLHzI93rVzGyIiozpdtwQIWgcJmpoMP9pygmepkzy9XoIGGvUjbC0nvBp1UGAPe0dH2NnQQYEEYqDXqr+Nxgaj8pbcr4jb3FpxP+c2p9v9z2NvdccJ0h6NLR0nGAMIRETUb/r9V0OyB2R0hZrqanXLztqL5FGjO122uKgIjVqtSi08d/Y0co4fRXr65D5vMxEREREREdFg0u9h8PSMyairq8Obb7yqHsuwi2npk9T05k3r1f2cufPU/ZkzJ3H0yGE0NTchMDAICxctRWBQUD+2noiIiIiIiGjg6/fggdQymD3nbnVrzxg0MJo8Zbq6EREREREREdEg6rZARERERERERNaNwQMiIiIiIiIi6haDB0RERERERETULQYPiIiIiIiIiKhbDB4QERERERERUbcYPCAiIiIiIiKibjF4QERERERERETdYvCAiIiIiIiIiLrF4AERERERERERdYvBAyIiIiIiIiLqFoMHRERERERERNQtBg+IiIiIiIiIqFsMHhARERERERHdQmVFxaDeRgweEBEREREREXXh7JnT+OD9t3H12hXo9fpBu50c+rsBRERERERERNboi107UFiYjxkzZiM4JBSDGTMPiIiIiIiIiNppbGxEXV0t0jMm4+rVKygrKx3U24jBAyIiIiIiIqJ2HB0d4erqhm1bNyE/LxceHp6Dehux2wIRERERERENWlLHQKPRdDpvTMpYlX0w9675av7lSxfh6ekJ/4BADDYMHhAREREREdGgYwwQyK2+vh4uLi6m54zBhKamJmi1DTiRcwyXLl2EtqEBU6fNwGDE4AERERERERENyqBBc3Mzvti5HUVFBVh0/zI4OTm3Wdbezh4hIWE4euQwYkbEYkJaBgYrBg+IiIiIiIho0HVROHbsCI4dOYThMbFYsuwhlJeVduiO4OXtjdTxaRiTMg4ODobTZ51OBzu7wVc+kMEDIiIiIiIiGhQkcHD92lVk7v0C7h6eKtugqbEJn326Gs1NTViw8H44OTl1eJ2Dg4MKPIjBGDgQDB4QERERERHRoFBUWIj9+7KQMWkqgoNDVBDh2rWrGDduPOITErt9raZd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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Two panels sharing the epsilon axis. Accuracy and the parity gap are different\n", "# measures, so they get their own axes rather than being crushed onto one plot\n", "# with two y-scales.\n", "SURFACE, GRID = \"#fcfcfb\", \"#e1e0d9\"\n", "INK, MUTED = \"#0b0b0b\", \"#898781\"\n", "CERTIFIED, REFUSED = \"#2a78d6\", \"#eb6834\" # validated categorical slots 1 and 2\n", "\n", "eps_all = [e for e, *_ in sweep]\n", "ok = [(e, a, g) for e, c, a, g in sweep if c]\n", "refused_upto = max([e for e, c, *_ in sweep if not c], default=None)\n", "\n", "fig, (ax_acc, ax_gap) = plt.subplots(\n", " 1, 2, figsize=(10.5, 4.0), sharex=True, facecolor=SURFACE\n", ")\n", "for ax in (ax_acc, ax_gap):\n", " ax.set_facecolor(SURFACE)\n", " ax.grid(True, color=GRID, linewidth=0.8, zorder=0)\n", " ax.set_axisbelow(True)\n", " for side in (\"top\", \"right\"):\n", " ax.spines[side].set_visible(False)\n", " for side in (\"left\", \"bottom\"):\n", " ax.spines[side].set_color(\"#c3c2b7\")\n", " ax.tick_params(colors=MUTED, labelsize=9)\n", " ax.set_xlabel(r\"tolerance $\\epsilon$\", color=MUTED, fontsize=10)\n", " if refused_upto is not None:\n", " # Everything at or below this epsilon was refused: there is no model to\n", " # plot, so the region is shaded rather than given a fabricated point.\n", " ax.axvspan(\n", " min(eps_all) - 0.02,\n", " (refused_upto + 0.15) / 2,\n", " color=REFUSED,\n", " alpha=0.10,\n", " zorder=1,\n", " label=\"no solution found\",\n", " )\n", "\n", "ax_acc.plot(\n", " [e for e, *_ in ok],\n", " [a for _, a, _ in ok],\n", " \"-o\",\n", " color=CERTIFIED,\n", " linewidth=2,\n", " markersize=8,\n", " zorder=3,\n", " label=\"certified model\",\n", ")\n", "ax_acc.axhline(acc, ls=\"--\", lw=1.2, color=MUTED, zorder=2)\n", "ax_acc.axhline(baseline_acc, ls=\"--\", lw=1.2, color=MUTED, zorder=2)\n", "ax_acc.text(\n", " 0.084, acc, \"unconstrained\", va=\"bottom\", ha=\"left\", fontsize=8, color=MUTED\n", ")\n", "ax_acc.text(\n", " 0.084,\n", " baseline_acc,\n", " \"predict nobody\",\n", " va=\"bottom\",\n", " ha=\"left\",\n", " fontsize=8,\n", " color=MUTED,\n", ")\n", "# Direct-label only the point that carries the argument, and the endpoint.\n", "for e, a, _ in (ok[0], ok[-1]):\n", " ax_acc.annotate(\n", " f\"{a:.3f}\",\n", " (e, a),\n", " textcoords=\"offset points\",\n", " xytext=(0, -16),\n", " ha=\"center\",\n", " fontsize=9,\n", " color=INK,\n", " )\n", "ax_acc.set_ylabel(\"accuracy on held-out data\", color=MUTED, fontsize=10)\n", "ax_acc.set_ylim(0.40, 0.90)\n", "ax_acc.set_title(\n", " \"Certified, but is it useful?\",\n", " color=INK,\n", " fontsize=11,\n", " fontweight=\"bold\",\n", " loc=\"left\",\n", ")\n", "\n", "ax_gap.plot(\n", " [e for e, *_ in ok],\n", " [g for _, _, g in ok],\n", " \"-o\",\n", " color=CERTIFIED,\n", " linewidth=2,\n", " markersize=8,\n", " zorder=3,\n", " label=\"certified model\",\n", ")\n", "ax_gap.plot(eps_all, eps_all, ls=\"--\", lw=1.2, color=MUTED, zorder=2)\n", "ax_gap.axhline(dp_gap, ls=\"--\", lw=1.2, color=MUTED, zorder=2)\n", "ax_gap.text(\n", " 0.084, dp_gap, \"unconstrained\", va=\"bottom\", ha=\"left\", fontsize=8, color=MUTED\n", ")\n", "ax_gap.text(\n", " 0.263,\n", " 0.290,\n", " r\"gap = $\\epsilon$\",\n", " fontsize=8,\n", " color=MUTED,\n", " rotation=30,\n", " rotation_mode=\"anchor\",\n", ")\n", "ax_gap.set_ylabel(\"demographic-parity gap\", color=MUTED, fontsize=10)\n", "ax_gap.set_ylim(0, 0.34)\n", "ax_gap.set_title(\n", " \"The gap it actually achieves\",\n", " color=INK,\n", " fontsize=11,\n", " fontweight=\"bold\",\n", " loc=\"left\",\n", ")\n", "\n", "ax_acc.legend(loc=\"lower right\", fontsize=8, framealpha=0.9)\n", "fig.tight_layout()\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "a6831c0f", "metadata": {}, "source": [ "Two things stand out. Certification arrives at $\\epsilon = 0.15$, but the model\n", "that achieves it scores 0.479 — well below the predict-nobody baseline, so it is\n", "certified and useless. Only by $\\epsilon = 0.30$ does accuracy recover to\n", "roughly the constant-model level, and by then the tolerated gap is 0.30, twice\n", "the disparity we started with.\n", "\n", "At $\\epsilon = 0.10$ the refusal is `safety_test_rejected` rather than\n", "`candidate_infeasible`: candidate selection *did* find a model satisfying the\n", "constraint, and the safety set declined to certify it. That is the mode that\n", "says more data would help, as against the constraint being unreachable.\n", "\n", "The honest reading is that demographic parity is expensive on Adult at any\n", "tolerance worth having — which is a result about the data and the criterion,\n", "not a defect in the algorithm.\n" ] }, { "cell_type": "markdown", "id": "6e04463f", "metadata": {}, "source": [ "## Takeaway\n", "\n", "The unconstrained model is accurate but predicts high income far more often for\n", "one group than the other. QSA trades coverage for safety: on data where it\n", "cannot *prove* demographic parity holds, it returns no model at all - never an\n", "unsafe one. See [`quickstart.ipynb`](quickstart.ipynb) for cases where QSA\n", "*does* certify, and [`custom_constraint.py`](custom_constraint.py) for other\n", "fairness definitions." ] }, { "cell_type": "markdown", "id": "6df1ed29", "metadata": {}, "source": [ "## References\n", "\n", "**Seldonian algorithms**\n", "\n", "- Thomas, P. S., da Silva, B. C., Barto, A. G., Giguère, S., Brun, Y., & Brunskill, E. (2019). Preventing undesirable behavior of intelligent machines. *Science*, 366(6468), 999-1004. https://doi.org/10.1126/science.aag3311\n", "\n", "**Demographic parity and fairness criteria**\n", "\n", "- Dwork, C., Hardt, M., Pitassi, T., Reingold, O., & Zemel, R. (2012). Fairness through awareness. *ITCS '12*, 214-226. https://arxiv.org/abs/1104.3913\n", "- Feldman, M., Friedler, S. A., Moeller, J., Scheidegger, C., & Venkatasubramanian, S. (2015). Certifying and removing disparate impact. *KDD '15*. https://arxiv.org/abs/1412.3756\n", "- Hardt, M., Price, E., & Srebro, N. (2016). Equality of opportunity in supervised learning. *NeurIPS 2016*. https://arxiv.org/abs/1610.02413\n", "- Barocas, S., Hardt, M., & Narayanan, A. (2023). *Fairness and Machine Learning: Limitations and Opportunities*. MIT Press. https://fairmlbook.org\n", "\n", "**Dataset**\n", "\n", "- Becker, B., & Kohavi, R. (1996). *Adult* [Dataset]. UCI Machine Learning Repository. https://doi.org/10.24432/C5XW20\n", "- Kohavi, R. (1996). Scaling up the accuracy of naive-Bayes classifiers: a decision-tree hybrid. *KDD '96*, 202-207. https://cdn.aaai.org/KDD/1996/KDD96-033.pdf" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.13.7" } }, "nbformat": 4, "nbformat_minor": 5 }