From c751b80fdb3b9e6d3e8ff86622416c61e21dab45 Mon Sep 17 00:00:00 2001 From: mankala sharathchandra <152910893+sharath4444@users.noreply.github.com> Date: Sun, 20 Oct 2024 22:51:40 +0530 Subject: [PATCH] Add files via upload --- online_payment_fraud_detection/app.py | 45 + online_payment_fraud_detection/demo.png.png | Bin 0 -> 57134 bytes .../fraud_detection_model.pkl | Bin 0 -> 243158 bytes online_payment_fraud_detection/hello.ipynb | 1467 +++++++++++++++++ online_payment_fraud_detection/hello.py | 84 + 5 files changed, 1596 insertions(+) create mode 100644 online_payment_fraud_detection/app.py create mode 100644 online_payment_fraud_detection/demo.png.png create mode 100644 online_payment_fraud_detection/fraud_detection_model.pkl create mode 100644 online_payment_fraud_detection/hello.ipynb create mode 100644 online_payment_fraud_detection/hello.py diff --git a/online_payment_fraud_detection/app.py b/online_payment_fraud_detection/app.py new file mode 100644 index 0000000..c6b13e4 --- /dev/null +++ b/online_payment_fraud_detection/app.py @@ -0,0 +1,45 @@ +import streamlit as st +import numpy as np +import pickle + +# Load the trained model +with open("fraud_detection_model.pkl", "rb") as file: + model = pickle.load(file) + +# Streamlit app title and description +st.title("Online Payment Fraud Detection System") +st.markdown(""" +This application predicts whether an online payment transaction is fraudulent based on transaction details. +Enter the transaction information below and click **Predict** to check for fraud. +""") + +# Input section for transaction details +st.subheader("Enter Transaction Details") +transaction_type = st.selectbox("Transaction Type", ["CASH_OUT", "PAYMENT", "CASH_IN", "TRANSFER", "DEBIT"], help="Select the type of transaction.") +amount = st.number_input("Transaction Amount", min_value=0.0, format="%.2f", help="Enter the transaction amount.") +oldbalanceOrg = st.number_input("Original Balance (Before Transaction)", min_value=0.0, format="%.2f", help="Enter the account balance before the transaction.") +newbalanceOrig = st.number_input("New Balance (After Transaction)", min_value=0.0, format="%.2f", help="Enter the account balance after the transaction.") + +# Map transaction types to numeric values +transaction_map = {"CASH_OUT": 1, "PAYMENT": 2, "CASH_IN": 3, "TRANSFER": 4, "DEBIT": 5} +transaction_type_num = transaction_map[transaction_type] + +# Predict fraud when button is clicked +if st.button("Predict"): + # Prepare the input features for prediction + input_features = np.array([[transaction_type_num, amount, oldbalanceOrg, newbalanceOrig]]) + + # Perform prediction + prediction = model.predict(input_features) + + # Display the result + if prediction[0] == "Fraud": + st.error("⚠️ This transaction is predicted as **Fraudulent**!") + else: + st.success("✅ This transaction is predicted as **Not Fraudulent**.") + +# Footer +st.markdown(""" +--- +**Note:** This prediction is based on the trained model and may not be 100% accurate. Use this information as a guide, not a decision-making tool. +""") diff --git a/online_payment_fraud_detection/demo.png.png b/online_payment_fraud_detection/demo.png.png new file mode 100644 index 0000000000000000000000000000000000000000..aeade65c716b6994ac890bba765a922afaddff2f GIT binary patch literal 57134 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 U#h%T9pyO{nUHx3vIVCg!00(+R;{X5v literal 0 HcmV?d00001 diff --git a/online_payment_fraud_detection/fraud_detection_model.pkl b/online_payment_fraud_detection/fraud_detection_model.pkl new file mode 100644 index 0000000000000000000000000000000000000000..b089c6111e30d88be4a772338fae62ba544a6a8d GIT binary patch literal 243158 zcmdqK2Y3@l_dUF(nl3t_ni3#Di0Op3BYMY_(2MA%8DTo1h!z}Tz<@~zEuti$V`>Oh z^cpbTREyq0^k(4OmCo!A9`}s{LC7PBsk>q}bXYAXf zXXo~zAw~OzcJ5rXUB{m7`}XbJH!?g^)y^He_3hR>q=~Yl~`ohzw8EwOdHH$Z-F@)}Gz^DI1k79Xj{z7a5+cSNlQjI(4@83y!QG zp0-!Fkam6B_pck3G5uU(hW_8t2vGVR30zMUhPCf)8sSRo|q*wNaqeNSs}d!|yVUcEzl_v;EFvbxM;`Tp`DBN>ff_pxAvi- z?FUDOr)(G6xnu8;zWqY`ckHJ`IXtnuVq|#IkWQW|QzPq0VgWVgOX+4?|wRpaBdY$}cDZ$*!8Kn+#!FD=- ze>0t*5Upai((F+-lZ!*f$kOxUQ@&`>QqCS!N7GMwypfp})Z}MhZ&1K~2d$TyzHws_ zLW_y<=3Y{|g~gOa3fp?Wb(xlOYF*!!P|>IUCqebQ@8v(2rN^CeCN5o9o)lS~Htfjz zdqd5BO6!6E(0D49U4A295$WE+yRJ$dWNVddlrLGUl-KnAvGq$389vE6JC;bZN*(%b zZ+&_7=qwt4_2{x1KN+?jg+tUYWpi|j#tJ{I_0-$zE68&awC9K{tnW7(R5TyafB*VChU~F%8~i2U5F~qAkPG9>i6n{-d=+PRf-jK}A~- zp+ytk(ClFRS4L1L61Mwgbn{$iWNN3Ux}N`O!Ose0^dq+S??O(FQyYktX`XtjW!K`D z4!ra{zhG;*5m}#e?Cpl@FUV~8Bq;+ybxAb-j9m)VMbk~9S(%a7w@fP60y<8a&M%&7 zCTy2{*3Sgp%s?jo!CjJDNcKH_l)rN_lNU-&|9?%Nj_NO<&%`OPb>9xqaWbRNT@l-T z_utq46Xi2;RUPo!{`mQ;Hln_ActFYnWOSTEHVq;rGtNu(o4i{tiTxg^t>u4CY|q8> zEnUj>Czgf@dY)_ayZjByx7E=2qW%|Q`BHU4ivf6(8_4v3RL=4PKYIR&+RwyQwUoeI zDKFmS12Xmpj7>O<49T#(#>FAWx%q?E6V*2we_uj3KajE0T5;7d;@SN9kDqSv&kdv{ z{F0=vu)Q3R##Jds)kr^;NaW!5QorStD^J$<1Z2>UzlFg2mgh%QPB)d<=C3<;Kc_~MEbI4vZ%vq&uUD>vW4LhubWaX`J2FZB;eCsJnlHrs;a%R5c*a$f9O2z=Gn|%^O?9RP3ZYs9)?r^GWASpww_dU_GOH? z__$I~7_(>Wb8Y?*wZB(Jogdxwfzqz$RS{STsMnIBvZ(q2SGKh|mR7zTiV6xi)}JG^ zB&yG}t59|SMfsN)eH)`s4LJe-JHZ_OrX1tv*3@ z;rWY+t3uV+@72)|y}H5Zn~DzjjkNwc{oi)$A(u+DLe;D!Uw7i;+U%-W_+lgaq<8*!}C(Eno z1gq4uE!F4W7U0bRGWi>owC`48Dd1W^vi55EC2PQqU$p#f3EoH`+s}?8t4PE%({G_Y zmdHm~e$`(Hs!Of#W)P6k4=Ot$ip0!+{*mP2SiU`&&|+J>X$NHVO_@vmLBjT@ zZv4yHt=#&R>WGe?FR7r4w#q~W^<{DYm!$T<8YeQK|#J$?LkfNobH zQ!k=&;3Dn%WBltcv|dN>y6}8w+8ck8Q1=D2BXa!X52{O@@TN16@!z&&#Gk~o`SYJY zjE+CP_Ma$!I^yerj)iM3(OkSu;XjhVYsU_t_m)DHGDYLYUxOYlUF8^q~5KjfEH;~bZ*#65B@MC-$iDxqCTvZ^KJ)yD%8wM!{lH#c8OJexoN{5SHyAN(E&Wc&{*n>UK&OOs?)pRc#e zS+U;(IOe;}6Dm8<5d4 zl`*YCy$js=1C8?#@J0aXcBSa5d1)n?*g2?B-A%D_3hehle(m`CJ+==8GWzzw1S>x{ z|BJ@YX#F}2y2F8t{idQnto-QfUs3y+xTuyAm@9n#>TCWP@khasNkGO-`3=88?RQocb6ZtO*9@dvya2W0rR*9q5Z`IC$i+?a>ZqNx3>`Rw(F zFf{Zdkcq!5?c%l2;g4VcmcFm{{{%xO0-5+ZN}c+Pkl=G8pO%;+$5Mk;boL;$7>+j+ zfQ|1|6DLwTWHYJcw<4lS%t^U0C8%htruAPWw*LZT^j*P6Hjv};x&mS3AMW}Ks!KF3 zKVt)_$SJz=f`gQ9W4+S zN&3y>khC1g#LsaeY8$EAc9$#f@mTKjLmCe|c*}rvyHd2*n7fU*H#^VC0q!^SAJN9o zTx^;LWcWcVVz-jG8Ve@$yc;WLq*OPSBD5&#zfu0qM?(vMjQygce2h<6nQE{NM5B4+inK|3?1*3EhQ2#((DwfArsb&OcFIc>ZSE zRjGvX7varPAme|;(F#=Gc>FE~Zwb#QxxbteT zrd~wlrhAF4={MU}O&c$-526+;SoF9y|E{uWm+RVOro4^i`|JGm z;Qh_>UF-dK5NU33#I{uZncc(Vz}$hZat?D**Uw;8%yfQGhTPxnH0E{8bD7xq&nyw73m# zb^{szr9G8)lCVKL3eP>U&2as`9lRYp-&yF3o!b33@z+mOM>PM~^kvU~cS3g;kjWp? zF#k^C+5GAD-yYa~21w(g6iM#PyNS&?z?!b$dYPWzx~tjSYvXq>cqf32|Iw{C?;_-U zSl3FyySVX3b@qX`pXW!N`e~(x9%ik8nwUl zdhb5D2qn0&I-x~TeI_m{RpbAIhN6M2ervN5zmn=5@D8~U_Iscjp~XXZa~Sxp&MwsB zKYyn>qV^jdzeV})+NJw{1a=?g?T={m^DYv-dfLDi<(F}v-*{_(PPFfVN`w~ab&ccL zz}Okl$gaoFX#FheKeg8*X#P0~yH5cb9p|wtyFU8yD+ao!d41EfTHe02zJD zil=+E?>}Y4eh-w=j=$Hi{Wg%*pSo%P1YMN%cSf`6C(p^FSU#i+Azn9+2rj$A!T(&-vpw z<%`DO==gCT4Lt@j@sIk&zR&RcbJR{3cn^4fM61sGKKk+JA#@)BsakDfoG@nh^#EhR8lio=_B2pki?=%v4&AWr`o*B4fsEiYz|Ka2I_&uj1- zfyn5X_DCm4mLI!h8#{WP+=@Mb_xx3x|KEV0p68Qt-$s+5h~3jVomeSXWBD0${#)?V zy~qAp`wkOJuOvz5WQmj?uoFnwBm$ZwftQxok1jIiFj>EQNvfM)Zj@JP1mz9sqS^09 zc@*_}QAuANAeQ3a1r}PgTBg@2-MgKgHNI&7wbI*FzCh8G&|*U9CISM~-L~?B4{G_} zgc98N9ic^0eWqVks>V+Y!IZqd_3MTIkie`NHk}XJEH|QpD%zT8{3PHd1u{C0Ct3c{ zu79Lq`BG7@|u{g(#1CLlnq9r4v4hlsOIy_s#Y@0HWP!!M!n zea(MSe%g2Rz5o1;oxa%XccS|5e1ZP?kDC7(5HR}nE+&5DNVjOxbMf7)agVplO_+fx z*+*%7QT;^k_;1qqnIK3XXu;?^_uW25W*sk(_sXnoauBO;)AcihP!`Bkv$UOejBH7A zt!mE-M`U_^#BGMHyOw`hz{|n&qt_gWCf2%@8wOuIAn#-C59p@Z{{?v2fdI93P|`o6 ziFEVy{*6m#%T-yv)KKGR1tA;Hcg~oh@ZB$d{-HXe@%J@@>nq4V7F-eT;K)peCPNiM@aKrS#MYAc;4{&9is6w%HQ13 z%>!ie&sHbF5!mUJle6|q`84}Q^^N*3FLd+s{!9C+9r@t>xB0;PlINS!6w~cD@?X?` zCN63uy!PK$zES)N!tbwuj84GS=SN7y+EOPbmN+O6RIR2jM;k)liuzxa65Lor;}?Q% z2|oVTpBo(``LDj|V!wJ^uEp}1&z}l|SDd%s{`}HW?f#EEEMGEf^IsA0zJ8B>c*&z= z#)If5S0ZENZ13>PYxax!ZxsKc(EWzDUm_t#wd;Rb-qA0s*)OVZbp0q0y2W_^$-F~H zN!;XPLzm4t&)t7b%@Ni2b^Iiyf^N)CXi-$(h+h(Zm*V5^2pMvWNXs@&sy%IyT!0Fy zX!HL2mjNtaB7_!8L$?ecf9b2q$4HF(`ALVl=Oa77f#c zWOSlR|8tDwv3C3-GWjtse`vjOcq0SpcE!*j>)vD9^@I5Ov|f339gd~2KL$BE5!X31##&vF-*ZyBKRMg6DiG*3G8A#POuRYSYAfsBkR zY`CJ|d_l?z=QqeTDZ!2U{S(zes0C#FxAp9HoOo#b`j<9W1H76%-@3US<$wP9%fv-> zolyVl!0)=e|CXZ56#os*KTuux`fCL$=*Ie*emyi)A4uC(s@W&4q47WX(Y`+`n!iTJ zzaSXgkheej*zMya=GN)l){dv;Oz-$#TJv92KmPnpn-k@mD8Y?^nto&0-I}*Q==t|2 zwC5kjw;$D|CV0~d$mCh{m9i(a^;f!g^owir$9Leh!}O~fI>bf%^B1G>(*}WT%g5ie zJA}sn(|!Jv1$KAl?T@Hj>m-p{`5!BEbd=m6gBmux8m!Uszdd*zc)sHYr{ce<*~aUC zR*=uL7XZ(%)cB(P*MsHvSV^cU9iiI^2vB!h*TtP6jz;}smmZodhf;!yw$_9eMfI6> z6{`2^pFUJjMWXA|bxBv=e#@U%Pm(~}5a*$stK?8Nfg?r}+MKBUM)?~I-4VRLsrT?0 zV$bnH-oJN|+=JC`uIqOLZvc>~Mk?<+Me=3qIw1e%<8pawu!^>NTK{(kuMZHQ)`~9N z>J;fWW5tQpRUC%*@AUwoCy>z(EdTVRw*HTQ{fX-M8oyp>DCB+mc~5EQFCT0E><8WcK!6%FSF)ote*E!Mt)RX{ z^M`3yVR=7)80F7EG(3p6UkZGEO1u9f{^y5oln|E1T#c1Q-$bQlOWBgLvCh9-+H4K8ofsDT6TxiTkAOF7EZ-c=<@%BrD z+MOnjRwH{gNjX6dWCLIuN!-pW|3-p03dmF=<6~k-^tKw+YPH+SJwFfCg~v}BDyX8Z z4xz=-XlM+tZ_9f{kH4?yAB{5)bDlLAK&w_D1;3D`b^_dnoGwzI@GB3bA| zzkTv#mTwxY@h4*YuRtcxtYdGVA;N}&1a_zXWlPwbrbQ=*;N}qzk#<72v92q)T@17 zyZ>zs%eU$G@7Y0E1Z4Cb6|YftnrZrT!CMFfsI{X@?o#Hz4_yDA z2g08~M&HzK!C7+e@~`uvIv$lXv-(mQO@BUk3wVCi9QiC6GxpZO%xQLW&mTZ_;q`~n z`uTS>^arnRIo1BGcKrQV>krZKYczgD`Aom4Jwa%9i1Le3f{Hf%{x-7 z{2XbWzWHK%zgVvS)e7oMRNu(|r4U>OWc+lbo_>zJ-19V1+J$F*zJJc>`pa_Yt^fj5 z*8*QXKS$Iz>iQ}E{o9`H;{F@W|4|TJ3uOFv{Tgsy%is9-e^WbG;>{W$-LBY2j-)yN z!OyQ(fv}qAJ5KnWCmugP-Rl>k`RD8LkLedRB#4V7{e`$~;Nxcx9(bNumOrgD?(i@2 zcb-6c{*&)C{(A8K1~NL9N*&LWuv)2(L^j{VJwFB2g~y-K=QpD9qk0|(^z$E4epS|g z=KjM?Xm~U4zoY)i^M>nR+MKAq(fHc}-5o%H+I&Egv=@j+$9Vm`6$A&6?LYa>dBgQH z)$!H-ZD?pakhZJXZGZ6Qe`ov}_1`Wyyc@{GUvf6Pp!|N#gvX;_gvs+g9qIXR>7=b+ zMB_h&<&zGC7WY7RFA$*aj(FMjg5mh3d{KR-U4`oX_%j;+`_b?L-hR`Y6&G;)IU~ov z|IJ(bjppBj&^^rSTRT6z@WK1%{{in1km>*EHG3{-*FWRyqq^|?X_SAW{m0m)hK_g} zztoiA#v)$xeYJmf1Kj{}{g|eI41vrC2N^%35B{otPMG+IFGBp}m{$5H_%W@Dn`!)y z<4sCZQSKcYQx~kkpcVCh=EF`owQGGNIn)mZxYgT{#zo#Dy z!<@YTq*n50M6z}H{Y2c`O8NYB18OGF`(M=memC@yWv`OdOyhSEx|eu;YeQ9^oQr6j zEwLPxML&bE6w9OWMfK4<7yrxHagEov)TpcK=Q(R?kx*X2=(lC`uYh-z=SNpo`PLN^ zlCLn!gV_o2;ZiOCMeQHN@?A>_jh`qV=5hXC#|{%e|G0m@NwVDze7wp}E}dMDf6okg zwE61>_%C?>1Ep*!%#tl{)9IBG%df}jXRwcR<<$5$!E^C^59v}vh+ z2JTvw&P@Hk1>Sw0Z|b7*?O|OkWi!f&wo!&M{{-C7;(r^wJ3QYJ-c8|?j4P*?O)Mv5 z_!fpQ8vpPujQ)}9ieH}BUFhE9^@Ap=`i0j9jla`P9;go=Nm@TzXw(4W_Hp85R)&V*ZOFli~kesc+TrfiN8sr=rk}b-g2wb3`Rei(SHiw zGoDW*H-G8vh`z5XbuWYpiUsyR9%}h7nm^qbeuTn@Bf|05)m5hV`4?D@X<_~&P5&h} zzXCF~oQc)>$Ju3Q)ITQKd{*y2|1)Y_JugxJnRXSTZhsthBt-K}J!_p=DV6ot#f+2u zQp$wUml*xmASB@V5j9o5B_#az$%1m9M$}?SQohuw_1_!t-vSx^s3j&WxkSoi`_q~wN3WFgnXy8Vun`uh6|@UruKOYt4q6#o1= z15zcEhtFsDy{`~j$_idKo^SnHchl^+3XkJDquPtvHCa{icUhGRp6UUKja{rrhk(a)a>fNud`uO&I26m-hAB024r z=A&i5!FtQ42<5s4UIoD~2GnawQI%>riFA1N%08`smQ&874CVN3*2nKx;1%Ne&N(J0 z=`<{OX_^TqxaUt$9ntv5zkiHcQy9AR{#4qovfpy7jFWik@xNb0>lFe28{U3L!|arA zeE;{?;1vY|+_F1UQ@-!VUuv(%AMfWMU-_(GiVehLhxq*mM*QN~Q3CnP)QjHs>IJb6 zo7tez$!YSNxl~aZzVa1q{x1PS2O#5T#I=)`NI<%V-4-;8l$)~rLVEs|1g`}Upo*DR zCA~yyjyhq_f9arHm1$Ta{WSejAk+jh)q)P>x=1!n&AlLVO^5s?vqK6BC8~h>Dh*zF zAVA$^Z#dUU$ojxVxn~^Zo}WXTD+59~AlVXO3PRtA^7B)I8>?vi3TU|6d;HIT-idln?*3ca zTt)Dz0s-pofZWkeqJH~(My`{FzrRrlgepL$|EvRcJGJ|7l2Ac6X3^qLzt}@~eOsC+ zz5n#1kJ>;6;%-LyCmKJ-FO^Evf9lJO9hHHM{kB|x>Gm_nC57crRId6G)o0pOSl-Wn zM)v<#`bPd&hha5VH?DeqzV&R{M7MeSe0@-3YSE!Kr@Lm-o9&aOi) zYR~Uym%ox!LF3m0uRhOrJnnE&8^1>J6SbeQOEF!~{|3+v0s>U`T*X2!!p_fs{qcqB zk@otQ(6^1@FnvBB6Q}4DXD({b&(2B-ZY-zqMdNQYe|`u3rhNP@_u?*+=)`|KtY7vo zpYK0rPyZ#UxMqJd=r(_keu#AGqvxM!{9qpK1Yya}8mq^M}^Q{$=?=gJ-U0d+l z@%(_lM??P;{{F6L{Cz$C#9#loJ4pH05pnB@2^K|lcf`q^4~V71+Jg0ZPLb2u)lHrk zNuZxU(2wPMfY0<_ROv|%h^=6jjjfK3lfMn8Y-M3Lj?Sx+)ER=^d3{H4`v)X2e~k0q zRJ(kVy#fCAUhVkR1^l-_#(rt8+i&Z#o6u4)c(Z{3_wFKDnvA zYT34T-2LC>4lIACUE_BLZ!nOt-(Ky>W#X7yp?#OI2)TrQ`++1KoTb@MpG#on^-bx= zT_yo(EB$tI+D7>aby!7vh^F5Yyk0y%x^TYBgmhFdV9b=AEML;sFQWOso8>!#2`z>| zw>OaSKX6{B%Vh7`nn8_o@8^DhmGVXPk)EJ=zy6N@{Tr&^2X@o@3mE%@MjX5R!QcO+ z&$Z~!$KTa_)@9<+F@AnhU-0_z{Gf;_l+Rzkp?3aP@uPYkfAsa6s6H-_AnYc@MUn=> z??Jr(wzGFHll7UBbuU!)Ecg2%)E-fN{q7;vgglzQDBsBbA+UQGklLk)*sqtnLZp^! z^A;T5M6Sdh0G?0R^uGshD93iQfF=O_QQ~AAV8+c=RexM`gRgzrEo@|w3 z4d>8Rh(Tzhi{fMGJ%nT z`e^n~1aA@$p!!KNuDwda3+LO`J?NO+P~Adbq>0!0Uy^d&Sewvd1Oz7o88hu|vR@-T zH{ESj`Dv`2gA&|WQR9o|pV9GS3UsFe0ji4S`)1d)-_OqA)}{YSdhNe{_rBUjAwpY< zgy1w@KXBa0Ylh!nq;V4U-)Q{*4BcONeb>^7*I?(Td;R8D*gb={KghD{8X@WW52&>w zQr<}euA
vzjozP&S{#hK8Z1*H9=>)-r>9Tm#>!>i;n&sj|2GiU02%+KCjK`_PfPusyVJ+YrC7eL zw#K)EHy;R4Ydf3vxK1W^4k}c4Q>>i(9X=tnI2VL@Kvw@*v+LUUjsN)(<%`D8*Yg*n z0F~yRd_c?!z^#6eFpFn^b9$V6x*NG=iPVV_Fp6%ktKcnN< zLI|$l^E54z!941=7XP)_u@1=8GbPP-L;L(Z{`!SBBx=9W{P`CI*8>?pgNBv8 zp`AY%@kRBG;{P{vHvj>udr@bb-uTznPe$|CMhI>Kvi{F%dqbPQjO-WnpJ`Wd?cd8E zQGFx(x5DojAV7`3qsyN+i8R67aaG_@xkNs7ljmjoV!L+ycYtsT$oT2lW>)x-1OM7N zqrJQ$fU=bXQ!@vlrETCH0s_?C0p_eXNzm1K+YYChE2n36NYiba{&sBN!SiiB|GYs+ zjxw{aYK846VrVPy|TvN1KwUBK&c~Hembb~-;bz-C31`NRG4 z{rV5nuF|3&zhlrn4g{#Gt~SMV|BdEPU;FO_1Wy7PJBeRK-G9a|)i$F3Q(wO7|5yB3 z>;Rm#g}9AZ{+)(n7kK|ol~UazLBC}0?r&Qpk6}9?AY9|00q;Bzpf(@0KISG__poS> zKQG4`K7Z&e2zud(&;TcIA`>hW?|L-CQH-Jq1Et!YjBBt@bX5IJW za@kA;RU|=#7B7K!83<5!yOx!@W%&FRsv{ad6BTr0Afd%85WEVc?JD~n!<*mI=1(?! z|K|OR*Pwfy*Ow0Vy9GNx|MSlZgV#ndx~ z>&HakC4P^7lk>N=&p%R7huxT8^Ix?8jMi^SpqrGpKcLvP+aLY>-ZbZzbWB&Dn9-Z!yDZpoAQ2r<6@efa$Z%HzHIvM2aDRDg>v0kme68q z=%xYEaiQ!t-JW{K@cSQ>FRG8`LGvfx@{P`4(xTz)K&GE;V~X4*hurtSpE5lDrvon= zkn!I&CjVW--!G^2(t}6mH@aQ%&)RwK9mD&Ny!9V4py~0;h#i@D`-8HaxI;Vypydqj}E%FR&vkkg+qWZMM6b|LoyINo{QZ@751S z_WSC;DBtMw-<&Y4Jdo+X=-9{iNLb>chqrJ2TVBfs@c0z%`gtz!N&}hr2U+{yBT;`B zdy(hNB6$w>yF1XOUw;X}_S`^5-xb~EF3Gp6rEO}|VR<@w-UA&qeNq2AuzXu{LW_Bz zTL8$~zkbJEl5S~|QfaSWkV{j78|!HNyx`^M?RP#Lbyqun#y@|c&E*5{OJ3hmd%#`o z{4@UXo7ySrKbnWEK7WYvnSN2*AZSQ<{cV(g1!36NKt?CX;iu%^?w8TcbDfb3Q9(CW z)B67_@QMIwT-0iDSMC!3qai&K)LF}&Khow3fmfL4Tj!pj^T+3Z{$X_gPf_??3dqFY zRHNQKlA)?SWM_$3?)L|1oWB9DBp*MiX6bw6r2F^dW4Y%q(D(;}SB%#W_`2Xd!{Z0l z7tLRG`eNt*;?OO@+fR-L-qX(iu^VQ4KYpmao(A;er>Ol*zo<S8y*}#Z7aT{Z{N9?+(we>~-{|{;6<~Ko-hTV^0r$y*=3gz?X+11wW*n2O`u)42 z`bO*LO3>{HWc-YtllTE4b5pXAYsA|hxVM^%^!)R3uGZ6c%J*o8 zsp#mX#gBkji`RD)yMCWcU$-r6&WJPeS1jLFRns?vSC!Yd9iDLigWsR73|^xVo&T%B?&`e#){MLElYrmPHfwr+75DuK+MS~LWAyoN4d~Vc(sq^Z8dM;a>yw{9 zYs2n_eEeLl>@My5+wt$;rhe7|uP*PuWo%-XcKq{o{zdZ`1^V%)9(L3RGUL~DMA7#U zjPG9*?SH0SwMn$AJY5#LLA-uor}R|+(;Yve{u^DtX$-%c@cvtte&-_7r`MW4ywN&& zm!~5<|Lxx2e?Erg+bmlAzk_ZEAk9mqdSH?ZE|SIl`R5_S&p(@j*PgdOqQXuWnQ~x6 z&8@@E%kiIoKy{jd*P7QSg{Ql;>qnVb`=!#F{msE^#p_Gehr5XT=i6q)8a}_K1$Zra z{fHS>ef}}(Khgd-%70P5(fU)A5BCs7ef+nK+`N8#otf}JMUA*8f*{J{ff!CksJEq>&;}?JYcsu@#>=*T) z>Ujd-{q+l@@iz#D4d(r~WhnBHJdXQ&ZR4?LhSBAGG(EhvcYqAwjb7v4-ofVc?D7?I+G*56P-d z^DbXM5@UG%Za8=&czxG*H6J2QPQ&L1iN+tzqZjn`iw!$Q1DW_orSAVwyZ#$Le`vjt z;Em$>);_&;`{R!v7$Q9WeVspi<-aci*zXQN%p~pl&yU!?{5||dw#UR4Hs|e# zAODj7Vfn!mHU4;PUk0RkrRX@nuKbu-SNxOdyH=~@$t*ui|NQDFY+nFm?2jIK_z{Uo z*=$jGioJ%@-vdC}+4QSSH0DSs+>Gx+#P-M@RJtzY7Q|Bm_-3Er=~ zeqimYk4R)lyB3@4TrfO;n+D!=UO%8ribwGCf@~E3pTYZu=LfESN#{@BuOCr=J#q8C z|6m@%t{*={^T*fu-{|uXQT_PGFPcBI;Mja16DMnW$0HK9KXv0@&Tf_KP=bmMef>Qf zym>%o{5mt)ACXm+N-7`09hI}QeC7F}REK^p{~OPDZ5t|qWAg3^o!aC`bGTww;tO-@F(!f&NvDN(0{j1cLav}}&|mcleIEthY9J#MbZN?CawqiF=#Ey|yl^Qc~HFa7@C&EV|>GImCdUHU|OepmeKAGF>U@V4^$&h4$AXxE?P zk3Y&6jla?S>45Gw-u{Sg6Q3BK|I<*2>Z5tk^!al;cI*H$c@}hbmY#pUt{<6pRT~Hl z`OmID7>z&C_!%94_aJTu`S_Wxw0%m*cH;ljso&&CHh~JR(AJ-O!8-t?d8Ne19+mnj zk!+nFmI|mN_hv6(T$rcDZy$L3d3}p3=~EKz9zV+r$B(H0xoL-~$b9}H%4hsi8t{Jp zsmJ<1V;)f&alhzwjiY@0to_G4CH`yEZT_XhYWYic0T(%)fG!;Z?=T-fX-k)&^0=yeQM&EkA$}`erVz$=1zuhVS z&GG}f5?VY7-eq1tYMJvXiCC3yTFKWZj+ z_{k1m_4&n=e-6A@Uf)u4wi3UbV{bQHe?c}ne>e}`h4=7lDe+f+d`bB`Cu29lrjI|- z_)~j54R}9){l7l`{l7kb8?FDYpkuBAnK+YQvp+Mu{zvm)wEyDg59MEj?sXv3PtMZC zpAklr#zfGtfH-*HvUBQJF|S! zg3#h^=-vU+xG4Jr11CQtHNWhiV21wz?)n+!i|RA|qEZRv--WJ=*SAmD_w0k;f4B$U zeITRb7&VXfKY#qCeu~>HCojRHpD!};i*N;iFMYc6pJ@IVoqxZ9|8M#DSqF4@ zZg~Dp<1DIgl)n;PH&gTsaP@y+x)9_1^;VzhSG8@T{!?F~_ES9%OP_xd!tOl0{nle4 zFNi5bDihmyzFdPn0B4^@JncwQBJgqm89QA`^SmJBROyPX_ivD!u?ATCYsas|;H7&H zztHvPqjq~Ik7GS$ef zvC8;)Ak`aCZn&J9*&#Wtn*aXbCFA+_Yh&p6+ro`s+MH!&5`Fxzr=RNYSJ38CgO`Ta zC(GvPd`u6Z{rAUj#xK_$u8C(#U-R8EyFcv6;Zj3}oW$vb@s!-{|~R)P8pQV}E}n3v{#b`qtM8ULel= z`jf`*3-Ge?e3wb0{LlaUCrrPnt|Knu$1kJ%Pjez}xq!?(=Neq{g|>e5_4=_<{|7)f zH?QwZ(fY+FfB$)2*qsl^^porCAIkCji$NPo$>B0RKXd1;O}~Flbo|i!8{K@9e*f8* z&@IZx&vDoJf;{iNt8c+kTjUTo5&vwh2rcFZuQ1OyRp0hPyZ&T!{h|PPg@BCzn{P@vvDw;n=`l5WMU)9vn^5+}a zT^va5QtDVDA1VEJ?$pS>)g$FjDocB{AoOh@c*S_WY1P9Q|JwPp(fUW!f5tDxbbb9V z%5Os*R*^I#v{({;f6M!C+mY%enfPSx%1R}V%L^&Njh!`qDe%hjeAm=OFAeYCq|KEE zuMCjsXG_~R`urb1e`q{J{b$-$r8WCS`BcwixA*Zk>i=@^y9V!nbcG%-NuEmnjj}zB zmVfgId;UB1=g*V}uR4&i(|)?~OYQ!LK`dWtOK7nIcxGPTvMv8h?f4u2`J+^)B6x(? zcV)`_l7tO=RycIr-`xHGRKF5>YUQPh5;>tD5@+lr6B^KsEvM?x$ox$pnb z{;vaG)A!i_I>9T$`){fJb;0}YJ^I17Uw-iW&-K7-!t1+!->Zy&JU=P^{TtN&`rtL@ z^(|knHO@cEZvbAS_wcLFrSpgJ`CAZp4d26`7(w};|NP_Y_@nXm(MAAe6ydOT78+b`TAwA2B9cLXy198k1qdb4t^G%k6~Ta~)@)<;0u z?-QD7J<Y92XY{+m?mIZZFyo9QKXq1?oIj`d?%q%GX8J=>iu#S$iIuo|UcumR1YeJ`WDQFh zV3tnJY!Hz9Px)0eWhf_>xo&BnKXe0M;`y#z5gE)<$7)X&)SoY3IIQy>uWoAm?%@9f zWa4BEn-oW!d&3{*T+wFN>I_(kkDdJ@OlFo{~cNE zuSnU;E%Pm06wQ7Ai}HJc7sBgD?EgidKjN=Hsh^_xgXSS?((D)IGk&RUc+E%ms$Auj zowz~y*9V3T05UqZN9SK@&oBIz5>&L+CA1g{Uf=id{f@sPL7p41xa;TM#?R>Z)epM; z-=lx=6wM#w^^<7)sl6V*y&wO~xK^6bKmQpByN3c99ml-1aU{ley3EK{uAx z=3g6lV}Z0^m1-n^lQ`m`Il1SD(t0Do8^h~IA1D&{!S4@_0&g_Wx8%vL>tnaaod3h~ zqnW%?+aPF2`14C&`9}TcYyXc!V8Vd3UljkWImgiW9pt`$OzZio|08tA^ZG&aevJF% z*Z<+Lo8I6{Bv^W*IkwC_Or`Z)pO3FnVC7E+b&PNGutW0Q8RNvR} zn~Ms%QP%W-hTXrt$Nn9CUz7c}njWn+KUV&Rs_8ULd*R-xy4 zpa1zY+(X#CU;neipIyJ((eUql{Orq@ye8v2K3H*R@@Y8-?Ql0%)beL8cng5c_;VGW z`I^B<{z5>KgW;ic^dG3{cd#r@dph16UgX9 zcYQ+h*Z1SM(fC;i-9@~<_2EmZ|LKmOC9r!rZ@+U!+BZa6mu9MUWD~g}8-T~t3C+Ky z;4S0%_O_-s#O8hg>ITF4Q#AjKKK~NsGkKwy?tT6hX8m8P`yU0rH}n1n^ykC z{5P4m$%WYoWU0P>SP9;$_wX&7-e~K;0yN+%+Nuy*6!qWe{?XOYT?1t1e|wK@Z*csG zm9tPmH>eHmBx#uU){#*y%Mj+j;w!i4%n-6~e z^cQ#=czx5_f2jXQWVZX+`%l+{_cyQa>U~BTKknD3JN`xU2kv>?`9GXL8eM-8)i;X& z78v$57MM)`N97GoV77P2_*cE&o8(07_%qGYj=x*Mj{`FKPmc8PGiSdtX>kh2PPq&l zfO8QV-+}GdfsDR%W4&bFTkxlxFOzJP>GO@;0W?h@2&A+PybC}^U+UgKGH*&+Y1Hnt zhvjT+!%=-S{q5lG;Q5wP<=&EWb?+v;oNkAlkmU#JzkeVaf1~qVVU^&PpIz17xFM)wcy1#cg(@4Qal!q1QQ`|bOodw|!sEw1raJAU{& z{%E{Canp~V2ci29ukWhgRQI3FYo!guMg0C>BYn~Q^_6cl|3t&@BS6Ma*Du@N;{J=> zhWB5H+8_V=qo*Gv=_qth@$r{--`D%!==ggKypz2Bfsaqo{xiOQe;m9Mynf)Tla&AY zAODzsRYUJ}{u*8XIE}cS;o}#OyntkOO-Y*Y(E5|y=VvsZMe~O}{ITb+XQ6uz$oOgB zQcyB`^2}+t{t?ypb^h^{4@W%ikRYx9V&S)wkAKAQfy(h)ef&W76F#qhjgB7|p?iss zzjgEXlDT=VthcLlJkNc8;BiEJ{xpi;W$0ev{dbLDAesNI`v;Bk?<#b!@&1!6YxVrY zZn*9J^&2Ly)iwwk^7-?N8!+r9Z+~E$y^`57b7+&8`Sav)tN~@mXzMr8@e@Y}ylS{( zgl7LO=)M9n)vPrwe&z)e5B%P&*iQK;>adEI_8R{-cn^8|rDXwrX8QS8ZkDe+KZxqw z0q-uaA2j2No~oMCCWFte)b4{Kj-5YFs+%NIp)^s+}4h#4euX*4Bj(7eq?(EKeNYP z{`#9|yCgjU?Ss2(|IFL@!|48df9NLT<8ME|*w1YA{3|X0;w8`oNVRZX$Gh zJo;NBzES?AfZYXo`^mvN3CwjDB}~_={z-Wx6;v_6q8pPQhYme;r5-l5OmM%NES^?mJsqxmB}?9KwDaZy5T^>g`|KXm;)19+L= zGW)@06blyga=90lU*D(B|*>=kHV}0KDA1zLZ(v)Ag&b{r9oP zzi9l8=8t^v`%6B4QY1-Wc>YD>C#r9B{*oWM1>U1y(yYhd*ZimUdh*8m@o&_BU%~D| zKt?CJeXj)Of9w8XqxDN+=oaDi1HZH;Fnj#{bk~nXVfQycHqH;mBrrQ}mU&va&@A~M zc1Q3JUe7-xS-$@mLg$Y_=zja2_+>tozm4Ur~M;MBWWH{rFiP9a9O&#L1SWSVHsq zOv$AIRCw>*nBsW`X ztg?()9Vt83GXczUU5lR?ygPjSoKmjjX0q<`&AOvT%UP%Bd{X5Sp{2^;wc_;yZnaHh zc6O2yc1Sp1ewdFk6db%=)2{+vRh}O>b%N4=-Aj&sJa?eHCI`b`vsvSd=3jdD3moY; z653id=r#qi`BOJjBC~zzkwr5DqvW|vVoLsFHGXyQzT@q8#k@{v-v6L*jzlkGx$o~# z9r|3un!LVrXNi*kL1{-^F68^~XQFwyok6p|7Irk^?GG5ZUmt&2X~5iAPK$qS@EQWC zUrIG++>V6iQ1=4#2zUP-ZLSV@b$R`$Nz3W@<)0r)`J(-AG=J5DZV;~@@#i|KZ~Xal zeefCp8UL+~{-XR(cl{z7KQ{f9*b{H#AOHM?@*5*=P5AiPM?a(Sk@LB+wYL<|%6PaVisSmI? zY`A_C^*OHh&uBk7)eqc=7n-{rMxz^Ux)I{B*#M zvp}YsOsOg-GY6z!u}vb|<)Uo-*X#E`b_8z}kg+o;>7m5tokupb%#hU~Ct&&hdjE9- zuN$u)Sp8BWbIprGGA!Q{BimuQ2RdoTug>5F^ZM2V(TU6fRlAVU85VNak7#pU!0XEE zyGCtFWd6|eV?_H8%|lj?zbK#S7qtz7hJ^1wFgkzi4#Ro?nf{CFpDVGs_RiEZA|A!c z^{AkVL_hx&wcqIZn?0dB49NItyZC)#^B>=bo}NE0R<6wI+k&+I?*-ma-hNxy@Wkdr z*V7g*vpmM|_g6x|>&@$1!?GtfyT5)g!}sqG8(lxKLU%B4zw@XyvDupL>G>6V&vVZ& zqy5weyg|JE(X~1x{^0fZQ1Axw`lh2T6KnTx#P2_<-xs`oJl|QrW@7V#loig;$aRwY z{bbsmqWNRA{_79j0ldB`Z-d0z^;hhM?0-N0d_8_L<3ja;z!Bl`Zxp{F2+a3<{DP(o zqR%Pe*Uz;7Mf=ZJ|EZqGZ|{$PM!$bC9Da}B{dYcFpV(~l{Ag;AsQ;;Ghq{rcyQT@J5V5I4z zHU3!WP6X0^QQ~VI(=my;=cF>L^<34DT#{U7l3B3K5jy02LpTA^u6Y0NF z+VN)`c;URht6TXbW;eqYYxw;BFz|lj^-1ZJNwn){@$-lJ`6GDad3{r^H+1|ux$Cdg z6Vdn^_5XjxhkG#F`}y0~`Nv3q5_X*7<1fulk<9$uX0Gf%ZmUdxXU*+E^h7OxBEUNW zWYXO9XotV~Tx7$c$CmAv^D{f7z>yk%GI&#XzO~D&B=%6`wtPvfm$_3%~dB{@V+G?{BVq;pF-8mc6pfI^fcOzh)kIe*&2} z*|$_qYEG1>%_hgVWAg8`!&S8F=il?eTfp-JCzMQTc4oU-V2))vcm7Sy5sjbG`RDJ@ z{o_6QuN8fI{n{vgqWaWcPZ;$46XnA^L{UF}EyRwMKt?BU#Ezuq86(@gY_jUS+z3oJ z*qRVpTm;@?o-ZX2Now}gi{aKElrL((QT&!bHwwt)k9Fd#q}u#rbp328c*}TxV49&x z&C1oE8W)Egm$4gW|9hYRE=R*Fczsu!2pYf7|N4LY_|g7fg&li%|1Hlf{@VTfl_^0* z=K9NO@YeAB==6K_{;R<9rTT;xMf2|qN^s-18h%jY)x8IcQcv8df&(Y@o0&hLfkM6rasdoPGv5tSD@ngoNYP#nC2H3q3$i&au zDx3emcK?vk`eze#H}mncI5PTw^6}dWyLa;TNBcGPH?OJU++DojF2m>lIl$WiWa2OF ztl@7qdj2NOzir@c=k@I|W&QuP`P0|)Kh`gH{U(~fM)yzbg5SH}6TitF{mq^@eg5;e z(eZa5{NB&^zx8y4zu9zmSM#!y=F2l^!l+2}-|rBOe;CV`+7ntl0NrRl{^a3me{KC` z^!ejK@c!ZXw!yP#|MAx!slKTFM)Thx=pF_#^#Z^6jp~2?`NKZGP?Cyh{dW|8pXU8{ zrG4s;?=SPu@1f)Q7{e+rx0lZjV-=62YWZL>8zW1T_Ce_2Hh%RbG1jU&4;dKt?CJ%CcnI=YP39M9+Wa``ffAs&91sz5?BwKpI!2 zeM{{$$+h?!%^z36yTRM`P|$)bsuMJ4{^FCW)tA@#io2 z$~U@y_!j)W&BxF3L)zs3Gwa8Ky=cT0tbJCC|2_Df9s``oKPk)I6lUp4gJw7V$t*;fd3rG=tm!Dp^u-OEMKam@gIWsjM|~si~h1fa_#tUbpP`s@E-I0fC-h8 zYwJI_ht{)b{)^5ZM)T(r=spE9{!8DOlWXIb-L4p+`7f%^=EeWz{KZ#({P@vsdI7&B zKL4D7llAx;&7Uv9e+6Xhbj5@v*RKD>Uw_ehqVY3Yf5bueEw68zHI??C@%sNYcyEAA zKL?y2O!=Sx`knDh?Ru~C*C_r8kT(h6lRq=#l<_}(?^A!nv`9*WyOT+6& zzq6t(gE?r?(e=I3FP5|9r-}-u+(Bq5BX|#i>^ynnWP0=Tm{kdKpV=sz z*)K4fS8DS|Ch+?5{0O;>$vmh>l0i|$|CTed{ERw3Gk9HqZ2oSTpT_Ly^Zhn+&Smlv zHULc*Y4&FUuO6>&m48odzB6uOUi<95a!z&ty23R3zW^@}&o>=dkkVZ8+PM+7dE4a6 zY+$mC)A(7z%ME1h&(c!k3rM#s?OPI>Q)-`I#vgyQ zo~Zq7_p!epCCX>JPq9t&UzBgOeir4gpbo2ncMZ|>^CE5q-xI&P=2YhK{-gUOJ9tcf zrSj;@(woq?`M@gxWc^$olhVBIMTHJmcb||mQ-T}IX!-Lcc=>sKQu268b7V-n7Mtr_ z@cH?dM)wbi#xH*UP-gMy1&F4u^$?WtkNyRk%qTrR_^-ca0QyJcWONYZZ;1%cj5w;Gg46mP1cLKpH z#`6Qmw4w3;{MSDpYyK;RxRvJPXX&>*mEq^tH2$LbYczh#K({Qf??|@l!~HL+PxH-V zx4wQBE^9WCc! z`O0J6X|V!$^!Gs+eaG3|sXlo9Nz{MHKvrM>R>BT5Z@)A4dMd-~SJZxbVn%qrEiUGN zXZ#xFk7)ce(SW(JG@-?+h+8c_e#Fu}wfSDZxX~%5p5f+iIv%QlR};wOPr$4SskQqr z;$Od_`qja!!SkiWrBiFizxe)BeNq2?o&Ttw$8PV(ztQ<;ZTMY>_doD&CH_XwpQ84N z`X4`jH2$J|re9Sm@s{6{65QBIsJlH z3wjU#{(;p0+Vj7S`mZ5$8v)rkT|a6(eyBU5@i)rf#?Woa>qlLc(rDjbkAMFGjdK(5 zTJZe9)UTA|hr#y;DgQh0ngZ!|#lMI@p3?ElKR=k(6ZPNd_}>h=&3XGBlb`70$0&ZH z`qW-ezj;6Y*}PENAf9%_KY#R9-za{q5x4ey{7A4ljp6;9)SforS%7rA>f_xn)0l0` z=Hy6FW*v9`9reF0cXzhn(~JXh<#Zs2w2^&?t@r7>HIe-~J2(Q5e%+Tm{eR?`=qe|&xZ7Bemt z3%sAdF0%e_*ZuDWzeD->MVktl%ux@Xb$#A^gFKb>-_n85VhDJ>d4AAODNNe=yV3O* z(fAq7e^%)B0W#yy{>Wr996!{4QGKRel}fzj`+EHPkqW99(4Np@KluGCAAf7&dTGtm z_tnf$x!ZoZJG+2fI9cQO2QTtH@k@~|tvPT)$lN?{F33Zvpc~t1`9A=>alF2L(I%5Q z!QhC2tyZ6t+1p1XqOTtZf;WigJ4&@PncwW#xarK$3*7T3s5zqj$4(!Tl!s9MVCW79 zGW{Giy0gjf`DK(p1iWFq{Xqp4{{P3`cYsBaY~i*UT?2?H=E2CC7IUV$%~{M@F|Jw6 z*&Q=x%vmvKMa7%|a~@1!0LF|7MqP8**E4-icQHjhn#Fsc-tW!F$C;k)zy5Phor+yu zEtawFU?0SNf6QpWjbZV^dv8Z|{9qqHSRd%MpR&uUx`_Jg#Ur1BOMLyq8$bR9c28pM z_x~8+nBe@i5pWYhQg-?cn(ip=Z1(x=`;?)~{vT-nc)(4FhyUJqM@hNv*WZ7O=l{uI z_Y~HCiCIZhFhhvv08uWjemCB#|1tw`vq4h&d%O)t|A!O$_NO4YtNb$oH;cs!i%k6b1NGNyKV_E;O?>&M z?6Oje)_>N|9MIbjB*o+3_KhQV|9ZSmul|s{LMmwUmviC7ymff^8b4kASl7=Wzh3+4;v?HGqWyaD$fw{EU;om>SK(j0|2(Ps+vgwJzX$w&pY^|Z z`*&yQW6u ze#);_Y7zPM;*n3mCBFXVJ->Js?7jk$($lhR9+n^e`%lgR?lS8?k7aW-|G{Z6TYG-$ zJe;@$lH&J?9H-U4y!qz~fV;@z1BMJm{eS)PZy$gE?f9Yc#Y!zEmcI@HY_h3}4~2ZY z$L60$zV~wbVSHMtVa`ZWkj5Le_a9yZ++C1VIk9AZnOTY)IDPh`H&NXCN7n&&gT;HF zI*jp?^!=xJ{l}ZYdj}-tXT#I5%N%U#D4xFvHmNI0Bgp14Hhx~9s%zwkkn-!8+JRZ>!*12 z-($eNWcBwMJjz+}t$88n`i|S&{X3rk?gh*5)$dQ|1nZBdfQx4Fj%RB-tK%R0_80Bc z8-Kj`c?P`CS$^Sxm$Rh!`PZ+1{!{fw4EXIe>p#Ezr<^52`Q`f$R@+0$VZhpCeGw01 z0cQb8m49z>zZ`$o*SF-oL+snH#OA+!{2;&H_@VT&LdC@5|3H9M8f%Mq_!jK`oAsZ6 zn*v$X{X>c&z$R;{c)j}b`rq$>_dV->#|kB~NT${8D!14i#eILPUj7Vm^e>|7{{eWv zv-}?4J7-bKpYb}g|0d@DN5FjpiN9Ovu5`?zwjcKGA71wfaGzPcaZBAS-1#@e>$RU( z{=NY3SC-#D)=Sf$SAXf{M}3uSNc{LMsqvpwynXps?9jjdGK^lp7ZxZYJ{csO2PEYu z3bT-oCOM*NN)#3$nu82ipTfzmZSIRPiYR=gjh(vt@OWT8~@i(|Yw??)+OSz-46lg90+R zNVD5*OZAo+`grvJd?gF_{u$!a0q!>zFL;GO{Uz^z&MW_V?WgRrQj5s{-@+%g z{p96eCh(ghNXkybNoN=C`YDV*z4r6?oq#tp%kR<1#YIy5{PXtzvVh($Akik7O%K~nJ(P^Jq%evm&q;Bv5d zpL1@-265-2#ZT|{h|1U2n=EM5m^hd4il8`=# zB>Q}kB&XZol>Tb_X8_!vASpiuZT{O;T2ilwl={(e(v7ab{1&SAy8*5c%WrOzBCE8d z^Se$y53iFGRKkK~w2IFMxPmOdpW6c$$$#;uz{64VNEkZYD$TuBe15a`8<?TW#I-39N>mR(XB;d-h{C=~tXHD?=*HVBh&GHMi za%EM^ul@K9`Sq4xDqpP;pyt0`Jn~t=|EB$*t6xDdh_+!&*4 zYO(oenEHD*$=GL{{0h|-q>geq{MYVZ)&N{h7VpU)KX%6OdH=2c%q_O`Sim zuYZugKH$7qexD8Vv#IU3{rC&<4FK1W#RrWXpG|E);WW4{m)d{QTmE_d$3~EFW0v2v zX97R|F#q)OqrD0)@#7yVU#v-pN;>-6FZ=d8v3Oql)eQXB93-Wux!m1s>i#VSkkBTp ziFl~jf4upR7Qow<%|D+Vja(&#Cz9F!6Zu;Lt_`cdSIh6&65Kzi72sO4cyml_HsJqx z=U?>tpO^pbz;18W{-B(FT-E)v?AIS-d1w!~P9X7jIe*OFZCts}&tU#_09;3w-|uKu z%>Q5C|6m@No%s0=disFg|6gzZ+pj-I|91t&x`Cwf&$#57EBE;uyiPAaul#oh-X0*S z`p5Bhs4KVsfcop@M|~CCkE_3Xg5CpI|CuwCkmrxOU28l~8bvnH6}bB>5%uo{xZbS& zL1{j_s^dR51X!hf{{rpNYkzJUFH{xrun+L|XY~(?$tCM=`>@YXA-*r*`o*LFp^S+C z^~*06msZn7v|q3PC(-$Dn5p6ig5UPD{`V&H^Gf%;eiwt^hLKgY0+vZ?{tp7&8rJ{b zMgGbytvHv(V?~-MG7kgBs<>gKiXRL(f0o}Qw#hAJ{j}v;{(JXG0~#MRM8yvQ++-GS z{AX7VsYL9Isz*LXkr(JNtMu+C;^9!h89`EJdS!CTA=w^ZH{Bu?5MYzq{nDc;ZUl?>N;@9n*L;&0;_!cBen9_?1>SKizyFTpITEaY^x98{ z@4uOUqKogp+5eZ z=IyrmWhArzF2>_Dz%2razsvfGPt)X*@--a3=Hk03(gGE>O0k7n|4s+oT$bM)QZ%Pz zTfUa#HdB9Max(zu$MSm=Et@mJ_2V-EH;3gnw0f3>q>vNUHvN@kyvUIKnw%KFdzZGSGc{>@MG zQ|~X<%Wpsa#^ja(?{bh-`(bRpHkWiI)y6lCDufaH`&Wq9%g-x6D}Z-3%P)}7T#|3y z4515JA7%D`MgEn5TLlv1%6dNLd@k-digsm z#L9oMwTOpn!Ec*b|2ZaakVl%G;zQGRgTqNJ1X!g}o4;NMxQ!qwKl!^I&CT6^4wG9C zxD717cg(fi>isMG{sa0`ul>CKlU_XXDS9V9|D4fan=CEj;byRVM?C&(@0&-eb>g4h z#;lRd{tbxV0=Vt0|HMLr@~G_}Z~gREz-?psy)w4TBPl#)V()+C*XzHe*1t)`^V-jy zVE10ue}4DN#(2`}KVJWJH}LLZ_4n#`JCE9a zz-h1|@$-kMuaZFG(%OA>cg>lDf?|1rQ_VeL1KIO!%;SR`%ncpXXlqrZbO;^P$6RQc}y0 zUj4Jj!B-UV@DlJ|21&)QY^``=yz+-;WM|Ly5~ zlKk*uju+K05FeUfXfNX7b-;zQ{Fb>_@~QiumOy|_)>ieu0k|-h-*6#wKDGZ;C=R~5 zh=(@;cZ=mWZ7iKH!S}!G&AsG{Qx9Y&zTm~Dxi*Ec>VAH zmj1l)_ao5zG3$Tti^DK}e*OEuyzyH!*!_adKc6LK3raz`Cp@XQYaJ<#0c(}=`?v7$ z8Q`9?c)z)Y3rZ&2{M`X&{tn|&Z~pW8pL+4gr|6yd{$n0A*e132*X!jEiP1DLy!jee;v_!U|(NlmQWiD;D-Yq zf0xtu@ILlg6z-&YdUVuKvXy!QbMtrHS6L8V1AYZm@D#szctwG>WlmgVIb75^6S0^l_kLA)O>zbDqX=iT2A zCDMMShBt0|DB{uIfd2<1g%8LRI!+Age%(A?Tt<@99biZ8{kQJ`_Z{`Xgl#gj=$-M} z+)@FHNirJm;H&b#2iymcl>g*?3LA>TU}@0fs>jFzI$dKI)qcJ4W2Etdx61z!c)x+9 z)HJ?ut1a%VeScJzol)HT_n!dw86@RDW0qAT#q?q8e5$59OYFyAc%5GTA$!3JgR1`* z;Qh+-n=Uzyf$M(#`rF=r;0WFG|NZE|>N!#MpI-lCekr_K{h16hCM8?`{6ZeeJjTz( zrD^F%+hwS+Jou^qQ02$x5>v2vf1j|4Vo;9`$^U3EnVitzf?(G6@6@aRaT+i0|A~is z@jUzW;+HQ)M)~%AY0duBVE1y6+EvzXnZ=;Zi!RU2wwR=EL!GI9OT?ozfLq4;&*IxG zO7wB*KVVMyW)kX-2)X(0c}m4Q0B$Kry8Ks7ms~8?>B26L3MWZlx&sluS*?H40Mt>YxCXzhT%$FUYy?;18;M`b#FW2xrV!5nqQ}$|bo9w3Xh8`+^ z2Eb)u`TauPFBHGlZa=H5OB9i4yy&IkGXgFX%kN#`(p+(wRsC8wx$9^2#vhfhvL+5H zza#KEv;2ZkV?JDWoY_A{PQ>(!r%D=V*PBbWc_#Ur1B z)9Nq1c>Cuck>3UE&dSDghkc;%^6(egXPll=Z2-uNpU@VbJe{N$Z!(`Io|kMf^K zrBC|)L%jAUJMiXW`32#{7SUY4;qnf-&T->62jFsor1Hsl!*Q#q`1$8;zjK4$d074Z zLW=GYdFuzz&ZNd)Uf?x=r1D>!UT`<~kH7v|FF)$5{O5}A73I#a z+ylNr?B@@VN3Z|1(U+CkQRUZ*M?OXG#QVRw0)+o9RDO4`yEyAVOX%W5BECP2_x#20 zfGfh{1M&GJr@O=2HE z$X^O@Wm$fYG24%*@slMEzqWq7G~mjx{9Yq`jzIqN_rKQbf4ciAQ13s|i>Kn!Y6E-9uzk2b!^*a^8@0Hm6vwZXm5hpB57dqu?6tRzA%zwT7^zcCtawXb- zy!@*Ide>z27mV-Dist2m@@&d-ob;s|fPjT+{8t5B4UlM;oX5tyN6v`mt7Y%*H!mcs z=nSyTRQ2}+9Epctm~l#+=fAO9;Qi~QjGUnMsi*Sm_22IrSk|nDh=(HZO051t-v^x$ z1FM_QlyW~!?C;;BoqG9s_phn}Z*|swukdPTK+j*l{_aiZzt;@a|FyvGuB`tBuQ%7l zLAC)@D7k_Tw`QCf=d}c(HsD&a{xb&VG>Pdd7g{sX5=Ew4arhBCtMO9@a7|c#(>- z{KaUzP)o$a=D^#6<@fhCT@?@79$<@P`u~X6%TL9%6)Gkc&x@Z{ptm#u>GzkdJIzWujlqx`Qk*xiNopU;NF z*A@GXQQY}Mz4>Qfe!H}3CDUFO$i|4q^1Ov#5MOp)X! zW|&p__g3+G_0LY@1#SIaAK*8#{twFd&u!5#wbZ4K8Sjy!G~TG)Kk5s((I6@P&CO=t zR{LM$;@~@}`u79eAeP_DVc;$C+(2swE{eN;v_Iemuz0@-HE)Rq8GUwOAhUlA>Z#X% zyyvHUfOjBBOjkD7qe0VK-1&QShhBavT^Xv?zk2a>y(}jnBL85}dkCw)e?UYS`2Qy3 zKg8?h=hYuWfp-{4N>AgLLgA|ac;jci{Ji#mIPi{O?Kcf|)8f~D{s8ksFFzy?ZZoL< z9|6A0{%2hpFE$nN za2)Xd1rqZ`KJUM!(;e>oGvf8;AC;~QO?>&|jeo|2-qTtAy_USWC-yL|dNrwG1o1?L zZL+b5hZ6ud4I~vm9!IC$6)g>#gqKWvnLB?t5pcdNe?aPPGJal~6ju)3;?6%!0^DR4 zZ)v^%&JUaa;Pqdo0Pj?mKOpAi9q`l7d;dmn{89O8&3dp)|NJNK{^Jbrn;%Gu$Fb$1 z2(eE1w$dvlYW>UWzb^*8m$3Sq795NeZOg}(MG^b{ z3+kiSe>{G@_@u^PZCZg`3q=ekz5LyCAwrhjk0u&l*+at{bDvZ3E5Yx>z`;~GHME~o zTny?QE=}^?MUqh)KpBNgDt;B<-2hL;pXDuiEk1d4d~+-L`I~R_0Q~bNwfw9G{5_DE zud=p5fjy$d*8S@gu6*$fIYkG6?>d#=A8;2zQv7171CN#X-xNg*RKkKVNabGxxC<=5 zWAcTM#m{A{=bSPsg1i1|E#UUC{C?y1-WO9kZO-}nQWRMt8>D@@iuipU-~w2FV@|jG zVq~?NUuSK*$L)Wt2iyi0FQ#s67MHy?y?eAEocsP|z41r8UtaZ~>c0_qcY&n*@6mOy zS?n^mlx0YtNapzu%#KZf+sW#0@jqY|AJ`T!+~Kaj-3+)bEIw#y4>RbQ^ylv>yR2EK z+P@WecYvg>^Xfhc`T6~yZGhX(>L1X19O8fd`$v>t;`mQ*{3W&i1@~IH<&QzM3Hje{ zI1$MD-w-kNzUcpkbiCPTJIRj#tEBdi*#o$}ASpX7p^fiz$3GbV|1JBGPcb9$fMK8ft3++I{tl^v_*hb8nySA9RS=x7H>Xjejr*e7lcd9{1e)v z*MGeEw?n{t7$lW{rj)-uRM$V+um4c=(%=8*#qSZ|JW!yHB(BduJ^9NQ}ulx7?n6QKSe0Y_g`>{s#l@6iAFK`7)o|j*ry) zN3L=36+}D?0o+LzFO+%q5U%@q=a2N3AKv<94N554~5^Q7DEuPyquT8eQhX{@{ZM=2XsQi(Dk7e!mxajj-tn?{z_0q>C@`g6R zZ>n1VL;)@aB*pJnzSeWmtIQ0yBA0iOk~H3TyvlC|++&vCIL1F(Gz4xt?p)w1`OBs_ z{0r)&^4|yC0~YT+Y-Y4P|M4+f|A%_&&A$$D@U28Vdab@pn0Wzp_o9 ziMaoi{roHPM+5E|i#IPaJmZ!>wm{6AILvp7ct1!YM;cvKZJMx?kn(qWAo4GI{KyPdm&@9#dlATq^{qv;8dGT=?g@*7$V zc$J|4k^?RUi?^71z51UiKfLj4YOp&EYrkVy^%yaA{!!n1ox4XyV@6nIP)89D?XvG5 zUj9`^fK?hBig@S%ylFvFaq3ZdO{{XA`5v=>7UK2t^Wrxh@MdD|H~GDe6|V`A$f5riCIcTSMhb>@J< z7PbFpUw>l!>8*dTnY5D29bnNW^q*e*9(n@#+#(V2`M~dgfTaEO;?f)OYmu<>&L<*BMJh0abK3kxe!!Jr^UouD znm6+NOC7IfZWp-EPZj{&?<~J@=eyU6p7Qv?fC}5B*8eOBICqxc(xBsO(XioetCq2Q zNRBx8N+KQ>0$gDhAM~m*@C$7Gp`Y~nKdJG9e2U(Qk6+&WLlLmMI7o`e(yHK_1lL~` z1za%}Z-{u0{`>Xo&!m=L-u)*J@LN@oR525S4S$RCq%KFEt+`85Q6~g@0au0f zf6!K!zeV%+j*UmAx*XsOC_40*Zx%i-pVY$ z*y`F_?)?)~ry}4gfu#Irs(j}y_xVY@PH+Atwf>^~YE?ba{-c|(e{=tHIXcWLy}PRX zp5V9otpCIVuJ6Tj_3nk#-V;U2pu?iy&W7VXHI_5b;niKX3g(Bj6p%^7}PS z@mcI9-~DusjUoX^Xp=qE`)7>-*Apb=CxichPhyY!nM+?B6-5@(cz{t*QJDzRn#K#-`m-j0>&Wt(J9YgizIWSE?0d~9QkTZd&p)A_O##;dB;|kO zBJx2Tl4)D52V-w@_b+M&xYi&sU71eYk^Y0|eRK8Z+Iyq8?>}h{xK=E`U$e3AMMZ7? z{)a69*OJ8>@{M}W?Z2X)dgCXl?GN%P_9VXlZohs)NkAfW^Utxx>QAEkRhJjLie4sF6=LPTQCmN!H~vb{c%in4 zhkbx|2%G>j1 z`MZp7yK%>(N1nwTHN5wD2MM(q1-Q}i;I~-u-VH{M=~kA+&<_yA98mj@dhLHj<6j+6 z?bnN^?2=VaeEsS9Q7ZwK;54fJhwje|9J5`9&i&tV!E=Ef)3~V0($=X<(KlSY?_1W zf4%WT`Blbi^`BmRM#`~**+=D{3VyEw3v?(w&7*Eq5j~1Gci-r^m)sm}rBy!SyGRkg z`vN`_;3+-*Ld^!LSca=>?=L?|#EOWJrT-nu( zzKW*33x~IE%a#6&n}75NyVtP(^O5IPq*1=*k7jNgLFS>sRw;H7t-|`ztG}Ca zx$<9r{s|A)0`Df)|K3G93exl@$BsG3&;JiZfK`g^MLb*wxQ(p-0Xb?5l6CiDmqJ$v z-Tf7){Xf?OZUf6NEPe2gI{xC#f9bV9srPSr^^acueCRNnlvMw12D^{2_8WFqN+y+R zFlX1|y*Efr8ZS0c+utpK+Ygc|f9Af)l1UxwoId}$Xaslv->rb##o|phHVM)m&oc5B zzSl@DnqR1*@^1s&PLNdlWr^+~ND7QUf4d!UJ6OEWmF{x<|Bt-?fwz7;0PNn!+V4Lx zP>}HbJ-qgJH{b$6Qu*)gvxo0L%+5W4+sopE9&W|_`~Twy-u=G=;J1SysrV17k|UYK zyMK!Lq__Uy@gD--!z{mF*zd`p{QbQ7cNFwK1`_=u$EV5j8tR|)=MU`bFO2`=zCg{2hI*AW}tUoN>v+Q-4SQt_t& zcL^j_{w%o{C6{KuTeI7<%nfG!1?qVQa2HvAao*>&-v=`#;F97tf17y?9>xr5DfZe_aN@ znOOguDt}2X@t&VX`>z1*D(inSlyv3B{{qOAa5Bc@lPsOzrDkc`syMK5M z?7q(W&*NR06cX-VR{#lZvYLp8diCdxKW_kU7|S2cuBD|LpZotp95uz$TlBcz6dAj$-}im1{{#sbk-x zui90+MTQ{2COfG3yMT)XN!cl8bWSNLFt+{1S{$npn;%K6WGe+%OE`j3hWD^x`MBjA0^>hD-CJmn7?|MA+dC&2rZ zwcq28%&+MA^Y)+h`kz<-KL@+tvi`U1i%lhcC5H4hI$t6LGt4TDjn(?|1>oMW{xfbE znF{=OoV)+oOTfKm`MvfTQ%Uy@OnOOA6f`FW zaIx|5XDysc!uPM(_g}D_>Ggk7+kfO!^iF*J!&^V1SASml)r)sVhudUn5fA?czrSPi z&$RS;Ds}!Nsrn~%{+BoZ_yP3xg$pP@d7NA1ED2F_|7u}8Oy-wCi{;`|_kvn}J_3Fs z;Hi8z`?PYF#P;2M(>2*edeRf9WwiAJp8#KuODE;3U%vSJkaOf59l(BDRQ}I^ zFU#_K884=jTz_8_eD{yNqz|08S#fKwjMPO98woS$>}pY0^me{yg6JO)o#{tGF@o^&hYNrv|;#fTZGA zs8%?QgzLZHG~{9d5wlaT{wWb)la7hT^Zb_<6idhIZ}~PP%@6B8^X3nJ1K#u?seCez z3&C|ZKX3mjBj}xp)!*l0BL@lhAF+Ra2JO_F|Ge?5Bk;O_q~gz`WH$%3{Ls}m{r*`e zz-4Cj_fOf%L2WX)8B)T=+*tAw#u{+xj~3#-4$sROPv`+4(Uul-QXLn+Rumfvh( zw}G|aa{iNpw7&IkKAGR&W%f@;f4TxLFG&1dCJIXa+CfVB@bJc|p}~Z=|5|py`EE|JeHToWPrh<#!yuAM^hbv;G_$DdYlNZWiy+do$vH{rKV4-+JTE zzW;&#a|6E>WBn&yS(H|K&}Y_Ucj*qPi~y^o_MgcIxS}Ab`14<}Dy?Lj{&^q89e?Eq zoI8s*Sh}Z`mPLOYS*F%aV&DHqo&ta?%;LpHY12x)_m7}C1p!wm9{kkQX@A)KK~mdq zv{%tvt3UPTKd=4$9qcXwl4?K9kLstD6uzXtKOm{?M^f=%9%Q@L|0)hA%CPnuj@3@5 z_J4TocL~6i21(_UX+-OEivRvE``7&eI1d(Y$X+C!#M{3PdGzK#ul*?ryro!v|ElHE zapND$k6wP%_us~EQp*n&*H#roMGyV!pLp|MdhKsU-vDT^QsplXe)nSiZ*VV?Neajw z+-*+gDAIv8AbNs|uK>9EAgRlOT<2tvwqM(GDf&n__xaI^fUC#yTikkPkZ$c*Kfe}< zBpuOVR%z7kpH>1~^?2~rdZw2OJ^tRq|M3k{m&Q}ik5&epCrC*!xC&r`R{QFPEA1+K3S^dqX66q!0`!^D+zy1AZ^q&O0 z)mVO?c4gA5;|F{HAzrWlP+tX?`1Xr8{;mOf*91w$k9c}udP(7nBnDL2CPfhs_3F=? zf2{?)byY z{sf+XZwa_Itp1M6Nu~tHAFTk_n#Fq+EtN@9?ELk|ue|!R9oXHTwcp$`wCx{xu$*;rP?fzw5Q1*M9T_yL++z_ut;mNfPeme;gXPpA@D2XVl*Rq?bQ0jTeZB zhrNLp@9$Cm7q=59wf*DGKkMbE(zQ~n{Ce@ACaA5A|NFs-{vauyfXQ^xxMd@#t5*=AnpC-K7bnwlCD2ytj?^i zzbQ%Mjdj%WI}mWgSiE0u~ku9_2aIJrz7nFrB?a%`j0pMp9FeO zX7v}lbeGr9xYrmrxr7(-ryDT;6KegZm%j&%?{Pxae+uwU1xb}3Q_CIBk|FK2$do=o zq>|NY_0v$quX_2D8h^a~SEqsA?^*o=>VC~58SYk#KKJ)EQk1@d(9&Pke>&i9f~4|U zj6RY>ns>YDIgc|DWHvp3^_i*qe+J-=viznc?_4FJ+^&j!d)y(fse}dJsVe_Wz%6C* zUgKuDNNX#&Rh_;qiqxbsM(`S<;%5PF9*g%DE@qK>M-H4m`_VPh4KvIp+o<^2fSU`F zQqyaQkVP__9VkD77s#w%#N_4x&MzK*pLcTn+CGijijmsKOtrk4Cq zFTVi+HYtjDI3Mg@!1~YJ{6ZG#VAiy~i`2Nw?Ej5;z5G1;7Xt4h*8f3o2fIkVV?Puf zH1!ZEgoHL(U5#J8{B-ppQ2pn{z`KOyw|p5P^Z(@a?=sMPIY=r_%pd2tNaoxx+l}iM zMefu7GxQblP_O?QAiyS@srVJZyM^_i$AXI4q!r8jTVKc$!QB7AT1J*&T$@Q;gh z>Vc5AYP(QU0|7RvJ^!!@aO+rpVb|X-YX94Q{u0aYYQU|HhyV0GmjvgJ`~kOy#S3?K zxp42_A-`V#C$;@SKE;iR??2Pck3hZuL9hNi{08vbX4ZcJRhnj%yyp$v?r|@W{6Xix zv9^eZ8v(ZoBxR@hXt%7~=a29@z53hN|H!WwPnAn6R7@ilg1mD~EIn#vynxQi^m$JLG5rO#*Ir*ztUm%D!NB;d}l{9f(F z?A-frsLm^8-U}=~i^AIkWbJ zla&atO8>5E{TT+h2Oz2V@#z?lQ>v5mw*2y<%iQO;!vS}nF4e-L$df#wTfVs_|>z z|3m%t#xJk@=*1(S;)cYJU+vegqdTL(ZZqpYL#F;Y)&3)#23P?R@p|=7YW-*L|HSh1 z{QnRPd&1gpN|QR5tJ`9r;Up$E3gQA%GN64ese@TsB`u4-Wd4A1){to>Y19rb<{pXnNQ66>vr#J$v z(pXEaKVt!BVe#UjjxwIJ{yDM!TmP@PI;95x0;v;@BJlu^Dn9X=k=fd z2EE_0`aAx$HIJmY{pam}d;q-#SRhCF->ZA0ypo@#lK;&2yU9wr01TO@#?ME`_Z|NFP7Wsm}^TX(QMo#gc!RJwB3CBFRt z^&s1|{zEc|yNn=do=>L?Qn}#y4h@dqCi5|1tkS!SXcg8^a=@ixhCywfI;%Tc<6b*l_5#K zf5=D{g5UD9{`3B{J)g8+DBL+}Y$WlZ3YH)YR_i|}z~uu; zUFJV-Sw40B*)k-wN>LlXW(Hg~7H@XH>LxkFxcC^pTqR9uyivRV;|#d0AgMSr`F=4- z7WejZLf&oW-ap9#I2RT#%=?7(2Yden?bPdk-u$s%Jn|`SNPPWmp#3L^A|ASe-Pu|D zJqiW8NgjEMHUIN?I4Obvo2;qg_3F=?|H%QoxmkYE^|hPSchkeX?U$Tl){mk(IRTdo zB;_YDGJQVo`UkvDul~I8r(Qf2msZtP|K$O_^RoK;Oze@5yMI_>_2=FHH2|+0NJ`Iu z{@wEZ^!*RL{;y;8y83A<;@1LTcWKuCps=I#PTqKYi!4HbRR(GAPb~QZIi}%P+6|B$dAe*!>6Ve=&2u0+M^>1|9nU6+rT!!)?-2%|E^T zy#AjD@Rnrx4MTq~pw8d^ziz*H{b#-Q^X5;>fZY{Y`z`Bp7LrCh8{1{vm{Wv){gq&B zp!&Zo;L5RhkA5WzO2W6E#`3L>FzZLK{OQ%7w|=EO@Kyjxl^@6Vr3y-Q3Jy)a%;6$; z{#-9VJ$(H)^Iuux#BVtf4=aJ*m0ACJk1ke7Qm*@X=U=LV-nCf&JESpnmIS}P`}R1N zCkv~g#d71n!KB8IC*W{^k8vSi?U8D+izJAJnw$+OLFQ3-<9ZFRH~;oj(fEZnS42D# zfnNei^9L`L`BN?%kUOM1G1C>Oaj}Zm%TJ{%Q)~U#YQS3^Bo${qT|3GB?;9tlO+DX& zMA7_X7OVc#%U_?y7h9<6Ujuk+f~3lip=3ol{_47Y&pvhrS%40+N@Ew%Dy$#9{5<>h z;(7BYwL$MXtp5V0KmLAhx8kCg;p~I1&y}8ISP~*Hys{T!Zw;9WCT4v?bu>9uw6RJvrVd|_LmTY7e#V^YI=uf@;l}n?>a`mzDysCdo z;BCe72lcV?`$y!dce6NYnoq+EzXz*$z5J-Jl8To9dhtytexrNh`ON~QK}N0ov<175 zflQ&98I|06>vRRes8b2h1B(Lu5tJ)h%`yYUtre1VVvsK|37vAq95qppVi;Xcd)zkqu$@kTmLiw zczsy@fUaZQ)%62OjX(6a5_gGjKj`XL_!rOL*sp)U_#X^*PX|er6Z1R2Vv_5`d!27xPCEDdyqQwEe!)<^s5*adKmUT) z838vDBo%+gL34{Fxc}UEz)fKBLbVA+{%7JZBRbqBi>dzC8$al8C7Hy>KX3kTD)`-( z^}l7YxhS{)g68PepNb1BR7@;BsqGJM{niYydnQQA&mL`4mr(DYl|zMXGV%NO@#>#h zz&kr0|IfNnJi+Hr{#*X%_5b`p@3|o3xJe$r7?0Kce72D z9`Md*{b!!Fse~kq&e|#akP)O2oq&0WT7T;0uTSFxH2oIdV|&nm69-vc0|rSAnF=G`VakDb)zSQ{--$;3W4yc;hd<`l|}t?C??#_2P5daQLsXieCeE zA7=e;$oqE{S6uJRFV$5cwBG0>nM4F0IT%w zC*q-A|MB`iJArpM%kMZlQ&q|1Ma=aUg*TE1NNAN}Ul9*?0WJU}VhJ zrBPJlU$6f5>klwFy?A>1l)itw2lU>{>Tl?CUy{T?Kk2BjkOU*4RT_FGTK{1*-q=CJ z!$9EO$MXA?eJM$P=5)8SE!axxBfu(ywDm)J?WgiZPC)Db?+4yPAgTH%;B<>>l6RQ# zX{CnCne{)Y&H=z3Wbr;N>s3?dKhqLXdue`ejsFzjPJ^V}Z6yR$`>oO%C8rXe2U&$ z{$B*WFM*_Z9JhU`E{#~0=j_hrhloQ11!?=A{CcA6zl_uZQe%p1s{WUO*94N%({O%k zEy=j^(LcXA`VijpKUV;EmDS(BORCzEamT9M$;*c>f z6)eGLwu)ca^_Vq1L0B+kL6@1Shjs2dwEN%%J+t@BRbQCApl6<`3z{x)ub-@8=x_Ct z)lWWkLC=oUsyWIKuN_kwAE?lRY^l+|h>EIId^mtj)# zdgR-S50Sk;#S(=?i<^lrHXJ%ur5>5QXs*deK0mDbgspBBtB`}cF5DgQHI|eu>OZq^ zji%)Ju8J=s`1>{XcL^)R*%N{zpT?emx@@@As(N=ll4G3B_wYv*rITNyrWxJmWI>orb(n1Pn3mi51 zdNShS@_hF}^}L3+zy3<NJ{U`~*gosYiR0E!3~?Kn@nz{!E6DJf ztG)Z@i6vX=OKIjD4kR;fWy`y>=PNRJb8AzsA{)ubp`S~2Tp2?OO+9!ai^m-DF!#;v zWMV9FvVC@w$O!8P1F#ov(ppxw#TC$C{1eq#$`YpUWXEYk9)P&Ki1A?sl3~{^6tH4m0atF zPkW`dBj~TVDIgAI+_PHxm=EF5UPTaVtJPu1ebw)n4@wGJdRT50iR}&Y;B_eRca-=$ zNMFqx<3}uw~t4@J$Ocu7IMF?^yX=c{p8fG1IenF#qy!qKhw2jms7sG zNzA=NgP&e`MF!Ts=QRA(Wl|ur)BW zPpEfXJMakgMv1?pw2&ybh(N4^*g zO~2*8mmrTa`X#pftO~9FZg9vb(xIn|>*xz|`&oU~)0C;3k&YE-ej6kAZ}V(eyk|_b z9|^10C&$qda(nvbjZf>q8Khj9DyvG&jU{f;gV%J)(T%vy?6~sr3${Ed?bk9gRgSJc z?ila?x%O#UnO@h{*WF9{-QLsv;-XhSyua5Y+8B|i&lWQ3b>Ym7dc~0HwgPm3gnMrth6gzK=b$rR$(r zGRD@CyG23 zRPvY>OHvK~t4q3Nn~2FFyiKPmG2~_a8_#AN*AnSS7pD(lF~q^#p?~fMlZer`*7U18 zW67n?83!*pxt%=Bes#o|(lKPTZDZv1TYq56 zio|qL#yx9oPd0DtTEb~nASpVd^qs1GS$_=hsOkA4^VhiqAomu_M=OtqJl6^+c)hp(b(l)Xv9WJ`jc11p!aOADlPDc|>eim3r~C znhvHLe}B{7AE(f{Dvo4Q(nh- z(D?7POgA)k_%c#=N2^Iz_I9wp@oXV`YG4>gZdv_Dt@HZ6uqvzFrDKeoR z@wcBEpK=}g1tq3}*P;CJ{XzTw2kMO)DCPRLI`53X<8|?ue@)-`?Z;H`I+TKt`-UX{ zjU}zeoNhJdbS$ZS=V;@B=L5*0ZVtCXpJ02Y;p0zVOHa8H{fhF(;gyu^`Ly(BKKeZM zOV*>L|2kogVeCtYll$cICF|!N#4E}NYQ2x`fW7`d+TW;YTs!#o#Jx@sW}NP_yLGYs zr17Tf&xTZbMY7avBL4-F4q-#(Kl%QKWmL{@YXZo(HGb`bUc4d$=Es!UIOZ6cSA1>7 zK3+J#s`cNl79aTh!@UqPGq7u_kUB45T&&gKa_3&25kEsV$+O`N2RtXPQ##9k2T9ed zZ>wB=i}fp7h2x!@YP)5xKVBL4cfS2r)=}5*5}O)XalS#j-a2Z0T=oWOV*B!#sjn0s zj6;+fUWsQ-U!`AT-(DjQC0c>$pv2!%;_oO0!PWNhCH||eA9;Sj_Sp#%>qkBw&nVKu ziC>LRxeoOSrQPSqM8_1<&Xpl{+e`8aw&XUFJm?>wtU{jvFme7xyXlSWxTzV>Y2 z^?Igz^6{s%xgYLp=|o(gdes{$ABVMGJ^XIVWMrb-y!D6WV`NsOh4kNZVdvezGGuF^ z>D_vL!}EN75r^qixZ7m)yRWgHJH6ATFvpXA!>gHk4aoV<(_Gx`{7v<|mVWf+YodFb zx1R0B?P_>iKA$pYGN0-JB}v3Tb3dF{^+7hop%jGC#r`;*X76jywL>jSt@aNqvv)?I z=R413(TgTn`8t}XreE0kh3AO3y;nVwk1K4ew0lW~RK%t7%G}%Jg;YhPtYtjvcgE7C%$?Q7<^_4sqo z?XfMS$Le{_zMXSNRo!>|j%W4G8~oqM=ObK3jo3W+h3Ay1t!7&7u}=@vjr%(uS%_(A z_jA`T3#4~sz`3I;UgOIZluZ8n>iPBTUtiD4=bdgj-k2QbN=9}HtzJ<+PPsDlroca-vy#}1ob4!6AV++D~q@11zk z&s=cD$Eg#)d!EZ^`52;}*YJZpH$6Mr>Tl0I#in?L$>-~5JMm|uYK|mL$jnz`)$36U z#G#b?FY8OTFP%Hu^UAtQ51z``k9-l+#qjo%XTC}&vR~rj?dv!D^tIy_B{Pov)X$mB zE?>s4o0^`+pEu(D((DB@kb+B=_L(7{Pt)7G*UYO$$){cw(^OaesimiU)9^V<6-b`C zUMe!+!_%;>GTt!1@|2YsK6y@id+O0;`S^0WDbwl%WFpbGBRt2e{QUIr4DytYzWlNC zemCMa*u3&MvaU{rNmo2Gp(MJcUF{cQWqX6icRdPyKh3sgp?WCx0A#up^cz^AAB}&9O=E zGv9eZhP!4NI%wo>@_I~%-JzyeWbq>F=M2nSJcoYK258Up&X3vKZ*PxgZ$;a{I~w|N zm(+e3_H+K*{aG9bEB$L6U)$@i*%x(m*@%{9){;`qhb=jLFNXYS+VimD!b#+KnSrj` zWPc+P^T~d`KdIvrOgAnM9$DZ%ul;m1L~O&-~L-|`|Q~Fge+`Y z@AnN0u5rqPHl9)P_YjPCuz#+_2U-%BSJOYC^IcvA7oMYc@xN( za?Lyr$oS90U#>fH%%2!51lKI^cMS0wKcQdEev8Qa7xQl{Y!FK}{IR!`+cqPSN|zno z>{u*O#;ZHX@driazZj?|X285A8z0L3hhxNcd$kezgKuyA_dgLAWLM9aIQfBIL>`p# z4iC2V0@ul~E`{Yk?9cMAFL?cJ_JQMTkl!XAS{L;>mSpQWK5NhMQ;7HH4V^yA^(7(| zi99Idp0&;=t9$o9LZmfl+RlGxN3_JG*ba=uFvntzPT!=`V4USEG4>unR* zV;`@4d+hlp{OMKGt?w@4`)TWos%c|jUid8e!&X7#dKJ{$LL#m^T&z0F4C@ux``vgS z8}Dl)5_y&Nf-ls0Ui>}ob@uk)S+onKAXH5C$0qaRNyPegkDlAv{8ifL{lwNhm&f@T z4UZ|K9?E?GJ-8owpQJm}?)Fo^JLF5Qrp_}DJW$t_DD#;Sob_4!^c%^e^W~9`h@w~G z?AI6fIxm+@@UfqNYdN<6&<3lXTPWNYil=W+CNNkMlqn0x) zcZiJ3tKsd>qu)@ExH!DpKK}4`oZtG-t-lyQpku=-MVFCD=@;hSSVCSOZLxmLFmDnG z{W)#EDt`SneeKW3%)Y;;VHH0z?QPF_xyQv4`}se^$MJbTj$ciPC58MKOYG-YFl9_P zss6-t;--s7xZYTs5667Ra-xr4OV6H9S?_Ct@y=72-#kY~*%m-OWBi>^`Np`4tJi-n zUhM5bOXL2|FAqnqW!$hL&0eylV8=e`<@?jNWk1F568Wa9ycFmG^bfAV`m`r7o_PZ6 zzpgRuM_gVk|NQ%}_WrWRCuC37POn`$z1|1?LTnEaWdZ&4-``XE@6phIzrx%vx9=at zudjW3rRifIzlp`if4!Ez{rQ~6lJeg+^8IN8`7eevcYV3M()4Ad>S{yLoke3wUt0kW zA-3hw9r6COmY&jYx<+U&DWUv`TaJ^yp0<9f%`N{a(w%&1B|ks-oNZ5)_4T`mqiumb z+OPR5u7wt|>(9ET7i~gFmW{7|o7@ZYPrH6_j(a2LRyt1hj5%f6QQ;+&-~FVx?emIQ zSAjM;a*eDVRB}!n741NYzoW$8 zQR43?E#zhLa$XM2{7LBQucNMhjv)=^UOgO~~5Y zUcow#15A1e;qA{`S5cM;xkhZuBah^xh?|18Kc--%i zmrblI_U^-abQ7$r#rZb-{MP*Sqt|m`%5m+~^qpG!&jNKyFDIu?-#gyDP%J4L+j`WO zg}X`42Z4U#dmO&-NUwHzbDSnBcK4htoO|`QcKFm@6@4TvBzYaiaOdo-eN7;+~CfJ&^tLJxYF_ zfpOAvsCNR%K)DiH=fn1o6u(>|IB%R-{};Q%ot5J+oVR>#@_SLK#D1sq-`=|V zb%ZZx@uIwJyp-*KMSRZiiT11Fitb-58=rEUf=^I2F=uE-I$)u z>g}bQ9ShBviA-o!>(T6|d5BHyx~2xcCPVCYo}!vU(-Ro8nfUscu@F zPHkNBOnFiL6rH(S<*zv{Gs&V&DcR^2RUg^R?d78sV)iWO$#Tnd^&ikH1G{>@V7+&9 zo9{zYboamH`b0lKzmVf){y|9_ZeO0-blTjO@d)GI|KHy+4q{vc9?%6;?PIL=MVrZL zUerpzK4y05mx#@Kke|qJynhIk#$WsN5yPOF-FTesm0Tt!Dh6VdS^;}28eS3EQ)+LJ`|8Hxr<=-En zs@1KY`rj(*uDkzhg@cIUVR|nG-r3pE;i<&`_oL_e9Fct*?+*>mlxw6 z#zAnREvJwlyWg^aj&+Ki{-JvR1$sp20UYI*;U+75wGCnQeisH9@ z_a6;Exk@X)-SqL}Y}gOj*QYamt$g2ImM^G6E`SIJH0#a-W&R*{)B|#A)7i(5c?0u^ zHlL!fea|hj?1G$p;jcriZ&`bc#_bKH1 z5$WG_yvkYodi(OtE%MU0Oy}^{^C~@wu-LPKQwCN0v@@5MMLNA~JwK)6Ha}auD6gFU z!@K>aU#&8ezUy0Lir4ilDpBfjmySm_(S#B10UO$7QQ0cTmn=NKjtVY1adW;pztmXX zKKg8{<#Z==;YY<*fxajYJGV~f>yRrtdl&Gj;P8Kd+R`$E%>XJU@}^15_awK!gJ#98gi1zlI=cY`xHn^Dkk)#M-6(^K6t86toa@ z?AJF-pY!t64^TFpThN{Y=)0h3)gFemQ*mFxm_GQ>##-9ry2=Yi^ca1Dddw`|@YD(H z%jNaE$j{nm6dz~cKLL2nG{yQ!=KF;p+q{H%%GlmOF2A4$%nTwNP#Y`ymx$kVx^=0T zrpIW}hmo)6Rx;6&vpX6G`<|jZwYr_HQ8SZvRVwQ5?Rtcov>qJ)xUq>MvkyIAP|k-6 zwcFtR@pSb*h*g2=Nwe-1+kaz(UVkLpH?r{~jQ5Xt?q?#1)WZe!gdy2>Zwu{;mB4=a zjpsv@8|Ad0A1N6`dO$^C>xwg6zlwH>TsZHS&)enk`0eR~68LkZ|6=K6dccBm0U{g_ zcQa*Z6+0$e*+G&z$r3_oK2)^S@q8BRe0zTYRK`yscSv>E#>cPf^7A4^n(v zLGLc^>*Ag)_+p%j^2_VtoV6#BA0-D~*s;Q{m4&0-c;$Nikz4+L&bx4Qi=<%c{Q81_ z+;W^Ji1wPZ^O!*1E|4$h^(o6sUY|jZNQZSf8xP=L53#5RKt=g-#I5oZeQ!~tq~*p0hSChwgHm<+B{T?fM&gI=`((KHtn@-XI zr(Ql4yX(hi=7;GvS-dgr=$NA0j~ll)A#c(-u&`z^Ja@sP?7}*4Ay=d&@+M+`DAZ&9E$bRsNF^orbQX z2LJh9ee$E~Z?n$zS@S$bP)M_Rv%00|q^I`rPUO z<00L*n6uvt=l1OS`P8@Ll;<^WU z6*@e*!lF#d^LpWd#_j*2HlGylI_-WY-@oD{h5f8ZZ*@mmC6ZL9l>#o&P4kEoKJgySH_cE%laMYJImgF3jIFvosVbWM9a6}e|%f#GJRs)Dfo2% z?N8z}sqKzZ3ANi^qGm^CT?ucRL5nlGwr&%Ah9=Bw^6YdX)^)(D>O550pM-Mkj%S^El<)(3A- zpK&7iyYi%#YGHVdELMi!uYx^-;FsN#ct94fu?>pGb2%k(7;Mu6LN6${54ruw^jW;D ze-rfCH@Uomf27pneRuH(Cl7dZ$af2MZ8Ywnf9)*FC=og4<;tVe-7CtBRlSsFST;eO2=rw zqD^6@0=Io051W32W_K%|cSLL|_y3v7?V4`p&>jd_Q4fHMBJamp%0Q`oi~OyupGb;} zwSH)-^^?Nw$ZqrVU|}zgbppl}hUwk4A4mENWBQ^z?3<8>-2R#0WgqHl{iO4LCdMaV z0v_Z2-n%O=(~pSzK=0ZrFOa93ZwX!2V3GZ~OQV!=Rbp3m50> zxgAfOBI`a{S93gl8eD8_m}>u3xBScQ{tH^s_BN+}nxNW$I`TgYzO;PemzlB)tY1M*Uj{8Oj8?ciTSwl@;;GcJ$7=ZN0IsnJ6hCtswj23H?{@Kpx&vAAjYI-Kjd;^@zT z+t(~T8%mA7b~@dndLlKm8i2<0aTEG(!H=vjW9>}b$H{GfVE&rLc+Jj7(zqVvDsQjY zhrPLei^(hJ?G611{R)zY+!?-%y-?%l7-g3Os-a2Q_HPk%C9y-xv33}V0P&-cx#I{PNb0dj#H zAQ#}#;)PrQ5sPvIA{-FmfQrJ}|88y%XVTe+A}52$2dIs;v=8|_K$}ldLM-lN+#`wE zRq5@6SbFTEZ|L+5^7tm>H}0R{6MO?A91!7v2nSTp7XuFz2>Hi{;*0cu?XQj(7B5AU zUE;~|%2DZ-59sUi8+w=D5KDssLcb3Pjilp0T%7(SEs=J$`=fA~&qK(+%+-X#E^#z2 zWJ;5?mJ!tC!H?^@H%XFYDFI)O>R-+eJlb&l0^fj&@~q07|MEP$OnF`v_xexCp!fgX z6R~-oI}M(*Ea6C2Cf%P}diOxr8{}VgM!D4cskAz%L7wu(=F_=WFSp+G!22_AKmId2 z!~2x9qoaD|HG$N{vbtgpA@xvLJsD24y(@%whTxZo&6BY@eL5RQa(;hTmalAYCGTJ5 z_W7prMonn*iTaS^jpu)nUba8U*?f$43@Gr)^tF5{%Gax3sW)u>C_Q4%t}QEZzhODo z>*c;Z{HQAVH&+NFruUDh>{8)fN7j#}(iX5Q%62amw{1afXJuCW~7f}6 zGP!;0U%A$AI4>Ppu5v7^JH+T`hT`I0K7AJLYJSV zl;tDxvv2n0gLg7vH|eN<0kambz#qHj_4H#d52(cHIX(w_;C?)EnYmxDII3p-gww-l z>xb5?wtQmveamF-7dFVY4#&D&mPgLkmx8{QZ-fJyZFa%16PEp3ILhxR-jRG|e?;I6 zc-ehv^v8s^K-;@e(9=1ZuYid`&;eARr&eFl zZJioVVe{%*{_OatN52LHR^S0dI3V^X;yg`m-&(#D#kf8MJ~_Sde!zZu_CD2k>QcP# z?eVtzuOdD48sI~whm;7PIA{3Q`UO*{(d$ub+s5CaRO_?War_)OoZNo<@lKn*s(!ET zc%N6teCb*AjI4{qkRu?%0nIi&KJ@x526hpyWOW~-zRSnvXLEpGP+fUD8&@TZUr5EvotslI5yx!(FnT>k~b>%@$2EjL=Hdf5{2shKo zOLIEzkDEsGU;paS;#L;z&Of|&%O%6<#g=1NC#(LrI`*u7ZhXu6bmiA_9ZISDoyXC! zRf0GFLhV|44ZIzhMdw^!Hf)^eM9b$47;r^>@8FWfN@ep>`o(IfsJ@Ro^19o5&lb_( zxNo0San0g(ug58B$kLhjis|(yY`%}=;~w6rd3W~DD7jW%2!-4L6=mF!=1$|5ylA~* zdyPzg^*(2dF}+%4{xXR^AH1kWB~{;yoLYP$zZ}2r-!)sV4O~Qp&umCty<5$H)hl20 z^gk))`GexM8)Z?DPx%tgCQsUb{nf=LE}69Pe+N%h{L+WEn){WSHZh%g4+(agw)#9h z^|t{JyaDk+A1* zMBg|boPnJ)mBgeC+G%nZ6^P+i}BwTkvZXaxac(5qm#m**^4-VnWc2mN;^pyP(3AON>FwK(uz2vL_ZMoszLM#o zT>^p&qytnG_WtNn`uX|B3C}m`=V#;bS>y+12F+X_n?UT{iF>?0)A@YnrPIIWZ2XYh zBdCH8K!gJ#98ghK7Z|1f#qjr5AKL7^VE1J_KG?^H7zWL{_dD5mtiH2nHC*)I^ReK^ zxITdu=>Qdlt;2==Fj9iP7HVUS*0b6aW|~p;=qKTwT`8sRlR>|}G*SN2-5PkS`x<(g z;c-XZ=LEJ7Gymg!mVU}k7`p3T2JaV<9L7>->jR(nNi{N5O$-zGx+#{d%cp5kTu&cL z7AqI$+KIMzckvFd%s=y!5YP3vVSF6B%k^8hpNe)4h*Cjra{EC#K%_%HK!gJ#91!7v zcn@z)RPjjMtBXUwOQDk|Y$_D$e-Z8E)C*>Ry z>+k#veD?lTYCEd??5F>x(fAVE{1=RKrRS~td(?cc`h#d+ZB6G-eJFbT>4?n9=~U)f zTw1}(f6ynt^^I9}SU;aIdV##%LXLtyI0IiyuN%kxY~p>Ha7j-k-n&LVEgrNxK*WMB zAi@C=4v26-Gfg=1y3MNfF;w-yd$VKjMN`Xz^III8pGM5C@|vw5uzH0(g*eZZ_0Mlw z|BMs+{IPh{gR5@5Ft#@n<&*I{(pSp(a$BB=4F?A;2@j>x7B}Oi?7h#5aGZAtdBCqR z{2ars4t%ompH8d&Ym22w0Hxh{sF!K zks9R$L^z;hdmfe&{Sb6Te)i2ien;`IznIyrz`Xl3H`V*WtJVp&ceJ$j4x&Hwv>HU1 z_xNL9q&0IdFEjrNChnKxpl&?Fxd+ZcP_x={3VyB6UJts@-@(SYJ93$A_u_C* zZosx6)6nz?y6d#*{ho#6czgoav){A5dxCdRnp!`}w04c<6U5I4WPj|~SGx0cv^a0l z@(sQKQ4T=7cjRsJOO2GkliTr_?biZ$xiM~l3iyB=!))(zu=>FJgXnjF$Ok-t2nR$s zAi@C^g}p!TMZfr!II<@I{?$Z!HvY%j{PN2EhouzwjQf+o$G$-hfx7m{;!#dOIlrKX z7zPmzsExJk=axrTu6p>x7p<>ebh~#`)wg>-m@(BeA*8j>m3=FosJ};5`2L5X!)s9M z3TbX`w)b0s2Y3My4rr#Ozkgi)(b^UC-olAZJ(s{AgV3KD%MaxQw2z-rauhH4@tAwM zTi?((2j~*KfE-b)xBb=fI>fI%BWSe6eb2XXq&gcfIpyk6TGG<$ zah%gfJpl@SWd0F@@O@n@FFmRHp0Sn@Prv>;HtfUX79C@0PqX_@OD9Hge}&$(XPM>V zG4zu0{2T!HSwIEt0ubSVX4*WaU{d(pRC4VdH)8!WKW-{mFp)X%DJ;(TSqYe=Nz?kH2hv0KcX2{2j_f8eny3A8PZ148O=TD_BmtlBkf? zEc&iapNM-8xCfyv7x)AOpMVGlG;_N_v7eUj8?%)5^ULv$)^98x>%dqo)^IMs&R z=ZA?cg_vDA?8QWV8=p_v$ET&Mo;O+F8%W~!x9{rSzjLHdML$8mk@2(NXvcsoROmD9 z^ZV*j*2_y-=~NbO$8X-lJS|C(sq)1(ojeb3VuRr7j$xhR8P=ljvQ zPWB#hzdWGp3NI5)Z~2u=^ldMy<}_hM=Ue*z$^6+y(YD2#@+~MGOaCi>c~F{P3KiL! zcS--STef{T_T|hUR~py*Uv+4IVXVJ{6d^Z2MakLvOQdJ*NPfRs#*cOcDDopEk!2t8J<7-}6)qzQ9HF0(^>r+#z-P?Az%Qpqj5b{0ljGm}VrrwlE5hl& z)GLYo&c;!<1vT^g?M$Xo+3ruqc?Hs)juuDJ@#JE4934hCH`X0^YHTV6@3kz{{K-w# zrfoQgcl%E0^xaxMwA3y2i*pV3j{0^!o(g{D{-DKxbbyEz`$dE>i1%#7eqUa1A)PiK zet`}k!U5IxYW3e`qRfi-E)C5*oa^#1dyuK7)y zzKP=YFnaq8`8_GQe=yF`t^w_rkENI6kq=PF!#KT&w;u0h$8!H6cu!8O5AiNI-U*+1 z?HlzkgX>2x>g4;T<2yJ3pS$X(6nQbvME~TU)pl^;0UiD~ZIA4pSp0?O>Cr{l4lm3hWNn>2uk=qcr|brmyWCQoJh!zJbwr{e@W68=#`#9uw2UMDg;9 z^s@fzUH2D9^P%y1qTr8x6XmJ!LzRUL`jI{VO%e3)!j`H18|m9~@qrHu6b((F*e-1!CHK3>@6V<2_u#JT+P6F& z8P9h)mj}v)a=yH6nZQi+O$m#o&OY0{B(_hwpzGgqe&9hkvoCr`AxEDNUGt@WynEFD zY4g3GrBI8#pM5l8_#GX7R=z~;M-S)kUQ#;%UO-TX8~_mxh;XsKU@-`Hy#AHPkKFe6 ztdNtHA~Q~tONUW2e|!)9P4LU?&cu6_vi#)nwzt(mY9jX!5@OR!v-Pz18?QfD`5f)X z#C!zKwQ?2mbrjG1CB+f$lgjDk@@nZIHQEIr!ode1!U4_n{BGF_?t7D|*tfwqcb*EQ ze_B~ywoB*!rM-AN6y=r2e`fb+viZfy8NY%)`zH9y?R?GjHMpm@iRi)rE zw!B2x-{p3E1ZFLN>iskIcEGe^4|MNsszwW{DcKqlglgE{hiB=7XD`b10P2^|mw0<gz z_twc?ScW2Ycf8TZ7BA>sf7#CD{S%L+Dzt2gH~2Bm!l6?)cL)QEneh5 zbmmcg7jr>s+-6E^BlkBUS;aL`CN~Z2Khk=@|1tCi+HecXnWP~Mdxn8t)@iL zPX#-b7~M+ZR;5rfYwB zrp-wDwrDcFE>@^vkK`cRyYaBEV)VuS2=9jA9T9o`W^A7*FkddPqCTA&cEGt_qFBm zUOulj9uEb5P_oCLqj=-?f?S{jh;Tr&?tF*Ei1f1l4LP;xMEbL9y)M-JZ7M~~Ug%!# zj(+@dc0X)RTsV??^(|guS~B8+74~^KAJ6i3Oo|IXV4|>{TZ4MfgFZs=QzhW@1Np~g zQoc=YzQLP3Nv`iw&D)--sM__%j?b9UzK5%>KfrDRb`;>$Uisztm-CBmsJ!1qUA&qe z|7^!TYLZ#A>yW!9a{Xd%_m_UV$){FK;7s-1+%0#WT)#PF0bOe1GHAMbkM_M?2|a>* zrcu4}^Co#t%i`^CwT?fTo|Z2~!MopV-rvmgBNyZZs3?Qazv`S_PPI35ZuIlAImdMA z>mK{`cEG{bl-uEHoy1U^^U*?O5n?@eq?w>)ebtn_&=QsHUC3bp3g3S`)FB> zEb3V?#dB_ttvdQ;o*${$ZA})RCzsi=C$>)?e1I=w{}YG>9zaED^!!BIb@j(k!S0vF z1}0?DwNseL zt6;>t^K!#3!#+QVVbEUxK`PJ%RFqNMYt0Tidx&aJuAJi1S5I%@F~5l9tSo9ey?2vO zKN@1^{=C2kO5jHeRsR&ft#_H^vb@CLiDSkNANuR~!IOvoI&sv5@#~l8cdFO8UW4_M HT\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
steptypeamountnameOrigoldbalanceOrgnewbalanceOrignameDestoldbalanceDestnewbalanceDestisFraudisFlaggedFraud
01PAYMENT9839.64C1231006815170136.0160296.36M19797871550.00.000
11PAYMENT1864.28C166654429521249.019384.72M20442822250.00.000
21TRANSFER181.00C1305486145181.00.00C5532640650.00.010
31CASH_OUT181.00C840083671181.00.00C3899701021182.00.010
41PAYMENT11668.14C204853772041554.029885.86M12307017030.00.000
\n", + "" + ], + "text/plain": [ + " step type amount nameOrig oldbalanceOrg newbalanceOrig \\\n", + "0 1 PAYMENT 9839.64 C1231006815 170136.0 160296.36 \n", + "1 1 PAYMENT 1864.28 C1666544295 21249.0 19384.72 \n", + "2 1 TRANSFER 181.00 C1305486145 181.0 0.00 \n", + "3 1 CASH_OUT 181.00 C840083671 181.0 0.00 \n", + "4 1 PAYMENT 11668.14 C2048537720 41554.0 29885.86 \n", + "\n", + " nameDest oldbalanceDest newbalanceDest isFraud isFlaggedFraud \n", + "0 M1979787155 0.0 0.0 0 0 \n", + "1 M2044282225 0.0 0.0 0 0 \n", + "2 C553264065 0.0 0.0 1 0 \n", + "3 C38997010 21182.0 0.0 1 0 \n", + "4 M1230701703 0.0 0.0 0 0 " + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#%%\n", + "\n", + "import pandas as pd\n", + "import numpy as np\n", + "data = pd.read_csv(\"onlinefraud.csv\")\n", + "data.head()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e09f1bfb-d882-4fa9-a2d4-7bafb79a1f66", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "step 0\n", + "type 0\n", + "amount 0\n", + "nameOrig 0\n", + "oldbalanceOrg 0\n", + "newbalanceOrig 0\n", + "nameDest 0\n", + "oldbalanceDest 0\n", + "newbalanceDest 0\n", + "isFraud 0\n", + "isFlaggedFraud 0\n", + "dtype: int64" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# %%\n", + "\n", + "data.isnull().sum()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "18a97419-8866-4c6c-9bea-c0fed660b76e", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "type\n", + "CASH_OUT 2237500\n", + "PAYMENT 2151495\n", + "CASH_IN 1399284\n", + "TRANSFER 532909\n", + "DEBIT 41432\n", + "Name: count, dtype: int64" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# %%\n", + "\n", + "# Exploring transaction type\n", + "data.type.value_counts()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a87881f2-11b7-46af-931d-909a3a6d19a1", + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.plotly.v1+json": { + "config": { + "plotlyServerURL": "https://plot.ly" + }, + "data": [ + { + "domain": { + "x": [ + 0, + 1 + ], + "y": [ + 0, + 1 + ] + }, + "hole": 0.5, + "hovertemplate": "label=%{label}
value=%{value}", + "labels": [ + "CASH_OUT", + "PAYMENT", + "CASH_IN", + "TRANSFER", + "DEBIT" + ], + "legendgroup": "", + "name": "", + "showlegend": true, + "type": "pie", + "values": [ + 2237500, + 2151495, + 1399284, + 532909, + 41432 + ] + } + ], + "layout": { + "legend": { + "tracegroupgap": 0 + }, + "template": { + "data": { + "bar": [ + { + "error_x": { + "color": "#2a3f5f" + }, + "error_y": { + "color": "#2a3f5f" + }, + "marker": { + "line": { + "color": "#E5ECF6", + "width": 0.5 + }, + "pattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + } + }, + "type": "bar" + } + ], + "barpolar": [ + { + "marker": { + "line": { + "color": "#E5ECF6", + "width": 0.5 + }, + "pattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + } + }, + "type": "barpolar" + } + ], + "carpet": [ + { + "aaxis": { + "endlinecolor": "#2a3f5f", + "gridcolor": "white", + "linecolor": "white", + "minorgridcolor": "white", + "startlinecolor": "#2a3f5f" + }, + "baxis": { + "endlinecolor": "#2a3f5f", + "gridcolor": "white", + "linecolor": "white", + "minorgridcolor": "white", + "startlinecolor": "#2a3f5f" + }, + "type": "carpet" + } + ], + "choropleth": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "type": "choropleth" + } + ], + "contour": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "contour" + } + ], + "contourcarpet": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "type": "contourcarpet" + } + ], + "heatmap": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "heatmap" + } + ], + "heatmapgl": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "heatmapgl" + } + ], + "histogram": [ + { + "marker": { + "pattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + } + }, + "type": "histogram" + } + ], + "histogram2d": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "histogram2d" + } + ], + "histogram2dcontour": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "histogram2dcontour" + } + ], + "mesh3d": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "type": "mesh3d" + } + ], + "parcoords": [ + { + "line": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "parcoords" + } + ], + "pie": [ + { + "automargin": true, + "type": "pie" + } + ], + "scatter": [ + { + "fillpattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + }, + "type": "scatter" + } + ], + "scatter3d": [ + { + "line": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatter3d" + } + ], + "scattercarpet": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattercarpet" + } + ], + "scattergeo": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattergeo" + } + ], + "scattergl": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattergl" + } + ], + "scattermapbox": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattermapbox" + } + ], + "scatterpolar": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatterpolar" + } + ], + "scatterpolargl": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatterpolargl" + } + ], + "scatterternary": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatterternary" + } + ], + "surface": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "surface" + } + ], + "table": [ + { + "cells": { + "fill": { + "color": "#EBF0F8" + }, + "line": { + "color": "white" + } + }, + "header": { + "fill": { + "color": "#C8D4E3" + }, + "line": { + "color": "white" + } + }, + "type": "table" + } + ] + }, + "layout": { + "annotationdefaults": { + "arrowcolor": "#2a3f5f", + "arrowhead": 0, + "arrowwidth": 1 + }, + "autotypenumbers": "strict", + "coloraxis": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "colorscale": { + "diverging": [ + [ + 0, + "#8e0152" + ], + [ + 0.1, + "#c51b7d" + ], + [ + 0.2, + "#de77ae" + ], + [ + 0.3, + "#f1b6da" + ], + [ + 0.4, + "#fde0ef" + ], + [ + 0.5, + "#f7f7f7" + ], + [ + 0.6, + "#e6f5d0" + ], + [ + 0.7, + "#b8e186" + ], + [ + 0.8, + "#7fbc41" + ], + [ + 0.9, + "#4d9221" + ], + [ + 1, + "#276419" + ] + ], + "sequential": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "sequentialminus": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ] + }, + "colorway": [ + "#636efa", + "#EF553B", + "#00cc96", + "#ab63fa", + "#FFA15A", + "#19d3f3", + "#FF6692", + "#B6E880", + "#FF97FF", + "#FECB52" + ], + "font": { + "color": "#2a3f5f" + }, + "geo": { + "bgcolor": "white", + "lakecolor": "white", + "landcolor": "#E5ECF6", + "showlakes": true, + "showland": true, + "subunitcolor": "white" + }, + "hoverlabel": { + "align": "left" + }, + "hovermode": "closest", + "mapbox": { + "style": "light" + }, + "paper_bgcolor": "white", + "plot_bgcolor": "#E5ECF6", + "polar": { + "angularaxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + }, + "bgcolor": "#E5ECF6", + "radialaxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + } + }, + "scene": { + "xaxis": { + "backgroundcolor": "#E5ECF6", + "gridcolor": "white", + "gridwidth": 2, + "linecolor": "white", + "showbackground": true, + "ticks": "", + "zerolinecolor": "white" + }, + "yaxis": { + "backgroundcolor": "#E5ECF6", + "gridcolor": "white", + "gridwidth": 2, + "linecolor": "white", + "showbackground": true, + "ticks": "", + "zerolinecolor": "white" + }, + "zaxis": { + "backgroundcolor": "#E5ECF6", + "gridcolor": "white", + "gridwidth": 2, + "linecolor": "white", + "showbackground": true, + "ticks": "", + "zerolinecolor": "white" + } + }, + "shapedefaults": { + "line": { + "color": "#2a3f5f" + } + }, + "ternary": { + "aaxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + }, + "baxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + }, + "bgcolor": "#E5ECF6", + "caxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + } + }, + "title": { + "x": 0.05 + }, + "xaxis": { + "automargin": true, + "gridcolor": "white", + "linecolor": "white", + "ticks": "", + "title": { + "standoff": 15 + }, + "zerolinecolor": "white", + "zerolinewidth": 2 + }, + "yaxis": { + "automargin": true, + "gridcolor": "white", + "linecolor": "white", + "ticks": "", + "title": { + "standoff": 15 + }, + "zerolinecolor": "white", + "zerolinewidth": 2 + } + } + }, + "title": { + "text": "Distribution of Transaction Type" + } + } + } + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# %%\n", + "\n", + "type = data[\"type\"].value_counts()\n", + "transactions = type.index\n", + "quantity = type.values\n", + "\n", + "import plotly.express as px\n", + "figure = px.pie(data, \n", + " values=quantity, \n", + " names=transactions,hole = 0.5, \n", + " title=\"Distribution of Transaction Type\")\n", + "figure.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "2a2f8c81-f73a-449f-ae0a-ee60adf436a9", + "metadata": {}, + "outputs": [ + { + "ename": "ValueError", + "evalue": "could not convert string to float: 'PAYMENT'", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mValueError\u001b[0m Traceback (most recent call last)", + "File \u001b[1;32mc:\\Users\\91929\\Downloads\\online_payment_fraud_detection\\hello.py:2\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[39m# %%\u001b[39;00m\n\u001b[1;32m----> 2\u001b[0m correlation \u001b[39m=\u001b[39m data\u001b[39m.\u001b[39;49mcorr()\n\u001b[0;32m 3\u001b[0m \u001b[39mprint\u001b[39m(correlation[\u001b[39m\"\u001b[39m\u001b[39misFraud\u001b[39m\u001b[39m\"\u001b[39m]\u001b[39m.\u001b[39msort_values(ascending\u001b[39m=\u001b[39m\u001b[39mFalse\u001b[39;00m))\n", + "File \u001b[1;32mc:\\Users\\91929\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\pandas\\core\\frame.py:11049\u001b[0m, in \u001b[0;36mDataFrame.corr\u001b[1;34m(self, method, min_periods, numeric_only)\u001b[0m\n\u001b[0;32m 11047\u001b[0m cols \u001b[39m=\u001b[39m data\u001b[39m.\u001b[39mcolumns\n\u001b[0;32m 11048\u001b[0m idx \u001b[39m=\u001b[39m cols\u001b[39m.\u001b[39mcopy()\n\u001b[1;32m> 11049\u001b[0m mat \u001b[39m=\u001b[39m data\u001b[39m.\u001b[39;49mto_numpy(dtype\u001b[39m=\u001b[39;49m\u001b[39mfloat\u001b[39;49m, na_value\u001b[39m=\u001b[39;49mnp\u001b[39m.\u001b[39;49mnan, copy\u001b[39m=\u001b[39;49m\u001b[39mFalse\u001b[39;49;00m)\n\u001b[0;32m 11051\u001b[0m \u001b[39mif\u001b[39;00m method \u001b[39m==\u001b[39m \u001b[39m\"\u001b[39m\u001b[39mpearson\u001b[39m\u001b[39m\"\u001b[39m:\n\u001b[0;32m 11052\u001b[0m correl \u001b[39m=\u001b[39m libalgos\u001b[39m.\u001b[39mnancorr(mat, minp\u001b[39m=\u001b[39mmin_periods)\n", + "File \u001b[1;32mc:\\Users\\91929\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\pandas\\core\\frame.py:1993\u001b[0m, in \u001b[0;36mDataFrame.to_numpy\u001b[1;34m(self, dtype, copy, na_value)\u001b[0m\n\u001b[0;32m 1991\u001b[0m \u001b[39mif\u001b[39;00m dtype \u001b[39mis\u001b[39;00m \u001b[39mnot\u001b[39;00m \u001b[39mNone\u001b[39;00m:\n\u001b[0;32m 1992\u001b[0m dtype \u001b[39m=\u001b[39m np\u001b[39m.\u001b[39mdtype(dtype)\n\u001b[1;32m-> 1993\u001b[0m result \u001b[39m=\u001b[39m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_mgr\u001b[39m.\u001b[39;49mas_array(dtype\u001b[39m=\u001b[39;49mdtype, copy\u001b[39m=\u001b[39;49mcopy, na_value\u001b[39m=\u001b[39;49mna_value)\n\u001b[0;32m 1994\u001b[0m \u001b[39mif\u001b[39;00m result\u001b[39m.\u001b[39mdtype \u001b[39mis\u001b[39;00m \u001b[39mnot\u001b[39;00m dtype:\n\u001b[0;32m 1995\u001b[0m result \u001b[39m=\u001b[39m np\u001b[39m.\u001b[39masarray(result, dtype\u001b[39m=\u001b[39mdtype)\n", + "File \u001b[1;32mc:\\Users\\91929\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\pandas\\core\\internals\\managers.py:1694\u001b[0m, in \u001b[0;36mBlockManager.as_array\u001b[1;34m(self, dtype, copy, na_value)\u001b[0m\n\u001b[0;32m 1692\u001b[0m arr\u001b[39m.\u001b[39mflags\u001b[39m.\u001b[39mwriteable \u001b[39m=\u001b[39m \u001b[39mFalse\u001b[39;00m\n\u001b[0;32m 1693\u001b[0m \u001b[39melse\u001b[39;00m:\n\u001b[1;32m-> 1694\u001b[0m arr \u001b[39m=\u001b[39m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_interleave(dtype\u001b[39m=\u001b[39;49mdtype, na_value\u001b[39m=\u001b[39;49mna_value)\n\u001b[0;32m 1695\u001b[0m \u001b[39m# The underlying data was copied within _interleave, so no need\u001b[39;00m\n\u001b[0;32m 1696\u001b[0m \u001b[39m# to further copy if copy=True or setting na_value\u001b[39;00m\n\u001b[0;32m 1698\u001b[0m \u001b[39mif\u001b[39;00m na_value \u001b[39mis\u001b[39;00m lib\u001b[39m.\u001b[39mno_default:\n", + "File \u001b[1;32mc:\\Users\\91929\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\pandas\\core\\internals\\managers.py:1753\u001b[0m, in \u001b[0;36mBlockManager._interleave\u001b[1;34m(self, dtype, na_value)\u001b[0m\n\u001b[0;32m 1751\u001b[0m \u001b[39melse\u001b[39;00m:\n\u001b[0;32m 1752\u001b[0m arr \u001b[39m=\u001b[39m blk\u001b[39m.\u001b[39mget_values(dtype)\n\u001b[1;32m-> 1753\u001b[0m result[rl\u001b[39m.\u001b[39;49mindexer] \u001b[39m=\u001b[39m arr\n\u001b[0;32m 1754\u001b[0m itemmask[rl\u001b[39m.\u001b[39mindexer] \u001b[39m=\u001b[39m \u001b[39m1\u001b[39m\n\u001b[0;32m 1756\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39mnot\u001b[39;00m itemmask\u001b[39m.\u001b[39mall():\n", + "\u001b[1;31mValueError\u001b[0m: could not convert string to float: 'PAYMENT'" + ] + } + ], + "source": [ + "# %%\n", + "\n", + "correlation = data.corr()\n", + "print(correlation[\"isFraud\"].sort_values(ascending=False))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "07637929-1d1c-422b-bc9f-057b3092fbdb", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "step int64\n", + "type object\n", + "amount float64\n", + "nameOrig object\n", + "oldbalanceOrg float64\n", + "newbalanceOrig float64\n", + "nameDest object\n", + "oldbalanceDest float64\n", + "newbalanceDest float64\n", + "isFraud int64\n", + "isFlaggedFraud int64\n", + "dtype: object\n" + ] + } + ], + "source": [ + "# %%\n", + "\n", + "print(data.dtypes)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "20fe83f7-62cf-4f03-b7e8-3309cf056b57", + "metadata": {}, + "outputs": [], + "source": [ + "# %%\n", + "\n", + "data_numeric = data.select_dtypes(include=[float, int])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "91e9dae5-9e8c-4c43-8e4c-321eb1da4082", + "metadata": {}, + "outputs": [], + "source": [ + "# %%\n", + "\n", + "data_numeric = data_numeric.dropna() # Drop rows with missing values\n", + "# or\n", + "data_numeric = data_numeric.fillna(0) # Replace missing values with 0 or another value" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "6f6e22ec-1441-41d4-b87b-881dbac3b0db", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "isFraud 1.000000\n", + "amount 0.076688\n", + "isFlaggedFraud 0.044109\n", + "step 0.031578\n", + "oldbalanceOrg 0.010154\n", + "newbalanceDest 0.000535\n", + "oldbalanceDest -0.005885\n", + "newbalanceOrig -0.008148\n", + "Name: isFraud, dtype: float64\n" + ] + } + ], + "source": [ + "# %%\n", + "\n", + "correlation = data_numeric.corr()\n", + "print(correlation[\"isFraud\"].sort_values(ascending=False))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "327e419e-5c5b-434a-9526-ba6e9b8ca910", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
steptypeamountnameOrigoldbalanceOrgnewbalanceOrignameDestoldbalanceDestnewbalanceDestisFraudisFlaggedFraud
0129839.64C1231006815170136.0160296.36M19797871550.00.0No Fraud0
1121864.28C166654429521249.019384.72M20442822250.00.0No Fraud0
214181.00C1305486145181.00.00C5532640650.00.0Fraud0
311181.00C840083671181.00.00C3899701021182.00.0Fraud0
41211668.14C204853772041554.029885.86M12307017030.00.0No Fraud0
\n", + "
" + ], + "text/plain": [ + " step type amount nameOrig oldbalanceOrg newbalanceOrig \\\n", + "0 1 2 9839.64 C1231006815 170136.0 160296.36 \n", + "1 1 2 1864.28 C1666544295 21249.0 19384.72 \n", + "2 1 4 181.00 C1305486145 181.0 0.00 \n", + "3 1 1 181.00 C840083671 181.0 0.00 \n", + "4 1 2 11668.14 C2048537720 41554.0 29885.86 \n", + "\n", + " nameDest oldbalanceDest newbalanceDest isFraud isFlaggedFraud \n", + "0 M1979787155 0.0 0.0 No Fraud 0 \n", + "1 M2044282225 0.0 0.0 No Fraud 0 \n", + "2 C553264065 0.0 0.0 Fraud 0 \n", + "3 C38997010 21182.0 0.0 Fraud 0 \n", + "4 M1230701703 0.0 0.0 No Fraud 0 " + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# %%\n", + "\n", + "data[\"type\"] = data[\"type\"].map({\"CASH_OUT\": 1, \"PAYMENT\": 2, \n", + " \"CASH_IN\": 3, \"TRANSFER\": 4,\n", + " \"DEBIT\": 5})\n", + "data[\"isFraud\"] = data[\"isFraud\"].map({0: \"No Fraud\", 1: \"Fraud\"})\n", + "data.head()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "905a0b7f-3f12-4260-b4fd-fae6a0ea9a83", + "metadata": {}, + "outputs": [], + "source": [ + "# %%\n", + "\n", + "from sklearn.model_selection import train_test_split\n", + "x = np.array(data[[\"type\", \"amount\", \"oldbalanceOrg\", \"newbalanceOrig\"]])\n", + "y = np.array(data[[\"isFraud\"]])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b2d0461c-13fb-4904-aa9f-dbed0d38f0c6", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.9996982375185065" + ] + }, + "execution_count": 35, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# %%\n", + "\n", + "# training a machine learning model\n", + "from sklearn.tree import DecisionTreeClassifier\n", + "xtrain, xtest, ytrain, ytest = train_test_split(x, y, test_size=0.20, random_state=42)\n", + "model = DecisionTreeClassifier()\n", + "model.fit(xtrain, ytrain)\n", + "model.score(xtest, ytest)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "fad573f5-eb07-45b6-a4c1-a721bb747c15", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['Fraud']\n" + ] + } + ], + "source": [ + "# %%\n", + "\n", + "# prediction\n", + "#features = [type, amount, oldbalanceOrg, newbalanceOrig]\n", + "features = np.array([[4, 9000.60, 9000.60, 0.0]])\n", + "print(model.predict(features))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "6f6b3090-b656-4afc-b114-3bf1d63eac0d", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['No Fraud']\n" + ] + } + ], + "source": [ + "# %%\n", + "\n", + "features = np.array([[4, 9000.60, 9000.60, 50000.0]])\n", + "print(model.predict(features))" + ] + } + ], + "metadata": { + "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 + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/online_payment_fraud_detection/hello.py b/online_payment_fraud_detection/hello.py new file mode 100644 index 0000000..46fe615 --- /dev/null +++ b/online_payment_fraud_detection/hello.py @@ -0,0 +1,84 @@ +#%% +import pandas as pd +import numpy as np +data = pd.read_csv("onlinefraud.csv") +data.head() +# %% +data.isnull().sum() +# %% +# Exploring transaction type +data.type.value_counts() +# %% +type = data["type"].value_counts() +transactions = type.index +quantity = type.values + +import plotly.express as px +figure = px.pie(data, + values=quantity, + names=transactions,hole = 0.5, + title="Distribution of Transaction Type") +figure.show() +# %% +# %% +print(data.dtypes) + +# %% +data_numeric = data.select_dtypes(include=[float, int]) + +# %% +data_numeric = data_numeric.dropna() # Drop rows with missing values +# or +data_numeric = data_numeric.fillna(0) # Replace missing values with 0 or another value + +# %% +correlation = data_numeric.corr() +print(correlation["isFraud"].sort_values(ascending=False)) + +# %% +data["type"] = data["type"].map({"CASH_OUT": 1, "PAYMENT": 2, + "CASH_IN": 3, "TRANSFER": 4, + "DEBIT": 5}) +data["isFraud"] = data["isFraud"].map({0: "No Fraud", 1: "Fraud"}) +data.head() +# %% +from sklearn.model_selection import train_test_split +x = np.array(data[["type", "amount", "oldbalanceOrg", "newbalanceOrig"]]) +y = np.array(data[["isFraud"]]) +# %% +# training a machine learning model +from sklearn.tree import DecisionTreeClassifier +xtrain, xtest, ytrain, ytest = train_test_split(x, y, test_size=0.20, random_state=42) +model = DecisionTreeClassifier() +model.fit(xtrain, ytrain) +model.score(xtest, ytest) +# %% +# prediction +#features = [type, amount, oldbalanceOrg, newbalanceOrig] +features = np.array([[4, 9000.60, 9000.60, 0.0]]) +print(model.predict(features)) +# %% +features = np.array([[4, 9000.60, 9000.60, 50000.0]]) +print(model.predict(features)) + + +# %% +# After training your model +from sklearn.tree import DecisionTreeClassifier +from sklearn.model_selection import train_test_split +import numpy as np + +# Your existing model training code +xtrain, xtest, ytrain, ytest = train_test_split(x, y, test_size=0.20, random_state=42) +model = DecisionTreeClassifier() +model.fit(xtrain, ytrain) + +# Save the trained model using pickle +import pickle + +with open("fraud_detection_model.pkl", "wb") as file: + pickle.dump(model, file) + +print("Model saved as fraud_detection_model.pkl") + +# %%