From 4487092d6e2459d0b456c89ac7c8b37ea09f672c Mon Sep 17 00:00:00 2001
From: selalimi <saraelalami2001@gmail.com>
Date: Fri, 10 Nov 2023 18:37:48 -0500
Subject: [PATCH] results

---
 .gitignore                                    |   1 +
 README.md                                     | 127 ++--
 Results/knn.png                               | Bin 0 -> 24851 bytes
 Results/mlp.png                               | Bin 0 -> 28202 bytes
 main.ipynb                                    | 623 ++++++++++++++++++
 mlp.py                                        |   6 +-
 test/__pycache__/read_cifar.cpython-312.pyc   | Bin 0 -> 2268 bytes
 .../test_read_cifar.cpython-312.pyc           | Bin 0 -> 2259 bytes
 test/test_knn.py                              |  33 +
 test/test_mlp.py                              |  39 ++
 test/test_read_cifar.py                       |  46 ++
 11 files changed, 812 insertions(+), 63 deletions(-)
 create mode 100644 Results/knn.png
 create mode 100644 Results/mlp.png
 create mode 100644 main.ipynb
 create mode 100644 test/__pycache__/read_cifar.cpython-312.pyc
 create mode 100644 test/__pycache__/test_read_cifar.cpython-312.pyc
 create mode 100644 test/test_knn.py
 create mode 100644 test/test_mlp.py
 create mode 100644 test/test_read_cifar.py

