From 0298b3c2f9557cff28e1d01a487e928fc319a10b Mon Sep 17 00:00:00 2001 From: sezero Date: Wed, 17 Jul 2013 12:51:34 +0000 Subject: [PATCH] oslibs: macosx, windows: recompile libopusfile, using the latest from xiph.org git repo. git-svn-id: http://svn.code.sf.net/p/quakespasm/code/trunk/quakespasm@855 af15c1b1-3010-417e-b628-4374ebc0bcbd --- MacOSX/codecs/include/opus/opusfile.h | 138 ++++++++++++++++++++++--- MacOSX/codecs/lib/libopusfile.dylib | Bin 140144 -> 140256 bytes Windows/codecs/include/opus/opusfile.h | 138 ++++++++++++++++++++++--- Windows/codecs/x64/libopusfile-0.dll | Bin 41984 -> 42496 bytes Windows/codecs/x64/libopusfile.dll.a | Bin 28748 -> 30092 bytes Windows/codecs/x64/libopusfile.lib | Bin 10382 -> 10856 bytes Windows/codecs/x86/libopusfile-0.dll | Bin 37376 -> 37888 bytes Windows/codecs/x86/libopusfile.dll.a | Bin 27768 -> 29072 bytes Windows/codecs/x86/libopusfile.lib | Bin 10600 -> 11082 bytes 9 files changed, 246 insertions(+), 30 deletions(-) diff --git a/MacOSX/codecs/include/opus/opusfile.h b/MacOSX/codecs/include/opus/opusfile.h index 4ac029ad..299ab20a 100644 --- a/MacOSX/codecs/include/opus/opusfile.h +++ b/MacOSX/codecs/include/opus/opusfile.h @@ -49,8 +49,55 @@ Several additional sections are not tied to the main API. - \ref stream_callbacks - \ref header_info - - \ref error_codes*/ + - \ref error_codes + \section Overview + + The libopusfile API always decodes files to 48 kHz. + The original sample rate is not preserved by the lossy compression, though + it is stored in the header to allow you to resample to it after decoding + (the libopusfile API does not currently provide a resampler, + but the + the + Speex resampler is a good choice if you need one). + In general, if you are playing back the audio, you should leave it at + 48 kHz, provided your audio hardware supports it. + When decoding to a file, it may be worth resampling back to the original + sample rate, so as not to surprise users who might not expect the sample + rate to change after encoding to Opus and decoding. + + Opus files can contain anywhere from 1 to 255 channels of audio. + The channel mappings for up to 8 channels are the same as the + Vorbis + mappings. + A special stereo API can convert everything to 2 channels, making it simple + to support multichannel files in a application which only has stereo + output. + Although the libopusfile ABI provides support for the theoretical + maximum number of channels, the current implementation does not support + files with more than 8 channels, as they do not have well-defined channel + mappings. + + Like all Ogg files, Opus files may be "chained". + That is, multiple Opus files may be combined into a single, longer file just + by concatenating the original files. + This is commonly done in internet radio streaming, as it allows the title + and artist to be updated each time the song changes, since each link in the + chain includes its own set of metadata. + + libopusfile fully supports chained files. + It will decode the first Opus stream found in each link of a chained file + (ignoring any other streams that might be concurrently multiplexed with it, + such as a video stream). + + The channel count can also change between links, but if your application is + not prepared to deal with this, it can use the stereo API to ensure the + audio from all links will always get decoded into a common format. + Since libopusfile always decodes to 48 kHz, you do not have to + worry about the sample rate changing between links (as was possible with + Vorbis). + This makes application support for chained files with libopusfile + very easy.*/ # if defined(__cplusplus) extern "C" { @@ -182,8 +229,9 @@ struct OpusHead{ opus_uint32 input_sample_rate; /**The gain to apply to the decoded output, in dB, as a Q8 value in the range -32768...32767. - The decoder will automatically scale the output by - pow(10,output_gain/(20.0*256)).*/ + The libopusfile API will automatically apply this gain to the + decoded output before returning it, scaling it by + pow(10,output_gain/(20.0*256)).*/ int output_gain; /**The channel mapping family, in the range 0...255. Channel mapping family 0 covers mono or stereo in a single stream. @@ -385,6 +433,24 @@ const char *opus_tags_query(const OpusTags *_tags,const char *_tag,int _count) int opus_tags_query_count(const OpusTags *_tags,const char *_tag) OP_ARG_NONNULL(1) OP_ARG_NONNULL(2); +/**Get the track gain from an R128_TRACK_GAIN tag, if one was specified. + This searches for the first R128_TRACK_GAIN tag with a valid signed, + 16-bit decimal integer value and returns the value. + This routine is exposed merely for convenience for applications which wish + to do something special with the track gain (i.e., display it). + If you simply wish to apply the track gain instead of the header gain, you + can use op_set_gain_offset() with an #OP_TRACK_GAIN type and no offset. + \param _tags An initialized #OpusTags structure. + \param[out] _gain_q8 The track gain, in 1/256ths of a dB. + This will lie in the range [-32768,32767], and should + be applied in addition to the header gain. + On error, no value is returned, and the previous + contents remain unchanged. + \return 0 on success, or a negative value on error. + \retval OP_EFALSE There was no track gain available in the given tags.*/ +int opus_tags_get_track_gain(const OpusTags *_tags,int *_gain_q8) + OP_ARG_NONNULL(1) OP_ARG_NONNULL(2); + /**Clears the #OpusTags structure. This should be called on an #OpusTags structure after it is no longer needed. @@ -841,7 +907,11 @@ OP_WARN_UNUSED_RESULT OggOpusFile *op_open_url(const char *_url,
The first or last timestamp in a link failed basic validity checks.
- \return A freshly opened \c OggOpusFile, or NULL on error.*/ + \return A freshly opened \c OggOpusFile, or NULL on error. + libopusfile does not take ownership of the source + if the call fails. + The calling application is responsible for closing the source if + this call returns an error.*/ OP_WARN_UNUSED_RESULT OggOpusFile *op_open_callbacks(void *_source, const OpusFileCallbacks *_cb,const unsigned char *_initial_data, size_t _initial_bytes,int *_error) OP_ARG_NONNULL(2); @@ -974,7 +1044,11 @@ OP_WARN_UNUSED_RESULT OggOpusFile *op_test_url(const char *_url, the failure code. See op_open_callbacks() for a full list of failure codes. - \return A partially opened \c OggOpusFile, or NULL on error.*/ + \return A partially opened \c OggOpusFile, or NULL on error. + libopusfile does not take ownership of the source + if the call fails. + The calling application is responsible for closing the source if + this call returns an error.*/ OP_WARN_UNUSED_RESULT OggOpusFile *op_test_callbacks(void *_source, const OpusFileCallbacks *_cb,const unsigned char *_initial_data, size_t _initial_bytes,int *_error) OP_ARG_NONNULL(2); @@ -1303,11 +1377,12 @@ int op_pcm_seek(OggOpusFile *_of,ogg_int64_t _pcm_offset) OP_ARG_NONNULL(1); clipping and other issues which might be avoided entirely if, e.g., you scale down the volume at some other stage. However, if you intend to direct consume 16-bit samples, the conversion in - libopusfile provides noise-shaping dithering API. + libopusfile provides noise-shaping dithering and, if compiled + against libopus 1.1 or later, soft-clipping prevention. libopusfile can also be configured at compile time to use the fixed-point libopus API. - If so, the floating-point API may also be disabled. + If so, libopusfile's floating-point API may also be disabled. In that configuration, nothing in libopusfile will use any floating-point operations, to simplify support on devices without an adequate FPU. @@ -1323,13 +1398,46 @@ int op_pcm_seek(OggOpusFile *_of,ogg_int64_t _pcm_offset) OP_ARG_NONNULL(1); appropriately.*/ /*@{*/ +/**Gain offset type that indicates that the provided offset is relative to the + header gain. + This is the default.*/ +#define OP_HEADER_GAIN (0) + +/**Gain offset type that indicates that the provided offset is relative to the + R128_TRACK_GAIN value (if any), in addition to the header gain.*/ +#define OP_TRACK_GAIN (3008) + +/**Gain offset type that indicates that the provided offset should be used as + the gain directly, without applying any the header or track gains.*/ +#define OP_ABSOLUTE_GAIN (3009) + +/**Sets the gain to be used for decoded output. + By default, the gain in the header is applied with no additional offset. + The total gain (including header gain and/or track gain, if applicable, and + this offset), will be clamped to [-32768,32767]/256 dB. + This is more than enough to saturate or underflow 16-bit PCM. + \note The new gain will not be applied to any already buffered, decoded + output. + This means you cannot change it sample-by-sample, as at best it will be + updated packet-by-packet. + It is meant for setting a target volume level, rather than applying smooth + fades, etc. + \param _of The \c OggOpusFile on which to set the gain offset. + \param _gain_type One of #OP_HEADER_GAIN, #OP_TRACK_GAIN, or + #OP_ABSOLUTE_GAIN. + \param _gain_offset_q8 The gain offset to apply, in 1/256ths of a dB. + \return 0 on success or a negative value on error. + \retval #OP_EINVAL The \a _gain_type was unrecognized.*/ +int op_set_gain_offset(OggOpusFile *_of, + int _gain_type,opus_int32 _gain_offset_q8); + /**Reads more samples from the stream. \note Although \a _buf_size must indicate the total number of values that can be stored in \a _pcm, the return value is the number of samples per channel. This is done because
    -
  1. The channel count cannot be known a prior (reading more samples might +
  2. The channel count cannot be known a priori (reading more samples might advance us into the next link, with a different channel count), so \a _buf_size cannot also be in units of samples per channel,
  3. Returning the samples per channel matches the libopus API @@ -1346,8 +1454,8 @@ int op_pcm_seek(OggOpusFile *_of,ogg_int64_t _pcm_offset) OP_ARG_NONNULL(1);
\param _of The \c OggOpusFile from which to read. \param[out] _pcm A buffer in which to store the output PCM samples, as - signed native-endian 16-bit values with a nominal - range of [-32768,32767). + signed native-endian 16-bit values at 48 kHz + with a nominal range of [-32768,32767). Multiple channels are interleaved using the Vorbis channel ordering. @@ -1411,7 +1519,7 @@ OP_WARN_UNUSED_RESULT int op_read(OggOpusFile *_of, can be stored in \a _pcm, the return value is the number of samples per channel.
    -
  1. The channel count cannot be known a prior (reading more samples might +
  2. The channel count cannot be known a priori (reading more samples might advance us into the next link, with a different channel count), so \a _buf_size cannot also be in units of samples per channel,
  3. Returning the samples per channel matches the libopus API @@ -1428,7 +1536,7 @@ OP_WARN_UNUSED_RESULT int op_read(OggOpusFile *_of,
\param _of The \c OggOpusFile from which to read. \param[out] _pcm A buffer in which to store the output PCM samples as - signed floats with a nominal range of + signed floats at 48 kHz with a nominal range of [-1.0,1.0]. Multiple channels are interleaved using the Vorbis @@ -1497,8 +1605,8 @@ OP_WARN_UNUSED_RESULT int op_read_float(OggOpusFile *_of, op_read(). \param _of The \c OggOpusFile from which to read. \param[out] _pcm A buffer in which to store the output PCM samples, as - signed native-endian 16-bit values with a nominal - range of [-32768,32767). + signed native-endian 16-bit values at 48 kHz + with a nominal range of [-32768,32767). The left and right channels are interleaved in the buffer. This must have room for at least \a _buf_size values. @@ -1558,7 +1666,7 @@ OP_WARN_UNUSED_RESULT int op_read_stereo(OggOpusFile *_of, op_read_float(). \param _of The \c OggOpusFile from which to read. \param[out] _pcm A buffer in which to store the output PCM samples, as - signed floats with a nominal range of + signed floats at 48 kHz with a nominal range of [-1.0,1.0]. The left and right channels are interleaved in the buffer. diff --git a/MacOSX/codecs/lib/libopusfile.dylib b/MacOSX/codecs/lib/libopusfile.dylib index 12a2b7f67a7c67507e31ceabb4ae398a50237dc3..0b7a2175fe38e0e1d7e3505e58cd6fa62168676b 100755 GIT binary patch delta 23083 zcmc({d0bT0|37}t9Z*nkM#UYGO+{S5tw2x#865=-7Zh{Dea$ezPzPoZrW~(h*v*cX z_NFpFW?C33xS)et;8ti)&-1mM*V$fY zy#uvhyH%ID<+Tp}B#jW_fzTL1Lx>$wq0FQ8JZc8-S6|c7H(vbg+oGlA$(K7^npSr)n5RT&OUSyph}ROb$qTus05?TQMBvXr zHFQVJ^|}zUF%~iC_jsXDm-i|Vk0N9PY>_y`I)$Hyi1b9@jZj$Rb=*br^={u{sWH>4 z*=qFAWDHzGNcNhg8B)Brzp&IGrFwS}mJ~}HICW4u=)Jbl5`%%fx~?#><60^#@{_84 zzIkEc;*iaRM3gw4(VLwPGg{0*7EVU&f;cJ6k0b(nm??2PknOBBx@oq8A1PhwG_p}@ zD&VJ5m~Tw$g?eLVhh@<#X}&4;yA0D;cQYVbEamymZ?@p8JQy<_<*Wt!Bsae-VL`aG z%CC>GKwo&!?+x01VTsYm6O$OP98(<)FOC*=TUOsbA8?%1(3PUqzT{(~uwvW)T8H5^rE`1J_T~cD; zi1rICIR}Yb#8I$UbjaYvQZ0B&y92ujb304t0|yC0jpW^VoG^cA+9Eeur&|u@{XS~KW7GU%gG@mX9#f#K_#L#QXN56O?=SH8weoaV;}UE2BvCX0i~xc%A{2yN6ZFhTM39RZR#9hrsCGI4x|r zvtn#iqe0!x#2snE;+)Qd-f^UfF=m8U_;hE5NtA8*u4#gXsn?Hz{z~E=wb@xE+qc4f zQ5tV!lp=c%T29LEawK@Jmx0Xe zrc@Y>6io~fcBjcSEXcpf%vMSJrZVEB#+>&!t}|~?%-a+^qYlO zf7sIqmEy~hi}w0+Wp z9xn`<>i19Kr|vNwyQ@}Ys#PsK#`Dz4vIX=h3T!ZcNaC}O7Q*ta3DUxzAH6Uo+O)YX zdgIB$u;s+aO&G|Oo#yr=8THgeeLy24-Xq2cN(|hj$>k`Qzaqu+#*xLX8buT3?^> z>kA|M&)2jV^QmbquPceoyu1SS7_+RfIP4dViBDWv9Wv?%D=#?@W{uhio5==Xubhwl z>cXPraRdh-Zss9mQuZLfT5o}-n5Pi$5G!0hrG-~S4(S1TP>8juoexgTHzaHZjpxpV zJTSH#li^5VrV_!+>`ip>9E5B(ldyaERO z_K1NbUVS=t)R}jrnfOY1kzL&*(RTvom{7?c`KoE1;zCL{A?-n=?Z~^L-X?E)j7?wg zJM(cX&(X7f&M!F0TrApW%*S|gZwIGch!HFAx-hC z3d{04Zy*T+!+kNiM4{p&hPd!nTQ`WLt(!vRDK&3O0Lk+q$>1#nFO|2RF}a18Ss+1q zKK>8loPS^91wkR*FiDu+9yD9H@V7K~(1;dslX(j$4n^DyWaMe-*q~tHLb_BtXpnHB zzZ5#SO}pdfED~fOBTB=vh|xgeCm@bQshUeEga1Q!y&W}&TBW&BU0RQrW}eohz(C?2 zB0i?f9C1Ahw?t_u?I~@G9x42GT6z%OOBg;+3W^C9hIf?4#>^LfzgK9F5d>j)Pw7}} zjBs^lp_{$~rMn6PhrUl~E6F~rk5GL^sv9=F%aCyHTHI?5WQeEv!zO0q=70=yc9UGb zYViRQ=lnIi&}f)Xg)4tcj^XbK14c=?BZdkC+@(_^=FsMa{oM3oDA0V8&EnSHp zD*W=3)FWZGaJ5u=C*ke(4jW$|v+_w7jH5JEWQ{V62k(-iMh4KG(#(-Vn+$YSYC5n) z+C6d@y(c{$+133tc<_b+SEU{=^`)Jql$QnxH(jOtmtGSBTqLhV|Mmlx$%AjDFo_So zu>1g*h!IzLEob$NM zKq3>QV~NA4LGlE$hr92L|eJe+q)eN=9~{A(kG(kO$>Eak=r*QF zTmsjULsUL@dJ}U+O=)SJ96cs_-M|<)(v|7IObgl9gjHY4OeBp zdvO`p+J*kSZBLsJp%3mHsj~9ARoGl0^;mnhVHUHiu zwdLiHGR@%q-_s(UpBzB@zddEN&@(|AJ7pqWClyS2t^LW{yu#6Dm$rOT%G&ao>^yPK z%5GBR)E8;Als2_X>tEU_N}BvIBQauHO*W7oi=~38ty`ZhF)mkY$J6J2jNx_mQ|bKF zz3so5hNUM83t%j76!Qh*YkookEF`D(y%xq7E6E`KptVhD} z+fwZ8DecQg{a1#iq}+UooQiWEUnU)#z1^qGCeLD+@6FRtu57GIS65_YHOfJekMELl z=LB?2$U%v7P-2wYU@j%`@*;`-4m1`Q9-GsZ(&5sLxg9W9xy>6Se2whqZSPZ7$`=n) z?&S>QY;1z3k>oh%v70cHoKs3B!BiAX#ma*bYj&Kothp38zdM~JCC>khhD(pP9tKV3?FWk##h@atlenXj?* zJZe>GARRYKj#q|Icd5rBf8oegDREJI;mC1m;UXWQ^iyfgqP;$)x8?O|v)m4=kntL1 zY(}QJan923rIc3>2}NH?zNsPfwv?DURIqQBHl%(j9IBDx7r##v3LT3ZQ|c2M^F9`ehNjK7cgnb(eJ(jM- zN|0Wd_xe(yNdQ^-vH#Q;1hy>a}b)QFh6TKz*%nt$Uu_WD#BerG~D#&ohAZ|I&r7{hpKF6@Bb#lw8EYrst_~t)SqhtP6E=11=;$GFQ-?(lA33n_hOL51_P0XlSgH0c9}~X| z{QoiZ{eR3H^CEeT2NZ5eDgxqEUj*FqrRMJ%6{9T_^5@a;9W$Y%JZ>i%;A^w7J|zZx z@B?JD7w!!SNsB@~hXtxw+VbH5x$2~+kIZr}fR0|p#lXobt^!VNChIhT36i7mJrjX9 zDtsMENIq9^ixl7zMW+?VrxkviDBxdITnl`ynMpR*3q~IRh&>sr! zi3|jy;9dl{iGo95Nbpi{OaX8&1rMnPHYj*_3h)F4$JGL-DR?H=&jm*QWNrnB_Z7js zJm4)V=1Rp1euZcDt%~!3FDZCYHLz2`+&MJvDux|ROBF+3(^0|Pp)|oNHsd6rc~K#_ zhiPI}41s2}(nQ>4G?SXSAf0^ut$9_!Ca$wW#XPe&o4Iivu!&}4Gkyh4%v*pzQ!!3K znnPN-yGK+2pOCSM#PN(TD1xEfP_2T8N8v)ADtNIku!n+E3xHcISZ@aIr0O88OLqki zFX!FrB6tC;KbQSeM(;GqgO6ac@Z z;8t8eS;2!-ffpz^mg8kAMuA+d3fAj@Q8Dg+#E&cOPy|glE>UoEuB6tcc?Gaq0}qbt z6df<HjB%LW*8 zZhhLu0~%mcLIYxM1H7yOwl=^U8er7msnL=K_;dsO3nhYD=*Ex#!EPNDJd}5WTSNoF zsE|fhDri_QDJnI){2orfnW35k~Q?iP#WcM_7%(c^L?+5O7aQ z-b7f6@CHIU!eWGl2=ftMMMy=!_MFT^ScI?yAr0Xb1U`$^+s_8(y@*2?S%I*UkWOS7 z0RLEryAonVSdL&u$VJF87tNkSU!c;&?b;D!7C8LDVktj!l*oM);(-X=6`FrN>(9E7<3rI&&~-;XZJM4sb6VQ0sdJ{y zTU408bBad0WLBC?O?`FtY+&~HBD%lX95B;fn>J&CEGqi!ReD1xly={3^0qy#Nkt<< zs?mTIjifC50QUk^m6x@ku+%OJLRw3Fh#WUh^Fqn^;srh@rU(5o^@}-^(oin`1(HPN zD-CGaj>|6h|Na6Q0XYxc8gG>@2pRvQ&=uR1n!9`|e}N=bTL}q*yrR(a*ik{sJMPxH zJKA0}hv4n3c0fduMRTWR(&xut7hYXj*!9FORQTf!snMzT!b0CbqYR@KyXmT!R3{2n zmq3R%c$|oF;Z(DF%EPL6%Q@ydW$N*oM;58-R0LfmbvfZD^*=pAm~WA?Pqz^!S_qwu&}5}_y`qy)lP!6i3276% z65gz@6ZLLlW}TSoHq06s=-8MojXu*)cqLm}g~%*OhY;DarMfd&f@ijrc6Nr;=1eow zn4BB&NGLbbMA6_P>Z}P>Vw4+-ra!M;>js~({#d53=8bs0+iY#8SVFX&%$&5|&ONTp zJqF~|SLc+uhzZr<3Fo!BmEef_YB8xQCvv4O>sMROI*gaH*g!W-(?qUlW8SdmL76P} z^dn+p?cPM4&7dZ#2|ZxZvP?q&Kb07RSn34ibH-TSO#MDIw1Y0oJ$)>k)0 z^-moIk|BNi)1<&1nAXF;PL~?wuoEmXVRwCo8(){YoeOIt-gP?R(4`sQG?0yWUCKD; zBP^|zHk=zE40*k<^4xSy+wU>OL-p$nf8PA&14=s|TOy6T@I**^O&WReLHB7`CM*s|jS3Yg*UD))0o1n z=?|=5TQeW$WF%{{W{Kmx#Ns+XLVDXRXVYJqS1}2LPBYHi7SqEDZ+xQ`A`FvM_@^dA zmyPf1PUn7t4-r{9>!WNZF%weEhk-VsLVV*Cl&xa}-FWGbXn|3T9&^zs=?}!r$J~|8 zlejC_yR#9Zp;}za%PWp|u^hK1UBS$g zrWKRUN4#4Bt}?aoS)|ODyKFpGMHB_I4E)DS9;D~3#y}lh!~->U0oSd}B@kT}LmaK4 zjBb>hLz~Nwj`ECjMNHsnT&!>EyKzJ+EM0=YH~t>+0q4 zd{FI@$k~L*bH?nvVsxjoCQE8_eVB0Tf|PPSuw@SE&AhGK~0k>y@KQxG! z@Har)P}$4;plur($+`VzNxxnX7NRal&2Gd9kAIOy-x!LE(v3I9)1Rcz{;K}`F$n&&3>xk=*aV{F(QRsE+5~W?G`+uwu7F>~*)b6c?ok4$C6DQ5yVJdunUaI)}HvL&T@?@znbD%W9Su5Q6ZBGxnlM2R{ihjoBJ?-Iw4tHEhkX`3% zZSHCGJzussd-h?olaDFx54@>P1jI=I+0m4 zv{P8j;Y{>#*--gF3Lh%Q$l()5T|AN`wC#Q0f`!zRr%z~W4X@!R5qUtdQySW?O(nFf z7&=3ZyZ|sH_f;)>tf8^Z)|{26wleLicnH`?7aH$7`W#fsFkN8QaIrW|i!4s4ZZ+4?y$HVO3xNuY)tP_q3R6#!JRG@QqB~O zY(lX<`S)hVrgSj9#11y4qlLAhOy@zn3bR64xCiwYqC<-&d(cKg>$NeMx-I#bvbDK5 za>=txg!4@^AuL}PuXBV5(H@#bzqus^_io<-xgd2R`5|bQg zKO6RV-Py_(G?%t!IJNbl!&$$Uw70NkAe+;YZW5M#&0M|ck`6PEC~KK^RojQKw0;vW z)kBnP!3idL;Yd-)PI%Gz^oOGUt*8eTel95*(we?Sg>y$)WgB{udb0esbb}CE$_BKf zFZjeC<@U6z{?iO~9M{jLuf~`clQxJ6n;f-vwzeI=wks-WN8h2s$znF91060z?PDKw zpz%WE{_I8vT1?&8C*Jf8;r3qEvm;FuY<-!jBb_Pybg1ZRM>>!Ss}HikPIRB}pZ)A& zC)!E){J^`ubi9ysfKBkFooGL{%om+w{F;5_OY4L;zGNHx=vTtj{cNf~4W!{L*PjMa z!gl&oKVj{DR^dsH-jilfAGW$D z-Auc%pk6eVMzB|U(Km&vU)cR#G@0IGFNL5(*X>}NLueOa!e{KO5W1V%+44|Y>-!i> zpO{dr91^U0yZAO=4EZKG>0o#^31F*xQ-99~C_f+Ie9d@|?dwewJ3jIRD`}g}B^sv* zTTT=Bm{q?8&0lFNY|py%p&_le-PKO`xIF}=)h@PN9XEomVhj4v!G1D<^H4>&%6eZ^c zcD5fa5nyFqf4YRuW3DgIPwD!iFJ7Q8QLx_)qc77^HZhF0r<>T)Fxsj4`ZiAsmt?(q zyk<4q8b*6|9RfDCKu6L7#GD0<(eRDLoL6}~)J4o$A_F%u=XLfdjD~mpsr5g~O;u%W zy>iQXf)a2nb5tp>_F8Yz|wc+4&DmH{jmvyyNOqpn3A2hbEsKW14GG@`57OU9`m$WGCr$HTO{7t}aHAU`Gx_p_=e-7aKk#hargZ-(fKT-V zGoE~9*;{I;VfB>YnP3UCy#d|8e58Kd%jn<%$MobL?x7Uk~b zrDE<@CVvp}2MHrCthfN7IupO0R&feiC{D$xz~ecFpAa*Af@8Ru2k;6Ndjqcp=9kj7 z*kZk>;zYE{=PKquytXUYL{iaoXH)^dUOcbjeAMPQ75fe&4QUxg((}gN7z*KQe z#lE=bx}ah+__tJ?=YgxTdL0}Db?^<|qWQpGfdSE3_-U_31H7^UUM*vjQX;8=;C%(7;Fu^H;6n}YnFjcB16S9d#S-h0G;v!fT!2K0MHA-GA@T=+;HMt|eBdn+kYXB@ zpHXVedHkX4Mzv&>b15$QXJP=%LYNIU%biD8xmzJ$jUX1e&!_qS-|zQ-*1l_|t6GG@ z)A_Rn$8`RLdg6}1J=<-jfh{WMDZDF6L@MX8Yi2sARq=dsjr-QAzPh|L?%>ah#yC44#+My!C*tgU=rtCUM%eppPjJ&uXvjQ>L z`fs0tInC09Z-dg$3>UpF8gh>4w0rwRnV;bHd%bMxIEe1r+>Ib?LroREow)dpjnW?a z+LlofEnoKOyOkTPXJW(4viz<`N#;yWAiqm0N}0c0Rz0edS?pMr%zl?>XF8sFzC(K$4u02-_aA zaqH@=e< zw!(gq?>f0dyog+Qc|IG%+HIf z5N~xlT=Yecx6*bR8qHd7r=cCAkxQBN94hIEsFjb-7Jnp-xBlU68$z@^!rU zNg|qx7o#s2@zz@$`g16j7-Y#4&S?_OYPVC%;3#Cj!4Q5_Yq8;slVIDLk7}!_UV$(= zCo4mvwcG}`UTDiS$6IA1L!;R4&uD+_^sjwJBj{k(Wd|MHa=h|r zs7Gf%cAEIT`hI?&E>noKBP$K!0Ufjt@f-EtcE<;UPylgqb-Xys5ih<{8;{%df4&kK zW(+gN&oenvDL$F4$4sK!qkmAQKaV=1$J5WFQ4N|Ep@!@-e%^3ITyi>NHM7pwyoTnR zotI>=UbWm$YpYxur0L{?y>iA+(;PpVXD#AIFXs0L*^l^D0`3pqgs4ZeP;g{XT|>e{cIOZ5kgxQ$WJ| zA%9IV!QnIx#XSYcfRpj;l`m;Pms6LW&Vjs{Vzv6}>(=Ol9CNuwR#(c?f$ja0hIqyI zg;`v1Farlk+hW7tOk@wgq~4(hv|jJ~j*J&EZgF9yx180ktwM*C=?hR{M8|j(E9&#~ z80TvTupx!CJ4-F3-MUEe^1X$}y1UWZ32So8c|X`ZZ3@>#=H})a*x^FjdTb(u)||0; zi#hQ!<{UAHXK$4`VorsOD`oyE8FP-9!wp+=I0ttk5>J6kjgFn;S-0IZFifu_=()Z9^^bOW^FU=Q9`xYJFOPkW* zWSDn+jJjf&L?1MvYq3CRb04B>hFibd&&9p(^M!)3Cq;B%>va&s+h!#5N%1WtOTcx! zC7z8crd@O|@kC;#ud^aP{DIaI#oh$B&9~UI7_37=4YmXM=wjJ19kspLv0@tIG4v0t z-qvIM&h`Lnv5yY(Exays^qAV*z2h`Uw;d$`qSC0)sOhnFr)`h=^SD-h$Kf&R>n?5ANK z1LTH$!fiKZjSkRx{MSgtP^K^D24cmjL3+#2X<9z18s^#goNBP@i($3cpcxVxE2hSZ zi3V%Z?pQG+G+z8nCpYj-ZEkaD#@kZjW5WyEf~U>>80PpGOb+3Kgi{IDYJ3fjwcd%f zJ~_-6R!1L54Ay=*+=kqxe1OGT<@BO{w>8Hbf>`STUoN*D2t+h|#*ci#e3QiFPl=sPi~Sd7&LS#!8&^6G6z$KlK2HMB4Ocm;{I7XGt@*l^jP))ET>_EgK>;|yZ;u%~c$e1F85;s| zeFn%s&%t>L47N2>aE%vya`p_e+ z!*P0+R1_HPOFBVU(C^uq6SPe?`O~0w)m|Jb#WDTRN*FeK_zul+tx|43(CEL@ zXIb-;C{z_&c#`_M&4q%&Y6)WRoTS6LrE==bBZGCl%olAzGUK7aYU84KYqjCb16keW z6x9m>mss2>8iso1o}$5x!}laZ$;9@YqJ!u%R(FcN+HoU>fyJKHNp5}7@&FEN5Q|q~ z*f^$CF!N~|k8gsfPt)=ATh{p->WhuZ&~LDv|CTNM2AAI7vNyk>3EjWtsn+w2DC!g@ zMDy4Xf_Uq%j>9LI^Bekx_cyW&STk|>MhYci2~X%4_znB;TiSts!%DuT zUAm&x45Cdb)~;l}dA4P4vmSBWRt(!=c$=g0G;2~pV+3-YjjW&>>1pPupabYB7H|f4 z-pg6e89EULFP_0cj*UEsqo_Lc zK4K@or@=zw-`StvL;D-n`Uj{D3TEaXXqSMke5t~TK)Y%us?+;tYn4IlPqE|U$2mja z*4XqH9shwIqRqm>_8k;)pns?axDr&}osP#`Y9N%^lf5OMP<819ubbpgv97q!^ zSF~0$8-0!z&=WdzIy0paa6?a(1gV zgqLd9et`e2-id+h+FX1sW1iEgw`W4BaiV zA#uGN4aAm%#B1Zv##`4Xv*8!xTm_ znl?9-cRjXtd_OEMH5jaNmhsj-$;`7FpO%wZLN&amoXxAoYIc|%t;QL!oQ=Cg`!_E} zn(h`ePulIMA$)T=+jNO0hps&YFOL`ZB%|)ba~@$E;45z&YwHV+p(HBV*t|k(G|cx` z>fO>+9wD|2Zq4S^)F5t7W-t9pqv)3`?^jyVbj68!Z}^KPU#6X#UO!&XILTIBrqN9g zAFF4WSmk9J71FPiGYn44Hk8DWZ7D#+msajl{+P%NqD8596zXj$XG5+~KhHLp#)g;S z^E0Njbhh{k4ewVDmi1`Ohxd7s(YPB~AH)q>ZJ~&2wnGY^$`~Ije&PlO_9R$_*@Y`~ zsBRK+Iq*6+6^O(ReC)o8t-(V!=_>8kGT;G(CN4aRWXew=HeJOOlFWX-iW%WHdwiAN zqVtQc|3;fp|Ca61Q&x>ZbZsu9A#Q-p6sQAi+MacA&};r(+turJmXWOIuRyNXsU7QD zLr?feVArGA3zw0s_ksesUf;H? zDe^l-eovR*Gv)Ve`8`*D&zIi|<@X}_ohrXyliz9bd#U`+kl)MYw^4p)$!{~>CTHiB zGLb94-;m#{@Q$~2%tlnR@FTt#>G%rADGHv~3V5u7EgTyZY~?so!RZ`_D!4hvfeLQL z?X*?-z@{1xh4_jq5e0ALxb8za;}VV?3YIfIui*ZiU!mY|j*lrgf#YHY59fG?f^8h< zD|i~m@5tEH@g6?X)vQtki@Ct4;G3MEs$jVWGZpN~b&?f)hU>&D_-~G*6uge(ehQw< zagc&3PwTB<*}l%C5EHnPi-KEm{2*VheLIeCDA<+bY6V|v30$e*uQ)DO@Gg!IDtHga z1;GFJ2iVl~C1a<}Swdb)Wf3>27fZZJecjDa*2W zZo=qCw`hw-o4~L5i0!{cgBzVv@HMXQg84h_V@3ZgyL}6pMS@lRF?;zBi1{bQpskAd zT{en~cYu|*m7Vy5juZ;EvG%oesC)S~MWq$AXs7S(rxO?!XM-JbvHoI z-L6!yzmm!uUqCWcmRatZHYfne(e%SR9>Q`}SgCYFE?B9bu@iUc3+~%KQ%vnuJm&^P zVLKGo*H1mC8B3|7ZbHRQHop#cLA5*Cdv!?b_PL_i{2#@4??JEjbJpY@^mJda0r#M{ z;R{9YMYii6x_Krx6Zv1V?Of!xR}p=~J)kSo{Y_mwE4f_dzoHb&1-qAOm6a?zu4^P% zZmivX+SfG=P{&3Adh(w`JirEmKiygLdo-ZYd6~ub-=}?Cz3_=Ch27?f;sM=Qw?FY4 z5hGyRLrS7LIg#fMupBDugzTN3SHLnKR1%t4kHJJhpmx zfa6d((Q=_ZkAX#wC`unIt=8lZ49v&iXJAvrpD);@2ef;$emFJM9#>d>UD$v+8tl0c zya%Tho|oJ*jW&VhIL($nL=h^1Q?ZlfkB{OSF4$J4s4Uev`+=4Cl*Q)@*O_2NvFJx= zmQ8>LwhXXYB_R1(G54aDEx(5ncr-<;T~l}?l#Yl6%a{56Mf)}~0tQ`E+G96xqN=IR zH8;RYzQ#`ch4GEJ{bTq@@ijJr#~ZG(<&WVIwQ3SirQ@%l2o)+T^Qn)x(YCDJ-!z08 z*l->Nv1L4RW1s$wOXw(e36y&(Ze{p0miK6+My2cB^3QsE zs++oK)L(Dqsea0TIwUu-O1D+%dVl6WHR3-V;(tEGpZ+RsM>p~(TBR#gI)T$o(Zbn^ ze5y*DRr)mz6t!r93Lixw3ksaBRh{f@l@9e*P*l}rK?r>AeF|y1(TmR zl_tIlZAw-dwd$~$tsl(orue6{!E+Q=&Qwda81rOr!q? zs*Kv1N`g3*uJBXnlzMq9gTQYy ex+t)N@X>$$uBxciTZsOD`G?cK!dC){`+op8;ThBb delta 20746 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ℑiNLKC9AgF! zSMUG_v3hm zNg-m8nd?FY4=V(IPr(yXfmbTnr~}@h;5Sl$zf^Vf!21>4pYu;Cc(xh%qKXTEe^M|^ z3a(ESJl9kq2yX5Q5etc1Qx)d}2Pil$5xAp*o9lqX6s(6KxBdz?Xn~VdoB}*q#f8B0 z6dYg&UZP-6uD?b@xc>=FxY8Cy;FSt|NWmJ8%T$~Qtaejlo`Kp;O~J1tDmu+{z&=F4 znM;1^_yfzm4}Neh9P$E>5bE@JK?rqv)x!O1;rLp3SS>ud7M@fK&!VZHHaBI~;#g{7 z8xcrNu|BGW3v1z{weaOy_~%;q`9HWWTA;>e-3|(t+qQ0GEy2KA_{~~)RxOMf@r9ue zYT^G7K~xJ}_h2o2y%zrKAMDD#m|(6 zE_@GR2|_x81>s$UJcM}&xd?9~%t4rrFco1I!fb?T2v~gt?9T=Gknk4541~D|R)qHv zvJo(!2#XQ;`odf59fU;)3*nQ(0)Y7lxTFwr5X|P{g;Pla=~1rR9ir!X0iXY7+BVE{Vow&QG^UjN&%TpGv zu&33}uO|qhXp8)MG~3>@o*kv}g%x|zVY?)X&l}?xoZ-_$-`hGa&3MdvTl0&HZziuB ztNwJuFI(jLdTbShYD|?4kP_oXetP1~1FytHgmwtS{;SaIwkVY-L(D6;>r-49A>LNx zdF-gTBgKx|eC^(BCfZ9f&&AtW;ec33mdxYcq4&O?FCLm#G_~{^5kvB5?8&v^spu_R ze`2wlZb?ZGCDG~{=ok$iC;GZ_YETX3VKunt9@C8-ce1KyF7-YYDVC?wsiiuaerkZY zbum4Bs=4^l;-c?QH7D8(^ox|_ZiR`kK*x+6O3p-!?Q>|%nQr1=W}0#4wBJrMT*q!L zP3vu~BN-lAV**{JSUJblW;*U{idGK=DM@Sf3bY!k9o@|I{MnXbmWkdw8z~Mj(T?X@ zi@_!ue=ekX9$ds~cqkd%rL2cis(XKHRG{NZHeGQpOx&JLPax6}`ZuDp*);5YwwRDj zcb%U|=U-SRE}uc`e)D>x3V57k&>|r(h~r2m9sEr|=mgGPrTg3Ic zv~5}CrC>VoI7VmEPrhk6XfouvPlU`WO&%^V1zr}NY)4L_8fnit7MYV7DA!v1LdRxU z$1_5Hj>n6r$3=f}+#?!tF+jT+LqIyfi^GlXUPQ-VTq^1p(fbz^=_T19Un(E%+oCGgU#-oPc zfwUP;$b~>gN9WT%-?b3C{YFQB_kQaJ5Jr5hu`J`Ql4VCSZV1VEnZ)_jt-Os`{toR> z-cl@hhsKqU4vdE%Mtq%4Yvqu@9W-HAO@$DH_Dt^LkLMOOx<1fNTs4D^t?VRDm{GK}a)ArI<i61>2|Cuf^_hVKP(z9xy1TeoVLVH)}(T2fVVZ_s+3SJ4fV4oRY-BJ z)`ZG5jg)jX^20J{Yx1tCzHlD%pOjT@lU?2m3X-8hN~p{&)mbwGwP>##s~-k_zf zfhJxv2SpN8_FbN>ChrjpNe1LqDJ4}PjjQ!to`db(tGrap%K7`lOZ*)VJE-2B$w+`A z_SN#XI--FjCeU4y&2f1IFHx+YlyIpuHrW-{OJn(bjVP5?RC$Fx3E&iTVn~qn-D*%> z?Nuju_a{_DF5@|AEM6D@Qc`8)hdg_Y#f^sCZqe0mw~U=w~~QOansr^)ru(m!qowHdC9@q*y!h? z?bRWoSWr!W{N0zdq)&hMBco`u2a(#zqmhwKw(k+>NFPndKbR<Ob$gsd#NAh^^$)$+{aVrKKO%^jahuk8+K)V- z1D+;|6Ry#9Pe+MuZxua#I*>G&Jq+y}7HBPXjHQGBY$Xo`u)E^i<&w3n2i ztr>YduWp=ckd@%Nj>RCW`fx{%_2B8P)sDEIoz6Qpj2t)YLX`$7MHOR5m&SU_Sr{%= zokI#u>li^uvfdgoJom0nVtZW40CDyJ=H^CLHTvvzq~xQ~;LfL8#{~Ad8|g~4?3x={ z-}q#Y|CKK8%C@@F_$UCC$ zo8m9(5iAEQLfO^&qz@Uw{2Gv<;@=@GwE<}_UJhYv8jt{SM@aF32BePI>|QixN=pG| zNKM{eUN;yoi)L3mNhcpWWVzYNE}CVDkVva0K?{wcD`PnF=97Eu%Z4Oe+Ci0kehN#g z*6~t3MY%ejW)GT>9)z+EUStO8QM}5Fco6ZUgT))0k`IWu_81FmPEM1vA9|D3qU#a1 z)|>Qb<#CLg(=7Qxym4=0FK+2WRuWO#!-{-KoG9#N zfBTYnacUTgZ$V1P3FhWU-W7KgGn*et6o2i;uKSTm;+jLnhL)rk5eFP#d9BDEaoj%E zr!{FU&e_jWT9XlC)BS7@X!4LwFBvD9`b#%sHa*R&(!2su{#v^`lu#1=bP zZZPRU?z1m~$xL#T`F23Qt9P&-9mqt{rI3Bpfh-pb3R#zqpatk&Wp>-V>+&$bRlZlF2RBCj_l|V>`2jkapr{+t}_9vWpb5 z8KI`DSWtNoSn!)NgK*=JozV$0ju z>RXdG*<7QohO4&RXPh(?pz4=wMfF*;ZX~4HrU#ml8|$Oz4_CO_^0eHDlvKb*bt8TJ zWg?-%YS<ypZC8$h%4~TuvKq|6Ut_`N zBx}^21e0nO*`4^e@I`hD>u462V=O<=XeCZR&@{rD@G+a;owRBbpep!b&~XJ$W44s% znS^qvT2om`cQVpTZW+UVYmVF?NgmeaXpOdEaHv+y5JozBHk3^#A4V;68?&r1(!Q0- zx&Rh!rija`D5fstl-rIS2_pwYSjl;f%p)V&qu0o1#8Uj99%L}#?CRIan`8$Y7*2f2 zQZ^-=v~FZ+{-Si4_)b=;$xf5mJF6B;T zx5G(9`;*Q7QU0@zqU_``S9YmUuFD2Qkf`>iTFUEG<$@aJO)`MxEo^%Pe7JeBXHSxX zpMu$(ND|pT)l1E&o0K~RlPNFN3?B20=EwkP-!3kTB)=2)!BeNcA-p|7DE__|`I(SJ zcDN52=v#(EsUD}(ltnn$B81}PnvYPBQQTEe&TE#ZH25l!=(Q2O-34J1?=?K5YvD}b zDL9~Z+|Y*4t3nsN_>tgS@cF&0mMusjktTlX>e746;{ec&@SeDqueKa0zTK>V%>^eu4D2;-ce z>WAaGip?zrp^b`lt?-e8iYtJVRBUgJ8-N;}K#VeAUa^YyxII?+DZzs9WsOcp9Q5oe zk=juZPSxN}f^bR2g$6;mr{errL2wt9!i8c1_fc_5f*^#cICYjF#HhFcCx%ff*5hts zl8O_7GdSkA($zThf1nBqaRKs)itRYl98xjw{*x-^Zg5e>1;E!-%w6WTin;6jpk)If^c2MsnEHj;uIKqsAB%* ziVMb*oH1(VqvAw#Stk|i&}BVUoB}*R#nrskkf&O{C&{ z=q#<_BjdFy)}zZds@M#?Q^ghY1>uB>3xLa2T#bs|QnA(qL%-K3;XeOQ6^G*H$<<9M zTv=a1Xs%)biQB4J5B!>nQ-S-{V2p@l6<628&{c7Y7EY&P9fs})!1Aqhst3lhD$oNL zsyGp2{jiEFkl-5?r(mpC0i)s25rXiWjERh&*22zOxDNaWcZ{-*=Rdf&(BvON@T-Lb zYvE3{a9AxI#X3(W%}w#OSV^_;7zLx4@YPz_Tnp1$cylfMRV{p`7QS8!KT|Lt!?|6z7>7VayC!rcTtoAv^&_7!!wl+}82{t~?S#i3A~K9%$%{uQvo>0r*oGgyff z9bmG2NE25mh|G05!4>EvuqGo+L14S4lO@Ht16}{p{bz+(+-M%T?}1y;56xsrV=cUt zKWT3&u~v)gP+zvoOadF{@vB`tl}aS!&0x39q<7P4GZn@Ox%F}53L2lox1g)-y2hci z6``-1D0DV^KL?2tRlY;bkkc-7`QhfY+#Xo$y%>iMlFEkUk#W)bLmPX}OusPklQ!M! z%}?)}&D+`=p?tY=VI1@kK5IkcGypHLCL6?|2)waIvfuJZ>-yDe1R(*WV@D zky0VDP#bY;^2>dE!v2P{?e)1B@~s7D+aKpLqm4wdUCYQw@+NEe0a=V_`3GcY%aMW* zXFX=bd3dPN>N3CN1$tTv3WI>2_9y8|NaW_QVO?Sjey&b=gKr$)Y z-BG0g?@`gCqsK&#Jy}&gf_X2;NhX=)E+_tE1lznEN4^p4>~b>36UtV@38R!%;#e?( zy}p99CBxa66{HKIr7K7aM9}kPM^=#0ZO0G>%b&4NDVZwHea18^$qF)z zZCHtu$uM?$B^lHRyOKEE92*bcbTL}5J1XB`9afRw#OP_P<%i_;rbDscKvxJx+iUHR z3op;-L)r8X$t>}|e-wZBAxXp@t2k&i@vQIFAGJGbv1bGvsNDJYW{~!t{eZ!KpRB2Tvifok9&FIi#X|kwj1)rm8hGecO(icWrapd=|Psq?9(qvtJX7Qr7XQ; zJO{P|yqb=UGR{hN9Ar1YB(I5=ZZO|M(nZ{KgAFJo!^txCNg?Se9v;N5A#V0G9B#oU zJGjN?$b&b2`v}%~2Wg=l8v(ZUN27G0K&wO*iC5i`}v>K#&dW07$iCq@|}ta4nN^g+FghYIJuPlwS%;2=W)yF?8TcY zMq{YBV~yU=F_-s~)s^y$VzE0(h*wN^n8hiP={ZQ+5)<*Bky&>Vzb<;TUf0KtlGove zQo>3DZo!t7qeDs!g{Uy1V?2_w@^NjoEQ(#;Nji#C@;@vh!R^{$hlV4W$MOf!nvqNM z?7Saro-GxwtIW;I)3d=vq}ebdgx1`6yrtY28FP-5%d@x294YsNjL*pYV>0F(DVH0z z=5h`WmXxQ!$*|?_fox9^2@L!X_Ja>J<4!!#9C2F)Of&1hx$)935~=XEkh5 z(met!s+L|!U;XWO2b;@|7E3Zmvy!9DIb%8?!sY=EGRxQNPh~Cfd zWceuAi?z?t^;ctV)@mW`6C-HV4D>f9}}_98%#~!ZkUa?{^3Xs;eC~GCc)~E5(;Ci&!qHS zhp>nY7aRj1GFo$$ISu`NhL^-Drsa3fvo^{R zWt8^u^auHGD_!l5zu1a>B*4V|l|M!aT`nb+NHN+VYc6+a{C-k~=8uq#Yb<@xs1dS# zjiozp;ECU;8Sz}2A{V}X`9N}z|AfLTlnrLpByi*&SAIUpf=RjhRri3Vu=Eo|!-nlA z_nNwP#tG3fOTN$Lzi4p_m2AWT64I(1eV4lk3(qp{v+=gg`OuOV`0I`VzpzaQ$Q=Lm zX7CJ_A2gP>SO}$686f}o9$r;wv}M^HEq-F%50aRcmv1#5~DS}#2~eg zvHrv}+k1npJV@q<3oDuHA<{-Xev1Vk!kynAY|bI9+ZWm1LqzAve;$vwrRVb$DeRX+ zBwf_~$i~{SigjaK?3f2XyT&ft$&eQ9u5&j`FTC>s-gcCtP$`we^E!(@OcHz=-o!0% zzl^HWC~AzfTdBZfG&S3NnDlKj@kggKP8zOLQ=f1wzRI2*#`;>uLXVK>_6zu=QOd_+ zlV`j+e#c^v0#n>`Tf(#=`-81MLV{X!ey#|P{Gkf0#khm6;xBgKAZhLiJInq+>Z)a& zg-h}#%=IYQL#`JeJc_F`5?JhW92+L`9qaow2_WTc^4H`BF|z)pW=fR3M%pJcS&Qn)|;%HmIuR%9`od4haHF0rDvJ%vZZ&Mt%FUySy8l8FeA{&1Sg}TD_pCUTZxqlX<`s>RRN+?H1Cq%HRB)^bNkmM3srqg29AGLEqqSlJm8Pf}RRvt$H%CjBfXlpyxuS?p@d z*#5J)ZY*Qpoh1n!%Xq3)d^d(Vh0D=_a+q?2$ddFes9IsX^(V)n(`@iL@~+=`d0%JE z!ig6tl!OO(LPxLj?6-5+D4%DZ=SjQvXf>l`Q;M}CneQNNSzD|}9KR`s?J&H>ap@d; z^E~M*R@`PEpC@a`ITl_#K{{Kog#Y?6cQgC8(9lG*VeNJw37 zPV>RS;y-^Nc-~`wT_wTZYjL(lLlq(qX-K$HdP^@Y@^TdHXT7hX36j~z*GNmBSgurR z34#Is9&s8gKnU3|deG%76Hdtk-eyc)(wlx4fb zk>BGZcFRSvtzrFtBq43C%A52uV@Hc@NLnRFy|6zK;x+M@uveX6YktHpCx_U%p*Z;GE_zp2S9WA(0+?*4ma2g&QidmQ^fRLdy6V>DXjEaR=aPp~o9@k81P zw*EStC7JEHj#bXinpEKYlgvJ?Ag?vrgESp2W}Yk1`J^6}N-XI4W^f^`IA5OOIC(^dTmnUl&=h@YtNOXgv$7>k5Ea)cDi{VGujGM%_ zNjpqr$XBVg9<{b4Gj@~sd$z#*6<2zMcV5*3cKjxZ2s;Co^=Q@R$2`eUZ$35f7PZmltMJ+f=~rl@dSYi_T+qT1Yv z1O;0;ez;LC=z5MF3SPtURRtg5xJo>QJe}i}3hvDD z5(SUsI8(vDHUUmm@E(pQDR>OmNv@?Iui##sub-$8pYa4?3ZBeykb^6@>w=&<~ z5bL(G0X(*EWea&+y_Id{am7~lJ&(1Yv--ay)_=}=@>usdo55rA=WH#H3qNP4cx?Zi zJ>#)<8|&}@AF`Hgt0{cWbKaP^6|UaK);{1#x3g1R#rsP|B~EFvVOYJwRaSo%&AWjA z`jPl0oAD6Z;f0EJB3u5LwDEihQL@U~&pWJ>8&=nfLRS9~lpRHi@(R}I5q>aU2T@|N z!b+A+yIle+gZVrr-Q7H}sGHdkz&bI2)Aq9WACnGs(iFV+G3n;E4Y-W`1{Kdrz>I^6 ztv)R0HPhQnXIV4&#{#R<+8?S(#Vp8S{Ae3i9}U3j24Ok>ZL;CmlaRCll&Pe{jxXTU1J+R2~puIw2q z- z)hzlMS}zP+t|x2(V8dB}g+D0Px@*{gN2G)2Ch$sbE4%?p(_aOvjQRhG_V#K3H@~ek zKs>N;M{a;RdBE;>*r`9spnC3il+-p}n)c$fJ8Zync#-iATlgGZU7(6R6)&oU5wpt5 zVmau2e8YmV&3yhMA>;{*<54+Vz@rlO*qa{wz`BOR79frSGcrF_qpX$DPo5DkENv_p6F0)HqFz zr_EeGq*b?+X-YP_sY+a^#)&FFWxB#oRAc@09Yf|c{7NfMC-v6r>TTATyB7^$Z#NRN zO*OyEbVdsP>oNbQ6Mysw{FmiWm3~8|`LB)qnSj9M_C_)(e`wFso3Z5Z$A%#P8tp5S zFFqnjRq3r@BfUw;R~ZM@1a_4^qbLaZEffQnRk}>2e^zP!p#Xm#Bk%(0TFazR7nsx4 zI)!eo(q(NFIz*;TND!znqE!WbTZJB~()lVqOQjRrDRTY|BhMf|SfSUdbSQ61JX>qz zDt%0)%R&_SIZpE*8TlXv_t>W3mVe(H|(ix;TIfB7d3{0jwrwo-t$Ds4x%@u#awm#K6w zPB%dM97R4@rOhfm0W|+Ez^qf`b6k*+GYb3^#$r{W0$-)@XQfIDD!o~y%hVdweEJYN zL($)>%Byir%Acb(_S6FUW!0xcF~Uf?pdOIoRP zzDjpd>CiYuKT@R&{T14%(gm#*+B95cq$Vkhi8Tq-0;Q^SwOZnAmDZ{myjLUducZG_ zrOQ;G+Eyc1>HR95s@OLPCsl@79mn6Qv`)?NdJT=sX#O}m1p}W6pkB&zU8aQ>^zSdx&tB3OF+ysmcYlf2yhJyvMa#Xe zexLCo!?v{)c#%54M8EbD-RmXVz^a;ytxf7T8!ya`eMxPKLc^Pthi?UIK9}Ge>q|8M zUaz+Nih~Z@iw7Z(K8nJNE?AAm9)&q_BxIuz#vqJk{=TBr i=uN=?n_WDtg}8wf*J&w6DSvIFop<&rp5!ks6#oxbQI`k+ diff --git a/Windows/codecs/include/opus/opusfile.h b/Windows/codecs/include/opus/opusfile.h index 4ac029ad..299ab20a 100644 --- a/Windows/codecs/include/opus/opusfile.h +++ b/Windows/codecs/include/opus/opusfile.h @@ -49,8 +49,55 @@ Several additional sections are not tied to the main API. - \ref stream_callbacks - \ref header_info - - \ref error_codes*/ + - \ref error_codes + \section Overview + + The libopusfile API always decodes files to 48 kHz. + The original sample rate is not preserved by the lossy compression, though + it is stored in the header to allow you to resample to it after decoding + (the libopusfile API does not currently provide a resampler, + but the + the + Speex resampler is a good choice if you need one). + In general, if you are playing back the audio, you should leave it at + 48 kHz, provided your audio hardware supports it. + When decoding to a file, it may be worth resampling back to the original + sample rate, so as not to surprise users who might not expect the sample + rate to change after encoding to Opus and decoding. + + Opus files can contain anywhere from 1 to 255 channels of audio. + The channel mappings for up to 8 channels are the same as the + Vorbis + mappings. + A special stereo API can convert everything to 2 channels, making it simple + to support multichannel files in a application which only has stereo + output. + Although the libopusfile ABI provides support for the theoretical + maximum number of channels, the current implementation does not support + files with more than 8 channels, as they do not have well-defined channel + mappings. + + Like all Ogg files, Opus files may be "chained". + That is, multiple Opus files may be combined into a single, longer file just + by concatenating the original files. + This is commonly done in internet radio streaming, as it allows the title + and artist to be updated each time the song changes, since each link in the + chain includes its own set of metadata. + + libopusfile fully supports chained files. + It will decode the first Opus stream found in each link of a chained file + (ignoring any other streams that might be concurrently multiplexed with it, + such as a video stream). + + The channel count can also change between links, but if your application is + not prepared to deal with this, it can use the stereo API to ensure the + audio from all links will always get decoded into a common format. + Since libopusfile always decodes to 48 kHz, you do not have to + worry about the sample rate changing between links (as was possible with + Vorbis). + This makes application support for chained files with libopusfile + very easy.*/ # if defined(__cplusplus) extern "C" { @@ -182,8 +229,9 @@ struct OpusHead{ opus_uint32 input_sample_rate; /**The gain to apply to the decoded output, in dB, as a Q8 value in the range -32768...32767. - The decoder will automatically scale the output by - pow(10,output_gain/(20.0*256)).*/ + The libopusfile API will automatically apply this gain to the + decoded output before returning it, scaling it by + pow(10,output_gain/(20.0*256)).*/ int output_gain; /**The channel mapping family, in the range 0...255. Channel mapping family 0 covers mono or stereo in a single stream. @@ -385,6 +433,24 @@ const char *opus_tags_query(const OpusTags *_tags,const char *_tag,int _count) int opus_tags_query_count(const OpusTags *_tags,const char *_tag) OP_ARG_NONNULL(1) OP_ARG_NONNULL(2); +/**Get the track gain from an R128_TRACK_GAIN tag, if one was specified. + This searches for the first R128_TRACK_GAIN tag with a valid signed, + 16-bit decimal integer value and returns the value. + This routine is exposed merely for convenience for applications which wish + to do something special with the track gain (i.e., display it). + If you simply wish to apply the track gain instead of the header gain, you + can use op_set_gain_offset() with an #OP_TRACK_GAIN type and no offset. + \param _tags An initialized #OpusTags structure. + \param[out] _gain_q8 The track gain, in 1/256ths of a dB. + This will lie in the range [-32768,32767], and should + be applied in addition to the header gain. + On error, no value is returned, and the previous + contents remain unchanged. + \return 0 on success, or a negative value on error. + \retval OP_EFALSE There was no track gain available in the given tags.*/ +int opus_tags_get_track_gain(const OpusTags *_tags,int *_gain_q8) + OP_ARG_NONNULL(1) OP_ARG_NONNULL(2); + /**Clears the #OpusTags structure. This should be called on an #OpusTags structure after it is no longer needed. @@ -841,7 +907,11 @@ OP_WARN_UNUSED_RESULT OggOpusFile *op_open_url(const char *_url,
The first or last timestamp in a link failed basic validity checks.
- \return A freshly opened \c OggOpusFile, or NULL on error.*/ + \return A freshly opened \c OggOpusFile, or NULL on error. + libopusfile does not take ownership of the source + if the call fails. + The calling application is responsible for closing the source if + this call returns an error.*/ OP_WARN_UNUSED_RESULT OggOpusFile *op_open_callbacks(void *_source, const OpusFileCallbacks *_cb,const unsigned char *_initial_data, size_t _initial_bytes,int *_error) OP_ARG_NONNULL(2); @@ -974,7 +1044,11 @@ OP_WARN_UNUSED_RESULT OggOpusFile *op_test_url(const char *_url, the failure code. See op_open_callbacks() for a full list of failure codes. - \return A partially opened \c OggOpusFile, or NULL on error.*/ + \return A partially opened \c OggOpusFile, or NULL on error. + libopusfile does not take ownership of the source + if the call fails. + The calling application is responsible for closing the source if + this call returns an error.*/ OP_WARN_UNUSED_RESULT OggOpusFile *op_test_callbacks(void *_source, const OpusFileCallbacks *_cb,const unsigned char *_initial_data, size_t _initial_bytes,int *_error) OP_ARG_NONNULL(2); @@ -1303,11 +1377,12 @@ int op_pcm_seek(OggOpusFile *_of,ogg_int64_t _pcm_offset) OP_ARG_NONNULL(1); clipping and other issues which might be avoided entirely if, e.g., you scale down the volume at some other stage. However, if you intend to direct consume 16-bit samples, the conversion in - libopusfile provides noise-shaping dithering API. + libopusfile provides noise-shaping dithering and, if compiled + against libopus 1.1 or later, soft-clipping prevention. libopusfile can also be configured at compile time to use the fixed-point libopus API. - If so, the floating-point API may also be disabled. + If so, libopusfile's floating-point API may also be disabled. In that configuration, nothing in libopusfile will use any floating-point operations, to simplify support on devices without an adequate FPU. @@ -1323,13 +1398,46 @@ int op_pcm_seek(OggOpusFile *_of,ogg_int64_t _pcm_offset) OP_ARG_NONNULL(1); appropriately.*/ /*@{*/ +/**Gain offset type that indicates that the provided offset is relative to the + header gain. + This is the default.*/ +#define OP_HEADER_GAIN (0) + +/**Gain offset type that indicates that the provided offset is relative to the + R128_TRACK_GAIN value (if any), in addition to the header gain.*/ +#define OP_TRACK_GAIN (3008) + +/**Gain offset type that indicates that the provided offset should be used as + the gain directly, without applying any the header or track gains.*/ +#define OP_ABSOLUTE_GAIN (3009) + +/**Sets the gain to be used for decoded output. + By default, the gain in the header is applied with no additional offset. + The total gain (including header gain and/or track gain, if applicable, and + this offset), will be clamped to [-32768,32767]/256 dB. + This is more than enough to saturate or underflow 16-bit PCM. + \note The new gain will not be applied to any already buffered, decoded + output. + This means you cannot change it sample-by-sample, as at best it will be + updated packet-by-packet. + It is meant for setting a target volume level, rather than applying smooth + fades, etc. + \param _of The \c OggOpusFile on which to set the gain offset. + \param _gain_type One of #OP_HEADER_GAIN, #OP_TRACK_GAIN, or + #OP_ABSOLUTE_GAIN. + \param _gain_offset_q8 The gain offset to apply, in 1/256ths of a dB. + \return 0 on success or a negative value on error. + \retval #OP_EINVAL The \a _gain_type was unrecognized.*/ +int op_set_gain_offset(OggOpusFile *_of, + int _gain_type,opus_int32 _gain_offset_q8); + /**Reads more samples from the stream. \note Although \a _buf_size must indicate the total number of values that can be stored in \a _pcm, the return value is the number of samples per channel. This is done because
    -
  1. The channel count cannot be known a prior (reading more samples might +
  2. The channel count cannot be known a priori (reading more samples might advance us into the next link, with a different channel count), so \a _buf_size cannot also be in units of samples per channel,
  3. Returning the samples per channel matches the libopus API @@ -1346,8 +1454,8 @@ int op_pcm_seek(OggOpusFile *_of,ogg_int64_t _pcm_offset) OP_ARG_NONNULL(1);
\param _of The \c OggOpusFile from which to read. \param[out] _pcm A buffer in which to store the output PCM samples, as - signed native-endian 16-bit values with a nominal - range of [-32768,32767). + signed native-endian 16-bit values at 48 kHz + with a nominal range of [-32768,32767). Multiple channels are interleaved using the Vorbis channel ordering. @@ -1411,7 +1519,7 @@ OP_WARN_UNUSED_RESULT int op_read(OggOpusFile *_of, can be stored in \a _pcm, the return value is the number of samples per channel.
    -
  1. The channel count cannot be known a prior (reading more samples might +
  2. The channel count cannot be known a priori (reading more samples might advance us into the next link, with a different channel count), so \a _buf_size cannot also be in units of samples per channel,
  3. Returning the samples per channel matches the libopus API @@ -1428,7 +1536,7 @@ OP_WARN_UNUSED_RESULT int op_read(OggOpusFile *_of,
\param _of The \c OggOpusFile from which to read. \param[out] _pcm A buffer in which to store the output PCM samples as - signed floats with a nominal range of + signed floats at 48 kHz with a nominal range of [-1.0,1.0]. Multiple channels are interleaved using the Vorbis @@ -1497,8 +1605,8 @@ OP_WARN_UNUSED_RESULT int op_read_float(OggOpusFile *_of, op_read(). \param _of The \c OggOpusFile from which to read. \param[out] _pcm A buffer in which to store the output PCM samples, as - signed native-endian 16-bit values with a nominal - range of [-32768,32767). + signed native-endian 16-bit values at 48 kHz + with a nominal range of [-32768,32767). The left and right channels are interleaved in the buffer. This must have room for at least \a _buf_size values. @@ -1558,7 +1666,7 @@ OP_WARN_UNUSED_RESULT int op_read_stereo(OggOpusFile *_of, op_read_float(). \param _of The \c OggOpusFile from which to read. \param[out] _pcm A buffer in which to store the output PCM samples, as - signed floats with a nominal range of + signed floats at 48 kHz with a nominal range of [-1.0,1.0]. The left and right channels are interleaved in the buffer. diff --git a/Windows/codecs/x64/libopusfile-0.dll b/Windows/codecs/x64/libopusfile-0.dll index be92c8bf1cb25fbe1b9f0b81184ef938559b9680..9eaf8ed1ff445b263dc0638543143c68517e9259 100644 GIT binary patch delta 6681 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 ZFAo+C8R7Gpfh|8)dM34=Cr4WS{})E0iWC3< delta 6054 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 diff --git a/Windows/codecs/x64/libopusfile.dll.a b/Windows/codecs/x64/libopusfile.dll.a index 481fd7f976aec430cee53b0b3716f004faba927b..6a78f5312bab69308b51bd1a46ae4f9a373795f6 100644 GIT binary patch delta 2099 zcmai#ZA_b06vxkfTChT4D`WI&X}bcI0)v&l&_W~xH)QM$#sqDE^<}&ihJ(%4WquJf zar(h5%Z@R|?1OPJ@q;GlHAame$utXbQxjv1nuvY)pM3RtL+z2MHtbE60YCzv{0>0HK7h&( z1vU!+XV+oD?$-f0_U{Ew7XZg~LE!lWfKzAHSb~Or(0J%20FM6~K}#h7r*%-U?;-%F zeN7O$3&82vDTo~h;B;LTJp2^^r-uc{>FpKlUk2dx-Qp|(9ArD=9BLIDnF8P(W4quC zF+B;$ICOx+R$>iLbv&qG?PiK?4bS9hJF4Omv_eo<; zGfghe%w(r?g&9fqA`A4S`Aw4&jZk8F)P%hjANH45S@PXMQ{@9he_OFGOKw&XH>Ut z&D_|lBN5S?tU0GHmazT==*D!YfmGvj9zXFQvH3|8e#xFgILxAO;W=B_(F8>jhQX;9 zaJjl>%&qwXFtNL$J$G-7@S6f7>{`Uf|J3A)zZO5MwdtwkyT%Kum99F?1f8Cpy2SH} zA33e~t=meg+!lf(UR_3>n!_H2;9ssCIKJmke6?OzMK*o(#kxv@Kl=0qwftYNXBln4 zVbgAUr=gUf%dgMmnWgSN6Cw4~-dI9#qFE9P^{AsmO%()R*(-_pnK;-~hOf13;&*KZ z_4cTV;H8!_daLz8f`133xKiac^qmPaVP&fbY@jD3O)Y3{3|%odA8>9aB1cChR0O+Dz2RI`wa)7*a^Y)fD3PQ8k`4)OoU$UFcYq9A8G8oPu z9W9@l+4Y!-I3mG((`tqWJDzvC*;T^q!lA9^HrnM&KqK9(wrh`Ui%6U;n(Ofpyn8^B z^4&sLds!nj_RG>%=JB8X8#q27)kGB3qBuH2#iHRR+V0{9S^wTRD)}u)mkyc9l_7(o zZFThs>%Qo)LDKwf9%KH_KlUG~RKa&gr5Fq8m_5O&fA0xN65+FqzCFU0=^Hcnx;<)F z@Y#uNqbl{qy$ZgOkVXrsJ3sya!LL)&3ZgOZ5&Zp>G|Jb#nJ7`zaA&a^=2KpJ>Ngz7 z$cr(>H~9xqW5xP}t$A%=TEQ>o^=a(5H!J8^Fa+`OT(#op3>Axl$9aF=t*H4wc@eFl NCvPT9jgX5Eue5KLrTJ6`?r* zN%d7ljR7Fp{FEZ{E`X%&h9YhONbG$M^U&}yI5hnZAW1|O&7zs)v9pTDZvjYJR~4xk zfFv`n$ci{g#}A4wp;yw=ujpFnPZ`qZom#AONbc?v zGy1tpo81|4en8B=vezT7xIFyjU>vP*%xErHc7R%8|}Lr_JPMbnh3#Y%3vUEo_59 z{(T-L#Vg}4Myrte4rrHZ_s2oe?u{38JC+N?_IMcS+KbxkzD+(l5l6Z^=5e_ry_OR% zCH<1_;cgZcChyTZhdds6s?e0rpl=R)O1Wbnnl8}om)Ciwj{PHUw$uPb?#0u`4ay$V uX}mboY((1IGbI*vF=_GY>?VUw&3Lp)YwznZgO+A>DQCc;DFZK_$>V=$wzCuf diff --git a/Windows/codecs/x64/libopusfile.lib b/Windows/codecs/x64/libopusfile.lib index a3a5d1596dc7aa741b0c54f64c315748068dbbbe..68c5842500e665088ad7042f06565daedcdfdb0e 100644 GIT binary patch delta 2232 zcmZvdU1%It6vxjd=A%uz+3f7j?DyBqW;aQTlbBljAySGIp;Uq*QIRpVX;51mlPyBg zCbUoxKPWx5AVMEY!HNs}Pz>#Z4??YIq`vh<2&wqi1X554=>OiCICsVbemUX(&pr2l z&)j?S`S_nNU&?gv8MB`reP;JlykO|_qxRm>lKgpdI}tfV{Wg&{OO$95=_!wkh=L6l zV}?kwj0jRkJr)r`+VZ%JD8M{H=A_38BFN59;FsX8OKu;LmFD^bPQLZ7l#q62&S^|e&pAPXANA^dsc$>K(Dg&;0F2oG9e@#>0K1=P zRwHUA@F~&#i(muH7(~n9D2~J;u+l`A!3H>)AzA?wS)#jOUykSo(DRrN*1@p?(S2~B zNOTieC8Db(dWAa6L=CVECeWpOV9X@C2IBaP=fOHSUL|?}jtmgp24gj%>!4C6x&k@} ziOzvl;PBtwPP(BYZYIR7KS<;{N2Nw*3hYdITps`04-0W}E z!PT-mm`?3hGkuE}Qi{dR>@_u8_%2pGd+Ggt86mt;bA_MMhl0Ycj4K?v^;uA5t# zP?=LjH@lWqb}Ac|bA>OnicMAM$^`_s{+V2;{*qVbVK5sX#1mf1Z&Bv^yi#VfHzNh5 zlWK3iDk#}%Z+eQM-fZsnLNTyg*ZbpQsLZCtsZzkA@BO#`2}!LWjwdc5W$B46-XxBs zHU2%L1-}`5Z4>iw!70aw%gW)x?xlpsgYx`c`AL5!Bu&f`Qo&uVF*Vn~5>-D*^aDpi z*1#JugLv4;;vcQRGV&5gxdge&`>TpcyY9}!^F{;wbyfMUYS9{-14>c5 zZg78AGli>R%&bfQTmEC77g22)xNOEE-YXk>s{? dJlHO^$WC5Ui(t31fY|LWQQ+4uojg)G8_N^ delta 1998 zcmZvcOK4nW6vzLQG_i?^dECjpbLV*{^U5T(od%i*O|ijEHVUm-C}O7tsf!jGiEctL zgcd2Kh>@sz1~ z|L^hp{0GNAOzxeSnwXwGI6f}xw!Lz2dUC?k-^p$OuLJ#az~Cjox(f`|0@i4W9S^uj ztJw8%P6L_;v?MVTaD$e(%+p+;RXp)Yt}Fma#kNoCIH1|2CF%VE{CS#WdIFYc6+1rJ zc|fy8OLA;Lvq4L|Y`|q&1shka-4XuwTcQYZ#oqb0@8fMr_6W1rFqK*Jg( zQl^TU+q9&zFW@>Y8L<_0ajn-H*|w$j##YDIG1++L$LRJ8xI0OtCEOM}2&3#bhN zYb4H67s)O;?EnwROaiz;;x2H3JRu87V4ECI0h?rhn)#$B11ympGEbeh$V?8{$l+yV zJ>W9gC1>-%BXV>YxJily;2PoGJgndMCTze7_xke|hCt zA_nZ0J65W3W#F$^E1DeVwdZVEv`ejkb=#5q1wV5vWei%& z__BPGGRmpwe^P#QU)r2Lh+a*b?FNf~nv2c4Z)D86LFB#6|D+$z8jH>J&$DK_-O|O) zg_LaRaz1Bdn7Y{1Wwy_j^Ik-k=A>slW71{=KYK>G^`QTk@3k)SlX@|t8>fHTr6>1`Mwe!0US>;?%&R3olP?E`<*Sk@6vyZF(S`Z=pdgj9 zQCOWXo@4Fy=q}2~Wuy3J#gRYCR*zDLPZ3H~M^5$f;|b;5{7wJ> diff --git a/Windows/codecs/x86/libopusfile-0.dll b/Windows/codecs/x86/libopusfile-0.dll index 7d3f3ff66bed2921556ffa7291a742e9d630d3da..e52b941b325b1d235c59a3bf067faed8a3f6fde0 100644 GIT binary patch delta 5360 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 SEFY2E<)iYaat;pB;{OB*KVHQE diff --git a/Windows/codecs/x86/libopusfile.dll.a b/Windows/codecs/x86/libopusfile.dll.a index aace324b2e97eb9c40adfd2a56b0e695fa74d797..2e749c509a7c1f081945b480faeca4861108c672 100644 GIT binary patch delta 1886 zcmai!OKcle6hQBrg2-oFJB+`HGEjs=F*LYIG&U3L!+vdh-jz+4SJxaQ2f}aIHU^j+#%Q0RUzI>aGFQKLltjOI+Up5FVi>UL2En zKL#NDKS)9m0HS3|(s~1cXuB_o3mws3lyqDL=(xHDkh&}BRso0ud)x85!Co}(2u_<6_zZUPI_r>ZgsX? z_0`2My9Pga?$$nSxVO|NN8g`$dLb}hcbx6q4xX)d0DgN2CxVPrBPn?SREhh!$slcT8+Geo`;jPiijkv%ny=X@$& z3aCswxVvpT1K<|}Dt;ddGi{`X(MBx9)s`*(b;ymrFk}3Fv$KCRn|3@B5wqEA%I~*r zu>`&wP1Kw)Zp1Xk;&>#D`B7zyi#nTps6{PJ9T)kU-&H)msZs}K$pQH%OFK<5Q0xCEg8%Q18VFpRUDqK^O!b1}!#2f(n-bL?LM z7%mg1T=p^C4>?uK0E}uKBMIPb;nds!VE7g}{#O8uz)w!d1Hfn;a11|2fD={hca!Fj- zU#S}99(E6vxj@)6i08+UX4QX5M_g`FisKjh%`Eq>3Sp$U-9+B&i|1HiouH9I74S zsx}f9Zj8p$vJm&O{UgU{rbYY~nZ;v5<6WfW%A_{E~MXE$QXNaOVBwC$Fa2XQB z42MNX5cfMYAZ^wp`e7o$6-baU9WFtFiA%R(UKoS#_at@1- zpd55K4{7s6Qkf+ZAa7-z`l)(?BrA|B{Kw$Ct)TyhuH31nH9dK{VV#|tnmg4b>+Gxr zsp?v-?p0rT8p`HJlkc4oCfo1aoYkD1p0m6bZUkcd#kM=0$G`vC@z-$v8zEE?A)47q zbR$Ys*N83yBSy3c{BfcNSObT3qAS2m5M2V1B+&)%7)+&zR>7e((N$n(h%N#@E>06X z1Shj}oNi}{4xo3-ppb_X@Z(GxU>zJQ5?u#%9QZQGl~4!>mWj@TCt$V$UvL7qb_G~` zwAbnyrW$|WJKhaRU3`D=<<@K4U+@PzdN{Kq<_mf|)oKK~JN@{B{+sjW?s=K06!QNq*|#5B*_IYXz^<&n21iW9?Pfa4oIz z@0v9Htto5ShOwA5jK}t>5weJ1Rpms~Ex8u=q>=9ZGHC`1MxGK-%?e zN6#xdzLu72Z>FEqgz=10X}bxxG9685?`zC(z1!>kXt*_Sdt1fq7Rn`6IT5XyPo{6IB1hb$s73@F3z zh6CDewO{(zel2Wa+S20_DDM$E0X_s3huA|r` e#xU*Tx61$1quu;l*;~Ke1QBgFVTea7L;nJKuS7)v delta 1955 zcmaKsO=whC6vzJ=NtkFIC-Y|VX5P%3k7T|><4mn%W06`5Vkku0MM#^)q>JLFF|~?_ z(1cQ5)(R(!F5DEX*hM8}=%Q3yr7mK@xC^u@T`0vxXz51KK>zpMH=R2}+JWC3I3NFe z&i#06(|^2s#R)cEYfMbk8vEshJ-qZvt?_Es`_1hHFbjmA0oFkvdLD>vXoimh9=B+T zUGup{OX3lqMOwvEO=1S{SfwRS!{;U~NiOC2r&!jc1^|z9w2CJhcN*}xLrc;W^0-b* zGHk%(BCXQ9 zfrA!sJ_>BafTP2}EmE_AYa|i}7RggGlK@sp!vSuRd=gkD18ngec|xXL;0|e|f$Joa z0WOjkj;8v(A8;3yX%n`DlMxK550*a#Uf0yjvi1Y9P8GH`)xl3BSw z*p!XInbwt^9|dHq|0PKb?2-EJzgkB^fA`5`c$GVGscQ#hZK&39gx$C}k{7a9YaE8KlTTF?i}i9A5QA*`Q%$2r^>#U)SWy|8k7I&>g?In>)qLV zD?0mb%Fqt`*@s*syY2kWbhdTf^fsAaZ0FoEo$d1Zj8VRl(Y-#%{Kq~_W{qCk`|wk? zXCK;=?aLY2?FGNd84I>2i;ZmKykt7n{!({PT_C69h+s#a&~ndynBOjnNQ>z$B)hTbLRn?#zIbZ#IjpQIw)8l1(`$TBG-^}_yc z4YSXzd|fd5WMxeCsVZ~rK0iEjwkdU|VyG1L0{jwSL_RMX`>2}aBk|VfhXkYYyl7ly z73Qt=!u<9iFAF7O{liJVq>>I-7%s@~CF7y>iWg@;@el<(&Wk