ft2-clone

Fasttracker 2 clone
Log | Files | Refs | README | LICENSE

commit 4fcc002b4ae32417b80298462c9b674acd3e32aa
parent 7a40612a008641fd83b04691b183b757619fa9d8
Author: Olav Sørensen <olav.sorensen@live.no>
Date:   Mon, 11 Mar 2024 14:14:08 +0100

Revert 32-point sinc to 16-point (and fix parameters)

Diffstat:
MREADME.md | 2+-
Msrc/ft2_audio.c | 21++++++---------------
Msrc/ft2_audio.h | 1-
Msrc/ft2_config.c | 12++++++------
Msrc/ft2_config.h | 4++--
Msrc/ft2_radiobuttons.c | 2+-
Msrc/ft2_radiobuttons.h | 2+-
Msrc/helpdata/FT2.HLP | 6+++++-
Msrc/helpdata/ft2_help_data.h | 941++++++++++++++++++++++++++++++++++++++++---------------------------------------
Msrc/mixer/ft2_mix.c | 202++++++++++++++++++++++++++++++++++++++++----------------------------------------
Msrc/mixer/ft2_mix_macros.h | 68++++++++++++++++++++++++++------------------------------------------
Msrc/mixer/ft2_windowed_sinc.c | 55++++++++++++++++++++++++++++++++-----------------------
Msrc/mixer/ft2_windowed_sinc.h | 11++++++-----
13 files changed, 668 insertions(+), 659 deletions(-)