diff --git a/.gitignore b/.gitignore
index 63649e6..4575584 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,4 +3,5 @@ image/*
 _pycache_/*
 plotting.py
 image-classification/
+cifar.PNG
 
diff --git a/README.md b/README.md
index 3ec3bb7..77c08a8 100644
--- a/README.md
+++ b/README.md
@@ -1,92 +1,99 @@
-# Image Classification
+# Image Classification Project
 
+This project aims to implement an image classification program using two successive models: k-nearest neighbors (KNN) and artificial neural networks (ANN).
 
+## CIFAR-10 Dataset
 
-## Getting started
+The CIFAR-10 dataset is a commonly used database in computer vision for image classification. It consists of 60,000 color images of 32x32 pixels, distributed across 10 distinct classes, representing different objects or animals.
 
-To make it easy for you to get started with GitLab, here's a list of recommended next steps.
+![Semantic description of image](cifar.PNG)
+### CIFAR-10 Dataset Classes:
 
-Already a pro? Just edit this README.md and make it your own. Want to make it easy? [Use the template at the bottom](#editing-this-readme)!
+1. airplane
+2. automobile
+3. bird
+4. cat
+5. deer
+6. dog
+7. frog
+8. horse
+9. ship
+10. truck
 
-## Add your files
+## Accomplished Steps
 
-- [ ] [Create](https://docs.gitlab.com/ee/user/project/repository/web_editor.html#create-a-file) or [upload](https://docs.gitlab.com/ee/user/project/repository/web_editor.html#upload-a-file) files
-- [ ] [Add files using the command line](https://docs.gitlab.com/ee/gitlab-basics/add-file.html#add-a-file-using-the-command-line) or push an existing Git repository with the following command:
+### CIFAR Database Preparation
 
-```
-cd existing_repo
-git remote add origin https://gitlab.ec-lyon.fr/selalimi/image-classification.git
-git branch -M main
-git push -uf origin main
-```
+#### Database Download:
+The CIFAR-10 database was downloaded from [Dataset_Cifar-10](https://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz).
 
-## Integrate with your tools
+#### Creating the data Folder:
+A folder named data was created to store the CIFAR-10 database files.
 
-- [ ] [Set up project integrations](https://gitlab.ec-lyon.fr/selalimi/image-classification/-/settings/integrations)
+#### Writing the read_cifar.py Script:
+A Python file named read_cifar.py was created, including the following functions:
+- `read_cifar_batch`
+- `read_cifar`
+- `split_dataset`
 
-## Collaborate with your team
+## Implementation of k-nearest neighbors (KNN)
 
-- [ ] [Invite team members and collaborators](https://docs.gitlab.com/ee/user/project/members/)
-- [ ] [Create a new merge request](https://docs.gitlab.com/ee/user/project/merge_requests/creating_merge_requests.html)
-- [ ] [Automatically close issues from merge requests](https://docs.gitlab.com/ee/user/project/issues/managing_issues.html#closing-issues-automatically)
-- [ ] [Enable merge request approvals](https://docs.gitlab.com/ee/user/project/merge_requests/approvals/)
-- [ ] [Set auto-merge](https://docs.gitlab.com/ee/user/project/merge_requests/merge_when_pipeline_succeeds.html)
+### Writing the knn.py Script:
+A Python file named knn.py was created, including the following functions:
+- `distance_matrix`
+- `knn_predict`
+- `evaluate_knn`
+- `plot_KNN`
 
-## Test and Deploy
+### Performance Study
+The effectiveness of the KNN algorithm was evaluated based on the number of neighbors (k) for `split_factor=0.9`.
 
-Use the built-in continuous integration in GitLab.
+### Running the KNN Code
 
-- [ ] [Get started with GitLab CI/CD](https://docs.gitlab.com/ee/ci/quick_start/index.html)
-- [ ] [Analyze your code for known vulnerabilities with Static Application Security Testing(SAST)](https://docs.gitlab.com/ee/user/application_security/sast/)
-- [ ] [Deploy to Kubernetes, Amazon EC2, or Amazon ECS using Auto Deploy](https://docs.gitlab.com/ee/topics/autodevops/requirements.html)
-- [ ] [Use pull-based deployments for improved Kubernetes management](https://docs.gitlab.com/ee/user/clusters/agent/)
-- [ ] [Set up protected environments](https://docs.gitlab.com/ee/ci/environments/protected_environments.html)
-
-***
+1. Run the script to split data
+```bash
+import read_cifar as rc
+X, y = rc.read_cifar('data') 
+# Split the Dataset
+X_train, y_train, X_test, y_test = rc.split_dataset(X, y, split=0.9) 
+```
 
-# Editing this README
+## Results :
+### Generating the Graph
+1. Results using KNN:
 
-When you're ready to make this README your own, just edit this file and use the handy template below (or feel free to structure it however you want - this is just a starting point!). Thank you to [makeareadme.com](https://www.makeareadme.com/) for this template.
+A graph showing the accuracy variation with k was generated using matplotlib and saved as "knn.png" in the "Results" folder. :
 
-## Suggestions for a good README
-Every project is different, so consider which of these sections apply to yours. The sections used in the template are suggestions for most open source projects. Also keep in mind that while a README can be too long and detailed, too long is better than too short. If you think your README is too long, consider utilizing another form of documentation rather than cutting out information.
 
-## Name
-Choose a self-explaining name for your project.
+![Semantic description of image](Results/knn.png)
 
-## Description
-Let people know what your project can do specifically. Provide context and add a link to any reference visitors might be unfamiliar with. A list of Features or a Background subsection can also be added here. If there are alternatives to your project, this is a good place to list differentiating factors.
+2. Results using ANN :
 
-## Badges
-On some READMEs, you may see small images that convey metadata, such as whether or not all the tests are passing for the project. You can use Shields to add some to your README. Many services also have instructions for adding a badge.
+A graph showing the accuracy variation with the number of epochs was generated using matplotlib and saved as "mlp.png" in the "Results" folder.
 
-## Visuals
-Depending on what you are making, it can be a good idea to include screenshots or even a video (you'll frequently see GIFs rather than actual videos). Tools like ttygif can help, but check out Asciinema for a more sophisticated method.
+![Semantic description of image](Results/mlp.png)
 
-## Installation
-Within a particular ecosystem, there may be a common way of installing things, such as using Yarn, NuGet, or Homebrew. However, consider the possibility that whoever is reading your README is a novice and would like more guidance. Listing specific steps helps remove ambiguity and gets people to using your project as quickly as possible. If it only runs in a specific context like a particular programming language version or operating system or has dependencies that have to be installed manually, also add a Requirements subsection.
+## Analysis of KNN Results
+Unfortunately, the performance of the KNN algorithm was disappointing, with accuracy ranging between 0.33 and 0.34 for different values of k (up to k=20). Several reasons may explain these mixed results:
 
-## Usage
-Use examples liberally, and show the expected output if you can. It's helpful to have inline the smallest example of usage that you can demonstrate, while providing links to more sophisticated examples if they are too long to reasonably include in the README.
+1. **High Dimensionality of Data**: CIFAR-10 dataset images are 32x32 pixels, resulting in high-dimensional data. This can make Euclidean distance less discriminative, affecting KNN's performance.
 
-## Support
-Tell people where they can go to for help. It can be any combination of an issue tracker, a chat room, an email address, etc.
+2. **Scale Sensitivity**: KNN is sensitive to different feature scales. Pixels in an image can have different values, and KNN may be influenced by these disparities.
 
-## Roadmap
-If you have ideas for releases in the future, it is a good idea to list them in the README.
+3. **Choice of k**: The choice of the number of neighbors (k) can significantly influence results. An inappropriate k value can lead to underestimation or overestimation of the model's complexity.
 
-## Contributing
-State if you are open to contributions and what your requirements are for accepting them.
+4. **Lack of Feature Abstraction**: KNN directly uses pixels as features. More advanced feature extraction techniques could improve performance
 
-For people who want to make changes to your project, it's helpful to have some documentation on how to get started. Perhaps there is a script that they should run or some environment variables that they need to set. Make these steps explicit. These instructions could also be useful to your future self.
+ ## Analysis of ANN Results
+The deep learning algorithm (ANN) used for our dataset has relatively low performance, with test set accuracy plateauing around 0.098 over 100 epochs.
 
-You can also document commands to lint the code or run tests. These steps help to ensure high code quality and reduce the likelihood that the changes inadvertently break something. Having instructions for running tests is especially helpful if it requires external setup, such as starting a Selenium server for testing in a browser.
+These results suggest that adjustments to certain aspects of the model, such as complexity, hyperparameters, or weight initialization, may be necessary to improve its ability to generalize to new data. Further exploration of these aspects could be beneficial in optimizing model performance.
 
-## Authors and acknowledgment
-Show your appreciation to those who have contributed to the project.
+ ## Conculsion 
+ The best accuracy is achieved with the KNN model, reaching 36%. However, it could be further improved by using Convolutional Neural Networks (CNN) instead of Artificial Neural Networks (ANN). CNNs are particularly recognized for their effectiveness in image recognition, analysis, and classification of images and videos.
 
-## License
-For open source projects, say how it is licensed.
+## Author
+Sara EL ALIMI
 
-## Project status
-If you have run out of energy or time for your project, put a note at the top of the README saying that development has slowed down or stopped completely. Someone may choose to fork your project or volunteer to step in as a maintainer or owner, allowing your project to keep going. You can also make an explicit request for maintainers.
+## Licence
+Ce projet est sous licence MIT.
diff --git a/Results/knn.png b/Results/knn.png
new file mode 100644
index 0000000000000000000000000000000000000000..93ce23e5896f4bd9604d96a8349e8c56a1e0e0ec
GIT binary patch
literal 24851
zcmeAS@N?(olHy`uVBq!ia0y~yU}|7sV0^&A#=yW}dhyN^1_lPp64!{5;QX|b^2DN4
z2H(Vzf}H%4oXjMJvecsD%=|oKJqtYp9fgdNl7eC@ef?ax0=@jAbbZr}TURqMFmM)l
zL>4nJ@F#*W;|lxbnG6gG4W2HJAr*7p-mQ!YdHRU$L;8)0vVj6F2URtLJp(TtF*5xc
zrMDwpFC{W-*`!!g@3naox6Smv^{lASS9$HaOs_>VmZ;6z>5`?^wO|obSC>U`UHzW@
zk`fXL4VIhdKL7pmOgdlsxjCQZ_zd{pSBg(n@f7Ol=;-h;l+lT0P*PG-GSX*r0MV_9
z3@S=WN<k7Mh`T9KQ&TfwWr&BTr{T-GP%Y7C=jLW#s-1P~U^Dy0mBH#26%`IkgC3rk
zs60(iXsTiPyO<RrtFm%u&z`Mayt0EMfkDM+<-XeAi~QzV?I?Wg)_S`~!jMT%Pj5%n
z*Hx0<VfU`Bjb3Z_By`D+9TLs#{KvLtU;ps&xV*BVp<u7H`MOWF(cAM{y_Px^6d0ID
z^-6kqrSARxZugBnm77m~w@y1FQBhSjExP{8i$E3@76lz0p8tP7_n++dPFXF%(CL$L
zq(g8=?QgSvf4@aHufM;mlskG`j^p~cy#d?v?ncS4_nxi?lHOJFGU)C1yt}(Z^Y{H+
zcJO-M{e8XH<LmcsJ39I7Oyl%|cXup(W}ERoKGu8K_`D6Xz5RZz``gpbO0~4MDq34h
z+yDQwS<-7&&ieiTtn%*fTf5zF9Ye;6jmgI^tc^CWsHjM|zAl!7o7?zwVP_5_v%*Bq
zuWxUQ$Hm1(>@Hh-@cQ<gn@xufIrT^wE($xov-mlmi4?DljLd^)&)C@6FaOipy>sWm
zlP6Cu`E9cF^mKh@hML;i-a7xpM8$16H=BO^sId8R!8u}cTCdO2)q4*ea`F~Gs4{2H
zoCnXIrA<thx381wxBq8x=kDE&+1K@2+S{X-$hchVVw`ZI<<8x^g3{96PoAX2dT8dp
zy|wkjr%z7z_th4@y=4mW?b@iVP0N?7@7cTe;_mYNKmUHeuX=xR+vn*0b+&Q!e@k0h
zS{C@twbIbgFu1{HU}`Gb%+Bw&*sb@$t5;nYE(G|@wF+IYmUd=_VZ^2sPKJy3{C{6C
zy2AG1!^6Wb?(R0<vv=>qmoGc>?(TYcJ-+_x?X;(-rUtAG`SEmmynwuXf7RDl2M-@+
zW@h6#FjYIe=a<~SKcCNcbapnjx3kyO)?Qp6Z$HPTGHCsqe!E{93<)0|91K_)Qt@Wv
z@l|);Z@*vHeS3R;@`ncpCCqXpCQX`D@ci7|qT6?O7PA*WKX<hD`(1W(b90l73k(}K
zZnP+V){`gQ>(=aV_mc(W<=L~PUtL|@9=EsZ;r9D=%nW}%pSKTK84|IxD0S!G>3{EK
z-QG9XqL9ho{;$cOKYuRlEKX;5^zG>k!{iG~JcW1c+^MLc!ExU1_nL#xm?I-2C9KPI
znwpy*zIxU5;X^@>yuDoc`+G<4*Z=38>ebqB|8K{g-{0QeW}oWSTKf8$<ez<>lUf=Y
z7>*o2{(A2I_3QOzWMwB#pT0cWKL4JLg{9@gXJ=<uJrDbJhnt&wW7buzyXWuBFiif^
zH+}l_cEjXj2d-Zix3jbB=<YteHhMeHw6#j={_|Y6=iLRxN$l>jg`Shuu2$Jk6pDDi
z|A&iN){zduh^<+o`~LmP-t*;>_pYzk*To+G_V%`6&5wc|yLUhS@$vDEJ(b36{Bk`X
zJ`}|4D&d@8`%O}=_DkR#i$bP@2M<>LuKoRX`@=_%nldjhTexBchn}7uTmSyT$8L9a
zm2y8m-tT^QS83sc1B^ORTR6n^Vh$YZm1bnn-}8Y<FK$nVtaX`!q2b0;#a4BHERvFv
z9=v_qTmS#}{erTxW9jp2+m6ds^Xx8v?^aT><=(f+YQ9bL=gU7kGqbt=-%oaKF`Wb6
z`g>b=rOiUB=FGJ&UsV47UdE**oX^h91;_ryMXnW3Cc00UH?MEQ27^5x4smmEavt3M
zeqZ<W_&UkAx3{||BqU6Iz9H?bRLR?0qK=M^pv01PW=7-t{r}~f+4-;KE)HA$@yTR=
zB}+@m!)?5WpPZar`1ly_n;RRMkN3$sUtZ?R$dG)z@93$i+Mo<#^Zicoj`H_%LBYWv
zU$5V<q@}g$)Fug|iVq1U`S)br@B6K%;>pAS(p~@mulb`#j|4<SS{@(ofBgBp{qc{F
zkApP5I&}4DxA?_{&g@T~K25x{qp+i+!yzn8%q;g-OZ4_UQ2c>B1#+~{T&t~jz8^h(
zn)~msuf`F2Q@vW<<tkaKzrDG**1GD8#;4DpA3k`{5MTF`wf5H+MumSrD_$&Y=h=3Y
zx#7qW7m#CLTv*6_tXG<yVb}YW*Cr@B3&_d!wY0D-S-$-7Y5n~!e}8>7%)e)|cwfJy
zq-4dPkH;TAdD0TQyKL%hd%?f<ogF@}?(MA(YG&hI(kE;EYHj?soS7^RxAxWUR`Hxv
z^8B2v=i0E>xy9e!M4r5QHMHvW+U+H;%ii8nWt=d}Bva|`u2S#(>bKdu%idmEtG&Bd
z#WTpsscA{j$|c3m&%M0nJI5k$)eC<HhRkzwEO)K{{r$cE&K)~E($CGgxOR8N$3;(`
zK2<G!dC7Hq-q9{mA%>OJ-``DgTYPcte5=w`PhPyxc>46Iq|Lmrl$0eQ`|E07zPh@4
zSLy!$|8_rl@Iawg%5>G8%KSS!HeULh8M~{*v#6+O(!L*$xbN=rn``Cy_t)3UxAT5}
zdMd>5a&f<%)^`54KmYvsd|rs*<<sf$>k4LXPCxI(utZclY|8CrZ@!nEn`0@&kon`o
z!>8L!OLVWVjaFxz@a@gb#nI+jS2Ru@Jm_du@gbo#_1Bxt=T#Ukot&&*y8iCo>ToU&
zjtOr4a<T7fm+t-l@Ass|ix-Ck1Soh;Qqhgs5s-Cf$HprQo!K*geR(-a#dA{B+G#bl
zwM$n9FP~<;{gRE14Ue4v?zfxI+pXSScc6hW=<cpkZQc1Qo|j%+T&$X&p1#ttnJuWG
zV8fT|@%5oU<&;z(>n11(7nhVA*^qd6!nA42uD>pLduuBP4-cqxU|?9cZr!eJ)mdAm
z!q>;OE?=%5wI!qR%a<=jzh!N!OzzyhyV|DiWiA&t_r%$=yZz=`IZjfMv8&l}>p3Wg
zT=utLSpWZD)%HtLCK(OO=hsP9e}Cud=-7C#`dF{@^77aEYHDm*Tcw_#o4fjh#m$>H
zEsCCS9P5!}uCK4Z`|H};=*8~+ayNFBW^X;cZfo7&DhmsXga-#2ca<J)=Re+W|F7fq
z_4Ti>)qXx}&cVTPV2S7CQ*WKC?e5on<_*yjeRgJM@Iy1xkB_?br$vYVin_P6n0@EY
zofSVGwlg|>H(qoxV?*WVG@Gwig4wd=x28%NrEuK2bLYz~yS)4RWI+m_%}m$Qo&D|C
z+uPgu8&<sR?(B5*@!<&y4rc7&6R)hS?C9)Vc`kE$@VDOr!otm~!`DyyEotnsHcZ*v
zT>Rg^e;gbfD?%+h-pDd5Oyt=z*JjIHN4=OG4Ogy&@JO5S^!4>I9AW={T)w{N+1c5L
zuU-{pWMo_szJA`jZ&8uQ%#zNZIdi2|!{6Wk%Ia|c>uKjM)U7UhdP)>jcIrlL(fEGr
z@Av!sy>88)pPzrdHvh_siTAGGlH0ZPa9HH6f{2TSMa9M0cPx{>zPbv^%Io6xc3ocX
z|M<(x%b=WI@cmuv-P}TlFM4?w7r8E#O*l8lviZS-guN58xZ2je-<o~hpz>1+3me;^
zyLV;3zPfrjclq9F;p<`?9UU3vYCatF`u_g)>+a?As=U@WUz%l_Eg&S+bX>lE&!z9%
za&L>3zPfU;)i#&m&84N>b-&-5-`QF0{(aWAze&DVpQO8=zI#{p|KIoZg^!MKetCKM
zc%Ic|fs>8744o+#*2P-8xVR+T-BnugcI)*Gd3UWmCM~)C`}^JU`$who_cW%@uNBMR
z|JUr#-@l;ZOEY+xgv{b|Gj7>$jp~)Nt$J{4YxWGgS}P?br3VimHm+Ht(<5noEGPMX
zrgL88rT^P=jh6>6_j~x@U^7F*v$M0OSJ$4MWxDHI#<HM5-vv=?*L|>UTlao~qVtCQ
z`*wSNy;|MT)6=qixw?rIZ`IdVp^LLEv#x05+}R=c``cUR)nRKt+%3PKc&LRl^qW$7
zS(#f&iOIJ&H=8dn_g7X|XE!u71ZAMYLc?$G@AqH165`_GvLJ46)m6Rl%&mWKN}A<J
ztc%~@$0@9)U}h$Ezy5!1>)X`MDLsr6Jk*rkdJcfRyV$)y>Fuqp8Ta;B-rAnOzPk4E
zGT#@swrcPD^-6p1_oq*vUj6ays(k&Q#{K_(ajy<rduT=A;*!_pZ*BzUMJMNnUt1l{
zU;65bqnn%C&g=jFeD=4nuuw2D+2Zz8*VlSNvFmY84vvQQcK5B{cc-0|vaq&RHZ<HA
zv*X6@a(ywqn2s}Nd`z;gaQMzPJNobM@4%QCp7iwe=HJ=3wrFn4zu%XAeO+h-_lmV!
zweC8LIV|0N;PkG#zgCkbPyYC9c7D>gH#c{EUG6vc((QF|d#gTt`*v(&^6^!7(m{>u
z^>MaqA~&;Lym)a(>1#2!KAFsr%A}+ugZz6oZ|>|AW@KdS=;&zhTIzIqn(o9|v%0Qa
z39<S4WOC@c<!0MY_L|oHsfgKK#tUjr&#QbU87s`7q;>E<htkZ9?B8kU=k+SP_f3)h
zeg5LbjWKJF9qW~zICX01<K!%6zn6c#Cbjt6{akWq+bx4ovn3L@o(uciH0nlgd$Bch
zPsvN6YwKdW&&{<yeEat9W2x7&E-YYFQdS1Fr1l!gT9@(I|NSET@9X;ds~P*VudM-<
z1Z{k>U5?FcFKy#$zlJhg;B7Q2c;N8l*|VgNkB&b5w)pQnJ{b#vNh*>uF44Ptw{JIR
zVq*GIb&l!4^7(aHB|CXzy%{1lBsAW;&d101;{Ja7egFSe-!(94JH^sb__K{)zHj~h
ze^T1v>s(fct-Y|TG<)$WVPWCsMT?YlA~rD0wJyKLx^u=12^BT9M~{wnyKVjd`NM}5
zpVH5Xq@A7Bx-xiq(&J;j6%Sj*Q|#p?u1(}snCNrp@L^D&Ea&DXR)$lo2h``+2<7kn
zD)#8nqYEp8)&G1vE+4Tu&3ElFo$ihfhs(=+4Rddqq@<=EynS2xe$D6JgWrPR-rCB{
zu;<UG(=TprUcT;gm*W4Q=j%5lALlE1cSllK&8K1VWMRACZ;VAmMHB!1`Dv<`ANhX&
zf4i#h?|S=Wt&`r|*tjb(p{AxL%Ov;izrVi=e|^c^`>?``o0HS=_O{%OX=kN;=G)0G
zcI!P<|NnRVk>kf7A82Im=<IY%OjIm;cc+t6SZzW4{yI=DaO;!lY~>bzbY*4muG<?|
zu3Y)z*4EYUBF@`>m$_H{-WJq|>FDY@G|#sB!}a)j$=I^|{QQ!amsmePKkr^xXz1kR
z^x?9<{lhmmH$UB0`~7bDM-cC#yZq4|g^vsV|NX9PZ7nTro_FNl-s-PxXXH$?L_oPB
zc6XVi?G`SEk~cR5{rvn+oH%h|cj~>R-r_p3yF?gzxEkKx+IslhT<eb)-Q^W6EF>O2
zeE76Y&}b^Z{U3qr>*J44kFVpbum7JlSAXK&%|6eQl~N-%rF615yt=T^dFS<acXlf8
z{d7tj)N)cOFE4*N(OquhrAwEVxXaguRDHSVUV1y!>`CXs#00-N7K)|s@5O%l@?{DW
z6VsCC^Xub&{r!IbG_QBj`+K&TmzH=2?XCK%GSzFTc?|n0o=_#vNmJ&{)BF17W-v(4
zt1By&OW)oKy|q1m{yno>i3z9p+>=(!5xu#yc=?wT%KaYi-o2Z&ef#z=SAzXL)&1re
z?AX7mt#PJF<|Gz}{2#M6Jv%p7n{h(j|G(v)la5@_-kf%J(xJnLLCp(I4Gj+|lZ*-X
z?B3notqy9x1i84hJbCm;>FVlm|5tZ+Z!dXqLGiBH_Po23j`hiE|NQa8BQ7rP(ga24
zC8wwBhg<NRnW`OrYU<lVt=yLy7@1Y#<Ks^rKkhDNQ?a4s<0IGR>(B4(EWWfNaPg9=
zudh7Uty>o~S<QDzr?9%0tE=nNZ?`w4dV`u)y9ypUExo^g)2;3K`iv94y}!Rc+>Ie9
zBO_zyTV7t~&(G)Ad&TZ5nRw^!T~&r%iiujk>@w<?ottMHoq5x(Urx8OqGC#P{rh{i
zE9?LN6JpR*R6KaXSanmqmggpi)j3K^n`X4jRdM|L_s_%6Z(B)V#|ft!Y!f;>96=SH
zjAfC_`pE)<n*7-eogE?%Zfs1pD0v}Z_veH2lV{H!z2E=8ZT9ThOS@fN#12V0C@Hbt
z*peyy=+UEqn3$f@*VhdH2x`iJbar%zw3#-zxVX4*9cJ)wadBB<zysyZbjWgCeDT4f
zqun1qeKI=zXPS$POGx!3m50ZAr8)Tc!rs_i<Z0Mi@bQsrOIusiE(wq{^Yiob-4D0%
z>c;YPCorsG)z{Z&c*K6<_U+q;mMSVKDJ6@Dh$xttgnYML=fcylb-~`Zuiw5s3$i#R
zdCHv{@0sTNIy*W#M0yw}fX2TPB^bcmHlnx|0$W6bRySS=QLvWIxWLfS$tWYM8>^+H
zq_jz#ry)#DlXHfR<c@-cDY1v!4yey(*tl_;wz#06;7$H}Oxu(^Jr68!{PmEZVbi7~
zzm}++p3>dX(eZ|xdBN0x)vjmft4yu;-JN$zWTUL0pkQFG0Yg;hl`Ef2>z8^875v+C
zqpzc*V}+Rn!&;ZJZJFDZm6ViLaWF5KnsMR4mfM1Yf`Xwfj2FC)9O<~XPiyMK>!Df-
zCLuZQpb(ShX$U)XF_7nLQiqv{Uc`ZqARn*zCc&`QBS&XLrf|UiegA&7@gA+}V+KXf
zvIC6^*81e=T-c;4Ajr657t`%+g=zwz5klQ-3{eZKz8)zK6uhuf_^`a7px{g~<^`gk
zK5AxuFaNtM^|X_Vi_5om#tU4QR!sZ$CH=f*+AY=!@}vOsf~lXri=PL_d`cEiL)fak
z*pFvG(c-e~7(>R=2(aBn8)q`?NI5Cg(%O3P>{;H67cW{AJaA~et){A~sHMfVZ{NNT
zA3ivwq^Jl93!ly{|MbN3%iG(a0RfQk?{9A>&YY?FJX4|<9GOp&gc%DCxAAuL_aC2Q
zSq$nYo8{hGkbZvNj+&pF4!-^S_pf30HJv3(mp*)PadAg?w{uL4%(ndd>ux_gGt>CR
zot?%?N=g$ZO=?=~-v6lA{9eQC*|T^0tq!`yQ1NwD>S;%iU)@zbC#Ae}3Q@JPl6rf4
z`|(FdyBQgzdf65(TsXrdQz-4sjKnK;x3=YW+tvPh@OJxsHU?0u`P{j4Y}stRp#cF5
z^78Ueo<9fI*1ru?&dEGjyS?G#<3@jb)0gWyJ32&s&z;YYPW)=x02)+T=-hr`Z*}=y
zD|UAFlK1yyGcz+o_r*_AQBhY{R#s+?-BrS<!1Uz*zwh>U%J0{{xVc&V)%ErLFJ5Hi
z+}jhm?(zz=drWFdN=iE;Y8lR)J=+?!)-54n!M$Gx4mdn{@+9QPzCV9zDypgu9X$%_
zP#;|6+I?ZMJ3qsLr>CbEetzb==li|t7gtw{*Zq2_&Ld#}8d|!sx4OLbw~m&U6R0=j
ztOt%>74hA3xo@04&F$VNbMWkJ^NDlj^!)fyVUl@?rQi0OgozX{1E~6&VO6TdpkQPq
z^!wY}!<$l1e|WLDU+PY}lM~aun$NzQr_6^&;#boKMn=Yhl9D4!y{CV<7Qd^6)6vmU
zbl>@d2N}=KGIdT#QHiU3D#{~e!okVOxvSR7((+*=yWEB9^MAkJkI&S9Fw;0)$=*Kx
zyG8xK8r^eiilB~M&EKG>r<ZYko$RE^lS^NlNbydZJo)0rWcS727hlW>2nktoI~|my
zCQe+q{cL>w-_~Qj(&0P!!^6WXs;ghyJ~;$VyhR&3qYr%i_))^P%4E@^MHd!2vx6Eo
zt*xyc-QCO#JyNDzii(Q6r1rJ6u(-IoF3h~VOhZfS(6zPE6KBlmSn56f)wiFoR<BQb
zabe+$OG~+TmA&oCy}j+>@Av!Ny}Y_q{Wi+vGMqWj{_ZaGoSa8qf`Wn*bvJZI7?!*U
zh}l`hx;g#4o1Y&asD+n%+bs6@gfnM+EG(vkq=|`%B^_$v+)?n52{Z^QDA;&)b$IfN
z3k!GUvhheXq@JFpsHn)OzyFUBs3V-e?<d<_>vFT-KP4YM58pIrIy(zX#2O737nhXu
zoFo~CY}M};PW$#PVlz-?-tpdU^80xm9Uc=c_!jVPVGJ?a#tfP;ury$ZG6c^VOk!qU
zAo{rGfQyTZ3Ok#F_AyZHpad382G1>^DJ4rVmtjwx?1c=SXfaUXE6>vq<|ECZ%6a1a
z_MFI$j*b&`Am@mSAGjQ>^V!S*R8ny<FPNHa4VvRHGG%knUe4PPzCLQ349JuA5)5l0
zb=8S0ASSZ{NP`qe1K7dA$qZW{$p&0>^?_5SPcP$zQ-%yef`SuQ8Zty#g8dFQ`Zzdc
zfQq%Judazg%RDWfhOl)dybDw!x9NcFl$T&wJ7@m<im=s<(&kWa@bff;ox2-r!*Gt>
z$Hm2E*+GU3<{N@79UUD$os1XQ48WFY8Zz8sfLNx=<{*6lV%ZUf3}$duc4CSILoNfv
z2SUsXcoQH#NMhK+2u}DZUOWwE4WAi>1qCO9jk<=-)CHi>VVab3bCZCe;KaAd3|km)
zF+{}hh=@f&oc~*bA=hE9RYP}o#IxK4P-Udc<{-TwXrnAR?D&`$^g?Y;WY{7Iv000!
z!K?`qcCCyT+#udrX~1xc1L7S~HV5g05bqpf$WVrdT}U)YBe)Hb0y1OK7jWWo*?N#6
zLm5(WECXqP_&-E~A-Bbh;oeT>JNt4W?$1qT*diDg*RXhTM4B$heOK9-7xV_KtdO1o
z3fpGJ3vCd`Xc{ow5`Z{{mCZpKlEs%DV90QWm@Oi~kjwF$8B~Y{CopVLT*C-T`e5c9
zey~}Mj2GHAuz{KuJ|HF`W4ADF*dU;xwF#1F%M2NA3CPPkEEPI^eSI_}pm*nJG3Z5Z
zVo6L)EGRB^E-5kLld%YRxXshkv!ko4Y5jVA8ygz|Ny*M5M_l&if<~RDdM*9_;_B+@
zca{ex^YJyzpAU;6O?7Ya0};|@ISw^7Hq&&Y+g`lL02NlY)!$s)+}K`SUmu@WU0+{+
zW|k?pprBwuVc|i3`#%jkc350lA1`lP{q0Kb_0{3}Ya%u}ec!rz_3FrT%a{H6>-qzn
zffvo%G*jw8zuhm6^Y;I39zA;W;Q%v#!p%*oD}tBvP1BFhEBFl>?FP+v{QZ8vf0^&>
zq)$&yX58In`t9A_)!XN;Uaj5K)KtQ6pDQ|hYLYvs!LdqrHb(<-_1?v5T~$@qudlDW
zcZ=y7fO^+!Q)cxpTBIZ*BJ#raOfNXS2j<>9qWj>^otPC@vsl>JUajTl;W;wD{$J$7
z-=98z78DX{TC_;X!piE=Wq*6uemUEc_1|Az<=(h)BL_eK@tMZyA8uu@Us(SBo`<)0
z^Ww$HJO8Sxs604pe&6J7=T!!9Q+LI-93_TpQ>ITB?~}1?nr)u1WN9h+@#9C(u)SRM
z8$*Tz8xjwf+}@UTm1}MEcDKvRd?!wt)RcF3*VNnh&&)Iyl$T%sd)I;m3=0=7+%(@k
z6OyK~POC8`I5;rK$jTPJyrjDK>vX+Xr+|Qf*7wB)1rD3j&N47eoH)^<@{@{?kWdNZ
zhBa!wvlJ8*7?%6bH<Mt9jg8g4=h*_zJt5I%7uhZxJ<9s_)>h}DqD^^o-4;6*6&YET
zy~+4eXClShr6uY3^H3}Ij;gO(QYIMzt3RFU1ZUW+(`s1^j0$#ka*N&j-9kb{tV&)q
zuyTtn*swvMu&|J!A#kyqqKXO&CnqO^OZDCrD>O`UZ;80Ny587Tsx2feys_kE5W|79
zv(3Q+D-RAda&U1S0tM;&`v1~rXPI7>Ry%eJoLK^MZ~8FESe0n3i`m(9b8|Xq9BSgk
zi8r?8&R&=7k(Q<=BjcrI!p+TXn0SaKW=8?zyLaz8Iyw%#y1E)vD>5`JUaZ_FXWJFJ
zI!sYtpa0;&gB6cD)jxc@oge+jEI$>Tk5_C9nWW-5O|NCGmWD<{e?LEHD&g(h+-b@G
zeraFWs4O7HHpe!5nzN9g;7w8Qn!0G|*((`U8ciEQ1h-0g__A)=+{nh;Fhk<Nfeben
z7Z;v}ZEn&G+*}Qhk`COwx#_9m>j_g>eCF}Q><HMjF46hHWdDX65vQkicXX_o?E8gj
znb5v{s;4U}r)jZ9PF|vta6#ek2X=<Y$fVk!NvWq?U0kkpGhR4mVaaG`mo#&Gqvu*N
z)B3ikPg&P}XDV$|R#Li@#IVINhutG;<;tho|GXxvJor<&QC3iJq8Rf6-c`}zHpUD=
z&@Mu10>c)^Is7xW^vvCItV?~nqLLCfNN5kMPn4nIqV4&vA+UbJlA{b6%@Pcrr$If1
zAVE(iF`Wk$4K6NA`WY{<88QTA`pydZR~0z1@|2^C%eH2y;OFPv&lQ~;Vs|%e%|811
z_4@9w`g<7W*yZm0Bq%uX>q8#}vkt}yTh7g6HOmn=ZJfryZyWL{>iM|?@9rjX%t$=k
zQ2U!fT>SKu$sHYQxU(5@1(+2wYkw#%xX9pdvrzsYgJH&xTU#GJe|kYtP@uD;gMrOq
z_7MgThJvSD8)|k&%(J`u!Hid$NjtpjX}>*N-H(GhuF6VE+Q-2@;baigWy-tHwrEkq
zx>)Ud?^Z59Qc}oZkk&Ipc}7RalwQUQY?;gnadOWqLRZZ;Z#>$4^wXD@NqhF6Iy0Mn
zORhE>zr10Sy}65v7s$9je~xTcVf^`Xnl5+bvFY(l*Vi+joz2Y57P5EmYV8emwhvxv
zTDARoZvSceMyo4X3aYFT+x={e7YGTS>}I^cwsQwVTpTDar!L<i@#BT^Mw{GOADeB=
z^Z9h5)u!FA@@8?&o-l=_rM2_+4S##xd4~@jsZvs!#Lm2+_fgG(Q(N<73;x*%NO1H>
zh3@^{C&75+Xy?4c{`S02o}CJIOIB57Y-VE=*L$)4{3)T=l1!Z)PYyC<EWRP=GSg(%
zq{jKneHicDS+&34wYxz~x1n3yb-942Q7UKe^04l6nr(gSW6e{!^4Wz2Pc|}Ma5H4k
zy4-KibiBV?jX{53#OB(H3WoT4-CL~x-q%k(ud1^g+9jQ|;-!zTY5dHNjwwx0ZF?#o
z{cIIyh`&GU{qoXmLp=qCKfmuE$lrf;SH{(8b8~OK?dUjB!P8*Y#TZa|>5@zCjLn;O
zm_|kG@8dXftjkaJa2q2l>(=|}r6w5(C~CKCtygwuQdHb}f4-M$+vLnU5*Ed7EKbE+
z+4mGLe--HoO2Q%?oreA($FzVQGi#n{zias?l?|!g9Ios4W$pU=>u2ZZ(h`yL+F>*D
z?u%NMaAaKfJCnR7HA5lWQ)uD!8;N;v*In4MrdDUy_xs}K|NdeW6kK+<{CJ-#v-AEh
zlQ?D<Y3Q*%JIA_caig&M5d*X6Z4CEog7>*ye)#{t(ce$qHmQnAK~_^$BC`ZIZigdx
z?{2R-es53Y8HSG^4ll};xH_jyXV<3voVTJ@`p$NVw)Eavz?gB#g=NJSlftvUzKa>F
zzA}})VUVj4uqa?CC^x_RuU}R;SxnAOXP=xAOT;D?4i16%)mInQCYNo?_+0+m?8Ex{
z&g=ia@1K;aq!hg2$@A@76L=T&Ch;!Fym2U^gj=lR!}X=zHV^p)O!GQB7lpmMVW?nt
z&*XRL>Z3ba-`?u{@ch00vL&}SEL8c!_{i*iazEqY_U`BR_8u)|JaXXbbp6@OY+PJa
z3>a={usK}b@NMIZb@A+WzkPK4=j*-S$i(c*5wh~gl)~9&SM%zZ`*rfkTwcyx{+`L-
zPV<<7jMbGL-}ir)yRc~~M}6|~sJsJNN=ns77%~=v+IQF2b>1!yF}`LecK6cK17~MD
ztPWcg=96bz#bBJ)@$~sT=5zDb{<AZYGQ90E+w9S_t<%Lf)L4GFTka4r;p6YZV&-e>
zM2qA9e_;Ob^Z8YMZb3oGV+<LKL7CMp`QOLeZ#qHA;CI<c9ohf?wm+P=si@+!??pou
z`}jMPboI>s?R|c(Q{d;P(~JJx-PIX=s<6;hyZ-ex2dAcpc~+t)POSK6*U_=UhRs3x
z=`*$~E0w2JO7D1<l+@71tIe-IO{zQZs#f9e&4J2~^JmX$+Pqmp=-74f8~f!e9`~-g
zuk5*K+WJuK2hZmpJ^$>{(F6YWou95Bo1*FP{hd-kpM+wby0Bp2TLXq$2HTj|*t#EI
z_54t8kIDatk}T5?2icQ;P7Qa_FkXJFw{iVGq0^tAG2Y%DzUS@H?nSltZ)`l!EA6n{
z@4!Um14lYl5AVFv*37)2Xz7ni`w|ZxRc9BMt%n&h4ofijDw~C!Sr<6%+wb3hzb{f>
zXIcBXcgEbsd9i|PbQI0RW*9i?^vh^kot`46@%x_b#y=054_sTjXzjh<@0qK=F`S(}
zdz+4;qUzkld)59j%^e+C=T2T?T`((|!KAnPyUPN`hRn+i+j3oJ@1G$N$Zek7CLy*o
z(b+I=!JRF}2@FXIY5e>@`y(gv+p~Oo$J!^yI?I%~tII2{xLkaDD&t4n-|y>P*T?SU
zkz(nQRL){{?-NP=^l{?*3Ky4eKHH=YfEF}-y%v4q%$X^#1-gziWJq~>I;5!ute5-n
z?Y3(2MN6x$bK=5k9Rc6Y7%TCd)U}lK@E2!%y>$8$`?%CQcf7I`yxZ*;sQlrTWcu@K
z^`3|R*$<rzHOkVK?KtY=;$o^C%`nF(m21+ZNuVVyUtU~fetmttd*DrffmNbx4wrxY
zNd9P3w}-=K>B<nLk}t2-nF8+bJ21cgRJ2^~+xx}mU-D1O;mj&MX;LEU>22&AZJ%6G
z$+$YayI@~h?+#X97niH**$g&CPdNBwEE;~l-!DH|&DW`!jrYSPZ+%5u+t_u7wYZoQ
z-v0fyx?;zUDO<|5PhSk|aTk}>WlMW^mHWiWiOX%;`53LsyOL*Rnf2XTk+mS_z#rz+
z@;4lN{_Tp8vybDkb#`&Ns{H%^+uYmRjvi{|F8uh&^~_9T_V~J=s<*c1_n$c7p%cGP
zW=_|RXA%tA{?Wg`f4Q8b*3)%mrLtACNwyl3`+U1a$5*e+%)Z^m$9m|H&;I|fHeGAn
z6ki|9^65{F;qeWs%U>xgZF1eje&Ergq?*59ufMpxT^}^i;^ON1@U;H^BL^CpKi<k-
zpLnE0ut@x1o*~0EzqDm9a=AM;K3f&EUT#C~><T}B@!b2Xj6I4%&&^>p%M&^M|KIkP
z-=d|jSp{sHJb8!cn}>>3Ea9cIXLWRZIVr|)`SRtjdB3;i+!Q+ACwutb-fBT{@pkij
z70lM<?~ZK0U#A@|_(qO7;jK=TN>-m-eT+|ZTF)}yqgztmy;I`Z_hZq^XDj}Ga5miR
zy*}>Pboaba-YIK?BJ&o!NjvNE+sA<??CdmE7nfs`bs4th-<MnNH}}w`rQQ>#PHpA4
z`@tY6C|Gs7rM*4*#)iZq(Sz>{8Lr(qJNtlme8<z3!K=UD<CAURm3BGa{`7R?_Is;p
zEA`^p!qy0!zP$W;UH!74ss(R0DF*!h+Qj-yUL#st&#x!E;{CiGz4foBrJizhNy$#(
zZUC)`*_L~|?O-$e;hjyHJT^8q8=QWxbiW$5eO<-As;irxZgABO>-d)Z{Vw~T*YQ{D
z{|Eas&acy&_WYcv;|4P^J(hQO1Rs97=$^e@Ke)S>)ht)2*>L)`4GSaWrL$)iF)Fpx
z{j(I1(Rs!>&+Kebs-n^+)lIAiPEXfQ{{Qdq(`)bV@0Z{I_uK54_RuMpOdH;KC);e@
zwInS2)00{JiJuN}AIM(c`Lyuy5#5Kgb`&y4Y;w`@pC9*g&yi_D(%gSO^KZzW{z7nX
zws^s}HK~W^huz(kRFJ_Cu`A@xB6X!jr%sA7sQb<7`276*^yv9hr?z&=9K5Qsh4I5Z
z+d}WjJ)aNrFFM>hU*4dq<n6bw^Z$25YF^1Q40iRswXpUh>xAj*S<1h^u8ysI^5lgE
z+X+3}fNfh}TwJ_F`TXYdOw;uuw^+Eig!yk{sCaaQb4%{+ZFhcwCN0$c=1h3Kq3h8*
zz8$-|QnxXi%qx2_z3_3C{n=SwtTjJXFRYagh|tJW|NpuF<NN*9;-F^NpI57|iLT1=
zbz-`(O0?i<7f0h7QFWzNGjbR&T)iqfo#&7Ayt#9E)z$qRbGWobt(!uwKRgU-s!9k3
z`)+>rNU3dd=G~|(HeX+*{`nfQTkOOsp~EYBWHM)c(wI7X_6*r0S4D5^5{=k)=8~$C
z(x$jgtOwNRRWKQ+pL40J+m{y`7bh22{nqr$i;K?d4r}o-Cw$Gw{?EoQHdn&u=yCU!
zzBXRh^p<_KuFLyQWtbfJ^E0XP)RalLVpi=8Tifvcp781QdzAifsdaJL=CzIC$3b@a
z2Y-Hk&bYI~5Hx1EE_Sz)jg5?@rR9$ghxwmct$Ad?Af<0D9kD-7C%pWHcydb%gZ)2^
zLl5-#Gn}_kc8YVY`@v{YDfHo+n5@?cleoIbEu4F5r6mlV?xd+JDb;RbJuqQ{fQ)UG
z$mi$hk2CYzG?cx)^>DJk-9gY){e=qwJNZ^y@H8BY-sE!T&c_qV4!^&Bl6icPz47d9
z?>z4PpS+IVJ~vx^-tm6%g%f=aA9Vb}_3gX(+@iGe+e$h+I@a{B>HTP9V`Gqa$HJ0-
zVFgdav7NQMm-x<**;>EU_S*~&1%G>8HqX2(EB+XMf5-amt*~R^r<BUmi(L*LTvYz`
zK;t8`>VCOJ&Aw&ZGV&#b5A&J3EXmpQ{g_4JBNiiL<HGG{YG>@L{e7x7!!?1y#4l-)
zgn_jV&x`x<{~q(o^Tq5?c=n~YUwnHzJ0D9>uq($!zeKaDEkB=M4DGrRaZ$SBXVHRm
zf5VXeu)}RhIv&{)$0u~05Q64l(CDfCzaPw6Q@Jkv??1WV*Z;u0t4se&1@{^<g!xW#
z@s&}y)jo6ev-Ddg3dX__dm^^DR=-p=bn(nw8$Eluj@Q>8kChmv{Vkq6RrOfzmM=bP
zE-urQqNNX<oUE>FV<R(NKi+MwRcXPWABAsjZe|Y*4D|5yocMY}*I|Z;t#5C;rgQ7-
zC%lRHEE~R5=-_5&cEgDBn;+Oa9A-^P*=MBL8O3{MM&b|Cw-SxP%ck(Ro7#qXac#((
zTk-7wc9)d5DclX2nVA)@*KQXO5MW?uXScAhSWx`@oQH?Ufz$f?b*?9hx?9T|Fee<{
z;=I2{R=euXtmv??r|V~HwM^J|C8SV#pVB0jIrjQlY34Zsxkl&bizn{2nl#Dfa?`q4
z*WKsW#U8!R^UWpYY|3udHDRkCK7Go{09w!lTJN{WmD?omj)bJ7WRYxG;TBWK*z2`d
zKMEf#pYL)$!28eriL;_A8LqTVxDs-)vc*T;`u2{u({wM(o7_6+Sfa$qyY@%m{(U#}
zG(GQl=~=(#$Tt+8xOK8FgWZn@%|HHrzb_~!*Z1N@#+mu{@_KrDKmL3^e{qSYFesJo
zVU4lOy}ke6-^LFGpXKl05J-AcmSU4^eck5Y4hiiKe<}s<yt^xG+AglgkeS(b|M4Rw
zr$<M-+m_Fnta6bh;gpEse&cEx;fY%(>N4#6_v^KWjt&dMp0C%UD?Xi67Zet5-c|ZK
z>2Mn_$X{OU4sYA}IK$U<+}q#qqBEQGSew8%7PGxGBre`I*FIg~5xnxqYx}<;LKm)N
z8P2``^RuY^rp>MiYqHLzUwbDs(R8vd!?!m#gSX#V6KVYC=kxhH%HB%-`SYj5wsGaR
zEsPshc=VKpFYik|o$NbJSNQ()Z*Lp@=IR8qB|Cfg^!z-X_FhKzXn=k*Tj%@Ym+$v~
z^S{u<`fF=(U*DoMeG7?>KC?adA0-8T-k!wz;o0oa>CIbryQK7{ykrTAiQ!RKSC_Fa
z^U2@4f4}|V`JI(jOn(36A6H86a0#3^<0rE~vqAK$<9^ak4WCk1XtYdtdE{7ES%sqF
zuh-IMYbt-+q^B<^On#jGHDb57%QcT_3@_fi>2d3oDqLf49I)~R--QWZUmsn&r;XQ@
zcY^9kL8lWH8#g{Gd%G_7z^$#1e!jVRtN#Aht-GiGEf$nIbt_hBli#MhO!G{$#X!ZS
zikjM?_}Kv-V*mafczT+rA!<^H(U;TS`khkJ-rc>Ta~Zc7Hx^hKeJ(07skPp7D$g+6
zclNPtAD3&M+Zc9Kd`y~SS1Wb!;6YG9X=7vaCC=a9fBNeSU5BL{YBe<vyx-sbZNfDZ
z(XBFyEjr%OyR9oX{hQIeZrviuLz_~QtgQU~PfwlLaYEoGQ$l^Q&kipJ35L^`uKnwk
zWd89pa*M_ihPJHo=q(J379HU+d3=m9``U(fJHbftn@kVpSQbCIWjggBL&T#inh)CL
zk9>M^a+)r;X8XchcX_3c>?(cTaBglRr?5_-k&@Ekl-XQ;XWAJz98sU&u`R;ij`L3W
z{H5N`Ue|US8`STMm}kUlQE*_<QAMRo%FzrZ1qBU@7bmy!8_Awy*NNG$cPx$h$OV0u
zX=bIXcDTmG@bJi;(Uk5yQFWq>`^WA4{a1hQ+Ob2TonQXgs?gORmKiQyKIx)`{Du!l
z#Sg5Fc6fcw;rhC1db|@ezHhIwEcl{P@XN%YXi3JR2M4P4T~ZP^u^y=V`)g{ndBz2W
zEjc%Zq|I^;+}N1>)N0G44`LfuBt~xW(1|X3kiKYBO^u8H!*+SLx<7&y-(w$qy$+fh
z53<_)U;fvJ!~DvYmOI_v$8JjDJap*LgJ;h`qt7xcmIV3+1qm%$wCKU>*WCR4{4Q>8
zN`cmfYZ&$S{ZI<g5*5>l2w1!+QixgM!&&nriM|642|o(Fr?+{;&o(=7X=zgBx15CM
zey69kcbr(m_~F~z+Yvho6rE1_btZroPJ;$4i=Ulwtg5oQwI#E8o^AD`Pft&?ZU6rL
z`|&lAn<q@0*0$KaUrA4ouduN2#=hF>ow@t}evAI|>-BmLKE8EjJJ&Q`VorG3IA7gI
zAbEpe<ZQ#_hUfEy?bjb}f88(b;gXW4<!NM6SNrzo&z~>P{?_&s%Dc0p(W>-S0%*zN
z?d|znzlqDr_I`VNJNe_IqYMnaZq1;L1G7vxjnmE;WXb2=-sU>rt`;;p`TAOFYO11@
zmDKI+`R?=WY7J6PiTKPkI=bSosEEjc<Hy;5{`~pj+qZSse$Kdbzn<B5c2{FRH@9vW
zPxsC3{1s0G1^*ZsH~#vn8>^&rIPX52RVh=SjNo}q&1;6iyb~`)oPNGt_2f0S50Crp
zuW>i<@$sz)UoW?4@#2T!XD?R1zqhyBxt%ZZ*_oMDzhB?mYkld`rByZiRXl(Ed_I5T
z#EFfSpP#+FmTe-{BV#GFe%~*xsBJlsYmFj>b9o=EjXp5fx?%S0)YHj%w{GoEpO^SU
z`Sr7RdbgOjWvl-yoM|Wf<At*K^sbI69@`i!(#}XseyeS6E}pejs<E-L>NPVn^T+4&
z>%+j4&!7z#D^_sy_4WPua@qglVt4+#uRlLK+dO%)a9rKb)WxR)Lqb{>EmFFBot2gK
zs*P}EMRj*vt5mN9*HTAj@98IM{{3Y4@De)h7IsG{GUW2I1FJ$E{{MS4f4bk?BQ=Ly
zT%M^!OCJ!`4oi4^toP}){5v}YSBI^g^m;?po;`aCo}3Vrv8fPvzvnaGqsNaYPMXBT
zU;$e1^7D!CnwXtI>z8dZ;^gG~@bTkCTPJ7dRGqyaWn{dT*#t*fA8_q<`SA84bHxWo
z@9AwPEdKst{QqxzMBTT@2kZCiM9V1!$=zg1aB^Z|Vq!YAc76PQyL+|Y?`FN#R#0H*
z>+9Q5@^aF>U*6O86g4zf9Qtl)VX+``b6Q7F&k^nQdzu`Z*+5gZ3=?L}>N-7Le{tYq
zw}PUgrpc3q&&{=N509&4O-xK=`)*$R%;(AT=db0SpP#?}TIC7PPFcsiI}H2&1nCq%
zNZ(}oeh+iWOQpI#c3vT0i;j*nuG<)9%$(Wz;lqcb*V5*BJ!j6G$$EPlGBt2n+Rkn9
zMFmSsNm=VMlPY_uUbk}Y@+T)IT2y_}=##NrRL#Q9{`hKmyy=Z#35J;1*oSZ5uKm72
z%!{Yt^mJxcRtFcB3!9fO^>z-i_47OM>ub`BMfU#~j`fS%wsdx!aolFs@b&fe;};jZ
zpT4^6@4w&gSFE19dyUki$BzxGzGQ$V$(`HzA~qy2a&dDDii@)|NSJ1cI5|0$nAUJ|
za&~leIbB}n3rY!Vqqi#=8VY*<uQyn?tMv6W?e@)^jhmX9E-Z5GmYTCMRa2K?)zzeX
z@eW)5K0d>h(k*2optvF0{K5YJqMzCA|L<Aq?dsyC5X~TCS7QN6Ulo;=3%#f7F*MxW
zU7q~u$w>*boQSR8&GF5(Pw`@GZEc-lkjSJLvxA|$yd1Rj_v@>x5>_QEGW{-`(okhs
zb=4tD>%-mh12;D>di(gq#A$k>foE;M&6pvZa*QY8lFCKr9l6n<4Dx1f&SQpqd#lBj
z-TRIl>y>`^M5Sn%+v0;O0vB({xoNax$Bq+)5t}zHD{N8oXA{$7NjoPZul7wt({oPx
zOU9DDdm5%{H{OWo7VTbf%|z;=_K)B18$T30xUg_iU#v??)wM4_b2T^JwJ0tuJlMu7
zJz?U+M$_zT3Ywan>F4Gg{PgtnTctmd($(u3eY}KtpPoK9ui*2ti1o5uZ70MmEjkt^
z9y;uL_S=h#N+LpnCtbfy3qCvB{P=@|&7kcgiwYkfE0Xuy_{Nf9)zwAM&IiP9ExS8K
zGs#*h`ss6Zw$8FrQPalv`}1E42~M<~tjoYBV-b*ljd$(O&(A?yn2Kb>Kw6hA3$x2#
zrNa39eD~XqoXFeTl5)HmD&CqJhRO&|lu6-ksQ&im;QoJK*B8C6{{F7lw))$N(ukv*
zo-@n<k1emcS$ux#9VR)m9{cMqD*QK@9-N(R&b#evaaq~6S(;bgbnaz4a3?0=Fx%s8
zp_fD|Quc>vJ-F=O7`C>-dwRn{=f*`!fzmtj=2oN?vn#FAy~&iYI&AHRg9p^V|N8p+
z;{j%Vuw~mBB0^Ydekfj8Be@~f`|0gfAr2WD0>a7jHVK|w>nD3r?!swrlUxoChFxW>
z^Xj5(+FLh178bnPm-Com-^XLp9lgCrL6crT9``ddOqx7-W7*rNoLgHw*B#cHX2x)D
z2cw8M^SN`=bp3rjg*H?ge|WX}z)a($yUzTbibl`Q>E3knw(kAh#M-cU@y}D9D%*d*
zV~(p}{PBSK;_ba#*63XPU3*!LuMs@F#rq)G-?sJaY;(|Jc~J5MjohT9rapW=zus+g
z+Sw;oYm$Ecnx+%KKW}5wl~WH7FDg?u3v1cGK*8|t?Sst+-rRh2SWm^}zb&uyC+7)o
zCP(R}aT>Plz2CWFTZ%Ntt~E_fOlzXI^TpSG73Gt)V%aMD=jx_yjVgctH0-f?@Wj*5
ze%;y==h)KD3Nc%G3q5$o<};hkXFgv=)vNr~b2(M4qqqF*?o2!@e{=a1k&pa=p=ED{
zHg^h4{J7@r=i5S{?!(sf^Kvy`uZI74HalNHMyBV+jR>8{O)l>aYfaj}pQB;hCB6^e
zaxb2HzxR8?A*YS+UM_EJVObEUeE5A~$&+?jP3G$T!V~ADa5h+4T1M<FQUxtG7ZDLj
zI59yHwEE`R+1WQ4UEKctJ8-`~x}IT*%Ej4*$9N3u<QYodaMb)U6p+omxk)gRJGpvm
z{ok!WmUrxZ(7D3O=N{XKmCNTjb&Kg1e0dQFnmHHOk2|9D_QW!k)w@cMe!jYTny!25
zrAsb1qz#=~_Ph1ENc?#!-e$k(Qc{wOba<}&@~)hFJSLe;M~*X3*Pp#K!zG2?M~<QX
z&qwzjS!=QUeLvNHeR;|3Zg#;)I$MIvZLOJ2+|8ZENddS0<~IEO?RtA(`8~#ee}dPn
zf92fgktrkF=x--@I<?+DMC;=WWA{JKrO*3TIP&w0o4($;^O?TB;7zf~><9K%e}8nW
zR~od?Y0=`v8!J90J^8eLVq}CBgPLmR$CF<D;n!9O8Wbp8Skx+UA#y3xu|8J6xkACQ
zJ9kGfTjR1#!ED>7d+&>%cis9dU(a%DJA2+;re|k`9Y6G%=ajoJC{3DwlKH`5e)}H%
zeLt9P-n<D~ti7S`ZxstWyYu3U3CH_ncN9KuTgmVF|NJCI15M8!@369S_qxT8X1ls7
z2`pRA9ABr|R-w3P)zM>2|Nkgg{azQVJ@5QHUCCb_OPQ*^3YosXU$1}c?4C;DALr{`
z1ZrOED%jsIdb<9_ItIbWX_0M>Cr_L>5FTIKdgO@9lc!G?y7$Zdc(?og6T3BU)~uEO
z*~EI_%F0L6UhOJ<X1y*-H|yW2w*8lwm|XH*)o=cuE37%Y%;4+I&5g;&k678;8}9hE
z#Pex;*rebfA%n_I|L(W7@g7~9+jrM<T1xKx`_mL|J6u@0HRB=^Xi%h;TYSU0IVW8b
zbwZhE%!;b~!R#`7$=>R-!E#Ef!7CdWnH%oci=Wj~QaZBs!Sy&{(<b>Eg*?&hlcCPx
z7h@UU>Zr{*)pugk86k$PGP1H4_t)3&Uh#Lc+cd5Qne{y<epy&BIJb2~9XR4*xV|iJ
z-3rc}OD<Oqt&NZ0cXyrUGs!T}g3*P)z2_WlIbrpoZI0~55C)U7KZbq5ZYgzreFu!s
zcPvxv>|Esg!2W*+Lt2O7XCCiK5_@dz<ux<}_}>=Q?aO!_eKVHPQ|Pe6(q%;n<x1X(
z3|o|^aW&lfcxuxop8v<!2X$UgPC65<r=<1p3CoeAorV_E_1WX9P8RUa`Bq+WMWc}W
z=QH2G1<QGBq<r6=KC+w1W!hne4EHUJ2KxSg63wp*^xXP*ij7z6|E#h<n^?Im()A~r
z78DA;Wm>)KZ&ZXvn&ir!#mW!f^8Wbo!v6kFW)=1D*lD4w8;<oJjcAkMo^oQ31jE~o
z`SB-<;^I!8QFyjMc74u=guk;I+jw1nB=_4Zy-v(Id;7%1MX?JOPI&&7_sYs-iyfKn
zY%5-@Yq<99?W2pER6qRr{HWqqeM+ZCT$&`?vAD=&^P>Fx2gi6Htl!`8?Cja<H><;s
z7U(m4xEj7_VWkgG_P>rbzFu7%WuZ5>u6~yLWy{_M#=in9czgc;?3WOzJIwarTkghl
zS3~za|M|R8FE&Ek<I~1t=ktq=v-J}u%~yTSe67z?Opedy_nIFM5`HLevI{+Hye5co
z;li!i+oP}QsIA}2wkAT6tvh}bOU7k49*O;Fy+3Xj{{MTRU7jg?-IYB&E+K|&4%W#h
zZ#w+@;cR37W5LgUUzcO6v*slpFnL?Hde%`EhML+&PT_{b?TyUrE^p_zvrm}F=rdc5
z>B)w~MZOCc_NmXwY*~>e!SJ@nl;uF!+B5YzN~`9r%6j2*HShYxz$-6!<>P+FGEVh6
zlm6%D^F_Unp3i3v40I^mxWo6(Uh9JUwFj!-Gg?|cvTb`NZ+_IG&Bf~gLq@ueB*WJ2
z4U!C<In9QqCDR@}Rn21JmlH|m>XX;MWj^1M`OF;6Jb(K?1_lKS{uuY(DB@kLJALkx
z;~=e~462=s6HbUpMmwi#^4qf1{92izy(6hr!syvO+l2phhi}g=S|%91E^*7#O_M7N
zBqXepS2E0)smaz}S|+wVv!lc3<Y8tBV>g?yH3G6{wHD3IT;k4OC~avH@;`8W+*RA2
zt$Syj?wg!=#z*s5(CVW(8aHnyEmH~Zot4nH>9p^<_q<aR7`7OL()G7`K|v)JA;FVJ
z&z{}!w(PA?|E8E&*XZM$4hH<@;9FOtmps+$iov(n;hzI0O;PC!{3TX)xNT9fU+$sE
z(9Z_57riN({JPrt7bt9(GAZQ$7n-<J!g~FWA0L(8%(ajIbmFAo;j?ormE}wqu1$>D
z;Bdufs+`L0yLWB2c7J~-Ij{Za_4wRsxwPsPd$)-4G?X2?WZJ;f;G$xl{9HbM%ZeJ^
z>vwlAvQ2y$5b<r|?CcoJWxm?`&z)SEvTVwx&C7rMV3;@WK>Ga97-#kl%h~1c^=7v3
zd=qo#=g$LcqmND9s8s(ivzGCKT$X+=C-Z{28%r3TNHn;pY`^rme|1P(y41=H8E0|v
zi;_w@Yaad0zt8vORcNW@p~FXSwA@NqcClmD&g|=1-_3U{V2IdpVMp%WyI-A`xhYrq
zg{S_hc+jnXr1IN4-KtRQNCUwP6NjWlx!2=vNrBR7CqqPx&cE3#pe1<E7RnyK5D>lb
z);arodv_O__AK|C+T!EM#KnF3`jyQ2TTlP~&U|}YXl&cQT2~F@knR<=-#!U7ZZk=K
zmRMFMR=@r7<)e@9mLL6B^+lj@L-_hnkDaB0X7@>%=XW*k|Nd6Ee~XD>`(DGIxu<7o
z9pBlIeNgJT(3x{$yfb8Fj_B`bmSp>7S?0rHpP&Dc`^-=4&J!_D-g$CMtV>*z8Euk1
zqrLL7+JlMi4fE@m>iz^?shGCbB;%^r6`pUeRJZ9$o2<SZ=sc;R__^1id;4k+yx%{4
z{>`ITL${n?<CVM5JnGtypSgKF4O<g>?HycQRc)WFi)H@v=ZXEZUtg1WHu}wNh_9RY
zzrw}kS%SusmbPo_+BU9|vdVq?=;r3F+?%dy?vCR9^KJHunSVaI2O5X(%9%IMVSAox
z<A)21hh<H-Fc#mnT2Pq$_dxoJYwH4)Kki&uyCsLyBwz3UceV}Z&gT~=Gpu3F{>%93
zi^z5*zxiyl%%=XY*qqiG&GGnH=drUcF5jH`q}+C9iJxATd9%2<QP$cki(NndTK(OV
zo?A-S@TsdW$h|#j!}X1eIf_$fzOGJQJOBQ(BW4X{C+^3y9LT<YMwsCy^Nfx+Q_Gf#
z1W(%hH!0Ipx7wj$$7<u69Xouhe-wDWeXy_gSgU=0eqm1TgYGUN*|1ef>)!KjWZMw7
z=Bs_j36G2Wl5U$VNcaEQFD|F|OxV|xQLZ-R-(x|+o6OO3-ab05f7Iq|Xyj%$AII?E
zqWb(bUq9cT6TzI(e&(j|k7K-o{}}ifon1m?i>~OMS{rHncpEq0y1RurAFGqI&s=by
za^~zD#t%OVKi*lu7_fcapX16(N~bUK9g4k}!LK#-MUIeg^1Y(KuZ9e_6pPs$w*6OD
z3gUaKaL3`NK*UvrJ1Mae3~vQMYhh2i-VR*+CgCElbkVxF=tH0Yn8Wzth9P(h!V;N{
z8<YIvqF*0zQk7tMJ7Fi&0+m9(1SO@VN$$M2k3}CSI}yY9;gYIh!ir|*4+oe($$>U*
z__Q-#;G3z<kd^&^mZ@=GgTIoJ(k4EhhB6OnhV^k%zgy(|cXx3~nGG_r%w}Kqbsql}
zxmrkq+t>ouiW!%lXmvgyASifKjm^RO$veIsJ3CW%-eO#JRdsU%ctPAvF*XNl)pGX<
zo6{R_Z+E?rb1P(CGH6w<jReEnDR&qHs(*iPWViUBE+{y0Z6d>#;AdP7d;WU6xTI7|
zFuWB3`5wGC#P6gmgC&~+XgO~Z!<OJ8wgcAX4Z+Kg7##<#5Z+|V(@^Ghj-ley5(&0r
z_vJG#9Qg8ET}er)(vabnrX_R2%Ww5sQ(u1fcX4s~1lE6!{mi#|7Z;apy^I(9rq1KP
zam9k&Ku~ZZXt8bZvt6v970lb(L2`TzlTvp5joZ(clG>RHUTzHb>{8x_^7l;J^JeDl
zzxA!YSDN|Wy=AxcK`XEMnHS9c^nqc{+@qT`^O-mQl?ORGnPE$?)>NCf3^)JvcXXWi
zX2@{M5VBOah4Dh)Oe+R2A&5`dc^b;jTw(lhh*iN}zMzOHYKy^HyUvb|6MrNa-p*Lb
zyx`ln{BE&^?(WQQo-Qsf&(eb#3r<c_<>2OSo;_Q7(c;C04-PbPZTI!^ata9%sj01f
z`0!!li4z_wYHF`?jmzJ~xVX3+IDDA7uCDIIy}j1o-rv{%o;jm8hH=97`p%AyoY`kt
z4)98wkvjIcJ8$;ycf0w!#r2PY=GgXDe^=7c;qkZm$g(bGXVSXMlcuhG&Ybq!UP(#m
z_ku|(!RLe(=f8N7u_gb$T(`JB8$*VPR7+c1(xoMyGYpg40)J=R-lqHO%gg5N_v>yy
zc+JYn`r+fpgXiX2UtAl#UF-YuyLR^W^7q0lv_37L&m^qQ#LULv>ACfOe2U74-|r8U
z-)Ho<4gLLBP*5<kX={Dm>}KC9;IWBzK3S*l@9vhqmXVPG?L}F#bZO|%I?qWH=FI8o
z>ES7Pd1>jP<eGm!pMUuH(Q&p}E>B)?NJvXl6Vu*y)78=8HnSgz6%-m4d|DFmOyL43
z^_*2>O32I8yOL$f#LWEl8ao@ClDhixL*Ji1e}4G#Wnn!%y%(34^NZ<5waD34y~zE1
znBV@u<;%i(d3is6Jnr9^e4LMkg+<~{ypt1CO-)Tn|Ah+|Zq1+5<8zbk!xc@#wR4s)
zpTP#&I+Zism*v2$PoF*=nyBnv@Zo{up3mp3JNo-U+br&x#qKUUI#Jmjv}yXwtE=43
zZ9FSC#6CPT(|F?i`Rl9a*w^3VNe?Vu#?x@?TRp!WhsBMr{=9;M6aN-(Dq-vq6cAu=
zcXyB3RpOcdcd7Su0TGdqhrdAqv?kJ+0kmDoZ=OwOOACw5w;Rd3a&2sEF06?(Hp#xm
z!*Bn`V3v7)-}-&OxQx@!>1?+T4-en5YuBu2OU@ja!Z^XUp|hjoO}p=vr#p7+SP;9r
z%)`&`+S<z*CLVr%ZpZs%d++tTEp`kH3|zZ?qv$P$ir?ERuC$pkY=Y#N&7D#X3?2Rb
z$6s7rEGR14$|q};aIlG0Lr2FYCPs!K;mV3Y4o*%-CnqL`i*fo|T3o)f&0GTm1-Iqh
z?K*PA1-uzFAR?lp{9Yw{?eA}{&1}3AX3y?c^`54nt<Bxc&cE$O<*Z5D%^$qrSaJ2h
z*VhfZtIvKv3f}GUJJFc2;KhZ7JBprif%Y@cnIq%k=9YAOTkftt#hEi_7HC|xSi50^
zfUug+fmUwu2k+kXb#!p7iQ6mX+|I|!09u57-v0lQRiUdvHts5Yy{Pv0HxFN5*VEH<
zb&L9zEem3-t8>U(w}V$kCT8>BJ9{|){M{ar1}@2J&5ZdLm~Lt<Y>C>!@b4G*jlI$<
z5?JPF$yzYDxHCICI+Sh8JPj(E^R|8XscSwvgW1D0y{k_FQZ&a)Fua|k$qZ`X2@2k1
zXLGPl@A?U9{6e<s%{6xAT~H>F!3Nq$^7{Zo#`7#|`43M|KUx^X$ZwOds|d73=cxh1
zt(~{7F=XZcH_PR^vNCy=5lA@Ikl~hPFssA8f1vdN@;nV?>$WjYc>BMjqvH*z$TJS*
zRe%&>U^z3!fW?e`^5Un#y9_pg#QdZg^6#;{ySMgU_4#?MT-=P|;R_;-FHi67=;+XC
zX1s9j=Z_A>7={PGzP{QUe*541Ms@~u^~=*h)s;>=<ArmU;B9$3cWrNk6ry&93|bDp
zw;78#BtXT=5r!2E;H?@VQp^jOGMFD+U43l-@)aCEUh8iJ@6}6*mtYWGpk~@o|BrLU
z)kS|33O48*1)UnkoyZW<u&eZFaVb;6%iH^J#T|j}aRIA_gzSE>Ud9Q<48nqfH}%;Z
zSXcPMJZ#U?z!h+pVa9a!IrjR~BtbhAK|#V4Vh#$#wzg?!l)!rnn;8Qbv!tL^0Lb+X
zW(?1sGk<><y4Uvhf6z`#b2bOo51+Lo&z)XfRSjxdxTM^dU=TfUlJmnivD2Y<*`}$0
z<F5KR!wP|8=h$mLE?S{lQo^F7l%g*ND()DV7dT1W7IcaJU4Fl|VfE@gsUQ!YPGAV(
zNPf=z>}@<Kq(GXlu4POCC%AZ?2Cl>$aGTr3<y${vfMO44!}oWL>V6%meT*J1E-4_d
zADY2X@yjG2gr%Z_;o-w)nxK85Gvz^+2{UYc`#)+Mi_DM7jxH`K+kY6Y7dXZOZp|nK
zv9UR{uJGekfcvg>g&#u-FQ^``O=bw;fNq33wLdO`V~(XVH0-3A7dZX+*_rMsRQz{Z
z>8B+XYwK!1Du7&mlwpOyx^+nv;s-wDCV(1DN<n;V4y-G4?2vhDlsP~Rhlxc73|bzk
zj1!VUn}jsknHMyLh%givH_nmS_~!ugGhJa&buAAO-nzYhwh5z+?b&G1{um>Bkf~Y>
zpT6k}3QjaKV9)}aD9Fgu&=nNOaHWjlp#*3f@Tmg~D-_z87PuXj1ML{|It=DM*jaqw
z?Cgea?hAW%rh?YQyF5F}utEW}^)l<ERqpTozu&XZnR_-KZj)v#^NNcdsSppzu{p3_
zWOL|c+fnGOvl-kf`DDPL)v<eb1%v8a25|D4(#{x==yjiMU$yv&69VzZFb^J@!q*@v
zd0=mKLqGq84GU9GyMo#Xk5gVUO{kp8*ATw0<0-p5ONiF#si1wsXSzYAupc<%v+>OB
z{Vpyprw&CQ;0m^4*u=~M^0py^md{Iu6NaD!J*AT|AaM)hhxzqKObQ_TMW(cYg$ztX
zZQ5HH>guLx^FsslPzLjYZR`fwpuz#{)Gdqw-Qc1E%sa*A0B%TW@-r_u^yAm7`o9O5
z#WdMK=~sYxL6eFq<6P_4>tElGUju5xJxyQ;=>YFEP|)_S|9iAM$<`T^fIzX^5XI{=
zkH;hE=k+bGm-z_Z1{G9)H?Jgm8*b@(adGkFUteBkTwNt<V`Bpvtqol4_VCfs?q?RF
zo4tHl^<q~1DD`AIH(y^;8niL$4VeujYla8c)<%2y`yU6LEAr(_iHfSKqOvk`?eA}<
z&ogJbmO-~g-(EIJ#o3%~t$#_031}_k(Qa{O1`{b>Cue8F%u6a~W*8n`QM)Dgwpi`2
zF9&bu@6Y}4wV9oNk#jqrMfp1!DbuWwr~kOPxE?%y-2CTHO+|IJbiGm9v`I`QZ==4J
z?Ji^Nw^b|81Qoca!|e7yO%Wz`Z|=&1-GBbntO(KiF-=zc>3>mC(S-{ZIJ{5f1}`aQ
zoO<fRYb{X$DJ{?*52fGf!i)x}^Q03ePYwp}RC@UGC8xN!_?MTL*}KJbo%-c$dGe~C
zpOf{OZzp@Woqzp@{f#XxEI)qycp<lN;X+e;P2-{x7Q3G=I@5U@Z><;C5r9T=CqqPV
zTwEOJv?4w^8*nxM@#9AiPfyM5v4w?(Z9I}po|86|yu8GPGQBu`<CkTk(%d<>SXx?M
ztk1s@u%^FvtIy63Pz!sGPAo$*3k%DEix&l_>&0G*u77z+m4%fx^oJcgJ3FY!!vNZ=
zHd)<YNl}rpe`?l?WxVyz&&@r2-u{0~W;6q&`E%`EijIbv*o*7_U%s6^$0lVWu)Q|&
zv%8DS5*@QZ<`<71HI==+rD$mxx!n(So|4Vg)pghUtq<Q{Ss8p|XR-RLYiqMF6-6t%
zyI;JR{G;IGnGYaCY|H|gIT#3T+V$}8U{JXA+7*4*?uy+<qhn%vKohgJwzBqrJ}_U&
z+Pcnm;r{*hF)=YZ#fv~^9T;t%37S5}yGu6%=Pq4_hBa$+YQEnsXE^fq;ia;-x0aUA
z25m1qG4IA1i-v0*k2ye9om^erZ4YTsLqy3)7F?+*wc<a$bK}fHhP4yRSmri0F>y}^
zZ7l6s`u9%QCyxryISY@E@iI7MWUOfQ2GzA!OCKNO{qf^R#4ZW3gN+Na5hpb?c`e;k
zQkW7P5YTYpLI9|7{Eq!h$fcc3r>x@Vt^ONy>F1{yU*}0GcXkvqgO1SK+@Z;t&5(WY
z;6X-SX|pXQhG&l5zJ2@M{|6bGFJl-}=jxxoTBrH4rgGiZ<yU6e>!u!y1J$^!;BAHA
zgGg6RTD@BP*_oNl;o;%l;;v<0R^bkj&rcU`jrX#OpQk;O%eqlOP*6~l2fPWdLj>nx
z4x)OBii~e>Z*QMIT^zJE{@>r<%F4=%FMVGVvr|ZGs@MC6&z_|%6S{ux&d%b~Q*D)$
z7G3%dIxGpa8?v|<bY9Yi($`_eQ@52JI&|pN+|^!74;|?g=FQ9ZzFvBMo^8demCFTW
zWO$}}fu`PG@741Z0yTcwc%=^9y(@cnclq&^!OK_Oc|S?jTR=>V&D`AF#oZlrIE>L;
z$FCt}`;HzxI>WBkDr##MD?dL!3p;!Al@)<IDn2GH{k`Vo`zFhf(%j=clELfl?5+B`
zs%ZbUirm#!;m-T_Yfa^PzyE(->+dbsUT2+2KRegD+@SE0%ayg!;`8RsldvdI(2Ly_
z^0F@b*KR+ahOX_^-}8LtSP1U__e;C%&5g!KkCJRY9ud~i(OL7Q_TIgFC(fO_W_xa~
zb^0=)>v5;2>3%)6ul)TzuI+cX=gYV8%lB<eKK=-F$mRY0_P@Tr?@vD7H*@0=)8Y>g
z9QS^{voV>SA>qS=gQEM6hpo#_OjNwJC9_%8dzwT|?Y}=iBX$%hf_9$%{r&y$;ls?f
z)!&ZHwJz7X^Sq5$8gweAW$`lwTU*)OTU#8@&$BK3`6+d$-{Fj@bKkFx-VQpz0kj(Y
z<;#~IUS3XaZfw84y^VfaxBBz$1ijGMXa>-x*SMY6*G7lGv|Ic2R#@q}rRNQ;t))*-
z*KhY)dgwqSv-aKfrg7oPcG=7P=5~QjK?I$R^X~3$(DL~s$Bu>Vx<BjBy37A3cX;ir
z`MHV3;TGt8gWI4Dub)1CG>l*9lW}g2WzcN1+@5=NCnhKc&9|%la?RD<-CKXpho(+%
zwf!e2t9$#-Hk)c9)qC)I?$=#R6F}#(-n}l>>&C^!HR)dc|Ju8|_Uy4adG%^&)b_mC
z*55BLENnI@eB^TXde+t`E<V0#LPA0*n&rMzZR4H!WGoaIC!CvW9sbbl>fhK6EY8oZ
zs=j2bjNe~(^;W-bOmy<P?EQ6rmw-<#%guSX%PZ*T`B@<2Z{Cc&wWDxx-t5Wh{$31A
zwrnwJ{=MSmdn?X0j4HN2fBs}(sIUL;wS9NxXEiDFyq*ge0=~Sy&VRgL-rW7859l-^
z4n97&$!fj^Nk=$R($d0q<VHnF?J9r2Zu`3Q^Yc8sy(jOUp;r3+T`Z`}cHZu{PKZ`$
z>+PGLO0QZ~f72-{D*Cc+c7H$rqQ#4~_vDqozjt(@bNiQjj~_f}cz1XA?K@l9j=bOK
zwX|vd`uwH0L!Xx)oV8@hk_B~te`Q=;#Coh>zJGQ2`mh~q_r~1zp04+>{{L_JV|}vG
zPq%F=h&^3*O~$H(<LJ?&Ro69@l$bz=9e%L7`lNiWmjT11KDWgOr)UO$IHBDC;2^vF
znu6V8x={%~KRvy%DU~~HeH?GETeII>tA~eLxzluV&$_s~CqF$k^~Sbb>1legU7OR-
zE2*imndjXx*iq}}$H&CX{Ph|uctqm3%u&;sXJ?x$>+AC;AM06JARWDL-O|kUzNPD;
z!NV6@V`E-hm%mH+_2s36U5&+_y?eFqtlPDp``V)L^>IJm*Z=Q+@+9TVY;*qI<?r3z
z-`l$|Y&CCQzW(*HtE)mkeEPKN)3g=3G2zbhO)V`g3knN0zx#WqUSFxU|8>Zrlb2W(
zUK<uZa*?qvTXX80lB{)^%ke(h()jXMS2(}lueS#sR<-Bvx7$VHo5QNUzgrufcXyZR
zqQ#3Z?kG&I`TO;{+u!uu)u1`>FYoS3A3S(aG%xw|^{Fk79wqTe8nH}LNql)}>D0XJ
z)%&>*xA9)q-Hx$6IdVhFr>K23mTo-~fvLxJqIax2R(EZ}o(N_ShKA{JRh*zou<Y%v
z);3=0u-ALfojV6UpYPX~%$Z*5^6~NUpyNnHr`c*~tccOy0$J&FLguJ(XYuoMiO<i?
zt$4Td`KqsW(R<h3$_}3US`0FtGJD^(TOZ2b-LZUgW8>mWx9pu){fgZX<~z&8(ZRu?
z_35_u?Afzsb@lZ0Wc}x3zE&Qq{c8;;7uTV?yUQm|pT2y1Ej0L=7y}-vcpd^BrJBG0
zubBP+KgNd+A6~tee`{2){l6c~yiz6;7PfraRry)%+#Ji`#GBS-Z#telN!eR!UH0a}
zYR%1M+F@%P{{H%Uak>Beti9*M)@N5#STr>?eOVXn=*al({r&idrNxDXj=Rg=ez~{!
zV#b6yb8>{QM@j$ln`_kyI=40N?yjr%+(Y+sUwd^3ytg{5_35^++1wpcf6Ct8TIf65
z>}uWmtufbE*=66_n$4b`p1$|>l!+4?&zw2KwLaLl?)pj*?s6wZZfX0vJx?A#R$jVf
ziO0>GH+LOh8@;{cc8`o@&@98`ws)`1@7Dx_jwda7c1H5$g@w+SHY6TaF*i4V`Qzi`
zX%?+nl~1RJFPSn$<mH>2n=k3_|Dyytdkb_-r(XO%9nYYj#ebhpk5^GwSAW^eZ#Thj
zo{i?&na1u#Wo6U;{dmmpJ=baLimO>G0~fnp`ttJf>Ah*EuYWz(D}CwV;r6A6+xfj2
zmh{{G^02D;v0>fy*VXU$s{j1;%PV?Y&cr@BTdl9JulsZH^G^pI9)0`x<9>TR-KZ@d
z-@pF)`dT$SJUsL1si~Jbh1Hi7K0fBTZ{NNkKfk`4=hv?}b?*DSySsz#@2g$f#w+dR
z-Y0YMx2>L*)}^<L-~0^wx;sI0>fG18(&kGtFE8`V%*?!Wb94IAxz^=gxwp4Xon@Y{
zcXwy8`*!~5o!dhH%6LywdHVdhcj>Du6Q}9LW);Y9D~j#?xu){tQSqg2y;7d`|Nm_M
zayx&&r>u3^6sxi~E4I%U(~a`*^z_`dzV~OW`e6wMQND(Q$Gb$eOK#izda)RE7-?y|
z|4bv-tSc)fK6&&=iIt7b>;JFo`<HzAQu0}RA6pxrtd?oU1&5--!ii2!PD>U#w|g!3
zpMPy{+_xB2&q@3K{mOp1@AtdOF)=Yqrs+m|{r`Rc|CyLqvu^LJ-Ob`~>ck0+@3VB{
zuY(S3`?K@vyneUE6Yo_#=G8PX2q-Eoow}>^b=bS=3p)yvGtbSjta>e`8@1%OT*-?I
zj=#QMk3U=DHg)xzn)CB)qaVKixGr{g$#0G7eW8E#BD_+cSG~Tb`?6Dg-h@|ISF2lE
zTYL9Pn@^ip|L<p!<GHYPxuN#QC#iVOul+Xj$-8%YpwnjWw6Bc;Rh@bF_v!l1FmU|z
z`SWDZ0c^Yy1`emrozvSs|I&NIXXSHwf;}gxoDAL$I!nssT1PIZ>x-vJ2I@uQZm@NB
zcu5+k@%;M!e*N~m%gcNVii;1o%hzShbP^PtIb-rtZU>i?v-|#h@&>hMPEXTyj)|GG
zwA<MwMF=!#w(7v2pPxZ}zBTdt=RNH2c*6y1Ao76PSayHE1poPPnE%DKwX?w*f<Oab
zsegVv?gv#BlO|98_~UVZ^ezh*7q#Qj2V7iIx8&WGN=!_gVVusFcW+PT%SQr&Gi8_+
z1Op`%6%{=^Jsrcs#Hzl&YLzz6i`eDi;-Yqx!NVoR;qkHFjn&`to;-PCz#=s9E~tIJ
z${`~|BPb}S;OD2*FK=!Nv$C>I(-RV$=n0zd30;(UxD8}nUY?$_g5XWwsVbh6mU4qm
zn{s(}7(BR2sFe@0LkZk)2DPIJbP1q}XZ&a8)D);Vob!>Ffq{X+)78&qol`;+0F(7G
AVE_OC

literal 0
HcmV?d00001

diff --git a/Results/mlp.png b/Results/mlp.png
new file mode 100644
index 0000000000000000000000000000000000000000..b68ffa5438c8c26397c7be686d998e7166bc5f5c
GIT binary patch
literal 28202
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
OFnGH9xvX<aXaWFo{eaQ{

literal 0
HcmV?d00001

diff --git a/main.ipynb b/main.ipynb
new file mode 100644
index 0000000..04aa675
--- /dev/null
+++ b/main.ipynb
@@ -0,0 +1,623 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## Prepare the Dataset"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 3,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "import read_cifar as rc\n",
+    "X,y=rc.read_cifar('data') \n",
+    "# Split the Dataset\n",
+    "X_train,y_train,X_test,y_test=rc.split_dataset(X,y,split=0.9) "
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## k-nearest neighbors"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 5,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "image/png": "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QLcivFYLXL2qbF2IiIhcEQOQAnx85A1gNxgREZESGIAUwnFAREREymEAUggDEBERkXIYgBTCAERERKQcBiCFcD0wIiIi5TAAKYQtQERERMphAFII1wMjIiJSDgOQQtgCREREpBwGIIUwABERESmHAUghDEBERETKYQBSCAMQERGRchiAFMIAREREpBwGIIWUDUBCKFsXIiIiV8MApBBdACopAQoLla0LERGRq2EAUkitWoCnp3zMbjAiIiL7YgBSiErFcUBERERKYQBSEAMQERGRMhiAFMQFUYmIiJTBAKQgtgAREREpgwFIQVwQlYiISBkMQApiCxAREZEyGIAUxABERESkDAYgBTEAERERKYMBSEEMQERERMpgAFIQAxAREZEyGIAUxABERESkDAYgBTEAERERKYMBSEG6AHTzJnDjhrJ1ISIiciUMQAry8wPc3eVjtgIRERHZDwOQgrgiPBERkTIYgBTGAERERGR/DEAK43pgRERE9scApDC2ABEREdkfA5DCGICIiIjsjwFIYQxARERE9scApDAGICIiIvtjAFIYAxAREZH9MQApjAGIiIjI/hiAFMYAREREZH8MQApjACIiIrI/BiCFMQARERHZHwOQwurWlfeFhUBRkbJ1ISIichUMQArz9wfc/ncWrlxRti5ERESuggFIYW5uQJ068jHXAyMiIrIPBiAHwHFARERE9sUA5AAYgIiIiOyLAcgBMAARERHZFwOQA2AAIiIisi8GIAfAAERERGRfDEAOgAGIiIjIvhiAHAADEBERkX0xADkABiAiIiL7YgByAAxARERE9sUA5AAYgIiIiOyLAcgB6BZEZQAiIiKyDwYgB6BrASooAEpKlK0LERGRK2AAcgCBgaWPuSI8ERGR7TlEAJo/fz4iIyPh7e2NuLg47N6922TZlJQUxMbGIjAwEL6+voiJicGyZcsMyowZMwYqlcrg1rt3b1sfRpWp1aUhiN1gREREtueudAXWrFmDpKQkLFy4EHFxcZgzZw569eqFzMxM1K9fv1z5oKAgTJs2DdHR0fD09MSPP/6IxMRE1K9fH7169dKX6927N7766iv9z15eXnY5nqoKCgLy8hiAiIiI7EHxFqCPPvoITz/9NBITE3HnnXdi4cKFqFWrFhYvXmy0fLdu3TBw4EC0bNkSTZs2xcSJE9GmTRts27bNoJyXlxcaNGigv9WpU8ceh1NlvBKMiIjIfhQNQMXFxdi7dy969Oih3+bm5oYePXpgx44dlb5eCIHU1FRkZmaia9euBs+lpaWhfv36aNGiBZ5//nlcunTJ6vW3JgYgIiIi+1G0Cyw3NxcajQYhISEG20NCQnD06FGTr8vPz0d4eDiKioqgVqvx2WefoWfPnvrne/fujYSEBERFReHEiRN47bXX0KdPH+zYsQNqtbrc/oqKilBUVKT/uaCgwApHZxkGICIiIvtRfAxQVfj5+WHfvn24du0aUlNTkZSUhCZNmqBbt24AgOHDh+vLtm7dGm3atEHTpk2RlpaGBx54oNz+kpOT8eabb9qr+kYxABEREdmPol1gwcHBUKvVyMnJMdiek5ODBg0amHydm5sbmjVrhpiYGEyZMgWDBw9GcnKyyfJNmjRBcHAwjh8/bvT5V199Ffn5+frbmTNnqnZA1cAAREREZD+KBiBPT0906NABqamp+m1arRapqano3Lmz2fvRarUGXVi3y8rKwqVLlxAaGmr0eS8vL/j7+xvc7I0BiIiIyH4U7wJLSkrC6NGjERsbi06dOmHOnDkoLCxEYmIiAGDUqFEIDw/Xt/AkJycjNjYWTZs2RVFREdavX49ly5ZhwYIFAIBr167hzTffxKBBg9CgQQOcOHECL7/8Mpo1a2ZwmbyjYQAiIiKyH8UD0LBhw3Dx4kXMmDED58+fR0xMDH7++Wf9wOjTp0/Dza20oaqwsBBjx45FVlYWfHx8EB0djeXLl2PYsGEAALVajf3792Pp0qXIy8tDWFgYHnzwQcyaNcuh5wLiemBERET2oxJCCKUr4WgKCgoQEBCA/Px8u3WHbd8O3Hsv0KQJcOKEXd6SiIioRrHk+1vxiRBJYhcYERGR/SjeBUaSLgDl5QEajVwfjAiQ/x7S04Fz54DQUCA+nv8+iIiqiy1ADqLsSh15eYpVgxxMSgoQGQl07w48+qi8j4yU24mIqOoYgByEhwfg5ycfsxuMABlyBg8GsrIMt2dny+0MQUREVccA5EA4Doh0NBpg4kTA2CUKum2TJslyRERkOQYgB8IARDrp6eVbfsoSAjhzRpYjIiLLMQA5EAYg0jl3zrrliIjIEAOQA2EAIh0Tq7ZUuRwRERliAHIgDECkEx8PNGxYcZmICFmOiIgsxwDkQBiASEetBj78sOIyb7zB+YCIiKqKAciBcD0wKquwUN673fYpdf/f9KVr1gBarX3rRERUUzAAORBdC9ClS8rWg5Sn1QKzZ8vH77wDbN4MrFwp7/fuBXx8gF9+AT74QNl6EhE5Ky6F4UDYBUY6P/wAHD0KBAQAzz8P3L6m39y5wNNPA9OmAV27AnffrUw9iYicFVuAHAgDEAFyjp/33pOPjYUfAHjySWDYMODWLWD4cC6fQkRkKQYgB8IARACwbRuwYwfg6SlngzZGpQIWLQKaNAFOnQKeesr4rNFERGQcA5AD0QWgK1c4uNWV6Vp/Ro8GGjQwXS4gAFi9Wg6K/vZbGYiIiMg8DEAORLcivFYLFBQoWxdSxsGDwH//K1t4Xnyx8vIdOwLvvisfT5oE7N9v0+oREdUYDEAOxNsbqFVLPmY3mGt6/315n5AA3HGHea+ZPBl46CGgqEiOB9JdPu8INBogLQ1YtUrec/FWInIUDEAOhuOAXNfp0/JSdwCYOtX817m5AUuWyGUxjhwBJkywSfUslpICREYC3bsDjz4q7yMj5XYiIqUxADkYBiDX9fHH8qqu7t1l15Yl6tUDVqyQXWeLF5cGKaWkpACDB5df0T47W25nCCIipTEAORgGINd0+TLw+efysSWtP2V17w5Mny4fP/cccPy4depmKY1GXr1m7Ko03bZJk9gdRkTKYgByMAxArmn+fDl2JyYGePDBqu9n+nS5QOrVq3I8UFGR1apotvT08i0/ZQkBnDkjyxERKYUByMEwALme69flzM4A8PLLshurqtzdZfdXUJBcMuPVV61TR0ucO2fdckREtsAA5GB0C6JyPTDX8dVXQG4uEBUFDBlS/f01bCgHRQNyXNGPP1Z/n5bw9javXGiobetBRFQRBiAHwxYg13LrVumCplOmlK70Xl2PPFI6i/SYMRV3SVlTSopco6wyERGyq46ISCkMQA6GAcg2HHU+mrVrgX/+AYKDgcRE6+77vfeA9u1la+LIkbY95itXgMceAwYNku/XqJHsyjPVnffUU4Babbv6EBFVhgHIwTAAWZ+jzkdTdtHTCRNKJ8G0Fi8vuVRG7drA1q3Av/5l3f3r/PQTcNdd8jJ8NzfgtdeAv/4CvvkGCA83LOvrK++/+EKGJiIipTAAORgGIOty5PlofvkF+PNPGQrGjbPNezRvDixcKB+/9RawZYv19n31KvDMM3IW6rNn5czV27cDb78tw1dCgmzd2rxZDszevFn+3ps2lVeBjR3LBVyJSDkMQA6GAch6HH0+Gl3rz9NPl553Wxg5UnavabWyBSw3t/r7TEsD2rQpnbto0iTgjz+AuDjDcmo10K0bMGKEvA8IkC1FarVsnVJ6wkYicl0MQA6mbADiX8fV48jz0ezZI1tE3N2BpCTbv9+8eUCLFrKlZsyYqv/bun5dhp3u3WXrTmSkPI6PPza/Cy8uDpgxQz4eO1buh4jI3hiAHIwuAN26BVy7pmxdnJ0jz0eja/159FF5RZSt+foCX38tu6b++19gzhzL97FzJ9CuHfDJJ/LnZ56Rq89362b5vl57DbjnHqCgABg1ynEGpROR62AAcjA+PvJLCmA3WHWZO8+Mveej+euv0rFHL79sv/dt00a21AByuY3ffzfvdUVFMrDce6+se1iYHPi8aBHg51e1uri7A8uWydenp5cGQiIie2EAcjAqFccBWUt8vJwU0BSVSpn5aD74QHZBPfww0KqVfd/7uefk4OSSErlURkFBxeX37ZMLsyYnyzFEjz0GHDwI9O5d/bo0aSK75gBg5kzzAxkRkTUwADkgBiDrUKtLJwM0Rgi5dpY956M5fx5YulQ+ruqip9WhUslL0Bs3Bk6ckIHo1q3ycyTduiUvm+/YEThwQK42/+23stWmTh3r1WfUKHk13q1bcrB2YaH19k1EVBEGIAfEAGQ9f/4p728foKubcXnuXCA/3371+eQToLgY6NxZdikpoU4dGXbUanlfv77hHEnh4UB0tAyHt27JFqODB+W9talUsistPFx2r02ZYv33ICIyhgHIAXE9MOs4e1Zeag0Av/5qOB9NZqYc+3PwIDBwoAwltlZQACxYIB9PnVq9RU+rq3Nn2QUGlJ+QMCdHtg7VqgUsXy4nNKxf33Z1CQoqbRVbtAj4v/+z3XsREelYHIAiIyPx1ltv4fTp07aoD4EtQNYyf75swejSRV56XXY+miZNgPXr5SzJmzcDTzwhx7jY0qJFsrWpZUu5VpeSNJrKJ0UMDJQhyR5B7YEHSlt/nnxSdhUSEdmSxQFo0qRJSElJQZMmTdCzZ0+sXr0aRUVFtqiby2IAqr7r10tnQJ482XiZmBg5rsXdXU7ON22a7epTVFR6BdZLL8klI5RU2RxJgGxBs+ccSW+/DbRtKydqTEzkPFhEZFtVCkD79u3D7t270bJlS4wfPx6hoaF44YUXkJGRYYs6uhwGoOpbtkz+/qKigP79TZd78EE5KBgA3n0X+Owz29Rn+XI531B4uBzsqzRHnCPJy0sGUW9v4OefbXcuiIiAaowBat++PebOnYuzZ89i5syZ+OKLL9CxY0fExMRg8eLFEPzzrcoYgKpHqy2d6G/ChMqv8ho9Gpg1Sz4ePx5Yt8769Xn/ffl48mTA09O6+68KR50jqVUrYPZs+fjFF4HDh+37/kTkOqocgEpKSvD111+jX79+mDJlCmJjY/HFF19g0KBBeO211zDSEf7MdVIMQNWzYQNw9KicZO+JJ8x7zbRpck0urVaOE9q503r1WbdODroODJSzJzsC3RxJpsb3KDVHEgC88ALQqxdw86ZsLWMPOxHZgsUBKCMjw6Dbq1WrVjh48CC2bduGxMRETJ8+HZs2bcJ3331ni/q6BAag6tGNtXnqKcDf37zXqFSyy+Whh4AbN+Qg5WPHql8XIUpnOR47tuozJ1ubWl26pMXtIUj385w59p0jqez7f/UVEBwsJ2KcPt3+dSCims/iANSxY0ccO3YMCxYsQHZ2Nj744ANER0cblImKisJw3TW2ZDEGoKo7eBDYuFEOMp4wwbLXursDa9YAsbFyIG6fPsCFC9Wrz9atwK5dcnyLpfWxtYQEeYl7eLjh9oYN5XZbzPtjrtDQ0rFZH3wgr9QjIrImlbBwsM6pU6fQuHFjW9XHIRQUFCAgIAD5+fnwN7cJwYpOnZKrbHt5ydYIJeeLcTZPPQV8+SUwaJD8Eq+KnBw5T87Jk3Im5M2b5WKiVfHQQ3LdrOeeK50DyNFoNPJqr3PnZPCIj1em5ceYZ54BPv9chrL9+607CzUR1TyWfH9bHID27NkDrVaLuLg4g+27du2CWq1GbGys5TV2MEoHoKtXS7tuCgvLz2JMxl24ADRqJMeMbNtWvZmW//pLrlZ+6ZJcs+u770pnjzbX/v3ysm43N7m/pk2rXh9XVVgoV6A/dgwYNkzOXM0/CIjIFEu+vy3uAhs3bhzOnDlTbnt2djbGjRtn6e7IiNq1S79s2Q1mvoULZfjp2FGGl+q44w7ghx/kJdk//giMG2f5vDS6q5kGD2b4qSpfX3lpvFotuyeXL1e6RkRUU1gcgA4fPoz27duX296uXTsc5jWrVsEV4S1XVFQ6b8zkydZpJejcubTF4d//liuim+uff0qX4VBi0dOapGNH4I035ONx42TXJBFRdVkcgLy8vJCTk1Nu+7lz5+BuaR8BmaRbD4wByDyrVsmxOw0byhYXaxkwAJg3Tz6eNg34z3/Me91HH8mxNT16AEb+XiALvfqq7NK8ehV4/HG5xAkRUXVYHIAefPBBvPrqq8gvs4R2Xl4eXnvtNfTs2dOqlXNluhYgLohaOSFKL31/4QXAw8O6+x83Dnj5Zfn4ySflVWYVyc0tvYKJrT/WoVbL2b39/IDffiudWoCIqKosDkAffPABzpw5g8aNG6N79+7o3r07oqKicP78eXz44Ye2qKNLYheY+TZvlgOOa9Wy3USDyclygsRbt+QVZn/+abrsp5/Kq/fat5eLfJJ1REXJBW4B2SW2Z4+i1SEiJ2dxAAoPD8f+/fsxe/Zs3HnnnejQoQM++eQTHDhwABEREbaoo0tiADKfrvVnzBjbXSbt5iYn5+vWTXbDPPQQcPp0+XKFhaVdZlOn8oola3vsMXk12K1bcpboa9eUrhEROasqDdrx9fXFM44yp38NxQBknr/+kldpAcDEibZ9Ly8veTl8ly7AoUNyosRt2wxD1+LF8pw1aSJbisi6VCo5n9L27fLS+EmTZChyxDmMiMixVXnU8uHDh3H69GkUFxcbbO/Xr1+1K0UMQObSLefw8MPy0nVbCwyUExvefbdcqHPgQGD9emD3buDMGeDtt2W5F1/kF7Gt1KkDLF0K3H+/nPTyyy9Ln2vYUP6bUHIWayJyDhYHoL///hsDBw7EgQMHoFKp9Ku+q/7X1q/RaKxbQxfFAFS5y5eBJUvk48mT7fe+EREyBHXpAmzZItesunGj9Hk3NxmUyHauXDG+PTtbXgVoraU8HHmWbCKqHovHAE2cOBFRUVG4cOECatWqhUOHDmHr1q2IjY1FWlqaDaromhiAKvf558D160CbNkD37vZ97zZtgKQk+bhs+AHkivIjRwIpKfatk6vQaEx3d+omq5wwQZarjpQUuSRN9+7Ao4/K+8hInleimsLiFqAdO3bg119/RXBwMNzc3ODm5oYuXbogOTkZEyZMwB9//GGLerocBqCKlZSUDja21sSHltBoDLtejJk0Cejfny0G1paeDmRlmX5eCNkSFBAgx2JFRBi/NWwoZ/o2JiVFtiTdPvu3tVuYiEg5FgcgjUYDPz8/AEBwcDDOnj2LFi1aoHHjxsjMzLR6BV0VA1DFvvlGfhmFhMjL0+3NnC/hM2dkuW7d7FYtl3DunHnlCguBAwfkzZR69coHo/BwGaqNLX0ihAzbDLdEzs/iAHTXXXfhzz//RFRUFOLi4jB79mx4enri3//+N5o0aWKLOrokBiDTyk58OHasvDrL3sz9Eja3HJkvNNS8cosXy7Jnzhi/3bgBXLwobxkZ5r8/wy1RzWBxAHr99ddRWFgIAHjrrbfw8MMPIz4+HnXr1sWaNWusXkFXpQtA168DN2+abqp3Rdu3y0nwvLyA555Tpg7mfgmbW47MFx8vu6+ys4230qhU8vlRo0y30Agh/7gwFoz27gWOHq28Hgy3RM7N4gDUq1cv/eNmzZrh6NGjuHz5MurUqaO/Eoyqz99fXk2k1corXvhFWkrX+vPYY0D9+srUwdwv4fh4+9etplOr5aXugwfL33PZ37/uv6A5cyrunlKp5Hp7desCMTGGz6WlmTeonp9JIudm0VVgJSUlcHd3x8GDBw22BwUFMfxYmZsb1wMz5uRJORkhIMdhKEX3JQyUH4Bt7pcwVV1CghwHFh5uuL1hw+oPUNaFW1P/palUcqwQwy2Rc7MoAHl4eKBRo0ac68dOOA6ovHnzZKtYz57AXXcpWxdbfglT5RISgH/+kWvBrVwp70+erP7vvaJwC8gWp48+YrglcnYWzwM0bdo0vPbaa7jMb2WbYwAyVFBQusq6PSc+rIitvoTJPGq1HIg8YoS8t1YoMRVudYGooivLiMg5WDwG6NNPP8Xx48cRFhaGxo0bw9fX1+D5DEsup6AKMQAZWrxYLkQaHQ2UGYqmON2XMNUsCQnyUveyM0GfOSMHV8+aBXTuDPTurXQtiaiqLA5AAwYMsEE1yBgGoFIaDTB3rnw8aZIcI0Vka8bC7fbtwMKFcrbvP/4AGjVSpGpEVE0WB6CZM2faoh5kBANQqXXrZNdSUBDw+ONK14Zc2Zw5wO+/y9uQIcDWrcrMRUVE1cO/ox0YA1Ap3aXvzz0H1KqlbF3ItXl5AWvXylXpd+8GpkxRukZEVBUWByA3Nzeo1WqTN7IeBiDp99+BbdsADw9g3Dila0MkF0Vdtkw+nj8fWLVK0eoQURVY3AX2nW4Slv8pKSnBH3/8gaVLl+LNN9+0WsWIAUhH1/ozbBgQFqZsXYh0+vYFpk0D3n4bePppoG1b4M47la4VEZlLJYSxeWwtt3LlSqxZswbr1q2zxu4UVVBQgICAAOTn58Pf31+xevz0E/DQQ0C7dpatVVSTZGfLv7Zv3ZJLFLRvr3SNiEppNMCDDwK//gq0bCm7xGrXVrpWRK7Lku9vq40Buvvuu5Gamlql186fPx+RkZHw9vZGXFwcdu/ebbJsSkoKYmNjERgYCF9fX8TExGCZri3aiOeeew4qlQpz5sypUt2UxBYg4NNPZfjp2pXhhxyPWi27v8LCgCNHgGeeMb40ChE5HqsEoBs3bmDu3LkIv33WMDOsWbMGSUlJmDlzJjIyMtC2bVv06tULFy5cMFo+KCgI06ZNw44dO7B//34kJiYiMTERGzZsKFf2u+++w86dOxHmpP0mrh6ACguBRYvkY0eZ+JDodvXrA2vWlIahBQuUrhERmUVYKDAwUNSpU0d/CwwMFGq1Wvj5+Yl169ZZujvRqVMnMW7cOP3PGo1GhIWFieTkZLP30a5dO/H6668bbMvKyhLh4eHi4MGDonHjxuLjjz82e3/5+fkCgMjPzzf7NbZw6ZIQ8u9JIYqKFK2KIj77TB57kyZC3LqldG2IKvbhh/Lfq4eHELt2KV0bItdkyfe3xYOgP/74Y4OFT93c3FCvXj3ExcWhTp06Fu2ruLgYe/fuxauvvmqwvx49emDHjh2Vvl4IgV9//RWZmZl477339Nu1Wi0ef/xxvPTSS2jVqlWl+ykqKkJRUZH+54KCAouOw1YCAkpXu75yBQgJUbpG9qPVyvlWAGDiRK67RI5v8mTgt9+AlBQ5P1BGhlxtnogck8UBaMyYMVZ789zcXGg0GoTc9s0eEhKCo0ePmnxdfn4+wsPDUVRUBLVajc8++ww9e/bUP//ee+/B3d0dEyZMMKseycnJDnkFm1oNBAbK8HP5smsFoJ9+Av76C/D3BxITla4NUeVUKrlcy/79wPHjcsLOH3/krOVEjsrij+ZXX32FtWvXltu+du1aLF261CqVqoyfnx/27duHPXv24O2330ZSUhLS0tIAAHv37sUnn3yCJUuWGLRUVeTVV19Ffn6+/nbmzBkb1t4yrjoOSHfp+9NPA35+ytaFyFwBAXIRVW9vGeLfeUfpGhGRKRYHoOTkZAQHB5fbXr9+fbxj4ac9ODgYarUaOTk5BttzcnLQoEEDk69zc3NDs2bNEBMTgylTpmDw4MFITk4GAKSnp+PChQto1KgR3N3d4e7ujlOnTmHKlCmIjIw0uj8vLy/4+/sb3ByFKwag/fuB1FT5l/P48UrXhsgybduWDoSeMQPYtEnZ+hCRcRYHoNOnTyMqKqrc9saNG+P06dMW7cvT0xMdOnQwuHxeq9UiNTUVnTt3Nns/Wq1WP4bn8ccfx/79+7Fv3z79LSwsDC+99JLRK8UcnSsGIN3Yn0GDgMaNFa0KUZWMGQM89ZQcvzdiBJCVpXSNiOh2Fo8Bql+/Pvbv31+uNeXPP/9E3SqM+EtKSsLo0aMRGxuLTp06Yc6cOSgsLETi/wZ+jBo1CuHh4foWnuTkZMTGxqJp06YoKirC+vXrsWzZMiz4359cdevWLVcPDw8PNGjQAC1atLC4fkpztQCUkwOsWCEf89J3cmZz58plXPbtA4YOBbZskcu5EJFjsDgAjRgxAhMmTICfnx+6du0KANiyZQsmTpyI4cOHW1yBYcOG4eLFi5gxYwbOnz+PmJgY/Pzzz/qB0adPn4ZbmVGEhYWFGDt2LLKysuDj44Po6GgsX74cw4YNs/i9nYGrBCCNBkhPB+bNA4qLgU6dAAsaAYkcjo+PHA/UoQOwYwfw8sulY9uISHkWL4VRXFyMxx9/HGvXroW7u8xPWq0Wo0aNwsKFC+Hp6WmTitqToyyFAcgxBLNmAWPHykUXa6KUFHmpe9lugqAg4PPPgYQE5epFZA3r1gEDBsjHa9cCgwcrWh2iGs2mS2F4enpizZo1yMzMxIoVK5CSkoITJ05g8eLFNSL8OJqa3gKUkiK/EG4fI3HlityekqJMvYispX9/2foDAE88Iad3ICLlWdwFptO8eXM0b97cmnUhI2pyANJoZMuPsTZIIeS8KpMmyS8QToRIzuztt4GdO4GtW+Xg/l27gFq1lK4VkWuzuAVo0KBBBrMu68yePRtDhgyxSqWoVE0OQOnpFV8dIwRw5owsR+TM3N2B1avlZKYHDwLPP89FU4mUZnEA2rp1Kx566KFy2/v06YOtW7dapVJUSndB26VLytbDFg4fNq/cuXO2rQeRPYSGyhDk5gb85z/AF1/IVtC0NLmIalqa/JmI7MPiAHTt2jWjY308PDwcZg2tmqQmtgDduCG7BKZMMa98aKht60NkL926lc4OPXYsEBYGdO8OPPqovI+M5Lg3InuxOAC1bt0aa9asKbd99erVuPPOO61SKSqlC0D5+cCtW8rWpbqEkH/pRkcDr78O3LwJVDRuXqUCIiKA+Hj71ZHI1l56CYiNlZ/nCxcMn8vO5uB/InuxeBD09OnTkZCQgBMnTuD+++8HAKSmpmLlypX45ptvrF5BV1enTunjvDzAyCokTmHnTjmx4c6d8ueICODdd2UAGjpUbis7JkK3jNucORwATTWLEMDZs6af4+B/IvuwuAXokUcewffff4/jx49j7NixmDJlCrKzs/Hrr7+iWbNmtqijS3N3lyuiA87ZDXb6tGze79xZhh9fXzmv0dGjcvvgwXKyuPBww9c1bCi3cx4gqmnS000HIICD/4nspUqXwfft2xd9+/YFICcdWrVqFV588UXs3bsXGo7is7qgIKCgwLkC0LVrsoXnww9lV5dKJddH+te/5LiHshIS5F+76elywHNoqOz24l+/VBOZO6ifg/+JbKvK8wBt3boVX375Jb799luEhYUhISEB82vqVMUKCwoC/vnHOQKQRgMsXQpMmwacPy+33Xcf8NFHQPv2pl+nVssBokQ1nbmD+jmvLJFtWRSAzp8/jyVLluDLL79EQUEBhg4diqKiInz//fccAG1DznIlWFqaHOezb5/8uWlT4P335TIAujE9RK4uPl528WZnVzwX0MiRwG+/Aa+8AtSvb7/6EbkKs8cAPfLII2jRogX279+POXPm4OzZs5g3b54t60b/4wgBqKL5So4fBwYOlJfx7tsHBAQAH3wAHDoktzP8EJVSq4FPPpGPb/9s6H5u0QIoKpKLp0ZFyRCUm2vfehLVdGYHoJ9++glPPvkk3nzzTfTt2xdqDtCwG6UDUEqKnJ/k9vlKli2Tc/nceSfw/ffyP/axY4Fjx+R2Ly9l6kvk6BISTA/+//Zb4MgR4OefgU6dgOvXgffek0Fo+nS5Th4RVZ/ZAWjbtm24evUqOnTogLi4OHz66afI5Z8kdqFkADK1WGlWFjBqlBzbU1IC9OoF/PmnXLG+Xj3715PI2SQkyLF9mzcDK1fK+5Mn5XaVSn6mdu4EfvgBaNdOXljwr3/JPz7efFPODUZEVWd2ALr77rvx+eef49y5c3j22WexevVqhIWFQavVYuPGjbh69aot6+nSlApAFS1WquPuDvz4o/xrtVUr+9WNqCbQDf4fMULe396wrlIBDz8M7N0r/xhp3VpeEfrGG7JF6J13ZDBSApfxIGdn8TxAvr6+eOKJJ7Bt2zYcOHAAU6ZMwbvvvov69eujX79+tqijy9MFIHuvB1bZYqWAnM3W19c+9SFyVSqVHE+3bx+wZg3QsqXsCps2TQah99+XXWVl2TKgmOoW5wzW5EwsDkBltWjRArNnz0ZWVhZWrVplrTrRbXQLotq7BYjzlRA5Fjc3OXP6gQPA8uVA8+ZycPTLLwNNmsiZ02/csG1AMdUtzmU8yNmohKiog8M1FRQUICAgAPn5+fDXTcOsoG3b5KWzzZrJAcb2kpYm/+OszObNnMOHSAm3bgErVgBvvQX8/bfcVqeO8YHSuivMqjPDukYjg5SplmGVSg7kPnmSE5mSMiz5/mYAMsLRAtDhw3J8TVCQfbvBdP/ZmZqvhP/ZETmGkhI5Aelbb8llNExRqeRM7Fu2yLFDBQVyMLW597m58nFl+EcRKcWS7+8qzwRN9qMbA3TlCqDVymZwe9DNVzJ4cPnnuFgpkePw8ACeegpo1EhePWaKEPIPGlsv27h/PwMQOT4GICegWxFeCPlXWNkV4m1NN1/JiBFAcXHp9oYNZfjhYqVEjsPcFmIPDzm20N9fTlxq7v3Ro8ATT1S+/4kTgZ9+Ap5+GnjkEfl+RI6GXWBGOFoXGADUrg0UFspZl5s2te97a7XyP8DCQmD2bKBjRy5WSuSIbD1ur7JucUBOgFpUVPpzSAiQmChbqOz9fxe5Hku+v+3UmULVpeRkiKdOyfDj4QFMmmR8vhIiUp5unTFTy8+oVEBEhCxXFZUt46FSyUkdjx+Xy3eEhAA5OcC778putx49gK+/NgxIREphAHISSgagAwfkfcuWbMomcmTmrDNW3XF7FS3jobvCrGlTIDlZDsj+9lugd2/5/qmpwLBhsuxLLwGZmabfhxMtkq0xADkJJQPQwYPyvnVr+783EVnGnIBijfcwtYxHWR4ecttPP8nL9F9/XV6FlpsrF0yOjgbuu09eyn/zZunrONEi2QMHQTsJR2gBYgAicg4JCUD//nI293PngNBQ64/b0y3jYa7ISGDWLGDmTBmI/v1vYP16YOtWeRs/Xq4vGBkJJCWVH2Okm2jRWiGOiAHISThCALrrLvu/NxFVjaUBxV7c3eWVYY88IidUXLwY+PJL4PTp0u47Y4SQ3WiTJslwV90wp9HYNiDakjPX3ZGwC8xJKLUeWHFxaT89W4CIyJoaNgRmzJDdY+vXA126VFxeCDmuaPXq6g2ktnUXG9dhM82RxnaxBchJKLUeWGamnG4/IEBePUJEZG1qNdCnD5CXJ5f+qcxjj8lbSIj8f8nULTRUtjiVpVvLzFZdbCkpch6kssuFNGwoW7eq23Vn67rbmi1/N1XBAOQklOoCK9v9ZerSWiIiawgNNa+ch4dc/iMnR95+/914OTc3OehaF4jCw4GvvjI+h5E1uthsGVA0GhkebFV3W3PE8MYA5CQcIQAREdmSbh6jytYf/Ptv2Vp05ozpW3a2DElZWfK2Y0fl76/rYuvQAWjc2LJZsmvVMi+gPPhg1dZhO3fO9CK0Zeuenu54Y78cNbwxADkJpQMQx/8Qka2VXX9QpTL8wiw7j5G7OxAcLG/t2hnfl1YrW4fKhqKNG+VYo8r8+ae8WZMuoPj5WXe/t3v3XeDGDTm9QK1atn0vc6WnO2Z4YwByEkoFIM4BRET2pJvHyNhYEUvWH3Rzk11qoaFAp05yW0yMeQFo+nT5fre3wphqoSk7h5E5VCoZhCxpYfr7b+DFFyvf94YN8ubtLUNQ795yfNUdd9h3GINGI78/tm+X8zyZ49w529bpdlwLzAhHXAssO1t+INVq2axrj3/IBQXygwfIq890IYyIyNZscal3ZWuZ6brYTp607L2Ki+XcRgMGVF72xx9lIHGz8Bpsc+pet66sw4YNskWlrMhI+b69ewP33y/Xl6zovSz93efnAzt3ysCzfTuwaxdw9aplx1jVNerKsuT7mwHICEcMQDdulDZn5ufLvwpsbft24N575SDC7Gzbvx8Rka3pBuMCxrvYqjoY11bhqixz6y4EcOQI8PPPMpht3SpDmo6Hhww1ukDUqlXpPsy5UksIud6bLuxs3w4cOlT+uP38gLvvlrcFC+Qf0rb63egwAFWTIwYgAPDxkU2tJ0/KD5qtLVoEPPcc0KuX/CAREdUExr7kIyIs62IztV9bhKvb38PSuhcWytYVXSD6+2/D5xs2lEGoTh25RMntqUA3Huuxx2TPwPbtcjmT2zVtCtxzT+mtVavSQGOP3w3AAFRtjhqAwsOBs2eBvXuB9u1t/37jxwOffir7nd9/3/bvR0RkL7aaTdlW4aqs6tRd13rz008yEG3ebPkYJgDw8gJiY0vDTufOcl6mitjjd8MAVE2OGoBat5aDyjZuBHr0sP37desGbNkCLF0q1+ghIqLKOdNSFTduyC6yzz8Hvv228vLPPy+/D9q1kyHIUrb+3Vjy/c2rwJyIPa8EE4JzABERVYWjrsNmjI+PHOZw+bJ5ASg+Xo7pqSpH+t1wLTAnYs/1wM6dkx8INzegZUvbvx8RESnH3Fm4zS3nDBiAnIg9W4B08/80by7/QiAioppLNwu3qSlWVCo5Xic+3r71siUGICdizwVROQM0EZHr0M3CDZQPQWVn4XbUsUxVwQDkROzZAsTxP0RErkU3C3d4uOH2hg0df6X5quAgaCeiRABiCxARketISJCLkjrLVWzVwQDkROwVgDQa4PBh+ZgBiIjItTjSlVq2xC4wJ2KvAHTihJwYy8cHaNLEtu9FRESkBAYgJ2KvAKTr/io7jTkREVFNwgDkRMoGIFvO380B0EREVNMxADkRXQAqLgauX7fd++jmAOL4HyIiqqkYgJyIry/g4SEf27IbjFeAERFRTccA5ERUKtuPA7pxQ64UDDAAERFRzcUA5GRsHYAOHwa0WjnrdEiIbd6DiIhIaQxATsbWC6KWHf9jak0YIiIiZ8cA5GRsvR4Yx/8QEZErYAByMrbuAmMAIiIiV8AA5GTsFYA4BxAREdVkDEBOxpYB6NIlufgdwABEREQ1GwOQk7FlANINgI6MBPz8rL9/IiIiR8EA5GRsGYA4/oeIiFwFA5CTsUcAYvcXERHVdAxATsYeXWBsASIiopqOAcjJ2CoACcEAREREroMByMnoAtCNG/JmLadPAwUFcrHVO+6w3n6JiIgcEQOQk/H3B9Rq+fjKFevtVzf+p0ULwNPTevslIiJyRAxATkalAurUkY+tuR4YrwAjIiJXwgDkhGyxHhjH/xARkSthAHJCthgIzRYgIiJyJQxATsjaAaikBDh6VD7mHEBEROQKGICckLUDUGamDEF+fkDjxtbZJxERkSNjAHJC1g5AuvE/d90lB1kTERHVdA4RgObPn4/IyEh4e3sjLi4Ou3fvNlk2JSUFsbGxCAwMhK+vL2JiYrBs2TKDMm+88Qaio6Ph6+uLOnXqoEePHti1a5etD8NurB2AOP6HiIhcjeIBaM2aNUhKSsLMmTORkZGBtm3bolevXrhw4YLR8kFBQZg2bRp27NiB/fv3IzExEYmJidiwYYO+zB133IFPP/0UBw4cwLZt2xAZGYkHH3wQFy9etNdh2ZStAhDH/xARkatQCSGEkhWIi4tDx44d8emnnwIAtFotIiIiMH78eLzyyitm7aN9+/bo27cvZs2aZfT5goICBAQEYNOmTXjggQcq3Z+ufH5+Pvz9/c0/GDtZuRIYORK4/34gNbX6+4uKAv75B9i8GejWrfr7IyIiUoIl39+KtgAVFxdj79696NGjh36bm5sbevTogR07dlT6eiEEUlNTkZmZia5du5p8j3//+98ICAhA27ZtjZYpKipCQUGBwc2RWbMF6OpVGX4AdoEREZHrUDQA5ebmQqPRICQkxGB7SEgIzp8/b/J1+fn5qF27Njw9PdG3b1/MmzcPPXv2NCjz448/onbt2vD29sbHH3+MjRs3Ijg42Oj+kpOTERAQoL9FRERU/+BsyJoB6NAheR8aWjrBIhERUU2n+BigqvDz88O+ffuwZ88evP3220hKSkJaWppBme7du2Pfvn3Yvn07evfujaFDh5ocV/Tqq68iPz9ffztz5owdjqLqrBmAOACaiIhckbuSbx4cHAy1Wo2cnByD7Tk5OWjQoIHJ17m5uaFZs2YAgJiYGBw5cgTJycnoVmYAi6+vL5o1a4ZmzZrh7rvvRvPmzfHll1/i1VdfLbc/Ly8veHl5Weeg7EAXgK5dA4qLq7d4KQdAExGRK1K0BcjT0xMdOnRAapmRvFqtFqmpqejcubPZ+9FqtSgqKqp2GWcREFA6X091W4G4BhgREbkiRVuAACApKQmjR49GbGwsOnXqhDlz5qCwsBCJiYkAgFGjRiE8PBzJyckA5Hid2NhYNG3aFEVFRVi/fj2WLVuGBQsWAAAKCwvx9ttvo1+/fggNDUVubi7mz5+P7OxsDBkyRLHjtCa1Wq4If/myvFXQWFYhIdgFRkRErknxADRs2DBcvHgRM2bMwPnz5xETE4Off/5ZPzD69OnTcHMrbagqLCzE2LFjkZWVBR8fH0RHR2P58uUYNmwYAECtVuPo0aNYunQpcnNzUbduXXTs2BHp6elo1aqVIsdoC0FBpQGoqnJygNxc2Zp0553WqxsREZGjU3weIEfk6PMAAUBcHLB7N7BuHdCvX9X2sXEj8OCDQPPmwF9/Wbd+RERE9uY08wBR1VnjSjCO/yEiIlfFAOSkrBGAOP6HiIhcFQOQk2IAIiIiqjoGICdV3QCk0ZTOAs05gIiIyNUwADmp6gagkyeBGzcAb2/gf3NKEhERuQwGICdV3QCk6/668045rxAREZErYQByUtYKQBz/Q0RErogByEnpAtClS1V7PdcAIyIiV8YA5KSq2wLEOYCIiMiVMQA5qbp15X1BAVBSYtlrb94Ejh2TjxmAiIjIFTEAOanAwNLHeXmWvfbIEXkZfFAQEBpqzVoRERE5BwYgJ+XuDgQEyMeWdoOVHf+jUlm3XkRERM6AAciJVXUcEMf/EBGRq2MAcmJVDUC8BJ6IiFwdA5ATYwAiIiKqGgYgJ1aVAHTlCpCdLR+3amX9OhERETkDBiAnVpUApBv/06hR6SBqIiIiV8MA5MSqEoDY/UVERMQA5NQYgIiIiKqGAciJVWU9MK4BRkRExADk1CxtARKCcwAREREBDEBOTbcemLkBKCsLyM+Xs0hHR9uuXkRERI6OAciJWdoCpOv+atEC8PS0TZ2IiIicAQOQE9MFoLw8ubhpZTgAmoiISGIAcmJ16sh7IWTXVmV04384AJqIiFwdA5AT8/QEateWj83pBmMLEBERkcQA5OTMHQdUUgIcOSIfMwAREZGrYwBycuYGoGPHgOJi2WLUuLHt60VEROTIGICcnLkBSDf+p1UrwI1nnYiIXBy/Cp2cuQGI43+IiIhKMQA5OQYgIiIiyzEAOTlz1wNjACIiIirFAOTkzGkBunYN+Ptv+ZhzABERETEAOT1zAtDhw/I+JASoV8/2dSIiInJ0DEBOzpwFUdn9RUREZIgByMmZ0wLEAERERGSIAcjJWRKAOP6HiIhIYgBycmUDkFZrvIxuEkS2ABEREUkMQE5OtyK8VgtcvVr++QsX5E2lkrNAExEREQOQ0/PxkTfAeDeYrvuraVOgVi371YuIiMiRMQDVABWNA+L4HyIiovIYgGqAigIQx/8QERGVxwBUA5jTAsQAREREVIoBqAYwtR6YVgscOiQfMwARERGVYgCqAUy1AJ08CRQWAl5eQLNm9q8XERGRo2IAqgFMBSDd+J+WLQF3d/vWiYiIyJExANUAptYD4/gfIiIi4xiAagBTLUAMQERERMYxANUAlQUgzgFERERkiAGoBjAWgIqKgL/+ko/ZAkRERGSIAagGMBaAjh4FNBogMBAID1ekWkRERA6LAagGKBuAhJCPy47/UamUqRcREZGjYgCqAXQBqKREzvsDcAA0ERFRRRiAaoBatQBPT/lY1w2mmwOIA6CJiIjKYwCqAVSq8uOA2AJERERkGgNQDVF2PbC8PODMGfkzW4CIiIjKYwCqIcq2AOm6vyIi5FVgREREZIgrRNUQZQOQblV4tv4QEREZxwBUQ5RdDywrSz7m+B8iIiLj2AVWQ5RtAeIAaCIioooxANUQZQdBMwARERFVjAGohtAFoIMH5VVgajUQHa1olYiIiBwWA1ANoQtAGRny/o47AC8v5epDRETkyBiAaghdANJo5D27v4iIiExjAKohdAFIhwGIiIjINAagGuL2AMQ5gIiIiExjAKohAgIMf77zTmXqQURE5AwYgGqAlBSgTRvDbQ88ILcTERFReQxATi4lBRg8uHT2Z53sbLmdIYiIiKg8hwhA8+fPR2RkJLy9vREXF4fdu3ebLJuSkoLY2FgEBgbC19cXMTExWLZsmf75kpISTJ06Fa1bt4avry/CwsIwatQonD171h6HYlcaDTBxIiBE+ed02yZNKr0yjIiIiCTFA9CaNWuQlJSEmTNnIiMjA23btkWvXr1w4cIFo+WDgoIwbdo07NixA/v370diYiISExOxYcMGAMD169eRkZGB6dOnIyMjAykpKcjMzES/fv3seVh2kZ5evuWnLCGAM2dkOSIiIiqlEsJY+4H9xMXFoWPHjvj0008BAFqtFhERERg/fjxeeeUVs/bRvn179O3bF7NmzTL6/J49e9CpUyecOnUKjRo1qnR/BQUFCAgIQH5+Pvz9/c0/GDtbtQp49NHKy61cCYwYYfv6EBERKcmS729FW4CKi4uxd+9e9OjRQ7/Nzc0NPXr0wI4dOyp9vRACqampyMzMRNeuXU2Wy8/Ph0qlQmBgoDWq7TBCQ61bjoiIyFW4K/nmubm50Gg0CAkJMdgeEhKCo0ePmnxdfn4+wsPDUVRUBLVajc8++ww9e/Y0WvbmzZuYOnUqRowYYTINFhUVoaioSP9zQUFBFY7G/uLjgYYN5YBnY+14KpV8Pj7e/nUjIiJyZIqPAaoKPz8/7Nu3D3v27MHbb7+NpKQkpKWllStXUlKCoUOHQgiBBQsWmNxfcnIyAgIC9LeIiAgb1t561Grgk0/kY5XK8Dndz3PmyHJERERUStEAFBwcDLVajZycHIPtOTk5aNCggcnXubm5oVmzZoiJicGUKVMwePBgJCcnG5TRhZ9Tp05h48aNFfYFvvrqq8jPz9ffzpw5U70Ds6OEBOCbb4DwcMPtDRvK7QkJytSLiIjIkSkagDw9PdGhQwekpqbqt2m1WqSmpqJz585m70er1Rp0YenCz7Fjx7Bp0ybUrVu3wtd7eXnB39/f4OZMEhKAf/4BNm+WA543bwZOnmT4ISIiMkXRMUAAkJSUhNGjRyM2NhadOnXCnDlzUFhYiMTERADAqFGjEB4erm/hSU5ORmxsLJo2bYqioiKsX78ey5Yt03dxlZSUYPDgwcjIyMCPP/4IjUaD8+fPA5CX0Ht6eipzoDamVgPduildCyIiIuegeAAaNmwYLl68iBkzZuD8+fOIiYnBzz//rB8Yffr0abi5lTZUFRYWYuzYscjKyoKPjw+io6OxfPlyDBs2DACQnZ2N//u//wMAxMTEGLzX5s2b0Y0pgYiIyOUpPg+QI3KWeYCIiIiolNPMA0RERESkBAYgIiIicjkMQERERORyGICIiIjI5TAAERERkcthACIiIiKXwwBERERELkfxiRAdkW5qJGdZFZ6IiIhKv7fNmeKQAciIq1evAoDTrApPREREpa5evYqAgIAKy3AmaCO0Wi3Onj0LPz8/qFQqpatjMwUFBYiIiMCZM2dcYsZrVzpeHmvN5ErHCrjW8fJYrUMIgatXryIsLMxgGS1j2AJkhJubGxo2bKh0NezG39+/xn/gynKl4+Wx1kyudKyAax0vj7X6Kmv50eEgaCIiInI5DEBERETkchiAXJiXlxdmzpwJLy8vpatiF650vDzWmsmVjhVwrePlsdofB0ETERGRy2ELEBEREbkcBiAiIiJyOQxARERE5HIYgIiIiMjlMADVUMnJyejYsSP8/PxQv359DBgwAJmZmRW+ZsmSJVCpVAY3b29vO9W4et54441ydY+Ojq7wNWvXrkV0dDS8vb3RunVrrF+/3k61rZ7IyMhyx6pSqTBu3Dij5Z3pvG7duhWPPPIIwsLCoFKp8P333xs8L4TAjBkzEBoaCh8fH/To0QPHjh2rdL/z589HZGQkvL29ERcXh927d9voCCxT0fGWlJRg6tSpaN26NXx9fREWFoZRo0bh7NmzFe6zKp8Fe6js3I4ZM6ZcvXv37l3pfh3x3FZ2rMY+vyqVCu+//77JfTrqeTXnu+bmzZsYN24c6tati9q1a2PQoEHIycmpcL9V/axbggGohtqyZQvGjRuHnTt3YuPGjSgpKcGDDz6IwsLCCl/n7++Pc+fO6W+nTp2yU42rr1WrVgZ137Ztm8my27dvx4gRI/Dkk0/ijz/+wIABAzBgwAAcPHjQjjWumj179hgc58aNGwEAQ4YMMfkaZzmvhYWFaNu2LebPn2/0+dmzZ2Pu3LlYuHAhdu3aBV9fX/Tq1Qs3b940uc81a9YgKSkJM2fOREZGBtq2bYtevXrhwoULtjoMs1V0vNevX0dGRgamT5+OjIwMpKSkIDMzE/369at0v5Z8FuylsnMLAL179zao96pVqyrcp6Oe28qOtewxnjt3DosXL4ZKpcKgQYMq3K8jnldzvmsmT56MH374AWvXrsWWLVtw9uxZJCQkVLjfqnzWLSbIJVy4cEEAEFu2bDFZ5quvvhIBAQH2q5QVzZw5U7Rt29bs8kOHDhV9+/Y12BYXFyeeffZZK9fM9iZOnCiaNm0qtFqt0eed9bwCEN99953+Z61WKxo0aCDef/99/ba8vDzh5eUlVq1aZXI/nTp1EuPGjdP/rNFoRFhYmEhOTrZJvavq9uM1Zvfu3QKAOHXqlMkyln4WlGDsWEePHi369+9v0X6c4dyac1779+8v7r///grLOMN5FaL8d01eXp7w8PAQa9eu1Zc5cuSIACB27NhhdB9V/axbii1ALiI/Px8AEBQUVGG5a9euoXHjxoiIiED//v1x6NAhe1TPKo4dO4awsDA0adIEI0eOxOnTp02W3bFjB3r06GGwrVevXtixY4etq2lVxcXFWL58OZ544okKF+515vOqc/LkSZw/f97gvAUEBCAuLs7keSsuLsbevXsNXuPm5oYePXo43bkG5OdYpVIhMDCwwnKWfBYcSVpaGurXr48WLVrg+eefx6VLl0yWrSnnNicnB//973/x5JNPVlrWGc7r7d81e/fuRUlJicF5io6ORqNGjUyep6p81quCAcgFaLVaTJo0Cffeey/uuusuk+VatGiBxYsXY926dVi+fDm0Wi3uueceZGVl2bG2VRMXF4clS5bg559/xoIFC3Dy5EnEx8fj6tWrRsufP38eISEhBttCQkJw/vx5e1TXar7//nvk5eVhzJgxJss483ktS3duLDlvubm50Gg0NeJc37x5E1OnTsWIESMqXEDS0s+Co+jduzf+85//IDU1Fe+99x62bNmCPn36QKPRGC1fU87t0qVL4efnV2mXkDOcV2PfNefPn4enp2e50F7RearKZ70quBq8Cxg3bhwOHjxYaX9x586d0blzZ/3P99xzD1q2bIlFixZh1qxZtq5mtfTp00f/uE2bNoiLi0Pjxo3x9ddfm/WXlbP68ssv0adPH4SFhZks48znlaSSkhIMHToUQggsWLCgwrLO+lkYPny4/nHr1q3Rpk0bNG3aFGlpaXjggQcUrJltLV68GCNHjqz0wgRnOK/mftc4CrYA1XAvvPACfvzxR2zevBkNGza06LUeHh5o164djh8/bqPa2U5gYCDuuOMOk3Vv0KBBuasQcnJy0KBBA3tUzypOnTqFTZs24amnnrLodc56XnXnxpLzFhwcDLVa7dTnWhd+Tp06hY0bN1bY+mNMZZ8FR9WkSRMEBwebrHdNOLfp6enIzMy0+DMMON55NfVd06BBAxQXFyMvL8+gfEXnqSqf9apgAKqhhBB44YUX8N133+HXX39FVFSUxfvQaDQ4cOAAQkNDbVBD27p27RpOnDhhsu6dO3dGamqqwbaNGzcatJQ4uq+++gr169dH3759LXqds57XqKgoNGjQwOC8FRQUYNeuXSbPm6enJzp06GDwGq1Wi9TUVKc417rwc+zYMWzatAl169a1eB+VfRYcVVZWFi5dumSy3s5+bgHZgtuhQwe0bdvW4tc6ynmt7LumQ4cO8PDwMDhPmZmZOH36tMnzVJXPelUrTzXQ888/LwICAkRaWpo4d+6c/nb9+nV9mccff1y88sor+p/ffPNNsWHDBnHixAmxd+9eMXz4cOHt7S0OHTqkxCFYZMqUKSItLU2cPHlS/Pbbb6JHjx4iODhYXLhwQQhR/lh/++034e7uLj744ANx5MgRMXPmTOHh4SEOHDig1CFYRKPRiEaNGompU6eWe86Zz+vVq1fFH3/8If744w8BQHz00Ufijz/+0F/19O6774rAwECxbt06sX//ftG/f38RFRUlbty4od/H/fffL+bNm6f/efXq1cLLy0ssWbJEHD58WDzzzDMiMDBQnD9/3u7Hd7uKjre4uFj069dPNGzYUOzbt8/gc1xUVKTfx+3HW9lnQSkVHevVq1fFiy++KHbs2CFOnjwpNm3aJNq3by+aN28ubt68qd+Hs5zbyv4dCyFEfn6+qFWrlliwYIHRfTjLeTXnu+a5554TjRo1Er/++qv4/fffRefOnUXnzp0N9tOiRQuRkpKi/9mcz3p1MQDVUACM3r766it9mfvuu0+MHj1a//OkSZNEo0aNhKenpwgJCREPPfSQyMjIsH/lq2DYsGEiNDRUeHp6ivDwcDFs2DBx/Phx/fO3H6sQQnz99dfijjvuEJ6enqJVq1biv//9r51rXXUbNmwQAERmZma555z5vG7evNnov1vd8Wi1WjF9+nQREhIivLy8xAMPPFDud9C4cWMxc+ZMg23z5s3T/w46deokdu7caacjqlhFx3vy5EmTn+PNmzfr93H78Vb2WVBKRcd6/fp18eCDD4p69eoJDw8P0bhxY/H000+XCzLOcm4r+3cshBCLFi0SPj4+Ii8vz+g+nOW8mvNdc+PGDTF27FhRp04dUatWLTFw4EBx7ty5cvsp+xpzPuvVpfrfGxMRERG5DI4BIiIiIpfDAEREREQuhwGIiIiIXA4DEBEREbkcBiAiIiJyOQxARERE5HIYgIiIiMjlMAARERGRy2EAIiKXMGbMGAwYMMBg2zfffANvb298+OGHylSKiBTjrnQFiIiU8MUXX2DcuHFYuHAhEhMTla4OEdkZW4CIyOXMnj0b48ePx+rVqxl+iFwUW4CIyKVMnToVn332GX788Uc88MADSleHiBTCAERELuOnn37CunXrkJqaivvvv1/p6hCRgtgFRkQuo02bNoiMjMTMmTNx7do1patDRApiACIilxEeHo60tDRkZ2ejd+/euHr1qtJVIiKFMAARkUtp3LgxtmzZgvPnzzMEEbkwBiAicjkRERFIS0vDhQsX0KtXLxQUFChdJSKyMwYgInJJDRs2RFpaGnJzcxmCiFyQSgghlK4EERERkT2xBYiIiIhcDgMQERERuRwGICIiInI5DEBERETkchiAiIiIyOUwABEREZHLYQAiIiIil8MARERERC6HAYiIiIhcDgMQERERuRwGICIiInI5DEBERETkcv4fnWkth3i6zJEAAAAASUVORK5CYII=",
+      "text/plain": [
+       "<Figure size 640x480 with 1 Axes>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "\n",
+    "import read_cifar as rc\n",
+    "import knn\n",
+    "X,y=rc.read_cifar('data') \n",
+    "# Split the Dataset\n",
+    "X_train,y_train,X_test,y_test=rc.split_dataset(X,y,split=0.9) \n",
+    "# Plot the accuracy of the model KNN\n",
+    "knn.plot_KNN(X_train,y_train,X_test,y_test) "
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## Artificial Neural Network"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 3,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "c:\\Users\\HP\\Desktop\\Deep_learning_BE\\image-classification\\mlp.py:29: RuntimeWarning: overflow encountered in exp\n",
+      "  return 1 / (1 + np.exp(-x))\n"
+     ]
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Epoch 1/100\n",
+      "Train Accuracy: 0.093370    Test Accuracy: 0.069000\n",
+      "Epoch 2/100\n",
+      "Train Accuracy: 0.073167    Test Accuracy: 0.073833\n",
+      "Epoch 3/100\n",
+      "Train Accuracy: 0.074981    Test Accuracy: 0.078000\n",
+      "Epoch 4/100\n",
+      "Train Accuracy: 0.076926    Test Accuracy: 0.076667\n",
+      "Epoch 5/100\n",
+      "Train Accuracy: 0.078741    Test Accuracy: 0.076000\n",
+      "Epoch 6/100\n",
+      "Train Accuracy: 0.079537    Test Accuracy: 0.076000\n",
+      "Epoch 7/100\n",
+      "Train Accuracy: 0.078704    Test Accuracy: 0.076500\n",
+      "Epoch 8/100\n",
+      "Train Accuracy: 0.079852    Test Accuracy: 0.077000\n",
+      "Epoch 9/100\n",
+      "Train Accuracy: 0.079944    Test Accuracy: 0.078000\n",
+      "Epoch 10/100\n",
+      "Train Accuracy: 0.079722    Test Accuracy: 0.078667\n",
+      "Epoch 11/100\n",
+      "Train Accuracy: 0.080241    Test Accuracy: 0.077667\n",
+      "Epoch 12/100\n",
+      "Train Accuracy: 0.080463    Test Accuracy: 0.077500\n",
+      "Epoch 13/100\n",
+      "Train Accuracy: 0.080500    Test Accuracy: 0.076167\n",
+      "Epoch 14/100\n",
+      "Train Accuracy: 0.080870    Test Accuracy: 0.076333\n",
+      "Epoch 15/100\n",
+      "Train Accuracy: 0.081204    Test Accuracy: 0.075333\n",
+      "Epoch 16/100\n",
+      "Train Accuracy: 0.081352    Test Accuracy: 0.076167\n",
+      "Epoch 17/100\n",
+      "Train Accuracy: 0.081389    Test Accuracy: 0.075667\n",
+      "Epoch 18/100\n",
+      "Train Accuracy: 0.082185    Test Accuracy: 0.075333\n",
+      "Epoch 19/100\n",
+      "Train Accuracy: 0.081981    Test Accuracy: 0.076167\n",
+      "Epoch 20/100\n",
+      "Train Accuracy: 0.081741    Test Accuracy: 0.075667\n",
+      "Epoch 21/100\n",
+      "Train Accuracy: 0.081741    Test Accuracy: 0.076833\n",
+      "Epoch 22/100\n",
+      "Train Accuracy: 0.082111    Test Accuracy: 0.075667\n",
+      "Epoch 23/100\n",
+      "Train Accuracy: 0.082259    Test Accuracy: 0.075333\n",
+      "Epoch 24/100\n",
+      "Train Accuracy: 0.082315    Test Accuracy: 0.074667\n",
+      "Epoch 25/100\n",
+      "Train Accuracy: 0.082370    Test Accuracy: 0.076833\n",
+      "Epoch 26/100\n",
+      "Train Accuracy: 0.082852    Test Accuracy: 0.074833\n",
+      "Epoch 27/100\n",
+      "Train Accuracy: 0.082926    Test Accuracy: 0.075833\n",
+      "Epoch 28/100\n",
+      "Train Accuracy: 0.083185    Test Accuracy: 0.075833\n",
+      "Epoch 29/100\n",
+      "Train Accuracy: 0.083370    Test Accuracy: 0.075833\n",
+      "Epoch 30/100\n",
+      "Train Accuracy: 0.083667    Test Accuracy: 0.076500\n",
+      "Epoch 31/100\n",
+      "Train Accuracy: 0.083741    Test Accuracy: 0.076833\n",
+      "Epoch 32/100\n",
+      "Train Accuracy: 0.083778    Test Accuracy: 0.078500\n",
+      "Epoch 33/100\n",
+      "Train Accuracy: 0.084185    Test Accuracy: 0.079167\n",
+      "Epoch 34/100\n",
+      "Train Accuracy: 0.084148    Test Accuracy: 0.079000\n",
+      "Epoch 35/100\n",
+      "Train Accuracy: 0.084407    Test Accuracy: 0.079500\n",
+      "Epoch 36/100\n",
+      "Train Accuracy: 0.085037    Test Accuracy: 0.079500\n",
+      "Epoch 37/100\n",
+      "Train Accuracy: 0.085037    Test Accuracy: 0.080000\n",
+      "Epoch 38/100\n",
+      "Train Accuracy: 0.084778    Test Accuracy: 0.079667\n",
+      "Epoch 39/100\n",
+      "Train Accuracy: 0.084593    Test Accuracy: 0.079833\n",
+      "Epoch 40/100\n",
+      "Train Accuracy: 0.084519    Test Accuracy: 0.080167\n",
+      "Epoch 41/100\n",
+      "Train Accuracy: 0.084852    Test Accuracy: 0.079500\n",
+      "Epoch 42/100\n",
+      "Train Accuracy: 0.084815    Test Accuracy: 0.079167\n",
+      "Epoch 43/100\n",
+      "Train Accuracy: 0.084574    Test Accuracy: 0.079000\n",
+      "Epoch 44/100\n",
+      "Train Accuracy: 0.084685    Test Accuracy: 0.078500\n",
+      "Epoch 45/100\n",
+      "Train Accuracy: 0.084481    Test Accuracy: 0.079000\n",
+      "Epoch 46/100\n",
+      "Train Accuracy: 0.084833    Test Accuracy: 0.079333\n",
+      "Epoch 47/100\n",
+      "Train Accuracy: 0.085130    Test Accuracy: 0.079500\n",
+      "Epoch 48/100\n",
+      "Train Accuracy: 0.085185    Test Accuracy: 0.080667\n",
+      "Epoch 49/100\n",
+      "Train Accuracy: 0.085389    Test Accuracy: 0.080833\n",
+      "Epoch 50/100\n",
+      "Train Accuracy: 0.085944    Test Accuracy: 0.081667\n",
+      "Epoch 51/100\n",
+      "Train Accuracy: 0.086111    Test Accuracy: 0.079000\n",
+      "Epoch 52/100\n",
+      "Train Accuracy: 0.086648    Test Accuracy: 0.079667\n",
+      "Epoch 53/100\n",
+      "Train Accuracy: 0.086963    Test Accuracy: 0.080833\n",
+      "Epoch 54/100\n",
+      "Train Accuracy: 0.087278    Test Accuracy: 0.081833\n",
+      "Epoch 55/100\n",
+      "Train Accuracy: 0.087648    Test Accuracy: 0.082500\n",
+      "Epoch 56/100\n",
+      "Train Accuracy: 0.088352    Test Accuracy: 0.084167\n",
+      "Epoch 57/100\n",
+      "Train Accuracy: 0.088519    Test Accuracy: 0.083500\n",
+      "Epoch 58/100\n",
+      "Train Accuracy: 0.089019    Test Accuracy: 0.085167\n",
+      "Epoch 59/100\n",
+      "Train Accuracy: 0.089000    Test Accuracy: 0.086333\n",
+      "Epoch 60/100\n",
+      "Train Accuracy: 0.089500    Test Accuracy: 0.086000\n",
+      "Epoch 61/100\n",
+      "Train Accuracy: 0.089833    Test Accuracy: 0.086333\n",
+      "Epoch 62/100\n",
+      "Train Accuracy: 0.090056    Test Accuracy: 0.088000\n",
+      "Epoch 63/100\n",
+      "Train Accuracy: 0.090370    Test Accuracy: 0.087833\n",
+      "Epoch 64/100\n",
+      "Train Accuracy: 0.090185    Test Accuracy: 0.087667\n",
+      "Epoch 65/100\n",
+      "Train Accuracy: 0.090741    Test Accuracy: 0.087167\n",
+      "Epoch 66/100\n",
+      "Train Accuracy: 0.091444    Test Accuracy: 0.087833\n",
+      "Epoch 67/100\n",
+      "Train Accuracy: 0.091667    Test Accuracy: 0.088500\n",
+      "Epoch 68/100\n",
+      "Train Accuracy: 0.092315    Test Accuracy: 0.090167\n",
+      "Epoch 69/100\n",
+      "Train Accuracy: 0.091963    Test Accuracy: 0.090667\n",
+      "Epoch 70/100\n",
+      "Train Accuracy: 0.092093    Test Accuracy: 0.091167\n",
+      "Epoch 71/100\n",
+      "Train Accuracy: 0.091833    Test Accuracy: 0.091833\n",
+      "Epoch 72/100\n",
+      "Train Accuracy: 0.091870    Test Accuracy: 0.090333\n",
+      "Epoch 73/100\n",
+      "Train Accuracy: 0.092148    Test Accuracy: 0.091833\n",
+      "Epoch 74/100\n",
+      "Train Accuracy: 0.092481    Test Accuracy: 0.091667\n",
+      "Epoch 75/100\n",
+      "Train Accuracy: 0.092315    Test Accuracy: 0.093000\n",
+      "Epoch 76/100\n",
+      "Train Accuracy: 0.092852    Test Accuracy: 0.093333\n",
+      "Epoch 77/100\n",
+      "Train Accuracy: 0.093389    Test Accuracy: 0.093500\n",
+      "Epoch 78/100\n",
+      "Train Accuracy: 0.093852    Test Accuracy: 0.095500\n",
+      "Epoch 79/100\n",
+      "Train Accuracy: 0.094167    Test Accuracy: 0.095500\n",
+      "Epoch 80/100\n",
+      "Train Accuracy: 0.094685    Test Accuracy: 0.096333\n",
+      "Epoch 81/100\n",
+      "Train Accuracy: 0.095111    Test Accuracy: 0.097000\n",
+      "Epoch 82/100\n",
+      "Train Accuracy: 0.095537    Test Accuracy: 0.097667\n",
+      "Epoch 83/100\n",
+      "Train Accuracy: 0.095685    Test Accuracy: 0.096833\n",
+      "Epoch 84/100\n",
+      "Train Accuracy: 0.096167    Test Accuracy: 0.098000\n",
+      "Epoch 85/100\n",
+      "Train Accuracy: 0.095685    Test Accuracy: 0.097833\n",
+      "Epoch 86/100\n",
+      "Train Accuracy: 0.096000    Test Accuracy: 0.097333\n",
+      "Epoch 87/100\n",
+      "Train Accuracy: 0.096481    Test Accuracy: 0.097667\n",
+      "Epoch 88/100\n",
+      "Train Accuracy: 0.096611    Test Accuracy: 0.098167\n",
+      "Epoch 89/100\n",
+      "Train Accuracy: 0.096519    Test Accuracy: 0.098667\n",
+      "Epoch 90/100\n",
+      "Train Accuracy: 0.096519    Test Accuracy: 0.098500\n",
+      "Epoch 91/100\n",
+      "Train Accuracy: 0.096519    Test Accuracy: 0.096500\n",
+      "Epoch 92/100\n",
+      "Train Accuracy: 0.096704    Test Accuracy: 0.097667\n",
+      "Epoch 93/100\n",
+      "Train Accuracy: 0.096815    Test Accuracy: 0.098167\n",
+      "Epoch 94/100\n",
+      "Train Accuracy: 0.096685    Test Accuracy: 0.099000\n",
+      "Epoch 95/100\n",
+      "Train Accuracy: 0.096796    Test Accuracy: 0.098833\n",
+      "Epoch 96/100\n",
+      "Train Accuracy: 0.096815    Test Accuracy: 0.099167\n",
+      "Epoch 97/100\n",
+      "Train Accuracy: 0.097241    Test Accuracy: 0.098833\n",
+      "Epoch 98/100\n",
+      "Train Accuracy: 0.097333    Test Accuracy: 0.099500\n",
+      "Epoch 99/100\n",
+      "Train Accuracy: 0.097389    Test Accuracy: 0.098833\n",
+      "Epoch 100/100\n",
+      "Train Accuracy: 0.097556    Test Accuracy: 0.098167\n",
+      "Test Set Accuracy: 0.09816666666666667\n"
+     ]
+    },
+    {
+     "data": {
+      "image/png": "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",
+      "text/plain": [
+       "<Figure size 640x480 with 1 Axes>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "import mlp\n",
+    "mlp.plot_ANN(X_train,y_train,X_test,y_test)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## Test "
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### Test de la fonction read_cifar "
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 4,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "import numpy as np\n",
+    "import read_cifar as rc\n",
+    "from read_cifar import read_cifar_batch\n",
+    "from read_cifar import read_cifar\n",
+    "\n",
+    "def test_read_cifar_batch():\n",
+    "   # Test read_cifar_batch function\n",
+    "   batch_path = \"data\\data_batch_1\"\n",
+    "   data, labels = read_cifar_batch(batch_path)\n",
+    "\n",
+    "   # Check that data has the right shape and type\n",
+    "   assert data.shape == (10000, 3072)\n",
+    "   assert data.dtype == np.float32\n",
+    "\n",
+    "   # Check that labels has the right shape and type\n",
+    "   assert labels.shape == (10000,)\n",
+    "   assert labels.dtype == np.int64\n",
+    "   print(\"All tests passed successfully.\")\n",
+    "   \n",
+    "def  test_read_cifar():\n",
+    "    # Test read_cifar function\n",
+    "    data, labels = read_cifar('data')\n",
+    "\n",
+    "    # Check that data has the right shape and type\n",
+    "    assert data.shape == (60000, 3072)\n",
+    "    assert data.dtype == np.float32\n",
+    "\n",
+    "    # Check that labels has the right shape and type\n",
+    "    assert labels.shape == (60000,)\n",
+    "    assert labels.dtype == np.int64\n",
+    "    print(\"All tests passed successfully.\")\n",
+    "\n",
+    "def test_split_dataset():\n",
+    "    data = np.random.randn(150, 4)\n",
+    "    labels = np.random.randn(150)\n",
+    "    split = 0.8\n",
+    "    data_train, labels_train, data_test, labels_test = rc.split_dataset(data, labels, split)\n",
+    "\n",
+    "    total_size = data_train.shape[0] + data_test.shape[0]\n",
+    "\n",
+    "    assert total_size == len(data)\n",
+    "    assert len(labels_train) == len(data_train)\n",
+    "    assert len(labels_test) == len(data_test)\n",
+    "    \n",
+    "    print(\"All tests passed successfully.\")"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 5,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "All tests passed successfully.\n"
+     ]
+    }
+   ],
+   "source": [
+    "test_read_cifar_batch()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 6,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "All tests passed successfully.\n"
+     ]
+    }
+   ],
+   "source": [
+    "test_read_cifar()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 7,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "All tests passed successfully.\n"
+     ]
+    }
+   ],
+   "source": [
+    "test_split_dataset()"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### Test de la fonction knn"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 10,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "import numpy as np\n",
+    "import knn \n",
+    "\n",
+    "# Test de la fonction distance_matrix :\n",
+    "def test_distance_matrix():\n",
+    "    X = np.array([[1, 2], [3, 4]])\n",
+    "    Y = np.array([[2, 2], [1, 1]])\n",
+    "    dists = knn.distance_matrix(X, Y)\n",
+    "    assert dists.shape == (2, 2)\n",
+    "    print(\"Test for distance_matrix passed.\")\n",
+    "    \n",
+    "\n",
+    "# Test de la fonction knn_predict :\n",
+    "def test_knn_predict():\n",
+    "    dists = np.array([[2, 5], [10, 1]])\n",
+    "    labels_train = np.array([0, 1])\n",
+    "    k = 1\n",
+    "    y_pred = knn.knn_predict(dists, labels_train, k)\n",
+    "    assert y_pred.shape == (2,)\n",
+    "    assert np.array_equal(y_pred, np.array([0, 1]))\n",
+    "    print(\"Test for knn_predict passed.\")\n",
+    "\n",
+    "# Test de la fonction evaluate_knn :\n",
+    "def test_evaluate_knn_accuracy():\n",
+    "    data_train = np.array([[1, 2], [3, 4], [5, 6], [1, 1], [2, 2]])\n",
+    "    labels_train = np.array([0, 1, 2, 0, 1])\n",
+    "    data_test = np.array([[2, 2], [1, 1], [3, 3]])\n",
+    "    labels_test = np.array([1, 0, 1])\n",
+    "    k = 2\n",
+    "    accuracy = knn.evaluate_knn(data_train, labels_train, data_test, labels_test, k)\n",
+    "    assert 0 <= accuracy <= 1\n",
+    "    print(\"Test for evaluate_knn accuracy passed.\")\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 11,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Test for distance_matrix passed.\n"
+     ]
+    }
+   ],
+   "source": [
+    "test_distance_matrix()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 12,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Test for knn_predict passed.\n"
+     ]
+    }
+   ],
+   "source": [
+    "test_knn_predict()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 13,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Test for evaluate_knn accuracy passed.\n"
+     ]
+    }
+   ],
+   "source": [
+    "test_evaluate_knn_accuracy()"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### Test de la fonction mlp"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 27,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "from mlp import initialization, train_mlp, calculate_accuracy, run_mlp_training\n",
+    "\n",
+    "def test_mlp_training():\n",
+    "    #Paramètres du test\n",
+    "    num_samples = 200\n",
+    "    num_features = 3\n",
+    "    num_classes = 2\n",
+    "    num_hidden_units = 3\n",
+    "    learning_rate = 0.1\n",
+    "    num_epochs = 10\n",
+    "\n",
+    "    # Générez des données factices pour le test\n",
+    "    X_train = np.random.randn(num_samples, num_features)\n",
+    "    y_train = np.random.randint(0, num_classes, num_samples)\n",
+    "    X_test = np.random.randn(num_samples, num_features)\n",
+    "    y_test = np.random.randint(0, num_classes, num_samples)\n",
+    "\n",
+    "    # Initialisez les poids et les biais\n",
+    "    W1, b1, W2, b2 = initialization(num_features, num_hidden_units, num_classes)\n",
+    "\n",
+    "    # Entraînez le modèle\n",
+    "    train_accuracies, test_accuracy = run_mlp_training(X_train, y_train, X_test, y_test, num_hidden_units, learning_rate, num_epochs)\n",
+    "\n",
+    "    # Vérifiez si l'accuracy sur l'ensemble de test est un nombre entre 0 et 1\n",
+    "    assert 0 <= test_accuracy <= 1\n",
+    "\n",
+    "    # Vérifiez si la longueur de la liste des accuracies d'entraînement correspond au nombre d'époques\n",
+    "    assert len(train_accuracies) == num_epochs\n",
+    "\n",
+    "    # Vérifiez si les accuracies d'entraînement sont des nombres entre 0 et 1\n",
+    "    for accuracy in train_accuracies:\n",
+    "        assert 0 <= accuracy <= 1\n",
+    "\n",
+    "    print(\"Tous les tests ont réussi avec succès.\")\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 28,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Epoch 1/10\n",
+      "Train Accuracy: 0.490000    Test Accuracy: 0.555000\n",
+      "Epoch 2/10\n",
+      "Train Accuracy: 0.490000    Test Accuracy: 0.535000\n",
+      "Epoch 3/10\n",
+      "Train Accuracy: 0.505000    Test Accuracy: 0.540000\n",
+      "Epoch 4/10\n",
+      "Train Accuracy: 0.505000    Test Accuracy: 0.540000\n",
+      "Epoch 5/10\n",
+      "Train Accuracy: 0.500000    Test Accuracy: 0.545000\n",
+      "Epoch 6/10\n",
+      "Train Accuracy: 0.500000    Test Accuracy: 0.545000\n",
+      "Epoch 7/10\n",
+      "Train Accuracy: 0.500000    Test Accuracy: 0.545000\n",
+      "Epoch 8/10\n",
+      "Train Accuracy: 0.500000    Test Accuracy: 0.545000\n",
+      "Epoch 9/10\n",
+      "Train Accuracy: 0.500000    Test Accuracy: 0.545000\n",
+      "Epoch 10/10\n",
+      "Train Accuracy: 0.500000    Test Accuracy: 0.545000\n",
+      "Tous les tests ont réussi avec succès.\n"
+     ]
+    }
+   ],
+   "source": [
+    "test_mlp_training()"
+   ]
+  }
+ ],
+ "metadata": {
+  "kernelspec": {
+   "display_name": "Python 3",
+   "language": "python",
+   "name": "python3"
+  },
+  "language_info": {
+   "codemirror_mode": {
+    "name": "ipython",
+    "version": 3
+   },
+   "file_extension": ".py",
+   "mimetype": "text/x-python",
+   "name": "python",
+   "nbconvert_exporter": "python",
+   "pygments_lexer": "ipython3",
+   "version": "3.12.0"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/mlp.py b/mlp.py
index 7812729..7fa9b88 100644
--- a/mlp.py
+++ b/mlp.py
@@ -32,7 +32,7 @@ def sigmoid(x,derivate):
 # Define the softmax activation function
 def softmax(x,derivate):
     if derivate == False :
-      return np.exp(x) / np.exp(np.array(x)).sum(axis=-1, keepdims=True)
+      return np.exp(x) / np.exp(np.array(x)).sum(axis=1, keepdims=True)
     else :
         return x*(1-x)
     
@@ -94,7 +94,7 @@ def learn_once_mse(W1, b1, W2, b2, data, targets, learning_rate):
 
     # Update weights and biases of the output layer
     W2 = W2 - learning_rate * np.dot(hidden_layer_output.T, output_layer_gradients) / data.shape[0]
-    b2 = b2 - learning_rate * (1 / hidden_layer_output.shape[1]) * output_layer_gradients.sum(axis=0, keepdims=True)
+    b2 = b2 - learning_rate * (1 / hidden_layer_output.shape[1]) * output_layer_gradients.sum(axis=0)
 
     # Calculate the error at the hidden layer
     hidden_layer_error = np.dot(output_layer_gradients, W2.T)
@@ -104,7 +104,7 @@ def learn_once_mse(W1, b1, W2, b2, data, targets, learning_rate):
 
     # Update weights and biases of the hidden layer
     W1 = W1 - learning_rate * np.dot(data.T, hidden_layer_gradients) / data.shape[0]
-    b1 = b1 - learning_rate * (1 / data.shape[1]) * hidden_layer_gradients.sum(axis=0, keepdims=True)
+    b1 = b1 - learning_rate * (1 / data.shape[1]) * hidden_layer_gradients.sum(axis=0)
 
     # Calculate the loss using the specified metric
     loss = loss_metrics(output_layer_output, targets,metric="MSE",status="forward")
diff --git a/test/__pycache__/read_cifar.cpython-312.pyc b/test/__pycache__/read_cifar.cpython-312.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..998b9339c4bd361ea0c214803f363c7d9a563bc2
GIT binary patch
literal 2268
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
PEiOiu&tm+HHefRWaorQh

literal 0
HcmV?d00001

diff --git a/test/__pycache__/test_read_cifar.cpython-312.pyc b/test/__pycache__/test_read_cifar.cpython-312.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..0e59a03bb7d0607acc6662e7dc4edcd909da2b9f
GIT binary patch
literal 2259
zcmX@j%ge>Uz`!8C-Ys<jD+9x05C?{tpp4IU3=9m@8B!Qh7;_k+7{N4C6mtqg3R4bK
zE=v>(BS?-phbfmSiiwdSg{6fdiZz9`g&~S9g{_4lioKFill>*gFh5PkTLML?i7D~P
znQ4hd@kxm#$r+lAx3~~u$slzw%*?>R0K%VtL0rIC%TU4yldNG_4Q0nLF)-9J)-u&F
zX2IMHQ^df)kiwL$!N5?=<i*g$Si_jbf+PiHmast?3|Sm77J^37&4kr_W)v0p%?F1z
z!fX%=p}T|^#0TLN7MR}{87dhxS^cU6QxZ!OV?YEX)Zz^_nO+L0Gcdel;9+3UWGn*t
z;g_6aPL4uJYH>-iLP272acYV}acOdLYH@K|X--b1o+f({C^&Di7H1?Dq~2mpDXA<-
zy~UJQaEm=HCqJ>o*yt8(W?qSz$t~7`qRhM!P3Bu%;5dpeNG!>?#R9Va7F$kYQff|d
zF~}qZ1%+QR$yPC;#i>QbF~x~Fxrs6Ud8sZ%nPsUlPNhYuiKQ_vsi_6=IjM<7d6{|X
z@lLKWnYoGSsk+HIiN(d4X_?81C7JnoF(5~SiFia>&?~6CB?^*25`*}@NSJ|vft7)Q
zp*W3!fuVunfq-&@)g2+F1y+}Z^crm%Ogh9qurYA+_iJ@(&EUPnrFxNB^#&Ioh&zXA
zKG#gHOI%79nUz3l1p9S5b!KQl1a5E%fVgv%=4;G^3f*DmxWK7-m09aEC}OZD&u`%5
ziAb6$jIihfCryT0#u^5!Ne4M;GEkH>u_t}xq)900lbbY)1Q-|?G?`u|ykcM|Vh6Dq
zi^Lch7>Yo7Nt3+@lp%^ZK>{Efinu{69uNUa?L~Yb4NPD&iUdIs3d+F>3PnN;3=FsU
z(IUS{oPmKs6r?H<9PLkpWoM*a7FKQaX>jRK`@qJ)BhYWvX*EOk61Un#7PTAP{2=Ze
zq4`oXr7m$RUu01RsS)b8>9m<)0TH;tEePVyF`92N6Do9vh4TWJ)>RhmA`u1#29y{F
zB{@*K|2&NmR3w&wk^~rIi`^`cYOpMVNMTH2S`G3d0|P@X13CI(DXW$-g}Iig1Qg(4
z<FOT8H4HV3HB75PE@oh0h+$!1sAaBYsb#HYt6|Op#Rga>f=FSJWME*ZVZ|+11#&lg
z4LhQ!LKMT;3bGn_L58G*8RiG9I@n;cNIF<yVn{mpVeU?W%Yq9_HouqC7#J8{g3?|3
zteGJ2(!K~3=8zQ00ZxLq*oqSKQu1?ev4ZHlTTDgCw|I*SaxzQeL8V-AY6&>a-eS&4
z&4VOT4n!io#R^t=iwmSQzN9EIGw&7;q*#RVI3Y5r#U;16VG<w?S4n<JVorQ<W>so2
zD1RtG0VKT(fzvzKY`81b7#J9oKuLZjILY7P=IyuawCuO<w4Y(TfblZ7QiIDKUjF{b
z&dC1w&iEO@mw6Q%+-~sjH@Mz0x4drde$m|h1j~uE3t`ch&0{XIm^64z;F*!RLi&NA
z^mReSi-L*^6fX*@ET~*wzp#Eo;YD@Ji-ML7UJtlM=LpXTnJsyVTj?T;(j9KTj+)Ed
zGE0~jcrE6?#I1jkMIR(qeVJQ&PVoZE*>#t=buY5$K0(PknjE)S^Gb6ID#0NRDF|di
zIUkfD!9_SYLl=R(xRL>!+rZ)Qi^C>2KczG$)vidBfq?;3%NHv!Ffe>zW@Kc%%^-A}
eLHsU*`dtRaPfR?F+Mg7-8FfBO@i6LuO#lG+mdQl`

literal 0
HcmV?d00001

diff --git a/test/test_knn.py b/test/test_knn.py
new file mode 100644
index 0000000..9368c50
--- /dev/null
+++ b/test/test_knn.py
@@ -0,0 +1,33 @@
+import numpy as np
+import knn 
+
+# Test de la fonction distance_matrix :
+def test_distance_matrix():
+    X = np.array([[1, 2], [3, 4]])
+    Y = np.array([[2, 2], [1, 1]])
+    dists = knn.distance_matrix(X, Y)
+    assert dists.shape == (2, 2)
+    assert np.allclose(dists, np.array([[2, 5], [10, 1]]))
+    print("Test for distance_matrix passed.")
+    
+
+# Test de la fonction knn_predict :
+def test_knn_predict():
+    dists = np.array([[2, 5], [10, 1]])
+    labels_train = np.array([0, 1])
+    k = 1
+    y_pred = knn.knn_predict(dists, labels_train, k)
+    assert y_pred.shape == (2,)
+    assert np.array_equal(y_pred, np.array([0, 1]))
+    print("Test for knn_predict passed.")
+
+# Test de la fonction evaluate_knn :
+def test_evaluate_knn_accuracy():
+    data_train = np.array([[1, 2], [3, 4], [5, 6], [1, 1], [2, 2]])
+    labels_train = np.array([0, 1, 2, 0, 1])
+    data_test = np.array([[2, 2], [1, 1], [3, 3]])
+    labels_test = np.array([1, 0, 1])
+    k = 2
+    accuracy = knn.evaluate_knn(data_train, labels_train, data_test, labels_test, k)
+    assert 0 <= accuracy <= 1
+    print("Test for evaluate_knn accuracy passed.")
diff --git a/test/test_mlp.py b/test/test_mlp.py
new file mode 100644
index 0000000..546d9f3
--- /dev/null
+++ b/test/test_mlp.py
@@ -0,0 +1,39 @@
+import numpy as np
+
+# Importez les  fonctions 
+from mlp import initialization, train_mlp, calculate_accuracy
+
+def test_mlp_training():
+    # Paramètres du test
+    num_samples = 200
+    num_features = 10
+    num_classes = 3
+    num_hidden_units = 5
+    learning_rate = 0.1
+    num_epochs = 10
+
+    # Générez des données factices pour le test
+    X_train = np.random.randn(num_samples, num_features)
+    y_train = np.random.randint(0, num_classes, num_samples)
+    X_test = np.random.randn(num_samples, num_features)
+    y_test = np.random.randint(0, num_classes, num_samples)
+
+    # Initialisez les poids et les biais
+    W1, b1, W2, b2 = initialization(num_features, num_hidden_units, num_classes)
+
+    # Entraînez le modèle
+    train_accuracies, test_accuracy = train_mlp(W1, b1, W2, b2, X_train, y_train, learning_rate, num_epochs)
+
+    # Vérifiez si l'accuracy est un nombre entre 0 et 1
+    assert 0 <= test_accuracy <= 1
+
+    # Vérifiez si la longueur de la liste des accuracies d'entraînement correspond au nombre d'époques
+    assert len(train_accuracies) == num_epochs
+
+    # Vérifiez si les accuracies d'entraînement sont des nombres entre 0 et 1
+    for accuracy in train_accuracies:
+        assert 0 <= accuracy <= 1
+
+    print("Tous les tests ont réussi avec succès.")
+
+
diff --git a/test/test_read_cifar.py b/test/test_read_cifar.py
new file mode 100644
index 0000000..13080e1
--- /dev/null
+++ b/test/test_read_cifar.py
@@ -0,0 +1,46 @@
+import numpy as np
+import read_cifar as rc
+from read_cifar import read_cifar_batch
+from read_cifar import read_cifar
+def test_read_cifar_batch():
+   # Test read_cifar_batch function
+   batch_path = "data\data_batch_1"
+   data, labels = read_cifar_batch(batch_path)
+
+   # Check that data has the right shape and type
+   assert data.shape == (10000, 3072)
+   assert data.dtype == np.float32
+
+   # Check that labels has the right shape and type
+   assert labels.shape == (10000,)
+   assert labels.dtype == np.int64
+   print("All tests passed successfully.")
+   
+
+
+def  test_read_cifar():
+    # Test read_cifar function
+    data, labels = read_cifar('data')
+
+    # Check that data has the right shape and type
+    assert data.shape == (60000, 3072)
+    assert data.dtype == np.float32
+
+    # Check that labels has the right shape and type
+    assert labels.shape == (60000,)
+    assert labels.dtype == np.int64
+    print("All tests passed successfully.")
+
+def test_split_dataset():
+    data = np.random.randn(150, 4)
+    labels = np.random.randn(150)
+    split = 0.8
+    data_train, labels_train, data_test, labels_test = rc.split_dataset(data, labels, split)
+
+    total_size = data_train.shape[0] + data_test.shape[0]
+
+    assert total_size == len(data)
+    assert len(labels_train) == len(data_train)
+    assert len(labels_test) == len(data_test)
+    
+    print("All tests passed successfully.")
-- 
GitLab