Skip to content

Instantly share code, notes, and snippets.

@joAschauer
Created April 25, 2023 13:19
Show Gist options
  • Save joAschauer/f5762ca96bac8ddb0e9ab2236398f608 to your computer and use it in GitHub Desktop.
Save joAschauer/f5762ca96bac8ddb0e9ab2236398f608 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"#### Convicts go free if they can say everyone was in the room\n",
"\n",
"__Problem:__\n",
"\n",
"N convicts are in prison. They get a chance to get free from the prison administration. For this, they must be able to say for sure that all convicts have been in a special room at least once. One prisoner selected by the prison administration is allowed to enter the room each day. In the room there is a switch which can be on the right or on the left. In the beginning, the switch is on the right, which is communicated to the prisoners. The prisoners are not allowed to communicate directly with each other but they are allowed to think about a common strategy. How can they still manage to say for sure that all of them have entered the room?\n",
"\n",
"__Solution:__\n",
"\n",
" - When a prisoner enters the room, he sets the switch to the left if he has never done this before.\n",
" - if the switch is on the left he leaves it as it is, if he has already once flipped the switch to the left he also leaves it as it is.\n",
" - there is a prisoner who sets the switch to the right whenever it is on the left and counts how many times he has done this. If he counted to N-1, all the inmates were in the room and he can confirm that to the prison administration.\n",
"\n",
"__Question:__ How many days does it take for the convicts to say that everyone was in the room? \n",
"*Assumption:* All convicts are randomly sent to the room with discrete equal distribution by the prison administration."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"import pandas as pd\n",
"import matplotlib.pyplot as plt\n",
"import numba as nb\n",
"import random"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"class Prisoner():\n",
" def __init__(self, id_number):\n",
" self.id = id_number\n",
" self.has_flipped_switch = False\n",
" \n",
" def __repr__(self):\n",
" return f\"Prisoner(id_number={self.id})\"\n",
" \n",
" def enter_room_and_check_switch(self, switch):\n",
" if not self.has_flipped_switch and switch == 'right':\n",
" switch = 'left'\n",
" self.has_flipped_switch = True\n",
" return switch\n",
" \n",
" def confirm_all_prisoners_in_room(self):\n",
" # a non-counting prisoner is never able to confirm this\n",
" return False\n",
" \n",
"\n",
"class CountingPrisoner():\n",
" def __init__(self, id_number, n_prisoners):\n",
" self.id = id_number\n",
" self.n_prisoners = n_prisoners\n",
" self.n_flipped = 0\n",
" \n",
" def __repr__(self):\n",
" return f\"CountingPrisoner(id_number={self.id}, n_prisoners={self.n_prisoners})\"\n",
" \n",
" def enter_room_and_check_switch(self, switch):\n",
" if switch == 'left':\n",
" self.n_flipped += 1\n",
" switch = 'right'\n",
" return switch\n",
" \n",
" def confirm_all_prisoners_in_room(self):\n",
" return self.n_flipped == self.n_prisoners-1"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"##### An example with 11 prisoners"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[Prisoner(id_number=1),\n",
" Prisoner(id_number=2),\n",
" Prisoner(id_number=3),\n",
" Prisoner(id_number=4),\n",
" Prisoner(id_number=5),\n",
" Prisoner(id_number=6),\n",
" Prisoner(id_number=7),\n",
" Prisoner(id_number=8),\n",
" Prisoner(id_number=9),\n",
" Prisoner(id_number=10),\n",
" CountingPrisoner(id_number=11, n_prisoners=11)]"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# create a list with 11 prisoners, one of them is the counting prisoner\n",
"prisoners = [Prisoner(id_number=i) for i in range(1, 11)]\n",
"prisoners.append(CountingPrisoner(id_number=11, n_prisoners=11))\n",
"prisoners"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Number of days until the prisoners can confirm that all of them were in the room: 125\n"
]
}
],
"source": [
"# define the initial state of the switch, a counter for the days \n",
"# and a state variable if all prisoners were in the room\n",
"all_prisoners_in_room = False\n",
"n_days = 0\n",
"switch = 'right'\n",
"\n",
"# initialize a random generator\n",
"rng = np.random.default_rng()\n",
"\n",
"# use a while loop and increase the number of days until all prisoners \n",
"# were in the room\n",
"while not all_prisoners_in_room:\n",
" # randomly sample a prisoner\n",
" p = prisoners[rng.integers(low=0, high=11)]\n",
" # let the sampled prisoner enter the room and flip the switch if the \n",
" # conditions are met\n",
" switch = p.enter_room_and_check_switch(switch=switch)\n",
" # can the prisoner confirm that all prisoners were in the room?\n",
" all_prisoners_in_room = p.confirm_all_prisoners_in_room()\n",
" # increase number of days\n",
" n_days += 1 \n",
"\n",
"print('Number of days until the prisoners can confirm that all of them were in the room:', n_days)"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"The example from above can be wrapped in a function:"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"def escape_trial(N):\n",
" \"\"\"\n",
" Count days unitl prisoners can confirm that all were in room.\n",
"\n",
" Object oriented programming solution\n",
"\n",
" Parameters:\n",
" -----------\n",
" N : int\n",
" number of prisoners\n",
" \"\"\"\n",
" rng = np.random.default_rng()\n",
" prisoners = [Prisoner(id_number=i) for i in range(1, N)]\n",
" prisoners.append(CountingPrisoner(id_number=N, n_prisoners=N))\n",
" all_prisoners_in_room = False\n",
" n_days = 0\n",
" switch = 'right'\n",
" while not all_prisoners_in_room:\n",
" p = prisoners[rng.integers(low=0, high=N)]\n",
" switch = p.enter_room_and_check_switch(switch=switch)\n",
" all_prisoners_in_room = p.confirm_all_prisoners_in_room()\n",
" n_days += 1\n",
" \n",
" return n_days\n",
"\n",
"\n",
"def numerical_experiment(N, n_trials):\n",
" \"\"\"\n",
" Let the prisoners escape multiple times.\n",
"\n",
" Stores the numbers of days in a list.\n",
" \"\"\"\n",
" return [escape_trial(N) for _ in range(n_trials)]\n"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[164, 110, 198, 230, 139, 134, 89, 130, 170, 106]\n"
]
}
],
"source": [
"print(numerical_experiment(N=11, n_trials=10))"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"The object oriented approach above is slow. Performance can be increased with numba:"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"@nb.njit\n",
"def escape_trial_numba(N):\n",
" # counting prisoner is last one (index N-1)\n",
" # array which records which prisoners already flipped\n",
" # the switch to the left\n",
" prisoner_switched = np.zeros(N-1, dtype='bool')\n",
" # counter for how often the counting prisoner flipped\n",
" # the switch back to the right \n",
" n_right_flip = 0\n",
" n_days = 0 # counter for days\n",
" switch_left = False # switch position\n",
" while n_right_flip < N-1:\n",
" p = random.randint(0, N-1)\n",
" if p == N-1: # counting prisoner selected\n",
" if switch_left:\n",
" n_right_flip += 1\n",
" switch_left = False\n",
" else: # normal prisoner selected\n",
" if not switch_left:\n",
" if not prisoner_switched[p]:\n",
" prisoner_switched[p] = True\n",
" switch_left = True\n",
" n_days += 1\n",
" return n_days\n",
"\n",
"@nb.njit\n",
"def numerical_experiment_numba(N, n_trials):\n",
" return [escape_trial_numba(N) for _ in range(n_trials)]"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"##### Statistical experiment with 11 prisoners and 100000 trials"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
"# run experiment\n",
"n_prisoners = 11\n",
"n_trials = 1000000\n",
"days = pd.Series(numerical_experiment_numba(n_prisoners, n_trials))"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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nJwwfPhwTJkyBUeOHMGhQ4cQEhKC8ePHw8bGBgAwYcIE6OrqIigoCGfOnMHGjRuxfPlytatMM2fORGJiIpYuXYqsrCxERETg2LFjCAkJafT9QkRERM1Ps75StXLlSsydOxfTp09HQUEBbGxs8NZbb2HevHnSmA8++AD37t3D1KlTcfv2bbzwwgtITEyEvr6+NGbt2rUICQnB0KFDoaWlhTFjxmDFihXSfFNTU+zevRvBwcFwd3eHhYUF5s2bp/Ysq379+mHdunWYM2cOPvroI3Tt2hVbt25Fjx49GmdnEBERUbPWrEOViYkJYmJiEBMTU+UYhUKByMhIREZGVjnG3Nwc69atq3Zbrq6uOHDgQLVjxo4di7Fjx1Y7hoiIiDRTs779R0RERNRSMFQRERERyYChioiIiEgGDFVEREREMmCoIiIiIpIBQxURERGRDBiqiIiIiGTAUEVEREQkA4YqIiIiIhkwVBERERHJgKGKiIiISAYMVUREREQyYKgiIiIikgFDFREREZEMGKqIiIiIZMBQRURERCQDhioiIiIiGTBUEREREcmAoYqIiIhIBm2augAiarnsZ++o1fhLi0Y2UCVERE2PV6qIiIiIZMBQRURERCQDhioiIiIiGTBUEREREcmAoYqIiIhIBgxVRERERDJgqCIiIiKSAUMVERERkQwYqoiIiIhkwFBFREREJAOGKiIiIiIZMFQRERERyYChioiIiEgGDFVEREREMmCoIiIiIpIBQxURERGRDBiqiIiIiGTAUEVEREQkA4YqIiIiIhkwVBERERHJgKGKiIiISAYMVUREREQyYKgiIiIikgFDFREREZEMGKqIiIiIZMBQRURERCQDhioiIiIiGTBUEREREcmAoYqIiIhIBgxVRERERDJgqCIiIiKSAUMVERERkQwYqoiIiIhk0KapCyBqavazd0h/19MWWPI80CNiF4rLFE1YFRERtTS8UkVEREQkA4YqIiIiIhkwVBERERHJoNmHqj///BOvvfYa2rVrBwMDA7i4uODYsWPSfCEE5s2bB2traxgYGMDb2xvnz59XW8fNmzcREBAApVIJMzMzBAUFoaioSG3MqVOnMGDAAOjr68PW1hZLliypUMvmzZvRrVs36Ovrw8XFBTt37myYpomIiKjFadah6tatW+jfvz90dHTwyy+/4OzZs1i6dCnatm0rjVmy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c8WpU6dEbGysVPvTzp3yc7lbt25i+/btIjs7W7zyyivCzs5OlJaWCiGEuHDhgjAyMhLLli0TOTk54tChQ6JXr15i4sSJUj92dnZCqVSKL774Qly4cEFcuHBBfP7558LW1lbs379fXLp0SRw4cECsW7euynPhyy+/FPr6+iImJkZkZ2eLI0eOiGXLlknzly1bJvbu3Styc3NFcnKycHR0FNOmTZPml+8vb29vcfToUZGeni6cnJzEhAkTqtzmH3/8IczNzcXLL78sjh49KrKzs8WaNWukY1vf/VdcXCyys7MFAPHDDz+Ia9euieLiYhEfHy9MTU2lOubPny+MjIzE8OHDxfHjx8XJkyeFEEIAEM8884zYuHGjyM7OFv7+/sLe3l68+OKLIjExUZw9e1b07dtXDB8+vMoeqWExVFGL9/gvlb59+4rJkycLIeoequzs7ERZWZk0zdHRUQwYMEB6/ejRI2FkZCTWr18vhPjf/0gXLVokjSktLRUdO3YUixcvFkIIERUVJXx8fNS2feXKFQFAZGdnCyH+Dgu9evV6ar82Njbi008/VZvWp08fMX36dOm1m5ubmD9/fpXruHv3rtDV1RWbNm2Spt24cUMYGBiohaonHT16VACQfkn/+eefQltbW6SlpQkh/g4UFhYWIiEhQQghxNKlS8Vzzz0nBYOnqWmoeuGFF9TG9OnTR3z44YfSawBiy5YtamNqE6qEEBV+0ZWzs7MTr732mvRapVKJDh06iK+++koIIcT3338vHB0dhUqlksYUFxcLAwMDsWvXrkq3VR6qNmzYIE0rPx4bN26U6gEgMjIy1JZ9vI/09HQBQFy6dKnS7Tzt3Ck/l7/55htp/pkzZwQAce7cOSGEEEFBQWLq1Klq6zhw4IDQ0tISDx48kPaRv7+/2ph33nlHvPjii2r7pTo2Njbi448/rtFYIf4O8O3atZNel++vCxcuSNNiY2OFpaVllesIDw8XDg4OVZ6vcuy/W7duCQDi119/Vav1yVClo6Mj/YOgHAAxZ84c6XVqaqoAIL799ltp2vr164W+vn6VPVLD4u0/alUWL16M7777DufOnavzOrp37w4trf/9aFhaWsLFxUV6ra2tjXbt2km3wcp5eXlJf2/Tpg08PDykOk6ePIlff/0VxsbG0p9u3boBgNqlend392prKywsxNWrV9G/f3+16f37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",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Statistics of number of days until the prisoners can confirm that all of them were in the room:\n",
"count 1000000.000000\n",
"mean 142.223098\n",
"std 35.418746\n",
"min 34.000000\n",
"25% 117.000000\n",
"50% 139.000000\n",
"75% 164.000000\n",
"max 394.000000\n",
"dtype: float64\n"
]
}
],
"source": [
"# plot histogram and show statistics\n",
"ax = days.hist(bins=40)\n",
"ax.set_ylabel('Count')\n",
"ax.set_xlabel('Number of days until the prisoners can confirm\\nthat all of them were in the room')\n",
"plt.show()\n",
"\n",
"print('Statistics of number of days until the prisoners can confirm that all of them were in the room:')\n",
"print(days.describe())"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"##### How does the mean number of days change with increasing number of prisoners?\n",
"\n",
"This can be saved numerically by realizing many simulations with different numbers of prisoners and taking the averages."
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th>number_of_prisoners</th>\n",
" <th>2</th>\n",
" <th>3</th>\n",
" <th>4</th>\n",
" <th>5</th>\n",
" <th>6</th>\n",
" <th>7</th>\n",
" <th>8</th>\n",
" <th>9</th>\n",
" <th>10</th>\n",
" <th>11</th>\n",
" <th>...</th>\n",
" <th>91</th>\n",
" <th>92</th>\n",
" <th>93</th>\n",
" <th>94</th>\n",
" <th>95</th>\n",
" <th>96</th>\n",
" <th>97</th>\n",
" <th>98</th>\n",
" <th>99</th>\n",
" <th>100</th>\n",
" </tr>\n",
" <tr>\n",
" <th>trial_number</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>2</td>\n",
" <td>5</td>\n",
" <td>21</td>\n",
" <td>26</td>\n",
" <td>38</td>\n",
" <td>61</td>\n",
" <td>78</td>\n",
" <td>104</td>\n",
" <td>121</td>\n",
" <td>149</td>\n",
" <td>...</td>\n",
" <td>10194</td>\n",
" <td>10445</td>\n",
" <td>10565</td>\n",
" <td>10491</td>\n",
" <td>10241</td>\n",
" <td>11530</td>\n",
" <td>9672</td>\n",
" <td>9285</td>\n",
" <td>10982</td>\n",
" <td>11840</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>7</td>\n",
" <td>14</td>\n",
" <td>20</td>\n",
" <td>30</td>\n",
" <td>41</td>\n",
" <td>64</td>\n",
" <td>87</td>\n",
" <td>175</td>\n",
" <td>119</td>\n",
" <td>106</td>\n",
" <td>...</td>\n",
" <td>7810</td>\n",
" <td>10188</td>\n",
" <td>10154</td>\n",
" <td>11070</td>\n",
" <td>7782</td>\n",
" <td>10046</td>\n",
" <td>10438</td>\n",
" <td>10054</td>\n",
" <td>10271</td>\n",
" <td>10925</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>3</td>\n",
" <td>6</td>\n",
" <td>12</td>\n",
" <td>54</td>\n",
" <td>42</td>\n",
" <td>113</td>\n",
" <td>89</td>\n",
" <td>96</td>\n",
" <td>112</td>\n",
" <td>168</td>\n",
" <td>...</td>\n",
" <td>7863</td>\n",
" <td>8040</td>\n",
" <td>9099</td>\n",
" <td>9834</td>\n",
" <td>10435</td>\n",
" <td>10520</td>\n",
" <td>9768</td>\n",
" <td>9185</td>\n",
" <td>10683</td>\n",
" <td>11742</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>5</td>\n",
" <td>11</td>\n",
" <td>21</td>\n",
" <td>20</td>\n",
" <td>42</td>\n",
" <td>51</td>\n",
" <td>74</td>\n",
" <td>105</td>\n",
" <td>81</td>\n",
" <td>105</td>\n",
" <td>...</td>\n",
" <td>8276</td>\n",
" <td>7878</td>\n",
" <td>8877</td>\n",
" <td>9719</td>\n",
" <td>11326</td>\n",
" <td>9954</td>\n",
" <td>10556</td>\n",
" <td>9832</td>\n",
" <td>11003</td>\n",
" <td>9545</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>6</td>\n",
" <td>11</td>\n",
" <td>18</td>\n",
" <td>20</td>\n",
" <td>28</td>\n",
" <td>82</td>\n",
" <td>67</td>\n",
" <td>89</td>\n",
" <td>144</td>\n",
" <td>171</td>\n",
" <td>...</td>\n",
" <td>9955</td>\n",
" <td>10388</td>\n",
" <td>8960</td>\n",
" <td>9131</td>\n",
" <td>8307</td>\n",
" <td>9029</td>\n",
" <td>8321</td>\n",
" <td>11838</td>\n",
" <td>11487</td>\n",
" <td>10706</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>995</th>\n",
" <td>4</td>\n",
" <td>9</td>\n",
" <td>23</td>\n",
" <td>27</td>\n",
" <td>57</td>\n",
" <td>71</td>\n",
" <td>90</td>\n",
" <td>97</td>\n",
" <td>55</td>\n",
" <td>190</td>\n",
" <td>...</td>\n",
" <td>10929</td>\n",
" <td>10141</td>\n",
" <td>8933</td>\n",
" <td>10456</td>\n",
" <td>9695</td>\n",
" <td>8651</td>\n",
" <td>9671</td>\n",
" <td>9626</td>\n",
" <td>10826</td>\n",
" <td>10219</td>\n",
" </tr>\n",
" <tr>\n",
" <th>996</th>\n",
" <td>3</td>\n",
" <td>16</td>\n",
" <td>17</td>\n",
" <td>37</td>\n",
" <td>37</td>\n",
" <td>83</td>\n",
" <td>107</td>\n",
" <td>64</td>\n",
" <td>104</td>\n",
" <td>102</td>\n",
" <td>...</td>\n",
" <td>9557</td>\n",
" <td>8656</td>\n",
" <td>8588</td>\n",
" <td>9872</td>\n",
" <td>8947</td>\n",
" <td>9462</td>\n",
" <td>10681</td>\n",
" <td>11271</td>\n",
" <td>8929</td>\n",
" <td>9451</td>\n",
" </tr>\n",
" <tr>\n",
" <th>997</th>\n",
" <td>6</td>\n",
" <td>6</td>\n",
" <td>24</td>\n",
" <td>27</td>\n",
" <td>33</td>\n",
" <td>83</td>\n",
" <td>41</td>\n",
" <td>91</td>\n",
" <td>106</td>\n",
" <td>142</td>\n",
" <td>...</td>\n",
" <td>7764</td>\n",
" <td>9143</td>\n",
" <td>9341</td>\n",
" <td>7959</td>\n",
" <td>8831</td>\n",
" <td>9411</td>\n",
" <td>10915</td>\n",
" <td>9501</td>\n",
" <td>11208</td>\n",
" <td>8957</td>\n",
" </tr>\n",
" <tr>\n",
" <th>998</th>\n",
" <td>5</td>\n",
" <td>7</td>\n",
" <td>20</td>\n",
" <td>28</td>\n",
" <td>34</td>\n",
" <td>70</td>\n",
" <td>94</td>\n",
" <td>103</td>\n",
" <td>99</td>\n",
" <td>97</td>\n",
" <td>...</td>\n",
" <td>8686</td>\n",
" <td>7095</td>\n",
" <td>8880</td>\n",
" <td>10065</td>\n",
" <td>9895</td>\n",
" <td>9960</td>\n",
" <td>9845</td>\n",
" <td>10510</td>\n",
" <td>10689</td>\n",
" <td>9444</td>\n",
" </tr>\n",
" <tr>\n",
" <th>999</th>\n",
" <td>7</td>\n",
" <td>13</td>\n",
" <td>10</td>\n",
" <td>32</td>\n",
" <td>24</td>\n",
" <td>50</td>\n",
" <td>74</td>\n",
" <td>97</td>\n",
" <td>80</td>\n",
" <td>129</td>\n",
" <td>...</td>\n",
" <td>8276</td>\n",
" <td>9643</td>\n",
" <td>7927</td>\n",
" <td>10140</td>\n",
" <td>9493</td>\n",
" <td>7858</td>\n",
" <td>10231</td>\n",
" <td>9766</td>\n",
" <td>10265</td>\n",
" <td>11124</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>1000 rows × 99 columns</p>\n",
"</div>"
],
"text/plain": [
"number_of_prisoners 2 3 4 5 6 7 8 9 10 11 ... \\\n",
"trial_number ... \n",
"0 2 5 21 26 38 61 78 104 121 149 ... \n",
"1 7 14 20 30 41 64 87 175 119 106 ... \n",
"2 3 6 12 54 42 113 89 96 112 168 ... \n",
"3 5 11 21 20 42 51 74 105 81 105 ... \n",
"4 6 11 18 20 28 82 67 89 144 171 ... \n",
"... ... ... ... ... ... ... ... ... ... ... ... \n",
"995 4 9 23 27 57 71 90 97 55 190 ... \n",
"996 3 16 17 37 37 83 107 64 104 102 ... \n",
"997 6 6 24 27 33 83 41 91 106 142 ... \n",
"998 5 7 20 28 34 70 94 103 99 97 ... \n",
"999 7 13 10 32 24 50 74 97 80 129 ... \n",
"\n",
"number_of_prisoners 91 92 93 94 95 96 97 98 \\\n",
"trial_number \n",
"0 10194 10445 10565 10491 10241 11530 9672 9285 \n",
"1 7810 10188 10154 11070 7782 10046 10438 10054 \n",
"2 7863 8040 9099 9834 10435 10520 9768 9185 \n",
"3 8276 7878 8877 9719 11326 9954 10556 9832 \n",
"4 9955 10388 8960 9131 8307 9029 8321 11838 \n",
"... ... ... ... ... ... ... ... ... \n",
"995 10929 10141 8933 10456 9695 8651 9671 9626 \n",
"996 9557 8656 8588 9872 8947 9462 10681 11271 \n",
"997 7764 9143 9341 7959 8831 9411 10915 9501 \n",
"998 8686 7095 8880 10065 9895 9960 9845 10510 \n",
"999 8276 9643 7927 10140 9493 7858 10231 9766 \n",
"\n",
"number_of_prisoners 99 100 \n",
"trial_number \n",
"0 10982 11840 \n",
"1 10271 10925 \n",
"2 10683 11742 \n",
"3 11003 9545 \n",
"4 11487 10706 \n",
"... ... ... \n",
"995 10826 10219 \n",
"996 8929 9451 \n",
"997 11208 8957 \n",
"998 10689 9444 \n",
"999 10265 11124 \n",
"\n",
"[1000 rows x 99 columns]"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"n_prisoners = list(range(2,101))\n",
"numerical = (pd\n",
" .DataFrame({n: numerical_experiment_numba(n, n_trials=1000) for n in n_prisoners})\n",
" .rename_axis(index='trial_number')\n",
" .rename_axis(columns='number_of_prisoners')\n",
")\n",
"numerical"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"One could also try to solve the problem analytically. Let us look at the probabilities for each of the 3, 4, and 5 prisoners to get into the room in the right moment. \n",
"\n",
"__3 Prisoners:__\n",
"\n",
"| Switch position | right | left | right | left | |\n",
"|---------------------|-------|------|-------|------|---------------|\n",
"| p(Prisoner) | 2/3 | | 1/3 | | |\n",
"| p(CountingPrisoner) | | 1/3 | | 1/3 | |\n",
"| mean number of days | 1.5 | 3 | 3 | 3 | $\\sum$ = 10.5 |\n",
"\n",
"__4 Prisoners:__\n",
"\n",
"| Switch position | right | left | right | left | right | left | |\n",
"|---------------------|-------|------|-------|------|-------|------|----------------|\n",
"| p(Prisoner) | 3/4 | | 2/4 | | 1/4 | | |\n",
"| p(CountingPrisoner) | | 1/4 | | 1/4 | | 1/4 | |\n",
"| mean number of days | 1.33 | 4 | 2 | 4 | 4 | 4 | $\\sum$ = 19.33 |\n",
"\n",
"__5 Prisoners:__\n",
"\n",
"| Switch position | right | left | right | left | right | left | right | left | |\n",
"|---------------------|-------|------|-------|------|-------|------|-------|------|----------------|\n",
"| p(Prisoner) | 4/5 | | 3/5 | | 2/5 | | 1/5 | | |\n",
"| p(CountingPrisoner) | | 1/5 | | 1/5 | | 1/5 | | 1/5 | |\n",
"| mean number of days | 1.25 | 5 | 1.67 | 5 | 2.5 | 5 | 5 | 5 | $\\sum$ = 30.42 |\n",
"\n",
"__General formula:__\n",
"\n",
"By looking at the proibability tables, we can derive a general formula for the number of days until the $N$ prisoners can confirm that all of them were in the room:\n",
"\n",
"$$days = N^2 + \\sum_{k=2}^{N-1} \\frac{N}{k}$$"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [],
"source": [
"# define a function for the analytical solution.\n",
"def analytical_solution(N):\n",
" return N**2 + np.sum(N / np.arange(2, N))"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"3 prisoners: 10.50 days\n",
"4 prisoners: 19.33 days\n",
"5 prisoners: 30.42 days\n"
]
}
],
"source": [
"# test the analytical formula against the numbers from the tables above:\n",
"for i in [3,4,5]:\n",
" print(f'{i} prisoners: {analytical_solution(i):.2f} days')"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"With the analytical solution, we can calculate the theoretical mean number of days until 11 prisoners can confirm that all of them were in the room:"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"142.2186507936508"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"analytical_solution(11)"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"Calculate analytical solution for 2-100 prisoners:"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [],
"source": [
"analytical = pd.Series({n: analytical_solution(n) for n in n_prisoners}, name='analytical')"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>numerical_mean</th>\n",
" <th>analytical</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>4.066</td>\n",
" <td>4.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>10.604</td>\n",
" <td>10.500000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>18.971</td>\n",
" <td>19.333333</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>30.111</td>\n",
" <td>30.416667</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>43.025</td>\n",
" <td>43.700000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>96</th>\n",
" <td>9621.922</td>\n",
" <td>9613.089262</td>\n",
" </tr>\n",
" <tr>\n",
" <th>97</th>\n",
" <td>9791.584</td>\n",
" <td>9811.236025</td>\n",
" </tr>\n",
" <tr>\n",
" <th>98</th>\n",
" <td>10031.929</td>\n",
" <td>10011.393098</td>\n",
" </tr>\n",
" <tr>\n",
" <th>99</th>\n",
" <td>10235.808</td>\n",
" <td>10213.560374</td>\n",
" </tr>\n",
" <tr>\n",
" <th>100</th>\n",
" <td>10405.945</td>\n",
" <td>10417.737752</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>99 rows × 2 columns</p>\n",
"</div>"
],
"text/plain": [
" numerical_mean analytical\n",
"2 4.066 4.000000\n",
"3 10.604 10.500000\n",
"4 18.971 19.333333\n",
"5 30.111 30.416667\n",
"6 43.025 43.700000\n",
".. ... ...\n",
"96 9621.922 9613.089262\n",
"97 9791.584 9811.236025\n",
"98 10031.929 10011.393098\n",
"99 10235.808 10213.560374\n",
"100 10405.945 10417.737752\n",
"\n",
"[99 rows x 2 columns]"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pd.concat([pd.Series(numerical.mean(), name='numerical_mean'), analytical], axis=1)"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA2QAAAJaCAYAAABA74ShAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy89olMNAAAACXBIWXMAAA9hAAAPYQGoP6dpAAClBklEQVR4nOzde3zO9f/H8cd1XWxsdmCZXYuMUphjqcgxZErlGEqlb6RhJFKoJAkd+JLJ0km/oqgmauWs5BCl5KzDdwuZTXPYbLi2XZ/fH9e1y65tZOy85/122+3bPp/3PntfW9+1197v9/NlMgzDQERERERERIqcubgnICIiIiIiUl6pIBMRERERESkmKshERERERESKiQoyERERERGRYqKCTEREREREpJioIBMRERERESkmKshERERERESKiQoyERERERGRYlKhuCdQVtjtdo4cOYKPjw8mk6m4pyMiIiIiIsXEMAxSUlIIDg7GbL74GpgKsgJy5MgRatWqVdzTEBERERGREuLQoUPUrFnzomNUkBUQHx8fwPFF9/X1LebZiIiIiIhIcUlOTqZWrVquGuFiVJAVkKxtir6+virIRERERETkko4yKdRDRERERESkmKggExERERERKSYqyERERERERIqJzpAVIcMwyMjIIDMzs7inIiKliMVioUKFCmqpISIiUgapICsiNpuN+Ph40tLSinsqIlIKeXl5YbVa8fDwKO6piIiISAFSQVYE7HY7sbGxWCwWgoOD8fDw0F+6ReSSGIaBzWbj2LFjxMbGUq9evX9tMCkiIiKlhwqyImCz2bDb7dSqVQsvL6/ino6IlDKVK1emYsWK/PXXX9hsNipVqlTcUxIREZECoj+zFiH9VVtELpd+foiIiJRN+i+8iIiIiIhIMVFBVhotWQJWK3z6aXHPpMB06NCBUaNGXdEz4uLiMJlM7Nixo0DmBI7u6l988UWBPS+7gpxvYc5TRERERAqPCrLSJjERHn8cjh6FIUMc75dDjzzyCD169HC7VqtWLeLj42nUqFHxTKoITJo0iWbNmuW6Hh8fz5133ln0ExIRERGRK6KCrDQxDAgPh5QUx/spKTB0aPHOqQSxWCwEBQVRoUL5y6oJCgrC09OzuKchIiIiIvmkgqw0WbIEli6FrMbSmZkQHe24XkhWrFhBmzZt8Pf3JyAggLvvvps///zTdT9r2110dDS33347Xl5eNG3alC1btrjGJCUlcf/993P11Vfj5eVF48aN+fjjjy/4OSdPnpznKlezZs14/vnnmTRpEh988AHLli3DZDJhMpn49ttv89wCuGfPHu6++258fX3x8fGhbdu2rvn/+OOP3HHHHVx11VX4+fnRvn17fv7553x9fT777DMaN25M5cqVCQgIoHPnzqSmpgKOdgeTJ0+mZs2aeHp60qxZM1asWHHBZy1YsAB/f3+3a1988YWrRcKCBQt48cUX+fXXX12ve8GCBUDuLYu7du2iY8eOrnkNGTKE06dPu+5nrTC+/vrrWK1WAgICGD58OOnp6fl6/SIiIiJyZVSQFbfUVMebYZy/ZrM5rp07d/5a1lbFnP3LTCbH9YMH836u3X6F00tl9OjR/PTTT6xduxaz2UzPnj2x53jus88+y1NPPcWOHTu4/vrruf/++8nIyADg7Nmz3HTTTcTExLB7926GDBnCQw89xLZt2/L8nI8++ij79u3jxx9/dF375Zdf2LlzJ//5z3946qmn6Nu3L127diU+Pp74+Hhuu+22XM/5+++/adeuHZ6enqxbt47t27fz6KOPuuaVkpLCwIED2bhxIz/88AP16tXjrrvuIiVrBfJfxMfHc//997vm++2339KrVy8M5/dy9uzZzJgxg9dff52dO3cSFhbGvffey++//35Jz8+pX79+jBkzhtDQUNfr7tevX65xqamphIWFUbVqVX788Uc+/fRT1qxZQ0REhNu49evX8+eff7J+/Xo++OADFixY4CrwRERERKSIGFIgTp06ZQDGqVOnct07c+aMsXfvXuPMmTO5P9BRihlGYuL5a1OmOK4NHux43243jJ49z4/N661WLffnXnWV4/ru3QX4Kg3j2LFjBmDs2rXLMAzDiI2NNQDjnXfecY3Zs2ePARj79u274HO6detmjBkzxvV++/btjSeeeML1/p133mkMHTrU9f6IESOMDh06uN4fOHCg0b17d7dnZs3ll19+MQzDMMaPH2/UqVPHsNlsl/TaMjMzDR8fH+PLL790XQOMpUuX5jl++/btBmDExcXleT84ONh4+eWX3a7dfPPNxrBhw/Kc7/vvv2/4+fm5jV+6dKmR/f+mL7zwgtG0adNcnyv7POfPn29UrVrVOH36tOt+TEyMYTabjaNHjxqG4fj61a5d28jIyHCNue+++4x+/frl+Vqk+F3054iIiIiUKBerDXLSCllpsGePY6vixRw65BhXwH7//Xfuv/9+6tati6+vLyEhIQAczLEi16RJE9c/W61WABKdgSOZmZm89NJLNG7cmGrVqlGlShVWrlyZ6xnZPfbYY3z88cecPXsWm83GokWLePTRR/M19x07dtC2bVsqVqyY5/2EhAQee+wx6tWrh5+fH76+vpw+ffqi88quadOmdOrUicaNG3Pffffx9ttvc+LECQCSk5M5cuQIrVu3dvuY1q1bs2/fvny9jvzat28fTZs2xdvb2+3z2u12Dhw44LoWGhqKxWJxvW+1Wl3fMxEREREpGuUv/aCkyTrX4+V1/trYsTBqFGSFU4SGQs+esHz5+fNj2VkscM89jnFZ4uIc/1u58hVN75577qF27dq8/fbbBAcHY7fbadSoETabzW1c9qIn68xT1rbG1157jdmzZzNr1iwaN26Mt7c3o0aNyvWMnJ/X09OTpUuX4uHhQXp6On369MnX3Cv/y2sfOHAgSUlJzJ49m9q1a+Pp6UmrVq0uOq/sLBYLq1evZvPmzaxatYo5c+bw7LPPsnXrVgICAvI1V3A0/jWyb12FQj3TlbNQNZlMubaiioiIiEjh0gpZcfP2drxlPxvm4eG4lpWaZzJBVBT4+OR9hszXF956K+/nmi//W5yUlMSBAwd47rnn6NSpEw0aNHCtAOXHpk2b6N69Ow8++CBNmzalbt26/Pbbbxf9mAoVKjBw4EDef/993n//ffr37+9WYHl4eJCZV3GaTZMmTfj+++8vWNRs2rSJkSNHctdddxEaGoqnpyf//PNPvl6byWSidevWvPjii/zyyy94eHiwdOlSfH19CQ4OZtOmTbk+Z8OGDfN8VvXq1UlJSXGFggC5epRdyutu0KABv/76q9tzNm3ahNls5oYbbsjX6xMRERGRwqWCrLQIDHQUZTlWUDAMx/XAwAL/lFWrViUgIID58+fzxx9/sG7dOkaPHp3v59SrV8+1krRv3z4ef/xxEhIS/vXjBg8ezLp161ixYkWu7YohISHs3LmTAwcO8M8//+RZdEVERJCcnEz//v356aef+P333/nwww9d2/bq1avHhx9+yL59+9i6dSsDBgz411W17LZu3crUqVP56aefOHjwINHR0Rw7dowGDRoAMHbsWF555RUWL17MgQMHGDduHDt27OCJJ57I83m33norXl5eTJgwgT///JNFixblCtkICQkhNjaWHTt28M8//3Aue/CL04ABA6hUqRIDBw5k9+7drF+/nhEjRvDQQw9Ro0aNS359IiIiIlL4VJCVJn37OrYuZp37sVigVy/H9UJgNpv55JNP2L59O40aNeLJJ5/ktddey/dznnvuOW688UbCwsLo0KEDQUFBuZo656VevXrcdttt1K9fn1tvvdXt3mOPPcYNN9xAixYtqF69eq6VKICAgADWrVvH6dOnad++PTfddBNvv/22a6veu+++y4kTJ7jxxht56KGHGDlyJIH5KGx9fX3ZsGEDd911F9dffz3PPfccM2bMcDVoHjlyJKNHj2bMmDE0btyYFStWsHz5curVq5fn86pVq8ZHH33E119/7WoNMGnSJLcxvXv3pmvXrtx+++1Ur149z/YBXl5erFy5kuPHj3PzzTfTp08fOnXqRGRk5CW/NhEREREpGiYj56EVuSzJycn4+flx6tQpfH193e6dPXuW2NhY6tSpQ6VKla7sEyUmwg03wMmTULUq7N9fKKtjJYFhGNSrV49hw4Zd1sqcSFlSoD9HREREpFBdrDbISStkpU1goOO8WFCQ43/LaDF27NgxIiMjOXr0KP/5z3+KezoiIiIiUoKl2TIIGRdDyLgY0mwZxT2dfFHKYmnUt2+hbVMsKQIDA7nqqquYP38+VatWLe7piIiIiIgUChVkUiJpJ62IiIiIlAfasigiIiIiIlJMVJCJiIiIiIgUExVkIiIiIiIixUQFmYiIiIiISDFRQSYiIiIiIlJMVJCVMqW5x4KIiIiIyOUqq78HqyATEREREREpJirIpMyZNGkSzZo1K7DnLViwAH9//wJ7Xk4FNd/CnqcUPpPJxBdffFHc0xAREZEipIJMypynnnqKtWvXFvc0ClVISAizZs1yu9avXz9+++234plQGfPBBx/Qpk2bAnlWQf+BQERERMoWFWSl2NFTZ4t7CiWKYRhkZGRQpUoVAgICins6Ra5y5coEBgYW9zRKtLi4OEwm07+OW7ZsGffee28RzEhERETKOxVkxSzNlnHBt7PpmbnGLtp60PV+55nf8eGWuAuOzfl2OTp06MDIkSN5+umnqVatGkFBQUyaNMl1P+sX3B07driunTx5EpPJxLfffgvAt99+i8lkYuXKlTRv3pzKlSvTsWNHEhMT+eabb2jQoAG+vr488MADpKWluZ5jt9uZNm0aderUoXLlyjRt2pTPPvvMdT/rud988w033XQTnp6ebNy4Mc8Viffee4/Q0FA8PT2xWq1ERES47s2cOZPGjRvj7e1NrVq1GDZsGKdPn77kr5HNZiMiIgKr1UqlSpWoXbs206ZNc90/ePAg3bt3p0qVKvj6+tK3b18SEhIu+jUfNWqU27UePXrwyCOPuO7/9ddfPPnkk5hMJleBkdeWxXnz5nHttdfi4eHBDTfcwIcffuh232Qy8c4779CzZ0+8vLyoV68ey5cvv+jrDQkJYcqUKTz88MNUqVKF2rVrs3z5co4dO+Z6nU2aNOGnn35y+7iNGzfStm1bKleuTK1atRg5ciSpqamu+x9++CEtWrTAx8eHoKAgHnjgARITE133s77fa9eupUWLFnh5eXHbbbdx4MCBi843v86ePcuqVavyVZB9++233HLLLXh7e+Pv70/r1q3566+/WLBgAS+++CK//vqr63u1YMECAH7//XfatWtHpUqVaNiwIatXry7Q1yEiIiKlgwqyYtZw4soLvg39aLvb2Bsnr2ZKzD7X+3YDnl+2h4YTVzLwvW1uY9u8sj7X8y7XBx98gLe3N1u3buXVV19l8uTJl/XL46RJk4iMjGTz5s0cOnSIvn37MmvWLBYtWkRMTAyrVq1izpw5rvHTpk3j//7v/4iKimLPnj08+eSTPPjgg3z33Xduzx03bhzTp09n3759NGnSJNfnnTdvHsOHD2fIkCHs2rWL5cuXc91117num81m3njjDfbs2cMHH3zAunXrePrppy/5db3xxhssX76cJUuWcODAARYuXEhISAjgKCq7d+/O8ePH+e6771i9ejX/+9//6NevXz6/eudFR0dTs2ZNJk+eTHx8PPHx8XmOW7p0KU888QRjxoxh9+7dPP744/znP/9h/fr1buNefPFF+vbty86dO7nrrrsYMGAAx48fv+gc/vvf/9K6dWt++eUXunXrxkMPPcTDDz/Mgw8+yM8//8y1117Lww8/jGEYAPz555907dqV3r17s3PnThYvXszGjRvdCuP09HReeuklfv31V7744gvi4uJcRWh2zz77LDNmzOCnn36iQoUKPProo/n8Cl7c2rVrufrqq6lfv/4ljc/IyKBHjx60b9+enTt3smXLFoYMGYLJZKJfv36MGTOG0NBQ1/eqX79+2O12evXqhYeHB1u3biUqKopnnnmmQF+HiIiIlA4VinsCcunsRvF83iZNmvDCCy8AUK9ePSIjI1m7di133HFHvp4zZcoUWrduDcCgQYMYP348f/75J3Xr1gWgT58+rF+/nmeeeYZz584xdepU1qxZQ6tWrQCoW7cuGzdu5K233qJ9+/au506ePPmic5kyZQpjxozhiSeecF27+eabXf+cfTUqa/UnPDycN99885Je18GDB6lXrx5t2rTBZDJRu3Zt1721a9eya9cuYmNjqVWrFgD/93//R2hoKD/++KPbPC5VtWrVsFgsrpWkC3n99dd55JFHGDZsGACjR4/mhx9+4PXXX+f22293jXvkkUe4//77AZg6dSpvvPEG27Zto2vXrhd89l133cXjjz8OwMSJE5k3bx4333wz9913HwDPPPMMrVq1IiEhgaCgIKZNm8aAAQNcX+t69erxxhtv0L59e+bNm0elSpXcCqu6devyxhtvcPPNN3P69GmqVKniuvfyyy+7vv/jxo2jW7dunD17lkqVKuXny3hB+d2umJyczKlTp7j77ru59tprAWjQoIHrfpUqVahQoYLb92rVqlXs37+flStXEhwcDDi+9nfeeWeBvAYREREpPVSQFbO9k8MueM+c46zLilFt6TzzO7fCzGyCNaPbE+xf2W3sxmdup6DkXHWyWq1uW8ku5zk1atTAy8vLVYxlXdu2zbHS98cff5CWlpar0LLZbDRv3tztWosWLS74ORMTEzly5AidOnW64Jg1a9Ywbdo09u/fT3JyMhkZGZw9e5a0tDS8vLz+9XU98sgj3HHHHdxwww107dqVu+++my5dugCwb98+atWq5SrGABo2bIi/vz/79u27rILsUu3bt48hQ4a4XWvdujWzZ892u5b9++Lt7Y2vr++/fn9zfi8BGjdunOtaYmIiQUFB/Prrr+zcuZOFCxe6xhiGgd1uJzY2lgYNGrB9+3YmTZrEr7/+yokTJ7Db7YCj4G3YsGGen9tqtbo+zzXXXJPnXENDQ/nrr79cnxNwK/Datm3LN99847r/5ZdfsmTJEsBRJE2dOtU1du/evbk+T7Vq1XjkkUcICwvjjjvuoHPnzvTt29c1t7xk/XuRVYwBrj88iIiISPmigqyYeXlc+regbvUqvHhvKM8v2wM4irFpvRpTt3qVXGPz89x/U7FiRbf3TSaT65dls9mx6zXrF11wbD37t+eYTKaLPjfrDFdMTAxXX3212zhPT0+39729vS8498qVK1/wHjjOwN19990MHTqUl19+mWrVqrFx40YGDRqEzWa7pILsxhtvJDY2lm+++YY1a9bQt29fOnfu7HbeLT/MZrPb1xMu/DUtCBf7PlzKx2SdYcvrWvbv5+OPP87IkSNzPeuaa64hNTWVsLAwwsLCWLhwIdWrV+fgwYOEhYVhs9n+9XNfbL5ff/216+v3999/06FDB7czj9n/Hdm2bRsZGRncdtttAISHh9O3b1/X/ewFVHbvv/8+I0eOZMWKFSxevJjnnnuO1atX07JlywvOS0RERARUkJU6vW+q6SrI1oxun2cxVpSqV68OQHx8vGvlKvsvu5erYcOGeHp6cvDgQbftifnl4+NDSEgIa9eudduml2X79u3Y7XZmzJjhKi6zVkfyw9fXl379+tGvXz/69OlD165dOX78OA0aNODQoUMcOnTItUq2d+9eTp486bbqk1316tXdzoVlZmaye/dut/l7eHiQmZmZ14e7NGjQgE2bNjFw4EDXtU2bNl3w8xamG2+8kb1797qd3ctu165dJCUlMX36dNfXKWcoyOXKvoW0QgXHj7wLzWPZsmV069YNi8UCOFa/qlWrdkmfp3nz5jRv3pzx48fTqlUrFi1aRMuWLfP8XmX9exEfH+9aSfvhhx/y/dpERESk9FNBVooF+RXMmZkrUblyZVq2bMn06dOpU6cOiYmJPPfcc1f8XB8fH5566imefPJJ7HY7bdq04dSpU2zatAlfX1+3IuPfTJo0ifDwcAIDA7nzzjtJSUlh06ZNjBgxguuuu4709HTmzJnDPffcw6ZNm4iKisrXXGfOnInVaqV58+aYzWY+/fRTgoKC8Pf3p3PnzjRu3JgBAwYwa9YsMjIyGDZsGO3bt7/gVsuOHTsyevRoYmJiuPbaa5k5cyYnT550GxMSEsKGDRvo378/np6eXHXVVbmeM3bsWPr27Uvz5s3p3LkzX375JdHR0axZsyZfr68gPPPMM7Rs2ZKIiAgGDx6Mt7c3e/fuZfXq1URGRnLNNdfg4eHBnDlzCA8PZ/fu3bz00ktFPs/ly5czefLkfH1MbGws8+fP59577yU4OJgDBw7w+++/8/DDDwOO71VsbCw7duygZs2a+Pj40LlzZ66//noGDhzIa6+9RnJyMs8++2xhvCQREZFSJc2W4Qqj2zs5rEB3fZVUSlmUK/bee++RkZHBTTfdxKhRo5gyZUqBPPell17i+eefZ9q0aTRo0ICuXbsSExNDnTp18vWcgQMHMmvWLN58801CQ0O5++67+f333wFo2rQpM2fO5JVXXqFRo0YsXLjQLbL+Uvj4+PDqq6/SokULbr75ZuLi4vj6668xm82YTCaWLVtG1apVadeuHZ07d6Zu3bosXrz4gs979NFHGThwIA8//DDt27enbt26uVb3Jk+eTFxcHNdee61rlTKnHj16MHv2bF5//XVCQ0N56623eP/99+nQoUO+Xl9BaNKkCd999x2//fYbbdu2pXnz5kycONG1BbB69eosWLCATz/9lIYNGzJ9+nRef/31Ip3jn3/+yR9//EFY2IXPdebFy8uL/fv307t3b66//nqGDBnC8OHDXaEnvXv3pmvXrtx+++1Ur16djz/+GLPZzNKlSzlz5gy33HILgwcP5uWXXy6MlyUiIiIlnMnIeVhFLktycjJ+fn6cOnUKX19ft3tnz54lNjaWOnXqXHESXHn8q4FIUZg5cyZr1qzh66+/Lu6p5Kkgf46IiIiUVBf7Xfdy7xWHi9UGOem3+VLGy6MCcdO7Ffc0RMqcmjVrMn78+OKehoiIiJQzKshERMAtTVFERESkqOgMmYiIiIiISDFRQSYiIiIiIlJMVJAVIeWniMjl0s8PERGRskkFWRGoWLEiAGlpacU8ExEprbJ+fmT9PBEREZGyQaEeRcBiseDv709iYiLg6FtkMpmKeVYiUhoYhkFaWhqJiYn4+/tjsViKe0oiIiJSgFSQFZGgoCAAV1EmIpIf/v7+rp8jIiIipVVJ6xdWEugrUERMJhNWq5XAwEDS09OLezoiUopUrFhRK2MiIiJllAqyImaxWPSLlYiIiIiIAAr1EBERERERKTYqyERERERERIqJCjIREREREZFiooJMRERERESkmKggExERERGRApNmyyBkXAwh42JIs2UU2efttu97tkU+iOXzz4rscxYEFWQiIiIiIlK6JSYydWUk1VNP4jFsKJSi3r8qyEREREREpPQyDDwihuNtO4MJICUFhg4t7lldMhVkIiIiIiJSei1ZQoVlX1DBsANgysyE6GhYsqSYJ3ZpVJCJiIiIiEjplJgI4eEYJhPxPgFsvqYx8T4BYDLB44+Xiq2LFYp7AiIiIiIiIvlmGBAeDikpLGncmfFhI7CbzZjtdqatnEO/PescWxc//7y4Z3pRWiETEREREZHSZ88eWLqUeC9/VzEGYDebmRAWQbyXv2Pr4p49xTvPf6GCTERERERESp/QUOjZk9hqNV3FWJZMs4W4gJrQq5djXAmmgkxERERERPKluHqNuTGZSLq3N3WOH8Zst7vdstgzCclIgXnzimdu+aCCTERERERESoXszZ/X70+k7R9V+aX+LUxbOQeLPRNwFGNTV0ZinTENAgOLecb/TqEeIiIiIiJS8jmbP/ueS2XD1Lk8fq8vtkyDb4ZN5L/R07gtajCH/YOonZxAcKc20Ldvcc/4kqggExERERGRks3Z/DnJw4vFTe7g9bYPYcs0CAutwcwHbsTWeR6+111Py0O7wN+/VGxVzKItiyIiIiIiUrItWcLnsam0G/ouUzsOxlbRkwYJ/2NOxf9R0WKGwEAmhEVwzNsf25vzSsVWxSwqyEREREREpORKTCR+zATGhY3AMJ0vXw5Ur03SU+NdzZ9jGrTlloiPyOzdp7hmellUkImIiIiISMnkbP4cW9EXI0e0vd1sIa6ij6P5cymmM2QiIiIiIlIyOZs/1/EJwGy3u/Ubs9gzCUk6DNG/Ytpbsps/X4xWyEREREREpEQyGjbEuOcerClJeUfbp52EXr0wGpbs5s8XoxUyEREREREpkd7dFMcvTfry2opV9N25mnaxPxPnH0zIySNYTx8vdYmKedEKmYiIiIiIlBhZzZ83v7+UqV/vIyajKt88NBoTYE1JotWhXVhTkhzny6KiSlWiYl5UkImIiIiISMngbP6c4uHFk/sN7Ab0bVGTXm9PIaN7DzKcKYuGxQK9epWa5s8XU6wF2YYNG7jnnnsIDg7GZDLxxRdfuN03DIOJEyditVqpXLkynTt35vfff3cbc/z4cQYMGICvry/+/v4MGjSI06dPu43ZuXMnbdu2pVKlStSqVYtXX30111w+/fRT6tevT6VKlWjcuDFff/11gb9eEREREZHSIs2WQci4GELGxZBmyyj8T+hs/nzE5yoe7DeFFE9vbjqTwEs9GmEym7FFziXVozIGgI9Pqd+qmKVYC7LU1FSaNm3K3Llz87z/6quv8sYbbxAVFcXWrVvx9vYmLCyMs2fPusYMGDCAPXv2sHr1ar766is2bNjAkCFDXPeTk5Pp0qULtWvXZvv27bz22mtMmjSJ+fPnu8Zs3ryZ+++/n0GDBvHLL7/Qo0cPevTowe7duwvvxYuIiIiIyHlLlvBp7BnufDSSeL9AMAzu3Lwcz+jPHfdLcfPniynWUI8777yTO++8M897hmEwa9YsnnvuObp37w7A//3f/1GjRg2++OIL+vfvz759+1ixYgU//vgjLVq0AGDOnDncddddvP766wQHB7Nw4UJsNhvvvfceHh4ehIaGsmPHDmbOnOkq3GbPnk3Xrl0ZO3YsAC+99BKrV68mMjKSqKioIvhKiIiIiIiUY87mzxMGzAaTyXHNZGLa7Y/SbfSTWDt0AP9qxDRoS0yDtuztHVas0y1IJfYMWWxsLEePHqVz586ua35+ftx6661s2bIFgC1btuDv7+8qxgA6d+6M2Wxm69atrjHt2rXDw8PDNSYsLIwDBw5w4sQJ15jsnydrTNbnycu5c+dITk52exMRERERkXzK3vw5qxhzyiwjzZ8vpsQWZEePHgWgRo0abtdr1Kjhunf06FECcyxVVqhQgWrVqrmNyesZ2T/HhcZk3c/LtGnT8PPzc73VqlUrvy9RRERERESymj8nHcJst7vdOt/8ObpUN3++mBJbkJV048eP59SpU663Q4cOFfeURERERETypciDO/ISGsrJ29qV6ebPF1NiG0MHBQUBkJCQgNVqdV1PSEigWbNmrjGJiYluH5eRkcHx48ddHx8UFERCQoLbmKz3/21M1v28eHp64unpeRmvTERERESk/Oq273teWPsWlqbz4P7+rD9wjJEdnmZiikeZbf58MSV2haxOnToEBQWxdu1a17Xk5GS2bt1Kq1atAGjVqhUnT55k+/btrjHr1q3Dbrdz6623usZs2LCB9PR015jVq1dzww03ULVqVdeY7J8na0zW5xERERERkQLg7DNWPfUkHsOGcvyvvxn72U5SMmF/v0fLbPPniynWguz06dPs2LGDHTt2AI4gjx07dnDw4EFMJhOjRo1iypQpLF++nF27dvHwww8THBxMjx49AGjQoAFdu3blscceY9u2bWzatImIiAj69+9PcHAwAA888AAeHh4MGjSIPXv2sHjxYmbPns3o0aNd83jiiSdYsWIFM2bMYP/+/UyaNImffvqJiIiIov6SiIiIiIiUTc4+Y962M5gA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RPB624dyjcsebW80VLS9lF2XVZBlMQyD9PR0bDYbhmFQtWpVIiMjqVWrFosXLy6oOYqIiIhIEUqzZRAyLoaQcTGk2TIK7sE5ou3Xbf2dx2p2wVbRkwYJf2K2ZwKKtpfyJd+hHgDbt2/n/fff5+OPP8bT05OHH36YuXPnct111wEwZ84cRo4cSb9+/Qp0siIiIiJSSuWItt9QrS6PL91PuslC1wObeGP5ayR5++UdbV+QRaFICZPvgqxx48bs37+fLl268O6773LPPfdgsVjcxtx///088cQTBTZJERERESnlckTbB6ScICTpMNfXCmBW+xqYjLuprmh7KYfyXZD17duXRx99lKuvvvqCY6666irszm7qIiIiIlLOZYu2nxAWgd0Zbf/cund4OHojFfbvI63PfYq2l3Ip32fInn/++YsWYyIiIiJS8hXaObGcckTb27NF27/ccRDH7BUUbS/l2mWdITt8+DDLly/n4MGD2Gw2t3szZ84skImJiIiISBmwZw/G0qXMDht+wWh7a7Zo+5gGbdnbO6yYJitS9PJdkK1du5Z7772XunXrsn//fho1akRcXByGYXDjjTcWxhxFREREpBTptu97Xlj7Fpam8zD69WXqY9P4pFrjXONyR9sfLvrJihSzfG9ZHD9+PE899RS7du2iUqVKfP755xw6dIj27dtz3333FcYcRURERKS0yBZtbx4+nLEfbuVtZzF21/7vsSjaXsRNvlfI9u3bx8cff+z44AoVOHPmDFWqVGHy5Ml0796doUOHFvgkRURERKQUcEbbJ3l48UvwDbxzc0827juOxZ7J9Ix93LfsFeJ9AhRtL5JNvgsyb29v17kxq9XKn3/+SWioo3v6P//8U7CzExEREZHSY8kSPo9NZXz4u67wDktmBvOWv0KXl0eT8b8eirYXySHfBVnLli3ZuHEjDRo04K677mLMmDHs2rWL6OhoWrZsWRhzFBEREZHLkGbLoOHElQDsnRyGl8dl5bldmsRE4sdMYPwDs1zFGIBhMtM4+Qi0a4et5W1FHm0vUtLl+/+VM2fO5PTp0wC8+OKLnD59msWLF1OvXj0lLIqIiIiUR85o+989q7oVY+CIt4+r5I916FD4eDETwiJ4Ye1b+L05D88iiLZXrzEp6fJdkNWtW9f1z97e3kRFRRXohERERESklHFG2y+6d5yjODOZXLcs9kxCkg5D9K+KthfJQ75TFkVEREREuu37nm2RD2L5/DMIDWXOoBdZ0aANJsPAbLcDWUmKkVjTTmaLtheR7C5phaxq1aqYsv2l42KOHz9+RRMSERERkRLOGW3vey4Vhg1lWXBTZl51EwBTVs+j45/bzicpnj4O/v46LyZyAZdUkM2aNcv1z0lJSUyZMoWwsDBatWoFwJYtW1i5ciXPP/98oUxSREREREoIZ7S9h+0MJmCbb03GfvUbWCowJNDGgB3fADgi7bNERRVqtL3OiUlpdkkF2cCBA13/3Lt3byZPnkxERITr2siRI4mMjGTNmjU8+eSTBT9LERERESkZliyhwrIvAIjzt/J49/HYLBUIO/EH414eQcaGHrB8ORUMO4bFgql7d0Xbi1xEvs+QrVy5kq5du+a63rVrV9asWVMgkxIRERGREigxEcLDMUwmjvgE8J8+L3DCy4+mR35j1mdTMCf9gy1yLqkelTFA0fYilyDfBVlAQADLli3LdX3ZsmUEBAQUyKREREREpIRxRtuTksKSxp1pE/4+sQE1wTC4e993VD51AoYOhcBAJoRFcMzbH9ub8xxbFUXkgvIde//iiy8yePBgvv32W2699VYAtm7dyooVK3j77bcLfIIiIiIiUgLs2QNLlxLvE8D4sBHn+42ZTEy//VHuPrARa3S0ou1F8infK2SPPPIImzZtwtfXl+joaKKjo/H19WXjxo088sgjhTBFEREREbmQNFsGIeNiCBkXQ1oBhma4xdoDhIaS2bMX47tE5Gr+nGm2EBdQU9H2Ipch3ytkALfeeisLFy4s6LmIiIiISEmQI9aeTh2xX1WdsT3G8u3epLybP2ek6LyYyGVQY2gREREROc8Za+/tjLUnJQX74MFMWLqL6L1JWDB46OcYLPZMIFvz5xnTdF5M5DJc1gqZiIiIiJRR2WLtAcjMZNKZq/nkx0OYTTCrf3Pu3P8uQ6IGc9g/iNrJCQR3alOo0fbqMyZlmQoyEREREXHIFmt/tEo1YqsG82X9dnzc/E5Mhp3Xul7LPU2vJi1yLr7XXU/LQ7vA319bFUWuwCVtWdy5cyd2u72w55Knv//+mwcffJCAgAAqV65M48aN+emnn1z3DcNg4sSJWK1WKleuTOfOnfn999/dnnH8+HEGDBiAr68v/v7+DBo0iNOnT7uN2blzJ23btqVSpUrUqlWLV199tUhen4iIiEiJkCPWvnX4+zxw/zQ+bn4nAFNXvUnvOc87xiraXqTAXFJB1rx5c/755x8A6tatS1JSUqFOKsuJEydo3bo1FStW5JtvvmHv3r3MmDGDqlWrusa8+uqrvPHGG0RFRbF161a8vb0JCwvj7NmzrjEDBgxgz549rF69mq+++ooNGzYwZMgQ1/3k5GS6dOlC7dq12b59O6+99hqTJk1i/vz5RfI6RURERIpdVqy9l797rD1gMux0+PNHiI52jANiGrTlloiPyOzdp7hmLFImXNKWRX9/f2JjYwkMDCQuLq7IVsteeeUVatWqxfvvv++6VqdOHdc/G4bBrFmzeO655+jevTsA//d//0eNGjX44osv6N+/P/v27WPFihX8+OOPtGjRAoA5c+Zw11138frrrxMcHMzChQux2Wy89957eHh4EBoayo4dO5g5c6Zb4SYiIiJSHNJsGTScuBKAvZPD8PIomFMn3fZ9zwtr38LSdB707wc9enBg56FcsfaGyUxcQE2sd7SH0FAowHh9kfLuklbIevfuTfv27alTpw4mk4kWLVpQt27dPN8K0vLly2nRogX33XcfgYGBNG/e3K35dGxsLEePHqVz586ua35+ftx6661s2bIFgC1btuDv7+8qxgA6d+6M2Wxm69atrjHt2rXDw8PDNSYsLIwDBw5w4sSJPOd27tw5kpOT3d5ERERESg1ntH311JN4DBsKx45x9LXZTOvwH8f2xWyKItY+K7gjbnq3Ais4RUqDS/q3ff78+fTq1Ys//viDkSNH8thjj+Hj41PYc+N///sf8+bNY/To0UyYMIEff/yRkSNH4uHhwcCBAzl69CgANWrUcPu4GjVquO4dPXqUwBz7mitUqEC1atXcxmRfecv+zKNHj7ptkcwybdo0XnzxxYJ5oSIiIiJFyRlt7+GMtjdSUtg16jkGN+pLQvUQvM+lcaaiJ3azRbH2IoXskv/80LVrVwC2b9/OE088USQFmd1up0WLFkydOhVwnGXbvXs3UVFRDBw4sNA//8WMHz+e0aNHu95PTk6mVq1axTgjERERkUvkjLaP9wkgtmowf/lbedEaxtnkc9QLrMJbWxZTceWKIou1FynP8r0enP081+HDhwGoWbNmwc0oG6vVSsOGDd2uNWjQgM8//xyAoKAgABISErBara4xCQkJNGvWzDUmMTHR7RkZGRkcP37c9fFBQUEkJCS4jcl6P2tMTp6ennh6el7mKxMREREpJs5o+0+adGFCWITbebH2B39lzvBHqNB3OunXRSvWXqQIXNIZsuzsdjuTJ0/Gz8+P2rVrU7t2bfz9/XnppZcKPOyjdevWHDhwwO3ab7/9Ru3atQFHwEdQUBBr16513U9OTmbr1q20atUKgFatWnHy5Em2b9/uGrNu3Trsdju33nqra8yGDRtIT093jVm9ejU33HBDntsVRUREREolZ7R9vOGRqxgzGXamfDMH31EjFGsvUoTyXZA9++yzREZGMn36dH755Rd++eUXpk6dypw5c3j++ecLdHJPPvkkP/zwA1OnTuWPP/5g0aJFzJ8/n+HDhwNgMpkYNWoUU6ZMYfny5ezatYuHH36Y4OBgevToAThW1Lp27cpjjz3Gtm3b2LRpExEREfTv35/g4GAAHnjgATw8PBg0aBB79uxh8eLFzJ49221LooiIiEhhSbNlEDIuhpBxMaQVcIJht33fsy3yQSyff+aKto/1q5FnkuJhn+oQHY1p7x7F2osUkXxvWfzggw945513uPfee13XmjRpwtVXX82wYcN4+eWXC2xyN998M0uXLmX8+PFMnjyZOnXqMGvWLAYMGOAa8/TTT5OamsqQIUM4efIkbdq0YcWKFVSqVMk1ZuHChURERNCpUyfMZjO9e/fmjTfecN338/Nj1apVDB8+nJtuuomrrrqKiRMnKvJeRERESjdnkqLvuVQYNhRj3z7+6nIvdbZsxmy3uxVlFnsmIckJ0KsXRsNQ4HDxzVukHMl3QXb8+HHq16+f63r9+vU5fvx4gUwqu7vvvpu77777gvdNJhOTJ09m8uTJFxxTrVo1Fi1adNHP06RJE77//vvLnqeIiIhIieJMUkzy8GJPjboEnElh5uTP2Bz6IDFbtzJ15RyeDYsg05WkOBerOb1Iou1F5Lx8F2RNmzYlMjLSbYUJIDIykqZNmxbYxERERETkCixZwuexqYwPf9exEmYYYDJRETu/tu5K/68/oH3sz8T5BxNy8gjWlCRYvNhxXkyNn0WKTL4LsldffZVu3bqxZs0aV3DGli1bOHToEF9//XWBT1BERERE8ikxkfgxExj/wKzz2xJNJjAM3vpmBh1XLybj8VNUX74ca0oShsUCvXop2l6kGOQ71KN9+/b89ttv9OzZk5MnT3Ly5El69erFgQMHaNu2bWHMUUREREQulTNJMbaib67gDkwmKqechGHDsEXOJdWjMgaAj4+i7UWKSb5XyACCg4MLNLxDRERERAqIM0nxUONOuW5Z7JmEJB2G6F8xPT+RCWERvLD2LfzenIenou1FikW+V8hEREREpGRxi7YPDYWePbn3t83UT/gfJsPRJ9YR3BGJNe2kK0lR0fYixe+yVshEREREJH/SbBk0nLgSgL2Tw/DyKKBfw3JE29PiJoiIoPL69Xz5f09yzNufv7KCO04fB39/JSmKlCBaIRMREREprZzR9t62M5iAHd5BzAqfinHfffD881S0ZxKckkSrQ7scKYqGAVFRjiRFESkR8vWnGcMwOHToEIGBgW6Nl0VERESkGCxZQoVlXxDvE8DG2s14qeNgkiv7UPXsaQbefjsZ3XvA8uVUMOwYFgum7t2VpChSwuRrhcwwDK677joOHTpUWPMRERERkUuRmAjh4XzSpAutw99nbLcnSa7sQ62T8fTZ/x1cfbWSFEVKgXwVZGazmXr16pGUlFRY8xERERGRf+OMto83PJgQFuEWb/+3byDJmSYYOhQCA5kQFsExb39sb87TVkWREijfZ8imT5/O2LFj2b17d2HMR0RERETy4Jak6Iy233x1aK5eY3azhTjfGhAdjWnvHiUpipRw+Y73efjhh0lLS6Np06Z4eHhQuXJlt/vHjx8vsMmJiIiICLmTFPfv50yvPkyzds811GLPJCQ5wRVtD4eLfr4icsnyXZDNmjWrEKYhIiIiUvoVSrS9M0nRw5mkaKSkwLBhVJ43j2fvfpTXb+pFvM9V2M0WZ6+xuVjN6TovJlJK5PunxMCBAwtjHiIiIiKSF2eSYpZ0w4RHdDT060fPMQ9xz/0PcKxKVeKyeo2lJMHixY7zYraM4pu3iFySy/qzzZ9//sn777/Pn3/+yezZswkMDOSbb77hmmuuITQ0tKDnKCIiIlI+OZMUDZOJo1Wq8X/N7yamfhs+W/g0gY89Br/9BvfeS/Xly7GmJGFYLNCrV6FH26v5s0jByXeox3fffUfjxo3ZunUr0dHRnD59GoBff/2VF154ocAnKCIiIlIuOZMUSUlhSePO3Db0fea1uo+DVa1MCBsOqakwbJii7UVKuXwXZOPGjWPKlCmsXr0aDw8P1/WOHTvyww8/FOjkRERERMotZ5Li315VGdd1JIbp/K9t66+9mXgvf0eS4j/HFG0vUorluyDbtWsXPXv2zHU9MDCQf/75p0AmJSIiIlLeuMXaA4SGcrb97Yzp9iSGyeQ2NtNsIS6gpitJUdH2IqVXvs+Q+fv7Ex8fT506ddyu//LLL1x99dUFNjERERGRkqhQkhRzxtp36sjJKv4M6TKabckmx/bFbEWZxZ5JSEZKoW1P1BkxkaKT7xWy/v3788wzz3D06FFMJhN2u51Nmzbx1FNP8fDDDxfGHEVERETKLmesvbcz1p6UFBg6FBMmkjyr4EMGj/24FIs9E8AZbR+JdcY0bU8UKQPy/SedqVOnMnz4cGrVqkVmZiYNGzYkMzOTBx54gOeee64w5igiIiJSdjlj7eN9AoitGkydE0ewRkfj128pC/5zN2nnMrh26AIejhrMYf8gaicnENypTaEnKYpI0ch3Qebh4cHbb7/N888/z+7duzl9+jTNmzenXr16hTE/ERERkbLLGWv/SZMuTAiLwG42YzLsTF8xh36PP06tAwfAGkha5Fx8r7uelod2gb+/khRFypB8b1nMcs0113DnnXdy3333qRgTERERyS9nrH284eEqxgAMk5nxYSOINzxg6FDH2MBAJSmKlFGXVZC9++67NGrUiEqVKlGpUiUaNWrEO++8U9BzExERESkWabYMQsbFEDIuhjRbRoE91y1J0RlrH+tXw1WMZbGbzcT51oDoaMc4UJKiSBmV7y2LEydOZObMmYwYMYJWrVoBsGXLFp588kkOHjzI5MmTC3ySIiIiIqVeziTF/fsxOnQgxqNhrqEWeyYhyQnQqxeEhkIBFoUiUrLkuyCbN28eb7/9Nvfff7/r2r333kuTJk0YMWKECjIRERGRnJxJih7OJEUjJYXMYcOZcN2dLA4IBcBk2DFMZmeK4lys5nSdFRMpB/JdkKWnp9OiRYtc12+66SYyMvTXGxEREZFcnEmKWUyZmazcc5TFPUIxG3amfzOHtnE/E+cfTMjJI1hTkmDx4kI9K6ZeYyIlQ77PkD300EPMy+OvNfPnz2fAgAEFMikRERGRMsOZpGiYTMT7BLD5msbE+wRw52+beXzHl8y9px696npT/fQJWh3aRVDaScdWRcXai5QLl7RCNnr0aNc/m0wm3nnnHVatWkXLli0B2Lp1KwcPHlRjaBEREZHsnEmKpKSwpHFnxoeNwG42Y7bbmbZyDuPXvAPex0iLnEv6itWO82U+PtqqKFKOXFJB9ssvv7i9f9NNNwHw559/AnDVVVdx1VVXsceZAiQiIiJSXnXb9z0vrH0LS9N50LgRLF1KvE+AqxgDR4rihLAI2sX+jDU6GtPzE5kQFsELa9/C7815eCrWXqTcuKSCbP369YU9DxEREZEik2bLoOHElQDsnRyGl0e+j9XnLY8kRXr2ZPMfybmi7TPNFuICamK9oz1Gw1BiGrQlpkFb9vYOK5i5iEipUEA/fURERETKuTySFLnvPnY2bsVLtZrnGm6xZxKSkVKo2xMV3CFS8uW7IDt79ixz5sxh/fr1JCYmYrfb3e7//PPPBTY5ERERkVIjjyTFjQeTefymFqR6enH1yQTifa/CbrY4o+0jsc6Y5khSVJ8xkXIr3wXZoEGDWLVqFX369OGWW27BZDIVxrxERERESo9sSYpHq1Qjtmowf/lbmdhlKOmWirS+2pu5v60gZdG3HPYPonZyAsGd2ihJUUTyX5B99dVXfP3117Ru3bow5iMiIiJSulwgSdFkt+ORmU633zcy848/yHxjNr7XXU/LQ7vA319JiiICXEYfsquvvhofH5/CmIuIiIhIqdBt3/dsi3wQy+efwZ49jiRFL3+3JEXDbCbdUoHx697F8/PPMP1zjAlhERzz9sf25rxCbfosIqVHvguyGTNm8Mwzz/DXX38VxnxERERESjZnkmL11JN4DBsK1atDz54cCKyTK0nRbrZwKCAYevVyJSneEvERmb37FNPkRaSkyfeWxRYtWnD27Fnq1q2Ll5cXFStWdLt//PjxApuciIiISImSV5LisGEcfe0Npk9fnmu4khRF5N/kuyC7//77+fvvv5k6dSo1atRQqIeIiIiUSIXSayyPJMUdW3YzZMEvJAbUxvtcGmcqVsJuNitJUUQuSb5/Mm3evJktW7bQtGnTwpiPiIiISMmUR5Li7wG1mHr7IM6lm7k+oBJvbfuECitXKklRRC5Zvguy+vXrc+bMmcKYi4iIiEjJdIEkxSyd/tzGrD8PYPnvTNKvW6okRRG5ZPkO9Zg+fTpjxozh22+/JSkpieTkZLc3ERERkbLgUpIUAUyGnRdXzsPns8VKUhSRfMv3ClnXrl0B6NSpk9t1wzAwmUxkZmYWzMxEREREioszSdH3XCoMGwr793Ou/e38En8uV5KiYTJzKCCYmne0dSUpxjRoy97eYcU0eREpTfJdkK1fv74w5iEiIiJSMuRIUrSnpLBm7DSm3PQY1RL+xmy3uxVlSlIUkSuR74Ksffv2hTEPERERkXwrzCTFeJ8ANtZuxqeNO7MtuLHj8wVV4JnvFvBq+4Fkmi1KUhSRK5bvn1obNmy46P127dpd9mREREREipUzSfHD5ncx8Y6hGM72PpbMDIbs/Jrh77xApT8WcVfUYCUpikiByHdB1qFDh1zXsvci0xkyERERKZWcSYp7Pavx/B1DIdvvN4bJxMNbv6DKqH9Ii5yL73XXK0lRRApEvlMWT5w44faWmJjIihUruPnmm1m1alVhzFFERESkwLmlKML5JEXvam7FGIDdbCHOtwZERytJUUQKVL5XyPz8/HJdu+OOO/Dw8GD06NFs3769QCYmIiIiUmhypih26gihodCjBw3Xb847uCM5AXr1UpKiiBSoAjj56lCjRg0OHDhQUI8TERERAQohuCNHiqKRksJnT7/OyausDD53DivnmLoykmfDhmcL7piL1ZxeaNsTlaIoUn7l+yfazp073d43DIP4+HimT59Os2bNCmpeIiIiIoUjW4pibNVgVl93K+8HOVKkm/86n5tGjKD/lCm0j91OnH8wISePYE1JgsWLlaQoIgUu3wVZs2bNMJlMGIbhdr1ly5a89957BTYxERERkQLnTFH8pEkXJoRFuG1LHP5jNM1ffAoGPUrGrt1UX74ca0oShsUCvXopSVFECkW+C7LY2Fi3981mM9WrV6dSpUoFNikRERGRAudMUYw3PHIVYybDzoPbv8LsfxIGD8IWOZf0FasdZ8x8fJSkKCKFJt8pi7Vr13Z7q1WrlooxERERKZHckhSdKYqxfjXcijEAw2R2pSiyZw8EBipJUUSKxGWdil27di1r164lMTERu93udk/bFkVERKREyJmkuH8/9OzJkT+Tcw3NnqJIaCjYMpSkKCJFIt8F2YsvvsjkyZNp0aIFVqvVrSm0iIiISImQR5IiQ4dCVBR9briBNfs3svL62zDM5iJJUQQlKYpI3vJdkEVFRbFgwQIeeuihwpiPiIiIlEMFHm3vTFLMYsrMxFi6FNOtt0JUFFH9+xPvE5B3iqKISBHK9087m83GbbfdVhhzEREREblyziRFw2TC5EyF/vqG1ixq1pV5k1/G53+/k9G9h1IURaREyHeox+DBg1m0aFFhzEVERETkyjiTFElJwWQYxPsE8NYtPRl5z1NsDGnOh03vhGHDsEXOJdWjMgYoRVFEilW+V8jOnj3L/PnzWbNmDU2aNKFixYpu92fOnFlgkxMRERH5N932fc8La9/C0nQeNG4ES5cCsLjJHYwLG4HhTFRsHP8bj//wGRh2TM9PZEJYBC+sfQu/N+fhqa2KIlJM8l2Q7dy5k2bNmgGwe/dut3sK+BAREZEilVeSYrduHPz+R8Z1HYFhOr8ZaE+Na0n0vQprpzYYDUOVoigiJUK+C7L169cXxjxERESkjCvw4I68khSHDePwrHn859Wv3YoxALvZQtzV12JVkqKIlCD5PkMmIiIiUiI4kxSPVanK5msac9TLH6Kj8dm2hZTAYMd5smws9kxCxj+pJEURKVGu8E9TIiIiIsXAmaT4SZMuTAiLwG42Y7bbmbYykn7DH+ftb7ezedb7vFb9Zuxmi6PX2LHNWB+cXtwzFxFxo4JMREREShdnkmK84eEqxgDsZjMTwobTbv4Omk4eS73Zc+jUrCVJXv7UtqcS/POWYp64iEhu2rIoIiIiBSLNlkHIuBhCxsWQZsso0Gd32/c92yIfxPL5Z7BnDyxdyr6AWq5iLEum2UKcbw2Ijsb0zzFmt36Aa48fIuC1l7VVUURKJK2QiYiISMmWM0lxxw723dSOSTc9lGuoxZ5JSHIC9OpVaEmKCu4QkYKkFTIREREpuZxJit7ZkhQ//M8EuncYxcGqVnzPnsZstwOOYmzqyrlYzelq9CwipYZWyERERKTkciYpxvsEEFs1mAyThYk398cwmeloOsHr84dzrkJF4vyDCTl5BGtKEixe7NieWMDbJkVECoMKMhERESmZLpCk2Pn3rdz6z/8YtGQmmfs6wvLlWFOSMCwW6NUL+vYt7pmLiFwybVkUERGREsEtuCNbkuL4ru5Jiuuuu4VuO9diGj4cW+RcUj0qYwD4+BTYVsWsc2Jx07tdeQNrEZGLUEEmIiIixc8Z3FE99SQew4bChg1kfrGMl9s/gmG6eJLihLAIjnn7Y3tznpIURaTU0Z98RERE5JKl2TJoOHElAHsnhxXM6pEzuMMjW3BHypw3GTUskrVVrsk1vCiSFEVEiopWyERERKR4OYM7KhiOtMTD3gH08WvH2irX4Jlh44Ed32CxZwJKUhSRskcrZCIiIlJ8nMEdhsnE0SrVWFHvNma3uZ+TlX0JTD3B2/XSaTpjLiM2f6IkRREpk0rVCtn06dMxmUyMGjXKde3s2bMMHz6cgIAAqlSpQu/evUlISHD7uIMHD9KtWze8vLwIDAxk7NixZGS4/wD/9ttvufHGG/H09OS6665jwYIFRfCKREREyjFncAcpKSxp3JnW4e/z4h2Pc7KyL8GnElj+4WiafvslGd17UP30CVod2kVQ2skCSVJUaIeIlBSlpiD78ccfeeutt2jSpInb9SeffJIvv/ySTz/9lO+++44jR47Qq1cv1/3MzEy6deuGzWZj8+bNfPDBByxYsICJEye6xsTGxtKtWzduv/12duzYwahRoxg8eDArV64sstcnIiJSHrglKe7ZA0uXEu/lz/iwEa4kRYCjPldh2O2wdCnpI0cWSpKiiEhJUCoKstOnTzNgwADefvttqlat6rp+6tQp3n33XWbOnEnHjh256aabeP/999m8eTM//PADAKtWrWLv3r189NFHNGvWjDvvvJOXXnqJuXPnYrPZAIiKiqJOnTrMmDGDBg0aEBERQZ8+ffjvf/9bLK9XRESkTMqZpFi9OutbdOHVdg+5FWMAdrOFuICajuCONm2VpCgiZVapKMiGDx9Ot27d6Ny5s9v17du3k56e7na9fv36XHPNNWzZsgWALVu20LhxY2rUqOEaExYWRnJyMnv27HGNyfnssLAw1zPycu7cOZKTk93eREREyoI0WwYh42IIGRdDWkGd0XImKXo7kxSTz2Xy9KRF/KfTSJY26ozJGeiRxWLPJCQjxbUaFtOgLbdEfERm7z4FMx8RkRKixBdkn3zyCT///DPTpk3Lde/o0aN4eHjg7+/vdr1GjRocPXrUNSZ7MZZ1P+vexcYkJydz5syZPOc1bdo0/Pz8XG+1atW6rNcnIiJSLjiTFI9Vqcpbt/Sky3/msMTvekwYDPZN4aVV83IkKUZinTFNq2EiUuaV6FOshw4d4oknnmD16tVUqlSpuKfjZvz48YwePdr1fnJysooyERGRvDiTFBfc2I1JncPBZAKgWupJotbM4ZZvl5GxbTHtowZz2D+I2skJBHdqc8XBHSIipUGJXiHbvn07iYmJ3HjjjVSoUIEKFSrw3Xff8cYbb1ChQgVq1KiBzWbj5MmTbh+XkJBAUFAQAEFBQblSF7Pe/7cxvr6+VK5cOc+5eXp64uvr6/YmIiJS3rmFdoArSfGI4eFWjAGcrOxDrfhYGDYMW+RcfG1ptDy0C6vJpuAOESk3SnRB1qlTJ3bt2sWOHTtcby1atGDAgAGuf65YsSJr1651fcyBAwc4ePAgrVq1AqBVq1bs2rWLxMRE15jVq1fj6+tLw4YNXWOyPyNrTNYzRERE5BLkDO1ITHQlKcb51XArxsAZ3OFbA6KjMf1zTMEdIlIulegtiz4+PjRq1Mjtmre3NwEBAa7rgwYNYvTo0VSrVg1fX19GjBhBq1ataNmyJQBdunShYcOGPPTQQ7z66qscPXqU5557juHDh+Pp6QlAeHg4kZGRPP300zz66KOsW7eOJUuWEBMTU7QvWEREpLRyhnYkeXixp0ZdvDJsLHhhEW0zjtG7XTvq/Lofs93ulqZosWcSkpzgSFJsGEpMg7bENGjL3t5hBTKlrF5jIiIlWYkuyC7Ff//7X8xmM7179+bcuXOEhYXx5ptvuu5bLBa++uorhg4dSqtWrfD29mbgwIFMnjzZNaZOnTrExMTw5JNPMnv2bGrWrMk777xDWFjB/AdBRESkzFuyhM9jUxkf/q6j6DIMMJn4IaUq9/y1CCvnmLoykmfDhpNptjiDO+ZiNadre6KIlGulriD79ttv3d6vVKkSc+fOZe7cuRf8mNq1a/P1119f9LkdOnTgl19+KYgpioiIlHhptgwaTlwJwN7JYXh5XMGvBImJxI+ZwPgHZp1fATOZwDCYtupNPOZGwunT9O/fn/ax24nzDybk5BGsKUmweLFje2JBxeuLiJQyJfoMmYiIiJQ8bsEdztCO5TWb52rujMlEpYxz8N570LcvGd17UP30CVod2kVQ2kno1UtJiiJS7pW6FTIREREpRs7gDt9zqTBsKARb+d+3W5k+OPe2Q4s9k5CkwxD9K+zdiy1yLukrVjs+1senQLYq6pyYiJR2WiETEREpo9JsGYSMiyFkXAxpBbEl0Bnc4W07gwkgJQVmz6Zuh1t5bPtyWhzagzlnc+eslbDQUAgMVJKiiEgOWiETERGRS7NkCRWWfUG8TwA/1GrMdf8cpPHSpTB/PuOefgZOnSShSrXzZ8ROHwd/f7eVsIJOUhQRKe1UkImIiMi/S0yE8HA+adKF8V0jMEyOJMWXV85lwNNPY37lFXj8cawpSY6wjixRUVoJExG5CG1ZFBERkYtzBnfEGx7nizEAk4nnuwwl3vCAFSvI6N6DDOc9w2JRaIeIyCVQQSYiIiK5uCUp7tmDfekXTG338PlizMluthDnWwOWLiV95EhSPSpjQIGFdoiIlHUqyERERMSdM0mxeupJPIYN5VzVAJ74z3S+bNgh11CLPZOQ5ATo1QujTdtCCe3ISlKMm97tyvqliYiUQCrIRERE5Lw8khQnTPmELwNDqZCZwX07V2FxS1Kci9Wc7loNi2nQllsiPiKzd5/iew0iIqWI/swkIiIi52VLUoytGkydE0cYvvh1fhwaybS4lbT+5i1Gb1x4PkkxJQkWL3ashhVEtL6ISDmjgkxERKSUSrNl0HDiSgD2Tg678u182ZIUJ4RFYDebMdvtTFsZydqox6i4dw8ZZxOovnw51pQkBXeIiBQAbVkUEREpp9yCO3IkKdrNjl8R7GYzE8KG80+mBYYNwxY5t1CCO3ROTETKKxVkIiIi5VGO4A42bCDzi2VMb/tQriTFzKwkxehoTP8cK5TgDhGR8kp/ghIRESlvnMEdHs7gDiMlheSx4xg1LJJ1Va7JNdwtSbFhKDEN2hLToC17e4cV/dxFRMoYrZCJiIiUN87gjgqGHYBY3xr0bDqQdVWuwTPDRr9fV1w0SVFERAqOVshERERKsMIK7jBMJo5WqcaPVzdkfFgEqZW8CTqdxPwbMmkyI5JRmz5WkqKISBFQQSYiIlKGddv3PS+sfQtL03nQvx+Eh0NKCksad2Z82AhHeIdhUPv4ET79ZDyBnduR0b1HoSQpZgV3iIjIeSrIREREyqrERJ7YtIg/AmoRMvZZgoOt7Nv4C+/dMZzPmnQ+H95hMnHIvwaZAEuXkr52HbYVq/E9l1qgSYoiIpKbCjIREZGyyDD44tnZPPfoXOxmMybDztXL4zn8aGSew+1mC3EBNbHe0R6jTVsmhEXwwtq38HtzHp5KUhQRKTQK9RARESmD4j/6lOdqtHH1EzNMZg5X9KECBrfH/ozJGeiRxWLPJCQjxbUaFtOgLbdEfERm7z5FPncRkfJEBZmIiEgxS7NlEDIuhpBxMaQVRGhGYiJ/Tp/tKsayi1wxi/c71WD6ijk5khQjsc6YdkV9xdTcWUQk//TTUkREpBRzC+24vz8YBoSHc+3ff2Ay7G5Nni32TJrG7YIVvvSu481tUYM57B9E7eQEgju1KZDgDhERyR+tkImIiJRWiYlMXRlJ9dSTeAwbComJ2H7dBUuXYj2VyPQVczDnXAU7legI7hg5El9bGi0P7cJqsim4Q0SkmGiFTEREpDQyDDwihuNhO4MJMFJSWDXqJV6ytmZR01uptfsn+u1cTbvYn937iVks0L27gjtEREoIFWQiIiJFoMAbPC9ZQoVlXxDvE0Bs1WB2BV3HKzXvwG628G6N5kyK3YeRkoI1JclRiAGYTODr6xbcEdOgLXt7h13ZXERE5LKpIBMRESltEhMhPJxPmnRhQliEW3hH3z1reW50TzjZAVP//u4fZxgQFeUI7rjM8BA1dxYRKVg6QyYiIlLCddv3PdsiH8Ty+Weu0I54wyNXMWYy7Iz6fiEV5r8FffuS0b0HGc5QD8NigV69FNwhIlLCqCATEREpyXIGd2zYAEuXsrFW41yx9obJzF++NSA6GvbuxRY5l1SPyhgAPj4K7hARKYFUkImIiJRUzuAOb2dwBykpMHs29OxJq8N7HKtl2VjsmYQkJzhWwkJDITCQCWERHPP2x/bmvCvqMSYiIoVDBZmIiEhJ5QzuOFalKt+GNGfGbf05+2UM3HknNTnLhG/fyxFrPxerOd1tJSymQVtuifiIzN59iutViIjIRSjUQ0REpIBcSZJirgbP2YI7xneNcDV43ht4Le89/TS88gpDHn+ce/ZtcI+1X7xYK2EiIqWICjIREZHi5jwn5nsuFYYNhY63w9ChHDRVZnzXERgmk2vot3VbEL/GA+uKFWR070H15cuxpiQVaGiHkhRFRIqOtiyKiIgUp7zOiQ0YwB/f/cjDfSa5FWMAdrOZON8asHQp6SNHKrRDRKSUU0EmIiJSnJznxCoYdgBMmZms+us0dz8ym7hqV180uMNo01ahHSIipZwKMhERkeLiPCdmmEzE+wSw+ZrGxPsE0OCfv6hgz6Rt3A4mfPselosEdyi0Q0SkdNMZMhERkSLiFtzRvx+Eh0NKCosbd2Z82AgMsxmz3c60lXP4YuFY6tapgXnbtgsHd9gyivsliYjIFVJBJiIicomuJEUxV3BHsJWML5axsFlXXrhjKDjPitnNZiaERbAx6lHM2/4is2NHqq//VsEdIiJllAoyERGRwuYM7kjy8GJPjboEn05i44KVzB/1EQc9fHMNzzRbiAuoifWO9pybPYf06653FHIK7hARKXNUkImIiBS2JUv4PDaV8eHvYjebHUEdzhUxvzOnSa7k7ZamaLFnEpKR4ii+/KsxISyCF9a+hd+b8/BUcIeISJmiUA8REZHClJhI/JgJjA8b4SjGwFGMGQZPbvuMLQ2Smb7ijRzBHZFYZ0xzpSZebnBH1rbEuOnd8re9UkREiox+OouIiGRzRefEyDu4I7ai7/liLIvJxC2xv+C16hS963hzW9RgDvsHUTs5geBObQrknJiIiJR8KshEREQKSo7gjoygIKYkVycw0JGemL0os9gzCUk6DEt/JX3tOnxXrKbloV3g769zYiIi5Yi2LIqIiBQEZ3CHt+0MJiD5XCaDPt/Pghb38t92D/L0dwtyb0tMO6kGzyIi5ZxWyERERArCkiVUWPYF8T4BbKsZyn/bPEBclZpUsmfw369ep+uBzXTf9935fmKnj7uthsU0aEtMg7bs7R1WvK9DRESKlAoyEREpd67knJjbGbH7+zsuJiZCeDifNOnC+LAIDOfWRN+zp1kYM53GowZDxCasKUmOxs5ZoqKuqMGzeomJiJR+2rIoIiJyqZxnxKqnnsRj2FBHIWYYEB5OvOHB+K7nizGA0x6VuerYEVi7lozuPcgwOe4VZINnEREp3VSQiYiIXIocZ8RISYGhQ2HPHli6lFi/Ghgm9/+s2s0W4nxrwNKlpI8cSapHZQxQg2cREXFRQSYiInIpnGfEKhh2AEyZmRjR0STOeQt69qTOqQTMdrvbh1jsmYQkJyi4Q0RELkhnyERERP6N84yYYTJxtEo1YqsG4207w+vtHuYgQXzzSFes69czdWUkz4YNJ9NscSYpzsVqTr+i4A6dExMRKdtUkImIiOSQV3NnUlJY0rgz48NGOPqJGQaYTHimn2PHwuXcFhVF//79aR+7/XySYkoSLF58RcEdIiJStqkgExGRMumykxRzNHcm2ApLlxLvE8C4sBHnQztMJjAMFnz6Aq0O7YbnR5DRvQfVly/HmpKk4A4REbkkOkMmIiKSJa/gjtmzyejRkye7jXZLUAQcRVlW4dWoEbbIuQruEBGRfFFBJiIiksUZ3HGsSlU2X9OYo17+sHQpFe66k0r2TMc2xWws9kxCMlLOF16BgQruEBGRfNGWRRERKZdyNXjO1tx5QlgEdrMZs93OtJWR9Hv6aV566TU++3gRka37ZwvtiMQ6Y5pb4aXgDhERyQ8VZCIiUmoV2DmxjrfD0KH8r0IVR3NnZz8xu9nMhLDhtJu/g1rrvmZEdYM+UYM57B9E7eQEgju10RkxERG5ItqyKCIi5YvznFiyhxdbrmlMvOHBmYcG8s5hgx4PvJaruXNmjubOvrY0Wh7ahdVk0xkxERG5YlohExGR8mXJEj6PTWV8+LvYzWZMhh3vc2mcrlTFcd8ZZ58lr+bOL6x9C7835+GZjzNi2pYoIiJ50QqZiIiUWd32fc+2yAexfP6Z40JiIvFjJpzvJQYYJjOnK1Uh6FQir66L4uWVc7HYMwEu2Nz5loiPyOzdp1hek4iIlC1aIRMRkbLpAufEdnsFuoqx7F5bMYe2gRXh1210/N+Pau4sIiJFQgWZiIiUaJcV3OE8J+bh7CdmpKTAgAFs3/83z987Ls9tidclHYS4JDI7dqT6+m/V3FlERIqEtiyKiEjZ4+wnVsGwA2C3G8xNrUbfB17lqO9VVEs7hdltW2Ik1rST0KsX5z74UM2dRUSkyGiFTEREyhZnPzHDZOJolWr8Yr2e91r04KdaoQB0P7CRl755g1SPyue3JZ4+Dv7+juLLv9plB3eIiIjklwoyEREp1dwaPPfvB+HhkJLCksadGdd1hCvGvmJGOlNXv0mfSqcwnUvD91ya43xYlqgo1zmxy2nuDEpSFBGR/FNBJiIipVfO4I5gKyxdSrxPAOPDRrj1FMs0m2kT+zOmFMc5MWP9t1Qw7BgWC6bu3XVOTEREioXOkImISLFKs2UQMi6GkHExpOUnxTCPBs97pr3BP916EBtQK1eSot1sIS6gps6JiYhIiaIVMhERKZ1yNHjOSk78z1+bGZK+E7Pd7laUWeyZhGSk6JyYiIiUKFohExGREu9SGjxjMoFhkHjWTtCzY5m2ck6OBs+RWGdMc5wT4/IaPGedEYub3u3S4vdFRET+hf5rIiIihe6yeollyaPBc+bQYUQ1uCN3g2eTiQd3fIPJVJfedby5LWowh/2DqJ2cQHCnNjonJiIiJY5WyEREpORynhPzdjZ4xtngeU6iJx/cdE+u4RZ7JiFJh2HpUtJHjsTXlkbLQ7uwmmw6JyYiIiWSCjIRESm5nA2ej1WpyuZrGnPUyx/WruUh4wi1Th6lx+51F2zwbLRpy4SwCI55+2N7c55rq6KIiEhJoi2LIiJS7Nx6id3f33HR2eD5kyZdGN81AsNkxmy3M21lJP12/8D6Pb9iST7FMxs+yLvBM1xWPzH1EhMRkaKkFTIRESkQlx1f7zwjVj31JB7DhjoKMcOA8HB2eAe5NXe2m81MCBtOvKkSFW64HpNhYE1JotWhXY4mz4ZxvsGziIhIKaCCTEREik9eZ8SGDiX9i+W8fRj69XvZkZ6YTabZQpxvDdi2jcyOHclwFmuGxQK9eim4Q0REShVtWRQRkeLjPCMW7xNAbNVg6pw4wt9b9/Gc3yH2dxzkGOPsL5bFYs8kJDnB0eB59hzSr7vekcCYjwbP2pYoIiIlhQoyEREpErnOiWU7IzYhLAK72XFGrGpaMklV/PEngwnfvkfmmXM8FzaMTLPFGdwxF6s5XQ2eRUSkTCjRWxanTZvGzTffjI+PD4GBgfTo0YMDBw64jTl79izDhw8nICCAKlWq0Lt3bxISEtzGHDx4kG7duuHl5UVgYCBjx44lI8P9fMO3337LjTfeiKenJ9dddx0LFiwo7JcnIlJ+5DwnlpAA4eHEGx6uYgwcZ8ROePly974NrPtzMX2ffID7d65kY9SjfLxoPBujHqXfzlVu58Qup8GziIhISVGiC7LvvvuO4cOH88MPP7B69WrS09Pp0qULqamprjFPPvkkX375JZ9++infffcdR44coVevXq77mZmZdOvWDZvNxubNm/nggw9YsGABEydOdI2JjY2lW7du3H777ezYsYNRo0YxePBgVq5cWaSvV0SkpLus4A7nObFkDy+2XNOYeMMDBgzgwPc/81ynx3M1d7abzQz45RuqffYxhIaS0b0H1U+foNWhXQQ5I+11TkxERMqKEr1lccWKFW7vL1iwgMDAQLZv3067du04deoU7777LosWLaJjx44AvP/++zRo0IAffviBli1bsmrVKvbu3cuaNWuoUaMGzZo146WXXuKZZ55h0qRJeHh4EBUVRZ06dZgxYwYADRo0YOPGjfz3v/8lLOzSo5JFRMq7POPrlyzh89hUxoe/i91sxmTYqXP8b/7Xolaez8h+RoxGjbBFziV9xep8nxMTEREpDUr0CllOp06dAqBatWoAbN++nfT0dDp37uwaU79+fa655hq2bNkCwJYtW2jcuDE1atRwjQkLCyM5OZk9e/a4xmR/RtaYrGfk5dy5cyQnJ7u9iYiUa3nF1ycmEj9mAuPDRrhWwgyTmf8F1MJsz+TOP7cyZOvnWNyaO2c7IwYQGHhZDZ6zgjvipnfDy6NE//1RRETKsVLzXyi73c6oUaNo3bo1jRo1AuDo0aN4eHjg7+/vNrZGjRocPXrUNSZ7MZZ1P+vexcYkJydz5swZKleunGs+06ZN48UXXyyQ1yYiUuo5tyV6OOPrjZQUCA8HILaib65tiQBvfDWDu33OwrZt/Gf78vPNnVOSYPFit8Lrcho8i4iIlAalpiAbPnw4u3fvZuPGjcU9FQDGjx/P6NGjXe8nJydTq1be229ERMq8HPH1waeO8d1f6bT/33bqZNow2+1uRZnFnslNh/dAShKZHTtSff23WFOS1EtMRETKnVJRkEVERPDVV1+xYcMGatas6boeFBSEzWbj5MmTbqtkCQkJBAUFucZs27bN7XlZKYzZx+RMZkxISMDX1zfP1TEAT09PPD09r/i1iYiUNGm2DBpOdIQa7Z0clmu736XE12f1Duu1ey0zV7zBtJVzmBAWkS26PhKrM6DjcnuJgfqJiYhI6Veiz5AZhkFERARLly5l3bp11KlTx+3+TTfdRMWKFVm7dq3r2oEDBzh48CCtWrUCoFWrVuzatYvExETXmNWrV+Pr60vDhg1dY7I/I2tM1jNERMTpIvH147uej6/HZALDoN6xv8Bkou+uNe7R9bvWgK+vo/i6zDNiIiIiZUGJXiEbPnw4ixYtYtmyZfj4+LjOfPn5+VG5cmX8/PwYNGgQo0ePplq1avj6+jJixAhatWpFy5YtAejSpQsNGzbkoYce4tVXX+Xo0aM899xzDB8+3LXCFR4eTmRkJE8//TSPPvoo69atY8mSJcTExBTbaxcRKXHyOic2YACJP/zMk/c8hWHK8Tc+k4lm8b9DRgYmwJqS5DgfliWrl5gtQ2fERESk3CrRK2Tz5s3j1KlTdOjQAavV6npbvHixa8x///tf7r77bnr37k27du0ICgoiOjradd9isfDVV19hsVho1aoVDz74IA8//DCTJ092jalTpw4xMTGsXr2apk2bMmPGDN555x1F3otImXRZvcTAdU6sgmEHwJSZCWvX8kHnh/ihdlPHNsVsXPH1PXuS0b0HGc6CTefEREREzjMZRo7/gsplSU5Oxs/Pj1OnTuHr61vc0xERuaB/OyOWZstg7H3P8cLat/B7ex6eWefEbrgB49Qpjlapxp/VanLt8cNYTx8nrepVjG4/hOsTY5l7W79s58Tm0u/Qj7B/P2m2jPPnxPz9MR044Nqa+G/zERERKW3yUxvov3oiIuLOeU7M91wqDBsKHW+HoUMhJYUPmt3Fi3eEY5hMmO12pq2cQ78964j6ezVs28b9O1fmHV9vy2BCWISjyHtzHp46JyYiIgKoIBMRkewucE4sbcNG5rR+gHkt+zoCOwC72cyEsAjaxf6Mddu2f42v1zkxERGR3Er0GTIREbk8/3ZOrNu+79kW+SCWzz9zv+E8J3asSlU2X9OYv6pU572T3rSL+IB5rfq5irEsmWYLcQE1HfH1H3xIqkdlDMh3fL2IiEh5pRUyEZHyJueWxE4dHdsKL9JPDCA4+RjxPgFuaYoWeyYhGSmO4su/2mVtS1QvMRERKc+0QiYiUp44tyR6O7ckkpLiOB9mGBAezhHD43wxBq5+Ys98t4Dvfn6L6SvmYLFnApxv8DxjmiugI6ZBW26J+IjM3n2K5/WJiIiUMlohExEpT5xbErOYMjMhOppTk6bwUXwFPrr/lfPFmGuQiWZ/H6DioV306diR26IGc9g/iNrJCQR3aqP4ehERkSuggkxEpJT6t7j4bvu+54W1b2FpOg+youvDHQmJR6tUI7ZqMF62s3zVsB0fpzQgtf2NAJgMe+5tickJjnNis+fge931tDy0C/z9L/mcmLYlioiI5E0FmYhIWXSR6PoljTszPmxErjNi9VMTeXzLp6RlGEzsMtStn5jVnH5F58REREQkbyrIRETKmgtE17N2LfE+AeeLMXCdEZsRM5Nee9Zjeu01GDuWjv/78YL9xBRfLyIiUnBUkImIlGD53pYIrnNi8T4BxFYNps6JI5z9eR91br6Z2GPpeZ4RC049jqlXLxgzhoyNm6i+fPkF+4ldiLYlioiI5J8KMhGR0iqv+HrIO7oeg7WLxlAnMx2z3e5WlLlF15tM2CLnkr5iteO56icmIiJSqBR7LyJSGuUVXx8e7oquH981R3Q9JtYGN8JaK5BpKy8eXU9gIBPCIjjm7Y/tzXnnr4uIiEiB0wqZiEhplEd8vbF0KZtrN+XF3s+7pSQ6BphoHP8HXGJ0vc6JiYiIFA0VZCIixawg4uvrnDiC79lUhnUfx6nKPm7piVAw0fWgc2IiIiIFTQWZiEhJdpH4+sXO+HrDbMZstzNt5RyG//ApR/wCCT6VwCvtH1F0vYiISAmngkxEpKS6QHz9uW+/46Nm3Xip02OuVTC72cyEsAg2Rj3qiKkH7tm3QdH1IiIiJZwKMhGREuBS4uv9zpxm7ZnqfDjiQ455+uR6RqbZQlxATayd25FhNy4ruh60LVFERKQoqSATESlk/3ZGLF/x9c4VseqpJ/jHy88tvMMVXx8Vhc2Woeh6ERGRUkCx9yIixekC8fX28HDiDY/zxRg4ijHD4MU1UWz+cS7TV1wkvl7R9SIiIqWCVshERIpAnlsSIde2xIqZGaw57kdM/Ta8GHDIrYEzACYT1yf+RcVLiK+/0DkxbUkUEREpOVSQiYgUtry2JAYGuuLrP24SxoSuw3P1Dvu9em3MdrtbUVZQ8fUiIiJSMmjLoohIAUizZRAyLoaQcTGk2TLO38hrS+LQoWAYGOHhfHLNLYzvGuFejBkGr3wzm8G/fMXUlZE5tiVmi6/XtkQREZFSTytkIiIF5FKSEuucOII1OhpmzODg+i2Mf+wttwbOAJhMXHPiKBVs5+i/cxXtY7fnO75e2xJFRERKBxVkIiIF4RKTEh0NnCPpN2UKtVu3ptee9UQ36oSRrShzbUvs2fOK4utFRESk5NOWRRGRS5SvbYnh4ZBHUqLdbGZ82HDi8QRgxuYFTMuVlujclhgVhS1yLqkelTFA8fUiIiJlkFbIRETy4WLbErOYMjNh6VLOWiryfpsBuZIS7WYLcb41sH79Nbz2Gv3Hjr3otsQJYRG8sPYt/N6ch2e2c2LaligiIlL6mQzDMIp7EmVBcnIyfn5+nDp1Cl9f3+KejogUgrTDR0i/7nrHtkR/f0wHDjhu3HADxqlTHK1SjdiqwQSePs7yhu1Z2Owukrz9cz3HYs/k/9u78/iYzv0P4J9Zsu9BkrGEIAi1hEhEFC0VRa+lKHVLS4VULHV/1tZSt4T06lWJJlRLey0JRaWx19baIvYtUlVLGolQIiFIMvP8/oiMTGYyWTlDPu/XK692zjk588y8nr749Pme73Ng2UiounQAfvwReX37AbGxUAoNhEIBWe/ewIYN+e9Z0qbSREREZHLKkg34JzsRUSHFBqAnZYnmT8oSRUFZIgBkZWFd866YFjhW+5yYZe4jZFtYQ5V1Gy1TLmJnI39o5Ar9TokyGXIiliB3+678oMeyRCIioiqFgYyIqIiyliWuadUDc7oEabslauRyPDS3xJwdX2PwmR0w06iRalfNcEkioG1fz7JEIiKiqocli5WEJYtEL4fSliWaqfPwi2c7rGvxBu5aGf5vfm3MJ/D3ro88jSi2JBFgWSIREdHLhiWLRERGlLcscXWLQMwI/Eh3E2cAblm3cdPWWee4QqNGvbys/E6JOXksSSQiIiKD2PaeiKqknom/4WjEP6HY8OPTg0/KEm/ZOuGQe3OkWTsCmzYBmzYh1doRM7oVCWNCIGzLf3Ewcjjm67Wuj4BqYWh+WeKTksRbNo7I+TryaaniEwVliVfn9+TqGBERURXDP/mJ6KVTYglgKTdxlgmBzpcTsGLzPFypVgeiSPt6yGSoc/82FH16422NQPuoD/GXoxvqZt5EzS4ddDZw3uL1KrZ4vYoLbwc+y49ORERELxgGMiJ6KRlszAEYLUs8YavCtO4h2lUwIZNhb4O2uGZXAx730iDXaHT2FCtalmjfsBHaJZ8FHB1ZlkhERESlwpJFInr5PFkBq/EgA+YfBQPp6U/PGShL3Hb+Jt6x9EW/IV/oPR8GmQzJ9i5Q3U1D6I7ylSWyJJGIiIiKw78ZENHLxdAKWHBwflfD9HRg9GisatUdM9/4SLtn2GuXExDv3hwQGgAybft6ID94NchIBfr2ZVkiERERVTq2va8kbHtP9Hxl5+Rh0oBP8/fu+iYSFgVliTExwKBBSLWrhitONeFxN3/fr9y10TgYdwDrsmywtUkHndAl16gxKn4D3ju7E7/WaYFPAsdAXWgT53eSE4CLF5Gdk6ffEr9Igw4iIiKismQDBrJKwkBG9HwZ2y8s2t23UGMODdr+dR6XqtfDXSu7Yu+3ds00+CefBQDDmzgPHFh8CCQiIiIqhPuQEdHLzUhjjlRhrg1jACBkchyt0xwAUP1hJjpePoZNzTrr7xmWeRPo2xd5GoEasbFQZf0NoVAA/fqxLJGIiIieGQYyIjJZxa5IPWnMUbgsscZPm5FUoy7uObjqdEIs8Mme5fjgWCyUtjbwTT6nV5aokueWuIlzQXMOIiIiosrCQEZEpqvU+4VpYP/oAXIUZti86l8G29P3+v0QlH37AAMHYtCgQeh05bh+WaKLC5CTh+mBIfkh8OtIWPAZMSIiInqG2PaeiCSVnZOHMb2nIt3WCY/XRj898aQs0eZJWSIKyhJHj8bvZg6Y1l23LPGelR0s1DnIsrTFvB0RRdrTP1kBi4wEBg5EXu8+qHH/LvyTz8ItO0OnLNHaXIklm+fD5f5dPiNGREREzxybelQSNvUgKh+DzTlcXIrtlvhLA1+M7jsdeQr9Bf4fYj5Fx6unABTfmMPoexIRERFVgrJkA66QEdHzsW4doFIB69c/PWZoFSw4WLtf2P+8e6B98Aq8OzgUAaNXIKbFG2h++wry5HKgyP9LUmjU8Lx7I78xh5EVMABGN3EmIiIiep64QlZJuEJGVLyyrIK5Zt3BkTf6Y42VB+KavKq3SfOBpR8ix8wCh2o1xafcL4yIiIhMENveE5HpMNSiPjg4/3kuveYcAvaP7uNeMfuFqeUKXHVwg3/yWdT9+y90ZmMOIiIiesGxZJGIKo+hssQnLepv2TrhkHtzpFk7Ahs34tE/ehvYM0yGe1Z2sHn0AL0v7IVMaHRur7NfGBtzEBER0UuAK2REVCmy/7qB3KHD88sEg4Ig69Qp/4SBFvUNbyfjuqMbvshYZHDPsK83h6LT1VPwv3a2XPuFEREREb0oGMiIqPTWrQPGjwcWLwYGDHh63FBZ4ujRAIDjdjUxrftYiCfPggmZHJdq1AUApNs5GdwzrNHdG4CvLwYd3VnsfmHWAPDDd0/Hw7JEIiIiegGxqUclYVMPetkZbRVvpEX9h/1nGrzff7Z8ibfP7UFMi256q2DvJCcAiYnIGzUaiI2FUmggFArIevcGNmx4jp+aiIiIqOzY1IOIys/QKlhxjTk2bNC2qC9clijXaBC6Ixw9/jgC68cPkW1uqdctMSD5HGTGVsFcXZETsYRliURERPRS4wpZJeEKGb0U0tOBxo2BjAzA0REoYZPm+6vW4sj2w9h+R44fX+lisEW9tToH2xr4lX8VrLgySSIiIiITVZZswEBWSRjI6IVSzCpYXt9++uEoMhJo3BjR7r46jTnq3bmBZEc35CmKX2hfu2Ya/JPPAgBS7arpr4INHGi8FJKIiIjoBVSWbMC290RVTXo6MGoUkJYGBAXlvwaKbU9/r1cfrK3rV6Q9vRxXqtVGnkKJupnp6Ht+T/lb1NeuCYcfvoPMzQ2yZcsYxoiIiKhK4QpZJeEKGZmc57AKtij2C/RJ3A/Y2SHaw99wWeLFi/kXF5RCOjnlH2PwIiIiopcUSxYlwEBGJqWMz4KhbVvsuyPw/tuzdJ4DK1DvTgquOakgZLrt6Q8sGwlVlw75q11P7muoLBEAnwUjIiKiKoMli0RVxbp1gEoFrF//9JgQyAsahbx7mfkvCzoiFuqGGDB6Bd4dHIr2o1cgpsUbQEICLjnVNhjGvooNw75vRiF0ewQUGjUA6G7SHBkJDBxotCwRQP6/p6YyjBEREREVwhWySsIVMnomjK0qlWEVrPqDDBzr0hc/y12xpmV3/W6IUcPxWGmO10Yu027grD23bCRUjesBR48aXwErPB6WJRIREVEVxn3IiF4GBc03MjLym2906vQ04DxZBcO9TCiRvwomCw7OX60qsicYhIBF3mM8NrM0+DZquQJXHWvCP/ksQreH6z0HppLnArGxyBs1GjViY6HK+htCodBfAXNxAZYufRogGcaIiIiISsQVskrCFTIqt2Kab+Dtt4HYWECtBhQKoPD+XAZWwZyz7+F42y64lGuGz14P0nZELOD4MBPtrp3BjsbtDT8LVtIqGFfAiIiIiEqFTT0kwEBG5VLW5hsxMUDnzkDjxljrnr/ZcsEqmJk6D7lKM9g8foAHFjZ6b7V67XQEXD+D6Bbdit2kGcHBxYdAgI05iIiIiEqBgUwCDGRkVFlWwQy0oJdrNAjdEYF3rsUDAQGYkeuO/3n31GvC4fQgA37J57Gzkb/OChlXwYiIiIieH3ZZJJKCoY6HgNGNmLFpE1KtHXHIvTlSn2zEjF69kCIsMK3QRswauRzTAscgVZgDW7ciy9zaYEfErzcvQNTmUMzbUUxHxNhYoG9fqLIz4J98Fqqi3RALngNzc8v/J8MYERER0TPFFbJKwhWyKq640sMyroL1uPgbcpTmOFi3hcGyw7VrpsE/+SyO1/JC/3cXQHAVjIiIiMjkcIWM6FkpZt8vjB4NZGXlvy7Y96vgegOrYHd79saG2q2fdkJE/ipYXNNO2NnIPz+MFfl/JXKNGvUybwI9eqDNg1SEchWMiIiI6IXHFbJKwhWyl0Ql7fulyvobWLYMmDwZq+r5Y8YbwfmrWUKg2oN7+NvWsdghDD61DQPO/oLEGh6Y2S1Yv/nGxYvA3r3a9+QqGBEREZFpYVMPCTCQvUCKC13FBS6gHA04wvHOhb3Y594S7/efbfB5L/e7qUh2dC1fC/qS2uIb+5xERERE9EyxZJGorA02jJUdFtyvSOnho9g4nB4chKWNu2Ba97E6pYfTA0OQauUAARgMY9/8OAe/LhuJ0O3lLDuUyYCoKMDOLv+1vX1+OCxs4EAgNZVhjIiIiMiEKaUeAFG5GVvpGjUqf6UrKAjo1Olpgw1DoWvDhqeBq3DZ4caNwLp1EB074tGYsdjcotvTZ76EgEwInaYahanlClx1rIkmt65CrtHotaB/5fZVwNcXg47uRKcrx/VXwVxd8wPX3r35n8NQ4Cp4FqzgO2BJIhEREdELhyWLlYQli89IWcsLjZXylfCsV+GyQ5nQoOOVE9AolEisXg8Nbl9HQp1XdIIVADhm34Pn38k4VrsZRKGVMIVGjQNLP4TqYQZivF7DdG7ETERERFRl8BkyCTCQVYBEoavws16pNs7wH/WtwfJCAHDKvoe71g56xwva0Ee36IZPDIWu+fOBUaPYfIOIiIioCmEgk0CVD2TGVnLK07mwAqErxt1Xu6myXKPBB8c2wz3rFs64NsCGZq/rhC6FRo0DUcNxxakm3h0cqvexPjy6Eb0uHoBDzgN0GR6pV3pYYgOOAQPYfIOIiIioimEgk8BLE8jKE6yMdScsT+fCcoSusQfXwvPuX7jsXBtftR+sV1pozNo101Av4wYCRq8wHLgCfIBDhxDj7lu+0kOughERERFVKQxkEjCpQFbSiktlBitjoaqk1uxlDF0F5YUrWvXAZ6+PNFheKNeooZEr9I63ST4Pr1tXsNq7h36b+ZKe9aqMfb+4CkZERERUZTCQScBkApmxUGXsfHmDVXGhKiYm//eKO9e5M9C4sU7okgkN+p/9BbWzbuN35zrY0qSDwfLCSW+OxwGP1nof3fPWNTS6fQ3bGnfQX+kqKXSV9KwX9/0iIiIiolJiIKuAJUuW4IsvvkBaWhpatmyJ8PBw+Pr6lvh7JhHISgoNlR2sil3JisA7V4/gkcIM3zV6DV90HArxJHB1/vM4ajy8h1uOLpi1LQKvj4gqc3nhVScVpncfW/auhsZCV2me9WLpIRERERGVAgNZOcXExGDo0KGIioqCn58fFi1ahPXr1yMpKQkuJfzF2yQCmbFQNXBgOUoE84MVAMTUa6dzblT8j/C++QeuOrghtPP7+mWAUcMx57UPsc3r1WKH+9XmMIzvPVnv+Gt/HIXn7WR849e37OWFFQldpQlcXAUjIiIiohIwkJWTn58f2rZti4iICACARqNBnTp1MHbsWEydOtXo70oeyJ6EiaKhat6OCPRJOYlHO3/Bw7f6YEPdtljY4Z8QhZ7LqpN5C0dqN0V4+0E6AQhCoNGtq1gSuwCBw78u80pWdMtu2NzsNb1zA0/vgE/KRbRKu4Tu7y+u3PLCioYuBi4iIiIiqiAGsnLIycmBtbU1fvzxR/Tp00d7fNiwYcjIyMDmzZt1rn/8+DEeP36sfZ2ZmYk6depIE8ielCKm7jmIgKDlusFJiGL31gLyA1CvxF8NBqcCxa1kNbh9HS737+Bw3ZYGn/XKlSvROeib8nUuZOgiIiIiohdUWQJZ6Zc8XnK3b9+GWq2Gq6urznFXV1ekpaXpXR8aGgoHBwftT506dZ7XUPWdPw9s2oQrDq76q1iFg5I6T+9X1XIF3LL+xhu/H84Pb4V/VaPBwriFaJ7+B+Qajc45hUaNVetnYe3Gz7BgezgUGrX2+LwdS6CS58FdPETojggD53KBFSuAqCi8c2YnDkQNx9o103AgajjeObMTiIoCRo4E+vaFKjsD/slnocrOAPr1yy+9lMnyr7Gzyx+MvT0QGfl0cC4uwNKlgJtb/j+Llh0OHAikpjKMEREREZHkuEL2xI0bN1CrVi0cOnQI/v7+2uOTJ0/G/v37ER8fr3P9i7JCJteosWNFCOpZALfvP9Y7X2KJ4LV4QAjE1GtX9pWsQs1AytW5kCtdRERERPQCYsliOZS1ZLEoU3qGzGBw+u03oEOH8pUIGgtWxsoHS9MqnqGLiIiIiF4yDGTl5OfnB19fX4SHhwPIb+rh7u6OkJAQ02/qAeh0UTS4ImXsfEWClbFQxc6FRERERFTFMJCVU0xMDIYNG4alS5fC19cXixYtwrp163Dx4kW9Z8uKMolAVpF9yICKBStjoYqBi4iIiIiqEAayCoiIiNBuDN2qVSssXrwYfn5+Jf6eSQQyoOTgxGBFRERERPRMMZBJwGQCGVBycGKwIiIiIiJ6ZhjIJGBSgYyIiIiIiCTDfciIiIiIiIheAAxkREREREREEmEgIyIiIiIikggDGRERERERkUQYyIiIiIiIiCTCQEZERERERCQRBjIiIiIiIiKJMJARERERERFJhIGMiIiIiIhIIgxkREREREREEmEgIyIiIiIikggDGRERERERkUQYyIiIiIiIiCTCQEZERERERCQRBjIiIiIiIiKJMJARERERERFJRCn1AF4WQggAQGZmpsQjISIiIiIiKRVkgoKMYAwDWSXJysoCANSpU0fikRARERERkSnIysqCg4OD0WtkojSxjUqk0Whw48YN2NnZQSaTVco9MzMzUadOHSQnJ8Pe3r5S7klVB+cPVQTnD5UX5w5VBOcPVYQpzR8hBLKyslCzZk3I5cafEuMKWSWRy+WoXbv2M7m3vb295JOKXlycP1QRnD9UXpw7VBGcP1QRpjJ/SloZK8CmHkRERERERBJhICMiIiIiIpIIA5kJs7CwwKxZs2BhYSH1UOgFxPlDFcH5Q+XFuUMVwflDFfGizh829SAiIiIiIpIIV8iIiIiIiIgkwkBGREREREQkEQYyIiIiIiIiiTCQERERERERSYSBzIQtWbIE9erVg6WlJfz8/HD06FGph0QmJjQ0FG3btoWdnR1cXFzQp08fJCUl6Vzz6NEjjBkzBtWqVYOtrS3efvtt3Lx5U6IRkymbP38+ZDIZJkyYoD3G+UPGpKSk4J///CeqVasGKysrNG/eHMeOHdOeF0Jg5syZUKlUsLKyQteuXXHp0iUJR0ymQK1WY8aMGfDw8ICVlRUaNGiAf//73yjcZ45zhwr8+uuveOutt1CzZk3IZDL89NNPOudLM1fu3LmDIUOGwN7eHo6OjhgxYgTu37//HD+FcQxkJiomJgYTJ07ErFmzcOLECbRs2RKBgYFIT0+XemhkQvbv348xY8bgyJEj2LVrF3Jzc9GtWzc8ePBAe83HH3+Mn3/+GevXr8f+/ftx48YN9OvXT8JRkylKSEjA0qVL0aJFC53jnD9UnLt37yIgIABmZmbYtm0bLly4gIULF8LJyUl7TVhYGBYvXoyoqCjEx8fDxsYGgYGBePTokYQjJ6ktWLAAkZGRiIiIQGJiIhYsWICwsDCEh4drr+HcoQIPHjxAy5YtsWTJEoPnSzNXhgwZgvPnz2PXrl2Ii4vDr7/+iqCgoOf1EUomyCT5+vqKMWPGaF+r1WpRs2ZNERoaKuGoyNSlp6cLAGL//v1CCCEyMjKEmZmZWL9+vfaaxMREAUAcPnxYqmGSicnKyhKenp5i165dolOnTmL8+PFCCM4fMm7KlCmiQ4cOxZ7XaDTCzc1NfPHFF9pjGRkZwsLCQqxdu/Z5DJFMVM+ePcXw4cN1jvXr108MGTJECMG5Q8UDIDZt2qR9XZq5cuHCBQFAJCQkaK/Ztm2bkMlkIiUl5bmN3RiukJmgnJwcHD9+HF27dtUek8vl6Nq1Kw4fPizhyMjU3bt3DwDg7OwMADh+/Dhyc3N15lKTJk3g7u7OuURaY8aMQc+ePXXmCcD5Q8bFxsbCx8cHAwYMgIuLC7y9vfHNN99oz1+5cgVpaWk688fBwQF+fn6cP1Vc+/btsXv3bvz+++8AgNOnT+PAgQN48803AXDuUOmVZq4cPnwYjo6O8PHx0V7TtWtXyOVyxMfHP/cxG6KUegCk7/bt21Cr1XB1ddU57urqiosXL0o0KjJ1Go0GEyZMQEBAAF555RUAQFpaGszNzeHo6KhzraurK9LS0iQYJZma6OhonDhxAgkJCXrnOH/ImD///BORkZGYOHEipk+fjoSEBIwbNw7m5uYYNmyYdo4Y+rOM86dqmzp1KjIzM9GkSRMoFAqo1WrMnTsXQ4YMAQDOHSq10syVtLQ0uLi46JxXKpVwdnY2mfnEQEb0khgzZgzOnTuHAwcOSD0UekEkJydj/Pjx2LVrFywtLaUeDr1gNBoNfHx8MG/ePACAt7c3zp07h6ioKAwbNkzi0ZEpW7duHVavXo01a9agWbNmOHXqFCZMmICaNWty7lCVxJJFE1S9enUoFAq9TmY3b96Em5ubRKMiUxYSEoK4uDjs3bsXtWvX1h53c3NDTk4OMjIydK7nXCIgvyQxPT0drVu3hlKphFKpxP79+7F48WIolUq4urpy/lCxVCoVmjZtqnPMy8sL169fBwDtHOGfZVTUpEmTMHXqVAwaNAjNmzfHe++9h48//hihoaEAOHeo9EozV9zc3PSa4uXl5eHOnTsmM58YyEyQubk52rRpg927d2uPaTQa7N69G/7+/hKOjEyNEAIhISHYtGkT9uzZAw8PD53zbdq0gZmZmc5cSkpKwvXr1zmXCF26dMHZs2dx6tQp7Y+Pjw+GDBmi/XfOHypOQECA3jYbv//+O+rWrQsA8PDwgJubm878yczMRHx8POdPFZednQ25XPevoAqFAhqNBgDnDpVeaeaKv78/MjIycPz4ce01e/bsgUajgZ+f33Mfs0FSdxUhw6Kjo4WFhYVYuXKluHDhgggKChKOjo4iLS1N6qGRCQkODhYODg5i3759IjU1VfuTnZ2tvWb06NHC3d1d7NmzRxw7dkz4+/sLf39/CUdNpqxwl0UhOH+oeEePHhVKpVLMnTtXXLp0SaxevVpYW1uLVatWaa+ZP3++cHR0FJs3bxZnzpwRvXv3Fh4eHuLhw4cSjpykNmzYMFGrVi0RFxcnrly5IjZu3CiqV68uJk+erL2Gc4cKZGVliZMnT4qTJ08KAOLLL78UJ0+eFNeuXRNClG6udO/eXXh7e4v4+Hhx4MAB4enpKQYPHizVR9LDQGbCwsPDhbu7uzA3Nxe+vr7iyJEjUg+JTAwAgz8rVqzQXvPw4UPx0UcfCScnJ2FtbS369u0rUlNTpRs0mbSigYzzh4z5+eefxSuvvCIsLCxEkyZNxLJly3TOazQaMWPGDOHq6iosLCxEly5dRFJSkkSjJVORmZkpxo8fL9zd3YWlpaWoX7+++OSTT8Tjx4+113DuUIG9e/ca/LvOsGHDhBClmyt///23GDx4sLC1tRX29vbigw8+EFlZWRJ8GsNkQhTaFp2IiIiIiIieGz5DRkREREREJBEGMiIiIiIiIokwkBEREREREUmEgYyIiIiIiEgiDGREREREREQSYSAjIiIiIiKSCAMZERERERGRRBjIiIjohdS5c2dMmDBB6mFoCSEQFBQEZ2dnyGQynDp1qlLvb2qfl4iIKodS6gEQERG9DLZv346VK1di3759qF+/PqpXr16p99+4cSPMzMwq9Z5ERCQ9BjIiIqIn1Go1ZDIZ5PKyF5BcvnwZKpUK7du3r9Qx5eTkwNzcHM7OzpV632chNzeXoZGIqIxYskhEROXWuXNnjBs3DpMnT4azszPc3Nwwe/Zs7fmrV6/qle9lZGRAJpNh3759AIB9+/ZBJpNhx44d8Pb2hpWVFV5//XWkp6dj27Zt8PLygr29Pd59911kZ2frvH9eXh5CQkLg4OCA6tWrY8aMGRBCaM8/fvwY//d//4datWrBxsYGfn5+2vcFgJUrV8LR0RGxsbFo2rQpLCwscP36dYOfdf/+/fD19YWFhQVUKhWmTp2KvLw8AMD777+PsWPH4vr165DJZKhXr57BexS8308//QRPT09YWloiMDAQycnJ2mtmz56NVq1aYfny5fDw8IClpaX2uy5csvj1119r7+Hq6or+/fvrfO5x48bBxcUFlpaW6NChAxISErTnC77z3bt3w8fHB9bW1mjfvj2SkpJ0xrt582a0bt0alpaWqF+/Pj777DPtZwYAmUyGyMhI/OMf/4CNjQ3mzp2Lu3fvYsiQIahRowasrKzg6emJFStWGPw+iIiIgYyIiCro+++/h42NDeLj4xEWFoY5c+Zg165dZb7P7NmzERERgUOHDiE5ORkDBw7EokWLsGbNGmzZsgU7d+5EeHi43nsrlUocPXoUX331Fb788kssX75cez4kJASHDx9GdHQ0zpw5gwEDBqB79+64dOmS9prs7GwsWLAAy5cvx/nz5+Hi4qI3tpSUFPTo0QNt27bF6dOnERkZiW+//Raff/45AOCrr77CnDlzULt2baSmpuqEn6Kys7Mxd+5c/PDDDzh48CAyMjIwaNAgnWv++OMPbNiwARs3bjT4LNqxY8cwbtw4zJkzB0lJSdi+fTs6duyoPT958mRs2LAB33//PU6cOIGGDRsiMDAQd+7c0bnPJ598goULF+LYsWNQKpUYPny49txvv/2GoUOHYvz48bhw4QKWLl2KlStXYu7cuTr3mD17Nvr27YuzZ89i+PDhmDFjBi5cuIBt27YhMTERkZGRlV6+SUT0UhFERETl1KlTJ9GhQwedY23bthVTpkwRQghx5coVAUCcPHlSe/7u3bsCgNi7d68QQoi9e/cKAOKXX37RXhMaGioAiMuXL2uPjRo1SgQGBuq8t5eXl9BoNNpjU6ZMEV5eXkIIIa5duyYUCoVISUnRGV+XLl3EtGnThBBCrFixQgAQp06dMvo5p0+fLho3bqzzXkuWLBG2trZCrVYLIYT473//K+rWrWv0PgXvd+TIEe2xxMREAUDEx8cLIYSYNWuWMDMzE+np6Tq/26lTJzF+/HghhBAbNmwQ9vb2IjMzU+897t+/L8zMzMTq1au1x3JyckTNmjVFWFiYEMLwd75lyxYBQDx8+FD7Pc2bN0/n3v/73/+ESqXSvgYgJkyYoHPNW2+9JT744AOj3wMRET3FFTIiIqqQFi1a6LxWqVRIT0+v0H1cXV1hbW2N+vXr6xwret927dpBJpNpX/v7++PSpUtQq9U4e/Ys1Go1GjVqBFtbW+3P/v37cfnyZe3vmJub632GohITE+Hv76/zXgEBAbh//z7++uuvMn1OpVKJtm3bal83adIEjo6OSExM1B6rW7cuatSoUew93njjDdStWxf169fHe++9h9WrV2vLOS9fvozc3FwEBARorzczM4Ovr6/OewC637lKpQIA7Xd8+vRpzJkzR+e7GzlyJFJTU3VKR318fHTuGRwcjOjoaLRq1QqTJ0/GoUOHSv3dEBFVRWzqQUREFVK0iYNMJoNGowEAbXMMUei5rtzc3BLvI5PJjN63NO7fvw+FQoHjx49DoVDonLO1tdX+u5WVlU7QMgU2NjZGz9vZ2eHEiRPYt28fdu7ciZkzZ2L27NlGSyUNKfqdA9B+x/fv38dnn32Gfv366f1ewXNthsb65ptv4tq1a9i6dSt27dqFLl26YMyYMfjPf/5TprEREVUVXCEjIqJnpmCVJzU1VXusMvfnio+P13l95MgReHp6QqFQwNvbG2q1Gunp6WjYsKHOj5ubW5nex8vLC4cPH9YJlgcPHoSdnR1q165dpnvl5eXh2LFj2tdJSUnIyMiAl5dXme6jVCrRtWtXhIWF4cyZM7h69Sr27NmDBg0awNzcHAcPHtRem5ubi4SEBDRt2rTU92/dujWSkpL0vruGDRuW2IWyRo0aGDZsGFatWoVFixZh2bJlZfpsRERVCVfIiIjombGyskK7du0wf/58eHh4ID09HZ9++mml3f/69euYOHEiRo0ahRMnTiA8PBwLFy4EADRq1AhDhgzB0KFDsXDhQnh7e+PWrVvYvXs3WrRogZ49e5b6fT766CMsWrQIY8eORUhICJKSkjBr1ixMnDixzC3yzczMMHbsWCxevBhKpRIhISFo164dfH19S32PuLg4/Pnnn+jYsSOcnJywdetWaDQaNG7cGDY2NggODsakSZPg7OwMd3d3hIWFITs7GyNGjCj1e8ycORO9evWCu7s7+vfvD7lcjtOnT+PcuXPaZibF/V6bNm3QrFkzPH78GHFxcWUOm0REVQkDGRERPVPfffcdRowYgTZt2qBx48YICwtDt27dKuXeQ4cOxcOHD+Hr6wuFQoHx48cjKChIe37FihX4/PPP8a9//QspKSmoXr062rVrh169epXpfWrVqoWtW7di0qRJaNmyJZydnTFixIhyhUtra2tMmTIF7777LlJSUvDqq6/i22+/LdM9HB0dsXHjRsyePRuPHj2Cp6cn1q5di2bNmgEA5s+fD41Gg/feew9ZWVnw8fHBjh074OTkVOr3CAwMRFxcHObMmYMFCxbAzMwMTZo0wYcffmj098zNzTFt2jRcvXoVVlZWePXVVxEdHV2mz0dEVJXIROH6CyIiInpmVq5ciQkTJiAjI0PqoRARkYngM2REREREREQSYSAjIiIiIiKSCEsWiYiIiIiIJMIVMiIiIiIiIokwkBEREREREUmEgYyIiIiIiEgiDGREREREREQSYSAjIiIiIiKSCAMZERERERGRRBjIiIiIiIiIJMJARkREREREJBEGMiIiIiIiIon8P/6nsvQuljn4AAAAAElFTkSuQmCC",
"text/plain": [
"<Figure size 1000x700 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"ax = numerical.mean().plot(marker='.', ls='--', figsize=(10,7), label='numerical solution mean +/- std', yerr=numerical.std())\n",
"analytical.plot(ax=ax, c='r', marker='d', ls=':', label='analytical solution')\n",
"ax.set_xlabel('number of prisoners')\n",
"ax.set_ylabel('number of days')\n",
"ax.legend(loc=2)\n",
"plt.show()"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"It will take on average over 28 years until 100 prisoners can for sure say that all of them were in the room."
]
}
],
"metadata": {
"kernelspec": {
"display_name": "swe2hs_env",
"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.9.13"
},
"orig_nbformat": 4
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment