rustqR rustc 1.48.0std؝-6bf3f16f340782cacoreƞ-3375e4f89d420e7acompiler_builtins-f74b197469e67088rustc_std_workspace_core扪ڹ8-5e0675f526ef5c6ballocץޯČ-1ebf406bd4ea5769libcɄ-dfbef8c525de0186unwindܽ݇!-bd645b20c6c7b56dcfg_ifшC-b9e1e523c0c29a77 hashbrownǰ-c6632ca171f954ddrustc_std_workspace_allocW-b5bfd0198c7b740drustc_demangleة-3ac2d0878c297d42 addr2lineƄ-12740563628e601fgimlin-0ac82a1e1820dd21object»-af517d7f13e7c960 miniz_oxide֕㵤 -a2ba33c985785afeadler˯-3f6e9f8f4afbea6d panic_unwindի-13f3099d50c21bc6libc-d4bf50c8c1d6274e[91H3(@wUz[gkestd!È*l!rQScoreP=)pDjRa&YTu;acB Di_%݊ W=6bA7Urr n7lW2HxFUW&$  VfX>ja+9n *Ǥۥ= ³6z'* f 8,JbEpX$!1T]D*Xe*4|!طd*newf\ ۣ`&$T/ƪwUx?WL-Sup rJ-sampleaVw-Ca</R`):# $.Qp 'R1SupQ ]BJд{Ћ1 ind_sampleapI.o3Rq` $ SampleRangey^!m^5construct_rangev.D 8k5 sample_range8:.d#7RQ;1l:æ$ integer_implBC>@\$$ float_implS/^ hgamma<㺥7_~;Ig!jVMT;A7(SKoy;3oݸ&cFWf;gk3r՝^;ӳ)Radn,OF;2O1;kR$"; ~KAHz;ݛe\l'(6zJ; v{D3; F4.z){hz;t @ttv-FnewtQl\F{{;Ea,5 RU>z^Hnew_raw£CقC\;ʛ4zM4(aJnew_rawha5?d2F;3c9mW|t7LsampleTaN<.MRC$-pE;XN=*,o`OsamplemQmqPRsC Sd/kDP;F`~gzORsampleưf~U-l@SR{{Z[ob;!{;@g nз&U ind_sampledy14VRXHm=or;x u{~lI1X ind_sampleH`Y5bMUYRD9dc~W;a`8PmTrw ~[ ind_sample0(kq@\Rw|z"A; Ѧ7Y+^newjAGII; anG6=`samplenc:>uRWlaRT\{1g3; BmGvYa/c ind_samplea:$(, dRޔkh8&; i}MO/6fnewfE-mTQ ; ǎՠk"5HwLhsample|G L d$̘0iRp $avW;hKbk ind_sampleʔom&qbflRyY*"`;7XۖMjnnew-5r䝺\;b|jO! Mg!ʤpsample&ȏ6Lg@AqR0Kk`j o;߳ݠyʷs ind_sample2#gpHhtR8NpTZ}Cѱ|enormalE@6j]:o.Hv'˧CjC=v+~-:ߏ9#v' |EE=vr7 .v`aYE#SvPV7&f%6*>v=%$d>t hhv(#&:vkohl"&"QvUM75ÕrandRۛqR,欷Un#pdfȯp} 9S zero_case֦&M+';)/I$R;Xɲ+'y~vKmU/qqM newǻvkQ6H{7v_.SVI*Esampleo:_ӍZv)RC*p{]vXڲhx%ȧsAq ind_sample!BN&cRCRn%:/vYWܸ62".2+FnewÎGP?TzWURv㡬vY*Jl!samplep0hw9 ah-RtI ]X=(v}ݣȭ ind_sample?M$XIĐRۈyFpks exponential;ӓB<6gΦ$kb2F%^c֮ qG%&i'|@SDIKW@ct*v~UJ=VvkQ+X~LFh!T3.3uĮevR8nxo^^BzZovQrand[v~@ZDRUIWRN0^pdfƥzGJ.3ny zero_casejI$VuRR갗 $c?͌lV9FQ%}newOH)AP]zO{;[ʷsample>Éq[+4$?_WTR*@ko *ǰÊPw|` ind_sampleہS!!<}R*NLHTN_ziggurat_tablesD9,[ԓT){"sZigTablelX"*.r e+.Pd` ZIG_NORM_R~\w9[PX ZIG_NORM_X+PEv`Dx,.& L7 O@i. ZIG_NORM_F? ƭA^ي_/ Z9Y< ZIG_EXP_R f=aG@; ZIG_EXP_XNa aY eI"](D..- ZIG_EXP_FV"zTm36O Xk44|R!Sample*AIf)'Supportm仙_ۗ$sampleeMI" vX`R{{PQo5 .IndependentSampleFtd= E[HSupportJNG =*@_u ind_sample`/, K _b#RY'3 5M1c_Ǚ5OSupe*t 'nVrBÜ"פeSupL6FrtP)cloneZ [{NTOvgm $|֥e{SupGQ~hi{bAQsampleaHe r۟dx0-kRす܍ N.p[,Zޣ*SupNһCo*q2-L"z?$nK>9C׳ra[A MEMORY_BLOCKSՐ]j0`PMEMORY_BLOCKSIZEpe.ՃQō` MEMORY_SIZE4 I$8^ JitterRng0ʂw0G_ zdatal?74ۧ,rounds Ň ⋸b9&timer^bq塦֢h5\`c prev_time6Ұ[cJ last_delta,;B6[K last_delta2h Ax/nNvDmem_prev_index>4, ZdgbNmem2zDoڔf[= v ht=Tdata_remainingfE#/k6K*/jV^fmta;$I/I!d(`O'vvt{GED descriptionя#0Uy^i_C99fmteG\}+t;9Β)\?- % description* Q~ω JITTER_ROUNDSix:!).Fxn}.a„?pYnewE' `|)>Jnew_with_timer. BlP ӸG'e set_rounds찡-hND%!}random_loop_cnt5E{- lfsr_time'[`,%jataȅlfsr֯]ytϻSu memaccess+9GZZ'lstuckȒBXzYmeasure_jittery{.lƈ/SW stir_pool֞Hyz"^CONSTANT(/VH5+ gen_entropy)1λ,OB`i test_timerpk _ nz TESTLOOPCOUNT4AcoYn CLEARCACHE 74 D5GFACTOR"^2ɥ._lGlog2dz*KK& U timer_statsd$|щplatformlɞ oZ get_nstimelp,%0͡(ʻEAŊ<$Ä̮ N>[D>vd1/ black_boxvbLF9܂VTw,> xwP?Z2}6Dnext_u32y.4. *next_u64xV̡̅Vg fill_bytesVv?Rv٨ !WKI$ŭ  R^RyyosRቡ %Q&4TGKˊ.o q5;O7%hkb yNAl1 |1Mv=p*"Yvimp9 o['libcb(6HqfJd옕N(:`HOr.rdt NL0Eugc *9yޓ$\z*GUh=^lbmAO;%ATꮝfLrO8 getrandom 6-?쮂xUKDnY>Pwv@syscall<⮅n@ NR_GETRANDOMpp,H|Rgetrandom_fill_bytes4>^u?lqܿis_getrandom_availableFVP gOeco[wtdt(n C0 `HM 2g`k"ՂC! 90Zo %kVr,cu@NCHECKERNK%aer AVAILABLE `vɜ ! aL\9 U+#rմOsRng:D3B;opfinnerTyONC\ 'q OsRngInner4(N?1 OsGetrandomRngj <*yEK`F PfЋA OsReadRngm;2We[uDf'cp8[$ MG0]aȥnEųEyC"Y n|D nľnewͯ`f_.E73}[[next_u32meɷkSU;hnext_u64<=.< f fill_bytesqipƹwreadt\N( 0UP!i!f_EbO_km8.کl~ 8uf,"zB݀iz.k~Ӆ4ZDRf'FGuvnewkD: 8uš%R%R`k3mnext_u32 {g7S  g&'gM1inext_u64zii#-0 87s8fCVp fill_bytes[ѽ6.濥fill7)GgIOl reseeding)!}Ҭv1V/ n!g ʸaװI, ,l17\ˊڇ4DEFAULT_GENERATION_THRESHOLD1YC";=n.tg-&2aQORQFJyԍN\58RsdrlH`@;newY_ݖӫyreseed_if_necessarycP8mDT'|=3RH-Uj)~=oRsdr|8yyDnext_u32CJ!3x@next_u64Ru+[2 fill_bytesڪSt>vZFGn>USDY_F3J_,R|(;%D1TȝRsdr}P8n E&reseed*r$ 5 * "JlM from_seed% 2b5?q)ٸReseedero$\jRY7Bkreseedd?3!{e-PNKR7 w9 %reseed``|}ABeOK*஗8s-m)defaultek}Zh}l+\˄seqdZZ`6xl;6bf _ mت9~0&ܢ6 sample_iter=.jBlQTD[ި7I˶փk9NR Q@Y sample_slicexpENj 'RJiHq]T>$b_RGlנ_uVJsample_slice_ref47`Z9d'aH4&A YZRL'q;UQ``F_T5{1WHmHhR 92:[d-ssample_indices[#VthRO,ɯsp&ޘysample_indices_inplace(4SΣ%o R&QNr7S"Dsample_indices_cacheWk=⁶Ƃ RUdzchacha+Xx՟޾0| <, isaac3G<1O*CI )Ffŏ5Lhq"5s7=!1. rand_impls[uZƟ~nMEtkg&ϳ}\2c_n ~p!9{/e!R!`E5Gk`dHhOȏLj;)4randB?vVkvdsRE ?}G]h]c\͐±1nd18randWC,UjRJ& #R@? #\*^@rand4p"(joR^qߗD,&rand|a2"k,-R#F%0b*[!p|ኾsl96.randaǩUԓ2FQR%tS帑EY&ZRQZmq~rand?D2d-fvn0OR͌X|fziӱN!TrandZOy`[ ;&Rվa8P]\)MkNc)Tl;<_q-}rande}˕LsR*NPDr; 9y¬[LrandjA-:Fg\J}RH<3YDoܕĚf float_implsp_|(Sgb G\pݚd`H{randDc cVwW gmRڈl?0{' CHAR_MASK#B|VHLP( =G&f-xIrandT '54vrM~RlQZ Lˊcs tuple_implS{`naoG{ `\m_VxM]1Brand, =@,qdbR,h ʨ?Uޕz array_implf0>/p !xU!MeUi-TXpm_)d,randxoBxbiIQɾR#QT4jEYprng_$Bʢ~ թchachauMeFR"WLמ@OѠ׼HR&WPxO B\-Kz!ҙw32~v&G Ic& KEY_WORDS ӛ C7x STATE_WORDS>>$OEMPTYj(.to "3?Ȭw,`3 zHA:4 quarter_roundWeva double_roundkl#}s0& v-+Bi3core\z@7IO ё]!(A) I~s&DOO#Y rЇ:}3 new_unseededQ~ ]]x V set_counter v;PbQginit3z`U+tq #W0.>I+wupdate1m:NS%z[U4ށ8next_u32~R:E.m$5m'vai{'a&fDUF"S@zRBreseedSѭYS ͱ; װ!;i  from_seedzG.oފMOX ;LmqX randβx.) \RCx5'd3V*֔ [ű, pPunuPꈣ}isaacFgӥ*t΄&_hFBG4zu@Aq:i~m7eennH?2}rr qN֙2nZ,o;XRUa.[J=k~D0:,yW r3尔xw32[w$(B RAND_SIZE_LEN' k$ѧ RAND_SIZEso&/r6d:VRAND_SIZE_USIZEӀn'׳ömEMPTY*KIoԬwC׼$ }(hX  P2$V%K.U]Reo!D1Bh  new_unseeded?|/>init޹>bºɦ9mix*ؾľb"l"memloop>3Q8?H6է!T]4eisaac>GmOǠwǹMIDPOINT_Rѫh)oindՊN \WMU26rngstepp{r/NErngstepn=hM 2';ph MOW!5;ϸ%;zoŖujZWclonewL6Q('z| .i-],2_AyInext_u32? _Z45*tgٹsH+'aKUGq[&n"reseed%ҫ XھPhnK from_seed2>S5<KP~Giwٻrand0z5i#R7j@ X{Zdufmt6R(uXZ7isaac64W7}xSD3ڏoBP[2*Sg1ZCk"LzL->L՟3Oz8Y} phi\iŮ8ary${*s wR@$wۧ|>f` 2=y@e MbLa;nFw641Y_ BoRAND_SIZE_64_LENAf޳TMьg RAND_SIZE_64_-7}PEMPTY_64?gb$J6 O /[L /DĂ%c?bL9mRajN new_unseeded}V"ǵx֡>init`}TbђuinitpڨüDDb~tx.mix7K?L뤏,iomemloopU|V#I焝Qўisaac64 si]wr.KMIDPOINTJTdym ?MP_VECNڔzRwu[L pCu@dFPRgindK-X>0ZpE rngsteppB{9e|Nrngstepn{(:E 2y6{FKɋhclonewRa=:| *7?**$jnext_u32,lXR Ynext_u64,nԖּv6`TwoH a5--k'a.x옢+"2ureseedfnEG&.LM8.qf from_seed "C|maڸ(:V#Hek'VխrandjPQlϩ`LR/W'${҉[$fxӑlq}5fmtuw\a1 xorshiftTR&i^C|K/Y0:0Dz aZ?9ïci E6͛/vGg,=op C-N؞=9~ T new_unseeded GHw;71ɺzZJD\M߀next_u32*X1 ۬ܺzu4>֚rz# D5# MreseedTsݜ *b 1'rvʿeϔ뮹! from_seed ;Ksh T4/&'+ K]p׵VrandM%& i]ި$MR584J+k4q mxy M^ `\_ضrl=4}O큺HRand=b,4ю98rand6u?H"؜8oJ1Rcj䞋IRngBf^nYnext_u32ɚ2-͇͔&next_u64x!|gdWUpnext_f32Ԃ3S,@Or UPPER_MASK#"q&-H LOWER_MASKN ڋ"sxnext_f64-6TgmD`J UPPER_MASKT (cɿԸ LOWER_MASKxl | fill_bytesZ4*gD>ᅦgenMΈFU~z;TGrQܣkDgen_iterGM<+L'am 啞5sET6Kw雸3>M gen_range#(sjc}*=T:)-yfAF^fbgen_weighted_bool+DGie'R:gen_ascii_charsZP//ґ'aۅ~GV< YMLchoose1Đ1):*PS'afEr9T Tu3I)T choose_muteg[pvhNcs'ak,IMݾ}IT8?tfxshuffle ]%$nA!U^u'T C'9W(}RU2o%Щ'at(,,W:R:]Ee\1·Xnext_u32=\?+Cnext_u64m%7|cgZnext_f32suZn9htnext_f64FCx}D fill_bytesL=X 4RbhȌɃMnext_u3299Uj4IIAPnext_u64I d`~next_f32sm,~next_f64󶘨Nw{aؚ;;p fill_bytesXlE [QZ1dTZqh#~ڠ'a e!Й8T y+PmF{eQR 3 FuItemZhv  nextWnO.oQpZaT5~'a[Q'%v8JƤRL`*Pk<Itemk?}nextiovv`y?cZyGEN_ASCII_STR_CHARSET.RH-c SeedableRngOa-NySeed-u ko,F0reseed/%s from_seedZv@[Em1AsS-WnewQnvW8 !aa)h5c^next_u32&n@bʷnext_u64Ti&(i_YLYWQy 0fX)'a3)D a2.Xreseed➬tu from_seed ) bʒweak_rng/*Y!EjEi G%tkI`reseed6g{QM]rTHREAD_RNG_RESEED_THRESHOLD&a8D` 7ThreadRngInner4B|o-"S thread_rng o(HBIy-H7#{Px}ᳩBH]'Inext_u32Խv(U.Ԇ3next_u64D 05su fill_bytesTZ|hrandom$: Tw4<|sesample/`a;>TmҲ'u[I̪ !g FR7 n;J zӈ FcPB{/$Range&\c}>JXmʨ3:2;计lowe5n3ޟ)xrange`a \ .O\ accept_zone ^ >b_WA$U+Kb&3̓HX>'g/t?K%fmtCeʌƔw$hep᡼jXI[6 ׁ;$NOY c51*'XqXM [1:clone,@-*$,G$pThǗȝconstruct_range2IIo!{wA{, sample_rangesbӈW_:/mDXRbӴ =-tz$>4̀\;r}construct_range¨s$}:q笆) sample_range O)AOny7_R[-Tyz!h@[$MznR)construct_rangemT?bL sample_rangeW^P"GF|3UR}ΥGFIQ5\W$ 9`EٙD)%5_Q=construct_range] ˊbeuw 2 sample_range?/mynoR$gD8j$ HpKׯ񓮋construct_rangeñTBTz<& sample_rangeW߈bxJx-OXR0I޿c}n~qD$ e/7KkUyconstruct_rangeTώ%vf '* sample_rangeWdރ*R^/^EY~$ ߳pikBuconstruct_rangeFT _jjP sample_range/DՑqԏR2^+oM4ab+0b$ Z48&5ͮ[)bDž-<construct_range%i<@ sample_range6՛&^٘(R a&yf`$C-'+5r6 dHconstruct_rangeOSq]I=~ sample_rangeot%Re; jk0$,چef&construct_rangeՌd?C sample_rangek<+Ȋ=XRRVe$Adjv?'6$D: y fFLBconstruct_range\S:t& sample_rangeM$ߚ` AR4O^nNd{$@q}*cVconstruct_range.9:ic3LP1U sample_rangeF܊%<~esRk`g|);GammaI6<)ja;zrepr1OeV}|;!SWۮF5Ifmtck?Q;L4+"'jG;CZ8XZclone* cI DʚKP; GammaReprWjI}y)LargeX_As gD2y2ZT$60( v9ܯiOne~rkYmTdq8ݬHY4Nˀ;٤r"0 oDhYZǗ/Smallk4!.>u6ڼ$)0jc(5qЧ;QCgGoU—fmtՌLċIN y;a5 I֝=;Mo_{kccloneN:,~Q;GammaSmallShape: %X inv_shapeN1\3> large_shapeI0v.Cٸ;i3D  4[xKfmtAa_rp)IW;/,.e>l=P;PhjFu(clone:iɽhk[[';GammaLargeShapej1_"kJscalew{LکRnWyc\K 01Q|dݲp/TZEN;?ٜ[p?hEՋ8fmtRs=!9vj.K; Rmez]M[;_*7ĉs;|cloneQQ4}:kf; ChiSquared$Waf)c~reprwsK$Ŀ ;ƝW(DUu_fmtr)Q S6(Ct;UxGKDfus5 ; Ɋ% clone*ܴL;ChiSquaredRepra45  DoFExactlyOnežu(oׁH+S`E l~uDoFAnythingElseɉdګ: vU9;5F}606I{_-I:;! neaJafmtd*1J53ֈ;"Q3y~~Đ!p$;#j$ԕ1lU)cloneH6b\;FisherFi[_DI_{numerx0VvN/Qdenom}#F3) dof_ratiohiGUrTۘ;$_).`^CF&fmtQYTWm}jh;%q:exJgA;&gIt1BR7R-cloneP09W/.Zm"yR;StudentTo>Xg\^7 Z }fchiլlV3c{Edof,]hD;'ڼXE iUifmtl5c;8Ӈ6 @;(̤>iN;)֊qt3p%Đ clonea{B#lY4bWmvStandardNormalŔ-7'Y[yZ15g5m01 G!v~h^mnL uOCfmtObɰvx}b "v 0xM[=clone@hnu>m@)vNormal}ptㅁ ѽmeanccgx= e_7Ystd_devnThE8j}.k<7v NHBtXC@fmtvUz~?W9v  t (v ! =WAk XYclone\ũ;ID 9v LogNormal"$_v mnormDM^!,"_fv C m- I 8ifmtZy͸`ȳf쳈vo? g4OHvϦnP9k͠nclone5촥e wC%iExp1 ে탠#@i" !%WkQ0iQT- ﹔2.^-C/fmtD q; _]|0 Eu xU ~@i#[T clone5F ^e'ExpZW3,le\lambda_inverseqe<_ m\ (S'$R2^0(Z©fmtrTe"iaI~DoɻeO[3 %6;$eVÁclonesxZVA&o RandSamples ۖcb#kSupRPfu_markerC)yyavv8@h?t<SupLZ(vlsfmtsI4ΎWpW!~WeightedO,J"~O)T`_r~\;*!mweight;.{[5ŀitem仅qh* >vh!A݃JT RJj!"Afmt)T@F6v T=7T?XCp7T IWRrgk—>"cloneDG*fAd4~ 4 Ro}gT2q.Ɣ WeightedChoiceHP;(RWkܣ'au__|I[ŤTQ7SwzbPitems:wX5&;o`) weight_range3B]^ft u$8dcVM__Nonexhaustive'Mű@/_TÔE'y j =+fB#A݈QiRgb>assert_receiver_is_total_eql6oh H0bhAE`kQVw ?Nw~=R3eq 52!G T+ؔs i?*CYcloneB+2x ;蘭c+11qڬ!fmtA l=FXhwawUReadRng`E{-4R[gl)ereaderQnYZH& e#z;R#%fgRxLsvm}+scfmtmN3޹9"jCp ReseedingRng% nM'1Rl嘍4t-Rsdr׉8#k1빪@rng9Lgeneration_thresholdCA#4/p͐;bytes_generated3nGReKreseeder&FF3鍹WP#9,-)LCR(?>YGRl3KRsdr1(,%3uءfmt!ʧaYlh= :ReseedWithDefault{^heҷKP] [YCB="6mP^2ZLaI|hfmtDC?MM0׬Yo?%A_!~\ũHXR$ʙ}clone` O۝Qj$>f64_rand_impls#,:_osizMe&m,]%A7>~PN`kd$^w:JJ4f{VLSCALElӐ+"$K=KwwRq/lxTrand#lЙťR6l/!>IKLsoW4IYRZHrandvol/#^''̒ 9R_ץs6,&DäYlLrand&1hZw)f ±R wI^ֵf32_rand_impls86I~G%*7<1  %w](WBC\#@}͑yERxֺLrDiݍፋ.DD{yNM^t9SCALE9Kym ڃ]:I @rand>7[<Rx6:o`@BXQ;̼YAϲ)'rand~f?kVE1RtE<ís="c ìrandm_)O-|X#i?R'Flc _߮u-ܲ AօMe(j"irand=ÄΎYR`_T'R0|4_ܼߛsz:S;.3WS@^A0eLj"浈t BWQ+.`晞randWW}m@=RA#7#iO=J`s\fV.ANj$K}B׷=iNuA OCk]4|_rand]h--46VR\<$>NYIS4Q*c(A.0iTaEBNԃCCh$f7hD8O42)@j~Arand*/Ba&37]Rc+OR|;j!0[y, A6S~̐B1ɒ1'E^Q_C=IZ)Hc:Dg,6vSĠEn\y($t(randg>AHƔ9Rsu!؛ Q{G5clg8\]AWBHHkg|3Cv WvNDM497>?zE<,a3a=đPFm`Q0#Aԍrandv'SJ2I[*GRMo m{E9&ՎĔM".;ǙAz$NO}EBS>MTեÖtCʍTF1N4DB"ƱlY4EMUSڪ'y_Fދ7֭$jG0N2"randf|<3xӆ R"?sjޠ=B{NMA8c9̾$>BB\MS&Y'kC򻐑vGH FؙDA;R|K'NEsp5Pg%*V{HF冯E N=!Sr@G%uoߴ5!(9Hd7=܍ 6rand\NF6?R3#y4Q!DIm@q$ JTtAbYp_OB̅cwB~n@_C%mP#( Dn4&RtS> _,WEɿ Lxܶ(|F=V6v{;$FG'2ehpCSH5*D >1`I3;k\&>lFrandshlTR=;ٿ jZBd PND{U) DiA[[4h&!|Bitk(7RӋ8C3y-DgDG̒aB3ZVY E½_A-FoE^\]^4G̒FSOI|H(4vt`\Ԙ>fLIgDL¦ksZ>[T\6JkQʉrand+SLSVYxeRq.Y#wCrOFAU{mUJeDoB1pT͑DZCKTn^ۛ*r«lFD^бd|dEfwIxl F5rum`ّG뀩 lyu[H/$YQ<IoV| x:vWJ/>O =EK☶#n6OYJ)rand}djB7t-mROn|8s+cGvX3lAc{FBлXAa7 ~CD1Y~X*D)KbJv9UE_E2D,/@'Fu2Qh 8<<GǨQ5tTKH嚿?<v4$Imq7 _1J5-g[E!Ks~m~DL"s2 ^o3aMUrand?C0ZJMR?jUG"W{9u) W,+Ǭ#5Ũ1Ssǧ-AѝjT5  +CW+;`9erandi~t_RV07Q}i  pXgF~:JJ,[Uhn%TPڱ W6c70 a!ڂ6גeoۓrandGF(#=AИRd1xo<̴(cz T0uvr;` jNTh 'L"0q(:rando^"egXBB R%p )"T ENY=9݆; ҵ%|t+_BD< TNɨoᮉ qlB'> randjuI+Yc>Vz R9++#vi\X/`wV  yT +{!G\( ]|] TaoЯQ7( >DB:A rand̆.|Ez67 Rܘ$L.H PmT+rGhN"#U_{9B< hnO T`$5( ZXwh"wF4 rand|rk&bg RKSsnSB T 1vlQ}\fx$|tk%vL26 TCE_1՚֊:a UQYt*͟ randM+A=7 RRf.J{OVo q{ }jy=M%} 2lm T=6J@zb'e vbNTr!N rand0=D?3 RYxN F@s t|ek&NVjإ}oU TED2Ѐg슮\!  6 dL"mW$ randh_t΃J%9 R6rEDl TH֔` 8 cf%VLV'+MPГZp&0-a{  TAbN̛cCC N"J͢ 0Ɨ rand'D ˾,` Re6Acϓ,y w (#wl+? T',;- Wae>(0- rand[ϏH[7rՐ{6 RyTHf18] ~7X@])DX T K4ř ҄>Ǒ>Ld rand]ip0/ Ԡ} RՙW{Jk$ U +]p**~}ަTq[5N] B T>҉NA3 aͯ{3 TۂoA randbja]8L(c[h R\8)5(ۋz}s9 ^ùE!/+NM_DzAL TRĕ*C U 'VLe]ӏw\ rand Fo.yv8 R^t|.`F  ,X^^ TmuU{v1; 1_VV randC'E Rcˈ1|j[٦ k8qvH-gJ1,k T8S\x̭<; )-SzG rand9B!d% RLVM0d m=m>(@7'.c]lxA Vj| TBHvqy nH{(]щ randnmԑFw'w S RJx8$a1+O] \JR]o[2/$s Q ThO 1B:C>K 3x1n33  rand#m'NB] R;ΐwCL V(ɋ7QսkT0/ԛ0Xl Tlsfx Fn rand ̐kR~K R=@qvOˠ  {⸩H l1ݝ`4H T#[xa (p'- {k.ۈ rand˜k4wB R{F4TH +  2Yh]-KQݟL T"X\=i{K^Y _ >=$lܷ{ rand]mȽM RA!2[J? 5GN73bQd3tR'-|0EF,} T'h ^ӓ1 lMwkmL randqR3;G RZ"-@霤VFpz cpo32c wx(&+c6Hf6Yۣ;"#`տ{ˉM Isaac64RngM3JaLL=(p cnto~YP2֚+ rsl]aaێ;`p >&C memf0lZH z 2cቹ=l]b aI)z4-Dk) b8.nwd` c=隣 e;a&UG_.H?.? mAoĔ -㌙y XorShiftRng,F1 An>=f xH ˏwC ydZ0-jc*  zRF-=b w ]HۆDqBy{}V3K> fmt_ǹTY͔$ZL"V~Y18o clone mgկoXBO0TdG\ R?p$^ GeneratorpmQi|gC.qJz 'aʏbkWu* TL*blL Rr͍jC@Z@ rng-Q V\ _marker·Ǚ7r_W 0>A  'aXpFĂѵPa TkgDUcI RbV^xP~ fmtO닗'L 9hAsciiGeneratoriZ::K{ 'a잱X؍u%3g%0Lq%!j< &1H~비Ӿ])&_9?L(QAl^,vU((XțѶ |:V)QiR@)Z+RJ U.A ?m,՚?b;.ܣ,fS@ڔΟn,ͩ4 jO@w&ʖC!;_A|)f3M>Amv'ʢl>C?!J P&0KC-9sGKjvZGDSԃw{ ǢnD[U n{J9ENbT` kE*8M]#x˭8nMqvplxM%-)Y7rqDyM4@GIn|cyH5 9/KU:W&@c>z€quC:xS2gzzt)G -m ~| x]H~j[@1|"OPމ/N`pQ0}.@M/$@r}{77hl~lf:~{1 7`\BZ)֘a`rGPtX&YMc䱃u* _GfapS1"C|z*iA-e:N|Ś#wnkGN!m\ ƣZIUVM>A%23i  b&mR MMTMy9Oc{raڭw~ZDC=!C;iE8"26]@%zE霊o&t$endƒ/G{ƍ c|5|6=*u_?D74?㑣a$~{W=_؊ ȿ\Whu h#(Fz3[ZiH+q}5׮cxbOh;+^㭞oF:I b-~=Kx;pխӹ%枇D;w  O%rEתBR*6{~Ҁٹ{ӑ8el@~A6DmE1}`)[aTD7~$Q^ˀؤ.*y<6.pߑ%V/tm]Ԏ+Ij[sk.Hd=G!-Ux2ڦ3*@DOF0AC9(_zK FLVۿq, *Q3h6FϹ\05X`&QB/B212'i Y]xFe Ay6.j F!57CabgA K?ѴԜb9kKC NK)iNjr؃z}PVw؄ja\\`\0Bx`0Q'^M /0wL ,HmNaj:!bsT($#{HK+l4Cl/„1O|]f8Ͻo?fbi!1RN>yܶ=wh{7A$̥4U&r)L?z*E&9 x;U Y&[,oJ-Xq@IToߕM[7ꭻ-5PvV3wکg?Pn)sɊsb[p^) a UA!!+s8t`E4G|`m:% 8ʜF_!Vu9ʫzbA{]T r==6Mšn#Կ~3?Mdh2/'=rՏ9qq,5HHq'"=~A@2#( s=A; |h)jJD.ue7@Q<iGRoU "hXibpW܊xQ\'#9GVA*Z󅀥 Oȗ) p61lo{ZG YǗfq H | ws!.9[:h-[?Z1:.8D'0J&:@E[+Rg)u| uǭ,MX'䬭e3B.xL!bX.׸\L*xz.9l"yG@߸-웱gGQWGZfjJ)^ 2]A4C2Pއ1=8^pݶ;OCfLsJ|,Tul1KCT_Xj!Fָўq)UU^i='p<ʖƦSeθ-#.E}CaΖeBf{,bn\j(X6|".Zw.7=yeXC}BF |//Dw5%h%OYLI&cB&#OݥȖ ^8pZ\Q:VU?IqXUIҝz@kM߀wódOc9pó E knCE¿yn6r>^q{u-ңFيv̟Am[U :Qw Ƴ7g6]5𢎊\KTu\?fBN`3 .?0PؒD}mZ4 1]BVKsC()`.C See the `distributions` submodule for sampling random numbers fromF+ distributions like normal and exponential.. # Usage G This crate is [on crates.io](https://crates.io/crates/rand) and can beJJ used by adding `rand` to the dependencies in your project's `Cargo.toml`.M ```toml  [dependencies]  rand = "0.4"  ```   and this to your crate root:   ```rust  extern crate rand;  ```   # Thread-local RNG  G There is built-in support for a RNG associated with each thread stored JG in thread-local storage. This RNG can be accessed via `thread_rng`, or JC used implicitly via `random`. This RNG is normally randomly seeded FF from an operating-system source of randomness, e.g. `/dev/urandom` on ID Unix systems, and will automatically reseed itself from this source G( after generating 32 KiB of random data. +  # Cryptographic security  J An application that requires an entropy source for cryptographic purposes ML must use `OsRng`, which reads randomness from the source that the operatingOH system provides (e.g. `/dev/urandom` on Unixes or `CryptGenRandom()` onK Windows). L The other random number generators provided by this module are not suitableO for such purposes.K *Note*: many Unix systems provide `/dev/random` as well as `/dev/urandom`.N; This module uses `/dev/urandom` for the following reasons:>@ - On Linux, `/dev/random` may block if entropy pool is empty;CJ `/dev/urandom` will not block. This does not mean that `/dev/random`MM provides better output than `/dev/urandom`; the kernel internally runs aPM cryptographically secure pseudorandom number generator (CSPRNG) based onPC entropy pool for random number generation, so the "quality" ofFM `/dev/random` is not better than `/dev/urandom` in most cases. However,PM this means that `/dev/urandom` can yield somewhat predictable randomnessPG if the entropy pool is very small, such as immediately after firstJK booting. Linux 3.17 added the `getrandom(2)` system call which solvesNM the issue: it blocks if entropy pool is not initialized yet, but it doesPH not block once initialized. `OsRng` tries to use `getrandom(2)` ifKJ available, and use `/dev/urandom` fallback if not. If an applicationMM does not have `getrandom` and likely to be run soon after first booting,PL or on a system with very few entropy sources, one should consider usingO! `/dev/random` via `ReadRng`.$E - On some systems (e.g. FreeBSD, OpenBSD and Mac OS X) there is noHI difference between the two sources. (Also note that, on some systemsLK e.g. FreeBSD, both `/dev/random` and `/dev/urandom` may block once ifN$ the CSPRNG has not seeded yet.)' # Examples ```rust  use rand::Rng;" let mut rng = rand::thread_rng();% if rng.gen() { // random bool!E println!("i32: {}, u32: {}", rng.gen::(), rng.gen::())H } ``` ```rust + let tuple = rand::random::<(f64, char)>();. println!("{:?}", tuple) ``` ## Monte Carlo estimation of π#M For this example, imagine we have a square with sides of length 2 and a unitPL circle, both centered at the origin. Since the area of a unit circle is π, O we have:   ```text 6 (area of unit circle) / (area of square) = π / 4 9 ```!!M So if we sample many points randomly from the square, roughly π / 4 of them!P should be inside the circle." "K We can use the above fact to estimate the value of π: pick many points in"NJ the square at random, calculate the fraction that fall within the circle,"M! and multiply this fraction by 4.#$# ```#5 use rand::distributions::{IndependentSample, Range};#8$ fn main() {$( let between = Range::new(-1f64, 1.);$+% let mut rng = rand::thread_rng();$(% let total = 1_000_000;% let mut in_circle = 0;%% for _ in 0..total {%- let a = between.ind_sample(&mut rng);%0- let b = between.ind_sample(&mut rng);&0 if a*a + b*b <= 1. {& in_circle += 1;& }'  }''+ // prints something close to 3.14159...'.= println!("{}", 4. * (in_circle as f64) / (total as f64));'@ }( ```(( ## Monty Hall Problem((4 This is a simulation of the [Monty Hall Problem][]:(7)M > Suppose you're on a game show, and you're given the choice of three doors:)PK > Behind one door is a car; behind the others, goats. You pick a door, say)NH > No. 1, and the host, who knows what's behind the doors, opens another*KJ > door, say No. 3, which has a goat. He then says to you, "Do you want to*MC > pick door No. 2?" Is it to your advantage to switch your choice?+F,L The rather unintuitive answer is that you will have a 2/3 chance of winning,OJ if you switch and a 1/3 chance of winning if you don't, so it's better to,M switch.- -J This program will simulate the game show and with large enough simulation-M: steps it will indeed confirm that it is better to switch..=.F [Monty Hall Problem]: http://en.wikipedia.org/wiki/Monty_Hall_problem.I/ ```/ use rand::Rng;/5 use rand::distributions::{IndependentSample, Range};/8/ struct SimulationResult {/ win: bool,0 switch: bool,0 }006 // Run a single simulation of the Monty Hall problem.09; fn simulate(random_door: &Range, rng: &mut R)1>* -> SimulationResult {1-+ let car = random_door.ind_sample(rng);1.2" // This is our initial choice2%2 let mut choice = random_door.ind_sample(rng);253" // The game host opens a door3%1 let open = game_host_open(car, choice, rng);343 // Shall we switch?3 let switch = rng.gen();4 if switch {4, choice = switch_door(choice, open);4/ }4 4< SimulationResult { win: choice == car, switch: switch }4? }55J // Returns the door the game host opens given our choice and knowledge of5MJ // where the car is. The game host will never open the door with the car.6MG fn game_host_open(car: u32, choice: u32, rng: &mut R) -> u32 {6J. let choices = free_doors(&[car, choice]);711 rand::seq::sample_slice(rng, &choices, 1)[0]74 }88? // Returns the door we switch to, given our current choice and8B5 // the open door. There will only be one valid door.880 fn switch_door(choice: u32, open: u32) -> u32 {93# free_doors(&[choice, open])[0]9& }99- fn free_doors(blocked: &[u32]) -> Vec {906 (0..3).filter(|x| !blocked.contains(x)).collect():9 }:: fn main() {:B // The estimation will be more accurate with more simulations:E! let num_simulations = 10000;;$;& let mut rng = rand::thread_rng();;)( let random_door = Range::new(0, 3);<+<7 let (mut switch_wins, mut switch_losses) = (0, 0);<:3 let (mut keep_wins, mut keep_losses) = (0, 0);<6=< println!("Running {} simulations...", num_simulations);=?" for _ in 0..num_simulations {=%7 let result = simulate(&random_door, &mut rng);>:>, match (result.win, result.switch) {>/. (true, true) => switch_wins += 1,?1- (true, false) => keep_wins += 1,?01 (false, true) => switch_losses += 1,?40 (false, false) => keep_losses += 1,@3 }@  }@ @6 let total_switches = switch_wins + switch_losses;@9/ let total_keeps = keep_wins + keep_losses;A2AB println!("Switched door {} times with {} wins and {} losses",AE: total_switches, switch_wins, switch_losses);B=BD println!("Kept our choice {} times with {} wins and {} losses",BG3 total_keeps, keep_wins, keep_losses);C6CI // With a large number of simulations, the values should converge toCL% // 0.667 and 0.333 respectively.D(9 println!("Estimated chance to win if we switch: {}",D<: switch_wins as f32 / total_switches as f32);E=8 println!("Estimated chance to win if we don't: {}",E;5 keep_wins as f32 / total_keeps as f32);F8 }F ```FFdocFFH html_logo_urlF F9https://www.rust-lang.org/logos/rust-logo-128x128-blk.pngF;G html_favicon_urlGG%https://www.rust-lang.org/favicon.icoG'G html_root_urlH Hhttps://docs.rs/rand/0.4HFHdenyHHH missing_debug_implementationsHH'      P markerιȹ RngܹܹRandRangeGamma ChiSquared  FisherFĺĺStudentTͺͺNormal LogNormal  Expʻ P$ Sampling from random distributions.'F This is a generalization of `Rand` to allow parameters to control theIE exact properties of the generated values, e.g. the mean and standardHC deviation of a normal distribution. The `Sample` trait is the mostʷFA general, and allows for generating values that change some stateDC internally. The `IndependentSample` trait is for generating valuesָF" that do not need to record state.% !"#$;vػwڨmè$wڨmè$Rng$Sample$IndependentSample$л' Generating numbers between two others.ѧ*% &'()*-15 $,XX++ʥ5ʥ ʥʥ lowhigh: Create a new `Range` instance that samples uniformly from=( `[low, high)`. Panics if `low >= high`.+ ,ʥʥʥĥ** ʹ$ȴ/SupSup..ʹ5Ҵ selfrng$Iinline  /R  -R00- ߵ$ڵ3Sup22ߵ selfrng$e 3 1R441۩ > The helper trait for types that have a sensible way to sampleA@ uniformly between two values. This should not be used directly,ȷC# and is only to facilitate `Range`.&67Self55Self˸˸lowܺhighɺ91 Construct the `Range` object that `sample_range`׸4< requires. This should not ever be called directly, only via?: `Range::new`, which will check that `low < high`, so thisԹ=+ function doesn't have to repeat the check..̺ 6­­­­55rrng>> Sample a value from the given `Range` with the given `Rng` asA a source of randomness.λ 7­ ­5R885۩Rng;Open01 ;Open01 ;StandardNormal;StandardNormal;IndependentSample;Sample;Exp;Large;Large;One;One;Small;Small; DoFExactlyOne ; DoFExactlyOne ;DoFAnythingElse;DoFAnythingElse;cfg featurestd߻% The Gamma and derived distributions.(<=>?@ A BCDEFHJLORUX[^`cfhknps;Gshapescale; Construct an object representing the `Gamma(shape, scale)`> distribution.( Panics if `shape <= 0` or `scale <= 0`.+inline  GFF;Ishapescale; IغHH;Kshapescale;Ձ؁ K»JJ;lMselfrng;̃Iσ MR  LRNNރLփك;vPغغselfڄrng;ÄIƄ P غORQQՄÖ́Є;vS»»selfхrngׅ;I S »RRTT̅RąDž;VselfʆrngІ; V URWWɆUĆ;Yغغselfrng;ӈֈ Y غXRZZX;\»»selfЊrng֊; \ »[R]]ϊ[NJʊ;Ö_kʗ> Create a new chi-squared distribution with degrees-of-freedomٖA `k`. Panics if `k < 0`.Ɨ _^^;ޙqaselfrng;I a `Rbb`;Кdselfrng; d cReec;gmn4 Create a new `FisherF` distribution, with the given79 parameter. Panics if either `m` or `n` are not positive.< gff;niselfrng;٦Iܦ i hRjjh;lselfrng;ӧ֧ l kRmmk;on8 Create a new Student t distribution with `n` degrees of; freedom. Panics if `n <= 0`.Ѭ  onn;oqselfrng;خIۮ q pRrrp;tselfrng;ӯ֯ t sRuusRngvRandvOpen01 vOpen01 vziggurat vziggurat_tablesvSamplevIndependentSamplevcfg  featurestd& The normal and derived distributions.ܿ)wxyz {|}~v rng v  Rxvinline    rnguv/inline  Rvmeanstd_dev> Construct a new `Normal` distribution with the given mean andA standard deviation. # Panics  Panics if `std_dev < 0`.inline   vmselfrngvI  Rvselfrngv  Rvmeanstd_dev= Construct a new `LogNormal` distribution with the given mean@ and standard deviation. # Panics  Panics if `std_dev < 0`.inline   vpselfrngvI  Rvselfrngv`  Rȼ RngRandziggurat ziggurat_tablesSampleIndependentSamplecfg  featurestd The exponential distribution.!rng inline   Rxinline    rng_u0inline  Rlambda 5 Construct a new `Exp` with the given shape parameter8# `lambda`. Panics if `lambda <= 0`.&inline   jselfrngI  Rselfrng  Rؼcfgؼ ۼ featureܼstdּ257 (  3.6541528853610087961ڦΆ@111257׉ ̉.. ҇@ڦΆ@@@Ҋߡ@˄@᪄@ӧ@Ëۦ߅@ŋղރ@ۋɃ@@􋨥@@ͅ@Ό롢@†ۈ@ڲʚ܂@鑕Ђ@¦Ă@ƍ丂@܍̝@𬧬@ܜ䙙@ѥѪ@@ώЃӺ@ۘ@׎@ؒ@ѧځ@ҁ@ݏ鯢ʁ@ڒ@إ@یÚ@@А셦@˗կ@ٻ̷@葁@@Ñ@ّ@߿@ʳ@׵@ں@ђȦ@ܓڀ@ĬՀ@π@ݙʀ@ēĀ@ړ@̚@ۨ@節@ƫ٪@͔Хҥ@Ӡ@ڛ@Ƕ疀@@ŕ壝@ە򾔀@ξڃ@㈜??ñ?Ζ쥤???֨??°?ܗ݇Э?ܸٔ??܆Ƀ?Ǩ΋?Ϙݦ?Ȫ?ǯ?͔ə?ͮߦ?™?ؙΩ?߁?ԭ?㫺??КѪ???ͷ?ڋ?Û߯熉?ٛʎɻ?ٶ?ܽ?ў?ۯ?̜??Ϗ??ޓζ?ĝꌏ?ڝ?ɣ????͞?귢?퐽½?是??ɸ?۟?ȧ??ፇ?ˢ?Π?ڌ?鑫???ᩖ?סޥ?Ŭ֍?́???Ϣū?˗܉??Ӭ??£ã?أꬼ???Ş?ʢ?ˤÝȡ?ܚ?ۥ?ރ?ы?å?٥Ūٷ??ŏ?̘??̦?ب?ءߩ??᱁?ɳ?ڧЬ?ޤץ?ꋚ۞?ޗ??ͨ߉?܂????ֻ?֩ݬ?֫?궘Lj?я?鈸?Ϊȭƞ?兗?ߕ?渜Х?͗?Ǥ?׫Ï?׌?ʩр?ܑ??ʬ???؃?¹?­Ӕ?ح؄ٻ???ƃ??ˮԝݓ?䩏ȋ??﷊?٭??ٯ˾?﫧?曓?Ȯ?Ϫ?̰ۋ???ʣ󟙵?ũ¢?ʏΏ?ձ??ڣȰ?薶?ɼ֕?Ͳ̘?׎ك????ɬ?ֳŹ?ڈ?ȅѕ??Դ?ɴ?ƀ?癸?֮?򱳷??׵?ׂ?㥭???ʶΖӠ????҉??طο??销?ڞ?̉.̉. ̉.257׸ ̸.. ҟ??Ĭײ?׳Ýâ?ҹȍէ?Ǐ?̢???ź׿ґ?ۺ?ց?툧?ݵ??λ?”Ӕ?ݵ?ܭÄ?丝?Ƽ􂳼?ܼ٠?ϸ????Ͻ䜛?Ɂ?ӂ?ɏ??¾?ݾ?˽څ?˳??ҝ?пɇ???̴?Г?Л?퀔?鷰?һ?Ȗ̋?Ǧ?کՕ?͜?????­???˧?ͻ?݋?씿??Į??ݔߜ?ћְ??衭?דɂ?⨁?ӎڕ?雱??ӭ?Ѥ?؄??Ɓ?ڑ?ڭ??㷧?ȑ?衉Ô??Ѯ?匤?Ьֺ?Ԩ”?ˌ֪??ϫ??ٷ?߭?ޒ̱?Ŷ?ΞǬ?ޟՇ?例?٤????旲ǂ??èʊ??刂?ؽϸ??⌒?ǡ??Ւ?޽??ꮶ???χ??ў?Φ?巅?ꔝ?诒?֡?燪?ټ?׉׆???øԮ??Β???ܛ??Ӈ?ё??ʰ?͙ݓ??????Ŋ???ٹ??Ƞ?ӞՔ?ʣ?Ѿ?İմ?׷ғŰ??ΕƘ?б?dz͔???Dž؋?넞׊?ջ?Š?ᝡ֕?կ?ҟۻ?ӎ?ҶĞ?⍯??ٜ?¦ڳ??޹ہ???ϛ?ᮤ?蔭??ʑ??Ӊ?р??߀??̊?ʯ??ҕ°??ߦծ?Ȫŵ?Œ믟??Ȑ?޲?ڪ?ľ?Ǜ?ј?צҔ??󖗄??ؾ?՗???暥??܂ɤ?߫©??ޥ?֏?׋?߼?Ż?ɗ???Ѐ?´?ԕ?Ԋ?雞??ꈻ?㊓騤?Ǘ?ﯕ?ƪ?■??֑?Ӭ???˚?ź?ŗ?㲠?똸?ץ??ˬ??̸.̸. ̸. 7.6971174701310500770˒@000257 .. ûɝِ@˒@@@˷@@̪@ҧ̋@Ҋ@У@ᦐ@@Չ@Ҹ@զ@治@@օ@ջՈ@Ĉ@—@ʮ@ߘ•@؋@۟@Ǽ؇@ú@զ@@@@ֱ̆@@󑣖Ğ@@ޯͪ@ݴۓ@DŽׅ@쎀Ņ@Ëᖸ@荶@䒅@ʂ@鳓ѣ@׵@ӄ@͗ń@쑨@ܐ@桳@撞@˾@@㭫@Χ׃@ʃ@Џۑ@챃@ߥ@菆陃@Ҋ@@@џ@@ⷐՂ@ղʂ@@؇浂@@ƹ@@ͬ@@Ͻ嘠@@â@вğ܁@Ӂ@ϪِɁ@䲙@Ϸ@жЮ@ݥ@@@ʿƋ@ß@Ԫ@೚@@ݾ@بـ@ޙр@˪Ɠɀ@߯@ՠ@ʳ@ϹΩ@@̛@͒@Ά@գƃ@ٓ?ÿ?ѽ??ݽ?쩪?????ʶ?辈?Éԩ?㵟տ?֜ϋ?njˤ?㪗???̜؍?٧?ʼƿ??ڪ?ʅ?Öӡ?۪?ֈ??ކݏ?΀?֑?繤?½?Ƅ?՞셥?܁葄˕??ڀ??ĵ?ςߋ??Š?̤?ĭ?ƒ?؃򲙒?̛??Ơ??Єᛨ?벡??닭ς?Ӯ?Åćϧ?مţ?ٙڌ?ē߹?洄ܛ?߿?̆ﵔ?????ć?ڇ޳?Ɗۉ?ĝ???͈ɚ?݋??ȣ??ěЕ?ۉڻ??ⶰ߫??Ӓ?Ί??ݶ?ȶ?Ã?Р?׋??Եނ?ӹ?皙?ό??ȧ?ۤۜդ?Đ𫈑??؍?ﻊ?Æѷ?ï?Ê?ˎ??˗?ꗶ?ѱ֥?Ï?ُ??ކ?ū?ӌŋ?̐Ņ??Ŵ?ЍӪ?㩦??ڑ?맺???륚?͒́?猆?老??ݴ??֓?ͦ˯?ݹ?ל?艿?Δܢ??膩?ۦ?΄??ו?ޏ?Ԩ??ƙʤֵ?ʖؓ?.. .257 .. ?ϖ?З?ʬ?ƆǺ???Øŀ?ޘƌ?찿?ݤ?ͻӟվ?ʢޓ?љ?Ŋ?̭߰?驵?ϾĦ?Ě?ښθ׭?Ώ?Ƞ?ݾɣ?䍞?қũ??Єڧ??ԝ?Ŝ貲?ۜ?ɴܨ?釕?̡??Ν?ȥ։?Ԭ㠏??ץŖ?ƞʼ?ܞ??֙?۔χ?ͥ?ϟ??˷?ၽ?? 퓨?ݠ︔???Üג??С?庩?Г?Ӌ?׿?â?٢Ӕۺ??ƾÚ?҉?񊸆?ѣћҴ޺?Λα???ܰ?ĤÔ?ڤ???ݱ?Ĵ?ͥ?ކ?ႌ?è??Ŧ͹Ă?ۦ蛂݉?ӫ?㨕?ա?Ļ?Χ?ܶ?՛Ŵ???ਠ?ܨ޾?ְ?կʟ?Ս??ϩڗ??⥆?·?ǁ?ª?ت瘎?????ЫǫӴҳ??ٰ?ÙɌ?ĝ?ì޹?٬Ƙ???Տ?é嫔?̭?鉺ù?ț?ۢ?Ĭ?Įӄʅ?ڮ?黬????ͯ??ۤ??˄??۰?圍?Ϣ?㖸?Ѕ?αݏ??푐?傀ɦ???ײѦ?ꇁ?ތ?ѡ?ı?ϳﭰ?斅???డ?´?شړ???앺?ĸ?˵?ı?ݡ?Ž?宅?ö‘?ٶ?ܒ?Եը???̷??DZ?Ā?Ϡ؏??ڸӓ?󳋾?…???͹ݜͶ?‘ݎ?𥘱?ݥ??ɽ?ֺ??ԃ⮇?ł?׫?λޣ?Ң?䌕?ݻ?˺?͛?׼❘?޷??œ??ʽצӨ?ԇ?ӄ??ߧ?¾惋?ؾގ??¸??Д?˿?߹??̱?ԫ݄??Ĉѭ??ᴗ?ƹ?ܻ??ݲ?£?ܯ͢?NJ?⫡?ꖈ?ز֧?ޞܝ??ʱ̴ذ?疥ݵ????϶?֢?ժ?ם??߇?唴?Ǣި??.. . ؽѽǽA Types that can be used to create a random instance of `Support`.DSelfSupportSupportؽselfݾrngƾ59 Generate a random value of `Support`, using `rng` as the< source of randomness.ɾ ­R ­ RؾоӾ 6 `Sample`s that do not require keeping track of state.9; Since no state is recorded, each sample is (statistically)>< independent of all others, assuming the `Rng` used has this? property. SelfSupport­Ǵself0 Generate a random value. ­ ­R %Sup M Supself !   SupselfrngI  R۩ SupĸselfrngJ ԷR۩ }Sup[   'aT'aTƼ Ƽitems  Create a new `WeightedChoice`." Panics if: - `items` is empty - the total weight is 07 - the total weight is larger than a `u32` can contain.: 'aƼ 'a Ƽ 'aƼܿƼ'aTselfrngG 'aƼ ܿƼR  'aƼƼ'aTselfrng  'aƼ ƼR   rng symmetric x_tabf_tabpdf zero_case FC Sample a random number using the Ziggurat method (specifically theF= ZIGNOR variant from Doornik 2005). Most of the arguments are@ directly from the paper: * `rng`: source of randomness!Y * `symmetric`: whether this is a symmetric distribution, or one-sided with P(x < 0) = 0.\ * `X`: the $x_i$ abscissae.C * `F`: precomputed values of the PDF at the $x_i$, (i.e. $f(x_i)$)F8 * `F_DIFF`: precomputed values of $f(x_i) - f(x_{i+1})$;* * `pdf`: the probability density function-? * `zero_case`: manual sampling from the tail when we chose theB bottom box (i.e. i == 0)cfg featurestdinline always PZRPZ(1u64 << 53) as f64'  5 5 ''  'PRngfmtmem ptr  AtomicUsize  ATOMIC_USIZE_INIT OrderingPB Non-physical true random number generator based on timing jitter.E 64 @   32# ### MEMORY_BLOCKS * MEMORY_BLOCKSIZE <     << <   MEMORY_SIZE          J A true random number generator based on jitter in the CPU execution time,M" and jitter in memory access time.%D This is a true random number generator, as opposed to pseudo-randomGI generators. Random numbers generated by `JitterRng` can be seen as freshLJ entropy. A consequence is that is orders of magnitude slower than `OsRng`M' and PRNGs (about 10^3 .. 10^6 slower).*M There are very few situations where using this RNG is appropriate. Only veryPJ few applications require true entropy. A normal PRNG can be statisticallyML indistinguishable, and a cryptographic PRNG should also be as impossible toO predict. L Use of `JitterRng` is recommended for initializing cryptographic PRNGs whenO `OsRng` is not available. This implementation is based on#@ [Jitterentropy](http://www.chronox.de/jent.html) version 2.1.0.C      3selff`   2self    3selffh pcfg featurestd self @   6cfg featurestd66 6 Create a new `JitterRng`.& Makes use of `std::time` for a timer.)D During initialization CPU execution timing jitter is measured a fewGF hundred times. If this does not pass basic quality tests, an error isIE returned. The test result is cached to make subsequent calls faster.Hcfg featurestd timer  Create a new `JitterRng`.I A custom timer can be supplied, making it possible to use `JitterRng` inL `no_std` environments.* The timer must have nanosecond precision.-H This method is more low-level than `new()`. It is the responsibility ofKG the caller to run `test_timer` before using any numbers generated withJ1 `JitterRng`, and optionally call `set_rounds()`.4 selfroundslC Configures how many rounds are used to generate each 64-bit value.FD This must be greater than zero, and has a big impact on performanceG and output quality.F `new_with_timer` conservatively uses 64 rounds, but often less roundsIG can be used. The `test_timer()` function returns the minimum number ofJG rounds required for full strength (platform dependent), so one may useJ9 `rng.set_rounds(rng.test_timer()?);` or cache the value.<  selfn_bitsinline never selftime var_rounds $ inline never self var_rounds inline never self current_delta  self   self  inline  never self  self *G Basic quality tests on the timer, by measuring CPU timing jitter a fewJ hundred times.H If succesful, this will return the estimated number of rounds necessaryKG to collect 64 bits of entropy. Otherwise a `TimerError` with the causeJ! of the failure will be returned.$ self var_rounds B Statistical test: return the timer delta of one normal run of theE# `JitterEntropy` entropy collector.&F Setting `var_rounds` to `true` will execute the memory access and theIF CPU jitter noice sources a variable amount of times (just like a realI `JitterEntropy` round).C Setting `var_rounds` to `false` will execute the noice sources theFH minimal number of times. This can be used to measure the minimum amountKI of entropy one round of entropy collector can collect in the worst case.L # Example H Use `timer_stats` to run the [NIST SP 800-90B Entropy Estimation Suite]K< (https://github.com/usnistgov/SP800-90B_EntropyAssessment).?C This is the recommended way to test the quality of `JitterRng`. ItFG should be run before using the RNG on untested hardware, after changesJF that could effect how the code is optimised, and after major compilerI+ compiler changes, like a new LLVM version..H First generate two files `jitter_rng_var.bin` and `jitter_rng_var.min`.KI Execute `python noniid_main.py -v jitter_rng_var.bin 8`, and validate itL9 with `restart.py -v jitter_rng_var.bin 8 `.<I This number is the expected amount of entropy that is at least availableLG for each round of the entropy collector. This number should be greaterJ4 than the amount estimated with `64 / test_timer()`.ń7B Execute `python noniid_main.py -v -u 4 jitter_rng_var.bin 4`, andEJ validate it with `restart.py -v -u 4 jitter_rng_var.bin 4 `.ӅMG This number is the expected amount of entropy that is available in theJF last 4 bits of the timer delta after running noice sources. Note thatIF a value of 3.70 is the minimum estimated entropy for true randomness.‡IB Execute `python noniid_main.py -v -u 4 jitter_rng_var.bin 4`, andEJ validate it with `restart.py -v -u 4 jitter_rng_var.bin 4 `.MG This number is the expected amount of entropy that is available to theJI entropy collecter if both noice sources only run their minimal number ofLF times. This measures the absolute worst-case, and gives a lower boundԊI for the available entropy.ŋ ```rust,no_run͋ use rand::JitterRng; # use std::error::Error; # use std::fs::File; # use std::io::Write;nj #, # fn try_main() -> Result<(), Box> {/ fn get_nstime() -> u64 {- use std::time::{SystemTime, UNIX_EPOCH};č0E let dur = SystemTime::now().duration_since(UNIX_EPOCH).unwrap();H8 // The correct way to calculate the current time isΎ;C // `dur.as_secs() * 1_000_000_000 + dur.subsec_nanos() as u64`FE // But this is faster, and the difference in terms of entropy isُH( // negligible (log2(10^9) == 29.9).+4 dur.as_secs() << 30 | dur.subsec_nanos() as u64֐7 }G // Do not initialize with `JitterRng::new`, but with `new_with_timer`.J> // 'new' always runst `test_timer`, and can therefore fail toAF // initialize. We want to be able to get the statistics even when theI // timer test fails.5 let mut rng = JitterRng::new_with_timer(get_nstime);8B // 1_000_000 results are required for the NIST SP 800-90B EntropyE // Estimation SuiteJ // FIXME: this number is smaller here, otherwise the Doc-test is too slowϔM const ROUNDS: usize = 10_000;!? let mut deltas_variable: Vec = Vec::with_capacity(ROUNDS);ǕB> let mut deltas_minimal: Vec = Vec::with_capacity(ROUNDS);AԖ for _ in 0..ROUNDS {ܖ7 deltas_variable.push(rng.timer_stats(true) as u8);:7 deltas_minimal.push(rng.timer_stats(false) as u8);: }F // Write out after the statistics collection loop, to not disturb theI // test results.ט> File::create("jitter_rng_var.bin")?.write(&deltas_variable)?;A= File::create("jitter_rng_min.bin")?.write(&deltas_minimal)?;@ # # Ok(())  # } # # fn main() { # try_main().unwrap();š # } ```cfg# featurestd ވdatatimeۈ( 7441392450524785545)׶Ȣg))) 300 100d3x  cfg$ featurestd ߞѝcfgѝ$ԝ؞ not՝؝מ anyٝܝ֞ target_osݝ macos target_os ios target_os windows  all՞ target_arch wasm32 notԞ target_os ƞ emscriptenȞ ϝ   dummy  TTself  self ? selfïdestɯ   Qiofmtmem Rng_Q QcfgQ%QQ featureQQstdQQ: Interfaces to the operating system provided random numberظ= generators.B A random number generator that retrieves randomness straight fromE( the operating system. Platform sources:+B - Unix-like systems (Linux, Android, Mac OSX): read directly fromEC `/dev/urandom`, or from `getrandom(2)` system call if available.F! - OpenBSD: calls `getentropy(2)`$3 - FreeBSD: uses the `kern.arandom` `sysctl(2)` mib6A - Windows: calls `RtlGenRandom`, exported from `advapi32.dll` asԼD `SystemFunction036`.@ - iOS: calls SecRandomCopyBytes as /dev/(u)random is sandboxed.C= - PNaCl: calls into the `nacl-irt-random-0.1` IRT interface.@E This usually does not block. On some systems (e.g. FreeBSD, OpenBSD,HB Max OS X, and modern Linux) this may block very early in the initE3 process, if the CSPRNG has not been seeded yet.[1]̿6? [1] See for a moreB in-depth discussion.   ǹǹǹN Create a new `OsRng`. self 3  self 3 selfv? ֮~3selff\  444fill_buf3cfg& not target_env sgx   ۮ888fill_buf3cfg' not target_env sgx libcnext_u32 next_u64 ioFile RngReadRng OsGetrandomRngOsGetrandomRng OsReadRng  OsReadRng  "cfg' all unix not target_os ios not target_os nacl not target_os freebsd  not target_os fuchsia  not target_os openbsd  not target_os redox buf ,cfg' all target_os linux any target_arch x86_64 target_arch x86 target_arch arm target_arch aarch64  target_arch powerpc  number 6 Y 318'cfg( target_arch x86_64'' 'v% 0  ۮ          )                      -    0   - 0 # l    ʻʻ-   bufresult available err  *Some *l#cfg( all target_os linux any target_arch x86_64 target_arch x86 target_arch arm target_arch aarch64  target_arch powerpc  !)  )!!! ) 0000 003ǹ Q     OsReadRngǹ ǹʻǹǹself   ǹself  selfv ֮Qio  Read  mem  Rng  `Q QcfgQ*QQ featureQQstdQQ1 A wrapper around any Read to treat it as an RNG. 4  R  r  X& Create a new `ReadRng` from a `Read`. )    R  self       self      self v  } ֮  r buf  ;  ֮ʻ Q Default  Default  Rng   SeedableRng  qQ6 A wrapper around another RNG that reseeds it after it 9, generates a certain number of random bytes. /   32 * 1024  4C How many bytes of entropy the underling RNG is allowed to generate F before it is reseeded           4 4  4   RsdrRRsdr    rng generation_threshold reseeder 1 7 Create a new `ReseedingRng` with the given parameters. :  # Arguments  - * `rng`: the random number generator to use. 0U * `generation_threshold`: the number of bytes of entropy at which to reseed the RNG. X+ * `reseeder`: the reseeding object to use. .  self   > Reseed the internal RNG if the number of bytes that have been A generated exceed the threshold. #       RRsdr    self      self      self dest   ֮     RsdrSSRRsdrօ ۩ օ    self     օ υ  8 Create a new `ReseedingRng` from the given reseeder and ;< seed. This uses a default value for `generation_threshold`. ? օυ   ^@ Something that can be used to reseed an RNG via `ReseedingRng`. C  # Example   ```rust & use rand::{Rng, SeedableRng, StdRng}; )/ use rand::reseeding::{Reseeder, ReseedingRng}; 2 ' struct TickTockReseeder { tick: bool } *- impl Reseeder for TickTockReseeder { 0- fn reseed(&mut self, rng: &mut StdRng) { 0- let val = if self.tick {0} else {1}; 0 rng.reseed(&[val]);  self.tick = !self.tick; # }  }  fn main() { 0 let rsdr = TickTockReseeder { tick: true }; 3 ( let inner = StdRng::new().unwrap(); +6 let mut rng = ReseedingRng::new(inner, 10, rsdr); 9 B // this will repeat, because it gets reseeded very regularly. E? let s: String = rng.gen_ascii_chars().take(100).collect(); B println!("{}", s);؀  }   ``` SelfR۩ self΁ rngԁ  " Reseed the given RNG.   ­Ɂ   R   self rng  L     bۄ 7ބ  RRng  HashMapӜ 4 4R QcfgQ/QR anyQQR featureQQstdQQ featureQRallocRQ-9 Functions for randomly accessing and sampling sequences.՚ <    rng iterable amounṭ # : Randomly sample `amount` elements from a finite iterator.ĝ =  The following can be returned: "\ - `Ok`: `Vec` of `amount` non-repeating randomly sampled elements. The order is not random. _^ - `Err`: `Vec` of all the elements from `iterable` in sequential order. This happens when the aY length of `iterable` was less than `amount`. This is considered an error since exactly \+ `amount` elements is typically expected.Ƞ . I This implementation uses `O(len(iterable))` time and `O(amount)` memory. Lȡ  # Example̡ ڡ  ```rustޡ  use rand::{thread_rng, seq};   let mut rng = thread_rng(); = let sample = seq::sample_iter(&mut rng, 1..100, 5).unwrap(); @ println!("{:?}", sample);  ```  I ˞#TIR ׬ ˞  (˞ ˞(     Ƽ Ƽ       Ƽ        Ƽ     Ƽ Ƽ Ƽ   Ƽ    i slice   rng slice amount   q6 Randomly sample exactly `amount` values from `slice`.Ȫ 9 2 The values are non-repeating and in random order. 5 6 This implementation uses `O(amount)` time and memory. 9 ! Panics if `amount > slice.len()` $  # Example   ```rust  use rand::{thread_rng, seq};Ŭ   let mut rng = thread_rng(); ( let values = vec![5, 6, 1, 3, 4, 6, 7]; +; println!("{:?}", seq::sample_slice(&mut rng, &values, 3)); > ```  Ƽ #ƼRT   ׮    ߵ Ƽ֠         ߵ  Ƽ ӣߵ     i slice ߵ  rng slice amount   l: Randomly sample exactly `amount` references from `slice`. = 6 The references are non-repeating and in random order. 9 6 This implementation uses `O(amount)` time and memory. 9ܱ ! Panics if `amount > slice.len()` $  # Example   ```rust  use rand::{thread_rng, seq}; Ȳ  let mut rng = thread_rng();̲ ( let values = vec![5, 6, 1, 3, 4, 6, 7]; +? println!("{:?}", seq::sample_slice_ref(&mut rng, &values, 3)); B ```۳  Ƽ 'a# 'aƼRT   ̴   rng length amount ! c; Randomly sample exactly `amount` indices from `0..length`. > 2 The values are non-repeating and in random order. 5 6 This implementation uses `O(amount)` time and memory. 9 ` This method is used internally by the slice sampling methods, but it can sometimes be useful to cC have the indices themselves so this is provided as an alternative. F  Panics if `amount > length`  #R     rng length amount ! gJ Sample an amount of indices using an inplace partial fisher yates method. M V This allocates the entire `length` of indices and randomizes only the first `amount`. Y+ It then truncates to `amount` and returns. . Z This is better than using a HashMap "cache" when `amount >= length / 2` since it does not ]6 require allocating an extra cache and is much faster. 9 R     rng length amount ! tR This method performs a partial fisher-yates on a range of indices using a HashMap U+ as a cache to record potential collisions. . Z The cache avoids allocating the entire `length` of values. This is especially useful when ]@ `amount <<< length`, i.e. select 3 non-repeating from 1_000_000 C R   R ChaChaRngS  SR[$ The ChaCha random number generator.S'SIsaacRngT T Isaac64RngT  T 2Sf# The ISAAC random number generator.S&T char  mem  Rand  Rng  bT6 The implementations of `Rand` for the built-in types. 9  rng    inline 4  R    nrng   G inline 4  R    qrng   I inline 4  R    qrng   I inline 4  R    qrng   I inline 5  R    rng    inline 5  R    nrng   G inline 5  R    qrng   I inline 5  R    jrng   B inline 6  R    jrng   B inline 6  RÀ    rng    inline 6  R    2097151 #   # #  # vrngÓ   M inline 6  Rȓ    N ' inline 7 ™  Rҙ Ǚ ʙ   T׬  rng  ١ ͡ inline͡ 7ˡ ܡ   R ۩  T ChaChaRng  IsaacRng   Isaac64Rng   XorShiftRng  nT F Pseudo random number generators are algorithms to produce *apparentlyұ I? random* numbers deterministically, and usually fairly quickly. B ߲ H So long as the algorithm is computationally secure, is initialised with KL sufficient entropy (i.e. unknown by an attacker), and its internal state is OA also protected (unknown to an attacker), the output will also be DF *computationally secure*. Computationally Secure Pseudo Random NumberŴ IE Generators (CSPRNGs) are thus suitable sources of random numbers for HK cryptography. There are a couple of gotchas here, however. First, the seedص NL used for initialisation must be unknown. Usually this should be provided by OH the operating system and should usually be secure, however this may not KG always be the case (especially soon after startup). Second, user-space÷ JL memory may be vulnerable, for example when written to swap space, and after OK forking a child process should reinitialise any user-space PRNGs. For this޸ NJ reason it may be preferable to source random numbers directly from the OS M for cryptographic applications. #  B PRNGs are also widely used for non-cryptographic uses: randomised EH algorithms, simulations, games. In these applications it is usually not KF important for numbers to be cryptographically *unguessable*, but even II distribution and independence from other samples (from the point of view LL of someone unaware of the algorithm used, at least) may still be important.ͼ OE Good PRNGs should satisfy these properties, but do not take them for H! granted; Wikipedia's article on  $^ [Pseudorandom number generators](https://en.wikipedia.org/wiki/Pseudorandom_number_generator) a( provides some background on this topic. +  H Care should be taken when seeding (initialising) PRNGs. Some PRNGs have KK short periods for some seeds. If one PRNG is seeded from another using the NI same algorithm, it is possible that both will yield the same sequence of L values (with some lag).  w m w m Rng   SeedableRng  Rand   $ The ChaCha random number generator. '      allow 7   bad_style m 8       16       20        STATE_WORDS        STATE_WORDS                     j j j           STATE_WORDS        STATE_WORDS        output input  D inline 7      v; Create an ChaCha random number generator using the default > fixed key of 8 zero words.   # Examples   ```rust  use rand::{Rng, ChaChaRng};  ( let mut ra = ChaChaRng::new_unseeded(); +! println!("{:?}", ra.next_u32()); $! println!("{:?}", ra.next_u32()); $ ```  F Since this equivalent to a RNG with a fixed seed, repeated executions IG of an unseeded RNG will produce the same result. This code sample will J consistently produce:   - 2917185654  - 2419978656  self  counter_low counter_high - , Sets the internal 128-bit ChaCha counter to /, a user-provided value. This permits jumping /= arbitrarily ahead (or backwards) in the pseudorandom stream. @ B Since the nonce words are used to extend the counter to 128 bits, ED users wishing to obtain the conventional ChaCha pseudorandom stream G? associated with a particular nonce can call this function with B arguments `0, desired_nonce`. !  # Examples   ```rust  use rand::{Rng, ChaChaRng};  ( let mut ra = ChaChaRng::new_unseeded(); +% ra.set_counter(0u64, 1234567890u64); (! println!("{:?}", ra.next_u32()); $! println!("{:?}", ra.next_u32()); $ ```    self key  @ Initializes `self.state` with the appropriate key and constants C < We deviate slightly from the ChaCha specification regarding ?< the nonce, which is used to extend the counter to 128 bits. ?; This is provably as strong as the original cipher, though, >: since any distinguishing attack on our variant also works =9 against ChaCha with a chosen-nonce. See the XSalsa20 [1] <4 security proof for a more involved example of this. 7  The modified word layout is:  ```text $ constant constant constant constant ' key key key key " key key key key "# counter counter counter counter & ``` 2 [1]: Daniel J. Bernstein. [*Extending the Salsa20 5- nonce.*](http://cr.yp.to/papers.html#xsalsa) 0    self   2 Refill the internal output buffer (`self.buffer`) 5    self    inline ;     'a 'aself seed    'a seed   u' Create a ChaCha generator from a seed, *+ obtained from a variable-length u32 array. ., Only up to 8 words are used; if less than 8 // words are used, the remaining are set to zero. 2 'a other     R    slice  repeat  ' wӛ m wӛ m fmt ڛ Rng   SeedableRng  Rand   # The ISAAC random number generator.ƚ & allow <   non_camel_case_types        allow =   bad_style  8 ʜ ʜ   œ  Ӝ 1 << RAND_SIZE_LEN͜ *        ͜ *͜ *ޜ  ͜ *   1 << RAND_SIZE_LEN 2         2 2   2  RAND_SIZE_USIZEբ բ բ բ բ բ բ բ RAND_SIZE_USIZE           ΢ Ϣ Ϣ Ѣ ΢                {¢  { { { { {   ΢ Ϣ ֡        k: Create an ISAAC random number generator using the default = fixed seed.  self use_rslĦ  E Initialises `self`. If `use_rsl` is true, then use the current value HA of `rsl` as a seed, otherwise construct one algorithmically (notե D randomly).     self   ' Refills the output buffer (`self.rsl`)Ҵ * inline >  Ӧ  RAND_SIZE_USIZE / 2 ,  Ҷ       Ҷ  , ,   ,   Q self   1     self    inline ?  Ӧ   'a'aself seed    'aӦ seed   t> Create an ISAAC random number generator with a seed. This can A? be any length, although the maximum number of elements used is B7 256 and any more will be silently ignored. A generator :> constructed with a given seed will generate the same sequence A> of values as all other generators constructed with that seed. A 'a other     R    3self f  _    slice  repeat  ' w m w m fmt  Rng   SeedableRng  Rand   & The ISAAC-64 random number generator. )      allow B   bad_style m 8 "   " "  " 1 << RAND_SIZE_64_LEN 2         2 2   2   RAND_SIZE_64        RAND_SIZE_64                              w  w w w w w  ʻ          $ʻ p8 Create a 64-bit ISAAC random number generator using the ; default fixed seed.  ʻself use_rsl  E Initialises `self`. If `use_rsl` is true, then use the current value HA of `rsl` as a seed, otherwise construct one algorithmically (not D randomly).    ʻ self   ' Refills the output buffer (`self.rsl`)Յ *    RAND_SIZE_64 / 2 *  Ƈ       Ƈ  * *   *  2       ׇ [(0, MIDPOINT), (MIDPOINT, 0)]ч B            ч Bч B߇   ч B   Uʻ ʻself   3   ʻʻ  ʻʻself   D inline E   self    inline Eޚ   ҝ ʻʻ 'a 'aself seed    'a seedȤ   y> Create an ISAAC random number generator with a seed. This can A? be any length, although the maximum number of elements used is B7 256 and any more will be silently ignored. A generator :> constructed with a given seed will generate the same sequence A> of values as all other generators constructed with that seed. A 'aʻ ʻʻother  ץ ڥ  ʻR ߥ   ʻ3ʻself f  a    w m w m Rng   SeedableRng  Rand    Xorshift generators      8 Creates a new XorShiftRng instance which is not seeded. ; H The initial values of this RNG are constants, so all generators created KE by this function will yield the same stream of random numbers. It is HI highly recommended that this is created through `SeedableRng` instead of L this function   self    inline G    4        self seed  @ Reseed an XorShiftRng. This will panic if `seed` is entirely 0. C   seed   C Create a new XorShiftRng. This will panic if `seed` is entirely 0. F  rng     R   aa6 A type that can be randomly generated using an `Rng`.T9U ## Built-in ImplementationsUUH This crate implements `Rand` for various primitive types. Assuming theUKK provided `Rng` is well-behaved, these implementations generate values withVN( the following ranges and distributions:V+WI * Integers (`i32`, `u32`, `isize`, `usize`, etc.): Uniformly distributedWL over all values of the type.W"I * `char`: Uniformly distributed over all Unicode scalar values, i.e. allWLA code points in the range `0...0x10_FFFF`, except for the rangeXD@ `0xD800...0xDFFF` (the surrogate code points). This includesYC# unassigned/reserved code points.Y&B * `bool`: Generates `false` or `true`, each with probability 0.5.YEG * Floating point types (`f32` and `f64`): Uniformly distributed in theZJJ half-open range `[0, 1)`. (The [`Open01`], [`Closed01`], [`Exp1`], and[MG [`StandardNormal`] wrapper types produce floating point numbers with[J( alternative ranges or distributions.)\+\ [`Open01`]: struct.Open01.html\"# [`Closed01`]: struct.Closed01.html\&5 [`Exp1`]: distributions/exponential/struct.Exp1.html]8D [`StandardNormal`]: distributions/normal/struct.StandardNormal.html]G^E The following aggregate types also implement `Rand` as long as their^H component types implement it:^!_E * Tuples and arrays: Each element of the tuple or array is generated_H6 independently, using its own `Rand` implementation._9J * `Option`: Returns `None` with probability 0.5; otherwise generates a`M$ random `T` and returns `Some(T)`.`'Selfaarngbb%G Generates a random instance of this type using the specified source ofaJ randomness.ab ­­Rb۩bbbbK A random number generator.bSelfselfd d Return the next random u32.bc= This rarely needs to be called directly, prefer `r.gen()` toc@ `r.next_u32()`.cd ­dselfg gi Return the next random u64.de: By default this is implemented in terms of `next_u32`. Ane=: implementation of this trait must provide at least one ofe=> these two methods. Similarly to `next_u32`, this rarely needsfA; to be called directly, prefer `r.gen()` to `r.next_u64()`.f>g ­gg ggggggg gggg g g g g gggg g gg g g ggg;gghgi g ­g g;g g;gg;gg;gg g;gg;gg;gselfg giselfr r7 Return the next random f32 selected from the half-openh: interval `[0, 1)`.hh: This uses a technique described by Saito and Matsumoto ath=9 MCQMC'08. Given that the IEEE floating point numbers arei<: uniformly distributed over [1,2), we generate a number ini=8 this range and then offset it onto the range [0,1). Ourj;6 choice of bits (masking v. shifting) is arbitrary andj9: should be immaterial for high quality generators. For lowk=8 quality generators (ex. LCG), prefer bitshifting due tok;/ correlation between sequential low order bits.l2l See:lD A PRNG specialized in double precision floating point numbers usinglG an affine transitionmmG * mJK * nNo= By default this is implemented in terms of `next_u32`, but ao@> random number generator which can generate numbers satisfyingoA= the requirements directly can overload this for performance.p@7 It is required that the return value lies in `[0, 1)`.p:q4 See `Closed01` for the closed interval `[0,1]`, andq7( `Open01` for the open interval `(0,1)`.q+r ­rssssssss sss ss+s ssssss stttt tttttrssLs rr ssssssst tselfr tmpsresultsrs s selfx x7 Return the next random f64 selected from the half-opent: interval `[0, 1)`.tu= By default this is implemented in terms of `next_u64`, but au@> random number generator which can generate numbers satisfyinguA= the requirements directly can overload this for performance.v@7 It is required that the return value lies in `[0, 1)`.v:w4 See `Closed01` for the closed interval `[0,1]`, andw7( `Open01` for the open interval `(0,1)`.w+x ­xyyyyyyyy yyy yy+y yyzzyy yzzzz z?zzzzxyyLy xx yyyyyyzz zselfx tmpyresultyxy y self͂destӂ Fill `dest` with random data.z!z= This has a default implementation in terms of `next_u64` andz@= `next_u32`, but should be overridden by implementations that{@8 offer a more efficient solution than just calling those{; methods repeatedly.||< This method does *not* have a requirement to bear any fixed|?> relationship to the other methods, for example, it does *not*}A; have to result in the same output as progressively filling}>> `dest` with `self.gen::()`, and any such behaviour should~A not be relied upon.~~< This method should guarantee that `dest` is entirely filled~?3 with new data, and may panic if this is impossible6? (e.g. reading past the end of a file that is being used as theB source of randomness).À # Example  ```rust  use rand::{thread_rng, Rng};  let mut v = [0u8; 13579];! thread_rng().fill_bytes(&mut v);$ println!("{:?}", &v[..]); ``` ­֮Ȃ݅  >  (7        )ӛ           Some           ܈ ݈݈܈ Ԉ             مȂ ӂ݅ ӛ ӛ ӛ    ӛ     ܈ ݈  selfȂ destӂcount݅ numiter__next valbyteself R( Return a random value of a `Rand` type.+ # Example  ```rust  use rand::{thread_rng, Rng};  let mut rng = thread_rng();Ê let x: u32 = rng.gen(); println!("{}", x);, println!("{:?}", rng.gen::<(f64, bool)>());/ ```֋inlineK always ­ƼƼTƼ Ƽ­ÌʌRƼ self Rself B Return an iterator that will yield an infinite number of randomlyЌE generated items. # Example ͍ ```Ս use rand::{thread_rng, Rng};  let mut rng = thread_rng();> let x = rng.gen_iter::().take(10).collect::>();A println!("{:?}", x);7 println!("{:?}", rng.gen_iter::<(f64, bool)>().take(5):5 .collect::>());ԏ8 ``` ­Ƽ 'a­ 'aƼ­T 55 Ƽ5ó  Ƽ­ǐ 5self self̗lowҗhighڗ6 Generate a random value in the range [`low`, `high`).9% This is a convenience wrapper around(8 `distributions::Range`. If this function will be called;? repeatedly with the same arguments, one should use `Range`, asB; that will amortize the computations that allow for perfect>3 uniformity, as they only happen on initialization.6 # Panics ̔ Panics if `low >= high`.Ԕ # Example  ```rust  use rand::{thread_rng, Rng}; ̕ let mut rng = thread_rng();ԕ# let n: u32 = rng.gen_range(0, 10);& println!("{}", n);0 let m: f64 = rng.gen_range(-40.0f64, 1.3e5f64);3 println!("{}", m); ``` ­ƼƼƼƼTǗ5Ƽ ƼƼ  = ==== ====   ƼƼ  = =   ʘʘ ՘ ՘ ՘՘ ژ ژژژ ʘʘ  ,Ƽ    ʘ 1 ' %Rng.gen_range called with low >= high%%% ʘ ޘ ޘ   ʘ& ƼƼ­        ƼǗ ƼҗƼڗ= ʘ&  ʘʘ& ʘʘ&Ƽ՘ʘ&Ƽژʘ&selfǗ lowҗhighڗselfnu+ Return a bool with a 1 in n chance of true. # Example ə ```rustљ  use rand::{thread_rng, Rng};  let mut rng = thread_rng();* println!("{}", rng.gen_weighted_bool(3));- ``` ­ #########ƛƛƛ؛؛ƛ˛ ­՛˛ޛٛٛ#u ###ƛ#ƛ#؛self nuself B Return an iterator of random characters from the set A-Z,a-z,0-9.E # Example Ϝ ```rustל  use rand::{thread_rng, Rng}; C let s: String = thread_rng().gen_ascii_chars().take(10).collect();F println!("{}", s);ߝ ``` ­ 'a­ 'a­Ӟ ­ self selfvalues' Return a random element from `values`.*$ Return `None` if `values` is empty.Ÿ' # Example  ``` use rand::{thread_rng, Rng}; $ let choices = [1, 2, 4, 8, 16, 32];ɠ' let mut rng = thread_rng();( println!("{:?}", rng.choose(&choices));+- assert_eq!(rng.choose(&choices[..0]), None);ɡ0 ``` ­Ƽ 'a 'aƼTԢ >Ƽ }((ȣ  ȣ ȣ ȣ ϣ >Ƽ  ϣ}ӣ  ­ţ ԣ ԣ' '   '   ((.Some.֣}   }}.(.(...ȣ .ȣ''self valuesselfvalues< Return a mutable pointer to a random element from `values`.?$ Return `None` if `values` is empty.' ­Ƽ 'a 'aƼTΥΥΥΥե ե ޥ˥  ˥##Ŧ Ŧ Ŧ צ צ Ŧʦ  Ԧ  ʦڦ ڦ       # #)Some Ƽ)ܦ ˥W   ˥Υ˥Υ) #) #)Ŧ)Ŧ)צself valueslenselfvalues" Shuffle a mutable slice in place.% This applies Durstenfeld's algorithm for the [Fisher–Yates shuffle](https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle#The_modern_algorithm)( which produces an unbiased permutation.Ĩ+ # Example  ```rust  use rand::{thread_rng, Rng}; ˩ let mut rng = thread_rng();ө let mut y = [1, 2, 3]; rng.shuffle(&mut y); println!("{:?}", y); rng.shuffle(&mut y);Ъ println!("{:?}", y); ``` ­Ƽ Tͫ   ֭ܭݭ  (       ŭ ŭŭŭɭŭ ɭŭ ɭ  ­  ʭ ʭ ( >Ƽ   !˭ ˭ ˭ ̭֭ݫ  ( ŭŭŭself valuesir 1065353216 r#r r r#r#rr#r 8388607r!ssr!r!rr!x 4607182418800017408x+xx?x+x+xx+x 4503599627370495x(yyx(x(xx(  'a 'aRself A 'a  self A 'a self A 'a self A 'a selfɰdestϰS 'a ֮İ cfgN featurestdU R˱self ձAر   self A  self A  self A  selfdestS  ֮   'aƼ) 'aTR ׷ܷƼself D 'aƼ  Ƽ  'a) 'aR۩selfջ Ȼ˻ 'a  лAb"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"A ۮaaaa >aa ۮ  a a  ھC A random number generator that can be explicitly seeded to produceF. the same stream of randomness multiple times.1SelfSeed­Seed self# Reseed an RNG with the given seed.& # Example ƿ ```rustο & use rand::{Rng, SeedableRng, StdRng};޿) let seed: &[_] = &[1, 2, 3, 4];#4 let mut rng: StdRng = SeedableRng::from_seed(seed);7" println!("{}", rng.gen::());% rng.reseed(&[5, 6, 7, 8]);" println!("{}", rng.gen::());% ``` ­  seed !& Create a new RNG with the given seed.) # Example  ```rust & use rand::{Rng, SeedableRng, StdRng};) let seed: &[_] = &[1, 2, 3, 4];#4 let mut rng: StdRng = SeedableRng::from_seed(seed);7" println!("{}", rng.gen::());% ``` ­  ­ / Create a randomly seeded instance of `StdRng`.25 This is a very expensive operation as it has to read88 randomness from the operating system and use this in an;? expensive seeding operation. If one is only generating a smallB? number of random numbers, or doesn't need the utmost speed forBA generating each number, `thread_rng` and/or `random` may be moreD appropriate.> Reading the randomness from the OS may fail, and any error isA. propagated via the `io::Result` return value.1cfgP featurestd  ʻ  self AinlineP    self AinlineP      'a 'aselfseed 'a seed  'a  I Create a weak random number generator with a default algorithm and seed.LK It returns the fastest `Rng` algorithm currently available in Rust withoutNJ consideration for cryptography or security. If you require a specificallyMI seeded `Rng` for consistency over time you should pick one algorithm andL create the `Rng` yourself.> This will seed the generator with randomness from thread_rng.AcfgQ featurestd cfgQ featurestd   selfrng    327680cfgQ featurestd000 IcfgQ featurestd                  t   ; Retrieve the lazily-initialized thread-local random number>? generator, seeded by the system. Intended to be used in methodB2 chaining style, e.g. `thread_rng().gen::()`.5L After generating a certain amount of randomness, the RNG will reseed itselfOL from the operating system or, if the operating system RNG returns an error,O) a seed based on the current system time.,C The internal RNG used is platform and architecture dependent, evenFB if the operating system random number generator is rigged to giveE? the same sequence always. If absolute consistency is required,B; explicitly select an RNG, e.g. `IsaacRng` or `Isaac64Rng`.>cfgQ featurestd  cfgQ featurestd  self N   self N ƭ selfbytesbinlineR  ƭ ֮ I Generates a random value using the thread-local random number generator.LK `random()` can generate various types of random things, and so may requireN5 type hinting to generate the specific type you want.8H This function uses the thread local random number generator. This meansKG that if you're calling `random()` in a loop, caching the generator canJ1 increase performance. An example is shown below.4 # Examples ``` let x = rand::random::();! println!("{}", x); let y = rand::random::();" println!("{}", y);+ if rand::random() { // generates a boolean.) println!("Better lucky than good!");, } ```2 Caching the thread local random number generator:5 ``` use rand::Rng; let mut v = vec![1, 2, 3]; for x in v.iter_mut() { *x = rand::random() }, // can be made faster by caching thread_rng/" let mut rng = rand::thread_rng();% for x in v.iter_mut() { *x = rng.gen(); } ```cfgR featurestdinlineR T׬   ˞˞  erngiterableamount#~, DEPRECATED: use `seq::sample_iter` instead./@ Randomly sample up to `amount` elements from a finite iterator.C3 The order of elements in the sample is not random.6 # Example  ```rust  use rand::{thread_rng, sample};# let mut rng = thread_rng();* let sample = sample(&mut rng, 1..100, 5);- println!("{:?}", sample); ```cfgR featurestdinlineR always  deprecated R since0.4.0 noterenamed to seq::sample_iter@0.4.0renamed to seq::sample_iter ˞Ԟ˞TIR׬ڟ ȱ±D, Sample values uniformly between two bounds./ȩC This gives a uniform distribution (assuming the RNG used to sample̩F@ it is itself uniform & the `SampleRange` implementation for theC> given type is correct), even for edge cases like `low = 0u8`,תA@ `high = 170u8`, for which a naive modulo operation would returnCB numbers less than 85 with double the probability to those greaterݫE than 85. ; Types should attempt to sample in `[low, high)`, i.e., not>: including `high`, but this may be very difficult. All the=C primitive integer types satisfy this property, and the float typesF= normally satisfy it, but rounding may mean `high` can occur.@ # Example ˮ ```rustϮ 5 use rand::distributions::{IndependentSample, Range};ۮ8 fn main() {) let between = Range::new(10, 10000);,& let mut rng = rand::thread_rng();կ) let mut sum = 0; for _ in 0..1000 {- sum += between.ind_sample(&mut rng);0 }  println!("{}", sum); } ```ĥ*Xȱ$ѱѱʥ$ݱݱʥ$ ʥ $automatically_derivedSallowS unused_qualificationsĥ3ĥX3ʥselff$ ʥ ĥ $automatically_derivedSallowS unused_qualificationsĥĥXʥ $automatically_derivedSallowS unused_qualificationsĥ ĥX ʥself $inlineT ʥ ĥ$ 5lowhigh$ٿſinlineſTÿ ܿ rrng$inlineU     R$ 5lowhigh$ٿſinlineſUÿ ܿ rrng$inlineV     R$ 5lowhigh$ٿſinlineſVÿ ܿ rrng$inlineW     R$ 5lowhigh$ٿſinlineſWÿ ܿ rrng$inlineX     R$ 5lowhigh$ٿſinlineſYÿ ܿ rrng$inlineY     R$ 5lowhigh$ٿſinlineſZÿ ܿ rrng$inlineZ     R$ 5lowhigh$ٿſinlineſ[ÿ ܿ rrng$inline[     R$ 5lowhigh$ٿſinlineſ\ÿ ܿ rrng$inline\     R$ 5lowhigh$ٿſinlineſ]ÿ ܿ rrng$inline^     R$ 5lowhigh$ٿſinlineſ^ÿ ܿ rrng$inline_     R$ 5low high $  r rng $~    R   $!5low!high!$!! r!rng!$~! !   R!!!); The Gamma distribution `Gamma(shape, scale)` distribution.>- The density function of this distribution is0 ```text 2 f(x) = x^(k - 1) * exp(-x / θ) / (Γ(k) * θ^k)5 ```C where `Γ` is the Gamma function, `k` is the shape and `θ` is theF3 scale and both `k` and `θ` are strictly positive.6C The algorithm used is that described by Marsaglia & Tsang 2000[1],FA falling back to directly sampling from an Exponential for `shapeD= == 1`, and using the boosting technique described in [1] for@ `shape < 1`. # Example  ```rust 5 use rand::distributions::{IndependentSample, Gamma};8" let gamma = Gamma::new(2.0, 5.0);%3 let v = gamma.ind_sample(&mut rand::thread_rng());66 println!("{} is from a Gamma(2, 5) distribution", v);9 ```@ [1]: George Marsaglia and Wai Wan Tsang. 2000. "A Simple MethodC@ for Generating Gamma Variables" *ACM Trans. Math. Softw.* 26, 3C (September 2000),O 363-372. DOI:[10.1145/358407.358414](http://doi.acm.org/10.1145/358407.358414)RF;;""automatically_derived"`""allow"`"" unused_qualifications""3selff";"" ";##automatically_derived#a##allow#a## unused_qualifications##;$$automatically_derived$a$$allow$a$$ unused_qualifications$$ self ;$$inline$a$$ $ ;W ;»;;غ; » ; » Large» »;  ;  One ; غ ; غ Smallغ غ;%%automatically_derived%a%%allow%a%% unused_qualifications%% 3 selff%;%%   %;&&automatically_derived&b&&allow&b&& unused_qualifications&&  ;''automatically_derived'b''allow'b'' unused_qualifications''   self ;''inline'b'' ى ';O= Gamma distribution where the shape parameter is less than 1.@B Note, samples from this require a compulsory floating-point `pow`E? call, which makes it significantly slower than sampling from aB@ gamma distribution where the shape parameter is greater than orC equal to 1.@ See `Gamma` for sampling from a Gamma distribution with generalC shape parameters.غH; ; »;((automatically_derived(c((allow(c(( unused_qualifications((غ3غselff(;(( (;))automatically_derived)c))allow)c)) unused_qualifications))غغ;**automatically_derived*c**allow*c** unused_qualifications**غ غself ;**inline*c** غ*;A? Gamma distribution where the shape parameter is larger than 1.B@ See `Gamma` for sampling from a Gamma distribution with generalC shape parameters.»J; ;;;++automatically_derived+d++allow+d++ unused_qualifications++»3»selff+;++ +;,,automatically_derived,d,,allow,d,, unused_qualifications,,»»;--automatically_derived-d--allow-d-- unused_qualifications--» »self ;--inline-d-- »- ߓ3D The chi-squared distribution `χ²(k)`, where `k` is the degrees ofG freedom.ُ B For `k > 0` integral, this distribution is the sum of the squaresE? of `k` independent standard normal random variables. For otherB/ `k`, this uses the equivalent characterisation2 `χ²(k) = Gamma(k/2, 2)`.ő # Exampleɑ ב ```rustۑ : use rand::distributions::{ChiSquared, IndependentSample};=! let chi = ChiSquared::new(11.0);$1 let v = chi.ind_sample(&mut rand::thread_rng());Β42 println!("{} is from a χ²(11) distribution", v)5 ```^;;ד2ד2automatically_derivedד2eד2ד2allowד2eד2ד2 unused_qualificationsד2ד23selfדfד2;ד2ד2 ד2;ѓ3ѓ3automatically_derivedѓ3eѓ3ѓ3allowѓ3eѓ3ѓ3 unused_qualificationsѓ3ѓ3;ʓ4ʓ4automatically_derivedʓ4fʓ4ʓ4allowʓ4fʓ4ʓ4 unused_qualificationsʓ4ʓ4 selfʓ ;ʓ4ʓ4inlineʓ4fʓ4ʓ4 ʓ4 ; ;;  ; ;  ;  DoFAnythingElse ;55automatically_derived5f55allow5f55 unused_qualifications55 3 selff5;55   5;66automatically_derived6f66allow6f66 unused_qualifications66  ;77automatically_derived7g77allow7g77 unused_qualifications77   self ;77inline7g77  7% The Fisher F distribution `F(m, n)`.Н(? This distribution is equivalent to the ratio of two normalisedB< chi-squared distributions, that is, `F(m,n) = (χ²(m)/m) /? (χ²(n)/n)`. # Example  ```rust 7 use rand::distributions::{FisherF, IndependentSample};:! let f = FisherF::new(2.0, 32.0);$/ let v = f.ind_sample(&mut rand::thread_rng());23 println!("{} is from an F(2, 32) distribution", v)ˠ6 ```f;;ءء;ߢߢ ;::automatically_derived:g::allow:g:: unused_qualifications::3selff:;:: :;;;automatically_derived;h;;allow;h;; unused_qualifications;;;<<automatically_derived Implemented via the ZIGNOR variant[1] of the Ziggurat method.A@ [1]: Jurgen A. Doornik (2005). [*An Improved Ziggurat Method toC Generate Normal RandomB Samples*](http://www.doornik.com/research/ziggurat.pdf). NuffieldE College, Oxford # Example  ```rust 1 use rand::distributions::normal::StandardNormal;4( let StandardNormal(x) = rand::random();+ println!("{}", x); ```# ######vFFautomatically_derivedFiFFallowFiFF unused_qualificationsFF3selffFvFF  FvGGautomatically_derivedGjGGallowGjGG unused_qualificationsGGvHHautomatically_derivedHjHHallowHjHH unused_qualificationsHH self vHHinlineHjHH  H6/ The normal distribution `N(mean, std_dev**2)`.29 This uses the ZIGNOR variant of the Ziggurat method, see<# `StandardNormal` for more details.& # Example  ```rust 6 use rand::distributions::{Normal, IndependentSample};9 // mean 2, standard deviation 3#$ let normal = Normal::new(2.0, 3.0);'4 let v = normal.ind_sample(&mut rand::thread_rng());71 println!("{} is from a N(2, 9) distribution", v)4 ```v v vIIautomatically_derivedIjIIallowIjII unused_qualificationsII3selffIvII IvJJautomatically_derivedJkJJallowJkJJ unused_qualificationsJJvKKautomatically_derivedKkKKallowKkKK unused_qualificationsKK self vKKinlineKkKK K )6 The log-normal distribution `ln N(mean, std_dev**2)`.9; If `X` is log-normal distributed, then `ln(X)` is `N(mean,> std_dev**2)` distributed. # Example  ```rust 9 use rand::distributions::{LogNormal, IndependentSample};< // mean 2, standard deviation 3#+ let log_normal = LogNormal::new(2.0, 3.0);.8 let v = log_normal.ind_sample(&mut rand::thread_rng());;5 println!("{} is from an ln N(2, 9) distribution", v)8 ```v vNNautomatically_derivedNkNNallowNkNN unused_qualificationsNN3selffNvNN NvOOautomatically_derivedOlOOallowOlOO unused_qualificationsOOvPPautomatically_derivedPlPPallowPlPP unused_qualificationsPP self vPPinlinePlPP P= A wrapper around an `f64` to generate Exp(1) random numbers.@4 See `Exp` for the general exponential distribution.7B Implemented via the ZIGNOR variant[1] of the Ziggurat method. TheEB exact description in the paper was adjusted to use tables for theE- exponential distribution rather than normal.0@ [1]: Jurgen A. Doornik (2005). [*An Improved Ziggurat Method toC Generate Normal RandomB Samples*](http://www.doornik.com/research/ziggurat.pdf). NuffieldE College, Oxford # Example  ```rust , use rand::distributions::exponential::Exp1;/ let Exp1(x) = rand::random();! println!("{}", x); ``` SSautomatically_derivedSlSSallowSlSS unused_qualificationsSS3selffSSS  STTautomatically_derivedTmTTallowTmTT unused_qualificationsTTUUautomatically_derivedUmUUallowUmUU unused_qualificationsUU self UUinlineUmUU  Uq, The exponential distribution `Exp(lambda)`./9 This distribution has density function: `f(x) = lambda *< exp(-lambda * x)` for `x > 0`." # Example  ```rust 3 use rand::distributions::{Exp, IndependentSample};6 let exp = Exp::new(2.0);1 let v = exp.ind_sample(&mut rand::thread_rng());41 println!("{} is from a Exp(2) distribution", v);4 ```? `lambda` stored as `1/lambda`, since this is what we scale by.BVVautomatically_derivedVmVVallowVmVV unused_qualificationsVV3selffVVV VWWautomatically_derivedWnWWallowWnWW unused_qualificationsWWXXautomatically_derivedXnXXallowXnXX unused_qualificationsXX self XXinlineXnXX X  M= A wrapper for generating types that implement `Rand` via the@' `Sample` & `IndependentSample` traits.*Sup)  [[automatically_derived[n[[allow[n[[ unused_qualifications[[3Sup3[selff[[[ Է[ @ A value with a particular weight for use with `WeightedChoice`.CT׬" The numerical weight of this item% ( The actual item which is being weighted+ \\automatically_derived\o\\allow\o\\ unused_qualifications\\ 3 T׬3\selff\\\   \ ]]automatically_derived]o]]allow]o]] unused_qualifications]]   T׬ ]self ]]inline]o]]  ] ^^automatically_derived^p^^allow^p^^ unused_qualifications^^  T׬^ fH A distribution that selects from a finite collection of weighted items.KA Each item has an associated weight that influences how likely itD/ is to be chosen: higher weight is more likely.2< The `Clone` restriction is a limitation of the `Sample` and?D `IndependentSample` traits. Note that `&T` is (cheaply) `Clone` forGB all `T`, as is `u32`, so one can store references or indices intoE another vector. # Example  ```rust H use rand::distributions::{Weighted, WeightedChoice, IndependentSample};K8 let mut items = vec!(Weighted { weight: 2, item: 'a' },;8 Weighted { weight: 4, item: 'b' },;9 Weighted { weight: 1, item: 'c' });<* let wc = WeightedChoice::new(&mut items);-" let mut rng = rand::thread_rng();% for _ in 0..16 {< // on average prints 'a' 4 times, 'b' 8 and 'c' twice.?. println!("{}", wc.ind_sample(&mut rng));1 } ```'aƼ'aTƼ'a  'a  __automatically_derived_p__allow_p__ unused_qualifications__'aƼ3 'aTƼ'a3Ƽ_selff___ 'aƼ  _ 1 An error that can occur when `test_timer` fails.4 No timer available. . Timer too coarse to use as an entropy source.1   ' Timer is not monotonically increasing.*  ( Variations of deltas of time too small.+ 6 Too many stuck results (indicating no added entropy).9  docq hiddengggautomatically_derivedgqggallowgqgg unused_qualificationsgg self gginlinegqggdocgqgg hiddenggg g h h hautomatically_derived hr h hallow hr h h unused_qualifications h h self other h h hinline hr h h  hiiautomatically_derivediriiallowirii unused_qualificationsii self iiinlineirii ijjautomatically_derivedjsjjallowjsjj unused_qualificationsjj3selffjjj j   'A An RNG that reads random bytes straight from a `Read`. This will D= work best with an infinite reader, but this is not required. @  # Panics  E It will panic if it there is insufficient data to fulfill a request. H  # Example   ```rust  use rand::{read, Rng};  ) let data = vec![1, 2, 3, 4, 5, 6, 7, 8]; ,- let mut rng = read::ReadRng::new(&data[..]); 0$ println!("{:x}", rng.gen::()); ' ``` R    v vautomatically_derived vu v vallow vu v v unused_qualifications v v3R 3 vself f v v v   v    C A wrapper around any RNG which reseeds the underlying RNG after it F0 has generated a certain number of random bytes. 3RRsdr         / Controls the behaviour when reseeding the RNG. 2    x xautomatically_derived xv x xallow xv x x unused_qualifications x x3RRsdr ݮ x 3 xself f x x x   x  : Reseed an RNG using a `Default` instance. This reseeds by =@ replacing the RNG with the result of a `Default::default` call. C  y yautomatically_derived yw y yallow yw y y unused_qualifications y y3self f y y y   y z zautomatically_derived zw z zallow zw z z unused_qualifications z z { {automatically_derived {x { {allow {x { { unused_qualifications { { self   { {inline {x { {   { Rand  Rngǃ ǃ Open01̃  ̃ Open01̃  ̃ Closed01ԃ  ԃ Closed01ԃ  ԃ =    (1u64 << 53) as f64 3    5    5   3 3    3 rng   ^2 Generate a floating point number in the half-openф 5 interval `[0,1)`.  0 See `Closed01` for the closed interval `[0,1]`,х 3, and `Open01` for the open interval `(0,1)`. /׆ inline׆ zՆ   R      rng    inline z    RÈ   Nj   rng    inline z    R   ߎ Rand  Rngǃ ǃ Open01̃  ̃ Open01̃  ̃ Closed01ԃ  ԃ Closed01ԃ  ԃ >    (1u64 << 24) as f32 3           3 3    3 rng   ^2 Generate a floating point number in the half-openф 5 interval `[0,1)`.  0 See `Closed01` for the closed interval `[0,1]`,х 3, and `Open01` for the open interval `(0,1)`. /׆ inline׆ {Ն   R      rng    inline {    RÈ   Nj   rng    inline {    R     A A   ͕ _rng    inline {     R ۩      B AB  ͕    ͕ _rng    inline |     Ԟ R         C ABC  ͕   ͕    ͕ _rng    inline |      R  R             D ABCD  ͕   ͕   ͕    ͕ _rng    inline }       R  R      Ú  ƚ  ɚ  ̚  Ϛ      E ABCDE Ú  ͕  ƚ  ͕  ɚ  ͕  ̚  ͕  Ϛ  ͕ _rng    inline }        R  R      ޚ            F ABCDEF ޚ  ͕   ͕   ͕   ͕   ͕    ͕ _rng    inline ~         R  R                   G ABCDEFG  ͕   ͕   ͕   ͕   ͕   ͕    ͕ _rng    inline           R  R                     H ABCDEFGH  ͕   ͕   ͕   ͕   ͕   ͕   ͕    ͕ _rng    inline             R  R       ě  Ǜ  ʛ  ͛  Л  ӛ  ֛  ٛ           I ABCDEFGHI   ͕  ě  ͕  Ǜ  ͕  ʛ  ͕  ͛  ͕  Л  ͕  ӛ  ͕  ֛  ͕  ٛ  ͕ _rng    inline               R   R                             J ABCDEFGHIJ     ͕   ͕   ͕   ͕   ͕   ͕   ͕   ͕   ͕    ͕ _rng    inline                R   R                               K ABCDEFGHIJ K      ͕   ͕   ͕   ͕   ͕   ͕   ͕   ͕   ͕   ͕    ͕ _rng    inline                 R   R         œ  Ŝ  Ȝ  ˜  Μ  ќ  Ԝ  ל  ڜ  ݜ                L ABCDEFGHIJ K L       ͕  œ  ͕  Ŝ  ͕  Ȝ  ͕  ˜  ͕  Μ  ͕  ќ  ͕  Ԝ  ͕  ל  ͕  ڜ  ͕  ݜ  ͕    ͕ _rng    inline DŽ                 R   R        32        ܝ  ׆ T׬  _rng   s inline    ׆ R ۩   32 - 1    ŝ     ŝ       ܝ  T׬  _rng   s inline    R ۩    32 - 1 - 1     ŝ     ŝ   ŝ   ŝ         ܝ  T׬  _rng   s inline    R ۩   32 - 1 - 1 - 1      ŝ     ŝ   ŝ   ŝ   ŝ   ŝ           ܝ  T׬  _rng   s inline ۊ   R ۩   32 - 1 - 1 - 1 - 1       ŝ     ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ             ܝ  T׬  _rng   s inline    R ۩   32 - 1 - 1 - 1 - 1 - 1        ŝ     ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ    ŝ    ŝ                 ܝ    T  ׬  _rng   s inline     R   ۩   32 - 1 - 1 - 1 - 1 - 1 - 1         ŝ     ŝ   ŝ   ŝ   ŝ   ŝ    ŝ    ŝ     ŝ    ŝ     ŝ    ŝ                   ܝ    T  ׬  _rng   s inline      R    ۩   32 - 1 - 1 - 1 - 1 - 1 - 1 - 1          ŝ     ŝ   ŝ   ŝ    ŝ    ŝ     ŝ    ŝ     ŝ    ŝ     ŝ    ŝ     ŝ    ŝ                    ܝ   ˷ T  ׬  _rng   s inline      R    ۩   "32 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1"            ŝ     ŝ    ŝ    ŝ     ŝ    ŝ     ŝ    ŝ     ŝ    ŝ     ŝ    ŝ    ŝ   ŝ   ŝ   ŝ                     ܝ    T  ׬  _rng   s inline      R    ۩   &32 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1&             ŝ      ŝ     ŝ    ŝ     ŝ    ŝ     ŝ    ŝ     ŝ    ŝ    ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ                        ܝ    T  ׬  _rng   s inline ٔ     R    ۩   *32 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1*              ŝ      ŝ       ŝ     ŝ     ŝ    ŝ     ŝ    ŝ    ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ    ŝ   ŝ                          ܝ    T  ׬  _rng   s inline      R    ۩   .32 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1.               ŝ      ŝ       ŝ     ŝ       ŝ     ŝ    ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ    ŝ   ŝ    ŝ   ŝ                            ܝ    T  ׬  _rng   s inline      R    ۩   232 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 12                ŝ      ŝ       ŝ     ŝ      ŝ    ŝ     ŝ    ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ    ŝ   ŝ    ŝ   ŝ    ŝ   ŝ                              ܝ    T  ׬  _rng   s inline      R    ۩   632 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 16                 ŝ      ŝ      ŝ    ŝ     ŝ    ŝ     ŝ    ŝ     ŝ    ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ    ŝ   ŝ    ŝ   ŝ    ŝ   ŝ    ŝ   ŝ                                ܝ   ыT  ׬  _rng   s inline      R    ۩   :32 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1:                 ŝ     ŝ     ŝ    ŝ     ŝ    ŝ     ŝ    ŝ     ŝ    ŝ     ŝ    ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ    ŝ   ŝ    ŝ   ŝ    ŝ   ŝ    ŝ   ŝ    ŝ   ŝ                                 ܝ   T  ׬  _rng   s inline ˜     R    ۩   >32 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1>                  ŝ     ŝ   ŝ   ŝ     ŝ    ŝ     ŝ    ŝ     ŝ    ŝ     ŝ    ŝ     ŝ    ŝ   ŝ   ŝ   ŝ   ŝ    ŝ   ŝ    ŝ   ŝ    ŝ   ŝ    ŝ   ŝ    ŝ   ŝ   ŝ   ŝ                                   ܝ   T  ׬  _rng   s inline      R    ۩   B32 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1B                   ŝ     ŝ   ŝ   ŝ   ŝ   ŝ     ŝ    ŝ     ŝ    ŝ     ŝ    ŝ     ŝ    ŝ     ŝ    ŝ   ŝ   ŝ    ŝ   ŝ    ŝ   ŝ    ŝ   ŝ    ŝ   ŝ    ŝ   ŝ   ŝ   ŝ   ŝ   ŝ                                      ܝ   T  ׬  _rng   s inline џ     R    ۩   F32 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1F                    ŝ     ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ     ŝ    ŝ     ŝ    ŝ     ŝ    ŝ     ŝ    ŝ     ŝ    ŝ    ŝ   ŝ    ŝ   ŝ    ŝ   ŝ    ŝ   ŝ    ŝ   ŝ   ŝ   ŝ    ŝ    ŝ    !ŝ   !ŝ  !  "                                   ܝ   T  ׬  _rng   s inline      R    ۩   J32 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1J                     ŝ     ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ     ŝ    ŝ     ŝ    ŝ     ŝ    ŝ     ŝ    ŝ      ŝ    ŝ    ŝ   ŝ    ŝ   ŝ    ŝ   ŝ    ŝ   ŝ    ŝ    ŝ    !ŝ   !ŝ  ! "ŝ   "ŝ  " #ŝ   #ŝ  #  $                                     ܝ   T  ׬  _rng   s inline Ϣ     R    ۩   N32 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1N                      ŝ     ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ     ŝ    ŝ     ŝ    ŝ     ŝ    ŝ      ŝ    ŝ      ŝ    ŝ    ŝ   ŝ    ŝ   ŝ     ŝ    ŝ    !ŝ   !ŝ  ! "ŝ   "ŝ  " #ŝ   #ŝ  # $ŝ   $ŝ  $ %ŝ   %ŝ  %  &                                       ܝ   T  ׬  _rng   s inline      R    ۩   V32 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1V                       ŝ     ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ     ŝ    ŝ     ŝ    ŝ      ŝ    ŝ      ŝ    ŝ      ŝ    ŝ     ŝ    ŝ     !ŝ   !ŝ  ! "ŝ   "ŝ  " #ŝ   #ŝ  # $ŝ   $ŝ  $ %ŝ   %ŝ  % &ŝ   &ŝ  & 'ŝ   'ŝ  '  (                                         ܝ   T  ׬  _rng   s inline ť     R    ۩   Z32 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1Z                        ŝ     ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ     ŝ    ŝ      ŝ    ŝ      ŝ    ŝ       ŝ     ŝ      ! ŝ   ! ŝ   ! "ŝ   "ŝ  " #ŝ   #ŝ  # $ŝ   $ŝ  $ %ŝ   %ŝ  % &ŝ   &ŝ  & 'ŝ   'ŝ  ' (ŝ   (ŝ  ( )ŝ   )ŝ  )  *                                           ܝ   T  ׬  _rng   s inline      R    ۩   ^32 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1^                         ŝ     ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ      ŝ    ŝ       ŝ     ŝ      ! ŝ   ! ŝ    ! " ŝ   " ŝ    " # ŝ   # ŝ  # $ŝ   $ŝ  $ %ŝ   %ŝ  % &ŝ   &ŝ  & 'ŝ   'ŝ  ' (ŝ   (ŝ  ( )ŝ   )ŝ  ) *ŝ   *ŝ  * +ŝ   +ŝ  +  ,                                             ܝ   T  ׬  _rng   s inline      R    ۩   b32 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1b                          ŝ     ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ     ŝ    ŝ      ! ŝ   ! ŝ    ! " ŝ   " ŝ    " # ŝ   # ŝ    # $ ŝ   $ ŝ   $ % ŝ   % ŝ  % &ŝ   &ŝ  & 'ŝ   'ŝ  ' (ŝ   (ŝ  ( )ŝ   )ŝ  ) *ŝ   *ŝ  * +ŝ   +ŝ  + ,ŝ   ,ŝ  , -ŝ   -ŝ  -  .                                               ܝ   T  ׬  _rng   s inline      R    ۩   f32 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1f                           ŝ     ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ    ŝ    ŝ     !ŝ   !ŝ   ! "ŝ   "ŝ    " # ŝ   # ŝ    # $ ŝ   $ ŝ    $ % ŝ   % ŝ   % & ŝ   & ŝ   & ' ŝ   ' ŝ  ' (ŝ   (ŝ  ( )ŝ   )ŝ  ) *ŝ   *ŝ  * +ŝ   +ŝ  + ,ŝ   ,ŝ  , -ŝ   -ŝ  - .ŝ   .ŝ  . /ŝ   /ŝ  /  0                                                 ܝ   ׊T  ׬  _rng   s inline      R    ۩   j32 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1j                            ŝ     ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ    ŝ    ŝ    !ŝ   !ŝ   ! "ŝ   "ŝ   " #ŝ   #ŝ   # $ŝ   $ŝ    $ % ŝ   % ŝ    % & ŝ   & ŝ   & ' ŝ   ' ŝ   ' ( ŝ   ( ŝ   ( ) ŝ   ) ŝ  ) *ŝ   *ŝ  * +ŝ   +ŝ  + ,ŝ   ,ŝ  , -ŝ   -ŝ  - .ŝ   .ŝ  . /ŝ   /ŝ  / 0ŝ   0ŝ  0 1ŝ   1ŝ  1  2                                                   ܝ   T  ׬  _rng   s inline ɬ     R    ۩   n32 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1n                             ŝ     ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ    ŝ    ŝ    !ŝ   !ŝ  ! "ŝ   "ŝ   " #ŝ   #ŝ   # $ŝ   $ŝ   $ %ŝ   %ŝ   % &ŝ   &ŝ    & ' ŝ   ' ŝ   ' ( ŝ   ( ŝ   ( ) ŝ   ) ŝ   ) * ŝ   * ŝ   * + ŝ   + ŝ  + ,ŝ   ,ŝ  , -ŝ   -ŝ  - .ŝ   .ŝ  . /ŝ   /ŝ  / 0ŝ   0ŝ  0 1ŝ   1ŝ  1 2ŝ   2ŝ  2 3ŝ   3ŝ  3  4                                                     ܝ   T  ׬  _rng   s inline      R    ۩   r32 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1r                              ŝ     ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ    ŝ    ŝ    !ŝ   !ŝ  ! "ŝ   "ŝ  " #ŝ   #ŝ   # $ŝ   $ŝ   $ %ŝ   %ŝ   % &ŝ   &ŝ   & 'ŝ   'ŝ   ' (ŝ   (ŝ   ( ) ŝ   ) ŝ   ) * ŝ   * ŝ   * + ŝ   + ŝ   + , ŝ   , ŝ   , - ŝ   - ŝ  - .ŝ   .ŝ  . /ŝ   /ŝ  / 0ŝ   0ŝ  0 1ŝ   1ŝ  1 2ŝ   2ŝ  2 3ŝ   3ŝ  3 4ŝ   4ŝ  4 5ŝ   5ŝ  5  6                                                       ܝ   T  ׬  _rng   s inline      R    ۩   v32 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1v                               ŝ     ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ    ŝ    ŝ    !ŝ   !ŝ  ! "ŝ   "ŝ  " #ŝ   #ŝ  # $ŝ   $ŝ   $ %ŝ   %ŝ   % &ŝ   &ŝ   & 'ŝ   'ŝ   ' (ŝ   (ŝ   ( )ŝ   )ŝ  ) *ŝ   *ŝ   * + ŝ   + ŝ   + , ŝ   , ŝ   , - ŝ   - ŝ   - . ŝ   . ŝ   . / ŝ   / ŝ  / 0ŝ   0ŝ  0 1ŝ   1ŝ  1 2ŝ   2ŝ  2 3ŝ   3ŝ  3 4ŝ   4ŝ  4 5ŝ   5ŝ  5 6ŝ   6ŝ  6 7ŝ   7ŝ  7  8                                                         ܝ   T  ׬  _rng   s inline Ͱ     R    ۩   z32 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1z                                ŝ     ŝ   ŝ   ŝ   ŝ   ŝ    ŝ    ŝ    !ŝ   !ŝ  ! "ŝ   "ŝ  " #ŝ   #ŝ  # $ŝ   $ŝ  $ %ŝ   %ŝ   % &ŝ   &ŝ   & 'ŝ   'ŝ   ' (ŝ   (ŝ   ( )ŝ   )ŝ   ) *ŝ   *ŝ  * +ŝ   +ŝ  + ,ŝ   ,ŝ   , - ŝ   - ŝ   - . ŝ   . ŝ   . / ŝ   / ŝ   / 0 ŝ   0 ŝ   0 1 ŝ   1 ŝ  1 2ŝ   2ŝ  2 3ŝ   3ŝ  3 4ŝ   4ŝ  4 5ŝ   5ŝ  5 6ŝ   6ŝ  6 7ŝ   7ŝ  7 8ŝ   8ŝ  8 9ŝ   9ŝ  9  :                                                           ܝ   T  ׬  _rng   s inline      R    ۩   ~32 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1~                                 ŝ     ŝ   ŝ   ŝ    ŝ    ŝ    !ŝ   !ŝ  ! "ŝ   "ŝ  " #ŝ   #ŝ  # $ŝ   $ŝ  $ %ŝ   %ŝ  % &ŝ   &ŝ   & 'ŝ   'ŝ   ' (ŝ   (ŝ   ( )ŝ   )ŝ   ) *ŝ   *ŝ   * +ŝ   +ŝ  + ,ŝ   ,ŝ  , -ŝ   -ŝ  - .ŝ   .ŝ   . / ŝ   / ŝ   / 0 ŝ   0 ŝ   0 1 ŝ   1 ŝ   1 2 ŝ   2 ŝ   2 3 ŝ   3 ŝ  3 4ŝ   4ŝ  4 5ŝ   5ŝ  5 6ŝ   6ŝ  6 7ŝ   7ŝ  7 8ŝ   8ŝ  8 9ŝ   9ŝ  9 :ŝ   :ŝ  : ;ŝ   ;ŝ  ;  <                                                             ܝ   T  ׬  _rng   s inline      R    ۩   32 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1                                   ŝ     ŝ    ŝ    ŝ    !ŝ   !ŝ  ! "ŝ   "ŝ  " #ŝ   #ŝ  # $ŝ   $ŝ  $ %ŝ   %ŝ  % &ŝ   &ŝ  & 'ŝ   'ŝ   ' (ŝ   (ŝ   ( )ŝ   )ŝ   ) *ŝ   *ŝ   * +ŝ   +ŝ   + ,ŝ   ,ŝ  , -ŝ   -ŝ  - .ŝ   .ŝ  . /ŝ   /ŝ  / 0ŝ   0ŝ   0 1 ŝ   1 ŝ   1 2 ŝ   2 ŝ   2 3 ŝ   3 ŝ   3 4 ŝ   4 ŝ   4 5 ŝ   5 ŝ  5 6ŝ   6ŝ  6 7ŝ   7ŝ  7 8ŝ   8ŝ  8 9ŝ   9ŝ  9 :ŝ   :ŝ  : ;ŝ   ;ŝ  ; <ŝ   <ŝ  < =ŝ   =ŝ  =  >                                                               ܝ   T  ׬  _rng   s inline      R    ۩   ͟ 32 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 !                                   ŝ      ŝ    !ŝ   !ŝ  ! "ŝ   "ŝ  " #ŝ   #ŝ  # $ŝ   $ŝ  $ %ŝ   %ŝ  % &ŝ   &ŝ  & 'ŝ   'ŝ  ' (ŝ   (ŝ   ( )ŝ   )ŝ   ) *ŝ   *ŝ   * +ŝ   +ŝ   + ,ŝ   ,ŝ   , -ŝ   -ŝ  - .ŝ   .ŝ  . /ŝ   /ŝ  / 0ŝ   0ŝ  0 1ŝ   1ŝ  1 2ŝ   2ŝ   2 3 ŝ   3 ŝ   3 4 ŝ   4 ŝ   4 5 ŝ   5 ŝ   5 6 ŝ   6 ŝ   6 7 ŝ   7 ŝ  7 8ŝ   8ŝ  8 9ŝ   9ŝ  9 :ŝ   :ŝ  : ;ŝ   ;ŝ  ; <ŝ   <ŝ  < =ŝ   =ŝ  = >ŝ   >ŝ  > ?ŝ   ?ŝ   ?  @                                                                 ȟ `  T  ׬͟ _rng   /    R    ۩   STATE_WORDS        STATE_WORDS         @ A random number generator that uses the ChaCha20 algorithm [1]. C 8 The ChaCha algorithm is widely accepted as suitable for ;= cryptographic purposes, but this implementation has not been @A verified as such. Prefer a generator like `OsRng` that defers to D8 the operating system for cases that need high security. ; - [1]: D. J. Bernstein, [*ChaCha, a variant of 0' Salsa20*](http://cr.yp.to/chacha.html) *                 automatically_derived   allow    unused_qualifications   3self f          automatically_derived   allow    unused_qualifications    self    inline    Ƞ     automatically_derived ͷ  allow η   unused_qualifications  RAND_SIZE_USIZE        RAND_SIZE_USIZEܡ ܡ ܡ ܡ ܡ ܡ ܡ ܡ   < A random number generator that uses the ISAAC algorithm[1]. ? : The ISAAC algorithm is generally accepted as suitable for =; cryptographic purposes, but this implementation has not be >A verified as such. Prefer a generator like `OsRng` that defers to D8 the operating system for cases that need high security. ; > [1]: Bob Jenkins, [*ISAAC: A fast cryptographic random number A@ generator*](http://www.burtleburtle.net/bob/rand/isaacafa.html) C          ѡ ѡ                  automatically_derived   allow    unused_qualifications   RAND_SIZE_64        RAND_SIZE_64         < A random number generator that uses ISAAC-64[1], the 64-bit ? variant of the ISAAC algorithm. # : The ISAAC algorithm is generally accepted as suitable for =; cryptographic purposes, but this implementation has not be >A verified as such. Prefer a generator like `OsRng` that defers to D8 the operating system for cases that need high security. ; > [1]: Bob Jenkins, [*ISAAC: A fast cryptographic random number A@ generator*](http://www.burtleburtle.net/bob/rand/isaacafa.html) C ʻ                           automatically_derived   allow    unused_qualifications  ʻʻ  V An Xorshift[1] random number  generator.  B The Xorshift algorithm is not suitable for cryptographic purposes E@ but is very fast. If you do not know for sure that it fits your CC requirements, use a more secure one such as `IsaacRng` or `OsRng`. F / [1]: Marsaglia, George (July 2003). ["Xorshift 2< RNGs"](http://www.jstatsoft.org/v08/i14/paper). *Journal of ?* Statistical Software*. Vol. 8 (Issue 14). - allow    missing_copy_implementations  &               automatically_derived   allow    unused_qualifications   allow    missing_copy_implementations  & 3self f          automatically_derived   allow    unused_qualifications   allow    missing_copy_implementations  &  self    inline       Ƕ ʶ f7 Iterator which will generate a stream of random items.ȴ:A This iterator is created via the [`gen_iter`] method on [`Rng`].D̵- [`gen_iter`]: trait.Rng.html#method.gen_iterе0 [`Rng`]: trait.Rng.html   'aƼ'a T R    Ƕʶ 'a̶ֶֶֶ 'a  'ó    automatically_derivedallow unused_qualifications   'aƼ3'a T R      'a̶3selff  'aƼ   غź;C Iterator which will continuously generate random ascii characters.FH This iterator is created via the [`gen_ascii_chars`] method on [`Rng`].Kʹ; [`gen_ascii_chars`]: trait.Rng.html#method.gen_ascii_charsι> [`Rng`]: trait.Rng.html   'a'a R    ۩غ 'aں 'a  automatically_derivedallow unused_qualifications   'a3'a R   ۩ 'aں3selff  'a    A A wrapper for generating floating point numbers uniformly in theD7 open interval `(0,1)` (not including either endpoint).:@ Use `Closed01` for the closed interval `[0,1]`, and the defaultC< `Rand` implementation for `f32` and `f64` for the half-open? `[0,1)`.  # Example  ```rust  use rand::{random, Open01};+ let Open01(val) = random::>();.% println!("f32 from (0,1): {}", val);( ```  FF         automatically_derivedallow unused_qualifications 3F  3selff     A A wrapper for generating floating point numbers uniformly in theD4 closed interval `[0,1]` (including both endpoints).7> Use `Open01` for the closed interval `(0,1)`, and the defaultA; `Rand` implementation of `f32` and `f64` for the half-open> `[0,1)`.  # Example  ```rust  use rand::{random, Closed01};!/ let Closed01(val) = random::>();2% println!("f32 from [0,1]: {}", val);( ```  F         automatically_derivedallow unused_qualifications 3F  selff    ,B The standard RNG. This is designed to be efficient on the currentE platform. ʻ  automatically_derivedallow unused_qualifications 3 selff     automatically_derivedallow unused_qualifications   self inline    automatically_derivedallow unused_qualifications   / Controls how the thread-local RNG is reseeded.2cfg featurestd     automatically_derivedallow unused_qualifications 3 selff      > The thread-local RNG.cfg featurestd     automatically_derivedallow unused_qualifications 3 selff     automatically_derivedallow unused_qualifications   self inline    { #[inline] fn __init() -> Rc> { { let r = match StdRng::new() { Ok(r) => r, Err(e) => { ::std::rt::begin_panic_fmt(&::core::fmt::Arguments::new_v1(&["No entropy available: "], &match (&e,) { (arg0,) => [::core::fmt::ArgumentV1::new(arg0, ::core::fmt::Display::fmt)], })) } }; let rng = reseeding::ReseedingRng::new(r, THREAD_RNG_RESEED_THRESHOLD, ThreadRngReseeder); Rc::new(RefCell::new(rng)) } } unsafe fn __getit() -> ::std::option::Option<&'static Rc>> { #[thread_local] #[cfg(all(target_thread_local, not(all(target_arch = "wasm32", not(target_feature = "atomics"))),))] static __KEY: ::std::thread::__FastLocalKeyInner>> = ::std::thread::__FastLocalKeyInner::new(); #[allow(unused_unsafe)] unsafe { __KEY.get(__init) } } unsafe { ::std::thread::LocalKey::new(__getit) } } k        &    & k k MҒ  &  k΍ ˍ  inline      :    w  thread_local  Ő cfgŐ Ȑ ߑ  allɐ ̐ ޑ  target_thread_local   not  ˑ  all  ʑ  target_arch  wasm32   not  ɑ  target_feature  atomics ̑ Ð   * (   * w w ' w  о  b         փ ̈́ ą   NJ                   MEMORY_SIZE         88ͲͲͲͲͲͲͲ4       8                    Ǚ   KEY_WORDS        KEY_WORDS        KEY_WORDS         KEY_WORDS        KEY_WORDS                                i                          i                   i                   i   'a        γ ѳ x                           i                          i                   i                   i  ˟ 'a³ ͟ џ ˟ П ͟   ˟ ̟ x͟ ˟  ߥ 4         γ                  γ ѳ   x  4         γ                  ѳ   x              !                   32         32 - 1    ŝ     ŝ         32 - 1 - 1     ŝ     ŝ   ŝ   ŝ          32 - 1 - 1 - 1      ŝ     ŝ   ŝ   ŝ   ŝ   ŝ            32 - 1 - 1 - 1 - 1       ŝ     ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ              32 - 1 - 1 - 1 - 1 - 1        ŝ     ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ    ŝ    ŝ                  32 - 1 - 1 - 1 - 1 - 1 - 1         ŝ     ŝ   ŝ   ŝ   ŝ   ŝ    ŝ    ŝ     ŝ    ŝ     ŝ    ŝ                    32 - 1 - 1 - 1 - 1 - 1 - 1 - 1          ŝ     ŝ   ŝ   ŝ    ŝ    ŝ     ŝ    ŝ     ŝ    ŝ     ŝ    ŝ     ŝ    ŝ                     "32 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1"            ŝ     ŝ    ŝ    ŝ     ŝ    ŝ     ŝ    ŝ     ŝ    ŝ     ŝ    ŝ    ŝ   ŝ   ŝ   ŝ                      &32 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1&             ŝ      ŝ     ŝ    ŝ     ŝ    ŝ     ŝ    ŝ     ŝ    ŝ    ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ                         *32 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1*              ŝ      ŝ       ŝ     ŝ     ŝ    ŝ     ŝ    ŝ    ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ    ŝ   ŝ                           .32 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1.               ŝ      ŝ       ŝ     ŝ       ŝ     ŝ    ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ    ŝ   ŝ    ŝ   ŝ                             232 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 12                ŝ      ŝ       ŝ     ŝ      ŝ    ŝ     ŝ    ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ    ŝ   ŝ    ŝ   ŝ    ŝ   ŝ                               632 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 16                 ŝ      ŝ      ŝ    ŝ     ŝ    ŝ     ŝ    ŝ     ŝ    ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ    ŝ   ŝ    ŝ   ŝ    ŝ   ŝ    ŝ   ŝ                                 :32 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1:                 ŝ     ŝ     ŝ    ŝ     ŝ    ŝ     ŝ    ŝ     ŝ    ŝ     ŝ    ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ    ŝ   ŝ    ŝ   ŝ    ŝ   ŝ    ŝ   ŝ    ŝ   ŝ                                  >32 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1>                  ŝ     ŝ   ŝ   ŝ     ŝ    ŝ     ŝ    ŝ     ŝ    ŝ     ŝ    ŝ     ŝ    ŝ   ŝ   ŝ   ŝ   ŝ    ŝ   ŝ    ŝ   ŝ    ŝ   ŝ    ŝ   ŝ    ŝ   ŝ   ŝ   ŝ                                    B32 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1B                   ŝ     ŝ   ŝ   ŝ   ŝ   ŝ     ŝ    ŝ     ŝ    ŝ     ŝ    ŝ     ŝ    ŝ     ŝ    ŝ   ŝ   ŝ    ŝ   ŝ    ŝ   ŝ    ŝ   ŝ    ŝ   ŝ    ŝ   ŝ   ŝ   ŝ   ŝ   ŝ                                       F32 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1F                    ŝ     ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ     ŝ    ŝ     ŝ    ŝ     ŝ    ŝ     ŝ    ŝ     ŝ    ŝ    ŝ   ŝ    ŝ   ŝ    ŝ   ŝ    ŝ   ŝ    ŝ   ŝ   ŝ   ŝ    ŝ    ŝ    !ŝ   !ŝ  !  "                                    J32 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1J                     ŝ     ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ     ŝ    ŝ     ŝ    ŝ     ŝ    ŝ     ŝ    ŝ      ŝ    ŝ    ŝ   ŝ    ŝ   ŝ    ŝ   ŝ    ŝ   ŝ    ŝ    ŝ    !ŝ   !ŝ  ! "ŝ   "ŝ  " #ŝ   #ŝ  #  $                                      N32 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1N                      ŝ     ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ     ŝ    ŝ     ŝ    ŝ     ŝ    ŝ      ŝ    ŝ      ŝ    ŝ    ŝ   ŝ    ŝ   ŝ     ŝ    ŝ    !ŝ   !ŝ  ! "ŝ   "ŝ  " #ŝ   #ŝ  # $ŝ   $ŝ  $ %ŝ   %ŝ  %  &                                        V32 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1V                       ŝ     ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ     ŝ    ŝ     ŝ    ŝ      ŝ    ŝ      ŝ    ŝ      ŝ    ŝ     ŝ    ŝ     !ŝ   !ŝ  ! "ŝ   "ŝ  " #ŝ   #ŝ  # $ŝ   $ŝ  $ %ŝ   %ŝ  % &ŝ   &ŝ  & 'ŝ   'ŝ  '  (                                          Z32 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1Z                        ŝ     ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ     ŝ    ŝ      ŝ    ŝ      ŝ    ŝ       ŝ     ŝ      ! ŝ   ! ŝ   ! "ŝ   "ŝ  " #ŝ   #ŝ  # $ŝ   $ŝ  $ %ŝ   %ŝ  % &ŝ   &ŝ  & 'ŝ   'ŝ  ' (ŝ   (ŝ  ( )ŝ   )ŝ  )  *                                            ^32 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1^                         ŝ     ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ      ŝ    ŝ       ŝ     ŝ      ! ŝ   ! ŝ    ! " ŝ   " ŝ    " # ŝ   # ŝ  # $ŝ   $ŝ  $ %ŝ   %ŝ  % &ŝ   &ŝ  & 'ŝ   'ŝ  ' (ŝ   (ŝ  ( )ŝ   )ŝ  ) *ŝ   *ŝ  * +ŝ   +ŝ  +  ,                                              b32 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1b                          ŝ     ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ     ŝ    ŝ      ! ŝ   ! ŝ    ! " ŝ   " ŝ    " # ŝ   # ŝ    # $ ŝ   $ ŝ   $ % ŝ   % ŝ  % &ŝ   &ŝ  & 'ŝ   'ŝ  ' (ŝ   (ŝ  ( )ŝ   )ŝ  ) *ŝ   *ŝ  * +ŝ   +ŝ  + ,ŝ   ,ŝ  , -ŝ   -ŝ  -  .                                                f32 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1f                           ŝ     ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ    ŝ    ŝ     !ŝ   !ŝ   ! "ŝ   "ŝ    " # ŝ   # ŝ    # $ ŝ   $ ŝ    $ % ŝ   % ŝ   % & ŝ   & ŝ   & ' ŝ   ' ŝ  ' (ŝ   (ŝ  ( )ŝ   )ŝ  ) *ŝ   *ŝ  * +ŝ   +ŝ  + ,ŝ   ,ŝ  , -ŝ   -ŝ  - .ŝ   .ŝ  . /ŝ   /ŝ  /  0                                                  j32 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1j                            ŝ     ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ    ŝ    ŝ    !ŝ   !ŝ   ! "ŝ   "ŝ   " #ŝ   #ŝ   # $ŝ   $ŝ    $ % ŝ   % ŝ    % & ŝ   & ŝ   & ' ŝ   ' ŝ   ' ( ŝ   ( ŝ   ( ) ŝ   ) ŝ  ) *ŝ   *ŝ  * +ŝ   +ŝ  + ,ŝ   ,ŝ  , -ŝ   -ŝ  - .ŝ   .ŝ  . /ŝ   /ŝ  / 0ŝ   0ŝ  0 1ŝ   1ŝ  1  2                                                    n32 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1n                             ŝ     ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ    ŝ    ŝ    !ŝ   !ŝ  ! "ŝ   "ŝ   " #ŝ   #ŝ   # $ŝ   $ŝ   $ %ŝ   %ŝ   % &ŝ   &ŝ    & ' ŝ   ' ŝ   ' ( ŝ   ( ŝ   ( ) ŝ   ) ŝ   ) * ŝ   * ŝ   * + ŝ   + ŝ  + ,ŝ   ,ŝ  , -ŝ   -ŝ  - .ŝ   .ŝ  . /ŝ   /ŝ  / 0ŝ   0ŝ  0 1ŝ   1ŝ  1 2ŝ   2ŝ  2 3ŝ   3ŝ  3  4                                                      r32 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1r                              ŝ     ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ    ŝ    ŝ    !ŝ   !ŝ  ! "ŝ   "ŝ  " #ŝ   #ŝ   # $ŝ   $ŝ   $ %ŝ   %ŝ   % &ŝ   &ŝ   & 'ŝ   'ŝ   ' (ŝ   (ŝ   ( ) ŝ   ) ŝ   ) * ŝ   * ŝ   * + ŝ   + ŝ   + , ŝ   , ŝ   , - ŝ   - ŝ  - .ŝ   .ŝ  . /ŝ   /ŝ  / 0ŝ   0ŝ  0 1ŝ   1ŝ  1 2ŝ   2ŝ  2 3ŝ   3ŝ  3 4ŝ   4ŝ  4 5ŝ   5ŝ  5  6                                                        v32 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1v                               ŝ     ŝ   ŝ   ŝ   ŝ   ŝ   ŝ   ŝ    ŝ    ŝ    !ŝ   !ŝ  ! "ŝ   "ŝ  " #ŝ   #ŝ  # $ŝ   $ŝ   $ %ŝ   %ŝ   % &ŝ   &ŝ   & 'ŝ   'ŝ   ' (ŝ   (ŝ   ( )ŝ   )ŝ  ) *ŝ   *ŝ   * + ŝ   + ŝ   + , ŝ   , ŝ   , - ŝ   - ŝ   - . ŝ   . ŝ   . / ŝ   / ŝ  / 0ŝ   0ŝ  0 1ŝ   1ŝ  1 2ŝ   2ŝ  2 3ŝ   3ŝ  3 4ŝ   4ŝ  4 5ŝ   5ŝ  5 6ŝ   6ŝ  6 7ŝ   7ŝ  7  8                                                          z32 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1z                                ŝ     ŝ   ŝ   ŝ   ŝ   ŝ    ŝ    ŝ    !ŝ   !ŝ  ! "ŝ   "ŝ  " #ŝ   #ŝ  # $ŝ   $ŝ  $ %ŝ   %ŝ   % &ŝ   &ŝ   & 'ŝ   'ŝ   ' (ŝ   (ŝ   ( )ŝ   )ŝ   ) *ŝ   *ŝ  * +ŝ   +ŝ  + ,ŝ   ,ŝ   , - ŝ   - ŝ   - . ŝ   . ŝ   . / ŝ   / ŝ   / 0 ŝ   0 ŝ   0 1 ŝ   1 ŝ  1 2ŝ   2ŝ  2 3ŝ   3ŝ  3 4ŝ   4ŝ  4 5ŝ   5ŝ  5 6ŝ   6ŝ  6 7ŝ   7ŝ  7 8ŝ   8ŝ  8 9ŝ   9ŝ  9  :                                                            ~32 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1~                                 ŝ     ŝ   ŝ   ŝ    ŝ    ŝ    !ŝ   !ŝ  ! "ŝ   "ŝ  " #ŝ   #ŝ  # $ŝ   $ŝ  $ %ŝ   %ŝ  % &ŝ   &ŝ   & 'ŝ   'ŝ   ' (ŝ   (ŝ   ( )ŝ   )ŝ   ) *ŝ   *ŝ   * +ŝ   +ŝ  + ,ŝ   ,ŝ  , -ŝ   -ŝ  - .ŝ   .ŝ   . / ŝ   / ŝ   / 0 ŝ   0 ŝ   0 1 ŝ   1 ŝ   1 2 ŝ   2 ŝ   2 3 ŝ   3 ŝ  3 4ŝ   4ŝ  4 5ŝ   5ŝ  5 6ŝ   6ŝ  6 7ŝ   7ŝ  7 8ŝ   8ŝ  8 9ŝ   9ŝ  9 :ŝ   :ŝ  : ;ŝ   ;ŝ  ;  <                                                              32 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1                                   ŝ     ŝ    ŝ    ŝ    !ŝ   !ŝ  ! "ŝ   "ŝ  " #ŝ   #ŝ  # $ŝ   $ŝ  $ %ŝ   %ŝ  % &ŝ   &ŝ  & 'ŝ   'ŝ   ' (ŝ   (ŝ   ( )ŝ   )ŝ   ) *ŝ   *ŝ   * +ŝ   +ŝ   + ,ŝ   ,ŝ  , -ŝ   -ŝ  - .ŝ   .ŝ  . /ŝ   /ŝ  / 0ŝ   0ŝ   0 1 ŝ   1 ŝ   1 2 ŝ   2 ŝ   2 3 ŝ   3 ŝ   3 4 ŝ   4 ŝ   4 5 ŝ   5 ŝ  5 6ŝ   6ŝ  6 7ŝ   7ŝ  7 8ŝ   8ŝ  8 9ŝ   9ŝ  9 :ŝ   :ŝ  : ;ŝ   ;ŝ  ; <ŝ   <ŝ  < =ŝ   =ŝ  =  >                                                                32 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 !                                   ŝ      ŝ    !ŝ   !ŝ  ! "ŝ   "ŝ  " #ŝ   #ŝ  # $ŝ   $ŝ  $ %ŝ   %ŝ  % &ŝ   &ŝ  & 'ŝ   'ŝ  ' (ŝ   (ŝ   ( )ŝ   )ŝ   ) *ŝ   *ŝ   * +ŝ   +ŝ   + ,ŝ   ,ŝ   , -ŝ   -ŝ  - .ŝ   .ŝ  . /ŝ   /ŝ  / 0ŝ   0ŝ  0 1ŝ   1ŝ  1 2ŝ   2ŝ   2 3 ŝ   3 ŝ   3 4 ŝ   4 ŝ   4 5 ŝ   5 ŝ   5 6 ŝ   6 ŝ   6 7 ŝ   7 ŝ  7 8ŝ   8ŝ  8 9ŝ   9ŝ  9 :ŝ   :ŝ  : ;ŝ   ;ŝ  ; <ŝ   <ŝ  < =ŝ   =ŝ  = >ŝ   >ŝ  > ?ŝ   ?ŝ   ?  @                                                                  STATE_WORDS        STATE_WORDS       >ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789?>>7*i\}Xv5mU14rv6svW'4/V73?MGY5 LOWZ_Ag[ob-+w@!Z9&''g?>VVWXXZZZZZ9[[x[[e\X\\7]*]n]]]"^N_A__J`=``a:aBaJafgjhhliko5oVo|oooopj+pXpppq_qqq`rr{ssuwyz0{{|_|9|+}(~>$j3d:a6 e4p?X\uݡNڨqz9]޴4SĶ^ {nӹ$qwϺCRտj$ `:'}]5s+3; M1a@q!Q 3b%-K5h= zE~~bax .WJs]ay2  L    mFi HR&>E0>/^ \Z!!Y#"$$%E%%&c&N&V((a(&))5*V*+,,o,%-k-?:.l. .5677;y8zCz4{HSVZb0fhnr{{|k||}o}}}o~~Pyn6"* !{Ջ'hJ`C֐/yɖ2! TA;\}ܨϨ%YȬR#0+d3);"]̲CVKŴ4Sh[-zcikָ۾~/KB'9.T I=2yX e.p!fpoNbkF?b-"v(gNbR{\xe'`SDc4'  2 % C   B c   ; \   =^Qu7Lb$eJRDfqA> s!!|D"}"##%8%&&\''((((3))&))q*T*\*d*(++++++,------./m/u/}////011111111343333334 456R6Z6b6j6r6z6666:8Z99 999%9-959=9E9M9;H<;;;< <<<#<+<3<;</>i?? ???$?,?4?[NKbNPi@Q ϷѸL 9+k]~Zx7oW36tx8u xY(60X85@OH[6 NPX\`Ch]p!c/-xB"_:&' 'h?>VVWXX ZZZZZ;[[y[[g\Y\\9]+]p]]]$^P_B__L`>``a;aCaKafgohhqiko6oWo}oooopj,pZpppqaqqqbrr}ssuwyz2{{|a|>|-}-~@&l8f@g7 g6rA]ş^z Pܨr"Ŵ;_ߴ6Uƶ`}oչ&vyѺHT׿l& b<(_7u,4< N3cBs#S5d&.P6j> |Fgf} 0\Lu_f~4  Q    rHk  JT(?F5?4` ]\!!^#"$$%G%% &e&O&X((b(())7*X*+,,t,'-p-D<.n. .5677;y=zCz9{HSV Zb2fhnr{{|m||}q}}}q~~ R{p;$,#}׋)jLaEא1{˖4" ZB<]~ިШ' [ʬT$î2,f4+<$_βDXLǴ6Tj\/|dklܸݾ1M D)?/VK?4{Z j0r#hqqPhqGAd/$x.iPhS}^~f(bTFd6(  4 & E   D e   = ^   ?`Sw9Nd& kKSEg w$C@" t!!}F""#$%:%&&^''*(((5))'))s*U*]*e**++++++,------./n/v/~////011111111343333334 456S6[6c6k6s6{6666<8\99999&9.969>9F9N9;J<;;;< <<<$<,<4<<<1>k?? ???%?-?5?=?E?M?U?]?xA BQBaB)C&DCCE GEEmGnJHHcJMJKMQwNNQ\VRRVj=[WAW[.`3\c\Ga$Tgabygm hEh5n>uno{u|vOvK}PC}#~('9Bi*$v$ۘ,,עq55]}?v?m.II 7S,T3^X_yjk}!vNws+7l"a#ΞJ2#u$K32]C3c4C [TSDDT eQUUEf&wfkgYx&xy>rjjŽt&ՑR]~•I*uG9[yYa*aKSҦĦY̪?]OMcPRo!BW ѷӸM <,n^[y:rZ69w {;x!{\)91[98ARI^7 QQY_aFiaq%d01yE#`;&'!'i??VVWXX ZZZZZ>[[z[[j\Z\\<],]q]]]%^S_C__O`?``a%-&ڋ,kOdFؐ4~Ζ5# [C?`Ѩ*#^ͬW%Ʈ5-i5.='bѲE[Mʴ9Uõm]2e!nmݸ½4P#G,B2YNB7~]m3u&"kttSirHDg 2'{/mTiWbg+eUIe9)  7 ' H   E f   > _   @a W{=Rh* lLTIk "x%GD& u!!~J""#$ %>%&&b''.(((9) )())w*V*^*f*.++++++,------./o/w/////011111111343333334 456T6\6d6l6t6|6666@8`99999'9/979?9G9O9!;N<;;;< <<<%<-<5<=<5>o?????&?.?6?>?F?N?V?^?|ABRBbB-C'DCCEGEEqGoJHHgJMJKMQxNNQ]#VRRVkA[WBW[/`4\d\Ka%Ugab}gmhFh9n?unou|vPvO}QG}$~)+:Cj+$w$ܘ,,آu55^?w?n/II ;S-T4^Y_z!jk"vOwt/8m#e#ϞK2#v$O33aC3d4C!_TTDDT!eRUUIf'wflg]x'xy?snkƎu *֑V^ƕ!M+yH=_zZb-dLTզŦZͪ@`PP fSUr$E XԷָ P324dMy20yP</~q1~q1R@2Q?H= WUs<V j77?3&'a?VXX4ZZZD[[[`\\2]w]]^I__E``RaefahhEi ko@oaooooo p6pSppp*qZqqqlrrvs]ubwy?zzܐ}{{|||w~51vǖ-A3`@k&Cצkok/]ѶkFv13Q'w/iCoUk\ nl0~.@=c"vYtFnj S  D   Agw 3?8 !!!4#$$ %s%%&p&$(Q(((2)^)0*++?,,|-.5.y..P66749@y+zwEz{YL`UX"]chg&jn u{|v||}z}}z~~[ yDž\Q|Nv2_VZ::)OIEfרS«M*^#WƱQ.b'9ܷ(t˸Ƚ־y\!M".8OD"8-S6_kNw zzI,UNl ( sI.WW<m1[OM/  - N  $    $LpeznZOq(d<9)!{!!?""##%A&&'W''#((.))l*[++ --./01E3456n8U9O;C<c>d?ABZCD2EGGIJzMNQRVV6[[`xaggmfnuu||}<օ ( Dh|Nv\2"#2|3VCCTTTevfwxat̎В0\̕'SÚښ!Ce|-h3Z˦FVW۰lZ\;F۷.DCubAy`<@~A~b@a?YdWfMh+ 77K)fB!&'p?VWXZZZD[[[q\\B]w]],^Z__V``afgyhh{i#ko@oaooooo p6peppp*qlqqqlrrssu wyz={{|l|H|5}Ñ7 ~\K1vǖlGAr@|Kh[ (|ϴiA]Ѷk ø1ۺR\߿'w1mCi=}  9mL}.^?nZt%#q7W j >  [   Sr"U  ^3P?Jk dg!!h#$$%Q%%&p&V&c(((2))B*`*+,,2--G.y.. 56%77;yEzC zA{#HS VZb 9f h#nr{|v||}z}}z~~[yE,3   ,2q VjL ސ:Ԗ;,aEf1*eԬ^ͮ<Ưp5.iزb Ѵ@ʵt9(tȽ:M2H 8_T "H=ct{,(q zzY oNJ$m8- sZ o]h1kO!k?  = N   l  e  g]CXn0sOq!(~MJ- !!R""#$%E%&&j''6((A))*6+,,-./01 3%456H8h9);V<=>w?AB4CD EGxG JnJMMQQ+VVI[[`Ra#ggm@n%uu|V}O3|'B(6  #l#2V3iCCgTTePfxdxz t̎" 0\̕ 'SÚO !Ce3kܦ`gWlZ\xL^۷ ݸ(XxA&Cu!C>A`@AbaYfM.h EWYZZ[q\B]]Z_V`'hn epplq:rs  %r| ϴiA ø1,e$Cm}.?t% S"$%&c((* B*+,G.56 {$~6g;*^Ư.bʵqf w`K@t]X@`A69{v<P96CMDL}o   $    ]&4 n !R"# %&j'6(A)*,-/1%46h9V<w?BDG JMQ+VI[`#gm%u|O3' #2iCgTexVwߝpԠy2gkǮES*I ׵ֶD:v8BaBA%B%7cF8bE[ ]hyOjM =)fB!&'''p??X:ZZZJ[[\s\\D]}]]_\__X``dfyhh{io%oFogooooopjy(bM@<x 9_XTBdC62;xT}vr>R5;y64EODB7USNs    T  * K   # D   %F*]k(6tUw. + p0!!!T""$%H&& 'l''8((C))*b+ ,--./11L3'456u8j9V;X<j>y?ABhBaC-DC9EGEGJ%HJMKNQN%R-VRVK[IW[6`k\a\%gbg mMhmnF'u ou |Wv}XQ+~݅05q/~$',ߢ5)e~?uKIo4T;`_Uk)Vwc ?9t ##R2}$3kCk4CiTDT(eU}f.xsgxy\zqҎ{6ܑbdҕ -Y1ɚwO'Ikr֠4}94imӪ^ɮ&GUr!a,I *ٵض (B!DJ--;N<M%f ~RF/XKZS[\\]__`ep5qqwrhumwyJzz {{*|||~%s<Җv>KȠ^ƪvhܶ(vU@d:/ x:[\}-?O%Q~ )r MB* %!u!$~%%&p8((=)+J,-..b67B9@EhLsUX5]cwg9jn3u5|||4}}~~!jӀÁڅo\YFaEȜ_ƪ^ѫƭ9m.bձ ʳ=q2D3g,[.X# A>Y7}w:~9G^f /py";9!!"Q&''(*x+*-/'1r358;>AnCFEGJ(N2RV[agznu}Ύ<4·X|*b$pF#3DUfx Ǐ `9ͤܪg/f+dDEfe`RoZZ[v\n_j`jpqq?r{Fq!2Cx1'$$%&h((+,L.{6~0;j@0d̯4hеvi|ePCb[EF9yAU>9RGQ `+9s !\"%&t'?(N)*,-/1J469<?BD&GJMQ:VX[a2gm4u}^B*6#3xCvTexzu٠{J$/Lܵ o,gH  _XO:W$\?%?F`E_-xZXHX^Zc[!\\]1_`ae opFqqrzuwwyUzz{{:||}~-ȐyE.RWԞ cִz1_IsCAUnj&6HX-Z {,L1 5!!$%%&B((J)+Y,-'..l67K9AEtL}UXE]cgcjnEuD|||=}}~~*s؁ynbPyT Ϝ͡Ъn֭K >rڳOBTC¾q6e 8 k0K{HchA> CCJQk y  85N%B!""Z&''(*+:-/7136 8 ; > A xCZEGJv8Z#3DUfxaڏ˟CF'wzҮ9ŰZy 1۶<NP<#Y$Go]O@%P@FqaEp`h-)y m]wZY7hE$&')'s??GWKXYaZZ[d[[#\\\G]]]3_z_`v`aef{hh}i o'oHonooooopjEprppqFqyqqGrrsszuwwyUzz{{:||J}~ő9-Ȑy EA.LRWԞfΟ cΪ+ִ$HFz1θ`JuEZD.Wok'x(79IJY\.9nso !eZ,o < ]    {\2{/-[ MAO=1 5!~!!x#"$$,%%%2&&~C(p(()J)I*++Y,-},-y'.MT..5n667L9AyGzEzC{uLUXG]cgejnGu{F|||?}}>~~~+t"8ځK{nbQ'yΐT МСlNoCrHѪn6j֭L ү>r:nڳPֵB TCӽ~¾qq6e 8 !k A0 *mXKK{Hjcc MhNAA>V&I ]CFACJZOQElUY    {  - N   & G   (I8h3A 6 XyP.%{ C!!"d""$%[&&'|''G((V)**+$,?--%//>113R4 6689;<>?BBjBzC/DC\E.GEG$J'HJM!K>NQNHRBVRV`[KW[8am\a^:gbgmOhnHgط?wnI6T=@b_xk+:Xw"A\v"##T 3$3Cm4D~TDU*fUf0xugxy!asԎڏ}CޑofՕ:f3̚i*Ln}˟C<H)x{Ӯ:RưZu,y7T -1۶< aXW79t,M*uxU[-V[Nw|Mv{n3/>s%c}`w =nK*&'/'y??tWiXYZZ[s[[A\\]^]]]<__&``#aUefhhio0oQowooooo&pjNpxpp qUqqqMrr ssuwydz {{{I||P}~ˑ?3אՕTG4U[ѝflԟǨi1ܴ-QL@iYǼ޽TS"U50E~.U?gPw&bLNtyx'n*i?x< B c    b 5<kGUF: D!!!~#"$%2%%%E&&L(v(( )Y)O*++h,-,-0.SZ..56 77Z9AyMzEzI{LUXe]cgjneu{U|||N}}S~~~:SZQ߃w qZ-Ԑc 0WxXʨ]w<6p߭jدGҰ {@:tnܵKֶ]ŷLܽѾw?nA'z ) )J?3(s^QZ"QpirSnTGPD_,O#cLLGRP`U`N{^n"      6 W   / P   1RGn9GE0a_74 b!!&"j""$%%z&&>''(\()z);**+f,^-4.D/50]1i234)6k789:;:=>n@'BBpBC5DC{ECGEG9J-HJ M'K]NQNgRWVRVu[QW\>as\adOgbg nUhnNQuou!}_v}`{3~8_͗yq$ši,G5Sm?}I TEj_ k3`w*I~#\$ĭu4D2U8}gy{nj;HFH2&'>'V`?fhDij kus0U%ڡrBn.nnXkTsVn   @\=!7"$3#M`,;nC*zzG{{SVYbfbhmryY9N%BDlGIyMZQhV5["`gmu|;@($,5?,IS^{jvu̞"02UCSTe$w<܋`bGϒ[< M,EYm !5I]q 3G[o)=Qe{;Qq &:Nbv  . J ^ z   3 I ] |  $ 8 P d   9 O c  < R m !5Of)=]t3Sh}*AZy;Rv3Rq%Kh(A]t2Jaz3Sj,AVk)Hb~6Ko7Zo%?^y>^z2Qh}/DYn + I i ~ !'!4_4y444444 5&5;5Z5o55555556$696N6c6x66666 7(7=7R7g777777 8'8@8^8|888888 9!9=9R9q999999::,:A:V:k:::::: ;);>;S;h;;;;;; <&<D<`<u<<<<<<=$=B=`=u====== >#>8>Q>o>>>>>>>?$?B?W?l??????@@,@A@V@k@@@@@@ A'AGAgAAAAAAB3BKBbBBBBBBC0CGCgCCCCCCC D+DIDgDDDDDD E*EHEhE|EEEEEE F"F9FSFmFFFFF G!G:GNGlGGGGGGH"H>HnHHHHHHI5IPIgIIIIIII J&JAJbJvJJJJJJJK+KPKrKKKKKKL4LVLmLLLLLLM:MQMeMMMMMMN5NINnNNNNNOO-OROtOOOOOOP6PXPoPPPPPPPQ1QLQaQxQQQQQQRR1RERYRtRRRRRSS-SHSlSSSSSSS T%TDT^TrTTTTTTU)UNUcUzUUUUUUV!VnUnonnnnnnno%oRmʊ !5I]qՋ%9MauŌٌ)=Qeyɍݍ-AUi}͎ 1EYmя !5I]qՐ%9MauǑܑ0EZoÒؒ,AVkԓ(=Rg|Д$9Ncx̕ 5J_tȖݖ1F[pėٗ-BWl՘)>Sh}љ%:Ody͚ !6K`uɛޛ2G\qŜڜ.CXm֝*?Ti~5I]q%9Mau#7K_s-AUk +Aa*>Rfz  : N j ~  # 9 M l  ( @ T o  ) ? S r , B ] q %?Vo-Mdx #CXm1Ji +Bf#Bav;Xx1Mdx":Qj~ #CZw1F[p8Rn &;_t'J_x/Ni .Nj "AXm 4I^s 9 Y n !!,!A!Z!t!!!!!!!"";"Q"n"""""#%#:#O#d#y######$5$Y$n$$$$$$$%8%X%q%%%%%%%&&4&K&i&~&&&&& ''3'H']''''''(,(C(]({(((((()2)Q)o)))))))*4*I*^*******+)+O+g+~+++++,(,R,i,,,,,,,-&-;-P-e-z------..0.J.a.v......//3/H/b/y//////0040K0l0000001171L1f1}1111112/2D2Y2n2222223/3D3Y3|3333334.4O4i4~4444445+5J5_5y55555556)6>6S6h6}666667-7B7W7y777777808N8l88888889-9B9a9v999999::1:F:[:p::::::;.;C;X;z;;;;;;<4<P<e<~<<<<<<=2=P=e=}======>(>A>_>t>>>>>>>?2?G?\?x??????@@1@F@[@t@@@@@@A7AWAuAAAAAB#B;BRBqBBBBBC C7CWCoCCCCCCCD9DWDuDDDDDDE8EXElEEEEEEEF)FCF]FFFFFFG*G>G\GzGGGGGGH.H^HHHHHHI%I@IWIrIIIIIIIJ1JRJfJ}JJJJJJKK@KbKyKKKKKK$LFL]LqLLLLLM*MAMUMzMMMMMN%N9N^NNNNNN OOBOdO{OOOOOP&PHP_PyPPPPPPQ!QUSUjU~UUUUUUV,VKV_VxVVVVVV WW7WKW_WzWWWWWW XX9XTXnXXXXXXXY3YGY`YtYYYYYYYZ,ZAZ\ZuZZZZZZ [+[D[a[u[[[[[[\%\<\U\i\\\\\\]]3]U]i]]]]]]^$^9^[^p^^^^^__0_E_v_______`3`J`f`{``````aAafaaaaaa bb4bMbbbwbbbbbb cc:cOciccccccc d0dEdZdoddddddde)e@eUeoeeeeeeef&f@fWflfffffffg%g{U{j{{{{{{{||2|L|c|x|||||||}+}@}Z}q}}}}}}} ~"~9~N~h~~~~~~~0G\v)>Ujŀ܀ "7Vrҁ0EZoԂ0G\q؃2I`uׄ1J_z…څ!>RjԆ0H_xև7Lczو3Nbʉ.B]Պ%9Mauŋً)=QeyɌ݌-AUi}͍ 1EYmю !5I]qՏ%9MauŐِ)=Qey̑ 5J_tȒݒ1F[pēٓ-BWlՔ)>Sh}ѕ%:Ody͖ !6K`uɗޗ2G\qŘژ.CXm֙*?Ti~Қ&;PezΛ "7Lavʜߜ 3H]rƝ۝/DYncratecratezzcore77corecrate++corecrate crate$crateGcrateVVcorecorecoreJJcorecrate22coredcratecrateiicore&&corecorecrate]]corecratestdBcratecorecorecrate--corecrate!crateIcrateXXcore=cratecrate44corecrate((corecrate__core crate$crateDcrateSScorecoreGGcorecore;;corecratecrate##coreKcratecratecore?crateNNcorestdBBcorecrateyycore66corecrate**corecrate crate$crateFcrateUUcorecorecoreIIcorecratecratehhcore%%corecrate\\corecrate$crateAcratePPcorecorecorestdcratecore{{corecrate,,corecrate crateHcrateWWcoreKKcorecratevvcore33corecratejjcore''corecrate^^core crate$crateCcratecorePcrateFFcorecore::corecratecrate""coreJcratecratecore>crateocrateAAcorecratexxcore55corecrate))corecrate crate$crateEcrateTTcorecorecoreQcrateHHcorecore<<corecrateccratecrateggcore$$corecrate[[corecrate@crateOOcorecoreCCcoreCopy'=:core_intrinsicsderive_clone_copyCopyL =:core_intrinsicsderive_clone_copyClonew6;core_intrinsicsderive_clone_copy  array_impl  Clone!6;core_intrinsicsderive_clone_copy  array_impl  Copy7 =:core_intrinsicsderive_clone_copyCopy=:core_intrinsicsderive_clone_copy tuple_impl / J integer_impl 9Debug-xCcore_intrinsics3 float_implsЎ 2 > array_impl  Clone$6;core_intrinsicsderive_clone_copy Copyt=:core_intrinsicsderive_clone_copy array_impl  DebugxCcore_intrinsics3 array_impl  CopyY =:core_intrinsicsderive_clone_copyDebugxCcore_intrinsics3memloopֱ  Q float_impl:Clone6;core_intrinsicsderive_clone_copy  tuple_impl EDebugL xCcore_intrinsics3Debug'xCcore_intrinsics3$crate::__thread_local_innerx Bٌ thread_local_internalscfg_target_thread_local thread_local array_impl  Debug!xCcore_intrinsics3panico=ӥlibstd_sys_internals  array_impl  Copy=:core_intrinsicsderive_clone_copymemloop؂  dCopyѓ=:core_intrinsicsderive_clone_copyClone6;core_intrinsicsderive_clone_copy  integer_impl 9  PartialEq- 7?core_intrinsicsstructural_match  tuple_impl  @ array_impl  Debug$xCcore_intrinsics3DebugtxCcore_intrinsics3 array_impl  Copy=:core_intrinsicsderive_clone_copy array_impl  Copy=:core_intrinsicsderive_clone_copyCopy=:core_intrinsicsderive_clone_copyDebug4 xCcore_intrinsics3DebugxCcore_intrinsics3 tuple_impl & G integer_impl 9 array_impl  Clone#6;core_intrinsicsderive_clone_copy DebugqxCcore_intrinsics3 array_impl   array_implK  Clone6;core_intrinsicsderive_clone_copy DebugxCcore_intrinsics3CopyN =:core_intrinsicsderive_clone_copy integer_impl 9  tuple_impl  B array_impl  Debug&xCcore_intrinsics3 array_impl  Debugl xCcore_intrinsics3 array_impl  Clone7 6;core_intrinsicsderive_clone_copy Clone6;core_intrinsicsderive_clone_copy  tuple_impl , I integer_impl 9 float_impls 2 = array_impl  Debug#xCcore_intrinsics3DebugsxCcore_intrinsics3 array_impl  Copy=:core_intrinsicsderive_clone_copy array_impl  DebugxCcore_intrinsics3Copy=:core_intrinsicsderive_clone_copymemloop  P integer_impl 9  tuple_implҚ  DCloneL 6;core_intrinsicsderive_clone_copy Clone'6;core_intrinsicsderive_clone_copy prelude_importDebugwxCcore_intrinsics3 array_impl  Copy!=:core_intrinsicsderive_clone_copyassert=!o array_impl  Clone6;core_intrinsicsderive_clone_copy memloop  cCloneʓ6;core_intrinsicsderive_clone_copy Debug7 xCcore_intrinsics3DebugxCcore_intrinsics3 array_impl p K integer_impl 9Clone-6;core_intrinsicsderive_clone_copy  tuple_impl  ? array_impl  =Copy$=:core_intrinsicsderive_clone_copyClonet6;core_intrinsicsderive_clone_copy  array_impl  Clone6;core_intrinsicsderive_clone_copy  array_impl  Clone6;core_intrinsicsderive_clone_copy Clone6;core_intrinsicsderive_clone_copy  float_impl:Copy=:core_intrinsicsderive_clone_copy tuple_impl # FDebug(xCcore_intrinsics3$crate::__thread_local_inner -ٌ thread_local_internalscfg_target_thread_local thread_local array_impl  DebugpxCcore_intrinsics3 array_impl  DebugxCcore_intrinsics3DebugדxCcore_intrinsics3Copy=:core_intrinsicsderive_clone_copy integer_impl 9 Eq-78core_intrinsics derive_eqstructural_match  tuple_impl  A array_impl  ΥDebuguxCcore_intrinsics3 array_impl  DebugxCcore_intrinsics3Clonel 6;core_intrinsicsderive_clone_copy  array_impl  DebugxCcore_intrinsics3DebugxCcore_intrinsics3Debug6 xCcore_intrinsics3 tuple_implܛ ) H integer_impl 9 array_impl  Copy#=:core_intrinsicsderive_clone_copyDebugrxCcore_intrinsics3 array_impl  Clone6;core_intrinsicsderive_clone_copy  array_impl  Copy=:core_intrinsicsderive_clone_copyClone6;core_intrinsicsderive_clone_copy  integer_impl 9  tuple_impl  Cxstdderive 7derive>wderive,tderive '4derive;qderive6derive«9derive Yderiveߓ3derivederive)deriveAderivef( thread_localˆ thread_local_internalsxderive VlderiveM&derive#deriveuderiverderivederiveWderive NderiveDderive 6derive-derivesderive'derive)!deriveq$derive#deriveOderive LderivefpXB8=!gVjM<P3"6| ub[$H}6,1 '*rNPW;p(#YH\?.B~ydk>rng0]dT:LD I-sbv,.<M'&81+~0W$5/)/:O-'!3;<=;\;<v;';= ;y=V<=<<^=;)=:=:Z+ 0$5X)X:x-!t3%'7 +V0=<*-!A;/#"<.=:<D=:p<:;N!/3&*A"0$=5(9, 2x&7/# 5p(9,|23&b7=/b#439A,*  2%6."'8+_U1%)-!30$5&7}*/F(y9,^ Q2&77R*/7#4(9,1%6)`~."K4v'O8+41$6)-!( 6*"v4'8+1d%^6J.$"3z8@1P%J6)P/home/seth/.cargo/registry/src/github.com-1ecc6299db9ec823/rand-0.4.6/src/lib.rs{2vCQg F?#EB@A$+QOK;G/ KN ! KKGJH,NPLPO?DNQQGQQKOQLNQP%IMO( &"I /$QP  :Q!ON%9,)11  /A8QOLNGPN N>J9:?./&6&5 0 @NNK25C94'1:F%*,;7@&;02154 :3F>H7M)=><9TC4()GA0G.#')'$$$&/'"$;P,+* : LO,M#MED'FKNK,#'9HI"I:N(O*$EM#$BBFC$D?BAB@>B@7 LOSEFE?<0$,*?:?EFE?<0$41?:&EE@DFCFD;G%")" 0CGF@:!&GD%'( 0%$ 4 8J %$F?= Y>>-@GC;!%$+8 cF/3%$2 H,J%K Y%/, %,$05 V; D,b$6 *0%$ C"N(6 5$$$$0".$$$$0";E1$-=&GL?&6)5**GG2#+.(<*#* ..(<* &E;D@  /)E8B?  "3)F7=@GGIF6)6)>  $$/.>70NMONMB#39-= 1J&?C6PP-GFC?#?I&= 2LC#:$)$)10MO9LK5"#/-60& 0D7 $ .AJ#<, I%$(0" )(81$--5##)@-#  #?G/8#A"55:  ")(.4 )(.F  $" &" ""22 "<>> ";=> ">' "+1" ""* !$ .##&&5 3#&.  I#!0/=7 T==8: TJN GGG60(:*4.= 9111212%-.11112"1111112* .E%2.-E)2+E).)/,BD1BCCCEϹ`/home/seth/.cargo/registry/src/github.com-1ecc6299db9ec823/rand-0.4.6/src/distributions/range.rsV RUQenEA?#EB@A$+A 00GDBDF ?>GA 9-*1  -B0.E04N?7-BD' 9DB3>F C##B@ECDLFGEG)@)-J(4BF18@T !!#D'/J3  4 ' ) %#57S2M+>;B; .%&)+, % :<<<2M+>;B; `/home/seth/.cargo/registry/src/github.com-1ecc6299db9ec823/rand-0.4.6/src/distributions/gamma.rsbѕz/ҁN=A?#EB@A$")#-?1 6G7GEA 9&7:DDS:DA AFCDD!CD  C02CC%' :: <#F %56DG>F '!E6 ""N-7&H8 )C@ ;%37A/>'' N*7QF  <!33 @%%@%  N+7@< 40 ,%"&  ",%"&  "-%"&  ( -% $  )% $ Շڛقa/home/seth/.cargo/registry/src/github.com-1ecc6299db9ec823/rand-0.4.6/src/distributions/normal.rs'a}we4CA?#EB@A$*KA.6BDF 5,$4  :;CFE %;;;d !'**3=' :$(85F!4J N)7=%:? =$/<9E !7M7!N,7( 4$ 0%#'  "! 4%$(  &$喊Ňݪf/home/seth/.cargo/registry/src/github.com-1ecc6299db9ec823/rand-0.4.6/src/distributions/exponential.rsRB^/jwO|A?#EB@A$"KA8FF1DF 0"G*  ;? "33'0=# 755G =+%E-N&7)  4 &%26  ( '啐׺j/home/seth/.cargo/registry/src/github.com-1ecc6299db9ec823/rand-0.4.6/src/distributions/ziggurat_tables.rs[:x_03A?#EB@A$A5)2$]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]$]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]1#]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]#]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]˵儒~S/home/seth/.cargo/registry/src/github.com-1ecc6299db9ec823/rand-0.4.6/src/jitter.rsYbUԝH>A?#EB@A$DAPF C!$=N&HMN+QNP P$DNNM'A?&1)!G ;$5' 6/0>,97?NB; #;,*$(7".LNM4FG(P'E "Q2PO9=!#" I Q(Q KLNOOA0KDN N'8'N$M<0&## ;L#NMQN;20'5H*UIFI@******, MLMH#C%$1 +"IKNQKQLKPJMNQ0$C-#O@KB5L'3 %#?IJ+J660)#9NNNM1M?7#PQFB4I(6JIIHHEI.MMJMGK8MIMCNP2KJ$,F0E Q;./&* 'N;'"FO15 OPO)>OQPK)$!D)(%3C'"((()19OQ,5FLLD,798Q6PON; EMLK* 2 OMN/51'5 MP/21 K$42 P IEPQ= E< O1 OM79 :UDJ+NN KPQPDKON3PQAQO<JRONNJROQN#! 4!5M@KM0< OFN=JR&GF?? NFE  # =+$*,(!1I9(= $0 1*8' *8/ P̸O/home/seth/.cargo/registry/src/github.com-1ecc6299db9ec823/rand-0.4.6/src/os.rsp~BN5&Kɟ F?#EB@A$>  F,FG%7EDAIF7C (%88D;  6#3 6#3(#&&&& % #*''+.3C '0$0$0(0(0B '.++/39,46>C) #*''+.*I**9'..E*; *'.++/32",*<;37 (G: (G: 1;<  % %%G3 5G, (2 (2 1YZ   %, (2 (2 19G))#JG13`1   %, (2 (2 1H)#S::   ,43, (" (" 1%   %, (2 (2 1*   %02(, (2 (2 1N$G#TA8   %84I ;:K?D@U,,("EAV;L5S (2 (2 1-#GC8C$. C  ,G ($  ,"3U 3,O 3,O "ADB     C//0,333 <,333 &,,  .- ͏ū+V/home/seth/.cargo/registry/src/github.com-1ecc6299db9ec823/rand-0.4.6/src/reseeding.rsOzmw@L  A?#EB@A$:0G5G4# 78?5]3\8  F(,?1& @$$#$$#0$3"884"@DE/@  D *3+111 $ 4,:FC'>D;(#%< 2( " (* - ; O0  LL@B KG*G&+ L*N/L$ .ɷ̅P/home/seth/.cargo/registry/src/github.com-1ecc6299db9ec823/rand-0.4.6/src/seq.rs#wjQT%t  A?#EB@A$=E>5;+>#`b]/M ! A_#)422K2#,67  F8#:6:% ! ,?M<.;>::% ! ,C\<.4?6:dG RHbc-b^Q[[-4 2NZ/^:V%>1!- V/^D%J@.1&( '& "X) 0 "=IZ+47C.-  ( "6$"5;BBC@@A. 4$* 4E ."*1#G_N25.5(&*5/:*79M-QN. ŏW/home/seth/.cargo/registry/src/github.com-1ecc6299db9ec823/rand-0.4.6/src/rand_impls.rs4v/w6=n  F?#EB@A$:,*&& )***!+",*&& )***!+DL/@ F&D@6'(>EGD1>*@A"I 33+,FD8?% +!83!-CI=- ,!$'*-0-(17; #< q"0  -(( ((  %8?I F;$#6)6)  $#:+:+ 췥񄦡؝U/home/seth/.cargo/registry/src/github.com-1ecc6299db9ec823/rand-0.4.6/src/prng/mod.rs_ DpD@l 3 A?#EB@A$JCLPEJIOPLKPON$FLJMPI%b,LOM !#ҙ֚礘ҙX/home/seth/.cargo/registry/src/github.com-1ecc6299db9ec823/rand-0.4.6/src/prng/chacha.rseQ.:Ӗ&uq5  A?#EB@A$(@!]D28&""3BBBB88888888 G$*C#$0)) NO)# 44EJLG&$0-)) I88999HDDCBA<%,''+ :51'''' ) ":-"0.0.0.0$' ;0,'58 /3471 29%! )  O@@@B .>>@B O?GG& %J&>DHHHJDHHHJ.>*9+# HHHJ &?%: ੈϖ㜐W/home/seth/.cargo/registry/src/github.com-1ecc6299db9ec823/rand-0.4.6/src/prng/isaac.rsgpb`m"  A?#EB@A$'  +3@>?E<BD!! $ ""B( MI(#++++++++  #"E6666 :::: =2222 / %5Y 02$-#+9@-464$-#+9@-4646&%%& A"$& A>F1 F-EE,4/,F.EJ& FG?FF0 17M% ;#  #Q??@B 5==@B Q>GG& #5=IDRU7=.-DTTͨ⍺Y/home/seth/.cargo/registry/src/github.com-1ecc6299db9ec823/rand-0.4.6/src/prng/isaac64.rsO&פL4 w"  A?#EB@A$*#3@$>?E<BD + @*  MI(6 00++++++++  #"D6666 :::: <2222 / %3KZ 7;(1.5@!OQ5OAO(1.5@!OQ5OAO"!"" !A$$$& ?071,F.EJ& FG?FF2  3 7J% !;%  #QAA@B 5??@B Q@GG& #5?IDXYX07?.-DXYW0 5@%: Z/home/seth/.cargo/registry/src/github.com-1ecc6299db9ec823/rand-0.4.6/src/prng/xorshift.rsխ<)OR vr e A?#EB@A$!FDG3@.'@PMQ+ $3-H+/EK2/I 29& #<ܠrandx86_64-unknown-linux-gnu-abb380235a2771d7ͦ74JaSq?!,,,,XX,,,WX,,+,,44R