From ce56fb447a2e17f90da89b2164c8627922342e31 Mon Sep 17 00:00:00 2001 From: tonnesegeland Date: Thu, 18 Jan 2024 09:41:07 +0100 Subject: [PATCH 1/2] Abstractions morning, exercise 1 done --- .../java/com/booleanuk/core/TodoItem.java | 22 ++++++++++++++++--- .../java/com/booleanuk/core/TodoItemTest.java | 12 ++++++++++ 2 files changed, 31 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/booleanuk/core/TodoItem.java b/src/main/java/com/booleanuk/core/TodoItem.java index 655d825..f78b535 100644 --- a/src/main/java/com/booleanuk/core/TodoItem.java +++ b/src/main/java/com/booleanuk/core/TodoItem.java @@ -1,9 +1,9 @@ package com.booleanuk.core; public class TodoItem { - public String title; - public String detail; - public String status; + private String title; + private String detail; + private String status; public TodoItem(String title, String detail, String status) { this.title = title; @@ -11,6 +11,22 @@ public TodoItem(String title, String detail, String status) { this.status = status; } + public void setTitle(String title) { + this.title = title; + } + + public String getTitle() { + return this.title; + } + + public void setDetail(String detail) { + this.detail = detail; + } + + public String getDetail() { + return this.detail; + } + public void setStatus(String status) { this.status = status; } diff --git a/src/test/java/com/booleanuk/core/TodoItemTest.java b/src/test/java/com/booleanuk/core/TodoItemTest.java index 095af82..3da2864 100644 --- a/src/test/java/com/booleanuk/core/TodoItemTest.java +++ b/src/test/java/com/booleanuk/core/TodoItemTest.java @@ -5,4 +5,16 @@ class TodoItemTest { + @Test + public void testAbstractions() { + TodoItem toDo = new TodoItem("Do homework", "deadline tomorrow", "barely started"); + + toDo.setTitle("Homework"); + toDo.setDetail("Deadline: Friday"); + toDo.setStatus("Started"); + + Assertions.assertEquals("Homework", toDo.getTitle()); + Assertions.assertEquals("Deadline: Friday", toDo.getDetail()); + Assertions.assertEquals("Started", toDo.getStatus()); + } } From ead47831f71d80f7b378668901fcf6d8c329bcca Mon Sep 17 00:00:00 2001 From: tonnesegeland Date: Thu, 18 Jan 2024 11:32:30 +0100 Subject: [PATCH 2/2] Abstractions morning, exercise 2 partly done --- src/main/java/com/booleanuk/core/Account.java | 55 ++++++++++++++++++ src/main/java/com/booleanuk/core/User.java | 27 +++++++++ src/main/java/com/booleanuk/core/diagram.png | Bin 0 -> 25369 bytes 3 files changed, 82 insertions(+) create mode 100644 src/main/java/com/booleanuk/core/Account.java create mode 100644 src/main/java/com/booleanuk/core/User.java create mode 100644 src/main/java/com/booleanuk/core/diagram.png diff --git a/src/main/java/com/booleanuk/core/Account.java b/src/main/java/com/booleanuk/core/Account.java new file mode 100644 index 0000000..ff2c6ec --- /dev/null +++ b/src/main/java/com/booleanuk/core/Account.java @@ -0,0 +1,55 @@ +package com.booleanuk.core; + +import java.util.HashMap; + +public class Account { + private HashMap users; + + public Account() { + this.users = new HashMap<>(); + } + + public String createAccount(String email, String password) { + String result = ""; + if (!email.contains("@")) { + result = "invalid email"; + return result; + } + + if (password.length() < 8) { + result = "invalid password"; + return result; + } + + String[] value = {password, "disabled"}; + users.put(email, value); + result = "Account successfully added"; + return result; + } + + public Boolean enableAccount(String email, String password) { + if (!users.containsKey(email)) + return false; + if (!users.get(email)[0].equals(password)) + return false; + String[] value = {users.get(email)[0], "enabled"}; + users.replace(email, value); + return true; + } + + public String logIn(String email, String password) { + String result = ""; + if (!users.containsKey(email)) { + result = "invalid email"; + } + if (!users.get(email)[0].equals(password)) { + result = "invalid password"; + } + if (users.get(email)[1].equals("disabled")) { + result = "Disabled Account"; + } + return result; + } + + +} diff --git a/src/main/java/com/booleanuk/core/User.java b/src/main/java/com/booleanuk/core/User.java new file mode 100644 index 0000000..0ec574b --- /dev/null +++ b/src/main/java/com/booleanuk/core/User.java @@ -0,0 +1,27 @@ +package com.booleanuk.core; + +public class User { + private String email; + private String password; + + public User(String email, String password) { + this.email = email; + this.password = password; + } + + public void setEmail(String email) { + this.email = email; + } + + public void setPassword(String password) { + this.password = password; + } + + public String getEmail() { + return email; + } + + public String getPassword() { + return password; + } +} diff --git a/src/main/java/com/booleanuk/core/diagram.png b/src/main/java/com/booleanuk/core/diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..d214150cde62c1acebcf27e1e34d1eb6111aa4ff GIT binary patch literal 25369 zcmeFYS6GwZw*RZ3(xfXWAXPeoNN)kD0s_)o00rqa^o}T1s?vM!5^2~Q;X3SCM`x)OE{!Uea5T6SF&Ye4iif?2!?%crw z-??*F754$=8wJg*r+4m{E-T8u*77voYu&DR0oC6hYnao$_`n6m!&{rvCS{H)aX#s3cZ$It)Q zF8_nhfI|v)G-@`wn(K#_dC+;*oOer@l>7Tblgd1HX=(o-a?-@q{!Qxz=hRK}K@MD| z*SPr9xJkHZDbd^z4;n)oP;wqlc~f$}lyze=6(bQ4fXu6IznuFU5|KEmyS3%KdPRx2?A2NT=f`B;9?ZZQtQMz$E7Z*_l5Q$zFbT$QL_H_na2*iZ z)}BZTdHkyP?__o&{wKjV+E*wElgtS>`?tmo{;>Hp+oy*ez9Ih#z~PG+0AJBTYI2K{ zAG8f;2mM2Y921#O%!a06?QJIzmveBqB7v?u$r(?W4yumoHf-M}hC*mFC%l+hUI4S2 zoox1dqW(UirAIArvs?v(xfxCaoVtnP2Jrwbvug%T(9Bp?AdLj0gvWJ}hhN?P(Q{yCcrS|9 z%Z^($>(-KWJhz6O2saN}F`@O#_1+jLffsPHmPv|U>LEv3iM1qKTz^p1EQz-}asyue zfE)rqZT|iT60pVE8_6<96LG!0M(?`)y@DhZd699c|8auak6y2vs-m5x%to=`mCcN~ zDQf7*RBtjMb`PX7etbT~hjhzo_RT#n%TpUclHBa>Lv)v#Jw2~PQ|AV20|Q(l8}eb* zmd534w2l5%-pA!a)QG+(W=&>)|5dD0t2<0bLXJL*C-8}EAKA!4lg?F7AP#JmUUs{? zKq$%B=xW~iENjJ1lNSDGsgd*Hjs0m_p;W4wK`JdJ z$jAzRwIjT|)$w4K9jEog0C7tKP#?{#WIA4#0yj;u!@R^bJYix=t@U&pz7R@V(&luE zY@*cqeDoV}0XI9jGf0%1+}L=JB3a@kc~#f%wk|G-!na=Z{*S=BslVK|6*oK#vU{f9 z2sLwFE{~7F2Q59ItqrL=gChj$52?+DY;L#jEh|Y$jFET^_W*8~NDx(PrV7@cF3Qi( zXp4a?Nu+3Tfz9H+%n7AMul^kh4`Qpd0jXJ%Z$WIT_pvC{BlP6?UAXX}^FFDRrE;%T z0lX5QKV@IdnW-(94gSaAuj9uizGe^IeLZ-ox*4&#B;mGg^^8@G@~p2PwzH_Zyd=s^ z>Ww}fhO0&UI_`Tj&jyuw`=u3%ywpvoAy20GRmBF}9v*HTRGY6&I>6)i3tU_Y5Wemd z@xgceNcRN z`9T%h_WIhN)jAkoDx1bUzWy-+b-g?6WA0FLDr0odr_u)Xi3@)&Xh(+f6beh`h^6!q z_<-^78Bt8)Oob8IJ%WG)dh8w?{6Q3Wb8`mLYTo-8jqR(h?DKPT_-4CX+{vR|Gi1MZ zfKL7C8n4PSWXZQ>|LN8Gb`s34xJYmgW2!I(+2`#862FzG=}5BcwZ$I)jdvnL*JxWn zrTVQ~r*(Hy68#{as(u=9Ir~WFd^e+1LPy{F#t?@#wYf)kWUr*+w<-7aW@F{2uywOL z_v%`|Hsg=-HSfSv&S_ffL0LL=a7KC?q}vO>51htvOCV!wRw5IaM(P`;-WQnp4RLNa zc>5kgF@>X&?WHBsjMXIhLV{jHAmP)eWLd3E&)t;LU}IY>l*K|^DY}|w&E*Fuq7*e8 z#GlI_@+WN&=OM`?e%D6oZf)u4$z3eWY(ouy-QIF5V;%dBx-SPk3;JZ6j>g+{--FQ~ zEAh-8VZJ>k;e|MsAoz)^Yw0GOX6>qf0RqzzLwO?s$4GJ~2!D zTk;+RHWosR0P4@0{BtsC4}X(G3~Fve`rkG5`M*jhZ``kcDrC>wTNB(?Mn1g%@j(%n zU4wKb*K><%{}k!We$gLK380L)|Ey?2Qa@CnS}xd@zwW8HZ*JN@RiD=|>Z0s|NL-)@ z(PME!`_ItosXw_AVDvBfs(&2~ME}Q%yT#`gGe}Zt)*^DIaZM~L%Xfo(if8W%J`bt} z0ed57zUnok;vJ_0IkLnM25z^7{<7S5>VOX8%$GXLy(X7dNL_`jAI1&7xuQM@ zn+%$-QbM95Gjqx7x z^`n$nrrkzw_x<#<&^5^)4)cvh5k*T9XXTBEG`wy4%efy_gRoa&QEPm>3JoI4OINI! z8Gl!gdl|h16E+Nv$?`5~^1iUhn5JQifMj|hGtY3ZwC{=V;D^<6@)-skZK7Z!F@&pr zs3|@-D&-G1wTLO6gR5EZ%d=P2LxVBP=F9VMACZ&vptz7!^8s60nsMSE@kJ< zYmNkb$F>O~LxvWR-HZoQ?(m1Z!*Mogw}&i-qK^_!z_2h+WRjKE?D3tl}RUNs{ z&rN~LEa7Xsndu^kmvn7T*>%*^?`4PbD2W!Cex0G1svAHnod-kX;l=3LMj?ukyYpdA z%vbX`D4FH`+cOZc3oH}jvG13iDOOd`^zOM{0(3IXq+lm!A=MGiO9fuS~m%2&EG>-3;U2LxkfKQ#fcq{1!AYu7|# z9%FzPFfQTZSiQizkcyYR*Y|ek^VHK>-?AU_sfT<{GY=R zTGU8Ql$~RWWuexs`6&~WPeY|d{6OyQ@s03T+neO-8?qJ~Mp=<3WBZ(PGB9Djx+nuAt26 zs+SxxNm$xNNf<~~N>F`s)7iPCf77~3mR#NE1`fTkJktejIH@kS0L7$e$U#oR!f!YC zNQFmYc}ZeiUsk9^-Oo*sYO2aQ5c*l_v_adbi-mHr+Dr%i$`9rrV}qlHUVr>R8rYHz zO28fgO%?CAx`W%)s2F3bE$&89N#f~_pLXp6oK6aim3FgI1@4`UR5h>*e(Q#KWn2NcSln3dy`2vykF$**z1ZK+(CR$nGg*Nm@A zvx_lfC}+br&WV`_sf#LvB`qoNb|89PieE*!tquLS-ZnPXA7t5{4g0jWYWXqFTXlB& zcz5soVt#{s2V$IV8PyjTvwb`i5C3CQ&3kzFvcBBDf==9*BiFSPxr2bb7SZ*vz5dfsgZhuEN_g>|(MY4+)}jABMzru22oF zM6`19;>v1dsvKAt|hOD zW{t|@FfS#2ZaCotuk=uyXN*nI-PbbNceNL^Dl(|%G@23vjfazU_ zYRS!Bc{;w@&UQ{>KKUCAd0P@~AL2BOBH5woQybM(yxi6FcR4i;Qe$jAdmHWccX!Tc z1_Vxj*ic1E58<>nFxs*6skjVmL_pr@ueKxK*3>e!bb&I`DK8Cq00r)&cDh_ZR%P84 z4$Coqt`|<}Dy^S{xr3Mq7j9oW0W6{9)G6si{u32sQPvL9wJ)@As$2u*vw8c>g`YP6=CEiNUB+xepK(AzaX&z)d0o-C)N%iSk#_r8ZDWkS` ziCc@N5Hb4nE~>MBo(?H|kw<296}itBA#WUwi>r5PGzBvD@2>{ZCHh$?x!Lgrm1S;w zMxW=(CF2fyM*Do_v5!UMMr0Y)JsTaBgcdA1y){i-1RD1h51t8+_bM~oy{inwo6$fI z!1{2Uf0R562h_w{Tw*g^cvWXqIW2teGESs%#@6ZoN=U&LJKOJA!ELS$;?tCN6dm7d8A#;#leJRT zub=up=w+EPk0o}?Y^NWy66hk|%6?$%1&0(*hPgLVZcygFDvBB2d72xu4ZANb{q_8_ z=ibj7Hfw2;aa?PwIFeAI4^LMN1|~H8;713Y%q$%{EFxt zAH;t-AD>-UMQGnsD>X z6pglebdwyLgnFdH@nAx^&x=aBMVxcaU-%ZVKm z3sNI{o40^6N~2XevaATWF%w^3MZ=uU*r6cm38F_!cTrePwk|2 zCF2e>T}i=4f2|>*5Mjkh+2^LJiF@)YI~$!9lpJk-wfl4L&dbMvwl6Q$Qc22EJ2^-P ztIIS0B+>aWZq zQ`k2yezt*w#^Z{(!+;8;L8+(#02z|VJPi>x5CHX(u1BVd{nb5_6OKxBwG zd(phWam1$qt>3=bdClp-kxyrA=Av7)*&41&$3jcr_EO)3i*| zz0%zKLCn0k>1N-I*`E!b&zR5NH6qR#aOrUO04hv8IC-d^^faO0r8L1GZy}i*Z}rT1 zF~0t2h7GxB6D3vBmbUj5;|Jlb44?$AGNsy$2wIEuhag0v)Yymq-&P;)Ii5e%mcuF1 zE=`BRr&vO$x)F zg}dLB(LGDmoPmYF_(J?j>bnwhM?(L2iC$fvOTMm2J)=>6jORK|S?N@nanm#-zhp{F zA&R5z>@X4_Q9U@7R*1je)411057X3Lp=$S(pIuk@W6Mt@(d(S;q2o1a{#xgs6w`zc zHP8B2Zs`Nu%_&--rFT#-fEm{vCm~lUOqF_n`qwFoWxIG+G00|hJJ!%gka*DDDJShi zG%C_%v9fTb)r%(8kLE@XRQ%hOsHo)e@a#i7Zj_&Fe~2a&P<_Y>aeOMu1Q=mH#j?7Q z7+LuU+69?Nb%mx|r**35z4=u&w!Bia{%g&tdDAViE@a>bBhXBZs`pI?tnGf zy81k2!etK;&x2ImzQ%@nmSWx_uF5=y$$vsJn6v9j(Cj_8&^Ak#^Dh?ExEsNbx0JV; ziHj514B#v9omCKiFF_(}_60RjX*&y{E%%{P482 z0-yAZC#pa6VE^JNoyBSo&j=g+_hVf%djAiKflHfsm-a+BdQV7v;JEooUWOpG0qs-J zaFn(zk-Xf3`?_HaoFXAIP)1L_G>dfd~C#n^OOY<2G%}q2(&@O;{ob z`1bvKf30t)BSzwi*%+aJCmNwoIg=eoJ-{r zF5R5%r-T0rZs#9^e3}EO?-g+wayL(SM;Z7e|bezcoKsGpMn%E7scfou%Fe)47 zGh>-exUeK&VOBVFHRXqM+f_1K!;mAvZ(KkRQU3fPhx(Sk zR(2Uj8YbL_t(zhvsgQ*lRI%4ZuzW;fDjOb#8FJW-(L#OS=V9PZMr81gIEcwTBxQy@ z&?{*6bs)oRyV$ksGs>L7L%U3$mS0Jy5TzS!xD}ALq`sl4o8o5ohl>SAl746||aUhyfliR>72~)DF&f=Rsz5Sm3M(^bw_`!3F*G zri%p|7jRf`#l_ON%(&UR$s3L7y2Zr!dhE9}CS}cC1!G8I#8i}6eHn32W7*1uBmeMwR76VQ>FWQVHe9)eRHzV!(iML(FDQwtc@#u^b87e@-AbeOv7JdUjXMMrzB>h{6HmT&JH-8unU z2Jp>fof@6A2JZOVy_(`I;=H9+G`$Zo4cVv3x4lb>DR`6_Tx=k?kRPm%Et6RndQYEp23 z^SaN}hQ5r-7nOsdC0d`-HlqJdB89voj_dFWMPi|UhG0XdAM-lgnxT-}_Nse;kjQ0?pR)J`LaJP zsVpG1wc7&rs}@8{Rm!m6nDXgkvNFh}qFCC!GQjPmA9+Gj38ASf6q+|#yr_jw4)Gqf zU2RWPOpZi+N*)HK*~RW-TGw2&TV(a|s8GwOk*s#~nZ!{%C3-Pu@^Bf5Hzad0KC^&y z$^=84pcQ*J^3T*ZQe_;3t+#OF_1i+t2PGD(deZaT4KN8EKDb^!jtZW+68G8m zGy<%XqBS`Xo{`46$-0z|Mirrah-&%FHe*R!Tiz0aNj&(29IYY>QpAy(3qk>24(zsA=fV#XKl`Ke5aVvJi6+;v6{{3oEW(4Uf@H*2U8rB?&p`RFj1^T!t)} z#vsT#FYEZjO<%L)pJ~asxkK@XQ)K%!TNncvs9A9d2A>H zAurvM5cxwOwtC2$X=I7eB;5wJHG|5}#z-e^KYDTW^sLKL5S2=ZnPfwDsDDa}_W9(W z5?X#d>}P9jB})S?1zF#)L&Oq7&VKX*yi|RWzy$atV|)xSMm@sQK7p0z4OxoOK-ALV zTrK|+xPpiJGI8fk`p(l;VdU3K*6TKH(u+))8RuD(CqKz zmF*>?`$g6t=j{?h5=SM7(k3&HF>QOOvuHj|ICK#MYWxwha zwbh~&6@=*{uV00#ir4!etdpY?cI39Hus|_S=mXdwo(?n4F{oGstEhQbq|Ql?yh=0H z=vsliH0pl42&W8EepEAWZ4g(NN>Y~CI;{Q0>o5MB4viloj0m>6nPQxQV~O=u>B%_I zNtujbPKN0;z24^|pBCR@p^F>Cs%ZHOY)QxHFuEr#lcsoT1g~|xb>G^hVz^dUNLT)) z7VrntN`zmlu;OG_ruLL=@Sj8FJB)Tm0jY*5I}RrT-cQ#XG6}|inbLOSc)xE{9U-_b zr<^I7hIlTGvF9J43N4$W z;fSZQ=i1iRkD&vf%`wsjswu=1$cDZCiBsa{XQi{FUsuS5OkUDp)7|pU-#0^G$O5@; z^h;5DE9WORKqW-{8-=R}G*leRfW{@Rj*|zO70lEHB4%C!4oMC6UKRZEFm0RXvL!3( zU&vuU?_S`I=SjyV+ct$**|0Sw`jk)-@N*4by_$Shf#_QJ2|>M9Q{YC7$IiU!c+3`O zUQcJLmv){Tq8%u1>M54wXSgWX`u=svkXxj@kmE`Zn0QRpccqW#BMAJS-6-N6;5)X7 zNIfjmrD_*3`Q3a#1*PXL`09Kw7ad({227$Ai&h*OPgCZ}3dvNYTg}RDnme@{gm%GX z0LnbqU#S&%l&q)cFG{A>7V7V{uYNB&VIkKVDVtV9Ka)QBFv^@ok_;*(3=GgbNFFCM z5zH=mW@AgecA(VZmg3vN%3*}|8YR&FYe@%v&uRslyU|H2IO$k(PFtSybnl3XiIp7Q zzEU9s^aZX2{V@%qtqG%*MLOZ9KSZ2dn@uk>ZmmcDjA998C>qdFm|=0ruzK5vy$D89 z2hpq2s}a0oN|Z~mqtDLWBQsj%9`I>Zg!PDvf!GAZ^(*mON7r2nY;k8sI%;hjg%)Jy zlyx*`;w;5U9kNxvsl<8_zi%4;2^g5G zK40iFe1t#?Qf!#DxkH`J#=>>nIS=ieTN|86Km1m9d_;54*dWE2EI8EIz!5W$I(c$T8D(-2kX=H|44f1AbzdKnAS%Cui#6y&(AMOy-yTrMsFFqs; z2;Vc=!Bf`zU>y5$2ubQ;-?XgWKo!oSCy#rML(Y-dstq4^tF@2 zo`LAV4TNvBD!35$?jY9N6O-}SM9vBy6!mW>ff-T@@m<+bbw2M>kC6;8@~DbUweJcK zC*bD=mk_j+cPjkI;vJmX=0ARd;dc#2J~fH2(R!&r?})rG8dMn-8>|iMY$bW}Y8chY zH-ZI_<#KtCBr9zk%ZAZa4PXh5gL4eRwF~o$N4mG!?X4p_Z%+7KekdlhEh)J@i;u>n ztip?E=y;>{j^&(I;IMRavFuH{-#5Mgat^Q$P^jZSugYdCsaE9J(h?+ZH;V$pV0ybp z2i1t7ir02^66v^VRA0t{y>AV_6iwyM$j5b#9*OhR;)zImJJ+nZuJaX{l*8D&Yx*Bd zyf8f=bXs~C&bJ$my-ikcJ%DAkqT{=k6lbXifVhl9KjwaMv~kknIc}`$DYFLYBsqs_ z$l%z!2_&^%OG3O}3=@7yC$>j=lG?mvPb%!DD>ZxAYXgg@YZ=~-h(9iKefv?&K7wd& zlZ5-raTPny#X*D&fdy%e_$jj>y7OW zCDrGO5!qyLT({~x7VF%oOy>O@3c2;E#>zSkzu^+b4zr3k6O&;L<0gbut-`{ME$4Br zR(C@;o!rBz5depS&Lzi%jQU6Sd34Lh{KxH0YmAMaY>>kkxR87f+ z8b-rW!Pk=QKf21hbFm@lccs1Y#GeCgH?M@5j{KG9wk~7L)XFO~cnG@_j|Gc(GzKch ztLzkDZ+Ob~@bV*0NMkO{YyBol_srh`$Vj|F3gHcM3C1nARdYho5LiG=1}00ur3wFyU($~) zH;|m-%rIF^8fLwWKSi3K@Jt(xcj20Y+easf5`2~N|7FojdMqBVSwym+Y-_m+^pz<_ zizn{!KJP6k+BRS1q3ra%#o6mHVX>~fkXd0cZJivk<$P0^upQelcCm;(zk~RvBb8Lo zhrzZVC`O8FUIrQ~6@1$nGwg74dIfTPlTNY?Yjb;>tH@Yyy-^e^GX`I=`(o?jXmiJE zDE0J-eFQ;43u{(9sw!~ZzqYXfEN2{RlImSWx-wATqpbr>v+cQ0W3Weq`W<9Gn9)!W z!d+ORrK?Sgfnynfsj$iquNh%_z8a~VDTo}c7&jH^3FW9Tlrj~Yp-zEq*>h=%=k{J{ z6O`;5x|jw}V=2LGHCYy3Y^f2kvdPYS+d>l_aHbZxlij$qot5 zaJzDXUPV;?db(y+n1dZo%3TPb>CI=vtelWJ_f#n~eEd?gGst{|GFp|^TfzptnoT$MZRvGG4kH|I;)! zK;L8UQgZ=-L*s>oBX`=xdN8cX{jE!|&hg3ICh@#^TlD zIa~W%B0see%{*F?#R!C67|hr10z6f$Y+eJOXk%H*iiZ?AV{3k10eN#O&8;5#fUBQw zJ2KAp`QY0oO>I;pKd`|k+7K;Za(P8_s-~-aS6aR_@oZ6mh3Xbhna9N zUO{s)I=Jq~*Us%(zE=>r;dmUi|-;XMiA)!oc}p4w56nJCUvysk$Y zb|3@+4qO~;!L5*0Y@nJ5)`l0!k5H)G|D!r;{R=STO0(`Yn2Ks0;%lzP=X7M`UHO0Hr}C|ey}B~zgoyRDa0#f0x=RCvirYASzRt@McV^boJxYr zW*#<8LNXpAy0^VX5Fmjp@%_m6O1C&~D1Wp?Tt~il_$F!wzrmjyhbL(l_jjVvwD~Zu8=`VoywM-=HEeB!He*?1}$n)c*8`zn}B-8#? zMKnOa6@$F4QU)*xZVGyN7!I?kN?EJGT4I3ttoyDWRYinuj->7N3qcO%oUZbTG$T5xdLc3|(4s73@n1~xJ`^_X-OSrB5Y#(r|S+518a>7HTl1GU{M8ZitoO^o;! zs{O@{YeL*pxg1$bHlyUOhv&gfzUZ>doTzE0HiotfcuJ#V80T)gd)xU&t4TBKGyVqt z$OFkbUu;OkRAb6AJ*EZjRV^{&g0wT*ESrWbiJXQHU0lh;OdmQ%lbRCqFw#}2oz+LXMLMICQrOOJWt(D_b*vcZ zhx@`f9rqRi0Rk*^jY7|Qu86sxWrPpa>LUM`HQHRQ>z`pn@>6y?Jo~T21)7Pm0uYVn z-`bfZ`(QljetsEA73rnj!swI3U~J4y4{QP`03*ee7}b_?jausQi4hm{v29l;h=LyA z|7?Yhlt)Bm^f0cR_bRj*qMYyCjKGSzrp0PkG{`c`4sBr@2UtX77PUClQW z<|HR;+%D#O169aM7lSCXe%{3Z#i@$LXWugou39j>5Xo2fP5q}}0Huj4u}QmdAC2+f zHDuhQI<}_Xe;nYnHDfpGeXc34OiLainaQ^g=iz)v9d;k@tKz<}=;IZai00 z&g*gY@7YJseO#O8YNeAzj;BXO^)S%X zuR{NXjV+Tt`Rv=9$+KWamn;_gVrJR@iOrxnx8XcpDNfK;;?f6!5xMW!J8ykM(_{_7|;obJt_i~z# zVu|Frx{y2QF0YNG0mkVsk{JalEn|FdGyiH1X$<#6FAL}Kx(WgBcmx^s;sxb7oKuco z^~Jhf6C&^NX7eLV#(y2jfzX3DmhHdzPPT%-AQ5H1+UXjd-uo3N1&|XB?TfXgUvG@D zmX=k!A{dXu^%ugSew$#=4~u#5u9hXPB5U==j!-p#3Beoi^Q>++%=_`odH>)eCW(&azL)G6DlRC|c zbF~!g+<4jQ0!0LAAAkqFyyH$tRyGC&=>)4fQ2CRt#(*ZlC_E@Lt@XDj z3{m+4y)i@?JJtZo_BE7vkW!}ye%zULL#5)c75cMANongRm&Vi{HVTjJogmKAe%_!uij_oAIp0w$J{3*1%XaDH0cSuqN1>(SOVKc0-QRi3?>}SapoT8ae`@Bke`L; zUAPWl7S<~_nEWRl_~4z_?@Cy3Ga;K>h%G4V59_mhg;OOr7P<&zU`@NF`;~8uG-f8s zE;*UAhXUY*wOR5!n2Jm+2dgaeQGDoIvz5O(MK=YcJmg7xjGHhZZVce%YjL^@H^zuX zkyx)&S6emY;}cdD+GXZ3x45(%hxgO|p!IcuBV(gx${k|HlvPqP%JhUlaxFUKL-wpH z)V@s2kGU~|r+0Ho*DzvN8O<=$^Nq6j1CgtU0d2_JHj0g$q;PGx<)hWGb}lkL>XIzx zEDXPur|T1mg2(y~@LmXHi!U{}gRh6lR~n~_NdnKu-48I9+9~T5XshXJqL?VPjBrtJ zaR|ZmQ4E{KO}yPpbb(oCO4NarbKgm_C@^Bw_fJ=-o*knsiCbwMIM`i6glR*ErusA+ zz4#`+oZiY1g}9t|Tc(cQgVGT{(P`B^#u5Y|+7fWaM8{kvt*2~w*J}!zqbEmehK#up zuFG7`JRCAs>79yeTOy~U!BqrJr8|#ya@Cqt=%}r};4KYH?fV6MLDe zs&uPJ7ak>y+O$hl4PZs&+;W2&hKnLw_MS#S4?d444rV$}MFblQ`};#EcX~)(lTD~6 z!3x&g=Jn{@cyPnGXex^+H3*|%-J&*K`YJK+%=KvK;(fM1hLRvuu-<6`it~yr+F852 zDX%Pi!yP$wy~U6nBo&VbV=I-eo>zF1YG184zMcn3sz^Ibo$DVf8tt%R>349{J+(2x zWzOoAz|;~!DA1iUdg~w=8*+nfkG;K46|e4lG|pzE%IT#HaN+)X9CeQ3ZmZov6fE`n zgzssUJWHniXA=ixWHz|*_{;x9epZe0r8Uj_zEdtFswcIzb(geYg~urE0mEt6=Pu@` z@7|xPm){*w9v%B~?;`5n_L(YohJdcWQjvm(XLC5$Uc z8IMVi)0oAM)4HG$UWSczM#?S+co?8aXo=8xEHmL+iD4f7tZpS)N5KtRBV_)}S*-2k zI}c+e*ELV&o)%QII~h&g56g2ds3}!Z_ZIAI_du49BGF&-9*%DA6om%wB+B_*-z5$V z3IB7g(7U$iWK-iM7QxAW_vjN}R4ZA5yfJ?`3GGjlrJG^zh(};WaYD!Vd$QJNjVE_D zYWhmXh5hX$C8Nqt0n!B&{7{{Y~v5&e$fzlJyHQiO0~zxluCD$$AisBYY`C)Tfuo+4)d&pJYKS$B~9A!a7`X2 z2>jrg_eb#EnARltRbhQ?O}6}JbyF>La6s&vShdl~CktuthXCfHyOU|jewrn~Iq>8A zPPZrK>&{Gm-R5&3S{Lb1}rCGEaz(r zg>hay9@C*L?EQ~eX&Vn3#$hzkc|WyTI~AdmTmB7VTB8^?PHvb=Ty|DabEq>oXWx>P zPJzr`_bO2-2CZJByKLRDglPn*ns8=*1^y)UZJ~{NIKg0bFTCDnUYzpb^Gbn$chN6K z(2rBqo@5vse$jOPXdm5Z4@w-!=O-?cjq3#JG{A2V>AHO`Tf&JuZzrnE^(Wu=h!(23 z*9knZ-?%5z?s`-3plVXD?uF?54-qhEEHrj&l*7N^#n;#BsV;>4O-D_aX~C>P;*_G0 zDs%i$ilHvGA{*{n9bm85ewf;L@x@pFxBk`f{x9ZN#R)uxr**(h6wRXab!#HSNz6Yq zB$>07&9TV9V=+JeD_ALpsqNF&3=Gnzf_HU~(Of_?+63dt8Yg9mnX+@#_XC5TdUwCJ zpC+XCZXdkoO%^4qhRRWIKKK^LPwDcT^_(D;?&4!07OBsQ8 zLS0VF(#24oPO)nH-3ORKU{DghwmeHSVd!9;6BvsD zHu?ER#P%J@UjE~v&Z<9R6bAy}1t*!x1mFqNRs=j%? zGI)F{K?c?rF1CEjFnt$KNje=y3?Ezdo$m>2UuqJgOM<;yYQR+data7Ems-;iyN7^o}=?taO=5|zWl*toq+0Iy(h7q3s zy#+ag*YTJ?AT%_#UWw|m0mb0>#n}^6n?9~k!D7Z^E1e>RTNdhvK^x_1!ui2bgS941 zm_|X?;|fyL$$Ab9^=DGt5Zq6b$L6eDmL0qp-$+pYAWE=-8>;J1ih-j>%-rb0mVpZ_ z8)cf$b$3>8v^U4LYXyXvSCkHL2+nc;^xnnLQL+=X_q_6abJ7RjaTW1r6A{?_B17iE zWg$LzG(|AEh`cu*`(E5rDZY^*-&Hp7)~)U0Umf}5#bXmwpo@{eDWz1MbltufAnZjrd7XSLkY0TbY6L6K_S=G$`{oq7LqsBG8;GqI4<6?($ritZ9PucT z!ybF6H}-T}Hc@Q%qS&)^Fz1B((Na$*FKD1XA{A4C={kA^{)w2Joy;}`NjJVf{@Ztz zhAtH#CDm4Z*;jF`P5&)7%is zqiPdU3NQjDNKF7GBx%Qwt9~!exn=#LBVr}{v}@YjgW0h#8@L<#idoghm0(m*qCoox2dafF<_6Mwu0rIZzcRpk{P5c|M5OD)lUur)GG1kl z>c2-NyEzTN&-nnZckN9%T509a{8|F~H$f>8rnBK;|E4hd1EaBCSJvFE0NUhNDvGX= z_}~>p`4$zuOvI69hsL#pDM8p;eS?y5Cfx>}pWl;a4^WQK@RaXcYvJK8zC`FqgSMKs zH|o}fl&uZ4z|1E7)!lACO@g_RHCyB58xyD>P&u&a|7!0%qnh0IG%ih=fE5HOqSCu`fgsWpq)6`wC@ml$hhk_J zI?|*HA&63rh9bQM!jTe92%%#DK_CHP%o{vs=FYmaX1<)6`EtKyt?aC|_kQ>K z@BRMv^E}b!`D}76$$8T>*_qCKzqF;HJjxH<2po_xkzetv8nbf|}g1k@E8QbM9MBR^AvwByUR|{M8^^Wx1f1hyi3&9-Jj{m*F zuAwq$ZB+#x^8>PLsX5BUA_;`$KD%f@2olD z>s|Q;Zf#t}kp$0yzqQr?Qa+Rt8%&24m^i^tV)y65-4kq6jYF}Yz>V|DH=v%E96 zkHn~tai=bOa~YjE#%f*5E$i2$;0)!GTCm+?z?a8TQ%Y|0EIeLMaNs=l?G2l1ik#ak zRp|0P+I&U7FU$A-R-d^ox6&YmDvw-_9oO7Jix7V<&h_{(Y^Suf-}lQ40KF`Ti6J%2 zSZ_wOK{nUdcqj$9Et#XJHx#eNY6h?MPXf5| z&H*7Ke`m7Bl<{qnLtM)(zLH8a4`ovGLF=4}^%x*;oSEL)cPC@QkXC%H0bb_ceNo|8 z-NS(k0ybpW5Bm+}S5KlA$q^lmz04>Nb^*amT*!<-%HjK#fW^&H2Qbq~Vz>yb!v!|(HDuK1Jnb+O&aQWX8h>LT6d@t1+Pax&V zQcMW5SA8H&xZzqxEu<*&8~PIwaHK1Rv5$&5t>`2da$r(6N2YgUIa{<9EN zQ5*gJgr)F<5^H$sUES;Pg&3Lr%#cxAuFXA77^2kIP}b5=%$ z6Iw^+CzQd!AT)&lC=<2!wKGUtzgBP61avr%Av2up-CLH-WL--JE}e9F9g%912mgRR zZ|@%vzkD-*v(!|FdJ9W3S2?KG*PNVW-nrKs3aEBy*%%wyE(6w+1q;Ck3j4hmG&P_n zJmyKV7TC0N?3o?TkmE~FzD}?03eE7u?H?{R*+tT6v` z=we#W=OJeAOe7HGat+%OCm~-X(&~JzwUrV@+X?Q4&%@?|C|~>E1X0pV=$B!wK^42( zZ*x{|sU>R)CO&@Qe?YbcA=JT4ha1C~z%Blr{5P7vuU5QWbM2d?GD^;-pTv)m>;@*1 ztU5B}Wv1fl%u$;-z!vSk9;<#S&4U9rt*ng7-V;QM+0#~w1)?J_KehAPn_O;e?sf9} zy>&RFb4;eP?B(H$<0&$U7-vdhP2$?`Zo`Tj!DsTr2{6m-R0kE)LN(b|zm4cls_nAn znxV4HrNZ2ig3vD>E1Tu|PjuQQlv{gVD@ci3Z~yqT2zKep`bxlJHiByWyEmhtcuNy5 zuXU-XIbxNT>vGo%iXWKizZI#;dPaOkT;1}B5`fJY!L0jo_VMBywMm+E=!EszM~BID z9F+ovW}u4MXRQkva&s;-*O-UlqgOm%5jq|px9Tg<%Osz^$K~Glaz>(igqDF8X(}U{ zvJa#s1hSVKHO+3n)J~}I%;4ANnaB;+;d_GIY0r!t)Sf$A)xE*3XYHVPEY4f&297Wh zaEc#?<>8|glG3^eu=C;-d`n@|#l;OX)#s z5W&kAErJ|y@?%=Li$61_32)Xl%A$ayj0eamX}up4O)S?_VS#J!JI?uh(6nv)^1s z*5ag>k&CdY!0n0pv<}-LQt5QpPx-pCZNR2RA$;5-x($fUz1Iv|7}*Uy>&SEra{Z$K zginQY$avBZI&CkIy4CXBpMggv5+hF0H5Xq}w9DWHvz`C8(;;b+&zVFuG~ZwAsSixn z7`AOX{ZStMe2(yJ;Ua1;iYm=Jt}s?*GrG3xXgdB7Z(a$h?q@~eR(D(-Q@uRht`XM} zzadgCkf19uJ6+fGC^a2yVbjfOTWK({m1LM9XRVko_`{Fj12b(W*-1m_WUaVbbgtiN zrM&f`=B#L&)thHF)XIt~9KLlAv1%i%B(x}5<`fMm<=}&5BJT0`8DjvW6((%}Ug6;p#;O-UjRh#v6&uT@OZ3e8?rc6Q zZEh=;yxA$VFN$#C5!eGetETJ)c+E{gl%Kb#>#iXgn@LeA&WY2~9kQU`s3g=~Iv?pi zwz$$9yCN}l2)wA*4S6d3$=zn08F-{(lgaP5u71c0BM1pkpuH^lZe&If2;{AycO+0S8z~X zOVRZLtt)b01bdwI(z4J^1RQXEYq`&D%Ad(9xR?HxV9q6g@cy;->^Z+TG9mcDO9>S@ zzp1a_?H=Csel?P-_qsDt+gJsmq9g1nsz4|v<>)+tx~mHttlhW%7QdDi36WWvPwbaZ z@K1hvk+s?8e_<`R_l4U{$ia(qP z`@{{;+!KmX!R9`=!Ks2FXx;YXbj7a#PghqnK<*iBfC}d-a`=@(iOU<=+qZG@Uhx{f z_F7HZJi`sYNogC~7h61#RCi^+E2&H|;=R#J7cC+~pGPixocoGPm1QWkAlxN_0;iSX z=nY9`?aG}*LWcLC&ABx1>)`zS&It#WdcZ6u(=Kq&IllX}&!pZ8uz z9G~yVjv)6Lr@1*og;C?BETRX~?VRH@3iLtlD&2`@ULs?|LBEHQo_ zu1Ac)2A==cT&$m6_rBklwQv@CKh~ccJ%6IDtt*3yq%>-a)gHvu-Sl}EXSFkFRp~pH z$jV>{a(UxPV}4evx!iUCKSs>`U7CcuD<4*pzob?;PSlU&x5A3J^#JJZ^i60cG*47j zRuzFT;_z(GSDHv+55qSb$jaL^ zZ}9yI9y95AzMIDcQ+|HxlZydQ@Dj0kb39z>Op2v;-BoqEa-!={5TE{V4{6}s2-1i+)_6r~1$69mD}!hkL{RJ2$5xKtQMrIf7|j`l3!R%0=HDdIvh1QkN0L z^@}WZ=TElxA~9^*pO}GidEMm2AXn<*Pxjw$Z1^E5N(& zD2OWPtx9{djuJ$5LTePRMA%t6X%8Ik3E}NJJ zyvxUj#rAY)fRoB>_z7Zy94L>>hWetN`ie4@Qp<5B9jD&-zo1HPi3TW(k&q99V}hE6 zy=HbN8Ma=J?CqLyqrSyl=HD=}r|&jdy%C=9bv$4`Y?4u7b&Cb9?<40+qxRV%Z#HT1 z^~2;O+;39rG0iP#kr7+sn?c=|^HcLTH#su3+He7F)=PGLAH7QSQyEIYi=$4`gg^sa zs^~~JAV+&wsM^M2L^%P#7TFSN4G|K64#E4gfejPI`8@#3sDvJlAzjVnJ>PGNlHoYz zU(ov!YcD~=&K+k!2e?4g54}bo*XDQz-xU)1JmU4VRH}=Qc6`v}>){*)mKI~v(0a4! z;d2IMg^PC*)2#`&+K-l;c20!Dr>KR|1qLm8p4$Bl>FZ5izgWn98r2G;AW(>bhw!&yi#Xv-rS$^X2OEB-#||b-3`uQ>E{}A+w*Kfzpoeg= z%=MgZ+ehH5ktmEdjGyM+8QbkHLHuBYo>7AV6^TIHue@hgw|CIrd3O!7n)9XbY?B9C zSu@oa6ytbNr7SJP+{P*`DpV0hm-Gc8Y6B%G^EvP19Y!+X~jQ zo9f=6Kz>)5bX~=*hTC`v9A`J(dcwY)aC@bi4kfrbPU*L(q`_WQw1j})Wl-v?W`wV4 zoHFUrxTsK6DJ%@TheHN{e9J*RwW@$mw!;~*bFfh~w4|`pxNz9bAd;T|VV*_E)YiMS z^J}F3^jWw%q~8BIsc+vL@*?N0Hehod%BrN?4m8h)bTvvil0W4J02G2|A;b$-pybZT zmfpP+mCt7UqB-ufOK6D1Po>=8StW}TLN&hJoyjL^y^SA08Q)FimpX041L`nQ$9--Y zrxS&!<{`BhX<%F32KuDq)fq(lA^K4QXQuGKvyHC@C|ITL_t##uK+v8N-CpgyKj`H* z;4_P-6DQox1>W0u)t+l%e(fLl#@(m}-aZj|w!f8a97W{*uli^IyYRoee-&|R_$6SN z?X7D@wybuT2VV2@nVkETrhD4H4y7pYS@ci$tvP_Jj#7gE|562mZ#hPSzsEW^MM={gMFIDYF6gg%H<=WM`Wi20<<|Mf9Fprzu+gM&y`w?o zR`lihf7uw_QBAgXUH`DLIvw7S#(ZQQc88Or5I>5Dhj?Ji0=HFaDz&ab zxqmfDdKi+|v4!Ky9||!7a+GP4>P(k8tB$@Kn(0J2LxFr{AJ!R`_%TSk1ot1%u~uS%x315?ComS~-3inVYrZK9gj>Z8R|qrH=L_O|D?&5{%g6TY)ZEV@qf;9{Hj_> zCtIgceTF(1kK6w|Ms~|~&VM!e*Ss7p_`hv29BK~ewAf@76qo>id2#HPuCY$#jk{0( E4QadJ$p8QV literal 0 HcmV?d00001