GitHub_collection_pykan/tutorials/Example_3_deep_formula.ipynb
2024-08-11 17:13:55 -04:00

523 lines
143 KiB
Plaintext

{
"cells": [
{
"cell_type": "markdown",
"id": "134e7f9d",
"metadata": {},
"source": [
"# Example 3: Deep Formulas\n",
"\n",
"The orignal Kolmogorov-Arnold theorem says that it suffices to have 2-Layer function composition (inner and outer functions), but the functions might be non-smooth or even fractal. We generalize KA representation to arbitrary depths. An example a 2-Layer KAN (with smooth activations) is unable to do is: $f(x_1,x_2,x_3,x_4)={\\rm exp}({\\rm sin}(x_1^2+x_2^2)+{\\rm sin}(x_3^2+x_4^2))$, which requires at least 3-Layer KANs."
]
},
{
"cell_type": "markdown",
"id": "7854503c",
"metadata": {},
"source": [
"### Three-layer KAN"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "2075ef56",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"cuda\n",
"checkpoint directory created: ./model\n",
"saving model version 0.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"| train_loss: 1.76e-02 | test_loss: 1.79e-02 | reg: 1.05e+01 | : 100%|█| 20/20 [00:05<00:00, 3.60it"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"saving model version 0.1\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n"
]
}
],
"source": [
"from kan import *\n",
"\n",
"device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')\n",
"print(device)\n",
"\n",
"# create a KAN: 2D inputs, 1D output, and 5 hidden neurons. cubic spline (k=3), 5 grid intervals (grid=5).\n",
"model = KAN(width=[4,2,1,1], grid=3, k=3, seed=1, device=device)\n",
"f = lambda x: torch.exp((torch.sin(torch.pi*(x[:,[0]]**2+x[:,[1]]**2))+torch.sin(torch.pi*(x[:,[2]]**2+x[:,[3]]**2)))/2)\n",
"dataset = create_dataset(f, n_var=4, train_num=3000, device=device)\n",
"\n",
"# train the model\n",
"model.fit(dataset, opt=\"LBFGS\", steps=20, lamb=0.002, lamb_entropy=2.);"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "b8c880c1",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"saving model version 0.2\n"
]
}
],
"source": [
"model = model.prune(edge_th=1e-2)"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "585b699c",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 500x600 with 16 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"model.plot()"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "ee39c97b",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"checkpoint directory created: ./model\n",
"saving model version 0.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"| train_loss: 9.21e-03 | test_loss: 9.23e-03 | reg: 1.04e+01 | : 100%|█| 50/50 [00:10<00:00, 4.89it\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"saving model version 0.1\n",
"checkpoint directory created: ./model\n",
"saving model version 0.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"| train_loss: 3.33e-03 | test_loss: 3.25e-03 | reg: 1.05e+01 | : 100%|█| 50/50 [00:10<00:00, 4.72it\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"saving model version 0.1\n",
"checkpoint directory created: ./model\n",
"saving model version 0.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"| train_loss: 1.13e-03 | test_loss: 1.07e-03 | reg: 1.04e+01 | : 100%|█| 50/50 [00:09<00:00, 5.33it\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"saving model version 0.1\n",
"checkpoint directory created: ./model\n",
"saving model version 0.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"| train_loss: 3.93e-04 | test_loss: 3.75e-04 | reg: 1.04e+01 | : 100%|█| 50/50 [00:05<00:00, 9.74it\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"saving model version 0.1\n",
"checkpoint directory created: ./model\n",
"saving model version 0.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"| train_loss: 3.60e-05 | test_loss: 3.78e-05 | reg: 1.04e+01 | : 100%|█| 50/50 [00:04<00:00, 10.01it"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"saving model version 0.1\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n"
]
}
],
"source": [
"grids = [3,5,10,20,50]\n",
"#grids = [5]\n",
"\n",
"train_rmse = []\n",
"test_rmse = []\n",
"\n",
"for i in range(len(grids)):\n",
" #model = KAN(width=[4,2,1,1], grid=grids[i], k=3, seed=0, device=device).initialize_from_another_model(model, dataset['train_input'])\n",
" model = model.refine(grid=grids[i])\n",
" results = model.fit(dataset, opt=\"LBFGS\", steps=50, stop_grid_update_step=20);\n",
" train_rmse.append(results['train_loss'][-1].item())\n",
" test_rmse.append(results['test_loss'][-1].item())"
]
},
{
"cell_type": "markdown",
"id": "8c345302-c8bc-4585-8022-c5d90eb64341",
"metadata": {},
"source": [
"Author's note: The scaling isn't optimal. Possibly because of updates on curve2coef, to be investigated. "
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "94f3930a",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[0.009214929305016994, 0.0033308672718703747, 0.00112761405762285, 0.0003925061319023371, 3.601737262215465e-05]\n",
"[0.009230277501046658, 0.0032473765313625336, 0.0010660917032510042, 0.0003754299250431359, 3.784598084166646e-05]\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAi8AAAGhCAYAAACphlRxAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABi5klEQVR4nO3dd3RU1d7G8e/MpNFDSIEIoSgtBBISIBTpUoKiWK6I0nyxoFi4iL0BKigWLAQUr4hYIFhARKVI7yUQpCi9t9BDEtJmzvtHYDDSEkhyZpLns9ase2efkzm/iSHzZJ9dLIZhGIiIiIi4CavZBYiIiIjkhcKLiIiIuBWFFxEREXErCi8iIiLiVhReRERExK0ovIiIiIhbUXgRERERt+JhdgH5zeFwcPDgQcqUKYPFYjG7HBEREckFwzA4c+YMwcHBWK1X7lspcuHl4MGDVKlSxewyRERE5Brs27ePypUrX/GcIhdeypQpA2S/+bJly5pcjYiIiORGUlISVapUcX6OX0mRCy/nbxWVLVtW4UVERMTN5GbIhwbsioiIiFtReBERERG3ovAiIiIibkXhRURERNyKwouIiIi4FYUXERERcSsuF1727dtHmzZtCA0NpUGDBnz//fdmlyQiIiIuxOXWefHw8ODDDz8kIiKCxMREIiMj6dKlC6VKlTK7NBEREXEBLhdeKlWqRKVKlQAIDAzEz8+PEydOKLyIiIgIcA23jRYtWkTXrl0JDg7GYrEwbdq0i84ZM2YM1atXx8fHh6ioKBYvXnxNxa1ZswaHw+ESexXZs7LYtPRX1swYx6alv2LPyjK7JBERkWIpzz0vKSkphIeH8+CDD3L33XdfdDwuLo6BAwcyZswYWrRowWeffUZMTAybN28mJCQEgKioKNLT0y/62tmzZxMcHAzA8ePH6d27N//73//yWmK+WzfrK4KXD6Uex51tR+ZU4GCz12nYqY+JlYmIiBQ/FsMwjGv+YouFqVOn0q1bN2dbdHQ0kZGRjB071tlWt25dunXrxogRI3L1uunp6XTo0IGHH36YXr16XfXcfwah8xs7nT59Ol/2Nlo36yvClz0FgPUf2y04zn3X1jf/WAFGRETkOiUlJVGuXLlcfX7n62yjjIwM4uPj6dixY472jh07smzZsly9hmEY9O3bl3bt2l01uACMGDGCcuXKOR/5eYvJnpVF8PKhQM7g8s/nlZYP1S0kERGRQpSv4eXYsWPY7XaCgoJytAcFBXH48OFcvcbSpUuJi4tj2rRpREREEBERwYYNGy57/osvvsjp06edj3379l3Xe/inv1fOIojjFwWX86wWqMhx/l45K9+uKSIiIldWILON/r2dtWEYudriGuDmm2/G4XDk+lre3t54e3vnqb7cOnvyQK7OS96/Ebi1QGoQERGRnPK158Xf3x+bzXZRL0tiYuJFvTH5LTY2ltDQUBo3bpxvr1mi/A0XtSWmXBysGm0eQcLbHVn92wTS0s7m2/VFRETkYvkaXry8vIiKimLOnDk52ufMmUPz5s3z81IXGTBgAJs3b2b16tX59pp1ojtxhArOwblrDtqp9mEyIxan4zAMDAMyDA9sFoOItJU0XvU0Z0fUZMkn/diwehEOxzWPhRYREZHLyPNto+TkZLZv3+58vmvXLhISEvDz8yMkJIRBgwbRq1cvGjVqRLNmzRg3bhx79+6lf//++Vp4YbB5eHCw2esELHsKhwE/bM7kbBa8NC+debuzmNitBIc7fkBAjQgOLviC6gd+IcBygpuP/wC//sC236qxv9pd3NjuQUKqhJj9dkRERIqEPE+VXrBgAW3btr2ovU+fPkyYMAHIXqRu5MiRHDp0iLCwMEaNGkWrVq3ypeDLiY2NJTY2FrvdztatW/NtqjRcWOcl0DjGhIRMnvg9jdRMqFC+LJOn/Mgtt9wCgCMrk63Lp5Ox+mvqnF6MlyV7FlKGYWOtTzTp9XoQ0e4/lCtdIl/qEhERKSryMlX6utZ5cUV5efN5Yc/K4u+Vszh78gAHT9l5+e1YNm7ahMVi4aWXXmLIkCF4eFzoyDp7+hjb5n1Jmb/iqJ6xzdl+1CjH+vKdKd20N1GNm+Npc7m9MUVERAqdwksBhJd/O3v2LAMHDmTcuHEATJw48bLr0hzfsZYDC74gZP8v+Bqnne2buIndIXdSvU0v6lYPyfWMLBERkaJG4aUQwst5cXFxTJ06le+++w6r9cq9KEZWBvtW/czZVRO58dRSPLADkG54styrKamh3YlqexdBvtqEUkREipdiGV4KcsxLXqSkpPDRRx/xzDPPXHH9mcykI+ye/yUlN8VxQ8ZOZ/shw4/V5TpSsklvWjRpSgkvW2GULSIiYqpiGV7OK+yel3/r168f48ePJzIykri4OG666aYrf4FhcGb3Gg4t+IJKe3+hjJHsPLTWqM2OG+6gauueNKoZgvVyS/2KiIi4OYUXE8PLjBkz6Nu3L8ePH6dMmTJ89tln9OjRI3dfnJXO0TVTSV75FSEnV2Aje0G8VMObhbZmnKl7L43b3E71gDIF+A5EREQKn8KLieEFYP/+/dx///0sXrwYgIceeoiPPvqIkiVL5vo1jKSD7F8wAe9NkwhM3+ts3+cIYFnpDng16kW7po0pV9Iz3+sXEREpbAovJocXgKysLIYNG8abb76JYRjUq1ePn376iVq1auXthQyD9N0rOLxwPAF7ZlDSSHUeWu6ox5ZKXQlp0YOW9UI07VpERNxWsQwvrjJg99/mzp1Lz549sdvtJCQkEBwcfO0vlpHK6YSfSF4xkUonVmEl+z/dGaMEc63NOV7zP0S3iqHeDeU07VpERNxKsQwv57lKz8s/HTlyhF27dtG0aVNnW3p6+vXthn1qL4lLJuC5YTLl0y/sfr3TUZEFJW7BM/IBOjaLJKisz/WULiIiUigUXlwsvPzbjz/+yPPPP09cXBxRUVHX92IOB1m7l3J08Xj8dv+Gt5EGgN2wsMSoz4aA2whp9h9uaRBCSa88b2UlIiJSKBReXDi8OBwOIiMjWb9+PZ6enrz77rs89dRT+XObJ/0MqQk/kbxiAoEn1zqbTxsl+Z0WHLnxHpo0v4XoGhU07VpERFyKwosLhxeAkydP0q9fP6ZOnQrA7bffzpdffomfn1/+XeT4Dk6tmIj1z0mUTT/ibN7iqMxsr1uwhXenc9MG1AgonX/XFBERuUbFMry46oDdyzEMg9jYWJ555hkyMjKoUqUKkyZNokWLFvl7IYcdY+dCTiz9krK7Z+JpZACQZViZ74gg3q8LVaLv5NaIEHxLeuXvtUVERHKpWIaX89yh5+Wf1q1bx7333sv27dux2Wz8/fffV1+V91qdPUXmnz+SvGIC5U/+6Ww+bpThF8fN7Kt6F02bt6Z1rQC8PDTtWkRECo/CixuFF4AzZ87w2GOP4efnx8cff1w4Fz26hZRVE7Gsn0zJjGPO5o2Oavxqawf1/0OXJvUIu6Gspl2LiEiBU3hxs/AC2beRHA4HNlv2RowHDhzg77//pn379gV7YXsW7JhL0vIJlNo9G5uRBUCGYeMPRxRLS3eiSuOu3BEVQqVyJQq2FhERKbYUXtwwvPyT3W6nffv2LFq0iJdeeokhQ4bg4VEI05xTT2BfP4XUVV9R5uRmZ3Oi4ctU+83suKEbzZo2o1O9ipp2LSIi+Urhxc3DS3p6Ok899RTjxo0D4Oabb+a7776jSpUqhVfE4Q2kr/ka488p+GScdDavc9zEz7Qhs+6d3NqkDk2ra9q1iIhcP4UXNw8v58XFxfHwww9z5swZ/Pz8mDBhAl27di3cIrIyYNsszq76Gu9df2DFDkCa4cksR2Pm+dxClajO3BlVlRs17VpERK5RsQwv7jZVOrd27NhB9+7diY+PB2DgwIG8/fbb17e1wLVKTsRYP5m01V9T4tRWZ/MBowI/2VuyMfA2bm7cmNsaBFO+1KWnXdsdBqt2nSDxTBqBZXxoUt0Pm3puRESKvWIZXs4rSj0v56Wnp/PCCy/w4YcfUq9ePVatWkXJkiXNK8gw4OA6stZ+g/Hn93hmJjkPrXTUYaqjNak1b+O2RrVoUzvQOe165sZDvDF9A1WS1xPIKRLxZV/pcF69vT6dwyqZ9W5ERMQFKLwUsfBy3i+//EKNGjWoV68ekD1DyfRpzJlpsOVXMtZ8g8fuBVhxAJBiePO7I5qZHu2oHN6eir6lSJg9kdc8JxJsOeH88oOGH8Mye9Pt/v4KMCIixZjCSxENL//29ttvs2PHDj766CNze2LOSzoI6yeRseZrvE7vcjbvcQSy3nEjXW3LMYB/3iVynPvpe8nzOd566SXdQhIRKaYUXopBeDlw4AA1atQgIyODevXqMWXKFEJDQ80uK5thwL6VONZ9i2PDj3hkpTibL9VR5DDgMBXY03MFzWoGFnKxIiLiCvLy+a014N3UDTfcwG+//UZQUBCbNm2iUaNGjB8/HpfIohYLhDTFescneDy3jS01H3Y2X4rVAsGW42xZNYvTZzMLsVAREXFHCi9urH379qxfv54OHTpw9uxZ+vXrR8+ePUlKSrr6FxcWr1JYgurl6tTKf4/nkTc/4b5PlzB2wQ7+PpzkGmFMRERcim4bFQEOh4ORI0fyyiuvYLfbCQsLY926dYWzKm8u2HcuwjYx9+vTnDJKscARzjx7JH+XbkJUnRq0rR1Ai5v8KeXtGu9JRETyV7Ec81JU13nJi2XLltGjRw+effZZnnjiCbPLucBh5+y7oXinHuZS43EdBmR5++JV6xbs2+diS7uwom+WYSXeqMVce0MW04gK1cJoUyeQNrUDuTGglPmzrUREJF8Uy/ByXnHsefmnpKQkypQp4/xQ/+uvvwgKCsLPz8/cwjZPx5jSGwMjx71KB2DBguXeiRB6e/ZGkftXw9aZOLbOxHr07xwvs8cRyDxHQ+Y6IjlQriEt69xA29qBNK1RgRJetkJ9SyIikn8UXopxePmnpKQkIiMjycjIYNKkSbRo0cLcgjZPx5j5PJakg84mo+wNWDq/nR1cLuXkbtg6G2PrTNi1GIsjw3ko2fBhkaMB8xwNWWZpSK0bb6Rt7UDa1g4kpIILTB0XEZFcU3hReAFg69at3HrrrWzfvh2bzcYbb7zB888/j9Vq4jhthx32LIPkI1A6CKo2B2sue0zSk2HngnO9MrOxphy58LKGhfXGjcy1N2SeoyFpFUJpWyeItrUDaVy9PN4e6pUREXFlCi8KL05nzpzhscce49tvvwWgQ4cOfP311wQFBZlc2XVyOOBQAmydhbF1JpZDCTkOHzL8mGdvyFxHQxI8GhB1U/btpTa1Awj2LWFKySIicnkKLwovORiGwYQJExgwYABnz54lKCiIb775hltuucXs0vJP0iHYNjs7zOycjyUz1XkozfBkqSOMeY6GzLM3pFzFarQ5F2SiqpbH06YVA0REzKbwovBySZs3b6Z79+5s3LiRLl26MGPGjKI5WyczDXYvga0zMbb+juX0/hyHNzuqMvdckNnpVZsWtbJnL7WpFUBgWR+TihYRKd4UXhReLis1NZXXX3+d5557joCAALPLKXiGAYl/wdaZ2b0y+1dhMRzOw8eMsixwRGRPxXbUp9oNFc/dXgokooqv9loSESkkCi8KL3nyzDPP0KZNG7p2zf1Ccm4r5Ths/yO7V2b7H1jSL6xGnGHYWOWowzxHJHMdDTldogqtawXQtnYgrWoF4FfKy8TCRUSKNoUXhZdc++WXX7j99uxpygMHDuSdd97By6uYfEjbM2Hvctg6K7tn5vj2HId3OCox1xHJPEdD4o1ahFXxp02tQNrWCSAsuBxW9cqIiOQbhReFl1zLyMjghRdeYNSoUQA0atSIyZMnc+ONN5pcmQmObYdt2UHG2LMMiyPLeSjJKMlCRwPm2iNZ4AjHo3QFWp8LMi1rBlCuhKeJhYuIuD+FF4WXPJsxYwZ9+vThxIkTlClThs8//5zu3bubXZZ50k7DjnnZvTLbZkPqcechu2FhrVGTefbs20s7LFWICvGjTZ3sW0x1KpYpmgOhRUQKULEML9rb6Prt37+f+++/n8WLFwPw/PPP8/bbb5tclQtw2OFAvHPQL0c25ji83/Bnrj17y4KVjrqUL1uWtnUCaFM7kBY3+VNam0mKiFxVsQwv56nn5fpkZWUxdOhQRowYwS+//EJMTIzZJbmeU/vO3V6aBTsXgj3deSjF8GaJoz5zHQ2Zb4/glM2PJtX9nDOYtJmkiMilKbwovFy3nTt3UqNGDefzPXv2EBISog/ef8tIgV2LLvTKnDmU4/B6Rw3mnduyYKNRjRvKl8ref6lOAM1q+GszSRGRcxReFF7y1e7du4mIiODWW2/l008/pUyZMmaX5JoMAw7/eWH20oH4HIcTDV/m2SOY52jIEkd9sjxK0qxGBdrWDqBtnUCqVihlUuEiIuZTeFF4yVfffPMNffv2xW63c9NNNxEXF0dkZKTZZbm+M0dg+5zsILNjPmQkOw+l48lye2j27SVHQ/YbAdTwL0Wbc70yTar7aTNJESlWFF4UXvLd0qVL6dGjB/v27cPLy4t3332XJ598UreRcisrHfYsze6V2fI7nNqT4/AWRxXmOhoy196QdUZNvD09aXGTv3Pg7w3aTFJEijiFF4WXAnHixAn+7//+j59//hmAbt268cUXX+Dn52dyZW7GMODY1gvjZPYuh39sWXCa0sy1RzDP3pBFjgYkUYpaQaWdg34bVdNmkiJS9Ci8KLwUGMMwGD16NIMHDyYjI4NXXnmFN954w+yy3FvqiXNrysyEbXMg7ZTzkB0rqxx1mHtu0O9OoxJlvD25uab/uTCjzSRFpGhQeFF4KXBr165lxIgRfP311/j46MMz39izYP+qC70yR//OcXgvFZmT1ZC5joasdtQhEw/qBZd1zmCKqFJem0mKiFtSeFF4KXRZWVm8+uqrDBw4kKCgILPLKTpO7Mpe4XfrTNi1GByZzkOplhIsyKrv3LLgOOXwLelJq5oBtK0TQKuaAVQo7W1i8SIiuafwovBS6IYNG8brr79OxYoV+eabb2jfvr3ZJRU96Wdg5wLYMjN7kbyUo85DDixs4CZmZ2bfXvrLyF6Tp0Fl3+yp2LUDqX+DNpMUEdel8KLwUug2bdpE9+7d2bRpExaLhZdeeokhQ4bg4aGl8QuEwwEH1527vTQze32Zfzhq9WdWRjhzHZEsc9QjHS8qlPKi9bkg06pmAOVKajNJEXEdCi8KL6ZITU1l4MCBfP755wDcfPPNTJo0icqVK5tcWTGQdPDc4nizsntnss46D2VYvFnmqMfsrIbMs0dwmApYLRBVtXz2ujK1A6lb6eqbSdodBqt2nSDxTBqBZXxoUt1P42tEJN8ovCi8mGry5Mk88sgjnDlzBj8/P6ZMmaLbSIUp82z2+Jjzg36T9uc4vN1ag98yGjDPHsl6owYGVoLKejunYre4qQJlfHL2yszceIihv2zm0Ok0Z1ulcj683jWUzmGVCuVtiUjRpvCi8GK67du3c99997F582ZWr15NvXr1zC6peDIMOLLpQpDZvxq48E8+yerLH1nhzMrK3rIghRJ42iw0ruZHm3O3mLYnJvP4t2ux4KCJ9W8COUUivqx21MGBlbE9IxVgROS6uXV4OXPmDO3atSMzMxO73c5TTz3Fww8/nOuvV3hxHRkZGcTHx9OsWTNnW3JyMqVLlzaxqmIu5Vj2WjJbZ2avLZOe5Dxkt3iwzhrGjLQGzHM0ZK+RPWvMaoEOllW87jmRYMsJ5/kHDT+GZfZmfZlWLHm+nW4hich1cevwYrfbSU9Pp2TJkqSmphIWFsbq1aupUKFCrr5e4cV1LVu2jK5duzJmzBi6d+9udjmSlZG9uu/WWbD1dzixM8fhAx4h/JregCSHD4M8fgCyg8x5jnO/OR7LHEjffk/R7Mbc/RsVEbmUvHx+u9wa4zabjZIlSwKQlpaG3W7HxfKVXKPRo0dz4sQJ7rvvPh555BFSU1PNLql48/CCGq2h83B4ah08EQ8d34JqLcHqwQ1Ze3nENoPBnj9gIWdw4R/PX/f8mrmbDnImLfOiS4iIFIQ8h5dFixbRtWtXgoODsVgsTJs27aJzxowZQ/Xq1fHx8SEqKorFixfn6RqnTp0iPDycypUr89xzz+Hv75/XMsUFTZw4kZdffhmLxcLnn39OkyZN2Lx5s9llyXn+N0HzJ6DvDHh2B9zzJacq3QzA5SYiWS0QbDnOxhUzaThsDvd+tpzY+dvZeOA0Dof+6BCRgpHn8JKSkkJ4eDijR4++5PG4uDgGDhzIyy+/zLp162jZsiUxMTHs3bvXeU5UVBRhYWEXPQ4ePAiAr68v69evZ9euXXz33XccOXLkGt+euBIPDw/efPNNZs+eTVBQEJs2baJRo0aMHz9evWuupoQvhN1F2WZ9c3X6696T+Y/lDw7s2sK7s7Zw2ydLaDJ8LoOmJPBzwgFOpGQUaLkiUrxc15gXi8XC1KlT6datm7MtOjqayMhIxo4d62yrW7cu3bp1Y8SIEXm+xmOPPUa7du34z3/+c8nj6enppKenO58nJSVRpUoVjXlxcUeOHKFXr17MmTMHgN9//53OnTubXJVcZNdi+Oq2PH3JIc8Q/siox9zM+qxw1CUNbywWaFDZl9a1AmhTO4Dwyr4a4CsiOeRlzEu+Ln96fnbJCy+8kKO9Y8eOLFu2LFevceTIEUqUKEHZsmVJSkpi0aJFPPbYY5c9f8SIEQwdOvS66pbCFxQUxMyZMxk5ciRr166lU6dOZpckl1K1OZQNxkg6hIWL/84xsGAp5Q+N+sHO+bB/NZUy99LLspdeXr+TZfFivS2U38/WY9H+Bny8rzIfz91GuRKetKzpT+taAbSupZ2xRSRv8jW8HDt2DLvdftHGfEFBQRw+fDhXr7F//3769euHYRgYhsETTzxBgwYNLnv+iy++yKBBg5zPz/e8iOuzWq288MILGIbhXN01KSmJH374gQcffPCqK75KIbDaoPM7WKb0zg4q/wgw2c+BWz+A0Nuh7Ytw9iTsXAg75sL2eXgk7ScqK4EozwTgW056+LMgqz5/pNdn8Z9hzPjzEAB1K5V1BpmoquXx8nC5uQQi4kIKZOOZf3/o/PPD6WqioqJISEjI9bW8vb3x9tbOue7s/M+GYRg8+uijTJ48mV9++YXx48dTvnx5k6sTQm+Heydimfl89jYE51jKBkPnt7OPn1eiPNTrlv0wDDi2Fbb/Advnwp6llM86xp3M506v+Tiwss2jJr+n1WPR4QZ8fuhGPl24g1JeNprfdKFXpopfyUJ/yyLi2vI1vPj7+2Oz2S7qZUlMTLyoNya/xcbGEhsbi91uL9DrSMFq1qwZP/30E9OmTWPt2rVMnjw5xyJ3YpLQ26HOrbBnGSQfgdJB2beUrLbLf43FAgG1sx/NBmRvW7BnWXaQ2TEX69G/qZ21hdoeWxjo8ROp1tIsM8KYnVGfRZsbMGdz9roxNQJKOYNM0xoV8PG8wjVFpFgokAG7UVFRjBkzxtkWGhrKHXfccU0DdvNKi9S5v/j4eLp3786OHTuw2Wy8+eabPPfcc1itupVQpJzen73K7/a52eNl0k7nOLzPI4TZ6WEssDdglaMO6Xjh7WElukYFZ5i5MaCUbi+KFBEFusJucnIy27dvB6Bhw4Z88MEHtG3bFj8/P0JCQoiLi6NXr158+umnNGvWjHHjxvH555+zadMmqlateu3vKpcUXoqGpKQk+vfvz6RJk4DsQd9ff/01gYGBJlcmBcKeBQfXOntlOBAPhsN5ONPiRTyhzMkIY4EjnB1GMGDhBt8StK6dHWSa33jxhpIi4j4KNLwsWLCAtm3bXtTep08fJkyYAGQvUjdy5EgOHTpEWFgYo0aNolWrVnm5TJ7987bR1q1bFV6KAMMwGD9+PE8++SS+vr4kJCQovBQXqSdg5wLnwF/OHMxx+JgtgHmZ9ZmfVZ+ljjCSKIWH1UJU1fLOMBNaqax6ZUTciFvvbXS91PNS9GzatIlTp07RokULZ5vD4dBtpOLCMCDxr3NBZm72uBn7hbWdHNjYbK3J7PQwFjka8KdRAwdWAsp406pmAK1rB9DyJn/Kl/Iy8U2IyNUovCi8FGnffvstn332Gd999x2VK1c2uxwpbBmpsGfphVtMx7bmOJxsLcMiexjzs+qz0B5OIuWxWCD83CJ5rbVInohLUnhReCmy0tPTqVGjBgcPHqRChQpMmDCB227L2wqwUsSc2ntu4O8fsHMRpOcc+LvLWo3ZGfVY5GjAGkdt0vHSInkiLqhYhheNeSk+tm/fzn333Ud8fDwA//3vf3n77bfx8tJtgWLPngUH1mT3ymz/Aw6ug38srJdh8WaFEcq8zPoscjRgp1EJsGiRPBEXUCzDy3nqeSke0tPTeeGFF/jwww8BaNSoEZMnT+bGG280tzBxLSnHs6dhn5+SnZxzDaoj1kDmZoax0B7OMkc9zlCS0t4eNL+xAq1rB9CqphbJEyksCi8KL8XG9OnT6du3LydPnqRcuXJs27aNgIAAs8sSV2QYcGTThYG/e5eD/cJu13Zs/ElN5mbWZ6EjnI1GNQys3BhQita1AmldO4Do6n5aJE+kgCi8KLwUK/v27aNHjx40b96ckSNHml2OuIuMFNi95MLA3+PbcxxOspRjQVY9FtobsMhRn6OUx9vDStPzi+TVDqCGvxbJE8kvCi8KL8VOVlYWhmHg6Zm9SNnu3btJTU0lNDTU5MrEbZzcfS7IzMveXDLjTI7DWy3VmJdZn4WOBsQ7apGBJ5XLl3COlWl+kz+lvQtkuziRYqFYhhcN2JXzMjMzadmyJRs2bOCTTz7RDtWSd/ZM2L/6wqaShxJyHE6z+LDMHsoCe/bA391GRTysVhpVK599i6lWAHUrldHPnUgeFMvwcp56XuTkyZN0796dOXPmAPDAAw8wduxYypQpY3Jl4rZSjsGO+dlhZsc8SEnMcfigJYi552YwLXPUI4USBJTxdvbKtKzpj29JzYYTuRKFF4WXYs/hcPDOO+/w6quvYrfbqVmzJnFxcTRs2NDs0sTdORxwZOM/Bv6uAEem83AWNtYZtZif1YCFjgZsNqpisVgJr+LrDDMNtEieyEUUXhRe5JylS5fSo0cP9u3bh5eXF++99x5PPPGEuvMl/6Qnw+7FFwb+ntiZ4/BJi++5gb/hLHbU5zjl8C3pScua2UGmVS1/AstokTwRhReFF/mHEydO8OCDDzJ9+nQaNmzIihUrtKCdFJwTOy8M/N21CDKScxzeTHUWnNu6YK1Rk0w8CK1U1rmhZFTV8njatEieFD/FMrxowK5ciWEYxMbG0qlTJ2rWrGl2OVJcZGXAvpUXbjEd/jPH4VRLCZZmhbLQ0YBFjgbsNYJyLJLXulYAlctrkTwpHopleDlPPS+SW2+++Saenp48++yz2qFaCkdy4oXVfnfMg9RjOQ7vpSLzs7IH/i531CMVHy2SJ8WGwovCi1zFxo0badCgAYZh0KlTJyZOnEhgYKDZZUlx4nBk98Sc75XZtxIcWc7DWXiw2lHr3CJ52QN/vT1s17RInt1hsGrXCRLPpBFYxocm1f00YFhcjsKLwotchWEYjB8/nieffJKzZ89SsWJFvv32W9q1a2d2aVJcpSVdGPi7/Q84tSfH4eP4ssBen4X2Bixx1OcEZXO1SN7MjYcY+stmDp1Oc7ZVKufD611D6RxWqcDflkhuKbwovEgubdq0ie7du7Np0yYsFguvvPIKr732Gh4eWilVTGQY/xj4Oxd2LYbMFOdhBxY2OaqzwNGARfYGrDNuwmLzJKpq9iJ5bWoHUKdiGWZtOsxj36zFgoMm1r8J5BSJ+LLaUQcHVsb2jFSAEZeh8KLwInmQmprKwIED+fzzzwHo1KkTv//+u6ZTi+vISs9eT2bHXNg+D45syHE4mZIstYeyyJG9tsx+I5CA0l4kp9tpZV/O654TCbaccJ5/0PBjWGZv1pdpxZLn2+kWkrgEhReFF7kGkydP5pFHHuGDDz7goYceMrsckcs7c/jCir8750Pq8RyHdxmVWGBvQIrhw+MePwPwz3ziOPdb/7HMgfTt9xTNbqxQWJWLXFaxDC+aKi354dChQ1SsWNHZ67J9+3ZCQkK0Loy4Locje+8l58DfVWDYnYcNAy7Viegw4DAVWN1tAXc0DCm8ekUuo1iGl/PU8yL55cSJEzRs2JCgoCAmT55MjRo1zC5J5OrSTsOuRZxYMh6/A/Ouevqa1hNp1PaOQihM5Mry8vmtxS1ELmPLli2cOXOG1atX07BhQ6ZMmWJ2SSJX51MO6nbFN/r+XJ0+af4q3vp1M4lJaVc/WcRFKLyIXEazZs1ISEigefPmJCUl0b17d/r378/Zs2fNLk3kqqxlKubqvCf4niNLv6X1yD94ddpG9p9MLeDKRK6fwovIFYSEhLBgwQJeeuklLBYLn332GdHR0fz1119mlyZyZVWbQ9lgDC49k8gADCxUtx7hY6/RzLYOxLJ6HJ3fncWz369n59HkS36diCvQmBeRXJozZw49e/YkMTGRHj168N1335ldksiVbZ4OU3pjABYu/Ko3sGRHmm5j4PR+jJWfYjk3Y+mEUZqvsjrxjaMDzerXZkDbm6hbSb9LpeBpwK7CixSQw4cP8/zzzzNq1Cj8/PzMLkfk6jZPh5nPQ9LBC21lb4DOb0Po7dnPM1Ih4VtY9olzZd9Uw5s4exu+sHehTp0wnmh3ExFVfAu/fik2FF4UXqSQGIbBiy++yH333UdERITZ5YhcmsMOe5ZB8hEoHZR9S8l6iQ0e7Vnw18+w5EPnDthZhpUZjqZ8ltUV/5uiGND2JqKr+2kRR8l3xTK8aJ0XMcPEiRPp06cPXl5evP/++wwYMEC/1MX9GQbsXABLP8peBO+chfYGfGrvSmblFgxoX5M2tQL08y75pliGl/PU8yKF6fjx4/zf//0f06dPB+DOO+/kiy++oHz58iZXJpJPDibAso8xNk3FYjgAWO+owWdZt7G/Ynseb1ebjqEVsWqLAblOCi8KL1KIDMPg448/5tlnnyUzM5OqVasyadIkmjVrZnZpIvnnxC5YHoux9mss9uw1YXY7gvjcfisJfjE83K4etzWohIdNk1jl2ii8KLyICdasWcN9993Hjh07sNlsjB49mv79+5tdlkj+SjkGq8bhWDkOa9pJAI4aZZmQ1ZkF5W6nZ5tw7oq8AW+PS4ypEbkCrbArYoJGjRqxdu1a7rvvPhwOB7Vr1za7JJH8V8of2r6E9b8bofM7OMpWJsCSxLOeU5iS0o+U6c9x78gf+HLpLs5m2K/+eiLXQD0vIvnMMAzWrVtHZGSks+348eNUqKCde6UIsmfCpqk4lnyINXETAJmGjemO5kzxupM2LdvQs2kIZXw8TS5UXJ1uGym8iAvZunUrjRs35umnn+a1117Dw8PD7JJE8p9hwPa52SFmz2Jn81x7Q762daNB8xj+7+bq+JbUDu1yaQovCi/iQkaMGMFLL70EQMuWLfnuu++oXLmyyVWJFKD98TiWfIjl71+cK/uuddzEl3QjOPou+rW6kcAyPiYXKa5G4UXhRVzMpEmTeOSRR0hOTqZChQpMmDCB2267zeyyRArW8R04ln6MkfAdNkcGADsclRhvdMU7sgf92tblBt8SJhcprkLhReFFXND27dvp3r07a9euBWDQoEGMGDECLy91o0sRd+YIxsrPyFr5OZ6ZSQAkGr5MsMeQXL8XD7aPoLp/KZOLFLMpvCi8iItKT0/n+eef56OPPgLgww8/5Omnnza5KpFCkn4GI34CGUtG4516GIAzRgm+s7dnX+2+9OrQlNoVy5hcpJhF4UXhRVzczz//zLhx45g2bRqenpqFIcVMVgZs/IGzCz6gxKltAGQYNqbaW7KpWh/u6dyOBpV9za1RCl2xDC/a20jcWWZmJh988AFPPfUUJUpoDIAUEw4HbJtNyvz3KHV4tbN5tj2K5ZV60bnz7UTX0BIDxUWxDC/nqedF3NFzzz3Hu+++S/369ZkyZQp16tQxuySRwrV3Jcnz36f0rlnOplWO2szzu59mMT1oVStQm0AWcVphV8TN3HLLLQQGBrJhwwaioqL46quvzC5JpHCFRFO6zxQYsJrk0PvJsnjQxLqFF069TqVv2/LR+0OYvWEvDkeR+ntbrpF6XkRcxOHDh+nZsydz584FoFevXsTGxlKmjAYwSjGUdIjkRaPxWPclPvYUAA4ZfkwvcQeV2z9O56ia2LSTdZGi20YKL+Km7HY7b7/9Nq+99hoOh4OaNWvy448/Ur9+fbNLEzFH2mlSln2OsXwspTOPAZBklGS6VwylWz9Bl6YReHnoJkJRoPCi8CJubsmSJfTo0YNTp06xdu1aatasaXZJIubKSid1zXekLxxF+bN7AEg3PPnd1gZHsyfp0uZmfDy1k7U7U3hReJEi4Pjx4/z555+0bdvW2ZaZmamp1VK8ORykbfqF03PeJShpQ3aTYWG+NZrTkQPo2LELpb21f5g70oBdkSKgQoUKOYLLvHnzqFOnDitWrDCxKhGTWa341L+DoP8uJr3Xr+wPaIXVYtDeWMFd8b34a0Qrpn4/gVMp6WZXKgVIPS8ibsAwDFq1asWSJUvw8PDgrbfeYvDgwVit+vtDJPPQRg78OpLK+2fggR2ALUYIW27qR7OuDxHgW9rkCiU3dNtI4UWKoNOnT/Poo48SFxcHQKdOnZg4cSKBgYEmVybiGuwn97H71/eotD2OkpwF4IDhz59VehJxx5NUCvA3uUK5EoUXhRcpogzD4IsvvuDJJ58kLS2NSpUq8e233+a4vSRS3BmpJ9nx20f4b/oSX+MUACeN0sQH3UPt25+hSuUQcwuUS1J4UXiRIm7jxo10796dzZs3Y7FYWLNmDZGRkWaXJeJSjIxUdvzxP0rHj6Gi/RAAZw0v1pTvQuVbn6V6zTCTK5R/UnhReJFiICUlhaeffprU1FS+/fZbLZ0ucjkOOzsWTcKy7CNqZGwFwG5YiC/ThvK3DKZmxM0mFyig8KLwIsVKVlYWHh7ZU0NPnDjB6tWr6dSpk8lVibggw2DXmpmkzn+feqkXNoLc6BOJZ6v/UrtZV9AfAabRVGmRYuR8cDEMg379+tG5c2cGDx5MRkaGyZWJuBiLheqNY6j33B/s+c9s4sveQpZhJSxtLbVn92LnW434a84EDHum2ZXKVSi8iBQRdrudkJDsgYjvv/8+N998Mzt37jS5KhHXVLVeNFGDfuRw3+Usq3A3Zw0vamRtp+7Spzn8Vhh/Tf8AR3qK2WXKZbhseElNTaVq1aoMHjzY7FJE3IKHhwcfffQRU6dOpXz58qxevZqGDRvy/fffm12aiMuqXL0OzZ8cz+nH1rGgUj9OGmWo5DhM3bVDSXq7Dn/HvYI9+bjZZcq/uGx4eeutt4iOjja7DBG3061bNxISEmjevDlJSUnce++9PPbYY5w9e9bs0kRcVsWKlWnz6AfYB25gTrXB7DcC8DWSqPPXJ2S8V5etXw0g8/hus8uUc1wyvGzbto2///6bLl26mF2KiFsKCQlhwYIFvPjii1gsFn777TfS0tLMLkvE5fmXL0+Hvq9S5tkN/F77Lf6mGiVIp9aub7B80pCdn/Ugff+fZpdZ7OU5vCxatIiuXbsSHByMxWJh2rRpF50zZswYqlevjo+PD1FRUSxevDhP1xg8eDAjRozIa2ki8g+enp4MHz6cWbNmERcXR/ny5YHsgb1FbJKhSL4rV7oEMT2eoPILa/g1YgwrLfXxwEGNQ7/h/b+W7P04hrNbF4D+LZkiz+ElJSWF8PBwRo8efcnjcXFxDBw4kJdffpl169bRsmVLYmJi2Lt3r/OcqKgowsLCLnocPHiQn3/+mVq1alGrVq1c1ZOenk5SUlKOh4hc0KFDB5o2bep8/r///Y/evXtz5swZE6sScQ+lfTy5tdsDhL+0kBlNJzHX2gK7YSHkxDJKfHcHh99vTkrCT+Cwm11qsXJd67xYLBamTp1Kt27dnG3R0dFERkYyduxYZ1vdunXp1q1brnpTXnzxRb755htsNhvJyclkZmbyzDPP8Nprr13y/CFDhjB06NCL2rXOi8jFTp48SUhICMnJydSqVYu4uDgiIiLMLkvEbWRkOZizZDmZSz6mc+ZcfCzZ06pP+FTBs+XTlGnSCzx9TK7SPRXaInX/Di8ZGRmULFmS77//njvvvNN53tNPP01CQgILFy7M0+tPmDCBjRs38t577132nPT0dNLTL2x9npSURJUqVRReRC5jyZIl9OjRg/379+Pt7c3777/P448/rhV6RfLA7jCYs2Yjx+d+wq1pM/C1ZE+rTvbwwxHdn7I3PwolfM0t0s2YtkjdsWPHsNvtBAUF5WgPCgri8OHD+XkpJ29vb8qWLZvjISKXd/PNN5OQkEDXrl1JT0/niSee4J577uHUqVNmlybiNmxWC52b1KfH858Rf9diPi/1CAeMCpTOOkHZpcNJf7cOST8/D6cPmF1qkVQgs43+/RecYRjX9Fdd3759r9jr8k+xsbGEhobSuHHjPF9HpLipUKECP//8M6NGjcLT05OffvqJqKgoUlNTzS5NxK1YrRbah9/IQ4NHsrPHEj4p9yx/Oarg7ThL2XWfYh9Vn6RJD0Hi32aXWqTka3jx9/fHZrNd1MuSmJh4UW9MfhswYACbN29m9erVVz9ZRLBYLAwcOJBly5ZRo0YNevXqRcmSJc0uS8QtWSwWWtYJ5sn/vsKZvgt5L+AtVjjqYsNO2S3fw5hoksbfBXuWm11qkZCv4cXLy4uoqCjmzJmTo33OnDk0b948Py8lIvmkUaNGrFu3jldffdXZtmvXLo4ePWpiVSLuq0mNCgwe8AQlH5nJiBtG87u9MQ7DQtm9c+HLziSPaQd//woOh9mlui2PvH5BcnIy27dvdz7ftWsXCQkJ+Pn5ERISwqBBg+jVqxeNGjWiWbNmjBs3jr1799K/f/98LVxE8s8/x4qlpaVx1113ceTIEb777jvatGljXmEibqxBZV8aPNyLLYe7MXz2fG7cNp67rIspnRgPk+8nteyNlGgzEEuD7uDhbXa5biXPs40WLFhA27ZtL2rv06cPEyZMALIXqRs5ciSHDh0iLCyMUaNG0apVq3wp+HJiY2OJjY3FbrezdetWzTYSuUZ79+6lc+fO/PXXX1itVl599VVeffVVbDab2aWJuLXdx1L4Zs5K/Dd/yf3WPyhryR5jllYiEO8WT2Bp1Bd8yplbpIkKbaq0K8rLmxeRS0tJSeGpp55i/PjxALRu3Zpvv/2WG264weTKRNzfwVNn+Wr+Bixrv6KP9TcqWU4AkOlRGluTh7A2ewzKVDS5ysKn8KLwIpIvvv32W/r3709ycjL+/v589dVX2nNMJJ8cPZPO+EVbSFr5LX35hZrW7GnVdqsnlvAeWFs8Bf41Ta6y8BTL8KLbRiIFY9u2bXTv3p1169bRrFkzlixZgtXqknu6irilU6kZfLlkJ7uW/UgvxzQaW7cCYGDBUftWbDcPhCpFfxmQYhlezlPPi0j+S09P59VXX+Xxxx+nWrVqZpcjUiQlp2fxzYo9rF70G/dlTKWDLd55zF6lObaWA6FmRyiiq2ErvCi8iBS4YcOGERoayj333GN2KSJFSlqmncmr9jJzwSLuOvsj3WxL8LJkb/xo96+L7eanof49YPM0udL8pfCi8CJSoBYvXuycQdi/f38++OADSpQoYXJVIkVLRpaDn9bu5/v5q+h45ifut82jjOUsAPYyN2BrPgAie4N3GZMrzR8KLwovIgUqMzOT1157jbfffhuABg0aEBcXR506dUyuTKToybI7+HXDIb6cm0CzE9P5P4/fCbCcBsDhXQ5rk4ch+lEoHWhypdenWIYXDdgVKXyzZ8+mV69eJCYmUrJkScaMGUOfPn3MLkukSHI4DGZvPsK4eZupdeRXHrHNoIY1ezsew+aNpeED0OwJqHCjyZVem2IZXs5Tz4tI4Tp06BA9e/Zk3rx5ADz++OPExsaaXJVI0WUYBgu3HmXsvC347vuDxzx+IcK6I/uYxYql7u3Q4mm4IdLkSvMmL5/fmu8oItelUqVKzJ49mzfeeAOr1UqLFi3MLkmkSLNYLLSpHUjcYy35v4ee4v2QMXRPf5V59ggshgM2T4PP28JXXWH7H1C0+igA9byISD7aunUrtWrVcj7fv38/N9xwA5YiOrVTxFWs33eK0fO3s/ev1TziMYPbrcvxPDdDiaD62T0x9e4EW563NCw0um2k8CJiusTERMLDw2nRogX/+9//8PX1NbskkSLv78NJxM7fwbo//+RB2+/cZ5tHKUs6AEa5KliaPwkNe4JXKZMrvVixDC8asCviWqZNm8a9995LZmYmVatWZfLkyTRt2tTsskSKhV3HUhi7YDtz126hh2U2fT1m4W9JAsAo4YelySPQ5BEoVcHkSi8oluHlPPW8iLiONWvW0L17d3bu3ImHhwfDhw/nmWee0fYCIoVk/8lUxi3aydTVO7jDmM/Dtl+pak0EwPAogSWyFzQbAOWrmVsoCi8KLyIu5PTp0zzyyCNMmTIFgM6dOzNx4kQCAgJMrkyk+EhMSuN/S3bx3YpdtM5aTn+P6dS37gbAsNiw1Lsze1xMpQam1ajwovAi4lIMw+Dzzz/n6aefJi0tjQEDBjB69GizyxIpdk6mZPDlst1MWLqTsIz19Lf9Qivbhgsn3NguO8RUb13oeygpvCi8iLikDRs28PLLL/PNN9/o36eIic6kZfL1ij18sXgXQalbedRjBrfZVmDDkX1CpYjsEBN6B1htF77QYYc9yyD5CJQOgqrNcx6/DgovCi8ibsEwDIYNG8ZDDz3EDTfcYHY5IsXO2Qw7k1btZdyinXic2ctDtt/o7rGAEmRkn1C+GjR/EiIegG1zMGY+jyXpoPPrjbLBWDq/A6G3X3ctCi8KLyJuITY2lieeeAJ/f38mTpxITEyM2SWJFEvpWXZ+jD/A2IXbST5xhD4es+nrMRtfkrNP8CqDkXEGgH/eTHIAFixY7p143QGmWK6wGxsbS2hoKI0bNza7FBHJpY4dO9KwYUOOHTtGly5deO6558jMzDS7LJFix9vDxv3RIcx/pg2vdW/JDL++NEv7mNcz+3DA8IeMM1jIGVwgO0QYhsHZX57NvqVUSNTzIiKmSk9P59lnn+WTTz4BIDo6mkmTJlG9enWTKxMpvhwOg1mbDjN6/nbKHV7Gd17Dr/o19t6/YKvR6pqvWSx7XkTEPXl7e/Pxxx/z008/4evry8qVK2nYsCG//vqr2aWJFFtWq4WY+pWY8eTNPBieu9V4d+zcUcBVXaDwIiIu4c477yQhIYGmTZuSnJxM+fLlzS5JpNizWCyU8MvdYPpEw7dgi/kHhRcRcRlVq1Zl0aJF/PHHHzRv3tzZnpqaamJVIsWbrVoLDhp+OC4zyMRhwEGjArZqhbejvMKLiLgUT09P2rRp43y+ceNGqlatysSJE80rSqQYa3JjAB97PgRwUYA5//xjz340ubHwVs1WeBERlzZ69GiOHTtGnz596NOnD8nJyWaXJFKs2KwW2nT7Px7PHMhh/HIcO0wFHs8cSJtu/4fNWngr8mq2kYi4NLvdzvDhwxkyZAgOh4PatWsTFxdHeHi42aWJFCszNx7ijekbqJK8nkBOkYgv+0qH8+rt9ekcVum6X1+L1Cm8iBQ5ixYt4v777+fAgQN4e3szatQo+vfvj6WQ918RKc7sDoNVu06QeCaNwDI+NKnul289LsUyvMTGxhIbG4vdbmfr1q0KLyJF0LFjx+jbt69zGvWkSZO47777TK5KRPJDsQwv56nnRaRoMwyDUaNGMXPmTH7//XdstvzZFE5EzKVF6kSkyLJYLAwaNIiZM2c6g0taWhrjx4/H4XCYXJ2IFAaFFxFxS1brhV9fzz77LP369eO2227j6NGjJlYlIoVB4UVE3F79+vXx8fHh999/JyIiggULFphdkogUIIUXEXF7jzzyCKtWraJOnTocPHiQ9u3bM2TIEOz2wtvlVkQKj8KLiBQJ9evXZ82aNTz44IM4HA6GDh1K+/btOXjwoNmliUg+U3gRkSKjVKlSjB8/nq+//prSpUuzfv16MjIyzC5LRPKZh9kFiIjkt549e9KkSRP27NlDtWrVnO0OhyPHQF8RcU/6VywiRVKtWrXo0KGD8/nvv/9OixYt2LVrl4lViUh+UHgRkSLPbrczcOBAVqxYQcOGDfnhhx/MLklEroPCi4gUeTabjdmzZ9OsWTNOnz7Nf/7zHx5//HHS0tLMLk1ErkGRCS+xsbGEhobSuHFjs0sRERdUtWpVFi5cyAsvvADA2LFjiY6O5u+//za5MhHJK+1tJCLFzqxZs+jVqxdHjx6lVKlSbNq0iapVq5pdlkixlpfPb802EpFip1OnTqxfv56ePXtSrVo1BRcRN6PwIiLFUqVKlZg9ezaZmZnOtqNHj3Lw4EHCw8NNrExErqbIjHkREckrm82Gj48PkL0GTO/evYmOjmbs2LEUsTvqIkWKwouICJCamorNZiM9PZ3HH3+c//znP5w6dcrsskTkEhReRESA0qVL88svv/D+++/j6enJjz/+SMOGDVm1apXZpYnIvyi8iIicY7FYGDRoEEuWLKF69ers3r2bFi1a8P777+NwOMwuT0TOUXgREfmXJk2asG7dOv7zn/+QlZXF2LFjSU1NNbssETlHs41ERC6hXLlyxMXF0b59exo1akTp0qXNLklEzlF4ERG5DIvFwqOPPpqjbcyYMRw9epRXXnkFm81mUmUixZvCi4hILu3Zs4f//ve/ZGRksGDBAr799luCg4PNLkuk2NGYFxGRXKpatSpffPEFpUqVYsGCBYSHhzNz5kyzyxIpdhReRETyoGfPnqxdu5aIiAiOHTtGTEwMzz33XI6VekWkYCm8iIjkUa1atVi+fDkDBgwA4N1336Vdu3bY7XaTKxMpHlwyvHh4eBAREUFERAQPPfSQ2eWIiFzEx8eH0aNH8+OPP+Lr68ttt92mAbwihcRiuOAGHv7+/hw7duyavjYvW2qLiOSHgwcPUrFiRazW7L8H9+7dS2BgoHPfJBG5urx8frtkz4uIiDsJDg52BpfU1FRiYmJo2rQpW7ZsMbkykaIpz+Fl0aJFdO3aleDgYCwWC9OmTbvonDFjxlC9enV8fHyIiopi8eLFebpGUlISUVFR3HzzzSxcuDCvJYqImGbbtm0cPXqU9evXExUVxcSJE80uSaTIyXN4SUlJITw8nNGjR1/yeFxcHAMHDuTll19m3bp1tGzZkpiYGPbu3es8JyoqirCwsIseBw8eBGD37t3Ex8fz6aef0rt3b5KSki5bT3p6OklJSTkeIiJmCQ8PZ/369bRr146UlBT69OlDnz59SE5ONrs0kSLjusa8WCwWpk6dSrdu3Zxt0dHRREZGMnbsWGdb3bp16datGyNGjMjzNWJiYnjjjTdo1KjRJY8PGTKEoUOHXtSuMS8iYia73c7w4cMZMmQIDoeD2rVrExcXR3h4uNmlibgk08a8ZGRkEB8fT8eOHXO0d+zYkWXLluXqNU6ePEl6ejoA+/fvZ/PmzdSoUeOy57/44oucPn3a+di3b9+1vwERkXxis9l49dVXmT9/PsHBwWzZsoXnn3/e7LJEioR83R7g2LFj2O12goKCcrQHBQVx+PDhXL3GX3/9xaOPPorVasVisfDRRx/h5+d32fO9vb3x9va+rrpFRApKq1atWL9+Pf/97395++23zS5HpEgokL2NLBZLjueGYVzUdjnNmzdnw4YNeb5mbGwssbGxWiRKRFyOv78/X3/9dY624cOHc8stt9CkSROTqhJxX/l628jf3x+bzXZRL0tiYuJFvTH5bcCAAWzevJnVq1cX6HVERK7XjBkzePnll2nRogXvv/8+DofD7JJE3Eq+hhcvLy+ioqKYM2dOjvY5c+bQvHnz/LyUiIjbatmyJffeey9ZWVkMHjyYrl27XvPCnCLFUZ7DS3JyMgkJCSQkJACwa9cuEhISnFOhBw0axP/+9z/Gjx/PX3/9xX//+1/27t1L//7987VwERF3Va5cOSZPnsxnn32Gj48Pv/32G+Hh4VrXSiSX8jxVesGCBbRt2/ai9j59+jBhwgQge5G6kSNHcujQIcLCwhg1ahStWrXKl4Iv559jXrZu3aqp0iLiFjZs2MC9997L33//jdVq5Z133mHw4MFmlyVS6PIyVdol9za6HtrbSETcTUpKCk8++SRffvklP/zwA3fffbfZJYkUOoUXhRcRcUOrVq3KMfvo5MmTlC9f3sSKRAqPNmYUEXFD/wwuBw8epE6dOjz33HNkZmaaWJWI6yky4SU2NpbQ0FAaN25sdikiItdt2rRpJCYm8u6779KqVSt2795tdkkiLkO3jUREXNRPP/3E//3f/3H69Gl8fX354osvuOuuu8wuS6RA6LaRiEgRcNddd5GQkEDTpk05deoUd999NwMGDCAtLc3s0kRMpfAiIuLCqlWrxqJFi3juueeA7KUotEeSFHdFJrxozIuIFFWenp688847/P7777Ru3Zpnn33W7JJETKUxLyIibuSfG906HA4++ugjHn74YUqXLm1yZSLXR2NeRESKqPPBBeC9995j0KBBNGrUiD///NPEqkQKl8KLiIibio6OJjg4mC1bttCkSRM+/fRTilhnusglKbyIiLip1q1bs379em699VbS09N57LHHuPfeezl16pTZpYkUKIUXERE35u/vz/Tp03n//ffx8PDghx9+oGHDhqxZs8bs0kQKTJEJL5ptJCLFldVqZdCgQSxdupTq1atz4MCBHGNjRIoazTYSESlCTp8+zdKlS+nSpYuzLSsrCw8PDxOrErk6zTYSESmmypUrlyO4rF27ltq1a7Nw4UITqxLJXwovIiJF2JAhQ9i5cyft2rVj2LBh2O12s0sSuW4KLyIiRdikSZPo27cvDoeD119/nQ4dOnDw4EGzyxK5LgovIiJFWKlSpfjyyy+ZOHEipUqVYv78+URERDBz5kyzSxO5ZkUmvGi2kYjI5fXq1Yv4+HjCw8M5evQoMTExzJ8/3+yyRK6JZhuJiBQjaWlpDB48mO3bt/Pbb79htRaZv2HFzeXl81tz50REihEfHx9Gjx5NZmamM7ikpqaycOFCYmJiTK5OJHcUuUVEiiFPT0/n/3/66afp0qULTzzxBGlpaSZWJZI7Ci8iIsWYw+HAz88PyB472KxZM7Zu3WpyVSJXpvAiIlKMWa1W3nnnHX777Tf8/f1JSEggMjKSb775xuzSRC5L4UVERIiJiWH9+vW0adOGlJQUevXqxYMPPkhKSorZpYlcROFFREQACA4O5o8//mDo0KFYrVZ++eUXTp06ZXZZIhfRbCMREXGy2Wy89tprtG7dmvT0dG644QazSxK5SJHpedEidSIi+ad169Z07NjR+Xzq1Kl0796d06dPm1iVSDYtUiciIld09uxZqlWrRmJiItWrV2fy5Mk0adLE7LKkiMnL53eR6XkREZGCUaJECaZPn061atXYtWsXLVq04P3338fhcJhdmhRTCi8iInJV0dHRrFu3jnvuuYesrCwGDx7M7bffzrFjx8wuTYohhRcREckVX19fpkyZwtixY/H29ubXX38lIiKCEydOmF2aFDMKLyIikmsWi4X+/fuzcuVKateuzR133OFcoVeksGiqtIiI5Fl4eDhr1qzBw+PCx8ihQ4cwDIPg4GATK5PiQD0vIiJyTUqXLo2Pjw8Adrud+++/n4iICGbOnGlyZVLUKbyIiMh1O3bsGCdPnuTo0aPExMTw/PPPk5mZaXZZUkQpvIiIyHULCgpixYoVPP744wCMHDmSVq1asXv3bnMLkyJJ4UVERPKFj48PsbGx/PDDD5QrV44VK1bQsGFDfvrpJ7NLkyJG4UVERPLV3XffTUJCAtHR0Zw6dYpXX31Vt5AkXxWZ8KK9jUREXEe1atVYvHgxL7zwApMnT8bT09PskqQI0d5GIiJSaD755BPKly9Pz549zS5FXExePr+1zouIiBSK9evXM2jQILKyspg3bx6ffPIJpUqVMrsscUNF5raRiIi4trCwMF599VWsVitffvkljRs3ZsOGDWaXJW5I4UVERAqFzWbjtddeY968eQQHB/PXX3/RpEkTPvvsM4rYCAYpYAovIiJSqFq3bk1CQgJdunQhLS2N/v3707t3bwUYyTWFFxERKXQBAQH88ssvvPfee3h4eNCoUSMsFovZZYmb0GwjEREx1V9//UWdOnWc4eXw4cMEBQUpzBQzefn8Vs+LiIiYqm7dus6gcubMGVq2bEnXrl05duyYyZWJq1J4ERERl7Fy5Ur27dvHr7/+SkREBIsXLza7JHFBCi8iIuIybrnlFlauXEmtWrU4cOAAbdq04Y033sBut5tdmrgQhRcREXEp4eHhxMfH07t3bxwOB6+99hodO3bk0KFDZpcmLkLhRUREXE7p0qX56quv+OqrryhVqhTz5s3jmWeeMbsscREKLyIi4rJ69+5NfHw8nTp1YtSoUWaXIy5C4UVERFxa7dq1mTlzJkFBQc629957jz179phYlZjJJcPLrl27aNu2LaGhodSvX5+UlBSzSxIRERcxefJknn32WSIiIpg6darZ5YgJXDK89O3bl2HDhrF582YWLlyIt7e32SWJiIiLiI6OJjo6mlOnTnHXXXfx5JNPkpaWZnZZUohcLrxs2rQJT09PWrZsCYCfnx8eHh4mVyUiIq6ievXqLF68mGeffRaA0aNH06xZM7Zu3WpyZVJY8hxeFi1aRNeuXQkODsZisTBt2rSLzhkzZgzVq1fHx8eHqKioPC0ytG3bNkqXLs3tt99OZGQkw4cPz2uJIiJSxHl6ejJy5Eh+++03/P39SUhIICoqiu+//97s0qQQ5LlLIyUlhfDwcB588EHuvvvui47HxcUxcOBAxowZQ4sWLfjss8+IiYlh8+bNhISEABAVFUV6evpFXzt79mwyMzNZvHgxCQkJBAYG0rlzZxo3bkyHDh0uWU96enqO10pKSsrrWxIRETcVExNDQkICPXv2ZMGCBZQqVcrskqQQXNfGjBaLhalTp9KtWzdnW3R0NJGRkYwdO9bZVrduXbp168aIESOu+prLly9n6NChzJw5E4B3330XwNk9+G9Dhgxh6NChF7VrY0YRkeLD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REhICCNHjuTOO+/kzJkzLF68mN69ewPQr18/kpKS+PLLLwHw8/Nz/gWQG1rnRUQkfyUmJtK7d29mzZoFQPfu3Rk3btxV1zwpKvKyzkuRGfMyYMAABgwY4HzzRUm5cuXw8vKiZMmSVKxYEYDXXnuNyMhIhg8f7jxv/PjxVKlSha1bt5KcnExWVhZ33XWXczGk+vXrO88tUaIE6enpztcTERFzBQYG8ttvv/Hee+/x8ssvExcXx+rVq4mLi6NRo0Zml+dSikx4uWaeJbN7QHJjzzL49p6rn/fAD1C1ee6ufY3i4+OZP38+pUuXvujYjh076NixI+3bt6d+/fp06tSJjh07cs8991C+fPlrvqaIiBQsq9XKc889R6tWrbjvvvvYuXMnAwYMYMWKFVgsFrPLcxkKLxZLrm7dAHBju+xZRUmHuPS4F0v28RvbgdWWn1VexOFw0LVrV955552LjlWqVAmbzcacOXNYtmwZs2fP5pNPPuHll19m5cqVVK9evUBrExGR69O0aVPWrVvHU089xSuvvKLg8i8asJsXVlv2dGgA/v2DdO5557cLJLh4eXlht19YSyYyMpJNmzZRrVo1brrpphyP89PsLBYLLVq0YOjQoaxbtw4vLy+mTp16ydcTERHXUr58eb7++mtq167tbPvkk09YsmSJiVW5BoWXvAq9He6dCGUr5WwvG5zdXkDrvFSrVo2VK1eye/dujh07xoABAzhx4gQ9evRg1apV7Ny5k9mzZ/N///d/2O12Vq5cyfDhw1mzZg179+7lp59+4ujRo9StW9f5en/++Sdbtmzh2LFj2ulURMTFLVmyhIEDB9KmTRveeuutYv0HqMLLtQi9HQZuhD4z4O4vsv934IYCCy4AgwcPxmazERoaSkBAABkZGSxduhS73U6nTp0ICwvj6aefply5clitVsqWLcuiRYvo0qULtWrV4pVXXuH9998nJiYGgIcffpjatWvTqFEjAgICWLp0aYHVLiIi1y88PJz7778fu93OK6+8QqdOnTh8+LDZZZmiyEyVPu9KU600vTf/6HspIlL4DMPgq6++YsCAAaSmphIYGMg333xDhw4dzC7tuuVlqrR6XkRERNyExWKhb9++rFmzhvr165OYmEinTp2ca4AVFwovIiIibqZu3bqsXLmS/v37YxgGlSpVuvoXFSEKLyIiIm6oRIkSjB07lqVLl/LQQw8520+fPm1iVYVD4UVERMSNNW/e3LkOzMmTJwkPD+epp54iPT3d5MoKTpEJL7GxsYSGhtK4cWOzSxERETHFjBkz2LNnD5988gnNmzdn27ZtZpdUIIpMeBkwYACbN29m9erVZpciIiJiil69ejFjxgwqVKjA2rVriYyM5LvvvjO7rHxXZMKLiIiIwK233kpCQgKtWrUiOTmZBx54gH79+pGSkmJ2aflG4UVERKSIqVy5MnPnzuW1117DYrEwfvx4Xn75ZbPLyjcKLyIiIkWQh4cHQ4cOZe7cuURHR/Paa6+ZXVK+UXgREREpwtq2bcvy5cvx8/MDslfpHTt2LElJSSZXdu0UXoqx1NRUqlatyuDBg80uRURECtD5qdQAX375JY8//jiRkZHEx8ebWNW1U3gpxt566y2io6PNLkNERApRaGgoVatWZceOHTRr1oyPPvoId9vmUOGlmNq2bRt///03Xbp0MbsUEREpRE2bNmXdunXcddddZGZmMnDgQLp168bx48fNLi3XFF7cTKtWrbBYLEyaNClH+5gxYwgMDMz16wwePJgRI0bkd3kiIuIGypcvzw8//EBsbCxeXl5Mnz6diIgIli1bZnZpuaLw4kYMwyAhIYFKlSrx448/5jh2fjGi86KioggLC7vocfDgQX7++Wdq1apFrVq1CvstiIiIi7BYLDz++OOsXLmSWrVqceDAAdLS0swuK1c8zC5Acm/btm2cOXOGt99+m2effZbU1FRKliwJQHx8fI5bQFcahLVixQomT57M999/T3JyMpmZmZQtW7ZITaMTEZHciYiIYM2aNfzxxx+0a9fO2W6327HZbCZWdnnqeTknJSXlso9/J9ErnXv27NlcnXst4uPj8fHx4aGHHqJs2bL8/vvvAKSnp7Np06YcPS9XMmLECPbt28fu3bt57733ePjhhxVcRESKsTJlynDnnXc6n2/bto06deowZ84cE6u6PIWXc0qXLn3Zx913353j3MDAwMueGxMTk+PcatWqXfK8a7F27VoaNGiAl5cXd955Jz/88AMAf/75J5mZmURFRV3bmxcREfmHYcOGsX37djp16sTLL79MVlaW2SXloNtGbiQ+Pt7Zu3LXXXdx1113kZ6eTnx8PH5+flSrVi3Pr9m3b9/8LVJERNzeuHHjKFWqFJ999hnDhw9n4cKFfPfdd4SEhJhdGuCC4WXLli107949x/NJkybRrVu3Ar1ucnLyZY/9+55fYmLiZc+1WnN2Zu3evfu66vqndevWcf/99wPQpk0bvLy8mDVrFmvXrqVhw4b5dh0RESneSpQowaeffkq7du14+OGHWbp0KREREUyYMIHbb7/d7PJcL7zUrl2bhIQEIDtQVKtWjQ4dOhT4dUuVKmX6uVeyc+dOTp065ex58fDwoGvXrvz4449s3LiRW265JV+uIyIict69995Lo0aN6N69O2vWrOGOO+5g2rRp3HHHHabW5dJjXqZPn0779u3zLQC4s/j4eLy8vAgLC3O23X333UyfPp2NGzfmerCuiIhIXtSoUYOlS5cyaNAgoqOjLxrbaYY8h5dFixbRtWtXgoODsVgsTJs27aJzxowZQ/Xq1fHx8SEqKorFixdfU3FTpkzJcQupOFu7di1hYWF4eXk52zp06IDdbicjI0PhRURECoyXlxfvv/8+CxcuzPE5ZJY8h5eUlBTCw8MZPXr0JY/HxcUxcOBAXn75ZdatW0fLli2JiYlh7969znOutIDaeUlJSSxdulTL158zYsSIi9Zu8fb2JikpCcMwqFmzpkmViYhIceHt7W12CcA1jHmJiYm5YpfRBx98QL9+/XjooYcA+PDDD5k1axZjx451Lkefm10sf/75Zzp16oSPj88Vz0tPTyc9Pd353J23+BYREZGry9cxLxkZGcTHx9OxY8cc7R07dszzfgm5vWU0YsQIypUr53xUqVIlT9cRERER95Kv4eXYsWPY7XaCgoJytAcFBXH48OFcv87p06dZtWoVnTp1uuq5L774IqdPn3Y+9u3bl+e6RURExH0UyFRpi8WS47lhGBe1XUm5cuU4cuRIrs719vZ2mXtwIiIiUvDytefF398fm812US9LYmLiRb0x+S02NpbQ0FAaN25coNcRERERc+VrePHy8iIqKuqijZzmzJlD8+bN8/NSFxkwYACbN29m9erVVz3XMIwCraU40PdQRETMkufbRsnJyWzfvt35fNeuXSQkJODn50dISAiDBg2iV69eNGrUiGbNmjFu3Dj27t1L//7987Xwa+Hp6QlAamoqJUqUMLka95aamgpc+J6KiIgUljyHlzVr1tC2bVvn80GDBgHQp08fJkyYQPfu3Tl+/DjDhg3j0KFDhIWF8dtvv1G1atX8q/oSYmNjiY2NxW63X/Ycm82Gr6+vc2+ikiVL5mksjmT3uKSmppKYmIivr+9F+z6JiIgUNItRxPr/k5KSKFeuHKdPn6Zs2bIXHTcMg8OHD3Pq1KnCL64I8fX1pWLFigp/IiKSL672+f1PLrcxY0GzWCxUqlSJwMBAMjMzzS7HLXl6eqrHRURETFPswst5NptNH8AiIiJuyKV3lc4LTZUWEREpHordmBcRERFxPXn5/C4yPS8iIiJSPBS5MS/nO5K0u7SIiIj7OP+5nZsbQkUuvJw5cwZAu0uLiIi4oTNnzlCuXLkrnlPkxrw4HA4OHjxImTJlLrsGSePGjXO1jYCrcaW6zaqloK9bUK+fn697Pa+VlJRElSpV2Ldvn8aEuSlX+j1gFnf9HrhS3a74O9wwDM6cOUNwcDBW65VHtRS5nher1UrlypWveI7NZnPLX9yuVLdZtRT0dQvq9fPzdfPjtcqWLesyP0uSN670e8As7vo9cKW6XfV3+NV6XM4rlgN2BwwYYHYJ18SV6jarloK+bkG9fn6+riv9HEjh039/9/0euFLd7v47vMjdNhKRy9NSAiJSFBTLnheR4srb25vXX38db29vs0sREblm6nkRERERt6KeFxEREXErCi8iIiLiVhReRERExK0ovIiIiIhbUXgRERERt6LwIiIA7Nu3jzZt2hAaGkqDBg34/vvvzS5JROSSNFVaRAA4dOgQR44cISIigsTERCIjI9myZQulSpUyuzQRkRyK3N5GInJtKlWqRKVKlQAIDAzEz8+PEydOKLyIiMvRbSORImLRokV07dqV4OBgLBYL06ZNu+icMWPGUL16dXx8fIiKimLx4sWXfK01a9bgcDioUqVKAVctIpJ3Ci8iRURKSgrh4eGMHj36ksfj4uIYOHAgL7/8MuvWraNly5bExMSwd+/eHOcdP36c3r17M27cuMIoW0QkzzTmRaQIslgsTJ06lW7dujnboqOjiYyMZOzYsc62unXr0q1bN0aMGAFAeno6HTp04OGHH6ZXr16FXbaISK6o50WkGMjIyCA+Pp6OHTvmaO/YsSPLli0DwDAM+vbtS7t27RRcRMSlKbyIFAPHjh3DbrcTFBSUoz0oKIjDhw8DsHTpUuLi4pg2bRoRERFERESwYcMGM8oVEbkizTYSKUYsFkuO54ZhONtuvvlmHA6HGWWJiOSJel5EigF/f39sNpuzl+W8xMTEi3pjRERcncKLSDHg5eVFVFQUc+bMydE+Z84cmjdvblJVIiLXRreNRIqI5ORktm/f7ny+a9cuEhIS8PPzIyQkhEGDBtGrVy8aNWpEs2bNGDduHHv37qV///4mVi0ikneaKi1SRCxYsIC2bdte1N6nTx8mTJgAZC9SN3LkSA4dOkRYWBijRo2iVatWhVypiMj1UXgRERERt6IxLyIiIuJWFF5ERETErSi8iIiIiFtReBERERG3ovAiIiIibkXhRURERNyKwouIiIi4FYUXERERcSsKLyIiIuJWFF5ERETErSi8iIiIiFtReBERERG38v9r8i4w1AicoQAAAABJRU5ErkJggg==",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"\n",
"n_params = np.array(grids) * (4*2+2*1+1*1)\n",
"plt.plot(n_params, train_rmse, marker=\"o\")\n",
"plt.plot(n_params, test_rmse, marker=\"o\")\n",
"plt.plot(n_params, 10000*n_params**(-4.), color=\"black\", ls=\"--\")\n",
"plt.legend(['train', 'test', r'$N^{-4}$'], loc=\"lower left\")\n",
"plt.xscale('log')\n",
"plt.yscale('log')\n",
"print(train_rmse)\n",
"print(test_rmse)"
]
},
{
"cell_type": "markdown",
"id": "f53644fe",
"metadata": {},
"source": [
"### Two-layer KAN\n",
"\n",
"Now we show that a 2 two-layer KAN performs much worse for this task"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "ae7b654b",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"checkpoint directory created: ./model\n",
"saving model version 0.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"| train_loss: 5.98e-02 | test_loss: 6.11e-02 | reg: 1.25e+01 | : 100%|█| 20/20 [00:08<00:00, 2.35it\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"saving model version 0.1\n"
]
},
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 500x400 with 56 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from kan import KAN, create_dataset\n",
"import torch\n",
"\n",
"# create a KAN: 2D inputs, 1D output, and 5 hidden neurons. cubic spline (k=3), 5 grid intervals (grid=5).\n",
"model = KAN(width=[4,9,1], grid=3, k=3, seed=0)\n",
"f = lambda x: torch.exp((torch.sin(torch.pi*(x[:,[0]]**2+x[:,[1]]**2))+torch.sin(torch.pi*(x[:,[2]]**2+x[:,[3]]**2)))/2)\n",
"dataset = create_dataset(f, n_var=4, train_num=3000)\n",
"\n",
"# train the model\n",
"model.fit(dataset, opt=\"LBFGS\", steps=20, lamb=0.002, lamb_entropy=2.);\n",
"model.plot(beta=10)"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "869828f2",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"checkpoint directory created: ./model\n",
"saving model version 0.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"| train_loss: 1.98e-02 | test_loss: 2.21e-02 | reg: 1.70e+01 | : 100%|█| 50/50 [00:15<00:00, 3.23it\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"saving model version 0.1\n",
"checkpoint directory created: ./model\n",
"saving model version 0.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"| train_loss: 1.15e-02 | test_loss: 1.40e-02 | reg: 1.71e+01 | : 100%|█| 50/50 [00:13<00:00, 3.75it\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"saving model version 0.1\n",
"checkpoint directory created: ./model\n",
"saving model version 0.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"| train_loss: 6.69e-03 | test_loss: 9.05e-03 | reg: 1.72e+01 | : 100%|█| 50/50 [00:13<00:00, 3.69it\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"saving model version 0.1\n",
"checkpoint directory created: ./model\n",
"saving model version 0.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"| train_loss: 4.38e-03 | test_loss: 8.05e-03 | reg: 1.73e+01 | : 100%|█| 50/50 [00:15<00:00, 3.17it\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"saving model version 0.1\n",
"checkpoint directory created: ./model\n",
"saving model version 0.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"| train_loss: 2.02e-03 | test_loss: 9.89e-03 | reg: 1.73e+01 | : 100%|█| 50/50 [00:17<00:00, 2.88it"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"saving model version 0.1\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n"
]
}
],
"source": [
"grids = [3,5,10,20,50]\n",
"\n",
"train_rmse = []\n",
"test_rmse = []\n",
"\n",
"for i in range(len(grids)):\n",
" #model = KAN(width=[4,9,1], grid=grids[i], k=3, seed=0).initialize_from_another_model(model, dataset['train_input'])\n",
" model = model.refine(grid=grids[i])\n",
" results = model.fit(dataset, opt=\"LBFGS\", steps=50, stop_grid_update_step=30);\n",
" train_rmse.append(results['train_loss'][-1].item())\n",
" test_rmse.append(results['test_loss'][-1].item())"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "4f0a99fd",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[0.01983197219669819, 0.01147659495472908, 0.006687900051474571, 0.004380852449685335, 0.002016218611970544]\n",
"[0.022097894921898842, 0.013952379114925861, 0.009049860760569572, 0.008054238744080067, 0.00989140197634697]\n"
]
},
{
"data": {
"image/png": "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4sgLERHVilQqhbm5OQAgNzcXMpkM/LmY6hLDCxGRnjtx4gSGDBkCFxcXSCQS7N69u9Q9a9euhYeHB0xNTREQEICTJ0+qPJ6amgo/Pz+4ublh1qxZsLe3r6fqSR8xvBAR6bmsrCz4+flhzZo1ZT7+yy+/YPr06Zg7dy4iIiLQtWtXDBw4EPfv31feY2Njg6ioKNy5cwfbt29HQkJCfZVPeohrXoiISEkikWDXrl0YNmyY8lqHDh3g7++PdevWKa95enpi2LBhWLRoUannmDx5Mnr16oXRo0fXR8mkhzjyQkRE5crPz0d4eDj69euncr1fv344ffo0ACAhIQHp6ekAFCdPnzhxAq1atar3Wkl/GIpdABERaa7k5GTIZDI4OjqqXHd0dMSjR48AAHFxcXjttdcgCAIEQcC0adPg6+srRrmkJxheiIioUhKJROVzQRCU1wICAhAZGSlCVaSvOG1ERETlsre3h1QqVY6yFEtMTCw1GkNUXxheiIioXMbGxggICMChQ4dUrh86dAhBQUEiVUX6jtNGRER6LjMzEzdv3lR+fufOHURGRsLW1haNGzfGjBkzEBISgnbt2qFTp05Yv3497t+/j7feekvEqkmfcas0EZGeO3bsGHr27Fnq+vjx47F582YAiiZ1ixcvRnx8PLy9vbF8+XJ069atnislUmB4ISIiIq3CNS9ERESkVRheiIiISKswvBAREZFWYXghIiIircLwQkRERFqF4YWIiIi0CsMLERERaRWGFyIiItIqDC9ERESkVRheiIiISKswvBAREZFWYXghIiIirfL/+k0afJi6DFgAAAAASUVORK5CYII=",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"\n",
"n_params = np.array(grids) * (4*9+9*1)\n",
"plt.plot(n_params, train_rmse, marker=\"o\")\n",
"plt.plot(n_params, test_rmse, marker=\"o\")\n",
"plt.plot(n_params, 300*n_params**(-2.), color=\"black\", ls=\"--\")\n",
"plt.legend(['train', 'test', r'$N^{-4}$'], loc=\"lower left\")\n",
"plt.xscale('log')\n",
"plt.yscale('log')\n",
"print(train_rmse)\n",
"print(test_rmse)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "5776b6e1",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"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.16"
}
},
"nbformat": 4,
"nbformat_minor": 5
}