diff --git a/README.md b/README.md @@ -14,7 +14,7 @@ Linux binaries can be found [here](https://repology.org/project/fasttracker2/ver If these don't work for you, you'll have to compile the code manually. # Improvements over original DOS version -- The channel resampler/mixer uses floating-point arithmetics for less errors, and has extra interpolation options (4-point cubic spline, 8-point/32-point windowed-sinc) +- The channel resampler/mixer uses floating-point arithmetics for less errors, and has extra interpolation options (4-point cubic spline, 8-point/16-point windowed-sinc) - The sample loader supports FLAC/AIFF samples and more WAV types than original FT2. It will also attempt to tune the sample (finetune and rel. note) to its playback frequency on load. - It contains a new "Trim" feature, which will remove unused stuff to potentially make the module smaller - Drag n' drop of modules/samples diff --git a/src/ft2_audio.c b/src/ft2_audio.c @@ -204,20 +204,13 @@ void audioSetInterpolationType(uint8_t interpolationType) fDownSample1 = fDownSample1_8; fDownSample2 = fDownSample2_8; - // modelled after OpenMPT - audio.sincRatio1 = (uint64_t)(1.1875 * MIXER_FRAC_SCALE); - audio.sincRatio2 = (uint64_t)(1.5 * MIXER_FRAC_SCALE); - audio.sincInterpolation = true; } - else if (config.interpolation == INTERPOLATION_SINC32) + else if (config.interpolation == INTERPOLATION_SINC16) { - fKaiserSinc = fKaiserSinc_32; - fDownSample1 = fDownSample1_32; - fDownSample2 = fDownSample2_32; - - audio.sincRatio1 = (uint64_t)(2.375 * MIXER_FRAC_SCALE); - audio.sincRatio2 = (uint64_t)(3.0 * MIXER_FRAC_SCALE); + fKaiserSinc = fKaiserSinc_16; + fDownSample1 = fDownSample1_16; + fDownSample2 = fDownSample2_16; audio.sincInterpolation = true; } @@ -402,13 +395,11 @@ void updateVoices(void) // set voice delta const uint64_t delta = v->oldDelta = (int64_t)((dHz * audio.dHz2MixDeltaMul) + 0.5); // Hz -> fixed-point delta (rounded) - //const double dRatio = delta / (double)MIXER_FRAC_SCALE; - if (audio.sincInterpolation) // decide which sinc LUT to use according to the resampling ratio { - if (delta <= audio.sincRatio1) + if (delta <= sincDownsample1Ratio) v->fSincLUT = fKaiserSinc; - else if (delta <= audio.sincRatio2) + else if (delta <= sincDownsample2Ratio) v->fSincLUT = fDownSample1; else v->fSincLUT = fDownSample2; diff --git a/src/ft2_audio.h b/src/ft2_audio.h @@ -46,7 +46,6 @@ typedef struct audio_t uint32_t audLatencyPerfValInt, tickTimeIntTab[(MAX_BPM-MIN_BPM)+1]; uint64_t audLatencyPerfValFrac, tickTimeFracTab[(MAX_BPM-MIN_BPM)+1]; - uint64_t sincRatio1, sincRatio2; uint64_t tickTime64, tickTime64Frac; diff --git a/src/ft2_config.c b/src/ft2_config.c @@ -828,8 +828,8 @@ void setConfigAudioRadioButtonStates(void) // accessed by other .c files tmpID = RB_CONFIG_AUDIO_INTRP_DISABLED; else if (config.interpolation == INTERPOLATION_LINEAR) tmpID = RB_CONFIG_AUDIO_INTRP_LINEAR; - else if (config.interpolation == INTERPOLATION_SINC32) - tmpID = RB_CONFIG_AUDIO_INTRP_SINC32; + else if (config.interpolation == INTERPOLATION_SINC16) + tmpID = RB_CONFIG_AUDIO_INTRP_SINC16; else if (config.interpolation == INTERPOLATION_CUBIC) tmpID = RB_CONFIG_AUDIO_INTRP_CUBIC; else @@ -1168,7 +1168,7 @@ void showConfigScreen(void) textOutShadow(406, 119, PAL_FORGRND, PAL_DSKTOP2, "Linear (FT2)"); textOutShadow(406, 133, PAL_FORGRND, PAL_DSKTOP2, "Cubic spline"); textOutShadow(406, 147, PAL_FORGRND, PAL_DSKTOP2, "Sinc (8 point)"); - textOutShadow(406, 161, PAL_FORGRND, PAL_DSKTOP2, "Sinc (32 point)"); + textOutShadow(406, 161, PAL_FORGRND, PAL_DSKTOP2, "Sinc (16 point)"); textOutShadow(509, 3, PAL_FORGRND, PAL_DSKTOP2, "Audio output rate:"); textOutShadow(525, 17, PAL_FORGRND, PAL_DSKTOP2, "44100Hz"); @@ -1634,11 +1634,11 @@ void rbConfigAudioIntrp8PointSinc(void) checkRadioButton(RB_CONFIG_AUDIO_INTRP_SINC8); } -void rbConfigAudioIntrp32PointSinc(void) +void rbConfigAudioIntrp16PointSinc(void) { - config.interpolation = INTERPOLATION_SINC32; + config.interpolation = INTERPOLATION_SINC16; audioSetInterpolationType(config.interpolation); - checkRadioButton(RB_CONFIG_AUDIO_INTRP_SINC32); + checkRadioButton(RB_CONFIG_AUDIO_INTRP_SINC16); } void rbConfigAudio44kHz(void) diff --git a/src/ft2_config.h b/src/ft2_config.h @@ -22,7 +22,7 @@ enum INTERPOLATION_DISABLED = 0, INTERPOLATION_SINC8 = 1, INTERPOLATION_LINEAR = 2, - INTERPOLATION_SINC32 = 3, + INTERPOLATION_SINC16 = 3, INTERPOLATION_CUBIC = 4, // ------ @@ -221,7 +221,7 @@ void rbConfigAudioIntrpDisabled(void); void rbConfigAudioIntrpLinear(void); void rbConfigAudioIntrpCubic(void); void rbConfigAudioIntrp8PointSinc(void); -void rbConfigAudioIntrp32PointSinc(void); +void rbConfigAudioIntrp16PointSinc(void); void rbConfigAudio44kHz(void); void rbConfigAudio48kHz(void); void rbConfigAudio96kHz(void); diff --git a/src/ft2_radiobuttons.c b/src/ft2_radiobuttons.c @@ -90,7 +90,7 @@ radioButton_t radioButtons[NUM_RADIOBUTTONS] = { 390, 118, 91, RB_GROUP_CONFIG_AUDIO_INTERPOLATION, rbConfigAudioIntrpLinear }, { 390, 132, 86, RB_GROUP_CONFIG_AUDIO_INTERPOLATION, rbConfigAudioIntrpCubic }, { 390, 146, 95, RB_GROUP_CONFIG_AUDIO_INTERPOLATION, rbConfigAudioIntrp8PointSinc }, - { 390, 160, 102, RB_GROUP_CONFIG_AUDIO_INTERPOLATION, rbConfigAudioIntrp32PointSinc }, + { 390, 160, 102, RB_GROUP_CONFIG_AUDIO_INTERPOLATION, rbConfigAudioIntrp16PointSinc }, // audio output frequency //x, y, w, group, funcOnUp diff --git a/src/ft2_radiobuttons.h b/src/ft2_radiobuttons.h @@ -59,7 +59,7 @@ enum // RADIOBUTTONS RB_CONFIG_AUDIO_INTRP_LINEAR, RB_CONFIG_AUDIO_INTRP_CUBIC, RB_CONFIG_AUDIO_INTRP_SINC8, - RB_CONFIG_AUDIO_INTRP_SINC32, + RB_CONFIG_AUDIO_INTRP_SINC16, // AUDIO FREQUENCY RB_CONFIG_AUDIO_44KHZ, diff --git a/src/helpdata/FT2.HLP b/src/helpdata/FT2.HLP @@ -804,7 +804,11 @@ you exit the program. >@X060@C002 Selects what type of resampling interpolation to use. If you want to have an authentic FT2 sound, select "linear". -Sinc will give the best interpolation, but it may sound too filtered on lo-fi samples. +If you want a good trade-off between quality and muddiness for more lo-fi samples, +select "Cubic spline". +However, if you mainly use hi-fi samples (or play XMs with hi-fi samples), then pick +any of the two sinc options for the most clear sound. Keep in mind that these will +make XMs with lo-fi samples sound very muddy, though! Tip: Play around with the different options... >@X040@C001Volume ramping: diff --git a/src/helpdata/ft2_help_data.h b/src/helpdata/ft2_help_data.h @@ -3,9 +3,9 @@ #include <stdint.h> -#define HELP_DATA_LEN 27755 +#define HELP_DATA_LEN 27997 -const uint8_t helpData[27755] = +const uint8_t helpData[27997] = { 0x4C,0x3B,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A, 0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A, @@ -1848,422 +1848,259 @@ const uint8_t helpData[27755] = 0x6E,0x20,0x61,0x75,0x74,0x68,0x65,0x6E,0x74,0x69,0x63,0x20, 0x46,0x54,0x32,0x20,0x73,0x6F,0x75,0x6E,0x64,0x2C,0x20,0x73, 0x65,0x6C,0x65,0x63,0x74,0x20,0x22,0x6C,0x69,0x6E,0x65,0x61, - 0x72,0x22,0x2E,0x56,0x53,0x69,0x6E,0x63,0x20,0x77,0x69,0x6C, - 0x6C,0x20,0x67,0x69,0x76,0x65,0x20,0x74,0x68,0x65,0x20,0x62, - 0x65,0x73,0x74,0x20,0x69,0x6E,0x74,0x65,0x72,0x70,0x6F,0x6C, - 0x61,0x74,0x69,0x6F,0x6E,0x2C,0x20,0x62,0x75,0x74,0x20,0x69, - 0x74,0x20,0x6D,0x61,0x79,0x20,0x73,0x6F,0x75,0x6E,0x64,0x20, - 0x74,0x6F,0x6F,0x20,0x66,0x69,0x6C,0x74,0x65,0x72,0x65,0x64, - 0x20,0x6F,0x6E,0x20,0x6C,0x6F,0x2D,0x66,0x69,0x20,0x73,0x61, - 0x6D,0x70,0x6C,0x65,0x73,0x2E,0x2E,0x54,0x69,0x70,0x3A,0x20, - 0x50,0x6C,0x61,0x79,0x20,0x61,0x72,0x6F,0x75,0x6E,0x64,0x20, - 0x77,0x69,0x74,0x68,0x20,0x74,0x68,0x65,0x20,0x64,0x69,0x66, - 0x66,0x65,0x72,0x65,0x6E,0x74,0x20,0x6F,0x70,0x74,0x69,0x6F, - 0x6E,0x73,0x2E,0x2E,0x2E,0x00,0x1A,0x3E,0x40,0x58,0x30,0x34, - 0x30,0x40,0x43,0x30,0x30,0x31,0x56,0x6F,0x6C,0x75,0x6D,0x65, - 0x20,0x72,0x61,0x6D,0x70,0x69,0x6E,0x67,0x3A,0x0B,0x3E,0x40, - 0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x3B,0x45,0x6E, - 0x61,0x62,0x6C,0x65,0x73,0x20,0x74,0x68,0x65,0x20,0x61,0x6E, - 0x74,0x69,0x2D,0x63,0x6C,0x69,0x63,0x6B,0x20,0x73,0x79,0x73, - 0x74,0x65,0x6D,0x20,0x69,0x6E,0x20,0x74,0x68,0x65,0x20,0x61, - 0x75,0x64,0x69,0x6F,0x20,0x6D,0x69,0x78,0x65,0x72,0x20,0x28, - 0x46,0x54,0x32,0x2E,0x30,0x38,0x2B,0x29,0x2E,0x3B,0x50,0x6C, - 0x65,0x61,0x73,0x65,0x20,0x6E,0x6F,0x74,0x65,0x20,0x74,0x68, - 0x61,0x74,0x20,0x6F,0x72,0x69,0x67,0x69,0x6E,0x61,0x6C,0x20, - 0x46,0x54,0x32,0x20,0x63,0x61,0x6E,0x27,0x74,0x20,0x6C,0x6F, - 0x61,0x64,0x20,0x74,0x68,0x69,0x73,0x20,0x63,0x6F,0x6E,0x66, - 0x69,0x67,0x20,0x65,0x6E,0x74,0x72,0x79,0x2C,0x0B,0x63,0x6C, - 0x6F,0x6E,0x65,0x20,0x6F,0x6E,0x6C,0x79,0x2E,0x00,0x19,0x3E, - 0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x41,0x6D, - 0x70,0x6C,0x69,0x66,0x69,0x63,0x61,0x74,0x69,0x6F,0x6E,0x3A, - 0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32, - 0x46,0x41,0x6D,0x70,0x6C,0x69,0x66,0x69,0x65,0x73,0x20,0x74, - 0x68,0x65,0x20,0x76,0x6F,0x6C,0x75,0x6D,0x65,0x20,0x77,0x68, - 0x65,0x6E,0x20,0x6D,0x69,0x78,0x69,0x6E,0x67,0x2E,0x20,0x49, - 0x66,0x20,0x79,0x6F,0x75,0x20,0x73,0x65,0x74,0x20,0x74,0x68, - 0x69,0x73,0x20,0x6F,0x6E,0x65,0x20,0x74,0x6F,0x6F,0x20,0x68, - 0x69,0x67,0x68,0x2C,0x20,0x79,0x6F,0x75,0x27,0x6C,0x6C,0x3A, - 0x67,0x65,0x74,0x20,0x64,0x69,0x73,0x74,0x6F,0x72,0x74,0x69, - 0x6F,0x6E,0x2E,0x20,0x33,0x32,0x58,0x20,0x65,0x71,0x75,0x61, - 0x6C,0x73,0x20,0x66,0x75,0x6C,0x6C,0x20,0x61,0x6D,0x70,0x6C, - 0x69,0x74,0x75,0x64,0x65,0x20,0x66,0x6F,0x72,0x20,0x6F,0x6E, - 0x65,0x20,0x63,0x68,0x61,0x6E,0x6E,0x65,0x6C,0x2E,0x00,0x1C, - 0x3E,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x46, - 0x72,0x65,0x71,0x75,0x65,0x6E,0x63,0x79,0x20,0x73,0x6C,0x69, - 0x64,0x65,0x73,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40, - 0x43,0x30,0x30,0x32,0x39,0x4C,0x69,0x6E,0x65,0x61,0x72,0x20, - 0x6D,0x6F,0x64,0x65,0x20,0x6D,0x61,0x6B,0x65,0x73,0x20,0x61, - 0x6C,0x6C,0x20,0x70,0x69,0x74,0x63,0x68,0x20,0x73,0x6C,0x69, - 0x64,0x65,0x73,0x20,0x72,0x75,0x6E,0x20,0x69,0x6E,0x20,0x63, - 0x6F,0x6E,0x73,0x74,0x61,0x6E,0x74,0x20,0x73,0x70,0x65,0x65, - 0x64,0x2C,0x38,0x69,0x6E,0x64,0x65,0x70,0x65,0x6E,0x64,0x65, - 0x6E,0x74,0x20,0x6F,0x66,0x20,0x74,0x68,0x65,0x20,0x63,0x75, - 0x72,0x72,0x65,0x6E,0x74,0x20,0x66,0x72,0x65,0x71,0x75,0x65, - 0x6E,0x63,0x79,0x2E,0x20,0x49,0x66,0x20,0x79,0x6F,0x75,0x20, - 0x73,0x77,0x69,0x74,0x63,0x68,0x20,0x74,0x68,0x69,0x73,0x40, - 0x6F,0x6E,0x65,0x2C,0x20,0x6F,0x6E,0x20,0x61,0x20,0x66,0x69, - 0x6E,0x69,0x73,0x68,0x65,0x64,0x20,0x73,0x6F,0x6E,0x67,0x2C, - 0x20,0x69,0x74,0x20,0x6D,0x69,0x67,0x68,0x74,0x20,0x73,0x6F, - 0x75,0x6E,0x64,0x20,0x73,0x74,0x72,0x61,0x6E,0x67,0x65,0x20, - 0x69,0x66,0x20,0x74,0x68,0x65,0x20,0x73,0x6F,0x6E,0x67,0x20, - 0x75,0x73,0x65,0x73,0x0D,0x70,0x6F,0x72,0x74,0x61,0x6D,0x65, - 0x6E,0x74,0x6F,0x65,0x73,0x2E,0x00,0x20,0x40,0x58,0x30,0x32, - 0x30,0x40,0x43,0x30,0x30,0x31,0x43,0x6F,0x6E,0x66,0x69,0x67, - 0x75,0x72,0x61,0x74,0x69,0x6F,0x6E,0x2C,0x20,0x4C,0x61,0x79, - 0x6F,0x75,0x74,0x3A,0x01,0x3E,0x29,0x3E,0x40,0x58,0x30,0x34, - 0x30,0x40,0x43,0x30,0x30,0x31,0x50,0x61,0x74,0x74,0x65,0x72, - 0x6E,0x20,0x6C,0x61,0x79,0x6F,0x75,0x74,0x2C,0x20,0x68,0x65, - 0x78,0x20,0x6E,0x75,0x6D,0x62,0x65,0x72,0x69,0x6E,0x67,0x3A, - 0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32, - 0x41,0x49,0x66,0x20,0x79,0x6F,0x75,0x20,0x75,0x73,0x65,0x20, - 0x70,0x61,0x74,0x74,0x65,0x72,0x6E,0x73,0x20,0x74,0x68,0x61, - 0x74,0x20,0x61,0x72,0x65,0x20,0x6C,0x6F,0x6E,0x67,0x65,0x72, - 0x20,0x74,0x68,0x61,0x6E,0x20,0x39,0x39,0x20,0x6C,0x69,0x6E, - 0x65,0x73,0x2C,0x20,0x79,0x6F,0x75,0x20,0x73,0x68,0x6F,0x75, - 0x6C,0x64,0x20,0x75,0x73,0x65,0x45,0x68,0x65,0x78,0x20,0x63, - 0x6F,0x75,0x6E,0x74,0x69,0x6E,0x67,0x20,0x73,0x69,0x6E,0x63, - 0x65,0x20,0x74,0x68,0x65,0x72,0x65,0x20,0x61,0x72,0x65,0x20, - 0x6F,0x6E,0x6C,0x79,0x20,0x32,0x20,0x64,0x69,0x67,0x69,0x74, - 0x73,0x20,0x69,0x6E,0x20,0x74,0x68,0x65,0x20,0x6C,0x69,0x6E, - 0x65,0x20,0x6E,0x75,0x6D,0x62,0x65,0x72,0x20,0x63,0x6F,0x6C, - 0x75,0x6D,0x6E,0x2E,0x00,0x12,0x3E,0x40,0x58,0x30,0x34,0x30, - 0x40,0x43,0x30,0x30,0x31,0x53,0x63,0x6F,0x70,0x65,0x73,0x3A, - 0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32, - 0x43,0x22,0x53,0x74,0x64,0x2E,0x22,0x20,0x28,0x73,0x74,0x61, - 0x6E,0x64,0x61,0x72,0x64,0x29,0x20,0x77,0x69,0x6C,0x6C,0x20, - 0x73,0x68,0x6F,0x77,0x20,0x74,0x68,0x65,0x20,0x73,0x61,0x6D, - 0x70,0x6C,0x65,0x20,0x70,0x6F,0x69,0x6E,0x74,0x73,0x20,0x61, - 0x73,0x20,0x70,0x69,0x78,0x65,0x6C,0x73,0x20,0x28,0x6C,0x69, - 0x6B,0x65,0x20,0x46,0x54,0x32,0x29,0x2E,0x3D,0x22,0x4C,0x69, - 0x6E,0x65,0x64,0x22,0x20,0x77,0x69,0x6C,0x6C,0x20,0x64,0x72, - 0x61,0x77,0x20,0x69,0x6E,0x74,0x65,0x72,0x70,0x6F,0x6C,0x61, - 0x74,0x65,0x64,0x20,0x73,0x61,0x6D,0x70,0x6C,0x65,0x73,0x20, - 0x28,0x6C,0x69,0x6E,0x65,0x61,0x72,0x20,0x69,0x6E,0x74,0x65, - 0x72,0x70,0x6F,0x6C,0x61,0x74,0x69,0x6F,0x6E,0x2E,0x00,0x27, - 0x40,0x58,0x30,0x32,0x30,0x40,0x43,0x30,0x30,0x31,0x43,0x6F, - 0x6E,0x66,0x69,0x67,0x75,0x72,0x61,0x74,0x69,0x6F,0x6E,0x2C, - 0x20,0x4D,0x69,0x73,0x63,0x65,0x6C,0x6C,0x61,0x6E,0x65,0x6F, - 0x75,0x73,0x3A,0x01,0x3E,0x15,0x3E,0x40,0x58,0x30,0x34,0x30, - 0x40,0x43,0x30,0x30,0x31,0x56,0x53,0x79,0x6E,0x63,0x20,0x6F, - 0x66,0x66,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43, - 0x30,0x30,0x32,0x3F,0x54,0x65,0x6C,0x6C,0x73,0x20,0x74,0x68, - 0x65,0x20,0x70,0x72,0x6F,0x67,0x72,0x61,0x6D,0x20,0x74,0x6F, - 0x20,0x6E,0x6F,0x74,0x20,0x75,0x73,0x65,0x20,0x56,0x53,0x79, - 0x6E,0x63,0x20,0x66,0x6F,0x72,0x20,0x76,0x69,0x64,0x65,0x6F, - 0x2E,0x20,0x49,0x66,0x20,0x79,0x6F,0x75,0x72,0x20,0x6D,0x6F, - 0x6E,0x69,0x74,0x6F,0x72,0x27,0x73,0x40,0x72,0x65,0x66,0x72, - 0x65,0x73,0x68,0x20,0x72,0x61,0x74,0x65,0x20,0x69,0x73,0x20, - 0x6E,0x6F,0x74,0x20,0x36,0x30,0x48,0x7A,0x20,0x28,0x6F,0x72, - 0x20,0x35,0x39,0x48,0x7A,0x29,0x2C,0x20,0x74,0x68,0x65,0x6E, - 0x20,0x56,0x53,0x79,0x6E,0x63,0x20,0x69,0x73,0x20,0x61,0x6C, - 0x77,0x61,0x79,0x73,0x20,0x6F,0x66,0x66,0x20,0x66,0x6F,0x72, - 0x45,0x74,0x68,0x69,0x73,0x20,0x70,0x72,0x6F,0x67,0x72,0x61, - 0x6D,0x2E,0x20,0x4E,0x6F,0x74,0x20,0x68,0x61,0x76,0x69,0x6E, - 0x67,0x20,0x56,0x53,0x79,0x6E,0x63,0x20,0x77,0x69,0x6C,0x6C, - 0x20,0x72,0x65,0x73,0x75,0x6C,0x74,0x20,0x69,0x6E,0x20,0x6C, - 0x65,0x73,0x73,0x20,0x69,0x6E,0x70,0x75,0x74,0x2F,0x76,0x69, - 0x64,0x65,0x6F,0x20,0x64,0x65,0x6C,0x61,0x79,0x2C,0x1E,0x62, - 0x75,0x74,0x20,0x61,0x6C,0x73,0x6F,0x20,0x70,0x6F,0x74,0x65, - 0x6E,0x74,0x69,0x61,0x6C,0x20,0x73,0x74,0x75,0x74,0x74,0x65, - 0x72,0x69,0x6E,0x67,0x2E,0x00,0x15,0x3E,0x40,0x58,0x30,0x34, - 0x30,0x40,0x43,0x30,0x30,0x31,0x53,0x74,0x72,0x65,0x74,0x63, - 0x68,0x65,0x64,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40, - 0x43,0x30,0x30,0x32,0x4A,0x4D,0x61,0x6B,0x65,0x73,0x20,0x66, - 0x75,0x6C,0x6C,0x73,0x63,0x72,0x65,0x65,0x6E,0x20,0x6D,0x6F, - 0x64,0x65,0x20,0x63,0x6F,0x6D,0x70,0x6C,0x65,0x74,0x65,0x6C, - 0x79,0x20,0x73,0x74,0x72,0x65,0x74,0x63,0x68,0x20,0x6F,0x75, - 0x74,0x20,0x74,0x68,0x65,0x20,0x69,0x6D,0x61,0x67,0x65,0x2E, - 0x20,0x54,0x68,0x69,0x73,0x20,0x63,0x61,0x6E,0x20,0x72,0x65, - 0x73,0x75,0x6C,0x74,0x20,0x69,0x6E,0x4E,0x61,0x6C,0x69,0x61, - 0x73,0x69,0x6E,0x67,0x20,0x28,0x75,0x6E,0x65,0x76,0x65,0x6E, - 0x20,0x70,0x69,0x78,0x65,0x6C,0x20,0x77,0x69,0x64,0x74,0x68, - 0x73,0x29,0x20,0x69,0x66,0x20,0x74,0x68,0x65,0x20,0x61,0x73, - 0x70,0x65,0x63,0x74,0x20,0x72,0x61,0x74,0x69,0x6F,0x20,0x6F, - 0x66,0x20,0x74,0x68,0x65,0x20,0x73,0x63,0x72,0x65,0x65,0x6E, - 0x20,0x69,0x73,0x20,0x6E,0x6F,0x74,0x20,0x31,0x36,0x3A,0x31, - 0x30,0x2E,0x52,0x54,0x68,0x65,0x20,0x22,0x50,0x69,0x78,0x65, - 0x6C,0x20,0x66,0x69,0x6C,0x74,0x65,0x72,0x22,0x20,0x73,0x65, - 0x74,0x74,0x69,0x6E,0x67,0x20,0x63,0x61,0x6E,0x20,0x68,0x65, - 0x6C,0x70,0x20,0x77,0x69,0x74,0x68,0x20,0x74,0x68,0x69,0x73, - 0x2C,0x20,0x62,0x75,0x74,0x20,0x69,0x74,0x20,0x6D,0x61,0x6B, - 0x65,0x73,0x20,0x74,0x68,0x65,0x20,0x69,0x6D,0x61,0x67,0x65, - 0x20,0x6C,0x6F,0x6F,0x6B,0x20,0x62,0x6C,0x75,0x72,0x72,0x79, - 0x2E,0x01,0x20,0x18,0x3E,0x40,0x58,0x30,0x34,0x30,0x40,0x43, - 0x30,0x30,0x31,0x50,0x69,0x78,0x65,0x6C,0x20,0x66,0x69,0x6C, - 0x74,0x65,0x72,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40, - 0x43,0x30,0x30,0x32,0x52,0x41,0x70,0x70,0x6C,0x69,0x65,0x73, - 0x20,0x61,0x6E,0x20,0x61,0x6E,0x74,0x69,0x2D,0x61,0x6C,0x69, - 0x61,0x73,0x69,0x6E,0x67,0x20,0x73,0x75,0x62,0x70,0x69,0x78, - 0x65,0x6C,0x20,0x66,0x69,0x6C,0x74,0x65,0x72,0x20,0x74,0x68, - 0x61,0x74,0x20,0x69,0x73,0x20,0x75,0x73,0x65,0x64,0x20,0x77, - 0x68,0x65,0x6E,0x20,0x74,0x68,0x65,0x20,0x77,0x69,0x6E,0x64, - 0x6F,0x77,0x20,0x69,0x73,0x20,0x75,0x70,0x73,0x63,0x61,0x6C, - 0x65,0x64,0x2E,0x3B,0x50,0x6C,0x65,0x61,0x73,0x65,0x20,0x6B, - 0x65,0x65,0x70,0x20,0x69,0x6E,0x20,0x6D,0x69,0x6E,0x64,0x20, - 0x74,0x68,0x61,0x74,0x20,0x74,0x68,0x69,0x73,0x20,0x77,0x69, - 0x6C,0x6C,0x20,0x6D,0x61,0x6B,0x65,0x20,0x70,0x69,0x78,0x65, - 0x6C,0x73,0x20,0x6C,0x6F,0x6F,0x6B,0x20,0x62,0x6C,0x75,0x72, - 0x72,0x79,0x2E,0x00,0x23,0x40,0x58,0x30,0x32,0x30,0x40,0x43, - 0x30,0x30,0x31,0x41,0x64,0x76,0x61,0x6E,0x63,0x65,0x64,0x20, - 0x65,0x64,0x69,0x74,0x20,0x66,0x75,0x6E,0x63,0x74,0x69,0x6F, - 0x6E,0x73,0x3A,0x20,0x01,0x3E,0x1E,0x3E,0x40,0x58,0x30,0x34, - 0x30,0x40,0x43,0x30,0x30,0x31,0x43,0x6F,0x70,0x79,0x2F,0x50, - 0x61,0x73,0x74,0x65,0x20,0x6D,0x61,0x73,0x6B,0x69,0x6E,0x67, - 0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30, - 0x32,0x37,0x54,0x68,0x65,0x20,0x6D,0x61,0x73,0x6B,0x69,0x6E, - 0x67,0x20,0x69,0x73,0x20,0x75,0x73,0x65,0x64,0x20,0x66,0x6F, - 0x72,0x20,0x63,0x6F,0x70,0x79,0x69,0x6E,0x67,0x2F,0x70,0x61, - 0x73,0x74,0x69,0x6E,0x67,0x20,0x6F,0x6E,0x6C,0x79,0x20,0x70, - 0x61,0x72,0x74,0x73,0x20,0x6F,0x66,0x20,0x61,0x46,0x22,0x6E, - 0x6F,0x74,0x65,0x2D,0x63,0x65,0x6C,0x6C,0x22,0x2E,0x20,0x54, - 0x68,0x65,0x20,0x64,0x69,0x66,0x66,0x65,0x72,0x65,0x6E,0x74, - 0x20,0x70,0x61,0x72,0x74,0x73,0x20,0x6F,0x66,0x20,0x61,0x20, - 0x22,0x6E,0x6F,0x74,0x65,0x2D,0x63,0x65,0x6C,0x6C,0x22,0x20, - 0x69,0x73,0x20,0x4E,0x6F,0x74,0x65,0x2C,0x20,0x49,0x6E,0x73, - 0x74,0x72,0x2E,0x20,0x6E,0x72,0x2E,0x2C,0x20,0x56,0x6F,0x6C, - 0x75,0x6D,0x65,0x2C,0x20,0x45,0x66,0x66,0x65,0x63,0x74,0x20, - 0x6E,0x72,0x20,0x26,0x20,0x45,0x66,0x66,0x65,0x63,0x74,0x20, - 0x64,0x61,0x74,0x61,0x2E,0x34,0x3E,0x41,0x73,0x20,0x79,0x6F, - 0x75,0x20,0x63,0x61,0x6E,0x20,0x73,0x65,0x65,0x20,0x69,0x6E, - 0x20,0x74,0x68,0x65,0x20,0x77,0x69,0x6E,0x64,0x6F,0x77,0x20, - 0x74,0x68,0x65,0x72,0x65,0x20,0x61,0x72,0x65,0x20,0x33,0x20, - 0x63,0x6F,0x6C,0x75,0x6D,0x6E,0x73,0x20,0x6F,0x66,0x3D,0x22, - 0x65,0x6E,0x61,0x62,0x6C,0x65,0x2F,0x64,0x69,0x73,0x61,0x62, - 0x6C,0x65,0x20,0x62,0x75,0x74,0x74,0x6F,0x6E,0x73,0x22,0x20, - 0x77,0x68,0x69,0x63,0x68,0x20,0x68,0x61,0x73,0x20,0x74,0x68, - 0x65,0x20,0x6C,0x65,0x74,0x74,0x65,0x72,0x73,0x20,0x43,0x2C, - 0x50,0x20,0x26,0x20,0x54,0x20,0x61,0x62,0x6F,0x76,0x65,0x2E, - 0x45,0x3E,0x43,0x20,0x6D,0x65,0x61,0x6E,0x73,0x20,0x63,0x6F, - 0x70,0x79,0x2C,0x20,0x69,0x74,0x20,0x63,0x6F,0x6E,0x74,0x72, - 0x6F,0x6C,0x73,0x20,0x77,0x68,0x69,0x63,0x68,0x20,0x70,0x61, - 0x72,0x74,0x73,0x20,0x74,0x68,0x61,0x74,0x20,0x67,0x6F,0x65, - 0x73,0x20,0x69,0x6E,0x74,0x6F,0x20,0x74,0x68,0x65,0x20,0x63, - 0x6F,0x70,0x79,0x62,0x75,0x66,0x66,0x65,0x72,0x2E,0x3E,0x3E, - 0x50,0x20,0x6D,0x65,0x61,0x6E,0x73,0x20,0x70,0x61,0x73,0x74, - 0x65,0x20,0x61,0x6E,0x64,0x20,0x63,0x6F,0x6E,0x74,0x72,0x6F, - 0x6C,0x73,0x20,0x77,0x68,0x69,0x63,0x68,0x20,0x70,0x61,0x72, - 0x74,0x73,0x20,0x74,0x68,0x61,0x74,0x20,0x67,0x6F,0x65,0x73, - 0x20,0x6F,0x75,0x74,0x20,0x66,0x72,0x6F,0x6D,0x20,0x74,0x68, - 0x65,0x0B,0x63,0x6F,0x70,0x79,0x62,0x75,0x66,0x66,0x65,0x72, - 0x2E,0x45,0x3E,0x54,0x20,0x6D,0x65,0x61,0x6E,0x73,0x20,0x74, - 0x72,0x61,0x6E,0x73,0x70,0x61,0x72,0x65,0x6E,0x63,0x79,0x2E, - 0x20,0x49,0x66,0x20,0x69,0x74,0x27,0x73,0x20,0x65,0x6E,0x61, - 0x62,0x6C,0x65,0x64,0x2C,0x20,0x74,0x68,0x65,0x20,0x70,0x61, - 0x73,0x74,0x69,0x6E,0x67,0x20,0x64,0x6F,0x65,0x73,0x6E,0x27, - 0x74,0x20,0x6F,0x76,0x65,0x72,0x77,0x72,0x69,0x74,0x65,0x3D, - 0x64,0x61,0x74,0x61,0x20,0x77,0x69,0x74,0x68,0x20,0x6E,0x69, - 0x6C,0x2D,0x69,0x6E,0x66,0x6F,0x72,0x6D,0x61,0x74,0x69,0x6F, - 0x6E,0x2C,0x20,0x6F,0x6E,0x6C,0x79,0x20,0x77,0x69,0x74,0x68, - 0x20,0x61,0x20,0x6E,0x6F,0x74,0x65,0x20,0x6F,0x72,0x20,0x61, - 0x20,0x6E,0x75,0x6D,0x62,0x65,0x72,0x20,0x3C,0x3E,0x20,0x30, - 0x2E,0x01,0x3E,0x40,0x3E,0x54,0x68,0x65,0x20,0x63,0x75,0x74, - 0x20,0x66,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x73,0x20,0x77, - 0x6F,0x72,0x6B,0x73,0x20,0x6C,0x69,0x6B,0x65,0x20,0x70,0x61, - 0x73,0x74,0x69,0x6E,0x67,0x20,0x77,0x69,0x74,0x68,0x20,0x7A, - 0x65,0x72,0x6F,0x2D,0x64,0x61,0x74,0x61,0x2E,0x20,0x54,0x68, - 0x69,0x73,0x20,0x6D,0x65,0x61,0x6E,0x73,0x3B,0x74,0x68,0x61, - 0x74,0x20,0x74,0x68,0x65,0x20,0x63,0x75,0x74,0x74,0x69,0x6E, - 0x67,0x20,0x69,0x73,0x20,0x63,0x6F,0x6E,0x74,0x72,0x6F,0x6C, - 0x6C,0x65,0x64,0x20,0x77,0x69,0x74,0x68,0x20,0x50,0x2D,0x63, - 0x6F,0x6C,0x75,0x6D,0x6E,0x20,0x28,0x6F,0x72,0x20,0x54,0x2D, - 0x63,0x6F,0x6C,0x75,0x6D,0x6E,0x29,0x2E,0x3C,0x3E,0x57,0x68, - 0x65,0x6E,0x20,0x79,0x6F,0x75,0x20,0x63,0x6F,0x70,0x79,0x20, - 0x64,0x61,0x74,0x61,0x20,0x77,0x69,0x74,0x68,0x20,0x6D,0x61, - 0x73,0x6B,0x69,0x6E,0x67,0x2C,0x20,0x74,0x68,0x65,0x20,0x64, - 0x69,0x73,0x61,0x62,0x6C,0x65,0x64,0x20,0x70,0x61,0x72,0x74, - 0x73,0x20,0x61,0x72,0x65,0x20,0x6E,0x6F,0x74,0x43,0x63,0x6C, - 0x65,0x61,0x72,0x65,0x64,0x20,0x69,0x6E,0x20,0x74,0x68,0x65, - 0x20,0x63,0x6F,0x70,0x79,0x62,0x75,0x66,0x66,0x65,0x72,0x2E, - 0x20,0x28,0x4D,0x61,0x6B,0x69,0x6E,0x67,0x20,0x69,0x74,0x20, - 0x70,0x6F,0x73,0x73,0x69,0x62,0x6C,0x65,0x20,0x74,0x6F,0x20, - 0x63,0x6F,0x6C,0x6C,0x65,0x63,0x74,0x20,0x64,0x61,0x74,0x61, - 0x20,0x66,0x72,0x6F,0x6D,0x27,0x73,0x65,0x76,0x65,0x72,0x61, - 0x6C,0x20,0x6C,0x6F,0x63,0x61,0x74,0x69,0x6F,0x6E,0x73,0x20, - 0x69,0x6E,0x74,0x6F,0x20,0x74,0x68,0x65,0x20,0x63,0x6F,0x70, - 0x79,0x62,0x75,0x66,0x66,0x65,0x72,0x2E,0x29,0x00,0x03,0x45, - 0x4E,0x44,0x4C,0x3B,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A, - 0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A, - 0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A, - 0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A, - 0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A, - 0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A, - 0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x4C,0x3B,0x2A,0x2A,0x2A, - 0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A, - 0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A, - 0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A, - 0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A, - 0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A, - 0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A, - 0x0E,0x40,0x4C,0x50,0x72,0x6F,0x62,0x6C,0x65,0x6D,0x73,0x2F, - 0x46,0x41,0x51,0x06,0x3E,0x40,0x58,0x30,0x32,0x30,0x2A,0x3E, - 0x40,0x43,0x30,0x30,0x31,0x51,0x3A,0x20,0x48,0x6F,0x77,0x20, - 0x63,0x61,0x6E,0x20,0x49,0x20,0x74,0x6F,0x67,0x67,0x6C,0x65, + 0x72,0x22,0x2E,0x52,0x49,0x66,0x20,0x79,0x6F,0x75,0x20,0x77, + 0x61,0x6E,0x74,0x20,0x61,0x20,0x67,0x6F,0x6F,0x64,0x20,0x74, + 0x72,0x61,0x64,0x65,0x2D,0x6F,0x66,0x66,0x20,0x62,0x65,0x74, + 0x77,0x65,0x65,0x6E,0x20,0x71,0x75,0x61,0x6C,0x69,0x74,0x79, + 0x20,0x61,0x6E,0x64,0x20,0x6D,0x75,0x64,0x64,0x69,0x6E,0x65, + 0x73,0x73,0x20,0x66,0x6F,0x72,0x20,0x6D,0x6F,0x72,0x65,0x20, + 0x6C,0x6F,0x2D,0x66,0x69,0x20,0x73,0x61,0x6D,0x70,0x6C,0x65, + 0x73,0x2C,0x16,0x73,0x65,0x6C,0x65,0x63,0x74,0x20,0x22,0x43, + 0x75,0x62,0x69,0x63,0x20,0x73,0x70,0x6C,0x69,0x6E,0x65,0x22, + 0x2E,0x54,0x48,0x6F,0x77,0x65,0x76,0x65,0x72,0x2C,0x20,0x69, + 0x66,0x20,0x79,0x6F,0x75,0x20,0x6D,0x61,0x69,0x6E,0x6C,0x79, + 0x20,0x75,0x73,0x65,0x20,0x68,0x69,0x2D,0x66,0x69,0x20,0x73, + 0x61,0x6D,0x70,0x6C,0x65,0x73,0x20,0x28,0x6F,0x72,0x20,0x70, + 0x6C,0x61,0x79,0x20,0x58,0x4D,0x73,0x20,0x77,0x69,0x74,0x68, + 0x20,0x68,0x69,0x2D,0x66,0x69,0x20,0x73,0x61,0x6D,0x70,0x6C, + 0x65,0x73,0x29,0x2C,0x20,0x74,0x68,0x65,0x6E,0x20,0x70,0x69, + 0x63,0x6B,0x52,0x61,0x6E,0x79,0x20,0x6F,0x66,0x20,0x74,0x68, + 0x65,0x20,0x74,0x77,0x6F,0x20,0x73,0x69,0x6E,0x63,0x20,0x6F, + 0x70,0x74,0x69,0x6F,0x6E,0x73,0x20,0x66,0x6F,0x72,0x20,0x74, + 0x68,0x65,0x20,0x6D,0x6F,0x73,0x74,0x20,0x63,0x6C,0x65,0x61, + 0x72,0x20,0x73,0x6F,0x75,0x6E,0x64,0x2E,0x20,0x4B,0x65,0x65, + 0x70,0x20,0x69,0x6E,0x20,0x6D,0x69,0x6E,0x64,0x20,0x74,0x68, + 0x61,0x74,0x20,0x74,0x68,0x65,0x73,0x65,0x20,0x77,0x69,0x6C, + 0x6C,0x36,0x6D,0x61,0x6B,0x65,0x20,0x58,0x4D,0x73,0x20,0x77, + 0x69,0x74,0x68,0x20,0x6C,0x6F,0x2D,0x66,0x69,0x20,0x73,0x61, + 0x6D,0x70,0x6C,0x65,0x73,0x20,0x73,0x6F,0x75,0x6E,0x64,0x20, + 0x76,0x65,0x72,0x79,0x20,0x6D,0x75,0x64,0x64,0x79,0x2C,0x20, + 0x74,0x68,0x6F,0x75,0x67,0x68,0x21,0x20,0x2E,0x54,0x69,0x70, + 0x3A,0x20,0x50,0x6C,0x61,0x79,0x20,0x61,0x72,0x6F,0x75,0x6E, + 0x64,0x20,0x77,0x69,0x74,0x68,0x20,0x74,0x68,0x65,0x20,0x64, + 0x69,0x66,0x66,0x65,0x72,0x65,0x6E,0x74,0x20,0x6F,0x70,0x74, + 0x69,0x6F,0x6E,0x73,0x2E,0x2E,0x2E,0x00,0x1A,0x3E,0x40,0x58, + 0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x56,0x6F,0x6C,0x75, + 0x6D,0x65,0x20,0x72,0x61,0x6D,0x70,0x69,0x6E,0x67,0x3A,0x0B, + 0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x3B, + 0x45,0x6E,0x61,0x62,0x6C,0x65,0x73,0x20,0x74,0x68,0x65,0x20, + 0x61,0x6E,0x74,0x69,0x2D,0x63,0x6C,0x69,0x63,0x6B,0x20,0x73, + 0x79,0x73,0x74,0x65,0x6D,0x20,0x69,0x6E,0x20,0x74,0x68,0x65, + 0x20,0x61,0x75,0x64,0x69,0x6F,0x20,0x6D,0x69,0x78,0x65,0x72, + 0x20,0x28,0x46,0x54,0x32,0x2E,0x30,0x38,0x2B,0x29,0x2E,0x3B, + 0x50,0x6C,0x65,0x61,0x73,0x65,0x20,0x6E,0x6F,0x74,0x65,0x20, + 0x74,0x68,0x61,0x74,0x20,0x6F,0x72,0x69,0x67,0x69,0x6E,0x61, + 0x6C,0x20,0x46,0x54,0x32,0x20,0x63,0x61,0x6E,0x27,0x74,0x20, + 0x6C,0x6F,0x61,0x64,0x20,0x74,0x68,0x69,0x73,0x20,0x63,0x6F, + 0x6E,0x66,0x69,0x67,0x20,0x65,0x6E,0x74,0x72,0x79,0x2C,0x0B, + 0x63,0x6C,0x6F,0x6E,0x65,0x20,0x6F,0x6E,0x6C,0x79,0x2E,0x00, + 0x19,0x3E,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31, + 0x41,0x6D,0x70,0x6C,0x69,0x66,0x69,0x63,0x61,0x74,0x69,0x6F, + 0x6E,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30, + 0x30,0x32,0x46,0x41,0x6D,0x70,0x6C,0x69,0x66,0x69,0x65,0x73, + 0x20,0x74,0x68,0x65,0x20,0x76,0x6F,0x6C,0x75,0x6D,0x65,0x20, + 0x77,0x68,0x65,0x6E,0x20,0x6D,0x69,0x78,0x69,0x6E,0x67,0x2E, + 0x20,0x49,0x66,0x20,0x79,0x6F,0x75,0x20,0x73,0x65,0x74,0x20, + 0x74,0x68,0x69,0x73,0x20,0x6F,0x6E,0x65,0x20,0x74,0x6F,0x6F, + 0x20,0x68,0x69,0x67,0x68,0x2C,0x20,0x79,0x6F,0x75,0x27,0x6C, + 0x6C,0x3A,0x67,0x65,0x74,0x20,0x64,0x69,0x73,0x74,0x6F,0x72, + 0x74,0x69,0x6F,0x6E,0x2E,0x20,0x33,0x32,0x58,0x20,0x65,0x71, + 0x75,0x61,0x6C,0x73,0x20,0x66,0x75,0x6C,0x6C,0x20,0x61,0x6D, + 0x70,0x6C,0x69,0x74,0x75,0x64,0x65,0x20,0x66,0x6F,0x72,0x20, + 0x6F,0x6E,0x65,0x20,0x63,0x68,0x61,0x6E,0x6E,0x65,0x6C,0x2E, + 0x00,0x1C,0x3E,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30, + 0x31,0x46,0x72,0x65,0x71,0x75,0x65,0x6E,0x63,0x79,0x20,0x73, + 0x6C,0x69,0x64,0x65,0x73,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36, + 0x30,0x40,0x43,0x30,0x30,0x32,0x39,0x4C,0x69,0x6E,0x65,0x61, + 0x72,0x20,0x6D,0x6F,0x64,0x65,0x20,0x6D,0x61,0x6B,0x65,0x73, + 0x20,0x61,0x6C,0x6C,0x20,0x70,0x69,0x74,0x63,0x68,0x20,0x73, + 0x6C,0x69,0x64,0x65,0x73,0x20,0x72,0x75,0x6E,0x20,0x69,0x6E, + 0x20,0x63,0x6F,0x6E,0x73,0x74,0x61,0x6E,0x74,0x20,0x73,0x70, + 0x65,0x65,0x64,0x2C,0x38,0x69,0x6E,0x64,0x65,0x70,0x65,0x6E, + 0x64,0x65,0x6E,0x74,0x20,0x6F,0x66,0x20,0x74,0x68,0x65,0x20, + 0x63,0x75,0x72,0x72,0x65,0x6E,0x74,0x20,0x66,0x72,0x65,0x71, + 0x75,0x65,0x6E,0x63,0x79,0x2E,0x20,0x49,0x66,0x20,0x79,0x6F, + 0x75,0x20,0x73,0x77,0x69,0x74,0x63,0x68,0x20,0x74,0x68,0x69, + 0x73,0x40,0x6F,0x6E,0x65,0x2C,0x20,0x6F,0x6E,0x20,0x61,0x20, + 0x66,0x69,0x6E,0x69,0x73,0x68,0x65,0x64,0x20,0x73,0x6F,0x6E, + 0x67,0x2C,0x20,0x69,0x74,0x20,0x6D,0x69,0x67,0x68,0x74,0x20, + 0x73,0x6F,0x75,0x6E,0x64,0x20,0x73,0x74,0x72,0x61,0x6E,0x67, + 0x65,0x20,0x69,0x66,0x20,0x74,0x68,0x65,0x20,0x73,0x6F,0x6E, + 0x67,0x20,0x75,0x73,0x65,0x73,0x0D,0x70,0x6F,0x72,0x74,0x61, + 0x6D,0x65,0x6E,0x74,0x6F,0x65,0x73,0x2E,0x00,0x20,0x40,0x58, + 0x30,0x32,0x30,0x40,0x43,0x30,0x30,0x31,0x43,0x6F,0x6E,0x66, + 0x69,0x67,0x75,0x72,0x61,0x74,0x69,0x6F,0x6E,0x2C,0x20,0x4C, + 0x61,0x79,0x6F,0x75,0x74,0x3A,0x01,0x3E,0x29,0x3E,0x40,0x58, + 0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x50,0x61,0x74,0x74, + 0x65,0x72,0x6E,0x20,0x6C,0x61,0x79,0x6F,0x75,0x74,0x2C,0x20, + 0x68,0x65,0x78,0x20,0x6E,0x75,0x6D,0x62,0x65,0x72,0x69,0x6E, + 0x67,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30, + 0x30,0x32,0x41,0x49,0x66,0x20,0x79,0x6F,0x75,0x20,0x75,0x73, + 0x65,0x20,0x70,0x61,0x74,0x74,0x65,0x72,0x6E,0x73,0x20,0x74, + 0x68,0x61,0x74,0x20,0x61,0x72,0x65,0x20,0x6C,0x6F,0x6E,0x67, + 0x65,0x72,0x20,0x74,0x68,0x61,0x6E,0x20,0x39,0x39,0x20,0x6C, + 0x69,0x6E,0x65,0x73,0x2C,0x20,0x79,0x6F,0x75,0x20,0x73,0x68, + 0x6F,0x75,0x6C,0x64,0x20,0x75,0x73,0x65,0x45,0x68,0x65,0x78, + 0x20,0x63,0x6F,0x75,0x6E,0x74,0x69,0x6E,0x67,0x20,0x73,0x69, + 0x6E,0x63,0x65,0x20,0x74,0x68,0x65,0x72,0x65,0x20,0x61,0x72, + 0x65,0x20,0x6F,0x6E,0x6C,0x79,0x20,0x32,0x20,0x64,0x69,0x67, + 0x69,0x74,0x73,0x20,0x69,0x6E,0x20,0x74,0x68,0x65,0x20,0x6C, + 0x69,0x6E,0x65,0x20,0x6E,0x75,0x6D,0x62,0x65,0x72,0x20,0x63, + 0x6F,0x6C,0x75,0x6D,0x6E,0x2E,0x00,0x12,0x3E,0x40,0x58,0x30, + 0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x53,0x63,0x6F,0x70,0x65, + 0x73,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30, + 0x30,0x32,0x43,0x22,0x53,0x74,0x64,0x2E,0x22,0x20,0x28,0x73, + 0x74,0x61,0x6E,0x64,0x61,0x72,0x64,0x29,0x20,0x77,0x69,0x6C, + 0x6C,0x20,0x73,0x68,0x6F,0x77,0x20,0x74,0x68,0x65,0x20,0x73, + 0x61,0x6D,0x70,0x6C,0x65,0x20,0x70,0x6F,0x69,0x6E,0x74,0x73, + 0x20,0x61,0x73,0x20,0x70,0x69,0x78,0x65,0x6C,0x73,0x20,0x28, + 0x6C,0x69,0x6B,0x65,0x20,0x46,0x54,0x32,0x29,0x2E,0x3D,0x22, + 0x4C,0x69,0x6E,0x65,0x64,0x22,0x20,0x77,0x69,0x6C,0x6C,0x20, + 0x64,0x72,0x61,0x77,0x20,0x69,0x6E,0x74,0x65,0x72,0x70,0x6F, + 0x6C,0x61,0x74,0x65,0x64,0x20,0x73,0x61,0x6D,0x70,0x6C,0x65, + 0x73,0x20,0x28,0x6C,0x69,0x6E,0x65,0x61,0x72,0x20,0x69,0x6E, + 0x74,0x65,0x72,0x70,0x6F,0x6C,0x61,0x74,0x69,0x6F,0x6E,0x2E, + 0x00,0x27,0x40,0x58,0x30,0x32,0x30,0x40,0x43,0x30,0x30,0x31, + 0x43,0x6F,0x6E,0x66,0x69,0x67,0x75,0x72,0x61,0x74,0x69,0x6F, + 0x6E,0x2C,0x20,0x4D,0x69,0x73,0x63,0x65,0x6C,0x6C,0x61,0x6E, + 0x65,0x6F,0x75,0x73,0x3A,0x01,0x3E,0x15,0x3E,0x40,0x58,0x30, + 0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x56,0x53,0x79,0x6E,0x63, + 0x20,0x6F,0x66,0x66,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30, + 0x40,0x43,0x30,0x30,0x32,0x3F,0x54,0x65,0x6C,0x6C,0x73,0x20, + 0x74,0x68,0x65,0x20,0x70,0x72,0x6F,0x67,0x72,0x61,0x6D,0x20, + 0x74,0x6F,0x20,0x6E,0x6F,0x74,0x20,0x75,0x73,0x65,0x20,0x56, + 0x53,0x79,0x6E,0x63,0x20,0x66,0x6F,0x72,0x20,0x76,0x69,0x64, + 0x65,0x6F,0x2E,0x20,0x49,0x66,0x20,0x79,0x6F,0x75,0x72,0x20, + 0x6D,0x6F,0x6E,0x69,0x74,0x6F,0x72,0x27,0x73,0x40,0x72,0x65, + 0x66,0x72,0x65,0x73,0x68,0x20,0x72,0x61,0x74,0x65,0x20,0x69, + 0x73,0x20,0x6E,0x6F,0x74,0x20,0x36,0x30,0x48,0x7A,0x20,0x28, + 0x6F,0x72,0x20,0x35,0x39,0x48,0x7A,0x29,0x2C,0x20,0x74,0x68, + 0x65,0x6E,0x20,0x56,0x53,0x79,0x6E,0x63,0x20,0x69,0x73,0x20, + 0x61,0x6C,0x77,0x61,0x79,0x73,0x20,0x6F,0x66,0x66,0x20,0x66, + 0x6F,0x72,0x45,0x74,0x68,0x69,0x73,0x20,0x70,0x72,0x6F,0x67, + 0x72,0x61,0x6D,0x2E,0x20,0x4E,0x6F,0x74,0x20,0x68,0x61,0x76, + 0x69,0x6E,0x67,0x20,0x56,0x53,0x79,0x6E,0x63,0x20,0x77,0x69, + 0x6C,0x6C,0x20,0x72,0x65,0x73,0x75,0x6C,0x74,0x20,0x69,0x6E, + 0x20,0x6C,0x65,0x73,0x73,0x20,0x69,0x6E,0x70,0x75,0x74,0x2F, + 0x76,0x69,0x64,0x65,0x6F,0x20,0x64,0x65,0x6C,0x61,0x79,0x2C, + 0x1E,0x62,0x75,0x74,0x20,0x61,0x6C,0x73,0x6F,0x20,0x70,0x6F, + 0x74,0x65,0x6E,0x74,0x69,0x61,0x6C,0x20,0x73,0x74,0x75,0x74, + 0x74,0x65,0x72,0x69,0x6E,0x67,0x2E,0x00,0x15,0x3E,0x40,0x58, + 0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x53,0x74,0x72,0x65, + 0x74,0x63,0x68,0x65,0x64,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36, + 0x30,0x40,0x43,0x30,0x30,0x32,0x4A,0x4D,0x61,0x6B,0x65,0x73, 0x20,0x66,0x75,0x6C,0x6C,0x73,0x63,0x72,0x65,0x65,0x6E,0x20, - 0x6D,0x6F,0x64,0x65,0x3F,0x37,0x3E,0x40,0x43,0x30,0x30,0x32, - 0x41,0x3A,0x20,0x50,0x72,0x65,0x73,0x73,0x20,0x41,0x6C,0x74, - 0x2B,0x45,0x6E,0x74,0x65,0x72,0x20,0x28,0x43,0x74,0x72,0x6C, - 0x2B,0x43,0x6D,0x64,0x2B,0x46,0x20,0x61,0x6C,0x73,0x6F,0x20, - 0x77,0x6F,0x72,0x6B,0x73,0x20,0x6F,0x6E,0x20,0x4D,0x61,0x63, - 0x29,0x06,0x3E,0x40,0x58,0x30,0x32,0x30,0x45,0x3E,0x40,0x43, - 0x30,0x30,0x31,0x51,0x3A,0x20,0x48,0x6F,0x77,0x20,0x63,0x61, - 0x6E,0x20,0x49,0x20,0x6D,0x61,0x6B,0x65,0x20,0x66,0x75,0x6C, - 0x6C,0x73,0x63,0x72,0x65,0x65,0x6E,0x20,0x6D,0x6F,0x64,0x65, - 0x20,0x73,0x74,0x72,0x65,0x74,0x63,0x68,0x20,0x6F,0x75,0x74, - 0x20,0x74,0x68,0x65,0x20,0x77,0x68,0x6F,0x6C,0x65,0x20,0x73, - 0x63,0x72,0x65,0x65,0x6E,0x3F,0x37,0x3E,0x40,0x43,0x30,0x30, - 0x32,0x41,0x3A,0x20,0x45,0x6E,0x61,0x62,0x6C,0x65,0x20,0x22, - 0x53,0x74,0x72,0x65,0x74,0x63,0x68,0x65,0x64,0x22,0x20,0x69, - 0x6E,0x20,0x43,0x6F,0x6E,0x66,0x69,0x67,0x20,0x2D,0x3E,0x20, - 0x4D,0x69,0x73,0x63,0x65,0x6C,0x6C,0x61,0x6E,0x65,0x6F,0x75, - 0x73,0x2E,0x4E,0x3E,0x40,0x58,0x30,0x33,0x35,0x54,0x68,0x69, - 0x73,0x20,0x77,0x69,0x6C,0x6C,0x20,0x72,0x65,0x73,0x75,0x6C, - 0x74,0x20,0x69,0x6E,0x20,0x75,0x6E,0x65,0x76,0x65,0x6E,0x20, - 0x70,0x69,0x78,0x65,0x6C,0x20,0x77,0x69,0x64,0x74,0x68,0x73, - 0x2E,0x20,0x49,0x66,0x20,0x79,0x6F,0x75,0x20,0x77,0x61,0x6E, - 0x74,0x20,0x74,0x6F,0x20,0x66,0x69,0x78,0x20,0x74,0x68,0x69, - 0x73,0x2C,0x20,0x65,0x6E,0x61,0x62,0x6C,0x65,0x3D,0x22,0x50, - 0x69,0x78,0x65,0x6C,0x20,0x66,0x69,0x6C,0x74,0x65,0x72,0x22, - 0x20,0x28,0x74,0x68,0x6F,0x75,0x67,0x68,0x20,0x74,0x68,0x69, - 0x73,0x20,0x77,0x69,0x6C,0x6C,0x20,0x6D,0x61,0x6B,0x65,0x20, - 0x74,0x68,0x65,0x20,0x69,0x6D,0x61,0x67,0x65,0x20,0x6C,0x6F, - 0x6F,0x6B,0x20,0x62,0x6C,0x75,0x72,0x72,0x79,0x29,0x2E,0x06, - 0x3E,0x40,0x58,0x30,0x32,0x30,0x27,0x3E,0x40,0x43,0x30,0x30, - 0x31,0x51,0x3A,0x20,0x49,0x20,0x63,0x61,0x6E,0x27,0x74,0x20, - 0x75,0x73,0x65,0x20,0x41,0x6C,0x74,0x2B,0x46,0x34,0x20,0x61, - 0x6E,0x64,0x20,0x41,0x6C,0x74,0x2B,0x46,0x35,0x21,0x4E,0x3E, - 0x40,0x43,0x30,0x30,0x32,0x41,0x3A,0x20,0x57,0x69,0x6E,0x64, - 0x6F,0x77,0x73,0x3A,0x20,0x49,0x66,0x20,0x79,0x6F,0x75,0x20, - 0x68,0x61,0x76,0x65,0x20,0x47,0x65,0x46,0x6F,0x72,0x63,0x65, - 0x20,0x45,0x78,0x70,0x65,0x72,0x69,0x65,0x6E,0x63,0x65,0x20, - 0x69,0x6E,0x73,0x74,0x61,0x6C,0x6C,0x65,0x64,0x2C,0x20,0x79, - 0x6F,0x75,0x20,0x6E,0x65,0x65,0x64,0x20,0x74,0x6F,0x20,0x63, - 0x68,0x61,0x6E,0x67,0x65,0x2B,0x3E,0x40,0x58,0x30,0x33,0x35, - 0x74,0x68,0x65,0x20,0x6B,0x65,0x79,0x62,0x69,0x6E,0x64,0x69, - 0x6E,0x67,0x73,0x20,0x69,0x6E,0x20,0x69,0x74,0x73,0x20,0x73, - 0x65,0x74,0x74,0x69,0x6E,0x67,0x73,0x20,0x70,0x61,0x67,0x65, - 0x2E,0x57,0x3E,0x6D,0x61,0x63,0x4F,0x53,0x2F,0x4F,0x53,0x20, - 0x58,0x3A,0x20,0x43,0x68,0x61,0x6E,0x67,0x65,0x20,0x41,0x6C, - 0x74,0x2B,0x46,0x34,0x2F,0x41,0x6C,0x74,0x2B,0x46,0x35,0x20, - 0x6B,0x65,0x79,0x73,0x20,0x69,0x6E,0x20,0x74,0x68,0x65,0x20, - 0x4F,0x53,0x20,0x74,0x6F,0x20,0x73,0x6F,0x6D,0x65,0x74,0x68, - 0x69,0x6E,0x67,0x20,0x65,0x6C,0x73,0x65,0x2E,0x20,0x41,0x6C, - 0x73,0x6F,0x20,0x66,0x6F,0x72,0x20,0x47,0x4E,0x55,0x2F,0x4C, - 0x69,0x6E,0x75,0x78,0x2E,0x06,0x3E,0x40,0x58,0x30,0x32,0x30, - 0x2B,0x3E,0x40,0x43,0x30,0x30,0x31,0x51,0x3A,0x20,0x54,0x68, - 0x65,0x20,0x6D,0x6F,0x75,0x73,0x65,0x20,0x63,0x75,0x72,0x73, - 0x6F,0x72,0x20,0x69,0x73,0x20,0x64,0x65,0x6C,0x61,0x79,0x65, - 0x64,0x2F,0x6C,0x61,0x67,0x67,0x79,0x21,0x44,0x3E,0x40,0x43, - 0x30,0x30,0x32,0x41,0x3A,0x20,0x4D,0x61,0x6B,0x65,0x20,0x73, - 0x75,0x72,0x65,0x20,0x22,0x53,0x6F,0x66,0x74,0x77,0x61,0x72, - 0x65,0x20,0x6D,0x6F,0x75,0x73,0x65,0x22,0x20,0x69,0x73,0x20, - 0x64,0x69,0x73,0x61,0x62,0x6C,0x65,0x64,0x20,0x69,0x6E,0x20, - 0x43,0x6F,0x6E,0x66,0x69,0x67,0x20,0x2D,0x3E,0x20,0x4C,0x61, - 0x79,0x6F,0x75,0x74,0x2E,0x4B,0x3E,0x40,0x58,0x30,0x33,0x35, - 0x41,0x6C,0x74,0x65,0x72,0x6E,0x61,0x74,0x69,0x76,0x65,0x6C, - 0x79,0x2C,0x20,0x79,0x6F,0x75,0x20,0x63,0x61,0x6E,0x20,0x65, - 0x6E,0x61,0x62,0x6C,0x65,0x20,0x22,0x56,0x53,0x79,0x6E,0x63, - 0x20,0x6F,0x66,0x66,0x22,0x20,0x69,0x6E,0x20,0x43,0x6F,0x6E, - 0x66,0x69,0x67,0x20,0x2D,0x3E,0x20,0x4D,0x69,0x73,0x63,0x65, - 0x6C,0x6C,0x61,0x6E,0x65,0x6F,0x75,0x73,0x2E,0x46,0x3E,0x54, - 0x68,0x69,0x73,0x20,0x68,0x6F,0x77,0x65,0x76,0x65,0x72,0x2C, - 0x20,0x77,0x69,0x6C,0x6C,0x20,0x69,0x6E,0x74,0x72,0x6F,0x64, - 0x75,0x63,0x65,0x20,0x73,0x74,0x75,0x74,0x74,0x65,0x72,0x69, - 0x6E,0x67,0x20,0x62,0x65,0x63,0x61,0x75,0x73,0x65,0x20,0x74, - 0x68,0x65,0x20,0x72,0x65,0x6E,0x64,0x65,0x72,0x69,0x6E,0x67, - 0x20,0x72,0x61,0x74,0x65,0x20,0x69,0x73,0x22,0x3E,0x6E,0x6F, - 0x74,0x20,0x65,0x78,0x61,0x63,0x74,0x20,0x74,0x6F,0x20,0x79, - 0x6F,0x75,0x72,0x20,0x6D,0x6F,0x6E,0x69,0x74,0x6F,0x72,0x27, - 0x73,0x20,0x72,0x61,0x74,0x65,0x2E,0x06,0x3E,0x40,0x58,0x30, - 0x32,0x30,0x33,0x3E,0x40,0x43,0x30,0x30,0x31,0x51,0x3A,0x20, - 0x57,0x69,0x6C,0x6C,0x20,0x79,0x6F,0x75,0x20,0x69,0x6D,0x70, - 0x6C,0x65,0x6D,0x65,0x6E,0x74,0x20,0x4D,0x49,0x44,0x49,0x20, - 0x6F,0x75,0x74,0x20,0x66,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E, - 0x61,0x6C,0x69,0x74,0x79,0x3F,0x4D,0x3E,0x40,0x43,0x30,0x30, - 0x32,0x41,0x3A,0x20,0x4E,0x6F,0x2C,0x20,0x73,0x6F,0x72,0x72, - 0x79,0x2E,0x20,0x54,0x68,0x69,0x73,0x20,0x69,0x73,0x20,0x76, - 0x65,0x72,0x79,0x20,0x64,0x69,0x66,0x66,0x69,0x63,0x75,0x6C, - 0x74,0x20,0x74,0x6F,0x20,0x69,0x6D,0x70,0x6C,0x65,0x6D,0x65, - 0x6E,0x74,0x20,0x63,0x6F,0x72,0x72,0x65,0x63,0x74,0x6C,0x79, - 0x20,0x77,0x68,0x65,0x6E,0x20,0x68,0x61,0x76,0x69,0x6E,0x67, - 0x3C,0x3E,0x40,0x58,0x30,0x33,0x35,0x68,0x69,0x67,0x68,0x65, - 0x72,0x20,0x61,0x75,0x64,0x69,0x6F,0x20,0x62,0x75,0x66,0x66, - 0x65,0x72,0x20,0x73,0x69,0x7A,0x65,0x73,0x20,0x28,0x62,0x75, - 0x66,0x66,0x65,0x72,0x65,0x64,0x20,0x72,0x65,0x70,0x6C,0x61, - 0x79,0x65,0x72,0x20,0x74,0x69,0x63,0x6B,0x73,0x29,0x2E,0x2E, - 0x2E,0x06,0x3E,0x40,0x58,0x30,0x32,0x30,0x30,0x3E,0x40,0x43, - 0x30,0x30,0x31,0x51,0x3A,0x20,0x57,0x68,0x65,0x72,0x65,0x20, - 0x69,0x73,0x20,0x74,0x68,0x65,0x20,0x63,0x6F,0x6E,0x66,0x69, - 0x67,0x75,0x72,0x61,0x74,0x69,0x6F,0x6E,0x20,0x66,0x69,0x6C, - 0x65,0x20,0x73,0x74,0x6F,0x72,0x65,0x64,0x3F,0x3F,0x3E,0x40, - 0x43,0x30,0x30,0x32,0x41,0x3A,0x20,0x57,0x69,0x6E,0x64,0x6F, - 0x77,0x73,0x3A,0x20,0x5C,0x55,0x73,0x65,0x72,0x73,0x5C,0x55, - 0x53,0x45,0x52,0x5C,0x41,0x70,0x70,0x44,0x61,0x74,0x61,0x5C, - 0x52,0x6F,0x61,0x6D,0x69,0x6E,0x67,0x5C,0x46,0x54,0x32,0x20, - 0x63,0x6C,0x6F,0x6E,0x65,0x5C,0x46,0x54,0x32,0x2E,0x43,0x46, - 0x47,0x45,0x3E,0x40,0x58,0x30,0x33,0x35,0x4F,0x53,0x20,0x58, - 0x3A,0x20,0x2F,0x55,0x73,0x65,0x72,0x73,0x2F,0x55,0x53,0x45, - 0x52,0x2F,0x4C,0x69,0x62,0x72,0x61,0x72,0x79,0x2F,0x41,0x70, - 0x70,0x6C,0x69,0x63,0x61,0x74,0x69,0x6F,0x6E,0x20,0x53,0x75, - 0x70,0x70,0x6F,0x72,0x74,0x2F,0x46,0x54,0x32,0x20,0x63,0x6C, - 0x6F,0x6E,0x65,0x2F,0x46,0x54,0x32,0x2E,0x43,0x46,0x47,0x2F, - 0x47,0x4E,0x55,0x2F,0x4C,0x69,0x6E,0x75,0x78,0x3A,0x20,0x2F, - 0x68,0x6F,0x6D,0x65,0x2F,0x55,0x53,0x45,0x52,0x2F,0x2E,0x63, - 0x6F,0x6E,0x66,0x69,0x67,0x2F,0x46,0x54,0x32,0x20,0x63,0x6C, - 0x6F,0x6E,0x65,0x2F,0x46,0x54,0x32,0x2E,0x43,0x46,0x47,0x01, - 0x3E,0x48,0x49,0x74,0x20,0x77,0x69,0x6C,0x6C,0x20,0x62,0x65, - 0x20,0x73,0x74,0x6F,0x72,0x65,0x64,0x20,0x69,0x6E,0x20,0x74, - 0x68,0x65,0x20,0x70,0x72,0x6F,0x67,0x72,0x61,0x6D,0x20,0x64, - 0x69,0x72,0x65,0x63,0x74,0x6F,0x72,0x79,0x20,0x69,0x66,0x20, - 0x74,0x68,0x65,0x20,0x70,0x61,0x74,0x68,0x20,0x63,0x6F,0x75, - 0x6C,0x64,0x6E,0x27,0x74,0x20,0x62,0x65,0x20,0x75,0x73,0x65, - 0x64,0x2E,0x4D,0x49,0x66,0x20,0x79,0x6F,0x75,0x20,0x70,0x75, - 0x74,0x20,0x74,0x68,0x65,0x20,0x63,0x6F,0x6E,0x66,0x69,0x67, - 0x75,0x72,0x61,0x74,0x69,0x6F,0x6E,0x20,0x66,0x69,0x6C,0x65, - 0x20,0x69,0x6E,0x20,0x74,0x68,0x65,0x20,0x70,0x72,0x6F,0x67, - 0x72,0x61,0x6D,0x20,0x64,0x69,0x72,0x65,0x63,0x74,0x6F,0x72, - 0x79,0x2C,0x20,0x69,0x74,0x20,0x77,0x69,0x6C,0x6C,0x20,0x72, - 0x65,0x61,0x64,0x20,0x74,0x68,0x61,0x74,0x4A,0x6F,0x6E,0x65, - 0x20,0x61,0x6E,0x64,0x20,0x6E,0x6F,0x74,0x20,0x61,0x74,0x74, - 0x65,0x6D,0x70,0x74,0x20,0x74,0x6F,0x20,0x63,0x72,0x65,0x61, - 0x74,0x65,0x20,0x63,0x6F,0x6E,0x66,0x69,0x67,0x20,0x64,0x69, - 0x72,0x73,0x20,0x66,0x6F,0x72,0x20,0x74,0x68,0x65,0x20,0x4F, - 0x53,0x20,0x75,0x73,0x65,0x72,0x2E,0x20,0x28,0x70,0x6F,0x72, - 0x74,0x61,0x62,0x6C,0x65,0x20,0x6D,0x6F,0x64,0x65,0x29,0x06, - 0x3E,0x40,0x58,0x30,0x32,0x30,0x42,0x3E,0x40,0x43,0x30,0x30, - 0x31,0x51,0x3A,0x20,0x43,0x61,0x6E,0x20,0x74,0x68,0x65,0x20, - 0x63,0x6C,0x6F,0x6E,0x65,0x20,0x72,0x65,0x61,0x64,0x20,0x46, - 0x54,0x32,0x2E,0x43,0x46,0x47,0x20,0x66,0x72,0x6F,0x6D,0x20, - 0x72,0x65,0x61,0x6C,0x20,0x46,0x54,0x32,0x2C,0x20,0x61,0x6E, - 0x64,0x20,0x76,0x69,0x63,0x65,0x20,0x76,0x65,0x72,0x73,0x61, - 0x3F,0x4C,0x3E,0x40,0x43,0x30,0x30,0x32,0x41,0x3A,0x20,0x59, - 0x65,0x73,0x2C,0x20,0x69,0x74,0x20,0x73,0x68,0x6F,0x75,0x6C, - 0x64,0x20,0x77,0x6F,0x72,0x6B,0x20,0x6A,0x75,0x73,0x74,0x20, - 0x66,0x69,0x6E,0x65,0x2E,0x20,0x50,0x75,0x74,0x20,0x69,0x74, - 0x20,0x69,0x6E,0x20,0x74,0x68,0x65,0x20,0x64,0x69,0x72,0x65, - 0x63,0x74,0x6F,0x72,0x79,0x20,0x73,0x68,0x6F,0x77,0x6E,0x20, - 0x61,0x62,0x6F,0x76,0x65,0x2E,0x06,0x3E,0x40,0x58,0x30,0x32, - 0x30,0x51,0x3E,0x40,0x43,0x30,0x30,0x31,0x51,0x3A,0x20,0x53, - 0x6D,0x70,0x2E,0x20,0x45,0x64,0x2E,0x3A,0x20,0x57,0x68,0x69, - 0x6C,0x65,0x20,0x7A,0x6F,0x6F,0x6D,0x65,0x64,0x20,0x69,0x6E, - 0x2C,0x20,0x49,0x20,0x73,0x6F,0x6D,0x65,0x74,0x69,0x6D,0x65, - 0x73,0x20,0x63,0x61,0x6E,0x27,0x74,0x20,0x6D,0x61,0x72,0x6B, - 0x20,0x74,0x68,0x65,0x20,0x6C,0x61,0x73,0x74,0x20,0x73,0x61, - 0x6D,0x70,0x6C,0x65,0x20,0x70,0x6F,0x69,0x6E,0x74,0x21,0x47, - 0x3E,0x40,0x43,0x30,0x30,0x32,0x41,0x3A,0x20,0x54,0x68,0x69, - 0x73,0x20,0x69,0x73,0x20,0x6E,0x6F,0x72,0x6D,0x61,0x6C,0x2E, - 0x20,0x54,0x68,0x69,0x73,0x20,0x69,0x73,0x20,0x61,0x20,0x6C, - 0x69,0x6D,0x69,0x74,0x61,0x74,0x69,0x6F,0x6E,0x20,0x69,0x6E, - 0x20,0x74,0x68,0x65,0x20,0x6E,0x61,0x74,0x75,0x72,0x65,0x20, - 0x6F,0x66,0x20,0x73,0x63,0x61,0x6C,0x69,0x6E,0x67,0x2E,0x06, - 0x3E,0x40,0x58,0x30,0x32,0x30,0x17,0x3E,0x40,0x43,0x30,0x30, - 0x31,0x51,0x3A,0x20,0x49,0x20,0x66,0x6F,0x75,0x6E,0x64,0x20, - 0x61,0x20,0x62,0x75,0x67,0x21,0x4C,0x3E,0x40,0x43,0x30,0x30, - 0x32,0x41,0x3A,0x20,0x50,0x6C,0x65,0x61,0x73,0x65,0x20,0x73, - 0x65,0x6E,0x64,0x20,0x6D,0x65,0x20,0x61,0x20,0x6D,0x61,0x69, - 0x6C,0x20,0x28,0x66,0x6F,0x75,0x6E,0x64,0x20,0x61,0x74,0x20, - 0x31,0x36,0x2D,0x62,0x69,0x74,0x73,0x2E,0x6F,0x72,0x67,0x29, - 0x20,0x61,0x6E,0x64,0x20,0x74,0x72,0x79,0x20,0x74,0x6F,0x20, - 0x65,0x78,0x70,0x6C,0x61,0x69,0x6E,0x20,0x69,0x74,0x2E,0x00, + 0x6D,0x6F,0x64,0x65,0x20,0x63,0x6F,0x6D,0x70,0x6C,0x65,0x74, + 0x65,0x6C,0x79,0x20,0x73,0x74,0x72,0x65,0x74,0x63,0x68,0x20, + 0x6F,0x75,0x74,0x20,0x74,0x68,0x65,0x20,0x69,0x6D,0x61,0x67, + 0x65,0x2E,0x20,0x54,0x68,0x69,0x73,0x20,0x63,0x61,0x6E,0x20, + 0x72,0x65,0x73,0x75,0x6C,0x74,0x20,0x69,0x6E,0x4E,0x61,0x6C, + 0x69,0x61,0x73,0x69,0x6E,0x67,0x20,0x28,0x75,0x6E,0x65,0x76, + 0x65,0x6E,0x20,0x70,0x69,0x78,0x65,0x6C,0x20,0x77,0x69,0x64, + 0x74,0x68,0x73,0x29,0x20,0x69,0x66,0x20,0x74,0x68,0x65,0x20, + 0x61,0x73,0x70,0x65,0x63,0x74,0x20,0x72,0x61,0x74,0x69,0x6F, + 0x20,0x6F,0x66,0x20,0x74,0x68,0x65,0x20,0x73,0x63,0x72,0x65, + 0x65,0x6E,0x20,0x69,0x73,0x20,0x6E,0x6F,0x74,0x20,0x31,0x36, + 0x3A,0x31,0x30,0x2E,0x52,0x54,0x68,0x65,0x20,0x22,0x50,0x69, + 0x78,0x65,0x6C,0x20,0x66,0x69,0x6C,0x74,0x65,0x72,0x22,0x20, + 0x73,0x65,0x74,0x74,0x69,0x6E,0x67,0x20,0x63,0x61,0x6E,0x20, + 0x68,0x65,0x6C,0x70,0x20,0x77,0x69,0x74,0x68,0x20,0x74,0x68, + 0x69,0x73,0x2C,0x20,0x62,0x75,0x74,0x20,0x69,0x74,0x20,0x6D, + 0x61,0x6B,0x65,0x73,0x20,0x74,0x68,0x65,0x20,0x69,0x6D,0x61, + 0x67,0x65,0x20,0x6C,0x6F,0x6F,0x6B,0x20,0x62,0x6C,0x75,0x72, + 0x72,0x79,0x2E,0x01,0x20,0x18,0x3E,0x40,0x58,0x30,0x34,0x30, + 0x40,0x43,0x30,0x30,0x31,0x50,0x69,0x78,0x65,0x6C,0x20,0x66, + 0x69,0x6C,0x74,0x65,0x72,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36, + 0x30,0x40,0x43,0x30,0x30,0x32,0x52,0x41,0x70,0x70,0x6C,0x69, + 0x65,0x73,0x20,0x61,0x6E,0x20,0x61,0x6E,0x74,0x69,0x2D,0x61, + 0x6C,0x69,0x61,0x73,0x69,0x6E,0x67,0x20,0x73,0x75,0x62,0x70, + 0x69,0x78,0x65,0x6C,0x20,0x66,0x69,0x6C,0x74,0x65,0x72,0x20, + 0x74,0x68,0x61,0x74,0x20,0x69,0x73,0x20,0x75,0x73,0x65,0x64, + 0x20,0x77,0x68,0x65,0x6E,0x20,0x74,0x68,0x65,0x20,0x77,0x69, + 0x6E,0x64,0x6F,0x77,0x20,0x69,0x73,0x20,0x75,0x70,0x73,0x63, + 0x61,0x6C,0x65,0x64,0x2E,0x3B,0x50,0x6C,0x65,0x61,0x73,0x65, + 0x20,0x6B,0x65,0x65,0x70,0x20,0x69,0x6E,0x20,0x6D,0x69,0x6E, + 0x64,0x20,0x74,0x68,0x61,0x74,0x20,0x74,0x68,0x69,0x73,0x20, + 0x77,0x69,0x6C,0x6C,0x20,0x6D,0x61,0x6B,0x65,0x20,0x70,0x69, + 0x78,0x65,0x6C,0x73,0x20,0x6C,0x6F,0x6F,0x6B,0x20,0x62,0x6C, + 0x75,0x72,0x72,0x79,0x2E,0x00,0x23,0x40,0x58,0x30,0x32,0x30, + 0x40,0x43,0x30,0x30,0x31,0x41,0x64,0x76,0x61,0x6E,0x63,0x65, + 0x64,0x20,0x65,0x64,0x69,0x74,0x20,0x66,0x75,0x6E,0x63,0x74, + 0x69,0x6F,0x6E,0x73,0x3A,0x20,0x01,0x3E,0x1E,0x3E,0x40,0x58, + 0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x43,0x6F,0x70,0x79, + 0x2F,0x50,0x61,0x73,0x74,0x65,0x20,0x6D,0x61,0x73,0x6B,0x69, + 0x6E,0x67,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43, + 0x30,0x30,0x32,0x37,0x54,0x68,0x65,0x20,0x6D,0x61,0x73,0x6B, + 0x69,0x6E,0x67,0x20,0x69,0x73,0x20,0x75,0x73,0x65,0x64,0x20, + 0x66,0x6F,0x72,0x20,0x63,0x6F,0x70,0x79,0x69,0x6E,0x67,0x2F, + 0x70,0x61,0x73,0x74,0x69,0x6E,0x67,0x20,0x6F,0x6E,0x6C,0x79, + 0x20,0x70,0x61,0x72,0x74,0x73,0x20,0x6F,0x66,0x20,0x61,0x46, + 0x22,0x6E,0x6F,0x74,0x65,0x2D,0x63,0x65,0x6C,0x6C,0x22,0x2E, + 0x20,0x54,0x68,0x65,0x20,0x64,0x69,0x66,0x66,0x65,0x72,0x65, + 0x6E,0x74,0x20,0x70,0x61,0x72,0x74,0x73,0x20,0x6F,0x66,0x20, + 0x61,0x20,0x22,0x6E,0x6F,0x74,0x65,0x2D,0x63,0x65,0x6C,0x6C, + 0x22,0x20,0x69,0x73,0x20,0x4E,0x6F,0x74,0x65,0x2C,0x20,0x49, + 0x6E,0x73,0x74,0x72,0x2E,0x20,0x6E,0x72,0x2E,0x2C,0x20,0x56, + 0x6F,0x6C,0x75,0x6D,0x65,0x2C,0x20,0x45,0x66,0x66,0x65,0x63, + 0x74,0x20,0x6E,0x72,0x20,0x26,0x20,0x45,0x66,0x66,0x65,0x63, + 0x74,0x20,0x64,0x61,0x74,0x61,0x2E,0x34,0x3E,0x41,0x73,0x20, + 0x79,0x6F,0x75,0x20,0x63,0x61,0x6E,0x20,0x73,0x65,0x65,0x20, + 0x69,0x6E,0x20,0x74,0x68,0x65,0x20,0x77,0x69,0x6E,0x64,0x6F, + 0x77,0x20,0x74,0x68,0x65,0x72,0x65,0x20,0x61,0x72,0x65,0x20, + 0x33,0x20,0x63,0x6F,0x6C,0x75,0x6D,0x6E,0x73,0x20,0x6F,0x66, + 0x3D,0x22,0x65,0x6E,0x61,0x62,0x6C,0x65,0x2F,0x64,0x69,0x73, + 0x61,0x62,0x6C,0x65,0x20,0x62,0x75,0x74,0x74,0x6F,0x6E,0x73, + 0x22,0x20,0x77,0x68,0x69,0x63,0x68,0x20,0x68,0x61,0x73,0x20, + 0x74,0x68,0x65,0x20,0x6C,0x65,0x74,0x74,0x65,0x72,0x73,0x20, + 0x43,0x2C,0x50,0x20,0x26,0x20,0x54,0x20,0x61,0x62,0x6F,0x76, + 0x65,0x2E,0x45,0x3E,0x43,0x20,0x6D,0x65,0x61,0x6E,0x73,0x20, + 0x63,0x6F,0x70,0x79,0x2C,0x20,0x69,0x74,0x20,0x63,0x6F,0x6E, + 0x74,0x72,0x6F,0x6C,0x73,0x20,0x77,0x68,0x69,0x63,0x68,0x20, + 0x70,0x61,0x72,0x74,0x73,0x20,0x74,0x68,0x61,0x74,0x20,0x67, + 0x6F,0x65,0x73,0x20,0x69,0x6E,0x74,0x6F,0x20,0x74,0x68,0x65, + 0x20,0x63,0x6F,0x70,0x79,0x62,0x75,0x66,0x66,0x65,0x72,0x2E, + 0x3E,0x3E,0x50,0x20,0x6D,0x65,0x61,0x6E,0x73,0x20,0x70,0x61, + 0x73,0x74,0x65,0x20,0x61,0x6E,0x64,0x20,0x63,0x6F,0x6E,0x74, + 0x72,0x6F,0x6C,0x73,0x20,0x77,0x68,0x69,0x63,0x68,0x20,0x70, + 0x61,0x72,0x74,0x73,0x20,0x74,0x68,0x61,0x74,0x20,0x67,0x6F, + 0x65,0x73,0x20,0x6F,0x75,0x74,0x20,0x66,0x72,0x6F,0x6D,0x20, + 0x74,0x68,0x65,0x0B,0x63,0x6F,0x70,0x79,0x62,0x75,0x66,0x66, + 0x65,0x72,0x2E,0x45,0x3E,0x54,0x20,0x6D,0x65,0x61,0x6E,0x73, + 0x20,0x74,0x72,0x61,0x6E,0x73,0x70,0x61,0x72,0x65,0x6E,0x63, + 0x79,0x2E,0x20,0x49,0x66,0x20,0x69,0x74,0x27,0x73,0x20,0x65, + 0x6E,0x61,0x62,0x6C,0x65,0x64,0x2C,0x20,0x74,0x68,0x65,0x20, + 0x70,0x61,0x73,0x74,0x69,0x6E,0x67,0x20,0x64,0x6F,0x65,0x73, + 0x6E,0x27,0x74,0x20,0x6F,0x76,0x65,0x72,0x77,0x72,0x69,0x74, + 0x65,0x3D,0x64,0x61,0x74,0x61,0x20,0x77,0x69,0x74,0x68,0x20, + 0x6E,0x69,0x6C,0x2D,0x69,0x6E,0x66,0x6F,0x72,0x6D,0x61,0x74, + 0x69,0x6F,0x6E,0x2C,0x20,0x6F,0x6E,0x6C,0x79,0x20,0x77,0x69, + 0x74,0x68,0x20,0x61,0x20,0x6E,0x6F,0x74,0x65,0x20,0x6F,0x72, + 0x20,0x61,0x20,0x6E,0x75,0x6D,0x62,0x65,0x72,0x20,0x3C,0x3E, + 0x20,0x30,0x2E,0x01,0x3E,0x40,0x3E,0x54,0x68,0x65,0x20,0x63, + 0x75,0x74,0x20,0x66,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x73, + 0x20,0x77,0x6F,0x72,0x6B,0x73,0x20,0x6C,0x69,0x6B,0x65,0x20, + 0x70,0x61,0x73,0x74,0x69,0x6E,0x67,0x20,0x77,0x69,0x74,0x68, + 0x20,0x7A,0x65,0x72,0x6F,0x2D,0x64,0x61,0x74,0x61,0x2E,0x20, + 0x54,0x68,0x69,0x73,0x20,0x6D,0x65,0x61,0x6E,0x73,0x3B,0x74, + 0x68,0x61,0x74,0x20,0x74,0x68,0x65,0x20,0x63,0x75,0x74,0x74, + 0x69,0x6E,0x67,0x20,0x69,0x73,0x20,0x63,0x6F,0x6E,0x74,0x72, + 0x6F,0x6C,0x6C,0x65,0x64,0x20,0x77,0x69,0x74,0x68,0x20,0x50, + 0x2D,0x63,0x6F,0x6C,0x75,0x6D,0x6E,0x20,0x28,0x6F,0x72,0x20, + 0x54,0x2D,0x63,0x6F,0x6C,0x75,0x6D,0x6E,0x29,0x2E,0x3C,0x3E, + 0x57,0x68,0x65,0x6E,0x20,0x79,0x6F,0x75,0x20,0x63,0x6F,0x70, + 0x79,0x20,0x64,0x61,0x74,0x61,0x20,0x77,0x69,0x74,0x68,0x20, + 0x6D,0x61,0x73,0x6B,0x69,0x6E,0x67,0x2C,0x20,0x74,0x68,0x65, + 0x20,0x64,0x69,0x73,0x61,0x62,0x6C,0x65,0x64,0x20,0x70,0x61, + 0x72,0x74,0x73,0x20,0x61,0x72,0x65,0x20,0x6E,0x6F,0x74,0x43, + 0x63,0x6C,0x65,0x61,0x72,0x65,0x64,0x20,0x69,0x6E,0x20,0x74, + 0x68,0x65,0x20,0x63,0x6F,0x70,0x79,0x62,0x75,0x66,0x66,0x65, + 0x72,0x2E,0x20,0x28,0x4D,0x61,0x6B,0x69,0x6E,0x67,0x20,0x69, + 0x74,0x20,0x70,0x6F,0x73,0x73,0x69,0x62,0x6C,0x65,0x20,0x74, + 0x6F,0x20,0x63,0x6F,0x6C,0x6C,0x65,0x63,0x74,0x20,0x64,0x61, + 0x74,0x61,0x20,0x66,0x72,0x6F,0x6D,0x27,0x73,0x65,0x76,0x65, + 0x72,0x61,0x6C,0x20,0x6C,0x6F,0x63,0x61,0x74,0x69,0x6F,0x6E, + 0x73,0x20,0x69,0x6E,0x74,0x6F,0x20,0x74,0x68,0x65,0x20,0x63, + 0x6F,0x70,0x79,0x62,0x75,0x66,0x66,0x65,0x72,0x2E,0x29,0x00, 0x03,0x45,0x4E,0x44,0x4C,0x3B,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A, 0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A, 0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A, @@ -2277,49 +2114,233 @@ const uint8_t helpData[27755] = 0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A, 0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A, 0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A, - 0x2A,0x2A,0x0C,0x40,0x4C,0x4B,0x6E,0x6F,0x77,0x6E,0x20,0x62, - 0x75,0x67,0x73,0x01,0x3E,0x31,0x3E,0x40,0x58,0x30,0x31,0x30, - 0x40,0x43,0x30,0x30,0x31,0x57,0x41,0x56,0x20,0x65,0x78,0x70, - 0x6F,0x72,0x74,0x69,0x6E,0x67,0x20,0x28,0x72,0x65,0x6E,0x64, - 0x65,0x72,0x69,0x6E,0x67,0x20,0x73,0x6F,0x6E,0x67,0x20,0x74, - 0x6F,0x20,0x57,0x41,0x56,0x29,0x3A,0x01,0x3E,0x55,0x3E,0x40, - 0x58,0x30,0x31,0x30,0x40,0x43,0x30,0x30,0x32,0x2D,0x20,0x53, - 0x6F,0x6E,0x67,0x73,0x20,0x74,0x68,0x61,0x74,0x20,0x6A,0x75, - 0x6D,0x70,0x20,0x62,0x61,0x63,0x6B,0x20,0x74,0x6F,0x20,0x61, - 0x20,0x70,0x72,0x65,0x76,0x69,0x6F,0x75,0x73,0x20,0x70,0x61, - 0x74,0x74,0x65,0x72,0x6E,0x20,0x77,0x69,0x6C,0x6C,0x20,0x72, - 0x65,0x6E,0x64,0x65,0x72,0x20,0x66,0x6F,0x72,0x65,0x76,0x65, - 0x72,0x20,0x61,0x6E,0x64,0x20,0x65,0x76,0x65,0x72,0x2C,0x4D, - 0x3E,0x40,0x58,0x30,0x32,0x31,0x61,0x6E,0x64,0x20,0x79,0x6F, - 0x75,0x20,0x6E,0x65,0x65,0x64,0x20,0x74,0x6F,0x20,0x70,0x72, - 0x65,0x73,0x73,0x20,0x61,0x20,0x6B,0x65,0x79,0x20,0x6F,0x72, - 0x20,0x63,0x6C,0x69,0x63,0x6B,0x20,0x74,0x68,0x65,0x20,0x6D, - 0x6F,0x75,0x73,0x65,0x20,0x74,0x6F,0x20,0x61,0x62,0x6F,0x72, - 0x74,0x20,0x74,0x68,0x65,0x20,0x72,0x65,0x6E,0x64,0x65,0x72, - 0x20,0x77,0x68,0x65,0x6E,0x15,0x3E,0x40,0x58,0x30,0x32,0x31, - 0x79,0x6F,0x75,0x20,0x77,0x61,0x6E,0x74,0x20,0x69,0x74,0x20, - 0x74,0x6F,0x2E,0x01,0x3E,0x11,0x3E,0x40,0x58,0x30,0x31,0x30, - 0x40,0x43,0x30,0x30,0x31,0x56,0x69,0x64,0x65,0x6F,0x3A,0x06, - 0x3E,0x40,0x43,0x30,0x30,0x32,0x50,0x3E,0x40,0x58,0x30,0x31, - 0x30,0x2D,0x20,0x46,0x75,0x6C,0x6C,0x73,0x63,0x72,0x65,0x65, - 0x6E,0x20,0x6D,0x6F,0x64,0x65,0x20,0x63,0x61,0x6E,0x20,0x62, - 0x65,0x20,0x75,0x6E,0x62,0x65,0x61,0x72,0x61,0x62,0x6C,0x79, - 0x20,0x73,0x6C,0x6F,0x77,0x20,0x6F,0x6E,0x20,0x61,0x20,0x52, - 0x61,0x73,0x70,0x62,0x65,0x72,0x72,0x79,0x20,0x50,0x69,0x20, - 0x28,0x65,0x76,0x65,0x6E,0x20,0x6F,0x6E,0x20,0x52,0x50,0x69, - 0x20,0x34,0x29,0x4A,0x3E,0x40,0x58,0x30,0x31,0x30,0x2D,0x20, - 0x46,0x75,0x6C,0x6C,0x73,0x63,0x72,0x65,0x65,0x6E,0x20,0x6D, - 0x6F,0x64,0x65,0x20,0x63,0x61,0x6E,0x20,0x68,0x61,0x76,0x65, - 0x20,0x73,0x65,0x76,0x65,0x72,0x61,0x6C,0x20,0x70,0x72,0x6F, - 0x62,0x6C,0x65,0x6D,0x73,0x20,0x6F,0x6E,0x20,0x6D,0x75,0x6C, - 0x74,0x69,0x2D,0x6D,0x6F,0x6E,0x69,0x74,0x6F,0x72,0x20,0x73, - 0x79,0x73,0x74,0x65,0x6D,0x73,0x47,0x3E,0x40,0x58,0x30,0x31, - 0x30,0x2D,0x20,0x46,0x75,0x6C,0x6C,0x73,0x63,0x72,0x65,0x65, - 0x6E,0x20,0x6D,0x6F,0x64,0x65,0x20,0x63,0x61,0x6E,0x20,0x68, - 0x61,0x76,0x65,0x20,0x73,0x65,0x76,0x65,0x72,0x61,0x6C,0x20, - 0x70,0x72,0x6F,0x62,0x6C,0x65,0x6D,0x73,0x20,0x6F,0x6E,0x20, - 0x73,0x6F,0x6D,0x65,0x20,0x4C,0x69,0x6E,0x75,0x78,0x20,0x73, - 0x79,0x73,0x74,0x65,0x6D,0x73,0x00,0x03,0x45,0x4E,0x44 + 0x2A,0x2A,0x0E,0x40,0x4C,0x50,0x72,0x6F,0x62,0x6C,0x65,0x6D, + 0x73,0x2F,0x46,0x41,0x51,0x06,0x3E,0x40,0x58,0x30,0x32,0x30, + 0x2A,0x3E,0x40,0x43,0x30,0x30,0x31,0x51,0x3A,0x20,0x48,0x6F, + 0x77,0x20,0x63,0x61,0x6E,0x20,0x49,0x20,0x74,0x6F,0x67,0x67, + 0x6C,0x65,0x20,0x66,0x75,0x6C,0x6C,0x73,0x63,0x72,0x65,0x65, + 0x6E,0x20,0x6D,0x6F,0x64,0x65,0x3F,0x37,0x3E,0x40,0x43,0x30, + 0x30,0x32,0x41,0x3A,0x20,0x50,0x72,0x65,0x73,0x73,0x20,0x41, + 0x6C,0x74,0x2B,0x45,0x6E,0x74,0x65,0x72,0x20,0x28,0x43,0x74, + 0x72,0x6C,0x2B,0x43,0x6D,0x64,0x2B,0x46,0x20,0x61,0x6C,0x73, + 0x6F,0x20,0x77,0x6F,0x72,0x6B,0x73,0x20,0x6F,0x6E,0x20,0x4D, + 0x61,0x63,0x29,0x06,0x3E,0x40,0x58,0x30,0x32,0x30,0x45,0x3E, + 0x40,0x43,0x30,0x30,0x31,0x51,0x3A,0x20,0x48,0x6F,0x77,0x20, + 0x63,0x61,0x6E,0x20,0x49,0x20,0x6D,0x61,0x6B,0x65,0x20,0x66, + 0x75,0x6C,0x6C,0x73,0x63,0x72,0x65,0x65,0x6E,0x20,0x6D,0x6F, + 0x64,0x65,0x20,0x73,0x74,0x72,0x65,0x74,0x63,0x68,0x20,0x6F, + 0x75,0x74,0x20,0x74,0x68,0x65,0x20,0x77,0x68,0x6F,0x6C,0x65, + 0x20,0x73,0x63,0x72,0x65,0x65,0x6E,0x3F,0x37,0x3E,0x40,0x43, + 0x30,0x30,0x32,0x41,0x3A,0x20,0x45,0x6E,0x61,0x62,0x6C,0x65, + 0x20,0x22,0x53,0x74,0x72,0x65,0x74,0x63,0x68,0x65,0x64,0x22, + 0x20,0x69,0x6E,0x20,0x43,0x6F,0x6E,0x66,0x69,0x67,0x20,0x2D, + 0x3E,0x20,0x4D,0x69,0x73,0x63,0x65,0x6C,0x6C,0x61,0x6E,0x65, + 0x6F,0x75,0x73,0x2E,0x4E,0x3E,0x40,0x58,0x30,0x33,0x35,0x54, + 0x68,0x69,0x73,0x20,0x77,0x69,0x6C,0x6C,0x20,0x72,0x65,0x73, + 0x75,0x6C,0x74,0x20,0x69,0x6E,0x20,0x75,0x6E,0x65,0x76,0x65, + 0x6E,0x20,0x70,0x69,0x78,0x65,0x6C,0x20,0x77,0x69,0x64,0x74, + 0x68,0x73,0x2E,0x20,0x49,0x66,0x20,0x79,0x6F,0x75,0x20,0x77, + 0x61,0x6E,0x74,0x20,0x74,0x6F,0x20,0x66,0x69,0x78,0x20,0x74, + 0x68,0x69,0x73,0x2C,0x20,0x65,0x6E,0x61,0x62,0x6C,0x65,0x3D, + 0x22,0x50,0x69,0x78,0x65,0x6C,0x20,0x66,0x69,0x6C,0x74,0x65, + 0x72,0x22,0x20,0x28,0x74,0x68,0x6F,0x75,0x67,0x68,0x20,0x74, + 0x68,0x69,0x73,0x20,0x77,0x69,0x6C,0x6C,0x20,0x6D,0x61,0x6B, + 0x65,0x20,0x74,0x68,0x65,0x20,0x69,0x6D,0x61,0x67,0x65,0x20, + 0x6C,0x6F,0x6F,0x6B,0x20,0x62,0x6C,0x75,0x72,0x72,0x79,0x29, + 0x2E,0x06,0x3E,0x40,0x58,0x30,0x32,0x30,0x27,0x3E,0x40,0x43, + 0x30,0x30,0x31,0x51,0x3A,0x20,0x49,0x20,0x63,0x61,0x6E,0x27, + 0x74,0x20,0x75,0x73,0x65,0x20,0x41,0x6C,0x74,0x2B,0x46,0x34, + 0x20,0x61,0x6E,0x64,0x20,0x41,0x6C,0x74,0x2B,0x46,0x35,0x21, + 0x4E,0x3E,0x40,0x43,0x30,0x30,0x32,0x41,0x3A,0x20,0x57,0x69, + 0x6E,0x64,0x6F,0x77,0x73,0x3A,0x20,0x49,0x66,0x20,0x79,0x6F, + 0x75,0x20,0x68,0x61,0x76,0x65,0x20,0x47,0x65,0x46,0x6F,0x72, + 0x63,0x65,0x20,0x45,0x78,0x70,0x65,0x72,0x69,0x65,0x6E,0x63, + 0x65,0x20,0x69,0x6E,0x73,0x74,0x61,0x6C,0x6C,0x65,0x64,0x2C, + 0x20,0x79,0x6F,0x75,0x20,0x6E,0x65,0x65,0x64,0x20,0x74,0x6F, + 0x20,0x63,0x68,0x61,0x6E,0x67,0x65,0x2B,0x3E,0x40,0x58,0x30, + 0x33,0x35,0x74,0x68,0x65,0x20,0x6B,0x65,0x79,0x62,0x69,0x6E, + 0x64,0x69,0x6E,0x67,0x73,0x20,0x69,0x6E,0x20,0x69,0x74,0x73, + 0x20,0x73,0x65,0x74,0x74,0x69,0x6E,0x67,0x73,0x20,0x70,0x61, + 0x67,0x65,0x2E,0x57,0x3E,0x6D,0x61,0x63,0x4F,0x53,0x2F,0x4F, + 0x53,0x20,0x58,0x3A,0x20,0x43,0x68,0x61,0x6E,0x67,0x65,0x20, + 0x41,0x6C,0x74,0x2B,0x46,0x34,0x2F,0x41,0x6C,0x74,0x2B,0x46, + 0x35,0x20,0x6B,0x65,0x79,0x73,0x20,0x69,0x6E,0x20,0x74,0x68, + 0x65,0x20,0x4F,0x53,0x20,0x74,0x6F,0x20,0x73,0x6F,0x6D,0x65, + 0x74,0x68,0x69,0x6E,0x67,0x20,0x65,0x6C,0x73,0x65,0x2E,0x20, + 0x41,0x6C,0x73,0x6F,0x20,0x66,0x6F,0x72,0x20,0x47,0x4E,0x55, + 0x2F,0x4C,0x69,0x6E,0x75,0x78,0x2E,0x06,0x3E,0x40,0x58,0x30, + 0x32,0x30,0x2B,0x3E,0x40,0x43,0x30,0x30,0x31,0x51,0x3A,0x20, + 0x54,0x68,0x65,0x20,0x6D,0x6F,0x75,0x73,0x65,0x20,0x63,0x75, + 0x72,0x73,0x6F,0x72,0x20,0x69,0x73,0x20,0x64,0x65,0x6C,0x61, + 0x79,0x65,0x64,0x2F,0x6C,0x61,0x67,0x67,0x79,0x21,0x44,0x3E, + 0x40,0x43,0x30,0x30,0x32,0x41,0x3A,0x20,0x4D,0x61,0x6B,0x65, + 0x20,0x73,0x75,0x72,0x65,0x20,0x22,0x53,0x6F,0x66,0x74,0x77, + 0x61,0x72,0x65,0x20,0x6D,0x6F,0x75,0x73,0x65,0x22,0x20,0x69, + 0x73,0x20,0x64,0x69,0x73,0x61,0x62,0x6C,0x65,0x64,0x20,0x69, + 0x6E,0x20,0x43,0x6F,0x6E,0x66,0x69,0x67,0x20,0x2D,0x3E,0x20, + 0x4C,0x61,0x79,0x6F,0x75,0x74,0x2E,0x4B,0x3E,0x40,0x58,0x30, + 0x33,0x35,0x41,0x6C,0x74,0x65,0x72,0x6E,0x61,0x74,0x69,0x76, + 0x65,0x6C,0x79,0x2C,0x20,0x79,0x6F,0x75,0x20,0x63,0x61,0x6E, + 0x20,0x65,0x6E,0x61,0x62,0x6C,0x65,0x20,0x22,0x56,0x53,0x79, + 0x6E,0x63,0x20,0x6F,0x66,0x66,0x22,0x20,0x69,0x6E,0x20,0x43, + 0x6F,0x6E,0x66,0x69,0x67,0x20,0x2D,0x3E,0x20,0x4D,0x69,0x73, + 0x63,0x65,0x6C,0x6C,0x61,0x6E,0x65,0x6F,0x75,0x73,0x2E,0x46, + 0x3E,0x54,0x68,0x69,0x73,0x20,0x68,0x6F,0x77,0x65,0x76,0x65, + 0x72,0x2C,0x20,0x77,0x69,0x6C,0x6C,0x20,0x69,0x6E,0x74,0x72, + 0x6F,0x64,0x75,0x63,0x65,0x20,0x73,0x74,0x75,0x74,0x74,0x65, + 0x72,0x69,0x6E,0x67,0x20,0x62,0x65,0x63,0x61,0x75,0x73,0x65, + 0x20,0x74,0x68,0x65,0x20,0x72,0x65,0x6E,0x64,0x65,0x72,0x69, + 0x6E,0x67,0x20,0x72,0x61,0x74,0x65,0x20,0x69,0x73,0x22,0x3E, + 0x6E,0x6F,0x74,0x20,0x65,0x78,0x61,0x63,0x74,0x20,0x74,0x6F, + 0x20,0x79,0x6F,0x75,0x72,0x20,0x6D,0x6F,0x6E,0x69,0x74,0x6F, + 0x72,0x27,0x73,0x20,0x72,0x61,0x74,0x65,0x2E,0x06,0x3E,0x40, + 0x58,0x30,0x32,0x30,0x33,0x3E,0x40,0x43,0x30,0x30,0x31,0x51, + 0x3A,0x20,0x57,0x69,0x6C,0x6C,0x20,0x79,0x6F,0x75,0x20,0x69, + 0x6D,0x70,0x6C,0x65,0x6D,0x65,0x6E,0x74,0x20,0x4D,0x49,0x44, + 0x49,0x20,0x6F,0x75,0x74,0x20,0x66,0x75,0x6E,0x63,0x74,0x69, + 0x6F,0x6E,0x61,0x6C,0x69,0x74,0x79,0x3F,0x4D,0x3E,0x40,0x43, + 0x30,0x30,0x32,0x41,0x3A,0x20,0x4E,0x6F,0x2C,0x20,0x73,0x6F, + 0x72,0x72,0x79,0x2E,0x20,0x54,0x68,0x69,0x73,0x20,0x69,0x73, + 0x20,0x76,0x65,0x72,0x79,0x20,0x64,0x69,0x66,0x66,0x69,0x63, + 0x75,0x6C,0x74,0x20,0x74,0x6F,0x20,0x69,0x6D,0x70,0x6C,0x65, + 0x6D,0x65,0x6E,0x74,0x20,0x63,0x6F,0x72,0x72,0x65,0x63,0x74, + 0x6C,0x79,0x20,0x77,0x68,0x65,0x6E,0x20,0x68,0x61,0x76,0x69, + 0x6E,0x67,0x3C,0x3E,0x40,0x58,0x30,0x33,0x35,0x68,0x69,0x67, + 0x68,0x65,0x72,0x20,0x61,0x75,0x64,0x69,0x6F,0x20,0x62,0x75, + 0x66,0x66,0x65,0x72,0x20,0x73,0x69,0x7A,0x65,0x73,0x20,0x28, + 0x62,0x75,0x66,0x66,0x65,0x72,0x65,0x64,0x20,0x72,0x65,0x70, + 0x6C,0x61,0x79,0x65,0x72,0x20,0x74,0x69,0x63,0x6B,0x73,0x29, + 0x2E,0x2E,0x2E,0x06,0x3E,0x40,0x58,0x30,0x32,0x30,0x30,0x3E, + 0x40,0x43,0x30,0x30,0x31,0x51,0x3A,0x20,0x57,0x68,0x65,0x72, + 0x65,0x20,0x69,0x73,0x20,0x74,0x68,0x65,0x20,0x63,0x6F,0x6E, + 0x66,0x69,0x67,0x75,0x72,0x61,0x74,0x69,0x6F,0x6E,0x20,0x66, + 0x69,0x6C,0x65,0x20,0x73,0x74,0x6F,0x72,0x65,0x64,0x3F,0x3F, + 0x3E,0x40,0x43,0x30,0x30,0x32,0x41,0x3A,0x20,0x57,0x69,0x6E, + 0x64,0x6F,0x77,0x73,0x3A,0x20,0x5C,0x55,0x73,0x65,0x72,0x73, + 0x5C,0x55,0x53,0x45,0x52,0x5C,0x41,0x70,0x70,0x44,0x61,0x74, + 0x61,0x5C,0x52,0x6F,0x61,0x6D,0x69,0x6E,0x67,0x5C,0x46,0x54, + 0x32,0x20,0x63,0x6C,0x6F,0x6E,0x65,0x5C,0x46,0x54,0x32,0x2E, + 0x43,0x46,0x47,0x45,0x3E,0x40,0x58,0x30,0x33,0x35,0x4F,0x53, + 0x20,0x58,0x3A,0x20,0x2F,0x55,0x73,0x65,0x72,0x73,0x2F,0x55, + 0x53,0x45,0x52,0x2F,0x4C,0x69,0x62,0x72,0x61,0x72,0x79,0x2F, + 0x41,0x70,0x70,0x6C,0x69,0x63,0x61,0x74,0x69,0x6F,0x6E,0x20, + 0x53,0x75,0x70,0x70,0x6F,0x72,0x74,0x2F,0x46,0x54,0x32,0x20, + 0x63,0x6C,0x6F,0x6E,0x65,0x2F,0x46,0x54,0x32,0x2E,0x43,0x46, + 0x47,0x2F,0x47,0x4E,0x55,0x2F,0x4C,0x69,0x6E,0x75,0x78,0x3A, + 0x20,0x2F,0x68,0x6F,0x6D,0x65,0x2F,0x55,0x53,0x45,0x52,0x2F, + 0x2E,0x63,0x6F,0x6E,0x66,0x69,0x67,0x2F,0x46,0x54,0x32,0x20, + 0x63,0x6C,0x6F,0x6E,0x65,0x2F,0x46,0x54,0x32,0x2E,0x43,0x46, + 0x47,0x01,0x3E,0x48,0x49,0x74,0x20,0x77,0x69,0x6C,0x6C,0x20, + 0x62,0x65,0x20,0x73,0x74,0x6F,0x72,0x65,0x64,0x20,0x69,0x6E, + 0x20,0x74,0x68,0x65,0x20,0x70,0x72,0x6F,0x67,0x72,0x61,0x6D, + 0x20,0x64,0x69,0x72,0x65,0x63,0x74,0x6F,0x72,0x79,0x20,0x69, + 0x66,0x20,0x74,0x68,0x65,0x20,0x70,0x61,0x74,0x68,0x20,0x63, + 0x6F,0x75,0x6C,0x64,0x6E,0x27,0x74,0x20,0x62,0x65,0x20,0x75, + 0x73,0x65,0x64,0x2E,0x4D,0x49,0x66,0x20,0x79,0x6F,0x75,0x20, + 0x70,0x75,0x74,0x20,0x74,0x68,0x65,0x20,0x63,0x6F,0x6E,0x66, + 0x69,0x67,0x75,0x72,0x61,0x74,0x69,0x6F,0x6E,0x20,0x66,0x69, + 0x6C,0x65,0x20,0x69,0x6E,0x20,0x74,0x68,0x65,0x20,0x70,0x72, + 0x6F,0x67,0x72,0x61,0x6D,0x20,0x64,0x69,0x72,0x65,0x63,0x74, + 0x6F,0x72,0x79,0x2C,0x20,0x69,0x74,0x20,0x77,0x69,0x6C,0x6C, + 0x20,0x72,0x65,0x61,0x64,0x20,0x74,0x68,0x61,0x74,0x4A,0x6F, + 0x6E,0x65,0x20,0x61,0x6E,0x64,0x20,0x6E,0x6F,0x74,0x20,0x61, + 0x74,0x74,0x65,0x6D,0x70,0x74,0x20,0x74,0x6F,0x20,0x63,0x72, + 0x65,0x61,0x74,0x65,0x20,0x63,0x6F,0x6E,0x66,0x69,0x67,0x20, + 0x64,0x69,0x72,0x73,0x20,0x66,0x6F,0x72,0x20,0x74,0x68,0x65, + 0x20,0x4F,0x53,0x20,0x75,0x73,0x65,0x72,0x2E,0x20,0x28,0x70, + 0x6F,0x72,0x74,0x61,0x62,0x6C,0x65,0x20,0x6D,0x6F,0x64,0x65, + 0x29,0x06,0x3E,0x40,0x58,0x30,0x32,0x30,0x42,0x3E,0x40,0x43, + 0x30,0x30,0x31,0x51,0x3A,0x20,0x43,0x61,0x6E,0x20,0x74,0x68, + 0x65,0x20,0x63,0x6C,0x6F,0x6E,0x65,0x20,0x72,0x65,0x61,0x64, + 0x20,0x46,0x54,0x32,0x2E,0x43,0x46,0x47,0x20,0x66,0x72,0x6F, + 0x6D,0x20,0x72,0x65,0x61,0x6C,0x20,0x46,0x54,0x32,0x2C,0x20, + 0x61,0x6E,0x64,0x20,0x76,0x69,0x63,0x65,0x20,0x76,0x65,0x72, + 0x73,0x61,0x3F,0x4C,0x3E,0x40,0x43,0x30,0x30,0x32,0x41,0x3A, + 0x20,0x59,0x65,0x73,0x2C,0x20,0x69,0x74,0x20,0x73,0x68,0x6F, + 0x75,0x6C,0x64,0x20,0x77,0x6F,0x72,0x6B,0x20,0x6A,0x75,0x73, + 0x74,0x20,0x66,0x69,0x6E,0x65,0x2E,0x20,0x50,0x75,0x74,0x20, + 0x69,0x74,0x20,0x69,0x6E,0x20,0x74,0x68,0x65,0x20,0x64,0x69, + 0x72,0x65,0x63,0x74,0x6F,0x72,0x79,0x20,0x73,0x68,0x6F,0x77, + 0x6E,0x20,0x61,0x62,0x6F,0x76,0x65,0x2E,0x06,0x3E,0x40,0x58, + 0x30,0x32,0x30,0x51,0x3E,0x40,0x43,0x30,0x30,0x31,0x51,0x3A, + 0x20,0x53,0x6D,0x70,0x2E,0x20,0x45,0x64,0x2E,0x3A,0x20,0x57, + 0x68,0x69,0x6C,0x65,0x20,0x7A,0x6F,0x6F,0x6D,0x65,0x64,0x20, + 0x69,0x6E,0x2C,0x20,0x49,0x20,0x73,0x6F,0x6D,0x65,0x74,0x69, + 0x6D,0x65,0x73,0x20,0x63,0x61,0x6E,0x27,0x74,0x20,0x6D,0x61, + 0x72,0x6B,0x20,0x74,0x68,0x65,0x20,0x6C,0x61,0x73,0x74,0x20, + 0x73,0x61,0x6D,0x70,0x6C,0x65,0x20,0x70,0x6F,0x69,0x6E,0x74, + 0x21,0x47,0x3E,0x40,0x43,0x30,0x30,0x32,0x41,0x3A,0x20,0x54, + 0x68,0x69,0x73,0x20,0x69,0x73,0x20,0x6E,0x6F,0x72,0x6D,0x61, + 0x6C,0x2E,0x20,0x54,0x68,0x69,0x73,0x20,0x69,0x73,0x20,0x61, + 0x20,0x6C,0x69,0x6D,0x69,0x74,0x61,0x74,0x69,0x6F,0x6E,0x20, + 0x69,0x6E,0x20,0x74,0x68,0x65,0x20,0x6E,0x61,0x74,0x75,0x72, + 0x65,0x20,0x6F,0x66,0x20,0x73,0x63,0x61,0x6C,0x69,0x6E,0x67, + 0x2E,0x06,0x3E,0x40,0x58,0x30,0x32,0x30,0x17,0x3E,0x40,0x43, + 0x30,0x30,0x31,0x51,0x3A,0x20,0x49,0x20,0x66,0x6F,0x75,0x6E, + 0x64,0x20,0x61,0x20,0x62,0x75,0x67,0x21,0x4C,0x3E,0x40,0x43, + 0x30,0x30,0x32,0x41,0x3A,0x20,0x50,0x6C,0x65,0x61,0x73,0x65, + 0x20,0x73,0x65,0x6E,0x64,0x20,0x6D,0x65,0x20,0x61,0x20,0x6D, + 0x61,0x69,0x6C,0x20,0x28,0x66,0x6F,0x75,0x6E,0x64,0x20,0x61, + 0x74,0x20,0x31,0x36,0x2D,0x62,0x69,0x74,0x73,0x2E,0x6F,0x72, + 0x67,0x29,0x20,0x61,0x6E,0x64,0x20,0x74,0x72,0x79,0x20,0x74, + 0x6F,0x20,0x65,0x78,0x70,0x6C,0x61,0x69,0x6E,0x20,0x69,0x74, + 0x2E,0x00,0x03,0x45,0x4E,0x44,0x4C,0x3B,0x2A,0x2A,0x2A,0x2A, + 0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A, + 0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A, + 0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A, + 0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A, + 0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A, + 0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x4C, + 0x3B,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A, + 0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A, + 0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A, + 0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A, + 0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A, + 0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A, + 0x2A,0x2A,0x2A,0x2A,0x0C,0x40,0x4C,0x4B,0x6E,0x6F,0x77,0x6E, + 0x20,0x62,0x75,0x67,0x73,0x01,0x3E,0x31,0x3E,0x40,0x58,0x30, + 0x31,0x30,0x40,0x43,0x30,0x30,0x31,0x57,0x41,0x56,0x20,0x65, + 0x78,0x70,0x6F,0x72,0x74,0x69,0x6E,0x67,0x20,0x28,0x72,0x65, + 0x6E,0x64,0x65,0x72,0x69,0x6E,0x67,0x20,0x73,0x6F,0x6E,0x67, + 0x20,0x74,0x6F,0x20,0x57,0x41,0x56,0x29,0x3A,0x01,0x3E,0x55, + 0x3E,0x40,0x58,0x30,0x31,0x30,0x40,0x43,0x30,0x30,0x32,0x2D, + 0x20,0x53,0x6F,0x6E,0x67,0x73,0x20,0x74,0x68,0x61,0x74,0x20, + 0x6A,0x75,0x6D,0x70,0x20,0x62,0x61,0x63,0x6B,0x20,0x74,0x6F, + 0x20,0x61,0x20,0x70,0x72,0x65,0x76,0x69,0x6F,0x75,0x73,0x20, + 0x70,0x61,0x74,0x74,0x65,0x72,0x6E,0x20,0x77,0x69,0x6C,0x6C, + 0x20,0x72,0x65,0x6E,0x64,0x65,0x72,0x20,0x66,0x6F,0x72,0x65, + 0x76,0x65,0x72,0x20,0x61,0x6E,0x64,0x20,0x65,0x76,0x65,0x72, + 0x2C,0x4D,0x3E,0x40,0x58,0x30,0x32,0x31,0x61,0x6E,0x64,0x20, + 0x79,0x6F,0x75,0x20,0x6E,0x65,0x65,0x64,0x20,0x74,0x6F,0x20, + 0x70,0x72,0x65,0x73,0x73,0x20,0x61,0x20,0x6B,0x65,0x79,0x20, + 0x6F,0x72,0x20,0x63,0x6C,0x69,0x63,0x6B,0x20,0x74,0x68,0x65, + 0x20,0x6D,0x6F,0x75,0x73,0x65,0x20,0x74,0x6F,0x20,0x61,0x62, + 0x6F,0x72,0x74,0x20,0x74,0x68,0x65,0x20,0x72,0x65,0x6E,0x64, + 0x65,0x72,0x20,0x77,0x68,0x65,0x6E,0x15,0x3E,0x40,0x58,0x30, + 0x32,0x31,0x79,0x6F,0x75,0x20,0x77,0x61,0x6E,0x74,0x20,0x69, + 0x74,0x20,0x74,0x6F,0x2E,0x01,0x3E,0x11,0x3E,0x40,0x58,0x30, + 0x31,0x30,0x40,0x43,0x30,0x30,0x31,0x56,0x69,0x64,0x65,0x6F, + 0x3A,0x06,0x3E,0x40,0x43,0x30,0x30,0x32,0x50,0x3E,0x40,0x58, + 0x30,0x31,0x30,0x2D,0x20,0x46,0x75,0x6C,0x6C,0x73,0x63,0x72, + 0x65,0x65,0x6E,0x20,0x6D,0x6F,0x64,0x65,0x20,0x63,0x61,0x6E, + 0x20,0x62,0x65,0x20,0x75,0x6E,0x62,0x65,0x61,0x72,0x61,0x62, + 0x6C,0x79,0x20,0x73,0x6C,0x6F,0x77,0x20,0x6F,0x6E,0x20,0x61, + 0x20,0x52,0x61,0x73,0x70,0x62,0x65,0x72,0x72,0x79,0x20,0x50, + 0x69,0x20,0x28,0x65,0x76,0x65,0x6E,0x20,0x6F,0x6E,0x20,0x52, + 0x50,0x69,0x20,0x34,0x29,0x4A,0x3E,0x40,0x58,0x30,0x31,0x30, + 0x2D,0x20,0x46,0x75,0x6C,0x6C,0x73,0x63,0x72,0x65,0x65,0x6E, + 0x20,0x6D,0x6F,0x64,0x65,0x20,0x63,0x61,0x6E,0x20,0x68,0x61, + 0x76,0x65,0x20,0x73,0x65,0x76,0x65,0x72,0x61,0x6C,0x20,0x70, + 0x72,0x6F,0x62,0x6C,0x65,0x6D,0x73,0x20,0x6F,0x6E,0x20,0x6D, + 0x75,0x6C,0x74,0x69,0x2D,0x6D,0x6F,0x6E,0x69,0x74,0x6F,0x72, + 0x20,0x73,0x79,0x73,0x74,0x65,0x6D,0x73,0x47,0x3E,0x40,0x58, + 0x30,0x31,0x30,0x2D,0x20,0x46,0x75,0x6C,0x6C,0x73,0x63,0x72, + 0x65,0x65,0x6E,0x20,0x6D,0x6F,0x64,0x65,0x20,0x63,0x61,0x6E, + 0x20,0x68,0x61,0x76,0x65,0x20,0x73,0x65,0x76,0x65,0x72,0x61, + 0x6C,0x20,0x70,0x72,0x6F,0x62,0x6C,0x65,0x6D,0x73,0x20,0x6F, + 0x6E,0x20,0x73,0x6F,0x6D,0x65,0x20,0x4C,0x69,0x6E,0x75,0x78, + 0x20,0x73,0x79,0x73,0x74,0x65,0x6D,0x73,0x00,0x03,0x45,0x4E, + 0x44 }; #endif diff --git a/src/mixer/ft2_mix.c b/src/mixer/ft2_mix.c @@ -8,7 +8,7 @@ ** (Note: Mixing macros can be found in ft2_mix_macros.h) ** ** Specifications: -** - Interpolation: None, 2-tap linear, 4-tap cubic spline, 8-tap windowed-sinc, 32-tap windowed-sinc +** - Interpolation: None, 2-tap linear, 4-tap cubic spline, 8-tap windowed-sinc, 16-tap windowed-sinc ** - FT2-styled linear volume ramping (can be turned off) ** - 32.32 fixed-point precision for resampling delta/position ** - 32-bit floating-point precision for mixing and interpolation @@ -483,19 +483,19 @@ static void mix8bNoLoopS32Intrp(voice_t *v, uint32_t bufferPos, uint32_t numSamp for (i = 0; i < (samplesToMix & 3); i++) { - RENDER_8BIT_SMP_S32INTRP + RENDER_8BIT_SMP_S16INTRP INC_POS } samplesToMix >>= 2; for (i = 0; i < samplesToMix; i++) { - RENDER_8BIT_SMP_S32INTRP + RENDER_8BIT_SMP_S16INTRP INC_POS - RENDER_8BIT_SMP_S32INTRP + RENDER_8BIT_SMP_S16INTRP INC_POS - RENDER_8BIT_SMP_S32INTRP + RENDER_8BIT_SMP_S16INTRP INC_POS - RENDER_8BIT_SMP_S32INTRP + RENDER_8BIT_SMP_S16INTRP INC_POS } @@ -529,19 +529,19 @@ static void mix8bLoopS32Intrp(voice_t *v, uint32_t bufferPos, uint32_t numSample { for (i = 0; i < (samplesToMix & 3); i++) { - RENDER_8BIT_SMP_S32INTRP_TAP_FIX + RENDER_8BIT_SMP_S16INTRP_TAP_FIX INC_POS } samplesToMix >>= 2; for (i = 0; i < samplesToMix; i++) { - RENDER_8BIT_SMP_S32INTRP_TAP_FIX + RENDER_8BIT_SMP_S16INTRP_TAP_FIX INC_POS - RENDER_8BIT_SMP_S32INTRP_TAP_FIX + RENDER_8BIT_SMP_S16INTRP_TAP_FIX INC_POS - RENDER_8BIT_SMP_S32INTRP_TAP_FIX + RENDER_8BIT_SMP_S16INTRP_TAP_FIX INC_POS - RENDER_8BIT_SMP_S32INTRP_TAP_FIX + RENDER_8BIT_SMP_S16INTRP_TAP_FIX INC_POS } } @@ -549,19 +549,19 @@ static void mix8bLoopS32Intrp(voice_t *v, uint32_t bufferPos, uint32_t numSample { for (i = 0; i < (samplesToMix & 3); i++) { - RENDER_8BIT_SMP_S32INTRP + RENDER_8BIT_SMP_S16INTRP INC_POS } samplesToMix >>= 2; for (i = 0; i < samplesToMix; i++) { - RENDER_8BIT_SMP_S32INTRP + RENDER_8BIT_SMP_S16INTRP INC_POS - RENDER_8BIT_SMP_S32INTRP + RENDER_8BIT_SMP_S16INTRP INC_POS - RENDER_8BIT_SMP_S32INTRP + RENDER_8BIT_SMP_S16INTRP INC_POS - RENDER_8BIT_SMP_S32INTRP + RENDER_8BIT_SMP_S16INTRP INC_POS } } @@ -597,19 +597,19 @@ static void mix8bBidiLoopS32Intrp(voice_t *v, uint32_t bufferPos, uint32_t numSa { for (i = 0; i < (samplesToMix & 3); i++) { - RENDER_8BIT_SMP_S32INTRP_TAP_FIX + RENDER_8BIT_SMP_S16INTRP_TAP_FIX INC_POS_BIDI } samplesToMix >>= 2; for (i = 0; i < samplesToMix; i++) { - RENDER_8BIT_SMP_S32INTRP_TAP_FIX + RENDER_8BIT_SMP_S16INTRP_TAP_FIX INC_POS_BIDI - RENDER_8BIT_SMP_S32INTRP_TAP_FIX + RENDER_8BIT_SMP_S16INTRP_TAP_FIX INC_POS_BIDI - RENDER_8BIT_SMP_S32INTRP_TAP_FIX + RENDER_8BIT_SMP_S16INTRP_TAP_FIX INC_POS_BIDI - RENDER_8BIT_SMP_S32INTRP_TAP_FIX + RENDER_8BIT_SMP_S16INTRP_TAP_FIX INC_POS_BIDI } } @@ -617,19 +617,19 @@ static void mix8bBidiLoopS32Intrp(voice_t *v, uint32_t bufferPos, uint32_t numSa { for (i = 0; i < (samplesToMix & 3); i++) { - RENDER_8BIT_SMP_S32INTRP + RENDER_8BIT_SMP_S16INTRP INC_POS_BIDI } samplesToMix >>= 2; for (i = 0; i < samplesToMix; i++) { - RENDER_8BIT_SMP_S32INTRP + RENDER_8BIT_SMP_S16INTRP INC_POS_BIDI - RENDER_8BIT_SMP_S32INTRP + RENDER_8BIT_SMP_S16INTRP INC_POS_BIDI - RENDER_8BIT_SMP_S32INTRP + RENDER_8BIT_SMP_S16INTRP INC_POS_BIDI - RENDER_8BIT_SMP_S32INTRP + RENDER_8BIT_SMP_S16INTRP INC_POS_BIDI } } @@ -1357,23 +1357,23 @@ static void mix8bRampNoLoopS32Intrp(voice_t *v, uint32_t bufferPos, uint32_t num for (i = 0; i < (samplesToMix & 3); i++) { - RENDER_8BIT_SMP_S32INTRP + RENDER_8BIT_SMP_S16INTRP VOLUME_RAMPING INC_POS } samplesToMix >>= 2; for (i = 0; i < samplesToMix; i++) { - RENDER_8BIT_SMP_S32INTRP + RENDER_8BIT_SMP_S16INTRP VOLUME_RAMPING INC_POS - RENDER_8BIT_SMP_S32INTRP + RENDER_8BIT_SMP_S16INTRP VOLUME_RAMPING INC_POS - RENDER_8BIT_SMP_S32INTRP + RENDER_8BIT_SMP_S16INTRP VOLUME_RAMPING INC_POS - RENDER_8BIT_SMP_S32INTRP + RENDER_8BIT_SMP_S16INTRP VOLUME_RAMPING INC_POS } @@ -1411,23 +1411,23 @@ static void mix8bRampLoopS32Intrp(voice_t *v, uint32_t bufferPos, uint32_t numSa { for (i = 0; i < (samplesToMix & 3); i++) { - RENDER_8BIT_SMP_S32INTRP_TAP_FIX + RENDER_8BIT_SMP_S16INTRP_TAP_FIX VOLUME_RAMPING INC_POS } samplesToMix >>= 2; for (i = 0; i < samplesToMix; i++) { - RENDER_8BIT_SMP_S32INTRP_TAP_FIX + RENDER_8BIT_SMP_S16INTRP_TAP_FIX VOLUME_RAMPING INC_POS - RENDER_8BIT_SMP_S32INTRP_TAP_FIX + RENDER_8BIT_SMP_S16INTRP_TAP_FIX VOLUME_RAMPING INC_POS - RENDER_8BIT_SMP_S32INTRP_TAP_FIX + RENDER_8BIT_SMP_S16INTRP_TAP_FIX VOLUME_RAMPING INC_POS - RENDER_8BIT_SMP_S32INTRP_TAP_FIX + RENDER_8BIT_SMP_S16INTRP_TAP_FIX VOLUME_RAMPING INC_POS } @@ -1436,23 +1436,23 @@ static void mix8bRampLoopS32Intrp(voice_t *v, uint32_t bufferPos, uint32_t numSa { for (i = 0; i < (samplesToMix & 3); i++) { - RENDER_8BIT_SMP_S32INTRP + RENDER_8BIT_SMP_S16INTRP VOLUME_RAMPING INC_POS } samplesToMix >>= 2; for (i = 0; i < samplesToMix; i++) { - RENDER_8BIT_SMP_S32INTRP + RENDER_8BIT_SMP_S16INTRP VOLUME_RAMPING INC_POS - RENDER_8BIT_SMP_S32INTRP + RENDER_8BIT_SMP_S16INTRP VOLUME_RAMPING INC_POS - RENDER_8BIT_SMP_S32INTRP + RENDER_8BIT_SMP_S16INTRP VOLUME_RAMPING INC_POS - RENDER_8BIT_SMP_S32INTRP + RENDER_8BIT_SMP_S16INTRP VOLUME_RAMPING INC_POS } @@ -1492,23 +1492,23 @@ static void mix8bRampBidiLoopS32Intrp(voice_t *v, uint32_t bufferPos, uint32_t n { for (i = 0; i < (samplesToMix & 3); i++) { - RENDER_8BIT_SMP_S32INTRP_TAP_FIX + RENDER_8BIT_SMP_S16INTRP_TAP_FIX VOLUME_RAMPING INC_POS_BIDI } samplesToMix >>= 2; for (i = 0; i < samplesToMix; i++) { - RENDER_8BIT_SMP_S32INTRP_TAP_FIX + RENDER_8BIT_SMP_S16INTRP_TAP_FIX VOLUME_RAMPING INC_POS_BIDI - RENDER_8BIT_SMP_S32INTRP_TAP_FIX + RENDER_8BIT_SMP_S16INTRP_TAP_FIX VOLUME_RAMPING INC_POS_BIDI - RENDER_8BIT_SMP_S32INTRP_TAP_FIX + RENDER_8BIT_SMP_S16INTRP_TAP_FIX VOLUME_RAMPING INC_POS_BIDI - RENDER_8BIT_SMP_S32INTRP_TAP_FIX + RENDER_8BIT_SMP_S16INTRP_TAP_FIX VOLUME_RAMPING INC_POS_BIDI } @@ -1517,23 +1517,23 @@ static void mix8bRampBidiLoopS32Intrp(voice_t *v, uint32_t bufferPos, uint32_t n { for (i = 0; i < (samplesToMix & 3); i++) { - RENDER_8BIT_SMP_S32INTRP + RENDER_8BIT_SMP_S16INTRP VOLUME_RAMPING INC_POS_BIDI } samplesToMix >>= 2; for (i = 0; i < samplesToMix; i++) { - RENDER_8BIT_SMP_S32INTRP + RENDER_8BIT_SMP_S16INTRP VOLUME_RAMPING INC_POS_BIDI - RENDER_8BIT_SMP_S32INTRP + RENDER_8BIT_SMP_S16INTRP VOLUME_RAMPING INC_POS_BIDI - RENDER_8BIT_SMP_S32INTRP + RENDER_8BIT_SMP_S16INTRP VOLUME_RAMPING INC_POS_BIDI - RENDER_8BIT_SMP_S32INTRP + RENDER_8BIT_SMP_S16INTRP VOLUME_RAMPING INC_POS_BIDI } @@ -2217,19 +2217,19 @@ static void mix16bNoLoopS32Intrp(voice_t *v, uint32_t bufferPos, uint32_t numSam for (i = 0; i < (samplesToMix & 3); i++) { - RENDER_16BIT_SMP_S32INTRP + RENDER_16BIT_SMP_S16INTRP INC_POS } samplesToMix >>= 2; for (i = 0; i < samplesToMix; i++) { - RENDER_16BIT_SMP_S32INTRP + RENDER_16BIT_SMP_S16INTRP INC_POS - RENDER_16BIT_SMP_S32INTRP + RENDER_16BIT_SMP_S16INTRP INC_POS - RENDER_16BIT_SMP_S32INTRP + RENDER_16BIT_SMP_S16INTRP INC_POS - RENDER_16BIT_SMP_S32INTRP + RENDER_16BIT_SMP_S16INTRP INC_POS } @@ -2263,19 +2263,19 @@ static void mix16bLoopS32Intrp(voice_t *v, uint32_t bufferPos, uint32_t numSampl { for (i = 0; i < (samplesToMix & 3); i++) { - RENDER_16BIT_SMP_S32INTRP_TAP_FIX + RENDER_16BIT_SMP_S16INTRP_TAP_FIX INC_POS } samplesToMix >>= 2; for (i = 0; i < samplesToMix; i++) { - RENDER_16BIT_SMP_S32INTRP_TAP_FIX + RENDER_16BIT_SMP_S16INTRP_TAP_FIX INC_POS - RENDER_16BIT_SMP_S32INTRP_TAP_FIX + RENDER_16BIT_SMP_S16INTRP_TAP_FIX INC_POS - RENDER_16BIT_SMP_S32INTRP_TAP_FIX + RENDER_16BIT_SMP_S16INTRP_TAP_FIX INC_POS - RENDER_16BIT_SMP_S32INTRP_TAP_FIX + RENDER_16BIT_SMP_S16INTRP_TAP_FIX INC_POS } } @@ -2283,19 +2283,19 @@ static void mix16bLoopS32Intrp(voice_t *v, uint32_t bufferPos, uint32_t numSampl { for (i = 0; i < (samplesToMix & 3); i++) { - RENDER_16BIT_SMP_S32INTRP + RENDER_16BIT_SMP_S16INTRP INC_POS } samplesToMix >>= 2; for (i = 0; i < samplesToMix; i++) { - RENDER_16BIT_SMP_S32INTRP + RENDER_16BIT_SMP_S16INTRP INC_POS - RENDER_16BIT_SMP_S32INTRP + RENDER_16BIT_SMP_S16INTRP INC_POS - RENDER_16BIT_SMP_S32INTRP + RENDER_16BIT_SMP_S16INTRP INC_POS - RENDER_16BIT_SMP_S32INTRP + RENDER_16BIT_SMP_S16INTRP INC_POS } } @@ -2331,19 +2331,19 @@ static void mix16bBidiLoopS32Intrp(voice_t *v, uint32_t bufferPos, uint32_t numS { for (i = 0; i < (samplesToMix & 3); i++) { - RENDER_16BIT_SMP_S32INTRP_TAP_FIX + RENDER_16BIT_SMP_S16INTRP_TAP_FIX INC_POS_BIDI } samplesToMix >>= 2; for (i = 0; i < samplesToMix; i++) { - RENDER_16BIT_SMP_S32INTRP_TAP_FIX + RENDER_16BIT_SMP_S16INTRP_TAP_FIX INC_POS_BIDI - RENDER_16BIT_SMP_S32INTRP_TAP_FIX + RENDER_16BIT_SMP_S16INTRP_TAP_FIX INC_POS_BIDI - RENDER_16BIT_SMP_S32INTRP_TAP_FIX + RENDER_16BIT_SMP_S16INTRP_TAP_FIX INC_POS_BIDI - RENDER_16BIT_SMP_S32INTRP_TAP_FIX + RENDER_16BIT_SMP_S16INTRP_TAP_FIX INC_POS_BIDI } } @@ -2351,19 +2351,19 @@ static void mix16bBidiLoopS32Intrp(voice_t *v, uint32_t bufferPos, uint32_t numS { for (i = 0; i < (samplesToMix & 3); i++) { - RENDER_16BIT_SMP_S32INTRP + RENDER_16BIT_SMP_S16INTRP INC_POS_BIDI } samplesToMix >>= 2; for (i = 0; i < samplesToMix; i++) { - RENDER_16BIT_SMP_S32INTRP + RENDER_16BIT_SMP_S16INTRP INC_POS_BIDI - RENDER_16BIT_SMP_S32INTRP + RENDER_16BIT_SMP_S16INTRP INC_POS_BIDI - RENDER_16BIT_SMP_S32INTRP + RENDER_16BIT_SMP_S16INTRP INC_POS_BIDI - RENDER_16BIT_SMP_S32INTRP + RENDER_16BIT_SMP_S16INTRP INC_POS_BIDI } } @@ -3091,23 +3091,23 @@ static void mix16bRampNoLoopS32Intrp(voice_t *v, uint32_t bufferPos, uint32_t nu for (i = 0; i < (samplesToMix & 3); i++) { - RENDER_16BIT_SMP_S32INTRP + RENDER_16BIT_SMP_S16INTRP VOLUME_RAMPING INC_POS } samplesToMix >>= 2; for (i = 0; i < samplesToMix; i++) { - RENDER_16BIT_SMP_S32INTRP + RENDER_16BIT_SMP_S16INTRP VOLUME_RAMPING INC_POS - RENDER_16BIT_SMP_S32INTRP + RENDER_16BIT_SMP_S16INTRP VOLUME_RAMPING INC_POS - RENDER_16BIT_SMP_S32INTRP + RENDER_16BIT_SMP_S16INTRP VOLUME_RAMPING INC_POS - RENDER_16BIT_SMP_S32INTRP + RENDER_16BIT_SMP_S16INTRP VOLUME_RAMPING INC_POS } @@ -3145,23 +3145,23 @@ static void mix16bRampLoopS32Intrp(voice_t *v, uint32_t bufferPos, uint32_t numS { for (i = 0; i < (samplesToMix & 3); i++) { - RENDER_16BIT_SMP_S32INTRP_TAP_FIX + RENDER_16BIT_SMP_S16INTRP_TAP_FIX VOLUME_RAMPING INC_POS } samplesToMix >>= 2; for (i = 0; i < samplesToMix; i++) { - RENDER_16BIT_SMP_S32INTRP_TAP_FIX + RENDER_16BIT_SMP_S16INTRP_TAP_FIX VOLUME_RAMPING INC_POS - RENDER_16BIT_SMP_S32INTRP_TAP_FIX + RENDER_16BIT_SMP_S16INTRP_TAP_FIX VOLUME_RAMPING INC_POS - RENDER_16BIT_SMP_S32INTRP_TAP_FIX + RENDER_16BIT_SMP_S16INTRP_TAP_FIX VOLUME_RAMPING INC_POS - RENDER_16BIT_SMP_S32INTRP_TAP_FIX + RENDER_16BIT_SMP_S16INTRP_TAP_FIX VOLUME_RAMPING INC_POS } @@ -3170,23 +3170,23 @@ static void mix16bRampLoopS32Intrp(voice_t *v, uint32_t bufferPos, uint32_t numS { for (i = 0; i < (samplesToMix & 3); i++) { - RENDER_16BIT_SMP_S32INTRP + RENDER_16BIT_SMP_S16INTRP VOLUME_RAMPING INC_POS } samplesToMix >>= 2; for (i = 0; i < samplesToMix; i++) { - RENDER_16BIT_SMP_S32INTRP + RENDER_16BIT_SMP_S16INTRP VOLUME_RAMPING INC_POS - RENDER_16BIT_SMP_S32INTRP + RENDER_16BIT_SMP_S16INTRP VOLUME_RAMPING INC_POS - RENDER_16BIT_SMP_S32INTRP + RENDER_16BIT_SMP_S16INTRP VOLUME_RAMPING INC_POS - RENDER_16BIT_SMP_S32INTRP + RENDER_16BIT_SMP_S16INTRP VOLUME_RAMPING INC_POS } @@ -3226,23 +3226,23 @@ static void mix16bRampBidiLoopS32Intrp(voice_t *v, uint32_t bufferPos, uint32_t { for (i = 0; i < (samplesToMix & 3); i++) { - RENDER_16BIT_SMP_S32INTRP_TAP_FIX + RENDER_16BIT_SMP_S16INTRP_TAP_FIX VOLUME_RAMPING INC_POS_BIDI } samplesToMix >>= 2; for (i = 0; i < samplesToMix; i++) { - RENDER_16BIT_SMP_S32INTRP_TAP_FIX + RENDER_16BIT_SMP_S16INTRP_TAP_FIX VOLUME_RAMPING INC_POS_BIDI - RENDER_16BIT_SMP_S32INTRP_TAP_FIX + RENDER_16BIT_SMP_S16INTRP_TAP_FIX VOLUME_RAMPING INC_POS_BIDI - RENDER_16BIT_SMP_S32INTRP_TAP_FIX + RENDER_16BIT_SMP_S16INTRP_TAP_FIX VOLUME_RAMPING INC_POS_BIDI - RENDER_16BIT_SMP_S32INTRP_TAP_FIX + RENDER_16BIT_SMP_S16INTRP_TAP_FIX VOLUME_RAMPING INC_POS_BIDI } @@ -3251,23 +3251,23 @@ static void mix16bRampBidiLoopS32Intrp(voice_t *v, uint32_t bufferPos, uint32_t { for (i = 0; i < (samplesToMix & 3); i++) { - RENDER_16BIT_SMP_S32INTRP + RENDER_16BIT_SMP_S16INTRP VOLUME_RAMPING INC_POS_BIDI } samplesToMix >>= 2; for (i = 0; i < samplesToMix; i++) { - RENDER_16BIT_SMP_S32INTRP + RENDER_16BIT_SMP_S16INTRP VOLUME_RAMPING INC_POS_BIDI - RENDER_16BIT_SMP_S32INTRP + RENDER_16BIT_SMP_S16INTRP VOLUME_RAMPING INC_POS_BIDI - RENDER_16BIT_SMP_S32INTRP + RENDER_16BIT_SMP_S16INTRP VOLUME_RAMPING INC_POS_BIDI - RENDER_16BIT_SMP_S32INTRP + RENDER_16BIT_SMP_S16INTRP VOLUME_RAMPING INC_POS_BIDI } diff --git a/src/mixer/ft2_mix_macros.h b/src/mixer/ft2_mix_macros.h @@ -192,41 +192,25 @@ ( s[4] * t[7])) * (1.0f / scale); \ } -#define WINDOWED_SINC32_INTERPOLATION(s, f, scale) \ +#define WINDOWED_SINC16_INTERPOLATION(s, f, scale) \ { \ - const float *t = v->fSincLUT + (((uint32_t)(f) >> SINC32_FSHIFT) & SINC32_FMASK); \ - fSample = ((s[-15] * t[0]) + \ - (s[-14] * t[1]) + \ - (s[-13] * t[2]) + \ - (s[-12] * t[3]) + \ - (s[-11] * t[4]) + \ - (s[-10] * t[5]) + \ - ( s[-9] * t[6]) + \ - ( s[-8] * t[7]) + \ - ( s[-7] * t[8]) + \ - ( s[-6] * t[9]) + \ - ( s[-5] * t[10]) + \ - ( s[-4] * t[11]) + \ - ( s[-3] * t[12]) + \ - ( s[-2] * t[13]) + \ - ( s[-1] * t[14]) + \ - ( s[0] * t[15]) + \ - ( s[1] * t[16]) + \ - ( s[2] * t[17]) + \ - ( s[3] * t[18]) + \ - ( s[4] * t[19]) + \ - ( s[5] * t[20]) + \ - ( s[6] * t[21]) + \ - ( s[7] * t[22]) + \ - ( s[8] * t[23]) + \ - ( s[9] * t[24]) + \ - ( s[10] * t[25]) + \ - ( s[11] * t[26]) + \ - ( s[12] * t[27]) + \ - ( s[13] * t[28]) + \ - ( s[14] * t[29]) + \ - ( s[15] * t[30]) + \ - ( s[16] * t[31])) * (1.0f / scale); \ + const float *t = v->fSincLUT + (((uint32_t)(f) >> SINC16_FSHIFT) & SINC16_FMASK); \ + fSample = (( s[-7] * t[0]) + \ + ( s[-6] * t[1]) + \ + ( s[-5] * t[2]) + \ + ( s[-4] * t[3]) + \ + ( s[-3] * t[4]) + \ + ( s[-2] * t[5]) + \ + ( s[-1] * t[6]) + \ + ( s[0] * t[7]) + \ + ( s[1] * t[8]) + \ + ( s[2] * t[9]) + \ + ( s[3] * t[10]) + \ + ( s[4] * t[11]) + \ + ( s[5] * t[12]) + \ + ( s[6] * t[13]) + \ + ( s[7] * t[14]) + \ + ( s[8] * t[15])) * (1.0f / scale); \ } #define RENDER_8BIT_SMP_S8INTRP \ @@ -239,13 +223,13 @@ *fMixBufferL++ += fSample * fVolumeL; \ *fMixBufferR++ += fSample * fVolumeR; -#define RENDER_8BIT_SMP_S32INTRP \ - WINDOWED_SINC32_INTERPOLATION(smpPtr, positionFrac, 128) \ +#define RENDER_8BIT_SMP_S16INTRP \ + WINDOWED_SINC16_INTERPOLATION(smpPtr, positionFrac, 128) \ *fMixBufferL++ += fSample * fVolumeL; \ *fMixBufferR++ += fSample * fVolumeR; -#define RENDER_16BIT_SMP_S32INTRP \ - WINDOWED_SINC32_INTERPOLATION(smpPtr, positionFrac, 32768) \ +#define RENDER_16BIT_SMP_S16INTRP \ + WINDOWED_SINC16_INTERPOLATION(smpPtr, positionFrac, 32768) \ *fMixBufferL++ += fSample * fVolumeL; \ *fMixBufferR++ += fSample * fVolumeR; @@ -265,15 +249,15 @@ *fMixBufferL++ += fSample * fVolumeL; \ *fMixBufferR++ += fSample * fVolumeR; -#define RENDER_8BIT_SMP_S32INTRP_TAP_FIX \ +#define RENDER_8BIT_SMP_S16INTRP_TAP_FIX \ smpTapPtr = (smpPtr <= leftEdgePtr) ? (int8_t *)&v->leftEdgeTaps8[(int32_t)(smpPtr-loopStartPtr)] : (int8_t *)smpPtr; \ - WINDOWED_SINC32_INTERPOLATION(smpTapPtr, positionFrac, 128) \ + WINDOWED_SINC16_INTERPOLATION(smpTapPtr, positionFrac, 128) \ *fMixBufferL++ += fSample * fVolumeL; \ *fMixBufferR++ += fSample * fVolumeR; -#define RENDER_16BIT_SMP_S32INTRP_TAP_FIX \ +#define RENDER_16BIT_SMP_S16INTRP_TAP_FIX \ smpTapPtr = (smpPtr <= leftEdgePtr) ? (int16_t *)&v->leftEdgeTaps16[(int32_t)(smpPtr-loopStartPtr)] : (int16_t *)smpPtr; \ - WINDOWED_SINC32_INTERPOLATION(smpTapPtr, positionFrac, 32768) \ + WINDOWED_SINC16_INTERPOLATION(smpTapPtr, positionFrac, 32768) \ *fMixBufferL++ += fSample * fVolumeL; \ *fMixBufferR++ += fSample * fVolumeR; diff --git a/src/mixer/ft2_windowed_sinc.c b/src/mixer/ft2_windowed_sinc.c @@ -13,9 +13,10 @@ // globalized float *fKaiserSinc_8 = NULL, *fDownSample1_8 = NULL, *fDownSample2_8 = NULL; -float *fKaiserSinc_32 = NULL, *fDownSample1_32 = NULL, *fDownSample2_32 = NULL; +float *fKaiserSinc_16 = NULL, *fDownSample1_16 = NULL, *fDownSample2_16 = NULL; +uint64_t sincDownsample1Ratio, sincDownsample2Ratio; -// set based on selected sinc interpolator (8 point or 32 point) +// set based on selected sinc interpolator (8 point or 16 point) float *fKaiserSinc = NULL, *fDownSample1 = NULL, *fDownSample2 = NULL; // zeroth-order modified Bessel function of the first kind (series approximation) @@ -79,26 +80,34 @@ bool calcWindowedSincTables(void) fDownSample1_8 = (float *)malloc(SINC1_TAPS*SINC_PHASES * sizeof (float)); fDownSample2_8 = (float *)malloc(SINC1_TAPS*SINC_PHASES * sizeof (float)); - fKaiserSinc_32 = (float *)malloc(SINC2_TAPS*SINC_PHASES * sizeof (float)); - fDownSample1_32 = (float *)malloc(SINC2_TAPS*SINC_PHASES * sizeof (float)); - fDownSample2_32 = (float *)malloc(SINC2_TAPS*SINC_PHASES * sizeof (float)); + fKaiserSinc_16 = (float *)malloc(SINC2_TAPS*SINC_PHASES * sizeof (float)); + fDownSample1_16 = (float *)malloc(SINC2_TAPS*SINC_PHASES * sizeof (float)); + fDownSample2_16 = (float *)malloc(SINC2_TAPS*SINC_PHASES * sizeof (float)); if (fKaiserSinc_8 == NULL || fDownSample1_8 == NULL || fDownSample2_8 == NULL || - fKaiserSinc_32 == NULL || fDownSample1_32 == NULL || fDownSample2_32 == NULL) + fKaiserSinc_16 == NULL || fDownSample1_16 == NULL || fDownSample2_16 == NULL) { showErrorMsgBox("Not enough memory!"); return false; } - // 8 point (modelled after OpenMPT) - getSinc(SINC1_TAPS, fKaiserSinc_8, dBToKaiserBeta(96.15645), 1.000); - getSinc(SINC1_TAPS, fDownSample1_8, dBToKaiserBeta(85.83249), 0.500); - getSinc(SINC1_TAPS, fDownSample2_8, dBToKaiserBeta(72.22088), 0.425); + sincDownsample1Ratio = (uint64_t)(1.1875 * MIXER_FRAC_SCALE); + sincDownsample2Ratio = (uint64_t)(1.5 * MIXER_FRAC_SCALE); - // 32 point - getSinc(SINC2_TAPS, fKaiserSinc_32, dBToKaiserBeta(96.0), 1.000); - getSinc(SINC2_TAPS, fDownSample1_32, dBToKaiserBeta(86.0), 0.500); - getSinc(SINC2_TAPS, fDownSample2_32, dBToKaiserBeta(74.0), 0.425); + // sidelobe attenuation (Kaiser beta) + const double b0 = dBToKaiserBeta(96.15645); + const double b1 = dBToKaiserBeta(85.83249); + const double b2 = dBToKaiserBeta(72.22088); + + // 8 point + getSinc(SINC1_TAPS, fKaiserSinc_8, b0, 0.97); + getSinc(SINC1_TAPS, fDownSample1_8, b1, 0.5); + getSinc(SINC1_TAPS, fDownSample2_8, b2, 0.425); + + // 16 point + getSinc(SINC2_TAPS, fKaiserSinc_16, b0, 1.0); + getSinc(SINC2_TAPS, fDownSample1_16, b1, 0.5); + getSinc(SINC2_TAPS, fDownSample2_16, b2, 0.425); return true; } @@ -123,21 +132,21 @@ void freeWindowedSincTables(void) fDownSample2_8 = NULL; } - if (fKaiserSinc_32 != NULL) + if (fKaiserSinc_16 != NULL) { - free(fKaiserSinc_32); - fKaiserSinc_32 = NULL; + free(fKaiserSinc_16); + fKaiserSinc_16 = NULL; } - if (fDownSample1_32 != NULL) + if (fDownSample1_16 != NULL) { - free(fDownSample1_32); - fDownSample1_32 = NULL; + free(fDownSample1_16); + fDownSample1_16 = NULL; } - if (fDownSample2_32 != NULL) + if (fDownSample2_16 != NULL) { - free(fDownSample2_32); - fDownSample2_32 = NULL; + free(fDownSample2_16); + fDownSample2_16 = NULL; } } diff --git a/src/mixer/ft2_windowed_sinc.h b/src/mixer/ft2_windowed_sinc.h @@ -15,15 +15,16 @@ #define SINC8_FSHIFT (MIXER_FRAC_BITS-(SINC_PHASES_BITS+SINC8_WIDTH_BITS)) #define SINC8_FMASK ((SINC1_TAPS*SINC_PHASES)-SINC1_TAPS) -#define SINC2_TAPS 32 -#define SINC32_WIDTH_BITS 5 // log2(SINC2_TAPS) -#define SINC32_FSHIFT (MIXER_FRAC_BITS-(SINC_PHASES_BITS+SINC32_WIDTH_BITS)) -#define SINC32_FMASK ((SINC2_TAPS*SINC_PHASES)-SINC2_TAPS) +#define SINC2_TAPS 16 +#define SINC16_WIDTH_BITS 4 // log2(SINC2_TAPS) +#define SINC16_FSHIFT (MIXER_FRAC_BITS-(SINC_PHASES_BITS+SINC16_WIDTH_BITS)) +#define SINC16_FMASK ((SINC2_TAPS*SINC_PHASES)-SINC2_TAPS) extern float *fKaiserSinc_8, *fDownSample1_8, *fDownSample2_8; -extern float *fKaiserSinc_32, *fDownSample1_32, *fDownSample2_32; +extern float *fKaiserSinc_16, *fDownSample1_16, *fDownSample2_16; extern float *fKaiserSinc, *fDownSample1, *fDownSample2; +extern uint64_t sincDownsample1Ratio, sincDownsample2Ratio; bool calcWindowedSincTables(void); void freeWindowedSincTables(void);