rust-src-1.53.0-22.1<>,"a[p9|"w] HF?~Rc,"~;}Cbv辮jʪD/3ij%N=Xv$9 poH~{Iak`1T%>ڬON^7xMpqvg/tnz R͝#Mnx"AȤoL0E[jmI__%=X4DNwACg7 %TcK}s_^*Ѿ$;7Gh G%ių[[몢>;?d   =&8 Ni   %  1  J,     < } ޾  0(8~9~:~F G  H! I: X@(Y@,\@8 ]Xl ^d?bbc dފeޏfޒlޔuި vzCrust-src1.53.022.1Sources for the Rust standard libraryThis package includes source files for the Rust standard library. This is commonly used for function detail lookups in helper programs such as RLS or racer.a[goat06rApache-2.0 OR MIThttps://www.suse.com/Development/Languages/Rusthttps://www.rust-lang.orglinuxnoarchP .-{/D@=;4jA@l% Ra;(*_S! d4d1 !|vQM]OR 9l2M 1U:- jfU#k$cv ? {3P!)ySE]3m&q*_! wejnXM} yQ!&AB8*6:0 o 2O*A?-[ K {+, Y b !,@X7 ? (:JEnE: He!"^֞A_c3Jln]fKz =q?U,k"> % h,0y6^ *  y(*u?5|~f'j$ApX $=3cmr aB$Pd$ I#PdJ?=hP k"@_+O&Gŵ`-hK>/ #}77u ',MBI$ J1! _ , n]T + H:? :5 * -7 Qu k^ Z0v  Y, %?P.*z5Cz R_0? Ez2V>!A6v +(2):  '$3!c, f1"7kH [hkiP)JrJ ]dijl9kb ;AIX/*}.Q/DVPMX'wxKwB) #HB\U#9Gz8 / ~T` y&` xmo k Km m)ek m i +!l3}k m m =+q-+k m $ mSHZ~b] =/'.Oa(5pc0M%IBL:a?AW t CEH ~m"#&03m&  #-8-@  N f|T1 M8`0A4 :el YW /\j^Ws&~P:SIK1c%`""!G c-c[!u0">VMK:UI4F )OB#"^]G8 7.=5[ st~XT EJKJQk #l-=$& ,@ e(NP(u;' 6&;S7%DY t'l /$Y-.* x eQL 48) {m/n2's_q$p6*_/0kzQ}LQUcH*_/ god~> _5-  >k) "@t _%Ib)5)`@t 52( -i1#N*}k$/ L7 sR $&vc u6be&TZW * ,~ 8a S#_" xJ8(&]A=5 [ t {  *_/3M[c&= M   `-p"S,0A%p;CYH Iq-W.]C:b*tZK2< RGNI7I8%6"! 2^o(&:l<V*x&(5kAB{ "oG fjgJ7Oe^z^ !9QP.lPrCk3 , V$*)0  6 ]AAA큤AA큤A큤A큤AA큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤AA큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤AA큤A큤A큤A큤AA큤A큤A큤A큤A큤A큤AA큤A큤A큤AA큤A큤A큤A큤A큤A큤A큤A큤AA큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤AA큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤AA큤A큤A큤A큤A큤A큤A큤A큤A큤AA큤A큤A큤AAA큤A큤A큤A큤A큤A큤AA큤A큤A큤AA큤A큤A큤A큤A큤A큤A큤A큤AA큤A큤A큤A큤A큤A큤AA큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤AA큤A큤A큤A큤A큤A큤A큤A큤AA큤A큤A큤AA큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤AA큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤AA큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤AA큤AA큤A큤A큤AA큤A큤AA큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤AAA큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤AA큤A큤A큤A큤A큤A큤A큤A큤A큤AAA큤AA큤A큤A큤A큤A큤A큤A큤A큤aaǕa a aǶaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaǞaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa a a a a a a a a a a a a a aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa a a a a a a a a aaaaaaaaaaaaaaaaa aa a aa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa a a a a a a a a a a a a a a a a a a a aaa a a a a a a a a a a a a a a a a a a a aaaaaaa aa a a a a a a a a a a a a a a a a a a a aa a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a aaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaǗaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaǜaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa a a a a a a a a a a a a a a a a a a a a a a a a a a aaaaaaaǕaǕaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaef6cb0e09295bfbd2d13b23c239a6b6f9a427bf6dfc46e4c072689d854a8156cdfe3c7b0b8f7731ce77c12122564731f141a0f7fdb866f951c5b1a62427d6d14f953b578f1e099f906a47544a1f2a229080142c755f51f924fd098a8dd4f35efae837f3d59f0ceac61e57c4ddcc93bc03d916423d4fdb06375e33043de6959d46c4680638ae3d303fc6db35886952ec4c47e2c037e9a7052e748baff1bf0a752412c35ddec28babfb7f03776a12a0dbdbee04bb72bc5f379736ba9f554454d862ee1891c41154caca4d94ca9828f0c5bced6c91b1c6f95183a43214182c75b74414b17d21725dfb98ef3776441627ad4f56ece27e883169baa8246c65ac9ce91673fed1c34b9b89b6120f0790189b97ed30096c9e541e25185c1273641e21ef800f98ff837abeef58138473dab9619a95a0b03db38a8ae7b5f0b261ee6ba06e0a4bd61e1d21fc4e73b8843ec4e516024a1c1d87f10fe7b4f1d3e4477bc40c2d27d8f0cb62e321640e7be2b1149c6d6d8cc1e30f3faf987110fbbbcc209a223e1fb2794ce94b44a93331dcacdcdeb0e3111db1fa2c8da4a3e7bece471ee269e57be652741e038941ec3e88f0a2cf773037f55581d8d7c09b84b3580fd5df3f925d8b6ae10ce85a5dc5469416b03b63dc079b039c3fb6daae8f5620df28c5bc467309fd80178b8c3f2b928ed8a6057595bdc144cc168d6c53a85a17507c82a57419f88c2907a01765d8a45bc76dc2eb5830c1105e4b0abcc3416c5e8be1fa9f5a333c11e210f67fc8b6a9ba64d9c46ea099eea4a0ac69037ed94bc8f1c11b36ce35fb2261229d3c53cb2ee67a9e18a32218bb5427d81fe73f55741437bb5c9ff0658456ca53fe33d0b96c56cc11be8864642e6afac15c9691b5892bb55832d86a2b076353e8a664056769c810ea2a43bd96d0b4cca9114d0d294cb8ef0530295d81d78e5c41735dd75663dd8f6bfb6956cc7599a1781147754a7ad8517f6dea5f53e43fb92fb17246fc8b722a254d5e5b11f951e32a688044e308974c01692331f673c1273e8dabdb9be8c2826ab4d44cfe0e3bb53f281130dfc227aac4e2d8324c0e99e2da626cd104bebe28ee0563e1e3fb451c88b9d42dce1ac380844319acb6b130d3e69de9fb3bc28f9bc338bbde06957b117dc0ae1588fb4a63ea40303f3cd2c0d0e780a27891d27187bfd54da6cea0a1f8190d2775568973f65b41be4828273f0f40818d4065af761c00efed105a3ab1a595169d7c3118cc32eaef7fba4d3dd0719e0095830ce8d4b31eb060fa53021d537f23542d3a3935d1b8430428f24ca6b6b626be353f8bc77d312163ecf61df85bcc4f3579d817e86a880e1d4b1ea323e694a69b419232f7191662b2e5e88d981b7127bfe1dc0a65fac0d0720aedb829726609bd4bade866f2a2b8168301d65fae7e6c07a81e53891f9305b63adf3e41f34204b95d330e7484559851eb082640ab90d7d36f02296f8a635da8069f67b56eaa05dc4b11f8e640356d0d574e8a82ad201982fd071d59b93555a2c9e35b8e23adac64b26516711c1656c1de0a32a2daed11d12029de1ab4c22b476f2714c24cbfc26e9561f08b3a9173ae27130cb533184b36657f92c76be149bc001275f06bf2024d1c7820aaa4dc651366dce83b9c1332f25ff2285bb356d371b4562521c1f1391b5c299062c460dbb322798824a335674a7054ea892b102b1c813b72c4ede70d5b86d98265267385a4ce206b34d40ba77dc793417f1fef8f807309e36e5c42dfc251152ab1882f29844fdf1e9c2d03c37bc3fa74536a386324ad88c08a1ffd047468e6457c7a3bdc66d03d04a1ba304f709eae006aa82be553fdd8afa67dd7ab34015a17ceeafb84a0562254db95fff05621b2fe93b74fe9e2660b0d2f901d95b9a842e4fb0105e54b18863bf6671c4e48c5f4fd842c77e9cbb54393d352d2ff4de8cd2662b5b810e2f4e77f3b1794f3d8e9ebc88f58ab5de26f9e17cca84127d61f0e856601e24ce7e1297e7fc1fd3a5cbf29b8e93a79d9ddbcf5843ca0ff8dbb850154bc2eac6064477ce98525dfc147cbc5566f9c9ec271bba29ddc5265272cce567f08a4d8be2817db25a2b704b97af84654a1d526131034bbc1eaec36d7b63190c829317436a5811ce4822cbf99b464eb62f325e9d57a6ce0948976e168f4deb7538e3ff7210da45c9593151df6550265d351576f0c2ccbc10c5aa913e2b522a6dfdf22583c4f943d1b272f4924f671b78ee89d3614482bb4228f44b4f8758a8bb90b081f18522dfa6448509889b377f7b2765e4bed04428507473036dfcf43bd2e5cbc4a3da4b193a9edc4e12f7bc29b5cee2944dba0543fd0a71c7ba89c903038fc71610b7d991e46db8a35e6081d36c2d1477ad2bffdee0fd9c4269d17ba51077808fdb2a25d03348d85bc85455933ec347196592ade714adc851dd0a1e56be185dc38f0488a314ebbcadb5e889e4691e27e065afb92b884a527b231b8f79f6a6a63a1db5b55d9bf53a225334c552f71bfc05a015997facfae28d454bd98ca87c23ad546d963aadcd3f929967c45c682d8fd9268cfd0c5501ffe8749c6515595947ec08d7c91709e034d0a63fd802439f50584b47963aeeccf210796b90582479add6e303f590c5e3d091294617bd642ebe641b5632620c06df48a0c60c5181e7c2643850ab9bafbaf8bde69321ac59fc11cce77476794dabd65d1865558c2d65566ae79d11eb5f621ef190e6d8745ab7e2cb99107777b1d2c3c163991dcefde6b1abaa1409e2adb726269c2b07dd536d301ece950c7bdb588246c4d3a68cde82949172781ce4ead76ac37add2f28b6421407931647d48334527045cdc53975204ef23fb925de5b5c16310d00d05c95467cac248402e19ba25dd23443f71af34e02779eae4c404f8d49e0031db0b9295f0c2d901066182e3da7b36f6b5e886d38ab7f61812330060a146ca4afa836006f4d3b86b2758a9b0cd2669c639924dc9009dad31480d5346ab86a36a9a3389eba6ffa578bda2daf391294801cc1337268980e2ccbb48c31f3b94cc4e459ff59e85f7b35b084388ce81de227e48d9deacd92f8ed70ebb375177204efcf1207ac4029d00da4fbe3c0f5f27bf5bbb22edf855f7e19aa41a0989f1e00fc7971b212bbcaf8a0af8f8590628cd113a7cb67252e32267153d0e9fda3aa27ed16eb60fd80febbbccbab8ab44b5a127c1b47fb32e666066b4c1c974b0041cc4dcd1d61541802d9d47086b253d36f00dbd2bcb8c0a210dd5142640f454bf6ec54fe266694e8f3c6b7da6356785e3d6cd21fde6cfc5e57576fe5b9444e34160e2e8c42bc0a7779a0deb419d6d8e7f23be1b57bb24d625e1ed48361ff3c2833fa7ea152c966d7a73de716bc42169c2637161b02a8639a1bcbdb8b5fc9a66582c74c5a83c81b8c4ac0899bfc5d0e111b8a3ca1681f105abb99d7a29f26ddf910c505fa62bb14ac825ab7dacac74776f8345f942adb140b53077213fdf7534eab2c2759dcb8788a92703c957b7c7d4b3722fc83cf6cba4802da08be323ea48899df21cbb883f9bfb194678d77f1ece69d15e845cff12aba2caf644846d57a432047457c8af1177c06d6f684e7e500fa878d38ccae9804ed7c1511856c63298908b2cd497e0434bc58e7848cb1cabd60d9e8b630342a8d68a142acf719f2e4ac2f55f0f7c8fa8d020c4e1268ce8a0904d2819e14c235171b839eaf008d9394f92bb13623824223dac411beafc9d426ab40fe6a7c2580a284fee568bf6f4ae19d4dcb61a8f2f51b058949200f8136bbb48d4e43e5761efe49cd78cb41b2ec2223aa4d268ca3315dea20767a1a938f70fbff7e2f16d94b85135b3e074373c62c97202d2f2976a7794bc09aad5582ebbba912ad2d3d1cd8de9802524fc5d534b1c0841e3e36e72cf56a8dda895bab5c1fd3e66bab1523282435296b4a2f61022e55bb9e2797be77867492a30a786a6240504dfe9ca941ff0739aaa6ead29ee7087b9077d236afbb99b4d387eb84543e24ea3283f866b1ec3cc522a5a2db27e4539d36fe15659b1de94b841760192ad82c8d60821b7e339eba47983f9e775c5619a1fd63cb9ff80b710d28ca1f2336eb61973c12f1f95f27981756b6f3cab370221c72638c883fd562fa4cceb3632265e38dc7ff62b435c34fca7cc44f8d323f1056d7a36ca56a56cb6a7ff67c4b589bcf67483cd219245bc17be26f0f8444ea754e7b106aa35d763837d1bfc2ef25a0d947ccf5d3a5fd1c7328f44732af443505a141455dc610c6a20d25bc8487f93cf5abd83db6fd6e835159737c4bf1360d7cd92899837b80e2b5cad68daced5ed95a1d5f8baf6dc44f21d8dc8077e819ce1b5c2bcbff5b947e05bcee7a1643f32197a0f847f3686faee97be63ae1eb068534e7d540c0175d642b81cb985020a6f9d6df97c9c25c898a2ed2d8ed10e7791cb6dee11345ead96c9e7fbcf3f6105b0749976fce190ddf7e3a85716cb2283a4c0b1a24bb840182e557cb70164ea30fdb8ce2bbef01dc76f1ce993c5017d31e3c2771a216417735f719c9b8545135ee5ba60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2378f5840b258e2779c39418f3f2d7b2ba96f1c7917dd6be0713f88305dbda3976007ea91612793f8c77d499d2065acd2255fc5f3c3268fd8bd1ae5f7bb40d6de029b78bb79052ec940eecfd18067b743925189202fc16015d3c4c25b05eb6d6789fafa41d08ff477f949bfc163d04d1eb34fdee370f7a695cfba4ef34c164a5569a953f70f32064d1d2a57c7082a50336b90a12d10c75e5416dbb1d6d718016c1058f2ee9cf74b4c51a489e62544bea94c6cd537ad5c1b056f3e4b262f7e09f2a7b7aae0d8e2f826cf1c6c7c3160f8e5e9a30478b83c394b6575ce15b0ff080212f8c62f0750d3581292b23309f5aef15492c946a73e55df13bc345de5ca576e5156382ff639b11801c1bd7ddc6e03e8834505a74ecf7160e92182603cd5d96f7c582c2a4b162b147deada3194a30185ccb7a01215f97990cd1a5a3460c30fb94aaceef14ba700ea3719fe30fcb46f1bb154a47aa52cdb64fa6ed7eff96d6c850816c89b79a74be7ccfc34e95cd718ce29a8698a2ab56903b4b0712470f5c8bb18957e8dad4c6d9c8ad561f846e20f6e2186ff7a8421f2a0089793b510f66fe20816c89b79a74be7ccfc34e95cd718ce29a8698a2ab56903b4b0712470f5c8bb270de99179c925e6284a8283fdb4e40a8c813a569b24930d6cfe79a4c470ab614aa8ca641efd2f1937ef669eda2f3e357b2fb926911722b3afc6cf25ce4bcac2e6d6fb37041a9d6fc6771be1ae8d1eaa506a1dc8796170c1ffcc3d6dd043bed2654988c5c008610f90d5159a8dd0ab6fd491e9c0d16ad65b03ef53f694a5400cb5f4707ae5b0bc24aee535dc11d49eb7b3f01a8cabf83992fd2aec2bc8aba5014db3cb7d315588f363eb9f377bf1c27d8e8886c07b6c0d0c5cf7ee91114a718bd7d5412b2fad72dad9e6a73ef258902186e677090110ba10ab00a8daeb11437570760696a608b0d89eb3dcc4b08f176d709dd9f98e50297f2b7e0bb9b0f3b4580bb5c8256019779f3e1db20fcc2c01416ffd4679428f3e395ef5f3e55d2d642cbe2e49bb296b92a8e3643a6c0a70917fe7b130fa43b71a29c4e7514f45c00e7e5da0c95ccebfaffbbe7b5a92b0e488017dc375cbb5b8fb2b7712dd65b2dfb2ba575ec6037f597ba7ab0eaf9dd699fadfabef918ba2affea7dc20cdbde55de5ecf89671bc3e9403640ce61bc9b6400f2193ae82698b503c3d8b892aa767a812c9be4dcb03ca87b479eb12fe8c5b2ef8e0a3aafdfa1ffb16495b7038deede634e0bc4eb816d2d141f6bf4fe9173cd79a281fcfa9b88b5e7d616645f4a2ccbb24e3d304c16eb29cdea85110a15bd222d3eba2fc46b17513feab441b9ebb49461aeaa8550b70b3c83f6852a1dba83cf97b1325238b5aa3ce7b35437e9382cdafd924c2a790d58865d1df37b86a3293588d1375efa146c2c3c8d963875a1dffea5cd0a870891dc3d0a7cbe232a0ac142408cb7e6c371f300297b1fba35066c35632e45f9cdd7910a355eb9ab64418014e4379712588237235d601f177c8dc6130b96a766affbd9d2242a81d85067413dd95b807425a6df2fffb17a4eacc5f606d4200515f7df603a8f918f3edfb8d1379f4f1d0e8dfbf0d84f0c8bd37c2bb9b707b2258aeda764a27702e0abb3af62bae8a162d8b6cb8c80ffd141ee794d81a8ace1559846f7b8265c389204794111f0f3ea4d001b571b8ac715f6bc98125713adca5151733293d53cbd180571cdd542244b6909a27f782a15b2238ae388519c8fc917d742649d29675f624800c080a4ca0262dc006e1ac8a527d9a47707bc9e4b18c8f7dabbdff97e5a24f0d5b3670469840666a91e9971ac352abeb4e96d98a2a6c6a98d0a9da3a0293aaed1ad73ee3f5f29fb3be007724669227c00280be3bbf5f523e96272b46bdaab2abb0dd0201cb8032bf86558cbed986a20d7e2cc02fa8be4116eceadb2d9916d4f5602712eacec647f185d4c53c723aced8de5fc471b14d22e9a9b7d48e0adbe3f0cbce1d3212008dc52a479d164b6365264275885c75426459f8610ca1a0fd7456539ec604f5276c94b3d0d7331357eaed338e49220a02de7955dc4cbe098e67b269882cc8d3428e13bfb2fb5dadc2a6514ca115145aba9564fcf47000e70d521b31518e205c8e6ee09b7410fb1eb1e452721757ff54ba8159a4a807bd5692412ba1a280bb36ab942c06e904f37a92e2545f0b4211308a1ca715317c1054968d92350438b293f800bae2174f395b20bc43a633d757fe8f8e8673403133e9375a701cc871261db2f49d33f478224a4933034a79a0375c3e59fc67ebc60fcc34239e7e598900236b5495ce5b17d63172254db6c2b171cffcf5201cc8a7de24ad3424d2472cb0af59cd28563d09cc0c21e998f4cee4367adea7bdaa5588a2281ae7807dbb31e2899e4ef606aea96861ca19ecf0522ddd3c6e5d4432079b8ae2b9382945a57ae43df57bb4b7ed2e5956d4167e051a44567388f43c94b99d57ca66a5cfe939a46016c95b2d69d82695fb52480f7a3e5b344fd946f02837a2e6b404a035993f2e1f03cdfc1a5a872c1feb92926566a31138d27371d2238da401042e007ef5ee20336d6834724bae96d93c8c52d11a5a332d7d342363436cfba585f4f96e984cff6ca52c81587c3552f2d6207c2aa6d48ce02eec7696676e46a1c50a3a88446fdc59c0dedfb81ded24d77ec725f7cc101a5d8fe6ebef58e34543ed4d47048faa9b6525f68fc71e12255af734523a513c5d4baa6f7560fe59e83e4b234789c448da5504d3dd9065f9ad1b2615f12606f9112df4e0fcba716e2e56b37d52b88f9762ebaf899c991d587892090c2680ec9bdbd8c42ed112c0b9841b89ed2455962b9efb727ac227ba63100a003559b69aa538937dc860e635b4e4947652ee530874df5a3dc06cfa5722eaa7cddd17c065e0691217991ca79ecaeca8a3401f9735029447a559a0bf1dddcfd20d0857eef721144e3481899f3650a9876dc5ce41662e1cb53227b9ecb590a773518e56d34f1e897e3bce129526ee319b2afedda79993cec7fdb6b80255d72eef92e8eeed7da18a909b9a9d5ce87371d9e79ddfa80e3cb7eb4167732b587d22dea8788ac4f9768ffd28678dd614db403b5c01389da38d442b3a02b4653b9794ff5b2eba78455f3e8e5963bb8a10374b3032d608be58a289a132bb66972d24e510fd0386db0bce49572767affbba83d54a2662ee2490502836b87ee872c3c14e064894b5815ff37509925bbb5cda8c9b6ad3347b105415c79dc2664a714f8079fe88eafd667546f9645ddb87aa2e501483544965a8944ce009d98bbf114aecf3ee9f9bed9c602076c4591002078d98cee1d84bfde3f600842ea094d5b01d7156447cf623ca34232fd0782fbc26a4dba96cd826cc5ff2e3a62d70e0f1eb6433ea5cd6f57102e5346519e384e0dcf3d6bae39487a8f7a86a276182847b797dedc2f59e0ff542b9649125c04822d603b663b4e28617d445a65f436e84fc6de387680945e783089eb74b161a905bb54e1415c45c22a2654cb652a1639f18550205e8cff4332bf4b0485cda35ca4372128c32206c1343ead1f0b979fc3da9ad016b020f52e742359c04e71f90ef225ff429eb81608c3715793e670e4ddd7115e9e3ed22f65fb4f7041bd4e5c00ae2786d01b3118ab764e20500689a87a9fcd586d481b0eac70c944ff6c7d69891827d60c4cc16a86df30481aee9fb4c33bfb063be20dc0c93f453cdc55a3cef09eb102d1d9dd83d004bf1810f41d4cf14f1e2c026e3d987a964f625215bc92c91740b52d0584c0bee284f54ed7dcc7f1825624af22f0b682677844e3d84833c46c7ef8b08ed460c1e38b958376fe5cbf76fd543cb1d0864b3453bf4d856782247c93234103da041c223e7922c3f163951bc9f7270f78019cd6e30ef3c9774f3dc4a0004d8a997dd793fc7097b73dcaed4fa83c4b0848a01b1e118cf2a94c7f0e7557ef18188edcac0573f52c91233fcc1d0d116958df4194b1aba088666efd6777a430759e96ba017b838676598c386a8ed5abca46a12278b89e2cd8355df51b540728b63945050ac7d8bb3691b28cba1d23bda8a6b3981cddafc14f3f74951956eb710781bf88312ad31f46c0d96ac33ce0ae1a191db905a4ab0fded0d8831234e56eccb11a1af7a646b08fa05155df9183e4278e25d6e773a32f858831647461c1f64ed855016e1d4235b041c08ce0d8ab8d6f0aa58c3197a17af67e3c0c65ba893d54bee8524194dc364ff66b25b9ff4e4df2175a3478c15446466cc66cba7902bb647bb9c231e54b137f5ae10c796e6103f3cc521a10c42a51763ede61d2cff065d01ca35ee74d84259dfe2134d41366188d8396e74aa86bafd845737c78a9e35d697d7eb502f465486dd2260144af792570ba39e989980161eb9daf41237fa293e39a0ebecd7267e14535428dc07d402d9c26c0f49c693a54042308ae7a5f965241494c9a2ed61a8d339a8691e961daf9eb7f2d8d6ed70676e79b3cd39815f692559af7f141de02e1bc0cc85c1443faa4d55b2b10c67322dd866efd98283c57645b2576c161e298624e1b0acc724e4b1a4790ead652970d62b47e92053333f0caff96a59243c6f836c88443190987dd85ccabad80c2dca64d3db1d6b5ca214d99eb1cd3eab5106cee29957cdc85ff17f11cd813635c5c5e9156428171da5c6e510a3bf5446bdaf7cba28e7875c5498c79fb3e41e309346fa24d020923f8cb7a4b1027364860b245f06d5abdb41420ef6942a4d56cd908dca47fbc1dc5a96b808d2fdc19f32b0ccdb56201ba904cb72dff228a45a53dd1ea6761c27c1f2b2eb34c924c2e0b1d0f6541310697f27a8f4f318e9992f36a32d0c31f78d5d3ee8346525a5b838fdf07539c0c6c4508561af047ad90a02576222620998faf3710bd818c6761c486e53d0d763f4ee19f89b69985bdbd7c592f9c3ec01c903734cab98dd0e54874495a5a2f86d849a143dd3578603d599fdc87c13f8041d01a32f7f62f619b6140dfca6c8e4aaa85347759fd0d1562be51728d6a4d2f8609ad4b431d2c15d28fd190e24afe82ef4a75cb7d36ed4a10cafff3cae7ccd257993000dfd004ea6911def1e8620c25840d87627de3fb29d15884162cdde86f327b75154b3ada9c23b247af2eec44823889ba6d137ca8d8de4ac9b31b88ad02f254fee67d6b1c93c4bc8be3be434344e393e613670b48070d750863de0b48bc54bdb9ee27bcf01b81defdf42739a145d4a610a96a8f35b2294125fc241ed9438c24549e55992cf8ff25751c3fb81adf960a3188dfe65641bfc9784f0e38c0129ad2c273f6eb850f563029823de49c80f0ea9b1303ab934406a1bc130fc77dbe170672a5b49897bad834b72c7ce29a1e05a6aae53158d23e63c20e60d6415a1edb1f04db390448519988d8ea000a808f96f72e190d6954ab878c3cfc877a25e2c888a0be6002d15645b72e459b5d2fe0344a9e86c0e8e98863d3765e21f4e689745968a08b4bbac19a706afa76f41025db8075f23f7caea56bd122696fe1209e2abf79e7d23b5301b618d88ebabd69885f6eca832b378c42c8c716a065753c331aa54f86ea525e8a67af9aa41bf4256191e671ac68225c021c1242041e0461bedcd64e5ff172dbf10ca0b73727e6bbb7eafb08f34c545c32b5b411df5c78f8ffbf7732749ed28d53ebfda941611d97219bad7cd1046bb5304977b1a4a62bb77e34f2f09433103640f03f005319262c2ef6845c5c1c09fa188e5434cd18c0981bba3a8be3aa8e01afab4b8b37b295bcd04e6b9553cfa8eebaa098be30de82d067a01e1e34e4f622dd2fc3347c14d5df7fd5b6adbc070db155dceb090c1cd42f1e450305505620ac854de5187782781f6cbc090ac5344c5e97d25a9ebd885594d11d1c8fa24bfdb5b0e2e612ea84c599fb405c6c76785a01349066f0a00ea7c97b684a4fbcd52be3676ac552b9cedb29dcf7d36dc8b8902b0e2b1601eb69100f430c57908cd44197a0fd5ad759ce8b86636a84f4c1dedae52f5fccb1134bf15ef41de71d025aed8c903b309fa5b13c0ce62224101fd8640f5a22e8c2be93544a458a2a6db0b1811df7dd31aa7c0cad8809028604045e9f1b1f5f1a19915d1c229490ff5325221637f2243e5b599b15cc34f48e23c062c02e1c6c14cb655c68ad3870e797a4ef60b10f47bf6aca5a30080baf320d4f2298b7efa5f548173e1dad3b3ae94c10b1cb6039175c84ea8972012736beb4c6fec262a4237865f99a5e873999065dff261b749f5a870618ac0caaa78863c73ab03bde6b214b721633b9cbc472b3b5d1f8f70580231a4c57e921e47dc73e11ae5d9d14be2387121ec0937a36e0ce46a87a11c28bd3a97166607b7a2ef23d4239f40edeb9e1e9d4472f5131bb06911c750d34737e971fff1cd655ac4c383085125f75513e5f0a4d197ef550bee1b148abd1acc56ca2e0cda86a1fe446dcbcc39962d0a4a0846937753542770678cffb206d29f46fe0214cfd1979aefebda280974e0aadacbe0f96974179be9f2d5c210da13cf871822850eb55240d3aab82eeff080239de8684d82d04d3329b63631dbf936957faac021e8707ab6dc7b86b513cd6c887a84bbb503e2a1fb1f5ed37f8ba9dc0d2b4d21f15e0d3debfef7538f2b303be76b6145be6cce1902ed6bb31df9177e804c33c4ac6f24a54eb996476193e36474f6863fde424757d7230d456d3e774431034e36ccf081453c9aa8e33484cbddc44a18a5bdc355e924dc06b428cd1e7626aadd68bcd089e41a5e6504271a8e4e69811bebbbe15b6b68eb0b242ab3bfa5079cfb36324f9148c68846e8773f86c22b21d1ebe5489d4795fc6f9ba0755d73fba1f1a5b611b19010fd3dba969d59c4a35c2e20ead8b40ecf0c6d1224a3f69a2441db0662883fe51d23eb26d2e2424cbbeba0889ecdcfd74a8d3be8fdbabb920b2c1f6063de5753df7ed796c6a979ba70cdd8870efee268dc934f918b22aca192314da33c32dded33c9927dd354c726bda173b5701ffc92d44b3801b23329961c3613674151b98d0932b6760fafa4c5449cc6c9be7157750276fb12a160089b49598fdda82f28596e0f2d143d136bad878c44cebcab57251784a32154f1badd20deae08d779f26e8976b43df393f1924af38a39078305d7c9d151d85ecaffe724dee80171628866406a2b02de5b4c0730e6804d9642c8926f7c84765b55e32805c702fa5d1f5188de66d97a59eee281a0a233a2e6a660a70b10fba2d99984edf0ad9b38fc22c3016b5b8563076237120d97fed86a19d9964900c4aa65dde67db52a21e62f2cdeff2abd4416b0298f15c806c9144e4c8f42d6714e80950f83a3034ccebcf1f31f9933258473e550cca5aa16d1bff7fa3599e692e04acd16674ad5210cdf3f6f9f710bfc03b2e4ea5f5cdc2af2ff90cdb34ce418cc5de678fe427add62f467d8bc280775ced9a1b84f3c38f1b026f14f8650328bf8a722992ce46bc18699a4809338d2b003f624c0a69b242b9006bf8f0d3dee8b930df3a9b8c9bcc92ac87050ca7dd28db852d2085a21d16cde33a068927edb69029a0c935e594715c01c1baef4145fe973fc8abddbcd347761a932f824fb412a8c71bd39d857f0ce5ad1b13e09dec37336cea462ba3e3038f2679514e82a315ad72f1e2b840c275b4deadddc1290a4e79e75808bd6ec50574e0bdd984d96836cccf4e8558463dd3ef8d76f06da36b8fd13f455259a0445b81b7c3f41e6b6060ca140aa3813b08db9aa3ab1ebcb2b75b73b0c0898983f194efede0e9a5f16d6dd8762beef71673e7d6cf6a968a0036e1b31ec0d7c46ef02591b9930001fa8600cf405adf26ebedb8359805873a9e5625e92be14437679743ba42d2159ebc1f7e853e7ddfbfbb273b1891cc9f171129e7cfff7195d5c372fa2c82f97322309b43e9659229e10a2a50864b1bc85c1fc8d63d5e8a594ded51d1e06063a0edcad9a63d945fac038415bf233dada03d95c84d65d70bcccb139ad85a0913b815f785c05eccee4fde4b72d109735cfff1317afd02e093012ee4d4c3b5bf39431da45f6afe99002b0f9b5e07dc15c163f3caf94836b514c6104664684976ef9a242b33002d0fe8eafc7ae8bee62cd523c7bb544d7b511da1f5f0f23d5a008814f86c4daa83a537baba6b700bedf2146c6882f678d98b779ee6e22cc757fb59e3548f55faa0b7803ae208fdec53e8d7acb56d447f0b73f9f3208b6d7688a4a232ded8d41cf990814a1b609822f3fc926634e9618aca2b6e34916e2a00d14017e8191975b3675b3be3cb930ac2598e23f5959d0a2dbdee6b6b83ec5b16390ca4d1521dfc2f159d7733968df184eb19fd089a40fc6d3e017bfc9582f4a1ee8246c5f16c3a0d75c932650752c1267958dc14bd2d8e015df61d08af8603f08295bc07859f9194b566bf9b2e8e896a910e2147b40d486dd723eb145e74e3712d0601b5827bec19c2825a57f493704a41f00a90a8c6d2d3489f7a212da4233fc17a0d83f5c2417045b1499e0bf175f8d54aa31a1d40dde1aeec30116acf78a0a8818ca3ebe1abba04609b0d3e3f5426ea33f02d14f4c9915ec22086f8d72ab820f799dbe11fbe6d3aa4d427c4dd356ec657373f962dd4863b6212471b47c0a9154bf05639395308b6fda5a2fd781ccf3c77496be5e679a09702981fc9b4b5c636eae68e66cf383ba8944cff15e01ff16700b781f52313b5de12795440569680b2d073d919a6f7e37bc38fa95ccaf61801ca0af4bafc187321c6ead5be06f42133d26fb2f35cba11925d0e694b586f2a02009d08bb0faab3e2979d28ed1582f2e17941a91238717352d94439e38e827ab3ac3e1afee5c6484c729d25258fe8c43b7082bc2419b3b34443775cabaf5e2228e9811e2f6c93fe326426dd56fc3d6bf42385d7c611fd70ae0f99b4b8fad6b63b5f6d9795602ce50b0e330ec3eb0aecfb0576fd7020a369247b51e912117f02a056a3b690bad0927837344e16a2311f3eff7dc30ffdf72a99a58da1707359c681960044d0237b6ddfcffe2755514832522812e76747a619361e8d49edc3365ffeca197635cb60b9dae7a54888b7c69eee93d22b1b311f5a0e15e39b2b053551f5c6f651ac19d82c76865eefa33ddd270ec46ca970f9d2a20d9dd3f03a6d3ee26a97a80a413441c5a6a78b44985a08fbffd51f0d3e7f4efa5be50d18abc915dc7d6fe19738f28c0b2c58a11878af884dbc3125d1c1c0cf8af0c5c6743a57b59993bda346992369fe048a9d279d98417513d09ee8db45647e110a143f294a1bd71c7a1b1350faa15259fd5a69e00cbf14c69c705f7c6ad301a10a4b5570b33dafe4b77d49891de1aec8fd384b41410f48df3d421b41a21a3c775cd010a562d27b27352bb8adfaa4d1c220a1f2720524639bce585cb4563c53fd21ec6ecaf22af0a76d6ef5580dea88db9ed4657a4b136ad0bfd4fef54271577ac6812bdd3e34daf74ce48baf6f6f15ac3b571452679e3d08dda016fdd18a28c38cfdadeb513da0548fa1cdd245f5af2f4ccd303c8a96b60f5a94b20be8bbb0300363826a52d9481527c8c6ea7ac50db03f1114dadf97da8ff2c26f7f42c990f090504bad262045e77f889c50d01001892318e1def2b8a623d167ddbd84eef69d65bd4594c3bf8584d42a14c8a63bec3a2ae9cc1ced64fbd6b6fe69d724077ded51902957d79279d5748fa34787c4b108289f6cdc713bdad267c1256707eaaa4e4c0116222b062304e3cf3b24a14f47a730cda98e8208c8b27c757135c1f389e0727c477138c583e137dd821ac02d6985a20e48bfcad9ad9c4c4505209cf266573bd97473311e1349eda7a286385df468e989c8288dceb90afba9e84d7a45b315ddf96889442cfc5948f45cba55aa1db3ea14c20827aeff008e4b3eb0511d3e7077f50ca927cbb4f9ce0ad0a63f3e562ccf516579d006fba5e10b9e87010b2467432eb5b402216ac6ef0beca10ccf1d8c268ebdaece81431cb6bf75fb53ff3f3493ae12c95a30ac89f6b957bb3eab9ceaf84e131ee45b54fd5f13d258f081266edccb038904f04694d507cbaf1f550e32ffac6d7c81538719437a41d2e07fa2836c6687515f96d33771b521be7ea60555500deb62d927717ba26a93f9671668e5481ad487e05d6d865fb5f6e70381b81bcc4d541a766b1b8e1ac28d0469ec17a70c54ee108bc26ec35341172550b946637466b93dcdc42cbce23d10dc9ce5e9394dbe5c5fe1b2ffeff8487279d8f8d42a8bc685ad6d27880b87bc9bcfd90727984a3eb92f565802e4bdfab3c27eb9f68caec603649edf73b9eda2c3c0fbd979d2159d6a5790673fe3d795e9f41c4da989dcd8c3bd0e1683eef94352a1e1a5d0f5f070c1537efa0e47361c1f06eed1143842af8e7bb9a1b1b89e5f033a6b524fad21f861375b5a3b2d3d505e894db774b32dc9534ecb07913588a434f0b6344f94e37bcd75bcbc44df112190fdce0f074b18bc1ecdfd9c80b3e5e72fb2e6cfc1f23ce43afe8e15b4679dd9d963c79a82808ea1e5d3719fa6db7df583a254363e731766e9e92f04735a39115ca119feecbf98987b6989f38dd4a13b964a55102f83b73a1878884b8acb65f3a8c49c0dd2a12bfd5211bc8def7d393c5576fc2f62d3edf2472a0ffdd0b76ca219abb86a6cb4844a32a2b4b89a4bf77bb2d656152a761bfe0ae13baf8abe9dbf4b04572b7c73659340e5e7c3267c1d26f1ce413a00680d1ee710c6dd133adb46d0d7c6a089879b5da94cde6b956dad5328457b53341d976a135f47a04176d70073b7999c4bb2c29c1684aa4279bd4971fcac6f1f2fa5b99ec02e738d1e0cd7758ebe6b386f1cdcd0d7cd6f84d9723c58eed3ed2a756c5888eb7325eb3856bf7a71d442ac9e02ca8cd7cfc22a3bcdb61a63f59fe50c79f99afad6806b3f957f252a93b64adaaa76975b6334126834939d04299dd6cacc586039842674b9ce4cdf6bc8f815440b4de19a31a4bb3081813be63e09d8b626920c31d1ce5d0fd23612d15efb03f12dd390c68ca9f9bb911b9d684cdf8bf552e8b09ae228723f8ef12241ebb9cee4c199e0188e48b0b906093abadf8e610831f748f71257d2045ee50ae37ed876ddeca2f1de23d661e2950dd257b21883576927aa38f9eac24d2c24ad6a2dac274786e701d9cc70c1d0bd84c350d3e22159170948b65a6198ca0838b2a1db0906c4b5ec506abb69d5c60347a2d70b94e427ac9f8765a4b1105d549dbe633fcf3c668d1a4545e65c1f3e996a2a2de44e09745691cd8ddf97b1d2479040381cfe0ef280d3e42de368077d7897077905fd26d943ae43c8888fa65a1e143944dbf199c9a420dc025fabb5b36caba15a4c1de046063584b6b0b1b1996a09ff20cd0dee079d717feacd3411df3eaa97ebd39b59fc689ae353a5c1546d38eafb5c6914162b29f111dd8ccf5f36569fe75f87cd088d321844182672676b6997f9f7003dbf587a3ed304b2153ba04d6ac775d1c35a726837f67425450914a3c282248a532b0254802011589f9fe0d7606f70733d6deaaadc0daebb37670da6931104556f677efa6a26c500ea2126ba8bc06cd174f78ced9d2df029d851b81dd8944c6fb6c0fea335d57b49f5d88feb6f5d43a4adbefd8ee8968cb987371292f7f043f1b14acea20582c443763b6ae0813e9c8400fb45dd5cb4712a37ecdd551d169ce321212da94885dc6f01a27e2470a08148948a2b12881b31061cd8ebe1e35f96cb5789c0f4849616b733dcb5daede0787d7eb4f5b21d508b55ec97bb25e16a5e631b166c16426395c050a968843bd1c86458b219b103751d5fd87c66a5383f14adc7935a17ee1b2b49dd5d96277b7c76ace4120a84c7b65e5e642e3182dfde44499293812bdb556b3e0a514ec856431a94e9306997107b7880c449247ab414edd8736af94907287353d59b2f472bc5f52d6251d2784ae2b4e63ef0ecba492c5de115fa2e76c3c41da0919bea0ff686bd09c377cfddd020fd63fd6336622f39054577bcd76f4f82b3496eb4dadcccf6434909bfdc043e0a19abc4c77b2b4c337196d861515ad245107377bfbacfdc5dbaa77273ef59e244a82758bd3fd3e99bdc28fc5f2e5cb12e9795b863be60967d539fa7c3919286cb302330ac2c6d6a54e4c7a63edd62d4cbe2e025a0084b4da0b0916cdc13134ab41c3677ed104f64dc710ead3c099aa1e0b53dd0b263dce4dbbb90b164ad376367412b4829e1828fa31adbfd7a619967ea4957bf0ce4d568c8e623c43f85c334b4edced57ac01c10e0707e29c73bd9d2ed1e587d1c362a42e085e0e4c5cf034262d36a6bddad0ad8e41de6c7da1933266e54135218c080fcf04630b727c8de3c2fd4e6cd64b03f6159c60edbd8ff5d892cfd52945da64631cdd907080c120fdba16f56aa17afc9bd48037643c7f45db3079d350f6fb6ece0a10127caf1a8eb60bc98713bb9d7ec0e7a28693549175abc4140c3ca4528b04aec302d1922576565d3b6ef5e9fff9fa99efb08e7b7dfe5a53b2b032ea01ddf73454f4a4b11626f3ce5db9648093d0d3e814aa512b4910eea6a484e6ceae869d89e83ef4488f41fd8ab33eeb7746183ddaf686255f943049468bf7171c938d37ac66519ced577a6f46d49f7ccd342c8ecd71fe178bc8d28b56133e0aca58e58fc53c4f712bc61848abc461b57cbf9c8e69c860c390baf43e8a169edcfe7ee765e025ccbd63a18167568c1a119903e248d87f052fe660bf4c664290d93163b7f995fb5c18d7c0e1dba4accc57b6a2b5aad6ec81cb3f560390c7265699fb7e41bc42330e5d3c7c51ecea43159ecf5d294c68400f7a8903cd832229ef67a2d119ecaea6c3c984e7c7fabf1f8b4c1d62c783c2bef05e532e51990aac99191c73ac4abac888dd92802be01a6d95327de93e992ce7edd72d5285a5e5a56011550f4c7c8f157c039eab3163c68f872a10b205acf36f752a2c662b8c8ecb10bd81dfd2716a0fe92b2c57fa07c2cbb90e96493565984a2db5bee18086c52b815bfd005efeceb28ad6899dcdce1e73b10b009e019345f1e6e1f22c480f49ba37649385f52eddf80b1f678f59f4d917b4f822f34c98eebfd6a4864fc7bc6d1202b64415c50f3ca2d66f71f39006a1a30cfecd775adac5f1a03c7417746ee93c1ac340a7cb08d1d1e4ec3247f494486f9d1ead832e608c5d43815feb34ff60c4faa3993bf89ad50a3c114472f0230f69a810f938d9fb42f427aad7f385e77234d437f76c625b03f3f7e89b2cf566386c554522fef729022dfafbe7fe64922cb287f1f08121091833d80d6e9635625c18762014a85b5ed4276ddab0bb955ff109f93a355dfc75f86d9fdd9959b96b7ab417d82a0ee0699ba7eb596055502b737bc18a36fe9cafd51187cc46175e27c875f038d97079c03e459761ac973334c65317a4d9b7ec276b78972603eca3c918fd1d22d83d7dbea4ce18ccd67442663c5bafeab7ff6a3b0173fcb89cd1a2475eca63efca7a89888d594b222c7626a7f5b088731f167f895f5a1ed52c452f06f578f116d71d92c4b025be40181e5fa23437526185b29db93a7c9dd862dd8d211f2f325e8ad4bcfbad7ffebe6aed4577c9a4425ae9097f9047397b51ee4660857fc5eff684ea5dfe2a78483d146589eb8ca5337a5342f045c3d9972f0be64090272c42b055896782ed0726eee8424100387cd7344a927d61fea94c21c71871994a192b82482187dcac8daf7b5971cfa6175868cdffe9b43a12ff9310f6f9ea1dc136df580a4c19f00613d156394dcbdc24d9439a61b0ade53357e1e472ee0b8425d3e7018c52a9e0469bc629c1e4287fe63287b3bc0aa44bcd8e6c85d0acfe301121f742b1aa5f258639a1c67137dbb37876279b856fce1415a21c78fa73ec4afd35fe5c0de91b63c86b8b2565376699db4550caccdf7391a75c28c29e685ec49516b9ea0539bd0b196074261ac1adab5f4625e465e7125c2d93fc5d697446cacb2736dbe343246d1c8a87219066edd93ffaeaf846a441d62ab3798423f466e71e0b059e4c3f27095acd9b813ae22f62eda6074a94c02774b440471618a9c662d745c91e76a0515094ef74b56142479f87801935ba5300dc7f555b94587b3d97b51718c7ac7789f9ba95681524ffc2640ec16fee438f616ea90c2cb6d4cbba7339b607208c48d9d0ea73a6c70e154d65a1ead0d1648d702fade501ced95ff6d24e01f99f81ddc45daf230d737d5ea1807d478bd86ceaeedb78d5095b9851a176fda23c217379c885ebc0e49bfe26bc9d31c43f6dce305f4e838a34c449e2f7a867985ec9551a4d8db0ed0a27625a6601bb1aae338e51a176e6e90a4fe5ba65317c0158847865d65dbc4991d1f1d33c55771769b1f716a1103c75f148f2d6afeb0a5e2514f7291be4837277bbd8179fa77dab91114701d5efd85fcb944e0e6a67e67aa66acd02e44c1155c1acadeaf82f2e98a84bfb2374561a670e5c724d92de3cc3290b0cedb95bd3b34ffbdb9311ad281d89697da376c8958eb727b5c6f43fbab9cffad96fc2412c4694cbc6686da642682d7ec1e0a2bb02032388fc7aeb8ff3fb46b0396bfc49a0df4bccfb85a0601a9ae0a56f08f55e245ebc6df3db4314474b58ac55be62713820e02f37163f81e05248e4f45c5906ac701c6098a1f2433013caa30dbce5b6e95ac698aaeb55b53dacfa025e1979ffd819f936c06b29ba493cfdc444944bd858f831bfc336b8bd8c51540901ddeb8d2e1cfff7f793e3de90e54df8a757eac5d409f16a4abedfa35108acc44169481837133500f18f37088def92917db241a5e3abf320a814fcd12e021b63c04bd3c605ec37e804b4814d4eec0b5b2261b80d235a0aac3ba4a835c010d766c1465c17c39a73aa23efc020d7a08a04028400c2c233d54fbbd18323d499dae4ad5a1724d2ec6e636bda7e2366a56d86230c57e4efdbc7480ad20b114f878ba4317c86011673adf1432fa98b1be0265c1a38c67ad237aa725ab2a09dcf6e552d1094244719e813cc6f564bd5ff24bca46918d444737a843b4e3ce7ea3e70b6a30bea8d92ec1ab396a78c707396722379ab42a47fbfdb3bba7381d8f04f84f2321122df0894051fcf40fb87a14ee954ff3221ce5eae7dbaaf91baf081ee0acd31e60d620b3d47346572f9ac6029141d36a3a80dff7c4b4fee4a2cac73dab67a7459ec51bd984cf7a7059f035bd106a0fd2dc0b50cb7fae6e8d10e098a8abc31e97b1dc4130fda43b9aeab093ce912a03a4652efac1395c55d001c6d9c854a689c9b24df917f64c4b3b030b3637976d1473929643a11893c6a5c9a229988e920aa6c36bc5a5199852677c213f2c57e31c917606d6905dda3e53480e7fcf79e5ae2e0f6b74420506d495d8a008a0cff361ecc93565d9026222febd8f0cacf7374d2531a9a7ecb56fd887166bb2f1cc82c4410bbcf9e327d9b057449d09ba6ccb3639d5e30bf66c0686b5f66cc5f36ad1bde982004aff05b493b6173fc4ede8916fad0347de275213938a3302ab24714ed5f19d90bb631376436b2d663542a48f20c9c4ba6cf0e3d1811896f5233bc56a4c7b7b851da21ab29118e44773f685bb6d0f4c822ab9302bc32c163c029a116f4f70f2eb2ca552586de89a02a51638b07cbef1684eaab0b68ca46a8704f4f7457ef584f900ae5af368b11e113e74390cfff2efe05f4b281f7a4c3381e29aa18e16105a88b82be2bef4ad833260b3add38d3421365c3fc250137c89d2efc5ec554663ceefe2681ba3c09c1f5b94ecf7d996047e1e0d0d3dc0c96acbfdaebe8d203613664a6f3dbd99dd9fda9279683f9c9eb808be83b9101df086e0c6319440ec13666df04ce5e4bbbef987a6d83987232efb147fe8e39a2bfb72fa7b56184ef2caf84864e1fe28d48716dd2e703aa8954bcd91bac53750578b28d23da9a0ef9056784241a63e8e0bbdde66ac348386f4f64d75c8492262a6e51e9ae48b648ceca7cbee1c69939fd5593cec004fd14cbf79cbb3c409f813017ef8d424bf34f9de7a532f92ce92b68d3670977911ed275ca844eb05d8439c5c071844e9bc10d88a2a117b21dcff3e4fae898ff1f51c72762aab91622f9298a2ad4fd9c0febc7257a9a96427dcd16bb7f565555e37222ad395b5569212093e0c8a68eb02458d3d13f8e82fcf8b4a2cc2c50f4da2f1d06530d5f4ebbbc212847bb6b3bd689fe29b3272f35edac04845b2151d56f3cf80966f7bc73537439fd08169fa1fcbaa343012dd548033d878beef61c703220b250747ec88d707a1e1084e1aa1e8ef05f0c9b6a086add15f831b17af2e8a4a3965f13e8d81f39b53afe81f4c89d045e03a61f190e2e21e5199db456436c31e68ae5c2b4f87349ad9bc58ac5353eb50592573ce15f0f108772dcd3c229896617ff83261d3ac9abf44202ada3b4f0059ee204e64817b2639e2caf8f2f773aa54cdef891045756e3220dff6c3ae5aaeb34881956b1a9df27bb43ef7451d14e6d2650cd2ba43feab2af0e1c3c9b975f861c0220242f2ea51914a8e60c49a85ce479f7784e3e2d4b59bf0b466f2ff9367cd0c98d38d012ce3e1250d1c900b1a4c24ce3de61a4ed0d7885b0c6a48c5b2c100d42f8b95083e4dc8d23c5220dccd70deb5d5c52f734b1b3e1f1cb8ee8a2caae05bb620ef2d1a30acddec7800a44b0f3374a188a95620ab27650bc7b3e7a726ce7a0bfde3e749fde273a32d04fe3cce6981b563588d5d662992a0b08cab5c76163e0c67d678bef3be6e157cf8b82daad3e830e2333bd9ef27f9c42ec24230b4b796689bc7f0ea801dadb03fa45892907422ca06f0bd38e21391ac68ec799cace1af00df2e90c273b50243059b6cf99b4896f542d8279b47874824106e7ffd7d1aaab711d160926fcb7a0eec61bff7571159249bc38465f067b44a90aa79479fed90414056ed526104fbec4bbe0f17774294209f9f0b0af72078e5e9ff38dbed2baf587691a4ad865d7f074fc641ce61cde76368efb29003894cb569e72affce61a95ec45c031abda978d788aad48e0a47d8df09a8ab7cabc7948574ad75756bc50931aa8dc6b50a052212975ad0676db29b06880e36d161adeae332bb29c5e744ee59c34f39281becf53866421e68d4f7bb2e8a3532478338263366f07fb3936d09a9e71b3cf02da4806fc55fa46e41dcc6a924fdc5c72e00416922af6bd246e60e72b9a6d463309b1f483ee0a851175ea2db8ceae0d98c2a1d1b0660dad1e975f793c17702ee3db655dbd0d986fadbcf434671ef528ba0e2736b38e67d5ba7ce0d5eafe9fd93f79cd6827d176aa2f0953a9eff7c75c803ac7170f2e24ab49a8c266b5f5a3d581a8c61ceec8fd7f74aeb81ddf2526bb80b6bb40caafeed78aa705ad97a3c9cd70c6954ff32513234cf8d902d6ecae23cbe657b9569c05a456d8adac4b890a04583746062e0fec5cfec58a27d075a1cc21bc3d94a3bec4748dbe10228795e7330cd755170ee35925d1cbbace567da4fe0d42437a33414703b372a1b69da4be0f97bc4e57f4d422f191973fa8bf4821305ce521031722f5d5ec1727814bf62385c9672fbbf09943924ba3df23c8569ba49bfef848c39fdb12c4422e3823a1019ca91dc0c94b01bcab031d6b74b55c6fc1d001c8f4ded645499d11390281f4d656d04741c4e30be30cabbf5110e0c99ae88c31c1343725b0b57ededf1aebad62c06c9b33b42bca6d405d9f944e60f5cfe437118f407c37331b20d0e646afcfec1bbc3d6b6b30dfd48d7b9637b1c3ae78e3cb168719902395a4ae98d2fc20e1636ad4e60f35fff217f34bf887251f5042cea716ee1920a91406488b5769d76cb6d263c7f165b14eb545b5d93d0f018cb82d7e40781eac659da33472785032eb4a6eb5996d0c058687abd5156b53fc6657cd6e3aa454efbb37354fc49c521c37d34f543fa9510655c18bd68e92c871eb658a7a417349d824af37b030252febb636792498cee0f9bb697ab15c27dd75d1c83df3b95f3dadce74c6310f48e1a8d49ab27e395e96b0a082e89f695a1c47747468f97c7013c350d0c7b9a55a44686c0278669b34680b24ad29d0c1254293e1532a0f00106085dfeb04894604d3d20e5621e68f4b06a9c2bef2d7ee7b0dcf98b55d81d80f56ee69f4c6085e5d5112b9036bd74df44c29264cf963394e627cf8a7ffccda9c65460c91820f0f57dbc831c29bcbaf473da6b60e87ab90688cc12e731f890f7f9d9d3ce96e996468af97234348367add4aec74a724c5efd43a4c4c8e11298e7080dc7870fd83ce882bdddd139e6dc4f58654876182020711256d44142f96522f0612d242e9c4f504d6f5a67dfdad301e7d5ac88262731839c827705aa3ee5547749d12981d84bbaf2fb196f267f41d064f18fadcc805a97452c99ae1b705418d7929495efe84ea2d17af0ca62453543ad3b9c358fd0b47f38d6cf4d4d2e71da49cddd80e87acc5679e95c3a6801bd6d78524f69fe753dd1669d446855758317c42e5468580af8ff95c0772d9897be3a868592e946bdd884394d6603c31136f1e38ddb659c35905f3d67290c9d06f5d38057136b6dbe57ada50ba1f065d8bcd8756793bcc690f94b990a53da4b3790910662e4e063785e1f1fa6d48c7b690e91ead52000e300781912cbb7f2fdfd8057f7bd6b26a32572b57f6bff106f31e86a01e7c3758976951408459687e22acdd4a24af3efccba7966f60f9a9aa0ccbf12c7b7249d96a0ef67daa4ac1a66ce9c174b638e406bb9997e1ea493b6c1adeb37d7e24ea9960122ff2c94a6ae3514af89177bf4d79c95b8e45704d8be6175d229c415d5af3ea7e16ce4f6c338f2498a725a75262c098d8ac6500c5bb3662bcde2c2b5be9269ce7c491486ceb472e8bbe2749a1fc03eddab5e7a9970571fe5f9c724504f5ffc1c773901621e686e56f7670e9e968879073821822168a5fa07c58995babfb9aea2955cf639c7a0fb70d5f852671097afcc9158a03e9e94fe672b7ffd2f73e45f87a08ec286b982bf94ec1a4a268de8d417fe660c95fdba3e5b49a3689ebf340cd283a8d62fbf08c86fe456bc2258a39cd4c10f895c6f25c0eaf3dfb347a4cb7414de4c673e7eae3b189ebc1478408d849f81926e63315cda953a8c3c91fd432468b0795dd5c582d1dfe2a0f21f5292021422ca79b3863cab00f40a37c28724734d6cd6dd3469f3d9e1b6d2851be749ecc938aff5310535fa904f8b29e7562847fcc91175c1c94a01f7d96fa7dfaaea00cbc86c21e560f47253d79922c1e1f7d5dc64055c2b40a21f92f7ac4691ef34617c99713352a6292559bd4c5e40f3381ce81dea87bd494eb78b7bc635d031c7a9e1cc12f53fa0df3406f7274ed3deea30ff8b1e56c5ac7643c46f9f8352253dc973228910f589d8a264f6022aea271da8203f35a664369a3b72f26e272068c396ae16a9fa110f6e4fb946fc3713a9de3a6a742df9bfd7bf6ea7ea690fe14e4026ee8976eaf6b206163a503b3b22f9d800cfae63b23ccea3d9010fc1032725011d4d411ad80b501873394a46259bb2f33c75b4cfcc3431c9257c6b52c5efacf9c12b03873db2de7d78bd68facb729a1b00f8d930240f20f608e94cf428fb00c52e7bfe14d301e6dbcced71b6cc6b6d00027ff0905ca68f76d0b0409596e6f433974914f1cc32345f6adbbc4a3a8e5a5354bca92a6fdc01ffdadfd87f2a6fc9760fe1ca43122ada500a8896063b4bd54f593e4479f05ce29f81f2dc555763416cb5ff0b61a2e75be5139b7416f7788bd9756b2289d169d06471bbc0afe2813800727a78399a4c7bb5d58dcbb99dd0e9197c966f77e169cd5c7bdd7515a13dcf505d9db09da824d662af6674cbb55f08136fae84d7107c0d9a99dc94d4734d004534efc973768600f402fa85813b3e727f68425a60553ecf59f4622cf22d4fe6f981a536d5b15ea6acede6bca6547d2c75ec14e595ecaf396ce6af9c1b9cce7160a1b8c842c53b33f9fb6bbe4ae33e9d0a3eae151c35efc8b9f4228431869d60719c3cd03bae4cde84f51b30387d78dcfa2e0d9e0813dc7dd98a129cd27863e09c7dc48d39525f17bf584a12597f573ae1379c23f4a48a2915795b035ad98c62d85e8d2388bf5576b2727e64f1c8c98d6874eae9263ec78ca2732d37620ff02fa20bc1afab57fe0a9d5c67c102bfc41c344271266bd69e4c96b13d93e93f83fa0c303644590d081df9a393474a545b11c4b8f7ec78cf4135792966ba15a4cbac781facd99a5892f0a72a39e9dd542b3d04bde6c723e6df85ebc4568b9d06c70db87d090c977ba99bea6f762ac0e3cb22d7eb457830f114b21773b7655832249ccd769aee2bc06601d9ebdb76ebcd0224eda9312af997b9be4ddfca11580df24cf758c8d8d2e2e6731ef0754cd024258ded15d44a9332f55ab5859ce0ccd978cb28d05f69b5bbf0e3bb48d562cd2e7e383a51dcdb0143aff1034c4d3a77f7010cd2a8a15d8e10081d4d7e2ae557bcde33c9790e7ed10c6c6d189cc6e91ad3c838537f60421a4b7428909b0910b878352bdd905480dd64ca8cd051f514f11d1ea5b52a389ca4204dced1df7b33334f6d150d9e1eba2d463d7c2ae12987904425be356c8957b8edb7bbbea6b3ed65b6b51d225071198fecf4290a69398d3c72f807abfb1761269182e2fb14629edbb1868129abe3ba9cf30a3e1cb754940958435aa1272a2af715dd8168e053df5780e06f0b765d93155231a2cd93cf8929e4cf86fddc12683b10d9acfa671822b3d30348b9307ccab32a6ab8523a7f8786c47f4015c0259939f5e4fa1e4346a95bd281b2607f1b5a9137a5bf00874154253fb81803e1a5b16c0102d77d30c12841bb133f3bc901576270333cc66152397fa5f676820c2ef82e4947cdddad9498488803305838e509cecdcf75365d5213bd43781641714fa1b4ca4b05b66c34145e14594af56199b59ab960cadb85b1b3598d0f745da7fac27fbfc65aa0a3650aa3970fb2ab67c8b6f340be5502185a8913492197f53702d4349cfa77cd5656f06c42f383cf6adbfee3060e9745e2173479e98e8d8b4bbef28d98b979c46c3d8ec8d5b8bc4c921d141a5bf11c66cb9b24f4957af4c21827b0b4c51b0677dec16211efff23931e547799631a766dccaeb9bc1244d9e89f9b214e471bb1d8fd02b1bc062b2b922d2f9f7b9c86935ef9db41b7a93e940cfce83be142d8f42618b83613ce38a5f9f5440d3ce1d0ec05c04994da6e0c306551a49ddcd1e923ead112cd1560effc4c8c887c62bbce596a396dbf4a39f2e8738aae0e4a4f736e9addd68ff5262816552467e6cdb3d091c241da41ad206d6b507bd697ad7a523cecc17339b3790f05924cad94dbb1776dd96fd46b67eb9ee52972c15d7865a304ca9674bc6c207bcd58785bb1972d31539f62a095471e92c555f8eda7e2352089a39fa2638bb9d212f57d0cb5b3b2da156eb2f1f978c18a4cacbae65a9b1ead99b3dd4b9f11a33166c59f2fedd18712a0f990055a05d8d27f214ce91af91127c61a0de76ad12f5ac1dfe61222365b1b3cec4d6512e1a8b71604121d34ebe2ae841937ab6a240b6800f59db0f7dc2dd134252378cfe24877ff8b27c67f348e0fafc79fb5d80c7fd31e5c0d40ca5b89a6b59a5f3f2386f7be1d2e821d7d81720bb96597cbb8e9b3ba9fa92e41c5471b2a9dbb616754d91896e907a691d97d8ddff14231ed5df090ed283022a90d4c1432336efb7e621227a353ef42b262bbd27c552b588ea685f66828f77aa1ce10f5e572f4cb35f2b066f8655665d3097e493a6e546204f44bfa6a9aab77dd66ae035f57df9ecd8fd64c4de44d25a4e9fb6d85f1f8143d90335f39811e832e229bdec1939a2411ea0d9736141f275aebddb5b868b49e7207cc63bd0e22b91f03e77bda1310d130ddc8a5e34ef58e40ae27bdb037c2c4e55e4ff91f8a19d7b5cee3a2f8de20dd22245ad933affd2dae289d7f6990738c0a284daeab94d176f73cfebc15877f8a914833e7ca83ad98dca9d9c546ce71903121a705d0268647f74f73d3ea07d277ef77c0e133309f115592599dfde5c331d4c6b66bb0cca57321e213fa4ad1ee15de51507da3f85afd24b856077665e31244b1164273bd9f2d9b3a774340c216d39efbb5697447f47fd99f4255631e4f1fa541dd49e59a7c3fc1c8129a0522562eb79f735b769a2b5a3abb63757ccd16b49153820b0c4c21be9da9db3dab6f2a1f423e7ce62fec1a0b494923f2a5b30e7ef15394fd63e44d92fb2f9d0131b66d9fcc98fbfaf2cf1af7b5a0171caf256d331f1ecccd8e0abeaece55cb2d5cde6fba44dad6ace55f7e5cbae0b453c749a7f032071582e1f8f5fd5273fc5ff49a36cffa3bbe677e49cfe3354df832376eb15936ce9ad8ce63ac3dd6422dc01ac5c192bbb61d0fa0a057906c01c24b7f987d4c86710c76596ddb70f65e41e8b4e05781fb9408675078ce832dbc4a64b0403bf884e3da721b72b8badb6b54eaf2e43bbe55b890d5cec72bfbca927b01644171137aeab5fbd94c3847d44b262af8cf23c6349cba5a50ad51b893d38807be7e795be8547da614193a64ed78c7c4adfc5a458ede682e98b7d85335beeaa97154bbf02afdd55ca49f3cfaa4680da07f6e19d73b649930a302809fd3594eec1b934199dbeecf994c143883559bedb0258043114c953b8032aa28756d2cebcef644c1aad6109f0cb557f00b5d8b392ac91e58703ac47d3e08f48587aef7368cdf52ea6dc481a7f771743247b3e37998867b6bb483fb58870a0e0a3721251ee29ee443340c900c9545bc7abd567845dc0e0e13b86a153b8032aa28756d2cebcef644c1aad6109f0cb557f00b5d8b392ac91e58703acc4133790e5923d003a8f42192234a8fffea6f3894c53685e18f5e7cb2bf6898fdd3f29ce3f03221b656aaa4caf20ad9d4c0e4ab2b1af1297beb640e45075102843f1b6a315946d335d8300457088f45c3a426695171ce26c30f18a398ff09269305c07e48134ac04d61dc1414c061bd7750dfa167fc2b497a6c20865e0ea17e42447c5d920817ebb96feee62b9e830d8fac8084dc01f5784caeb531864079061ce9d0291e2396822b99d3d736ac469fbbb7ef1f4c9ff949440b6cfb1e93042d5553eaa2ddd83cd370ca0f501ce2d32c1dbee3228ebe8647a40b961f66d0e8c84500010706a6f2c9b2eb34733fc1065cf5260ce7c7c34f4a0b2f9136f8f8e08b70dc664eb73cbfd8ebd1c3ce9b5cf6fb85e135a55877ec3bb893cb8387edf1521129eecfa03b721e9bc7d1c48fbe8b5e4cbab190696ec5ad8ddd33c74c0848396493b1eacf6225818081cc9992735957bd4dff602ceda0fa91d4c4e0149b3d08f549b8a583e5ff9d816c216783d181bf5d67b52a37a84eccb50958930be106e8e1b7872ca190db38c71df0158549fc5a3a7546b5c10e682e53dda49ca91ddae71e528a682716ed0c87ff9ccf0161fe1d696f099d2c7043be89d9b8ac8b5f63f0e27fb371c7910a0cdaa1d05ad65a679e08394e155d9bc8f68e46a9f4da4c751b7136913e08170f662a8c544e607794cb4d40f8dab92565bdaa9b47c80cea3406ec7ead94aa712c965c062c363395e6dbdd929d1f09b49309735d779f45b8cb62d737f6d71db106558638b2c8ffb9db4877a59d2a9d591b4105e27a36f5c5ae04f8ae575000f531daef6353c952e9f631060b84be11a106657c09c7b3a79f9f6fac0ba1f226126bc0f6c8daaf2e07dfbae1d3614b49c21eef9c8289ebf7c5271300914f9f5f453d1385e5344a537543cbaa85712dbb73398a33c08da83fbb75b8e07fb204890e09b19a27fba38643f59c95b9a02843a27a7596ea61e5071f17869dadf6c1b5325b16116feccc9bd594d2ff216abceb65357a8cfb95f85e2cec15fb07133047f0afabb20a64193b204296d496c8ab73fb471a2645c31574259d40c7b85f5d0acd5c00d5e818f13e44eed12a037de29ea0030abbcaa4b9f34aed67fcdfa7f4763c39b5671adab17dd9611e1fa3f7509ce7fc97f01b38542458eb7a74ae46e88de91d0749ef1f6692fdb500332293ee31c2517f06b0ee3d5f3b893b6a532490540386f77eec212d3e36f90dc0c3b84a94b40a76d909577a8bd157fd34f0ff371a810614d25808647eb04312329e03433138c193dd9e0a90d3c6eea2801961a44c7f531b377e4c87e569e2d5cb1f3028ee2ce7a493908d85c8671999a3688c74df8be513f44997ebc2a0f174f8eca15d0249d4ae8c283c295b714167227cdb125b6e9633aa259325a2e961ace74b28e32e78cbaf7f259f3ecac3c037b9c20d4b184317d600fb7756f44956a171233f11cef035d032c450ea7aa7474ec0ea4c725ad61b060a4d2892756f441f16320af8830293bbf04608af27a54258f58711fa1920a490449dca6c1a3f892fd9bd5211b7493c963aab0727636649d1dec00afb6b1f28d995588409513cf679a7c82802a045801ea9ddd000e3cefc5903758a7a7ea4a86b351cce781b1459b8ea2bb247938a32298fd687785d8e7c7006eb9376122e0e08a68cf4b6f421151d6657d3559afc8fe413bc39e0cc2d411c1f276eb21b0cbf5b8791244ab6151f44c4aa09030f6c32d234ffbb6f7170450930c6d4cb90f6ddc9d0ca0db255d4d2c2958e5d29473e3d9ec4ebb0eb70cac115da47cee0ef9eeee787ce8cc25f8243a4a6e4d9d1aaaf42a812be5ed9faf9f3f756e6094efed9de27322b875e49b5cf09024d78d683465d87618d790197696740da1160828c4a6e6ff988af40977614c573c93db4dbe2fcf2f081bab24ed4ac8dc62bb324763e6de2732912b5b2fa3b10340edd0a5eb9fbd771100a2a0b8d7c70bc0ef5a79efad5727b935832d738a0d9dab2e73c9fd8e96aac4c54184fd1a38ae0f12b633a7ae62a254722e94caed59d7cac73990cad7e173e45e15fe327e273faf85221311975d4cde598fe8dc69077510ac03eaad314fc1a1567e3ade970a28635d54d8268eb465bd6e1a67d643553c0680184c25290d048a78184e7e04d9393b50c99a3eaa354f07f9f042b67fde9999e78b10dcb86ace5c948a0ed58183a65af2fac336c030cd95263d9d177bd3a6913632c2e054ec50d2b5bdb67bc3ab9a9562276d97664cb9171882300a4f70d15e33e590001d43a507baf46dc008dddeb73d25f56ea8f98c6de8484a01c71f770b09d00dd7ae1bbf11bfb3d20ebd4278224bdcb1d2e73473550446fc0e0bbdcabb4f8999eead624e3ca7d9289673ed5be96921f6e863ba5c544f5e36cf21e9404e2092887c7a1dc892d4f29912a64fec43144470ad81bff327e283837f14db008d217ed0f5020391e5e3875702f9fce6c38fe838586a0716aacf3ea1929eb59c6b8ec5bbd6064d0fc1b2a29e620e0c0b4e64aaef881dc9a58197e715a9a76289e1f5551a5b1d083f3f8b7bc4918360abd29fbe52516c30b4055c5591d9dd28388406238f612081e5712f9c4f37713dea87a082ed55e85d058a6a3225a934dc624c31a0c4bb7a78ab726f6a2193a59fefb3c4107b71c0c67ea3b067f807660543bc51eb820d7c2077150afc7eba89ce298801c497d817d78a866054d491a3db64c08fec5deb0a21c8e97fc0a5e29eee969f517c48b5b585ab1c33075195f03915186caf27f0fad62bfac3dc95a005acc75ec6b57f06e188667ca08d9dca91c1bf6ec72a6f2a48cdad790e3f708f88475f99b6d8aba476cc0da253596d39377bb6d8a272dd369d07370b6b4d36affe15cef532cb35d6f02eb18c26751b202d1c3519751b0fab5fcb0ff7721c59f7c299f997c0b20469b72055b15c6babf98332e0095ebf05142966075fef6dbff2e46b08e49b09099d60ec302d7205b639fc0d3b54852e71234372323766ac7788a69d75bb7c2f15b5005985e0d57436b7d0739dd4a99b7e81ecc4df5eea425ff537cbd31e291a61ac012eb9eccef51bdf280f3812fd146072f5a7d37cd9c46a02a5062c696a8098e767edc5c10611687772c9373ba78edab3ec35e18bd763fa38dcc1e87ddccd1c27da61d42e4e4903f3b0eb838022fb0b8a861f963dc25ea7e06ffa015f4ba2e63062fe690cf8417a07e03250187aa86286cd7e282987e6a96d8f9a0d2b2123264874d1a4080301e0c030d8b44946e6a59fc9dcb5cd9ecb1d6654b7927196c2ed9ecbbf05c9617d7667a1fcc1d0cc9c84e997aaf5fd18f2ec97a569844dcde51105708c50e4abcd8696f0671bb6fa602a2c39e0a45d4f68f8bfbdb9e30b38b1a97af12815100b391ce7a4fb3b1680f32cabf24187a2a91e4290bd0d8032f9e55274399d1d54de2979b65f7c906c7ac404bac9a103f84ed6ea9abe9d740035ff532701f344b28dbd620122cd40277afeff9a4a588a554556a632d85d8d397289795f53409e02bf86f710463f1370c0df3564a4ecf85bda0120af9c0a0c04d16ae2597f0c1a85b5ffddeadb9d5cd2ccac12626ba53ffb86f1474609dd2077dbf28c61ad472ca5c81eef32b0d0b5e2a2e977bd359377602b2214c22ebe14eab13f6fe60d533150a17528b314856a6661ef6e0b668f0cb431ec2c293b42fa4d66cf1373662e459e8ba26fbb4ff8bbd7d9717a9a7d9ad0b72175f9d9d50c863d38264a6fdf0f61ff9fec18c6cbcb10718926a6095df30fa17ff3c9cf3c6e523e3c8605235629711bb6f80c81d250182133cbd7eb2e68de824052e476c48d821974fee0bd58823cf4e4e2e00bb6c57578052d9e545a2964a56b28a9e6c717144bb93fa226a0d17d6c21bd09bc58c6d4e74b06eaed8d7428d15e3431a8fcc3d71712475c03f79d3aacdd233634726d48d325287b75d53ed92795334523201608f935c04a0d706c509ac7e76ff7564bb09eb0bbad20640be66a53c4173d8ed6ded72f14c9210566d11308390300d9c724dc1c7ab13af1465c7bd3c0126212d5f72d9bd2ec612778f7f4897b24fd19d8dcd788662c0c8e583cb3bb116ecb1127024a0287f83e72db7738dd5385353a81a72677331c0e996a744712dad031ae9ff40c243685082ab61ef28e3a1afa761b839b3676d18b55be72b063e8dc396f232bceb8e5ada913f6aa764f187ae16f720e3741b396cf0d838e08c5b7d179c639d3d149bc7b515d4455b27e94ad0fe768a1c13f6c5452f90b0c80e753185908b0524af1409fc2194796543516453033fe6f69b9942087b67beae84147c8b1b6cb1b05ada614383f0c36783abf52905b9bdf8d8d6cc8518f0fa5030cd3e211cddb05386dae18c399e0b6247f2ad842f2ee82845522a6744b9c05b4f3e47e38ae139ffd4b023aa53c2b804c8c537e7a59c5a40e16beba2d465127349a4aa712b9c76291d41803403e0a96bf52b8de5ff77a3e35a15e94916ce77bb3fa1bad4561a894e77a9ea006aa57f5ee5f08247803a59dd428ece8cf46d1766653e03d2bccf7fa2b42c1f0ae45e5f0d7f521efcc756db89e5bb15fab068c73a6de902657aa05f2c8ea0755747a9e377a87d2969238d5661d0f84f5c46d2911eb716e527493c43ccdfaff13e50455f38e2bef1b7078dff9b48ee2937071818e28a6a97053588dd72b2123264874d1a4080301e0c030d8b44946e6a59fc9dcb5cd9ecb1d6654b7922806c7bbcf6f28d0346820a6001129ec8fd528036fc51fa4d59f5afd7f3a22d9acf0984b9c3c7a88d87d6139618edec20d6d11c6bd35d82ebfcd22e837942fdd76441f0b2805fd56e8e6f66767253a4a0f15f0e68715e327dc65a4d4e53ecb5ff1edaafa3a09c53b7cc35a46757dc81e553f42ecb7a429d3f22b64923d0bf0dfff3275196726a13e6abc89959e9e4618638edbc917b449254771c1841e7c538ea7734d10152acd03d334a0d8e8a2c2a6b2b72fa297d63707e4c3bfe85a125ed412fe6147ca4fd1619469539a17e1a5a2e1e24d740d96c689fd8bafb3b3c1189ee2905fb70aec3f94d9b02e9f03d13f9333a043d99e1761d1d8208bdcb465bdf2eca4e537012698770105c9ce1121361b75b30cd3d9381465895af48dd425bd843fee88fa2f0d57ff650589340596af6a794eebe94ff4b0bf566002ad1054a8163fa4993cff13831c8eb0dce73652b2d07c9042f5e6fcfa4c8bbb8b8a31891b524956f4ebd62500dccfcb482d430024fac98b7c86797b106850b02b06a49f41e0243f65165e8fce8b84e15a6244084593aa9b18a84a76556722e676522c09be9734a5a1b8d6a8e5e48dc53c74e42fba3d536d7409e0f2b0aa7c48b5abce94297c3cd40deea0f9c784772f5d4b06bf64611d8d5bb61bc8a5f4b5adc2c2a589aa5712528f9c7dd5110a2b319ecad5e301b211a68d055330bbb6eccff1eb3e66fc2089977ba26aa972015653f79914acf4767126ecafe75389aa97ce64f1cf3e5060ee968772586a715322de171d18f8eff1f8f93cc646eda7afd9d1fa59f963cd8eab6ef59a4270503baf92a355ab26fcdf69599a5b367fecd4e0663885d2e7f21ec2f82bb7368cfe8d20dd059b881c00b26a6aded9ca8e7eac14d0f62d2230b134b9586c44c25251e66cc18a4d7dc15d03bfca9fadc0798c2007b79495ae7582c461e3cadd5dc149555594f6b596ce91b840930fcb827a7d286da847dd4f647f9fb03a29c67c1448063f97a8a5be831c56b7ed0861a346f582d6f9b26bfba334054ecb0403a6b39e1a2c31f3b0528670dbcfa98abda69d51a0a8175429f5d83db0ded3d1ebf1efc3da90ec2038e3c603b70857102208e5444bdd966e9c04926984dad943771e1140ac8f7d143970fd8f89b3383e5ba539cb1b86d163073f10fadb4b8aa06c32683511201ebfe641cdb3be971032b4a8835014505b08fd8749941456da4dd127bcc5070353e1f6e074e0101a9a94bf9303d99cdafcc759d87c822f46867cdb954a1949c09b56e8a5fba749bc2f36518e974b7b8f66685220f6eab8b92fccc3e1d5da0ccedc7b388754a296474a308db8a9bc2d9f411b65c4b5b3e671af2b71cf956f7b34e6ed3ab50cfd0170f5e04ee164490a8f80e5c17f00c1cb978c5750164320a98149dc47ab96d5af539a9c18fb2539755246be8c60c58d91e92fc85f41d2da2d392fe39caed40b1f68c0b823e111500076e53693e9bedc4b3ec67c1db05dabe743d5686ddd89c286b2f11f844af05f46f837675ea911e1a35246851be7b413609eb50c62d0d3f73c7a08d8cc4a5c920628cfac81c07bb2a1a83bcd738aa2da4787a95d1a1e18a917e166894c3db7c9cdb96ef2229d93dc98eb74ed246b28034344a185be88942bbff5389cc6745e09de26d38e05b0e24b3dec425920258cf710bceb2a9d84a74f7ede031eb22600dc0962bd3585a80b07b561bc8dc1204c0f06ae1c2a7616e153c85122f6e78d62ef21f2ead82f18a501f49bbc97866d7e9aff909d1c76b2ad38a355212a2e30bf4ef9f178fcb6fc7e63f6900b8d8230bfb2900b98dfea8e345948462231bfeb70879dcca467110bde84708a9cf77638c6f7e23f1634589c36a21a2e06fdf9393b730f493492234cf8dbb5acaeb35230e9c597ee02f0effe0e4faa2c7b2322a057e5f133e5e1dcb8f465bbcaf9247988089a273c6c02ad22b5ca70fea565fee0c58bcdd7ed61f2e47430b1ff0fe8b75be23cb935bc95a0378686dc991d48289e6ff15056d0eee376fa52d3fdac0f26fc6014ef08896d1f36ba332d8f131609d775de13543bba2f66988aed722864bfd49031ecd82b9915aae96ab036def82d2a36c5321cd596f6c8e749253240f8f56d5fe4fab7e02a9b21b38462b125387cd6f4b84f6ed43053b30bc0b28baa4cf55ceb5c4fef35fb6dc5b012e8f9685a8de347b641ab0ef7c7d90ad068ffa3f2ec08304bc9cfbb53104c50c4c392a3ca656c5591ed034558f98fe0dafa435151617f7815536e5fe0861c71b555933107b4371dc9b88c6c42feb205ec56cba1cbb7d3f61545ef6c18dabe1432f7a77eac44e48b710e1f8ad59b0a76be0d1e436a384b6d289c2b59ca4615b6421ed45e6ecad25fde8140d75b2c64d5e6f8cb9be8db45174a4831eb83c5b7741db0b26ed48bf8f03dc8771c66a8d40d1cf6ff3275196726a13e6abc89959e9e4618638edbc917b449254771c1841e7c538ecc4bc890a482389e9a2f303b9380533945b9f676e9d59dee051bd2ffded4f5ff895650574867e0359193ea9eabc0db938b78a2c2b6dceb6b5ada916cc6f9c8561793a5f3c8237fabe0d6e57e7e7e824d9be3a6a26a289f4e1f91aa67c0dd3d1fbd9ca944394e2b538ca147e37fb09e92e4cece40a8da5b8d7803460a5d89af15eb67aeb8d11c7a15050d4182c265d79ff5e637033416aaee96308401cb8354d6d1711e1beb6ee639781463a42aa88881ac7804db1ff2962b6d5253b44407dcc60342d3bdebe5a7801c89228a4ae835ee9a0849182723b9555c6c7d7238357b8d97fa4103a28c18fc1eddff3a22b251c4a49f2181902b41513840f17d8f0bac06499d877909e64f81a69ee3b4e28b9f8517033dd30ba48ff6df317711a6fbd6551128aa46d03abb5cfc2a2016d6d90219bd5d49c2833ee19aab3b28fb71b441be5e1b8b959a57c3ee5b08f1b96d57954bb82e581a4b90e52fcc254aba66b62938959003c0f9febca9cba366e2f3c54c6deebf85ba2b873ca8351f3dc905cf749c60495dc70f20ceda43ae6dff1f44f823d6393cf86d46a3618a8dca1f7f9a72b1103515e2d2a61d3c212a05c168a539228b5fb52d7bdbf16b7ebd577f14a0694a53e296472ffa61946c9ea2399ee2e18cba7d5cf77645107c9786117c7a021c84926862aa677364dcfad5bfe4190cee21af9ed0cdddca920802aa5c6f2f719b4ce44797e57ce7493818fc3afcc477bb931598211215eca4d3c668ee360a20e1d5c315be000a2c53a2c04219c02f58f37acc7d7104accd4df5f855303ffa91386e8bc018a9153b6db08ef713a2eab4232c0f7d4284e1392ed0b66586e1c8cba07e368343b8cb6d69bc19d27e8e1f8a3f47dbe156c70e44073d881e4e5bd7a2f94ba09e79c0cec913a552f19383fa2749eb5cc9590fe0ecf06d6d84816c47f671297863eda6726791d04a510c1f85ffd7d77b29054bd55d38836822cf27c69ca2518b158ad93027dbf2f9c46e27733794ae591065d2dee5cadd1f56f39c1094bd826003e5bfc6cc9dd619a31d2fea09ae67380fc5588e25debdc7283b4a954439f4d736810f051a26dfbcadca3b97cf2db7618ca1687b4968db3f66c2c84fc8be2818798abdb590708cc2aac7a71e7fee56440123f236cf1cc50846ae3d20d638b67cc164f331c8b00e16c006d2685dc61931047108acceae6b7af1eaca79a09626cec8e78ff39bdc1d3204eeff5d79b3daed0c946b5ef8519984d892b7689fab1b88d7088617120f599dd2300348fb4dabc71ca7f35d40397ab01ad17731e8097a1e0ca6e81360a4a336107b6897acb7b6089f012f7db79fe434b40157a71e82fd1e43c144f1f8cb66b5ff9f879e4d8d1da1b8db0ed4cf2e872ad35fd2746bd0477f2fd8986aa48fa78cce9e3928125cbcd4c02c73b0b3f9fd60fb1311469fbc62e2f2e8251d7efe648ea9d18b0fa75298881349c56640c41e3fcc0f4ee5b5e9a7bde8d4c6de817085d2073d9089e3faeb713d6476493cd4b32947e69de0984cefe15a3ce3dbb5d7195010af0b507d89b8f1db5f3b42795e7cfe481f7222e135398bf82236e6d6da0ff1e8fe2a3cec35c4da298f94e70f04ff02711e34056d59c2a6a1812c1a479a13e9a67f5ac4e699b5e4fac8d8158d9ede207e03464fea3085e891fad019bb0f1a71d9aeeb281b0675cb5ad911f584813d0e248e8197ebd7542df28e868ef67c4072dc6bb751c5dcfe97df1713a8e64aa2daad13e3bb957df8a77b5a254a505b89b9842354826a1be266d01897427183540a6f68f0649f72f9f0e19670d4009814d8d09365a4452d0e0e25b46875b384fe3e6c856b7de1cea72056ca5b1eb9ce40ab49bd82d8ae7f864d09bc6476d8f110c25a10c7833e76f01c32aaf7b89c8b1359f7756d27f5e63fd1c8850b7c28fabc182d8d25b16c8a687e62011afccf8c41ac83acba961b6485cc8f6423e167dd0dcaa4b44020a5ae9cf9024c18f9269a159aceb80a95355837ebb7e3159dfbdab79e4504930255c5b0e8ed8a1287c0e2f205079289d64fca00c91a114335828e0048ad58eb6b48329791df36c5f1b875e9b0eb67292ff754da2675c2df74c449725f346589ba8a7d93ca784eb060e12de9cb19b10cce5f9e832cbcc57f88162151e7aa77775cf73183cb3d4d26a1934f1a85d08abac3455aa27c0de156b91481a3ec764ccc99e1cc7dc5e677e5bd7384a63c4f34247ff2a2eac17891f094716166f87e55594cba2bd3c8ba0272acf1a31307294228cc49f83785e3916da245d409d863bb4ccf778e29d5cc40161d1c138e74418ac22185d2c07008d27aa33e7457ba04ca4b316c370f7ad8af3f8b5b7e028357788e9f73a99f805a3c3aebef7b10112716f0c1a3ee3289a772c057947d2d5cf49ac8547cb22cd7ccda583fea70b044e642be1e65377c57d2ce9fc34ae7a514908e8779a6ab29a0dc6033a5b97e95df5dbe75e1a005cc2df28e868ef67c4072dc6bb751c5dcfe97df1713a8e64aa2daad13e3bb957df8782515a3572fc58ac539beddfdcf927d0e247b1f69b1cfe4ea4088e419873375c34b496735597b69b04813629ec75bc1cf45bd29b4e24bb1cd67a6fc601a5df81f86f72a236e8a847f5dfd1c046b9bd98646077856f5edc7e9c643edff8f37b90035ff532701f344b28dbd620122cd40277afeff9a4a588a554556a632d85d8d546446aef42ce079515e12bb9e7e04cb1be248f1c402e3b726360b336b666c2ea116dc1102db577bee01de51b5787122646057bc454773ea441aae0c30d0d4199984473546fae0c9fd58f1d521097281ece4d91848feb1e75e5125f5ff28a3974aeb9da2dce4e05330e847135d29f786c54dfd8b6f38973c73e07e99c3f40db35991c78a4d52340e4c53ca06437ea811620970af6f5c736f8d934d1056de70b21f3b2e7fe1914a82e2f5c2437fe470231b1646b1326573989c535f2ad6ae581183481d3b81ba89f8203eeb55c8cc14015ae66cfb57da976ddc73121a3c87803f637b411979086c2a64f972a79546e14a7ff1450935c820b0a43edc5ade4858d0b54fd43a3d305b4e9cdfcdcde5b721b543f4a92010caeecd4dcfb0174f62c854c84afd046882fe8c42a6202f3cbe5e1ae14063c234b4a358a89d0977c6c0483cce81d3ae4d0f30ea05125465fb12b9c9fda6e81834eda89e7a11323fa9bf38ac146ae695ce9930faf72f923edb1d2bba9578ca70b59d1e704daddd78f5fb226557a252c3d6dbc976f5ceac135dc340c36afb83939494cb2dfd9de276b0fe613e3014f8c5cbf1adb7940b24d64a54a4851d32b0fa9accf59b12edf595905ed3937c5ca5d1c49c552895b257653ca1f0e12a1a6fe1419a6cf1acee829d0a6996ab2676dd0bc536cc6ee1a814b18b89b2ebee227678bb4c72e1408199186decd451b72562ee41fbe8d1bff7e1e6afe7ed3c518fea6274453cd5891dd6de34e50910d226ce8adef1b7daa71a8b726612f36824d26e62eb2f75216b35e9dbc48eb742e9a669081b96d24bcf500eacb3063b5fa2720a1c810ded346cecd92d47a51e84d5c4ca7536864de43cdbb9b52b897d7c7225578311a9494f54db840ed728c4f754e90298c0842cbf94a3f1516060eccf86b3a55cac2baf818d030911d9b8dc2551f952c70018650a78505f651353c8332988ae379469c2d6c1757f3ddf13c66548c47cec9e50522c5c98e86312ca18ef3c219ded3f0040bd179ff480a138a9eaef0aa65363b1edaf23ba4eecd332aab2a2b1ed1e124b3463124e7a582d50060200554b018a78a265ad4fd0b4eb22b84df08b71d95874f11890ac82fa51a6769c4e7fa922d9c333df65550ce47fd6728b3695fc18d7ec40cd61619d567a4a6c4032af1bdd63b9f289cca3361dc4117e54aadb12209ab328825cdce1c89ade041cd39b11053f88dd151704d8cf69edaedd14988fb3a8a76bd8a227a09d2737dbbca6aa105fa134d5bfb16b3d25db23466931920c219a251d307ac59ba2b9df68e9660ac1f2ab5b87c88a94ff6c41edddfadfd465d4df9a380159a30f268da48cd3216fb5c4ab115de13fe47b023a82105bf03a549716c8f437231766fb643bf5694730d7afb85486075ef9d711be8af6fc22c5ed85c3b0dc146966feed580c762b879bfe3c0bae76dc0ae4863cf2faa44806746aea95505debf27a20d70772d9b03cd160ea328bdf50c2c7142146a920ed7ec1fdd8a348681fa36695bc981a269a24c344fd6d3107a630d393a51f3df5820938c1495824cd463f0e2a2ced4bbbe25bf5e2f71845a26ba0b62da913b41d558c158d38a3ba0ffe8ea6a4442116e63a3eaaffa8dd5124f808a1d5afd9472a78cc067d080473cc64d692393173f1bc79cd7080521c4c057049aec6a7f5043d0c3f81eb050c8dae72d38dfdf214644960229d7bf59ab29fa93e831284f71f44288498cf2d95c06b0ef4fa6f13f056a21e57ebff6ddb290a3b4cc7879abda657f5b71d938f3e4e964aa1020255993b18a020dd8754b89554fbccdcae75d4e1ba14e310936c8499c52a920c40f5823ba88d99793e7de521ac4dc9c30d75c773813fabe9b7e999069a69fc511b5ca2c96effbe874b3bb3398da8e0333e80ac729c2e427920b7c10bccbbb40e0afeb8f8d83f34ff71dbd81157148adae1f1bc0040e71d9a0ea097180dbfac1a0c09f9dd4835a1b4c341ff3353d9313d5d176aa41619a240e90ef26bfd413b430713a6d2f8081d211a1f6e269f62a520a56b5061657b34a115c3a8a7692b1838521f2c72f01a76596f2d7a91891afc5712ac9acd611e201204ce4bebb9ee377ee7c0ace32e90a54b567a37025f55d599e0b8f049796f27cbd31215fa35c2b9bab18116f4c40c7bdaf94cc63f6fa8be54a3eca43ea37afbf89108b749f159079854a5ad4dbf3a8a26875c4a850480658e06edf484a4706b7e7fbca061789a7be96c04998cc7f07511bc1d7bd02ed8f0eb0d8d9ef80f02d3de414c84576d5e852aa2ce183902c012e482887ed711efebfe45e1a427d6f4654ef2ec174724ebdb5ebd4804048f3943b989e9f24ca242d2703854c6565dd35d2f1b7750a976fbefaa8c80b6b8d5ef1cf716b9a9da63f0ba6d9323f58a6b58a91a22383d96d3b29e1771bfb9d4cf61cdf640773e2467d363b9bc937efca13784f7253f0768da231ad767edf71a4053624b42e900031b582d0694025e8a50d6efc494c612c0ad1c442d055645614cd9d784db5303f419fd4ea135a331b46bf8043626e5e0bf64645fee1aad372031e5e036818d0a31cd857f091e5734b187216aa73ae55286a3de53d826294bca4bb908488c65a6ed1666c568dc92f7a711993d0598313617fccc445cdaaa3774c847766bcb534d2a77307f96662603fcce771958065a181334c45c74859b66608c4c2142188abe7ea2fab3c27703e551657935947c19909f208b7e39591cbd189d6ad25542f286571c3790f63b0bb365def08e1024e0f265ee870f9a8e0326fbb82a414a39f7711a9335f0b27d12d6907dd33234906167a314c7b4627f6c9f5e3879eb4a244c7af8ecc3d87da4d7917584a211535a87ec1c846afcc08a1f7cd4385d1fddd160acd00405e4c9b22c9a765c8b82178f9f42d1006188a43d5768fed10eaa778eb2c7243d1399909d8610a575f1ce7d4eb3ebd1ab1dd194abea19daaef8d86528cf5ad954a1964dc93e0b5a15d20d06bc585f3a7c878b95fb87c7bf27c7d4bd12f158c1e5a9cdab6254acc831ac9b5e3e6dccffe35ef334fc27439c8824a20a538ce1c1109ac7ed4ddff327e74049dde5db0fd7050a8252949577b059872518b98487d9f661158d0dc08fde23672e13f0eb616ff3d98324e04e7c7844aa973b74a781a53fdf0b409ac16418d27f983d80cb2999b38b16e14bd4c8175e24fca75fe70642ba29cbe9f454a59e1873454fe64b3a7400e6a1a814af771fd62a048b7782b7072e6dc95934b1cdc05fd8bae0d4411188a6b8e40c82f0040590e62c3461ef6b802fc34e5acc68acfd81ef0a87b6ab9e2b3a0782cff9889299536bb0c17d0d660b4ef553e2530e6f49ed5e32c3d06707a12b1b08ee5f0bf0bbbba81d668e72d143a279a1366b6e0b6b11f2bec65bab3c4f523a45005cc1ea61ce9aef41d58fbbb7189a2b9af38dc9f4e10e5f24a106eda462c48bc6b311fd952afcd5c5fb676757e765b29ba1db98f73dc395dfa789832777520cb07089c51e9a573a6442e23970deaed2560f751e11bc42e062899393a9875196c853861e46d63664f13dda58e84181f87cad4cb62cec7307637127614b0cc980c8296257d00153c31f10df6776c035bf2ec34392e351f5514012c6d8d310c978fd39d18045de87cdee89d867416251d0cddfca1a6cfa4da1d47744d0e1fe77160b987e6eefbb34236fc9dcc90e2e710b91804f8687a3283393aca3858faf3322bea0c60e2e65f624db948fc17bfdc200135007ecda2b3bcbb62273dbf69fc9094103a87fb8351cad2595d1d24e224f557ec5b7960a0bc597616527e13fd7b1ccc44cea1a6c1706a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f229662666b44dff84977b46e05642cdef910bc3a93a17b5fd86e632bafa59cf21e41da07d35d03f6db0108a885a742ddd7db59f25c35f09692bd2933a373c72e084ba853a6727cce3aa098722228613b1ee8831bf5b3e44d2520edbd5c123b3790109019b26af2cf89633be5d7de719d95b3d4eb8e68f26eb72045b733624f21c873f0c36f5b0148dbc6ec19bd6f2bf81a4d2433e54cff27af61facf670b1e444ace2e7d33c87bc0f6d3962a4a3408c04557646f7f51ab99cfbf574906796b016698f67ce1eae404174428c5c8ceeb4e0981ff696bdcf7d7296b96e9152c16562370e55d3330a413a3ccf677b3afb3e0ef9018a5fab263faa97ae8ac017fc22861afaefcbc05b740859acd4e067bc92439be6bcbe8f2e9678474fb434bcd398d98282ea707a94109beed47a57574755e2d58401735904a03f85fb64c578c53b4f2cab1d5cdd760f03cbe812624204f727f2fda6836324c49963ae8ca758e05d282cab1d5cdd760f03cbe812624204f727f2fda6836324c49963ae8ca758e05d28b2ebc25797612c4f8395fe9d407725156044955bfbcf442036b7f55b43a5f9dab0c1692ac65bc56dd30494b1993d8e929c48cc9c4b92029b7c7592af6d4f92204e9249c179300138141d0b2b7401b11897f64aed69f541f078c1db4594df28279ee866f2be692cd96738a2bda81ea7c7f39b784739a66b10ce3a6d26fae96842e1c202a6831b17e017b4737e80d5b992905895b086bbc06285fc9c337cadbc233815197a11013902d7480a9dc6b4b69cf0c53acf867a598f3e56b38dd7079d3f4a749a219c64fa83a7e1b9db29322222075330d30554b246b9c5344533f599ccc1a33e9602f69e9f2e88b1af9ea334145c0d6db94bfea6fad5f417957e3ea6e45ba428d4ad428091f6204620975887b9133a1fec3d91588a01a7275f4d9db7b0d46d2ba82a624e8317e247d45ba75e16e826c86fb505681af5bebf019e0bd871685040273cf350d5509e580ac451555efa19790c8723ca2af066adadc6880ad2a48db83b7ab3a80de5c25ae75ad55a0c3552663749372021988e2c1cb5e6769bbab58da344720abea51c65607b5b7d583cb0b72f85e534db0eeb1c151dc8b55dd50256e91302449081046900380959b657a2fd2e2d46a0b521d66e17d3789290119ffe505475cc6d5847d8156a749c5b6d1c94b65e209097509c8280922cd9eed4ea16d04250fa87779694726310ab5e488f15e3e68668e58ed1310464b83f040f6690c84aac067bc4baae2ec62bcd2546a20fd25c4a61ec346fc5d32e338977145a8e9799a5223975061fe7e586ade5669ee4877a7d7a4cf6b4ab48e8e36c7c6586827066453ab0b0aa7b5e52cbdea980df2cf021c63906a78607d126382309dae51bae361943e88789778cca6e32ea58f3801fda186d06edb5bee8ebf7a304c9ab060f9a15a2a734a76417725aea71984a1fb83ca2c9be89f0d4214f5195556609db4baf2c6722471c5058d9a5f20157cb6bb5400982192600320f95942d545337391fdd28d7f22c0c92e4db7d01181d2d5d7dabb7e3c19c83e14f9b931671a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f229662666b44dff84977b46e05642cdef910bc3a93a17b5fd86e632bafa59cf21f8f8913b194242e59d6f7562d7210bbd26fd9e7d7d1006da6b82f7adaf85ba4af9fc333b05ec945ac465d4c1b6b3fe169c570c7aace71a0b1bb025ccef3bc668e250cfb1a64b76a50a59f4f1ff7585ed37e593dd2ff0fa6f3d0f5cb2bd4c639b65727c650bd1233c6ec111147661ae72804e5d63c4d5fe8bfb5bba27ac0f4c4fe63912ed9bd5336a9cb15f6697bbce9ecdf360eb3bb484238b50517242b7b0136af2d5b9dd32da06b472c219efacc05f00a39f90e00761503b102060afa745c86e58f7034bfe3d2b633762c165d1ec0259af4b028adf2457d7be212de22cda60154559213c41956aee6bafc9b1408a4dc133dd2ea13ad5968b45a3cca6dce421cda53e84da9c9ecfaf512dd9b7f55b6b0a6ddd3203482213787fa117ffce985922694ad929f92d23c9c9bc46cb36a0a81eaee8f73a3e2119d174443e2efbd9dc40b2bbf24a95c728ad630a31c29781ba4f34f0a01b5fa5931c71002386e20c0efe17c61cf59c4e47b824a485982a018f92b7ad061cad740656e5e84855e8ce71f43c5afc314b178df0b3c6577ffc3feab2728e433d4e7d78b378b1ebd0a832ee9278be4132f4cc2b5b80e5659a529fe1926dabbabca1a0e77b05211003c93e13362a8954ab9362008e43823d9094f97996f52f1420df0e24016f0b4178024924a606819bf02b875d621fcb2b95e5e4f162d4647c885256948d3908ece7fc1f1e2cdd07487314d1815dcc25e4a08abf3649820e9c43ca9574810b1cb4028a8d01433c12ff01bf5e33a80332c64da37256ec152bf9a095357a9762cdf7cb1c60ed4027f985e34b75f5d9497caa68bee5a8a3a53b5654f73620204bd263c6b0fc06b21b39b080805e0d047c7b376ba6cd8f38dbf09f2970b55cf63aba40aa2b5e129698f80db66510e38d9286a34cdfdeae7a0973f22eee7f66ef2d9292795a6fa5dfe578b53363541468002661dabaee71dee1a04c24c89cee75c6627c595c9e90de1b8b94efd12432b6aa1d485667d47d304828ff6fab61bf87a0e34214994342c39f3c2d562a1ad6e1ca3b09f81c564fb8d8863e9962d2ead2b259375647f4f1687639c846c4f351aec1432075e26b184c596fbae52f1c97a26f0bcd52c5084fd4fcd60a6398c0d9b03fb1a7ebec15b6f2b1fdd15f9fa1932fe3341c453268f5d3e38ce6c8286f3b98bd0fbf094ce94691781358a9db892442625e4b6365ccb918b5dff2ebd98ae6c6ea2f468639dfc7bad02893eb5ae6dc76c91ca98992fec8408f2e39885efd8cbd0cbd681350531dd9dcc2a8224e08dcee14420322ba7ed61668e40cee95fe08705a7859ed6cc7c8474674bc1b855b1ff480ffde97517d0d99a3a849ea265be017b6db9910daed5251131a9978194816a519a5164a647e3167bca8549efb05fb9ef6aba97128a08c8bbc67bf51db5dd1f374d8dafdbf4d07f2902f71080c71e265e2ff91432abecbb57d4895d17744fffe8d9b3ae030b39feaf1b78cac3dc0417aeff9f6343fadaa248f5ab65a46cde5acad2ec9d42d504a3ddbc662685261f70ef46ce793f8408e77c19c527168753103a1f627c56c912c4a39c904a54ae620b5b00681d7c6126a5dea319e5f1ab61ddbc29aa84a8f7f87773c64bde917229caf874624870ed48c744e3ed882f74c7b7d6cda77d5cfe6523e4d259ddc25f8f88a296045ff75030f58530a81650901b2ebda7f127451f5d792b1e3f1e3d41d6a1e758b4feca3de28e9473194006e673a262f47bd31a6c76970aa4749ce031ab1e4b9480f3e0c0d23f12a490f85912b12da1713a236e820883aafad7eee2e3ffcc31a45ccd9074bb8d5c0bef59fcca78495381eb8a3ee941ca8055fa70e6c3696467f04d7ea2fa5b6eb1f0b218b38dafdfc6f3837dbc5f52251419decc1412badf0cc05cbb03b67098591008d0f7da96ce11c4ab3fe4b17bdc40563306bde94abed48a0a25a6e989356544fe84b18e3186357b1bd762226454a6bb125eb06211887fe0699c3c2de467075273ff7a190af831bc5a33230b1f249c49421edac662454ee74aa34d393335f6aee9dfd5cdf34b7be5f12ecc98c39a6d91f7c6b86c5f874c84271114a10f6a72d5a398397cdd3d671db5a4d5639abe953f9edeefc40f50f75ea28dd3ba369589a38427092533a0ec03dfc5b37190e05fe708b2116b8eb0011a1c6bb39f029594d9ebd81b0449a8e6d428edc0f8429a5acf48c166c64664ff26ea15973f268a505773afcc77b802fdd6004bd55ba6ad6cdad6d0c9e97a19bcf37eb9643a0f1cb2b78f1d42842a143daf6e0196b70c7ffdc727be3d9760302cba7c691c23d2ee46f07215749584c1cca8d85ba0232229a475e27fae757ce4e54b9a1af95fceb870d3a5430a330bf7c02dfd25cd39336b1b5e8057ac9640c21fa8c3dfae7e8786d03fddd3ca6c5d8d4f4c58ecd27b9b8010ed51cf39b01d04be3170d0cebaef7a9160296b3b17672dbf0639d94457f09dd940de014b1360cb8320dc8e8e2dd97838177bb55a1997724b351a12b261a0a98113bc5f8db230d20d60e3a2e4cb85d456314577dd910333eb16ce5fb456b478d068133ae3d535baabeb056e7183bf5e7dc82997c90691af3c2cc866b579dcc19db3de814d9f4fce772d6b51b2bc1269bef20b2f92dacf67d76f8117276ab2f1d0b09969d4048ed818403fd6c95352c772ce980a7d30115be657c5f190bf9cc355a20648fd2021f7e585e2fbce7223e3a4ba3eab244b8fd5edeff4d657edbb966693ec3fdce3c2ec4199fe3db50d81035ccafa1aa1fb6836863177393cb1d1780304a6f5b2c116c6eaa595584b201fbe27a0d00d03c08ee6cbd5972bdf28a967b096a941e9be751157688eb9bd70a9c35dec12257bde18d689c7c0d0ba9592896b95feed0400c3615109c61b21694d6a348ebc4392b2489ed44edae9fda756b742ab1da43770f8a37fcba17dbcfcb7898a5c7b117fbeee1c854e174a890b199e22f111c1487e6674b9fd909c52595642143aa8b6e5078d0b5b2fd092e26564d83e530defbdb612894280353aece398655d8bbc194a2f8318c799bc350929719ca9300a65f3097d6c687025aee0fc21ce4e5be079c4ed10b566f6fda35efa5316b3e972911292ac48af468cf3155ecc629c12df6f1678df5dd11e46e0596aaa60050a56fb0b857084fdb0899643de27a1defb929a28c77eb833291d57f92bfe5078074f4be8fa5bb1352c3e2a5ac9e5dc48b5c51a9a18da0803812a241a8ed11219246f194e45de62baa7d137d242ac7361881c98eb9108c3efd3bf044d80a61a396f03dcd26049ddd6dd92ae2ee5b1fa94ffa19775811e3c2919c30ae66270c32bd44f19b0054c30e30850dabaf966080ae16afb5d85869282c29a56315ba9a7688d279d1c5fa4149154c372c1aa022d4f383fdf6479e3dc5fb0380964cb84e833105a56aa304f6a19c21c5187fa1eed9b9b135d9cd8769c723ce6d30e3b9b7fb8e2bcd4d08d332cdb375d46ea37d2df004f63a3d77649659ed6de95fe3078564eac0da50ff18355243ec3529a19e9d4ebe77e4eb9b54093a018275c05185e9e9ed1fac93f7703cf86f79b37f78db02195e4170509115a9efe1191ffa1a53c39cab9bc8144c24e943288debe01683a7fc37d27e436dac74f94b562210b1b2ab36d8da7382d51049f973816370a641c1f6bcc15e099a919f8a24710961e773037bb8958d65af2a6fefc5be09783c855206697b0b9eb0b9b2ff8dba66db0a2803e5cfe19c9fda9fcd2a52e98e9b24ccff70b62eacf1fd24bc4687f2e0ea84d11bdbd5de3ae14ea72ba1c6085aee9bc3c0cd47cf069ad1b2328d25fd58b54b60c977819289bd06b3f22a248d31d95ad6dc0885843bdaddb1e08087768df00714dac2ebd89803d52a2fd250fdbb04a62e14a5ba7693d206328f019ba3aa7ba653fd288a8edef35dcfe4d514b4e5a205d00c4a58aaab747721b027a1d6e00e87838520810457afeba8c0c10598975498feb942212170af3b9e6392bc4bc6d4877ba04bae1988830f17de8baed10ef1183a0f26184c1f65d260453f680e53cd32c96ca191cc3cb3fbca6a2fee1ecbdc185e3d53731eee5ab3886a59b48baece5afc0c81335e377305a5f76600f9d85a84cae95dc3663018e52c06417bd4df80f72e84ff9c969aecaa2981f52287c7ba44387e79ae9387946fa9516ee3de7e80aba9abdd416539b8a97f78d57aff9c065b7fd6b60c5846afb66b84847acb0df4b3958f028985ada57c029da7055b960dcb0843071c92a36e9fa667f330939dff1b2766447b3e8246d021cc9a76f2a7fc000f907f627635a0d1aa9369e3e67400ba005f9e108003c33acdd6a961ca04cebc8a8871d3a33e3cf073109f9bba19742ca40f8533df336483e329a1309a80fc7cfe269d9bd1bf8d0d4b46eb5fb5bccbfb14ff60abf3d32a33f0820568a4d424849353751f1e35a0b97ce41b7ab9e6b1073afac581c210cc4d26dcf5bad059ea7f94c197cbc66ab6a95e74049c5e6d06419be015ec2b476fadf753c507b12af1ce89d4c2a85e0257087936580c8fc1140ed013de36a6e6937a66381d86866c675305b158686b93b604d5708a7a203f626117541ad73f4ab2910ca7f0e3e82d6a25335e11913f0eef959e6795d0c6ecd3de8fab6df2f5939e4ca6d946b80f66650e1265e69cae0f4144f028adbfa3ed5fe23b9c90302d0e8cfa7dba17b4c20a5ea6ed2d55d6edeb4d682ba7be3f9ef68587dd0ebbc865c91116c21873bdea8d0c52818a2120d6fedf325e48084d211f5168fc46b3efb2e212a862f20bfa1ff1d5b87b2ed4ed2ea788346678fc17fbc9a765a4dbf3c54467e41f647969ac189110a124bc88b12fd01ca129bb041e3f4938eabb2239d6832ede3a623f204a14a9a9165c8cadabcf07b564ff8143621c99ece4a4b4c28cd630eaac7ba8983ac3014264d6007473c230b2500f9365684e273941bfd2d9392997ca307f7dbab4ddfea1d2ad8c7a7632deed69ee4efed5df754140f48e7b11993df68f89e93fe7ee34158f516dfbf2a65a22989961af1b4f0de7df1c9e75f81359816d66e125988801343ebf6eb4db767e528bf57518b46377e6329e1fb4a7dc9ae327e18c88489ee83c08039f1e0568bc5368488b134eb813129a327af2aaf57349cca2808451e306fc92342eeaf083e98eb078a066c0cb5d436defade232f2dbf4c91ed7cdcda797224d5a4abeb2e044afbcdca0d5dcaa40f91c5f2c7f8b1f9150708b4064cf89d3d56f64b2fc8dbb69c5eba94e5092c9a8734925ad7343885857a0252040a07a9c3f5da4fec02a48a7836e035f282df7e3a76e3ef14dec25ea93f679ea62c970ecca5c4ecc40cbafedeb62a78cf28005fc555c298122b8241b48e74b9c171618d633e5c4c531fa07d9aed82ca3d6a9e4a3a34b0b193419b8f4a6f7406690ef0f82b9653502a3983f01f07ccddac2f447a47d8c8308a060b29af6274243765b960123309ef9135a300f43fa17a7fbd731f4e7be2394c653455c8d1d61a23bdd37502ebdb2fca424bad854463d12862fc8786fc1fd9244d447a0fa3d2d4495366d8f7c460cfcbef043ac3ccaf5480a3cd54171ec9173fecdd9bb76c710a949b502a6823ab7d0d03564564e4ac9b6679a281eed7193d9abfdf8b7ff2af5473ceb6af1a34d7e9d7b9239f7aec683ef7062ec57bdaa6707d376e680259a08a5120a32d98ba46c4d3b7bbede9c24fceb8f7ad0c78495d14aa60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f229662666b44dff84977b46e05642cdef910bc3a93a17b5fd86e632bafa59cf21ed40dae2dc89232b2b23810f96cc7291e114128a21a0f759997d3f66bdc85a8bba7971ef463b070b45e4f95056f1bd4f78c4b23c05ca2a6e6b37800e0f4ab74737e0b530084bb237e9f45cc862095c57fe22d3b2fa79352d136f3c41f1399809be68cb3d0f9201480d59a6a2aac74c11d49588e6d1506adc16e349c3130f57936584f59fbd63a540e706f7c2064c19489279d2d232e2b4c27dd09e933130ef11ee89d2b0b6b049c872c31079972262d23a293e1742694ddd65838d2636fb645e406de45f1477c9817a6674e940478f8f15eedbb9a9db144556b607552828fb98629a0695495d4def8844845b3b0075875a8b96006a1fe68a655f5bd2af264852dbff55eaab31b713e5e29b0534f059e1b55cea4c9b4ee507738ae83f136df310854af633c7e6eeb45c246529123ec3d509921b6271253e66473b3109083d2e281d5889b027b4566827eb67e7008dfe6648b6eb2dc7584e9b0abc540d2d327998ce4bbfaf8c4451d48a99013072ca902e22960af6d150c27381e3ef3050b44fb97ce1cb9e0e3a935aed3435995fef9ac34b25c71cc08686e7a51fdb0cd43a2f5cb4969fa2caa49b4ec466d98a885b1311080109dc7f5137de41a8c098b90f449c5af73ece3d472def98906eb6be31abb66f4f0df3871ae49386444d85b6332a8e9b2a1a51f679bf0bb3bc8ccdaa758a8d71e939ac0f30efaef632dc2432ce02f4458371db9da0729ff015cc8ba8507533ed5233a39ea237610653d1c03ec9d59d3ea85fa7129dfcabc71cc0c9e252278c504d26b24171436e57e3aa8b58e91303da426b5cd5ccce4594ec2390e6b8e14200e3214fa24d223b2e82e439f665c117ce2ee9dd3701fe36bf52b6a4b3968cd077825e4f519c821c2ecf9c34eae9c67eafc8a81bc8d4d2207d290bd3cf05d5aeed360aed75951c839eb7019dc5acd73dd12f2cb1bdb2e8ad12e7bb84a52cf1e868bb4b0f2bfe13579b77c8c5c8db62c04e448bb860139a5690bbc705855c364286b24ae20e21e371928e26a63f09656c427f94fa73b4474b67e3fcacfdf93a69820c473b037d042f57ed8c3ba2fecf1f778de79c4f8039815a10b9ba2edda49cb0e196a0dfca0e82c55fe2565c84c8a2bb74ca536d516f1d942a1c8ab6b49abdcf3653fe0cbf7ea87de1de176d5ae1ede6cdbc177891216086d0ddb5132da4d50c19b898b174013be67059bbe57673d1f00ab585fb7e61bd86f1ac828ba6062688b6072432beffe84d181be18a10e1dd1ce9cf8f7f7a8f7b69ea15f63de57a1645e095152b52afd6fb940c83f4d7d63835f313e0c44eff0294bd4df54fe3dd4e4edcf97ddab430d4db1efd409832c3fa18ca8a40e895ee19cdd4ce106c661c4857985bb36d0c31ecf6964682e0a3edf5f04499da73e2a3f2844d347cc76e1b070aa148f20e70e07b37a77ee94d4897d390e67563044f36f7ea23cc7e2c62a1527bf1103eda47af727b276ca1ef4a3ff0d90c9d7c449c458d81c873fed1c3a8ed32806638c67c07cf142f49b01708a600a8a63406078f782721e13bea0d8ddd6c142df425e7cabfef6f6a892e5d894027f37406a4b896d724be1b177062a274c569d48af229dd238a2752bac810e1cc4e750410d77b8389e94494c3b1bcfeadb31b35e6ac5e7230ce5c91014d3824e0d59e60a1248cc5fd795eff6828c662803f6d2646520604494203c0bd3384a4e24c9b28ccdf14acc32de1b2264c0cdfcfab927fa980bd5b16d71e227e9075db36bc97f15a2ca51b931ed56ff0bcd8b38f466148bd8651c4411215592ddd3e2fb32cba9bf32590355032ea456d941d2efa430f46a43a93c7570ae0c473e82efbc966e7e30229c1bdd1ee99d6eeb9d5d598dcaebcebd937e478d695a49c3079957cf9e8a7f0840aee436acad61cbd996ac02c6625729aa7d0b88139806553192b41061fb53cfd20a9b3fb01fda3250db3c0e6637ef3077e6fd92538ca6d1def826a4949175af8ccc6bac65284b5c05d96d7b905db378b22e8d8fa3675f2d4f464bf1f9db708305247f89619d8e0dbc7d517773fc693893c33bcc84f1fa1e7e48eb7b2791fdd5c1797efb3c8208dcefdf9b4364a116fe47712f3ee5a7db37efa2a73821d17cafc745de7cd200672400e5eb1150b8cea40b03f4f25096dd607bb55a6ef56018e575986f794d6cb1e949706e0d3849e9ae1b1b57bcc453fbdd5d3ccd79b18a8c03817ba8152b8ebd84b19cd48e774f93bdbbc9c24fbe8b231af45df28524eb8b53c339167e6d46dcd4f296ba9b265893c9b4ee84b2e70fe22566e802f32e583e056d0a4e048f6fc30b765c61b0bd74106b6b60a00aeba4af74fcff9bf0c90fe27107115cce5d2813c9fcc5db76f0363fa55209054cfa26935eb9be43b3a3d641d31000165aacb6fa5050e8a244c9dee4650f3e9d9e406d75d4e9d241176f204b3d7e2e3d8c30fbb9cd48a7cb4c9ef9bc7e9f2e09e2524205e3c08a87b087cadfb95ffdeb894923f1c83df84d7eb22c6e20d1c86a1cf82bcbbcc899463efed4c0fb88c47142222e1a78feb282dd30c8fe94f79133ff3d42368ffdcdad09ba135e10c777cd13459559bdf74fb704c1379af7c9b0f70bc49fa6f5a837daa81f328036201a75e673876a67a8cd66c196989a4d294f3dcaec5792f251a96d92124914d8052ca5f8ddd3c9da0267a26850fa9f46fbb1dcddb34bbe7031a1010223ef0d62d9b312172f55d216c7c9a8ab856574a47f17a1e92f2234f3bd9f3c872143e8eec0d43fdc6d90b77151972d7281ba5e4ee03116fe5779b5993bd33b718dab3bd698f557d20427b74309a37d4f41558c31108f544c8bcdd8ee70c90e03af8fd6f640ae923605e2476a9ee2d80010dffc0b4ce1e06cc1274ca3e9362dd072a03b5ac60764d30415c32e2ba41e4b6ae1b77983eff4ea88f9f3a92546493487db7c571e2127eff5c265dbd65b9b323bd54b7058b5ebbe966ed44a50f3f584b8299a203c318df501f73c36c81ba79291c6ab4d75dddc9a2df60037c081496378a431d2941ae893999945e007c2e60224adb4f76c82e1aed0631986de2103f44284d1e9c5a1206ad03ca98fec164a0f6bc4a33e71a727341cd78bf3388a716b1e9b2c13226eecee32f356e06ea4c8d226ee5b4ae48e30e47e27930d444bc86781cce026de00040c1e4916536ecc3277ae86a47fbbc7b5a6e51ae56a97a1e61c6645788b470f28b38e15547385fbc0a6567bf888c9c17f1698fc476a989b3d9f760ee4f0a0033c9aab49523993bdd21ffb7c363b1a0e190023f4fa04f08b8fc8f8b403761f785f799962d4887e671c0e89cedad7a5a922766c6ba3b7c806c75c562abbf4aa3addc8a9486dcf33bc677a287ded188b7275f801cd2535d5da57107aab60700582bfba206627316fb3e4b3c2d15f901d258954280c266369e04f12d4be5dd9f33045e49de56a55c888059daa230fcf63e8816048b69a316fdbee6fea80aa8dc90c7f0697e8c242f4f460ad681092a5430da9ce6eb895952d0444b42e3b40b16f167b21976c0031c466a1b69d43d6db7cb15e060b95bdf74e6ed2fcf4671f634386d3aa845958dcf32c06bd2a3d895683a290e649552c8e32a75670df5e6b712f6f585c45ee89728aefbbfed77b7550e9f3961f5e41b2e7f247401cefa3287341b4201b4f693dd0ff9c4a680c2e1a8fccb0d8c1f684ada508f68239ba1c45234b2547ff230d226c7d1f456551e20eff218fbf602af4508c3a789068c6b2c8513986a6cf2bde6af9796f5d2d9eef558b6551f949a74c95d0c5a6fbd23a22c74034f4c6da90f3a2af53065285413a0c8127518fd3d2d360367640abd1e3efbefa27be8599b22cb6eb150b55ce7b566740bca079e307524feeeca769a360a811c0e5d11e4e0ebfd5642e9eb8001591bc2f4d78a8fb446e25a36b52b1487c520ae00317ab87a75fbef32f05990e0d205cc5a70768d7fe9bde3343afa4cd1c3c567d9b071ac3d596b24bfcc064db7f40311d501a1b057c614b47e6e989cdce59071947bc0f6628b8e67791dc2f60dd4a7076f9e3627631795e5e55f32a777e39bc6781221de4fd18235a6b18dc611bdc0a990254fc6a440145f2883263ba260afe05c0af47a81bcdc070ecef51fbb1aa76d0aef6cb908f3ed05c18a4c0cd56193056fd6b0d07190c36d1e8795e8b324c237b67d0f0539f23bd33be2438c493d2556887f9bf9847cfdff9258e7575516c2fe46d87338c1f931405f98e9f508242bed7b9d43f5d427dbe75ba82b1e6d5e9fb24e94aae895dbc9a8ad78362dc88aca12ee63ef4dce96bd0d42c9a9735796496df772381893f13cf0ea577628a5b5efebcaca80879234098e52d1725e6d9eb8fb96a19fce625d39184b705f7b6db3ffbe07a15d1a4f76e11df942ed333ba18274e3b587ea3a249fe6109736e68ae8190a1386733c25f2f9fe3dbe75ccf849630de0389383333e0cfd46abaddf5ae73ba323d02a9b344246e33a0dd9a6d04f65e187a071d30f775345242ce2731e8425e0ccfa4ec7f5f42c91bc6d72207bab8aac10aea4da962575763f6225365800a4f00396c6afdfa43219966db35078c42837f6a5aad6e21aa10fd9948b21f5bd27f2189d1ce61ef7d24d918b2506b7d384a327120c8e475db231a9709022b249338f013df9a930bf647e69ff7dcad8c69216159f76996227f19044e9e2bba28d784177f640f55cb48fb62c65eb0b56401fd4b4788b229fd6057db822f6af49c739709a301631e03733ac9e0f84c2c5903a8f856d5417c3ef937a5c2d6f431fae24932c5c308f36703135642be81a8ae85e6832ebc8fd8f2e1734f446a5d3eb15dce021005d8850d8bc2488e1385be04a660589b799395447788e86efcf6620a63877531cc984163d939ca82cc62e224c5ab9f74e73c308ac73731b65d42607fc8d94e8d355b66b038fef81e25f184f7a4bed3ed53d0a1f3496437b8fc663a44d07cc17ce0c4292763e36c7bc433b9bdd0759f947461cd66848acb41eaf7abc487f76d98b786d6167949f4a964c52fb228fd052d82a8a0a5f59582fbe1eecd083c96c57716d42dfa1970389f2957ddcd29d9b4b576af8faa747ea8f4f044d05f655da2247fdcb9f1090388502b7e322ab3fa837cc1da5990df4cef045fc251042722356c18cca667d04d369e4577886a96da0c2ade0036791b3b89839a219f425f4c99174c70ac1e6889220e4c7f5d6c57a956ee7ccc186e7394f238a9b98cd51bf42b680e251a4c8ad911d2bf241d61eb9f5a4f8bfc4c17740f82d1dbff9c3d488882c53900dfa82ecda25cf02b7915a14a37a65eeabb4444aa2a1913183ae27653bff8c62c9e5aeffe085edba70a96db6a51beab7f39cc6eecdd696ed0d3cdde5322863d5a184a184bc684abe2ea5655c99ba0ab660268e8fa15195f9c959dc4b4592dc838b670a73a792b3f863f176f7e079ac83a0f76a8637654d24bb65b17cca2ef2f9f4073952d9c57c9b4b6d4c99eb50e8018dfd3847a88e5bffc5c700e8f2a478dcf4f4ad0ff9ca98f14bd6e1b7797d6885ae4a6b695303c1e544621b5f649a54c18b6e645a00de8e5e1b66ccd251f077c908915244df3cb4557b02608c6fc87c501a4e452a1aa1a42e1eea16e0f216ccabe3085d1b2c62999edcfdcf0a8fb6786026b9380b63314e099447febc641f4477cd098dc6fca678b26c0532926e716ed24d476934c91b031846b9eeb4be5afc694f68fb470f9d9dbd82c32a83bd96650f1a465fa09bf584829cc7d47ab1bbd8af2672767ea183562cdc58747b05bb583241b11d7e4ad2e7b7f2c883161cb1b01252eaf798ad9108c111303742915da1bfac9aad6209697a9940cf7677166e3b07ef6619aa669d81a90d10777c1234bad74ac792159daef05a928d14a1a28aeda4afcae31160f43f2a44d7943611be443e877e918676fd328f6c1293ff9286d6ba7a224c454e3044be3ac54429b37fcd5c9d5bbc6e30be1bfe62fc58c908fd6d2747daff0b32cb8c2e9ba88e35165554e40f6847bc7a3a3d7916d3718d479be3d2ee293d931f4b1bee66765bc661bd552710bdc3d4d2d931251d72c901d5ebd5a5ea90af85c18aa778016f7f3172d20b1f9e3e61ce7ccaa4fed2f8ec198e6a57f4c412495b829801f2c61b2701587d09df5c4f99393388f3a46fbdbe8a09e5db29a1ac3d2d80278188ed988f25ca5deb84f6c63c8f1a84c88fa8360dfe119e84b3d5d073f73859fdf90ec1daa23cb314fb11ae359473904c3b2e521a91c6ff5ebb2186e14906ce24b46c20e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b8552db346e4f64308fe5678354a10a53f5e5e30ea5c3887d4491772b17b2b4cdb9dce95158e4b428b4849d805c1ece2120d3539220f9302f9e069e5f2ccf40547c7284afe4327d97ff350a47ca6b916e3b551a916b852b3c779e6247eeb32a2eee522bd2aa0e077e5b62332d5722f5c108a9237639845361b79d09531fb69370f48233854df94006df09daf8ca3e4be2889d28050872a5ff6fd20b718e2962c7ada4c3cb10089bf2825fd15d9f7d4a52b8d2cb2c21c592b327f59f5d2deb097819c5d73a2a71e0c20d69f86d4b94e5ee2ad457f77fa699928f2e0835203ebca001a81f62463585e5ba6aeeb6bf11707498b280b9b042517429f409c643805e86eec9516929734eb998d52893a9854cca1bec85254c19baaadabfdd677fefe1c0c5866a695da420e908068e3a60b7840b902d55f679963a5cc1864f606e61ddcf4earootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrust-1.53.0-22.1.src.rpmrust-src     rpmlib(CompressedFileNames)rpmlib(FileDigests)rpmlib(PartialHardlinkSets)rpmlib(PayloadFilesHavePrefix)rpmlib(PayloadIsXz)rust3.0.4-14.6.0-14.0.4-14.0-15.2-11.53.04.14.1aN`@^@^2^^l@^k@^0^0^x^!^@^ ^ ]@]@]X]@]@]@]@]w@]fl]$]#0@]G@\t@\.@\ޢ@\O\,@\\@\@\@\}@\zp@\y\w@\v{\v{\v{\r@\r@\q5\G\@n@\0@\ @[[[v[%@[@[@[ݍ[ݍ[;@[l,[Z@ZZZSZ@Zg#Ze@Ze@ZN@Z[@Z@YYB@YYLYX@Y@@YKYYA%@Y9<@YYY.Y.XEXg@XXƉXXBXXe@Xe@X|@X|@X]X]XVz@XVz@XVz@XS@X@W$WίW.@W@WPWW|WrfWq@WL+@WVxVvV3[V"8@UU5@U@UUUKSUJ@U@U@william.brown@suse.commartin.sirringhaus@suse.commartin.sirringhaus@suse.commartin.sirringhaus@suse.comschwab@suse.demartin.sirringhaus@suse.comschwab@suse.dealarrosa@suse.comalarrosa@suse.comfederico@suse.comdimstar@opensuse.orgfederico@suse.comluke@ljones.devopensuse-packaging@opensuse.orgngompa13@gmail.comaplanas@suse.comaplanas@suse.comaplanas@suse.comrhafer@suse.comluke@ljones.devluke@ljones.devfederico@suse.comluke@ljones.devjones_ld@protonmail.comjones_ld@protonmail.comschwab@suse.dejones_ld@protonmail.comaaronpuchert@alice-dsl.netfederico@suse.commliska@suse.czjones_ld@protonmail.comfederico@suse.comjones_ld@protonmail.comjones_ld@protonmail.comjones_ld@protonmail.comjones_ld@protonmail.comjones_ld@protonmail.comjones_ld@protonmail.comfederico@suse.comjones_ld@protonmail.comjones_ld@protonmail.comfederico@suse.comjengelh@inai.dejones_ld@protonmail.comjones_ld@protonmail.comfederico@suse.comjones_ld@protonmail.comjones_ld@protonmail.comjones_ld@protonmail.comjones_ld@protonmail.comjones_ld@protonmail.comjones_ld@protonmail.comngompa13@gmail.comjengelh@inai.dejones_ld@protonmail.comjones_ld@protonmail.comjones_ld@protonmail.comqkzhu@suse.commschnitzer@suse.commmanu84@outlook.deluc14n0@linuxmail.orgmmanu84@outlook.demmanu84@outlook.demmanu84@outlook.decoolo@suse.comtchvatal@suse.commmanu84@outlook.dejones_ld@protonmail.comjones_ld@protonmail.commmanu84@outlook.dejones_ld@protonmail.comluke.nukem.jones@gmail.comluke.nukem.jones@gmail.comluke.nukem.jones@gmail.comluke.nukem.jones@gmail.comopensuse@dstoecker.deluke.nukem.jones@gmail.comluke.nukem.jones@gmail.comluke.nukem.jones@gmail.comluke.nukem.jones@gmail.comluke.nukem.jones@gmail.comluke.nukem.jones@gmail.comluke.nukem.jones@gmail.comluke.nukem.jones@gmail.comluke.nukem.jones@gmail.comluke.nukem.jones@gmail.comluke.nukem.jones@gmail.comluke.nukem.jones@gmail.comdimstar@opensuse.orgbg@suse.comluke.nukem.jones@gmail.comluke.nukem.jones@gmail.comluke.nukem.jones@gmail.comluke.nukem.jones@gmail.comluke.nukem.jones@gmail.comluke.nukem.jones@gmail.comluke.nukem.jones@gmail.comluke.nukem.jones@gmail.comluke.nukem.jones@gmail.comluke.nukem.jones@gmail.comluke.nukem.jones@gmail.comluke.nukem.jones@gmail.commatwey.kornilov@gmail.comkgronlund@suse.comkgronlund@suse.commvyskocil@opensuse.orgjengelh@inai.dekgronlund@suse.commvyskocil@opensuse.orgkgronlund@suse.comkgronlund@suse.comkgronlund@suse.commvyskocil@opensuse.orgmvyskocil@opensuse.orgkgronlund@suse.comi@xuzhao.netmvyskocil@opensuse.orgmvyskocil@opensuse.orgmvyskocil@opensuse.orgmvyskocil@opensuse.orgmvyskocil@opensuse.orgkgronlund@suse.comopensuse-packaging@opensuse.orgmatwey.kornilov@gmail.comopensuse-packaging@opensuse.orgkgronlund@suse.com- bsc#1194767 - CVE-2022-21658 - Resolve race condition in std::fs::remove_dir_all - 0001-Fix-CVE-2022-21658-for-UNIX-like.patch- Needed for Firefox91 (bsc#1188891) - Rebased patches: + ignore-Wstring-conversion.patch (offset / fuzz) + Fix-big-endian-miscompile-of-bitcast-zex.patch dropped - Add support for riscv64 - Make all shared libraries in %{common_libdir} executable; otherwise fdupes will not find any duplicates in %{rustlibdir}. - rust-rpmlintrc: Reflect updated LLVM name in the filter. - : Add "--stage 1" to the "./x.py doc" call to ensure the newly built compiler gets used. - Resolve issue in constraints to select aarch64 builders in OBS that have correctly functioning CPU's. - Resolve issue with zlib selection and buildrequires. - Correct build issues with esoteric cpu architectures, by removing developer facing tools in some cases. - Updates to spec file and legacy cleanups during build processes - Correct issues with incorrect tuning of codegen units that caused builders to OOM - Update to version 1.53: + Language - [You can now use unicode for identifiers.][83799] This allows multilingual identifiers but still doesn't allow glyphs that are not considered characters such as `◆` or `🦀`. More specifically you can now use any identifier that matches the UAX #31 "Unicode Identifier and Pattern Syntax" standard. This is the same standard as languages like Python, however Rust uses NFC normalization which may be different from other languages. - [You can now specify "or patterns" inside pattern matches.][79278] Previously you could only use `|` (OR) on complete patterns. E.g. ```rust let x = Some(2u8); // Before matches!(x, Some(1) | Some(2)); // Now matches!(x, Some(1 | 2)); ``` - [Added the `:pat_param` `macro_rules!` matcher.][83386] This matcher has the same semantics as the `:pat` matcher. This is to allow `:pat` to change semantics to being a pattern fragment in a future edition. + Compiler - [Updated the minimum external LLVM version to LLVM 10.][83387] - [Added Tier 3\* support for the `wasm64-unknown-unknown` target.][80525] - [Improved debuginfo for closures and async functions on Windows MSVC.][83941] \* Refer to Rust's [platform support page][platform-support-doc] for more information on Rust's tiered platform support. + Libraries - [Abort messages will now forward to `android_set_abort_message` on Android platforms when available.][81469] - [`slice::IterMut<'_, T>` now implements `AsRef<[T]>`][82771] - [Arrays of any length now implement `IntoIterator`.][84147] Currently calling `.into_iter()` as a method on an array will return `impl Iterator`, but this may change in a future edition to change `Item` to `T`. Calling `IntoIterator::into_iter` directly on arrays will provide `impl Iterator` as expected. - [`leading_zeros`, and `trailing_zeros` are now available on all `NonZero` integer types.][84082] - [`{f32, f64}::from_str` now parse and print special values (`NaN`, `-0`) according to IEEE RFC 754.][78618] - [You can now index into slices using `(Bound, Bound)`.][77704] - [Add the `BITS` associated constant to all numeric types.][82565] + Cargo - [Cargo now supports git repositories where the default `HEAD` branch is not "master".][cargo/9392] This also includes a switch to the version 3 `Cargo.lock` format which can handle default branches correctly. - [macOS targets now default to `unpacked` split-debuginfo.][cargo/9298] - [The `authors` field is no longer included in `Cargo.toml` for new projects.][cargo/9282] + Rustdoc - [Added the `rustdoc::bare_urls` lint that warns when you have URLs without hyperlinks.][81764] + Compatibility Notes - [Implement token-based handling of attributes during expansion][82608] - [`Ipv4::from_str` will now reject octal format IP addresses in addition to rejecting hexadecimal IP addresses.][83652] The octal format can lead to confusion and potential security vulnerabilities and [is no longer recommended][ietf6943]. - Update to version 1.52: + Language - [Added the `unsafe_op_in_unsafe_fn` lint, which checks whether the unsafe code in an `unsafe fn` is wrapped in a `unsafe` block.][79208] This lint is allowed by default, and may become a warning or hard error in a future edition. - [You can now cast mutable references to arrays to a pointer of the same type as the element.][81479] + Compiler - [Upgraded the default LLVM to LLVM 12.][81451] - Added tier 3\* support for the following targets. - [`s390x-unknown-linux-musl`][82166] - [`riscv32gc-unknown-linux-musl` & `riscv64gc-unknown-linux-musl`][82202] - [`powerpc-unknown-openbsd`][82733] + Libraries - [`OsString` now implements `Extend` and `FromIterator`.][82121] - [`cmp::Reverse` now has `#[repr(transparent)]` representation.][81879] - [`Arc` now implements `error::Error`.][80553] - [All integer division and remainder operations are now `const`.][80962] + Stabilised APIs - [`Arguments::as_str`] - [`char::MAX`] - [`char::REPLACEMENT_CHARACTER`] - [`char::UNICODE_VERSION`] - [`char::decode_utf16`] - [`char::from_digit`] - [`char::from_u32_unchecked`] - [`char::from_u32`] - [`slice::partition_point`] - [`str::rsplit_once`] - [`str::split_once`] The following previously stable APIs are now `const`. - [`char::len_utf8`] - [`char::len_utf16`] - [`char::to_ascii_uppercase`] - [`char::to_ascii_lowercase`] - [`char::eq_ignore_ascii_case`] - [`u8::to_ascii_uppercase`] - [`u8::to_ascii_lowercase`] - [`u8::eq_ignore_ascii_case`] + Rustdoc - [Rustdoc lints are now treated as a tool lint, meaning that lints are now prefixed with `rustdoc::` (e.g. `#[warn(rustdoc::non_autolinks)]`).][80527] Using the old style is still allowed, and will become a warning in a future release. - [Rustdoc now supports argument files.][82261] - [Rustdoc now generates smart punctuation for documentation.][79423] - [You can now use "task lists" in Rustdoc Markdown.][81766] E.g. ```markdown - [x] Complete - [ ] Todo ``` + Misc - [You can now pass multiple filters to tests.][81356] E.g. `cargo test -- foo bar` will run all tests that match `foo` and `bar`. - [Rustup now distributes PDB symbols for the `std` library on Windows, allowing you to see `std` symbols when debugging.][82218] + Internal Only These changes provide no direct user facing benefits, but represent significant improvements to the internals and overall performance of rustc and related tools. - [Check the result cache before the DepGraph when ensuring queries][81855] - [Try fast_reject::simplify_type in coherence before doing full check][81744] - [Only store a LocalDefId in some HIR nodes][81611] - [Store HIR attributes in a side table][79519] + Compatibility Notes - ------------------ - [Cargo build scripts are now forbidden from setting `RUSTC_BOOTSTRAP`.][cargo/9181] - [Removed support for the `x86_64-rumprun-netbsd` target.][82594] - [Deprecated the `x86_64-sun-solaris` target in favor of `x86_64-pc-solaris`.][82216] - [Rustdoc now only accepts `,`, ` `, and `\t` as delimiters for specifying languages in code blocks.][78429] - [Rustc now catches more cases of `pub_use_of_private_extern_crate`][80763] - [Changes in how proc macros handle whitespace may lead to panics when used with older `proc-macro-hack` versions. A `cargo update` should be sufficient to fix this in all cases.][84136] - Update to version 1.51: + Language - [You can now parameterize items such as functions, traits, and `struct`s by constant values in addition to by types and lifetimes.][79135] Also known as "const generics" E.g. you can now write the following. Note: Only values of primitive integers, `bool`, or `char` types are currently permitted. + Compiler - [Added the `-Csplit-debuginfo` codegen option for macOS platforms.][79570] This option controls whether debug information is split across multiple files or packed into a single file. **Note** This option is unstable on other platforms. - [Added tier 3\* support for `aarch64_be-unknown-linux-gnu`, `aarch64-unknown-linux-gnu_ilp32`, and `aarch64_be-unknown-linux-gnu_ilp32` targets.][81455] - [Added tier 3 support for `i386-unknown-linux-gnu` and `i486-unknown-linux-gnu` targets.][80662] - [The `target-cpu=native` option will now detect individual features of CPUs.][80749] \* Refer to Rust's [platform support page][platform-support-doc] for more information on Rust's tiered platform support. + Libraries - [`Box::downcast` is now also implemented for any `dyn Any + Send + Sync` object.][80945] - [`str` now implements `AsMut`.][80279] - [`u64` and `u128` now implement `From`.][79502] - [`Error` is now implemented for `&T` where `T` implements `Error`.][75180] - [`Poll::{map_ok, map_err}` are now implemented for `Poll>>`.][80968] - [`unsigned_abs` is now implemented for all signed integer types.][80959] - [`io::Empty` now implements `io::Seek`.][78044] - [`rc::Weak` and `sync::Weak`'s methods such as `as_ptr` are now implemented for `T: ?Sized` types.][80764] + Stabilized APIs - [`Arc::decrement_strong_count`] - [`Arc::increment_strong_count`] - [`Once::call_once_force`] - [`Peekable::next_if_eq`] - [`Peekable::next_if`] - [`Seek::stream_position`] - [`array::IntoIter`] - [`panic::panic_any`] - [`ptr::addr_of!`] - [`ptr::addr_of_mut!`] - [`slice::fill_with`] - [`slice::split_inclusive_mut`] - [`slice::split_inclusive`] - [`slice::strip_prefix`] - [`slice::strip_suffix`] - [`str::split_inclusive`] - [`sync::OnceState`] - [`task::Wake`] + Cargo - [Added the `split-debuginfo` profile option to control the -Csplit-debuginfo codegen option.][cargo/9112] - [Added the `resolver` field to `Cargo.toml` to enable the new feature resolver and CLI option behavior.][cargo/8997] Version 2 of the feature resolver will try to avoid unifying features of dependencies where that unification could be unwanted. Such as using the same dependency with a `std` feature in a build scripts and proc-macros, while using the `no-std` feature in the final binary. See the [Cargo book documentation][feature-resolver@2.0] for more information on the feature. + Rustdoc - [Rustdoc will now include documentation for methods available from _nested_ `Deref` traits.][80653] - [You can now provide a `--default-theme` flag which sets the default theme to use for documentation.][79642] Various improvements to intra-doc links: - [You can link to non-path primitives such as `slice`.][80181] - [You can link to associated items.][74489] - [You can now include generic parameters when linking to items, like `Vec`.][76934] + Misc - [You can now pass `--include-ignored` to tests (e.g. with `cargo test -- --include-ignored`) to include testing tests marked `#[ignore]`.][80053] + Compatibility Notes - [WASI platforms no longer use the `wasm-bindgen` ABI, and instead use the wasm32 ABI.][79998] - [`rustc` no longer promotes division, modulo and indexing operations to `const` that could fail.][80579] - [The minimum version of glibc for the following platforms has been bumped to version 2.31 for the distributed artifacts.][81521] - `armv5te-unknown-linux-gnueabi` - `sparc64-unknown-linux-gnu` - `thumbv7neon-unknown-linux-gnueabihf` - `armv7-unknown-linux-gnueabi` - `x86_64-unknown-linux-gnux32` - Update to version 1.50: * This fixes build on armv7 - boo#1181643 + Language - You can now use const values for x in [x; N] array expressions. This has been technically possible since 1.38.0, as it was unintentionally stabilized. - Assignments to ManuallyDrop union fields are now considered safe. + Compiler - Added tier 3* support for the armv5te-unknown-linux-uclibceabi target. - Added tier 3 support for the aarch64-apple-ios-macabi target. - The x86_64-unknown-freebsd is now built with the full toolset. - Dropped support for all cloudabi targets. * Refer to Rust's platform support page for more information on Rust's tiered platform support. + Libraries - proc_macro::Punct now implements PartialEq. - ops::{Index, IndexMut} are now implemented for fixed sized arrays of any length. - On Unix platforms, the std::fs::File type now has a "niche" of -1. This value cannot be a valid file descriptor, and now means Option takes up the same amount of space as File. + Stabilized APIs bool::then btree_map::Entry::or_insert_with_key f32::clamp f64::clamp hash_map::Entry::or_insert_with_key Ord::clamp RefCell::take slice::fill UnsafeCell::get_mut - The following previously stable methods are now const. IpAddr::is_ipv4 IpAddr::is_ipv6 IpAddr::is_unspecified IpAddr::is_loopback IpAddr::is_multicast Ipv4Addr::octets Ipv4Addr::is_loopback Ipv4Addr::is_private Ipv4Addr::is_link_local Ipv4Addr::is_multicast Ipv4Addr::is_broadcast Ipv4Addr::is_documentation Ipv4Addr::to_ipv6_compatible Ipv4Addr::to_ipv6_mapped Ipv6Addr::segments Ipv6Addr::is_unspecified Ipv6Addr::is_loopback Ipv6Addr::is_multicast Ipv6Addr::to_ipv4 Layout::size Layout::align Layout::from_size_align pow for all integer types. checked_pow for all integer types. saturating_pow for all integer types. wrapping_pow for all integer types. next_power_of_two for all unsigned integer types. checked_next_power_of_two for all unsigned integer types. + Cargo - Added the [build.rustc-workspace-wrapper] option. This option sets a wrapper to execute instead of rustc, for workspace members only. - cargo:rerun-if-changed will now, if provided a directory, scan the entire contents of that directory for changes. - Added the --workspace flag to the cargo update command. + Misc - The search results tab and the help button are focusable with keyboard in rustdoc. - Running tests will now print the total time taken to execute. + Compatibility Notes - The compare_and_swap method on atomics has been deprecated. It's recommended to use the compare_exchange and compare_exchange_weak methods instead. - Changes in how TokenStreams are checked have fixed some cases where you could write unhygenic macro_rules! macros. - #![test] as an inner attribute is now considered unstable like other inner macro attributes, and reports an error by default through the soft_unstable lint. - Overriding a forbid lint at the same level that it was set is now a hard error. - You can no longer intercept panic! calls by supplying your own macro. It's recommended to use the #[panic_handler] attribute to provide your own implementation. - Semi-colons after item statements (e.g. struct Foo {};) now produce a warning. - Update to version 1.49.0 + Language - Unions can now implement Drop, and you can now have a field in a union with ManuallyDrop. - You can now cast uninhabited enums to integers. - You can now bind by reference and by move in patterns. This allows you to selectively borrow individual components of a type. E.g. [#][derive(Debug)] struct Person { name: String, age: u8, } let person = Person { name: String::from("Alice"), age: 20, }; // `name` is moved out of person, but `age` is referenced. let Person { name, ref age } = person; println!("{} {}", name, age); + Compiler - Added tier 1* support for aarch64-unknown-linux-gnu. - Added tier 2 support for aarch64-apple-darwin. - Added tier 2 support for aarch64-pc-windows-msvc. - Added tier 3 support for mipsel-unknown-none. - Raised the minimum supported LLVM version to LLVM 9. - Output from threads spawned in tests is now captured. - Change os and vendor values to "none" and "unknown" for some targets * Refer to Rust's platform support page for more information on Rust's tiered platform support. + Libraries - RangeInclusive now checks for exhaustion when calling contains and indexing. - ToString::to_string now no longer shrinks the internal buffer in the default implementation. - ops::{Index, IndexMut} are now implemented for fixed sized arrays of any length. + Stabilized APIs - slice::select_nth_unstable - slice::select_nth_unstable_by - slice::select_nth_unstable_by_key The following previously stable methods are now const. - Poll::is_ready - Poll::is_pending + Cargo - Building a crate with cargo-package should now be independently reproducible. - cargo-tree now marks proc-macro crates. - Added CARGO_PRIMARY_PACKAGE build-time environment variable. This variable will be set if the crate being built is one the user selected to build, either with -p or through defaults. - You can now use glob patterns when specifying packages & targets. + Compatibility Notes - Demoted i686-unknown-freebsd from host tier 2 to target tier 2 support. - Macros that end with a semi-colon are now treated as statements even if they expand to nothing. - Rustc will now check for the validity of some built-in attributes on enum variants. Previously such invalid or unused attributes could be ignored. - Leading whitespace is stripped more uniformly in documentation comments, which may change behavior. You read this post about the changes for more details. - Trait bounds are no longer inferred for associated types. + Internal Only These changes provide no direct user facing benefits, but represent significant improvements to the internals and overall performance of rustc and related tools. - rustc's internal crates are now compiled using the initial-exec Thread Local Storage model. - Calculate visibilities once in resolve. - Added system to the llvm-libunwind bootstrap config option. - Added --color for configuring terminal color support to bootstrap. - Update to version 1.48.0 + Language - The `unsafe` keyword is now syntactically permitted on modules. This is still rejected semantically, but can now be parsed by procedural macros. + Compiler - Stabilised the `-C link-self-contained=` compiler flag. This tells `rustc` whether to link its own C runtime and libraries or to rely on a external linker to find them. (Supported only on `windows-gnu`, `linux-musl`, and `wasi` platforms.) - You can now use `-C target-feature=+crt-static` on `linux-gnu` targets. Note: If you're using cargo you must explicitly pass the `--target` flag. - Added tier 2* support for aarch64-unknown-linux-musl. * Refer to Rust's platform support page for more information on Rust's tiered platform support. + Libraries - io::Write is now implemented for &ChildStdin &Sink, &Stdout, and &Stderr. - All arrays of any length now implement TryFrom>. - The matches! macro now supports having a trailing comma. - Vec now implements PartialEq<[B]> where A: PartialEq. - The RefCell::{replace, replace_with, clone} methods now all use #[track_caller]. + Stabilized APIs - slice::as_ptr_range - slice::as_mut_ptr_range - VecDeque::make_contiguous - future::pending - future::ready The following previously stable methods are now `const fn's`: - Option::is_some - Option::is_none - Option::as_ref - Result::is_ok - Result::is_err - Result::as_ref - Ordering::reverse - Ordering::then + Cargo + Rustdoc - You can now link to items in rustdoc using the intra-doc link syntax. E.g. /// Uses [`std::future`] will automatically generate a link to std::future's documentation. See "Linking to items by name" for more information. - You can now specify #[doc(alias = "")] on items to add search aliases when searching through rustdoc's UI. + Compatibility Notes - Promotion of references to 'static lifetime inside const fn now follows the same rules as inside a fn body. In particular, &foo() will not be promoted to 'static lifetime any more inside const fns. - Associated type bindings on trait objects are now verified to meet the bounds declared on the trait when checking that they implement the trait. - When trait bounds on associated types or opaque types are ambiguous, the compiler no longer makes an arbitrary choice on which bound to use. - Fixed recursive nonterminals not being expanded in macros during pretty-print/reparse check. This may cause errors if your macro wasn't correctly handling recursive nonterminal tokens. - &mut references to non zero-sized types are no longer promoted. - rustc will now warn if you use attributes like #[link_name] or [#][cold] in places where they have no effect. - Updated _mm256_extract_epi8 and _mm256_extract_epi16 signatures in arch::{x86, x86_64} to return i32 to match the vendor signatures. - mem::uninitialized will now panic if any inner types inside a struct or enum disallow zero-initialization. - #[target_feature] will now error if used in a place where it has no effect. - Foreign exceptions are now caught by catch_unwind and will cause an abort. Note: This behaviour is not guaranteed and is still considered undefined behaviour, see the catch_unwind documentation for further information. + Internal Only These changes provide no direct user facing benefits, but represent significant improvements to the internals and overall performance of rustc and related tools. - Building rustc from source now uses ninja by default over make. You can continue building with make by setting ninja=false in your config.toml. - cg_llvm: fewer_names in uncached_llvm_type - Made ensure_sufficient_stack() non-generic - Update to version 1.47.0 + Language - [Closures will now warn when not used.][74869] + Compiler - [Stabilized the `-C control-flow-guard` codegen option][73893], which enables [Control Flow Guard][1.47.0-cfg] for Windows platforms, and is ignored on other platforms. - [Upgraded to LLVM 11.][73526] - [Added tier 3\* support for the `thumbv4t-none-eabi` target.][74419] - [Upgrade the FreeBSD toolchain to version 11.4][75204] - [`RUST_BACKTRACE`'s output is now more compact.][75048] \* Refer to Rust's [platform support page][forge-platform-support] for more information on Rust's tiered platform support. + Libraries - [`CStr` now implements `Index>`.][74021] - [Traits in `std`/`core` are now implemented for arrays of any length, not just those of length less than 33.][74060] - [`ops::RangeFull` and `ops::Range` now implement Default.][73197] - [`panic::Location` now implements `Copy`, `Clone`, `Eq`, `Hash`, `Ord`, `PartialEq`, and `PartialOrd`.][73583] + Stabilized APIs - [`Ident::new_raw`] - [`Range::is_empty`] - [`RangeInclusive::is_empty`] - [`Result::as_deref`] - [`Result::as_deref_mut`] - [`Vec::leak`] - [`pointer::offset_from`] - [`f32::TAU`] - [`f64::TAU`] The following previously stable APIs have now been made const. - [The `new` method for all `NonZero` integers.][73858] - [The `checked_add`,`checked_sub`,`checked_mul`,`checked_neg`, `checked_shl`, `checked_shr`, `saturating_add`, `saturating_sub`, and `saturating_mul` methods for all integers.][73858] - [The `checked_abs`, `saturating_abs`, `saturating_neg`, and `signum` for all signed integers.][73858] - [The `is_ascii_alphabetic`, `is_ascii_uppercase`, `is_ascii_lowercase`, `is_ascii_alphanumeric`, `is_ascii_digit`, `is_ascii_hexdigit`, `is_ascii_punctuation`, `is_ascii_graphic`, `is_ascii_whitespace`, and `is_ascii_control` methods for `char` and `u8`.][73858] + Cargo - [`build-dependencies` are now built with opt-level 0 by default.][cargo/8500] You can override this by setting the following in your `Cargo.toml`. ```toml [profile.release.build-override] opt-level = 3 ``` - [`cargo-help` will now display man pages for commands rather just the `--help` text.][cargo/8456] - [`cargo-metadata` now emits a `test` field indicating if a target has tests enabled.][cargo/8478] - [`workspace.default-members` now respects `workspace.exclude`.][cargo/8485] - [`cargo-publish` will now use an alternative registry by default if it's the only registry specified in `package.publish`.][cargo/8571] + Misc - [Added a help button beside Rustdoc's searchbar that explains rustdoc's type based search.][75366] - [Added the Ayu theme to rustdoc.][71237] - Update to version 1.46.0 + Language - [`if`, `match`, and `loop` expressions can now be used in const functions.][72437] - [Additionally you are now also able to coerce and cast to slices (`&[T]`) in const functions.][73862] - [The `#[track_caller]` attribute can now be added to functions to use the function's caller's location information for panic messages.][72445] - [Recursively indexing into tuples no longer needs parentheses.][71322] E.g. `x.0.0` over `(x.0).0`. - [`mem::transmute` can now be used in statics and constants.][72920] **Note** You currently can't use `mem::transmute` in constant functions. + Compiler - [You can now use the `cdylib` target on Apple iOS and tvOS platforms.][73516] - [Enabled static "Position Independent Executables" by default for `x86_64-unknown-linux-musl`.][70740] + Libraries - [`mem::forget` is now a `const fn`.][73887] - [`String` now implements `From`.][73466] - [The `leading_ones`, and `trailing_ones` methods have been stabilised for all integer types.][73032] - [`vec::IntoIter` now implements `AsRef<[T]>`.][72583] - [All non-zero integer types (`NonZeroU8`) now implement `TryFrom` for their zero-able equivalent (e.g. `TryFrom`).][72717] - [`&[T]` and `&mut [T]` now implement `PartialEq>`.][71660] - [`(String, u16)` now implements `ToSocketAddrs`.][73007] - [`vec::Drain<'_, T>` now implements `AsRef<[T]>`.][72584] + Stabilized APIs - [`Option::zip`] - [`vec::Drain::as_slice`] + Cargo Added a number of new environment variables that are now available when compiling your crate. - [`CARGO_BIN_NAME` and `CARGO_CRATE_NAME`][cargo/8270] Providing the name of the specific binary being compiled and the name of the crate. - [`CARGO_PKG_LICENSE`][cargo/8325] The license from the manifest of the package. - [`CARGO_PKG_LICENSE_FILE`][cargo/8387] The path to the license file. - Update to version 1.44.1 * rustfmt accepts rustfmt_skip in cfg_attr again. * Don't hash executable filenames on apple platforms, fixing backtraces. * Fix crashes when finding backtrace on macOS. * Clippy applies lint levels into different files. - Update to version 1.44.0 + Language - You can now use `async/.await` with `#[no_std]` enabled. - Added the `unused_braces` lint. - Expansion-driven outline module parsing + Compiler - Rustc now respects the `-C codegen-units` flag in incremental mode. Additionally when in incremental mode rustc defaults to 256 codegen units. - Refactored `catch_unwind` to have zero-cost, unless unwinding is enabled and a panic is thrown. - Added tier 3\* support for the `aarch64-unknown-none` and `aarch64-unknown-none-softfloat` targets. - Added tier 3 support for `arm64-apple-tvos` and `x86_64-apple-tvos` targets. + Libraries - Special cased `vec![]` to map directly to `Vec::new()`. This allows `vec![]` to be able to be used in `const` contexts. - `convert::Infallible` now implements `Hash`. - `OsString` now implements `DerefMut` and `IndexMut` returning a `&mut OsStr`. - Unicode 13 is now supported. - `String` now implements `From<&mut str>`. - `IoSlice` now implements `Copy`. - `Vec` now implements `From<[T; N]>`. Where `N` is at most 32. - `proc_macro::LexError` now implements `fmt::Display` and `Error`. - `from_le_bytes`, `to_le_bytes`, `from_be_bytes`, `to_be_bytes`, `from_ne_bytes`, and `to_ne_bytes` methods are now `const` for all integer types. + Stabilizd APIs - [`PathBuf::with_capacity`] - [`PathBuf::capacity`] - [`PathBuf::clear`] - [`PathBuf::reserve`] - [`PathBuf::reserve_exact`] - [`PathBuf::shrink_to_fit`] - [`f32::to_int_unchecked`] - [`f64::to_int_unchecked`] - [`Layout::align_to`] - [`Layout::pad_to_align`] - [`Layout::array`] - [`Layout::extend`] + Cargo - Added the `cargo tree` command which will print a tree graph of your dependencies + Misc - Rustdoc now allows you to specify `--crate-version` to have rustdoc include the version in the sidebar. + Compatibility Notes - Rustc now correctly generates static libraries on Windows GNU targets with the `.a` extension, rather than the previous `.lib`. - Removed the `-C no_integrated_as` flag from rustc. - The `file_name` property in JSON output of macro errors now points the actual source file rather than the previous format of ``. * *Note:** this may not point to a file that actually exists on the user's system. - The minimum required external LLVM version has been bumped to LLVM 8. - `mem::{zeroed, uninitialised}` will now panic when used with types that do not allow zero initialization such as `NonZeroU8`. This was previously a warning. - In 1.45.0 (the next release) converting a `f64` to `u32` using the `as` operator has been defined as a saturating operation. This was previously undefined behaviour, but you can use the `{f64, f32}::to_int_unchecked` methods to continue using the current behaviour, which may be desirable in rare performance sensitive situations.- Add patch Fix-big-endian-miscompile-of-bitcast-zex.patch to fix miscompilations with rustc 1.43 that lead to LTO failures (bsc#1173202)- Update to version 1.43.1 - Updated openssl-src to 1.1.1g for CVE-2020-1967. - Fixed the stabilization of AVX-512 features. - Fixed `cargo package --list` not working with unpublished dependencies. - Check upstream signatures for binaries - Add rust.keyring- Update rustfmt_version- Update to version 1.43.0 + Language - Fixed using binary operations with `&{number}` (e.g. `&1.0`) not having the type inferred correctly. - Attributes such as `#[cfg()]` can now be used on `if` expressions. - Syntax only changes: * Allow `type Foo: Ord` syntactically. * Fuse associated and extern items up to defaultness. * Syntactically allow `self` in all `fn` contexts. * Merge `fn` syntax + cleanup item parsing. * `item` macro fragments can be interpolated into `trait`s, `impl`s, and `extern` blocks. For example, you may now write: ```rust macro_rules! mac_trait { ($i:item) => { trait T { $i } } } mac_trait! { fn foo() {} } ``` * These are still rejected *semantically*, so you will likely receive an error but these changes can be seen and parsed by macros and conditional compilation. + Compiler - You can now pass multiple lint flags to rustc to override the previous flags. For example; `rustc -D unused -A unused-variables` denies everything in the `unused` lint group except `unused-variables` which is explicitly allowed. However, passing `rustc -A unused-variables -D unused` denies everything in the `unused` lint group **including** `unused-variables` since the allow flag is specified before the deny flag (and therefore overridden). - rustc will now prefer your system MinGW libraries over its bundled libraries if they are available on `windows-gnu`. - rustc now buffers errors/warnings printed in JSON. + Libraries - `Arc<[T; N]>`, `Box<[T; N]>`, and `Rc<[T; N]>`, now implement `TryFrom>`,`TryFrom>`, and `TryFrom>` respectively. * *Note** These conversions are only available when `N` is `0..=32`. - You can now use associated constants on floats and integers directly, rather than having to import the module. e.g. You can now write `u32::MAX` or `f32::NAN` with no imports. - `u8::is_ascii` is now `const`. - `String` now implements `AsMut`. - Added the `primitive` module to `std` and `core`. This module reexports Rust's primitive types. This is mainly useful in macros where you want avoid these types being shadowed. - Relaxed some of the trait bounds on `HashMap` and `HashSet`. - `string::FromUtf8Error` now implements `Clone + Eq`. + Stabilized APIs - `Once::is_completed` - `f32::LOG10_2` - `f32::LOG2_10` - `f64::LOG10_2` - `f64::LOG2_10` - `iter::once_with` + Cargo - You can now set config `[profile]`s in your `.cargo/config`, or through your environment. - Cargo will now set `CARGO_BIN_EXE_` pointing to a binary's executable path when running integration tests or benchmarks. `` is the name of your binary as-is e.g. If you wanted the executable path for a binary named `my-program`you would use `env!("CARGO_BIN_EXE_my-program")`. + Misc - Certain checks in the `const_err` lint were deemed unrelated to const evaluation, and have been moved to the `unconditional_panic` and `arithmetic_overflow` lints. + Compatibility Notes - Having trailing syntax in the `assert!` macro is now a hard error. This has been a warning since 1.36.0. - Fixed `Self` not having the correctly inferred type. This incorrectly led to some instances being accepted, and now correctly emits a hard error.- Avoid duplication of environment settings- Update to version 1.42.0: + Language - You can now use the slice pattern syntax with subslices. - You can now use #[repr(transparent)] on univariant enums. Meaning that you can create an enum that has the exact layout and ABI of the type it contains. - There are some syntax-only changes: * default is syntactically allowed before items in trait definitions. * Items in impls (i.e. consts, types, and fns) may syntactically leave out their bodies in favor of ;. * Bounds on associated types in impls are now syntactically allowed (e.g. type Foo: Ord;). * ... (the C-variadic type) may occur syntactically directly as the type of any function parameter. These are still rejected semantically, so you will likely receive an error but these changes can be seen and parsed by procedural macros and conditional compilation. + Compiler - Added tier 2 support for armv7a-none-eabi. - Added tier 2 support for riscv64gc-unknown-linux-gnu. - Option::{expect,unwrap} and Result::{expect, expect_err, unwrap, unwrap_err} now produce panic messages pointing to the location where they were called, rather than core's internals. Refer to Rust's platform support page for more information on Rust's tiered platform support. + Libraries - iter::Empty now implements Send and Sync for any T. - Pin::{map_unchecked, map_unchecked_mut} no longer require the return type to implement Sized. - io::Cursor now derives PartialEq and Eq. - Layout::new is now const. - Added Standard Library support for riscv64gc-unknown-linux-gnu. + Stabilized APIs - CondVar::wait_while - CondVar::wait_timeout_while - DebugMap::key - DebugMap::value - ManuallyDrop::take - matches! - ptr::slice_from_raw_parts_mut - ptr::slice_from_raw_parts + Cargo - You no longer need to include extern crate proc_macro; to be able to use proc_macro; in the 2018 edition. + Compatibility Notes - Error::description has been deprecated, and its use will now produce a warning. It's recommended to use Display/to_string instead.- Rebased patches: + ignore-Wstring-conversion.patch (offset / fuzz)- Update to version 1.41.1: - Always check types of static items - Always check lifetime bounds of `Copy` impls - Fix miscompilation in callers of `Layout::repeat` - Update to version 1.41.0: + Language - You can now pass type parameters to foreign items when implementing traits. E.g. You can now write `impl From for Vec {}`. - You can now arbitrarily nest receiver types in the `self` position. E.g. you can now write `fn foo(self: Box>) {}`. Previously only `Self`, `&Self`, `&mut Self`, `Arc`, `Rc`, and `Box` were allowed. - You can now use any valid identifier in a `format_args` macro. Previously identifiers starting with an underscore were not allowed. - Visibility modifiers (e.g. `pub`) are now syntactically allowed on trait items and enum variants. These are still rejected semantically, but can be seen and parsed by procedural macros and conditional compilation. + Compiler - Rustc will now warn if you have unused loop `'label`s. - Removed support for the `i686-unknown-dragonfly` target. - Added tier 3 support\* for the `riscv64gc-unknown-linux-gnu` target. - You can now pass an arguments file passing the `@path` syntax to rustc. Note that the format differs somewhat from what is found in other tooling; please see the documentation for more information. - You can now provide `--extern` flag without a path, indicating that it is available from the search path or specified with an `-L` flag. Refer to Rust's [platform support page][forge-platform-support] for more information on Rust's tiered platform support. + Libraries - The `core::panic` module is now stable. It was already stable through `std`. - `NonZero*` numerics now implement `From` if it's a smaller integer width. E.g. `NonZeroU16` now implements `From`. - `MaybeUninit` now implements `fmt::Debug`. + Stabilized APIs - `Result::map_or` - `Result::map_or_else` - `std::rc::Weak::weak_count` - `std::rc::Weak::strong_count` - `std::sync::Weak::weak_count` - `std::sync::Weak::strong_count` + Cargo - Cargo will now document all the private items for binary crates by default. - `cargo-install` will now reinstall the package if it detects that it is out of date. - Cargo.lock now uses a more git friendly format that should help to reduce merge conflicts. - You can now override specific dependencies's build settings. E.g. `[profile.dev.package.image] opt-level = 2` sets the `image` crate's optimisation level to `2` for debug builds. You can also use `[profile..build-override]` to override build scripts and their dependencies. + Misc - You can now specify `edition` in documentation code blocks to compile the block for that edition. E.g. `edition2018` tells rustdoc that the code sample should be compiled the 2018 edition of Rust. - You can now provide custom themes to rustdoc with `--theme`, and check the current theme with `--check-theme`. - You can use `#[cfg(doc)]` to compile an item when building documentation. + Compatibility Notes - As previously announced 1.41.0 will be the last tier 1 release for 32-bit Apple targets. This means that the source code is still available to build, but the targets are no longer being tested and release binaries for those platforms will no longer be distributed by the Rust project. Please refer to the linked blog post for more information.- Adjust constraints: Request 20GB HDD for all archs. Simplify the file by removing the overrides for various disk sizes. All archs are curretnly at roughly 17GB storage in use.- Bump version of libssh2 for SLE15; we now need a version with libssh2_userauth_publickey_frommemory(), which appeared in libssh2 1.6.0. - Use the bundled libssh2 prior to SLE15. SLE12 has 1.4.3, which is too old for the ssh crate now.- Update to version 1.40.0 + Language - You can now use tuple `struct`s and tuple `enum` variant's constructors in `const` contexts. e.g. pub struct Point(i32, i32); const ORIGIN: Point = { let constructor = Point; constructor(0, 0) }; - You can now mark `struct`s, `enum`s, and `enum` variants with the `#[non_exhaustive]` attribute to indicate that there may be variants or fields added in the future. For example this requires adding a wild-card branch (`_ => {}`) to any match statements on a non-exhaustive `enum`. - You can now use function-like procedural macros in `extern` blocks and in type positions. e.g. `type Generated = macro!();` - Function-like and attribute procedural macros can now emit `macro_rules!` items, so you can now have your macros generate macros. - The `meta` pattern matcher in `macro_rules!` now correctly matches the modern attribute syntax. For example `(#[$m:meta])` now matches `#[attr]`, `#[attr{tokens}]`, `#[attr[tokens]]`, and `#[attr(tokens)]`. + Compiler - Added tier 3 support\* for the `thumbv7neon-unknown-linux-musleabihf` target. - Added tier 3 support for the `aarch64-unknown-none-softfloat` target. - Added tier 3 support for the `mips64-unknown-linux-muslabi64`, and `mips64el-unknown-linux-muslabi64` targets. + Libraries - The `is_power_of_two` method on unsigned numeric types is now a `const` function. + Stabilized APIs - BTreeMap::get_key_value - HashMap::get_key_value - Option::as_deref_mut - Option::as_deref - Option::flatten - UdpSocket::peer_addr - f32::to_be_bytes - f32::to_le_bytes - f32::to_ne_bytes - f64::to_be_bytes - f64::to_le_bytes - f64::to_ne_bytes - f32::from_be_bytes - f32::from_le_bytes - f32::from_ne_bytes - f64::from_be_bytes - f64::from_le_bytes - f64::from_ne_bytes - mem::take - slice::repeat - todo! + Cargo - Cargo will now always display warnings, rather than only on fresh builds. - Feature flags (except `--all-features`) passed to a virtual workspace will now produce an error. Previously these flags were ignored. - You can now publish `dev-dependencies` without including a `version`. + Misc - You can now specify the `#[cfg(doctest)]` attribute to include an item only when running documentation tests with `rustdoc`. + Compatibility Notes - As previously announced, any previous NLL warnings in the 2015 edition are now hard errors. - The `include!` macro will now warn if it failed to include the entire file. The `include!` macro unintentionally only includes the first _expression_ in a file, and this can be unintuitive. This will become either a hard error in a future release, or the behavior may be fixed to include all expressions as expected. - Using `#[inline]` on function prototypes and consts now emits a warning under `unused_attribute` lint. Using `#[inline]` anywhere else inside traits or `extern` blocks now correctly emits a hard error.- Rebased patches: + hopefully-fix-rustdoc-build.patch dropped (merged upstream)- Rename README to README.suse-maint and add it as a source to stop factory-auto from declining submissions automatically- Re-format the spec file - Add a README to explain the update process - Add _service file for download the assets and re-base the patches- Add hopefully-fix-rustdoc-build.patch to fix rustdoc compilation- Update to version 1.39.0 + Language - You can now create async functions and blocks with async fn, async move {}, and async {} respectively, and you can now call .await on async expressions. - You can now use certain attributes on function, closure, and function pointer parameters. - You can now take shared references to bind-by-move patterns in the if guards of match arms. + Compiler - Added tier 3 support for the i686-unknown-uefi target. - Added tier 3 support for the sparc64-unknown-openbsd target. - rustc will now trim code snippets in diagnostics to fit in your terminal. - You can now pass --show-output argument to test binaries to print the output of successful tests. + For more details: https://github.com/rust-lang/rust/blob/stable/RELEASES.md#version-1390-2019-11-07 - Drop patches already merged in upstream: + rust-61206-assume-tarball-llvm-is-fresh.patch + add-option-to-allow-warnings.patch- Switch to bundled version of libgit2 for now. libgit2-sys seems to expect using the bundled variant, which just seems to point to a snapshot of the master branch and doesn't match any released libgit2 (bsc#1154817). See: https://github.com/rust-lang/rust/issues/63476 and https://github.com/rust-lang/git2-rs/issues/458 for details.- Add patch add-option-to-allow-warnings.patch to add a config option which allows warnings and so enables v1.38 to bootstrap itself.- Update to version 1.38.0 + Language - The `#[global_allocator]` attribute can now be used in submodules. - The `#[deprecated]` attribute can now be used on macros. + Compiler - Added pipelined compilation support to `rustc`. This will improve compilation times in some cases. + Libraries - `ascii::EscapeDefault` now implements `Clone` and `Display`. - Derive macros for prelude traits (e.g. `Clone`, `Debug`, `Hash`) are now available at the same path as the trait. (e.g. The `Clone` derive macro is available at `std::clone::Clone`). This also makes all built-in macros available in `std`/`core` root. e.g. `std::include_bytes!`. - `str::Chars` now implements `Debug`. - `slice::{concat, connect, join}` now accepts `&[T]` in addition to `&T`. - `*const T` and `*mut T` now implement `marker::Unpin`. - `Arc<[T]>` and `Rc<[T]>` now implement `FromIterator`. - Added euclidean remainder and division operations (`div_euclid`, `rem_euclid`) to all numeric primitives. Additionally `checked`, `overflowing`, and `wrapping` versions are available for all integer primitives. - `thread::AccessError` now implements `Clone`, `Copy`, `Eq`, `Error`, and `PartialEq`. - `iter::{StepBy, Peekable, Take}` now implement `DoubleEndedIterator`. + Stabilized APIs - `<*const T>::cast` - `<*mut T>::cast` - `Duration::as_secs_f32` - `Duration::as_secs_f64` - `Duration::div_f32` - `Duration::div_f64` - `Duration::from_secs_f32` - `Duration::from_secs_f64` - `Duration::mul_f32` - `Duration::mul_f64` - `any::type_name` + Cargo - Added pipelined compilation support to `cargo`. - You can now pass the `--features` option multiple times to enable multiple features. + Misc - `rustc` will now warn about some incorrect uses of `mem::{uninitialized, zeroed}` that are known to cause undefined behaviour.- Use gcc7 on all of SLE12, since the embedded LLVM wants at least gcc 5.1. - Add rust-61206-assume-tarball-llvm-is-fresh.patch - Upstream fix to make LLVM not be rebuilt during the installation phase.- Update to version 1.37.0 + Language - #[must_use] will now warn if the type is contained in a tuple, Box, or an array and unused. - You can now use the `cfg` and `cfg_attr` attributes on generic parameters. - You can now use enum variants through type alias. e.g. You can write the following: ``` type MyOption = Option; fn increment_or_zero(x: MyOption) -> u8 { match x { MyOption::Some(y) => y + 1, MyOption::None => 0, } } ``` - You can now use `_` as an identifier for consts. e.g. You can write `const _: u32 = 5;`. - You can now use `#[repr(align(X)]` on enums. - The `?` Kleene macro operator is now available in the 2015 edition. + Compiler - You can now enable Profile-Guided Optimization with the `-C profile-generate` and `-C profile-use` flags. For more information on how to use profile guided optimization, please refer to the rustc book. - The `rust-lldb` wrapper script should now work again. + Libraries - `mem::MaybeUninit` is now ABI-compatible with `T`. + Stabilized APIs - BufReader::buffer - BufWriter::buffer - Cell::from_mut - Cell<[T]>::as_slice_of_cells - Cell::as_slice_of_cells - DoubleEndedIterator::nth_back - Option::xor - Wrapping::reverse_bits - i128::reverse_bits - i16::reverse_bits - i32::reverse_bits - i64::reverse_bits - i8::reverse_bits - isize::reverse_bits - slice::copy_within - u128::reverse_bits - u16::reverse_bits - u32::reverse_bits - u64::reverse_bits - u8::reverse_bits - usize::reverse_bits + Cargo - Cargo.lock files are now included by default when publishing executable crates with executables. - You can now specify `default-run="foo"` in `[package]` to specify the default executable to use for `cargo run`. - cargo-vendor is now provided as a sub-command of cargo + Compatibility Notes - Using `...` for inclusive range patterns will now warn by default. Please transition your code to using the `..=` syntax for inclusive ranges instead. - Using a trait object without the `dyn` will now warn by default. Please transition your code to use `dyn Trait` for trait objects instead.- Remove fix-llvm8-build.patch, fixed upstream- Update to version 1.36.0 + Language - Non-Lexical Lifetimes are now enabled on the 2015 edition - The order of traits in trait objects no longer affects the semantics of that object. e.g. `dyn Send + fmt::Debug` is now equivalent to `dyn fmt::Debug + Send`, where this was previously not the case. + Libraries - `HashMap`'s implementation has been replaced with `hashbrown::HashMap` implementation - `TryFromSliceError` now implements `From` - `mem::needs_drop` is now available as a const fn - `alloc::Layout::from_size_align_unchecked` is now available as a const fn - `String` now implements `BorrowMut` - `io::Cursor` now implements `Default` - Both `NonNull::{dangling, cast}` are now const fns - The `alloc` crate is now stable. `alloc` allows you to use a subset of `std` (e.g. `Vec`, `Box`, `Arc`) in `#![no_std]` environments if the environment has access to heap memory allocation. - String` now implements `From<&String>` - You can now pass multiple arguments to the `dbg!` macro. `dbg!` will return a tuple of each argument when there is multiple arguments. - `Result::{is_err, is_ok}` are now `#[must_use]` and will produce a warning if not used. + Stabilized APIs - VecDeque::rotate_left - VecDeque::rotate_right - Iterator::copied - io::IoSlice - io::IoSliceMut - Read::read_vectored - Write::write_vectored - str::as_mut_ptr - mem::MaybeUninit - pointer::align_offset - future::Future - task::Context - task::RawWaker - task::RawWakerVTable - task::Waker - task::Poll + Cargo - Cargo will now produce an error if you attempt to use the name of a required dependency as a feature - You can now pass the `--offline` flag to run cargo without accessing the network + Clippy - New lints: `find_map`, `filter_map_next` - New lint: `path_buf_push_overwrite` - Move `path_buf_push_overwrite` to the nursery - Split `redundant_closure` into `redundant_closure` and `redundant_closure_for_method_calls` - Allow allowing of `toplevel_ref_arg` lint - Fix false negative in `or_fun_call` pertaining to nested constructors - Fixed false positive in `or_fn_call` pertaining to enum variant constructors - Fix false positive in `useless_let_if_seq` pertaining to interior mutability - Fix false positive in `redundant_closure` pertaining to non-function types - Fix false positive in `let_and_return` pertaining to attributes on `let`s - Fix false positive in `module_name_repetitions` lint pertaining to attributes - Fix false positive on `assertions_on_constants` pertaining to `debug_assert!` - Improve suggestion in `map_clone` to suggest `.copied()` where applicable - Improve suggestion for `search_is_some` - Improve suggestion applicability for `naive_bytecount` - Improve suggestion applicability for `while_let_loop` - Improve diagnostics for `too_many_arguments` - Improve diagnostics for `cast_lossless` - Deal with macro checks in desugarings better - Add macro check for `unnecessary_cast` - Remove `approx_constant`'s documentation's "Known problems" section - Fix ICE in `suspicious_else_formatting` - Fix ICE in `decimal_literal_representation` + Compatibility Notes - With the stabilisation of `mem::MaybeUninit`, `mem::uninitialized` use is no longer recommended, and will be deprecated in 1.38.0.- Add support for ppc- Update to version 1.35.0 + Language - `FnOnce`, `FnMut`, and the `Fn` traits are now implemented for `Box`, `Box`, and `Box` respectively. - You can now coerce closures into unsafe function pointers. e.g. unsafe fn call_unsafe(func: unsafe fn()) { func() } pub fn main() { unsafe { call_unsafe(|| {}); } } + Compiler - Added the `armv6-unknown-freebsd-gnueabihf` and `armv7-unknown-freebsd-gnueabihf` targets. - Added the `wasm32-unknown-wasi` target. + Libraries - `Thread` will now show its ID in `Debug` output. - `StdinLock`, `StdoutLock`, and `StderrLock` now implement `AsRawFd`. - `alloc::System` now implements `Default`. - Expanded `Debug` output (`{:#?}`) for structs now has a trailing comma on the last field. - `char::{ToLowercase, ToUppercase}` now implement `ExactSizeIterator`. - All `NonZero` numeric types now implement `FromStr`. - Removed the `Read` trait bounds on the `BufReader::{get_ref, get_mut, into_inner}` methods. - You can now call the `dbg!` macro without any parameters to print the file and line where it is called. - In place ASCII case conversions are now up to 4× faster. e.g. `str::make_ascii_lowercase` - `hash_map::{OccupiedEntry, VacantEntry}` now implement `Sync` and `Send`. + Stabilized APIs - `f32::copysign` - `f64::copysign` - `RefCell::replace_with` - `RefCell::map_split` - `ptr::hash` - `Range::contains` - `RangeFrom::contains` - `RangeTo::contains` - `RangeInclusive::contains` - `RangeToInclusive::contains` - `Option::copied` + Cargo - You can now set `cargo:rustc-cdylib-link-arg` at build time to pass custom linker arguments when building a `cdylib`. Its usage is highly platform specific. - version 1.34.2 + Destabilize the `Error::type_id` function due to a security vulnerability (CVE-2019-12083) - version 1.34.1 + Fix false positives for the `redundant_closure` Clippy lint + Fix false positives for the `missing_const_for_fn` Clippy lint + Fix Clippy panic when checking some macros- Add fix-llvm8-build.patch: Fix linker errors with llvm8 by limiting internalization in ThinLTO.- Fix regexp for .rlib files in rust-rpmlintrc.- Disable LTO (boo#1133283).- Update to version 1.34.0 + Language - You can now use `#[deprecated = "reason"]` as a shorthand for `#[deprecated(note = "reason")]`. This was previously allowed by mistake but had no effect. - You can now accept token streams in `#[attr()]`,`#[attr[]]`, and `#[attr{}]` procedural macros. - You can now write `extern crate self as foo;` to import your crate's root into the extern prelude. + Compiler - You can now target `riscv64imac-unknown-none-elf` and `riscv64gc-unknown-none-elf`. - You can now enable linker plugin LTO optimisations with `-C linker-plugin-lto`. This allows rustc to compile your Rust code into LLVM bitcode allowing LLVM to perform LTO optimisations across C/C++ FFI boundaries. - You can now target `powerpc64-unknown-freebsd`. + Libraries - The trait bounds have been removed on some of `HashMap`'s and `HashSet`'s basic methods. Most notably you no longer require the `Hash` trait to create an iterator. - The `Ord` trait bounds have been removed on some of `BinaryHeap`'s basic methods. Most notably you no longer require the `Ord` trait to create an iterator. - The methods `overflowing_neg` and `wrapping_neg` are now `const` functions for all numeric types. - Indexing a `str` is now generic over all types that implement `SliceIndex`. - `str::trim`, `str::trim_matches`, `str::trim_{start, end}`, and `str::trim_{start, end}_matches` are now `#[must_use]` and will produce a warning if their returning type is unused. - The methods `checked_pow`, `saturating_pow`, `wrapping_pow`, and `overflowing_pow` are now available for all numeric types. These are equivalvent to methods such as `wrapping_add` for the `pow` operation. + Stabilized APIs - std & core + Any::type_id + Error::type_id + atomic::AtomicI16 + atomic::AtomicI32 + atomic::AtomicI64 + atomic::AtomicI8 + atomic::AtomicU16 + atomic::AtomicU32 + atomic::AtomicU64 + atomic::AtomicU8 + convert::Infallible + convert::TryFrom + convert::TryInto + iter::from_fn + iter::successors + num::NonZeroI128 + num::NonZeroI16 + num::NonZeroI32 + num::NonZeroI64 + num::NonZeroI8 + num::NonZeroIsize + slice::sort_by_cached_key + str::escape_debug + str::escape_default + str::escape_unicode + str::split_ascii_whitespace - std + Instant::checked_add + Instant::checked_sub + SystemTime::checked_add + SystemTime::checked_sub + Cargo - You can now use alternative registries to crates.io. + Misc - You can now use the `?` operator in your documentation tests without manually adding `fn main() -> Result<(), _> {}`. + Compatibility Notes - `Command::before_exec` is now deprecated in favor of the unsafe method `Command::pre_exec`. - Use of `ATOMIC_{BOOL, ISIZE, USIZE}_INIT` is now deprecated. As you can now use `const` functions in `static` variables. - Remove depreciated-trim_left_matches.patch. - Rustfmt version bumped to 1.0.3 + Change description not provided. - rls version now in sync with rustc. - Misc fixes to rust.spec- Use the system's LLVM in SLE15-SP1. That distribution has LLVM7, and we need to use it there, instead of any other version. - Prevent auto-provides from being created for things under rustlibdir, so the RPM does not inadvertently have a Provides for a bundled LLVM and the Rust library files. - Sync changes files between SLE and openSUSE, for ease of maintenance.- Explicitly build only a subset of tools- Remove miri complete instead of excluding. This is experimental and so should not be included. - BuildRequires ccache in attempt to reduce compile times. - Remove more extraneous directories from src that will never be used. - Extra patterns in rpmlintrc to catch more false positives: + Rust has no stable API, ignore SONAME warnings + Tool versions don't update in step with rust, ignore warnings- Separate the bootstrap version from the minimum required system version for package builds.- add depreciated-trim_left_matches.patch: replaces depreciated function call in src/tools/tidy with trim_start_matches to fix error when bootstrapping with system 1.33.0- Update to version 1.33.0 + Language - You can now use the `cfg(target_vendor)` attribute. E.g. `#[cfg(target_vendor="linux")] fn main() { println!("Hello Linux!"); }` - Integer patterns such as in a match expression can now be exhaustive. E.g. You can have match statement on a `u8` that covers `0..=255` and you would no longer be required to have a `_ => unreachable!()` case. - You can now have multiple patterns in `if let` and `while let` expressions. You can do this with the same syntax as a `match` expression. E.g. ``` enum Creature { Crab(String), Lobster(String), Person(String), } fn main() { let state = Creature::Crab("Ferris"); if let Creature::Crab(name) | Creature::Person(name) = state { println!("This creature's name is: {}", name); } } ``` - You can now have irrefutable `if let` and `while let` patterns. Using this feature will by default produce a warning as this behaviour can be unintuitive. E.g. `if let _ = 5 {}` - You can now use `let` bindings, assignments, expression statements, and irrefutable pattern destructuring in const functions. - You can now call unsafe const functions. E.g. ``` const unsafe fn foo() -> i32 { 5 } const fn bar() -> i32 { unsafe { foo() } } ``` - You can now specify multiple attributes in a `cfg_attr` attribute. E.g. `#[cfg_attr(all(), must_use, optimize)]` - You can now specify a specific alignment with the `#[repr(packed)]` attribute. E.g. `#[repr(packed(2))] struct Foo(i16, i32);` is a struct with an alignment of 2 bytes and a size of 6 bytes. - You can now import an item from a module as an `_`. This allows you to import a trait's impls, and not have the name in the namespace. E.g. ``` use std::io::Read as _; // Allowed as there is only one `Read` in the module. pub trait Read {} ``` - extern` functions will now abort by default when panicking. This was previously undefined behaviour. + Compiler - You can now set a linker flavor for `rustc` with the `-Clinker-flavor` command line argument. - The mininum required LLVM version has been bumped to 6.0. - Added support for the PowerPC64 architecture on FreeBSD. - The `x86_64-fortanix-unknown-sgx` target support has been upgraded to tier 2 support. Visit the [platform support][platform-support] page for information on Rust's platform support. - Added support for the `thumbv7neon-linux-androideabi` and `thumbv7neon-unknown-linux-gnueabihf` targets. - Added support for the `x86_64-unknown-uefi` target. + Libraries - The methods `overflowing_{add, sub, mul, shl, shr}` are now `const` functions for all numeric types. - The methods `rotate_left`, `rotate_right`, and `wrapping_{add, sub, mul, shl, shr}` are now `const` functions for all numeric types. - The methods `is_positive` and `is_negative` are now `const` functions for all signed numeric types. - The `get` method for all `NonZero` types is now `const`. - The methods `count_ones`, `count_zeros`, `leading_zeros`, `trailing_zeros`, `swap_bytes`, `from_be`, `from_le`, `to_be`, `to_le` are now `const` for all numeric types. - Ipv4Addr::new` is now a `const` function + Stabilized APIs - unix::FileExt::read_exact_at - unix::FileExt::write_all_at - Option::transpose - Result::transpose - convert::identity - pin::Pin - marker::Unpin - marker::PhantomPinned - Vec::resize_with - VecDeque::resize_with - Duration::as_millis - Duration::as_micros - Duration::as_nanos + Cargo - Cargo should now rebuild a crate if a file was modified during the initial build.][cargo/6484] + Compatibility Notes - The methods `str::{trim_left, trim_right, trim_left_matches, trim_right_matches}` are now deprecated in the standard library, and their usage will now produce a warning. Please use the `str::{trim_start, trim_end, trim_start_matches, trim_end_matches}` methods instead.- Bump minimum LLVM to 7.0 - Add conditions to build SLE versions with bundled libgit2 and libssh2- Use cmake3, not cmake, in SLE-12 SP2 and earlier. The stock cmake package there was 2.x, and building llvm requires cmake 3.5.- Use same version bootstrap as package source - Fixes to build with correct LLVM for SLE and Leap releases- Move export vars directly to where used. - Change codegen units to 2 for Arm and x86 builds in attempt to reduce memory use by LLVM.- Put each exported environment variable in a separate line so the specfile will work on SLE SP0/SP1/SP2.- Avoid bash-specific syntax in "test" call.- Fix bootstrap conditionals - Fix bundled_llvm conditionals - Don't build stage0 if compiler used to build package is the same version as package- Ensure install environment is the same as build environment to prevent building everything twice (second time without correct flags).- Remove CVE-2018-1000622-prevent-rustdoc-loads-uncontrolled-plugins-path.patch, since rustdoc plugins are fixed since version 1.27.1 (bsc#1100691, CVE-2018-1000622).- Update to version 1.32.0 - Language + 2018 edition - You can now use the `?` operator in macro definitions. The `?` operator allows you to specify zero or one repetitions similar to the `*` and `+` operators. - Module paths with no leading keyword like `super`, `self`, or `crate`, will now always resolve to the item (`enum`, `struct`, etc.) available in the module if present, before resolving to a external crate or an item the prelude. E.g. enum Color { Red, Green, Blue } use Color::*; + All editions - You can now match against `PhantomData` types. - You can now match against literals in macros with the `literal` specifier. This will match against a literal of any type. E.g. `1`, `'A'`, `"Hello World"` - Self can now be used as a constructor and pattern for unit and tuple structs. E.g. struct Point(i32, i32); impl Point { pub fn new(x: i32, y: i32) -> Self { Self(x, y) } pub fn is_origin(&self) -> bool { match self { Self(0, 0) => true, _ => false, } } } - Self can also now be used in type definitions. E.g. enum List where Self: PartialOrd // can write `Self` instead of `List` { Nil, Cons(T, Box) // likewise here } - You can now mark traits with `#[must_use]`. This provides a warning if a `impl Trait` or `dyn Trait` is returned and unused in the program. - Compiler + The default allocator has changed from jemalloc to the default allocator on your system. The compiler itself on Linux & macOS will still use jemalloc, but programs compiled with it will use the system allocator. + Added the `aarch64-pc-windows-msvc` target. - Libraries + `PathBuf` now implements `FromStr`. - `Box<[T]>` now implements `FromIterator`. - The `dbg!` macro has been stabilized. This macro enables you to easily debug expressions in your rust program. E.g. let a = 2; let b = dbg!(a * 2) + 1; // ^-- prints: [src/main.rs:4] a * 2 = 4 assert_eq!(b, 5); + The following APIs are now `const` functions and can be used in a `const` context. - `Cell::as_ptr` - `UnsafeCell::get` - `char::is_ascii` - `iter::empty` - `ManuallyDrop::new` - `ManuallyDrop::into_inner` - `RangeInclusive::start` - `RangeInclusive::end` - `NonNull::as_ptr` - `slice::as_ptr` - `str::as_ptr` - `Duration::as_secs` - `Duration::subsec_millis` - `Duration::subsec_micros` - `Duration::subsec_nanos` - `CStr::as_ptr` - `Ipv4Addr::is_unspecified` - `Ipv6Addr::new` - `Ipv6Addr::octets` - Stabilized APIs + `i8::to_be_bytes` + `i8::to_le_bytes` + `i8::to_ne_bytes` + `i8::from_be_bytes` + `i8::from_le_bytes` + `i8::from_ne_bytes` + `i16::to_be_bytes` + `i16::to_le_bytes` + `i16::to_ne_bytes` + `i16::from_be_bytes` + `i16::from_le_bytes` + `i16::from_ne_bytes` + `i32::to_be_bytes` + `i32::to_le_bytes` + `i32::to_ne_bytes` + `i32::from_be_bytes` + `i32::from_le_bytes` + `i32::from_ne_bytes` + `i64::to_be_bytes` + `i64::to_le_bytes` + `i64::to_ne_bytes` + `i64::from_be_bytes` + `i64::from_le_bytes` + `i64::from_ne_bytes` + `i128::to_be_bytes` + `i128::to_le_bytes` + `i128::to_ne_bytes` + `i128::from_be_bytes` + `i128::from_le_bytes` + `i128::from_ne_bytes` + `isize::to_be_bytes` + `isize::to_le_bytes` + `isize::to_ne_bytes` + `isize::from_be_bytes` + `isize::from_le_bytes` + `isize::from_ne_bytes` + `u8::to_be_bytes` + `u8::to_le_bytes` + `u8::to_ne_bytes` + `u8::from_be_bytes` + `u8::from_le_bytes` + `u8::from_ne_bytes` + `u16::to_be_bytes` + `u16::to_le_bytes` + `u16::to_ne_bytes` + `u16::from_be_bytes` + `u16::from_le_bytes` + `u16::from_ne_bytes` + `u32::to_be_bytes` + `u32::to_le_bytes` + `u32::to_ne_bytes` + `u32::from_be_bytes` + `u32::from_le_bytes` + `u32::from_ne_bytes` + `u64::to_be_bytes` + `u64::to_le_bytes` + `u64::to_ne_bytes` + `u64::from_be_bytes` + `u64::from_le_bytes` + `u64::from_ne_bytes` + `u128::to_be_bytes` + `u128::to_le_bytes` + `u128::to_ne_bytes` + `u128::from_be_bytes` + `u128::from_le_bytes` + `u128::from_ne_bytes` + `usize::to_be_bytes` + `usize::to_le_bytes` + `usize::to_ne_bytes` + `usize::from_be_bytes` + `usize::from_le_bytes` + `usize::from_ne_bytes` - Cargo + You can now run `cargo c` as an alias for `cargo check`.][cargo/6218] + Usernames are now allowed in alt registry URLs.][cargo/6242] - Misc + `libproc_macro` has been added to the `rust-src` distribution. - Compatibility Notes + The argument types for AVX's `_mm256_stream_si256`, `_mm256_stream_pd`, `_mm256_stream_ps` have been changed from `*const` to `*mut` as the previous implementation was unsound.- Update to version 1.31.1 + Fix Rust failing to build on `powerpc-unknown-netbsd` + Fix broken go-to-definition in RLS + Fix infinite loop on hover in RLS- Update to version 1.31.0 + Language - This version marks the release of the 2018 edition of Rust. - New lifetime elision rules now allow for eliding lifetimes in functions and impl headers. E.g. `impl<'a> Reader for BufReader<'a> {}` can now be `impl Reader for BufReader<'_> {}`. Lifetimes are still required to be defined in structs. - You can now define and use `const` functions. These are currently a strict minimal subset of the const fn RFC. Refer to the [language reference][const-reference] for what exactly is available. - You can now use tool lints, which allow you to scope lints from external tools using attributes. E.g. `#[allow(clippy::filter_map)]`. - `#[no_mangle]` and `#[export_name]` attributes can now be located anywhere in a crate, not just in exported functions. - You can now use parentheses in pattern matches. + Compiler - Updated musl to 1.1.20 + Libraries - You can now convert `num::NonZero*` types to their raw equivalvents using the `From` trait. E.g. `u8` now implements `From`. - You can now convert a `&Option` into `Option<&T>` and `&mut Option` into `Option<&mut T>` using the `From` trait. - You can now multiply (`*`) a `time::Duration` by a `u32`. + Stabilized APIs - `slice::align_to` - `slice::align_to_mut` - `slice::chunks_exact` - `slice::chunks_exact_mut` - `slice::rchunks` - `slice::rchunks_mut` - `slice::rchunks_exact` - `slice::rchunks_exact_mut` - `Option::replace` + Cargo - Cargo will now download crates in parallel using HTTP/2. - You can now rename packages in your Cargo.toml We have a guide on how to use the `package` key in your dependencies.- Add additional Requires to rls: + Requires rust-src + Requires rust-analysis - Add additional Requires to rustfmt: + Requires cargo - Fix rust-src requiring /usr/bin/bash; a script was incorrectly edited at build time.- Set the bootstrap flag in the spec file temporarily so that rings will build rust without intervention. Must be reverted once all releases are successful.- Add Provides/Obsoletes/Conflicts to rust-std-static and cargo- Strengthen the dependency on rust-std-static to Requires to fix crate package builds in OBS - Use standard form rich dependencies for SUSE Linux 15 and newer- Fix second-person language and spellos.- Add ignore-Wstring-conversion.patch: we require patching of src/librustc_llvm/build.rs to ignore a flag that llvm-config --cxxflags outputs which GCC doesn't recognise. - Default to building using the distro LLVM where the version is >= 5.0, instead of the Rust bundled LLVM which requires compilation. This should decrease build times. SLE LLVM is too old.- Fixing various rpmlint warnings and errors: + ExclusiveArch instead of BuildArch for i686 + Remove conflicts with same package name + Remove a few hidden files during prep, does not touch '.clang-format' + Remove old patch macro in comment + Fix lint warning about bash and zsh completition files + Fix various script shebang warnings (incorrect or missing) + Adjust rpmlintrc to mask some 'invalid' warnings - Move Rust and its tools in to their own category under: + Development/Languages/Rust- Jump from version 1.26.2 to 1.30.0 due to a build issue with using 1.26.x to compile 1.27.x. This package release requires %{rust_bootstrap} to be set. - Enable extra rust tools to be built (cargo, rls, rustfmt, analysis) + cargo is now packaged with the same version number as the rust release, this may break any packages that relied on a cargo version number. - Remove ccache and ninja from BuildRequires. - Switch build configuration to use configure script, remove config.toml. - Include all bootstraps in source rpm to make bootstrapping easier to manage within OBS. - Remove unused patch: update-config-guess.patch Update to version 1.30.0 (2018-10-25) + Language - Procedural macros are now available.- These kinds of macros allow for more powerful code generation. There is a new chapter available in the Rust Programming Language book that goes further in depth. - You can now use keywords as identifiers using the raw identifiers syntax (`r#`),- e.g. `let r#for = true;` - Using anonymous parameters in traits is now deprecated with a warning and will be a hard error in the 2018 edition.- - You can now use `crate` in paths.- This allows you to refer to the crate root in the path, e.g. `use crate::foo;` refers to `foo` in `src/lib.rs`. - Using a external crate no longer requires being prefixed with `::`.- Previously, using a external crate in a module without a use statement required `let json = ::serde_json::from_str(foo);` but can now be written as `let json = serde_json::from_str(foo);`. - You can now apply the `#[used]` attribute to static items to prevent the compiler from optimising them away, even if they appear to be unused,- e.g. `#[used] static FOO: u32 = 1;` - You can now import and reexport macros from other crates with the `use` syntax.- Macros exported with `#[macro_export]` are now placed into the root module of the crate. If your macro relies on calling other local macros, it is recommended to export with the `#[macro_export(local_inner_macros)]` attribute so users won't have to import those macros. - You can now catch visibility keywords (e.g. `pub`, `pub(crate)`) in macros using the `vis` specifier.- - Non-macro attributes now allow all forms of literals, not just strings.- Previously, you would write `#[attr("true")]`, and you can now write `#[attr(true)]`. - You can now specify a function to handle a panic in the Rust runtime with the `#[panic_handler]` attribute.- + Compiler - Added the `riscv32imc-unknown-none-elf` target.- - Added the `aarch64-unknown-netbsd` target- + Libraries - `ManuallyDrop` now allows the inner type to be unsized.- + Stabilized APIs - `Ipv4Addr::BROADCAST` - `Ipv4Addr::LOCALHOST` - `Ipv4Addr::UNSPECIFIED` - `Ipv6Addr::LOCALHOST` - `Ipv6Addr::UNSPECIFIED` - `Iterator::find_map` - The following methods are replacement methods for `trim_left`, `trim_right`, `trim_left_matches`, and `trim_right_matches`, which will be deprecated in 1.33.0: + `str::trim_end_matches` + `str::trim_end` + `str::trim_start_matches` + `str::trim_start` + Cargo - `cargo run` doesn't require specifying a package in workspaces.][cargo/5877] - `cargo doc` now supports `--message-format=json`.][cargo/5878] This is equivalent to calling `rustdoc --error-format=json`. - Cargo will now provide a progress bar for builds.][cargo/5995] + Misc - `rustdoc` allows you to specify what edition to treat your code as with the `--edition` option.- - `rustdoc` now has the `--color` (specify whether to output color) and `--error-format` (specify error format, e.g. `json`) options.- - We now distribute a `rust-gdbgui` script that invokes `gdbgui` with Rust debug symbols.- - Attributes from Rust tools such as `rustfmt` or `clippy` are now available,- e.g. `#[rustfmt::skip]` will skip formatting the next item. - Update to version 1.29.2 (2018-10-11) + Workaround for an aliasing-related LLVM bug, which caused miscompilation. + The `rls-preview` component on the windows-gnu targets has been restored. - Update to version 1.29.1 (2018-09-25) + Security Notes - The standard library's `str::repeat` function contained an out of bounds write caused by an integer overflow. This has been fixed by deterministically panicking when an overflow happens. - Update to version 1.29.0 (2018-09-13) + Compiler - Bumped minimum LLVM version to 5.0. - Added `powerpc64le-unknown-linux-musl` target. - Added `aarch64-unknown-hermit` and `x86_64-unknown-hermit` targets. + Libraries - `Once::call_once` no longer requires `Once` to be `'static`. - `BuildHasherDefault` now implements `PartialEq` and `Eq`. - `Box`, `Box`, and `Box` now implement `Clone`. - Implemented `PartialEq<&str>` for `OsString` and `PartialEq` for `&str`. - `Cell` now allows `T` to be unsized. - `SocketAddr` is now stable on Redox. + Stabilized APIs - `Arc::downcast` - `Iterator::flatten` - `Rc::downcast` + Cargo - Cargo can silently fix some bad lockfiles.][cargo/5831] You can use `--locked` to disable this behavior. - `cargo-install` will now allow you to cross compile an install using `--target`.][cargo/5614] - Added the `cargo-fix` subcommand to automatically move project code from 2015 edition to 2018.][cargo/5723] - `cargo doc` can now optionally document private types using the `--document-private-items` flag.][cargo/5543] + Misc - `rustdoc` now has the `--cap-lints` option which demotes all lints above the specified level to that level. For example `--cap-lints warn` will demote `deny` and `forbid` lints to `warn`. - `rustc` and `rustdoc` will now have the exit code of `1` if compilation fails and `101` if there is a panic. - A preview of clippy has been made available through rustup. You can install the preview with `rustup component add clippy-preview`. + Compatibility Notes - `str::{slice_unchecked, slice_unchecked_mut}` are now deprecated. Use `str::get_unchecked(begin..end)` instead. - `std::env::home_dir` is now deprecated for its unintuitive behavior. Consider using the `home_dir` function from https://crates.io/crates/dirs instead. - `rustc` will no longer silently ignore invalid data in target spec. - `cfg` attributes and `--cfg` command line flags are now more strictly validated. - Update to version 1.28.0 + Language - The `#[repr(transparent)]` attribute is now stable.- This attribute allows a Rust newtype wrapper (`struct NewType(T);`) to be represented as the inner type across Foreign Function Interface (FFI) boundaries. - The keywords `pure`, `sizeof`, `alignof`, and `offsetof` have been unreserved and can now be used as identifiers.- - The `GlobalAlloc` trait and `#[global_allocator]` attribute are now stable.- This will allow users to specify a global allocator for their program. - Unit test functions marked with the `#[test]` attribute can now return `Result<(), E: Debug>` in addition to `()`.- - The `lifetime` specifier for `macro_rules!` is now stable.- This allows macros to easily target lifetimes. + Compiler - The `s` and `z` optimisation levels are now stable.- These optimisations prioritise making smaller binary sizes. `z` is the same as `s` with the exception that it does not vectorise loops, which typically results in an even smaller binary. - The short error format is now stable.- Specified with `--error-format=short` this option will provide a more compressed output of rust error messages. - Added a lint warning when you have duplicated `macro_export`s.- - Reduced the number of allocations in the macro parser.- This can improve compile times of macro heavy crates on average by 5%. + Libraries - Implemented `Default` for `&mut str`.- - Implemented `From` for all integer and unsigned number types.- - Implemented `Extend` for `()`.- - The `Debug` implementation of `time::Duration` should now be more easily human readable.- Previously a `Duration` of one second would printed as `Duration { secs: 1, nanos: 0 }` and will now be printed as `1s`. - Implemented `From<&String>` for `Cow`, `From<&Vec>` for `Cow<[T]>`, `From>` for `CString`, `From, From, From<&CString>` for `Cow`, `From, From, From<&OsString>` for `Cow`, `From<&PathBuf>` for `Cow`, and `From>` for `PathBuf`.- - Implemented `Shl` and `Shr` for `Wrapping` and `Wrapping`.- - `DirEntry::metadata` now uses `fstatat` instead of `lstat` when possible.- This can provide up to a 40% speed increase. - Improved error messages when using `format!`.- + Stabilized APIs - `Iterator::step_by` - `Path::ancestors` - `SystemTime::UNIX_EPOCH` - `alloc::GlobalAlloc` - `alloc::Layout` - `alloc::LayoutErr` - `alloc::System` - `alloc::alloc` - `alloc::alloc_zeroed` - `alloc::dealloc` - `alloc::realloc` - `alloc::handle_alloc_error` - `btree_map::Entry::or_default` - `fmt::Alignment` - `hash_map::Entry::or_default` - `iter::repeat_with` - `num::NonZeroUsize` - `num::NonZeroU128` - `num::NonZeroU16` - `num::NonZeroU32` - `num::NonZeroU64` - `num::NonZeroU8` - `ops::RangeBounds` - `slice::SliceIndex` - `slice::from_mut` - `slice::from_ref` - `{Any + Send + Sync}::downcast_mut` - `{Any + Send + Sync}::downcast_ref` - `{Any + Send + Sync}::is` + Cargo - Cargo will now no longer allow you to publish crates with build scripts that modify the `src` directory.][cargo/5584] The `src` directory in a crate should be considered to be immutable. + Misc - The `suggestion_applicability` field in `rustc`'s json output is now stable.- This will allow dev tools to check whether a code suggestion would apply to them. + Compatibility Notes - Rust will consider trait objects with duplicated constraints to be the same type as without the duplicated constraint.- For example the below code will now fail to compile. ```rust trait Trait {} impl Trait + Send { fn test(&self) { println!("one"); } //~ ERROR duplicate definitions with name `test` } impl Trait + Send + Send { fn test(&self) { println!("two"); } } - Update to version 1.27.2: + Compatibility Notes - The borrow checker was fixed to avoid an additional potential unsoundness when using match ergonomics - Update to version 1.27.1: + Security Notes - rustdoc would execute plugins in the /tmp/rustdoc/plugins directory when running, which enabled executing code as some other user on a given machine. This release fixes that vulnerability; you can read more about this on the blog. The associated CVE is [CVE-2018-1000622]. Thank you to Red Hat for responsibily disclosing this vulnerability to us. + Compatibility Notes - The borrow checker was fixed to avoid an additional potential unsoundness when using match ergonomics - Update to version 1.27.0: + Language - Removed 'proc' from the reserved keywords list. This allows `proc` to be used as an identifier. - The dyn syntax is now available. This syntax is equivalent to the bare `Trait` syntax, and should make it clearer when being used in tandem with `impl Trait` because it is equivalent to the following syntax: `&Trait == &dyn Trait`, `&mut Trait == &mut dyn Trait`, and `Box == Box`. - Attributes on generic parameters such as types and lifetimes are now stable. e.g. `fn foo<#[lifetime_attr] 'a, #[type_attr] T: 'a>() {}` - The `#[must_use]` attribute can now also be used on functions as well as types. It provides a lint that by default warns users when the value returned by a function has not been used. + Compiler - Added the `armvte-unknown-linux-musleabi` target. + Libraries - SIMD (Single Instruction Multiple Data) on x/x_ is now stable. This includes arch::x & arch::x_ modules which contain SIMD intrinsics, a new macro called `is_x_feature_detected!`, the `#[target_feature(enable="")]` attribute, and adding `target_feature = ""` to the `cfg` attribute. - A lot of methods for `[u]`, `f`, and `f` previously only available in std are now available in core. - The generic `Rhs` type parameter on `ops::{Shl, ShlAssign, Shr}` now defaults to `Self`. - std::str::replace` now has the `#[must_use]` attribute to clarify that the operation isn't done in place. - Clone::clone`, `Iterator::collect`, and `ToOwned::to_owned` now have the `#[must_use]` attribute] to warn about unused potentially expensive allocations. + Stabilized APIs - DoubleEndedIterator::rfind - DoubleEndedIterator::rfold - DoubleEndedIterator::try_rfold - Duration::from_micros - Duration::from_nanos - Duration::subsec_micros - Duration::subsec_millis - HashMap::remove_entry - Iterator::try_fold - Iterator::try_for_each - NonNull::cast - Option::filter - String::replace_range - Take::set_limit - hint::unreachable_unchecked - os::unix::process::parent_id - ptr::swap_nonoverlapping - slice::rsplit_mut - slice::rsplit - slice::swap_with_slice + Cargo - `cargo-metadata` now includes `authors`, `categories`, `keywords`, `readme`, and `repository` fields. - `cargo-metadata` now includes a package's `metadata` table. - Added the `--target-dir` optional argument. This allows you to specify a different directory than `target` for placing compilation artifacts. - Cargo will be adding automatic target inference for binaries, benchmarks, examples, and tests in the Rust 2018 edition. If your project specifies specific targets, e.g. using `[[bin]]`, and have other binaries in locations where cargo would infer a binary, Cargo will produce a warning. You can disable this feature ahead of time by setting any of the following to false: `autobins`, `autobenches`, `autoexamples`, `autotests`. - Cargo will now cache compiler information. This can be disabled by setting `CARGO_CACHE_RUSTC_INFO=0` in your environment. + Compatibility Notes - Calling a `CharExt` or `StrExt` method directly on core will no longer work. e.g. `::core::prelude::v1::StrExt::is_empty("")` will not compile, `"".is_empty()` will still compile. - `Debug` output on `atomic::{AtomicBool, AtomicIsize, AtomicPtr, AtomicUsize}` will only print the inner type. E.g. `print!("{:?}", AtomicBool::new(true))` will print `true`, not `AtomicBool(true)`. - The maximum number for `repr(align(N))` is now 2²⁹. Previously you could enter higher numbers but they were not supported by LLVM. Up to 512MB alignment should cover all use cases. - The `.description()` method on the `std::error::Error` trait has been soft-deprecated. It is no longer required to implement it. + Misc - Added “The Rustc book” into the official documentation.- Add CVE-2018-1000622-prevent-rustdoc-loads-uncontrolled-plugins-path.patch: + This patch consists of requiring `--plugin-path` to be passed whenever `--plugin` is passed + rustdoc plugins will be removed entirely on 1.28.0, we should drop this patch after 1.28.0(bsc#1100691, CVE-2018-1000622).- Ship rust-std on SLE-15 (bsc#1096945) No new changes came with this update of rust.- Update to version 1.26.2: + Compatibility Notes - The borrow checker was fixed to avoid unsoundness when using match ergonomics - Update to version 1.26.1: + Tools - RLS now works on Windows - Rustfmt stopped badly formatting text in some cases + Compatibility Notes - `fn main() -> impl Trait` no longer works for non-Termination trait This reverts an accidental stabilization - `NaN > NaN` no longer returns true in const-fn contexts - Prohibit using turbofish for `impl Trait` in method arguments- Update to version 1.26.0: + Language: - Closures now implement `Copy` and/or `Clone` if all captured variables implement either or both traits. - The inclusive range syntax is now stable. - Stablise `'_`. The underscore lifetime can be used anywhere where a lifetime can be elided. - `impl Trait` is now stable allowing you to have abstract types in returns or in function parameters. - Pattern matching will now automatically apply dereferences. - 128-bit integers in the form of `u128` and `i128` are now stable. - `main` can now return `Result<(), E: Debug>` in addition to `()`. - A lot of operations are now available in a const context. - Fixed entry slice patterns are now stable. e.g. + Compiler: - LLD is now used as the default linker for `wasm32-unknown-\ unknown`. - Fixed exponential projection complexity on nested types. This can provide up to a ~12% reduction in compile times for certain crates. - Added the `--remap-path-prefix` option to rustc. Allowing you to remap path prefixes outputted by the compiler. + Libraries: - Implemented `From for usize & From<{u8, i16}> for isize`. - Added hexadecimal formatting for integers with fmt::Debug. - Implemented `Default, Hash` for `cmp::Reverse`. - Optimized `str::repeat` being 8x faster in large cases. - `ascii::escape_default` is now available in libcore. - Trailing commas are now supported in std and core macros. - Implemented `Copy, Clone` for `cmp::Reverse`. - Implemented `Clone` for `char::{ToLowercase, ToUppercase}`. + Stabilized APIs: *const T::add, * const T::copy_to_nonoverlapping, *const T::copy_to, * const T::read_unaligned, *const T::read_volatile, * const T::read, *const T::sub, *const T::wrapping_add, * const T::wrapping_sub, *mut T::add, *mut T::copy_to, * mut T::copy_to_nonoverlapping, *mut T::read_unaligned, * mut T::read_volatile, *mut T::read, mut T::replace, * mut T::sub, *mut T::swap, *mut T::wrapping_add, * mut T::wrapping_sub, *mut T::write_bytes, * mut T::write_unaligned, *mut T::write_volatile, * mut T::write, Box::leak, FromUtf8Error::as_bytes, LocalKey::try_with, Option::cloned, iter::FusedIterator, btree_map::Entry::and_modify, s::read_to_string, fs::read, fs::write, hash_map::Entry::and_modify, String::retain, ops::RangeInclusive, ops::RangeToInclusive, process::id, slice::rotate_left, slice::rotate_right. + Compatibility Notes: - Aliasing a `Fn` trait as `dyn` no longer works. - The result of dereferences are no longer promoted to `'static`. - Deprecate `AsciiExt` trait in favor of inherent methods. - `".e0"` will now no longer parse as `0.0` and will instead cause an error. - Removed hoedown from rustdoc. - Bounds on higher-kinded lifetimes a hard error. - Update cargo_version to 0.26.0.- Patch disabled * update-config-guess.patch - Update to 1.25.0 - Language changes: + Stabilised `#[repr(align(x))]`.[47006] [RFC 1358] + You can now use nested groups of imports.[47948] e.g. `use std::{fs::File, io::Read, path::{Path, PathBuf}};` + You can now have `|` at the start of a match arm.[47947] e.g. - Compiler changes: + Upgraded to LLVM 6.[47828] + Added `-C lto=val` option.[47521] + Added `i586-unknown-linux-musl` target[47282] - Library changes: + Impl Send for `process::Command` on Unix.[47760] + Impl PartialEq and Eq for `ParseCharError`.[47790] + `UnsafeCell::into_inner` is now safe.[47204] + Implement libstd for CloudABI.[47268] + `Float::{from_bits, to_bits}` is now available in libcore.[46931] + Implement `AsRef` for Component[46985] + Implemented `Write` for `Cursor<&mut Vec>`[46830] + Moved `Duration` to libcore.[46666] - Stabilized APIs + `Location::column` + `ptr::NonNull` - Misc + Rust by example is now shipped with new releases[46196] - Compatibility Notes: + Deprecated `net::lookup_host`.[47510] + `rustdoc` has switched to pulldown as the default markdown renderer.[47398] + The borrow checker was sometimes incorrectly permitting overlapping borrows around indexing operations (see [#47349][47349]). This has been fixed (which also enabled some correct code that used to cause errors (e.g. [#33903][33903] and [#46095][46095]). + Removed deprecated unstable attribute `#[simd]`.[47251]- Update to 1.24.1 + Do not abort when unwinding through FFI + Make the error index generator work again - Update Cargo to v0.25.0- Update to 1.24.0 - Language changes: + External `sysv64` ffi is now available. eg. `extern "sysv64" fn foo () {}` - Compiler changes: + rustc now uses 16 codegen units by default for release builds. For the fastest builds, utilize `codegen-units=1`. - Libraries: + `str::find::` now uses memchr. This should lead to a 10x improvement in performance in the majority of cases. + `time::{SystemTime, Instant}` now implement `Hash`. + impl `From` for `AtomicBool` + impl `From<{CString, &CStr}>` for `{Arc, Rc}` + impl `From<{OsString, &OsStr}>` for `{Arc, Rc}` + impl `From<{PathBuf, &Path}>` for `{Arc, Rc}` + float::from_bits now just uses transmute. This provides some optimisations from LLVM. + Copied `AsciiExt` methods onto `char` + Remove `T: Sized` requirement on `ptr::is_null()` + impl `From` for `{TryRecvError, RecvTimeoutError}` + Optimised `f32::{min, max}` to generate more efficient x86 assembly + `[u8]::contains` now uses memchr which provides a 3x speed improvement - Compatibility Notes: + Floating point types `Debug` impl now always prints a decimal point. + `Ipv6Addr` now rejects superfluous `::`'s in IPv6 addresses This is in accordance with IETF RFC 4291 §2.2. + Unwinding will no longer go past FFI boundaries, and will instead abort. + `Formatter::flags` method is now deprecated. The `sign_plus`, `sign_minus`, `alternate`, and `sign_aware_zero_pad` should be used instead. + Leading zeros in tuple struct members is now an error + `column!()` macro is one-based instead of zero-based + `fmt::Arguments` can no longer be shared across threads + Access to `#[repr(packed)]` struct fields is now unsafe + Cargo sets a different working directory for the compiler- add update-config-guess.patch to update config.* from GNU to support riscv64 without rpm patching it - as the patch also updates the checksums while rpm does not- Format with spec-cleaner - Use python3 to run the install/build script as python2 is being phased out - State exclusivearch for all of ix86 and then specify we build as i686 which is bit more obvious- Update Cargo to v0.24.0- Add "Requires: %{name} to derived packages to fix derived packages not being updated with rust (boo#1075883)- Update to 1.23.0 - Language changes: + Arbitrary `auto` traits are now permitted in trait objects.[45772] + rustc now uses subtyping on the left hand side of binary operations.[45435] Which should fix some confusing errors in some operations. - Compiler changes: + Enabled `TrapUnreachable` in LLVM which should mitigate the impact of undefined behaviour.[45920] + rustc now suggests renaming import if names clash.[45660] + Display errors/warnings correctly when there are zero-width or wide characters.[45711] + rustc now avoids unnecessary copies of arguments that are simple bindings[45380] This should improve memory usage on average by 5-10%. + Updated musl used to build musl rustc to 1.1.17[45393] - Library changes: + Allow a trailing comma in `assert_eq/ne` macro[45887] + Implement Hash for raw pointers to unsized types[45483] + impl `From<*mut T>` for `AtomicPtr`[45610] + impl `From` for `AtomicUsize/AtomicIsize`.[45610] + Removed the `T: Sync` requirement for `RwLock: Send`[45267] + Removed `T: Sized` requirement for `{<*const T>, <*mut T>}::as_ref` an `<*mut T>::as_mut`[44932] + Optimized `Thread::{park, unpark}` implementation[45524] + Improved `SliceExt::binary_search` performance.[45333] + impl `FromIterator<()>` for `()`[45379] + Copied `AsciiExt` trait methods to primitive types.[44042] Use of `AsciiExt` is now deprecated. - Misc changes: + Releases now ship with the Cargo book documentation.[45692] + rustdoc now prints rendering warnings on every run.[45324] + Release tarballs now come with rustfmt[45903] - Compatibility Notes: + Changes have been made to type equality to make it more correct, in rare cases this could break some code.[45853] [Tracking issue for further information[45852] + `char::escape_debug` now uses Unicode 10 over 9.[45571] + Upgraded Android SDK to 27, and NDK to r15c.[45580] This drops support for Android 9, the minimum supported version is Android 14. + Bumped the minimum LLVM to 3.9[45326]- Update to v1.22.1 - Update Cargo to fix an issue with macOS 10.13 "High Sierra"- Update to v1.22.0 - Language changes: + `non_snake_case` lint now allows extern no-mangle functions + Now accepts underscores in unicode escapes + `T op= &T` now works for numeric types. eg. `let mut x = 2; x += &8;` + types that impl `Drop` are now allowed in `const` and `static` types - Compiler changes: + rustc now defaults to having 16 codegen units at debug on supported platforms + rustc will no longer inline in codegen units when compiling for debug This should decrease compile times for debug builds. + strict memory alignment now enabled on ARMv6 + Remove support for the PNaCl target `le32-unknown-nacl` - Librarie changes + Allow atomic operations up to 32 bits on `armv5te_unknown_linux_gnueabi` + `Box` now impls `From>` + `std::mem::Discriminant` is now guaranteed to be `Send + Sync` + `fs::copy` now returns the length of the main stream on NTFS. + Properly detect overflow in `Instant += Duration`. + impl `Hasher` for `{&mut Hasher, Box}` + impl `fmt::Debug` for `SplitWhitespace`.][44303] + `Option` now impls `Try`. This allows for using `?` with `Option` types. - Misc + `libbacktrace` is now available on Apple platforms. + Stabilised the `compile_fail` attribute for code fences in doc-comments. This now lets you specify that a given code example will fail to compile. - Compatibility Notes + The minimum Android version that rustc can build for has been bumped to `4.0` from `2.3` + Allowing `T op= &T` for numeric types has broken some type inference cases - Remove rust-1.21.0-44203-exclude-compiler-rt-test.patch - Remove rust-1.21.0-44066-ppc64-struct-abi.patch - Remove rust-1.21.0-44440-s390x-global-align.patch- Large cleanup of both the spec and config.toml to correct many build issues for the new version- Add rust-1.21.0-44203-exclude-compiler-rt-test.patch - Add rust-1.21.0-44066-ppc64-struct-abi.patch - Add rust-1.21.0-44440-s390x-global-align.patch - Remove add-soname.patch- Update to 1.21.0 - Language changes: + You can now use static references for literals. + Relaxed path syntax. Optional `::` before `<` is now allowed in all contexts. - Compiler changes: + Upgraded jemalloc to 4.5.0[43911] + Enabled unwinding panics on Redox[43917] + Now runs LLVM in parallel during translation phase.[43506] - Librarie changes: + Generate builtin impls for `Clone` for all arrays and tuples that are `T: Clone`[43690] +`Stdin`, `Stdout`, and `Stderr` now implement `AsRawFd`.[43459] + `Rc` and `Arc` now implement `From<&[T]> where T: Clone`, `From`, `From`, `From> where T: ?Sized`, and `From>`.[42565] - Stabilized APIs +`std::mem::discriminant` - Update add-soname.patch to apply cleanly- Force enable rust bootstrap so that missing architectures build- set minimum cmake version- Update to version 1.20.0 - Remove x86 from build targets - Language + [Associated constants are now stabilised.][42809] + [A lot of macro bugs are now fixed.][42913] - Compiler + [Struct fields are now properly coerced to the expected field type.][42807] + [Enabled wasm LLVM backend][42571] WASM can now be built with the `wasm32-experimental-emscripten` target. + [Changed some of the error messages to be more helpful.][42033] + [Add support for RELRO(RELocation Read-Only) for platforms that support it.][43170] + [rustc now reports the total number of errors on compilation failure][43015] previously this was only the number of errors in the pass that failed. + [Expansion in rustc has been sped up 29x.][42533] + [added `msp430-none-elf` target.][43099] + [rustc will now suggest one-argument enum variant to fix type mismatch when applicable][43178] + [Fixes backtraces on Redox][43228] + [rustc now identifies different versions of same crate when absolute paths of different types match in an error message.][42826] - Libraries + [Relaxed Debug constraints on `{HashMap,BTreeMap}::{Keys,Values}`.][42854] + [Impl `PartialEq`, `Eq`, `PartialOrd`, `Ord`, `Debug`, `Hash` for unsized tuples.][43011] + [Impl `fmt::{Display, Debug}` for `Ref`, `RefMut`, `MutexGuard`, `RwLockReadGuard`, `RwLockWriteGuard`][42822] + [Impl `Clone` for `DefaultHasher`.][42799] + [Impl `Sync` for `SyncSender`.][42397] + [Impl `FromStr` for `char`][42271] + [Fixed how `{f32, f64}::{is_sign_negative, is_sign_positive}` handles NaN.][42431] + [allow messages in the `unimplemented!()` macro.][42155] ie. `unimplemented!("Waiting for 1.21 to be stable")` + [`pub(restricted)` is now supported in the `thread_local!` macro.][43185] + [Upgrade to Unicode 10.0.0][42999] + [Reimplemented `{f32, f64}::{min, max}` in Rust instead of using CMath.][42430] + [Skip the main thread's manual stack guard on Linux][43072] + [Iterator::nth for `ops::{Range, RangeFrom}` is now done in O(1) time][43077] + [`#[repr(align(N))]` attribute max number is now 2^31 + 1.][43097] This was previously 2^15. + [`{OsStr, Path}::Display` now avoids allocations where possible][42613] - Compatibility Notes + [Functions with `'static` in their return types will now not be as usable as if they were using lifetime parameters instead.][42417] + [The reimplementation of `{f32, f64}::is_sign_{negative, positive}` now takes the sign of NaN into account where previously didn't.][42430]- adjust build process and add package for Rust source - clean-up of useless provides - add rpmlintrc- Update to version 1.19 - Language updates: + [Numeric fields can now be used for creating tuple structs.][41145] [RFC 1506] For example `struct Point(u32, u32); let x = Point { 0: 7, 1: 0 };`. + [Macro recursion limit increased to 1024 from 64.][41676] + [Added lint for detecting unused macros.][41907] + [`loop` can now return a value with `break`.][42016] [RFC 1624] For example: `let x = loop { break 7; };` + [C compatible `union`s are now available.][42068] [RFC 1444] They can only contain `Copy` types and cannot have a `Drop` implementation. Example: `union Foo { bar: u8, baz: usize }` + [Non capturing closures can now be coerced into `fn`s,][42162] [RFC 1558] Example: `let foo: fn(u8) -> u8 = |v: u8| { v };` - Compiler updates: + [Add support for bootstrapping the Rust compiler toolchain on Android.][41370] + [Change `arm-linux-androideabi` to correspond to the `armeabi` official ABI.][41656] If you wish to continue targeting the `armeabi-v7a` ABI you should use `--target armv7-linux-androideabi`. + [Fixed ICE when removing a source file between compilation sessions.][41873] + [Minor optimisation of string operations.][42037] + [Compiler error message is now `aborting due to previous error(s)` instead of `aborting due to N previous errors`][42150] This was previously inaccurate and would only count certain kinds of errors. + [The compiler now supports Visual Studio 2017][42225] + [The compiler is now built against LLVM 4.0.1 by default][42948] + [Added a lot][42264] of [new error codes][42302] + [Added `target-feature=+crt-static` option][37406] [RFC 1721] Which allows libraries with C Run-time Libraries(CRT) to be statically linked. + [Fixed various ARM codegen bugs][42740] - Librarie updates: + [`String` now implements `FromIterator>` and `Extend>`][41449] + [`Vec` now implements `From<&mut [T]>`][41530] + [`Box<[u8]>` now implements `From>`][41258] + [`SplitWhitespace` now implements `Clone`][41659] + [`[u8]::reverse` is now 5x faster and `[u16]::reverse` is now 1.5x faster][41764] + [`eprint!` and `eprintln!` macros added to prelude.][41192] Same as the `print!` macros, but for printing to stderr. - Stabilized APIs + [`OsString::shrink_to_fit`] + [`cmp::Reverse`] + [`Command::envs`] + [`thread::ThreadId`] - Misc + [Added `rust-windbg.cmd`][39983] for loading rust `.natvis` files in the Windows Debugger. + [Rust will now release XZ compressed packages][rust-installer/57] + [rustup will now prefer to download rust packages with XZ compression][rustup/1100] over GZip packages. + [Added the ability to escape `#` in rust documentation][41785] By adding additional `#`'s ie. `##` is now `#` - Temporarily disable generation of compiler docs due to build issue- Change i586 build to produce i686 target instead of i586 so that x86 Firefox can be built with Rust.- Update to 1.18.0 -Language updates: + [Stabilize pub(restricted)][40556] `pub` can now accept amodule path to make the item visible to just that module tree. Also accepts the keyword `crate` to make something public to the whole crate but not users of the library. Example: `pub(crate) mod utils;`. [RFC 1422]. + [Stabilize `#![windows_subsystem]` attribute][40870] conservative exposure of the `/SUBSYSTEM` linker flag on Windows platforms. [RFC 1665]. + [Refactor of trait object type parsing][40043] Now `ty` in macros can accept types like `Write + Send`, trailing `+` are now supported in trait objects, and better error reporting for trait objects starting with `?Sized`. + [0e+10 is now a valid floating point literal][40589] + [Now warns if you bind a lifetime parameter to 'static][40734] + [Tuples, Enum variant fields, and structs with no `repr` attribute or with `#[repr(Rust)]` are reordered to minimize padding and produce a smaller representation in some cases.][40377] -Compiler updates + [rustc can now emit mir with `--emit mir`][39891] + [Improved LLVM IR for trivial functions][40367] + [Added explanation for E0090(Wrong number of lifetimes are supplied)][40723] + [rustc compilation is now 15%-20% faster][41469] Thanks to optimisation opportunities found through profiling + [Improved backtrace formatting when panicking][38165] - Library updates: + [Specialized `Vec::from_iter` being passed `vec::IntoIter`][40731] if the iterator hasn't been advanced the original `Vec` is reassembled with no actual iteration or reallocation. + [Simplified HashMap Bucket interface][40561] provides performance improvements for iterating and cloning. + [Specialize Vec::from_elem to use calloc][40409] + [Fixed Race condition in fs::create_dir_all][39799] + [No longer caching stdio on Windows][40516] + [Optimized insertion sort in slice][40807] insertion sort in some cases 2.50%~ faster and in one case now 12.50% faster. + [Optimized `AtomicBool::fetch_nand`][41143] - Stabilized APIs: + [`Child::try_wait`] + [`HashMap::retain`] + [`HashSet::retain`] + [`PeekMut::pop`] + [`TcpStream::peek`] + [`UdpSocket::peek`] - Misc: + [rustdoc can now use pulldown-cmark with the `--enable-commonmark` flag][40338] + [Added rust-winbg script for better debugging on Windows][39983] + [Rust now uses the official cross compiler for NetBSD][40612] + [rustdoc now accepts `#` at the start of files][40828] + [Fixed jemalloc support for musl][41168] - Compatibility Notes: + [Changes to how the `0` flag works in format!][40241] Padding zeroes are now always placed after the sign if it exists and before the digits. With the `#` flag the zeroes are placed after the prefix and before the digits. + [Due to the struct field optimisation][40377], using `transmute` on structs that have no `repr` attribute or `#[repr(Rust)]` will no longer work. This has always been undefined behavior, but is now more likely to break in practice. + [The refactor of trait object type parsing][40043] fixed a bug where `+` was receiving the wrong priority parsing things like `&for<'a> Tr<'a> + Send` as `&(for<'a> Tr<'a> + Send)` instead of `(&for<'a> Tr<'a>) + Send` + [Overlapping inherent `impl`s are now a hard error][40728] + [`PartialOrd` and `Ord` must agree on the ordering.][41270] + [`rustc main.rs -o out --emit=asm,llvm-ir`][41085] Now will output `out.asm` and `out.ll` instead of only one of the filetypes. + [ calling a function that returns `Self` will no longer work][41805] when the size of `Self` cannot be statically determined. + [rustc now builds with a "pthreads" flavour of MinGW for Windows GNU][40805] this has caused a few regressions namely: + Changed the link order of local static/dynamic libraries (respecting the order on given rather than having the compiler reorder). + Changed how MinGW is linked, native code linked to dynamic libraries may require manually linking to the gcc support library (for the native code itself)- Adjustment of rust version dependency to prevent inability to build in the adi rings.- Add the cargo binaries for each arch, used for building rust only these are not shipped, and don't factor in to the final product.- Revert restriction of x86 arch to i586 for the interim.- Update to 1.17.0 - Language updates * [The compiler's `dead_code` lint now accounts for type aliases][38051]. * [Uninhabitable enums (those without any variants) no longer permit wildcard match patterns][38069] * [Clean up semantics of `self` in an import list][38313] * [`Self` may appear in `impl` headers][38920] * [`Self` may appear in struct expressions][39282] - Compiler updates * [`rustc` now supports `--emit=metadata`, which causes rustc to emit a `.rmeta` file containing only crate metadata][38571]. This can be used by tools like the Rust Language Service to perform metadata-only builds. * [Levenshtein based typo suggestions now work in most places, while previously they worked only for fields and sometimes for local variables][38927]. Together with the overhaul of "no resolution"/"unexpected resolution" errors (#[38154]) they result in large and systematic improvement in resolution diagnostics. * [Fix `transmute::` where `T` requires a bigger alignment than `U`][38670] * [rustc: use -Xlinker when specifying an rpath with ',' in it][38798] * [`rustc` no longer attempts to provide "consider using an explicit lifetime" suggestions][37057]. They were inaccurate. - Stabilized APIs * [`VecDeque::truncate`] * [`VecDeque::resize`] * [`String::insert_str`] * [`Duration::checked_add`] * [`Duration::checked_sub`] * [`Duration::checked_div`] * [`Duration::checked_mul`] * [`str::replacen`] * [`str::repeat`] * [`SocketAddr::is_ipv4`] * [`SocketAddr::is_ipv6`] * [`IpAddr::is_ipv4`] * [`IpAddr::is_ipv6`] * [`Vec::dedup_by`] * [`Vec::dedup_by_key`] * [`Result::unwrap_or_default`] * [`<*const T>::wrapping_offset`] * [`<*mut T>::wrapping_offset`] * `CommandExt::creation_flags` * [`File::set_permissions`] * [`String::split_off`] - Updates to libraries * [`[T]::binary_search` and `[T]::binary_search_by_key` now take their argument by `Borrow` parameter][37761] * [All public types in std implement `Debug`][38006] * [`IpAddr` implements `From` and `From`][38327] * [`Ipv6Addr` implements `From<[u16; 8]>`][38131] * [Ctrl-Z returns from `Stdin.read()` when reading from the console on Windows][38274] * [std: Fix partial writes in `LineWriter`][38062] * [std: Clamp max read/write sizes on Unix][38062] * [Use more specific panic message for `&str` slicing errors][38066] * [`TcpListener::set_only_v6` is deprecated][38304]. This functionality cannot be achieved in std currently. * [`writeln!`, like `println!`, now accepts a form with no string or formatting arguments, to just print a newline][38469] * [Implement `iter::Sum` and `iter::Product` for `Result`][38580] * [Reduce the size of static data in `std_unicode::tables`][38781] * [`char::EscapeDebug`, `EscapeDefault`, `EscapeUnicode`, `CaseMappingIter`, `ToLowercase`, `ToUppercase`, implement `Display`][38909] * [`Duration` implements `Sum`][38712] * [`String` implements `ToSocketAddrs`][39048] - Misc * [`rustdoc` has a `--sysroot` argument that, like `rustc`, specifies the path to the Rust implementation][38589] * [The `armv7-linux-androideabi` target no longer enables NEON extensions, per Google's ABI guide][38413] * [The stock standard library can be compiled for Redox OS][38401] * [Rust has initial SPARC support][38726]. Tier 3. No builds available. * [Rust has experimental support for Nvidia PTX][38559]. Tier 3. No builds available. * [Fix backtraces on i686-pc-windows-gnu by disabling FPO][39379] - Compatibility Notes * [Uninhabitable enums (those without any variants) no longer permit wildcard match patterns][38069] * In this release, references to uninhabited types can not be pattern-matched. This was accidentally allowed in 1.15. * [The compiler's `dead_code` lint now accounts for type aliases][38051]. * [Ctrl-Z returns from `Stdin.read()` when reading from the console on Windows][38274] * [Clean up semantics of `self` in an import list][38313] - Restrict x86 builds to i686 only. - Revert restriction on previous rust versions used for building- Change x86 build target from i586 to i686- Switch .spec to use rust-build compilation system - Update config.toml to reflect rust-build changes - Strict versioning for compilation so rustc always use previous stable compiler- Update to 1.16.0 - Language updates * Lifetimes in statics and consts default to `'static`. [RFC 1623] * [The compiler's `dead_code` lint now accounts for type aliases][38051]. * [Uninhabitable enums (those without any variants) no longer permit wildcard match patterns][38069] * [Clean up semantics of `self` in an import list][38313] * [`Self` may appear in `impl` headers][38920] * [`Self` may appear in struct expressions][39282] - Compiler updates * [`rustc` now supports `--emit=metadata`, which causes rustc to emit a `.rmeta` file containing only crate metadata][38571]. This can be used by tools like the Rust Language Service to perform metadata-only builds. * [Levenshtein based typo suggestions now work in most places, while previously they worked only for fields and sometimes for local variables][38927]. Together with the overhaul of "no resolution"/"unexpected resolution" errors (#[38154]) they result in large and systematic improvement in resolution diagnostics. * [Fix `transmute::` where `T` requires a bigger alignment than `U`][38670] * [rustc: use -Xlinker when specifying an rpath with ',' in it][38798] * [`rustc` no longer attempts to provide "consider using an explicit lifetime" suggestions][37057]. They were inaccurate. - Stabilized APIs * [`VecDeque::truncate`] * [`VecDeque::resize`] * [`String::insert_str`] * [`Duration::checked_add`] * [`Duration::checked_sub`] * [`Duration::checked_div`] * [`Duration::checked_mul`] * [`str::replacen`] * [`str::repeat`] * [`SocketAddr::is_ipv4`] * [`SocketAddr::is_ipv6`] * [`IpAddr::is_ipv4`] * [`IpAddr::is_ipv6`] * [`Vec::dedup_by`] * [`Vec::dedup_by_key`] * [`Result::unwrap_or_default`] * [`<*const T>::wrapping_offset`] * [`<*mut T>::wrapping_offset`] * `CommandExt::creation_flags` * [`File::set_permissions`] * [`String::split_off`] - Library updates * [`[T]::binary_search` and `[T]::binary_search_by_key` now take their argument by `Borrow` parameter][37761] * [All public types in std implement `Debug`][38006] * [`IpAddr` implements `From` and `From`][38327] * [`Ipv6Addr` implements `From<[u16; 8]>`][38131] * [Ctrl-Z returns from `Stdin.read()` when reading from the console on Windows][38274] * [std: Fix partial writes in `LineWriter`][38062] * [std: Clamp max read/write sizes on Unix][38062] * [Use more specific panic message for `&str` slicing errors][38066] * [`TcpListener::set_only_v6` is deprecated][38304]. This functionality cannot be achieved in std currently. * [`writeln!`, like `println!`, now accepts a form with no string or formatting arguments, to just print a newline][38469] * [Implement `iter::Sum` and `iter::Product` for `Result`][38580] * [Reduce the size of static data in `std_unicode::tables`][38781] * [`char::EscapeDebug`, `EscapeDefault`, `EscapeUnicode`, `CaseMappingIter`, `ToLowercase`, `ToUppercase`, implement `Display`][38909] * [`Duration` implements `Sum`][38712] * [`String` implements `ToSocketAddrs`][39048] - Misc fixes * [`rustdoc` has a `--sysroot` argument that, like `rustc`, specifies the path to the Rust implementation][38589] * [The `armv7-linux-androideabi` target no longer enables NEON extensions, per Google's ABI guide][38413] * [The stock standard library can be compiled for Redox OS][38401] * [Rust has initial SPARC support][38726]. Tier 3. No builds available. * [Rust has experimental support for Nvidia PTX][38559]. Tier 3. No builds available. * [Fix backtraces on i686-pc-windows-gnu by disabling FPO][39379] - Compatibility notes * [Uninhabitable enums (those without any variants) no longer permit wildcard match patterns][38069] * In this release, references to uninhabited types can not be pattern-matched. This was accidentally allowed in 1.15. * [The compiler's `dead_code` lint now accounts for type aliases][38051]. * [Ctrl-Z returns from `Stdin.read()` when reading from the console on Windows][38274] * [Clean up semantics of `self` in an import list][38313]- Remove duplicate license files from _docdir: rpm 4.13 no longer implicitly packages those files and we catch them using %license,- remove bootstrap for s390x as binaries are available in openSUSE:Factory:zSystems- Fixes to build for archs armv7, aarch64, ppc64, s390x- Update to 1.15.1 - Fix IntoIter::as_mut_slice's signature- Correct rust-triples use in spec.- Update to 1.15.0 - Language updates * Basic procedural macros allowing custom `#[derive]`, aka "macros 1.1", are stable. This allows popular code-generating crates like Serde and Diesel to work ergonomically. [RFC 1681]. * [Tuple structs may be empty. Unary and empty tuple structs may be instantiated with curly braces][36868]. Part of [RFC 1506]. * [A number of minor changes to name resolution have been activated][37127]. They add up to more consistent semantics, allowing for future evolution of Rust macros. Specified in [RFC 1560], see its section on ["changes"] for details of what is different. The breaking changes here have been transitioned through the [`legacy_imports`] lint since 1.14, with no known regressions. * [In `macro_rules`, `path` fragments can now be parsed as type parameter bounds][38279] * [`?Sized` can be used in `where` clauses][37791] * [There is now a limit on the size of monomorphized types and it can be modified with the `#![type_size_limit]` crate attribute, similarly to the `#![recursion_limit]` attribute][37789] - Compiler changes * [On Windows, the compiler will apply dllimport attributes when linking to extern functions][37973]. Additional attributes and flags can control which library kind is linked and its name. [RFC 1717]. * [Rust-ABI symbols are no longer exported from cdylibs][38117] * [The `--test` flag works with procedural macro crates][38107] * [Fix `extern "aapcs" fn` ABI][37814] * [The `-C no-stack-check` flag is deprecated][37636]. It does nothing. * [The `format!` expander recognizes incorrect `printf` and shell-style formatting directives and suggests the correct format][37613]. * [Only report one error for all unused imports in an import list][37456] - Compiler performance * [Avoid unnecessary `mk_ty` calls in `Ty::super_fold_with`][37705] * [Avoid more unnecessary `mk_ty` calls in `Ty::super_fold_with`][37979] * [Don't clone in `UnificationTable::probe`][37848] * [Remove `scope_auxiliary` to cut RSS by 10%][37764] * [Use small vectors in type walker][37760] * [Macro expansion performance was improved][37701] * [Change `HirVec>` to `HirVec` in `hir::Expr`][37642] * [Replace FNV with a faster hash function][37229] - For full change list, please see https://raw.githubusercontent.com/rust-lang/rust/master/RELEASES.md- Adjust build so that aarch and ARM architectures use bootstrap for initial build- Fix provides/conflicts/obsoletes- Remove patch 0001-Fix-armv7-autodetection.patch + appears to have been fixed upstream. - Building armv7hl arch with bootstrap binary since previously packaged versions haven't successfully built in the past- Update to version 1.14.0 + Announcement: https://blog.rust-lang.org/2016/12/22/Rust-1.14.html + Details: https://github.com/rust-lang/rust/blob/master/RELEASES.md#version-1140-2016-12-22 - Release highlights: + support for RFC 1492. This small addition lets you use `..` in more places, for example when destructuring a struct or tuple + println!(), with no arguments, prints newline + Wrapping impls standard binary and unary operators on references, as well as the Sum and Product iterators, making references to these types easier to use + Implement From> for String and From> for Vec. These implementations make sense, but were not yet added. + Expand .zip() specialization to .map() and .cloned() for improved performance. + Implement RefUnwindSafe for atomic types, as these types are “unwind safe,” though that wasn’t obvious at first. + Specialize Vec::extend to Vec::extend_from_slice for performance gains. + Don’t reuse HashMap random seeds. This helps to mitigate one type of DDoS attack. + The internal memory layout of HashMap is more cache-friendly, for significant improvements in some operations + Impl Add<{str, Cow}> for Cow. We already support Add for other string types, so not having it on Cow is inconsistent.- Update to 1.13.0- Add conflicts to help avoid situations where previous versions or rustc-bootstrap may be installed- Update to 1.12.1 - Remove patches: + 0003-Disable-embedding-timestamp-information.patch - fixed by upstream + 0002-Add-armv6l-autodetection.patch - no-longer viable- Revert from v1.13 to v1.11 in preparation for alternative packaging.- Add 0001-Fix-armv7-autodetection.patch - Add 0002-Add-armv6l-autodetection.patch * fix armv6 and armv7 builds- Update to 1.11 + Add support for cdylib crate types - Remove merged patches: * 0001-Fix-misleading-intentation-errors-on-gcc-6.0.patch * 0002-Fix-GCC-6-misleading-indentation-error-in-hoedown.patch - Set DT_SONAME when building dylibs * Add add-soname.patch- Move to package named rust- Update to 1.10 + -C panic=abort flag for rustc or equivalent in Cargo.toml + new crate type cdylib, embeded library for other languages + In addition, a number of performance improvements landed in the compiler, and so did a number of usability improvements across the documentation, rustdoc itself, and various error messages. + This is the first release, which is guaranteed to be built by previous stable release of rustc - Packaging: + drop bootstrap mode and use rustc 1.9 + move documentation to versioned directory- Use smp_mflags for parallel building. Avoid sh invocation for simple ldconfig calls. Drop archaic %clean section. Drop filler words from summary.- Rename source package to rustc-1_9 to conform to naming standards.- Rename source package to rustc-190 to avoid unecessary rebuilds of rustc packages on upgrade- Move stage0 binaries into separate package - Disable embedding timestamp information - Add 0003-Disable-embedding-timestamp-information.patch- Rename package to rustc-stable - Add rpmlintrc - Make bootstrapping conditional- Fix misleading indentation errors on GCC 6.0 - Remove snap2.sh - Add 0001-Fix-misleading-intentation-errors-on-gcc-6.0.patch - Add 0002-Fix-GCC-6-misleading-indentation-error-in-hoedown.patch- Update to version 1.9.0 + Stabilization of std::panic + Deprecation warnings, #[deprecated] attribute + Compile time improvements + Rolling out use of specialization + Library stabilizations About 80 library functions and methods are now stable in 1. + http://blog.rust-lang.org/2016/05/26/Rust-1.9.html- Update to version 1.8.0: + Various “operator equals” operators, such as += and -=, are now overloadable via various traits. + Empty struct declaration can contain cutly braces + New (non default) cargo based build system for rustc + About 20 library functions and methods are now stable in 1.8- Update to version 1.7.0: + Many stabilized APIs + Improved library performance + BTreeSet and its iterators, Iter, IntoIter, and Range are covariant over their contained type. + LinkedList and its iterators, Iter and IntoIter are covariant over their contained type. + str::replace now accepts a Pattern, like other string searching methods. + Any is implemented for unsized types. + Hash is implemented for Duration. + Soundness fixes, may break code. See RFC 1214 for more information. + Several bugs in the compiler's visibility calculations were fixed. + Parsing "." as a float results in an error instead of 0. + Borrows of closure parameters may not outlive the closure.- Update to version 1.6.0: + Stabilization of libcore and other library functions + Crates.io disallows wildcards- Update to version 1.4.0: + Several changes have been made to fix type soundness and improve the behavior of associated types. See RFC 1214. Although we have mostly introduced these changes as warnings this release, to become errors next release, there are still some scenarios that will see immediate breakage. + The str::lines and BufRead::lines iterators treat \r\n as line breaks in addition to \n. + Loans of 'static lifetime extend to the end of a function. + str::parse no longer introduces avoidable rounding error when parsing floating point numbers. Together with earlier changes to float formatting/output, "round trips" like f.to_string().parse() now preserve the value of f exactly. Additionally, leading plus signs are now accepted.- Split the gdb support to rust-gdb subpackage- Update to version 1.3.0: + API stabilization, including the new Duration API and enhancements to Error and Hash/Hasher. + The substring matcher now uses a more efficient algorithm. + There were improvements to zero filling that speed up Vec::resize and Read::read_to_end. + The implementation of Read::read_to_end has been specialized for stdin and File, resulting in additional speedups. + The PartialEq implementation on slices is now much faster. - Packaging: renamed source package to rustc to match upstream- Update to version 1.2.0: + An across-the-board improvement to real-world compiler performance. Representative crates include hyper (compiles 1.16x faster), html5ever (1.62x faster), regex (1.32x faster) and rust-encoding (1.35x faster). You can explore some of this performance data at Nick Cameron’s preliminary tracking site, using dates 2015-05-15 to 2015-06-25. + Parallel codegen is now working, and produces a 33% speedup when bootstrapping on a 4 core machine. Parallel codegen is particularly useful for debug builds, since it prevents some optimizations; but it can also be used with optimizations as an effective -O1 flag. It can be activated by passing -C codegen-units=N to rustc, where N is the desired number of threads.- Update to version 1.1.0: + The std::fs module has been expanded to expand the set of functionality exposed: * DirEntry now supports optimizations like file_type and metadata which don't incur a syscall on some platforms. * A symlink_metadata function has been added. * The fs::Metadata structure now lowers to its OS counterpart, providing access to all underlying information. + The compiler now contains extended explanations of many errors. When an error with an explanation occurs the compiler suggests using the --explain flag to read the explanation. Error explanations are also available online. + Thanks to multiple improvements to type checking, as well as other work, the time to bootstrap the compiler decreased by 32%. - drop tar_scm service and use source urls- Update to version 1.0.0: + lint: deny transmuting from immutable to mutable, since it's undefined behavior + std: update select internals to not use mutable transmuting + std: Remove index notation on slice iterators + std: Destabilize io::BufStream + Make RwLock::try_write try to obtain a write lock + std: Remove addition on vectors for now + thread: right now you can't actually set those printers + Fix #24872, XSS in docs not found page. + Update AUTHORS.txt and RELEASES.md for 1.0 + std: Mark `mem::forget` as a safe function + core: impl AsRef<[u8]> for str + collections: impl AsRef<[u8]> for String + collections: change bounds of SliceConcatExt implementations to use Borrow instead of AsRef + Fix invalid references due to the automated string substitution + dropck: must assume `Box` has a destructor of interest.- Rename binary package to rust - Add build for i586 - Only run fdupes on SUSE builds - Changed version format - Update to version 1.0.0~beta4+git.1430848988.f873dc5: + Introduce a `FreeRegionMap` data structure. (#22779) + Fix #20616 + std: Fix inheriting standard handles on windows + Fix #24895. + Fix zero-normalization of the pos of a `MultiByteChar`. + lint for mixing `#[repr(C)]` with an impl of `Drop`. + Bump prerelease version to .4 + Add downcasting to std::error::Error- Format spec file- Update to version 1.0.0beta3+git.1429985089.5241bf9: + Update Windows caveats + Utilize if..let for get_mut doc-comment examples + Indicate keywords are code-like in Fuse::reset_fuse doc comment + doc: improve/fix 'let' FAQ + Fix broken links in the docs + Indicate None is code-like in doc comments + Fixed typo in hash_map::Entry documentation + Remove an unused import on windows- Version 1.0.0-beta3.goat06 1643038811  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~b   g !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvxyz{|}~x      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIxLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~     1.53.0-22.1       !"#$%&'()*+,,-.....-----/-00011111111111110000--233222244555657755885559:9;;<<95554=>>>==??=====@@@@===AA===BBBBBC=DDDDDD=EE====FGGGGGGGGGGGGGGGGGGGGGGGFFFFHHHHHHHFIIIIIII===JJ==KKK=LLMMMMMMLLLLLNNNNOOLLLLPPPPPPPPPPPPPLL=QQQQQQQQQQQQQ=====RR==SSSSSS===TTTTTUTTTTTT=VVVVVVVV=WWX=YY=ZZZZ===[[[[=4\\\\\\\\\\\\]]]]\^^\\_``````````````````````____aaaaa\\\\\\\bbcccbddddeebbbbbbbbbbbbbbbbb\\f\\\\\\\\\\\\gghhiijjkkkjjjjjjllmnnnnnnnnmmmlopppqrrsstttuuuvvwxxxwvvyyyyzy{||}|||~{yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyv             !!!!!"!###!$$$$%%&&'''('))*''+&,,-----....-/////----0----1112234555567765888885999:95;;;;;;;;;;;;;;;;;;;;;;;;;;5<<<<==>><<<<<<<<nؗZYS F_4$jCx/k-'Xދ%Oe=ejhR$:WA XQpӇ˚4?4,Jv!fHCK,hH9k 2 #g/1`m8N X,La\ LbKޅS)x"R= K/%fKaQxWc@i~Ҭn $ ʚLڼx!KKB+fDlb>uodXN^x:`Mⲑ:"]f/"Ah>Ͽ!zC(f u\ +_bFrv_VcՑE|GWu}`w:/Ȧ(s@`/r_kE+8&NG[uSTI?'pf JQ!rR:Az춻T45LüQ Ip$hP$O|aL CJE6^'&ZWoeiFء1%pATf~T;C?d>ЮVCE*aqpϕr1h$wq7o\L[|ςn54a )\"NF&A\nS?'4y#nAЭ [ oE$mՒ@IT6l3tCYY CxNГQPy`M|6vOin=Ɓ;na'Gu3]ٞTc׈Wu:i[/SA%g 4 )a/W+Kr˓W }~\ؔZ]AS,R^NֽBQB*!ṕ2h1~]o;``gM^wb|udeu|bA_eɲgDγzHovx3n&D$xZ{é<9eM,=#\lelA0MϪvȆtko9] *cm\ՋyBdC&iT YG]`  ;|U3ùHMO5&dz<{^'"YVsoa+hlAH$Ub=ģ'qV.VMw MMVi"% NxN1r+44wuQ):Q%o`ODuHS`KTqj9yo KA|$O>2622&S\M3m*"нW¯3I#f-&]i?B }5|cw"*l1}qZ7!g8WTT?&wqxll:FiA`H$%AZA(+DGj u5Lm3jJVYddcb"r(EUte׈W~\˟3S.GW Ad4#NSOvSA j{S=~ d@HxToH[_/гOO0d}e;㋃V#ע0QR#u{]TRȯ塒G0.иM/qX59[R|->!tַ֕C a{oEOw +i{pk`bWdkgfl|Gjy gRkdý5&{>OX7|)Ƃɵ1)Վ0m2ڪ"e 7w^C+fv`uEAz'[( @!g>] #i\&š퀶а8BQv y>^n䒢Pqp_*o&#KuzjYzn4g;F2$إ bp R:.ö3/jɸkULZ.5k3AAׂdmyfP'ګ Z Z싉*n4.ėᇓi'7,4,[ }#n|B!>N jVل&5`Ԓ`=)Iq'$Qή7T=U* X4]1G}W͏Haׇ\&ͺkZ./:j?L<&N<.*8w&0>Ƹ.[U q>w-5-$#W\iAJcuxy:X~h=)76)ug]m+n[ng E'`;7AyZF!|]csT'{ )y&ӕ E4FâO#|f281gKdBtFֳX UJnʊ EʸF2;%)}d4b9x Bä ׁXt}J);WTxa9e j؇\RXaMvޜ3<&KDX)/w5 0 ):&t2u3UW$z_Oxy(vlXt{% :a nwsS=5L8?S%HᜯQja: OD5o`?q_s5:mFa[` [Þw n]7XPs37/HjKX\U;a(>D}OYyέP dϔzƔWwzAQ@p@0꒯@" ݣd&1s2vCZqd%FdJZbTѰSƠmՎKya#kcHFbf;`JIiѻhv]\J|,e%h2kt;"ԎSk d.әs*ud{:lmP>X~pffȒ)5g~#&9ӼJE{eN솒(W;_ٗ Ѳm&3)PmQء@ B3!?ǸugEeIj={Vw`Eٝ#Hf4bGH0d(=T1W2 g+fP4] t}Bk=a b",9I]7/Jx%4jqPh \V<=ۡ}e,Gx6s9f2h6 !iΤh7n=Z*krx-Lf\OP5+c^%\å@ElD*`yV/?VrT!^4ѫb(CFwъ̩ K|ҵQ\WO&XSCīN /BӰGA𥽕LL*Ҩ}vORр`T.>mݗ88w6-iq\ 뫭1ja )ͯ,DF4vrQn`훾oTC[Nݜ&mhTl y9v"f=-(<5Zȴ њ REÚP5N58}V|^lB*r²Ll=4?$L_kj֣q·שAOv@I]j?1|DrKρJ23F׀*^"2WFsbiIO)*)i0a<9Rxƻyv K%`㹎^艶o@g/&d` Egl9l~љ!i `ƭvT#JQK!x!"Y)ǠZuo7۸h{'˜{\bs^{yS:UvKCù {">H%f&P.G($>#.+€%ϰA_.#Ae:'u- 3bOҌ˼wI[)4,@%L?ʸɦu pc6n.MUn٪;G6*\bE;ݨkh}@,`.6w3>08yV=HZNk1nI3c*Z$X*rڿ@ҪWR>-#ra]bft˿p]l%pпkWv9ιHQ$?poAf2wpVS*R‚~4xa Pl)s(nWt0i4ɈVPp* m5s4G>%f~=*,x`rb !͋ ,KD65,:˲{f ^6Y_5` U(ۮfELYLô_Wuu xg}u衶E $@+ Γ(;c50eB8K ;D.;F)@YTù\~ӗ[qMx$Pp:M|j5qk&` ~%S@u'ǻ82537L\o.գpm!vKU| /0^8I}Sa`]yp@G &\Q|auv=ץ ]8hsݹk/>4J"Vm\5`14aXr83Hoȹtvhk[rF !颏MH ?3bk9o*k0wFiZ"J29#ɄXSP@.qH.13$xLL=dؐ*v!ھxTRK,s̬:qٶMn(,=#_ c9ha8Qڱ9aU9i[Qb3{*3&#z%CpIW5kmavHfz.c>ʼnɖMpZ7S@P~sTm suSrU#sNi*1k #1+Y$F^D-6߰`zMUڸ ' Swłӄͭ UQ"Q73*!-fi/yvI߶Si#oM?qe˃ied#iի!"%W~Ӱ|*$^; :.i/Y@хs~cVzL|ɶ@sFBv&x4J@ۖל$ Չ(wP߫)=џ6ZŶ 2-qCoВcϙVnQ[ t^4i!ϗbi]([DM0&NO'7i\&ؔ@`K'we+hWbgnL|lv!o 1Eف;#P"fVӈhK~N˂[g_$Dmu@PԽi:tY1wbedd~#TatΓV.[r3iQg]qXsxsDj%OZ{i ޖ2gJ0$N *&h~lTQ|K*"Q>.rδ`h~G@dS҉zcghZWRA? yܭ4>\™~c8`Vtxgׁ7Gݹ.o:}D+,ӎ/amofuw9ݩ}\sɎ+'L9Ay#]~X0 &d Hz_oȢGHrU.'OЎhqV(N1fOՒ{d.N T)0,!Xz38 c?-ߍPx*E-HGwT9 q;R}5Q;~5A1Z4=%EO(E8H #3֊g"pH\u*sz藈 +L"ߜ4mb)/Ҵ_lH9elXMu>Hޏ8NzP1ܰݴR ''|Cy'E>Y2JSv_|DIwe5™'`MZIccì%Dr.XzeHK(QjY4Ypivr$7OV!As-Qը.U_Ňŏ[Gc8'ƙjU)ghnYW%_8oX>KVƯv[Q}