/* libFLAC - Free Lossless Audio Codec library
* Copyright (C) 2000,2001,2002,2003,2004,2005 Josh Coalson
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* - Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* - Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* - Neither the name of the Xiph.org Foundation nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef FLAC__STREAM_ENCODER_H
#define FLAC__STREAM_ENCODER_H
#include "export.h"
#include "format.h"
#include "stream_decoder.h"
#ifdef __cplusplus
extern "C" {
#endif
/** \file include/FLAC/stream_encoder.h
*
* \brief
* This module contains the functions which implement the stream
* encoder.
*
* See the detailed documentation in the
* \link flac_stream_encoder stream encoder \endlink module.
*/
/** \defgroup flac_encoder FLAC/ *_encoder.h: encoder interfaces
* \ingroup flac
*
* \brief
* This module describes the two encoder layers provided by libFLAC.
*
* For encoding FLAC streams, libFLAC provides three layers of access. The
* lowest layer is non-seekable stream-level encoding, the next is seekable
* stream-level encoding, and the highest layer is file-level encoding. The
* interfaces are described in the \link flac_stream_encoder stream encoder
* \endlink, \link flac_seekable_stream_encoder seekable stream encoder
* \endlink, and \link flac_file_encoder file encoder \endlink modules
* respectively. Typically you will choose the highest layer that your input
* source will support.
* The stream encoder relies on callbacks for writing the data and
* metadata. The file encoder provides these callbacks internally and you
* need only supply the filename.
*
* The stream encoder relies on callbacks for writing the data and has no
* provisions for seeking the output. The seekable stream encoder wraps
* the stream encoder and also automaticallay handles the writing back of
* metadata discovered while encoding. However, you must provide extra
* callbacks for seek-related operations on your output, like seek and
* tell. The file encoder wraps the seekable stream encoder and supplies
* all of the callbacks internally, simplifying the processing of standard
* files. The only callback exposed is for progress reporting, and that
* is optional.
*/
/** \defgroup flac_stream_encoder FLAC/stream_encoder.h: stream encoder interface
* \ingroup flac_encoder
*
* \brief
* This module contains the functions which implement the stream
* encoder.
*
* The basic usage of this encoder is as follows:
* - The program creates an instance of an encoder using
* FLAC__stream_encoder_new().
* - The program overrides the default settings and sets callbacks using
* FLAC__stream_encoder_set_*() functions.
* - The program initializes the instance to validate the settings and
* prepare for encoding using FLAC__stream_encoder_init().
* - The program calls FLAC__stream_encoder_process() or
* FLAC__stream_encoder_process_interleaved() to encode data, which
* subsequently calls the callbacks when there is encoder data ready
* to be written.
* - The program finishes the encoding with FLAC__stream_encoder_finish(),
* which causes the encoder to encode any data still in its input pipe,
* call the metadata callback with the final encoding statistics, and
* finally reset the encoder to the uninitialized state.
* - The instance may be used again or deleted with
* FLAC__stream_encoder_delete().
*
* In more detail, the stream encoder functions similarly to the
* \link flac_stream_decoder stream decoder \endlink, but has fewer
* callbacks and more options. Typically the user will create a new
* instance by calling FLAC__stream_encoder_new(), then set the necessary
* parameters and callbacks with FLAC__stream_encoder_set_*(), and
* initialize it by calling FLAC__stream_encoder_init().
*
* Unlike the decoders, the stream encoder has many options that can
* affect the speed and compression ratio. When setting these parameters
* you should have some basic knowledge of the format (see the
* user-level documentation
* or the formal description). The
* FLAC__stream_encoder_set_*() functions themselves do not validate the
* values as many are interdependent. The FLAC__stream_encoder_init()
* function will do this, so make sure to pay attention to the state
* returned by FLAC__stream_encoder_init() to make sure that it is
* FLAC__STREAM_ENCODER_OK. Any parameters that are not set before
* FLAC__stream_encoder_init() will take on the defaults from the
* constructor.
*
* The user must provide function pointers for the following callbacks:
*
* - Write callback - This function is called by the encoder anytime there
* is raw encoded data to write. It may include metadata mixed with
* encoded audio frames and the data is not guaranteed to be aligned on
* frame or metadata block boundaries.
* - Metadata callback - This function is called once at the end of
* encoding with the populated STREAMINFO structure. This is so file
* encoders can seek back to the beginning of the file and write the
* STREAMINFO block with the correct statistics after encoding (like
* minimum/maximum frame size).
*
* The call to FLAC__stream_encoder_init() currently will also immediately
* call the write callback several times, once with the \c fLaC signature,
* and once for each encoded metadata block.
*
* After initializing the instance, the user may feed audio data to the
* encoder in one of two ways:
*
* - Channel separate, through FLAC__stream_encoder_process() - The user
* will pass an array of pointers to buffers, one for each channel, to
* the encoder, each of the same length. The samples need not be
* block-aligned.
* - Channel interleaved, through
* FLAC__stream_encoder_process_interleaved() - The user will pass a single
* pointer to data that is channel-interleaved (i.e. channel0_sample0,
* channel1_sample0, ... , channelN_sample0, channel0_sample1, ...).
* Again, the samples need not be block-aligned but they must be
* sample-aligned, i.e. the first value should be channel0_sample0 and
* the last value channelN_sampleM.
*
* When the user is finished encoding data, it calls
* FLAC__stream_encoder_finish(), which causes the encoder to encode any
* data still in its input pipe, and call the metadata callback with the
* final encoding statistics. Then the instance may be deleted with
* FLAC__stream_encoder_delete() or initialized again to encode another
* stream.
*
* For programs that write their own metadata, but that do not know the
* actual metadata until after encoding, it is advantageous to instruct
* the encoder to write a PADDING block of the correct size, so that
* instead of rewriting the whole stream after encoding, the program can
* just overwrite the PADDING block. If only the maximum size of the
* metadata is known, the program can write a slightly larger padding
* block, then split it after encoding.
*
* Make sure you understand how lengths are calculated. All FLAC metadata
* blocks have a 4 byte header which contains the type and length. This
* length does not include the 4 bytes of the header. See the format page
* for the specification of metadata blocks and their lengths.
*
* \note
* The "set" functions may only be called when the encoder is in the
* state FLAC__STREAM_ENCODER_UNINITIALIZED, i.e. after
* FLAC__stream_encoder_new() or FLAC__stream_encoder_finish(), but
* before FLAC__stream_encoder_init(). If this is the case they will
* return \c true, otherwise \c false.
*
* \note
* FLAC__stream_encoder_finish() resets all settings to the constructor
* defaults, including the callbacks.
*
* \{
*/
/** State values for a FLAC__StreamEncoder
*
* The encoder's state can be obtained by calling FLAC__stream_encoder_get_state().
*/
typedef enum {
FLAC__STREAM_ENCODER_OK = 0,
/**< The encoder is in the normal OK state. */
FLAC__STREAM_ENCODER_VERIFY_DECODER_ERROR,
/**< An error occurred in the underlying verify stream decoder;
* check FLAC__stream_encoder_get_verify_decoder_state().
*/
FLAC__STREAM_ENCODER_VERIFY_MISMATCH_IN_AUDIO_DATA,
/**< The verify decoder detected a mismatch between the original
* audio signal and the decoded audio signal.
*/
FLAC__STREAM_ENCODER_INVALID_CALLBACK,
/**< The encoder was initialized before setting all the required callbacks. */
FLAC__STREAM_ENCODER_INVALID_NUMBER_OF_CHANNELS,
/**< The encoder has an invalid setting for number of channels. */
FLAC__STREAM_ENCODER_INVALID_BITS_PER_SAMPLE,
/**< The encoder has an invalid setting for bits-per-sample.
* FLAC supports 4-32 bps but the reference encoder currently supports
* only up to 24 bps.
*/
FLAC__STREAM_ENCODER_INVALID_SAMPLE_RATE,
/**< The encoder has an invalid setting for the input sample rate. */
FLAC__STREAM_ENCODER_INVALID_BLOCK_SIZE,
/**< The encoder has an invalid setting for the block size. */
FLAC__STREAM_ENCODER_INVALID_MAX_LPC_ORDER,
/**< The encoder has an invalid setting for the maximum LPC order. */
FLAC__STREAM_ENCODER_INVALID_QLP_COEFF_PRECISION,
/**< The encoder has an invalid setting for the precision of the quantized linear predictor coefficients. */
FLAC__STREAM_ENCODER_MID_SIDE_CHANNELS_MISMATCH,
/**< Mid/side coding was specified but the number of channels is not equal to 2. */
FLAC__STREAM_ENCODER_MID_SIDE_SAMPLE_SIZE_MISMATCH,
/**< Deprecated. */
FLAC__STREAM_ENCODER_ILLEGAL_MID_SIDE_FORCE,
/**< Loose mid/side coding was specified but mid/side coding was not. */
FLAC__STREAM_ENCODER_BLOCK_SIZE_TOO_SMALL_FOR_LPC_ORDER,
/**< The specified block size is less than the maximum LPC order. */
FLAC__STREAM_ENCODER_NOT_STREAMABLE,
/**< The encoder is bound to the "streamable subset" but other settings violate it. */
FLAC__STREAM_ENCODER_FRAMING_ERROR,
/**< An error occurred while writing the stream; usually, the write_callback returned an error. */
FLAC__STREAM_ENCODER_INVALID_METADATA,
/**< The metadata input to the encoder is invalid, in one of the following ways:
* - FLAC__stream_encoder_set_metadata() was called with a null pointer but a block count > 0
* - One of the metadata blocks contains an undefined type
* - It contains an illegal CUESHEET as checked by FLAC__format_cuesheet_is_legal()
* - It contains an illegal SEEKTABLE as checked by FLAC__format_seektable_is_legal()
* - It contains more than one SEEKTABLE block or more than one VORBIS_COMMENT block
*/
FLAC__STREAM_ENCODER_FATAL_ERROR_WHILE_ENCODING,
/**< An error occurred while writing the stream; usually, the write_callback returned an error. */
FLAC__STREAM_ENCODER_FATAL_ERROR_WHILE_WRITING,
/**< The write_callback returned an error. */
FLAC__STREAM_ENCODER_MEMORY_ALLOCATION_ERROR,
/**< Memory allocation failed. */
FLAC__STREAM_ENCODER_ALREADY_INITIALIZED,
/**< FLAC__stream_encoder_init() was called when the encoder was
* already initialized, usually because
* FLAC__stream_encoder_finish() was not called.
*/
FLAC__STREAM_ENCODER_UNINITIALIZED
/**< The encoder is in the uninitialized state. */
} FLAC__StreamEncoderState;
/** Maps a FLAC__StreamEncoderState to a C string.
*
* Using a FLAC__StreamEncoderState as the index to this array
* will give the string equivalent. The contents should not be modified.
*/
extern FLAC_API const char * const FLAC__StreamEncoderStateString[];
/** Return values for the FLAC__StreamEncoder write callback.
*/
typedef enum {
FLAC__STREAM_ENCODER_WRITE_STATUS_OK = 0,
/**< The write was OK and encoding can continue. */
FLAC__STREAM_ENCODER_WRITE_STATUS_FATAL_ERROR
/**< An unrecoverable error occurred. The encoder will return from the process call. */
} FLAC__StreamEncoderWriteStatus;
/** Maps a FLAC__StreamEncoderWriteStatus to a C string.
*
* Using a FLAC__StreamEncoderWriteStatus as the index to this array
* will give the string equivalent. The contents should not be modified.
*/
extern FLAC_API const char * const FLAC__StreamEncoderWriteStatusString[];
/***********************************************************************
*
* class FLAC__StreamEncoder
*
***********************************************************************/
struct FLAC__StreamEncoderProtected;
struct FLAC__StreamEncoderPrivate;
/** The opaque structure definition for the stream encoder type.
* See the \link flac_stream_encoder stream encoder module \endlink
* for a detailed description.
*/
typedef struct {
struct FLAC__StreamEncoderProtected *protected_; /* avoid the C++ keyword 'protected' */
struct FLAC__StreamEncoderPrivate *private_; /* avoid the C++ keyword 'private' */
} FLAC__StreamEncoder;
/** Signature for the write callback.
* See FLAC__stream_encoder_set_write_callback() for more info.
*
* \param encoder The encoder instance calling the callback.
* \param buffer An array of encoded data of length \a bytes.
* \param bytes The byte length of \a buffer.
* \param samples The number of samples encoded by \a buffer.
* \c 0 has a special meaning; see
* FLAC__stream_encoder_set_write_callback().
* \param current_frame The number of the current frame being encoded.
* \param client_data The callee's client data set through
* FLAC__stream_encoder_set_client_data().
* \retval FLAC__StreamEncoderWriteStatus
* The callee's return status.
*/
typedef FLAC__StreamEncoderWriteStatus (*FLAC__StreamEncoderWriteCallback)(const FLAC__StreamEncoder *encoder, const FLAC__byte buffer[], unsigned bytes, unsigned samples, unsigned current_frame, void *client_data);
/** Signature for the metadata callback.
* See FLAC__stream_encoder_set_metadata_callback() for more info.
*
* \param encoder The encoder instance calling the callback.
* \param metadata The final populated STREAMINFO block.
* \param client_data The callee's client data set through
* FLAC__stream_encoder_set_client_data().
*/
typedef void (*FLAC__StreamEncoderMetadataCallback)(const FLAC__StreamEncoder *encoder, const FLAC__StreamMetadata *metadata, void *client_data);
/***********************************************************************
*
* Class constructor/destructor
*
***********************************************************************/
/** Create a new stream encoder instance. The instance is created with
* default settings; see the individual FLAC__stream_encoder_set_*()
* functions for each setting's default.
*
* \retval FLAC__StreamEncoder*
* \c NULL if there was an error allocating memory, else the new instance.
*/
FLAC_API FLAC__StreamEncoder *FLAC__stream_encoder_new();
/** Free an encoder instance. Deletes the object pointed to by \a encoder.
*
* \param encoder A pointer to an existing encoder.
* \assert
* \code encoder != NULL \endcode
*/
FLAC_API void FLAC__stream_encoder_delete(FLAC__StreamEncoder *encoder);
/***********************************************************************
*
* Public class method prototypes
*
***********************************************************************/
/** Set the "verify" flag. If \c true, the encoder will verify it's own
* encoded output by feeding it through an internal decoder and comparing
* the original signal against the decoded signal. If a mismatch occurs,
* the process call will return \c false. Note that this will slow the
* encoding process by the extra time required for decoding and comparison.
*
* \default \c false
* \param encoder An encoder instance to set.
* \param value Flag value (see above).
* \assert
* \code encoder != NULL \endcode
* \retval FLAC__bool
* \c false if the encoder is already initialized, else \c true.
*/
FLAC_API FLAC__bool FLAC__stream_encoder_set_verify(FLAC__StreamEncoder *encoder, FLAC__bool value);
/** Set the "streamable subset" flag. If \c true, the encoder will comply
* with the subset (see the format specification) and will check the
* settings during FLAC__stream_encoder_init() to see if all settings
* comply. If \c false, the settings may take advantage of the full
* range that the format allows.
*
* Make sure you know what it entails before setting this to \c false.
*
* \default \c true
* \param encoder An encoder instance to set.
* \param value Flag value (see above).
* \assert
* \code encoder != NULL \endcode
* \retval FLAC__bool
* \c false if the encoder is already initialized, else \c true.
*/
FLAC_API FLAC__bool FLAC__stream_encoder_set_streamable_subset(FLAC__StreamEncoder *encoder, FLAC__bool value);
/** Set to \c true to enable mid-side encoding on stereo input. The
* number of channels must be 2. Set to \c false to use only
* independent channel coding.
*
* \default \c false
* \param encoder An encoder instance to set.
* \param value Flag value (see above).
* \assert
* \code encoder != NULL \endcode
* \retval FLAC__bool
* \c false if the encoder is already initialized, else \c true.
*/
FLAC_API FLAC__bool FLAC__stream_encoder_set_do_mid_side_stereo(FLAC__StreamEncoder *encoder, FLAC__bool value);
/** Set to \c true to enable adaptive switching between mid-side and
* left-right encoding on stereo input. The number of channels must
* be 2. Set to \c false to use exhaustive searching. In either
* case, the mid/side stereo setting must be \c true.
*
* \default \c false
* \param encoder An encoder instance to set.
* \param value Flag value (see above).
* \assert
* \code encoder != NULL \endcode
* \retval FLAC__bool
* \c false if the encoder is already initialized, else \c true.
*/
FLAC_API FLAC__bool FLAC__stream_encoder_set_loose_mid_side_stereo(FLAC__StreamEncoder *encoder, FLAC__bool value);
/** Set the number of channels to be encoded.
*
* \default \c 2
* \param encoder An encoder instance to set.
* \param value See above.
* \assert
* \code encoder != NULL \endcode
* \retval FLAC__bool
* \c false if the encoder is already initialized, else \c true.
*/
FLAC_API FLAC__bool FLAC__stream_encoder_set_channels(FLAC__StreamEncoder *encoder, unsigned value);
/** Set the sample resolution of the input to be encoded.
*
* \warning
* Do not feed the encoder data that is wider than the value you
* set here or you will generate an invalid stream.
*
* \default \c 16
* \param encoder An encoder instance to set.
* \param value See above.
* \assert
* \code encoder != NULL \endcode
* \retval FLAC__bool
* \c false if the encoder is already initialized, else \c true.
*/
FLAC_API FLAC__bool FLAC__stream_encoder_set_bits_per_sample(FLAC__StreamEncoder *encoder, unsigned value);
/** Set the sample rate (in Hz) of the input to be encoded.
*
* \default \c 44100
* \param encoder An encoder instance to set.
* \param value See above.
* \assert
* \code encoder != NULL \endcode
* \retval FLAC__bool
* \c false if the encoder is already initialized, else \c true.
*/
FLAC_API FLAC__bool FLAC__stream_encoder_set_sample_rate(FLAC__StreamEncoder *encoder, unsigned value);
/** Set the blocksize to use while encoding.
*
* \default \c 1152
* \param encoder An encoder instance to set.
* \param value See above.
* \assert
* \code encoder != NULL \endcode
* \retval FLAC__bool
* \c false if the encoder is already initialized, else \c true.
*/
FLAC_API FLAC__bool FLAC__stream_encoder_set_blocksize(FLAC__StreamEncoder *encoder, unsigned value);
/** Set the maximum LPC order, or \c 0 to use only the fixed predictors.
*
* \default \c 0
* \param encoder An encoder instance to set.
* \param value See above.
* \assert
* \code encoder != NULL \endcode
* \retval FLAC__bool
* \c false if the encoder is already initialized, else \c true.
*/
FLAC_API FLAC__bool FLAC__stream_encoder_set_max_lpc_order(FLAC__StreamEncoder *encoder, unsigned value);
/** Set the precision, in bits, of the quantized linear predictor
* coefficients, or \c 0 to let the encoder select it based on the
* blocksize.
*
* \note
* In the current implementation, qlp_coeff_precision + bits_per_sample must
* be less than 32.
*
* \default \c 0
* \param encoder An encoder instance to set.
* \param value See above.
* \assert
* \code encoder != NULL \endcode
* \retval FLAC__bool
* \c false if the encoder is already initialized, else \c true.
*/
FLAC_API FLAC__bool FLAC__stream_encoder_set_qlp_coeff_precision(FLAC__StreamEncoder *encoder, unsigned value);
/** Set to \c false to use only the specified quantized linear predictor
* coefficient precision, or \c true to search neighboring precision
* values and use the best one.
*
* \default \c false
* \param encoder An encoder instance to set.
* \param value See above.
* \assert
* \code encoder != NULL \endcode
* \retval FLAC__bool
* \c false if the encoder is already initialized, else \c true.
*/
FLAC_API FLAC__bool FLAC__stream_encoder_set_do_qlp_coeff_prec_search(FLAC__StreamEncoder *encoder, FLAC__bool value);
/** Deprecated. Setting this value has no effect.
*
* \default \c false
* \param encoder An encoder instance to set.
* \param value See above.
* \assert
* \code encoder != NULL \endcode
* \retval FLAC__bool
* \c false if the encoder is already initialized, else \c true.
*/
FLAC_API FLAC__bool FLAC__stream_encoder_set_do_escape_coding(FLAC__StreamEncoder *encoder, FLAC__bool value);
/** Set to \c false to let the encoder estimate the best model order
* based on the residual signal energy, or \c true to force the
* encoder to evaluate all order models and select the best.
*
* \default \c false
* \param encoder An encoder instance to set.
* \param value See above.
* \assert
* \code encoder != NULL \endcode
* \retval FLAC__bool
* \c false if the encoder is already initialized, else \c true.
*/
FLAC_API FLAC__bool FLAC__stream_encoder_set_do_exhaustive_model_search(FLAC__StreamEncoder *encoder, FLAC__bool value);
/** Set the minimum partition order to search when coding the residual.
* This is used in tandem with
* FLAC__stream_encoder_set_max_residual_partition_order().
*
* The partition order determines the context size in the residual.
* The context size will be approximately blocksize / (2 ^ order).
*
* Set both min and max values to \c 0 to force a single context,
* whose Rice parameter is based on the residual signal variance.
* Otherwise, set a min and max order, and the encoder will search
* all orders, using the mean of each context for its Rice parameter,
* and use the best.
*
* \default \c 0
* \param encoder An encoder instance to set.
* \param value See above.
* \assert
* \code encoder != NULL \endcode
* \retval FLAC__bool
* \c false if the encoder is already initialized, else \c true.
*/
FLAC_API FLAC__bool FLAC__stream_encoder_set_min_residual_partition_order(FLAC__StreamEncoder *encoder, unsigned value);
/** Set the maximum partition order to search when coding the residual.
* This is used in tandem with
* FLAC__stream_encoder_set_min_residual_partition_order().
*
* The partition order determines the context size in the residual.
* The context size will be approximately blocksize / (2 ^ order).
*
* Set both min and max values to \c 0 to force a single context,
* whose Rice parameter is based on the residual signal variance.
* Otherwise, set a min and max order, and the encoder will search
* all orders, using the mean of each context for its Rice parameter,
* and use the best.
*
* \default \c 0
* \param encoder An encoder instance to set.
* \param value See above.
* \assert
* \code encoder != NULL \endcode
* \retval FLAC__bool
* \c false if the encoder is already initialized, else \c true.
*/
FLAC_API FLAC__bool FLAC__stream_encoder_set_max_residual_partition_order(FLAC__StreamEncoder *encoder, unsigned value);
/** Deprecated. Setting this value has no effect.
*
* \default \c 0
* \param encoder An encoder instance to set.
* \param value See above.
* \assert
* \code encoder != NULL \endcode
* \retval FLAC__bool
* \c false if the encoder is already initialized, else \c true.
*/
FLAC_API FLAC__bool FLAC__stream_encoder_set_rice_parameter_search_dist(FLAC__StreamEncoder *encoder, unsigned value);
/** Set an estimate of the total samples that will be encoded.
* This is merely an estimate and may be set to \c 0 if unknown.
* This value will be written to the STREAMINFO block before encoding,
* and can remove the need for the caller to rewrite the value later
* if the value is known before encoding.
*
* \default \c 0
* \param encoder An encoder instance to set.
* \param value See above.
* \assert
* \code encoder != NULL \endcode
* \retval FLAC__bool
* \c false if the encoder is already initialized, else \c true.
*/
FLAC_API FLAC__bool FLAC__stream_encoder_set_total_samples_estimate(FLAC__StreamEncoder *encoder, FLAC__uint64 value);
/** Set the metadata blocks to be emitted to the stream before encoding.
* A value of \c NULL, \c 0 implies no metadata; otherwise, supply an
* array of pointers to metadata blocks. The array is non-const since
* the encoder may need to change the \a is_last flag inside them.
* Otherwise, the encoder will not modify or free the blocks. It is up
* to the caller to free the metadata blocks after encoding.
*
* \note
* The encoder stores only the \a metadata pointer; the passed-in array
* must survive at least until after FLAC__stream_encoder_init() returns.
* Do not modify the array or free the blocks until then.
*
* \note
* The STREAMINFO block is always written and no STREAMINFO block may
* occur in the supplied array.
*
* \note
* By default the encoder does not create a SEEKTABLE. If one is supplied
* in the \a metadata array it will be written verbatim. However by itself
* this is not very useful as the user will not know the stream offsets for
* the seekpoints ahead of time. You must use the seekable stream encoder
* to generate a legal seektable
* (see FLAC__seekable_stream_encoder_set_metadata())
*
* \note
* A VORBIS_COMMENT block may be supplied. The vendor string in it
* will be ignored. libFLAC will use it's own vendor string. libFLAC
* will not modify the passed-in VORBIS_COMMENT's vendor string, it
* will simply write it's own into the stream. If no VORBIS_COMMENT
* block is present in the \a metadata array, libFLAC will write an
* empty one, containing only the vendor string.
*
* \default \c NULL, 0
* \param encoder An encoder instance to set.
* \param metadata See above.
* \param num_blocks See above.
* \assert
* \code encoder != NULL \endcode
* \retval FLAC__bool
* \c false if the encoder is already initialized, else \c true.
*/
FLAC_API FLAC__bool FLAC__stream_encoder_set_metadata(FLAC__StreamEncoder *encoder, FLAC__StreamMetadata **metadata, unsigned num_blocks);
/** Set the write callback.
* The supplied function will be called by the encoder anytime there is raw
* encoded data ready to write. It may include metadata mixed with encoded
* audio frames and the data is not guaranteed to be aligned on frame or
* metadata block boundaries.
*
* The only duty of the callback is to write out the \a bytes worth of data
* in \a buffer to the current position in the output stream. The arguments
* \a samples and \a current_frame are purely informational. If \a samples
* is greater than \c 0, then \a current_frame will hold the current frame
* number that is being written; otherwise, the write callback is being called
* to write metadata.
*
* \note
* The callback is mandatory and must be set before initialization.
*
* \default \c NULL
* \param encoder An encoder instance to set.
* \param value See above.
* \assert
* \code encoder != NULL \endcode
* \code value != NULL \endcode
* \retval FLAC__bool
* \c false if the encoder is already initialized, else \c true.
*/
FLAC_API FLAC__bool FLAC__stream_encoder_set_write_callback(FLAC__StreamEncoder *encoder, FLAC__StreamEncoderWriteCallback value);
/** Set the metadata callback.
* The supplied function will be called once at the end of encoding with
* the populated STREAMINFO structure. This is so file encoders can seek
* back to the beginning of the file and write the STREAMINFO block with
* the correct statistics after encoding (like minimum/maximum frame size
* and total samples).
*
* \note
* The callback is mandatory and must be set before initialization.
*
* \default \c NULL
* \param encoder An encoder instance to set.
* \param value See above.
* \assert
* \code encoder != NULL \endcode
* \code value != NULL \endcode
* \retval FLAC__bool
* \c false if the encoder is already initialized, else \c true.
*/
FLAC_API FLAC__bool FLAC__stream_encoder_set_metadata_callback(FLAC__StreamEncoder *encoder, FLAC__StreamEncoderMetadataCallback value);
/** Set the client data to be passed back to callbacks.
* This value will be supplied to callbacks in their \a client_data
* argument.
*
* \default \c NULL
* \param encoder An encoder instance to set.
* \param value See above.
* \assert
* \code encoder != NULL \endcode
* \retval FLAC__bool
* \c false if the encoder is already initialized, else \c true.
*/
FLAC_API FLAC__bool FLAC__stream_encoder_set_client_data(FLAC__StreamEncoder *encoder, void *value);
/** Get the current encoder state.
*
* \param encoder An encoder instance to query.
* \assert
* \code encoder != NULL \endcode
* \retval FLAC__StreamEncoderState
* The current encoder state.
*/
FLAC_API FLAC__StreamEncoderState FLAC__stream_encoder_get_state(const FLAC__StreamEncoder *encoder);
/** Get the state of the verify stream decoder.
* Useful when the stream encoder state is
* \c FLAC__STREAM_ENCODER_VERIFY_DECODER_ERROR.
*
* \param encoder An encoder instance to query.
* \assert
* \code encoder != NULL \endcode
* \retval FLAC__StreamDecoderState
* The verify stream decoder state.
*/
FLAC_API FLAC__StreamDecoderState FLAC__stream_encoder_get_verify_decoder_state(const FLAC__StreamEncoder *encoder);
/** Get the current encoder state as a C string.
* This version automatically resolves
* \c FLAC__STREAM_ENCODER_VERIFY_DECODER_ERROR by getting the
* verify decoder's state.
*
* \param encoder A encoder instance to query.
* \assert
* \code encoder != NULL \endcode
* \retval const char *
* The encoder state as a C string. Do not modify the contents.
*/
FLAC_API const char *FLAC__stream_encoder_get_resolved_state_string(const FLAC__StreamEncoder *encoder);
/** Get relevant values about the nature of a verify decoder error.
* Useful when the stream encoder state is
* \c FLAC__STREAM_ENCODER_VERIFY_DECODER_ERROR. The arguments should
* be addresses in which the stats will be returned, or NULL if value
* is not desired.
*
* \param encoder An encoder instance to query.
* \param absolute_sample The absolute sample number of the mismatch.
* \param frame_number The number of the frame in which the mismatch occurred.
* \param channel The channel in which the mismatch occurred.
* \param sample The number of the sample (relative to the frame) in
* which the mismatch occurred.
* \param expected The expected value for the sample in question.
* \param got The actual value returned by the decoder.
* \assert
* \code encoder != NULL \endcode
*/
FLAC_API void FLAC__stream_encoder_get_verify_decoder_error_stats(const FLAC__StreamEncoder *encoder, FLAC__uint64 *absolute_sample, unsigned *frame_number, unsigned *channel, unsigned *sample, FLAC__int32 *expected, FLAC__int32 *got);
/** Get the "verify" flag.
*
* \param encoder An encoder instance to query.
* \assert
* \code encoder != NULL \endcode
* \retval FLAC__bool
* See FLAC__stream_encoder_set_verify().
*/
FLAC_API FLAC__bool FLAC__stream_encoder_get_verify(const FLAC__StreamEncoder *encoder);
/** Get the "streamable subset" flag.
*
* \param encoder An encoder instance to query.
* \assert
* \code encoder != NULL \endcode
* \retval FLAC__bool
* See FLAC__stream_encoder_set_streamable_subset().
*/
FLAC_API FLAC__bool FLAC__stream_encoder_get_streamable_subset(const FLAC__StreamEncoder *encoder);
/** Get the "mid/side stereo coding" flag.
*
* \param encoder An encoder instance to query.
* \assert
* \code encoder != NULL \endcode
* \retval FLAC__bool
* See FLAC__stream_encoder_get_do_mid_side_stereo().
*/
FLAC_API FLAC__bool FLAC__stream_encoder_get_do_mid_side_stereo(const FLAC__StreamEncoder *encoder);
/** Get the "adaptive mid/side switching" flag.
*
* \param encoder An encoder instance to query.
* \assert
* \code encoder != NULL \endcode
* \retval FLAC__bool
* See FLAC__stream_encoder_set_loose_mid_side_stereo().
*/
FLAC_API FLAC__bool FLAC__stream_encoder_get_loose_mid_side_stereo(const FLAC__StreamEncoder *encoder);
/** Get the number of input channels being processed.
*
* \param encoder An encoder instance to query.
* \assert
* \code encoder != NULL \endcode
* \retval unsigned
* See FLAC__stream_encoder_set_channels().
*/
FLAC_API unsigned FLAC__stream_encoder_get_channels(const FLAC__StreamEncoder *encoder);
/** Get the input sample resolution setting.
*
* \param encoder An encoder instance to query.
* \assert
* \code encoder != NULL \endcode
* \retval unsigned
* See FLAC__stream_encoder_set_bits_per_sample().
*/
FLAC_API unsigned FLAC__stream_encoder_get_bits_per_sample(const FLAC__StreamEncoder *encoder);
/** Get the input sample rate setting.
*
* \param encoder An encoder instance to query.
* \assert
* \code encoder != NULL \endcode
* \retval unsigned
* See FLAC__stream_encoder_set_sample_rate().
*/
FLAC_API unsigned FLAC__stream_encoder_get_sample_rate(const FLAC__StreamEncoder *encoder);
/** Get the blocksize setting.
*
* \param encoder An encoder instance to query.
* \assert
* \code encoder != NULL \endcode
* \retval unsigned
* See FLAC__stream_encoder_set_blocksize().
*/
FLAC_API unsigned FLAC__stream_encoder_get_blocksize(const FLAC__StreamEncoder *encoder);
/** Get the maximum LPC order setting.
*
* \param encoder An encoder instance to query.
* \assert
* \code encoder != NULL \endcode
* \retval unsigned
* See FLAC__stream_encoder_set_max_lpc_order().
*/
FLAC_API unsigned FLAC__stream_encoder_get_max_lpc_order(const FLAC__StreamEncoder *encoder);
/** Get the quantized linear predictor coefficient precision setting.
*
* \param encoder An encoder instance to query.
* \assert
* \code encoder != NULL \endcode
* \retval unsigned
* See FLAC__stream_encoder_set_qlp_coeff_precision().
*/
FLAC_API unsigned FLAC__stream_encoder_get_qlp_coeff_precision(const FLAC__StreamEncoder *encoder);
/** Get the qlp coefficient precision search flag.
*
* \param encoder An encoder instance to query.
* \assert
* \code encoder != NULL \endcode
* \retval FLAC__bool
* See FLAC__stream_encoder_set_do_qlp_coeff_prec_search().
*/
FLAC_API FLAC__bool FLAC__stream_encoder_get_do_qlp_coeff_prec_search(const FLAC__StreamEncoder *encoder);
/** Get the "escape coding" flag.
*
* \param encoder An encoder instance to query.
* \assert
* \code encoder != NULL \endcode
* \retval FLAC__bool
* See FLAC__stream_encoder_set_do_escape_coding().
*/
FLAC_API FLAC__bool FLAC__stream_encoder_get_do_escape_coding(const FLAC__StreamEncoder *encoder);
/** Get the exhaustive model search flag.
*
* \param encoder An encoder instance to query.
* \assert
* \code encoder != NULL \endcode
* \retval FLAC__bool
* See FLAC__stream_encoder_set_do_exhaustive_model_search().
*/
FLAC_API FLAC__bool FLAC__stream_encoder_get_do_exhaustive_model_search(const FLAC__StreamEncoder *encoder);
/** Get the minimum residual partition order setting.
*
* \param encoder An encoder instance to query.
* \assert
* \code encoder != NULL \endcode
* \retval unsigned
* See FLAC__stream_encoder_set_min_residual_partition_order().
*/
FLAC_API unsigned FLAC__stream_encoder_get_min_residual_partition_order(const FLAC__StreamEncoder *encoder);
/** Get maximum residual partition order setting.
*
* \param encoder An encoder instance to query.
* \assert
* \code encoder != NULL \endcode
* \retval unsigned
* See FLAC__stream_encoder_set_max_residual_partition_order().
*/
FLAC_API unsigned FLAC__stream_encoder_get_max_residual_partition_order(const FLAC__StreamEncoder *encoder);
/** Get the Rice parameter search distance setting.
*
* \param encoder An encoder instance to query.
* \assert
* \code encoder != NULL \endcode
* \retval unsigned
* See FLAC__stream_encoder_set_rice_parameter_search_dist().
*/
FLAC_API unsigned FLAC__stream_encoder_get_rice_parameter_search_dist(const FLAC__StreamEncoder *encoder);
/** Get the previously set estimate of the total samples to be encoded.
* The encoder merely mimics back the value given to
* FLAC__stream_encoder_set_total_samples_estimate() since it has no
* other way of knowing how many samples the user will encode.
*
* \param encoder An encoder instance to set.
* \assert
* \code encoder != NULL \endcode
* \retval FLAC__uint64
* See FLAC__stream_encoder_get_total_samples_estimate().
*/
FLAC_API FLAC__uint64 FLAC__stream_encoder_get_total_samples_estimate(const FLAC__StreamEncoder *encoder);
/** Initialize the encoder instance.
* Should be called after FLAC__stream_encoder_new() and
* FLAC__stream_encoder_set_*() but before FLAC__stream_encoder_process()
* or FLAC__stream_encoder_process_interleaved(). Will set and return
* the encoder state, which will be FLAC__STREAM_ENCODER_OK if
* initialization succeeded.
*
* The call to FLAC__stream_encoder_init() currently will also immediately
* call the write callback several times, once with the \c fLaC signature,
* and once for each encoded metadata block.
*
* \param encoder An uninitialized encoder instance.
* \assert
* \code encoder != NULL \endcode
* \retval FLAC__StreamEncoderState
* \c FLAC__STREAM_ENCODER_OK if initialization was successful; see
* FLAC__StreamEncoderState for the meanings of other return values.
*/
FLAC_API FLAC__StreamEncoderState FLAC__stream_encoder_init(FLAC__StreamEncoder *encoder);
/** Finish the encoding process.
* Flushes the encoding buffer, releases resources, resets the encoder
* settings to their defaults, and returns the encoder state to
* FLAC__STREAM_ENCODER_UNINITIALIZED. Note that this can generate
* one or more write callbacks before returning, and will generate
* a metadata callback.
*
* In the event of a prematurely-terminated encode, it is not strictly
* necessary to call this immediately before FLAC__stream_encoder_delete()
* but it is good practice to match every FLAC__stream_encoder_init()
* with a FLAC__stream_encoder_finish().
*
* \param encoder An uninitialized encoder instance.
* \assert
* \code encoder != NULL \endcode
*/
FLAC_API void FLAC__stream_encoder_finish(FLAC__StreamEncoder *encoder);
/** Submit data for encoding.
* This version allows you to supply the input data via an array of
* pointers, each pointer pointing to an array of \a samples samples
* representing one channel. The samples need not be block-aligned,
* but each channel should have the same number of samples.
*
* \param encoder An initialized encoder instance in the OK state.
* \param buffer An array of pointers to each channel's signal.
* \param samples The number of samples in one channel.
* \assert
* \code encoder != NULL \endcode
* \code FLAC__stream_encoder_get_state(encoder) == FLAC__STREAM_ENCODER_OK \endcode
* \retval FLAC__bool
* \c true if successful, else \c false; in this case, check the
* encoder state with FLAC__stream_encoder_get_state() to see what
* went wrong.
*/
FLAC_API FLAC__bool FLAC__stream_encoder_process(FLAC__StreamEncoder *encoder, const FLAC__int32 * const buffer[], unsigned samples);
/** Submit data for encoding.
* This version allows you to supply the input data where the channels
* are interleaved into a single array (i.e. channel0_sample0,
* channel1_sample0, ... , channelN_sample0, channel0_sample1, ...).
* The samples need not be block-aligned but they must be
* sample-aligned, i.e. the first value should be channel0_sample0
* and the last value channelN_sampleM.
*
* \param encoder An initialized encoder instance in the OK state.
* \param buffer An array of channel-interleaved data (see above).
* \param samples The number of samples in one channel, the same as for
* FLAC__stream_encoder_process(). For example, if
* encoding two channels, \c 1000 \a samples corresponds
* to a \a buffer of 2000 values.
* \assert
* \code encoder != NULL \endcode
* \code FLAC__stream_encoder_get_state(encoder) == FLAC__STREAM_ENCODER_OK \endcode
* \retval FLAC__bool
* \c true if successful, else \c false; in this case, check the
* encoder state with FLAC__stream_encoder_get_state() to see what
* went wrong.
*/
FLAC_API FLAC__bool FLAC__stream_encoder_process_interleaved(FLAC__StreamEncoder *encoder, const FLAC__int32 buffer[], unsigned samples);
/* \} */
#ifdef __cplusplus
}
#endif
#endif
str">"3319.6">
<stop
offset="0"
stop-color="#FFC100"
id="stop1624" />
<stop
offset="0.6"
stop-color="#997200"
id="stop1626" />
<stop
offset="1"
stop-color="#332201"
id="stop1628" />
</linearGradient>
</defs>
<path
fill="#000000"
d="M875.45 3825.1l7249.1 0 0 -2244.3 -7249.1 0 0 2244.3z"
id="path1630" />
<path
fill="#FFFFFF"
d="M1333.89 3695.16c0,-31.54 -25.56,-57.1 -57.09,-57.1 -31.53,0 -57.09,25.56 -57.09,57.1 0,31.52 25.56,57.09 57.09,57.09 31.53,0 57.09,-25.57 57.09,-57.09zm179.32 -47.8c22.95,-15.62 53.43,-11.19 71.41,10.35 18,21.54 18,53.62 0,75.18 -17.98,21.54 -48.46,25.95 -71.41,10.34l0 47.31 -30.24 0 0 -149.7 30.24 0 0 6.52zm345.25 47.79c0,-31.54 -25.56,-57.09 -57.09,-57.09 -31.52,0 -57.08,25.55 -57.08,57.09 0,31.53 25.56,57.09 57.08,57.09 16.25,0 30.93,-6.79 41.32,-17.69l-21.85 -20.84 21.85 20.84 -21.85 -20.84c-5.59,5.87 -13.55,8.9 -21.66,8.24 -8.09,-0.69 -15.45,-4.98 -20.01,-11.69l77.28 0c1.32,-4.82 2.01,-9.88 2.01,-15.11zm1896.14 0c0,-31.54 -25.56,-57.09 -57.1,-57.09 -31.51,0 -57.08,25.55 -57.08,57.09 0,31.53 25.57,57.09 57.08,57.09 16.26,0 30.93,-6.79 41.33,-17.69l-21.84 -20.84 21.84 20.84 -21.84 -20.84c-5.61,5.87 -13.57,8.9 -21.67,8.24 -8.1,-0.69 -15.46,-4.98 -20.02,-11.69l77.29 0c1.32,-4.82 2.01,-9.88 2.01,-15.11zm1128.28 0c0,-31.54 -25.56,-57.09 -57.08,-57.09 -31.53,0 -57.08,25.55 -57.08,57.09 0,31.53 25.55,57.09 57.08,57.09 16.25,0 30.92,-6.79 41.32,-17.69l-21.85 -20.84 21.85 20.84 -21.85 -20.84c-5.61,5.87 -13.56,8.9 -21.66,8.24 -8.08,-0.69 -15.44,-4.98 -20.01,-11.69l77.28 0c1.32,-4.82 2,-9.88 2,-15.11zm2883.6 0c0,-31.54 -25.56,-57.09 -57.08,-57.09 -31.53,0 -57.09,25.55 -57.09,57.09 0,31.53 25.56,57.09 57.09,57.09 16.24,0 30.92,-6.79 41.31,-17.69l-21.85 -20.84 21.85 20.84 -21.85 -20.84c-5.59,5.87 -13.55,8.9 -21.66,8.24 -8.08,-0.69 -15.44,-4.98 -20.01,-11.69l77.28 0c1.32,-4.82 2.01,-9.88 2.01,-15.11zm-5660.49 -8.49c0,-18.27 -8.91,-35.01 -23.06,-43.31 -14.14,-8.29 -31.13,-6.74 -43.96,4.01l0 -6.52 -30.24 0 0 108.93 30.24 0 0 -63.11c0,-10.16 8.22,-18.38 18.38,-18.38 10.16,0 18.39,8.22 18.39,18.38l0 63.11 30.25 0 0 -63.11zm437.24 -14.09c0,-14.47 -10.9,-27.39 -27.31,-32.39 -16.4,-4.98 -34.82,-0.99 -46.13,10.03 -11.32,11.02 -13.14,26.71 -4.56,39.3 4.34,6.08 10.52,10.54 17.62,12.76 8.04,2.71 16.25,4.9 24.57,6.57 6.82,1.33 10.41,4.73 8.42,7.96 -1.98,3.22 -8.96,5.3 -16.32,4.84 -7.35,-0.46 -12.83,-3.3 -12.83,-6.64l0 -3.23 -30.21 0 0 3.23c0,16.03 12.23,30.29 30.43,35.5 18.2,5.21 38.37,0.22 50.18,-12.45 11.83,-12.64 12.7,-30.17 2.18,-43.59 -6.1,-7.12 -14.48,-11.87 -23.72,-13.42 -7.3,-1.36 -14.52,-3.13 -21.63,-5.27 -3.94,-1.31 -5,-3.46 -2.54,-5.2 2.46,-1.75 7.79,-2.65 12.91,-2.16 5.12,0.46 8.73,2.18 8.73,4.16l0 1.5 30.21 0 0 -1.5zm263.01 22.59c0,-31.54 -25.56,-57.1 -57.09,-57.1 -31.53,0 -57.09,25.56 -57.09,57.1 0,31.52 25.56,57.09 57.09,57.09 31.53,0 57.09,-25.57 57.09,-57.09zm149.73 8.78l0 -63.1 30.23 0 0 63.1c0,10.15 8.25,18.39 18.4,18.39 10.15,0 18.38,-8.24 18.38,-18.39l0 -63.1 30.24 0 0 108.93 -30.24 0 0 -6.54c-12.83,10.76 -29.81,12.31 -43.96,4.01 -14.14,-8.28 -23.05,-25.01 -23.05,-43.3zm279.74 -56.58l0 -6.52 -30.24 0 0 108.93 30.24 0 0 -54.61c0,-7.14 2.84,-13.97 7.87,-19.02 5.05,-5.03 11.89,-7.86 19,-7.86l0 -30.12c-9.57,0.56 -18.83,3.74 -26.87,9.2zm266.04 8.38c-10.39,-10.88 -25.07,-17.68 -41.32,-17.68 -31.51,0 -57.07,25.54 -57.07,57.08 0,0 0,0 0,0.01 0,31.52 25.56,57.08 57.07,57.08 16.25,0 30.93,-6.8 41.32,-17.7l-21.86 -20.83c-4.88,5.11 -11.79,8.32 -19.43,8.32 -14.83,0 -26.87,-12.04 -26.88,-26.87 0,-0.01 0,-0.01 0,-0.01 0.01,-14.84 12.05,-26.86 26.88,-26.86 7.64,0 14.55,3.19 19.43,8.3l21.86 -20.84zm3499.75 39.33l-15.58 -54.23 -26.99 0 -15.58 54.23 -15.58 -54.23 -31.45 0 31.3 108.93 31.44 0 13.36 -46.5 13.37 46.5 31.43 0 31.31 -108.93 -31.44 0 -15.59 54.23m-767.53 -89.7l-30.23 0 0 30.21 30.23 0 0 -30.21m0 35.47l-30.23 0 0 108.93 30.23 0 0 -108.93m-626.55 54.51l33.66 54.42 -35.61 0 -15.84 -25.64 -15.87 25.64 -35.59 0 33.65 -54.42 -33.71 -54.51 35.6 0 15.92 25.73 15.91 -25.73 35.6 0 -33.72 54.51m-1012.87 -54.51l-27.71 44.82 0 -80.29 -30.25 0 0 144.4 30.25 0 0 -45.43 34.06 45.43 37.76 0 -41.57 -55.46 33.07 -53.47 -35.61 0m-460.66 -35.47l-30.24 0 0 30.21 30.24 0 0 -30.21m0 149.71l0 -114.24 -30.24 0 0 114.27c0,2.89 -2.34,5.22 -5.22,5.22l-8.56 0 0 30.21 8.56 0c19.59,0 35.46,-15.89 35.46,-35.46m1273.22 -59.92c0,-31.54 -25.56,-57.1 -57.09,-57.1 -31.52,0 -57.08,25.56 -57.08,57.1 0,31.52 25.56,57.09 57.08,57.09 31.53,0 57.09,-25.57 57.09,-57.09zm-1052.95 48.07l0 6.54 30.23 0 0 -108.93 -30.23 0 0 63.1c0,10.15 -8.24,18.39 -18.39,18.39 -10.16,0 -18.39,-8.24 -18.39,-18.39l0 -63.1 -30.24 0 0 63.1c0,18.29 8.89,35.02 23.04,43.3 14.16,8.3 31.14,6.75 43.98,-4.01zm707.46 -95.87l0 -41.99 -30.23 0 0 144.4 30.23 0 0 -6.54c22.95,15.61 53.43,11.2 71.42,-10.34 17.99,-21.56 17.99,-53.63 0,-75.18 -17.99,-21.54 -48.47,-25.97 -71.42,-10.35zm992.23 -11.78l-25.1 0c-0.66,-0.06 -1.32,0.18 -1.81,0.67 -0.48,0.47 -0.72,1.13 -0.66,1.81l0 2.78 0 0 13.79 0 0 30.22 -13.79 0 0 78.71 -30.24 0 0 -78.71 -13.79 0 0 -30.22 13.79 0c0,-19.59 15.88,-35.47 35.46,-35.47l22.35 0 0 30.21zm390.01 2.58l0 30.12c-7.13,0 -13.97,2.83 -19.01,7.86 -5.05,5.05 -7.87,11.88 -7.87,19.02l0 54.61 -30.25 0 0 -108.93 30.25 0 0 6.52c8.03,-5.46 17.29,-8.64 26.88,-9.2zm177.25 9.2l0 -6.52 -30.24 0 0 108.93 30.24 0 0 -63.11c0,-10.16 8.24,-18.38 18.4,-18.38 10.15,0 18.38,8.22 18.38,18.38l0 63.11 30.24 0 0 -63.11c0,-10.16 8.24,-18.38 18.4,-18.38 10.15,0 18.39,8.22 18.39,18.38l0 63.11 30.23 0 -0.01 -63.11c0,-19.18 -11.27,-36.57 -28.78,-44.38 -17.51,-7.83 -38.01,-4.63 -52.28,8.17 -14.83,-15.27 -36.89,-16.56 -52.97,-3.09zm646.89 0l0 -6.52 30.26 0 0 108.93 -30.26 0 0 -6.54c-22.94,15.61 -53.41,11.2 -71.39,-10.34 -17.99,-21.56 -17.99,-53.63 0,-75.18 17.98,-21.54 48.45,-25.97 71.39,-10.35zm243.81 -9.2l0 30.12c-7.12,0 -13.96,2.83 -19.01,7.86 -5.03,5.05 -7.87,11.88 -7.87,19.02l0 54.61 -30.23 0 0 -108.93 30.23 0 0 6.52c8.03,-5.46 17.31,-8.64 26.88,-9.2z"
id="path1632" />
<path
fill="#000000"
d="M1303.67 3695.16c0,-14.85 -12.02,-26.88 -26.87,-26.88 -14.84,0 -26.89,12.03 -26.89,26.88 0,14.84 12.05,26.88 26.89,26.88 14.85,0 26.87,-12.04 26.87,-26.88zm3499.91 -15.11l44.46 0c-5,-7.37 -13.32,-11.77 -22.23,-11.77 -8.9,0 -17.23,4.4 -22.23,11.77m-1128.28 0l44.47 0c-5.01,-7.37 -13.33,-11.77 -22.23,-11.77 -8.91,0 -17.22,4.4 -22.24,11.77m-899.27 15.11c0,-14.85 -12.03,-26.88 -26.88,-26.88 -14.84,0 -26.87,12.03 -26.87,26.88 0,14.84 12.03,26.88 26.87,26.88 14.85,0 26.88,-12.04 26.88,-26.88zm2600.88 0c0,-14.85 -12.04,-26.88 -26.89,-26.88 -14.85,0 -26.87,12.03 -26.87,26.88 0,14.84 12.02,26.88 26.87,26.88 14.85,0 26.89,-12.04 26.89,-26.88zm-261.53 0c0,-14.85 -12.03,-26.88 -26.88,-26.88 -14.84,0 -26.88,12.03 -26.88,26.88 0,14.84 12.04,26.88 26.88,26.88 14.85,0 26.88,-12.04 26.88,-26.88zm-3548.42 0.29c0,-14.85 -12.02,-26.88 -26.88,-26.88 -14.83,0 -26.87,12.03 -26.87,26.88 0,14.84 12.04,26.88 26.87,26.88 14.86,0 26.88,-12.04 26.88,-26.88zm212.21 -15.4l44.47 0c-5.01,-7.37 -13.34,-11.77 -22.24,-11.77 -8.9,0 -17.23,4.4 -22.23,11.77m5908 0l44.47 0c-5,-7.37 -13.33,-11.77 -22.23,-11.77 -8.91,0 -17.23,4.4 -22.24,11.77m-419.17 15.11c0,-14.85 -12.02,-26.88 -26.86,-26.88 -14.85,0 -26.88,12.03 -26.88,26.88 0,14.84 12.03,26.88 26.88,26.88 14.84,0 26.86,-12.04 26.86,-26.88z"
id="path1634" />
<path
fill="#FFC000"
d="M918.37 1633.25l7156.1 0 0 1906.25 -7156.1 0 0 -1906.25"
id="path1636" />
<path
fill="url(#id1)"
d="M6542.59 3424.95l0 0m1512.67 -313.2l19.21 0 0 10.92 -8.28 0 0 43.65 -10.93 0 0 -54.57m-54.55 0l32.74 0 0 10.92 -32.74 0 0 -10.92m0 43.64l32.74 0 0 10.93 -32.74 0 0 -10.93m-76.4 -43.64l0 0 0 0 0 0 0 0m21.83 10.92l10.91 0 0 43.65 -10.91 0 0 -43.65m10.91 -10.92l10.92 0 0 10.92 -10.92 0 0 -10.92m10.92 10.92l10.92 0 0 43.65 -10.92 0 0 -43.65m-43.66 -10.92l21.83 0 0 10.92 -10.92 0 0 43.65 -10.91 0 0 -54.57m-21.83 -10.92l10.92 0 0 21.84 -10.92 0 0 -21.84m0 32.74l10.92 0 0 21.82 -10.92 0 0 -21.82m-87.3 -21.82l10.92 0 0 21.82 -10.92 0 0 -21.82m-78.14 0l10.91 0 0 10.92 -10.91 0 0 -10.92m-32.74 21.82l10.92 0 0 21.82 -10.92 0 0 -21.82m-42 21.82l42 0 0 10.93 -42 0 0 -10.93m-43.65 -32.72l10.91 0 0 10.9 -10.91 0 0 -10.9m-10.91 -32.75l32.74 0 0 10.91 -32.74 0 0 -10.91m0 65.47l32.74 0 0 10.93 -32.74 0 0 -10.93m-54.57 -65.47l21.83 0 0 10.91 -21.83 0 0 -10.91m-10.91 10.91l10.91 0 0 10.92 -10.91 0 0 -10.92m32.74 32.74l10.91 0 0 21.82 -10.91 0 0 -21.82m294.75 -140.69l43.65 0 0 10.93 -43.65 0 0 -10.93m-10.91 10.93l10.91 0 0 10.9 -10.91 0 0 -10.9m10.91 10.9l32.73 0 0 10.92 -32.73 0 0 -10.92m32.73 10.92l10.92 0 0 10.9 -10.92 0 0 -10.9m-43.64 10.9l43.64 0 0 10.92 -43.64 0 0 -10.92m65.47 -43.65l10.91 0 0 43.65 -10.91 0 0 -43.65m10.91 65.48l32.75 0 0 10.92 -32.75 0 0 -10.92m54.57 -21.83l43.66 0 0 10.92 -43.66 0 0 -10.92m43.66 -10.9l10.91 0 0 10.9 -10.91 0 0 -10.9m-32.74 -10.92l32.74 0 0 10.92 -32.74 0 0 -10.92m-10.92 -10.9l10.92 0 0 10.9 -10.92 0 0 -10.9m10.92 -10.93l43.65 0 0 10.93 -43.65 0 0 -10.93m-130.96 237.73l43.65 0 0 10.91 -43.65 0 0 -10.91m-10.91 10.91l10.91 0 0 10.91 -10.91 0 0 -10.91m10.91 10.91l32.73 0 0 10.92 -32.73 0 0 -10.92m32.73 10.92l10.92 0 0 10.93 -10.92 0 0 -10.93m-43.64 10.93l43.64 0 0 10.9 -43.64 0 0 -10.9m-262.32 0l43.65 0 0 10.9 -43.65 0 0 -10.9m43.65 -10.93l10.9 0 0 10.93 -10.9 0 0 -10.93m-32.75 -10.92l32.75 0 0 10.92 -32.75 0 0 -10.92m-10.9 -10.91l10.9 0 0 10.91 -10.9 0 0 -10.91m10.9 -10.91l43.65 0 0 10.91 -43.65 0 0 -10.91m-328.02 118.87l43.66 0 0 10.91 -43.66 0 0 -10.91m-10.9 10.91l10.9 0 0 10.91 -10.9 0 0 -10.91m10.9 10.91l32.74 0 0 10.92 -32.74 0 0 -10.92m32.74 10.92l10.92 0 0 10.91 -10.92 0 0 -10.91m-43.64 10.91l43.64 0 0 10.91 -43.64 0 0 -10.91m-724.99 0l43.64 0 0 10.91 -43.64 0 0 -10.91m43.64 -10.91l10.91 0 0 10.91 -10.91 0 0 -10.91m-32.74 -10.92l32.74 0 0 10.92 -32.74 0 0 -10.92m-10.9 -10.91l10.9 0 0 10.91 -10.9 0 0 -10.91m10.9 -10.91l43.65 0 0 10.91 -43.65 0 0 -10.91m1173.46 0l21.83 0 0 10.91 -10.91 0 0 43.65 -10.92 0 0 -54.56m43.66 10.91l10.91 0 0 43.65 -10.91 0 0 -43.65m-10.92 -10.91l10.92 0 0 10.91 -10.92 0 0 -10.91m-10.91 10.91l10.91 0 0 43.65 -10.91 0 0 -43.65m-21.83 -10.91l0 0 0 0 0 0 0 0m-1051.63 0l0 0 0 0 0 0 0 0m21.83 10.91l10.92 0 0 43.65 -10.92 0 0 -43.65m10.92 -10.91l10.9 0 0 10.91 -10.9 0 0 -10.91m10.9 10.91l10.92 0 0 43.65 -10.92 0 0 -43.65m-43.65 -10.91l21.83 0 0 10.91 -10.91 0 0 43.65 -10.92 0 0 -54.56m1291.73 -312.95l0 -43.65 10.92 0 0 65.48 -10.92 0 0 -10.91 -32.75 0 0 -10.92 32.75 0m-853.76 354.96l0 -43.67 10.93 0 0 65.49 -10.93 0 0 -10.92 -32.73 0 0 -10.9 32.73 0m-32.73 21.82l32.73 0 0 10.9 -32.73 0 0 -10.9m-10.91 -65.49l10.91 0 0 43.67 -10.91 0 0 -43.67m919.22 -225.15l10.92 0 0 10.9 32.74 0 0 -10.9 10.91 0 0 21.82 -43.65 0 0 10.9 -10.92 0 0 -32.72m-196.44 118.85l10.92 0 0 10.91 32.74 0 0 -10.91 10.9 0 0 21.83 -43.64 0 0 10.93 -10.92 0 0 -32.76m10.92 32.76l32.74 0 0 10.9 -32.74 0 0 -10.9m0 -43.67l32.74 0 0 10.91 -32.74 0 0 -10.91m-262.33 0l32.74 0 0 10.91 -32.74 0 0 -10.91m0 43.67l32.74 0 0 10.9 -32.74 0 0 -10.9m-10.91 -32.76l10.91 0 0 10.91 32.74 0 0 -10.91 10.91 0 0 21.83 -43.65 0 0 10.93 -10.91 0 0 -32.76m393.28 118.87l10.91 0 0 10.91 32.75 0 0 -10.91 10.92 0 0 21.83 -43.67 0 0 10.91 -10.91 0 0 -32.74m10.91 32.74l32.75 0 0 10.91 -32.75 0 0 -10.91m0 -43.65l32.75 0 0 10.91 -32.75 0 0 -10.91m130.97 0l8.28 0 0 10.91 -8.28 0 0 -10.91m0 43.65l8.28 0 0 10.91 -8.28 0 0 -10.91m-10.93 -32.74l10.93 0 0 10.91 8.28 0 0 0 0 0 0 10.92 -8.28 0 0 10.91 -10.93 0 0 -32.74m-1564.68 -10.91l32.74 0 0 10.91 -32.74 0 0 -10.91m0 43.65l32.74 0 0 10.91 -32.74 0 0 -10.91m-10.92 -32.74l10.92 0 0 10.91 32.74 0 0 -10.91 10.91 0 0 21.83 -43.65 0 0 10.91 -10.92 0 0 -32.74m140.22 21.83l21.82 0 0 20.17 -21.82 0 0 -20.17m1315.34 -151.61l32.75 0 0 10.91 -32.75 0 0 -10.91m-10.91 10.91l10.91 0 0 32.76 -10.91 0 0 -32.76m10.91 32.76l32.75 0 0 10.9 -32.75 0 0 -10.9m32.75 -10.93l10.92 0 0 10.93 -10.92 0 0 -10.93m32.74 -32.74l32.74 0 0 10.91 -32.74 0 0 -10.91m-10.92 32.74l10.92 0 0 10.93 -10.92 0 0 -10.93m-876.5 0l10.91 0 0 10.93 -10.91 0 0 -10.93m-32.74 10.93l32.74 0 0 10.9 -32.74 0 0 -10.9m-10.92 -32.76l10.92 0 0 32.76 -10.92 0 0 -32.76m10.92 -10.91l32.74 0 0 10.91 -32.74 0 0 -10.91m603.67 -21.83l10.92 0 0 10.92 -10.92 0 0 -10.92m65.48 43.65l10.91 0 0 10.92 -10.91 0 0 -10.92m-327.81 -21.82l21.83 0 0 10.91 -21.83 0 0 -10.91m21.83 10.91l10.92 0 0 43.66 -10.92 0 0 -43.66m-297.69 -10.91l31.09 0 0 10.91 -31.09 0 0 -10.91m-10.91 10.91l10.91 0 0 32.76 -10.91 0 0 -32.76m10.91 32.76l31.09 0 0 10.9 -31.09 0 0 -10.9m31.09 -32.76l10.91 0 0 32.76 -10.91 0 0 -32.76m526.25 118.87l10.91 0 0 32.74 -10.91 0 0 -32.74m-31.09 32.74l31.09 0 0 10.91 -31.09 0 0 -10.91m-10.91 -32.74l10.91 0 0 32.74 -10.91 0 0 -32.74m10.91 -10.91l31.09 0 0 10.91 -31.09 0 0 -10.91m-272.22 -118.87l10.92 0 0 10.91 10.91 0 0 10.91 -10.91 0 0 32.75 -10.92 0 0 -54.57m655.2 0l10.93 0 0 10.91 8.28 0 0 10.91 -8.28 0 0 32.75 -10.93 0 0 -54.57m-535.15 54.57l-10.9 0 0 -10.9 -10.92 0 0 -10.93 10.92 0 0 -32.74 10.9 0 0 54.57m-43.65 -10.9l-10.91 0 0 -43.67 10.91 0 0 43.67m21.83 10.9l-21.83 0 0 -10.9 21.83 0 0 10.9m-294.66 -54.57l10.92 0 0 10.91 10.91 0 0 10.91 -10.91 0 0 32.75 -10.92 0 0 -54.57m43.65 10.91l10.91 0 0 43.66 -10.91 0 0 -43.66m-21.82 -10.91l21.82 0 0 10.91 -21.82 0 0 -10.91m326.77 118.87l21.82 0 0 10.91 -21.82 0 0 -10.91m21.82 10.91l10.92 0 0 43.65 -10.92 0 0 -43.65m-43.65 -10.91l10.93 0 0 10.91 10.9 0 0 10.91 -10.9 0 0 32.74 -10.93 0 0 -54.56m361.17 54.56l-21.82 0 0 -10.91 21.82 0 0 10.91m-21.82 -10.91l-10.91 0 0 -43.65 10.91 0 0 43.65m43.65 10.91l-10.92 0 0 -10.91 -10.91 0 0 -10.91 10.91 0 0 -32.74 10.92 0 0 54.56m130.96 0l-10.91 0 0 -10.91 -10.91 0 0 -10.91 10.91 0 0 -32.74 10.91 0 0 54.56m-43.65 -10.91l-10.92 0 0 -43.65 10.92 0 0 43.65m21.83 10.91l-21.83 0 0 -10.91 21.83 0 0 10.91m10.91 -162.52l10.91 0 0 43.66 -43.65 0 0 -10.9 32.74 0 0 -10.93 -32.74 0 0 -10.92 32.74 0 0 -10.91m-524.87 118.87l10.91 0 0 43.65 -43.65 0 0 -10.91 32.74 0 0 -10.91 -32.74 0 0 -10.92 32.74 0 0 -10.91m-43.66 21.83l10.92 0 0 10.91 -10.92 0 0 -10.91m10.92 -32.74l32.74 0 0 10.91 -32.74 0 0 -10.91m-459.84 0l32.74 0 0 10.91 -32.74 0 0 -10.91m-10.92 32.74l10.92 0 0 10.91 -10.92 0 0 -10.91m43.66 -21.83l10.91 0 0 43.65 -43.65 0 0 -10.91 32.74 0 0 -10.91 -32.74 0 0 -10.92 32.74 0 0 -10.91m853.74 -270.47l-43.64 0 0 76.4 43.64 0 0 -10.93 -32.73 0 0 -21.82 32.73 0 0 -10.9 -32.73 0 0 -21.84 32.73 0 0 -10.91m-109.13 0l0 76.4 10.92 0 0 -54.57 10.91 0 0 -10.92 -10.91 0 0 -10.91 -10.92 0m54.56 0l0 76.4 -10.9 0 0 -54.57 -10.91 0 0 -10.92 10.91 0 0 -10.91 10.9 0m-89.04 0l10.91 0 0 43.65 10.92 0 0 10.92 -10.92 0 0 21.83 -10.91 0 0 -21.83 -32.74 0 0 -21.82 10.91 0 0 10.9 21.83 0 0 -21.82 -10.92 0 0 -10.92 10.92 0 0 -10.91m-96.57 0l0 10.91 31.09 0 0 10.92 10.91 0 0 -10.92 10.92 0 0 -10.91 -52.92 0m31.09 21.83l-10.91 0 0 10.92 -10.91 0 0 10.9 32.73 0 0 -10.9 -10.91 0 0 -10.92m-96.56 -10.92l0 54.56 10.91 0 0 -10.9 10.91 0 0 -10.92 -10.91 0 0 -32.74 -10.91 0m43.65 0l0 10.92 -10.92 0 0 10.92 10.92 0 0 32.72 10.91 0 0 -54.56 -10.91 0m-109.13 10.92l0 43.64 10.91 0 0 -21.82 32.74 0 0 -10.9 -32.74 0 0 -10.92 -10.91 0m10.91 43.64l32.74 0 0 10.93 -32.74 0 0 -10.93m-702.32 194.09l-10.92 0 0 10.91 -10.9 0 0 10.91 32.73 0 0 -10.91 -10.91 0 0 -10.91m-31.08 -21.83l0 10.91 31.08 0 0 10.92 10.91 0 0 -10.92 10.92 0 0 -10.91 -52.91 0m0 65.48l41.99 0 0 10.91 -41.99 0 0 -10.91m41.99 -21.83l10.92 0 0 21.83 -10.92 0 0 -21.83m877.02 -140.69l0 10.91 32.74 0 0 10.91 10.92 0 0 -10.91 10.91 0 0 -10.91 -54.57 0m10.92 32.74l10.91 0 0 10.93 32.74 0 0 10.9 -54.57 0 0 -10.9 10.92 0 0 -10.93m-65.48 -32.74l21.83 0 0 43.67 10.91 0 0 10.9 -32.74 0 0 -10.9 10.91 0 0 -32.76 -10.91 0 0 -10.91m-327.8 0l21.82 0 0 43.67 10.92 0 0 10.9 -32.74 0 0 -10.9 10.9 0 0 -32.76 -10.9 0 0 -10.91m10.9 -21.83l10.92 0 0 10.92 -10.92 0 0 -10.92m-131.58 118.87l10.92 0 0 10.91 -10.92 0 0 -10.91m-10.91 21.83l21.83 0 0 43.65 10.92 0 0 10.91 -32.75 0 0 -10.91 10.91 0 0 -32.74 -10.91 0 0 -10.91m98.84 -86.13l10.93 0 0 10.93 -10.93 0 0 -10.93m-10.9 10.93l10.9 0 0 10.9 -10.9 0 0 -10.9m-10.92 -65.5l10.92 0 0 21.83 10.9 0 0 10.91 -10.9 0 0 32.76 -10.92 0 0 -32.76 -10.91 0 0 -10.91 10.91 0 0 -21.83m64.86 118.87l10.9 0 0 21.83 10.93 0 0 10.91 -10.93 0 0 32.74 -10.9 0 0 -32.74 -10.93 0 0 -10.91 10.93 0 0 -21.83m10.9 65.48l10.93 0 0 10.91 -10.93 0 0 -10.91m10.93 -10.91l10.9 0 0 10.91 -10.9 0 0 -10.91m21.82 -32.74l10.91 0 0 10.91 10.91 0 0 10.91 -10.91 0 0 32.74 -10.91 0 0 -54.56m43.65 10.91l10.92 0 0 12.57 -10.92 0 0 -12.57m-21.83 -10.91l21.83 0 0 10.91 -21.83 0 0 -10.91m-274.31 -21.83l20.17 0 0 65.48 10.92 0 0 9.26 -31.09 0 0 -9.26 10.9 0 0 -54.57 -10.9 0 0 -10.91m-194.79 0l20.17 0 0 65.48 10.92 0 0 9.26 -31.09 0 0 -9.26 10.91 0 0 -54.57 -10.91 0 0 -10.91m654.63 21.83l21.82 0 0 10.91 -21.82 0 0 -10.91m-10.92 10.91l10.92 0 0 32.74 -10.92 0 0 -32.74m32.74 0l10.91 0 0 -32.74 10.92 0 0 74.74 -43.65 0 0 -9.26 32.73 0 0 -21.83 -10.91 0 0 -10.91m164.73 0l10.92 0 0 32.74 -10.92 0 0 -32.74m10.92 -10.91l21.83 0 0 10.91 -21.83 0 0 -10.91m21.83 10.91l10.91 0 0 -10.91 10.9 0 0 74.73 -10.9 0 0 -21.82 -32.74 0 0 -9.26 32.74 0 0 -21.83 -10.91 0 0 -10.91m-908.31 -10.91l-21.84 0 0 10.91 21.84 0 0 -10.91m-21.84 10.91l-10.91 0 0 -10.91 -10.91 0 0 74.73 10.91 0 0 -21.82 32.75 0 0 -9.26 -32.75 0 0 -21.83 10.91 0 0 -10.91m32.74 0l-10.9 0 0 32.74 10.9 0 0 -32.74m-132.4 0l-10.93 0 0 32.74 10.93 0 0 -32.74m-32.74 0l-10.91 0 0 -10.91 -10.93 0 0 74.73 10.93 0 0 -21.82 32.72 0 0 -9.26 -32.72 0 0 -21.83 10.91 0 0 -10.91m21.81 -10.91l-21.81 0 0 10.91 21.81 0 0 -10.91m-242.77 75.47l0 0"
id="path1638" />
<path
fill="#000000"
d="M2772.69 2181.06c-98.54,-428.82 -353.71,-447.47 -413.71,-447.47l0 -25.08c133.05,0 348.1,94.96 426.25,420.85 100.11,-325.2 271.08,-412.49 391.07,-414.14 114.35,-1.58 184.87,25.07 293.24,81.53l0 -50.89 312.9 0 0 -42.89 25.07 0 0 42.89 53.05 0 0 25.07 -53.05 0 0 613.13 225.02 -568.78 215.58 0 18.78 -44.35 -268.62 0 0 -25.07 279.26 0 29.52 -69.67 23.08 9.79 -25.39 59.88 59.43 0 0 25.07 -70.05 0 -175.35 413.86 232.24 0 0 310.18c217.36,-106.98 477.4,-28.48 608.47,180.93 130.01,-200.39 383.99,-280.25 605.28,-190.31l-8.81 -14.24 374.02 0 74.73 120.8 72.97 -117.99c1.08,-1.75 2.98,-2.81 5.05,-2.81l0 0c2.14,0 4.12,1.16 5.15,3.04 1.06,1.88 1.01,4.17 -0.12,6l-76.09 123.02 9.74 15.76 89.7 -145.01c1.08,-1.75 2.98,-2.81 5.04,-2.81l0 0c2.15,0 4.13,1.16 5.17,3.04 1.05,1.88 0.99,4.17 -0.14,6l-92.8 150.04 9.75 15.77 108.15 -174.85 374.01 0 -295.16 477.2 9.76 15.76 311.43 -503.52 -388.55 0c-2.13,0 -4.12,-1.16 -5.17,-3.03 -1.04,-1.9 -0.99,-4.18 0.14,-6.01l0 0c1.09,-1.74 2.99,-2.8 5.03,-2.8l409.8 0 -309 499.6 289.06 467.36c1.14,1.84 1.19,4.13 0.15,6.01 -1.04,1.87 -3.03,3.03 -5.18,3.03 -2.05,0 -3.96,-1.06 -5.03,-2.8l-285.98 -462.35 -9.75 15.76 277.96 449.39 -374.01 0 -71.44 -115.5 -69.72 112.7c-1.08,1.74 -2.97,2.8 -5.04,2.8l0 0c-0.96,0 -1.92,-0.24 -2.78,-0.7 -0.85,0.46 -1.81,0.7 -2.79,0.7 -2.13,0 -4.12,-1.16 -5.17,-3.03 -1.05,-1.88 -1,-4.17 0.14,-6.01l75.6 -122.22 -9.75 -15.77 -89.2 144.23c-1.08,1.74 -2.99,2.8 -5.05,2.8 -2.14,0 -4.11,-1.16 -5.16,-3.03 -1.05,-1.88 -0.99,-4.17 0.13,-6.01l92.32 -149.25 -9.75 -15.76 -107.65 174.05 -374.02 0 10.94 -17.7c-221.48,91.5 -476.71,12.28 -607.46,-188.54 -130.9,209.94 -391.28,286.75 -608.92,179.63l0 26.61 -317.8 0 0 -2.38 -52.45 0 22.91 64.68 -23.64 8.36 -25.87 -73.04 -100.74 0 0 -25.07 91.86 0 -187.19 -528.36 -11.05 26.94 0 528.87 -207.29 0 0 -1609.67 207.29 0 0 721.65 35.4 -89.48 0 -676.52 -287.82 0 0 73.28c-124.87,-83.95 -208.53,-103.92 -318.32,-103.92 -86.93,0 -277.7,63.37 -378.54,440.77l-25.07 0zm448.99 1277.73l-395.21 0.02 0 -25.08 269.89 0c-205.67,-91.32 -295.28,-421.82 -295.28,-813.61 0,-461.94 124.51,-838.69 417.02,-838.69 134.42,0 210.79,69.05 276.52,131.98l0 41.04c0.02,0.04 0.05,0.08 0.07,0.11l-0.02 347.84 -22.33 0c-48.46,-88.29 -137.56,-212.3 -229.57,-212.3 -153.37,0 -229.22,237.52 -227.3,530.02 -1.92,292.5 73.93,530.02 227.3,530.02 92.01,0 181.11,-124.01 229.57,-212.32l22.33 0 0.02 347.85c-0.02,0.04 -0.05,0.08 -0.07,0.12l0 41.04c-65.14,62.36 -140.75,130.73 -272.94,131.96zm-865.74 -1677.36c289.99,0 413.44,395.49 413.44,838.69 0,443.19 -123.45,838.69 -413.44,838.69 -289.99,0 -413.43,-376.76 -413.43,-838.69 0,-461.94 123.44,-838.69 413.43,-838.69zm-721.95 33.85l-377.58 0 0 934.79c2.43,6.54 4.86,13.08 7.27,19.62 16.95,-4.64 34.54,-6.51 52.09,-5.59 34.33,1.85 65.28,21.33 81.77,51.51 14.9,27.27 21.99,58.11 20.5,89.14 -0.63,12.98 -4.05,25.67 -10.02,37.21 -14.67,28.33 -37.3,51.74 -65.12,67.36 9.41,31.95 18.41,64 26.99,96.18 16.39,61.57 24.11,125.11 22.88,188.81 -0.32,16.43 -3.88,32.64 -10.49,47.68 -6.78,15.42 -18.64,28.04 -33.62,35.76 -10.86,5.6 -23.54,6.52 -35.1,2.56 -11.56,-3.96 -21,-12.46 -26.17,-23.53 -5.99,-12.91 -8.94,-27.02 -8.57,-41.26 0.2,-7.99 4.06,-15.47 10.48,-20.25 8.11,-6.05 18.05,-9.07 28.14,-8.59 6.62,0.32 12.54,4.18 15.52,10.12 2.97,5.93 2.49,13 -1.22,18.49 -4.57,6.77 -11.3,11.81 -19.07,14.31l2.66 5.8c1.25,3.29 4.03,5.77 7.46,6.6 3.43,0.85 7.04,-0.03 9.68,-2.35 13.04,-11.1 21.16,-26.9 22.58,-43.95 1.88,-29.39 1.27,-58.89 -1.85,-88.18 -9.17,-62.54 -22.8,-124.35 -40.8,-184.95 -4.62,1.47 -9.31,2.73 -14.03,3.78 -13.87,3.07 -27.87,5.48 -41.96,7.19l0 391.41 252.69 0 0 52.35 25.08 0 0 -52.35 53.83 0 0 -25.07 -53.83 0 0 -564.41 24.2 0 220.54 589.48 242.19 0 21.89 55.87 23.33 -9.15 -21.75 -55.54 75.57 0 0 -25.07 -85.39 0 -260.8 -665.62c96,-99.03 151.07,-248.06 151.07,-437.34 0,-253.68 -68.67,-472.82 -291.04,-472.82zm-332.61 1171.98c-14.4,5.91 -29.53,9.9 -44.97,11.81l0 -142.65c15.55,43.24 30.49,86.7 44.82,130.36 0.05,0.16 0.1,0.31 0.15,0.48 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0m-23.68 -178.71c4.94,-1.36 9.92,-2.51 14.94,-3.44 15.76,-2.92 32.02,0.87 44.82,10.5 11.66,8.75 20.05,21.15 23.86,35.23 8.47,31.39 6.62,64.67 -5.27,94.93 -2.48,6.35 -6.6,11.93 -11.91,16.21 -4.09,3.28 -8.3,6.37 -12.67,9.27 -16.72,-54.62 -34.63,-108.88 -53.77,-162.7m-21.29 190.52c-3.96,0.48 -7.94,0.84 -11.92,1.05 -43.42,2.36 -83.8,-22.28 -101.56,-61.98 -31.51,-70.46 -36.08,-150.02 -12.87,-223.62 8.15,-25.84 16.57,-51.59 25.27,-77.24 2.4,-7.1 4.82,-14.19 7.29,-21.29 23.3,55.36 45.6,111.16 66.83,167.35 -30.27,16.22 -54.69,41.51 -69.84,72.31 -2.5,5.1 -1.52,11.21 2.47,15.27 3.95,4.05 10.06,5.15 15.19,2.76 4.48,-3.22 8.62,-6.87 12.39,-10.88 15.29,-16.97 33.63,-30.95 54.07,-41.22 4.26,11.61 8.49,23.22 12.68,34.84l0 -106.35c-20.1,-53.81 -41.41,-107.14 -63.89,-160 -3.72,-8.75 -7.54,-17.47 -11.4,-26.14 4.67,-12.85 9.43,-25.67 14.25,-38.47 6.9,-18.25 12.17,-37.07 15.75,-56.25 4.02,-21.69 2.22,-44.08 -5.26,-64.84 -17.03,-47.33 -49.87,-87.33 -92.97,-113.24 -18.96,-11.41 -40.82,-17.04 -62.94,-16.23 -18.52,0.7 -33.48,15.36 -34.57,33.87 -0.97,16.78 2.93,33.51 11.21,48.15 7.69,13.55 15.94,26.74 24.79,39.57 27.29,39.55 50.86,81.53 70.44,125.4 3.86,8.64 7.68,17.28 11.48,25.93 -5.97,16.43 -11.82,32.89 -17.54,49.41 -26.57,76.62 -43.7,156.21 -51.02,236.98 -3.46,38.11 -0.07,76.54 10,113.47 13.84,50.66 58.87,86.54 111.34,88.68 23.48,0.96 47,0.02 70.33,-2.82l0 -34.47m343.36 -1250.81l-390.37 0 0 -60.83 -25.07 0 0 60.83 -58.38 0 0 25.06 58.38 0 0 279.28 25.07 0 0 -279.28 390.37 0 0 -25.06"