ref: e3b56c7ee293cf8c61f2a2c480e660527fcbd575
parent: 4778ea265ca3705e312d6928f346c3f2e7986542
parent: dfcf1b407ae44ed17b47230a5ec35993d7ee8ef0
author: qwx <qwx@sciops.net>
date: Mon Feb 24 19:27:54 EST 2025
sync with upstream
--- a/LICENSE
+++ b/LICENSE
@@ -1,6 +1,6 @@
BSD 3-Clause License
-Copyright (c) 2016-2024, Olav Sørensen
+Copyright (c) 2016-2025, Olav Sørensen
All rights reserved.
Redistribution and use in source and binary forms, with or without
--- a/README.md
+++ b/README.md
@@ -14,7 +14,7 @@
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/6-point cubic Hermite spline, 8-point/16-point windowed-sinc)
+- The channel resampler/mixer uses floating-point arithmetics for less errors, and has extra interpolation options (3-point quadratic spline, 4-point cubic spline, 8-point/16-point windowed-sinc)
- The sample loader supports FLAC/AIFF/BRR (SNES) 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
--- a/mkfile.plan9
+++ b/mkfile.plan9
@@ -51,6 +51,7 @@
src/mixer/ft2_cubic_spline.h\
src/mixer/ft2_mix.h\
src/mixer/ft2_mix_macros.h\
+ src/mixer/ft2_quadratic_spline.h\
src/mixer/ft2_silence_mix.h\
src/mixer/ft2_windowed_sinc.h\
src/scopes/ft2_scope_macros.h\
@@ -109,6 +110,7 @@
src/gfxdata/ft2_bmp_scopes.$O\
src/mixer/ft2_cubic_spline.$O\
src/mixer/ft2_mix.$O\
+ src/mixer/ft2_quadratic_spline.$O\
src/mixer/ft2_silence_mix.$O\
src/mixer/ft2_windowed_sinc.$O\
src/modloaders/ft2_load_bem.$O\
--- a/release/LICENSES.txt
+++ b/release/LICENSES.txt
@@ -2,7 +2,7 @@
---------------------- Source code (BSD 3-clause license) ----------------------
--------------------------------------------------------------------------------
-Copyright (c) 2016-2024, Olav Sørensen
+Copyright (c) 2016-2025, Olav Sørensen
All rights reserved.
Redistribution and use in source and binary forms, with or without
@@ -99,7 +99,7 @@
------------------------ SDL (Simple DirectMedia Layer) ------------------------
--------------------------------------------------------------------------------
-Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Headers
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Headers
@@ -1,2 +1,0 @@
-Versions/Current/Headers
-\ No newline at end of file
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Resources
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Resources
@@ -1,2 +1,0 @@
-Versions/Current/Resources
-\ No newline at end of file
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/SDL2
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/SDL2
@@ -1,2 +1,0 @@
-Versions/Current/SDL2
-\ No newline at end of file
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_assert.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_assert.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_atomic.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_atomic.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_audio.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_audio.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_bits.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_bits.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_blendmode.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_blendmode.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_clipboard.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_clipboard.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_config.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_config.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_config_macosx.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_config_macosx.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_copying.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_copying.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_cpuinfo.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_cpuinfo.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_endian.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_endian.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_error.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_error.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_events.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_events.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_filesystem.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_filesystem.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_gamecontroller.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_gamecontroller.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_gesture.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_gesture.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_guid.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_guid.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_haptic.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_haptic.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_hidapi.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_hidapi.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_hints.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_hints.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_joystick.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_joystick.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_keyboard.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_keyboard.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_keycode.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_keycode.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_loadso.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_loadso.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_locale.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_locale.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_log.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_log.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_main.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_main.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_messagebox.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_messagebox.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_metal.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_metal.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_misc.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_misc.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_mouse.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_mouse.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_mutex.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_mutex.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_name.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_name.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_opengl.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_opengl.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_opengles.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_opengles.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_opengles2.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_opengles2.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_pixels.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_pixels.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_platform.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_platform.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_power.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_power.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_quit.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_quit.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_rect.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_rect.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_render.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_render.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_rwops.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_rwops.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_scancode.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_scancode.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_sensor.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_sensor.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_shape.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_shape.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_stdinc.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_stdinc.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_surface.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_surface.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_system.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_system.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_syswm.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_syswm.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_thread.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_thread.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_timer.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_timer.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_touch.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_touch.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_types.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_types.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_version.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_version.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -59,7 +59,7 @@
*/
#define SDL_MAJOR_VERSION 2
#define SDL_MINOR_VERSION 30
-#define SDL_PATCHLEVEL 10
+#define SDL_PATCHLEVEL 12
/**
* Macro to determine SDL version program was compiled against.
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_video.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_video.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/begin_code.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/begin_code.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/close_code.h
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/close_code.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Resources/Info.plist
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Resources/Info.plist
@@ -3,7 +3,7 @@
<plist version="1.0">
<dict>
<key>BuildMachineOSBuild</key>
- <string>23H222</string>
+ <string>23H311</string>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
@@ -19,7 +19,7 @@
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleShortVersionString</key>
- <string>2.30.10</string>
+ <string>2.30.12</string>
<key>CFBundleSignature</key>
<string>SDLX</string>
<key>CFBundleSupportedPlatforms</key>
@@ -27,7 +27,7 @@
<string>MacOSX</string>
</array>
<key>CFBundleVersion</key>
- <string>2.30.10</string>
+ <string>2.30.12</string>
<key>DTCompiler</key>
<string>com.apple.compilers.llvm.clang.1_0</string>
<key>DTPlatformBuild</key>
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Resources/License.txt
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/Resources/License.txt
@@ -1,6 +1,6 @@
Simple DirectMedia Layer
-Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
binary files a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/SDL2 b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/SDL2 differ
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/_CodeSignature/CodeResources
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/A/_CodeSignature/CodeResources
@@ -14,11 +14,11 @@
</data>
<key>Resources/Info.plist</key>
<data>
- psBFNKMxE1lQbuBYANGXFzReZ9g=
+ jESzPNfAE68YVYa1JqAGzzZlVgk=
</data>
<key>Resources/License.txt</key>
<data>
- A8VTYHTg+gsOssUp337xdGbdHW0=
+ KX1rSrXSX56fKz5R5KaZfmWONHY=
</data>
<key>Resources/ReadMe.txt</key>
<data>
@@ -35,11 +35,11 @@
<dict>
<key>hash</key>
<data>
- Lfl2hNX45Yauw4rksgqb/XdphDk=
+ szoTZ+UW6M4zlTQFrRMblKZbAy0=
</data>
<key>hash2</key>
<data>
- 5ZHTKNpFq6FjJ9eAzN+z9MzYhRUuH9A2ld+654PJGxA=
+ bW2HEtw13tGn38QlBSvwA6gqlSHRuiD+dJmGvPkelmU=
</data>
</dict>
<key>Headers/SDL_assert.h</key>
@@ -46,11 +46,11 @@
<dict>
<key>hash</key>
<data>
- pYW903dbT5whp+Qrix78+qX0jwE=
+ rIyJvCWybknhk6vSENqN18jIXXA=
</data>
<key>hash2</key>
<data>
- 8rHzmD0mEbISieyXtdyAKk4sVsPwozGVXxO+fPUcwh4=
+ 2g8v9qkDCkSpBiAmIM4CuT20SJU21cGGNdPzoxI7XZY=
</data>
</dict>
<key>Headers/SDL_atomic.h</key>
@@ -57,11 +57,11 @@
<dict>
<key>hash</key>
<data>
- kmlvyb/D7tTnqB5/SPn+uzEVwWo=
+ n7wOXwjIdrZYkzJyuv/Y+Iz+wkg=
</data>
<key>hash2</key>
<data>
- jKCpopkvsvgFD4Kw3f33cJ/NnrINF539gONibFVIB9Q=
+ qmxBKFsgCFIVc8om5S815bks2PaEknnPcjSIamG4edk=
</data>
</dict>
<key>Headers/SDL_audio.h</key>
@@ -68,11 +68,11 @@
<dict>
<key>hash</key>
<data>
- wqkK8HYwYj1T7tvf9G86kUsQfXc=
+ poAS7VnlUFhxdrBEKFP4EvukNUU=
</data>
<key>hash2</key>
<data>
- ZECjsTuBMJKkK+yrAqHruMAJ1Dnk0CN4Uj7isjWLvAU=
+ Tsdxv5wWcs2R359gukhwdjDEUXCs80rfKHUudM9L/NY=
</data>
</dict>
<key>Headers/SDL_bits.h</key>
@@ -79,11 +79,11 @@
<dict>
<key>hash</key>
<data>
- vq8tkT27C0LpOpam3jt6SPKcF38=
+ ZIGoNNpWlYXPn4pUApnxGg2zXSs=
</data>
<key>hash2</key>
<data>
- ThaIbzANB0DHeg/muc+XlpzRJ/gquRny6eg+T3/AZRo=
+ 5oKpBJOEvM17BJXzxC/YQhhCoW2RD6ZZe22I0cPz7lc=
</data>
</dict>
<key>Headers/SDL_blendmode.h</key>
@@ -90,11 +90,11 @@
<dict>
<key>hash</key>
<data>
- UJ3UsJ8PkmGKXFMsWbGjktY/McY=
+ VM6EnTGffUqd6Nqmue+3NLj8Wq0=
</data>
<key>hash2</key>
<data>
- 4fn7qawnnPu+HK3N6XAbRESMCm0k6OKgh/swb9XhboI=
+ xkHYVT2V/aQU64IgEtGDbEbqaBVlScaGPY4h29/ZGU8=
</data>
</dict>
<key>Headers/SDL_clipboard.h</key>
@@ -101,11 +101,11 @@
<dict>
<key>hash</key>
<data>
- RnO4GfCniF8MlqHGKKb46VIosQc=
+ U8R4Lp+xppbP1QXWGc+NQPKcTKQ=
</data>
<key>hash2</key>
<data>
- Wz9oWs2a8ZN4QUrt0nEcldfa+eZpXfIcDToxBX1KzfI=
+ rpwSMt3xs+tfmYr5oSYxJYE/Airao0Merl7SdMQBz0w=
</data>
</dict>
<key>Headers/SDL_config.h</key>
@@ -112,11 +112,11 @@
<dict>
<key>hash</key>
<data>
- ER627OINXZReUtB0UvhF/JFlrFk=
+ DsoHCm+xZ9YPKm8rb+A0i3/aRyM=
</data>
<key>hash2</key>
<data>
- 1anVcKcfwQrtjHH7cteXCA5OCcOgmB7EFfDnCb+gSZk=
+ 5mMRwuIB32Sk1g4B7rFzZRn7FG6U+iHS6khOAucoLFM=
</data>
</dict>
<key>Headers/SDL_config_macosx.h</key>
@@ -123,11 +123,11 @@
<dict>
<key>hash</key>
<data>
- oU+969jqvMDgqHV1WA4yZm1gr9k=
+ GlLgLXuBTBmhZyraeiSZZfvLusQ=
</data>
<key>hash2</key>
<data>
- c9+monw3gWrEZOhytKTuc1hSbhEo+HiCBZ4jJOpjg+M=
+ ouwOfhautxowjLZuYmCpXZ89bZkmIoOrawg13ReI0vE=
</data>
</dict>
<key>Headers/SDL_copying.h</key>
@@ -134,11 +134,11 @@
<dict>
<key>hash</key>
<data>
- eMSBsshKdTT5uzXvgxE8eZJnqU0=
+ 7PsNEqTRutlWBeYrk5he8dfe/wA=
</data>
<key>hash2</key>
<data>
- 8rjaG1pCV5vum9i9zkW6VPXHWLgTjYk+LetUSsfhdho=
+ P5C+RwwY+Z9K7zlETpN07boWbP6xuQ+Z81KGzDOSRkI=
</data>
</dict>
<key>Headers/SDL_cpuinfo.h</key>
@@ -145,11 +145,11 @@
<dict>
<key>hash</key>
<data>
- RzJruo8ktMeBPUMnBCmlnP88g10=
+ cHwIsNWoaM5oT9ErxuvCSDDXLHA=
</data>
<key>hash2</key>
<data>
- SHQnpBJWO9cChWzih9hY5Kcg46q2pfBqbxrhQ8L/IsI=
+ hKt0HxrpiGrTEB12/thJmpdlbDQ2JtZdcnC/hH0TT5w=
</data>
</dict>
<key>Headers/SDL_endian.h</key>
@@ -156,11 +156,11 @@
<dict>
<key>hash</key>
<data>
- a0rFYa+ZaAeCp1OLc1MUigSxv3I=
+ 90rCMZNthI+iguNWrit8fVSPjsM=
</data>
<key>hash2</key>
<data>
- KzsbIelOUqvXltchBHLBt2FYxr6ECXOXllAo8I4cgJQ=
+ YSBWifRu40lnlyJekPyT1ideEfog865npUsdSLtRh/A=
</data>
</dict>
<key>Headers/SDL_error.h</key>
@@ -167,11 +167,11 @@
<dict>
<key>hash</key>
<data>
- 6FbRl5QI1EDOgcFrO88vwobsvgk=
+ h6fXKviOtmcCQIkqzwjMAtC7I7w=
</data>
<key>hash2</key>
<data>
- UK6Fy7gMMKetaQ8oLxZ5/YjRDBnehbSYWdS5NU+0bT8=
+ p4CBIXT/A+jDRwtHaUH3xB0bwNV0aJ/e9jqSexmtG2c=
</data>
</dict>
<key>Headers/SDL_events.h</key>
@@ -178,11 +178,11 @@
<dict>
<key>hash</key>
<data>
- DjRO2l0fKHz9CqTSSEjZmJfk9EQ=
+ OCy3CH+HASANGBaV5Nu/qet8ML8=
</data>
<key>hash2</key>
<data>
- D9kT1tG6R/HNm/q288zZFC6ukV75D69FcWgwYsnc8fc=
+ bNPw20oLa45oKb93b7PaRFgBXrnx93opB0J8KktsYIE=
</data>
</dict>
<key>Headers/SDL_filesystem.h</key>
@@ -189,11 +189,11 @@
<dict>
<key>hash</key>
<data>
- V8DtkwjBL6IAXnY3x3Y3GBN5V/g=
+ qfFFwMlK9JJLK43hGykgojoAsik=
</data>
<key>hash2</key>
<data>
- 0dS4S8y/h4M5KPReX8OBpo3gpKeCLfH7QvK3hnL0Z3Y=
+ Mo+N4byz35KXr7OpoEXNnIlHUFbhUPrp7mcJOUH0yvw=
</data>
</dict>
<key>Headers/SDL_gamecontroller.h</key>
@@ -200,11 +200,11 @@
<dict>
<key>hash</key>
<data>
- JpK2cxtJKHW3otMI+J0LB9HKV0I=
+ hc3zeQXp9ZWClvAWbSFLPfxaYZg=
</data>
<key>hash2</key>
<data>
- 05DHXySUkbPAFsZ06PH81S+gw42DJijM4g5o8b7GhdI=
+ tApp2V4YNcSI1EKEXWbNgVkXEqrCfpXOP76ympkShlg=
</data>
</dict>
<key>Headers/SDL_gesture.h</key>
@@ -211,11 +211,11 @@
<dict>
<key>hash</key>
<data>
- jU1rTN3CXe1BxlIBiYoxftM6MYY=
+ uzP8E0LPqR5s3nir8tN5uIvPB14=
</data>
<key>hash2</key>
<data>
- mgTChHVZZGYvTqJ1zFxt+PZbfvlOAXp1UoiPQtFcsVQ=
+ LqlvJygqx6CgQ/7V4j3X8I9oBzD6upSqiNQc4chNQs4=
</data>
</dict>
<key>Headers/SDL_guid.h</key>
@@ -222,11 +222,11 @@
<dict>
<key>hash</key>
<data>
- L3CGapDqXLCS7ZfawgCKGbSjFQQ=
+ hmhZ70ul+daU2/X6QcLpFsZWcNE=
</data>
<key>hash2</key>
<data>
- qUA3cQGQCyMg0ipdfCbjASvzYDj0Zx7H5ffPcvWfwVw=
+ 0ak+kH41rPl6mJ7/e4DxbksZ0mo0FkC1l1gQBU5sVzQ=
</data>
</dict>
<key>Headers/SDL_haptic.h</key>
@@ -233,11 +233,11 @@
<dict>
<key>hash</key>
<data>
- 701dA7tkS7/YfKQufm9k5x1xP8Q=
+ 2SW7LfyRaUAv3iO6Gg8x82UQPnk=
</data>
<key>hash2</key>
<data>
- ItVljPsplw8TGMOYCO77lZsUfVph375JnUCb+ne/SwY=
+ VSTYzwTdPnxWbeRwnam7P6hXOkkuGsjxEtv34lksIfM=
</data>
</dict>
<key>Headers/SDL_hidapi.h</key>
@@ -244,11 +244,11 @@
<dict>
<key>hash</key>
<data>
- 0fdfgesRdg1vKFY634kkFiZ98Ng=
+ wys7GscP2S3hOuBJaX7Zs1rdABY=
</data>
<key>hash2</key>
<data>
- ePZqkV6EC8UOvqW8YdC6QIqQj1WT+hV8A+iuyMBkTEM=
+ EFTAY5N/RDQ/l28iXt6YU82o4wQfksEvg9NHCe87wiQ=
</data>
</dict>
<key>Headers/SDL_hints.h</key>
@@ -255,11 +255,11 @@
<dict>
<key>hash</key>
<data>
- enJz/y9Kq25SdPiDoBP7yR86jo4=
+ 8grraRkgHQCHCeiTiFmmdVxOnyA=
</data>
<key>hash2</key>
<data>
- gxFXZAIhlPaEbPerAgtEJYDawHaM5Y3B1Ns/t6Hr49A=
+ AvgwtPXKim1Z0DtKiaBF5gErJem9LXMXEQ0mXFTD29Y=
</data>
</dict>
<key>Headers/SDL_joystick.h</key>
@@ -266,11 +266,11 @@
<dict>
<key>hash</key>
<data>
- 4eEXgUywylmhoIROKbFvo6QNEBc=
+ TpEuc3Jj0ZNykIfsJzn5u+eDRKc=
</data>
<key>hash2</key>
<data>
- rdkA+JE+3rkS7e6NHALOLiT5fVjruYpmaEY1q5fD3v0=
+ RCaBlGhjqJhVypyXq7qibu9CY0LVoabsd3EHwkETjbU=
</data>
</dict>
<key>Headers/SDL_keyboard.h</key>
@@ -277,11 +277,11 @@
<dict>
<key>hash</key>
<data>
- O8EeqERllEiSUVekqaGWTi+08SE=
+ g+MPSprjm7vcMsMd/wLkdd9NrU4=
</data>
<key>hash2</key>
<data>
- YY8QUjagHNuyjj7+A2likirYjtVGBLRrLaiL3XFF6pI=
+ 90sol8kJnKmwp1A7cSjHjF97xEjGliZgL4XRAVwRp2I=
</data>
</dict>
<key>Headers/SDL_keycode.h</key>
@@ -288,11 +288,11 @@
<dict>
<key>hash</key>
<data>
- 4M4+qKPCh8Nt9KMtKXhGfEHHGfA=
+ K1YmjsaJPtnAbzM0NtV+49y5ij4=
</data>
<key>hash2</key>
<data>
- RMfX8LUIJxh/jsaJU/xByIJkjv0Ad106DFZHsZv8pbM=
+ ejuRyCNpmBcZPDN7TVguQ9bnjKrixfZBAnHuu27+2hU=
</data>
</dict>
<key>Headers/SDL_loadso.h</key>
@@ -299,11 +299,11 @@
<dict>
<key>hash</key>
<data>
- Asx7u68oasK39D4GZW1/srAylls=
+ CMc5En/AnoWgyx3aLIoSGCFh/jA=
</data>
<key>hash2</key>
<data>
- RiRV45B7euwlx+hcq4qKfEFmHNSH1mkstcUpTVvYSSs=
+ 6FlCQsL/t9rotWnnRwIp0W9T4Nx6bY+Y3Slfn54kWWU=
</data>
</dict>
<key>Headers/SDL_locale.h</key>
@@ -310,11 +310,11 @@
<dict>
<key>hash</key>
<data>
- nRgzIlI3HM0T/WNjLJJEi38OPMo=
+ Ns0HLxFujODEB/R96m+GovJ26C4=
</data>
<key>hash2</key>
<data>
- EMRbgbDbQ+odh3x2XBIyspvdqB2kra0FOf74BrGKgPY=
+ qYrdic2N30C0i6VaXgTjOAUK96ZppaLI/D2X37s1WFI=
</data>
</dict>
<key>Headers/SDL_log.h</key>
@@ -321,11 +321,11 @@
<dict>
<key>hash</key>
<data>
- tAwHSPVWPAZGWPtCSUlHq3JdvyA=
+ 6kYjboxWHr/OWH2wjc9kOyMN5Q0=
</data>
<key>hash2</key>
<data>
- VMaId0hYgkcr2YDH2N33c0i38gPrs9+L/ANMpAiny9g=
+ 1qRi5NQkl7LG3RiMF7Hma9NdikGlSK+U/wrtVz0r0BE=
</data>
</dict>
<key>Headers/SDL_main.h</key>
@@ -332,11 +332,11 @@
<dict>
<key>hash</key>
<data>
- lykTlv+S6hpMWHZrRgY1mlpO2Wg=
+ fcGrpNPxH380Jq7ZnPzdwa1KbWE=
</data>
<key>hash2</key>
<data>
- LxrUoSwibHgYszYJXkUxZNBHRVOQWyteyv+bar2Dq5Y=
+ dpFEnHvFCDQ0zn8PLGsZJ9raacYsCVeV0EESDv4jdjg=
</data>
</dict>
<key>Headers/SDL_messagebox.h</key>
@@ -343,11 +343,11 @@
<dict>
<key>hash</key>
<data>
- 9nzIVO7dY406xCHa2KEIJcO1+j4=
+ PncaWDlEQvYS9yr8gAOrW1E5C7U=
</data>
<key>hash2</key>
<data>
- YU77COq8qX9fvy6hzGxakm44tOIAv/7OsoAKTdF6Az8=
+ 75/uf2pgUcYzuu9q/wH/0Lrw28eFAXKk4EJSARuaPlc=
</data>
</dict>
<key>Headers/SDL_metal.h</key>
@@ -354,11 +354,11 @@
<dict>
<key>hash</key>
<data>
- l3WpnmYNTFJDOc4VfGpqDOzca2A=
+ A6LJSU5rn6dAFNKKfx+k2KETKZw=
</data>
<key>hash2</key>
<data>
- 23emwjTJmRlFUl0ONQTFOXiwp5rZigMgRoNpVs+/3+8=
+ UOhX5Cr2WkRCSjrQ//B0XfYajA9m70rRlVMdIVSS8Ug=
</data>
</dict>
<key>Headers/SDL_misc.h</key>
@@ -365,11 +365,11 @@
<dict>
<key>hash</key>
<data>
- jRjlVh5Vv0djqm/W/za7thtYCqA=
+ sXjqdYBIrnK8e/od5QQ6xwxgOkw=
</data>
<key>hash2</key>
<data>
- ccGvw3H5qbNv1VNvV/f6zgzu62kpdXFy+r3mqfrVeBQ=
+ ltOY0ilt30GRNyuE7T2AW94K97CAE6s4wLZdpLDVIls=
</data>
</dict>
<key>Headers/SDL_mouse.h</key>
@@ -376,11 +376,11 @@
<dict>
<key>hash</key>
<data>
- Gm6qznp86I5NOFZmRjhrT++5TBk=
+ MmWu0BJarAuo75epPR/XXrVP2Ic=
</data>
<key>hash2</key>
<data>
- gwvY1lfpF7M2HbTITBi8QZI+tbgVNvI9O1NxtoxBoRc=
+ bF5OAcFh2FLZAWCOxbcAyHd1VcTgaUUE/Ekg566Q+IA=
</data>
</dict>
<key>Headers/SDL_mutex.h</key>
@@ -387,11 +387,11 @@
<dict>
<key>hash</key>
<data>
- 9vbOLsFVFElR47I5TtXjf4pedQo=
+ gCz3Nv9EzRbH6H8P1AwUlu/OIZ8=
</data>
<key>hash2</key>
<data>
- ffswmnD3jDjyU8iH7L06flM6p819OSNl8NEcZ4kHjoA=
+ g4nhEgVsnXaaodfdhR0GJly8Xq82AlVx/8andTSlS4U=
</data>
</dict>
<key>Headers/SDL_name.h</key>
@@ -398,11 +398,11 @@
<dict>
<key>hash</key>
<data>
- cnC/QF1H86przORFvDObebgj5EA=
+ f29xmTe3SPKpaOPghsKTawVSasI=
</data>
<key>hash2</key>
<data>
- 9fbQrzTVlIE/DhtOXfxt0UmZ0XXGnb8fBspcvPpqzcg=
+ /cbGSHNCIChQVq2LgnNRHHXVvgDRf8HqPrTAZSaxP6M=
</data>
</dict>
<key>Headers/SDL_opengl.h</key>
@@ -409,11 +409,11 @@
<dict>
<key>hash</key>
<data>
- fQnZ5+4QU4D2hdgVZbuajaBHPcs=
+ Q90bBafFHszLeE8yBNeHm12QdlQ=
</data>
<key>hash2</key>
<data>
- 2Ctx+UxI6AbjN3VC0IHf0VO8wTUUi3B3sEMe/Kw7JUo=
+ BPd3egmtGYAVuwj0YHngqICGDqQy3Nzh/8NTTHD0yAY=
</data>
</dict>
<key>Headers/SDL_opengl_glext.h</key>
@@ -431,11 +431,11 @@
<dict>
<key>hash</key>
<data>
- qc/icyfTwVqep3xCBWgeJfq0XXU=
+ n4pNuXLYivjIgXTeEtm8ZQ6qKnk=
</data>
<key>hash2</key>
<data>
- lxKvbpPsHmGoSaeXFm2q1chRJyxVms+CzAJvRtK637k=
+ e/2z/uWUAJUOn6BiAvYcFJzzuPANQw+V1f+PlKxOu1U=
</data>
</dict>
<key>Headers/SDL_opengles2.h</key>
@@ -442,11 +442,11 @@
<dict>
<key>hash</key>
<data>
- jPiOGyiIm0zNA2ktCXPlPZSRNOA=
+ z4dMiAEn9NQnUdUMteX76RJ6N5M=
</data>
<key>hash2</key>
<data>
- gz/JKk8t4jDIXWlHuYzPYJMnYJoVRKMaEGKxYB69dHA=
+ /y6K6JOn+tGufX9VQj1HRct0mtVv1OsrLB/V60KuRwM=
</data>
</dict>
<key>Headers/SDL_opengles2_gl2.h</key>
@@ -497,11 +497,11 @@
<dict>
<key>hash</key>
<data>
- MYcJ6ZiKAY8zdgCwA/FlUbT5a/4=
+ 1fIwoEe2ktQb6D5A7PQ7mi2Oqec=
</data>
<key>hash2</key>
<data>
- k/Hwy+Me3zpo9gYWt1cxsQAkMKtg8FS2oZLB5H1IHms=
+ 7geaawuRwA91yelwtNBEl0b/VR+r/CSr84vVYa1YIM4=
</data>
</dict>
<key>Headers/SDL_platform.h</key>
@@ -508,11 +508,11 @@
<dict>
<key>hash</key>
<data>
- bH/oQ0Uds7ktuIR3ri3CrKrbiHk=
+ F8OSz+awKv1XDtEakTW8vo55/Vs=
</data>
<key>hash2</key>
<data>
- 5JZ09EpO7JI8dmIr//wuD70hXoeE4B8sWn3H8iavLF8=
+ SNI/VCAQ35ReFL9qF5xj8Lhu4a/Prm53nTK7tRA1jhg=
</data>
</dict>
<key>Headers/SDL_power.h</key>
@@ -519,11 +519,11 @@
<dict>
<key>hash</key>
<data>
- alQ7owSLOu8oi+p5TCVtXLfg49U=
+ +yLHw43h1fJujEDgyY7jpN1txU0=
</data>
<key>hash2</key>
<data>
- /a3V+xg47qsi9m/jjhPv4j5epEExGUpm65R9DBKOgdU=
+ IjPm5fw8G4fGmIEDbiQukZxBn9rYKt8OSIutX9QfZuA=
</data>
</dict>
<key>Headers/SDL_quit.h</key>
@@ -530,11 +530,11 @@
<dict>
<key>hash</key>
<data>
- HBhMaa9dpoxys7lX8bShTrrw26c=
+ qT1qlKVJIRMfIje3cQSmKU9SjAo=
</data>
<key>hash2</key>
<data>
- Zy837L/c8/F/z/t7UE/2IKDrEYSf+/9IM+y/rifeK9Q=
+ EysJnWaW2IwfC6s/E8x2vKwbbwbfiW8j7/OjKcfrPp8=
</data>
</dict>
<key>Headers/SDL_rect.h</key>
@@ -541,11 +541,11 @@
<dict>
<key>hash</key>
<data>
- TMAFS6Xx6FfFUZosiA08UZGMO7Y=
+ AyXLTBMooPXNWI9syN7FLtZ8EGQ=
</data>
<key>hash2</key>
<data>
- B6FuiG3NCFAQRp2UVMcmgSowkeZ1hP5VCdzArvGYEjk=
+ s8YsZal0Dzfp45WhQh2Sop4hJ/lPGeHUwTHZS4M8+Pc=
</data>
</dict>
<key>Headers/SDL_render.h</key>
@@ -552,11 +552,11 @@
<dict>
<key>hash</key>
<data>
- kUCWkbsEF23oO4MCCs2EbwDQusI=
+ aWAMDKmt93Ao4AU5feyBSJnbpyg=
</data>
<key>hash2</key>
<data>
- FRXH4yrITpDqn2IBdQ2Lbx7Jn6o0UuPRsjd4OWj78yI=
+ 0syhQHuuYccT9K/0c1YSSs7AIFZdWaj1XpbK6XTjIvg=
</data>
</dict>
<key>Headers/SDL_revision.h</key>
@@ -574,11 +574,11 @@
<dict>
<key>hash</key>
<data>
- X/FUhtgu4xCdkYBGb+ldcBcGZsY=
+ Ki47XgLI9PP9BsgCOocGnLd8YJk=
</data>
<key>hash2</key>
<data>
- a2EUuuUAqW0fvq6RZT8pXnh5L/5v0fQWSLdrujvKMqA=
+ nLeSv+IRZOlqDFrK+Kq/oTCotwGs/McKAHZPlhMm0k0=
</data>
</dict>
<key>Headers/SDL_scancode.h</key>
@@ -585,11 +585,11 @@
<dict>
<key>hash</key>
<data>
- KoO35m+cbDILMQvS85Ns37rEDjY=
+ MagJ1t5D9cUUdjfJxO4SSxKn/s0=
</data>
<key>hash2</key>
<data>
- i/34qMDYybTiAylZuNfCadHerKiHZ06/kBn6i/txqLk=
+ v84LnU16TV6RKwAcwhP0j+ypcZ8tYazJ5x41L8WXH9E=
</data>
</dict>
<key>Headers/SDL_sensor.h</key>
@@ -596,11 +596,11 @@
<dict>
<key>hash</key>
<data>
- dt0dQe91kXtmVwHldbMs3pSqKuE=
+ ekOOqi8kKKNwFU1pgFpq1V+YR4w=
</data>
<key>hash2</key>
<data>
- +J/fkDU0AnB1KtUPYvFD3BIcHr0mXLJoyHvrtofnlRs=
+ lR1mKNtje2LhTqfwh06Adf1aF8XPb7ZSQnwLlDND9F4=
</data>
</dict>
<key>Headers/SDL_shape.h</key>
@@ -607,11 +607,11 @@
<dict>
<key>hash</key>
<data>
- kpJhZUECgTha8Y9BJVRTLbsu6p8=
+ +IzMhEcjMEVIuOFt1uwMqmL6v7E=
</data>
<key>hash2</key>
<data>
- DsOpuFRKUgZwW8zSjrvgzY5QiVnH4qzikkNFfE4R784=
+ 7M4n2rfnvCfTE5+nS/tJp6iA35L6czERKuv9iQlC/n0=
</data>
</dict>
<key>Headers/SDL_stdinc.h</key>
@@ -618,11 +618,11 @@
<dict>
<key>hash</key>
<data>
- DdRe/lNH6geRuVqhs5huipbzLj8=
+ 8QMuXJYqaxRMPcv5u+iv7E67LBs=
</data>
<key>hash2</key>
<data>
- mMaKFT0Acqvtg4K6gEpb8NUklIR8L00B8JxlSl/z8Oc=
+ EdsumpR5mB5VaJVsyvZgYGJ0BLa9jA5lm66/V+hOo+o=
</data>
</dict>
<key>Headers/SDL_surface.h</key>
@@ -629,11 +629,11 @@
<dict>
<key>hash</key>
<data>
- WtK2vSy/4+ez9IC9XEutgDDYqEQ=
+ hcQ0Xf+oe5CIPdK/p0s3EYvn1Jw=
</data>
<key>hash2</key>
<data>
- 1j47d6UhPnUkiWpFDu/JiESXUSIoJc9usypSBXhkSXk=
+ L4fQk7WiPrvRH2KN1BAREdwHFF/iFV0vbhi+Yfk2ck0=
</data>
</dict>
<key>Headers/SDL_system.h</key>
@@ -640,11 +640,11 @@
<dict>
<key>hash</key>
<data>
- 2hXj/s+4iotUYQ/qacOSBEGZOwg=
+ 4BQqRt25rE6gz3HZIqrWc0sVChs=
</data>
<key>hash2</key>
<data>
- 1UwQf2RE20ecBIH+hfGWJftxYFTVSAzailQDO2A4TNg=
+ mt+VVfR8xWZ6HFwR2IPTsVioxlle1/l7BM8/QlhlhNs=
</data>
</dict>
<key>Headers/SDL_syswm.h</key>
@@ -651,11 +651,11 @@
<dict>
<key>hash</key>
<data>
- 3bhBPpfxPHznhnK4qD/z3JMAH6M=
+ eGil06WtbiBMBrBlfGTfU59ilGI=
</data>
<key>hash2</key>
<data>
- MPw8TZLw/QvquHCjlJlNDPjjt8f1IlMKzMfWgn1EF3U=
+ cExBYrufNgnE2h2D/+g4e9P78tw78U6lwPt/6SAh99o=
</data>
</dict>
<key>Headers/SDL_thread.h</key>
@@ -662,11 +662,11 @@
<dict>
<key>hash</key>
<data>
- 1EtqS0N8COfcjGjv8z6z+LQAX3U=
+ nhxs2YXZEAAABhCCly6FBwJyIVw=
</data>
<key>hash2</key>
<data>
- l8BOBXAsdov/Q/EbiOiV79CL9dMEnX4y5a/ET0zjVcM=
+ jProCOb6lntIte2C8xsnYMedNUYCaMgCk4kzf1JkRhY=
</data>
</dict>
<key>Headers/SDL_timer.h</key>
@@ -673,11 +673,11 @@
<dict>
<key>hash</key>
<data>
- HA8k26mZn4Ws75q3lUPqNM195Ms=
+ F4SP5Obcx3huEZ4MP3zlMh+gVdw=
</data>
<key>hash2</key>
<data>
- F20rU5/Zn2KplGmTtClppmMyMWHLeVaEONbGDAwZ5CI=
+ jzrSTcXaNBjpj1IKY/ADhiiuudJe7gZw9ND2Oa0FyW4=
</data>
</dict>
<key>Headers/SDL_touch.h</key>
@@ -684,11 +684,11 @@
<dict>
<key>hash</key>
<data>
- MIP5UyBQZhIYlI9EqCgc5hJdhlI=
+ 6vhIvHe/ZmQnHrZDIOngBL+KLVU=
</data>
<key>hash2</key>
<data>
- D0XePcMfVFz1/CDx1TMFLtaZ1jo7wIcXt5wvjqVuipU=
+ /Q/C0mRXFy4EXe69A+ygrV60pojHzI+UEh1hpw7a5Uw=
</data>
</dict>
<key>Headers/SDL_types.h</key>
@@ -695,11 +695,11 @@
<dict>
<key>hash</key>
<data>
- xbfdEra92WqYikDB55Po6KyR06E=
+ +ft8hvbcKHar7v/aTUNeVxAyw0Y=
</data>
<key>hash2</key>
<data>
- 1Zr6IHz0DVKoehzBggWv99qlrZ5SWYkYxt7cVypGIH4=
+ qmvIcFXNA1r8zfJC5XZYLn3FCLq9YWQVZ2CmTxPRKw4=
</data>
</dict>
<key>Headers/SDL_version.h</key>
@@ -706,11 +706,11 @@
<dict>
<key>hash</key>
<data>
- V1WhIT6vXhEOcfu+cDo+LwvkvRE=
+ I/lyzuAeveDmThBIuOC4DUgKMic=
</data>
<key>hash2</key>
<data>
- TaCZnrgTfgRARYIobSD3i3KArXOQUxuYjG/sFBoYo0k=
+ EBYxbRDZpHP9GSqf6WgKA0v/IKaOgflKPE2VV6/fRxY=
</data>
</dict>
<key>Headers/SDL_video.h</key>
@@ -717,11 +717,11 @@
<dict>
<key>hash</key>
<data>
- YH5SyVC9XgoGpFkq3vCcdbQd0uI=
+ UlQTZYCQoY31S36HghsdeKBfe1I=
</data>
<key>hash2</key>
<data>
- Z5MS/bT5DfdUhSXGNao0cZWNyObx6ruc+zTPuGbg1s4=
+ eCHeiPp27E6Uuy+yVWhAnMv90n9T18stOMqH8xRtw1Q=
</data>
</dict>
<key>Headers/SDL_vulkan.h</key>
@@ -739,11 +739,11 @@
<dict>
<key>hash</key>
<data>
- I6nkG0qY9s2AvaEtVSrocQiX4tQ=
+ 7za3SOa60MgSMnFyUMAE51KiJVU=
</data>
<key>hash2</key>
<data>
- 8uTiBDsf/cQ5+5utD1yCakQ8kX788aZUQFgKId33VjA=
+ C2GhWOTumDTaCzX+9soBe5KEB8QOvC++hIQQc4whBbE=
</data>
</dict>
<key>Headers/close_code.h</key>
@@ -750,11 +750,11 @@
<dict>
<key>hash</key>
<data>
- U4gdDidHLAHPBhe/aWRbzA1M9BQ=
+ Hv+nlnxXg4WGAt4qPpTk93cX3R0=
</data>
<key>hash2</key>
<data>
- ZczKDtPfhp/KAaAzO6wpeeU4I1z0Pn+FiHTmWV14GlM=
+ RZnpztunRR/wemMG8LdTG+7QWxxaZbGiYT0bdxvkP9o=
</data>
</dict>
<key>Resources/CMake/sdl2-config-version.cmake</key>
@@ -783,11 +783,11 @@
<dict>
<key>hash</key>
<data>
- psBFNKMxE1lQbuBYANGXFzReZ9g=
+ jESzPNfAE68YVYa1JqAGzzZlVgk=
</data>
<key>hash2</key>
<data>
- 4xu3tgP1KITWbi4Aj0nk5zBH4+4IL2X4goDmHNl+IGA=
+ qm21JRCtQ5em6iywJ3ZXyBn3vKdbwBOfTmIOo+GAAH8=
</data>
</dict>
<key>Resources/License.txt</key>
@@ -794,11 +794,11 @@
<dict>
<key>hash</key>
<data>
- A8VTYHTg+gsOssUp337xdGbdHW0=
+ KX1rSrXSX56fKz5R5KaZfmWONHY=
</data>
<key>hash2</key>
<data>
- UN4cvaEc5FbrLcR2jBIsS5miYCucbhF1iAKC2EMtJhM=
+ N7l1tSc3NOoVf7HjY9BhkQNvKJ7Kd2f3NpZ4Fr7dFW8=
</data>
</dict>
<key>Resources/ReadMe.txt</key>
--- a/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/Current
+++ b/release/macos/ft2-clone-macos.app/Contents/Frameworks/SDL2.framework/Versions/Current
@@ -1,2 +1,0 @@
-A
-\ No newline at end of file
binary files a/release/win32/SDL2.dll b/release/win32/SDL2.dll differ
binary files a/release/win64/SDL2.dll b/release/win64/SDL2.dll differ
--- a/src/LICENSE.txt
+++ b/src/LICENSE.txt
@@ -1,6 +1,6 @@
BSD 3-clause license:
-Copyright (c) 2016-2024, Olav S�rensen
+Copyright (c) 2016-2025, Olav S�rensen
All rights reserved.
Redistribution and use in source and binary forms, with or without
@@ -17,10 +17,11 @@
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL OLAV S�RENSEN BE LIABLE FOR ANY
+DISCLAIMED. IN NO EVENT SHALL OLAV S�RENSEN BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
\ No newline at end of file
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+\ No newline at end of file
--- a/src/ft2_about.c
+++ b/src/ft2_about.c
@@ -9,8 +9,9 @@
#include "ft2_pattern_ed.h" // exitPatternEditorExtended()
#include "ft2_config.h"
-#define NUM_STARS 1500 /* for new about screen only */
-#define LOGO_ALPHA_PERCENTAGE 72
+#define OLD_NUM_STARS 1000
+#define NUM_STARS 1500
+#define LOGO_ALPHA_PERCENTAGE 75
#define STARSHINE_ALPHA_PERCENTAGE 25
#define SINUS_PHASES 1024
#define ABOUT_SCREEN_X 3
@@ -45,92 +46,7 @@
vector_t x, y, z;
} matrix_t;
-static const uint16_t sinusTables[256 * 5] =
-{
- 0x0000,0x00C9,0x0192,0x025B,0x0324,0x03ED,0x04B6,0x057F,0x0648,0x0711,0x07D9,0x08A2,0x096A,0x0A33,0x0AFB,0x0BC3,
- 0x0C8C,0x0D54,0x0E1C,0x0EE3,0x0FAB,0x1072,0x113A,0x1201,0x12C8,0x138F,0x1455,0x151C,0x15E2,0x16A8,0x176D,0x1833,
- 0x18F8,0x19BD,0x1A82,0x1B47,0x1C0B,0x1CCF,0x1D93,0x1E56,0x1F19,0x1FDC,0x209F,0x2161,0x2223,0x22E5,0x23A6,0x2467,
- 0x2527,0x25E8,0x26A8,0x2767,0x2826,0x28E5,0x29A3,0x2A61,0x2B1F,0x2BDC,0x2C98,0x2D55,0x2E10,0x2ECC,0x2F87,0x3041,
- 0x30FB,0x31B5,0x326E,0x3326,0x33DE,0x3496,0x354D,0x3603,0x36B9,0x376F,0x3824,0x38D8,0x398C,0x3A3F,0x3AF2,0x3BA4,
- 0x3C56,0x3D07,0x3DB7,0x3E67,0x3F16,0x3FC5,0x4073,0x4120,0x41CD,0x4279,0x4325,0x43D0,0x447A,0x4523,0x45CC,0x4674,
- 0x471C,0x47C3,0x4869,0x490E,0x49B3,0x4A57,0x4AFA,0x4B9D,0x4C3F,0x4CE0,0x4D80,0x4E20,0x4EBF,0x4F5D,0x4FFA,0x5097,
- 0x5133,0x51CE,0x5268,0x5301,0x539A,0x5432,0x54C9,0x555F,0x55F4,0x5689,0x571D,0x57AF,0x5841,0x58D3,0x5963,0x59F2,
- 0x5A81,0x5B0F,0x5B9C,0x5C28,0x5CB3,0x5D3D,0x5DC6,0x5E4F,0x5ED6,0x5F5D,0x5FE2,0x6067,0x60EB,0x616E,0x61EF,0x6270,
- 0x62F0,0x6370,0x63EE,0x646B,0x64E7,0x6562,0x65DC,0x6656,0x66CE,0x6745,0x67BB,0x6831,0x68A5,0x6918,0x698A,0x69FC,
- 0x6A6C,0x6ADB,0x6B49,0x6BB6,0x6C22,0x6C8E,0x6CF8,0x6D60,0x6DC8,0x6E2F,0x6E95,0x6EFA,0x6F5D,0x6FC0,0x7021,0x7082,
- 0x70E1,0x713F,0x719C,0x71F8,0x7253,0x72AD,0x7306,0x735E,0x73B4,0x740A,0x745E,0x74B1,0x7503,0x7554,0x75A4,0x75F2,
- 0x7640,0x768C,0x76D7,0x7722,0x776A,0x77B2,0x77F9,0x783E,0x7883,0x78C6,0x7908,0x7949,0x7988,0x79C7,0x7A04,0x7A40,
- 0x7A7B,0x7AB5,0x7AED,0x7B25,0x7B5B,0x7B90,0x7BC4,0x7BF7,0x7C28,0x7C58,0x7C87,0x7CB5,0x7CE2,0x7D0D,0x7D38,0x7D61,
- 0x7D88,0x7DAF,0x7DD4,0x7DF9,0x7E1C,0x7E3D,0x7E5E,0x7E7D,0x7E9B,0x7EB8,0x7ED4,0x7EEE,0x7F08,0x7F20,0x7F36,0x7F4C,
- 0x7F60,0x7F73,0x7F85,0x7F96,0x7FA5,0x7FB3,0x7FC0,0x7FCC,0x7FD7,0x7FE0,0x7FE8,0x7FEF,0x7FF4,0x7FF8,0x7FFC,0x7FFD,
- 0x7FFE,0x7FFD,0x7FFC,0x7FF8,0x7FF4,0x7FEF,0x7FE8,0x7FE0,0x7FD7,0x7FCC,0x7FC0,0x7FB3,0x7FA5,0x7F96,0x7F85,0x7F73,
- 0x7F60,0x7F4C,0x7F36,0x7F20,0x7F08,0x7EEE,0x7ED4,0x7EB8,0x7E9B,0x7E7D,0x7E5E,0x7E3D,0x7E1C,0x7DF9,0x7DD4,0x7DAF,
- 0x7D88,0x7D61,0x7D38,0x7D0D,0x7CE2,0x7CB5,0x7C87,0x7C58,0x7C28,0x7BF7,0x7BC4,0x7B90,0x7B5B,0x7B25,0x7AED,0x7AB5,
- 0x7A7B,0x7A40,0x7A04,0x79C7,0x7988,0x7949,0x7908,0x78C6,0x7883,0x783E,0x77F9,0x77B2,0x776A,0x7722,0x76D7,0x768C,
- 0x7640,0x75F2,0x75A4,0x7554,0x7503,0x74B1,0x745E,0x740A,0x73B4,0x735E,0x7306,0x72AD,0x7253,0x71F8,0x719C,0x713F,
- 0x70E1,0x7082,0x7021,0x6FC0,0x6F5D,0x6EFA,0x6E95,0x6E2F,0x6DC8,0x6D60,0x6CF8,0x6C8E,0x6C22,0x6BB6,0x6B49,0x6ADB,
- 0x6A6C,0x69FC,0x698A,0x6918,0x68A5,0x6831,0x67BB,0x6745,0x66CE,0x6656,0x65DC,0x6562,0x64E7,0x646B,0x63EE,0x6370,
- 0x62F0,0x6270,0x61EF,0x616E,0x60EB,0x6067,0x5FE2,0x5F5D,0x5ED6,0x5E4F,0x5DC6,0x5D3D,0x5CB3,0x5C28,0x5B9C,0x5B0F,
- 0x5A81,0x59F2,0x5963,0x58D3,0x5841,0x57AF,0x571D,0x5689,0x55F4,0x555F,0x54C9,0x5432,0x539A,0x5301,0x5268,0x51CE,
- 0x5133,0x5097,0x4FFA,0x4F5D,0x4EBF,0x4E20,0x4D80,0x4CE0,0x4C3F,0x4B9D,0x4AFA,0x4A57,0x49B3,0x490E,0x4869,0x47C3,
- 0x471C,0x4674,0x45CC,0x4523,0x447A,0x43D0,0x4325,0x4279,0x41CD,0x4120,0x4073,0x3FC5,0x3F16,0x3E67,0x3DB7,0x3D07,
- 0x3C56,0x3BA4,0x3AF2,0x3A3F,0x398C,0x38D8,0x3824,0x376F,0x36B9,0x3603,0x354D,0x3496,0x33DE,0x3326,0x326E,0x31B5,
- 0x30FB,0x3041,0x2F87,0x2ECC,0x2E10,0x2D55,0x2C98,0x2BDC,0x2B1F,0x2A61,0x29A3,0x28E5,0x2826,0x2767,0x26A8,0x25E8,
- 0x2527,0x2467,0x23A6,0x22E5,0x2223,0x2161,0x209F,0x1FDC,0x1F19,0x1E56,0x1D93,0x1CCF,0x1C0B,0x1B47,0x1A82,0x19BD,
- 0x18F8,0x1833,0x176D,0x16A8,0x15E2,0x151C,0x1455,0x138F,0x12C8,0x1201,0x113A,0x1072,0x0FAB,0x0EE3,0x0E1C,0x0D54,
- 0x0C8C,0x0BC3,0x0AFB,0x0A33,0x096A,0x08A2,0x07D9,0x0711,0x0648,0x057F,0x04B6,0x03ED,0x0324,0x025B,0x0192,0x00C9,
- 0x0000,0xFF37,0xFE6E,0xFDA5,0xFCDC,0xFC13,0xFB4A,0xFA81,0xF9B8,0xF8EF,0xF827,0xF75E,0xF696,0xF5CD,0xF505,0xF43D,
- 0xF374,0xF2AC,0xF1E4,0xF11D,0xF055,0xEF8E,0xEEC6,0xEDFF,0xED38,0xEC71,0xEBAB,0xEAE4,0xEA1E,0xE958,0xE893,0xE7CD,
- 0xE708,0xE643,0xE57E,0xE4B9,0xE3F5,0xE331,0xE26D,0xE1AA,0xE0E7,0xE024,0xDF61,0xDE9F,0xDDDD,0xDD1B,0xDC5A,0xDB99,
- 0xDAD9,0xDA18,0xD958,0xD899,0xD7DA,0xD71B,0xD65D,0xD59F,0xD4E1,0xD424,0xD368,0xD2AB,0xD1F0,0xD134,0xD079,0xCFBF,
- 0xCF05,0xCE4B,0xCD92,0xCCDA,0xCC22,0xCB6A,0xCAB3,0xC9FD,0xC947,0xC891,0xC7DC,0xC728,0xC674,0xC5C1,0xC50E,0xC45C,
- 0xC3AA,0xC2F9,0xC249,0xC199,0xC0EA,0xC03B,0xBF8D,0xBEE0,0xBE33,0xBD87,0xBCDB,0xBC30,0xBB86,0xBADD,0xBA34,0xB98C,
- 0xB8E4,0xB83D,0xB797,0xB6F2,0xB64D,0xB5A9,0xB506,0xB463,0xB3C1,0xB320,0xB280,0xB1E0,0xB141,0xB0A3,0xB006,0xAF69,
- 0xAECD,0xAE32,0xAD98,0xACFF,0xAC66,0xABCE,0xAB37,0xAAA1,0xAA0C,0xA977,0xA8E3,0xA851,0xA7BF,0xA72D,0xA69D,0xA60E,
- 0xA57F,0xA4F1,0xA464,0xA3D8,0xA34D,0xA2C3,0xA23A,0xA1B1,0xA12A,0xA0A3,0xA01E,0x9F99,0x9F15,0x9E92,0x9E11,0x9D90,
- 0x9D10,0x9C90,0x9C12,0x9B95,0x9B19,0x9A9E,0x9A24,0x99AA,0x9932,0x98BB,0x9845,0x97CF,0x975B,0x96E8,0x9676,0x9604,
- 0x9594,0x9525,0x94B7,0x944A,0x93DE,0x9372,0x9308,0x92A0,0x9238,0x91D1,0x916B,0x9106,0x90A3,0x9040,0x8FDF,0x8F7E,
- 0x8F1F,0x8EC1,0x8E64,0x8E08,0x8DAD,0x8D53,0x8CFA,0x8CA2,0x8C4C,0x8BF6,0x8BA2,0x8B4F,0x8AFD,0x8AAC,0x8A5C,0x8A0E,
- 0x89C0,0x8974,0x8929,0x88DE,0x8896,0x884E,0x8807,0x87C2,0x877D,0x873A,0x86F8,0x86B7,0x8678,0x8639,0x85FC,0x85C0,
- 0x8585,0x854B,0x8513,0x84DB,0x84A5,0x8470,0x843C,0x8409,0x83D8,0x83A8,0x8379,0x834B,0x831E,0x82F3,0x82C8,0x829F,
- 0x8278,0x8251,0x822C,0x8207,0x81E4,0x81C3,0x81A2,0x8183,0x8165,0x8148,0x812C,0x8112,0x80F8,0x80E0,0x80CA,0x80B4,
- 0x80A0,0x808D,0x807B,0x806A,0x805B,0x804D,0x8040,0x8034,0x8029,0x8020,0x8018,0x8011,0x800C,0x8008,0x8004,0x8003,
- 0x8002,0x8003,0x8004,0x8008,0x800C,0x8011,0x8018,0x8020,0x8029,0x8034,0x8040,0x804D,0x805B,0x806A,0x807B,0x808D,
- 0x80A0,0x80B4,0x80CA,0x80E0,0x80F8,0x8112,0x812C,0x8148,0x8165,0x8183,0x81A2,0x81C3,0x81E4,0x8207,0x822C,0x8251,
- 0x8278,0x829F,0x82C8,0x82F3,0x831E,0x834B,0x8379,0x83A8,0x83D8,0x8409,0x843C,0x8470,0x84A5,0x84DB,0x8513,0x854B,
- 0x8585,0x85C0,0x85FC,0x8639,0x8678,0x86B7,0x86F8,0x873A,0x877D,0x87C2,0x8807,0x884E,0x8896,0x88DE,0x8929,0x8974,
- 0x89C0,0x8A0E,0x8A5C,0x8AAC,0x8AFD,0x8B4F,0x8BA2,0x8BF6,0x8C4C,0x8CA2,0x8CFA,0x8D53,0x8DAD,0x8E08,0x8E64,0x8EC1,
- 0x8F1F,0x8F7E,0x8FDF,0x9040,0x90A3,0x9106,0x916B,0x91D1,0x9238,0x92A0,0x9308,0x9372,0x93DE,0x944A,0x94B7,0x9525,
- 0x9594,0x9604,0x9676,0x96E8,0x975B,0x97CF,0x9845,0x98BB,0x9932,0x99AA,0x9A24,0x9A9E,0x9B19,0x9B95,0x9C12,0x9C90,
- 0x9D10,0x9D90,0x9E11,0x9E92,0x9F15,0x9F99,0xA01E,0xA0A3,0xA12A,0xA1B1,0xA23A,0xA2C3,0xA34D,0xA3D8,0xA464,0xA4F1,
- 0xA57F,0xA60E,0xA69D,0xA72D,0xA7BF,0xA851,0xA8E3,0xA977,0xAA0C,0xAAA1,0xAB37,0xABCE,0xAC66,0xACFF,0xAD98,0xAE32,
- 0xAECD,0xAF69,0xB006,0xB0A3,0xB141,0xB1E0,0xB280,0xB320,0xB3C1,0xB463,0xB506,0xB5A9,0xB64D,0xB6F2,0xB797,0xB83D,
- 0xB8E4,0xB98C,0xBA34,0xBADD,0xBB86,0xBC30,0xBCDB,0xBD87,0xBE33,0xBEE0,0xBF8D,0xC03B,0xC0EA,0xC199,0xC249,0xC2F9,
- 0xC3AA,0xC45C,0xC50E,0xC5C1,0xC674,0xC728,0xC7DC,0xC891,0xC947,0xC9FD,0xCAB3,0xCB6A,0xCC22,0xCCDA,0xCD92,0xCE4B,
- 0xCF05,0xCFBF,0xD079,0xD134,0xD1F0,0xD2AB,0xD368,0xD424,0xD4E1,0xD59F,0xD65D,0xD71B,0xD7DA,0xD899,0xD958,0xDA18,
- 0xDAD9,0xDB99,0xDC5A,0xDD1B,0xDDDD,0xDE9F,0xDF61,0xE024,0xE0E7,0xE1AA,0xE26D,0xE331,0xE3F5,0xE4B9,0xE57E,0xE643,
- 0xE708,0xE7CD,0xE893,0xE958,0xEA1E,0xEAE4,0xEBAB,0xEC71,0xED38,0xEDFF,0xEEC6,0xEF8E,0xF055,0xF11D,0xF1E4,0xF2AC,
- 0xF374,0xF43D,0xF505,0xF5CD,0xF696,0xF75E,0xF827,0xF8EF,0xF9B8,0xFA81,0xFB4A,0xFC13,0xFCDC,0xFDA5,0xFE6E,0xFF37,
- 0x0000,0x00C9,0x0192,0x025B,0x0324,0x03ED,0x04B6,0x057F,0x0648,0x0711,0x07D9,0x08A2,0x096A,0x0A33,0x0AFB,0x0BC3,
- 0x0C8C,0x0D54,0x0E1C,0x0EE3,0x0FAB,0x1072,0x113A,0x1201,0x12C8,0x138F,0x1455,0x151C,0x15E2,0x16A8,0x176D,0x1833,
- 0x18F8,0x19BD,0x1A82,0x1B47,0x1C0B,0x1CCF,0x1D93,0x1E56,0x1F19,0x1FDC,0x209F,0x2161,0x2223,0x22E5,0x23A6,0x2467,
- 0x2527,0x25E8,0x26A8,0x2767,0x2826,0x28E5,0x29A3,0x2A61,0x2B1F,0x2BDC,0x2C98,0x2D55,0x2E10,0x2ECC,0x2F87,0x3041,
- 0x30FB,0x31B5,0x326E,0x3326,0x33DE,0x3496,0x354D,0x3603,0x36B9,0x376F,0x3824,0x38D8,0x398C,0x3A3F,0x3AF2,0x3BA4,
- 0x3C56,0x3D07,0x3DB7,0x3E67,0x3F16,0x3FC5,0x4073,0x4120,0x41CD,0x4279,0x4325,0x43D0,0x447A,0x4523,0x45CC,0x4674,
- 0x471C,0x47C3,0x4869,0x490E,0x49B3,0x4A57,0x4AFA,0x4B9D,0x4C3F,0x4CE0,0x4D80,0x4E20,0x4EBF,0x4F5D,0x4FFA,0x5097,
- 0x5133,0x51CE,0x5268,0x5301,0x539A,0x5432,0x54C9,0x555F,0x55F4,0x5689,0x571D,0x57AF,0x5841,0x58D3,0x5963,0x59F2,
- 0x5A81,0x5B0F,0x5B9C,0x5C28,0x5CB3,0x5D3D,0x5DC6,0x5E4F,0x5ED6,0x5F5D,0x5FE2,0x6067,0x60EB,0x616E,0x61EF,0x6270,
- 0x62F0,0x6370,0x63EE,0x646B,0x64E7,0x6562,0x65DC,0x6656,0x66CE,0x6745,0x67BB,0x6831,0x68A5,0x6918,0x698A,0x69FC,
- 0x6A6C,0x6ADB,0x6B49,0x6BB6,0x6C22,0x6C8E,0x6CF8,0x6D60,0x6DC8,0x6E2F,0x6E95,0x6EFA,0x6F5D,0x6FC0,0x7021,0x7082,
- 0x70E1,0x713F,0x719C,0x71F8,0x7253,0x72AD,0x7306,0x735E,0x73B4,0x740A,0x745E,0x74B1,0x7503,0x7554,0x75A4,0x75F2,
- 0x7640,0x768C,0x76D7,0x7722,0x776A,0x77B2,0x77F9,0x783E,0x7883,0x78C6,0x7908,0x7949,0x7988,0x79C7,0x7A04,0x7A40,
- 0x7A7B,0x7AB5,0x7AED,0x7B25,0x7B5B,0x7B90,0x7BC4,0x7BF7,0x7C28,0x7C58,0x7C87,0x7CB5,0x7CE2,0x7D0D,0x7D38,0x7D61,
- 0x7D88,0x7DAF,0x7DD4,0x7DF9,0x7E1C,0x7E3D,0x7E5E,0x7E7D,0x7E9B,0x7EB8,0x7ED4,0x7EEE,0x7F08,0x7F20,0x7F36,0x7F4C,
- 0x7F60,0x7F73,0x7F85,0x7F96,0x7FA5,0x7FB3,0x7FC0,0x7FCC,0x7FD7,0x7FE0,0x7FE8,0x7FEF,0x7FF4,0x7FF8,0x7FFC,0x7FFD
-};
-
static const uint8_t starColConv[24] = { 2,2,2,2,2,2,2,2, 2,2,2,1,1,1,3,3, 3,3,3,3,3,3,3,3 };
-static const int16_t *sin32767 = (const int16_t *)sinusTables, *cos32767 = (const int16_t *)&sinusTables[256];
static char *customText0 = "Original FT2 by Magnus \"Vogue\" H\224gdahl & Fredrik \"Mr.H\" Huss";
static char *customText1 = "Clone by Olav \"8bitbubsy\" S\233rensen";
static char *customText2 = "https://16-bits.org";
@@ -137,44 +53,28 @@
static char customText3[256];
static int16_t customText0X, customText0Y, customText1Y, customText2Y;
static int16_t customText3Y, customText1X, customText2X, customText3X;
-static int16_t sin16[SINUS_PHASES], hastighet;
-static int32_t lastStarScreenPos[1000];
-static uint16_t logoAlpha16, starShineAlpha16;
-static uint32_t randSeed, sinp1, sinp2;
-static oldVector_t starcrd[1000];
-static oldRotate_t star_a;
-static oldMatrix_t starmat;
+static int16_t sin16[SINUS_PHASES], zSpeed;
+static int32_t lastStarScreenPos[OLD_NUM_STARS];
+static const uint16_t logoAlpha16 = (65535 * LOGO_ALPHA_PERCENTAGE) / 100;
+static const uint16_t starShineAlpha16 = (65535 * STARSHINE_ALPHA_PERCENTAGE) / 100;
+static uint32_t sinp1, sinp2;
+static oldVector_t oldStarPoints[OLD_NUM_STARS];
+static oldRotate_t oldStarRotation;
+static oldMatrix_t oldStarMatrix;
static vector_t starPoints[NUM_STARS], starRotation;
static matrix_t starMatrix;
-void seedAboutScreenRandom(uint32_t newseed)
+// exact Turbo Pascal Random() implementation
+static int32_t Random(int32_t limit)
{
- randSeed = newseed;
-}
+ static uint32_t randSeed; // seed is 0 in Turbo Pascal unless Randomize() is called
-static inline int32_t random32(void)
-{
randSeed *= 134775813;
- randSeed += 1;
- return randSeed;
-}
+ randSeed++;
-static inline int32_t pascalRandom32(int32_t l) // Turbo Pascal Random() implementation
-{
- int32_t r;
-
- randSeed *= 134775813;
- randSeed += 1;
-
- r = ((int64_t)randSeed * l) >> 32;
- return r;
+ return ((int64_t)randSeed * limit) >> 32;
}
-static inline int32_t sqr(int32_t x)
-{
- return x * x;
-}
-
static uint32_t blendPixels(uint32_t pixelA, uint32_t pixelB, uint16_t alpha)
{
const uint16_t invAlpha = alpha ^ 0xFFFF;
@@ -198,107 +98,97 @@
*p = RGB32(r, g, b);
}
-static void fixaMatris(oldRotate_t a, oldMatrix_t *mat)
+static void oldRotateStarfieldMatrix(void)
{
- const int16_t sa = sin32767[a.x >> 6];
- const int16_t ca = cos32767[a.x >> 6];
- const int16_t sb = sin32767[a.y >> 6];
- const int16_t cb = cos32767[a.y >> 6];
- const int16_t sc = sin32767[a.z >> 6];
- const int16_t cc = cos32767[a.z >> 6];
+ // original code used a cos/sin table, but this only runs once per frame, no need...
+ const int16_t sa = (int16_t)round(32767.0 * sin(oldStarRotation.x * (2.0 * PI / 65536.0)));
+ const int16_t ca = (int16_t)round(32767.0 * cos(oldStarRotation.x * (2.0 * PI / 65536.0)));
+ const int16_t sb = (int16_t)round(32767.0 * sin(oldStarRotation.y * (2.0 * PI / 65536.0)));
+ const int16_t cb = (int16_t)round(32767.0 * cos(oldStarRotation.y * (2.0 * PI / 65536.0)));
+ const int16_t sc = (int16_t)round(32767.0 * sin(oldStarRotation.z * (2.0 * PI / 65536.0)));
+ const int16_t cc = (int16_t)round(32767.0 * cos(oldStarRotation.z * (2.0 * PI / 65536.0)));
- mat->x.x = ((ca * cc) >> 16) + (((sc * ((sa * sb) >> 16)) >> 16) << 1);
- mat->y.x = (sa * cb) >> 16;
- mat->z.x = (((cc * ((sa * sb) >> 16)) >> 16) << 1) - ((ca * sc) >> 16);
+ oldStarMatrix.x.x = ((ca * cc) >> 16) + (((sc * ((sa * sb) >> 16)) >> 16) << 1);
+ oldStarMatrix.y.x = (sa * cb) >> 16;
+ oldStarMatrix.z.x = (((cc * ((sa * sb) >> 16)) >> 16) << 1) - ((ca * sc) >> 16);
- mat->x.y = (((sc * ((ca * sb) >> 16)) >> 16) << 1) - ((sa * cc) >> 16);
- mat->y.y = (ca * cb) >> 16;
- mat->z.y = ((sa * sc) >> 16) + (((cc * ((ca * sb) >> 16)) >> 16) << 1);
+ oldStarMatrix.x.y = (((sc * ((ca * sb) >> 16)) >> 16) << 1) - ((sa * cc) >> 16);
+ oldStarMatrix.y.y = (ca * cb) >> 16;
+ oldStarMatrix.z.y = ((sa * sc) >> 16) + (((cc * ((ca * sb) >> 16)) >> 16) << 1);
- mat->x.z = (cb * sc) >> 16;
- mat->y.z = 0 - (sb >> 1);
- mat->z.z = (cb * cc) >> 16;
+ oldStarMatrix.x.z = (cb * sc) >> 16;
+ oldStarMatrix.y.z = 0 - (sb >> 1);
+ oldStarMatrix.z.z = (cb * cc) >> 16;
}
-static void newStarfield(void)
+static void starfield(void)
{
- if (config.useNewAboutScreen)
+ vector_t *star = starPoints;
+ for (int16_t i = 0; i < NUM_STARS; i++, star++)
{
- vector_t *star = starPoints;
- for (int16_t i = 0; i < NUM_STARS; i++, star++)
- {
- star->z += 0.0001f;
- if (star->z >= 0.5f)
- star->z -= 1.0f;
+ star->z += 0.0001f;
+ if (star->z >= 0.5f)
+ star->z -= 1.0f;
- const float z = (starMatrix.x.z * star->x) + (starMatrix.y.z * star->y) + (starMatrix.z.z * star->z) + 0.5f;
- if (z <= 0.0f)
- continue;
+ const float z = (starMatrix.x.z * star->x) + (starMatrix.y.z * star->y) + (starMatrix.z.z * star->z) + 0.5f;
+ if (z <= 0.0f)
+ continue;
- float y = (((starMatrix.x.y * star->x) + (starMatrix.y.y * star->y) + (starMatrix.z.y * star->z)) / z) * 400.0f;
- const int32_t outY = (ABOUT_SCREEN_Y+(ABOUT_SCREEN_H/2)) + (int32_t)y;
- if (outY < ABOUT_SCREEN_Y || outY >= ABOUT_SCREEN_Y+ABOUT_SCREEN_H)
- continue;
+ float y = (((starMatrix.x.y * star->x) + (starMatrix.y.y * star->y) + (starMatrix.z.y * star->z)) / z) * 400.0f;
+ const int32_t outY = (ABOUT_SCREEN_Y+(ABOUT_SCREEN_H/2)) + (int32_t)y;
+ if (outY < ABOUT_SCREEN_Y || outY >= ABOUT_SCREEN_Y+ABOUT_SCREEN_H)
+ continue;
- float x = (((starMatrix.x.x * star->x) + (starMatrix.y.x * star->y) + (starMatrix.z.x * star->z)) / z) * 400.0f;
- const int32_t outX = (ABOUT_SCREEN_X+(ABOUT_SCREEN_W/2)) + (int32_t)x;
- if (outX < ABOUT_SCREEN_X || outX >= ABOUT_SCREEN_X+ABOUT_SCREEN_W)
- continue;
+ float x = (((starMatrix.x.x * star->x) + (starMatrix.y.x * star->y) + (starMatrix.z.x * star->z)) / z) * 400.0f;
+ const int32_t outX = (ABOUT_SCREEN_X+(ABOUT_SCREEN_W/2)) + (int32_t)x;
+ if (outX < ABOUT_SCREEN_X || outX >= ABOUT_SCREEN_X+ABOUT_SCREEN_W)
+ continue;
- int32_t intensity255 = (int32_t)(z * 256.0f);
- if (intensity255 > 255)
- intensity255 = 255;
- intensity255 ^= 255;
+ int32_t intensity255 = (int32_t)(z * 256.0f);
+ if (intensity255 > 255)
+ intensity255 = 255;
+ intensity255 ^= 255;
- // add a tint of blue to the star pixel
+ // add a tint of blue to the star pixel
- int32_t r = intensity255 - 79;
- if (r < 0)
- r = 0;
+ int32_t r = intensity255 - 79;
+ if (r < 0)
+ r = 0;
- int32_t g = intensity255 - 38;
- if (g < 0)
- g = 0;
+ int32_t g = intensity255 - 38;
+ if (g < 0)
+ g = 0;
- int32_t b = intensity255 + 64;
- if (b > 255)
- b = 255;
+ int32_t b = intensity255 + 64;
+ if (b > 255)
+ b = 255;
- // plot and blend sides of star (basic shine effect)
+ // plot and blend sides of star (basic shine effect)
- if (outX-1 >= ABOUT_SCREEN_X)
- blendPixelsXY(outX-1, outY, r, g, b, starShineAlpha16);
+ if (outX-1 >= ABOUT_SCREEN_X)
+ blendPixelsXY(outX-1, outY, r, g, b, starShineAlpha16);
- if (outX+1 < ABOUT_SCREEN_X+ABOUT_SCREEN_W)
- blendPixelsXY(outX+1, outY, r, g, b, starShineAlpha16);
+ if (outX+1 < ABOUT_SCREEN_X+ABOUT_SCREEN_W)
+ blendPixelsXY(outX+1, outY, r, g, b, starShineAlpha16);
- if (outY-1 >= ABOUT_SCREEN_Y)
- blendPixelsXY(outX, outY-1, r, g, b, starShineAlpha16);
+ if (outY-1 >= ABOUT_SCREEN_Y)
+ blendPixelsXY(outX, outY-1, r, g, b, starShineAlpha16);
- if (outY+1 < ABOUT_SCREEN_Y+ABOUT_SCREEN_H)
- blendPixelsXY(outX, outY+1, r, g, b, starShineAlpha16);
+ if (outY+1 < ABOUT_SCREEN_Y+ABOUT_SCREEN_H)
+ blendPixelsXY(outX, outY+1, r, g, b, starShineAlpha16);
- // plot center pixel
- video.frameBuffer[(outY * SCREEN_W) + outX] = RGB32(r, g, b);
- }
+ // plot center pixel
+ video.frameBuffer[(outY * SCREEN_W) + outX] = RGB32(r, g, b);
}
}
-static void realStars(void)
+static void oldStarfield(void)
{
- uint8_t col;
- int16_t z, xx, xy, xz, yx, yy, yz, zx, zy, zz;
- int32_t x, y, screenBufferPos;
-
- xx = starmat.x.x; xy = starmat.x.y; xz = starmat.x.z;
- yx = starmat.y.x; yy = starmat.y.y; yz = starmat.y.z;
- zx = starmat.z.x; zy = starmat.z.y; zz = starmat.z.z;
-
- oldVector_t *star = starcrd;
- for (int32_t i = 0; i < 1000; i++, star++)
+ oldVector_t *star = oldStarPoints;
+ for (int32_t i = 0; i < OLD_NUM_STARS; i++, star++)
{
// erase last star pixel
- screenBufferPos = lastStarScreenPos[i];
+ int32_t screenBufferPos = lastStarScreenPos[i];
if (screenBufferPos >= 0)
{
video.frameBuffer[screenBufferPos] = video.palette[PAL_BCKGRND];
@@ -305,16 +195,16 @@
lastStarScreenPos[i] = -1;
}
- star->z += hastighet; // this intentionally overflows int16_t
+ star->z += zSpeed; // this intentionally overflows int16_t
- z = (((xz * star->x) >> 16) + ((yz * star->y) >> 16) + ((zz * star->z) >> 16)) + 9000;
+ int16_t z = (((oldStarMatrix.x.z * star->x) >> 16) + ((oldStarMatrix.y.z * star->y) >> 16) + ((oldStarMatrix.z.z * star->z) >> 16)) + 9000;
if (z <= 100) continue;
- y = ((xy * star->x) >> 16) + ((yy * star->y) >> 16) + ((zy * star->z) >> 16);
+ int32_t y = ((oldStarMatrix.x.y * star->x) >> 16) + ((oldStarMatrix.y.y * star->y) >> 16) + ((oldStarMatrix.z.y * star->z) >> 16);
y = (int16_t)((y << 7) / z) + 84;
if ((uint16_t)y > 173-6) continue;
- x = ((xx * star->x) >> 16) + ((yx * star->y) >> 16) + ((zx * star->z) >> 16);
+ int32_t x = ((oldStarMatrix.x.x * star->x) >> 16) + ((oldStarMatrix.y.x * star->y) >> 16) + ((oldStarMatrix.z.x * star->z) >> 16);
x = (int16_t)((((x >> 2) + x) << 7) / z) + (320-8);
if ((uint16_t)x >= 640-16)
continue;
@@ -323,7 +213,7 @@
screenBufferPos = ((y + 4) * SCREEN_W) + (x + 4);
if ((video.frameBuffer[screenBufferPos] >> 24) == PAL_BCKGRND)
{
- col = ((uint8_t)~(z >> 8) >> 3) - (22 - 8);
+ const uint8_t col = ((uint8_t)~(z >> 8) >> 3) - (22 - 8);
if (col < 24)
{
video.frameBuffer[screenBufferPos] = video.palette[starColConv[col]];
@@ -372,7 +262,8 @@
clearRect(ABOUT_SCREEN_X, ABOUT_SCREEN_Y, ABOUT_SCREEN_W, ABOUT_SCREEN_H);
// 3D starfield
- newStarfield();
+
+ starfield();
starRotation.x -= 0.0003f;
starRotation.y -= 0.0002f;
starRotation.z += 0.0001f;
@@ -405,18 +296,25 @@
textOut(customText1X, customText1Y, PAL_FORGRND, customText1);
textOut(customText2X, customText2Y, PAL_FORGRND, customText2);
textOut(customText3X, customText3Y, PAL_FORGRND, customText3);
+
+ showPushButton(PB_EXIT_ABOUT); // yes, we also have to redraw the exit button per frame :)
}
- else // old FT2 about screen
+ else
{
- star_a.x += 3*64;
- star_a.y += 2*64;
- star_a.z -= 1*64;
+ // original FT2 about screen
- fixaMatris(star_a, &starmat);
- realStars();
+ oldStarRotation.x += SCALE_VBLANK_DELTA(3*64); // 70Hz speed -> 60Hz speed
+ oldStarRotation.y += SCALE_VBLANK_DELTA(2*64);
+ oldStarRotation.z -= SCALE_VBLANK_DELTA(1*64);
+ oldRotateStarfieldMatrix();
+
+ oldStarfield();
}
+}
- showPushButton(PB_EXIT_ABOUT); // yes, we also have to redraw the exit button per frame :)
+static inline int32_t Sqr(int32_t x)
+{
+ return x * x;
}
void showAboutScreen(void) // called once when about screen is opened
@@ -431,75 +329,48 @@
showPushButton(PB_EXIT_ABOUT);
- if (config.useNewAboutScreen)
+ if (!config.useNewAboutScreen)
{
- vector_t *s = starPoints;
- for (int32_t i = 0; i < NUM_STARS; i++, s++)
- {
- s->x = (float)(random32() * (1.0 / (UINT32_MAX+1.0)));
- s->y = (float)(random32() * (1.0 / (UINT32_MAX+1.0)));
- s->z = (float)(random32() * (1.0 / (UINT32_MAX+1.0)));
- }
+ oldVector_t *s = oldStarPoints;
- // pre-calc sinus table
- for (int32_t i = 0; i < SINUS_PHASES; i++)
- sin16[i] = (int16_t)round(32767.0 * sin(i * PI * 2.0 / SINUS_PHASES));
-
- sinp1 = 0;
- sinp2 = SINUS_PHASES/4; // cosine offset
- logoAlpha16 = (65535 * LOGO_ALPHA_PERCENTAGE) / 100;
- starShineAlpha16 = (65535 * STARSHINE_ALPHA_PERCENTAGE) / 100;
-
- sprintf(customText3, "v%s (%s)", PROG_VER_STR, __DATE__);
- customText0X = (SCREEN_W - textWidth(customText0)) / 2;
- customText1X = (SCREEN_W - textWidth(customText1)) / 2;
- customText2X = (SCREEN_W-8) - textWidth(customText2);
- customText3X = (SCREEN_W-8) - textWidth(customText3);
- customText0Y = 157-28;
- customText1Y = 157-12;
- customText2Y = 157-12;
- customText3Y = 157;
- }
- else
- {
- oldVector_t *s = starcrd;
-
- const uint8_t type = (uint8_t)pascalRandom32(4);
+ const int32_t type = Random(4);
switch (type)
{
+ // classic "space stars"
case 0:
{
- hastighet = 309;
- for (int32_t i = 0; i < 1000; i++, s++)
+ zSpeed = 309;
+ for (int32_t i = 0; i < OLD_NUM_STARS; i++, s++)
{
- s->z = (int16_t)pascalRandom32(0xFFFF) - 0x8000;
- s->y = (int16_t)pascalRandom32(0xFFFF) - 0x8000;
- s->x = (int16_t)pascalRandom32(0xFFFF) - 0x8000;
+ s->z = (int16_t)Random(0xFFFF) - 0x8000;
+ s->y = (int16_t)Random(0xFFFF) - 0x8000;
+ s->x = (int16_t)Random(0xFFFF) - 0x8000;
}
}
break;
+ // galaxy
case 1:
{
- hastighet = 0;
- for (int32_t i = 0; i < 1000; i++, s++)
+ zSpeed = 0;
+ for (int32_t i = 0; i < OLD_NUM_STARS; i++, s++)
{
- if (i < 1000/4)
+ if (i < OLD_NUM_STARS/4)
{
- s->z = (int16_t)pascalRandom32(0xFFFF) - 0x8000;
- s->y = (int16_t)pascalRandom32(0xFFFF) - 0x8000;
- s->x = (int16_t)pascalRandom32(0xFFFF) - 0x8000;
+ s->z = (int16_t)Random(0xFFFF) - 0x8000;
+ s->y = (int16_t)Random(0xFFFF) - 0x8000;
+ s->x = (int16_t)Random(0xFFFF) - 0x8000;
}
else
{
- int32_t r = pascalRandom32(30000);
- int32_t n = pascalRandom32(5);
- int32_t w = ((2 * pascalRandom32(2)) - 1) * sqr(pascalRandom32(1000));
- double ww = (((M_PI * 2.0) / 5.0) * n) + (r / 12000.0) + (w / 3000000.0);
- int32_t h = ((sqr(r) / 30000) * (pascalRandom32(10000) - 5000)) / 12000;
+ int32_t r = Random(30000);
+ int32_t n = Random(5);
+ int32_t w = ((2 * Random(2)) - 1) * Sqr(Random(1000));
+ double ww = (((PI * 2.0) / 5.0) * n) + (r * (1.0 / 12000.0)) + (w * (1.0 / 3000000.0));
+ int32_t h = ((Sqr(r) / 30000) * (Random(10000) - 5000)) / 12000;
- s->x = (int16_t)trunc(r * cos(ww));
- s->y = (int16_t)trunc(r * sin(ww));
+ s->x = (int16_t)(r * cos(ww));
+ s->y = (int16_t)(r * sin(ww));
s->z = (int16_t)h;
}
}
@@ -506,19 +377,24 @@
}
break;
+ // spiral
case 2:
case 3:
{
- hastighet = 0;
- for (int32_t i = 0; i < 1000; i++, s++)
+ zSpeed = 0;
+ for (int32_t i = 0; i < OLD_NUM_STARS; i++, s++)
{
- int32_t r = (int32_t)round(sqrt(pascalRandom32(500) * 500));
- int32_t w = pascalRandom32(3000);
- int32_t h = cos32767[(((w * 8) + r) / 16) & 1023] / 4;;
+ int32_t r = (int32_t)round(sqrt(Random(500) * 500));
+ int32_t w = Random(3000);
+ double ww = ((w * 8) + r) * (1.0 / 16.0);
- s->z = (int16_t)((cos32767[w & 1023] * (w + r)) / 3500);
- s->y = (int16_t)((sin32767[w & 1023] * (w + r)) / 3500);
- s->x = (int16_t)((h * r) / 500);
+ const int16_t z = (int16_t)round(32767.0 * cos(w * (2.0 * PI / 1024.0)));
+ const int16_t y = (int16_t)round(32767.0 * sin(w * (2.0 * PI / 1024.0)));
+ const int16_t x = ((int16_t)round(32767.0 * cos(ww * (2.0 * PI / 1024.0)))) / 4;
+
+ s->z = (int16_t)((z * (w + r)) / 3500);
+ s->y = (int16_t)((y * (w + r)) / 3500);
+ s->x = (int16_t)((x * r) / 500);
}
}
break;
@@ -527,11 +403,11 @@
break;
}
- star_a.x = 0;
- star_a.y = 748;
- star_a.z = 200;
+ oldStarRotation.x = 0;
+ oldStarRotation.y = 748;
+ oldStarRotation.z = 200;
- for (int32_t i = 0; i < 1000; i++)
+ for (int32_t i = 0; i < OLD_NUM_STARS; i++)
lastStarScreenPos[i] = -1;
blit(91, 31, bmp.ft2OldAboutLogo, 449, 111);
@@ -538,6 +414,34 @@
}
ui.aboutScreenShown = true;
+}
+
+void initAboutScreen(void)
+{
+ vector_t *s = starPoints;
+ for (int32_t i = 0; i < NUM_STARS; i++, s++)
+ {
+ s->x = (float)((Random(INT32_MAX) - (INT32_MAX/2)) * (1.0 / INT32_MAX));
+ s->y = (float)((Random(INT32_MAX) - (INT32_MAX/2)) * (1.0 / INT32_MAX));
+ s->z = (float)((Random(INT32_MAX) - (INT32_MAX/2)) * (1.0 / INT32_MAX));
+ }
+
+ sinp1 = 0;
+ sinp2 = SINUS_PHASES / 4; // cosine offset
+
+ // pre-calc sinus table
+ for (int32_t i = 0; i < SINUS_PHASES; i++)
+ sin16[i] = (int16_t)round(32767.0 * sin(i * PI * 2.0 / SINUS_PHASES));
+
+ sprintf(customText3, "v%s (%s)", PROG_VER_STR, __DATE__);
+ customText0X = (SCREEN_W - textWidth(customText0)) / 2;
+ customText1X = (SCREEN_W - textWidth(customText1)) / 2;
+ customText2X = (SCREEN_W-8) - textWidth(customText2);
+ customText3X = (SCREEN_W-8) - textWidth(customText3);
+ customText0Y = 157-28;
+ customText1Y = 157-12;
+ customText2Y = 157-12;
+ customText3Y = 157;
}
void hideAboutScreen(void)
--- a/src/ft2_about.h
+++ b/src/ft2_about.h
@@ -1,10 +1,8 @@
#ifndef _ft2_about_h_
#define _ft2_about_h_
-#include <stdint.h>
-
void renderAboutScreenFrame(void);
-void seedAboutScreenRandom(uint32_t newseed);
+void initAboutScreen(void);
void showAboutScreen(void);
void hideAboutScreen(void);
void exitAboutScreen(void);
--- a/src/ft2_audio.c
+++ b/src/ft2_audio.c
@@ -192,17 +192,17 @@
// set sinc LUT pointers
if (config.interpolation == INTERPOLATION_SINC8)
{
- fKaiserSinc = fKaiserSinc_8;
- fDownSample1 = fDownSample1_8;
- fDownSample2 = fDownSample2_8;
+ fSinc_1 = fSinc8_1;
+ fSinc_2 = fSinc8_2;
+ fSinc_3 = fSinc8_3;
audio.sincInterpolation = true;
}
else if (config.interpolation == INTERPOLATION_SINC16)
{
- fKaiserSinc = fKaiserSinc_16;
- fDownSample1 = fDownSample1_16;
- fDownSample2 = fDownSample2_16;
+ fSinc_1 = fSinc16_1;
+ fSinc_2 = fSinc16_2;
+ fSinc_3 = fSinc16_3;
audio.sincInterpolation = true;
}
@@ -368,11 +368,8 @@
if (status & IS_Vol)
{
- v->fVolume = ch->fFinalVol;
-
- // set scope volume (scaled)
- const int32_t scopeVolume = (int32_t)((ch->fFinalVol * (SCOPE_HEIGHT*(1<<2))) + 0.5f); // rounded
- v->scopeVolume = (uint8_t)scopeVolume;
+ v->fVolume = ch->fFinalVol; // 0.0f .. 1.0f
+ v->scopeVolume = (uint8_t)((ch->fFinalVol * 255.0f) + 0.5f); // 0..255, rounded
}
if (status & IS_Pan)
@@ -387,20 +384,15 @@
// set voice delta
v->delta = (int64_t)((dVoiceHz * audio.dHz2MixDeltaMul) + 0.5); // Hz -> fixed-point delta (rounded)
-
- // set scope delta
- const double dHz2ScopeDeltaMul = SCOPE_FRAC_SCALE / (double)SCOPE_HZ;
- v->scopeDelta = (int64_t)((dVoiceHz * dHz2ScopeDeltaMul) + 0.5); // Hz -> fixed-point delta (rounded)
-
if (audio.sincInterpolation)
{
// decide which sinc LUT to use according to the resampling ratio
- if (v->delta <= sincDownsample1Ratio)
- v->fSincLUT = fKaiserSinc;
- else if (v->delta <= sincDownsample2Ratio)
- v->fSincLUT = fDownSample1;
+ if (v->delta <= sincRatio1)
+ v->fSincLUT = fSinc_1;
+ else if (v->delta <= sincRatio2)
+ v->fSincLUT = fSinc_2;
else
- v->fSincLUT = fDownSample2;
+ v->fSincLUT = fSinc_3;
}
}
@@ -772,7 +764,7 @@
for (int32_t i = 0; i < song.numChannels; i++, c++, s++, v++)
{
c->scopeVolume = v->scopeVolume;
- c->scopeDelta = v->scopeDelta;
+ c->period = s->finalPeriod;
c->instrNum = s->instrNum;
c->smpNum = s->smpNum;
c->status = s->tmpStatus;
@@ -779,7 +771,7 @@
c->smpStartPos = s->smpStartPos;
c->pianoNoteNum = 255; // no piano key
- if (songPlaying && (c->status & IS_Period) && !s->keyOff)
+ if (songPlaying && ui.instEditorShown && (c->status & IS_Period) && !s->keyOff)
{
const int32_t note = getPianoKey(s->finalPeriod, s->finetune, s->relativeNote);
if (note >= 0 && note <= 95)
--- a/src/ft2_audio.h
+++ b/src/ft2_audio.h
@@ -62,8 +62,8 @@
const int8_t *base8, *revBase8;
const int16_t *base16, *revBase16;
bool active, samplingBackwards, isFadeOutVoice, hasLooped;
- uint8_t mixFuncOffset, panning, loopType, scopeVolume;
- int32_t position, sampleEnd, loopStart, loopLength, oldPeriod;
+ uint8_t scopeVolume, mixFuncOffset, panning, loopType;
+ int32_t position, sampleEnd, loopStart, loopLength;
uint32_t volumeRampLength;
uint64_t positionFrac, delta, scopeDelta;
--- a/src/ft2_checkboxes.c
+++ b/src/ft2_checkboxes.c
@@ -98,13 +98,13 @@
{ 212, 15, 153, 12, cbPattCutToBuff },
{ 212, 28, 159, 12, cbKillNotesAtStop },
{ 212, 41, 149, 12, cbFileOverwriteWarn },
- { 212, 69, 130, 12, cbMultiChanRec },
- { 212, 82, 157, 12, cbMultiChanKeyJazz },
- { 212, 95, 114, 12, cbMultiChanEdit },
- { 212, 108, 143, 12, cbRecKeyOff },
- { 212, 121, 89, 12, cbQuantization },
- { 212, 134, 180, 25, cbChangePattLenInsDel },
- { 212, 159, 182, 12, cbUseOldAboutScreen },
+ { 212, 68, 130, 12, cbMultiChanRec },
+ { 212, 81, 157, 12, cbMultiChanKeyJazz },
+ { 212, 94, 114, 12, cbMultiChanEdit },
+ { 212, 107, 143, 12, cbRecKeyOff },
+ { 212, 120, 89, 12, cbQuantization },
+ { 212, 133, 180, 24, cbChangePattLenInsDel },
+ { 212, 159, 169, 12, cbUseOldAboutScreen },
{ 411, 93, 83, 12, cbMIDIEnable },
{ 530, 106, 29, 12, cbMIDIRecAllChn },
{ 411, 119, 121, 12, cbMIDIRecTransp },
--- a/src/ft2_config.c
+++ b/src/ft2_config.c
@@ -741,7 +741,7 @@
{
char str[8];
sprintf(str, "%02d", config.recQuantRes);
- textOutFixed(354, 123, PAL_FORGRND, PAL_DESKTOP, str);
+ textOutFixed(354, 122, PAL_FORGRND, PAL_DESKTOP, str);
}
static void drawMIDIChanValue(void)
@@ -835,10 +835,10 @@
tmpID = RB_CONFIG_AUDIO_INTRP_LINEAR;
else if (config.interpolation == INTERPOLATION_SINC16)
tmpID = RB_CONFIG_AUDIO_INTRP_SINC16;
- else if (config.interpolation == INTERPOLATION_CUBIC4)
- tmpID = RB_CONFIG_AUDIO_INTRP_CUBIC4;
- else if (config.interpolation == INTERPOLATION_CUBIC6)
- tmpID = RB_CONFIG_AUDIO_INTRP_CUBIC6;
+ else if (config.interpolation == INTERPOLATION_CUBIC)
+ tmpID = RB_CONFIG_AUDIO_INTRP_CUBIC;
+ else if (config.interpolation == INTERPOLATION_QUADRATIC)
+ tmpID = RB_CONFIG_AUDIO_INTRP_QUADRATIC;
else
tmpID = RB_CONFIG_AUDIO_INTRP_SINC8; // default case
@@ -1173,8 +1173,8 @@
textOutShadow(405, 91, PAL_FORGRND, PAL_DSKTOP2, "No interpolation");
textOutShadow(405, 105, PAL_FORGRND, PAL_DSKTOP2, "Linear (FT2)");
- textOutShadow(405, 119, PAL_FORGRND, PAL_DSKTOP2, "Cubic (4 point)");
- textOutShadow(405, 133, PAL_FORGRND, PAL_DSKTOP2, "Cubic (6 point)");
+ textOutShadow(405, 119, PAL_FORGRND, PAL_DSKTOP2, "Quadratic spline");
+ textOutShadow(405, 133, PAL_FORGRND, PAL_DSKTOP2, "Cubic spline");
textOutShadow(405, 147, PAL_FORGRND, PAL_DSKTOP2, "Sinc (8 point)");
textOutShadow(405, 161, PAL_FORGRND, PAL_DSKTOP2, "Sinc (16 point)");
@@ -1291,11 +1291,13 @@
drawFramework(408, 0, 224, 91, FRAMEWORK_TYPE1);
drawFramework(110, 43, 99, 57, FRAMEWORK_TYPE1);
- drawFramework(209, 55, 199, 118, FRAMEWORK_TYPE1);
+ drawFramework(209, 55, 199, 118-16, FRAMEWORK_TYPE1);
drawFramework(408, 91, 224, 82, FRAMEWORK_TYPE1);
drawFramework(110, 100, 99, 73, FRAMEWORK_TYPE1);
+ drawFramework(209, 157, 199, 16, FRAMEWORK_TYPE1);
+
// text boxes
drawFramework(485, 15, 145, 14, FRAMEWORK_TYPE2);
drawFramework(485, 30, 145, 14, FRAMEWORK_TYPE2);
@@ -1331,16 +1333,16 @@
textOutShadow(130, 143, PAL_FORGRND, PAL_DSKTOP2, "Stretched");
textOutShadow(130, 156, PAL_FORGRND, PAL_DSKTOP2, "Pixel filter");
- textOutShadow(213, 58, PAL_FORGRND, PAL_DSKTOP2, "Rec./Edit/Play:");
- textOutShadow(228, 71, PAL_FORGRND, PAL_DSKTOP2, "Multichannel record");
- textOutShadow(228, 84, PAL_FORGRND, PAL_DSKTOP2, "Multichannel \"key jazz\"");
- textOutShadow(228, 97, PAL_FORGRND, PAL_DSKTOP2, "Multichannel edit");
- textOutShadow(228, 110, PAL_FORGRND, PAL_DSKTOP2, "Record key-off notes");
- textOutShadow(228, 123, PAL_FORGRND, PAL_DSKTOP2, "Quantization");
- textOutShadow(338, 123, PAL_FORGRND, PAL_DSKTOP2, "1/");
- textOutShadow(228, 136, PAL_FORGRND, PAL_DSKTOP2, "Change pattern length when");
- textOutShadow(228, 147, PAL_FORGRND, PAL_DSKTOP2, "inserting/deleting line.");
- textOutShadow(228, 161, PAL_FORGRND, PAL_DSKTOP2, "Original FT2 \"about screen\"");
+ textOutShadow(213, 57, PAL_FORGRND, PAL_DSKTOP2, "Rec./Edit/Play:");
+ textOutShadow(228, 70, PAL_FORGRND, PAL_DSKTOP2, "Multichannel record");
+ textOutShadow(228, 83, PAL_FORGRND, PAL_DSKTOP2, "Multichannel \"key jazz\"");
+ textOutShadow(228, 96, PAL_FORGRND, PAL_DSKTOP2, "Multichannel edit");
+ textOutShadow(228, 109, PAL_FORGRND, PAL_DSKTOP2, "Record key-off notes");
+ textOutShadow(228, 122, PAL_FORGRND, PAL_DSKTOP2, "Quantization");
+ textOutShadow(338, 122, PAL_FORGRND, PAL_DSKTOP2, "1/");
+ textOutShadow(228, 135, PAL_FORGRND, PAL_DSKTOP2, "Change pattern length when");
+ textOutShadow(228, 146, PAL_FORGRND, PAL_DSKTOP2, "inserting/deleting line.");
+ textOutShadow(228, 161, PAL_FORGRND, PAL_DSKTOP2, "Original FT2 About screen");
textOutShadow(428, 95, PAL_FORGRND, PAL_DSKTOP2, "Enable MIDI");
textOutShadow(412, 108, PAL_FORGRND, PAL_DSKTOP2, "Record MIDI chn.");
@@ -1627,18 +1629,18 @@
audioSetInterpolationType(config.interpolation);
checkRadioButton(RB_CONFIG_AUDIO_INTRP_LINEAR);
}
-void rbConfigAudioIntrpCubic4(void)
+void rbConfigAudioIntrpCubic(void)
{
- config.interpolation = INTERPOLATION_CUBIC4;
+ config.interpolation = INTERPOLATION_CUBIC;
audioSetInterpolationType(config.interpolation);
- checkRadioButton(RB_CONFIG_AUDIO_INTRP_CUBIC4);
+ checkRadioButton(RB_CONFIG_AUDIO_INTRP_CUBIC);
}
-void rbConfigAudioIntrpCubic6(void)
+void rbConfigAudioIntrpQuadratic(void)
{
- config.interpolation = INTERPOLATION_CUBIC6;
+ config.interpolation = INTERPOLATION_QUADRATIC;
audioSetInterpolationType(config.interpolation);
- checkRadioButton(RB_CONFIG_AUDIO_INTRP_CUBIC6);
+ checkRadioButton(RB_CONFIG_AUDIO_INTRP_QUADRATIC);
}
void rbConfigAudioIntrpSinc8(void)
--- a/src/ft2_config.h
+++ b/src/ft2_config.h
@@ -206,8 +206,8 @@
void rbConfigAudio32BitFloat(void);
void rbConfigAudioIntrpDisabled(void);
void rbConfigAudioIntrpLinear(void);
-void rbConfigAudioIntrpCubic4(void);
-void rbConfigAudioIntrpCubic6(void);
+void rbConfigAudioIntrpQuadratic(void);
+void rbConfigAudioIntrpCubic(void);
void rbConfigAudioIntrpSinc8(void);
void rbConfigAudioIntrpSinc16(void);
void rbConfigAudio44kHz(void);
--- a/src/ft2_gui.c
+++ b/src/ft2_gui.c
@@ -4,7 +4,6 @@
#endif
#include <stdint.h>
-#include <time.h>
#include "ft2_header.h"
#include "ft2_config.h"
#include "ft2_about.h"
@@ -203,7 +202,7 @@
}
setPal16(palTable[config.cfg_StdPalNum], false);
- seedAboutScreenRandom((uint32_t)time(NULL));
+ initAboutScreen();
setupInitialTextBoxPointers();
setInitialTrimFlags();
initializeScrollBars();
--- a/src/ft2_header.h
+++ b/src/ft2_header.h
@@ -23,7 +23,8 @@
#define VBLANK_HZ 60
// 70Hz (FT2 vblank) delta -> 60Hz vblank delta (rounded)
-#define SCALE_VBLANK_DELTA(x) (int32_t)(((x) * ((double)VBLANK_HZ / FT2_VBLANK_HZ)) + 0.5)
+#define SCALE_VBLANK_DELTA(x) (int32_t)(((x) * (FT2_VBLANK_HZ / (double)VBLANK_HZ)) + 0.5)
+#define SCALE_VBLANK_DELTA_REV(x) (int32_t)(((x) * (VBLANK_HZ / (double)FT2_VBLANK_HZ)) + 0.5)
/* Amount of extra bytes to allocate for every instrument sample,
** this is used for a hack for resampling interpolation to be
--- a/src/ft2_main.c
+++ b/src/ft2_main.c
@@ -148,7 +148,7 @@
#ifdef __APPLE__
osxSetDirToProgramDirFromArgs(argv);
#endif
- if (!setupExecutablePath() || !loadBMPs() || !calcCubicSplineTables() || !calcWindowedSincTables())
+ if (!setupExecutablePath() || !loadBMPs() || !setupQuadraticSplineTable() || !setupCubicSplineTable() || !setupWindowedSincTables())
{
cleanUpAndExit();
return 1;
--- a/src/ft2_nibbles.c
+++ b/src/ft2_nibbles.c
@@ -848,9 +848,9 @@
assert(config.NI_Speed < 4);
NI_CurSpeed = NI_Speeds[config.NI_Speed];
- // adjust for 70Hz -> 60Hz frames (this is not exact, but we don't want fractional numbers aka. frame skipping)
- NI_CurSpeed60Hz = (uint8_t)SCALE_VBLANK_DELTA(NI_CurSpeed);
- NI_CurTick60Hz = (uint8_t)SCALE_VBLANK_DELTA(NI_Speeds[2]);
+ // adjust for 70Hz -> 60Hz countdown frames (this is not exact, but we don't want fractional numbers aka. frame skipping)
+ NI_CurSpeed60Hz = (uint8_t)SCALE_VBLANK_DELTA_REV(NI_CurSpeed);
+ NI_CurTick60Hz = (uint8_t)SCALE_VBLANK_DELTA_REV(NI_Speeds[2]);
editor.NI_Play = true;
NI_P1Score = 0;
--- a/src/ft2_pushbuttons.c
+++ b/src/ft2_pushbuttons.c
@@ -338,8 +338,8 @@
// ------ CONFIG MISCELLANEOUS PUSHBUTTONS ------
//x, y, w, h, p, d, text #1, text #2, funcOnDown, funcOnUp
- { 370, 121, 18, 13, 1, 4, ARROW_UP_STRING, NULL, configQuantizeUp, NULL },
- { 387, 121, 18, 13, 1, 4, ARROW_DOWN_STRING, NULL, configQuantizeDown, NULL },
+ { 370, 120, 18, 13, 1, 4, ARROW_UP_STRING, NULL, configQuantizeUp, NULL },
+ { 387, 120, 18, 13, 1, 4, ARROW_DOWN_STRING, NULL, configQuantizeDown, NULL },
{ 594, 106, 18, 13, 1, 4, ARROW_UP_STRING, NULL, configMIDIChnUp, NULL },
{ 611, 106, 18, 13, 1, 4, ARROW_DOWN_STRING, NULL, configMIDIChnDown, NULL },
{ 594, 120, 18, 13, 1, 4, ARROW_UP_STRING, NULL, configMIDITransUp, NULL },
--- a/src/ft2_radiobuttons.c
+++ b/src/ft2_radiobuttons.c
@@ -88,8 +88,8 @@
//x, y, w, group, funcOnUp
{ 390, 90, 108, RB_GROUP_CONFIG_AUDIO_INTERPOLATION, rbConfigAudioIntrpDisabled },
{ 390, 104, 90, RB_GROUP_CONFIG_AUDIO_INTERPOLATION, rbConfigAudioIntrpLinear },
- { 390, 118, 101, RB_GROUP_CONFIG_AUDIO_INTERPOLATION, rbConfigAudioIntrpCubic4 },
- { 390, 132, 101, RB_GROUP_CONFIG_AUDIO_INTERPOLATION, rbConfigAudioIntrpCubic6 },
+ { 390, 118, 109, RB_GROUP_CONFIG_AUDIO_INTERPOLATION, rbConfigAudioIntrpQuadratic },
+ { 390, 132, 85, RB_GROUP_CONFIG_AUDIO_INTERPOLATION, rbConfigAudioIntrpCubic },
{ 390, 146, 94, RB_GROUP_CONFIG_AUDIO_INTERPOLATION, rbConfigAudioIntrpSinc8 },
{ 390, 160, 101, RB_GROUP_CONFIG_AUDIO_INTERPOLATION, rbConfigAudioIntrpSinc16 },
--- a/src/ft2_radiobuttons.h
+++ b/src/ft2_radiobuttons.h
@@ -58,8 +58,8 @@
// AUDIO INTERPOLATION
RB_CONFIG_AUDIO_INTRP_DISABLED,
RB_CONFIG_AUDIO_INTRP_LINEAR,
- RB_CONFIG_AUDIO_INTRP_CUBIC4,
- RB_CONFIG_AUDIO_INTRP_CUBIC6,
+ RB_CONFIG_AUDIO_INTRP_QUADRATIC,
+ RB_CONFIG_AUDIO_INTRP_CUBIC,
RB_CONFIG_AUDIO_INTRP_SINC8,
RB_CONFIG_AUDIO_INTRP_SINC16,
--- a/src/ft2_replayer.c
+++ b/src/ft2_replayer.c
@@ -2789,7 +2789,8 @@
instr[131] = NULL;
}
- freeCubicSplineTables();
+ freeQuadraticSplineTable();
+ freeCubicSplineTable();
freeWindowedSincTables();
}
--- a/src/ft2_replayer.h
+++ b/src/ft2_replayer.h
@@ -4,6 +4,7 @@
#include <stdint.h>
#include <stdbool.h>
#include "ft2_unicode.h"
+#include "mixer/ft2_quadratic_spline.h"
#include "mixer/ft2_cubic_spline.h"
#include "mixer/ft2_windowed_sinc.h"
@@ -196,8 +197,8 @@
typedef struct syncedChannel_t // used for audio/video sync queue (pack to save RAM)
{
uint8_t status, pianoNoteNum, smpNum, instrNum, scopeVolume;
+ uint16_t period;
int32_t smpStartPos;
- uint64_t scopeDelta;
}
#ifdef __GNUC__
__attribute__ ((packed))
--- a/src/ft2_sample_ed.c
+++ b/src/ft2_sample_ed.c
@@ -1495,7 +1495,11 @@
// draw sample play note
- const uint8_t note = (editor.smpEd_NoteNr - 1) % 12;
+ const uint32_t noteNr = editor.smpEd_NoteNr - 1;
+
+ const uint32_t note = noteNr % 12;
+ const uint32_t octave = noteNr / 12;
+
if (config.ptnAcc == 0)
{
noteChar1 = sharpNote1Char[note];
@@ -1507,11 +1511,9 @@
noteChar2 = flatNote2Char[note];
}
- char octaChar = '0' + ((editor.smpEd_NoteNr - 1) / 12);
-
charOutBg(7, 369, PAL_FORGRND, PAL_BCKGRND, noteChar1);
charOutBg(15, 369, PAL_FORGRND, PAL_BCKGRND, noteChar2);
- charOutBg(23, 369, PAL_FORGRND, PAL_BCKGRND, octaChar);
+ charOutBg(23, 369, PAL_FORGRND, PAL_BCKGRND, (char)('0' + octave));
// draw sample display/length
@@ -1539,7 +1541,7 @@
void scrollSampleDataLeft(void)
{
- int32_t scrollAmount, sampleLen;
+ int32_t sampleLen;
if (instr[editor.curInstr] == NULL)
sampleLen = 0;
@@ -1549,11 +1551,7 @@
if (smpEd_ViewSize == 0 || smpEd_ViewSize == sampleLen)
return;
- if (mouse.rightButtonPressed)
- scrollAmount = smpEd_ViewSize / SCALE_VBLANK_DELTA(16);
- else
- scrollAmount = smpEd_ViewSize / SCALE_VBLANK_DELTA(32);
-
+ int32_t scrollAmount = (uint32_t)smpEd_ViewSize / 32;
if (scrollAmount < 1)
scrollAmount = 1;
@@ -1566,7 +1564,7 @@
void scrollSampleDataRight(void)
{
- int32_t scrollAmount, sampleLen;
+ int32_t sampleLen;
if (instr[editor.curInstr] == NULL)
sampleLen = 0;
@@ -1576,11 +1574,7 @@
if (smpEd_ViewSize == 0 || smpEd_ViewSize == sampleLen)
return;
- if (mouse.rightButtonPressed)
- scrollAmount = smpEd_ViewSize / SCALE_VBLANK_DELTA(16);
- else
- scrollAmount = smpEd_ViewSize / SCALE_VBLANK_DELTA(32);
-
+ int32_t scrollAmount = (uint32_t)smpEd_ViewSize / 32;
if (scrollAmount < 1)
scrollAmount = 1;
--- a/src/helpdata/FT2.HLP
+++ b/src/helpdata/FT2.HLP
@@ -813,24 +813,46 @@
@X020@C001Configuration, Audio:
>
>@X040@C001Interpolation:
->@X060@C002
-Selects what type of resampling interpolation to use.
+>@X060@C002Selects what type of resampling interpolation to use. I recommend
+playing around with these, as a better interpolator isn't always the
+right choice. For modules with lo-fi samples, the better the filter the
+more dull it sounds. In such cases, a worse interpolator may allow
+for more "fun" listening by allowing some aliasing.
>
->For an authentic FT2 sound, select "Linear (FT2)". This is a quite bad interpolator,
-so be prepared for low fidelity.
+>@X052@C001No interpolation:
+>@X060@C002Also known as "nearest neighbor". The absolute worst option, but
+may be preferred by some people when playing chiptune styled
+tunes. Be prepared for a ton of aliasing (distortion).
+
+>@X052@C001Linear (FT2):
+>@X060@C002Same interpolator as original Fasttracker II. Not a particularly good
+option, but may be nostalgic to a lot of people, including those that
+used a Gravis Ultrasound sound card.
+
+>@X052@C001Quadratic spline:
+>@X060@C0023-point quadratic spline interpolation. If you prefer the soft sound
+of linear interpolation, but want just a tad bit more treble, then this
+may be a good option. Like linear interpolation, this one isn't too
+harsh on lo-fi samples.
+
+>@X052@C001Cubic spline:
+>@X060@C0024-point cubic Hermite spline interpolation. A good trade-off between
+sharpness and "fun listening" for lo-fi samples.
+>A pretty solid option if you play a wide selection of mixed modules.
+
+>@X052@C001Sinc (8 point):
+>@X060@C0028-point sinc interpolation with a Kaiser-Bessel window. If you mainly
+use hi-fi samples (or play XMs with hi-fi samples), then this may be
+a good option. It's a high quality interpolator. However, it may kill
+the fun of listening to lo-fi modules, as they may sound very dull
+and colored.
>
->For a good trade-off between quality and "fun listening" for lo-fi samples,
-you may select "Cubic (4 point)". Or select "Cubic (6 point)" if you want just
-a tad bit more treble, but with slightly more filtered lo-fi samples as a trade-off.
+>@X052@C001Sinc (16 point):
+>@X060@C002Same as above, but with 16 points (better quality). This means less
+aliasing and more sharpness, but even more filtered/dull sound on
+lo-fi samples. if you only use (or play modules with) hi-fi samples,
+then this is going to give the best quality and sharpness.
>
->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!
->
->Sinc (16 point) is the best option in terms of clarity, as long as you use high-quality
-samples (sampled at 44.1kHz, for example).
->
->Tip: Play around with the different options...
>@X040@C001Volume ramping:
>@X060@C002
--- 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 28502
+#define HELP_DATA_LEN 29576
-const uint8_t helpData[28502] =
+const uint8_t helpData[29576] =
{
0x4C,0x3B,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
@@ -1858,531 +1858,620 @@
0x74,0x69,0x6F,0x6E,0x2C,0x20,0x41,0x75,0x64,0x69,0x6F,0x3A,
0x01,0x3E,0x19,0x3E,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,
0x30,0x31,0x49,0x6E,0x74,0x65,0x72,0x70,0x6F,0x6C,0x61,0x74,
- 0x69,0x6F,0x6E,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,
- 0x43,0x30,0x30,0x32,0x35,0x53,0x65,0x6C,0x65,0x63,0x74,0x73,
- 0x20,0x77,0x68,0x61,0x74,0x20,0x74,0x79,0x70,0x65,0x20,0x6F,
- 0x66,0x20,0x72,0x65,0x73,0x61,0x6D,0x70,0x6C,0x69,0x6E,0x67,
- 0x20,0x69,0x6E,0x74,0x65,0x72,0x70,0x6F,0x6C,0x61,0x74,0x69,
- 0x6F,0x6E,0x20,0x74,0x6F,0x20,0x75,0x73,0x65,0x2E,0x01,0x3E,
- 0x55,0x3E,0x46,0x6F,0x72,0x20,0x61,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,0x4C,0x69,0x6E,0x65,0x61,0x72,0x20,0x28,0x46,0x54,
- 0x32,0x29,0x22,0x2E,0x20,0x54,0x68,0x69,0x73,0x20,0x69,0x73,
- 0x20,0x61,0x20,0x71,0x75,0x69,0x74,0x65,0x20,0x62,0x61,0x64,
+ 0x69,0x6F,0x6E,0x3A,0x4C,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,
+ 0x43,0x30,0x30,0x32,0x53,0x65,0x6C,0x65,0x63,0x74,0x73,0x20,
+ 0x77,0x68,0x61,0x74,0x20,0x74,0x79,0x70,0x65,0x20,0x6F,0x66,
+ 0x20,0x72,0x65,0x73,0x61,0x6D,0x70,0x6C,0x69,0x6E,0x67,0x20,
+ 0x69,0x6E,0x74,0x65,0x72,0x70,0x6F,0x6C,0x61,0x74,0x69,0x6F,
+ 0x6E,0x20,0x74,0x6F,0x20,0x75,0x73,0x65,0x2E,0x20,0x49,0x20,
+ 0x72,0x65,0x63,0x6F,0x6D,0x6D,0x65,0x6E,0x64,0x44,0x70,0x6C,
+ 0x61,0x79,0x69,0x6E,0x67,0x20,0x61,0x72,0x6F,0x75,0x6E,0x64,
+ 0x20,0x77,0x69,0x74,0x68,0x20,0x74,0x68,0x65,0x73,0x65,0x2C,
+ 0x20,0x61,0x73,0x20,0x61,0x20,0x62,0x65,0x74,0x74,0x65,0x72,
0x20,0x69,0x6E,0x74,0x65,0x72,0x70,0x6F,0x6C,0x61,0x74,0x6F,
- 0x72,0x2C,0x20,0x73,0x6F,0x20,0x62,0x65,0x20,0x70,0x72,0x65,
- 0x70,0x61,0x72,0x65,0x64,0x20,0x66,0x6F,0x72,0x20,0x6C,0x6F,
- 0x77,0x20,0x66,0x69,0x64,0x65,0x6C,0x69,0x74,0x79,0x2E,0x01,
- 0x3E,0x4C,0x3E,0x46,0x6F,0x72,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,0x22,0x66,0x75,0x6E,
- 0x20,0x6C,0x69,0x73,0x74,0x65,0x6E,0x69,0x6E,0x67,0x22,0x20,
- 0x66,0x6F,0x72,0x20,0x6C,0x6F,0x2D,0x66,0x69,0x20,0x73,0x61,
- 0x6D,0x70,0x6C,0x65,0x73,0x2C,0x4E,0x79,0x6F,0x75,0x20,0x6D,
- 0x61,0x79,0x20,0x73,0x65,0x6C,0x65,0x63,0x74,0x20,0x22,0x43,
- 0x75,0x62,0x69,0x63,0x20,0x28,0x34,0x20,0x70,0x6F,0x69,0x6E,
- 0x74,0x29,0x22,0x2E,0x20,0x4F,0x72,0x20,0x73,0x65,0x6C,0x65,
- 0x63,0x74,0x20,0x22,0x43,0x75,0x62,0x69,0x63,0x20,0x28,0x36,
- 0x20,0x70,0x6F,0x69,0x6E,0x74,0x29,0x22,0x20,0x69,0x66,0x20,
- 0x79,0x6F,0x75,0x20,0x77,0x61,0x6E,0x74,0x20,0x6A,0x75,0x73,
- 0x74,0x54,0x61,0x20,0x74,0x61,0x64,0x20,0x62,0x69,0x74,0x20,
- 0x6D,0x6F,0x72,0x65,0x20,0x74,0x72,0x65,0x62,0x6C,0x65,0x2C,
- 0x20,0x62,0x75,0x74,0x20,0x77,0x69,0x74,0x68,0x20,0x73,0x6C,
- 0x69,0x67,0x68,0x74,0x6C,0x79,0x20,0x6D,0x6F,0x72,0x65,0x20,
- 0x66,0x69,0x6C,0x74,0x65,0x72,0x65,0x64,0x20,0x6C,0x6F,0x2D,
- 0x66,0x69,0x20,0x73,0x61,0x6D,0x70,0x6C,0x65,0x73,0x20,0x61,
- 0x73,0x20,0x61,0x20,0x74,0x72,0x61,0x64,0x65,0x2D,0x6F,0x66,
- 0x66,0x2E,0x01,0x3E,0x4C,0x3E,0x49,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,0x54,0x61,0x6E,
- 0x79,0x20,0x6F,0x66,0x20,0x74,0x68,0x65,0x20,0x74,0x77,0x6F,
- 0x20,0x22,0x53,0x69,0x6E,0x63,0x22,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,0x35,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,0x01,0x3E,0x58,0x3E,0x53,0x69,0x6E,0x63,
- 0x20,0x28,0x31,0x36,0x20,0x70,0x6F,0x69,0x6E,0x74,0x29,0x20,
- 0x69,0x73,0x20,0x74,0x68,0x65,0x20,0x62,0x65,0x73,0x74,0x20,
- 0x6F,0x70,0x74,0x69,0x6F,0x6E,0x20,0x69,0x6E,0x20,0x74,0x65,
- 0x72,0x6D,0x73,0x20,0x6F,0x66,0x20,0x63,0x6C,0x61,0x72,0x69,
- 0x74,0x79,0x2C,0x20,0x61,0x73,0x20,0x6C,0x6F,0x6E,0x67,0x20,
- 0x61,0x73,0x20,0x79,0x6F,0x75,0x20,0x75,0x73,0x65,0x20,0x68,
- 0x69,0x67,0x68,0x2D,0x71,0x75,0x61,0x6C,0x69,0x74,0x79,0x2A,
- 0x73,0x61,0x6D,0x70,0x6C,0x65,0x73,0x20,0x28,0x73,0x61,0x6D,
- 0x70,0x6C,0x65,0x64,0x20,0x61,0x74,0x20,0x34,0x34,0x2E,0x31,
- 0x6B,0x48,0x7A,0x2C,0x20,0x66,0x6F,0x72,0x20,0x65,0x78,0x61,
- 0x6D,0x70,0x6C,0x65,0x29,0x2E,0x01,0x3E,0x2F,0x3E,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,
+ 0x72,0x20,0x69,0x73,0x6E,0x27,0x74,0x20,0x61,0x6C,0x77,0x61,
+ 0x79,0x73,0x20,0x74,0x68,0x65,0x47,0x72,0x69,0x67,0x68,0x74,
+ 0x20,0x63,0x68,0x6F,0x69,0x63,0x65,0x2E,0x20,0x46,0x6F,0x72,
+ 0x20,0x6D,0x6F,0x64,0x75,0x6C,0x65,0x73,0x20,0x77,0x69,0x74,
+ 0x68,0x20,0x6C,0x6F,0x2D,0x66,0x69,0x20,0x73,0x61,0x6D,0x70,
+ 0x6C,0x65,0x73,0x2C,0x20,0x74,0x68,0x65,0x20,0x62,0x65,0x74,
+ 0x74,0x65,0x72,0x20,0x74,0x68,0x65,0x20,0x66,0x69,0x6C,0x74,
+ 0x65,0x72,0x20,0x74,0x68,0x65,0x42,0x6D,0x6F,0x72,0x65,0x20,
+ 0x64,0x75,0x6C,0x6C,0x20,0x69,0x74,0x20,0x73,0x6F,0x75,0x6E,
+ 0x64,0x73,0x2E,0x20,0x49,0x6E,0x20,0x73,0x75,0x63,0x68,0x20,
+ 0x63,0x61,0x73,0x65,0x73,0x2C,0x20,0x61,0x20,0x77,0x6F,0x72,
+ 0x73,0x65,0x20,0x69,0x6E,0x74,0x65,0x72,0x70,0x6F,0x6C,0x61,
+ 0x74,0x6F,0x72,0x20,0x6D,0x61,0x79,0x20,0x61,0x6C,0x6C,0x6F,
+ 0x77,0x33,0x66,0x6F,0x72,0x20,0x6D,0x6F,0x72,0x65,0x20,0x22,
+ 0x66,0x75,0x6E,0x22,0x20,0x6C,0x69,0x73,0x74,0x65,0x6E,0x69,
+ 0x6E,0x67,0x20,0x62,0x79,0x20,0x61,0x6C,0x6C,0x6F,0x77,0x69,
+ 0x6E,0x67,0x20,0x73,0x6F,0x6D,0x65,0x20,0x61,0x6C,0x69,0x61,
+ 0x73,0x69,0x6E,0x67,0x2E,0x01,0x3E,0x1C,0x3E,0x40,0x58,0x30,
+ 0x35,0x32,0x40,0x43,0x30,0x30,0x31,0x4E,0x6F,0x20,0x69,0x6E,
+ 0x74,0x65,0x72,0x70,0x6F,0x6C,0x61,0x74,0x69,0x6F,0x6E,0x3A,
+ 0x4B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,
+ 0x41,0x6C,0x73,0x6F,0x20,0x6B,0x6E,0x6F,0x77,0x6E,0x20,0x61,
+ 0x73,0x20,0x22,0x6E,0x65,0x61,0x72,0x65,0x73,0x74,0x20,0x6E,
+ 0x65,0x69,0x67,0x68,0x62,0x6F,0x72,0x22,0x2E,0x20,0x54,0x68,
+ 0x65,0x20,0x61,0x62,0x73,0x6F,0x6C,0x75,0x74,0x65,0x20,0x77,
+ 0x6F,0x72,0x73,0x74,0x20,0x6F,0x70,0x74,0x69,0x6F,0x6E,0x2C,
+ 0x20,0x62,0x75,0x74,0x3C,0x6D,0x61,0x79,0x20,0x62,0x65,0x20,
+ 0x70,0x72,0x65,0x66,0x65,0x72,0x72,0x65,0x64,0x20,0x62,0x79,
+ 0x20,0x73,0x6F,0x6D,0x65,0x20,0x70,0x65,0x6F,0x70,0x6C,0x65,
+ 0x20,0x77,0x68,0x65,0x6E,0x20,0x70,0x6C,0x61,0x79,0x69,0x6E,
+ 0x67,0x20,0x63,0x68,0x69,0x70,0x74,0x75,0x6E,0x65,0x20,0x73,
+ 0x74,0x79,0x6C,0x65,0x64,0x36,0x74,0x75,0x6E,0x65,0x73,0x2E,
+ 0x20,0x42,0x65,0x20,0x70,0x72,0x65,0x70,0x61,0x72,0x65,0x64,
+ 0x20,0x66,0x6F,0x72,0x20,0x61,0x20,0x74,0x6F,0x6E,0x20,0x6F,
+ 0x66,0x20,0x61,0x6C,0x69,0x61,0x73,0x69,0x6E,0x67,0x20,0x28,
+ 0x64,0x69,0x73,0x74,0x6F,0x72,0x74,0x69,0x6F,0x6E,0x29,0x2E,
+ 0x00,0x18,0x3E,0x40,0x58,0x30,0x35,0x32,0x40,0x43,0x30,0x30,
+ 0x31,0x4C,0x69,0x6E,0x65,0x61,0x72,0x20,0x28,0x46,0x54,0x32,
+ 0x29,0x3A,0x50,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,
+ 0x30,0x32,0x53,0x61,0x6D,0x65,0x20,0x69,0x6E,0x74,0x65,0x72,
+ 0x70,0x6F,0x6C,0x61,0x74,0x6F,0x72,0x20,0x61,0x73,0x20,0x6F,
+ 0x72,0x69,0x67,0x69,0x6E,0x61,0x6C,0x20,0x46,0x61,0x73,0x74,
+ 0x74,0x72,0x61,0x63,0x6B,0x65,0x72,0x20,0x49,0x49,0x2E,0x20,
+ 0x4E,0x6F,0x74,0x20,0x61,0x20,0x70,0x61,0x72,0x74,0x69,0x63,
+ 0x75,0x6C,0x61,0x72,0x6C,0x79,0x20,0x67,0x6F,0x6F,0x64,0x45,
+ 0x6F,0x70,0x74,0x69,0x6F,0x6E,0x2C,0x20,0x62,0x75,0x74,0x20,
+ 0x6D,0x61,0x79,0x20,0x62,0x65,0x20,0x6E,0x6F,0x73,0x74,0x61,
+ 0x6C,0x67,0x69,0x63,0x20,0x74,0x6F,0x20,0x61,0x20,0x6C,0x6F,
+ 0x74,0x20,0x6F,0x66,0x20,0x70,0x65,0x6F,0x70,0x6C,0x65,0x2C,
+ 0x20,0x69,0x6E,0x63,0x6C,0x75,0x64,0x69,0x6E,0x67,0x20,0x74,
+ 0x68,0x6F,0x73,0x65,0x20,0x74,0x68,0x61,0x74,0x24,0x75,0x73,
+ 0x65,0x64,0x20,0x61,0x20,0x47,0x72,0x61,0x76,0x69,0x73,0x20,
+ 0x55,0x6C,0x74,0x72,0x61,0x73,0x6F,0x75,0x6E,0x64,0x20,0x73,
+ 0x6F,0x75,0x6E,0x64,0x20,0x63,0x61,0x72,0x64,0x2E,0x00,0x1C,
+ 0x3E,0x40,0x58,0x30,0x35,0x32,0x40,0x43,0x30,0x30,0x31,0x51,
+ 0x75,0x61,0x64,0x72,0x61,0x74,0x69,0x63,0x20,0x73,0x70,0x6C,
+ 0x69,0x6E,0x65,0x3A,0x4F,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,
+ 0x43,0x30,0x30,0x32,0x33,0x2D,0x70,0x6F,0x69,0x6E,0x74,0x20,
+ 0x71,0x75,0x61,0x64,0x72,0x61,0x74,0x69,0x63,0x20,0x73,0x70,
+ 0x6C,0x69,0x6E,0x65,0x20,0x69,0x6E,0x74,0x65,0x72,0x70,0x6F,
+ 0x6C,0x61,0x74,0x69,0x6F,0x6E,0x2E,0x20,0x49,0x66,0x20,0x79,
+ 0x6F,0x75,0x20,0x70,0x72,0x65,0x66,0x65,0x72,0x20,0x74,0x68,
+ 0x65,0x20,0x73,0x6F,0x66,0x74,0x20,0x73,0x6F,0x75,0x6E,0x64,
+ 0x47,0x6F,0x66,0x20,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,0x37,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,0x50,0x54,0x68,0x69,0x73,0x20,0x63,0x61,0x6E,
- 0x20,0x61,0x6E,0x64,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,0x73,0x69,0x7A,
- 0x65,0x73,0x2C,0x20,0x6D,0x61,0x6B,0x69,0x6E,0x67,0x20,0x74,
- 0x68,0x65,0x20,0x69,0x6D,0x61,0x67,0x65,0x20,0x6C,0x6F,0x6F,
- 0x6B,0x20,0x71,0x75,0x69,0x74,0x65,0x20,0x62,0x61,0x64,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,
+ 0x2C,0x20,0x62,0x75,0x74,0x20,0x77,0x61,0x6E,0x74,0x20,0x6A,
+ 0x75,0x73,0x74,0x20,0x61,0x20,0x74,0x61,0x64,0x20,0x62,0x69,
+ 0x74,0x20,0x6D,0x6F,0x72,0x65,0x20,0x74,0x72,0x65,0x62,0x6C,
+ 0x65,0x2C,0x20,0x74,0x68,0x65,0x6E,0x20,0x74,0x68,0x69,0x73,
+ 0x43,0x6D,0x61,0x79,0x20,0x62,0x65,0x20,0x61,0x20,0x67,0x6F,
+ 0x6F,0x64,0x20,0x6F,0x70,0x74,0x69,0x6F,0x6E,0x2E,0x20,0x4C,
+ 0x69,0x6B,0x65,0x20,0x6C,0x69,0x6E,0x65,0x61,0x72,0x20,0x69,
+ 0x6E,0x74,0x65,0x72,0x70,0x6F,0x6C,0x61,0x74,0x69,0x6F,0x6E,
+ 0x2C,0x20,0x74,0x68,0x69,0x73,0x20,0x6F,0x6E,0x65,0x20,0x69,
+ 0x73,0x6E,0x27,0x74,0x20,0x74,0x6F,0x6F,0x17,0x68,0x61,0x72,
+ 0x73,0x68,0x20,0x6F,0x6E,0x20,0x6C,0x6F,0x2D,0x66,0x69,0x20,
+ 0x73,0x61,0x6D,0x70,0x6C,0x65,0x73,0x2E,0x00,0x18,0x3E,0x40,
+ 0x58,0x30,0x35,0x32,0x40,0x43,0x30,0x30,0x31,0x43,0x75,0x62,
+ 0x69,0x63,0x20,0x73,0x70,0x6C,0x69,0x6E,0x65,0x3A,0x4F,0x3E,
+ 0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x34,0x2D,
+ 0x70,0x6F,0x69,0x6E,0x74,0x20,0x63,0x75,0x62,0x69,0x63,0x20,
+ 0x48,0x65,0x72,0x6D,0x69,0x74,0x65,0x20,0x73,0x70,0x6C,0x69,
+ 0x6E,0x65,0x20,0x69,0x6E,0x74,0x65,0x72,0x70,0x6F,0x6C,0x61,
+ 0x74,0x69,0x6F,0x6E,0x2E,0x20,0x41,0x20,0x67,0x6F,0x6F,0x64,
+ 0x20,0x74,0x72,0x61,0x64,0x65,0x2D,0x6F,0x66,0x66,0x20,0x62,
+ 0x65,0x74,0x77,0x65,0x65,0x6E,0x30,0x73,0x68,0x61,0x72,0x70,
+ 0x6E,0x65,0x73,0x73,0x20,0x61,0x6E,0x64,0x20,0x22,0x66,0x75,
+ 0x6E,0x20,0x6C,0x69,0x73,0x74,0x65,0x6E,0x69,0x6E,0x67,0x22,
+ 0x20,0x66,0x6F,0x72,0x20,0x6C,0x6F,0x2D,0x66,0x69,0x20,0x73,
+ 0x61,0x6D,0x70,0x6C,0x65,0x73,0x2E,0x45,0x3E,0x41,0x20,0x70,
+ 0x72,0x65,0x74,0x74,0x79,0x20,0x73,0x6F,0x6C,0x69,0x64,0x20,
+ 0x6F,0x70,0x74,0x69,0x6F,0x6E,0x20,0x69,0x66,0x20,0x79,0x6F,
+ 0x75,0x20,0x70,0x6C,0x61,0x79,0x20,0x61,0x20,0x77,0x69,0x64,
+ 0x65,0x20,0x73,0x65,0x6C,0x65,0x63,0x74,0x69,0x6F,0x6E,0x20,
+ 0x6F,0x66,0x20,0x6D,0x69,0x78,0x65,0x64,0x20,0x6D,0x6F,0x64,
+ 0x75,0x6C,0x65,0x73,0x2E,0x00,0x1A,0x3E,0x40,0x58,0x30,0x35,
+ 0x32,0x40,0x43,0x30,0x30,0x31,0x53,0x69,0x6E,0x63,0x20,0x28,
+ 0x38,0x20,0x70,0x6F,0x69,0x6E,0x74,0x29,0x3A,0x50,0x3E,0x40,
+ 0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x38,0x2D,0x70,
+ 0x6F,0x69,0x6E,0x74,0x20,0x73,0x69,0x6E,0x63,0x20,0x69,0x6E,
+ 0x74,0x65,0x72,0x70,0x6F,0x6C,0x61,0x74,0x69,0x6F,0x6E,0x20,
+ 0x77,0x69,0x74,0x68,0x20,0x61,0x20,0x4B,0x61,0x69,0x73,0x65,
+ 0x72,0x2D,0x42,0x65,0x73,0x73,0x65,0x6C,0x20,0x77,0x69,0x6E,
+ 0x64,0x6F,0x77,0x2E,0x20,0x49,0x66,0x20,0x79,0x6F,0x75,0x20,
+ 0x6D,0x61,0x69,0x6E,0x6C,0x79,0x44,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,0x74,0x68,0x69,0x73,0x20,0x6D,0x61,0x79,
+ 0x20,0x62,0x65,0x45,0x61,0x20,0x67,0x6F,0x6F,0x64,0x20,0x6F,
+ 0x70,0x74,0x69,0x6F,0x6E,0x2E,0x20,0x49,0x74,0x27,0x73,0x20,
+ 0x61,0x20,0x68,0x69,0x67,0x68,0x20,0x71,0x75,0x61,0x6C,0x69,
+ 0x74,0x79,0x20,0x69,0x6E,0x74,0x65,0x72,0x70,0x6F,0x6C,0x61,
+ 0x74,0x6F,0x72,0x2E,0x20,0x48,0x6F,0x77,0x65,0x76,0x65,0x72,
+ 0x2C,0x20,0x69,0x74,0x20,0x6D,0x61,0x79,0x20,0x6B,0x69,0x6C,
+ 0x6C,0x42,0x74,0x68,0x65,0x20,0x66,0x75,0x6E,0x20,0x6F,0x66,
+ 0x20,0x6C,0x69,0x73,0x74,0x65,0x6E,0x69,0x6E,0x67,0x20,0x74,
+ 0x6F,0x20,0x6C,0x6F,0x2D,0x66,0x69,0x20,0x6D,0x6F,0x64,0x75,
+ 0x6C,0x65,0x73,0x2C,0x20,0x61,0x73,0x20,0x74,0x68,0x65,0x79,
+ 0x20,0x6D,0x61,0x79,0x20,0x73,0x6F,0x75,0x6E,0x64,0x20,0x76,
+ 0x65,0x72,0x79,0x20,0x64,0x75,0x6C,0x6C,0x0C,0x61,0x6E,0x64,
+ 0x20,0x63,0x6F,0x6C,0x6F,0x72,0x65,0x64,0x2E,0x01,0x3E,0x1B,
+ 0x3E,0x40,0x58,0x30,0x35,0x32,0x40,0x43,0x30,0x30,0x31,0x53,
+ 0x69,0x6E,0x63,0x20,0x28,0x31,0x36,0x20,0x70,0x6F,0x69,0x6E,
+ 0x74,0x29,0x3A,0x4E,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,
+ 0x30,0x30,0x32,0x53,0x61,0x6D,0x65,0x20,0x61,0x73,0x20,0x61,
+ 0x62,0x6F,0x76,0x65,0x2C,0x20,0x62,0x75,0x74,0x20,0x77,0x69,
+ 0x74,0x68,0x20,0x31,0x36,0x20,0x70,0x6F,0x69,0x6E,0x74,0x73,
+ 0x20,0x28,0x62,0x65,0x74,0x74,0x65,0x72,0x20,0x71,0x75,0x61,
+ 0x6C,0x69,0x74,0x79,0x29,0x2E,0x20,0x54,0x68,0x69,0x73,0x20,
+ 0x6D,0x65,0x61,0x6E,0x73,0x20,0x6C,0x65,0x73,0x73,0x41,0x61,
+ 0x6C,0x69,0x61,0x73,0x69,0x6E,0x67,0x20,0x61,0x6E,0x64,0x20,
+ 0x6D,0x6F,0x72,0x65,0x20,0x73,0x68,0x61,0x72,0x70,0x6E,0x65,
+ 0x73,0x73,0x2C,0x20,0x62,0x75,0x74,0x20,0x65,0x76,0x65,0x6E,
+ 0x20,0x6D,0x6F,0x72,0x65,0x20,0x66,0x69,0x6C,0x74,0x65,0x72,
+ 0x65,0x64,0x2F,0x64,0x75,0x6C,0x6C,0x20,0x73,0x6F,0x75,0x6E,
+ 0x64,0x20,0x6F,0x6E,0x44,0x6C,0x6F,0x2D,0x66,0x69,0x20,0x73,
+ 0x61,0x6D,0x70,0x6C,0x65,0x73,0x2E,0x20,0x69,0x66,0x20,0x79,
+ 0x6F,0x75,0x20,0x6F,0x6E,0x6C,0x79,0x20,0x75,0x73,0x65,0x20,
+ 0x28,0x6F,0x72,0x20,0x70,0x6C,0x61,0x79,0x20,0x6D,0x6F,0x64,
+ 0x75,0x6C,0x65,0x73,0x20,0x77,0x69,0x74,0x68,0x29,0x20,0x68,
+ 0x69,0x2D,0x66,0x69,0x20,0x73,0x61,0x6D,0x70,0x6C,0x65,0x73,
+ 0x2C,0x3A,0x74,0x68,0x65,0x6E,0x20,0x74,0x68,0x69,0x73,0x20,
+ 0x69,0x73,0x20,0x67,0x6F,0x69,0x6E,0x67,0x20,0x74,0x6F,0x20,
+ 0x67,0x69,0x76,0x65,0x20,0x74,0x68,0x65,0x20,0x62,0x65,0x73,
+ 0x74,0x20,0x71,0x75,0x61,0x6C,0x69,0x74,0x79,0x20,0x61,0x6E,
+ 0x64,0x20,0x73,0x68,0x61,0x72,0x70,0x6E,0x65,0x73,0x73,0x2E,
+ 0x01,0x3E,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,0x37,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,0x50,0x54,0x68,
+ 0x69,0x73,0x20,0x63,0x61,0x6E,0x20,0x61,0x6E,0x64,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,0x73,0x69,0x7A,0x65,0x73,0x2C,0x20,0x6D,0x61,
+ 0x6B,0x69,0x6E,0x67,0x20,0x74,0x68,0x65,0x20,0x69,0x6D,0x61,
+ 0x67,0x65,0x20,0x6C,0x6F,0x6F,0x6B,0x20,0x71,0x75,0x69,0x74,
+ 0x65,0x20,0x62,0x61,0x64,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,0x4C,0x3B,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,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,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,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,0x4C,0x3B,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,
- 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,0x4C,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,0x69,0x73,0x73,0x75,0x65,0x73,0x20,0x77,0x69,0x74,
- 0x68,0x20,0x74,0x68,0x65,0x20,0x6D,0x6F,0x75,0x73,0x65,0x20,
- 0x70,0x69,0x78,0x65,0x6C,0x20,0x6D,0x61,0x70,0x70,0x69,0x6E,
- 0x67,0x20,0x6F,0x6E,0x20,0x73,0x6F,0x6D,0x65,0x14,0x3E,0x40,
- 0x58,0x30,0x32,0x31,0x4C,0x69,0x6E,0x75,0x78,0x20,0x73,0x79,
- 0x73,0x74,0x65,0x6D,0x73,0x2E,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,0x00,0x03,0x45,
- 0x4E,0x44
+ 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,0x4C,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,0x69,0x73,0x73,0x75,
+ 0x65,0x73,0x20,0x77,0x69,0x74,0x68,0x20,0x74,0x68,0x65,0x20,
+ 0x6D,0x6F,0x75,0x73,0x65,0x20,0x70,0x69,0x78,0x65,0x6C,0x20,
+ 0x6D,0x61,0x70,0x70,0x69,0x6E,0x67,0x20,0x6F,0x6E,0x20,0x73,
+ 0x6F,0x6D,0x65,0x14,0x3E,0x40,0x58,0x30,0x32,0x31,0x4C,0x69,
+ 0x6E,0x75,0x78,0x20,0x73,0x79,0x73,0x74,0x65,0x6D,0x73,0x2E,
+ 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,0x00,0x03,0x45,0x4E,0x44
};
#endif
--- a/src/mixer/ft2_cubic_spline.c
+++ b/src/mixer/ft2_cubic_spline.c
@@ -1,6 +1,4 @@
-/*
-** Cubic Hermite spline (Catmull-Rom) interpolation LUT generator
-*/
+// 4-point cubic Hermite spline (Catmull-Rom) interpolation LUT generator
#include <stdint.h>
#include <stdbool.h>
@@ -8,33 +6,28 @@
#include "ft2_cubic_spline.h"
#include "../ft2_video.h" // showErrorMsgBox()
-float *f4PointCubicSplineLUT = NULL, *f6PointCubicSplineLUT = NULL; // globalized
+float *fCubicSplineLUT = NULL; // globalized
-bool calcCubicSplineTables(void)
+bool setupCubicSplineTable(void)
{
- float *fPtr;
-
- f4PointCubicSplineLUT = (float *)malloc(4 * CUBIC4P_SPLINE_PHASES * sizeof (float));
- f6PointCubicSplineLUT = (float *)malloc(6 * CUBIC6P_SPLINE_PHASES * sizeof (float));
-
- if (f4PointCubicSplineLUT == NULL || f6PointCubicSplineLUT == NULL)
+ fCubicSplineLUT = (float *)malloc(CUBIC_SPLINE_WIDTH * CUBIC_SPLINE_PHASES * sizeof (float));
+ if (fCubicSplineLUT == NULL)
{
showErrorMsgBox("Not enough memory!");
return false;
}
- // 4-point Cubic Hermite (Catmull-Rom)
- fPtr = f4PointCubicSplineLUT;
- for (int32_t i = 0; i < CUBIC4P_SPLINE_PHASES; i++)
+ float *fPtr = fCubicSplineLUT;
+ for (int32_t i = 0; i < CUBIC_SPLINE_PHASES; i++)
{
- const double x1 = i * (1.0 / CUBIC4P_SPLINE_PHASES);
+ const double x1 = i * (1.0 / CUBIC_SPLINE_PHASES);
const double x2 = x1 * x1; // x^2
const double x3 = x2 * x1; // x^3
- double t1 = (-(1.0/2.0) * x3) + ( ( 1.0) * x2) + (-(1.0/2.0) * x1);
- double t2 = ( (3.0/2.0) * x3) + (-(5.0/2.0) * x2) + 1.0;
- double t3 = (-(3.0/2.0) * x3) + ( ( 2.0) * x2) + ( (1.0/2.0) * x1);
- double t4 = ( (1.0/2.0) * x3) + (-(1.0/2.0) * x2);
+ double t1 = (-0.5 * x3) + ( 1.0 * x2) + (-0.5 * x1);
+ double t2 = ( 1.5 * x3) + (-2.5 * x2) + 1.0;
+ double t3 = (-1.5 * x3) + ( 2.0 * x2) + ( 0.5 * x1);
+ double t4 = ( 0.5 * x3) + (-0.5 * x2);
*fPtr++ = (float)t1;
*fPtr++ = (float)t2;
@@ -42,11 +35,11 @@
*fPtr++ = (float)t4;
}
+ /*
// 6-point Cubic Hermite (Catmull-Rom)
- fPtr = f6PointCubicSplineLUT;
- for (int32_t i = 0; i < CUBIC6P_SPLINE_PHASES; i++)
+ for (int32_t i = 0; i < CUBIC_SPLINE_PHASES; i++)
{
- const double x1 = i * (1.0 / CUBIC6P_SPLINE_PHASES);
+ const double x1 = i * (1.0 / CUBIC_SPLINE_PHASES);
const double x2 = x1 * x1; // x^2
const double x3 = x2 * x1; // x^3
@@ -64,21 +57,16 @@
*fPtr++ = (float)t5;
*fPtr++ = (float)t6;
}
+ */
return true;
}
-void freeCubicSplineTables(void)
+void freeCubicSplineTable(void)
{
- if (f4PointCubicSplineLUT != NULL)
+ if (fCubicSplineLUT != NULL)
{
- free(f4PointCubicSplineLUT);
- f4PointCubicSplineLUT = NULL;
- }
-
- if (f6PointCubicSplineLUT != NULL)
- {
- free(f6PointCubicSplineLUT);
- f6PointCubicSplineLUT = NULL;
+ free(fCubicSplineLUT);
+ fCubicSplineLUT = NULL;
}
}
--- a/src/mixer/ft2_cubic_spline.h
+++ b/src/mixer/ft2_cubic_spline.h
@@ -4,16 +4,14 @@
#include <stdbool.h>
#include "ft2_mix.h" // MIXER_FRAC_BITS
-#define CUBIC4P_SPLINE_PHASES 8192
-#define CUBIC4P_SPLINE_PHASES_BITS 13 // log2(CUBIC4P_SPLINE_PHASES)
-#define CUBIC4P_SPLINE_FSHIFT (MIXER_FRAC_BITS-(CUBIC4P_SPLINE_PHASES_BITS+2))
-#define CUBIC4P_SPLINE_FMASK ((4*CUBIC4P_SPLINE_PHASES)-4)
+#define CUBIC_SPLINE_WIDTH 4
+#define CUBIC_SPLINE_WIDTH_BITS 2 /* log2(CUBIC_SPLINE_WIDTH) */
+#define CUBIC_SPLINE_PHASES 8192
+#define CUBIC_SPLINE_PHASES_BITS 13 // log2(CUBIC_SPLINE_PHASES)
+#define CUBIC_SPLINE_FRACSHIFT (MIXER_FRAC_BITS-(CUBIC_SPLINE_PHASES_BITS+CUBIC_SPLINE_WIDTH_BITS))
+#define CUBIC_SPLINE_FRACMASK ((CUBIC_SPLINE_WIDTH*CUBIC_SPLINE_PHASES)-CUBIC_SPLINE_WIDTH)
-#define CUBIC6P_SPLINE_PHASES 8192
-#define CUBIC6P_SPLINE_PHASES_BITS 13 // log2(CUBIC6P_SPLINE_PHASES)
-#define CUBIC6P_SPLINE_FSHIFT (MIXER_FRAC_BITS-CUBIC6P_SPLINE_PHASES_BITS)
+extern float *fCubicSplineLUT;
-extern float *f4PointCubicSplineLUT, *f6PointCubicSplineLUT;
-
-bool calcCubicSplineTables(void);
-void freeCubicSplineTables(void);
+bool setupCubicSplineTable(void);
+void freeCubicSplineTable(void);
--- a/src/mixer/ft2_mix.c
+++ b/src/mixer/ft2_mix.c
@@ -9,7 +9,7 @@
** (Note: Mixing macros can be found in ft2_mix_macros.h)
**
** Specifications:
-** - Interpolation: None, 2-tap linear, 4-tap/6-tap cubic Hermite, 8-tap/16-tap windowed-sinc
+** - Interpolation: None, 2-tap linear, 3-tap quadratic spline, 4-tap cubic spline, 8-tap/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
@@ -641,7 +641,7 @@
SET_BACK_MIXER_POS
}
-static void mix8bNoLoopC4PIntrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
+static void mix8bNoLoopCIntrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
{
const int8_t *base, *smpPtr;
float fSample, *fMixBufferL, *fMixBufferR;
@@ -661,19 +661,19 @@
for (i = 0; i < (samplesToMix & 3); i++)
{
- RENDER_8BIT_SMP_C4PINTRP
+ RENDER_8BIT_SMP_CINTRP
INC_POS
}
samplesToMix >>= 2;
for (i = 0; i < samplesToMix; i++)
{
- RENDER_8BIT_SMP_C4PINTRP
+ RENDER_8BIT_SMP_CINTRP
INC_POS
- RENDER_8BIT_SMP_C4PINTRP
+ RENDER_8BIT_SMP_CINTRP
INC_POS
- RENDER_8BIT_SMP_C4PINTRP
+ RENDER_8BIT_SMP_CINTRP
INC_POS
- RENDER_8BIT_SMP_C4PINTRP
+ RENDER_8BIT_SMP_CINTRP
INC_POS
}
@@ -683,7 +683,7 @@
SET_BACK_MIXER_POS
}
-static void mix8bLoopC4PIntrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
+static void mix8bLoopCIntrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
{
const int8_t *base, *smpPtr;
int8_t *smpTapPtr;
@@ -707,19 +707,19 @@
{
for (i = 0; i < (samplesToMix & 3); i++)
{
- RENDER_8BIT_SMP_C4PINTRP_TAP_FIX
+ RENDER_8BIT_SMP_CINTRP_TAP_FIX
INC_POS
}
samplesToMix >>= 2;
for (i = 0; i < samplesToMix; i++)
{
- RENDER_8BIT_SMP_C4PINTRP_TAP_FIX
+ RENDER_8BIT_SMP_CINTRP_TAP_FIX
INC_POS
- RENDER_8BIT_SMP_C4PINTRP_TAP_FIX
+ RENDER_8BIT_SMP_CINTRP_TAP_FIX
INC_POS
- RENDER_8BIT_SMP_C4PINTRP_TAP_FIX
+ RENDER_8BIT_SMP_CINTRP_TAP_FIX
INC_POS
- RENDER_8BIT_SMP_C4PINTRP_TAP_FIX
+ RENDER_8BIT_SMP_CINTRP_TAP_FIX
INC_POS
}
}
@@ -727,19 +727,19 @@
{
for (i = 0; i < (samplesToMix & 3); i++)
{
- RENDER_8BIT_SMP_C4PINTRP
+ RENDER_8BIT_SMP_CINTRP
INC_POS
}
samplesToMix >>= 2;
for (i = 0; i < samplesToMix; i++)
{
- RENDER_8BIT_SMP_C4PINTRP
+ RENDER_8BIT_SMP_CINTRP
INC_POS
- RENDER_8BIT_SMP_C4PINTRP
+ RENDER_8BIT_SMP_CINTRP
INC_POS
- RENDER_8BIT_SMP_C4PINTRP
+ RENDER_8BIT_SMP_CINTRP
INC_POS
- RENDER_8BIT_SMP_C4PINTRP
+ RENDER_8BIT_SMP_CINTRP
INC_POS
}
}
@@ -750,7 +750,7 @@
SET_BACK_MIXER_POS
}
-static void mix8bBidiLoopC4PIntrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
+static void mix8bBidiLoopCIntrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
{
const int8_t *base, *revBase, *smpPtr;
int8_t *smpTapPtr;
@@ -775,19 +775,19 @@
{
for (i = 0; i < (samplesToMix & 3); i++)
{
- RENDER_8BIT_SMP_C4PINTRP_TAP_FIX
+ RENDER_8BIT_SMP_CINTRP_TAP_FIX
INC_POS_BIDI
}
samplesToMix >>= 2;
for (i = 0; i < samplesToMix; i++)
{
- RENDER_8BIT_SMP_C4PINTRP_TAP_FIX
+ RENDER_8BIT_SMP_CINTRP_TAP_FIX
INC_POS_BIDI
- RENDER_8BIT_SMP_C4PINTRP_TAP_FIX
+ RENDER_8BIT_SMP_CINTRP_TAP_FIX
INC_POS_BIDI
- RENDER_8BIT_SMP_C4PINTRP_TAP_FIX
+ RENDER_8BIT_SMP_CINTRP_TAP_FIX
INC_POS_BIDI
- RENDER_8BIT_SMP_C4PINTRP_TAP_FIX
+ RENDER_8BIT_SMP_CINTRP_TAP_FIX
INC_POS_BIDI
}
}
@@ -795,19 +795,19 @@
{
for (i = 0; i < (samplesToMix & 3); i++)
{
- RENDER_8BIT_SMP_C4PINTRP
+ RENDER_8BIT_SMP_CINTRP
INC_POS_BIDI
}
samplesToMix >>= 2;
for (i = 0; i < samplesToMix; i++)
{
- RENDER_8BIT_SMP_C4PINTRP
+ RENDER_8BIT_SMP_CINTRP
INC_POS_BIDI
- RENDER_8BIT_SMP_C4PINTRP
+ RENDER_8BIT_SMP_CINTRP
INC_POS_BIDI
- RENDER_8BIT_SMP_C4PINTRP
+ RENDER_8BIT_SMP_CINTRP
INC_POS_BIDI
- RENDER_8BIT_SMP_C4PINTRP
+ RENDER_8BIT_SMP_CINTRP
INC_POS_BIDI
}
}
@@ -819,7 +819,7 @@
SET_BACK_MIXER_POS
}
-static void mix8bNoLoopC6PIntrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
+static void mix8bNoLoopQIntrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
{
const int8_t *base, *smpPtr;
float fSample, *fMixBufferL, *fMixBufferR;
@@ -839,19 +839,19 @@
for (i = 0; i < (samplesToMix & 3); i++)
{
- RENDER_8BIT_SMP_C6PINTRP
+ RENDER_8BIT_SMP_QINTRP
INC_POS
}
samplesToMix >>= 2;
for (i = 0; i < samplesToMix; i++)
{
- RENDER_8BIT_SMP_C6PINTRP
+ RENDER_8BIT_SMP_QINTRP
INC_POS
- RENDER_8BIT_SMP_C6PINTRP
+ RENDER_8BIT_SMP_QINTRP
INC_POS
- RENDER_8BIT_SMP_C6PINTRP
+ RENDER_8BIT_SMP_QINTRP
INC_POS
- RENDER_8BIT_SMP_C6PINTRP
+ RENDER_8BIT_SMP_QINTRP
INC_POS
}
@@ -861,10 +861,9 @@
SET_BACK_MIXER_POS
}
-static void mix8bLoopC6PIntrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
+static void mix8bLoopQIntrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
{
const int8_t *base, *smpPtr;
- int8_t *smpTapPtr;
float fSample, *fMixBufferL, *fMixBufferR;
int32_t position;
uint32_t i, samplesToMix, samplesLeft;
@@ -873,7 +872,6 @@
GET_VOL
GET_MIXER_VARS
SET_BASE8
- PREPARE_TAP_FIX8
samplesLeft = numSamples;
while (samplesLeft > 0)
@@ -881,45 +879,22 @@
LIMIT_MIX_NUM
samplesLeft -= samplesToMix;
- if (v->hasLooped) // the negative interpolation taps need a special case after the sample has looped once
+ for (i = 0; i < (samplesToMix & 3); i++)
{
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_8BIT_SMP_C6PINTRP_TAP_FIX
- INC_POS
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_8BIT_SMP_C6PINTRP_TAP_FIX
- INC_POS
- RENDER_8BIT_SMP_C6PINTRP_TAP_FIX
- INC_POS
- RENDER_8BIT_SMP_C6PINTRP_TAP_FIX
- INC_POS
- RENDER_8BIT_SMP_C6PINTRP_TAP_FIX
- INC_POS
- }
+ RENDER_8BIT_SMP_QINTRP
+ INC_POS
}
- else
+ samplesToMix >>= 2;
+ for (i = 0; i < samplesToMix; i++)
{
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_8BIT_SMP_C6PINTRP
- INC_POS
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_8BIT_SMP_C6PINTRP
- INC_POS
- RENDER_8BIT_SMP_C6PINTRP
- INC_POS
- RENDER_8BIT_SMP_C6PINTRP
- INC_POS
- RENDER_8BIT_SMP_C6PINTRP
- INC_POS
- }
+ RENDER_8BIT_SMP_QINTRP
+ INC_POS
+ RENDER_8BIT_SMP_QINTRP
+ INC_POS
+ RENDER_8BIT_SMP_QINTRP
+ INC_POS
+ RENDER_8BIT_SMP_QINTRP
+ INC_POS
}
WRAP_LOOP
@@ -928,10 +903,9 @@
SET_BACK_MIXER_POS
}
-static void mix8bBidiLoopC6PIntrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
+static void mix8bBidiLoopQIntrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
{
const int8_t *base, *revBase, *smpPtr;
- int8_t *smpTapPtr;
float fSample, *fMixBufferL, *fMixBufferR;
int32_t position;
uint32_t i, samplesToMix, samplesLeft;
@@ -940,7 +914,6 @@
GET_VOL
GET_MIXER_VARS
SET_BASE8_BIDI
- PREPARE_TAP_FIX8
samplesLeft = numSamples;
while (samplesLeft > 0)
@@ -949,45 +922,22 @@
samplesLeft -= samplesToMix;
START_BIDI
- if (v->hasLooped) // the negative interpolation taps need a special case after the sample has looped once
+ for (i = 0; i < (samplesToMix & 3); i++)
{
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_8BIT_SMP_C6PINTRP_TAP_FIX
- INC_POS_BIDI
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_8BIT_SMP_C6PINTRP_TAP_FIX
- INC_POS_BIDI
- RENDER_8BIT_SMP_C6PINTRP_TAP_FIX
- INC_POS_BIDI
- RENDER_8BIT_SMP_C6PINTRP_TAP_FIX
- INC_POS_BIDI
- RENDER_8BIT_SMP_C6PINTRP_TAP_FIX
- INC_POS_BIDI
- }
+ RENDER_8BIT_SMP_QINTRP
+ INC_POS_BIDI
}
- else
+ samplesToMix >>= 2;
+ for (i = 0; i < samplesToMix; i++)
{
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_8BIT_SMP_C6PINTRP
- INC_POS_BIDI
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_8BIT_SMP_C6PINTRP
- INC_POS_BIDI
- RENDER_8BIT_SMP_C6PINTRP
- INC_POS_BIDI
- RENDER_8BIT_SMP_C6PINTRP
- INC_POS_BIDI
- RENDER_8BIT_SMP_C6PINTRP
- INC_POS_BIDI
- }
+ RENDER_8BIT_SMP_QINTRP
+ INC_POS_BIDI
+ RENDER_8BIT_SMP_QINTRP
+ INC_POS_BIDI
+ RENDER_8BIT_SMP_QINTRP
+ INC_POS_BIDI
+ RENDER_8BIT_SMP_QINTRP
+ INC_POS_BIDI
}
END_BIDI
@@ -1726,7 +1676,7 @@
SET_BACK_MIXER_POS
}
-static void mix8bRampNoLoopC4PIntrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
+static void mix8bRampNoLoopCIntrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
{
const int8_t *base, *smpPtr;
float fSample, *fMixBufferL, *fMixBufferR;
@@ -1748,7 +1698,7 @@
for (i = 0; i < (samplesToMix & 3); i++)
{
- RENDER_8BIT_SMP_C4PINTRP
+ RENDER_8BIT_SMP_CINTRP
VOLUME_RAMPING
INC_POS
}
@@ -1755,16 +1705,16 @@
samplesToMix >>= 2;
for (i = 0; i < samplesToMix; i++)
{
- RENDER_8BIT_SMP_C4PINTRP
+ RENDER_8BIT_SMP_CINTRP
VOLUME_RAMPING
INC_POS
- RENDER_8BIT_SMP_C4PINTRP
+ RENDER_8BIT_SMP_CINTRP
VOLUME_RAMPING
INC_POS
- RENDER_8BIT_SMP_C4PINTRP
+ RENDER_8BIT_SMP_CINTRP
VOLUME_RAMPING
INC_POS
- RENDER_8BIT_SMP_C4PINTRP
+ RENDER_8BIT_SMP_CINTRP
VOLUME_RAMPING
INC_POS
}
@@ -1776,7 +1726,7 @@
SET_BACK_MIXER_POS
}
-static void mix8bRampLoopC4PIntrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
+static void mix8bRampLoopCIntrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
{
const int8_t *base, *smpPtr;
int8_t *smpTapPtr;
@@ -1802,7 +1752,7 @@
{
for (i = 0; i < (samplesToMix & 3); i++)
{
- RENDER_8BIT_SMP_C4PINTRP_TAP_FIX
+ RENDER_8BIT_SMP_CINTRP_TAP_FIX
VOLUME_RAMPING
INC_POS
}
@@ -1809,16 +1759,16 @@
samplesToMix >>= 2;
for (i = 0; i < samplesToMix; i++)
{
- RENDER_8BIT_SMP_C4PINTRP_TAP_FIX
+ RENDER_8BIT_SMP_CINTRP_TAP_FIX
VOLUME_RAMPING
INC_POS
- RENDER_8BIT_SMP_C4PINTRP_TAP_FIX
+ RENDER_8BIT_SMP_CINTRP_TAP_FIX
VOLUME_RAMPING
INC_POS
- RENDER_8BIT_SMP_C4PINTRP_TAP_FIX
+ RENDER_8BIT_SMP_CINTRP_TAP_FIX
VOLUME_RAMPING
INC_POS
- RENDER_8BIT_SMP_C4PINTRP_TAP_FIX
+ RENDER_8BIT_SMP_CINTRP_TAP_FIX
VOLUME_RAMPING
INC_POS
}
@@ -1827,7 +1777,7 @@
{
for (i = 0; i < (samplesToMix & 3); i++)
{
- RENDER_8BIT_SMP_C4PINTRP
+ RENDER_8BIT_SMP_CINTRP
VOLUME_RAMPING
INC_POS
}
@@ -1834,16 +1784,16 @@
samplesToMix >>= 2;
for (i = 0; i < samplesToMix; i++)
{
- RENDER_8BIT_SMP_C4PINTRP
+ RENDER_8BIT_SMP_CINTRP
VOLUME_RAMPING
INC_POS
- RENDER_8BIT_SMP_C4PINTRP
+ RENDER_8BIT_SMP_CINTRP
VOLUME_RAMPING
INC_POS
- RENDER_8BIT_SMP_C4PINTRP
+ RENDER_8BIT_SMP_CINTRP
VOLUME_RAMPING
INC_POS
- RENDER_8BIT_SMP_C4PINTRP
+ RENDER_8BIT_SMP_CINTRP
VOLUME_RAMPING
INC_POS
}
@@ -1856,7 +1806,7 @@
SET_BACK_MIXER_POS
}
-static void mix8bRampBidiLoopC4PIntrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
+static void mix8bRampBidiLoopCIntrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
{
const int8_t *base, *revBase, *smpPtr;
int8_t *smpTapPtr;
@@ -1883,7 +1833,7 @@
{
for (i = 0; i < (samplesToMix & 3); i++)
{
- RENDER_8BIT_SMP_C4PINTRP_TAP_FIX
+ RENDER_8BIT_SMP_CINTRP_TAP_FIX
VOLUME_RAMPING
INC_POS_BIDI
}
@@ -1890,16 +1840,16 @@
samplesToMix >>= 2;
for (i = 0; i < samplesToMix; i++)
{
- RENDER_8BIT_SMP_C4PINTRP_TAP_FIX
+ RENDER_8BIT_SMP_CINTRP_TAP_FIX
VOLUME_RAMPING
INC_POS_BIDI
- RENDER_8BIT_SMP_C4PINTRP_TAP_FIX
+ RENDER_8BIT_SMP_CINTRP_TAP_FIX
VOLUME_RAMPING
INC_POS_BIDI
- RENDER_8BIT_SMP_C4PINTRP_TAP_FIX
+ RENDER_8BIT_SMP_CINTRP_TAP_FIX
VOLUME_RAMPING
INC_POS_BIDI
- RENDER_8BIT_SMP_C4PINTRP_TAP_FIX
+ RENDER_8BIT_SMP_CINTRP_TAP_FIX
VOLUME_RAMPING
INC_POS_BIDI
}
@@ -1908,7 +1858,7 @@
{
for (i = 0; i < (samplesToMix & 3); i++)
{
- RENDER_8BIT_SMP_C4PINTRP
+ RENDER_8BIT_SMP_CINTRP
VOLUME_RAMPING
INC_POS_BIDI
}
@@ -1915,16 +1865,16 @@
samplesToMix >>= 2;
for (i = 0; i < samplesToMix; i++)
{
- RENDER_8BIT_SMP_C4PINTRP
+ RENDER_8BIT_SMP_CINTRP
VOLUME_RAMPING
INC_POS_BIDI
- RENDER_8BIT_SMP_C4PINTRP
+ RENDER_8BIT_SMP_CINTRP
VOLUME_RAMPING
INC_POS_BIDI
- RENDER_8BIT_SMP_C4PINTRP
+ RENDER_8BIT_SMP_CINTRP
VOLUME_RAMPING
INC_POS_BIDI
- RENDER_8BIT_SMP_C4PINTRP
+ RENDER_8BIT_SMP_CINTRP
VOLUME_RAMPING
INC_POS_BIDI
}
@@ -1938,7 +1888,7 @@
SET_BACK_MIXER_POS
}
-static void mix8bRampNoLoopC6PIntrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
+static void mix8bRampNoLoopQIntrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
{
const int8_t *base, *smpPtr;
float fSample, *fMixBufferL, *fMixBufferR;
@@ -1960,7 +1910,7 @@
for (i = 0; i < (samplesToMix & 3); i++)
{
- RENDER_8BIT_SMP_C6PINTRP
+ RENDER_8BIT_SMP_QINTRP
VOLUME_RAMPING
INC_POS
}
@@ -1967,16 +1917,16 @@
samplesToMix >>= 2;
for (i = 0; i < samplesToMix; i++)
{
- RENDER_8BIT_SMP_C6PINTRP
+ RENDER_8BIT_SMP_QINTRP
VOLUME_RAMPING
INC_POS
- RENDER_8BIT_SMP_C6PINTRP
+ RENDER_8BIT_SMP_QINTRP
VOLUME_RAMPING
INC_POS
- RENDER_8BIT_SMP_C6PINTRP
+ RENDER_8BIT_SMP_QINTRP
VOLUME_RAMPING
INC_POS
- RENDER_8BIT_SMP_C6PINTRP
+ RENDER_8BIT_SMP_QINTRP
VOLUME_RAMPING
INC_POS
}
@@ -1988,10 +1938,9 @@
SET_BACK_MIXER_POS
}
-static void mix8bRampLoopC6PIntrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
+static void mix8bRampLoopQIntrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
{
const int8_t *base, *smpPtr;
- int8_t *smpTapPtr;
float fSample, *fMixBufferL, *fMixBufferR;
int32_t position;
float fVolumeLDelta, fVolumeRDelta, fVolumeL, fVolumeR;
@@ -2001,7 +1950,6 @@
GET_VOL_RAMP
GET_MIXER_VARS_RAMP
SET_BASE8
- PREPARE_TAP_FIX8
samplesLeft = numSamples;
while (samplesLeft > 0)
@@ -2010,55 +1958,27 @@
LIMIT_MIX_NUM_RAMP
samplesLeft -= samplesToMix;
- if (v->hasLooped) // the negative interpolation taps need a special case after the sample has looped once
+ for (i = 0; i < (samplesToMix & 3); i++)
{
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_8BIT_SMP_C6PINTRP_TAP_FIX
- VOLUME_RAMPING
- INC_POS
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_8BIT_SMP_C6PINTRP_TAP_FIX
- VOLUME_RAMPING
- INC_POS
- RENDER_8BIT_SMP_C6PINTRP_TAP_FIX
- VOLUME_RAMPING
- INC_POS
- RENDER_8BIT_SMP_C6PINTRP_TAP_FIX
- VOLUME_RAMPING
- INC_POS
- RENDER_8BIT_SMP_C6PINTRP_TAP_FIX
- VOLUME_RAMPING
- INC_POS
- }
+ RENDER_8BIT_SMP_QINTRP
+ VOLUME_RAMPING
+ INC_POS
}
- else
+ samplesToMix >>= 2;
+ for (i = 0; i < samplesToMix; i++)
{
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_8BIT_SMP_C6PINTRP
- VOLUME_RAMPING
- INC_POS
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_8BIT_SMP_C6PINTRP
- VOLUME_RAMPING
- INC_POS
- RENDER_8BIT_SMP_C6PINTRP
- VOLUME_RAMPING
- INC_POS
- RENDER_8BIT_SMP_C6PINTRP
- VOLUME_RAMPING
- INC_POS
- RENDER_8BIT_SMP_C6PINTRP
- VOLUME_RAMPING
- INC_POS
- }
+ RENDER_8BIT_SMP_QINTRP
+ VOLUME_RAMPING
+ INC_POS
+ RENDER_8BIT_SMP_QINTRP
+ VOLUME_RAMPING
+ INC_POS
+ RENDER_8BIT_SMP_QINTRP
+ VOLUME_RAMPING
+ INC_POS
+ RENDER_8BIT_SMP_QINTRP
+ VOLUME_RAMPING
+ INC_POS
}
WRAP_LOOP
@@ -2068,10 +1988,9 @@
SET_BACK_MIXER_POS
}
-static void mix8bRampBidiLoopC6PIntrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
+static void mix8bRampBidiLoopQIntrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
{
const int8_t *base, *revBase, *smpPtr;
- int8_t *smpTapPtr;
float fSample, *fMixBufferL, *fMixBufferR;
int32_t position;
float fVolumeLDelta, fVolumeRDelta, fVolumeL, fVolumeR;
@@ -2081,7 +2000,6 @@
GET_VOL_RAMP
GET_MIXER_VARS_RAMP
SET_BASE8_BIDI
- PREPARE_TAP_FIX8
samplesLeft = numSamples;
while (samplesLeft > 0)
@@ -2091,55 +2009,27 @@
samplesLeft -= samplesToMix;
START_BIDI
- if (v->hasLooped) // the negative interpolation taps need a special case after the sample has looped once
+ for (i = 0; i < (samplesToMix & 3); i++)
{
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_8BIT_SMP_C6PINTRP_TAP_FIX
- VOLUME_RAMPING
- INC_POS_BIDI
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_8BIT_SMP_C6PINTRP_TAP_FIX
- VOLUME_RAMPING
- INC_POS_BIDI
- RENDER_8BIT_SMP_C6PINTRP_TAP_FIX
- VOLUME_RAMPING
- INC_POS_BIDI
- RENDER_8BIT_SMP_C6PINTRP_TAP_FIX
- VOLUME_RAMPING
- INC_POS_BIDI
- RENDER_8BIT_SMP_C6PINTRP_TAP_FIX
- VOLUME_RAMPING
- INC_POS_BIDI
- }
+ RENDER_8BIT_SMP_QINTRP
+ VOLUME_RAMPING
+ INC_POS_BIDI
}
- else
+ samplesToMix >>= 2;
+ for (i = 0; i < samplesToMix; i++)
{
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_8BIT_SMP_C6PINTRP
- VOLUME_RAMPING
- INC_POS_BIDI
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_8BIT_SMP_C6PINTRP
- VOLUME_RAMPING
- INC_POS_BIDI
- RENDER_8BIT_SMP_C6PINTRP
- VOLUME_RAMPING
- INC_POS_BIDI
- RENDER_8BIT_SMP_C6PINTRP
- VOLUME_RAMPING
- INC_POS_BIDI
- RENDER_8BIT_SMP_C6PINTRP
- VOLUME_RAMPING
- INC_POS_BIDI
- }
+ RENDER_8BIT_SMP_QINTRP
+ VOLUME_RAMPING
+ INC_POS_BIDI
+ RENDER_8BIT_SMP_QINTRP
+ VOLUME_RAMPING
+ INC_POS_BIDI
+ RENDER_8BIT_SMP_QINTRP
+ VOLUME_RAMPING
+ INC_POS_BIDI
+ RENDER_8BIT_SMP_QINTRP
+ VOLUME_RAMPING
+ INC_POS_BIDI
}
END_BIDI
@@ -2766,7 +2656,7 @@
SET_BACK_MIXER_POS
}
-static void mix16bNoLoopC4PIntrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
+static void mix16bNoLoopCIntrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
{
const int16_t *base, *smpPtr;
float fSample, *fMixBufferL, *fMixBufferR;
@@ -2786,19 +2676,19 @@
for (i = 0; i < (samplesToMix & 3); i++)
{
- RENDER_16BIT_SMP_C4PINTRP
+ RENDER_16BIT_SMP_CINTRP
INC_POS
}
samplesToMix >>= 2;
for (i = 0; i < samplesToMix; i++)
{
- RENDER_16BIT_SMP_C4PINTRP
+ RENDER_16BIT_SMP_CINTRP
INC_POS
- RENDER_16BIT_SMP_C4PINTRP
+ RENDER_16BIT_SMP_CINTRP
INC_POS
- RENDER_16BIT_SMP_C4PINTRP
+ RENDER_16BIT_SMP_CINTRP
INC_POS
- RENDER_16BIT_SMP_C4PINTRP
+ RENDER_16BIT_SMP_CINTRP
INC_POS
}
@@ -2808,7 +2698,7 @@
SET_BACK_MIXER_POS
}
-static void mix16bLoopC4PIntrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
+static void mix16bLoopCIntrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
{
const int16_t *base, *smpPtr;
int16_t *smpTapPtr;
@@ -2832,19 +2722,19 @@
{
for (i = 0; i < (samplesToMix & 3); i++)
{
- RENDER_16BIT_SMP_C4PINTRP_TAP_FIX
+ RENDER_16BIT_SMP_CINTRP_TAP_FIX
INC_POS
}
samplesToMix >>= 2;
for (i = 0; i < samplesToMix; i++)
{
- RENDER_16BIT_SMP_C4PINTRP_TAP_FIX
+ RENDER_16BIT_SMP_CINTRP_TAP_FIX
INC_POS
- RENDER_16BIT_SMP_C4PINTRP_TAP_FIX
+ RENDER_16BIT_SMP_CINTRP_TAP_FIX
INC_POS
- RENDER_16BIT_SMP_C4PINTRP_TAP_FIX
+ RENDER_16BIT_SMP_CINTRP_TAP_FIX
INC_POS
- RENDER_16BIT_SMP_C4PINTRP_TAP_FIX
+ RENDER_16BIT_SMP_CINTRP_TAP_FIX
INC_POS
}
}
@@ -2852,19 +2742,19 @@
{
for (i = 0; i < (samplesToMix & 3); i++)
{
- RENDER_16BIT_SMP_C4PINTRP
+ RENDER_16BIT_SMP_CINTRP
INC_POS
}
samplesToMix >>= 2;
for (i = 0; i < samplesToMix; i++)
{
- RENDER_16BIT_SMP_C4PINTRP
+ RENDER_16BIT_SMP_CINTRP
INC_POS
- RENDER_16BIT_SMP_C4PINTRP
+ RENDER_16BIT_SMP_CINTRP
INC_POS
- RENDER_16BIT_SMP_C4PINTRP
+ RENDER_16BIT_SMP_CINTRP
INC_POS
- RENDER_16BIT_SMP_C4PINTRP
+ RENDER_16BIT_SMP_CINTRP
INC_POS
}
}
@@ -2875,7 +2765,7 @@
SET_BACK_MIXER_POS
}
-static void mix16bBidiLoopC4PIntrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
+static void mix16bBidiLoopCIntrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
{
const int16_t *base, *revBase, *smpPtr;
int16_t *smpTapPtr;
@@ -2900,19 +2790,19 @@
{
for (i = 0; i < (samplesToMix & 3); i++)
{
- RENDER_16BIT_SMP_C4PINTRP_TAP_FIX
+ RENDER_16BIT_SMP_CINTRP_TAP_FIX
INC_POS_BIDI
}
samplesToMix >>= 2;
for (i = 0; i < samplesToMix; i++)
{
- RENDER_16BIT_SMP_C4PINTRP_TAP_FIX
+ RENDER_16BIT_SMP_CINTRP_TAP_FIX
INC_POS_BIDI
- RENDER_16BIT_SMP_C4PINTRP_TAP_FIX
+ RENDER_16BIT_SMP_CINTRP_TAP_FIX
INC_POS_BIDI
- RENDER_16BIT_SMP_C4PINTRP_TAP_FIX
+ RENDER_16BIT_SMP_CINTRP_TAP_FIX
INC_POS_BIDI
- RENDER_16BIT_SMP_C4PINTRP_TAP_FIX
+ RENDER_16BIT_SMP_CINTRP_TAP_FIX
INC_POS_BIDI
}
}
@@ -2920,19 +2810,19 @@
{
for (i = 0; i < (samplesToMix & 3); i++)
{
- RENDER_16BIT_SMP_C4PINTRP
+ RENDER_16BIT_SMP_CINTRP
INC_POS_BIDI
}
samplesToMix >>= 2;
for (i = 0; i < samplesToMix; i++)
{
- RENDER_16BIT_SMP_C4PINTRP
+ RENDER_16BIT_SMP_CINTRP
INC_POS_BIDI
- RENDER_16BIT_SMP_C4PINTRP
+ RENDER_16BIT_SMP_CINTRP
INC_POS_BIDI
- RENDER_16BIT_SMP_C4PINTRP
+ RENDER_16BIT_SMP_CINTRP
INC_POS_BIDI
- RENDER_16BIT_SMP_C4PINTRP
+ RENDER_16BIT_SMP_CINTRP
INC_POS_BIDI
}
}
@@ -2944,7 +2834,7 @@
SET_BACK_MIXER_POS
}
-static void mix16bNoLoopC6PIntrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
+static void mix16bNoLoopQIntrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
{
const int16_t *base, *smpPtr;
float fSample, *fMixBufferL, *fMixBufferR;
@@ -2964,19 +2854,19 @@
for (i = 0; i < (samplesToMix & 3); i++)
{
- RENDER_16BIT_SMP_C6PINTRP
+ RENDER_16BIT_SMP_QINTRP
INC_POS
}
samplesToMix >>= 2;
for (i = 0; i < samplesToMix; i++)
{
- RENDER_16BIT_SMP_C6PINTRP
+ RENDER_16BIT_SMP_QINTRP
INC_POS
- RENDER_16BIT_SMP_C6PINTRP
+ RENDER_16BIT_SMP_QINTRP
INC_POS
- RENDER_16BIT_SMP_C6PINTRP
+ RENDER_16BIT_SMP_QINTRP
INC_POS
- RENDER_16BIT_SMP_C6PINTRP
+ RENDER_16BIT_SMP_QINTRP
INC_POS
}
@@ -2986,10 +2876,9 @@
SET_BACK_MIXER_POS
}
-static void mix16bLoopC6PIntrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
+static void mix16bLoopQIntrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
{
const int16_t *base, *smpPtr;
- int16_t *smpTapPtr;
float fSample, *fMixBufferL, *fMixBufferR;
int32_t position;
uint32_t i, samplesToMix, samplesLeft;
@@ -2998,7 +2887,6 @@
GET_VOL
GET_MIXER_VARS
SET_BASE16
- PREPARE_TAP_FIX16
samplesLeft = numSamples;
while (samplesLeft > 0)
@@ -3006,47 +2894,24 @@
LIMIT_MIX_NUM
samplesLeft -= samplesToMix;
- if (v->hasLooped) // the negative interpolation taps need a special case after the sample has looped once
+ for (i = 0; i < (samplesToMix & 3); i++)
{
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_16BIT_SMP_C6PINTRP_TAP_FIX
- INC_POS
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_16BIT_SMP_C6PINTRP_TAP_FIX
- INC_POS
- RENDER_16BIT_SMP_C6PINTRP_TAP_FIX
- INC_POS
- RENDER_16BIT_SMP_C6PINTRP_TAP_FIX
- INC_POS
- RENDER_16BIT_SMP_C6PINTRP_TAP_FIX
- INC_POS
- }
+ RENDER_16BIT_SMP_QINTRP
+ INC_POS
}
- else
+ samplesToMix >>= 2;
+ for (i = 0; i < samplesToMix; i++)
{
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_16BIT_SMP_C6PINTRP
- INC_POS
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_16BIT_SMP_C6PINTRP
- INC_POS
- RENDER_16BIT_SMP_C6PINTRP
- INC_POS
- RENDER_16BIT_SMP_C6PINTRP
- INC_POS
- RENDER_16BIT_SMP_C6PINTRP
- INC_POS
- }
+ RENDER_16BIT_SMP_QINTRP
+ INC_POS
+ RENDER_16BIT_SMP_QINTRP
+ INC_POS
+ RENDER_16BIT_SMP_QINTRP
+ INC_POS
+ RENDER_16BIT_SMP_QINTRP
+ INC_POS
}
-
+
WRAP_LOOP
}
@@ -3053,10 +2918,9 @@
SET_BACK_MIXER_POS
}
-static void mix16bBidiLoopC6PIntrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
+static void mix16bBidiLoopQIntrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
{
const int16_t *base, *revBase, *smpPtr;
- int16_t *smpTapPtr;
float fSample, *fMixBufferL, *fMixBufferR;
int32_t position;
uint32_t i, samplesToMix, samplesLeft;
@@ -3065,7 +2929,6 @@
GET_VOL
GET_MIXER_VARS
SET_BASE16_BIDI
- PREPARE_TAP_FIX16
samplesLeft = numSamples;
while (samplesLeft > 0)
@@ -3074,45 +2937,22 @@
samplesLeft -= samplesToMix;
START_BIDI
- if (v->hasLooped) // the negative interpolation taps need a special case after the sample has looped once
+ for (i = 0; i < (samplesToMix & 3); i++)
{
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_16BIT_SMP_C6PINTRP_TAP_FIX
- INC_POS_BIDI
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_16BIT_SMP_C6PINTRP_TAP_FIX
- INC_POS_BIDI
- RENDER_16BIT_SMP_C6PINTRP_TAP_FIX
- INC_POS_BIDI
- RENDER_16BIT_SMP_C6PINTRP_TAP_FIX
- INC_POS_BIDI
- RENDER_16BIT_SMP_C6PINTRP_TAP_FIX
- INC_POS_BIDI
- }
+ RENDER_16BIT_SMP_QINTRP
+ INC_POS_BIDI
}
- else
+ samplesToMix >>= 2;
+ for (i = 0; i < samplesToMix; i++)
{
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_16BIT_SMP_C6PINTRP
- INC_POS_BIDI
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_16BIT_SMP_C6PINTRP
- INC_POS_BIDI
- RENDER_16BIT_SMP_C6PINTRP
- INC_POS_BIDI
- RENDER_16BIT_SMP_C6PINTRP
- INC_POS_BIDI
- RENDER_16BIT_SMP_C6PINTRP
- INC_POS_BIDI
- }
+ RENDER_16BIT_SMP_QINTRP
+ INC_POS_BIDI
+ RENDER_16BIT_SMP_QINTRP
+ INC_POS_BIDI
+ RENDER_16BIT_SMP_QINTRP
+ INC_POS_BIDI
+ RENDER_16BIT_SMP_QINTRP
+ INC_POS_BIDI
}
END_BIDI
@@ -3850,7 +3690,7 @@
SET_BACK_MIXER_POS
}
-static void mix16bRampNoLoopC4PIntrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
+static void mix16bRampNoLoopCIntrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
{
const int16_t *base, *smpPtr;
float fSample, *fMixBufferL, *fMixBufferR;
@@ -3872,7 +3712,7 @@
for (i = 0; i < (samplesToMix & 3); i++)
{
- RENDER_16BIT_SMP_C4PINTRP
+ RENDER_16BIT_SMP_CINTRP
VOLUME_RAMPING
INC_POS
}
@@ -3879,16 +3719,16 @@
samplesToMix >>= 2;
for (i = 0; i < samplesToMix; i++)
{
- RENDER_16BIT_SMP_C4PINTRP
+ RENDER_16BIT_SMP_CINTRP
VOLUME_RAMPING
INC_POS
- RENDER_16BIT_SMP_C4PINTRP
+ RENDER_16BIT_SMP_CINTRP
VOLUME_RAMPING
INC_POS
- RENDER_16BIT_SMP_C4PINTRP
+ RENDER_16BIT_SMP_CINTRP
VOLUME_RAMPING
INC_POS
- RENDER_16BIT_SMP_C4PINTRP
+ RENDER_16BIT_SMP_CINTRP
VOLUME_RAMPING
INC_POS
}
@@ -3900,7 +3740,7 @@
SET_BACK_MIXER_POS
}
-static void mix16bRampLoopC4PIntrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
+static void mix16bRampLoopCIntrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
{
const int16_t *base, *smpPtr;
int16_t *smpTapPtr;
@@ -3926,7 +3766,7 @@
{
for (i = 0; i < (samplesToMix & 3); i++)
{
- RENDER_16BIT_SMP_C4PINTRP_TAP_FIX
+ RENDER_16BIT_SMP_CINTRP_TAP_FIX
VOLUME_RAMPING
INC_POS
}
@@ -3933,16 +3773,16 @@
samplesToMix >>= 2;
for (i = 0; i < samplesToMix; i++)
{
- RENDER_16BIT_SMP_C4PINTRP_TAP_FIX
+ RENDER_16BIT_SMP_CINTRP_TAP_FIX
VOLUME_RAMPING
INC_POS
- RENDER_16BIT_SMP_C4PINTRP_TAP_FIX
+ RENDER_16BIT_SMP_CINTRP_TAP_FIX
VOLUME_RAMPING
INC_POS
- RENDER_16BIT_SMP_C4PINTRP_TAP_FIX
+ RENDER_16BIT_SMP_CINTRP_TAP_FIX
VOLUME_RAMPING
INC_POS
- RENDER_16BIT_SMP_C4PINTRP_TAP_FIX
+ RENDER_16BIT_SMP_CINTRP_TAP_FIX
VOLUME_RAMPING
INC_POS
}
@@ -3951,7 +3791,7 @@
{
for (i = 0; i < (samplesToMix & 3); i++)
{
- RENDER_16BIT_SMP_C4PINTRP
+ RENDER_16BIT_SMP_CINTRP
VOLUME_RAMPING
INC_POS
}
@@ -3958,16 +3798,16 @@
samplesToMix >>= 2;
for (i = 0; i < samplesToMix; i++)
{
- RENDER_16BIT_SMP_C4PINTRP
+ RENDER_16BIT_SMP_CINTRP
VOLUME_RAMPING
INC_POS
- RENDER_16BIT_SMP_C4PINTRP
+ RENDER_16BIT_SMP_CINTRP
VOLUME_RAMPING
INC_POS
- RENDER_16BIT_SMP_C4PINTRP
+ RENDER_16BIT_SMP_CINTRP
VOLUME_RAMPING
INC_POS
- RENDER_16BIT_SMP_C4PINTRP
+ RENDER_16BIT_SMP_CINTRP
VOLUME_RAMPING
INC_POS
}
@@ -3980,7 +3820,7 @@
SET_BACK_MIXER_POS
}
-static void mix16bRampBidiLoopC4PIntrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
+static void mix16bRampBidiLoopCIntrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
{
const int16_t *base, *revBase, *smpPtr;
int16_t *smpTapPtr;
@@ -4007,7 +3847,7 @@
{
for (i = 0; i < (samplesToMix & 3); i++)
{
- RENDER_16BIT_SMP_C4PINTRP_TAP_FIX
+ RENDER_16BIT_SMP_CINTRP_TAP_FIX
VOLUME_RAMPING
INC_POS_BIDI
}
@@ -4014,16 +3854,16 @@
samplesToMix >>= 2;
for (i = 0; i < samplesToMix; i++)
{
- RENDER_16BIT_SMP_C4PINTRP_TAP_FIX
+ RENDER_16BIT_SMP_CINTRP_TAP_FIX
VOLUME_RAMPING
INC_POS_BIDI
- RENDER_16BIT_SMP_C4PINTRP_TAP_FIX
+ RENDER_16BIT_SMP_CINTRP_TAP_FIX
VOLUME_RAMPING
INC_POS_BIDI
- RENDER_16BIT_SMP_C4PINTRP_TAP_FIX
+ RENDER_16BIT_SMP_CINTRP_TAP_FIX
VOLUME_RAMPING
INC_POS_BIDI
- RENDER_16BIT_SMP_C4PINTRP_TAP_FIX
+ RENDER_16BIT_SMP_CINTRP_TAP_FIX
VOLUME_RAMPING
INC_POS_BIDI
}
@@ -4032,7 +3872,7 @@
{
for (i = 0; i < (samplesToMix & 3); i++)
{
- RENDER_16BIT_SMP_C4PINTRP
+ RENDER_16BIT_SMP_CINTRP
VOLUME_RAMPING
INC_POS_BIDI
}
@@ -4039,16 +3879,16 @@
samplesToMix >>= 2;
for (i = 0; i < samplesToMix; i++)
{
- RENDER_16BIT_SMP_C4PINTRP
+ RENDER_16BIT_SMP_CINTRP
VOLUME_RAMPING
INC_POS_BIDI
- RENDER_16BIT_SMP_C4PINTRP
+ RENDER_16BIT_SMP_CINTRP
VOLUME_RAMPING
INC_POS_BIDI
- RENDER_16BIT_SMP_C4PINTRP
+ RENDER_16BIT_SMP_CINTRP
VOLUME_RAMPING
INC_POS_BIDI
- RENDER_16BIT_SMP_C4PINTRP
+ RENDER_16BIT_SMP_CINTRP
VOLUME_RAMPING
INC_POS_BIDI
}
@@ -4062,7 +3902,7 @@
SET_BACK_MIXER_POS
}
-static void mix16bRampNoLoopC6PIntrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
+static void mix16bRampNoLoopQIntrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
{
const int16_t *base, *smpPtr;
float fSample, *fMixBufferL, *fMixBufferR;
@@ -4084,7 +3924,7 @@
for (i = 0; i < (samplesToMix & 3); i++)
{
- RENDER_16BIT_SMP_C6PINTRP
+ RENDER_16BIT_SMP_QINTRP
VOLUME_RAMPING
INC_POS
}
@@ -4091,16 +3931,16 @@
samplesToMix >>= 2;
for (i = 0; i < samplesToMix; i++)
{
- RENDER_16BIT_SMP_C6PINTRP
+ RENDER_16BIT_SMP_QINTRP
VOLUME_RAMPING
INC_POS
- RENDER_16BIT_SMP_C6PINTRP
+ RENDER_16BIT_SMP_QINTRP
VOLUME_RAMPING
INC_POS
- RENDER_16BIT_SMP_C6PINTRP
+ RENDER_16BIT_SMP_QINTRP
VOLUME_RAMPING
INC_POS
- RENDER_16BIT_SMP_C6PINTRP
+ RENDER_16BIT_SMP_QINTRP
VOLUME_RAMPING
INC_POS
}
@@ -4112,10 +3952,9 @@
SET_BACK_MIXER_POS
}
-static void mix16bRampLoopC6PIntrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
+static void mix16bRampLoopQIntrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
{
const int16_t *base, *smpPtr;
- int16_t *smpTapPtr;
float fSample, *fMixBufferL, *fMixBufferR;
int32_t position;
float fVolumeLDelta, fVolumeRDelta, fVolumeL, fVolumeR;
@@ -4125,7 +3964,6 @@
GET_VOL_RAMP
GET_MIXER_VARS_RAMP
SET_BASE16
- PREPARE_TAP_FIX16
samplesLeft = numSamples;
while (samplesLeft > 0)
@@ -4134,55 +3972,27 @@
LIMIT_MIX_NUM_RAMP
samplesLeft -= samplesToMix;
- if (v->hasLooped) // the negative interpolation taps need a special case after the sample has looped once
+ for (i = 0; i < (samplesToMix & 3); i++)
{
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_16BIT_SMP_C6PINTRP_TAP_FIX
- VOLUME_RAMPING
- INC_POS
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_16BIT_SMP_C6PINTRP_TAP_FIX
- VOLUME_RAMPING
- INC_POS
- RENDER_16BIT_SMP_C6PINTRP_TAP_FIX
- VOLUME_RAMPING
- INC_POS
- RENDER_16BIT_SMP_C6PINTRP_TAP_FIX
- VOLUME_RAMPING
- INC_POS
- RENDER_16BIT_SMP_C6PINTRP_TAP_FIX
- VOLUME_RAMPING
- INC_POS
- }
+ RENDER_16BIT_SMP_QINTRP
+ VOLUME_RAMPING
+ INC_POS
}
- else
+ samplesToMix >>= 2;
+ for (i = 0; i < samplesToMix; i++)
{
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_16BIT_SMP_C6PINTRP
- VOLUME_RAMPING
- INC_POS
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_16BIT_SMP_C6PINTRP
- VOLUME_RAMPING
- INC_POS
- RENDER_16BIT_SMP_C6PINTRP
- VOLUME_RAMPING
- INC_POS
- RENDER_16BIT_SMP_C6PINTRP
- VOLUME_RAMPING
- INC_POS
- RENDER_16BIT_SMP_C6PINTRP
- VOLUME_RAMPING
- INC_POS
- }
+ RENDER_16BIT_SMP_QINTRP
+ VOLUME_RAMPING
+ INC_POS
+ RENDER_16BIT_SMP_QINTRP
+ VOLUME_RAMPING
+ INC_POS
+ RENDER_16BIT_SMP_QINTRP
+ VOLUME_RAMPING
+ INC_POS
+ RENDER_16BIT_SMP_QINTRP
+ VOLUME_RAMPING
+ INC_POS
}
WRAP_LOOP
@@ -4192,10 +4002,9 @@
SET_BACK_MIXER_POS
}
-static void mix16bRampBidiLoopC6PIntrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
+static void mix16bRampBidiLoopQIntrp(voice_t *v, uint32_t bufferPos, uint32_t numSamples)
{
const int16_t *base, *revBase, *smpPtr;
- int16_t *smpTapPtr;
float fSample, *fMixBufferL, *fMixBufferR;
int32_t position;
float fVolumeLDelta, fVolumeRDelta, fVolumeL, fVolumeR;
@@ -4205,7 +4014,6 @@
GET_VOL_RAMP
GET_MIXER_VARS_RAMP
SET_BASE16_BIDI
- PREPARE_TAP_FIX16
samplesLeft = numSamples;
while (samplesLeft > 0)
@@ -4215,57 +4023,28 @@
samplesLeft -= samplesToMix;
START_BIDI
- if (v->hasLooped) // the negative interpolation taps need a special case after the sample has looped once
+ for (i = 0; i < (samplesToMix & 3); i++)
{
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_16BIT_SMP_C6PINTRP_TAP_FIX
- VOLUME_RAMPING
- INC_POS_BIDI
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_16BIT_SMP_C6PINTRP_TAP_FIX
- VOLUME_RAMPING
- INC_POS_BIDI
- RENDER_16BIT_SMP_C6PINTRP_TAP_FIX
- VOLUME_RAMPING
- INC_POS_BIDI
- RENDER_16BIT_SMP_C6PINTRP_TAP_FIX
- VOLUME_RAMPING
- INC_POS_BIDI
- RENDER_16BIT_SMP_C6PINTRP_TAP_FIX
- VOLUME_RAMPING
- INC_POS_BIDI
- }
+ RENDER_16BIT_SMP_QINTRP
+ VOLUME_RAMPING
+ INC_POS_BIDI
}
- else
+ samplesToMix >>= 2;
+ for (i = 0; i < samplesToMix; i++)
{
- for (i = 0; i < (samplesToMix & 3); i++)
- {
- RENDER_16BIT_SMP_C6PINTRP
- VOLUME_RAMPING
- INC_POS_BIDI
- }
- samplesToMix >>= 2;
- for (i = 0; i < samplesToMix; i++)
- {
- RENDER_16BIT_SMP_C6PINTRP
- VOLUME_RAMPING
- INC_POS_BIDI
- RENDER_16BIT_SMP_C6PINTRP
- VOLUME_RAMPING
- INC_POS_BIDI
- RENDER_16BIT_SMP_C6PINTRP
- VOLUME_RAMPING
- INC_POS_BIDI
- RENDER_16BIT_SMP_C6PINTRP
- VOLUME_RAMPING
- INC_POS_BIDI
- }
+ RENDER_16BIT_SMP_QINTRP
+ VOLUME_RAMPING
+ INC_POS_BIDI
+ RENDER_16BIT_SMP_QINTRP
+ VOLUME_RAMPING
+ INC_POS_BIDI
+ RENDER_16BIT_SMP_QINTRP
+ VOLUME_RAMPING
+ INC_POS_BIDI
+ RENDER_16BIT_SMP_QINTRP
+ VOLUME_RAMPING
+ INC_POS_BIDI
}
-
END_BIDI
WRAP_BIDI_LOOP
@@ -4294,12 +4073,12 @@
(mixFunc)mix8bNoLoopS16Intrp,
(mixFunc)mix8bLoopS16Intrp,
(mixFunc)mix8bBidiLoopS16Intrp,
- (mixFunc)mix8bNoLoopC4PIntrp,
- (mixFunc)mix8bLoopC4PIntrp,
- (mixFunc)mix8bBidiLoopC4PIntrp,
- (mixFunc)mix8bNoLoopC6PIntrp,
- (mixFunc)mix8bLoopC6PIntrp,
- (mixFunc)mix8bBidiLoopC6PIntrp,
+ (mixFunc)mix8bNoLoopCIntrp,
+ (mixFunc)mix8bLoopCIntrp,
+ (mixFunc)mix8bBidiLoopCIntrp,
+ (mixFunc)mix8bNoLoopQIntrp,
+ (mixFunc)mix8bLoopQIntrp,
+ (mixFunc)mix8bBidiLoopQIntrp,
// 16-bit
(mixFunc)mix16bNoLoop,
@@ -4314,12 +4093,12 @@
(mixFunc)mix16bNoLoopS16Intrp,
(mixFunc)mix16bLoopS16Intrp,
(mixFunc)mix16bBidiLoopS16Intrp,
- (mixFunc)mix16bNoLoopC4PIntrp,
- (mixFunc)mix16bLoopC4PIntrp,
- (mixFunc)mix16bBidiLoopC4PIntrp,
- (mixFunc)mix16bNoLoopC6PIntrp,
- (mixFunc)mix16bLoopC6PIntrp,
- (mixFunc)mix16bBidiLoopC6PIntrp,
+ (mixFunc)mix16bNoLoopCIntrp,
+ (mixFunc)mix16bLoopCIntrp,
+ (mixFunc)mix16bBidiLoopCIntrp,
+ (mixFunc)mix16bNoLoopQIntrp,
+ (mixFunc)mix16bLoopQIntrp,
+ (mixFunc)mix16bBidiLoopQIntrp,
// volume ramping
@@ -4336,12 +4115,12 @@
(mixFunc)mix8bRampNoLoopS16Intrp,
(mixFunc)mix8bRampLoopS16Intrp,
(mixFunc)mix8bRampBidiLoopS16Intrp,
- (mixFunc)mix8bRampNoLoopC4PIntrp,
- (mixFunc)mix8bRampLoopC4PIntrp,
- (mixFunc)mix8bRampBidiLoopC4PIntrp,
- (mixFunc)mix8bRampNoLoopC6PIntrp,
- (mixFunc)mix8bRampLoopC6PIntrp,
- (mixFunc)mix8bRampBidiLoopC6PIntrp,
+ (mixFunc)mix8bRampNoLoopCIntrp,
+ (mixFunc)mix8bRampLoopCIntrp,
+ (mixFunc)mix8bRampBidiLoopCIntrp,
+ (mixFunc)mix8bRampNoLoopQIntrp,
+ (mixFunc)mix8bRampLoopQIntrp,
+ (mixFunc)mix8bRampBidiLoopQIntrp,
// 16-bit
(mixFunc)mix16bRampNoLoop,
@@ -4356,10 +4135,10 @@
(mixFunc)mix16bRampNoLoopS16Intrp,
(mixFunc)mix16bRampLoopS16Intrp,
(mixFunc)mix16bRampBidiLoopS16Intrp,
- (mixFunc)mix16bRampNoLoopC4PIntrp,
- (mixFunc)mix16bRampLoopC4PIntrp,
- (mixFunc)mix16bRampBidiLoopC4PIntrp,
- (mixFunc)mix16bRampNoLoopC6PIntrp,
- (mixFunc)mix16bRampLoopC6PIntrp,
- (mixFunc)mix16bRampBidiLoopC6PIntrp
+ (mixFunc)mix16bRampNoLoopCIntrp,
+ (mixFunc)mix16bRampLoopCIntrp,
+ (mixFunc)mix16bRampBidiLoopCIntrp,
+ (mixFunc)mix16bRampNoLoopQIntrp,
+ (mixFunc)mix16bRampLoopQIntrp,
+ (mixFunc)mix16bRampBidiLoopQIntrp
};
--- a/src/mixer/ft2_mix.h
+++ b/src/mixer/ft2_mix.h
@@ -6,12 +6,12 @@
enum
{
// don't change the order of these! (yes, it looks weird)
- INTERPOLATION_DISABLED = 0,
- INTERPOLATION_SINC8 = 1,
- INTERPOLATION_LINEAR = 2,
- INTERPOLATION_SINC16 = 3,
- INTERPOLATION_CUBIC4 = 4,
- INTERPOLATION_CUBIC6 = 5,
+ INTERPOLATION_DISABLED = 0,
+ INTERPOLATION_SINC8 = 1,
+ INTERPOLATION_LINEAR = 2,
+ INTERPOLATION_SINC16 = 3,
+ INTERPOLATION_CUBIC = 4,
+ INTERPOLATION_QUADRATIC = 5,
// ------
NUM_INTERPOLATORS,
--- a/src/mixer/ft2_mix_macros.h
+++ b/src/mixer/ft2_mix_macros.h
@@ -2,6 +2,7 @@
#define _ft2_mix_macros_h_
#include "../ft2_audio.h"
+#include "ft2_quadratic_spline.h"
#include "ft2_cubic_spline.h"
#include "ft2_windowed_sinc.h"
@@ -80,6 +81,13 @@
fVolumeL += fVolumeLDelta; \
fVolumeR += fVolumeRDelta;
+/* It may look like we are potentially going out of bounds while looking up the sample points,
+** but the sample data is actually padded on both the left (negative) and right side, where correct tap
+** samples are stored according to loop mode (or no loop).
+**
+** There is also a second special case for the left edge (negative taps) after the sample has looped once.
+*/
+
/* ----------------------------------------------------------------------- */
/* NO INTERPOLATION (NEAREST NEIGHBOR) */
/* ----------------------------------------------------------------------- */
@@ -94,14 +102,11 @@
*fMixBufferL++ += fSample * fVolumeL; \
*fMixBufferR++ += fSample * fVolumeR;
+
/* ----------------------------------------------------------------------- */
/* LINEAR INTERPOLATION */
/* ----------------------------------------------------------------------- */
-/* It may look like we are potentially going out of bounds while looking up the sample points,
-** but the sample data has a fixed sample after the end (sampleEnd/loopEnd).
-*/
-
#define LINEAR_INTERPOLATION(s, f, scale) \
{ \
const int32_t frac = (uint32_t)(f) >> 1; /* uint32 -> int32 range, faster int->float conv. (x86/x86_64) */ \
@@ -119,22 +124,41 @@
*fMixBufferL++ += fSample * fVolumeL; \
*fMixBufferR++ += fSample * fVolumeR;
+
/* ----------------------------------------------------------------------- */
+/* QUADRATIC SPLINE INTERPOLATION */
+/* ----------------------------------------------------------------------- */
+
+// through LUT: mixer/ft2_quadratic_spline.c
+
+#define QUADRATIC_SPLINE_INTERPOLATION(s, f, scale) \
+{ \
+ const float *t = fQuadraticSplineLUT + (((uint32_t)(f) >> QUADRATIC_SPLINE_FRACSHIFT) * QUADRATIC_SPLINE_WIDTH); \
+ fSample = ((s[0] * t[0]) + \
+ (s[1] * t[1]) + \
+ (s[2] * t[2])) * (1.0f / scale); \
+}
+
+#define RENDER_8BIT_SMP_QINTRP \
+ QUADRATIC_SPLINE_INTERPOLATION(smpPtr, positionFrac, 128) \
+ *fMixBufferL++ += fSample * fVolumeL; \
+ *fMixBufferR++ += fSample * fVolumeR;
+
+#define RENDER_16BIT_SMP_QINTRP \
+ QUADRATIC_SPLINE_INTERPOLATION(smpPtr, positionFrac, 32768) \
+ *fMixBufferL++ += fSample * fVolumeL; \
+ *fMixBufferR++ += fSample * fVolumeR;
+
+
+/* ----------------------------------------------------------------------- */
/* CUBIC SPLINE INTERPOLATION */
/* ----------------------------------------------------------------------- */
// through LUT: mixer/ft2_cubic_spline.c
-/* It may look like we are potentially going out of bounds while looking up the sample points,
-** but the sample data is actually padded on both the left (negative) and right side, where correct tap
-** samples are stored according to loop mode (or no loop).
-**
-** There is also a second special case for the left edge (negative taps) after the sample has looped once.
-*/
-
-#define CUBIC4P_SPLINE_INTERPOLATION(s, f, scale) \
+#define CUBIC_SPLINE_INTERPOLATION(s, f, scale) \
{ \
- const float *t = f4PointCubicSplineLUT + (((uint32_t)(f) >> CUBIC4P_SPLINE_FSHIFT) & CUBIC4P_SPLINE_FMASK); \
+ const float *t = fCubicSplineLUT + (((uint32_t)(f) >> CUBIC_SPLINE_FRACSHIFT) & CUBIC_SPLINE_FRACMASK); \
fSample = ((s[-1] * t[0]) + \
( s[0] * t[1]) + \
( s[1] * t[2]) + \
@@ -141,66 +165,34 @@
( s[2] * t[3])) * (1.0f / scale); \
}
-#define CUBIC6P_SPLINE_INTERPOLATION(s, f, scale) \
-{ \
- const float *t = f6PointCubicSplineLUT + (((uint32_t)(f) >> CUBIC6P_SPLINE_FSHIFT) * 6); \
- fSample = ((s[-2] * t[0]) + \
- (s[-1] * t[1]) + \
- ( s[0] * t[2]) + \
- ( s[1] * t[3]) + \
- ( s[2] * t[4]) + \
- ( s[3] * t[5])) * (1.0f / scale); \
-}
-
-#define RENDER_8BIT_SMP_C4PINTRP \
- CUBIC4P_SPLINE_INTERPOLATION(smpPtr, positionFrac, 128) \
+#define RENDER_8BIT_SMP_CINTRP \
+ CUBIC_SPLINE_INTERPOLATION(smpPtr, positionFrac, 128) \
*fMixBufferL++ += fSample * fVolumeL; \
*fMixBufferR++ += fSample * fVolumeR;
-#define RENDER_16BIT_SMP_C4PINTRP \
- CUBIC4P_SPLINE_INTERPOLATION(smpPtr, positionFrac, 32768) \
+#define RENDER_16BIT_SMP_CINTRP \
+ CUBIC_SPLINE_INTERPOLATION(smpPtr, positionFrac, 32768) \
*fMixBufferL++ += fSample * fVolumeL; \
*fMixBufferR++ += fSample * fVolumeR;
-#define RENDER_8BIT_SMP_C6PINTRP \
- CUBIC6P_SPLINE_INTERPOLATION(smpPtr, positionFrac, 128) \
- *fMixBufferL++ += fSample * fVolumeL; \
- *fMixBufferR++ += fSample * fVolumeR;
-#define RENDER_16BIT_SMP_C6PINTRP \
- CUBIC6P_SPLINE_INTERPOLATION(smpPtr, positionFrac, 32768) \
- *fMixBufferL++ += fSample * fVolumeL; \
- *fMixBufferR++ += fSample * fVolumeR;
-
/* Special left-edge case mixers to get proper tap data after one loop cycle.
** These are only used on looped samples.
*/
-#define RENDER_8BIT_SMP_C4PINTRP_TAP_FIX \
+#define RENDER_8BIT_SMP_CINTRP_TAP_FIX \
smpTapPtr = (smpPtr <= leftEdgePtr) ? (int8_t *)&v->leftEdgeTaps8[(int32_t)(smpPtr-loopStartPtr)] : (int8_t *)smpPtr; \
- CUBIC4P_SPLINE_INTERPOLATION(smpTapPtr, positionFrac, 128) \
+ CUBIC_SPLINE_INTERPOLATION(smpTapPtr, positionFrac, 128) \
*fMixBufferL++ += fSample * fVolumeL; \
*fMixBufferR++ += fSample * fVolumeR;
-#define RENDER_16BIT_SMP_C4PINTRP_TAP_FIX \
+#define RENDER_16BIT_SMP_CINTRP_TAP_FIX \
smpTapPtr = (smpPtr <= leftEdgePtr) ? (int16_t *)&v->leftEdgeTaps16[(int32_t)(smpPtr-loopStartPtr)] : (int16_t *)smpPtr; \
- CUBIC4P_SPLINE_INTERPOLATION(smpTapPtr, positionFrac, 32768) \
+ CUBIC_SPLINE_INTERPOLATION(smpTapPtr, positionFrac, 32768) \
*fMixBufferL++ += fSample * fVolumeL; \
*fMixBufferR++ += fSample * fVolumeR;
-#define RENDER_8BIT_SMP_C6PINTRP_TAP_FIX \
- smpTapPtr = (smpPtr <= leftEdgePtr) ? (int8_t *)&v->leftEdgeTaps8[(int32_t)(smpPtr-loopStartPtr)] : (int8_t *)smpPtr; \
- CUBIC6P_SPLINE_INTERPOLATION(smpTapPtr, positionFrac, 128) \
- *fMixBufferL++ += fSample * fVolumeL; \
- *fMixBufferR++ += fSample * fVolumeR;
-#define RENDER_16BIT_SMP_C6PINTRP_TAP_FIX \
- smpTapPtr = (smpPtr <= leftEdgePtr) ? (int16_t *)&v->leftEdgeTaps16[(int32_t)(smpPtr-loopStartPtr)] : (int16_t *)smpPtr; \
- CUBIC6P_SPLINE_INTERPOLATION(smpTapPtr, positionFrac, 32768) \
- *fMixBufferL++ += fSample * fVolumeL; \
- *fMixBufferR++ += fSample * fVolumeR;
-
-
/* ----------------------------------------------------------------------- */
/* WINDOWED-SINC INTERPOLATION */
/* ----------------------------------------------------------------------- */
@@ -207,16 +199,9 @@
// through LUTs: mixer/ft2_windowed_sinc.c
-/* It may look like we are potentially going out of bounds while looking up the sample points,
-** but the sample data is actually padded on both the left (negative) and right side, where correct tap
-** samples are stored according to loop mode (or no loop).
-**
-** There is also a second special case for the left edge (negative taps) after the sample has looped once.
-*/
-
#define WINDOWED_SINC8_INTERPOLATION(s, f, scale) \
{ \
- const float *t = v->fSincLUT + (((uint32_t)(f) >> SINC8_FSHIFT) & SINC8_FMASK); \
+ const float *t = v->fSincLUT + (((uint32_t)(f) >> SINC1_FRACSHIFT) & SINC1_FRACMASK); \
fSample = ((s[-3] * t[0]) + \
(s[-2] * t[1]) + \
(s[-1] * t[2]) + \
@@ -229,7 +214,7 @@
#define WINDOWED_SINC16_INTERPOLATION(s, f, scale) \
{ \
- const float *t = v->fSincLUT + (((uint32_t)(f) >> SINC16_FSHIFT) & SINC16_FMASK); \
+ const float *t = v->fSincLUT + (((uint32_t)(f) >> SINC2_FRACSHIFT) & SINC2_FRACMASK); \
fSample = ((s[-7] * t[0]) + \
(s[-6] * t[1]) + \
(s[-5] * t[2]) + \
@@ -317,6 +302,7 @@
WINDOWED_SINC16_INTERPOLATION(smpTapPtr, positionFrac, 32768) \
*fMixBufferL++ += fSample * fVolumeL; \
*fMixBufferR++ += fSample * fVolumeR;
+
/* ----------------------------------------------------------------------- */
/* SAMPLES-TO-MIX LIMITING MACROS */
--- /dev/null
+++ b/src/mixer/ft2_quadratic_spline.c
@@ -1,0 +1,45 @@
+// 3-point quadratic spline interpolation LUT generator
+
+#include <stdint.h>
+#include <stdbool.h>
+#include <stdlib.h>
+#include "ft2_quadratic_spline.h"
+#include "../ft2_video.h" // showErrorMsgBox()
+
+float *fQuadraticSplineLUT = NULL; // globalized
+
+bool setupQuadraticSplineTable(void)
+{
+ fQuadraticSplineLUT = (float *)malloc(QUADRATIC_SPLINE_WIDTH * QUADRATIC_SPLINE_PHASES * sizeof (float));
+ if (fQuadraticSplineLUT == NULL)
+ {
+ showErrorMsgBox("Not enough memory!");
+ return false;
+ }
+
+ float *fPtr = fQuadraticSplineLUT;
+ for (int32_t i = 0; i < QUADRATIC_SPLINE_PHASES; i++)
+ {
+ const double x1 = i * (1.0 / QUADRATIC_SPLINE_PHASES);
+ const double x2 = x1 * x1; // x^2
+
+ double t1 = ( 0.5 * x2) + (-1.5 * x1) + 1.0;
+ double t2 = (-1.0 * x2) + ( 2.0 * x1);
+ double t3 = ( 0.5 * x2) + (-0.5 * x1);
+
+ *fPtr++ = (float)t1;
+ *fPtr++ = (float)t2;
+ *fPtr++ = (float)t3;
+ }
+
+ return true;
+}
+
+void freeQuadraticSplineTable(void)
+{
+ if (fQuadraticSplineLUT != NULL)
+ {
+ free(fQuadraticSplineLUT);
+ fQuadraticSplineLUT = NULL;
+ }
+}
--- /dev/null
+++ b/src/mixer/ft2_quadratic_spline.h
@@ -1,0 +1,15 @@
+#pragma once
+
+#include <stdint.h>
+#include <stdbool.h>
+#include "ft2_mix.h" // MIXER_FRAC_BITS
+
+#define QUADRATIC_SPLINE_WIDTH 3
+#define QUADRATIC_SPLINE_PHASES 8192
+#define QUADRATIC_SPLINE_PHASES_BITS 13 // log2(QUADRATIC_SPLINE_PHASES)
+#define QUADRATIC_SPLINE_FRACSHIFT (MIXER_FRAC_BITS-QUADRATIC_SPLINE_PHASES_BITS)
+
+extern float *fQuadraticSplineLUT;
+
+bool setupQuadraticSplineTable(void);
+void freeQuadraticSplineTable(void);
--- a/src/mixer/ft2_windowed_sinc.c
+++ b/src/mixer/ft2_windowed_sinc.c
@@ -1,30 +1,23 @@
-/*
-** Windowed-sinc (Kaiser window) w/ low-pass interpolation LUT generator
-**
-** This was originally based on OpenMPT's source code,
-** but it has been heavily modified.
-*/
+// 8-point/16-point windowed-sinc interpolation LUT generator
#include <stdint.h>
#include <stdbool.h>
#include <stdlib.h>
#include <math.h>
-#include "ft2_windowed_sinc.h" // SINCx_TAPS, SINCx_PHASES
+#include "ft2_windowed_sinc.h" // SINCx_WIDTH, SINCx_PHASES
#include "../ft2_header.h" // PI
#include "../ft2_video.h" // showErrorMsgBox()
// globalized
-float *fKaiserSinc_8 = NULL, *fDownSample1_8 = NULL, *fDownSample2_8 = NULL;
-float *fKaiserSinc_16 = NULL, *fDownSample1_16 = NULL, *fDownSample2_16 = NULL;
-uint64_t sincDownsample1Ratio, sincDownsample2Ratio;
+float *fSinc8_1 = NULL, *fSinc8_2 = NULL, *fSinc8_3 = NULL;
+float *fSinc16_1 = NULL, *fSinc16_2 = NULL, *fSinc16_3 = NULL;
+float *fSinc_1 = NULL, *fSinc_2 = NULL, *fSinc_3 = NULL;
+uint64_t sincRatio1, sincRatio2;
-// 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)
-static double besselI0(double z)
+static inline double besselI0(double z)
{
-#define EPSILON (1E-15)
+#define EPSILON (1E-12) /* verified: lower than this makes no change when LUT output is single-precision float */
double s = 1.0, ds = 1.0, d = 2.0;
const double zz = z * z;
@@ -40,109 +33,121 @@
return s;
}
-static void generateSincLUT(float *fOutput, uint32_t filterWidth, uint32_t numPhases, const double beta, const double lpCutoff)
+static inline double sinc(double x)
{
- const double I0Beta = besselI0(beta);
- const double kPi = PI * lpCutoff;
- const double iMul = 1.0 / numPhases;
- const double xMul = 1.0 / ((filterWidth / 2) * (filterWidth / 2));
-
- const uint32_t length = filterWidth * numPhases;
- const uint32_t tapBits = (uint32_t)log2(filterWidth);
- const uint32_t phasesBits = (uint32_t)log2(numPhases);
- const uint32_t tapsMinus1 = filterWidth - 1;
- const int32_t midPoint = (filterWidth / 2) * numPhases;
-
- for (uint32_t i = 0; i < length; i++)
+ if (x == 0.0)
{
- const int32_t ix = ((tapsMinus1 - (i & tapsMinus1)) << phasesBits) + (i >> tapBits);
-
- double dSinc = 1.0;
- if (ix != midPoint)
- {
- const double x = (ix - midPoint) * iMul;
- const double xPi = x * kPi;
-
- // Kaiser window
- dSinc = (sin(xPi) * besselI0(beta * sqrt(1.0 - (x * x * xMul)))) / (I0Beta * xPi);
- }
-
- fOutput[i] = (float)(dSinc * lpCutoff);
+ return 1.0;
}
+ else
+ {
+ x *= PI;
+ return sin(x) / x;
+ }
}
-static double decibelsToKaiserBeta(double dB)
+static inline double sincWithCutoff(double x, const double cutoff)
{
- if (dB < 21.0)
- return 0.0;
- else if (dB <= 50.0)
- return 0.5842 * pow(dB - 21.0, 0.4) + 0.07886 * (dB - 21.0);
+ if (x == 0.0)
+ {
+ return cutoff;
+ }
else
- return 0.1102 * (dB - 8.7);
+ {
+ x *= PI;
+ return sin(cutoff * x) / x;
+ }
}
-static double rippleToDecibels(double ripple)
+static void generateWindowedSinc(float *fOutput, const int32_t filterWidth, const int32_t filterPhases, const double beta, const double cutoff)
{
- return 20.0 * log10(ripple);
+ const int32_t filterWidthBits = (int32_t)log2(filterWidth);
+ const int32_t filterWidthMask = filterWidth - 1;
+ const int32_t filterCenter = (filterWidth / 2) - 1;
+ const double besselI0Beta = 1.0 / besselI0(beta);
+ const double phaseMul = 1.0 / filterPhases;
+ const double xMul = 1.0 / (filterWidth / 2);
+
+ if (cutoff < 1.0)
+ {
+ // windowed-sinc with frequency cutoff
+ for (int32_t i = 0; i < filterPhases * filterWidth; i++)
+ {
+ const double x = ((i & filterWidthMask) - filterCenter) - ((i >> filterWidthBits) * phaseMul);
+
+ // Kaiser-Bessel window
+ const double n = x * xMul;
+ const double window = besselI0(beta * sqrt(1.0 - n * n)) * besselI0Beta;
+
+ fOutput[i] = (float)(sincWithCutoff(x, cutoff) * window);
+ }
+ }
+ else
+ {
+ // windowed-sinc with no frequency cutoff
+ for (int32_t i = 0; i < filterPhases * filterWidth; i++)
+ {
+ const double x = ((i & filterWidthMask) - filterCenter) - ((i >> filterWidthBits) * phaseMul);
+
+ // Kaiser-Bessel window
+ const double n = x * xMul;
+ const double window = besselI0(beta * sqrt(1.0 - n * n)) * besselI0Beta;
+
+ fOutput[i] = (float)(sinc(x) * window);
+ }
+ }
}
-bool calcWindowedSincTables(void)
+bool setupWindowedSincTables(void)
{
- fKaiserSinc_8 = (float *)malloc(SINC1_TAPS*SINC1_PHASES * sizeof (float));
- fDownSample1_8 = (float *)malloc(SINC1_TAPS*SINC1_PHASES * sizeof (float));
- fDownSample2_8 = (float *)malloc(SINC1_TAPS*SINC1_PHASES * sizeof (float));
- fKaiserSinc_16 = (float *)malloc(SINC2_TAPS*SINC2_PHASES * sizeof (float));
- fDownSample1_16 = (float *)malloc(SINC2_TAPS*SINC2_PHASES * sizeof (float));
- fDownSample2_16 = (float *)malloc(SINC2_TAPS*SINC2_PHASES * sizeof (float));
+ fSinc8_1 = (float *)malloc(SINC1_WIDTH*SINC1_PHASES * sizeof (float));
+ fSinc8_2 = (float *)malloc(SINC1_WIDTH*SINC1_PHASES * sizeof (float));
+ fSinc8_3 = (float *)malloc(SINC1_WIDTH*SINC1_PHASES * sizeof (float));
+ fSinc16_1 = (float *)malloc(SINC2_WIDTH*SINC2_PHASES * sizeof (float));
+ fSinc16_2 = (float *)malloc(SINC2_WIDTH*SINC2_PHASES * sizeof (float));
+ fSinc16_3 = (float *)malloc(SINC2_WIDTH*SINC2_PHASES * sizeof (float));
- if (fKaiserSinc_8 == NULL || fDownSample1_8 == NULL || fDownSample2_8 == NULL ||
- fKaiserSinc_16 == NULL || fDownSample1_16 == NULL || fDownSample2_16 == NULL)
+ if (fSinc8_1 == NULL || fSinc8_2 == NULL || fSinc8_3 == NULL ||
+ fSinc16_1 == NULL || fSinc16_2 == NULL || fSinc16_3 == NULL)
{
showErrorMsgBox("Not enough memory!");
return false;
}
- // resampling ratios for picking suitable downsample LUT
- const double ratio1 = 1.1875; // fKaiserSinc if <=
- const double ratio2 = 1.5; // fDownSample1 if <=, fDownSample2 if >
+ // LUT-select resampling ratios
+ const double ratio1 = 1.1875; // fSinc_1 if <=
+ const double ratio2 = 1.5; // fSinc_2 if <=, fSinc_3 if >
- sincDownsample1Ratio = (uint64_t)(ratio1 * MIXER_FRAC_SCALE);
- sincDownsample2Ratio = (uint64_t)(ratio2 * MIXER_FRAC_SCALE);
+ // calculate mixer delta limits for LUT-selector
+ sincRatio1 = (uint64_t)(ratio1 * MIXER_FRAC_SCALE);
+ sincRatio2 = (uint64_t)(ratio2 * MIXER_FRAC_SCALE);
- /* Max ripple (to be converted into Kaiser beta parameter)
+ /* Kaiser-Bessel beta parameter
**
- ** NOTE:
- ** These may not be the correct values. Proper calculation
- ** is needed, but is beyond my knowledge.
+ ** Basically;
+ ** Lower beta = less treble cut off, but more aliasing (shorter main lobe, more side lobe ripple)
+ ** Higher beta = more treble cut off, but less aliasing (wider main lobe, less side lobe ripple)
+ **
+ ** There simply isn't any optimal value here, it has to be tweaked to personal preference.
*/
- const double maxRipple1 = 1 << 16;
- const double maxRipple2 = 1 << 14;
- const double maxRipple3 = 1 << 12;
+ const double b1 = 3.0 * M_PI; // alpha = 3.00 (beta = ~9.425)
+ const double b2 = 8.5;
+ const double b3 = 7.3;
- // convert max ripple into sidelode attenuation (dB)
- double db1 = rippleToDecibels(maxRipple1);
- double db2 = rippleToDecibels(maxRipple2);
- double db3 = rippleToDecibels(maxRipple3);
-
- // convert sidelobe attenuation (dB) into Kaiser beta
- const double b1 = decibelsToKaiserBeta(db1);
- const double b2 = decibelsToKaiserBeta(db2);
- const double b3 = decibelsToKaiserBeta(db3);
-
- // low-pass cutoffs (could maybe use some further tweaking)
+ // sinc low-pass cutoff (could maybe use some further tweaking)
const double c1 = 1.000;
const double c2 = 0.500;
const double c3 = 0.425;
// 8 point
- generateSincLUT(fKaiserSinc_8, SINC1_TAPS, SINC1_PHASES, b1, c1);
- generateSincLUT(fDownSample1_8, SINC1_TAPS, SINC1_PHASES, b2, c2);
- generateSincLUT(fDownSample2_8, SINC1_TAPS, SINC1_PHASES, b3, c3);
+ generateWindowedSinc(fSinc8_1, SINC1_WIDTH, SINC1_PHASES, b1, c1);
+ generateWindowedSinc(fSinc8_2, SINC1_WIDTH, SINC1_PHASES, b2, c2);
+ generateWindowedSinc(fSinc8_3, SINC1_WIDTH, SINC1_PHASES, b3, c3);
// 16 point
- generateSincLUT(fKaiserSinc_16, SINC2_TAPS, SINC2_PHASES, b1, c1);
- generateSincLUT(fDownSample1_16, SINC2_TAPS, SINC2_PHASES, b2, c2);
- generateSincLUT(fDownSample2_16, SINC2_TAPS, SINC2_PHASES, b3, c3);
+ generateWindowedSinc(fSinc16_1, SINC2_WIDTH, SINC2_PHASES, b1, c1);
+ generateWindowedSinc(fSinc16_2, SINC2_WIDTH, SINC2_PHASES, b2, c2);
+ generateWindowedSinc(fSinc16_3, SINC2_WIDTH, SINC2_PHASES, b3, c3);
return true;
}
@@ -149,39 +154,39 @@
void freeWindowedSincTables(void)
{
- if (fKaiserSinc_8 != NULL)
+ if (fSinc8_1 != NULL)
{
- free(fKaiserSinc_8);
- fKaiserSinc_8 = NULL;
+ free(fSinc8_1);
+ fSinc8_1 = NULL;
}
- if (fDownSample1_8 != NULL)
+ if (fSinc8_2 != NULL)
{
- free(fDownSample1_8);
- fDownSample1_8 = NULL;
+ free(fSinc8_2);
+ fSinc8_2 = NULL;
}
- if (fDownSample2_8 != NULL)
+ if (fSinc8_3 != NULL)
{
- free(fDownSample2_8);
- fDownSample2_8 = NULL;
+ free(fSinc8_3);
+ fSinc8_3 = NULL;
}
- if (fKaiserSinc_16 != NULL)
+ if (fSinc16_1 != NULL)
{
- free(fKaiserSinc_16);
- fKaiserSinc_16 = NULL;
+ free(fSinc16_1);
+ fSinc16_1 = NULL;
}
- if (fDownSample1_16 != NULL)
+ if (fSinc16_2 != NULL)
{
- free(fDownSample1_16);
- fDownSample1_16 = NULL;
+ free(fSinc16_2);
+ fSinc16_2 = NULL;
}
- if (fDownSample2_16 != NULL)
+ if (fSinc16_3 != NULL)
{
- free(fDownSample2_16);
- fDownSample2_16 = NULL;
+ free(fSinc16_3);
+ fSinc16_3 = NULL;
}
}
--- a/src/mixer/ft2_windowed_sinc.h
+++ b/src/mixer/ft2_windowed_sinc.h
@@ -5,27 +5,26 @@
#include <stdbool.h>
#include "ft2_mix.h" // MIXER_FRAC_BITS
-#define SINC1_TAPS 8
-#define SINC8_WIDTH_BITS 3 // log2(SINC1_TAPS)
+#define SINC1_WIDTH 8
+#define SINC1_WIDTH_BITS 3 // log2(SINC1_WIDTH)
#define SINC1_PHASES 8192
#define SINC1_PHASES_BITS 13 // log2(SINC1_PHASES)
-#define SINC8_FSHIFT (MIXER_FRAC_BITS-(SINC1_PHASES_BITS+SINC8_WIDTH_BITS))
-#define SINC8_FMASK ((SINC1_TAPS*SINC1_PHASES)-SINC1_TAPS)
+#define SINC1_FRACSHIFT (MIXER_FRAC_BITS-(SINC1_PHASES_BITS+SINC1_WIDTH_BITS))
+#define SINC1_FRACMASK ((SINC1_WIDTH*SINC1_PHASES)-SINC1_WIDTH)
-#define SINC2_TAPS 16
-#define SINC16_WIDTH_BITS 4 // log2(SINC2_TAPS)
+#define SINC2_WIDTH 16
+#define SINC2_WIDTH_BITS 4 // log2(SINC2_WIDTH)
#define SINC2_PHASES 8192
#define SINC2_PHASES_BITS 13 // log2(SINC2_PHASES)
-#define SINC16_FSHIFT (MIXER_FRAC_BITS-(SINC2_PHASES_BITS+SINC16_WIDTH_BITS))
-#define SINC16_FMASK ((SINC2_TAPS*SINC2_PHASES)-SINC2_TAPS)
+#define SINC2_FRACSHIFT (MIXER_FRAC_BITS-(SINC2_PHASES_BITS+SINC2_WIDTH_BITS))
+#define SINC2_FRACMASK ((SINC2_WIDTH*SINC2_PHASES)-SINC2_WIDTH)
-extern float *fKaiserSinc_8, *fDownSample1_8, *fDownSample2_8;
-extern float *fKaiserSinc_16, *fDownSample1_16, *fDownSample2_16;
+extern float *fSinc8_1, *fSinc8_2, *fSinc8_3;
+extern float *fSinc16_1, *fSinc16_2, *fSinc16_3;
+extern float *fSinc_1, *fSinc_2, *fSinc_3;
+extern uint64_t sincRatio1, sincRatio2;
-extern float *fKaiserSinc, *fDownSample1, *fDownSample2;
-extern uint64_t sincDownsample1Ratio, sincDownsample2Ratio;
-
-bool calcWindowedSincTables(void);
+bool setupWindowedSincTables(void);
void freeWindowedSincTables(void);
#endif
--- a/src/scopes/ft2_scope_macros.h
+++ b/src/scopes/ft2_scope_macros.h
@@ -61,24 +61,20 @@
} \
#define CUBIC_SMP8(frac) \
- const int16_t *t = scopeIntrpLUT + (((frac) >> (SCOPE_FRAC_BITS-SCOPE_INTRP_PHASES_BITS)) * SCOPE_INTRP_TAPS); \
+ const int16_t *t = scopeIntrpLUT + (((frac) >> (SCOPE_FRAC_BITS-SCOPE_INTRP_PHASES_BITS)) << SCOPE_INTRP_WIDTH_BITS); \
\
- sample = ((s8[-2] * t[0]) + \
- (s8[-1] * t[1]) + \
- ( s8[0] * t[2]) + \
- ( s8[1] * t[3]) + \
- ( s8[2] * t[4]) + \
- ( s8[3] * t[5])) >> (SCOPE_INTRP_SCALE_BITS-8);
+ sample = ((s8[-1] * t[0]) + \
+ ( s8[0] * t[1]) + \
+ ( s8[1] * t[2]) + \
+ ( s8[2] * t[3])) >> (SCOPE_INTRP_SCALE_BITS-8);
#define CUBIC_SMP16(frac) \
- const int16_t *t = scopeIntrpLUT + (((frac) >> (SCOPE_FRAC_BITS-SCOPE_INTRP_PHASES_BITS)) * SCOPE_INTRP_TAPS); \
+ const int16_t *t = scopeIntrpLUT + (((frac) >> (SCOPE_FRAC_BITS-SCOPE_INTRP_PHASES_BITS)) << SCOPE_INTRP_WIDTH_BITS); \
\
- sample = ((s16[-2] * t[0]) + \
- (s16[-1] * t[1]) + \
- ( s16[0] * t[2]) + \
- ( s16[1] * t[3]) + \
- ( s16[2] * t[4]) + \
- ( s16[3] * t[5])) >> SCOPE_INTRP_SCALE_BITS;
+ sample = ((s16[-1] * t[0]) + \
+ ( s16[0] * t[1]) + \
+ ( s16[1] * t[2]) + \
+ ( s16[2] * t[3])) >> SCOPE_INTRP_SCALE_BITS;
#define CUBIC_INTERPOLATION8(frac) \
{ \
@@ -114,7 +110,8 @@
LINEAR_INTERPOLATION8(frac) \
else \
CUBIC_INTERPOLATION8(frac) \
- sample = (sample * s->volume) >> (16+2);
+ sample = (int32_t)roundf((float)sample * s->fVolume); \
+ if (sample > (SCOPE_HEIGHT/2)-1) sample = (SCOPE_HEIGHT/2)-1; /* upper-clamp needed */
#define INTERPOLATE_SMP16(pos, frac) \
const int16_t *s16 = s->base16 + pos; \
@@ -124,7 +121,8 @@
LINEAR_INTERPOLATION16(frac) \
else \
CUBIC_INTERPOLATION16(frac) \
- sample = (sample * s->volume) >> (16+2);
+ sample = (int32_t)roundf((float)sample * s->fVolume); \
+ if (sample > (SCOPE_HEIGHT/2)-1) sample = (SCOPE_HEIGHT/2)-1; /* upper-clamp needed */
#define INTERPOLATE_SMP8_LOOP(pos, frac) \
const int8_t *s8 = s->base8 + pos; \
@@ -134,7 +132,8 @@
LINEAR_INTERPOLATION8(frac) \
else \
CUBIC_INTERPOLATION8_LOOP(pos, frac) \
- sample = (sample * s->volume) >> (16+2);
+ sample = (int32_t)roundf((float)sample * s->fVolume); \
+ if (sample > (SCOPE_HEIGHT/2)-1) sample = (SCOPE_HEIGHT/2)-1; /* upper-clamp needed */
#define INTERPOLATE_SMP16_LOOP(pos, frac) \
const int16_t *s16 = s->base16 + pos; \
@@ -144,25 +143,37 @@
LINEAR_INTERPOLATION16(frac) \
else \
CUBIC_INTERPOLATION16_LOOP(pos, frac) \
- sample = (sample * s->volume) >> (16+2);
+ sample = (int32_t)roundf((float)sample * s->fVolume); \
+ if (sample > (SCOPE_HEIGHT/2)-1) sample = (SCOPE_HEIGHT/2)-1; /* upper-clamp needed */
#define SCOPE_GET_SMP8 \
if (s->active) \
- sample = (s->base8[position] * s->volume) >> (8+2); \
+ { \
+ sample = (int32_t)roundf((float)(s->base8[position] << 8) * s->fVolume); \
+ if (sample > (SCOPE_HEIGHT/2)-1) sample = (SCOPE_HEIGHT/2)-1; /* upper-clamp needed */ \
+ } \
else \
- sample = 0;
+ { \
+ sample = 0; \
+ }
#define SCOPE_GET_SMP16 \
if (s->active) \
- sample = (s->base16[position] * s->volume) >> (16+2); \
+ { \
+ sample = (int32_t)roundf((float)s->base16[position] * s->fVolume); \
+ if (sample > (SCOPE_HEIGHT/2)-1) sample = (SCOPE_HEIGHT/2)-1; /* upper-clamp needed */ \
+ } \
else \
- sample = 0;
+ { \
+ sample = 0; \
+ }
#define SCOPE_GET_SMP8_BIDI \
if (s->active) \
{ \
GET_BIDI_POSITION \
- sample = (s->base8[actualPos] * s->volume) >> (8+2); \
+ sample = (int32_t)roundf((float)(s->base8[actualPos] << 8) * s->fVolume); \
+ if (sample > (SCOPE_HEIGHT/2)-1) sample = (SCOPE_HEIGHT/2)-1; /* upper-clamp needed */ \
} \
else \
{ \
@@ -173,7 +184,8 @@
if (s->active) \
{ \
GET_BIDI_POSITION \
- sample = (s->base16[actualPos] * s->volume) >> (16+2); \
+ sample = (int32_t)roundf((float)s->base16[actualPos] * s->fVolume); \
+ if (sample > (SCOPE_HEIGHT/2)-1) sample = (SCOPE_HEIGHT/2)-1; /* upper-clamp needed */ \
} \
else \
{ \
--- a/src/scopes/ft2_scopedraw.c
+++ b/src/scopes/ft2_scopedraw.c
@@ -16,17 +16,17 @@
bool calcScopeIntrpLUT(void)
{
- scopeIntrpLUT = (int16_t *)malloc(SCOPE_INTRP_TAPS * SCOPE_INTRP_PHASES * sizeof (int16_t));
+ scopeIntrpLUT = (int16_t *)malloc(SCOPE_INTRP_WIDTH * SCOPE_INTRP_PHASES * sizeof (int16_t));
if (scopeIntrpLUT == NULL)
return false;
/* Several tests have been done to figure out what interpolation method is most suitable
** for the tracker scopes. After testing linear, cubic, Gaussian and windowed-sinc
- ** interpolation, I have come to the conclusion that 6-point cubic B-spline is the best.
+ ** interpolation, I have come to the conclusion that 4-point cubic B-spline is the best.
** This interpolation method also has no overshoot.
*/
- // 6-point cubic B-spline (no overshoot)
+ // 4-point cubic B-spline (no overshoot)
int16_t *ptr16 = scopeIntrpLUT;
for (int32_t i = 0; i < SCOPE_INTRP_PHASES; i++)
@@ -34,23 +34,17 @@
const double x1 = i * (1.0 / SCOPE_INTRP_PHASES);
const double x2 = x1 * x1; // x^2
const double x3 = x2 * x1; // x^3
- const double x4 = x3 * x1; // x^4
- const double x5 = x4 * x1; // x^5
- double t1 = (-(1.0/120.0) * x5) + ( (1.0/24.0) * x4) + (-(1.0/12.0) * x3) + ( (1.0/12.0) * x2) + (-(1.0/24.0) * x1) + ( 1.0/120.0);
- double t2 = ( (1.0/ 24.0) * x5) + (-(1.0/ 6.0) * x4) + ( (1.0/ 6.0) * x3) + ( (1.0/ 6.0) * x2) + (-(5.0/12.0) * x1) + (13.0/ 60.0);
- double t3 = (-(1.0/ 12.0) * x5) + ( (1.0/ 4.0) * x4) + (-(1.0/ 2.0) * x2) + (11.0/ 20.0);
- double t4 = ( (1.0/ 12.0) * x5) + (-(1.0/ 6.0) * x4) + (-(1.0/ 6.0) * x3) + ( (1.0/ 6.0) * x2) + ( (5.0/12.0) * x1) + (13.0/ 60.0);
- double t5 = (-(1.0/ 24.0) * x5) + ( (1.0/24.0) * x4) + ( (1.0/12.0) * x3) + ( (1.0/12.0) * x2) + ( (1.0/24.0) * x1) + ( 1.0/120.0);
- double t6 = (1.0/120.0) * x5;
+ double t1 = (-(1.0/6.0) * x3) + ( (1.0/2.0) * x2) + (-(1.0/2.0) * x1) + (1.0/6.0);
+ double t2 = ( (1.0/2.0) * x3) + ( -1.0 * x2) + (2.0/3.0);
+ double t3 = (-(1.0/2.0) * x3) + ( (1.0/2.0) * x2) + ( (1.0/2.0) * x1) + (1.0/6.0);
+ double t4 = (1.0/6.0) * x3;
- // important: truncate, do not round (would cause scope overflow)
- *ptr16++ = (int16_t)(t1 * SCOPE_INTRP_SCALE);
- *ptr16++ = (int16_t)(t2 * SCOPE_INTRP_SCALE);
- *ptr16++ = (int16_t)(t3 * SCOPE_INTRP_SCALE);
- *ptr16++ = (int16_t)(t4 * SCOPE_INTRP_SCALE);
- *ptr16++ = (int16_t)(t5 * SCOPE_INTRP_SCALE);
- *ptr16++ = (int16_t)(t6 * SCOPE_INTRP_SCALE);
+ // rounding here would make the scopes clip, but we clamp the scopes for another reason anyway
+ *ptr16++ = (int16_t)round(t1 * SCOPE_INTRP_SCALE);
+ *ptr16++ = (int16_t)round(t2 * SCOPE_INTRP_SCALE);
+ *ptr16++ = (int16_t)round(t3 * SCOPE_INTRP_SCALE);
+ *ptr16++ = (int16_t)round(t4 * SCOPE_INTRP_SCALE);
}
return true;
--- a/src/scopes/ft2_scopes.c
+++ b/src/scopes/ft2_scopes.c
@@ -428,7 +428,7 @@
}
volatile scope_t s = scope[i]; // cache scope to lower thread race condition issues
- if (s.active && s.volume > 0 && !audio.locked)
+ if (s.active && s.fVolume > 0.0f && !audio.locked)
{
// scope is active
scope[i].wasCleared = false;
@@ -489,10 +489,10 @@
const uint8_t status = scopeUpdateStatus[i];
if (status & IS_Vol)
- sc->volume = ch->scopeVolume;
+ sc->fVolume = ch->scopeVolume * (1.0f / (255.0f / (SCOPE_HEIGHT/2) * 32768.0f));
if (status & IS_Period)
- sc->delta = ch->scopeDelta;
+ sc->delta = (uint64_t)(dPeriod2Hz(ch->period) * (SCOPE_FRAC_SCALE / (double)SCOPE_HZ));
if (status & IS_Trigger)
{
--- a/src/scopes/ft2_scopes.h
+++ b/src/scopes/ft2_scopes.h
@@ -18,7 +18,8 @@
#define SCOPE_FRAC_SCALE ((int64_t)1 << SCOPE_FRAC_BITS)
#define SCOPE_FRAC_MASK (SCOPE_FRAC_SCALE-1)
-#define SCOPE_INTRP_TAPS 6
+#define SCOPE_INTRP_WIDTH 4
+#define SCOPE_INTRP_WIDTH_BITS 2 /* log2(SCOPE_INTRP_WIDTH) */
#define SCOPE_INTRP_SCALE 32768
#define SCOPE_INTRP_SCALE_BITS 15 /* log2(SCOPE_INTRP_SCALE) */
#define SCOPE_INTRP_PHASES 512 /* plentiful for FT2-styled scopes */
@@ -40,8 +41,9 @@
const int16_t *base16;
bool wasCleared, sample16Bit, samplingBackwards, hasLooped;
uint8_t loopType;
- int32_t volume, loopStart, loopLength, loopEnd, sampleEnd, position;
+ int32_t loopStart, loopLength, loopEnd, sampleEnd, position;
uint64_t delta, drawDelta, positionFrac;
+ float fVolume;
// if (loopEnabled && hasLooped && samplingPos <= loopStart+MAX_LEFT_TAPS) readFixedTapsFromThisPointer();
const int8_t *leftEdgeTaps8;
binary files a/vs2019_project/ft2-clone/SDL2.dll b/vs2019_project/ft2-clone/SDL2.dll differ
--- a/vs2019_project/ft2-clone/ft2-clone.vcxproj
+++ b/vs2019_project/ft2-clone/ft2-clone.vcxproj
@@ -357,6 +357,7 @@
<ClCompile Include="..\..\src\libflac\window.c" />
<ClCompile Include="..\..\src\libflac\windows_unicode_filenames.c" />
<ClCompile Include="..\..\src\mixer\ft2_cubic_spline.c" />
+ <ClCompile Include="..\..\src\mixer\ft2_quadratic_spline.c" />
<ClCompile Include="..\..\src\mixer\ft2_windowed_sinc.c" />
<ClCompile Include="..\..\src\mixer\ft2_mix.c" />
<ClCompile Include="..\..\src\mixer\ft2_silence_mix.c" />
@@ -433,6 +434,7 @@
<ClInclude Include="..\..\src\ft2_video.h" />
<ClInclude Include="..\..\src\ft2_wav_renderer.h" />
<ClInclude Include="..\..\src\mixer\ft2_cubic_spline.h" />
+ <ClInclude Include="..\..\src\mixer\ft2_quadratic_spline.h" />
<ClInclude Include="..\..\src\mixer\ft2_windowed_sinc.h" />
<ClInclude Include="..\..\src\mixer\ft2_mix.h" />
<ClInclude Include="..\..\src\mixer\ft2_mix_macros.h" />
--- a/vs2019_project/ft2-clone/ft2-clone.vcxproj.filters
+++ b/vs2019_project/ft2-clone/ft2-clone.vcxproj.filters
@@ -173,6 +173,9 @@
<ClCompile Include="..\..\src\modloaders\ft2_load_it.c">
<Filter>modloaders</Filter>
</ClCompile>
+ <ClCompile Include="..\..\src\mixer\ft2_quadratic_spline.c">
+ <Filter>mixer</Filter>
+ </ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\src\rtmidi\RtMidi.h">
@@ -330,6 +333,9 @@
</ClInclude>
<ClInclude Include="..\..\src\ft2_unicode.h">
<Filter>headers</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\src\mixer\ft2_quadratic_spline.h">
+ <Filter>mixer</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
--- a/vs2019_project/ft2-clone/sdl/LICENSE.txt
+++ b/vs2019_project/ft2-clone/sdl/LICENSE.txt
@@ -1,4 +1,4 @@
-Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_assert.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_assert.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_atomic.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_atomic.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_audio.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_audio.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_bits.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_bits.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_blendmode.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_blendmode.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_clipboard.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_clipboard.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_config.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_config.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_config.h.in
+++ /dev/null
@@ -1,498 +1,0 @@
-/*
- Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
-
- This software is provided 'as-is', without any express or implied
- warranty. In no event will the authors be held liable for any damages
- arising from the use of this software.
-
- Permission is granted to anyone to use this software for any purpose,
- including commercial applications, and to alter it and redistribute it
- freely, subject to the following restrictions:
-
- 1. The origin of this software must not be misrepresented; you must not
- claim that you wrote the original software. If you use this software
- in a product, an acknowledgment in the product documentation would be
- appreciated but is not required.
- 2. Altered source versions must be plainly marked as such, and must not be
- misrepresented as being the original software.
- 3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef SDL_config_h_
-#define SDL_config_h_
-
-/**
- * \file SDL_config.h.in
- *
- * This is a set of defines to configure the SDL features
- */
-
-/* General platform specific identifiers */
-#include "SDL_platform.h"
-
-/* Make sure that this isn't included by Visual C++ */
-#ifdef _MSC_VER
-#error You should run git checkout -f include/SDL_config.h
-#endif
-
-/* C language features */
-#undef const
-#undef inline
-#undef volatile
-
-/* C datatypes */
-#if defined(__LP64__) || defined(_LP64) || defined(_WIN64)
-#define SIZEOF_VOIDP 8
-#else
-#define SIZEOF_VOIDP 4
-#endif
-
-#undef HAVE_GCC_ATOMICS
-#undef HAVE_GCC_SYNC_LOCK_TEST_AND_SET
-
-/* Comment this if you want to build without any C library requirements */
-#undef HAVE_LIBC
-#ifdef HAVE_LIBC
-
-/* Useful headers */
-#undef STDC_HEADERS
-#undef HAVE_ALLOCA_H
-#undef HAVE_CTYPE_H
-#undef HAVE_FLOAT_H
-#undef HAVE_ICONV_H
-#undef HAVE_INTTYPES_H
-#undef HAVE_LIMITS_H
-#undef HAVE_MALLOC_H
-#undef HAVE_MATH_H
-#undef HAVE_MEMORY_H
-#undef HAVE_SIGNAL_H
-#undef HAVE_STDARG_H
-#undef HAVE_STDINT_H
-#undef HAVE_STDIO_H
-#undef HAVE_STDLIB_H
-#undef HAVE_STRINGS_H
-#undef HAVE_STRING_H
-#undef HAVE_SYS_TYPES_H
-#undef HAVE_WCHAR_H
-#undef HAVE_LINUX_INPUT_H
-#undef HAVE_PTHREAD_NP_H
-#undef HAVE_LIBUNWIND_H
-
-/* C library functions */
-#undef HAVE_DLOPEN
-#undef HAVE_MALLOC
-#undef HAVE_CALLOC
-#undef HAVE_REALLOC
-#undef HAVE_FREE
-#undef HAVE_ALLOCA
-#ifndef __WIN32__ /* Don't use C runtime versions of these on Windows */
-#undef HAVE_GETENV
-#undef HAVE_SETENV
-#undef HAVE_PUTENV
-#undef HAVE_UNSETENV
-#endif
-#undef HAVE_QSORT
-#undef HAVE_BSEARCH
-#undef HAVE_ABS
-#undef HAVE_BCOPY
-#undef HAVE_MEMSET
-#undef HAVE_MEMCPY
-#undef HAVE_MEMMOVE
-#undef HAVE_MEMCMP
-#undef HAVE_WCSLEN
-#undef HAVE_WCSLCPY
-#undef HAVE_WCSLCAT
-#undef HAVE__WCSDUP
-#undef HAVE_WCSDUP
-#undef HAVE_WCSSTR
-#undef HAVE_WCSCMP
-#undef HAVE_WCSNCMP
-#undef HAVE_WCSCASECMP
-#undef HAVE__WCSICMP
-#undef HAVE_WCSNCASECMP
-#undef HAVE__WCSNICMP
-#undef HAVE_STRLEN
-#undef HAVE_STRLCPY
-#undef HAVE_STRLCAT
-#undef HAVE__STRREV
-#undef HAVE__STRUPR
-#undef HAVE__STRLWR
-#undef HAVE_INDEX
-#undef HAVE_RINDEX
-#undef HAVE_STRCHR
-#undef HAVE_STRRCHR
-#undef HAVE_STRSTR
-#undef HAVE_STRTOK_R
-#undef HAVE_ITOA
-#undef HAVE__LTOA
-#undef HAVE__UITOA
-#undef HAVE__ULTOA
-#undef HAVE_STRTOL
-#undef HAVE_STRTOUL
-#undef HAVE__I64TOA
-#undef HAVE__UI64TOA
-#undef HAVE_STRTOLL
-#undef HAVE_STRTOULL
-#undef HAVE_STRTOD
-#undef HAVE_ATOI
-#undef HAVE_ATOF
-#undef HAVE_STRCMP
-#undef HAVE_STRNCMP
-#undef HAVE__STRICMP
-#undef HAVE_STRCASECMP
-#undef HAVE__STRNICMP
-#undef HAVE_STRNCASECMP
-#undef HAVE_STRCASESTR
-#undef HAVE_SSCANF
-#undef HAVE_VSSCANF
-#undef HAVE_SNPRINTF
-#undef HAVE_VSNPRINTF
-#undef HAVE_M_PI
-#undef HAVE_ACOS
-#undef HAVE_ACOSF
-#undef HAVE_ASIN
-#undef HAVE_ASINF
-#undef HAVE_ATAN
-#undef HAVE_ATANF
-#undef HAVE_ATAN2
-#undef HAVE_ATAN2F
-#undef HAVE_CEIL
-#undef HAVE_CEILF
-#undef HAVE_COPYSIGN
-#undef HAVE_COPYSIGNF
-#undef HAVE_COS
-#undef HAVE_COSF
-#undef HAVE_EXP
-#undef HAVE_EXPF
-#undef HAVE_FABS
-#undef HAVE_FABSF
-#undef HAVE_FLOOR
-#undef HAVE_FLOORF
-#undef HAVE_FMOD
-#undef HAVE_FMODF
-#undef HAVE_LOG
-#undef HAVE_LOGF
-#undef HAVE_LOG10
-#undef HAVE_LOG10F
-#undef HAVE_LROUND
-#undef HAVE_LROUNDF
-#undef HAVE_POW
-#undef HAVE_POWF
-#undef HAVE_ROUND
-#undef HAVE_ROUNDF
-#undef HAVE_SCALBN
-#undef HAVE_SCALBNF
-#undef HAVE_SIN
-#undef HAVE_SINF
-#undef HAVE_SQRT
-#undef HAVE_SQRTF
-#undef HAVE_TAN
-#undef HAVE_TANF
-#undef HAVE_TRUNC
-#undef HAVE_TRUNCF
-#undef HAVE_FOPEN64
-#undef HAVE_FSEEKO
-#undef HAVE_FSEEKO64
-#undef HAVE_SIGACTION
-#undef HAVE_SA_SIGACTION
-#undef HAVE_SETJMP
-#undef HAVE_NANOSLEEP
-#undef HAVE_SYSCONF
-#undef HAVE_SYSCTLBYNAME
-#undef HAVE_CLOCK_GETTIME
-#undef HAVE_GETPAGESIZE
-#undef HAVE_MPROTECT
-#undef HAVE_ICONV
-#undef SDL_USE_LIBICONV
-#undef HAVE_PTHREAD_SETNAME_NP
-#undef HAVE_PTHREAD_SET_NAME_NP
-#undef HAVE_SEM_TIMEDWAIT
-#undef HAVE_GETAUXVAL
-#undef HAVE_ELF_AUX_INFO
-#undef HAVE_POLL
-#undef HAVE_MEMFD_CREATE
-#undef HAVE_POSIX_FALLOCATE
-#undef HAVE__EXIT
-
-#else
-#define HAVE_STDARG_H 1
-#define HAVE_STDDEF_H 1
-#define HAVE_STDINT_H 1
-#endif /* HAVE_LIBC */
-
-#undef HAVE_O_CLOEXEC
-#undef HAVE_ALTIVEC_H
-#undef HAVE_DBUS_DBUS_H
-#undef HAVE_FCITX
-#undef HAVE_SYS_INOTIFY_H
-#undef HAVE_INOTIFY_INIT
-#undef HAVE_INOTIFY_INIT1
-#undef HAVE_INOTIFY
-#undef HAVE_IBUS_IBUS_H
-#undef HAVE_IMMINTRIN_H
-#undef HAVE_LIBUDEV_H
-#undef HAVE_LIBUSB
-#undef HAVE_LIBSAMPLERATE_H
-#undef HAVE_LIBDECOR_H
-#undef HAVE_LSXINTRIN_H
-#undef HAVE_LASXINTRIN_H
-
-#undef HAVE_DDRAW_H
-#undef HAVE_DINPUT_H
-#undef HAVE_DSOUND_H
-#undef HAVE_DXGI_H
-#undef HAVE_WINDOWS_GAMING_INPUT_H
-#undef HAVE_XINPUT_H
-
-#undef HAVE_MMDEVICEAPI_H
-#undef HAVE_AUDIOCLIENT_H
-#undef HAVE_TPCSHRD_H
-#undef HAVE_SENSORSAPI_H
-#undef HAVE_ROAPI_H
-#undef HAVE_SHELLSCALINGAPI_H
-
-/* SDL internal assertion support */
-#undef SDL_DEFAULT_ASSERT_LEVEL
-
-/* Allow disabling of core subsystems */
-#undef SDL_ATOMIC_DISABLED
-#undef SDL_AUDIO_DISABLED
-#undef SDL_CPUINFO_DISABLED
-#undef SDL_EVENTS_DISABLED
-#undef SDL_FILE_DISABLED
-#undef SDL_JOYSTICK_DISABLED
-#undef SDL_HAPTIC_DISABLED
-#undef SDL_HIDAPI_DISABLED
-#undef SDL_SENSOR_DISABLED
-#undef SDL_LOADSO_DISABLED
-#undef SDL_RENDER_DISABLED
-#undef SDL_THREADS_DISABLED
-#undef SDL_TIMERS_DISABLED
-#undef SDL_VIDEO_DISABLED
-#undef SDL_POWER_DISABLED
-#undef SDL_FILESYSTEM_DISABLED
-#undef SDL_LOCALE_DISABLED
-#undef SDL_MISC_DISABLED
-
-/* Enable various audio drivers */
-#undef SDL_AUDIO_DRIVER_AAUDIO
-#undef SDL_AUDIO_DRIVER_ALSA
-#undef SDL_AUDIO_DRIVER_ALSA_DYNAMIC
-#undef SDL_AUDIO_DRIVER_ANDROID
-#undef SDL_AUDIO_DRIVER_ARTS
-#undef SDL_AUDIO_DRIVER_ARTS_DYNAMIC
-#undef SDL_AUDIO_DRIVER_COREAUDIO
-#undef SDL_AUDIO_DRIVER_DISK
-#undef SDL_AUDIO_DRIVER_DSOUND
-#undef SDL_AUDIO_DRIVER_DUMMY
-#undef SDL_AUDIO_DRIVER_EMSCRIPTEN
-#undef SDL_AUDIO_DRIVER_ESD
-#undef SDL_AUDIO_DRIVER_ESD_DYNAMIC
-#undef SDL_AUDIO_DRIVER_FUSIONSOUND
-#undef SDL_AUDIO_DRIVER_FUSIONSOUND_DYNAMIC
-#undef SDL_AUDIO_DRIVER_HAIKU
-#undef SDL_AUDIO_DRIVER_JACK
-#undef SDL_AUDIO_DRIVER_JACK_DYNAMIC
-#undef SDL_AUDIO_DRIVER_NACL
-#undef SDL_AUDIO_DRIVER_NAS
-#undef SDL_AUDIO_DRIVER_NAS_DYNAMIC
-#undef SDL_AUDIO_DRIVER_NETBSD
-#undef SDL_AUDIO_DRIVER_OPENSLES
-#undef SDL_AUDIO_DRIVER_OSS
-#undef SDL_AUDIO_DRIVER_PAUDIO
-#undef SDL_AUDIO_DRIVER_PIPEWIRE
-#undef SDL_AUDIO_DRIVER_PIPEWIRE_DYNAMIC
-#undef SDL_AUDIO_DRIVER_PULSEAUDIO
-#undef SDL_AUDIO_DRIVER_PULSEAUDIO_DYNAMIC
-#undef SDL_AUDIO_DRIVER_QSA
-#undef SDL_AUDIO_DRIVER_SNDIO
-#undef SDL_AUDIO_DRIVER_SNDIO_DYNAMIC
-#undef SDL_AUDIO_DRIVER_SUNAUDIO
-#undef SDL_AUDIO_DRIVER_WASAPI
-#undef SDL_AUDIO_DRIVER_WINMM
-#undef SDL_AUDIO_DRIVER_OS2
-
-/* Enable various input drivers */
-#undef SDL_INPUT_LINUXEV
-#undef SDL_INPUT_FBSDKBIO
-#undef SDL_INPUT_LINUXKD
-#undef SDL_INPUT_WSCONS
-#undef SDL_JOYSTICK_HAIKU
-#undef SDL_JOYSTICK_DINPUT
-#undef SDL_JOYSTICK_WGI
-#undef SDL_JOYSTICK_XINPUT
-#undef SDL_JOYSTICK_DUMMY
-#undef SDL_JOYSTICK_IOKIT
-#undef SDL_JOYSTICK_MFI
-#undef SDL_JOYSTICK_LINUX
-#undef SDL_JOYSTICK_ANDROID
-#undef SDL_JOYSTICK_OS2
-#undef SDL_JOYSTICK_USBHID
-#undef SDL_HAVE_MACHINE_JOYSTICK_H
-#undef SDL_JOYSTICK_HIDAPI
-#undef SDL_JOYSTICK_RAWINPUT
-#undef SDL_JOYSTICK_EMSCRIPTEN
-#undef SDL_JOYSTICK_VIRTUAL
-#undef SDL_HAPTIC_DUMMY
-#undef SDL_HAPTIC_ANDROID
-#undef SDL_HAPTIC_LINUX
-#undef SDL_HAPTIC_IOKIT
-#undef SDL_HAPTIC_DINPUT
-#undef SDL_HAPTIC_XINPUT
-
-/* Enable various sensor drivers */
-#undef SDL_SENSOR_ANDROID
-#undef SDL_SENSOR_COREMOTION
-#undef SDL_SENSOR_WINDOWS
-#undef SDL_SENSOR_DUMMY
-
-/* Enable various shared object loading systems */
-#undef SDL_LOADSO_DLOPEN
-#undef SDL_LOADSO_DUMMY
-#undef SDL_LOADSO_LDG
-#undef SDL_LOADSO_WINDOWS
-#undef SDL_LOADSO_OS2
-
-/* Enable various threading systems */
-#undef SDL_THREAD_GENERIC_COND_SUFFIX
-#undef SDL_THREAD_PTHREAD
-#undef SDL_THREAD_PTHREAD_RECURSIVE_MUTEX
-#undef SDL_THREAD_PTHREAD_RECURSIVE_MUTEX_NP
-#undef SDL_THREAD_WINDOWS
-#undef SDL_THREAD_OS2
-
-/* Enable various timer systems */
-#undef SDL_TIMER_HAIKU
-#undef SDL_TIMER_DUMMY
-#undef SDL_TIMER_UNIX
-#undef SDL_TIMER_WINDOWS
-#undef SDL_TIMER_OS2
-
-/* Enable various video drivers */
-#undef SDL_VIDEO_DRIVER_HAIKU
-#undef SDL_VIDEO_DRIVER_COCOA
-#undef SDL_VIDEO_DRIVER_DIRECTFB
-#undef SDL_VIDEO_DRIVER_DIRECTFB_DYNAMIC
-#undef SDL_VIDEO_DRIVER_DUMMY
-#undef SDL_VIDEO_DRIVER_WINDOWS
-#undef SDL_VIDEO_DRIVER_WAYLAND
-#undef SDL_VIDEO_DRIVER_WAYLAND_QT_TOUCH
-#undef SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC
-#undef SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_EGL
-#undef SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_CURSOR
-#undef SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_XKBCOMMON
-#undef SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_LIBDECOR
-#undef SDL_VIDEO_DRIVER_X11
-#undef SDL_VIDEO_DRIVER_RPI
-#undef SDL_VIDEO_DRIVER_KMSDRM
-#undef SDL_VIDEO_DRIVER_KMSDRM_DYNAMIC
-#undef SDL_VIDEO_DRIVER_KMSDRM_DYNAMIC_GBM
-#undef SDL_VIDEO_DRIVER_ANDROID
-#undef SDL_VIDEO_DRIVER_EMSCRIPTEN
-#undef SDL_VIDEO_DRIVER_OFFSCREEN
-#undef SDL_VIDEO_DRIVER_X11_DYNAMIC
-#undef SDL_VIDEO_DRIVER_X11_DYNAMIC_XEXT
-#undef SDL_VIDEO_DRIVER_X11_DYNAMIC_XCURSOR
-#undef SDL_VIDEO_DRIVER_X11_DYNAMIC_XINPUT2
-#undef SDL_VIDEO_DRIVER_X11_DYNAMIC_XFIXES
-#undef SDL_VIDEO_DRIVER_X11_DYNAMIC_XRANDR
-#undef SDL_VIDEO_DRIVER_X11_DYNAMIC_XSS
-#undef SDL_VIDEO_DRIVER_X11_XCURSOR
-#undef SDL_VIDEO_DRIVER_X11_XDBE
-#undef SDL_VIDEO_DRIVER_X11_XINPUT2
-#undef SDL_VIDEO_DRIVER_X11_XINPUT2_SUPPORTS_MULTITOUCH
-#undef SDL_VIDEO_DRIVER_X11_XFIXES
-#undef SDL_VIDEO_DRIVER_X11_XRANDR
-#undef SDL_VIDEO_DRIVER_X11_XSCRNSAVER
-#undef SDL_VIDEO_DRIVER_X11_XSHAPE
-#undef SDL_VIDEO_DRIVER_X11_SUPPORTS_GENERIC_EVENTS
-#undef SDL_VIDEO_DRIVER_X11_HAS_XKBKEYCODETOKEYSYM
-#undef SDL_VIDEO_DRIVER_NACL
-#undef SDL_VIDEO_DRIVER_VIVANTE
-#undef SDL_VIDEO_DRIVER_VIVANTE_VDK
-#undef SDL_VIDEO_DRIVER_OS2
-#undef SDL_VIDEO_DRIVER_QNX
-#undef SDL_VIDEO_DRIVER_RISCOS
-
-#undef SDL_VIDEO_RENDER_D3D
-#undef SDL_VIDEO_RENDER_D3D11
-#undef SDL_VIDEO_RENDER_D3D12
-#undef SDL_VIDEO_RENDER_OGL
-#undef SDL_VIDEO_RENDER_OGL_ES
-#undef SDL_VIDEO_RENDER_OGL_ES2
-#undef SDL_VIDEO_RENDER_DIRECTFB
-#undef SDL_VIDEO_RENDER_METAL
-
-/* Enable OpenGL support */
-#undef SDL_VIDEO_OPENGL
-#undef SDL_VIDEO_OPENGL_ES
-#undef SDL_VIDEO_OPENGL_ES2
-#undef SDL_VIDEO_OPENGL_BGL
-#undef SDL_VIDEO_OPENGL_CGL
-#undef SDL_VIDEO_OPENGL_EGL
-#undef SDL_VIDEO_OPENGL_GLX
-#undef SDL_VIDEO_OPENGL_WGL
-#undef SDL_VIDEO_OPENGL_OSMESA
-#undef SDL_VIDEO_OPENGL_OSMESA_DYNAMIC
-
-/* Enable Vulkan support */
-#undef SDL_VIDEO_VULKAN
-
-/* Enable Metal support */
-#undef SDL_VIDEO_METAL
-
-/* Enable system power support */
-#undef SDL_POWER_LINUX
-#undef SDL_POWER_WINDOWS
-#undef SDL_POWER_MACOSX
-#undef SDL_POWER_HAIKU
-#undef SDL_POWER_ANDROID
-#undef SDL_POWER_EMSCRIPTEN
-#undef SDL_POWER_HARDWIRED
-
-/* Enable system filesystem support */
-#undef SDL_FILESYSTEM_ANDROID
-#undef SDL_FILESYSTEM_HAIKU
-#undef SDL_FILESYSTEM_COCOA
-#undef SDL_FILESYSTEM_DUMMY
-#undef SDL_FILESYSTEM_RISCOS
-#undef SDL_FILESYSTEM_UNIX
-#undef SDL_FILESYSTEM_WINDOWS
-#undef SDL_FILESYSTEM_NACL
-#undef SDL_FILESYSTEM_EMSCRIPTEN
-#undef SDL_FILESYSTEM_OS2
-#undef SDL_FILESYSTEM_VITA
-#undef SDL_FILESYSTEM_PSP
-#undef SDL_FILESYSTEM_PS2
-
-/* Enable misc subsystem */
-#undef SDL_MISC_DUMMY
-
-/* Enable locale subsystem */
-#undef SDL_LOCALE_DUMMY
-
-/* Enable assembly routines */
-#undef SDL_ALTIVEC_BLITTERS
-#undef SDL_ARM_SIMD_BLITTERS
-#undef SDL_ARM_NEON_BLITTERS
-
-/* Whether SDL_DYNAMIC_API needs dlopen() */
-#undef DYNAPI_NEEDS_DLOPEN
-
-/* Enable ime support */
-#undef SDL_USE_IME
-
-/* Enable dynamic udev support */
-#undef SDL_UDEV_DYNAMIC
-
-/* Enable dynamic libusb support */
-#undef SDL_LIBUSB_DYNAMIC
-
-/* Enable dynamic libsamplerate support */
-#undef SDL_LIBSAMPLERATE_DYNAMIC
-
-/* Libdecor get min/max content size functions */
-#undef SDL_HAVE_LIBDECOR_GET_MIN_MAX
-
-#endif /* SDL_config_h_ */
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_config_android.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_config_android.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_config_emscripten.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_config_emscripten.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_config_iphoneos.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_config_iphoneos.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_config_macosx.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_config_macosx.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_config_minimal.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_config_minimal.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_config_ngage.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_config_ngage.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_config_os2.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_config_os2.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_config_pandora.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_config_pandora.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_config_windows.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_config_windows.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_config_wingdk.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_config_wingdk.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_config_winrt.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_config_winrt.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_config_xbox.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_config_xbox.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_copying.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_copying.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_cpuinfo.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_cpuinfo.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_egl.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_egl.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_endian.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_endian.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_error.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_error.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_events.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_events.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_filesystem.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_filesystem.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_gamecontroller.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_gamecontroller.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_gesture.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_gesture.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_guid.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_guid.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_haptic.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_haptic.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_hidapi.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_hidapi.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_hints.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_hints.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_joystick.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_joystick.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_keyboard.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_keyboard.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_keycode.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_keycode.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_loadso.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_loadso.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_locale.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_locale.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_log.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_log.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_main.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_main.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_messagebox.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_messagebox.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_metal.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_metal.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_misc.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_misc.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_mouse.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_mouse.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_mutex.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_mutex.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_name.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_name.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_opengl.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_opengl.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_opengles.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_opengles.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_opengles2.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_opengles2.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_pixels.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_pixels.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_platform.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_platform.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_power.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_power.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_quit.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_quit.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_rect.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_rect.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_render.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_render.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_rwops.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_rwops.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_scancode.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_scancode.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_sensor.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_sensor.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_shape.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_shape.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_stdinc.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_stdinc.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_surface.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_surface.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_system.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_system.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_syswm.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_syswm.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_test.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_test.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_test_assert.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_test_assert.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_test_common.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_test_common.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_test_compare.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_test_compare.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_test_crc32.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_test_crc32.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_test_font.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_test_font.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_test_fuzzer.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_test_fuzzer.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_test_harness.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_test_harness.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_test_images.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_test_images.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_test_log.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_test_log.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_test_md5.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_test_md5.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_test_memory.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_test_memory.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_test_random.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_test_random.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_thread.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_thread.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_timer.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_timer.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_touch.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_touch.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_types.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_types.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_version.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_version.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -59,7 +59,7 @@
*/
#define SDL_MAJOR_VERSION 2
#define SDL_MINOR_VERSION 30
-#define SDL_PATCHLEVEL 10
+#define SDL_PATCHLEVEL 12
/**
* Macro to determine SDL version program was compiled against.
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_video.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/SDL_video.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/begin_code.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/begin_code.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/vs2019_project/ft2-clone/sdl/include/SDL2/close_code.h
+++ b/vs2019_project/ft2-clone/sdl/include/SDL2/close_code.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
binary files a/vs2019_project/ft2-clone/sdl/lib/SDL2.lib b/vs2019_project/ft2-clone/sdl/lib/SDL2.lib differ
binary files a/vs2019_project/ft2-clone/sdl/lib/SDL2main.lib b/vs2019_project/ft2-clone/sdl/lib/SDL2main.lib differ
binary files a/vs2019_project/ft2-clone/sdl/lib64/SDL2.lib b/vs2019_project/ft2-clone/sdl/lib64/SDL2.lib differ
binary files a/vs2019_project/ft2-clone/sdl/lib64/SDL2main.lib b/vs2019_project/ft2-clone/sdl/lib64/SDL2main.lib differ
binary files a/vs2019_project/x64/Debug/SDL2.dll b/vs2019_project/x64/Debug/SDL2.dll differ
--
⑨