From bc05d6fade73fe716a6bb43c971462536e18393a Mon Sep 17 00:00:00 2001 From: Charles Weiss <69219836+weisscharlesj@users.noreply.github.com> Date: Sat, 24 Jun 2023 15:56:03 -0500 Subject: [PATCH 1/6] Uploaded images for stochastic tutorial --- content/tutorial-stochastic/circle_square.png | Bin 0 -> 18578 bytes .../tutorial-stochastic/circle_square_dots.png | Bin 0 -> 35350 bytes content/tutorial-stochastic/galton_board.png | Bin 0 -> 57809 bytes 3 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 content/tutorial-stochastic/circle_square.png create mode 100644 content/tutorial-stochastic/circle_square_dots.png create mode 100644 content/tutorial-stochastic/galton_board.png diff --git a/content/tutorial-stochastic/circle_square.png b/content/tutorial-stochastic/circle_square.png new file mode 100644 index 0000000000000000000000000000000000000000..2d508db8fbd112fdadd21c8ff44d8e0d1575f992 GIT binary patch literal 18578 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 XGfMXB4$izZ@Pjh6IFHkJOa6ZV`WmbV literal 0 HcmV?d00001 diff --git a/content/tutorial-stochastic/galton_board.png b/content/tutorial-stochastic/galton_board.png new file mode 100644 index 0000000000000000000000000000000000000000..0b049856784645421fe3bc052cadcb21b22fcd3d GIT binary patch literal 57809 zcmeFYWmHt*+b_IlNI_x<2`LAW?v_-Bl!l>8kdRJk7*r$$QIKvG7`nSeLb^d(N$Ku5 z8~^95^PKa(AD{Qz%UXNE3^TL$zV9o3aZQ-IsyqQ6H68!}1d0j>O#p!EfyXQ^Hu%i$ zecEd9*BxgCeK!DrbKD+~mLaGg_#~CPte(4;la;&Yb5~2i)6a#X^|B9gE+D!9n4 z9wp2hlIfBZR=(VXKVc6au7+7*7mQQ0f6yz$>oU~;5cYb6 z@JHAct_>3g@QjUfsykB#4s3a%Ym}w_KE#SNW|^) z1OJ~tp;m0RH$I@hHc`*67f+GI|_X}DZGXJUlZuMU!AW)ZGZ))r*JqtOWdLb`~~mk$L9F| zAO5$jMmg#>NRF)cmws7Je{@AtTE8a6rQ?cnt5Nh-`O)wNTP^mR(zcUR^QBb4i4tO| z9VLsv=&y012*iszFeY_Yb%O>y@3_OzD9Y0jM2XWuDUB(_vQ1^0d}60}Hs^n0v>zC7 zqKd%eF@p^Oe9ylN%YP%jjG+{rccJNYdCj8=s4`5FmZV5OdO;P6%kT#fxfA}0ZJ>5J z;LB3h@i_j?-;-M6p}`JOJ%j*5B(2y%E?J6)I>G%;m*MAZq`4_Tiu7ZfBYP(2*G#xC zgqRyst&~!k(fz5WzfaC?-v?f8li2g`?G^K_ak%`6kG0Hz#iO>eQ=wAUgEjBQP-c-z$7_(d=&oBtHaj{;frJv`}I!9@6!# z(+%Na@@4DI#$(rG==#L61B;mN#5!i~#e;fWuZ zhu)*a-T-A1AX&X;`d-05MDD_jOn*c^`Xtcvgs&oa`j;J)52g6 zEoUvoTo2!X&)$K@?Ap=k;z#e^;Cr$m5REQOo^ZB0Qq_dYV$4DLg`e->(&Q3PlpK7@ z{}zwe5es9%g3wPfOUA#~aTWA!T1z}pM&5OPh?)rZ$wCOc08gheM3o(4M;{NVm(SpP zf@apUv>ktHOfl{&s%|9xfv&HNt01`>lT&R{6Mu}1xsFt02#m@YqTbvlF330Ti{(f? zeF|G+y$NY$JZC2UpKP>sKPU%$%OUJo$=;?uMULSXdYg?`mM zM*dw@qqpPyQAa$X!d-2qMXWpABgDXeCBbhHXA<>*wyti~))FHw`SmnynWprx|5qDk z1%wRU4*X$O)^y49>*+P?@7~8{8Aq5*$x5vrpPaRR6|!Fm{tDJE!_RxcJo7@=YU9^H z-B0B%*Rh&Y`53iNq3?L2z#EoAY=_v^6w~WZU_JDYH!F@SEc3i)kX$RyGW%(E#FN%Q zuTp*D`;_*8f)3x&X?RGI7tRA1Il*mgKINQ33|hBnBK3sF{PlUXdO3zZ1kgP{`JOdQ z+SKrA(f2*-WmzHRDgqIETPT_+E7K)UJEpzpT5vATYYp%ze)dMB9hLm}!u{Y|y5SmC zt5S2`1=o-5uhcW6Vv5t=zP$Zmp)3(@C81puMB+TnTF7GWYX4D#frk7SJ^{#Ab4YX# zKTbZrV;TRI;MmyJn2JZM$|EO(=Jk&F2oDnk0=T`(HQ^1S%S32&sh=zCR{s_hwrg*TkpTzi{IfPX4wA+W@Xk z_x+0DY~AUYGA-dE8}EF|)u;a{fK5JrN3R3*$Ea~%!Esp&JnG|ZocZIiXM6bw{yux7 zs5hYkJ-+nVaP-OAwU$OyFy7|ptkd{hnZ|n>qJ>|^-s#8Uy`on%Z54gyOY9pHGp=fL z_nF{Rir}>fFxa0S^#u|r*m9uSflbGN-r|Dn&ceXM73A4QWT?%AOCmO$nrFP=Z0|ns z-J;XPJ)2qp!iOdO*SDb$t3>X>grlDC!TNVkMa1D8*y(Lr^qa3gO92Uw1N_<~b>>8o z4OkzhTN8XR0Btr8Ybq6#QECg#MO3UXxDA!!!D?_ORffLn9E@>0_v1EvIuZP zt-*@}f4pyN>VMb65DC&D6mm!#HhKKY6$<^vx3Hk~C!y^}jEvcfd|odqITMmMaLKDQu7A0gQm9(^%kl!N>l>Ko96?8m~x;2y~GW{D3=@38)~_ z*j_6$rMoE^lv?IZa3-()*ko0G@qq19|4T_CIQ7)+f=Uy^L>o%l%T^mxZgl{(6P<5~cbBTd<$W&)WyR>zfjy~Dp2(w|i?IZIvp1&vafTp#= zuW!f!h#B95XXp6(qOEKTcXZPav3h zs6_mok$9|;OguTh9ayN@jG~*`t1 zS^PCG^3B#WS{6}}4{lBuMVre0L!fQWfqrWv_*?T>Z{R4hMlo20brg#JMJs**Azm2u zOUHm|1fJ&7!1sg01Jr%q^I8UGsK+U*e{_G^-Jr8^w$5h1k{7o0KCNMxNF-_LRSZy zO%l)Z4FnyCnrK*{lbbei&<-{P=I-d| zG2!#|Zx~4)M_WhnMe{nnZV&&1VlFe!ZJVWB$!!5as2!Oz|8G3NER&5#Cqu}8i0E}% z*j6~LT%EvIb&6uLzrCTMw`)ibJt(k(YjN3;|AEsMJrr||yH14iB=&^-u^rgIn@Df9 zYV6GovuX+~+O?KN#NL9lr3j+yjloLbdSsP|yzx=K@2b(S7q7}oX5ES#41G*KtNcp4 z(!vwYb7+^4fm3(?+o{6BLM{}}`9pY7Y$AVN#z3Yn|3K(~*yhOq4To2} z*RIi{3OwOpF=3{g%aS+OyZchFEtt4oL|9a!Q0R zH!A0rD9&zAj(UcBsDgb&9$W|OAnA3s36DqYJY~)PqijZ4k$uXJ!imdNcNxIe)jcPh zi$RlBCC4>&i*j8h!=J{wd3k(T3TPg^=7f7;>6o|| zUhICtAHV6_2?z^q`1j${lVy9fU*yY9bMM2c1#b85zl(lGcR$F2Y+dA}?8l%M{T`Y1 zK9^fE>rCJh>F;@BXDavd@03$j)vME4MwkW{*nO#;li1h@1zQ(nqj<-df?AkqEI!Oe z;zsiFL}8S^y7;cX2FtzPj8pSpFY4%!+wj~0Hmq2ksnXkH>c07~s&``$pM3K3gJca}i>3es7_i=sC)^ zFxvoOC*BPRR33B*h&w%>Fa)nhEHGXs-%eALr1gkDt1y*S}cTS=yvT#nr#tR z_&8Dctqsad@7xJ~cj0gHpY{<`48B*I^_q z`dJz>lwiXDZ2W``efWpO5+%G{sc2T?*<6V~5bDZdemt{nc*0)4+~2-$@~Ah`(em{# z{fOq{O6=wVkWu`jF)Fo{<>aR?jw_emPtk^XlltLkx{KctrK?SUPW5ofJ1GiP? zUuW7YWYr>ky>2;YAY``eDE78ca>Wd*AzL@m+o&Ufa?r43s-}y9*6Me^0@JY0QJmp1YQ$DtXq1=jUU6Jhu65>Yy=a#Q;Aa54pA2 z_ctk*599|LF1(U(w#Rl`rT&E(9|%;{w|;#fE#phByvG`|y%0xWFkT+b97(HH;Km4t z{!3&Yc*xP&8|B46mjWTM%!K}2k&LM_+FM9#Rp+VSsw+tZ{qgmr~QTzda1?t8FU zYrEso4C~HXeUCdPNAr0S*8vRBzRh&nJ3S^`hmKX&+C6LR#WZ&pmd#T^HsSD(O`y+J z)8lcGnd9HXTfz_DvcWu=D55`m8+v%EzcbK1G4=r&Rln{LBj>&;l|eg6D8oz4V^@WRv%qm^O&k z)~7z!53&sM$D?&i_Km13(9V2r#jkMnL>WyT2Y#H8w~LlLrgQJ_feG;2_$@+4TYx(C z3!0Iin-k>#|8s9~@_^neLkoF9ATihD%WC(#&hdoyO=HtH%~?;_iep}HYH;F!4g1nr zXjf2I0S^Q~`?xzeaLU{pBEHp!FoU0Fk{}z$wD^EDm4_s16!|z<+g{b_*73$&jnz(}p2Yi+(wJoy=K5 zGM6=PLPIZMVF*=d30sbzzBnBS=%l25nlu-GgcSl!bt5}Z29osVDoe}oKj1AuMH*d} zyKxTY_v-OO+9tw6g-hz-e2?x$Top|=f;|FE0s(}8pdc176RUNt#Y5RpS$q{Ci$ofo z*lRRe=FDSkme9x?Ck8|9OVNS>Z`lDBR@O5*luFviY;?7f>9YyaArlbs*@RA3yc}Ty zB)1B~x`H`5ITh0l*2imnJkTy^U=eW<8Kb1iYR5jc)Up{S|O@ z;7F}od`*O6PiA9tB(_iuQTPf?CtoPBUm%GQ);^LA6^Bbt^E1j9QL(hL^%(fZ@UFZB zT9y9}n(=s%qw@XiBSOR9f)&8G)<)p536dVGj(!yfmKWV_K5;QQ?pSO4{cTKYQTz z-uTNy|86?ePb|mJRe-wi@aqFO8#OjZR^w z1Ob-8!SNEu2f(PVj-&iJ*Z2CBs_JxprdW|&_PqOmG^Uh(sQ_OF^Oih3CK#}l`09W@ z2e)*uL5&ksnOra@ zjL>Lbck-+)@?}EZ_$akOW)`%>5ZY#70rpMY-`~H1>{5X_$xX*WI<2L;?;x!MEhEX| z_6az2fE1C%q+>|4&Ts+jkOH#SdB2yhC^+=XmYUI1OJGDNf-$OnyL;b%gE89J1;#p| zGtH_ffaBHO^Jnk&e_3>y>Rqhd+<_#GJDZnoJe1pelvtUM-*FKr))j_K{zhYv;wP8~rkyG9hK<=MbWDjG{<%Z7$ z0v?kN5t-JSg2U+}+Rckk$4Ftz6d>|FhN`HjbQshFje%-6vj$=rI|UmNNUA)vb>6x@ z&kD;xw47BHA26wtMgv)R-FtlY$FuH2`-l&i3z6KxFpE;#BG!O_9b^m3#Orr3KH{P9 z3!{$;534SQ2kCgSSOF)%ONOKFf?@%dTZFkQKcCd|3EWU_q_r&cCu|8y+n3q%O7YAgFw0cW{Q~av$!+;g-(Fi2X{xLoJId#VcN2jM z7lG^e)CL$09(6@MiX#|Cc6N60XcMr0*?W7RVcnJz?{*kR))V{l!@m}hyv>jWukMMC z#l4Q}IsU=mqKn}tiY|6Q3%UNpT*)yNkXu~PKq^fP-&m=toHf$-o(^?T-4zE)N}7!; zInHaM9d@b|9+uHaBabUX8(_GYl2gOO`}FkF@GOZRx2Hkp<^80zaFpF~K6(mn<%X`> z+2G&FAvPP0ClR=8;!=-ETlCehpnyG4b z80>VnO<6Np$RQjMX*JXui*RbbIxdu~MASe3`H_j+tW$oaHy2zjZBIE84JSzReTFP! z&+XdPC=O1}tLLiTvhWza?PoIHU#6>We#R0?5dx7G_4IN4)s2l4Zg+^D{#p^PSbPCE zk4c)2J~}AK&bCkm`=>BsNha}Q>G<43_+spVNGLW_e=D5&ZPw5l6nXV6XOs!v2^u-8 zesoLE|NN(!zA3`?oi>1Tr2j$d_?nf}MSqBm zz&Sheh^u&S2duj8&z|)dHVMii>VrYi5F2#6COn*;?u2b|Kl=1@rYHD~&P((qDch^; z@YzXA%}je^6c&0a3$6ip(HatI>fRI;T}%98D!LcVC`?VOGg!L}s9 z3i;$ANtiNe%*ZYILC}>VxESG+K)(@sbf5R61?|vk=0N{%P3%d35(MAd2_C zDq7XAl~OSOv#e0A`Cz|4af}`Ehz1C;R)WB4@3bIp!^!vu$h6-e9+K2jp*(|+xjJ1W z%bkCJm%13!dN4LIN^^F8F&_Z`z{eQkM97g4cv8&eSAE4i_JbaihpNSNPF&#5Q z!-$cW*I+0d0GFd+5UImsYC3a1huTnp>evtikN^3h8uTdnr=JiY(w>u=%V03aavlQ7UxCGC9VO$_aCjZ4A%MURl3>#Awg z&8~kEONZLUA|&D!9&Tgq+JSAxQT*oepvTWPEc6u&Y$^aV{G)!U#2V{Oet!N2PQX#D zQ#rF5SAKDU-_wFwpz|drs_5!n;N6y2fV#!1P?1S06qOU=?}GF=sIf%4b?REp-wX~r zHDFtGpx4BC%XkbaV%W7^QuVyS4*K(p9r0afG`b@JAM! zMqH1@ViYcCaz5|>*&k88umOv*bN~MG#=qiu1Ek1@i|HkaxSa0YTIvyV|r%~N^DDXDOWXw!x zcJ*E|2NDDXn=r%QkoioYEr-Pc8y2_NgCjQ}4oeFH%T1)pN20duPb%q>YE$*tS& z9=C~KHT~7nGk?ov*G`wT%JFNbsz)sew z%pXgSpoKcy6Dqxy_JI)|{pxCQnF75MxnolFe5`RurL{k*4e@2_PQncq>gT6G1MK!h zpb2hU_oip5Tb4eFZ~60ZR>~#UWRw3zHN=bl+~|*p>b8Xk=)&Ft-N~kiwECX_!*bnr z@SCkY)}x%%S8JQ=>xyZ^8w$}+Y27S6j`RQPCqfFpZ;6PDCAaivoT0+v>s` zm7+y#nu|h!jDz&z6wC!4Amsj#fBD6DFO~0cD0gL(Q~R*2-m(xv+@@VNZ`t0VrMdY`KvP6~Tv zsC3Ivv-BQ@^v&O?!(5%^Xf{Ia7$(-z!2FkV6SPS>+{xFM-Ig(|Oix4`Uikhr2Xb@6 zX|Wa#@M!N$Vw7E^iF*uU{$-VzTeJXdVxC+ z;5RO`99cmd_YTu0uXm&woC{6+HVfXN(f%B}UpJ^x~}VS)GbP^uBxaVS@H*A_^1I5-y%vsM|+70qx4(UajT`TnnFfz(W20x>EQ; zsaSKt9(G9su(2gU`>*Lwc}MB^@*ZC=bT7vgFJ({64oyzlWDl(=Bd-X2t~LA~qI!T$ zLH1M9Er(nD4+OXUF2)dH&GBoO4t!)RW4SDhJhIeqs7HTWc>^q9zHtHa$wfR3`SfGM z&O#zL!|!KXvpCDU8ro6;+9o&c17Uxl8jTh;^=c;#RX7H1#l?EmiRG>@mnO+iF89OvDH@w8S7XQ{+J(^TTXRXFM#hGQV!5Bw8K{+R zFRNvAZ0tR8j0x$q>>?cF7RG z#=*`Up#_*o=6WkR|Iwkp0{mdlsrXn z@wL6{JF0Cr`7B)E#7j7r(}K07>!3#j{N!@OMrCU+J*B9+&=AmaqV)XH{WYdjhclwr z=agdPCTWhM6Y7NnkWEQEnWOUl;RL40lo~o*Hw)zm0)z=*$pn6F0OEd@Tef=Q3?gRW zPDmR)EGELO8{fQia>wswmki=dQ<>{<=Bfr6KFwBs4cKP@VWPxH^ zrdG8f+rbLR2gKqy3oM~vK-sSN?Y&`Jp&#p8Ow-ILEqp$E1(cY3ds)hQ?L7z*-g-G* zD1H~n(Qc1^)5;9-8|E#$BP|A`XqKPyClhV^JerT*ppx)8!Y0X*qh%Kv(x9 z@$=`;PcCd2vKnC^8pS5I==B5UjuK3?#^jpMf7Ugi*UOLM;s(&`Z9DeUujqi@mrjA$ zEye(~?2GaG!0&0`-Caz8(b09X%GK<;HQRH4++SH%@|RBYF*%^_(*MNgP8ct-3+iyu z8=cgd>N(iy$Z1^4;kq+b)pZYWeorl}12`9ci}%khXmEHNY+Qb07X%ibAKU}h&F|m8 zXGNyoIrK?5Vg`v=(=QO2chMVx7yt#*Ia92`jpt2plBjm`h^w{L@DVlo?4TAqDTAiV z_Gfms$3%78&wy^=GQiRIqBK~stg^ViI5CW6P1^Ktk;0Mzzw89cNOI2 zJF`KRe0qOO#^YeJG^<8hR+Zz|_4rWX`@l_f3jg*)Mm;RE`tZ@JvEs&&i?r~;KQcEv zX@75Yf>o2KFCJ@ecMJIbMO(%s17?~ko93ln?y`o5el&Zr5O#6fS{>z_+}7QGZ^TjD@`pJCNz z-+6a;Ixew$(2f59(J!q3FdU*V1#Kkz2P%DvzXvfvuMaOP7y)Idx~YlDwGN0~N0E0!O{^muH+s_j?EBWo|Kb53 zT_@UHib_8eW2vk=0ttHMOA0}~S{R8UfqBXZ(Nay=WPUSaR;WK4SL(y zwRKc~6H*fy4{yXkdp=UJ-McEMzo7s^r61{V(h&{u&x?zQiqU_Xm&sKBDS5GZfP=is z&AHSDLvWQ}_&#w=G$^t9-3vo(%Uh{@jl8KV@;&^>^z7O&bkX0gJNC_tnX|i_;j|o( zV2nJ<$W_H&cpT+6>e2IA!ZdWz3WS?%K*W%*Bl3Yg$cqbt@hO_Lb1}4Moxk&TJnpoT zFGjCMrQ*l^0y0{{90)e(j{8)OL{C>brqW}wADliA^eqXIBHchT? z9?{qQh9*EynITkXMixPC6QX?-aEmXLlZCcW*K;z6_EyDhgyfyzr)@pm-HwOjh^3#5 zQ6gCkJ(bTGc3qGX!Uy{niS18x`y8BhD*t$Ag47#dcIop|`p#zvLN^*~OHeB%j%ZI~ zKivB)SWs`(&8gKSWj}qN-qBv$a8`VKK%toYxNHBNhbiX|UgVKEEHO0gS#NeEuZlu3 zXd_7e#=RG#*4@)nOcq1rt)zpr77`MgdP>8sZ&24-daQtKq(P6!xw{vz|8P0~sQ>!U zia9NJ=M(h#!mR+r+R;i^vli6<^(gvE^uSdLV1&eCw7eZ?y!5dybJGTo(Q#>SEy<{A zuf0Fb5ekm#H-Vtw!GCt@2cMDv#{-t$fTZj>(jObN69LDF&P9)aBW;#M#Y;8lUpsnV)zOo!i+Ff=Fn;{Gln%H{U5XxDcHhC+f;~gXV1ZTW zOd9DVw^NTj4|Y~viv0xL)PVCYZ3Z4}Kr`x~x50OZ^E4~=pGFvi+KI7fHtPB4Rt;*e{y0-X;s*RFc;L8q-LNtuNnt zZTFfcXU@hI$c;0z*r8E*eXG`;=A}AF|4EQl-R}qCX%Mkv*gG1KMZ%K=?R4@&dk0vh zDlL0HH*Qy*JBx@bBa8RyqiHSxmNkV;-LV-LPC>WMYMlXE-B^q8uCG9Yojt9Arlw}a z0aF$oC{oE*cx;THrvyJhBDgp@8W=W22BaTi#(dyinFy9l3mpybdLAs4FAg#{1gWfJqu=NF$lMQT5EGG)zqQGiQ|$R4sp8*H&Q7NX^uNx}lp#Q(t)9!i&%!J3Mp_at(Hk~c5s00P>kwgCkghQ0WVAxD5M%ANkR0d{J!11 z2hT+uJ_Q4#gZzmIjie~E5u|0T{jM$n5=jmM0s~Y1Jn+vEJinS^veSc;(VW}bcx_Ja z-lw%AmMfrFS9^PKj1B4KF8%-&3c%-mBzj%tHVW}Pl;P{|ArZMPPczjO>Dd!*Tn^WU zr1rjM!qvyPFJ{|(6~Ahd2TRI=OhyrGoI2*)1GK+xTV<5 zMBw=sG;tVI*p#DJ`j60H24VO|(F|qW0$gaKr2jd>qF1+35O${e?AfzcdX15I_5qPa zJ^UE}Fz=mNsj4Cm7Exu3W24XL;a_4q#angIwLfhvpj3 zxG`SHxxBp0e_IjskxprXcH@i(s{=b6hkIe~*uX|kE)7QaAmyiv_*MQOX$DVNSC)o_ z+>;k1h({2X$whOTPAW3H=3F%AAurldTQ)>J=&Q&d(|JiPFJ_B+oJV>i0D>Z^K) zi*a?fdU~o_N5bnXsVgIZL6zTktlT1iI1dB6qAYwJ-)jN-g(eQop8qLHV5F7=Gj(& z^9@5;vJrUak%+9!r^7_X%vrO7pnB)hks!F++ei|V4^lfC&>Lt)=A=vVk>f@}P_c{R z{5x~L_;p!+;5ICrt)|~Zgx<{!!Ove$LBL(&=sSyWx#_ItTn7NaBGp=#BmEjj>Ks6U z-Rf>jx@&;HP!yfSIX=jNuuR{^**JARdyDX8Aj1>wNWfZ?D7|vJ^{Ot{^Q8W3=gc8H z_qt_G7QNEG+kfo9^mV&>TvIMunVwq_uEZXhwxLT8fOxJ7qlP2LZw5@5Z~vnE9Vi_W z#m2??leUzC5!?HRe{R^kR4+eNe9e=dE`Hv7HC47Ap*tpiyuH4%$Bs_!G}SGz*bYa) zOKGIHHDPXGgS!qml&KK@O~a8j>wbN77}S=7hM4fYaQ<7pdf{Z4N=BVkOSBY`>G z!^oodP@C#zS7P== zBmI-!Ew%#)A-n&rHJ^Qc`a>GvOQ&FayJJG@bVu7i#u} zq7wP7KRZoVZRvwXjZ`s6Kuk5SnVwV_ir_@pPzVYNQhm|2Ke@g>t4Gf*Xgw4Anu$hd zHI-?Cnnfk}=Nf4uDBU-rACpV-%Cz%?p0hUtX!ztGEEOfMBxB*< za|hkqGWcTKZ|AP~cc7&NBA9v`5M+43_r0C^DBWCEia2~IKqe+>(HjpDH+|c7m6e}w zxA{F7-`{uF{lD~C`rRi?piX<%*tVD0e0p=l?Emb) zEu33ZZ16t#ust$x%gITs?AFG-7+gKMT`xn>k`qX9A-p%l1#*0R$f%D}D*F6yZ}xK= z3fb(Tz40mf(60FXU6*O3;7Z+gW%Yc(g`M|lgM<#az2ra$#LLFJtxoG|+u9lg{)T|j z+JCitsUvHYF@{u=z&=W8q5K0JAP@y@uHUx8V2h{(R3i~^ix|QpYv`n>uA~g&8oCfA z%}|p2_3PJ+{E;0tW)!#5u!yatw6fJaRcdPLJS%ASP@^{6(w`Mn9zc|jOF6Ti+$ms&5ik{HM+W@qG3_jv_2~ny)FVsK>*~{HdyOT&u4}St@@IXQ$s^8 zuS2zS*O`$=*>FB3L^mLfoF|UaMIMPF{YhFF!w}}u1YvOu#fAT zuLXpJ4D7a)Z!OF~J#fSWY>ln&z>&>484;RmQ`lKx8VU2&uqsvLrimiW zAAq=&s8G+Kesm{o?%6|NLtugeEg;0JTuesDBcsc9SA$hD6?wo(=W(ghMv zQP>b_#L`H>2|t+!Ry6^R^AjI8$s3akB1~FZT72M=D@VMzsEBJ#UJCIB3xuxpx75WS zd4wan90%@iOSH&fiv}3SaqBBC2H@`}&Az{kK~<_K)F^Z=e><=NG;ZLa_f35lR0z)1 zH8uA!V4}TR>zZRvt|+=gtLIG?^~AbMUyXv=V*TZ|HA~X}-7oj+(^Em2cRajn7OeAr z)kQ_yB_OF57`>IpX(}r#)1eEEcEoT#Zn|iqBrML0VQ_E+uLYci;El~)ki?+M8=Qyy zT_&Q&`CI%1TyK!Yj6hz{UpJ`nC4!6Wep3ght^r-TE=K-Re?b(f#B%&QBKqsS+ah&3 zrYmXWasHQ4E2xDMP!R3sKiF>cl$Ox3V#)n~w8CcJDe@SFB{o3nFjgC>ru>k^?s7fM zCgTtI?X>8>BRT0IpaubVJu@TH1o+5pw`Zez}jO&A^uv)h6*Z7TrJExb(QrBgLA54FX%HfV#^^F&IkW;r<<1 zVxm@)C>Zc)QNEp(^RLfLFw*kX@7A!rwfR)Y$%D2mEiZtU5*TBZ5Ln00W=GUV zMn_-hNV@C>01Htf&KKw7%z#H5S`$Ixq z^|79lZ_Zf2&Sw1%=0rkY5pVMR-%au9oq%^)f@+OB8N+6OS8k6oZTW0)@xuxYt4(kg zyw!e&cB#POpocDy!DBY`;of_>6Nt0Fs`u8P_J~?y=B?88l~Vrv)kwSCmvr>|_3?go z4i2-}X0KGe?N?NdvK~Z3BHjrguLw~m-b!Fb)Kn|m5A5Ngrhyr&!mEh+zPkjjf|zb( z)DWP$!Y)5lAVQ%WNqZROBd?ZUBC%1B}sk1pKhk#ZX z2lYn~FX_Ww(ID|T0*i`DvkzMZXhtmpmzaR|QN7#rbl_jNXTFWT+@{q(FV08R?PHS# zh;mH-{v&U#FG|k2P{rBSw6!Q+D>{^7lLumnKMGt^EnQvVrwCW(s^aL*MX95&nSXxC zBRg}~DPf{5J67*rqwlMVe6#9*%WG{E_+1`g7|VMS9Hp^F8QQSZI47kC4i|93UE{#X z5K_>iN(?wcED2+CP`lnvK|y$?v|Qiw`fmIyjFR z+?4BlTn$KPXn%xyYci-kJz7>@OZ%v(Wig^kI4iWq91QAt>FD)rP*v;~yEUi5MC?+# zt0(YfbbOqS2_Elbhd%!#8*xu!OINM^5BmBE>a2*DK&tNMx_LDH)l?>sgnY3K%Ce3A zhea$;C;b0rB-L6lTbbgQv|b$G7-lEya^Ta)&%vwhRXtLmaqUTWFMa=vPU^Sshy-dQ zX*+8%Q5&p*EiNh8U=`g5zj{HyIzE*=t4(RSN>+t1LhPL?Asj6h4cAAQS+y5iy4 zqkPi=KV9=kZxTRN;-IPxH0gIhN807w#iJVQ!fzg^v>D3EL3(7~?msB+G2X5;#Wh4p zMh^6jAUy4$taW}1NGEbW`;Ey(gzxB%SM50s=kdY)$f4%(V_!q^=tVGjl03#=XG z0@XFUs%jCms_9pi@P)=`JBa+4>70)LkG^TxS6i z#LsdpKjm~tR(3M$0`fF2KO6ubi9>yaBdDe5yp(c!Fty=K%Q3Z~k}i3rV4=LtKXQ-D zpkmF%l$v_M(Z(t8UQ2n}@G8K9`r?tI1JwMf7?F!uoMD0E_eh@9hMcTq7>tN-!!2G& zW_a12)^q{|UUt3rRXAz4~;TMxwmy0&nzms5d6lWe2Go5btE|b z!lU*Q9GJVTGQGMh)VH-2AKulO`FQbPF9Jw$NAY;b(alrmOP{pnHu$kW-6}rX!qLr@ zE8oJeAT5=3Sr;K_L7=40#l!Y2Zlm8W-?YAB`StssPfsdb^_S$?<7K1q5=O&*B}wPL7T^__j^qHFBrnjot%@AG)pTCH1;-D`$uaJ2je%v8 z3Q#=(HGlN2ZhUxfZ(RnAJ2y9Q+V^<-^?FDQ-I&i;`_H<{Isa=Gpyx9nvow}RfsPmF_*a`dt-jn|f)|YjsTd1F zkZtb_!OO=0Wz9UXS(>1ii@D0?L6cz8ZxK}qRJHh5Skxlu^uEJXbFyC27U5OgU`!R z;|hPU9#D)ru*bfzg67G#-iK5O79k%ngtIs>{z`mn%bib5^1=4WE>zDjxA4dypJ~)~ zEL`b3Q@z;1*;Nce*pR{K)$yid|Ax08-C2!Ty0EyNi0?|TsD+wVf?8U+E2#CU8yj8T z2j;N=*A#v`-6B6Nn-&w|&~UpDQ$(avd+Us4wUd{F`@;8YebH_lV3|*3RNP|GQ+8FH zIM{N<%6)G5YV!Khl)1oAmz0x+q5(=c3t%-%a!@<0n@q%UBz>EGia4;aL%6@>p)`u` zrTG|Z?@I7FwiE}ae)2DDHTeMg!ZjmfRQ1gN(p~rV z66qq5sk*wltLIxtMH1P5GexRA(AfBZMmqtg`w4_rga)6HtUNj$$w*CC+aFa#&4J6^ zeE?5(&FR416dbdVkDuJWr>L(*m~j2ZyCDszTx<+9eIm_7s^2%ZVTg-hs%*OtP)6{5hz-UrEB{ToX>&lJ zX@!l3FWk4^(eYaTqO8lesRBW!?$^nqlFk zgF_>S5dDfbh+@lY0ozcmA~d4#2;ZthfD={j<9N+^1y_yEDc zcEa>99}a+yh=|A7#L0Clv2O@4L{A&0BtHGe!t!ae0=zk28>GCi6b#!hE&U3 zR)Z_AxH#~M_M__4s{lb^;S+hpp%xIrygM9dvBLV?wF^s=5*tg$Ync*npC4h z$J!8cS!X#`Dn{)5fWymL8UTugB`UZvzBM=D0flH@4?Df>Fng0YZp(DjTW6z;CH1IJl}^35m5`Qy;hzp&{hoq$WJcmp0(h`*%i5vZ0K`wwqc4G;5^cP0`o@R?sbZiSPpk-${w z#f}A`1`Z3qFANO=s;f`pN25;hA*)au>#W7({E6zgURrN)KtQ)xZOwrT;JMpowi3K{ zCA83bj!Nt_{Ct%1Y+`3DSMwR8IVnJv^(>%S*;i6yVqCz1OG){V~57c3k_~ zYn|&n&$WiE`sZ+H;X`U7Jc_?^ahi_}9q~An{MyhYsHK^gjhMCGy7wEmZ{N3UA|m*(oY}DTxZrvl zYZrv1IG<@h-eI5J#}~)f4Fi!vN5{v*L?pGIVe?iwG~>-|m}57_!+S{D{-yLb`ds@} zRH}VXPfrYGqEg%hQ#NzL!#5Vx@8Rwq;164+B_(IhPFqR}!4}449Nly1j08Eiuw|_A z8jO9Ku9d;?9TC4?$Csz8r|3qg6w4VGJEpz4k5N>DJHzcKkSm;Z5nFx4sGyFyPw67B z+_=;8?Zlw0TvI$hf?V0L>IWs_N>VNJq-9#2JJ`q$IVYCWQ?z7MC?U)}C^}}} zTk;W<&(;7sdYPTblw^1G4`Q^qd2E{U~F-*rd)o#5rTfU=$kg}_=*UE?frLY?*dP%mRj*HqPgcw zDKd1*anR#JdVfOv7aQu+ck}HE)I%jr<}Ramnqxh^y-hSy_@0iyUoD-#w6VT#xgpV<>S~YDWzw)a#35T&izBID9v}ks^_i5EA&^Q2`*M}y zqb(M*eb}^|S-KlRVRsuNmafE~OQ?J2^5QMn?km|CPl2vsj=c;Vuw; z>3P1y1ltIOa(Cs(DJC8Hi-kmM3ejWQ+6afc9@QSr;};FYjh8OQ^@^AS@>)NYI3o}b zl_h}IE$y4tRI8Fm9D)_1+`y!) zDBz4yx}w>obwX-x5a;5%rwoVWmV6F9)kC@YHKwAOv;}6Di@M*;z14^hf zV5{lq8P4awy=;Qv5nG5EYOJXe2fHGVD!pVUmQNk`EEWZQgLHhqIQZok7h6LOBte@t zzyz)eO-c0K)Y^Ku*Sc`+b@qe4Y#OEW&A>A!doP){lP%pFj0A zIV5_D&bg0Xw?VYXeG~oA)DVp&F7N^49#%p^ZLIr(nES3xFDLlaf2)%&%KimngF0;D zwjM))-Pr9e^gX2zWq?oZzR&HTah>6+c2r31F{I!C@zw?FtXOpXe#R$zIbkIGL|u); zxR2snzAW_mYIdWVJFx(eJP!+7u(#Dk&VJcDIbGHFFO|U2k&noDGQ>Sr#ZpBrd93pj zt{yWhHI$QdTuG+|R#+Pt;rvu0WLAz~FQAm~@@VYXwB5)0>w-rfq2V8rp11;?J)`q@77bA=SsFwnMK}pG(uJI8M(9;?FX49T)8A zJLQJeQimAF&3Ojm5U-+_$}&d39SYK^WFGb$9fwF`E*Tpu&gFc9LH|5s zR^#Hhp?QJ5f;~e+<4ILdOu31Jbau>#yZDk@J%>|fuG>#O+5dpr91lkr!Nd`=DA@0S zV>bq*m|`2EB+k9?I#^i)y9;9%`gNVF8vt-xPq0|Y$Q;NrErJS*S1-rt7IDpq$(%_b zBC+ybL|cxkcfzMqb*qx+9F%x7tN+>wW>>S%tXUU#UY*2U4<0oU1U+ATBdP zNA1HYK5xp`rpYLk;tta@zQ<`Mp*X6KS2Y}k|2OvsCPrNOK&@Y3gL>*^9)E&9!M_vclh%Hh%ksctSW9dyE$4I*m)2iSH~5$vD(tz#q&X=GH#8|1hU<1~YaA!Jj(){y5(~I( zRm8C*labk_)sVHm7gz`aM|A>CrdA<^#zn3Ck@D#C`vYPPV$oV7zkhF+7GC1M#_Iof z(RSn>{4Y7Ve_~|*Y4&wWpA+p%M?ZMQSST9Q)88*6Lt{h{$yFUp;UWeh*H7$|)Rc?( z#2U&gu$-+`S1b|IlV3{v<*nm#y?5_?N+9Rr;u6}YGkzVKe{cYRf@riGKA8zFlbQP+ zD5>+i4iyQtAOsNx!deqy!$2dE0Z>yH%BRK1$XYND##e6*RrORyDgG;CO7Xc%W55aoPW97EMo;g`2N%rKZyBF&Ns5Cr}2R! zjt3)^B_$CN(`CH8o&g&gl0!l~EIY&VQ~Yio{L~XH;tIu|AFRK4ZO1*YxB=dk0^z12SbM+dCkXc)s zCnUb^D|bHk&3Fd_b2ib8eC^r#kDMfHsRVRzj`CZ}i0)D~dF$bP4LzeJ_Nt>x@YD*R z7bF3Pqyx;#A###=(vOKhvwRX#lL!f&jgd-aB*HV1B4nXANIKwl-$Z1sKOXKt`=?qP zY_ZhyLCDvbFk3-ntwd1oH`m38?6QoLSsR{5>BiHvJYY+#E-!PyVz;Gg4}VmQkB{S) zwrEAa*nW;jqC?};wKd&n&Od_ZKFM|2Ee~)gCbaXu(#|}yml8EI3c!e^(B;{b-Ls3+ zgR^$v3mSWmtKyQDZ=wKaYc>p;&G$+@QPy}{B1Q1OFiLL5xTtkE<#f48V-}9H&%;xJ zy*Jy>#{OO&E-sUiv$MzJkCi&m zuMBj{P#n`(+xS$5rB;hh-QWLSmH?6E0H=ojj zZV6%Wdhj{WMf*UzY4V(?4cWj8x>?y0dvlL*ix7HY7HT5if0U_Hh*lEwhuEx;^M0y= zLds}AIxxh$GE@~n#tL9(i!n#YAY15W7pPkW(f*ZoX_h=aW3I~tB)uT-eMY$qXIy`J zBGy`_&Ln;Uxl;zVt)$ASqVxB-fQXf|=sL-+fLF5*?7!R4RLbr}zTGpbL{5t9`07r# z)Cjf1s9_(c1HWy^K*P|nLtxfUQGq(|@UFaA9e!s0bwqeH?D=e%>SWw5$*?ggtr_nMqyGkfj)tqL-*Vi0eX=o;H zWfjP~@@|?ETwPslCZ*(@Q_U2A)L2%wksgjBvRHf!cdwfh9SujVgNxFFw#1_Mo{BTb z!I>If_I2KeWLHN1eu!izAbDp&-GMEdo*Dv)0>wXiZUp{k>XFK^7vj>MYfC&U8oN}M z>Eo->FAJ>9;Zo-(CJ5>AFQt=hZ`z-N5T649Cm$M#AmO(H`yduxK41DbjWtS!ozb%lL8IH;@0Lg`mEB=p2SJjQY zT#LoKAW+IXjAt?9>kUc^@IlVvFg_Ty^n9K0nM}5g%-9KI;sJAxb#ad}dMkz9i|PInU-iq=0M!^jMdj2st# zRMbo>PXES<#T0lH#QFLas;3cSe$dlhk0aY%@qM+%sw*z$){h(fdv67-Tgulw^6koR z-%(w4n-{*N`9%_$rG6_AhlzTG7Sw@1>G|5wLs}=CT$~YwCJ`OUZzP&W}rz?q$( z&aHB?0lXn0zBv1e+zS_byA>safkKSN-^uFUUPkcU!Ap==YL_PpYsL@Dc`T#>tFtNr zYW?|QAQrJ-(-p5k@f`b>+b*amx@t@}Vd(ogIr5*v90hyi4-srgZj?*Z^r=yheT^b-)ZFt%x)cgZFx^)5ls2=V>9~$TH zGW*_;^;BJ%1I`W!`GpUI6l6Szk4eZ5xXp*begHT&*-;}DH$zhycg`+~KR?&ZX0rLr zqGy{X935I7$=&aNzSA*;kfG;%^ha2vKjy;Y@yAv-@0M*T2>L&aLace}h65CXg?wvk zSfNJ#7y#Dhof+y2`2uegzxirA8>vG5$YMt*&bAQjAa!S zS2H6ax3;jBT^dtE z0}JiOt_Z?etVPA%va)Jp+72^P25YV}d}#N5>vzem=X|KXTYNO=6oUGsew}U&A_hW; zODk(xC~Ry0=vT=bPU6pe8q1Z!$;NHkH2zbRhsl zd1C1AEVEMTQ(o6(Vgt~k$ArjY&=UqExPc-QXO8odfonVs2Mn3hFDc%J4n!PE{EWcu z=uu2gO!*PsZs2zP;pHp8YFL&GL!>RzLJVPLWCLnx`I+}P;u2ni7tFm=TPJ|J)nc-R z4b`7=;`#bRF43I^VJmF!C+^Xz2#QQOv>=3(THS)qwVZR`-ACQ+aA{V6cX%XzgYWYr znLpI$qVHkMl|p{M#eW7v z>-HWz`47LW(o=QA55#3$K_igj?@|%rEv!I;_u@e%^LFv*tO}B((+kXNYBFJvxmUj! z*UCD|;9BF;Ihw!UlQw-Ok&EqNm9(`Jt=Q3e{pqwZ5(({_yE7z23;RZGWVwh-!Tt<= zn^LKp3BXYI-~Q5Oj|54=I0XdNZ@zz01K!8>|2zCIO9njVaCe}V)psYZ6%br&2&6#D zU@c3Z`@~|_GKpt+ExzYQf>${AE$UibL4ZQFe&9*o%~m?*83u^j)i}NP zokHq1hnxYQxG5VKhds6AOXKY^jk!0N=tCogh`u?tA)zaxkJ6w@`y0=u)?N4OLesSi zmgN5V4iuXCbUG_Bk(H`OrMv{>fI;J?Ppju9v=s%Rr*D=eQxz?Enes^m-lH@!IK^Ye zDdp?wW!Hl{FX%daWVIPM1v|lET8Vye;PCT;!^?n{!n5bkSvawK?+Px?)3CDogrk;A zIpm4?c@A5y#B7cgy-{U(ZVKgmsTUh$C|Bi`ist4(T0zWDaC3k7Be_APFqm!pmX)5g zWjcFd?_`#$rbXC$+x+Cu#{|+U(5_-$vKsK55*vL4g4lFZ0fwxTg#WbPs}SsgBz--&<@Q9R5N?Yvlra zZADrISxwiJ)a!vdw!q zo=A4x_g~fFHY&m8TI~6s_G}DmwEz?^*jV6+`>O8B_`t43Elp?zK3+48GZVon1KuJM zI9QVDKLa^uM|-|bus!5hQj#4|WOL{75X}s&nR~jW`t4`OkL8(OxL+Q{iQU&F{Tz1ip<*JRcWX&Byo_u}hk@0% zYeUe>3o0G4Asgz2 zg5j^WbfC|O`a`_XwJ?4I4}Jw(^VixsO}Av%KlMxN=q!bI-_PT#2Uo`jd@@u(o-H?~ z0G-IB9~6|$U@bECHVPdnK<==XU22bpyK^FAQpFfs$AKD0|A%L3arM9fVgMeIV?~Gz zDcvi!aJ&SYk;z^%R+@Qkun}4?ssYANti6vku@QQiaU%CZ@(J?vocrw*_O`2n=(%c* zhy>wpe8PYOdB5I=mT|3xoECuNVO(hlBtiNJEUXEs8ND(Xc6;+e$xab)K~01>SPUI5 z3@}-N1(9#2Tlf9^Vpul1_Gf2Ryw;~K?g;W_ni~596O>Wq3tTcCxSQ*<%<;k9Gx(9Q zwA+t_(g)JIF5bo%vEa!n!%-qi3VBbg*1tz4{>EJy|1fv(gXwGfZ{~l#t}v;R(nxM6 zr8)ui(>n-4%2lB3DSFGt3%p$x4zfpygDlnJlUf>-;@SCrcJ=q0K{M4Ocgdv4Z{W=5 zzWX{2N|#m8t-q!Q^@VXy>+9)Jk%8spgTp6l^JVwVpc6<|fcEdOu!x8>DdC1Ix7_k# z)Ob?w*!G}a>aiWxFqU_b-J*&S#8f;s&5nwVi$8GLnfO4}kjVPs=~-D$M7QcyGVbC{ z*%ZQ={pgIzWbD=t2F=L?$E<=Y^CM<~oQ9ZJ=l4&-hU9=3?T<@F`fRrim}7PM9Hb^5 zpr;H<1G(q{SrhI|&jA;FKi!=FH~>H~Ar~W;okT)slF&Q74vxYwb6=NArPc!C=YD_) z3-W6WPA9~|&GLAZS$ki_Uf~-HO{P_Qs^j*5}MzX^(wa;WT2oEECaO+rGVchFfgF~8|=~o zX1kPEes``sv&#;(mA=N8W58_a0I0>DpJ5bkQVjiy?wes?4g*DKp^P9m>oF9BN~L;I7nmuX)(a6bx@TX{uQXmlb^<%T_dA=s4Y^U{RTs# z$Qh(e$w?Z@M%hsP*Lh&u+( ztQ6F4tOS6(ciJ!~x`391wQ}PB9>m+0M6#Mz9EAa&XJ*KGdgwsY1~zOedrMPZRNMNC)U3^O;?n^!;fn+goDY zOLRCH1@z;WlMP8-_>#2LH*gXFw>bb8`jFZIEqg&uS2(Rs^c{A#wzebwADf2Wm#=wY z-T0aCU!Q>iNSkUPoqkn#E!#RYHr7DUS}(BROJCzK~GIX8N(*`QN5rpZ1_lmo>2;s1vvB27JMBvuFVjlB_9pp z>0QTbFp95*bl?fyDaaO-2wv;OUVw0g0F7j}<)ma*8$;`5h2}F;SbAk+`g4v3AF9$T zKYykEw&Z&20T>liTwFmu;LU=lZ^NYcc#6^msttV|AgE)2J}%TOU5!fBVL`b2bSb9R z+i9CkH7K%&p*{}BO(au{5?gIUhk?~uPZM$Yct0(vA63=p5WEWw z*Qol^TV*#lD9LO*$JYZQ^zc40PdR?84wJMq7#@0pRo}XGR1$14u^`%K2-!6JeuB&I0hE$- z&~x9i(suAZO+(Yw-@|36A2ej0)g~ro5kO{iey^kiuJEGWc7PeEp{c3%%a`3hhlhtz z&?Xd{x%>*g@4;+Xw04RGkW}LGnh4n1UMJ{-rQOZ#M`j1}Tb`G+S}or})t2uxP=%b6WkVDHB@ac26S2D3)Q zXl@JROHZ|-z}({1o@HZnw(Yw<`rlUouX-8RHS_1&31jQuHoA`*P0OdhE&=cWpSTh< zQX@qryG|0FiIxm-s!$ivDtOl0*VA*xD%jzau^K$2qcdqs-Chl>1zt+a$&|u-^@Pq+ z5J$9|2-3cxW@BV&C@(EPAR<&3CfdCaiesMEza-(+_KtuxM(S|n5H14HKcyROT*bZE z>3d@|pt{fluA!T(X9z^3?ss9N5sWD$;R;(!{Z6zXUuDjK7v-W4^t)c+ zHgb(TH8E6i=<5mG-Ho}Tk*WjRdze46*qonQ^+`+ab4u&9InkW$zsYYZ$OcT7jc@QN zUCEVykMsTQ5g>{@SgtQx-pIG>yFIFK-Xs_P>zz_cM$48rFTXrb& zRxOsSh20N%rlt4g$vVXQi;w&VD=*d@HXpBaJ_n~YFlr1Yp9i)Onv?kwmtX$dJ7EAs+b68oNKn*XQpd^EVTore zo=4@|Q4uT$DCS2qOv-f3`Glm}r`QUUkwLKzW{s@uOX+8VbzFRWSNU_IJc^fK;|GK0 z%t!Sujm}QeqghQ9k*VhBuQci#8y=s2SJ#Zw20D&@v2I3wzy15fZJx{oQ?YW8XxBEk zGjYq@UR6m)$3x@jiXx6u1pp#5K+fPnBpt&kCtN*WbOAQD1J)}>?Bk*tYDS6ypQ6BE z%hs*_mp4PyH%vd80(Ym1dwIo4YvsnjBbfv3wM)|;{zyqEJ;f(f#pURxAm8T)+%&bF zhsCYa&ZX>azaVpo^Ybypg@ef1e+?hi=~9P3h#{(!{8X|fsnv$d0H`IrOknSbr{^>Z zkPP8~H6wtYo0@`sUhI_PrlkNuWIQBzZ>_N`StG$hkq<;DMtOvks11Enbq{SSVvsm& zWJqc&iOOet}?!=QN}Cy|yx- z&-I|9ZI(5AARo$sQ7QWFv2d`d=#eTfl&>~171K1J5Ah`xrIPYvP-Egi&viU_uhE1j zXSi!bp=8+n(U}hODUGHj=v9$7nSP^1P6o`pYv$4}3Rjmp5Pxma%H-H>?nV0LnQs2b zC%Nr2gv-Wj7kgn8>*MoVuMKx_vF~H-RZ0LE%aX`aV8Bx1m0Y%=>*4ATYD} zN4$CaA1nqW{_GY|zEDFqN>(o*X^4N?BJkY2LIwU4O~S@y^M+{GTT*M%(N(`j4Z?${ zW%vJXF2B#aMFpVi#6iqI-Jl=*yx9EhWowK?%%|6haa=uyOW=jK!WKp zFNQ{FKY_Phec7q5t$={bo)&G^_w|8s^=howx*p|1uv}BHO7ujNUu}tc&HI`E6UuSvw29AN6a|7eUP3UYG;>Yf=DFI)E)4TW;rD;(V- z_Ijl$8HH=B4T0o>R4l8$VeRNA2olUA+AIB`T)i^8!IEL#N5XXjK;|VBDNkoo0Np;^ z@DRm>^K*X+*%-O(Fx%I_$M%LPea56 zV{l{ljTEbtm7i5NdM@dOCZQ*LEYKn5M4D$eCw_s{0f_Y_N8<@bj&1oAei3E_DbRc+UO|{bRoaA{ELH3&0$=cxYY`ZPZiU^zie;#`QDx_u9zd-uXfXx;Z270hfbl!DqCwi9Vv7mySyHc%}u6ip3c?i#iBSeeb_GISBkOsi|ex z`t6{Q!)K84i(|1%r8!7%aD<~I-}GUJH97!8ubaHJE4CoX?Mw?9qTb&oA49^3f76P{ zFiJ>h<89L*`%@~{da^QY{O@3K;0zIjZLaNj5B?Jj+PzjcLy12q);LTPGkFSsWhAry z`S!`+cfewueH!5X?Jn$_+0X-1vEpfO>hIXpxlEEC@ZyHy0VU_?O-q||EU@bd4ga$MZp{g#Wx zpf;ZTj~?r+OUbO9%txv;O{M6P;e-^!StLcOQ200?o}G-A@RkQiM{iEMP~UKqP01lI zUoEFfctphee|$!q-x~fIg>CkrcLn*LgZ=?^cuN%EOih9<==iweS)xGzA%nwf9Qb7W zjYPHpFg_lCpUT2RZ0bSR5mhbPMykrq!`xli z?_UZO4O-vJb>NC0MeQoicEWTSKdt$mFnD@3iw)hW={V7LM_&9B?W?gmiu7&@vXtk1 zAFD3&rdZs?j(^4X>&Szsjkt@44Bup#WCsuaAp&&vwNvn7H z7^MH=&2qka7L)w=Jh}f^9YKB7JaV82-+#qV?XPKGYUQl}&PCeQ)unX$X^cepQ2?=d z6fLIa!J3;1Mh52WUcq-KG}L%}&%va(fdkpQ$EuU4dmL^;ao+?g6l}O#{86rqx!HybIi6Y+~Yp7S!=8p)DL`HQ#oqk3KiN z`@r?8F_b+L_^z`i>+5}FmxOPHiTd&P*+ZI#g>(=T3NzW@c`b^-J@<{F=Lww(DkWFj z(oks?mnU}SxKQ19mki9%jNp|#kUv}GL!7lZC<*P;JnxfTNay>Tnwn0rKrN(+D$2Y* z5&S=Nw6!yEXHM&O-~5W8YT;y7k88TY^tXkloMOOT!Ev+JL4Fj$-Cgr4#^wpCLLJV> za+(%~7(aA#G&x(oq`yebP*d$=3;CPgxQ1(eOMx=c@ICM^{j+98v{6ZuFi0Nj ze(moQylOtu%gfWAHr|;G4i5H;pVYR_`0=wO)w?=prW$N|PbRJJAv7AJgjh_7q7(8_%Cc`;J9Jq-L$r3F(V|YF*X0x zsRGl;MILreE6cT+H1!2wml%-4^64c!!Q63w8Hm5GB$sqR4leX&XyyUm%1jqcDcXYy zIr4}>W4y*`+5SpSL|8bm8yz9PH1aldPE^Uy-|QV|zP}+w(yDg5g#hnuIgikEvIkH6 z)!F*PxiFh#8g5>(G{4wARqD!L`Spv{ zao>BrvZJPBnn4LhkM^$}S8GSt+sfK)ggWF^->*sRqj8BDznJxDni7Y~x;Dontdp$s z_R|z=fzc}uzV8mCt0i54B6zvt=cU0#sFLIW3t@~TL(E!GQ7(Ywm)JAU2E<zCb z3QVk;>FL$Rr#iW=o#I=BIE;%NU4B95adh)QFKVsC*uWEkYcq5OfIVy>q;|$|dGxA& z9C!jWU*fTk?(Xd|!af_i6GOygb|^-n&pOqap~4gc2at+3Hnc7{uD5?1EbhGqJmMhiSb8l}+q6X?ja1FVe7h@!Onf@V^q(~c zpbC*uO?2x-Bqn6M6jaBDNO@AnC)QV0m2GI5O)xg>KCuV&C=OQOLQ$GDXtvtylzj03 z8$vvA$f`G8-T`ZJOP6wi2Eh>bvxd9LbjxdPb=8xt(x&@9GeBeB(V;I$f-d!h?q0Nm zS&yDKZnCjv7{5)tM=5U*n)S9MCe>j1$*Q)s!LV7VEe_HOy*>&B0^)pLo5mQ11e*?) zLS+6>F#AJf78?EC+?h>K9TppT(K2PR7!eOR9^|WvIovwZnJ4d$zi#?!*!>U#?R=|k z58XWe)y>@Q>b3-Z83+b~nR=FLe-;^;7FAFUQwdfT7mIva5-?>iD&~6OsptBE&fFRT z<*LOZgG_0d?Nf|~z#xPB#%KR~NCl|QgV&Io>~?CtkCRywPaQk(gGGiu#q#bcV}S4X zfMFTvFQqN@e=W^CJqw9u1fgsJOFgg5*Y_bxfaw|Kv%=aOf^ zex_}W0@PWHJDm*->BPP~C=t4RFQ&uIsW|X$|77J{9>{puF!PW(7AY`EZvqsG{k=Us zjd^QH|Hud$_RU}uU`88;ZP^#!`u{lfVIa6Xx))lFFbFwL2trQ=XF55 zGkQ~=IsitTZFYhdgF9vp@o~U$h3#x@CeC>>f45Y~hPu58?eC}BWwChkY&AGA1cgGq zNI-FD!HmPQ&O$dT%AmVI_4onC5ej3k%AWaC9?+YNd0u z?E?6)Ya57JcyXJ@D%K$X$UZlEMj^F5GlE+feCpsGImD$82wxRn9@r-WW6?F*xm!|N zD*4wXqXpKv0&F4ufHS3hT{&o~qw`nedfJBjCc7sLv=3Nq{L8ztUKD{ONz4yszP}X# z^+cUVqrfLeZeD5Sdt4BNm=dbU`;};EM63;}DBS2ddEKaASZ#nh;URXjgakc zLm%$#8Bn@{X^uR6WCOUst$FOm&I8 z%YwCUO$iG@&d06JDblzQ7K3eCJ2J6Raf=PxrVmPnr057Ho zB21BIR<1iV4{_f*xws6hudgQo#jWk$$H#9~fxTp(e8=}{(SjEX%G(nzNRZ8b)jt&o z_jIR*IF#q_5BTK%$uC|d8n01-xien+Qw#RPwy)J8ITk0f{Cg%C>}4PCN^J8wyEML= z;VepnfgHc@x=K3uOG4}6+w5!U2a&0n@x*`=t0f&c2f*J1ICC%{R?~wdtt=R9k%2~6 zz{v`V;7tXCVCa%$zX3=x`gGrf4whqG+u*xRRx-+ zYB~fTyJxAoxnD(J0+h&R6aQnick<(8hYeQ+4Y=0r&I}R|BTQzDJ_MM{CljbH5 zGv;HCabE^27zHfGVn_j(>nC*%hckc%p2%*|kT5;LotFyV6H$ALMZbi4tD#wvfJ-~@ zp16RXr4V2WQKz`3YS~clU25I0CWeP=^nuYNpvZKq1yy5m6C(P?C9a-t2hiR9#<>VC zh$%RB&Nug~$4zk&iN1|fk1H_im;{nDW?3=se57yJ#vhr@zc(qs%7!Ale&80LSd_$> zaDT-xX0n~h4T-^M+ zqIm#9+NI^6KfSLMmtb)o7^Dl}_;dc9tk8^#gAJ*@#mwojpwnuzCg?D&~B4?tc5>_V4Ni1j#* zIfR74&FE3a`eV)-7O7n(SDiGrb`=kL48Nn*ez@O<8b9S#Pkik6=n zf=YuAxQ`zOmlbcozov!?W5;%IvyL6E^OH$EhO6@*SD@w;SHe;YU?cQe;+i^t8*zSp zAdUrTw9VZl8+WFef-b=Ef4l%G-gV5oeqi`W1YNGDfe&O-hrIgo=d=w7jz@NgG|Lvzx?`~6*LL7@y_XEH+g@ED9 zBG9}SCe-$=T^d#8`Ax|@pvH1`yJX=1c60vw6kc_B=&K}7`X7ELwE!Ce{EmZTk{~C6 z_Cqf#27x3PB$y=JZ_MYkrh=abhSe05uL=IXcuoi*7&J6Ab^sSko~*hW1#amLkU5_M zDhAMu4T97}flMIC7`*x)-sXg8z~`Y_4Q2<+_=fYRC;o#OC0MbdaA*4xh!(#pn9IB!itOozXhEI|jJ6V>gftC`^HUI3SJAKLAICINt!SjD&m z2Eq!*<2!UqB2ep3!E6&m=S4^EMLrN^prIGa76@s~m(p6Wn-8D$ndgy$Mo;U-<68tl ztoV9y34!fX66f!Z$I|j{2N{AUE7yUmi!~wAOAhAbgl0fVWTNRB@n^GYc0Xvo%lNK* zuc7>ku=U7N*`dZECI&H4Ig}_Y$b3-^bl}XVdK0)FoRggla9m}`PQ#81 zh=&-B5RUq^XKDZGBL1BXJD+sn4{)fO`jXrOEcFfL_7ED7S;>IBG=9!v$2U);8_rK; z$%5SamAIAkmb>c~q4T{IIdfuIoi>O`GeKG#1`O=-L!bz^_OE$I-Uqt{q#R8&42Vid@ zj{Ng{%vylrwXbc$Sl9FCzRO%Q9;DoNWwV9;k;7FXb1AijW|76ZQEga)wOOrWRLg}! zMVY{?O8&hW5IYL!_v=I6a^|XI$8lO2sj5=$ zke+T>$c})RjO$Klkqj@k_xOK~R__TXZ7f(Oc~*eC#e#|FbUo zCLemxm0h(=bRbS-&fE`GU4g(3bvTtoflkPB7A4}d)=}oKu;St=B6E!lpBEgIz8b*{ zA6WKo5oQP@q=NjIy6-iK0QQE$42QJDD)FF8^9aYqlD%-#p|$9sD{PB)nO zD}?QKyW!sxnYE7Ni%V;C29@R5hHHJ`7ylDio5pE2QEvUXuAUwVN?DE4sL(8zH{2oc zo#nm$+Baept`KRJAz)Tx2xZ33i$WucXd;s z9I+AsSuggsb)?~oC&Glqj%Q@MpGkcZ$It?@od3$lLnUCb$eo)| z`j6xg56FqZJcU6+PsE-INregmP20W{ojSO)JJ4Oo{QS@D>HE*6p?gFbZ`K*5?!d{<;TL8|H-nob^SB=6s>bu0I`M%tHT%ysm#OqOc^E!NI}6 zu#^H~uxrKov_j;(IJSK&m}df*(^~AeXG)-txiy}GWF`qUZc8!YdKI3oCk+IzZ$J~g zj<7vkNcPR<=4U-B;VB)H&s}%qpQMhr=wr$?MK(oQ9%kH<<|7|igUtPt4lVh`!!rYa z@1#{2dX;Cz()$MZ>vq~z4dNG;mcFuDe5RJ2dcxZ>eI;j*MmOeCbAy%NvOQ96!ttnL z7X24M8XwL#baCNrUGeI#4!ouP3LAVC(mVFT3(C~+XDm>!AazJq$zfycB4(B}rq+FZ z)M}gFKnQ_NsL`-H-0qN?N0a!|UC6y5-eT)MCcVd|8s=R+XM=G(s_AU4DS}gz+<64? zKP#e}Vb17il_m9rfa#A-_0|GSq|op|H6Lc-LZ?r{c^S7BmV)&$=VZ?u!3%Sal2jt@ zBTT}XaP$&DzI~zEXu^vr`?4>}g6{@?W-+&QEg)GEkBzuWiIg7C&DCIf#Sug{$CjE{!zm2G@){`Nv6 zMyG_Ytn8o#7dpshSbXvO7W_BS%u4jyjRb=26S#l1WHs>_Gc}PgR2W@NaBovf=iuzj zJM3+ks7lD459#R=bh7?0`~u|Vf4M!}*YCaljR==|W56JW_AG=$BjD$G4%L_b%m;Cz z(R3Zb9}Eo5f+!$GmAFr}Iy`Y;zm$^7!p6MtIZ@O<=- zXC$sPPJkU-8;^>&kBcT=L#xhisNe8zb^x~r+7j=%o$m8Qa1D~=VMN%@vEv)UDJSWm zv$tQbRDa-Aa0{H=r1I2Zp9DhQaJRVgEViK7{@7m{)A|~l1dMEj@NV4mY&0%+iV>X+ zRX_V7+)%zIQg2)y0VBc!colC(8amN@e;}7(`tD9;a0f)a2>RR)|L z?xpx(A;FL1QD?@VO7N%n(2_NEq1VC+r6~!)aB)Mw=gS9|;jbG(FW=3c)m2kA=7xhf zm1jm^Bx!Pl{?lx2c8UQ}gfwld#>m-QZHlqIN5cGWa-gFW%#n3e`{`FnJNj!WqtEKw z>%)wMBe@#9WAtaJK%FrzF3yzzc@v7nbEZQkG#QU!%>+Q{(6{v+?_p4{Y<+oFbj!t?&h6_j+sav~8(KZxy+chlP^OiyN+)UF+JJJd^Ke8ga{fGDT9*0$nEDE+sJ`gyH#E|r z(j|yWcS(ptgNSrV4-HB;2uKS`52;9ZcM5{Q&>&qR-GU(fU4H-nx4w_H#`w zzOC&fbg6ff-l@i~^$m<}+_Zc8dV59YSDnPap(t@fID!`^o$Qq8nj|h-8EXmueI`U=Nr*AHCBEjG7Q@niYafuL3)a zbC?yb2wB^CDP`3DgjwmPiLjC1nNTE&H@@_{5k{0^aDR(BM4lCZ?P4Tx_B(Ddg{M^$ ztn0%8qnnh*M>Gq*7ugDnG4=EG=QYH% zEQ7~nCpcD<7l9unJAO}4V*c8>+Y}OlJO21cK5rC;MT(<;zD%c9X8C8Y6?Lk5kuFtT)A^(kSI5rD2ddcxO67#GL}g{{49 z0WA*^#F@Mx@ca|B15C)FuPuL?DZ$lblZ?D-TcjTx8d4osY}QCVlZ7hS>Owz@OSzUq zmYDr;Af&->cjd{|ViIMcz;ESJQfE3i^C>+(KF%pW(6~e5OVADiqLAJy9|=&1dWZO( zOk+c`Ji}e>YIxgQUY9wUK;)2By3K_q%=`8Uk-VY0`d9)O9a#5Xq6w~bIFZka4vM1=nDPxY)dD8?GGATdn~A?&LYnBwJjPzyDtU z9u`Qu%TC6?^ol%(WLGXk>>n62mX?e!@a7~mIPagwbtg)4lHa}vPH=IXMBQu8f$({w z;uN*Y{2YOWO@Tww_L9uszc){Zw@<%=0nQ;gxw+RQ?G?CWvnpX$p4=2W?wVh~f{(Jw z_)^T34F~{f`oMs6)rl5iVu1{?%2;ND1_j54U><%T7{$e1{Z3!p&%8H4eM!jF_-zpT z$vGNG>u?`M#0Cv^+zs1UGbbt~mjS8<@mLF=%&>0~nU0RG4(zN;e+i$UP?x23+1yd9 zBW-(v2Bn#3?YAYz@xyv1CPft$0%=n~A48?BpI%u07$;WJ>Yb`Aj;*k*QtXznNQ?n- z9l&-gAMb<~3Bev`cGYxsLik0g&{}0sM`&DG(-oda1lrK>zeARq=Svmei+}{*UN(FEjfA@d!J?iNmH3`ZnYm!fs3D;8?}8+JTtN3I8DD}9 z;rLLsufXVRyZ?boX4R>o@MHbxgBFwQ((Rl|86BBpmp^|iUEvLY3U;GW8@9j{Tu&!u zmtOM#%x{X7@TmUp>Rzd0WqvRF$gDx`b5jL!R?EbbfMAUZ=2BH2%y^Eoka_IgSgiX|%h*T9a+sPQt z@cbctV5Ja@vuc46Q93Qve zKz2#hDX8CTYZ+ariae}maH99pU)p*{<8c58N+{!P$SB715xEa7C9#0&=j197g)-th zvh<#rp%dsG_+TZeXHT7c76FDdaDMc?Q-FBA;!@SEMQ#C+%sc%2Ck`hbX@S^FB=3R} z&HvrB1Td-qO!E;t$$4|-7cU06pyE#)*+L-UT1ZGq*+L&4xfGGXIeY}E&&d6CPrF-; z@eFQG(M{??sCUC-+#YaYZmme(Sh^UNQIo};YOA4H5w9~&cI)aA zCMM?FJO)yN?@JF14bj8lZg_UE00YjXV-7t&66xRIxoTO_tlX6mQLn|R3M(bO+xN3V zD45s{ufAzOT~++A>v6|1=yWk@YO?l^jwiiEE5-nOgO7Ii!w0hl`_0juTC1=bbzsC2 ziF7vKp2DVsa!X8i@IXHg&6xtVOxqdCnyu2eU}bBY8nJONo1j6%ZPXQ^Ap2U&TK270 zF9lyaO|P zKfg30wg_ISh|dyHWX3E|+oEK0Si}m7nqNif{6V?3we|h3)%fWT)|HsaKPDWJhtoKa9G`KYcn3GW*pMgjh-Rh0abi{$ z({mgi>RoXPG2xIfhlHGhvR@cFxB*D?jplS>leOu2`*)^t;MPo25w@#>B@$ge`b9sC z7?0=O`{d923-*dR>sFKz&I1%;YTQ-x>#{NB7ipGjK(6JORHO2b@ZEy>!QueLQ{1)q z`M<8=#@zLkQkrRJ(Q|WipLmatHPe_+UuP9=#lX7gS^eN+)$ZmSJn#P5tInEGbbCU| zMeoUn0%vB3U_Ms4F`!ME9)5xtc3bm74!++@c@cz-B#`w>D+Xd>DEp`O_8qOE zGs1_;6A?X@p?zE^!g=#=2MRpv7QQD4ZkzG^92AX_gN2%(U#n#q*PD%dF9If>XK`Tl z{X$U#(;#aC%aU$x{H6@!NI5S&5;FOS(=OELT3A1^1w+NpfKTPS%c_!BF5HlQwaE-U zoY}&U`-mT^!l`E-F~ehw{pADEU&3b}GTBFeTr#2*^&`kK45x}iri--EQxy)d?ewEan&>&hV%eRu z`|Ax#XI%{2Fm8Oyspn>9&LK!9t2nzyw_^(?9rhi1Wv1+{bZ-Z5Cmy^5bL8OONA`V% zltE2rp{rK6gZW|uXgU6|GhXuo2j=Vj#0K@el-S=d z;5YncbMQ`7=8vBrqf!?9%t{79l?`UN{J#|!5{xjr>ZzR zA4xNvGjzk@$K|@LITz^QnGTl87r=k?NW!SMGsAzFcKb zkB~5_J4m4HHodnPu}JJctv+pHHZ#;xz_Ls*w^KS8?md`pV{msOE} zjCVxow!)XHrr=J{06uI{Ri%FFQEn8H(HcNz>>32pelb{=R--`jS#E3mRO|f(a2N6H zYR9QZ?r{qRG`vemJxyNz#*J^gs6ON&H&%Ubnu(NvZ`N;+?9;A*+x@!PD?#SfMAx9Q zXwj|w7>h{mNFdT94LH}K=HvRPyU&Sy8#~t|@8Gak0Xc-%@EonA#A+5}bIa6* zT@8yCqow~?N1Og+l{ z@aoqQX7{woK$6PhM_mKFj*|)t{V_h4HzLAAkdycC-lfED<@IFD0%`%YfatZM&Ih05 zp@0&9)}1i$nMpdi>7K23op2F!K8nrhc@mbNh@{6bo?H>t9fpC6WMi18w+`eorey z7Hjc|hR`%j8E<2AWQ3R_lFpo|xV zK;8%paf!N-LNOFP(s4}kgi7XkQ`nh1a}8D3?MWltdedH+&k zSmKX`C%sQ7^%FID-R!k`b@-@!xdcs6@ZsNw9@&^WJ5EBCgZfM%v++UV04G(4*aj$? z>WJ0yx%fTz0P5=@#CN|7+4CrZS0&;z^LN~GLMc7Hnag^@{Sac)+8wU@Y}Vjn?^V9w z*u_S0MrZhJRuPW`q8nL=7@_^Eu_M8dAXqwtSbda$6V}zcu%9ema|_aNCE&u-_OYZ> zIcx(4xiz)b$})X=4-&%gT1d$pV6>Z+lqEeEhtYa7bQTcafCsbg-;o;2KDR>?#D zJ!K}(0SWr-0L3DARH{i?;d~}_h#I>#nxrh81$8V|^%QL0I^?vL7zVt$ys)q@-V@>M z@N9kY-Se+`o3xG4-`zXtEnotJ7ZhivY~=YggA7#Fzgq#})dbOMP)k^S>ibl3=6TT& znf<`A<nLnyTGCz>&s z)+v$$tUXLPkg>R$n)hM#BHiR9(rJ32?^?>P(i>P6SVKfEgA4>E1vIx{1hk`|^>>d? zsSMVMI_<+Ry_2VW<_QY3;%_LFF05?w_%qn{ZRq9C-7jcC<)r723v5t<$cM0fl$XIf z2pM$60%|dkjc|o+Jo%yOu?SQzcdrD1Adl&Z>Dp8Ru$+}-S9wXgjG^OgGMFY(04L9! zy3PaW!JWr}cGA_f!y3@2*IN>`+py?cd5InXGv{#@;Y->-@L=zi!+9?a1j{z>%Y27r z;o9s*tp;8J^UwZYK9}r?ID5p!Zf9b>?XsWKMdQ1lwpUt2&{ zyt07Az}7KKV$K!nHnX4%T_{8?;Z-t$Le}}A;fAh(K=E^41bF?AlK(>5|^v1xA@fsCUu@ZgUT(2 zKigNLNy@0bxF`K|5CC^{dX{TObpVN@E3w%leh!j3fWf!C3-iM?mJbYFl!ZG3a4plZ zca#jcUfms#iINN$w+-8{2KG8X`FD-N>6*$u0!(_2JL(j)82n2K-b?FN@=sH;wnzLr zI(s!bHg26pz-5+F%pQqryjzu{eMLg5apr)t@M+mIfnIPY*;`R9+5*aRaQ zgi7aKeHWcQBp97F;w z_7XMUQ?pBIretRN>wuJd2-N^#ojBFsa36I7xVX~vd&C-igD(hIy#~nEy4$_C3pK4- zdqISN!`;z^*&aM}e}U3F(Q&XGE|hH&2m;*{%d-fCH&;d;9JT8D^a%^LZO&65s7b^*g7fuSea^hs9;rO#d>+rUjE3Ir20bV_xt#}386d)kK-CZJ zx~Zab)3z6Ec$ppJ%(TsAf}wXqGa}_%0f09n92kHFjiMEAB%M)#QY{f_nRVrIbl`x0 zC=y^9mfvS>JSQ$2O{3ci5MRt)j!r-oI{pDVraw7A%QOaVUE8VKf%ds@>l3s9oa>mf zo{-;J{h>B4^iuP$JVL?<=a38`LD&8a&L51Ng?2CwaQXb(QK`UnyQY^AcgOHc`?h#Y zmZxP97QT)iIpJ)fq%H&T8-L){1gzk6;Vx)1K`|Zh_&$`16<5_EjHCsK%>;qS%a=j> z?a&X-UY(wHOsIB}Tu_hBc=rP(AA;uBp~s-*ntIrVN45VZy*Wk53-}@_Fe12YCH^&p zx-6u9^2?aGa?YG7ky zQ}fo?p*$O-pG#F2)s`QMOncGLoRj&r`D5}Kk(tc^6gB*+I%oLx=Ba)#_^yw^8%#v& zEN&?c&CWn!Luy(YB{sGK4&&NZ;~wU)nw{sz{#8B5I0dd-n`KmHEJHTCD7$X(rOoSU zhWc)@!LBh8IE|3~aNsD|H2<|3~j=TPACK>Ow|tZ=p;MwtAw4{C|6w; z$~4elP^nGyL;v5zxi|3_Lng@s*{5hr={nRT9Jm;0SAOpJ8$B>!BP$7Jp%s5XW;!uB zhN4SXW1fgN3W>Gw9j0=(*VcC(#?pYgNIcR8l1Mu0A zbmTG5+Rg1`0cWQ&n#ON)kJT%~t(c%N82X)v&Sgh)TcXPo=siyaH$ z$pZ@fpCCQQYR@JF&lRY?0XJTZSusw!t+xYoZF-5N?E=QcdOQC6B6o6jjuF6LF@y?u z*1msvxgo2YVm`u!#tzyDimIyqWbLYED1TK|Rmthi>)m0)+r&vE_#Y*NZ|YZ>U+R!_ zyHp7Y-JYq%W5W5ly0ghfHbG`=Z=Jvt%<%tzMI+3RKv?<{?$7;}K?c2}IRL(zZTW9pJtHfDUd z(c~_6w}kebDCz^CrCi6^JtjPP2y*g!?QEdsq$dn&B^Qy1;yhJHlJl$U5$IP^#r`dd zjv+$m8;n^~LytE2_{lT{T(|Mr-m~i2k0m*6!!N(SX3-CN{s%~o|4N6|K^|GTogkdL zVh5a&TIkAVsyGp0pqb9r+LwK8d1Q{QpM1uwGNxy~=_K#xfE0e~Q8?>M4A}viwLVDb zEx?L?^QQbkVW9+?@r$T}gs>Mtv$NknYJS((4fA#lPm-$Hy}<V2;xpW5LnO45#fg-#!#k`W{=4$SNln-sL;u##+$VE|Fl@j|sZE zo$SKK!txz^30qD54xi+mC8qF7_Ajby#sg_0N8a$`B4KCy+ot#{jNAK9lf>93Wy)bZ z?x`d@Byzw;ae|jCmHwJ}|FxnRP6PSKTpPL7;1V4fuw15Y} z)F_h(2xFKeE%NQa8HDz?({6l8-r~0@F!O9Fb)5Vu3~I$(_mcz+DB*^0G&D4(lsu-v zSfAC$ED?V4YVojGV0xX|f4j~_3~>(Sx-eo;J~6r0@2;9r9UY9gz3g<(#l*q|jmGK( zka;44ow>UNqnX`h@;ITcZOd*^RCp?&#aD=IWF9Qy*Ws1QIjSYbfY8nutP?S~Z|kk7 zsEA}&A@q&W=i^gNPfA$jr>KPi)|~GYiGhXW(>(@L18fM3duu7k-4_O(^$#BGIO2mN z<*1;z*e4EI0}z8DZE}lv8kx1Ryx6%q$Hff1rDE`1BYF<6wWVR(JIxE!2JH{9j-t`Z zPHo+q4n#0X<--?ZuUfTQ9{k(Yqy$Er*8F zqH)MW_2*;lKHOxxBzr#`CqpcKALz&3E;`vS{i}W7{M9|M&~$K?cs&bIUx$i~SJ&1E zE!Qq?I~=jO)_*JcMUDx;HAJFG7>Ppl_$wliXn+aBxn<+*F2=rKmY2gyrtKXePg^`e zE!ZwA0nDK9b3tP}Y44v{dRZPRBC?gYKh>kLq0D_`yh0qEiukY+Ee&X#wF1`BrYPK{ zAnOsCg*9)S1eq~q$RQLEWTspK>_ZroVxIqT-eyUnF188-uq6KSPRh|?EAqaB@%>5k&#eu@+Zgv{Pq|*rq^Myf<7&vG&BS7m z8al9;t<$c~$@Oc`TwJdOepCU#F5Mb(T0!N2 zvWEW0@XE(#jP4K4LqIWw1J%!iNz^n15Xz@&Xx$km1#0K4(TO4<`S{IYnZk9!>juz~ zXaL;FqBVzeamYL&deB_@)9?fTes)?h_1bRptS@?p+suSy#M*9C7*?V|p(Ko!pZjaD zp@**LTzWxI_pjJGxT#?6 zx8x@zQJQZ)`CEnV^Q|;mF3t7Jh84>oPY(2bG>^9`I%h->+-0)n+p3qlkK2YSS#!Uv zJlVFf5}-fGLaIG8$qhe1&*^0>v%35_FF{0BKAb$NhGb;im|KTK39K%VB?4Hd4HCv} zr(+Ur1Z^C3uw+Sz-u=*jdd^Fn{!)L+gB~)!8`DB*K8KgZ^0?XZS^b-;xaN74?lU?i zBl>F#GLnsN#Y>AYkfg1jN2^Bbw6#8RGI2XthYMH8AJjK`EUS)58Q{F6qBv{vFn+ao-=ad|vVZ>%3Fb$l&#}+?C(F1Z;3YzV z1x^9&ZJZhBU5v5jqEi@v81o%P)P*eT9T*VTj$j~@-{K_z=_Bm2u8jn$=B+q@8Z@8?9zr|aE1)qP6Aoil8Z;=QVsz}}`1=o&je({^DE+eb5*-ugyh zgf8Xwwp(0zu5xzbawD>?Wu9H%va%f?>v9_^-Y!>3IktL|ldFOTp)Gj6oe;Re3c#y+ zE`sJF8hkxIlh9D66uZL^zP7d&3M#L=5Gz~-w6;3I*cVjm$JkHRsy0A~F)iU;fkjs&%;38}n% zB0}%O+H-O&={tg@1McAuj~RU|;hEO0S_=_xq!S@TRT0Q4gr)~0SvV;oAsk$b91vQ8%L2_fzp_SgfgT8BVBvxn#XGR^S@nbY;1Cm7VQT7 zmFEafss_uURp_Ob(G3-k5gjG>Qa->>^`@z4e}lIZ@cxe@2a(jP!Y|x-a4tQ11duG0 zN&nDTbL3-_$BWBS|H?f7a8uzbU?Tu2ryP$HL)b8gLV#93%BW_~fS*z9_&j)Lm|&$F zGuA8V`*OQgO6@(VJa2B2`Akqm9!R{7XMZX8jNeY;Se_^0yphv;+r#^J<$<_#ux-zCq^Ct*-6E zr+kq;$GzXev?>t;)sBE^NJin4XtIF^8PC-RPzSS73P--9e(jkfj~#%=MG$@Ll|&F* zG}XZlBoXLKO<4n|r^Pij0-N6C59h}^jyK0bJ)UO#I@!WsJgfv*;Ez%BhyPm-v67Ae zuPhxVsy-C<7hhgMz9YA!{=a@UHd~o#5LvxNUwr30Jcf*WdaC8Z0Xj_p43QWBg?UeL zODKw69di!FZ5W8D;JkgxM~}}XZ$5nk6Do~)n4F=%gGQSzBR*t#tGwpj&*g)^mvThfrbJKzz6f`?IMY~kah5^ZKfBo;UWu-=$OJ^qHu z1Dgc2Ov1a@k8-l}@@{}XA;c-Qe&_E66WS61Qz6!Y2H-zvvtT(Ko?&s`33XrmbwuD& zSM7tp^b#`4hCPVf+G?B|e8|PMkJHJW%jbMAU~Hr&^rQb*@h_)B02A@~lApga9{*e$ zR9~hSC%gA4LU=xeaZ2-Z?LidK!ow_4AeaNB-8s`-+5Mmu!h4@;r2}FLAKNwKL%fka z1}_5l5HHmXpP30f=yk}4ZlNVUBL#R8nlQDL_RPW#LzZ^(nKhzxg1?02Q_5|qm78Ta zy*&c%tNQ*TPM^KTZ71l)BM{i)y5(L+;3}7LO_pd}$ICBj{W`snLkGeT;MQz2hj~rZ zPK9_q($jj11*p|m31OyU?9I8>da{)g?GH5r65`^H$QZlyAycI-F8ue>&KA~+%%C>r z<}<=xLbyoKP8+%~c>#GedwyZzxl-WoX+owfv@-WQe2aujEu)R1n9!Y;1!)AGs`S&B zuk@Q**~~y@k^x3m>_WL&?)vMQyhlNerAcKv72iZW-5@|Nh?^N7k4OIu8Qug=Q{yjT zGI=rRbq%}t4E-}Gp}#t!g;>$7WV(Fq258%Ey6!B7|4+A$E?^V#iqk&1OCqiaj~viZ zOIy+xjGr|SfmE=UmqRqS)FEyOv15sVm1iC`CJ9~(e%KWxfQ^xmk+EmC<_ULEbnIrz zk_GLRVSam+tm9tbPFDc0<{eBUyYs#<8)u6};jVE(;W=->TfpH0us1#Ev9kKANy(_? z5|6xsqi)&Nd80s(zo1)2|w*_Rs(}L;#?i?LH}E7V?sSTOD|ZnsKEmrMK`ih1!;;CwEI^Le`W4A zvjoJ%kw4wkU+)#azEX4V23*iOUgyWfA_^Bmh-;vR*XKB}um!Zuw_&rpeuV9m_Zkd7 zThGvH&9nX&5_Vy2gYB%w8QNlwaU6t8aQauzH}s-49na#!9%6!?4aWf{RL{-l!Aa5r z)X)KrHu)#BOvAT~h4a1nrcBH?6*8PfPw7-&10SqZnQPMM+sRc9kvuFGrLM2yt&P{3 zMnvi(h)4eR(ii}wrqYCh+C&AArZ^F=LCDyz{9#mv` zrsNGdprg?+cM+<8rTG_zc#X5Yb`ukpuLg2D-QPorzgJgjm))9#zBK~Zt~IuZ%BWw_ zw5c+?%_>7UVPnZ>Gc(`1&368yKGKqi!)yUW^N*45MuL@C{i}3(q4qB=C7nf{nW&68Bt9zA&M)+04v=LQTr3ouBfayUF7|hm5=d3?b-qXK>2*b$L7Epf+;w8 zsQ@V^17yp<1sYiIBeIk~ZupnY@mlmPAF-;^VL^0RbtJwsi1x*|Dhj?WKO>j=nv&MC zw4CZ^cV7!w4$>59k=Q*0D_=Uy(gO2#x?$B_8MTsw1jDCZ8vl`vtYs_egjbZ=eD?5U z)CMtL;(DH*e}QX=+s{;+#9k^r5Es9Cs|(t2+|ECNIz0~2!;}GfQ>@6d3E`tGfZ${+ z++H=U@!6Fh{jWqVq^AQfD?aE+h@&kr_wr(ph$8`dmTyiA1)RmP60se4`R_iQF~xby z2F)4iUx*~rLnA7ixH_-3Z*l9N!>=E`qC)w2f&Ny3GJ#f={cJ6GjMCGhVH;|in*MgR z^llB&7+;B_q?110*LaaB;fph){m#Pi?guJvW2qmCp-p2}tndEd#yc+gM_;8z1Fj;> zICsKt#bm7s&=QSmqcezAV2yOU0(4@+qq}ZHam)p?Q-bY%fCfgcA{}j^4kY$*fD{OU zoAC@~6J<^~;_CZF8Akgd2^*hk96w75%I4*6`ubhP+V{#A)U`1#c`rBoJTTf1Frwmc zN`Zx%-8572?P&$gG3v|3KZE*8`g&qj6czi*enki>1|h3J-@+!L?XTX8{uvvK>DyPo zKp%baA3TW9a`2L_E@{6UJuocsmdsWAF#`k#F?com;8S;SYW66RjH}pD8v_U81x#b} zCE4tnIvmi(9ZX1f*c&TWmfro$&36<9Hn8SbJv}W*O3hpDFE*^XzkMerOT~@s zJqXA|3}T8MBDocnm%k;PUuK)c`;xY`#vy{=Tuy>84moKDYBTpn*?{W&WGe z+}!*X(rLXrscFDDDWG-ER#4Vf2&(j`(Z=X((Tb=a6fM^b0N(gmq-s7+OKWOhWi|VT;~oLp z6U~WFEH=b_WKk)Q{H&UFIj7Qf2b&}uz7tQK$o-UVh`E|IVU`q;F{*v^&Q4>P34^G`$ zXu%bLRL)N!_2DgvFvmDbmB@TqHg z36c+3G33a+ zU?vqITN5CAK`sd_8qvWt7l$eu`jY~S*K^&9In+q zXMct?HLval$ndPO0p9_@+fENu-sOIdimL=)sG67)nZOiy;t3SZ~$Pdi!xPRfLLdv69 z8&GO&@$8%UrymWRofNHNq#}#v+O_kk%DQ=a|Cb98V-{}*3pWRalVm`PjnOWi`kIf{ z^pta@BCl`}b5NC1kDi{+6n9j1@{u%-`o0hrK5e@kB*FBq40U`rXjjr3LC2#1-0|^~ zClOHn_)b!P0=Z~YgbBs-omNdW2yQ-|RtM%^Ml^Jxa<_aKcYwg12XP+8GGnH7 zerkPRKH}^x1ISnVK|hZY(c0W83vUAl2vHKCV?I>ZXCGzl0!Jkt@@#`54$xBn_Rheb z(sgpbiu>K)T}fv29*HEQ5Dp8V1@vuO6_*73qDO$;^4X36_u*p+cZ8tDV3mUp*2uy_ zkn5Er;@=ce@1N<@0+F(9uU9^M<%hisdw@9(oM{yx(G*D{Yg^kU`T!P{`KG{e$QB$C z4?v8V6LtnZ!jm~TyfDVDJ#(E7Q$+uhODdGbh~l0jjGLp~bj?tKbWX4z@B#5Vr&gV& z#fPY*0`+-aUy3=7g+hM-FA9%2%Q5e6vgrDM+4KVrr~A+bR?E4Q${-cr)n;P``6*R0 z|GGsvSczaDW+RkNq__&EE~7Ykg2!pt0bKFOl*xwaoT`2I4>|H%G`bNJJ>punHU$10 zu5g$U_UQ4Nytc`jxu>K8k7VO>(kr@DQ8|O>4}y{#J|gijqmBlSF(DuwgsgaGRUH)) zy-l?N`Rd7oEFx27I9%x~wte;kmEgtwHk<&Vp9qTXbkO{gjAcfmk@zy}Ki6i+;?O!H zZLeYP!gwCGt?ZV7pD7ObJPrvQOrM?}c9Gq{%GGP5IgR_$hColjMoXc4tvEJnU?Db2 zna^h@)I9l!SX#%et>R;h1s>Qqb9oY{Z-nRiP<7o%)!9bZqMT5rllSpZKY$h>5B|YR zEui0Nz!yin0^EkX0YkUD4Q{SmDz9KTzilBPKmcC3wdKZZrzjf9XLhPTv5GI4X4FTw z=Ds?Z{Y+y`lE;1{8Zc%E$4*@~Gs0m68?ml&-a#F`!zJ5ahEp`ez$HrTedNIL1dQ({ z^RAy)_^v-!lhPw{y#Z8uiUgV3A>fd-u_~!!zj7)E=po)Oo8fZeU%9QZfGM8 zl`JPVjnf=l10LYaDmdCzCL4&1N6c9Sh!5#fvCquvOx9$XM8Q3|>OkRg@d9JzK@RvX zn}QvMR(i7isXaw%cs{1!3pdNPNx)~DMIDn68ZD^hcJPMflLVB^k|PDyEjm#`vTU2~ zsEcLJq-{D#=!ZIs2_~5K_5g+g7@V^vApB%r#>9-?Mr;r7vp=heC6zgi^JQDoJ_5tL ze&3ZP!9yg2{DsEk92v7*Z%-4_<}xlh5Ogg0uu4-W|H;~$tnk#l|Ijl&I14zL?x4e# zWprHoJ)&XxNIZ_0QHfd-y!=Nj5)#QZT1O45J=Rl8df4Xb`o_|#cT4Mm9B1N~r1egT0N zjP~01fygtY#PEts8AXW6x(E@1Fm?AUuF7+y2M1Z10F!LS^fmMum?3gO3pL-gi99z8 z@-oi#fQ$gZYNzN^_spDNI*Oz*?s`-pWxhWAw^&lyw4*_R!UywI4jrMP{+|^@OsLEF z1VX?k`rHLQ88~4H&POwzt+zvO?baN=b-@X=p z;rG`msK0vkjk^I~n#%+5vLuqQ$6+KTA4^P(h(B37FA(0gQkk*>LDR|-ltne{Dv6jn z5}91@kt<}gH(Q4ubajeB%3(iZ;r)P2*!IC8M_1O`e)j>W?~nSnw(h0w76EnDb401& ztg0$Q7Vk6_s%zDW1C97o$pbos-vmljWXFjXv~Vfjb3V&UUbQp=Z|INSe!SK#{tl_c z@pgRtn1k#hc?w&Q-PWPmawx-Ts)~O|4zSg9SoDK$NyXd&NuZ(C{O0_4^VO3n{d>j) zz<2TPW$hf2ug=}!=`qD^)#>;W7iKx0tVjY&1}=@ zzs5e%#g)ay8SlKhai>peLuy-;;!pT`I`GO?@FJbsf8{9ZzxlEBh+j;hqz|u|#@d)B zN^N~Az5{RO(0r!FT`7`VX6E7d=$BS^8-9?$MVRheQrvkx{57#wVeH}bw)?ewMAJJ# zl}b*r>C983`6Anr^&~fo{e8cmRT=A&b1hq~0@%+E8meu>Qju3*3msqeVgvK)*#!9W z*;+%dgJ_ijq4|n}v)tJxJvzlK6@{5{lg`)fH#VGDZZCpo{Vk%C_5`hoHETKL77;S{CQzvA)zqq><4OR?^S_DO&#Y~E%tl< zdwWH)cGqx;O#gX2I^wTzG_3}MR@qm+-*bHtKU3hd6XqaEjw$k5IHsedppef=9Nr;! z_pegOW1c|x``=iSk9Eba93TN}PQbDKtzMnOJbm_hiBD#tB`|9epW3sV74hi5D>>zR z`%la6sC|L&m%ddeqfZ)ll|t$-YC2o~h3gEz6t%wgl*#meJ+jWl`OsP4X{!4J^#!U} zW@5y4ff}P@R1c>%0SgOjX0FA_&OIIZfhLQ*X$oCSNvVI9#qedrz`Uf;B|*^|DqZYU zDb_)yA!>mEhpMz`uTcZ*8`fS-@-#Xpi{Rs5Aq3PXAtwKX6#YdaOTk_EP)BU4&VElw zUN6pxa+MojQsYTNMtIYgqgJnWE}#@4y?JiGlPnpz%g?(ERu1TIM{_$!0a z3#WfiPJWKx-;(}PK8BhZEA2!{)O!8h>g7JO%NDeoDxXBjE(oLoHphKdUAbadQA>+B zb;z<1v!=wuvm-D>q$|$62FQr;E-o&p`KyQDQemNX0tIY;W}gVZ?fF?kzp=3;YH#6w ziXCTn%l#rso?d*^@@`Txg~zNr)Mj@!n;8hzVvy7BV>XK@iB`AW8Ti`cKkwd6_6P1( z8hbOeu!al9m=B}~G%<6$^isVmvAh=9wouTo<^pqp;TlT-lt@BH3EcJT8=q&Q$--BYfycpI&0X}R7GnkHPsVXQu+OR*A~ zkH}@Cd-Ey5TTAeX8TE!1`wLY$$8HGFY?hYh`qnu*=(%02jDiudW;TJ1qBYX zKV`9lTRS_&GvPvUBmc7gHnr}CA(8`ij9R8c}jh}`JUpMoBLdRhHnzIrujJPk?~@VPky4C26FiD9|> zqzVym^eHdQqHR1gvCQbye`JwUydq zL%MMRK)C%%Av2DA+8kgLmJj0^mIgQ71y(rTM=)!*i|6BTnb=&Xc` zu8Mbxt%Isq9;XR-`=_Xqwi5FJM{@s)Y(fRD@Plzlf=*yjW;>bNdhb_Y$f&{<`n8xs z?Dp1d9X|*C>PI*}_FNH*@5@ksi5Fd;v;DXB_uFhbLkPk-IVE%fQNiff-eUe70)h97 zj+4x@ooersr_`%erpUH@;IMgBGx=Iy(~*Co8&wQ0P&`&|U}qP|MfhU1z=kX%8rm|@ zY63l6~NTJtq)P9-FR^pyVdQPauq9> ztSeWt7(qMmhO@zFl=_KaPlgf`kDht{D;dl8`IubUh$Zuz8FYp3gAY`kQ+*E)q7j6GieO5-Fo+7er9$%~}c zE_;1Nf2b`YaO?dpX<0Rm*U9aZha4DNj{Mg4(a6RMe?`l^jirRH=+i@`cF}AQAU(DU z@&@rc53V{VFO8y{etgcRZ@AdqyXFG5zpwB+-n?uUrNp%4UUMqu7X9aDPV3-j_W6%l z_QYZZ@85av`*u=TlV4D95HD~EyKqBuCVyAHe-}sh2hLsR&Nsq`as?rxEv@Z)Wx)0$lLz z9q-qOO#2POAQoRy8lBbR!PJ4#_mS7xu%dzj>-6kMHo;x@)3)Noj){E234ScR_VJ@q z_ma%JgH+9mv3+0W8_bkeYO8If&qI3J#S0@cq}|(EHJrBr1GfpyAbxy8hw>(k6T04}g4IeP5y7#>(o4yk1Uc zX2d@s1*7O+m&tl)n-AzP)`OoNj8xmgvTCiq>o3;Vn=M>LimlDJm76VORd2%%Sf}ky ziel+Xrp#koK~|Anh@ECkB-e>>pX8wNma&dDbyxrehdkHK4H?u$xT%-J)R^}7(fTDOg zkAY78JM(KqZO+R_X+k5vxCJy<_z9#m?v;3KQxDkHFuxzY->AR8r`Yrm3I!sG8RpG~ zG*d*={8bG&$ZljNx`VyTd66hZT8Za2M#LDIDI1rp>WY(h zPoF;8tghb9w;&)8n%Ldj_iSR;{pmJ;vfFKxZAezA)L?K8e;DVPcYR#FcG$U6B|)P} zO-2R#x;yVbn`08-wF z7YcUI2Td$2(1FEi;}ISIJmZafVrPdMQnz>BXl=A?tQ0eB#*^)Ze-3ts9P?v*SLf5a z?l+HiQ=q3tj*k0%x>X1co~q}OlGr8`r8bU^{z~LUq)}qVARVzSKz>m6!nfdU?8+YXlPN;s?%9zICrXg@M7!<=&$ z?pO{kWV(q%(VRGe{olARk=NC0`tCXO!+Hs&MUIQ3)lXMrU#^0aT9jGyHS6vB4*rG`Sl?RHh+a z6v-eW!pLpLZOmkdiouA%AR?mNnivcQxxBeF8o7>Jgoc@|a?AZ}?|ILM^X+^)U*1pq zw|{#*xBp&yt^ZojZ$GO!tGCh?g9K?%###4+v32XxqV<`pUu9(D*;DrSToQYK?P+q1 z&o|v2$DUF>OP7$W(WIM$B)$ri?r3oT7*x9JkUol{Ph+xHyGEWrv$!Ei7_DCHbjPs@ zEKjYE{Dvyn4q7tU^vsOct3FGRAI(}6W*!8IVzlb~!oq~cyUuc`GfBbv1TSVBJ{5qG zHc;esMA}uXvcNBbvnvCFLs-4{#hP9N3yQzX=G&F&mSffp2Q;E1n9p5Z5>Xjz&@#vS z;E}dRd6k6K4^pk92cy5Gcph5utvt`Udzj>(o5MI1bjPJP*Sam45C0~XE4FeEd8P~R z)(hJQp3|&z!*-6+>ehV?b+gc>yX*63KT^)rBRx^0@9icZbtZ`uY*yZ{I+Gn>e(@5{ zUqg`aPFbL%7F2!b4vh0*#39v+h_iPK+NLg{w5%RMuxYk0<4N8mQ>IOcA>SKEdcYrW(U za4kF&TG_AwGENr&4kZ&sA=0}4MJ_hWQH;Z8%v>8-@Z`M5CQ&kGFP0ncqx0&jh%ywI z1^}%b^foD~4ovJa0rTQhZB0U8+-lC=Q_85taOkZ}L@rwL{vII-h}z2#oYS1VV$CUm z?iH@MwW;mQi}OU~wQ9Cw#LJ=MBb3j9Yp0zpcZLN~7hj?!q{_}K4X<2)-9C-XnvVc_m`qO5cEg`rQWtScl3hhY zQBR%2f+CEsi`;FuOT)s;zS(=VZf-;`h0ci}Pq9OOJbX7}2N)lE&FVO9qoQC7|5B#r5YhWC`(D^H*@A0Z|A<>ZRO5yZ4*`Qwu+|llmv9aBI`F zl*GYxXO(qbferChI%90!Do85Cgwk+D3uo`W6#LhzqB`>StAq?8usDRS&uVK?QMO9; zz)I~>I>)>1bZn#50V(+{)Ahjh3DL}f1p@Zuaf*j)b+FG!>O0c|kzJk+4w!+mZQ1>P6L^Ak_0MPvWjmeOVv-TwyK7`<9flmBBXF}Ig+5_= zP1|>I!+4donHuQZw#^2U+Y~JMwW9f0XHU<*4Byavj~(*5Q`KYLuvSt807%YiC8Ylt z_L4iX%e?CWyIEod%Hub^WQgpuJK4WR%CbwsEF@2ZNOfr3F4wOC1C-emzj74y!}?oZ zKfk_HS#2qeR`UY4$cIy=zp@uTk9-1mk5sQK%W7lgil}@-C=(m zmgU8`1~;oq6iGh!2YGHstms=`;jY(;32n9hR#q90${m{q>Ahc3HkwTJ1$*S^Lip{d1}8r zWu_R~LE+WxSg(oP7|x+9>M?yvZj4r`EML0no}4RGI;}+YN_t25d^nO%eRs0ihiE$F z(_TxJF zlse7EpXsmCM&;i)!0L zPBFSxBiiD0RpD!1FGZl8gx@Aw%~p^WQEtR6*5bK}a9AsbmHvr~V!)55$9N)Uma@&Z zU%4}t#17fy^+^<5EqX9NdUx@=Cry?>G1P$wN&Ilrj3>`o`=E4{b zx>}5+#lA&pyB_&Vxb!V^wS^Lj4QGW0OyFvb!AWUo;b;CJj;ND> znT55B`NoNDpfraY(o|#7%Fo#U>-7krqZT8ky?aa9Q~M=imiU6X>|q0uqZjMWIo57j zG$?+vBnHs4J}7qm5n`)|buazwWuI0O$^AL2TWh4dyYaLQ^a(K{CuR-uf-85uIrE<8 zCEb9&W}>@3Qm=|?pxkAg$hFn4fBaRtB<^?EYg^sC-Y_C2*zAC6iQmWfG*uQ2oPeey zFKr|(nbraJ2EI{~U8)hjuDnA@&GnzJm->NJbrDh z8wqx#vllfL-tQ16rhV z1r>qIl7YlyiYm8N>5({(`zvk(Wtp1b{3^=R^~9VPAI8XPaXe#By1DYwoUCOfOF!`0 z80@kZr)XQ55)CW#${f_o*q2+LufuA1?!82~IeGzfQjjQ6(?NIdD54C35Tm3^Ab&sj8X6CX9tq?oBt+qzr&FGz`Wfr)3A=Ke=19XrDu2CiZcEYJSR1$n(X{-osl z61!`d_NJJJDIMx`YdwhuHGPARbF^CyF22x{)V7#4#P(Dg&B~kXq*qx<}(!#_>|PPz)u*(3K|X5ak&%9tbAb8;*W6f;egYpNtSwoi8` z_t*#E2=UB&FAR!P@OIbGO*6%)0eOGDt$c+q>$`eu%B?r7?|^|h$As`DHo?!PX$DUL z^yVAd9a)&j5t*&wYyN0I%EBmB2EUQFgh=g$alv|IWZBstPC)$`I-)p402ESeT5i`x z`Cjx+y&9uoNxrxn@sw$Qu(vXgvw41}3o4cHtqHn*0IB@*ECeF718HJpY1e7Fatoqh zKF+%-h^+=GJaKyW<*%bZ<{j|8Lz|9AV}uP8wH;jW-kPI8&6CZiJOh|)G+hWck`3lm zqkF2Y@fFF-B(Pwe2}MnFZ?Q-sMMlhEgKlgezdqg9P5Wfl)cw z;~g2md#SI83%1(KJVW=fx3_=O>j?&LETC#;Y$H>cXdN9G2mU7uA(I3D7sJ%IDYp7x Vf*Y^M6agDSkmoO(6rFPj`xmHTfV= Date: Sat, 24 Jun 2023 15:57:44 -0500 Subject: [PATCH 2/6] Added stochastic tutorial ipynb file Added tutorial-stochastic-simulation.ipynb file which contains a tutorial demonstrating using NumPy random number generators to stochastically simulate a variety of processes. This tutorial was proposed in issue #184. --- content/tutorial-stochastic-simulations.ipynb | 777 ++++++++++++++++++ 1 file changed, 777 insertions(+) create mode 100644 content/tutorial-stochastic-simulations.ipynb diff --git a/content/tutorial-stochastic-simulations.ipynb b/content/tutorial-stochastic-simulations.ipynb new file mode 100644 index 00000000..2bfd1c8c --- /dev/null +++ b/content/tutorial-stochastic-simulations.ipynb @@ -0,0 +1,777 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "2931e270-7884-4521-928c-65fa5ca36d60", + "metadata": {}, + "source": [ + "# Simulating Using Random Variables\n", + "\n", + "Randomness, or apparent randomness, is a major part of the world we live from the movement of gas molecules in the air we breath to the outcome of a coin toss. While many events are not truely random, they are often close enough to random or seemingly random enough to be simulated as such. Despite many processes being random, their outcomes often conform to a statistical pattern if enough of these random events occur. For example, if we roll a six-sided die over a large number of rolls, we expect to roll a 5 about $\\frac{1}{6}$ of the time. As a general rule, the larger the number of random events observed, the closer the distribution of these events will *likely* be to the expected disbribution. In this tutorial, we will use a random number generator provided in NumPy to solve a number of problems through stochastic simulations. While the problems demonstrated below all have know solutions or equations, you may face other problems that do not have an analytical model or known solution. The methodology demonstrated below can be used to solve problems when no known solution or model exists. \n", + "\n", + "## What you'll do\n", + "- Generate random values using NumPy to power stochastic simulations\n", + "- Perform stochastic simulations to determine the\n", + " - Likelyhood of multiple children in a classroom of 25 having the same birthday\n", + " - Distribution of marbles in a Galton board\n", + " - Value of $\\pi$\n", + " - Amount of radioactive material left versus time\n", + "- Compare the above simulations to known values or an analytical model\n", + "\n", + "## What you'll learn:\n", + "- Generating large quantites of random values in a desired distribution\n", + "- Using random values to simulation a range of scenarios and solve problems\n", + "\n", + "## What you'll need:\n", + "- [NumPy](https://numpy.org/)\n", + "- [Matplotlib](https://matplotlib.org/)\n", + "- Python's `math` module\n", + "\n", + "The above two packages are imported using the following commands:" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "50324dde-32fe-44b1-b15f-bce368ce16ca", + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "import math" + ] + }, + { + "cell_type": "markdown", + "id": "70b2a718-ba0c-4ed3-8a5d-4a7bd90f45c8", + "metadata": {}, + "source": [ + "## Generating random variables\n", + "\n", + "NumPy can generate random variables using a Generator from the `np.random` module. While these values are not truely random, they are close enough for the following applications. One of the advantages of using NumPy to generate variables over the standard `random` Python module is that NumPy can generate a large number of random variables efficiently without the use of a `for` loop. These variables can be generated in a variety of probability distribution including normal, poisson, and binomial; but for the following simulations, we will mostly use even distributions where all numbers in the range have an equal likelyhood of being generated. This is accomplished by first creating a Generator using the `np.random.default_rng()` function and then using `random(n)` or `np.integers(low, high=, size=n)` methods with the Generator to produce random values where `n` is the number of random values returned. Below are some common methods for generating random values.\n", + "\n", + "| Method | Description |\n", + "|-----------|-------------|\n", + "|`random(n)`| Generates `n` float values in the [0,1) range with an even distribution |\n", + "|`integers(low, high=, size=)`| Generates `size` integers in the requested range [low, high) in a uniform distribution|\n", + "|`normal(loc, scale=, size=)`| Generates `size` floats in a normal distribution centered on `loc` with a `scale` standard deviation|\n", + "|`binomial(t, p, size=)`| Generates `size` integers in a bionimial distribution with `t` trials for each value with a probability `p`|\n", + "|`choice(a, size=)`| Selects `size` elements from `a` list, tuple or ndarray with an even probability |\n", + "|`shuffle(a)`| Shuffles items in list, tubple, or ndarray `a` |" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "8a3c0c28-f9bf-466d-8522-a38e11488499", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([0.39930577, 0.71741468, 0.28082333, 0.08272492, 0.96977132,\n", + " 0.56392675, 0.64432096, 0.57687146, 0.47536097, 0.12240199])" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "rng = np.random.default_rng(seed=18)\n", + "rng.random(10)" + ] + }, + { + "cell_type": "markdown", + "id": "a59b2279-3f9f-4874-9754-aa1e031634cf", + "metadata": {}, + "source": [ + "You may have guessed by looking at the returned values that `random()` produces values in the 0 $\\rightarrow$ 1 range, but what happens if we need values in a different range? We can modify these values by mutiplying them by a coefficient to increase the range and using addition or substration to shift the center of the range. For example, if we need random values from -10 $\\rightarrow$ +10, we can accomplish this by the following." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "f6cbfb8d-b153-494b-9532-c657b8fe461b", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([-3.72807758, 4.72417165, 8.14778066, 7.7720389 , 8.96641764,\n", + " -9.49192157, 4.7607717 , 3.45200153, 2.50375281, 2.75248376])" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "20 * rng.random(10) - 10" + ] + }, + { + "cell_type": "markdown", + "id": "cdc9a16c-6d94-449c-8a41-1dbbb30b649a", + "metadata": {}, + "source": [ + "It's worth noting that the `random()` method returns values from the [0,1) range which includes the lower end and excludes the upper end. This is close enough to [0,1] for our purposes." + ] + }, + { + "cell_type": "markdown", + "id": "b915dba8-48d1-4dde-b3bd-4f048502f78e", + "metadata": {}, + "source": [ + "## Solving the birthday problem\n", + "\n", + "The goal of the [birthday problem](https://en.wikipedia.org/wiki/Birthday_problem) is to determine the probability of multiple children in a classroom of 25 students having the same birthday. For simiplicity, we will ignore leap years (i.e., February 29 birthdays) and assume that the students are equilly likely to be born any day of the year. One method of determining the answer is to repeately simulate a classroom of 25 student birthdays by using a random number generator and see how often all students in the class have unique birthdays. The general steps for this processes are outlined below. \n", + "\n", + "1. Simulate 25 random birthdays with a random integer generator\n", + "2. Check to see if any of the above birthdays match\n", + "3. Record the outcome if all birthdays are unique\n", + "4. Repeat setps 1-3 a large number of times\n", + "\n", + "To make things easier, we will just generate integers 0 $\\rightarrow$ 364 representating days of the year instead of actual months and days." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "36e6f902-5218-4975-a625-7a54a05fe03b", + "metadata": {}, + "outputs": [], + "source": [ + "def all_unique(class_size, n_classrooms=100):\n", + " '''Randomly generates birthdays for groups of kids of a given group size and outputs the percent of time\n", + " all students have uniquie birthdays. All input and output values are ints or floats.\n", + " \n", + " (classroom size, number of classrooms) -> percentage classrooms with all unique birthdays\n", + " '''\n", + " \n", + " all_unique_class = 0 # number of classrooms with students NOT sharing birthdays\n", + " \n", + " for classroom in range(n_classrooms):\n", + " birthdays = rng.integers(0, high=365, size=class_size)\n", + " if class_size == np.unique(birthdays).size:\n", + " all_unique_class += 1\n", + " \n", + " return 100 * all_unique_class / n_classrooms" + ] + }, + { + "cell_type": "markdown", + "id": "45763a5f-887f-4a4b-a5d2-a6a04cb52fcc", + "metadata": {}, + "source": [ + "Below we simulate 50000 classrooms of 25 students and find that only around 43% of the time every student in a classroom has a unique birthday from all the other students." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "7c77811a-d825-4f52-8161-f037427c72f9", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "43.286" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "all_unique(25, n_classrooms=50000)" + ] + }, + { + "cell_type": "markdown", + "id": "dc951c53-4e08-41e0-b54b-1b88e0ad1061", + "metadata": {}, + "source": [ + "This problem also has an equation for the probability given below where **p** is the probability of all students having a unique birthday and **n** is the classroom size. Performing this calculation below, we find that 43.13% of the time, students should have all unique birthdays which is quite close to what was found in the simulation above.\n", + "\n", + "$$ p = \\frac {365!}{365^n(365-n)!} $$" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "c95b4fcc-45a0-4925-91fb-39d3469615b9", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.4313002960305361" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "n = 25\n", + "math.factorial(365)/(365**n * math.factorial(365-n))" + ] + }, + { + "cell_type": "markdown", + "id": "5a18ddfb-e49f-44b5-ac98-c1e9512e15ad", + "metadata": {}, + "source": [ + "## Simulating a Galton board\n", + "\n", + "Next, we will simulate a [Galton board](https://en.wikipedia.org/wiki/Galton_board) which allows mables to fall down levels of staggered pegs. Each marble starts in the horizontal center of the board, and at each level, the marble hits a peg. To continue falling to the next level, the marble must move around the peg, and it has an equal likeliness of moving to the left as it does to the right. At the bottom of the board, the marbles collect in bins with the height of marbles yielding a normal distribution." + ] + }, + { + "cell_type": "markdown", + "id": "2a0bb53d-71bb-4d70-a308-2f49f1d099ea", + "metadata": {}, + "source": [ + "![](tutorial-stochastic/galton_board.png)" + ] + }, + { + "cell_type": "markdown", + "id": "745bf65b-30c0-4ffb-a4ba-5ccae89d9805", + "metadata": {}, + "source": [ + "**Figure 1.** An example of a Galton board with three marbles with three different potential paths (dotted lines) shown.\n", + "\n", + "The key operational detail of a Galton board is that every marble moves one increment to the left or right at each level, so our simulation centers around a series of randomly generated +1 and -1 to determine this movement by the following methodolog.\n", + "1. Generate a random series of +1 and -1 in an even distribution - one value for every level on the Galton board\n", + "2. Sum up the values in step 1 to determine the final location of the mable\n", + "3. Repeat steps 1-2 for each simulated marble\n", + "4. Visualize the result\n", + "\n", + "Below is the simulation for a single marble moving down a 10-layered Galton board. Note how the integers 0 and 1 generated by `integers()` and converted to a series of -1 and +1 values, respectively." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "32ce5473-354f-494a-85eb-68054974a2ea", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "4" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "moves = 2 * rng.integers(0, high=2, size=10) - 1\n", + "final_position = moves.sum()\n", + "final_position" + ] + }, + { + "cell_type": "markdown", + "id": "ec34bc52-8270-42bb-8503-cbddfe2d8b25", + "metadata": {}, + "source": [ + "To simulate additional marbles, we could use a `for` loop, but because we need the same number of integers for each marble, a more efficient way is to generate the random integers in a two-dimensional array with a row for every level on the Galton board and column for every marble simulated. We then sum up the values in each column to obtain the final positions of all marbles." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "5b9fa1dd-d9db-4511-98e3-faa61a0cbff0", + "metadata": {}, + "outputs": [], + "source": [ + "def galton(marbles, levels=10):\n", + " '''integer -> ndarray of integers\n", + "\n", + " This function takes in an integer number of marbles and number of levels and outputs \n", + " the horizontal position of these marbles at the bottom of a Galton board. \n", + " '''\n", + " moves = 2 * rng.integers(0, high=2, size=(levels, marbles)) - 1\n", + " final_position = moves.sum(axis=0)\n", + " \n", + " return final_position" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "d2b772e2-61f8-46f6-90e7-94a553837ac6", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 0, -2, -2, 2, 4, -4, -4, -2, 2, 2, 0, -2, 4, 0, 4, -4, 0,\n", + " -8, 2, 2])" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "sim = galton(1200)\n", + "sim[:20]" + ] + }, + { + "cell_type": "markdown", + "id": "693e2121-9fe7-428b-b284-654654a990ac", + "metadata": {}, + "source": [ + "We visualize the results below using a histogram plot. Being that all values are integers, we set `align='left'` so that each bar resides directly over the integer it represents." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "8c5d4ff6-4238-4283-9b49-e2fdfc52dcab", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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5/PPP1f79u0VEhKiY8eOSZLmzJmjr7/+2q7tzJ8/XxcuXFCHDh1UvXp16/THt7a/++67evTRR9WrVy899NBDCg4O1ooVK6zr3d3dtWrVKrm7uysyMlLPPPOMnnvuOU2bNq00hwYAAEzG7jM78+fP16RJkzRy5Ei98cYb1puS/f39NWfOHHXv3r3E2zIM45ZjKlSooLi4OMXFxd1wTGhoqL799tsS7xcAAPz3sPvMzrx58/T3v/9dr7/+utzd3a3L27Rpoz179jg0HAAAwO2yu+ykp6erVatWRZZ7enrafMwDAABAWWB32QkLC1NqamqR5YmJiWrcuLEjMgEAADiM3ffsjB49WjExMbp69aoMw9DWrVu1ZMkSzZgxQx9//LEzMgIAAJSa3WXn+eefl5eXlyZMmKArV67o6aefVkhIiN577z317dvXGRkBAABKze6yI0n9+vVTv379dOXKFV26dEmBgYGOzgUAAOAQpSo713l7e8vb29tRWQAAAByuRGWnVatWslgsJdrgTz/9dFuBAAAAHKlEZadHjx5OjgEAAOAcJSo7kydPdnYOAAAApyj1PTvbt2/XgQMHJElNmjRReHi4w0IBAAA4it1l58SJE3rqqae0ceNG+fv7S5LOnz+vtm3baunSpapZs6ajMwIAAJSa3U9Qfv7555Wfn68DBw7o7NmzOnv2rA4cOKDCwkI9//zzzsgIAABQanaf2Vm3bp02bdqkhg0bWpc1bNhQ8+bN04MPPujQcAAAALfL7jM7tWrVUn5+fpHlBQUFCgkJcUgoAAAAR7G77Lz99tt66aWXtH37duuy7du3KzY2VrNmzXJoOAAAgNtVostYlStXtnmo4OXLlxURESEPj99ffu3aNXl4eGjQoEE8kwcAAJQpJSo7c+bMcXIMAAAA5yhR2enfv7+k38/gLF68WFFRUQoKCnJqMAAAAEew654dDw8P/eUvf9HVq1edlQcAAMCh7L5B+f7779fOnTudkQUAAMDh7H7OzrBhwzRmzBidOHFC4eHhqlixos36e++912HhAAAAbpfdZadv376SpBEjRliXWSwWGYYhi8WigoICx6UDAAC4TXaXnfT0dGfkAAAAcAq7y05oaKgzcgAAADiF3WXnuv379ysjI0N5eXk2yx9//PHbDgUAAOAodpedX375RU888YT27NljvVdHkvUJy9yzAwAA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q4CAAEdtDgAAwCHsvozVqlUrmxuUDcNQVlaWfv31V33wwQcODQcAAHC77C47PXr0sJl3c3NTtWrV1KFDBzVq1MhRuQAAABzC7rIzefJkZ+QAAABwCpc+VHD9+vV67LHHFBISIovFoq+++spmvWEYmjRpkqpXry4vLy916tRJhw4dshlz9uxZ9evXT76+vvL399fgwYN16dKlO3gUAACgLCtx2XFzc5O7u/tNJw8P+04UXb58WS1atFBcXFyx62fOnKm5c+dqwYIF2rJliypWrKioqChdvXrVOqZfv37at2+fkpKStGrVKq1fv15Dhw61KwcAADCvEreTlStX3nBdSkqK5s6dq8LCQrt2Hh0drejo6GLXGYahOXPmaMKECerevbsk6bPPPlNQUJC++uor9e3bVwcOHFBiYqK2bdumNm3aSJLmzZunrl27atasWQoJCSl227m5ucrNzbXO5+Tk2JUbAADcPUpcdq4Xjj9KS0vTuHHj9M0336hfv36aNm2aw4Klp6crKytLnTp1si7z8/NTRESEUlJS1LdvX6WkpMjf399adCSpU6dOcnNz05YtW/TEE08Uu+0ZM2Zo6tSpDssKAADKrlLds3Pq1CkNGTJEzZs317Vr15SamqqFCxcqNDTUYcGysrIkSUFBQTbLg4KCrOuysrIUGBhos97Dw0MBAQHWMcUZP368Lly4YJ2OHz/usNwAAKBssesmmwsXLuhvf/ub5s2bp5YtWyo5OVkPPvigs7I5jaenpzw9PV0dAwAA3AElPrMzc+ZM1a1bV6tWrdKSJUu0adMmpxad4OBgSVJ2drbN8uzsbOu64OBgnT592mb9tWvXdPbsWesYAADw363EZ3bGjRsnLy8v1a9fXwsXLtTChQuLHbdixQqHBAsLC1NwcLCSk5PVsmVLSb/fSLxlyxa9+OKLkqTIyEidP39eO3bsUHh4uCRpzZo1KiwsVEREhENyAACAu1uJy85zzz1n8zERjnDp0iUdPnzYOp+enq7U1FQFBASodu3aGjlypP7617+qQYMGCgsL08SJExUSEmJ9inPjxo3VpUsXDRkyRAsWLFB+fr6GDx+uvn373vCdWAAA4L9LictOQkKCw3e+fft2Pfzww9b50aNHS5L69++vhIQEvfLKK7p8+bKGDh2q8+fPq3379kpMTFSFChWsr1m0aJGGDx+ujh07ys3N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ysnJ0b59+1yWq0qVKmrYsKE+++wzXb58WdeuXdOHH36owMBAhYeHuyxXcX766SedPHlSbm5uatWqlapXr67o6Gjt3bvX1dGKlZ2drSFDhujzzz+Xt7e3q+PY5cKFCwoICHBphry8PO3YsUOdOnWyLnNzc1OnTp2UkpLiwmS3duHCBUly+dfwZmJiYtStWzebr29Z889//lNt2rTRk08+qcDAQLVq1Up///vfXR2rWG3btlVycrIOHjwoSdq1a5c2bNig6OhoFye7ufT0dGVlZdn8HPj5+SkiIqLM/Z6Z4gnKZpeVlVXkadDX5115uchiseiHH35Qjx495OPjIzc3NwUGBioxMbHMnSr+5ZdfJElTpkzR7NmzVadOHb3zzjvq0KGDDh48WKb+sBiGoQEDBugvf/mL2rRpo6NHj7o6UokdPnxY8+bN06xZs1ya47ffflNBQUGxvzc///yzi1LdWmFhoUaOHKl27dqpWbNmro5TrKVLl+qnn37Stm3bXB3lpn755RfNnz9fo0eP1muvvaZt27ZpxIgRKl++vPr37+/qeDbGjRunnJwcNWrUSO7u7iooKNAbb7yhfv36uTraTV3/+1Pc71lZu5WBMztOMm7cOFkslptOZfU/uiXNbhiGYmJiFBgYqH//+9/aunWrevTooccee0yZmZllKmthYaEk6fXXX1evXr0UHh6u+Ph4WSwWLV++vExlnTdvni5evKjx48ffkVy3k/WPTp48qS5duujJJ5/UkCFDXJT87hYTE6O9e/dq6dKlro5SrOPHjys2NlaLFi1ShQoVXB3npgoLC9W6dWv97W9/U6tWrTR06FANGTJECxYscHW0Ir744gstWrRIixcv1k8//aSFCxdq1qxZWrhwoaujmQZndpxkzJgxGjBgwE3H1K1bt0TbCg4OLvIukuzsbOs6Rytp9jVr1mjVqlU6d+6cfH19JUkffPCBkpKStHDhQo0bN87h2Uqb9Xr5atKkiXW5p6en6tatq4yMDGdGtLLn65qSklLkM2fatGmjfv363ZH/ANr783vq1Ck9/PDDatu2rT766CMnp7u1qlWryt3d3fp7cl12drZTfmccYfjw4Vq1apXWr1+vmjVrujpOsXbs2KHTp0+rdevW1mUFBQVav3693n//feXm5srd3d2FCf9P9erVbX7fJalx48b68ssvXZToxsaOHatx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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "bins = np.arange(-10,12)\n", + "plt.hist(sim, bins=bins, align='left')\n", + "plt.xticks(bins[::2])\n", + "plt.xlabel('Horizontal Marble Position')\n", + "plt.ylabel('Number of Marbles');" + ] + }, + { + "cell_type": "markdown", + "id": "3b1ed737-e851-4272-b706-67fbb91f5a63", + "metadata": {}, + "source": [ + "One interesting trend that appears in the above histogram is that all locations are integers. This is because we used whole numbers for our left and right movements of marbles (i.e., +1 and -1) and used ten layers in the above simulation. There is no way to produce an odd integer by totaling a series of ten +1 or -1 integers. If we changed the number of layers to an odd number, we'd only get odd positions in the result, and if we used +1/2 and -1/2 for our horizontal movement, we'd get both even and odd integers." + ] + }, + { + "cell_type": "markdown", + "id": "7152df76-78b5-47fa-9f76-276c7e497cb7", + "metadata": {}, + "source": [ + "## Calculating pi\n", + "\n", + "As a second appliation of random number generaters, we will calclate a numerical value for $\\pi$. Imagine a circle with radius = $r$ inscribed inside a square of side length $2r$. " + ] + }, + { + "cell_type": "markdown", + "id": "65166f10-9009-4551-a14f-8205dc3b858c", + "metadata": {}, + "source": [ + "![](tutorial-stochastic/circle_square.png)" + ] + }, + { + "cell_type": "markdown", + "id": "88d705e8-b983-4aa2-b35b-ccb13c9aaa6a", + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "" + }, + "tags": [] + }, + "source": [ + "**Figure 2.** The circle radius r inscribed in a square with side length of 2r.\n", + "\n", + "The areas of the circle and square are described by $A\n", + "_{circle} = \\pi r^2$ and $A_{square} = 4r^2$, respectively. If we divide the area of the circle by the area of the square, we get $\\pi / 4$.\n", + "\n", + "$$ \\frac { A_{circle} }{ A_{square} } = \\frac {\\pi r^2} {(2r)^2} = \\frac {\\pi r^2} {4r^2} = \\frac {\\pi}{4} $$\n", + "\n", + "This means that four times the ratio of the area of the circle and square equals $\\pi$.\n", + "\n", + "$$ \\frac { A_{circle} }{ A_{square}} \\times 4 = \\pi $$\n", + "\n", + "The challenge is now finding the ratio between the areas of the two shapes which can be done through a variety of creative means. Our method will be counting randomly placed dots. Imagine we painted the circle inscribed in a square on pavement outside and count the water droplets that fall in the circle and square during a rain storm." + ] + }, + { + "cell_type": "markdown", + "id": "7571b83c-e163-42b0-8329-f494045790a8", + "metadata": {}, + "source": [ + "![](tutorial-stochastic/circle_square_dots.png)" + ] + }, + { + "cell_type": "markdown", + "id": "5c12bceb-c2ad-4cc2-98b9-4148667dc1c7", + "metadata": {}, + "source": [ + "**Figure 3.** Random dots inside the circle and square used to estimate a value of $\\pi$.\n", + "\n", + "Because the rain drops fall randomly, the probability of a drop falling in one of the shapes is proportional to the area of that shape, so dividing the number of drops in the circle by the number of drop in the square provides a estimate of $\\frac { A_{circle} }{ A_{square} }$ which then can be used to calculate $\\pi$. Counting rain is a bit tedious and challenging, so we can simulate this using a random number generator to produce random ($x, y$) coordinates of dots inside the square. We then total the number of these that fall inside the circle versus the square and complete the calculation to obtain a value of $\\pi$.\n", + "\n", + "For smilicity, we will center our circle and square around the origin and give the circle a radius = 1. This requires the coordinates to fall in the [-1, 1) ranges along both the $x$- and $y$-axes. We have no random number generator that produces values in this range, but we can modify the `random()` method which generates floats in the [0, 1) range by multiplying by 2 and substracting 1 as demonstrated below.\n", + "\n", + "~~~python\n", + "rng = np.random.default_rng()\n", + "x = 2 * rng.random() - 1\n", + "~~~" + ] + }, + { + "cell_type": "markdown", + "id": "70c285c1-adae-453e-a895-fb515ea562ab", + "metadata": {}, + "source": [ + "Below is a function that performs this simulation and calculation of $\\pi$ with the only function argument `n_samples` as the number of dots generated. The general proceedure is ouline here.\n", + "1. Generate `n_samples` of ($x, y$) coordinates using the `random()` method\n", + "2. Calculate the distance from the origin using the `np.hypot()` function to determine if the dot is inside the circle (all dots are inside the square)\n", + "3. Calculate $\\pi$" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "e70bfca5-3606-4c3c-ad76-fc715f1f5ef4", + "metadata": {}, + "outputs": [], + "source": [ + "def estimate_pi(n_samples):\n", + " '''(integer) -> pi (float)\n", + " \n", + " Estimates the value of pi by finding the ratio of the area of a unit circle/area of a unit square\n", + " and multiplying by 4.\n", + " '''\n", + "\n", + " n_samples = int(n_samples)\n", + " \n", + " # Step 1\n", + " rng = np.random.default_rng()\n", + " coords = rng.random(size=(n_samples, 2))\n", + "\n", + " # Step 2\n", + " dist_from_origin = np.hypot(coords[:,0], coords[:,1]) # distance from the origion\n", + " in_circle = dist_from_origin[dist_from_origin <= 1] # if <= 1, the point is inside the circle\n", + "\n", + " # Step 3\n", + " pi = 4 * (in_circle.size / n_samples)\n", + " \n", + " return pi" + ] + }, + { + "cell_type": "markdown", + "id": "d34736f4-21f4-4e15-a3b3-d68cbf90b782", + "metadata": {}, + "source": [ + "We can then call this function with 100 dots generated. Because we are using a random number generator, every time we call this function, we likley get a different value for $\\pi$." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "c3bac1dc-e420-4b2d-a0b7-8b3fce9f277b", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "3.08" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "estimate_pi(100)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "19575a49-311d-4c27-aa34-2cd8a3539265", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "3.16" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "estimate_pi(100)" + ] + }, + { + "cell_type": "markdown", + "id": "947f9bfd-9550-440b-820b-eeb746dad01d", + "metadata": {}, + "source": [ + "We can also generate a value for $\\pi$ using the `np.pi` to compare our answer to." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "9d107cde-6f0a-48ae-9258-0392f41cc37d", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "3.141592653589793" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.pi" + ] + }, + { + "cell_type": "markdown", + "id": "dfdb0029-6ef8-49d9-997a-2b25ad65fe5e", + "metadata": {}, + "source": [ + "Odds are that the values calculated above for $\\pi$ above is close but not exactly 3.14. If we increase the number of dots, the value for $\\pi$ will on average become closer to the true value. While it may be tempting to just call the function with an extremely large number of dots, this can take substatially longer to computer." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "d49d0955-f5e9-4214-abb2-2f0c9c4f470c", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "3.14157644" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "estimate_pi(1E8)" + ] + }, + { + "cell_type": "markdown", + "id": "cbc28bcb-b975-4d82-9f06-6a6378bf09c2", + "metadata": {}, + "source": [ + "## Simulating radioactive decay\n", + "\n", + "As a final example, we will simulate the radioactive decay of the radioactive nuclide $^{137m}$Ba to determine the quantity of undecayed material versus time. We will then compare it to an analytical model to see how well the two agree. Radioactive nuclei decay by first-order kinetics, which means that each radioactive nucleus has a fixed probability of decaying at any given time. This is analogous to how each six-sided die in a bucket has a fixed probability of rolling a one each time they are dumped out. This analogy is so good that we can simulate the decay process by generating a large number of random integers with fixed probabilities.\n", + "\n", + "The first thing we need to is to know the probability of a nucleus decaying in a single second. Because this is a first-order process, the rate (-dA/dt) is described by\n", + "\n", + "$$ \\frac{-dA}{dt} = kA $$\n", + "\n", + "where A is the quantity of $^{137m}$Ba, $t$ is time in seconds, and $k$ is the rate constant for this process. We also know that the half-life (t$_{1/2}$) of $^{137m}$Ba is about 151 seconds which is related to the rate constant by the following equation.\n", + "\n", + "$$ t_{1/2} = \\frac{ln(2)}{k} $$\n", + "\n", + "This means that $k$ = 4.59e$^{-3}$ s$^{-1}$. For first-order kinetics, this means that 4.59e$^{-3}$ fraction of the nuclei decays, so this is the probability we need to simulate this process using random numbers. The function below calculates the fraction of radioactive material remaining based on a rate constant `k` and allows the users to choose the number of simulated nuclei `n` and duraction of the simulation `n_final`." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "f5ec62ec-f980-43ea-b5ea-19d7a6de8450", + "metadata": {}, + "outputs": [], + "source": [ + "def decay(k, n=1000, t_final=1000):\n", + " '''floats and integers -> ndarray of integers\n", + "\n", + " Calculates the fraction of nuclei remaining at each second in the simulation given n initial \n", + " nuclei with a rate constant k of decaying each second and a final simulation time t_final.\n", + " '''\n", + "\n", + " n_undecayed = n\n", + " undecayed_array = np.full(t_final + 1, n)\n", + " \n", + " for second in range(1, t_final + 1):\n", + " decays = rng.binomial(1, p=k, size=n_undecayed).sum()\n", + " n_undecayed -= decays\n", + " undecayed_array[second] = n_undecayed\n", + " \n", + " fraction = undecayed_array / n \n", + " \n", + " \n", + " return fraction" + ] + }, + { + "cell_type": "markdown", + "id": "61e2bc98-4518-4b2b-a33d-b8303ee65a53", + "metadata": {}, + "source": [ + "Below we simulate the decay of $^{137m}$Ba using a hundred simulated nuclei." + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "bd9d6811-2248-4c12-b834-385658b40baa", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([1. , 1. , 1. , ..., 0.01, 0.01, 0.01])" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "decay(4.59e-3, n=100)" + ] + }, + { + "cell_type": "markdown", + "id": "8320f7c8-31ea-4272-8683-9cd477f943c6", + "metadata": {}, + "source": [ + "We can plot and compare this simulation to the analytical model for this simulation knowing that the fraction of undecayed nuclei ($\\frac{A}{A_0}$) is described by the following first-order equation where $A_0$ and $A_t$ are the initial quantities and quantities of nuclei at time $t$.\n", + "\n", + "$$ \\frac{A_t}{A_0} = e^{-kt} $$" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "aff9c2ec-a032-4fc7-8ca0-46502ab1b31c", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "seconds = np.arange(1001)\n", + "fraction = np.exp(-4.59e-3 * seconds)\n", + "\n", + "plt.plot(seconds, fraction, linestyle='-', label='Theoretical')\n", + "plt.plot(seconds, decay(4.59e-3, n=500), linestyle='--', label='Simulation')\n", + "plt.xlabel('Time, s')\n", + "plt.ylabel('Fraction of Undecayed Nuclei')\n", + "plt.legend();" + ] + }, + { + "cell_type": "markdown", + "id": "10d2f74f-06d1-418e-a9e0-14265c58171a", + "metadata": {}, + "source": [ + "The simulation is in good agreement with the theoretical model, but this is some discrepency. If we increase the number of simulated nuclei, the simulation should align better with the theoretical values." + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "bae004b9-9cf0-4975-aaa5-b9b410b69cde", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "seconds = np.arange(1001)\n", + "fraction = np.exp(-4.59e-3 * seconds)\n", + "\n", + "plt.plot(seconds, fraction, linestyle='-', label='Theoretical')\n", + "plt.plot(seconds, decay(4.59e-3, n=5000), linestyle='--', label='Simulation')\n", + "plt.xlabel('Time, s')\n", + "plt.ylabel('Fraction of Undecayed Nuclei')\n", + "plt.legend();" + ] + }, + { + "cell_type": "markdown", + "id": "7e193e9f-25ca-47fe-9809-16db9141e164", + "metadata": {}, + "source": [ + "## Further reading\n", + "\n", + "- To learn more about NumPy random number generators, see [Random Generator](https://numpy.org/doc/stable/reference/random/index.html)\n", + "- To learn more about random number distributions and their generation, see [Monte Carlo Simulation Part 5: Randomness & Random Number Generation](https://towardsdatascience.com/monte-carlo-simulation-421110b678c5?gi=f86d4ec9f452)\n", + "- For examples of using random variables for chemical simulations, see chapter 9 of [Scientific Computing for Chemists](https://weisscharlesj.github.io/SciCompforChemists/intro.html)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.8" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} From d8d5b47e7cbf5095fd4e5c24034bcde0e1d88c77 Mon Sep 17 00:00:00 2001 From: Charles Weiss <69219836+weisscharlesj@users.noreply.github.com> Date: Sat, 24 Jun 2023 16:00:49 -0500 Subject: [PATCH 3/6] Update README.md Added tutorial-stochastic-simulations to README file --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index b5453a6e..d84f57d9 100644 --- a/README.md +++ b/README.md @@ -26,6 +26,7 @@ or navigate to any of the documents listed below and download it individually. 9. [Tutorial: Plotting Fractals](content/tutorial-plotting-fractals.ipynb) 10. [Tutorial: NumPy natural language processing from scratch with a focus on ethics](content/tutorial-nlp-from-scratch.md) 11. [Tutorial: Analysing the impact of the lockdown on air quality in Delhi, India](content/tutorial-air-quality-analysis.md) +12. [Tutorial: Stochastic Simulations](contant/tutorial-stochastic-simulations.ipynb) ## Contributing From bc946ee8b6e78347b44f2634bf1716274e2336a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Brigitta=20Sip=C5=91cz?= Date: Wed, 28 Jun 2023 08:01:55 -0700 Subject: [PATCH 4/6] Update README.md Co-authored-by: Mukulika <60316606+Mukulikaa@users.noreply.github.com> --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d84f57d9..00e7bfc1 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,7 @@ or navigate to any of the documents listed below and download it individually. 9. [Tutorial: Plotting Fractals](content/tutorial-plotting-fractals.ipynb) 10. [Tutorial: NumPy natural language processing from scratch with a focus on ethics](content/tutorial-nlp-from-scratch.md) 11. [Tutorial: Analysing the impact of the lockdown on air quality in Delhi, India](content/tutorial-air-quality-analysis.md) -12. [Tutorial: Stochastic Simulations](contant/tutorial-stochastic-simulations.ipynb) +12. [Tutorial: Stochastic Simulations](content/tutorial-stochastic-simulations.ipynb) ## Contributing From 89c3bb7f25c105f4f3a0f3b28d3d0c86cbc34acf Mon Sep 17 00:00:00 2001 From: Ross Barnowski Date: Sun, 30 Jul 2023 18:38:40 -0700 Subject: [PATCH 5/6] MAINT: Add stochastic tutorial to toctree. This is necessary to get the sphinx build working. --- site/features.md | 1 + 1 file changed, 1 insertion(+) diff --git a/site/features.md b/site/features.md index fb966a8a..e98581c6 100644 --- a/site/features.md +++ b/site/features.md @@ -10,4 +10,5 @@ maxdepth: 1 content/tutorial-svd content/save-load-arrays content/tutorial-ma +content/tutorial-stochastic-simulations ``` From 39c80ea7f659f19bb20767d8b3eb43b45960811e Mon Sep 17 00:00:00 2001 From: Charles Weiss <69219836+weisscharlesj@users.noreply.github.com> Date: Sun, 30 Jul 2023 18:40:27 -0700 Subject: [PATCH 6/6] ENH: Convert stochastic tutorial to myst version. --- content/tutorial-stochastic-simulations.ipynb | 777 ------------------ content/tutorial-stochastic-simulations.md | 483 +++++++++++ 2 files changed, 483 insertions(+), 777 deletions(-) delete mode 100644 content/tutorial-stochastic-simulations.ipynb create mode 100644 content/tutorial-stochastic-simulations.md diff --git a/content/tutorial-stochastic-simulations.ipynb b/content/tutorial-stochastic-simulations.ipynb deleted file mode 100644 index 2bfd1c8c..00000000 --- a/content/tutorial-stochastic-simulations.ipynb +++ /dev/null @@ -1,777 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "2931e270-7884-4521-928c-65fa5ca36d60", - "metadata": {}, - "source": [ - "# Simulating Using Random Variables\n", - "\n", - "Randomness, or apparent randomness, is a major part of the world we live from the movement of gas molecules in the air we breath to the outcome of a coin toss. While many events are not truely random, they are often close enough to random or seemingly random enough to be simulated as such. Despite many processes being random, their outcomes often conform to a statistical pattern if enough of these random events occur. For example, if we roll a six-sided die over a large number of rolls, we expect to roll a 5 about $\\frac{1}{6}$ of the time. As a general rule, the larger the number of random events observed, the closer the distribution of these events will *likely* be to the expected disbribution. In this tutorial, we will use a random number generator provided in NumPy to solve a number of problems through stochastic simulations. While the problems demonstrated below all have know solutions or equations, you may face other problems that do not have an analytical model or known solution. The methodology demonstrated below can be used to solve problems when no known solution or model exists. \n", - "\n", - "## What you'll do\n", - "- Generate random values using NumPy to power stochastic simulations\n", - "- Perform stochastic simulations to determine the\n", - " - Likelyhood of multiple children in a classroom of 25 having the same birthday\n", - " - Distribution of marbles in a Galton board\n", - " - Value of $\\pi$\n", - " - Amount of radioactive material left versus time\n", - "- Compare the above simulations to known values or an analytical model\n", - "\n", - "## What you'll learn:\n", - "- Generating large quantites of random values in a desired distribution\n", - "- Using random values to simulation a range of scenarios and solve problems\n", - "\n", - "## What you'll need:\n", - "- [NumPy](https://numpy.org/)\n", - "- [Matplotlib](https://matplotlib.org/)\n", - "- Python's `math` module\n", - "\n", - "The above two packages are imported using the following commands:" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "50324dde-32fe-44b1-b15f-bce368ce16ca", - "metadata": {}, - "outputs": [], - "source": [ - "import numpy as np\n", - "import matplotlib.pyplot as plt\n", - "import math" - ] - }, - { - "cell_type": "markdown", - "id": "70b2a718-ba0c-4ed3-8a5d-4a7bd90f45c8", - "metadata": {}, - "source": [ - "## Generating random variables\n", - "\n", - "NumPy can generate random variables using a Generator from the `np.random` module. While these values are not truely random, they are close enough for the following applications. One of the advantages of using NumPy to generate variables over the standard `random` Python module is that NumPy can generate a large number of random variables efficiently without the use of a `for` loop. These variables can be generated in a variety of probability distribution including normal, poisson, and binomial; but for the following simulations, we will mostly use even distributions where all numbers in the range have an equal likelyhood of being generated. This is accomplished by first creating a Generator using the `np.random.default_rng()` function and then using `random(n)` or `np.integers(low, high=, size=n)` methods with the Generator to produce random values where `n` is the number of random values returned. Below are some common methods for generating random values.\n", - "\n", - "| Method | Description |\n", - "|-----------|-------------|\n", - "|`random(n)`| Generates `n` float values in the [0,1) range with an even distribution |\n", - "|`integers(low, high=, size=)`| Generates `size` integers in the requested range [low, high) in a uniform distribution|\n", - "|`normal(loc, scale=, size=)`| Generates `size` floats in a normal distribution centered on `loc` with a `scale` standard deviation|\n", - "|`binomial(t, p, size=)`| Generates `size` integers in a bionimial distribution with `t` trials for each value with a probability `p`|\n", - "|`choice(a, size=)`| Selects `size` elements from `a` list, tuple or ndarray with an even probability |\n", - "|`shuffle(a)`| Shuffles items in list, tubple, or ndarray `a` |" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "8a3c0c28-f9bf-466d-8522-a38e11488499", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([0.39930577, 0.71741468, 0.28082333, 0.08272492, 0.96977132,\n", - " 0.56392675, 0.64432096, 0.57687146, 0.47536097, 0.12240199])" - ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "rng = np.random.default_rng(seed=18)\n", - "rng.random(10)" - ] - }, - { - "cell_type": "markdown", - "id": "a59b2279-3f9f-4874-9754-aa1e031634cf", - "metadata": {}, - "source": [ - "You may have guessed by looking at the returned values that `random()` produces values in the 0 $\\rightarrow$ 1 range, but what happens if we need values in a different range? We can modify these values by mutiplying them by a coefficient to increase the range and using addition or substration to shift the center of the range. For example, if we need random values from -10 $\\rightarrow$ +10, we can accomplish this by the following." - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "f6cbfb8d-b153-494b-9532-c657b8fe461b", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([-3.72807758, 4.72417165, 8.14778066, 7.7720389 , 8.96641764,\n", - " -9.49192157, 4.7607717 , 3.45200153, 2.50375281, 2.75248376])" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "20 * rng.random(10) - 10" - ] - }, - { - "cell_type": "markdown", - "id": "cdc9a16c-6d94-449c-8a41-1dbbb30b649a", - "metadata": {}, - "source": [ - "It's worth noting that the `random()` method returns values from the [0,1) range which includes the lower end and excludes the upper end. This is close enough to [0,1] for our purposes." - ] - }, - { - "cell_type": "markdown", - "id": "b915dba8-48d1-4dde-b3bd-4f048502f78e", - "metadata": {}, - "source": [ - "## Solving the birthday problem\n", - "\n", - "The goal of the [birthday problem](https://en.wikipedia.org/wiki/Birthday_problem) is to determine the probability of multiple children in a classroom of 25 students having the same birthday. For simiplicity, we will ignore leap years (i.e., February 29 birthdays) and assume that the students are equilly likely to be born any day of the year. One method of determining the answer is to repeately simulate a classroom of 25 student birthdays by using a random number generator and see how often all students in the class have unique birthdays. The general steps for this processes are outlined below. \n", - "\n", - "1. Simulate 25 random birthdays with a random integer generator\n", - "2. Check to see if any of the above birthdays match\n", - "3. Record the outcome if all birthdays are unique\n", - "4. Repeat setps 1-3 a large number of times\n", - "\n", - "To make things easier, we will just generate integers 0 $\\rightarrow$ 364 representating days of the year instead of actual months and days." - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "36e6f902-5218-4975-a625-7a54a05fe03b", - "metadata": {}, - "outputs": [], - "source": [ - "def all_unique(class_size, n_classrooms=100):\n", - " '''Randomly generates birthdays for groups of kids of a given group size and outputs the percent of time\n", - " all students have uniquie birthdays. All input and output values are ints or floats.\n", - " \n", - " (classroom size, number of classrooms) -> percentage classrooms with all unique birthdays\n", - " '''\n", - " \n", - " all_unique_class = 0 # number of classrooms with students NOT sharing birthdays\n", - " \n", - " for classroom in range(n_classrooms):\n", - " birthdays = rng.integers(0, high=365, size=class_size)\n", - " if class_size == np.unique(birthdays).size:\n", - " all_unique_class += 1\n", - " \n", - " return 100 * all_unique_class / n_classrooms" - ] - }, - { - "cell_type": "markdown", - "id": "45763a5f-887f-4a4b-a5d2-a6a04cb52fcc", - "metadata": {}, - "source": [ - "Below we simulate 50000 classrooms of 25 students and find that only around 43% of the time every student in a classroom has a unique birthday from all the other students." - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "7c77811a-d825-4f52-8161-f037427c72f9", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "43.286" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "all_unique(25, n_classrooms=50000)" - ] - }, - { - "cell_type": "markdown", - "id": "dc951c53-4e08-41e0-b54b-1b88e0ad1061", - "metadata": {}, - "source": [ - "This problem also has an equation for the probability given below where **p** is the probability of all students having a unique birthday and **n** is the classroom size. Performing this calculation below, we find that 43.13% of the time, students should have all unique birthdays which is quite close to what was found in the simulation above.\n", - "\n", - "$$ p = \\frac {365!}{365^n(365-n)!} $$" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "c95b4fcc-45a0-4925-91fb-39d3469615b9", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "0.4313002960305361" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "n = 25\n", - "math.factorial(365)/(365**n * math.factorial(365-n))" - ] - }, - { - "cell_type": "markdown", - "id": "5a18ddfb-e49f-44b5-ac98-c1e9512e15ad", - "metadata": {}, - "source": [ - "## Simulating a Galton board\n", - "\n", - "Next, we will simulate a [Galton board](https://en.wikipedia.org/wiki/Galton_board) which allows mables to fall down levels of staggered pegs. Each marble starts in the horizontal center of the board, and at each level, the marble hits a peg. To continue falling to the next level, the marble must move around the peg, and it has an equal likeliness of moving to the left as it does to the right. At the bottom of the board, the marbles collect in bins with the height of marbles yielding a normal distribution." - ] - }, - { - "cell_type": "markdown", - "id": "2a0bb53d-71bb-4d70-a308-2f49f1d099ea", - "metadata": {}, - "source": [ - "![](tutorial-stochastic/galton_board.png)" - ] - }, - { - "cell_type": "markdown", - "id": "745bf65b-30c0-4ffb-a4ba-5ccae89d9805", - "metadata": {}, - "source": [ - "**Figure 1.** An example of a Galton board with three marbles with three different potential paths (dotted lines) shown.\n", - "\n", - "The key operational detail of a Galton board is that every marble moves one increment to the left or right at each level, so our simulation centers around a series of randomly generated +1 and -1 to determine this movement by the following methodolog.\n", - "1. Generate a random series of +1 and -1 in an even distribution - one value for every level on the Galton board\n", - "2. Sum up the values in step 1 to determine the final location of the mable\n", - "3. Repeat steps 1-2 for each simulated marble\n", - "4. Visualize the result\n", - "\n", - "Below is the simulation for a single marble moving down a 10-layered Galton board. Note how the integers 0 and 1 generated by `integers()` and converted to a series of -1 and +1 values, respectively." - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "32ce5473-354f-494a-85eb-68054974a2ea", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "4" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "moves = 2 * rng.integers(0, high=2, size=10) - 1\n", - "final_position = moves.sum()\n", - "final_position" - ] - }, - { - "cell_type": "markdown", - "id": "ec34bc52-8270-42bb-8503-cbddfe2d8b25", - "metadata": {}, - "source": [ - "To simulate additional marbles, we could use a `for` loop, but because we need the same number of integers for each marble, a more efficient way is to generate the random integers in a two-dimensional array with a row for every level on the Galton board and column for every marble simulated. We then sum up the values in each column to obtain the final positions of all marbles." - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "5b9fa1dd-d9db-4511-98e3-faa61a0cbff0", - "metadata": {}, - "outputs": [], - "source": [ - "def galton(marbles, levels=10):\n", - " '''integer -> ndarray of integers\n", - "\n", - " This function takes in an integer number of marbles and number of levels and outputs \n", - " the horizontal position of these marbles at the bottom of a Galton board. \n", - " '''\n", - " moves = 2 * rng.integers(0, high=2, size=(levels, marbles)) - 1\n", - " final_position = moves.sum(axis=0)\n", - " \n", - " return final_position" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "d2b772e2-61f8-46f6-90e7-94a553837ac6", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([ 0, -2, -2, 2, 4, -4, -4, -2, 2, 2, 0, -2, 4, 0, 4, -4, 0,\n", - " -8, 2, 2])" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "sim = galton(1200)\n", - "sim[:20]" - ] - }, - { - "cell_type": "markdown", - "id": "693e2121-9fe7-428b-b284-654654a990ac", - "metadata": {}, - "source": [ - "We visualize the results below using a histogram plot. Being that all values are integers, we set `align='left'` so that each bar resides directly over the integer it represents." - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "8c5d4ff6-4238-4283-9b49-e2fdfc52dcab", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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5/PPP1f79u0VEhKiY8eOSZLmzJmjr7/+2q7tzJ8/XxcuXFCHDh1UvXp16/THt7a/++67evTRR9WrVy899NBDCg4O1ooVK6zr3d3dtWrVKrm7uysyMlLPPPOMnnvuOU2bNq00hwYAAEzG7jM78+fP16RJkzRy5Ei98cYb1puS/f39NWfOHHXv3r3E2zIM45ZjKlSooLi4OMXFxd1wTGhoqL799tsS7xcAAPz3sPvMzrx58/T3v/9dr7/+utzd3a3L27Rpoz179jg0HAAAwO2yu+ykp6erVatWRZZ7enrafMwDAABAWWB32QkLC1NqamqR5YmJiWrcuLEjMgEAADiM3ffsjB49WjExMbp69aoMw9DWrVu1ZMkSzZgxQx9//LEzMgIAAJSa3WXn+eefl5eXlyZMmKArV67o6aefVkhIiN577z317dvXGRkBAABKze6yI0n9+vVTv379dOXKFV26dEmBgYGOzgUAAOAQpSo713l7e8vb29tRWQAAAByuRGWnVatWslgsJdrgTz/9dFuBAAAAHKlEZadHjx5OjgEAAOAcJSo7kydPdnYOAAAApyj1PTvbt2/XgQMHJElNmjRReHi4w0IBAAA4it1l58SJE3rqqae0ceNG+fv7S5LOnz+vtm3baunSpapZs6ajMwIAAJSa3U9Qfv7555Wfn68DBw7o7NmzOnv2rA4cOKDCwkI9//zzzsgIAABQanaf2Vm3bp02bdqkhg0bWpc1bNhQ8+bN04MPPujQcAAAALfL7jM7tWrVUn5+fpHlBQUFCgkJcUgoAAAAR7G77Lz99tt66aWXtH37duuy7du3KzY2VrNmzXJoOAAAgNtVostYlStXtnmo4OXLlxURESEPj99ffu3aNXl4eGjQoEE8kwcAAJQpJSo7c+bMcXIMAAAA5yhR2enfv7+k38/gLF68WFFRUQoKCnJqMAAAAEew654dDw8P/eUvf9HVq1edlQcAAMCh7L5B+f7779fOnTudkQUAAMDh7H7OzrBhwzRmzBidOHFC4eHhqlixos36e++912HhAAAAbpfdZadv376SpBEjRliXWSwWGYYhi8WigoICx6UDAAC4TXaXnfT0dGfkAAAAcAq7y05oaKgzcgAAADiF3WXnuv379ysjI0N5eXk2yx9//PHbDgUAAOAodpedX375RU888YT27NljvVdHkvUJy9yzAwAA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q4CAAEdtDgAAwCHsvozVqlUrmxuUDcNQVlaWfv31V33wwQcODQcAAHC77C47PXr0sJl3c3NTtWrV1KFDBzVq1MhRuQAAABzC7rIzefJkZ+QAAABwCpc+VHD9+vV67LHHFBISIovFoq+++spmvWEYmjRpkqpXry4vLy916tRJhw4dshlz9uxZ9evXT76+vvL399fgwYN16dKlO3gUAACgLCtx2XFzc5O7u/tNJw8P+04UXb58WS1atFBcXFyx62fOnKm5c+dqwYIF2rJliypWrKioqChdvXrVOqZfv37at2+fkpKStGrVKq1fv15Dhw61KwcAADCvEreTlStX3nBdSkqK5s6dq8LCQrt2Hh0drejo6GLXGYahOXPmaMKECerevbsk6bPPPlNQUJC++uor9e3bVwcOHFBiYqK2bdumNm3aSJLmzZunrl27atasWQoJCSl227m5ucrNzbXO5+Tk2JUbAADcPUpcdq4Xjj9KS0vTuHHj9M0336hfv36aNm2aw4Klp6crKytLnTp1si7z8/NTRESEUlJS1LdvX6WkpMjf399adCSpU6dOcnNz05YtW/TEE08Uu+0ZM2Zo6tSpDssKAADKrlLds3Pq1CkNGTJEzZs317Vr15SamqqFCxcqNDTUYcGysrIkSUFBQTbLg4KCrOuysrIUGBhos97Dw0MBAQHWMcUZP368Lly4YJ2OHz/usNwAAKBssesmmwsXLuhvf/ub5s2bp5YtWyo5OVkPPvigs7I5jaenpzw9PV0dAwAA3AElPrMzc+ZM1a1bV6tWrdKSJUu0adMmpxad4OBgSVJ2drbN8uzsbOu64OBgnT592mb9tWvXdPbsWesYAADw363EZ3bGjRsnLy8v1a9fXwsXLtTChQuLHbdixQqHBAsLC1NwcLCSk5PVsmVLSb/fSLxlyxa9+OKLkqTIyEidP39eO3bsUHh4uCRpzZo1KiwsVEREhENyAACAu1uJy85zzz1n8zERjnDp0iUdPnzYOp+enq7U1FQFBASodu3aGjlypP7617+qQYMGCgsL08SJExUSEmJ9inPjxo3VpUsXDRkyRAsWLFB+fr6GDx+uvn373vCdWAAA4L9LictOQkKCw3e+fft2Pfzww9b50aNHS5L69++vhIQEvfLKK7p8+bKGDh2q8+fPq3379kpMTFSFChWsr1m0aJGGDx+ujh07ys3NTb169dLcuXMdnhUAANyd7P64CEfq0KGDDMO44XqLxaJp06bd9C3tAQEBWrx4sTPiAQAAE3Dpx0UAAAA4G2UHAACYGmUHAACYGmUHAACYGmUHAACYGmUHAACYGmUHAACYGmUHAACYGmUHAACYGmUHAACYGmUHAACYGmUHAACYGmUHAACYGmUHAACYGmUHAACYGmUHAACYGmUHAACYGmUHAACYGmUHAACYGmUHAACYGmUHAACYGmUHAACYGmUHAACYGmUHAACYGmUHAACYGmUHAACYGmUHAACYGmUHAACYGmUHAACYGmUHAACYGmUHAACYGmUHAACYGmUHAACYGmUHAACYGmUHAACYGmUHAACYGmUHAACYGmUHAACYGmUHAACYGmUHAACYGmUHAACYGmUHAACYmoerAwClUWfcv5yy3aNvdnPKdgEArsOZHQAAYGqUHQAAYGqUHQAAYGqUHQAAYGqUHQAAYGqUHQAAYGqUHQAAYGpluuxMmTJFFovFZmrUqJF1/dWrVxUTE6MqVaqoUqVK6tWrl7Kzs12YGAAAlDVl/qGCTZs21Q8//GCd9/D4v8ijRo3Sv/71Ly1fvlx+fn4aPny4evbsqY0bN7oiKgDgDnLGw0V5sKg5lfmy4+HhoeDg4CLLL1y4oE8++USLFy/Wn//8Z0lSfHy8GjdurM2bN+uBBx6401EBAEAZVKYvY0nSoUOHFBISorp166pfv37KyMiQJO3YsUP5+fnq1KmTdWyjRo1Uu3ZtpaSk3HSbubm5ysnJsZkAAIA5lemyExERoYSEBCUmJmr+/PlKT0/Xgw8+qIsXLyorK0vly5eXv7+/zWuCgoKUlZV10+3OmDFDfn5+1qlWrVpOPAoAAOBKZfoyVnR0tPXf9957ryIiIhQaGqovvvhCXl5epd7u+PHjNXr0aOt8Tk4OhQcAAJMq02d2/pO/v7/uueceHT58WMHBwcrLy9P58+dtxmRnZxd7j88feXp6ytfX12YCAADmdFeVnUuXLunIkSOqXr26wsPDVa5cOSUnJ1vXp6WlKSMjQ5GRkS5MCQAAypIyfRnr5Zdf1mOPPabQ0FCdOnVKkydPlru7u5566in5+flp8ODBGj16tAICAuTr66uXXnpJkZGRvBMLAABYlemyc+LECT311FM6c+aMqlWrpvbt22vz5s2qVq2aJOndd9+Vm5ubevXqpdzcXEVFRemDDz5wcWoAAFCWlOmys3Tp0puur1ChguLi4hQXF3eHEgEAgLvNXXXPDgAAgL0oOwAAwNQoOwAAwNQoOwAAwNQoOwAAwNQoOwAAwNQoOwAAwNQoOwAAwNQoOwAAwNQoOwAAwNQoOwAAwNQoOwAAwNQoOwAAwNQoOwAAwNQoOwAAwNQoOwAAwNQoOwAAwNQoOwAAwNQoOwAAwNQoOwAAwNQoOwAAwNQoOwAAwNQoOwAAwNQoOwAAwNQoOwAAwNQoOwAAwNQoOwAAwNQoOwAAwNQoOwAAwNQoOwAAwNQoOwAAwNQoOwAAwNQoOwAAwNQoOwAAwNQoOwAAwNQoOwAAwNQoOwAAwNQ8XB0AAACzqzPuXw7f5tE3uzl8m2bFmR0AAGBqlB0AAGBqlB0AAGBq3LMDK2dcU5a4rgwAcC3O7AAAAFOj7AAAAFOj7AAAAFOj7AAAAFOj7AAAAFOj7AAAAFOj7AAAAFOj7AAAAFOj7AAAAFMzTdmJi4tTnTp1VKFCBUVERGjr1q2ujgQAAMoAU3xcxLJlyzR69GgtWLBAERERmjNnjqKiopSWlqbAwECXZuMjGAAAdxNn/N1y9d8sU5zZmT17toYMGaKBAweqSZMmWrBggby9vfXpp5+6OhoAAHCxu/7MTl5ennbs2KHx48dbl7m5ualTp05KSUkp9jW5ubnKzc21zl+4cEGSlJOT4/B8hblXHL5NiaxkvXuyOiOnRFaykpWs/7ddwzBuPtC4y508edKQZGzatMlm+dixY43777+/2NdMnjzZkMTExMTExMRkgun48eM37Qp3/Zmd0hg/frxGjx5tnS8sLNTZs2dVpUoVWSwWl2TKyclRrVq1dPz4cfn6+rokQ0mR1TnI6hxkdY67JevdklMia2kYhqGLFy8qJCTkpuPu+rJTtWpVubu7Kzs722Z5dna2goODi32Np6enPD09bZb5+/s7K6JdfH19y/wP+XVkdQ6yOgdZneNuyXq35JTIai8/P79bjrnrb1AuX768wsPDlZycbF1WWFio5ORkRUZGujAZAAAoC+76MzuSNHr0aPXv319t2rTR/fffrzlz5ujy5csaOHCgq6MBAAAXM0XZ6dOnj3799VdNmjRJWVlZatmypRITExUUFOTqaCXm6empyZMnF7m8VhaR1TnI6hxkdY67JevdklMiqzNZDONW79cCAAC4e9319+wAAADcDGUHAACYGmUHAACYGmUHAACYGmWnDHjjjTfUtm1beXt73/DhhhkZGerWrZu8vb0VGBiosWPH6tq1a3c2aDEOHjyo7t27q2rVqvL19VX79u31448/ujrWDf3rX/9SRESEvLy8VLlyZfXo0cPVkW4qNzdXLVu2lMViUWpqqqvjFHH06FENHjxYYWFh8vLyUr169TR58mTl5eW5OpokKS4uTnXq1FGFChUUERGhrVu3ujpSETNmzNB9990nHx8fBQYGqkePHkpLS3N1rBJ58803ZbFYNHLkSFdHKdbJkyf1zDPPqEqVKvLy8lLz5s21fft2V8cqoqCgQBMnTrT5PZo+ffqtP+/pDli/fr0ee+wxhYSEyGKx6KuvvrJZbxiGJk2apOrVq8vLy0udOnXSoUOHXBP2Jig7ZUBeXp6efPJJvfjii8WuLygoULdu3ZSXl6dNmzZp4cKFSkhI0KRJk+5w0qIeffRRXbt2TWvWrNGOHTvUokULPfroo8rKynJ1tCK+/PJLPfvssxo4cKB27dqljRs36umnn3Z1rJt65ZVXbvkYdFf6+eefVVhYqA8//FD79u3Tu+++qwULFui1115zdTQtW7ZMo0eP1uTJk/XTTz+pRYsWioqK0unTp10dzca6desUExOjzZs3KykpSfn5+ercubMuX77s6mg3tW3bNn344Ye69957XR2lWOfOnVO7du1Urlw5fffdd9q/f7/eeecdVa5c2dXRinjrrbc0f/58vf/++zpw4IDeeustzZw5U/PmzXN1NF2+fFktWrRQXFxcsetnzpypuXPnasGCBdqyZYsqVqyoqKgoXb169Q4nvQVHfBgnHCM+Pt7w8/Mrsvzbb7813NzcjKysLOuy+fPnG76+vkZubu4dTGjr119/NSQZ69evty7LyckxJBlJSUkuy1Wc/Px8o0aNGsbHH3/s6igl9u233xqNGjUy9u3bZ0gydu7c6epIJTJz5kwjLCzM1TGM+++/34iJibHOFxQUGCEhIcaMGTNcmOrWTp8+bUgy1q1b5+ooN3Tx4kWjQYMGRlJSkvGnP/3JiI2NdXWkIl599VWjffv2ro5RIt26dTMGDRpks6xnz55Gv379XJSoeJKMlStXWucLCwuN4OBg4+2337YuO3/+vOHp6WksWbLEBQlvjDM7d4GUlBQ1b97c5iGJUVFRysnJ0b59+1yWq0qVKmrYsKE+++wzXb58WdeuXdOHH36owMBAhYeHuyxXcX766SedPHlSbm5uatWqlapXr67o6Gjt3bvX1dGKlZ2drSFDhujzzz+Xt7e3q+PY5cKFCwoICHBphry8PO3YsUOdOnWyLnNzc1OnTp2UkpLiwmS3duHCBUly+dfwZmJiYtStWzebr29Z889//lNt2rTRk08+qcDAQLVq1Up///vfXR2rWG3btlVycrIOHjwoSdq1a5c2bNig6OhoFye7ufT0dGVlZdn8HPj5+SkiIqLM/Z6Z4gnKZpeVlVXkadDX5115uchiseiHH35Qjx495OPjIzc3NwUGBioxMbHMnSr+5ZdfJElTpkzR7NmzVadOHb3zzjvq0KGDDh48WKb+sBiGoQEDBugvf/mL2rRpo6NHj7o6UokdPnxY8+bN06xZs1ya47ffflNBQUGxvzc///yzi1LdWmFhoUaOHKl27dqpWbNmro5TrKVLl+qnn37Stm3bXB3lpn755RfNnz9fo0eP1muvvaZt27ZpxIgRKl++vPr37+/qeDbGjRunnJwcNWrUSO7u7iooKNAbb7yhfv36uTraTV3/+1Pc71lZu5WBMztOMm7cOFkslptOZfU/uiXNbhiGYmJiFBgYqH//+9/aunWrevTooccee0yZmZllKmthYaEk6fXXX1evXr0UHh6u+Ph4WSwWLV++vExlnTdvni5evKjx48ffkVy3k/WPTp48qS5duujJJ5/UkCFDXJT87hYTE6O9e/dq6dKlro5SrOPHjys2NlaLFi1ShQoVXB3npgoLC9W6dWv97W9/U6tWrTR06FANGTJECxYscHW0Ir744gstWrRIixcv1k8//aSFCxdq1qxZWrhwoaujmQZndpxkzJgxGjBgwE3H1K1bt0TbCg4OLvIukuzsbOs6Rytp9jVr1mjVqlU6d+6cfH19JUkffPCBkpKStHDhQo0bN87h2Uqb9Xr5atKkiXW5p6en6tatq4yMDGdGtLLn65qSklLkM2fatGmjfv363ZH/ANr783vq1Ck9/PDDatu2rT766CMnp7u1qlWryt3d3fp7cl12drZTfmccYfjw4Vq1apXWr1+vmjVrujpOsXbs2KHTp0+rdevW1mUFBQVav3693n//feXm5srd3d2FCf9P9erVbX7fJalx48b68ssvXZToxsaOHatx48apb9++kqTmzZvr2LFjmjFjRpk7C/VH13+XsrOzVb16devy7OxstWzZ0kWpikfZcZJq1aqpWrVqDtlWZGSk3njjDZ0+fVqBgYGSpKSkJPn6+hb5ZXaEkma/cuWKpN/vhfgjNzc365kUZytp1vDwcHl6eiotLU3t27eXJOXn5+vo0aMKDQ11dkxJJc86d+5c/fWvf7XOnzp1SlFRUVq2bJkiIiKcGdHKnp/fkydP6uGHH7aeLfvPnwdXKF++vMLDw5WcnGx9vEBhYaGSk5M1fPhw14b7D4Zh6KWXXtLKlSu1du1ahYWFuTrSDXXs2FF79uyxWTZw4EA1atRIr776apkpOpLUrl27Im/hP3jw4B37fbfHlStXivzeuLu737H/jpZWWFiYgoODlZycbC03OTk52rJlyw3fXewyLr5BGoZhHDt2zNi5c6cxdepUo1KlSsbOnTuNnTt3GhcvXjQMwzCuXbtmNGvWzOjcubORmppqJCYmGtWqVTPGjx/v0ty//vqrUaVKFaNnz55GamqqkZaWZrz88stGuXLljNTUVJdmK05sbKxRo0YNY/Xq1cbPP/9sDB482AgMDDTOnj3r6mg3lZ6eXmbfjXXixAmjfv36RseOHY0TJ04YmZmZ1snVli5danh6ehoJCQnG/v37jaFDhxr+/v4272osC1588UXDz8/PWLt2rc3X78qVK66OViJl9d1YW7duNTw8PIw33njDOHTokLFo0SLD29vb+Mc//uHqaEX079/fqFGjhrFq1SojPT3dWLFihVG1alXjlVdecXU04+LFi9a/SZKM2bNnGzt37jSOHTtmGIZhvPnmm4a/v7/x9ddfG7t37za6d+9uhIWFGf/v//0/Fye3RdkpA/r3729IKjL9+OOP1jFHjx41oqOjDS8vL6Nq1arGmDFjjPz8fNeF/v9t27bN6Ny5sxEQEGD4+PgYDzzwgPHtt9+6Olax8vLyjDFjxhiBgYGGj4+P0alTJ2Pv3r2ujnVLZbnsxMfHF/uzW1b+P2revHlG7dq1jfLlyxv333+/sXnzZldHKuJGX7/4+HhXRyuRslp2DMMwvvnmG6NZs2aGp6en0ahRI+Ojjz5ydaRi5eTkGLGxsUbt2rWNChUqGHXr1jVef/11lz5a5Loff/yx2J/P/v37G4bx+9vPJ06caAQFBRmenp5Gx44djbS0NNeGLobFMMrAIxoBAACcxPUX1wEAAJyIsgMAAEyNsgMAAEyNsgMAAEyNsgMAAEyNsgMAAEyNsgMAAEyNsgMAAEyNsgOY2NGjR2WxWJSamurqKLc0ZcqUMvPhgXXq1NGcOXNuOsZiseirr766I3lKo0OHDho5cuRNxyQkJMjf3/+O5AFcibIDuNCAAQOsH1T5R2vXrpXFYtH58+dva/u1atVSZmammjVrdlvbsceNjul2XS9u7u7uOnnypM26zMxMeXh4yGKx6OjRow7ftzNcP57rU5UqVdS5c2ft3LnTIdtfsWKFpk+fbp0vrsD16dNHBw8edMj+gLKMsgOYVF5entzd3RUcHCwPDw9Xx3GYGjVq6LPPPrNZtnDhQtWoUeO2t52Xl3fb27DXDz/8oMzMTK1evVqXLl1SdHT0bZdcSQoICJCPj89Nx3h5eSkwMPC29wWUdZQd4C7x5ZdfqmnTpvL09FSdOnX0zjvv2KyvU6eOpk+frueee06+vr4aOnRokctYAwYMsDmbcH1au3atJOncuXN67rnnVLlyZXl7eys6OlqHDh2y7uP6ZY/Vq1ercePGqlSpkrp06aLMzExJv1+KWrhwob7++usi23711Vd1zz33yNvbW3Xr1tXEiROVn59v99ehf//+io+Pt1kWHx+v/v372ywrKCjQ4MGDFRYWJi8vLzVs2FDvvfeezZjrZ6HeeOMNhYSEqGHDhtZ1Fy9e1FNPPaWKFSuqRo0aiouLu2mu48ePq3fv3vL391dAQIC6d+9eorNMVapUUXBwsNq0aaNZs2YpOztbW7ZskXTr7/kHH3ygBg0aqEKFCgoKCtL//M//WNf98TJWhw4ddOzYMY0aNcr6fZGKv4w1f/581atXT+XLl1fDhg31+eef26y3WCz6+OOP9cQTT8jb21sNGjTQP//5z1seJ+BKlB3gLrBjxw717t1bffv21Z49ezRlyhRNnDhRCQkJNuNmzZqlFi1aaOfOnZo4cWKR7bz33nvKzMy0TrGxsQoMDFSjRo0k/f7Hf/v27frnP/+plJQUGYahrl272pSSK1euaNasWfr888+1fv16ZWRk6OWXX5Ykvfzyy+rdu7e1AGVmZqpt27aSJB8fHyUkJGj//v1677339Pe//13vvvuu3V+Lxx9/XOfOndOGDRskSRs2bNC5c+f02GOP2YwrLCxUzZo1tXz5cu3fv1+TJk3Sa6+9pi+++MJmXHJystLS0pSUlKRVq1ZZl7/99tvWr+W4ceMUGxurpKSkYjPl5+crKipKPj4++ve//62NGzdai6A9Z4u8vLwk/X6G6Vbf8+3bt2vEiBGaNm2a0tLSlJiYqIceeqjY7a5YsUI1a9bUtGnTrN+X4qxcuVKxsbEaM2aM9u7dqxdeeEEDBw7Ujz/+aDNu6tSp6t27t3bv3q2uXbuqX79+Onv2bImPE7jjXPyp68B/tf79+xvu7u5GxYoVbaYKFSoYkoxz584ZhmEYTz/9tPHII4/YvHbs2LFGkyZNrPOhoaFGjx49bMakp6cbkoydO3cW2feXX35pVKhQwdiwYYNhGIZx8OBBQ5KxceNG65jffvvN8PLyMr744gvDMAwjPj7ekGQcPnzYOiYuLs4ICgqyOabu3bvf8tjffvttIzw83Do/efJko0WLFjcc/8djGTlypDFw4EDDMAxj4MCBxqhRo4ydO3cakoz09PQbbiMmJsbo1auXTdagoCAjNzfXZlxoaKjRpUsXm2V9+vQxoqOjrfOSjJUrVxqGYRiff/650bBhQ6OwsNC6Pjc31/Dy8jJWr159y+MxDMM4d+6c8cQTTxiVKlUysrKybvk9//LLLw1fX18jJyen2O3/6U9/MmJjY22O6d1337UZEx8fb/j5+Vnn27ZtawwZMsRmzJNPPml07drV5rgnTJhgnb906ZIhyfjuu++KzQGUBZzZAVzs4YcfVmpqqs308ccf24w5cOCA2rVrZ7OsXbt2OnTokAoKCqzL2rRpU6J97ty5U88++6zef/9963YPHDggDw8PRUREWMdVqVJFDRs21IEDB6zLvL29Va9ePet89erVdfr06Vvuc9myZWrXrp2Cg4NVqVIlTZgwQRkZGSXK+58GDRqk5cuXKysrS8uXL9egQYOKHRcXF6fw8HBVq1ZNlSpV0kcffVRkn82bN1f58uWLvDYyMrLI/B+/Dn+0a9cuHT58WD4+PqpUqZIqVaqkgIAAXb16VUeOHLnpsbRt21aVKlVS5cqVtWvXLi1btkxBQUG3/J4/8sgjCg0NVd26dfXss89q0aJFunLlyk33dSs32ud/Hve9995r/XfFihXl6+tbop8BwFXMc9cicJeqWLGi6tevb7PsxIkTpd7WrWRlZenxxx/X888/r8GDB9u9j3LlytnMWywWGYZx09ekpKSoX79+mjp1qqKiouTn56elS5cWuQelpJo3b65GjRrpqaeeUuPGjdWsWbMib69funSpXn75Zb3zzjuKjIyUj4+P3n77bev9MNeV5Gt2K5cuXVJ4eLgWLVpUZF21atVu+tply5apSZMmqlKlil1vA/fx8dFPP/2ktWvX6vvvv9ekSZM0ZcoUbdu2zelvJy/uZ6CwsNCp+wRuB2d2gLtA48aNtXHjRptlGzdu1D333CN3d/cSb+fq1avq3r27GjVqpNmzZxfZx7Vr12zKwJkzZ5SWlqYmTZqUeB/ly5e3OdskSZs2bVJoaKhef/11tWnTRg0aNNCxY8dKvM3iDBo0SGvXrr3hWZ2NGzeqbdu2GjZsmFq1aqX69evf8izLH23evLnIfOPGjYsd27p1ax06dEiBgYGqX7++zeTn53fT/dSqVUv16tUrUlBK8j338PBQp06dNHPmTO3evVtHjx7VmjVrit1Pcd+X/3Sjfdrz/QfKIsoOcBcYM2aMkpOTNX36dB08eFALFy7U+++/b70xuKReeOEFHT9+XHPnztWvv/6qrKwsZWVlKS8vTw0aNFD37t01ZMgQbdiwQbt27dIzzzyjGjVqqHv37iXeR506dbR7926lpaXpt99+U35+vho0aKCMjAwtXbpUR44c0dy5c7Vy5Up7vww2hgwZol9//VXPP/98sesbNGig7du3a/Xq1Tp48KAmTpyobdu2lXj7Gzdu1MyZM3Xw4EHFxcVp+fLlio2NLXZsv379VLVqVXXv3l3//ve/lZ6errVr12rEiBGlPkt3q+/5qlWrNHfuXKWmpurYsWP67LPPVFhYaPOOsj+qU6eO1q9fr5MnT+q3334rdszYsWOVkJCg+fPn69ChQ5o9e7ZWrFhh988ZUNZQdoC7QOvWrfXFF19o6dKlatasmSZNmqRp06ZpwIABdm1n3bp1yszMVJMmTVS9enXrtGnTJkm/v4U7PDxcjz76qCIjI2UYhr799tsily1uZsiQIWrYsKHatGmjatWqaePGjXr88cc1atQoDR8+XC1bttSmTZuKfbeYPTw8PFS1atUbPkPohRdeUM+ePdWnTx9FRETozJkzGjZsWIm3P2bMGG3fvl2tWrXSX//6V82ePVtRUVHFjvX29tb69etVu3Zt9ezZU40bN9bgwYN19epV+fr6lur4bvU99/f314oVK/TnP/9ZjRs31oIFC7RkyRI1bdq02O1NmzZNR48eVb169W54aa1Hjx567733NGvWLDVt2lQffvih4uPj1aFDh1IdA1BWWIxbXWwHAAC4i3FmBwAAmBplBwAAmBplBwAAmBplBwAAmBplBwAAmBplBwAAmBplBwAAmBplBwAAmBplBwAAmBplBwAAmBplBwAAmNr/B3vHo8SMeMvyAAAAAElFTkSuQmCC\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "bins = np.arange(-10,12)\n", - "plt.hist(sim, bins=bins, align='left')\n", - "plt.xticks(bins[::2])\n", - "plt.xlabel('Horizontal Marble Position')\n", - "plt.ylabel('Number of Marbles');" - ] - }, - { - "cell_type": "markdown", - "id": "3b1ed737-e851-4272-b706-67fbb91f5a63", - "metadata": {}, - "source": [ - "One interesting trend that appears in the above histogram is that all locations are integers. This is because we used whole numbers for our left and right movements of marbles (i.e., +1 and -1) and used ten layers in the above simulation. There is no way to produce an odd integer by totaling a series of ten +1 or -1 integers. If we changed the number of layers to an odd number, we'd only get odd positions in the result, and if we used +1/2 and -1/2 for our horizontal movement, we'd get both even and odd integers." - ] - }, - { - "cell_type": "markdown", - "id": "7152df76-78b5-47fa-9f76-276c7e497cb7", - "metadata": {}, - "source": [ - "## Calculating pi\n", - "\n", - "As a second appliation of random number generaters, we will calclate a numerical value for $\\pi$. Imagine a circle with radius = $r$ inscribed inside a square of side length $2r$. " - ] - }, - { - "cell_type": "markdown", - "id": "65166f10-9009-4551-a14f-8205dc3b858c", - "metadata": {}, - "source": [ - "![](tutorial-stochastic/circle_square.png)" - ] - }, - { - "cell_type": "markdown", - "id": "88d705e8-b983-4aa2-b35b-ccb13c9aaa6a", - "metadata": { - "editable": true, - "slideshow": { - "slide_type": "" - }, - "tags": [] - }, - "source": [ - "**Figure 2.** The circle radius r inscribed in a square with side length of 2r.\n", - "\n", - "The areas of the circle and square are described by $A\n", - "_{circle} = \\pi r^2$ and $A_{square} = 4r^2$, respectively. If we divide the area of the circle by the area of the square, we get $\\pi / 4$.\n", - "\n", - "$$ \\frac { A_{circle} }{ A_{square} } = \\frac {\\pi r^2} {(2r)^2} = \\frac {\\pi r^2} {4r^2} = \\frac {\\pi}{4} $$\n", - "\n", - "This means that four times the ratio of the area of the circle and square equals $\\pi$.\n", - "\n", - "$$ \\frac { A_{circle} }{ A_{square}} \\times 4 = \\pi $$\n", - "\n", - "The challenge is now finding the ratio between the areas of the two shapes which can be done through a variety of creative means. Our method will be counting randomly placed dots. Imagine we painted the circle inscribed in a square on pavement outside and count the water droplets that fall in the circle and square during a rain storm." - ] - }, - { - "cell_type": "markdown", - "id": "7571b83c-e163-42b0-8329-f494045790a8", - "metadata": {}, - "source": [ - "![](tutorial-stochastic/circle_square_dots.png)" - ] - }, - { - "cell_type": "markdown", - "id": "5c12bceb-c2ad-4cc2-98b9-4148667dc1c7", - "metadata": {}, - "source": [ - "**Figure 3.** Random dots inside the circle and square used to estimate a value of $\\pi$.\n", - "\n", - "Because the rain drops fall randomly, the probability of a drop falling in one of the shapes is proportional to the area of that shape, so dividing the number of drops in the circle by the number of drop in the square provides a estimate of $\\frac { A_{circle} }{ A_{square} }$ which then can be used to calculate $\\pi$. Counting rain is a bit tedious and challenging, so we can simulate this using a random number generator to produce random ($x, y$) coordinates of dots inside the square. We then total the number of these that fall inside the circle versus the square and complete the calculation to obtain a value of $\\pi$.\n", - "\n", - "For smilicity, we will center our circle and square around the origin and give the circle a radius = 1. This requires the coordinates to fall in the [-1, 1) ranges along both the $x$- and $y$-axes. We have no random number generator that produces values in this range, but we can modify the `random()` method which generates floats in the [0, 1) range by multiplying by 2 and substracting 1 as demonstrated below.\n", - "\n", - "~~~python\n", - "rng = np.random.default_rng()\n", - "x = 2 * rng.random() - 1\n", - "~~~" - ] - }, - { - "cell_type": "markdown", - "id": "70c285c1-adae-453e-a895-fb515ea562ab", - "metadata": {}, - "source": [ - "Below is a function that performs this simulation and calculation of $\\pi$ with the only function argument `n_samples` as the number of dots generated. The general proceedure is ouline here.\n", - "1. Generate `n_samples` of ($x, y$) coordinates using the `random()` method\n", - "2. Calculate the distance from the origin using the `np.hypot()` function to determine if the dot is inside the circle (all dots are inside the square)\n", - "3. Calculate $\\pi$" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "e70bfca5-3606-4c3c-ad76-fc715f1f5ef4", - "metadata": {}, - "outputs": [], - "source": [ - "def estimate_pi(n_samples):\n", - " '''(integer) -> pi (float)\n", - " \n", - " Estimates the value of pi by finding the ratio of the area of a unit circle/area of a unit square\n", - " and multiplying by 4.\n", - " '''\n", - "\n", - " n_samples = int(n_samples)\n", - " \n", - " # Step 1\n", - " rng = np.random.default_rng()\n", - " coords = rng.random(size=(n_samples, 2))\n", - "\n", - " # Step 2\n", - " dist_from_origin = np.hypot(coords[:,0], coords[:,1]) # distance from the origion\n", - " in_circle = dist_from_origin[dist_from_origin <= 1] # if <= 1, the point is inside the circle\n", - "\n", - " # Step 3\n", - " pi = 4 * (in_circle.size / n_samples)\n", - " \n", - " return pi" - ] - }, - { - "cell_type": "markdown", - "id": "d34736f4-21f4-4e15-a3b3-d68cbf90b782", - "metadata": {}, - "source": [ - "We can then call this function with 100 dots generated. Because we are using a random number generator, every time we call this function, we likley get a different value for $\\pi$." - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "id": "c3bac1dc-e420-4b2d-a0b7-8b3fce9f277b", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "3.08" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "estimate_pi(100)" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "19575a49-311d-4c27-aa34-2cd8a3539265", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "3.16" - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "estimate_pi(100)" - ] - }, - { - "cell_type": "markdown", - "id": "947f9bfd-9550-440b-820b-eeb746dad01d", - "metadata": {}, - "source": [ - "We can also generate a value for $\\pi$ using the `np.pi` to compare our answer to." - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "id": "9d107cde-6f0a-48ae-9258-0392f41cc37d", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "3.141592653589793" - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "np.pi" - ] - }, - { - "cell_type": "markdown", - "id": "dfdb0029-6ef8-49d9-997a-2b25ad65fe5e", - "metadata": {}, - "source": [ - "Odds are that the values calculated above for $\\pi$ above is close but not exactly 3.14. If we increase the number of dots, the value for $\\pi$ will on average become closer to the true value. While it may be tempting to just call the function with an extremely large number of dots, this can take substatially longer to computer." - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "id": "d49d0955-f5e9-4214-abb2-2f0c9c4f470c", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "3.14157644" - ] - }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "estimate_pi(1E8)" - ] - }, - { - "cell_type": "markdown", - "id": "cbc28bcb-b975-4d82-9f06-6a6378bf09c2", - "metadata": {}, - "source": [ - "## Simulating radioactive decay\n", - "\n", - "As a final example, we will simulate the radioactive decay of the radioactive nuclide $^{137m}$Ba to determine the quantity of undecayed material versus time. We will then compare it to an analytical model to see how well the two agree. Radioactive nuclei decay by first-order kinetics, which means that each radioactive nucleus has a fixed probability of decaying at any given time. This is analogous to how each six-sided die in a bucket has a fixed probability of rolling a one each time they are dumped out. This analogy is so good that we can simulate the decay process by generating a large number of random integers with fixed probabilities.\n", - "\n", - "The first thing we need to is to know the probability of a nucleus decaying in a single second. Because this is a first-order process, the rate (-dA/dt) is described by\n", - "\n", - "$$ \\frac{-dA}{dt} = kA $$\n", - "\n", - "where A is the quantity of $^{137m}$Ba, $t$ is time in seconds, and $k$ is the rate constant for this process. We also know that the half-life (t$_{1/2}$) of $^{137m}$Ba is about 151 seconds which is related to the rate constant by the following equation.\n", - "\n", - "$$ t_{1/2} = \\frac{ln(2)}{k} $$\n", - "\n", - "This means that $k$ = 4.59e$^{-3}$ s$^{-1}$. For first-order kinetics, this means that 4.59e$^{-3}$ fraction of the nuclei decays, so this is the probability we need to simulate this process using random numbers. The function below calculates the fraction of radioactive material remaining based on a rate constant `k` and allows the users to choose the number of simulated nuclei `n` and duraction of the simulation `n_final`." - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "id": "f5ec62ec-f980-43ea-b5ea-19d7a6de8450", - "metadata": {}, - "outputs": [], - "source": [ - "def decay(k, n=1000, t_final=1000):\n", - " '''floats and integers -> ndarray of integers\n", - "\n", - " Calculates the fraction of nuclei remaining at each second in the simulation given n initial \n", - " nuclei with a rate constant k of decaying each second and a final simulation time t_final.\n", - " '''\n", - "\n", - " n_undecayed = n\n", - " undecayed_array = np.full(t_final + 1, n)\n", - " \n", - " for second in range(1, t_final + 1):\n", - " decays = rng.binomial(1, p=k, size=n_undecayed).sum()\n", - " n_undecayed -= decays\n", - " undecayed_array[second] = n_undecayed\n", - " \n", - " fraction = undecayed_array / n \n", - " \n", - " \n", - " return fraction" - ] - }, - { - "cell_type": "markdown", - "id": "61e2bc98-4518-4b2b-a33d-b8303ee65a53", - "metadata": {}, - "source": [ - "Below we simulate the decay of $^{137m}$Ba using a hundred simulated nuclei." - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "id": "bd9d6811-2248-4c12-b834-385658b40baa", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([1. , 1. , 1. , ..., 0.01, 0.01, 0.01])" - ] - }, - "execution_count": 17, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "decay(4.59e-3, n=100)" - ] - }, - { - "cell_type": "markdown", - "id": "8320f7c8-31ea-4272-8683-9cd477f943c6", - "metadata": {}, - "source": [ - "We can plot and compare this simulation to the analytical model for this simulation knowing that the fraction of undecayed nuclei ($\\frac{A}{A_0}$) is described by the following first-order equation where $A_0$ and $A_t$ are the initial quantities and quantities of nuclei at time $t$.\n", - "\n", - "$$ \\frac{A_t}{A_0} = e^{-kt} $$" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "id": "aff9c2ec-a032-4fc7-8ca0-46502ab1b31c", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "seconds = np.arange(1001)\n", - "fraction = np.exp(-4.59e-3 * seconds)\n", - "\n", - "plt.plot(seconds, fraction, linestyle='-', label='Theoretical')\n", - "plt.plot(seconds, decay(4.59e-3, n=500), linestyle='--', label='Simulation')\n", - "plt.xlabel('Time, s')\n", - "plt.ylabel('Fraction of Undecayed Nuclei')\n", - "plt.legend();" - ] - }, - { - "cell_type": "markdown", - "id": "10d2f74f-06d1-418e-a9e0-14265c58171a", - "metadata": {}, - "source": [ - "The simulation is in good agreement with the theoretical model, but this is some discrepency. If we increase the number of simulated nuclei, the simulation should align better with the theoretical values." - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "id": "bae004b9-9cf0-4975-aaa5-b9b410b69cde", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjcAAAGwCAYAAABVdURTAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABo/0lEQVR4nO3dd3gU5d7G8e/uppNGSEiBQAIBIdJ7ERCJICiKBRERFNsLooIcG0cBPRawgFhQFEXEBqiIBUQhgNJ7lQ5BWhqEJCQhbXfePyLRCMQsbLIp9+e65jI7Ozt77wTZH888xWQYhoGIiIhIJWF2dgARERERR1JxIyIiIpWKihsRERGpVFTciIiISKWi4kZEREQqFRU3IiIiUqmouBEREZFKxcXZAcqazWbjxIkT+Pj4YDKZnB1HRERESsAwDM6cOUNYWBhmc/FtM1WuuDlx4gTh4eHOjiEiIiKX4OjRo9SuXbvYY6pccePj4wMUXBxfX18npxEREZGSSE9PJzw8vPB7vDhVrrg5dyvK19dXxY2IiEgFU5IuJepQLCIiIpWKihsRERGpVFTciIiISKVS5frciIhIxWCz2cjNzXV2DClDbm5u/zrMuyRU3IiISLmTm5tLXFwcNpvN2VGkDJnNZiIjI3Fzc7us86i4ERGRcsUwDOLj47FYLISHhzvkX/JS/p2bZDc+Pp46depc1kS7Km5ERKRcyc/PJysri7CwMLy8vJwdR8pQUFAQJ06cID8/H1dX10s+j8phEREpV6xWK8Bl35qQiufc7/zcn4FLpeJGRETKJa3/V/U46neu4kZEREQqFacWN7/99ht9+/YlLCwMk8nE/Pnz//U1y5cvp1WrVri7uxMVFcXMmTNLPaeIiIhUHE4tbjIzM2nevDlTp04t0fFxcXFcf/31dO/ena1btzJq1Cjuv/9+fv7551JOKiIicnmWL1+OyWQiNTXV2VHsUtLGh5KKiIhgypQpDjvfhTh1tFTv3r3p3bt3iY+fNm0akZGRTJo0CYDGjRuzcuVK3njjDXr16lVaMUvsVEYOyRk5NArRgpwiIlXJv/UVGT9+PFdffXXZhLlEzz33HPPnz2fr1q1F9sfHx1O9enXnhLpEFarPzZo1a4iJiSmyr1evXqxZs+air8nJySE9Pb3IVhp+/j2BTi8t5OPZc0vl/CIiUn7Fx8cXblOmTMHX17fIvscff9xp2S53lueQkBDc3d0dlKZsVKjiJiEhgeDg4CL7goODSU9P5+zZsxd8zYQJE/Dz8yvcwsPDSyVbyyATW9z+jwmnH+dk4olSeQ8RkarIMAyycvOdshmGUaKMISEhhZufnx8mk6nIPm9v78JjN23aRJs2bfDy8qJTp07s3bu3yLm+++47WrVqhYeHB/Xq1eP5558nPz+/8PkjR45w00034e3tja+vL7fffjuJiYmFzz/33HO0aNGCDz/8kMjISDw8PABITU3l/vvvJygoCF9fX6655hq2bdsGwMyZM3n++efZtm0bJpMJk8lU2Kf1n7eljh07xsCBAwkICKBatWq0adOGdevWAXDw4EFuuukmgoOD8fb2pm3btixZsqTkv2wHqfST+I0ZM4bRo0cXPk5PTy+VAqdmzWDiXMKItMZxYO33BN40zOHvISJSFZ3NsxI9zjl9K3f9rxdebo79qnzmmWeYNGkSQUFBDBs2jHvvvZdVq1YBsGLFCoYMGcJbb71Fly5dOHjwIA8++CBQcGvLZrMVFja//vor+fn5jBgxggEDBrB8+fLC9zhw4ADffPMN8+bNw2KxANC/f388PT356aef8PPz4/3336dHjx7s27ePAQMGsHPnThYtWlRYjPj5+Z2XPSMjg27dulGrVi2+//57QkJC2Lx5c+EyGRkZGfTp04eXXnoJd3d3Zs2aRd++fdm7dy916tRx6HUsToUqbkJCQopUpwCJiYn4+vri6el5wde4u7uXWXPayZAuRB6PgwNLABU3IiJyvpdeeolu3boB8PTTT3P99deTnZ2Nh4cHzz//PE8//TR33303APXq1eOFF17gySefZPz48cTGxrJjxw7i4uIK/6E+a9YsrrzySjZs2EDbtm2BgltRs2bNIigoCICVK1eyfv16kpKSCr8TX3/9debPn8/XX3/Ngw8+iLe3Ny4uLoSEhFw0+xdffEFycjIbNmwgICAAgKioqMLnmzdvTvPmzQsfv/DCC3z77bd8//33PPzww466hP+qQhU3HTt2ZOHChUX2LV68mI4dOzopUVEBzfvA8Vk0SF9Hbl4+bq4V6vKKiJRLnq4Wdv3POYNGPF0tDj9ns2bNCn8ODQ0FICkpiTp16rBt2zZWrVrFSy+9VHiM1WolOzubrKwsdu/eTXh4eJE7ENHR0fj7+7N79+7C4qZu3bqFhQ3Atm3byMjIoEaNGkWynD17loMHD5Y4+9atW2nZsmVhYfNPGRkZPPfccyxYsID4+Hjy8/M5e/YsR44cKfF7OIJTv30zMjI4cOBA4eO4uDi2bt1KQEAAderUYcyYMRw/fpxZs2YBMGzYMN555x2efPJJ7r33XpYuXcrcuXNZsGCBsz5CEZEtryFzoQc1TOls2bSClh26OzuSiEiFZzKZHH5ryJn+vmbSuVFWf7+t8/zzz3PLLbec97pzfWdKolq1akUeZ2RkEBoaWuTW1Tn+/v4lPu/F7pKc8/jjj7N48WJef/11oqKi8PT05LbbbrvsTs32cuqflo0bN9K9+18FwLm+MXfffTczZ84kPj6+SLUXGRnJggULeOyxx3jzzTepXbs2H374YbkYBg5gdnUnzqctTc6s4PT2BaDiRkRE7NCqVSv27t1b5FbP3zVu3JijR49y9OjRwtabXbt2kZqaSnR0dLHnTUhIwMXFhYiIiAse4+bm9q9rOjVr1owPP/yQlJSUC7berFq1invuuYebb74ZKCiqDh8+XOw5S4NTi5urr7662J7oF5p9+Oqrr2bLli2lmOrymBrEwOYVBCWswDAMrY0iIiIlNm7cOG644Qbq1KnDbbfdhtlsZtu2bezcuZMXX3yRmJgYmjZtyqBBg5gyZQr5+fk89NBDdOvWjTZt2lz0vDExMXTs2JF+/frx6quv0rBhQ06cOMGCBQu4+eabadOmDREREYV3UGrXro2Pj895fVYHDhzIyy+/TL9+/ZgwYQKhoaFs2bKFsLAwOnbsSIMGDZg3bx59+/bFZDIxduzYwlapslShhoJXBJGdbuEV6yD+c3YoB5MznB1HREQqkF69evHjjz/yyy+/0LZtWzp06MAbb7xB3bp1gYLbWN999x3Vq1ena9euxMTEUK9ePebMmVPseU0mEwsXLqRr164MHTqUhg0bcscdd/DHH38UTrFy6623ct1119G9e3eCgoL48ssvzzuPm5sbv/zyCzVr1qRPnz40bdqUiRMnFo7Imjx5MtWrV6dTp0707duXXr160apVKwdfpX9nMko6iL+SSE9Px8/Pj7S0NHx9S2cm4SEz1vPbvmTG9G7E/3WrXyrvISJSWWVnZxMXF1dkjhapGor73dvz/a2Wm1LQo1FNAGL3JDk5iYiISNVTebqflyPXRPmy1byCtsf2kZr5Jf7VKta01SIiIhWZWm5KQXh1Lya4zeBOSyxbNq5ydhwREZEqRcVNaXD14Jh/Qa/1rB0/ODmMiIhI1aLippRYrrwJgMYnfybfWvbD4ERERKoqFTelJLzzAHJxoR7H2bVjk7PjiIiIVBkqbkqJi5c/B6u1BODkpm+dnEZERKTqUHFTivKirgMg6MRSJycRERGpOlTclKLIzv2xGSby8vI4mJDi7DgiIuJkJpOJ+fPnl/r7REREMGXKlHJznrKm4qYU+dSsy8O15nBL7v9YvPe0s+OIiEgpS05OZvjw4dSpUwd3d3dCQkLo1asXq1YVTAsSHx9P7969nZzyfDNnzrzg6uAbNmzgwQcfLPtAl0nFTSnr2KwRAL/8nuDkJCIiUtpuvfVWtmzZwieffMK+ffv4/vvvufrqqzl16hQAISEh5y1GWZ4FBQXh5eXl7Bh2U3FTyq5tXLAg2cGjx0hOSnRyGhERKS2pqamsWLGCV155he7du1O3bl3atWvHmDFjuPHGG4Git6UOHz6MyWRi7ty5dOnSBU9PT9q2bcu+ffvYsGEDbdq0wdvbm969e5OcnFz4PldffTWjRo0q8t79+vXjnnvuuWi2yZMn07RpU6pVq0Z4eDgPPfQQGRkFizsvX76coUOHkpaWhslkwmQy8dxzzwHn35Y6cuQIN910E97e3vj6+nL77beTmPjXd9tzzz1HixYt+PTTT4mIiMDPz4877riDM2fOXPqFvQQqbkpZiJ8Hk6t/wya3YRxd+oGz44iIVFy5mRff8rLtOPZsyY61k7e3N97e3syfP5+cnJwSv278+PE8++yzbN68GRcXF+68806efPJJ3nzzTVasWMGBAwcYN26c3Xn+zmw289Zbb/H777/zySefsHTpUp588kkAOnXqxJQpU/D19SU+Pp74+Hgef/zx885hs9m46aabSElJ4ddff2Xx4sUcOnSIAQMGFDnu4MGDzJ8/nx9//JEff/yRX3/9lYkTJ15WfntpbakyEBQWictBGx5xS4Cxzo4jIlIxvRx28eca9IRBX/31+LUoyMu68LF1r4KhC/56PKUpZJ06/7jn0uyK5+LiwsyZM3nggQeYNm0arVq1olu3btxxxx00a9bsoq97/PHH6dWrFwAjR45k4MCBxMbG0rlzZwDuu+8+Zs6caVeWf/p7S09ERAQvvvgiw4YN491338XNzQ0/Pz9MJhMhISEXPUdsbCw7duwgLi6O8PBwAGbNmsWVV17Jhg0baNu2LVBQBM2cORMfHx8ABg8eTGxsLC+99NJlfQZ7qOWmDIR36AdAg+wdnEk96dwwIiJSam699VZOnDjB999/z3XXXcfy5ctp1apVscXJ3wuf4OCCrgxNmzYtsi8pKemyci1ZsoQePXpQq1YtfHx8GDx4MKdOnSIr6yIF4AXs3r2b8PDwwsIGIDo6Gn9/f3bv3l24LyIiorCwAQgNDb3s/PZSy00ZqBvVhMOm2kRwjO2r59O6z/3OjiQiUvH898TFnzNZij5+4kAxx/7j3/Wjdlx6pgvw8PDg2muv5dprr2Xs2LHcf//9jB8//qJ9YlxdXf+KZjJdcJ/N9tcyPmazGcMwipwjLy/vonkOHz7MDTfcwPDhw3nppZcICAhg5cqV3HfffeTm5jq8w/Dfs18of1lQy00ZMJlMxIdcXfBg949OzSIiUmG5Vbv45uphx7GeJTvWQaKjo8nMtL8Pz8UEBQURHx9f+NhqtbJz586LHr9p0yZsNhuTJk2iQ4cONGzYkBMnihaKbm5uWK3WYt+3cePGHD16lKNHjxbu27VrF6mpqURHR1/ipykdKm7KiH/r2wBonL6a3LOO+0MuIiLlw6lTp7jmmmv47LPP2L59O3FxcXz11Ve8+uqr3HTTTQ57n2uuuYYFCxawYMEC9uzZw/Dhw0lNTb3o8VFRUeTl5fH2229z6NAhPv30U6ZNm1bkmIiICDIyMoiNjeXkyZMXvF0VExND06ZNGTRoEJs3b2b9+vUMGTKEbt260aZNG4d9PkdQcVNGrmjZjRME4WXKYf9qrTUlIlLZeHt70759e9544w26du1KkyZNGDt2LA888ADvvPOOw97n3nvv5e677y4sLOrVq0f37t0venzz5s2ZPHkyr7zyCk2aNOHzzz9nwoQJRY7p1KkTw4YNY8CAAQQFBfHqq6+edx6TycR3331H9erV6dq1KzExMdSrV485c+Y47LM5isn45427Si49PR0/Pz/S0tLw9fUt0/f+6sNX2BKXiF+LvjzV/+J/EEVEqrLs7Gzi4uKIjIzEw8Pj318glUZxv3t7vr/VclOGArsM5QtrD+btt2KzVamaUkREpMyouClDnerXoJqbhcT0HLYft2/+BBERESkZFTdlyN3FQu8GXgyx/EzGzy86O46IiEilpHluyli/0NNcdfATUo77YdhexWRWfSkiIuJI+mYtY806XEOu4UKAkcbh/Y6dOEpEpDKpYuNdBMf9zlXclDFfbx8OejYB4Niar/7laBGRqsdiKZhtODc318lJpKyd+52f+zNwqXRbygmyG9wAO7bie3S5s6OIiJQ7Li4ueHl5kZycjKurK2bdvq8SbDYbycnJeHl54eJyeeWJihsniGodAzteJDL/AAcS04kKLtv5dkREyjOTyURoaChxcXH88ccfzo4jZchsNlOnTp3CNbYulYobJ/AJb0KuyQ1fzvLjulVE3djb2ZFERMoVNzc3GjRooFtTVYybm5tDWupU3DiDxZWTQR0JSFzNkb2bABU3IiL/ZDabNUOxXBLdyHSSav3eoG3eB0w71ZK4k1pIU0RExFFU3DiJX1h9WtSvBcBPO+P/5WgREREpKRU3TtS7SSgAy7cfcnISERGRykN9bpyod2ASLdzGkHfSwtGUqwgP8HJ2JBERkQpPLTdOVD24Lo3MR2luPsTK9eudHUdERKRSUHHjTN5BJNZoB0DejnlODiMiIlI5qLhxsmqtbgOg9ZnlHDud5dwwIiIilYCKGyfzbXEzNsxcaf6DlRs2OzuOiIhIhafixtmqBZLk3wKAjO3fOzeLiIhIJaDiphyo1vwmABqnreRoim5NiYiIXA4VN+WAT/ObWOHZg1nWnvy4XRP6iYiIXA4VN+VBQCRHr57Cz7a2fL/thLPTiIiIVGgqbsqJ3k1CcDGb2B2fzoGkM86OIyIiUmGpuCknqnu5cmfdVB6xzGPBlsPOjiMiIlJhqbgpLwyDMaef4z+uXxO/5RcMw3B2IhERkQpJxU15YTZjib4egGYZK/n9RLqTA4mIiFRMKm7KEbfoGwC41rKJBVv+cHIaERGRiknFTXkS0YVsjyCCTGlkb/0am023pkREROyl4qY8cXHDpe1QADrlrGDzkdNODiQiIlLxqLgpZ1yuLJituKt5Bz9vPuDkNCIiIhWPipvyJvhKznqHk4k7u3/fTL7V5uxEIiIiFYqKm/LGZMJlyDx6maezMjOctYdSnJ1IRESkQlFxUw651mzItc3CAfhu63EnpxEREalYVNyUUzc2DwMMVu88QHae1dlxREREKgwVN+VUO9t21niM4iXbmyzelejsOCIiIhWG04ubqVOnEhERgYeHB+3bt2f9+vXFHj9lyhSuuOIKPD09CQ8P57HHHiM7O7uM0pYds384oSRzlXkHizfucnYcERGRCsOpxc2cOXMYPXo048ePZ/PmzTRv3pxevXqRlJR0weO/+OILnn76acaPH8/u3bv56KOPmDNnDv/973/LOHkZCIwiO6gpLiYbvnELOJmR4+xEIiIiFYJTi5vJkyfzwAMPMHToUKKjo5k2bRpeXl7MmDHjgsevXr2azp07c+eddxIREUHPnj0ZOHDgv7b2VFQeLW4HoL95OT9sO+HkNCIiIhWD04qb3NxcNm3aRExMzF9hzGZiYmJYs2bNBV/TqVMnNm3aVFjMHDp0iIULF9KnT5+Lvk9OTg7p6elFtgqjxZ1YTa40Nx9i5/qlzk4jIiJSIbiU5KD09HR8fX0Lfy7OueP+zcmTJ7FarQQHBxfZHxwczJ49ey74mjvvvJOTJ09y1VVXYRgG+fn5DBs2rNjbUhMmTOD5558vUaZyp1og+Y37Ydn1FR1T5nMgaQBRNb2dnUpERKRcK1HLTfXq1Qv7wfj7+1O9evXztnP7S9Py5ct5+eWXeffdd9m8eTPz5s1jwYIFvPDCCxd9zZgxY0hLSyvcjh49WqoZHc294/8BcIN5DT9s1HIMIiIi/6ZELTdLly4lICAAgGXLljnkjQMDA7FYLCQmFh3mnJiYSEhIyAVfM3bsWAYPHsz9998PQNOmTcnMzOTBBx/kmWeewWw+v1Zzd3fH3d3dIZmdonYb9jZ+mPHb/DmxLZmR1xmYzSZnpxIRESm3SlTcdOvW7YI/Xw43Nzdat25NbGws/fr1A8BmsxEbG8vDDz98wddkZWWdV8BYLBYADMNwSK5yx2Si7i3/4/ddSziTlsv6wyl0qFfD2alERETKrUvqULxixQruuusuOnXqxPHjBcsDfPrpp6xcudKu84wePZrp06fzySefsHv3boYPH05mZiZDhw4FYMiQIYwZM6bw+L59+/Lee+8xe/Zs4uLiWLx4MWPHjqVv376FRU5l5OFqoU/TUAC+3azlGERERIpTopabv/vmm28YPHgwgwYNYvPmzeTkFMy/kpaWxssvv8zChQtLfK4BAwaQnJzMuHHjSEhIoEWLFixatKiwk/GRI0eKtNQ8++yzmEwmnn32WY4fP05QUBB9+/blpZdesvdjVDh31U2h2daP2LCjBdk3XYmHa+Ut5kRERC6HybDzfk7Lli157LHHGDJkCD4+Pmzbto169eqxZcsWevfuTUJCQmlldYj09HT8/PxIS0sr8ciu8sBY+jKm317hN2tT0vvP5YZmYc6OJCIiUmbs+f62+7bU3r176dq163n7/fz8SE1Ntfd0UkKmFncA0Nm8k+XrNjk5jYiISPlld3ETEhLCgQPnD0leuXIl9erVc0gouYCAepytfRUWk0GrIzNITK9862mJiIg4gt3FzQMPPMDIkSNZt24dJpOJEydO8Pnnn/P4448zfPjw0sgof/KMKehcfaN5Nd+t3+fkNCIiIuWT3R2Kn376aWw2Gz169CArK4uuXbvi7u7O448/ziOPPFIaGeWcup0541UHn6wjpGz4CqNHU0wmzXkjIiLyd3Z3KD4nNzeXAwcOkJGRQXR0NN7eFWNZgIraofic3GWv4fbri6y3XYHp3kW0jQhwdiQREZFSZ8/3t90tN+e4ubkRHR19qS+XS+TWehCpq95nydlWnF5/RMWNiIjIP5SouLnllltKfMJ58+ZdchgpAd8wDty5mg8+2IDXzgTG35SPt/sl16giIiKVTom+Ff38/Eo7h9ihdWQQ9QKrcehkJgu3x3N723BnRxIRESk3SlTcfPzxx6WdQ+xgMpno37oW2xZ/hrF8IbSd6uxIIiIi5YbdQ8Hj4uLYv3//efv379/P4cOHHZFJSmBAnXSmuU2hX8Zs4o4ec3YcERGRcsPu4uaee+5h9erV5+1ft24d99xzjyMySQkE1G/NUddI3E357Fn6qbPjiIiIlBt2Fzdbtmyhc+fO5+3v0KEDW7dudUQmKaHMRrcBEHL4O/KtNienERERKR/sLm5MJhNnzpw5b39aWhpWq9UhoaRk6nW/BxsmWhq7WbdZ602JiIjAJRQ3Xbt2ZcKECUUKGavVyoQJE7jqqqscGk6K5xZQmzjftgCcWjXLyWlERETKB7snSHnllVfo2rUrV1xxBV26dAFgxYoVpKens3TpUocHlOJVazsYYtfT8vRPJKRmEeLv5exIIiIiTmV3y010dDTbt2/n9ttvJykpiTNnzjBkyBD27NlDkyZNSiOjFCOk/W1kmqqRZPjzw+rtzo4jIiLidJe8tlRFVdHXlrqQBWt3MGL+EcL8PFjx1DVYzFpMU0REKpdSXVvqt99+K/b5rl272ntKuUw9Wkfj/0s8J9KyWb43iR6Ng50dSURExGnsLm6uvvrq8/aZTH+1FGjEVNnzcLVwa6vafL1yB8tWrKBH49ucHUlERMRp7O5zc/r06SJbUlISixYtom3btvzyyy+lkVFK4P7A31nv/hA3H5vIidSzzo4jIiLiNHa33FxoEc1rr70WNzc3Ro8ezaZNmm/FGUKjryJvkYnWpv18vXget/Uf5OxIIiIiTmF3y83FBAcHs3fvXkedTuzlG8rRyP4A1N31nmYsFhGRKsvulpvt24sONzYMg/j4eCZOnEiLFi0clUsuQa3rn4J3vqC1bScrt+yga5vmzo4kIiJS5uwublq0aIHJZOKfI8g7dOjAjBkzHBZM7OceGMEfPi2pe2YLp1e8D23edXYkERGRMmd3cRMXF1fksdlsJigoCA8PD4eFkkvn0Xk4LHqQzqk/cCz5JWoHVXd2JBERkTJld5+bunXrFtnCw8NV2JQjwW1vJcVcAz8y+e3XJc6OIyIiUuZK3HIza1bJFmYcMmTIJYcRB7C4sKfrOzy0KB2XPf7cmm/F3cXi7FQiIiJlpsTLL1SvfvHbGyaTiczMTPLz88v9JH6VcfmFf8qz2ujyyjIS0rOZMqAF/VrWcnYkERGRy2LP93eJb0v9c/K+c9uuXbu4/fbbMQyDa6+99rLDy+VztZgZ1L4OAJ+v3u/kNCIiImXrkue5OXPmDM8++ywNGzZk69at/PzzzyxatMiR2eQyDA49yrdu4+kZ/z7bj6U6O46IiEiZsbu4ycvLY/LkyURGRvLVV1/x8ccfs3btWrp3714a+eQS+VtTaGneT2fz73yy+g9nxxERESkzJe5QbBgGs2bNYty4ceTn5/Pyyy9z3333YbGos2q5FNkNw+RCtPkPDmxfzak+jajh7e7sVCIiIqWuxC03zZo146GHHmLgwIFs2rSJO+64g8zMTNLT04tsUk54B0H0jQDcySLmbDzq5EAiIiJlo8Sjpczmv+ogk8l03vOGYWAymTRaqjw5shZm9CLbcOVmjw/54ckbcbE4bDkxERGRMmPP93eJb0stW7bssoNJGQtvjy24GR6J2+mW8RNLdnfguiYhzk4lIiJSqkpc3HTr1q00c0hpMJkwd/g/+G4Eg10W89TqISpuRESk0tM9isquyW2cbXAD4/OHsupQCvsTzzg7kYiISKlScVPZuXrgOehzLI16Y2Dm49WHnZ1IRESkVKm4qSKGdo4EYN7mY6Rk5jo5jYiISOlRcVNFtA81M7H6d7zOG3yxTpP6iYhI5aXipoownU3l9uyvucGyjpWrV5CTX76H7IuIiFyqEo2WuuWWW0p8wnnz5l1yGClFAZFwxfWw53v6ZC/kh209ua11bWenEhERcbgStdz4+fkVbr6+vsTGxrJx48bC5zdt2kRsbCx+fn6lFlQun7nd/QDcYlnBFyt+p4TzN4qIiFQoJWq5+fjjjwt/fuqpp7j99tuZNm1a4bpSVquVhx56qPLP+FvRRXbFGtAA75T9RCf/xJqDrekUFejsVCIiIg5ld5+bGTNm8PjjjxdZMNNisTB69GhmzJjh0HDiYCYTlvYPADDUsogZKw44OZCIiIjj2V3c5Ofns2fPnvP279mzB5vN5pBQUopa3InVozr1zfH47f+WA0kZzk4kIiLiUCVefuGcoUOHct9993Hw4EHatWsHwLp165g4cSJDhw51eEBxMHcfLN2e4LfVq1iTHI37qjhevrmps1OJiIg4jN3Fzeuvv05ISAiTJk0iPj4egNDQUJ544gn+85//ODyglIKOI3APvoMTH6zlm03HeLznFQRUc3N2KhEREYcwGZcxZCY9PR2gQnUktmfJ9MrMMAxufGcVO46nMrpHfR69trGzI4mIiFyUPd/flzSJX35+PkuWLOHLL7/EZDIBcOLECTIy1H+jojCZTDzSxpNPXF/BuvodsnLznR1JRETEIey+LfXHH39w3XXXceTIEXJycrj22mvx8fHhlVdeIScnh2nTppVGTikFPVx3YrFsJ8KawNz1f3DPVfWdHUlEROSy2d1yM3LkSNq0acPp06fx9PQs3H/zzTcTGxvr0HBSuizN+pPr4kNdcxJbf/2OPKtGu4mISMVnd3GzYsUKnn32WdzcinZAjYiI4Pjx4w4LJmXAzQtz8wEA9Mz+iR+3n3ByIBERkctnd3Fjs9mwWs9fdPHYsWP4+Pg4JJSUHZd29wJwrXkTs5duxGbTkgwiIlKx2V3c9OzZkylTphQ+NplMZGRkMH78ePr06ePIbFIWgq8kP6wNriYrrVMWsmxvkrMTiYiIXBa7i5tJkyaxatUqoqOjyc7O5s477yy8JfXKK6+URkYpZS5tC1pv7nSJ5f1l+5ycRkRE5PLYPVqqdu3abNu2jdmzZ7N9+3YyMjK47777GDRoUJEOxlKBNLmFvPUfMfPYlWw9cooNh1NoGxHg7FQiIiKXxO6Wm8zMTFxcXLjrrrt49dVXeffdd7n//vsvubCZOnUqEREReHh40L59e9avX1/s8ampqYwYMYLQ0FDc3d1p2LAhCxcuvKT3lj+5euL6f0vJbPkAubjy3vKDzk4kIiJyyewuboKDg7n33ntZuXLlZb/5nDlzGD16NOPHj2fz5s00b96cXr16kZR04X4fubm5XHvttRw+fJivv/6avXv3Mn36dGrVqnXZWQQe7FofkwmW7kliT0K6s+OIiIhcEruLm88++4yUlBSuueYaGjZsyMSJEzlx4tKGEE+ePJkHHniAoUOHEh0dzbRp0/Dy8mLGjBkXPH7GjBmkpKQwf/58OnfuTEREBN26daN58+aX9P5SVKTnWZ6rs53rzWuZukytNyIiUjHZXdz069eP+fPnc/z4cYYNG8YXX3xB3bp1ueGGG5g3bx75+SWbxj83N5dNmzYRExPzVxizmZiYGNasWXPB13z//fd07NiRESNGEBwcTJMmTXj55ZcvODT9nJycHNLT04tschF7fuTuxIlMdn2Pjdt3cCBJy2mIiEjFc0lrSwEEBQUxevRotm/fzuTJk1myZAm33XYbYWFhjBs3jqysrGJff/LkSaxWK8HBwUX2BwcHk5CQcMHXHDp0iK+//hqr1crChQsZO3YskyZN4sUXX7zo+0yYMAE/P7/CLTw83P4PW1W0HAJ1OuFuyuMRyzymLjvg7EQiIiJ2u+TiJjExkVdffZXo6GiefvppbrvtNmJjY5k0aRLz5s2jX79+DoxZwGazUbNmTT744ANat27NgAEDeOaZZ4pdz2rMmDGkpaUVbkePHnV4rkrDbIaY8QDcbvmVbds2Ency08mhRERE7GP3UPB58+bx8ccf8/PPPxMdHc1DDz3EXXfdhb+/f+ExnTp1onHjxsWeJzAwEIvFQmJiYpH9iYmJhISEXPA1oaGhuLq6YrFYCvc1btyYhIQEcnNzz1sSAsDd3R13d3c7PmEVV6cDNOiFy/6fGWX5mqnL2vJ6f/VpEhGRisPulpuhQ4cSFhbGqlWr2Lp1Kw8//HCRwgYgLCyMZ555ptjzuLm50bp16yKLbdpsNmJjY+nYseMFX9O5c2cOHDiAzfbXAo/79u0jNDT0goWNXKJrngXgRssadm9dzZFTxd9iFBERKU/sLm7i4+N5//33adu27UWP8fT0ZPz48f96rtGjRzN9+nQ++eQTdu/ezfDhw8nMzGTo0KEADBkyhDFjxhQeP3z4cFJSUhg5ciT79u1jwYIFvPzyy4wYMcLejyHFCW0GV94CwOuWd/lg6e9ODiQiIlJydt+W8vLyKvw5Ozub3NzcIs/7+vqW+FwDBgwgOTmZcePGkZCQQIsWLVi0aFFhJ+MjR45gNv9Vf4WHh/Pzzz/z2GOP0axZM2rVqsXIkSN56qmn7P0Y8m9ixpNo+PHUlnrs2pLEsJgsalf3+vfXiYiIOJnJMAy7loHOzMzkqaeeYu7cuZw6deq854sbll0epKen4+fnR1paml2FWFU16MO1rDpwikHt6/DSzU2dHUdERKooe76/7b4t9eSTT7J06VLee+893N3d+fDDD3n++ecJCwtj1qxZlxxayqdHr2kAwFcbjxGfdtbJaURERP6d3cXNDz/8wLvvvsutt96Ki4sLXbp04dlnn+Xll1/m888/L42M4kTtLfuYUX0m3Y11mvdGREQqBLuLm5SUFOrVqwcU9K9JSUkB4KqrruK3335zbDpxvkPLuebsLzzpMps56//gaIpGTomISPlmd3FTr1494uLiAGjUqBFz584FClp0/jkkXCqBjiPA3Y/65ng6sZ03Y/c7O5GIiEixLmmem23btgHw9NNPM3XqVDw8PHjsscd44oknHB5QnMzDF1rcCcCTLrOZv/mI1pwSEZFyze7RUv/0xx9/sGnTJqKiomjWrJmjcpUajZa6BJkn4e1WkJ3GI7kPYzS5lXfubOXsVCIiUoWU6mipf6pbty633HJLhShs5BJVC4QOBRMl3uPyMz9uj2fXCa2uLiIi5ZPdxc2jjz7KW2+9dd7+d955h1GjRjkik5RHre8BsyutzftpYjrE5MX7nJ1IRETkguwubr755hs6d+583v5OnTrx9ddfOySUlEM+wdDpYU5e9RxHCWHJ7kS2HDnt7FQiIiLnsbu4OXXqFH5+fuft9/X15eTJkw4JJeVUzHMExjzGta0aAqj1RkREyiW7i5uoqCgWLVp03v6ffvqpcP4bqdxG9miAqwVW7D/JmoPnL8EhIiLiTHYvnDl69GgefvhhkpOTueaaawCIjY1l0qRJTJkyxdH5pLwxDMKPLeA331cYlPp/TFy0h/kPdcJkMjk7mYiICHAJxc29995LTk4OL730Ei+88AIAERERvPfeewwZMsThAaWcMZlg5zeEnt3PE27fMPxoGAt3JHB9s1BnJxMREQEuc56b5ORkPD098fb2dmSmUqV5bhwgYSdMuwow6JPzMpkB0Sx+rBtuLpc9s4CIiMgFlfo8N/n5+SxZsoR58+ZxrjY6ceIEGRmaubZKCGkCV/YDYKjHr/xxKosv1x9xbiYREZE/2V3c/PHHHzRt2pSbbrqJESNGkJycDMArr7zC448/7vCAUk61uhuAG13W4EYeb8Xu50x2npNDiYiIXEJxM3LkSNq0acPp06fx9PQs3H/zzTcTGxvr0HBSjkV2Bd9auOelc5/fJk5l5vLBb4ecnUpERMT+4mbFihU8++yzuLm5FdkfERHB8ePHHRZMyjmzBdo9CMAjLvNwIZ8PV8SRmJ7t5GAiIlLV2V3c2Gw2rFbrefuPHTuGj4+PQ0JJBdHuAbiiD563TqV53SDO5lmZskQT+4mIiHPZXdz07NmzyHw2JpOJjIwMxo8fT58+fRyZTco7t2ow8EtM9a5mTO9GAMzZcJT9iWecHExERKoyu4ubSZMmsWrVKqKjo8nOzubOO+8svCX1yiuvlEZGqQDaRARwXXQgNgNeXLDb2XFERKQKu6R5bvLz85k9ezbbt28nIyODVq1aMWjQoCIdjMsrzXNTCnIzYcVk8nZ8S8vkcWRYXfl4aFu6X1HT2clERKSSsOf72+4ZigFcXFy46667LimcVEJmV9g+B9e0o7zW4HeG72nBiz/u4qqoQFwtmthPRETKVomKm++//77EJ7zxxhsvOYxUUC5u0H4Y/PIMPc8uoqZXaw4mZ/LZ2j8Y2jnS2elERKSKKdFtKbO56L++TSYT/3zZuYUTLzSSqjzRbalSciYR3moJeZnsrP8gN/x+NX6erix//GqqV3P799eLiIgUw+HLL9hstsLtl19+oUWLFvz000+kpqaSmprKTz/9RKtWrVi0aJFDPoBUQD7BcONbAFx59AtaBLuQdjZPQ8NFRKTM2d2huEmTJkybNo2rrrqqyP4VK1bw4IMPsnt3+R4po5abUmQY8E4bOHWApHr9aLerPxazmZ9GdqFhsOZAEhGRS1eqC2cePHgQf3//8/b7+flx+PBhe08nlYnJBL1fAZOZmseXMbhBPlabwQs/7jrvNqaIiEhpsbu4adu2LaNHjyYxMbFwX2JiIk888QTt2rVzaDipgKJiYNDXMGob9/e7FjeLmRX7T7Jkd5Kzk4mISBVhd3EzY8YM4uPjqVOnDlFRUURFRVGnTh2OHz/ORx99VBoZpaKJ6gGe1alboxr3XlUwWur5H34nO698dzYXEZHKwe55bqKioti+fTuLFy9mz549ADRu3JiYmJjCEVMiABgGj/mvIM/7MB+d7sS7yw8y+tqGzk4lIiKV3CXNUFyRqUNxGdr1HcwdQr7Fk2uzXuS4pRa/jOpKRGA1ZycTEZEKptRnKI6NjSU2NpakpCRsNluR52bMmHEpp5TKqFFfiOyKS9xvfOQ9jV5nxvLcD7/z8T1t1conIiKlxu4+N88//zw9e/YkNjaWkydPcvr06SKbSCGzGW5+HzyrUy9vP6Ndv2H53mR+2ZX4768VERG5RHbflgoNDeXVV19l8ODBpZWpVOm2lBPs+h7mDsaGha45kzD86rJkdDc83SzOTiYiIhVEqc5zk5ubS6dOnS45nFRB0TdCvasxY+Uhr2UcTz3L1GUHnJ1KREQqKbuLm/vvv58vvviiNLJIZdZ+GAD9zctxJ5cPfjvEweQMJ4cSEZHKyO4OxdnZ2XzwwQcsWbKEZs2a4erqWuT5yZMnOyycVCINekL74bg0vY1Oi20s25vMmHk7mP1AB8xmdS4WERHHsbvPTffu3S9+MpOJpUuXXnao0qQ+N853NCWLnm/8xtk8K6/c2pQBbes4O5KIiJRz9nx/a54bcYoPfzvIiwv34OvhwpL/dKOmj4ezI4mISDlWqh2KRS5L6lH4YRT3Hn6c5mFepGfn878fdjk7lYiIVCIl7nPTsmXLC0685ufnR8OGDRk5ciTR0dEODSeVkDUXts/BnJfFtA5X0Tm+ET9uj+eWVolc0yjY2elERKQSKHFx069fvwvuT01NZfPmzbRs2ZKlS5fSuXNnR2WTyqhGfej1Mvw4itCtb/Jwhzm8tSaFsfN/p/1jNajmfkmTZouIiBRyWJ+bZ555hrVr1xIbG+uI05Ua9bkpB2xWmNYFkn4nr80DdP+9D8dOn+XezpGM66vWPxEROZ9T+tzceeed7Nixw1Gnk8rMbIFeLwHgumkGk67xAmDm6ji2HNESHiIicnkcVtxYLJbzFtEUuaj63aFBLzCstN83mZubh2Az4Imvt5OdZ3V2OhERqcAcVtzMmzdPHYrFPtf+D0wWSNjBc119CfR250BSBlOW7Hd2MhERqcBK3HvzrbfeuuD+tLQ0Nm3axIIFC/jpp58cFkyqgJqNYNBXUKsVfp7VeflmHx78dBMf/HaQXlcG07JOdWcnFBGRCqjEHYojIyMvuN/X15crrriCxx57jI4dOzo0XGlQh+LybdTsLczfeoKomt78+MhVeLhq5XAREbHv+7vELTdxcXGXHUzkovKyYeNHvJb5I6urjSq8PfV070bOTiYiIhWMZiiW8sGaC7+9huvR1XzUuqCQ/uC3g2w9murcXCIiUuGouJHywcMXOj0KQNOtL3J/tA2bAY9/tU2jp0RExC4qbqT8aPcg+NaC3DM8afmSIJ+C0VOv/bzX2clERKQCUXEj5Ye7N9zxOQBu+xcwq9UBAD5aGcfK/SedmUxERCqQEhU3t9xyC+np6QDMmjWLnJycUg0lVVhYS+j2FACNNz/PIy0L+rz/56utpGblOjOZiIhUECUqbn788UcyMzMBGDp0KGlpaaUaSqq4bk9B9UjwDGBE9wbUC6pGYnoOz3y7EwcthSYiIpVYiYaCN2rUiDFjxtC9e3cMw2Du3LkXHWM+ZMgQhwaUKshsgTvngNkFjxr1mDIggFveXc2CHfH02FKTW1rVdnZCEREpx0o0id/q1asZPXo0Bw8eJCUlBR8fH0wm0/knM5lISUmxO8TUqVN57bXXSEhIoHnz5rz99tu0a9fuX183e/ZsBg4cyE033cT8+fNL9F6axK9imvXTb4z/NY1q7m78NLIL4QFezo4kIiJlyOGrgnfq1Im1a9eSnJyMYRjs27eP06dPn7ddSmEzZ84cRo8ezfjx49m8eTPNmzenV69eJCUlFfu6w4cP8/jjj9OlSxe731MqmFVvMnjjbTxRcyMZOfmMnrsVq023p0RE5MLsHi0VFxdHUFCQwwJMnjyZBx54gKFDhxIdHc20adPw8vJixowZF32N1Wpl0KBBPP/889SrV6/Y8+fk5JCenl5kkwrGZMFkzeH/cj+hlvtZNhw+zXvLDzg7lYiIlFN2Fzd169YlLS2NSZMmcf/993P//fczefLkS+pknJuby6ZNm4iJifkrkNlMTEwMa9asuejr/ve//1GzZk3uu+++f32PCRMm4OfnV7iFh4fbnVOcrP3/Qc0rsWSf5rO6CwGYvHgf6+PsbykUEZHKz+7iZuPGjdSvX5833niDlJQUUlJSeOONN6hfvz6bN2+261wnT57EarUSHBxcZH9wcDAJCQkXfM3KlSv56KOPmD59eoneY8yYMaSlpRVuR48etSujlAMWV7hhMgCRR77hqYYJ2Ax49MstpGRqeLiIiBRld3Hz2GOPceONN3L48GHmzZvHvHnziIuL44YbbmDUqFGlEPEvZ86cYfDgwUyfPp3AwMASvcbd3R1fX98im1RAdTpAy8EADIsfS6eADBLSs3n8q20aHi4iIkWUeFXwczZu3Mj06dNxcfnrpS4uLjz55JO0adPGrnMFBgZisVhITEwssj8xMZGQkJDzjj948CCHDx+mb9++hftsNlthhr1791K/fn27MkgF0uslOLEFU+JOZvi8QWuX/7J0TxIfrYzj/i7F970SEZGqw+6WG19fX44cOXLe/qNHj+Lj42PXudzc3GjdujWxsbGF+2w2G7GxsXTs2PG84xs1asSOHTvYunVr4XbjjTfSvXt3tm7dqv40lZ2HH9z6EQQ1xqPrSMZc3xSAiT/t0erhIiJSyO6WmwEDBnDffffx+uuv06lTJwBWrVrFE088wcCBA+0OMHr0aO6++27atGlDu3btmDJlCpmZmQwdOhQomBSwVq1aTJgwAQ8PD5o0aVLk9f7+/gDn7ZdKqmYjeGgNmEwMMgzWHDrNgh3xPPzFZhY82gU/T1dnJxQRESezu7h5/fXXMZlMDBkyhPz8fABcXV0ZPnw4EydOtDvAgAEDSE5OZty4cSQkJNCiRQsWLVpU2Mn4yJEjmM1a31P+5s8JJE0mExP6NWL78VSOppzlqa+3895drS44waSIiFQdJZqh+EKysrI4ePAgAPXr18fLq2LMGKsZiiuR7XNhyXPsu/o9rv8mkzyrwTN9GvNAV/W/ERGpbBw+Q/GFeHl50bRpU5o2bVphChupZA7EQvpxGm4Yy/g+DQCYuGgPaw6ecnIwERFxJt3vkYrr2ufBszrEb2NQ7lfc0rIWVpvBw19sJj7trLPTiYiIk6i4kYrLJwSunwSAadWbvNzdj8ahvpzKzGX4Z5vJybc6OaCIiDiDihup2K68BSK7Qn42Ht/cxfRbI/DzdGXr0VT+98MuZ6cTEREnUHEjFZvJBH3fBO9gSNxJ7R8H8vYt9TGZ4PN1R/hqo5bbEBGpauweCg6wf/9+li1bRlJSUuEMweeMGzfOIcFESiygHtz9I3x2K0R0oWv96ozs0YApS/bz7PydNArxpWltP2enFBGRMmL3UPDp06czfPhwAgMDCQkJKTKniMlksnvxzLKmoeCVmM0KZkvBjzaD+2dtZOmeJEL9PPhuRGdq+no4OaCIiFwqe76/7S5u6taty0MPPcRTTz11WSGdRcVNFXH2NOm5Bjd/uJ2DyZm0CPdn9oMd8HC1ODuZiIhcglKd5+b06dP079//ksOJlLqMZJjZF99vh/DRXc0KOxiPmbdDK4iLiFQBdhc3/fv355dffimNLCKOceYEnD4Mh1cQsfq/vHdnSyxmE99uOc60Xw85O52IiJQyuzsUR0VFMXbsWNauXUvTpk1xdS26UOGjjz7qsHAilyS0Odw+Ez6/HbZ9SafABjx3422Mnb+TV3/eQ1RNb66NDnZ2ShERKSV297mJjIy8+MlMJg4dKt//Mlafmypk/XRY+HjBz7fPYuy++ny69g+83Cx8M7wTjUP1+xcRqShKtUNxRafipopZ+CSsfx9cPMkf8gNDfray+uApavl78u1DnTSCSkSkgiiThTMBDMNQB00p33q9DFHXQv5ZXH5+infvbEm9wGocTz3L0JkbyMzJd3ZCERFxsEsqbmbNmkXTpk3x9PTE09OTZs2a8emnnzo6m8jls7jAbTOgyW3Qfyb+1dz5eGhbalRz4/cT6Yz4YjP5Vtu/n0dERCoMu4ubyZMnM3z4cPr06cPcuXOZO3cu1113HcOGDeONN94ojYwil8fDF277CPzrAFC3RjVm3h6Jh6uZ5XuTeXb+TrVAiohUIpfUofj5559nyJAhRfZ/8sknPPfcc8TFxTk0oKOpz00VZ82D2Odh7TQ2d5rKbbHe2Ax4otcVjOge5ex0IiJyEaXa5yY+Pp5OnTqdt79Tp07Ex8fbezqRsmV2gdwssOXRasMTvNIzEIDXft7Lt1uOOTmciIg4gt3FTVRUFHPnzj1v/5w5c2jQoIFDQomUGpMJer0EoS0gJ43+WXN5sGs9AJ78ejsr9ic7N5+IiFw2u29LffPNNwwYMICYmBg6d+4MwKpVq4iNjWXu3LncfPPNpRLUUXRbSgCIWwGf3ABmV2x3L+CRVa4s2B6Pl5uFz+9vT8s61Z2dUERE/qZUb0vdeuutrFu3jsDAQObPn8/8+fMJDAxk/fr15b6wESkU2QUa9wVbHuY5A5l8UyRdGgSSlWvlno83sC/xjLMTiojIJdIkflJ15ZyBaV3gdBw0vpHMfh9z10fr2HIklWBfd74e1onwAC9npxQREUqh5SY9Pb3Iz8VtIhWGuw/c+BZ4VocOw6nm7sLH97SlYbA3iek5DP5oHclncpydUkRE7FSilhuLxUJ8fDw1a9bEbDZjMpnOO8YwDEwmE1artVSCOopabuQ8OWcKCp0/JaZnc+t7qzl2+izRob7M/r8O+Hq4FnMCEREpbfZ8f5doVfClS5cSEBAAwLJlyy4/oUh58rfChuObCd75DZ/dO4bb3l/Lrvh0hn68gU/ubYe3e4n+dxERESezu8/NkSNHCA8PP6/1xjAMjh49Sp06dRwa0NHUciMXlZUCbzSBvEy48W12hfRj4PS1pJ3No11kADOHtsXLTQWOiIgzlOpoqcjISJKTz58LJCUlhcjISHtPJ1J+eAVAxxEFP//4GNG2fXx6Xzt83F1YH5fC/Z9s5Gxu+b7tKiIil1DcnOtb808ZGRl4eHg4JJSI01w9BqL7gS0fvh1Gs1BvPrmvHdXcLKw+eIoHP91Idp4KHBGR8qzEbeyjR48GwGQyMXbsWLy8/hoia7VaWbduHS1atHB4QJEyZTZD3zch7jc4tR+W/o9W1/6Pmfe24+4Z61mx/yTDP9vEtMGtcXexODutiIhcQIlbbrZs2cKWLVswDIMdO3YUPt6yZQt79uyhefPmzJw5sxSjipQRT3/o/WrBz6vehI0f0zYigI/ubouHq5lle5MZ8fkWcvLVgiMiUh6VuOXm3CipoUOH8uabb6ozrlRuzfrDqQPw60TIKZi/qWP9Gnw4pC33frKBJbsTGfbpJt67qzUermrBEREpT+weLZWWlobVai0cGn5OSkoKLi4u5b7o0WgpKTHDKGi56TgCLH/Nc7NifzIPzNpIdp6Nq6IC+WBIa42iEhEpZaU6WuqOO+5g9uzZ5+2fO3cud9xxh72nEym/TCa4atRfhY3NCgk76dIgiJlD2+HlZmHlgZPcM2MDGTn5To0qIiJ/sbu4WbduHd27dz9v/9VXX826descEkqk3MlOh89vg496woFYOtSr8dcw8cMpDP5oHWln85ydUkREuITiJicnh/z88/+VmpeXx9mzZx0SSqTccfUCw1Ywwd9nt8CiMbQO8+TzB9rj5+nKliOpDPpwLaczc52dVESkyrO7uGnXrh0ffPDBefunTZtG69atHRJKpNyxuMCAz6D1PQWP174LM66jmW0PXz7QgYBqbuw8nk7/99dwIlVFvoiIM9ndoXjVqlXExMTQtm1bevToAUBsbCwbNmzgl19+oUuXLqUS1FHUoVgu295F8M19kJsBZhfo+xb7w25kyIz1xKdlE+rnwaf3tSOqps+/n0tEREqkVDsUd+7cmTVr1hAeHs7cuXP54YcfiIqKYvv27eW+sBFxiCuugxHr/5rJeMUkGgS48vXwTtQLqkZ8Wja3TVvDliOnnZ1URKRKsrvlpqJTy404jM0GK16HprdBQD0AUjJzGfrxerYdS8PT1cK0wa3p1jDIyUFFRCq+Um25+bvs7GzS09OLbCJVhtkM3Z4sLGwAAvZ9xZf9w+jSIJCzeVbu/2QD32097sSQIiJVj93FTVZWFg8//DA1a9akWrVqVK9evcgmUmUdWALfjcBrzq18dGNNbmgWSp7VYNScrXzw20GqWCOpiIjT2F3cPPHEEyxdupT33nsPd3d3PvzwQ55//nnCwsKYNWtWaWQUqRiCGoN/OKQcwu2bwbzV/0ru6RSBYcDLC/fwzPyd5Fttzk4pIlLp2d3npk6dOsyaNYurr74aX19fNm/eTFRUFJ9++ilffvklCxcuLK2sDqE+N1Kq0o7De50gOxVqtca4aSof7XXnpYW7MQzo1jCId+5siY+H67+eSkRE/lKqfW5SUlKoV6+gj4Gvry8pKSkAXHXVVfz222+XEFekEvGrBf1ngrsfHN+EaUYv7m9iYdpdrfFwNfPrvmT6T9NcOCIipcnu4qZevXrExcUB0KhRI+bOnQvADz/8gL+/v0PDiVRI9bvDiLUQ1hKy02DOIHo1qsGcBzsS6O3OnoQz9Ju6ip3H05ydVESkUrK7uBk6dCjbtm0D4Omnn2bq1Kl4eHjw2GOP8cQTTzg8oEiF5BsG/T+BakHQYhBYXGke7s+3D3WiQU1vks7k0H/aGn7aEe/spCIilc5lz3Pzxx9/sGnTJqKiomjWrJmjcpUa9bmRMpWVAl4Bfz1eP50sq5kHf2/CygMnAXj0mihGxTTEbDY5KaSISPlXan1u8vLy6NGjB/v37y/cV7duXW655ZYKUdiIlLm/FzY2G2ycgdfPo/mk6Tbu7RwJwFtLD/Dgp5s4k61VxUVEHMGu4sbV1ZXt27eXVhaRys1kgoa9ALAseY5xXf14vX9z3FzMLNmdyC3vrubwyUwnhxQRqfjs7nNz11138dFHH5VGFpHKzWSCHuMhtDnkZcK7HbjNawtzHuxATR939idlcOM7K/l1X7Kzk4qIVGh297l55JFHmDVrFg0aNKB169ZUq1atyPOTJ092aEBHU58bcbrkvfDlQEg5WPC48ygS249h2Geb2HIkFZMJHotpyMPdo9QPR0TkT/Z8f9td3HTv3v3iJzOZWLp0qT2nK3MqbqRcsOZB7P9g9VsFj+/8ipx6PRj/3e/M3nAUgK4Ng5gyoAUB1dycGFREpHwoleLm0KFDREZGYjJV7H9JqriRcuXX1wADrhoNFhcAvtp4lLHf7SQ7z0aonwdTB7WiVR2t2yYiVVupjJZq0KABycl/9QUYMGAAiYmJl55SRKDbEwUri/9Z2JC8l/4NTMwf0ZnIwGrEp2Vz+7Q1zFgZp4U3RURKqMTFzT//Yl24cCGZmRrZIeIwNhvMewCmtqfRH7P54a5aXN80lHybwf9+3MVDn28mLUvDxUVE/o3do6VEpJRkJkNeNuRmwE9P4D2tLe8EzuP566NwtZj4aWcCvd/8jXWHTjk7qYhIuVbi4sZkMp3X36ai978RKVd8guHBZdBjHNTpBBiY1rzN3Tvu4ZfrzxJRw4sTadkMnL6WSb/sJc9qc3ZiEZFyqcQdis1mM71798bd3R0oWCjzmmuuOW8o+Lx58+wOMXXqVF577TUSEhJo3rw5b7/9Nu3atbvgsdOnT2fWrFns3LkTgNatW/Pyyy9f9Ph/UodiqTD2LITvH4GsgmUazt77K+PWmfhq0zEAWtbx580BLalTw8uZKUVEykSpdCi+++67qVmzJn5+fvj5+XHXXXcRFhZW+PjcZq85c+YwevRoxo8fz+bNm2nevDm9evUiKSnpgscvX76cgQMHsmzZMtasWUN4eDg9e/bk+PHjdr+3SLnWqA88tBbaD4e2D+BZpwWv9W/O2wOuJNgjjy1HUunz1grmbzmuzsYiIn9z2QtnXq727dvTtm1b3nnnHQBsNhvh4eE88sgjPP300//6eqvVSvXq1XnnnXcYMmTIec/n5OSQk5NT+Dg9PZ3w8HC13EjFYhgFMxwDHIjF+Lw/693a8VDaEE7hR5+mIbxwUxNqeLs7N6eISCkptYUzHS03N5dNmzYRExNTuM9sNhMTE8OaNWtKdI6srCzy8vIICAi44PMTJkwo0rIUHh7ukOwiZerv/dvit2EyrLTPWcNK76fpadnMwh0J9HzjNxbtjHdeRhGRcsKpxc3JkyexWq0EBwcX2R8cHExCQkKJzvHUU08RFhZWpED6uzFjxpCWlla4HT169LJzizhVl9EwbCXUjMYzP41pnlP5j/8KMjIzGPbZZh79cgunM3OdnVJExGkq9FDwiRMnMnv2bL799ls8PDwueIy7uzu+vr5FNpEKL6QpPPgrRHTBnH+WR7LfY1ngawSZ0vh+2wmufeM3Fu/SJJsiUjU5tbgJDAzEYrGcN9NxYmIiISEhxb729ddfZ+LEifzyyy80a9asNGOKlE8ubjDoa+j5Enj4E5bxO3P7WKgfVI2TGTk8MGsjj365heQzOf9+LhGRSsSpxY2bmxutW7cmNja2cJ/NZiM2NpaOHTte9HWvvvoqL7zwAosWLaJNmzZlEVWkfHL1gE4Pw/1LoO+bRHYZwIJHu/Bg13qYTfD9thPETP6VuRuOakSViFQZTr8tNXr0aKZPn84nn3zC7t27GT58OJmZmQwdOhSAIUOGMGbMmMLjX3nlFcaOHcuMGTOIiIggISGBhIQEMjIynPURRJwvsAG0vgcAD1cL/73Kj2V9UokO9SXtbB5PfrOdgdPXcihZ/5+ISOXn9OJmwIABvP7664wbN44WLVqwdetWFi1aVNjJ+MiRI8TH/zUC5L333iM3N5fbbruN0NDQwu3111931kcQKV9yMuDz26kb+xA/Vp/E1Pan8XA1s/ZQCte9uYK3Y/eTm6/ZjUWk8nL6PDdlTTMUS6Vns8Kyl2DVm2DLByD1qnGMPNKFX/clA1A/qBrP3XglXRoEOTOpiEiJ2fP9reJGpLI6dRBWvw2bPgbAqNGAw76tGXWkC9syqwNw3ZUhPHN9Y8IDtISDiJRvKm6KoeJGqhTDgBWvw/JXwJYHwJkHNzB5Ux6z1vyB1Wbg7mJm+NX1GdatPh6uFicHFhG5MBU3xVBxI1VS+gk4uh4SdkCPsQDsTTjD5s+f5btTtVlri6Z2dU/G3hBNz+hgTH+fEVlEpBxQcVMMFTcifzqwBD67FYDPLTfxfOYt5OJKp/o1+G+fxjSpZf9CuCIipaXCrC0lIk5UpyO0KlhsdpD1O9b7Pc2dLstZffAkN7y9ksfmbOV46lknhxQRsZ9abkSqut0/woL/QEbBem67qrXj0ZTbOGDUxs3FzL2dI3moe318PVydHFREqjLdliqGihuRC8jJgA0fwrKXwZpDtn8Ud3u8zbrDpwGo7uXKoz0acGf7Ori7qNOxiJQ9FTfFUHEjUozkfRD7PDTshdFyMLG7k3hr4QZ2njSwYaaWvycjezTglla1cLHorraIlB0VN8VQcSNiH+vyV4n/fQVPn+7LyowwwEREDS8eu7YhNzQLw2LWyCoRKX0qboqh4kbEDtY8+LAHxG8D4KT3FbyY1Y+fs67gLB40DPZm9LUN6XVliIaPi0ipUnFTDBU3InY6sq5gKYeDSyG/YPRUrqUaz1mH8kV2JwCiQ315+JoorrsyBLNackSkFKi4KYaKG5FLlHkKVkyC37+FMycAWNDwRZ7a25CMnII1rOoHVeOhq6O4sUUYruqTIyIOpOKmGCpuRC6TzQaxz8GmmfDoVk4b3ny8+jAzV8WRnl1Q5NSu7sn/datP/9a1taSDiDiEiptiqLgRcZCsFPAKKPjZZiN/Rm82uLXniT/aciyzoNWmpo87D3Spxx3twvHRPDkichlU3BRDxY1IKTi8Cmb2AcDmH8H64DuYEFePbeneAHi7u3BH23CGXhVJLX9PZyYVkQpKxU0xVNyIlIL8XNj2Bfz6GqQfA8Bw8WBnvXuZdCya5SkFLTwWs4neTUK4v0s9WoT7OzGwiFQ0Km6KoeJGpBRlp8P6D2D394XDxwFW913O1C05rDpwqnBf24jq3HdVPa6NDtZcOSLyr1TcFEPFjUgZsFlhx1ewfQ6YzHDXNwDsOpHO0XljmZsQzK/5V5KPC7X8PbmzfR1ubxNOkI+7k4OLSHml4qYYKm5Eypg1HywuBT9npcBr9cGwcdbFl5nW6/ghuwW7jAhcLSauaxLK4A51aRtRXZMCikgRKm6KoeJGxIkykmHp/2D7V4UTAhqY+N6zH2NP9yGdagBcEezDXR3rcnPLWni7uzgzsYiUEypuiqHiRqQcsObD1s9g13cFMx//6aOISbx2sBbZeTYAvNws3NAslNvbhNO6rlpzRKoyFTfFUHEjUs7sXQSLngKvQLhvMWk5Vr7deJiclW/zTXo0+4zagIl6gdXo3yacW1vVoqavh7NTi0gZU3FTDBU3IuVUfi64uP3184tBACS5hTMruwvv5fbGigWL2cTVDYPo36Y21zQKxs1FyzyIVAUqboqh4kakArDmw+w74dAysOYCkOIXzTzb1Xx+sj5/GMHYMOPv5UqfpqH0a1GLNnWra9FOkUpMxU0xVNyIVCDZ6bDza/hlLORmFO7+svFU3jgQQtKZHNzJJQdXwvw86dsijH4tatEoxEf9c0QqGRU3xVBxI1IBZSTDlk9h3yKI3w6jd2H1qM7aQ6fI+vkFopMW8LW1C4usbdlt1KFhsA83tahF32Zh1Knh5ez0IuIAKm6KoeJGpIKzWcH8t5XG3+8G8VsLH24yGvJeXl+W2FoDEB3qS+8mIfRuGkJUTZ8yDisijqLiphgqbkQqmbyzsGcBbPgQjq4Do2AY+UlLEJ/kdOft/H6Fh0bV9KZ3kxCuaxJCdKivbl2JVCAqboqh4kakEjv9B6x9DzZMB1s+Zzs+zvcBd/PTzgQ2HzjGo6a5zLRexzEjiLo1vLjuyhCujQ6mZZ3qWt9KpJxTcVMMFTciVcDZVEjaDd41oUZ9ALLWfozXolEA7Dbqss0aySajId9bO+HlVY2rr6jJNY1q0rVhEH6ers7LLiIXpOKmGCpuRKqoI2thyXNwZE2R3WdxY521MQ/nPUIGXljMJq4JN9OxUTjdmtSlXmA13b4SKQdU3BRDxY1IFZeRBIdXQsJ22PE1pB0F4JW2K1iy9zT7kzJ42eVDBliWsd+ozS8evTjVaBAdG4bRKaoGvh5q1RFxBhU3xVBxIyKFDAMSd8LxzdD6bgCOnMrC9bMbCT29ofCwo7YgZlp7ssDoTK3wSK6KCqRrw0Ca1/bHxaIZkkXKgoqbYqi4EZESOZNI9s7vMP36Cu7ZJwt3T8vvy8T8gQD4uZu5OtKT1ldE0KFeDRrU9NYtLJFSYs/3t0sZZRIRqVh8gvHo+CC0vgu2fQHrP4Tk3XS9oiY7LKGsOnCSGmcP83rc06w82ITZtmbsdb+SgLrNaBUVRod6Nbgi2EdLQog4gVpuRERKwjAg/Ti4eEK1GlhtBkfWzSfy53uKHGYzTBw2gtliNOBjl9sJjYymfWQAHerVoHGor4aci1wi3ZYqhoobEXGo5L2wbxG2g8uxHt+Ka05K4VP35D7JclsLAKJNh/F0NeNRuzmtImrQqk51Wtbxx9/LzUnBRSoWFTfFUHEjIqXGMCAzGRK2Y41bxb6ga1meGsy6uFNcf3gi/U2xnDE82WuEs97WiO22ehwK6ELzukG0rludVnWrExXkrVtZIheg4qYYKm5ExBlsi/4LGz7EbM0psj/N8OJHa0eezR+KgRkfDxea1fajSS0/mtXyp1ltP2pX91RHZanyVNwUQ8WNiDiNNQ9OHYBjG+DgMoy9CzHlZ3PYty1Pe7/AtqNpnM3LZ7rrZJINPw4aYRw0QvnD/Qpq165D01p+BVttP2r5q+CRqkXFTTFU3IhIuWHNg0O/grsP1GlPvtVG3K4NNPimZ5HDcgwXNtsast5oxI/WDuw3ahNQzY0rw3xpHOpLoxAfGof6Uj/IGzcXzbsjlZOKm2KouBGRci0rBQ4tL5hc8OR+bAk7MZ8+VPj0dpem3Jr1NHk2E95kkYMbeX/O6uFqMVE/yJvGob40DvWhUUhB8RPk4+6kDyPiOCpuiqHiRkQqFMOApF3wx+qC//Z8kWyTB3sSzuCy/EUaxn3KercOTMuOYWV2JHD+rapAbzca1PShQbA3UTW9iQryJirYmyBvd93akgpDxU0xVNyISKUx5y7Y/UPhQ5ubN5le4SS6hHHAGsKref05fCoLmwEBpGPDRAae5P/Z0uPr4UJUTW8a1PQpKHr+3Gr5e2rElpQ7Km6KoeJGRCoNw4ATm2HDR7B9Dtjy/3rOLxwe28nZXCv7Es8QMfda/M7sw4aJM3iz21abLbYo8rFw1Ajia2s3bBT01/FwNRNRo1rBFliNiBpeRARWIzKwGjV91NojzqHlF0REqgKTCWq1LtiunwypRyDlEJyO49ztKU83C83D/cEdOANmDPw4QwfzbjqYdwNw2qMOmbUHsj85g7iTmcwzPUXKKW8yTnmRt89CLq5sM3z5zajGGYs/GwL6Ehn4t8KnRjXCA7wI9vXQDMxSLqjlRkSkqrDmQ3YqnIkv6MNz6iAYVgi8Ato/CEB+vhXLizUwceGvht+sTRmSN6bw8Sr3R8gwPDlohJGCHzYPf8741MPb2xePGnVxr9OK2tU9qV3di5o+7rrdJZdMLTciInI+iwtUCyzYQppe8BAXswmGLixoAcrPKRiunn8WMpKwnk3nipod+bhGW+JOZhKflESt7afABFdwrOAEeUBKwfZdXCdGrnkYABM2fnAfi8niximPumT61sMaEIVbjQh8a9YhMLgWoX4eVHPX15JcPv0pEhGRv5jNULdTwfYPFiD4z607gK0OdN1YMGT95AEyz5zmbMoxSIkjPzcHT48r6OAawLHTZ7GmnaCJKQ5sQNZeyAIS/jr31PwbeS3/Dnw8XKjva2WEbTaGVw3wrYW7fwg+ATXxjmhNSIAvPu4u6vcjxVJxIyIil8ZsgcAGENgAM+Dz53ZOGHBuOsL87AyS9tQg9VQyuYl7cD21F6+sY/jlxONrS8PTAuTDmex80nNOcK37d5ABJP11vnTDk422K5hPd7b4dKWmjwdhXtDE5QjePn54+9XAJzCMQD9vavp4UMPbDVeLJjWsilTciIhIqXPx8KZmi97UvNCTGcnca9jo7xpAYno2JxOOsGv7g9gyknDLOIFr7mmq5yXiTzrXWLayNq8xR1POcjTlLHmmg7ztPrbI6bINV5INf7YQwLeW3mz27UFNX3dCqpmp6WFQzT+AAC83Aqq5UcPbjYBq7gR4ueHrqRahykLFjYiIOJd3EPBny4+HK1E1r4RmrxU9xmaDE5vJPb6NoX7N6OVZn6T0HMx/ZJK2IxSzNRvP/HRcsOJhyiPclEw4yfyc25a9iWfYm3iG9qbdvOb+AumGJzttkRw2Qlhj1OKU4UcyfuwjAnO1gsKnhpeFGt6uBFRzx9/Lgxo+7gRUc8Pf0w1/L1f8PF3x83LF281FnaTLIY2WEhGRysFmKxgNlpOOLS2ezFPHSK4WxXFLbZLP5OC3/1t67H72oi8fkfsoC2wdAOhvWc5rrh8UPnfWcOO4EUgeFvJw4fX82/nN1hyzCVp5nOBmlzUYrl5Y3DzB3QdXdy883N3wcHfnbHAr3ALC8fd0xc8d/Dxd8anmhZerRYWRHTRaSkREqh6zGbwCwCsAc/UIfCIKWoPqnXu+1SOQcw8k7YbjmyHrVMGSFtlp2M4k8HzPPjzkE01KZi7evx+ArX+d2tOUS5TpROFjdwtgA5sBkbn7GGR8UzBSLOv8WA9tfpSFfxZNvcwbeM91CmdxIw1Xck2upJgCOGmpSZ6LN7/53cRJvyvx8XChtimZK8+sxuoThpubB+6e1TAFNsDNPwwfT1e8PVzw9XDF3cWs22n/oOJGRESqDncfCG9XsP2NGQj8cwMgchj0GlLQGmRYCxY0zToJ1lyw5jG9dluyXf1IP5tHdpwXCXvyyM/JxJpzFnLSMfJzsOXnYbPmEx5chxY2f9LP5hGReQazYVCNHKqRA0CwcRryD0I+zE2/kkV/BABwg3kNI9zevuDHyDUsPJL3KD/b2mI2QS+3HQwzz+OUJYhsizdY3Ml19SHTPZg8d39O+jbF6hNKNTcLvuZsathScPOshpuXLx5urnh6eODl4YaXuzte7q54ubviajFV2KJJxY2IiMg/ubgXbOd4n98V2gPwcLVA8+4F20WM+fsDW1eMrKfIycogMyuTrKwM8lOOYUs9Sn5OJjfV6EY7l3AycvIJSEphZ3w3quUmYdiseOenUsN2Egs23ExWrKaCkWA2AzzzTtPcbS/k74X88zM8lPtX69EN5jW8c5GiCWBc3t3MsvbCYjbRzOUod1t+BrMFi9lMomttMl1rkOkeRJ6rL1leYZg8/PBwLSiaAox0LB5e+NcMp2/zsOKucKkqF8XN1KlTee2110hISKB58+a8/fbbtGvX7qLHf/XVV4wdO5bDhw/ToEEDXnnlFfr06VOGiUVERC6B2YzJuyYe3jXxAGr84+krijxqAAwuekBuFuRmgjWXDzz8yTTcyMq1kp1yBUeONsdIO44tJx1rzllM2am4ZyVgyU2nS/iVhHhEkpWbT4NT+8hM8Mbdlo3LBSqheKMgldVmEJZ/jH7mWLBSsOUVPfb/ckfxs63g+/pG82pGu73DSuuVTAp9rWoXN3PmzGH06NFMmzaN9u3bM2XKFHr16sXevXupWfP8Snn16tUMHDiQCRMmcMMNN/DFF1/Qr18/Nm/eTJMmTZzwCURERMqIm1fBBn/NLeThCr5REBF10ZcNLPKoGfBYwcKr1ryC2242a8HCqzYr77p4kWV1ITvfijUhlOT97uRZrRg5Gbif3g95WXhmHMVszeHm5vVp6teQs3lW6iUeJOewJ9W9fenWMKj0rkEJOH20VPv27Wnbti3vvPMOADabjfDwcB555BGefvrp844fMGAAmZmZ/Pjjj4X7OnToQIsWLZg2bdq/vp9GS4mIiFQ89nx/O3XqxtzcXDZt2kRMTEzhPrPZTExMDGvWrLnga9asWVPkeIBevXpd9PicnBzS09OLbCIiIlJ5ObW4OXnyJFarleDg4CL7g4ODSUhIuOBrEhIS7Dp+woQJ+Pn5FW7h4eGOCS8iIiLlUqVfdGPMmDGkpaUVbkePHnV2JBERESlFTu1QHBgYiMViITExscj+xMREQkJCLviakJAQu453d3fH3d39gs+JiIhI5ePUlhs3Nzdat25NbGxs4T6bzUZsbCwdO3a84Gs6duxY5HiAxYsXX/R4ERERqVqcPhR89OjR3H333bRp04Z27doxZcoUMjMzGTp0KABDhgyhVq1aTJgwAYCRI0fSrVs3Jk2axPXXX8/s2bPZuHEjH3zwQXFvIyIiIlWE04ubAQMGkJyczLhx40hISKBFixYsWrSosNPwkSNHMJv/amDq1KkTX3zxBc8++yz//e9/adCgAfPnz9ccNyIiIgKUg3luyprmuREREal4Ksw8NyIiIiKOpuJGREREKhUVNyIiIlKpqLgRERGRSkXFjYiIiFQqKm5ERESkUnH6PDdl7dzId60OLiIiUnGc+94uyQw2Va64OXPmDIBWBxcREamAzpw5g5+fX7HHVLlJ/Gw2GydOnMDHxweTyeTQc6enpxMeHs7Ro0c1QWAp0nUuG7rOZUPXuezoWpeN0rrOhmFw5swZwsLCiqxccCFVruXGbDZTu3btUn0PX19f/Y9TBnSdy4auc9nQdS47utZlozSu87+12JyjDsUiIiJSqai4ERERkUpFxY0Dubu7M378eNzd3Z0dpVLTdS4bus5lQ9e57Ohal43ycJ2rXIdiERERqdzUciMiIiKVioobERERqVRU3IiIiEilouJGREREKhUVNw4ydepUIiIi8PDwoH379qxfv97ZkSqUCRMm0LZtW3x8fKhZsyb9+vVj7969RY7Jzs5mxIgR1KhRA29vb2699VYSExOLHHPkyBGuv/56vLy8qFmzJk888QT5+fll+VEqlIkTJ2IymRg1alThPl1nxzh+/Dh33XUXNWrUwNPTk6ZNm7Jx48bC5w3DYNy4cYSGhuLp6UlMTAz79+8vco6UlBQGDRqEr68v/v7+3HfffWRkZJT1Rym3rFYrY8eOJTIyEk9PT+rXr88LL7xQZO0hXedL89tvv9G3b1/CwsIwmUzMnz+/yPOOuq7bt2+nS5cueHh4EB4ezquvvuqYD2DIZZs9e7bh5uZmzJgxw/j999+NBx54wPD39zcSExOdHa3C6NWrl/Hxxx8bO3fuNLZu3Wr06dPHqFOnjpGRkVF4zLBhw4zw8HAjNjbW2Lhxo9GhQwejU6dOhc/n5+cbTZo0MWJiYowtW7YYCxcuNAIDA40xY8Y44yOVe+vXrzciIiKMZs2aGSNHjizcr+t8+VJSUoy6desa99xzj7Fu3Trj0KFDxs8//2wcOHCg8JiJEycafn5+xvz5841t27YZN954oxEZGWmcPXu28JjrrrvOaN68ubF27VpjxYoVRlRUlDFw4EBnfKRy6aWXXjJq1Khh/Pjjj0ZcXJzx1VdfGd7e3sabb75ZeIyu86VZuHCh8cwzzxjz5s0zAOPbb78t8rwjrmtaWpoRHBxsDBo0yNi5c6fx5ZdfGp6ensb7779/2flV3DhAu3btjBEjRhQ+tlqtRlhYmDFhwgQnpqrYkpKSDMD49ddfDcMwjNTUVMPV1dX46quvCo/ZvXu3ARhr1qwxDKPgf0az2WwkJCQUHvPee+8Zvr6+Rk5OTtl+gHLuzJkzRoMGDYzFixcb3bp1KyxudJ0d46mnnjKuuuqqiz5vs9mMkJAQ47XXXivcl5qaari7uxtffvmlYRiGsWvXLgMwNmzYUHjMTz/9ZJhMJuP48eOlF74Cuf7664177723yL5bbrnFGDRokGEYus6O8s/ixlHX9d133zWqV69e5O+Np556yrjiiisuO7NuS12m3NxcNm3aRExMTOE+s9lMTEwMa9ascWKyii0tLQ2AgIAAADZt2kReXl6R69yoUSPq1KlTeJ3XrFlD06ZNCQ4OLjymV69epKen8/vvv5dh+vJvxIgRXH/99UWuJ+g6O8r3339PmzZt6N+/PzVr1qRly5ZMnz698Pm4uDgSEhKKXGc/Pz/at29f5Dr7+/vTpk2bwmNiYmIwm82sW7eu7D5MOdapUydiY2PZt28fANu2bWPlypX07t0b0HUuLY66rmvWrKFr1664ubkVHtOrVy/27t3L6dOnLytjlVs409FOnjyJ1Wot8hc9QHBwMHv27HFSqorNZrMxatQoOnfuTJMmTQBISEjAzc0Nf3//IscGBweTkJBQeMyFfg/nnpMCs2fPZvPmzWzYsOG853SdHePQoUO89957jB49mv/+979s2LCBRx99FDc3N+6+++7C63Sh6/j361yzZs0iz7u4uBAQEKDr/Kenn36a9PR0GjVqhMViwWq18tJLLzFo0CAAXedS4qjrmpCQQGRk5HnnOPdc9erVLzmjihspd0aMGMHOnTtZuXKls6NUOkePHmXkyJEsXrwYDw8PZ8eptGw2G23atOHll18GoGXLluzcuZNp06Zx9913Ozld5TF37lw+//xzvvjiC6688kq2bt3KqFGjCAsL03Wu4nRb6jIFBgZisVjOG02SmJhISEiIk1JVXA8//DA//vgjy5Yto3bt2oX7Q0JCyM3NJTU1tcjxf7/OISEhF/w9nHtOCm47JSUl0apVK1xcXHBxceHXX3/lrbfewsXFheDgYF1nBwgNDSU6OrrIvsaNG3PkyBHgr+tU3N8bISEhJCUlFXk+Pz+flJQUXec/PfHEEzz99NPccccdNG3alMGDB/PYY48xYcIEQNe5tDjqupbm3yUqbi6Tm5sbrVu3JjY2tnCfzWYjNjaWjh07OjFZxWIYBg8//DDffvstS5cuPa+psnXr1ri6uha5znv37uXIkSOF17ljx47s2LGjyP9QixcvxtfX97wvmqqqR48e7Nixg61btxZubdq0YdCgQYU/6zpfvs6dO583lcG+ffuoW7cuAJGRkYSEhBS5zunp6axbt67IdU5NTWXTpk2FxyxduhSbzUb79u3L4FOUf1lZWZjNRb/GLBYLNpsN0HUuLY66rh07duS3334jLy+v8JjFixdzxRVXXNYtKUBDwR1h9uzZhru7uzFz5kxj165dxoMPPmj4+/sXGU0ixRs+fLjh5+dnLF++3IiPjy/csrKyCo8ZNmyYUadOHWPp0qXGxo0bjY4dOxodO3YsfP7cEOWePXsaW7duNRYtWmQEBQVpiPK/+PtoKcPQdXaE9evXGy4uLsZLL71k7N+/3/j8888NLy8v47PPPis8ZuLEiYa/v7/x3XffGdu3bzduuummCw6lbdmypbFu3Tpj5cqVRoMGDar8EOW/u/vuu41atWoVDgWfN2+eERgYaDz55JOFx+g6X5ozZ84YW7ZsMbZs2WIAxuTJk40tW7YYf/zxh2EYjrmuqampRnBwsDF48GBj586dxuzZsw0vLy8NBS9P3n77baNOnTqGm5ub0a5dO2Pt2rXOjlShABfcPv7448Jjzp49azz00ENG9erVDS8vL+Pmm2824uPji5zn8OHDRu/evQ1PT08jMDDQ+M9//mPk5eWV8aepWP5Z3Og6O8YPP/xgNGnSxHB3dzcaNWpkfPDBB0Wet9lsxtixY43g4GDD3d3d6NGjh7F3794ix5w6dcoYOHCg4e3tbfj6+hpDhw41zpw5U5Yfo1xLT083Ro4cadSpU8fw8PAw6tWrZzzzzDNFhhbrOl+aZcuWXfDv5LvvvtswDMdd123bthlXXXWV4e7ubtSqVcuYOHGiQ/KbDONvUzmKiIiIVHDqcyMiIiKVioobERERqVRU3IiIiEilouJGREREKhUVNyIiIlKpqLgRERGRSkXFjYiIiFQqKm5ERESkUlFxIyLlyj333EO/fv2cHUNEKjAXZwcQkarDZDIV+/z48eN588030cTpInI5VNyISJmJj48v/HnOnDmMGzeuyOrZ3t7eeHt7OyOaiFQiui0lImUmJCSkcPPz88NkMhXZ5+3tfd5tqauvvppHHnmEUaNGUb16dYKDg5k+fTqZmZkMHToUHx8foqKi+Omnn4q8186dO+nduzfe3t4EBwczePBgTp48WeKshmHw3HPPUadOHdzd3QkLC+PRRx911KUQkVKk4kZEyr1PPvmEwMBA1q9fzyOPPMLw4cPp378/nTp1YvPmzfTs2ZPBgweTlZUFQGpqKtdccw0tW7Zk48aNLFq0iMTERG6//fYSv+c333zDG2+8wfvvv8/+/fuZP38+TZs2La2PKCIOpFXBRcQpZs6cyahRo0hNTS2y/5577iE1NZX58+cDBS03VquVFStWAGC1WvHz8+OWW25h1qxZACQkJBAaGsqaNWvo0KEDL774IitWrODnn38uPO+xY8cIDw9n7969NGzY8F/zTZ48mffff5+dO3fi6urqmA8tImVCLTciUu41a9as8GeLxUKNGjWKtKIEBwcDkJSUBMC2bdtYtmxZYR8eb29vGjVqBMDBgwdL9J79+/fn7Nmz1KtXjwceeIBvv/2W/Px8R30kESlF6lAsIuXeP1tOTCZTkX3nRmHZbDYAMjIy6Nu3L6+88sp55woNDS3Re55r5VmyZAmLFy/moYce4rXXXuPXX39VS45IOafiRkQqnVatWvHNN98QERGBi8ul/zXn6elJ37596du3LyNGjKBRo0bs2LGDVq1aOTCtiDiabkuJSKUzYsQIUlJSGDhwIBs2bODgwYP8/PPPDB06FKvVWqJzzJw5k48++oidO3dy6NAhPvvsMzw9Palbt24ppxeRy6XiRkQqnbCwMFatWoXVaqVnz540bdqUUaNG4e/vj9lc8NfezJkzi51U0N/fn+nTp9O5c2eaNWvGkiVL+OGHH6hRo0ZZfQwRuUQaLSUiVdL48eP59ddfWb58ubOjiIiDqc+NiFRJP/30E++8846zY4hIKVDLjYiIiFQq6nMjIiIilYqKGxEREalUVNyIiIhIpaLiRkRERCoVFTciIiJSqai4ERERkUpFxY2IiIhUKipuREREpFJRcSMiIiKVyv8DeEiQiGNnXfgAAAAASUVORK5CYII=\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "seconds = np.arange(1001)\n", - "fraction = np.exp(-4.59e-3 * seconds)\n", - "\n", - "plt.plot(seconds, fraction, linestyle='-', label='Theoretical')\n", - "plt.plot(seconds, decay(4.59e-3, n=5000), linestyle='--', label='Simulation')\n", - "plt.xlabel('Time, s')\n", - "plt.ylabel('Fraction of Undecayed Nuclei')\n", - "plt.legend();" - ] - }, - { - "cell_type": "markdown", - "id": "7e193e9f-25ca-47fe-9809-16db9141e164", - "metadata": {}, - "source": [ - "## Further reading\n", - "\n", - "- To learn more about NumPy random number generators, see [Random Generator](https://numpy.org/doc/stable/reference/random/index.html)\n", - "- To learn more about random number distributions and their generation, see [Monte Carlo Simulation Part 5: Randomness & Random Number Generation](https://towardsdatascience.com/monte-carlo-simulation-421110b678c5?gi=f86d4ec9f452)\n", - "- For examples of using random variables for chemical simulations, see chapter 9 of [Scientific Computing for Chemists](https://weisscharlesj.github.io/SciCompforChemists/intro.html)" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.10.8" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/content/tutorial-stochastic-simulations.md b/content/tutorial-stochastic-simulations.md new file mode 100644 index 00000000..ae5fa508 --- /dev/null +++ b/content/tutorial-stochastic-simulations.md @@ -0,0 +1,483 @@ +--- +jupytext: + text_representation: + extension: .md + format_name: myst + format_version: 0.13 + jupytext_version: 1.14.7 +kernelspec: + display_name: Python 3 (ipykernel) + language: python + name: python3 +--- + +# Simulating Using Random Variables + +Randomness, or apparent randomness, is a major part of the world we live from +the movement of gas molecules in the air we breath to the outcome of a coin toss. +While many events are not truely random, they are often close enough to random +or seemingly random enough to be simulated as such. +Despite many processes being random, their outcomes often conform to a +statistical pattern if enough of these random events occur. +For example, if we roll a six-sided die over a large number of rolls, we expect +to roll a 5 about $\frac{1}{6}$ of the time. +As a general rule, the larger the number of random events observed, the closer +the distribution of these events will *likely* be to the expected disbribution. +In this tutorial, we will use a random number generator provided in NumPy to +solve a number of problems through stochastic simulations. +While the problems demonstrated below all have know solutions or equations, you +may face other problems that do not have an analytical model or known solution. +The methodology demonstrated below can be used to solve problems when no known +solution or model exists. + +## What you'll do +- Generate random values using NumPy to power stochastic simulations +- Perform stochastic simulations to determine the + - Likelyhood of multiple children in a classroom of 25 having the same birthday + - Distribution of marbles in a Galton board + - Value of $\pi$ + - Amount of radioactive material left versus time +- Compare the above simulations to known values or an analytical model + +## What you'll learn: +- Generating large quantites of random values in a desired distribution +- Using random values to simulation a range of scenarios and solve problems + +## What you'll need: +- [NumPy](https://numpy.org/) +- [Matplotlib](https://matplotlib.org/) +- Python's `math` module + +The above two packages are imported using the following commands: + +```{code-cell} ipython3 +import numpy as np +import matplotlib.pyplot as plt +import math +``` + +## Generating random variables + +NumPy can generate random variables using a Generator from the `np.random` module. +While these values are not truely random, they are close enough for the following +applications. +One of the advantages of using NumPy to generate variables over the standard +`random` Python module is that NumPy can generate a large number of random +variables efficiently without the use of a `for` loop. +These variables can be generated in a variety of probability distribution +including normal, poisson, and binomial; but for the following simulations, we +will mostly use even distributions where all numbers in the range have an equal +likelyhood of being generated. +This is accomplished by first creating a Generator using the +`np.random.default_rng()` function and then using `random(n)` or +`np.integers(low, high=, size=n)` methods with the Generator to produce random +values where `n` is the number of random values returned. +Below are some common methods for generating random values. + +| Method | Description | +|-----------|-------------| +|`random(n)`| Generates `n` float values in the [0,1) range with an even distribution | +|`integers(low, high=, size=)`| Generates `size` integers in the requested range [low, high) in a uniform distribution| +|`normal(loc, scale=, size=)`| Generates `size` floats in a normal distribution centered on `loc` with a `scale` standard deviation| +|`binomial(t, p, size=)`| Generates `size` integers in a bionimial distribution with `t` trials for each value with a probability `p`| +|`choice(a, size=)`| Selects `size` elements from `a` list, tuple or ndarray with an even probability | +|`shuffle(a)`| Shuffles items in list, tubple, or ndarray `a` | + +```{code-cell} ipython3 +rng = np.random.default_rng(seed=18) +rng.random(10) +``` + +You may have guessed by looking at the returned values that `random()` produces +values in the 0 $\rightarrow$ 1 range, but what happens if we need values in a +different range? +We can modify these values by mutiplying them by a coefficient to increase the +range and using addition or substration to shift the center of the range. +For example, if we need random values from -10 $\rightarrow$ +10, we can +accomplish this by the following. + +```{code-cell} ipython3 +20 * rng.random(10) - 10 +``` + +It's worth noting that the `random()` method returns values from the [0,1) range +which includes the lower end and excludes the upper end. +This is close enough to [0,1] for our purposes. + ++++ + +## Solving the birthday problem + +The goal of the [birthday problem](https://en.wikipedia.org/wiki/Birthday_problem) +is to determine the probability of multiple children in a classroom of 25 +students having the same birthday. +For simiplicity, we will ignore leap years (i.e., February 29 birthdays) and +assume that the students are equilly likely to be born any day of the year. +One method of determining the answer is to repeately simulate a classroom of 25 +student birthdays by using a random number generator and see how often all +students in the class have unique birthdays. +The general steps for this processes are outlined below. + +1. Simulate 25 random birthdays with a random integer generator +2. Check to see if any of the above birthdays match +3. Record the outcome if all birthdays are unique +4. Repeat setps 1-3 a large number of times + +To make things easier, we will just generate integers 0 $\rightarrow$ 364 +representating days of the year instead of actual months and days. + +```{code-cell} ipython3 +def all_unique(class_size, n_classrooms=100): + '''Randomly generates birthdays for groups of kids of a given group size and + outputs the percent of time all students have uniquie birthdays. All input + and output values are ints or floats. + + (classroom size, number of classrooms) -> percentage classrooms with all unique birthdays + ''' + + all_unique_class = 0 # number of classrooms with students NOT sharing birthdays + + for classroom in range(n_classrooms): + birthdays = rng.integers(0, high=365, size=class_size) + if class_size == np.unique(birthdays).size: + all_unique_class += 1 + + return 100 * all_unique_class / n_classrooms +``` + +Below we simulate 50000 classrooms of 25 students and find that only around 43% +of the time every student in a classroom has a unique birthday from all the other students. + +```{code-cell} ipython3 +all_unique(25, n_classrooms=50000) +``` + +This problem also has an equation for the probability given below where **p** +is the probability of all students having a unique birthday and **n** is the +classroom size. +Performing this calculation below, we find that 43.13% of the time, students +should have all unique birthdays which is quite close to what was found in the +simulation above. + +$$ p = \frac {365!}{365^n(365-n)!} $$ + +```{code-cell} ipython3 +n = 25 +math.factorial(365)/(365**n * math.factorial(365-n)) +``` + +## Simulating a Galton board + +Next, we will simulate a [Galton board](https://en.wikipedia.org/wiki/Galton_board) +which allows mables to fall down levels of staggered pegs. +Each marble starts in the horizontal center of the board, and at each level, +the marble hits a peg. To continue falling to the next level, the marble must +move around the peg, and it has an equal likeliness of moving to the left as it +does to the right. +At the bottom of the board, the marbles collect in bins with the height of +marbles yielding a normal distribution. + ++++ + +![](tutorial-stochastic/galton_board.png) + ++++ + +**Figure 1.** An example of a Galton board with three marbles with three +different potential paths (dotted lines) shown. + +The key operational detail of a Galton board is that every marble moves one +increment to the left or right at each level, so our simulation centers around +a series of randomly generated +1 and -1 to determine this movement by the +following methodolog. +1. Generate a random series of +1 and -1 in an even distribution - one value for + every level on the Galton board +2. Sum up the values in step 1 to determine the final location of the mable +3. Repeat steps 1-2 for each simulated marble +4. Visualize the result + +Below is the simulation for a single marble moving down a 10-layered Galton board. +Note how the integers 0 and 1 generated by `integers()` and converted to a +series of -1 and +1 values, respectively. + +```{code-cell} ipython3 +moves = 2 * rng.integers(0, high=2, size=10) - 1 +final_position = moves.sum() +final_position +``` + +To simulate additional marbles, we could use a `for` loop, but because we need +the same number of integers for each marble, a more efficient way is to generate +the random integers in a two-dimensional array with a row for every level on the +Galton board and column for every marble simulated. +We then sum up the values in each column to obtain the final positions of all marbles. + +```{code-cell} ipython3 +def galton(marbles, levels=10): + '''integer -> ndarray of integers + + This function takes in an integer number of marbles and number of levels and outputs + the horizontal position of these marbles at the bottom of a Galton board. + ''' + moves = 2 * rng.integers(0, high=2, size=(levels, marbles)) - 1 + final_position = moves.sum(axis=0) + + return final_position +``` + +```{code-cell} ipython3 +sim = galton(1200) +sim[:20] +``` + +We visualize the results below using a histogram plot. +Being that all values are integers, we set `align='left'` so that each bar +resides directly over the integer it represents. + +```{code-cell} ipython3 +bins = np.arange(-10,12) +plt.hist(sim, bins=bins, align='left') +plt.xticks(bins[::2]) +plt.xlabel('Horizontal Marble Position') +plt.ylabel('Number of Marbles'); +``` + +One interesting trend that appears in the above histogram is that all locations +are integers. +This is because we used whole numbers for our left and right movements of +marbles (i.e., +1 and -1) and used ten layers in the above simulation. +There is no way to produce an odd integer by totaling a series of ten +1 or -1 +integers. +If we changed the number of layers to an odd number, we'd only get odd positions +in the result, and if we used +1/2 and -1/2 for our horizontal movement, we'd get +both even and odd integers. + ++++ + +## Calculating pi + +As a second appliation of random number generaters, we will calclate a numerical +value for $\pi$. +Imagine a circle with radius = $r$ inscribed inside a square of side length $2r$. + ++++ + +![](tutorial-stochastic/circle_square.png) + ++++ {"editable": true, "slideshow": {"slide_type": ""}} + +**Figure 2.** The circle radius r inscribed in a square with side length of 2r. + +The areas of the circle and square are described by $A +_{circle} = \pi r^2$ and $A_{square} = 4r^2$, respectively. +If we divide the area of the circle by the area of the square, we get $\pi / 4$. + +$$ \frac { A_{circle} }{ A_{square} } = \frac {\pi r^2} {(2r)^2} = \frac {\pi r^2} {4r^2} = \frac {\pi}{4} $$ + +This means that four times the ratio of the area of the circle and square equals $\pi$. + +$$ \frac { A_{circle} }{ A_{square}} \times 4 = \pi $$ + +The challenge is now finding the ratio between the areas of the two shapes which +can be done through a variety of creative means. +Our method will be counting randomly placed dots. +Imagine we painted the circle inscribed in a square on pavement outside and +count the water droplets that fall in the circle and square during a rain storm. + ++++ + +![](tutorial-stochastic/circle_square_dots.png) + ++++ + +**Figure 3.** Random dots inside the circle and square used to estimate a value of $\pi$. + +Because the rain drops fall randomly, the probability of a drop falling in one +of the shapes is proportional to the area of that shape, so dividing the number +of drops in the circle by the number of drop in the square provides a estimate +of $\frac { A_{circle} }{ A_{square} }$ which then can be used to calculate $\pi$. +Counting rain is a bit tedious and challenging, so we can simulate this using a +random number generator to produce random ($x, y$) coordinates of dots inside +the square. +We then total the number of these that fall inside the circle versus the square +and complete the calculation to obtain a value of $\pi$. + +For smilicity, we will center our circle and square around the origin and give +the circle a radius = 1. +This requires the coordinates to fall in the [-1, 1) ranges along both the $x$- +and $y$-axes. +We have no random number generator that produces values in this range, but we +can modify the `random()` method which generates floats in the [0, 1) range by +multiplying by 2 and substracting 1 as demonstrated below. + +~~~python +rng = np.random.default_rng() +x = 2 * rng.random() - 1 +~~~ + ++++ + +Below is a function that performs this simulation and calculation of $\pi$ with +the only function argument `n_samples` as the number of dots generated. +The general proceedure is ouline here. +1. Generate `n_samples` of ($x, y$) coordinates using the `random()` method +2. Calculate the distance from the origin using the `np.hypot()` function to + determine if the dot is inside the circle (all dots are inside the square) +3. Calculate $\pi$ + +```{code-cell} ipython3 +def estimate_pi(n_samples): + '''(integer) -> pi (float) + + Estimates the value of pi by finding the ratio of the area of a unit circle/area + of a unit square and multiplying by 4. + ''' + + n_samples = int(n_samples) + + # Step 1 + rng = np.random.default_rng() + coords = rng.random(size=(n_samples, 2)) + + # Step 2 + dist_from_origin = np.hypot(coords[:,0], coords[:,1]) # distance from the origion + in_circle = dist_from_origin[dist_from_origin <= 1] # if <= 1, the point is inside the circle + + # Step 3 + pi = 4 * (in_circle.size / n_samples) + + return pi +``` + +We can then call this function with 100 dots generated. +Because we are using a random number generator, every time we call this function, +we likley get a different value for $\pi$. + +```{code-cell} ipython3 +estimate_pi(100) +``` + +```{code-cell} ipython3 +estimate_pi(100) +``` + +We can also generate a value for $\pi$ using the `np.pi` to compare our answer to. + +```{code-cell} ipython3 +np.pi +``` + +Odds are that the values calculated above for $\pi$ above is close but not +exactly 3.14. +If we increase the number of dots, the value for $\pi$ will on average become +closer to the true value. +While it may be tempting to just call the function with an extremely large number +of dots, this can take substatially longer to computer. + +```{code-cell} ipython3 +estimate_pi(1E8) +``` + +## Simulating radioactive decay + +As a final example, we will simulate the radioactive decay of the radioactive +nuclide $^{137m}$Ba to determine the quantity of undecayed material versus time. +We will then compare it to an analytical model to see how well the two agree. +Radioactive nuclei decay by first-order kinetics, which means that each radioactive +nucleus has a fixed probability of decaying at any given time. +This is analogous to how each six-sided die in a bucket has a fixed probability +of rolling a one each time they are dumped out. +This analogy is so good that we can simulate the decay process by generating a +large number of random integers with fixed probabilities. + +The first thing we need to is to know the probability of a nucleus decaying in +a single second. +Because this is a first-order process, the rate (-dA/dt) is described by + +$$ \frac{-dA}{dt} = kA $$ + +where A is the quantity of $^{137m}$Ba, $t$ is time in seconds, and $k$ is the +rate constant for this process. +We also know that the half-life (t$_{1/2}$) of $^{137m}$Ba is about 151 seconds +which is related to the rate constant by the following equation. + +$$ t_{1/2} = \frac{ln(2)}{k} $$ + +This means that $k$ = 4.59e$^{-3}$ s$^{-1}$. +For first-order kinetics, this means that 4.59e$^{-3}$ fraction of the nuclei +decays, so this is the probability we need to simulate this process using random +numbers. +The function below calculates the fraction of radioactive material remaining +based on a rate constant `k` and allows the users to choose the number of +simulated nuclei `n` and duraction of the simulation `n_final`. + +```{code-cell} ipython3 +def decay(k, n=1000, t_final=1000): + '''floats and integers -> ndarray of integers + + Calculates the fraction of nuclei remaining at each second in the simulation + given n initial nuclei with a rate constant k of decaying each second and + a final simulation time t_final. + ''' + + n_undecayed = n + undecayed_array = np.full(t_final + 1, n) + + for second in range(1, t_final + 1): + decays = rng.binomial(1, p=k, size=n_undecayed).sum() + n_undecayed -= decays + undecayed_array[second] = n_undecayed + + fraction = undecayed_array / n + + + return fraction +``` + +Below we simulate the decay of $^{137m}$Ba using a hundred simulated nuclei. + +```{code-cell} ipython3 +decay(4.59e-3, n=100) +``` + +We can plot and compare this simulation to the analytical model for this +simulation knowing that the fraction of undecayed nuclei ($\frac{A}{A_0}$) is +described by the following first-order equation where $A_0$ and $A_t$ are the +initial quantities and quantities of nuclei at time $t$. + +$$ \frac{A_t}{A_0} = e^{-kt} $$ + +```{code-cell} ipython3 +seconds = np.arange(1001) +fraction = np.exp(-4.59e-3 * seconds) + +plt.plot(seconds, fraction, linestyle='-', label='Theoretical') +plt.plot(seconds, decay(4.59e-3, n=500), linestyle='--', label='Simulation') +plt.xlabel('Time, s') +plt.ylabel('Fraction of Undecayed Nuclei') +plt.legend(); +``` + +The simulation is in good agreement with the theoretical model, but this is some +discrepency. +If we increase the number of simulated nuclei, the simulation should align +better with the theoretical values. + +```{code-cell} ipython3 +seconds = np.arange(1001) +fraction = np.exp(-4.59e-3 * seconds) + +plt.plot(seconds, fraction, linestyle='-', label='Theoretical') +plt.plot(seconds, decay(4.59e-3, n=5000), linestyle='--', label='Simulation') +plt.xlabel('Time, s') +plt.ylabel('Fraction of Undecayed Nuclei') +plt.legend(); +``` + +## Further reading + +- To learn more about NumPy random number generators, see [Random Generator](https://numpy.org/doc/stable/reference/random/index.html) +- To learn more about random number distributions and their generation, see + [Monte Carlo Simulation Part 5: Randomness & Random Number Generation](https://towardsdatascience.com/monte-carlo-simulation-421110b678c5?gi=f86d4ec9f452) +- For examples of using random variables for chemical simulations, see chapter + 9 of [Scientific Computing for Chemists](https://weisscharlesj.github.io/SciCompforChemists/intro.html)