From 3f43332c3ceb5122ee4f676a7a57d54d3dffa4f6 Mon Sep 17 00:00:00 2001 From: Vinit Mehta Date: Tue, 28 Oct 2025 21:24:33 +0530 Subject: [PATCH] Bluetooth: Audio: Shell: Add SBC encoded audio Add code to use shell application to test A2DP profile with option to use SBC encoded audio. Add sine tone audio file which will be used to render to encoded audio A2DP sink device. There is an kconfig option to enable/disable encoded audio support Signed-off-by: Vinit Mehta --- .../zephyr/bluetooth/classic/a2dp_codec_sbc.h | 32 ++ include/zephyr/{libsbc => bluetooth}/sbc.h | 1 + modules/libsbc/CMakeLists.txt | 9 +- modules/libsbc/Kconfig | 11 +- subsys/bluetooth/host/classic/Kconfig | 30 ++ .../bluetooth/host/classic/a2dp_codec_sbc.c | 60 ++- subsys/bluetooth/host/classic/shell/a2dp.c | 221 ++++++++- subsys/bluetooth/host/classic/shell/sine.h | 439 ++++++++++++++++++ subsys/bluetooth/lib/CMakeLists.txt | 1 + .../libsbc => subsys/bluetooth/lib}/sbc.c | 6 +- tests/bluetooth/shell/prj_br.conf | 1 + 11 files changed, 787 insertions(+), 24 deletions(-) rename include/zephyr/{libsbc => bluetooth}/sbc.h (99%) create mode 100644 subsys/bluetooth/host/classic/shell/sine.h rename {modules/libsbc => subsys/bluetooth/lib}/sbc.c (97%) diff --git a/include/zephyr/bluetooth/classic/a2dp_codec_sbc.h b/include/zephyr/bluetooth/classic/a2dp_codec_sbc.h index 43f4c44f3355a..2a8013d02d22f 100644 --- a/include/zephyr/bluetooth/classic/a2dp_codec_sbc.h +++ b/include/zephyr/bluetooth/classic/a2dp_codec_sbc.h @@ -111,6 +111,14 @@ struct bt_a2dp_codec_sbc_params { */ uint8_t bt_a2dp_sbc_get_channel_num(struct bt_a2dp_codec_sbc_params *sbc_codec); +/** @brief get channel mode of a2dp sbc config. + * + * @param sbc_codec The a2dp sbc parameter. + * + * @return the channel mode. + */ +enum sbc_ch_mode bt_a2dp_sbc_get_channel_mode(struct bt_a2dp_codec_sbc_params *sbc_codec); + /** @brief get sample rate of a2dp sbc config. * * @param sbc_codec The a2dp sbc parameter. @@ -119,6 +127,30 @@ uint8_t bt_a2dp_sbc_get_channel_num(struct bt_a2dp_codec_sbc_params *sbc_codec); */ uint32_t bt_a2dp_sbc_get_sampling_frequency(struct bt_a2dp_codec_sbc_params *sbc_codec); +/** @brief get subband num of a2dp sbc config. + * + * @param sbc_codec The a2dp sbc parameter. + * + * @return the subband num. + */ +uint8_t bt_a2dp_sbc_get_subband_num(struct bt_a2dp_codec_sbc_params *sbc_codec); + +/** @brief get block length of a2dp sbc config. + * + * @param sbc_codec The a2dp sbc parameter. + * + * @return the block length. + */ +uint8_t bt_a2dp_sbc_get_block_length(struct bt_a2dp_codec_sbc_params *sbc_codec); + +/** @brief get allocation method of a2dp sbc config. + * + * @param sbc_codec The a2dp sbc parameter. + * + * @return the allocation method. + */ +enum sbc_alloc_mthd bt_a2dp_sbc_get_allocation_method(struct bt_a2dp_codec_sbc_params *sbc_codec); + #ifdef __cplusplus } #endif diff --git a/include/zephyr/libsbc/sbc.h b/include/zephyr/bluetooth/sbc.h similarity index 99% rename from include/zephyr/libsbc/sbc.h rename to include/zephyr/bluetooth/sbc.h index 399f2bb67557e..72559a0038146 100644 --- a/include/zephyr/libsbc/sbc.h +++ b/include/zephyr/bluetooth/sbc.h @@ -10,6 +10,7 @@ #include #include #include +#include #include "sbc_encoder.h" #include "oi_codec_sbc.h" #include "oi_status.h" diff --git a/modules/libsbc/CMakeLists.txt b/modules/libsbc/CMakeLists.txt index db82cb49bd2b7..1b4cc6fd46efc 100644 --- a/modules/libsbc/CMakeLists.txt +++ b/modules/libsbc/CMakeLists.txt @@ -1,11 +1,10 @@ -if(CONFIG_LIBSBC_ENCODER OR CONFIG_LIBSBC_DECODER) +if(CONFIG_LIBSBC) zephyr_library_named(libsbc) -zephyr_library_compile_options(-O3 -std=c11 -ffast-math -Wno-array-bounds) +zephyr_library_compile_options(-O3 -std=c11 -ffast-math -Wno-stringop-overflow) zephyr_compile_definitions(SBC_FOR_EMBEDDED_LINUX) zephyr_compile_definitions(SBC_NO_PCM_CPY_OPTION) -zephyr_library_sources(sbc.c) zephyr_include_directories( ${ZEPHYR_LIBSBC_MODULE_DIR}/encoder/include @@ -16,7 +15,6 @@ zephyr_include_directories( ${ZEPHYR_LIBSBC_MODULE_DIR}/decoder/srce ) -if(CONFIG_LIBSBC_ENCODER) zephyr_library_sources( ${ZEPHYR_LIBSBC_MODULE_DIR}/encoder/srce/sbc_analysis.c ${ZEPHYR_LIBSBC_MODULE_DIR}/encoder/srce/sbc_dct.c @@ -27,9 +25,7 @@ zephyr_library_sources( ${ZEPHYR_LIBSBC_MODULE_DIR}/encoder/srce/sbc_encoder.c ${ZEPHYR_LIBSBC_MODULE_DIR}/encoder/srce/sbc_packing.c ) -endif() -if(CONFIG_LIBSBC_DECODER) zephyr_library_sources( ${ZEPHYR_LIBSBC_MODULE_DIR}/decoder/srce/alloc.c ${ZEPHYR_LIBSBC_MODULE_DIR}/decoder/srce/bitalloc.c @@ -48,4 +44,3 @@ zephyr_library_sources( ${ZEPHYR_LIBSBC_MODULE_DIR}/decoder/srce/synthesis-sbc.c ) endif() -endif() diff --git a/modules/libsbc/Kconfig b/modules/libsbc/Kconfig index af81496226793..0235597a4aa0e 100644 --- a/modules/libsbc/Kconfig +++ b/modules/libsbc/Kconfig @@ -4,12 +4,7 @@ config ZEPHYR_LIBSBC_MODULE bool -config LIBSBC_ENCODER - bool "libsbc encoder Support" +config LIBSBC + bool "libsbc Support" help - This option enables the Android SBC encoder library for Bluetooth A2DP - -config LIBSBC_DECODER - bool "libsbc decoder Support" - help - This option enables the Android SBC decoder library for Bluetooth A2DP + This option enables Low Complexity Subband Codec (SBC) diff --git a/subsys/bluetooth/host/classic/Kconfig b/subsys/bluetooth/host/classic/Kconfig index c771cfdcd043e..c9f0abcb509c9 100644 --- a/subsys/bluetooth/host/classic/Kconfig +++ b/subsys/bluetooth/host/classic/Kconfig @@ -444,6 +444,7 @@ config BT_AVDTP config BT_A2DP bool "Bluetooth A2DP Profile [EXPERIMENTAL]" select BT_AVDTP + imply LIBSBC select EXPERIMENTAL help This option enables the A2DP profile @@ -478,6 +479,26 @@ config BT_A2DP_SINK help This option enables the A2DP profile sink function +config BT_A2DP_SOURCE_DISCOVER_RESULT_COUNT + int "Maximum result count per device discovery" + default 10 + +config BT_A2DP_SOURCE_EPS_DISCOVER_COUNT + int "Maximum result count per a2dp endpoint discovery" + default 10 + +config BT_A2DP_SOURCE_SBC_BIT_RATE_DEFAULT + int "default sbc bit rate" + default 229 + +config BT_A2DP_SOURCE_DATA_SEND_INTERVAL + int "data send interval (ms)" + default 20 + +config BT_A2DP_SOURCE_DATA_BUF_SIZE + int "data buffer size (bytes)" + default 1000 + endif # BT_A2DP config BT_AVCTP @@ -617,6 +638,15 @@ config BT_OEBX_RSP_CODE_TO_STR endif # BT_GOEP +config BT_A2DP_SOURCE_SBC_AUDIO_SHELL + bool "A2DP Source SBC Audio Shell Support" + depends on BT_A2DP_SOURCE && SHELL + default n + help + Enable A2DP source SBC audio encoding and playback functionality + in the shell. This includes SBC encoder support, audio streaming, + and related shell commands for testing A2DP source functionality. + endif # BT_CLASSIC endmenu diff --git a/subsys/bluetooth/host/classic/a2dp_codec_sbc.c b/subsys/bluetooth/host/classic/a2dp_codec_sbc.c index 33c1a39a098f6..601ab9a22f7b9 100644 --- a/subsys/bluetooth/host/classic/a2dp_codec_sbc.c +++ b/subsys/bluetooth/host/classic/a2dp_codec_sbc.c @@ -14,7 +14,7 @@ #include #include - +#include uint8_t bt_a2dp_sbc_get_channel_num(struct bt_a2dp_codec_sbc_params *sbc_codec) { @@ -33,6 +33,23 @@ uint8_t bt_a2dp_sbc_get_channel_num(struct bt_a2dp_codec_sbc_params *sbc_codec) } } +enum sbc_ch_mode bt_a2dp_sbc_get_channel_mode(struct bt_a2dp_codec_sbc_params *sbc_codec) +{ + __ASSERT_NO_MSG(sbc_codec != NULL); + + if (sbc_codec->config[0] & A2DP_SBC_CH_MODE_MONO) { + return SBC_CH_MODE_MONO; + } else if (sbc_codec->config[0] & A2DP_SBC_CH_MODE_DUAL) { + return SBC_CH_MODE_DUAL_CHANNEL; + } else if (sbc_codec->config[0] & A2DP_SBC_CH_MODE_STEREO) { + return SBC_CH_MODE_STEREO; + } else if (sbc_codec->config[0] & A2DP_SBC_CH_MODE_JOINT) { + return SBC_CH_MODE_JOINT_STEREO; + } else { + return SBC_CH_MODE_MONO; + } +} + uint32_t bt_a2dp_sbc_get_sampling_frequency(struct bt_a2dp_codec_sbc_params *sbc_codec) { __ASSERT_NO_MSG(sbc_codec != NULL); @@ -49,3 +66,44 @@ uint32_t bt_a2dp_sbc_get_sampling_frequency(struct bt_a2dp_codec_sbc_params *sbc return 0U; } } + +uint8_t bt_a2dp_sbc_get_subband_num(struct bt_a2dp_codec_sbc_params *sbc_codec) +{ + __ASSERT_NO_MSG(sbc_codec != NULL); + + if (sbc_codec->config[1] & A2DP_SBC_SUBBAND_4) { + return 4U; + } else if (sbc_codec->config[1] & A2DP_SBC_SUBBAND_8) { + return 8U; + } else { + return 0U; + } +} + +uint8_t bt_a2dp_sbc_get_block_length(struct bt_a2dp_codec_sbc_params *sbc_codec) +{ + __ASSERT_NO_MSG(sbc_codec != NULL); + + if (sbc_codec->config[1] & A2DP_SBC_BLK_LEN_4) { + return 4U; + } else if (sbc_codec->config[1] & A2DP_SBC_BLK_LEN_8) { + return 8U; + } else if (sbc_codec->config[1] & A2DP_SBC_BLK_LEN_12) { + return 12U; + } else if (sbc_codec->config[1] & A2DP_SBC_BLK_LEN_16) { + return 16U; + } else { + return 0U; + } +} + +enum sbc_alloc_mthd bt_a2dp_sbc_get_allocation_method(struct bt_a2dp_codec_sbc_params *sbc_codec) +{ + __ASSERT_NO_MSG(sbc_codec != NULL); + + if (sbc_codec->config[1] & A2DP_SBC_ALLOC_MTHD_SNR) { + return SBC_ALLOC_MTHD_SNR; + } else { + return SBC_ALLOC_MTHD_LOUDNESS; + } +} diff --git a/subsys/bluetooth/host/classic/shell/a2dp.c b/subsys/bluetooth/host/classic/shell/a2dp.c index 2802731dab8a9..9b9b49e249cb5 100644 --- a/subsys/bluetooth/host/classic/shell/a2dp.c +++ b/subsys/bluetooth/host/classic/shell/a2dp.c @@ -1,5 +1,5 @@ /* - * Copyright 2024 NXP + * Copyright 2024-2025 NXP * * SPDX-License-Identifier: Apache-2.0 */ @@ -19,6 +19,10 @@ #include #include #include +#if defined(CONFIG_BT_A2DP_SOURCE_SBC_AUDIO_SHELL) +#include +#include "sine.h" +#endif #include #include @@ -42,7 +46,22 @@ static struct bt_a2dp_ep *registered_sbc_endpoint; static struct bt_a2dp_stream sbc_stream; static struct bt_a2dp_stream_ops stream_ops; +#if defined(CONFIG_BT_A2DP_SOURCE_SBC_AUDIO_SHELL) +/* sbc audio stream control variables */ +static int64_t ref_time; +static uint32_t a2dp_src_missed_count; +static volatile bool a2dp_src_playback; +static volatile int media_index; +static uint32_t a2dp_src_sf; +static uint8_t a2dp_src_nc; +static uint32_t send_samples_count; +static uint16_t send_count; +/* 20ms max packet pcm data size. the max is 480 * 2 * 2 * 2 */ +static uint8_t a2dp_pcm_buffer[480 * 2 * 2 * 2]; +struct sbc_encoder encoder; +#endif /* CONFIG_BT_A2DP_SOURCE_SBC_AUDIO_SHELL */ #if defined(CONFIG_BT_A2DP_SOURCE) +#if !defined(CONFIG_BT_A2DP_SOURCE_SBC_AUDIO_SHELL) static uint8_t media_data[] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, @@ -56,10 +75,16 @@ static uint8_t media_data[] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, }; #endif +#endif +BT_A2DP_SBC_EP_CFG_DEFAULT(sbc_cfg_default, A2DP_SBC_SAMP_FREQ_44100); NET_BUF_POOL_DEFINE(a2dp_tx_pool, CONFIG_BT_MAX_CONN, - BT_L2CAP_BUF_SIZE(CONFIG_BT_L2CAP_TX_MTU), + BT_L2CAP_BUF_SIZE(CONFIG_BT_A2DP_SOURCE_DATA_BUF_SIZE), CONFIG_BT_CONN_TX_USER_DATA_SIZE, NULL); +#if defined(CONFIG_BT_A2DP_SOURCE_SBC_AUDIO_SHELL) +static void a2dp_playback_timeout_handler(struct k_timer *timer); +K_TIMER_DEFINE(a2dp_player_timer, a2dp_playback_timeout_handler, NULL); +#endif static struct bt_sdp_attribute a2dp_sink_attrs[] = { BT_SDP_NEW_SERVICE, @@ -197,6 +222,159 @@ static struct bt_sdp_attribute a2dp_source_attrs[] = { BT_SDP_SUPPORTED_FEATURES(0x0001U), }; +#if defined(CONFIG_BT_A2DP_SOURCE_SBC_AUDIO_SHELL) +static uint8_t *a2dp_produce_media(uint32_t samples_num) +{ + uint8_t *media = NULL; + uint16_t medialen; + + /* Music Audio is Stereo */ + medialen = (samples_num * a2dp_src_nc * 2); + + /* For mono or dual configuration, skip alternative samples */ + if (1 == a2dp_src_nc) { + uint16_t index; + + media = (uint8_t *)&a2dp_pcm_buffer[0]; + + for (index = 0; index < samples_num; index++) { + media[(2 * index)] = *((uint8_t *)media_data + media_index); + media[(2 * index) + 1] = *((uint8_t *)media_data + media_index + 1); + /* Update the tone index */ + media_index += 4u; + if (media_index >= sizeof(media_data)) { + media_index = 0U; + } + } + } else { + if ((media_index + (samples_num << 2)) > sizeof(media_data)) { + media = (uint8_t *)&a2dp_pcm_buffer[0]; + memcpy(media, ((uint8_t *)media_data + media_index), + sizeof(media_data) - media_index); + memcpy(&media[sizeof(media_data) - media_index], + ((uint8_t *)media_data), + ((samples_num << 2) - (sizeof(media_data) - media_index))); + /* Update the tone index */ + media_index = ((samples_num << 2) - + (sizeof(media_data) - media_index)); + } else { + media = ((uint8_t *)media_data + media_index); + /* Update the tone index */ + media_index += (samples_num << 2); + if (media_index >= sizeof(media_data)) { + media_index = 0U; + } + } + } + + return media; +} + +static void audio_work_handler(struct k_work *work) +{ + int64_t period_ms; + uint32_t a2dp_src_num_samples; + uint8_t *pcm_data; + uint8_t index; + uint32_t pcm_frame_size; + uint32_t pcm_frame_samples; + uint32_t encoded_frame_size; + struct net_buf *buf; + uint8_t frame_num = 0; + uint8_t *sbc_hdr; + uint32_t pdu_len; + uint32_t out_size; + int err; + + /* If stopped then return */ + if (!a2dp_src_playback) { + return; + } + + buf = bt_a2dp_stream_create_pdu(&a2dp_tx_pool, K_NO_WAIT); + if (buf == NULL) { + /* fail */ + return; + } + + period_ms = k_uptime_delta(&ref_time); + + pcm_frame_size = sbc_frame_bytes(&encoder); + pcm_frame_samples = sbc_frame_samples(&encoder); + encoded_frame_size = sbc_frame_encoded_bytes(&encoder); + + sbc_hdr = net_buf_add(buf, 1u); + /* Get the number of samples */ + a2dp_src_num_samples = (uint16_t)((period_ms * a2dp_src_sf) / 1000); + a2dp_src_missed_count += (uint32_t)((period_ms * a2dp_src_sf) % 1000); + a2dp_src_missed_count += ((a2dp_src_num_samples % pcm_frame_samples) * 1000); + a2dp_src_num_samples = (a2dp_src_num_samples / pcm_frame_samples) * pcm_frame_samples; + frame_num = a2dp_src_num_samples / pcm_frame_samples; + + pdu_len = buf->len + frame_num * encoded_frame_size; + + if (pdu_len > net_buf_tailroom(buf)) { + printk("need increase buf size\n"); + return; + } + + if (pdu_len > bt_a2dp_get_mtu(&sbc_stream)) { + printk("need decrease CONFIG_BT_A2DP_SOURCE_DATA_SEND_INTERVAL\n"); + return; + } + + /* Raw adjust for the drift */ + while (a2dp_src_missed_count >= (1000 * pcm_frame_samples)) { + if (pdu_len + encoded_frame_size > bt_a2dp_get_mtu(&sbc_stream) || + pdu_len + encoded_frame_size > net_buf_tailroom(buf)) { + break; + } + + pdu_len += encoded_frame_size; + a2dp_src_num_samples += pcm_frame_samples; + frame_num++; + a2dp_src_missed_count -= (1000 * pcm_frame_samples); + } + + pcm_data = a2dp_produce_media(a2dp_src_num_samples); + if (pcm_data == NULL) { + printk("no media data\n"); + return; + } + + for (index = 0; index < frame_num; index++) { + out_size = sbc_encode(&encoder, (uint8_t *)&pcm_data[index * pcm_frame_size], + net_buf_tail(buf)); + if (encoded_frame_size != out_size) { + printk("sbc encode fail\n"); + continue; + } + + net_buf_add(buf, encoded_frame_size); + } + + *sbc_hdr = (uint8_t)BT_A2DP_SBC_MEDIA_HDR_ENCODE(frame_num, 0, 0, 0); + + if (default_a2dp != NULL) { + err = bt_a2dp_stream_send(&sbc_stream, buf, send_count, send_samples_count); + if (err < 0) { + printk(" Failed to send SBC audio data on streams(%d)\n", err); + net_buf_unref(buf); + } + } + + send_count++; + send_samples_count += a2dp_src_num_samples; +} + +static K_WORK_DEFINE(audio_work, audio_work_handler); + +static void a2dp_playback_timeout_handler(struct k_timer *timer) +{ + k_work_submit(&audio_work); +} +#endif + static struct bt_sdp_record a2dp_source_rec = BT_SDP_RECORD(a2dp_source_attrs); static void shell_a2dp_print_capabilities(struct bt_a2dp_ep_info *ep_info) @@ -411,6 +589,30 @@ static void app_suspend_rsp(struct bt_a2dp_stream *stream, uint8_t rsp_err_code) static void stream_configured(struct bt_a2dp_stream *stream) { bt_shell_print("stream configured"); +#if defined(CONFIG_BT_A2DP_SOURCE_SBC_AUDIO_SHELL) + struct sbc_encoder_init_param param; + struct bt_a2dp_codec_sbc_params *sbc_config = (struct bt_a2dp_codec_sbc_params *) + &sbc_cfg_default.codec_config->codec_ie[0]; + + a2dp_src_sf = bt_a2dp_sbc_get_sampling_frequency(sbc_config); + a2dp_src_nc = bt_a2dp_sbc_get_channel_num(sbc_config); + + param.bit_rate = CONFIG_BT_A2DP_SOURCE_SBC_BIT_RATE_DEFAULT; + param.samp_freq = a2dp_src_sf; + param.blk_len = bt_a2dp_sbc_get_block_length(sbc_config); + param.subband = bt_a2dp_sbc_get_subband_num(sbc_config); + param.alloc_mthd = bt_a2dp_sbc_get_allocation_method(sbc_config); + param.ch_mode = bt_a2dp_sbc_get_channel_mode(sbc_config); + param.ch_num = bt_a2dp_sbc_get_channel_num(sbc_config); + param.min_bitpool = sbc_config->min_bitpool; + param.max_bitpool = sbc_config->max_bitpool; + + if (sbc_setup_encoder(&encoder, ¶m)) { + printk("sbc encoder initialization fail\n"); + } else { + printk("sbc encoder initialization success\n"); + } +#endif } static void stream_established(struct bt_a2dp_stream *stream) @@ -426,11 +628,23 @@ static void stream_released(struct bt_a2dp_stream *stream) static void stream_started(struct bt_a2dp_stream *stream) { bt_shell_print("stream started"); +#if defined(CONFIG_BT_A2DP_SOURCE_SBC_AUDIO_SHELL) + uint32_t audio_time_interval = CONFIG_BT_A2DP_SOURCE_DATA_SEND_INTERVAL; + + /* Start Audio Source */ + a2dp_src_playback = true; + + k_uptime_delta(&ref_time); + k_timer_start(&a2dp_player_timer, K_MSEC(audio_time_interval), K_MSEC(audio_time_interval)); +#endif } static void stream_suspended(struct bt_a2dp_stream *stream) { bt_shell_print("stream suspended"); +#if defined(CONFIG_BT_A2DP_SOURCE_SBC_AUDIO_SHELL) + k_timer_stop(&a2dp_player_timer); +#endif } #if defined(CONFIG_BT_A2DP_SINK) @@ -645,7 +859,6 @@ static struct bt_a2dp_stream_ops stream_ops = { #endif }; -BT_A2DP_SBC_EP_CFG_DEFAULT(sbc_cfg_default, A2DP_SBC_SAMP_FREQ_44100); static int cmd_configure(const struct shell *sh, int32_t argc, char *argv[]) { int err; @@ -672,7 +885,7 @@ static int cmd_configure(const struct shell *sh, int32_t argc, char *argv[]) registered_sbc_endpoint, found_peer_sbc_endpoint, &sbc_cfg_default); if (err) { - shell_error(sh, "fail to configure"); + shell_error(sh, "fail to configure: %d", err); } } else { shell_error(sh, "a2dp is not connected"); diff --git a/subsys/bluetooth/host/classic/shell/sine.h b/subsys/bluetooth/host/classic/shell/sine.h new file mode 100644 index 0000000000000..90fecda15046c --- /dev/null +++ b/subsys/bluetooth/host/classic/shell/sine.h @@ -0,0 +1,439 @@ +/* + * Copyright 2025 NXP + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#ifndef ZEPHYR_INCLUDE_SINE_H_ +#define ZEPHYR_INCLUDE_SINE_H_ + +static const uint8_t media_data[] = { + 0x00, 0x00, 0x00, 0x00, 0x08, 0x0b, 0x08, 0x0b, 0xbb, 0x15, 0xbb, 0x15, 0xc9, 0x1f, 0xc9, + 0x1f, 0xe4, 0x28, 0xe4, 0x28, 0xc8, 0x30, 0xc8, 0x30, 0x38, 0x37, 0x38, 0x37, 0x03, 0x3c, + 0x03, 0x3c, 0x04, 0x3f, 0x04, 0x3f, 0x25, 0x40, 0x25, 0x40, 0x5d, 0x3f, 0x5d, 0x3f, 0xb1, + 0x3c, 0xb1, 0x3c, 0x38, 0x38, 0x38, 0x38, 0x11, 0x32, 0x11, 0x32, 0x6d, 0x2a, 0x6d, 0x2a, + 0x85, 0x21, 0x85, 0x21, 0x9e, 0x17, 0x9e, 0x17, 0x02, 0x0d, 0x02, 0x0d, 0x04, 0x02, 0x04, + 0x02, 0xf6, 0xf6, 0xf6, 0xf6, 0x2d, 0xec, 0x2d, 0xec, 0xfb, 0xe1, 0xfb, 0xe1, 0xae, 0xd8, + 0xae, 0xd8, 0x8d, 0xd0, 0x8d, 0xd0, 0xd6, 0xc9, 0xd6, 0xc9, 0xbb, 0xc4, 0xbb, 0xc4, 0x65, + 0xc1, 0x65, 0xc1, 0xeb, 0xbf, 0xeb, 0xbf, 0x5b, 0xc0, 0x5b, 0xc0, 0xaf, 0xc2, 0xaf, 0xc2, + 0xd7, 0xc6, 0xd7, 0xc6, 0xb3, 0xcc, 0xb3, 0xcc, 0x16, 0xd4, 0x16, 0xd4, 0xc7, 0xdc, 0xc7, + 0xdc, 0x86, 0xe6, 0x86, 0xe6, 0x06, 0xf1, 0x06, 0xf1, 0xf9, 0xfb, 0xf9, 0xfb, 0x0a, 0x07, + 0x0a, 0x07, 0xe6, 0x11, 0xe6, 0x11, 0x39, 0x1c, 0x39, 0x1c, 0xb5, 0x25, 0xb5, 0x25, 0x12, + 0x2e, 0x12, 0x2e, 0x0f, 0x35, 0x0f, 0x35, 0x78, 0x3a, 0x78, 0x3a, 0x23, 0x3e, 0x23, 0x3e, + 0xf4, 0x3f, 0xf4, 0x3f, 0xde, 0x3f, 0xde, 0x3f, 0xe1, 0x3d, 0xe1, 0x3d, 0x0c, 0x3a, 0x0c, + 0x3a, 0x7c, 0x34, 0x7c, 0x34, 0x5d, 0x2d, 0x5d, 0x2d, 0xe3, 0x24, 0xe3, 0x24, 0x51, 0x1b, + 0x51, 0x1b, 0xee, 0x10, 0xee, 0x10, 0x0a, 0x06, 0x0a, 0x06, 0xf7, 0xfa, 0xf7, 0xfa, 0x0c, + 0xf0, 0x0c, 0xf0, 0x9a, 0xe5, 0x9a, 0xe5, 0xf1, 0xdb, 0xf1, 0xdb, 0x5b, 0xd3, 0x5b, 0xd3, + 0x1a, 0xcc, 0x1a, 0xcc, 0x64, 0xc6, 0x64, 0xc6, 0x65, 0xc2, 0x65, 0xc2, 0x3c, 0xc0, 0x3c, + 0xc0, 0xfa, 0xbf, 0xfa, 0xbf, 0x9f, 0xc1, 0x9f, 0xc1, 0x20, 0xc5, 0x20, 0xc5, 0x62, 0xca, + 0x62, 0xca, 0x3c, 0xd1, 0x3c, 0xd1, 0x7b, 0xd9, 0x7b, 0xd9, 0xe0, 0xe2, 0xe0, 0xe2, 0x23, + 0xed, 0x23, 0xed, 0xf6, 0xf7, 0xf6, 0xf7, 0x06, 0x03, 0x06, 0x03, 0xff, 0x0d, 0xff, 0x0d, + 0x8d, 0x18, 0x8d, 0x18, 0x60, 0x22, 0x60, 0x22, 0x2d, 0x2b, 0x2d, 0x2b, 0xb1, 0x32, 0xb1, + 0x32, 0xb2, 0x38, 0xb2, 0x38, 0x03, 0x3d, 0x03, 0x3d, 0x83, 0x3f, 0x83, 0x3f, 0x1f, 0x40, + 0x1f, 0x40, 0xd2, 0x3e, 0xd2, 0x3e, 0xa6, 0x3b, 0xa6, 0x3b, 0xb3, 0x36, 0xb3, 0x36, 0x1f, + 0x30, 0x1f, 0x30, 0x1c, 0x28, 0x1c, 0x28, 0xe8, 0x1e, 0xe8, 0x1e, 0xc8, 0x14, 0xc8, 0x14, + 0x09, 0x0a, 0x09, 0x0a, 0xfe, 0xfe, 0xfe, 0xfe, 0xfb, 0xf3, 0xfb, 0xf3, 0x53, 0xe9, 0x53, + 0xe9, 0x58, 0xdf, 0x58, 0xdf, 0x56, 0xd6, 0x56, 0xd6, 0x92, 0xce, 0x92, 0xce, 0x47, 0xc8, + 0x47, 0xc8, 0xa4, 0xc3, 0xa4, 0xc3, 0xce, 0xc0, 0xce, 0xc0, 0xd9, 0xbf, 0xd9, 0xbf, 0xce, + 0xc0, 0xce, 0xc0, 0xa4, 0xc3, 0xa4, 0xc3, 0x47, 0xc8, 0x47, 0xc8, 0x92, 0xce, 0x92, 0xce, + 0x56, 0xd6, 0x56, 0xd6, 0x58, 0xdf, 0x58, 0xdf, 0x53, 0xe9, 0x53, 0xe9, 0xfb, 0xf3, 0xfb, + 0xf3, 0xfe, 0xfe, 0xfe, 0xfe, 0x09, 0x0a, 0x09, 0x0a, 0xc8, 0x14, 0xc8, 0x14, 0xe8, 0x1e, + 0xe8, 0x1e, 0x1c, 0x28, 0x1c, 0x28, 0x1f, 0x30, 0x1f, 0x30, 0xb3, 0x36, 0xb3, 0x36, 0xa6, + 0x3b, 0xa6, 0x3b, 0xd2, 0x3e, 0xd2, 0x3e, 0x1f, 0x40, 0x1f, 0x40, 0x83, 0x3f, 0x83, 0x3f, + 0x03, 0x3d, 0x03, 0x3d, 0xb2, 0x38, 0xb2, 0x38, 0xb1, 0x32, 0xb1, 0x32, 0x2d, 0x2b, 0x2d, + 0x2b, 0x60, 0x22, 0x60, 0x22, 0x8d, 0x18, 0x8d, 0x18, 0xff, 0x0d, 0xff, 0x0d, 0x06, 0x03, + 0x06, 0x03, 0xf6, 0xf7, 0xf6, 0xf7, 0x23, 0xed, 0x23, 0xed, 0xe0, 0xe2, 0xe0, 0xe2, 0x7b, + 0xd9, 0x7b, 0xd9, 0x3c, 0xd1, 0x3c, 0xd1, 0x62, 0xca, 0x62, 0xca, 0x20, 0xc5, 0x20, 0xc5, + 0x9f, 0xc1, 0x9f, 0xc1, 0xfa, 0xbf, 0xfa, 0xbf, 0x3c, 0xc0, 0x3c, 0xc0, 0x65, 0xc2, 0x65, + 0xc2, 0x64, 0xc6, 0x64, 0xc6, 0x1a, 0xcc, 0x1a, 0xcc, 0x5b, 0xd3, 0x5b, 0xd3, 0xf1, 0xdb, + 0xf1, 0xdb, 0x9a, 0xe5, 0x9a, 0xe5, 0x0c, 0xf0, 0x0c, 0xf0, 0xf7, 0xfa, 0xf7, 0xfa, 0x0a, + 0x06, 0x0a, 0x06, 0xee, 0x10, 0xee, 0x10, 0x51, 0x1b, 0x51, 0x1b, 0xe3, 0x24, 0xe3, 0x24, + 0x5d, 0x2d, 0x5d, 0x2d, 0x7c, 0x34, 0x7c, 0x34, 0x0c, 0x3a, 0x0c, 0x3a, 0xe1, 0x3d, 0xe1, + 0x3d, 0xde, 0x3f, 0xde, 0x3f, 0xf4, 0x3f, 0xf4, 0x3f, 0x23, 0x3e, 0x23, 0x3e, 0x78, 0x3a, + 0x78, 0x3a, 0x0f, 0x35, 0x0f, 0x35, 0x12, 0x2e, 0x12, 0x2e, 0xb5, 0x25, 0xb5, 0x25, 0x39, + 0x1c, 0x39, 0x1c, 0xe6, 0x11, 0xe6, 0x11, 0x0a, 0x07, 0x0a, 0x07, 0xf9, 0xfb, 0xf9, 0xfb, + 0x06, 0xf1, 0x06, 0xf1, 0x86, 0xe6, 0x86, 0xe6, 0xc7, 0xdc, 0xc7, 0xdc, 0x16, 0xd4, 0x16, + 0xd4, 0xb3, 0xcc, 0xb3, 0xcc, 0xd7, 0xc6, 0xd7, 0xc6, 0xaf, 0xc2, 0xaf, 0xc2, 0x5b, 0xc0, + 0x5b, 0xc0, 0xeb, 0xbf, 0xeb, 0xbf, 0x65, 0xc1, 0x65, 0xc1, 0xbb, 0xc4, 0xbb, 0xc4, 0xd6, + 0xc9, 0xd6, 0xc9, 0x8d, 0xd0, 0x8d, 0xd0, 0xae, 0xd8, 0xae, 0xd8, 0xfb, 0xe1, 0xfb, 0xe1, + 0x2d, 0xec, 0x2d, 0xec, 0xf6, 0xf6, 0xf6, 0xf6, 0x04, 0x02, 0x04, 0x02, 0x02, 0x0d, 0x02, + 0x0d, 0x9e, 0x17, 0x9e, 0x17, 0x85, 0x21, 0x85, 0x21, 0x6d, 0x2a, 0x6d, 0x2a, 0x11, 0x32, + 0x11, 0x32, 0x38, 0x38, 0x38, 0x38, 0xb1, 0x3c, 0xb1, 0x3c, 0x5d, 0x3f, 0x5d, 0x3f, 0x25, + 0x40, 0x25, 0x40, 0x04, 0x3f, 0x04, 0x3f, 0x03, 0x3c, 0x03, 0x3c, 0x38, 0x37, 0x38, 0x37, + 0xc8, 0x30, 0xc8, 0x30, 0xe4, 0x28, 0xe4, 0x28, 0xc9, 0x1f, 0xc9, 0x1f, 0xbb, 0x15, 0xbb, + 0x15, 0x08, 0x0b, 0x08, 0x0b, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xf4, 0xf8, 0xf4, 0x45, 0xea, + 0x45, 0xea, 0x37, 0xe0, 0x37, 0xe0, 0x1c, 0xd7, 0x1c, 0xd7, 0x38, 0xcf, 0x38, 0xcf, 0xc8, + 0xc8, 0xc8, 0xc8, 0xfd, 0xc3, 0xfd, 0xc3, 0xfc, 0xc0, 0xfc, 0xc0, 0xdb, 0xbf, 0xdb, 0xbf, + 0xa3, 0xc0, 0xa3, 0xc0, 0x4f, 0xc3, 0x4f, 0xc3, 0xc8, 0xc7, 0xc8, 0xc7, 0xef, 0xcd, 0xef, + 0xcd, 0x93, 0xd5, 0x93, 0xd5, 0x7b, 0xde, 0x7b, 0xde, 0x62, 0xe8, 0x62, 0xe8, 0xfe, 0xf2, + 0xfe, 0xf2, 0xfc, 0xfd, 0xfc, 0xfd, 0x0a, 0x09, 0x0a, 0x09, 0xd3, 0x13, 0xd3, 0x13, 0x05, + 0x1e, 0x05, 0x1e, 0x52, 0x27, 0x52, 0x27, 0x73, 0x2f, 0x73, 0x2f, 0x2a, 0x36, 0x2a, 0x36, + 0x45, 0x3b, 0x45, 0x3b, 0x9b, 0x3e, 0x9b, 0x3e, 0x15, 0x40, 0x15, 0x40, 0xa5, 0x3f, 0xa5, + 0x3f, 0x51, 0x3d, 0x51, 0x3d, 0x29, 0x39, 0x29, 0x39, 0x4d, 0x33, 0x4d, 0x33, 0xea, 0x2b, + 0xea, 0x2b, 0x39, 0x23, 0x39, 0x23, 0x7a, 0x19, 0x7a, 0x19, 0xfa, 0x0e, 0xfa, 0x0e, 0x07, + 0x04, 0x07, 0x04, 0xf6, 0xf8, 0xf6, 0xf8, 0x1a, 0xee, 0x1a, 0xee, 0xc7, 0xe3, 0xc7, 0xe3, + 0x4b, 0xda, 0x4b, 0xda, 0xee, 0xd1, 0xee, 0xd1, 0xf1, 0xca, 0xf1, 0xca, 0x88, 0xc5, 0x88, + 0xc5, 0xdd, 0xc1, 0xdd, 0xc1, 0x0c, 0xc0, 0x0c, 0xc0, 0x22, 0xc0, 0x22, 0xc0, 0x1f, 0xc2, + 0x1f, 0xc2, 0xf4, 0xc5, 0xf4, 0xc5, 0x84, 0xcb, 0x84, 0xcb, 0xa3, 0xd2, 0xa3, 0xd2, 0x1d, + 0xdb, 0x1d, 0xdb, 0xaf, 0xe4, 0xaf, 0xe4, 0x12, 0xef, 0x12, 0xef, 0xf6, 0xf9, 0xf6, 0xf9, + 0x09, 0x05, 0x09, 0x05, 0xf4, 0x0f, 0xf4, 0x0f, 0x66, 0x1a, 0x66, 0x1a, 0x0f, 0x24, 0x0f, + 0x24, 0xa5, 0x2c, 0xa5, 0x2c, 0xe6, 0x33, 0xe6, 0x33, 0x9c, 0x39, 0x9c, 0x39, 0x9b, 0x3d, + 0x9b, 0x3d, 0xc4, 0x3f, 0xc4, 0x3f, 0x06, 0x40, 0x06, 0x40, 0x61, 0x3e, 0x61, 0x3e, 0xe0, + 0x3a, 0xe0, 0x3a, 0x9e, 0x35, 0x9e, 0x35, 0xc4, 0x2e, 0xc4, 0x2e, 0x85, 0x26, 0x85, 0x26, + 0x20, 0x1d, 0x20, 0x1d, 0xdd, 0x12, 0xdd, 0x12, 0x0a, 0x08, 0x0a, 0x08, 0xfa, 0xfc, 0xfa, + 0xfc, 0x01, 0xf2, 0x01, 0xf2, 0x73, 0xe7, 0x73, 0xe7, 0xa0, 0xdd, 0xa0, 0xdd, 0xd3, 0xd4, + 0xd3, 0xd4, 0x4f, 0xcd, 0x4f, 0xcd, 0x4e, 0xc7, 0x4e, 0xc7, 0xfd, 0xc2, 0xfd, 0xc2, 0x7d, + 0xc0, 0x7d, 0xc0, 0xe1, 0xbf, 0xe1, 0xbf, 0x2e, 0xc1, 0x2e, 0xc1, 0x5a, 0xc4, 0x5a, 0xc4, + 0x4d, 0xc9, 0x4d, 0xc9, 0xe1, 0xcf, 0xe1, 0xcf, 0xe4, 0xd7, 0xe4, 0xd7, 0x18, 0xe1, 0x18, + 0xe1, 0x38, 0xeb, 0x38, 0xeb, 0xf7, 0xf5, 0xf7, 0xf5, 0x02, 0x01, 0x02, 0x01, 0x05, 0x0c, + 0x05, 0x0c, 0xad, 0x16, 0xad, 0x16, 0xa8, 0x20, 0xa8, 0x20, 0xaa, 0x29, 0xaa, 0x29, 0x6e, + 0x31, 0x6e, 0x31, 0xb9, 0x37, 0xb9, 0x37, 0x5c, 0x3c, 0x5c, 0x3c, 0x32, 0x3f, 0x32, 0x3f, + 0x27, 0x40, 0x27, 0x40, 0x32, 0x3f, 0x32, 0x3f, 0x5c, 0x3c, 0x5c, 0x3c, 0xb9, 0x37, 0xb9, + 0x37, 0x6e, 0x31, 0x6e, 0x31, 0xaa, 0x29, 0xaa, 0x29, 0xa8, 0x20, 0xa8, 0x20, 0xad, 0x16, + 0xad, 0x16, 0x05, 0x0c, 0x05, 0x0c, 0x02, 0x01, 0x02, 0x01, 0xf7, 0xf5, 0xf7, 0xf5, 0x38, + 0xeb, 0x38, 0xeb, 0x18, 0xe1, 0x18, 0xe1, 0xe4, 0xd7, 0xe4, 0xd7, 0xe1, 0xcf, 0xe1, 0xcf, + 0x4d, 0xc9, 0x4d, 0xc9, 0x5a, 0xc4, 0x5a, 0xc4, 0x2e, 0xc1, 0x2e, 0xc1, 0xe1, 0xbf, 0xe1, + 0xbf, 0x7d, 0xc0, 0x7d, 0xc0, 0xfd, 0xc2, 0xfd, 0xc2, 0x4e, 0xc7, 0x4e, 0xc7, 0x4f, 0xcd, + 0x4f, 0xcd, 0xd3, 0xd4, 0xd3, 0xd4, 0xa0, 0xdd, 0xa0, 0xdd, 0x73, 0xe7, 0x73, 0xe7, 0x01, + 0xf2, 0x01, 0xf2, 0xfa, 0xfc, 0xfa, 0xfc, 0x0a, 0x08, 0x0a, 0x08, 0xdd, 0x12, 0xdd, 0x12, + 0x20, 0x1d, 0x20, 0x1d, 0x85, 0x26, 0x85, 0x26, 0xc4, 0x2e, 0xc4, 0x2e, 0x9e, 0x35, 0x9e, + 0x35, 0xe0, 0x3a, 0xe0, 0x3a, 0x61, 0x3e, 0x61, 0x3e, 0x06, 0x40, 0x06, 0x40, 0xc4, 0x3f, + 0xc4, 0x3f, 0x9b, 0x3d, 0x9b, 0x3d, 0x9c, 0x39, 0x9c, 0x39, 0xe6, 0x33, 0xe6, 0x33, 0xa5, + 0x2c, 0xa5, 0x2c, 0x0f, 0x24, 0x0f, 0x24, 0x66, 0x1a, 0x66, 0x1a, 0xf4, 0x0f, 0xf4, 0x0f, + 0x09, 0x05, 0x09, 0x05, 0xf6, 0xf9, 0xf6, 0xf9, 0x12, 0xef, 0x12, 0xef, 0xaf, 0xe4, 0xaf, + 0xe4, 0x1d, 0xdb, 0x1d, 0xdb, 0xa3, 0xd2, 0xa3, 0xd2, 0x84, 0xcb, 0x84, 0xcb, 0xf4, 0xc5, + 0xf4, 0xc5, 0x1f, 0xc2, 0x1f, 0xc2, 0x22, 0xc0, 0x22, 0xc0, 0x0c, 0xc0, 0x0c, 0xc0, 0xdd, + 0xc1, 0xdd, 0xc1, 0x88, 0xc5, 0x88, 0xc5, 0xf1, 0xca, 0xf1, 0xca, 0xee, 0xd1, 0xee, 0xd1, + 0x4b, 0xda, 0x4b, 0xda, 0xc7, 0xe3, 0xc7, 0xe3, 0x1a, 0xee, 0x1a, 0xee, 0xf6, 0xf8, 0xf6, + 0xf8, 0x07, 0x04, 0x07, 0x04, 0xfa, 0x0e, 0xfa, 0x0e, 0x7a, 0x19, 0x7a, 0x19, 0x39, 0x23, + 0x39, 0x23, 0xea, 0x2b, 0xea, 0x2b, 0x4d, 0x33, 0x4d, 0x33, 0x29, 0x39, 0x29, 0x39, 0x51, + 0x3d, 0x51, 0x3d, 0xa5, 0x3f, 0xa5, 0x3f, 0x15, 0x40, 0x15, 0x40, 0x9b, 0x3e, 0x9b, 0x3e, + 0x45, 0x3b, 0x45, 0x3b, 0x2a, 0x36, 0x2a, 0x36, 0x73, 0x2f, 0x73, 0x2f, 0x52, 0x27, 0x52, + 0x27, 0x05, 0x1e, 0x05, 0x1e, 0xd3, 0x13, 0xd3, 0x13, 0x0a, 0x09, 0x0a, 0x09, 0xfc, 0xfd, + 0xfc, 0xfd, 0xfe, 0xf2, 0xfe, 0xf2, 0x62, 0xe8, 0x62, 0xe8, 0x7b, 0xde, 0x7b, 0xde, 0x93, + 0xd5, 0x93, 0xd5, 0xef, 0xcd, 0xef, 0xcd, 0xc8, 0xc7, 0xc8, 0xc7, 0x4f, 0xc3, 0x4f, 0xc3, + 0xa3, 0xc0, 0xa3, 0xc0, 0xdb, 0xbf, 0xdb, 0xbf, 0xfc, 0xc0, 0xfc, 0xc0, 0xfd, 0xc3, 0xfd, + 0xc3, 0xc8, 0xc8, 0xc8, 0xc8, 0x38, 0xcf, 0x38, 0xcf, 0x1c, 0xd7, 0x1c, 0xd7, 0x37, 0xe0, + 0x37, 0xe0, 0x45, 0xea, 0x45, 0xea, 0xf8, 0xf4, 0xf8, 0xf4, 0x00, 0x00, 0x00, 0x00, 0x08, + 0x0b, 0x08, 0x0b, 0xbb, 0x15, 0xbb, 0x15, 0xc9, 0x1f, 0xc9, 0x1f, 0xe4, 0x28, 0xe4, 0x28, + 0xc8, 0x30, 0xc8, 0x30, 0x38, 0x37, 0x38, 0x37, 0x03, 0x3c, 0x03, 0x3c, 0x04, 0x3f, 0x04, + 0x3f, 0x25, 0x40, 0x25, 0x40, 0x5d, 0x3f, 0x5d, 0x3f, 0xb1, 0x3c, 0xb1, 0x3c, 0x38, 0x38, + 0x38, 0x38, 0x11, 0x32, 0x11, 0x32, 0x6d, 0x2a, 0x6d, 0x2a, 0x85, 0x21, 0x85, 0x21, 0x9e, + 0x17, 0x9e, 0x17, 0x02, 0x0d, 0x02, 0x0d, 0x04, 0x02, 0x04, 0x02, 0xf6, 0xf6, 0xf6, 0xf6, + 0x2d, 0xec, 0x2d, 0xec, 0xfb, 0xe1, 0xfb, 0xe1, 0xae, 0xd8, 0xae, 0xd8, 0x8d, 0xd0, 0x8d, + 0xd0, 0xd6, 0xc9, 0xd6, 0xc9, 0xbb, 0xc4, 0xbb, 0xc4, 0x65, 0xc1, 0x65, 0xc1, 0xeb, 0xbf, + 0xeb, 0xbf, 0x5b, 0xc0, 0x5b, 0xc0, 0xaf, 0xc2, 0xaf, 0xc2, 0xd7, 0xc6, 0xd7, 0xc6, 0xb3, + 0xcc, 0xb3, 0xcc, 0x16, 0xd4, 0x16, 0xd4, 0xc7, 0xdc, 0xc7, 0xdc, 0x86, 0xe6, 0x86, 0xe6, + 0x06, 0xf1, 0x06, 0xf1, 0xf9, 0xfb, 0xf9, 0xfb, 0x0a, 0x07, 0x0a, 0x07, 0xe6, 0x11, 0xe6, + 0x11, 0x39, 0x1c, 0x39, 0x1c, 0xb5, 0x25, 0xb5, 0x25, 0x12, 0x2e, 0x12, 0x2e, 0x0f, 0x35, + 0x0f, 0x35, 0x78, 0x3a, 0x78, 0x3a, 0x23, 0x3e, 0x23, 0x3e, 0xf4, 0x3f, 0xf4, 0x3f, 0xde, + 0x3f, 0xde, 0x3f, 0xe1, 0x3d, 0xe1, 0x3d, 0x0c, 0x3a, 0x0c, 0x3a, 0x7c, 0x34, 0x7c, 0x34, + 0x5d, 0x2d, 0x5d, 0x2d, 0xe3, 0x24, 0xe3, 0x24, 0x51, 0x1b, 0x51, 0x1b, 0xee, 0x10, 0xee, + 0x10, 0x0a, 0x06, 0x0a, 0x06, 0xf7, 0xfa, 0xf7, 0xfa, 0x0c, 0xf0, 0x0c, 0xf0, 0x9a, 0xe5, + 0x9a, 0xe5, 0xf1, 0xdb, 0xf1, 0xdb, 0x5b, 0xd3, 0x5b, 0xd3, 0x1a, 0xcc, 0x1a, 0xcc, 0x64, + 0xc6, 0x64, 0xc6, 0x65, 0xc2, 0x65, 0xc2, 0x3c, 0xc0, 0x3c, 0xc0, 0xfa, 0xbf, 0xfa, 0xbf, + 0x9f, 0xc1, 0x9f, 0xc1, 0x20, 0xc5, 0x20, 0xc5, 0x62, 0xca, 0x62, 0xca, 0x3c, 0xd1, 0x3c, + 0xd1, 0x7b, 0xd9, 0x7b, 0xd9, 0xe0, 0xe2, 0xe0, 0xe2, 0x23, 0xed, 0x23, 0xed, 0xf6, 0xf7, + 0xf6, 0xf7, 0x06, 0x03, 0x06, 0x03, 0xff, 0x0d, 0xff, 0x0d, 0x8d, 0x18, 0x8d, 0x18, 0x60, + 0x22, 0x60, 0x22, 0x2d, 0x2b, 0x2d, 0x2b, 0xb1, 0x32, 0xb1, 0x32, 0xb2, 0x38, 0xb2, 0x38, + 0x03, 0x3d, 0x03, 0x3d, 0x83, 0x3f, 0x83, 0x3f, 0x1f, 0x40, 0x1f, 0x40, 0xd2, 0x3e, 0xd2, + 0x3e, 0xa6, 0x3b, 0xa6, 0x3b, 0xb3, 0x36, 0xb3, 0x36, 0x1f, 0x30, 0x1f, 0x30, 0x1c, 0x28, + 0x1c, 0x28, 0xe8, 0x1e, 0xe8, 0x1e, 0xc8, 0x14, 0xc8, 0x14, 0x09, 0x0a, 0x09, 0x0a, 0xfe, + 0xfe, 0xfe, 0xfe, 0xfb, 0xf3, 0xfb, 0xf3, 0x53, 0xe9, 0x53, 0xe9, 0x58, 0xdf, 0x58, 0xdf, + 0x56, 0xd6, 0x56, 0xd6, 0x92, 0xce, 0x92, 0xce, 0x47, 0xc8, 0x47, 0xc8, 0xa4, 0xc3, 0xa4, + 0xc3, 0xce, 0xc0, 0xce, 0xc0, 0xd9, 0xbf, 0xd9, 0xbf, 0xce, 0xc0, 0xce, 0xc0, 0xa4, 0xc3, + 0xa4, 0xc3, 0x47, 0xc8, 0x47, 0xc8, 0x92, 0xce, 0x92, 0xce, 0x56, 0xd6, 0x56, 0xd6, 0x58, + 0xdf, 0x58, 0xdf, 0x53, 0xe9, 0x53, 0xe9, 0xfb, 0xf3, 0xfb, 0xf3, 0xfe, 0xfe, 0xfe, 0xfe, + 0x09, 0x0a, 0x09, 0x0a, 0xc8, 0x14, 0xc8, 0x14, 0xe8, 0x1e, 0xe8, 0x1e, 0x1c, 0x28, 0x1c, + 0x28, 0x1f, 0x30, 0x1f, 0x30, 0xb3, 0x36, 0xb3, 0x36, 0xa6, 0x3b, 0xa6, 0x3b, 0xd2, 0x3e, + 0xd2, 0x3e, 0x1f, 0x40, 0x1f, 0x40, 0x83, 0x3f, 0x83, 0x3f, 0x03, 0x3d, 0x03, 0x3d, 0xb2, + 0x38, 0xb2, 0x38, 0xb1, 0x32, 0xb1, 0x32, 0x2d, 0x2b, 0x2d, 0x2b, 0x60, 0x22, 0x60, 0x22, + 0x8d, 0x18, 0x8d, 0x18, 0xff, 0x0d, 0xff, 0x0d, 0x06, 0x03, 0x06, 0x03, 0xf6, 0xf7, 0xf6, + 0xf7, 0x23, 0xed, 0x23, 0xed, 0xe0, 0xe2, 0xe0, 0xe2, 0x7b, 0xd9, 0x7b, 0xd9, 0x3c, 0xd1, + 0x3c, 0xd1, 0x62, 0xca, 0x62, 0xca, 0x20, 0xc5, 0x20, 0xc5, 0x9f, 0xc1, 0x9f, 0xc1, 0xfa, + 0xbf, 0xfa, 0xbf, 0x3c, 0xc0, 0x3c, 0xc0, 0x65, 0xc2, 0x65, 0xc2, 0x64, 0xc6, 0x64, 0xc6, + 0x1a, 0xcc, 0x1a, 0xcc, 0x5b, 0xd3, 0x5b, 0xd3, 0xf1, 0xdb, 0xf1, 0xdb, 0x9a, 0xe5, 0x9a, + 0xe5, 0x0c, 0xf0, 0x0c, 0xf0, 0xf7, 0xfa, 0xf7, 0xfa, 0x0a, 0x06, 0x0a, 0x06, 0xee, 0x10, + 0xee, 0x10, 0x51, 0x1b, 0x51, 0x1b, 0xe3, 0x24, 0xe3, 0x24, 0x5d, 0x2d, 0x5d, 0x2d, 0x7c, + 0x34, 0x7c, 0x34, 0x0c, 0x3a, 0x0c, 0x3a, 0xe1, 0x3d, 0xe1, 0x3d, 0xde, 0x3f, 0xde, 0x3f, + 0xf4, 0x3f, 0xf4, 0x3f, 0x23, 0x3e, 0x23, 0x3e, 0x78, 0x3a, 0x78, 0x3a, 0x0f, 0x35, 0x0f, + 0x35, 0x12, 0x2e, 0x12, 0x2e, 0xb5, 0x25, 0xb5, 0x25, 0x39, 0x1c, 0x39, 0x1c, 0xe6, 0x11, + 0xe6, 0x11, 0x0a, 0x07, 0x0a, 0x07, 0xf9, 0xfb, 0xf9, 0xfb, 0x06, 0xf1, 0x06, 0xf1, 0x86, + 0xe6, 0x86, 0xe6, 0xc7, 0xdc, 0xc7, 0xdc, 0x16, 0xd4, 0x16, 0xd4, 0xb3, 0xcc, 0xb3, 0xcc, + 0xd7, 0xc6, 0xd7, 0xc6, 0xaf, 0xc2, 0xaf, 0xc2, 0x5b, 0xc0, 0x5b, 0xc0, 0xeb, 0xbf, 0xeb, + 0xbf, 0x65, 0xc1, 0x65, 0xc1, 0xbb, 0xc4, 0xbb, 0xc4, 0xd6, 0xc9, 0xd6, 0xc9, 0x8d, 0xd0, + 0x8d, 0xd0, 0xae, 0xd8, 0xae, 0xd8, 0xfb, 0xe1, 0xfb, 0xe1, 0x2d, 0xec, 0x2d, 0xec, 0xf6, + 0xf6, 0xf6, 0xf6, 0x04, 0x02, 0x04, 0x02, 0x02, 0x0d, 0x02, 0x0d, 0x9e, 0x17, 0x9e, 0x17, + 0x85, 0x21, 0x85, 0x21, 0x6d, 0x2a, 0x6d, 0x2a, 0x11, 0x32, 0x11, 0x32, 0x38, 0x38, 0x38, + 0x38, 0xb1, 0x3c, 0xb1, 0x3c, 0x5d, 0x3f, 0x5d, 0x3f, 0x25, 0x40, 0x25, 0x40, 0x04, 0x3f, + 0x04, 0x3f, 0x03, 0x3c, 0x03, 0x3c, 0x38, 0x37, 0x38, 0x37, 0xc8, 0x30, 0xc8, 0x30, 0xe4, + 0x28, 0xe4, 0x28, 0xc9, 0x1f, 0xc9, 0x1f, 0xbb, 0x15, 0xbb, 0x15, 0x08, 0x0b, 0x08, 0x0b, + 0x00, 0x00, 0x00, 0x00, 0xf8, 0xf4, 0xf8, 0xf4, 0x45, 0xea, 0x45, 0xea, 0x37, 0xe0, 0x37, + 0xe0, 0x1c, 0xd7, 0x1c, 0xd7, 0x38, 0xcf, 0x38, 0xcf, 0xc8, 0xc8, 0xc8, 0xc8, 0xfd, 0xc3, + 0xfd, 0xc3, 0xfc, 0xc0, 0xfc, 0xc0, 0xdb, 0xbf, 0xdb, 0xbf, 0xa3, 0xc0, 0xa3, 0xc0, 0x4f, + 0xc3, 0x4f, 0xc3, 0xc8, 0xc7, 0xc8, 0xc7, 0xef, 0xcd, 0xef, 0xcd, 0x93, 0xd5, 0x93, 0xd5, + 0x7b, 0xde, 0x7b, 0xde, 0x62, 0xe8, 0x62, 0xe8, 0xfe, 0xf2, 0xfe, 0xf2, 0xfc, 0xfd, 0xfc, + 0xfd, 0x0a, 0x09, 0x0a, 0x09, 0xd3, 0x13, 0xd3, 0x13, 0x05, 0x1e, 0x05, 0x1e, 0x52, 0x27, + 0x52, 0x27, 0x73, 0x2f, 0x73, 0x2f, 0x2a, 0x36, 0x2a, 0x36, 0x45, 0x3b, 0x45, 0x3b, 0x9b, + 0x3e, 0x9b, 0x3e, 0x15, 0x40, 0x15, 0x40, 0xa5, 0x3f, 0xa5, 0x3f, 0x51, 0x3d, 0x51, 0x3d, + 0x29, 0x39, 0x29, 0x39, 0x4d, 0x33, 0x4d, 0x33, 0xea, 0x2b, 0xea, 0x2b, 0x39, 0x23, 0x39, + 0x23, 0x7a, 0x19, 0x7a, 0x19, 0xfa, 0x0e, 0xfa, 0x0e, 0x07, 0x04, 0x07, 0x04, 0xf6, 0xf8, + 0xf6, 0xf8, 0x1a, 0xee, 0x1a, 0xee, 0xc7, 0xe3, 0xc7, 0xe3, 0x4b, 0xda, 0x4b, 0xda, 0xee, + 0xd1, 0xee, 0xd1, 0xf1, 0xca, 0xf1, 0xca, 0x88, 0xc5, 0x88, 0xc5, 0xdd, 0xc1, 0xdd, 0xc1, + 0x0c, 0xc0, 0x0c, 0xc0, 0x22, 0xc0, 0x22, 0xc0, 0x1f, 0xc2, 0x1f, 0xc2, 0xf4, 0xc5, 0xf4, + 0xc5, 0x84, 0xcb, 0x84, 0xcb, 0xa3, 0xd2, 0xa3, 0xd2, 0x1d, 0xdb, 0x1d, 0xdb, 0xaf, 0xe4, + 0xaf, 0xe4, 0x12, 0xef, 0x12, 0xef, 0xf6, 0xf9, 0xf6, 0xf9, 0x09, 0x05, 0x09, 0x05, 0xf4, + 0x0f, 0xf4, 0x0f, 0x66, 0x1a, 0x66, 0x1a, 0x0f, 0x24, 0x0f, 0x24, 0xa5, 0x2c, 0xa5, 0x2c, + 0xe6, 0x33, 0xe6, 0x33, 0x9c, 0x39, 0x9c, 0x39, 0x9b, 0x3d, 0x9b, 0x3d, 0xc4, 0x3f, 0xc4, + 0x3f, 0x06, 0x40, 0x06, 0x40, 0x61, 0x3e, 0x61, 0x3e, 0xe0, 0x3a, 0xe0, 0x3a, 0x9e, 0x35, + 0x9e, 0x35, 0xc4, 0x2e, 0xc4, 0x2e, 0x85, 0x26, 0x85, 0x26, 0x20, 0x1d, 0x20, 0x1d, 0xdd, + 0x12, 0xdd, 0x12, 0x0a, 0x08, 0x0a, 0x08, 0xfa, 0xfc, 0xfa, 0xfc, 0x01, 0xf2, 0x01, 0xf2, + 0x73, 0xe7, 0x73, 0xe7, 0xa0, 0xdd, 0xa0, 0xdd, 0xd3, 0xd4, 0xd3, 0xd4, 0x4f, 0xcd, 0x4f, + 0xcd, 0x4e, 0xc7, 0x4e, 0xc7, 0xfd, 0xc2, 0xfd, 0xc2, 0x7d, 0xc0, 0x7d, 0xc0, 0xe1, 0xbf, + 0xe1, 0xbf, 0x2e, 0xc1, 0x2e, 0xc1, 0x5a, 0xc4, 0x5a, 0xc4, 0x4d, 0xc9, 0x4d, 0xc9, 0xe1, + 0xcf, 0xe1, 0xcf, 0xe4, 0xd7, 0xe4, 0xd7, 0x18, 0xe1, 0x18, 0xe1, 0x38, 0xeb, 0x38, 0xeb, + 0xf7, 0xf5, 0xf7, 0xf5, 0x02, 0x01, 0x02, 0x01, 0x05, 0x0c, 0x05, 0x0c, 0xad, 0x16, 0xad, + 0x16, 0xa8, 0x20, 0xa8, 0x20, 0xaa, 0x29, 0xaa, 0x29, 0x6e, 0x31, 0x6e, 0x31, 0xb9, 0x37, + 0xb9, 0x37, 0x5c, 0x3c, 0x5c, 0x3c, 0x32, 0x3f, 0x32, 0x3f, 0x27, 0x40, 0x27, 0x40, 0x32, + 0x3f, 0x32, 0x3f, 0x5c, 0x3c, 0x5c, 0x3c, 0xb9, 0x37, 0xb9, 0x37, 0x6e, 0x31, 0x6e, 0x31, + 0xaa, 0x29, 0xaa, 0x29, 0xa8, 0x20, 0xa8, 0x20, 0xad, 0x16, 0xad, 0x16, 0x05, 0x0c, 0x05, + 0x0c, 0x02, 0x01, 0x02, 0x01, 0xf7, 0xf5, 0xf7, 0xf5, 0x38, 0xeb, 0x38, 0xeb, 0x18, 0xe1, + 0x18, 0xe1, 0xe4, 0xd7, 0xe4, 0xd7, 0xe1, 0xcf, 0xe1, 0xcf, 0x4d, 0xc9, 0x4d, 0xc9, 0x5a, + 0xc4, 0x5a, 0xc4, 0x2e, 0xc1, 0x2e, 0xc1, 0xe1, 0xbf, 0xe1, 0xbf, 0x7d, 0xc0, 0x7d, 0xc0, + 0xfd, 0xc2, 0xfd, 0xc2, 0x4e, 0xc7, 0x4e, 0xc7, 0x4f, 0xcd, 0x4f, 0xcd, 0xd3, 0xd4, 0xd3, + 0xd4, 0xa0, 0xdd, 0xa0, 0xdd, 0x73, 0xe7, 0x73, 0xe7, 0x01, 0xf2, 0x01, 0xf2, 0xfa, 0xfc, + 0xfa, 0xfc, 0x0a, 0x08, 0x0a, 0x08, 0xdd, 0x12, 0xdd, 0x12, 0x20, 0x1d, 0x20, 0x1d, 0x85, + 0x26, 0x85, 0x26, 0xc4, 0x2e, 0xc4, 0x2e, 0x9e, 0x35, 0x9e, 0x35, 0xe0, 0x3a, 0xe0, 0x3a, + 0x61, 0x3e, 0x61, 0x3e, 0x06, 0x40, 0x06, 0x40, 0xc4, 0x3f, 0xc4, 0x3f, 0x9b, 0x3d, 0x9b, + 0x3d, 0x9c, 0x39, 0x9c, 0x39, 0xe6, 0x33, 0xe6, 0x33, 0xa5, 0x2c, 0xa5, 0x2c, 0x0f, 0x24, + 0x0f, 0x24, 0x66, 0x1a, 0x66, 0x1a, 0xf4, 0x0f, 0xf4, 0x0f, 0x09, 0x05, 0x09, 0x05, 0xf6, + 0xf9, 0xf6, 0xf9, 0x12, 0xef, 0x12, 0xef, 0xaf, 0xe4, 0xaf, 0xe4, 0x1d, 0xdb, 0x1d, 0xdb, + 0xa3, 0xd2, 0xa3, 0xd2, 0x84, 0xcb, 0x84, 0xcb, 0xf4, 0xc5, 0xf4, 0xc5, 0x1f, 0xc2, 0x1f, + 0xc2, 0x22, 0xc0, 0x22, 0xc0, 0x0c, 0xc0, 0x0c, 0xc0, 0xdd, 0xc1, 0xdd, 0xc1, 0x88, 0xc5, + 0x88, 0xc5, 0xf1, 0xca, 0xf1, 0xca, 0xee, 0xd1, 0xee, 0xd1, 0x4b, 0xda, 0x4b, 0xda, 0xc7, + 0xe3, 0xc7, 0xe3, 0x1a, 0xee, 0x1a, 0xee, 0xf6, 0xf8, 0xf6, 0xf8, 0x07, 0x04, 0x07, 0x04, + 0xfa, 0x0e, 0xfa, 0x0e, 0x7a, 0x19, 0x7a, 0x19, 0x39, 0x23, 0x39, 0x23, 0xea, 0x2b, 0xea, + 0x2b, 0x4d, 0x33, 0x4d, 0x33, 0x29, 0x39, 0x29, 0x39, 0x51, 0x3d, 0x51, 0x3d, 0xa5, 0x3f, + 0xa5, 0x3f, 0x15, 0x40, 0x15, 0x40, 0x9b, 0x3e, 0x9b, 0x3e, 0x45, 0x3b, 0x45, 0x3b, 0x2a, + 0x36, 0x2a, 0x36, 0x73, 0x2f, 0x73, 0x2f, 0x52, 0x27, 0x52, 0x27, 0x05, 0x1e, 0x05, 0x1e, + 0xd3, 0x13, 0xd3, 0x13, 0x0a, 0x09, 0x0a, 0x09, 0xfc, 0xfd, 0xfc, 0xfd, 0xfe, 0xf2, 0xfe, + 0xf2, 0x62, 0xe8, 0x62, 0xe8, 0x7b, 0xde, 0x7b, 0xde, 0x93, 0xd5, 0x93, 0xd5, 0xef, 0xcd, + 0xef, 0xcd, 0xc8, 0xc7, 0xc8, 0xc7, 0x4f, 0xc3, 0x4f, 0xc3, 0xa3, 0xc0, 0xa3, 0xc0, 0xdb, + 0xbf, 0xdb, 0xbf, 0xfc, 0xc0, 0xfc, 0xc0, 0xfd, 0xc3, 0xfd, 0xc3, 0xc8, 0xc8, 0xc8, 0xc8, + 0x38, 0xcf, 0x38, 0xcf, 0x1c, 0xd7, 0x1c, 0xd7, 0x37, 0xe0, 0x37, 0xe0, 0x45, 0xea, 0x45, + 0xea, 0xf8, 0xf4, 0xf8, 0xf4, 0x00, 0x00, 0x00, 0x00, 0x08, 0x0b, 0x08, 0x0b, 0xbb, 0x15, + 0xbb, 0x15, 0xc9, 0x1f, 0xc9, 0x1f, 0xe4, 0x28, 0xe4, 0x28, 0xc8, 0x30, 0xc8, 0x30, 0x38, + 0x37, 0x38, 0x37, 0x03, 0x3c, 0x03, 0x3c, 0x04, 0x3f, 0x04, 0x3f, 0x25, 0x40, 0x25, 0x40, + 0x5d, 0x3f, 0x5d, 0x3f, 0xb1, 0x3c, 0xb1, 0x3c, 0x38, 0x38, 0x38, 0x38, 0x11, 0x32, 0x11, + 0x32, 0x6d, 0x2a, 0x6d, 0x2a, 0x85, 0x21, 0x85, 0x21, 0x9e, 0x17, 0x9e, 0x17, 0x02, 0x0d, + 0x02, 0x0d, 0x04, 0x02, 0x04, 0x02, 0xf6, 0xf6, 0xf6, 0xf6, 0x2d, 0xec, 0x2d, 0xec, 0xfb, + 0xe1, 0xfb, 0xe1, 0xae, 0xd8, 0xae, 0xd8, 0x8d, 0xd0, 0x8d, 0xd0, 0xd6, 0xc9, 0xd6, 0xc9, + 0xbb, 0xc4, 0xbb, 0xc4, 0x65, 0xc1, 0x65, 0xc1, 0xeb, 0xbf, 0xeb, 0xbf, 0x5b, 0xc0, 0x5b, + 0xc0, 0xaf, 0xc2, 0xaf, 0xc2, 0xd7, 0xc6, 0xd7, 0xc6, 0xb3, 0xcc, 0xb3, 0xcc, 0x16, 0xd4, + 0x16, 0xd4, 0xc7, 0xdc, 0xc7, 0xdc, 0x86, 0xe6, 0x86, 0xe6, 0x06, 0xf1, 0x06, 0xf1, 0xf9, + 0xfb, 0xf9, 0xfb, 0x0a, 0x07, 0x0a, 0x07, 0xe6, 0x11, 0xe6, 0x11, 0x39, 0x1c, 0x39, 0x1c, + 0xb5, 0x25, 0xb5, 0x25, 0x12, 0x2e, 0x12, 0x2e, 0x0f, 0x35, 0x0f, 0x35, 0x78, 0x3a, 0x78, + 0x3a, 0x23, 0x3e, 0x23, 0x3e, 0xf4, 0x3f, 0xf4, 0x3f, 0xde, 0x3f, 0xde, 0x3f, 0xe1, 0x3d, + 0xe1, 0x3d, 0x0c, 0x3a, 0x0c, 0x3a, 0x7c, 0x34, 0x7c, 0x34, 0x5d, 0x2d, 0x5d, 0x2d, 0xe3, + 0x24, 0xe3, 0x24, 0x51, 0x1b, 0x51, 0x1b, 0xee, 0x10, 0xee, 0x10, 0x0a, 0x06, 0x0a, 0x06, + 0xf7, 0xfa, 0xf7, 0xfa, 0x0c, 0xf0, 0x0c, 0xf0, 0x9a, 0xe5, 0x9a, 0xe5, 0xf1, 0xdb, 0xf1, + 0xdb, 0x5b, 0xd3, 0x5b, 0xd3, 0x1a, 0xcc, 0x1a, 0xcc, 0x64, 0xc6, 0x64, 0xc6, 0x65, 0xc2, + 0x65, 0xc2, 0x3c, 0xc0, 0x3c, 0xc0, 0xfa, 0xbf, 0xfa, 0xbf, 0x9f, 0xc1, 0x9f, 0xc1, 0x20, + 0xc5, 0x20, 0xc5, 0x62, 0xca, 0x62, 0xca, 0x3c, 0xd1, 0x3c, 0xd1, 0x7b, 0xd9, 0x7b, 0xd9, + 0xe0, 0xe2, 0xe0, 0xe2, 0x23, 0xed, 0x23, 0xed, 0xf6, 0xf7, 0xf6, 0xf7, 0x06, 0x03, 0x06, + 0x03, 0xff, 0x0d, 0xff, 0x0d, 0x8d, 0x18, 0x8d, 0x18, 0x60, 0x22, 0x60, 0x22, 0x2d, 0x2b, + 0x2d, 0x2b, 0xb1, 0x32, 0xb1, 0x32, 0xb2, 0x38, 0xb2, 0x38, 0x03, 0x3d, 0x03, 0x3d, 0x83, + 0x3f, 0x83, 0x3f, 0x1f, 0x40, 0x1f, 0x40, 0xd2, 0x3e, 0xd2, 0x3e, 0xa6, 0x3b, 0xa6, 0x3b, + 0xb3, 0x36, 0xb3, 0x36, 0x1f, 0x30, 0x1f, 0x30, 0x1c, 0x28, 0x1c, 0x28, 0xe8, 0x1e, 0xe8, + 0x1e, 0xc8, 0x14, 0xc8, 0x14, 0x09, 0x0a, 0x09, 0x0a, 0xfe, 0xfe, 0xfe, 0xfe, 0xfb, 0xf3, + 0xfb, 0xf3, 0x53, 0xe9, 0x53, 0xe9, 0x58, 0xdf, 0x58, 0xdf, 0x56, 0xd6, 0x56, 0xd6, 0x92, + 0xce, 0x92, 0xce, 0x47, 0xc8, 0x47, 0xc8, 0xa4, 0xc3, 0xa4, 0xc3, 0xce, 0xc0, 0xce, 0xc0, + 0xd9, 0xbf, 0xd9, 0xbf, 0xce, 0xc0, 0xce, 0xc0, 0xa4, 0xc3, 0xa4, 0xc3, 0x47, 0xc8, 0x47, + 0xc8, 0x92, 0xce, 0x92, 0xce, 0x56, 0xd6, 0x56, 0xd6, 0x58, 0xdf, 0x58, 0xdf, 0x53, 0xe9, + 0x53, 0xe9, 0xfb, 0xf3, 0xfb, 0xf3, 0xfe, 0xfe, 0xfe, 0xfe, 0x09, 0x0a, 0x09, 0x0a, 0xc8, + 0x14, 0xc8, 0x14, 0xe8, 0x1e, 0xe8, 0x1e, 0x1c, 0x28, 0x1c, 0x28, 0x1f, 0x30, 0x1f, 0x30, + 0xb3, 0x36, 0xb3, 0x36, 0xa6, 0x3b, 0xa6, 0x3b, 0xd2, 0x3e, 0xd2, 0x3e, 0x1f, 0x40, 0x1f, + 0x40, 0x83, 0x3f, 0x83, 0x3f, 0x03, 0x3d, 0x03, 0x3d, 0xb2, 0x38, 0xb2, 0x38, 0xb1, 0x32, + 0xb1, 0x32, 0x2d, 0x2b, 0x2d, 0x2b, 0x60, 0x22, 0x60, 0x22, 0x8d, 0x18, 0x8d, 0x18, 0xff, + 0x0d, 0xff, 0x0d, 0x06, 0x03, 0x06, 0x03, 0xf6, 0xf7, 0xf6, 0xf7, 0x23, 0xed, 0x23, 0xed, + 0xe0, 0xe2, 0xe0, 0xe2, 0x7b, 0xd9, 0x7b, 0xd9, 0x3c, 0xd1, 0x3c, 0xd1, 0x62, 0xca, 0x62, + 0xca, 0x20, 0xc5, 0x20, 0xc5, 0x9f, 0xc1, 0x9f, 0xc1, 0xfa, 0xbf, 0xfa, 0xbf, 0x3c, 0xc0, + 0x3c, 0xc0, 0x65, 0xc2, 0x65, 0xc2, 0x64, 0xc6, 0x64, 0xc6, 0x1a, 0xcc, 0x1a, 0xcc, 0x5b, + 0xd3, 0x5b, 0xd3, 0xf1, 0xdb, 0xf1, 0xdb, 0x9a, 0xe5, 0x9a, 0xe5, 0x0c, 0xf0, 0x0c, 0xf0, + 0xf7, 0xfa, 0xf7, 0xfa, 0x0a, 0x06, 0x0a, 0x06, 0xee, 0x10, 0xee, 0x10, 0x51, 0x1b, 0x51, + 0x1b, 0xe3, 0x24, 0xe3, 0x24, 0x5d, 0x2d, 0x5d, 0x2d, 0x7c, 0x34, 0x7c, 0x34, 0x0c, 0x3a, + 0x0c, 0x3a, 0xe1, 0x3d, 0xe1, 0x3d, 0xde, 0x3f, 0xde, 0x3f, 0xf4, 0x3f, 0xf4, 0x3f, 0x23, + 0x3e, 0x23, 0x3e, 0x78, 0x3a, 0x78, 0x3a, 0x0f, 0x35, 0x0f, 0x35, 0x12, 0x2e, 0x12, 0x2e, + 0xb5, 0x25, 0xb5, 0x25, 0x39, 0x1c, 0x39, 0x1c, 0xe6, 0x11, 0xe6, 0x11, 0x0a, 0x07, 0x0a, + 0x07, 0xf9, 0xfb, 0xf9, 0xfb, 0x06, 0xf1, 0x06, 0xf1, 0x86, 0xe6, 0x86, 0xe6, 0xc7, 0xdc, + 0xc7, 0xdc, 0x16, 0xd4, 0x16, 0xd4, 0xb3, 0xcc, 0xb3, 0xcc, 0xd7, 0xc6, 0xd7, 0xc6, 0xaf, + 0xc2, 0xaf, 0xc2, 0x5b, 0xc0, 0x5b, 0xc0, 0xeb, 0xbf, 0xeb, 0xbf, 0x65, 0xc1, 0x65, 0xc1, + 0xbb, 0xc4, 0xbb, 0xc4, 0xd6, 0xc9, 0xd6, 0xc9, 0x8d, 0xd0, 0x8d, 0xd0, 0xae, 0xd8, 0xae, + 0xd8, 0xfb, 0xe1, 0xfb, 0xe1, 0x2d, 0xec, 0x2d, 0xec, 0xf6, 0xf6, 0xf6, 0xf6, 0x04, 0x02, + 0x04, 0x02, 0x02, 0x0d, 0x02, 0x0d, 0x9e, 0x17, 0x9e, 0x17, 0x85, 0x21, 0x85, 0x21, 0x6d, + 0x2a, 0x6d, 0x2a, 0x11, 0x32, 0x11, 0x32, 0x38, 0x38, 0x38, 0x38, 0xb1, 0x3c, 0xb1, 0x3c, + 0x5d, 0x3f, 0x5d, 0x3f, 0x25, 0x40, 0x25, 0x40, 0x04, 0x3f, 0x04, 0x3f, 0x03, 0x3c, 0x03, + 0x3c, 0x38, 0x37, 0x38, 0x37, 0xc8, 0x30, 0xc8, 0x30, 0xe4, 0x28, 0xe4, 0x28, 0xc9, 0x1f, + 0xc9, 0x1f, 0xbb, 0x15, 0xbb, 0x15, 0x08, 0x0b, 0x08, 0x0b, 0x00, 0x00, 0x00, 0x00, 0xf8, + 0xf4, 0xf8, 0xf4, 0x45, 0xea, 0x45, 0xea, 0x37, 0xe0, 0x37, 0xe0, 0x1c, 0xd7, 0x1c, 0xd7, + 0x38, 0xcf, 0x38, 0xcf, 0xc8, 0xc8, 0xc8, 0xc8, 0xfd, 0xc3, 0xfd, 0xc3, 0xfc, 0xc0, 0xfc, + 0xc0, 0xdb, 0xbf, 0xdb, 0xbf, 0xa3, 0xc0, 0xa3, 0xc0, 0x4f, 0xc3, 0x4f, 0xc3, 0xc8, 0xc7, + 0xc8, 0xc7, 0xef, 0xcd, 0xef, 0xcd, 0x93, 0xd5, 0x93, 0xd5, 0x7b, 0xde, 0x7b, 0xde, 0x62, + 0xe8, 0x62, 0xe8, 0xfe, 0xf2, 0xfe, 0xf2, 0xfc, 0xfd, 0xfc, 0xfd, 0x0a, 0x09, 0x0a, 0x09, + 0xd3, 0x13, 0xd3, 0x13, 0x05, 0x1e, 0x05, 0x1e, 0x52, 0x27, 0x52, 0x27, 0x73, 0x2f, 0x73, + 0x2f, 0x2a, 0x36, 0x2a, 0x36, 0x45, 0x3b, 0x45, 0x3b, 0x9b, 0x3e, 0x9b, 0x3e, 0x15, 0x40, + 0x15, 0x40, 0xa5, 0x3f, 0xa5, 0x3f, 0x51, 0x3d, 0x51, 0x3d, 0x29, 0x39, 0x29, 0x39, 0x4d, + 0x33, 0x4d, 0x33, 0xea, 0x2b, 0xea, 0x2b, 0x39, 0x23, 0x39, 0x23, 0x7a, 0x19, 0x7a, 0x19, + 0xfa, 0x0e, 0xfa, 0x0e, 0x07, 0x04, 0x07, 0x04, 0xf6, 0xf8, 0xf6, 0xf8, 0x1a, 0xee, 0x1a, + 0xee, 0xc7, 0xe3, 0xc7, 0xe3, 0x4b, 0xda, 0x4b, 0xda, 0xee, 0xd1, 0xee, 0xd1, 0xf1, 0xca, + 0xf1, 0xca, 0x88, 0xc5, 0x88, 0xc5, 0xdd, 0xc1, 0xdd, 0xc1, 0x0c, 0xc0, 0x0c, 0xc0, 0x22, + 0xc0, 0x22, 0xc0, 0x1f, 0xc2, 0x1f, 0xc2, 0xf4, 0xc5, 0xf4, 0xc5, 0x84, 0xcb, 0x84, 0xcb, + 0xa3, 0xd2, 0xa3, 0xd2, 0x1d, 0xdb, 0x1d, 0xdb, 0xaf, 0xe4, 0xaf, 0xe4, 0x12, 0xef, 0x12, + 0xef, 0xf6, 0xf9, 0xf6, 0xf9, 0x09, 0x05, 0x09, 0x05, 0xf4, 0x0f, 0xf4, 0x0f, 0x66, 0x1a, + 0x66, 0x1a, 0x0f, 0x24, 0x0f, 0x24, 0xa5, 0x2c, 0xa5, 0x2c, 0xe6, 0x33, 0xe6, 0x33, 0x9c, + 0x39, 0x9c, 0x39, 0x9b, 0x3d, 0x9b, 0x3d, 0xc4, 0x3f, 0xc4, 0x3f, 0x06, 0x40, 0x06, 0x40, + 0x61, 0x3e, 0x61, 0x3e, 0xe0, 0x3a, 0xe0, 0x3a, 0x9e, 0x35, 0x9e, 0x35, 0xc4, 0x2e, 0xc4, + 0x2e, 0x85, 0x26, 0x85, 0x26, 0x20, 0x1d, 0x20, 0x1d, 0xdd, 0x12, 0xdd, 0x12, 0x0a, 0x08, + 0x0a, 0x08, 0xfa, 0xfc, 0xfa, 0xfc, 0x01, 0xf2, 0x01, 0xf2, 0x73, 0xe7, 0x73, 0xe7, 0xa0, + 0xdd, 0xa0, 0xdd, 0xd3, 0xd4, 0xd3, 0xd4, 0x4f, 0xcd, 0x4f, 0xcd, 0x4e, 0xc7, 0x4e, 0xc7, + 0xfd, 0xc2, 0xfd, 0xc2, 0x7d, 0xc0, 0x7d, 0xc0, 0xe1, 0xbf, 0xe1, 0xbf, 0x2e, 0xc1, 0x2e, + 0xc1, 0x5a, 0xc4, 0x5a, 0xc4, 0x4d, 0xc9, 0x4d, 0xc9, 0xe1, 0xcf, 0xe1, 0xcf, 0xe4, 0xd7, + 0xe4, 0xd7, 0x18, 0xe1, 0x18, 0xe1, 0x38, 0xeb, 0x38, 0xeb, 0xf7, 0xf5, 0xf7, 0xf5, 0x02, + 0x01, 0x02, 0x01, 0x05, 0x0c, 0x05, 0x0c, 0xad, 0x16, 0xad, 0x16, 0xa8, 0x20, 0xa8, 0x20, + 0xaa, 0x29, 0xaa, 0x29, 0x6e, 0x31, 0x6e, 0x31, 0xb9, 0x37, 0xb9, 0x37, 0x5c, 0x3c, 0x5c, + 0x3c, 0x32, 0x3f, 0x32, 0x3f, 0x27, 0x40, 0x27, 0x40, 0x32, 0x3f, 0x32, 0x3f, 0x5c, 0x3c, + 0x5c, 0x3c, 0xb9, 0x37, 0xb9, 0x37, 0x6e, 0x31, 0x6e, 0x31, 0xaa, 0x29, 0xaa, 0x29, 0xa8, + 0x20, 0xa8, 0x20, 0xad, 0x16, 0xad, 0x16, 0x05, 0x0c, 0x05, 0x0c, 0x02, 0x01, 0x02, 0x01, + 0xf7, 0xf5, 0xf7, 0xf5, 0x38, 0xeb, 0x38, 0xeb, 0x18, 0xe1, 0x18, 0xe1, 0xe4, 0xd7, 0xe4, + 0xd7, 0xe1, 0xcf, 0xe1, 0xcf, 0x4d, 0xc9, 0x4d, 0xc9, 0x5a, 0xc4, 0x5a, 0xc4, 0x2e, 0xc1, + 0x2e, 0xc1, 0xe1, 0xbf, 0xe1, 0xbf, 0x7d, 0xc0, 0x7d, 0xc0, 0xfd, 0xc2, 0xfd, 0xc2, 0x4e, + 0xc7, 0x4e, 0xc7, 0x4f, 0xcd, 0x4f, 0xcd, 0xd3, 0xd4, 0xd3, 0xd4, 0xa0, 0xdd, 0xa0, 0xdd, + 0x73, 0xe7, 0x73, 0xe7, 0x01, 0xf2, 0x01, 0xf2, 0xfa, 0xfc, 0xfa, 0xfc, 0x0a, 0x08, 0x0a, + 0x08, 0xdd, 0x12, 0xdd, 0x12, 0x20, 0x1d, 0x20, 0x1d, 0x85, 0x26, 0x85, 0x26, 0xc4, 0x2e, + 0xc4, 0x2e, 0x9e, 0x35, 0x9e, 0x35, 0xe0, 0x3a, 0xe0, 0x3a, 0x61, 0x3e, 0x61, 0x3e, 0x06, + 0x40, 0x06, 0x40, 0xc4, 0x3f, 0xc4, 0x3f, 0x9b, 0x3d, 0x9b, 0x3d, 0x9c, 0x39, 0x9c, 0x39, + 0xe6, 0x33, 0xe6, 0x33, 0xa5, 0x2c, 0xa5, 0x2c, 0x0f, 0x24, 0x0f, 0x24, 0x66, 0x1a, 0x66, + 0x1a, 0xf4, 0x0f, 0xf4, 0x0f, 0x09, 0x05, 0x09, 0x05, 0xf6, 0xf9, 0xf6, 0xf9, 0x12, 0xef, + 0x12, 0xef, 0xaf, 0xe4, 0xaf, 0xe4, 0x1d, 0xdb, 0x1d, 0xdb, 0xa3, 0xd2, 0xa3, 0xd2, 0x84, + 0xcb, 0x84, 0xcb, 0xf4, 0xc5, 0xf4, 0xc5, 0x1f, 0xc2, 0x1f, 0xc2, 0x22, 0xc0, 0x22, 0xc0, + 0x0c, 0xc0, 0x0c, 0xc0, 0xdd, 0xc1, 0xdd, 0xc1, 0x88, 0xc5, 0x88, 0xc5, 0xf1, 0xca, 0xf1, + 0xca, 0xee, 0xd1, 0xee, 0xd1, 0x4b, 0xda, 0x4b, 0xda, 0xc7, 0xe3, 0xc7, 0xe3, 0x1a, 0xee, + 0x1a, 0xee, 0xf6, 0xf8, 0xf6, 0xf8, 0x07, 0x04, 0x07, 0x04, 0xfa, 0x0e, 0xfa, 0x0e, 0x7a, + 0x19, 0x7a, 0x19, 0x39, 0x23, 0x39, 0x23, 0xea, 0x2b, 0xea, 0x2b, 0x4d, 0x33, 0x4d, 0x33, + 0x29, 0x39, 0x29, 0x39, 0x51, 0x3d, 0x51, 0x3d, 0xa5, 0x3f, 0xa5, 0x3f, 0x15, 0x40, 0x15, + 0x40, 0x9b, 0x3e, 0x9b, 0x3e, 0x45, 0x3b, 0x45, 0x3b, 0x2a, 0x36, 0x2a, 0x36, 0x73, 0x2f, + 0x73, 0x2f, 0x52, 0x27, 0x52, 0x27, 0x05, 0x1e, 0x05, 0x1e, 0xd3, 0x13, 0xd3, 0x13, 0x0a, + 0x09, 0x0a, 0x09, 0xfc, 0xfd, 0xfc, 0xfd, 0xfe, 0xf2, 0xfe, 0xf2, 0x62, 0xe8, 0x62, 0xe8, + 0x7b, 0xde, 0x7b, 0xde, 0x93, 0xd5, 0x93, 0xd5, 0xef, 0xcd, 0xef, 0xcd, 0xc8, 0xc7, 0xc8, + 0xc7, 0x4f, 0xc3, 0x4f, 0xc3, 0xa3, 0xc0, 0xa3, 0xc0, 0xdb, 0xbf, 0xdb, 0xbf, 0xfc, 0xc0, + 0xfc, 0xc0, 0xfd, 0xc3, 0xfd, 0xc3, 0xc8, 0xc8, 0xc8, 0xc8, 0x38, 0xcf, 0x38, 0xcf, 0x1c, + 0xd7, 0x1c, 0xd7, 0x37, 0xe0, 0x37, 0xe0, 0x45, 0xea, 0x45, 0xea, 0xf8, 0xf4, 0xf8, 0xf4, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x0b, 0x08, 0x0b, 0xbb, 0x15, 0xbb, 0x15, 0xc9, 0x1f, 0xc9, + 0x1f, 0xe4, 0x28, 0xe4, 0x28, 0xc8, 0x30, 0xc8, 0x30, 0x38, 0x37, 0x38, 0x37, 0x03, 0x3c, + 0x03, 0x3c, 0x04, 0x3f, 0x04, 0x3f, 0x25, 0x40, 0x25, 0x40, 0x5d, 0x3f, 0x5d, 0x3f, 0xb1, + 0x3c, 0xb1, 0x3c, 0x38, 0x38, 0x38, 0x38, 0x11, 0x32, 0x11, 0x32, 0x6d, 0x2a, 0x6d, 0x2a, + 0x85, 0x21, 0x85, 0x21, 0x9e, 0x17, 0x9e, 0x17, 0x02, 0x0d, 0x02, 0x0d, 0x04, 0x02, 0x04, + 0x02, 0xf6, 0xf6, 0xf6, 0xf6, 0x2d, 0xec, 0x2d, 0xec, 0xfb, 0xe1, 0xfb, 0xe1, 0xae, 0xd8, + 0xae, 0xd8, 0x8d, 0xd0, 0x8d, 0xd0, 0xd6, 0xc9, 0xd6, 0xc9, 0xbb, 0xc4, 0xbb, 0xc4, 0x65, + 0xc1, 0x65, 0xc1, 0xeb, 0xbf, 0xeb, 0xbf, 0x5b, 0xc0, 0x5b, 0xc0, 0xaf, 0xc2, 0xaf, 0xc2, + 0xd7, 0xc6, 0xd7, 0xc6, 0xb3, 0xcc, 0xb3, 0xcc, 0x16, 0xd4, 0x16, 0xd4, 0xc7, 0xdc, 0xc7, + 0xdc, 0x86, 0xe6, 0x86, 0xe6, 0x06, 0xf1, 0x06, 0xf1, 0xf9, 0xfb, 0xf9, 0xfb, 0x0a, 0x07, + 0x0a, 0x07, 0xe6, 0x11, 0xe6, 0x11, 0x39, 0x1c, 0x39, 0x1c, 0xb5, 0x25, 0xb5, 0x25, 0x12, + 0x2e, 0x12, 0x2e, 0x0f, 0x35, 0x0f, 0x35, 0x78, 0x3a, 0x78, 0x3a, 0x23, 0x3e, 0x23, 0x3e, + 0xf4, 0x3f, 0xf4, 0x3f, 0xde, 0x3f, 0xde, 0x3f, 0xe1, 0x3d, 0xe1, 0x3d, 0x0c, 0x3a, 0x0c, + 0x3a, 0x7c, 0x34, 0x7c, 0x34, 0x5d, 0x2d, 0x5d, 0x2d, 0xe3, 0x24, 0xe3, 0x24, 0x51, 0x1b, + 0x51, 0x1b, 0xee, 0x10, 0xee, 0x10, 0x0a, 0x06, 0x0a, 0x06, 0xf7, 0xfa, 0xf7, 0xfa, 0x0c, + 0xf0, 0x0c, 0xf0, 0x9a, 0xe5, 0x9a, 0xe5, 0xf1, 0xdb, 0xf1, 0xdb, 0x5b, 0xd3, 0x5b, 0xd3, + 0x1a, 0xcc, 0x1a, 0xcc, 0x64, 0xc6, 0x64, 0xc6, 0x65, 0xc2, 0x65, 0xc2, 0x3c, 0xc0, 0x3c, + 0xc0, 0xfa, 0xbf, 0xfa, 0xbf, 0x9f, 0xc1, 0x9f, 0xc1, 0x20, 0xc5, 0x20, 0xc5, 0x62, 0xca, + 0x62, 0xca, 0x3c, 0xd1, 0x3c, 0xd1, 0x7b, 0xd9, 0x7b, 0xd9, 0xe0, 0xe2, 0xe0, 0xe2, 0x23, + 0xed, 0x23, 0xed, 0xf6, 0xf7, 0xf6, 0xf7, 0x06, 0x03, 0x06, 0x03, 0xff, 0x0d, 0xff, 0x0d, + 0x8d, 0x18, 0x8d, 0x18, 0x60, 0x22, 0x60, 0x22, 0x2d, 0x2b, 0x2d, 0x2b, 0xb1, 0x32, 0xb1, + 0x32, 0xb2, 0x38, 0xb2, 0x38, 0x03, 0x3d, 0x03, 0x3d, 0x83, 0x3f, 0x83, 0x3f, 0x1f, 0x40, + 0x1f, 0x40, 0xd2, 0x3e, 0xd2, 0x3e, 0xa6, 0x3b, 0xa6, 0x3b, 0xb3, 0x36, 0xb3, 0x36, 0x1f, + 0x30, 0x1f, 0x30, 0x1c, 0x28, 0x1c, 0x28, 0xe8, 0x1e, 0xe8, 0x1e, 0xc8, 0x14, 0xc8, 0x14, + 0x09, 0x0a, 0x09, 0x0a, 0xfe, 0xfe, 0xfe, 0xfe, 0xfb, 0xf3, 0xfb, 0xf3, 0x53, 0xe9, 0x53, + 0xe9, 0x58, 0xdf, 0x58, 0xdf, 0x56, 0xd6, 0x56, 0xd6, 0x92, 0xce, 0x92, 0xce, 0x47, 0xc8, + 0x47, 0xc8, 0xa4, 0xc3, 0xa4, 0xc3, 0xce, 0xc0, 0xce, 0xc0, 0xd9, 0xbf, 0xd9, 0xbf, 0xce, + 0xc0, 0xce, 0xc0, 0xa4, 0xc3, 0xa4, 0xc3, 0x47, 0xc8, 0x47, 0xc8, 0x92, 0xce, 0x92, 0xce, + 0x56, 0xd6, 0x56, 0xd6, 0x58, 0xdf, 0x58, 0xdf, 0x53, 0xe9, 0x53, 0xe9, 0xfb, 0xf3, 0xfb, + 0xf3, 0xfe, 0xfe, 0xfe, 0xfe, 0x09, 0x0a, 0x09, 0x0a, 0xc8, 0x14, 0xc8, 0x14, 0xe8, 0x1e, + 0xe8, 0x1e, 0x1c, 0x28, 0x1c, 0x28, 0x1f, 0x30, 0x1f, 0x30, 0xb3, 0x36, 0xb3, 0x36, 0xa6, + 0x3b, 0xa6, 0x3b, 0xd2, 0x3e, 0xd2, 0x3e, 0x1f, 0x40, 0x1f, 0x40, 0x83, 0x3f, 0x83, 0x3f, + 0x03, 0x3d, 0x03, 0x3d, 0xb2, 0x38, 0xb2, 0x38, 0xb1, 0x32, 0xb1, 0x32, 0x2d, 0x2b, 0x2d, + 0x2b, 0x60, 0x22, 0x60, 0x22, 0x8d, 0x18, 0x8d, 0x18, 0xff, 0x0d, 0xff, 0x0d, 0x06, 0x03, + 0x06, 0x03, 0xf6, 0xf7, 0xf6, 0xf7, 0x23, 0xed, 0x23, 0xed, 0xe0, 0xe2, 0xe0, 0xe2, 0x7b, + 0xd9, 0x7b, 0xd9, 0x3c, 0xd1, 0x3c, 0xd1, 0x62, 0xca, 0x62, 0xca, 0x20, 0xc5, 0x20, 0xc5, + 0x9f, 0xc1, 0x9f, 0xc1, 0xfa, 0xbf, 0xfa, 0xbf, 0x3c, 0xc0, 0x3c, 0xc0, 0x65, 0xc2, 0x65, + 0xc2, 0x64, 0xc6, 0x64, 0xc6, 0x1a, 0xcc, 0x1a, 0xcc, 0x5b, 0xd3, 0x5b, 0xd3, 0xf1, 0xdb, + 0xf1, 0xdb, 0x9a, 0xe5, 0x9a, 0xe5, 0x0c, 0xf0, 0x0c, 0xf0, 0xf7, 0xfa, 0xf7, 0xfa, 0x0a, + 0x06, 0x0a, 0x06, 0xee, 0x10, 0xee, 0x10, 0x51, 0x1b, 0x51, 0x1b, 0xe3, 0x24, 0xe3, 0x24, + 0x5d, 0x2d, 0x5d, 0x2d, 0x7c, 0x34, 0x7c, 0x34, 0x0c, 0x3a, 0x0c, 0x3a, 0xe1, 0x3d, 0xe1, + 0x3d, 0xde, 0x3f, 0xde, 0x3f, 0xf4, 0x3f, 0xf4, 0x3f, 0x23, 0x3e, 0x23, 0x3e, 0x78, 0x3a, + 0x78, 0x3a, 0x0f, 0x35, 0x0f, 0x35, 0x12, 0x2e, 0x12, 0x2e, 0xb5, 0x25, 0xb5, 0x25, 0x39, + 0x1c, 0x39, 0x1c, 0xe6, 0x11, 0xe6, 0x11, 0x0a, 0x07, 0x0a, 0x07, 0xf9, 0xfb, 0xf9, 0xfb, + 0x06, 0xf1, 0x06, 0xf1, 0x86, 0xe6, 0x86, 0xe6, 0xc7, 0xdc, 0xc7, 0xdc, 0x16, 0xd4, 0x16, + 0xd4, 0xb3, 0xcc, 0xb3, 0xcc, 0xd7, 0xc6, 0xd7, 0xc6, 0xaf, 0xc2, 0xaf, 0xc2, 0x5b, 0xc0, + 0x5b, 0xc0, 0xeb, 0xbf, 0xeb, 0xbf, 0x65, 0xc1, 0x65, 0xc1, 0xbb, 0xc4, 0xbb, 0xc4, 0xd6, + 0xc9, 0xd6, 0xc9, 0x8d, 0xd0, 0x8d, 0xd0, 0xae, 0xd8, 0xae, 0xd8, 0xfb, 0xe1, 0xfb, 0xe1, + 0x2d, 0xec, 0x2d, 0xec, 0xf6, 0xf6, 0xf6, 0xf6, 0x04, 0x02, 0x04, 0x02, 0x02, 0x0d, 0x02, + 0x0d, 0x9e, 0x17, 0x9e, 0x17, 0x85, 0x21, 0x85, 0x21, 0x6d, 0x2a, 0x6d, 0x2a, 0x11, 0x32, + 0x11, 0x32, 0x38, 0x38, 0x38, 0x38, 0xb1, 0x3c, 0xb1, 0x3c, 0x5d, 0x3f, 0x5d, 0x3f, 0x25, + 0x40, 0x25, 0x40, 0x04, 0x3f, 0x04, 0x3f, 0x03, 0x3c, 0x03, 0x3c, 0x38, 0x37, 0x38, 0x37, + 0xc8, 0x30, 0xc8, 0x30, 0xe4, 0x28, 0xe4, 0x28, 0xc9, 0x1f, 0xc9, 0x1f, 0xbb, 0x15, 0xbb, + 0x15, 0x08, 0x0b, 0x08, 0x0b, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xf4, 0xf8, 0xf4, 0x45, 0xea, + 0x45, 0xea, 0x37, 0xe0, 0x37, 0xe0, 0x1c, 0xd7, 0x1c, 0xd7, 0x38, 0xcf, 0x38, 0xcf, 0xc8, + 0xc8, 0xc8, 0xc8, 0xfd, 0xc3, 0xfd, 0xc3, 0xfc, 0xc0, 0xfc, 0xc0, 0xdb, 0xbf, 0xdb, 0xbf, + 0xa3, 0xc0, 0xa3, 0xc0, 0x4f, 0xc3, 0x4f, 0xc3, 0xc8, 0xc7, 0xc8, 0xc7, 0xef, 0xcd, 0xef, + 0xcd, 0x93, 0xd5, 0x93, 0xd5, 0x7b, 0xde, 0x7b, 0xde, 0x62, 0xe8, 0x62, 0xe8, 0xfe, 0xf2, + 0xfe, 0xf2, 0xfc, 0xfd, 0xfc, 0xfd, 0x0a, 0x09, 0x0a, 0x09, 0xd3, 0x13, 0xd3, 0x13, 0x05, + 0x1e, 0x05, 0x1e, 0x52, 0x27, 0x52, 0x27, 0x73, 0x2f, 0x73, 0x2f, 0x2a, 0x36, 0x2a, 0x36, + 0x45, 0x3b, 0x45, 0x3b, 0x9b, 0x3e, 0x9b, 0x3e, 0x15, 0x40, 0x15, 0x40, 0xa5, 0x3f, 0xa5, + 0x3f, 0x51, 0x3d, 0x51, 0x3d, 0x29, 0x39, 0x29, 0x39, 0x4d, 0x33, 0x4d, 0x33, 0xea, 0x2b, + 0xea, 0x2b, 0x39, 0x23, 0x39, 0x23, 0x7a, 0x19, 0x7a, 0x19, 0xfa, 0x0e, 0xfa, 0x0e, 0x07, + 0x04, 0x07, 0x04, 0xf6, 0xf8, 0xf6, 0xf8, 0x1a, 0xee, 0x1a, 0xee, 0xc7, 0xe3, 0xc7, 0xe3, + 0x4b, 0xda, 0x4b, 0xda, 0xee, 0xd1, 0xee, 0xd1, 0xf1, 0xca, 0xf1, 0xca, 0x88, 0xc5, 0x88, + 0xc5, 0xdd, 0xc1, 0xdd, 0xc1, 0x0c, 0xc0, 0x0c, 0xc0, 0x22, 0xc0, 0x22, 0xc0, 0x1f, 0xc2, + 0x1f, 0xc2, 0xf4, 0xc5, 0xf4, 0xc5, 0x84, 0xcb, 0x84, 0xcb, 0xa3, 0xd2, 0xa3, 0xd2, 0x1d, + 0xdb, 0x1d, 0xdb, 0xaf, 0xe4, 0xaf, 0xe4, 0x12, 0xef, 0x12, 0xef, 0xf6, 0xf9, 0xf6, 0xf9, + 0x09, 0x05, 0x09, 0x05, 0xf4, 0x0f, 0xf4, 0x0f, 0x66, 0x1a, 0x66, 0x1a, 0x0f, 0x24, 0x0f, + 0x24, 0xa5, 0x2c, 0xa5, 0x2c, 0xe6, 0x33, 0xe6, 0x33, 0x9c, 0x39, 0x9c, 0x39, 0x9b, 0x3d, + 0x9b, 0x3d, 0xc4, 0x3f, 0xc4, 0x3f, 0x06, 0x40, 0x06, 0x40, 0x61, 0x3e, 0x61, 0x3e, 0xe0, + 0x3a, 0xe0, 0x3a, 0x9e, 0x35, 0x9e, 0x35, 0xc4, 0x2e, 0xc4, 0x2e, 0x85, 0x26, 0x85, 0x26, + 0x20, 0x1d, 0x20, 0x1d, 0xdd, 0x12, 0xdd, 0x12, 0x0a, 0x08, 0x0a, 0x08, 0xfa, 0xfc, 0xfa, + 0xfc, 0x01, 0xf2, 0x01, 0xf2, 0x73, 0xe7, 0x73, 0xe7, 0xa0, 0xdd, 0xa0, 0xdd, 0xd3, 0xd4, + 0xd3, 0xd4, 0x4f, 0xcd, 0x4f, 0xcd, 0x4e, 0xc7, 0x4e, 0xc7, 0xfd, 0xc2, 0xfd, 0xc2, 0x7d, + 0xc0, 0x7d, 0xc0, 0xe1, 0xbf, 0xe1, 0xbf, 0x2e, 0xc1, 0x2e, 0xc1, 0x5a, 0xc4, 0x5a, 0xc4, + 0x4d, 0xc9, 0x4d, 0xc9, 0xe1, 0xcf, 0xe1, 0xcf, 0xe4, 0xd7, 0xe4, 0xd7, 0x18, 0xe1, 0x18, + 0xe1, 0x38, 0xeb, 0x38, 0xeb, 0xf7, 0xf5, 0xf7, 0xf5, 0x02, 0x01, 0x02, 0x01, 0x05, 0x0c, + 0x05, 0x0c, 0xad, 0x16, 0xad, 0x16, 0xa8, 0x20, 0xa8, 0x20, 0xaa, 0x29, 0xaa, 0x29, 0x6e, + 0x31, 0x6e, 0x31, 0xb9, 0x37, 0xb9, 0x37, 0x5c, 0x3c, 0x5c, 0x3c, 0x32, 0x3f, 0x32, 0x3f, + 0x27, 0x40, 0x27, 0x40, 0x32, 0x3f, 0x32, 0x3f, 0x5c, 0x3c, 0x5c, 0x3c, 0xb9, 0x37, 0xb9, + 0x37, 0x6e, 0x31, 0x6e, 0x31, 0xaa, 0x29, 0xaa, 0x29, 0xa8, 0x20, 0xa8, 0x20, 0xad, 0x16, + 0xad, 0x16, 0x05, 0x0c, 0x05, 0x0c, 0x02, 0x01, 0x02, 0x01, 0xf7, 0xf5, 0xf7, 0xf5, 0x38, + 0xeb, 0x38, 0xeb, 0x18, 0xe1, 0x18, 0xe1, 0xe4, 0xd7, 0xe4, 0xd7, 0xe1, 0xcf, 0xe1, 0xcf, + 0x4d, 0xc9, 0x4d, 0xc9, 0x5a, 0xc4, 0x5a, 0xc4, 0x2e, 0xc1, 0x2e, 0xc1, 0xe1, 0xbf, 0xe1, + 0xbf, 0x7d, 0xc0, 0x7d, 0xc0, 0xfd, 0xc2, 0xfd, 0xc2, 0x4e, 0xc7, 0x4e, 0xc7, 0x4f, 0xcd, + 0x4f, 0xcd, 0xd3, 0xd4, 0xd3, 0xd4, 0xa0, 0xdd, 0xa0, 0xdd, 0x73, 0xe7, 0x73, 0xe7, 0x01, + 0xf2, 0x01, 0xf2, 0xfa, 0xfc, 0xfa, 0xfc, 0x0a, 0x08, 0x0a, 0x08, 0xdd, 0x12, 0xdd, 0x12, + 0x20, 0x1d, 0x20, 0x1d, 0x85, 0x26, 0x85, 0x26, 0xc4, 0x2e, 0xc4, 0x2e, 0x9e, 0x35, 0x9e, + 0x35, 0xe0, 0x3a, 0xe0, 0x3a, 0x61, 0x3e, 0x61, 0x3e, 0x06, 0x40, 0x06, 0x40, 0xc4, 0x3f, + 0xc4, 0x3f, 0x9b, 0x3d, 0x9b, 0x3d, 0x9c, 0x39, 0x9c, 0x39, 0xe6, 0x33, 0xe6, 0x33, 0xa5, + 0x2c, 0xa5, 0x2c, 0x0f, 0x24, 0x0f, 0x24, 0x66, 0x1a, 0x66, 0x1a, 0xf4, 0x0f, 0xf4, 0x0f, + 0x09, 0x05, 0x09, 0x05, 0xf6, 0xf9, 0xf6, 0xf9, 0x12, 0xef, 0x12, 0xef, 0xaf, 0xe4, 0xaf, + 0xe4, 0x1d, 0xdb, 0x1d, 0xdb, 0xa3, 0xd2, 0xa3, 0xd2, 0x84, 0xcb, 0x84, 0xcb, 0xf4, 0xc5, + 0xf4, 0xc5, 0x1f, 0xc2, 0x1f, 0xc2, 0x22, 0xc0, 0x22, 0xc0, 0x0c, 0xc0, 0x0c, 0xc0, 0xdd, + 0xc1, 0xdd, 0xc1, 0x88, 0xc5, 0x88, 0xc5, 0xf1, 0xca, 0xf1, 0xca, 0xee, 0xd1, 0xee, 0xd1, + 0x4b, 0xda, 0x4b, 0xda, 0xc7, 0xe3, 0xc7, 0xe3, 0x1a, 0xee, 0x1a, 0xee, 0xf6, 0xf8, 0xf6, + 0xf8, 0x07, 0x04, 0x07, 0x04, 0xfa, 0x0e, 0xfa, 0x0e, 0x7a, 0x19, 0x7a, 0x19, 0x39, 0x23, + 0x39, 0x23, 0xea, 0x2b, 0xea, 0x2b, 0x4d, 0x33, 0x4d, 0x33, 0x29, 0x39, 0x29, 0x39, 0x51, + 0x3d, 0x51, 0x3d, 0xa5, 0x3f, 0xa5, 0x3f, 0x15, 0x40, 0x15, 0x40, 0x9b, 0x3e, 0x9b, 0x3e, + 0x45, 0x3b, 0x45, 0x3b, 0x2a, 0x36, 0x2a, 0x36, 0x73, 0x2f, 0x73, 0x2f, 0x52, 0x27, 0x52, + 0x27, 0x05, 0x1e, 0x05, 0x1e, 0xd3, 0x13, 0xd3, 0x13, 0x0a, 0x09, 0x0a, 0x09, 0xfc, 0xfd, + 0xfc, 0xfd, 0xfe, 0xf2, 0xfe, 0xf2, 0x62, 0xe8, 0x62, 0xe8, 0x7b, 0xde, 0x7b, 0xde, 0x93, + 0xd5, 0x93, 0xd5, 0xef, 0xcd, 0xef, 0xcd, 0xc8, 0xc7, 0xc8, 0xc7, 0x4f, 0xc3, 0x4f, 0xc3, + 0xa3, 0xc0, 0xa3, 0xc0, 0xdb, 0xbf, 0xdb, 0xbf, 0xfc, 0xc0, 0xfc, 0xc0, 0xfd, 0xc3, 0xfd, + 0xc3, 0xc8, 0xc8, 0xc8, 0xc8, 0x38, 0xcf, 0x38, 0xcf, 0x1c, 0xd7, 0x1c, 0xd7, 0x37, 0xe0, + 0x37, 0xe0, 0x45, 0xea, 0x45, 0xea, 0xf8, 0xf4, 0xf8, 0xf4}; + +#endif /* ZEPHYR_INCLUDE_SINE_H_ */ diff --git a/subsys/bluetooth/lib/CMakeLists.txt b/subsys/bluetooth/lib/CMakeLists.txt index 5798221535014..694830ae6cfdb 100644 --- a/subsys/bluetooth/lib/CMakeLists.txt +++ b/subsys/bluetooth/lib/CMakeLists.txt @@ -1,3 +1,4 @@ # SPDX-License-Identifier: Apache-2.0 zephyr_sources_ifdef(CONFIG_BT_EAD ead.c) +zephyr_sources_ifdef(CONFIG_LIBSBC sbc.c) diff --git a/modules/libsbc/sbc.c b/subsys/bluetooth/lib/sbc.c similarity index 97% rename from modules/libsbc/sbc.c rename to subsys/bluetooth/lib/sbc.c index 9be90dd3cffac..6bcd8fc8b11b5 100644 --- a/modules/libsbc/sbc.c +++ b/subsys/bluetooth/lib/sbc.c @@ -5,9 +5,9 @@ */ #include -#include +#include -#if defined(CONFIG_LIBSBC_ENCODER) +#if defined(CONFIG_LIBSBC) int sbc_setup_encoder(struct sbc_encoder *encoder, struct sbc_encoder_init_param *param) { @@ -136,9 +136,7 @@ int sbc_frame_encoded_bytes(struct sbc_encoder *encoder) return size; } -#endif -#if defined(CONFIG_LIBSBC_DECODER) /** * Setup decoder */ diff --git a/tests/bluetooth/shell/prj_br.conf b/tests/bluetooth/shell/prj_br.conf index 36e831627024e..2dbe4474d591f 100644 --- a/tests/bluetooth/shell/prj_br.conf +++ b/tests/bluetooth/shell/prj_br.conf @@ -5,6 +5,7 @@ CONFIG_BT_RFCOMM=y CONFIG_BT_A2DP=y CONFIG_BT_A2DP_SOURCE=y CONFIG_BT_A2DP_SINK=y +CONFIG_BT_AVDTP=y CONFIG_BT_SHELL=y CONFIG_LOG=y CONFIG_BT_CENTRAL=y