From e8b183ab95fd38ce112414a2fa52a4b5b0f84775 Mon Sep 17 00:00:00 2001 From: Isaiah Clifford Opoku Date: Fri, 26 Jul 2024 09:47:57 +0000 Subject: [PATCH] Add currency support and update project configurations Re-added `CountryData.Sample.Web.API` project with a new GUID and updated solution configurations accordingly. Enhanced `README.md` with a logo and details on new methods `GetCurrencyCodesByCountryCode` and `GetCountryByCurrencyCode`. Updated `Program.cs` in `CountryData.Sample.CountryConsoleProject` to call new methods. Added new endpoints in `CountryController.cs` for the new methods. Removed `InvariantGlobalization` from `CountryData.Sample.Web.API.csproj`. Updated `Program.cs` in `CountryData.Sample.Web.API` to add controllers and remove comments. Added `Currency` property to `Country.cs` in `CountryData.Standard`. Enhanced `CountryHelper.cs` with new methods, fixed formatting, and added exception handling. Introduced new unit tests in `CountryHelperTests` to verify currency-related methods. Added `Currency` class in new `CountryData.Standard` namespace. --- Assets/CountryData.Net.Logo.png | Bin 0 -> 84932 bytes CountryData.Standard.sln | 14 +- README.md | 43 +- docs/README.md | 26 + sample/CountryData.Sample.Console/Program.cs | 47 +- .../Controllers/CountryController.cs | 41 +- .../CountryData.Sample.Web.API.csproj | 1 - .../CountryData.Sample.Web.API.http | 0 sample/CountryData.Sample.Web.API/Program.cs | 6 +- src/CountryData.Standard/Country.cs | 4 +- src/CountryData.Standard/CountryHelper.cs | 31 +- src/CountryData.Standard/Currency.cs | 8 + src/CountryData.Standard/data.json | 1507 ++++++++++++++++- .../CountryHelperTests.cs | 80 + 14 files changed, 1754 insertions(+), 54 deletions(-) create mode 100644 Assets/CountryData.Net.Logo.png delete mode 100644 sample/CountryData.Sample.Web.API/CountryData.Sample.Web.API.http create mode 100644 src/CountryData.Standard/Currency.cs diff --git a/Assets/CountryData.Net.Logo.png b/Assets/CountryData.Net.Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..4d95b80ef0d4943e6f2a180bf12c10f0eaa25aee GIT binary patch literal 84932 zcmeFY^;=s}vo?%7#ogWA9fB37Kyhhtm*DOaTnZF-D^}dy-QA(M7I(h%yytoTi0?W- znVB$)k)4U)AJ_%3Y)B%Pv|D&)zPbFT0j**%R*Z2q?f2$?phG*#8J5j$n}eU+Hq8(a`~y z0n$Gh{wp5f=o;m}3zC2UbT4@3d_{@>rwv$OK&r+6swR$p1OXE=E%Xh;4Cz0*1)#SI zL;q(X4iDC46Ecck{lD6RRVVoG;{R0tzf=DoulPTM{~wS0KVSds~J74L_j!XsyYmT(+BZ68QzThV{@dI<8geMFW--(P@bWXoqZ5O z#-woiZqNPW??>~6#*pEGm^(Nc=Lp$QP+`Ep1QJkQb*O9rH>_yZvv>#{Ib+1}&@C9E zExu{MDKW>Q$P9g(<=qRZdTba8r*ZKDA!H6`zF&Q7M z0B0OB=g<2=;5hEsj?sLm-lX3|Nz&0aHggpNNGBAx2|<7~JMvdNO2bOX`b2lL017(w}Q2oU(D<*j@KN~#ULC?s80%`raEdCB;~5RNEJ=R)cJyw}Ql z@5<)&nkn{l5lScG!5J7U0nUFWDQdKo2$`)2uSda4`u=ip-gv!VesaSFL4Zaek^pHa zhQ$eGC^bnz!>c30vB60~@2axON4jmF)rrFCkbNoh(C(Q1UMtvqWf9)yea{Zo$3v$N z*As^Wz-jhdD}wEFKUh$XyS8|q6-I}Ia(&43VPV+zAHzfl8_|dc7TA*T(VU96>LfA^ z2A5d7N2WDcEo4VJ*N>h?&yDEME_e!)IXvJ@X@RQS@*AAxiP>Oy-~QSQz0O|Qd=K;Ycw}4R$Q}8? z4@3)(Z)XK>rZZ{aL{95|ShCgKygl`N%oN69}E-Kfo#UHjaQ0kXOYg-(C?qz2jRMw4L~UyP$3kS#gB7pOTDt*kD2TV!Bnt?k+Nvxf<3w3P0r(8sshSXQM+l8C+sB zsbs|?ZhS}NC$h-#SVryc38%Sr+s$lrJ-%&&?ua54{ZIfL4S84Y`>9ibF`P>HzoX`X zI?VE3K~o5=dP)WgAOwl?^a?_WiKhUViq6RBD@iJoX%8C;j&cPZL{WaY)$dtOf3#Jd zdgQWlKBD=140XN6mBGn}bP|HaYDUa4*opU`vm58MvAAp22M)fS5g{ZWaMJDjAg@6NU}c zk=hP&c3_WXmFSU751o$vuCOt)XiZkc&rTLF37-I8dLunbji*o5kVaSGUocnE)N9wBDLXwH(b=kcY zHTgeHbvlmyrM(3`j8(b1H-R6;Hy>w>WBVXP!N*vTJ7u_9txMiBS z{JjTvs0gJAMJI)rCr@273rMN|5?g-pJe%r&Iao&C`Z341)!eIb$-l_@z(;!<7<2fs z@=(PON>vKm{Qj?cSPmL>feFM4gcz8H?jp+8Gfnlz=h<%kLFMOyD~KWJ5KaS$O~|I-oFT_Xi{Q0;t% zB}^D|#K4}Op2*9WH~BK>A8Mx%zF~`AIQ6>boLpP@>YDOTx;Bhg2eZHQA@*a!qz;R% z2nkHAV^7aQd+w=~nkc!do2y>Z_nOy!$h!|XvCsd?ZGf<3DEe$~clKBy_ALL=8Cnx|NG$Ln}1$JH|sZc+FL9llaWgs-pAkcA>X3#Oe=FCFKVhQ1Vdfk;ud0 z(LK&O*4d*!JoCK1eOPv6n_v1J4s|KBx>x$p-cqCHtr<+j@-oEgUtGTLpYr*H8h8_#9?t6UIk;Po9|VGyPh2kZD-Z`rHneb+wE${&F1Z z|1P%W$9**B4I5|z3P69Zky5XsK~TgB6!Dh9!$oSAu(?x^XP~SIbwQ-WphTri;1e{@ zn7$F+#zJIEmDpdZ@3G_=R9gB#!bTca6OlQJEr?wOSYY7O-V*WpzenX{)JjDs?xqy= znS>a!!_waNE#xsRTttb&4r9IK9^OoX{I%FGhw$DW$n^OpXj13E4ksy&;JcWcjEoFb zE!&M>5H2gb^(*@MtE>&>Usx$@ED)E!mLVxms?)6xd_w}llFfN zi{_`tndHg_MBlN)uE!PzY5ie<(K_udvyxL`h#z$?r)klg1QD|!(0Gevyz4N(>#;}Z z;QD!ZS(yc#G*v3^QdY7dVCcVB>e}i5NWV>rT_l^5Q2>Wd44 zZ*8dPVn~sQ0_9(BB~M=L)@a>=Y*hJb15^*RwM) zz)9SVy+BNKCzAxr5J&M7$RLrsVp~ej%R9A%W*3Fe+KK^L9-IJOe?eOxy%t;CGVroTz;jiL#HQ z)(f@T)d+~|ahGR43<%#RmHJV-_t;@S;JRD>fM2QFuabe-Kmgv5g% z#T4#Bb@EP65|!#PZ$sKG%hWvtek@HV$1bP9f0BBh{gX7RIQ`|k>!#Z0Tz&>9Rt{H&|H#{J+BqGMxOqt$P^1av>b7F+p)6^QGah~J@K2VDdVkc-|4mLhL6F!!%;VTg<0B7zlnth z|0fkO|GQ}ML_S2Q5(KF54^e*UfOsn;D0K?e^3cOVtH&X@=Ct)A?3YQb*#*MQ-)^z!_#>#7Aa+dZ0gJ+nfX9`3Tg5APUj=ruMxa zw%47*LX1csMc6<-a5K$-6iwnA5=>ZFm?nSh$B=wEn&P;Vr}p ze%>KbC}N1{43Zdqm}rk6U9T3w(B!#!x1+&JWs~8@F5df9oyBk;BN(3l2M)3$2EM&K zxI>?OAR-N@sHD7SmfB@U#b#nd#17Qa#oU)Ny8v^9c*Fe8C#EA2vRtM{_Q3^JCtJ(L zjcM~M6P-$mcSl3?`dxvH4VVbvA$X`1vS9*~2ak1BYL2~M^MX>@4PqbKN(D+u^ zZ2-rBKrH(&pinIX%Uhzluda?<<;%N(28Z?S{o^S{Mer>PH(pMH7L+?v8)*{$WHv)@51ui9r6BR2y*EXl@a*8?p9-O;^(R`1f zrz5!+0@-aT=shfXGrSuHeRWU8&Mz+fuC%KMr12`dP|7wfBXZX|Hd<=)NYuVL^e_K? zj)c0t;?7Wd43xocpeNg|qRW0>i5c?B1d2!mh}lC0lRN&RWam`t>UX-^g5+;g=NMi% zuv7>9!3?ADCZ@NIKZGV;Sa`XtJ!-{ywA7^OCpA;V-U*wm7lE)2B>ZXTh2ZlZQrDS$qj)?`VBkds+ zv5&wjP{@q@9PO}1GD{(n&;wf>+zeX>52{F`quS@eYyaf8Iq0FLYI9bb3 zps8gr`L{S|lJL_8KW**nkfs`}wVJ;*v-PjAdN=l!e_!c32FHa-9mM)kQEi8Vxz|fq zkTF{FikZ$`)d%;Vrn}^1@VarQoZr=Jv|o?E5BbB;>AS5cX*J3u!7raqPmWI|QP@?9 zXG{}Bjo`L!aIgFwU=BZpZ@$bMy1;&Wpz1bMP7?(KvbiC}O(#q$)yl?6m|X|x6QB2d z5zrw(a_Z9!BJC`N+DPRnfTH`zGRwk%88=~IW*h^bss<#LGSo{q(7(2CX}hniI4z`@ z;+s7r-an}+sCO>6Hn!c{kBwO~>f-rX%0{UzK%+_QlE3hrMoWY1}oT(x{*Gu7coQgz5Z66pLKv$mI{n_w1AC>M_|YXHi={qAz1_Hsh(^tXj0r z?s*|s0UdWO2ceE4E_>M=1MS-D>;0C0O8?)(m*-Y<+e#zfySAz-)S-v8XqV^8!S)T} z6{S!SV9c`|5fNqrA2w#LIAj)9&rQuvUbw%@{>V%J$nYU2l5VhEz-wOjQG=S~wKzPf&n{@1p{u)Qu$f($gTYw0v}@NLszyvIU}ca<-UZ{j(( zO>LubNq5%LBA}w;5x$#O|0(7G2?qx^y|ff;UJjco6iynGYMkGHN`cvTU0AaYJ5@kP z=d|E9qS8=9i6^A9>oP49!Z}ts)PpH>Sfu3GppvpnGh4(%7nS{Ph~R;IBVS3np-1%V z-K>)L@lUJkX|WzwIbWl(M{?r=2tX(vh1%W}vxv2y znLfS_01Pht)H?zF9d|&k4!xN4&XUG?WZ~yzodUH|LyYx{OJ*AuPCNPV)p&ybp4$u|p z&l2k-V(Yx+B)lU`T3xI1V(QflW*nU9`Ubg}<%{bx6ndyPTX5>so~kf_qG7HuATG8x zB*pZz%@ z4j=bx9$!i1@372Z$0PbC3vIy6qW@7 z&j^>-p$(J!TG!L28Mp%w1~_>g)~Ruy^*{8pEB3GeVmeyNgTClcR8&+q(X(PR@<#Dk zQ`&IX`a>tE`WM*HbWuOCR#sQ9TZGagC?`?s_i}O6;ap+Y+|LF@#GVNJYVLUIcd-X& za`|0m(9nk{sycU(ER!gr06)29wx28;36Cx=26Zed26hLc(sGY@wjRFK_A`#|<9Z1h zPOv&|Nn`VU`ynAuqyI;gZ*_D)F_P?03V+M($cwmXRxOP^&y)eBTv82@#Z$uSTskIHu2-T!b-yT)Zxq|NQ(wf|Tl)js3# zov7M->$yil;Rt(-4p0(|kkwAdTa}$!*&)hcuMeNAbcADZGZ=#@DK^WKcvJkZdb_-u| zMv%|m9Y=RqruHY+NKL)GKD!ZHhAEX*=~m)_&K}6@rCd$E7~K^%t`4# zT!3Ft1!7Vse`e_bO^5rY)sH-@%;;%zWY6yT20nY2odY4+jA-`Od>C8;+?d$dS2ISQ zY?DIH(p(Bx$@x(q`STu}-7!nPmT%c2FU$MN$8a)hm;%4H==5(UsEXO!)`ljwr= zFU%-!h5GkJlVFn`h;hLU&OQJ&-MAS{Sh$|e4`tGMUAECKedp`35#OrVE!|&xWD?J# zQ*s-vyLKp9pK7NY_BcSQKADHbA}CD&;g?s1=EIAe?e5Pw$w0LH=-OXAgx`_p9h5^INF%S6$66{z4Z@a&bA<(u{l(+5_CdK!z8E~G%U%s zj|$N?Ze=TVpGhvu;jM6VpS#2m=CHBCp>wqLD%;-fOJ*#cSY5yJGYvdmsY`7Jsrc?L z{kENfXjKpuhJQF)?R*O!OJyU=f9W_qh%@MLJ&k?&!8+X-LQEJ=?joct3jFXFniIk6 zpZR3gIz<09Glq!wT{Xna{I9bsqmeGcn}*?AlE+1ijET+<(+vF~9YH6;J+-_&l7WM3 zZnS;iRHgF){DyJ}l~%P|JYi^$?@P^oo-8=l_6@&M>RnXgx?Usk7q6jE@sloCt|cs#tF_^dp#Mm+GOpZu;w4xw@~teoGxnX|BX&YSkOk_1hmZh0Q1u_Qp%coX1M< zHWs*3{E5Cr6gZqnt02^{$g7?yGwk)WXYZbRk;f_ZNoU=qv*F-t+X_su=VDeJVFNS|_A5l->AP~?_N&0g zWgpq&M3dOd8M2rhSL)Z}+If2~pQa9-c@3hR)48rrfie6%8?`6}RYp%DKHE+u1YcHv zdX?RpiK_xf%qi_Kzga5r6Nj`fanGGy#`$i1SmddCI!&cYy6I_mZu#QrpAUG)^r#}S zn*AUv=?DAb#6a+Tw!NKs-+#1vO-ExXN8fZnwFQqvx|iu7BG#&A@vi({pQbiWeOYj5 z!JZhTAJsUKS!|wdm&+||T2DL#@|-|#HS+dpCRN_yjHLk2y^7RoLX<$ZY0#tQD#VOJ zTvv6b?)36pH*k3qh! z7$fvN=M-<@6hyHN9x8yA9CFuPnbFXzXU7ra^Ob&#Oy&E{Mq6XY+gaVz=ErH*^9oV+ z<5Qix%y+mcCfyuJEJ3>nODst_C-tbC_DKNS3mVwr-V{oNGzE;%`7!?$=`b_`7L(+^ z{XgFA&!345h6L!eATzjvh5E&>l`T983_3@0*}N!?l)a*KO@PIo?Q2fHQVgI34+Qn? zBBS=87e4zzWHyI=U1vIa3VE!?DiA(eGCr@N#NgMHOzemIaJJOrzec9D91e(K7 z^>UtPvdgEKP~fH#uJj8}Zf+V@=+wbQ;jsoC3PdEu57lizXT&OZFl_ z*OuJsl|Y!A{PX^$8U7I)^nGtag@0v|THAjiS--YeP2SP@lhTn-&%HN8&txI}y*oHBp4{=OFue39sJDF51qlg*MpkDa;#Ra zTD1W#+2+Ovfg($^?O)s;|Clg0R$$UfWtn;CWlYc5f53@<&yE**&`@Wv%=rRKyD!=ZaYa-jh3whAMRm*`y6`C z>$2?6X_6#L1@*N+R`q2r{zsv$*8{%yU1X!jUX%vMI8$t3EV<(uxZD$S(;iJW#|X4; zcxO02s@_juS41nMT~sbkAJ8LPC<3h`!A3d|g?t|lNyZXR62hqCu;fmsPifo6<0kcf z^?dzff##T*IV{A1eF#@7i%3_~LP|HBfcmrO?~f4WrK#lxJC^m#X?37oU8pj62uSYY zMVCNYKAsRI5LCeZ8Z^|uWXYq-`lO%KVZOpxq0@<(y;oP8xi?)*6_)V@wPhlpWErAm z#PtApmK7VZz6qP?(oki~InGd~B9J`*>iskrhBBO>67sI~amCW!oMe3TuKo6`h|55C z>;LdK&Un9eATz+iavXbhny`|7rNQ|n8?8#O>EJz0-)NHxf!N_+*x}m+c3DxW+VF0r z3>>T2ttqbY#C&23733nhv;r4>4#Ng#o&p9{W0S7yKjfQsWGQdDidygsxtr zx&rp_(A8$YwrT3Oy=xPYD)d;F&&$Z$x3^d^)hS&V@+M4|#ith49i%pgN&VYm_3Lks})7G+x+81B*>Xa5G0vr+t0SFS|nV+%EPDo6{mkr+oy% zvZWvUt9|jyQ`q)q`SmE5?C*Qc0#>4g+|PWb1P(Lb=TXQYJu}E1*Z-M(#kA#RWS_yx+)NMyqvRMG=_;~e>uxc`-PV4|v zFQs%pFhui$0xIpjEj%2*1Vqux#|t7crLy&=n;}nUE!NnKL6=gydeGW3jba!GI;z*s zLJk#avJ>czlDml9R`QeFEM*tBk z>%*rvZFbB>R`ES0`%O+LLs2PNhEG9s@ac7apCbvDw3wmS81gGy_q9S*_o|IOK-VyU z&<8(G|M7>aYz=S?^Pb3GrI$0f8W~T~-Kpi1LDAzd{8o5_jV4E4(%6PGy$bnmp@d}) z&-v-yvu|6YU5D#Nt82krM_eY`KZX$4WAJ8yIaXBcoSe^m*_XaP`PwKLUYkziv^Zo2 zooa>;Sy;>c603qoWj4__&H}7H2qgEfu5Nnpys_D;z_iodhI666-GeM1yHBYt5}*Z^ z5`Cw*O110I!$ppzg(UCILPwsCoWw?y{C;cDq3*GZm^?An7|$$Z`LC7JM%Z!1=q3YS zg4$A8B|B|7m*Vru#Rvh0Xp=SUxWKiQ zgkyxFZgK>)T<=Rw?CkY`z(w>RW|$2s%DPOREnoh$AQdMkq|DUOWjo?qqefDu%_qOy z`S4$qIy!2xd)z?!&3emMRJpDTeCnZ(XlXMK6gvPor*8&xEmrL?LSTg>2+tZdnfb~o z+QXoRuU~$7+}PZ#LQ|gi%DIc?|6xQLNIjhSk#UU9W-S`!OpmWk{dD8FAHJ%(7g+|2>*l z62H11WK%XdHYL2aUC5Gr5)ZqM8&DIfif9bXX)^e0pIG}-AwIDiY5E!o-?f!}_df5y zjRHluK7wB-xE-XxDgtf42*867KK96#NJ6FmjL-pP_jYT&r?CL8DU!{qkD^V+1D;9L6Zw2j8rD}2(UGy4mjGTwM z1Qb_aC@VHw7w*{R9YtZ0C<@&+CjWC>dOmec;HAgo>ef4!;c_Ql+9^emR3qObZUM?u z*{4%r+*LW5pO|K)_9S9h5&3pI%yqyY5y)XliS0ypX@5uP(01{};D&l3nWrIPPJ9uaVimkxlzj*%h`ep?RgqOX zyGWG~sDIBLMyr=-+Ju{sPaICq03>0W55hELMf;Yz6i49>DU-<>-5aW2k7QA~$nMpq zUicj+S;HiI&$yf6oAh*V+5iQ!Dn%x}I5xaxi!^m-xXfzEAp?xA#1}xOTs(SO-ckmb`;Q;fkGid_3jmcVTYNptU?wIORw#3ek6) zt{|}4$`Gr0=6p}n2e!>gh+-`wY`;Q=ThGWbUWmCoe0~4(8|`N%m?~!R&*!E|RSe55afF`4TEVK-1QRSm2o3tK)-j@S&Qyu-lO2@JmdFal)KAuH8;x-PfY|c+~Q3(eEc6gk0dyUldaT(mR zOjgJnf9Vg*T*pxNML?=_RZTBX~I_k#f+VtpLd1>VzyB8>PRW)1EuyhyFp9HXYseO)OP~V`M z0^l$V3#kT~=<~~sXRRyZ=J|tnd+pkn+3G?v63X4cc}?dO8!e7FcSmQ*mx8ynRpg4b z?UT*s+jr`H(dgRR%&&n8R#*}ZM^<6}uajN7$98QJ(h$O_RKro!4J{+^I+voD?H|6E z;PzQnL+b;##R=@?Y79Xrm+jZk1r%~XiK*0(E8FQYgI)H7g?beWf+8L`MjTVp9!@br zz1)*M)&cUa2wLT;Mnp6Cgt7CwX5MIXRCbKi+{f0^YiEfN`?)0_Ln$vh4-JK%#_LKK zB%37y61<{pDio4gxn(ox<9`v373f0Z-e0L(6E|T^bg%5EtL<~Tm?<$w%ha$}e)n4! zkF&}(*0r>X$qIe)XtqGL*LyS<*3${ZhKyzu7l4hG4F24*4ef+lWductWbhps`9#Rk z>JihPWHo?hfdoJDB_8MHi*7Au&#rW-)~MncN6Xxbh|0>b#=2Sj5w^~>lw#HfwsfDt zQUBl*7naF44<@YV-2*@TYj)M(q?*NF^O6Py$2#Y3z>lR@QtVBjh~~yKWTDg%LqdZc zt_d-omHB`juh=uc+fs)9^&t%}+P3P@4v@TgEJMy|2llX_sX8MOR(m`QfD%cxfN#&C zASO^9*hJk(=9O8f;_i+&ndnFIsIwuWg_q0ZgJk^DD4}X5c6uWBtqqAenL1wY@ zb0kE>vo(ABX~m z7sZfk@p-a~uLMwiVnim%S4%m03Q`Q2m{%Y2mtzlRK8N#2pSePB>`Kt|Mo8 zt`jcs>g6@N_hy4M;6IxLcUy)eL-IRx;wn^onz zFz4{>PP~gXx2`rk#ZF?b#2bZ(qtawwu$`CtBafDKZ-p5Wk|1LyuIWf%1j8$CWjdbx zS#-HCyT(`H0bur~A{N+mt)OU2rbwaS!^%~#kwR}6%+nN#v+)51p{ZLq-<%Rz1M_M86Y9%B*oxvKkcP zb1@j2YV9&Wh+O-HnQQGg_iCV7rG&=khxH#EM{M0($weOd-aNc_*)c{MDSP61@Cgc< zE>V@HwS@wh6|MaCs8}`9ddkT3v@FdNB+V7~&OXM6=grOcjG2Ywo{*?G#>1{oxi*OD zz6v|6+NeAZ47<5RsL~)m46JN<8|fOzGRuv!;Yyi#rG7mqJJN?E7bp-Vs#O!)N9-)7oMuEF$u8p++A|L{C}mVk<;n z^E&%&7yA-Obc}QO&gnJF_re70%YY2+(^Xv-7Q&%Z=d{j>qf6UC@-!aT!xz*Rh){J= z-3elMbwZz7o*81n_Iv*DO8zJ|d`;2BQJ#UV=$_ZMs!X`sJs!1s%z?(+8_8}c6}(xksp3bQpt1N)Pj500rpuy*{%l8Rlx1QV`hpPjcA|rY{HxmdJ>}9w$Ak@eMAc6m z4v%9WmY*V*(!(hd>JAtF_ne0#n|7S@<{bw2Gj72SjJ~%Dt9#-P*9gnGh_5H5&<2Tw zwBGlBh~>{O&~wT_Z->WbvwKstAhiEyH^KX!7+km+*eN=JoW2b3;> z*17B&xgjkuHi@*8)@K8u3tH1;7qa<)=x3ZWH@uyMDlW&DU8XCb6-{QpJ+pB#P={ck zo*^&l*;jqTE4a2t1hpTL&t;^vecUy^9-y!P0xR0M_er1kmAGxEtb(P;t@MvHL~TxXkYcul?^Zp5WA`75@-K5WbK3FVMUyD!H|nTiYVa!P8$Ps#*q znFz9Srk|GlhsvTTN`id%4bP4YLi*>9;$(iixxllEU18$NzVHXy%GRL8xm9-0?Js!L z)MEBYpwUe@O$e1`)FfmkDuI6N9ZHRd$q71rCKIibd&MqM!JZ`X!@1n@BV(-=0S){u zr!R*0=-0)G9~2c%cQj|WCZ0!%`eNiod!Oyb+S?gAoEY-rGY7}4Kz}z8THLuM2$-54 zqZe_b!{tNkrhD)-=aZ5tiP)e;9&FY@{9&^Rh)z)BlS!?B*31mnoC0XX^tLz%rh5OL zE2fV!@vs`#Y{A*iV;}Tjy9I4#2Af)MUER1|$$Vq(Vs#+P=yF$-WBUm8HOh9Lv0a=p z{Qa%Rx#Uq+r`SK}U$xtV?D%V|bJ6mxk@KLO4hen;O`AQWLQD|cPuCJl;7H)^P_A;? zV$+r8D&pYO9SSDmt>H)E`9hH@XjMJu4Fu5D=A#BSTvsGze-@^5ezsz<9<8T+5S(@y zT{h5-FxVehHq;48(UKCVG_i6K(9{0{ob_{r>iQFgt?+K zTx=PtTe_Kn*`g8Xf8F(U{IBQg=jCEHR*kdm@r0~q*C|~6FWx9Ny>!z=sDL_Yg8)vm zc;?KKQjM`8gvezB{eTXpNr`qKi((5r>aT@jZ~7b&SkdsA(<8exnd`^689daRpTj2N zY1h>3CfqdVGqGW{S0qx(k>)MPf4g;5p>5E$4hrOOAYyx7VSTkbfH==DUOT233&|1* zgruIrNTf@HNq1A;1iwzFY+n{ZEH)*6ow2dga^ew#JD!_VMQS^{Sa-x@zOayOJwGJT z`6a--bjAf;-x9T7Odr=1EY~ZsS%>NeD7T1<9<1hlzN2fXYHDr?LaNz=RB`Xb?i+6= z^BFAI3TDxb#%`5Nkt$7n&?cG!0~SNf&aGoTA<9xYGv2d5M1se3j9-w~KZ=@~PODX>hve*;{!x{<9Cy+2 z2?(Bk&0aXDNFQJsT-Nc(Yr5Jbd2Nb^7V1-3i&l}qz~X&DI$Li*6KmgNZNHjj15;Lp ziYy9Za5HoJO_g~)syL>M9u+V4j-6Xzj-`+{E~vTJ=>ZOy#`SGzaVVK#sc(MVU(tlI zax?4E3kw{-;wb37IQ9(lGTWTXBJ$MhlL@_sdUVzkquo^vOn!sRMZT~4<2S_(#@=(y zBa3z%jhdWyI4UD{Spr9KvX1uWIQrVYgsDm0<45H`@s=3^^damkC~V`F+Gfi1dnT;V?TidHFYS*;@m2arVCw8B@jYXNDgC! z|Azud2hxNFIA4TzwEQ z?Bu(tasNh>$a9L$W*9@E9Iq!sX7T=JQ_L8bu#2DFPV%9l^U=b8U=nk%uh z$dqpmHtAV^QwGKk9gr51v=9^oz0VZQD?2kMgmyY901s`jp~)v!bcdX#UnWFoXUU%y ziwUz<+tEHF7_DJzpLb}db0d0FvpfR%A1=VtbBxZxxze}9B6{2?OK!sRSeIjWFj;QP zA0Vm$oKq(S!)x_-41Nv>?u-ecUH;C5-P$COk1;?$+e%okpb(}!ApyhX;kE}=n7FhN z9UHkcoPqS^N!`P-4;Lj)LuZ2}y7Fa_D%Ig9@I`GE#?hCLObYr3zO14O;dUd@ss_AV zTOyH7jJ_7!a!qOs^MW&JNf}s_;t=k z&6MxzQ=ZLs+k(PcI&l0L;yjxXY3x~r!yMMXjHwoHW+U!Ku^8nF!Z>X`*J`T=Vmg|E zS2X%O*C2m{PYF3@=08m-gh8dpVgUu2J^0FfW3`e?L zlEFu|k(7qR?io*c&F|{C4q9g0K06g0I>Oo7Wf)oS%N25$(dv>453f&0hK+~59%knvScd8I<@a+Bh`5C zweGLw7J)~j4Nq9RsJYcAh*DYyX3V`6S}s#u3qsO`H1$#)bz?#vnHt@S8r~zjnC7MQy?FG81HpI0oIje_gB(Y~bQ zeFm`nSg?oMR4sI21J+>07e*W|bBZ9{GNslZo$~I9u_VNj=u205{#tMV9uqzomsrEd zqp>4dL3wCMPnVj^^!i<-@UpXaFM1{plBWu}I`53a+W#`qq7WNgJ6PR{9-2fmto|D# z?kzdJiC_OCazTlgciW`U1sQY84nrK6%ER!1KsuU8d z8VgzItT4aru-&_{aO?dTCz2}t(^w+tB7d1pE+XHsY!}r`N7{4zmoziw3|#fFHNyKo zrb=t=JzaCU1?PNSi!@s8A}F_6Yaa4ULYO}vRGp3zksvdqXB#RWwel$Q7P!atngK>S zV%6GX(T4;iU2h%vHU33LT!zt?RAJErZ4-~K(;=@yGtMAPR$cVtP)+R|^yKVDua;Nr z%G~5#v#Vt}6UQmc37^6QoVxDtG%q)L(5&BVMkiE-66eSg_m${Aj@uw#$3FxmehgbL zSqehh)L{9of-rCu_s3 zQ;SfpS-H!}hg+EUDEJk(UawTyr6~^U+2e_zk~Cam_0**9`etb)DuJ$VWfVrVevC+X zm4BKHQz}2lDbuGEoOW~KK1viWJQ)A+_!+C;5r29&==ztq-9E%g@8LY}(j?M^a>}RY zQ`xl*l*RGep$JFfsEaxM8d%hH&ua5dR^@LJ+j)oQ%l+cugq6%+bD76> z2FhBZHJ6yf>$FHqEK+2!ieBHDmy1RSH(sK?21pfs^Db`lfgGqUit7E|Uetn9uIv3p zSfNEq z@_CK`&T#`n<(97$WnpVa9AmMdYaHl20;X>o?HMGjk z`3s-1oiE?(^1V5o0Kaqw1dgsGACt2{<}3qYXShUlP#$dg_sK3e$#-GuFHkB%%!C#! z-!xkSdFRuVsOB~Nl_zu&@SaKbu~jiiJz*j`Z%i0T+`QrJegk1UBcv>lNK@E!B5}r2 z^V-@%N^$bH+w|?eVU8yJmb0yw+letL*7l6Oh3CYg(1Z&k8l?ZJ*t171+JMaz_}1E*SYA_yxd8zCr`;QJaw!*%$TGM;??W&GrU z2e5PJZUlY-VQ5=r`h^nLr<0{U@t92LOx|QSa@^WlZcL(ZnY2^KaGf-f01>R05y^4| zIF`5e;qvCo=#LMe=>^!_dpiDR#SM7AyaWT`2rj5@#VtcmU|!<@UI~_9hu@Dq{sQiM z9(f5y3ndKd1=#QPVZ`l4gB9W;XvA!l(pY?IpPFUxsgJr!IR+joiecL>Y!n}-Da6p| ziK{rhz6}>upT`wLkK)YQb_|3uO60yKTVI9Hin^R>n5<&e+MF1nNs)M6*il@F=;B*2 zSXspFRUM__rBox%`FR!}*fz1TDsaYuZ4*0n^OVCq9h}<`hJ2duyY^a{K~Gm1{rwAY z)|qS2YP7h&dEk4T*Fcs(iw1G6y~7(V>d8)IP3sjq;0$_7{41HDt#GH1YTCFFt_kM? z@P?vI=!Y7oQRcl}rP9A1ZVvLgAaJY@5JEpzNXm5%i$Jwn|0UORzen*!91-8)1<(-w0!DHtIE9hkbb_DaVd)-wCSDlT9aXFFD zrRFA7L7=JIn$4&uD>)>od9sY#qIHLTc&0cZHTl|GAsLg#y#B5RJkLd?T*SJw&%%QK zd5Bvrn=t1nj>)rCP2K2dlSR1%S|M>s8-Vf)6g=9HM6`Bfos-HPb+5Bunbz}Q{qF2p z$jjv>s2v((Ug+troH^6E$@>I>=^`M6K3&A*{23!~V7Pi;5Cm5rO5$~<7fq80#lY4| zQ!JCMbaFk@!IG^h_b2D1wi1bz01s^3i2LsQ8ON7vtr$JMeH{BF>%3CwwyiN+5xTm% z5Xa-vqV~%>A8DJ=+wpO-$|(tq#8}94KoYBD@!41{IkzdEtl*?6x}zqRrcJEKMzB2E zj+*aaxa_9W> z@LbOdB&y3s229va04p-dI*E%_jh%Sw$Yv~#22ocOhp%A7DPzd1V0R(l1hrzK5M(h5 zriCTpFxJ(!`lBJX%!$-3gOOW2uwDq0!1oJC>M@497vaeTYtVDadhClF zxP>k_ambc<%dvz`);@(F@(mBw#2?KOQi5Ko#2N9lh7>oaO&qzQ3aK>fShj2l z)}3<}CpISRd7%`43K`gOd2QW*FpCkBs-C0aD+gYjF`;wb0gaq$&aDrK-S~>aDec^e zLy@}gIoB5og}aYtj`ChX;7Ab=LO)WZB2N zvCTS&w5-K`Frgnb7AEuDT}&kBaw!%a)FPA!kTlF`l&LE51|m}}P%_-wcnB*^9X(-_ zC0ze)$y@M9&zTr>79!Ff%2^!&A|Q#8X~iv3BTpf84a#wZ<+T=D)jNwlsQToEp!jym zu6ML08bVdV&0pt#fY8{<99=)88>68 z(;iD@D8*DdN471+^fkNUU#HGCjVFyfDO~?gb?@w@v9WR5LQ$8tG>TCw6|KClqj1`3 zr*TF+Wy8~bxf32}Gh;iq8LFG-KUPD)r?NfDA(%kuG;W(7XN7O_q`Q3B6TMDJnm*Rk zRlaB%Q<75!ff*wpgg#^F#pZ~(h{fD;U;1~8ZjAqc*%Ood#5YcLqzq! zq%h_MFzr6td-hjx$DKdI3opOI7Fn3Y-1?Ie>S$v@adNWqXe^`629M8k1B{N2vb8tm zK?zpv3~Ku&uQ{umk2bmb)Q*#+R&@y}k&PO~!gxQS2hOX#f>Pu$W{Df4>IK+UT7;TY<~T9Suu^6?OQLHOlNj^E8oH7y3TBuaz>sB5 zG{(tme4e#XDf@k&^0A|95t0?>B3pVsMm0&%lDC4A?#Q~&5Rham5hQIoXrse~esnQ( z?#f3Ju^wTc*&gO?ZT+0otzw*QUE4n}pS9t;dwWm}NF)bv;s_>-L8m!hI|+_93IuSw zb*`a)@9pF`w%IAfqN)9=#q3ae3Uoi;b5<6M#n-0ud69Dkftes6ggz70&k?#G@>Yh!;MiiLMoRk6uD6ciNtK$@(4CR@+cau5Mi2fIa;~9 z3sFd2!pOy5;mw6jfKyh$gtOv_q}tuqCeC&e`Ph17YlYGmzmrkl?p*fO5avM}|l3Iq01XU;>fZj*tW+^52QF9d=N}zgj z)-R`KBy_%$qAwo7X|-Kg(cFiHtt$FkRSdL-u{7F&mC^HxW^><$*-xyn-PEX+eycVR&|jLU0J_oU)s>TaoYiZy<#YNdlj7JKZ+m+3XUj^lren%|B!t5o zN#AMLiH9f!1uR-PfU{PwMLBS(RXmb3gvr{~0Thp?_>A^>{U~>V_93>CA%mY%#y(~L zb1lJ?8&e*WQD5uoDt>xe9~wDX5SRf1Lg+I9P2Ms+1cryJ|4BQ}|4jr*e<;>T#CbH< zc|HQNu9GB%>ys82g4t_)9lR3|yb;$|>0`f#ca`Dpb})E@M_1 zYfHE0f6oO&4w~&D2%W69#If;Z(kgc{Ds{5&B623tmdNorsjO^jSk>H%i)%Z8pn#vv zTaAZ%&&1D5XJMbe(8hMjRZNLvq+d=o-L!E@t!tOsy;{@Qx`Z_+vxVqMN3f!~8|T+v z!D)?M7>I_^AC96cs&iaC^%@)o$g%>wBt=)+LaZI^4ygQXJ_fx-c(t?`&vY%rj>3G7 zwJ&e%!mS4$#+whkfYr7A=*mWraNASBP0Dania%RIiyR;hJk&CS-CYAnue=$%y*?Nf za2X#FH@WQd8hqMR91B99>PgH!4P(iYZLNJ;Q+ft-Rk?~AunT_K$|WciJs=4IlX7_> z5jKYfh|npT!eNbss|ND2wZ!;i;z&~^cxG9abX7`4r6^`0hafO}2neCi9=3AjHUh0M z+L~o%#bg=RBdJBt$u*B>(A?#%J@+qL=;Rt_LO1YIhY6ix=`84?Q$!|)@&l+WVsf3=8o>oB z#x9g_&w`8bRPSo+Ep(wlTJfxILOSO*xh{3Bbg7diyjh?awoSUDLbHs!qAjcM!zIJd z<4vP4;q3ZWEQ|)>rwtZ@q1LJg{0jC`&AL-Yf(rUu!?||HYj!??ORBG8RcjEHWEip2<6UDB7PCGb3-$Lv$pt3p*%W|si+XyG91(gRBWJ_3ZAG(NTssIe4L@*kpxVTihaSSFhaN_?-at?+b2$|? zU9n%d`JaPQ)yLYKj$?M@gid5`MMpA3F4dtEZ@JKHp<9JEs_Y8m23$|u*sfCO3Vd{F zg&lexHuYSD*UAeKdNIe$ZC5tRmiOA_Q?|`0_Y=>2sMNZ!6Su`lcNC9aTib~n2RGyL z;iqv%V=H>n8XC&Ou0k)K>so?Wii@$+??+YlA~Qv-jP_yu{>Kq}E^ZrmGal+a6T7{B zM7n~4i7^oF#oES8IJfpH-gICq*4Fo6akvk~q|Rf^9K#_7vVtATBWNcjW(gIt`Pf-p zijk{6g2BoXwr08h9SyW7pTG@JbPJqSpHRL-JI~?7JhSu+k;`5ojS|)dSh{!_)}FQo zUEKjE%()JELJ|bz4arh2hoh3VW=hG56!f6_yEi6umW0)K^8aV=O~C9pt839!bJZDp z&@5}PC0Vj0&v>@60UNM!7|d+I1Pp{glE)(GCJIZ1d_bG7eavW zunE`>*v9iL*_I{Sk~OQ<(-~{7_pSY(>TbyzyITpLRmEo{b)QqGYFC|F|K5A;wJMd$ z+5b7`S$yir5`p7;x}GdiDb91&A~4oy{*wmnZ9Vm@1NM6?eRO8#%*L51@xL6uZ)a>GGPSWP-XoI^Au*jy(7p=;x9eXBLn)Rv}{ijRP;bo zrH#(N_EJuz(8k&32wEDUz*u-$|0fbPo3-2R zr8_zT*eW~N7<5ddsgA8VK#;((Oe|Zz7%NU&2GfX9GBub!WohYTrD@Pu~IgL$N-rXf0=Px*?;@Q%2JY89ey>1_3dWLJ6 zjM2>rT3FuLg~%|mp?)fMc!NrRU9;e18O|Ad2JhSTJ)GZs3Qp>a{<@VUY%L?xT(o3< zy^LYKijF=W^* z)P=yonYrk()6GoE{MW;JYHydJx(3g@Lj zMR1M4PoI>OJ%0ls)#}KcH^^>}rQfX6Cp_i28qG^s%BBW-fPr`nt2*1U)E^dRd!U)v z=FS&Gm${uLDoF>rNlDmHK7-eQt%xzRgguo-*kuojuR6_LSRq)|-iqso?iAOxRgJyq z3md`{2$^kiJk9RM7H=swlupItwe?8sGL|oHvI2egg=GY?MyUB=2x0b`MkHGBblYM%3VX+~2NL-~8tqZ|Re)W<;FM1Rmh zEezl$J`4ny8;xUqYaiwYBQQXvw@4NpfnlOyl`w8qF=|$^->hS=Gl)G-KlWPvsKzbH z_AeQK23HPkz|ziMac+yWMA+YV$RquT-4oyH;r@J3# z{@Nd5pR*8Kw(LVQh!AKkn6`4Ki&#zJBFJ_{Y3@H{I|QIJ78T2b-yTDnjG<<9W$s=Z z*@y1lVRU>Sm1U>mig(_KtTu?Q?jVjRUSo)%3qe|=t=ka*or@{=~PyqT#cgg=_PB_alyVYuqYq}{cu0vU(9t)u7GsY~t=OahC+T1_?%a8Dx z|Ndp9I^EG?lxj7sSaUiSow8U2KstUGhT9W*$pKwig-ro;&V92iKLzj)nW5*zr`}hl z*CS`&o8Ux1C&v1A7l{#x8kzubT!vvfFw7L4I7DdLXf8Sx|E||C-Zx(fp_8yjg*mFz z^+<8(&3J1Bdo2{<7|Hl4xys2lndjy)lZ3~q?g(BKq821LqrDZ^?Eg8|w6~&4LRT7z zhCKHzix^$msmigWE?S0-QCG*a)g`#I|6=U2=A#xzIJfaUZrFW0&TMW*iRvp^fW!z8 zX&wU1$CK65@tsBI})(*UVq*_F!ybSv10?Y#*loB@08%KIUDES z_#tF^4Zh|grhhwU(rwPRvvR^&`oojr@_RN*6(KT7lF!v@wcnlYc@*y}B5-UcwV~XdnpJ*nbz-o_h0da|M3lII(5a#CMWP27+f$9 z%U3MNocZ$*(SLhF-HT=F96S`8e3Aiw5TNIv-g{W9lKa#LHw9ftxMRtk5}}+A&*0lW zQZ0d<=mO|kT1Ldaz8N94G?>*s^k4W&{Oz`3>~iWfFzrdH=B{o^c!g?koZq%+7K0e6 zu2}GK&mD~*FCdjUifOGSC`BDC>^5=f=#zN&?*9*Gwx2`DA_Zt;+FQhcW-J_o3uFP3 zY9;t4&~_3$TV0BO>%RhzmDgg2I}eM)A>6R%4qQC`6i%VAOgN5M3z131p&uLTr{f=% zU5=kuSD;Z|jQ;UGxOV@8SQYQVJAd`vsLfdbEv_K5OzasS#WOEFgZ=x5U~=3rt03@| z9suK*JFW?lFyC?;)q?@E_nL!2I&Yn*J*aDyw@O%{5jA!Zw^5FFP7_r*ADA)~aHuQBD;k@^J6k%3IVppN1l&nn=TLBW8M`vZ`@PM8ZKPf9qa8HtC zPqkWIctXB(#ZFK92o!*R(%%9nCIBO2jayvD`N+Yu=P&s*KAa~Wh@8Lfy-u*OQH0wxhrI=>Q&NxP;T-q{?Ku^%2RH_=iOEgXVx+x3$ufYTTs}Z{%%AH}X z9e*AxqrLdk-*_*)gpOt<;gT8bQ71lzcJ9P;&%cO0%>=N@N_(Fg>~d9Tq7#YooU+2T zkclg8?=`#!L;;RYdKn!4yJwywDsF^qwphg8m9N!c(j85z3o%TMQn=KT55**hZ3_GO z$6$}`M$&G;jsrMa1T&$OZi;ccifrwrIP1m_A-2mx9OOtM@3lztMU4;%+aHGq^jtq7 zR~;0oVWe|wwc7p@^UW*vdNN0#0Q8gj>Yu=K9~*BDS(Y{DsM+`g`Aqf3j|k{lCc5a{ zNF4kA_kM&geD)TkiBkSjjN({W@dR+op)wq>a?NTiT)LQfu1Le0o+GdI!$7ho3e{MK zDSzjC0|s!|001BWNklzUXyKgkZFt?@hq1Q36J8vnZP?iE4&uSS z_4v+$S7A&4sR*J5>bj5loe`|j8u-F{UW@r!f+$w2tqYKL@Ia*~L6UOm}2m5OO>jZxNid~Ng;`uiyt5lUv2U?U9iDdr!Rp&?9S7`6ky(-nXz*@k4mg9CNE^2&>_dd&)y zTnDXA7nWVZP$R@=zxr1ga9zx6?t_~ILN*(AYIv@^2+x%lV@r97jE51v$&$BIwi8sz zJ&}2IRg!l!Lm)0R5-e|T#hdrsg;$Pkz!}Z080d`4SRCbEC|}C!ZBCiBP%{#IR)QcbSWO_TZ>)pVo{d6X77DCzxgbdhWjyYR`84ZS$Lqj8c)_%Vze@V zC>Tb+k)a-Ua6#R~r>|X)#mwfzZqMLGL*RF1gpUiLZVZgIx_Ex`RPH7>@cbO*FMUNuXk_ZEF2j$Tn zh<87WYRk>9~$-zR4T3P3+O zulor->yeSM-*;U1zvtQP5kG7Ofc}Gj`4PVGnXjw)?4IM5WYs1|#h9_B0=8tlQ?Ass zEzDUsA4``jr!4|PO!Jg1hOU{=<#lTAUB>08`Q2;G3ak@YdK>po74tL+X zS{NgX16*8n%|^VazF^V=$wpE1ZTb^Q2zD-h=pf8_X6nL`I5b?QMA5&U)d*P~N%vox>sTl}mF8vq%XW_1ab8*MOh2r>j-slrJqy0RV zMtjjT%Xpx^4x8MiA}Je~HZ0AD7b_8(8_rsZUq7dU!7e|YE^#T+Otlt7S+1AR(iuIA zQ@pT!2VU5*8*R2e#66G3uevM*f;fOdu0qdXg?s?bG7#&AEVRVojvW*(xO&7!mA@+o zG&@aDLyA&+9NM03(D!VC*V>C}(u4ya773BkUg5$(^|_g$^D`T6Kf<+_;H(=zjL`NZ z4wD&rD2u_PW$3xPAQz4Nd(S#Ju2sv9ru_%70Z-^Rz1aCLTLcO~|7E)(FN5P59v*$b zE0r$DON=KH(EseSUz54)ELDzL+$bytE-u{UOXdFDn?A*h<{n=_M3LL^}euIq?uSaZCEv(~J~uUvNx=Fjn< zXC3LucDn&|qbg*wAnc$Y0eFUSa0fK-JgYD>6FNGeGJ0aB2#IF8g(b~BxM9~rxN_uKtZZ*Xe>f!m-u$&4JIq~? za;_aL;}a0+=4Qxw6AV?K-V)`yA*+u22F}K}7G8(V)g_n{?n5;lgQbm&3*5NXC-$h6 ziw#o^jsbXa2j19T{I?q~!>j8+e{9heq%Y5Xk&_@7Hsxnz7)HYm z^i7usGC`iLQtHU}vOzxdvm`*NWQu7=tyaTpuf7K7p1BeU4ZE~196f>=`S6@7{MZD^ z?v7``3Wo8-x4(k%C+@?%EJiu@;bff6W{=xO!>Wkm*~a<`{B&R)HdL2mkJE>?Q3tZJ zoU1`V*Sd&wGT>P%b}+v^jLY_K#zl?IIJ5a276!XeO2<%&VmP#0W%kQ4JH)V=z-Br^ zX1nac)9{5UCu~_*P*V54fiv+JOWuUX2G_u%)0?or17Yz~_nfZn&>SJ4#Yu$0EX1Pr zPW;7(FUQgt7>t-9H-)^GaMUfykc1I5J%w$iFs)3gBT<;Z)oZX!8$0)Pu;JM)*f%yN zi>)*ckm?-yQj0Sg-Ahtfp_24XEJqe@EPdF#t_I-5KHT;gO3l4+_iux?_c<8NJ*XKO zT*?7QDY8hlR^rT8lMm9P*L&^ol%@d~vC2r#yz&r$&gEC2NO4l(IQ$*X`zI&H@l|Yz2!GiHv(kap2W|- zeGBHdhER(-a1#>n)Qo&gwL8uYdN-?`Z8EkI&wBJu*w7k_jvEKJRU zmXzT}Z45^HvAX*lE*pCs>&7?ZwC-LE`dv5?N5xE$faL)>DHZfm$(-4gAKdmZKT~bq%on z4h)XlQTYz6Y%mk%Vf*4g&WxQs^(5921{oZuEI_$!`zW5=^fXA1=tf=1@(tUP#g$0V za?YQYQv3%7EEL?JmWQI{f;}cfWbw!}lGFU>Vj*%uY`pQ+zncIgqzVUk0Yh}?u zX9?agHPwq}VLJ%nr50SvMyHd=NEIDM^|TGEu@AT2@@H5yv;_lx6J|n(HFlL1%RU3u z+$z{no`(l(Yw)AFSKx`-GBjLI9LmTD7gURB=w?e9K8+~_>tj*07q4h+#+ud(IL+UU zh21d>bYoPbK!DsyyKvIBjEbcs)rse~EsbbBi_tV)>~!Ygo`LoFyTw=H+4>rpcPHr4 z2b_EbndTOPw_u_e%aNN76EOdxionn@xdz3h83 zxx&_G3=}^=xD3ef*rum2JU)(Ar>)u@2IW^(dxW#yy5B`f&tU2a?9M2hp%-E9+lK1! zE|j|?=(AF!Q6LQk)1cCx`b@dDwjtw+azA9IYP-n90QaY3%&AV4+@}lZxym80X`ZQz zv5@aa{e3n27``FJONs~_a|8-NKju&sFFckAwA=nux~`o;K<79Zf%b^o3<3S~pZTgH z#Z3_r;olEuzA{y}UHrzA1h#7Tyw{<(8-+UivpoI8kEBatbVakNk}%}g@$YRSVJ zUiUhzUb9NZ+hRXN)v{nvpe1Yx5b@#d8lKFf#}VhSH370Ti%_Y$XpD|v*S$YQ=eEDa zf_NNJm`UZ=wK#j7z({RmripPU!xOb7xNZK0c(Aq>FE~rkwCaG)w4cd3iF=&uV#%KV z=nlLn5ed^;GK#Xc2aAF|Slif(HLX2Z(b0)oWf~QK$ zaZl|G{B+)>*iu=Jgs(A7*d&{ADu5(4ArjKkHAY2?uqxh%f4K213^d1KnI7R8hK$^i zU9Tzt1Z*kq8(e&-&t{uLHwd_FP80DXnL!stHqFG|;SoHybvyPBji_F?Wg{d5APF%? zPf_ZOqBOh{#=hsFk8Fq89fwCxcUEj7#!^WLarGnY{wZ8EnIV_4Gg1OoONOuEPv|2b zue(A@?m3{Fy%EXdDY;LbzL?N<=l3E@=2fdzB}-RqMFeIc0tKMYLJ*5x^l%}|oOZkG z%e*ij%_>~~E7yr_WLUG9{}k^1AF(_k7}&i4D_sHUF=rG<43G z?ek4jdq{ePe2nu!eFA&vEV+N~vtO2xte0lw2j1F~?rM`4N&t|9T45+)PLdptyAyTA zbc6l%Wy_af#foKEwPHE0e$ADbKW{*KzqSa4B#1*Fp5;N0DPc<1TZWjd^(YYbcB0$p zP`=gDVH-M(AXIqbRN!VI9{Pu`L3?fk>U*}M6t)rB^hQmUm<-3aG7DY9!5*)Kjn&ie z?*o_OvD#|9SQ@}6>-W?~=YoP(-BhcS);8VWdaQQ62`g)&KW^i^@lAN^uG?`=;{}xC ztY={=zHuMlGTdK16Pv21W4}`quXfIfi`y966?!B*1l#mbY3;)$ z^)5dB)^o6^)4@CfYG_CXp6E(?m)A)2>IF1YL^>7kln9Jv7_h?-Srqm}Vhou!fUe%d z5<6pUb4}1~VrbhI?0I$*u;)b>JGa1Xk0OnHm|2J_Wp~M3=L7;r#Y__k<#Is|0YprP z9dJtL@-EHC_KpS6L$Q8UJ@kb9g`DMngzx^L06j0m$4UIf{(9|`#iOH$z-&dJ0QA|4 zWU(KNjWs`NS?1RSQaElb6(bei0!!r@9ni>SptgWX&p9YD9+A>j<~IWBS|nLJt1GJH ze&h_DbLdk^amNej`3R@T+)^-ylNU+)XuV!JuXuD65tywA9Q~;`Tc1?y=Vc#(v9abi zEX({*F3OS{tDHzc|NLjZEMsd2Z_LAvys-?cdaLrV6(_Sy37asVvn=uPCebaHY%jp; zUw1V=_VJHk{@ejoM%7}3-L|}z;KQFqu`jG{&osAn&&30Mr{g<|FT*3XQ_-u@p}WSi2V=&Tgx+dmRy+{X6mc6$AL>t5#r9>civff(SN=ZAOAnOl1Hw zVHHJkV$lQ;YgjIFn5oC1EUYZUfved_;uLYD)c$PGKfk5Tf2UXuN9vTot?=nd_+y4of*rH_-YucbbX2xJX?@Cmz0%Cjd+1Y3?m3{F zG~5vhS~a#te}U<4X`05>O3Btp#3;5R0<#c->EDgB@ZrTSUS1JswK@-Jnsz?V>OX93 zZA!`gfF3zjzm9l!tFbFBO(uwY%s{Ed&IJi)&{fNT^U_q03*op1Y84OffB*aNu6Ml! zVHCr%nQbMA(g>B3izJ8;`aT@5EF?Rcsi@MdvM+VmM@};&S|ZGFlDkUXHn#lTw-9gM z0JL_&MF%C4=;ByL*!X%YjYQ;zYGsetPQyPgekJbjKLbP70Gd`A5gBwF z^rUo63(!rZVIs#wa-dM+Tf=~-q5H^v*znUI!z6n>XhZXxsMrn+O=-m=jg$Zl7YL#m zpnPJL2EMY3l|>t?1?*~YszB}lWyC_3`-uSbBaLo~u6xj3IygAE{pIx}D9+|TD*^?e z|7S)1W%#+Bjz5}ZS)UNidj0bgY0g6F*FXErWDh+Dbk(yx^sUWIb#kM+9JR$2OFoJy z+nR~sh|VlpoV`+1DkZc#Eokh`A`yM^^=GcdZ~yLZW7X;vDAf#%H-=$p8LCbNv7aI{ zOEQ2a)!djFYbv8qoNuQB8W#Y^N7YeLABqYUA50^EFROa+c z7SKm<9vK3f`|<3*ejj6-H)7DtV1_=7G=y!Nh~hvpd6xEt6;HlKPa;+pYf^!kVvE~r z@34oj2ynfUyX5J)>Ce$KbkU3NW#}BAo5>c1{#*L{`@c7neH8C4B9KR5W_M!|$07o~ z2xM7ix7*zy*RJN+S}vJ-#2_7DpUQ_YOW9LAv3nZollG~3?Nk@HwL<~Ast_C-pzC6( zn(MS{Fa_`@ow3N$W_C^;_<#gB&p{$3-dHm4*Ij!JKJek2u>92d@Z00CGlHm%l&))H zFro&cY?)J!;gh;;=`fh}(~XQ4sgxr10~mW>!0q4oGzPo-F+dOwm~py58p6z#>m*TnV0t9vkiGU=T?~EgR_B@vovP5aYpVi!ickTTVE*{;0MV$t` zfRePP06I0^_j!ZZSXzsROXuM3z6)cis5&Fpbgtpj%!g8O5dDhMzPhEg$(uWb>-gH^Oh4IbYZjiT++!in6Rkr z-ETaeiG`jzUjF}xT|>D3GMxLKo6)6~yXMIB0L6tVCdRbaa_%Ia{ZW~-Y{%{6aZHg$S zSng^L{cvMxlOJ(7i_58thhqrE0qsuCV#n}GHa>XsO?dzN-i~fNfa}?aIo3v?Gcsh% z&@GigcKuKmI<{vEyPkbmf&&*3R5Zi3r*YdYU&exN1ATNV(*k5s8=4U!Gjv37(Kc!r zu?KK(eI35N=xS`Np9%{UZ=p83M+KLj2Y9cS&iG|5tZr?_oA%v}OUE|jwAMIkou-W9 zr5SbABW$bA$DMP}#9fv3c)WZrhU-fZ=^-Lfl>= zuz1xnTGpuYHOt)O4p5wjFih7tQ$RP81qa2@eKN<{)ApNitON+g(0<@=JPyqT- zLsY!rSRybsHuh@6v~Qm_pdZe7Y68#|n_M-D)dP1bpdZUIs@JFtZ1T@zf9FeHNe4HM zMfHqE$cF#@Kll{ZtzQkQ#!|DKKIznr=ghi@*jO&2NI9oB&cpSRUZhM9>wUAgPqY z(9gUKuXyhV(6-r{u!X5lKqvQ*fKIE{nE<+mbYr<(UO$Z^FWyo_;H8hGA|^!yW+MWl zqm5s+Z0nocS3Z_=+!?yO`JjyXcme%rgyEbOHN)O#9y4L`8yrPa*`sM{c;%Is;^V*Z zQOut|C{nPUPFwo$olZv<0J-Cq={aIpVi-E&u?Fhp5`s<}ZWiN($L`0IKlwfuwf15l zXrRuFHcQ}BV9YRJ=($cxYg)aM@|W+A(P`Vsd^>`sogBR;gX5M;Hi4u&%Kc zmo%Qj)k6c@=4e_fWgsvX=e}w!!$#n0VOSk6*PdxKJ2>Z z4s3ehF448`V;ub!N*oCcRrNxwO?xc#$$NyKcbpZLgKqZxcF8p5fzIRP=ds!`!;M+k`|&(V}dCOJfJfyX!fW6+Q`%H?u>Hok+!K8gqw8G3OK%t{2t#>W4| zwCq3lr3dtb&vu5uuE=vT&@Q7>apI#|WoE14!yoY_q%W_I)dk)!QJ1w1+}sL=nL8?rL-NTAqy7~86F*2hcBOU10L#M zFG4M$4n$@unL6jb*+b_%Hi0%ZGXemY;IER9jA zRPb0lJD?5sOoVH>q{_qcfA8XE7g>uD2r{l}(I3maSc7nU1nKC!-cc_0)0n`v} zzkxaZC7|2J##?`YZFk>+!LWsSRt7EZpqoaLnSXuRJMdutI+-(B8afkxErSw;W-hbFw@afSF{kv-D1Zn(1fAivGs`SAcGk zanG8DW@5iHfMo5JIP+Z}5DOYR5U-3Nd6 zAs+l9M>^e2hi$v)w0)UX4}t)-T1EWPMIP2R!SU)a>f)MfUV{&R+wY2 zS~YhqV^}1gvCM8M6BM0FZJe`Ke(0QMU)|h_>xS;dnXTv1r?s(9E8$^pH8%IJ!ItW& z7>Z4l;si@<;JUSo@RoC{SV39#4N$l49qitS1((L>tAsS7J5L|X-i+*B>?KwyEhP0l!kuraaUq4A~uqlt1@`p zn=@zGzZ`afZWGxP_v5KMzK>{RC#q!~Dft4i29vY@LL%f`09EMN_1Dl1d>D??E47=d z5YW?O&$D8-7sU8w8k9K3D1`zYR5L?Dkq0qDiOFe?!lZ?yKAraAYQ3()gZ>w$MZ z+cp*8XV^n$kC**$5~RA_E^4(tVQ%l+w-1AZ{W8OzGHcdycQzeMmM+F8KJi;P{}ty* zsoHUMG&@aIwilmK6KqYZnyv;v^aUs@jwv4F(dZC%Y}$x_-#LbFj}2gJX^~jAN{*S? zlF=pxSXh+!6WMjMV_AB<%MnQdJF_+=Ou~v;TBiV>=JVDi%Y(V6b~!|>33P`;lMsAPt#{VE|C)3os2fBqpp z`=?)muDLJ`3%>7530wiJDZr}qamP3tEQ9?EoVAu5& ze$bK9`~??Zh)?|X$1yOs4$FaLySbOTO(u1a2wwyYl;A79I$|n$Z!M@)q`lNwz>*u4%RBn%$>PlNGFOeoOz$_*qX4~Sq%vS zn4TdDesp%DsY?{;=vL+BxdRAR|GMW@q3rCt#?w|Bkwop{H)Z$Pn40$no#S+5X(Z}y zX{P~~aqqM+^1!{=@!&5|YYzdPA?Rr+%zyU!*&gr&pmlUuUS|g0y9oLENd2k&$+_i# zuKvLceTuNmv@c+aG&Fq!cO7igb#jshO&XhxZQE93+qRv?ww=bdZJw~P8{1C4b3fmD z|G~9p4X!;idv@#&S86ocnw`|lY8-0Y0gl@Ud*T9pAC28BV`Ad(&|)Hxl>B!$PA>&m zotOar-*V${U#`_^ot{wMR9jl2g1&5#oS>$qB_!qBnnjCtsG$bre0gH+D8liJB3^p= z5q5`$d+7J7yZTxQ0zZ_z_aVZ*1~jH>mA$G~2JGrHkNKp-ZRfKI5r|iKf>G3fT(~9K ziTOiK5^&l$Xzv4z&1Kn!O>HGUN_FYNvmTpar;Yc5EQg0BOrjVZBM7T3$V@a}=U1lr zW0{ zjN!9;5k$))`aLS4J(SvbW*&D|P6F#~?D>FwEp}GNRJi!W_b_;ZkN#_%FTuqh`9I=B3iSD%m~ii0U@s1h<^;G+Rg@;t83$<$_VG}yRkZKbV)Xz zuZ_o5E0C02^hN?g*%l5H5EkN8p=3pID|7YqJdtjHBei(KKKT#V|<7&mC@4t(k&wUy2 zoMIOgAj}x#@rHT#I_%B8vi9|n{yTMx-6l0TAtcRX{yrxBbx0aMBG6!+17sK zFgP~%_RBo2ZnTw`EsW>A%s~LlN&H-MKJIrU8ErvC$4%?nzA!sKhE%$YuweG0&_H_K zO-lT%2EtsyWq460-(j}nbHm2RNk_I8a$&KxNILwE6hXMoSq&79%J-sy!fbwToNG)$%ihE~XX`QK{yz^9oEEI4xCR^yo7 zhd!_*JL@`rtV|uVNk~I<(QBbBl>8_eJGQ(o`o(&YvW^Ywnso79F(7Nee(Y^=Vt^mG zp&6t=4zCe=wl*G>;!7iQ8LB5NO3X*``$8`k_PY%oKt8tZQ35;9*)^1#AL zTl`05Hw!!8T=Q|ks@ZG$hS2{emKXpnzGI=VPOK*e8H*F>`}U~XrBqyS*1-$Mt9V}x zY$%rCTm7x?Kne8$iFA^fbN39}zza<DInRb))?z76xY)So1c zS$~-2k^dk+_x_41ma!c`CP`Ha+xjQiY7(UoE&d)!+=c@JQGM6^O}SoZz%5^%`#CGO9hsAoU9o80a@*{6RHX8io$ENxe5K(`aS=AiD{EZ_HHVNhTb~_kdz|2ykIG z49@A8>;P7|t7^5%G-fa?po>t~zvWQWrXs(~*^S0LUEY2^8RB8^rAT`lxH&Ht9waUl85pb-maEo;Q zQttes)~xli29|6Ol8wENQzz3diJNzQAg&)r z&+=fyt%V{3qn)jBMyk*pGYc~<9l}qiH~V@puNQkaLm#7n1!&E`q&)rm9 zgQMalf0wT}j1@}oR!eB|8Msx6{TVse3kn4Qu*mqwN!dqvFx_=&wLJ2fsqs5ojg z;zbYlN!l3iYS#8uEbAiD>JcNj*Pj$bQ8Nz)5u`M zlsw;wZYyN3j9X`jIR{@H(C-j#rNb3>KKQY;JpK>{f3$UlGj$fv=u$U#kuNZD%ZGb^ zU>}G{9D5O2p@Z_4{3$vshn(mzlECts*NHK|5|#?t_Ss>5ZB5t?E0a1Crhtk{Bf?Qg z(H2EZnh`Tl2F}bUB5LnG9fYq9DDnH7l9z=&`EP0sn`frfJ-*Id{u^uR6@-kOK5k%F z@PTn=yKWTtl# zE6GFo=npIZfu34gzWzZ1{r9zzeH7k8p}wUiBB0^2tn`t={o`fi-!L7c>=@8>#I zZPwUdbgB4NP8PKh5vCg{Q-%0q+SOZ9KGn~XCJX8!SqHk);?ns_g5%nqoGVYbEx-LA z4wdv;em_k;_*4&^)}oyL(J{g>mH=Gny=)F-#dk;pqk=hzk}OI4$s~#Cq416=Wws_m zzKFC&7VrwUWy3L;S*vlhL$Jgi=(3V zEQ_Nkl}{%;g(1s4p}8^z6EOra=O~H-c?0F#w<8{%fremA72@GTrJT_fsbw~vw`!T$ z=;}Az0mb}6e#&O_fWPGp@x|L7cD9u+Ybh&H%tnfWH48VsR`v2m=AL3a{D*hu|yC*6QV3 z9J5o*s&Lb$`geK{Qv$mV-kgy6%015C!LmwlEWLMMbe~VvdjdQC{0L8*+rvpxgH-Lt z_EoS2OcrDI?WYJ})u`Wq;J)9}6{|A6l#@B~X~i)zmW=ezv*<0QC*My%6PCXcz3 zoGG@{R2m~kyI5MqYlKF++cpuFVYRIZ0cEI!A@fwt3T`$@lCa)L@G_uZ3ZPtpow3`; zK@$#*xxXk=D|`_&3Eml`q0WB8_@LzFEI*`umyPIm5vUGn}OEop4hh#~aVo!?8<$iRtDBMIV zZWl3?&Y&XmK>4RLI&9mz8NuLxVvR*WfZoao@Ixs@wQ|9WLbYC?P5J_5ntFVQ{G(dF z^bbF<{G*>9v%c8CZlck{w8Br6G zomNGVoVfdx){gzuF&K%C_FPd_fhh@GgFn-Y!+BFD*T)7x8>f_O-Ov{j1pS9RSAu-s z4NU{@@Am(Y3~(+Mq@DYOiU2&zeS_{xiW|Dd8@Hqkv4c2eE>)~Rl};%MS(7L6bL?Cp zA(NXmO6yxF;0bj6;7nqn+~Bhv(_r_Z7jO?0;w0#!R)>5?t+=&Jebu?FE!7yc3K%~D zQ*-iyqF>B1rxI3Z2U|30awx&}$}AD6QLC)Y8-M!aVUG;{zm6V1C^N(Si!tkzDsICI za2CuvnYsJGhd)FW5I`%umsFm5O!sWn=ASUd%#jC7vd&sG-EjEd(fM5I`-PkRcB&@> zw*$1>a#^r*ajPlQnn?*EZsO)mkt5ET3z!KCIB5^iv>QDS>>FDL6d6ET#P+=;Fc>R? zjsf48b45b)R0BLxRt_{irPQO*H-6`JQx0=)1w^(`=;)hBU~|9Y`duQeSwwf zapm`l-!c%{-XGl85R3zs)S9fF-dMADR6D=)MFqKFzvu7#vRb#Fs_zbr7A+W;RIIWl zPrqt_4mALJes=N2Vh;?HSd1nTDRJ>=F(FeGKDz~>ROi#mVEAPI$&{n;NxA z4WDyxJmq&6E#eE9{_A9xt4vzFvWFRT__ycpv*<*27+@bfOI8mTqxijhKg1vr{@XVn zregxNjd1PRWf!XCNz0V)H_Q(pO3qD)t*=t@DEx~TM^s=nUYza>6=snE7#FhREhUR> z+aojhBF__PpWod--uv>*8^^5rH{W(dM5<&t= zX+CnN!D(8Y{LI=6R!{~ztj)Pj@YeSEP&*tZa9@d)y#T$;hD=HXzb-5o!Ut5myTUd| z^1!5Er28SXBAS6wEm}gCRe$lg&iHr^)n4>)Vh%xXacykVXgVMtK4~c<7O^p zFZTTgI;%^T%`YQcAa}y)>cv5ZxYTTg%T2Vz38_IvE{st(`Dl;x_cqh@&_3?XsQ>%u zO1F0{!0k6NrIneE=`pk|^pq5SNU^_$pg>FA(JJHD)X~aEz=89UHbogb&JPe9Dz=+xRTu|vv{05w zJN-aYjQrm~Gn!%!vsR4e0~buo6VSTiE?WWsf9IZt%+y$q>I@w(`tr1!pWIAq4o zKrhqj%=mZ;waV-~29k3##)|H~t@M_LRUe%Hv#e9sjs zNv!>iQ5x`%ZlOQBab{q?QtwB0i?kVJP_$AjuN&KvAXL|g8-)2qk)*~A-e2V&C!Gfe zMdX2VDi|muUr!vD3S2=%qBG2YEd5lr)SLGtaeVlsbQZ2z(XOuh0zKs9dCiwsM z^{lmB$0Vfv;HKfpOFTJ(`{swRjGz*!Z2BmY;X-M&K1A77@;ds?(Ww1>28&zD(W<}i zqr1(Pr{})7c4s$?Feg3+y;>#c75v~~(A0bs{J7zkYeU_E`HsTluFW|y*U9eep>{!b zCS(UKM0c?=mvK*-L?nHw~k1}$8x@0gOH=i*H=&mS+v4kEUs z9|HRvRxrlZsnfP{6l>XpJuAnyqPzY+cLcUDet<(0>E6A}E^UI>6R4158yL*z zyu`n|MRI%f4@EX|dMGm{Rd>Y0%Glt>Dcf%~r7y!ALJwW;a_ZKEu%%{?f~&iT9J4G! zK{tRhfh7mbd15sY%wn|S6xE?hp-2g@5=~QKI4;CrRTD`e8}_JmzjxgMdR>bT87}m^-D~rrWHM4);SqV0pZf2{wFt|LS;bild55tp!ydcUvIemz6J7CudF@t=7Gcn|wvAi;N>NFQm-Y~X! zzOl)SP8Dd_uHmv==_BSt8Zqz}@7F<(NWR(dpsXRe z-0{T+WkM;(VxO|RKtLaEU%QKTqYk8wBz7kEVL357i^l9RjyC4!Dg*?Cf-FPia3`qc zAa0PUKTI49O1aU3jjOLlP#37mOM3{%?!cc0Vc+h<@`gqQ9(e{f{GK|uLlC!oP!Ac( z@;B9}Eo!Vurqfrc57?*@lxWFSJFfR)?EVM`IO8cupBqY=v*4B#6l_jhFZ+Mcy-#!W z(xEh@9uQ$5+QfDuudonBW0%mMd-#Pmc;wJV^ag+9w+@i6Q)RgYG|^%!BiE$S9qt=o zVB#ub=34G&ztHo$fv|%&I}xmKatyrPnh{ZVYaBsV_P!Qt+X+`Lav$VM%0z%x+kK+b z35~)Vm2farM>RWdDJgr2ZS1mR{1lUzVQf@A>meI46%e9|8b=7KTS?;Leo4dU12-^G zh*S@Db4V~-%i)2U_LibhqXJESSd7AI5D}mvt!kMs>PKxx(_w5-wHlD*rdS$c^H=bw z;O%A%(O#mWUBh8lmGk5D46GB18l1G-WD9M?x8!gEG(DM`EuzFZK0CwB=~w^bVT}x~ z`iFM!m#6_dG2_v5uYBSK%sHf=bR)_RVmrQIDoQ=Z)}~T_FyAV>B*9RHSmQw$qWt{c;V{k{=c-|bjz8UBciFGif-=eAO-5~=8#Yy4 zSm`J=u<8PlTElv>3P_`luq{A+uEU4!5F_+j8_yIzyz9h2u8$Lv-g7kCIgzM4*zO5? zY&n{>Z^M$3Th#NVlkYr~8#~A0uENKXHqQ;18IFk@zSl;Wn&ksFvdW<)L{^9QMgPYi ziylz#;)?5g_IUd-+dz0Id%ij`W4g488|W=H{;?bLJY@fg3=j~@7A;fJfi%RmUalVS zf9c-tzdb1Jqd|5^@eDVLTu04lN}hCOn<+Uw)b!){cK`B38A--c>d!H5@btN7=yM{Y zKU|aJ9sDs90{EuqF(Zs5gQ94&Ul{s_Db*bjtt7*#7ikvpc$|=iQnrv%Vw{yp%TPgm z+S$2A>$5sz;#9fF=KJOhD|}PSUX;BqqB#&M*`}kOswkmc+Flx$4^_N%jj*5QB4uak z26fVi`*iyHq@OzAWE6#m-kVbzV^xsibmHiKx$?M0SfeG3i5%z)SO0!n`HSlaU@#;6 z=YXGe&4vc+bZsJ1gzD?Y>-$qcMpFSvcoD1s7`;>JpV_`55qNWSg(n^*Z;#-&nFZ z*A^+6*jUVyyv_Q*{%;q+LEo1yRsYRwNUb;dC}Zoc>EcgXfikrlR2;a7#Nb`mE4-Ux zS95ruD5TkQ3N5jwsGwN>s!eW!*_yKFwnt0yUM$pc@57CNXlA^lZNY-ANbu%LmK;gf z$+Uf+1ph73;;AVo?XHrb*v8JWsV&uyrvR^ie26z&;hFb?nrG_#5Llxfwk9(aVrT-Ws_J|;S_8X3DAq+oRzV7MtLOcDpYz@sWr8nP-(2pB_MAknFsgnndu}{9kXP}iu zY5>c-G=>lzaXv94YqBbS>%!QDRH@k#OUzsX^ZoYw3L%Vg&Z*slmoC9pvWzKg?g5Bv zI1Fv?Ct%mM3)119NFUeX7!voH|OZ{ z$dWh8aOnw#j6dmOEuG3Ru$|Z)Mez*2eh%PfvEb6{D2j-&B0a*e#z2Xj3*X2Hw2L?J zyC&}WylhllePV4`3=qq^(uj$Wg7@M-Pim-?rlZ@w4GWpq$$J^`-v(o@=bclxOd=;SdJi@jf^p^m1FY6qBOY2qN~n9YT$%u|V`|g4|8S9C zKuxC_oddYdCfIu5DQvuws63tvb2kv`ZH69LS-3wAvb(5Eal753>fJ$Ad3|IdY5E=~ zl3G{{cpN?RV{+WUv)q#+eAVmK_Ie-A(LVkX%|9-{eCneW&tJN9W0kur@hSwWXoQBj zlL~&VNcdxtwd#{9W?-WRv@@My3}{SH*oQmMaG_pxp5(OcrC<_^M7x!i%W4Rx&T!e+ zyf39pW)cG(9TU^0zx*G!Af+1{I&ijtIotIWM|My`CMb%6LWis1r8~S)ObB!Ng)e`< zOovIoq(4n87fHpDknswMaAI)KnS}NOh^fC9Mo;_{M<8z+RKx%QD-C9Nha^VHDl`JMIbIosk&`X$De5kFgz7RBQ&5OKYj-d*EH z3rcfhUdPSB@$m1gBwr|K#F52xV*#96(x>&)1U}@l9&qe9snF`Hl2Al|sE-Hm_{V^U zr@cTzKjx zt_iku;5l)sGuhrfF+!YyUW3DpdA{^|ADQYqb%Th)wH$(iLE31T`?h9GeSV#Wqqw^` z+a0#^*exU93>Fy(e2+#3xwb{ z)RfGbQfh#6M!})F*%74Y`t58{Vb*qE#n$h(^Av^9j~%*D$#euTu|WLPa#$s(;ux`V z!!F!e=BF7RrpBGnvzhMJZ}*nNJ(~$HFTSZys3~JBShs>JXP&<32wtb-SiY~=eI26- z3UN(a0|9Eqns($c8uAnndXV}`q_nNd2H{KS2Y~X>q<`0CH}s96T#Pr2+#FvpPao%6 z|Fj8&wMXj`3GmW%BCzP?ylx>|l&)i06+3Dht2#SA2n%cL)tj*RAr8Tt7?i+{rC5tA5A+@~DDAM+T%%Y@21 zCEbg|%_@Eu=sj`k+8+>rxZQ1dZ0Q@9t_iQ>43(0fOL2Xx?x)ea`QCM^>i-iX>z%{P zj79m6J7?pYU$6C;ZFWd3m-^LMH21hew(`-oTt+U-c^8Mlekk4Z^Qb^XWlaYTfyBnV zj#)w0v?Ba#(+jIpLrJtf>wdFY#Dh;4a$WIdPG<+Y0|KB2L`D|RPf(BU685CXxM`6r20VBLfWkBG_K z{)R>;msa52ty{@1rHGk|yg@E0&>)EJV?-!IjD>yE)Q`F8h za~HTN2>~meyr|okT5ZfBHbdY3j5m=}Z%m*HLu6_+R&%=aNKH#aN7Hm8CNv}c=FCvX zQl+}RP7~q4sc75@j7q>~y5C3C+qJQ=vH!{2=l1t_%pJBPnkk%Fy7%{z_3K!H7iYn= zSlxB~X^)7kIVOmi`uBn#ClyOY&v(5Zn7OY_6u(JqreJb3z8|C-ZmW;f-a>`b^g&a;9PZiIR0hOUC31zV2Xt~HGCh!kVkF2X; zZFvOA@eM)FM%#8Y>`Rlrw7UzD`PLG=+8;2f{0Ab2X{p@}WQ`0FmdRShg77wzZ9`)9 zv<+R4l-$3tS^;>zkDeAe4|sxXNE8@dBh0~6OP9ppt`~|8OW8?+mx&Phc;WfD!&+4P zr*nVELL#9ZR=q%1qxAjvt!HtsBw8#XtSkxHBt+&miXBc^fGj_bOF|6SV6?l*#pMME zp?TkiC9UP|n;}ZU{A|e@BV%PEQGG*0L(aDA zpP?osVhr9h6#6ED44V_uf)r(Gp%mw7C7Osw+1@zxUdud=ec&`mVq8I)AvZU$*q$U7 zNgLuw?!K+bhdFU7)0b=?!W|di<6(;XFc3pVEn!TwD2=2<(WZ`G;Mq+Jv({r5d4ZV_y)OGAKD}SR zIdmpD%+I#{QM|>(*iacP+NhmL;EceYqY3b$0_(0)NSY^F0b}KU;?G-t zR(4*|(;JBBd$dDc67~3GQd7w*a^u^{pGBmh>a|338_Pn+kjMQ4k)r|xVY#2QJ9VYR z4>*!K(Dn1-jVfL*fx0Y1ERiFOKT4f)8vZmGIL>7MvIgsPt7Dkr78b;E9UvvZGq{e z_@@hj0NE0eDx@1$;P=@|#F0Yr{Pl}is$y~2<2$7YZGa#{f2+?dRn#&d{W&V<4XG}U z_tv57GDtnDT&mF&%*)6Luc(LwD;OVq#jG(lB7%vEP$B7>cKjc#9qpVs_S-^}t?Il) z?|y9OP2ATt(S|dyJJB=g2XN}I>y&Un_sj0Ec)J7RlMR>)j%jJ<25Aj)@)6>3C_KlH zV{#FW;8shVR!1%tVrpWpNdel)Mss;(Oz90YQ#WVeh~MI#PG?cbB6|&fSu^y0opN5t z-}+L(gDKWO1m;^vyx3LjZV$t4^Y-Yh_KBdB8(2>foj}Fv+-7t=HlZxIuztw86Zf_& zZFS?jY7WDcy#9&TI#x^vCY`8a4@@<2kk&MyWG~(c5M=7(iJ{D`e-7^}5uj&wY?;{O zu-fprjPU?n$GvLI4GLj_68*0|0iV|Oj}E2Nm$&cvjYBh2KAb$%;JQs4mgFL8on=wj z)~b(2K<+bm5JB2M{NqXgx7nmHTGB%<9L-wU3^o`&2cUDjL=HBy+X;X-?%ZNqu&wZC z(Qle<8-=5F95(S1kCdr@F(Xs`D4Qp4*B95x5O!-YzsCdgq%U%k(!mT*;!09N3~84{ zS4`$ovg7ej%{h^l=ybS#wbzY-=*D=;7;wJfGr4p3^9T*sSLXm#XcB2(6QOmaLk+%h zCB-sjpG#i!54XI3gV_l7W-d(AN#)}Z^gn}|5M^zK2AB1tI{lv^s>Y0HCq+b2oG(M$#orAs>wD3pKo%QqY}Vt^1hJ(wv z{9fG%y#5_W)6R}_f-&y7VPr-``(l;_xWFE+aZlFZ`eJDRn=pocj@}o1jR^^Jr=M?2 z02VKE8^ahE+WyUeS0yknC~Z;o@mj)1UyhbysFlg8=DzNE-RgApr(+AK5RHu$`1PD8 zY3Hns$2zj+y1lY}hraS7Ko~wmThXy4bUU$oUywZUGlA|Bv7?x?wJXb)!aNcB^E`aZ z+0Xj%AqC_zG&>ZCtX2RnVIRJ_FTvjxGf2_~SZsQ+pHXdP@qNvd9L8p&=$JS!EeVPQP5tMxR2{W#9Fu@gO48J zNE$MWu+h+oUewtbm{@FzeTFrqWxmMrae1i~G*D||sPpSShx4wgRHmG_OwmQ0M2Z9) zR?+x3asd&Nj6E-L-`l*xk$4~IKK36jv*8<7+}_WJ&F7srhE!%=pf()N9`(p0BPO(& zj@_Z)YRkuc$o(wWys5K|y!1(nL+7fHx&4MowRn{{hCuOs*Ez`-@z>#jOP;bME%mq+ zsSQ(|&*f`)7kMn-l~^BYER-64Fs1X5ftcc0Sn(BY2n~rdm6O?X6_^DJtU=AV_job1 zJU*vDl)>Dj@1Pg&eNx_zJI5!CbpySX6y=o9x`)7w~%llF0=l zE5mm(gr0Xf?fdK`5UV$JM68Qp*|Da2`FCU5=}{f`l`+eIe#XB2mdO7AItwJe4EGm? z9R9)3+;vXuvH*CRxqjYM?UY59Pe8KFBrmX!rsJ`@?l9Z`Hon1?v4Gv(qRLb%|4T+z zv+dp>kG>ywmP4CKInP)Chz4R+ZO$!M60g+G>#=T0%k+JsY2ge^ z_e6fcV`r<4_|@q0ek;dTfX6#>(+0fIU(`2sXJE)r`CTLqHZ6)E&XGe`4R>GM;#RV$ z*~z@$4a7rk(*CpFPm!jRpPrX_z|(MQ08bpq*Op3+=SV<2I=ABe*V>%MvS@=%+3LGO z)*evVJU^Uue{)!0Nq4%k4H4GxE2aE#q4D;+hH*>(;Z%Jmgy9_`n%){Gw0ZKDXV~KP z8p3#~W3v$vHXe(;Yup(&`gf0FTj#&MxSdJ;&&=o%5RaYlsHe%u^slt;^Sl&jsDf7n z_r^DFbR-f5Pejw_2mw1^iN+fjPor#1!NhcAHyE z17?OV(c)9d^UwSIB}yPGw;1vmIJUUX+VtbE#IJyvA_6%a5Olb@1|)+H@;I9010TJW z2@${bMsBZKu-7J&le#R;3{Ay$TO=HH_D{p|k3I;*p%Ba-^dsJVlauzwY-vNBWir^A zk$?Xehs^9sU5JtiZWF2^aP5 z9tH5ia&K)GWBGoRH8ZAKnAAW|GQoRg{bSFqB`rxXt)UgI3E`AwtgyPa&0jx)DF|Ku zCG0U6`gYyNrfxWC%V9iZv?NSYwAvnz-M+FHL>g8Y5F0(CSUwZ~Mrk?eo+4U7hf~X z?B3sI!!B*dau-cz@u*l#?b!V?EE5<X8rxX-fYe2c@yQ_Wx)|Gl9LPeEHZRXQ@)x7bm|6T6}0C(x!H zkZ?9+TCZY2YJ3xB>N-wtNA`y$9m#4O!H(UJ;Ag!;q*a8%(6B)TepC{QY}hJZq;|fb z8aW!3iA8X3Ig|J5D#%}hAsGVTX=JZ~#*@y_-6|Rv`8_^c(A!ju zhKQaUfo^P0%fiXH<(g*i%-VunTxLhNODdYOU)w`@QAtWgdSJSww%8nxt7&!!IeC~p z#(s2P1R*!(X>``zZm9yuOLnS|X80g`nd4Vjjkb##G%R$^v|KC@`10M`<|)C*ew&Nw zjeq%SGA~wy3*0Isbj#gAul2zOG1(aUjxA!cX^9q?e&6$^PES*+XWZC}OwfqeTO1F} zvtU9N70K~-c`8X?rs=#Z`kZNRi=*9goLLv zE=-!_xly?v3UEngQ^k`@6L-_9!4uz1)cmFIeAiz*gE};TqI{GBfqpycZFgDvqtE!Q z2CAvXAy?lc=*}O=9$nONT_}c+wyIZ;B_P@+Wc{$keRfau;vr=KI+}+ZL0rWX_;EOP z&9s{!ApIXcDma&W^Fj3G;kdFL9gtpE`D7+9 zQ^pG=GYU#Ai}$20E!i8Labz!c!gKtGdVO^D(hCYY2so%N9r)BvI+Ot&ZL-)#`-w{|uerLKtCg@*KinFU`Ed zZe?35-6F!Mn?`6&eqB;(tFsx*r-109$8%QXz3|X>xBm6ReG;Rp0o}zPezt&f zPm6#8s;t+ppCpHWI-blXkkf&;=*G@e{DiJq*#zTlm#L}lC}u4O%nN)?{G=wnhAzY_ zQjsHJG~p=EEy8!mzQ}jv&SADuFPhiFsBaj-2D>-O8hta^c4XVkXFhmN?-=!3+YqnU zbJ*ey)%i7}%&mr)aq_>|ofK5t0iL{Uc*Q5~Rq=A+rcVVew|swmYmDP7W!gNSwyK!9MB6gzQj~Z&7@5Jj!|6 zi<}hreb(#G;&PdfIc(94J0|?Nh2CUJBC9kmXz7q>iF-CL_dGTk8`QeXzGC;&r(V#) z4JUze(~(xb2vtn-182Ys?q#i+^M28JmiJM#&o%-#$H^*SKMJo#u2N+bg*acbu|b`F zgf}(*4G;$@4Dg5*R2(Zo{G+>b$>Z>(P$Tw~%QGuU>_HlLP#&G>ShKCsnkhGCQ)~!t z%+z#D^D&0)896BlMGx(GV}OCW5P82~zx2L`suZ+%qAH!|ic6of;Oa>+Q^3ZYKS6!Mn^cYuDyz>j#of$X zRG_Kddi-1{{~izI!!Y1(_gVI=c0oG_E{X!*mvrm%v2{W{b+gDLK&u+hdjG>}e>pc8 za15y)+f!eqGZL_URK?EG(frWCWY@LJ-gV_mIA9_$l)ns-$S#>`}*T>UJjp2X8v%8G%=HMnqv8PU$xB74s9FFzu(Sz&c$Fh z)L$s@%@Il^{|@4hCzLuhc;_el&4*?v*2{-kqh`wb(OX01z8fy6q`Tu5T7`v(8W=Tr zcbaNSOrIC0X}(>~(3RkoCkWEPT7_V++kL*^gDMor*IA6{2U5vBBYiJq;VfhLt}eO+ z!-V|YIT-V<5Iy4>w0_xp6w>9MK{EK=z}e(g*|B4%eeMssSiwGY>e0Lec3Rw|=P8B5?z#xi8Rt;9+3*o3Xn{F{1*BDvOp4mzU!XoC%z?FH z8oX}%_usV0mfE{8e~SIzXRh@4YcZbv^jVmhZ`)sZ&0S^D16Tj6eygJ8YvxEt$odoQ>^kg(hn*DfFxNt@h|7D&}{Xei$R(J_}Qy%0d&E-9G;J%oCdkezM zcYZ@TcpCRHwz27;`CizsakC7e-UB-O0hT;hgrES?HWg;43|of7ja88=x6Xl*qi{T9 z1F!lX9fiZCJ6TzybWLqL)TggUAsxSy(dz|VJMmm-7-*_YKM1L0N%0PPPnfixLkq|( zyQE=}!oYZ8x|%RqZwK{@FcP3A|Mg-L*pjG;=kXB+EilauT;^2CbS|Kl&*U9AE?TNb z#=aMC#=vgXbCcOxD77*U+2Ot&`{s8oaJ=PB@t0E&mFo33EGNdpjvSXSe-L;VNMq$gEi?j- zgARIQas4wpV_@7@%TK!HD57(MpO9<|4F0#uu|wM1kK%al8%aNYX_cIBowYR#uNz>5?D5ilAkTX5e%N%MrHzfU7s`EV;fRo715C$k@Z7WPpUbT<(Z68{ zH18Y+kSMvE%;8QypUkn%{8g|gopD?azG?aq*Qdl}BWhHZRLR{j-E5KbZgcLw6%}Xz znZ$Zs-`qvPGc9U_;S)=wxt$?EdhjNlbSwa(%jhxH5*D83Qv({K`-J_Hrf*S}?BX6^ zT;6^IPjq^%_)VWs-oscP5 z!0ekQGKv}W>t*}6;NQf1*e(mU>KqR>OLsv^s6(eqpn*e^-NP(ZgY%#VVobQ~E`r27 zE+(~hiIAo^vu;YVl5wf%*==6K4ikh zUci3rXh&l%EUor$l_jKQ@dR#u-gV(pRGe}Q>TYy&Bt>;&Gx~kQsc^nFwCr&alN*qF zO3|w^*4s&(0}!z%sRY@uGyzJoJDNHg$k^9=5uvr#RToB_)8O+WMOjl5C zWWR;3F{`0RYWk&nzDg{%8UL76oB(lWl?%=M64{`UCo;vn2Mjvrj`w(u?f5`2J8Zz& zJ)}s;7Mvubv(Yy4EuoZx6(4JS#Gj4Xr!*b*5l0_K)$CQpN6%Z9%g2+VsdG@p8gZ%w<&ECjiyS7f))S(e6H@Ut1#BNX#d{2eMm}=YfkPsb;>h9A+j&50W z*bPP}CX`p^MqETM)s-6a%8edUGWKpB9zjU6{@z}ugun_n$qhnV;_u!pW-rD?QEupv zwG4YrBDhYJT2&!N)4J4;mv^nx5gp=^zcn^Qht8Fo1i*-{d{+0=RtX8+Z6K+MR=RJ~U-zE>%zelBvQLi(KICCJZ?^3utiGL94=(eNj#olIijA2~te^nfJ5ng4I^nlJX2 z4JU}qUC7jOEP0e58^+W+x-4`kOv|C(w>ljWw5D8v#zcO@6Sn-y}@KmGrg~ zwm5ZXPjeZJZP7xI@37W#%rY4J`FOr{;MPA#Z1+P5v=ht>kw?dKr#=i(=!VCKG-CJ4 zhmm7Ka}N9xu0EM`fm7$y^|TSoQ}cmyUX8mW7h8}*aqSA9GpdwG&ciRKF+|@rL56BBp4&GkP8r^~ z$-;MR{)Y4an7Rt4x|%47OCU&acXtTx1c%`6_HcK13I1V^;1GhlI}Zu&?(Xhx``D_j z+JA8G)Xbco?mm4&m&Rq0>i|*1(#5fL_#F#RerytXe@M#6w`Im_L18-QgY90ZD9;Aa z2_V9g>}$1hul~Bg1{?J7gvYiOdsSQQ0$W834E7BAptlk%?>#K4PMDTmi_xozU585nExWyU@Z0>wnM z2%>k-*DKwPPz*)i^wIjdhOXgYXYpn%Y)D?Y1W9yE!D&0W=aa-(?6<8Lj@c-E+xuP) zNEb-qsMbT|xIYlFVzQ8!z*C~Q5`oXP<`2|U}U2M`g2k$(wHj9w6cEKNaxM(9uHSp&3_wJ3AR=sD(I=*W(JAv`MuOH$u zoTSbbO3s@QSh9!6dOj^@{-u&RlFdJ+Lq60mBTK<2*p(CggmGM<;%l5xN@Ie$urjKVWZsKP-|OYedzrwg38ayW_a2cPe4z9!h(H0G!kJ~8?o+>PKi8o+It5kw#tfSR z4Q4@?NL$-pbz-QpNLr8Tpqzv$bVAqR$i<78nV_k;!OU>Hr4igJlW!q@PG4ba#Ow)MnWG_k;a ziz{c9HMSlUL8+T{N+Ji+zY!*QWcSCl)v~#)rl0~t{DX&vggPHdJ|Y=D?lxdgdAH}! z92M3K36)p~`}UuKUKixwRB5-_m|p{!xrWOXDQ){|VhID4LVwIOtVY354ErGOzL$sv_PeR|Y$fCT9dFyHKiZ{O8QU^vd zJ>E5S#?|OL^vH%<{v|7SC52*esx;;gg2*Uhx?(tZF(U}g0t}ra+Ll8hSWPe*H1kps z>7U9U;5V2ABzWz0hy9B0(+Gxiqo6nKM(5@u=@=9{ZK{498rXJ%x$Y%K8!_j?qJLGdRD!vj9w29LFGq?7Z8Z^F8jKYPb-hp0C%R5CYnSmSqJ>1Ca>Pn zqZF!d7YCd}=w!T$Ao2v4zgyDQrnMOUj{{H*d%RLKypk0qvNu`U6uCMc8ih?Jx10cY zc4S67hWSKhTgEX*21rp8aS=baZCQX9S)hum0*0(eI}L3+CWjw~g^Rr{T*^6YGq=}q z5$~YO@0v|yvJ04evn2$D)kTvpT%e^G+@(3G5LX%XUlIP;Y(y5X^x%nVVM_P9*Ov(a zVO{tZvd5Gh3#itEWhpq(%af;o+A@kVgi*myc~H=N4jn0`t6#ywZNz=SW-P5R%)U@> zY`Pvix`PJ)rcRW(G7eV2jtxA6hdmA1> z#=3d%%;kqe6*&!F4!fXc?;y@DEkv*$1jos!MP4I6NaexL#02UNUq+iuKy&9Vz!Q@B zv3CJ7E{xb>c7;>iiIzeg+ike-ccuv8AT5E7;W#qYx0pp#1E`YRDS z6Xiy(IA|dDGM&4WRtvi}F0qGiQomKH;FGD_yLM!s@xqep=!qck37py?@=G3w$ zazF2iWk*Tw&67s4GuuItZeMWI_+c_ztFtv~ejb$Xd>chW7q%u2xyzoo?g+&&ob?rQ-$m-c3qn}uOk&J&1JdQk{k~<@Vt_*@u7h~VU zK6$_PqXF}65s>pw^Zmw}Y^V=?ZQK_!z!u)~#kDVDgUI|h_xKFT z1>sTn@A8ayH|U(bYj^foH-Uv%Y;d8+VM?Bh-2Vn?egHn#4?2xLlhxjgk)z`;>n$NaU!xoW5?AZCJRE)|7cc@YRh& ziR|-pNf~Wx;XOe+1x&}3lJySJkqG05hhrLku|UAyxZsSH$rxGz zpA6^@w*kejfL@r&WuLVatRHq^j^jis%w`eGNMYsHch}%TM^2Y~9a?pi&Bs>)sH397 z%ntV3defe6aeoi3gy~ZIS=asEu1h?VCUq0kU5|{}Y~e)SG$DUb(tYqGbQ3qh+Cb_z+1eXtIm zf(Aa_HX>n*#VevAJsiQ=c&xu+Y7v_6%vW#E97yp3U|u-={^@dcMLlcH|6%rzNk01m zc%EW^r+)J^p8=G#gHx^ZjD=@{Y}+UhbwrB|l zuGvX<{zR=`@v8Y?X8a-S&>)D&bjP00_T^)({RXXpnu+f$G3H6pJA%$JWt)oUHv=+6 z$W7AIveyRM*>PpWtIFPCU&@yK0N-%@pEn%8>s(MYdeD%yG&InA7ST-L22`rL!w&6tYN7ty-4{Pe!i}f5r8V|<$n(M6#Ndw8X5zk-w1h?&T zE|KAVb_5X@r<5;9YhvaV6?1Nn?bEm2LLHq^`&}W+HI1q$I^7ALg}C66PfmoT&NXp- zP?jW{i5m%C_TM$W1jwL;9P@ASCD1x_c;I(!>W==G8$a5}_}x%1Sq-&+8u&hwfp_ zQ+XVNBQXfH2ZFjm1~-`f2Wo`Fy@R>hawO}9<&+zKRW~)Pps-K!B5a_VuNMkTUbx21 zSKEVo35s;&MRL4sI9~2XCk43C@YL_Ep*MIMD*_IUU)MG|aGGAP-O*{T1c9X#Q{gxX zz~C-(Nuc|f*@m&F`H%JtfS!zhnGdmE#x4lCrC?G{WwDcHGn)oF)B6Z-v|M+~ zq}OeuOJBGH`-S(**bs9&k0?-eG#ny}Jl~+jPPB!Xd`i{>;w*|j9db!8M$ydBdPMGC zF#imk{i2(!=ATuSuHZraVw>!NgG0^XW_SE#QwBh%m1n$K_ z^-5Va=d@Ag&gUx%pM8q_7SZotKop)?&HXUj;Ylv9qlzX?3QGrY7gIX?ZyQ4bQ zKm&3AhRi&CJTi(DA^Y&h#3;+y!MG8E8OgAXI^3f+BPG#K6ItE zlf>R$s{DF{j+MW$^PIF|!j-?wTY{1Zr4Y66rv@4owoA+2ku={=4kj;@(TbQ)-O=l} zelO`IZ@V9jb3LF*(xvSB(prNo==4^;kv1MPT}dli^4dVo8$q3v%eLCgi{!rG@hpUzPm;}wzyVb@kH8s6J62-Oy3#D&Gk}Y z8D98Lq1(|~gx|!d`SiL>j@1BLhH^q!&^l6bK_$M%3jN5=jlkZlF+bGJ^{N`|4kzO1XtNxNV{j&(OWh_PagS(R zECKfp^u-6ws^`vF;+Sg0+Gx{6{m->ABGiy)D0Ww1DewKjmmjezWonj+Vp?%D>3bpa zBkeqWN>EuQZnfwEciTlKuBXH?$HZu1gJ<}(ma=%bQ@S28xG^RgBgn!uS{dtJB}w*@ z3$$vzE$rr(H_*37v?5%V%Cf+LT5lV{PsUS!eVeye6|4$O^(9lMSePWjDK=tZtwb(>grLm z;|VzGh#B9CB^hoT+0mu!$WVyi>~J2ZS(!6pHHT7mkHSYVo7Vkoeo+ zSAvFD(5hXW*x1$+h}!^5hwjg~M0O@S{Z4v!4GxT%6*GSnW9Lkm=>iwm% zqy#3Ha%sdZYA~`VvrB6yjXqzY`5=df@3aSJqXzS^S%O*&Eih+{@~3dKZ~a@q!OeN8X(-0%fTs2^?&~Ce z4PfL4`)Lnbb?lu8CG7L-VFkY189X|sBKzO3N@UMF?JAat3U3&tXw!nel@ppD@_w~O zIHcysnQtznNDEURg7ZDxQ%pk6YAn$(t{e7mPJ?7wn?UfjmTieGcehVWK^ zlQqHY&dmI{V0lGJSnpg7FSTh)+rBh@!wh-|nC{BOR35Hb^!8T&R z+%F~>2R-=YJ(dx$)=ZuuJN9AabZLT|Ic-Sdbs{elD4#_X=WKbaDPSOgk9udl-B`6IQ^-14);nLo;Gj*p?fuLv7 z)z8?Du^VEq>7Ktk7=L!hh@XusifMI>E56C1BtF^xz&TNzBj|HTftCr>h01X4&Q^ZcI|z+i!xN`mwGO^9&d+r3ZIid5Z{ zB%xEl)pgH=|1;93zo&}=)d4G|g|t}lZrsbBjz87Zp{--;%!4$S--|wwn8EONp0|@q zL{5Sq(v`h6HgP5WP!voKOLecv-?gPrm1-ty6bSK4ff_kw*~;D7mq%*YU5Ft+@PLK< z>^fUSG}<+m8jRV85wfSfKl(vL~ajW5Yj9zwRS{uY`j71vye&X2pL-xO` zDoIJ5(+q-n)6W7uK&}M&EOakcy0XLtm9@V4@v`yd*pNwE&pfX5C*+)~%ZgT0p-gf<{dB!|y^jM+{dfRlZnY4=cIO50gx7T$n*^g7vhV zXJ%L%gz}c#E;*3{&7>NRAKV2l5#f|3#U>DM)2T$T0W)Vx8l-j*P?-?I1-20o9rb9O z2lRV7fNS533Ydo@WWVQ?ek!JjGkDy;yx#y6PQIblSIxcg|4MJh;pYjXMs0fB^~7Zu zId*^t6n~Ds0BrCqM#2^30TiSTq6Y}798&g3Q8=Xf&D|*?OvCPsbq4^3Zbk*?@kw2C zTkuoUL&3}_Ba|ui`%eliPpMeAZU^9LomN(JR2LKlcvYaFwTL=z(GT6*%sPZ~_7v>_ zhWf*s8e0|}w@o!6m|k!{yxWisMGs_auiGvQV9Nh^ zLTp$V@&uh}{V^Ii4Y1Dmmd6Gmak+om0I6TcT0KOVy52}uwv=4WByKz}e&TdB5-(bP zrOAHX*A4_&)nJSv7pDR&<6QOx4%Fz@lQ+ih7E`$ z3{g~rbL>gZ{S~{=i!u>Eh7@7jfiVkI!;j;s@tUPgDI8b5q3vfQyD@#^X~*C;$H%?M zd*ANBq8EI`_!$)6eGckvKFS_CKp{@@U7|+WdydbJsfK=CRG01NV%SospEWIfPA}rJ zUb&yJT@iA%MlMCOqXP&&ERT(~U&h4bbTNgt*rRr8_TDXQ1da$xa=nK9>LF~jmW|BL zIN-%a_AXvHIYjja=jxM7v~h^wJgJ!P!d#GhxQjOl;9TKA2x+;^Rl&XIAdhEVWZu>a?9icL-Y{_(Z*F0+~tW zHS3xu|5!XNSA(?s%>%O6AhKy{c#Fnwu6-DlXX0i#@~vNqzv}<1%cQzjTmGukHrS5c zuhbhfkP|*vBn++PL%RK4>UbI97}BJXnVsUbwyAN;Nt`3y{QR$N*{=5e(A3m@#{K-8 z`U2Qqp8Cl*rdq1MoX;V+@@3UQ`Zf`MeA}!1Gux&Kezb0LKxFMU>x>O7YQc*tCAHjk zcR@Uc-w|9T#QP!(KV2!J52TG&s{R)qa5QsZu8VB6hsj`}6`= znK%#;#L)E` zG!wUW;?(wA9#vn|Qt5fFmeE{kT=EagKOBLhIKJ3u=?YVkFNs{(BpCE_sj;K%} z=XHvW<0hho$y}rbB*VQ__TnTE)vk^DhXtUIEtDH)Hg}^zXGO(dL{1Y_8^L_+#;);; zKRx#OO17k1#Q?l_zfc&5z@RN6>PXpRxZd1a6+tg>XJg;p~nAV$W!V^oOY#m5K%_PpcHL zwHB=a-`=QOmKPpGp!h`fs`eGyTiZOM$B(a!M40_gBlA{4nW`qb*6ruXIV7u4Xr>{b zJh@|rxlHI-3gDb*u@SLY%DgUuL7Div%Mg^cXHEevr>(Wzq{6V?4gKKI6(Q_P=YPGE zBZH`i;1V{S(Xu`+d%iE!I5zpSYUS_sl{;RmOpH~f%9lw?Gp>W>*hYTQwVy;B&*}){ z%6Q|Wg++rYA)?3m7Ti-{>>#jJ?~bx5}xr~etz<=2I*i5cJo!vGrrf2&Z zmBErrkcXR3Ta?EX+=Az~1L99Z&m>choBQ|&XQE5t>>TR;)vFp#D%%q!xG3jKOu6J= zB5?zV=-P5V31A|NQT^ppCf{5!FQjxyzBRGl^u_%;^}pdiqm>Qor+o7=U^=|B!$WE= z1x#iNf0CKP?sEw*A~5~btvD@lZxaQ{^dKPMTyUqT6Jw!r>9V*H<2&8l(XWbr+ufOu zYdqhpXv6MZamD=wI=$X^zJr;t_P*A3%B%jSHlkTJT;%_hBG%oE3#dl?UXbLPO*oaE8~S21u_ey7s^FWCTX??E!qhYBq1A7^rU=;P5YF& zP+M8+^FErxwEEXDBVB8ief*B_&Z&$tmOO>xIjP!ohg-4hZgl-7c*%-GP49zpj*qeT zKY5b_f|lcEKWeBqe^2Ffz=y!=hz@Bl7mAf!8x!WFMeX7ka{Uscaht<>I~cfjqHZ5> zuLZ}ry6BWOcS1DT(KUBQ@caba>r%n^5Da^;{UY})PE$S0-Bkec!?Ed5{JgD0&N9I1 zJjvUCQKAFvvj0uC1bD69v!&6yc2F-z5QqOz5W*T)9v~M(iqwqw5rX}kb)x6_wPnwR z*Qi_;Ae&9$Tyi_o_afiEumsv@xIH%MXscCG$*#hTOOVJ>0X5jUX@Ey)1k_Y&W)($s zt^WcaYafc^IZhlwsI~LWuS$=YihAazfE@2Bmc}tei*cn1Bijpl)l|mSU&HcGH8}F_ z(8t(Npg7jQ6RpuC1|HDwPd`$(x5iAvxO^d^<4kn&`4OhJGQH_U>gpHPzUCq&o|-Y* zGzE@_q!rAh#bVj%Z-7D>s$RL-Xc8D#YP&(1Ou3)rXRC=&YIlo#8^VQ$6f z6r|n3Q&$u3fRLl-g78YrJ@Ur?@!-x%RzEivnSRVnz|9lIU=rv0SuXt8n8yrBQRzrg z1_^~wn7V~+rymw$%r4>3ERR3ZX_%UssQthrvIA++&FK%H zXdYCOgX0Up04F=j)h$c#TaZ1sZ(*$?XNnq5uY>OccLxJ&`k3!sOrj634cOm1yvl8B z+$|@Qg|e?4{u4~sU5^OIk?8pl{o#?Qn8F@t5-HcwcilnD-Uy6C61>lXX#KX6hP+IT zrdw@d{)+vLq3f?^2;ZX;q5pl|Cdm`#t~=3kDcK0oUn{r`Bs2@eLw5tdx)fOWDQS{x zWtJT+{0g1Kn$(K0rGHir4ki{pr`2bFu3F6N?ptNQo4-3%#H~JjethSHLMgwF5tt@f zcd|-1v|GCOXDnkrYiv7pzBl4j|3*A~IOJc1Y1^@$oXuN?a^{X9lNepQ%Hq&Tbn($8 zyp_GN%A#Oz7B8o9vHa_3qB9@a4>^(WswQ} z0dCM=5`q)ONYf9IWoicExkbZ~Sy$>JEa7@-aTM8?eqmg>;VTqV?$5i_Ws$v<w>Q%ernrTP8XPv7C_*t3x7+=8iMvY6-T7iy&%nE25j0srkV7{2fcy(~=_ zpM*>OEtluyT0zX6uALQ}{lNmUHch9Ol_zBgPTa-iakEtr6gWRBG6L0QLw=X~uLV-g z2Gck(52w%MiQcT2G2&u*x(=tB5%&bfHO+zLuhkHMTTxY~IvtddGV!zav0$GGyJl7= zDdk~VqvJhH@FuOeQbodOLK6H47bLhiw)SC#(y=L8Ab6!n_CA<4biaboXI~9I%BGz4 zK>c@1DMLY4nN|udxWxN|SY$~8&wqyE@e!=`dUW3C)3rr7p-5?+w>M$dD;BKifFIf5 ztp3tnAXBa&I>YRPFpQMI4sTb2BBUNkp6-tx8^^#3+^1=vSUOGOS>k^OzYgVof7ME+bY?zeLK9p3wjB9C$MXPKylU*wT=fa9vLc2)dn%DFu_KI2iVS{f;@&#!J-d zy|Mw1fFN*MiVzOH1Faxr%}H<@Eb-2VWn6CE#19<)d;8@Uin!8;9f0ZmWKHO_I#a#> zm=w5I7AT&tsH>KdZ(&|vF5Qfj(tPx?wU&~-Lv6y3x08WBO5~L_L9>4UAFKS50bSZz zIc2qeUUKW0Q~AOC$=$}-0sg1enV1Ru=xg8qd7Iu2?tvK7@)3KsE(GI~H+mkBZlZ1aAH(bIpyOqAn0qrY$GVX;Rax1fD4x4;(!o1%BWLAnz9fn7 zwn0}jAte5%LE)@{QncdC*yIoNNF~LkfNP`ezr(0K1XY}tBFD3M|2T&A4{pzgI>mn& zsCr=yG?@r7l`yApwf-@qHR7Fa{{aT|H3uDLbv)|r2p3@5t%gmyR&nct+F0oMQ$_h^lbf;XG9& z(Xv<`MYdlQe7%9rESLsYgg6?NNZ_<6KT%7LTzd_%7r0!U=vsN3SF190kf#ikK~{ZK zmk==+lRRAEsI9F}OB(%I322&rCP}8>FAkS&;wTVHy;s=xcPGp5!#f_sr|xlT_W#*WFIsDOf;mORF&< zbnd%4-4I;pOV5-W>QVItJG<(xgj?B8aVngs4d23Gh% zpzymVfeA$hMOC2F!=6g}>*f9z8SGyBR%w^7pOb=v#qh8yF88?9B}tZLI{Sq>-w>H(Ti2U2leb4_;bi_<1o+Whwn?Y&RD<&ln~Th zo;r*_%V(9j=(8y&HemxJ{V*JJuX{yVx{E2OLp2?_1Pb>fll?9Qfh2W`;4@3Q0$r1A zmHaZ?TC>0yDo_5vzHh!?9#PN=N^W!XC!}llt&j)U{jFebrakm!S73ifCoQjMp3gKh zk8BI$--F@ByJbMg+#8EE3?ESk{`@9|7Z4Of!`v}9vb1lPHv2UD zdp7wpYTjq`>?ga$eS>=3Ae*(FyGBxrBY~P@KBO#t?umIE>vW5Qxhb3>&F0>hu2Nd7CVMib~e`eEOds(PU?w!{=7jNAK`WUW>SszNoLMXubW zc6!^=l{Vu3sRMz?!eGi*btpccb@~vEn$sQg(L$yv9USirB{*a?B%ninlYN(7w$-p$ zA3ghxl@UwYMVt4&@yj$(pETyd7o7TU{~~teNOAbJdJPnl0e;1E#c#1Hr63wpef_ei zuKdqn2Vwkm6}NaFCa4aBizl6v5y(^SOgbR=eQJXh5WmK*lNNSKJSho+9?k~z|0Z_V%F z`3On4h`DFaarSVX6M4FqZOPsbn}XS0gBMmc959xO|I{h`USZXnnjR=}8{FI0&R6Q^ z15CB&X*pzr#J{AoGBB&{%LXNFU9fQG^52SD;OOItD5{gL?=(LCcOab!W75;}_Fe9* zKPl6HR~C0W(ZXQ{i3RC=&obSY3C2v`T-dglox7+$jj}gwx&jc{F*uAd;3Sj)7&2^F zIb-tqNK#r8#R~HK^m$yYTokpo`O!kDrJuOBIgnLDYe{aJ&(rH1hgA>7J^z!tL)ezr ziAljzf+rur5V45N5+UR-Og;a$Sr9QEU{NAe=oSU(I$rCL|EQ5X*Jq;s>sA&23?M1Q z8Qz%@K|uUQ0C!UoHvXR(gJ`BCz0OG`K$~Q!w*MuSNp(jK3v}ELJ~Gz_f#>10cYlm*TC@8Sy`;Es@K9c7fq(coZbyfy zOf{F$t8r>GqKetzf3ZBFr{s+ML?GOt~pgq4)&fZpyvvn7@>i_E9{^i>ye0zsFh>`qK8@$ z&m9Kmc8OyJ!AcsP%vVr&RgOQ{G;p`Y`KbT_3P2jDbHIhyvPLqF>4l%i-_>GaCm-Zm^|dLDgyfjpml0Ni1vQ{?Ht~?OF5+PU&<61oZnV!I za6Ak*slCtAb_#Q=!f8Js`h70y=nI_RnoE{~nYOzNaBrhJkOiFl_@|arf77CxuRW@3 z(z*Rhf4(4;6p`C=3n$3mJe^AMn$Q8nGX@1aCs$`%cB18R>ywpZF}VOv2K$O7=NW0x zIKTWnSLNSOu3Xh8$#3ZhaAe@^f4UV$3)EQL4kHt;Y z2ku?^p<3Z1JtX+h?C$x14x#h4m0wjIF8LU$8Fk9ftw0Q3Lb#j_nrnQEgP z+I?-DmQF;7+lf4AF_&acG7bb_1davw))M}Wl(b;~*97vbIO?^)v*siLGf2e?M@{zU z2@ePG-`%gO-Oum|T_;6x@vMF%0WNeGYu!#b!F}tmMny9%Z-0{%mg~i?5_niwRVhtNs8liw0Ux9 z8wap}b`9xoGFo7qQBQRNhd!i(a$b=;abEj|oW~>Ub$}6Iu0|QzNDRw&&d$e?mDg|a z|LxH&Q$X^qRe9}RB%X%_RSJVs+%`S~^*0RHu-Y=U~3 zXX}QLkDQL1!1(;u`;RoCI{mS)1e&%(61BD?63opR5Y*lM^^}w%P?Q%1Gt&mrR4`)F z(q4I#0^ejU5skXIa9Jx8_w0AqeG=;Z+@C+P+7frjmvn4TcQ| zR#m&ebNKjwbF7*EiRw9OA$(yeOd0U>0M?8(q)Btps6k37lP+UM0Ba;Ugrn&EtNPl< zV6q~e<*bzTsE`I=G6A7Ul=qoN5}cUMaTq}d;_fI5b&JPYX@mMGlvD5-+-JeM4lU4( z7)VWKNfVE+^oJ$L3>#4sc=(hmC76SX-QDSQ%>fwsaa3ErGi`Nlg_nXhMG)ItPX^wkhy0_MOI~yVRKh7C`6uw2{ zVXe^}<{$u+?S?yq(8E$j(1F>1lzUn^FeodCr$N%}P}Z~l`raK-7!g=s;R z`fcBN6Jot)FnnB2_*?Ly`U`y&M&jH>5BhKnVR`})$r#5N=&My3TD-3*Cf>>f z4|ohWyiPI};^Tj(5tB*mrpwDMCelB?j42AH@ER_(p^eK0`;)~?%lHxUIL=o18$L$H zoI@OxbltG~W93NNARL5Q+63%Z zu>dvH9qWx#gv>#-E!FMkYpVW+1YD;~^yix&6MuRJf8tThl=X$ik*{qN<>Wb~ZXN6Mf614Y0GMy-&6U$9cvs-o9rg$Y9q^07-vPCm92wN4Sh zphbnhb8?EX?!v1le6$wt=QQokhyYXL-(+c(Zl%iU;#a<==LF;zn!l$!%?{k(1BN_= zFWf8zARsBe{wWs~Qw%vA*cSZFs}#ypjE3aac{dH8^E{F^-g0Wg(dy0>e_rzw{x#}L zB0w}`pf_myJg4(k^W$bYZ8@iEVk*lNoa*A7^3QnF7Mh0&!RKjmvnC+BW8YW*MvR9A z@i~lDcHqvbD=@(jjpvL`;!2bc5JI_KI%vw`tGr8=qEL$?Nc`wL7R6sVN%d2+d0jgrsZ4CX+v?z@EC06~r zTREjORwWYAjMWcORsN{vFc$j8sENuzCq^d%SQ^Omedu1+rD2?ha#%7O;D8<*)6;>n zw9_il!N!rbvahu;aHWZ`L^PT(0}Y)YvSiWhr*l z!+(VRH?KO`;<6j!b(7Qfog}A$49l@rG2OPjCx>JLSbcVTB{)kNyL|6Ghg z?OpBBzn~pKX&NHSFRtbIS1$|4;|rWDp*M-Sh6wqys{=vM18zvqKiW)dC>?VH6>qpR zc-XvtA(hgTG!WgO9?4((t++op62kD}$O?{U4ZHNH!@|N!JbrVq6u4fD%VKZ<1=w(+4uFUgE_N29m{x_G^3$7)P zN$Ws(1*k=0ej0Wp2!^Jf_A54)4h!$>j7?AO^E{eX8!EAGD8Gwr3WE8HCE(K*s=qVp z1l<62bmHg_9$W|+bpO;CDqA!?#RN=4z9g`HZDrwm)_XJjg_jl#^~qxd2AW=Xe%Ano zRCdKi?Pi??jB7S%vcm_IEs?Ok(yiLn2*D~wrcykr+kU%eb?`KOuy-4M(J{mjc^*=o z0EgES4Mi!4lxU9cn-15W8@K~&l#~1JetTi~zJJ80{BXy>a&E+R`b`g=XAQ3JO5`ET z*p$@wZdc0S@t^$p3Fx)t3G(eweBmHy&okG_pJy~89L2}>e)tCJ4vLo!@fns~X>n{z zeFpo`$|tih9P(kziRzFK?-%AHX~M6Mhvnx7kaO$G(R#%P6EROy=v#tA`HEKEcK+(~ zWZnR((sdCK4ER!uZIOWP;z|Oml}7zuG{UhR zyUQzg`T~A`klj(MJynv7&wRP|ITQC9r|((o&k?0bC)DhpP&`PlLN&%tV>W#iYbM%D zi{t6!A4Qaw8yr6~co*|rh;`x?t@T|+CcYcoZ1tz73V-=y&=DRESfG>UZ7rcy=$)_7 zts95rC4Q5WdJ_Xibw)qzFY=ImBSrhRVNiXzRKlBG+E8`V;iHK&!fqMHywL19v;B{k z=fFy_<}!Q2hpNU8jXjZ+^WfrVE6O7jzLq(h-UzG&ib(#q(78X0H{nw64RsY5;~+Pa z2V&nDg)w!}J4z)z6cisQ+j}fM!81jc1I9zQrZsB3*Mwlp9~e2oiTyT)zHA2@EBxF) z>FF7!WOVHxh6-eTTC zi@l@4y*E7OrIQi1P^a+3oW0cw*W32ye%VI1lfT$?mQ>+C(D+RcpmN7eqROf9pllep zqlM%qc=xZLsbM1PDBIheNQ;>6_!bq#w}6Ma_RxYsK>0clXYIjj-CeL+Ek`j)JVEtV zp1#BLs$F>?=OK#0o^i8Fx7_NTRl_!g5>bEd-1odi_@iOZhr`0ZM(x|~z{5E|Yhei+ zN}f_EZ=rfT-ueuy3jbt%Y$qmdI*-udFKpyT(EW&^-@`*uTLk}w?<7e)7jcc9loVv?u413R`rYO9_}LkR(GO;C$)2YnOznSeT(0PR(`eqP=pzzn>UAE z3W+=I60O<3?r-7g?qTM4Cmg;SPBI5LiB7A-A|YR{>+(#Cprns~%IWjl$&!a7LtJ>r zbvYTFO{aTw&S@A%pk%T3)b-(I55!{g7#E){(sKkF8TiFGB0Nu77-s;q>%Qs+xV}A8 zt&F=~wD@-(uCsVcTnVDFVRUIPF`+9XQK{ew9^zU}Vj|kk1lQvSuBkY#KWGIa#E4D$xVgAe!skJW|w6G{d9f8-$gQPYl zTm0_2^>P8qaq|$88VH;QyOz2yX9}%eYKdo>J?Lw-j)0RqK&-JoiG;7ggP`N9a~zFw zPa5}DW@J2p@f*SzzkVFnsBGAFqat9HC+frPih!iLpS2;isoPb%Z6+7e&^5AF$GO@7 zhrm!hct)n6XRejlJ=IrRMV`E(aJ!X8ONpxJGJo_)On)4Q=snX1$Kc)C-`2=&Vr;hp z@V!me95sg)T&Frto4au-$+xKDP}3~FL4T?c+v9oTc)8L+Y^TVMVJKk42HJswl7N>$ z8?e1ghoyNve|{kGt0}Z@yUbRRA?n#;Z7u4kufPAQk3#Y zxHzxUy<3)`kd)U=QNRzuk_dAhHhTz4irPj=c-ZiNA;C}>aJ$|;0TJ5FlJs_X?Ry^J zlgbG2g?0CYIS`##xZPQJ7h&vcWcR)~GRm8VkS?KpL6pK_^sU>KkJmq<>UBVXA)nZG z$&dxSL8jw{98p$nR2x4D>+nlGobL%z8FW@v=k8MX4)PrX9**3UFe57->jK7w6w66t z0fEAsE2#?omD+8_SGDuwD{Uu%Lb6>S#eYJXd(HSQwb5b1`c6y*Kvo4JGn9@*Ct8n& z)JfsQf^80&H}`b_nj9DLxqtl7@4+u9#5~)Ym>)I1kc)=M{PNU0Mv@=O5WRLLPNV~GkPo)rjI{p17LxvuN9Z-r z%J9AW7){$)=3H+x^^MQ|Z;?!w{g+nof*WZioRMMiPD~A|;LXI$-N_is*x@oKfXyj4&Jq@ zxBqjB5A51^L}pT-;(Dtr&P53aeM@A2=D)W7=T{K&inq`3tThie-* z$iLPVK9Qx#LrL<jHg1ZNIcMm#)YjAgWhBIsLcfY^joNsHsO<&#B)z$q}^;LCu)ru^RlRCZ!-R-|3 z#*D4!8?p`>0szIn_d!1cyb=#bc19@3nS>ZbwL@Yaq-6C8L-9+vln8z}7I{i0#PTM# zM$xjF>01m77Y@?L@RZq(>00ILqiP}|f;af*2!B-qtOT^qN8iZhrwLct-^rl1JdPh% zc7Sw~{GWaC3NkR|NP7T@BsTQB9NhcOS+Z40<$SwprE2ksq0Bha!E4+k1zygXx~kmw zT!@vmtgPz5yfDiiK?j~ggA#w_>%kP;z?$xbMWG0IoxW3M9{DBjQzix1wNTviJ)2Sh zw9(==El~a>Yw>L4+*K6;lev&Fg-VyWBh3-6Gi`}GdGb2Ckh!d>vmJb zx^ld@bE-$dbP&JefJ&lhRKl%7z#RPU*(9lq-K~AS`d?lNdGG$040t$3BFRJ@ufmhh zU{5P~$g|f7WhN`{!aFA#dXx?En*MRl?trEV{+q}34u`Lvy}Eft89foaKwK3#Pd9#{ zcV!j9NkhV^#mXw1OH5CEtc1%8#F>GVCni}pCv`)89>G1`ltp?Sb`kcv;Bd0^qTd*qD- zGxK=rGxwyV)zRV7G9cZ&YV9{7AKk13rI%@EZbMuC%xuu6mMFC#&hoEs!%ow^8kDb-JGQgVo~s z*OnmvutWe(%)&xN;Ps~y&E4D)=HLatzv1+GmlQ;T#L<*#we}06O&UK||CZV64NG$N z%SH6xHR?k?B=gUDKHtsh>YRB)a^*UEHk&tpzQ@@KpHBiJ2;8j!mrmc`)QJ{2-lEVd z8v%qI@HSjS{6aqDw8Koxs+i3!)3K0^2mkD5lon5KwooRG@qi2miP^ekBDY`gaq1&B zD;)(%7aG9|K*QZdb+G?IxpVL*Uy{Z`qFSpo`=MfA1K>ZLei6{TMX}LxyQXBo)~~SMC=l zKEL%(t%}W|JG;wXrkcHr$3<9)}q=UfcXX0Q#_;oVA?Jb?M zzH0fL+gB6P$0;<&$XrBIp<0j;Y|i~SkY0EklzP{GCI#(Jpw1VCNjui9>*8j2HAVkjWD7D--g zabAkq2G13Z^*GQ=XL**Rr@vrXAW2M(rduEp$%K|_=>8-Slc)Q!v6wde*+Jil9QsNx zA`AOIWX=X^`!9{0_o}d~O2pdl`f+q_>8b(LzOlwu?8tu7xN(f)33VVFQf`fU=WCRY z%BekiT*WDjWh+t=rsZ=dHfv!{S~hw$2e1;)igQfuk6f7`m0)B6RF?DeX+%) zdH`6&5WraiPw*{f=O+aMetf(+`VQ^O4NiKM;#6rfzg8L#0%xP?C53;4PcD~8co-~| znockey%z4BIAHz)raKm0Z8!+8{CECK0^cHoNG}-38ns0<>}+t?QyDw_9_1xK{aVJo9`eBCqtRmt;n0ItxUG&6s)rgx`5MeJ!Dtu*gDq}_MqlmWWt6mX>dD>=kT>eO$d zCH!rzjC(uEw~PNXiHM-O{Gdc5;1@69)*qfh=}9*3SABY|2OUA1RO2zywceS)BB!Cj zwiL4!1Bp^xE+F!y%4R|x3RJLd*I>Q%Tvx0sV!?6hfncA9s_kzMSFc=guOV)*l^~jl z%Db^`kFf-?BNwt%K9pp-OVY^g`{0))mVnELBW~yC?h65!>w+Wd3roo>T^3j1LpS?7 z$PB54gE`2W?9IpiU-u$9%;dd}4T+SZ2J1QvMl!JQh+H8I5$mF;MuuHxc+6%QeWTVA zgvxg0u7zuaBoEM140qu~T5Urr+ch$`B3!P}DHUgcX4Kk^77pbM-O0~nqGnG@{TFS` zsDjW=6ov}zb9{IuUgkIo&etNfzU;_i|J4OPR!T&8{NftFBdjzvlj-mb;;dgkP3&%O z!NmzfSW7&mB>l0DH78~6=g>;?=X*zoMlvn)M?wZK;Lq}liZAIw<=YAqSDzd1V&u=) zw%Z=ntUo(2MgaS`YV(#v+WUqtcvgL7@qQDVW16CYy;1BIt`kPWSXY{>1MsV-O2Ck{ zfFh&vvY#|reN6}}lNU6ml?EuHL8|_MPslJ-L;||SCOV-ss%CDf8$s)uLAP@+nq2tP zP3c+X2()sEHRq%WQ7M6ELa3o|ZvtPVr=)#93Yy|=C4KRTFpgF`sN2Qt?X^{<&$4D) zZh!AUC>Bp=KQn(imTi43R1j|P{Ea8Ojck|(_afNba&cgEyOQx(qvN$`epxZo%fB(( zjYu}b>6X1dQWdZk5&zK)mbfc}&eKDea<>a(b`iKq~HM=%0v z1d#Zd5!*k^+AiYyM_y43wx*M@ zTl=oLLRJ#0EpvOEK+8}Axfm7Y4*WGXTcH6s1h=^RG+sh(#yBk=`K8 zBl0^L-CN$BREr6qp^6on)NQw=UQUDpzkcB1p&DYv-{08uGTNWKS4NdT`RA*a6GXHO zG&oz5BXsD=FZ%nh+wM`9xN%?fQs`s2|I^n`)&$!Fq4ugZuU`0e?3|{rVMrzJb%Haz z$Tt~Wf)oIqpU*Qb(?fIJ+r{G7^5?AOSwgjqckht(bm(2WbcpKq%(m~$ktoksHElJ= zAIH0rH>o`BQM`~F}^6T|9VYrFF$4g>Omxf)rlc!WYGwlm^VWIo*rxChMI`yhX z)9jwV?nW7k-5~~?w^on0*!)WMR+py?4WdN|kH@P*57$S-CiE!FeA-YQ)~IJX(Erei zRdPtvvf;&W@C}Y^wyIv{?ddQ@>FjvTUI ze;R#tpKrCl?C#_Vj?7EU@?7wv(LpvM^j-`@0`F&)l^yE0*0jl^|K3y>b)=!*XkexuMOc#53!3DcsLWL4$(T0Y-+xE#p z)|)dCvwUUH_`X1rz-n!jp#!oSb#qvc~VH6XVh3R{jPMm_3n{CXi0lqUeb)mGEpEfcl$`-$8S4z$Z%Z7<&XZU0R_MB z^$J#6IGfcVp&ZP6o>tKZ*8S?26 zdv{0W@$<7Svdh(Sj~(wd+J=G*&fZfm?zZ{O`(~jrq?=5c>Q+BH6>yg|65fq;j6P`? zR+nz>I~B#f4vYAXudvIlUb~mCb#6YKr{ItXsS?blaQwkmd}x{I>GQtbkgoDW$gM&y0j3!?k65O#n(Ex*w}Wl zc7Mmy`co0*<1OJz2yZ5G4w2cOA7SS#ya+4}OmxZw<*H5wEINXd=wfxKztnab9;oSwqozv}0$-^I&GJ zs@WQpO{)Wmd2qcrxBBUBPBH#r^Xmt2ND^mH0s)5^^~rrj)!f_bSyxjkMeBWi_P-ix zg?e}b#dlwbKg`sgue=7_E~vV|SG1k)O&ldZ$+tb4LG;PpW`Mt{;f~y$zuwL`Rti#^ zdgNs$BEBM!l#X7FfUi3|C?{ccYa{Z58I&i6->NJgGxq6r%rAN_J=>~oa+N21FfAue zsS0ny4DD9iPM%Bpd2-!c^kxtwZup1%zpnbq;He2Wk40f&C@&I=NJHuwP7k8g9kb?{ zt5_w7civT|GY`jPLtVHWCVD!*5zQCo@7JR>WxUKRH_CS{&%ef$cirLCdL5N(QB#~# zYu+&Fji}w+vFd6xr9TI31br{=L7~gU%;Uzc!c?E*PM)81&@@S_t2;WQ-CvKK!mtYN zt*NTu&c`NY;d8j&8^l<7P6d(pcncP^ld)8fPS=uoooDY-{Q!O5*T77@NnrZMJte{1 zo)Vq3ChXL)lT@zBE-?79MYDR-|6?z9hLccnk&K{2^~1{=l%BVKrBjlc^X971+&duC z&Fr||^dSqS_#cn!>(KqOdS|&|^C+81#Cgd#7fbCsVnIHuCJZhVmq=6R^3EcXzq-B-o@}0fn}u^7UOr2Q^`!XgLVNh0p0#MgOL(2r?EK?^oOh2a0`< zEpN8muK{!8UR^-omM(|_!H)`%Yv+?uYbi3m%?MT+fXVY;B z0JH3dlSH*4sPnD6d&Py_)iFbRIab*LRTABc`yJKZ&b`{-zo9j8GY+YD;oTx}>shYH z6@8*66%vhHG%kFLnMiWC{oTD^0>D=sM!()s zEJ?(T_#0@baXqvTmexd0)_-cDeeO2P&_d@X507PWQyTYkzFoe5+lRU8e~6l=9Y=hG z5P(<|^t8ETse7|pEGAy?@1$AA7`;+W62mK0aT&QJ;#dtY=dDGGSVl`u+yHs)w9i^3 zWL;iUdSE$UUBa8Gk0sr|m3+9r^VBKnu{m|1C9gc(-rkN;*&hcCfm-i^rPR8~`?r3< zW0-E~IoVx<+;7j{S{pso`x)AN$oPY=gF`r*XmNUfodEQ%OgxxOM5U!Ma~s z*0I|EzCtSmPVw~tU`k6qEU#3x-cd8BWo5V0yq^jlOYo_r8BG)hW|N3WSQ$x>ry zs%&|DX(|>juA5LAQh}rZGX9n2YGP&U*tbuc_$fgor(F!8K`%qo%Yl0>;i4VYrk|Qe zqZ}eJMRCUWg9t}^nGoYb4Ytk!wuDA2N;GowNsTO%1`y))SMzF9I~2qi z{)+_Ea6P>Aw%;N=XC;B6z3KPRg{r_h-K`B)3HEnQpF)E3e3Q}rzL(4n#dIHB$x`#K z!LED1^JB7Fzt+KXec#|n7iSK7HA&Ilrg}U^W4I@Vx@v&oa~;|1+@0Q|{hF%BRmF6r zYT*}1MzrGL?iqXk*9yB%7?(!ZX2F%RCI<0=keE*5C*l+L9U$%&dTCnHLCp8^H2J3{ zz`O;HD;I;oNh@An1I`aO&P;gH)hYX4r*0B+dZm0*43$>dl zFZDgn+{vf{Ey>V>webjY!D9GHMn2JwM$D zB6XgNE-my_oc}0F{t;AUYF~Z0?0y?qLU}Pt>6ElF+uGbyem+3zqab8>cW=pz( zFrH|26;;io)h{?=2qNmP;~J0GTdCfpnci|#sk2C@yHbe~- zxhZy%M69ICb-+nVJ-ut4{kt2i0wzS|wYV+>67ZzPR7+n1d_rx32;YfT-SN(~8a5fX zw)#i#kf{Y)6x)#J_H~ZZa9&N#FU4F)M>cCjfq8#Uv^CHFVF5O^gay`5{-hyK3|AWd zc=jm=ihA|@o&xUZ{+^26JMqPiKEXBHpHMH~*PF_I?mNdk5!+*jyP9~wG*UuP==mv0 z|Bb}4^0Uxqi~5J!hUSjH0AtofO9LM9_Y*9(njN0=EN%ohlZx#$Ml!v3dSAoQH^q$? z4C7u$49|q20Z?coI7}weLP4Gap7J?j+)Rvw=8Giui_ZnMfzi6*Ypk-b&K3bwszB24NI4IV5sQ z<=}8N85C9u1QbR{c5fdSeG%$S0@YKG;ma<8*za2$e@12ptzGsTE+f>ILHc0J(wY=@ zk{^n|wKdt~u6sE=k{_JAuKBr8EL-{QIM6;KQHZU;h}T5aQVC(--JSPr#F(Lj&DRN) zU8n0Z6w@>;TsqgGQQq@x4TvmOyPtzjbBW0dt3273fRT%X-E{GDu7G>aivPA`2N(HC1Up%ah+TY;XQX?Hmmc~*v%{82A=s)C1O5vNj|xA%|>T4aoAMl zO@99x$p4*yBUpv671tqpbCiOcU<(oc3j${*gs0vlY#wcOenbb!$#2o|G^(xbUTd~* ziNea|9M_)6?Sf_(qdz`B8z&BWm^l0%sWCHfQ{?k1c?4BU_u_5O@HH-XB8}-w)8v=F zO*Sg%g10YUfPGuZp{%&G0xmyZz8~CseR)f)*7G<<)F<+0f1iQDUj`a|rU;Z-v57>e z^|gNsS(8baA~guK;p6ZZg%CRE2#63r_|U<(sBf8!nrS2bdk^1sd;Kl&;`yY9%Co}n zpj`2&*gf847y;#N6H*omH24Y(;KRXgeDy+wMQ_OHfNdJ@d7J7aJ`DKJi>m~OJ*-g) zc~l6Rnb5{N?d-KOqV3m!ei}oq`65xY9MSqyyp0NoffuMq22uqfVR!Cu2qq+n& zuiujx7jp{{WlJiGXcYtr->&2^%AK63`Ei;;Y%e`LzZTQ?vR1)kg5`Fm5>g&!uxFga zt9{37$u2L+MB6%Mv)7ac*nL=`;IUF*@4cpGJn+(opQ(0$>9J8}YZ)+4lexdF0b|tW zzV203y`6hHTycD6Yrr;2bqvftrzn_dCD6vps=AX=0u}(empbJjQ!f#QgD%KkU^OJ; z%c0*Iw20TS*%rqi5`KDB?744d!B{I#xp}?+ z7TybR*d3TFA29E0WWH=7Zma{(48CjL-)Un!)wMg^e%lg~;5LO5M)|&kBisKkkozp< z?fP^+JIh_{RkE+!Rk_FVaO08kYX$?89xg%PX6DxGRZ_c9vAvQb+?v7{6%2022a!Cs z1qESd?AKG6AM%fGowGd${=3P!-fcaINHCh4^QQEKi4ldPU6<=x+ zAF$-^-D_W`>Jj#Cm>3W?q4>1Nau#?3N_^IP9%HAzIbEEsg$yBKPXeTCL`d&Yp`%lA z-EzJMmOc`Y{T$)oqs^I4vpzGb1Cr#B;$g22ynCv^8soA2oE&?c@=uJf15K^eI>kMA zpD*b{SQJryi0L-&{nNm=ZqTbQyBcL!artOv!lQ_}l%TZ#Lp5kV&LX;A>N;g&NlQ-hkkN*M3hIACkVZ&q96yDgMo#h}(*F zi^;#RbUwrM?V(9O4l3TWfjRsqga%p27>bfvBGx!gQ0-iBE@m*UBRJ>Hrpe-v6m%7^ z?So$D*uEcOhZI$AxJo|n_fjm)%f4^s;@CQydPI7trM6JxLlTAIio1PUB9IbD#(zdR z9y8px;#FbpAR+Ah0AdwNX=*D9+8?NC{H0NY^omx;;uaJCS>oFDIRzk8pL>5Q(9uWD zq!;Tu^p{9`^C7YhsW|CjZ~2zDTZC$+r%t})&o?6~E^E2tsQVra2A+XC^^?WgfYT8z z42X%{GUBDmv_bZ&=H7#B!eX7hKa-QSef~jl!w} zTVz|GgsJIi+maa&4po~X(5Mrpoy!fyyt!@QxOm7wii(0tiOo;k)%B zNHl>Xa~IaU%QaIMk)mQhq)?f?AmOr{JpR3)erugO{jGWaxJoF3O_lzyS3VfGLA#}3 z%f=`b0r8ul;V%E0ZFVA}yfV8VE@HEi)~-7!V%DeH2V|Dbhre&!+e(_Phz8r|xl;!F>ubZ_-kOHZmM zdA2g!6<|6uvfu0feeL_5Y1@yxA8NJ27RWE~OWHrU_X*;u1icXOZ|vASu@RR{*&$vo zUM!ZQ}-TnFa4k zDLdO$Q1I+h4HE@MwoXlX7Sd;qBfW;s9j{q8a#0hxpgqy9d}j&?M&N6es#WvX%K#b} zhWVya3d3du{SgSs2seNRcR%W;_B8p2z#^}q;e=AGQVHCqQpi~fUAgOz(& ze@J*X&+~B~0DHc_=rR|xeI?@PJcDiMB{T^6t>EdReZ;u-pxq7H^bTY94u*STZN5^1 z_2g)91!;zpzg4-@W6%Jf4$7Jg4a%Up}9a8XxrbM>w>nG=rNP?*QB$ z{>!beDUZeQ03P(vtkW5}ph;T{%7F92`Ux)H8oSJruOGx!?fDR~wri01XT54*(91EM z$~56zx4t-a<{Lvmb92y$?gf3+i0-sw#k12Pvq7Kw7ltJeEBXfPHpez!cc`xTC8y4K ztaQZSSAg{6PBWmt6QDbY-kCxnXsj-KAL+F>De(wkvv_NP8I=6(&uA?jML61nLu+V;Kp z;Uw!}_{1-9e@#v_*D?K8ARH{>tKorzBJZ&^fYVPo#fio!IXE~-j!h-3HP7{k>z#RG z2CXeyGOnt$)pr?5HGrpYI9+FP%k*2!eKcB6NEfgl%DX=nXoHpC_0dn5mEXFw8{{Oq z2Z2*gf*dGYySoDB(7dmfQgJeGegTlXLyTQWK2oEj&?H3#(+G$eb_T5B=p0+dIS_s( zCU$?q07=tkTi}yw$JfApd!1fhKxvpS?y%d!)yAq6PZWh_zrZVC|11qW^=8oo3l#Jp zUVNw*j=`*@47uzXkLn?<@i~3r8}6zz8I@RhF9gGe9=pQ4+>@=kdF$@=#7ZZoKu~Zr zDKFy47L|P!Bz`QjdTqI+9d|vy@E#a9jOp0YXda@>3bX>i2TM|?HX$9xAUXU&%#UZ| zmVG^mRPDq3ymmX-T==TX7X6dr>x%P*84@NNYSrRnX+Ye|_HQXw>fI#+-+TLv23Y8X z_cIo)3$Yi60GbC&aHJ{pK__DgS!}eCt%2{bw|PoT)%7!a_|~T+fpw!& zSxo1?Abh0x1B;Wprzh#kVo?eXBegt$)r=m8g^q`hxc_UJsz$)OCv~w(rcLk)Lzsav zDsPx_-eH#EIl8Yb?4=g1zwiqDD_a)s1#xFI3zmXXaHKf^Q`?z)!zJx_zS{7vZ^V?- z?_h@&#Cq5Jz6^#V4GL9EWxTuEQi5G^wAY_f44!zi69e|IL*Yc?Iq6vieQMQx7|_|8 zn_<^D?c2kBF6J{I4d!UD28t>0jL)E}DnL7izgI{bQs}}MTxqinvAQYaLjMHhePd4YkfJ;(R=#+8^F3~O zyWU4NUbj)NH`y*kMFYDoNF;t+L}m&np0beYM3q4{e?WqNs8kk@gI`2fW=y>Ij|2b zvyS$3#`3{Gpm9T%BqW>A6@c1*L>ffX*cEP|&TF24y5)#DL-KQq5gJsDZMQ#m&Tj4B z-EvpO?h`){z;IB7V)W3D%X)B^fhXo&F(-19{H*J9PfX1caRzk>HmW_78!PLioAa7_23CNt;G{ovAd*ykGchQy22Z-Jrb!2Nhk!N z#N}l3lAAE4jbt9w;PeRjYE<|<|Ne<eiF(&tn+Iel z41f@U&}cgC)_F+fcdr~P;LwAsTXEmJtW`+fCtOfdI#QEt1OVyIuSFUoC;v*yEuj7 zjR(3ia!XJ*Hu^+K+3I>9W-6@~hVy!(G)A!av$%*#D19AiO*i1;Adj7bzsBWVzW__UOo2UZX_=_wDTFkz9 zIEemY(wDvA2@2iFSn$=4l~Lh#-tfYEAB7wqk`=(c7u=nt0Wo}-2iWKKl+r5&_RUPm@~VRs*zr*E z5gYctitES3>xrSxE3Y*A3)^$Tqz{JWF>U_+i*3nX#l?DLkoG3b&J3n{^<9n?igsP-?N zMDz5VZu5M$N=O^hbr8I%Y`EX1^rco#$|SOdx5=&e>vGwI^~mo`I)!U)*EEGs*34CjB8=%t z&MffKC>X#4pY7L-<|_Wd9seudvC(4pc|`NTu^m*+*S|=^QI$8!{B`j%OJ&ZYR(5t~ z=C-hE=rO*yk%-t*iQ$ZyCmh~ayu&eV)6vp106wy;XGnfXA`4)Dg{!Ki&)nQEBP7Gg zB{G>J1_`X8EH4gT%i`-0ICr#n(8na_s#IE-$g@K0+2U>rB|NSn%S5V+Fv%Erx&XxB zQ^IRj>${zFYHM@e1`O|=55Ay2*yXdM-67fLq5#RphJ%#Cz1VK3#iQ}UDmLrmj6Jmo zv7`UC7$BoZy`-?}Jq)2GPRI{WzKjO@qr63EpmcnG`4`$R!S81#c5^gm-pinLA5sFXc{AN7MVd8#)5TSsZIEtoyZ2Pcry9vj`#I4Oh2$#@LU6^< zg^6&l>OfTo2ewAqMxt<}6F7d=Yp`IyzmtnC7^-_8;H+^!5KR1Xh=_V3LN7U_RJ)!! zZvGl*w}u$E--C!Z9{nV&dRI`Q#3bm-*Inx8AP>w27tF}4BmY)kXGL3nSCL7V{t;{Z zDv3}}&pfvtKOl@Z`-veqaDfM@Mu;n1)%SaZ zoah|#`bXwt3CqdXSuw^hWYTEQ!I1(yIjFqumFKF;B)+HhwZ-FDtobqJz7^Ef$FcZg ztFuj{eo}Kc)Vd7!hD*mE7fvwxYR1_s4aMF@=Fdt!&#$nhk@Rsk*X(76Mj8&a8a#TTq|ClKw6*|S5-O5>rjfOD`o`*J(r@$GvdtCi z2ZqkMt3`kDG_v1oE}oE4JQ?!i#!{cwyC0VpZzh8O)%Qn$2K5E0%-H2u%rEZ_+`=;J zVmL!6(&Op_Mehvvj(;_x(~LDx1r7!GH#a0>9_-i}O#5Dh^onn0@sswN@p$Qvjf;k~ z5XYgoB%5I>-q4U-F|y8d$>Z*bQ3|XszKmy(R6Q8~EAzG=y1qZ;_R^r6y+pbJ4PSgw z&0SGmP)Z=oQzbiL{4+2%Pe{^z{y zY`XpiSPWNr>67-uzl@IjMTraZ_dU+S1Bgf_l<_%w(K1&)pCLND%I#KqM2>{ap&rp}QBfnP=$l@LL1LMSGd3>tQX zM?ktyxX}!0OOSJn5bLcY`s0c)YzNYhQQEy8RXX)G`-cvlhSlHKF%kQ_dALBpd=N+- zFtqBf-Q`T6?go@Uc4lH@lbVVu`B9rj-UP69z4d*${e-NP`VoDahukoGqH*DS52pu- zV)>GmM`TjH!q9d~<>N(XYZ9Rj5NrzfOJ(SE{r45F-&Q1G_@cJNjR zi=1Mpd`k7xMo80{ztwI7^)k^5B1Tv)YFcrx!6dLJu(ZiRsT>H}Z`(;Q=0=*lPoPE7 z)=^I8L7_ZaJt;(0Jm7!qHTgiF)wjI|4!qS0xC?ld@kFx;_V;>Q8esNt4W_W18*RJ} z&z$%e<-PT>7bH}mh`gfdL6H&al9$SOJ4ASU8@;R^(yp8{n$V|`($6o@n^bIV7MfKF z$rz;YCj=4S*wOO>YRe=9v!2GL4)VgWDYU=}kW-P-C+rNysAU4ZDL!8M+`^WRE1pVp z@5d8*D@ZFmT5HNbcr^IT6c0YLpy?|002Rq|p`F$E~Tsx8!x7ObI9ckTLHp#itXkMn6B zmIy#g6TXrplF14lizELBClX|a?EZbfjbwVAeApYFc-LTq8#@W6O9CC5;?zfL z1D@)|j@E$hy8f)x{7|Jamw+LR7PJ$WIzUvhwFM%m-TyRPK1cMQNOCfWWYqhrpx4NY zKnZyK%0NH~Tc2@svbmOO*V-A*vh+xiLAgxw3F2 z3XUnSWs0z^3@IX@gbSyX-|IQrGb9FBZqJ*Sq=ve-mcX0$pYI7AQgw?(glcL1pzju2 zJTcoZA|uBZtFhLd0BcF>V=l2!`d1fP-EVV;>WWjGPp&tZo0spcY(GzxYd&IS3A*{y z#DDd~M%dn+RTKEL**IC^hr60CAR;YOX>(-rPg0E zMhX3PcY~z)+c&K`v%A{LKWif4XV=eP^i@toI25}L+vNxbtv^lMM#ZO{ z!CuS%EH}bV@JZ1225`bb9bT)moxuJjgg42yozPfv$D{4-?y4fwFR?@Yxe-gJybVTX z3Y2Dg9EJ9{lG09USgecNa>{y-5bi)RRYS`_bD8Sw{AaHo2;(P&VMz}4IUMW=Trdd@ z!Ovb)>lK{nV4>pI9k8YT;F-efNH|yya&1g7`JMWkyzCu>t`Wz{gg;9Oy{xSGR_)4Z zh_mTrt+VRTj!ku~cGXd8mP>j{(6!2_rODsu-w@7Zn}=(Ya{W)}>wR*$O^q!VsjG0@ zO0D@=U8aVMrK{t9fqk>XyRw&nq5_(~euDN=@H>h^9wijesl$RE z{m68kjmxG~2JGhYE)@2k3q{YTOr3DncAuOw2?*39C`HKr%|dEgClWHL8*@Z_Vl>SK zcq6udPSQFR?+T#sIi7V)OML)8VgHSrg;Ae z)v)ZCc_noGWO*6K!*BNaxo~;zpGU?3QpPC#FiWGp(Qbk_X~Jb#*sFB>MiX@N!%FM( zne9mP>X`%E<2+!(VYXa8s$YLw(RyO<=b!gXtIp!#?laWBCqMsYdgR<7ywd*1=sC^W z(?X~a{GT;69%l0cUIrE5;4qNoq$JelHlE-+FPuX`lTJXp&K8^74%-!2Iu&d@8U$iw zco<~YH1ki2)W%0xTwLIgbyAhRo>k#*2zJ;f7Mtz1!!gm-MURIy*)|ehS_G*Le0p&p zG;*sX8bA12*2rr2=BkZbAq*EBaXsL>(&yggEkB&R)F4fK(NUsjaJI!o8J z+Z}p;#}z2MVbO{siWT;PBQhwrEl0~F1}zshroZZt>J9DeWQ#4wKJc77Kwy6!^DgFur zT2(N3aoH;^wz+S{D|a=|zWdKO6qr1(C6XrP5JfEz%!}r95e<&|>rFnVep;B=dq{Z* zi^+Z%+^Za;f~K}hrF?`5)RX}xP|kNHV|c;W61lE&>$QXQ^n}Ic?(Y$onz$z6aaMVC zJ?8;J)C&c!@8M~G1tNZhTstcKk%dVH7algJ3yeTEH7)c<7bB1kN-EX z06vU&Qc~XkW%R!SLHMsg{(D0H`^o%Qhx}Km{;$#aua)_K$?U#WcM2B6!@-G@?5*>X z-8rklp)sQbW>`rD!NDUS)&+e5n;{^g;?jt3DEH*O+2`ZIT2XQTB4CRoqQP2&;DW{A z!=cTQGXK+w27~`bfdSSE>jg!mcv@#5!~363fDH(D+J9P6aUbxV4*oxwfFoI}`?Gt~ SyI45bPfl7%s!Gxb`2PSqU2_Kj literal 0 HcmV?d00001 diff --git a/CountryData.Standard.sln b/CountryData.Standard.sln index b0b2987..74fb78d 100644 --- a/CountryData.Standard.sln +++ b/CountryData.Standard.sln @@ -31,10 +31,10 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "doc", "doc", "{131F8946-782 EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Assets", "Assets", "{3803AB02-5C70-4523-AA4E-8BEE9AD6D592}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CountryData.Sample.Web.API", "sample\CountryData.Sample.Web.API\CountryData.Sample.Web.API.csproj", "{787E809D-2E54-47F0-A5CB-8C0D383D327E}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CountryData.Sample.MAUI", "sample\CountryData.Sample.MAUI\CountryData.Sample.MAUI\CountryData.Sample.MAUI.csproj", "{2EBA3AC1-C3FE-47B0-8606-917BA212E6AB}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CountryData.Sample.Web.API", "sample\CountryData.Sample.Web.API\CountryData.Sample.Web.API.csproj", "{A77E8CA8-11B9-41B4-A00C-46BD55756CF5}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -53,16 +53,16 @@ Global {397666FE-700B-446E-B4EC-13ACF0DDDEBE}.Debug|Any CPU.Build.0 = Debug|Any CPU {397666FE-700B-446E-B4EC-13ACF0DDDEBE}.Release|Any CPU.ActiveCfg = Release|Any CPU {397666FE-700B-446E-B4EC-13ACF0DDDEBE}.Release|Any CPU.Build.0 = Release|Any CPU - {787E809D-2E54-47F0-A5CB-8C0D383D327E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {787E809D-2E54-47F0-A5CB-8C0D383D327E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {787E809D-2E54-47F0-A5CB-8C0D383D327E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {787E809D-2E54-47F0-A5CB-8C0D383D327E}.Release|Any CPU.Build.0 = Release|Any CPU {2EBA3AC1-C3FE-47B0-8606-917BA212E6AB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {2EBA3AC1-C3FE-47B0-8606-917BA212E6AB}.Debug|Any CPU.Build.0 = Debug|Any CPU {2EBA3AC1-C3FE-47B0-8606-917BA212E6AB}.Debug|Any CPU.Deploy.0 = Debug|Any CPU {2EBA3AC1-C3FE-47B0-8606-917BA212E6AB}.Release|Any CPU.ActiveCfg = Release|Any CPU {2EBA3AC1-C3FE-47B0-8606-917BA212E6AB}.Release|Any CPU.Build.0 = Release|Any CPU {2EBA3AC1-C3FE-47B0-8606-917BA212E6AB}.Release|Any CPU.Deploy.0 = Release|Any CPU + {A77E8CA8-11B9-41B4-A00C-46BD55756CF5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A77E8CA8-11B9-41B4-A00C-46BD55756CF5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A77E8CA8-11B9-41B4-A00C-46BD55756CF5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A77E8CA8-11B9-41B4-A00C-46BD55756CF5}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -71,8 +71,8 @@ Global {BFFCBBCD-4DD4-4EBE-8282-A4694E6A0ECA} = {EBEF4582-3E32-4FBA-92CA-335DD47C2B4B} {A450767F-7970-4A30-834E-3E086B87D925} = {420B8450-0A31-431D-90B0-A5C9C7B314C9} {397666FE-700B-446E-B4EC-13ACF0DDDEBE} = {BBA69DE8-BE26-498E-9A62-131EB2494972} - {787E809D-2E54-47F0-A5CB-8C0D383D327E} = {BBA69DE8-BE26-498E-9A62-131EB2494972} {2EBA3AC1-C3FE-47B0-8606-917BA212E6AB} = {BBA69DE8-BE26-498E-9A62-131EB2494972} + {A77E8CA8-11B9-41B4-A00C-46BD55756CF5} = {BBA69DE8-BE26-498E-9A62-131EB2494972} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {CD61C5EF-9299-42A8-81E2-D96FAF1BC81D} diff --git a/README.md b/README.md index cf8306b..43b8bce 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ -# :earth_africa: CountryData.Net -[![Gitter](https://badges.gitter.im/CountryDataDotnet/community.svg)](https://gitter.im/CountryDataDotnet/community?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) -A simple cross-platform offline .NET library for getting Global Country Data without making any HTTP calls. + + +![Logo](./Assets/CountryData.Net.Logo.png) | | | @@ -42,6 +42,24 @@ For more detailed instructions and comprehensive information about the library, + +### Methods and Descriptions + +The CountryData.Standard library provides a set of methods that allow you to retrieve country data, flags, regions, and phone codes. The following table lists the available methods and their descriptions. + +| Method | Description | +|--------|-------------| +| [`GetCountryData()`](./docs/README.md) | Returns all country data including region, short code, and country name. | +| [`GetCountryByCode(string shortCode)`](./docs/README.md) | Returns a single country's data by its short code. | +| [`GetCountryEmojiFlag(string shortCode)`](./docs/README.md) | Gets the flag of the country, represented as an emoji, by the country's short code. | +| [`GetRegionByCountryCode(string shortCode)`](./docs/README.md) | Selects and returns a list of regions for a particular country identified by its short code. | +| [`GetCountries()`](./docs/README.md) | Gets the list of all country names. | +| [`GetPhoneCodeByCountryShortCode(string shortCode)`](./docs/README.md) | Returns a single country's phone code by its short code. | +| [`GetCountryByPhoneCode(string phoneCode)`](./docs/README.md) | Returns country data for the country associated with the specified phone code. | +| [`GetCurrencyCodesByCountryCode(string shortCode)`](./docs/README.md) | Returns a list of currency codes for a specific country identified by its short code. | +| [`GetCountryByCurrencyCode(string currencyCode)`](./docs/README.md) | Returns a list of countries that use the specified currency code. | + + ### Initialize the Country data object ```cSharp @@ -90,24 +108,6 @@ Console.WriteLine(CountryName); ``` - - -### Methods and Descriptions - -The CountryData.Standard library provides a set of methods that allow you to retrieve country data, flags, regions, and phone codes. The following table lists the available methods and their descriptions. - -| Method | Description | -|--------|-------------| -| [`GetCountryData()`](./docs/README.md) | Returns all country data including region, short code, and country name. | -| [`GetCountryByCode(string shortCode)`](./docs/README.md) | Returns a single country's data by its short code. | -| [`GetCountryEmojiFlag(string shortCode)`](./docs/README.md) | Gets the flag of the country, represented as an emoji, by the country's short code. | -| [`GetRegionByCountryCode(string ShortCode)`](./docs/README.md) | Selects and returns a list of regions for a particular country identified by its short code. | -| [`GetCountries()`](./docs/README.md) | Gets the list of all country names. | -| [`GetPhoneCodeByCountryShortCode(string shortCode)`](./docs/README.md) | Returns a single country's phone code by its short code. | -| [`GetCountryByPhoneCode(string phoneCode)`](./docs/README.md) | Returns country data for the country associated with the specified phone code. | - - - ### ISO-3166-1 country codes For a list of supported ISO-3166-1 country codes, PhoneCode, Flags, ISO and , Unicode please refer to the [Country Details](./CountryData/CountryDetails.md) file. @@ -129,7 +129,6 @@ We are committed to fostering a welcoming and respectful community for everyone. * Country ShortCode Enums - ### License This project is licensed under the terms of the [LICENSE](LICENSE). diff --git a/docs/README.md b/docs/README.md index 0288689..13bd54c 100644 --- a/docs/README.md +++ b/docs/README.md @@ -159,4 +159,30 @@ Country GetCountryByPhoneCode(string phoneCode); This method is particularly useful when you have a phone code and need to retrieve the corresponding country's information. Simply pass the phone code as a string argument, and the method will return a `Country` object filled with relevant data. +### GetCurrencyCodesByCountryCode(string shortCode) + +The `GetCurrencyCodesByCountryCode()` method is designed to fetch the currency codes used in a specific country using its ISO 3166-1 alpha-2 code. This method returns a `List`, with each string representing a distinct currency code used in the specified country. + +Here's the method signature in C#: + +```csharp + +List GetCurrencyCodesByCountryCode(string shortCode); +``` + +This method is particularly useful for applications that need to display or analyze currency data within a specific country. Simply pass the country + +### GetCountryByCurrencyCode(string currencyCode) + +The `GetCountryByCurrencyCode()` method is designed to fetch detailed data for a specific country using its currency code. This method returns a `Country` object, providing a wealth of information about the country, including its name, region, flag, and ISO code. + +Here's the method signature in C#: + +```csharp + +Country GetCountryByCurrencyCode(string currencyCode); +``` + +This method is particularly useful when you have a currency code and need to retrieve the corresponding country's information. Simply pass the currency code as a string argument, and the method will return a `Country` object filled with relevant data. + diff --git a/sample/CountryData.Sample.Console/Program.cs b/sample/CountryData.Sample.Console/Program.cs index ee16da7..d082a2d 100644 --- a/sample/CountryData.Sample.Console/Program.cs +++ b/sample/CountryData.Sample.Console/Program.cs @@ -24,12 +24,14 @@ public static void Main() GetCountryFlag("US"); GetPhoneCodeByCountryShortCode("AF"); GetCountryByPhoneCode("+233"); + GetCurrencyCodesByCountryCode("US"); + GetCountryByCurrencyCode("GHS"); } /// /// Retrieves a list of all countries and prints them to the console. /// - static void GetCountries() + private static void GetCountries() { var countries = _helper.GetCountries(); Console.WriteLine("Countries:"); @@ -43,7 +45,7 @@ static void GetCountries() /// Retrieves the data for a given country code and prints it to the console. /// /// The ISO country code. - static void GetCountryByCode(string countryCode) + private static void GetCountryByCode(string countryCode) { var country = _helper.GetCountryByCode(countryCode); Console.WriteLine($"Country data for {countryCode}:"); @@ -53,7 +55,7 @@ static void GetCountryByCode(string countryCode) /// /// Retrieves comprehensive data for all countries and prints it to the console. /// - static void GetCountryData() + private static void GetCountryData() { var countryData = _helper.GetCountryData(); Console.WriteLine("Country data:"); @@ -67,7 +69,7 @@ static void GetCountryData() /// Retrieves the regions for a given country code and prints them to the console. /// /// The ISO country code. - static void GetRegionsByCountryCode(string countryCode) + private static void GetRegionsByCountryCode(string countryCode) { var regions = _helper.GetRegionByCountryCode(countryCode); Console.WriteLine($"Regions for {countryCode}:"); @@ -81,7 +83,7 @@ static void GetRegionsByCountryCode(string countryCode) /// Retrieves the emoji flag for a given country short code and prints it to the console. /// /// The country short code. - static void GetCountryFlag(string shortCode) + private static void GetCountryFlag(string shortCode) { var flag = _helper.GetCountryEmojiFlag(shortCode); Console.WriteLine($"Flag for {shortCode}:"); @@ -92,7 +94,7 @@ static void GetCountryFlag(string shortCode) /// Retrieves the phone code for a given country short code and prints it to the console. /// /// The country short code. - static void GetPhoneCodeByCountryShortCode(string shortCode) + private static void GetPhoneCodeByCountryShortCode(string shortCode) { var phoneCode = _helper.GetPhoneCodeByCountryShortCode(shortCode); Console.WriteLine($"Phone code for {shortCode}:"); @@ -103,7 +105,7 @@ static void GetPhoneCodeByCountryShortCode(string shortCode) /// Retrieves the country name for a given phone code and prints it to the console. /// /// The phone code. - static void GetCountryByPhoneCode(string phoneCode) + private static void GetCountryByPhoneCode(string phoneCode) { var countries = _helper.GetCountryByPhoneCode(phoneCode); Console.WriteLine($"Country for phone code {phoneCode}:"); @@ -112,5 +114,36 @@ static void GetCountryByPhoneCode(string phoneCode) Console.WriteLine(country.CountryName); } } + + + /// + /// Retrieves and prints the currency codes for a given country code. + /// + /// The short country code to look up currency codes for. + private static void GetCurrencyCodesByCountryCode(string shortCode) + { + var currencyCodes = _helper.GetCurrencyCodesByCountryCode(shortCode); + Console.WriteLine($"Currency codes for {shortCode}:"); + foreach (var currencyCode in currencyCodes) + { + Console.WriteLine(currencyCode.Code); + } + } + + + + /// + /// Retrieves and prints the countries that use a given currency code. + /// + /// The currency code to look up countries for. + private static void GetCountryByCurrencyCode(string currencyCode) + { + var countries = _helper.GetCountryByCurrencyCode(currencyCode); + Console.WriteLine($"Countries for currency code {currencyCode}:"); + foreach (var country in countries) + { + Console.WriteLine(country.CountryName); + } + } } } diff --git a/sample/CountryData.Sample.Web.API/Controllers/CountryController.cs b/sample/CountryData.Sample.Web.API/Controllers/CountryController.cs index b0ecaf5..e3126ac 100644 --- a/sample/CountryData.Sample.Web.API/Controllers/CountryController.cs +++ b/sample/CountryData.Sample.Web.API/Controllers/CountryController.cs @@ -15,9 +15,6 @@ public CountryController(CountryHelper helper) _helper = helper; } - - - /// /// Retrieves a list of all countries. /// @@ -36,7 +33,6 @@ public IActionResult GetCountries() } - /// /// Retrieves the country data for a given country code. /// @@ -105,7 +101,7 @@ public IActionResult GetRegionsByCountryCode([FromQuery] string countryCode) [HttpGet("flag")] [ProducesResponseType(typeof(string), 200)] [ProducesResponseType(404)] - public IActionResult GetCountryEmojiFlag([FromQuery] string countryCode) + public IActionResult GetCountryEmojiFlag([FromQuery] string countryCode) { var flag = _helper.GetCountryEmojiFlag(countryCode); if (flag == null) @@ -153,7 +149,42 @@ public IActionResult GetCountryByPhoneCode([FromQuery] string phoneCode) } + /// + /// Retrieves the currency codes for a given country code. + /// + /// The ISO country code. + /// A list of currency codes for the specified country. If no currency codes are found, a NotFound result is returned. + [HttpGet("currencyCodesByCountryCode")] + [ProducesResponseType(typeof(IEnumerable), 200)] + [ProducesResponseType(404)] + public IActionResult GetCurrencyCodesByCountryCode([FromQuery] string countryCode) + { + var currencyCodes = _helper.GetCurrencyCodesByCountryCode(countryCode); + if (currencyCodes == null) + { + return NotFound(); + } + return Ok(currencyCodes); + } + + /// + /// Retrieves the countries that use a specific currency code. + /// + /// The currency code to search for. + /// A list of countries that use the specified currency code. If no countries are found, a NotFound result is returned. + [HttpGet("countryByCurrencyCode")] + [ProducesResponseType(typeof(IEnumerable), 200)] + [ProducesResponseType(404)] + public IActionResult GetCountryByCurrencyCode([FromQuery] string currencyCode) + { + var countryByCurrencyCode = _helper.GetCountryByCurrencyCode(currencyCode); + if (countryByCurrencyCode == null) + { + return NotFound(); + } + return Ok(countryByCurrencyCode); + } } } \ No newline at end of file diff --git a/sample/CountryData.Sample.Web.API/CountryData.Sample.Web.API.csproj b/sample/CountryData.Sample.Web.API/CountryData.Sample.Web.API.csproj index 24916ee..8633b4c 100644 --- a/sample/CountryData.Sample.Web.API/CountryData.Sample.Web.API.csproj +++ b/sample/CountryData.Sample.Web.API/CountryData.Sample.Web.API.csproj @@ -4,7 +4,6 @@ net8.0 enable enable - true diff --git a/sample/CountryData.Sample.Web.API/CountryData.Sample.Web.API.http b/sample/CountryData.Sample.Web.API/CountryData.Sample.Web.API.http deleted file mode 100644 index e69de29..0000000 diff --git a/sample/CountryData.Sample.Web.API/Program.cs b/sample/CountryData.Sample.Web.API/Program.cs index 85b3201..3487f45 100644 --- a/sample/CountryData.Sample.Web.API/Program.cs +++ b/sample/CountryData.Sample.Web.API/Program.cs @@ -1,14 +1,13 @@ var builder = WebApplication.CreateBuilder(args); // Add services to the container. + builder.Services.AddControllers(); // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); - // Register CountryHelper service builder.Services.AddScoped(); - var app = builder.Build(); // Configure the HTTP request pipeline. @@ -24,5 +23,4 @@ app.MapControllers(); -// Start the application -app.Run(); \ No newline at end of file +app.Run(); diff --git a/src/CountryData.Standard/Country.cs b/src/CountryData.Standard/Country.cs index f7c09da..8cdeece 100644 --- a/src/CountryData.Standard/Country.cs +++ b/src/CountryData.Standard/Country.cs @@ -8,7 +8,9 @@ public class Country public string PhoneCode { get; set; } public string CountryShortCode { get; set; } public string CountryFlag { get; set; } + + public List Currency { get; set; } public List Regions { get; set; } - + } } diff --git a/src/CountryData.Standard/CountryHelper.cs b/src/CountryData.Standard/CountryHelper.cs index 7bb1e49..9fd576b 100644 --- a/src/CountryData.Standard/CountryHelper.cs +++ b/src/CountryData.Standard/CountryHelper.cs @@ -1,4 +1,5 @@ using Newtonsoft.Json; +using System; using System.Collections.Generic; using System.IO; using System.Linq; @@ -113,11 +114,39 @@ public string GetPhoneCodeByCountryShortCode(string shortCode) /// Country public IEnumerable GetCountryByPhoneCode(string phoneCode) { - var Country = _Countries.Where(c => c.PhoneCode == phoneCode); + var Country = _Countries.Where(c => c.PhoneCode == phoneCode); return Country; } + /// + /// Retrieves all currency codes for a given country identified by its short code. + /// + /// The short code of the country. + /// An IEnumerable of Currency objects associated with the specified country. + public IEnumerable GetCurrencyCodesByCountryCode(string shortCode) + { + return _Countries.Where(x => x.CountryShortCode == shortCode) + .SelectMany(c => c.Currency) + .ToList(); + } + + + /// + /// Retrieves a list of countries that use a specific currency code. + /// + /// The currency code to search for. + /// An IEnumerable of Country objects that use the specified currency code. + /// Thrown when the country data is not initialized. + public IEnumerable GetCountryByCurrencyCode(string currencyCode) + { + if (_Countries == null) + { + throw new InvalidOperationException("Country data is not initialized."); + } + + return _Countries.Where(c => c.Currency != null && c.Currency.Exists(currency => currency.Code == currencyCode)); + } } diff --git a/src/CountryData.Standard/Currency.cs b/src/CountryData.Standard/Currency.cs new file mode 100644 index 0000000..de438c5 --- /dev/null +++ b/src/CountryData.Standard/Currency.cs @@ -0,0 +1,8 @@ +namespace CountryData.Standard +{ + public class Currency + { + public string Code { get; set; } + public string Name { get; set; } + } +} diff --git a/src/CountryData.Standard/data.json b/src/CountryData.Standard/data.json index dd20f4b..1cdd489 100644 --- a/src/CountryData.Standard/data.json +++ b/src/CountryData.Standard/data.json @@ -3,7 +3,14 @@ "countryName": "Afghanistan", "countryShortCode": "AF", "phoneCode": "+93", + "currency": [ + { + "code": "AFN", + "name": "Afghan afghani" + } + ], "regions": [ + { "name": "Badakhshan", "shortCode": "BDS" @@ -146,6 +153,12 @@ "countryName": "Åland Islands", "countryShortCode": "AX", "phoneCode": "+358", + "currency": [ + { + "code": "EUR", + "name": "European euro" + } + ], "regions": [ { "name": "Brändö", @@ -217,8 +230,12 @@ "countryName": "Albania", "countryShortCode": "AL", "phoneCode": "+355", - - + "currency": [ + { + "code": "ALL", + "name": "Albanian lek" + } + ], "regions": [ { "name": "Berat", @@ -274,6 +291,12 @@ "countryName": "Algeria", "countryShortCode": "DZ", "phoneCode": "+213", + "currency": [ + { + "code": "DZD", + "name": "Algerian dinar" + } + ], "regions": [ { "name": "Adrar", @@ -473,6 +496,12 @@ "countryName": "American Samoa", "countryShortCode": "AS", "phoneCode": "+1684", + "currency": [ + { + "code": "United States dollar", + "name": "USD" + } + ], "regions": [ { "name": "Tutuila", @@ -504,6 +533,12 @@ "countryName": "Andorra", "countryShortCode": "AD", "phoneCode": "+376", + "currency": [ + { + "code": "EUR", + "name": "European euro" + } + ], "regions": [ { "name": "Andorra la Vella", @@ -539,6 +574,12 @@ "countryName": "Angola", "countryShortCode": "AO", "phoneCode": "+244", + "currency": [ + { + "code": "AOA", + "name": "Angolan kwanza" + } + ], "regions": [ { "name": "Bengo", @@ -618,6 +659,12 @@ "countryName": "Anguilla", "countryShortCode": "AI", "phoneCode": "+1264", + "currency": [ + { + "code": "XCD", + "name": "East Caribbean dollar" + } + ], "regions": [ { "name": "Anguilla", @@ -724,6 +771,12 @@ "countryName": "Antigua and Barbuda", "countryShortCode": "AG", "phoneCode": "+1268", + "currency": [ + { + "code": "XCD", + "name": "East Caribbean dollar" + } + ], "regions": [ { "name": "Antigua Island", @@ -859,6 +912,12 @@ "countryName": "Argentina", "countryShortCode": "AR", "phoneCode": "+54", + "currency": [ + { + "code": "ARS", + "name": "Argentine peso" + } + ], "regions": [ { "name": "Buenos Aires", @@ -962,6 +1021,12 @@ "countryName": "Armenia", "countryShortCode": "AM", "phoneCode": "+374", + "currency": [ + { + "code": "AMD", + "name": "Armenian dram" + } + ], "regions": [ { "name": "Aragatsotn", @@ -1013,6 +1078,12 @@ "countryName": "Aruba", "countryShortCode": "AW", "phoneCode": "+297", + "currency": [ + { + "code": "AWG", + "name": "Aruban florin" + } + ], "regions": [ { "name": "Aruba", @@ -1024,6 +1095,12 @@ "countryName": "Australia", "countryShortCode": "AU", "phoneCode": "+61", + "currency": [ + { + "code": "AUD", + "name": "Australian dollar" + } + ], "regions": [ { "name": "Australian Capital Territory", @@ -1063,6 +1140,12 @@ "countryName": "Austria", "countryShortCode": "AT", "phoneCode": "+43", + "currency": [ + { + "code": "EUR", + "name": "European euro" + } + ], "regions": [ { "name": "Burgenland", @@ -1106,6 +1189,12 @@ "countryName": "Azerbaijan", "countryShortCode": "AZ", "phoneCode": "+994", + "currency": [ + { + "code": "AZN", + "name": "Azerbaijan manat" + } + ], "regions": [ { "name": "Abşeron", @@ -1381,6 +1470,12 @@ "countryName": "Bahamas", "countryShortCode": "BS", "phoneCode": "+1242", + "currency": [ + { + "code": "BSD", + "name": "Bahamian dollar" + } + ], "regions": [ { "name": "Acklins Island", @@ -1524,6 +1619,12 @@ "countryName": "Bahrain", "countryShortCode": "BH", "phoneCode": "+973", + "currency": [ + { + "code": "BHD", + "name": "Bahraini dinar" + } + ], "regions": [ { "name": "Al Janūbīyah", @@ -1551,6 +1652,12 @@ "countryName": "Bangladesh", "countryShortCode": "BD", "phoneCode": "+880", + "currency": [ + { + "code": "BDT", + "name": "Bangladeshi taka" + } + ], "regions": [ { "name": "Barisal", @@ -1590,6 +1697,12 @@ "countryName": "Barbados", "countryShortCode": "BB", "phoneCode": "+1246", + "currency": [ + { + "code": "BBD", + "name": "Barbadian dollar" + } + ], "regions": [ { "name": "Christ Church", @@ -1641,6 +1754,12 @@ "countryName": "Belarus", "countryShortCode": "BY", "phoneCode": "+375", + "currency": [ + { + "code": "BYN", + "name": "Belarusian ruble" + } + ], "regions": [ { "name": "Brest voblast", @@ -1676,6 +1795,12 @@ "countryName": "Belgium", "countryShortCode": "BE", "phoneCode": "+32", + "currency": [ + { + "code": "EUR", + "name": "European euro" + } + ], "regions": [ { "name": "Brussels", @@ -1695,6 +1820,12 @@ "countryName": "Belize", "countryShortCode": "BZ", "phoneCode": "+501", + "currency": [ + { + "code": "BZD", + "name": "Belize dollar" + } + ], "regions": [ { "name": "Belize District", @@ -1726,6 +1857,12 @@ "countryName": "Benin", "countryShortCode": "BJ", "phoneCode": "+229", + "currency": [ + { + "code": "XOF", + "name": "West African CFA franc" + } + ], "regions": [ { "name": "Alibori", @@ -1781,6 +1918,12 @@ "countryName": "Bermuda", "countryShortCode": "BM", "phoneCode": "+1441", + "currency": [ + { + "code": "BMD", + "name": "Bermudian dollar" + } + ], "regions": [ { "name": "City of Hamilton", @@ -1832,6 +1975,13 @@ "countryName": "Bhutan", "countryShortCode": "BT", "phoneCode": "+975", + "currency": [ + { + "code": "BTN", + "name": "Bhutanese ngultrum" + } + ], + "regions": [ { "name": "Bumthang", @@ -1919,6 +2069,12 @@ "countryName": "Bolivia", "countryShortCode": "BO", "phoneCode": "+591", + "currency": [ + { + "code": "BOB", + "name": "Bolivian boliviano" + } + ], "regions": [ { "name": "Beni", @@ -1963,7 +2119,12 @@ "countryShortCode": "BQ", "phoneCode": "+599", - + "currency": [ + { + "code": "USD", + "name": "United States dollar" + } + ], "regions": [ { "name": "Bonaire", @@ -1983,6 +2144,13 @@ "countryName": "Bosnia and Herzegovina", "countryShortCode": "BA", "phoneCode": "+387", + "currency": [ + { + "code": "BAM", + "name": "Bosnia and Herzegovina convertible mark" + } + ], + "regions": [ { "name": "Brčko Distrikt", @@ -2002,6 +2170,12 @@ "countryName": "Botswana", "countryShortCode": "BW", "phoneCode": "+267", + "currency": [ + { + "code": "BWP", + "name": "Botswana pula" + } + ], "regions": [ { "name": "Central", @@ -2045,7 +2219,12 @@ "countryName": "Bouvet Island", "countryShortCode": "BV", "phoneCode": "+47", - + "currency": [ + { + "code": "", + "name": "" + } + ], "regions": [ { "name": "Bouvet Island", @@ -2057,6 +2236,12 @@ "countryName": "Brazil", "countryShortCode": "BR", "phoneCode": "+55", + "currency": [ + { + "code": "BRL", + "name": "Brazilian real" + } + ], "regions": [ { "name": "Acre", @@ -2172,6 +2357,12 @@ "countryName": "British Indian Ocean Territory", "countryShortCode": "IO", "phoneCode": "+246", + "currency": [ + { + "code": "USD", + "name": "United States dollar" + } + ], "regions": [ { "name": "British Indian Ocean Territory", @@ -2183,6 +2374,12 @@ "countryName": "Brunei Darussalam", "countryShortCode": "BN", "phoneCode": "+673", + "currency": [ + { + "code": "BND", + "name": "Brunei dollar" + } + ], "regions": [ { "name": "Belait", @@ -2206,6 +2403,12 @@ "countryName": "Bulgaria", "countryShortCode": "BG", "phoneCode": "+359", + "currency": [ + { + "code": "BGN", + "name": "Bulgarian lev" + } + ], "regions": [ { "name": "Blagoevgrad", @@ -2325,6 +2528,12 @@ "countryName": "Burkina Faso", "countryShortCode": "BF", "phoneCode": "+226", + "currency": [ + { + "code": "XOF", + "name": "West African CFA franc" + } + ], "regions": [ { "name": "Balé", @@ -2512,6 +2721,12 @@ "countryName": "Burundi", "countryShortCode": "BI", "phoneCode": "+257", + "currency": [ + { + "code": "BIF", + "name": "Burundi franc" + } + ], "regions": [ { "name": "Bubanza", @@ -2587,6 +2802,12 @@ "countryName": "Cambodia", "countryShortCode": "KH", "phoneCode": "+855", + "currency": [ + { + "code": "KHR", + "name": "Cambodian riel" + } + ], "regions": [ { "name": "Baat Dambang", @@ -2694,6 +2915,12 @@ "countryName": "Cameroon", "countryShortCode": "CM", "phoneCode": "+237", + "currency": [ + { + "code": "XAF", + "name": "Central African CFA franc" + } + ], "regions": [ { "name": "Adamaoua", @@ -2741,6 +2968,12 @@ "countryName": "Canada", "countryShortCode": "CA", "phoneCode": "+1", + "currency": [ + { + "code": "CAD", + "name": "Canadian dollar" + } + ], "regions": [ { "name": "Alberta", @@ -2800,6 +3033,12 @@ "countryName": "Cape Verde", "countryShortCode": "CV", "phoneCode": "+238", + "currency": [ + { + "code": "CVE", + "name": "Cape Verdean escudo" + } + ], "regions": [ { "name": "Boa Vista", @@ -2883,6 +3122,12 @@ "countryName": "Cayman Islands", "countryShortCode": "KY", "phoneCode": "+1345", + "currency": [ + { + "code": "KYD", + "name": "Cayman Islands dollar" + } + ], "regions": [ { "name": "Creek" @@ -2914,6 +3159,12 @@ "countryName": "Central African Republic", "countryShortCode": "CF", "phoneCode": "+236", + "currency": [ + { + "code": "XAF", + "name": "Central African CFA franc" + } + ], "regions": [ { "name": "Bamingui-Bangoran", @@ -2989,6 +3240,12 @@ "countryName": "Chad", "countryShortCode": "TD", "phoneCode": "+235", + "currency": [ + { + "code": "XAF", + "name": "Central African CFA franc" + } + ], "regions": [ { "name": "Bahr el Ghazal", @@ -3084,6 +3341,12 @@ "countryName": "Chile", "countryShortCode": "CL", "phoneCode": "+56", + "currency": [ + { + "code": "CLP", + "name": "Chilean peso" + } + ], "regions": [ { "name": "Aisén del General Carlos Ibáñez del Campo", @@ -3159,6 +3422,12 @@ "countryName": "China", "countryShortCode": "CN", "phoneCode": "+86", + "currency": [ + { + "code": "CNY", + "name": "Chinese yuan Renminbi" + } + ], "regions": [ { "name": "Anhui", @@ -3298,6 +3567,13 @@ "countryName": "Christmas Island", "countryShortCode": "CX", "phoneCode": "+61", + "currency": [ + { + "code": "AUD", + "name": "Australian dollar" + } + ], + "regions": [ { "name": "Christmas Island", @@ -3309,6 +3585,12 @@ "countryName": "Cocos (Keeling) Islands", "countryShortCode": "CC", "phoneCode": "+61", + "currency": [ + { + "code": "AUD", + "name": "Australian dollar" + } + ], "regions": [ { "name": "Direction Island", @@ -3340,6 +3622,13 @@ "countryName": "Colombia", "countryShortCode": "CO", "phoneCode": "+57", + + "currency": [ + { + "code": "COP", + "name": "Colombian peso" + } + ], "regions": [ { "name": "Amazonas", @@ -3479,6 +3768,12 @@ "countryName": "Comoros", "countryShortCode": "KM", "phoneCode": "+269", + "currency": [ + { + "code": "KMF", + "name": "Comorian franc" + } + ], "regions": [ { "name": "Andjazîdja", @@ -3498,6 +3793,12 @@ "countryName": "Congo, Republic of the (Brazzaville)", "countryShortCode": "CG", "phoneCode": "+242", + "currency": [ + { + "code": "XAF", + "name": "Central African CFA franc" + } + ], "regions": [ { "name": "Bouenza", @@ -3553,6 +3854,13 @@ "countryName": "Congo, the Democratic Republic of the (Kinshasa)", "countryShortCode": "CD", "phoneCode": "+243", + + "currency": [ + { + "code": "CDF", + "name": "Congolese franc" + } + ], "regions": [ { "name": "Bandundu", @@ -3604,6 +3912,12 @@ "countryName": "Cook Islands", "countryShortCode": "CK", "phoneCode": "+682", + "currency": [ + { + "code": "NZD", + "name": "New Zealand dollar" + } + ], "regions": [ { "name": "Aitutaki" @@ -3647,6 +3961,12 @@ "countryName": "Costa Rica", "countryShortCode": "CR", "phoneCode": "+506", + "currency": [ + { + "code": "CRC", + "name": "Costa Rican colón" + } + ], "regions": [ { "name": "Alajuela", @@ -3682,6 +4002,12 @@ "countryName": "Côte d'Ivoire, Republic of", "countryShortCode": "CI", "phoneCode": "+225", + "currency": [ + { + "code": "XOF", + "name": "West African CFA franc" + } + ], "regions": [ { "name": "Agnéby", @@ -3765,6 +4091,13 @@ "countryName": "Croatia", "countryShortCode": "HR", "phoneCode": "+385", + + "currency": [ + { + "code": "EUR", + "name": "European euro" + } + ], "regions": [ { "name": "Bjelovarsko-Bilogorska Županija", @@ -3856,6 +4189,13 @@ "countryName": "Cuba", "countryShortCode": "CU", "phoneCode": "+53", + + "currency": [ + { + "code": "CUP", + "name": "Cuban peso" + } + ], "regions": [ { "name": "Artemisa", @@ -3926,7 +4266,14 @@ { "countryName": "Curaçao", "countryShortCode": "CW", - "phoneCode": "+599", + "phoneCode": "+599", + "currency": [ + { + "code": "ANG", + "name": "Netherlands Antillean guilder" + } + ], + "regions": [ { "name": "Curaçao", @@ -3938,6 +4285,12 @@ "countryName": "Cyprus", "countryShortCode": "CY", "phoneCode": "+357", + "currency": [ + { + "code": "EUR", + "name": "European euro" + } + ], "regions": [ { "name": "Ammochostos", @@ -3969,6 +4322,12 @@ "countryName": "Czech Republic", "countryShortCode": "CZ", "phoneCode": "+420", + "currency": [ + { + "code": "CZK", + "name": "Czech koruna" + } + ], "regions": [ { "name": "Hlavní město Praha", @@ -4032,6 +4391,12 @@ "countryName": "Denmark", "countryShortCode": "DK", "phoneCode": "+45", + "currency": [ + { + "code": "DKK", + "name": "Danish krone" + } + ], "regions": [ { "name": "Hovedstaden", @@ -4099,6 +4464,12 @@ "countryName": "Djibouti", "countryShortCode": "DJ", "phoneCode": "+253", + "currency": [ + { + "code": "DJF", + "name": "Djiboutian franc" + } + ], "regions": [ { "name": "Ali Sabieh", @@ -4126,6 +4497,12 @@ "countryName": "Dominica", "countryShortCode": "DM", "phoneCode": "+1767", + "currency": [ + { + "code": "XCD", + "name": "East Caribbean dollar" + } + ], "regions": [ { "name": "Saint Andrew Parish", @@ -4173,6 +4550,12 @@ "countryName": "Dominican Republic", "countryShortCode": "DO", "phoneCode": "+1849", + "currency": [ + { + "code": "DOP", + "name": "Dominican peso" + } + ], "regions": [ { "name": "Cibao Central", @@ -4216,6 +4599,12 @@ "countryName": "Ecuador", "countryShortCode": "EC", "phoneCode": "+593", + "currency": [ + { + "code": "USD", + "name": "United States dollar" + } + ], "regions": [ { "name": "Azuay", @@ -4319,6 +4708,12 @@ "countryName": "Egypt", "countryShortCode": "EG", "phoneCode": "+20", + "currency": [ + { + "code": "EGP", + "name": "Egyptian pound" + } + ], "regions": [ { "name": "Alexandria", @@ -4442,6 +4837,12 @@ "countryName": "El Salvador", "countryShortCode": "SV", "phoneCode": "+503", + "currency": [ + { + "code": "USD", + "name": "United States dollar" + } + ], "regions": [ { "name": "Ahuachapán", @@ -4505,6 +4906,12 @@ "countryName": "Equatorial Guinea", "countryShortCode": "GQ", "phoneCode": "+240", + "currency": [ + { + "code": "XAF", + "name": "Central African CFA franc" + } + ], "regions": [ { "name": "Annobón", @@ -4540,6 +4947,12 @@ "countryName": "Eritrea", "countryShortCode": "ER", "phoneCode": "+291", + "currency": [ + { + "code": "ERN", + "name": "Eritrean nakfa" + } + ], "regions": [ { "name": "Anseba", @@ -4571,6 +4984,12 @@ "countryName": "Estonia", "countryShortCode": "EE", "phoneCode": "+372", + "currency": [ + { + "code": "EUR", + "name": "European euro" + } + ], "regions": [ { "name": "Harjumaa (Tallinn)", @@ -4638,6 +5057,12 @@ "countryName": "Ethiopia", "countryShortCode": "ET", "phoneCode": "+251", + "currency": [ + { + "code": "ETB", + "name": "Ethiopian birr" + } + ], "regions": [ { "name": "Addis Ababa", @@ -4689,6 +5114,12 @@ "countryName": "Falkland Islands (Islas Malvinas)", "countryShortCode": "FK", "phoneCode": "+500", + "currency": [ + { + "code": "FKP", + "name": "Falkland Islands pound" + } + ], "regions": [ { "name": "Falkland Islands (Islas Malvinas)" @@ -4699,6 +5130,12 @@ "countryName": "Faroe Islands", "countryShortCode": "FO", "phoneCode": "+298", + "currency": [ + { + "code": "DKK", + "name": "Danish krone" + } + ], "regions": [ { "name": "Bordoy" @@ -4733,6 +5170,12 @@ "countryName": "Fiji", "countryShortCode": "FJ", "phoneCode": "+679", + "currency": [ + { + "code": "FJD", + "name": "Fijian dollar" + } + ], "regions": [ { "name": "Ba", @@ -4800,6 +5243,12 @@ "countryName": "Finland", "countryShortCode": "FI", "phoneCode": "+358", + "currency": [ + { + "code": "EUR", + "name": "European euro" + } + ], "regions": [ { "name": "Ahvenanmaan lääni", @@ -4831,6 +5280,12 @@ "countryName": "France", "countryShortCode": "FR", "phoneCode": "+33", + "currency": [ + { + "code": "EUR", + "name": "European euro" + } + ], "regions": [ { "name": "Auvergne-Rhône-Alpes", @@ -4942,6 +5397,12 @@ "countryName": "French Guiana", "countryShortCode": "GF", "phoneCode": "+594", + "currency": [ + { + "code": "EUR", + "name": "European euro" + } + ], "regions": [ { "name": "French Guiana" @@ -4952,6 +5413,12 @@ "countryName": "French Polynesia", "countryShortCode": "PF", "phoneCode": "+689", + "currency": [ + { + "code": "XPF", + "name": "CFP franc" + } + ], "regions": [ { "name": "Archipel des Marquises" @@ -4974,6 +5441,12 @@ "countryName": "French Southern and Antarctic Lands", "countryShortCode": "TF", "phoneCode": "+262", + "currency": [ + { + "code": "EUR", + "name": "European euro" + } + ], "regions": [ { "name": "Adelie Land" @@ -4993,6 +5466,12 @@ "countryName": "Gabon", "countryShortCode": "GA", "phoneCode": "+241", + "currency": [ + { + "code": "XAF", + "name": "Central African CFA franc" + } + ], "regions": [ { "name": "Estuaire", @@ -5036,6 +5515,12 @@ "countryName": "Gambia, The", "countryShortCode": "GM", "phoneCode": "+220", + "currency": [ + { + "code": "GMD", + "name": "Gambian dalasi" + } + ], "regions": [ { "name": "Banjul", @@ -5067,6 +5552,12 @@ "countryName": "Georgia", "countryShortCode": "GE", "phoneCode": "+995", + "currency": [ + { + "code": "GEL", + "name": "Georgian lari" + } + ], "regions": [ { "name": "Abkhazia (Sokhumi)", @@ -5122,6 +5613,12 @@ "countryName": "Germany", "countryShortCode": "DE", "phoneCode": "+49", + "currency": [ + { + "code": "EUR", + "name": "European euro" + } + ], "regions": [ { "name": "Baden-Württemberg", @@ -5193,6 +5690,12 @@ "countryName": "Ghana", "countryShortCode": "GH", "phoneCode": "+233", + "currency": [ + { + "code": "GHS", + "name": "Ghanaian cedi" + } + ], "regions": [ { "name": "Ahafo" @@ -5257,6 +5760,12 @@ "countryName": "Gibraltar", "countryShortCode": "GI", "phoneCode": "+350", + "currency": [ + { + "code": "GIP", + "name": "Gibraltar pound" + } + ], "regions": [ { "name": "Gibraltar" @@ -5267,6 +5776,12 @@ "countryName": "Greece", "countryShortCode": "GR", "phoneCode": "+30", + "currency": [ + { + "code": "EUR", + "name": "European euro" + } + ], "regions": [ { "name": "Anatolikí Makedonía kai Thráki", @@ -5330,6 +5845,12 @@ "countryName": "Greenland", "countryShortCode": "GL", "phoneCode": "+299", + "currency": [ + { + "code": "DKK", + "name": "Danish krone" + } + ], "regions": [ { "name": "Kommune Kujalleq", @@ -5353,6 +5874,12 @@ "countryName": "Grenada", "countryShortCode": "GD", "phoneCode": "+1473", + "currency": [ + { + "code": "XCD", + "name": "East Caribbean dollar" + } + ], "regions": [ { "name": "Saint Andrew", @@ -5388,6 +5915,12 @@ "countryName": "Guadeloupe", "countryShortCode": "GP", "phoneCode": "+590", + "currency": [ + { + "code": "EUR", + "name": "European euro" + } + ], "regions": [ { "name": "Guadeloupe" @@ -5398,6 +5931,13 @@ "countryName": "Guam", "countryShortCode": "GU", "phoneCode": "+1671", + "currency": [ + { + "code": "USD", + "name": "United States dollar" + } + ], + "regions": [ { "name": "Guam" @@ -5408,6 +5948,13 @@ "countryName": "Guatemala", "countryShortCode": "GT", "phoneCode": "+502", + + "currency": [ + { + "code": "GTQ", + "name": "Guatemalan quetzal" + } + ], "regions": [ { "name": "Alta Verapaz", @@ -5503,6 +6050,12 @@ "countryName": "Guernsey", "countryShortCode": "GG", "phoneCode": "+44", + "currency": [ + { + "code": "GGP", + "name": "Guernsey Pound" + } + ], "regions": [ { "name": "Castel" @@ -5540,6 +6093,12 @@ "countryName": "Guinea", "countryShortCode": "GN", "phoneCode": "+224", + "currency": [ + { + "code": "GNF", + "name": "Guinean franc" + } + ], "regions": [ { "name": "Boké", @@ -5579,6 +6138,12 @@ "countryName": "Guinea-Bissau", "countryShortCode": "GW", "phoneCode": "+245", + "currency": [ + { + "code": "XOF", + "name": "West African CFA franc" + } + ], "regions": [ { "name": "Bafatá", @@ -5622,6 +6187,12 @@ "countryName": "Guyana", "countryShortCode": "GY", "phoneCode": "+592", + "currency": [ + { + "code": "GYD", + "name": "Guyanese dollar" + } + ], "regions": [ { "name": "Barima-Waini", @@ -5669,6 +6240,12 @@ "countryName": "Haiti", "countryShortCode": "HT", "phoneCode": "+509", + "currency": [ + { + "code": "HTG", + "name": "Haitian gourde" + } + ], "regions": [ { "name": "Artibonite", @@ -5716,7 +6293,12 @@ "countryName": "Heard Island and McDonald Islands", "countryShortCode": "HM", "phoneCode": "+672", - + "currency": [ + { + "code": "", + "name": "" + } + ], "regions": [ { "name": "Heard Island and McDonald Islands" @@ -5727,6 +6309,13 @@ "countryName": "Holy See (Vatican City)", "countryShortCode": "VA", "phoneCode": "+379", + "currency": [ + { + "code": "EUR", + "name": "European euro" + } + ], + "regions": [ { "name": "Holy See (Vatican City)", @@ -5738,6 +6327,12 @@ "countryName": "Honduras", "countryShortCode": "HN", "phoneCode": "+504", + "currency": [ + { + "code": "HNL", + "name": "Honduran lempira" + } + ], "regions": [ { "name": "Atlántida", @@ -5817,6 +6412,12 @@ "countryName": "Hong Kong", "countryShortCode": "HK", "phoneCode": "+852", + "currency": [ + { + "code": "HKD", + "name": "Hong Kong dollar" + } + ], "regions": [ { "name": "Hong Kong", @@ -5828,6 +6429,12 @@ "countryName": "Hungary", "countryShortCode": "HU", "phoneCode": "+36", + "currency": [ + { + "code": "HUF", + "name": "Hungarian forint" + } + ], "regions": [ { "name": "Bács-Kiskun", @@ -6007,6 +6614,12 @@ "countryName": "Iceland", "countryShortCode": "IS", "phoneCode": "+354", + "currency": [ + { + "code": "ISK", + "name": "Icelandic króna" + } + ], "regions": [ { "name": "Austurland", @@ -6046,6 +6659,12 @@ "countryName": "India", "countryShortCode": "IN", "phoneCode": "+91", + "currency": [ + { + "code": "INR", + "name": "Indian rupee" + } + ], "regions": [ { "name": "Andaman and Nicobar Islands", @@ -6197,6 +6816,12 @@ "countryName": "Indonesia", "countryShortCode": "ID", "phoneCode": "+62", + "currency": [ + { + "code": "IDR", + "name": "Indonesian rupiah" + } + ], "regions": [ { "name": "Aceh", @@ -6336,6 +6961,12 @@ "countryName": "Iran, Islamic Republic of", "countryShortCode": "IR", "phoneCode": "+98", + "currency": [ + { + "code": "IRR", + "name": "Iranian rial" + } + ], "regions": [ { "name": "Alborz", @@ -6467,6 +7098,12 @@ "countryName": "Iraq", "countryShortCode": "IQ", "phoneCode": "+964", + "currency": [ + { + "code": "IQD", + "name": "Iraqi dinar" + } + ], "regions": [ { "name": "Al Anbār", @@ -6546,6 +7183,12 @@ "countryName": "Ireland", "countryShortCode": "IE", "phoneCode": "+353", + "currency": [ + { + "code": "EUR", + "name": "European euro" + } + ], "regions": [ { "name": "Carlow", @@ -6657,6 +7300,12 @@ "countryName": "Isle of Man", "countryShortCode": "IM", "phoneCode": "+44", + "currency": [ + { + "code": "IMP", + "name": "Manx pound" + } + ], "regions": [ { "name": "Isle of Man" @@ -6667,6 +7316,12 @@ "countryName": "Israel", "countryShortCode": "IL", "phoneCode": "+972", + "currency": [ + { + "code": "ILS", + "name": "Israeli new shekel" + } + ], "regions": [ { "name": "HaDarom", @@ -6698,6 +7353,12 @@ "countryName": "Italy", "countryShortCode": "IT", "phoneCode": "+39", + "currency": [ + { + "code": "EUR", + "name": "European euro" + } + ], "regions": [ { "name": "Abruzzo", @@ -6785,6 +7446,12 @@ "countryName": "Jamaica", "countryShortCode": "JM", "phoneCode": "+1876", + "currency": [ + { + "code": "JMD", + "name": "Jamaican dollar" + } + ], "regions": [ { "name": "Clarendon", @@ -6848,6 +7515,12 @@ "countryName": "Japan", "countryShortCode": "JP", "phoneCode": "+81", + "currency": [ + { + "code": "JPY", + "name": "Japanese yen" + } + ], "regions": [ { "name": "Aichi", @@ -7043,6 +7716,13 @@ "countryName": "Jersey", "countryShortCode": "JE", "phoneCode": "+44", + "currency": [ + { + "code": "JEP", + "name": "Jersey pound" + } + ], + "regions": [ { "name": "Jersey" @@ -7053,6 +7733,12 @@ "countryName": "Jordan", "countryShortCode": "JO", "phoneCode": "+962", + "currency": [ + { + "code": "JOD", + "name": "Jordanian dinar" + } + ], "regions": [ { "name": "‘Ajlūn", @@ -7108,6 +7794,12 @@ "countryName": "Kazakhstan", "countryShortCode": "KZ", "phoneCode": "+77", + "currency": [ + { + "code": "KZT", + "name": "Kazakhstani tenge" + } + ], "regions": [ { "name": "Almaty", @@ -7178,6 +7870,12 @@ "countryName": "Kenya", "countryShortCode": "KE", "phoneCode": "+254", + "currency": [ + { + "code": "KES", + "name": "Kenyan shilling" + } + ], "regions": [ { "name": "Baringo", @@ -7373,6 +8071,12 @@ "countryName": "Kiribati", "countryShortCode": "KI", "phoneCode": "+686", + "currency": [ + { + "code": "AUD", + "name": "Australian dollar" + } + ], "regions": [ { "name": "Abaiang" @@ -7464,6 +8168,12 @@ "countryName": "Korea, Democratic People's Republic of", "countryShortCode": "KP", "phoneCode": "+850", + "currency": [ + { + "code": "", + "name": "" + } + ], "regions": [ { "name": "Chagang-do (Chagang Province)", @@ -7515,6 +8225,13 @@ "countryName": "Korea, Republic of", "countryShortCode": "KR", "phoneCode": "+82", + + "currency": [ + { + "code": "KRW", + "name": "South Korean won" + } + ], "regions": [ { "name": "Ch'ungch'ongbuk-do", @@ -7590,6 +8307,13 @@ "countryName": "Kuwait", "countryShortCode": "KW", "phoneCode": "+965", + + "currency": [ + { + "code": "KWD", + "name": "Kuwaiti dinar" + } + ], "regions": [ { "name": "Al Aḩmadi", @@ -7621,6 +8345,12 @@ "countryName": "Kyrgyzstan", "countryShortCode": "KG", "phoneCode": "+996", + "currency": [ + { + "code": "KGS", + "name": "Kyrgyzstani som" + } + ], "regions": [ { "name": "Batken Oblasty", @@ -7660,6 +8390,12 @@ "countryName": "Laos", "countryShortCode": "LA", "phoneCode": "+856", + "currency": [ + { + "code": "LAK", + "name": "Lao kip" + } + ], "regions": [ { "name": "Attapu", @@ -7735,6 +8471,12 @@ "countryName": "Latvia", "countryShortCode": "LV", "phoneCode": "+371", + "currency": [ + { + "code": "EUR", + "name": "European euro" + } + ], "regions": [ { "name": "Aglona", @@ -8218,6 +8960,12 @@ "countryName": "Lebanon", "countryShortCode": "LB", "phoneCode": "+961", + "currency": [ + { + "code": "LBP", + "name": "Lebanese pound" + } + ], "regions": [ { "name": "Aakkâr", @@ -8257,6 +9005,12 @@ "countryName": "Lesotho", "countryShortCode": "LS", "phoneCode": "+266", + "currency": [ + { + "code": "LSL", + "name": "Lesotho loti" + } + ], "regions": [ { "name": "Berea", @@ -8304,6 +9058,12 @@ "countryName": "Liberia", "countryShortCode": "LR", "phoneCode": "+231", + "currency": [ + { + "code": "LRD", + "name": "Liberian dollar" + } + ], "regions": [ { "name": "Bomi", @@ -8371,6 +9131,12 @@ "countryName": "Libya", "countryShortCode": "LY", "phoneCode": "+218", + "currency": [ + { + "code": "LYD", + "name": "Libyan dinar" + } + ], "regions": [ { "name": "Al Buţnān", @@ -8466,6 +9232,12 @@ "countryName": "Liechtenstein", "countryShortCode": "LI", "phoneCode": "+423", + "currency": [ + { + "code": "CHF", + "name": "Swiss franc" + } + ], "regions": [ { "name": "Balzers", @@ -8517,6 +9289,12 @@ "countryName": "Lithuania", "countryShortCode": "LT", "phoneCode": "+370", + "currency": [ + { + "code": "EUR", + "name": "European euro" + } + ], "regions": [ { "name": "Alytaus", @@ -8564,6 +9342,12 @@ "countryName": "Luxembourg", "countryShortCode": "LU", "phoneCode": "+352", + "currency": [ + { + "code": "EUR", + "name": "European euro" + } + ], "regions": [ { "name": "Capellen", @@ -8619,6 +9403,12 @@ "countryName": "Macao", "countryShortCode": "MO", "phoneCode": "+853", + "currency": [ + { + "code": "MOP", + "name": "Macanese pataca" + } + ], "regions": [ { "name": "Macao" @@ -8629,6 +9419,12 @@ "countryName": "Macedonia, Republic of", "countryShortCode": "MK", "phoneCode": "+389", + "currency": [ + { + "code": "MKD", + "name": "Macedonian denar" + } + ], "regions": [ { "name": "Aračinovo", @@ -8920,6 +9716,12 @@ "countryName": "Madagascar", "countryShortCode": "MG", "phoneCode": "+261", + "currency": [ + { + "code": "MGA", + "name": "Malagasy ariary" + } + ], "regions": [ { "name": "Antananarivo", @@ -8951,6 +9753,12 @@ "countryName": "Malawi", "countryShortCode": "MW", "phoneCode": "+265", + "currency": [ + { + "code": "MWK", + "name": "Malawian kwacha" + } + ], "regions": [ { "name": "Balaka", @@ -9066,6 +9874,12 @@ "countryName": "Malaysia", "countryShortCode": "MY", "phoneCode": "+60", + "currency": [ + { + "code": "MYR", + "name": "Malaysian ringgit" + } + ], "regions": [ { "name": "Johor", @@ -9137,6 +9951,12 @@ "countryName": "Maldives", "countryShortCode": "MV", "phoneCode": "+960", + "currency": [ + { + "code": "MVR", + "name": "Maldivian rufiyaa" + } + ], "regions": [ { "name": "Alifu Alifu", @@ -9228,6 +10048,13 @@ "countryName": "Mali", "countryShortCode": "ML", "phoneCode": "+223", + "currency": [ + { + "code": "XOF", + "name": "West African CFA franc" + } + ], + "regions": [ { "name": "Bamako", @@ -9271,6 +10098,12 @@ "countryName": "Malta", "countryShortCode": "MT", "phoneCode": "+356", + "currency": [ + { + "code": "EUR", + "name": "European euro" + } + ], "regions": [ { "name": "Attard", @@ -9550,6 +10383,12 @@ "countryName": "Marshall Islands", "countryShortCode": "MH", "phoneCode": "+692", + "currency": [ + { + "code": "USD", + "name": "United States Dollar" + } + ], "regions": [ { "name": "Ailinglaplap", @@ -9645,6 +10484,12 @@ "countryName": "Martinique", "countryShortCode": "MQ", "phoneCode": "+596", + "currency": [ + { + "code": "EUR", + "name": "European euro" + } + ], "regions": [ { "name": "Martinique" @@ -9655,6 +10500,12 @@ "countryName": "Mauritania", "countryShortCode": "MR", "phoneCode": "+222", + "currency": [ + { + "code": "MRU", + "name": "Mauritanian ouguiya" + } + ], "regions": [ { "name": "Adrar", @@ -9722,6 +10573,12 @@ "countryName": "Mauritius", "countryShortCode": "MU", "phoneCode": "+230", + "currency": [ + { + "code": "MUR", + "name": "Mauritian rupee" + } + ], "regions": [ { "name": "Agalega Islands", @@ -9793,6 +10650,12 @@ "countryName": "Mayotte", "countryShortCode": "YT", "phoneCode": "+262", + "currency": [ + { + "code": "EUR", + "name": "European euro" + } + ], "regions": [ { "name": "Dzaoudzi", @@ -9868,6 +10731,12 @@ "countryName": "Mexico", "countryShortCode": "MX", "phoneCode": "+52", + "currency": [ + { + "code": "MXN", + "name": "Mexican peso" + } + ], "regions": [ { "name": "Aguascalientes", @@ -10003,6 +10872,12 @@ "countryName": "Micronesia, Federated States of", "countryShortCode": "FM", "phoneCode": "+691", + "currency": [ + { + "code": "USD", + "name": "United States Dollar" + } + ], "regions": [ { "name": "Chuuk (Truk)", @@ -10026,6 +10901,12 @@ "countryName": "Moldova", "countryShortCode": "MD", "phoneCode": "+373", + "currency": [ + { + "code": "MDL", + "name": "Moldovan leu" + } + ], "regions": [ { "name": "Aenii Noi", @@ -10181,6 +11062,12 @@ "countryName": "Monaco", "countryShortCode": "MC", "phoneCode": "+377", + "currency": [ + { + "code": "EUR", + "name": "European euro" + } + ], "regions": [ { "name": "Colle", @@ -10256,6 +11143,12 @@ "countryName": "Mongolia", "countryShortCode": "MN", "phoneCode": "+976", + "currency": [ + { + "code": "MNT", + "name": "Mongolian tugrik" + } + ], "regions": [ { "name": "Arhangay", @@ -10343,6 +11236,12 @@ "countryName": "Montenegro", "countryShortCode": "ME", "phoneCode": "+382", + "currency": [ + { + "code": "EUR", + "name": "European euro" + } + ], "regions": [ { "name": "Andrijevica", @@ -10442,6 +11341,12 @@ "countryName": "Montserrat", "countryShortCode": "MS", "phoneCode": "+1664", + "currency": [ + { + "code": "XCD", + "name": "East Caribbean dollar" + } + ], "regions": [ { "name": "Saint Anthony" @@ -10458,6 +11363,12 @@ "countryName": "Morocco", "countryShortCode": "MA", "phoneCode": "+212", + "currency": [ + { + "code": "MAD", + "name": "Moroccan dirham" + } + ], "regions": [ { "name": "Chaouia-Ouardigha", @@ -10525,6 +11436,12 @@ "countryName": "Mozambique", "countryShortCode": "MZ", "phoneCode": "+258", + "currency": [ + { + "code": "MZN", + "name": "Mozambican metical" + } + ], "regions": [ { "name": "Cabo Delgado", @@ -10576,6 +11493,12 @@ "countryName": "Myanmar", "countryShortCode": "MM", "phoneCode": "+95", + "currency": [ + { + "code": "MMK", + "name": "Burmese kyat" + } + ], "regions": [ { "name": "Ayeyarwady", @@ -10643,6 +11566,12 @@ "countryName": "Namibia", "countryShortCode": "NA", "phoneCode": "+264", + "currency": [ + { + "code": "NAD", + "name": "Namibian dollar" + } + ], "regions": [ { "name": "Erongo", @@ -10706,6 +11635,12 @@ "countryName": "Nauru", "countryShortCode": "NR", "phoneCode": "+674", + "currency": [ + { + "code": "AUD", + "name": "Australian dollar" + } + ], "regions": [ { "name": "Aiwo", @@ -10769,6 +11704,12 @@ "countryName": "Nepal", "countryShortCode": "NP", "phoneCode": "+977", + "currency": [ + { + "code": "NPR", + "name": "Nepalese rupee" + } + ], "regions": [ { "name": "Bagmati", @@ -10832,6 +11773,12 @@ "countryName": "Netherlands", "countryShortCode": "NL", "phoneCode": "+31", + "currency": [ + { + "code": "EUR", + "name": "European euro" + } + ], "regions": [ { "name": "Drenthe", @@ -10887,6 +11834,12 @@ "countryName": "New Caledonia", "countryShortCode": "NC", "phoneCode": "+687", + "currency": [ + { + "code": "XPF", + "name": "CFP franc" + } + ], "regions": [ { "name": "Iles Loyaute" @@ -10903,6 +11856,12 @@ "countryName": "New Zealand", "countryShortCode": "NZ", "phoneCode": "+64", + "currency": [ + { + "code": "NZD", + "name": "New Zealand dollar" + } + ], "regions": [ { "name": "Auckland", @@ -10978,6 +11937,12 @@ "countryName": "Nicaragua", "countryShortCode": "NI", "phoneCode": "+505", + "currency": [ + { + "code": "NIO", + "name": "Nicaraguan córdoba" + } + ], "regions": [ { "name": "Boaco", @@ -11053,6 +12018,12 @@ "countryName": "Niger", "countryShortCode": "NE", "phoneCode": "+227", + "currency": [ + { + "code": "XOF", + "name": "West African CFA franc" + } + ], "regions": [ { "name": "Agadez", @@ -11092,6 +12063,12 @@ "countryName": "Nigeria", "countryShortCode": "NG", "phoneCode": "+234", + "currency": [ + { + "code": "NGN", + "name": "Nigerian naira" + } + ], "regions": [ { "name": "Abia", @@ -11247,6 +12224,12 @@ "countryName": "Niue", "countryShortCode": "NU", "phoneCode": "+683", + "currency": [ + { + "code": "NZD", + "name": "New Zealand dollar" + } + ], "regions": [ { "name": "Niue" @@ -11257,6 +12240,12 @@ "countryName": "Norfolk Island", "countryShortCode": "NF", "phoneCode": "+672", + "currency": [ + { + "code": "AUD", + "name": "Australian dollar" + } + ], "regions": [ { "name": "Norfolk Island" @@ -11267,6 +12256,12 @@ "countryName": "Northern Mariana Islands", "countryShortCode": "MP", "phoneCode": "+1670", + "currency": [ + { + "code": "USD", + "name": "United States Dollar" + } + ], "regions": [ { "name": "Northern Islands" @@ -11286,6 +12281,12 @@ "countryName": "Norway", "countryShortCode": "NO", "phoneCode": "+47", + "currency": [ + { + "code": "NOK", + "name": "Norwegian krone" + } + ], "regions": [ { "name": "Akershus", @@ -11377,6 +12378,12 @@ "countryName": "Oman", "countryShortCode": "OM", "phoneCode": "+968", + "currency": [ + { + "code": "OMR", + "name": "Omani rial" + } + ], "regions": [ { "name": "Ad Dakhiliyah", @@ -11428,6 +12435,12 @@ "countryName": "Pakistan", "countryShortCode": "PK", "phoneCode": "+92", + "currency": [ + { + "code": "PKR", + "name": "Pakistani rupee" + } + ], "regions": [ { "name": "Āzād Kashmīr", @@ -11467,6 +12480,12 @@ "countryName": "Palau", "countryShortCode": "PW", "phoneCode": "+680", + "currency": [ + { + "code": "USD", + "name": "United States Dollar" + } + ], "regions": [ { "name": "Aimeliik", @@ -11538,6 +12557,12 @@ "countryName": "Palestine, State of", "countryShortCode": "PS", "phoneCode": "+970", + "currency": [ + { + "code": "ILS", + "name": "Israeli new sheqel" + } + ], "regions": [ { "name": "Ak Khalīl", @@ -11609,6 +12634,12 @@ "countryName": "Panama", "countryShortCode": "PA", "phoneCode": "+507", + "currency": [ + { + "code": "USD", + "name": "United States Dollar" + } + ], "regions": [ { "name": "Bocas del Toro", @@ -11668,6 +12699,12 @@ "countryName": "Papua New Guinea", "countryShortCode": "PG", "phoneCode": "+675", + "currency": [ + { + "code": "PGK", + "name": "Papua New Guinean kina" + } + ], "regions": [ { "name": "Bougainville", @@ -11763,6 +12800,12 @@ "countryName": "Paraguay", "countryShortCode": "PY", "phoneCode": "+595", + "currency": [ + { + "code": "PYG", + "name": "Paraguayan guaraní" + } + ], "regions": [ { "name": "Alto Paraguay", @@ -11838,6 +12881,12 @@ "countryName": "Peru", "countryShortCode": "PE", "phoneCode": "+51", + "currency": [ + { + "code": "PEN", + "name": "Peruvian nuevo sol" + } + ], "regions": [ { "name": "Amazonas", @@ -11949,6 +12998,12 @@ "countryName": "Philippines", "countryShortCode": "PH", "phoneCode": "+63", + "currency": [ + { + "code": "PHP", + "name": "Philippine peso" + } + ], "regions": [ { "name": "Abra", @@ -12276,6 +13331,12 @@ "countryName": "Pitcairn", "countryShortCode": "PN", "phoneCode": "+872", + "currency": [ + { + "code": "NZD", + "name": "New Zealand dollar" + } + ], "regions": [ { "name": "Pitcairn Islands" @@ -12286,6 +13347,12 @@ "countryName": "Poland", "countryShortCode": "PL", "phoneCode": "+48", + "currency": [ + { + "code": "PLN", + "name": "Polish złoty" + } + ], "regions": [ { "name": "Dolnośląskie", @@ -12357,6 +13424,12 @@ "countryName": "Portugal", "countryShortCode": "PT", "phoneCode": "+351", + "currency": [ + { + "code": "EUR", + "name": "European euro" + } + ], "regions": [ { "name": "Açores", @@ -12444,6 +13517,12 @@ "countryName": "Puerto Rico", "countryShortCode": "PR", "phoneCode": "+1939", + "currency": [ + { + "code": "USD", + "name": "United States Dollar" + } + ], "regions": [ { "name": "Adjuntas" @@ -12670,6 +13749,12 @@ "countryName": "Qatar", "countryShortCode": "QA", "phoneCode": "+974", + "currency": [ + { + "code": "QAR", + "name": "Qatari riyal" + } + ], "regions": [ { "name": "Ad Dawḩah", @@ -12705,6 +13790,12 @@ "countryName": "Réunion", "countryShortCode": "RE", "phoneCode": "+262", + "currency": [ + { + "code": "EUR", + "name": "European euro" + } + ], "regions": [ { "name": "Réunion" @@ -12715,6 +13806,12 @@ "countryName": "Romania", "countryShortCode": "RO", "phoneCode": "+40", + "currency": [ + { + "code": "RON", + "name": "Romanian leu" + } + ], "regions": [ { "name": "Alba", @@ -12886,6 +13983,12 @@ "countryName": "Russian Federation", "countryShortCode": "RU", "phoneCode": "+7", + "currency": [ + { + "code": "RUB", + "name": "Russian ruble" + } + ], "regions": [ { "name": "Republic of Adygea", @@ -13225,6 +14328,12 @@ "countryName": "Rwanda", "countryShortCode": "RW", "phoneCode": "+250", + "currency": [ + { + "code": "RWF", + "name": "Rwandan franc" + } + ], "regions": [ { "name": "Kigali", @@ -13252,6 +14361,12 @@ "countryName": "Saint Barthélemy", "countryShortCode": "BL", "phoneCode": "+590", + "currency": [ + { + "code": "EUR", + "name": "European euro" + } + ], "regions": [ { "name": "Au Vent", @@ -13267,6 +14382,12 @@ "countryName": "Saint Helena, Ascension and Tristan da Cunha", "countryShortCode": "SH", "phoneCode": "+290", + "currency": [ + { + "code": "SHP", + "name": "Saint Helena pound" + } + ], "regions": [ { "name": "Ascension", @@ -13286,6 +14407,12 @@ "countryName": "Saint Kitts and Nevis", "countryShortCode": "KN", "phoneCode": "+1869", + "currency": [ + { + "code": "XCD", + "name": "East Caribbean dollar" + } + ], "regions": [ { "name": "Saint Kitts", @@ -13301,6 +14428,12 @@ "countryName": "Saint Lucia", "countryShortCode": "LC", "phoneCode": "+1758", + "currency": [ + { + "code": "XCD", + "name": "East Caribbean dollar" + } + ], "regions": [ { "name": "Anse-la-Raye", @@ -13348,6 +14481,12 @@ "countryName": "Saint Martin", "countryShortCode": "MF", "phoneCode": "+590", + "currency": [ + { + "code": "EUR", + "name": "European euro" + } + ], "regions": [ { "name": "Saint Martin" @@ -13358,6 +14497,12 @@ "countryName": "Saint Pierre and Miquelon", "countryShortCode": "PM", "phoneCode": "+508", + "currency": [ + { + "code": "EUR", + "name": "European euro" + } + ], "regions": [ { "name": "Miquelon" @@ -13371,6 +14516,12 @@ "countryName": "Saint Vincent and the Grenadines", "countryShortCode": "VC", "phoneCode": "+1784", + "currency": [ + { + "code": "XCD", + "name": "East Caribbean dollar" + } + ], "regions": [ { "name": "Charlotte", @@ -13402,6 +14553,12 @@ "countryName": "Samoa", "countryShortCode": "WS", "phoneCode": "+685", + "currency": [ + { + "code": "WST", + "name": "Samoan tālā" + } + ], "regions": [ { "name": "A'ana", @@ -13453,6 +14610,12 @@ "countryName": "San Marino", "countryShortCode": "SM", "phoneCode": "+378", + "currency": [ + { + "code": "EUR", + "name": "European euro" + } + ], "regions": [ { "name": "Acquaviva", @@ -13496,6 +14659,12 @@ "countryName": "Sao Tome and Principe", "countryShortCode": "ST", "phoneCode": "+239", + "currency": [ + { + "code": "STN", + "name": "São Tomé and Príncipe dobra" + } + ], "regions": [ { "name": "Principe", @@ -13511,6 +14680,12 @@ "countryName": "Saudi Arabia", "countryShortCode": "SA", "phoneCode": "+966", + "currency": [ + { + "code": "SAR", + "name": "Saudi riyal" + } + ], "regions": [ { "name": "'Asir", @@ -13570,6 +14745,12 @@ "countryName": "Senegal", "countryShortCode": "SN", "phoneCode": "+221", + "currency": [ + { + "code": "XOF", + "name": "West African CFA franc" + } + ], "regions": [ { "name": "Dakar", @@ -13633,6 +14814,12 @@ "countryName": "Serbia", "countryShortCode": "RS", "phoneCode": "+381", + "currency": [ + { + "code": "RSD", + "name": "Serbian dinar" + } + ], "regions": [ { "name": "Beograd (Belgrade)", @@ -13760,6 +14947,12 @@ "countryName": "Seychelles", "countryShortCode": "SC", "phoneCode": "+248", + "currency": [ + { + "code": "SCR", + "name": "Seychellois rupee" + } + ], "regions": [ { "name": "Anse aux Pins", @@ -13867,6 +15060,12 @@ "countryName": "Sierra Leone", "countryShortCode": "SL", "phoneCode": "+232", + "currency": [ + { + "code": "SLE", + "name": "Sierra Leonean leone" + } + ], "regions": [ { "name": "Eastern", @@ -13890,6 +15089,12 @@ "countryName": "Singapore", "countryShortCode": "SG", "phoneCode": "+65", + "currency": [ + { + "code": "SGD", + "name": "Singapore dollar" + } + ], "regions": [ { "name": "Central Singapore", @@ -13917,6 +15122,12 @@ "countryName": "Sint Maarten (Dutch part)", "countryShortCode": "SX", "phoneCode": "+1721", + "currency": [ + { + "code": "ANG", + "name": "Netherlands Antillean guilder" + } + ], "regions": [ { "name": "Sint Maarten" @@ -13927,6 +15138,12 @@ "countryName": "Slovakia", "countryShortCode": "SK", "phoneCode": "+421", + "currency": [ + { + "code": "EUR", + "name": "European euro" + } + ], "regions": [ { "name": "Banskobystricky", @@ -13966,6 +15183,12 @@ "countryName": "Slovenia", "countryShortCode": "SI", "phoneCode": "+386", + "currency": [ + { + "code": "EUR", + "name": "European euro" + } + ], "regions": [ { "name": "Ajdovscina", @@ -14797,6 +16020,12 @@ "countryName": "Solomon Islands", "countryShortCode": "SB", "phoneCode": "+677", + "currency": [ + { + "code": "SBD", + "name": "Solomon Islands dollar" + } + ], "regions": [ { "name": "Central", @@ -14844,6 +16073,12 @@ "countryName": "Somalia", "countryShortCode": "SO", "phoneCode": "+252", + "currency": [ + { + "code": "SOS", + "name": "Somali shilling" + } + ], "regions": [ { "name": "Awdal", @@ -14923,6 +16158,12 @@ "countryName": "South Africa", "countryShortCode": "ZA", "phoneCode": "+27", + "currency": [ + { + "code": "ZAR", + "name": "South African rand" + } + ], "regions": [ { "name": "Eastern Cape", @@ -14966,6 +16207,12 @@ "countryName": "South Georgia and South Sandwich Islands", "countryShortCode": "GS", "phoneCode": "+500", + "currency": [ + { + "code": "GBP", + "name": "Pound sterling" + } + ], "regions": [ { "name": "Bird Island" @@ -14997,6 +16244,12 @@ "countryName": "South Sudan", "countryShortCode": "SS", "phoneCode": "+211", + "currency": [ + { + "code": "SSP", + "name": "South Sudanese pound" + } + ], "regions": [ { "name": "Central Equatoria", @@ -15044,6 +16297,12 @@ "countryName": "Spain", "countryShortCode": "ES", "phoneCode": "+34", + "currency": [ + { + "code": "EUR", + "name": "European euro" + } + ], "regions": [ { "name": "Albacete", @@ -15259,6 +16518,12 @@ "countryName": "Sri Lanka", "countryShortCode": "LK", "phoneCode": "+94", + "currency": [ + { + "code": "LKR", + "name": "Sri Lankan rupee" + } + ], "regions": [ { "name": "Basnahira", @@ -15302,6 +16567,12 @@ "countryName": "Sudan", "countryShortCode": "SD", "phoneCode": "+249", + "currency": [ + { + "code": "SDG", + "name": "Sudanese pound" + } + ], "regions": [ { "name": "Al Bahr al Ahmar", @@ -15381,6 +16652,12 @@ "countryName": "Suriname", "countryShortCode": "SR", "phoneCode": "+597", + "currency": [ + { + "code": "SRD", + "name": "Surinamese dollar" + } + ], "regions": [ { "name": "Brokopondo", @@ -15428,6 +16705,12 @@ "countryName": "Swaziland", "countryShortCode": "SZ", "phoneCode": "+268", + "currency": [ + { + "code": "SZL", + "name": "Swazi lilangeni" + } + ], "regions": [ { "name": "Hhohho", @@ -15451,6 +16734,12 @@ "countryName": "Sweden", "countryShortCode": "SE", "phoneCode": "+46", + "currency": [ + { + "code": "SEK", + "name": "Swedish krona" + } + ], "regions": [ { "name": "Blekinge", @@ -15542,6 +16831,12 @@ "countryName": "Switzerland", "countryShortCode": "CH", "phoneCode": "+41", + "currency": [ + { + "code": "CHF", + "name": "Swiss franc" + } + ], "regions": [ { "name": "Aargau", @@ -15653,6 +16948,12 @@ "countryName": "Syrian Arab Republic", "countryShortCode": "SY", "phoneCode": "+963", + "currency": [ + { + "code": "SYP", + "name": "Syrian pound" + } + ], "regions": [ { "name": "Al Hasakah", @@ -15716,6 +17017,12 @@ "countryName": "Taiwan", "countryShortCode": "TW", "phoneCode": "+886", + "currency": [ + { + "code": "TWD", + "name": "New Taiwan dollar" + } + ], "regions": [ { "name": "Chang-hua", @@ -15803,6 +17110,12 @@ "countryName": "Tajikistan", "countryShortCode": "TJ", "phoneCode": "+992", + "currency": [ + { + "code": "TJS", + "name": "Tajikistani somoni" + } + ], "regions": [ { "name": "Dushanbe", @@ -15826,6 +17139,12 @@ "countryName": "Tanzania, United Republic of", "countryShortCode": "TZ", "phoneCode": "+255", + "currency": [ + { + "code": "TZS", + "name": "Tanzanian shilling" + } + ], "regions": [ { "name": "Arusha", @@ -15937,6 +17256,12 @@ "countryName": "Thailand", "countryShortCode": "TH", "phoneCode": "+66", + "currency": [ + { + "code": "THB", + "name": "Thai baht" + } + ], "regions": [ { "name": "Amnat Charoen", @@ -16252,6 +17577,12 @@ "countryName": "Timor-Leste", "countryShortCode": "TL", "phoneCode": "+670", + "currency": [ + { + "code": "USD", + "name": "United States dollar" + } + ], "regions": [ { "name": "Aileu", @@ -16311,6 +17642,12 @@ "countryName": "Togo", "countryShortCode": "TG", "phoneCode": "+228", + "currency": [ + { + "code": "XOF", + "name": "CFA franc BCEAO" + } + ], "regions": [ { "name": "Centre", @@ -16338,6 +17675,13 @@ "countryName": "Tokelau", "countryShortCode": "TK", "phoneCode": "+690", + "currency": [ + { + "code": "", + "name": "New Zealand dollar" + } + ], + "regions": [ { "name": "Atafu" @@ -16354,6 +17698,12 @@ "countryName": "Tonga", "countryShortCode": "TO", "phoneCode": "+676", + "currency": [ + { + "code": "TOP", + "name": "Tongan paʻanga" + } + ], "regions": [ { "name": "'Eua", @@ -16381,6 +17731,12 @@ "countryName": "Trinidad and Tobago", "countryShortCode": "TT", "phoneCode": "+1868", + "currency": [ + { + "code": "TTD", + "name": "Trinidad and Tobago dollar" + } + ], "regions": [ { "name": "Arima", @@ -16448,6 +17804,12 @@ "countryName": "Tunisia", "countryShortCode": "TN", "phoneCode": "+216", + "currency": [ + { + "code": "TND", + "name": "Tunisian dinar" + } + ], "regions": [ { "name": "Ariana", @@ -16547,6 +17909,12 @@ "countryName": "Turkey", "countryShortCode": "TR", "phoneCode": "+90", + "currency": [ + { + "code": "TRY", + "name": "Turkish lira" + } + ], "regions": [ { "name": "Adana", @@ -16878,6 +18246,12 @@ "countryName": "Turkmenistan", "countryShortCode": "TM", "phoneCode": "+993", + "currency": [ + { + "code": "TMT", + "name": "Turkmenistan manat" + } + ], "regions": [ { "name": "Ahal", @@ -16909,6 +18283,12 @@ "countryName": "Turks and Caicos Islands", "countryShortCode": "TC", "phoneCode": "+1649", + "currency": [ + { + "code": "USD", + "name": "United States dollar" + } + ], "regions": [ { "name": "Turks and Caicos Islands" @@ -16919,6 +18299,12 @@ "countryName": "Tuvalu", "countryShortCode": "TV", "phoneCode": "+688", + "currency": [ + { + "code": "AUD", + "name": "Australian dollar" + } + ], "regions": [ { "name": "Funafuti", @@ -16958,6 +18344,12 @@ "countryName": "Uganda", "countryShortCode": "UG", "phoneCode": "+256", + "currency": [ + { + "code": "UGX", + "name": "Ugandan shilling" + } + ], "regions": [ { "name": "Abim", @@ -17285,6 +18677,12 @@ "countryName": "Ukraine", "countryShortCode": "UA", "phoneCode": "+380", + "currency": [ + { + "code": "UAH", + "name": "Ukrainian hryvnia" + } + ], "regions": [ { "name": "Cherkasy", @@ -17400,6 +18798,12 @@ "countryName": "United Arab Emirates", "countryShortCode": "AE", "phoneCode": "+971", + "currency": [ + { + "code": "AED", + "name": "United Arab Emirates dirham" + } + ], "regions": [ { "name": "Abu Dhabi", @@ -17435,6 +18839,12 @@ "countryName": "United Kingdom", "countryShortCode": "GB", "phoneCode": "+44", + "currency": [ + { + "code": "GBP", + "name": "Pound sterling" + } + ], "regions": [ { "name": "Aberdeen City", @@ -18310,6 +19720,12 @@ "countryName": "United States", "countryShortCode": "US", "phoneCode": "+1", + "currency": [ + { + "code": "USD", + "name": "United States Dollar" + } + ], "regions": [ { "name": "Alabama", @@ -18565,6 +19981,12 @@ "countryName": "United States Minor Outlying Islands", "countryShortCode": "UM", "phoneCode": "+1", + "currency": [ + { + "code": "USD", + "name": "United States Dollar" + } + ], "regions": [ { "name": "Baker Island", @@ -18616,6 +20038,12 @@ "countryName": "Uruguay", "countryShortCode": "UY", "phoneCode": "+598", + "currency": [ + { + "code": "UYU", + "name": "Uruguayan Peso" + } + ], "regions": [ { "name": "Artigas", @@ -18699,6 +20127,12 @@ "countryName": "Uzbekistan", "countryShortCode": "UZ", "phoneCode":"+998", + "currency": [ + { + "code": "UZS", + "name": "Uzbekistani som" + } + ], "regions": [ { "name": "Toshkent shahri", @@ -18762,6 +20196,12 @@ "countryName": "Vanuatu", "countryShortCode": "VU", "phoneCode": "+678", + "currency": [ + { + "code": "VUV", + "name": "Vanuatu vatu" + } + ], "regions": [ { "name": "Malampa", @@ -18793,6 +20233,12 @@ "countryName": "Venezuela, Bolivarian Republic of", "countryShortCode": "VE", "phoneCode": "+58", + "currency": [ + { + "code": "VEF", + "name": "Venezuelan bolívar" + } + ], "regions": [ { "name": "Dependencias Federales", @@ -18900,6 +20346,12 @@ "countryName": "Vietnam", "countryShortCode": "VN", "phoneCode": "+84", + "currency": [ + { + "code": "VND", + "name": "Vietnamese đồng" + } + ], "regions": [ { "name": "Đồng Nai", @@ -19099,6 +20551,13 @@ "countryName": "Virgin Islands, British", "countryShortCode": "VG", "phoneCode": "+1284", + "currency": [ + { + "code": "USD", + "name": "United States Dollar" + } + ], + "regions": [ { "name": "Anegada", @@ -19122,6 +20581,12 @@ "countryName": "Virgin Islands, U.S.", "countryShortCode": "VI", "phoneCode":"+1340", + "currency": [ + { + "code": "", + "name": "" + } + ], "regions": [ { "name": "St. Thomas", @@ -19141,6 +20606,12 @@ "countryName": "Wallis and Futuna", "countryShortCode": "WF", "phoneCode":"+681", + "currency": [ + { + "code": "XPF", + "name": "CFP franc" + } + ], "regions": [ { "name": "Alo", @@ -19160,6 +20631,12 @@ "countryName": "Western Sahara", "countryShortCode": "EH", "phoneCode":"+212", + "currency": [ + { + "code": "MAD", + "name": "Moroccan dirham" + } + ], "regions": [ { @@ -19188,6 +20665,12 @@ "countryName": "Yemen", "countryShortCode": "YE", "phoneCode": "+967", + "currency": [ + { + "code": "YER", + "name": "Yemeni rial" + } + ], "regions": [ { "name": "Abyān", @@ -19275,6 +20758,12 @@ "countryName": "Zambia", "countryShortCode": "ZM", "phoneCode": "+260", + "currency": [ + { + "code": "ZMW", + "name": "Zambian kwacha" + } + ], "regions": [ { "name": "Central", @@ -19318,6 +20807,12 @@ "countryName": "Zimbabwe", "countryShortCode": "ZW", "phoneCode": "+263", + "currency": [ + { + "code": "USD", + "name": "United States dollar" + } + ], "regions": [ { "name": "Bulawayo", diff --git a/test/CountryData.UnitTests/CountryHelperTests.cs b/test/CountryData.UnitTests/CountryHelperTests.cs index 7691aad..2f5bcf2 100644 --- a/test/CountryData.UnitTests/CountryHelperTests.cs +++ b/test/CountryData.UnitTests/CountryHelperTests.cs @@ -1,7 +1,9 @@ using CountryData.Standard; using FluentAssertions; +using System; using System.Collections.Generic; using System.Linq; +using System.Reflection; using Xunit; namespace CountryData.UnitTests; @@ -130,6 +132,84 @@ public void GetCountriesByPhoneCode_WithCorrectPhoneCode_ShouldReturnCountries(s + /// + /// Tests the GetCurrencyCodesByCountryCode method in the CountryHelper class. + /// This test verifies if the method correctly returns the primary currency (code and name) for a given country's short code. + /// Assumes that each country has one primary currency for simplicity. + /// + /// The short code of the country for which the currency information is to be retrieved. + /// The expected currency code associated with the given country's short code. + /// The expected currency name associated with the given country's short code. + [Theory] + [InlineData("AF", "AFN", "Afghan afghani")] + [InlineData("GH", "GHS", "Ghanaian cedi")] + public void GetCurrencyCodesByCountryCode_WithValidCountryCode_ShouldReturnCorrectCurrency(string shortCode, + string expectedCode, string expectedName) + { + // Act + var currencies = _countryHelper.GetCurrencyCodesByCountryCode(shortCode); + + // Assert + var currency = currencies.FirstOrDefault(); + currency.Should().NotBeNull(); + currency.Code.Should().Be(expectedCode); + currency.Name.Should().Be(expectedName); + } + + + + /// + /// Tests the GetCountryByCurrencyCode method in the CountryHelper class. + /// This test verifies if the method correctly returns the countries associated with a given currency code. + /// + /// The currency code to search for. + /// The expected short codes of the countries associated with the currency code. + [Theory] + [InlineData("AFN", new[] { "AF" })] + [InlineData("USD", new[] { "US", "BQ", "IO", "EC", "SV", "GU", "MH", "FM", "MP", "PW", "PA", "PR", "TL", "TC", "UM", "VG", "ZW" })] + public void GetCountryByCurrencyCode_WithValidCurrencyCode_ShouldReturnCorrectCountries(string currencyCode, string[] expectedCountryShortCodes) + { + // Act + var countries = _countryHelper.GetCountryByCurrencyCode(currencyCode); + + // Assert + var countryShortCodes = countries.Select(c => c.CountryShortCode).ToArray(); + countryShortCodes.Should().BeEquivalentTo(expectedCountryShortCodes); + } + + /// + /// Tests the GetCountryByCurrencyCode method in the CountryHelper class with an invalid currency code. + /// This test checks if the method correctly returns an empty list when an invalid currency code is provided. + /// + [Fact] + public void GetCountryByCurrencyCode_WithInvalidCurrencyCode_ShouldReturnEmptyList() + { + // Act + var countries = _countryHelper.GetCountryByCurrencyCode("INVALID_CODE"); + + // Assert + countries.Should().BeEmpty(); + } + + /// + /// Tests the GetCountryByCurrencyCode method in the CountryHelper class when the country data is not initialized. + /// This test checks if the method throws an InvalidOperationException when the country data is not initialized. + /// + [Fact] + public void GetCountryByCurrencyCode_WhenCountryDataIsNotInitialized_ShouldThrowInvalidOperationException() + { + // Arrange + var countryHelper = new CountryHelper(); + var field = typeof(CountryHelper).GetField("_Countries", BindingFlags.NonPublic | BindingFlags.Instance); + field.SetValue(countryHelper, null); + + // Act + Action act = () => countryHelper.GetCountryByCurrencyCode("USD"); + + // Assert + act.Should().Throw().WithMessage("Country data is not initialized."); + } +