{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Populating the interactive namespace from numpy and matplotlib\n" ] } ], "source": [ "%pylab inline\n", "import numpy as np\n", "import numpy.matlib\n", "import matplotlib.pyplot as plt\n", "from scipy import linalg" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## IoT devices communicating with the HOMEBOX\n", "Assuming that the number of devices at home is at most 2000. Each of them have a random sequence associated with them. Let us generate these random sequences." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Algorithm 1: Extracting signals purely through correlation" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "# Defining signature of each signal\n", "sign_length = 400 \n", "max_users = 2000\n", "sign_matrix = 2*np.random.randint(2,size=(sign_length,max_users)) - 1" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "scrolled": false }, "outputs": [], "source": [ "test_vec_1 = np.roll(sign_matrix[:,23],100)\n", "\n", "# Correlating with song 23\n", "correl_mat_t1 = (1.0/sign_length)*((linalg.circulant(sign_matrix[:,23]).transpose()))\n", "sign_correlation_t1 = (correl_mat_t1.dot(test_vec_1))\n", "\n", "# Correlating with song 20\n", "correl_mat_t2 = (1.0/sign_length)*((linalg.circulant(sign_matrix[:,20]).transpose()))\n", "sign_correlation_t2 = (correl_mat_t2.dot(test_vec_1))" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(-0.2, 1)" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig = plt.figure(figsize=(20, 5))\n", "\n", "plt.subplot(1, 3, 1)\n", "plt.plot(sign_correlation_t1,'b')\n", "plt.title('Cross-correlation of song 23 (shifted by 100) with itself')\n", "plt.xlabel('Shift index')\n", "plt.ylabel('Normalaized Correlation Value')\n", "plt.ylim((-0.2,1))\n", "\n", "plt.subplot(1, 3, 2)\n", "plt.plot(sign_correlation_t2, 'y')\n", "plt.title('Cross-correlation of song 23 (shifted by 100) with song 20')\n", "plt.xlabel('Shift index')\n", "plt.ylabel('Normalaized Correlation Value')\n", "plt.ylim((-0.2,1))\n", "\n", "plt.subplot(1, 3, 3)\n", "plt.plot(sign_correlation_t1,'b')\n", "plt.plot(sign_correlation_t2, 'y')\n", "plt.title('Both plots put together')\n", "plt.xlabel('Shift index')\n", "plt.ylabel('Normalaized Correlation Value')\n", "plt.ylim((-0.2,1))" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "index_present = [40, 100, 312] #devices\n", "signal_stengths = [10, 10, 8] # alphas\n", "shifts = [13, 20, 45] # taus" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "# Defining the signal y\n", "combosignal = signal_stengths[0]*np.roll(sign_matrix[:,index_present[0]],shifts[0]) + signal_stengths[1]*np.roll(sign_matrix[:,index_present[1]],shifts[1]) + signal_stengths[2]*np.roll(sign_matrix[:,index_present[2]],shifts[2])" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "Text(0,0.5,'Normalized Correlation Value')" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Trying correlation to see if we can extract the signal\n", "sign_correlation = np.zeros((sign_length, max_users))\n", "max_correl = np.zeros(max_users)\n", "index_max_correl = np.zeros(max_users)\n", "\n", "#find the max correlations for each user ID\n", "for j in range(max_users):\n", " correl_mat = (1.0/sign_length)*((linalg.circulant(sign_matrix[:,j]).transpose()))\n", " sign_correlation[:,j] = (correl_mat.dot(combosignal))\n", " max_correl[j] = max(abs(sign_correlation[:,j]))\n", " index_max_correl[j] = argmax(abs(sign_correlation[:,j]))\n", "plt.plot(max_correl)\n", "plt.xlabel('User ID')\n", "plt.ylabel('Normalized Correlation Value')" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "100 40 312\n" ] } ], "source": [ "max_1 = int(argmax(max_correl))\n", "max_correl[max_1] = 0\n", "max_2 = int(argmax(max_correl))\n", "max_correl[max_2] = 0\n", "max_3 = int(argmax(max_correl))\n", "\n", "print(max_1, max_2, max_3)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Algorithm 2: Extracting signals through correlation and least squares" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "20\n", "13\n", "45\n" ] } ], "source": [ "shift_1 = int(index_max_correl[max_1])\n", "print(shift_1)\n", "first_vector = np.roll(sign_matrix[:,max_1], shift_1)\n", "\n", "shift_2 = int(index_max_correl[max_2])\n", "print(shift_2)\n", "second_vector = np.roll(sign_matrix[:,max_2], shift_2)\n", "\n", "shift_3 = int(index_max_correl[max_3])\n", "print(shift_3)\n", "third_vector = np.roll(sign_matrix[:,max_3], shift_3)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "def least_squares(A, b):\n", " return np.linalg.inv(A.T.dot(A)).dot(A.T).dot(b)" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[10. 10. 8.]\n" ] } ], "source": [ "A = (np.vstack((first_vector.T, second_vector.T, third_vector.T))).T\n", "b = combosignal\n", "\n", "alpha = least_squares(A,b)\n", "print(alpha)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Trial: 2" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [], "source": [ "sign_length = 400 \n", "max_users = 2000\n", "sign_matrix = 2*np.random.randint(2,size=(sign_length,max_users)) - 1" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Out of 2000 devices at home, for the duration of interest, only 4 devices are awake and sending something. They are user numbers [40, 100, 312, 350]. We will give them varying signal strength." ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "index_present = [40, 100, 312, 350] # device values\n", "signal_stengths = [100, 10, 8, 0.02] # alpha values" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Creating a combo received signal at the homebox with shifts" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [], "source": [ "shifts = [13, 20, 45, 34] #taus\n", "combosignal = np.zeros(sign_length)\n", "for i in range(len(index_present)):\n", " signal_to_be_added = signal_stengths[i]*np.roll(sign_matrix[:,index_present[i]],shifts[i])\n", " combosignal = combosignal + signal_to_be_added" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we will look for different signatures in the combo signal" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [], "source": [ "sign_correlation = np.zeros((sign_length, max_users))\n", "max_correl = np.zeros(max_users)\n", "index_max_correl = np.zeros(max_users)\n", "\n", "\n", "#find the max correlations for each user ID\n", "for j in range(max_users):\n", " correl_mat = (1.0/sign_length)*((linalg.circulant(sign_matrix[:,j]).transpose()))\n", " sign_correlation[:,j] = (correl_mat.dot(combosignal))\n", " max_correl[j] = max(abs(sign_correlation[:,j]))\n", " index_max_correl[j] = argmax(abs(sign_correlation[:,j]))" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0,0.5,'Normalaized Correlation Value')" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot(max_correl)\n", "plt.xlabel('User ID')\n", "plt.ylabel('Normalaized Correlation Value')" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "40" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "max_1 = int(argmax(max_correl))\n", "max_1" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "13" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#ind = np.argpartition(max_correl, -3)[-3:]\n", "#ind\n", "shift_1 = int(index_max_correl[max_1])\n", "shift_1" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We see only 1 peak when we should have seen three/four.. Lets assume that a genie told us the level of the highest signal to be 100. We shall now remove it from the signal to see if we can find the other peaks." ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [], "source": [ "residue = combosignal - 100*np.roll(sign_matrix[:,max_1], shift_1)" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0,0.5,'Normalaized Correlation Value')" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYIAAAEKCAYAAAAfGVI8AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzt3XecFPX5wPHPcxxVuiCKlAMsCIiKJ0FEjC32rmiMJWokTWOMPw1GscbYjS2RYGzBEmPBhiAdRAQ8eu8gnQMUDo7j2vP7Y2aX3b3dvbkys8ft83697nW7s3M7z83OzvNt8x1RVYwxxqSvjFQHYIwxJrUsERhjTJqzRGCMMWnOEoExxqQ5SwTGGJPmLBEYY0yas0RgjDFpzhKBMcakOUsExhiT5jJTHYAXrVq10qysrFSHYYwxB5SZM2duU9XW5a13QCSCrKwscnJyUh2GMcYcUERkrZf1rGnIGGPSnCUCY4xJc5YIjDEmzVkiMMaYNGeJwBhj0pwlAmOMSXOWCIwxJs1ZIkhga14BXy3cnOowjDHGd5YIErju39P59bCZFBSVpDoUY4zxlSWCBNZuz091CMYYEwhLBMYYk+YsERhjTJqzRJCApjoAY4wJiG+JQEReF5GtIrIgYllLERkjIsvd3y382r4xxhhv/KwRvAmcG7NsEDBOVY8ExrnPayRJdQDGGBMQ3xKBqk4GdsQsvgR4y338FnCpX9s3xhjjTdB9BG1UdROA+/uQgLdvjDEmRo3tLBaRgSKSIyI5ubm5gW/fOouNMeki6ESwRUQOA3B/b020oqoOVdVsVc1u3brcW24aY4yppKATwWfAje7jG4FPA96+Z9ZZbIxJF34OH30P+BY4WkTWi8gtwBPA2SKyHDjbfW6MMSaFMv16Y1X9eYKXzvRrm8YYYyquxnYWG2OMCYYlAmOMSXOWCIwxJs1ZIjDGmDRnicAYY9KcJQJjjElzlgiMMSbNWSIwxpg0Z4nAGGPSnCWCBGz2UWNMuvCUCESko4ic5T5uKCJN/A2r5lDLCMaYWq7cRCAitwIfAv9yF7UDPvEzqJrAZh81xqQLLzWC3wOnALsAVHU5dmcxY4ypNbwkgn2qWhh6IiKZWBO6McbUGl4SwSQR+QvQUETOBj4APvc3rNSzTGeMSRdeEsEgIBeYD/wa+BK438+gahK1lGCMqeXKvTGNqpYCr7o/acM6i40x6aLcRCAiq4nTUqKqnX2JyBhjTKC83KoyO+JxA+AqoKU/4RhjjAlauX0Eqro94meDqj4PnBFAbCllPQPGmHThpWmoV8TTDJwagl1ZbIwxtYSXpqFnIx4XA2uAAb5EU4NYZ7ExJl14GTV0ehCBGGOMSY2EiUBE/pTsD1X1ueoPxxhjTNCS1QjSph8gHusaMMaki4SJQFUfDjKQmsoSgjGmtvMyaqgBcAvQHec6AgBU9WYf40o56yw2xqQLL3MNDQMOBc4BJuHcjyDPz6CMY8GGnaiNXzXG+MxLIjhCVQcDe1T1LeAC4Fh/w0q9VJ9+v16ey4UvTeHtaWtTHIkxprbzkgiK3N8/ikgPoBmQ5VtEBoA12/MBWLLZKl/GGH95uaBsqIi0wJl6+jOgMTDY16hqEGuaMcbUdsmuI2ijqltU9d/uoslA2sw4ap3Fxph0kaxpaK6IjBGRm0WkWWARGWOMCVSyRHA48AxwKrBMRD4RkatFpGEwoaWWNQgZY9JFwkSgqiWq+pWq3gS0B94ALgVWi8g7QQVojDHGX15GDaGqhcAiYDGwC+jmZ1A1ScpqBtZJbYwJSNJEICIdRORuEZkFfAHUAS5R1ROqslERuVNEForIAhF5z716uUaxzmJjTLpImAhEZCrwNdAGGKiqR6vqg6q6uCobFJHDgT8A2araAye5XFOV96yVxFKRMSYYya4juBeYrP4MpM8EGopIEdAI2OjDNqrEGmaMMekiWWfxJD+SgKpuwBmN9D2wCdipqqOrezsHPOsjMMYExFNncXVyr1K+BOgEtAUOEpHr4qw3UERyRCQnNzc36DDD7HxsjKntAk8EwFnAalXNVdUi4GOgb+xKqjpUVbNVNbt169aBB5nyFnrrIzDGBMTL/QjqA1fgTDQXXl9VH6nkNr8H+ohII2AvcCaQU8n3MsYYU0VeJp37FNgJzAT2VXWDqjpdRD4EZgHFwGxgaFXft7pZi5AxJl14SQTtVPXc6tyoqj4IPFid72mMMaZyvPQRTBWRWn8jmoSsamCMqeW81Aj6Ab8UkdU4TUMCqKr29DWyFLOuWmNMuvCSCM7zPYoayCoCxph0UW7TkKquBZoDF7k/zd1lxhhjaoFyE4GI3AG8Axzi/rwtIrf7HZgxxphgeGkaugX4iaruARCRJ4FvgZf8DKym0FQ1EtklzcaYgHgZNSRAScTzEtKgL7XW/4PGGOPyUiN4A5guIsPd55cCr/kXUs2Q8vK4TTFhjAlIuYlAVZ8TkYk4w0gFuElVZ/sdmDHGmGAkTAQi0lRVd4lIS2CN+xN6raWq7vA/vDRmfQTGmIAkqxG8C1yIM8dQ5FlJ3OedfYyrxrDzsTGmtkuYCFT1Qvd3p+DCqTlS3kJvfQTGmIB4uY5gnJdltY1VBIwx6SJZH0EDnPsJt3LvKhYqojbFubOY8ZO1SRljApKsj+DXwB9xTvoz2Z8IdgH/8DmuGsNOx8aY2i5ZH8ELwAsicruqpsVVxJFS3kJvfQTGmIB4uY7gJRHpAXQDGkQs/4+fgaU9axoyxgTEyz2LHwR+ipMIvsSZlnoKUKsTQU05DVvFwBjjNy9zDV2Jc4P5zap6E3AcUN/XqEyYVQyMMX7zkgj2qmopUCwiTYGtpMnFZACaqjOxVQWMMQHxMulcjog0B17FGT20G5jha1Q1QMpPw1YVMMYExEtn8e/ch0NEZBTQVFXn+RtW6tWU07BVDIwxfkt2QVmvZK+p6ix/QjKRrGJgjPFbshrBs0leU+CMao7FRLKqgDEmIMkuKDs9yEBqqpQVyK0qYIwJiJdJ5xqJyP0iMtR9fqSIXOh/aKll5XFjTLrwMnz0DaAQ6Os+Xw/81beIaoiUl8etacgYExAviaCLqj4FFAGo6l6swGyMMbWGl0RQKCINcQvJItIF2OdrVMb6CIwxgfFyQdmDwCigvYi8A5wC/NLPoGoSOx8bY2q7pIlARARYAlwO9MFpErpDVbcFEFtKpbzty/oIjDEBSZoIVFVF5BNVPREYEVBMNULKKwJWFTHGBMRLH8E0ETnJ90hMXFYxMMb4zUsfwenAr0VkLbAHp9VEVbWnr5EZwCoGxhj/eUkE5/keRQ2mqWoksqqAMSYg5XUWZwAjVLVHdW7Undb630APnOb4m1X12+rcxgHPqgLGmIAk7SNwb0gzV0Q6VPN2XwBGqWpXnDueLa7m9681rGJgjPGbl6ahw4CFIjIDp48AAFW9uDIbdO9y1h/3WgRVLcSZwsLEYRUDY4zfvCSCh6t5m52BXOANETkO565nd6jqnuR/lmasKmCMCUi5w0dVdRLORWVN3J/F7rLKygR6Aa+o6gk4tYxBsSuJyEARyRGRnNzc3CpsropSVSK3qoAxJiBepqEegHOP4quAAcB0EbmyCttcD6xX1enu8w9xEkMUVR2qqtmqmt26desqbO7AZhUDY4zfvDQN3QecpKpbAUSkNTAW5wReYaq6WUTWicjRqroUOBNYVJn3SgdWMTDG+M1LIsgIJQHXdrxdkZzM7cA7IlIPWAXcVMX3M8YYU0leEsEoEfkKeM99fjUwsiobVdU5QHZV3iNdWNOQMcZv5SYCVb1bRC4H+uFMLzFUVYf7HlkNYS0zxpjaLmEiEJEjgDaq+o2qfgx87C7vLyJdVHVlUEGmM+sjMMb4LVlb//NAXpzl+e5rxhhjaoFkiSBLVefFLlTVHCDLt4hMFOsjMMb4LVkiaJDktYbVHYgxxpjUSJYIvhORW2MXisgtONNCpIVUt9GnevvGmNov2aihPwLDReQX7D/xZwP1gMv8DswYY0wwEiYCVd0C9BWR03HuGwDOvQnGBxKZAayPwBjjPy/XEUwAJgQQizHGmBSo6lQRxmfWR2CM8ZslgnKk7J7FxhgTEEsENZz1ERhj/JZsiok8kky1o6pNfYnIRLGmIWOM35KNGmoCICKPAJuBYTiTzv0C505lxhhjagEvTUPnqOo/VTVPVXep6ivAFX4HZhzWNGSM8ZuXRFAiIr8QkToikuFeYFbid2A1hTXNGGNqOy+J4FqcexVvcX+ucpeZAFgiMsb4zcsFZWuAS/wPxRhjTCqUWyMQkaNEZJyILHCf9xSR+/0PzYD1ERhj/OelaehV4F6gCMC9R8E1fgZljDEmOF4SQSNVnRGzrNiPYGqiVDfRWx+BMcZvXhLBNhHpgntOFJErgU2+RmWMMSYw5XYWA78HhgJdRWQDsBq4zteoTJj1ERhj/OZl1NAq4CwROQjIUNV4N7Q3xhhzgPIyaqhERJ4A8kNJQERm+R5ZDaHWSG+MqeW89BEsdNcbLSIt3WXWYGGMMbWEl0RQrKr34Awj/VpETiT1g2mMMcZUEy+dxQKgqv8TkYXAe0AHX6MyxhgTGC+J4FehB6q6UET6AZf6F5IxxpggJbsxzRmqOh7oKCIdY17e7W9YNYf1FRtjartkNYLTgPHARXFeU+BjXyIyxhgTqGR3KHvQ/X1TcOEYY4wJmpc+AkTkAqA70CC0TFUf8SsoY4wxwfFyQdkQ4GrgdpwRRFcBsX0GxhhjDlBeriPoq6o3AD+o6sPAyUB7f8MyxhgTFC+JYK/7O19E2uLcl6CTfyEZY4wJkpdE8IWINAeeBmYBa4D/VnXDIlJHRGaLyBdVfS9jjDGV52X20Ufdhx+5J+0GqrqzGrZ9B7AYaFoN72WMMaaSkl1QdnmS11DVSl9HICLtgAuAx4A/VfZ9jDHGVF2yGkG8C8lCqnpB2fPAPUCTRCuIyEBgIECHDqmb2siuLDbG1HbJLijz5UIyEbkQ2KqqM0Xkp0m2PxTnzmhkZ2fb6dgYY3ySigvKTgEuFpHz3fdrKiJvq6rd/tIYY1Ig8AvKVPVeVW2nqlnANcB4SwLGGJM6dkGZMcakOS9NQ7EXlG2nmi4oU9WJwMTqeC+/qN2MzRhTy3lJBLEXlCnwb1+jMsYYE5hUXlBmjDGmBig3EYhIHZyLv7JC67sXlD3nb2jGGGOC4KVp6HOgAJgPlPobTg1iXQPGmDThJRG0U9WevkdSQ9mVxcaY2s7L8NGRIvIz3yOpaSS1m7f8Y4wJipcawTRguIhk4NyLQABVVZs11BhjagEvieBZnIvI5qtaQ0lQUlwhMcakES9NQ8uBBWmXBNLrvzXGpDEvNYJNwEQRGQnsCy1Ml+GjqcoHloeMMUHxkghWuz/13J/0YG0zxpg0kTQRuBeTNVbVuwOKx7gsDxljgpK0j0BVS4BeAcVijDEmBbx0Fs8Rkc9E5HoRuTz043tkqRZwI31pqZI1aAT/nLgiFZs3xqQxL4mgJc7U02fg3Mf4IuBCP4OqSb6YuzGQ7ZS4g7KeG70skO0ZY0yIl9lHfbl3cY3nNtI/O2YZt595pO+bix2ca30Eie3ML+K4R0bz9JU9uSrb7pFkTFV5uVVlOxEZLiJbRWSLiHwkIu2CCC6dlKbZZRpV8f2OfADenLomtYF4NHrhZj6auT7VYRiTkJemoTeAz4C2wOE4s5G+4WdQxvoIkhG3unSg5M6Bw2Zy1wdzUx1GjfTJ7A38Zfh8T+u+OnkVWYNGUFJ6gHzwBxAviaC1qr6hqsXuz5tAa5/jSr2gO4sPlLOaqRaqyoh5m9L+pPbH9+fw7vTvPa373Bin/6ygqCS8bM++YrbmFVQ5jqkrtrF5Z9Xf50DlJRFsE5HrRKSO+3MdTuexqYCCopKkX/rYlw6UPoLSUmVfcUn5K1ajcI0g0K1Wr0/mbOD3787i9SmrfdvGgg072b2v2Lf3r04j528qd53MOs4HX1yy/5M//8Wv6f3YuCpv/9p/T+fcFyZX+X0OVF4Swc3AAGAzznQTV7rLardqPhN3HTyKv3ycuAocWyM4UE5yfx2xmKPvH0VxSSl5BUU8+sWiqBKbH8T9cA7k6a+25RUCsHlX1Uuhc9f9yEmPjeXH/MLwssLiUi58aQq3vpUTXrb+h3x2FRQBsG5HPn0fH8eGH/dWefvV4X8568pdp24d53S1r2T/8bV2e361xfBjflG1vdeBptxEoKrfq+rFqtpaVQ9R1UtVdW0QwdUWoRPW+0kO9thz2rY8Z1onqUJGUtUKn5QHf7KAKcu3eV7/nenOoVBUorwwdjmvTVnNBzH/54SlW8kaNIIt1XDSqy2qs5/jpfEryM3bx4zVO8LLQrXPb1c5lfcVW3fT78kJnP/C1wC8PX0tG3cW8OmcDVUPICB13RrBvqL0uVFiUBImAhF5IMnP4CCDrIp9xSV86aHaGXLxy1P416SV1VokL+/LvnlnQZnS7YvjQxeWRS8vKCohN28fXjw7ehldB48iv9B788CwaWu57rXp4ed79hXTdfBIxi/ZEnf9OhnOl7NElWL35FMc08719rdOspi3fqfnOJKpyZ3Fu/cV0/fxcXy3Zkf5K5dj9MLNfOhptJGzI0T2Fxpia5gXvTQFgPU/ODWAPW6TUeP6ZUeQ795XzOiFmysTcqV5+SgzM5zTVWGJJYLqlqxGsCfOD8AtwJ99jqvaPDVqKb97ZxZTV3gr5c5bv5PHRy6p8Ha+Xp5L1qARrNiaV+a1yC/lH/87O+qk/8nsDfR5fBx/H+PtQrJrhk7jpMfGelr3o1nOSeQHt8pbWqoUFif+EsVralmwYScFRaU8m+BCtzoSarfd/75lronwUKkpKiktc/LMLyyOG5OX96uKklJl9vc/lLtOvNrWvPU/snFnAc98tdTTtmITfaSBw2byfx5GG4V2UeRuKYnZb3tjYs3f5zxvVK9sIrh/+HwGDpvJsi1lj+VUCvURFHlMBG9NXUPWoBGB92HFKj4AElfCRKCqz4Z+gKFAQ+Am4L9A54Diq7L1PzhtiKu372Haqu2oKn/7cjFfLdzMUfeP5PtqaGPcubeIN75ZA8DMtWVPIJEF5E/mbGTRpl3h56GT31tuqbm8ktGcdT96jqtepluCck/+D3++kKPuH5mwbT22w7qkVLl66LS4r4VkuDWC2FpAMnv2FbNuR/R+f2LkEq4a8i2LNjr7ZmteAd0e+Iqhk1eV+ftwH0Elq21fzNtYpvkq0gtjl3HZP6cyN8m+HvTRPLoOHkVeQXS7cqn7nQ/VlGKpKs+NXsqa7Xvc59Gvl9fPMm7xlvBr32/P5+4P5jJuydYy65WW83mEEkWdOGeAje7ome27C8u+mAKFxaXc+/H8cDw79niL66XxywHYtbf6O8zf/GZ13O96rKkrtnHEfSOZVU7BItWS9hGISEsR+SswD+cq5F6q+mdVLXvk1VCbdznNKPcNX8A1Q6exatsehk5exa+HzaSwuJQPZyWoeicodb48fjmfx0w78ZO/jWW8+2UUEVSdEmXohBtbTb/gxSm+Vr3zCor41Vs54Y60UCL4zzQn2Uxcmhv3RFNcGl1yiRzlpKp0vndEmZpL6HwXOZIj0SkotD+u/fd0Tn1qQtRrCzc6zUahDs+NPzonoxFxmvVCNYJlW3YzYan3Q7GopJRb/5PDbe/O5u4P55V5fe32Paz/IT+cqJP1aXzgNtkc+9DoqOWl4RNs/ANoy659vDh+BW9Pc4ZMLtq4i+tfm87ewhKKS0p5cZzTzxKv83T++p3c8lYOD3++iK15BfR/ekI4DoiuKUV+drGf9fDZ6/l0jnMMh5JqZE2xYd06zt9VsSS9bkd+VAd2ZY1bvIX3ZnwfHgF17avTy6yzKnd3mWWhprLyhmZHFoyOGTyq3CQK8NDni7jilanh57sKiliwoWzT56RluQBMX1X1pkI/JesjeBr4DsgDjlXVh1S1Zqe1OGJLdVUdt/3M6GXc/t5shk3b319eENF5lSHC8NkbuOyfU/lyvnOyj3ccLnBLvrHNHF5bPb5J0tT15fxNjF28v00/tjnopje/o+vgUVz88hTW/5DP8Nnr4w5v/Wbl/m2oOrWCF8Ytj1ondMIrKilN0mQTKsE7Qp9JUUkpf3hvNr96K4eF7v7IyBA27yxI+uWNfOmmN74r8/ra7XvilsBW5e5hzKL4fR0Apz09kX5PTgjXfsYu3sLewoqdDEMlbUmwM2JrMTPW7ODr5ds45oFR9HjoK1blOjWFBz5dWOZvd+51ah/f79hT7giXyKahroNHRb125/v7m5tEnOa/o+4fGd439d2aZEEF//dYpz41geMfGUPWoBEs2riLNdv2JOw7KVXnc4utrZaWKsNnl9+hfdZzk8grKEJVeWLkEpZvyQsXUsqMyFONSvKRh/3eopLwlesVcePrM7jQ7YeJcoCMA09WI7gL52ri+4GNIrLL/ckTkV1J/q5GS5YIjns4onRXTr4Y/MkCAB78dEHU8joZsHSz07YaOqDindR27a34ULWvImoRydqwY09CoZJd7DE5b/1O+j05gTvfn8uVQ6ZSVBIdZ+RJNvJ/CJXewUl8EN00tLugOGlfRMhjIxbz2dyNjF28hbwCp7T3Y34RfR4fxxNfLgnHGCtRk1Cfv40ja9AITnt6Ipf/c2rUa0+MXJI0eUa9v/u//i9nPQ/EfL5jF23h2lenxf278Uu28O1KZ5ROnQQngGSF04Ki0rjNPCGhTn9JMJYs9LGv2Lqb3749K/GGYsxd7yTm0ICA0Gfqpch0zOBR3PW/8vsx3v/ue376zESuGvJt3NcnL8vltKcn8rrbxBry8ewNjI6TvKeu3MZLEYWSUoX/+2AuuXn7GDJpJTe8PiOcLGO/8v+avIqf/G0cq7ftcV+PSc6rd5A1aERULaOgqIQXxy1PeFzP/t7ZhxUpaF79r2855+9lr11QVW79Tw4vj18eWP9Gsj6CDFVtqKpNVLVpxE8TVW0aSHQ+SPZB7Szn5PxDnLbJUNt+SIZI+IQaGu4WLxG8OXUNn87ZUKHhob8eNjP8+JmIztvxS7YwfPb+JoK6MWchL0NIF2zYxW3vJj55RJYwL3hxf8knPGooolnp72OXccPrZavvsaatKntdYujAnxFRcpy59gemLN8Wbo8fOT9+s1rsmPy12/ewMnc3qsqQSSt55ItF5cYEMGFpbvhx6GQRcuuwHKaujI575PxNnPHsRG5+Myfcp5GoaagqBrqf//Y9hUk7zG98fYan9mtwCg2hDv/Qd2PUwsQ12Vh7i0rCgxKS8Xp6nLk2usawfXf8EXLXvjqdZ2OaKdduz+eXbuFl084C9rkn7dJSJb+wmE07nRFToeHRpz8zkaKS0jLnhHs+cpoNv404Pl+dvIrnxiwLD5dOpExHdsw/fuk/vnFGJQLTV+9g6ZY81u3I5+Xxy8MFkD2FJYxZtIVnRi/joc/K1gz94OWCsgNWqGQe6Y2YEsfMtTuYujJ5STFr0AiyBo3gqa+iRxPFG4l0x3/nhA+GUGftZwmmsv46znj94lKnMzFSbt6+uKORQm5+Myequh8aZheyt7CE3o+NTdjhGy+eN76JvuI1UbtpqPRYVKJRSW2a2yaaX1gcNdwz1HmfSL04vZdXvDKV616bzsUvf0NRSWmZ5qkhk1byaJyT/GlPT+TMZyfx/nfJL1aav35nwmQZ+8WOd3L87Tuzwk06IRkiZA0awSOfR8dV2YbJ6yOG9O4tLCZem0No/1fkIjEB1rmfSUmpM9ImJFSAmbZqO1mDRoRHEe0tLElauNhbWMLdMaOdKjLUd+OPe8sMJvAqciBGSHGp8vNXp3Py4+OB6ObYH/ILE8a2bsfe8PegyD3+yy0s5heGBzxEenLUEr7fns+cdT+WGZX454/m8czoZSze5OzfyMT03ZpgWuO93LP4gHXXB3PKLIstvXyzYjvfrNjO/Id+FrU83ljl4pimk2v/Hb/UG+o/qFsng7yCIu4bviDueonGiIeuIQi5eui3ZU40IaFSDjgl071FJeHOvpC9RSVs9XjtQcjDMSewNQlGV4VyTrxktyp3N2c8Oyn8fO76H/nN2zPLrBcpWbJavW1P3BrdE+UM952b4PqFopJSFm7cxaX/+IaLjmsbd515G3YyZNJKLu91OHv2Vbya/npMQq2MSctyo5J0QVFp3E7YYdPWctpRFZsGTAT+McEpoa77IT/q+7F0cx4XHQcj5jkd9j/7+2Su69OBt6d9T7OGdZn7YPR35vEvF7NtdyHd2zaN6sSG6Oa8yctyeWXiSq44sewkxl/O3xzuW1vzxAUV+l+WxCn4AWzdVRDVV7gtYjTUlOXb6HF4s7h/N8QtuV98XFtedAsf5V0U+fOh01izPZ+FD59Tpub4ivt+sUKjoLbv2YeqRg03XbG1bCe4H2p1Iqgbb2xcArGjP+KJPbjLk5khnPLE+Ar9TTyJkgAQ9f6/fSd+046fE5ut2+EkolcmrqRJg+jDKbap5pWJ0V+EeCWx8saIV+dFZA98uoD3Zji1hdiRYJHbe2LkknKTTax47drO+1X8H5ge04S2eVcBV8Zpax+/ZCvbEjSlJBJZi4u8Mhng5Qkr+GrhZpZHnIxCo53ilYz/5TaLfRTnMIy8GviG12cA0U0vfgoNgQZn4rrFEbWGP3no3zjxr/uv23lvxjqOOKRJ+HnWoBEM7L9/NH2owNT9wa8AOOuYQ8KvJfrsQwls2Zbd3PJmDs9dfVy5MVW3Wt00VJFE4IfZ635kV0HVxjCHSl/xrN62p9zmHvB2sFeHvJj/Nd7FSpHidfqWd9Xoks0VH6cQry8CYMKS3LjL/aKqlUpkFcnjg5LMZxVPeddiLPdYIi3vAryKFqLAqZE85/FCS69ejGlWrIzYZsh417qERA4bjRyMES9hP/rFIgpLSsM1sCDV6kTQtEFqKzxep9ctT6J2ydOfmVgt718ZBUUl5Z6U88uZ+XLZlrInmXht/ZEuixkN5EVsh29IdUz4VhGlCivjjHcvz5AETQrxjE8y6iieqtSwIpswKvO5lOec5yeHO3wPVHkR34HIQk72XxPPDhB7bUx5/RLVoVY3DbVuUj/VIdRasWPT40nUh5JMbK2iNim2nll0AAAS8UlEQVQuLQ2PaqkpvE7XEM8R942sxkhqv0keL34siJlUb9vufQlbBapL4DUCEWkvIhNEZLGILBSRO/zaVk2clMykr6PvLz95Bi1R34ipfpVtJg5d4OenVNQIioG7VHWWiDQBZorIGFX1Nsi7AiwRGJNc5DUTpmZqEDMK0A+B1whUdZOqznIf5wGLce6FXP3bOmBu72KMMfHVykQQSUSygBOAijcme2A1AmPMga5BAE1DKUsEItIY+Aj4o6qWGX4iIgNFJEdEcnJzK1d9jZ2T3dRsfbscnOoQTC3Qs138C8QOBL/sm1VmWWYAw+BTkghEpC5OEnhHVT+Ot46qDlXVbFXNbt26YldLhsReCWxqrgHZ7bimd4dK/73fN6uJ57ITfGnRTLnv7jsr1SFUyX9u7p3qECrtV6d2inp+6fHxr3ivbqkYNSTAa8BiVX3Oz215HRp3z7lH+xnGAeGak9pX+G8evbRHtW3/0Ut7cH6PQ6OWLXrkHM9/P/T6bE7s2KJC24ydiqOiHrqoe/jx3efUjmOoVeP6tG5SP+6cTweC35zWheaN6qU6jAprXD+TxY+cS7sWjaKWH9mmSYK/qF6p+LRPAa4HzhCROe7P+X5sKFkiuLDnYeHHvz2tix+bL+PRS7qXv1ISL197AosfOZenr+yZcJ1G9epwePOGAEz8v596fu8HLurGt/eeQefWB4WX3Xhyx6R/84veHTwlg5evPaHcdeqIkFkng0Pcaz9evvYEGtXLpE1Tb9eCtG3eIOE8rrefcQQAT12xf781qleHd2/9iaf3XvjwOax47DyevrInX99zenh5s0b7x3b3P9JbrbVFo8TjwT/+Xd/w4y9u7xd3nTkPnM2A7LJz9FwQcTzHOuYw75MFf3lH/O0C/KRTS0/vMeXPp/PriGkXru/Tkev7dAxPQdLx4P0nu+PbN+fq7IoXQkKev/r4qOd3/eyopOvHNhtlurPEvnDN8fFWj3J5r8NZ8LD3wklFZAg0rFe2YFKZKUkqtf1AthJBVaeoqqhqT1U93v350o9ttWvRKGF74QMXdQs/TnQTEYDbTj+CCTEn1K6HRmfpj37bN+r5yr+VzWvX9enAll0VmwcmUo/Dm3Jhz7Y0rFeHq7Lbx52Q65zubfj6ntPDJ77IC+rG33Uar/yiV9z37tmuGY3qZXJYs4ZR7fQPX9Ij4f5b+tdzycgQLo4zWVvsDMwdWx4U9TxeHKFpm0ff2Z/3bu3DhT2d9/36njOYeX90U0XrJvV591f7T+Kf39aP7m2b0aZpg/Cys45pw1/O78rTV/bkjjOPZMyd/RlwUntWP34+V/Rqx39u7k3Hg6Pj6t2pJSd33v//v3ZjNh/9ti8H1c8ks04GV2W3p33LRoy76zT+fUN21N/Wr+vtqzQjotnlgQu7Rb12QvvmDLnuREbecWrcidCOa9csbmn3p0e35uWfJ062kcmnQ8tGcdf58DcnM/ZPp3FIkwZRyyMn43vo4u4c6u7jZMmlXYtG3HNuV54bcBxLHj2XRy/twaOX9mDkHafy5BXHRv1vmRkSVfgoT+dW0euef+z+BPjJ708pd1qZz27rF9WkFzruzjymDbfGNMtEOvXIVjw34Hga188kO0HNc+yf+kc9T5acY2X4MG15RRyY9T+PHrq4O5/d1o85D5wdtfz+C44pc8CveeKCuCfX3fuK6dTqIPp0dkpDTepn8ultp/BOxIno+PbN+fy2/SWpyLnoL+/lHHQ3n9IpfKs9gMEXduOGJCXu0XfuP6i+vfcMPvxN3zLrPHH5sVHPO7duzMGN63NN7w6seeICDqqfSceDG/HUFT3p3Lox5x17GPee1xWAGX85M/xlfjvif3nk4ugS/nu39mHy3U4p+A9nHMF95x/DSVktqJ9ZJ+p/bVi3Dh/99mQevaQ7qx6P3o/HtmvGx7/ry7BbejNr8Nmcd+xhZUpyoWTcvFE9To5IRvUyMzi4cX1mDT6bW/o5X9T//fpk+h7RKur9AR67rAfd2zr/U0FRCQP7d+Gq7PZk1skIV7FFhGcHHEd2VkuaR1yt2e2wpgy7pTfvDewTXnbmMW3iNjd1ad2Ys7q1AWDxI+fy+i+zOSqiCn/KEYk7vUMnqkObNuCQiNrOqr+dj4hwbo9Dw5/L9L+cyR1nHsmQ63pF7aNY9TMzyrzW352F9JZ+nbj11P2l80ObNaBV47LJpHmjehxxSOMyy5+8Yv8xdsxhTfnwtycDTlKaNfhsfnr0/ppQ704tw9+hOhnC5b3aRQ19bNeiEVef1IFuEUnkkuPbJhzkfUicmQFaucsOb96Qc7q3iSp0HN++efjxU1f25I2bTmLMnf1j34K/Rxx7oc8gQ+C+C7qx5okLOLFjCwad1zVcY7ylXydejUj8oQJHy4Oi92Nss86p7jF6w8kdeW5A2Ynkvri9H3edfZS7/fifbbJCanWq1VNMhMSWokKlHBEYGPElAaeturRUuei4tjz6xSJ+4zYbvXbjSWzbvS9cijzliFb8d2AfPpq5ngxxTkZv3dybts2iE8xTV/TkuQHOgRe6w9Tjlx/Lz3t3QFV58KLudPmLUyEa+6f+zFr7I9/vyA+X3B67rAeHNWsY9/+68sR2UZOMndP90DLrTLr79KjnA/t35uZ+nahbJ4MRbvNDZGkkI0MYct2J4Vs9HlQ/k4PqZ7L68fPDB+WtEdX+BpkZNKibwYMXdePEji05sWP85oNeHaJPqJeecDgfzFzHNyu8zUDZ8qB63HteVwZkt6dTq/glyOaN6vG3y47lkn984+k9MzKEz247hTGLtvD7048IJ7eKaFivDmd0dZLC0OtPZOCwmdxx5lE8cblzHITuzXx5r8OZ6v6vk+8+nWYN61K/bgZnHXMI15+cFbdE2KZpA+48+6jwDZFudhNh7M2MYk8iw27pzYkdW7BmWz7d2jalsLiUC3sexjGHNeXnvTuET2BvTV3Dg+6NT2KbrJo2zGTb7sIyN9hp16IRn912Cke1aUKDunV486be/C9nHet35PPLUxKXqCP95rQu9D+yNUe2aUz9zAyGTCo7aVuzhnWZcd9ZZA0aAcC53Q8ls47QuXVjZqzewS/7ZnFr/87hmXVjb8Y0wG1uChW++h3RirPd5A3w1R/706pxPfYWlTB52baoCRIja/jxCod/u/xYTjuqNQNOas8b36wOT9kemfSuzm7PVdntySso5tqfdAjPa/X707uEp/3ucXgzurdtSu7ufeF4YwXVNCRBbagqsrOzNScnp0rvETqgwBkV4fc8RKHtRR5Iy7fkcfNb3zH8d6fQqvH+7X86ZwOtm9Snb5dWZd6nPA98uoD6mRncd0G38lcOUOT+Tjav/CUvT2HASe35xU+S90ck20bk+6sqL4xbzoDs9rRtHj+BVuZ9K+vER8ewfU9htbxXyJ8/nMf7Oevo2+Vgpq7czgU9D+Mf1/ZiV0ERDevWqdCsuyWlyo49hWW+D6tydzNhaS639OvEa1NWM27xFt69tU+Cd6maUQs285u3Z/Kns49ix55C3py6Jny/gwUbdtK0QV06uP0K+YXFvDB2OXeefVT4xPv82GX8rNuhdGubmhsnDp+9no4HH0SvDi2SHjvrduTTukn98DxdiY6J8Uu2MOzbtUxYmsujl3Tn+pOzKh2biMxU1exy10uXRLB99z7W7shnxdbdCbNvdarOk8mB6Ls1O8L3p/VrH6zetofV23aHS+TVpTo/u535RewqKKJ9grb5yvj7mGW8MG45z199PGMWbeG+C46pdNKrKeas+5Hj2jVDFW5/bzY39s2it8fO6Zrkfznr2LqrgNvOODLu6yWlGm4BSHZ8FZeU8r+c9Vx9Uvsq3fbUEkGKpXsiAOfeAXXrZNClddm255ps6eY86mdmkJWgCSrVikpK+XL+Ji4+rm1gbcimeqgq5zw/md+ffgSXHO//dSheE0Fa9BGY1Oh6aGqq6lV19KHBjN2urLp1MgI5iZjqJyKMvvO0VIdRhiUCn7x3ax82VuAm4sYYkyqWCHxyss2bY4w5QNTq6wiMMcaUzxKBMcakOUsExhiT5iwRGGNMmrNEYIwxac4SgTHGpDlLBMYYk+YsERhjTJo7IOYaEpFcYG0l/7wVsK0aw6kuFlfFWFwVY3FVTE2NC6oWW0dVLff2eQdEIqgKEcnxMulS0CyuirG4KsbiqpiaGhcEE5s1DRljTJqzRGCMMWkuHRLB0FQHkIDFVTEWV8VYXBVTU+OCAGKr9X0ExhhjkkuHGoExxpgkanUiEJFzRWSpiKwQkUEBbre9iEwQkcUislBE7nCXPyQiG0RkjvtzfsTf3OvGuVREzvE5vjUiMt+NIcdd1lJExojIcvd3C3e5iMiLbmzzRKSXTzEdHbFf5ojILhH5Yyr2mYi8LiJbRWRBxLIK7x8RudFdf7mI3OhTXE+LyBJ328NFpLm7PEtE9kbstyERf3Oi+/mvcGOv0v0uE8RV4c+tur+vCeJ6PyKmNSIyx10e5P5KdH5I3TGmqrXyB6gDrAQ6A/WAuUC3gLZ9GNDLfdwEWAZ0Ax4C/i/O+t3c+OoDndy46/gY3xqgVcyyp4BB7uNBwJPu4/OBkYAAfYDpAX12m4GOqdhnQH+gF7CgsvsHaAmscn+3cB+38CGunwGZ7uMnI+LKilwv5n1mACe7MY8EzvMhrgp9bn58X+PFFfP6s8ADKdhfic4PKTvGanONoDewQlVXqWoh8F/gkiA2rKqbVHWW+zgPWAwku8nsJcB/VXWfqq4GVuDEH6RLgLfcx28Bl0Ys/486pgHNReQwn2M5E1ipqskuIvRtn6nqZGBHnO1VZP+cA4xR1R2q+gMwBji3uuNS1dGqWuw+nQa0S/YebmxNVfVbdc4m/4n4X6otriQSfW7V/n1NFpdbqh8AvJfsPXzaX4nODyk7xmpzIjgcWBfxfD3JT8a+EJEs4ARgurvoNrd693qo6kfwsSowWkRmishAd1kbVd0EzoEKHJKi2ACuIfoLWhP2WUX3Tyr22804JceQTiIyW0Qmicip7rLD3ViCiKsin1vQ++tUYIuqLo9YFvj+ijk/pOwYq82JIF47XqBDpESkMfAR8EdV3QW8AnQBjgc24VRNIfhYT1HVXsB5wO9FpH+SdQONTUTqARcDH7iLaso+SyRRHEHvt/uAYuAdd9EmoIOqngD8CXhXRJoGGFdFP7egP8+fE13YCHx/xTk/JFw1QQzVFlttTgTrgfYRz9sBG4PauIjUxfmQ31HVjwFUdYuqlqhqKfAq+5syAo1VVTe6v7cCw904toSafNzfW1MRG05ymqWqW9wYa8Q+o+L7J7D43E7CC4FfuM0XuE0v293HM3Ha349y44psPvIlrkp8bkHur0zgcuD9iHgD3V/xzg+k8BirzYngO+BIEenkljKvAT4LYsNu++NrwGJVfS5ieWTb+mVAaDTDZ8A1IlJfRDoBR+J0UPkR20Ei0iT0GKezcYEbQ2jUwY3ApxGx3eCOXOgD7AxVX30SVVKrCfssYnsV2T9fAT8TkRZus8jP3GXVSkTOBf4MXKyq+RHLW4tIHfdxZ5z9s8qNLU9E+rjH6Q0R/0t1xlXRzy3I7+tZwBJVDTf5BLm/Ep0fSOUxVpXe75r+g9Pbvgwnu98X4Hb74VTR5gFz3J/zgWHAfHf5Z8BhEX9znxvnUqo4KqGc2DrjjMiYCywM7RfgYGAcsNz93dJdLsA/3NjmA9k+xtYI2A40i1gW+D7DSUSbgCKcUtctldk/OG32K9yfm3yKawVOO3HoOBvirnuF+/nOBWYBF0W8TzbOiXkl8DLuhaXVHFeFP7fq/r7Gi8td/ibwm5h1g9xfic4PKTvG7MpiY4xJc7W5acgYY4wHlgiMMSbNWSIwxpg0Z4nAGGPSnCUCY4xJc5YITFoSZ7bJBTHLHhKR//NhW7sjtrnXncZgsYjMqNKMkcZUk8xUB2BMbSIimbp/Erh4VqozjUHowqWPRSRDVd8IJkJjyrIagTFxiMgfRGSRO2naf91lB7kTqH3nluovcZf/UkQ+EJHPgdFet6Gqq3DmtfmDL/+EMR5ZjcCY+AYBnVR1n7g3e8G5Ina8qt7sLpshImPd104Geqqq1+mYQ2YBXasnZGMqx2oEJl0luqQ+tHwe8I6IXIczqyc4c7kMEueuVhOBBkAH97UxlUgCEH8GSWMCZYnApKvtOHd1itQS2OY+vgBnfpcTgZnujJUCXKGqx7s/HVR1sbv+nkrGcQLOjUmMSRlLBCYtqepuYJOInAnO/WJx7u40RUQygPaqOgG4B2gONMaZ2fF2d/ZIROSEqsTg3pTkGeClqryPMVVlfQQmnd0A/ENEQjdNeVhVV7pzxb8tIs1wagF/V9UfReRR4HlgnpsM1uDcB6AiuojIbJxmpTzgJRsxZFLNZh81xpg0Z01DxhiT5iwRGGNMmrNEYIwxac4SgTHGpDlLBMYYk+YsERhjTJqzRGCMMWnOEoExxqS5/weYyY9SOo9sggAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Now we repeat correlation technique to find new peaks\n", "sign_correlation = np.zeros((sign_length, max_users))\n", "max_correl = np.zeros(max_users)\n", "index_max_correl = np.zeros(max_users)\n", "\n", "#find the max correlations for each user ID\n", "for j in range(max_users):\n", " correl_mat = (1.0/sign_length)*((linalg.circulant(sign_matrix[:,j]).transpose()))\n", " sign_correlation[:,j] = (correl_mat.dot(residue))\n", " max_correl[j] = max(abs(sign_correlation[:,j]))\n", " index_max_correl[j] = argmax(abs(sign_correlation[:,j]))\n", "\n", "plot(max_correl)\n", "plt.xlabel('User ID')\n", "plt.ylabel('Normalaized Correlation Value')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Wow! We now see the two peaks that we expected to see! Huzzah! But we do not usually have a genie to tell us the signal level. So what is a good proxy for the actual signal level? Maybe the max correlation value which is the projection of the combo signal onto that signature space? Lets do it one by one starting from the original signal." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Algorithm 3: Correlate and remove one" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "40\n", "13\n", "100.6522\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "index_present = [40, 100, 312, 350]\n", "signal_stengths = [100, 10, 8, 0.02]\n", "shifts = [13, 20, 45, 34]\n", "combosignal = np.zeros(sign_length)\n", "for i in range(len(index_present)):\n", " signal_to_be_added = signal_stengths[i]*np.roll(sign_matrix[:,index_present[i]],shifts[i])\n", " combosignal = combosignal + signal_to_be_added\n", "\n", "sign_correlation = np.zeros((sign_length, max_users))\n", "max_correl = np.zeros(max_users)\n", "index_max_correl = np.zeros(max_users)\n", "for j in range(max_users):\n", " correl_mat = (1.0/sign_length)*((linalg.circulant(sign_matrix[:,j]).transpose()))\n", " sign_correlation[:,j] = (correl_mat.dot(combosignal))\n", " max_correl[j] = max(abs(sign_correlation[:,j]))\n", " index_max_correl[j] = argmax(abs(sign_correlation[:,j]))\n", "\n", "\n", "max_1 = int(argmax(max_correl))\n", "print(max_1)\n", "shift_1 = int(index_max_correl[max_1])\n", "print(shift_1)\n", "\n", "alpha_1 = max_correl[max_1]\n", "print(alpha_1)\n", "\n", "plot(max_correl)\n", "plt.xlabel('User ID')\n", "plt.ylabel('Normalaized Correlation Value')\n", "\n", "first_vector = np.roll(sign_matrix[:,max_1], shift_1)\n", "\n", "#index_present = [40, 100, 312, 350] devices\n", "#signal_stengths = [100, 10, 8, 0.02] alphas\n", "#shifts = [13, 20, 45, 34] taus\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We will now remove the 'projected' signal from the combo signal and look for the second highest." ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "100\n", "20\n", "10.396238999999996\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "#alpha_1 = max_correl[max_1]\n", "residue = combosignal - alpha_1*first_vector\n", "\n", "sign_correlation = np.zeros((sign_length, max_users))\n", "max_correl = np.zeros(max_users)\n", "index_max_correl = np.zeros(max_users)\n", "\n", "for j in range(max_users):\n", " correl_mat = (1.0/sign_length)*((linalg.circulant(sign_matrix[:,j]).transpose()))\n", " sign_correlation[:,j] = (correl_mat.dot(residue))\n", " max_correl[j] = max(abs(sign_correlation[:,j]))\n", " index_max_correl[j] = argmax(abs(sign_correlation[:,j]))\n", "\n", "plot(max_correl)\n", "plt.xlabel('User ID')\n", "plt.ylabel('Normalaized Correlation Value')\n", "\n", "max_2 = int(argmax(max_correl))\n", "print(max_2)\n", "shift_2 = int(index_max_correl[max_2])\n", "print(shift_2)\n", "\n", "alpha_2 = max_correl[max_2]\n", "print(alpha_2)\n", "\n", "second_vector = np.roll(sign_matrix[:,max_2], shift_2)\n", "\n", "#index_present = [40, 100, 312, 350] devices\n", "#signal_stengths = [100, 10, 8, 0.02] alphas\n", "#shifts = [13, 20, 45, 34] taus\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we'll remove the second peak and look for the third peak." ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "312\n", "45\n", "7.931573049999993\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "residue = combosignal - alpha_1*first_vector - alpha_2*second_vector\n", "\n", "sign_correlation = np.zeros((sign_length, max_users))\n", "max_correl = np.zeros(max_users)\n", "index_max_correl = np.zeros(max_users)\n", "\n", "for j in range(max_users):\n", " correl_mat = (1.0/sign_length)*((linalg.circulant(sign_matrix[:,j]).transpose()))\n", " sign_correlation[:,j] = (correl_mat.dot(residue))\n", " max_correl[j] = max(abs(sign_correlation[:,j]))\n", " index_max_correl[j] = argmax(abs(sign_correlation[:,j]))\n", "\n", "plot(max_correl)\n", "plt.xlabel('User ID')\n", "plt.ylabel('Normalaized Correlation Value')\n", "\n", "max_3 = int(argmax(max_correl))\n", "print(max_3)\n", "shift_3 = int(index_max_correl[max_3])\n", "print(shift_3)\n", "\n", "alpha_3 = max_correl[max_3]\n", "print(alpha_3)\n", "\n", "third_vector = np.roll(sign_matrix[:,max_3], shift_3)\n", "\n", "#index_present = [40, 100, 312, 350] devices\n", "#signal_stengths = [100, 10, 8, 0.02] alphas\n", "#shifts = [13, 20, 45, 34] taus\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We are yet to see the fourth peak. Maybe we'll see it when we remove the third peak. Let's see!" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0,0.5,'Normalaized Correlation Value')" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYUAAAEKCAYAAAD9xUlFAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzt3XmcU/XVx/HPYQDZREFAFMRBBKnihogrKmoV3LBu1ZbW7Sm2T21rFxX37al1t2pVirXWWpe6i4IiIrjLvsi+i8OObMPOzJznj9xkkkySuTNMEmC+79crr0lubm7O3CT33N96zd0REREBqJPvAEREZMehpCAiIjFKCiIiEqOkICIiMUoKIiISo6QgIiIxSgoiIhKjpCAiIjFKCiIiElM33wFUVYsWLbywsDDfYYiI7FTGjRu30t1bVrbeTpcUCgsLGTt2bL7DEBHZqZjZt2HWU/WRiIjEKCmIiEiMkoKIiMQoKYiISIySgoiIxCgpiIhIjJKCiIjE1PqksGFLCW9PWJTvMEREdgg73eC1mnbb21N4c8Ii9t+rEUe2a5bvcERE8qrWlxSWrtsMwMatpXmOREQk/2p9UhARkXJKCiIiEqOkEHDPdwQiIvmnpCAiIjFKCgGzfEcgIpJ/SgoiIhKjpCAiIjFKCgE1NIuIKCmIiEgcJYWAGppFRJQUREQkTlaTgpn1MrOZZjbHzPqnWecSM5tmZlPN7KVsxiMiIpllbZZUMysAngR+CBQBY8xskLtPi1unI3ATcIK7rzazVtmKR0REKpfNkkJ3YI67z3P3rcArQJ+kdX4BPOnuqwHcfXkW4xERkUpkMym0Ab6Le1wULIvXCehkZl+Y2ddm1iuL8YiISCWyeZGdVP15kkcD1AU6AqcAbYHPzKyLu69J2JBZP6AfQLt27Wo+UhERAbJbUigC9ot73BZYnGKdd9x9m7vPB2YSSRIJ3H2gu3dz924tW7bMWsAiIrVdNpPCGKCjmbU3s/rApcCgpHXeBnoCmFkLItVJ87IYk4iIZJC1pODuJcC1wFBgOvCqu081s7vN7LxgtaHA92Y2DRgBXO/u32crJhERySybbQq4+xBgSNKy2+PuO/CH4CYiInmmEc0iIhKjpBDQLKkiIiGTgpntb2anB/cbmtnu2Q1LRETyodKkYGa/AF4H/h4sakuk19AuRbOkioiEKyn8GjgBWAfg7rMBzVEkIrILCpMUtgRzFwFgZnWpODJZRER2AWGSwidmdjPQ0Mx+CLwGvJvdsHJPDc0iIuGSQn9gBfANcA2RcQe3ZjMoERHJj0oHr7l7GfBMcNtlqaFZRCREUjCz+aRoQ3D3A7ISkYiI5E2YaS66xd1vAFwMNM9OOCIikk+Vtim4+/dxt0Xu/lfg1BzEllNqaBYRCVd91DXuYR0iJQeNaBYR2QWFqT56OO5+CbAAuCQr0eSRGppFRML1PuqZi0BERCT/0iYFM8t4jQN3f6TmwxERkXzKVFKoVe0GamgWEcmQFNz9rlwGIiIi+Rem91ED4GrgECLjFABw96uyGFfOqaFZRCTc3EcvAK2BM4FPiFxPoTibQYmISH6ESQoHuvttwAZ3fx44Gzg0u2HlntoURETCJYVtwd81ZtYF2AMozFpEOaZqIxGRcmEGrw00s2ZEpsseBDQBbstqVDmkEoKISLlM4xT2dvdl7v6PYNGnwC47M6pKDCIimauPJpnZMDO7ysz2yFlEIiKSN5mSQhvgIaAHMMvM3jazH5tZw9yElluqRhIRyZAU3L3U3Ye6+5XAfsBzwPnAfDN7MVcBZpuqjUREyoXpfYS7bwWmAdOBdcDBYV5nZr3MbKaZzTGz/imev8LMVpjZxOD2P1UJviaohCAiUi5j7yMzawf8GLgMaAy8AvRx9+mVbdjMCoAngR8CRcAYMxvk7tOSVv2vu19bneBrkkoMIiKZex99SaRd4TWgn7uPreK2uwNz3H1esL1XgD5EShwiIrIDylRSuAn41L3aFSxtgO/iHhcBx6RY70IzOwmYBfze3b9LXsHM+gH9ANq1a1fNcDJTNZKISOaG5k+2IyEApKqQSd7eu0Chux8GfAQ8nyaWge7ezd27tWzZcjtCShGkqo1ERGJCNTRXUxGRXktRbYHF8Su4+/fuviV4+AxwVBbjSUklBBGRctlMCmOAjmbW3szqA5cSmSYjxsz2iXt4HpHeTXmhEoOISLjrKewGXEhkErzY+u5+d6bXuXuJmV0LDAUKgH+6+1QzuxsY6+6DgN+a2XlACbAKuKKa/4eIiNSAMBPivQOsBcYBWypZN4G7DwGGJC27Pe7+TUQatPNO1UgiIuGSQlt375X1SPJE1UYiIuXCtCl8aWa73EV1olRCEBEpF6akcCJwhZnNJ1J9ZIAH3Uh3GSoxiIiESwq9sx7FDkAlBhGRENVH7v4tsCdwbnDbM1i2S1AJQUSkXKVJwcx+B7wItApu/zGz32Q7MBERyb0w1UdXA8e4+wYAM7sf+Ap4IpuB5YqqjUREyoXpfWRAadzjUlLPa7RTUzWSiEi4ksJzwCgzeyt4fD7wbPZCyg+VGEREQiQFd3/EzEYS6ZpqwJXuPiHbgeWKSggiIuUyXWSnqbuvM7PmwILgFn2uubuvyn54IiKSS5lKCi8B5xCZ8yi+csWCxwdkMa6cUbWRiEi5tEnB3c8J/rbPXTj5o2okEZFw4xSGh1m2s1OJQUQkc5tCA6AR0MLMmlHeDbUpsG8OYssJlRBERMplalO4BriOSAIYR3lSWAc8meW4ckYlBBGRcpnaFB4DHjOz37j7LjF6OROVGEREwo1TeMLMugAHAw3ilv87m4GJiEjuhblG8x3AKUSSwhAiU2l/DuxSSUHVSCIi4eY+ugg4DVjq7lcChwO7ZTWqHFK1kYhIuTBJYZO7lwElZtYUWM4uMnANVEIQEYkXZkK8sWa2J/AMkV5I64HRWY0qD1RiEBEJ19D8v8HdAWb2AdDU3SdnN6zcU4lBRCTz4LWumZ5z9/HZCSm3VEIQESmXqaTwcIbnHDi1hmMREZE8yzR4rWcuA8kXVRuJiJQLMyFeIzO71cwGBo87mtk5YTZuZr3MbKaZzTGz/hnWu8jM3My6hQ+9ZqkaSUQkXJfU54CtwPHB4yLg/yp7kZkVEJkjqTeRgW+XmdnBKdbbHfgtMCpkzFmhEoOISLik0MHdHwC2Abj7Jsonx8ukOzDH3ee5+1bgFaBPivXuAR4ANocLuWaphCAiUi5MUthqZg0Jrr5mZh2ALSFe1wb4Lu5xUbAsxsyOBPZz9/fChSsiItkUJincAXwA7GdmLwLDgRtCvC7VOXisksbM6gCPAn+sdENm/cxsrJmNXbFiRYi3Di9MtdHajdu44rnRrCgOkwtFRHZeGZOCmRkwA7gAuAJ4Gejm7iNDbLsI2C/ucVtgcdzj3YEuwEgzWwAcCwxK1djs7gPdvZu7d2vZsmWIt666TNVIL41eyMiZK/jH5/Oy8t4iIjuKjCOa3d3N7G13PwoYXMVtjwE6mll7YBFwKfCTuG2vBVpEH5vZSOBP7j62iu9TI9TQLCISrvroazM7uqobdvcS4FpgKDAdeNXdp5rZ3WZ2XlW3ly1qaBYRKRdmQryewDVm9i2wgUhbgbv7YZW90N2HELkGQ/yy29Ose0qIWEREJIvCJIXeWY8ij8JUGzmqWxKR2iFjUgh6CA129y45ikdERPIoY5tCcHGdSWbWLkfx7JAs1Fg9EZGdX5jqo32AqWY2mkibAgDuvsM0Fm8PNTSLiJQLkxTuynoUIiKyQwhz5bVPzGxvINotdbS7L89uWLmjhmYRkXJhps6+hMg1mS8GLgFGmdlF2Q5MRERyL0z10S3A0dHSgZm1BD4CXs9mYLkSpk1BDc0iUluEGdFcJ6m66PuQrxMRkZ1MmJLCB2Y2lMhkeAA/Bt7PXkgiIpIvYRqarzezC4ATiUxxMdDd38p6ZDmihmYRkXJpk4KZHQjs7e5fuPubwJvB8pPMrIO7z81VkCIikhuZ2gb+ChSnWL4xeG6XoIZmEZFymZJCobtPTl4YXO+gMGsRiYhI3mRKCg0yPNewpgMREZH8y5QUxpjZL5IXmtnVwLjshZRbamgWESmXqffRdcBbZvZTypNAN6A+8KNsByYiIrmXNim4+zLgeDPrCUSvpzDY3T/OSWQ5ooZmEZFyYcYpjABG5CAWERHJM01XISIiMUoKIaihWURqCyUFERGJyTTNRTGkP0V296ZZiWgHpIZmEaktMvU+2h3AzO4GlgIvEJkQ76fA7jmJTkREcipM9dGZ7v6Uuxe7+zp3fxq4MNuBiYhI7oVJCqVm9lMzKzCzOsFgttJsB7YjUUOziNQWYZLCT4hcm3lZcLs4WCYiIruYSpOCuy9w9z7u3sLdW7r7+e6+IMzGzayXmc00szlm1j/F8780s2/MbKKZfW5mB1fjf8g6NTSLSG1RaVIws05mNtzMpgSPDzOzW0O8rgB4EugNHAxcluKg/5K7H+ruRwAPAI9U+T8QEZEaE6b66BngJmAbQHCNhUtDvK47MMfd57n7VuAVoE/8Cu6+Lu5hYzJ0gRURkeyrdO4joJG7j7bEmeNKQryuDfBd3OMi4Jjklczs18AfiMy+emqqDZlZP6AfQLt27UK8dc1SQ7OI1BZhSgorzawDwVm8mV0ELAnxulQV8RWOru7+pLt3AG4EUlZLuftAd+/m7t1atmwZ4q1FRKQ6wpQUfg0MBDqb2SJgPtA3xOuKgP3iHrcFFmdY/xXg6RDbzTk1NItIbRFm6ux5wOlm1hio4+7FIbc9BuhoZu2BRUTaIRK6sppZR3efHTw8G5iNiIjkTZjeR6Vmdh+wMZoQzGx8Za9z9xLgWmAoMB141d2nmtndZnZesNq1ZjbVzCYSaVe4vLr/iIiIbL8w1UdTiSSPD83sx+6+itTtBRW4+xBgSNKy2+Pu/64KseaNGppFpLYI09Bc4u43EOma+pmZHYW6joqI7JLClBQMwN1fNbOpwMtA7vuF5pEamkWktgiTFP4neidoEzgROD97IYmISL5kusjOqe7+MbC/me2f9PT67IYlIiL5kKmkcDLwMXBuiucceDMrEe2A1NAsIrVFpiuv3RH8vTJ34YiISD6FaVPAzM4GDgEaRJe5+93ZCmpHo4ZmEaktwgxeGwD8GPgNkZ5IFwPJbQy7NFUfiUhtEWacwvHu/nNgtbvfBRxH4pxGIiKyiwiTFDYFfzea2b5ErqvQPnshiYhIvoRpU3jPzPYEHgTGE+l59I+sRiUiInkRZpbUe4K7b5jZe0ADd1+b3bB2LGpoFpHaItPgtQsyPIe7a5yCiMguJlNJIdWgtahaNXhNRKS2yDR4TYPWRERqGQ1eExGRGA1eC0ENzSJSW2jwWghqaBaR2kKD10REJEaD10REJEaD10REJKbSpGBmBcDZQGF0/WDw2iPZDU1ERHItTPXRu8Bm4BugLLvh5E+YxmT1QhKRXV2YpNDW3Q/LeiQ7AfVCEpFdXZjeR++b2RlZjyTPVAoQEQlXUvgaeMvM6hDpjmqAu3vTrEYmIiI5F6ak8DCRAWuN3L2pu+8eNiGYWS8zm2lmc8ysf4rn/2Bm08xsspkNN7NaNVJaRGRHEyYpzAamuHuVKtSDXktPAr2Bg4HLzOzgpNUmAN2CNovXgQeq8h41SQ3NIiLhqo+WACPN7H1gS3RhiC6p3YE57j4PwMxeAfoA0+K2MSJu/a+BviHjzgs1NIvIri5MUpgf3OoHt7DaAN/FPS4Cjsmw/tXA+1XYfo1SKUBEpJKkEFQBNXH366ux7VRH2ZSn2mbWF+gGnJzm+X5AP4B27dpVIxQREQkjY5uCu5cCXau57SISZ1NtCyxOXsnMTgduAc5z9y3JzwdxDHT3bu7erWXLltUMR0REKhOm+miimQ0CXgM2RBeGuEbzGKCjmbUHFgGXAj+JX8HMjgT+DvRy9+VVCbymqaFZRCRcUmgOfA+cGres0ms0u3uJmV0LDAUKgH+6+1QzuxsY6+6DiMy82gR4zcwAFrr7eVX/N3JDDc0isqsLM0tqta/V7O5DgCFJy26Pu396dbdd01QKEBEJdznOtmb2lpktN7NlZvaGmbXNRXAiIpJbYQavPQcMAvYl0s303WCZiIjsYsIkhZbu/py7lwS3fwG7XBcgNTSLiIRLCivNrK+ZFQS3vkQanmudbDY0F63eyJqNW7O2/XR++o+veeyj2Tl/XxHZMYVJClcBlwBLiUx5cVGwTGrQifeP4JSHRub8fb+Y8z2PfjQr5++bbaVlzu9emcCURTvvlWO/W7WRwv6DGTWvVp6D7ZDWbtrGrGXF+Q4jqypNCu6+0N3Pc/eW7t7K3c93929zEVy2TVm0li/m7Dg/uDUbt+U7hF1G0eqNvDNxMb96cVy+Q6m2r+ZGvpuvjyvKcyQSdcmArzjj0U9rfLtTFq2linOOZk3aLqlmdnu654hcT+GeLMSTM+1vGkz8Z7CDfB6hzV5WzIatpRyx357V3saO8iXMhtKyyP9WYDtvO1BZ8PnU2Yn/h13NzCyUEoZNW8Yv/j2WBy86jFM7t+KcJz7nuSuPpnPr/FyyJlNJYUOKG0Qmrrsxy3FlXXWOh5U1NG/eVsqgSYtzcrD94aOfcv6TX2zXNj6ZtaKGognnqHuG8cAHM3LyXrGkUMeYtngd970/A3fnuS/mM/DTuTmJYXsF/wJ1wlTyCjOWrqOkNL+XkZ+wcDVTF1etyvLb7yOH1hlLixkxcwVL1m6m118/y0Z4oaT9urn7w9EbMBBoCFwJvAIckKP4diiVNTTf/8EMfvvyBNrfNCT2QSf7btVGlq3bnI3wQnF3Nm8rBeD79blt2P5+w1aeGln5AfnFUd9StHrjdr1XqZcnhR8P/IoBn8xl/ZYS7np3GvcOSUxMUxatZeyCVaG3fcFTX3Dw7R9sV3xhRP8Hq0Ulhee/XEBh/8Fs3FpSpdfNXbGeXn/9jIc+zE37WLoTvx899SVnP/55lbZVt07k8813QovKeA5iZs3N7P+AyUSqmrq6+435nqcoG1bXQM+fxWs2xe5/MGVpwnMr12/hqHuG0eOBERxz7/CM2ykrc7aUlIZ6z8L+g5m3Yn3oGP8zaiGdb/uAJWs3Vb5yHhRv3sYtb03hp/8YBcCK4i089tHsKpe+yksKdSgry/zac574nIsGfBV62+MXrmHj1nCfD0Q+z2girgqPVR9V+aU7rYGfzgNg1Yaq/R5XFkfm0hz3bfjkvj1KK/lOpTN06lLempDYRlRQEDkMbyvzHaJKN21SMLMHiUxqVwwc6u53uvvqnEWWY797ZSIbtmQ+O4mvPnp8+Gx+98qEtOsuW7eFwv6DGTQpMjHsJzNX8H2IL/r8lRu44Y3JHHRr+DPRa1+aQGH/wZUe/ACGTF4SeZ8VqUsy2+PdSYtZFCTGDVtKqnXms6008j+s3RRpdL/h9Uk8+tEsxn1bta9eeVIoP9PO5c9tzcatsR/4be9MofNtH1T5Bx/9PHe2NoUFKzewdG12SsObt5VS2H9wxQNrkDmre7CuqpJqvs81L4zj9/+dlLCsXjT20vTbnFy0hoXfb1/pOaxMJYU/EhnFfCuw2MzWBbdiM1uXk+iyJN2Pc0MViqyPDJvFOxMXp612iHZbe23sdymfT6fnQyOr3Ntk2pLIx3HAzUM472+Zi66xH4/X7KgLd+c3L0/gR0E7xyF3DOV/Xxxf5e1Ef9TRIvWImZF2j/gf4b1DplPYf3Co7RRYeSr3Gi6df79+C5OL1lRYPmf5eo64exgvjV4IwIujFibEFFZ07eomhaVrN1f5jLsmnPLQSI79S+rS8DsTF1HYf3Ds5GHztlLu/2BGpSdkjwybxZgFq1i+bkvscbxMSaF4c9V79c1aVswPH/mENRu3Mn/lBv7+ydyEKsOyapzRp6sSjca+rSz9F/S8v33BSQ+OSPt8TcrUplDH3Ru6++7u3jTutru756dZvIZk+jznr9xQoaifXBUU7+2JizJud2tJGYvXbOL7DSkvFVFJnFX/4k0uqtjI5e4JDa9Q/TOddKKbW15c/n9+OG1ZlbdTEvwwMh0Io1UM0f3zxrgiCvsPTjgAJvy/waZKk/Znx1uGcNnAr6scY1SfJ7/gvL9VbOyPVueNmJFYy3rgLe/z4NDE9oxHhs1i9PzyE4s5y9fzTfAZRvdpdQsKx/5lOF3vGZZxnc9nr+SmN7+p3htUw5vjI7+X6EnTzW9+w9Mj51Y4yCd7fPhsLh7wVUKPrO9WbeTqf43hzkFTmbo4cmIU/Yw3byvlv2MWMmXRWg6980NeHfsd363ayN3vTqOw/+CExuAbXp9U4bN67KPZzF6+nsueGUXPh0byl/dnJFQZVvb7Sf7tLi/ezIn3pz6o1y2ItikkviZMyT8bak2/hvVbSjj14ZGMX7i6wsEhqqTU6fnQSK59KfEMN3qgTXVuPWNJeRe1VFsdNX8Vx9/3cYXGTYDR81dR2H9w2mKhe+TL/afXJm1X4/TAT+fR4eYhrN20LZYUwn7hjv7zR/z9k7m8M3ERn89eSWmZ892qxHhnLyvm+S8XZNzO9a9NqrDs4xnLeOHrxCEv0R9G3RAV6dED/7+DbcSX2kqSkiBUPLvbVup8VcnAsAkLV6ftrVS0OnW7TKaG4SdHzOXN8UVMWLiawv6DeXz4bC75+1csDz7f0x/5hHP/9jmfzV4RO7CUlXmN1JWPX7iap0bOSVjW99lRvByUaKqitJr13/E93sZ9u4o3J0SSxLJ1m9laUn6mnG7T0c/QgLcmLGL4jOX868sF3Pr2lCCuyHoPfziTG9/4hr8GAzNveH0yPR4YwT+/mA8Qawwe+OlcXh1bxJX/GpPwPnWC7830JakrRTJV9QAVegZmKrHViavejN/q4rWbYt+LXKo1SWHm0mLmrdjABU99mbboFz3IfDR9OYX9B7O8OPED+fsn8/jfpMFQY9PUdYc5u4tWLaUrFpa68/yXC3h9XBF3vzeNTVtLKS1z+v17bMbtrt9SklDa+e+YyPusKN6SsZi9fktJhaqrFcVb+Mv7M/jdKxPp++woHhk2kx4PjEhIDGc//jl3vzct9ji5pPWHVyfyWtx2127cRvHmbVz1r7Hc9vaUhB/e1uBXXSfoSppJadwBAqDfC+OYtngdYxas4tKgBFBQp7z66Jwq9gqBSG+Se4fMqNbI6HQHtj+8OokfPfVlwrLuSZ0PfvbsaDZsiezH57/6lguf/qpCDEvWbmLl+i1s2lrKyvWVl0QveOpLHvhgZqXrLV27mQ+mLMm4Toebh9D+piG8OKr641hXFJcfKJcXb6HTre/HqpXirY+rWooOHDOzlN/h6UvWUdh/cCxhr9uUuVoq1ckaVN64v3J9pM3wmU/nceidQzn8rg8Tnp9UtDahA0iGmqHyNq+kL8yJ94+o8L3IhTAX2dklNNmt/F9N14gbPYuImr1sPY3rJ+6iId+kr0qqyonTy6MXMnxG5k5cy4MDMsDgyUsYPHkJ/7n6mEqrZbrcMZS2zRpy5QntKdyrUcLVsqODuUrLvELSu+Wtb3hn4mI2bCnh8uMLU277y2CU7fLizezXvBFQfiCP6nxb4v6NVhlEHX534g+o92OfseC+swHYFmxr9YatnPV45r7a0R9afAI+6/HPOLVzq9jjgjrGus2RA8PSuLOuVGdufx48jVvOPjj2+Ou4UsQ5T3zOZzf0jP3PmdRUs3ByiXbl+i28Pq6INRu3snlbaYXul5d1b8c9fQ6hbkHVz/XKyjx2dnzZM18zf+UGhl53Ege13j3hOSDhjP6pEXP56TH7xx7HH9jemlDEj45MP8t+fOknvgot2YC4bszREuD8lRt4bHj6Obui3a1HZ+hq/EbSCVCPBz7m8UuP5ICWTXhnYoUrByd4+pNITH8eMj3tOvFVTJnaIKK7dgfoeATUoqQQppFvWNLBtmmDevQJOUCstMz5aHr4OvQw9bifzKw4uKzvs6NCbb9o9SbuiTt7B7jt7Smx6pJb356S0BvqT69Niv0Q7hg0lZM7taRdigPghIVrYvE32a0u15zcIWMcd787LePzUTe8PomfHVsYe7whRJfP5JJC1MdxyTbdwWbCwoolvGc+m89NvX/AvJUbOLBVk1hpI6rHAyNiySteYf/B9O7SmvsuPIwHh87gP19HqmNGBdWD1fV4ioPen1JUw0W9PHoh7Vs04tWxRezVuH7a9TZsKaHxbok//VJ36gR7MtogeuZfP+XT63vGSrID+nblzENaJ5y5J5eIoycNAL//76S0ScGI7O90Zi8vZr/mjSgtc/42Yk7a9dLZEqLn2x+T9uV3qzbxyLBZHNmuWaWvTa7/B5izPHG0c3y7WKoDfmH/wVxz0gEcHsxKsLW0jBe+yv8MQrWm+ihMb4FUdcRzlocbA5A8SdZns1eGCyyDm9+q2QbA+Prz5O6xydVGazZty9gbYtay9YxfuIZrXsg8t1By6SudV8cWce7fPq9Q6kg2N65IHk30KzMMwttWSd1vssc/ns3pj3xSoctj1DlPpC69vD9lKY8Pnx1LCJBY7VETotVJmdw7ZAZzlq9nVFIyjB/3csgdQyv0yCktc7aVlvGXIdMT9tnkReW9q375n/G0v2kI//hsXmxZ0epNCW05yV1RD71zKDe/9U2V2x+u+lekinTYtPQl80ziSzNVYWahXpvqJPP0RxLnRPpL0Evu4gEVq6yjVaZ//3Re7KRm2LRlfLMDTOCopJBBSZqDYvLZ3x9fnUTvx/I3LD0bzn/yC5asyX0jV7qxDd+t2sjmbaX86j/lSWjdpm3c/NY3LFxVc/23o1VGyX3Jo6YsSt/O8ezn4RJgdYVNsMk2bCmpUGWaXJde5s6HU5fx90/nJSxfsLLieJbkUekXDfgqNgq5IKkyvnhzCS+NWkj7m4ZwW9AYHNaPnvoiVvVXVVtDDv5MZoRLKIO/ydzmAsSqh8csWF3hWBJ/vKjsyBR/vMlFj6RaU31UnX15wdNfVr4S8Mb4XXMWy3xM5Z3uzP761yczdOqyhHraRz+aVaG9Iqx01UpVLVnUpMqqOKs6gC/qkDuGVliW3DBdWuYpT4KqMm3Ewx/OilWFpBLf0yzM1B0TFq6JVVdW1dyq9yTXAAATkElEQVRqDs4s8/CzCVTF57PT93Krynie+Gq+bKk1SSG+yBvWjtLwU5vMTzNnFMDwGctos2fD2OPqJgSgwhlx1LY8zj/zx1cn5uy91m1KrD5atWErz1TjNxLvizkrQ8/auzoPg+rCqIlq31Rq6polpWVOvYIa2VRatSYppGoYkh1PpioG9/RjA2pK8hiMXHq7kh4vNWnU/FUJc3Wd/ODI7d7mjKXFoatpr/tv7hLgrqQ61eBVVWvaFDT9sISxuhZd6Oj4+z6u8W3mau6h2mr8t9WrTquKWnOorE3TD4vkyx9eTd9lVrbfm2l6xdWkWpMUdraZJkVEkuWinbMWJYV8RyAisn1+cky7rL9HVpOCmfUys5lmNsfM+qd4/iQzG29mJWZ2UTZj2RlKCo3ql3crqF+NqQpq0uibT0t43LRBYp+Ecw/ft8be6/HLjuTsw/apse1Vx2c39Mzr+0vl3vjV8bxwdfd8h5FXzRrVy/p7ZO3IY2YFwJNAb+Bg4DIzOzhptYXAFcBL2YojqipJ4bFLj6jWe5xyUEsAzj9iXy49er+06118VMWh/we0aMy0u3vFHvc+tHWV379/78502rtJqHVb7r5b7H7y1A0ndWpJw/qJ/d5GXl9+0GzaoG6ontKtmzZIufzIdondFs87fN+0s6IO+W2PhMfXn3lQiHcm4/5PZd+4rq41qUfHFtv1+nt/dGjC467twnX53Bn06NiCBy48LNS6Zxy8N0ft34weHVvW2Ptfd3rHGttWVUy968yUy0f86ZSMr3vgwsM4sNXuWYgoUTZPR7sDc9x9nrtvJXJt5z7xK7j7AnefDGS9c3iqg07vLq255awf8NOkIlmfI9pU6z2uPrE9AO1bNImN7GzRpD6fXp94Ftr32P0rvHZw0sGvbiXdpQb+7KiEx6d1bsUvT+7A45cdmbC81yGt+fiPJ1d4fdtmqQ+C5xy2D38+v0uFhvm6BcbwP57MpDvOYPKdZ9J4t4qdpY87YC9e+p9jYo+fvaJbyvd49JIjeOSSwxOWxU9iB/DGr45j7K2nc/C+5Zfu+ObOM/h1zwNTbjNZ/brhv9oHtmqSMBL365tOo0WTyNxBh+xbvUuH/OmMTsD21wEf12EvLujahp8fF/nOJM9ZBNAqLsHHO7BV+QnCNSeHv6z6q9ccV8Uoq+ffV3XnkjTJ+8KukROn8w7flwX3nc3An6f+Lm2Pcw5LXdp99vJujL75NP7ww06xZdHfNkDPg1ry/FXduSLNpJGVceCWs35QYXn0G7jvHuUnUy/G/Z7OOGTvar1fVWUzKbQB4i87VhQsy4sbe3fmsu7lX8CnftqVp/sexS9OOoA/J52NRZ3UqSWfXt+TSXecUen2zz9iX3p0jHxZft2zA1ee0J69m+7GkN/2oN1ejZh771mxEkLL3Xfjsu6JiSj5zDw+iV11Qnu6tCk/OA3o25UzDmnNVSdEvqj169bh2SuOjtwPqp3aNmvIsN+fxICfHcUBLSuWHnocGDmDTT4A/O0nXdmveSMa1y/g8uPKk1f9gjp0aNmEPRpGiq83nNkZgLMPjVT7XNC1DS9c3Z3jDyw/My7cq3HKfbV30wZcEPzoD9o7cubT54g2TLr9DAb07copB7Wka7tmtGiSeLDbvUH6ovPAnx3FNScdECvltWveiO7tmwNwY6/OCesO6NuV/fcqn+zvoz9EkuZzVxzNwJ8dRes9GjD21h/y7OXdeOkXx/L5jeVJPWxJLGp7+5U3qFeHRy45gp5B0jQz3r32xIR1Rt9yesrXNowb5XRBhtlKk+3dNHG/H9CyMR1bNaFFk/qc3Clypv6Pn3dL2H687oXNEx7f0+cQfrBP5Pv7q1PKJ1CMnngsuO9sftGj/KD7wXU9ePiSw1lw39kVTnIA7jy3vMLh/87vwrvXnkjbZg0rxH3NyQdwQ6/ykuWve5a/96BrT6BBvYqHvxn39OK0H+xNq6YN+O1pHZn/l7N4/LIj6d+7c+y3cud5h3Byp5bced4hABy+356MueV0mmeYhDBeo3oF9D12f355cgdG3XxabD9GR5Q3iDsWnHBgi1iCbJDtUWuBbA5eS1UfUK1fiJn1A/oBtGtXvYaW5o3r85cLDuPwtnsyev4qzjo0dR12tAg3+8+9KTCLTRncZLe6CROc/fLkDgz4ZC6Ht92DSUVrefTHkYNR9EdzYKsmjLq5/MdaUMe45/wuXH58Ifvu2ZA/n98l48VNoifqVxxfyO3BjyA6B0qvLpHYb+h1EP/8Yn7CmeJ+zRvRvbA5/U46gI57py5qntSpJb87vRM/OWZ/WgdnJY9dekTCAczMuKtPF54PZm1MLmk1a1w/Vu30ZNL2k6ujftGjPf97yoHsVq8OM5YWxxLge785MaHEskejevTqsk/s/6vMFccXcmS7PenYancO3rcpZxwSqXLbZ4+GdNu/GZccvR/fFK3lhANbcP8H5XP9RN9j09bShBJFz6TSymk/iJyZxV8fokmKM3WAe87vknLg3YGtmiTMHPraL4/j4gFfAZEDU6ort8Xbs2HFA02XNk257vSO/PWj8llUP/z9STTerS7XvDCWlcVbWbpuM633aBCbYK2wReKMt62bNuD7DVtovUcDXrvmeOoYvDF+Efd/MIN99mjICQfuxcrirZx/ZJuEA/m20jLWbdrGXk12Y/o9vShavZET7x/B6T9oxdN9j2L1hq00a1yfjre8D5R/F3p2bsX367dy+H578vTIihctOrXz3rFZUzu3zlw6u+KE9rzw9bfMXbEhVur+/MZT6fuPUSwLLtd5/ZkHcfWJ7WlQr4BFqzfx4qiFFO7VmM9u6EnL3XejQb0CVhQnTvXRZs+GFQ68ZsZ5QftZ9/bNK3y3p951JvUK6lC/bh3G3/bDlLPi3nnuwdwZN1twnTpGw/oF9O8dOVn5+qbT2FJaGpvuO7k98S8XHMofz+i0SySFIiC+bNgWqNaQTXcfCAwE6Nat23adel3avR2Xdq+YWE7/wd78YJ/dad8icnZbL+mDeejiw3j4w1mce/i+HN9hL7oVNqd/784Ub97GsnWbQ42DaFCvgC5t9gAiX4xRN5/GMfcOp99JFYv20Tru4zrslXF7D118eMI69Qrq8OovMxf/3Z2COhZLCJC+yuyhiw/n8eGzK0x0Flbyj6hr3LTE0X0RRqqDcfRMLVm0hNC0QT1OODB9nX5y6Syd+PYoM2PSHWdw16CpsauGQaRNKF3cC+47m8L+g9mveUOOLmzOZd3b8fLohRzWdk/+2+9Yxn67mgeHll/85p7zu/DW+CLGL1yTMkYz47rTOzFt8brYiUqn4ATgvd/04IMpS/nlf8axV+P6vPebEylzZ7e6BYy55XRmLy/mwaEzeezHR9Jur8RE8atTOsQSwIv/c2zK/6deQR32iivBtW3WiGcv78bR7ZtTr6AOrYJ2pA9/f1LC69o2a0TbZumvRXFch72Yd+9ZCddtyOTVa46rMBHiOYftw+dzVvLOr09ImIPp7j5d6NGxBWce0jrhdxp/onPP+V3oW42ePamq8yCyLwd8Mhd3+OEhrWNJoXPriidqezSqB5SXgnt32YcZS8tnXa5ft07W2rxScves3IgknHlAe6A+MAk4JM26/wIuCrPdo446yndlUxat8W+K1vi2klIfMnmxl5WVxZ7b/8b3fP8b36vWdp/5dK4/PXKO73/je/7upEU1FW5OTPputS9buyn2+O0JRT5ixrIqbaPfv8f4/je+52MXrKry+6/dtDW27z+envi+gycv9o+DWKYtXhtb74nhs3z/G9/z+9+f7u7u363a4Gs2bo29Lv5zXbByve9/43t+7+Bp/sdXJ/rGLSVevHmbf7tyQ2yd1Ru2eKdbhvjXc1dWGm9JaZk/9tEsX7dpa6Xr5sP2fI8zKSsr883bSkKvX1Ja5uc+8Zn/7uXxXlpaVvkLQnh7QpHPWrrO3d2/X7/F355QFHuuaPVGX795W8bXr1q/xUtLy/y7VRt82uK1NRJTFDDWQxxjzbM4GsLMzgL+ChQA/3T3P5vZ3UFwg8zsaOAtoBmwGVjq7qlP/wLdunXzsWMzX45yV7Vu8zbcidXrS+68M3ERh7XdM1aSTGfByg00ql/AWxMWRS5jelpHfh/XYJnO8nWbabn7brVi5P31r02ie/vmXNytaj3EZPuY2Th3r7TFPqtJIRtqc1KQncfmbaU8OmwW153eKXQ1lUg2hU0KtWaWVJFcalCvgJtSdDsU2dHVmmkuRESkckoKIiISo6QgIiIxSgoiIhKjpCAiIjFKCiIiEqOkICIiMUoKIiISs9ONaDazFcC31Xx5C2BlDYZTUxRX1eyoccGOG5viqppdMa793b3SqxTtdElhe5jZ2DDDvHNNcVXNjhoX7LixKa6qqc1xqfpIRERilBRERCSmtiWFgfkOIA3FVTU7alyw48amuKqm1sZVq9oUREQks9pWUhARkQxqTVIws15mNtPM5phZ/xy/935mNsLMppvZVDP7XbD8TjNbZGYTg9tZca+5KYh1ppmdmcXYFpjZN8H7jw2WNTezYWY2O/jbLFhuZvZ4ENdkM+uapZgOitsnE81snZldl4/9ZWb/NLPlZjYlblmV94+ZXR6sP9vMLs9SXA+a2Yzgvd8ysz2D5YVmtiluvw2Ie81Rwec/J4h9uy79liauKn9uNf17TRPXf+NiWmBmE4Pludxf6Y4N+fuOhblm585+I3I50LnAAZRfL/rgHL7/PkDX4P7uwCzgYOBO4E8p1j84iHE3Ite4ngsUZCm2BUCLpGUPAP2D+/2B+4P7ZwHvAwYcC4zK0We3FNg/H/sLOAnoCkyp7v4BmhO5XnlzIpeenQc0y0JcZwB1g/v3x8VVGL9e0nZGA8cFMb8P9M5CXFX63LLxe00VV9LzDwO352F/pTs25O07VltKCt2BOe4+z923Aq8AfXL15u6+xN3HB/eLgelAmwwv6QO84u5b3H0+MIfI/5ArfYDng/vPA+fHLf+3R3wN7Glm+2Q5ltOAue6eacBi1vaXu38KrErxflXZP2cCw9x9lbuvBoYBvWo6Lnf/0N1LgodfA20zbSOIram7f+WRI8u/4/6XGosrg3SfW43/XjPFFZztXwK8nGkbWdpf6Y4NefuO1Zak0Ab4Lu5xEZkPylljZoXAkcCoYNG1QTHwn9EiIrmN14EPzWycmfULlu3t7ksg8qUFWuUhrqhLSfyx5nt/QdX3Tz7221VEziij2pvZBDP7xMx6BMvaBLHkIq6qfG653l89gGXuPjtuWc73V9KxIW/fsdqSFFLV++W825WZNQHeAK5z93XA00AH4AhgCZEiLOQ23hPcvSvQG/i1mZ2UYd2c7kczqw+cB7wWLNoR9lcm6eLI9X67BSgBXgwWLQHaufuRwB+Al8ysaQ7jqurnluvP8zISTzxyvr9SHBvSrpomhhqLrbYkhSJgv7jHbYHFuQzAzOoR+dBfdPc3Adx9mbuXunsZ8AzlVR45i9fdFwd/lwNvBTEsi1YLBX+X5zquQG9gvLsvC2LM+/4KVHX/5Cy+oIHxHOCnQRUHQfXM98H9cUTq6zsFccVXMWUlrmp8brncX3WBC4D/xsWb0/2V6thAHr9jtSUpjAE6mln74OzzUmBQrt48qLN8Fpju7o/ELY+vj/8REO0ZMQi41Mx2M7P2QEciDVw1HVdjM9s9ep9IQ+WU4P2jvRcuB96Ji+vnQQ+IY4G10SJuliScweV7f8Wp6v4ZCpxhZs2CqpMzgmU1ysx6ATcC57n7xrjlLc2sILh/AJH9My+IrdjMjg2+oz+P+19qMq6qfm65/L2eDsxw91i1UC73V7pjA/n8jm1Py/nOdCPSaj+LSNa/JcfvfSKRotxkYGJwOwt4AfgmWD4I2CfuNbcEsc5kO3s4ZIjrACI9OyYBU6P7BdgLGA7MDv42D5Yb8GQQ1zdAtyzus0bA98Aecctyvr+IJKUlwDYiZ2NXV2f/EKnjnxPcrsxSXHOI1CtHv2MDgnUvDD7fScB44Ny47XQjcpCeC/yNYEBrDcdV5c+tpn+vqeIKlv8L+GXSurncX+mODXn7jmlEs4iIxNSW6iMREQlBSUFERGKUFEREJEZJQUREYpQUREQkRklBaj2LzIo5JWnZnWb2pyy81/q499wUTKUw3cxGb9fMliI1pG6+AxDZVZlZXS+foC6VuR6ZSiE6SOpNM6vj7s/lJkKRilRSEKmEmf3WzKYFE7q9EixrHEzuNiY42+8TLL/CzF4zs3eBD8O+h7vPIzLPzm+z8k+IhKSSgkjl+gPt3X2LBReuITIS92N3vypYNtrMPgqeOw44zN3DTiEdNR7oXDMhi1SPSgoi6WeTjC6fDLxoZn2JzD4Kkbll+lvkal0jgQZAu+C5YdVICJB6pkuRnFJSEInMsdQsaVlzYGVw/2wi880cBYwLZtY04EJ3PyK4tXP36cH6G6oZx5FELrIikjdKClLruft6YImZnQaR6+MSuWrV52ZWB9jP3UcANwB7Ak2IzED5m2CWS8zsyO2JIbjAykPAE9uzHZHtpTYFkYifA0+aWfQCMHe5+9xgrvv/mNkeREoHj7r7GjO7B/grMDlIDAuIXMegKjqY2QQiVU/FwBPqeST5pllSRUQkRtVHIiISo6QgIiIxSgoiIhKjpCAiIjFKCiIiEqOkICIiMUoKIiISo6QgIiIx/w+fyKawnoflVAAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "residue = combosignal - alpha_1*first_vector - alpha_2*second_vector - alpha_3*third_vector\n", "\n", "sign_correlation = np.zeros((sign_length, max_users))\n", "max_correl = np.zeros(max_users)\n", "index_max_correl = np.zeros(max_users)\n", "\n", "for j in range(max_users):\n", " correl_mat = (1.0/sign_length)*((linalg.circulant(sign_matrix[:,j]).transpose()))\n", " sign_correlation[:,j] = (correl_mat.dot(residue))\n", " max_correl[j] = max(abs(sign_correlation[:,j]))\n", " index_max_correl[j] = argmax(abs(sign_correlation[:,j]))\n", "\n", "plot(max_correl)\n", "plt.xlabel('User ID')\n", "plt.ylabel('Normalaized Correlation Value')\n", "\n", "\n", "#index_present = [40, 100, 312, 350] devices\n", "#signal_stengths = [100, 10, 8, 0.02] alphas\n", "#shifts = [13, 20, 45, 34] taus\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "int(argmax(max_correl))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Oh no! Garbage alert! What went wrong? Maybe, the way we extracted the signals out introduced more noise? After finding the location of the first three peaks, we can use a better method to estimate the peak values. Let's try to project all three simultaneosly onto the subspace spanned by these signatures. This is the least squares estimate of the coefficients." ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([100.00219047, 9.99948096, 8.00016167])" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A = (np.vstack((first_vector.T, second_vector.T, third_vector.T))).T\n", "b = combosignal\n", "\n", "alpha = least_squares(A,b)\n", "alpha" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "350\n", "34\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "residue = combosignal - alpha[0]*first_vector - alpha[1]*second_vector - alpha[2]*third_vector\n", "\n", "sign_correlation = np.zeros((sign_length, max_users))\n", "max_correl = np.zeros(max_users)\n", "index_max_correl = np.zeros(max_users)\n", "\n", "for j in range(max_users):\n", " correl_mat = (1.0/sign_length)*((linalg.circulant(sign_matrix[:,j]).transpose()))\n", " sign_correlation[:,j] = (correl_mat.dot(residue))\n", " max_correl[j] = max(abs(sign_correlation[:,j]))\n", " index_max_correl[j] = argmax(abs(sign_correlation[:,j]))\n", "\n", "plot(max_correl)\n", "plt.xlabel('User ID')\n", "plt.ylabel('Normalaized Correlation Value')\n", "\n", "max_4 = int(argmax(max_correl))\n", "shift_4 = int(index_max_correl[max_4])\n", "print(max_4)\n", "print(shift_4)" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "350" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "max_4" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "## Algorithm 4: Now we see a very clear peak at 350! Least square estimate on all the signatures gives us the following." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "fourth_vector = np.roll(sign_matrix[:,max_4], shift_4)\n", "\n", "A = (np.vstack((first_vector.T, second_vector.T, third_vector.T, fourth_vector.T))).T\n", "b = combosignal\n", "\n", "alpha = least_squares(A,b)\n", "\n", "alpha" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "## Final OMP algorithm: Coding the whole process up into a function." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def OMP(max_users, sparsity, sign_length, measurements, codebook):\n", " residue = measurements.copy()\n", " indices = []\n", " recovered_codewords = []\n", " \n", " for i in range(sparsity):\n", " \n", " # Choose highest-correlated codeword and add to collection \n", " max_correl = np.zeros(max_users)\n", " index_max_correl = np.zeros(max_users)\n", "\n", " for j in range(max_users):\n", " correl_mat = (1.0/sign_length)*((linalg.circulant(sign_matrix[:,j]).transpose()))\n", " max_correl[j] = max(abs(correl_mat.dot(residue)))\n", " index_max_correl[j] = argmax(abs(correl_mat.dot(residue)))\n", " \n", " max_index = int(argmax(max_correl))\n", " shift_index = int(index_max_correl[max_index])\n", " shifted_codeword = np.roll(codebook[:,max_index], shift_index)\n", " indices.append(max_index)\n", " recovered_codewords.append(shifted_codeword)\n", " \n", " # Least-squares projection\n", " A = np.array(recovered_codewords).T\n", " b = measurements\n", " xhat = least_squares(A, b)\n", " \n", " # Find component parallel to subspace to use for next measurement\n", " residue = b - A.dot(xhat)\n", " \n", " recovered_signal = np.zeros(max_users)\n", " for i, x in zip(indices, xhat):\n", " recovered_signal[i] = x\n", "\n", " return residue, recovered_signal" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.5" } }, "nbformat": 4, "nbformat_minor": 1 }