From c91cda32be4e6b39a5226a5d326d56596f4fbe13 Mon Sep 17 00:00:00 2001
From: Nicolas Fley <nicolas.fley@student.ecp.fr>
Date: Sat, 6 May 2017 16:41:10 +0200
Subject: [PATCH] at least we are quite close to the end

---
 model.rar                                     | Bin 0 -> 15707 bytes
 scenario/my_foodora.ini                       |  80 ++++++
 scenario/testScenario1.txt                    | 267 ++++++++++++++++++
 src/Cards/FidelityCard.java                   |   1 -
 src/Cli/Clui.java                             |  69 +++--
 src/Cli/Command.java                          |   8 +-
 src/Cli/Token.java                            |   2 +-
 src/Commands/AddDishRestaurantMenu.java       |   2 +-
 src/Commands/AddItemToOrder.java              |   4 +-
 src/Commands/AssociateCard.java               |   1 +
 src/Commands/EndOrder.java                    |   7 +-
 src/Commands/EndOrderAt.java                  |  44 +++
 src/Commands/OffDuty.java                     |   2 +-
 src/Commands/RegisterCourier.java             |   3 +-
 src/Commands/RegisterCustomer.java            |   3 +-
 src/Commands/RegisterManager.java             |  42 +++
 src/Commands/RegisterRestaurant.java          |   2 +-
 src/Commands/RunTest.java                     |  32 +--
 src/Commands/SetProfitPolicy.java             |   6 +-
 src/Commands/SetSpecialOffer.java             |   1 -
 src/Commands/ShowCourier.java                 |   6 +-
 src/Commands/ShowCourierOrdered.java          |  33 +++
 src/Commands/ShowCustomer.java                |   8 +-
 src/Commands/ShowProfitBetween.java           |   8 +-
 src/Commands/ShowRestaurantTop.java           |   2 +-
 src/Commands/ShowTotalProfit.java             |   2 +-
 model.di => src/Commands/model.di             |   0
 model.notation => src/Commands/model.notation |   0
 model.uml => src/Commands/model.uml           |   0
 src/Core/Main.java                            |   9 +-
 src/Core/MyFoodora.java                       |  56 +++-
 src/Item/Meal.java                            |  24 +-
 src/Offers/MealOfTheWeek.java                 |   2 -
 src/Order/Order.java                          |  41 ++-
 src/Others/Date.java                          |  17 +-
 .../TargetProfitDeliveryCost.java             |   2 +
 src/StrategyProfit/TargetProfitMarkup.java    |   2 +
 .../TargetProfitServiceFee.java               |   5 +-
 src/User/Courier.java                         |  15 +-
 src/User/Customer.java                        | 114 +++++++-
 src/User/MoralUser.java                       |   2 +
 src/User/Restaurant.java                      |  14 +-
 src/User/User.java                            |   8 +-
 src/test/TestCli.java                         |  40 ++-
 src/test/TestItem.java                        |   4 +-
 45 files changed, 846 insertions(+), 144 deletions(-)
 create mode 100644 model.rar
 create mode 100644 src/Commands/EndOrderAt.java
 create mode 100644 src/Commands/RegisterManager.java
 create mode 100644 src/Commands/ShowCourierOrdered.java
 rename model.di => src/Commands/model.di (100%)
 rename model.notation => src/Commands/model.notation (100%)
 rename model.uml => src/Commands/model.uml (100%)

