From e244ff8c265bd4bf57a21eca0c507467a750491f Mon Sep 17 00:00:00 2001 From: 0c07d516632c138624818b1d249c5f44 <0c07d516632c138624818b1d249c5f44@app-learninglab.inria.fr> Date: Tue, 29 Apr 2025 08:54:59 +0000 Subject: [PATCH] Ajout de la heatmap --- module3/exo1/analyse-syndrome-grippal.ipynb | 2123 ++++++++++++++++++- module3/exo3/Cholera_Deaths.dbf | Bin 0 -> 2848 bytes module3/exo3/Cholera_Deaths.prj | 1 + module3/exo3/Cholera_Deaths.sbn | Bin 0 -> 2884 bytes module3/exo3/Cholera_Deaths.sbx | Bin 0 -> 396 bytes module3/exo3/Cholera_Deaths.shp | Bin 0 -> 7100 bytes module3/exo3/Cholera_Deaths.shx | Bin 0 -> 2100 bytes module3/exo3/GERENTON_notebook.ipynb | 557 +++++ module3/exo3/OSMap.tfw | 6 + module3/exo3/OSMap.tif | Bin 0 -> 390533 bytes module3/exo3/OSMap_Grayscale.tfw | 6 + module3/exo3/OSMap_Grayscale.tif | Bin 0 -> 383579 bytes module3/exo3/OSMap_Grayscale.tif.aux.xml | 11 + module3/exo3/OSMap_Grayscale.tif.ovr | Bin 0 -> 161106 bytes module3/exo3/Pumps.dbf | Bin 0 -> 122 bytes module3/exo3/Pumps.prj | 1 + module3/exo3/Pumps.sbx | Bin 0 -> 124 bytes module3/exo3/Pumps.shp | Bin 0 -> 324 bytes module3/exo3/Pumps.shx | Bin 0 -> 164 bytes module3/exo3/README.txt | 23 + module3/exo3/SnowMap.tfw | 6 + module3/exo3/SnowMap.tif | Bin 0 -> 27136985 bytes module3/exo3/SnowMap.tif.aux.xml | 60 + module3/exo3/SnowMap.tif.ovr | Bin 0 -> 2553264 bytes module3/exo3/exercice.ipynb | 25 - module3/exo3/exercice_R_en.org | 81 - module3/exo3/exercice_R_fr.org | 84 - module3/exo3/exercice_en.Rmd | 33 - module3/exo3/exercice_en.ipynb | 25 - module3/exo3/exercice_fr.Rmd | 33 - module3/exo3/exercice_fr.ipynb | 25 - module3/exo3/exercice_python_en.org | 94 - module3/exo3/exercice_python_fr.org | 93 - module3/exo3/requirements.txt | 10 + 34 files changed, 2777 insertions(+), 520 deletions(-) create mode 100644 module3/exo3/Cholera_Deaths.dbf create mode 100644 module3/exo3/Cholera_Deaths.prj create mode 100644 module3/exo3/Cholera_Deaths.sbn create mode 100644 module3/exo3/Cholera_Deaths.sbx create mode 100644 module3/exo3/Cholera_Deaths.shp create mode 100644 module3/exo3/Cholera_Deaths.shx create mode 100644 module3/exo3/GERENTON_notebook.ipynb create mode 100644 module3/exo3/OSMap.tfw create mode 100644 module3/exo3/OSMap.tif create mode 100644 module3/exo3/OSMap_Grayscale.tfw create mode 100644 module3/exo3/OSMap_Grayscale.tif create mode 100644 module3/exo3/OSMap_Grayscale.tif.aux.xml create mode 100644 module3/exo3/OSMap_Grayscale.tif.ovr create mode 100644 module3/exo3/Pumps.dbf create mode 100644 module3/exo3/Pumps.prj create mode 100644 module3/exo3/Pumps.sbx create mode 100644 module3/exo3/Pumps.shp create mode 100644 module3/exo3/Pumps.shx create mode 100644 module3/exo3/README.txt create mode 100644 module3/exo3/SnowMap.tfw create mode 100644 module3/exo3/SnowMap.tif create mode 100644 module3/exo3/SnowMap.tif.aux.xml create mode 100644 module3/exo3/SnowMap.tif.ovr delete mode 100644 module3/exo3/exercice.ipynb delete mode 100644 module3/exo3/exercice_R_en.org delete mode 100644 module3/exo3/exercice_R_fr.org delete mode 100644 module3/exo3/exercice_en.Rmd delete mode 100644 module3/exo3/exercice_en.ipynb delete mode 100644 module3/exo3/exercice_fr.Rmd delete mode 100644 module3/exo3/exercice_fr.ipynb delete mode 100644 module3/exo3/exercice_python_en.org delete mode 100644 module3/exo3/exercice_python_fr.org create mode 100644 module3/exo3/requirements.txt diff --git a/module3/exo1/analyse-syndrome-grippal.ipynb b/module3/exo1/analyse-syndrome-grippal.ipynb index 597f84d..62ff5bc 100644 --- a/module3/exo1/analyse-syndrome-grippal.ipynb +++ b/module3/exo1/analyse-syndrome-grippal.ipynb @@ -9,7 +9,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ @@ -28,10 +28,8 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, + "execution_count": 2, + "metadata": {}, "outputs": [], "source": [ "data_url = \"http://www.sentiweb.fr/datasets/incidence-PAY-3.csv\"" @@ -61,9 +59,976 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + " | week | \n", + "indicator | \n", + "inc | \n", + "inc_low | \n", + "inc_up | \n", + "inc100 | \n", + "inc100_low | \n", + "inc100_up | \n", + "geo_insee | \n", + "geo_name | \n", + "
---|---|---|---|---|---|---|---|---|---|---|
0 | \n", + "202515 | \n", + "3 | \n", + "38813 | \n", + "31411.0 | \n", + "46215.0 | \n", + "58 | \n", + "47.0 | \n", + "69.0 | \n", + "FR | \n", + "France | \n", + "
1 | \n", + "202514 | \n", + "3 | \n", + "37870 | \n", + "31403.0 | \n", + "44337.0 | \n", + "57 | \n", + "47.0 | \n", + "67.0 | \n", + "FR | \n", + "France | \n", + "
2 | \n", + "202513 | \n", + "3 | \n", + "39673 | \n", + "33686.0 | \n", + "45660.0 | \n", + "59 | \n", + "50.0 | \n", + "68.0 | \n", + "FR | \n", + "France | \n", + "
3 | \n", + "202512 | \n", + "3 | \n", + "52543 | \n", + "45627.0 | \n", + "59459.0 | \n", + "78 | \n", + "68.0 | \n", + "88.0 | \n", + "FR | \n", + "France | \n", + "
4 | \n", + "202511 | \n", + "3 | \n", + "59469 | \n", + "52154.0 | \n", + "66784.0 | \n", + "89 | \n", + "78.0 | \n", + "100.0 | \n", + "FR | \n", + "France | \n", + "
5 | \n", + "202510 | \n", + "3 | \n", + "60334 | \n", + "53048.0 | \n", + "67620.0 | \n", + "90 | \n", + "79.0 | \n", + "101.0 | \n", + "FR | \n", + "France | \n", + "
6 | \n", + "202509 | \n", + "3 | \n", + "84531 | \n", + "74994.0 | \n", + "94068.0 | \n", + "126 | \n", + "112.0 | \n", + "140.0 | \n", + "FR | \n", + "France | \n", + "
7 | \n", + "202508 | \n", + "3 | \n", + "136020 | \n", + "124824.0 | \n", + "147216.0 | \n", + "203 | \n", + "186.0 | \n", + "220.0 | \n", + "FR | \n", + "France | \n", + "
8 | \n", + "202507 | \n", + "3 | \n", + "208952 | \n", + "195988.0 | \n", + "221916.0 | \n", + "312 | \n", + "293.0 | \n", + "331.0 | \n", + "FR | \n", + "France | \n", + "
9 | \n", + "202506 | \n", + "3 | \n", + "273519 | \n", + "258159.0 | \n", + "288879.0 | \n", + "408 | \n", + "385.0 | \n", + "431.0 | \n", + "FR | \n", + "France | \n", + "
10 | \n", + "202505 | \n", + "3 | \n", + "334395 | \n", + "318416.0 | \n", + "350374.0 | \n", + "499 | \n", + "475.0 | \n", + "523.0 | \n", + "FR | \n", + "France | \n", + "
11 | \n", + "202504 | \n", + "3 | \n", + "350043 | \n", + "332885.0 | \n", + "367201.0 | \n", + "522 | \n", + "496.0 | \n", + "548.0 | \n", + "FR | \n", + "France | \n", + "
12 | \n", + "202503 | \n", + "3 | \n", + "252772 | \n", + "238917.0 | \n", + "266627.0 | \n", + "377 | \n", + "356.0 | \n", + "398.0 | \n", + "FR | \n", + "France | \n", + "
13 | \n", + "202502 | \n", + "3 | \n", + "257247 | \n", + "242991.0 | \n", + "271503.0 | \n", + "384 | \n", + "363.0 | \n", + "405.0 | \n", + "FR | \n", + "France | \n", + "
14 | \n", + "202501 | \n", + "3 | \n", + "231549 | \n", + "214627.0 | \n", + "248471.0 | \n", + "345 | \n", + "320.0 | \n", + "370.0 | \n", + "FR | \n", + "France | \n", + "
15 | \n", + "202452 | \n", + "3 | \n", + "201726 | \n", + "185870.0 | \n", + "217582.0 | \n", + "302 | \n", + "278.0 | \n", + "326.0 | \n", + "FR | \n", + "France | \n", + "
16 | \n", + "202451 | \n", + "3 | \n", + "201697 | \n", + "187843.0 | \n", + "215551.0 | \n", + "302 | \n", + "281.0 | \n", + "323.0 | \n", + "FR | \n", + "France | \n", + "
17 | \n", + "202450 | \n", + "3 | \n", + "136694 | \n", + "126369.0 | \n", + "147019.0 | \n", + "205 | \n", + "190.0 | \n", + "220.0 | \n", + "FR | \n", + "France | \n", + "
18 | \n", + "202449 | \n", + "3 | \n", + "108487 | \n", + "99037.0 | \n", + "117937.0 | \n", + "163 | \n", + "149.0 | \n", + "177.0 | \n", + "FR | \n", + "France | \n", + "
19 | \n", + "202448 | \n", + "3 | \n", + "87381 | \n", + "78687.0 | \n", + "96075.0 | \n", + "131 | \n", + "118.0 | \n", + "144.0 | \n", + "FR | \n", + "France | \n", + "
20 | \n", + "202447 | \n", + "3 | \n", + "76286 | \n", + "67626.0 | \n", + "84946.0 | \n", + "114 | \n", + "101.0 | \n", + "127.0 | \n", + "FR | \n", + "France | \n", + "
21 | \n", + "202446 | \n", + "3 | \n", + "56399 | \n", + "49006.0 | \n", + "63792.0 | \n", + "85 | \n", + "74.0 | \n", + "96.0 | \n", + "FR | \n", + "France | \n", + "
22 | \n", + "202445 | \n", + "3 | \n", + "47347 | \n", + "40843.0 | \n", + "53851.0 | \n", + "71 | \n", + "61.0 | \n", + "81.0 | \n", + "FR | \n", + "France | \n", + "
23 | \n", + "202444 | \n", + "3 | \n", + "36039 | \n", + "30122.0 | \n", + "41956.0 | \n", + "54 | \n", + "45.0 | \n", + "63.0 | \n", + "FR | \n", + "France | \n", + "
24 | \n", + "202443 | \n", + "3 | \n", + "46572 | \n", + "39928.0 | \n", + "53216.0 | \n", + "70 | \n", + "60.0 | \n", + "80.0 | \n", + "FR | \n", + "France | \n", + "
25 | \n", + "202442 | \n", + "3 | \n", + "67785 | \n", + "60009.0 | \n", + "75561.0 | \n", + "102 | \n", + "90.0 | \n", + "114.0 | \n", + "FR | \n", + "France | \n", + "
26 | \n", + "202441 | \n", + "3 | \n", + "79435 | \n", + "71386.0 | \n", + "87484.0 | \n", + "119 | \n", + "107.0 | \n", + "131.0 | \n", + "FR | \n", + "France | \n", + "
27 | \n", + "202440 | \n", + "3 | \n", + "84965 | \n", + "76555.0 | \n", + "93375.0 | \n", + "127 | \n", + "114.0 | \n", + "140.0 | \n", + "FR | \n", + "France | \n", + "
28 | \n", + "202439 | \n", + "3 | \n", + "91660 | \n", + "82937.0 | \n", + "100383.0 | \n", + "137 | \n", + "124.0 | \n", + "150.0 | \n", + "FR | \n", + "France | \n", + "
29 | \n", + "202438 | \n", + "3 | \n", + "91786 | \n", + "82903.0 | \n", + "100669.0 | \n", + "138 | \n", + "125.0 | \n", + "151.0 | \n", + "FR | \n", + "France | \n", + "
... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "
2081 | \n", + "198521 | \n", + "3 | \n", + "26096 | \n", + "19621.0 | \n", + "32571.0 | \n", + "47 | \n", + "35.0 | \n", + "59.0 | \n", + "FR | \n", + "France | \n", + "
2082 | \n", + "198520 | \n", + "3 | \n", + "27896 | \n", + "20885.0 | \n", + "34907.0 | \n", + "51 | \n", + "38.0 | \n", + "64.0 | \n", + "FR | \n", + "France | \n", + "
2083 | \n", + "198519 | \n", + "3 | \n", + "43154 | \n", + "32821.0 | \n", + "53487.0 | \n", + "78 | \n", + "59.0 | \n", + "97.0 | \n", + "FR | \n", + "France | \n", + "
2084 | \n", + "198518 | \n", + "3 | \n", + "40555 | \n", + "29935.0 | \n", + "51175.0 | \n", + "74 | \n", + "55.0 | \n", + "93.0 | \n", + "FR | \n", + "France | \n", + "
2085 | \n", + "198517 | \n", + "3 | \n", + "34053 | \n", + "24366.0 | \n", + "43740.0 | \n", + "62 | \n", + "44.0 | \n", + "80.0 | \n", + "FR | \n", + "France | \n", + "
2086 | \n", + "198516 | \n", + "3 | \n", + "50362 | \n", + "36451.0 | \n", + "64273.0 | \n", + "91 | \n", + "66.0 | \n", + "116.0 | \n", + "FR | \n", + "France | \n", + "
2087 | \n", + "198515 | \n", + "3 | \n", + "63881 | \n", + "45538.0 | \n", + "82224.0 | \n", + "116 | \n", + "83.0 | \n", + "149.0 | \n", + "FR | \n", + "France | \n", + "
2088 | \n", + "198514 | \n", + "3 | \n", + "134545 | \n", + "114400.0 | \n", + "154690.0 | \n", + "244 | \n", + "207.0 | \n", + "281.0 | \n", + "FR | \n", + "France | \n", + "
2089 | \n", + "198513 | \n", + "3 | \n", + "197206 | \n", + "176080.0 | \n", + "218332.0 | \n", + "357 | \n", + "319.0 | \n", + "395.0 | \n", + "FR | \n", + "France | \n", + "
2090 | \n", + "198512 | \n", + "3 | \n", + "245240 | \n", + "223304.0 | \n", + "267176.0 | \n", + "445 | \n", + "405.0 | \n", + "485.0 | \n", + "FR | \n", + "France | \n", + "
2091 | \n", + "198511 | \n", + "3 | \n", + "276205 | \n", + "252399.0 | \n", + "300011.0 | \n", + "501 | \n", + "458.0 | \n", + "544.0 | \n", + "FR | \n", + "France | \n", + "
2092 | \n", + "198510 | \n", + "3 | \n", + "353231 | \n", + "326279.0 | \n", + "380183.0 | \n", + "640 | \n", + "591.0 | \n", + "689.0 | \n", + "FR | \n", + "France | \n", + "
2093 | \n", + "198509 | \n", + "3 | \n", + "369895 | \n", + "341109.0 | \n", + "398681.0 | \n", + "670 | \n", + "618.0 | \n", + "722.0 | \n", + "FR | \n", + "France | \n", + "
2094 | \n", + "198508 | \n", + "3 | \n", + "389886 | \n", + "359529.0 | \n", + "420243.0 | \n", + "707 | \n", + "652.0 | \n", + "762.0 | \n", + "FR | \n", + "France | \n", + "
2095 | \n", + "198507 | \n", + "3 | \n", + "471852 | \n", + "432599.0 | \n", + "511105.0 | \n", + "855 | \n", + "784.0 | \n", + "926.0 | \n", + "FR | \n", + "France | \n", + "
2096 | \n", + "198506 | \n", + "3 | \n", + "565825 | \n", + "518011.0 | \n", + "613639.0 | \n", + "1026 | \n", + "939.0 | \n", + "1113.0 | \n", + "FR | \n", + "France | \n", + "
2097 | \n", + "198505 | \n", + "3 | \n", + "637302 | \n", + "592795.0 | \n", + "681809.0 | \n", + "1155 | \n", + "1074.0 | \n", + "1236.0 | \n", + "FR | \n", + "France | \n", + "
2098 | \n", + "198504 | \n", + "3 | \n", + "424937 | \n", + "390794.0 | \n", + "459080.0 | \n", + "770 | \n", + "708.0 | \n", + "832.0 | \n", + "FR | \n", + "France | \n", + "
2099 | \n", + "198503 | \n", + "3 | \n", + "213901 | \n", + "174689.0 | \n", + "253113.0 | \n", + "388 | \n", + "317.0 | \n", + "459.0 | \n", + "FR | \n", + "France | \n", + "
2100 | \n", + "198502 | \n", + "3 | \n", + "97586 | \n", + "80949.0 | \n", + "114223.0 | \n", + "177 | \n", + "147.0 | \n", + "207.0 | \n", + "FR | \n", + "France | \n", + "
2101 | \n", + "198501 | \n", + "3 | \n", + "85489 | \n", + "65918.0 | \n", + "105060.0 | \n", + "155 | \n", + "120.0 | \n", + "190.0 | \n", + "FR | \n", + "France | \n", + "
2102 | \n", + "198452 | \n", + "3 | \n", + "84830 | \n", + "60602.0 | \n", + "109058.0 | \n", + "154 | \n", + "110.0 | \n", + "198.0 | \n", + "FR | \n", + "France | \n", + "
2103 | \n", + "198451 | \n", + "3 | \n", + "101726 | \n", + "80242.0 | \n", + "123210.0 | \n", + "185 | \n", + "146.0 | \n", + "224.0 | \n", + "FR | \n", + "France | \n", + "
2104 | \n", + "198450 | \n", + "3 | \n", + "123680 | \n", + "101401.0 | \n", + "145959.0 | \n", + "225 | \n", + "184.0 | \n", + "266.0 | \n", + "FR | \n", + "France | \n", + "
2105 | \n", + "198449 | \n", + "3 | \n", + "101073 | \n", + "81684.0 | \n", + "120462.0 | \n", + "184 | \n", + "149.0 | \n", + "219.0 | \n", + "FR | \n", + "France | \n", + "
2106 | \n", + "198448 | \n", + "3 | \n", + "78620 | \n", + "60634.0 | \n", + "96606.0 | \n", + "143 | \n", + "110.0 | \n", + "176.0 | \n", + "FR | \n", + "France | \n", + "
2107 | \n", + "198447 | \n", + "3 | \n", + "72029 | \n", + "54274.0 | \n", + "89784.0 | \n", + "131 | \n", + "99.0 | \n", + "163.0 | \n", + "FR | \n", + "France | \n", + "
2108 | \n", + "198446 | \n", + "3 | \n", + "87330 | \n", + "67686.0 | \n", + "106974.0 | \n", + "159 | \n", + "123.0 | \n", + "195.0 | \n", + "FR | \n", + "France | \n", + "
2109 | \n", + "198445 | \n", + "3 | \n", + "135223 | \n", + "101414.0 | \n", + "169032.0 | \n", + "246 | \n", + "184.0 | \n", + "308.0 | \n", + "FR | \n", + "France | \n", + "
2110 | \n", + "198444 | \n", + "3 | \n", + "68422 | \n", + "20056.0 | \n", + "116788.0 | \n", + "125 | \n", + "37.0 | \n", + "213.0 | \n", + "FR | \n", + "France | \n", + "
2111 rows × 10 columns
\n", + "\n", + " | week | \n", + "indicator | \n", + "inc | \n", + "inc_low | \n", + "inc_up | \n", + "inc100 | \n", + "inc100_low | \n", + "inc100_up | \n", + "geo_insee | \n", + "geo_name | \n", + "
---|---|---|---|---|---|---|---|---|---|---|
1874 | \n", + "198919 | \n", + "3 | \n", + "- | \n", + "NaN | \n", + "NaN | \n", + "- | \n", + "NaN | \n", + "NaN | \n", + "FR | \n", + "France | \n", + "
\n", + " | week | \n", + "indicator | \n", + "inc | \n", + "inc_low | \n", + "inc_up | \n", + "inc100 | \n", + "inc100_low | \n", + "inc100_up | \n", + "geo_insee | \n", + "geo_name | \n", + "
---|---|---|---|---|---|---|---|---|---|---|
0 | \n", + "202515 | \n", + "3 | \n", + "38813 | \n", + "31411.0 | \n", + "46215.0 | \n", + "58 | \n", + "47.0 | \n", + "69.0 | \n", + "FR | \n", + "France | \n", + "
1 | \n", + "202514 | \n", + "3 | \n", + "37870 | \n", + "31403.0 | \n", + "44337.0 | \n", + "57 | \n", + "47.0 | \n", + "67.0 | \n", + "FR | \n", + "France | \n", + "
2 | \n", + "202513 | \n", + "3 | \n", + "39673 | \n", + "33686.0 | \n", + "45660.0 | \n", + "59 | \n", + "50.0 | \n", + "68.0 | \n", + "FR | \n", + "France | \n", + "
3 | \n", + "202512 | \n", + "3 | \n", + "52543 | \n", + "45627.0 | \n", + "59459.0 | \n", + "78 | \n", + "68.0 | \n", + "88.0 | \n", + "FR | \n", + "France | \n", + "
4 | \n", + "202511 | \n", + "3 | \n", + "59469 | \n", + "52154.0 | \n", + "66784.0 | \n", + "89 | \n", + "78.0 | \n", + "100.0 | \n", + "FR | \n", + "France | \n", + "
5 | \n", + "202510 | \n", + "3 | \n", + "60334 | \n", + "53048.0 | \n", + "67620.0 | \n", + "90 | \n", + "79.0 | \n", + "101.0 | \n", + "FR | \n", + "France | \n", + "
6 | \n", + "202509 | \n", + "3 | \n", + "84531 | \n", + "74994.0 | \n", + "94068.0 | \n", + "126 | \n", + "112.0 | \n", + "140.0 | \n", + "FR | \n", + "France | \n", + "
7 | \n", + "202508 | \n", + "3 | \n", + "136020 | \n", + "124824.0 | \n", + "147216.0 | \n", + "203 | \n", + "186.0 | \n", + "220.0 | \n", + "FR | \n", + "France | \n", + "
8 | \n", + "202507 | \n", + "3 | \n", + "208952 | \n", + "195988.0 | \n", + "221916.0 | \n", + "312 | \n", + "293.0 | \n", + "331.0 | \n", + "FR | \n", + "France | \n", + "
9 | \n", + "202506 | \n", + "3 | \n", + "273519 | \n", + "258159.0 | \n", + "288879.0 | \n", + "408 | \n", + "385.0 | \n", + "431.0 | \n", + "FR | \n", + "France | \n", + "
10 | \n", + "202505 | \n", + "3 | \n", + "334395 | \n", + "318416.0 | \n", + "350374.0 | \n", + "499 | \n", + "475.0 | \n", + "523.0 | \n", + "FR | \n", + "France | \n", + "
11 | \n", + "202504 | \n", + "3 | \n", + "350043 | \n", + "332885.0 | \n", + "367201.0 | \n", + "522 | \n", + "496.0 | \n", + "548.0 | \n", + "FR | \n", + "France | \n", + "
12 | \n", + "202503 | \n", + "3 | \n", + "252772 | \n", + "238917.0 | \n", + "266627.0 | \n", + "377 | \n", + "356.0 | \n", + "398.0 | \n", + "FR | \n", + "France | \n", + "
13 | \n", + "202502 | \n", + "3 | \n", + "257247 | \n", + "242991.0 | \n", + "271503.0 | \n", + "384 | \n", + "363.0 | \n", + "405.0 | \n", + "FR | \n", + "France | \n", + "
14 | \n", + "202501 | \n", + "3 | \n", + "231549 | \n", + "214627.0 | \n", + "248471.0 | \n", + "345 | \n", + "320.0 | \n", + "370.0 | \n", + "FR | \n", + "France | \n", + "
15 | \n", + "202452 | \n", + "3 | \n", + "201726 | \n", + "185870.0 | \n", + "217582.0 | \n", + "302 | \n", + "278.0 | \n", + "326.0 | \n", + "FR | \n", + "France | \n", + "
16 | \n", + "202451 | \n", + "3 | \n", + "201697 | \n", + "187843.0 | \n", + "215551.0 | \n", + "302 | \n", + "281.0 | \n", + "323.0 | \n", + "FR | \n", + "France | \n", + "
17 | \n", + "202450 | \n", + "3 | \n", + "136694 | \n", + "126369.0 | \n", + "147019.0 | \n", + "205 | \n", + "190.0 | \n", + "220.0 | \n", + "FR | \n", + "France | \n", + "
18 | \n", + "202449 | \n", + "3 | \n", + "108487 | \n", + "99037.0 | \n", + "117937.0 | \n", + "163 | \n", + "149.0 | \n", + "177.0 | \n", + "FR | \n", + "France | \n", + "
19 | \n", + "202448 | \n", + "3 | \n", + "87381 | \n", + "78687.0 | \n", + "96075.0 | \n", + "131 | \n", + "118.0 | \n", + "144.0 | \n", + "FR | \n", + "France | \n", + "
20 | \n", + "202447 | \n", + "3 | \n", + "76286 | \n", + "67626.0 | \n", + "84946.0 | \n", + "114 | \n", + "101.0 | \n", + "127.0 | \n", + "FR | \n", + "France | \n", + "
21 | \n", + "202446 | \n", + "3 | \n", + "56399 | \n", + "49006.0 | \n", + "63792.0 | \n", + "85 | \n", + "74.0 | \n", + "96.0 | \n", + "FR | \n", + "France | \n", + "
22 | \n", + "202445 | \n", + "3 | \n", + "47347 | \n", + "40843.0 | \n", + "53851.0 | \n", + "71 | \n", + "61.0 | \n", + "81.0 | \n", + "FR | \n", + "France | \n", + "
23 | \n", + "202444 | \n", + "3 | \n", + "36039 | \n", + "30122.0 | \n", + "41956.0 | \n", + "54 | \n", + "45.0 | \n", + "63.0 | \n", + "FR | \n", + "France | \n", + "
24 | \n", + "202443 | \n", + "3 | \n", + "46572 | \n", + "39928.0 | \n", + "53216.0 | \n", + "70 | \n", + "60.0 | \n", + "80.0 | \n", + "FR | \n", + "France | \n", + "
25 | \n", + "202442 | \n", + "3 | \n", + "67785 | \n", + "60009.0 | \n", + "75561.0 | \n", + "102 | \n", + "90.0 | \n", + "114.0 | \n", + "FR | \n", + "France | \n", + "
26 | \n", + "202441 | \n", + "3 | \n", + "79435 | \n", + "71386.0 | \n", + "87484.0 | \n", + "119 | \n", + "107.0 | \n", + "131.0 | \n", + "FR | \n", + "France | \n", + "
27 | \n", + "202440 | \n", + "3 | \n", + "84965 | \n", + "76555.0 | \n", + "93375.0 | \n", + "127 | \n", + "114.0 | \n", + "140.0 | \n", + "FR | \n", + "France | \n", + "
28 | \n", + "202439 | \n", + "3 | \n", + "91660 | \n", + "82937.0 | \n", + "100383.0 | \n", + "137 | \n", + "124.0 | \n", + "150.0 | \n", + "FR | \n", + "France | \n", + "
29 | \n", + "202438 | \n", + "3 | \n", + "91786 | \n", + "82903.0 | \n", + "100669.0 | \n", + "138 | \n", + "125.0 | \n", + "151.0 | \n", + "FR | \n", + "France | \n", + "
... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "
2081 | \n", + "198521 | \n", + "3 | \n", + "26096 | \n", + "19621.0 | \n", + "32571.0 | \n", + "47 | \n", + "35.0 | \n", + "59.0 | \n", + "FR | \n", + "France | \n", + "
2082 | \n", + "198520 | \n", + "3 | \n", + "27896 | \n", + "20885.0 | \n", + "34907.0 | \n", + "51 | \n", + "38.0 | \n", + "64.0 | \n", + "FR | \n", + "France | \n", + "
2083 | \n", + "198519 | \n", + "3 | \n", + "43154 | \n", + "32821.0 | \n", + "53487.0 | \n", + "78 | \n", + "59.0 | \n", + "97.0 | \n", + "FR | \n", + "France | \n", + "
2084 | \n", + "198518 | \n", + "3 | \n", + "40555 | \n", + "29935.0 | \n", + "51175.0 | \n", + "74 | \n", + "55.0 | \n", + "93.0 | \n", + "FR | \n", + "France | \n", + "
2085 | \n", + "198517 | \n", + "3 | \n", + "34053 | \n", + "24366.0 | \n", + "43740.0 | \n", + "62 | \n", + "44.0 | \n", + "80.0 | \n", + "FR | \n", + "France | \n", + "
2086 | \n", + "198516 | \n", + "3 | \n", + "50362 | \n", + "36451.0 | \n", + "64273.0 | \n", + "91 | \n", + "66.0 | \n", + "116.0 | \n", + "FR | \n", + "France | \n", + "
2087 | \n", + "198515 | \n", + "3 | \n", + "63881 | \n", + "45538.0 | \n", + "82224.0 | \n", + "116 | \n", + "83.0 | \n", + "149.0 | \n", + "FR | \n", + "France | \n", + "
2088 | \n", + "198514 | \n", + "3 | \n", + "134545 | \n", + "114400.0 | \n", + "154690.0 | \n", + "244 | \n", + "207.0 | \n", + "281.0 | \n", + "FR | \n", + "France | \n", + "
2089 | \n", + "198513 | \n", + "3 | \n", + "197206 | \n", + "176080.0 | \n", + "218332.0 | \n", + "357 | \n", + "319.0 | \n", + "395.0 | \n", + "FR | \n", + "France | \n", + "
2090 | \n", + "198512 | \n", + "3 | \n", + "245240 | \n", + "223304.0 | \n", + "267176.0 | \n", + "445 | \n", + "405.0 | \n", + "485.0 | \n", + "FR | \n", + "France | \n", + "
2091 | \n", + "198511 | \n", + "3 | \n", + "276205 | \n", + "252399.0 | \n", + "300011.0 | \n", + "501 | \n", + "458.0 | \n", + "544.0 | \n", + "FR | \n", + "France | \n", + "
2092 | \n", + "198510 | \n", + "3 | \n", + "353231 | \n", + "326279.0 | \n", + "380183.0 | \n", + "640 | \n", + "591.0 | \n", + "689.0 | \n", + "FR | \n", + "France | \n", + "
2093 | \n", + "198509 | \n", + "3 | \n", + "369895 | \n", + "341109.0 | \n", + "398681.0 | \n", + "670 | \n", + "618.0 | \n", + "722.0 | \n", + "FR | \n", + "France | \n", + "
2094 | \n", + "198508 | \n", + "3 | \n", + "389886 | \n", + "359529.0 | \n", + "420243.0 | \n", + "707 | \n", + "652.0 | \n", + "762.0 | \n", + "FR | \n", + "France | \n", + "
2095 | \n", + "198507 | \n", + "3 | \n", + "471852 | \n", + "432599.0 | \n", + "511105.0 | \n", + "855 | \n", + "784.0 | \n", + "926.0 | \n", + "FR | \n", + "France | \n", + "
2096 | \n", + "198506 | \n", + "3 | \n", + "565825 | \n", + "518011.0 | \n", + "613639.0 | \n", + "1026 | \n", + "939.0 | \n", + "1113.0 | \n", + "FR | \n", + "France | \n", + "
2097 | \n", + "198505 | \n", + "3 | \n", + "637302 | \n", + "592795.0 | \n", + "681809.0 | \n", + "1155 | \n", + "1074.0 | \n", + "1236.0 | \n", + "FR | \n", + "France | \n", + "
2098 | \n", + "198504 | \n", + "3 | \n", + "424937 | \n", + "390794.0 | \n", + "459080.0 | \n", + "770 | \n", + "708.0 | \n", + "832.0 | \n", + "FR | \n", + "France | \n", + "
2099 | \n", + "198503 | \n", + "3 | \n", + "213901 | \n", + "174689.0 | \n", + "253113.0 | \n", + "388 | \n", + "317.0 | \n", + "459.0 | \n", + "FR | \n", + "France | \n", + "
2100 | \n", + "198502 | \n", + "3 | \n", + "97586 | \n", + "80949.0 | \n", + "114223.0 | \n", + "177 | \n", + "147.0 | \n", + "207.0 | \n", + "FR | \n", + "France | \n", + "
2101 | \n", + "198501 | \n", + "3 | \n", + "85489 | \n", + "65918.0 | \n", + "105060.0 | \n", + "155 | \n", + "120.0 | \n", + "190.0 | \n", + "FR | \n", + "France | \n", + "
2102 | \n", + "198452 | \n", + "3 | \n", + "84830 | \n", + "60602.0 | \n", + "109058.0 | \n", + "154 | \n", + "110.0 | \n", + "198.0 | \n", + "FR | \n", + "France | \n", + "
2103 | \n", + "198451 | \n", + "3 | \n", + "101726 | \n", + "80242.0 | \n", + "123210.0 | \n", + "185 | \n", + "146.0 | \n", + "224.0 | \n", + "FR | \n", + "France | \n", + "
2104 | \n", + "198450 | \n", + "3 | \n", + "123680 | \n", + "101401.0 | \n", + "145959.0 | \n", + "225 | \n", + "184.0 | \n", + "266.0 | \n", + "FR | \n", + "France | \n", + "
2105 | \n", + "198449 | \n", + "3 | \n", + "101073 | \n", + "81684.0 | \n", + "120462.0 | \n", + "184 | \n", + "149.0 | \n", + "219.0 | \n", + "FR | \n", + "France | \n", + "
2106 | \n", + "198448 | \n", + "3 | \n", + "78620 | \n", + "60634.0 | \n", + "96606.0 | \n", + "143 | \n", + "110.0 | \n", + "176.0 | \n", + "FR | \n", + "France | \n", + "
2107 | \n", + "198447 | \n", + "3 | \n", + "72029 | \n", + "54274.0 | \n", + "89784.0 | \n", + "131 | \n", + "99.0 | \n", + "163.0 | \n", + "FR | \n", + "France | \n", + "
2108 | \n", + "198446 | \n", + "3 | \n", + "87330 | \n", + "67686.0 | \n", + "106974.0 | \n", + "159 | \n", + "123.0 | \n", + "195.0 | \n", + "FR | \n", + "France | \n", + "
2109 | \n", + "198445 | \n", + "3 | \n", + "135223 | \n", + "101414.0 | \n", + "169032.0 | \n", + "246 | \n", + "184.0 | \n", + "308.0 | \n", + "FR | \n", + "France | \n", + "
2110 | \n", + "198444 | \n", + "3 | \n", + "68422 | \n", + "20056.0 | \n", + "116788.0 | \n", + "125 | \n", + "37.0 | \n", + "213.0 | \n", + "FR | \n", + "France | \n", + "
2110 rows × 10 columns
\n", + "ijM38^R0N? zRE~CptmNc@d>ya=)r}=1XzpaklXJRN!3uO^Z0FvMN6ChjE`~Grgu2&g*WA1D7}=7A zA@9_|vin!^pTRx<2brph(QPHLP`y&_9JJ$P<~N<>v%t~{7fY=`J3+?%HrBNYELr!( zVkfkdWP0wu9p!}YlA@|1V+$O^DYABz#=}BjV^{1F=jPLc?2m5a3-6$&dC)39Wt{8N zWCLbtGt9O1U2odziO;1oWJMbK#?nwT$G`lyxihUN*^fqLMFFrU8^6|uV$O?9vUYNb zIGDMR?X}%#-efZ6-52JAiJcUYt3&f4GYGA{%LZ23)bBZic9u-rDXV-6`q?n}KtvDE zZoXu`EoL3x!D9Q?NS#7EM`n9Us52j|iLQKK(qj|Ti&cJN5J@(bR}D(1(K<{@3`v)=70WoPCm3CGCT9c5kIgH zxx{0`xR-*-Ja&jigoCB`+pwHR3n5ch_CI3_)=;0^+JrSPl5MZfH`4%HWMo G%{B`a-CyXravi tH2VO?$o2+}NYZo+t_Pl!JvPOBzMuyu^^voq=B4-FZLIV#yd@#qL&+^T_mm z*MsvCN4EV@f7c#ndv>=J*5Q7MClj``pU?(-xRA$s6WSHBwQ^UJjKDN>v+lganh9iC zH&q%of|Xy{GS!H=M6$yrXQI@=Ms`(S`V%dQEaHs&rAe5xNRA5~E@)TDoXh(rzJPrg zJMpdsEt$;cvUFoT*y8-wcCi(+@2YELrqyEQ?O@{PC(m c<@7oY!K|)7+F6fwlT6=wx3@l+ zr0|`v4zwJy-qGZPN5ND@QU(n~XUC9Bwkbb4_yAa5>DX^dXnADrn}`283^p~*^->Hi zpDZN3sL2Oxae920I$8l)ZhgW_PcTmY-Y5sOTVy)sZ4T$bK5S^wK8|*qEPv02nn rV zs__qtZ$o=PHf+}T=?mC)sjeahS_zp))QJ5bP*c7^v|R|t@Q}>s&NWBovt0JOmEk1X zUt|JoQ)!)GiX2ZKEJQ0M>$Pb%9tUf1yL^Wgt&Gfi{ui}wuz>Jl9UJURIoUIxrxVPx zqQQftjSq1zJt7mSJe}bSCMjC%JGXZ$$OOH*x{rf}nar2Igt LUwcAedSQF%sk >(KlU7`NGumsi1y94>y1+6UrxF#=-jK;|$g5F=F$|WC3!Ox3B#V6- z=g9od@fGl#PDN`XTOa3CZ3@;PwxaqjS~Hm;yYWLiuz~v~el2J%WWqiIWqZNI(hFXk zMQbH%9!VY01Up{CcxH*#Mi#U_F^qZkmOW9lOa-l-Oq|=aVJ%pXkw>5`+FP U|f0P)dw-xLFUgMsCo|UxUYVEF6KJPjN*s;n7{W9$FQzQ zwD)A|n+(jE=PVmtwg@-0E;89e1MJK>ODk4bY>4)OOl^hTH1k`=>ABh~RkUt0m!dQU zX)un*uiPf_T+l=ISI@1iF<9H6ijl4$v|chhQF}M$oq*N-RWZlW`p5!K>uz`l=6Ff_ zPYbk tw!zM=5=`2^Ja_KSzn@G$PqRJ=O#O$%AqmV4kcpkR z95VoxR@mnA8prpUEOs%^uU}vRUM6lI(FV!7b-ZTpiS~A=l~!ZTFJwJ^4}1I|SHamB zGm17uCdXSM?+F&s_VM2iSaX<6sG!t{9c-|5Mf)h)2wBt(BUR?T)Z6uiwti?|$!=;f zeky>q {R3%e nZp8> zu!>jM#1`IVFNgS?)12iJe{eH!PyFFx^VyTZBRt7sR`L=Xc#9pp&jCK;B;Rs@-?+}5 zz(^Xina4t&V>Rn|gLl}&J`Qu7ulb2z`ICPG_a^fYkMT51d4aWTW-Gh+kWV +PvE`?GnvBzmavLf z*u)mzWiN;LoYS1;5`S VbF5|^Z}1L#*vDax^EE%k{ReE{nw =2.9 in /opt/conda/lib/python3.6/site-packages (from folium==0.12.1->-r requirements.txt (line 2)) (2.11.0)\n", + "Requirement already satisfied: requests in /opt/conda/lib/python3.6/site-packages (from folium==0.12.1->-r requirements.txt (line 2)) (2.23.0)\n", + "Requirement already satisfied: cligj>=0.5 in /opt/conda/lib/python3.6/site-packages (from rasterio==1.2.10->-r requirements.txt (line 4)) (0.7.2)\n", + "Requirement already satisfied: attrs in /opt/conda/lib/python3.6/site-packages (from rasterio==1.2.10->-r requirements.txt (line 4)) (19.3.0)\n", + "Requirement already satisfied: certifi in /opt/conda/lib/python3.6/site-packages (from rasterio==1.2.10->-r requirements.txt (line 4)) (2020.4.5.1)\n", + "Requirement already satisfied: affine in /opt/conda/lib/python3.6/site-packages (from rasterio==1.2.10->-r requirements.txt (line 4)) (2.3.1)\n", + "Requirement already satisfied: setuptools in /opt/conda/lib/python3.6/site-packages (from rasterio==1.2.10->-r requirements.txt (line 4)) (45.2.0.post20200209)\n", + "Requirement already satisfied: click-plugins in /opt/conda/lib/python3.6/site-packages (from rasterio==1.2.10->-r requirements.txt (line 4)) (1.1.1)\n", + "Requirement already satisfied: click>=4.0 in /opt/conda/lib/python3.6/site-packages (from rasterio==1.2.10->-r requirements.txt (line 4)) (8.0.4)\n", + "Requirement already satisfied: snuggs>=1.4.1 in /opt/conda/lib/python3.6/site-packages (from rasterio==1.2.10->-r requirements.txt (line 4)) (1.4.7)\n", + "Requirement already satisfied: python-dateutil>=2.7.3 in /opt/conda/lib/python3.6/site-packages (from pandas==1.1.5->-r requirements.txt (line 5)) (2.8.1)\n", + "Requirement already satisfied: pytz>=2017.2 in /opt/conda/lib/python3.6/site-packages (from pandas==1.1.5->-r requirements.txt (line 5)) (2019.3)\n", + "Requirement already satisfied: six>=1.7 in /opt/conda/lib/python3.6/site-packages (from fiona==1.8.20->-r requirements.txt (line 7)) (1.14.0)\n", + "Requirement already satisfied: munch in /opt/conda/lib/python3.6/site-packages (from fiona==1.8.20->-r requirements.txt (line 7)) (4.0.0)\n", + "Requirement already satisfied: MarkupSafe>=0.23 in /opt/conda/lib/python3.6/site-packages (from jinja2>=2.9->folium==0.12.1->-r requirements.txt (line 2)) (1.1.1)\n", + "Requirement already satisfied: chardet<4,>=3.0.2 in /opt/conda/lib/python3.6/site-packages (from requests->folium==0.12.1->-r requirements.txt (line 2)) (3.0.4)\n", + "Requirement already satisfied: idna<3,>=2.5 in /opt/conda/lib/python3.6/site-packages (from requests->folium==0.12.1->-r requirements.txt (line 2)) (2.9)\n", + "Requirement already satisfied: urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 in /opt/conda/lib/python3.6/site-packages (from requests->folium==0.12.1->-r requirements.txt (line 2)) (1.25.7)\n", + "Requirement already satisfied: importlib-metadata; python_version < \"3.8\" in /opt/conda/lib/python3.6/site-packages (from click>=4.0->rasterio==1.2.10->-r requirements.txt (line 4)) (4.8.3)\n", + "Requirement already satisfied: pyparsing>=2.1.6 in /opt/conda/lib/python3.6/site-packages (from snuggs>=1.4.1->rasterio==1.2.10->-r requirements.txt (line 4)) (2.4.6)\n", + "Requirement already satisfied: zipp>=0.5 in /opt/conda/lib/python3.6/site-packages (from importlib-metadata; python_version < \"3.8\"->click>=4.0->rasterio==1.2.10->-r requirements.txt (line 4)) (2.1.0)\n", + "Requirement already satisfied: typing-extensions>=3.6.4; python_version < \"3.8\" in /opt/conda/lib/python3.6/site-packages (from importlib-metadata; python_version < \"3.8\"->click>=4.0->rasterio==1.2.10->-r requirements.txt (line 4)) (4.1.1)\n", + "----------------------------------------\n", + "Toutes les bibliothèques sont installées !\n" + ] + } + ], + "source": [ + "!pip install -r requirements.txt\n", + "\n", + "print((\"----------------------------------------\"))\n", + "print(\"Toutes les bibliothèques sont installées !\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Importation des biliothèques" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Toutes les bibliothèques sont importées !\n" + ] + } + ], + "source": [ + "# Importation des bibliothèques nécessaires à notre analyse\n", + "import geopandas as gpd\n", + "import folium\n", + "import matplotlib.pyplot as plt\n", + "from shapely.geometry import Point\n", + "\n", + "print(\"Toutes les bibliothèques sont importées !\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Étape 1 — Chargement des données\n", + "\n", + "Nous utilisons ici les fichiers Shapefile fournis dans l’archive `SnowGIS_SHP` provenant de ce site :\n", + "\n", + "https://blog.rtwilson.com/john-snows-cholera-data-in-more-formats/\n", + "\n", + "\n", + "Ces fichiers contiennent les données géographiques suivantes :\n", + "\n", + "- `Cholera_Deaths.shp` : emplacements des décès dus au choléra, avec le nombre de morts par adresse.\n", + "- `Pumps.shp` : emplacements des pompes à eau publiques dans le quartier de Soho.\n", + "\n", + "Nous utilisons la bibliothèque `GeoPandas` pour lire ces fichiers et vérifier que les données sont bien chargées avec le bon système de coordonnées.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + " \n", + "\n", + "" + ], + "text/plain": [ + " Id Count geometry\n", + "0 0 3 POINT (529308.741 181031.352)\n", + "1 0 2 POINT (529312.164 181025.172)\n", + "2 0 1 POINT (529314.382 181020.294)\n", + "3 0 1 POINT (529317.380 181014.259)\n", + "4 0 4 POINT (529320.675 181007.872)" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "\n", + " \n", + "
\n", + "\n", + " \n", + " \n", + " \n", + "\n", + " Id \n", + "Count \n", + "geometry \n", + "\n", + " \n", + "0 \n", + "0 \n", + "3 \n", + "POINT (529308.741 181031.352) \n", + "\n", + " \n", + "1 \n", + "0 \n", + "2 \n", + "POINT (529312.164 181025.172) \n", + "\n", + " \n", + "2 \n", + "0 \n", + "1 \n", + "POINT (529314.382 181020.294) \n", + "\n", + " \n", + "3 \n", + "0 \n", + "1 \n", + "POINT (529317.380 181014.259) \n", + "\n", + " \n", + " \n", + "4 \n", + "0 \n", + "4 \n", + "POINT (529320.675 181007.872) \n", + "\n", + "\n", + "" + ], + "text/plain": [ + " Id geometry\n", + "0 0 POINT (529396.539 181025.063)\n", + "1 0 POINT (529192.538 181079.391)\n", + "2 0 POINT (529183.740 181193.735)\n", + "3 0 POINT (529748.911 180924.207)\n", + "4 0 POINT (529613.205 180896.804)" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CRS des décès : epsg:27700\n", + "CRS des pompes : epsg:27700\n" + ] + } + ], + "source": [ + "# Chargement des shapefiles avec GeoPandas\n", + "deaths = gpd.read_file(\"Cholera_Deaths.shp\")\n", + "pumps = gpd.read_file(\"Pumps.shp\")\n", + "\n", + "# Aperçu des données\n", + "display(deaths.head())\n", + "display(pumps.head())\n", + "\n", + "# Vérification du système de coordonnées (CRS)\n", + "print(\"CRS des décès :\", deaths.crs)\n", + "print(\"CRS des pompes :\", pumps.crs)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Étape 2 — Conversion des coordonnées pour Folium\n", + "\n", + "Folium utilise sur le système de coordonnées **WGS 84** (latitude/longitude), qui est utilisé par défaut dans les cartes web comme OpenStreetMap. \n", + "Cependant, nos fichiers shapefile utilisent actuellement le système **British National Grid** (EPSG:27700), qui fonctionne avec des coordonnées en mètres, propres au Royaume-Uni.\n", + "\n", + "Afin de pouvoir afficher correctement nos données sur une carte interactive avec Folium, il est nécessaire de les convertir vers le système de projection WGS 84 (**EPSG:4326**). \n", + "Cette opération est appelée une **reprojection**. Elle permet à nos points d'apparaître au bon endroit sur la carte.\n", + "\n", + "Nous réalisons cette conversion avec la méthode .to_crs(epsg=4326) de GeoPandas, qui transforme les coordonnées de chaque géométrie." + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " \n", + "
\n", + "\n", + " \n", + " \n", + " \n", + "\n", + " Id \n", + "geometry \n", + "\n", + " \n", + "0 \n", + "0 \n", + "POINT (529396.539 181025.063) \n", + "\n", + " \n", + "1 \n", + "0 \n", + "POINT (529192.538 181079.391) \n", + "\n", + " \n", + "2 \n", + "0 \n", + "POINT (529183.740 181193.735) \n", + "\n", + " \n", + "3 \n", + "0 \n", + "POINT (529748.911 180924.207) \n", + "\n", + " \n", + " \n", + "4 \n", + "0 \n", + "POINT (529613.205 180896.804) \n", + "\n", + "\n", + "" + ], + "text/plain": [ + " Id Count geometry\n", + "0 0 3 POINT (-0.13793 51.51342)\n", + "1 0 2 POINT (-0.13788 51.51336)\n", + "2 0 1 POINT (-0.13785 51.51332)\n", + "3 0 1 POINT (-0.13781 51.51326)\n", + "4 0 4 POINT (-0.13777 51.51320)" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Reprojection en EPSG:4326 (latitude/longitude)\n", + "deaths_wgs84 = deaths.to_crs(epsg=4326)\n", + "pumps_wgs84 = pumps.to_crs(epsg=4326)\n", + "\n", + "# Aperçu pour vérification\n", + "deaths_wgs84.head()\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Étape 3 — Création de la carte interactive\n", + "\n", + "Nous utilisons la bibliothèque `folium` pour créer une carte interactive centrée sur le quartier de Soho.\n", + "\n", + "- Les **cercles rouges** représentent les décès dus au choléra. Leur taille est proportionnelle au nombre de morts enregistrés à cette adresse (`Count`).\n", + "- Les **marqueurs bleus** représentent les pompes à eau publiques.\n", + "\n", + "Cette visualisation permet de retrouver la logique de la carte originale de John Snow, en montrant la concentration des décès autour de certaines pompes.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " \n", + "
\n", + "\n", + " \n", + " \n", + " \n", + "\n", + " Id \n", + "Count \n", + "geometry \n", + "\n", + " \n", + "0 \n", + "0 \n", + "3 \n", + "POINT (-0.13793 51.51342) \n", + "\n", + " \n", + "1 \n", + "0 \n", + "2 \n", + "POINT (-0.13788 51.51336) \n", + "\n", + " \n", + "2 \n", + "0 \n", + "1 \n", + "POINT (-0.13785 51.51332) \n", + "\n", + " \n", + "3 \n", + "0 \n", + "1 \n", + "POINT (-0.13781 51.51326) \n", + "\n", + " \n", + " \n", + "4 \n", + "0 \n", + "4 \n", + "POINT (-0.13777 51.51320) \n", + "" + ], + "text/plain": [ + "Make this Notebook Trusted to load map: File -> Trust Notebook" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Obtenir le centre de la carte en prenant le centre des décès\n", + "map_center = [deaths_wgs84.geometry.y.mean(), deaths_wgs84.geometry.x.mean()]\n", + "\n", + "# Créer la carte Folium centrée sur Soho\n", + "m = folium.Map(location=map_center, zoom_start=17, tiles='cartodbpositron')\n", + "\n", + "# Ajouter les décès avec des cercles proportionnels à Count\n", + "for _, row in deaths_wgs84.iterrows():\n", + " folium.CircleMarker(\n", + " location=[row.geometry.y, row.geometry.x],\n", + " radius=row['Count'] * 1.5, # multiplier pour avoir une taille visible\n", + " color='red',\n", + " fill=True,\n", + " fill_color='red',\n", + " fill_opacity=0.6,\n", + " popup=f\"{row['Count']} décès\"\n", + " ).add_to(m)\n", + "\n", + "# Ajouter les pompes avec une icône bleue\n", + "for _, row in pumps_wgs84.iterrows():\n", + " folium.Marker(\n", + " location=[row.geometry.y, row.geometry.x],\n", + " icon=folium.Icon(color='blue', icon='tint', prefix='fa'),\n", + " popup=\"Pompe à eau\"\n", + " ).add_to(m)\n", + "\n", + "# Afficher la carte\n", + "m\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Étape 4 — Visualisation de la densité des décès avec une Heatmap\n", + "\n", + "Pour identifier visuellement les zones les plus touchées par l’épidémie, nous utilisons une **carte de chaleur** (heatmap). \n", + "Chaque point de décès est pondéré par le nombre de morts (`Count`). On observe ainsi une zone de concentration très nette autour d'une certaine pompe.\n", + "On voyait déjà cela avec les cercles mais je trouve la heat map plus parlante.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/html": [ + " " + ], + "text/plain": [ + "Make this Notebook Trusted to load map: File -> Trust Notebook" + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from folium.plugins import HeatMap\n", + "\n", + "# Extraire les points avec leur pondération\n", + "heat_data = [[row.geometry.y, row.geometry.x, row['Count']] for _, row in deaths_wgs84.iterrows()]\n", + "\n", + "# Nouvelle carte centrée sur Soho\n", + "m_heat = folium.Map(location=map_center, zoom_start=17, tiles='cartodbpositron')\n", + "\n", + "# Ajouter la heatmap des décès\n", + "HeatMap(heat_data, radius=15, blur=10, max_zoom=18).add_to(m_heat)\n", + "\n", + "# Ajouter les pompes pour référence\n", + "for _, row in pumps_wgs84.iterrows():\n", + " folium.Marker(\n", + " location=[row.geometry.y, row.geometry.x],\n", + " icon=folium.Icon(color='blue', icon='tint', prefix='fa'),\n", + " popup=\"Pompe à eau\"\n", + " ).add_to(m_heat)\n", + "\n", + "# Afficher la heatmap\n", + "m_heat\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Conclusion\n", + "\n", + "Grâce à nos outils de visualisation de données géospatiales, nous avons pu reproduire et enrichir l’analyse historique de John Snow sur l’épidémie de choléra de 1854 à Soho.\n", + "\n", + "- Nous avons visualisé les lieux de décès avec des cercles proportionnels au nombre de morts.\n", + "- Nous avons localisé les pompes à eau sur la même carte.\n", + "- La carte de chaleur a clairement mis en évidence une forte concentration de décès autour d'une pompe spécifique, celle de Broad Street.\n", + "\n", + "\n", + "Victor Gérenton\n", + "---\n" + ] + } + ], + "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.4" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/module3/exo3/OSMap.tfw b/module3/exo3/OSMap.tfw new file mode 100644 index 0000000..0c98219 --- /dev/null +++ b/module3/exo3/OSMap.tfw @@ -0,0 +1,6 @@ +1.0000000000 +0.0000000000 +0.0000000000 +-1.0000000000 +528765.5000000000 +181518.5000000000 diff --git a/module3/exo3/OSMap.tif b/module3/exo3/OSMap.tif new file mode 100644 index 0000000000000000000000000000000000000000..543449fca3bca09d3dca661a517aa286b5d05675 GIT binary patch literal 390533 zcmeFYXH=8zvp1SRfKU=h2q6JWLN8LKHxqg z5dZ`L0M|js;(z3m$1=lzWbknx<9}qPW10CsGUKt#^B
~>W9)JE{`o9tQ|5pV5{w0wB z04Jxv$F#Mjs`~zYXy|cutkSR5RSYIQeQWFQUknBS;Nt4(0RX^YC#U!Cx3&%r=;IC! z=H>u^wzh+V)m0Q~b@lIGJYHNJ02m)HEq(ufa1a1!XrPZUHXa|R$8B!T*Z1InuE*Dx zKv-Sn;wn9+zklg{2M29!zP@d3p`mSU>FFdA{hn@viwg{{tdx@*ANTbI0Py&OgROsv zN(BIVdgkVgjpybD2e-E98tDFk!EJ4;tCuf>!3PI)%?%B7>%P7T2?qxa4fM8yV@gjy zI2a$N%YXkiG!O{J#sorJ+vUpu0G0apFM&WJ(IZ2@4h{wfeSJx!_wPw0U*F4@ot!Ew z4-VeHr$@}#xU`h+``^Ezq4b!{&Cy$ZeVvY}r{}+;y0!KGeR}%p>ihQx2TsS2tG|ES z+Ki3q5eEP&E9n{l00MzNmmYPxfAm$-WqJ$U$A3NjH&XwO|KIsMIKboSwy9Jnr-K6& zibOIt1^~9Uz~H&Ltt||O9?O66r^oeQKL-ct9?8kk$I;hcS?TLLH-|!PZOzU7i$8sJ z^cB-{gFcIn5q)k?4~aBBo{#_lkVy3CaB-=smX^|SqsPSem>L@Bx>QwteYdvg_jLTZ zxZ2v} }mH)<< zem6c&&*b;->G;#Bt&NUFW#!fu9sjK@`bE!nx@BKqI{pB_<;&^mm6f5PbdA2g|Ajxj z8t6$$$A5J-H1xmlr^kt2RrG#(#?j+N*Rr}wAkaOa*BQM^=;Y+IwRQP29di i;2 -m{{OC$Zsqc2dR5cw|L bo9W-U*c_T z )>Ed50y&KZ32Ow>-3neuBxii?a^)h z{Y&qqduVJ-@A v{&0RsMB1%g{rbO4e7hJWsp zP|W}EEJ0Rqa|-bI&5ZpY&IEw`!&v|Tj(_Jd{D(9C!+`+MKU`c8%t4 u{W&y!o-7LU;mARFY4cQ`5yLm 4J8MPnb`r_XTseFrQ0-ZvGbxLVP@84gP!R zv3TMC43E|G_xA}3z2xI@tOV~95`95V<*aP1Wr$CJXTWijL5QbkV5E<`cWf+xERV5N z5kf*(;^p1+?>QD1QTXfgeMIoDYHa*^pWpGkUglJlXy{=XI%7ukgNx*`wK++-RAMrp z82qS^4^S>O_u96LJ-DoKvG3Dnsfqffn1)=5X1c@JpR|#&q_oId=xaJH{aAyIW|eRXgXIuD)M~gQoh=B;f2W zoB4Jbvl92(L(e>`J(YKD*rwH`NDIzh@Fuz7V-& 8YYq&LuIFrLzk$#84Ml&Vh zm+1^MqCE@W6el@4@+=DqA&Pv?yDJ*;V{pB^0@hql^%Emq&jcz7*-!S=3i8Jpb)TyT z)pvSmenlvlJnRpa7A{$tFVSFa>XOFreH^aTK=eDjf+H@yiPM6)FX7Vit9)|I*uh=) zpnGiB&1JH)$|tncwkxHC??694=4{7JN0}th01769tF#cSk*}urq(*iaSNjX9!q{@) z)t$2+5ttiP)=r-jNDsI+M><&BjQ^g9MXtY`Xi{=#8l+^wuO9-JG1)zOGReJrq9kX# z)WJ01NWeBzPeRE|)q^-YCP#X58w=4{vImQ>yX0%lU27}dX7wu0F;1Y$N%NO{1(g2K z8tBBIx6kf5b)TB#;!k04$AkQaR=ZG^IhMNdIp+5s)V0l-ggXaJPK`5k^SOD{SR;WT zEeB v@AZb$zAT{C=A;xEUGOQ>(ia5EU=S)AZdGUHwXGrk @p7jz&01x8VV!v3n;Kt#@DJ3Xl=H+gv zOP`w{C-sTkDH!}$_|W-fqZ#s|5a>zaWV~+%mno`Z^ r|8IAbLDBO;@ ztH@xqeVX`oU1p<9A#gA!!SsU=H^Me`{kGLgu1qAGgP53t{B|NAzDQ(=s=hxXJEqN2 zQ}UNpVda9SxR7mrzk$WdYQ@u=FJjnWL_rf+th;_(OQL7xHKq}f>Ljrew)h6WB)m3e zps4JU3D1nyQ$q52ziCl&uw;3Jw!+Q6MLjm#%Ih#pwVv2r)gUej9tSp7Ju!SVrv%Gc zs{$c?+ze~q8TdIkl(~1xM58>TilrzNI@MemR%LVr^}L#gtt%a(eRH2N@+G_7tI;b@ zFg>DJq9Q2TB;{_6p8Auv9{cVe2%%WQ^=Tn-U49_ET-F|hx@At9wbX8`<>2X)VAKWI za&D#`K}5gv&UR1pl+n-`l*adr)&NNXsuo*|VMO_LXchs#T1-?rGZcjZ0UB)X_S S%KcOs>LGa<=6F97f_5G+a#G&BabrIY`3n( zvxsFmln61ojIjla^1DZka!kAUWcUO~4bO&QXea`isK6fY(x-t7vl$ONv-;r&4_q5; zcUSbWpht8SSjW^SQM}p5EgDpqdlYnvs=%Vn;K~#Vm3gpK?keKOoFCt9KT63^7^2M- z+ oG90i@;zbF|Z$2ZQkqkHi#LKGOp#aPFX-23I!9oXjEj21#yZsk=Y${$Yg zk`%Uh)rta!tO6@FDzvuhWW~-#9d}vffe(+gb_=U}F1N&w+d3Nsz|{g7HSu$`ca^JQ zF%E2b3($Js*bLUvgkmd@o^E|5rFAKP8fM^9PT6Ma*C;_5$P+$ZGv@qO#y#^H0r~LF z6@#A#u?h;Y>Q23E;7PqdsfJ|{8PwpV{JD!Vo d z8{@a=5(TZ)m+LKd3`|;Rk13l>3{HjtU;;vl-0v|lvwPW`$2nl*RNDNjm!XW{Q(n+b zsB`q(u#}|fwb{f!c&xvMHs(><7?|rYw8?>GdW>tNzY(*S{VaU{9%t(lP5ddgjj%sD z29-#HdJ=P!nu(A3ANgij iObe26`5qrWRJM?P z1cL-4+lD>>n;3La5u7tx%JvVwX57@XA39)ePu;$BuKrqAf4R#^5_%%Yuy_E0rJ3np zXD&%Z^IXqW>C}_B&M8K_3IcScIq(IGT2wpp7R5|2anPKf{ANDO7PJyylBhV)n~ 1wNus1tFl+Pk35S;kYas8;)K_=Av~Br&xzT*9iOt>Aj;iyW-&_*@ zXcg%-+a!&(6jlp(njYo8;IiCg!yCT5h3*)cEuj)J745Vbwhi8`lcQS4&k+u4j7#4* zcrehsIr}?A79l5FmXog!J {SsF5rj1ZxZc} W026-0o%X+xE*` zB(*Ac5v?UgZQefRCwwUN?MCuz9%pafYGRG?_?=R`A25j()e)@aL+GoWguZp+c!KJk zG!=4wazT8(n(J&hSe52 #kzP9TyH9KDF~Zy#S=w*7YI%}jSPtQ=B*-|FO=d9p<|<@ta^)ToqH z9cZ1KyG0S#;D89#Br@V|mxeZu>R#3iNjtAy8T0tY=LqHIEqM#&m`U`zjdhIACaq2; zr<~0klf%>7pplaGN@4Ty>Fr-Jj +rqKauYiyljW4;fSU9 z@+~@XgJ1uV$^El|InO#)V%T^z`H?~5sC2TrV6k9PW_Q2;RS(wuCq4%(NQK2qbGerY zyPbhtT9OTtKA (t^WNH23%q8>-B?6tymgAsL`+WhkJS5tApgtl9 zm4??p9D6+% x^>m6ywn=7I&JGgi{L8BVZZwtoY8m>L^e z(;Qj11=*HD&{%;j^Cm{f>UZXa;#!VboL6iD^-y%GR~8{OrBJ|@4Ve=9Hr$Aol{m^w ztI9$uZ?#F_4skkJ)IJ4)USl+C>71 Vw3t`L@AQJ7w4AEZ@L%*g1uBka|VWG8}R;%->Xm z{N;4L4Li-dEn+ck4k5OQW5%$fI5#iU;nzL5fd6*^F)C(C#Z3spT$<64JM8B2UhW*T z`+Xj(tEZV GwCS28M9;+y+wC)QZQGGx=Yh4IDEuGi=9n-`N>-52Ih7ciA z8phJsmQpZx$&qi#|8F@6L=%x)+4fm~akFtq8H?Zz)`4W-M&v^A0=Zt NR~rVhJ=N}LYXgTwkDq#_>k~uyb-?Bj5&CI#7?#YV+{=% zQql0|+7rzRcaH>UUJwumXYbUsl|mE8dBJH;AZMvizbPNZT+J>0>>d~sR2^j88G6l< zVv3R!S$2Y04!3G-U^6~pBY~mHXK9Dm?`iR3a@lEv3UW!P^@$ZqLk4XfQDvgz|B z**P$z4L(xN9iYsu#R7PsOwr&jQ&*lwtFTU@uW4rlfsy5Hu}?F>0jQ179U|mT5Mh-k zR10;lR+(&|&fSd0M=SR;DO_Z@$!f=i6A@gJXb+TtSUbx|0X1 ZrC*fWSae3+mcC ze3T~~`pp`c>heUZQi#Ps**$~^?UF41yx!Spbp%!$qXt-vLM^HR0TK)}E+F^LIR*Lj zFX4>k4J}hg2pNWMY^c~%1rf5Mp_`H6y+t+Jpb=Kxs4v>6%~jPcS{<;Az;JPg)$4%E z6slzPKcC 9LuZS$#GfP%hz&s4O%}R8X=Rh`WP>$ZfVuXm+hLUe3vw3}KA4Bm0DGUz+b^Ng zak=f2)+v?)p~;eECKv-lSU!(lc!k -v=!t71+Hew;TT6Hdd zO|D3Yhy)(L7Tv2Q&0^K|3ysP&P~T($i^}d)5-&xYfd*yD-_r`0Wy)KF;-HM>i!S|o z_6K%e tk-vvX+0vNSFZ&jdbj#mS@DVw(oUI-(Bh)@QafwO`jA-~H1>}mlL zAtZ-_%NC^p%XHkX`vDY`dRblP{EQCry~D2i&pp=4|83Ont`1N`U>uERh0wMSJn))E zavX))Y*@T85>uiT*7%9`hmTbY@Zy4>(%+E#l6qz8-Uy;9aV6lJ2gpq)e6N|8EX# K*Ry|3KN&PIEY&Y#~8c*tck3h7&pL>m)F9t9UXvFKrKf5gjb>t z)FXPAxg%a$BMKw!o {2SBz>t;$)SC#kF4k#Ctt-_Va z3?29YCB Fx z*H9=6kv5B(_G^a~p~wnb9^14w+jP_yz588>9ifD_JA@Y>uJEQLMLF4u0-TH9r18XI zk^Bw$0ToVn@?t($FT6Nt^8LNjk>wy+8hujF z@rsjzWMqkRt@6ps{0P7SzOAGpJnDB$$$E8nBjTr|%=3$ #yW_HqO!IBbs`ujtdH7LES4WrGf-A@|%* zef7NbhwKlde%A4`_|ppWf8Nk4OomZHI4LT8yFd6X_Jj<}p9?N%SVuc?uc3ZSMs^xB z6!QBc#{ HAa5cJe5rjha4C={;!52oVkO~G~#WnVCjCD{)yA+ofLbe zaF0TM^U#*y$WAt8>;>ffRn!*y{ac9b(@!64JG)ih?sd2u`OUmny%RZKMTFTaHnkOu z`WK>8-b7aub5Re&4yN0F$Ew{oY(>WcZ>szxC T=WgH568GW8+UX}IR~N(FInA~w7u z 0zrC;6`zzL`D4Cg~IQupE(@&m)k)J-jvGw=7M6Y}QeYe8! z@F?zwH=G|(tV(Yf0Sa%PbbR%L03vo@?UNgI{=#xnY<07;t*kIsv87u5Y4HASv!7-q z1wC)kbs%E!i<5=Vt++)bI-d5vqQx5dM<@>4u~g9{J#56gI^oD79<@ip%D1o$nmbq3 zZ}DQ8kq^H>HiYLtLwiHly=_B>e_Pv?rnK*USc$Rf*^6Al4K6(Z(r|;L>M|eSstS$| zwA~+mU26NL?M=}AnF?AE@=->fYtBSmrdn6~N}d*s{9tIFGWTl@ENj)#RPL6!_4ND2 z%aNCxADyH{w^#Q*?FhPs1V+HI0%zUK&)|Nn_4(ERDSLZzh{p~6c1BKik86||PJCq@ z5Ti=*%-}5f+THqN`={LIo(fn=JnmigY8iTKz2@jtXlBNd?gGra_+{yv3w3X5Ti@J; ze1Pq6N+3QN@@iE~KgRA_-0hfXdKaOm*X>jBfwhU>=V|M}QSVdItxt1r#V2}%o4n93 zURm!waDQ}L=lh8*q28A}l=PkV-YmcnK%C0vyPNNfqu293G=2zZx{&|#>n`%N*#!B) z^rO!ovp-;p=HG>$+k4}=f13N(>E)vjH;>TsZ;8y{bE1cOofrsa!{yN3x*Z8ox LQBE ze%bjqI&X2m=7DD#whV*32OXJjO0{2@&m%ECWlc(XSrI&a^1VJuA2SwIlFTrtbkgk} z%A`cz!fnV 4TBW0h-_l}KHCN5ek zIrG6-XqLoroq?rD1B(2lBm*~UT<^qW* u9_ShErHfB%Ky+{D<}kSj0i@g~C)!@*&pft#>9=Egj$I8Lg2 z>aJqRY??{1hd6;SW7BUl>~Y)XV(BTqzv`a1BqF;x6f^Z75HC7k8$+UI9mJn<*m!BR zmLcV48e%(J@hHn=NmH7jh9b>FoX5{GxA39U#p3M4^Q(`E6+HoB0rI>z!kccrFRSm2 z)i=odq!$fSnIPa8fJ6)%gRpQ0hbBbN5v5o{5=%=I9}{%hli9F-{!R4rzBpS88((!@ z-DbMT=sj?+EMxgP_&tM=h*eNKXN~s@!F-QtVq$v^RT h~TnfuXj@Qd$mfbDy4?&1|_Q3YMlY8#Lb8Z!YwRz+_v3+*+ zMGH86_in~Kk<4yr?gRu} jnfvzYBLxjh z5B{{)%j+lPflvtw)6d~M>^)}pMr|IZ^6?E6w2hw0uE;38ji|`}L6qy$aU_<{okd(b zT~>AS0_jd7fvv}`t{eBPVXR2b)xPP67)Pp@LV}l-qNg*-1wtv(DD&1VZ*Xd#&${O< z^s1Yb2TPw184LP?OwLw1zulkBseRH}ej>BQzm;L#PDlUqm*27CQu)Yl^A3qGJm*($ zzI1LaLu+O)qnVanQkXO-DN8fLgJ<6s-HVi8h{#h|v2V2V&SF(AziQ(-PTtFJO1}B? z*2;b(so@OMDisMh3cMkfR{;yL%?O&Xy1HcfByNG!Ef8HK5$UJ|i*JpkxiTd!b++bp z4g2x0IraQ4Qfe^fz`~sKi}NKeLjojt$tn^}0yVEyqzi>gQ9hr$ccb+PExSA?zS@Ki zcWXvX+cl_$EvUJtNo?S*Z8%j)7VONqeo+pgYQ<=9DyhdMWMmK@WOG-(T4p03Jl4OK zcR6CQY-fD)bz;+SqSJ5WKQuRqeK@628HUfHWO@4 `9jxtyv$DYFu%Y 7tRNIuf7$n5fn|G2Zc0Q1lapDHom|W3Fe(E&l896~@VZK5E
_x(*io`FW9H1% zD@Mwcew_{Vbs@LE6?IukWXWjMf<*#V92_O`uK7A T88pQ%Z6+VJdEZ3W=T9j zC&>MSdD60T4=bWZst?brF(lt+=zrMclsC)WrzB%7{zlN#zmbL8RL=5jp}uM7$(Swl z=X!>M nddr&Ry3wuP4Sc=_O4MZkm0@<7h>E()(>3z%;ioh@5!5bB^>|EP4oPynd-Geb8^H% zQJwD9xD4!3dSQ+3Kn7Pj;4RNIS^$+1brNb=dA-1xd3<1_R8?8r!Z2@15itntNIU4d zj-@Kx!d@+V5#c?p_R9b!@UU_taPcl)88R{=DiF~vaRWva!s&IWyfk~#idPaP3l}RZ zx@fUp!`iLh01HW}{B LJngE$K`LM^ |kH)nLp>i3?q^omIt@faxLn-_tPEq#9s^!QVLH#bYm`^IO z c^HVXW z?KV3%CavRM&KwRke!OB|9ICFGwf8M h2h(sGp04CtT iW>Ku+$Zfs}v*I`NliLd_%%_e2H8CrOK zHhtu^t^xRR&;uFyB|)g&^bXQ5ip)Hi8LwlffiaU=sUkvlLAs*8-d}`cd@_UNB{<|6 z%K$R_jGQ8I@!F;3{aujwsxt5BXUTS4C_Z15;@5|-m|}t?ii{QtP@gntSpvIRH<|i% z&sI=3L<46=%7JXI2rt6LCGToM*EgTyjLG^BKOO{$YW)oelK%t(eCcE6DiX{pe>tH) z#kR^i!o!~3p~MyEx*YMeU%T)#v!K3z$=I_hi<_{E`okQt+Z)HYqn`UqRFzd`CSxvL zGu3#8Odf;(^&Kc;O)Y938!H#-%8r@76jzTs LENnpZ4lp|(Mxsj@E!ak2bwY vI)JiY6gwQayat}IRMM* z(m3JMF5sv?N<28Le;3Y+$x3XIP-3V;e;lil=KGaC$#3W{IjnhV)YMtJ|EtA3P=~}9 zJc7(v3(b&-dukyp5E5=_tTDYGMw0(k-fiSzIJ+CPk{h-v( ZjD!cc9J!ff9r^3{h!b_Vs}VCtII =K=lz>%QO;$9UfiFa-G^wmH*9B9w|#! zXY;TAH1T!|jz3w>0hdNiu|m*!wA9u^45@Wmuln0rZaKY?1i<^bJj>m_5ID G_i1=q)6}Y0Pdn<@ulVlmY4LQ<;05s!j60@2%-nQG~8LWrj+7in{Dv zd%Iz+hfC>2lN0svq9@_WDTK7EIj3N5$Q|xW8VC^{EP->;l5dG$YnSU$ZVxsz;|C+d z{cDao{qMo@48s!{JlIMQFbWJHgMhJo#348WrUFctA> ->t=#cx3l$5SuEhg{b8|bF()5!Uh9(= zHM6kjvTjc>nx(1FfjB81MhmqTO9Vu ooQr`Osm z&K@yI&Ngbh1#h2oq<|1u5zaXyo5h^;{B`4RTfF&ux)tE`MQgi78GFoQ`!H_%8Z+Yl zu*(4wQPyNb{>9GVDvS|fQWCZ4C!{L8F`h%4D4uk;-Io=yM7vo#Q&$lK7j@Xz)$VMI zA}x7le?e?#Jj*1wZF4z$2@J$dVZbJjn>IJlmq{_-(i3JI?rgTdVl{Ws38|({{(E6g zgztb+FR+)I7>ER(;u5=Ol&{4}fmmX`_~I3~A{x2e6yUUY2vA6&_lw&?4HL$T8_(pm zJS3YBbF!OsnmZs1+q&;JgMdwjVd>V)VMxFW4!@s1FTPvym^i#-0Cij>0h?@yvj|Lr zpMWK(%sxWNUzq&_I={?z?v4p^+UeV2NbetBYBQK8JWSHt7mwn``@-E=e7>a~|D6u6 z_!@K{j3{$LU RQlU`$n3`pyw}bsC4zVpLFE1Hy&4wAWUlZe zhkQeBfHgl>(H7YXzyAk<`(li>4+a{;JJ1nsPKZUh;0hB`MI`AU(y8D|sE7-nEjo1W z%>L(^m*hN8cQemLL!L5O2yX7`qBD8%x-k}oz@o_uUn1Q6!rgKhh$3v5+Td@gqD4~X zHlGrd$le7>(LkAKn+MV9-XJ0vIcF$E76G+ec@}he30NfG?}_E@gaADd9W_i?Com=< zsjSJf%p77je9>N-#ZEc(4uMB`8NM(dSGf5KpT&&vLfXTH7LCDJZG}!g1lBV)>H@jb zo2{5NrA(1zR|&_>a#BQK;T2X JRG_M~F?dU%`(SX-ZxmyDOLu3~#`2fX3tH_UPMLJ$MkNaIPAFMOqE-~3vMgsBSPchnx@D&g7;cHl< za``q;+A+0tuLbKt(ca s#LtQD{6x8NBzAYt(;VyZsC*NF@L*XY%<~sd+)ynQSQ_| zWCM{)n8*dp*rqzS8Wvmu>tM1nKfeip4>&*9sxAb0@we;2xi*DBzqi1C7Z4(50KVYB zh{F@`QOFavCV)V`pN!^|i~`CPb3}(#cc?vDlgc5%-Rr_R_9MnIyc;Yy@Y8BgZGf?Q zv7THw R|MlS;_3bXTd1Xbg zU!C9+9~)xs-|vfj>Lv~DYhrmQ4`1M8jGmoh;ewG5;dpaw_d)wo_V^p?iMJOUVt$TX z5pC-;h;!KB`>g)Y$%tgD>diJyr1#;R>VuirPCUd-$fVT?7dd9(B1{_w#YxJE@VH zhXBN4= Kf9N=DX=Pak84d^!_zX z^_c_BEaEFT=0!$2kT-Sg(VcEb(I4~Lo170A-z+vg{K)|S1$%v^{>5)^*smrNh5LF( zcM=|)DrGC=^Plx0tm|m|U{|rF-j6QsFSI>6`3x92_lA4!o$yO`1wP` (-X=f92~d>$V9A%Qi^KItt_ zglb0ouV76X%#rBt97js@N_h?ppTUSb-a}HHc_x95v92EcSzTg3|Jt_dh8O3eV0B-H z79)GYLlq~3wQ;V2JN~;oKAeg}4;dfvjF%O_KE^3VyxizJ1zTt(V_IQ9FMj=VDE59I zc2p&{AHw+!9c}j!QKntED 3k6~U*!>+md*A#b3^IO1A9xR1tk?l0R8La>~5D%wTp=9p-<)~z)gs)q} z9DLW3FImg({frMa0ffmaU%f)6?4=Z8SoV%8?bI;*$J@3>&15y6I-+TZ` ~OUjFgd=8#Zlpnz33tP>2GP z#ZmRPF%NrDmgT0*u){W?RzzY3+e*;eKVupC?pB@45t^s7ZZGTg s!Lkb`aeP?Mcmd&-oJtBuDuonXCXua=l)B1)YbvmISIxZo ?zjKAF*XT*` zfHhrVvLITE%3bO8!pvFU$h5ZB-?#6Ij8>L%^BkZ5Jw2IWGr;2-DRJid3(W{Kmo6dC zd%Q;6vVoFyuA#4?LgN~@M5XP;2C<;PvFmVNi7%CZuC~9fMs?qOHyNXhspXk-e#tv7 z`|(cEXG+>#ROA|A^5E1R_b-j=6FSa~o5|AK8b;c7ix0OXv&_j!y@nn@FP*k6K~F3) zUhC^UvGj8_OXVLlWYEXwdYdK38OaGzhD?LZ_*;ZjVTWuELBXRS!FbvF=89UGj}hZS zl>?ewl5*Us7I>I~6>~A%D2I@%=PZ$_ _+fO!L1*D zsv7s|e)U>#aUGh%D1GLH$-Nz8MWg9>n$Q^=ZFZLFjM2Z)hdIJRjj|B&G{Nk6oPte* zu*00Wb*q)J^*B>~SgmaPS=ZlIId6fdtJ2@OKC% g7ua5 z=au>o_;ewTL5Qx4^|?Qd?NuAEG}MTKZYl>_!o0J6N0{nD`KDq0)WbTHZY!yYLQ=c> zq?F>)Va4;z@PL=C9;I(bfDi77&%W4QI+x&ZHYst@s7gHf1?BvTO@+tcy)@^1Z54`3 zNV&-O?94Nta_jBVtejYp^)Ywa%{+H5T(EdshE8gi?Im5$54d^DW90YyS#RZ%<#V%1 zj>1J2hi&g`v@$Ctz$qB4k{mAPR!uR7Q+rj)XS0P)!F&?5&%$)il+@2NcGef1xD0)6 zUTmq6aKBo`YxNU}YlJqJ$EVp%n!29e_M+w2Ic~ fKp<@O}M=8u0sal#}jxRYSfzH-_4x0v4Y|J~kJ0d3nX7 2$ZxUG8o5MK&M+4O=gt5_N>Jdhc5QE>;X?X9~cv02VOjy}BG< zhE!z$<=et!IXhucnMC|%D+l%Cs YU={U9*Gtg3q#E&oO11+F~1s!enBbc?Q96r+G%}6Uu5p96`%Wy01<$ z!tJ#3n;kL0;t^hqhfqSbo!(H+$xO_eO-9$LWJkuROBRRFj37xV9IlKt7%;`N6Uu?_ zEn)>UoOnbjkidKRFt&8qkFtmzFylf}`p&58<;Woyu 5ao!&Wsbrq6MbR8kf1tw>ek@-1Pd2NS?W!=Tf)r z1(tn^8t}_jnR2y)&kzvj9G;{5XBnimH-!z!t!60_m8N N zQu_*|2T`+p5h$NzKNJ3iw>IPnDu42h8n2P9aq8KL(ZSw 2@leANmCeNT=$_?v8h1^G} HPW-YqCpjqRc5i!m^?+Y<8V$1H0fT*@Z8AF>P z@>B!bRPPxp(<{RF +oo{#Oa1iCn5*To(=LUj|o8oUXE@5t_^kQJ~z01tPJ)x>@ zk=ALs1q#WP!%XwelEySO@no7Dgwo7Ka<=VkZmxd(Lqp@j8=Es{nMpc{H;De2c%j6G zu;ifzq4)S~Y40E&s0{(0jtg4QjXN#KPx4p^+DompEM)%ZN={sCO25=QyM*!fTZa|8 z1vqFAtoPa8lKR~Iy|)Vbwn5!pO1@Sy3S82;fg!e%cwKs31Y>1QDD}{@AWNZ4jJM&0 zYb-R9_$c#)b2j_K$9YXJid{a-5Lsmp`R?~d@GZVFPNp5Q;mv$z_&lWDNyq=0F?NuM ziGVvF44qZ|bOMRW^`J}vm=inwK?#J+y Hfz9a@7>m)5CN--M>>t>zb-|rR537NM7Z2QAB3pz3M9lLYPbIu#x(Hw#3JDH znRGL)AJ=vlRuT_n;f!WT*!J;Zu24W$@=u9~152c>K5io$y0JxAp$L6mwBuV;K*%H_ z8f}bln=pztEJw}0x mb-50_;eoV>(+hqAQ$KoA35YP_;myBDBoO)*<^c7Qvc^9 z_;Ntp2JMim_t(lL6dLG+Ec1W>YBrX08Hj|>ZbG|BD$vRIOfnzYSTTp=)NC;V5Qb)p zcO4f#Jd)=78n481=CFU1qnktjy7~U6rO%Ko3&{4;XS@>^9>hc2 afuoOZz2{5~Xj4mxf`|NoxrS5)}2l uOUK7H zA3kl{ubKKZqI7`OXO?oH;bS?ajd`X{vwV#L%WlZwJ-~9$xZE0%cx_H{{3g&2+9w17 zqM^Y~Xc!0~_k^qRm-+ UKAU&i07O7ln{4t*pDo4scAm-Q>_P|{Y-AHwEC?(kVZG=J*Dbi@{&2G% zleQpH&8f&%mi1*i4NbA+qeR?ZJk4!F;~+mG>_S+|K!{B$wD%X6#q)hYyb 0PYuO zpB h zAiOLKkOeXsvT}SVl15;oD4@B1VEeS;=3R0Lh+9||!5I?Y9$>|dNdoXg8Qu*q69S94 zSbD1%2}TPwtX9>DFr~IaE!z~6JI;M1!%0?rUlB%biu}1k2&~fwY$Ipyw7_oi??n^@ z@5CHz$G30@f%PZ>2ync!N~42y-tq5VNMY=m?!8j=$u-B3ic_@mbno~tgSzJiRF=o% zRU55YnE-ISHnW>Bm|VjR?Gg*AF(r#2Es~juQ;5B(T{w<2Tat(N>+{Snm=~FOt=cp} z4g`+M#x2hZcyLeZ6NAF>yBizhTRXwdT(mDLZVEdYd8`YYV7b80c?=MEr)i%yJFt-* zU@aNg&Wdn4-n-f!Z4<&1I)te5Ym02&N36c3Niw&Lp?Acf4P1Q|P`nca&m!r0-*8bI z0!ZMuGW{b|ta&!ns5e1b_8V0CzACiGWDyznY0POzXwzmKSCe|fAh5M}S#n6pMD~rC z!s<%M_mjaJ+ lw7_yMboQL! BpzmW^5^7gow`5rx>XkZc;a z%Ou;SY$qqDg|v;DjvwB)tN|kCK>kaW^+Bw14J*e9c_~^f*oF(=bkfb)$mXW49?<9# zugxNpF%ZPy^;q8A39*0Pu8o-N?H{feMVq13`m6%Jt mYM+zZnr-R$+al Ge>Xj4c_HRuZ%W0^#{g0@_~ktNr45~9a$jQOgJ%z3+5+LN|Dxf6YD5dbm=oc2Sx zEa!v#S^k1z@jjgkbM0;&wSn7eq)Cbe{DC|D(~M%Z4H`7W2|!gTRKWcq=@T&bwhLf~7*f z2RLK3!7`}ddz?0lEXYM;Cd||>K-7!rieE>tOGj8T?aviYB_U9&!PHxxvY;d$GGIY1 z ?65)CzN z7iM|)K|X=mS(lLCRV~8K3K$$AXw3|6DASqm=L%Wkl_Bvd`)Ofsm7h>tzijQ8I|2Fx z5@q#Y1N4(5me_>itMJF$?JRnTyGDI1%2-LtT%Ia-KFQuHc_hx2_KU<7Wf|~Q@}4LX zYsX9uclA3{&EQg}d~`peoC)(obH9!oXPxwY#wDuhN?~5O1Wt`r(2(n$VPJ=mqV_IN zH3EaHtch(LNX=$TRoVEcYwmys+AHZ6QVs;K6p3cvUzSbYi_6zo!8gLKEdC#w&ho9v z$9?~d7-Pi77=sPOZS)97r@%&y(W66UbSMpiqS75>G@{Z1(xHfobO p%ZpZ@ zla!WH>UAGq^#-(X6taMd9x}z{iyzIVWXQ&6>G0^SdpTrSJ8)P}auj)|Mvy)$UO50& z=wn(-qST)9ydGe!5Wl%{DL0Cg^1>dhq9_0e3RcU>Q180Uelv*w2fWLHnYOYQ0fLuH zaI+vd1%a$2y}M~!^$m#g`U}anmt03J?+!((MBL-I6vanYqK@ucq3bX0Iq0i^m=aT) zaUvmt84i6$l%L{e>c^Ev4>d{c;MfF{enI|6k{nh$khhnC*HlzvZSHV|T&tQ6XENe! z9NT;oQ8Vu5fUdF#Z{`NLsLFR+!Nj1>Ol&F+CKK4aN^eU53H#QiUOy6^^AXXS7E@t* z|J;;RByZKiGryzN#3E0LaOB;dq2yUO7;R(HuWzC-1`LXXKO%S`kY3bAR8Oou)UNsM zPHkV19c_1ZIBK8Co4-7MpC61w1TZ@`@-fk`40M@4LEX~ZLiF6`@ub6S7z(ixOG$vJ zrG0+)#&bR2I( `n<7@ds>i8waT*#80c=5(_~TBO z^g`JAhMxOQ=)ZTP{6*oH&)p8_@%U|`Kt4&jb>nJorI-hp#OnDHV*IX8EyCe(l#l&L zYue{uyv&b#Ts|tH&SVHZl 5<%E47o^|7Dp^rE3xD$FP9Z zryik$(Z^d_M_1854MN8Po;+m}EQ>LPaZXxBmI}Zd-_4&Zt8*2;H5GiFna8R974ACt z) xzBgI?kpEqx zOw8w5Ru%KV>~I$rsCk+x+u1lp1K(dCUcJ+w7G6leUw1+Rxox+=cOq0eUV_n;vwvOh zGnBX9=S*?T|C~x1`7WT&e~(|mp3kv9P>C6?c7AHCs^8T@;)A}~hulko4STN^u*+g# z D|9jLFRLZSFi%zY{FI7Uw??TS$y*L z 5v}SG$+K>E!3!uvc*k&x4j+xhW)tLU;{=40| zW5@HOZy%sgrDqBXda)jU#}InVLd*O9=xy$=Pjl}UB{F9@yR^pat%Y*!2@B6^KRSO> zSX8*i;?&>#SFuSoQXnq0dav+V-&^_}v8oX*VpCQAFX3QV+v2`H0z%t>^?oArEjffG zGl%LRDjbAz7GdqX-|YH>3nh; &7F;47*~B#x zH-3Em`1xt<2^!?FVvfjgkOqkc&-@ddO!@!VZ_2$f+;U%*)|njRx%#iLi0n~|IKbsJ z8}wGZRc+~}O~*wKoE9oyjIZ5xtKF(JdooEXU*fe6x`aEdy}-ghuHS99&=db3;(^^a zUcRFbu8$Q+VjN#iOG>6JDS8>v7dV_NtQwQB^vZD+LIDRkuS=SZnDFc@H)Z4rMvQR3 zzk=o39s7=~QA5jZEP3q-HJ7wi9-1ohlC^6pkD$U~RbRK>iiBa zwwqT_e|qzKbcSwnqJC!ewPBHV;e3tOx@@z%+~h0aow;udZLP{%Y_bQ@Ck4e@51)iP z2_MM}>tF3H9a0XI(cxWsaQ7^4l @lvJHaA(rg4X32tj)D~m`-v4xLK_Y*nFB~ww+&wl6mO) Dwjjt;wCBY42; zNXq)HNHR)3_R!hf=+_NFzV_)+GK`#7;`|v2H*_A0U+~!pH~jFQL*t|$&Hym$1zM2M zl6`0%3M$YqqZRg;*{tffd`~y3vKilvlP^-0p~q?+W|2+6*a|Wsi|v8?n~o7Z1J<^4 z0pugK@3dX*e2?+MX2|!B9W-0)moIiXu})-i_OKI?5bs`LVXk5NJ2k&4kxKeV z1l<#+@K?3YALNVIleO@Mbz1>>1hZ=YL_H34`ABZV&T;05 z^3^k?xihueqbn>ss>(GC%?f^xJ%6c!K>XHPyhkTcnKz!p(;T%NTsQ=SZC*cz?Eqw2 zPv*&vDi*Q{ZDg2RcI)Ym4n?`D!Um{l6Ig?$!4gg1iVUL}`c5BA^JIh@A?g!446yjz zOpLMjW9o(1;o)O`#Up+tXR*Ls5rocKx1Q}%_L!ck0^g>=loAaC)PnzT^R`;3++6y3 zeymLdY7NboRzi90Dob)u-3kRue;mFzj}*O7x=j-GDy+lW2Wx(SdaMu+;21e3N(OW4 ze84g{jmsyAM!mp}wcd*|9cg>^%D6O^E!Xoo+d9gx5Ln`IZS>^=9l`r+We=0e1p4w1 z@=DtNc?shEu~mKztGD6#g& zK*=+eBd$>PD|BC5*H%J*obMgAG@G2i+U9KY#lW*$w^aWqh`h?vcn<#>DLm%LN(VX7 zJuAY#N3rOAmFGqPYb{6x+9C2h{a+rAcnc)tGidNi&@`d$=Nr#g|FdNv^T*B0$ySd< z2%$vrPb{?`;L+5Kti&9wKY}&2P&_fYTlr6dQSa@%wC*D 8xQQo>LQ{=jiMJJ#3ircQnOrRjZFoW62Z^irV+zG#A_@)Bm8wQoMYy^yNu^vaA3 zQZ9Qq1iJ=n+=VB{DTho-jk)wsbH(D wL zo65sN(QH8{XNYU~HwGml{1v-4Syye}RY4u`?)hvfR57bWH&UvPGmp_P;IcdUi&+Cv zOM+S_!ZRTNTV~efA3&8>>D{~%a8W_7wT(OHC= ~zj6bx-A(6pV1DPCsyqILHWhoU#;sjIpPB#D9TBPW8Cn#QtLZX+ zOf2mWo)kam%a~O40#p=N!2GNiih*nBM3@+odEV?yND;5sfF}HvMg!|-F6pYYUu=DT z%~D?zU)(#-Tj?|N%rN0dkquqIN2tWp^|pQ`f!eQQyM?A%&Z^Z6JrczTMV!hvK` z%RXq7m)Ou__nR%2ydrXsy}wzUV7kOJy+n?~S4!mI-oq=q(erD)A`*WNS!3gt !1kaGPm*N%fB%we~>|VYiJIPYKX7A#?w~~PobtuODkr!;0PCG z-kkTlFrbA1{h-cZO5Bl5MQ!f2Be@01Jh7xq0qMmTLK17@Mm-WBl{@ehKOY;H-RQy} zhVM-ty$j0|BntL3o;owap}3m%w!$t0+6)EfU!2ELxa-7BI|1vJn&62bN|N4Dn&ITT zpoNu <<=4l=3moD#N}Ndc^#Irfv~ZJm>+45x^y2 zT@?D@MOGd$)8kU3K7YuWv`|L3Z01v5dd>(l8+DC;oN0d35abB6NH?To#8m@{yuAg6 zmqgo)l0umC S-dF^)7@oE#RwR>7b+fbWb)eVdQR&i@i`LlcgE~SKvPoN zOZ4W53k4;>Rf*;qA9F4}I0=vgEROzC!=#kWRkZErwJtsz1-xI=uPeU=0qnl`czi6F zVDI*7{j%4F^3{~i-@KIuns0eIx%1L~*0l}l+hdtCr4PPzEnb^3x^xGe7_or^0pv`p zwvFpR%|nVcN0S1(N7&EDuOX;)A=&d$;QbqIR`1+0wkt4*%)yFL%EI%&DZl3LKVCnP zZZsYJuw{`{? wSvYxp-w!`KurUlt`Ezdm zrK5d5r5gd@(0^xs5UK9_loh2`^6gvSjp2=KMJ?an{j%eGw2WK!yV;8}F3$#jCtcb! z_Mx6dg-C1cX@7WoaU7LNWZ>5V1z+iByY~jgJ_bH}$LkbR=V1k7rT$wyk33g(bFaMo zm)X$vcXj`3kq&I+g3q=8WX^8WWFA_FxQ=~(I-7ex6(N|@rma=~S?7VJI9zT=+(38N z{P~CsD*f;-F~6SYm!+#(+;-1w8Q>!+s9Qn<^k+KrXlE33AmN3gau&}>%ARArg_3{2 zZ5kqK*{^wyU9xV){D#!m5~Es!u?a5QVZ0W!_IrsA<6F~>ebeF1;0b}7JAeKniYK?V z$F?kTf_i@XDF3Zi{WEBmsqa`_dF_Uu>SG$#ENA}B&if=9TqX#l3*q|r3cg6hPoH}^ z*EA;C3SINC2s)?2A}^6?snc9}oz?JWk8B2O^)04U0Mp z#-;_$LS!@lSmKj%HuGQlqV(*er*D4VjXzZq@DGe}n`W1T%d`6HnefFpY)^V1Lq%?v zEueW^&k0;9k7IOmFdgv$Tu(tynETkox0U88W@AgM`psZ&nr4`JB`c5MHgS~)x(3?a z<~dy=5-g-z_JBB)BQzZQs{2!`;>MMi8 ELS4T>JMx{o@+!E!73}t ztN4#L$9)C9%kzd~MTXbfgtzS#jMwRmdlsNI3s%2~9gTI^M_4NagMcp3nV!(^a)Q>$ zGE9MNp)5#V5yia)^z Hb1vnL8X9e-K)j@3hfE2}B*}A+ThJ&@lXp z<(V2j+zbOdsUl-px}mqvV&kRirtHUvM|60isOmnkKUAqP5TX%8kHn()N4djH_f`IA zit^%61R@!SbPH3do)C}kWL>TcN_lw^5JSR5p$-hXL5>KfPB~1oxiJPmmn|Cxn-u3e zv-9H6yWMQU0k+Z%Wc>E{=3YUDp7L!7J_Cf5o(`kv6oAuXD&&qOq1+9S2h&o6S7ZlI zzU{h&+1P&fR{oFX+e3>J)r(h&U33EbsCvt@lru#!mO=qImV7f^xV53pQ7Ptb2*3?e zX#sF^2ciwwvQy54*6y^7 x3*fv$(0E7^r9fmZWTj z;6X ()7v!0* zg)xG(JD(x}Za10q%#GKr_$Cp67=2q-pz_E%Mp*zO0h{`Sv(!0MmWI_#4^I5D;ECf6 zWfNV=7Fecg4~Ki!&{!JWbmo48?t{5wJIm}G$mN9`_ak+g3g3F{w(O*e_QBZPEY+u; zzK1?tZ2A2=JoEE(f@rQOe9s0SpKF>pub+|}+L!4NZWb-N1p?hRSZ=X1jJ(O@qzs}x zu$k6fDP_yFc7)9mcJgdgvL!>(1gE#1a_7V__pFrm-^SfA%4d$2j*OabEHcbD_MGRA zHDChNtLl}?@qh(XrXfETkPE8c*{(Xye**XYCmgZPJ9|&LYscJHU)AWI*5L_9-(jLk z?@d*UG^Jm9h9413>5SMD-Z&|ix;UJ?JoI!9NH(>x&Blff+U!p_GSAtDm$A61v*Z~P z+|+gY9AQdF@P2oQ{T+XPt7h;oy$yTgpvwYiX3DnQc`H=p_zj<_|C|)H@Tw`YKXuYD zGK6?CON6tzEf9I=`ciU*C62_&VT)prSdC@b=7wf}KBav9YR=-!mr`(fVOgIZaFHIO z{_~yoish9WS!x`O;{gm%F3iVtbYXZ|nVlg}1YAcS2bcfjgH68yoH|*IdJ1o1RaPb1 z?_BJd6}u{dfTP3;cKp$A2ml%gBLPeszRDo+Gg)3@(o)qkB=@@=V?qJ)?G|0JunH6S zGV{k-08j3eEgYl#I_#=DDXrcJwTuV4`KYm;erCJu=rN$&PqsL7qkJrXq%dR|&22Y7 zijkDFkF!uYfBoU>$X~cJ$+YMlkQCztnA~uI@i(l`08mH1uxx}Wx91~ZFC@Khm|BHc zy**!uWsE TbwJ* RY7 z_mfz~aWO<%b~g;k^(Y6wB@vInG-pG;2VHPN!^|F~DL9BZG;^q%I(1j&&dy{Xi}AYG zC-3A$n)jN_M(`KkxJIw$Blf2YJkLMXC6@oCtN$p_JCgS}!z(KnVZ+1X1PI=*=C5GO zE{VW7x@7PQ6}W#{E2lk*929fH3qH=uKNc#oc1l{JW;mQLc5)GP3ltF7y}e9>FbotQ zca;1JD$}Uub?2i$ZcrO*x{X{yF+DEPcypIDBqsZ)EP6YqL{ h==Ca&N~|UN@eO)(LP0hZ zYau0iEOh tHCnX_?i^g(UU +)2?n^RO(TG&95y$_-A}e z$91*X_!qLU(bCcn9c-{+-V+%YZ79JWM#XcWT3WK98(Gt-P=UKaIy}o1S1ppL+$-pE z)Ia9$?V X`%?O4 z=9z4RqrtPK8lyD&4AI4n$Q+aIw#4?bp6{Hhd`}-A056N`{yClTWHF8@c8N2SvN?SN zwt{IPBJUlum_wgD&kdxse0lpS{b;4Dg86J7cYh-OSATXB*SKk~%LDE;5y+|(ELs;m zXWdUz6B0)KyKc$i CTma%V7Q{J86k9nW z?v*L))K;&>-xy!Dz8yo8dbjZ6r0p^H)L`~%ooXxxa`}Q)>YTQ>|+*h`wxtL18U1^n1)3!hRWU2os)d~Z!j{hRE* zkf$sgbK;zNbCOj>=~gN{OE8})yR^QFVCa0G03|08OzO5`> Ki$jY%Mxn zewrIFYAms6h#NXgQa)Sy4fy1ufecp-JA1#0Tb&XCUC@{~LzVQTi1NRQdHM6;x`~rw zXmO>IKyT^2?FsnGIMLS$e2rMlSfdvLG64R*85a?JpX(^bexXXpvB`TQn`?3GNrU;) zB=x4x6~z-CiatucsWqNXoFK+OG5!~N$}F<+AhJ~wmP5>n=G}clFX(@Q|06Su2{nR$ zzn+|q9bA+DSmM#|{-{|Fo2=d^wK)yQsHVm5vWXG|ze9tdTgOFME@Li*U5x!N9Ug3} zXp>ccq0V#tnOdEUb!QZ^Dmj;;)e^8Jh|ZqP8!_Pq6mN4hDV)TfF16OQ$J^@@Cr3Iw z>wX|BYMd pcJpo6T9OL8YK-3%{5uZiu2 z<<32Bw(0%C8)Zsg&6NV=uW$|}kq!OGCRiSs9HR#f%73xF(qUKCn$lVkj#=JSWScsm z<3HV0evG_$0Yz{NMhlmA*3qwh>`c(F ~5dvnqm z$O@Rt)6Omg_Z>#bC7PptO-yFFG+rZ(y@q5){eA`+JoE&M61W_>sciYCiEO6x&kCw( zN90Pi7eYXKy?z+@b>a33gJM>R%UEkTBs+fm;w|Fnq_>0fLmOi3DH#2S=jAHwCiu^~ z34*nMoTrNqi_R{QN 9X*>zmH&an1revlS;$Z9b zLOZ|n1@fl VIsnjne;m9`5wvqs=+S8Z! zl)eD=3_)J;>++IzeV3@gmsX3;87VnCe%{N8H6WQP`?~d^!Uus@X1^B(vG2ouyGHzz zje==;Y>vnGxJ7g{TKf$-kP43shV?^d#>Im|-2M)Dp8&j#^tD5YAi5D`u!|?{65a{8 zR{|+`G^;S;tgP)@f9E-g@z~W+++bX9OyXWE>737FM-H*jL q@O**xsA2#sy$yxR2+V1g}@jzKdi8LozKc~nW!fND7PpBx_Ju@TA;Y`2Q2qM z4`5fCrj!`o{19ZC`M8vlnt;V4I+PH}oM@8E{DQ%8-9V;g%$uE-#O+o*2QrNDW$SCC zO&?IXNo%{D_5*>ojUr<5vYy cB@E*cBSg5AS5@Se)%{2}(@v3`n< zt9btSw&FJ fRxcP-vX;H=Yd3mR8c!UXRJ+uNNXA|=sS}* zh~y*M+9yHlr1f{jBZ*}nOhS$14EmY{D|X|sPEKl`!p()O;e3gFp(%RB(z5X;$!W1R zTAZT4vkY#)=&|vEiJm`vzdPpDDx$>lm>jX>`q%dq1kVgIjCtK E z0bDUJ73lDRiO) Z6GG?MKuMCy=;F8@?rzuCAvh+xK zYjV7MNN#tF{>EBjhQB62c17@xAr2P%HRPqzqnMb0A3lg?XltR`8DBHb7N? 5EZ zj1+oUah0UK_#y=(a}C+(DIHKMaZ?mP;=9qFZBjzN9KuSgb_sRO&ZnZK*`&Fc-Chn$ z6;jT+_qEn8RBPM6aq(WLy9VpH5+T>l37!>Ul132z!ksbGVHmS{2>VI1AiDY^gSr znK^-OCF?1i*q)C+aoNOR#1xc~?%E2AAr@zoXyV{F*5_h+60A!rZ#~nbI{4$yIh#P$ z1S|2*y)(2=E}U#n5ey@j@_!<-Lmz1Lr!CCELf2MoE?TS pxBgd_(1J09Dj4NUh^xXmu-TNTgU M`Nd|T`MT&!YSpAzs;)esIh%51>na&-@bG=Uv4xP%OV3~(sBiS$Gz-up ziHj4ABY$k?8E(iq{<{*aLw`uAHHh+RlZR(WG)R(-SOq$p8yJxh-hZ09(@fd=&jwY) zo9o(z&(*WJRm_{}AnIgyMYKw)#@;<`d2OL~x{wy-MA*L;E7xH>nTV&>jod6v%w`Vm z7Fz{W`b?kE0?+6pYkvGvn@F|!^f=j3sTZijZ0nf92nlRIR0a_~hrDMTnC$f3=OeAb z5_vtp4b}01(*<}j9@G7%5)wU${(n2B9>!eZUS$y0{_GI-I0m0y;?_swf@f$d{Uq`A z?Wn<){Og@S4>nH~oqtgLaaiNd6f-j6nB7`;_Gh=t zOtP=i0(tZXGP?REo;aK`41yTv#O>)g>t^#4g?>}{N!~{-a@`;AF>Q6d`&u?MG}1}4 zo$oj5jwiS`=X?_V+!8&~mGKJMU8}^rIF$<>(R{k53EdK#M6fCq?KE`cW=w~tj*;~& zHGpZipW~gg9N*fS^xD}<8M;i21Cj6K2CvtQ>kEIFVR=33a;RV^>hty;RsO>FtewaU zNya$#`&@D2&v*QuK^W;(Y3WZ#-8BDPgPlyKzKV&t{`4Qu>nWnb3y{1omE~o>$P*jL zd$D^#yg>hcJGPXk#K$}?d&;Vuett)nxR;C`AXXal#qKZJEqkWvm)+5uhfDwaIt=IU z+mXq_@xJJ1-t2=XxyDp9V`8T*KKrT?YJW(EvU#Dy0IbV#{;(E&7znYkdhH!R5G3xn zNo_vY?}^%VwrX@=t$YaCxyj!j2J*r%ugyQfmh$P%R}J>zskFJEpE_S;yQvnMR=&F! zBGBFb8`y}=Q#oo}#F#*1Lsy>Gl;PQBK>t$NIDcNRF%~_0AR~~?t+$rxB&yLFzR?So zcL&FLBATl)FKGW6#BRqo#?-(F-}15IVDsiLa+!g%)yZ~NooRljPrzwRcdFMVJML*i zmLstk=XcDFgRu+XW!y7HYn)t9dv$C^g%ph0k`F+8_W9z)SPH-U*nUPC3W|d#^Z^5O zE>2k;yC-w&DIQe%!!R_9%W}Mx=yQGK;hM%?t8x=-u0Uzkv^X5p69Ei#U_Muw?iLRl z-~uQ2_GLDDOBY|p_#c5upCt_VFFSk6;(zj7M1pwotwB0dlNnzWICw)b_ZO9GU? HMhBYpBV#M&+GNJ*xxAC$* z(?95oY(yPJxsIzoGZ)B<0Ws0;W9(sEb?5g(B=yyuz2grum@3*8M5z9`K^M!0K{}>i zo(91T8s9&x*}3%Kqb758b{rWV&-D%K4Z?-q_a7ll?yv8MNxIu!s^WQW{aZA{iZ>1@ zy{Q9EIx@zvUPe=Rsm&-l`D?J5(?I!Q@Yo%Q8){ovE{}_kRd|8f_GA0F!ULU>3Yw4Q z9CpPjvR@EZS!}eS&g@p{iLv+}cFWsLMNj5PKBYE-A>$!RaYVb32n^P{xrJekorG1L zn0r=3uRwRU0(e(ZAlenet%f z(ZfsL{V= HjvqVsKuxR zV;kXn)7dQ=QaB;)0jt$YL{Y-WXAB=c0KH}QZg}%j#5ekl3KuqS%@&?06L#${lu!hL zM(}cbDC?odtSjY_9)!U|W;*}1^xc`msx{s~Lj$YXc6^2p(@06$@p^OMd$REYkk~p* z%~nH@juN0q&O?S^H1KsrkSL9Xk~Y80g{lo)e(n~0FaL(=0O~Pkf$G`|na(k8%G>Mx zrsn9n8)1<*I=P7ZDTcL?*9W28TuiFv-gu?^+O~mevsJ9ydAMaFYsV+3iI`VYXs*|e zogs^s*~Q^`id^_dUE8~9mKVXaBS@UHF}l@LDcaEVj>cu#fG&&S0-dU)%8%HmtDoP( zJO_S>^BECsOyac+^H(5!NBGzyZNCUrA0 P>rcej?kh>M>r6;y_M|0E@aEn7)TpehbECL)NEPI<}J8jr>zZuz{I)HLnw9wg{p5 zh6Nd-b5XjVmF%ljJPub>BNY3X=2P}TkP$;-6>W54QPKX|ok9dQMA#v5$r^oPWSoAV znhw1Z46kBlJJ%%XK6aRp appm<~jCEFidn2(K0g0Q2Q8 zSRIb27Y0sICGJxZpr7GvRB6R#QK5_tU|5=S!69+E5P5jFu)GqX?}p!(dbT%jO`e`% z{F| Z^#7fsea-vc*^c-OswJYlf47p$FI3V1mGZaAlk3iR$j|AOtp}9 zfe7uQyf#Ks>5CgHff(iC-F7VJNBo|#tr&w}Wzsb3JvS77CvCB|<4BA>T|mvBPax 7zJHK9|G_*QTp!UzG)PMBnVI`?^{daiC&ywfv@fFooxp zq+vB?f=| nzfjD#9&r5^YG41qMa-utcj=&e`>a~ |& zkGve@c3E89HNUN(S-U6<|IR4!=YYDqQKP8nnH0fr{?5(4_E0mMF5XAD@vy=dnXDGo zI>$%5GX2%OKljzK(mpAM7-k)|XjbmxrS#} AUOg{f{2*zjTWgW5i6_7`$AT#2}H7?P(?8%_Vd z?V-QM%5F#kol Qf@uqpSL=J_LOvLR&`LYcuAa!yDEA3y?ZlRRBsZ3 zG3v&V1pF`Gh=1{88GktCDtMm_yG&ngZ0<)9z54bC?(fPr?~Jgk%Sq##(2lloQKtfu zc#P3)lK%kCgtqLsx=??a5^m2LI%S=g6<5erNbF1sMqP`NIr`ym;|6QFB-&+PN-gI{ z+uO!!3iweTere|#O%6_!6p5$oiU|Od_>3PWke3Vj@>l+>CL?6K=*-W{BKKXTeS0aP zU{U`&ak$>TZs4XYTdX68+d5588MXOVo*)8M(0$7I$3;CYo13DngYxu0T_FpJI3Kz- z{;_oLg)m;nWAI_3eUPaS*ZRp-3P9K#(|u|vx?c*tj7K~@(|>~L@5e*?M!-+y1{fop zKOQr^#9E`m6$`(azgFnfWR`u +}j^Rt<+v>PE8?yV`1SBIOrdZ ziPje29X+`T^?%vu4;boUQ&j#$aUA+&cFKF}ni)PTuX;CPQ|mlfzO$)>jT7T@F5*4+ zY2u`xXE78~Ha_`u@^tB(C;OwAs6lzMsYs=>_;$kGlvxc-9yGqNGk82=LMt1~U*Pw0 zzr!|tgJU{y+};0Fa`5$1q25s`Grar|M9AcNNgmhhhM-RxL6haga&8_8Se1JVf5m*n zDZ_8ev#KKEk}VsT_Y(bQHjw<)-3v#MFwM~Q8QvLunl*nXN?h-dFP(2DQrGYa4$0KX zQGPI+TBpH#o`;VK#;Sg!LY&(aDsHCx`dO=@+i!%%e;xIf7GMx>Y(vw9B3q&tPZ+on zpzyX%`CGg-OV{4J^J}s_ilPs7xZNgM^#Y;tX2EIqpSbcg+Fa0*!|E9LeY^?PQN-zV zetP3DA)(j}Nr&CPI;bV37@foZ>ciD#c^w@B;+om;r`nwN3 zpUsz$)341)-Eh{y!lkInAO%H2<6IP1^GX8qa`*Mso13esp`O~Un^aMc4TMkmUuz5J z!HeC`x>WY`)7I~ob;^58pW!^bWpdb~GxdZkf4mOJ=!TpXU8qGQ1m{zWS?@*1+3+~O z*t|=)tO^aDa5H%~`7 YBSHgG0mHXRQ3{OJ7VLN zyR9d|LJnlY*xBKeTjM7ULyg+E#=XIEOgTK4O7Gvi;}QF#n8oo);J)~C9llecj`AX! zLzLLKHI_hFhDJ!gAs0|e^Kq~tL+41L;Z;_6|Gvg4d$|VV$I^9*?dma##meXHGbu8; zzMUm|toH-%&}*wv+_cx`Qj{wZGFU_bM=7(rEy~Z5U5lT!z0S6VT!XA5r$bBq6K}OR zY$1gBv&W{qmk9M Uj@veN_W}ibwE#N_Lr450N zO><0Tk&MLWlOF_>=Sxd@p1T-HVEyq%l}L)OHiFt7s^IR5rc=6RN$T16#@7#&kltPm zJl3s=SLR4MpaN2!)dS~)bsnUD1w7dkmYN_ 9Eu%BLNIDGK)kJ z0v7nCZ}4aD3B9dUT`sO%(Pie+mDWx;ve3>JcMN_}0rC%rrzi3{o53ttcFLp%^(a<} zH6ZWd1}-G)Ft=U_PzBcPoPrsvV$kGehE4ok3p^+dx}40Z-nx)s@RBDvJb~Df5wCY7 zmYXP4nTU0}9sj3=P3CvJCGQ=OO->Sr|6so8vV$r($xlXG!?W?HVRP7i?=*^OM$mx| zgx^ADv1th+8$`QAA+HJD@j9TdY4&Cyu?DD?!a+!jk91v#m{gK#!&%jNreX;#EV%Dz zT`IlFKZ{iG^pEa?DfB<|^py}(Bd9M`+#dDQX0j#0-v5$semtiJtj2$G?0fBISOT%U z?@qtA!jbs`UtN;=eD_8E;SJr+)uTWM7&929rEOMkY6kD-G&h-j81G(E(EJjepZ)4f zoh-tcIofUBq;Jbe5kz%%E@+!g)%6%E^@w_{R`rr1Am(05DJPT$C%w_g63 ^4+A8j1-= zMsO`i{%)NPiGzY7gkAZ@;=lXqE!d{wwfDY`zu3hibn=D|fCMk3^E^SaHMCpJYLqUI z<|b^wHjsP+H%*$y+&`pLB=<->uNW%vT0iXmZu#u{vq0k!L~FJre6*5F!)xohyuV?J zaL=^>dgTZu(Y?{ pjfKrF ztZ_;aL4;;Xp*RubYh$e5c=iBnn_l+-9B1_%nv0XM7937IXAe`7FnfWt{%h6Pf309$ z>P<;If6S1Ag90ViDxr-TQA=7Gk$9h0{2r+}fOj5{Y~p(*>JWf$RaTk7`Ic+G^nPG6 zk+Pb@ORUg#_I3SFV|Sa4K}%r0ukiEkmqb*O<6}1WS`Cq_tjkE76sbU!1Pu_vPQOi; zwQ{VNMLAU5#>(Hfa!~|2D{KI5 4jdG{CBQdelb!h2`=LIt*+!N l*T^zn_ zpkNBbHrV}s&$%TP@1Dd8U3NC-FWt7E+SN)~b{3N~`$Q+MiCO*juddA4B*x~)#{Tal zpsI&l340=uYE^Zbd;jm0-x{Bu*?f~Mn4BR__j7*WAZNMz_!Qt~_qywR#i+`{K_ p$jMQmdqa%MH!6X$Rv_*u*+p_zcj;3)^I(U1vfv<%oG^Y~4si@ONy1UOS!s z1JAIu?XmgTcfI|h0-B=LpvO31TCDq&D(eO343^2AZ<0=6cm_w~#$UJETDi|&xPs _T;|UXiN_YkY^ zGL1U zbo1_c6Ik=N-}Dj>Wu~G|$XCb8g5)Qhu;!|xBL|q529EqlZoF9wQC>piXy#xF{HOng zl*A-nTfE0C%c5tco}O?zdOw%~qf#m*^xd_PY;~2&rd}MZHU(Z|322fO&JO$3yTn*b z2AjG#nlBb^TSnRj$CS%$oH{{s6IQXZr^$`05sQu31ZE1{@mtwYbd#>DJYxEWUDh)G z#aOau-Mlg!+fRO!Wx{NzSRrj@%+%6+RL5Q@w DH5de_ko^# zJV~4sajw;&SEvvV#Wxx2v5S7C8>KyigjZ4XBNp&Y)+Kt^u%W*G_rI{B(qz}AlAHn1 zZ=KSWqk0l@*R%R_!O(DzxlMMb|NFV0+#JE$uefuRpEhy0pBEpRAv(EjpU-d1Spkda z!VgzT)jFxG2UgYUK;~uFP}$ANruBq6W0c1%aNhMR{-036P&~E+N(9As u)mEwcRc!OLgzX!rmH8|+(RMswJWT6L-H0yGU)@@~Klt+2z5LbP*0+f2 zJfsZy?c9xLCHVxZ%JT+XX0=qJwA<3#f*P5CJnn1rBO^^C2lwXFOx*k-ilEVV`QL0U zh;K<}`4NxTyn@WRO?9(Y`KvmjC%(Hw_l3vAW49bpYj}}yNY#Re=9PL;$JbJ>zlPx1 zlg&RSktM=9 gn5&VQ-3W4g0{lrtSo?vnf85A;uk!@T!rktF<@xBnzZLJQednV!RJa_+hxn# zJ(L~>LEtMP;{2`IQu;zw6zix&8HYq^eMSvrfZGg&_C~SJWO?K$S{GS$iW??o!`Cl6 z0TkS2#bes+741^xsJPXBnOqA1Yrt)ROA6*7ZzP|X)d0Y4bx?53I9O2-{dp(R=}SBk zxSnLZQN6zoXNXlW;@GD}Sf;J_Z(`Ne?<-g4m%p<%WqS%6uV_|09T)WHzO-_+MJgI5 zco} )9%(x885h^>TFz6H_D3d;vS?f*Jo&%DAsugqyJ zXw51_mpiywMA= 7nu#Z4+_!ysLI0+JMql2j|kS7nw3) z%=GAm^goz@qzg(Bii3(Bl>FiX`?iHeg5K-b>-%s1Fz#B+om1oV{&$~V-etcGbu_)IbtS_I9isiF{%wE{^}Hp9(7gIO z;93m)xK$3ft9-@~0QX-Zxb`zvDuoOKlFc#h5Z13;DI#Z+{OD>vcKb7G?n*2Q19lSL zi|? 8La~%%;jX(%`grYXMOSExTt!dAi?1@)u1%-$$W`1fPN=n#AO6=M zp!Twd+lr%U(3@M&AMX5D`A*Sb803#y=~U(vlZ+|cI#QNrJ}KGgQ{Ihxj*Q$~9V(HX z x!Ecy}ZKUKxnJ41EV#=c(&DO8!Pp#s?lQBsNQ z2}y-)g3%B#x~NMtBD(gas)|^+0|rV3{9-& zhQ%sqeq3GEyLSt5if@0uQa;R1$NNr+qA4z+eYWpcY789zvt23QtC4L=HSBq2dA~Cf z8b%VIY%|iQ{3KL|RZ+E$SFyJbMG|cvFL0Bl-*ehWK93Bs_7%1Cr)P ba&e7ZQH-n|WM?Q%t>mo7Lkh;FdUERAZ$EnF?1_c#AQS`*4sl~^_hw|TV>^;^g{ za>h1`&Gm&B!kW8cRW{8!iOvc6YFHAws?HXDV7II-sKkB+aol+{LR^i=^vvKDt+(8^ zR_N4w2<8>MhCk1_u8CTNUT%D>oN>uq8~((T2xK0Z_MS=4y=R&r3LO%(4kfmDQTip_ zNOr5=);cuvo{TO%+0mLv5c5pB@6X^DE8?$wlqA&1ky-xRaXOdupSxL1J3b*6g3Wr4 zKaaKdS8o%zns+--q5SXGg)EnDC_F7m{T1R%%=(4T6Cx_3eM*r$wrh`W&R8w-U3d8c zSw68%=?@iCvJ} I@ ?Gg8V zIB8o>Jeeu4l3A>>`ClD#RXxl!jV#h{h>ar>4MW$0JYin coS$6904xF;cklo1u zd~r|tmR#(K4WlmBd)nWSh=qRR-R=HG>%Bf;3~7~v?XeC76v9k ;(q+W!;tB5u4&(gA#ObVo?n2|mikzm6mhtp2k%Uj6XY6UCXOovz{l&>=`n2z zwpGsR(`*IvX5q~h?t`pjB!UNpcrWlNJZv2f{#;J}Tw!mtvJ^^O n mKy=9_C12#DI=3bpne4_@U7F+H2}6_k~N=9Pmgd_d;{nf;WJyq<_E6emDXAy+^k z6oZuucinr9R(K~ki*L?l<$3vK3cbzB+R9%kPouSh6wiva{b2@v5LcApgE@(}mMWB= zzzo!B31W*cMbLVctTj4sDv)CIXvwC?Kd<&vLKD!TsqJ+`@bxer0x%FwX7+5|^z=Pd z=OQXvP_V1G)?M^$8*|RFV5po_XwPFWozJIE%Ag}FkMe}_BcJrksAVx~z&GKxU-E!D z((VNyRQ5fu7IyzYs{JQO-sapg34~T=CHb5g6nyt`E!wJ$ld>#X%`Rx=CD |?5)yl%h{=~)ob(IKbJSIJ2yKo?cX`n(CNM` z9H*g0H#OW((+$J(hpA{EN*WE2(!#?N 3imWyq3iWsGR;gM}aD*=_(vjOAQj88Z9tgPS&JG0hv zml}Q<2XD-1a(sHT!yUa1b&k}_dWi` `>fXaOal-Um9dRF$vhY zrufS+^RNE*EDq|>eq!Cw7gr-ANu!Kv8K4BJ4Q@D>wkNs2Gny7}HK}K=Cu;4-f}iJ4 z8`aMG&pf;69g^aLXweWR6BNJ0T&2KtLUUUWOu4x6U`E6$TXOn`(yZyP)jhkiGjz6{ z1KZFuHf`m(si`PIgM*1BGWO>7=uJvM_wy*x Q^*Uqkq-k0d$|?pg)xO0czV8A`euO}l29*eFdS+zZ@f8x;uYmJ^*{&7Ft( zuIr(g`Ll)H)1p$6ukLYJJMOkv&wsYR`;|ZHsi!WJisxykZ`7*KJuj13hu~Z{SS`17 z-bcZR_bDu+)|<9vCAKGAx`zRWIUP4gwo)Y<%nx7Mw{voBG;1(DIB^~KW4}i{m^YJj z_$**xdN84<9qcG!-_zdN>SwR)cT>;&ko_bbv}SXsa@+ISB=Js1K(^D9uR#{j4M?sc zkZMunvWRng=*nR3ab4IWIi^Hu>VzPz*Ip+)<|@~_Yz!I*0ec3km~EhL` @>tx>BX341I9$KtO%SFTAIAnQ8)Tgh&7xjZ3Fn>EB5?;|EzGfI3f_U#| z=gnZ6dKYUmFN*Q@krot+ifQ-hz_s3^x$sDO6Kx=GEu7sS-J>>YJ&V%%2@bSg_j}8E z9+AhQ%4WL`RuaUqUF84GBjBI%I3)7D>s-4U&s~h4n}QJT+roqAZ= zJKmU>SH7FAN0eqX82)$v#5Hmh5`_{7dCMjKcANXh2l>o(2BL77->CKVxZokrz_-Jc zQV06VnyzwEA)ZkNj1>gTI^C3Z2-am_&r>1mJRkiQbbv1Tz#&anC}pawHOH_brdgPI zz`pZzDv=KG6g+*7zGxtBIx_F$2r7Y9nFX{-jJQm33L@Rm{FQ}6_Dxoqs(do^N8vZt zBW*QL=ppP=ln%ip{kqsQBjH)Ligt-dGA0|!$M!K%Ay4Do%xcc2(gwO_*J`ZQ `) zjBAd`_USZ33fnCug0kf^8?^7M_fI|au3uE?=G3&3Fw6gn>y3((Fnm%IJCeg@ zQK8J_Vw+$7mLutHAJ7$IpvghQ(>dk!`hCiXSgj2bE9dI)yY>huO~zkZ&k E=TXriB!HmAD54KPw^6Yt+u#@t55gNW)WuP%}DLTS6zlxn>9+H zIV2z0XZO4G95y6La($5A@ou*etv5XRBDyUx)~X_Hz+@uR56_=?z0atbs=!6G|BmLo zrPM098+WQNJs^+>>|T0u@W$N}++D~tLr&Wk2aT|$_8?dq%v&Tu6Uqx)0OW1Kj zO45xe?lJkM+*4eq{*sPc6F`I{U@Vak7?SNQQNQI71?iJ->ojhGsJ?Y=;MsfWe z1DWSn{NuPOtNw40(KV*oH?KYRo*mbu?x5QkN(T*S0!D2_PK38vroi>GqI{ ;WX=n1dLv;u9#qWp{O>uz7j$Rx#U7%dJ$-_c|=*ao-kTHvqK2wiP&B3 z!JgS CG!PI*Dy*m2E9%Ms77I|CP?~=wVIE&Pe ?Mzko$YW+Ph#u&yj|6<};p2bH-AoRu{55y&dD^ z(uA`5T|q8)ZZisqV$DkTGl>$)qA84>1kE0}W)+1p$H{#1AlGXwOWR%kqtlQVGO;*_hU!=J`tRo*eSPDnKuo$Zl*}8>OoC<}sMa`tSOQ-~t^B zZlyI)X1Z%LJBPEK{Q9X-$*n?$QjE=rq|WJOK%+YoExg|Y#G*%cj?k`d&l;~MQ)Bo z%1{tEs5k(ARsP|UifQD*^UxBIPEn%71)4LEE476`Z2^M NAcwa-CASVw^8*4Io2Kd;Fwncv)Gg<||Nb()lPNvR7Jl)=vCLQm4jpjKEBg^AjxZ zI~4^}8jLd2i+mwvd`un#y~eC+VGMYO`7VzACzlYPr_tIu9-Hv5K-qE%Fn&R^&d}3Y zRZ1IJd1c}5H{usLBDjiCvx}Y37%cHhM;#;3hb164ws~7(CKo^)Qrpr}LO|%`Wk7i& zE4Fk*s|{JZAitCOaJYE8B>g=RR9q9u0aHOM&HvG+aJ>A+qbrsM5V(tHN<7-&t5JVY z%l&8HU+|%2B>Ac&?^)c%H@Mc@qJAsaY>Jx10KHrJT%7Sl{TW12{lC{6%bdbi1t(3J z7D?~5C9Qwpn#MV|Bw_p?3!hg1jhzYR-iU3Y9BE3|3}dP*AYkpGUEcot>bl=pdkTW? z_{3|Leo;?Nn|nzVHgb99B*}qe1Z&kPC|Sq|g|%9gV^2K?bA6ns9EJuFxt!?Q^KEww za(!iv^2TefnB@4m2F!#AGRZ=vO9Hqyv1$_f)ASw%32?d;ti>6xaWm@5e{;flUZ+=< z7VGw7UJ|r8e+52Dif(mJDE!nyW3Ey=-$0lB*rG^w88UCTUcrkgX2W{mrOvXT%ZCP| zqWck%dbc<|);-w%spj%Tu|3agcs$QAEfIX_x1!ql9R~^lyyqa=B$89FBE2XDn45mC zxof;;N2DHp9TxkHd$reB-<05`Oi24$S|zdSNJqf^ z5-3;PO8^0wxKaXaN7YLQ{qIseWJwf6tU7WuZYvt6+0ai~&ll}G92W^ubq)TB197hs z0BbTJ;CUse&GEA~=5>s6u|;7?y~WoLLe6vdi8d0ZJ@am%L_fnoVtx0m;`e)TkX8S` zvJ1y@2oL}!1hl!*i~31px<87Y9rC)l17+VCU`}QWDkW(!8Dl GYnEs1-8{OYrF`#h=xdq-t`^Q#L=JPv!6qB0W>c=h^syF4$Jo^m{t5y-3EAa zQQm9`uo^5OaGkF*Ky*{?WAT)^)ENB;I$X NjdPbyw{Xr}%g0Z!x*y2=3nLEu2OSq5XcB{S9z=vJr%%E2d zaiRk5e9wP-^nL@CcGn%EnM-&-t=#}HVL(;k73Ow~&`j0<2$-RkGvfhlH5f@pdlYx7 zL@qy$Dr{(482e&zZSA@M1 )_!hz8>yfpEnj*hfd$U0L|y#hYLn!36> 6 zc->ZaG!G)B2f5^!-|)wJ33+)x-e=kcx#On!|Ke>5 uj$mHKct=^% P7bXd9!iwtA+gs*b~Zq8ya+ju z6%@toXQ=|HYM`ZSd r^Z @gZYdK~%d)1Gf_r z8Gw_Ok|38u00;Wchl2P+7D6S4T!{iE3lehm8JI9;782Bby70tAz!VO&fx35c&HmM; zL)fcs;bVmYlJ- a4CzpU`VT`kLp$&D&SNpz zIu^{|aaamuu0olDgvOsC)=UF8ct5rjPvQ45Bz;zD&QWm=$XdVxn9RjMAG9Ab;+0ri z2YKifCQ`HsQqW2%jtiHCQ?~f&`kQ0|QyK_RbfJ5$ 9 ztm8#6Wj^z!eY&v(V- IZmqxz%F?L0ws>t^nuSD0E?{i@gl2g0K~Lo&XONZ)+<*sa9+Sa zb3mR(Z`6C9^Ua9;GKdh7zTF@l+^&jQ9jm1-WMABXAx;#LW=y`*rvQ-V5^QxqrRm zA-ylTDuQ8f=P=uJLY6S`$U*{m^0~EmOp1d7R1}z1$X;Y(*u6XVuD=fa8NOJy75crN z$+=9m(pS|v f47C==m%N;h5O=v9b1pwpeixSe>rqEoxI*5I3Y)Rf-)O+8 zBJR8Z&-(yEJ%q>7)>(;Z^$*2*)XzjT%vSNyy_b(V`rJwq`C7U^t$%aZoH{FEfB=3U zwGHx8_tANBoMaOx
kaP$q-b^Zu zm^G7lq+s&3`Ixu26M0)=y#^(W!uV 0B_FEojP)Q7QO^M=112f4F0qD? zohMW`V><5L%iB?sY`@GfVXwDGru%|I iisGf?aKX)*!Po!LN1F1Z_^Ibfzo<^BI{H+8yr(um0_tH<`auaQxWH?ncJrg2-QE z0!?Kq)E|%U54fT8kL3dNBS+8QZdXH$7lm#=UH!+tCI#@fQkj~6Y8&*lO+fH^_-XrY zaS)uqnrQx;`%$;_J*p|AvF|_`lc+nVMAg8P-{NlQhR4lP&{_VG#vz&BKz$QC?PEgO z&-<2_{>x3QdmorGu6t~h1^Y`nsA$__v5&wK7|UY;?zh$O1C=s0676r_RowsiELZy3 z(to%?Y!=umc8w{*&_+zNmwTG0YMt2x)8)1NxVj_