Skip to content

Instantly share code, notes, and snippets.

@beckermr
Created February 28, 2023 22:49
Show Gist options
  • Save beckermr/3ee7f7ca8924d9b65d0f22473e45aa61 to your computer and use it in GitHub Desktop.
Save beckermr/3ee7f7ca8924d9b65d0f22473e45aa61 to your computer and use it in GitHub Desktop.
jax adaptive moments
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "import jax\nimport jax.numpy as jnp\n\nimport proplot as pplt\nimport numpy as np\nimport galsim\n\n%matplotlib inline",
"execution_count": 44,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "obj = galsim.Exponential(half_light_radius=0.5/0.2)\nim = obj.drawImage(nx=23, ny=23, scale=1).array\n\nfig, axs = pplt.subplots()\naxs.imshow(im, origin=\"lower\", cmap=\"rocket\")",
"execution_count": 20,
"outputs": [
{
"output_type": "execute_result",
"execution_count": 20,
"data": {
"text/plain": "<matplotlib.image.AxesImage at 0x112d61240>"
},
"metadata": {}
},
{
"output_type": "display_data",
"data": {
"text/plain": "Figure(nrows=1, ncols=1, refwidth=2.5)",
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAjkAAAI1CAYAAAA0KesWAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/MnkTPAAAACXBIWXMAAB7CAAAewgFu0HU+AAAyt0lEQVR4nO3df3BU9b3/8dfuJtkQEGkiJw4/bhxQJLbcKZ3gaIFYnVvukOKP1UpEtK1A5lqto7V1oNWx9l5tWnU6UC/VYf063lpGOsUfI4g34uAIF5Gae6FDES6SpCK1N+viL0LChuzu9w/c0C35cUL27Gbf+3zMMI7nfPaTN/vZs3nxObufj6+joyMpAAAAY/y5LgAAAMALhBwAAGASIQcAAJhEyAEAACYRcgAAgEmEHAAAYBIhBwAAmETIAQAAJhFyAACASYQcAABgUlGuC/DalClT1NnZqUmTJuW6FAAAcIYOHz6ssrIytba2un6M+ZDT2dmpjo4O7d9/0EXr1DZePi9LQkYxZvmF8co/jFn+sTpmPUN+hPmQM2nSJO3ff1D+ovGDtk0m45Ikny/gdVnIEMYsvzBe+Ycxyz9WxyzR8+GQ78rwmRwAAGASIQcAAJhEyAEAACYRcgAAgEmEHAAAYBIhBwAAmETIAQAAJhFyAACASaYWA4xEIopGo2nHYrGYTq3+CAAACoWpkBMOh9XY2NjHGSasAAAoNL6Ojg4z0xx9zeTU19erre2Q/EXOoI+3uhS2ZYxZfmG88g9jln+sjlmi50NNn36+mpubXT/G1EyO4zhynPQwEwwGZW+TMgAAMBju4wAAAJMIOQAAwCRCDgAAMImQAwAATCLkAAAAkwg5AADAJEIOAAAwiZADAABMIuQAAACTCDkAAMAkQg4AADCJkAMAAEwi5AAAAJMIOQAAwCRCDgAAMImQAwAATCLkAAAAk4pyXUAmRSIRRaPRtGOxWExSMjcFAQCAnDEVcsLhsBobG/s4w4QVAACFxtfR0WFmmqOvmZz6+nq1tR2Sv8gZ9PHJZFyS5PMFPKkPmceY5RfGK/8wZvnH6pglej7U9Onnq7m52fVjTM3kOI4jx0kPM8FgUJIvNwUBAICc4T4OAAAwiZADAABMIuQAAACTCDkAAMAkQg4AADCJkAMAAEwi5AAAAJMIOQAAwCRCDgAAMImQAwAATMpZyOnu7tajjz6qWbNmafz48TrvvPN0/fXX680338xVSQAAwJCMhJz29nbdd999qqmp6d0/6uKLL9a//du/6ZNPPjmtfVdXl+bPn68HHnhA+/btU1dXl6LRqF555RXNnz9fv/3tbzNRFgAAKGDDDjnvvPOOvvrVr2rlypXav3+/Ojs71dnZqXfeeUe/+MUvNHv2bB08eDDtMffff7927typcePG6ZlnnlF7e7v27t2rG2+8UfF4XHfeeedpjwEAABiKYYWcZDKpW265Re3t7Zo6daqef/55RSIRtbS0KBwOy3Ecvffee1q4cKFOnDgh6eSsz1NPPSVJCofDCoVCGj16tKqqqrRmzRrV1tYqFotp5cqVw/7LAQCAwjWskLNlyxbt3btXxcXFeuGFFzRv3jyVlZWpsrJSixYt0muvvaaysjIdOHBAL774oiRp06ZNisViqq6u1vz580/r8+6775YkbdiwQclkcjjlAQCAAjaskPP6669Lkr72ta9pypQpp52fMmWKQqGQJGn79u2SpG3btkmS5s2b12eftbW1CgaDOnLkiPbu3Tuc8gAAQAEbVshpaWmRJFVXV/fbxnEcSdKxY8ckSe+++64kacaMGX22Lykp0bRp09LaAgAADFXRcB783e9+V9dee60uuuiiftvs3r1bklRVVSVJev/99yVJEyZM6PcxEydO1J49e3rbAgAADNWwQk5tbe2A51977bXeW1oLFiyQdGpG56yzzur3caNHj5YkdXR09NumpqbGVY2tra2Skkom44O2TSYTrvrEyMGY5RfGK/8wZvnH7pgN/XO6ni0GuHbtWi1evFiSdN111+nLX/6yJCkWi0mSiouL+31sSUmJpJPr6QAAAJyJYc3k9GXPnj1avny5tm7dKkmaM2eOnnjiid7zwWBQXV1d6u7u7reP48ePSzoVdvrS3Nzsqp6amhrt339QPl/AVXtJQ2qLkYExyy+MV/5hzPKPtTFLyjfkx2RsJufTTz/V97//fc2ePVtbt25VcXGx7r33Xm3cuFGjRo3qbZe6FXX06NF++0rdphozZkymygMAAAUmIzM5zc3Nuvnmm3s/KHzllVfqwQcf1NSpU09rO3nyZEWjUX3wwQf99pc6N3HixEyUBwAACtCwZ3LeeOMN1dXV6f3331dVVZU2bdqkZ599ts+AI6n36+F79uzp83wsFuv96viFF1443PIAAECB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0qWSpIaGBm3YsEGdnZ167733dOutt+r111/XqFGjeq9R5N4Pf/hD+Xw+7dixQwsXLtSuXbvU1dWl9vZ2rV69Wt/+9rclScuXL9e4ceNyW6xBL7/8siRpyZIlKisrc/UYrjPJ19HRUbArpiWTSd188829m5n9vQcffFB33XVXVmvC4J5//nktW7as369FfuMb39B//Md/qLS0NMuVIeWhhx5SY2Ojrr76aq1du7bPNsePH9eVV16pHTt2nHauqKhIa9as0cKFC70uFZ9zM2arV6/WihUr+l1oc+nSpVq5cmWfXzHHmTtx4oQcx+ndXXwwt912mx5++GFJXGcFO5MjST6fT88884xWrlypmTNnavTo0Ro3bpwuu+wyPffccwScEeraa6/V1q1bdeONN2rSpEkqLi7WuHHjNHfuXD355JNat24dAScPlJaW6uWXX9YDDzyg6upqjRo1ShUVFaqrq1NTU5PpN958dfvtt+vVV1/VNddco8rKShUVFam8vFzz5s3T+vXrtWrVKgKOByKRiOuA8/cK/Tor6JkcAABgV0HP5AAAALsIOQAAwCRCDgAAMImQAwAATCLkAAAAkwg5AADAJEIOAAAwiZADAABMIuQAAACTCDkAAMAkQg4AADCJkAMAAEwi5AAAAJMIOQAAwCRCDgAAMImQAwAATPr/HkIE0bahwYwAAAAASUVORK5CYII=\n"
},
"metadata": {
"image/png": {
"width": 284,
"height": 282
}
}
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "def _adaptive_shape_kern(im, sigma2):\n half = (23-1)//2\n y, x = jnp.mgrid[:23, :23]\n y = y - half\n x = x - half\n \n kern = jnp.exp(\n -0.5 * x * x / sigma2\n -0.5 * y * y / sigma2\n )\n \n norm = jnp.sum(im * kern)\n mx2 = jnp.sum(x * x * kern * im) / norm\n my2 = jnp.sum(y * y * kern * im) / norm\n\n \n # adaptive moments has this deweighting thing\n # I got this snippet out of ngmix\n idetm = 1.0 / (mx2 * my2)\n idetw = 1.0 / sigma2 / sigma2\n Nrr = mx2*idetm - sigma2*idetw # Nrr = Icc*idetm - Wcc*idetw\n Ncc = my2*idetm - sigma2*idetw # Ncc = Irr*idetm - Wrr*idetw\n detn = Nrr*Ncc\n\n # now set from the inverted matrix\n idetn = 1.0/detn\n mx2 = Ncc*idetn\n my2 = Nrr*idetn\n \n new_sigma2 = (mx2 + my2)/2.0\n \n return new_sigma2\n\n\ndef dumb_adaptive_thing(im):\n sigma2 = (2.0/0.2/2.355)**2\n for _ in range(10):\n sigma2 = _adaptive_shape_kern(im, sigma2)\n return sigma2",
"execution_count": 52,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "dumb_adaptive_thing(im)",
"execution_count": 53,
"outputs": [
{
"output_type": "execute_result",
"execution_count": 53,
"data": {
"text/plain": "Array(3.1479647, dtype=float32)"
},
"metadata": {}
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "vg = jax.jit(jax.value_and_grad(dumb_adaptive_thing, 0))",
"execution_count": 55,
"outputs": []
},
{
"metadata": {
"trusted": true,
"scrolled": false
},
"cell_type": "code",
"source": "sigma2, dsigma2_dimg = vg(im)",
"execution_count": 61,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "fig, axs = pplt.subplots(ncols=2, nrows=1)\n\naxs[0].imshow(im, origin=\"lower\", cmap=\"rocket\")\naxs[0].set_title(\"object\")\nm = axs[1].imshow(dsigma2_dimg, origin=\"lower\", cmap=\"rocket\")\naxs[1].set_title(\"derivative of adaptive moments sigma2 wrt to image\")\naxs[1].colorbar(m, loc=\"r\")",
"execution_count": 67,
"outputs": [
{
"output_type": "execute_result",
"execution_count": 67,
"data": {
"text/plain": "<matplotlib.colorbar.Colorbar at 0x14d23b910>"
},
"metadata": {}
},
{
"output_type": "display_data",
"data": {
"text/plain": "Figure(nrows=1, ncols=2, refwidth=2.5)",
"image/png": "iVBORw0KGgoAAAANSUhEUgAABT0AAAJZCAYAAABrz5HOAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/MnkTPAAAACXBIWXMAAB7CAAAewgFu0HU+AACau0lEQVR4nOzdd3xT1f/H8Xe6actqS1GRvSwgigMFQWTKVCoqIIgI4lb8KYqK4kJxzy8o9iugiBNxsGTJ3siSoUwZMkopq7R05f7+6DeRtEmTtrlNGl5PH30Uc09OPs29uTn55HPPsaSlpRkCAAAAAAAAgAAR5OsAAAAAAAAAAMCbSHoCAAAAAAAACCgkPQEAAAAAAAAEFJKeAAAAAAAAAAIKSU8AAAAAAAAAAYWkJwAAAAAAAICAQtITAAAAAAAAQEAh6QkAAAAAAAAgoJD0BAAAAAAAABBQSHoCAAAAAAAACCgkPQEAAAAAAAAEFJKeAAAAAAAAAAIKSU8AAAAAAAAAAYWkJwCfWLx4saKjoxUdHV2s+19//fWqU6eO6tSp4+XIAMBz9913n6Kjo3XfffeV6uP27dvXfg48cOBAqT52UdnivP76630diumOHDmie++9V/Xq1VOVKlX0n//8x9ch2XXu3FnR0dF69dVXfR2KWwcOHLAfN3379vV1OECRna/HcE5Ojr788kvdfPPNql27tipXrqwaNWqoe/fumjRpknJycnwdYkA7n95vAU+R9ARQJqWkpCg5OVnJycm+DkWS7AncxYsX+zoUAOeB48eP28+Bubm5vg5HjRo1UnR0tL788ssC22xxpqSk+CCy0jVgwAB99dVXOnz4sDIyMnTy5Elfh+TXXL135ubm2o+b48eP+yg6+KO9e/faj5u9e/f6OhyXzsdj+MSJE+ratavuv/9+zZ8/X0ePHlV2drZSU1O1cOFCPfDAA+rSpUuZeS8oydjeV18ynU/vt4CnSHoCAAAAJXTy5EktW7ZMkvToo49qzZo1euCBB3wcFQCUjkceeUTLly+XJPXv31/Tp0/X2rVr9eOPP6p79+6SpBUrVqhv376yWq2+DBXAeSTE1wEAQHFs3brV1yEAgM/8+uuvvg7BY2lpab4OoVScOHHC/u97771XtWrV8lksZV3NmjXPm+MGgel8O4Y3b96sH3/8UZI0fPhwPf/88/Ztl1xyiTp27KgXX3xRb7/9tlasWKHvv/9evXv39lW4Aet8OuYAT1HpCQAAAHiRxWLxdQgAUGp+/vlnSXmXhA8bNsxpm+eee07VqlWTJHuCFADMRtITQIkZhqHvv/9eiYmJ9knLa9eurcTERH377bcyDMNtH9u3b9f999+vBg0aKCYmRvXq1VP//v3tl8nk527xkNzcXE2YMEFdunRRjRo1FBcXp2bNmum+++7Tpk2bCo0lKytLY8aMUbt27VStWjXFxsbq0ksv1aOPPqpdu3Y5tM2/GFPXrl19sqgJAHOcOnVKr776qq655hrFx8froosu0g033KBx48Z5dHneoUOH9Oyzz+rKK69U1apVVaNGDV1//fV65513HCoDz2U7v40ZM0aSlJSUpGbNmqlChQr2ucVeffVVRUdHq3Pnzvb7tWrVStHR0erYsWOhMQ0cOFDR0dGqU6dOgUUlfvvtN/Xv318JCQmKjY1VTEyMGjZsqD59+mj27NkF+rLN5blv3z5J0v33318grvxzm6Wmpqpy5cqKjo7Wyy+/7DJOwzBUv359RUdHq1+/fgW2F+e59dS8efN0xx13qF69eoqJiVGNGjXUuXNnffrpp8rOznZoa5tjsHHjxvbbGjduXKz53H7//Xfde++9atq0qapUqaLKlSurbt26SkxM1HfffVfo++mRI0f0zDPPqFmzZoqLi1P16tXVuXNnfffdd24fNyMjQx999JE6duyoGjVqqFKlSqpataquvvpqPfXUU9q/f3+B+9j+blsSY//+/XrsscfUuHFjxcbGqk6dOurTp48WLFhQ4L6evHfmnyd28+bN9vt9/vnnLv+WU6dOKTY2VtHR0Xr22WcLbN+xY4ceffRRNW3aVHFxcapdu7Y6dOigpKQkpaenu32unLHFdeLECR09elRPPPGEGjVqpNjYWDVu3FjPPfeczpw5I0nKzs7WW2+9pSuvvFJxcXG66KKLdPPNN2v16tUu+8/JydFnn32mzp07q0aNGqpcubLq1aunvn37Flr1bXsON23apDNnzujFF1/UZZddpri4ONWvX1+PPPKIjh49Kinv9ZaUlKTrrrtOVatWVdWqVdWxY0enr/tzrVu3TkOGDLGfM+rXr6+uXbvq22+/LfBayR+X7W/++uuv1aFDB1188cWKi4vTNddco/fff9/h/kV5na1Zs0aDBg1SQkKCYmJiFB8fr+bNm2vkyJFKTU0t9O9xJTU1VS+//LJatmypqlWrqnLlymrQoIHuvPNOrVq1qtC/09lcx5I0ffp03XzzzapRo4bi4+PVqlUrffrpp7JarZo4caLT8/mXX36p6Oho9enTR5K0aNEi9ezZUzVq1FDVqlXVtm1bTZ061d5+165dGjx4sOrWravKlSurYcOGeuKJJwqdb7io7wOStH79eknSFVdcoXLlyjltExISoubNm9vjcufYsWOqUKGCw/vhuQ4cOGB/7dWoUcPp+dH2flqjRg37e7a799iSjO1t73dLly6VJI0ePVrR0dFq1KhRgbb//POPhg8friuuuELx8fGqWrWqrrjiCj355JNOz7mecDWXqG3M8NRTT0nKS1J36tRJ1apVU7Vq1dStWzctXLjQ3n7dunXq06ePatasqcqVK6tp06Z6+eWXlZmZ6fKxf/zxR916662qV6+eKleurLi4ODVp0kSDBg3SypUrC4178+bNGjx4sOrXr6/Y2Fg1bdpUI0eO1MmTJ7Vr1y77PnG1EJbtmK1fv75iYmKUkJCgXr16adasWR59DkVg4/J2ACWSnp6uO++8s8Ag6OjRo5o7d67mzp2rL7/8Ul9//bXLldrnz5+vvn37OnzYOHz4sH766Sf99NNPeuaZZzRixAiPY0pJSdGtt96qtWvXOty+Y8cO7dixQ5MnT9Zzzz2np59+usB9jxw5optuuklbtmxxuH3Pnj3as2ePvvnmG33xxRcOH+gBBKYdO3bopptuKvDhY+3atVq7dq1mzZqlmJgYl/efM2eOBgwY4HC52ZkzZ5Samqp169ZpzJgx+uGHH9SsWTOXfQwbNkyffPKJR/Hecsst2rBhg1atWqUjR46oatWqBdqcPXvWniS5/fbbFRLy71DwhRde0DvvvFPgPv/884/++ecfTZ8+XU899ZRGjhzpUTyuxMTE6IYbbtDcuXM1bdo0l/2tWLFChw4dkiTdcccdDtu88dw6k5ubq0cffbRAUi01NVVLly7V0qVLNXHiRP34449On9+SSEpK0hNPPFEgmX7kyBH7++mcOXP03//+t8B9V61apVtvvdVhwZSzZ8/aYz73w2x+x44dU5cuXQpMG5OTk6Nt27Zp27Ztmjx5smbMmKHLL7/caR+rV6/Wrbfe6pBQSk5O1vTp0zV9+nQ99thjGjVqlAfPgmtNmjRRw4YN9ddff2natGm66667nLabOXOm/YN5/uPm888/12OPPeaQTDt79qyOHj2qlStXauzYsZo6dapq165drBj37t2r3r1768CBAw63vf/++1q2bJmmTp2q22+/XStWrHB4/Pnz52vp0qVasGCBmjZt6tBnSkqKevXqpd9//93h9sOHD2vatGmaNm2a+vTpo08++cTh9Xyu48ePq127dg5jm0OHDmnChAlauHChFixYoKFDh9qr9WxWrFihW2+9VVOmTNGNN95YoN/XXntNo0ePdkgqHDp0SIcOHdLixYs1btw4fffdd4qLi3P5nD388MOaOHGiw21btmzRc889pwULFujHH39UUJDndToffPCBnnvuOYeYsrKytHXrVm3dulXff/+95s+fr4suusjjPrdu3aoePXroyJEjDrcfPHhQP/74o37++Wd9/PHHTr+cccYwDD366KOaMGGCw+0bNmzQhg0bNHfuXKfPd36fffaZ/u///s/hnLFmzRoNGDBAhw8f1mWXXaZevXo5nCf/+ecfjRs3TuvXr9f8+fMLVKUX933g8OHDkuT2vGiLxZMvDWNjY3XFFVdo7dq1WrJkiR566CGH7ecWRqSmpmrLli1q0qSJQxvbPMvt2rVzehwV5T3Wm3799VcNGDCgwBct27dv1/bt2zVx4kSNHz9ePXr08Ppjv/TSS3rrrbccblu0aJGWLl2qSZMmKScnR4MHD3Y4T+7evVtvvvmmdu7cqS+++MLhvoZhaPDgwQW+YMvOztbff/+tv//+W99//70+/PBD3X333QXimTx5sh566CGHhObu3bv17rvv6qefftJ//vMfl39Lbm6uhg4dWuAcsn//fu3fv1+zZ89W165dNXHiREVGRrp9bhCYqPQEUCKPPPKIPeHZvXt3/fjjj1qzZo1+/vln3XzzzZKkBQsW6MEHH3TZx5133ikp77KXJUuWaPny5XrjjTcUGxsrKe9bUk8qVaS8N78+ffpo7dq1ioiI0LBhwzRv3jytWbNGkyZN0tVXXy1JGjVqVIFvjXNycnTbbbdpy5YtioiI0FNPPaWFCxdqyZIlevPNNxUbG6v09HQNHDjQPrjbuHGjNm7caO/js88+08aNG/XKK694FC8A/3TmzBn16tVL+/fvl8Vi0cCBAzVr1iytXr1aEyZMUEJCgubNm+fyEr0//vhDffr0UVpamurXr6+PP/5YK1eu1JIlS/Tyyy+rcuXKSk5OVpcuXRwSJOf67rvv9Mknn6h9+/aaMGGCli9fbj+HOXPLLbdIyvswOXPmTKdtZs+ebf/Qee4H9JUrV9o/6DZr1sz+eEuWLNHHH3+s+vXrS5Leeust7dmzx36/X3/9VRs3brQnEF555RVt3LhR48ePdxnnubFu27ZNO3fudNrGVq0UFxenTp062W/3xnPryqhRo+wJz5YtW+rrr7/W6tWrNWvWLA0cOFAWi0WbNm3SHXfcodzcXElStWrVtHHjRs2aNcvez6xZs7Rx40aPFzLau3evhg8fLqvVqnr16mns2LFavHixVqxYoYkTJ+rKK6+UJH3zzTcFVhI+fPiwbrvtNh0/flxhYWF67LHHNH/+fK1cuVJjxozRxRdfrC+++MJlNdoLL7xgT3gOGjRI06dP1+rVqzV79mwNGzZMoaGhOnnypNMvCiUpMzNTd9xxh06ePKkHHnjA/thjx45VzZo1JUnvv/++Q4KnuO+diYmJkvLGFadPn3baxnbcNG3a1CEBMmfOHD300EPKzs7WVVddpc8//1yrV6/Wb7/9pieffFIRERHasWOHOnfuXOx58fr376+cnByNGTNGq1at0g8//GDfd2vWrNEVV1yhlStX6oEHHtCiRYs0f/58DRw4UFLe8/jBBx849Ge1WtWvXz/9/vvvslgs6t+/v2bMmKE1a9bo22+/1fXXXy8p77h46aWXXMb18MMPa//+/Xr99de1cuVKTZ8+3V5BuGfPHl199dX6+eef1bt3b82dO1eLFi3SE088oaCgIBmGobfffrtAn0lJSXrttddkGIbat2+v7777TmvWrNHs2bN13333KSgoSKtXr1bPnj1dJrjGjh2riRMnqk+fPpoxY4ZWrlyp8ePHq27dupLyvhS3nWM9eZ1t2LDBnvBs2rSpJkyYoJUrV+q3337TM888o+DgYO3fv18vvPCC2315rsGDB+vIkSOKiorSyJEj7ce4LVar1aphw4YVWj15rvfee8/+eujQoYOmTp2q1atX69tvv9W1116rWbNmFUhK5bdp0yY98cQTateunaZNm6bly5frrbfeUoUKFSRJzz//vG6//XZFR0dr7NixWrVqlb799ltdcsklkvK+qMj/ZUhx3wekvKTZiRMn9Nlnn7mM+cSJE/bzkC0Od9q3by9JWrp0aYHjKP/VYLYEp82BAwf0999/S5LTKyBcvceWZGw/fvx4bdy4UVdddZWkvKsfNm7c6FCRvXXrVvXr10/p6emKjY3V66+/rmXLltn3YZUqVZSRkaG77rpLf/zxh9vHLArbsXX77bdrzpw5WrJkiZ5//nmFhYUpNzdXDz74oO655x7VqlXL/r4xfvx4e0X/1KlTC1Tpfv/99/bPaTfccIO++eYbrVy5UgsWLNDbb7+tCy64QIZh6Omnn7ZXvNusWrVKDzzwgHJyclS/fn199tlnWrVqlWbNmqU77rhDu3fv1pAhQ1z+PS+++KI94Xnrrbfq559/1tq1azVt2jTdfvvtkvK+CBs0aJC3nkKUQVR6Aig226Bbylu04d1337VvS0hIUPv27TV8+HCNGTNGU6dO1YMPPqhrr722QD/p6emaOXOmWrZsab+tadOm6tq1q9q2bauUlBQ9//zz6tWrl4KDgwuNadKkSVq5cqWCgoL0/fffq23btg4x9ejRQwMHDtRPP/2kV199Vb1797ZXIHz++edat26dpLxvHc/9lr1Zs2Zq3bq1brjhBqWlpWnChAl65pln7ANzmwsvvLDAbQDKno8//li7d++WJL377rsOg+5GjRqpc+fO6tixozZv3uz0/o8//riysrKUkJCghQsXKioqyr6tWbNmuummm9ShQwf7+S1/xY+Ud6nzoEGD9OGHH3oUc61atXTFFVdo3bp1mjZtmtOKClsCoUmTJrr00kvtt0+ZMkVS3jlsxowZ9g/Otng7duyoBg0ayGq1at26dfZKuBo1akiSvcKsSpUqHp0De/TooUcffVTZ2dmaNm2a/u///s9hu2EY9qqz2267TaGhofZt3nhunTl48KDee+89SVK3bt301VdfObzntG7dWgkJCRo+fLg9oWWrlq1bt65DlV2NGjXsCT9P/PLLL8rKylJERIRmzJhh/4ApSZdeeqm6dOmihIQEpaam6vfff7cnu6S8yxZTU1NlsVj01VdfOVyJ0KRJE3Xq1EnXX3+9vWr2XIZh2JOE9913X4EKr+uuu04VKlTQyJEjC1Qa2pw9e1aHDx/Wxx9/bP8S0/bYXbt2VYcOHbRz50698MILuuOOOxQeHl7s985evXrp9ddfV2ZmpubMmaNevXo5bD916pTmz58vybHKMzc3V4899pikvA/lP/30k8P+at68uTp37qzu3bvrn3/+0dtvv60XX3zRbTz5HT58WCtWrFC9evUk5V1+3bx5c1122WVKTU3V0aNH9fzzz2v48OH2+1xzzTXau3evFixYUGD6nalTp9oTOaNGjdLQoUPt2xISEtSlSxf1799fv/zyiz788EPdd999uvjiiwvE9ffff2vWrFlq1aqV/bbrrrtOV199tXbu3KmjR4/qrrvucvgy+Morr9SxY8c0ceLEAnGdOHHCvlBN//79C1TKXXfddWrTpo369eunDRs2aOLEiU6TDlOmTNGzzz7rMA1BkyZN7LGdOnVKy5YtU69evTx6nf30008yDEMVK1bUrFmzVLFiRfu25s2b69ixY/r000/dXrJ/rh07dtgTT++++67Dl0VNmjRRvXr1dP311+v06dNavny5unTpUmh/x44d0+jRoyXlffnz+eef26stGzVqpI4dO6p79+4up3ey2bdvn9q3b6+pU6faKxibNm2qChUq6L777lNmZqaCgoK0aNEih+OxcePGatasmbKzs7Vp0yaHcXJx3wckuR2fG4ahJ554QqdOnZKkAq9dVzp06KA33nhDJ06c0KZNmxyqzW0V03Xr1tWuXbu0bNkyh0vQbZeYWywWdejQoUDfrt5jSzK2t30BGBERIUn2KUrONWLECGVmZqpy5cqaP3++ff9Iefuwc+fOatOmjVJTUzVixAj98ssvHj22J/bs2VPgtd6sWTPl5ubqtdde04kTJxQfH6958+bZi08aN26s6tWr2xPHmzZtcvibbMfNZZddVuDcevXVV+vKK69U27ZtdebMGW3bts2eEJakp556SlarVfXr19dvv/2mypUr27e1bt1aF1xwgcPny3Pt2LHD/kVR/qsCL7nkErVt21ZXXnmlhg8frunTp2v+/Pn2JDrOL1R6Aig22xxFsbGxLucte+mll+xJxcmTJzttM2DAAIeEp03t2rXt38b/888/BapbnLFVFw0YMMBhIGcTEhKiDz/8UOHh4Tp16pRmzJhh32b7prBbt25OLyu69NJL7bfn/zYZQGCxnd9atmzptMqgfPnyTqufpLwqDtuHsY8++sghKWdTr149+wf9n3/+2elcgmFhYYVWbzljq6BcuHCh/cOlTUZGhr3aJP9lmLVr11a/fv309NNPO3zQtbngggvsH+YyMjKKFJMzlSpVUrt27SRJ06ZNK7B9+fLl9iTdubF667l15ptvvlFOTo5CQkL0wQcfOP0Q/+CDD9qrB129pxVHfHy8+vXrp6eeesoh4WkTFRVlr4w69+/Jzs62V9j06dPH6dQrF154ocvjKD09XT169FC/fv00ePBgp22uuOIKSYXv91atWjkkPG3i4uLsr5PU1FSHKr3iSEhIsD8Pzo6bGTNmKDMzUyEhIbrtttvst8+dO1f79u2TxWLRuHHjnF4Gfs0119gTJl9//XWx4rv33nsdEhhSXtLDNo/hhRdeqMcff7zA/WwJmfzHqu0Ya9SokR599NEC9wsKCtJ7772n0NBQ5ebm6ptvvnEa18033+yQ8JSk0NBQ+2swLCzM6fQDtgRB/uqsb7/9VmlpaapcubLL8+BNN92knj17SnL9fNapU8chAWxTrVo1tWjRwuljF8Z2zrvgggscEp42999/vz755BN70tET51YUN2zYsMD2yy67TJ988ok++eQTp9vz++6775SRkaHQ0FC9/fbbBS4vDwsLc/mc5jd69OgCl2yfO351djzWqlXLflv+59as94GUlBT16dPHXijRsmVLe9W2O82bN7fvy3M/B5w4cULbtm1TSEiIHnnkEUkFKz9tSc+mTZs6vey+OO+xJXX48GHNmzdPUt6l9fn3j5S3H5588klJeVXtBw8e9Nrju3qtn/veMXz4cHvC06ZFixb2acryn6eaNGmifv366cknn3R6brVVu+e/7+bNm+1fptmu0shvxIgRqlKlitO/ZeLEibJarWrQoIHLKxEeeugh++MX97yOso+kJ4Bis01K3bVrV5eTlkdERKhbt26S5HKS/nM/mOTXu3dvhYWFScqrLC3M6dOntWHDBknOL2OxiYmJsVc42dqfPn3afinLTTfd5PK+7733npYvX+7yW0cAZd/Ro0ftl1z37dvXZbtWrVqpevXqBW63fdCqWLGiPdnhjK1aLysrS9u2bSuw/fLLL3f6IaAwtqRnVlZWgWqmOXPmKC0tTcHBwfbLvmweeughjRs3zmXia+fOnfZpPbzFFuuaNWsKVCHaKlITEhIcKnu89dw6Y3tPa9mypS644AKnbSwWi/3D+po1a7y2QELv3r01btw4+yIT+R09elTbt28vcPsff/xhT1wUdqzecsst9vfSc0VFRWncuHEaN26c04U2pIKJBGdsi6o40759e3vCwdUl9kVhO27mzJmjrKwsh22246ZDhw4OSQ7b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ndyuim1T2GXwpeHcY8vdMWl7/r11PLpjex0OHDiwwCJkrhS1ara44uLi9M477+i1117TypUrtWTJEi1fvlyrV6/WyZMn9d///le//PKLVqxYUaQrd+68807deeed+uuvv7R48WItW7ZMy5Yt06FDh7R48WItXrxYn3zyifr3719oP7bnzt3Y2dMva7yppO8DZ86cUe/eve2rwletWlUvv/yy7rjjDo8vZ3emevXqatCggbZv367Fixfr0ksvtS88apv7tVWrVpo0aZL9kmnb7xtuuKHI1b1msp0DPUnA2Y4Bb503zTJo0CD7+bdFixZq166dGjVqpPr166tBgwYKCQlxmrgs6WshMjJSp06d0rPPPqvevXu7jbMkxyDKNv85AwAocy6++GJt3bq1wLfB+dnmU7NNfp7f5s2b7fNR5XfmzBn75Snukpjn9h8UFFSkVdTP/XCzY8cOl5fqHTp0SBs2bFBQUJDTxY4AlH01atSQxWKRYRj6448/HCbhz2/Lli0FbrOdT44dO1ak85C3XHzxxWrevLlWrVqladOm6cYbb7Rf2u4sIbRv3z599NFHkvIWMLCtypyfbQoQb+rWrZvCw8OVmZmp2bNn67bbbrNf2u5smhIzn9vq1atr8+bNHr+nRUZGeqXK88yZM/aVwvv166ePP/64wOIkkvPnv1atWvZ/b9682ekCflLe3Kb55yKU8pKtO3bsUHR0tObOnev0EnlP9vuff/5Z6FQ1tteJq3FAUd1yyy165ZVXlJycrFWrVqlRo0b2S9udHTe2xz158qRPXpPFUalSJfvlrZ4ek6WVqK1WrZo2b96sM2fO+O3zGR4erjZt2tjng0xLS9OkSZP09NNPKzk5WR999JHTBV3cadiwoRo2bKghQ4bIMAwtX75cjzzyiLZv367nnnvObdKzevXq2rJli9tpI5zN4Wsmb7wPDB482J7wvOmmmzRmzBivVcJ36NBB27dv15IlS9SiRQudPXtW9evXtyfTbVWke/fu1YEDB+zzPRY2x78v2C6pT0tL04EDB1xeYn/48GGdOHFCkvfOm2ZYvny5PeE5ZswY3XXXXQXauDpmbJf37969276IoDOuXgsXXXSRTp06paysLL89D8E/sJARgGKzTXQ9c+ZMnT171mmbzMxM++Tlri4vsa0868xXX32l7OxsSXKZGLWpUqWKfRVE26VMzpw4cUI9e/ZU9+7d7StBnnvf6dOnu7zvmDFjdNttt2nYsGGFxgKg7KpYsaJ9DqnCqgnXrl2rPXv2FLjddq47fPiw1q9f7/L+P/74o7p3767bbrvN6wlF2yIIM2bMUFpaWqGXtq9fv165ubmSpAceeMBpf8ePHy9QZegN5cuXt38otVVfHTp0SOXLl3dakWrmc2t7T1u+fLnLv9UwDHsC+aqrrip08QRP7dixw3754n333ec04Zmbm+uwQIdNQkKCfW6/wo7VadOmOX2ftq2c26pVK5dzgnoyp6ftQ68zixYtss9j52ocUFT169e3xztt2jTNnDlTmZmZqlu3rtPHsFWDrVu3rtB53caNG6fu3bu7fB2UJovFoquvvlqS9NNPP7lcNOvIkSP2BI+rBUi8zfYc//bbby7Hf1Leiszdu3fXCy+8UCpx3XLLLWrbtq0+/vjjAtuio6P1wAMP2M83ni5wNm7cOLVt29bpIi0Wi0XXXXedPUGYkpLidgEs27G4fPlyHTt2zGmb7du3e/S686aSvg/YpimRpHvuuUeTJ0/26nzHtkvcly9fbr903XZpuyTVrFlTNWrUkJT3XmL7osDfkp7XXHONveKwsPPmlClTHO7jr2zvIdHR0RowYIDTNq6+tLG9FjIyMjR37lynbXJycjRr1iyn22znIVfbbR5++GF1795dY8aMKbQdAhdJTwDFZqumSElJ0ciRI522ef755+0DQFeLC33++edOV4fdsWOHXnnlFUl5b/iFVZHkj2nixIn2Sc7zGzlypObNm2evDsl/36lTp9q/qT7X4cOHNXnyZEl5C4E4462VfAH4lu18sHz5cn366acFtqenp9svR87vmmuuUf369SVJjz/+uNNLt44cOaIRI0Zo4cKFioiIcJroKgnbas9Hjx7Vyy+/rLS0NNWuXdvhQ6Iz5y7iZJOdna2hQ4fav4Aq7DxXnHOgLUE7b948ff3115Kknj17Or1U18zntnfv3goODlZ2drYee+wxp8nSMWPG6I8//pAktxVdxfHPP/8UuM0wDD333HNKTk62/79NcHCwbr/9dknSN9984/TDX3JyssuqLRtn+13Kex9+4403HGJx5pdffrEn1s91/Phx++ukUqVKThPZhfVbGNtxM23aNHsi2tUq8t27d1elSpXs+9bZYizbt2/XSy+9pIULF7pctby02c5Dmzdv1tixYwtst1qteuyxx5SVlaWgoKACCziZpU+fPgoODtaxY8c0YsQIp22WL1+ud955RwsXLjStAjX/cZOcnKw1a9YoKSlJmZmZBdqfPXvWnkz0dPEhq9WqNWvWaN68eS5Xod64caMkKTQ01O080H379lVISIgyMzM1fPjwAttzc3P15JNPehSbWYrzPjBhwgRJedXnb7zxhtcvJW7durUiIiKUlpam//73v5JU4P3MVu35wQcfyDAMJSQkeGWxopKM7fPf98ILL7RX5L/11ltOF6vavXu33nzzTUl5K4/bkrn+LD09XampqQVuT0tLc5gC49zno3nz5mrYsKGkvM+LzuYuffvtt52+L0r/vgdv2bJFH374odM233//vSZOnKiFCxfai1tw/iHpCaDYrr32WvuHjrFjx6pv376aN2+e/vzzT82fP199+/a1D9J79uzpdAJz26AzMTFRb7zxhjZs2KBNmzbpP//5j9q3b6/U1FSFhIR4PAfXgw8+qLp16yozM1M9evTQyJEjtWLFCm3dulWzZs3SbbfdpvHjx0uShg0bpri4uAL3tVqtuu222/TKK69o7dq12rRpk7788kt16tRJR48eVUREhIYOHerwuLbB3apVq3T27FkmywbKuHvvvdc+QH7iiSf00EMPafHixdq6daumTp2q9u3ba926dU4/UFksFr355puyWCxas2aNWrVqpS+++EKbN2/WunXrlJSUpHbt2mnfvn2Kiopym5AqjosuusheBWFb1dRVQuSaa66xX1Y2cOBATZkyRZs3b9aKFSv0ySef6Morr9TUqVPtycPp06dry5YtDhVetm2rV69Wenp6keb+7Nq1qyIiInTmzBl98cUXklwvtmTmc1u9enU98sgjkvISaV27dtX06dO1bds2LVmyRA899JCeeeYZSXkf1jyZQ8wTjRo1sldEPf7445o0aZL++OMPrVmzRp9//rlatmypjz76yP4cz58/X5s2bbLPNzt8+HDFxMTIMAzdcccdevbZZ7Vq1Spt2bJFX375pdq2bat9+/Y5PVZtV1Bs2rRJ99xzj5YsWaKtW7dqzpw5euKJJ9SiRQulpKTY20+cOFF///13gX4sFovuuOMOvfjii1q7dq02b96sSZMm6frrr7cnmV544YUCieySvHfaxh979uzR7NmzZbFYXB7jkZGReumllyTlHb8dOnTQ999/b19Z+P3331enTp106tQpVa1atcB7vK/06tXLXuX19NNP68EHH9TixYu1bds2zZgxQ127dtW0adMkSY8++qjDdAdmql69uh577DFJeZWQN998s/21smLFCr3yyiu65ZZblJubq4SEBJcVYMVx7pcYK1asUGZmpn3Ovx49ekjKS2AnJibq559/1h9//KGNGzfq22+/VadOnezV+a4S5Pl16dLFfn688847NWbMGK1evVrbtm3TggUL9Oijj+qdd96R5Hz6kPwuuugiexLom2++Ua9evTR37lxt27ZNs2fPVvfu3TV//nz71Qbe/kLMlZK8D1itVvuVU61bt9aBAwe0a9euQn8OHTpUpPjKlStnT3LakmC2SkEb2+cM2/aSVnmW5Pxke57Wr1+v06dPO8wPPmrUKIWFhSk1NVXt2rXTmDFjtGnTJm3atEljx45Vu3btlJqaqrCwMI0ePbpEf4PZbO8hVqtVt956q2bOnKmtW7dq8eLFeuedd3TZZZdp2bJl9udjypQp2rZtm/1LRdvnuz///FNt27bVd999p61bt2r58uV6+OGHNWrUKIfV2899PVx77bW69dZbJUnPPvusBg4cqHnz5mnbtm1avHixnnzySfsCiW3btmVasvMYc3oCKJGxY8fqxIkT+u233zRt2jT74Ptc7dq1s3/ozq9u3bq66667NHToUL3yyiv2yk6bsLAwJSUl6YorrvAonqioKE2dOlWJiYnavXu33n33Xb377rsF2t1///0FvkmPiorSDz/8oJtvvll79+7VG2+84VDhIuUNusaPH6/atWs73H7JJZdo27Ztevnll/Xyyy+rX79+GjdunEcxA/A/5cqV05QpU9SjRw/t379fn3/+uT7//HOHNp07d1a3bt3sibJzdezYUR9++KH+7//+Tzt27NCDDz5YoE2lSpU0adIkNWjQwJS/ITExUStWrLB/uHCVELrgggv09NNPa9SoUdq+fbsGDhzosN1iseipp55Senq6/vOf/2jGjBmaMWOGli9frqZNm0rKOwf+/fffmjBhgiZMmKBWrVrp119/9SjO6OhodezYUdOmTZPValWNGjUKXeXXzOf2xRdf1JEjR/T1119r6dKlTiu7LrvsMn399ddeubRdynufe/3113X//ffr0KFDTi8tHTBggBISEvTMM89ozZo1atmypb7++mv16NFDVatW1ZQpU9SrVy8dP35cH374YYGql0GDBqlq1aoFPkDfc889+uqrr7RlyxZ98803+uabbxy2V6lSRZMmTdJdd92lI0eO6JFHHtGll15a4EqKDz74QM8884zefvttvf322wXif+SRR+wfPs9VkvfOunXr6rLLLtPGjRtltVp13XXXFZr0Gzx4sA4ePKg33nhDa9eu1d13312gTbVq1TRlypRSW3THneDgYH311VdKTEzUpk2b9MUXX9i/GDhX37597fPClhbblTxffPGF5s+fb59T9VwJCQmaOnWqV1dpv+iii1SxYkWdPHlSQ4YM0ZAhQ/TMM89oxIgRevjhhzV79mytXr3avrhQfkFBQXruuedcXrGTX61atfTSSy9pxIgROnr0qNPqTCkvaejs2Hfmueee0549ezRlyhTNnj27QJX0448/rlq1aunRRx8ttcWpSvI+EB0dbU8ITpo0SZMmTXL7eDfccEOh00k506FDB/3222/2ePPP9Z//faOkSc+SnJ8uueQSLV68WLNnz9aFF16oGjVqaOvWrZLyFon6/PPPNWjQIKWkpDg9pmyfN1ytMeAvrrjiCg0YMEBffPGF1qxZY7/ywCYsLEwffPCB5s+fr19++cU+Rjhw4IAqVaqkdu3a6a233tLw4cP1119/adCgQQ73b9OmjV599VW1atXK6ZUbY8aM0enTpzV79mxNmTLFYVoAm5YtWzo9b+L8QaUngBKJjo7Wzz//rPHjx6tDhw6Ki4tTSEiI4uLi1L59e3322Wf6+eefna7aZ2P7Zu7mm29WfHy8wsLCVL16dQ0YMECrVq1Sr169ihRT3bp1tXLlSr366qtq3ry5KlWqpNDQUF144YVKTEzUzJkz9fbbbzv99rxevXpatWqVXnjhBV1++eUqX768wsLCVLt2bd19991avny5vZLgXOPGjVPz5s1Vrlw5RUVFeXUlZgC+Ua9ePa1evVojRoxQkyZNFBUVpejoaDVr1kzvvfeevvvuO4WGhrq8/913363Vq1dr0KBBqlOnjiIiIlSuXDklJCTo//7v//T777+7XHjGG2655Rb7ea5FixYFvqw519NPP60vv/xSrVu3VsWKFRUaGqqLL75Yd9xxh5YsWaKRI0fq+eefV2JioiIjI1WjRg2H8/qbb76ptm3bKjo6WhEREQVWXXfn3PN8nz593F4aadZzGxISoqSkJP3www/q3r27qlatqtDQUFWuXFktW7bUu+++q4ULFxZp1WdP9OvXT9OnT9eNN96omJgYhYSE6IILLlDPnj01ffp0jR07Vg8++KDuueceRUdH64ILLnC4BLt58+b6/fffNXToUNWvX1/lypVTxYoV1bJlS02YMMHlpX9RUVGaN2+ehg0bpgYNGig8PFzR0dFq2rSpRowYoQ0bNqhVq1b66quvdMkllygiIsI+vcC52rVrZ98f1atXV1hYmOLi4uyViK6qlUr63nnuceOqOvhczz//vBYuXKg+ffqoevXqCg8PV1RUlC6//HI9//zzWr16tcu5TX2latWqWrRokd577z1dd911iomJUWhoqKpWraru3btrypQpSkpKKvUVqkNCQjR27Fj9/PPPuvnmm3XhhRcqNDRUFSpU0LXXXqs33nhDS5cutS9W4i3BwcH64osv1KRJE4WHh6tChQr210JUVJRmz56td955R61bt1ZsbKxCQkJUrlw51a9fXwMHDtTixYv11FNPFekxhw4dqjlz5uj2229XzZo1FR4erpCQEMXHx6tTp04aN26c5syZ4/El88HBwZo4caI+++wztWjRQtHR0apQoYJatWqlKVOm6OWXX7ZXBpbmyt3FfR8oatVmcZ2bqM5f5SnlLXhqm0ohKirK7XQu7pTk/PTss8+qR48eqlixosLCwgpM8dCjRw+tW7dODzzwgOrXr6/IyEhFRkaqfv36euCBB7Ru3Tqnnzf80ZgxY/TRRx/p6quvVlRUlMLDw1W7dm3dc889WrNmjQYPHqz33ntP7dq1U0REhOrVq+cwdnrggQc0b948de/eXbGxsYqIiFCjRo30xhtv6JdffrF/cevstRAVFaUpU6bo888/14033qgqVaooJCRElStXVps2bfTJJ5/o119/9er8sih7LGlpaUxAB6DMue+++zR58mQqKgEA8IG9e/eqcePGkvLmVKtZs6aPIwICx6OPPqrx48frscceK9Yq80Cg+P7773X33Xfryiuv1KJFi3wdDsogKj0BAAAAADDZsmXL1KdPH91xxx0O8yKfy2q12lezPnfBTSCQHD9+XH369FGfPn3si4E5Y5sqh9cCios5PQGUSSdPnpQkr68OCQAAAJghJibGPpfl119/7XRu2ffee0/79+9XUFCQOnToUNohAqWiUqVKWr16tZKTkxUZGWlfaPZcy5cvt8/T2alTp9IOEQGCpCeAMiU3N1e///67Fi5cKClvInMAAADA3yUkJOiGG27QwoUL9cQTT2j37t3q3LmzYmNjdfDgQX3zzTf66quvJOXNb8wc8QhUFotF9913n1555RV99913ysrK0l133aVq1arZFycaM2aMcnNzVbduXXXr1s3XIaOMYk5PAGXKuQtnhISEaP78+bryyit9GBEAAOcf5vQEiufgwYPq1q2bduzY4bLNFVdcoZ9++snjxZGAsig7O1sDBgzQtGnTXLaJjY3Vzz//rMsvv7z0AkNAYU5PAGVKRESEYmNj1bp1a/3www8kPAEAAFBmXHTRRVq2bJleeeUVXXXVVSpfvrxCQkIUFxenNm3a6L333tO8efNIeCLghYaG6uuvv9aECRPUvn17xcTEKCQkRJUqVVKzZs301FNP6ffffyfhiRKh0hMAAAAAAABAQKHSEwAAAAAAAEBAIekJAAAAAAAAIKCQ9AQAAAAAAABQLGlpabr55psVGxur6OholS9fXrVr19ann37q07iY0xMAAAAAAACAg5ycHMXExKhq1arasWOH0zapqalq1KiR0tLSnG4fMGCAxo4da2aYLlHpCQAAAAAAAMDB66+/LqvVWmibbt26KS0tTRaLRY888oh2796tOXPmqHbt2pKkL774QvPnzy+NcAug0hMAAAAAAACA3YIFC5SYmKicnBxdeOGFTis9t2zZomuuuUaS9PTTT+u5555z2F6tWjWdPHlSDRo00Lp160ol7nOFlPojlrI6deooPT1dF198sa9DAQAAxXTgwAFFRkZq9+7dvg7lvMEYCgCAso8xVPHVqVNHJ06c8HUYhapUqZJX9+23336r999/X7t379aZM2fctn/vvfckSeHh4QUSnpL02GOP6aWXXtKOHTtktVoVFFS6F5wHfNIzPT1daWlp+vPPnR60thW9WswMCV7FPitb2F9lD/us7AnUfZbj6wDOO+np6crKSJeSDxTaLtead8wFBwXaMRe42GdlD/usbGF/lT2BvM+yMtJ9HUKZZUt41q1d07eBuLBrz16vJ2V//PFH/fHHHx63X758uSSpcePGTrc/8MADeumll2QYhn755Rf17NnTG2F6LOCTnhdffLH+/HOngkKquG1rGLmSJIsl2Oyw4CXss7KF/VX2sM/KnkDdZ9aco1Qc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\n"
},
"metadata": {
"image/png": {
"width": 670,
"height": 300
}
}
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "",
"execution_count": null,
"outputs": []
}
],
"metadata": {
"kernelspec": {
"name": "conda-env-work-py",
"display_name": "Python [conda env:work]",
"language": "python"
},
"language_info": {
"name": "python",
"version": "3.10.9",
"mimetype": "text/x-python",
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"pygments_lexer": "ipython3",
"nbconvert_exporter": "python",
"file_extension": ".py"
},
"gist": {
"id": "",
"data": {
"description": "jax adaptive moments",
"public": true
}
}
},
"nbformat": 4,
"nbformat_minor": 5
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment