From 4fa5bc7f156cdc527f40ff3cea75e78951c1083b Mon Sep 17 00:00:00 2001 From: Francois Cokelaer Date: Mon, 20 Nov 2023 12:04:15 +0100 Subject: [PATCH 1/2] refactor eda / doc --- README.md | 121 ++++++++++++------- assets/correlation_matrix.png | Bin 0 -> 105398 bytes assets/outcomes_repartition.png | Bin 0 -> 27051 bytes deepehrgraph/dataset/eda.py | 54 +++++++-- poetry.lock | 201 +++++++++++++------------------- pyproject.toml | 8 +- tests/deepehrgraph_test.py | 2 +- 7 files changed, 209 insertions(+), 177 deletions(-) create mode 100644 assets/correlation_matrix.png create mode 100644 assets/outcomes_repartition.png diff --git a/README.md b/README.md index ab62e1d..b6f05bc 100644 --- a/README.md +++ b/README.md @@ -17,70 +17,111 @@ ## Description This project aims at demonstring deep learning methodologies for EHR data. -The use case is to predict different outcomes for patients in the ICU. The dataset is from (MIMIC-IV demo) +The use case is to predict different outcomes for patients in the ICU. The dataset is from [MIMIC-IV demo](https://physionet.org/content/mimic-iv-demo/2.2/) containing de-identified health-related data from 140 patients admitted to critical care units. ## Installation -### With pip +### Install the latest package version with pip ```bash pip3 install -U deepehrgraph ``` - +### Commands +Display available subcommands: +```bash +python3 -m deepehrgraph.main --help +``` ## Dataset -(mimic iv demo dataset)[https://physionet.org/content/mimic-iv-demo/2.2/] +The dataset description is the [mimic iv demo dataset](https://physionet.org/content/mimic-iv-demo/2.2/). + +This dataset contains de-identified health-related data from 140 patients admitted to critical care units. The data includes demographics, vital signs, laboratory tests, medications, and more. The data is stored in a relational database, and the data schema is described in the [MIMIC-IV documentation](https://mimic.mit.edu/docs/iv/). + +Note that we only have access to the [hosp](https://mimic.mit.edu/docs/iv/modules/hosp/) and [icu](https://mimic.mit.edu/docs/iv/modules/icu/) compressed files. + ### Generate main dataset from compressed files + ```bash -python3 -m deepehrgraph.dataset.dataset_generator +python -m deepehrgraph.main dataset ``` -This step will download the archive files from physionet and generate the master dataset in the `data` folder. -CCI and ECI indexes are calculated and added to the dataset. -### Features -In the context of medical studies, CCI (Charlson Comorbidity Index) and ECI (Elixhauser Comorbidity Index) -are tools used to assess the burden of comorbidities in individuals. -Comorbidities refer to the presence of additional health conditions in a patient alongside the primary -condition under investigation. Both CCI and ECI are designed to quantify and summarize the impact of comorbidities on patient health. +This step will download the archive files from physionet and generate the master dataset in the `data` folder by default as a csv file called `mimic_iv_demo_master_dataset.csv`. + + +Several pre-computation steps are done in order to generate this master dataset: + - CCI and ECI indexes are calculated and added to the dataset. + - Outcomes for patients are calculed and added to the date. -Charlson Comorbidity Index (CCI): -Purpose: Developed by Dr. Mary Charlson, the CCI is a widely used tool to predict the 10-year mortality for patients with multiple comorbidities. It assigns weights to various comorbid conditions based on their impact on mortality. -Calculation: Each comorbid condition is assigned a score, and the total CCI score is the sum of these individual scores. The higher the CCI score, the greater the burden of comorbidities. -Conditions: The CCI includes conditions such as myocardial infarction, heart failure, dementia, diabetes, liver disease, and others. +These pre-computations have been adapted from this [repository](https://github.com/nliulab/mimic4ed-benchmark) specifically for the MIMIC-IV demo dataset. -Elixhauser Comorbidity Index (ECI): +Categorical features are identified and encoded with [LabelEncoder](https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.LabelEncoder.html). -Purpose: The ECI, developed by Dr. Claudia Elixhauser, is another comorbidity index used to assess the impact of comorbid conditions on healthcare outcomes. It is often employed in administrative databases and research studies. -Calculation: Similar to the CCI, the ECI assigns weights to comorbid conditions. However, the ECI covers a broader range of conditions and is often used for risk adjustment in research studies. -Conditions: The ECI includes a comprehensive list of conditions such as hypertension, obesity, renal failure, coagulopathy, and others. +In the context of medical studies, CCI (Charlson Comorbidity Index) and ECI (Elixhauser Comorbidity Index) are tools used to assess the burden of comorbidities in individuals. +Comorbidities refer to the presence of additional health conditions in a patient alongside the primary condition under investigation. Both CCI and ECI are designed to quantify and summarize the impact of comorbidities on patient health. **These features seem to be good candidates for our prediction task.** -Selected features: - - ['gender', 'age', 'n_ed_30d', 'n_ed_90d', 'n_ed_365d', 'n_hosp_30d', - 'n_hosp_90d', 'n_hosp_365d', 'n_icu_30d', 'n_icu_90d', 'n_icu_365d', - 'cci_MI', 'cci_CHF', 'cci_PVD', 'cci_Stroke', 'cci_Dementia', - 'cci_Pulmonary', 'cci_Rheumatic', 'cci_PUD', 'cci_Liver1', 'cci_DM1', - 'cci_DM2', 'cci_Paralysis', 'cci_Renal', 'cci_Cancer1', 'cci_Liver2', - 'cci_Cancer2', 'cci_HIV', 'eci_CHF', 'eci_Arrhythmia', 'eci_Valvular', - 'eci_PHTN', 'eci_PVD', 'eci_HTN1', 'eci_HTN2', 'eci_Paralysis', - 'eci_NeuroOther', 'eci_Pulmonary', 'eci_DM1', 'eci_DM2', - 'eci_Hypothyroid', 'eci_Renal', 'eci_Liver', 'eci_PUD', 'eci_HIV', - 'eci_Lymphoma', 'eci_Tumor2', 'eci_Tumor1', 'eci_Rheumatic', - 'eci_Coagulopathy', 'eci_Obesity', 'eci_WeightLoss', 'eci_FluidsLytes', - 'eci_BloodLoss', 'eci_Anemia', 'eci_Alcohol', 'eci_Drugs', - 'eci_Psychoses', 'eci_Depression'] +### EDA : Features and oucomes analysis +Run simple EDA with this command and you will get: +- basic information about dataset datatypes +- missing values count +- correlation matrix +- outcomes distribution + +```bash +python -m deepehrgraph.main eda +``` + +`Correlation Matrix` +![Correlation Matrix](assets/correlation_matrix.png) + + +Here are the 25 top correlated features: +``` +| Variable1 | Variable2 | Correlation | +|------------------|------------------|-------------| +| cci_Renal | eci_Renal | 1.000000 | +| cci_Rheumatic | eci_Rheumatic | 1.000000 | +| n_ed_365d | n_icu_365d | 1.000000 | +| cci_Cancer2 | eci_Tumor2 | 1.000000 | +| cci_Paralysis | eci_Paralysis | 1.000000 | +| n_ed_30d | n_icu_30d | 1.000000 | +| cci_PUD | eci_PUD | 1.000000 | +| n_ed_90d | n_icu_90d | 1.000000 | +| cci_Pulmonary | eci_Pulmonary | 1.000000 | +| cci_CHF | eci_CHF | 1.000000 | +| cci_Dementia | cci_Paralysis | 1.000000 | +| cci_PVD | eci_PVD | 1.000000 | +| cci_Dementia | eci_Paralysis | 1.000000 | +| cci_DM1 | eci_DM2 | 0.971825 | +| cci_Cancer1 | eci_Tumor1 | 0.949788 | +| cci_DM2 | eci_DM1 | 0.931891 | +| n_icu_90d | n_icu_365d | 0.927516 | +| n_ed_90d | n_icu_365d | 0.927516 | +| n_ed_365d | n_icu_90d | 0.927516 | +| n_ed_90d | n_ed_365d | 0.927516 | +| cci_Liver1 | eci_Liver | 0.875261 | +| eci_HTN1 | eci_Renal | 0.815725 | +| cci_Renal | eci_HTN1 | 0.815725 | +| n_hosp_30d | n_hosp_90d | 0.807012 | +| n_ed_30d | n_ed_90d | 0.795026 | +``` +Some features are highly correlated which could lead to poor model performance: +- instability that make difficult to interpret the individual impact of each variable on the target. +- model instability, increased sensitivity to small changes in the data +- overfitting -### Outcomes +We will try to address this situation by using feature selection techniques. -### Data preprocessing +`Outcomes Repartition` +![Outcomes Repartition](assets/outcomes_repartition.png) -### Feature selection +Based on these first results we will try to predict the following outcome: `in-hospital mortality`. +Note that we are facing an outcome class imbalance problem which can result in poor results while trying to predict this outcome, we will need to add a pre-processing for that. +### Feature selections and Outcomes class imbalance. -## Use Case -## Models +## Models architecture ## Resources diff --git a/assets/correlation_matrix.png b/assets/correlation_matrix.png new file mode 100644 index 0000000000000000000000000000000000000000..5782979ebbfc40e571f73617991c09f628a0411f GIT binary patch literal 105398 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�-IROQtHz_^BF$5s|WfqAXLXDukKlL~_CA(us@NDVb;V zx}4Ik?4XC0Ul>i?Tr48Fto@F-jF0(mb4xF);7$dRq>!A6r-G)YhU1sG?89?5%LeV% zR^zIB_cUpJsbS?^&RD&oejmY%-t3Ib$Kgnw85ywbZyk8{a2TmCkGjXyz@t1)6*LVO zQ`n}r5=k`FhRux7=HIjF2BC>LnU4ooQuW^gJi7R@z(bJ7=BElxO(>>1r?CEze4}UxF%9n#G#jdY*hu_U}9c>!Pdj!r9$#^_9lu?7_W)s zKP!Z&)Jfa&If98(#lU2pDu1nImNj1w&eDj4QpO?6-r8Ne49RSKCOol+Mge& zG`JCR^XvoGQ^w!0SSgkT^(!<-oCbD{t70C>FmByZ!Jmgw`ZNeT(*O-Rlc?#sq1?nNBS_4W1Ac3mr1h#qwZLCzpzFdP>} zw(&Z3KF<&X6=CflT5pInDb2N|?aVSO%KPn@G^=9=8KE&6CX)UUVl6JZaiYrLo&qyr z`b-@;m~BBhB5cya{#lO+1Lf*Qp;E)7sVA9_YhqF*@^;TL^){b;sy8gJr(asIL;F~n zdP|LAd$C5pO#N@M(l4VK(C27MBq(S3x3)2N2dZZF2KBqx*Oj^+C^7qk5vm&9^(@QO zGBopBStYnLopYm+iz}t_H1AKlK;Z;b)AQYi{wA7~G!|j}hySWF6OlM-K z?$==TVG^nUiR>5LBqUY_hHb1>OL%zLF&U9r5DMo~N5C<+0J;dLQAkkS(cDYhh}T8e z$RYaU50)f`+nX#@Au*|!BOn++(*E)0T!)UjWC6+x43oeP$ozW|nI~P%d3@l+FhmJN zYUuSM9gbuXt6vck8V`5Db}o4D8d|b)$L!-F)xv#L^%#Dh4Sa&!xDqp zu(3!>b17Ur0?!qN0GrC<{xd=ko6{q~oH?@7-?7$#h|+o4kflRh>Empm{~wAE;ZBV> zEy%Vn<1Nw>)_&NHygR|c*ynh+iK-eihU{B)UgJWnf2*RI8ZKoqXZ}TYrng-c63y4b_pV*&}-w{lf$nXdU(6$>J4&07v zo9!$Ku|xMf11MK>fy?A5^Jjnm6)Z1=xWZg2x0U21+c!I~gN7my6jC4%ku&zRmy7Bx z7dQf;{r`-uLck??tRQD5e{tLyi|~MAUONTC%%evH{5LUNZ6$CP_JdEzt^yUSwYlK{ zd0Vuo6PSdF(E3|tq(A;*Bo+^T-Pr`jBOKuD8-Q*d~g=QZ5oh_IsfZw}_9kA)KA`s3_&mTc;ryQ_jk{`jYh?K>@w}&qk6n zhO5|alyjPgXjNfQ%N_jSn??fEOi*Cv^nOYk{sM5l7q*(9xZioChS z_s~hJ2}ycm=GE{vWe*F}GXF}|bRD|E1%YF<@;oP#)|*EIznI!Ew9*CbtCd|FZV&EY z9?SW)??CTvUQO=IBg$p0(7w_N`$1Skn@AX6qAF|u6#*?8p62BY6QH1tbyemH8~ zT~n4~j(dBH&83S{Ejb6KGJ-O{4F=y)%K9s9{Gbe@7}#i!U=?hOQkFE?qDv@=}k<)dOm-_ zf|sNRgVaU9!l#T>WQ3Co9@Q_coKo^<#O1Q*JwLlMbWGh1LCp@9{4Dfnd35X+E*J~A zN)2HSCR=IDmZo;B(@;!u>y42z0z4Mj8B*ZCBO5nV#IFK`G)qq#d-=Q)>F|d&qRBqQ z)3dm>ft8LxFIJ|y*8KuxIGy}3mG3zDbn!frK0+vhqx$-ETI(C)CLtm$v@$%@s@(V+LeI|{|pb)92_-IDlR0UqD}y`l$ROCszf zCW#Gqy-R1!nA>j~%)RsuSK5BS49M%S3^U!jlHmCm1J@f@V`~hPrp=o7dg{$O=pW@hJ-F&KT>xm1y5$;@BWJ8a_!GZ%tUjD}<8}+mA`Ew$e!P%$G!J zIeL;V|7W#Lpu#kCBF*1E3y|H;Rc!tH@aaXuIEqL>n^O@>Mtlw!gAk@6RdU_KV;>~X zIB-0EkW?1vG5~(OaUg9K)|GPXKxhQHeAwkZXT(3kE1Iv0V>0^3;Rq4Jge<`9y%qdA z;R*0PBeiMA87L`kVx@%9{Ihf~0c-sIJwg2(Y=VmQAr3H739}U-xo30ajpw4Y^h5Ub z&zdU@-z~3O{A5FpWyvf0UW00?i)KKAsjZH|Kzg8I-#QA*Bvy8^MUmq^obiYG@DY~0 z?_;$^<4KX^F$d!%?eV7tR@Ck3{P1T$=MqtcZv{9LN{2%EHz$qWut*WKugMP0JmZ-3 z@YfRehOGYLSMTJG{G<H zrfSpzo~7OiH)VT~{8)6vpjnuv_CRGps=wacZ1(V2x-_78zJ^!%O~{!Ti+JQh^b@xVRg#X2v=LGL!3{H{0NlgWfr}8a}sf} z(dia5L!8@THJ*_hHx?6kjRYIQjYXjV*&%LSGHe4;I1Wk>v*RqvuU~Jo?Shr?ho|6M z*+0O(c%?f@ZwGlvGL@j&A$I+{W0kDo=-rhfONSig7BM(D_NW`LX|hYh|UbpBkU zna_c}0z@<@aLs#H>judWe8v0{d0K;lB^X=ZAmZvsfvXF2!@-{&ft0dBxogaaE#hjX z1JLLn`aaswGSFUurvp;21t9vcVYEVtgIvHR@gW7dOhCPa&ol3NSgKb}L4C zSr^!I*_`O@&kDz;UmPWq&NveA@IRY~JoPI<5<=BG57ZrAv==Qc0-)0`btYyklnm-^ z@96mTA{!4GyyyjeQzX-#avXTl>LWJ^dBM+Fq*=WnxFf|Wp0@*t9RN5{1h^hM8!~Oy zqPBJ7bS&cda_98&Wy|<84PvT8#?kda_%8bAnKw0Mk2Z%*c54>1v8eu7hDp|-4TPy~ z2DxWMN@Zlg~B1!wX!`$tkU8kUe=zBAvBy&jla^@LT z)g(dt?$GfG=WR#r-ZAw{tSDbX`Z5HW-7AEX%z}Sj6%01ma=_r(st-z8SL?M4C7m9> zTheY*x*+NLYz`<%RF(4ugTtej)s3GRn6MPdse5KywCTi! z4GCE$!Oktl<`QEjt0RSvjjTcT{R(~uh7Yr{nX5fDg0`gY$>}XlKiYv zT0}VSO>JeKmYh9%cA=y%zs@Jphd>Sa8k2BsCvUk+4Dx`VXrs0{k1G zx`~h+xU7*-5!9y>l!U>Yq(tRPT_xY&e5^GE-W>~czxM3=|L3_bH6b|?jtEbU(Mv76 z*x5Zb5`!&onI4YJ5-XL_L1ypn&)i;C8AJVdpGIj037UpPiX_Fo%M?FmFVpM9lHRNe zUP3FMU^g*7nMa>gG}tkjW~nSwclBzaWS~wEJuEtUd_pVkv}Cfr?((|xV-tMzutB+5 z?#3~BLZ#(r^E3@K} z=bPt@Z-<))>Qs80KQ_AKBHu6CUeKyln;JP5B09=6Gz*j{?XE3R=*^Nz4b^$o!cKWF zxOX_iOukLhyW_i-g|XtQfA=cewsdbvPNqnpDi%Pk1RV~Li~F(Mk!7B86d5AG5D=wK z7JKj$8zd!beto`nZ4SvLMd29;_3QeHZy*&RN<|X40pl<@N>VSh%d*+Ig~d*?a<3$$ zq{TgnNbvvKY!Q}-xnF@lWUPwtRXd#ymE5oAQZmt}5+P?`QB7+eU5|XxR zn?LQAS%|q^y&^&@Q9qk%ol{-VAC;*%1>H$Y6V4RLDtqe<@A=Hyjq zS~-IRU-(O>cUM*;9F&=E2uJKue&XZrzuptcK*E#cpsWWFDE#S~>xeXg;qr&GU4BGFLTf!|a z{j0k-ySlpqpIWWj9M}zsefz@a=WG|5rNf3qlLO^Z)uV&U@evBOiHbxt4HEw>#|x0f zfqV7rI7w;it3Ir-4q~m|{4tA%L%Ymt7u){$`0~!CL*%+*H83DNW&vnOtfuRb&_imf zaCoz5BIO=MRaGD9={Mj9S1wOj?2~}97?FRe_R(VhW3~H%sLLP-BOJc1f`F62H}FS% z%CY%=1+N+*F=2kExT7rSE-yI0%~O>K<^g6z!XZ^uR1mGOanmMl$EG~Om0)O@MFG2Z z1KPz^1#5{@gm{ZFSv>%-@CzdoCK12&odFvcQJ_77?0sj5m37;Q>~x+^RV!7T!-kLV zzNh~1R;>54L6KozXv}xv!*vFISP`P*h&}{H##7Mce#&!_B8&%RtKH>-GC(73QyB0I zA(XxbTnsI6E;4(q3%UqB&=&Hx7fDG_Jz`+i&1 zJ9FLt9!zk51$4;Ggx#d-;v445Z4_jnpU29 zQ#yCfW6mVP>&NPOQA%Sh6V0II+=bJrG3{3W3waUjLH)%_+%XU(k>-LtDW?p%`q* z-7SY#jRiYb0|K+v&_xWIfUyQ*Fhto;G zR)ma#FzZWiuRq?@T&+4|u&uDfpTww7XfHge*I+MVK$$K&oJJb0=3&?cR`*afP?*3* z5S!_BbwV)4j*u^6`hl(a%_tH>P$H$U6#}}(T!-aw@Q{oINEG#k4niC3+q8tj7VAGqyiMBo^ZR=C^#5~#p@g*K@( z+k3<9o41X+Q4O0d5wQbY_6y=bw}$j$g9m5XVlR8@)Ttu9=^;PhIN0?uN80|`i5%?3CJzkwQ(1=BxQ|Ss!%JMqQQR+=%|HMZ&F=KQvxUCDeg_TCVF;X)VEWg<1Qj~ni*{!h>E1>fmMUXrOiZo>iu z|4Z5K-}uZ?Hg@j~!aKNsFLcCk1uq@amS_GbemzLVW=1c@I6n5HB^K^ ztw~ZLpqE4Q$kBAZ@mm18fQ#G;4D=v(D$Z=sx1SX2NWGM4r2*B~DxDXpeOIrlh6VmW z`ecChA%*oxai8-wQLb=f2>~YUYXJqaJV64h~cRlRK1%Qc|SP=QQR$ihkdiN z6UG;1ww9zeb{mXVe$ZHVZ0bgB>d1VG-MB4GMjRGvlN^LMQv)>hf+v%2`pTbRJmE(; zW?g4jk)-k2di8*@?@Uoz`8~F)%2^Si8)<4Pob_yuTA=%^TWl?nb2zYyrY3TzzBfeJ zE_Hy1BIr>(?sv7ng?2&zllL=?Kcp&strmI&gE}%VSI+vaIqYR_R9UgK-Py|0$Gp~F zjk`V7D#6G6jF#Q9_Fa*&LP-wt%IUpQNsoQab!aKv?LYL_aM#V5b?DY6`W6p8XAYCC zD@g$$vXG!7hUSC!-fmlA$`>e!3FVKAopfrfUVWpmP}WT;=+XbT6X=wpTgjbG2m-tg zF%7N-M{xNcKTb`&I{4?Gpz`)2{vYEU5fbghT%h6~8gbEWw4H}2T!;c6h#?|WEesyl zbrKCHQ1KUVOG6f;ynp`{nggDE7-g1XFocE`q!U7+qQKUZs@Fc4UG^siNrtiD0I%4S zTYdkBP)2g?Ec<-Q(R^na02s6F?ML>PLGB+=Dyw_V%G#Qg_L8;(0AO!$Rzq1r?T{qc zI#iiIAw=4T2NGDv8xtVr`$*bx$|)6ePjF%fx%4f>^hOy%{0)hK1m31%lp^?nLSi7| zq8R9+U&ueJzXQ%jvi>He``NfyS>vU7zE1y+>8a^Eqph`7lVNKBL>TRZgq-p%Z*F*> zq@A#W#Kz*&vv$Xh>PNB@fQRArUPxJqL6qpJP_~R7hp8miGn;EB?ye3;Hz;}a2) zl$4abkyv!#=4x-8`a~#nZ`TE0uoqm;uqwW(n?5tD?j|<=x4x+o%0-eggku9bROCNc ztW2(j75jBdOUpfoV75*+kkOXNUvVb_n?8Y-0_9o-B>v!|P0g{paCa1gS4G8CPOomX zM#z)a6W@m%AvhaZz+`?u5qFx0rLPgrn#JO^OY<&UoH{jdq)e5>hQpRvczXjU|Jp7r z3xq`3ZPVcnFogUZ%+LoQ5xI5u)b0mffq{X2Ek14$a~(3aO+DzYK)f`B?%-8s1F*Pj zGGg>FBPC^9tqT{FJ)3p=*&fhxsAu~dJ5-X?rf2Qwn8t$1{(q(JF(ZYN#8c+<)7+ zG^2KLD$F9yolE7~NmSK#%^sDk{}5--$kq#i1@@tkfrK!^jDV+t@ZT4Id=w%H#jA6&2|Y{ho7EZH0Y&97d! zDPII4kope{<}cs~okJn~8NmaAy`RM0MdAj*5qe-M#pmYRWm{`2E9lqpFLtG?2pzzC z{uPtrh>PD$s9<5wOk2jc7(7-KGPeDjx*wh&yy8GiuOVEKkydB)8ng#8p|0W8WfV+J zND%%4=o1N!K(Sa67{&QGRES-hbg1`bBaPuFrmOW>WKbwVwB`85O$_oce%(*9(_w$! z3soJ7_afXdq>`78H$gJB9;pX-yCB(m36v9wgVzA*1zqBsK9=6*28_vdya*TX_-|>s zqD~r`y@B1q`rdPY0VgMN#So+7#2y04zR1oF1K67$I$&qoi%2dX1JA%fZerN(X#Sal z0nEqw`TgKvUGI6hEL(!`g}KpN)t4>hR-?XH(V}VE7OcnU3JkbU5A#dRZE*Ii9j1rL zA8vlBXdWq6+P) zf!}C8WpWA3dhq;CLFC;|g%bI!!%ZcGZfV|56g?Dht|#Lz@R`yWc#Fd)TZgzL2) z@iwn;PPii|Wt%mAbhoX+E^%*TIpjZ2NxP`pC28uHI9)VrIz8svn%yNm&%JR^{a9NY zMBuA54(nJCovC+NLD>^;=EKSMRHJn2t?tpcsg|Z{Jayw+yIrUjwG9NyUwl7Us1za! zh29LygO#@Zt=3j$;dFzx$HyJYD~gq}s)LFYhKG})`A+v%FM0@V_Re?%s)cgy_~AB3 z*VI#!j-mSutUs2Wsj5o*Q)<{!D8p9QVx_)C=Vr&%?-&am%`)xh47y>%S%c+kbY;eM z)<9KKI2~;C_;S)eIoqlfFQKRe8&!MWg6Y#iiL=|=Y(`Ii>cu{WSLtHQwd-aO^4Wja zS)5$G@n&q-&uV~Mx}&RcH+<_zD=ZLQrzKcBK{3>Z>eg+!mUpPXZ|0fH`|RGXQoVRqI54$0GG$Mj0K`x)TbVDUy0bQI=NzS_K;HO{1$1#$AI5ZN7Q@ zigrdunLOX76J|mR9nq0ltFB%sl-$59b3O2|cdn1Q#iWftJp8RYBo4by207*_-V_`$ z40D#fa9*1;M`mQxM3eTN5l#JP8w-4yi*HBr@n^GMpjyaMl z-UH*zON=77?%nf355!Br=tKn!u`TfsaZI2CZ7tNGqHF6JP0z1g?rdAy0z1zovm(=i4xId!7RY_W>-q>jdus~@y>xz7ZXH?6TX+L!VC$)(dDOM|pM(VdAMhe*10c?gd46@`rqU_wL=#k@Bh*OPy~bBKG*0gH`~0_CSl*-)pRQ zh2x<^WeZgT-Jm9b3Vsi%uKu99hXQ0fD#)4gbMd`dy)R-_jbSs#>k{$dH!WC{dR2?5 zq6=~H3ACN}>@@|BL;B}%8uy-EgFG-I{~qnFu7Y|P>&g&xJ(H?L^kPkkB z#dh+pRWGfse)j5e1BOJ%y{Oe_j!64BOl$ohk0X(a5d=So;g)nFNUrQu@g+t5F>xYLgQzQPI^MGZqb6C+`hCB#J|wz#@GfMtF4^7_G}Y-W4lNYuO&U3|>K6y1S^N;EOUGWmH)>!Tg( z#bc7+B$=HP&Z%u{e4`pRz=%FcH86@u`thKkrais$P@7EoI}@Ils;X`Ndv@*!Y|pjJ z`!h^4`VL3b2@OAyo=vZcrRV+D*(2SWXxEb`?xPv{HaTR)ia;+$eD$XXTBWruQzinm zikHg8O0=chbPHvoi#=_e$kiMkrtFbg`L_6wSVhQWrzF+D_T~m5>#q)Ml;1-ELmxj+ z-tGDn`$x1!e)S>$thtpX#f1(gAzeEbI+q*^vu-q#qk+$Tw%q; z??d5<4G*Kn*Ke!Ji#4*LB`*M`z^$%;N#BrXhOms)u${b@7J4T%RR8OCNRM)Kr*%*B zo^Y*x;uo8~^WMVjgamU#o*B-vBVF>|Ol(d~zJ~JEtV2Pu&0ni##xgC=r!&Zz68>|h zw8J}4m~fgGPArjg1DR+dav5y39_ONTJhIsQUP)&Lgu9Mwf@r zpK~FXjs6RLcBDV=0MyQ@&z@C1(c3}t?NKRBj!+5(ecz-Qfb@qAeue}RdpgH;W^N@8 zQYeAMpWVc9iCyGRtq3y#!{tS6?uShmQ5$Q!c?xCLgq>HS8TFiDgn1ODN-RuXA;Snu z(rfW$yt>QoZC(2&ol|R*595wwzF@_7r=QEIjlnT4MKTi&;oLE~LeWQIR>koH>3z@|mDG)A_Qr>0j6Mxq^?^ z?hAW1RlGr&W;&tbZN0mDN|nn#+S*-uORYG!N3{R1yz>e$wcxyYjceh9kyeH zRSpM)n_sYZ6RXHdF4m$N_%BLDQbp3|4DO3w zb$4yKnb$BW?fR&qw&_En_4LEF==TL;c>DyhE0HWC6Q{^+azKETY@sS0CFP5ZocokX z>syVH8>~;n8x!S#10&9ke+Ca%=xK0zk1QCVVNlT>H#0*ulLP`=_<~}hqt|WRIA_=S@xbqn{Dk>@}cRC=-43pYZ`(7i`qy*Vq$H%zkn-53afPS!1r(R7>?JGvO zogw${x9EtIuSNeMsD1Baz0$|`O&LyEItfMaBNCPJBYYY7c>wLb0tRq9Jlqc&6m0QG zut1R8Tv%vSXem!68e5?H@WTDjiev0rpmx1@(g*Q=a#1O1xj-tyh7?srPK|T&CVFar1g=yb98G-*GZZ7~{o{)|q-W4|h`;KRPBT3m= zS=vr=;3);g#FXKtQtm^1&THJi7CV!1^kH5)FhGiA%sbtBBKv>-ToQSn1u*v%=0Twf z5gtL~2sMe9q7a9+KXz;eM6PEMbncNX3uFQV%9maVzRv5ho122U2cbDaegekfPiI|E zoLEP0r2F?5Vc%D5AGg!CAJ4<2yfMJLFtW0t~sPT&13&M{`pD3UqBa1hUzwdvBYF!!Vsp{ zoGZKWyIHnPd(fqA2+fDAwn{;XC z1gS(IQ$Dht38GPZ{;T(#o-(KRsAYJd5eKwR>`mkarHGp{lB?@1fI-8pXp@ z4Bn-*JRGrxVA4pPT$+a6dhfB+xrPX>0I80>2?0wT4H*(7x*#lUG181k{vYUXGWZas zW7Sy_d`kj671>9hIbP5~qN=EVQ~8#g{YiqMp(W^H zW4%tsq-Pf_{DA@CoF>g5&`J@=6Vc9>L7g_!F>d~VMjs`V^;h^s!p*HLVm3WdY46lX4{yFonJ+8 zIcj%Y**-?8xwG(LJm?R#glQ<(jT$8-7FVw-hWr8sNDOuUd-}ajL>MKrUu<1kjE{vP zx?y{s4k~HqSc-IjM#Z0mkAa{)$)zUA9zCgF#(vV z6JAZRaHqHTva)1|B^Q|+eEfkx*Hc`^?C>%Nd-sBy#7FJ?&R!%+7UMlyf{HnCG);ad zmp2t~4~~TddwNLMzS%$AWv{s-TH2KQ(1=U-!ClVVx9pX7ot$*=OO!U1-BCZLRoCE3 zKPW{tnDSTgu{PRyVWZEplsgJ>51wibYhCLM@+*>YQ*fYi1zQ_64<+6Xd=eJZ)KnzX zU?8*6M`Wk<3g)$+LQ8kQ^&h#r<#ey<2HSFlx%Ay*OwQ#BxON0w^o=OyeAIjDm(El6 zRvYEhr4L0r=Pv(F(|Qu@mWRROfQJJkEM#+P!%OuEA*U9$2T>Oz6EzpZMY3W|uhiPNy9Xj(b2l(J{E?Jf~*U?#Qv zf>9Q+EN>v|FJd??q_Ra=TW+IxHwD6go2tgg zni}-I&&?9)uzvwNzSVAW+uUP)$GqVY1l}}gHwT|I`$R`Cy zJ?GQE2P)M=_5bCkc6zb8sgQBg`}sGHVNZ}RHD}c!DbAgm9Fq)X5qMr+J!?4VzD|HJ zRSz9XxZ%`xTjhwB)-@ak!Ft04QbpSZmc45+F{T%|o;Cj(&Uwc8q#{6DQZ)K&=TfGY zunEoX$4Oen4yK7=;!Tr;LYZVKx4*cUts4|>oIBMZVQ9J0N48TzHLP08c%#oD8LhPy zqpjNYV~;p0mNUcTRMWes>IED8*mV?(ObM3ydvU0);(us_Hmh7-jS#nt(sR) zYx``pp+e@Rp542NBOMYI4jZ5S=sitYS>2i`%`7>S>XLueZ#-<=RK483I?(li@FEAk z5~!nn8E5=|D~1g?r+5g8H}`C!slS!C3p-z{64w8A^bB44{(()5uy3k)f)%x@ldDX^ zf-a1=pG?E!rt^90=U-kwqUX_U%y#mkXjEsF)QMMf$WiAuP90t(iacxJ3I(PjOzgt% zJ57wGXWqoAkM|dn>{uA95YP(|K1obMgy`#j7-gW7dGY4WymM*1C|!VgYR=kT2HLl0 zVbvu@=<-VB{Gti>GO+wF$mf0q-^~}`=wJpP;)Er-3gLI7pxfvmSWUh;IXHYpQ|6o_ zuED>c5Jvuh_C5GST9l!)fTq*~X9+8m)pb%KQ4~5DGC~1hgw%iy3W+CAo(Q+hW<8~{ z)P>67YDyf2d2tWS)AUK&2^d~Q#2i9uOso(jh7Qg=)WEyL9dPpGdhFdKTbqlgEQf8j zdt96lY8S7f7A;D=k1SodhDe+XK{SB8C}NN%!Gop|4)aj4`UYCEvT_-aj9pDRbr(}8 znY3+RAwV46*VSAGTJg$RU&@rhhzfG6&Sgs@Q{&9yK$#PC&221@dGBS8TdqnyTW zty7%VrB zP4)GwEc1p|5U|nt*H_Q$qnK3*K!c}1`viZuI(xXf>CWUwN7vKCal!OLhR#GSJxkRT78{gv2Nu&*IJMqfzr89Y{5qChw zViH6N@`>C}W+QzhY5-z4iu;ET8iX}kiC270pfz3|vc}-CnuG93n2TERpzYuHQsL?j z%(J=}Xr!<%Z~2TnCzeV0e1;_%ZKe#9v~Te*NJ? z>VZ1);UF!dBWWbeKT3!Q+ea-?vOCkaw#zvpy?zQX0W%U|G4BxuPV zE_UE5}?!}n%6Ez9zrKB=m89=@X@beWiDf-@S@Lvm@ z38z59u-%NtE-wm;J-a*c)Zx<(WSc-Zz`WrOqVVwWpt5bU&F4WM8XO%bIP7m zi$wDo;`#|0_X>8Hty7qGR1gHe4Fm2VKpJ3Vbd^kGE`Pk}|0@xkynitsift%Y#lS~L z)&h5W#B3@4s$qPeCnv{8Ny7*M5{hJ)E=>kprWWG8qBdV%C{r7sy!VOhx+pSqbBLb#LSC*=W++$`qthr5 z1J`Fmse%=a^lt^b!-m~9ai#~YQBnS$dTJ#lRqnSBqj6cwGUjuI6df+9x;9B#h5hgI z%ZiHH<-{w@=*gGfe{gdW99TnB=WK~lq7@H>7s)trTksUQgm03Sptx)34Xjz9R(@J0 zVP$L0TYQ(jbH2+grTiWV3^y0pF>xSlp#6diz7GXQgRmXN2R8VapVsd?o}ckK_wcS? z7Z0h7+NT^I>*q7GXxFgO3S0g&;ehB;NiL4~D-oE)zUMKJgNoSiAwyBt5l(%rpwE%|Z)1{PD`T#j7l5AYK+D8ED7QfDX) zB-8X}hJxZxSB%tn{T}Q0K~qYwd<3B6PYfT+Mb5?69Xk{u$RzRS=pZKfYX_3+VMg7K z92=afuXAz9d_Iyjh4JktK02pRp@LB7*WmcI61Rts=N(yXZf?HWM?_R~DRa+cCmxuP z9V-}Nc4{UmrV^igts^XDj&kW9y(dwj$JfwIH`b+wnVOD%&95_mE@)BRc$`)-rME}W zhi~+FigZj?mIjw8J;3<8)bekCN&FD32&vg8;v;)+eM>NXUc|B@mkG7Y(lLV*TEga& zpL+r;*ceB{%{EXCPI+`)noY?l%uu2!EWTtIRy|aAfu1RH--Z#E9R2oYR2h$Tp^S^? z$daPy&t?Ahbyv*knJxvTm4|xd6P0Od=S{}8Q4BJV3?#aLXpP!kOdbE$Ntgb$ADK znb0vD2W2kxSCZ;FiAM`L_|T6a)rC|zJ>7%B0_pUKnY;|81K?!bvuurLxj8vFxRVc| z1ncEXHVCg@l6DH@?2uTKGiT0VZMDft>?1N(;Otd#npt;mO`xogKQUxy0y!mc`L2MwQCw50TqyIc~ND;*j_`M#`N355XwCy!8{|2> zes9jIHb4JTvCD^?3_Zu9k4z(b_F^4?$M8-OJ`Pfl5R%+a{$L*;pL376(Kx>lHz>Eb zZbA*ouEF%}0dxVc7ic2m04HPsp;c|!^~I|+PW)wK^ZYCAf>ilf*cPejcklPN{DcPy zHRni?7$8H8AS6)B$cP``=803Mu7ZaquM#3pRiNPlq(@Xy5R!w$c&Jml6DI|!Wd+p- zWte`}HjI+sWWuUW)gmWejtn_4b-8(D!6XP7cu&{kGyPCbu>PrPqP1xMZy=boej>*K zTDKSKIE)0E7VqG4$F;u@j1Gwo!0i7TyK3L3Q~ovjS*&x`qKJueHexLGN)otm6!+ps zt%9A-uL_`Gt!N2QahLC$vxN*00fPb z(|=(w;;Euw9k5SPvhwh7q@6F;DWYdS5gk3%z$+D0lx`*@@F+R!@t<7GB>8m}-*4q> za|J)(7h#=UG8$-i++2p@r2q-PFUZzI&(6HVtAn*3Y7;r=;~yJTsFprZ(OTO5Jjj z;y&S>hO;b%jk0RZRos_d>O9P@_rGok_MAJofu_#v^i-x9+L$rI>IQr0(u)oY(9}hP zx(9TBCoYfaYO@eCE_gq{X^f*cvqUG%dicv?YGbN#ZjlVTGaI} zm|*PB&wp(6$vLy`m=tBtlH(hEWPcxvla9#?_Yh3FtC=LdWoc97(R~GKsA9q-o@gU8 z{RG_R66we&`S|hqhvFF4k4P#J4b1SpkG5>AcMbm|HeI}_#liZSzmbZ6#4|`i=jYce zY*^3pdb*=K_n_MX)DN6Jd)AO=2L9+#eDYxG(BC&KxAr&tu20B6ybN{*>nq&TTGBGI zva`Wob+Y4!i5sNd5g-r8HVVl&TnAMJY3sz%jp!*HT2}XuO&eBRe(w(R;@#bRby5QN z?12F|^NAzn`qVK5^^@KMWSCOm+2$xC@$AHci>ysty&_UAKpK}oWQ*PL6=uPdl$1+= zO@89sdtF?tVvwYmbJ*(?`!BmCMRFew=Zgdem8vJNc&u9_lgwRGYy9Ylx3!U7w~&uh zVYEfYM5C>&UZWRhp-jPNt@S=ma+i{&nJ*KJ=+Zk9_JhKc6Zd7LTD2Dsw*#`+7?pB< zisHVZ?!FI0-=N0Znt!3bgb&{t7p<^?56bmUy{*wJm;tKEZzj#+M3)uS-*5A^u8?$4 zTtyRBiO-~&ii|(kpZk;7V9~!1cpMop zY=pKKNnVSWQ-G`RPGXmmD!hq6v8=2tL?$SEjFJNO-2PG#9A@l5=Kb-`&~X_4YMGkU zJ!P_)JYVsDnZ?m7Hq);sy-XvJ#W*P+N1oyPd>5y#&uNRmxLg4<4EyxbB}?3)(IKk| z*dC%b1rlP&!-xNKsXMLiCsLnJLbQNjg!q0*oVrNT-3R!+Xa9m3IrA>b*oE1Mhyyg3 z0*dL^=qMY7K+o_Ok=q_@AZV(i85ZFW`LgccZ@7?b3849D`mUb!IvVSH_3aaQj4rW3 zHA4EUfEwHoZf$X3u4!X3TfMhLWOmz5Z&%cb_YZ_S2rnZjxcB14r&Z&xUhRi4d@Y=F zz>2t=TMZ3S^;nEF1ix<+XrYEV<>Q5R%{VQB#P=Z;?JFeB$wcCrhV=AZ`J>tfTTVw@qHLG{=@PA{@N4Mk=&;xj zl&kg#GGTir^{9l1=YB&RfVf->i4z-=6V(B;X)5A-+e81}Sk@N-q&dK=HMa@8JgiNS zmY4`vK&Nm8yS(dop9&Xu$pK2zBIqozOOl*wG)QTm8AXxKb>e_W!uxAz;u7BR{Jr2O zG7I$uSw~hAC!u+}&5js0)|`_BXF~jKSiPZjMW+%c)Y3R2_MsJ)q~bx zeHl4ByKQdCsdure4oH_eQt(JS;Pp|28k4-1rGVi9>Yz#8nnEF>5`m>L8gUOaRwR{N?x4Xxj*h30vcCpkQiaGL-{Gn`gU4Mx_xDEYwNNAx;|6HYLs?~5 zPYOHZ1k+K!0UA%tUQc-d=P30IhC}0!U;T{fGduRg*^AsZ@t>bo85X8A*cmS`ij(X& zn%~_Zs7&)vj*q`OSsPcRObt`}I+vz?ziR_MGgADLFN=lVHU@e)J|t2)=9Q9|k9okD zr*w??#pi-OjN5XIu&D{7^p=p&AMtxHDE1MNbK1pQQXQna4aIU%EU-R5Z|~N8rLOx1zji)4PH_X#wm-GO|16aa)C3 zK^Re2uE`bbU=zH@G^Hy&#&gnOUBzgQVa=&Wl)Yw>yZghX#T!)qDsPjyD^WIlyV#iz zYjCiZC}b00l|4fQxQfK$-%RQ~x*Pu5h*M@$g^bk0M8Tdu_C19%nw(5u23O75qk$1j zNHSXLDG#`M?7Aa9~W5$}gUFMG)T1fKB|6yl^dM2W39NX>Qhq1;Z z*`&P+LTWJGXFtX+MI$EljO_otcN=#LZ6J3(Rjpc)YPy`NsM|?SXtgv3h!nEY>>2BN zb{3jJvA}p|fSI^66SiA`BP1FKaCp}tnt26rQH%2c2TNj!X0P7dfeJ&x#1tH1m;`-K zj*L4~!!mR$H`6m81bt_ODQ_00hH0Njl4f#8KM8XSdA@|X(=tfHXOXqMIGM>@Up~1j zn6$f6G|xF@Z+g#}RNL8mJEL-xXq%#o7-8XZrv$Ggs-A$*NPa+QkGtoSz&Rt|H zzgs74;Oic9YU8%f2u7G%7jP08rpZ__M-V-hNL?K3b%V{FMn?`CG`G?-Sxaeh(9UH= zL;0x(!**z1T5XcW?q$83kPx+ca$73m-a+i}e*Bg+^Y!f0W8)8(_q%-euhzYGo2VLI z@dvorJ3l{Y2VU&4i!s%}l(XJx4kdiGgfBxQxukNyUtz7Ro4v+kZ|fi9a>}%^o23n5 z=br@P3y*?!FcLe>yk0qyv4ZKG7A_s&#k-`c{x5VPC)B(uDw>PpG9bj6 zk4%kLx;=#!e;l_Eu_F8)>E)#03E2jxKY*1R&DDr`V}a3Eug-=5*F>up%u>G+c#Z*4Zaw{W3DN$dphpF1Y;bHR zOH-$|IffO?oT8wFWADpcxHTr{O^j=<7SAgdLT z?u$w10d#l^C?vBG31hx+S15MD$8iGm3yG5=rAW}@dPA_m8^notZy6aG(o0LqCkVrR znVtVdk?+)VSJTs{zW`V&)HQZNoa)DOmaLv0s%>D9@Q?HB&vnFiZHfIiR(sP9{+@5& z>{L7)yHbk3ba(p!_&o{nxk(U)q#LVcK5Tuj54|I)-~+l!DvD~(sYT$E%2uu^z1iTv z`iB1=hO|un15fy4SE%vPqw^7V*!Jz)E9}xXy>_-lxr-ne!HnqN7!ruKmtexLb3t|> zCwUwNXh5fVl4GFxyIvpxV>!Mf(xH7|8!`^J{V+0GzDLflH|`uHu2xnSjRiJ%ATg6+ zYpoFc2EgF@F?PxWxZkvODr|SJvDqD7m3!ypnt;ctP7hfVz@#6NjpOCCb>0sQST44^ z0}LE)swflT!1!8z9`r%E1MgnHd-vy#=I;9@ycU3pf_d#-R4py7 z&CR8y@%rr$Rii9|A2Nv9kcUQ@czAe#AKcmKWE65t;_P%w2SqA98N?Vy6qS&=iJVPF z8g_t{(4)*(-ue55NC*GU#L~JMu)aytp(V0I;50dV~(r%RSm;1Hbs6#s$w z{UHz^%;?Jv_Y%J)$$`MsOb#OKeprhoZDQcHmL#c2LYj|XASw=|<@Jz|Rb-|n`0Tyy zCJP;hbNh})0o6i5^>O@Rmq7MGMZCbgGhX2GGA^z;3JMAk>z+i73zX8YiCF+yy2boX z?_!U+YHJAxew81-AMiLs%3XkU``YsR9aO5>z+2>kM*#ZNc@Q!*HZ_r!Hwc?v;6?!6 zOdvw&p5gl?O<;&oqQB9v#>K0qSl4@hkDMF{j3%E_EDTV}zT~saJ@K*K8E(O|HSyfz z6BB(OH4m?Y^2d)?dt!ApX=#BypJ->^M<3!j-<-P&wm>Bu4;60}KY%`a*F7y9IUS9hSKzQc>TmHY_h$ z_4XL2)|u4m^UQD1SjO~s#s4wu{j1+T*lF26(lf&b0$aofEq%AtdogaF4qML5)miVP zQJfUj@6x<~)7T!(;ZlXDpG#G#2E_{YUe;%J^@{kES#d65+Nd60Rup}vtkPEX>xuEb z1B#3=p;3N%rs9^i;%@>mCdI`c;?fymo;xah8Sz%rv%GAy{}`7*xA@qFwD0a+jU1F@c_9%~ z!%t!QM@>8V+b$THc5cq*i^s^w;U671Ubs2&=y_>z0ht18^LkDWbL-LIPwlhnIfr-o zRp_i4%vispo^r)DuUpLba0w&H#MfG0AvZzL!Zdw+*9uN{J(EdirV-{Ow>yR_d3XOg z*-=#OR^r;onLec#HsJGrIC~R#D%bUWd^OrBX`n%A-ernPGN(Z*iDW8cCCS_hnTL`x zgk2dTQB-C!%UB^rrplD57Ft4Nmhpc*i}v2Cb_uz z7g<@e&VX6~BML<=3zPcOQ{J;s>eeO6PPrV;T|)OY?5o$N8n0BVqZ)s!lnG8&+xGMM zex3_Cu_yITd+jt-Du2V%bljwsy;!xF52J-O8q_i~9}yMKxexU}G#82r3Y3_3_IEyx z5o7S*#-wJ7&hK7buN~U`{w{A83EmK27^>4bB)5W!0w|+L$Oem*F!EVLxw^?mwLT9B@ zZ_GeqTb?oz41BxsU*o5lNmSVUZx~iPgMvvoNy+*OAUveMs)hdpao!?RJgp6Ue2YLxx71ohFpe-WHFb3>B}-DSk>?bged^~IvoOXWng|&Fa|=6ysqfg-f91k=+LyAquS` zP*lzuj+WOq!E%SlTrlvuVT0EFB`Q16TJ(I=ktU8g8c7LX!pZ4SU;m-0N_}k%@0~)u zkar0(3u2=e&#I_>eIU59Eb|nbzLqaGh4#MHike^Fdeeea6TdHB{532?BK59_eh0UP zqGo_UmhS_>YERl)AA2;LLsRi?w0FvVN)NhijEAgBAg5#cS$cBK0Z$i-cR7z61POixBvvXLn?h1 z2iBXiG8uR&Bh3;7(%UGw!7T{SI91KVyA#&qc#Mek_^zO4@MVeY2&K{dOD(dEXt0ro zIl`eKJlz&o22?jbt}+CH=oXQGx73S3T}03?VoJrw*DATjz5Am>WuX={^H5}w@g+u5y`~`Ftyu7mp*kaaVgX8IrF}8XFhk%kJn>m? zjteSE6b1WDP5Ds?u=w?VI;pPC>>Ac3Del6=`Wk4PCrp^h+)wC}EvAUY7GvBzCttpk zyW+!0T2ORA99MDNAI-&R_Q_xeVmFrb=%%$lwu1-xs%HDCXB6m!_K-;;V$^Gt6Wt5C zJ((Hc;yZwgpIgsMEV(WFE-v?ig3cl3`W~c6jmh@%dEPd==LNP`luo#R1mFQ`sJ zDMyPyg70A>y%2XGKc@rT$+I+n)+9NLZFp;$H*YdwaX?nL1ip3`2(?!=LE8&Wp1RQ? z1sD*a3qlmm>Fz!(oEFj-61@_3r4z zYwn)|RbY_{J~0lRLy7QD>g5(okNH`7m2Y8!o37yT^Xcn2-}(l8$RFlb3^uyjRZDR; zvb9pww2P4fBRl;r=iy>ws%&EX%^FW#RtuYxY&ESFd#Po&X4efXZtmPfEnB+3ujQbu zRn954l^@kG$vGBc9BS5dAh$e5nSHoj(1Z6*sFc>HIuDvG6~Nc1P#rz$!+lTl$&_KR zf})<-pLiy3qDNg()7DHK44hoIdW(0v_7-vR<<4v79Bo)zn3&DY%NrB#d1Sf~8|DK0 zg>0^Wk(@vN(a4KFH*;m;HEouE#W$BK&MBBtXSpZNdk{JFW8L2-e}Db!uWU3qo#@EU zO-qDM{jE$g%)Yh`(yWS#iXeFn{VTslfep6LyTK*Jbf_tH7ukd>C*o34y2-TXHE%mc zDTpsvUZ|=Zm=GgNMTN4%;QiyQ%(CKv?#4AB#=3$H*BLh5b0}_)>9wmk9T=+)4g*S! zGluFv>&;9}7sED^L&s?-QHfUj>P2;!$Z%Sp-ECiHFo9)NHkH-AX$|6%*T3+4nE|Q? z4|B76l&O2tCc?a8_!b{86t!BvXJz4Fd*pI@3fJ}}g+f0~Fy}j8(|m}!x)=p@&KMGb zOTJ`bM%bR%&M zsCmDd7#7{*6>!si!nXB&%aJSE6zA@yq@MV<@%IZv?<&tZM9t$C_b?B-|2A#H!o4ef z9)(Me`4F`(po$jUXzv@A@w&RNhxWiuFI3-?sdX${;*J}~oy&P}dHJXMsh}R3BaU-y zTdU&MQ{ewZfmJ<;HibHiI88wYQITb32JYuWsFiA;n@3a{UFmLE02Tu@QN-I30RxAr z)Wk;(C>f-IX;0gSq9WC^HUT#V21VY43vJcY1imYk}@prJW6s6fDweFXs`xm21B8~ z^#hCt!pZ|{*HGd4|3=<1i)^pnjn7TY(6Oz_^uwTSC(_{}tEMz}!nTBm*l6iE{+tJT z4jD8rVy}hyj|9lEWZb!UorD_zbpqKDS6)g(dl0dD15C?-m0bv|hZs>F?5@$aV}WN& z0n*ye8X9`wfSN-A%bD~Nrau9~o;lZ7t|5V}Hxh#egwqv=8(~osjxM3BEM6-@0h~+f z9{A?*4d;wtdI&=CTqslE^U01;qp&X{cocIB6TQ)nZx&(*R$2-6unQ*dl!vHpj>yWs z0{8SwSJxt(OBmI^1cQNqNLeZ)N@#rW@t%`W zDR>6>C&|1!$SOIPLhSkxsp&z)Qt)BYD<*OrViw@1rakLYi^CL{wM2Q}ix3w4vDh|X z{B~=!ke+%466a2wIN=OQAUvGbJO$4SE>Fv&qM{%y6jm zf54v~RuCyuC_t1c&Y=Ip4TBU<6jO_XB-#S2!Rs<)GL1j1plt+2sUkvQeZGXCpdjR2 z9L4rA0JVsWfZf#G24w`iH;s3HJ9d89oNTz*avPPNUc)>QVJ1h8?1Gj=-Z?1b0W!Rp);R_qt`(9YU=-;{h6mu6iGmtP7nhN1qNaTr#=)fOL25Hu zCK_2a$BqLZ#8S?`x!%zY3O0$!kruz#=_tJMenAn~^NtrhXbh7-fBB-=Z3G;SkxX7X zHoPZb8%D`CHa0R!$7*iBiX$cZrd_J)(UHlR9`c&AW+L<&Y)_f#>~PS)fDX|)B4@Y(No{i%kM+u zOoq$DO?Ir%b?izxpNHm}2%pH%emXNuL zKPeaiV(iYhCbinOl;Tz&nYk=@MTW_g+8&gsaAB}hbu|2q}>W)WPqM*p?Uvk)gf^y zsr5KRU%|+?+ns*LYGDVD_xF!7duU@fOlk^6*|#Q*-4x4+iora7)J%_Q1)q;@vZ@Nx zM4XS(Q!f6U-#kS0O^od(2ff2Giu%;t&G!s`J8ikdSxqVt1x%6wzsLQdQ~LnO+Krjl zjjF5w@S&wtH^QME*VdwPkLP@1f3APdVak%e=q~?FA0}=Viar_BH)*%N94?_+d;M}! zT|P=4=5$Y5gM+%K`MKWvVb984sy&rLL_)TC*jYPU60DbIxY5JtD$tMB^Gu|vPA1}8 z%M4a-si*hv8HcXDcj|oJHh;Ml5d}s*suSl|QLObnlSLx##&wDB>2m^n61tvetlLn_ z8eH>a8v#X4dW@92`Rf6JC57xkC3!wWLQ&%jM1(mfk2i^bd>eHe!10MmyQsa>clWtg zgV6z1RsTxePo@u|KRDQvaCN9J!9oInq@{5v*97xTQZC^9*w)=NBgh*tORc`v4NDaa zs5396F0zqv6$lbvkPs1$BDj#gF}7ua~y}Lt4?g5CR4ga zej(q5U0Ff78Y`%FkgB`-{eTMriHZ?AB}R6quq+=WZB?yPt>DFWYseP>-K$p{kHXQT z}0f{Xy_z+d?@)R3A z*2_eIPt|SO4dCMg-@-r*P0a6w?poHq<+`}J%)r#~c!uc{5&93abt?+Dmyf9j_uF3W zx+kdgR$S;o!;cuQ?)SHsQOlw{Y{D{X`~<+=R?(l5Z~!~A=B3Oe`>>^dSFQ0m-sXV# z0gY`QSs?;bw;mT&K3bmCKbvyO_Ko**f!rJ(l<4Y1t5XfOPwg#U-ra9<5T)&f-20on z{eq@Uj1+^PKOYwy<;El+@P223XyepKD3@uOnSz_Se19FkN0w=&bgmFTOX4f6p@dmas7;mmbG!InB&NDVZu)ph zjoGjEw*o8t=l_MVvI?7;*0Js#*+AyMgaQpWoO}R7iS|D)Q(geVQ3T@o_1snY2$u&B z9(-{!H#fJowN=gJCtAF+k&qPHrWYUOR1Rt|lw-ro7cV=kY{y|SPZE1Bg-Dxb#=6WH ziAB4dY}^6eV)l4n32|uzvg8SA(?e|Y6jNV~C}m>mAp4}(SsF;wjXY4ZKxp0j<`z`# zaM|_xI_S_UG$JJyek1KVxzBEHh6h~YA5Pi*NO|$%#jX-bOzmF% z2OHxSxrA`6zM%(FJr_6ketCKCM+?WlBgOGG1kqk!b5e)APZI2;(%}}S5~&fmX#c;6 zaqTC*54NFVfz|)T5J>M~=Bu)`8p{@A2{M%=p7@aMt?~z1^K9#z+oZT#!LLb%^W&&G z$h04GNaAKi4MgkpC)NDf%m}ct@*yv*Bq3OYR3B6q8s0vhfh$kkjBC3AY}=L zoWME107*j~(omgA&;k6Ga2rwr6s>pCG#!V*LoYOigbNa*aN+Gpa@^JPEyLY?VvUuT@)IbI;@!-0H!9fd$C*!AB5~T<)cV^!kqFt}$8O0*uWB7^ zzFfA_jrN!>O&Qsx@5^PX{23%+;bpcSv}>d49_F%nK625$2U|a%t!puWV2mELMpUo4 zC!DFx!+f?^%+h1hEc1BVXHQ#;MP7onm~9|`2jlT(Q9LBMugBXkg?VYC3x-wLtoQ^+ z>f`>L$j!xH{8!wmN_6i9@ajH}dtIO2A*7W}{?plMTla8K+G5SW2)}+!@(6bn2PX?K z$A4v~pY?cuQhQF85(<0}D_!H_O#Fxp3_6xVSjXM^3d@E$goTS1{S4GB15*IOvDYbV zKpF&ThAtzYZymfOenW6^BgZFl{B8>C%gIaZj%K|(si4T1-a-pDXE%peI+fz$W}14#^}Ov)AHchX&KORBHy}<&Li0KFR={Pp!S)EVe57H!78FQB zb9)APRb2f1xkhdGq2>f7>MCXhtG~9<>1YZ=;^^c~Sk(CXS2w}}hstI}`MV(vor!W0 z=65&@o?%ahVHjzB06~LEIEMmxOykh#j5;XX24Z@@+}9W>;=z3drSlTJ3(5$HW-w~< zz-Hcj<@EG}9O-yw9w*VAFf%iQy>Glb@82Xx;HCNCMsbvm5o`mdj34Rzl zLgJ8y+d4m0UF(YxdSJrxk?@n9=O=49wuWpE(!+7@#d1~$yA&wqBgi(RQe`dW-+0mx z8->CN7F2Vur+qT|c~zzUeNg_cg{ElV<;$1-8tYTlx8r_SVu)mPUVP^5e|j*as ztsMysg+bP@Dc_9X7Z}_jATT83Cnu*eLLoFuy9}*!7+lm4_Wc5 z&lj^9&&8d<^$7{dmI`Z%H>O0M)m=F1z}5QAg4(q?UjnR6r?;UCbdl-)I@HCHBPI72{KnG2E>%F(84)xDPRD#W)(ydVZ zo?OR9UpwmDm1CxV`9N@gn1Q*XW|lOtrTqSaymZRLj8j7nryk$M zwAcT*5uf+(VK-a?9vYrdRb3Gq7snfnDON|O8@YA3c?ya1a^{PQiER=RN`2qP_}cI; z$-_jb7yGbggOZXG;G61S4C3~6e**bbHv`;sh^c2z%US4BP*p6wy^1I*S@A!=zM=Z( zzh0eRS11W`0V)C{{T|d>=}LYka(`vA56(wLU;jPXn~@mB3Z)@V`ncWlsEIP|v8oW6 zp<2q`wHWoz7vg|JvS`6`I1pY*M$>43V}|;xigKy)Ywd&*_OaExPYo2&kNQy;SS9-N zeo(QPi%5FnGJ3Xk)G4-rfQaSv*bP{dZd%d8N~3Mm3%VqAEOfLNa%G zya%0lD@)S2D{2k|o70;hFn!{lt)z5T(VZ)v<34Qi(k3Sb#@x&o^NVfu@N|2=2^W9w z*~~4-c&v?;?C)%VG+s|_p?)6dLZ4_j`g2wb}of`+CjwS*LmsEr5$ph zfHJ$j`Y}b+Ho&*SM~0i7)&q6AF=ZC7j{!L0mJm-*2y4Os$dT;*@3m|iFw80i* z2QpS5tT=`Z2TeaeUYMt&T?SVT1VBKr(?hD9gpSN%Y z#5EK~6yF9Qk9aB$f>Z!Ct~YuD8r~~8z++=g8(4EdZj|VIv-utrCPBhxFhxsBdWAxH zk$Hb#PfjMng9)=2#XB5mp1$e>pxRnu05?3-;@i0q9k_F$fM)>G zK$p?Sm7EY|az_15W-^Ua#9xz{myQF@n&!Uk1Wt5(K~;Tkoa#a^8QtBS^4j(q^|I4< zH#I^#?O}8FdT|J9P+7^8pqqf>qH?F+j-5NX%`KlrMs`JJq-$@%6>ls1u<-DW+;7e7 zBN`y}Zk`%V+Nr23DnmW0es8#dSf(|=W|^JZe$ zjoJE55Q_6#YB3V+5lP6(5{Js-5@uWnf0qyyt*bbcyGxjtj+6cctJF9}Ts(`XW?Cv_ zrLPuLyzT+RJw;mDN+G9<7Oxt!6b{T#JCjo$+!^9~Li9;kVX%@~iTi2vmrmk#e+Z z_r)cIw*m1yAW!00h>jSt0Roc&OH~Yy`-Yz)-Ztbty(lSJ2(I-ZW#x~YbQ8!-2oD6z zg)j`CKziU>XZ?8=(rh2UuhG-j*99m``1yne~jYYK4v;*Q*H%uJ?5^bF$&rz9X3?AfTXTS<&2axqk5X zzTgXA!P-3PKE8FgAmaci@g6*})KB(GfcM+x^r$1gznR4@97tV4Z+Jco0j0sFybJ25 zpw*0d{q$gzZ(QC~$zEEpi|2XC`#EQO$)wRsaZBD7?gF`uPl;&Q_f;lzb2+Le)#KsT_eZP z4bci6ZIbQESse8mp1O9!mP-mJ9M!dtrl$H0T2w@~>D-bGo?2EYq!PS>Zaj4C8drB| zSOCLmL`&n1O->%M2Dl-gMH@JvAOJLUAwema7q$|;^InGV9n(zGceecb!p_wR}Zr_ znN@HGaoFORoP9vl?$Qk|ex0gQ!RGgV?pM@=CWcz}Q7~y?>;&fr5FXyf*vt9d&$KHM z2okF+ZW;@H-zwE)URE=Hk55oiFFij;+pC3(E9pLQr3ft)9UG3b|D*2ysKH`4b8Y2f zM?pEKfg}-q_X9&pmYv)`TdqurY|e7F+<4eg+py`tP<=;~c3<a5optf^_I7Bv{JgUP?^+KtGq9hJlp|(!o5MPcDz>-J z^qiM=37J&XY-1EX-A4cB#93_ie2nHP0FUp(WT;Iny1;_&IeFCG^kN13GzTJ6D(=7Y zHzzUJB_?0Q=mVIN07PDgE?(qyh0jixefM$~Gr52GW>N9&*7_cpWx}-b)>kbg5u;DL z*wip``#$lRBw~HjZtN_6Yn)I3aBzvk_WoOr1k zZ?fdTx`*wqOh4FK&!7#?3{VwrN9|A8#`{5j{^wbASf%4<4eJ+nX+ zQ5`2dQeco_VVg*+i+Li>6r7@t+x?z7K1)l3AD5-qSGh);Q)|Uvl&i6=tnF5ymgQN1 zdfxeaUt=;Gvtq;12arR*yaE_m*SM`Q1YUV9!X^C5LPn9v*TtfBn1W(n77Q>LbDCcHV(#R^*1(&3aMAJ1;Dw%bo}sN{^qy^cMPprxPHyI9W0^J}kH0JRqXm~Z_O2*o>873zHdpj8UjMCYqtu@J zpMaIyG>dqc?=johIVo0W3BqgZl&vT2U8yCeLnaNIg_@5K3w_Z)Z^$F%y{B~IG}|`G zZL^&Z26csesy(PxD5@~AwLV~M;PNthgVnw(+OyBoO(|S_zTf-jj71fSrg!}jHu4bd;PnU+R@8R#LxoTes;))Caz;zb>Q{AY1oU!Qs+DjSx#3E`~w#1!O) z1hQRTU^GY45-~dG1d40j{^;fpdgzq0`tbMqn;7vER1qaG4nmyY&S#&4+)eqMSOiDb zM?1!KFascH3!Xywgn$5d$aULl#z{L?1*9_())?gQCz3PbE(6NxIXuf0XXwILrRKt# z{tOB{65;4LF{nnI`N3?Vo0(+BbpOwCI8FN^*S(04B&97xnDBr6WRyU}AK)brMGAJE zMV+wJ|95%ZdlOCz@GS~3XZ1!)0Xs`J1<64+LLVt8DEN$$5)jJ#ChHcKgX17e?0_97 z83tgOeGzU*>l{bUg7eej(FqWM!R!;U8;bohr9l{w0=XlbNM7h#WC%cOavhSR)Di_! z@mYw=V&bw8ue^XlVJ^VkjRJvq_ zggaVvd|UucKA9DQ_z0zuL3`T!Tn9VMaeu=KAfk0lb_?3vG0A|2a8^Ucr#(NK*F<~rWo++eT8Cf5q7+owv$U$y3%<6yH&uA;-3#Xn)9RxsRj#-hGcpd7&H>! znXP62LK`6;ix7^0)OOJgo+Wm@bE3b=b$cVr6S zwKX^<$h278+S*E-bKojoipcbT%J8|FTvT94XJApA!akYTvs)lc7(}%H0?6IP zfl0{iav>6{@jUou(69>Cz(7&6Elti2*=wN3m3dB1mA1&%CiIPPn~l0oQ5UA?$8M2njYAu#e{zEh zAS=Bc80b#AeBhUa#RVNJ6?}O@HN!?xgjwE?x7$LAr=rlwAF!oIG9C>Sk|lW;Fq9d9rOiD@$@#yIGmZ63U>My?V z?%pi)dRA6eq*7V1U;z;rO#3?{1=a^Hix!>LEU?dtOsuv5NChq$VWr6U9F4gJ{u+63 z;0{QX2N;7{g9`S!eWW~D3rQ<(I0Hx+2id1k5mZFp9=9oCKaJcB;yj2#h)~RlDw>%2 zhu?$F_grUn98tx=kG!~45bK86=#plJID5gS^)tHsUmjPRqBYVR3pq2Wp_bCp*DKv< zQzXR|;DB#dSM%mzwI^Yljm0Nu0lX%ii1iH27gv?uN1!YbPw(!j(+@2K z6-4999!8B*wIU~Ed!2M@o45Ke3@-9QgW^Kl<9HCS5zopJJmoB#W0gwVYs14uhV0`{ zvRQq(e2gm3RG$=13yAPkZ?cq9sFY?4NccmlGxxqFc+LGiA%rlpCoRWGr;c8i{&p#~ zOkuGV+#5J01Yj5V2g}!5Eps^2*ncurY^dyq#!Zl^o4wG%uTd#@`5%p2@0!bB$y!X2 zkV@%TMai(%ntbd=mA8|onr(rtudHOf(&Y1=;da;u>+nf6jSZ`K(i}@b_t=+^Cru5A z2Tr=8v9I=>hsEV=zOp)5Zo3BhGp!bC?x1$FDdLhDmdc3>$re#J1Tlp35h-WPJDO(-nMW;l=mt1^kL99w9wLYVy;m z;N;}wu59a8-)zp9gG^pr^5Op9*GpSWMfWpj{tNe6dT>sWAtb)Ys}U9wiW^AOpGGF6 zhh30m!l;icbHaTIw}Jyhc1N$&A2DvN<3V50~h=iSlEgw6UkJ(T! z*piG>9EI6-|DpBZ`XS;vo3}Hm@|2tILeKNmI(_*0>BpVV(o)rh$}gcB===BMf{+;X z)Nk=9sjyr^*deSIrLg~)97z?SALIWPmT{a_3Z7fdBY$x5E7U0?ctik|^Wp4r4|Dmc z*f=iJ?g}=l{PGB7rX-#O;ab)DI2&Dki})VOXFn6TjeE+_e9xt2wT;nT(!`~yy;lU> z&G%jy#hp9rq!s+({8Ud^M!r@kJKbKg)t8HZP#r-SulL|r&~4WzKq43&7891y?8{jw zsOay>>>hWl`2w#FI7@thp z-YOt|%Y=Xj>G4Yh37|5#`u}!DSUHOVY)cvfLsFBI_6)l$vF%by+ZJlS46>>HAjT2v ze?pprd+-*}Q5i`ZU3E_JBW7?uL4{%seNIg3#LOd__c7~V6EptXfbvFh-2M9+sWs-b zf(0mzUNz>7$7=xdA~t@LAo!3RT?(PqBD%8iSs4^N*^Gv0LK2Vr!k9Y^PTa5 z<|btKF;g~x+JNfM1+8f6jA?hrIaVvs%X;&mT&>}AsVk&ac$nQcAMXU=+VH4MfG4E0moJR`(U@50{h|wic47|5$ z7=Su3B07lgQ-ofZB5}X+Ke;GjC@~s?Zd;0W6hD$sw#F!PY?U}OC2c& zLP&T{t0=a-PXqXb~eomAhuV;Ke7ruiiI z3f!LF=Bde**tmWSCs;38Is+e1WVcCGsc$3ir1H4^I}Vt`{=Xa>yCc~f0ain~NKSp| zybP3krI2DpXhh^!VaBn;2|bOBDB%{jZ)(OhAzCVOi{NH(DF+i-^id2e&s(dA#hk=Y zt*#z=>rya|uJ|efG$m-?2mqNj9h8r@d4_x>zs1;7m|tu$<0{W7%i6WwoGx5Ja!D~&p*bPsTy(LfD{yAf>jC1 znFOd7Byx{*kOMu<>v3KA`xgzsq=A&K#PLAGEXUQV*X4oT352p1maP`S~ z2LeG0Mgxb@WP@AOi$n7)-V5o5mn%qIy}8czHxl5KZcN-Q018#0Hpe1uLGdNXw~(3n z00uL}7e+*^IJ9(TPBEyKW3->iRQU?5WKf>{U8)9xUzNHV`Vi>^QN)+{?L;Y$S9pb- zn_{iW9@(L|X-3h75uGO|S4)mfG!qdcitDp5d{yzE8MSt^c$^$ke6A0jwkCi#BKiQ? z?vKF01xg<}baVq#M0C~~o!waC^m|XHNW|f7&@eDyXM`V?wrOxX)1MU zc|@$AiIn-#wD0^w^FSxc^^41M4Il4ybeiPW$n*3BO|t+e{CU%OOfMxf#;pRkIzGJg}yLshO6kux2uwh!CL{&#hZ7vd(FrcA1X6I*b>dYO&ER4D@+D1cjB9 zIR}Izz9!Y)+@9`fp4+Rdpr|Q#eLUOOpQ_4cr6u4LKqqQa)Qe}Y5s5+lPT4B(=_I}vMn#5$th}b?}6cO z&z-93GS#vT)hw4(O2*>AuDOl~aKxP}XMni|!>{yQ&)+l6fg7Vc*^gDebmdAb4L|c= z=OTwOOF3#UpeTO)c{O0On4efoz89@DE-4GcKypV zbmUm?Fvw}5{$#+_9LpRG3>cvf50w88q{=0zcm6ymbsDLLu7oQL zSGQ)!$>0yoALQ6-`uo&q!8$@VnrsmU%A3jp6Aa;@`5Iwk`d1UWf~}%o;FYpWJ&hX= z^_jPs6@$)RwWe+Rs>ZPMR7rkgHhP!oR`F&=yhs0+!#)u#fB%3&|o|ffxorZd%WBJs!(Za&Gz#}J1BDpQ`w4S+ccBe3k%IE z-Oc4Odf!iuimbzmsurb8YJni%;yzxSMzi5rzavN=th0-W0ttm< z5JtEnrV%F51VTWDQE~fV-qfTxF(2P;+OP`tH$-Iwm+^Ypl5F^BVcHHO<;ho=F%+V$ z$FjZ&JdMN--_V{VTtbZ603f^qn-*G?RXfg57OxwR*hP%G$X<)R3tuL)KSadp7}zk@ znBjq_-02P<9}X<1$+70CbCC5C91xZ|uF%xI#OvW8g;;K(^sPjIFbuJl0ZJe+ z9?22~7v#cLqX%0Uk9yeXw=|yif5KzC;SqlSezs9V99V4Ul{Y#P#27hl4OeoVH1NtO zrfvdom`x!C9c*!QkzsJ-9`+oPEeC9E)+Jqym~#dO?hzrj%uo#8U>EgeiB!7^5!9uQTYmdIRZb) z3RAXx)EzkVZtU;jx%`)%*2PIM6&9ucMsPD?7>c_68hHWWneZy*6%Lh;;QdgV%ZNmY zF79JA){vi>YYac6)9G{mjc`{I#A#7D?X`U)3dT?DuX)%!cBu_|c(l5N`RUUN+(ppg z5)}|GHVIq>Q=96S0CxM;fPj^R#(>mY63oZP7yG^jo?qd35t$w%1l)p`e*^NX*%>=W z?O?h$pLN|W@E>tDeC|vrS%2?POclsUtB&W5|InVP!Z%IDUzeaz?yo#5yI((2k`Je6vRD=nCcw}UIeDfL;h?SD{r&dc2p?%}xinKm|9B`O%!$k?(AMhM4 zE=V=3VlI~)UQ4VLNpu=~L#+`*6U|qSztD?Cz8Qw`sNaBH`JD|!wwSE!t-}G`xR5}> znE;yML{hs~12GcnQ{tHioSzK0iq`Rp^BDf(Lzoqxt2+|T*y7XQo6jr`3*^B7{06uW z5I7v`=S@k;K~#{KyAa$EogK*@aP#&ignzu*&z+r~ixJx~uxHh3Y!}Etn+?+|UteFM z)b!KdLa;<)5Jsv=+<2JV%LeMFCr^R_Jln|fx!hfU{v@@ zNkP&T?*sN$vyG}_cdB=Hb=`tylm$mF(eQy6iMb^Kc2U;y!F2*3lw_-;vi$+0aWZ=$ zeFV4<%t$36a!C^KO5pGAp(tgZ{G2Xf?&EDf!HlOI>X??a^~rlcNdMDW#qyb`K$Y}|j3vD46qd~TK5P!p}5jPG*n@9S&i!2(22&iCO?9Hzk`oKAPu<6e{O zMvS{I_dCGp&M$r@@wHnrU2A_tG&Z>f$Xa=UUs9Zs(af7vUJ|dYoxNqfo0-C+*lmX* zydM;bPKnegvgsRzgAv)Cr@&@)#;VbDtZCwTScWhY-P1ht)Ok-@Zo_-&U?shc;*F29 z{GGC7Y`oX!ZSoLQR2^@D9q-KH%wcjP?VNpTB z1`yNL6Y6s8gmLgl$e~8B z-m&*UE>T2|6+GfmY*>I;+DtZ>fXJ~W4Rcc1m``gmZF?X>?`=sES-$*B@vMQN)TM=~ zCbsZIYn^wx%pt0;Jg1^qo-KWQ{vmihy*O~Xtg(<5d~zFG--KXGtU8R#V;cnNxek(s{Dj&kHgO(&vviBH;Yj?o+{^(Ac zZSH`RoLjGp=s?l8vE$-JqwRLWKg>ZfQ|5}UXJ9yRN-ZKIY9NLI z1`f@Mx=auYk`X@O7vh!B4ur~^Q*iHdCy43^Bb+##p+`q*{hGqUsc|m2#yw^-7OE5m<2|$ffsZ`ryLYA*PcEC^y)waLgcVQTJmm}|)i{pxamZJq z`wPz?neUiDQ=G}<30PSM_?@@~WM~aEk`s}XLcUh8k|cf#JIuez9rVT?{soTn6pGya zJtP|jpKAX6#cLtMLl_!?r}#Qyk$G!!sy*BX;ucR5PP1i8YuYs2hz8egF#cM|?b}zO zP=M8*Tl6_aUcG;d)MX89oTHL0ZWZ}W%6+vksN%_7&m+8b} zxAtzljlV|Bt22G4?*C;uC2n{~fS><0$&E(IBr)>YMW*Dy!GpaR{(X5)KkrwIAtr%H z;V_=_z3<3>nlGRDW`xY%={d5GlvPS~F@w{~vWCeBV=UafzZj?hlSp(62+MFgxZ&l+ zf=P0sb?-ScNru1#fd;k7`mAtzC3NgwTQoM;XK*RKb)|b?rW~vJ{G{f7C(K~M5oOp1 zAch9a+?UudsI707l8k_=Pm{$d&_jXAx_~&h;JMO;u?E_)*a0D!H}m-Q>SomDOpCH2 zC!+$wGs*)6nFKGqb4GY3NNn?gI3R40uz`ToLKpa^y!|HKZG@@wLB zfH`YbyBK55xJ8QC5Wk=q92sv^ z)|QwXWhW<_2il->6ATibjsh(TvLGmm$jC^wBI=4I%cYe? zliA{j*&+TXf)e zshdZJm##6Y`?-*Ul;1J#Kf;q%(#H*Y^b|FP*V~8=3*G+S|7hqaEtrYb&RzFOK@nA` zd(T+Qt*%`HrCVD!=-1r9)2c8@la-dLLT@gJJA-YDgpJ!3a zo|c~9wpD4ls8hE*GdD2zBEG1k z^g-RJi&#qHkK%FibBuyN+Qv4={ub+|=nz}D>(BH6V=ObumLs?iG&tF|mGd;VR80c&Btc_^vWB+;R@zn{q-NuP0 zfJmtEMqaqsP;-y3e}9n!Y$JrZZg|k%y=(2!S4=$M|3Q%<5vI$ z8>;u$T!~3`(k}MqRsaWO%@u=}Upz@>tz_mNGQaYFh<8)Y^UQ*I z2@L5mL#@Clhxj;;K%(*kL+{n81-xv`@HS?f8g`muf;UPwP%{_#rn~{S5@uJ|w}n{GMpeN@ zP$U=m2*IET0q*PW@3TMYVIG4&;B}Q-QS<7Og5kdX*GSSDK?zNMm)A<#vSExU(+~fc zTa&^&ckchTeX}h)JG+XV7Ld4Fv?sR1-Cl#8HTme>VL{6+tojQB;ykS~lif4RIagUn zfBA%y9i6jUx;m{_{E^j(S+fo)8tvCKBgZtTveaftQ9>TJf z=yA~d?Z8aYX18%I)aWa4E9MIvzPFvk79nv4sE7J@$4{R=0VJ5y*Egx=CB)A!e?Al} zt& zSwTS@kinBQfv}VmHk5`k^74yOG(3urCx%7juqAaWUY3c4g#}wQF$g0Dkn|RIMv->x zacK~ucL+NH6evTTdL#sM@$wQd^d4+r;nq`V`%D3qDJt@tC`ghIgy4=r@k61klXAR; z-*^s3Y(-5?5hmC_fM4_Y#6cK^;r{KN98J&^GT!c&h1;uT9v$)NY1+@^3|aqv_;HcN zbL^PQ)2CZM%#K484~ZxyN>vn?M4t+tF+eApWh^FZ`xF#dA*8H$|Na2zVTsfhnOkdw z7auq~IBS7r$463L5I+Je>qlVl5(5ZGwO@3#z##_mY0~-N;b&xa(`eU#U{RbwYV2;# z^TBeaVUAhx;X^*m)_(xH@3obhzPyaL{d3RA# zxc8sWaVpg8-vz^(g3)*w#%j0zgu`bdO2w}>7*d}#HU<-+s;Us~`lstbj-S4HN0yx& zZE3rfXE(eUHz*%)|3)@uVn%0N`)pQpbhJu$9!!bGv0V}W|FpC{c>QO_b-N(;v)Ak7 zmRcrt-DPrfZ*R+C!f3^(xN+;&B0zqm7~HsJi}bmocHvid26IE1Yh8D6zfI0Nk^aH4 zz%cLR)kQ|7?ZU@TeOJ?bm8+9|jW28X@rLrf?~ZZwNPgFyqdMm2%av5EtTc`vHgGXN zZPeuWvaF2fYZ^}*EtNHP=x%`i)Uf^Jod>hxZslexto8{>{E(6sIllGbF72rz`Q#Aq z;sC2rCyw^y&MUVqLMP~D{+a4sQsLJQT+02AF%!2e`*X8DOf3)PvcY`fR9{f0 zZC5;tae_OgB5a;G(*d3P6T|HjOjoXSL_3_16MZJ0)%o7tvrDK>d*zy7rx)r<%^_N! zT1(z!#R_rjtVCIYpcb@HbHT4c*k- z_UpJ5`7!n?UehTKjPt)BYfPu@)UQ`(Rx?aKqKO>{ihJqTJiH$7TtVL7ucUOBS~iOm z=m#Dx!RJ^dVZDR*0b#zx#3<2&Pi}6n>z@KMahFZgpRd$bPi%XS`SUGZjd;GL5W&6E z5CkbkOf2l%UOa%2N)e0kk5dNOHvJ@temVD~+@l{~vU*&8J?La#y6#*3Nf#M^7>6vi zfqz)SNpS~z`wdHei*{(pbIN<| z0T}Z}T?xfb^AL79)`PMs85eMf0-m@Dt%=&$DC_#YBsk=Rl2SgNu8rG@;-77FJ<0xY zf5fjXl1pkWcHD~U>Pea-NyEHyWe*y$N<^hmUVtD^gpQbosr<|&?+4zMFbjNvo%CVk zn_S(+c&Xh55B}V5pFK_S{rKr1M+)WuppcVj8=@K{nHGT2VX}UX`B0v9?`*J7rD1{Q zTwZ2_=-EGD7!2IuGf)lUu>(=KtZZ%ilgB4`4yaXd|GMtQ3Z-a_c7TfjHtZbSE|ds` za9a!fP9&K>KF`|gI1V@fDl)WWWBVs7v-HXtlk2QM- zgh?+3PVZHiynWj9=aF%C9{2V*ljU3B+G&aD;Y*%$VT>cMkDJXSK_i>Wx!I2PRvm00 z#Ca41t(dYW>t%JG=|o-=XWUc*gQ z19M^~Zmcdys(z;$oqNt;HLH1T-tgl2KBvD&gi>#&e*G}t<@9%bv(j#}xs=-mU0=7` zv4@_CLuk=U!@Om0o>kjFE$kLFd= zBl;)eD9{6*li9@t%{krTzc!25s%}jPnDysq~qDR zK#dXiD#vdhLMTlxesJl8I|7e zi9PkbM*5Fe>VmCOSArTH^_=py@}9S1F^cTF zp;iI8_Lt7ig_}2T#?J5v=qJIjF9IfgmQ%tiL=^P-#-bZnAER; zE}-J$M`*kHbpkP!KG*Z?!k>B)1Jty=XPa>Z{CXCc{QY-VJH~mWj4UkdQr%ovkz;2?M!ehP@n9ICTC*PPU@r@m@&U3) zd>c_7@jl3#jJth@wy5B8Dlb!L#^lZ%c~83Y*EBv{m9(ZK$bjh1l z0A^yve!NtIv9wprqEuke4xRE@;C3V=Z1?Wn#EbRyQj@0a=jY?*6Jr2~K`0bLhQdyV zUxe}IED9O$VU$M_U*SshST!}z`kjq$l#16bs&B}WgqeNvsVBriqqii zRu=3U=I?PHvV+WAoUV{T1ZM_I(e zvYNh@K@@=OT*CT?Gqs|$wDeG4SxZX`5)5Vw2~}#o#$g11E_OKNTmwOmG$>@(!~slL z!XY8+oXh3YK%2xGKBKRH6P!0eZ~H@lS_9u+-z8?*aUK1v+pW{5#sw6V4;`A<(b0jW zr}88Sr8N9Mm#pUH=6Ajod*I2K(qHTR$(7Gt59wbW`Ckvh+Qv;J>jmAuceUV!BL&X{ zZU+Z1!nW{wE9}cOv#uOB&hrp$(m8-5rPT&u1Hjx|2%!HxCN7TUbH4|!+Xw3ZN7#GE z_5APu|JfODGD3D~P>7T*G-#VeMo2}&Dl0-!C_*KX>@pfsk(I1ALX=%mWT&!;-}UaC z-#O>|{pb6+T%3=~Iq3CzJ|Bu(N78#4x!qd`73YuS&!{noc;f2;a_RD)fTr2`cxXV zeu1MStE(Cy&AA3)sr(MEB*=41$#h(k&RXG9z8>;{VY>Sw(Miq!NkGBpNZv;0f& zjfIy*Z6j+;?-dsIBW=qfM@oRJltl*)9t2=eB-Eu&9dlNjnv9gEQQ&fu!b&2t$P%R} zqaN`E^$^+v%^B~h9@c~{n7B2Ahoj&Nz{F!|#6eG6`=<-`+u861c76PkhZ9!@3+w_3 z53_Meo_G5|oqdL@Wu5vgrV2dAtBfMV7~|F3w`G97D?YtyiRCalo)&;2Lhcwndi09l zzXmTTNxx~;Yf=X5wf@awr(F0;*hYkeq3!cu%XN%Ljq=OAu4_Dc=ZvQ9|2LitUt!R4 zCe|LOPM;?GY^KYa=jNu@`}Uingw4Fe%lxAZm!+N-9u&+~hlUQ2BykwyX$0)t*>>ug z1;H5Wipo-{$%sY@iuLOXiI=r}zW9SUTv`)Mk#~)?&*#sd-?B3)sUJLnb=1ty2_UcF z!(a$K^?g-%czDYW9fD-DAX}rQwQkm|*=>Mja!GgC)YNs^6pU40-cNh=`t|I*9X-F{ zOFeG-^etx=mRx=KP=y6_Cfrw9LzuMvZyN`VsiE`$L|Pt{(4$~ud)L1I&xtTMjx|e& z9@oQQW5oJCN{XegUpF2*_Ljw&X`EzSgu@r;lw9~_3B@G2c&4@WKSZSr-ela;ahJL`;h54eBA0ZhqH~=LR{L5}V?l?Eg;+c?N&N_7HARH#DhJXD7zqdyg6vW6sHR0w$ z>o5|@rH@S(N7N_T7Y@13f3_N4%y*UvMWEaNq~8Fwo^Cfs>ADAw{%?gyu{);gf6ILN zQlT4%ylO*io5eSBtSvbHuP-pB;Q#&tF-1Wc|8pe+jJ|hW(%`?Pxm2GDZw~xVSPZEC zXJqI9<7cJUIrcw2N{=>q0~MCuUTXvg1pn5c{}js64OQy{`5J?QqWzdxp= z|EZv#V}rPqgzMQ(PLm!V8JAv{ZEoDg9aEb|@RDbdMumP2GmtZ=#G*Ow^pX!xcBd2r z1(kmI(45sAfe&{vAfq%G=3QOCuAc%YjE%(WIpY~y$7eBz5do(#W1?p6;ldgz?g$UB zqaeK~9nNe=$8}ilm_NF=aGl&SE(fu(RUyb+0H2Kc??&b&=2l-x@`DyX_s=;86xBCy zU!pbk3R;1n07 z&fOJcrzqlRdMP7U*W)><3!hyuIXKR(vC;RQ_@e!DZprIVlT+w7>_);1M-?pb9xWX7xj+imI1tzjSP=SU;NE8BGBj4X`D@H|fzP6ilzWV9Vys-RZu& zW23E_IP+55hdaZeJ=+ffO)R2Nh?2&3f+H!H`lUBKs2e< z31CVcopn|u66$iOQL07QT$SG7AzEWQvBNW6meGDVaXfpzdCjbzt^x`Jn zlz7F;j!sS)mMNrBCpZTDW&CsG552y9u-@^>iCrq*&QL+KtjZ2J`3nG-hmIf59rkVC zSHfAg?~qp`dRE-puSGvn&M8*!-u>|C{OFP0y74u>pE=)Xvh{#%U2odBJ~`W@e%+Rh z%xrDL7e~7Xu`%o6h2@F67BCyWQ&{*S;pdw|on)3LI?kRw3T?4D_)QLvzzo+et-X}{ zYC1ZWgzhm|3rT!6W5Z+M)~%Wh(>3r9jM}?P*ZL#XlKQ47V2M%1eOgVOJ6O!h2Y_r%-UI_v0-i`}H2sRN8E1k*F zVbtSBimKFOYGh$Gf2CG!+m7y_Kaal(lIeuGB{9bT+)gUS)`U+_kTnP5Qe-*Z1jh!) z?U5{@FjM^gtM@a-F0bWL8FKqsIwz++1IW0nczc?Tr_ zavGc2sHAed3IVwsjtE}^(=Z#LHY-I{_2I+!(#9_?&>lKBb|rAh#+1D%!gvQDB|ElL z&V;cyAcTfF6xpd!&Y6k>&|_Oc7f@@{gzM)RY&W-2v-ULAKCw>>;ZEvN2--waYj&e{ z*Ya0lwU`C_EvzTm+UC;kH&!+9x=sEFjE&VEKW6(b`KLB)XlQO>AxEZV%TZHL&AVbb(bP2H``(T)UhOeQ z4t_rgWBCV5w;CP%HN|Yevu)K+#UCut)xhoErtg2m(2FqwWQz!u6gJPG;S8YeBc&Cp;Ybo|PnJM!NT}}L?J8M^717#rv zM&WT!3>QB)fu6lP%v#1A{EyVO+bqrqy2Fz#jke!FRF@i#Lcfec?8eVkpcNH9-#LHG zOcL{kSKr0`~3zSJAQmNegH_oX2d-1 zI((%+#Mt17FZ}Cbo1IhzAb2@Ddt<~A^$}mIj~zR9`Clw(aXbPEfX$LL>q=cR6mZBH3JHOQnYV#t1Q za>;$F;E-fb=LF|Db3|mo8tLZ3T@n?70^^zuCr4oG8iE+q1UagdY~Bn0WxGKeT;ya?&+BLUOdGC!-8(EJwt%9IGtiiE za5vIkIeEtkva!juX?r}lFA**zrN+&hYw|g|b5)`N%A8n~qV~ESkEt6Wapt`VK>?+#lnA(b*A&T|#4xyq0CNL($Y$8FQZoC;uf6%cqRuVzt!8}QFygS7cIwe*APVXdY?*_k*$LjUJA4Mm)saQ4hm~i#;(s{OA#KI@7hg!mUg>M* zxw}t})b)Yqb0|LEiYJ`4O2al3I!`#(I_LA=8w{=>lLzkKzyHBmx%B$_cKGhYm%ryh_e5)#=x_?<}=dTefW3HAy|4WE}z? z5k_Sx^_HI7y&fQ6Mx=qSyRfsUxTS;nG5m~{*zC1HcyRMNXx*w%P!A;| z#j1}VyV0a;pv2aq8`I?XFJin25!4#y{zeDQG74$ubCBV9yM8FXxQEXYiXb5bt0B$m z6Ys#j*Eqat@?)%({fqbXznxg2mlb}d&H)k}yJIprp}TD_U~$4$AK96drjJfYL^HE- z@mDKDA~~9vvv%H4QtxIe>p36+YGsn(_1(KFDP4a1%|o_AVvZtq6&%&8)cc?bfA>3E z@5!>9$V`;_K;je58segoI+k+t!13eXO%wR@M&rjP<-O-`L_O{&YjsExwhIRG&}#>F zMV~Wd`G+m!VW7@Pl}Z*|fjrzWkKib8PP!G+n=084$PA8MR{ZTT zqenkyxccCWXcaiUIDNHF>fY-WecCjM zyQuo-TUB=^beZNgm~@Fgj>=5u=^8XlQf5z{I>E@OF1@>8ZWMQ1)kgCQq8qRIQ@fms zaSnxWltGLsGc$Nwn{WY8*snF78|L6_RvRI_+;{Ka|8*%E|&p8$~>HyD~(c|0v@pYbP+5QJ{@TT1*}y4&67K2F}g}JQgzA zl&-@U?yA|Oi5-^FS15t7>^SDaU0npdrGu;V(Vo3H4%zlY0WY{ULd5OA6W=GEb4`=( z;Q%}A;>hUqk_kcJs~ty^w`b&um+F-FN12NH7}_R$stHi4ONM1>scCSjeB6#J z*-03&^`aBmNSM3INaxb;A3C&$ccABY8nnnaZ2cMrCHdKj)^@U-YdSe_EvnCOKbn6KU#gR?U?$$grZKvR*dtQK4wfKZtb(^rSze)P%t?;^rAB$ zNm-P`L}k=Wj!_k$$ma1mjw&cYWhk|T#p_uk2wbcnEN*@tSstjuZu4lpA79>Y#tZLc zQOKA2!lXONSdN0Yf6HY6siV1t*g%S#AKnVm@J$TLCx)^iFWc%e^eBOYTl0xs>^bBUXMm=l4y?YQvp=yM;rUGxDIvD?1Bi9PjhOHfekq!dlt zUDqd0n&i)AA30{s#+25R(>--n>k|;K!imUSkorxy7&!G{aom)|D$8|+luR*QMk$%5 z-wx9S`kwARdYGx-s+u+%Tng&a#;sdz!UsR8>*srVy@TP*83mu~f*{FYk#A>lV^qW` zm+x+6{z{~BM`VnxzP~HsAWXjt`oG)!7=@=;CPtlti1iOnWv5t(o3$()nDCS7T#If> z-3$!EQ&QKhGm6QtMEQ6yA>pR^bp}^7*MQ*(U!vx|Jx0YP%LIlD8NzTh{?o#diqASf zr4R`uMYmT`3EYyMmF3xdPijiaHDczavt9QG`is57=Qo9r;g$z$D&$rCVXC?7jE(J% z)oqo%+1wtisjOiTIBCr~qtK^K^H$Wn{0De20L5$27GUpAf+{lS*-T9{8)M04SY?*fa6~)-)s9>SxqyWirPgK5e9CTlwW(Ao=AP1*dF@M!k`9 z?(AgNfy(F$=%0nzTV1zRSHG}Cx+wF^L2G{x<6zsnv#D4G385ctC+WT)3Pa7b$z(p7 zeo+h_?KIN$!FSM^W}Sz$VHizTZ*#|L?AS3J7h%`fi$p}NxuSKkxb7w?nt~6i|0zU5yTg1LI@Zg4BXUrF1zg9 zzzO|w_*VCM^A32|yexb<$<7pAj7*7Ti7kpo89u~~TR8wu<$9&7<%378{?Ufx=uhoV zb7tiz zcGXwW`|?p8P3xZXM8F|ti4;3zyp^Ya?p!!GcP9^|yPjSv9+EKwGBDfq^0%0WkeZ^J zJZcn_fs?_61E(_fg@f_8mB|-O&AKkDO8%$#q-w^UM4sqeE~`n81xjlIxz3 zT=1+)TvQh)AD231@A%z7Nc@J$$y-co2v+3-tQGF5hq8|$R%G7zGqm7O0p=)sb z+7LiRJhLbu7ybFYT0D2H{LbsjQdJBGN5$K|;vS!Lzu(8j7DWD+&$vdlS^-MyXko72 zzaL?*(jzWyMo~#vQzpCqK|xK3rdp{%AAi@b8Z>mMOoAZoIVJS$-u+tq$sGwtK46@} z!#4Kt=tZL?qgZ%PXYAg0qA;d_W4VbhSk)$vRd8I;n$lT&* zT-fPdDIF=s44C>}o0>8#blGjcTXCKe>Evqg#ySK{>4UfSqxaJnoX|OOAUuTKpA=V1 z-aTjuzWFR|>Yk90D{Z!F4_(er$;hvBLIe?V|AczRpXEc0q$VJW%ObBqi9hP@pR6-t z%`e%FDI#EVb91Mm`|mY$ohPTvi{_AGOD?Yr`Hu{8;$Rc{8bQCYSxItYQAswhrH%q& z=x?RM#hWwjI(&xCvTBA7=pd z3nysI)=qxF5G><-_UcuR`->@$+O%!!$gGWG1I)cK-I_4zNgv(%_T7HB{8@yiQeJ8Q zkkU7AroLZh*wO&P6D5IT*j1Uv@dF1h?a<>wTV3pPfaY55R*Hy-7{gr=eq?dT+|VeK z*e%qhN%~rb6>;?M;`o%L7(#t^g*+qw2DLlB_v>i%Qwk=*>7u>UUi#zajT`Dae~*Nr zHsaX&-(eH&U(7dz>B@8=HZS}XSySSb?XFoWFBa-y79kZG=PWwt=M{pDxcyJ#R#@dZo~*83y8+xcC&OAdRccm5bODf7p5qD z*gYkYgWL)!5rI+=);FRW#}-lj<;mn220c=tg7GF{0WI@oc+Z2@ z{2C;_KMrx)@NyEC4c%|&P;k4KafjAs&g>N4Vc$3|S9=i$2A}G6OkOZ)5)C~v?riF} z-90*-AZpD4x)75gS~5Av4o|ykgSu`&&x1*ccwGTF8Wdc=bt{`VDmMYbEU?(+l9HM6 zzU|vFl1!R=tINw@0}KrCxtJF0u1Bq1MiIm^rT_-A83n`AO&LYkEA`s6JTqUJdE;3) zF~D7eYF&0FEw6OI-C@FWQ&o-Of%ScC0`>suQ21y*FE3Irkj-^dXrAb`Zbc_NO<&zn zJep|i1R)Z)G8!JiVRWpiqgJe1C6=hIRVeg_3grZD&f-+2l)u`KYqVFbCG(3UuL>Jn zGAB%K%$wC?SXDkPl4(q6ZDWTW~Uk$IruF5gw<-E561| zc#yKD_MhUng>f6<$^}|!GgWHu;^I>H<@t%NkwZq#^vutjc-Jt$K$GJ^=q0N>OBnwW z&Teu8(MJJ{UW`2knVr;m4e(7S?)0hLZ+|}6L0(c+{?|%n*CDS8x@l-Ms8gp7g4>~B zBcQUEUw`HqO4ln&e((+vL~w#y>3-61MN=UAb~!}PY0}kd51y0$MRFC$lUjqbq}M7C zJ>F|%iVMb;wEZ`(?+fxdzG;SvL7@7I+8+jGgU-ymv(776p>%C$9j1~~_R8vFu`1!K zCRBe-9MHH$i!nYvX(pN>&{XOhDdNX-kSYC_;m=#YR`A)^z9h{%C8q+KmcHiXVIxND zKmI0Pg2`-lp3pMQQCkEdUD_xixD5Wl45z}cZQ#$qZxenVsa|w*Rn5nbzRVXy{Yl@l zseCpaj0zn(Hk>+bNgU43|Yq zV1G&5t;|p4b?nfgdV$W0w?(~WaUsc8`hQAc#HhPEJUs?OqYM~87`1&I(sIhR(pP?t z9eo~5L-+!2ZrZY9omrWfvu)V0Auaa3<%AT+y}m?ks;NU9F10e}fE{Pw*fyGWGgjoI zP$5KW`HRVH)WlBmSs2lFCcVmb31A8JkadyHl8I#*1z1Lg(dydT+QDxx!Z;-q2oS<| z72YtS%;BnI{8As)|tvsKTr{bBH262uK6ySg-0-&X; zIPt*i0SF0w*^L@8lc61mn%33)Q9hzrF^~Xxu`=xQ@q0sKIJj5^$}88}cpmMoTIEx? z9z2>^`xe5!7i61`WXkKL*EhA{c2oHk4cK{6b`un27rmr=s6UdH$P!}GxkmW z9b>vFo$Rw9bM&@27gNZ3r5LdTQYsnsWnz8y!iCL)R6L+dfoNUjB**RbojugsZXW|^ z*|N?6*N<84uJuc+%gu|X5<%rGotSxPE4{9C1Jo2{wVidhG0#L2ml<1z*UgoztPPXz z<)Bj$#$cx*OB89e*Rk@1uhwtnr+JL>eZ%a&cUoekD2*dS!p*kpD^m2t8%fCP57NB* zdwme@A*8cc%+Uobwx2lR-O~&0NJ|jp>ej7SFK+4W?>3KiCZ3tFk4tYvzjr@+3_s}P ztSjp}9QA~HY%zZnu*wdq5upW1#PnKkOR2#$&lqZrjHDL6C$Vlm)nU%6lpEo|v|Ki? z^oQEU1(*Q+=|btL7Rf9##G+0Nq%Ei@lXidoZ9rKyit|r%*wiKSxu8l9PO9QV-<1%z zBgF;Uz~9-?+xsnm>S0yP$wJYj{eIzeW!r$GFBvAV5J+g6gr_NIOzIg9wIvGBIIKM# zx7R01TS2JcOn?YMH~kYvo0^WAF=OxK&58d5mo)CW4d-&EZ-Z?0B96Q~W5XYx*q$nE zqgXgmEcONSF8(}J+s4GMVM%U(D1LInC{kZIPxH>p_Z~AQ+s*6UcdLD`-@H+y+l{xp zLjC;=#}*=pXHlg?Fi$a~-xK>f4AB&9*I$ckvcW+a8iIst(jaa9&4w$}g z_-)=pQwmWi7c3hb5oKUIY0`Fxjc6}mbUlL!H~UdNsz+5Vt&OMcmJYOoRU_cc*~Q(D zo^*5_VoNF&0aT@$SNK7G3}v45(}UVUN){72Z`-CjH@rNv727A_t_jfk^l9e=Hh0Vq zi;Y2*#4gF!^seUx2SNB{s(4MW!FfG-3d_MC_Oe0e#OgfcYUIhB}EjmLe%`SP(hjl7Tz;;1M~Zt zxlB(Ggu%dayN8_@auWn!lt^Q^oUBG~<1joP4Q&z_5O-K`3+gG*Q$P5O;6N(^JT$em zkonaW%>~bRF%6vvo2Y>od3qYb2Oj)dxlNmqJ=*B?|09EduV3dD<7+?ksPZ4i^Nv8l zT&mXBU2jl?GG!F^BCK?M!}eaT_;`zZ8Zy8c{#zzs?Vyc6civ$piJ(Vjn#>xUo0w8I z?(vFwMVho50>k z9RwRLvysQ4WAVzx#3dXTu0NEm1a4=%a<3TzQRB_f$B!*&LH;QWclMfdk;MZohE;LE@-Yc13C;|51h3F$@ZK>C+{ znVHmUN$d-AxU}$cMbvLleR=e^Z{HqiVp5+mB^f^BT*53BVF)qgpS57YR)U(?rAgPw z>HUZ%EI+JA^XAPJd?5l+2wuqhGT(^^g2|UQsayaCi({`doVm<(mj)t&k8L zijB2^Te}IKl+4wrfK416_AwLN66V5~G8e!BZVcHmh>I+w1ij@Srt5(&sA*|sd(6EK zKOm5azA(Ck2qSDEVwnato=hO4`F%O)RFpo+Q($;itKqTdT6Z6z1I74{Z#8WAfcA zS4NeKkw^jH@1cVSNBwIoclPWqmI(!c8-zfZ-_8#YWx`jT9M{ZmDA|2(!%StpoY* zUqjp<%qs~txDN4814y#f9SbWfb!eW^d`fx1e}D1&jLVmOpIlrO5pjfkk1$Cx?wu$7<84n^9s zP{d-=q)F*{Nsu#d{l$psU~)KYf$8anu;G}DDXm_;IvGX*(d>r(t%8D3qKcoAQ4TbW zO>D8v`R5FCWtk*vSwk{=sd=xrkqUW*)I{{W0`qKQSl*j;!& zoDU5K(rNSUSYx&8+O*NYi@D%RIh;NBcmqyW$VSra>%zE*2ZLsk{c@;c1DP>YRadJq zXo@&)4HBKr>$?=!Iq1KfD|oyeX8(KCmHYX+}9`UWKK5>@?1d#|>+ z6KmctrTY7^%N0tehc5rnH*<=pgZX$~ZyKB+O~99?av3>!aytx_)iP&@BjxPbS9*>a zYj3Z@wQ}|pO!pvkH;zfaY(`I4Sg|+7-EH1HsRfxv$<}JhS|+f&>Mr1K1h8J?sGS4A zDtf2pQ&T+xsjY;b$4;G2}xq%G`F7yUCo%h{-U z^XAP$_ouN8I_>%M5iaht2|5sy{Rxm9V}JNTi(_Za2!V?rz@z-|ix-FUBO4njG7S>V zhe$2-^(V#SD-Lx_HaP*A89^}kQ~R|m*8mu(o86Q*mcv$kX(n*SU!+GF4Bl?ePxXVx z`QE@ZS06k$Tkswn7pS;m=^DFCh`i$HKyFT6V@*9Q9!N(Bn`6u6HbK$aCo5%H# zDeI+g!&T_4bXS{?QoMrQk<4-6CQL1l8f#^haoMllVk~tX9>F;jc#@7^)&8(X{l}kr z89p5wJqmU(>ktKEl!e%4W@eYcK*fdtW^N0TNt6MfZ!24yMU6xE#}s`XkfpRabbwVh zei*t6sQK3s>->39C8XV5kS80rck0e;juAH(Z}W_e-+dyqUv6$~BygyR976% zq8(=HLYERfJA(kxD!{-LiEFFl7X@(~JFoc=Q#IQx)RZRLnc5`I@*O>U^jMUB?gL~q z-ctRhO`A@!w|@plQ?2#rhXDJ$HD?2iRH@EP z7o-;6yEjPLpq?*{zEHZwh%s`&{2-wCmW|jhV545~(-JIa*WzzFWgKW(zNOXC@7BPc zpkmqd6Vl`yxj7Z&D|SihgKFpj(=V<(UGV$nbnO#3(6^HM+0bW@f>bnQ=`l!fE2lrF zn0>|^4QXKFsjbFfWJ#-kF2lbnIN~?JjXZhaN4z|#b?U7BQ#+6$y+~n&FUPZ8@#9lZ zt*5+>L+rvy^9Vh1#LsWk>EU}7yS32M9ytGehR zH{DmS0N<~pz_d&Gan{!hlkV8JZ4!V?c{EY*Kuk=geG7#yhCYgf6ot#wbW)^Ck;x=X zTA8J{d+yl3d+PLyNAIc8`DEng2GR;)l&=D_%e2dMfMQj!3demF1b+WvAiIm2*Tc(8 zjhb15kM6`nkX$lo@Zb<8-r^k(TX!Vo+aOmGSSw0et39Ss7YWqS`1)K+#sncOvNGzbkts<5kQRov1~`l+VerO!_o?g291x!a za(0p7yg5G$f3nLsmqZ%(Bpo6r70-3c3v2)UHo+`|x;B)GHjExK=zR_IM>QqIDelcx z^h|o0lG}v<%i+tqZe#97a14hj7J|?(X+EqKbwFJwq;YBQ;&&|{J}0Z09=tfIZjV^) zzG`mSqfJoEn0xwN?F&>tyny}^?nV-fa(Wo>;VY$5mKJI}#bg2-bnG zO-Ws3Eupm8Oc7vAXqJ1SKa3*n%QxWzbnpw_g7PtP~d)zwW} zWJ1XXPVW_)^^=$>x>G(MU7(}gY68$U>gEH)0PJ{_rn%0Mb!aSgSP#PJwPwDpzS})T z`oS#RTHWI{5K(XjLJTh;j3n+a_k%iecjN&+kB>xUU43Z2|y4$i#@Jtj@N zvRmouq)&6*D;X2+YHRMS&c5mV{H>GsyPCV9({05dSmtFQnWp)-AiBujG{`1}UrJ5{ z1;t%-)|m;cw2@Ke(H>0>j#FH;3&flKQb|yRmI$!2u$$TsgJXrXx zG9IUW%a4Ss;TT(XzdrhEzWpJxok5Yd@l@A(pzw_jEUReL<8%NAFfcec;dB``dW&P9 zuzA>mPRER9%EaYuO-)TMy-)ht5@j)sXn^{^{T?P6l?&+$oG9$m=J)Q^OPvTGO?H=H zbISGZ29L+7!Ias3e+u~pkwDPm z=GwTQ98aKnN-{#U*7DF_>+I-FlcF&b;sM$&XxAhls=5=L_neh84F?|wm>T3+zG=z_ z`D+N$uG)|75EoSD>t4&rQ3S%Fp!P%RqWe#3+UlQe z@q4;LmWWx|DHV9TjL{}c*^pf?`Hg6?x&48k>wK-QUdN0IR&DoIu7!x=*&Vat%n4-J z7M7L*Qk$5X_G{UJpT>{!rNtydHY7dCZ!vYJgo^@~+CclZv5P?QR@F)TkeIdR`T51kerhh9HF@8q55c|ert z2YR$@l#u-KcQxOo6#O%->7oV=8|ocbC4I<x;1DS zmkQjuac@_29?`3pRrJYu)^|XM5{Y@xV)f|lOdo%vIzu3 zIRxZ1j*-xXo~0>odb+Yhp#|JGYQ9-~um`7HTZ423lA#WAAq3z?l|pc~dwj$qimFK5 zU%^T;xmJsrpTIRa%!{DcGo>SuagN1J^9sF%70;imRh3mfIoDeHJ;wSp9(|InyD6C! zj+)#0>G+4SKBkb9@_y{%6S-W}?b@(edtbWw+2W$vyg92WTVWw9uI$C%FBaT(Y8p|~ z-_WoNr|6nry+&flz!2;JZ&bQIKv;Ta_d*+M>zi(!=NTz3Y*Z?FnX#D^l?q~`L70(6 zWcgD)G#`DNw5X9Ue}5L!+D%x@5Spmnr54j!mCH7M(j>%wj!RdY%VC4fQ-@<_ z$}@)~(-?V$V4~EqQRl;ftGjM_6qIoEULR&RuoP2usaN?n5i%%zQiPbi}d~v$7SY!rU1&{)Y&=b~Nynjykj;m&@y7yOB!}l~k|qDm_Xowr z#ezZc=L!g+@=NMM2GdvuH7_}n5gB=}l7CQL^hyFdqDB;UJx$q|=>Cc`$yL#7W<2*? z!_3I@!{}-aumCe&VJ;FD8KnWpY$fk-X+-(Zrfpljy-m3R7Qj}UjvhT~@?I<2Wq%m& zqA}o=|E4u<;l`^%&Dpst*uWH}=kYS(!56UdoJR%S=~o}^Z%CqFkCM~=&A;>7`3%?n z!HEXXs>7Qa9={zKi$z#e_jd(ScoNPMp}9 zTC?5elWGQ=vZh>E)|(sLknucq_F;0gOydyeodoAK-`%IB5NrfpflWCQQ3cD^{BYu% zMV%$|`fSufFYvtoIFRP-T zR~QM$4}ZMg;oHqzCl;!Y{!1jF@^s@nX*9@P94`L4X z>@605JmBY0>&1skSXID}zqY^br*M*Of?~TuoKjX{3-L7|7aVQ2Ktr)C997|&FK+V8 zuXwcU$VCu5iV|n)de%xxSi{CwUAOQ{Hg>1?UjNxej5+Gn!?N(VX~m`Ziw;j>m%z%1+7vY&j+6|d{=-|P!C*_P)Y z01Z&yCD>LOcTmR6TD^@Fnci%IE-Fq*;8cxN>mxZ6ybjgvB7vBeF>i3Bu@M^^4&1H* zr>Ienp|Sn%TigMld5unsA%qbR+%A4f9ZnM|ZVs|4;`PoqRS%z}sX!7T%ULZb1`0HZ z&8FSb%e0Md5V6O~+zmlOdjMmjzn(WA0v*J1;>S-S5t3C#u!T*6Oi^znNw%Ci~K zZ{npq8n|E!@Jr2*-{i}GFYgGqpMgx{8dyRV1)oFhqD$@Qhh=%t9IRNx7Y(xC!NZ5^ z0Z#C8(BC0Og^gE5EouxWP;KD5zsY0{s}8%+D{o+eFC-U=qrgudF2?gsS3^}#d}Pyr zaS|(qpG`h>Y$dO*9dWfaQ=Rqv-xTXMrCzF;_=B$=Z&?uj#Xw(w*R3kc{1IIVZ$h3B z6QsVJ_f?h7HY3_0q}oj5^YYBZP`nXT2wx|Xwi2)F*BupeX`^$Q!S~<4FezsT@$tYw zre~u#@0sv9L9s^u&R{g3;)wdb4VFK?)b?@CtcL<;D3Zw~y4 z7F-TWnJ5qzuM`YWPG{{m4@kPcy9l|adr>lsj_K{O=8}k{Fdx`SCiu3y8OsoWCDE8Od#BtHwW%7 z>#-WTh5&mCki1Qij&q}vmb{)IhFJW|m?p623Dr^uQ+=O*tWy{59`qI!*00)H?=xX> zjeWGfxvgxTmy@$8X7rAutf<-JR)+J;hS9+tY%f3!2%1!|GQCaE%-_2T2Bjl@XgB%g zIp`VdsR7KNjJiZQ$7S0ll9!RRHGKgN9O7OT^x4wbOtbbS%{;*~eV12rpY)lsr-CH6 zV(=@5CDIECX*Q(f76SpZ(<-4T3n=4n?SKfX{P#yjrJOS&y`0T#LyH2gv=khe@Xs-dX-duqvU;n>Jes^ATJ90*Jg+g zmzwPUgAZ>?Cv0*Dq7rC^_U76HZ+L2A(*&;|lZo}9t|d&J%Do}~QgbW<7CGMTMce}A z9Jrm}pc{7XENZ7U@vPN>C;}yaN7*$cmE6~BT52;!)~|{$4i!$8yYtfr588ubWHJIX z&Dz#!u-Y=OUaryO2W@dTTgHHNDog6fK;h@1RRwvbC)y8q&m=o<-7K2dK;9)&~q^G;E2=HvP!$wZ=k2A_o3dv7srfU$+j0FKjdc zoxPeDYL~Qr1pkh=+HTr8dz>{}TlDFDHr`)a6Tp=X%wzha@bweihpH^C)2HO9cR{?< zUG^~%Z3{1cWpvtae1jKS6W#KN|0Y2mPt&|x3kPjypBX{03q*b`imk-hGRnd$JPG>C zyz&DZH*PGeesNutb?%*At!)+sTt9bi!P6lxee9E+8pAK$9oRTs`N?&oao3lR>XEX! z@}CQT-xkfmb+-|H27cgW?Oc+tuOO@DgEa1sks`me;0r!&`GA6yBo z&HZz;v+T8+=9>ALIK5f9e9q>OknyK02lnnAoN`3}YBv6YIthMvSP6Gy@6d=dCm>e? z$o^C65dp z5u@%=I*x;~&I=H9caw7vhm7!`qh_D-*38{=osP%k7eMb)DQniZrNC8->!EyCN!{=7 zQ`QOos`GxjQ|ih2Gr`RDn{^r1o|$Ru*ZzHh@@$R|^?4S$VcZ@bC{?C*Z6EObj}9;P z_nWgJrv~sHDv`)x!E0Z}^bG!3MHGJyj^#LDui@(Rqr-+vFZsq8gryU2C>wpb=sdWw z)df48e*B|apIB{sB%d<*V-W~?!v)1@J(t~*{l9>S>(2a3fGXjM>Vx4@z=+@9>iuW- zXUh&ZEGfiA?MQ1})J#n?JGfekJB_Rv1dyDyW(A8`rKT>{QMFx+7Hi?lixj0DnGoX> zus3G~vP_x*D4y4*zGbGamhzjCs*IXyp0NLgqAP9wd`2~N6@5-y7Z8{% zp^93QGR@%Br?r#bovuxAv*?~Zxx>99d#BqS>8L-iTgbYgf&~V4^5o)+9-{_BvqTx{ z81#vttT!7YtyJZsMc&9*4{GD(sM}&BB8hSUJ+{$5g;GhS8bV zZAxn{=8!26MKy46nMUO&Y0@Dw)av!@uzgu)X3T~z5z~4o{FHV*i!ITH8;ZtYg8fz( zkW#_{XeM6JTe!yu2}Ds#=3>tZ5kyr}bAxN^Rw^ou*RK7uFg9THsgG7$Iq(jSNL`z`}Xy*d$#9R2|aZ| zUe!e=(@>G89^dQpXv%8cb2*nQmhF)4cB1!V44TM*R!zqYFzcRnDXm5$xI<%)XL`@X z@Bu9nKw{f(?1ZV~LzO^)(qs3y`pCYHfd3>F&Z=MjOS4hI4DPd>l* z?`x7_NMIoPo1~l-@NGbPx9{D1)4qlYHSS)cu^tur{~=zy7-K*c3WUyDR~@M3RIdWJB!@K-S^yg<993So+}7js%R?%U!l#FYIhw$9#LTLme%ImSv^ixFXLYl ze|c0xbrhJricl!A2^6H6iOVkNA6lDN>e;m#V=(%bM*d20gcOO`;$_HSQT7W`Ih))59>2wCDH65mzHwEu(??k!Cx_r+UJ1yKK?9J?{+MnO72=lVc{EZGbW| z0L7DhzIzG>o*AWczdkBr z(uzy^Z|a*3ZPWEzrx5Aj)3A~!KlSa~cjUNnO88_93OJ{WP6XP85q~E$y#k0$)E*co z=H;fonO79AB6@D9wNEas-G9c$UfYOst?n2B&i?!N&xJ`BGw} z45L9gn7m~p!{*$GNh(mxHTrXs?Sxa%27TV%Rz~K|9G)!`n-aE)PYwU*RT^Mi9wc%v z&j05|e*S3q#RUZg!Uqu*0bK+Z`7fSawVnzjgR0Vh*8iv~D+?F64s!RHeW8gyjVWZ3 z=bQ#;4UpsCzWb)Zh$1&+d&=>!piL+&Tu*CubFr8xvLo;LM`*&JJk z4sj!Rtb$K)i4zr*fBlA6of{7 z*Mh$rbcy}KjwzbTfF=jBHJ8n_c)5MKEi?=b2Yt3xHBU`Vjqiw|f!Oa?Ngj zg1;qSUQ9hi#e=fX`%FaGh9ml(KBrG%C%%B=`sCuOcD&4-{Ct<7iL09~OAfdmbslvX z{S(O*9&Pcnlma&c)c!qP?gArlLo*&73|$se3pOzaw1`-n#YAj(m2?>Z4pFD_46}(M zmIWpXVkw`oH5{h^&e`N24{fvg7o@F|VJ)i?xAfml?!$6@I{F@rLCWtXP6yBZT)E0R z>NTN`lDiSfc_T9_Ar|p+J{E-u+cZrxN4S!8L{Cq_P@nT9Bd1Hhs+;=W(z(pM)1}Ew zYR-c^m#8Hd)6#?^W#C@4X_6{Xk}kpV+SH>yRS78HW>cWyKh^ShmsOR;!~a@Nt#)S0 z)mL>1QRUdoONO8ei;-T7Ib~X>CEQ3!7PmGB1u21J@P(3N`%G)eqr@^AB%~g3Vk2XV zf5S;hSFJ)fY@Q>{nn0^UL1SjVYd#=kxsQ*lm5rI6^8vNcUg<@LOq*h_tbiVBG#`ms zLUR$KL8hwc{Id5y*0}ZZ12&a^8!~k0{T|u(@x+0V2auOd!h6O>UrtRo7GT70nl%3r z*YW*zl!V*BGPc7u=!VNwk7Fm8-cGBTr1WM=;&8Ud^gMw5!F{)i|-ftLaQ`6#OR{-k*< zUA|lkj_QR6-@2~-HHvrP?W*0gXNWkd87ZnzYTF|$fTD};4NF3XG@M@HraG2EH8SB0 zM!48YMRg<6U~|n|yA#vRVP|w7kdFQ{*{x99e3zZZi(4CY7lXSA_Xq9Z1LGcTs#8_@ zjG*D`G=xdJWHkujl>qOK)aS z4fuMT!{=|`S~64{Ni5Idu(}oI^Qyxr7GC}-9R7_(5EcZTF&MY*s@#Ut<#!Ch%>e&( zZwjlFiycNI=@JhO8%Kg2f~AHP!QIW}mvCi;jbGyf=;4Gq`J3JyIhWcubyra-^4Yx~uH+?J{Jb(` z@L&{Q4XMhb41$A$h1Vvnsz~ZrHn_C%bI|hqJ^Dt+;>31`%pQo^h1yNQFfsqc^mCyTwb=|YnOPOy8pXfy)Xet6NdSFa3|RCm~4Sgdo3m<9x# z;CW&9ZWS0b-y%0jARs+BmI>bQ@ndQ9Qr@cU0Tpn0bJVw~O3gzYX=U3FS#qpR0;P6I z@6*GLM}AL2v#kZ{9)0rUcDdMyJcRV@=qjpo!&kgA znaOJ9uS7qLd5eih8dg^J7i-&cV>6)ZOB_&ATbWK`Q6i1oOclc%ye&Dj>{3yF{_dR> zdS>s(n!Sg{1Pafux;!vr>CChhqiCnbA|(g-mj~QKI{ntp84lk(+ zBwvZo><|ga;6xT?{1^~u22>NTfAy^;M!w=j;;_s|)DF+zys-d(pkr?4wT8GC&JfhI zpy2-f!~xn8UG6U&uR^}oV(RNy#(xOIF^YNadDCIThHYX3=Ze49LkI%iM6Jm)Mp4kU z3+%%iY-1?m^YQ591F4Gc+`FevohGHTkcDWC^$yldhbO2(ohU>@@aRoq4lF!BdWigi z9be>PR6tFvwskZZiSVBidb-X{aLn1m>_bdgdFr#TR-c>Y;bDbTG9wFXq%l~nCfFg&RQTMbXw2QvxL6TTs1JlsVyZr|RHV5_B(qPeAIS=5@v&odeqz$gyISvIvd zF`KQ3QQ!$jico+|nBZ8v$~*gv=Kk@>5URd@)uO0m{=Hqu`Di-+W#U?p+#g(Tn9sLy z9=`~aHVC)K|;IiUY$n(@_ zxhHPjBE?#F>QkBEVO}SEbLGH2G@%t`Y~&H{Z(kf+RM4Bvov|cNt-wrWyHnL^!tHFl z7OaL|5ns(&WJ}T39$oVpTZqGu4e=ppsZ*-lwry7IkG0NXy@{lkRzqBGn5d_EJX}Yz zIYb5MsGR72-R9rWdcaGZ$*UL49N=B;L;`OLtTl$$a{$yadGFXOqs)(}?qHioUi2cF z@_g$QG=hz)y{4R0fb#&ztMmT)_3QV~mbQ<0tEwPg;;`W2f47C;c9q^y#sncoOXwc3 z@O!c338ZiVbQ!?N61LkICMy|%jBH_41TXo(=*}ZWL`>#)WaenK_6rn-S&$>6R^5v@ zc<7LHRZIh(kjyqQH@qk&a(_|B*~7#+muqHkOv%S#>o#e{XWlQEK)=hojQyH~lAjnobz#|Dr}w=Yq-!*B4dLw(#{;{hM)QQH5pL z_FJ~U4#SusS$}7=S8;zD{88nTVqP2`ZX3RBVFTI-pWq#S#P(L5J6q!*dGq^ef^6Xt z4|NTVmLSwq@Aone9h|QGzYf z@*-mMe>@BU82*arKiy3|dD55qRCDaUEl~GQ7WAZQ{PZVO+;$|EKqS`E6V5A+s~t!a zX-i0lRcuoJnCdQ6wQ=JVx)pnUoo3oiN#J5;`l={^b4;E?E+ z#eXPmEp8p<(2B}GO+Th((4UK9T_d)McujI%h1>=Vw+Ime>z($VIUzI7yO+5=bf=Tw zpA#=q$m4*9vR1OL-+_YdYyC!E_FrSUK5whNa)H^X<5X%fv)^I+%aY0G@x<*lo!A)h z{Uzcw+2$iW(gL+(;OJs-sB7)|L@7D*$&*fCYjeV9M(o%z>A07RvvUAAjq9%LAmDG? zAAcg5W@WA{fof7^Xk)FVl~=}=N{AMY)#bS`rs^w@tVHcBJa4T80x?Q`MGyfhmW+eO z8~e__T0d%-cj%ebBJRau;&#g1u}RC8g5-Up?l*lDQ@GQ`R6V53ec{4w^cM#K*Z?9n zfKXzHJ-++RAhWCadeI^MYh!XP;YQ_0hAuE@s35#fvW!?5gj7-D2xT!%UlcN+0@slF z5NchrhO&?daH9s1t9Yk@gq)=1BP|J8IDmONrI5Jw9`CXz`0h{K`i{JRLnR#Jwk>-5 z=*Q{&q0R_QY2=JZkac|0H>_N>s^)hesLfsL)p@2D@c-3y?r}ZeZy(PgTPQ1HHIY=J zTYhLE8l|(bBvK(7Q6VXWVyv7p(+Qn^$?8rg8A?&gAtP(}Vp$HANI8{6`Cl&oc?b3A9ixm|)&ohf6Bh|UR-*ZBAQIh?DoKK)mFP<%+rTN&h(EmF1 zw+?VaOb?jE$G$wj2OLRaR)DdumTcVUZF9oBpiga7UpR)FM;7(qs)?rn6i}7~lHpyO z<{F@R2#8GrQmItpZk%eXVI_|<4d^|tppxuPm7S$<({+m;(qf1o7&d2AlRxi;;Kn9dNIbu7!mTfPt6sOWMxFmxMI7^_Xj!9`b@8keFJpI*`JJ-nE5C zKuBAOy`TrnY~9lAk-|AA4=X03Su;IM>ogGNAqjk z3!D|C#`H$Fey_IHl6LxY5AjmTT^FDll;C{M9 zbgQh_u~>I(wtsV#mG**mdZVn>WepxZ0`_(#Py!>CUhNZ>O^BsY=JSz0Tg)@FvZjP+ zx1!vOMCyTgwB!GG5N**@U$$mpdS+NCo>(;GkmAp5qssZWtF@J~aWVD{&-_xY*4y`0<|C@Q< zsd$6oW$_-d`X?(ghma>mp3ES#~_&FbB_z*F5`HWsr~q6nf*~!81Jw z2=glat`kWT^L=NLD6h_WQO1k9Hhkff!F@cPduom93RdOh>iP>1ede7u1U*WnnFp6> ziA)i`hTKlSg+m7FKM(c)n>sRlV5v<73UEx>9n{^iOzlhRS8l*o?GI>^PS6hPKgi_a z=$C}g?S5-ml~9%7XmaB!I>{c05*Z$>zyTKOk(hBk^ZO079GvN_yM7k2_Sl14=Wg`H z;V!$|0mb%pHs`K_71_XVji{h3x|*M2?-c(=Oa4obEq-6V<>Hc#aQ)!a{ts?h(#mND z&Qb2%iO%IJP7`6<($k_A(`N(8U$;$^yru zk0skhNCFhyZZ+wq*^o%`XN7*HiW2`@#oH~_Ux%2 zuV4(9Sj1_OMx^Hel+}!>KKtT-XwVbZNr4XGZF@^H{v5FUFdiL2zx!@!!X*w}`z`&8 z#(2=vnFkeEYY1$L2 zIEO9`5w2J0qv+`9wQZK~=LO>`W6mh6@)iD=6T?egb0!K4l}(d$R}MH?SUB?ih+F3u zdAU|i8=+fh)XV4Vbuo6@LyZ&-PLpZedY&rw^etagK_hXP{6AUBfqKttbQ>K*mcb?K z#ycm+@Tmu1yut5O zF60%Ds_5$wUf*KFbkL{A7nvIeZ67*ev<9IX!6C&Xq*JsGv&6K+^rzP6oW4trw{N+ z-7oaKys}q+vZI;mCZhpg0oc&!FI_Tkn}fam{O%!lir2d?^jKDXaBr_P1Oo%9RFU+j zKA-9)-+tC)P~@qgND5xHbPikC!7Ldie^(|UOq?O2C!^#)&yRJsnCKW;kgFbVJX}9+ zw1xlO2}12KVTc%R^l~;>@_1|SWmU)R>M6k`saog_Wa%;( ziHJl>A9}6jqMYVE9P2~&-~y-<$u>r@%{}ZTk$UxYGtcbRbI#7m3Fv59w1ln1<>i@G z@BVl-YcFkOyLL)pbr;rqZDAs~8B8;sV`mzh&dqU}K0RaEXkTS$QRx|>67@8n@LrBP z{%jaKUJ*N}vseb^2zufZKxFZUGChzKEMkb3BQv6=`NJP&y=(vHPl|o5yS;Cn!cOd-P4l>Orek2|Wg$^DbytIlRvTyp3W31HDsL!aXRvayP_4!vJ1@>tnCiaTP*wv{?`a>*+>1FhZp%&qp132m(+;Sh&L?@b}e-MJS zQ)m3Et)~{_q4u<$N?#S-6t*2Lrg z_t>y8`bPTD>aS$`C36_l@{my^&26~baj?1veH>2Ctw;ZK2z-a-Y-ZU?YX8RZg_lKk?PR9CX*>^~JZ2SBb9gCrHObVXsgaKBJC zPd~3#4N$`jqF>*Ns#i8eNeK6lVx|Rh&>YItrxJxhZKn4&PHJV>M|Ath!bu-TaA;Gs zx_+=ph|HJi2mU9+Jui}!DE4bHB*z@I#4op&B9LjGtjzS&^_7a{ANBfkh_MnPaQ z5YvC&lDMGA)eY@TnX(BOP2u*P6h15Fe%O)fu>Urt`>@0PN2_6TeulHNXai5$DB7%O zx4`wn+uMT;e_2J@gYV5m)Q8XUhl1;Y1-+^VP{_EC?JtoYmt>-F+Uu14ysbbu+U!;Ys@J$87Ylu zC-5{(0!zxTh%w@*kYrzSm$%`nU>Hzp57_`8rXjFI4t;`Df%-z^sMae}JC!2Zqo3BB zmWvt3KmGW4W7o?t-ryK_1wUhOVr0OHjUW$_~zvP(0n$ z&=7Aw=O`{3mNRAY3~hUJ)4h5YqDdodMm$v#NsrU0_Sv&t42<7`P$4$^g&E)Dmbc?a z+cWe^#vpj(ReIgOpuz5Q?*9^GtmvAU`y zdH^i!|K6Um>ssnoQ_(h{wJW`zo$+b%<$ubyuq&EDD57Vf$qPJOl8wxIx<79W1->K6%daTmu2&1Nc@6lGIzs$ZB@ZNI?v^qw>^B~dmv z0s-@|eaRvjS@MNQmpQj9Q5_evv^SUD*Q|Hn zcbwSV@ir@Xm*cR3q3~LgbV*qVAbiui2>%tLo_%>E{-R&w$Zk`lDq-3YnvJAb20dLUZ&cQ_|iLnDQ+cmFFL$8fTPj z2!;OJwyHP!r@Er}U-QyxkSwO;=JrZ)YA*}rRnxFSi*jbpNpxOeI0qaT=6Oa%4^U93 zQmY)k*3yde_iouqg;D!ZVeI{4AFsdg^i^|nDKNjELDBp5rTDLy2dYB@idvXJPFGdA zFTD+_f%mV-l#F&_`yy!LI8nPRfdT$oH558JUUARkH@nzwu{KGfGa=ba@);0W;muLF zAI@Hh6Qg9G$06hpYdbfsmpGy3*48k#9dKeW0j%H}0M2+kstg6-{JruUhw;UVIZyZA zmq%&rxapBc8oDz5ys**wE3` z>)rVRVmD?;ljJ|>MHZxV66Me9$|*fe{`z>i6%M`3ToMxx_H@_XWz|vGG4Tt%*1+&g S>t-c>IoM3IK4dk2^S=O$9_Ri5 literal 0 HcmV?d00001 diff --git a/assets/outcomes_repartition.png b/assets/outcomes_repartition.png new file mode 100644 index 0000000000000000000000000000000000000000..dad31614a0a23a88c085ba92cac8369515316b7d GIT binary patch literal 27051 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 None: - """Display linear dependence between two features.""" - plt.figure(figsize=(10, 8)) - sns.regplot(x=feat1, y=feat2, data=dataframe) - plt.ylim( - 0, - ) +def _get_redundant_pairs(dataframe): + """Get diagonal and lower triangular pairs of correlation matrix""" + pairs_to_drop = set() + cols = dataframe.columns + for i in range(0, dataframe.shape[1]): + for j in range(0, i + 1): + pairs_to_drop.add((cols[i], cols[j])) + return pairs_to_drop + + +def _get_top_abs_correlations(dataframe, n=5): + """Get top absolute correlations""" + au_corr = dataframe.corr().abs().unstack() + labels_to_drop = _get_redundant_pairs(dataframe) + au_corr = au_corr.drop(labels=labels_to_drop).sort_values(ascending=False) + return au_corr[0:n] + + +def _display_outcomes_class_repartition(outcomes: pd.DataFrame): + """Display outcomes class repartition.""" + fig, axes = plt.subplots(1, len(list(OutcomeType)), figsize=(15, 4)) + for i, outcome in enumerate(list(OutcomeType)): + axes[i].hist(outcomes.astype(int)[outcome.value], bins=[0, 0.5, 1.5]) + axes[i].set_title(f"{outcome.value}") + plt.tight_layout() plt.show() @@ -48,9 +66,21 @@ def eda(namespace: argparse.Namespace) -> None: logger.info("Features info:") _print_info(ehr_dataset.features) - _display_correlation_matrix(ehr_dataset.features) - logger.info("Outcomes info:") _print_info(ehr_dataset.outcomes) - _display_linear_dependency(ehr_dataset.features, "cci_Liver2", "cci_Liver1") + logger.info("Features Missing values count:") + logger.info(ehr_dataset.features.isnull().sum().sum()) + logger.info("Outcomes Missing values count:") + logger.info(ehr_dataset.outcomes.isnull().sum().sum()) + + logger.info("Features Correlation matrix:") + _display_correlation_matrix(ehr_dataset.features) + logger.info("Compute Top of Correlation matrix:") + + n = 5 + top_abs_correlated = _get_top_abs_correlations(ehr_dataset.features, 25) + logger.info(f"Top {n} Correlated features : \n {top_abs_correlated}") + + logger.info("Display outcomes class repartition:") + _display_outcomes_class_repartition(ehr_dataset.outcomes) diff --git a/poetry.lock b/poetry.lock index b713384..00c4148 100644 --- a/poetry.lock +++ b/poetry.lock @@ -789,13 +789,13 @@ requests = ["requests (>=2.20.0,<3.0.0.dev0)"] [[package]] name = "google-auth-oauthlib" -version = "1.1.0" +version = "1.0.0" description = "Google Authentication Library" optional = false python-versions = ">=3.6" files = [ - {file = "google-auth-oauthlib-1.1.0.tar.gz", hash = "sha256:83ea8c3b0881e453790baff4448e8a6112ac8778d1de9da0b68010b843937afb"}, - {file = "google_auth_oauthlib-1.1.0-py2.py3-none-any.whl", hash = "sha256:089c6e587d36f4803ac7e0720c045c6a8b1fd1790088b8424975b90d0ee61c12"}, + {file = "google-auth-oauthlib-1.0.0.tar.gz", hash = "sha256:e375064964820b47221a7e1b7ee1fd77051b6323c3f9e3e19785f78ab67ecfc5"}, + {file = "google_auth_oauthlib-1.0.0-py2.py3-none-any.whl", hash = "sha256:95880ca704928c300f48194d1770cf5b1462835b6e49db61445a520f793fd5fb"}, ] [package.dependencies] @@ -1709,71 +1709,50 @@ files = [ [[package]] name = "pandas" -version = "2.1.3" +version = "1.5.3" description = "Powerful data structures for data analysis, time series, and statistics" optional = false -python-versions = ">=3.9" +python-versions = ">=3.8" files = [ - {file = "pandas-2.1.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:acf08a73b5022b479c1be155d4988b72f3020f308f7a87c527702c5f8966d34f"}, - {file = "pandas-2.1.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3cc4469ff0cf9aa3a005870cb49ab8969942b7156e0a46cc3f5abd6b11051dfb"}, - {file = "pandas-2.1.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:35172bff95f598cc5866c047f43c7f4df2c893acd8e10e6653a4b792ed7f19bb"}, - {file = "pandas-2.1.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:59dfe0e65a2f3988e940224e2a70932edc964df79f3356e5f2997c7d63e758b4"}, - {file = "pandas-2.1.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:0296a66200dee556850d99b24c54c7dfa53a3264b1ca6f440e42bad424caea03"}, - {file = "pandas-2.1.3-cp310-cp310-win_amd64.whl", hash = "sha256:465571472267a2d6e00657900afadbe6097c8e1dc43746917db4dfc862e8863e"}, - {file = "pandas-2.1.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:04d4c58e1f112a74689da707be31cf689db086949c71828ef5da86727cfe3f82"}, - {file = "pandas-2.1.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7fa2ad4ff196768ae63a33f8062e6838efed3a319cf938fdf8b95e956c813042"}, - {file = "pandas-2.1.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4441ac94a2a2613e3982e502ccec3bdedefe871e8cea54b8775992485c5660ef"}, - {file = "pandas-2.1.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d5ded6ff28abbf0ea7689f251754d3789e1edb0c4d0d91028f0b980598418a58"}, - {file = "pandas-2.1.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fca5680368a5139d4920ae3dc993eb5106d49f814ff24018b64d8850a52c6ed2"}, - {file = "pandas-2.1.3-cp311-cp311-win_amd64.whl", hash = "sha256:de21e12bf1511190fc1e9ebc067f14ca09fccfb189a813b38d63211d54832f5f"}, - {file = "pandas-2.1.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:a5d53c725832e5f1645e7674989f4c106e4b7249c1d57549023ed5462d73b140"}, - {file = "pandas-2.1.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7cf4cf26042476e39394f1f86868d25b265ff787c9b2f0d367280f11afbdee6d"}, - {file = "pandas-2.1.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:72c84ec1b1d8e5efcbff5312abe92bfb9d5b558f11e0cf077f5496c4f4a3c99e"}, - {file = "pandas-2.1.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f539e113739a3e0cc15176bf1231a553db0239bfa47a2c870283fd93ba4f683"}, - {file = "pandas-2.1.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:fc77309da3b55732059e484a1efc0897f6149183c522390772d3561f9bf96c00"}, - {file = "pandas-2.1.3-cp312-cp312-win_amd64.whl", hash = "sha256:08637041279b8981a062899da0ef47828df52a1838204d2b3761fbd3e9fcb549"}, - {file = "pandas-2.1.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b99c4e51ef2ed98f69099c72c75ec904dd610eb41a32847c4fcbc1a975f2d2b8"}, - {file = "pandas-2.1.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f7ea8ae8004de0381a2376662c0505bb0a4f679f4c61fbfd122aa3d1b0e5f09d"}, - {file = "pandas-2.1.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fcd76d67ca2d48f56e2db45833cf9d58f548f97f61eecd3fdc74268417632b8a"}, - {file = "pandas-2.1.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1329dbe93a880a3d7893149979caa82d6ba64a25e471682637f846d9dbc10dd2"}, - {file = "pandas-2.1.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:321ecdb117bf0f16c339cc6d5c9a06063854f12d4d9bc422a84bb2ed3207380a"}, - {file = "pandas-2.1.3-cp39-cp39-win_amd64.whl", hash = "sha256:11a771450f36cebf2a4c9dbd3a19dfa8c46c4b905a3ea09dc8e556626060fe71"}, - {file = "pandas-2.1.3.tar.gz", hash = "sha256:22929f84bca106921917eb73c1521317ddd0a4c71b395bcf767a106e3494209f"}, + {file = "pandas-1.5.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3749077d86e3a2f0ed51367f30bf5b82e131cc0f14260c4d3e499186fccc4406"}, + {file = "pandas-1.5.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:972d8a45395f2a2d26733eb8d0f629b2f90bebe8e8eddbb8829b180c09639572"}, + {file = "pandas-1.5.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:50869a35cbb0f2e0cd5ec04b191e7b12ed688874bd05dd777c19b28cbea90996"}, + {file = "pandas-1.5.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c3ac844a0fe00bfaeb2c9b51ab1424e5c8744f89860b138434a363b1f620f354"}, + {file = "pandas-1.5.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a0a56cef15fd1586726dace5616db75ebcfec9179a3a55e78f72c5639fa2a23"}, + {file = "pandas-1.5.3-cp310-cp310-win_amd64.whl", hash = "sha256:478ff646ca42b20376e4ed3fa2e8d7341e8a63105586efe54fa2508ee087f328"}, + {file = "pandas-1.5.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6973549c01ca91ec96199e940495219c887ea815b2083722821f1d7abfa2b4dc"}, + {file = "pandas-1.5.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c39a8da13cede5adcd3be1182883aea1c925476f4e84b2807a46e2775306305d"}, + {file = "pandas-1.5.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f76d097d12c82a535fda9dfe5e8dd4127952b45fea9b0276cb30cca5ea313fbc"}, + {file = "pandas-1.5.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e474390e60ed609cec869b0da796ad94f420bb057d86784191eefc62b65819ae"}, + {file = "pandas-1.5.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f2b952406a1588ad4cad5b3f55f520e82e902388a6d5a4a91baa8d38d23c7f6"}, + {file = "pandas-1.5.3-cp311-cp311-win_amd64.whl", hash = "sha256:bc4c368f42b551bf72fac35c5128963a171b40dce866fb066540eeaf46faa003"}, + {file = "pandas-1.5.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:14e45300521902689a81f3f41386dc86f19b8ba8dd5ac5a3c7010ef8d2932813"}, + {file = "pandas-1.5.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9842b6f4b8479e41968eced654487258ed81df7d1c9b7b870ceea24ed9459b31"}, + {file = "pandas-1.5.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:26d9c71772c7afb9d5046e6e9cf42d83dd147b5cf5bcb9d97252077118543792"}, + {file = "pandas-1.5.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5fbcb19d6fceb9e946b3e23258757c7b225ba450990d9ed63ccceeb8cae609f7"}, + {file = "pandas-1.5.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:565fa34a5434d38e9d250af3c12ff931abaf88050551d9fbcdfafca50d62babf"}, + {file = "pandas-1.5.3-cp38-cp38-win32.whl", hash = "sha256:87bd9c03da1ac870a6d2c8902a0e1fd4267ca00f13bc494c9e5a9020920e1d51"}, + {file = "pandas-1.5.3-cp38-cp38-win_amd64.whl", hash = "sha256:41179ce559943d83a9b4bbacb736b04c928b095b5f25dd2b7389eda08f46f373"}, + {file = "pandas-1.5.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c74a62747864ed568f5a82a49a23a8d7fe171d0c69038b38cedf0976831296fa"}, + {file = "pandas-1.5.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c4c00e0b0597c8e4f59e8d461f797e5d70b4d025880516a8261b2817c47759ee"}, + {file = "pandas-1.5.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a50d9a4336a9621cab7b8eb3fb11adb82de58f9b91d84c2cd526576b881a0c5a"}, + {file = "pandas-1.5.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dd05f7783b3274aa206a1af06f0ceed3f9b412cf665b7247eacd83be41cf7bf0"}, + {file = "pandas-1.5.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f69c4029613de47816b1bb30ff5ac778686688751a5e9c99ad8c7031f6508e5"}, + {file = "pandas-1.5.3-cp39-cp39-win32.whl", hash = "sha256:7cec0bee9f294e5de5bbfc14d0573f65526071029d036b753ee6507d2a21480a"}, + {file = "pandas-1.5.3-cp39-cp39-win_amd64.whl", hash = "sha256:dfd681c5dc216037e0b0a2c821f5ed99ba9f03ebcf119c7dac0e9a7b960b9ec9"}, + {file = "pandas-1.5.3.tar.gz", hash = "sha256:74a3fd7e5a7ec052f183273dc7b0acd3a863edf7520f5d3a1765c04ffdb3b0b1"}, ] [package.dependencies] numpy = [ - {version = ">=1.22.4,<2", markers = "python_version < \"3.11\""}, - {version = ">=1.26.0,<2", markers = "python_version >= \"3.12\""}, - {version = ">=1.23.2,<2", markers = "python_version == \"3.11\""}, + {version = ">=1.21.0", markers = "python_version >= \"3.10\" and python_version < \"3.11\""}, + {version = ">=1.23.2", markers = "python_version >= \"3.11\""}, ] -python-dateutil = ">=2.8.2" +python-dateutil = ">=2.8.1" pytz = ">=2020.1" -tzdata = ">=2022.1" [package.extras] -all = ["PyQt5 (>=5.15.6)", "SQLAlchemy (>=1.4.36)", "beautifulsoup4 (>=4.11.1)", "bottleneck (>=1.3.4)", "dataframe-api-compat (>=0.1.7)", "fastparquet (>=0.8.1)", "fsspec (>=2022.05.0)", "gcsfs (>=2022.05.0)", "html5lib (>=1.1)", "hypothesis (>=6.46.1)", "jinja2 (>=3.1.2)", "lxml (>=4.8.0)", "matplotlib (>=3.6.1)", "numba (>=0.55.2)", "numexpr (>=2.8.0)", "odfpy (>=1.4.1)", "openpyxl (>=3.0.10)", "pandas-gbq (>=0.17.5)", "psycopg2 (>=2.9.3)", "pyarrow (>=7.0.0)", "pymysql (>=1.0.2)", "pyreadstat (>=1.1.5)", "pytest (>=7.3.2)", "pytest-xdist (>=2.2.0)", "pyxlsb (>=1.0.9)", "qtpy (>=2.2.0)", "s3fs (>=2022.05.0)", "scipy (>=1.8.1)", "tables (>=3.7.0)", "tabulate (>=0.8.10)", "xarray (>=2022.03.0)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.3)", "zstandard (>=0.17.0)"] -aws = ["s3fs (>=2022.05.0)"] -clipboard = ["PyQt5 (>=5.15.6)", "qtpy (>=2.2.0)"] -compression = ["zstandard (>=0.17.0)"] -computation = ["scipy (>=1.8.1)", "xarray (>=2022.03.0)"] -consortium-standard = ["dataframe-api-compat (>=0.1.7)"] -excel = ["odfpy (>=1.4.1)", "openpyxl (>=3.0.10)", "pyxlsb (>=1.0.9)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.3)"] -feather = ["pyarrow (>=7.0.0)"] -fss = ["fsspec (>=2022.05.0)"] -gcp = ["gcsfs (>=2022.05.0)", "pandas-gbq (>=0.17.5)"] -hdf5 = ["tables (>=3.7.0)"] -html = ["beautifulsoup4 (>=4.11.1)", "html5lib (>=1.1)", "lxml (>=4.8.0)"] -mysql = ["SQLAlchemy (>=1.4.36)", "pymysql (>=1.0.2)"] -output-formatting = ["jinja2 (>=3.1.2)", "tabulate (>=0.8.10)"] -parquet = ["pyarrow (>=7.0.0)"] -performance = ["bottleneck (>=1.3.4)", "numba (>=0.55.2)", "numexpr (>=2.8.0)"] -plot = ["matplotlib (>=3.6.1)"] -postgresql = ["SQLAlchemy (>=1.4.36)", "psycopg2 (>=2.9.3)"] -spss = ["pyreadstat (>=1.1.5)"] -sql-other = ["SQLAlchemy (>=1.4.36)"] -test = ["hypothesis (>=6.46.1)", "pytest (>=7.3.2)", "pytest-xdist (>=2.2.0)"] -xml = ["lxml (>=4.8.0)"] +test = ["hypothesis (>=5.5.3)", "pytest (>=6.0)", "pytest-xdist (>=1.31)"] [[package]] name = "pathspec" @@ -1921,24 +1900,22 @@ virtualenv = ">=20.10.0" [[package]] name = "protobuf" -version = "4.23.4" +version = "4.25.1" description = "" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "protobuf-4.23.4-cp310-abi3-win32.whl", hash = "sha256:5fea3c64d41ea5ecf5697b83e41d09b9589e6f20b677ab3c48e5f242d9b7897b"}, - {file = "protobuf-4.23.4-cp310-abi3-win_amd64.whl", hash = "sha256:7b19b6266d92ca6a2a87effa88ecc4af73ebc5cfde194dc737cf8ef23a9a3b12"}, - {file = "protobuf-4.23.4-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:8547bf44fe8cec3c69e3042f5c4fb3e36eb2a7a013bb0a44c018fc1e427aafbd"}, - {file = "protobuf-4.23.4-cp37-abi3-manylinux2014_aarch64.whl", hash = "sha256:fee88269a090ada09ca63551bf2f573eb2424035bcf2cb1b121895b01a46594a"}, - {file = "protobuf-4.23.4-cp37-abi3-manylinux2014_x86_64.whl", hash = "sha256:effeac51ab79332d44fba74660d40ae79985901ac21bca408f8dc335a81aa597"}, - {file = "protobuf-4.23.4-cp37-cp37m-win32.whl", hash = "sha256:c3e0939433c40796ca4cfc0fac08af50b00eb66a40bbbc5dee711998fb0bbc1e"}, - {file = "protobuf-4.23.4-cp37-cp37m-win_amd64.whl", hash = "sha256:9053df6df8e5a76c84339ee4a9f5a2661ceee4a0dab019e8663c50ba324208b0"}, - {file = "protobuf-4.23.4-cp38-cp38-win32.whl", hash = "sha256:e1c915778d8ced71e26fcf43c0866d7499891bca14c4368448a82edc61fdbc70"}, - {file = "protobuf-4.23.4-cp38-cp38-win_amd64.whl", hash = "sha256:351cc90f7d10839c480aeb9b870a211e322bf05f6ab3f55fcb2f51331f80a7d2"}, - {file = "protobuf-4.23.4-cp39-cp39-win32.whl", hash = "sha256:6dd9b9940e3f17077e820b75851126615ee38643c2c5332aa7a359988820c720"}, - {file = "protobuf-4.23.4-cp39-cp39-win_amd64.whl", hash = "sha256:0a5759f5696895de8cc913f084e27fd4125e8fb0914bb729a17816a33819f474"}, - {file = "protobuf-4.23.4-py3-none-any.whl", hash = "sha256:e9d0be5bf34b275b9f87ba7407796556abeeba635455d036c7351f7c183ef8ff"}, - {file = "protobuf-4.23.4.tar.gz", hash = "sha256:ccd9430c0719dce806b93f89c91de7977304729e55377f872a92465d548329a9"}, + {file = "protobuf-4.25.1-cp310-abi3-win32.whl", hash = "sha256:193f50a6ab78a970c9b4f148e7c750cfde64f59815e86f686c22e26b4fe01ce7"}, + {file = "protobuf-4.25.1-cp310-abi3-win_amd64.whl", hash = "sha256:3497c1af9f2526962f09329fd61a36566305e6c72da2590ae0d7d1322818843b"}, + {file = "protobuf-4.25.1-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:0bf384e75b92c42830c0a679b0cd4d6e2b36ae0cf3dbb1e1dfdda48a244f4bcd"}, + {file = "protobuf-4.25.1-cp37-abi3-manylinux2014_aarch64.whl", hash = "sha256:0f881b589ff449bf0b931a711926e9ddaad3b35089cc039ce1af50b21a4ae8cb"}, + {file = "protobuf-4.25.1-cp37-abi3-manylinux2014_x86_64.whl", hash = "sha256:ca37bf6a6d0046272c152eea90d2e4ef34593aaa32e8873fc14c16440f22d4b7"}, + {file = "protobuf-4.25.1-cp38-cp38-win32.whl", hash = "sha256:abc0525ae2689a8000837729eef7883b9391cd6aa7950249dcf5a4ede230d5dd"}, + {file = "protobuf-4.25.1-cp38-cp38-win_amd64.whl", hash = "sha256:1484f9e692091450e7edf418c939e15bfc8fc68856e36ce399aed6889dae8bb0"}, + {file = "protobuf-4.25.1-cp39-cp39-win32.whl", hash = "sha256:8bdbeaddaac52d15c6dce38c71b03038ef7772b977847eb6d374fc86636fa510"}, + {file = "protobuf-4.25.1-cp39-cp39-win_amd64.whl", hash = "sha256:becc576b7e6b553d22cbdf418686ee4daa443d7217999125c045ad56322dda10"}, + {file = "protobuf-4.25.1-py3-none-any.whl", hash = "sha256:a19731d5e83ae4737bb2a089605e636077ac001d18781b3cf489b9546c7c80d6"}, + {file = "protobuf-4.25.1.tar.gz", hash = "sha256:57d65074b4f5baa4ab5da1605c02be90ac20c8b40fb137d6a8df9f416b0d0ce2"}, ] [[package]] @@ -2223,50 +2200,45 @@ pyasn1 = ">=0.1.3" [[package]] name = "scikit-learn" -version = "1.3.2" +version = "1.2.2" description = "A set of python modules for machine learning and data mining" optional = false python-versions = ">=3.8" files = [ - {file = "scikit-learn-1.3.2.tar.gz", hash = "sha256:a2f54c76accc15a34bfb9066e6c7a56c1e7235dda5762b990792330b52ccfb05"}, - {file = "scikit_learn-1.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e326c0eb5cf4d6ba40f93776a20e9a7a69524c4db0757e7ce24ba222471ee8a1"}, - {file = "scikit_learn-1.3.2-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:535805c2a01ccb40ca4ab7d081d771aea67e535153e35a1fd99418fcedd1648a"}, - {file = "scikit_learn-1.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1215e5e58e9880b554b01187b8c9390bf4dc4692eedeaf542d3273f4785e342c"}, - {file = "scikit_learn-1.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0ee107923a623b9f517754ea2f69ea3b62fc898a3641766cb7deb2f2ce450161"}, - {file = "scikit_learn-1.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:35a22e8015048c628ad099da9df5ab3004cdbf81edc75b396fd0cff8699ac58c"}, - {file = "scikit_learn-1.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6fb6bc98f234fda43163ddbe36df8bcde1d13ee176c6dc9b92bb7d3fc842eb66"}, - {file = "scikit_learn-1.3.2-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:18424efee518a1cde7b0b53a422cde2f6625197de6af36da0b57ec502f126157"}, - {file = "scikit_learn-1.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3271552a5eb16f208a6f7f617b8cc6d1f137b52c8a1ef8edf547db0259b2c9fb"}, - {file = "scikit_learn-1.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc4144a5004a676d5022b798d9e573b05139e77f271253a4703eed295bde0433"}, - {file = "scikit_learn-1.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:67f37d708f042a9b8d59551cf94d30431e01374e00dc2645fa186059c6c5d78b"}, - {file = "scikit_learn-1.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:8db94cd8a2e038b37a80a04df8783e09caac77cbe052146432e67800e430c028"}, - {file = "scikit_learn-1.3.2-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:61a6efd384258789aa89415a410dcdb39a50e19d3d8410bd29be365bcdd512d5"}, - {file = "scikit_learn-1.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb06f8dce3f5ddc5dee1715a9b9f19f20d295bed8e3cd4fa51e1d050347de525"}, - {file = "scikit_learn-1.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5b2de18d86f630d68fe1f87af690d451388bb186480afc719e5f770590c2ef6c"}, - {file = "scikit_learn-1.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:0402638c9a7c219ee52c94cbebc8fcb5eb9fe9c773717965c1f4185588ad3107"}, - {file = "scikit_learn-1.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a19f90f95ba93c1a7f7924906d0576a84da7f3b2282ac3bfb7a08a32801add93"}, - {file = "scikit_learn-1.3.2-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:b8692e395a03a60cd927125eef3a8e3424d86dde9b2370d544f0ea35f78a8073"}, - {file = "scikit_learn-1.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:15e1e94cc23d04d39da797ee34236ce2375ddea158b10bee3c343647d615581d"}, - {file = "scikit_learn-1.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:785a2213086b7b1abf037aeadbbd6d67159feb3e30263434139c98425e3dcfcf"}, - {file = "scikit_learn-1.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:64381066f8aa63c2710e6b56edc9f0894cc7bf59bd71b8ce5613a4559b6145e0"}, - {file = "scikit_learn-1.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6c43290337f7a4b969d207e620658372ba3c1ffb611f8bc2b6f031dc5c6d1d03"}, - {file = "scikit_learn-1.3.2-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:dc9002fc200bed597d5d34e90c752b74df516d592db162f756cc52836b38fe0e"}, - {file = "scikit_learn-1.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d08ada33e955c54355d909b9c06a4789a729977f165b8bae6f225ff0a60ec4a"}, - {file = "scikit_learn-1.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:763f0ae4b79b0ff9cca0bf3716bcc9915bdacff3cebea15ec79652d1cc4fa5c9"}, - {file = "scikit_learn-1.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:ed932ea780517b00dae7431e031faae6b49b20eb6950918eb83bd043237950e0"}, + {file = "scikit-learn-1.2.2.tar.gz", hash = "sha256:8429aea30ec24e7a8c7ed8a3fa6213adf3814a6efbea09e16e0a0c71e1a1a3d7"}, + {file = "scikit_learn-1.2.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:99cc01184e347de485bf253d19fcb3b1a3fb0ee4cea5ee3c43ec0cc429b6d29f"}, + {file = "scikit_learn-1.2.2-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:e6e574db9914afcb4e11ade84fab084536a895ca60aadea3041e85b8ac963edb"}, + {file = "scikit_learn-1.2.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6fe83b676f407f00afa388dd1fdd49e5c6612e551ed84f3b1b182858f09e987d"}, + {file = "scikit_learn-1.2.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2e2642baa0ad1e8f8188917423dd73994bf25429f8893ddbe115be3ca3183584"}, + {file = "scikit_learn-1.2.2-cp310-cp310-win_amd64.whl", hash = "sha256:ad66c3848c0a1ec13464b2a95d0a484fd5b02ce74268eaa7e0c697b904f31d6c"}, + {file = "scikit_learn-1.2.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:dfeaf8be72117eb61a164ea6fc8afb6dfe08c6f90365bde2dc16456e4bc8e45f"}, + {file = "scikit_learn-1.2.2-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:fe0aa1a7029ed3e1dcbf4a5bc675aa3b1bc468d9012ecf6c6f081251ca47f590"}, + {file = "scikit_learn-1.2.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:065e9673e24e0dc5113e2dd2b4ca30c9d8aa2fa90f4c0597241c93b63130d233"}, + {file = "scikit_learn-1.2.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf036ea7ef66115e0d49655f16febfa547886deba20149555a41d28f56fd6d3c"}, + {file = "scikit_learn-1.2.2-cp311-cp311-win_amd64.whl", hash = "sha256:8b0670d4224a3c2d596fd572fb4fa673b2a0ccfb07152688ebd2ea0b8c61025c"}, + {file = "scikit_learn-1.2.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9c710ff9f9936ba8a3b74a455ccf0dcf59b230caa1e9ba0223773c490cab1e51"}, + {file = "scikit_learn-1.2.2-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:2dd3ffd3950e3d6c0c0ef9033a9b9b32d910c61bd06cb8206303fb4514b88a49"}, + {file = "scikit_learn-1.2.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:44b47a305190c28dd8dd73fc9445f802b6ea716669cfc22ab1eb97b335d238b1"}, + {file = "scikit_learn-1.2.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:953236889928d104c2ef14027539f5f2609a47ebf716b8cbe4437e85dce42744"}, + {file = "scikit_learn-1.2.2-cp38-cp38-win_amd64.whl", hash = "sha256:7f69313884e8eb311460cc2f28676d5e400bd929841a2c8eb8742ae78ebf7c20"}, + {file = "scikit_learn-1.2.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8156db41e1c39c69aa2d8599ab7577af53e9e5e7a57b0504e116cc73c39138dd"}, + {file = "scikit_learn-1.2.2-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:fe175ee1dab589d2e1033657c5b6bec92a8a3b69103e3dd361b58014729975c3"}, + {file = "scikit_learn-1.2.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7d5312d9674bed14f73773d2acf15a3272639b981e60b72c9b190a0cffed5bad"}, + {file = "scikit_learn-1.2.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ea061bf0283bf9a9f36ea3c5d3231ba2176221bbd430abd2603b1c3b2ed85c89"}, + {file = "scikit_learn-1.2.2-cp39-cp39-win_amd64.whl", hash = "sha256:6477eed40dbce190f9f9e9d0d37e020815825b300121307942ec2110302b66a3"}, ] [package.dependencies] joblib = ">=1.1.1" -numpy = ">=1.17.3,<2.0" -scipy = ">=1.5.0" +numpy = ">=1.17.3" +scipy = ">=1.3.2" threadpoolctl = ">=2.0.0" [package.extras] benchmark = ["matplotlib (>=3.1.3)", "memory-profiler (>=0.57.0)", "pandas (>=1.0.5)"] -docs = ["Pillow (>=7.1.2)", "matplotlib (>=3.1.3)", "memory-profiler (>=0.57.0)", "numpydoc (>=1.2.0)", "pandas (>=1.0.5)", "plotly (>=5.14.0)", "pooch (>=1.6.0)", "scikit-image (>=0.16.2)", "seaborn (>=0.9.0)", "sphinx (>=6.0.0)", "sphinx-copybutton (>=0.5.2)", "sphinx-gallery (>=0.10.1)", "sphinx-prompt (>=1.3.0)", "sphinxext-opengraph (>=0.4.2)"] -examples = ["matplotlib (>=3.1.3)", "pandas (>=1.0.5)", "plotly (>=5.14.0)", "pooch (>=1.6.0)", "scikit-image (>=0.16.2)", "seaborn (>=0.9.0)"] -tests = ["black (>=23.3.0)", "matplotlib (>=3.1.3)", "mypy (>=1.3)", "numpydoc (>=1.2.0)", "pandas (>=1.0.5)", "pooch (>=1.6.0)", "pyamg (>=4.0.0)", "pytest (>=7.1.2)", "pytest-cov (>=2.9.0)", "ruff (>=0.0.272)", "scikit-image (>=0.16.2)"] +docs = ["Pillow (>=7.1.2)", "matplotlib (>=3.1.3)", "memory-profiler (>=0.57.0)", "numpydoc (>=1.2.0)", "pandas (>=1.0.5)", "plotly (>=5.10.0)", "pooch (>=1.6.0)", "scikit-image (>=0.16.2)", "seaborn (>=0.9.0)", "sphinx (>=4.0.1)", "sphinx-gallery (>=0.7.0)", "sphinx-prompt (>=1.3.0)", "sphinxext-opengraph (>=0.4.2)"] +examples = ["matplotlib (>=3.1.3)", "pandas (>=1.0.5)", "plotly (>=5.10.0)", "pooch (>=1.6.0)", "scikit-image (>=0.16.2)", "seaborn (>=0.9.0)"] +tests = ["black (>=22.3.0)", "flake8 (>=3.8.2)", "matplotlib (>=3.1.3)", "mypy (>=0.961)", "numpydoc (>=1.2.0)", "pandas (>=1.0.5)", "pooch (>=1.6.0)", "pyamg (>=4.0.0)", "pytest (>=5.3.1)", "pytest-cov (>=2.9.0)", "scikit-image (>=0.16.2)"] [[package]] name = "scipy" @@ -2450,22 +2422,22 @@ mpmath = ">=0.19" [[package]] name = "tensorboard" -version = "2.15.1" +version = "2.14.1" description = "TensorBoard lets you watch Tensors Flow" optional = false python-versions = ">=3.9" files = [ - {file = "tensorboard-2.15.1-py3-none-any.whl", hash = "sha256:c46c1d1cf13a458c429868a78b2531d8ff5f682058d69ec0840b0bc7a38f1c0f"}, + {file = "tensorboard-2.14.1-py3-none-any.whl", hash = "sha256:3db108fb58f023b6439880e177743c5f1e703e9eeb5fb7d597871f949f85fd58"}, ] [package.dependencies] absl-py = ">=0.4" google-auth = ">=1.6.3,<3" -google-auth-oauthlib = ">=0.5,<2" +google-auth-oauthlib = ">=0.5,<1.1" grpcio = ">=1.48.2" markdown = ">=2.6.8" numpy = ">=1.12.0" -protobuf = ">=3.19.6,<4.24" +protobuf = ">=3.19.6" requests = ">=2.21.0,<3" setuptools = ">=41.0.0" six = ">1.9" @@ -2670,17 +2642,6 @@ files = [ {file = "typing_extensions-4.8.0.tar.gz", hash = "sha256:df8e4339e9cb77357558cbdbceca33c303714cf861d1eef15e1070055ae8b7ef"}, ] -[[package]] -name = "tzdata" -version = "2023.3" -description = "Provider of IANA time zone data" -optional = false -python-versions = ">=2" -files = [ - {file = "tzdata-2023.3-py2.py3-none-any.whl", hash = "sha256:7e65763eef3120314099b6939b5546db7adce1e7d6f2e179e3df563c70511eda"}, - {file = "tzdata-2023.3.tar.gz", hash = "sha256:11ef1e08e54acb0d4f95bdb1be05da659673de4acbd21bf9c69e94cc5e907a3a"}, -] - [[package]] name = "urllib3" version = "2.1.0" @@ -2824,4 +2785,4 @@ multidict = ">=4.0" [metadata] lock-version = "2.0" python-versions = ">= 3.10, < 3.13" -content-hash = "504593d63ff433fc8854d0e501cd076916e38999e2feaa0ecb539ae8166a7af8" +content-hash = "367403c9ca6eb1c8cad5eac863bbd637f6a4eebd278621ade2aa31d68dc49afd" diff --git a/pyproject.toml b/pyproject.toml index 4ed9b92..c23598b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "deepehrgraph" -version = "0.3.3" +version = "0.3.4" description = "" authors = ["francois.cokelaer "] readme = "README.md" @@ -8,14 +8,14 @@ readme = "README.md" [tool.poetry.dependencies] python = ">= 3.10, < 3.13" lightning = "^2.1.1" -scikit-learn = "^1.2.2" +scikit-learn = "1.2.2" statsmodels = "^0.14.0" -pandas = "^2.1.3" +pandas = "^1.5.3" matplotlib = "^3.8.1" seaborn = "^0.13.0" tensorboardx = "^2.6.2.2" torchmetrics = "^1.2.0" -tensorboard = "^2.15.1" +tensorboard = "^2.14" imblearn = "^0.0" diff --git a/tests/deepehrgraph_test.py b/tests/deepehrgraph_test.py index a031e5e..3bf5efa 100644 --- a/tests/deepehrgraph_test.py +++ b/tests/deepehrgraph_test.py @@ -13,7 +13,7 @@ def test_version(): - assert __version__ == "0.3.0" + assert __version__ == "0.3.4" def test_download_mimiciv_compressed_dataset(): From 0dd6f30573e79b51ee787f315505b0b4fd9858fb Mon Sep 17 00:00:00 2001 From: Francois Cokelaer Date: Mon, 20 Nov 2023 21:11:55 +0100 Subject: [PATCH 2/2] refactor feat select --- README.md | 29 +++++++- assets/correlation_pca.png | Bin 0 -> 52045 bytes assets/explained_variance.png | Bin 0 -> 27535 bytes deepehrgraph/dataset/features_selection.py | 78 ++++++++++++++++++++- deepehrgraph/main.py | 7 ++ 5 files changed, 112 insertions(+), 2 deletions(-) create mode 100644 assets/correlation_pca.png create mode 100644 assets/explained_variance.png diff --git a/README.md b/README.md index b6f05bc..82a26e9 100644 --- a/README.md +++ b/README.md @@ -118,8 +118,35 @@ We will try to address this situation by using feature selection techniques. Based on these first results we will try to predict the following outcome: `in-hospital mortality`. Note that we are facing an outcome class imbalance problem which can result in poor results while trying to predict this outcome, we will need to add a pre-processing for that. -### Feature selections and Outcomes class imbalance. +## PCA for Collinear Feature Reduction +### Overview + +Principal Component Analysis (PCA) is a technique for reducing the dimensionality of your dataset while retaining most of its original information. It's particularly useful for handling collinear features and improving model performance. + +### Understanding Cumulative Variance + +- **Explained Variance Ratio:** + - Each principal component explains a certain proportion of the total variance. The cumulative explained variance is the sum of these individual variances, representing the overall information retained. + +- **Choosing Components:** + - Decide on the number of components based on the desired cumulative explained variance (e.g., 95%). This choice balances dimensionality reduction with information preservation. + +`Cumulative Explained Variance` +![Cumulative Explained Variance](assets/explained_variance.png) + +### Expectations for Final Correlation Matrix + +- **Correlation Among Features:** + - The final correlation matrix of the PCA result features ideally shows reduced correlations between features. Principal components are designed to be orthogonal, minimizing multicollinearity. + +- **Near-Zero Correlations:** + - Aim for near-zero correlations in the PCA result features, indicating that each component captures unique information. + +`Correlation Matrix PCA` +![Correlation Matrix PCA](assets/correlation_pca.png) + +**37 features will be selected for training the model.** This number is based on the cumulative explained variance of 95%. ## Models architecture diff --git a/assets/correlation_pca.png b/assets/correlation_pca.png new file mode 100644 index 0000000000000000000000000000000000000000..d4768b688e058dc5dca9dd29e2037c1053ade17e GIT binary patch literal 52045 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 literal 0 HcmV?d00001 diff --git a/assets/explained_variance.png b/assets/explained_variance.png new file mode 100644 index 0000000000000000000000000000000000000000..f998a622deb5d1f91682d7d38128880cda4764af GIT binary patch literal 27535 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 SFo;)_&&N%2Omdk0-9G^F3-g!& literal 0 HcmV?d00001 diff --git a/deepehrgraph/dataset/features_selection.py b/deepehrgraph/dataset/features_selection.py index 9f8e909..7475f79 100644 --- a/deepehrgraph/dataset/features_selection.py +++ b/deepehrgraph/dataset/features_selection.py @@ -1,11 +1,15 @@ """Feature selection for the dataset.""" import argparse +import matplotlib.pyplot as plt import pandas as pd +from sklearn.decomposition import PCA from sklearn.feature_selection import SelectKBest, chi2 from sklearn.model_selection import train_test_split +from sklearn.preprocessing import StandardScaler from deepehrgraph.dataset.dataset import EHDRDataset +from deepehrgraph.dataset.eda import _display_correlation_matrix from deepehrgraph.logger import get_logger logger = get_logger(__name__) @@ -35,8 +39,80 @@ def select_kbest_features( return selected_feature_names +def _reduce_colinear_features( + features, desired_explained_variance=0.95, display_plot=True +): + """ + Reduce colinear features using PCA. + + Parameters: + - features (pd.DataFrame): Input DataFrame containing + features and target variable. + - desired_explained_variance (float): Desired cumulative + explained variance threshold (default is 0.95). + - display_plot (bool): Whether to display the cumulative + explained variance plot (default is True). + + Returns: + - X_pca_retained (pd.DataFrame): Transformed DataFrame with retained components. + """ + + # Standardize the features + scaler = StandardScaler() + X_scaled = scaler.fit_transform(features) + + # Perform PCA + pca = PCA() + pca.fit_transform(X_scaled) + + # Find the number of components that meet or exceed the desired explained variance + cumulative_explained_variance = pca.explained_variance_ratio_.cumsum() + num_components_to_retain = sum( + cumulative_explained_variance >= desired_explained_variance + ) + + # Retain components + pca = PCA(n_components=num_components_to_retain) + X_pca_retained = pca.fit_transform(X_scaled) + + # Display the result + logger.info( + f"Number of components to retain for \ + {desired_explained_variance * 100}% explained \ + variance: {num_components_to_retain}" + ) + + # Plotting explained variance ratio if display_plot is True + if display_plot: + plt.plot( + range(1, len(cumulative_explained_variance) + 1), + cumulative_explained_variance, + marker="o", + linestyle="--", + ) + plt.title("Cumulative Explained Variance") + plt.xlabel("Number of Principal Components") + plt.ylabel("Cumulative Explained Variance") + plt.show() + + return pd.DataFrame( + X_pca_retained, columns=[f"PC{i+1}" for i in range(num_components_to_retain)] + ) + + def features_selection(namespace: argparse.Namespace) -> None: """Exploratory Data Analysis (EDA) for the MIMIC-IV demo dataset.""" + + logger.info(f"Features selection phase : {namespace}") + + logger.info("Load EHRDataset:") ehr_dataset = EHDRDataset(download=False) - select_kbest_features(ehr_dataset, 10, "outcome_inhospital_mortality") + reduced_features = _reduce_colinear_features( + features=ehr_dataset.features, + desired_explained_variance=0.95, + display_plot=True, + ) + + logger.info("Display correlation matrix on selected features:") + _display_correlation_matrix(reduced_features) diff --git a/deepehrgraph/main.py b/deepehrgraph/main.py index 7c442d0..ab034fd 100644 --- a/deepehrgraph/main.py +++ b/deepehrgraph/main.py @@ -45,6 +45,13 @@ def main() -> None: default="data", help="Directory name to store the dataset.", ) + parser_feat_selection.add_argument( + "--desired-explained-variance", + type=float, + default=0.95, + help="Desired explained variance threshold (default is 0.95) \ + for features reduction.", + ) parser_feat_selection.set_defaults(func=features_selection) parser_train = subparsers.add_parser(