{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\n", "\n", "In the FMP notebook on Frequency Grid Density, we showed how to increase the density by suitably padding the windowed sections in the STFT computation. As an alternative, we discuss in this notebook interpolation techniques along the frequency direction to adjust the frequency resolution.\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Interpolation\n", "\n", "Given a sequence of data points, the goal of **interpolation** is to compute intermediate data points that refine the sequence in some meaningful way. To be more concrete, let us consider a function $f\\colon\\mathbb{R}\\to\\mathbb{R}$ that maps a parameter $t\\in\\mathbb{R}$ to a value $f(t)\\in\\mathbb{R}$. Suppose that we have values $f(t_n)$ only for a discrete set of parameters $t_n\\in\\mathbb{R}$ for $n\\in\\mathbb{Z}$, where we assuming $t_{n} > t_{n-1}$. Then, the goal of interpolation is to estimate values $f^\\ast(t)$ from the known values $f(t_n)$ such that \n", "\n", "$$\n", "f^\\ast(t) \\approx f(t)\n", "$$\n", "\n", "for any $t\\in\\mathbb{R}$. In practice, the function $f$ is not known. However, one often assumes certain properties of $f$ such as continuity, smoothness, differentiability, and so on. \n", "\n", "The simplest interpolation method is known as **piecewise constant interpolation** (or **nearest-neighbor interpolation**). Given a parameter $t\\in\\mathbb{R}$, one simply takes the nearest parameter $t_n$ and defines \n", "\n", "$$f^\\ast(t)=f(t_n).$$\n", "\n", "In the following example, we compute a nearest-neighbor interpolation using the Python class [`scipy.inperploate.interp1d`](https://docs.scipy.org/doc/scipy/reference/generated/scipy.interpolate.interp1d.html). " ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "execution": { "iopub.execute_input": "2024-02-15T08:58:52.452211Z", "iopub.status.busy": "2024-02-15T08:58:52.451929Z", "iopub.status.idle": "2024-02-15T08:58:54.559301Z", "shell.execute_reply": "2024-02-15T08:58:54.558763Z" } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjgAAACICAYAAADqIJGqAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAAxQklEQVR4nO3deXwjaXng8d8jy5d8X223D1k+e3oSmEB6WQaWhN0kHNnsThLCbkiTAybTIbMzQDKQJdthGTLTQAiBkA9sSJNhyWYaCIFAJpDlGBiG7OaiJ7Ak043bt3wf7duyZUt694+qUqtt2ZYsybLk5/v5+NNySXrr7XJJ9dTzXmKMQSmllFIqn7iyXQGllFJKqXTTAEcppZRSeUcDHKWUUkrlHQ1wlFJKKZV3NMBRSimlVN7RAEcppZRSeUcDHKUOQUTWRKTzGNTjv4nIH2e7HrlERF4iIn3ZrkciROSlIjKewvs/IiJvT2edlMoVGuAotQcRGRGRDTuYmRGR/yki5QDGmHJjzFC262iMeZcx5pezXY9UiMg3RCRt/wf77/ajez1vjPkbY8yZBMtKKcA4SiLySyLyf2K3GWPeYIx5JFt1UiqbNMBRan//wRhTDjwf+FfAb2W5PiqHiIg723VQ6qTSAEepBBhjJoD/DXw/gIgYEem2HxeLyPtExG9nej4iIqXOe0XkHhH5joisiMigiLzC3l4lIo+JyJSITIjIoyJSYD83KiI/aD9+rb2/O+3ff1lEPm8/flhEHrcfl4jI4yJyU0SWRORbItJ40L52EpECu+lrUERWReQZEWmzn3uRXe6y/e+LYt73DRF5RET+r/2+r4hI/X51E5FLwEuAD9mZsg/Zr/+giIzZx+wZEXlJzH4eFpFPi8j/svfzrIics5/7U8AL/JVd3m/E+f/dlpWxMz5vEZHv2v+vP7PrW2b/zZvtstZEpFlEXCLyNvv43LTrUmuX5bP/VveKiB/4esy2CyIyaf8NHorZf7GI/L793KT9uHiPv42z31URuSYiP2VvPwt8BLjbrueSvf3jIvJozPvvE5EBEVkQkSdEpDnmOSMibxCRfhFZFJEPi4jEq4dSuUADHKUSYF/gfxz4dpynfwfoBX4A6AZagP9uv+8FwP8C3gpUAz8EjNjv+xMgZL/necDLAKep5mngpfbjHwKGgB+O+f3pOPX4RaAKaAPqgDcAGwnsa6dfB15j/38rgdcDAfsi/kXgD+zy3w98UUTqYt77c8DrgFNAEfCW/epmjLkI/A3wgN3s94D9+m9hHc9a4BPAn4tIScx+/iPwKaxj+gTwIQBjzM8DfuzMmzHmvXv8H3f6T8ArgA7gucAvGWPWgVcCk3ZZ5caYSeCNwE9i/T2agUXgwzvK+2HgLPDymG3/FujBOvZvk1vNaBeBF9r/37uAF7B3pnAQKyCsAt4JPC4ip40x17GO6d/Z9aze+UYR+XfAu+3/62lgFOsYxvoJrEzlXfbrXo5SucoYoz/6oz9xfrACkTVgCeti8D+AUvs5gxUsCLAOdMW8725g2H78R8AH4pTdCASd8uxtrwGesh/fCzxhP76OFYx8yv59FHi+/fhh4HH78euBvwWem8y+4tStD7gnzvafB/5xx7a/wwoGAL4B/FbMc/cDX9qvbjHv++UD/haLwF0x/+cnY567EytYiv27/eg+Zb0UGN/x+tfG/P5e4CPxXhvz9/iRmN9PA9uAG/DZ50ZnzPPOtjt27OMx+/Eg8OMxz70cGNlr/zvq8h3nbwX8EvB/djz/ceBR+/FjwHtjniu36+2LOaf/Tczznwbelo3Pnv7oTzp+tH1Yqf39pDHmyX2ebwA8wDMx2XwBnOafNuCv47yvHSgEpmLe5wLG7MdPA+8TkSa7rD8D3iEiPqy79+/EKfNP7f19SkSqgcexsgMH7WunNqyL7k7NWMFVrFGsjJVjOuZxAOsiumfdjDHb8SpgN+H8sr1Pg5VJqt9nPyUi4jbGhPb4Px1kZ3nNe70Q63h+TkQiMdvCWIGkI96xjd02CjzHfrzzuI7utX8R+QWsDJvP3lTO7cdlP83APzm/GGPWROQm1t9vxN68199PqZyjTVRKpWYeqxno+4wx1fZPlbE6JoN1UeuK874xrKxKfcz7Ko0x3wdgjBnAusC8EfimMWYV6+JzAesuPbKzQGPMtjHmncaYO4EXYTU3/MJB+9qjbvHqPIl1cY/lBSb2KCeRuoEVwETZ/W3+K1YTSY2xmluWsQLHRJiDX5KweGWNAa+MOZbVxpgSY/XT2u99bTGPvVjHE3Yf19jnokSkHfgo8ABQZx+Xf+HWcTno/33bfuw+RnUk8PdTKhdpgKNUCuxA46PAB0TkFICItIiI03fhMeB1IvIjdufUFhG5wxgzBXwF+D0RqbSf6xKRH44p/mmsi5nT3+YbO36/jYj8WxF5jlidh1ewmh/CCe4r1h8Dj4hIj1iea/ez+WugV0R+TkTcIvKfsZqHvnDQcdqrbvbTM0DsnEIVWP2F5gC3iPx3rAxOonaWl4oZoE5EqmK2fQS4ZAcciEiDiNyTQFlvFxGPiHwfVj+lP7O3fxL4Lbuceqz+W4/HeX8ZVhAzZ+/3ddid3mPq2ioiRXvs/xNY5+IP2J2Y3wX8gzFmJIG6K5VzNMBRKnX/FRgA/l5EVoAngTMAxph/xLqYfQArC/E0t+6ifwGrI+41rD4mn8Hqz+F4Guti/809ft+pyS5jBaufyNPculAetK9Y78fqf/EVu6zHsPrv3MTKvDwE3AR+A/gJY8z8Xgcmwbp9EPgZe+TOHwBfxhq9dAOruWaTvZvT4nk3VsCwJCJvOfDV+zDGfA8rABmyy2u26/sE8BURWQX+HvjXCRT3NNZ58jXgfcaYr9jbHwWuAt8F/hmrGenRnW82xlwDfg+r39MMVhPX/415ydeBZ4FpEdn1NzHGfA14O/BZYAorS/ezCdRbqZwkxqQzm6uUUiqW3W9qGChMoY+QUipJmsFRSimlVN7RAEcppZRSeUebqJRSSimVdzSDo5RSSqm8k5WJ/urr643P58vGrpVSSimVR5555pl5Y0zDzu1ZCXB8Ph9Xr17Nxq6VUkoplUdEZOcM64A2USmllFIqD2mAo5RSSqm8owGOUkoppfKOBjhKKaWUyjsa4CillFIq72iAo5RSSqm8owGOUkoppfKOBjhKKaWUyjsa4CillFIq72iAo5RSSqm8k5YAR0Q+JiKzIvIv6ShPKaWUUioV6crgfBx4RZrKUkql0ZUrV/D5fLhcLnw+H1euXMl2lVSW6TmhToK0LLZpjPmmiPjSUZbazRjD1tYWm5ubbG9vEw6HERHcbjdFRUWUlpZSUFCQ7WqqdJmchM3NQ701HA4TDAbZ2toiFArxmS99iV9/97vZsMsbHR3lwn33wews5++5Jz31bWmB4uL0lKV2Gx+HpaW0FXfli1/kwsMPE4g5J+67917Wv/c9/vMrXkFRURHFxcW4XIe8/z19Gurq0lZflV2hUIiNjQ22trYIh8MAuFyu6LWnsLAwyzXcmxhj0lOQFeB8wRjz/Xs8fwG4AOD1en9wdDTu4p/KZoxhdXWVhYUFVlZW2N7e3vf1ZWVlVFVVUVdXx5//+Z9z8eJF/H4/Xq+XS5cucf78+SOquUrJk0/Cj/1Y2orzAfE+ae3ASLp2cs898PnPp6s0FWtiAtraIE3f03AE50RrK4yNpaMkdUSuXLly2zXjHe94By972ctYXl5mY2Nj3/cWFxdTWVlJXV0dHo8HETmiWt8iIs8YY87t3J6WDE4ijDGXgcsA586dS9+nNc9EIhHm5+eZmZlha2uLgoICKisrKS8vp7S0NHpnZYwhFAoRDAYJBAKsrKwwOTnJY489xqVLl9iMvWO/cAFAg5xcMDVl/fve90Jj474v3dzcZHllhcD6OmB90ZTY50ih243L5cJ/771x3+sH/I8+SnVVFeXl5Ye/W//d34Xp6cO9Vx1sYcEKbh56CF74wkMVEQ6HWV5eZmVlhXA4jP9tb4v7Or8IwccfZ2triy37e2VrawsRoaysjJqaGoqKivbf2eOPw5e+dKh6quy4cuUKFy5cIBAIANY14/777+fixYu8+tWvprm5GY/HQ3FxMQUFBYhINFO8sbHB6uoq8/PzzM3NUVpaSlNTEzU1NVkJdHY6sgxOrHPnzpmrV6+mZb8575vfhHe+ExOJENreJhgMYozBVVBAUVERbrebRE+TSCRCx9//Pf6trV3PtRcXM3L33anXVwTe+lZ45StTL0vt9vGPw+teB4OD0NkZ9yWbm5tMTEywtLREQUEBDQ0NNDQ0xL34+Hw+4mVLW1tbefLJJ1lbW6OwsJCWlhZqa2uT/1L68R+H+Xn4x39M7n0qMd/5DjzvefAXfwE/9VNJvTUSiTA7O8v09DThcJiqqioaGhp47nOfi9/v3/X69vZ2RkZGbtsWCASYn5/n5s2bRCIR6urqaGlp2btZ4jd/E973Pjgg46xS8KpXwXe/m7bifCMjjIZCu7Z73W5Gfb6EyjBYgXQ4HMYYE+1CUeDcOH3ta+D1pq3OO2U9g6P28IUvYJ56io1z5wiHw7hcLkpKSqxIGSASSbgoFzAWJ7gB8AeDSZW1p7/7O+jp0QAnU+w2buL0qTLGMDMzw+TkJCJCc3MzjY2N+2ZfLl26dNvdGYDH4+E973kPvb29rK2tMTExwcjICDdv3sTr9VJSUpJ4fQsKbtVZpZ/zmU2yj936+jqjo6NsbGxQWVlJS0sLHo8HgHe9611xz4lLly7tKsfj8eD1ejl9+jTT09PMzc2xtLREW1tb/IBYz4fM+/zn4exZuOuulIuKGIN/YCDuc2OhELzgBQmVI1jBRAGwtbXFRiBAOBKhuKgIj8eDK0t99NIS4IjIJ4GXAvUiMg68wxjzWDrKzneba2sUejzcuHyZlpYW6uvrU0rtefe4Yz/d3MzWV796cIr5IM3N6QmUVHx7BDhbW1sMDQ2xvr5OdXU1Xq83oc59TrPkXn2yKioqOHPmDPPz80xMTHD9+nW8Xi91iXYSdbn0fMgk59gm2IRojGF6eprJyUkKCwvp6uqiurr6ttccdE7EU1hYSFtbG/X19YyOjjIyMsLS0hI+n+/2AQ4FBVaTmjFWtlelXyRiZXHe+c6UigkEAgwNDdH41FNMx2lm9ra3Q5Kj6wQoBgojEaanpxmdnqagoIDeykpKU6rt4aRrFNVr0lHOSWKMwe/3U7qwQJ3bzZ133pl68EH8O/bS0lLuv/9+rl27RkdHB1VVVYffgV7QMivOHfvKygrDw8NWE2RHR9Lt2+fPn9/34iUiNDQ0UFVVxfDwMCMjI6ytrdHW1nZw3xyXS+/YM2mfjN7ul4YZHh5meXmZmpoavF4vbnf8r/iDzom9lJaWcubMGWZmZpiYmODatWt0dXVFs0PRekYiSWedVAIOmdHbaX5+Hr/fj9vt5tFHH+WNb3xjQhm9RLlcLpqbm6mpqWF6epriLGVwdCbjLAiFQvT39zM/P4+nqAhXUVFaghuwvrguX75Me3s7IkJ7ezsf/ehHeeihhygqKmJgYIC5ubnD70BT0Jm144I2NzdHf38/brebs2fPHq6fTIKKioro7e2lqamJ+fl5BgYGCMVpm79NQYEGvJmUYAYnGAxy/fp1lpeXaW1tpaOjY8/gJlUiQlNTE2fOnMEYQ19fH8vLy9aTzoVXvyMyI8mM3k7GGMbHxxkdHaW8vJyzZ89y77337rpmXL58OS2DUkpLS+no6Dj8IIYUaR+cIxYMBhkYGCAYDOLz+SgvKYE0fxHtdXd25swZhoeH8fv9bG1t0dzcnPzFUjM4mWVfGIzLxdTkJFNTU1RVVdHR0XEkcx2JCC0tLZSUlDA6OkpfXx/d3d1734FpBiezEsjgBAIB+vv7McbQ29tLRUXFkVStvLycO+64g4GBAQYGBvB6vTRogJNZKQQ4kUiE0dFRFhYWaGhooK2tLfr9f9iM3nGnGZwjFAwGuXHjBtvb2/T09Fj9HLa30x7g7KWgoICuri7q6+ut9tHRUZIeRacBTmbZF4YxO7ipq6ujq6vryCdyrKuro6enh+3tbfr6+qLTDuyiGZzMOuCCtrq6Sl9fHyLCmTNnjiy4cRQVFXHmzBkqKyvx+/2sOM0cGuBkxiEDnEgkwsDAAAsLC7S0tNwW3OQzDXCOyObmJn19fYTD4dvvskKhIwtwwLpD93q9NDU1cfPmzeSDHA1wMsrYTUI3l5ZoamqKpo2zoaKigt7eXiKRCDdu3Igf5GgGJ7P2yeCsra0xMDBAUVERd9xxB6Wl2ejGad04dXd3U1NTw/LqqrVRz4nMSKJPlsMJblZXV2lvb6epqelEBDegAc6RcDI3Tgo52iEPrADniKe6doYYnz59OvkgR/vgZIwxhqWbNwFobG6mpaUl619EHo/ntr4Wu4IczeBk1h537Ovr6/T391NYWEhvb2/a+vAdlojQ0dFBaXk5ADOTk1mtT95KMoMTG9z4fD7q6+szWLnjRwOcDNve3ubGjRtEIpHdwQ0ceQbHsTPIGR8fTyzI0QxORjid/wL2HfDp1tYs1+iW0tJSent7McbQ399/+7IhmsHJLOfYxlzQnD43TnBzXNYCEhHqTp0CYHpiIrXBDCq+JAIcYwxDQ0PR4CbhqR/yiAY4GRQOh+nv7ycUCtHT0xM/hZylAMdx+vRpTp06xezsLDMzMwe/QQOcjJiZmWF2dpZy+xyRLJ4T8ZSWltLT0xMdARgdXaUZnMzaMSw4GAzS399PQUEBPT09Wc/c7OSctxUeD36/n6U0LhKqSDjAcaYhWV5eTm5eqzyjAU6GOKnBzc1Nurq6KCsri//CLAc4IkJrays1NTVMTExw024i2ZMGOGm3sLDAxMQENTU1VDrnyTGcQ6SsrIyuri42NzcZGBggEoloBifTYjI4TnBpjKGnpydrc4vsyz5v21tbKSsri2YQVJok2AdnamqK+fl5mpqaaGhoOIKKHU8a4GSAMYbR0VHW1tbw+XxUVlbu/eIjHEW1FxHB5/NRUVHByMgIKysre79Y++Ck1erqKiMjI5SXl+Pz+ZBIxJoB9ph2AqysrKSjo4P19XVGRkYwGvBmln1sIyIMDg6ytbVFV1dXcstpHCX7wlsA0ekFBgcH9x6Fp5KTQAZnbm4uOgKzubn5iCp2PGmAkwHT09MsLCzQ3NxMbW3t/i/OcgbH4XK5ol+cQ0NDe38h6QUtbTY3NxkcHKS4uJiuri5rMqxw+Fhmb2LV1NTQ0tLC4uIigWBQA95Mso/t5PR09IbpqIeCJyVmHhy32013dzciktikkepgCUwb4Pf7qayszOoIzONCA5w0W1xcZHJyktraWpqamg5+QxZGUe3FGe4J7P2FpAFOWoTDYQYHBwHrTjc662wOBDgAjY2N1NbWsr6xQUQDnMyxP2sr6+vRFd+PtR0T/RUXF9PZ2RldSy3pebfU7fZpogoGgwwODlJSUkJnZ+eJD25AA5y0CgQCjIyMUFZWlnj0fEwyOA4nmxAMBhkeHt79haRNVCkzxjA8PMzm5iadnZ2396XIkQDHmdLdXVxMJBRifX0921XKSxtrawBUVFXR2NiY5dokIM5MxhUVFXi9XlZXVxkfH89SxfLEHhmccDjMgL0qeDYmBj2uNMBJk1AoxODgYHS24ITX3jhmAQ7c+kJaWVlhYmLi9ic1g5OyyclJlpeXaWtr290/K0cCHLCaNatqa5FIhMHBQW2CSLPt7W1m7VWem3Nl5tk9lmqor6+Pjtacn5/PQsXyRJwAxxjDyMhI9Ibp2PbPygINcNLAOcG2t7fp6upKbl6KYxjgADQ0NNDQ0MDMzAyLi4u3ntAAJyWLi4tMT09TV1cXf3RDDgU4AAVuNy6sAF+bINLHyfJF7DmHCo5JM/aB9lmLqrW1lYqKCvx+/20rV6skxAlwZmZmWFpain/DdMJpgJMGs7Oz0VV89xwOvpdjMIpqL87/x7k7ADTAScHm5ma0CdPr9ca/I8+xAIeCAiQcjjZBTOoMtmkxOTnJ6uoq9U6fm1w5J/YJcESEzs5O3G63ZvwOa0cfnLW1tegUEyd5OPheNMBJ0draGuPj41RXVx/uBDumGRywmiA6OztxuVwMDg4Sdi6+2gcnaZFIhKGhoeiX/J5NmLkW4NgBb319PXV1dUxPT+vkbilaXl6OZvkqnJnPD7F6dFYcsJq42+2ms7OT7e1ta5oBzfglJyaDs729zdDQEMXFxTpiag858qk5npy0fFFRkTWHyWFOsGM0iiqeoqIiOjo62NzcxO/367wnhzQ2NsbGxgYdHR37zz6biwGOfTHzer2UlpYyMjJCMBjMcsVy09bWFsPDw5SWluL1enfNZHzsHRDgAJSXl9Pa2hoN5FQS7PPBiDAyMkIoFKKzs1M7Fe9BA5xDctrIQ6FQar3Wj3EGx1FZWUlzczMLCwtsh0Ia4CRpYWGB+fl5Ghsbqaqq2v/FuRbgxCzV4MylBDA4OGjNdKwS5mT5jDG3snxx1qI61pxz94C/fUNDA7W1tUxOTu4/sai6nX1cl1ZWWFlZoa2tbff6hioqRz41x8/MzEx6TrAcCHAAmpqaqKysZHNri7C2nSdsc3OT0dFRysrKaGlpOfgNuRbguFxgjPWDNc1AR0cHGxsbjI2NZblyuWViYoL19XV8Pt+tkTB5mMEBqz+O1+ulpKSE4eFhtra2jqByecA+rgvLy9TU1Jy41cGTpQHOIayurkY7dqV8gh3jTsaxRISOjg7E7SYYCGgHwQTs7HeTUBNmrgU4ce7Yq6qqaGpqYn5+/uC1zRRgja6bnZ2loaGBmpqaW0/kagYngX56zpQakUgk/pxbapdtu+nXrf1uEpIjn5rjY3t7m+Hh4fR17MqRDA5YHQRLy8shHNYOgglIuN9NrFwLcJwL744LWnNzM+Xl5fj9fjY2NrJQsdzhjK7zeDy0trbe/mSeZnAcJSUltLe3R0cDqb0ZY5i0J0psOn1a+90kIC0Bjoi8QkT6RGRARN6WjjKPkytXruDz+XC5XPh8Pv7qr/4qfR27jnkn453chYUUut0sLy8zOzub7eocWzdv3oyu5ntgv5tYuRbg7NHnwsn4uVwuhoaGrBF4apcDR9flcQbHUVtbS319fXQ+FxXf9PQ0AXtl9mLtd5OQlD81IlIAfBh4JXAn8BoRuTPVco+LK1eucOHCBUZHR60IenKSS5cu8bnPfS49O8ihDA4ABQW4RaiurmZ8fJw1eyp5dYsz4qy8vDz51XxzLcDZI4MDcUbgacZvFyfL5/P5bl+yw5HnGRxHW1ubjsDbhzPHVKWz0GquBLxZlo4r6wuAAWPMEICIfAq4B7iWhrKT97GPwZNPpq24i3/5l7tm3dzY2ODihQuc/+IXU99BIJBbAY7LhUQi+Hw+rl27xtDQEHfeeeetxSJPuIi9bIHL5bL6LCXbhJlrAc4Bo2acEXiTk5OUl5frZGQxnCxfY2Mj1dXV8V90wOrRx84hAxxnzq3r168zNDTEmTNnEl/uJs85892UlJTQ5Hx+9NgkJB1XpRYgdrjEOPCvd75IRC4AF8CaLyNjRkfh6tW0FeffY0pxfyCQnv10d8NLXpJ6OUfFngfH6SD4ve99j+HhYbq7u7XDG9Yd+ebmJt3d3Yn3u4kVDufWl9c+GRxHU1MTa2trjI2NUVZWpsNasW6SnCzfvqPr9lk9+lg6ZIADVn8cn8/H0NAQExMTtLW1pblyuceZjiQcDtPb20vBt79tPZFL3xFZlI4AJ95VbVcu2hhzGbgMcO7cuczlqt/5TusnTdra2/H7/bu2e9vb4caNtO0nZ8RM9OfxeGhra8Pv9zM9Pc3p06ezXLnsOnS/m1h5lsEBqz+Oz+eL3p2fPXv2RHeQDIfDDA0NRbMW+94YnJAMjqOmpia6KGd5efntI8pOoKmpKVZXV2lvb6e0tDT3At4sS8enZhyIDbVbgbxZkOatb33rrtVZPR4Ply5dylKNsmzHUg319fXRCbtW7Q5wJ1HsHXnS/W5i5VqA41x4D5jYrbCwkM7OToLB4IkegWeMwe/3s7m5SUdHx8EL8+baBS3FAAegpaUFj8dz4vvjrKysMDU1RW1tLXV1ddbGXAt4sywdR+lbQI+IdIhIEfCzwBNpKDfrVlZWuPvuu3n3u98dHRLe3t7O5cuXOX/+fLarlx07lmqInbBraGiIbXv145Mk9o78UP1ubi8sdy5mkNQFzWmOWVpaYm5uLsMVO57m5+dZWFigubk5sZWfc+2CloYAJzazdVJnxHamIykpKbl9Yd5cOx+yLOWjZIwJAQ8AXwauA582xjybarnZ5qwJU1JSwoMPPsjIyAiRSISRkZGTG9xA3NXECwoK6OzsJBwOn8gJu5x+N0nNd7OXXAtwEszgOJzlKsbHx1lfX89gxY6fQCDA2NgYlZWVNDU1JfamE5jBAWtGbJ/Px8bGBuP23C8nhTGGoaEhIpHI7ulINMBJSlqOkjHmr40xvcaYLmNMzrfd7HuCnXR7LLZZWlpKe3s7q6urTE1NZaFiRyd2XqS2tjYef/xxTp8+ndgd+UFyLcBJ8oLm9McpLCxkaGjoxMyIHQqFGBwcxO12J5flcz5rudKBP00BDkB1dTWNjY3Mzc2xsLCQcnm5YnJykrW1tejitbfJtYA3yzQMjMNZEybasUvdsqMPTqy6ujrq6uqYmprK2wX0ds6LND4+zqVLl3jqqafSs4NIJLe+vJLM4IA1I3ZnZyfb29snoj+OMYaRkRG2trbo7OxMbkqFXBtVl8YAB6z+OGVlZfzhH/4hXq83OtnqlStX0lL+cbO0tMT09DT19fW3+t3E0gxOUnTykh0WFxeZmZmJrnardtgjg+Pwer2sr68zPDzM2bNnU2+ySdXmJnz1q5CmxfwuvvnNu+ZF2tzc5OKb38z5HZ3RD2VuDtrbUy/nqCQwTDyesrIyWltbGRsbY2ZmJvEmmxw0PT3N8vIyra2tlJeXJ/fmXA14V1YgDVkXAf7h61/n0UceYdPucDw6OsqF++6D9XXO/8zPpLwPysog3iSLR8zpgF9aWrr3EHkNcJKiAU6MfdeEUZYDAhyXy0VXVxfXr19neHiY3t7e7M6P88lPwutfn7bidk8YYG+fn4d0fNkC/OAPpqeco5DAMPG9NDQ0RNcgKisro8KZpTWPrKysMDk5GR3+nLRcy+A4Qf4b32j9pME7gM0d2wIbG1z8lV/h/K/8Suo7OH0axsezepydJTsAurq69p7kUJuokqIBju3ANWGU5YAAB24toDc8PMzExER2g0VnbZu//VtI9u45Du/LX85onD5G3tOn4ctfTrl8wJr8MVccMoMDREclBgKBaMbvwGHTOSR2oMKhF+bNtQxOYyN8+tOQxn54/je9Kf52gA9+MLXCv/Y1eOIJK9ObxQkox8fHCQQCdHZ2xl+yw6EZnKRogIPVRj46OsrGxgbd3d37n2An3T59cGLV1taytrbGzMwM5eXle09Fn2mb9r3f85+fljT02x95hAceeIDNzVv3lB6Ph0u/+7vwnOekXH7OSSGDY73dGoHnzIjd09OTFzNiOzdMkUiErq6uww9UyLUMDsCrX53W4rzvfz+jo6O7t7e3pydL9MQTsLGRtQBnfn6eubk5Tp06dfDEhhrgJEWPEjA7O8vCwgKnT58+/Ay0J0UCGRxHa2tr9ifscgKRNPQFCgaDnDt3jocffjg6N4XOi3T4DI7D4/Hg9XrzagSeMwze5/Ptmig0KbmWwcmAS5cu7Vreo6SkhEceeST1wp2/zebORrCjsba2ht/vp6KiIrFMtwY4STnxR2l5eZnx8XGqq6tP/FIDCUkiwHEm7AKid7NHbnPT+hJLMSvgLKJpjOFNb3oTo6OjOi8SpJzBcTijRvJhBN7s7Cxzc3M0NjamvtRALmZw0uz8+fNcvnw52szX1tbGxYsXedGLXpT6CDxnlGwWApytrS0GBwejs3wnlLnUPjhJOdGfnM3NTYaHhyktLcXn8+VFajzjEmyicjgTdjn9LI58SLAT4KTAGea7sbFBR0dHanfk+SYNGRyHM+/Hhz70oZwbEhw7N9Jdd93F008/vf8imonSDA5gBTnOZKt+v5/77ruPpaUlJidTXBUoSxkc54YpEonQ3d2d+NQBmsFJyok9SqFQiIGBAUQktTbykyaJDI6jurqa1tZWlpaWmJiYyFDF9pCGAGdycpLFxUWam5u1CXOnNGVwwMr4fetb3+KRRx5hbGws2jfuwoULxzrI2Tk30vT0NG9/+9v5xCc+kXrhmsGJ69SpU9TX1zM9Pc38/PzhC8pCgOPcMAUCATo6OpKba00DnKScyE7GkUiEgYEBtra26Onp0U7FyThEgAPWF1IwGGRmZoaSkhLq6+szULk4Ugxw5ufnoxNv5fNcLYfmfNE+/jh885spF/eO3/7t2zpwg7XEwcUHH+R8OtavCofhn//Z6lSaJhe/8IVdcyMFAgEuXrjA+SdSXJbv6lXN4MThrIEXDAYZHR2luLj4cNMMON8NaTwfDjIxMcHi4iItLS3JD77QACcpJy7AMcYwPDzM+vo6nZ2deTn3RkYdMsBx2s6dL6TCwsKjyYakEOCsrKwwOjpKZWXl7QveqVtaW8Hthg98IC3F7TnP0OIi/NqvpWUfVFdDGoNV/47g5rbt3/1uaoUXFcHLXpZaGXnKmdKjr6+PwcFBzpw5k/zM80ecwZmdnY1OJNvY2Jh8AdoHJyknKsAxxjA2NsbS0hJtbW2pdwA8iZLsgxNr5xdSb29v8jO7Jmtz81DDw9fW1hgcHKS0tDTxDoAn0Q/8ACwvp22maO9znsNonMUV21pbrcxLOpSXW0FZGkQiEU63tcXtC+Jtb4fr19OyHxWf2+2mu7ubvr4+bty4wR133JFcRv4IA5zFxUXGxsaoqqqira3t8PMigWZwEnRijpIxhomJiejohkPNKqoOncFxFBQU0NPTQ1FREf39/btS+2l3iAxOIBBgYGCAwsJCuru7tX/WQTweKyuShp9L73lP3CHBD731rZiqqvTsJ03BjZMN/tVf/dVdmQOPx8OlSzm/7nBOKC4upqenB2MMN27cYCuZYPuIRlEtLS0xPDxMWVlZajdMGuAk5UQcJWMMk5OT0dRgWkY3nFTOByuF0VCFhYX09vbidru5ceMGG5ls/w4GkwpwNjY26O/vx+VyRQMxdXR2Dgn2er38zu/8Di9+8YtTHzGTRk5ws7S0xH333cdHP/rRaJ1P/NxIWVBaWkpPTw+hUIj+/n62t7cTe2OGMjixo+q8Xi8f/vCHo3VMaZZ8baJKSt4HOE5w43QUPXRqUFkOsXp0PEVFRdEP+wc+8IHMDQtOIoMTCAS4ceMGAL29vdr5PEtihwSPjo7y4IMPRkfMjI+PZ331cWeWYqejaGNj4211PvFzI2VJWVkZ3d3dbG1t0dfXl1gmJwOdjHeOqhsbG+PRRx/l6tWrqWeDNYOTlLzug2OMwe/3Mz8/T11dnXYUTQfnAzoxASmuG1QCfPvrX+eR3/7t3SsFLy1x/qd/OsXKAqurCXUoXV1dZWBgALfbTU9Pj851c4w4mRyAmZkZwuFw1j7L4XCY4eHh6Orgh+ooqjKmoqKCnp4eBgYG6OvrO/iz7Dz3//4ffPWraanDxV//9V1N75ubm7z9LW/h51Pt3P7ss9a/GuAkRLJxN3Tu3Dlz9erVjO4jEolEU8hNTU00NzdrcJMOv/d78Ja3pK04H7B7lRloB0bStZPXvhb+9E/3fHpxcZHh4WGKioro7e3VZqljKjYbW11djc/nO9L+Uc7Ms4FAAK/XS0NDw5HtWyUnEAjQ398PsP9o2c1NqKlJaxOVC4h3VRUgLXO5u92wuJiWxYPzhYg8Y4w5t3N7XmZwgsEgQ0NDBAIB2tratENxOr3+9VZHzVAoLcX53/CG+NsBPvKRtOxjr2G2xhimpqaYmpqirKyMrq6uvFrNOt+ICC0tLbjdbsbHx+nr66Orq+tImhKdjufhcJju7m6d8PGY83g8nDlzhoGBAfr7+/F6vfHn3iopsbIiaVoDLRKJ0PzTP81EnMkHvY2N8NnPpr6TxkYNbhKUdxmclZUVhoaGAPD5fNlbxVolxOfzxV0puLm5mZGRkYwFHNvb24yMjLCyshJtvkyp8586Ukf1OTfGMDc3x/j4eHRI8s5RXur4CoVCDA8PRz/nbW1tGcv6OUv/fPazn+Vd73rXbYMnPB6PdjzPoL0yOHn3jb6yskJhYSF33HGHBjc5IN5KwaWlpdx///08++yzLC4uprVTqTGGxcVFrl27xurqKl6vl/b2dg1uckxlZSVnz56lqKiIwcFBRkZGCKdhPaxYwWCQwcFBxsbGqKio4OzZsxrc5BgnKG1qauLmzZtcv36d1dXVtO7DGMPs7CzXrl0jGAzywAMP6Ki6YyLvMjjGGCKRiM5dkkOuXLnCxYsX8fv9eL1eLl26xKte9SqGh4cJBAJUVFTQ1taW/CylO2xsbDA2Nsbq6iqlpaXJrwOjjp1IJMLU1BTT09O43W6am5upr69Pqb9dOBxmbm6OKbvZorm5mVOnTmkfvhy3urrKyMgIW1tb1NbW0tLSknJ/u9XVVcbGxtjY2KCqqor29nZt5s6CvTI4KQU4IvJq4GHgLPACY0xCUctRdDJWuc9pHpicnCQcDlNdXU1jYyNlZWUJX2yMMQQCAaanp1laWqKgoIDm5mYaGhr0gpVH1tfXGR8fZ21tjeLiYk6dOkVdXV1SNzrb29vcvHmTmZkZQqEQVVVVeL1e7XSeR8LhMNPT08zMzABQV1dHY2NjUqMmjTGsrKwwMzPD6uoqhYWFtLa2UlNTo98pWZKpAOcsVsfwPwLeogGOyoRQKMTMzAxzc3OEw2GKi4upqamhoqICj8eDO2ZmWmMM4XCYQCDA6uoqi4uLBINBCgoKaGho4NSpU3qHlaeMMSwtLTE9PU0gEMDlclFZWUl1dTVlZWUUFxffdgGKRCIEg0HW1tZYXl5meXkZsIYaNzc3Z34ZEZU1wWCQ6elpbt68iTEGj8dDdXU1FRUVlJaW3hYYG2MIhUKsr69Hv1O2t7cpLCzk1KlTnDp1Spu4sywjAU5M4d9AAxyVYeFwmIWFBRYXF29rR3e5XNEgJxQKEYmZhLCiooLa2lpqamq02fKEMMawvr7OzZs3WV5ejs5qKyIUFBTgcrmIRCKEYkYCFhYWUltbS11dnTZbniDb29vR75T19fXo9oKCAgoKCqLBjXOdFBEqKyuj3ymasTkesj5MXEQuABeA6KRdSiXDycI0NDQQCoUIBAIEAgG2t7cJhUKICC6Xi6KiIjweD2VlZRrUnEAiQnl5OeXl5Rhj2NjYIBAIEAwGowGwy+WisLCQ4uJiysvLKSoq0ovVCVRYWEhjYyONjY1sb2+zvr7OxsYG29vb0Rslt9tNYWEhZWVleDwezdbkkAMDHBF5Eog3/eJFY8xfJrojY8xl4DJYGZyEa6hUHG63m8rKSiorK7NdFXWMiQgej0dHP6kDFRYWUl1draNv88iBAY4x5kePoiJKKaWUUumiuTallFJK5Z2UAhwR+SkRGQfuBr4oIl9OT7WUUkoppQ4vpU7GxpjPAZ9LU12UUkoppdJCm6iUUkoplXc0wFFKKaVU3tEARymllFJ5RwMcpZRSSuUdDXCUUkoplXc0wFFKKaVU3tEARymllFJ5RwMcpZRSSuUdDXCUUkoplXfEmKNf2FtE5oDRI99x6uqB+WxXIo/p8c0sPb6Zp8c4s/T4ZlauHt92Y0zDzo1ZCXBylYhcNcacy3Y98pUe38zS45t5eowzS49vZuXb8dUmKqWUUkrlHQ1wlFJKKZV3NMBJzuVsVyDP6fHNLD2+mafHOLP0+GZWXh1f7YOjlFJKqbyjGRyllFJK5R0NcJRSSimVdzTASZCIvEJE+kRkQETelu365BMRaRORp0Tkuog8KyJvynad8pGIFIjIt0XkC9muS74RkWoR+YyIfM8+j+/Odp3yiYj8mv3d8C8i8kkRKcl2nXKdiHxMRGZF5F9ittWKyFdFpN/+tyabdUyVBjgJEJEC4MPAK4E7gdeIyJ3ZrVVeCQEPGWPOAi8E/ose34x4E3A925XIUx8EvmSMuQO4Cz3OaSMiLcAbgXPGmO8HCoCfzW6t8sLHgVfs2PY24GvGmB7ga/bvOUsDnMS8ABgwxgwZY7aATwH3ZLlOecMYM2WM+Sf78SrWxaElu7XKLyLSCvx74I+zXZd8IyKVwA8BjwEYY7aMMUtZrVT+cQOlIuIGPMBkluuT84wx3wQWdmy+B/gT+/GfAD95lHVKNw1wEtMCjMX8Po5egDNCRHzA84B/yHJV8s3vA78BRLJcj3zUCcwB/9NuAvxjESnLdqXyhTFmAngf4AemgGVjzFeyW6u81WiMmQLrxhM4leX6pEQDnMRInG06vj7NRKQc+CzwZmPMSrbrky9E5CeAWWPMM9muS55yA88H/tAY8zxgnRxP7R8ndj+Qe4AOoBkoE5HXZrdWKhdogJOYcaAt5vdWNEWaViJSiBXcXDHG/EW265NnXgz8RxEZwWpe/Xci8nh2q5RXxoFxY4yTdfwMVsCj0uNHgWFjzJwxZhv4C+BFWa5TvpoRkdMA9r+zWa5PSjTAScy3gB4R6RCRIqwObk9kuU55Q0QEq//CdWPM+7Ndn3xjjPlNY0yrMcaHde5+3Rijd8BpYoyZBsZE5Iy96UeAa1msUr7xAy8UEY/9XfEjaCfuTHkC+EX78S8Cf5nFuqTMne0K5AJjTEhEHgC+jNWD/2PGmGezXK188mLg54F/FpHv2Nv+mzHmr7NXJaWS8iBwxb4BGgJel+X65A1jzD+IyGeAf8Iacflt8mxJgWwQkU8CLwXqRWQceAfwHuDTInIvVmD56uzVMHW6VINSSiml8o42USmllFIq72iAo5RSSqm8owGOUkoppfKOBjhKKaWUyjsa4CillFIq72iAo5RSSqm8owGOUkoppfLO/wfsqL8kM420pQAAAABJRU5ErkJggg==\n", "text/plain": [ "\n", " | \n", " | \n", " | \n", " | \n", " | \n", " | \n", " | \n", " | \n", " |