{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# PDE session 6\n",
    "## Hyperbolic PDE, stability of explicit methods"
   ]
  },
  {
   "attachments": {
    "image-2.png": {
     "image/png": "iVBORw0KGgoAAAANSUhEUgAAAvkAAAFTCAYAAACj0xNtAAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAC+aADAAQAAAABAAABUwAAAABNUfN2AABAAElEQVR4AeydB7wTRff3z0MH6VWKVOlVRBBEmmDDAqjIgwUFEXtDiqKg+GDvIBYUO6KgPjakSLEgKCDSFJAiSO9N6eTd3/zfybM3N8nNJptkdvM7n8+92ezOzp75zmb27JkzM/8KBAKLhEICJEACJEACJEACJEACJOAXArflsUrSyC+lYTlIgARIgARIgARIgARIgASkaC5CIAESIAESIAESIAESIAES8BcBGvn+qk+WhgRIgARIgARIgARIgASERj5vAhIgARIgARIgARIgARLwGQEa+T6rUBaHBEiABEiABEiABEiABGjk8x4gARIgARIgARIgARIgAZ8RoJHvswplcUiABEiABEiABEiABEiARj7vARIgARIgARIgARIgARLwGQEa+T6rUBaHBEiABEiABEiABEiABGjk8x4gARIgARIgARIgARIgAZ8RoJHvswplcUiABEiABEiABEiABEiARj7vARIgARIgARIgARIgARLwGQEa+T6rUBaHBEiABEiABEiABEiABGjk8x4gARIgARIgARIgARIgAZ8RoJHvswplcUiABEiABEiABEiABEiARj7vARIgARIgARIgARIgARLwGQEa+T6rUBaHBEiABEiABEiABEiABGjk8x4gARIgARIgARIgARIgAZ8RoJHvswplcUiABEiABEiABEiABEiARj7vAaMJBAIB+fHHH13Tcffu3fLzzz9HzG/fvn0yZ86ciMftB9asWSOrVq2y70r59tq1a2XlypXquvv374/K6p9//pHvv/8+5TrygiRAAt4g8NNPP8mePXvCKou287fffgt7LJ6dq1evjtp+/vnnn7JixYqYsp4/f77s2rUrprTJSrRgwQLZsWOHyn7dunWyfPnyiJfasGGDLFu2LOLxZB44fvx4MrNn3oYRoJFvWIVQnawE/vWvf8kTTzwhkydPznrA9u3TTz+Vjh072vZE3vz111/lhhtuCCa4//77Zfv27cHvv//+u1xzzTXB79E2Xn/9dXn55ZejJUn6sbfffltefPFFdR0Y+z179gxec/jw4fLXX38Fv+PB061bt+D3VGx8/PHHcumll0qNGjXklltuScUleQ0SIIE4CaBtXLhwYdiz8+XLJ126dJGdO3eGPY6d99xzjzz88MMRj9sPvPHGG8H2E+0U2iu7vPfee/Lcc8/Zd0XcvvnmmwUvKOmUO+64Q2bPnq1U+OCDD+Tpp59W23i+4Dljl08++URGjBhh35XUbTikLrjgAilSpIgULlxYzjjjjKCuSb0wM087ARr5aa8CKpATATw4HnrooYjJ4KHesmVLxOP2A61atZJvvvkmuOuVV17J4rk67bTTPNv4NWrUSObOnRss29ixY2Xbtm3B7zVr1pTFixcHv6diA16jSy65RFq3bh3VOEiFLrwGCZBA/AROOukk6d69uzz//PMRM4E3PVJPQOhJgwcPlqFDh6rdaKfQXtnlzjvvlMcff9y+yzPbt912W9DIB49QZ1CfPn3kpZdeSll5/v77b+UA2rRpk6DH9+KLL1Z/Bw8eTJkOvFB6CNDITw93XtVGAF2cffv2lWbNmknz5s1lyJAhcujQoWCKNm3aKI90rF3F1157rUyZMkUuuugigdGOFwSE/UDQ/as9RnjAoMG78cYbVdoZM2YIwl8eeOCB4LVHjRol7du3l4YNG8oVV1wh8PTHKl999ZV06tRJ6tevL507dw4a2Oj2vummm6RBgwZy9tlny8SJE4NZYhveK+gMox2N8R9//BE8jkYaD1rk2a9fPzlw4EDwGDz12mOEhyMenHfddZcq25dffimbN2+We++9N5gex/GwQV7t2rUTpNHy7rvvyujRowUPYujRtWtXQf5a4IXDCxPKcOGFF8rSpUv1oSyf0BXXqFy5cpb9/EICJGAmAbQ3aDvx20Z7cfTo0aCiPXr0yGaMBw+GbKxfv16uvvpq+eyzz1RbgfYCva5a/vvf/wbbvrvvvlu1V7gu/tBGTpo0Sd5//32VHM+D22+/XVq0aCFNmzYVvADs3btXZxX188SJE8rgxrloy9BTC8cQZNGiRcoJUa9ePdXjuGTJkmBeeA6gJxLpcR56C2Asa0HoY9u2baVJkybZXnzQ8/zOO++opCgbztNl27hxo+BZg55gLQghRTsKPS677LIsYUpwcoHhlVdeKY0bN1Zt+uHDh9Wp+MRxMIEe//73v+XIkSM62+Annl8oBzz5efLkUeeAsb1NDybmhr8IWMYPhQTSSsBq9AITJkwIWHGKAesBE7Aaw4DVwGbRyQozCVhhKVn26S9Wt27AMlT110D58uUD1gMlYMVIBqzwnECVKlUCVmOtjluNa8Bq8NS2ZTAHihYtGrA8+wErPjRgGfwByxMesEJLgnlZD5mA9XIR2Lp1a8DyxgSqV68esBpRdfy+++4LWA1sMK19w3rJCBQvXlxd1+plCFgPhIBlCKsklmc7cPnllwesmNOA9TBQ6axuXnXMMs4DVndq4LXXXlPHLSM9YL3kBLPG9q233hqA7h9++GHAarTVdySw4lJVWbGNa1asWDFgPUhV2awHoipH6dKlcViJ9fISsF6IAlZDH7AeIiov66GnjlkvWoqN9aBSelgvYQHrRUUdsx6EirHVKxCwPHcBa8yEqrf/yzX8f9SnZfCHP8i9JEACRhCwDPuA1eMXmDdvnvpNn3nmmQHLGRLUzTKYA8WKFVNtSXCnbaNXr14BtFkQtHd58+YNWC/5qg2yDPxAoUKFVFuK4/b2E+0U2iu0w/g7duxY4JFHHglYjgwkDVjOjIAVmqjaIrRX1113nfpTB61/loMoYL0U6K9ZPgcMGBCwjOOAZUirdhPPAuRnjb8KlC1bNvDUU0+pZ48VXhMoV66ceg4gg3POOUc9C6ZPn65Y4JliOYhU3pZjSnGwnCEqz/79+wcKFCig2lskeOyxx1S5sT1z5kzVluqy4fnxwgsvBCyDHIcDyAvPCsupovSwwp0CVatWDVgvNuq45fgKWMZ/4LvvvgtYTqqA5bgKWL0p6tizzz4bOP/88wNWuJPiCo76+aQSRPhnhQupslsvCRFScLdPCHSmJ99f72yeLE2FChWUFwWeZcQOwrsdGoN/yimnRB2kFVpweLTh3YDnA97kcINprZcByZ07t/IyW8a7ilUMzQcx7lbjrQZJVatWTXlk9EDX0LT274iTh7cJMfDWg0OFq8Bjbr0syBdffKG85NbLh5x33nmqF2PkyJHB01u2bKn24bj1gFIhOFaDo8qPAWbWQ0mgO8qFnoJwgmvCY1OpUiVB2ayXmSzJMGAY8aPoqYCXHSE1V111VZYuZIxzgPcHesBbpBmi9wBjJRCKU6JECYG+p556apb8+YUESMCbBBBbjl5V/KbRI2gPo8Hv3jLGxTJYYyoc2i20hWiDEM9fq1YtwbioUEE7hfYK6fCHdtkuCBVCrwC89+iNxTMCvbU5ifWyoNpahMYgDh3tJtpk5Pf5558Lnj3orUCZLENdHf/oo4+C2aK3tEOHDooFenx1OCTSoGcAOiFPy6hXeQZPtG0g71y5cgXLZr342I6KWA4u1VOMngKkRQ8zWEA/LejFQJnBr3fv3lnaYjAGL+uFRT1HQ/PXeehPtP3oSUYIEcZZUPxNII+/i8fSeYEAGm10VaK7EY09BirZB8OiDGjE7CE8OZULLwVaYOBiNgOngm5eGL7ovkYYUf78+VXXdahu4fJFV7Xl1cp2CAPMYBiXKVMmeKx27drBRhs7Q3VH9yv+cC4eAgULFgyeizh7e8hO8EAOG9APDyd032qBHlOnTtVfs+mB0CaI5d1TXdd4McBD1OqVEMvrJpaHL3guN0iABLxJwP7CjvYF4SV4odeGNz7xu49FSpYsKZb3PpgUbbFuR4I7Y9jAmCvLsy5wtOAlAM8COIVyEgwSRqgMHCyhgjYQRrNd0AaindUS2hZj9jUI0mAyAS0wrOEMiUegB65rF+hlf2aF6qEZwviH0V63bl3VXmPgNJxLkQQzFsF5g5DVVE/CEEkn7k8uAXryk8uXucdAAF5sxHoi/tHqxlQe6tDT0Mg7ieuGxykWQTp4QsLJL7/8oqakxKwNiE9/5plnVLJI6e15wKtif1joY/CwwxtlH/CEOHsrjEYnifiJPPFgs0+Bhjj7SBKtbCeffLKa7s3+sI6mRyhPxKvi4WR1RQviWFM5U0Sk8nI/CZBA4gTsbQrahFKlSgUNfOTupC0ObTciaRetrcI5b775pvLEY9wQegbgVY9FrDAYgQEeqS1GWexibwOj6Y62OPTc0O8635zKhmeCnTnOs+uh8wn3ifJhhjW8zKBX9tFHH5Vp06aFS6raa/RKoFcWPRSUzCBAIz8z6tnoUqJrEgYjjGfMRPDkk09m09eKEVXdldkOJLgD3myEwMDbYzeekS0eDvCS67mPoRcGK8UiGPyLFxYd2oPz4JmBRwbdxvB8o7x4+IwZMyas1z/0OvDWwJOvZ2XAPMsYvBZJ0BWNuZtRNrsxj/R16tRRHjGE/kDgDcLDIlzvg0pg+4cy6QHI8DjBoxWav06OFxp07aP8YIltzVOn4ScJkIA5BGAs4neL3zTCddBTpwXtNAZ7IgzSTUE7jB5ShGtiUGyoIwVtMXoUoBMcJHryhJx0QO8rHEiYQEB7v9F+oScAvceYLlQbxejFxEBce3kj5Y9pgTFLm55uFBMRhBrq+lwY8SgT2sxwZUOP6KxZs4JrnGB6TXDGpAs5CUIu0Z6idwXPFfQSh2uLoRsMfCt+X00CgXYYf056x3PShcfNJEAj38x6ySitEBOJBgcN/VlnnaVmCLB3feqZWxD7HU4QcmL38letWjVLrCG6jOF5gSDUxd71Ce88vPQIFUKsPOLv9bXxIEP8I2aZQJ4wVNFI6nAZeLgieeBh5CO2FTPzoJFHA4yuUghmrkHjjPMR+wqvFOJVIWikta74jlhOGNHwBmEbc0fjpQBpMO88Yit16A8eaFp3nIs40XHjxqkZhsaPH6+YoLsbgrwwlzPKDD6I9xw0aJDqEsdx6KbzxXc8RHT3NHoTMNMQyoXr4SGDGZHCCXpnMO4AYywQloVteOIoJEAC5hFAO4qxPmhr8fuHQQ3vsBb8njFOSYfu6P36E22CbjcQ74120y4Ix8Q87RB7+4m2H7HoMLAxkw3aFHtbiNnX0GbBcYF2GXO+28OK0KYjzj6coH1He4m2CteB/pgxCL2ZaB+tiQyULgh9QZuIMkBwLa0rviN/6A9BO4qXIegBxwti9XWsP47bdcfzCc8ZjG+C7ngOwAOP60OQF3oqEN8PJg8++KCK00caCK5pLxvyQzkgcFCdfvrpSgc4gfAcwTMqVPTUyXiRQRus/2KdsS40P373DoF/WW/M4WMVvFMGaupzAuhaxCAnGNwUEiABEiCB1BNATyeMVPQe2g3s1GvCK5IACcRI4CJ68mMkxWTpIYB3UHjBr7vuuvQowKuSAAmQAAmo8UAYe0MDnzcDCXiHAD353qkrakoCJEACJEACJEACJEACsRCgJz8WSkxDAiRAAiRAAiRAAiRAAl4iwHAdL9UWdSUBEiABEiABEiABEiCBGAhwMawokDAKH6PYI80kEOlU+8IhkdJ4dT8WiMJML9HmEPZq2RD/jz/M4uA38XPZUFf8zWW/Y7GyKAZJ2hcjyp7K/D2YenDgwIFqwR8n2vr5nkfZ0BY7fTY54ZfOtPw9p5N+/Nf2828OVOK5LzFtKuwl+6r28RN2fiaN/CjMMOUfVjzVUyZGSZrlEB6umJLRj7J8+XI1FZlTJl5gsXXrVvXg1NOTeUHnWHXEfMhr1651bCjFmn+60/n5N4fpZTEtIVYLdSKYthQPJa8L5mXHgzLc1IDRyoZ513GunvYwWlqvHcNc6GiLMb2vHwXz1WMqTT86k9atW6dWGsfUxX4TrK+wa9cuNS2o38qG8sTznMFaOBMmTEgbDhr5UdBjjtx27dplmaM2SvLgIXiCcZ4fBXP01qtXzzETL7BA4wvvmJ5L3gs6x6ojjCTM6d+8efNYT/FUOj//5lBvMFSdGgWYq9sPvVJwKGBOcSzm40SweBLu+5o1azo5zRNpMc875k7HuiJ+FPRQtGnTxpdGPnqm8FvW8/H7qf6wvgFW/vXry2c8zxk4i7E+QbrEf3EJ6SLJ65IACZAACZAACZAACZCAIQRo5BtSEVSDBEiABEiABEiABEiABNwiQCPfLZLMhwRIgARIgARIgARIgAQMIUAj35CKoBokQAIkQAIkQAIkQAIk4BYBGvlukWQ+JEACJEACJEACJEACJGAIAV8Y+fv27ZMnnnhCMK/9G2+8ERHtgQMH5Oabb5YzzzxTBgwYIJihgEICJEACJOAugT179qiZqqLlumHDBlmzZk20JDxGAiRAAiSQAAFfGPmYA7xAgQJqisDFixdHxIEFVYoVKyYzZswQzOf62GOPRUzLAyRAAiRAAs4IvPDCC1K5cmU15SWmCowkcLJcfvnlcuONN6q1SCKl434SIAESIIH4CfjCyC9btqzceeedOS70M3HiROnfv79aAfKuu+6Sjz76KH5yPJMESIAESCALgWuuuSbHRdcwb/Snn34q33//vXzzzTeC9SngeKGQAAmQAAm4SyBjFsM6ePCgIFwHK0dCqlSpIn/++afatv8bNmyYbNu2Te3atGmTLFmyxPGKt7gWVuxLhWBVR/RKnHrqqam4nKAbHh66vHnzpuR6qbzI/v37BctyI/zLb4IVMnGfpOq+TDW/VP7mUl22nTt3CsqH3kongh7OVEssC3b9+OOP0rZt22Ab0qlTJ2XwO13sKqeygdm0adMkWu9uTnmYehy/5yNHjvh2MSxTuVMvEvAagYwx8rE8Ngw4LdgOt2Q2upD1w3H+/PlqpUmsLOhEYHijyzrZgjJ069ZNNm/eLAsWLFBd5Mm+Jl6UKlSo4PjFJ9l6uZE/VurDircon98E9zSMnlTcl+lgl6rfXDrKBmMOvZVFixZ1dHlTX8R3794tWI1XC14MVq1apb+qT7S9/fr1U9u4d4sXLy6zZs3KkianLx9//LGMGjUqp2SePY574pRTTvGs/tEUx3Pm22+/jZbEs8dwP2M8iqm/z0TA4uUTYx2x8q0fBY5Ap+3Q+vXrBVzSJRlj5MMLhgcFDOLy5curAV/Vq1fPxr1hw4bBfYUKFVIPI6dGfp48ebI8xIIZuryxcOHC4MA1eMf69Onj8hWyZ5cvXz41rsEpk+w5mbcHHnwY+XYDxDwt49Pon3/+EdSdH8sGIqn6zcVHP7Gz8ufPL0WKFHFcd7lz507swkk6u3DhwqpXVWePByfKZ5dmzZopxwX2Ibxn+PDh0q5dO3uSHLfhxYfMmzfPcS9IjpmnOcEjjzwiU6dOdcwkzWrHfHkY+G3atAnriIs5E0MToiccL7blypUzVMP41YJxD2dZgwYN4s/E4DNh4Dtth9B+TZkyJW2l8oWRD4/23LlzVSwojPg5c+ZI48aNVez9/fffrwZ3Va1aVc2+85///EeGDBmiBt1effXVaQPvxoXhvYfgYY6wIgoJkAAJmErg+PHjqq1q2rSpjB49Oqgm2u7rr78++N3tjfr16/uu5xFGor1n2m1mzI8ESMAfBHwx8Bbe17Fjxwq6gTF7jt5GFcF7mSvX/xXz0UcfVd6wvn37qpcADML1sqxcuVJ5qJo0aSLLly/3clGoOwmQgA8IzJw5U9C+oosa45v0DGboaWzRooUqIbz0GBMFJ8vtt98uCLW6+OKLfVB6FoEESIAEzCLgC08+PNljxowJS/ahhx4K7ke3Nzz5fhEMHMbDsm7dumrgml/KxXKQAAl4k0C9evVU2KAOHURoDqRRo0by1ltvqW38++STTwQvBIjffeaZZ1S4VfAgN0iABEiABFwh4Asj3xUSHswERj7CkDCzzvvvv68GdyA2mUICJEAC6SCAOONwscYw9u1xunDMdOzYMakq6nCWcBMsJPXCzJwESIAEDCHgi3AdQ1imXA3MLw0jH7PB4IGGAS8UEiABEiABfxMInS3O36Vl6UiABOIlQCM/XnJpPu/w4cNqPn9MoYbZgiA08tNcKbw8CZAACZAACZAACRhCgEa+IRXhVA0skAPB4l7ayMfMQhQSIAESIAESIAESIAESoJHv0XsAM1JASpcuHVwEi0a+RyuTapMACbhOgDH5riNlhiRAAh4jQCPfYxWm1dUrysHIx0A3xGjSyNd0+EkCJEAC/iXAmHz/1i1LRgJuEqCR7ybNFOaljXyE6+jVPvW+FKrBS5EACZAACZAACZAACRhIgEa+gZUSi0raoIcnH4IVEHft2hXLqUxDAiRAAiRAAiRAAiTgcwI08j1awTDy0WUL4x5SokQJteKvR4tDtUmABEjAVQKMyXcVJzMjARLwIAEa+R6sNKgMIx+GPRaVgdDIVxj4jwRIgAR8TwAOHgoJkAAJ5ESARn5OhAw9DiNfh+pARYbrGFpRVIsESIAESIAESIAE0kCARn4aoLtxyVAjn558N6gyDxIgARIgARIgARLwBwEa+R6tR8yTb/fk08j3aEVSbRIggaQQYEx+UrAyUxIgAQ8RoJHvocqyq7pnzx4Vh6/3IVzn2LFjsn//fr2LnyRAAiRAAj4kwHnyfVipLBIJJIEAjfwkQE1Flvv27ZOiRYsGLwVPPmT37t3BfdwgARIgARIgARIgARLITAI08j1a7/DY08j3aOVRbRIgARIgARIgARJIMgEa+UkGnIzs//nnHxWaYzfy9Xz59OQngzjzJAES8CoBTjfp1Zqj3iRAAokSoJGfKME0nI9QHYjdyNfhOlz1Ng0VwkuSAAmQQAoJMCY/hbB5KRLwMAEa+R6svGhGPgbkUkiABEiABEiABEiABDKbAI18D9Z/OCO/SJEiqiT6mAeLRZVJgARIgARIgARIgARcIkAj3yWQqcxGG/L2cB1t5HMKzVTWBK9FAiRgKgHOk29qzVAvEiCBVBGgkZ8q0i5eJ5yRnzt3bilUqBDnyXeRM7MiARIgARMJMCbfxFqhTiRgHgEa+ebVSY4ahTPycRK8+fpYjpkwAQmQAAmQAAmQAAmQgG8J0Mj3YNVqQ94eroNiwMhnuI4HK5QqkwAJkAAJkAAJkIDLBGjkuww0FdlFMvJh9NPIT0UN8BokQAKmE2BMvuk1RP1IgASSTYBGfrIJJyF/GPn58+eXfPnyZcmdnvwsOPiFBEiABHxJgDH5vqxWFooEXCdAI991pMnPEEZ+aKgOrsqY/OSz5xVIgARIgARIgARIwAsEaOR7oZZCdIxm5DNcJwQWv5IACZAACZAACZBABhKgke/BSo9k5DMm34OVSZVJgASSQoAx+UnBykxJgAQ8RIBGvocqS6saychnTL4mxE8SIAES8C8BxORTSIAESCAnAjTycyJk4PFoRv7ff/8tJ06cMFBrqkQCJEACJEACJEACJJAqAjTyU0XaxetEM/JxGcbluwibWZEACZAACZAACZCABwnQyPdgpUUy8vWMOzTyPVipVJkESMBVAozJdxUnMyMBEvAgARr5Hqw0GPnFihXLpjli8iE08rOh4Q4SIAES8A0BzpPvm6pkQUggqQRo5CcVr/uZHz9+XA4fPiwnnXRStswLFy6s9tHIz4aGO0iABEiABEiABEggowjQyPdYdWNgLSSaka/TeKxoVJcESIAESIAESIAESMAlAjTyXQKZqmy0AV+oUKFsl9SGv06TLQF3kAAJkECGENAx+fozQ4rNYpIACZBAkECe4JbHN/bu3SufffaZFCxYULp06SJ58+YNW6IZM2bI6tWrpX79+tKqVauwaUzeqQ14bdDbddX7dBr7MW6TAAmQQCYS8OOc8ozJz8Q7mWUmAecEfOHJP3jwoLRs2VLWrl0rM2fOlEsvvTQsiQEDBsizzz4ruXLlkvvuu0+eeuqpsOlM3qkNeG3Q23XV+3Qa+zFukwAJkECyCezZs0e6desmjRo1kksuuUR27twZ9pJoe5s1a6b+0C7T2x4WE3eSAAmQQEIEfGHkT5w4UZo0aSLDhg2T0aNHy+bNm+WXX37JBubrr7+WZ555Rvr06SMjRowQfPeaaANeG/R2/fU+ncZ+jNskQAIkkGwCQ4YMkcaNG8vixYvl7LPPloEDB2a75NKlS+W1116T77//XubOnav+vNgWZysYd5AACZCAYQR8Ea6zaNEiOf3004Nosf3rr79K06ZNg/uw0atXL+W9v/zyy2Xs2LFyzTXXZDmOL3gAHTp0SO3/559/ZPfu3XLkyJFs6aLtOHbsmDovWpp4j23dulWdill2oJtdtJ47duzIdsyeLpFtXANTeOprJZKXaeeivrFacChX0/SMRx/c06gzP5YNPJL5m4uHt5vnYDYtzJjlNOwEbUSq5csvv1TGO657/fXXS7169bKpkC9fPilQoIDkz59f9apifBG+uy3sHXCbKPMjARLwGgFfGPkwzrQXGxWAh0Y4b3aVKlVk8uTJyoO/fft2qVChQrb6mjBhgmzbtk3tR9fzhg0bVJx/toRRdhw9elTWr18fJUX8h9atW6dOhqEd7hoIRUJPRrhj8V/1f2eC9caNGyOOefhfSu9twZCCYQCD0W+CMiGsLVn3Rbp5JfM3l+6y4b7EyyfaIycCJqmWTZs2BdvV0qVLC8ZKQQ/7GKlatWpJjx495NRTTxUY/O3bt5cOHTpkURU9AYMHD1b7Dhw4oD7nzJmTJU1OX3SokNPzcsrXhONw9qCt8mPZwBd1jl4ePwrKBhtjzZo1viseHEn48+s03rArnf7mYLOl06bwhZFfqlSpLLGf8GQjRt8uaBD79eunflglSpRQg287duyo4vjt6R5++OHg17Zt20rDhg2zvEAED0bZgLcUXdbJkGXLlqls0UtRs2bNbJfAXPn4S9b1582bJ3Xr1nXMJJuiBu7AjxHGVLVq1QzULjGV8HKGXqpk3ReJaZf42cn8zSWuXWI5wOCtVKmSlCxZ0lFGyfCO56RAnjx5lFGPT/yW8Jc7d+4spy1ZskTGjx+vHC5wyMDgnzp1qpx77rnBdGhj3nrrLfV91apV8sILL2TrmQ0mjrCBdh4S2qMbIbmndpcpU0bp68eyoWA//vijnHbaaY57r7xQiStXrhTcm7oOvaBzrDrixRovMPj9+lFmz57tuD2BPfb555+nDYcvjPx27drJgw8+KPfff7/AmPnhhx/kySefVFDnz58vderUUYYvdsCbiR8Y3jTxIPKa6B4Ke8+FvQzYr9PY93ObBEiABJJNoHbt2rJixQo1RuqPP/6Q6tWrq5Ac+3XhCWvdurXAow/p3LmzfPfdd1mMfHj+y5Ytq47jBQ5tNcJ7nAh6NSFOz3NyjXSl1S9OfiwbmKLuUDanIWrpqg8n18W9jPvbj3WHnrl4fqtO+KUzrb4vnegAJum8j/+vFXSisYFpzznnHDUlJrz3+LvzzjuV5wuq9u7dW/DmDMHMOuga7tq1q3Tv3l2efvpptd9L/7QBH26efJSDRr6XapO6koC/CPTt21fNXAZP7KBBg1TvKUqIHsgbb7xRFRZTF0+aNEmmTJmijPt33nlH2lmOGrcFvbfpfLi6XR7mRwIkQAJOCXjPlR2hhGPGjFGDCvGGjO4RLejq1oKBYNdee60K7UG8qPb06ONe+NRGPj35Xqgt6kgCmUXg1ltvlSJFish7772n1ivBZAeQ4sWLy5lnnqm2GzRoIB999JF8/PHHKlZ15MiRgtBJSuwE+PISOyumJIFMJuAbIx+VqGMwo1Uoujl1N3C0dKYeg5GPFxn8hRN68sNR4T4SIIFUEYAjBX92qVixoupV1ftatGgh+KOQAAmQAAkkj4AvwnWSh8e8nGHkR/LiQ1sa+ebVGTUiARIgARIgARIggVQToJGfauIJXi90utDQ7GjkhxLhdxIggUwkwJj8TKx1lpkESMBOgEa+nYYHtunJ90AlUUUSIAESSCIBxOTjJYZCAiRAAtEI0MiPRsfAYzTyDawUqkQCJEACJEACJEAChhGgkW9YheSkDo38nAjxOAmQAAmQAAmQAAmQAI18j90DMPIjzZGPojAm32MVSnVJgASSQoAx+UnBykxJgAQ8RIBGvocqC6rG4sk/fvy4HD582GMlo7okQAIkQAKxEGBMfiyUmIYESIBGvsfugViMfBQJ6SgkQAIkQAIkQAIkQAKZSYBGvsfqnUa+xyqM6pIACZAACZAACZBAGgjQyE8D9EQuGcs8+cifnvxEKPNcEiABPxBAWAuFBEiABDKVAI18j9U8jXyPVRjVJQESIAGXCTAm32WgzI4EfEqARr6HKvbQoUOCQbWYQSeS6GP05EcixP0kQAIkQAIkQAIk4H8CNPI9VMfacNeGfDjV9TGdNlwa7iMBEiABEiABEiABEvA3ARr5HqpfbbjnNE8+iqTTeqh4VJUESIAEXCPAefJdQ8mMSIAEPEqARr6HKk4b7tpbH051fUynDZeG+0iABEiABLxLgAOKvVt31JwEUkmARn4qaSd4LW24a0M+XHb6mE4bLg33kQAJkAAJkAAJkAAJ+JsAjXwP1a823LUhH051fUynDZeG+0iABEiABEiABEiABPxNgEa+h+oX02dCtCEfTvWCBQsKunJp5Iejw30kQAKZQgAx+RQSIAESyGQCNPI9VPvacI9m5MPAx8BcndZDxaOqJEACJEACMRDgPPkxQGISEiABoZHvoZtAG+7RjHwUp3DhwnLgwAEPlYyqkgAJkAAJkAAJkAAJuEmARr6bNJOcV6xGPl4CdNokq8TsSYAESIAESIAESIAEDCRAI9/ASomkkjbco82Tj3MZrhOJIPeTAAlkCgHOk58pNc1ykgAJRCJAIz8SGQP3w8jXMffR1IMnXw/SjZaOx0iABEiABLxHgDH53qszakwC6SBAIz8d1OO8Jox8PXtOtCwYrhONDo+RAAmQAAmQAAmQgP8J0Mj3UB3DyM9p0C2Kw3AdD1UqVSUBEiABEiABEiCBJBCgkZ8EqMnKcv/+/VKkSJEcs2e4To6ImIAESMDnBBiT7/MKZvFIgARyJEAjP0dE5iRAnD09+ebUBzUhARIggXQQYEx+OqjzmiTgPQI08j1UZzDyc5pZB8WhJ99DlUpVSYAESIAESIAESCAJBPIkIc+4s9y+fbuMGjVKmjZtKqeddppUrlw57rz8eGKsRj5j8v1Y+ywTCaSOwGeffSbr169XbXHjxo3VAnupuzqvRAIkQAIk4AYBozz58EBXqlRJvv76a7nsssukXLlycu6558qCBQvcKKvn88DA21g9+YcOHRLEpFJIgARIwCmBGjVqqFWzn3vuOalfv77UqVNH+vTp4zSbtKZnTH5a8fPiJEACBhAwypMPA7Zv377qD2zgScL30qVLG4Aq/SrEGpOv4/bxUlC4cOH0K04NSIAEPEWgQYMGgj8t77//vsyaNUt/5WeaCSAmn0ICJEACOREwypMfqizCdXr27Clz5swJPZSR352E6wAQ0lNIgARIIFECV111lWzatElOnDiRaFY8nwRIgARIIEUEjPLkr1u3Ti6++GIVB4q4fHiSvv32W2nRokWKcJh9mViNfLsn3+wSUTsSIAETCTz22GMybdq04Piok08+WX777Tc5fvy45MpltG/IRJzUiQRIgATSQsAoI79KlSoyc+ZMWbhwofzyyy8yduxYKVGihPLmp4WOYReNNSZfx+0jPYUESIAEnBIYNGiQdOvWLdgWYyDuI488Innz5nWaVdrSMyY/beh5YRIgAUMIGGXkg0mpUqWkY8eO6s8QRsaogcG02ksfTSmdhuE60SjxGAmQQCQC8NbXrl1b/fXo0SNSMu5PEwHG5KcJPC9LAh4jwH5Xj1TYwYMHVTys9tJHU1unoSc/GiUeIwESIAESIAESIAH/EvCVkY940VimjcTgMa8NINNeeW3AR7sl6cmPRofHSIAESIAESIAESMD/BIwy8uF5Xrx4cRbqa9askY0bN2bZF+7L/fffL40aNZK6devKm2++GS6JHDlyRG688UapWbOmSos5oL0i2isfi5Gv0+hzvFJG6kkCJGAGgWXLlsn+/fuzKPP9999n+R7uC5wsL730kmA2nhdeeCGiMwVtMdpfzJ7Wv39/2bdvX7jsEtrHmPyE8PFkEiABHxAwysjfsmWLGmxr5zpp0iSZO3eufVe27R9//FEtoPXrr7+q6TYffPBB2bZtW7Z0//nPfyRPnjyyatUqWbp0qdxyyy3Z0pi6Q3vytZc+mp46jT4nWloeIwESIIFQAu+8845s2LAhy+6hQ4dm+R7uy7PPPivTp0+XwYMHq3b78ccfD5dMGfd//fWXMvDbtWunZu0Jm5A7wxLQMfmx9FyHzYA7SYAEMoKAMQNvP/nkE/VQmD9/vugHA0JqsB+z7ESTqVOnSpcuXdTMD5iN56yzzlILt3Tv3j3LaW+//bZgUZdXX31VatWqJR06dMhy3OQv2mDXXvpoumojn578aJR4jARIIJQA2pkXX3xRtcVHjx6VsmXLqiQHDhyIKRTyrbfeknHjxknDhg0FTpXzzjtP0MtqlyVLlsiKFSvko48+Elzj9NNPtx/mNgmQAAmQgEsEjDHy8+fPLwUKFFCedm3I5s6dW+AZQhhONIHXHg8VLeXKlcvmyYfHA54pePmvueYaefLJJ9V0nZgWzi5du3ZVK+1i39atW+W7776TggUL2pPkuI1ubrdXh8SDEbJy5coc88YsPBCEPrmtB4yAn376yZdzZSOEAIL1GvwmeGHG4G237wdTOCXjN2dK2VBvaOPQC+lEtGPAyTnwEKP9xVSZaI91W1ymTBm59dZbc8zqjz/+UOGQSFi9enX1W8JYKbTlWhYsWCD58uWTli1bqnYEM6pNmDAhSzsLLz9eAiAo+86dO1UPrM4jlk+UH+0+em79Jrt371ZFQtm0V99PZcQzzK9l27Vrl6B8oeFwfqg/OBZRLj/+5lA/hw8fdlw22BNoA9Mlzp4aSdSyc+fOcv7556tVWosUKeLoSngYacMWJ+KhiH12QUOIhySM+tatW8sll1widerUUd/t6T799NPg17Zt20qbNm1imrYyeJK1AUMKXdBuCm4uSKtWrdTDMVreOha1fPnyrusxb948qVevnmMm0fQ15Rh+jDCGq1WrZopKrukBgwchas2bN3ctT5MySsZvzpTy4WW9UqVKUrJkSUcqaQPdyUlwaNxxxx3Su3dvZXTbjfNY8sHvR5+DNhd/9n3IAy/T69evl9WrV0vRokXVtV577TW58847g5eA06dChQrB72i7Q9v04MEIG/r6Ts+LkJ1Ru/ULH8qGcvpNMIWrX8uGusNLrh/vS/TM4ffvx7LhN4bfmtOyoS1L52/UGCMfAHFzfPHFF4KwGu2pwH6svnjOOedgM6zUr19fZs+eHTwGr3efPn2C3/UGvP16MRd8eimeUXvldCiOLlO4T9xQeFgzXCccHe4jARLIiQAM83vuuUfgddc9XHC+IN4+mlSsWFFNlFC1alXVE4oXE93m6vNOOeUU5e2HgQ9p1qyZCt/Rx/GJMKF///vfahdCe7A4Il50nIg2Ep2e5+Qa6Uqr2YG3H1cgxgsg6i2dxlGy6haebvwuEHHgN9mxY4fyWvvxN4e6Qg+F07LBDkvnb9QoIx8/bITRvPHGG4Jl1LXk5MG64oor5NFHH5WXX35ZPVjwstCiRQt1+gUXXCBPPfWUNGjQQAYMGKD+8PD64IMPwr4I6Gua9qmN/Fi9c3gZ0OeYVhbqQwIkYDYBtKdwFGAALjxRkFgeVBgb9corryjHDD4R/ghBqOTkyZPlhhtuEPSQYtIDPDCxyjkcO7169VLp+I8ESIAESMA9AkYZ+fDeI8zF6UAseDUwvdv48ePV2/GUKVOCHoCbbrpJELYCufLKK9U2vP6Y4g0hO14RbbDHauQjHT35Xqld6kkCZhFA3PBdd92l4uqdaIZwSMTuN23aVDlWMJ0mZO/evYJJFWDko23CBAjYRvf+hRdeKFxV1wllpiUBEiCB2AgYYeQj3nz79u2qixZx0fD4IARHd9VhYFZOg18RvwkPfahceumlWXYhxh5/XhNtsMdq5NOT77Uapr4kkH4CGOCKMU3dunVT3vj77rtPxc1DM3jy7XHy4bQtXLiwCrcMPYb2HJ59LRhbhHEUFBIgARIggeQRMMLIx8Cy2267LVjKYcOGBbexga7jaDH5WRL79Iv25McSkw8ESKdfDHyKhMUiARJwmcAzzzyTJe7++uuvD14BMfnffPNN8Ds30kdAO8C8NK4sfbR4ZRLIXAJGGPlnnHGGmpYxc6sh55LDyMdYg9BBbJHOhMdfvxhESsP9JEACJGAnAIcKhQRIgARIwB8EjDDyNUqMOv/www/1V/WJLmLMINC+fXs17VSWgxn0BQZ7rF58YEFahEBRSIAESMApgZ9//lmts2E/DyGTjRs3VrH29v3cJgESIAESMJOAUUb+sWPHZPTo0SruEzGcWFgF06dhijXEhmLAbE6x+WZiTlwrhN7EGo+PqyEtw3US584cSCATCWzevFkQNnnxxRcrh8GkSZPUgoMjR45Uq4sPHjzYeCx6vRDjFaWCJEACJJAkArmSlG9c2e7bt089SL788kt54okn5JNPPlGx+Pfee69gsaxp06bFla8fTorHk89wHT/UPMtAAqkngPnxMc0wBssiTh+L4KE9wSxmEydOTL1CvGIWAozJz4KDX0iABCIQMMrIR3hJaMw55mjesmWLmsrNvkBWhPL4djcesPTk+7Z6WTASMIoA2lz7yo5ol7dt26baZ8ygQyEBEiABEjCfgFHhOk2aNJHly5erhVF0uA48Sg8//LA8/fTTnprX3u2qd2rkIyafnny3a4H5kUBmEMCsOj179lTz18O58Pnnn8tll10mmO44p2k0M4MQS0kCJEAC5hMwypOfJ08emTlzpooDBboOHTrIjz/+qDzYQ4cOFbwEZKrEE5NPIz9T7xaWmwQSI9CyZUuZMWOGmvQAHv0XXnhBBg0apFa/HTduXGKZp+hsxuSnCDQvQwIkYCwBIzz5aIxPnDihpohErCGWRrcLG2tRXnm9cq+dTaRtePLBDQvbZOpg5UhsuJ8ESCA8AbTDaIPRdsBj37dv32DC48ePqzY6uIMbaSPAmPy0oeeFScBTBIww8jFrDrxE8BCdffbZ2QC+/PLLauBttgMZtCOecB3gQQ8AjfwMulFYVBJIgAAWJUSoJCZBQLtrl2LFismSJUvsu7hNAiRAAiRgMAEjjPzWrVur6THBaf369QbjSp9qTo18PUgXRn7p0qXTpzivTAIk4BkCmMJYC6YtppAACZAACXiXgFEx+cCIGRyGDx8uDz74oKKKAV9YJCvTxWlMvl44i3H5mX7nsPwkEB8BxOTfcccd8s0338iBAwfks88+iy+jNJ3FMM80gedlSYAEjCFglJF/6NAhufDCC+Xkk0+Wn376SUHCglhTp041Bli6FIGxrg33WHSwe/JjSc80JEACJKAJfPXVVzJixAhBiA7aYEybibVLKGYQYEy+GfVALUjAdAJGGfmLFy+Wtm3byo033qhmcQC8atWqycaNG03nmHT9MIBWG+6xXEy/ENCTHwstpiEBErATwEKECN1p1apVcHfRokUFjhgKCZAACZCANwgYZeRrr5EdHTz6VatWte/KuG0Y+Oh6dmLk67QI86GQAAmQgBMCxYsXl1WrVgVPgbMAixXaF8gKHuQGCZAACZCAkQSMGHirydSuXVuqVKkinTp1krVr10q3bt0Eq9w++uijOklGfmpDXRvusUCgJz8WSkxDAiQQjsCAAQNUO1yuXDnB1JkvvfSS9O/fP1xSY/cxJt/YqqFiJEACKSJglJGPMo8cOVLmzZunpmrDPM0w+HPnzp0iHGZeRofcaMM9Fi11Wv2CEMs5TEMCJEACIKDHRWE81J49e+TMM8+UOnXqEI4hBBiTb0hFUA0SMJyAcUY+eMG413O7//7771K5cmVBPGimijbynXjydVp9bqayY7lJgATiIwDnSr169eTIkSNy7NgxQVtct27d+DLjWSRAAiRAAiknYJSRf/ToUbXo1datW5UnSdN44IEHwi6SpY/7/VMb6tpwj6W89OTHQolpSIAEwhGYM2eO9OjRQ018kD9/fpUEM+x8/PHH4ZJzHwmQAAmQgIEEjDLyFy5cKGXKlOGUmSE3ig65cWLk67T63JAs+ZUESIAEIhJ4/fXX5d1335U2bdpETGP6Acbkm15D1I8ESCDZBIyaXQdhOrlyGaVSsvnHlL/25GvvfCwngSNmwtDnxnIO05AACZAACGBGM4ToUMwkwJh8M+uFWpGAaQSM8ORjJh14jSArV66U7t27S/369UU3ZJdffrmKDTUNXqr00Ya69s7Hel2kpyc/VlpMRwIkMHHiRPntt98E0/b26dNHzXCGqY0hcBoMHDiQkEiABEiABDxCwAgjP1++fIKp2iC9e/fOhi7T52aO18iH51+fmw0qd5AACZBACAEY9LotHjx4cJajOjY/y05+IQESIAESMJaAEUZ+xYoVpV+/fsZCSrdi2htPT366a4LXJwF/E8CUxX4RxuT7pSZZDhIggXgJMAA+XnIpPE97453E5EM9evJTWEm8FAmQAAmkiIAOZcWLDIUESIAEIhGgkR+JjEH7tZHv1JMPI1/3AhhUHKpCAiRAAiRAAiRAAiSQZAI08pMM2I3sYeTnyZNH8ubN6yg7Drx1hIuJSYAESIAESIAESMA3BIwz8v/73/9K48aNpVWrVgryI488Iph9J5MF3ninXnzwYrhOJt81LDsJxE8Aq9zefPPNcsopp8irr74qBw4ckNtvvz3+DNNwJkNZ0gCdlyQBEjCKgFFG/rZt2+SJJ56Q6dOnS6lSpRQoPGRmzpxpFLRUKwNPvtN4fOhIT36qa4rXIwF/EHjxxRelUqVK8sorr8iJEycEq90uXrxYaDibUb+MyTejHqgFCZhOwCgjH3PkY4XF0qVLB7nBUD106FDweyZuwMinJz8Ta55lJoH0EFi0aJH06NEjy+KEmELz6NGj6VGIVyUBEiABEnBMwCgjv06dOsprv337dlUQdBGPGTNGzjzzTMcF89MJ8Rr59OT76S5gWUggdQSaN28uY8eODXruf/rpJ+VswZomFBIgARIgAW8QMGKefI0KHvxhw4apePyNGzdKjRo15L777pOmTZvqJBn5yZj8jKx2FpoE0kbglltuUTH4PXv2VIZ+9erV5b333kubPvFcmPPkx0ON55AACfiJgFFGPhrlzp07q7/9+/erOFAde+gn6E7LEm9MPuL4jx8/LocPHxauVumUOtOTQOYSyJUrl4wePVpGjRqlVs1GTD7FHAL6ucgxEubUCTUhARMJGBWus27dOmnSpIk899xzcvDgQdENmYngUqlTIuE60BPnU0iABEggVgKY1ax79+4yefJkKViwYKynMR0JkAAJkIBBBIwy8qtWrSqffPKJ7NmzR1q3bi2XXnqpfPrppxk/2AtjE+LxpOkZebgglkG/OKpCAh4gMGTIEOnTp4+8++67UrNmTRkwYIAsW7bMA5pTRRIgARIgAU3AKCMfSiH28+GHH5YVK1bIddddJ3379hXMnZ/JEq+Rr2fkoZGfyXcPy04Czgnkzp1bzjvvPPnggw9k4cKFauXss88+23lGaTyDMflphM9LkwAJGEHAqJh8EDl27JhMmTJF3nrrLfVwgZGPaTUzWeI18rUnn+E6mXz3sOwkEB8BrFvy/vvvy9tvvy3FixeXF154Ib6MeJbrBHQoK2PyXUfLDEnAVwSMMvK3bNkiLVu2VH8w7jt27JhlnuZo5OFtwsItiB/t37+/WqkxUvpffvlFJkyYIMOHD5e8efNGSmbMfnji4wnXoSffmCqkIiTgKQIYcIsFsTC7DkImq1WrFrP+S5culZ9//lmaNWsmjRo1inoe2uI8efLkmC5qJjxIAiRAAiQQloBR4TrwFv36668ybtw4Offcc2M28PFy0KVLF7niiivkjDPOUN3M6BEIJ1hYa+DAgcor5YWFXaAvyqK98uHKFGmfPoee/EiEuJ8ESCAcAQy6RcjkQw895MjA//rrr+XKK6+Uffv2yTXXXCOfffZZuOzVPix+eOGFF8pTTz0VMQ0PkAAJkAAJxE/AKE9+gQIFBFNnjhw5UjZv3hxciAXepIYNG0Ys5cSJE+Xiiy9Wnn8keuONN+T777+X9u3bZzsHD63bb79d5s+fn+2YiTsQqgOhJ9/E2qFOJOBPAmXLlpUffvhBvv32W9FtEHpJhw4dGrXAjz32mJp2E20vFjG844471AQKoSchzOSuu+5Sva6LFy8OPezadx3W4lqGzIgESIAEPETAKCMf02YiROeiiy4SrLB41llnqbCaG264ISrSP/74Q2rVqhVMg214iUKN/AULFgim6Xz88ceDaUM33nnnHdm9e7favXPnTlmzZo3osJfQtJG+Y1761atXRzrsaD8WBYPAG+80zx07dqhz165d6/hcdWKYf3jgr1+/Xvy48iXq/cSJE+ovTNE9vevIkSNq8KTTe8grhXbzN2damffu3aumE9btUqz6oc7jFUx28Pzzz6u27/TTT1cz68TiaEBPLMJ0IPhctGiRctaEGtsIB7rgggsELxPhjHy0M6tWrVL5/Pnnn2pKZXBwIugBxcuE0/OcXCNdaXG/QzATHdZC8Zug7vR977eyoXceIbh+vC/xu8W96cey4T7Eb81p2eC4hl2RLjHKyF+yZIkyzG+++WbZvn27ipkvX768IG4Tq99GEjQIiOvUgm3sswtCc+655x758MMP7buzbRcrViw4Pz8WhIEx69SgxQPN6TnZFPn/O/SDumjRoo7zRFkgyMMtfcAE4xjcyu//F9OID8woouvcCIVcVELPNOLHegMmN39zLmJ3JSvck2jTnNZdqGHtRJkvvvhCLYY1fvx45YnHvPlwwOj7KFJecEboMEHoDB3Q9tp1h9H++eefqwkWMDYqnMC5gRcBCAxZ/MHh4kTgNIK+Ts9zco10pd21a5e6NFhq3unSJRnXxTMLzik/Cu5l3JtOjUUvsMALDMrmx98c+OMFxmnZ/vrrL9UOpav+/mcZp0sD23XxIMAbD7w78M5D8IDDLA/RpFKlSrJhw4ZgEmx36tQp+B0b8+bNk99++026du2q9uONE57+qVOnijaGcQBz82t5/fXXBXk7bUThLT3llFN0Ngl9btq0SZ2PNQSc5okXAwhWu3V6rjoxzD+Mf8CLl1MmYbIybpf24rvFyqQCwviCYeDHsoGzm785k+oNusCDX65cOSlZsqQj1RKZVABtBn4PFSpUEAykbdq0qYqzDzXYQxWCjrjPSpcurbyV4RwCTzzxhBQpUkTuv/9++f3331Xdvffee3L11VcHs6tdu7ag/YVgbAAmSTjttNOCx2PZwDXw/HB6Xix5pzvNN998o1Ro3LixYplufdy+PsLEsDBmIi+qbuvkVn645/E7wW/ab4LoAdgIDRo08FvRVHnwYua0PUEkCByI6RKjjHzE3SPuE8Z+q1atlPcejfSsWbOi8kE8Poz3QYMGCUJsEG+PsBvImDFjVLw+4kMRqqMFhupXX32VxcDXx0z6xMsIJB6jWp/Dgbcm1Sh1IQHzCXTr1k05TjCZwTnnnCPDhg1T4TV2j3y4UrRt21a1q7169ZJJkyZJu3btVDJ0WcMDBqMUPbU6DBFGHI7Vr18/XHYJ7cup1yGhzHkyCZAACXiAgFFGPt524OWBjBgxQrDqIoz+nN7m8dZ43333qYcRPEeY11l7sTF4DA+ek08+OUtsPV4i4OkxXbSRH0s8bGhZ0F0OHlwMK5QMv5MACUQjgNAcLYizRxuinQZ6f7hPtNtwuGAyziyc7QAAMA5JREFUBBj1OhwHoZgYhAsHDKbV1FNrYhYe9Lw69Y6Fu3Ym7dPPRLzIUEiABEggEgFjjHw0+pj+Ep4fhNEgTMbJgNfevXsL/kIFBn84wVRvXhBtoMdj5KN8eDDTk++FmqaOJJB+AjDKMT8+2mH8wRkCR0ssBj60x6QHGEiL2dHQW6q7qZFPuBnNMN0mpuukkAAJkAAJuE8gl/tZxpcj5lNu3bq1INYQn6eeeqpgVh3EamKgSqZKIp58MMOLkn5RyFSGLDcJkEBsBLDeCGYfw3TG6FWtWLGiWnEcU2ciTjoWgWEPJ4028HM6R3ulc0rH4yRAAiRAAs4IGGPkY0XF66+/XoXaYMYATOEGDzRiO6dNm+asVD5KnaiRT0++j24GFoUEkkwA4X2YuhihkpiUYOvWrXLTTTep8Bs9aUGSVXAte8bku4aSGZEACXiUgDHhOjBm9eIrs2fPVjhbtmypplpDt3GmijbyY+0uD+WE8+jJD6XC7yRAApEIIJYeXntMeLBs2TKpXLmy3HjjjSp8J9I53J9aArr3gzH5qeXOq5GA1wgYY+SjWxhTZg0YMEAefPBBR/H4XoPuRF8Y+YiJxSxD8QjCdRiTHw85nkMCmUcA8+JjbBOM+oEDB0q9evVynPgg8yixxCRAAiTgDQLxWY5JKNu4cePUColYFr1z587K0Ed8fqZ7oVH+eAfdoproyU/CzcosScCnBDBd5nPPPafWJrn22mulR48ealEsePTpNfZppbNYJEACviVgjCcfhj3+IFhwAKE7Y8eOlYsuukg+/fRTNUezb2shSsHgyU/EyIcnP6fFxKJcnodIgAQyiECZMmWkX79+6g/FxqKE06dPF8yXj9Usna72mE50jMlPJ31emwRIwAQCxhj5gIH5khEHquNBsbQ1plirXr26CazSokOiRj4H3qal2nhREvAsgePHj8uCBQuC7fBPP/0kNWvW5FSXBtUoY/INqgyqQgIGEzDGyMeCVlgYBYNsMU8+ljzHjDuZLm4Y+Zke8pTp9xDLTwKxEpg8ebL07NlTzXePtvj222+XDz/8MKHexFivzXQkQAIkQALuEjDGyP/qq6+kSpUq7pbOB7nByI93Zh0UH6v6Ytl4CgmQAAnkRKB58+aybt06T6wGnlNZeJwESIAEMp2AMUY+DfzwtyKM/LJly4Y/GMNeGPnIg/GpMcBiEhLIcAIlS5b0DQEOFPZNVbIgJEACcRIwZnadOPX3/WmJzq4DIx8PO4bs+P5WYQFJgAQyhABj8jOkollMEkiQAI38BAEm+/REY/Jh5EMw3oFCAiRAAiRAAiRAAiSQGQRo5Btez24Z+YzLN7yiqR4JkAAJkAAJkAAJuEiARr6LMN3OCmE2WK02kYG3RYsWVWrRyHe7dpgfCZCAyQQ4Dsnk2qFuJEACqSBAIz8VlOO8BuLo8aBKZDEsHa5DIz/OSuBpJEACJGAYAcbkG1YhVIcEDCVAI9/QioFaerAsjXyDK4mqkQAJkAAJkAAJkICBBGjkG1gpWiXE40PcMPI58FZT5ScJkAAJkAAJkAAJ+J8AjXyD69hNI5/hOgZXNFUjARJwnQBj8l1HygxJgAQ8RoBGvsEVtnfvXqWdHjwbj6qMyY+HGs8hARIgAXMJMCbf3LqhZiRgEgEa+SbVRoguOsQmESO/UKFCkjt3bqEnPwQuv5IACZAACZAACZCAjwnQyDe4crWRX6xYsYS0hDefRn5CCHkyCZAACZAACZAACXiKAI18g6vLjXAdFI9GvsGVTNVIgASSQoAx+UnBykxJgAQ8RIBGvsGV5aYnX+dlcHGpGgmQAAmQQAwEGJMfAyQmIQESEBr5Bt8E8OTnzZtXChQokJCW9OQnhI8nkwAJkAAJkAAJkIDnCNDIN7jK4H1PZNCtLhryYEy+psFPEiABEiABEiABEvA/ARr5BtcxjPxEB92iePTkG1zJVI0ESCApBBiTnxSszJQESMBDBGjkG1xZCNdxw5NPI9/gSqZqJEACJOCQAGPyHQJjchLIUAI08g2ueLfCdWDkc+CtwRVN1UiABEiABEiABEjAZQI08l0G6mZ2DNdxkybzIgESIAESIAESIIHMIUAj3+C6ditcB3H9R48elYMHDxpcWqpGAiRAAu4S0GEt7ubK3EiABEjAGwRo5BtcT2558kuUKKFKuWfPHoNLS9VIgARIgARiIaBfXjC4mEICJEACkQjQyI9ExoD9bsXkFy9eXJVm9+7dBpSKKpAACZAACZAACZAACSSbAI38ZBOOM//Dhw8L/tyYXUcb+fTkx1kZPI0ESIAESIAESIAEPEaARr6hFaZnw3Fjnnwa+YZWMtUiARJIGgHOk580tMyYBEjAIwRo5BtaURh0C3HDk8+YfEMrmWqRAAmQQBwEGJMfBzSeQgIZSIBGvqGVrj35bhj52pPPmHxDK5tqkQAJkAAJkAAJkIDLBGjkuwzUrey0kc9wHbeIMh8SIAESIAESIAESyBwCvjHyT5w4IT///LMsWbIkYu0dP35cFi5cKHPnzpVDhw5FTGfCAT1I1g0jP2/evFKoUCHReZpQPupAAiTgTwLHjh2TdevWqbU5IpUQbfGGDRvk77//jpQk4f2cXjJhhMyABEjA4wTyeFx/pT4eGJ06dZJy5crJjh07pFatWvLSSy9lK1qTJk2kXr16UqBAAZk9e7ZMmTJFatSokS2dCTt0aI2Op09UJ+RDIz9RijyfBEggGoGVK1dKly5dVLu6evVqmThxompz7ed8++230rdvX6lataqsXbtWevbsKQ8//LA9CbdzIMCY/BwA8TAJkIAi4Asj/4svvlCG+wcffCAw+GvXri142MDYt8ucOXOkcOHCahceKq+//ro89thj9iTGbO/atUvpUrJkSVd0Qly+fnFwJUNmQgIkQAIhBIYMGSKDBg2SXr16yYQJE9Q22me71K1bVxYtWiQFCxaUf/75R6pXr66M/kqVKtmTcZsESIAESCBBAr4w8hF+065dO4Uid+7c0rp1axWSE2rkawMfCWFEV6tWTZ1j/4fuY4T+QPDCcPTo0ajdzvZz9Ta6iXFeIoIeCZQFvQ6J5gU9MIAXZU40L7BBd3yi+STCJlnnor5RPj+WDXXm17LhfnDjN5es+yrRfOP9zaUjXAVe+pdfflkV+cILL5TevXtnK37ZsmWD+/Lly6faufz58wf3cYMESIAESMAdAr4w8jFIFV2/WhDHrqeg1Pvsn1OnTpVZs2bJiBEj7LvV9k033aRiRfFl/fr1Mm/ePOVxypYwyg68KPz0009RUuR8aPny5VKkSJGE87FfadOmTQnnt3//fuWFy5XLN8M5goiw+BgMoy1btgT3+WUDhqIb96WpPPxeNoTa5cnjrLk+ePBgyqsLjgTd+3jSSSepF+YjR44IjPlwAq9/t27dpEyZMlkOz58/X/r166f2YfwUeiLRZjsRMMPLrdPznFwjXWlXrVqlLv3jjz8GeadLl2Rc98CBA4IXRj8K7meMR8FYOb+JdgDCSelHgf3jtD2BHQku6RJnT410aZnDdeGl1rPRICkM/EgDVlFB9957r3z99dfB0B179u+++27wa9u2baVVq1aCh5UTwTXQm5CIjBo1So0xSDQfrQPGHmzbti1hvfDSg3ENTploPUz+xGBBGMPhenhM1jsW3RAWsXTpUmnevHksyT2Xxo3fnKmFXrx4sSCURRvPseqJwfapFlwTL1xwUODBhpfmSMbMI488ohwp48ePz6Zms2bNZMGCBWr/ihUrZPjw4cHe2myJI+x48cUX1bV1L2+EZJ7c/fvvvyu9W7ZsKeXLl/dkGaIpDQO/TZs2osceREvrtWOoO/yWMYbQbwLjHk6yBg0a+K1oqjx4zjhtT9B+YfxnusQX7lgYLvqtH0YaBtW2aNFCMd25c2fwLeqHH36Q2267Tb788kupWLFiupjHdF3Ez7s16BYXZEx+TNiZiARIIAECmNwAXngIPhs3bhzWUHv88cfV8XHjxqlwnQQuyVNJgARIgAQiEPCFkX/ppZcq79HVV18tiAPt2LGjGnyLMsMbj0FekM6dO6vQmzvvvFO6du0qzz//vNpv4j97t7cb+sHIjxbC5MY1mAcJkEBmE7jvvvuUIwVtK8JtMBAXgnFT6BWFwMkydOhQ5WgZOHCg3H333bJmzRp1jP9IgARIgATcI+CLcB0MUJ0+fbryDGHGhkaNGgUJTZo0Kdgtpj1M+qAbq8nqvNz+hCe/Tp06rmULIx8DSxFThq50CgmQAAm4TeCCCy6QKlWqqLFM77//frDbHjPqaKdK06ZNBe2yXZyGItnPjbSNUCE/hntEKi/3kwAJkEAoAV8Y+SgUDH0domMvZOXKlYNfa9asGdw2fQOefDfDdXReyJdGvum1T/1IwLsEMGYHf3bBGCk9HqRChQqCP0riBNIxg1LiWjMHEiCBVBHwRbhOqmCl6joYV4DQGje9W3r2iu3bt6eqGLwOCZAACZAACZAACZBAmgjQyE8T+GiXhYEPQ19736OljfWYnpuaRn6sxJiOBEiABEiABEiABLxLgEa+gXWHGYEgpUqVck07evJdQ8mMSIAEPECAMfkeqCSqSAIkkFQCNPKTije+zLW3XRvm8eWS9Sydl84761F+IwESIAES8AoBPaCYMfleqTHqSQLpIUAjPz3co14Vi1ZBdIhN1MQxHsRgWywdTyM/RmBMRgIkQAIkQAIkQAIeJkAj38DK00a+9r67pSLyo5HvFk3mQwIkQAIkQAIkQALmEqCRb2DdaEOcRr6BlUOVSIAEPEGAMfmeqCYqSQIkkEQCNPKTCDferOHJx0JdCK9xU/DSoHsJ3MyXeZEACZAACaSOAGPyU8eaVyIBLxOgkW9g7cGT72Y8vi4iw3U0CX6SAAmQAAmQAAmQgL8J0Mg3sH7hbU+GkY88dSiQgcWmSiRAAiRAAiRAAiRAAi4RoJHvEkg3s4GR73Y8PvRDnvv375fDhw+7qS7zIgESIAHjCDAm37gqoUIkQAIpJkAjP8XAY7lcMsN1cH1682OpBaYhARIgATMJMCbfzHqhViRgGgEa+YbVyIkTJ5QRXq5cOdc1070DNPJdR8sMSYAESIAESIAESMAoAjTyjaoOka1bt8qxY8ekYsWKrmtWvnx5leemTZtcz5sZkgAJkAAJkAAJkAAJmEOARr45daE02bBhg/pMhpFfqVKlLNcwrOhUhwRIgARcI8CYfNdQMiMSIAGPEqCRb1jFbdy4UWmkDXI31Tv55JMlT548ol8k3MybeZEACZAACaSGAGPyU8OZVyEBrxOgkW9YDWojPxme/Fy5cgkMfRr5hlU61SEBEiABEiABEiABlwnQyHcZaKLZwcjPly9fUqbQhG7oIdAvEonqyvNJgARIgARIgARIgATMJEAj37B6gZe9QoUKortj3VYPRj49+W5TZX4kQAIkQAIkQAIkYBYBGvlm1YfysicjVEcXk0a+JsFPEiABEvAmAe0EwuBiCgmQAAlEIkAjPxKZNO3/888/pUqVKkm7Oox8rHq7d+/epF2DGZMACZAACZAACZAACaSXAI389PLPcnXMj79u3TqpUaNGlv1uftF5r1q1ys1smRcJkAAJkAAJkAAJkIBBBGjkG1QZ8OIfP35cTj311KRppfOmkZ80xMyYBEjAAAKcJ9+ASqAKJEACaSVAIz+t+LNeXBve2tue9ag735A34jn1tdzJlbmQAAmQAAmkigBj8lNFmtchAW8ToJFvUP2tXr1aaaO97clQrWDBgoKBvTTyk0GXeZIACZAACZAACZCAGQRo5JtRD0oLGN6FCxeWcuXKJVUrvETQyE8qYmZOAiRAAiRAAiRAAmklQCM/rfizXvy3336T2rVrZ92ZhG+1atWS5cuXJyFnZkkCJEACZhBgTL4Z9UAtSIAE0keARn762Ge78qJFi6Rx48bZ9ru9A9fYsWMHV751GyzzIwESIIEUEGBMfgog8xIk4AMCNPINqcQtW7bI1q1bpUmTJknXSF/j119/Tfq1eAESIAESIAESIAESIIHUE6CRn3rmYa8ILz4kFZ78Ro0aSa5cuWThwoVhdeFOEiABEiABEiABEiABbxOgkW9I/S1YsEBNbZkKIx+DezH4lka+IZVPNUiABFwnwJh815EyQxIgAY8RoJFvSIXNmjVLGjZsKMWKFUuJRq1atZLvvvtO8CCkkAAJkAAJeIcAY/K9U1fUlATSSYBGfjrp//9rHz16VGbPni3t27dPmTbnnHOOGny7ePHilF2TFyIBEiABEiABEiABEkgNARr5qeEc9Spz5syRf/75J6VGfocOHZRO06dPj6obD5IACZAACZAACZAACXiPAI18A+rsww8/lEKFCknHjh1Tpk2FChXUTD4TJkxI2TV5IRIgARJIFQHG5KeKNK9DAiRgKgEa+WmuGYTqwNC+9NJL5aSTTkqpNldffbXMnTtXVq5cmdLr8mIkQAIkQALxE2BMfvzseCYJZBIBGvlpru2xY8fK9u3bpU+fPinX5KqrrpL8+fPL008/nfJr84IkQAIkQAIkQAIkQALJI+AbI/+tt96SZs2aScuWLWXGjBlhie3atUu6d++u5qLv3bu3ioMPmzBFO3fu3CnDhw+Xs846SzAQNtVy8sknS79+/eTNN98ULoyVavq8Hgn4j8CBAwfk2muvVW1sz549Ze/evWELOWXKFDnzzDPljDPOkHHjxoVNw50kQAIkQAKJEfCFkb9s2TIZMWKETJs2Td59913p1auX7N+/PxuZ/v37y2mnnaYM2hIlSigDO1uiFO3Aw++yyy4TGPojR45M0VWzX2bo0KECY79bt26yevXq7Am4hwRIgARiJPDAAw8Ixvtgcb86derI4MGDs50JZwucLB988IFMnjxZHnzwQfnjjz+ypUt0B2PyEyXI80mABLxOII/XCwD9v/jiC7niiisEhjv+Tj/9dJk5c6ZccsklWYr32WefKUMW8YzwYOP4448/niWNG1+OHz8uBw8eFMTbHzt2TH1iG/vWrl0rP/zwg7z++utqCst33nlHvXi4cd148ihVqpR8+umncsEFFyjv2/XXXy+dOnVSi2WVLFlSChQooP6wQi4E5Thy5Ijky5cvy+V0jGiWnR77gro6ceKEqjOPqZ6juiib/ssxsQcT4DeH8vlR9H3phbKhjUXbC0Ebi8X9Xn755SyqY0Yv9F5Wq1ZN7e/SpYtqw++5554s6fglZwJ+/U3rcvnhuRJai7ps+PSb+LlsqCs8Z7wmvjDy//rrL6lfv36QfaVKlQT77IIpKg8fPqxeArA/XBrsv/POO2Xz5s3YVHlgJdqCBQuq77H8w3z3d999d9SkMJgRWvTYY49JjRo1ZN68eVHTp+IgxgaMHj1axowZI6NGjUrFJXkNEiCBGAmg12/QoEExpv6/ZHAqpFo2bNig2lZct1y5cgKvPRwDefPmDapiT4Odp5xyiqxbty54HBvonX344YfVPvTKoixO28m///5bXdvpeVkUMfSLfr6ht4RCAiSQOgIILzz11FNjviDatnS+0PnCyM+TJ08WiACaO3fuLJWA7/a3sHBpcMK9996rHgzYRkwpGlEns97A8w1vePXq1QV64eGm/+D9xgOtbt26Ai+5SVKvXj3B3Pl4Gfr9999Vj8O+ffvUwxUvR/BwQ7Zs2aJ0tz+0sd8PK+eivChHqlYdBrdUCQytHTt2SPny5VN1yZReB0YPflt+FAzMh+cbv1EngkH1qRa0s2hb0fbht4Q/3QuodYmlvYbzQ/eyrlmzRl599VXH5b/yyitVOKRTblpPkz/Lli0reFlCqKUfBb9nOOL86MlHiC7sBCd2hVfqGC/jeLkuXbq0V1R2pCfuS4wlwu8vVkF7F2qPxnquG+l8YeTjrco+DSTiOzHA1i544JUpU0bWr18vlStXVjGgtWrVsidR23ZDAefgh+jkx9iwYUM18Kxdu3bZ8vbCDpQVnNq0aRNWXXjF8NB0wiRsRgbuxBs3XmZ0GIGBKsatEl7eli5dKs2bN487D5NPnDVrlnj1N5cTV6xKDYPH6W8u1LjO6TpuHK9Zs6ZqW9EOYoxPlSpVsj3g0F5PmjQpeDm03ejZtAuMIDhKIHhBhYPEafm7du2qnBZOz7PrYeo2eGCAM17+/Cjffvutegb50ciHEw1OPvR0+U3gSIIjsEGDBn4rmioPnjNO7QOsgZTO+9gXA28vv/xy+fzzz1Us6Pjx42XTpk1y9tlnq0q55ZZbZNWqVWobHvYhQ4bIkiVL5KGHHlKDv3x5J7JQJEACJJAGAmhjMZgfbSwG4WKALQSGzV133aW227dvr9pkrA/yzTffyNSpUwUGOYUESIAESMBdAr7w5CME4ZNPPlFdunhrwvRsOpwE3nodUz9s2DB58cUX5amnnlKDbvv27esuTeZGAiRAAhlMAOOR4IVHG9u6dWuBkwUCb7qOY8VxtNHPPfec8tLDQYPeQwoJkAAJkIC7BHxh5AMJZtR57bXXstHR3iMcQFxUToNis2XAHSRAAiRAAjERQLc0DHtt3OuTECJ522236a8qFCedUwcHFeEGCZAACfiYgC/CdXxcPywaCZAACZAACZAACZAACTgmQCPfMTKeQAIkQAIkQAIkQAIkQAJmE6CRb3b9UDsSIAESIAESIAESIAEScEyARr5jZDyBBEiABEiABEiABEiABMwmQCPf7PqhdiRAAiRAAiRAAiRAAiTgmIBvZtdxXPIYTsAiLFjYAdNyOhGsaLd582Ynp3gmrV7swikTLxRw27ZtajEsTPHnN8FiWKg7v96Xfv7NYcVbrJqIlaedCNL7YSVqrFSOlTSd3rtbt25V5xUuXNgJNk+k1StYO2XiicJZSurfczoXEUoWK/yeUX96FflkXScd+aLeUD6/35dO2MKuOHLkiJNTXE1LIz8KTjwgb7/99mwrNkY5RR3CQjBY8dGPgtWEsfqmXnvAT2WEUYA69+NS8TD4/vzzT6ldu7afqixYFj//5tauXSulSpWSokWLBssbywZe6vxgSOAFdfny5XLjjTfGUuxgGpQf933FihWD+/yycezYMbXKO1Yf96Ngde769eundaXQZHFdv369FClSREqUKJGsS6Qt371798ru3bulatWqadMhmReO5zkDB0U67aV/WUZNIJlQMjFvzNm/YMECXxb9yiuvlEcffVRq1Kjhu/K98cYbysNy0003+a5seLBgzQgsGudH8fNv7o477pAePXpIq1at/Fh1SSsTVtTFC9LAgQOTdo10Zbxnzx7BSu9YMdiP0rx5c5k7d67kyuW/iGKsBI2F4s4//3zfVd13330n//3vf+XZZ5/1XdlQoGbNmsn8+fO9VLaL/PcL8hJ+6koCJEACJEACJEACJEACSSDAcJ0kQK1bt24ScjUjy+rVq0v+/PnNUMZlLUqXLi3oBvej5MuXz5e9L7qu/Pybw2qxfowr13WXrE+EQ6Cr3I+CMRq1atXyY9FUmfB79mM8PgqH8LFixYr5su4QhnTKKaf4smwolBefMwzX8e3tyIKRAAmQAAmQAAmQAAlkKAGG62RoxbPYJEACJEACJEACJEACPibAmHwfVy6LRgIkQAIkQAIkQAIkkJkEcj9kSWYWPfFS//LLLzJmzBj566+/pEGDBmFjCDEf7ptvvimTJk2SsmXLCuK+vSBYH+Dll1+WefPmqWkXw00BhWnOxo0bJzNnzlRTRFWoUMELRVMz6Lz11luqTsqUKSP4iySI0Uf9YfrCkiVLRkpm1P4pU6bIe++9J4cOHZJTTz01om5ffvmlqr+VK1eq6eoQ52u6YCrFV155RU0fiGlqc+fOnU3lv//+W95++21Vv5hC0SszQa1YsULNlrJx48ao9fb9998L7t9du3Z5MkY0W4UluAPz6L/77rvy+eefS/HixSNOgbtq1SrVpv3222+qvfbC/Q40s2bNUvfzvn37wk6Bi3v866+/FswmtGzZMqlZs6Z4Za2P1atXq98z9MYzNFqdoN7QZp122mkJ3jGpOf3AgQPy6quvqudjlSpVIsbh43eMmd0mT56sFPPC9JOYlBH328SJE9UYvUhx+LARxo4dKz///LOaetsLYxEwjgf6Tps2TdlrkXTG7w71hudt+fLl1TTHqbmzHF1lHD35jnj9LzGMX0wniYEYaGDvvffe/x20bV133XVqyiUYGhdeeKHgQWO6YF7qNm3aKMMdizicc845ggdpqAwbNkzy5s2rBhJhir+vvvoqNImR36+//nr1I4YB3LlzZ8Hc/5Hk6aefliFDhshPP/0UKYlR+9955x0ZPny4NGrUSEaMGKGMwXAKYjpNNFCYNx/Gw/79+8MlM2offjuYdg6/Jbxg47cVTi655BKB8dC0aVOBDwMvaaYLnAGYuvWDDz6QkSNHRlQXbc1tt92mDCLU31NPPRUxbaYcwFom06dPlzp16shll10mixYtylb0DRs2SMeOHQWDmPF77969e7Y0Ju7AdIT9+/dX9T1q1Ch58cUXs6n5ww8/yBdffCHVqlVTixC1aNFCveBnS2jYDrzM4tmCdVfw277iiisiagiD6tZbb1Xr1kRMZNiBCy64QC0MBSdSu3bt1PzxoSpioaSzzjpLtcEYSO0F+wBleOSRR+T9999X9yXWr5gxY0Zo0QQvZRdddJFgsg4MyEU5MfWr6fLZZ5/J888/L08++aT8+uuvEdX997//rcqIl7Jzzz1XME21kYJ58inOCViGYuD1119XJ1qew4A1k0PAegPMkpG1uFLA8t4HLANZ7X/ssccCgwYNypLGxC+WoRGwHoJB1ayGOGC91Qa/h9t47bXXApaREu6QUfus1fgCVqMbsDz0Sq8nnngiMGDAgLA6/v7774GuXbsGLGMyYHnGw6Yxbadl2AasF1CllmUIBxo3bpxNRcvICViGcpBBtgSG7hg8eHDAenFR2uE3ZS1aFrB6nLJpa63GHLCMZrXf8ngHbrjhhmxpTN1heYUC1otnRPWsl5yA9TKtjluGa8DqPYuYNhMOWN7SLG2v1fsY6NevX7ai477B/aPFMogD1oug/mrsp2UcBqwXGKWfZQAGoHdOYs3lHcBv33Sx1lvJ8jy0jMEAyhhOUHcffvhh4KSTTgp32Lh91lzqAavHIagXno2jR48Oftcb1hoOAXDwklgL7KlnKOwbiLX2SqBLly7ZimA5nAK9e/cO7m/ZsmXw2RTcafCG5TAIWAZ/WA0tgz5gvZwGjw0dOjRgOZSC3w3a6ExPfpyvXuhe1KvaWkaF6q5Zs2ZNltwsI1F5+vWCHkiP7ivTxV426BqL3niTx4JEpgvqBB4/HeaBLuJwdYKVQu+88071Rm96mez66VAE7EO94XuozJ49W/W+wCuOxT3gKfTCyqi6Sx/lwW8KvWjhyme9tClvNzzdCONwulJqKC+TvtvrF1PxoWsZK0xmqsDzCe+8Dk+J9HuOp00zgam9vtGDhVW50dMaSTZv3qy8+dHC9CKdm+r9sdYJFpbEat2WIZlqFeO+XqxlQy8Meh2x+JdlBHticTPcg3h+IvwYEsk+QOQC6g09k+hVRnqvhFrlVPH2Z1E0Bjnlk4rj5gfhpoJCHNdA96F+sOB0bCMG2i5IY59TPlwae3pTtqG3PQ4tJ72xuh3CPay3dlOKEFEP1JG93jDWAOUNFXSLI5QHBoSXBGEf+p5DfKvlUVChVvqlBmVBzDq6IfFyg3EUCG9BDP+1115rdFFj+c2hAEiH5dXxMMKYimhGkdEFDqNc6P2b028zTBa+2hXKI9LvOdZ7xzQ4oeVDfaMscCyFCtrgbt26yQsvvKDCI0KPm/Yd5dBtFXQLdy+jPYMTYvz48aapH1WfWO83xO2jPUY4KMZGIawHzsJwY+CiXjCFB2MtG+5dPH/QDqOc2Eb4r8llixVjrAxizS+Z6Wjkx0kXb6W4ebVgu1y5cvqr+kQaxNxpCZdGHzPpM1zZIi28YnVBqgFDGPSmeyxMKkuoLqijnOoN5zzzzDMqhhCN75w5c1QDDIO4ffv2oVka9b1UqVIqDhR1uHPnTvWyZjfwoSwYIGZfD5aCRx9Gv+lGfiy/JwyCR6zounXr1EB4xIFaXany7bffGlVP8SqjGeATLzAYT4E6z1SJ9fcMXrH87k3jqOsbA/9hWMBwsjtgtL4wouCUwLgOjEvwguiyaV3DPR8xqBGx+7q3EeW/6qqr1G9cn2fiZ6z3mxVyqMbqYeEvjI/CxBxou9DbbKpARzxb0PuLZ364eoPumCABz8sHH3xQFaVnz57y6aefCj69LrHWrwnlZLhOnLWAgRYfffSROvvHH39Uszqg+xyeB4w6h6Aby4oBF8wIAsH+8847T22b/K9Tp05qIBcaVBgRGNSGAVIQjDhHmSBWHL4qEwaH2b3j6qCh/+rXr69mJUHYDgR1qOtkyZIlgj8IyvnAAw/IfffdpwxieLubNGmijpn8D/elFbuqVLTfb6gzlAkCbxEeJHoQ1Ny5cz0xS4v9N4fBk3i44GUFgrLit4eVYeEZ02Vbu3at+m2qRB79h9l08PICsTPAizW6+LGacaYKBr1h8D8mQoDYf89odzFAGwJumAkE3kSwxExGCJEwXey/548//lg6dOigDCvc35ixDYKeqosvvliuueYa6dWrl+lFCupnrxMMjEZ9YdAwBM8UlKtt27bKMEQ7bMWvq3sd26bL2WefrbzzcPLhZRzGrX7OoL3Vob0YnIvvELRnaKe188XUMlrjIsQa6xW8//Cbg6MIgvAc2EMQvIziOQPBCwEGpoZ7QVUJPPAP9pA1/kBpikkd8GzBHwTPH81A7TDpn9XoUeIggEG2VteoGtiIwY3WlEsqF8soDmAAkRYMWK1Xr17AMkbUIBQ94FMfN/UTg4GsmGf1Z72RB9W0RssHrEZJfbe8DQHL+xCwDGf1d8cddwTTmbxhrxMMoNZ1Yo2mD2AgbqjcfffdanBR6H4Tv2MwpuW9DlgvJIHWrVsH8B1i9UgEUHdarO7vgBW/HDjjjDMClmEQHKiqj5v4iXpCfVkvz+p+Qz1qwUBi/PYguF9RtlatWgXOPPPMgBXXrJMZ/YkB7vg9WYarKp8ecIkyW7OnKN2t6fYC1ku4ql/UnWUYGV2mVChnjTFR9Y122JrxLGB5vNVlMQjX8iKqbcvICNxyyy0qHdo16wUpFaolfA3L6AtY3lBV35YBHBwsbMUEBywDWOWPwYGWYRhsh9EeWy+GCV872RmgTqwZc4J1Yh/kiLrctGlTFhWsUI+ANT1oln0mf8FkDXhGoj7uv//+oKrWbFABTG4Bwb1qzdISsMazqTrGIFYviOUMUwOL8ZyxYu+Dba9l7AYn4LDCxwKWc0w9Y1Cf+P2hzk0X/HZQZ2iHrQiGgPXCplS2XtiULaf1t6ZzVfYRnkc333yzqWXr/C8obNJLh9d0AT50teUksabLKR8ed4+An+sk1rLFms496onnFKvOsaZLXKPU5+DnssVLMxYmsaSJ9/rJPM+resfCxM9lQ/ljKV8saWJhmeo0XtXbTU6GM7iI4ToJ1nYsBj4uEWu6BNXh6Q4I+LlOYi1brOkcYE160lh1jjVd0hVOwgX8XLZ4ccXCJJY08V4/med5Ve9YmPi5bCh/LOWLJU0sLFOdxqt6u8nJdAY08t2sbeZFAiRAAiRAAiRAAiRAAgYQoJFvQCVQBRIgARIgARIgARIgARJwkwCNfDdpMi8SIAESIAESIAESIAESMIAAjXwDKoEqmEsA0+1hmixrpoe4V4X97rvv1Dz74Ur51ltvqSnWwh3jPhIgARIgAVErO6Mdxh8WuotXxowZE/ZUtPOTJ08Oe4w7ScDLBGjke7n2qHvSCbRp00asqb+kb9++gqXiMWe5U9FzuuM8LFSzZcuWYBZYaOv48ePB79wgARIgARLISgDtLtaEuPfee9VaAZhfHouDORVrulV1CtZJ6dOnT/B0rDtgTUsa/M4NEvALgdwPWeKXwrAcJOA2ASwRjwUwrHlwBavcPfvss2rBGSzu8dVXXwkeGlhxVC/yAQMei4PMnz9fLdyCFTmxWBFWy8VCJzgf+aBnAKsIY4lva453tcANVq3EoimLFi2SypUrBxcYw6qPWGwMS7vjwRZusRQspLJ48eLgsYULF6qlxDN5NVS37wXmRwIkkB4Cq1evVgstYQG4fv36yeuvvy5FihQRaz0M1ZZioTAsxARHjF55HW2zNZe5WniqUqVKqg1Fe4s01pz86hhWnMViVeXLl5cSJUqodholxEsA0qDXoFq1aqrQWNgJ7Tva2RkzZgjyxMJQoYJV0qED9IMDB4uWWXOuS+jK46Hn8TsJJIHAOHryk0CVWfqTQKFChdSqqiidteiOekigEcfKjWj4seIqlvHGPqTVXqOxY8eqHgBrATX1QLEWNFLLgiMfvDxgJT0Y79YiViqsBw8SeK10t/QVV1whQ4YMkTx58qj033zzDU7NInigXHvttYKVI2fOnCm33Xab4AWDQgIkQAJ+I6DbYqwcay0KpsJ54O23FmZSRYVj5uGHH5bSpUurlWTRmwqxFpZTn9ZCTWItriU7duxQK2RjpfPnnntOHUPYjrVAlWpvX3rpJRk0aJDajxXDsfI52nWch5XDw/XCYmVXa8ErNT8+eoCxkm8mr0qt4PFf2gjkSduVeWES8AiBBx54QPLmzSswruHZx4Nl6dKlytuDIuDYqFGjxFoxVxnrMNDhYQoV7CtTpox6gMALZBdrRVN1jrVCp9qNGFFrVUS56aab1MPIWr1TvTjgWvDsd+zY0X66Omatqii9e/dWLwfoZShatGiWNPxCAiRAAl4lYK1crZwX8Khv3rxZGdwjRoxQ4ZRwlkDgKEEvKmL3rZXnlQOmePHi2YrcoUMHgdGuQ3bgGNHyzDPPqHYeLw8w9tFzOnz4cDXfvbWKuOg2Gr0EuA56BuwCpwxeGC6//HKxVrxVIUb249wmgVQSoCc/lbR5LU8S6NKli/KgI4zm0ksvlY0bN6oQG10YhNtgHx4maNwHDhyoGvdXX31VJ8nxE+E7yEeLzhPfS5YsqYx4bMNwR1hPOKlXr556cOGBBA8WhQRIgAT8QgAhjz179pSnnnpKFixYoNrCSO0mnCNoA9GzCo/7ypUrY8ZgzzN//vwqvHLbtm3qfLtzJlpbXLduXaXjf/7zn5ivy4QkkAwCNPKTQZV5+opAs2bN5PTTTw/G3cNDhC5YxOVDEKpTs2ZNtY2XAMRgzp07V4XYqJ22f+i2RVhPqMAbhC5jLXihCPUQ6WPhPrWX680335Snn346XBLuIwESIAHPEoATpVWrVsqBouPuQ9tN3RYjVh4GNsYmYbKD0aNHZyk3ekTDtcNIZM9z3759KjQHMfuxyiOPPKLi/8844wzBWAEKCaSTAMN10kmf1/YkgYoVK6oHB+I/mzRpogbgIjxmxYoVcs8990iLFi1UbDy6hEOlU6dOqou4YcOGqktYHz///PPlxRdfVDGjGGSLlwjEg8YiGHB2zTXXqIG5eNl477331HRwyJNCAiRAAn4lgJnPELq4e/duWbVqlWp70aOJMB6MT0KoDUIhdYiN5oCeUox9QngjZuqx93wi7XXXXadi7xHGM3ToUBWfr8+N9ok2G2032mCMA0AMPxw/eKmgkEA6CPwrYEk6LsxrkoAXCGBWhypVqoRt5NEFjBlzTjvttGA4DeJFcQ5CbPACAEFXL2Z1wOBYCB4uGFRbu3ZtFd+P2Rv+9a9/qZ4BePAxmAvnYqAtBA8v7dVHqM7ff/+dZVAt8sf5iPeH4IGHgbyYOYJCAiRAAl4ngDYPExaEm1kMExfAY48ZzmDgQ+Clh1cf7Sz26bbQ3pYiDcY+FS5cWP1hGk2EBEGwjZ5VtP2Y6QyCvHCOfiHASwTaXIT0aMEzAT29uu1GzD56AeC4oZBAGghcRCM/DdR5SRIgARIgARIgARIgARJIIoGLGJOfRLrMmgRIgARIgARIgARIgATSQYBGfjqo85okQAIkQAIkQAIkQAIkkEQCNPKTCJdZkwAJkAAJkAAJkAAJkEA6CNDI/3/t1jERwDAAA7GltAO0bFoSHy8iYN9p+oW6TwIECBAgQIAAAQKhgMgPcU0TIECAAAECBAgQWAiI/IW6TwIECBAgQIAAAQKhgMgPcU0TIECAAAECBAgQWAiI/IW6TwIECBAgQIAAAQKhgMgPcU0TIECAAAECBAgQWAiI/IW6TwIECBAgQIAAAQKhgMgPcU0TIECAAAECBAgQWAiI/IW6TwIECBAgQIAAAQKhgMgPcU0TIECAAAECBAgQWAiI/IW6TwIECBAgQIAAAQKhgMgPcU0TIECAAAECBAgQWAiI/IW6TwIECBAgQIAAAQKhgMgPcU0TIECAAAECBAgQWAiI/IW6TwIECBAgQIAAAQKhwPNvn3DfNAECBAgQIECAAAECdwXeD7MTWNyAg40sAAAAAElFTkSuQmCC"
    },
    "image.png": {
     "image/png": "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"
    }
   },
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In this session we are interested by an hyperbolic PDE representing a wave travelling at a constant velocity $a_0$ in a 1D bar. In this session we are interested by an hyperbolic PDE representing a wave travelling at a constant velocity $a_0$ in a 1D bar which is governed by:\n",
    "\n",
    "$$ \\frac{\\partial u}{\\partial t} + a_0  \\frac{\\partial u}{\\partial x} = 0$$\n",
    "\n",
    "![image.png](attachment:image.png)\n",
    "\n",
    "The wave, we are interested in, is travelling at a speed of 1.25 m/s along a bar of 1m length and we consider the timeframe [0, 0.5s].\n",
    "\n",
    "In this notebook you will evaluate two set of initial conditions and study their interactions with different numerical schemes. The first initial conditions is defined by a mathematical expression and $u$ at time $t=0$ along the bar is given by:\n",
    "\n",
    "$$ u\\left(x,t=0\\right) = \\frac{1}{20 s \\sqrt{2\\pi}} \\exp{\\left(-\\frac{1}{2} \\left(\\frac{x-x_m}{s} \\right)^2\\right)}$$\n",
    "\n",
    "where $s$ is set equal to 0.02 and $x_m$ is set equal to 0.1. The initial conditions are shown in Figure 2 a) alongside the second set of initial conditions (Figure 2b)) which is defined as a step function.\n",
    "\n",
    "$$ u\\left(x,t=0 \\right) = 1 \\text{ for } 0<x<0.2$$\n",
    "\n",
    "$$ u\\left(x,t=0 \\right) = 0 \\text{ for } x= 0 \\text{ and } x \\ge 0.2$$\n",
    "\n",
    "![image-2.png](attachment:image-2.png)\n",
    "\n",
    "To complete our problem we will enforce that $u = 0$ for $x=0$ and $x=1$, for the entire timeframe."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "To study the wave definition using both the initial conditions 1 and 2 you will use three different numerical schemes, the upwind (FTBS), the Lax-Wrendoff and the Lax-Friedrich.\n",
    "\n",
    "The upwind scheme is defined as:\n",
    "\n",
    "$$ u_{j}^{n+1} = \\left(1-C \\right) u_{j}^n + C u_{j-1}^n$$\n",
    "\n",
    "The Lax-Wrendoff is defined as:\n",
    "\n",
    "$$u_{j}^{n+1} = u_{j}^{n} - \\frac{C}{2} \\left( u_{j+1}^n - u_{j-1}^n\\right) + \\frac{C^2}{2} \\left(u_{j+1}^n-2 u_j^n + u_{j-1}^n\\right)$$\n",
    "\n",
    "The Lax-Friedrich is defined as:\n",
    "\n",
    "$$u_{j}^{n+1} = \\frac{1}{2} \\left(u_{j+1}^{n}+u_{j-1}^{n} \\right) - \\frac{C}{2} \\left(u_{j+1}^{n}-u_{j-1}^{n} \\right)$$\n",
    "\n",
    "You need to answer the following questions in this notebook:\n",
    "\n",
    "0. Import the necessary python modules\n",
    "1. Definition a function to compute the initial conditions 1. Only the space coordinate should be given as input and the parameters $s$ and $x_m$ should be defined inside the function. This function should return a vector of the same length as the independent variable $x$ containing the initial conditions on $u$.\n",
    "2. Implement the upwind scheme in a function where the number of timesteps and grid points are given as input. We also need as inputs the timestep the grid size, the speed of the wave $a_0$ and both the initial and boundary conditions. A function is given for the implementation of the Lax-Friedrich scheme which can be used as an example.\n",
    "3. Implement the Lax-Wendroff scheme in a function where the number of timesteps and grid points are given as input. We also need as inputs the timestep the grid size, the speed of the wave $a_0$ and both the initial and boundary conditions.\n",
    "4. Using the three numerical schemes simulate the problem with 1000 points along $x$ and 1500 timesteps. Plot the results for the three schemes in subplots for three instants of the time ($\\approx$ 0.05 s, $\\approx$ 0.25 s and  $\\approx$ 0.5 s). You can add the exact solution in dashed-line to compare the numerical predictions.\n",
    "5. What can you observe? Can you explain the results based on our discussion from the lecture?\n",
    "6. Definition a function to compute the initial conditions 2. Only the space coordinate should be given as input and the parameters $s$ and $x_m$ should be defined inside the function. This function should return a vector of the same length as the independent variable $x$ containing the initial conditions on $u$.\n",
    "7. Using the three numerical schemes simulate the problem with 1000 points along $x$ and 1500 timesteps. Plot the results for the three schemes in subplots for three instants of the time ($\\approx$ 0.05 s, $\\approx$ 0.25 s and  $\\approx$ 0.5 s). You can add the exact solution in dashed-line to compare the numerical predictions.\n",
    "8. What can you observe? Can you explain the results based on our discussion from the lecture?"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "To help you in this notebook, you can use the following cell as an example and also to carry out the simulations with the Lax-Friedrich scheme."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "def Lax_Friedrich(Nx,Nt,delta_t,delta_x,a0,u_init,U_BC):\n",
    "    # We initialize the matrix for the pressure\n",
    "    u = np.zeros([Nt,Nx])\n",
    "    # We compute the CFL number\n",
    "    C = a0*delta_t/delta_x\n",
    "    print('CFL = {0:3.3f}'.format(C))\n",
    "    # We impose the initial conditions\n",
    "    u[0,:] = u_init\n",
    "    # We impose the boundary conditions\n",
    "    u[:,0] = U_BC\n",
    "    #\n",
    "    for n in range(1,Nt):\n",
    "       for j in range(1,Nx-1):\n",
    "           u[n,j] = (1/2)*(u[n-1,j+1]+u[n-1,j-1])-(C/2)*(u[n-1,j+1]-u[n-1,j-1])\n",
    "    return u"
   ]
  }
 ],
 "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.12.1"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