diff --git a/model.rar b/model.rar
new file mode 100644
index 0000000000000000000000000000000000000000..0073e7106ffd001a03b3a18c0cbbdef29ec1cf1d
GIT binary patch
literal 15707
zcmWGaEK-zWXE;Bhn1O+p0RoEFlsHT<X2@h<0Ar>N>zZp8_tkjG8uKwIFfcIW=BK3Q
z#DGb?luU*VVhqfjp$^?ou2<-{yH{nM5?XGdqw_-dr6gxW$m;(J8(cQz<oAE5cwhZx
z4&VC=56}0ln5&#n5W3-&Z{objCZ^@486`7+%jiy;FzLjj)t6-|;|uKWpX)bh*--HJ
zf7tfIj+h-&J&d=`2uSD>ymd*U#9@LZgQYG5L)~j81}3dkk)7ge>%3%*MKIi!mtT@t
zl9`{!uwnAa6amSA3nxWqGKh%o{-kWrzvEuITZ;R#cRRPsJ*#Dn5Km`jTy{>Ur%B?N
z$-&;{#H79dU%&X3Ht&0RhNx!^>)lWTiOKnk-rW6NX879EXQ@`mI<Dp3_m68nh?*C%
zYN_uog`gc<pDo*EfB%p2qW5n<Y;EQ}{eAz>-`oF~{{DAuedPX=MPK(%yR&}fLh<+i
z<^TTQ|9Ai0*MG~buKt*RZt7{V4-qf^?wh{zPy2J`r7UrW|EzxhXXme9zv}0wZ{Ggf
zzWcA(|NX4{)BgI#Z-02p`-g5_eD`PR?N$Z1^p9`7c=}D@vN_)}&;GExclk}N@0)18
zg0i?@{EMz{3}*lM<^S!Qe;Yo0{gZcj#><VDKOQ|MpI$Gs_kFdUxNg~(`#<gW&#0e%
zVOpKtq3`n(=AHkzj6HnWy!#<d**A9vC*`LW|J-@<OSxFznHsC2yw@*pZ4LhQvb{O{
z&yK3!bq(IKT9eHF@K1g7cY99a;jcb+)zyF4=bwN3=lIiVgQ)*{&%f)(ybj;JqdUC5
zR4f1XxBq4SMeo(m>kIC0xPCYGnpNu7N0Vx6Ce&CS?rmu3t=MC`khhX~R<Lf-zuV?N
z)dehKZiYO&vGLf-=9{liO%ONLyC1%DZ~lkOuf~DvFUU*(om+QhefwJdRgJHN_jZ5t
z{#DnecR{7U|J?mQzWV96GJnoIu3j3h^Ih=b<z)7l)62i=nAsJ*`1-xExPQ;;I0O45
z&$QAL7n-dvUjN*5+1LHSny>k9K6Agi{=rPMK+XlGrh2jOlUWtkyEJB>S@&hW!@Vbm
ze{~qR?TY#<=jvs)&->7PiOF9S#P3aD+>^lf@!-<;ij&N8%Zsxo?B9DXdfEovX<vUb
z)_!I%KgW3AA?4Ptu+<f9SMz@VRMnc=|HWPZjFo8e)cX(PtN(M!zP<2#x%W()EzcL^
zJra3sz42I>*0w8wwH|eog)dsjmEX@^xtQ_OMW#zh%btioNjP+)n@_LfWO<^=p**ff
zq5>Qa8<i4w?Jlr2oV-bY+V0i2xsPZm2sEBLy6MZz#seRvXVz?=XTkJ|!TiaTqRk26
z0xOTP-{#-Ag(LCD?czBSf{fXQp%*78Gu`QCy(!6cvgH?RAy)^BLc~Oa-7`*oSfgkd
z<Fts8L(Et>UQ)?iv_(z3BgA2byT^pE9IiJZ5(%{%ehMgM``7P0_x_bvrhr9^$dQnS
z9SUcXmo=(*DT+yG@%b-Y$jf{DZ5~T?h5o9O_LCne=kM&lsC_v!`|bM-tzC0}S?*w3
zzWJE;B&|oY(vI<*3yqs7m6dS6Gc@w1_{sZz2SP<$P0sd6POr{(U43fToWz>B-yc?J
zaVdcmpN_s1eZq&w&TMAT^9i$<1CnQiuX5O8m7+9nr}na4U;TX~`Oi+ABz`)crGbx`
zp@NUsAZcZ1%dsCR@w#u+7z*YvA8I%`-B3UC_s7m+^=Z?eFMZEZ+-oJ$dwm-JS=;vP
z=+LljoJ$-T3xa(@*DAyacpPQ&nBt^k5t4j(wzB4H{wo_<4pn_(TX4*2$MgQBmlfGL
zu6xJFRVBX2{rAQ6U(N0BUsLYh;;?)2kH4+<|Aoi3e}6SDdw<pKsONKT@xxwOvn7nR
zB&V7k>3-GrMuPE%1^b4E%%G}-^Ckb>p2h3FYG=q&V7@uQDD{jw^Ty_#CR?t~o4!XW
zbGJZ{cxdO=+h58fuYQ+lO?V|zf9<-iLx1@0-4T{Kky|#F+PP}*u&!PyES_^hf`>hr
z<4N?ygyTQvyxtzt@lRV#_?9R*fh4)yOIrT*j_9A`e|L(X&d;rS@DUvGk6x{xkt)r3
z$jKTO+m5a5cY`ii_=Ht*Jrb3OZew_7@Z{UNX#4n64i6TtZm(wXxO+RzF=Iwc5$i!8
zS2yk^P6>+;L5|HQ!Y-|uaoVZs@brw9Gg8fxTyu2!W^y>V?TY#ne3{2tFy||~wovjh
z)7oFVj(kjB!T$Qe7C|NPt-Oa9D=<vuQB+OtHaY*qcxKD1y5vgnGjF||xIzRjZFpK`
zp(`BnNhaZ)udeOFU~%6)H_D|Ob|wGKH0oaAIpfe>(>W=VH?f|R`ow(YQDV%LJ_S`5
zj)-y<w#@k_Ryw`o`qR_5FY0#(LwO3rcOPDJ|CusecjI?o-NTsAF#F&XD}ILP=N!tN
z_t(u-+`72&?VqKr{QL|SzR7BHTQB8`->7h`3K9rf&^EPonKa|h3A)wX-^+9u!WjGv
zvX6;JoMYc{{oVH+2ecJbC!CU%NqF)4lY~O+b#ZB<fUo762bgy8<+UumP<}yr-n14g
z&8eTI-H!y^nsM>w?@Kc8oqDyaee>?j-s<=@lke}(XNS5)c|pm(Z*|q|ne{#s=6+lM
zfuq&r$jy~gE9>5=KH&PmStE7-Yr%6{UZ>xt_uA(ur##A6pY>}-L@BT4DxLiG_df4q
zENPf)8Kkz{!@HzG)<Hag^9q}@UsF+KW>Z8`5yO(aHD-ou)w6dxJb(4=*+eXv*YHv1
z#3^6fUqv*uT##y(IkY#3b>U@2;mbc;w*FeajHhE(N=lFS2M>k^2J8(FF0*O%{H|YS
zepu;eexd<$%L6$PHlLlH)$zfS48NhdYgT=Xum7j|_w$sB44fC9WeyCESh>7<-~ZJz
zIx#{@TiArI9?a}nJi%ZFAD`gO){SEFXU@&-?phPuy;{w9;@|Qln?qGhJ6c_s1S~^x
z(m!gRVl$iS!}Uni;(FnZd0g%cm9@$HPjBB}-Ee#Bo?gvU2YXY38V*ElT$c1sl9{pL
zSdrxd@1HJ8hkq8&EiY2(|9mZHcQEIT38rjDq6Sg2Mgj%BCEMOqcFn(DuAFB7@nmPc
zWP_Y>Lrn(Tw3@>jH^Nm;ygB{!WXc2HDGW7}*!-7Wjh;F$;*ia(=mLMAc~Yw@oVU;8
z=Wo)`y>s*GWK9bnS9Nign8wL7o<}+6xVFjujxuk5-?!tl>h1V*^B-UND3j+b_GrF+
zxcoQizcY0H{+hCW+tys~SHGpV>3xg(vypkHuBzRi7u?xeA@{b&{crzw#p74))dxTR
zEmz~3^KHt^AlciSKDJ#~)3XznsyY7hs7%F-&2K)QJ2P{w$~-=;6TVE_5@Rb_D>;nq
zu3S>HUstkPVR?0V)Ya~X8tzK_FWfL)9_P&;;J@+x$Ntyf1D{^A-#0hebg|9n8ya5O
zpmIrQ=_2tnk~iY+I)ICR6(0*7^;>GzE0um0g~Z+UQ4C~g;R|10yU?&8@~Y^O4?Ek`
z4^4EC`H^jXcFXn0X}S^FR=>8b$$7DIx6hu2odOOqA}80+uF_<B(B!5e<g!RG@z7#^
z%S$EFi6MWUiXVS#ZyWjSP{*>F8=H;ZD_8MOYwk|?DZSV3cEu_#oe(o^ZFX(1*}^x1
zU*(*f;b+MlkgOO}yxr*Kgyxp)W$KGRNvrJcerh<arTgjn1qtj959FE{my1tKf6e*A
z$=v8?exVHGBL~*~J$vH6&eZs5)!HL_Qgu;l`qKC745l}qKYQl$`t_CbelNcsdP=!-
z<*esy4`M}*ge2@xnAqIvD9|m~KWFuxcwx!B^ASaF1!gt}Br68DF1)PB0V?aOsuGS|
zyshlF_H0zrMNO#~`I|NmQ+||O4wrS!k1Q18l?~rgEM&j`=)t9nn35JePvLRBXP|%2
zf_YB^f1N|-ep`d|J=ffx$LqfR!eArBP{YPEvsmc6+;m%;{ZBSs^k?MtXP<SyN0a$o
zol^NCme3zt5`)j(_4(7(q-l}Bm89p8z+o)&=7Q><MS_WYcAnc^B>_&-E@}-|B%X=h
zngA+o4cvA`SH~qS|9bdhn9A!Xn{6dieNwLc-u<>)YW30^n(J~BP94136nY{)#O+Q4
z-^~Ww&CS014eo9eUOid%>cpCzS~D0|74WTMR=@mM?fQk@>nksd`RlIo_i4SQyVmh{
zt4!?$=i7U?N^O`~(7D9nVL`B95YvNZ!{!Sroi0j;lb`FX<~Ri||G~w_b`@^tWllVT
z>!$5Jue6lAJ>dV^C;55)t}~rPc2!<_zP~r*(i@ShW(KJVFJEe<=&zDKtH69Ffq%w>
z%d=19MRQ)B+57WJyzaYV2Ak&$KQBny^@;3?o0P-y<M?E6@8U}ztrCwNetdQxN093K
zqO2*O6dE%P1JPPc<?z<c-59GR<}2MCo(J=n&-P)_T%~qq<<2GXA?7m<@EabmOJVk_
zRGp|?tUv9$<pH@8hVqmtMFke&0&BkPeaN{<?4#ED@P`LhdAt_(Xgu^_nbH#0gKWv-
z8Q`Sdw3y#9{>qCVHY<eoHvJBI{parHv#o-@#>s49VrzxgpI_ct*5S*z!tjjtMFmi)
zlh9ijuqEf)`RQxIXQe#&e)zUdQpoJ@rK=2HNd<@a2Q4#L8!+=|RcnC4(i9I}!6y+W
zhbou!p4%6FB7XChiXR<b0+w;T&!+5cFI#J~|H<3M&$(u-WKR5e?V1!<-qWmufj&uT
z<(q7d@QJh99QELC66(o0zky}3PvjHr%&;@5wu!%{DGSVE+P)&m<j`(J@&0Z3GM;cB
z!7Mhf<ld~3eP6eB-kvPj;*t8*x$GRn+Xc+46--v!8l->U{pQ%~Z)H~*dYB}PmY$up
zzvR>Z$)~*z28$}!zn;d|nt07uII!REGWVR{oK?3c7_b_OOBk>SS=xn{^19ATOwx~a
zn45J%J47upZeehTmOx|5%(Kt5>SL`YEw+5c7JPm~u-)t5GYS?zH9dE>)YPRTKEySX
zLFyR8YZ<Aq&pcm}td`B!UVrm*4AVNMaGv$P^An93OAT8pO}5?Pnz5^NdGq639V^|C
zqh>Z8=GyKdKc1Z0uvjGYNz8dKsh-s3K^1>mb32O)H|<XfoxpX1GhNH7dGd*sP9Lw>
zIUG!M>RG?CH{{;BjW#nKFW+-uy1<&jvV}LdlIK~nRq-i?qK23S>KY2iK+3>XYTm@l
zyu0P}SMzKv_)@8wR?OW0M$&kJY|JOoP4{(TT$f35uG+oq=)o5umrseUjbX5C&`S`W
zA@!N{>f^IEKihR;Y%>?IKNt3x@M-<?_=ny7;x4KjCTsQPsOGJ|dHVum3Bz2*DOOS?
zFVxkiO>bJV*HXN_{Nk}+$7HMIPHiwbU%8-zJ4j2C$w2p+PENV4vVh>E*J?ISNjq9y
zI9n`qJZ9vrleM3idCb%1?NTw>BSEuPr0%MpG4ZDORo>ESb{nTfj2v!i{r*0Z|9Mx<
zxLbGbdV_j{`(dq^o2$R~$evufgfUoDsdB^Ht^LKDa-&yoSfh39$R&k>9hx0084Da|
z99IRmiw#1OoY#j<em3oe+HLEt-6ly3mb_RzD|5DlvEH}$`uuy>9OyOAHNP3aa@0}l
z=-&Tz4?J!>J-F@yhlx=C`pa7v32ENj`bSA+i_p(Eg)Txdzo!3o2z=qad(X8Qo=49g
zVCr`YPtWU(R#d+E;c?QntSC<3yTxl%HWsd5cVw}d7H5>&+tM&53;r!xFG8|K9bLQH
zj`5t{yY}7Qeb*A)X5H#|b%)U~pm?te%cC71YI2R1o>w$sTX5W9?MkK#FDG<WJz1ys
zeRanDPx`0VS@F0ZzJL0>-K3pPns56~OHahih<P(vm-~D<IA7!oC?nq0{#Mp6>m<~|
z7rwZwYWlX)(#)s-)pKPhtn6O#IAhnppyQ8TmIg+~>%?6UPE+{PSP(22*z};ujZc)t
zN#~R3mep!TP2fTjwUPYcypN>pOIyQ<8}(Zr@MthRnjq!cwb*{=r)TC?Kl5E0*en?=
z&PW<PTeP|YWZ$$|j6rb=+7I2op4|QZ#!s!cCdK_nYb;FD9&BqoIIoHExJaY=k%ZEt
zPqb5yX{{8yto_ns*7|>YvQ2G+)*W1I*CO`et;e366TJc~GRC#GGlZpB%Q#gSgqGU&
z-dl9gWUb$f>pK2wC8@{fZ>UaTJ?Yt47^}sR84;CmiF-}>{K*Gfi-Hnj;=G#VcnwY+
zU3lGZx>0533Q^UUJEA_k|M=pX?LVuoXI%{o>$iOs^lWAb7A!o>;HW$$wS2B{PF-S>
zexkd^zr9JVoE==E0+Y721vMsuyC=uwEG5qe7|pwVWxj7JPjt7|tQSI;*+piqlu=-R
zWFR|h#mkQqJY?Sc-I#St`}&6|Y6==5P63T+GoO4G+iWO*e#M(`4IhVq6)jWuE^2<a
zGBc{$Z^ov|+@)^+oZlaQ_+efB+dpoel?y(-I$U{nmgB40TKkX9>eIVi#TK<~OT$yM
z87aXlj}`^RKa5fJE#!1!*S?~=xA^JxAD1T?Td&<+zVoTvw&P0=*i3g%tk3Z~z`B7c
zWI|MkfzOrr&CeFFZeq%r;Tz1D`Sh5-?zR;l-`>gnu%vLGoNSNHo(*@j(<X!#wZ+%W
z?9sgvV&r9@7ZPDTZ(57C=ZwOIW$#OZug70o_3GX<K{bb)q77UJL<@xWg;aU%{B+Mm
zt7pQ#sNdahnjW>fsB(y9sY$O%58fXBQRBOV?gilzqrG}2TC?{j?3%jQF3NWyOM!Li
z*S0hBX3VeiS@Lq;&&Fdv5Bb;YJhl#dFd_Csn$F&B*Q4cF(;4P1a{aqnMnRl|^AK-E
zYSo+^{kOpz7$X>Uyv`bb>{--%w5a6>D_4hS)QRa^7`~^UFxbhx(0z9K`_Fmtr};OT
zwteif+5i5Olya$n*vs`HDN_<+R&0pX*pl)()9P5upMM)>Ec&=v$t2lUu0F!J-QMWp
zOa{B%_JX~C3*!FmVEVU%?cV{D`s5Q0YP*lu@89_JnWe|w%D$)3o-Y~FzX_a4lJzt;
zvfub-^@>Dm<BKaEIn3Q8%u}s@TdC}X_rBw4+fK-C5qjS!?eixg<e2uQ2~GcQuuW}U
zlrFs{BJSlwrk%gma9r~YaP~SpwcBdj<S8$U)u*-DY`s^pHS~h%kJdML0{>s`XUh8N
zuJz{M1B?0smHT(t{og6XzUx`md8GGR_U_%w&vaaP;B4)0Utb}<RFPGSBmX_K`}ZfO
zXRLewe*MF<?;D~Ys56*8I1^p_)9uktrzED3hXPZSwPNBPa=iIxyIf3i&HTcmn8TM=
z?)#b@-P#`TnrBW{X_S2Y({J-PWF|B*F1}~}dU1n|IoIKRbG;l>ZL+c%p7;3#)g-;|
zF*oA6@i_hf?<U4bMxCcR+bWH_pZ{cpbwL+@YYMgD`m#h}sUz>d0Apr0In#~pzvZPI
zHs7;8rC}Dd{nyQdN4K!de8TQ-U}yF3P38gZ2Gs-E#aA=`+UnM?Q#MMfD>eKieCN!c
z4d)FQ&oCA<%z1EqzR{tY=M0tyv=^vePSRfaj7Q{LLz9LQmo@u+`&U;S|3vMYenHoY
z@$7>sd-&cnpFXG_p7lephHsxxmRmcM<gMkul11NtY0wOC_BwRYxcm99M!0K#FhN|q
zzk#`)L$bE%^ZSTH|J$cNos*fmTjgE!<x>W4LmZ-4tVo%>ZOP2oXQ^UIcfS0$dEoww
zwJA)c*kSvp9kU#(H_Ii?d%&}DnT6caZ%f7dX9_M^%&);*`*T{)3C6z<%J-;N&iFd(
zd*`i%+GkX<K-77aC7ibo>ZoLM-a4p#rcrVB{Pk+KmEzNPg{XJ1a&>qK=v=lt@GfP#
z+&3Pf-|U=kdrtOkTP+vyuJFo~uR@YF2d$vvFj6_EH5M1fEHq@)%H{A9P}Tadpz-d!
z8wcJf-p+5I-h6ni&K6PG1Co+n>T7dWuZai@IH_@9XJEoE->b*`)?E{`{q(iKYUgJq
zljJ+w*K6LMIjQGvlG|hRG}Az(fA@P2aF?*$ojR*?(|s3<K+u3yl>>Xl0lAL{mwnmP
z`M3sJiY;UcTFbHA(b8tigQLuOd%m|h)ol22Uf}CtwV=A}cC9bYQ$=|u^>ELLi4gbF
zm9)C$yYXRLgthHuZ|>h=6$kVTgnOhuKDzT|EBEG^<?3lSzOTw@yyic1;$H@5v#;@L
zX^Vq<s;};8Dp&B{k>kR7ttqkZY<8p*$Jqr;7g$d*6*b4j9NoQK<4(A$b`le)@DY|`
zu-<HOkR|uuLyx)q0_OkYH8#B}+I!%hUC_Rb)mpEn9PfUtvY6?qYtu{D#oCvc%a>kO
zHat}~GquX^xLZ5(W?jh{-{XGG{OR*<vHsehuLO2A_%K{&h>deRba19Vf9S1O$@k+Q
z2ybXvHSu4N!3@7MU$QJFsF$`JmOK4DV(vAe9};h_y=LCc6we@dgT0LBz{DHpFV6qR
zz<z+~2g7`Z?AtT8IedZ_T#-!KY>Mee5<h(Ya!0^ae@64+ZoA`$?|#2>N?Ku82Y0C`
z&!n=OleLfN1g7bp_jZz2KT~_})6w$MVBfjfvyyL#o)Q)i(NffK*zEJWGJmOx#);EU
z*KaFe&t;H}WLz4VDw0?F>E5aamP-t2so&3^wTe0UbZK(n+m(e!L>iMnt*z{`P)%9H
zbl25cW$q5wQ{6`Q9hm|r{q3-D&}LBWj9f7zR%1(Q*7h6B<tvXXYsqfvJ|-FVPss4%
zp9f`Wi^C6aY+{e(Y~f@ooiP1v^0n>>eor{-E_*r5J<&Kld2`eS*{sM$r3<ndsux&_
z8t*LBYfzrT_f)b`>4t1h8cTOV>4xb)8rhlqg#HUCyt!Mns*|-SXs0rhSnOejaz0)?
zWut_uV*QU=KYI>D-#O0kbE0M~xQv|hFeq+|LSLE3@1q~}uFsCBoblJBX}4O?L9X3X
z%VJVRAt|kdd#PB@ynDUdY}eKDTraN@oGG|i?vd>St8b}`jZ~F2tT$IM>|=~))NhXd
znZM%Ka=D419OSe}sD<0){1u}vb7;t_<_H;;UlcpQ_vXXJKZ>!-4)5Gk`%ixTk8Mik
ztx8Mef=;DxXr7~}d0j2C?)rM&^xCTPGq#IwTdI8N<yXUuZ~B||?QIY<S5sC``)W5M
zSZIG+^u6_`j6_d*ZvoZ*3z^Qk9M+g8pbcvvX!_pY5bOQpG>f2{Y3#?c9Yy<(toW_1
zAXyfEYOmzJMGGedHWn>9STcLFxbvUedrNz{k~c(XOaSFVuO_J$Zc}0ItCET}Tc5Im
zJz^@%v#3J!6*PrRS@!-2-<xA*`*xh%viCrz-@NWs+kLNQ{tx+SZk04cOWZ2piC)Q~
zN3(ZKxfCvyw_~-(AIlr<7iQEmothGVXy=XpZ$71jw_8<R^hj?1H^pS%@y`#hE;7%H
zdb^0vq5j{gvj4g7KH9rp4ocl&n*aVq*5{Mkx5#{pzI7>^H}~|evVX6{5BXNqcUdW=
zBz@bddvS?sVEFFSw&foxmgg()u8PR4<V(JLXU4~*x949p--*hS`2Dr!R$iIu#^x7w
zyYk|Kzxo%7>{l?%)@&DBfA(cv-|=LPv#P)UTW+lCnzyyG_Cn^lhi8~Shiw;oUOdb6
z%a<M7zOBx>e)ZPPpV#F(%*rFmPs;9_$@KMt_MfZow7%{ZGo1c1C#$|b{<STq{mPvp
z-zH7BpVhu#nY!}CtZ$b;DK3|Cc%oNXzHrJjk5m8Va|hM_xBqoo^G`?N!yo@0>VNK#
z?*ChNekc2n42RDfk9@!XtN#Cgt*>=OHnwbf?*D&Gz9-86;@+m}9~!A*>ub&1`)5_u
ziFf%$UH!LRYC(8#)%;)CKN|0U{l{DX{)7L+kb~C@+%9!4Y`ypOVf~xPe}7vJuW9Vi
z{TR};AnVfS$tR`+{V|rgE2a1%&0&kooI>*wm$ftIsa#TszVP<eDkhOl(goW-6unMl
zKOZfZ)WY(v?7!HI8&wQGE{_wRKQ2E0W$tZ$No%3J-29w9Qk#n{GxllLNmiF7SJ?8L
z5dCGYvPJxy=cFP5z4E4t7N=>>dFp9}*UXP`q$NdPuu&?v{#cW<=ZBh7VdsW-8n+q`
zI4`QYzQ|NvcUET9f9X?GbpF(bDFqqy)C7Lo<ni`<<gxZ8JW>+hc4|*p7u{jY=|79r
zSNF|aV;O_+x69TC*a|9q(wLmWU0!o)eeh+@ynn)PnbS`AIc%_2F?MKG{mAXLC+3Z^
zVAXm<*|!&WZajF~uKLlh+x>^W_-}bqxaV^2ajvUdU2+mys_QHi{X5TI|J_)o5&iY;
z*6(ro57TBYxMfjre{)gi{jRuFC84e`1%v5pe9NCMzPP~U(!QCDMFAf9do*g<9>r}J
z=;eJD{5L-{djIupe<DxKUcNPEU#;08pMP1ix1L)2S*w1j_g}R+Pkpy7ZFbmwEb-V8
zZO8VAncsH$|Gk&qd|5{E*H4McmN^PWT4k|6<7RKS%l^W3)$Y?f_GM2OFJFCblf>my
z7Rk3+?Mhy;FJH3!{#CojZ$rN1UlE>>Ci7lset>=OyZbkutYQ*bYjLYA{eFDun>@br
z7n;;}FHiopy6bSC$)m2T5@l)&-f4*!7R?LOzbd%nh)wyf#sBLj9D00y-|DHkI!Twc
z`{GRxt#}ypX`{m5#ZOWUZ)?^$Bz3(yoA)Z6kAKby@uVha@6#Kbiu5lRKGpLU+hg;f
zu4Z?{#+ap3S&dacT%ORbdq|+>>%(UPB1@jK>V@C1D;B;oLHWIv+Tz;db^A|e+sJG7
zR@yoXnO_jHY1F%Sb$auqTWn<w?tRR+xC75NU-+HJTJa#nEqq>Q-;r#`BzDGdjfl*&
z!*zM~i<f_@F`wFe+~c65QD*o_g@mrIJ29_5E(<N3r}^1o<(`Pc*{@HzWYinX4nI5Z
zQTgrLb5>qu%>24LLo|uc^2QtakDMFszE+&VyX|98zxtjxdo88km|glDx&3I^+~xlJ
z?mzt<we3ugM9zkS>K!H@w2y~`UO#(i@neIFw>85W4vMlp{Qf2L+(Vb1Jx6vfKlwt`
zeB$J5Cnp=8k<h+&XLjp5n`gf5T(8@1i5jOb6MCzvywfq}W}wKL1x}NG<UWnBsXW$p
zdQ04jg%7U0xprs1?VpOLxlZ4of7zJ3Qd&Y$?oQ~hidl6QQMoVf)IYVY&i`hyeMyE%
zrr|@DLsOH!_xJ5}_+soo?b!O+XHGpixpmKx+xu*61k<%jEuw1ko2x=@$8HzY3|V!d
zBWOeJkA(B4?o-pN;vO(sd?^)ueEm#z(Cqq;vu1wP-KMm#`_Q51(dB!WE0zA3lcjOL
z_GLinL$|%bY_0l|<u?r@)260<2;3RD?V4`rIWfg4KMk%Y9n@7eekOKfqxf-u%iu+<
zE5l?St!X*pB<XOgOf)Na-jb&12Y>ePc-)#>TN`egc{?$8!EU9R>Ri$O4gb4eu{OWe
zoLtoUWWFKGUf1(C&P=;GWwk>>SJ!Tvs?Fb4F042Cd2>O?8CkZPuIC>eJ0o%q<jOqt
zoxEewx6q|NH($1|s?EE$HGKJnhQ+hO0u(*#U5yj$9$)#%^HqM8Mo!V2ocQ^+`);zP
z+U}LUu<Z^1ffc7-ok-hv>*%(YoP?gLGO_*o>*JSIc2B;$X4Qn3pEgU*n`YK!XTo5e
zsx2Vl{Y>rk!Noh|+EQ3mnbys`znp0n@1ebUno_gREa&d_HZ#x7dahM3qx~a4<D$Xj
z{8`IuD;Jzzz2Uv@$1nRXG`~JvVj_`w`}VVy2P+qxT^+QJYtpYQtI`*>lXv~LTiVsZ
z)5x^euWz>HiTPVrX1@8X*t^S(r;V$&+ubtavDd8m>wk8K*Ghl?RBTpN@zsh~W6j+k
z4=2qDDDw)tpm?*!ROEtxTu(yj59fA<yytm)!)m_&wyRmZU;b_OoCY@@!83o`7Zq9@
zW$twpDX{xJV?x#yFWb#KHU^)r`~Ng4LtyvX>TL>#MQ>f(7QN6y{7A#{kGc8B;-+7S
z<=9j&x!EXw?X|5pgVq%-Yhf*uO7Cl`+I)ZcwXF-U&e?LkN2_1|z{zD_65ICH&5oX)
zCS7@Ij)L~zt$oS@TU2-&nWLvqS~jmp{Vq?b{Tr*Q7i@BhTX#mkcz!PAXaDj$t2(c(
ze7*jvz1NiQrprHm^;yvsb|GL^yuhv>MSoRFcW$ZeGnMFEz4`cArz_v|H`qN9+{>Kn
z%(b<VX-1EPVor6Tt;-T)=5^-cwP$q<-S6ErjlVeeaO%VT-barsf9s!M#h$<GY~88G
z7A>o)a?z{#)@&8a&x-R|85Z+{Gkj|7<;z!Bd@EWWdB?7A_j&253D4Kg5AM>LviGmQ
z|4OT)+g-IaG_>_Qo*nr=P2<VdMZF6i$uBtK_dLn%$<O!t&n8=c-1htAKl6vJ&!?^3
zt(?q~dGPwe&J$8yj1MDchW0Jnoj>`OObYL=rH?Ni)ZTSgN9NHl`96U!s&*L~W`}ZD
ziuTM8yZ5YE?O<!(?}?$WLT8s%tjTI<)n>b6=q5J1hVxzd#^{na8=aXp9}!!-LTTfM
z6%W5Vw^x6BpSk>aN1=+Tht;ZpknB@^qTa`Nb*5eU9?iL`O-}W$===Ov&zS`|83PNx
z`ZbFew<`z#obo7CR(ev2>712+8k!HEaxK^pT*}VpWc;|NBrkk@y`}J<D<uzZO)d<c
z#qOZYCiTtYyxViLqcKnYu1tATV_m?sR(-zz*FTZ#dXLS!e9q;k=aC6#4L*fmy6~^I
z*NJQ6^=s~zgSIbzn|0|P*G;RBwxz#TJm&QI{zAH1OKIvB5w+=`dz~2yg-fb_3hrC}
zVPRRI@8<HR=H{n0u_nAr-PSt`6^9g_Q0O!5{+5z(kiYF;(c}5kFD#hd<?uqpeKKp_
z^!AhNZ{<aN`EGh`VdGda<9tjlr$<ilSM47<Et$_UOtl`FyA>{v?PC45yHC&c=j-$<
zuSybbA6|4g_oUasZBH&lid_70Jy_R$*^TOmnk7$J`BZ<r_Ri3K*`*bH!|V51ms=Z+
zFWAj_kb69=Ao{XtNKSHer2Dbghmw{?w!Z2)XV)1dRppzsttsc`gp@0JIgfp3o7DK+
z?-rUWenC6y`W42hv0s`qBbpbd?wG}NRb4});835CYdXgf&)#x(ujw7ZZ?0W=*HSda
zUGl_j-78+-l4IYSI)&a{QhoEp?bydpcRW<dXq+_Tah=a&|Gz)uC;mzK7$|vc?hciy
z52Ym1x*XG$%YHC%x*xsHzu<7eVgEUnC+_tLbk@tLbO&gw?W<jNyl&osm=?=ADV?c{
zd+l!R4QmOSJY$XPue$x0v&-MSVQo+9Gf&K2p`52K8~J5rr<S5%`PC0!HiRvEBx1Ac
z@2|{ona1W$_q}Z4|C!{!^?U?1ke=;Uwx7K0a2waR7ti-f$@Zsfl{iGkIHqYG_V+D%
zD=?=qq0A$#k;nVzj;lKo&(0{Dwz=Q_U-LA%hxaF^vu9s^zW;u<zt!j7Ex#vN-TrXq
zN`{zq<VOhuH(Pt*fA;I+7eAhTw({lOMea}Y<fhEMyTpFQo_8OtQ?<@XC@o7i;a@Pz
z+5hu-HnF#HO8bo+Bf|xEex7I+_<iCu)lXmT4?PWft9|xw?2dz$WnN(c0a@|qS1*3H
z?T$$9&JSOslG3}m`~m`P^^Z?>(RF3&50#r5xL#~;^E~AgmfByI!Y@z0-~MS!U$o)>
zyJ}9iciB&^?VrVOv5N2i?lT)hi*G;mGLaC!z0py0@l})muhhBtxhJjL9%ZCIv*J|l
zUf~7o3qI`7_*Z1=z}&kc<6ctOBKartlQ->uzdSKT-{$g#19$4=PiIFkAC3Jp<(P1A
z{<bTcdv7TC2iR<Gh?{Xe<0rSK#-HAQ@*;Nft7ZQ#VQIV5@I3$O?v1a~nNOY0W!UxI
zLNLr>%bL5BH(oq)v@H8c-c~Ustyy!gblmH*NUjYO+TGrIb$_({nOwhj!rtY6n)@WB
z`(G!BK7F`e@$xCLn7%*%+f1I?UHLxay`_HBEna!QBcA`QrhMI-!?b66+VS0**;3Dg
zPrZJ5!AZbs-4vcb0$#2QHr#*tD`q3R&PFq>mHWhh`cGN6^z$mV?Aeq5i7(d3KVK}9
zt}J}*5HH(}fD6%|Lu6u)tlL)e#8=`)hWDGsJIC4=G)bMmKgXva=du4U`+2MFZmZ4V
zYd92_s=3T!r&{51aURhx@*hs05O^nJB!1Iq(uBwpcmJErxK)26C+nF(ioxaQW<}<U
zXDI%<{I+msnoqR<qxwDVntoHh?WmM^f9Cv0!QUTmT=Dg-@4eBq`@^HB$D^1mKW@Jj
zy5DMTeD{JMIn_rmf0ir!FaBrCu^YS9{OkJ;#4h-}Z^8S!pEszoXzx66<n%(O?>o)X
zv|dbXte>~;nt<|R(M7M#6iT#xclT;Dd(2pMG^yMnqSn~*$5H10qG$ij>#E>!TK0X`
zj%}tIdu9lz$9?wm>j>XGvE%#3>x*ykn74m_a{Bw9_0LtGuYSlZ?rG%Kaa8y6oaytb
zoY?0H?Q&NMD|xQ^+-^bh>)Y)-W_qR4BHzP`%=1?$R6bN^U(m5bDdC*kmjsTwyZaK$
z+hrRiriWdsd6WK9L;mld(uFJ3-e!7L|9^f{;#Y~h!2OEdqSyG>+2!ON<<Vce{$HX+
zbe{O)kN?l<%wJdUVp=oDa+dn{!+ZYqY&!p<eaSny-d#D<U&l{S5uVw8@zJAhZJ9$A
ze`XtNe>wl#`BFKbf!S}h+4n9^^H+W;e~F`R<;`}#vzqDiFY$Z)n<`xz>G|0&^7)s;
zm+Y4b{9I<$SN$tte|FoI2IF6iS*9h=_%41o(aF>N73y|2**@Ukf`~%n{lfeEFQ4vs
zsek#Ue@N5aED7u1zy51yyykzUta^C)r!6yic<u!Md#QT=tLXg;nSs;eS=^O=-iSz!
zRj~dd6@KxrdF=MaU%GGdpHJAdIbr>U%<RJ-PbB|-@jLX-p`Gi>_Z&>!E>rz>{_%<s
z3DXyUc(T;PSR}1mOPeoUv$nU}GBZHoYW{{ZX&UQ$3z~CnY>v8LI(EOocfD?h^{hOO
ztGu4y<tvXT#cZsP`ROeC=YQm;a+ZRVeMww$KGS6XZ9Z*!ts(WMGP|3}jfppMQu7z)
zMezunzODFAcFI@x!s7{<$0tW$*m3#dIvM$Q(U+GO8D4pJdEL?b(rfK5)kM7!^}L*~
zc#SzQY~jqwwjryJ{I$F)&ZR9GD#I-*euR5XSWtOXX09XCy7+s!r)r!%Jws-FGUSbI
z{`7a>)>O@nJKDc4R{y>4Z={j#>hGM5zm~>%Zd&NQa>KJ}*Lr5(QhXt5mzk8Z;XC&u
zldsWwCA((xy?Ochxl-x13A*-N54U+~$K{-!9b@K@>UD4{ch>F~w+k<(Cq5`Wxi`!@
zS5#ed^CG`}zcLHMmnAixh^x(CTjF=?%WtF4ugh*_Ke^ue;$JA!fqw}ZrC0TD&Q9DF
zc;lDd!*53H+iR_be@iq4?{`l&R8G(}`?Wpb58uUm>np0()bh<*^2|8zn*XXd?Y}lG
z4&5qy<k8bkQ>H`n-jpBz6=RsR@srKQW$O|v%r>zF+FYM(abso7&2r}xi-Vt@*|@6L
zc;b%TQ}Q{@j-Gh7;{5s7k=G@CTxH}fh1ZJtie8U2dH?R@j7`V2EX)d*OK+Jz=W%QI
zlKbB0=ij(AL(+TSgYwN2cSj#&UcX7=>Ykdb(=3mkD>9#7qi`YrVBflR^S9pT`LC>#
zmu<TyCQ;SvPWCsiQ|I@m-74#^W-8Hmd}-qTz8g{V3Qdpv_CNGRcgMWAsQq;hxLG%<
zn%zEm^TzBZiK{JpHrMU`b+Sy(%3k7SXV>(HGXih?GWE#G+m=|o;gj02B?(XF-v~IC
z^g3egD%lO6zRK6$K5%JQ*csoAH+Egq=H2mm?g1_3%H^UA!N0=|m}ec^T<=={`$^qn
zIeC*y;dlN|VVhFoFu{c33LgW5XFCG}Q{<|=9>|Joeg^c_;H9}a3>#d{iv$=ia`cMU
z%)Ghx@2d9)pZZ;|og8tV?aj06*7t&3({?M1iq2NIHR@1eY2sn*cz<tq%$e9pOgH<R
z?3j)RsJ;7Cep&4x&wlwgyZ4-t{W0}FXL$1rvDEu-Hk{eBJEgw<;c4&O3YF7d8}|RX
zJ^kI?+qXPRA~vjg`7`V5@^^)~|K-2``QLx<@v<KmKc~!1-VpxCZ~OMt_owfEH2V;k
zdh18~$!A?=clY<K46i%Bv)l9Uw%{pOw@jRR*{x-*J@eT;KXv)J&xD2D_LM&6b#=mr
z^75sA_1jKAY@FVZ_;J@g8Ry!Wp)Wq?&UhPkc-`yd<wfm<S6=#gYIk0mz3Xb!Yd_x$
zdaVoe=N;xf7x{W)*}WU8x1;0tZV`OvXtE~d)ohNuuN&Uo4~)rHxEy)ob(!8ffnAoJ
zUiQ)Te5>TlKi$3bIdqF;j_5R-48!Bo<4-HL$FJgTI(F&UPZK+zN2<N=w8TAPp1Ap#
zSj*nLyw6u)#iXAR7d4|i=D2Fy|EYR^m*Yjp&}XYIb-D*F`L1_qh3Ea&C*Rw%iVNMY
z3C-TWX1zVv9GAHQ%~LgMmp}82*yXg*aNEuBO^-8$e&uX@GV{~V8~2`8$L@8Jx2UU`
z-+W<D)@rSHHpgzCsZjizs@~}Or#hf-{q)=`su5Oxf8ByM$$4)Jy2Rfw!~J-?DRcjf
zTF$G5jn~?nuJ3&HThej%y$6TwFE3&-Ecv9%er;NpyQp9KW=l2&sgqf3P4@HsR_NWC
zGyBra%O4&n$~i>TUXC|PxV(2w#r3%7`TI*0qLv8%a^dw7sj|vmdGVfu!P)k>pL6a{
zJd<d+|E7uZPbUS1w=JP2$+IQae_m85tm5*XIb>f6TS?`6G4`b|?gSO-`?m<K3g|hx
z=2T38uI`<=HrKSW9!2RgP2+Ot%*)$Xc>HkSxhxeaoh5v=izi<T(lwFfJ7ZkGzb<d5
z|FP%!1=f2FuXr|{He~<AXg^D<SpJt`<IFhMdmIdr58muj**xX^+pkO0I?nSt-iSI;
z@Y-<a%1Y5UEN3d;Ga7oW{wNqQJ;6Z2Ge2r)-i@-HzJl6|D~&I{``jBS&!71~x6F3R
z)8ox+7rg#&9DMcDr%g+i>Fws7vEW+aw9LbG#(V92jZHpjw$JWalyJn~<e|md?Ul1<
zeh^MnpAeeC6lWg0=9v9m@xsn}<!YaG3q{^}u-&aO+WY$Pw5IC@f!}XFKYr=U$!J^c
z3;how?2Cj8ycM=>?y=v})DdW;zsyN`Rd2221DgQf`Gu(~mNZ>FIl;#zpiAWZH+$ZI
zE0crTIrOIq=1jfb@~D>mKu-G?A>Zj1&dJV}N&jxlS+??2!KA4i-2Q7lGP~8@e>&gz
z`R>%xtM7Lts6{SW^jYp($dcm$mox1OT$f#(c+O8H;@*tqt~;&r)MrF}b{90PELvA|
zZQg~`mMno@w~I=mEPNu>U2k_Q`A^u<)_tbfZ=XlcS+gXm*1s<_`+rx<78x+>)=B%`
zape@cmaMa|dS=+{-+PLR{^@>YW%=*<_<rgw{YBprjs!&1)T<}XaeMqCZEoSBHF`Pv
ziEKG3PRcBmpDXH$JM3B}bFRM``a1c^Jg>X5%FXYU4(N8DPt{p0tQ^$1Uw>)ANud>;
ze2%lGiXPwl@~g5#kK&C@fd!A|hWx$R?-(VKo2<B}pS{^R`B!Bu$L7>J9_e4pHTTS6
zycX9wW6pBH8LqEgoY(dG-UtqeHdigZEa3Ocqqy&x$oxr8x|T`PL*8-ay_q7>lex<<
zvUky?1C|%_dt?F)&)Q5|{^;47z8|_<p6fa#iO!qy$X>A|=;xIO4YTasMCYhkoLt$+
zbj~jLsdUAL)t2U~-|#rso=SFFeenJLhjYwq{)$J=eI^;xp%tjT)3!D^t!h{D&g{(-
zn|Q8um2Thk<j=%}cLtnZC#w%$Uc0q_-LvJ>{}*IP3pN<%zwZgR=@Juhow&h~?{H+z
zgy$Qo{G;@$*_XcG+Q06hV7<qU9>&@AHAy?41Z-HO)7v6lTOH`e*7WN3{B8dk56ye9
z+sV`9y{~7&`n$8Q-1vC0CsNMwRmG1swMC10Or}d%I;6L%-2Acoi)FxU(?w0yYmQ3$
zPM)#L`s**>cL_;`WuJb8Kk=Cnnl?$}&bH)jc9W_vZ@+CZK_Hm><J?d0Rizb<2D)1G
zKNO#}X_jq9K&vTh`K3ADK{t$Ehh#5W!Z<JL;|2zf#|0Y~Zphho?cv*9PCFb-+1NK+
zsdhGe(Rip<G;_;BsSV!I{}!G(tGJ>{q24!?Q+%IZx!3vr6YaD7R65jyYC0Y%Jbll$
zdE3UXca-#BqJ+qVXyrbA*Q$rgPxj4JI&|2geda2+FM{cgL0f*XUaWccW{$|K{cq~I
z=Q5<<e;>)_^qIjh+it4un*&dhJfCJeOyyAuI3=c)fB&4o8Qq7se!mcXaeQ{`osJ&~
z(?sXjpLvu#srZ%{Pj}4sz{O8~Z)o2x75n*EkxkL3Yh^n-KjjJ?+HIJ3-Y0pBuXvwx
zCnx*t9}_a-J`|R3?LWQmTaL@86B6qdrk;t@%h+j{!(^@)qM+gRs?jvyChMXpUnccB
z9=<j&!q;T^!=m}q_4{=NYASs5^rp_37ZIVe#Bb5###H7*h8rGCN)25y-<F}~WGbul
z<r_(dc@~OI)mwSlVxqKs_Qm)6Ew>BJ+sxs4N5rmW>77MJwHY@*1(#(sYp|uib>(QC
zR$1<0E%|ZdTT_PRx-ott`L8wP#Pu)iY$?6{CvJPt-1D+!5;q_3a7sR9{Nr+b_wE%v
zDLY+%ERK5Kp0;sGp!3P)byiV#_AFj??Q43<_0U*G4V{R)GlPpd+`oO4_&qtrTlwkv
zpXZDB?PQZVw=^JX>TIPgKlUb`h;iC4aCFW+o}E_izxsmy1r{$ZXf6>=Yu44upL<d6
zgZotTKLsUo_GR5@(29Ta;^q46fS<RHKYdmD*ksOZ!K?1?-=7H&044SbaXwEt>>hN?
zXnwhF#&3y+^y%*eH;VrI&slqVsfL4!`<G6wiRwaX@0m8a1|3K~<J0x*fl1KjNSA%{
zYVU3cGG4agKwBk?FuVEdE9~u`IV}>;7;N&;SND@jdFaIX|NOJdH3chQWp19ZZdrh5
z|C)vDpUOP+W3(snsl}W-{zdR2CreFsr`!CAPW+;NTRrz3$<E^W<r|aw|KqP9Pn9!^
zIB!O*^laxiYx=uQR(9@BQH78D{<Rq2dBd~t$??x2%_Z@(d9Q!TmS5F;C4n=D|F+Ef
zV0C4_qX)|Q^Oo;j>|7=tmGw?cr#jkJ?&9Kw+!BRZ@-1$OQVrpg^bK{63tZIB(1_Ll
zx7))y%i!akcQ3SrzU??(&MS0qy5gj4`CA%^H*(iY+DfSvJem=^^2}b9*!CHdlBQkR
zEr024_s3Jc{XAU;|Ey#dwi(`8f4r4DZ+*~Kaqp7oDnmEMwvCPVp6=%G{B3txRPkA7
z^Ws0-9nMs1nPlk{8eW-p(Of{dKhY-Lb=jdETvhAuPpQx|c+TPWS3mg44R-c@1!p+-
zX7A0J;I-lKyPfT)rcPFQTQ|*SlWt8w*oBg<pI_Z$WY{XjvD!s;dt$Qs;*M*ce?u%7
zF9la`v9Q{bxbaxF^9*a=;~Xo`^E&nw9%Pk|+gn>4diBAxmAYxkv)Ab@J}e`7dCs3N
zSArwBSu(|wI5(V+t=NBf;@yG_{?i*8`<{w?nRZTFAc)_qXY23e`wzE2_VKY*`FDx4
z{jJT!8GTxBH(c7k>OAkJ<&W)tHQGq?><`x|Ea+cy?$7j}U$>g8o;~tO_VJA$5gO9<
z7j)b`qFxzpIvwkq^Q~Q2jeq8&e~bJi=c-MvSGM^3D$HkNRG-jHiy4Jyq#X+`UoyE@
zVd|Eq_T_b{lb!Ms#hDfi1|IbdpA0S-InH@4>gKiJ;_IkuyuN>ojFK*#Rkrs!ry|zN
zKYx>l@mueu3ug1YD4P+_TX)U(wuF3+V)fTA*W6mgPFN_|b?Pl#nAURBGOMmRzD9QO
zr5oC>B7AFgBp3Ke7JN4BVqd*i^@*tNa(nTNzi-^TUf0e3wKd9CMJFgW`=(g`R?S({
zY@#mLb+zB@$t+v>|8e{|-39Vd|6h9VFfn^_f0_G1zK0)Q{WJ4?aqq-pr=!h0^L(l`
znG?P)PW>shqgn0OgX?GY8D|A+MkOEAWHtL>Ge5yN%hg5PSKrT9XT?p$Lx%3&JqxAP
zV=a2pKczfwS^Q9Y{+eUTVheUeOZF>iISKY2R_dFOn3H*iHHs(7$!U&toX3QT;{56}
zWFMQ}I`Pma_f(Sat6$6!56whpUSz*h?K*E}$zO{v8#lGS2rEA`NrG$5tUx=#jErA%
zf7-{ze94>RR$Bh{W-!mLhgL4z|D6`snHv^*sQy^sQ7ui=f8V#KZRlRaQ@F;-=upl=
z?XCR$g3EOFY~tG&T&5be_uc0H5WO(pK&$ua&z3&8)cE!5r;>kn*n{sf2YtDxnRDBJ
z-`tYF&aH{e8>_Xd`<2eUJ>2z!Evt1B)9%)pO_8jdCC$nsFX=hF`BnEnZME`S*@SI1
z+S7KLHC^faWWbT&DwivE`_Q79Wpj)crzEzSevjMt&f;M6;?-#;3b(ctI~Ij<2RAqI
zh%+fjiX9D_A@E4X<)^8-<oxv1nX=1WUoL%J!l97c?bWmPWQs&_ou>4wW6AnzEE-Wg
zhhH)+-tl|Fm-8oBbRREN$uJHKm0Y!@TU<Qnwv)$8Co$hy%bq>FUn7^feRjTc&^EVL
z-$(rF3)%Y*_5FYJO}QaZ<L%QO8|SXC5m$V2=+msT2hEN4N$d?>VEBK3e)B<n$%{;d
zN5krz;uG@gHU=Ijtl5~v@NL2Mi5>x48_pa%eRiHpN&lKHOK1HT$>}{*Vs<20Hz53L
zf7^{7v7cIV67*Jtt@{2!u)O@e&H9G49gzx7emZA_PV~QLP?+^(`h4|@hdF;g*UY{u
zam>N?kKpR()m&4$+}JA~zRBNMUF-5%eD`<OKZnxtUG}b8_GLHEW8N)w>sVLqi<DF9
z?U?5>eTDyz`M;06zNF4zB=kFb_X=jFd8Uf1=Ula%@~eM+__}o2ERmf*mlb~spLx=H
z-OMk`FFc#8m83s!&H>x+%;)Z$SW$cJQ{CAd`{{?fO8FxHs;IX;eg5)p-1%0%u30B`
z)nELSpfjUIn&YeRcK1zRih13>$g|H*+c8W2{6B|ag^~vov>-dA85kItK&<r*OT9!4
YSQ!Kupu3_OHmnowJ7QbS;K0rR040-Y5&!@I

literal 0
HcmV?d00001

diff --git a/scenario/my_foodora.ini b/scenario/my_foodora.ini
index e69de29..dd2dacb 100644
--- a/scenario/my_foodora.ini
+++ b/scenario/my_foodora.ini
@@ -0,0 +1,80 @@
+# initial login
+
+login ceo 123456789
+
+###############
+# Registering Users
+###############
+
+registerManager 698697556 cto cto cto@mail.fr 987654321 0.0,0.0 22/03/1985
+
+registerRestaurant 350697523 AuBonResto resto1 mail@mail.fr resto1pwd 0.02,0.03
+registerRestaurant 350697523 LaBonneBouffe resto2 mail@mail.fr resto2pwd -0.50,0.25
+registerRestaurant 350697523 AuCarreIrlandais resto3 mail@mail.fr resto3pwd 0.02,-0.3
+registerRestaurant 350697523 CafeDeLaPaix resto4 mail@mail.fr resto4pwd 23.2,-0.03
+registerRestaurant 350697523 Lolivier resto5 mail@mail.fr resto5pwd 0.02,0.36
+
+registerCourier 649878446 Marc cour_marc marc@mail.fr marc_pwd 0.9,-9.0 22/03/1975
+registerCourier 498784515 Henri cour_henri henri@mail.fr henri_pwd -0.9,-9.0 12/09/1989
+registerCourier 498484516 Luc cour_luc henri@mail.fr luc_pwd 0.9,19.0 27/12/1995
+
+registerCustomer 943684597 Louise custo_louise louise@mail.fr louise_pwd 5.3,9.1 23/02/1994
+registerCustomer 465131879 Jean custo_jean jean@mail.fr jean_pwd 3.3,-9.1 18/11/1985
+registerCustomer 648451648 Patrick custo_patrick patrick@mail.fr patrick_pwd 4.3,-3.1 12/02/1998
+registerCustomer 198745487 Mathieu custo_mathieu mathieu@mail.fr mathieu_pwd -8.3,-0.1 28/13/1958
+registerCustomer 877887446 Etienne custo_etienne etienne@mail.fr etienne_pwd -6.3,-6.1 21/12/1980
+registerCustomer 489446548 Jeanne custo_jeanne jeanne@mail.fr jeanne_pwd 7.3,-3.1 03/08/1989
+registerCustomer 489546844 Marie custo_marie marie@mail.fr marie_pwd 12.3,1.9 21/01/1997
+
+###############
+# Switching to restaurant
+###############
+
+logout
+
+login resto1 resto1pwd
+
+###############
+# Adding Dishes
+###############
+
+addDishRestaurantMenu steackFrites MainDish normal 14.50
+addDishRestaurantMenu salad Starter vegetarian 5.80
+addDishRestaurantMenu cookie Dessert normal 3.00
+addDishRestaurantMenu mushroomPie MainDish vegetarian 12.50
+addDishRestaurantMenu tartare Starter glutenFree 8.50
+addDishRestaurantMenu brownie Dessert normal 14.50
+addDishRestaurantMenu fruits Dessert vegetarian 4.50
+
+###############
+# Creating Menus
+###############
+
+createMeal menuEnfant FullMeal
+createMeal menuBoucher FullMeal
+createMeal menuVegetarien FullMeal
+createMeal menuDuMidi FullMeal
+createMeal menuLeger HalfMeal
+
+###############
+# Adding Menus to Meals
+###############
+
+addDishToMeal steackFrites menuEnfant
+addDishToMeal salad menuEnfant
+addDishToMeal cookie menuEnfant
+
+addDishToMeal tartare menuBoucher
+addDishToMeal steackFrites menuBoucher
+addDishToMeal brownie menuBoucher
+
+addDishToMeal salad menuVegetarien
+addDishToMeal mushroomPie menuVegetarien
+addDishToMeal fruits menuVegetarien
+
+addDishToMeal salad menuDuMidi
+addDishToMeal steackFrites menuDuMidi
+addDishToMeal cookie menuDuMidi
+
+addDishToMeal salad menuLeger
+addDishToMeal mushroomPie menuLeger
\ No newline at end of file
diff --git a/scenario/testScenario1.txt b/scenario/testScenario1.txt
index e69de29..45cd71f 100644
--- a/scenario/testScenario1.txt
+++ b/scenario/testScenario1.txt
@@ -0,0 +1,267 @@
+###############
+# showing users
+###############
+
+login ceo 123456789
+
+showCustomer
+showCourier
+showRestaurantTop
+
+###############
+# register a few more users
+###############
+
+registerRestaurant 123756753 LaSalleHaute resto6 resto6@mail.fr resto6pwd 2.02,-1.03
+registerRestaurant 789321345 AuBistrot resto7 resto7@mail.fr resto7pwd -5.50,3.25
+
+registerCourier 123786541 Lucie cour_lucie lucie@mail.fr lucie_pwd 1.5,-2.0 23/03/1998
+# registerCourier 789534123 Alexandre cour_alexandre alexandre@mail.fr alexandre_pwd -0.8,2.1 14/05/1982
+registerCourier 789534123 Pascal cour_pascal pascal@mail.fr pascal_pwd -0.8,2.1 14/05/1978
+
+registerCustomer 943684597 Jacques custo_jacques jacques@mail.fr jacques_pwd 2.3,-9.8 23/02/1975
+registerCustomer 465131879 Gabrielle custo_gabrielle gabrielle@mail.fr gabrielle_pwd -3.3,2.1 18/03/1987
+
+# show restaurants
+showRestaurantTop
+
+# show customers
+showCustomer
+
+# logout
+logout
+
+###############
+# login, adding and populate a meal to each restaurant
+# 5 uniques Full meals
+# 2 uniques Half meals
+###############
+
+
+login resto2 resto2pwd
+addDishRestaurantMenu steackFrites MainDish normal 14.80
+addDishRestaurantMenu salad Starter vegetarian 5.20
+addDishRestaurantMenu cookie Dessert normal 3.00
+addDishRestaurantMenu mushroomPie MainDish vegetarian 11.50
+addDishRestaurantMenu tartare Starter glutenFree 9.50
+addDishRestaurantMenu brownie Dessert normal 12.50
+addDishRestaurantMenu fruits Dessert vegetarian 6.50
+createMeal menuEnfant FullMeal
+addDishToMeal steackFrites menuEnfant
+addDishToMeal salad menuEnfant
+addDishToMeal cookie menuEnfant
+createMeal menuDuMidi FullMeal
+addDishToMeal salad menuDuMidi
+addDishToMeal steackFrites menuDuMidi
+addDishToMeal cookie menuDuMidi
+createMeal menuLegerEntreePlat HalfMeal
+addDishToMeal salad menuLegerEntreePlat
+addDishToMeal mushroomPie menuLegerEntreePlat
+
+# login implies logout of the current logged entity
+login resto3 resto3pwd
+addDishRestaurantMenu steackFrites MainDish normal 14.80
+addDishRestaurantMenu salad Starter vegetarian 5.20
+addDishRestaurantMenu cookie Dessert normal 3.00
+addDishRestaurantMenu mushroomPie MainDish vegetarian 11.50
+addDishRestaurantMenu tartare Starter glutenFree 9.50
+addDishRestaurantMenu brownie Dessert normal 12.50
+addDishRestaurantMenu fruits Dessert vegetarian 6.50
+createMeal menuBoucher FullMeal
+addDishToMeal tartare menuBoucher
+addDishToMeal steackFrites menuBoucher
+addDishToMeal brownie menuBoucher
+createMeal menuDuMidi FullMeal
+addDishToMeal salad menuDuMidi
+addDishToMeal steackFrites menuDuMidi
+addDishToMeal cookie menuDuMidi
+createMeal menuLegerEntreePlat HalfMeal
+addDishToMeal salad menuLegerEntreePlat
+addDishToMeal mushroomPie menuLegerEntreePlat
+
+login resto4 resto4pwd
+addDishRestaurantMenu steackFrites MainDish normal 14.80
+addDishRestaurantMenu salad Starter vegetarian 5.20
+addDishRestaurantMenu cookie Dessert normal 3.00
+addDishRestaurantMenu mushroomPie MainDish vegetarian 11.50
+addDishRestaurantMenu tartare Starter glutenFree 9.50
+addDishRestaurantMenu brownie Dessert normal 12.50
+addDishRestaurantMenu fruits Dessert vegetarian 6.50
+createMeal menuVegetarien FullMeal
+addDishToMeal salad menuVegetarien
+addDishToMeal mushroomPie menuVegetarien
+addDishToMeal fruits menuVegetarien
+createMeal menuDuMidi FullMeal
+addDishToMeal salad menuDuMidi
+addDishToMeal steackFrites menuDuMidi
+addDishToMeal cookie menuDuMidi
+
+login resto5 resto5pwd
+addDishRestaurantMenu steackFrites MainDish normal 14.50
+addDishRestaurantMenu salad Starter vegetarian 5.80
+addDishRestaurantMenu cookie Dessert normal 3.00
+addDishRestaurantMenu mushroomPie MainDish vegetarian 12.50
+addDishRestaurantMenu tartare Starter glutenFree 7.60
+addDishRestaurantMenu brownie Dessert normal 12.30
+addDishRestaurantMenu fruits Dessert vegetarian 6.50
+createMeal menuDuMidi FullMeal
+addDishToMeal salad menuDuMidi
+addDishToMeal steackFrites menuDuMidi
+addDishToMeal cookie menuDuMidi
+createMeal menuLegerEntreePlat HalfMeal
+addDishToMeal salad menuLegerEntreePlat
+addDishToMeal mushroomPie menuLegerEntreePlat
+
+login resto6 resto6pwd
+addDishRestaurantMenu steackFrites MainDish normal 14.50
+addDishRestaurantMenu salad Starter vegetarian 5.80
+addDishRestaurantMenu cookie Dessert normal 3.00
+addDishRestaurantMenu mushroomPie MainDish vegetarian 12.50
+addDishRestaurantMenu tartare Starter glutenFree 8.50
+addDishRestaurantMenu brownie Dessert normal 14.50
+addDishRestaurantMenu fruits Dessert vegetarian 4.50
+createMeal menuLegerPlatDessert HalfMeal
+addDishToMeal mushroomPie menuLegerPlatDessert
+addDishToMeal cookie menuLegerPlatDessert
+createMeal menuDuMidi FullMeal
+addDishToMeal salad menuDuMidi
+addDishToMeal steackFrites menuDuMidi
+addDishToMeal cookie menuDuMidi
+
+login resto7 resto7pwd
+addDishRestaurantMenu steackFrites MainDish normal 14.80
+addDishRestaurantMenu salad Starter vegetarian 5.20
+addDishRestaurantMenu cookie Dessert normal 3.00
+addDishRestaurantMenu mushroomPie MainDish vegetarian 11.50
+addDishRestaurantMenu tartare Starter glutenFree 8.50
+addDishRestaurantMenu brownie Dessert normal 14.50
+addDishRestaurantMenu fruits Dessert vegetarian 4.50
+createMeal menuLegerEntreePlat HalfMeal
+addDishToMeal salad menuLegerEntreePlat
+addDishToMeal mushroomPie menuLegerEntreePlat
+
+###############
+# setting meal of the week for some restaurant (2,3,5,6)
+###############
+
+# !!!!!
+# Offers are stocked for each customer, waiting for connection to spam.
+# !!!!!
+
+login resto2 resto2pwd
+setSpecialOffer menuEnfant
+
+login resto3 resto3pwd
+setSpecialOffer menuDuMidi
+
+login resto5 resto5pwd
+setSpecialOffer menuLegerEntreePlat
+
+login resto6 resto6pwd
+setSpecialOffer menuLegerPlatDessert
+
+# Show all the restaurant and their menu :
+
+login ceo 123456789
+showRestaurantTop
+
+# Before testing command let's add afidelity card :
+
+associateCard custo_gabrielle Point
+associateCard custo_louise Lottery
+
+# Login a few customers
+
+login custo_jacques jacques_pwd
+# login implies logout of the current logged entity
+login custo_gabrielle gabrielle_pwd
+login custo_louise louise_pwd
+
+createOrder resto6 maCommande
+addItemToOrder maCommande menuDuMidi
+addItemToOrder maCommande salad
+addItemToOrder maCommande menuLegerPlatDessert
+
+endOrder maCommande
+
+login custo_gabrielle gabrielle_pwd
+
+createOrder resto5 maCommande2
+addItemToOrder maCommande2 menuDuMidi
+addItemToOrder maCommande2 cookie
+addItemToOrder maCommande2 menuLegerEntreePlat
+
+endOrder maCommande2
+
+#########"
+# Meal Of the week accuracy
+### resto 2 & 3 & 4 have exactly the same prices, menuMidi is meal of the week for resto3
+
+createOrder resto4 maCommande3
+createOrder resto3 maCommande4
+createOrder resto2 maCommande5
+# 5% reduc
+addItemToOrder maCommande3 menuDuMidi
+# 10% reduc
+addItemToOrder maCommande4 menuDuMidi
+# full price
+addItemToOrder maCommande5 salad
+addItemToOrder maCommande5 steackFrites
+addItemToOrder maCommande5 cookie
+
+endOrder maCommande5
+endOrder maCommande3
+endOrder maCommande4
+
+# last order, to test profit calculation
+
+createOrder resto2 maCommande6
+addItemToOrder maCommande6 menuDuMidi
+addItemToOrder maCommande6 menuLegerEntreePlat
+addItemToOrder maCommande6 cookie
+
+# at this point no courier available
+endOrderAt maCommande6 05/04/2017
+login ceo 123456789
+# free a courier
+offDuty cour_pascal
+login custo_gabrielle gabrielle_pwd
+
+endOrderAt maCommande6 05/04/2017
+
+# login again manager
+
+login ceo 123456789
+
+# initial profit
+showTotalProfit
+
+# set a markup profit strategy
+setProfitPolicy markup 6.0
+showTotalProfit
+
+# set a serviceFee strategy
+setProfitPolicy ServiceFee 5.0
+showTotalProfit
+
+setProfitPolicy deliveryCost 3.0
+showTotalProfit
+showProfitBetween 01/05/2017 10/05/2017
+
+showCourier
+showCourierOrdered ASC
+showCourierOrdered DESC
+
+###########
+# other stuff :
+###########
+
+# onDuty & offDuty
+offDuty cour_marc
+showCourier
+onDuty cour_marc
+showCourier
+
+showCustomer
+
+logout
\ No newline at end of file
diff --git a/src/Cards/FidelityCard.java b/src/Cards/FidelityCard.java
index c52064b..48783c9 100644
--- a/src/Cards/FidelityCard.java
+++ b/src/Cards/FidelityCard.java
@@ -25,7 +25,6 @@ public abstract class FidelityCard implements VisitableCard {
 	}
 	
 	public abstract String returnType();
-
 	
 
 }
diff --git a/src/Cli/Clui.java b/src/Cli/Clui.java
index adfa162..2a6e3e7 100644
--- a/src/Cli/Clui.java
+++ b/src/Cli/Clui.java
@@ -11,12 +11,14 @@ import Commands.AssociateCard;
 import Commands.CreateMeal;
 import Commands.CreateOrder;
 import Commands.EndOrder;
+import Commands.EndOrderAt;
 import Commands.Help;
 import Commands.Logout;
 import Commands.OffDuty;
 import Commands.OnDuty;
 import Commands.RegisterCourier;
 import Commands.RegisterCustomer;
+import Commands.RegisterManager;
 import Commands.RegisterRestaurant;
 import Commands.RemoveSpecialOffer;
 import Commands.RenameMeal;
@@ -25,6 +27,7 @@ import Commands.SetDeliveryPolicy;
 import Commands.SetProfitPolicy;
 import Commands.SetSpecialOffer;
 import Commands.ShowCourier;
+import Commands.ShowCourierOrdered;
 import Commands.ShowCustomer;
 import Commands.ShowMeal;
 import Commands.ShowMenuItem;
@@ -37,6 +40,7 @@ import Exception.ExceptionUnknownDishType;
 import Exception.ExceptionUnknownMealType;
 import Exception.ExceptionUnknownStartegyType;
 import Exception.ExceptionUnknownTypeOfUser;
+import User.Customer;
 
 public class Clui {
 	
@@ -57,6 +61,7 @@ public class Clui {
 		this.listOfCommand.add(new CreateMeal());
 		this.listOfCommand.add(new CreateOrder());
 		this.listOfCommand.add(new EndOrder());
+		this.listOfCommand.add(new EndOrderAt());
 		this.listOfCommand.add(new Help());
 		this.listOfCommand.add(new Login());
 		this.listOfCommand.add(new Logout());
@@ -64,6 +69,7 @@ public class Clui {
 		this.listOfCommand.add(new OnDuty());
 		this.listOfCommand.add(new RegisterCourier());
 		this.listOfCommand.add(new RegisterCustomer());
+		this.listOfCommand.add(new RegisterManager());
 		this.listOfCommand.add(new RegisterRestaurant());
 		this.listOfCommand.add(new RemoveSpecialOffer());
 		this.listOfCommand.add(new RenameMeal());
@@ -72,6 +78,7 @@ public class Clui {
 		this.listOfCommand.add(new SetProfitPolicy());
 		this.listOfCommand.add(new SetSpecialOffer());
 		this.listOfCommand.add(new ShowCourier());
+		this.listOfCommand.add(new ShowCourierOrdered());
 		this.listOfCommand.add(new ShowCustomer());
 		this.listOfCommand.add(new ShowMeal());
 		this.listOfCommand.add(new ShowMenuItem());
@@ -88,35 +95,51 @@ public class Clui {
 		return null;
 	}
 
-	public void executeCommand(String command) throws ExceptionUnknownMealType, NumberFormatException, ExceptionUnknownDishType, ExceptionUnknownStartegyType, ExceptionUnknownTypeOfUser{
-		StringTokenizer st = new StringTokenizer(command);
-		String commandName = st.nextToken();
-		ArrayList<String> arguments = new ArrayList<String>();
-		while (st.hasMoreTokens()) {
-			arguments.add(st.nextToken());
-	    }
-		
-		Command commandAsked;
-		commandAsked = getCommand(commandName);
-		if(commandAsked != null){
-			try{
-				if(commandAsked.isGoodArgument(arguments)){
-					commandAsked.execute(arguments, foodora, activeUser);
-				}else{
-					System.out.println("Error in the arguments.");
+	public void executeCommand(String command){
+		if(!(command.equals("") || command.substring(0, 1).equals("#"))){
+			StringTokenizer st = new StringTokenizer(command);
+			String commandName = st.nextToken();
+			ArrayList<String> arguments = new ArrayList<String>();
+			while (st.hasMoreTokens()) {
+				arguments.add(st.nextToken());
+		    }
+			
+			Command commandAsked;
+			commandAsked = getCommand(commandName);
+			if(commandAsked != null){
+				try{
+					if(commandAsked.isGoodArgument(arguments)){
+						try {
+							commandAsked.execute(arguments, foodora, activeUser);
+						} catch (NumberFormatException | ExceptionUnknownMealType | ExceptionUnknownDishType
+								| ExceptionUnknownStartegyType | ExceptionUnknownTypeOfUser | java.lang.NullPointerException e) {
+							// TODO Auto-generated catch block
+							System.out.println("ERROR with command "+commandName+ " : " + e.getMessage());
+							//e.printStackTrace();
+						}
+					}else{
+						System.out.println("Error in the arguments.");
+					}
+				}catch (errorWrongNumberOfParams ex) {
+				     System.out.println(ex);
 				}
-			}catch (errorWrongNumberOfParams ex) {
-			     System.out.println(ex);
+				catch (errorWrongFormatValue ex) {
+				     System.out.println(ex);
+				}
+			}else{
+				System.out.println("Unknown command.");
 			}
-			catch (errorWrongFormatValue ex) {
-			     System.out.println(ex);
+			
+			// lifeTimeFunction
+			if(activeUser.getUser() instanceof Customer){
+				Customer c = (Customer) activeUser.getUser();
+				c.checkForPendingOffer();
 			}
-		}else{
-			System.out.println("Unknown command.");
+			
 		}
 	}
 	
-	public void launchClui() throws errorWrongNumberOfParams, errorWrongFormatValue, ExceptionUnknownMealType, NumberFormatException, ExceptionUnknownDishType, ExceptionUnknownStartegyType, ExceptionUnknownTypeOfUser{
+	public void launchClui(){
 		System.out.println("Welcome to MyFoodora system, type help <> in order to have all the possible commands");
 		while(true){
 			String command = Input.string("===================\n"
diff --git a/src/Cli/Command.java b/src/Cli/Command.java
index efceeb0..a8683ea 100644
--- a/src/Cli/Command.java
+++ b/src/Cli/Command.java
@@ -26,12 +26,14 @@ public abstract class Command {
 	
 	public boolean isGoodArgument(ArrayList<String> arguments) throws errorWrongNumberOfParams,errorWrongFormatValue{
 		if(arguments.size() != listOfArgs.length){
-			throw new errorWrongNumberOfParams("Error : "+Integer.toString(arguments.size())+" parameter insteed of "+Integer.toString(listOfArgs.length));
+			throw new errorWrongNumberOfParams("Error : "+ commandName +" : "+Integer.toString(arguments.size())+" parameter insteed of "+Integer.toString(listOfArgs.length));
 		}
 		int i = 0;
 		for (String arg : arguments) {
-			listOfArgs[i].isTockenCorrect(arg); // throw une erreur, faut la catch au dessus !
-			i++;
+			if(listOfArgs[i].isTockenCorrect(arg))
+				i++;
+			else
+				throw new errorWrongFormatValue("Error : "+ commandName +" : " + i + " arg is wrong format");
 		}
 		 // trow une erreur
 		return true;
diff --git a/src/Cli/Token.java b/src/Cli/Token.java
index f0d8160..740ada0 100644
--- a/src/Cli/Token.java
+++ b/src/Cli/Token.java
@@ -37,7 +37,7 @@ public class Token {
 					return true;
 				break;
 			case position:
-				if(_value.matches("-?\\d+(\\.\\d+)\\,\\d+(\\.\\d+)?"))
+				if(_value.matches("-?\\d+(\\.\\d+)\\,-?\\d+(\\.\\d+)?"))
 					return true;
 				break;
 			case decimal:
diff --git a/src/Commands/AddDishRestaurantMenu.java b/src/Commands/AddDishRestaurantMenu.java
index ec31513..be581f3 100644
--- a/src/Commands/AddDishRestaurantMenu.java
+++ b/src/Commands/AddDishRestaurantMenu.java
@@ -32,7 +32,7 @@ public class AddDishRestaurantMenu extends Command {
 		if(activeUser.getUser() instanceof Restaurant){
 			Restaurant r = (Restaurant) activeUser.getUser();
 			r.addDish(arg.get(1), arg.get(0), arg.get(2), Double.parseDouble(arg.get(3)));
-			System.out.println("Customer added : " + foodora.getUserByName(arg.get(1), arg.get(2)));
+			System.out.println("Dish added : " + r.getDishByName(arg.get(0)));
 		}else{
 			System.out.println("You need to be a logged Restaurant in order to access this function");
 		}
diff --git a/src/Commands/AddItemToOrder.java b/src/Commands/AddItemToOrder.java
index 27735c6..b5417b3 100644
--- a/src/Commands/AddItemToOrder.java
+++ b/src/Commands/AddItemToOrder.java
@@ -6,11 +6,8 @@ import Cli.Command;
 import Cli.Token;
 import Core.ActiveUserContext;
 import Core.MyFoodora;
-import Exception.ExceptionUnknownDishType;
-import Exception.ExceptionUnknownMealType;
 import Order.Order;
 import User.Customer;
-import User.Restaurant;
 
 public class AddItemToOrder extends Command {
 
@@ -28,6 +25,7 @@ public class AddItemToOrder extends Command {
 		if(activeUser.getUser() instanceof Customer){
 			Customer c = (Customer) activeUser.getUser();
 			Order o = c.getOrderByName(arg.get(0));
+			//System.out.println(c.getListOrder());
 			o.addItemByName(arg.get(1));
 			System.out.println(arg.get(1) + " added in "+arg.get(0)+".");
 		}else{
diff --git a/src/Commands/AssociateCard.java b/src/Commands/AssociateCard.java
index 840f349..873607b 100644
--- a/src/Commands/AssociateCard.java
+++ b/src/Commands/AssociateCard.java
@@ -29,6 +29,7 @@ public class AssociateCard extends Command {
 		if(activeUser.getUser() instanceof Manager){
 			Manager m = (Manager) activeUser.getUser();
 			Customer c = (Customer) foodora.getUserByUsername(arg.get(0));
+			System.out.println("You are choosing a "+arg.get(1)+" card.");
 			c.registerFidelityPlan(arg.get(1));
 		}else{
 			System.out.println("You need to be a logged Manager in order to access this function");
diff --git a/src/Commands/EndOrder.java b/src/Commands/EndOrder.java
index 5de3bb6..eba1a55 100644
--- a/src/Commands/EndOrder.java
+++ b/src/Commands/EndOrder.java
@@ -15,8 +15,7 @@ public class EndOrder extends Command {
 
 	public EndOrder() {
 		super("endOrder",
-				new Token[]{new Token(Token.TypeToken.str,"orderName"),
-							new Token(Token.TypeToken.date,"orderDate")}
+				new Token[]{new Token(Token.TypeToken.str,"orderName")}
 		);
 		// TODO Auto-generated constructor stub
 	}
@@ -26,8 +25,8 @@ public class EndOrder extends Command {
 		// TODO Auto-generated method stub
 		if(activeUser.getUser() instanceof Customer){
 			Customer c = (Customer) activeUser.getUser();
-			c.getOrderByName(arg.get(0)).finalize();
-			System.out.println(arg.get(1) + " finalized the "+arg.get(0)+".");
+			System.out.println("finalising the command : "+ arg.get(0));
+			c.placeOrder(c.getOrderByName(arg.get(0)), foodora);
 		}else{
 			System.out.println("You need to be a logged Customer in order to access this function");
 		}
diff --git a/src/Commands/EndOrderAt.java b/src/Commands/EndOrderAt.java
new file mode 100644
index 0000000..14a6a10
--- /dev/null
+++ b/src/Commands/EndOrderAt.java
@@ -0,0 +1,44 @@
+package Commands;
+
+import java.util.ArrayList;
+
+import Cli.Command;
+import Cli.Token;
+import Core.ActiveUserContext;
+import Core.MyFoodora;
+import Exception.ExceptionUnknownDishType;
+import Exception.ExceptionUnknownMealType;
+import Exception.ExceptionUnknownStartegyType;
+import Exception.ExceptionUnknownTypeOfUser;
+import Order.Order;
+import Others.Date;
+import User.Customer;
+
+public class EndOrderAt extends Command {
+
+	public EndOrderAt() {
+		super("endOrderAt",
+				new Token[]{new Token(Token.TypeToken.str,"orderName"),
+							new Token(Token.TypeToken.date,"orderDate")}
+		);
+		// TODO Auto-generated constructor stub
+	}
+
+	@Override
+	public void execute(ArrayList<String> arg, MyFoodora foodora, ActiveUserContext activeUser) throws NumberFormatException {
+		// TODO Auto-generated method stub
+		if(activeUser.getUser() instanceof Customer){
+			Customer c = (Customer) activeUser.getUser();
+			Order o = (Order) c.getOrderByName(arg.get(0));
+			String[] parts = arg.get(1).split("/");
+			int day = Integer.parseInt(parts[0]);
+			int month = Integer.parseInt(parts[1]);
+			int year = Integer.parseInt(parts[2]);
+			System.out.println("finalising the command : "+ arg.get(0) + ", the : "+arg.get(1));
+			c.placeOrder(o, foodora,new Date(year,month,day));
+			//System.out.println(foodora.getGlobalHistoric());
+		}else{
+			System.out.println("You need to be a logged Customer in order to access this function");
+		}
+	}
+}
diff --git a/src/Commands/OffDuty.java b/src/Commands/OffDuty.java
index 59f9ab7..88fac86 100644
--- a/src/Commands/OffDuty.java
+++ b/src/Commands/OffDuty.java
@@ -27,7 +27,7 @@ public class OffDuty extends Command {
 			Manager m = (Manager) activeUser.getUser();
 			Courier d = (Courier) foodora.getUserByUsername(arg.get(0));
 			d.setAvailable(true);
-			System.out.println(arg.get(0) + " in now on duty.");
+			System.out.println(arg.get(0) + " in now available.");
 		}else{
 			System.out.println("You need to be a logged Manager in order to access this function");
 		}
diff --git a/src/Commands/RegisterCourier.java b/src/Commands/RegisterCourier.java
index ba330da..660b8a5 100644
--- a/src/Commands/RegisterCourier.java
+++ b/src/Commands/RegisterCourier.java
@@ -8,6 +8,7 @@ import Core.ActiveUserContext;
 import Core.MyFoodora;
 import Exception.ExceptionUnknownTypeOfUser;
 import Others.Adress;
+import User.Courier;
 import User.Manager;
 import User.User;
 
@@ -33,7 +34,7 @@ public class RegisterCourier extends Command {
 			Manager m = (Manager) activeUser.getUser();
 			// registerCourier 0123456789 resto1 resto1 mail password 0.01,0.02 22/03/1995
 			m.addUser(Long.parseLong(arg.get(0)), arg.get(1), arg.get(2), arg.get(3), arg.get(4), Adress.fromStr(arg.get(5)), true, arg.get(6), "1", foodora, User.COURIER , "Human");
-			System.out.println("Courier added : " + foodora.getUserByName(arg.get(1), arg.get(2)));
+			System.out.println("Courier added : " + (Courier) foodora.getUserByUsername(arg.get(2)));
 		}else{
 			System.out.println("You need to be a manager in order to access this function");
 		}
diff --git a/src/Commands/RegisterCustomer.java b/src/Commands/RegisterCustomer.java
index a2609aa..99352b2 100644
--- a/src/Commands/RegisterCustomer.java
+++ b/src/Commands/RegisterCustomer.java
@@ -8,6 +8,7 @@ import Core.ActiveUserContext;
 import Core.MyFoodora;
 import Exception.ExceptionUnknownTypeOfUser;
 import Others.Adress;
+import User.Customer;
 import User.Manager;
 import User.User;
 
@@ -33,7 +34,7 @@ public class RegisterCustomer extends Command {
 			Manager m = (Manager) activeUser.getUser();
 			// registerRestaurant 0123456789 resto1 resto1 mail password 0.01,0.02 22/03/1995
 			m.addUser(Long.parseLong(arg.get(0)), arg.get(1), arg.get(2), arg.get(3), arg.get(4), Adress.fromStr(arg.get(5)), true, arg.get(6), "1", foodora, User.CUSTOMER , "Human");
-			System.out.println("Customer added : " + foodora.getUserByName(arg.get(1), arg.get(2)));
+			System.out.println("Customer added : " + (Customer) foodora.getUserByUsername( arg.get(2)));
 		}else{
 			System.out.println("You need to be a logged Manager in order to access this function");
 		}
diff --git a/src/Commands/RegisterManager.java b/src/Commands/RegisterManager.java
new file mode 100644
index 0000000..fa2657c
--- /dev/null
+++ b/src/Commands/RegisterManager.java
@@ -0,0 +1,42 @@
+package Commands;
+
+import java.util.ArrayList;
+
+import Cli.Command;
+import Cli.Token;
+import Core.ActiveUserContext;
+import Core.MyFoodora;
+import Exception.ExceptionUnknownTypeOfUser;
+import Others.Adress;
+import User.Manager;
+import User.User;
+
+public class RegisterManager extends Command {
+
+	public RegisterManager() {
+		super("registerManager",
+				new Token[]{new Token(Token.TypeToken.integer,"tel")
+						,new Token(Token.TypeToken.str,"name")
+						,new Token(Token.TypeToken.str,"username")
+						,new Token(Token.TypeToken.str,"mail")
+						,new Token(Token.TypeToken.str,"password")
+						,new Token(Token.TypeToken.position,"adress")
+						,new Token(Token.TypeToken.date,"birthday")}
+		);
+		// TODO Auto-generated constructor stub
+	}
+
+	@Override
+	public void execute(ArrayList<String> arg, MyFoodora foodora, ActiveUserContext activeUser) throws NumberFormatException, ExceptionUnknownTypeOfUser {
+		// TODO Auto-generated method stub
+		if(activeUser.getUser() instanceof Manager){
+			Manager m = (Manager) activeUser.getUser();
+			// registerRestaurant 0123456789 resto1 resto1 mail password 0.01,0.02 22/03/1995
+			m.addUser(Long.parseLong(arg.get(0)), arg.get(1), arg.get(2), arg.get(3), arg.get(4), Adress.fromStr(arg.get(5)), true, arg.get(6), "1", foodora, User.MANAGER , "Human");
+			System.out.println("Manager added : " + (Manager) foodora.getUserByUsername(arg.get(2)));
+		}else{
+			System.out.println("You need to be a logged Manager in order to access this function");
+		}
+	}
+
+}
diff --git a/src/Commands/RegisterRestaurant.java b/src/Commands/RegisterRestaurant.java
index 64459ad..bb08018 100644
--- a/src/Commands/RegisterRestaurant.java
+++ b/src/Commands/RegisterRestaurant.java
@@ -33,7 +33,7 @@ public class RegisterRestaurant extends Command {
 			Manager m = (Manager) activeUser.getUser();
 			// registerRestaurant 0123456789 resto1 resto1 mail password 0.01,0.02
 			m.addUser(Long.parseLong(arg.get(0)), arg.get(1), arg.get(2), arg.get(3), arg.get(4), Adress.fromStr(arg.get(5)), true, "1", "1", foodora, User.RESTAURANT , "Moral");
-			System.out.println("Restaurant added : " + foodora.getUserByName(arg.get(1), arg.get(2)));
+			System.out.println("Restaurant added : " + (Restaurant) foodora.getUserByUsername(arg.get(2)));
 		}else{
 			System.out.println("You need to be a manager in order to access this function");
 		}
diff --git a/src/Commands/RunTest.java b/src/Commands/RunTest.java
index ff7e301..aee3333 100644
--- a/src/Commands/RunTest.java
+++ b/src/Commands/RunTest.java
@@ -14,6 +14,7 @@ import Core.MyFoodora;
 import Exception.ExceptionUnknownDishType;
 import Exception.ExceptionUnknownMealType;
 import Exception.ExceptionUnknownStartegyType;
+import Exception.ExceptionUnknownTypeOfUser;
 import User.Manager;
 
 public class RunTest extends Command {
@@ -28,28 +29,15 @@ public class RunTest extends Command {
 
 	@Override
 	public void execute(ArrayList<String> arg, MyFoodora foodora, ActiveUserContext activeUser) {
-		if(activeUser.getUser() instanceof Manager){
-			Clui clui = new Clui(foodora, activeUser);
-			String fileName = arg.get(0);
-
-			//read file into stream, try-with-resources
-			try (Stream<String> stream = Files.lines(Paths.get(fileName))) {
-
-				stream.forEach(command -> {
-					try {
-						clui.executeCommand(command);
-					} catch (NumberFormatException | ExceptionUnknownMealType | ExceptionUnknownDishType | ExceptionUnknownStartegyType e) {
-						// TODO Auto-generated catch block
-						e.printStackTrace();
-					}
-				});
-
-			} catch (IOException e) {
-				e.printStackTrace();
-			}
-		}
-		else{
-			System.out.println("You need to be a manager in order to access this function");
+		Clui clui = new Clui(foodora, activeUser);
+		String fileName = System.getProperty("user.dir") + "/" + arg.get(0);
+
+		//read file into stream, try-with-resources
+		try (Stream<String> stream = Files.lines(Paths.get(fileName))) {
+			stream.forEach(command -> clui.executeCommand(command));
+		} catch (IOException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
 		}
 	}
 
diff --git a/src/Commands/SetProfitPolicy.java b/src/Commands/SetProfitPolicy.java
index 85caeb8..ef1301f 100644
--- a/src/Commands/SetProfitPolicy.java
+++ b/src/Commands/SetProfitPolicy.java
@@ -15,7 +15,8 @@ public class SetProfitPolicy extends Command {
 
 	public SetProfitPolicy() {
 		super("setProfitPolicy",
-				new Token[]{new Token(Token.TypeToken.str,"profityPolicyName")}
+				new Token[]{new Token(Token.TypeToken.str,"profityPolicyName"),
+							new Token(Token.TypeToken.decimal,"valueTargetted")}
 		);
 		// TODO Auto-generated constructor stub
 	}
@@ -26,7 +27,8 @@ public class SetProfitPolicy extends Command {
 		if(activeUser.getUser() instanceof Manager){
 			Manager m = (Manager) activeUser.getUser();
 			foodora.getContextTargetProfitStrategy().setStrategy(arg.get(0));
-			System.out.println(arg.get(0) + " is now the profit policy.");
+			foodora.getContextTargetProfitStrategy().execute(foodora, Double.parseDouble(arg.get(1)));
+			System.out.println(arg.get(0) + " is now the profit policy, target is : "+arg.get(1)+".");
 		}else{
 			System.out.println("You need to be a logged Manager in order to access this function");
 		}
diff --git a/src/Commands/SetSpecialOffer.java b/src/Commands/SetSpecialOffer.java
index c1f4dbe..8bb0974 100644
--- a/src/Commands/SetSpecialOffer.java
+++ b/src/Commands/SetSpecialOffer.java
@@ -23,7 +23,6 @@ public class SetSpecialOffer extends Command {
 		if(activeUser.getUser() instanceof Restaurant){
 			Restaurant r = (Restaurant) activeUser.getUser();
 			r.addMealOfTheWeek(foodora, arg.get(0));
-			
 			System.out.println("Meal "+arg.get(0)+" is now the Meal Of The Week.");
 		}else{
 			System.out.println("You need to be a logged Restaurant in order to access this function");
diff --git a/src/Commands/ShowCourier.java b/src/Commands/ShowCourier.java
index a4a6fac..339d2af 100644
--- a/src/Commands/ShowCourier.java
+++ b/src/Commands/ShowCourier.java
@@ -9,6 +9,7 @@ import Core.MyFoodora;
 import Exception.ExceptionUnknownDishType;
 import Exception.ExceptionUnknownMealType;
 import Exception.ExceptionUnknownStartegyType;
+import User.Courier;
 import User.Manager;
 
 public class ShowCourier extends Command {
@@ -22,7 +23,10 @@ public class ShowCourier extends Command {
 	@Override
 	public void execute(ArrayList<String> arguments, MyFoodora foodora, ActiveUserContext activeUser) {
 		if(activeUser.getUser() instanceof Manager){
-			System.out.println(foodora.getListCourier().getList().toString());
+			System.out.println("\n*************\nlist of couriers :");
+			for(Courier c : foodora.getListCourier().getList()){
+				System.out.println(c.toString());
+			}
 		}
 		else{
 			System.out.println("You need to be a manager in order to access this function");
diff --git a/src/Commands/ShowCourierOrdered.java b/src/Commands/ShowCourierOrdered.java
new file mode 100644
index 0000000..a5dc0f2
--- /dev/null
+++ b/src/Commands/ShowCourierOrdered.java
@@ -0,0 +1,33 @@
+package Commands;
+
+import java.util.ArrayList;
+
+import Cli.Command;
+import Cli.Token;
+import Core.ActiveUserContext;
+import Core.MyFoodora;
+import Exception.ExceptionUnknownDishType;
+import Exception.ExceptionUnknownMealType;
+import Exception.ExceptionUnknownStartegyType;
+import Exception.ExceptionUnknownTypeOfUser;
+import User.Manager;
+
+public class ShowCourierOrdered extends Command {
+	
+	public ShowCourierOrdered() {
+		super("showCourierOrdered", new Token[]{new Token(Token.TypeToken.str,"typeOrdering")});
+		// TODO Auto-generated constructor stub
+	}
+	// + "showCustomers <> for the currently logged on myFoodora manager to display thelist of customers\n"
+
+	@Override
+	public void execute(ArrayList<String> arg, MyFoodora foodora, ActiveUserContext activeUser) {
+		if(activeUser.getUser() instanceof Manager){
+			System.out.println("\n*************\nlist of couriers ordered by "+arg.get(0)+" : \n" + foodora.getListCourierOrdered(arg.get(0)).toString());
+		}
+		else{
+			System.out.println("You need to be a manager in order to access this function");
+		}
+	}
+
+}
diff --git a/src/Commands/ShowCustomer.java b/src/Commands/ShowCustomer.java
index 4f6a131..ba4eab6 100644
--- a/src/Commands/ShowCustomer.java
+++ b/src/Commands/ShowCustomer.java
@@ -6,12 +6,13 @@ import Cli.Command;
 import Cli.Token;
 import Core.ActiveUserContext;
 import Core.MyFoodora;
+import User.Customer;
 import User.Manager;
 
 public class ShowCustomer extends Command {
 
 	public ShowCustomer() {
-		super("showCustomers", new Token[]{});
+		super("showCustomer", new Token[]{});
 		// TODO Auto-generated constructor stub
 	}
 	// + "showCustomers <> for the currently logged on myFoodora manager to display thelist of customers\n"
@@ -19,7 +20,10 @@ public class ShowCustomer extends Command {
 	@Override
 	public void execute(ArrayList<String> arguments, MyFoodora foodora, ActiveUserContext activeUser) {
 		if(activeUser.getUser() instanceof Manager){
-			System.out.println(foodora.getListCustomer().getList().toString());
+			System.out.println("\n*************\nlist of customers :");
+			for(Customer c : foodora.getListCustomer().getList()){
+				System.out.println(c.toString());
+			}
 		}
 		else{
 			System.out.println("You need to be a manager in order to access this function");
diff --git a/src/Commands/ShowProfitBetween.java b/src/Commands/ShowProfitBetween.java
index b1f875b..51694b7 100644
--- a/src/Commands/ShowProfitBetween.java
+++ b/src/Commands/ShowProfitBetween.java
@@ -20,9 +20,13 @@ public class ShowProfitBetween extends Command {
 	// + "showCustomers <> for the currently logged on myFoodora manager to display thelist of customers\n"
 
 	@Override
-	public void execute(ArrayList<String> arguments, MyFoodora foodora, ActiveUserContext activeUser) {
+	public void execute(ArrayList<String> arg, MyFoodora foodora, ActiveUserContext activeUser) {
 		if(activeUser.getUser() instanceof Manager){
-			System.out.println(foodora.getGlobalProfit());
+			String[] db = arg.get(0).split("/");
+			String[] de = arg.get(1).split("/");
+			Others.Date dateBeg = new Others.Date(Integer.parseInt(db[2]), Integer.parseInt(db[1]), Integer.parseInt(db[0]));
+			Others.Date dateEnd = new Others.Date(Integer.parseInt(de[2]), Integer.parseInt(de[1]), Integer.parseInt(de[0]));
+			System.out.println("Total profit between "+dateBeg+" and "+ dateEnd +" : " + foodora.getProfitBetween(dateBeg, dateEnd));
 		}
 		else{
 			System.out.println("You need to be a manager in order to access this function");
diff --git a/src/Commands/ShowRestaurantTop.java b/src/Commands/ShowRestaurantTop.java
index 7863bfa..9318d5b 100644
--- a/src/Commands/ShowRestaurantTop.java
+++ b/src/Commands/ShowRestaurantTop.java
@@ -38,7 +38,7 @@ public class ShowRestaurantTop extends Command {
 				listToSort.remove(mostSeller);
 			}
 			
-			System.out.println(sortListOfRestaurant.toString());
+			System.out.println("\n*************\nlist of restaurants :" + sortListOfRestaurant.toString());
 			
 		}
 		else{
diff --git a/src/Commands/ShowTotalProfit.java b/src/Commands/ShowTotalProfit.java
index 073454d..d50a55f 100644
--- a/src/Commands/ShowTotalProfit.java
+++ b/src/Commands/ShowTotalProfit.java
@@ -22,7 +22,7 @@ public class ShowTotalProfit extends Command {
 	@Override
 	public void execute(ArrayList<String> arguments, MyFoodora foodora, ActiveUserContext activeUser) {
 		if(activeUser.getUser() instanceof Manager){
-			System.out.println(foodora.getGlobalProfit());
+			System.out.println("Total profit since the begining : " + foodora.getGlobalProfit());
 		}
 		else{
 			System.out.println("You need to be a manager in order to access this function");
diff --git a/model.di b/src/Commands/model.di
similarity index 100%
rename from model.di
rename to src/Commands/model.di
diff --git a/model.notation b/src/Commands/model.notation
similarity index 100%
rename from model.notation
rename to src/Commands/model.notation
diff --git a/model.uml b/src/Commands/model.uml
similarity index 100%
rename from model.uml
rename to src/Commands/model.uml
diff --git a/src/Core/Main.java b/src/Core/Main.java
index b606a98..27f526a 100644
--- a/src/Core/Main.java
+++ b/src/Core/Main.java
@@ -23,15 +23,20 @@ public class Main {
 		// TODO Auto-generated constructor stub
 	}
 
-	public static void main(String[] args) throws ExceptionUnknownStartegyType, errorWrongNumberOfParams, errorWrongFormatValue, ExceptionUnknownDishType, ExceptionUnknownMealType, ExceptionUnknownTypeOfUser {
+	public static void main(String[] args)  {
 		// TODO Auto-generated method stub
-		MyFoodora foodora = new MyFoodora();
+		MyFoodora foodora = null;
+		foodora = new MyFoodora();
 		ActiveUserContext activeUser = new ActiveUserContext(foodora);
 		foodora.setMarkupPercentage(0.05);
 		foodora.setServiceFee(3.0);
 		Clui clui = new Clui(foodora,activeUser);
 		
 		Manager manager = new Manager(650588938, "ceo", "ceo", "ceo@centrale.supelec.fr", "123456789", new Adress(15.0, 10.0), true, "25/15/1955", "jacquo");
+		foodora.addManager(manager);
+		
+		clui.executeCommand("runtest scenario/my_foodora.ini");
+		clui.executeCommand("runtest scenario/testScenario1.txt");
 		
 		/*
 		foodora.addManager(manager);
diff --git a/src/Core/MyFoodora.java b/src/Core/MyFoodora.java
index d51e6ab..7a74289 100644
--- a/src/Core/MyFoodora.java
+++ b/src/Core/MyFoodora.java
@@ -3,6 +3,8 @@ package Core;
 import java.time.ZoneId;
 import java.util.ArrayList;
 import java.util.Calendar;
+import java.util.Collections;
+import java.util.Comparator;
 import java.util.Date;
 import java.util.TimeZone;
 
@@ -57,15 +59,26 @@ public class MyFoodora {
 	/** CONSTRUCTOR 
 	 * @throws ExceptionUnknownStartegyType **/
 	
-	public MyFoodora() throws ExceptionUnknownStartegyType{
-		this.contextTargetProfitStrategy = new ContextTargetProfitStrategy("DeliveryCost");
-		this.contextDeliveryPolicy = new ContextDeliveryStrategy("FairOccupation");
+	public MyFoodora(){
+		try {
+			this.contextTargetProfitStrategy = new ContextTargetProfitStrategy("DeliveryCost");
+		} catch (ExceptionUnknownStartegyType e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+		try {
+			this.contextDeliveryPolicy = new ContextDeliveryStrategy("FairOccupation");
+		} catch (ExceptionUnknownStartegyType e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
 		this.listRestaurant = new ListUser<Restaurant>();
 		this.listCustomer = new ListUser<Customer>();
 		this.listManager = new ListUser<Manager>();
 		this.listCourier = new ListUser<Courier>();
 		this.globalListUser = new ListUser<User>();
 		this.globalHistoric = new HistoricOrder();
+		this.listPendingOrder = new ArrayList<Order>();
 	}
 	
 	/** CUSTOM **/
@@ -91,6 +104,7 @@ public class MyFoodora {
 				return user;
 			}
 		}
+		System.out.println("\n /!\\ WARNING : " + username + " is not in user database.");
 		return null;	
 	}
 	
@@ -224,6 +238,19 @@ public class MyFoodora {
 	public ListUser<Courier> getListCourier() {
 		return listCourier;
 	}
+	public ListUser<Courier> getListCourierOrdered(String type) {
+		Collections.sort(listCourier.getList());
+		switch(type){
+			case "ASC":
+			break;
+			case "DESC":
+				Collections.reverse(listCourier.getList());
+			break;
+			default:
+				System.out.println("Warning, "+type+" is unkown, only ASC & DESC are known.");
+		}
+		return listCourier;
+	}
 	public HistoricOrder getGlobalHistoric() {
 		return globalHistoric;
 	}
@@ -314,13 +341,18 @@ public class MyFoodora {
 	}
 	
 	public int getNumberOfOrderLastMonth() {
-		Date date = null; // your date
+		/*
+		Date date = new Date(); // your date
 	    Calendar cal = Calendar.getInstance();
 	    cal.setTimeZone(TimeZone.getDefault());
 	    cal.setTime(date);
 	    int theYear = cal.get(Calendar.YEAR) + 1;
 	    int theMonth = cal.get(Calendar.MONTH) + 2;
 	    int theDay = cal.get(Calendar.DAY_OF_MONTH);
+	    */
+		int theDay = new java.util.Date().getDay();
+		int theMonth = new java.util.Date().getMonth() + 1 ;
+		int theYear = new java.util.Date().getYear() + 1900;
 		Others.Date today = new Others.Date(theYear, theMonth, theDay);
 		int lastMonth = 0;
 		int yearOfLastMonth = 0;
@@ -334,7 +366,7 @@ public class MyFoodora {
 		}
 		int nbOfOrder = 0;
 		for(Order order : this.globalHistoric.getListOrder()){
-			if((order.getDate().getIntMonth()== lastMonth)&(order.getDate().getIntYear()==yearOfLastMonth)){
+			if((order.getDate().getIntMonth()== lastMonth)&&(order.getDate().getIntYear()==yearOfLastMonth)){
 				nbOfOrder++;
 			}
 		}
@@ -346,7 +378,19 @@ public class MyFoodora {
 		double totalProfit = 0;
 		for(Order order : this.globalHistoric.getListOrder()){
 			if(order != null){
-				totalProfit = order.getPrice()*this.markupPercentage + this.serviceFee - this.deliveryCost ;
+				totalProfit += order.getPrice()*this.markupPercentage + this.serviceFee - this.deliveryCost ;
+			}
+		}
+		return totalProfit;
+	}
+	
+public double getProfitBetween(Others.Date dateBeg, Others.Date dateEnd){
+		
+		double totalProfit = 0;
+		for(Order order : this.globalHistoric.getListOrder()){
+			//System.out.println(dateBeg + " - " + order.getDate() + " - " + dateBeg.compareTo(order.getDate()));
+			if(dateBeg.compareTo(order.getDate()) <= 0 && dateEnd.compareTo(order.getDate()) >= 0){
+				totalProfit += order.getPrice()*this.markupPercentage + this.serviceFee - this.deliveryCost ;
 			}
 		}
 		
diff --git a/src/Item/Meal.java b/src/Item/Meal.java
index 9f4040d..8620226 100644
--- a/src/Item/Meal.java
+++ b/src/Item/Meal.java
@@ -21,7 +21,7 @@ import Order.Order;
  */
 public abstract class Meal extends Item{
 	
-	ArrayList<Dish> listDish = new ArrayList<Dish>();
+	ArrayList<Dish> listDish = null;
 	String [][] patternTypeInMeal;
 	protected String typeOfMeal;
 	protected long nbOfSell;
@@ -33,7 +33,7 @@ public abstract class Meal extends Item{
 	public Meal(String name,String typeOfFood) {
 		super(name,typeOfFood);
 		this.nbOfSell = 0;
-		
+		this.listDish = new ArrayList<Dish>();
 	}
 	
 	/** add and remove dishes **/
@@ -43,22 +43,14 @@ public abstract class Meal extends Item{
 		int idInMenuInc=0;
 		for(String[] tabOfType : this.getPatternTypeInMeal()){
 			for(String typeFromPatternType : tabOfType){
-				if(typeFromPatternType==dish.getTypeInMeal()){
+				if(typeFromPatternType.toLowerCase().equals(dish.getTypeInMeal().toLowerCase())){
 					idInMenu=idInMenuInc;
 				}
 			}
 			idInMenuInc+=1;
 		}
 		if(idInMenu>-1){
-			if(listDish.get(idInMenu)==null){
-				listDish.set(idInMenu, dish);
-			}
-			else{
-				if(Cli.Confirm.text("This dish : "+listDish.get(idInMenu).toString()+" exists already. Do you want to replace it ?))")){
-					listDish.remove(idInMenu);
-					listDish.add(idInMenu, dish);
-				}
-			}
+			this.listDish.set(idInMenu, dish);
 		}
 	}
 	
@@ -139,11 +131,11 @@ public abstract class Meal extends Item{
 	@Override
 	public String toString(){
 		String s="";
-		s+="Menu : "+name;
-		s+="\nType of Food : "+typeOfFood;
-		s+="\nThis Menu contain : ";
+		s+="\n***\nMenu : "+name;
+		s+=", this Menu contain : ";
 		for(Dish d:listDish){
-			s+="\n"+d.toString();
+			if(d != null)
+				s+=d.toString();
 		}
 		return s;
 	}
diff --git a/src/Offers/MealOfTheWeek.java b/src/Offers/MealOfTheWeek.java
index 42fe167..75a6772 100644
--- a/src/Offers/MealOfTheWeek.java
+++ b/src/Offers/MealOfTheWeek.java
@@ -75,8 +75,6 @@ public class MealOfTheWeek implements ObservableOffer {
 		this.observers = observers;
 	}
 
-
-
 	@Override
 	public void notifyObservers(Restaurant r) {
 		if(this.changed){
diff --git a/src/Order/Order.java b/src/Order/Order.java
index c83efd3..a58851f 100644
--- a/src/Order/Order.java
+++ b/src/Order/Order.java
@@ -40,13 +40,12 @@ public class Order implements Comparable<Order>{
 		
 		this.listDish = new ArrayList<Dish>();
 		this.listMeal = new ArrayList<Meal>();
-		nameOrder = _name;
-		restaurantAttached = _restaurant;
+		this.nameOrder = _name;
+		this.restaurantAttached = _restaurant;
 	}
 
 	/** CUSTOM **/
 	
-	@SuppressWarnings("deprecation")
 	public void finalize(){
 		int theDay = new java.util.Date().getDay();
 		int theMonth = new java.util.Date().getMonth() + 1 ;
@@ -64,6 +63,12 @@ public class Order implements Comparable<Order>{
 		foodora.getOrderPendingList().add(this);
 	}
 	
+	public void finalize(MyFoodora foodora, Others.Date _date){
+		this.date = _date;
+		finalized = true;
+		foodora.getOrderPendingList().add(this);
+	}
+	
 	public static ArrayList<Order> getListOfOrderInAPeriod(HistoricOrder historic,Period period){
 		ArrayList<Order> listOrder = new ArrayList<Order>();
 		int beginDay = period.getBeginingOfPeriod().getIntDay();
@@ -138,11 +143,13 @@ public class Order implements Comparable<Order>{
 		Item item = this.restaurantAttached.getDishByName(string);
 		if(item != null)
 			this.add((Dish) item);
-		item = this.restaurantAttached.getMealByName(string);
-		if(item != null)
-			this.add((Meal) item);
-		if(item == null)
-			System.out.println("Unknown item.");
+		else{
+			item = this.restaurantAttached.getMealByName(string);
+			if(item != null)
+				this.add((Meal) item);
+			else
+				System.out.println("Unknown item.");
+		}
 	}
 	
 	public void add(Dish d){
@@ -186,14 +193,18 @@ public class Order implements Comparable<Order>{
 	public double getPrice(){
 		price = 0;
 		MealOfTheWeek mealOfTheWeekAttachedToRestaurant = restaurantAttached.getMealOfTheWeek();
-		String nameOfTheMealOfTheWeek = null;
-		for(Meal m : restaurantAttached.getListOfMeal()){
-			if(mealOfTheWeekAttachedToRestaurant.getMeal().getName() == m.getName()){
-				nameOfTheMealOfTheWeek = m.getName();
+		String nameOfTheMealOfTheWeek = "";
+		if(mealOfTheWeekAttachedToRestaurant != null){
+			if(mealOfTheWeekAttachedToRestaurant.getMeal() != null){
+				for(Meal m : restaurantAttached.getListOfMeal()){
+					if(mealOfTheWeekAttachedToRestaurant.getMeal().getName().toLowerCase().equals(m.getName().toLowerCase())){
+						nameOfTheMealOfTheWeek = m.getName();
+					}
+				}
 			}
 		}
 		for(Meal meal : listMeal){
-			if(meal.getName() == nameOfTheMealOfTheWeek){
+			if(meal.getName().toLowerCase().equals(nameOfTheMealOfTheWeek.toLowerCase())){
 				price += meal.getPrice()*(1-restaurantAttached.getSpecialDiscountFactor());
 			}
 			else{
@@ -229,7 +240,9 @@ public class Order implements Comparable<Order>{
 		this.listMeal = listMeal;
 	}
 	
-	
+	public String toString(){
+		return "\n***\n Order, name : "+nameOrder+", date : "+ date +"\n Dishs : "+ listDish + "\n Meals : " + listMeal;
+	}
 
 	public void setDate(Others.Date date) {
 		this.date = date;
diff --git a/src/Others/Date.java b/src/Others/Date.java
index 69e97b2..f02845c 100644
--- a/src/Others/Date.java
+++ b/src/Others/Date.java
@@ -71,5 +71,20 @@ public class Date {
 	public String toString() {
 		return "Date dd/mm/yyyy : " + day + "/" + month + "/" + year ;
 	}
-
+	
+	public int compareTo(Others.Date date) {
+		if(date.getIntYear() < this.getIntYear())
+			return 1;
+		else if(date.getIntMonth() < this.getIntMonth())
+			return 1;
+		else if(date.getIntDay() < this.getIntDay())
+			return 1;
+		else if(date.getIntYear() > this.getIntYear())
+			return -1;
+		else if(date.getIntMonth() > this.getIntMonth())
+			return -1;
+		else if(date.getIntDay() > this.getIntDay())
+			return -1;
+		return 0;
+	}
 }
diff --git a/src/StrategyProfit/TargetProfitDeliveryCost.java b/src/StrategyProfit/TargetProfitDeliveryCost.java
index ab58274..5fe6345 100644
--- a/src/StrategyProfit/TargetProfitDeliveryCost.java
+++ b/src/StrategyProfit/TargetProfitDeliveryCost.java
@@ -17,6 +17,8 @@ public class TargetProfitDeliveryCost extends StrategyTargetProfitPolicy {
 			double newDeliveryCost = myFoodora.getServiceFee() + (lastMonthIncome*myFoodora.getMarkupPercentage()-targetProfit)/numberOfOrder;
 			if(newDeliveryCost > 0){
 					myFoodora.setDeliveryCost(newDeliveryCost);
+			}else{
+				System.out.println("Warning, new deliveryCost is negative, aborted. " + newDeliveryCost);
 			}
 		}
 	}
diff --git a/src/StrategyProfit/TargetProfitMarkup.java b/src/StrategyProfit/TargetProfitMarkup.java
index 76ac7aa..d56852a 100644
--- a/src/StrategyProfit/TargetProfitMarkup.java
+++ b/src/StrategyProfit/TargetProfitMarkup.java
@@ -17,6 +17,8 @@ public class TargetProfitMarkup extends StrategyTargetProfitPolicy {
 			double newMarkupPercentage = (targetProfit-myFoodora.getServiceFee()*numberOfOrder+myFoodora.getDeliveryCost()*numberOfOrder)/lastMonthIncome;
 			if(newMarkupPercentage >0){
 				myFoodora.setMarkupPercentage(newMarkupPercentage);
+			}else{
+				System.out.println("Warning, new markupPercentage is negative, aborted. " + newMarkupPercentage);
 			}
 		}
 	}
diff --git a/src/StrategyProfit/TargetProfitServiceFee.java b/src/StrategyProfit/TargetProfitServiceFee.java
index 1a44d06..f550fe6 100644
--- a/src/StrategyProfit/TargetProfitServiceFee.java
+++ b/src/StrategyProfit/TargetProfitServiceFee.java
@@ -17,8 +17,11 @@ public class TargetProfitServiceFee extends StrategyTargetProfitPolicy {
 			double newServiceFee = (targetProfit-lastMonthIncome*myFoodora.getMarkupPercentage())/numberOfOrder + myFoodora.getDeliveryCost();
 			if(newServiceFee >0){
 				myFoodora.setServiceFee(newServiceFee);
-
+			}else{
+				System.out.println("Warning, new serviceFee is negative, aborted. " + newServiceFee);
 			}
+		}else{
+			System.out.println("Warning, no orders last month, new strategy can't be calculated");
 		}
 		
 	}
diff --git a/src/User/Courier.java b/src/User/Courier.java
index dba39a5..ab36214 100644
--- a/src/User/Courier.java
+++ b/src/User/Courier.java
@@ -22,7 +22,7 @@ import Others.Position;
  */
 
 
-public class Courier extends HumanUser {
+public class Courier extends HumanUser{
 
 	
 	private Position position;
@@ -152,5 +152,16 @@ public class Courier extends HumanUser {
 		System.out.println("The courier " + this.name + " has refused the delivery");
 	}
 	
-
+	public String toString(){
+		return "Courier : "+name+", position : "+adress+", number of orders done : "+nbOfLivraison+", available : "+available;
+	}
+	
+	public int compareTo(User courier){
+		if(courier instanceof Courier){
+			Courier c = (Courier) courier;
+			return (int) c.getNbOfLivraison() - (int) this.getNbOfLivraison();
+		}
+		return -1;
+	}
+	
 }
diff --git a/src/User/Customer.java b/src/User/Customer.java
index 312b20e..e740b15 100644
--- a/src/User/Customer.java
+++ b/src/User/Customer.java
@@ -36,8 +36,13 @@ public class Customer extends HumanUser implements VisiterCard,Observer {
 	private FidelityCard card;
 	private IDCard idCard;
 	private ArrayList<Order> listOrder = new ArrayList<Order>();
+	private ArrayList<String> listOffer = new ArrayList<String>();
 	private long nbOfOfferReceived;
 	
+	public ArrayList<Order> getListOrder() {
+		return listOrder;
+	}
+
 	public Customer(long phoneNumber, String name, String username, String mail, String password,
 			Adress adress, boolean activated, String birthdayDate, String surname) {
 		super(phoneNumber, name, username, mail, password, adress, activated, birthdayDate, surname);
@@ -63,7 +68,8 @@ public class Customer extends HumanUser implements VisiterCard,Observer {
 
 	@Override
 	public String toString() {
-		return "Customer [spamAgree=" + spamAgree + ", historique=" + historic + ", card=" + card + "]";
+		return "\n***\n" + this.name + ", mail : " + this.mail + ", phone : " + Long.toString(this.phoneNumber) + ", position : " + this.adress +
+		", spamAgree : " + spamAgree + "\nhave been delivered : " + historic.getListOrder().size() + " times.\ncard : " + card.toString();
 	}
 	
 	
@@ -130,6 +136,81 @@ public class Customer extends HumanUser implements VisiterCard,Observer {
 		System.out.println("You have to pay " + price);
 	}
 	
+	public void placeOrder(Order order, MyFoodora foodora){
+		Restaurant restaurant = order.getRestaurantAttached();
+		for(Dish dish : order.getListDish()){
+			dish.setNbOfSell(dish.getNbOfSell() + 1);
+		}
+		for(Meal meal : order.getListMeal()){
+			meal.setNbOfSell(meal.getNbOfSell() + 1);
+		}
+		this.historic.addOrder(order);
+		restaurant.historic.addOrder(order);
+		Courier chosenCourier = foodora.getContextDeliveryPolicy().getStrategy().chooseCourier(restaurant, this,foodora.getListCourier().getList());
+		foodora.getOrderPendingList().add(order);
+		
+		// should be a waiting time here
+		if(chosenCourier == null)
+			System.out.println("No courier available now");
+		else{
+			chosenCourier.acceptDelivery(order);
+			foodora.getOrderPendingList().remove(order);
+			foodora.getGlobalHistoric().addOrder(order);
+			this.getListOrder().remove(order);
+			if (this.card instanceof PointFidelityCard){
+				((PointFidelityCard) this.card).setNbOfPoint(this.getPointInTheCard() + 1);
+			}
+			double price = order.getPrice()*(1 + foodora.getMarkupPercentage()) + foodora.getDeliveryCost() + foodora.getServiceFee();
+			boolean chance = false;
+			if(this.card instanceof LotteryFidelityCard){
+				chance = ((LotteryFidelityCard) this.card).getReduction();
+			}
+			if(chance){
+				price = price*0.75;
+			}
+			System.out.println("You have to pay " + price);
+		}
+	}
+	
+	public void placeOrder(Order order, MyFoodora foodora, Others.Date date){
+		Restaurant restaurant = order.getRestaurantAttached();
+		order.setDate(date);
+		if(!foodora.getOrderPendingList().contains(order)){
+			for(Dish dish : order.getListDish()){
+				dish.setNbOfSell(dish.getNbOfSell() + 1);
+			}
+			for(Meal meal : order.getListMeal()){
+				meal.setNbOfSell(meal.getNbOfSell() + 1);
+			}
+			this.historic.addOrder(order);
+			restaurant.historic.addOrder(order);
+			foodora.getOrderPendingList().add(order);
+		}
+		Courier chosenCourier = foodora.getContextDeliveryPolicy().getStrategy().chooseCourier(restaurant, this,foodora.getListCourier().getList());
+		
+		// should be a waiting time here
+		if(chosenCourier == null)
+			System.out.println("No courier available now");
+		else{
+			chosenCourier.acceptDelivery(order);
+			order.setDate(date);
+			foodora.getOrderPendingList().remove(order);
+			foodora.getGlobalHistoric().addOrder(order);
+			if (this.card instanceof PointFidelityCard){
+				((PointFidelityCard) this.card).setNbOfPoint(this.getPointInTheCard() + 1);
+			}
+			double price = order.getPrice()*(1 + foodora.getMarkupPercentage()) + foodora.getDeliveryCost() + foodora.getServiceFee();
+			boolean chance = false;
+			if(this.card instanceof LotteryFidelityCard){
+				chance = ((LotteryFidelityCard) this.card).getReduction();
+			}
+			if(chance){
+				price = price*0.75;
+			}
+			System.out.println("You have to pay " + price);
+			System.out.println("Your delivrer is " + chosenCourier.getName());
+		}
+	}
 	
 	/*
 	
@@ -205,25 +286,29 @@ public class Customer extends HumanUser implements VisiterCard,Observer {
 	public void registerFidelityPlan(String newTypeOfFidelityCard){
 		if(newTypeOfFidelityCard == this.card.returnType()){
 			System.out.println("You already have this card");}
-		else if ((newTypeOfFidelityCard != "Basic")&(newTypeOfFidelityCard != "Lottery")&(newTypeOfFidelityCard != "Point")){
+		else if (!
+				(newTypeOfFidelityCard.toLowerCase().equals("basic")
+				|| newTypeOfFidelityCard.toLowerCase().equals("lottery")
+				|| newTypeOfFidelityCard.toLowerCase().equals("point"))
+				){
 			System.out.println("You have to choose between Point, Lottery card");
 		}
-		else if (newTypeOfFidelityCard == "Basic"){
+		else if (newTypeOfFidelityCard.toLowerCase().equals("basic")){
 			System.out.println("You have to choose between Point, Lottery card");
 		}
 		else {
-			if (newTypeOfFidelityCard == "Point"){
+			if (newTypeOfFidelityCard.toLowerCase().equals("point")){
 				idCard=IDCard.getInstance();
 				this.card = new PointFidelityCard();
 			}
 			
-			if (newTypeOfFidelityCard == "Lottery"){
+			if (newTypeOfFidelityCard.toLowerCase().equals("lottery")){
 				idCard=IDCard.getInstance();
 				this.card = new LotteryFidelityCard();
-
 			}
+			System.out.println("Successfully done");
 		}
-		}
+	}
 	
 	public void unregisterFidelityPlan(){
 		if(this.card.returnType() == "Basic"){
@@ -297,15 +382,26 @@ public class Customer extends HumanUser implements VisiterCard,Observer {
 	
 	public Order getOrderByName(String string) {
 		for(Order order : listOrder){
-			if(order.getNameOrder().equals(string));
+			if(order.getNameOrder().toLowerCase().equals(string.toLowerCase()))
 				return order;
 		}
+		System.out.println(this.getListOrder());
+		System.out.println("\n/!\\ WARNING : " + string + " order is unkown.");
 		return null;
 	}
 
+	public void checkForPendingOffer(){
+		if(listOffer.size() > 0){
+			for(String offer : listOffer){
+				System.out.println("\n/!\\ An offer has been received /!\\\n" + offer);
+			}
+			listOffer.clear();
+		}
+	}
+	
 	@Override
 	public void update(String offer) {
-		System.out.println(offer);
+		listOffer.add(offer);
 		this.nbOfOfferReceived++;
 	}
 
diff --git a/src/User/MoralUser.java b/src/User/MoralUser.java
index 93600ad..4053d4c 100644
--- a/src/User/MoralUser.java
+++ b/src/User/MoralUser.java
@@ -1,5 +1,7 @@
 package User;
 
+import java.math.BigInteger;
+
 import Others.Adress;
 
 public class MoralUser extends User {
diff --git a/src/User/Restaurant.java b/src/User/Restaurant.java
index 0c2f764..c703064 100644
--- a/src/User/Restaurant.java
+++ b/src/User/Restaurant.java
@@ -37,10 +37,6 @@ public class Restaurant extends MoralUser {
 		this.generalDiscountFactor = 0.05;
 		this.specialDiscountFactor = 0.1;
 	}
-	
-	public Restaurant(){
-		
-	}
 
 
 	/** SETTERS
@@ -81,7 +77,7 @@ public class Restaurant extends MoralUser {
 		
     public Dish getDishByName(String name){
 		for(Dish d : listOfDish){
-			if(d.getName() == name){
+			if(d.getName().toLowerCase().equals(name.toLowerCase())){
 				return d;
 			}
 		}
@@ -90,7 +86,7 @@ public class Restaurant extends MoralUser {
     
     public Meal getMealByName(String name){
 		for(Meal m : listOfMeal){
-			if(m.getName() == name){
+			if(m.getName().toLowerCase().equals(name.toLowerCase())){
 				return m;
 			}
 		}
@@ -110,7 +106,9 @@ public class Restaurant extends MoralUser {
 	
 	@Override
 	public String toString() {
-		return "Restaurant =" + this.name;
+		return "\n***\nRestaurant " + this.name + ", mail : " + this.mail + ", tel : "+ this.phoneNumber +", position : " + this.adress
+				+ "\nList of Dishs : " + this.getListOfDish()
+				+ "\nList of Meals : " + this.getListOfMeal();
 	}
 
 
@@ -216,7 +214,7 @@ public class Restaurant extends MoralUser {
 	
 	public void addMealOfTheWeek(MyFoodora foodora, String nameOfMeal){
 		for(Meal meal : listOfMeal){
-			if(meal.getName() == nameOfMeal){
+			if(meal.getName().toLowerCase().equals(nameOfMeal.toLowerCase())){
 				this.mealOfTheWeek.setMeal(meal);
 			}
 		}
diff --git a/src/User/User.java b/src/User/User.java
index 25be834..87b4743 100644
--- a/src/User/User.java
+++ b/src/User/User.java
@@ -1,11 +1,6 @@
 package User;
 
 import Others.Adress;
-import java.io.*;
-import java.util.*;
-
-import Cli.Input;
-import Core.MyFoodora;
 import Order.HistoricOrder;
 
 public abstract class User implements Comparable<User> {
@@ -76,8 +71,7 @@ public abstract class User implements Comparable<User> {
 	
 	@Override
 	public String toString() {
-		return "User [id=" + id + ", phoneNumber=" + phoneNumber + ", name=" + name + ", username=" + username
-				+ ", mail=" + mail + ", password=" + password + ", adress=" + adress + ", activated=" + activated + "]";
+		return this.name + ", mail : " + this.mail + ", phone : " + Long.toString(this.phoneNumber) + ", position : " + this.adress;
 	}
 	
 	/** GETTER & SETTER **/
diff --git a/src/test/TestCli.java b/src/test/TestCli.java
index 4b805a9..0b4a457 100644
--- a/src/test/TestCli.java
+++ b/src/test/TestCli.java
@@ -2,9 +2,47 @@ package test;
 
 import static org.junit.Assert.*;
 
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+
+import Cli.Clui;
+import Cli.errorWrongFormatValue;
+import Core.ActiveUserContext;
+import Core.MyFoodora;
+import Exception.ExceptionUnknownStartegyType;
+import Others.Adress;
+import User.Manager;
+
 
 public class TestCli {
 
+	@Rule
+	public final ExpectedException exception = ExpectedException.none();
 	
-
+	@Test
+	public void testClui() throws ExceptionUnknownStartegyType{
+		MyFoodora foodora = null;
+		foodora = new MyFoodora();
+		ActiveUserContext activeUser = new ActiveUserContext(foodora);
+		Clui clui = new Clui(foodora,activeUser);
+		Manager manager = new Manager(650588938, "ceo", "ceo", "ceo@centrale.supelec.fr", "123456789", new Adress(15.0, 10.0), true, "25/15/1955", "jacquo");
+		foodora.addManager(manager);
+		clui.executeCommand("login ceo 123456789");
+		assert(activeUser.getUser() == manager);
+	}
+	/*
+	@Test
+	public void testTokenWrongFormat() {
+		exception.expect(errorWrongFormatValue.class);
+		MyFoodora foodora = null;
+		foodora = new MyFoodora();
+		ActiveUserContext activeUser = new ActiveUserContext(foodora);
+		Clui clui = new Clui(foodora,activeUser);
+		Manager manager = new Manager(650588938, "ceo", "ceo", "ceo@centrale.supelec.fr", "123456789", new Adress(15.0, 10.0), true, "25/15/1955", "jacquo");
+		foodora.addManager(manager);
+		clui.executeCommand("login ceo 123456789");
+		clui.executeCommand("registerCustomer 943684597 Jacques custo_jacques jacques@mail.fr jacques_pwd -9.8 23/02/1975");
+	}
+	*/
 }
diff --git a/src/test/TestItem.java b/src/test/TestItem.java
index abe35bb..fc26484 100644
--- a/src/test/TestItem.java
+++ b/src/test/TestItem.java
@@ -64,10 +64,8 @@ public class TestItem {
 		Dish dish3 = factory1.createDish("Dessert", "soupe", "glutenfree", 5);
 		meal.addDish(dish);
 	    meal.addDish(dish2);
-		System.out.println("please type n");
 		meal.addDish(dish3);
-		assertTrue(meal.getPrice() == 10.0);
-		
+		assertTrue(meal.getPrice() == 10.5);
 	}
 	
 	
-- 
GitLab