From c2338be74c20a86aeb54cc3f05904f7d8cba5073 Mon Sep 17 00:00:00 2001 From: Vladyslav Hrytsenko Date: Wed, 31 Jul 2024 22:15:17 +0300 Subject: [PATCH 1/4] changed tool perms for macos --- MAKE.sh | 0 depot | 2 +- tools/PVRTexToolCLI.osx | Bin tools/ark.osx | Bin tools/ase2ini.osx | Bin tools/ass2iqe.osx | Bin tools/cook.osx | Bin tools/cuttlefish.osx | Bin tools/ffmpeg.osx | Bin tools/furnace.osx | Bin tools/iqe2iqm.osx | Bin tools/mid2wav.osx | Bin tools/mod2wav.osx | Bin tools/ninja.osx | Bin tools/premake5.osx | Bin tools/sfxr2wav.osx | Bin tools/xlsx2ini.osx | Bin 17 files changed, 1 insertion(+), 1 deletion(-) mode change 100644 => 100755 MAKE.sh mode change 100644 => 100755 tools/PVRTexToolCLI.osx mode change 100644 => 100755 tools/ark.osx mode change 100644 => 100755 tools/ase2ini.osx mode change 100644 => 100755 tools/ass2iqe.osx mode change 100644 => 100755 tools/cook.osx mode change 100644 => 100755 tools/cuttlefish.osx mode change 100644 => 100755 tools/ffmpeg.osx mode change 100644 => 100755 tools/furnace.osx mode change 100644 => 100755 tools/iqe2iqm.osx mode change 100644 => 100755 tools/mid2wav.osx mode change 100644 => 100755 tools/mod2wav.osx mode change 100644 => 100755 tools/ninja.osx mode change 100644 => 100755 tools/premake5.osx mode change 100644 => 100755 tools/sfxr2wav.osx mode change 100644 => 100755 tools/xlsx2ini.osx diff --git a/MAKE.sh b/MAKE.sh old mode 100644 new mode 100755 diff --git a/depot b/depot index 6b182ff..481ec5e 160000 --- a/depot +++ b/depot @@ -1 +1 @@ -Subproject commit 6b182ffce14d3a4bec907943082d1fbed0625af5 +Subproject commit 481ec5e44bebdc38042e1dee2dbe134014016b14 diff --git a/tools/PVRTexToolCLI.osx b/tools/PVRTexToolCLI.osx old mode 100644 new mode 100755 diff --git a/tools/ark.osx b/tools/ark.osx old mode 100644 new mode 100755 diff --git a/tools/ase2ini.osx b/tools/ase2ini.osx old mode 100644 new mode 100755 diff --git a/tools/ass2iqe.osx b/tools/ass2iqe.osx old mode 100644 new mode 100755 diff --git a/tools/cook.osx b/tools/cook.osx old mode 100644 new mode 100755 diff --git a/tools/cuttlefish.osx b/tools/cuttlefish.osx old mode 100644 new mode 100755 diff --git a/tools/ffmpeg.osx b/tools/ffmpeg.osx old mode 100644 new mode 100755 diff --git a/tools/furnace.osx b/tools/furnace.osx old mode 100644 new mode 100755 diff --git a/tools/iqe2iqm.osx b/tools/iqe2iqm.osx old mode 100644 new mode 100755 diff --git a/tools/mid2wav.osx b/tools/mid2wav.osx old mode 100644 new mode 100755 diff --git a/tools/mod2wav.osx b/tools/mod2wav.osx old mode 100644 new mode 100755 diff --git a/tools/ninja.osx b/tools/ninja.osx old mode 100644 new mode 100755 diff --git a/tools/premake5.osx b/tools/premake5.osx old mode 100644 new mode 100755 diff --git a/tools/sfxr2wav.osx b/tools/sfxr2wav.osx old mode 100644 new mode 100755 diff --git a/tools/xlsx2ini.osx b/tools/xlsx2ini.osx old mode 100644 new mode 100755 From 050accbce18c6750cdd738ed512a82675a45cb6b Mon Sep 17 00:00:00 2001 From: Vladyslav Hrytsenko Date: Wed, 31 Jul 2024 22:29:31 +0300 Subject: [PATCH 2/4] added macos fixes --- .../art/skyboxes/skysphere.fbx@animlist.txt | 2 +- engine/split/3rd_luaffi.h | 2 +- engine/split/v4k.x.inl | 1 + engine/v4k | 543 +- engine/v4k.c | 64842 ++++++++-------- engine/v4k.h | 9704 +-- tools/cook.osx | Bin 4752248 -> 10904328 bytes 7 files changed, 37548 insertions(+), 37546 deletions(-) diff --git a/engine/art/skyboxes/skysphere.fbx@animlist.txt b/engine/art/skyboxes/skysphere.fbx@animlist.txt index ba2b040..c187bfd 100644 --- a/engine/art/skyboxes/skysphere.fbx@animlist.txt +++ b/engine/art/skyboxes/skysphere.fbx@animlist.txt @@ -1 +1 @@ -frame: 0-0 Idle +frame: 0-0 Idle diff --git a/engine/split/3rd_luaffi.h b/engine/split/3rd_luaffi.h index d1834f9..5f4afdf 100644 --- a/engine/split/3rd_luaffi.h +++ b/engine/split/3rd_luaffi.h @@ -148,7 +148,7 @@ static char* luaL_prepbuffsize(luaL_Buffer* B, size_t sz) { # define ARCH_X86 #elif defined __amd64__ || defined _M_X64 # define ARCH_X64 -#elif defined __arm__ || defined __ARM__ || defined ARM || defined __ARM || defined __arm +#elif defined __arm__ || defined __ARM__ || defined ARM || defined __ARM || defined __arm || defined __arm64__ # define ARCH_ARM #elif defined OS_LINUX && defined __TINYC__ //< @r-lyeh: tcc+linux # define ARCH_X64 //< @r-lyeh: tcc+linux diff --git a/engine/split/v4k.x.inl b/engine/split/v4k.x.inl index 3d336d6..62a4f75 100644 --- a/engine/split/v4k.x.inl +++ b/engine/split/v4k.x.inl @@ -161,6 +161,7 @@ static char *ui_filter = 0; {{FILE:3rd_plmpeg.h}} {{FILE:3rd_jo_mpeg.h}} //#define _RTL_RUN_ONCE _RTL_RUN_ONCE2 // __MINGW64__ +#undef I {{FILE:3rd_https.h}} #undef F2 #undef F3 diff --git a/engine/v4k b/engine/v4k index 56ad148..04f1d1d 100644 --- a/engine/v4k +++ b/engine/v4k @@ -1,12 +1,12 @@ -/* game framework (3rd libs) -* - rlyeh, public domain -*/ - -#ifdef V4K_3RD -#define GLAD_GL_IMPLEMENTATION // glad -#endif - -#line 1 "3rd_glad.h" +/* game framework (3rd libs) +* - rlyeh, public domain +*/ + +#ifdef V4K_3RD +#define GLAD_GL_IMPLEMENTATION // glad +#endif + +#line 1 "3rd_glad.h" #ifndef __EMSCRIPTEN__ #ifndef _GNU_SOURCE // juicy linux headers @@ -11687,8 +11687,8 @@ int gladLoadGL( GLADloadfunc load) { #endif /* GLAD_GL_IMPLEMENTATION */ #endif /* __EMSCRIPTEN__ */ -#line 0 -#line 1 "3rd_icon_md.h" +#line 0 +#line 1 "3rd_icon_md.h" // Generated by https://github.com/juliettef/IconFontCppHeaders script GenerateIconFontCppHeaders.py for languages C and C++ // from https://github.com/google/material-design-icons/raw/master/font/MaterialIcons-Regular.codepoints // for use with https://github.com/google/material-design-icons/blob/master/font/MaterialIcons-Regular.ttf @@ -13935,104 +13935,104 @@ int gladLoadGL( GLADloadfunc load) { #define ICON_MD_ZOOM_OUT "\xee\xa4\x80" // U+e900 #define ICON_MD_ZOOM_OUT_MAP "\xee\x95\xab" // U+e56b #endif // ICON_MD_H -#line 0 - -#ifdef V4K_3RD - -//----------------------------------------------------------------------------- -// 3rd party libs - -#define ARCHIVE_C // archive.c -#define BASE64_C // base64.c -#define COMPRESS_C // compress.c -#define ENET_IMPLEMENTATION // enet -#define GJK_C // gjk -#define _GLFW_IMPLEMENTATION // glfw337 -#define GLFW_INCLUDE_NONE // glfw337 -#define HTTPS_IMPLEMENTATION // https -#define JO_MPEG_COMPONENTS 3 // jo_mpeg -#define JSON5_C // json5 -#define LUA_IMPL // lua544 -#define LUA_USE_POPEN 1 // for lite editor -#define MINIAUDIO_IMPLEMENTATION // miniaudio -#define MA_NO_FLAC // miniaudio -#define NK_GLFW_GL3_IMPLEMENTATION // nuklear -#define NK_IMPLEMENTATION // nuklear -#define NK_INCLUDE_DEFAULT_ALLOCATOR // nuklear -#define NK_INCLUDE_DEFAULT_FONT // nuklear -#define NK_INCLUDE_FIXED_TYPES // nuklear -#define NK_INCLUDE_FONT_BAKING // nuklear -#define NK_INCLUDE_STANDARD_IO // nuklear -#define NK_INCLUDE_STANDARD_VARARGS // nuklear -#define NK_INCLUDE_VERTEX_BUFFER_OUTPUT // nuklear -#define NK_MAX_LAYOUT_ROW_TEMPLATE_COLUMNS 64 // nuklear -#define NK_KEYSTATE_BASED_INPUT // nuklear -#define PL_MPEG_IMPLEMENTATION // pl_mpeg -#define STB_IMAGE_IMPLEMENTATION // stbi -#define STB_IMAGE_WRITE_IMPLEMENTATION // stbi_write -#define STB_SPRINTF_IMPLEMENTATION // stb_sprintf -#define STB_SPRINTF_NOUNALIGNED // stb_sprintf -#define STS_MIXER_IMPLEMENTATION // sts_mixer -#define SIMPLEX_C // simplex -#define SWRAP_IMPLEMENTATION // swrap -#define SWRAP_STATIC // swrap -#define THREAD_IMPLEMENTATION // thread -#define TFD_IMPLEMENTATION // tinyfiledialogs -#define BQ_PLATFORM_IMPLEMENTATION // websocket -#define BQ_WEBSOCKET_IMPLEMENTATION // websocket -#define XML_C // xml -#ifdef __APPLE__ -#define MA_NO_RUNTIME_LINKING // miniaudio osx -#define _GLFW_COCOA // glfw osx -#elif defined _WIN32 -#define _GLFW_WIN32 // glfw win32 -#else -#define _GLFW_X11 // glfw linux, also _GLFW_OSMESA or _GLFW_WAYLAND -#endif - -#if defined __TINYC__ && defined _WIN32 -#define MAPVK_VSC_TO_VK 1 -#define MAPVK_VK_TO_VSC 0 -#define IPV6_V6ONLY 27 -#define _WIN32_WINNT_VISTA 0 -#define _WIN32_WINNT_WINXP 0 -#define _WIN32_WINNT_WIN7 0 -#endif -#ifdef __TINYC__ -#define STBI_NO_SIMD -// no uint128_t (3rd_https.h) -char* strtok_s( - char* str, - const char* delimiters, - char** context -); -#endif - -#if defined __clang__ && defined _WIN32 -int execv(const char *path, char *const argv[]); -#elif (is(tcc) /*|| defined __clang__*/) && defined _WIN32 -int execv(const char *path, char *const argv[]); -errno_t strerror_s( - char *buffer, - size_t sizeInBytes, - int errnum -); -typedef int socklen_t; -#if is(tcc) -#define restrict -const char *inet_ntop(int af, const void *restrict src, - char *restrict dst, socklen_t size); -int inet_pton(int af, const char *restrict src, void *restrict dst); -#endif -errno_t fopen_s( - FILE** pFile, - const char *filename, - const char *mode -); -#endif - -//--- -#line 1 "3rd_glfw3.h" +#line 0 + +#ifdef V4K_3RD + +//----------------------------------------------------------------------------- +// 3rd party libs + +#define ARCHIVE_C // archive.c +#define BASE64_C // base64.c +#define COMPRESS_C // compress.c +#define ENET_IMPLEMENTATION // enet +#define GJK_C // gjk +#define _GLFW_IMPLEMENTATION // glfw337 +#define GLFW_INCLUDE_NONE // glfw337 +#define HTTPS_IMPLEMENTATION // https +#define JO_MPEG_COMPONENTS 3 // jo_mpeg +#define JSON5_C // json5 +#define LUA_IMPL // lua544 +#define LUA_USE_POPEN 1 // for lite editor +#define MINIAUDIO_IMPLEMENTATION // miniaudio +#define MA_NO_FLAC // miniaudio +#define NK_GLFW_GL3_IMPLEMENTATION // nuklear +#define NK_IMPLEMENTATION // nuklear +#define NK_INCLUDE_DEFAULT_ALLOCATOR // nuklear +#define NK_INCLUDE_DEFAULT_FONT // nuklear +#define NK_INCLUDE_FIXED_TYPES // nuklear +#define NK_INCLUDE_FONT_BAKING // nuklear +#define NK_INCLUDE_STANDARD_IO // nuklear +#define NK_INCLUDE_STANDARD_VARARGS // nuklear +#define NK_INCLUDE_VERTEX_BUFFER_OUTPUT // nuklear +#define NK_MAX_LAYOUT_ROW_TEMPLATE_COLUMNS 64 // nuklear +#define NK_KEYSTATE_BASED_INPUT // nuklear +#define PL_MPEG_IMPLEMENTATION // pl_mpeg +#define STB_IMAGE_IMPLEMENTATION // stbi +#define STB_IMAGE_WRITE_IMPLEMENTATION // stbi_write +#define STB_SPRINTF_IMPLEMENTATION // stb_sprintf +#define STB_SPRINTF_NOUNALIGNED // stb_sprintf +#define STS_MIXER_IMPLEMENTATION // sts_mixer +#define SIMPLEX_C // simplex +#define SWRAP_IMPLEMENTATION // swrap +#define SWRAP_STATIC // swrap +#define THREAD_IMPLEMENTATION // thread +#define TFD_IMPLEMENTATION // tinyfiledialogs +#define BQ_PLATFORM_IMPLEMENTATION // websocket +#define BQ_WEBSOCKET_IMPLEMENTATION // websocket +#define XML_C // xml +#ifdef __APPLE__ +#define MA_NO_RUNTIME_LINKING // miniaudio osx +#define _GLFW_COCOA // glfw osx +#elif defined _WIN32 +#define _GLFW_WIN32 // glfw win32 +#else +#define _GLFW_X11 // glfw linux, also _GLFW_OSMESA or _GLFW_WAYLAND +#endif + +#if defined __TINYC__ && defined _WIN32 +#define MAPVK_VSC_TO_VK 1 +#define MAPVK_VK_TO_VSC 0 +#define IPV6_V6ONLY 27 +#define _WIN32_WINNT_VISTA 0 +#define _WIN32_WINNT_WINXP 0 +#define _WIN32_WINNT_WIN7 0 +#endif +#ifdef __TINYC__ +#define STBI_NO_SIMD +// no uint128_t (3rd_https.h) +char* strtok_s( + char* str, + const char* delimiters, + char** context +); +#endif + +#if defined __clang__ && defined _WIN32 +int execv(const char *path, char *const argv[]); +#elif (is(tcc) /*|| defined __clang__*/) && defined _WIN32 +int execv(const char *path, char *const argv[]); +errno_t strerror_s( + char *buffer, + size_t sizeInBytes, + int errnum +); +typedef int socklen_t; +#if is(tcc) +#define restrict +const char *inet_ntop(int af, const void *restrict src, + char *restrict dst, socklen_t size); +int inet_pton(int af, const char *restrict src, void *restrict dst); +#endif +errno_t fopen_s( + FILE** pFile, + const char *filename, + const char *mode +); +#endif + +//--- +#line 1 "3rd_glfw3.h" #ifndef __EMSCRIPTEN__ // forked from https://github.com/SasLuca/glfw-single-header (CC0-1.0 licensed) @@ -53227,10 +53227,10 @@ uint32_t _glfwKeySym2Unicode(unsigned int keysym) #endif #endif /* __EMSCRIPTEN__ */ -#line 0 -#undef timeGetTime -//--- -#line 1 "3rd_swrap.h" +#line 0 +#undef timeGetTime +//--- +#line 1 "3rd_swrap.h" // https://github.com/BareRose/swrap/blob/master/swrap.h /* @@ -53521,9 +53521,9 @@ SWDEF int swrapMultiSelect (int* socks, size_t socks_size, double timeout) { #endif //SWRAP_IMPLEMENTATION #endif //SWRAP_H -#line 0 -//--- -#line 1 "3rd_jo_mp1.h" +#line 0 +//--- +#line 1 "3rd_jo_mp1.h" /* public domain Simple, Minimalistic MPEG Layer 1 decoder - http://jonolick.com * * Revision History: @@ -53931,10 +53931,10 @@ bool jo_read_mp1(const void *input, int inputSize, short **output_, int *outputS #endif // JO_MP1_HEADER_FILE_ONLY -#line 0 -#define get_bits stb_vorbis_get_bits -#define error stb_vorbis_error -#line 1 "3rd_stb_vorbis.h" +#line 0 +#define get_bits stb_vorbis_get_bits +#define error stb_vorbis_error +#line 1 "3rd_stb_vorbis.h" // Ogg Vorbis audio decoder - v1.22 - public domain // http://nothings.org/stb_vorbis/ // @@ -59519,10 +59519,10 @@ ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ------------------------------------------------------------------------------ */ -#line 0 -#undef error -#undef DEBUG -#line 1 "3rd_sts_mixer.h" +#line 0 +#undef error +#undef DEBUG +#line 1 "3rd_sts_mixer.h" /////////////////////////////////////////////////////////////////////////////// // sts_mixer.h - v0.02 // written 2016 by Sebastian Steinhauer @@ -60058,8 +60058,8 @@ int main(int argc, char *argv[]) { For more information, please refer to */ -#line 0 -#line 1 "3rd_miniaudio.h" +#line 0 +#line 1 "3rd_miniaudio.h" /* Audio playback and capture library. Choice of public domain or MIT-0. See license statements at the end of this file. miniaudio - v0.11.18 - 2023-08-07 @@ -152597,14 +152597,14 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -#line 0 -//--- -#undef L -#undef C -#undef R -#define error l_error -#define panic l_panic -#line 1 "3rd_lua.h" +#line 0 +//--- +#undef L +#undef C +#undef R +#define error l_error +#define panic l_panic +#line 1 "3rd_lua.h" /* minilua.h -- Lua in a single header Project URL: https://github.com/edubart/minilua @@ -181845,12 +181845,12 @@ int main (int argc, char **argv) { OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -#line 0 -#undef cast -#undef G -//--- -#define LUAFFI_C -#line 1 "3rd_luaffi.h" +#line 0 +#undef cast +#undef G +//--- +#define LUAFFI_C +#line 1 "3rd_luaffi.h" #ifndef LUAFFI_H #define LUAFFI_H @@ -182001,7 +182001,7 @@ static char* luaL_prepbuffsize(luaL_Buffer* B, size_t sz) { # define ARCH_X86 #elif defined __amd64__ || defined _M_X64 # define ARCH_X64 -#elif defined __arm__ || defined __ARM__ || defined ARM || defined __ARM || defined __arm +#elif defined __arm__ || defined __ARM__ || defined ARM || defined __ARM || defined __arm || defined __arm64__ # define ARCH_ARM #elif defined OS_LINUX && defined __TINYC__ //< @r-lyeh: tcc+linux # define ARCH_X64 //< @r-lyeh: tcc+linux @@ -194367,9 +194367,9 @@ int luaopen_ffi(lua_State* L) #endif -#line 0 -//--- -#line 1 "3rd_stb_image.h" +#line 0 +//--- +#line 1 "3rd_stb_image.h" /* stb_image - v2.28 - public domain image loader - http://nothings.org/stb no warranty implied; use at your own risk @@ -202357,8 +202357,8 @@ ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ------------------------------------------------------------------------------ */ -#line 0 -#line 1 "3rd_stb_image_write.h" +#line 0 +#line 1 "3rd_stb_image_write.h" /* stb_image_write - v1.16 - public domain - http://nothings.org/stb writes out PNG/BMP/TGA/JPEG/HDR images to C stdio - Sean Barrett 2010-2015 no warranty implied; use at your own risk @@ -204083,14 +204083,14 @@ ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ------------------------------------------------------------------------------ */ -#line 0 -//--- -#undef freelist -#define STBTT_malloc(x,u) ((void)(u),MALLOC(x)) -#define STBTT_free(x,u) ((void)(u),FREE(x)) -#define NK_ASSERT ASSERT -#define NK_DTOA(s,n) strcpy(s, va("%f", n)) // override cos built-in nk_dtoa() will freeze while parsing UINT_MAX otherwise -#line 1 "3rd_nuklear.h" +#line 0 +//--- +#undef freelist +#define STBTT_malloc(x,u) ((void)(u),MALLOC(x)) +#define STBTT_free(x,u) ((void)(u),FREE(x)) +#define NK_ASSERT ASSERT +#define NK_DTOA(s,n) strcpy(s, va("%f", n)) // override cos built-in nk_dtoa() will freeze while parsing UINT_MAX otherwise +#line 1 "3rd_nuklear.h" /* /// # Nuklear /// ![](https://cloud.githubusercontent.com/assets/8057201/11761525/ae06f0ca-a0c6-11e5-819d-5610b25f6ef4.gif) @@ -234461,8 +234461,8 @@ nk_tooltipfv(struct nk_context *ctx, const char *fmt, va_list args) /// in libraries and brought me to create some of my own. Finally Apoorva Joshi /// for his single header file packer. */ -#line 0 -#line 1 "3rd_nuklear_glfw_gl3.h" +#line 0 +#line 1 "3rd_nuklear_glfw_gl3.h" /* * Nuklear - 1.32.0 - public domain @@ -235015,9 +235015,9 @@ void nk_glfw3_shutdown(struct nk_glfw* glfw) #endif #endif -#line 0 -static char *ui_filter = 0; -#line 1 "3rd_nuklear_filebrowser.h" +#line 0 +static char *ui_filter = 0; +#line 1 "3rd_nuklear_filebrowser.h" // file browser for nuklear, based on https://github.com/vurtun/nuklear/blob/master/example/file_browser.c (public domain) // - rlyeh, public domain // @@ -235501,16 +235501,16 @@ static struct nk_image icon_load_rect(unsigned id, unsigned w, unsigned h, unsig } nk_end(); */ -#line 0 -//--- -#ifdef ENABLE_ASSIMP -//{{FILE/*:*/3rd_assimp.h}} -//#include "3rd_assimp/cimport.h" -//#include "3rd_assimp/scene.h" -//#include "3rd_assimp/postprocess.h" -//#pragma comment(lib, "3rd/3rd_assimp/x64/assimp") -#endif -#line 1 "3rd_json5.h" +#line 0 +//--- +#ifdef ENABLE_ASSIMP +//{{FILE/*:*/3rd_assimp.h}} +//#include "3rd_assimp/cimport.h" +//#include "3rd_assimp/scene.h" +//#include "3rd_assimp/postprocess.h" +//#pragma comment(lib, "3rd/3rd_assimp/x64/assimp") +#endif +#line 1 "3rd_json5.h" // JSON5 + SJSON parser module // // License: @@ -235951,8 +235951,8 @@ int main() { #endif #endif // JSON5_C -#line 0 -#line 1 "3rd_gjk.h" +#line 0 +#line 1 "3rd_gjk.h" // GJK distance algorithm. original code by @vurtun and @randygaul, public domain. // [src] https://gist.github.com/vurtun/29727217c269a2fbf4c0ed9a1d11cb40 // - rlyeh, public domain. @@ -236560,8 +236560,8 @@ gjk_result gjk_quad(float a_radius, float b_radius) { } #endif -#line 0 -#line 1 "3rd_compress.h" +#line 0 +#line 1 "3rd_compress.h" // compress.c de/compressors into a single-file header // - rlyeh, public domain // @@ -247401,8 +247401,8 @@ unsigned file_decode(FILE* in, FILE* out, FILE *logfile) { // multi decoder } #endif // COMPRESS_C -#line 0 -#line 1 "3rd_archive.h" +#line 0 +#line 1 "3rd_archive.h" // archive.c pak/zip/tar/dir archivers // - rlyeh, public domain @@ -249027,11 +249027,11 @@ int main( int argc, char **argv ) { #define main main__ #endif //DIR_DEMO #endif //DIR_C -#line 0 -#if is(win32) -#include // timeapi.h -#endif -#line 1 "3rd_thread.h" +#line 0 +#if is(win32) +#include // timeapi.h +#endif +#line 1 "3rd_thread.h" /* ------------------------------------------------------------------------------ Licensing information can be found at the end of the file. @@ -250760,8 +250760,8 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ------------------------------------------------------------------------------ */ -#line 0 -#line 1 "3rd_plmpeg.h" +#line 0 +#line 1 "3rd_plmpeg.h" /* PL_MPEG - MPEG1 Video decoder, MP2 Audio decoder, MPEG-PS demuxer @@ -255026,8 +255026,8 @@ void plm_audio_matrix_transform(int s[32][3], int ss, float *d, int dp) { #endif // PL_MPEG_IMPLEMENTATION -#line 0 -#line 1 "3rd_jo_mpeg.h" +#line 0 +#line 1 "3rd_jo_mpeg.h" /* public domain Simple, Minimalistic, No Allocations MPEG writer - http://jonolick.com * * Latest revisions: @@ -255292,9 +255292,10 @@ void jo_write_mpeg(FILE *fp, const unsigned char *bgrx, int width, int height, i fwrite("\x00\x00\x01\xb7", 4, 1, fp); // End of Sequence } #endif -#line 0 -//#define _RTL_RUN_ONCE _RTL_RUN_ONCE2 // __MINGW64__ -#line 1 "3rd_https.h" +#line 0 +//#define _RTL_RUN_ONCE _RTL_RUN_ONCE2 // __MINGW64__ +#undef I +#line 1 "3rd_https.h" /* ------------------------------------------------------------------------------ Licensing information can be found at the end of the file. @@ -302274,10 +302275,10 @@ int main() { https_release(h); } #endif -#line 0 -#undef F2 -#undef F3 -#line 1 "3rd_enet.h" +#line 0 +#undef F2 +#undef F3 +#line 1 "3rd_enet.h" /** * include/enet.h - a Single-Header auto-generated variant of enet.h library. * @@ -308388,9 +308389,9 @@ extern "C" { #endif // ENET_IMPLEMENTATION #endif // ENET_INCLUDE_H -#line 0 -#define tls_init tls_init2 -#line 1 "3rd_bq_websocket.h" +#line 0 +#define tls_init tls_init2 +#line 1 "3rd_bq_websocket.h" /* ------------------------------------------------------------------------------ This software is available under 2 licenses -- choose whichever you prefer. @@ -314752,8 +314753,8 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #endif // BQ_PLATFORM_IMPLEMENTATION -#line 0 -#line 1 "3rd_simplex.h" +#line 0 +#line 1 "3rd_simplex.h" /** 1D, 2D, 3D and 4D float Perlin Simplex noise */ /** Original code, stefan gustavson (PD). */ @@ -315235,8 +315236,8 @@ float snoise4(float x, float y, float z, float w) { #undef G4 #endif -#line 0 -#line 1 "3rd_tfd.h" +#line 0 +#line 1 "3rd_tfd.h" /* If you are using a C++ compiler to compile tinyfiledialogs.c (maybe renamed with an extension ".cpp") then comment out << extern "C" >> bellow in this header file) */ @@ -323295,8 +323296,8 @@ tinyfd_messageBox("The selected hexcolor is", #endif #endif // TFD_IMPLEMENTATION -#line 0 -#line 1 "3rd_stb_sprintf.h" +#line 0 +#line 1 "3rd_stb_sprintf.h" // stb_sprintf - v1.10 - public domain snprintf() implementation // originally by Jeff Roberts / RAD Game Tools, 2015/10/20 // http://github.com/nothings/stb @@ -325203,9 +325204,9 @@ ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ------------------------------------------------------------------------------ */ -#line 0 -#define g g2 -#line 1 "3rd_xml.h" +#line 0 +#define g g2 +#line 1 "3rd_xml.h" // original xml.h/xml.c files by tor andersson, public domain #ifndef xml_h @@ -325734,9 +325735,9 @@ struct xml *xml_parse(char *s, int preserve_white, char **errorp) } #endif -#line 0 -#undef g -#line 1 "3rd_polychop.h" +#line 0 +#undef g +#line 1 "3rd_polychop.h" /* Progressive Mesh type Polygon Reduction Algorithm * * 1998: Original version by Stan Melax (c) 1998 @@ -326146,18 +326147,18 @@ API void ProgressiveMesh(int vert_n, int vert_stride, const float *v, int tri_n, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -#line 0 -#define expr expr2 // 3rd_lua.h -#define EVAL_EXTEND_CONSTANTS \ - for( int vk = input_enum(id), *once = &vk; once; once = 0) \ - if( vk >= 0 ) push(ev, vk); -#define EVAL_EXTEND_FUNCTIONS \ - /**/ if(!strcmp(id, "input") && nargs ==1) push(ev, input(pop(ev))); \ - else if(!strcmp(id, "down") && nargs ==1) push(ev, input_down(pop(ev))); \ - else if(!strcmp(id, "held") && nargs ==1) push(ev, input_held(pop(ev))); \ - else if(!strcmp(id, "up") && nargs ==1) push(ev, input_up(pop(ev))); \ - else if(!strcmp(id, "idle") && nargs ==1) push(ev, input_idle(pop(ev))); -#line 1 "3rd_eval.h" +#line 0 +#define expr expr2 // 3rd_lua.h +#define EVAL_EXTEND_CONSTANTS \ + for( int vk = input_enum(id), *once = &vk; once; once = 0) \ + if( vk >= 0 ) push(ev, vk); +#define EVAL_EXTEND_FUNCTIONS \ + /**/ if(!strcmp(id, "input") && nargs ==1) push(ev, input(pop(ev))); \ + else if(!strcmp(id, "down") && nargs ==1) push(ev, input_down(pop(ev))); \ + else if(!strcmp(id, "held") && nargs ==1) push(ev, input_held(pop(ev))); \ + else if(!strcmp(id, "up") && nargs ==1) push(ev, input_up(pop(ev))); \ + else if(!strcmp(id, "idle") && nargs ==1) push(ev, input_idle(pop(ev))); +#line 1 "3rd_eval.h" /* A mathematical expression evaluator. * It uses a recursive descent parser internally. * Author: Werner Stoop @@ -326666,8 +326667,8 @@ int main() { assert(~puts("Ok") ); } #endif -#line 0 -#line 1 "3rd_luadebugger.h" +#line 0 +#line 1 "3rd_luadebugger.h" /* Copyright (c) 2023 Scott Lembcke and Howling Moon Software @@ -328146,8 +328147,8 @@ int dbg_pcall(lua_State *lua, int nargs, int nresults, int msgh){ return err; } -#line 0 -#line 1 "3rd_base64.h" +#line 0 +#line 1 "3rd_base64.h" // base64 de/encoder. Based on code by Jon Mayo - November 13, 2003 (PUBLIC DOMAIN). // - rlyeh, public domain @@ -328288,10 +328289,10 @@ array(char) base64_decode(const char *inp, unsigned inlen) { // array_free() aft } #endif // array_resize #endif // BASE64_C -#line 0 - -#if ENABLE_RPMALLOC -#line 1 "3rd_rpmalloc.h" +#line 0 + +#if ENABLE_RPMALLOC +#line 1 "3rd_rpmalloc.h" /* rpmalloc.h - Memory allocator - Public Domain - 2016 Mattias Jansson * * This library provides a cross-platform lock free thread caching malloc implementation in C11. @@ -328665,8 +328666,8 @@ rpmalloc_get_heap_for_ptr(void* ptr); #ifdef __cplusplus } #endif -#line 0 -#line 1 "3rd_rpmalloc.c" +#line 0 +#line 1 "3rd_rpmalloc.c" /* rpmalloc.c - Memory allocator - Public Domain - 2016-2020 Mattias Jansson * * This library provides a cross-platform lock free thread caching malloc implementation in C11. @@ -332296,29 +332297,29 @@ void rpmalloc_linker_reference(void) { (void)sizeof(_rpmalloc_initialized); } -#line 0 -//{{FILE: 3rd_rpmalloci.c}} -#define SYS_MEM_INIT() rpmalloc_initialize() -#define SYS_MEM_REALLOC rprealloc -#define SYS_MEM_SIZE rpmalloc_usable_size -#endif - -//#define SQLITE_OMIT_LOAD_EXTENSION -//#define SQLITE_CORE 1 -//#define SQLITE_DEBUG 1 -//#define Token SQToken -//#define Table SQTable -//#define rehash sqlite3__rehash -//#undef NB -//{ {FILE:3rd_sqlite3.c}} -//#undef Token -//#undef Table -//#undef rehash -//#undef NB -//#undef threadid - -// editor -#line 1 "3rd_icon_mdi.h" +#line 0 +//{{FILE: 3rd_rpmalloci.c}} +#define SYS_MEM_INIT() rpmalloc_initialize() +#define SYS_MEM_REALLOC rprealloc +#define SYS_MEM_SIZE rpmalloc_usable_size +#endif + +//#define SQLITE_OMIT_LOAD_EXTENSION +//#define SQLITE_CORE 1 +//#define SQLITE_DEBUG 1 +//#define Token SQToken +//#define Table SQTable +//#define rehash sqlite3__rehash +//#undef NB +//{ {FILE:3rd_sqlite3.c}} +//#undef Token +//#undef Table +//#undef rehash +//#undef NB +//#undef threadid + +// editor +#line 1 "3rd_icon_mdi.h" // Generated by https://github.com/juliettef/IconFontCppHeaders script GenerateIconFontCppHeaders.py for languages C and C++ // from https://raw.githubusercontent.com/Templarian/MaterialDesign-Webfont/master/css/materialdesignicons.css // for use with https://github.com/Templarian/MaterialDesign-Webfont/raw/master/fonts/materialdesignicons-webfont.ttf @@ -339697,11 +339698,11 @@ rpmalloc_linker_reference(void) { #define ICON_MDI_ZODIAC_TAURUS "\xf3\xb0\xaa\x87" // U+F0A87 #define ICON_MDI_ZODIAC_VIRGO "\xf3\xb0\xaa\x88" // U+F0A88 #define ICON_MDI_BLANK "\xef\x9a\x8c" // U+F68C -#line 0 -// editor_script -#define GLEQ_IMPLEMENTATION -#define GlyphSet GlyphSet_ // linux -#line 1 "3rd_lite_sys_gleq.h" +#line 0 +// editor_script +#define GLEQ_IMPLEMENTATION +#define GlyphSet GlyphSet_ // linux +#line 1 "3rd_lite_sys_gleq.h" /* * GLEQ - A basic event queue for GLFW 3 * Copyright © Camilla Löwy @@ -340126,8 +340127,8 @@ GLEQDEF void gleqFreeEvent(GLEQevent* event) #endif /* GLEQ_IMPLEMENTATION */ #endif /* GLEQ_HEADER_FILE */ -#line 0 -#line 1 "3rd_lite_sys.h" +#line 0 +#line 1 "3rd_lite_sys.h" // lite editor, platform details // - rlyeh, public domain @@ -340403,8 +340404,8 @@ bottom:; return rc; } -#line 0 -#line 1 "3rd_lite.h" +#line 0 +#line 1 "3rd_lite.h" // Copyright (c) 2020 rxi // // Permission is hereby granted, free of charge, to any person obtaining a copy of @@ -341558,11 +341559,11 @@ void lt_tick(struct lua_State *L) { "end)" ); } -#line 0 - -#define LIGHTMAPPER_IMPLEMENTATION -//#define LM_DEBUG_INTERPOLATION -#line 1 "3rd_lightmapper.h" +#line 0 + +#define LIGHTMAPPER_IMPLEMENTATION +//#define LM_DEBUG_INTERPOLATION +#line 1 "3rd_lightmapper.h" /*********************************************************** * A single header file OpenGL lightmapping library * * https://github.com/ands/lightmapper * @@ -343344,9 +343345,9 @@ lm_bool lmImageSaveTGAf(const char *filename, const float *image, int w, int h, } #endif // LIGHTMAPPER_IMPLEMENTATION -#line 0 - -#line 1 "3rd_sdk_steam.h" +#line 0 + +#line 1 "3rd_sdk_steam.h" /***************************************************************/ /* */ /* Only after agreeing to Valves non-disclosure and/or license */ @@ -346462,6 +346463,6 @@ X(void*,SteamInternal_CreateInterface,(const char *ver)) \ X(bool,SteamAPI_IsSteamRunning,()) \ X(bool,SteamAPI_InitSafe,()) \ X(void,SteamAPI_RunCallbacks,()) -#line 0 - -#endif // V4K_3RD +#line 0 + +#endif // V4K_3RD diff --git a/engine/v4k.c b/engine/v4k.c index 277665a..728c815 100644 --- a/engine/v4k.c +++ b/engine/v4k.c @@ -102,32547 +102,32547 @@ // C files #line 1 "v4k_begin.c" -#define do_threadlock(mutexptr) \ - for( int init_ = !!(mutexptr) || (thread_mutex_init( (mutexptr) = CALLOC(1, sizeof(thread_mutex_t)) ), 1); init_; init_ = 0) \ - for( int lock_ = (thread_mutex_lock( mutexptr ), 1); lock_; lock_ = (thread_mutex_unlock( mutexptr ), 0) ) - -#define AS_NKCOLOR(color) \ - ((struct nk_color){ ((color>>0))&255,((color>>8))&255,((color>>16))&255,((color>>24))&255 }) +#define do_threadlock(mutexptr) \ + for( int init_ = !!(mutexptr) || (thread_mutex_init( (mutexptr) = CALLOC(1, sizeof(thread_mutex_t)) ), 1); init_; init_ = 0) \ + for( int lock_ = (thread_mutex_lock( mutexptr ), 1); lock_; lock_ = (thread_mutex_unlock( mutexptr ), 0) ) + +#define AS_NKCOLOR(color) \ + ((struct nk_color){ ((color>>0))&255,((color>>8))&255,((color>>16))&255,((color>>24))&255 }) #line 0 #line 1 "v4k_ds.c" - -// ----------------------------------------------------------------------------- -// sort/less - -int less_64_ptr(const void *a, const void *b) { - return 0[(uint64_t*)a] - 0[(uint64_t*)b]; -} -int less_int_ptr(const void *a, const void *b) { - return 0[(int*)a] - 0[(int*)b]; -} - -int less_int(int a, int b) { - return a - b; -} -int less_64(uint64_t a, uint64_t b) { - return a > b ? +1 : -!!(a - b); -} -int less_ptr(void *a, void *b) { - return (uintptr_t)a > (uintptr_t)b ? +1 : -!!((uintptr_t)a - (uintptr_t)b); -} -int less_str(char *a, char *b) { - return strcmp((const char *)a, (const char *)b); -} - -// ----------------------------------------------------------------------------- -// un/hash - -uint32_t unhash_32(uint32_t x) { - // Thomas Mueller at https://stackoverflow.com/questions/664014/ - says no collisions for 32bits! - x = ((x >> 16) ^ x) * 0x119de1f3; - x = ((x >> 16) ^ x) * 0x119de1f3; - x = (x >> 16) ^ x; - return x; -} -uint32_t hash_32(uint32_t x) { - // Thomas Mueller at https://stackoverflow.com/questions/664014/ - says no collisions for 32bits! - x = ((x >> 16) ^ x) * 0x45d9f3b; - x = ((x >> 16) ^ x) * 0x45d9f3b; - x = (x >> 16) ^ x; - return x; -} -uint64_t hash_64(uint64_t x) { -#if 1 - x = (x ^ (x >> 30)) * UINT64_C(0xbf58476d1ce4e5b9); - x = (x ^ (x >> 27)) * UINT64_C(0x94d049bb133111eb); - x = x ^ (x >> 31); - return x; -#else - // should we just use x2 hash_32? - uint32_t hi = (x >> 32ull), lo = (x & ~0u); - return (hash_32(hi) << 32ull) | hash_32(lo); -#endif -} -uint64_t hash_flt(double x) { - union { double d; uint64_t i; } c; - return c.d = x, hash_64(c.i); -} -uint64_t hash_str(const char* str) { - uint64_t hash = 14695981039346656037ULL; // hash(0),mul(131) faster than fnv1a, a few more collisions though - while( *str ) hash = ( (unsigned char)*str++ ^ hash ) * 0x100000001b3ULL; - return hash; -} -uint64_t hash_bin(const void* ptr, unsigned len) { - uint64_t hash = 14695981039346656037ULL; // hash(0),mul(131) faster than fnv1a, a few more collisions though - for( unsigned char *str = (unsigned char *)ptr; len--; ) - hash = ( (unsigned char)*str++ ^ hash ) * 0x100000001b3ULL; - return hash; -} -uint64_t hash_int(int key) { - return hash_32((uint32_t)key); -} -uint64_t hash_ptr(const void *ptr) { - uint64_t key = (uint64_t)(uintptr_t)ptr; - return hash_64(key); // >> 3? needed? -} - -// ----------------------------------------------------------------------------- -// utils - -uint64_t popcnt64(uint64_t x) { - // [src] https://en.wikipedia.org/wiki/Hamming_weight - x -= (x >> 1) & 0x5555555555555555ULL; //put count of each 2 bits into those 2 bits - x = (x & 0x3333333333333333ULL) + ((x >> 2) & 0x3333333333333333ULL); //put count of each 4 bits into those 4 bits - x = (x + (x >> 4)) & 0x0f0f0f0f0f0f0f0fULL; //put count of each 8 bits into those 8 bits - return (x * 0x0101010101010101ULL) >> 56; //returns left 8 bits of x + (x<<8) + (x<<16) + (x<<24) + ... -} - -// ----------------------------------------------------------------------------- -// vector based allocator (x1.75 enlarge factor) - -void* vrealloc( void* p, size_t sz ) { - if( !sz ) { - if( p ) { - size_t *ret = (size_t*)p - 2; - ret[0] = 0; - ret[1] = 0; - REALLOC( ret, 0 ); - } - return 0; - } else { - size_t *ret; - if( !p ) { - ret = (size_t*)REALLOC( 0, sizeof(size_t) * 2 + sz ); - ret[0] = sz; - ret[1] = 0; - } else { - ret = (size_t*)p - 2; - size_t osz = ret[0]; - size_t ocp = ret[1]; - if( sz <= (osz + ocp) ) { - ret[0] = sz; - ret[1] = ocp - (sz - osz); - } else { - ret = (size_t*)REALLOC( ret, sizeof(size_t) * 2 + sz * 1.75 ); - ret[0] = sz; - ret[1] = (size_t)(sz * 1.75) - sz; - } - } - return &ret[2]; - } -} -size_t vlen( void* p ) { - return p ? 0[ (size_t*)p - 2 ] : 0; -} - -// ----------------------------------------------------------------------------- - -enum { MAP_GC_SLOT = MAP_HASHSIZE }; -typedef int map_is_pow2_assert[ !(MAP_HASHSIZE & (MAP_HASHSIZE - 1)) ? 1:-1]; - -static int map_get_index(uint64_t hkey1) { - return hkey1 & (MAP_HASHSIZE-1); -} - -void (map_init)(map* m) { - map c = {0}; - *m = c; - - array_resize(m->array, (MAP_HASHSIZE+1)); - memset(m->array, 0, (MAP_HASHSIZE+1) * sizeof(m->array[0]) ); // array_resize() just did memset() -} - -void (map_insert)(map* m, pair *p, void *key, void *value, uint64_t keyhash, void *super) { - p->keyhash = keyhash; - p->key = key; - p->value = value; - p->super = super; - - /* Insert onto the beginning of the list */ - int index = map_get_index(p->keyhash); - p->next = m->array[index]; - m->array[index] = p; - m->is_sorted = 0; - - ++m->count; -} - -void* (map_find)(map* m, void *key, uint64_t keyhash) { - int index = map_get_index(keyhash); - for( pair *cur = m->array[index]; cur; cur = cur->next ) { - if( cur->keyhash == keyhash ) { - char **c = (char **)cur->key; - char **k = (char **)key; - if( !m->cmp(c[0], k[0]) ) { - return cur->super; - } - } - } - return 0; -} - -void (map_erase)(map* m, void *key, uint64_t keyhash) { - int index = map_get_index(keyhash); - for( pair *prev = 0, *cur = m->array[index]; cur; (prev = cur), (cur = cur->next) ) { - if( cur->keyhash == keyhash ) { - char **c = (char **)cur->key; - char **k = (char **)key; - if( !m->cmp(c[0], k[0]) ) { - if( prev ) prev->next = cur->next; else m->array[index] = cur->next ? cur->next : 0; -#if MAP_DONT_ERASE - /* Insert onto the beginning of the GC list */ - cur->next = m->array[MAP_GC_SLOT]; - m->array[MAP_GC_SLOT] = cur; -#else - REALLOC(cur,0); -#endif - --m->count; - m->is_sorted = 0; - return; - } - } - } -} - -int (map_count)(map* m) { // clean deferred GC_SLOT only - return m->count; - - int counter = 0; - for( int i = 0; i < MAP_HASHSIZE; ++i) { - for( pair *cur = m->array[i]; cur; cur = cur->next ) { - ++counter; - } - } - return counter; -} - -int (map_isempty)(map* m) { // clean deferred GC_SLOT only - return !m->count; -} - -void (map_gc)(map* m) { // clean deferred GC_SLOT only -#if MAP_DONT_ERASE - for( pair *next, *cur = m->array[MAP_GC_SLOT]; cur; cur = next ) { - next = cur->next; - REALLOC(cur,0); - } - m->array[MAP_GC_SLOT] = 0; -#endif -} - -void (map_clear)(map* m) { - for( int i = 0; i <= MAP_HASHSIZE; ++i) { - for( pair *next, *cur = m->array[i]; cur; cur = next ) { - next = cur->next; - REALLOC(cur,0); - } - m->array[i] = 0; - } - m->count = 0; - m->is_sorted = 0; -} - -bool (map_sort)(map* m) { - if( m->is_sorted ) return false; - - array_clear(m->sorted); -// array_reserve(m->sorted, m->count); - - for( int i = 0; i < array_count(m->array); ++i) { - for( pair *cur = m->array[i]; cur; cur = cur->next ) { - array_push(m->sorted, cur); - } - } - -#if 0 - array_sort(m->sorted, m->cmp); -#else - // @fixme: do better than bubble sort below - for( int i = 0; i < array_count(m->sorted) - 1; ++i) - for( int j = i+1; j < array_count(m->sorted); ++j) { - pair *curi = m->sorted[i]; - pair *curj = m->sorted[j]; - char **c = (char **)curi->key; - char **k = (char **)curj->key; - if( m->cmp(c[0], k[0]) > 0 ) { - pair *swap = m->sorted[i]; - m->sorted[i] = m->sorted[j]; - m->sorted[j] = swap; - } - } -#endif - - return m->is_sorted = true; -} - -void (map_free)(map* m) { - (map_clear)(m); - - array_free(m->array); - m->array = 0; - - map c = {0}; - *m = c; -} - -// ----------------------------------------------------------------------------- - -enum { set_GC_SLOT = SET_HASHSIZE }; -typedef int set_is_pow2_assert[ !(SET_HASHSIZE & (SET_HASHSIZE - 1)) ? 1:-1]; - -static int set_get_index(uint64_t hkey1) { - return hkey1 & (SET_HASHSIZE-1); -} - -void (set_init)(set* m) { - set zero = {0}; - *m = zero; - - array_resize(m->array, (SET_HASHSIZE+1)); - memset(m->array, 0, (SET_HASHSIZE+1) * sizeof(m->array[0]) ); // array_resize() just did memset() -} - -void (set_insert)(set* m, set_item *p, void *key, uint64_t keyhash, void *super) { - p->keyhash = keyhash; - p->key = key; - p->super = super; - - /* Insert onto the beginning of the list */ - int index = set_get_index(p->keyhash); - p->next = m->array[index]; - m->array[index] = p; - - ++m->count; -} - -void* (set_find)(const set* m, void *key, uint64_t keyhash) { - int index = set_get_index(keyhash); - for( const set_item *cur = m->array[index]; cur; cur = cur->next ) { - if( cur->keyhash == keyhash ) { - char **c = (char **)cur->key; - char **k = (char **)key; - if( !m->cmp(c[0], k[0]) ) { - return cur->super; - } - } - } - return 0; -} - -void (set_erase)(set* m, void *key, uint64_t keyhash) { - int index = set_get_index(keyhash); - for( set_item *prev = 0, *cur = m->array[index]; cur; (prev = cur), (cur = cur->next) ) { - if( cur->keyhash == keyhash ) { - char **c = (char **)cur->key; - char **k = (char **)key; - if( !m->cmp(c[0], k[0]) ) { - if (prev) prev->next = cur->next; else m->array[index] = cur->next ? cur->next : 0; -#if SET_DONT_ERASE - /* Insert onto the beginning of the GC list */ - cur->next = m->array[set_GC_SLOT]; - m->array[set_GC_SLOT] = cur; -#else - REALLOC(cur,0); -#endif - --m->count; - return; - } - } - } -} - -int (set_count)(const set* m) { // does not include GC_SLOT - return m->count; - - int counter = 0; - for( int i = 0; i < SET_HASHSIZE; ++i) { - for( const set_item *cur = m->array[i]; cur; cur = cur->next ) { - ++counter; - } - } - return counter; -} - -int (set_isempty)(const set *m) { // clean deferred GC_SLOT only - return !m->count; -} - -void (set_gc)(set* m) { // clean deferred GC_SLOT only -#if SET_DONT_ERASE - for( set_item *next, *cur = m->array[set_GC_SLOT]; cur; cur = next ) { - next = cur->next; - REALLOC(cur,0); - } - m->array[set_GC_SLOT] = 0; -#endif -} - -void (set_clear)(set* m) { // include GC_SLOT - for( int i = 0; i <= SET_HASHSIZE; ++i) { - for( set_item *next, *cur = m->array[i]; cur; cur = next ) { - next = cur->next; - REALLOC(cur,0); - } - m->array[i] = 0; - } - m->count = 0; -} - -void (set_free)(set* m) { - (set_clear)(m); - - array_free(m->array); - m->array = 0; - - set zero = {0}; - *m = zero; -} + +// ----------------------------------------------------------------------------- +// sort/less + +int less_64_ptr(const void *a, const void *b) { + return 0[(uint64_t*)a] - 0[(uint64_t*)b]; +} +int less_int_ptr(const void *a, const void *b) { + return 0[(int*)a] - 0[(int*)b]; +} + +int less_int(int a, int b) { + return a - b; +} +int less_64(uint64_t a, uint64_t b) { + return a > b ? +1 : -!!(a - b); +} +int less_ptr(void *a, void *b) { + return (uintptr_t)a > (uintptr_t)b ? +1 : -!!((uintptr_t)a - (uintptr_t)b); +} +int less_str(char *a, char *b) { + return strcmp((const char *)a, (const char *)b); +} + +// ----------------------------------------------------------------------------- +// un/hash + +uint32_t unhash_32(uint32_t x) { + // Thomas Mueller at https://stackoverflow.com/questions/664014/ - says no collisions for 32bits! + x = ((x >> 16) ^ x) * 0x119de1f3; + x = ((x >> 16) ^ x) * 0x119de1f3; + x = (x >> 16) ^ x; + return x; +} +uint32_t hash_32(uint32_t x) { + // Thomas Mueller at https://stackoverflow.com/questions/664014/ - says no collisions for 32bits! + x = ((x >> 16) ^ x) * 0x45d9f3b; + x = ((x >> 16) ^ x) * 0x45d9f3b; + x = (x >> 16) ^ x; + return x; +} +uint64_t hash_64(uint64_t x) { +#if 1 + x = (x ^ (x >> 30)) * UINT64_C(0xbf58476d1ce4e5b9); + x = (x ^ (x >> 27)) * UINT64_C(0x94d049bb133111eb); + x = x ^ (x >> 31); + return x; +#else + // should we just use x2 hash_32? + uint32_t hi = (x >> 32ull), lo = (x & ~0u); + return (hash_32(hi) << 32ull) | hash_32(lo); +#endif +} +uint64_t hash_flt(double x) { + union { double d; uint64_t i; } c; + return c.d = x, hash_64(c.i); +} +uint64_t hash_str(const char* str) { + uint64_t hash = 14695981039346656037ULL; // hash(0),mul(131) faster than fnv1a, a few more collisions though + while( *str ) hash = ( (unsigned char)*str++ ^ hash ) * 0x100000001b3ULL; + return hash; +} +uint64_t hash_bin(const void* ptr, unsigned len) { + uint64_t hash = 14695981039346656037ULL; // hash(0),mul(131) faster than fnv1a, a few more collisions though + for( unsigned char *str = (unsigned char *)ptr; len--; ) + hash = ( (unsigned char)*str++ ^ hash ) * 0x100000001b3ULL; + return hash; +} +uint64_t hash_int(int key) { + return hash_32((uint32_t)key); +} +uint64_t hash_ptr(const void *ptr) { + uint64_t key = (uint64_t)(uintptr_t)ptr; + return hash_64(key); // >> 3? needed? +} + +// ----------------------------------------------------------------------------- +// utils + +uint64_t popcnt64(uint64_t x) { + // [src] https://en.wikipedia.org/wiki/Hamming_weight + x -= (x >> 1) & 0x5555555555555555ULL; //put count of each 2 bits into those 2 bits + x = (x & 0x3333333333333333ULL) + ((x >> 2) & 0x3333333333333333ULL); //put count of each 4 bits into those 4 bits + x = (x + (x >> 4)) & 0x0f0f0f0f0f0f0f0fULL; //put count of each 8 bits into those 8 bits + return (x * 0x0101010101010101ULL) >> 56; //returns left 8 bits of x + (x<<8) + (x<<16) + (x<<24) + ... +} + +// ----------------------------------------------------------------------------- +// vector based allocator (x1.75 enlarge factor) + +void* vrealloc( void* p, size_t sz ) { + if( !sz ) { + if( p ) { + size_t *ret = (size_t*)p - 2; + ret[0] = 0; + ret[1] = 0; + REALLOC( ret, 0 ); + } + return 0; + } else { + size_t *ret; + if( !p ) { + ret = (size_t*)REALLOC( 0, sizeof(size_t) * 2 + sz ); + ret[0] = sz; + ret[1] = 0; + } else { + ret = (size_t*)p - 2; + size_t osz = ret[0]; + size_t ocp = ret[1]; + if( sz <= (osz + ocp) ) { + ret[0] = sz; + ret[1] = ocp - (sz - osz); + } else { + ret = (size_t*)REALLOC( ret, sizeof(size_t) * 2 + sz * 1.75 ); + ret[0] = sz; + ret[1] = (size_t)(sz * 1.75) - sz; + } + } + return &ret[2]; + } +} +size_t vlen( void* p ) { + return p ? 0[ (size_t*)p - 2 ] : 0; +} + +// ----------------------------------------------------------------------------- + +enum { MAP_GC_SLOT = MAP_HASHSIZE }; +typedef int map_is_pow2_assert[ !(MAP_HASHSIZE & (MAP_HASHSIZE - 1)) ? 1:-1]; + +static int map_get_index(uint64_t hkey1) { + return hkey1 & (MAP_HASHSIZE-1); +} + +void (map_init)(map* m) { + map c = {0}; + *m = c; + + array_resize(m->array, (MAP_HASHSIZE+1)); + memset(m->array, 0, (MAP_HASHSIZE+1) * sizeof(m->array[0]) ); // array_resize() just did memset() +} + +void (map_insert)(map* m, pair *p, void *key, void *value, uint64_t keyhash, void *super) { + p->keyhash = keyhash; + p->key = key; + p->value = value; + p->super = super; + + /* Insert onto the beginning of the list */ + int index = map_get_index(p->keyhash); + p->next = m->array[index]; + m->array[index] = p; + m->is_sorted = 0; + + ++m->count; +} + +void* (map_find)(map* m, void *key, uint64_t keyhash) { + int index = map_get_index(keyhash); + for( pair *cur = m->array[index]; cur; cur = cur->next ) { + if( cur->keyhash == keyhash ) { + char **c = (char **)cur->key; + char **k = (char **)key; + if( !m->cmp(c[0], k[0]) ) { + return cur->super; + } + } + } + return 0; +} + +void (map_erase)(map* m, void *key, uint64_t keyhash) { + int index = map_get_index(keyhash); + for( pair *prev = 0, *cur = m->array[index]; cur; (prev = cur), (cur = cur->next) ) { + if( cur->keyhash == keyhash ) { + char **c = (char **)cur->key; + char **k = (char **)key; + if( !m->cmp(c[0], k[0]) ) { + if( prev ) prev->next = cur->next; else m->array[index] = cur->next ? cur->next : 0; +#if MAP_DONT_ERASE + /* Insert onto the beginning of the GC list */ + cur->next = m->array[MAP_GC_SLOT]; + m->array[MAP_GC_SLOT] = cur; +#else + REALLOC(cur,0); +#endif + --m->count; + m->is_sorted = 0; + return; + } + } + } +} + +int (map_count)(map* m) { // clean deferred GC_SLOT only + return m->count; + + int counter = 0; + for( int i = 0; i < MAP_HASHSIZE; ++i) { + for( pair *cur = m->array[i]; cur; cur = cur->next ) { + ++counter; + } + } + return counter; +} + +int (map_isempty)(map* m) { // clean deferred GC_SLOT only + return !m->count; +} + +void (map_gc)(map* m) { // clean deferred GC_SLOT only +#if MAP_DONT_ERASE + for( pair *next, *cur = m->array[MAP_GC_SLOT]; cur; cur = next ) { + next = cur->next; + REALLOC(cur,0); + } + m->array[MAP_GC_SLOT] = 0; +#endif +} + +void (map_clear)(map* m) { + for( int i = 0; i <= MAP_HASHSIZE; ++i) { + for( pair *next, *cur = m->array[i]; cur; cur = next ) { + next = cur->next; + REALLOC(cur,0); + } + m->array[i] = 0; + } + m->count = 0; + m->is_sorted = 0; +} + +bool (map_sort)(map* m) { + if( m->is_sorted ) return false; + + array_clear(m->sorted); +// array_reserve(m->sorted, m->count); + + for( int i = 0; i < array_count(m->array); ++i) { + for( pair *cur = m->array[i]; cur; cur = cur->next ) { + array_push(m->sorted, cur); + } + } + +#if 0 + array_sort(m->sorted, m->cmp); +#else + // @fixme: do better than bubble sort below + for( int i = 0; i < array_count(m->sorted) - 1; ++i) + for( int j = i+1; j < array_count(m->sorted); ++j) { + pair *curi = m->sorted[i]; + pair *curj = m->sorted[j]; + char **c = (char **)curi->key; + char **k = (char **)curj->key; + if( m->cmp(c[0], k[0]) > 0 ) { + pair *swap = m->sorted[i]; + m->sorted[i] = m->sorted[j]; + m->sorted[j] = swap; + } + } +#endif + + return m->is_sorted = true; +} + +void (map_free)(map* m) { + (map_clear)(m); + + array_free(m->array); + m->array = 0; + + map c = {0}; + *m = c; +} + +// ----------------------------------------------------------------------------- + +enum { set_GC_SLOT = SET_HASHSIZE }; +typedef int set_is_pow2_assert[ !(SET_HASHSIZE & (SET_HASHSIZE - 1)) ? 1:-1]; + +static int set_get_index(uint64_t hkey1) { + return hkey1 & (SET_HASHSIZE-1); +} + +void (set_init)(set* m) { + set zero = {0}; + *m = zero; + + array_resize(m->array, (SET_HASHSIZE+1)); + memset(m->array, 0, (SET_HASHSIZE+1) * sizeof(m->array[0]) ); // array_resize() just did memset() +} + +void (set_insert)(set* m, set_item *p, void *key, uint64_t keyhash, void *super) { + p->keyhash = keyhash; + p->key = key; + p->super = super; + + /* Insert onto the beginning of the list */ + int index = set_get_index(p->keyhash); + p->next = m->array[index]; + m->array[index] = p; + + ++m->count; +} + +void* (set_find)(const set* m, void *key, uint64_t keyhash) { + int index = set_get_index(keyhash); + for( const set_item *cur = m->array[index]; cur; cur = cur->next ) { + if( cur->keyhash == keyhash ) { + char **c = (char **)cur->key; + char **k = (char **)key; + if( !m->cmp(c[0], k[0]) ) { + return cur->super; + } + } + } + return 0; +} + +void (set_erase)(set* m, void *key, uint64_t keyhash) { + int index = set_get_index(keyhash); + for( set_item *prev = 0, *cur = m->array[index]; cur; (prev = cur), (cur = cur->next) ) { + if( cur->keyhash == keyhash ) { + char **c = (char **)cur->key; + char **k = (char **)key; + if( !m->cmp(c[0], k[0]) ) { + if (prev) prev->next = cur->next; else m->array[index] = cur->next ? cur->next : 0; +#if SET_DONT_ERASE + /* Insert onto the beginning of the GC list */ + cur->next = m->array[set_GC_SLOT]; + m->array[set_GC_SLOT] = cur; +#else + REALLOC(cur,0); +#endif + --m->count; + return; + } + } + } +} + +int (set_count)(const set* m) { // does not include GC_SLOT + return m->count; + + int counter = 0; + for( int i = 0; i < SET_HASHSIZE; ++i) { + for( const set_item *cur = m->array[i]; cur; cur = cur->next ) { + ++counter; + } + } + return counter; +} + +int (set_isempty)(const set *m) { // clean deferred GC_SLOT only + return !m->count; +} + +void (set_gc)(set* m) { // clean deferred GC_SLOT only +#if SET_DONT_ERASE + for( set_item *next, *cur = m->array[set_GC_SLOT]; cur; cur = next ) { + next = cur->next; + REALLOC(cur,0); + } + m->array[set_GC_SLOT] = 0; +#endif +} + +void (set_clear)(set* m) { // include GC_SLOT + for( int i = 0; i <= SET_HASHSIZE; ++i) { + for( set_item *next, *cur = m->array[i]; cur; cur = next ) { + next = cur->next; + REALLOC(cur,0); + } + m->array[i] = 0; + } + m->count = 0; +} + +void (set_free)(set* m) { + (set_clear)(m); + + array_free(m->array); + m->array = 0; + + set zero = {0}; + *m = zero; +} #line 0 #line 1 "v4k_string.c" -#include - -#ifndef STACK_ALLOC_SIZE -#define STACK_ALLOC_SIZE (512*1024) -#endif - -char* tempvl(const char *fmt, va_list vl) { - va_list copy; - va_copy(copy, vl); - int sz = /*stbsp_*/vsnprintf( 0, 0, fmt, copy ) + 1; - va_end(copy); - - int reqlen = sz; -#if 0 - int heap = 0; - enum { STACK_ALLOC = 16384 }; - static __thread char buf[STACK_ALLOC]; -#else - int heap = 1; - static __thread int STACK_ALLOC = STACK_ALLOC_SIZE; - static __thread char *buf = 0; if(!buf) buf = REALLOC(0, STACK_ALLOC); // @leak -#endif - static __thread int cur = 0; //printf("string stack %d/%d\n", cur, STACK_ALLOC); - - if( reqlen >= STACK_ALLOC ) { - tty_color(RED); - printf("no stack enough, increase STACK_ALLOC variable above (reqlen:%d) (fmt: %s)\n", reqlen, fmt); - tty_color(0); - //assert(reqlen < STACK_ALLOC); - STACK_ALLOC = reqlen * 2; - buf = REALLOC(0, STACK_ALLOC); - } - - char* ptr = buf + (cur *= (cur+reqlen) < (STACK_ALLOC - 1), (cur += reqlen) - reqlen); - - /*stbsp_*/vsnprintf( ptr, sz, fmt, vl ); - return (char *)ptr; -} -char* tempva(const char *fmt, ...) { - va_list vl; - va_start(vl, fmt); - char *s = tempvl(fmt, vl); - va_end(vl); - return s; -} - -char* (strcatf)(char **src_, const char *buf) { - char *src = *src_; - if(!buf) return src; - // if(!buf[0]) return src; - int srclen = (src ? strlen(src) : 0), buflen = strlen(buf); - src = (char*)REALLOC(src, srclen + buflen + 1 ); - memcpy(src + srclen, buf, buflen + 1 ); - *src_ = src; - return src; -} - -// ----------------------------------------------------------------------------- -// string utils - -int strmatch(const char *s, const char *wildcard) { - // returns true if wildcard matches - if( *wildcard=='\0' ) return !*s; - if( *wildcard=='*' ) return strmatch(s, wildcard+1) || (*s && strmatch(s+1, wildcard)); - if( *wildcard=='?' ) return *s && (*s != '.') && strmatch(s+1, wildcard+1); - return (*s == *wildcard) && strmatch(s+1, wildcard+1); -} -int strmatchi(const char *s, const char *wildcard) { - return strmatch(strlower(s), strlower(wildcard)); -} - -int strcmp_qsort(const void *a, const void *b) { - const char **ia = (const char **)a; - const char **ib = (const char **)b; - return strcmp(*ia, *ib); -} -int strcmpi_qsort(const void *a, const void *b) { - const char **ia = (const char **)a; - const char **ib = (const char **)b; - return strcmpi(*ia, *ib); -} - -bool strbeg(const char *a, const char *b) { // returns true if both strings match at beginning. case sensitive - return strncmp(a, b, strlen(b)) ? false : true; // strstr(a,b) == a -} -bool strend(const char *a, const char *b) { // returns true if both strings match at end. case sensitive - int la = strlen(a), lb = strlen(b); - if( la < lb ) return false; - return strncmp(a + la - lb, b, lb) ? false : true; -} -/* -int main() { - printf("strbeg(abc abc) = %d\n", strbeg("abc", "abc")); - printf("strbeg(abc abcd) = %d\n", strbeg("abc", "abcd")); - printf("strbeg(abcd abc) = %d\n", strbeg("abcd", "abc")); - printf("strbeg(abc (empty)) = %d\n", strbeg("abc", "")); - printf("strbeg((empty) abc) = %d\n", strbeg("", "abc")); - printf("strbeg(123 abcd) = %d\n", strbeg("123", "abcd")); - printf("strbeg(abcd 123) = %d\n", strbeg("abcd", "123")); - puts("---"); - printf("strend(abc abc) = %d\n", strend("abc", "abc")); - printf("strend(abc 0abc) = %d\n", strend("abc", "0abc")); - printf("strend(abcd bcd) = %d\n", strend("abcd", "bcd")); - printf("strend(abc (empty)) = %d\n", strend("abc", "")); - printf("strend((empty) abc) = %d\n", strend("", "abc")); - printf("strend(123 abcd) = %d\n", strend("123", "abcd")); - printf("strend(abcd 123) = %d\n", strend("abcd", "123")); -} -*/ - -bool strbegi(const char *a, const char *b) { // returns true if both strings match at beginning. case insensitive - int la = strlen(a), lb = strlen(b); - if( la < lb ) return 0; - if( lb == 0 ) return 1; - int len = la < lb ? la : lb; - for( int i = 0; i < len; ++i ) { - if( tolower(a[i]) != tolower(b[i]) ) { - return false; - } - } - return true; -} -bool strendi(const char *src, const char *sub) { // returns true if both strings match at end. case insensitive - int srclen = strlen(src); - int sublen = strlen(sub); - if( sublen > srclen ) return 0; - return !strcmpi(src + srclen - sublen, sub); -} - - -// Find substring in string, case insensitive. Alias for strcasestr() -// Returns first char of coincidence, or NULL. -const char *strstri( const char *src, const char *sub ){ - while( *src++ ) { - for( const char *s = src-1, *f = sub, *c = s; ; ++f, ++c) { - if(!*f) return s; - if(!*c) return NULL; - if(tolower(*c) != tolower(*f)) break; - } - } - return NULL; -} - -char *strupper(const char *str) { - char *s = va("%s", str), *bak = s; - while(*s++) s[-1] = toupper(s[-1]); - return bak; -} -char *strlower(const char *str) { - char *s = va("%s", str), *bak = s; - while(*s++) s[-1] = tolower(s[-1]); - return bak; -} - -#ifndef __APPLE__ // BSD provides these -// Safely concatenate two strings. Always NUL terminates (unless dstcap == 0). -// Returns length of operation; if retval >= dstcap, truncation occurred. -size_t strlcat(char *dst, const char *src, size_t dstcap) { - int dl = strlen(dst), sl = strlen(src); - if( dstcap ) snprintf(dst + dl, dstcap - dl, "%s", src); - return dl + sl; -} -// Safely copy two strings. Always NUL terminates (unless dstcap == 0). -// Copy src to string dst of size dstcap. Copies at most dstcap-1 characters. -// Returns length of input; if retval >= dstcap, truncation occurred. -size_t strlcpy(char *dst, const char *src, size_t dstcap) { - int sl = strlen(src); - if( dstcap ) snprintf(dst, dstcap, "%*s", sl, src); - return sl;// count does not include NUL -} -#endif - -char *string8(const wchar_t *str) { // from wchar16(win) to utf8/ascii - int i = 0, n = wcslen(str) * 6 - 1; - static __thread char error[1] = {0}, buffer[2048]; assert( n < 2048 ); - while( *str ) { - if (*str < 0x80) { - if (i+1 > n) return error; - buffer[i++] = (char) *str++; - } else if (*str < 0x800) { - if (i+2 > n) return error; - buffer[i++] = 0xc0 + (*str >> 6); - buffer[i++] = 0x80 + (*str & 0x3f); - str += 1; - } else if (*str >= 0xd800 && *str < 0xdc00) { - uint32_t c; - if (i+4 > n) return error; - c = ((str[0] - 0xd800) << 10) + ((str[1]) - 0xdc00) + 0x10000; - buffer[i++] = 0xf0 + (c >> 18); - buffer[i++] = 0x80 + ((c >> 12) & 0x3f); - buffer[i++] = 0x80 + ((c >> 6) & 0x3f); - buffer[i++] = 0x80 + ((c ) & 0x3f); - str += 2; - } else if (*str >= 0xdc00 && *str < 0xe000) { - return error; - } else { - if (i+3 > n) return error; - buffer[i++] = 0xe0 + (*str >> 12); - buffer[i++] = 0x80 + ((*str >> 6) & 0x3f); - buffer[i++] = 0x80 + ((*str ) & 0x3f); - str += 1; - } - } - buffer[i] = 0; - return va("%s", buffer); -} - -char *strrepl(char **string, const char *target, const char *replace) { // may reallocate input string if needed - //if new text is shorter than old one,then no need to heap, replace inline - int rlen = strlen(replace), tlen = strlen(target), diff = tlen - rlen; - if( diff >= 0 ) return strswap(*string, target, replace); - - char *buf = 0, *aux = *string; - for( int tgtlen = tlen; tgtlen && aux[0]; ) { - char *found = strstr(aux, target); - if( found ) { - strcatf(&buf, "%.*s%s", (int)(found - aux), aux, replace); - aux += (found - aux) + tgtlen; - } else { - strcatf(&buf, "%s", aux); - break; - } - } - if( buf ) { - // strcpy(*string, buf); - char *s = *string; - if(s) s[0] = 0; - strcatf(&s, "%s", buf); - *string = s; - - FREE( buf ); - } - return *string; -} -char *strswap(char *copy, const char *target, const char *replace) { // replaced only if new text is shorter than old one - int rlen = strlen(replace), diff = strlen(target) - rlen; - if( diff >= 0 ) { - for( char *s = copy, *e = s + strlen(copy); /*s < e &&*/ 0 != (s = strstr(s, target)); ) { - if( rlen ) s = (char*)memcpy( s, replace, rlen ) + rlen; - if( diff ) memmove( s, s + diff, (e - (s + diff)) + 1 ); - } - } - return copy; -} -char *strcut(char *copy, const char *target) { - return strswap(copy, target, ""); -} - -const char *strlerp(unsigned numpairs, const char **pairs, const char *str) { // using key-value pairs, null-terminated - if( !pairs[0] ) { - return str; - } - // find & replace all tokens; @fixme: optimize me - char *buf = REALLOC(0, 128*1024); strcpy(buf, str); - for( unsigned i = 0; i < numpairs; ++i ) { - const char *token = pairs[i*2+0]; - const char *repl = pairs[i*2+1]; - while(strstr(buf, token)) { - strrepl(&buf, token, repl); - } - } - char *ret = va("%s", buf); - FREE(buf); - return ret; -} - -array(char*) strsplit(const char *str, const char *separators) { - enum { SLOTS = 32 }; - static __thread int slot = 0; - static __thread char *buf[SLOTS] = {0}; - static __thread array(char*) list[SLOTS] = {0}; - - slot = (slot+1) % SLOTS; - array_resize(list[slot], 0); - *(buf[slot] = REALLOC(buf[slot], strlen(str)*2+1)) = '\0'; // *2 to backup pathological case where input str is only separators && include == 1 - - for(char *dst = buf[slot]; str && *str; ) { - // count literal run && terminators - int run = strcspn(str, separators); - int end = strspn(str + run, separators); - - // append literal run - if( run ) { - array_push(list[slot], dst); - memmove(dst,str,run); dst[run] = '\0'; //strncpy(dst, str, run) - dst += run + 1; - } -#if defined SPLIT_INCLUDE_SEPARATORS && SPLIT_INCLUDE_SEPARATORS - // mode: append all separators: "1++2" -> "1" "+" "+" "2" - for( int i = 0; i < end; ++i ) { - array_push(list[slot], dst); - dst[0] = str[ run + i ]; - dst[1] = '\0'; - dst += 2; - } -#endif - - // skip both - str += run + end; - } - - return list[slot]; -} -char* strjoin(array(char*) list, const char *separator) { - enum { SLOTS = 16 }; - static __thread int slot = 0; - static __thread char* mems[SLOTS] = {0}; - - slot = (slot+1) % SLOTS; - - int num_list = array_count(list); - int len = 0, inc = 0, seplen = strlen(separator); - for( int i = 0; (num_list > 0 ? i < num_list : !!list[i]); ++i ) { - len += strlen(list[i]) + inc; - inc = seplen; - } - - mems[slot] = REALLOC(mems[slot], len+1); - char *p = mems[slot]; *p = 0; - const char *sep = ""; - for( int i = 0; (num_list > 0 ? i < num_list : !!list[i]); ++i ) { - p += sprintf(p, "%s%s", sep, list[i]); - sep = separator; - } - - return mems[slot]; -} - -static -const char *extract_utf32(const char *s, uint32_t *out) { - /**/ if( (s[0] & 0x80) == 0x00 ) return *out = (s[0]), s + 1; - else if( (s[0] & 0xe0) == 0xc0 ) return *out = (s[0] & 31) << 6 | (s[1] & 63), s + 2; - else if( (s[0] & 0xf0) == 0xe0 ) return *out = (s[0] & 15) << 12 | (s[1] & 63) << 6 | (s[2] & 63), s + 3; - else if( (s[0] & 0xf8) == 0xf0 ) return *out = (s[0] & 7) << 18 | (s[1] & 63) << 12 | (s[2] & 63) << 6 | (s[3] & 63), s + 4; - return *out = 0, s + 0; -} -array(uint32_t) string32( const char *utf8 ) { - static __thread int slot = 0; slot = (slot+1) % 16; - static __thread array(uint32_t) out[16] = {0}; array_resize(out[slot], 0); - - //int worstlen = strlen(utf8) + 1; array_reserve(out, worstlen); - while( *utf8 ) { - uint32_t unicode = 0; - utf8 = extract_utf32( utf8, &unicode ); - array_push(out[slot], unicode); - } - return out[slot]; -} - -const char* codepoint_to_utf8(unsigned c) { //< @r-lyeh - static char s[4+1]; - memset(s, 0, 5); - /**/ if (c < 0x80) s[0] = c, s[1] = 0; - else if (c < 0x800) s[0] = 0xC0 | ((c >> 6) & 0x1F), s[1] = 0x80 | ( c & 0x3F), s[2] = 0; - else if (c < 0x10000) s[0] = 0xE0 | ((c >> 12) & 0x0F), s[1] = 0x80 | ((c >> 6) & 0x3F), s[2] = 0x80 | ( c & 0x3F), s[3] = 0; - else if (c < 0x110000) s[0] = 0xF0 | ((c >> 18) & 0x07), s[1] = 0x80 | ((c >> 12) & 0x3F), s[2] = 0x80 | ((c >> 6) & 0x3F), s[3] = 0x80 | (c & 0x3F), s[4] = 0; - return s; -} - -// ----------------------------------------------------------------------------- -// quarks - -unsigned quark_intern( quarks_db *q, const char *string ) { - if( string && string[0] ) { - int slen = strlen(string); - int qlen = array_count(q->blob); - char *found; - if( !qlen ) { - array_resize(q->blob, slen + 1 ); - memcpy(found = q->blob, string, slen + 1); - } else { - found = strstr(q->blob, string); - if( !found ) { - array_resize(q->blob, qlen - 1 + slen + 1); - memcpy(found = q->blob + qlen - 1, string, slen + 1 ); - } - } - // already interned? return that instead - vec2i offset_len = vec2i(found - q->blob, slen); - for( int i = 0; i < array_count(q->entries); ++i ) { - if( offset_len.x == q->entries[i].x ) - if( offset_len.y == q->entries[i].y ) - return i+1; - } - // else cache and return it - array_push(q->entries, offset_len); - return array_count(q->entries); - } - return 0; -} -const char *quark_string( quarks_db *q, unsigned key ) { - if( key && key <= array_count(q->entries) ) { - vec2i offset_len = q->entries[key-1]; - return va("%.*s", offset_len.y, q->blob + offset_len.x); - } - return ""; -} - -static __thread quarks_db qdb; -unsigned intern( const char *string ) { - return quark_intern( &qdb, string ); -} -const char *quark( unsigned key ) { - return quark_string( &qdb, key ); -} - -#if 0 -AUTORUN { - test( !intern(NULL) ); // quark #0, cannot intern null string - test( !intern("") ); // quark #0, ok to intern empty string - test( !quark(0)[0] ); // empty string for quark #0 - - unsigned q1 = intern("Hello"); // -> quark #1 - unsigned q2 = intern("happy"); // -> quark #2 - unsigned q3 = intern("world."); // -> quark #3 - printf("%u %u %u\n", q1, q2, q3); - - test( q1 ); - test( q2 ); - test( q3 ); - test( q1 != q2 ); - test( q1 != q3 ); - test( q2 != q3 ); - - unsigned q4 = intern("happy"); - printf("%x vs %x\n", q2, q4); - test( q4 ); - test( q4 == q2 ); - - char buf[256]; - sprintf(buf, "%s %s %s", quark(q1), quark(q2), quark(q3)); - test( !strcmp("Hello happy world.", buf) ); -} -#endif - -// ---------------------------------------------------------------------------- -// localization kit - -static const char *kit_lang = "enUS", *kit_langs = - "enUS,enGB," - "frFR," - "esES,esAR,esMX," - "deDE,deCH,deAT," - "itIT,itCH," - "ptBR,ptPT," - "zhCN,zhSG,zhTW,zhHK,zhMO," - "ruRU,elGR,trTR,daDK,noNB,svSE,nlNL,plPL,fiFI,jaJP," - "koKR,csCZ,huHU,roRO,thTH,bgBG,heIL" -; - -static map(char*,char*) kit_ids; -static map(char*,char*) kit_vars; - -#ifndef KIT_FMT_ID2 -#define KIT_FMT_ID2 "%s.%s" -#endif - -void kit_init() { - do_once map_init(kit_ids, less_str, hash_str); - do_once map_init(kit_vars, less_str, hash_str); -} - -void kit_insert( const char *id, const char *translation) { - char *id2 = va(KIT_FMT_ID2, kit_lang, id); - - char **found = map_find_or_add_allocated_key(kit_ids, STRDUP(id2), NULL); - if(*found) FREE(*found); - *found = STRDUP(translation); -} - -bool kit_merge( const char *filename ) { - // @todo: xlsx2ini - return false; -} - -void kit_clear() { - map_clear(kit_ids); -} - -bool kit_load( const char *filename ) { - return kit_clear(), kit_merge( filename ); -} - -void kit_set( const char *key, const char *value ) { - value = value && value[0] ? value : ""; - - char **found = map_find_or_add_allocated_key(kit_vars, STRDUP(key), NULL ); - if(*found) FREE(*found); - *found = STRDUP(value); -} - -void kit_reset() { - map_clear(kit_vars); -} - -char *kit_translate2( const char *id, const char *lang ) { - char *id2 = va(KIT_FMT_ID2, lang, id); - - char **found = map_find(kit_ids, id2); - - // return original [[ID]] if no translation is found - if( !found ) return va("[[%s]]", id); - - // return translation if no {{moustaches}} are found - if( !strstr(*found, "{{") ) return *found; - - // else replace all found {{moustaches}} with context vars - { - // make room - static __thread char *results[16] = {0}; - static __thread unsigned counter = 0; counter = (counter+1) % 16; - - char *buffer = results[ counter ]; - if( buffer ) FREE(buffer), buffer = 0; - - // iterate moustaches - const char *begin, *end, *text = *found; - while( NULL != (begin = strstr(text, "{{")) ) { - end = strstr(begin+2, "}}"); - if( end ) { - char *var = va("%.*s", (int)(end - (begin+2)), begin+2); - char **found_var = map_find(kit_vars, var); - - if( found_var && 0[*found_var] ) { - strcatf(&buffer, "%.*s%s", (int)(begin - text), text, *found_var); - } else { - strcatf(&buffer, "%.*s{{%s}}", (int)(begin - text), text, var); - } - - text = end+2; - } else { - strcatf(&buffer, "%.*s", (int)(begin - text), text); - - text = begin+2; - } - } - - strcatf(&buffer, "%s", text); - return buffer; - } -} - -char *kit_translate( const char *id ) { - return kit_translate2( id, kit_lang ); -} - -void kit_locale( const char *lang ) { - kit_lang = STRDUP(lang); // @leak -} - -void kit_dump_state( FILE *fp ) { - for each_map(kit_ids, char *, k, char *, v) { - fprintf(fp, "[ID ] %s=%s\n", k, v); - } - for each_map(kit_vars, char *, k, char *, v) { - fprintf(fp, "[VAR] %s=%s\n", k, v); - } -} - -/* -int main() { - kit_init(); - - kit_locale("enUS"); - kit_insert("HELLO_PLAYERS", "Hi {{PLAYER1}} and {{PLAYER2}}!"); - kit_insert("GREET_PLAYERS", "Nice to meet you."); - - kit_locale("esES"); - kit_insert("HELLO_PLAYERS", "Hola {{PLAYER1}} y {{PLAYER2}}!"); - kit_insert("GREET_PLAYERS", "Un placer conoceros."); - - kit_locale("enUS"); - printf("%s %s\n", kit_translate("HELLO_PLAYERS"), kit_translate("GREET_PLAYERS")); // Hi {{PLAYER1}} and {{PLAYER2}}! Nice to meet you. - - kit_locale("esES"); - kit_set("PLAYER1", "John"); - kit_set("PLAYER2", "Karl"); - printf("%s %s\n", kit_translate("HELLO_PLAYERS"), kit_translate("GREET_PLAYERS")); // Hola John y Karl! Un placer conoceros. - - assert( 0 == strcmp(kit_translate("NON_EXISTING"), "[[NON_EXISTING]]")); // [[NON_EXISTING]] - assert(~puts("Ok")); -} -*/ +#include + +#ifndef STACK_ALLOC_SIZE +#define STACK_ALLOC_SIZE (512*1024) +#endif + +char* tempvl(const char *fmt, va_list vl) { + va_list copy; + va_copy(copy, vl); + int sz = /*stbsp_*/vsnprintf( 0, 0, fmt, copy ) + 1; + va_end(copy); + + int reqlen = sz; +#if 0 + int heap = 0; + enum { STACK_ALLOC = 16384 }; + static __thread char buf[STACK_ALLOC]; +#else + int heap = 1; + static __thread int STACK_ALLOC = STACK_ALLOC_SIZE; + static __thread char *buf = 0; if(!buf) buf = REALLOC(0, STACK_ALLOC); // @leak +#endif + static __thread int cur = 0; //printf("string stack %d/%d\n", cur, STACK_ALLOC); + + if( reqlen >= STACK_ALLOC ) { + tty_color(RED); + printf("no stack enough, increase STACK_ALLOC variable above (reqlen:%d) (fmt: %s)\n", reqlen, fmt); + tty_color(0); + //assert(reqlen < STACK_ALLOC); + STACK_ALLOC = reqlen * 2; + buf = REALLOC(0, STACK_ALLOC); + } + + char* ptr = buf + (cur *= (cur+reqlen) < (STACK_ALLOC - 1), (cur += reqlen) - reqlen); + + /*stbsp_*/vsnprintf( ptr, sz, fmt, vl ); + return (char *)ptr; +} +char* tempva(const char *fmt, ...) { + va_list vl; + va_start(vl, fmt); + char *s = tempvl(fmt, vl); + va_end(vl); + return s; +} + +char* (strcatf)(char **src_, const char *buf) { + char *src = *src_; + if(!buf) return src; + // if(!buf[0]) return src; + int srclen = (src ? strlen(src) : 0), buflen = strlen(buf); + src = (char*)REALLOC(src, srclen + buflen + 1 ); + memcpy(src + srclen, buf, buflen + 1 ); + *src_ = src; + return src; +} + +// ----------------------------------------------------------------------------- +// string utils + +int strmatch(const char *s, const char *wildcard) { + // returns true if wildcard matches + if( *wildcard=='\0' ) return !*s; + if( *wildcard=='*' ) return strmatch(s, wildcard+1) || (*s && strmatch(s+1, wildcard)); + if( *wildcard=='?' ) return *s && (*s != '.') && strmatch(s+1, wildcard+1); + return (*s == *wildcard) && strmatch(s+1, wildcard+1); +} +int strmatchi(const char *s, const char *wildcard) { + return strmatch(strlower(s), strlower(wildcard)); +} + +int strcmp_qsort(const void *a, const void *b) { + const char **ia = (const char **)a; + const char **ib = (const char **)b; + return strcmp(*ia, *ib); +} +int strcmpi_qsort(const void *a, const void *b) { + const char **ia = (const char **)a; + const char **ib = (const char **)b; + return strcmpi(*ia, *ib); +} + +bool strbeg(const char *a, const char *b) { // returns true if both strings match at beginning. case sensitive + return strncmp(a, b, strlen(b)) ? false : true; // strstr(a,b) == a +} +bool strend(const char *a, const char *b) { // returns true if both strings match at end. case sensitive + int la = strlen(a), lb = strlen(b); + if( la < lb ) return false; + return strncmp(a + la - lb, b, lb) ? false : true; +} +/* +int main() { + printf("strbeg(abc abc) = %d\n", strbeg("abc", "abc")); + printf("strbeg(abc abcd) = %d\n", strbeg("abc", "abcd")); + printf("strbeg(abcd abc) = %d\n", strbeg("abcd", "abc")); + printf("strbeg(abc (empty)) = %d\n", strbeg("abc", "")); + printf("strbeg((empty) abc) = %d\n", strbeg("", "abc")); + printf("strbeg(123 abcd) = %d\n", strbeg("123", "abcd")); + printf("strbeg(abcd 123) = %d\n", strbeg("abcd", "123")); + puts("---"); + printf("strend(abc abc) = %d\n", strend("abc", "abc")); + printf("strend(abc 0abc) = %d\n", strend("abc", "0abc")); + printf("strend(abcd bcd) = %d\n", strend("abcd", "bcd")); + printf("strend(abc (empty)) = %d\n", strend("abc", "")); + printf("strend((empty) abc) = %d\n", strend("", "abc")); + printf("strend(123 abcd) = %d\n", strend("123", "abcd")); + printf("strend(abcd 123) = %d\n", strend("abcd", "123")); +} +*/ + +bool strbegi(const char *a, const char *b) { // returns true if both strings match at beginning. case insensitive + int la = strlen(a), lb = strlen(b); + if( la < lb ) return 0; + if( lb == 0 ) return 1; + int len = la < lb ? la : lb; + for( int i = 0; i < len; ++i ) { + if( tolower(a[i]) != tolower(b[i]) ) { + return false; + } + } + return true; +} +bool strendi(const char *src, const char *sub) { // returns true if both strings match at end. case insensitive + int srclen = strlen(src); + int sublen = strlen(sub); + if( sublen > srclen ) return 0; + return !strcmpi(src + srclen - sublen, sub); +} + + +// Find substring in string, case insensitive. Alias for strcasestr() +// Returns first char of coincidence, or NULL. +const char *strstri( const char *src, const char *sub ){ + while( *src++ ) { + for( const char *s = src-1, *f = sub, *c = s; ; ++f, ++c) { + if(!*f) return s; + if(!*c) return NULL; + if(tolower(*c) != tolower(*f)) break; + } + } + return NULL; +} + +char *strupper(const char *str) { + char *s = va("%s", str), *bak = s; + while(*s++) s[-1] = toupper(s[-1]); + return bak; +} +char *strlower(const char *str) { + char *s = va("%s", str), *bak = s; + while(*s++) s[-1] = tolower(s[-1]); + return bak; +} + +#ifndef __APPLE__ // BSD provides these +// Safely concatenate two strings. Always NUL terminates (unless dstcap == 0). +// Returns length of operation; if retval >= dstcap, truncation occurred. +size_t strlcat(char *dst, const char *src, size_t dstcap) { + int dl = strlen(dst), sl = strlen(src); + if( dstcap ) snprintf(dst + dl, dstcap - dl, "%s", src); + return dl + sl; +} +// Safely copy two strings. Always NUL terminates (unless dstcap == 0). +// Copy src to string dst of size dstcap. Copies at most dstcap-1 characters. +// Returns length of input; if retval >= dstcap, truncation occurred. +size_t strlcpy(char *dst, const char *src, size_t dstcap) { + int sl = strlen(src); + if( dstcap ) snprintf(dst, dstcap, "%*s", sl, src); + return sl;// count does not include NUL +} +#endif + +char *string8(const wchar_t *str) { // from wchar16(win) to utf8/ascii + int i = 0, n = wcslen(str) * 6 - 1; + static __thread char error[1] = {0}, buffer[2048]; assert( n < 2048 ); + while( *str ) { + if (*str < 0x80) { + if (i+1 > n) return error; + buffer[i++] = (char) *str++; + } else if (*str < 0x800) { + if (i+2 > n) return error; + buffer[i++] = 0xc0 + (*str >> 6); + buffer[i++] = 0x80 + (*str & 0x3f); + str += 1; + } else if (*str >= 0xd800 && *str < 0xdc00) { + uint32_t c; + if (i+4 > n) return error; + c = ((str[0] - 0xd800) << 10) + ((str[1]) - 0xdc00) + 0x10000; + buffer[i++] = 0xf0 + (c >> 18); + buffer[i++] = 0x80 + ((c >> 12) & 0x3f); + buffer[i++] = 0x80 + ((c >> 6) & 0x3f); + buffer[i++] = 0x80 + ((c ) & 0x3f); + str += 2; + } else if (*str >= 0xdc00 && *str < 0xe000) { + return error; + } else { + if (i+3 > n) return error; + buffer[i++] = 0xe0 + (*str >> 12); + buffer[i++] = 0x80 + ((*str >> 6) & 0x3f); + buffer[i++] = 0x80 + ((*str ) & 0x3f); + str += 1; + } + } + buffer[i] = 0; + return va("%s", buffer); +} + +char *strrepl(char **string, const char *target, const char *replace) { // may reallocate input string if needed + //if new text is shorter than old one,then no need to heap, replace inline + int rlen = strlen(replace), tlen = strlen(target), diff = tlen - rlen; + if( diff >= 0 ) return strswap(*string, target, replace); + + char *buf = 0, *aux = *string; + for( int tgtlen = tlen; tgtlen && aux[0]; ) { + char *found = strstr(aux, target); + if( found ) { + strcatf(&buf, "%.*s%s", (int)(found - aux), aux, replace); + aux += (found - aux) + tgtlen; + } else { + strcatf(&buf, "%s", aux); + break; + } + } + if( buf ) { + // strcpy(*string, buf); + char *s = *string; + if(s) s[0] = 0; + strcatf(&s, "%s", buf); + *string = s; + + FREE( buf ); + } + return *string; +} +char *strswap(char *copy, const char *target, const char *replace) { // replaced only if new text is shorter than old one + int rlen = strlen(replace), diff = strlen(target) - rlen; + if( diff >= 0 ) { + for( char *s = copy, *e = s + strlen(copy); /*s < e &&*/ 0 != (s = strstr(s, target)); ) { + if( rlen ) s = (char*)memcpy( s, replace, rlen ) + rlen; + if( diff ) memmove( s, s + diff, (e - (s + diff)) + 1 ); + } + } + return copy; +} +char *strcut(char *copy, const char *target) { + return strswap(copy, target, ""); +} + +const char *strlerp(unsigned numpairs, const char **pairs, const char *str) { // using key-value pairs, null-terminated + if( !pairs[0] ) { + return str; + } + // find & replace all tokens; @fixme: optimize me + char *buf = REALLOC(0, 128*1024); strcpy(buf, str); + for( unsigned i = 0; i < numpairs; ++i ) { + const char *token = pairs[i*2+0]; + const char *repl = pairs[i*2+1]; + while(strstr(buf, token)) { + strrepl(&buf, token, repl); + } + } + char *ret = va("%s", buf); + FREE(buf); + return ret; +} + +array(char*) strsplit(const char *str, const char *separators) { + enum { SLOTS = 32 }; + static __thread int slot = 0; + static __thread char *buf[SLOTS] = {0}; + static __thread array(char*) list[SLOTS] = {0}; + + slot = (slot+1) % SLOTS; + array_resize(list[slot], 0); + *(buf[slot] = REALLOC(buf[slot], strlen(str)*2+1)) = '\0'; // *2 to backup pathological case where input str is only separators && include == 1 + + for(char *dst = buf[slot]; str && *str; ) { + // count literal run && terminators + int run = strcspn(str, separators); + int end = strspn(str + run, separators); + + // append literal run + if( run ) { + array_push(list[slot], dst); + memmove(dst,str,run); dst[run] = '\0'; //strncpy(dst, str, run) + dst += run + 1; + } +#if defined SPLIT_INCLUDE_SEPARATORS && SPLIT_INCLUDE_SEPARATORS + // mode: append all separators: "1++2" -> "1" "+" "+" "2" + for( int i = 0; i < end; ++i ) { + array_push(list[slot], dst); + dst[0] = str[ run + i ]; + dst[1] = '\0'; + dst += 2; + } +#endif + + // skip both + str += run + end; + } + + return list[slot]; +} +char* strjoin(array(char*) list, const char *separator) { + enum { SLOTS = 16 }; + static __thread int slot = 0; + static __thread char* mems[SLOTS] = {0}; + + slot = (slot+1) % SLOTS; + + int num_list = array_count(list); + int len = 0, inc = 0, seplen = strlen(separator); + for( int i = 0; (num_list > 0 ? i < num_list : !!list[i]); ++i ) { + len += strlen(list[i]) + inc; + inc = seplen; + } + + mems[slot] = REALLOC(mems[slot], len+1); + char *p = mems[slot]; *p = 0; + const char *sep = ""; + for( int i = 0; (num_list > 0 ? i < num_list : !!list[i]); ++i ) { + p += sprintf(p, "%s%s", sep, list[i]); + sep = separator; + } + + return mems[slot]; +} + +static +const char *extract_utf32(const char *s, uint32_t *out) { + /**/ if( (s[0] & 0x80) == 0x00 ) return *out = (s[0]), s + 1; + else if( (s[0] & 0xe0) == 0xc0 ) return *out = (s[0] & 31) << 6 | (s[1] & 63), s + 2; + else if( (s[0] & 0xf0) == 0xe0 ) return *out = (s[0] & 15) << 12 | (s[1] & 63) << 6 | (s[2] & 63), s + 3; + else if( (s[0] & 0xf8) == 0xf0 ) return *out = (s[0] & 7) << 18 | (s[1] & 63) << 12 | (s[2] & 63) << 6 | (s[3] & 63), s + 4; + return *out = 0, s + 0; +} +array(uint32_t) string32( const char *utf8 ) { + static __thread int slot = 0; slot = (slot+1) % 16; + static __thread array(uint32_t) out[16] = {0}; array_resize(out[slot], 0); + + //int worstlen = strlen(utf8) + 1; array_reserve(out, worstlen); + while( *utf8 ) { + uint32_t unicode = 0; + utf8 = extract_utf32( utf8, &unicode ); + array_push(out[slot], unicode); + } + return out[slot]; +} + +const char* codepoint_to_utf8(unsigned c) { //< @r-lyeh + static char s[4+1]; + memset(s, 0, 5); + /**/ if (c < 0x80) s[0] = c, s[1] = 0; + else if (c < 0x800) s[0] = 0xC0 | ((c >> 6) & 0x1F), s[1] = 0x80 | ( c & 0x3F), s[2] = 0; + else if (c < 0x10000) s[0] = 0xE0 | ((c >> 12) & 0x0F), s[1] = 0x80 | ((c >> 6) & 0x3F), s[2] = 0x80 | ( c & 0x3F), s[3] = 0; + else if (c < 0x110000) s[0] = 0xF0 | ((c >> 18) & 0x07), s[1] = 0x80 | ((c >> 12) & 0x3F), s[2] = 0x80 | ((c >> 6) & 0x3F), s[3] = 0x80 | (c & 0x3F), s[4] = 0; + return s; +} + +// ----------------------------------------------------------------------------- +// quarks + +unsigned quark_intern( quarks_db *q, const char *string ) { + if( string && string[0] ) { + int slen = strlen(string); + int qlen = array_count(q->blob); + char *found; + if( !qlen ) { + array_resize(q->blob, slen + 1 ); + memcpy(found = q->blob, string, slen + 1); + } else { + found = strstr(q->blob, string); + if( !found ) { + array_resize(q->blob, qlen - 1 + slen + 1); + memcpy(found = q->blob + qlen - 1, string, slen + 1 ); + } + } + // already interned? return that instead + vec2i offset_len = vec2i(found - q->blob, slen); + for( int i = 0; i < array_count(q->entries); ++i ) { + if( offset_len.x == q->entries[i].x ) + if( offset_len.y == q->entries[i].y ) + return i+1; + } + // else cache and return it + array_push(q->entries, offset_len); + return array_count(q->entries); + } + return 0; +} +const char *quark_string( quarks_db *q, unsigned key ) { + if( key && key <= array_count(q->entries) ) { + vec2i offset_len = q->entries[key-1]; + return va("%.*s", offset_len.y, q->blob + offset_len.x); + } + return ""; +} + +static __thread quarks_db qdb; +unsigned intern( const char *string ) { + return quark_intern( &qdb, string ); +} +const char *quark( unsigned key ) { + return quark_string( &qdb, key ); +} + +#if 0 +AUTORUN { + test( !intern(NULL) ); // quark #0, cannot intern null string + test( !intern("") ); // quark #0, ok to intern empty string + test( !quark(0)[0] ); // empty string for quark #0 + + unsigned q1 = intern("Hello"); // -> quark #1 + unsigned q2 = intern("happy"); // -> quark #2 + unsigned q3 = intern("world."); // -> quark #3 + printf("%u %u %u\n", q1, q2, q3); + + test( q1 ); + test( q2 ); + test( q3 ); + test( q1 != q2 ); + test( q1 != q3 ); + test( q2 != q3 ); + + unsigned q4 = intern("happy"); + printf("%x vs %x\n", q2, q4); + test( q4 ); + test( q4 == q2 ); + + char buf[256]; + sprintf(buf, "%s %s %s", quark(q1), quark(q2), quark(q3)); + test( !strcmp("Hello happy world.", buf) ); +} +#endif + +// ---------------------------------------------------------------------------- +// localization kit + +static const char *kit_lang = "enUS", *kit_langs = + "enUS,enGB," + "frFR," + "esES,esAR,esMX," + "deDE,deCH,deAT," + "itIT,itCH," + "ptBR,ptPT," + "zhCN,zhSG,zhTW,zhHK,zhMO," + "ruRU,elGR,trTR,daDK,noNB,svSE,nlNL,plPL,fiFI,jaJP," + "koKR,csCZ,huHU,roRO,thTH,bgBG,heIL" +; + +static map(char*,char*) kit_ids; +static map(char*,char*) kit_vars; + +#ifndef KIT_FMT_ID2 +#define KIT_FMT_ID2 "%s.%s" +#endif + +void kit_init() { + do_once map_init(kit_ids, less_str, hash_str); + do_once map_init(kit_vars, less_str, hash_str); +} + +void kit_insert( const char *id, const char *translation) { + char *id2 = va(KIT_FMT_ID2, kit_lang, id); + + char **found = map_find_or_add_allocated_key(kit_ids, STRDUP(id2), NULL); + if(*found) FREE(*found); + *found = STRDUP(translation); +} + +bool kit_merge( const char *filename ) { + // @todo: xlsx2ini + return false; +} + +void kit_clear() { + map_clear(kit_ids); +} + +bool kit_load( const char *filename ) { + return kit_clear(), kit_merge( filename ); +} + +void kit_set( const char *key, const char *value ) { + value = value && value[0] ? value : ""; + + char **found = map_find_or_add_allocated_key(kit_vars, STRDUP(key), NULL ); + if(*found) FREE(*found); + *found = STRDUP(value); +} + +void kit_reset() { + map_clear(kit_vars); +} + +char *kit_translate2( const char *id, const char *lang ) { + char *id2 = va(KIT_FMT_ID2, lang, id); + + char **found = map_find(kit_ids, id2); + + // return original [[ID]] if no translation is found + if( !found ) return va("[[%s]]", id); + + // return translation if no {{moustaches}} are found + if( !strstr(*found, "{{") ) return *found; + + // else replace all found {{moustaches}} with context vars + { + // make room + static __thread char *results[16] = {0}; + static __thread unsigned counter = 0; counter = (counter+1) % 16; + + char *buffer = results[ counter ]; + if( buffer ) FREE(buffer), buffer = 0; + + // iterate moustaches + const char *begin, *end, *text = *found; + while( NULL != (begin = strstr(text, "{{")) ) { + end = strstr(begin+2, "}}"); + if( end ) { + char *var = va("%.*s", (int)(end - (begin+2)), begin+2); + char **found_var = map_find(kit_vars, var); + + if( found_var && 0[*found_var] ) { + strcatf(&buffer, "%.*s%s", (int)(begin - text), text, *found_var); + } else { + strcatf(&buffer, "%.*s{{%s}}", (int)(begin - text), text, var); + } + + text = end+2; + } else { + strcatf(&buffer, "%.*s", (int)(begin - text), text); + + text = begin+2; + } + } + + strcatf(&buffer, "%s", text); + return buffer; + } +} + +char *kit_translate( const char *id ) { + return kit_translate2( id, kit_lang ); +} + +void kit_locale( const char *lang ) { + kit_lang = STRDUP(lang); // @leak +} + +void kit_dump_state( FILE *fp ) { + for each_map(kit_ids, char *, k, char *, v) { + fprintf(fp, "[ID ] %s=%s\n", k, v); + } + for each_map(kit_vars, char *, k, char *, v) { + fprintf(fp, "[VAR] %s=%s\n", k, v); + } +} + +/* +int main() { + kit_init(); + + kit_locale("enUS"); + kit_insert("HELLO_PLAYERS", "Hi {{PLAYER1}} and {{PLAYER2}}!"); + kit_insert("GREET_PLAYERS", "Nice to meet you."); + + kit_locale("esES"); + kit_insert("HELLO_PLAYERS", "Hola {{PLAYER1}} y {{PLAYER2}}!"); + kit_insert("GREET_PLAYERS", "Un placer conoceros."); + + kit_locale("enUS"); + printf("%s %s\n", kit_translate("HELLO_PLAYERS"), kit_translate("GREET_PLAYERS")); // Hi {{PLAYER1}} and {{PLAYER2}}! Nice to meet you. + + kit_locale("esES"); + kit_set("PLAYER1", "John"); + kit_set("PLAYER2", "Karl"); + printf("%s %s\n", kit_translate("HELLO_PLAYERS"), kit_translate("GREET_PLAYERS")); // Hola John y Karl! Un placer conoceros. + + assert( 0 == strcmp(kit_translate("NON_EXISTING"), "[[NON_EXISTING]]")); // [[NON_EXISTING]] + assert(~puts("Ok")); +} +*/ #line 0 #line 1 "v4k_compat.c" -//----------------------------------------------------------------------------- -// compat (unix & stdio.h) - -#if is(tcc) && is(win32) // add missing symbols -const struct in6_addr in6addr_any = IN6ADDR_ANY_INIT; /* :: */ -const struct in6_addr in6addr_loopback; /* ::1 */ -#endif - -#if is(win32) -#include -#if is(mingw) -#include -#endif -#else -#include -#include // sched_setaffinity(), CPU_ZERO(), CPU_COUNT() -#include -#endif - -#if is(ems) -//#define unlink(x) ((void)(x), 0) -#endif - -#if is(win32) -//#define alloca _alloca -#define atoi64 _atoi64 -#define popen _popen -#define pclose _pclose -//#define strncasecmp _strnicmp -#define mkdir(p,m) mkdir(p) -#define chdir ifdef(cl, _chdir, chdir) -#if is(cl) || is(tcc) -#define ftruncate _chsize_s -#endif -#define flockfile ifdef(cl,_lock_file,ifdef(mingw,_lock_file,(void))) -#define funlockfile ifdef(cl,_unlock_file,ifdef(mingw,_unlock_file,(void))) -#else // gcc -//#include // mingw64 does not have it -#include // strncasecmp -#define atoi64 atoll -//#define strstri strcasestr -//#define strcmpi strcasecmp -#endif - -#if defined MAX_PATH -#define DIR_MAX MAX_PATH -#elif defined PATH_MAX -#define DIR_MAX PATH_MAX -#else -#define DIR_MAX 260 -#endif - -#if is(win32) // _MSC_VER and __MINGW64__ -#include -#include -#include -#include -#include -#include -FILE *fmemopen(void *buf, size_t len, const char *type) { - int fd = -1; - char temppath[DIR_MAX - 14], filename[DIR_MAX + 1]; - if( GetTempPathA(sizeof(temppath), temppath) ) - if( GetTempFileNameA(temppath, "v4k_temp", 0, filename) ) - if( !_sopen_s(&fd, filename, _O_CREAT | _O_SHORT_LIVED | _O_TEMPORARY | _O_RDWR | _O_BINARY | _O_NOINHERIT, _SH_DENYRW, _S_IREAD | _S_IWRITE) ) - for( FILE *fp = fd != -1 ? _fdopen(fd, "w+b") : NULL; fp; ) - return fwrite(buf, len, 1, fp), rewind(fp), unlink(filename), fp; // no need to _close. fclose(on the returned FILE*) also _closes the file descriptor. - return fd != -1 ? _close(fd), NULL : NULL; -} -#endif - - -#if 0 -#if !is(cl) -#define tmpfile file_temp -#endif - -#define tmpnam(x) file_tempname() -#endif - -#if 0 -static -const char *pathfile_from_handle(FILE *fp) { -#if is(win32) - int fd = fileno(fp); - HANDLE handle = (HANDLE)_get_osfhandle( fd ); // - DWORD size = GetFinalPathNameByHandleW(handle, NULL, 0, VOLUME_NAME_DOS); - wchar_t name[DIR_MAX] = L""; - size = GetFinalPathNameByHandleW(handle, name, size, VOLUME_NAME_DOS); - name[size] = L'\0'; - return wchar16to8(name + 4); // skip \\?\ header -#else - // In Linux, you can use readlink on /proc/self/fd/NNN where NNN is the file descriptor - // In OSX: - // #include - // #include - // char filePath[DIR_MAX]; - // if (fcntl(fd, F_GETPATH, filePath) != -1) { - // // do something with the file path - // } - return 0; -#endif -} -#endif - -// ----------------------------------------------------------------------------- -// new C macros - -#define cast(T) ifdef(c, void *, decltype(T)) -#define literal(T) ifdef(c, T, (T)) - -// ----------------------------------------------------------------------------- - -void v4k_init(); -static void v4k_pre_init(); -static void v4k_post_init(float); +//----------------------------------------------------------------------------- +// compat (unix & stdio.h) + +#if is(tcc) && is(win32) // add missing symbols +const struct in6_addr in6addr_any = IN6ADDR_ANY_INIT; /* :: */ +const struct in6_addr in6addr_loopback; /* ::1 */ +#endif + +#if is(win32) +#include +#if is(mingw) +#include +#endif +#else +#include +#include // sched_setaffinity(), CPU_ZERO(), CPU_COUNT() +#include +#endif + +#if is(ems) +//#define unlink(x) ((void)(x), 0) +#endif + +#if is(win32) +//#define alloca _alloca +#define atoi64 _atoi64 +#define popen _popen +#define pclose _pclose +//#define strncasecmp _strnicmp +#define mkdir(p,m) mkdir(p) +#define chdir ifdef(cl, _chdir, chdir) +#if is(cl) || is(tcc) +#define ftruncate _chsize_s +#endif +#define flockfile ifdef(cl,_lock_file,ifdef(mingw,_lock_file,(void))) +#define funlockfile ifdef(cl,_unlock_file,ifdef(mingw,_unlock_file,(void))) +#else // gcc +//#include // mingw64 does not have it +#include // strncasecmp +#define atoi64 atoll +//#define strstri strcasestr +//#define strcmpi strcasecmp +#endif + +#if defined MAX_PATH +#define DIR_MAX MAX_PATH +#elif defined PATH_MAX +#define DIR_MAX PATH_MAX +#else +#define DIR_MAX 260 +#endif + +#if is(win32) // _MSC_VER and __MINGW64__ +#include +#include +#include +#include +#include +#include +FILE *fmemopen(void *buf, size_t len, const char *type) { + int fd = -1; + char temppath[DIR_MAX - 14], filename[DIR_MAX + 1]; + if( GetTempPathA(sizeof(temppath), temppath) ) + if( GetTempFileNameA(temppath, "v4k_temp", 0, filename) ) + if( !_sopen_s(&fd, filename, _O_CREAT | _O_SHORT_LIVED | _O_TEMPORARY | _O_RDWR | _O_BINARY | _O_NOINHERIT, _SH_DENYRW, _S_IREAD | _S_IWRITE) ) + for( FILE *fp = fd != -1 ? _fdopen(fd, "w+b") : NULL; fp; ) + return fwrite(buf, len, 1, fp), rewind(fp), unlink(filename), fp; // no need to _close. fclose(on the returned FILE*) also _closes the file descriptor. + return fd != -1 ? _close(fd), NULL : NULL; +} +#endif + + +#if 0 +#if !is(cl) +#define tmpfile file_temp +#endif + +#define tmpnam(x) file_tempname() +#endif + +#if 0 +static +const char *pathfile_from_handle(FILE *fp) { +#if is(win32) + int fd = fileno(fp); + HANDLE handle = (HANDLE)_get_osfhandle( fd ); // + DWORD size = GetFinalPathNameByHandleW(handle, NULL, 0, VOLUME_NAME_DOS); + wchar_t name[DIR_MAX] = L""; + size = GetFinalPathNameByHandleW(handle, name, size, VOLUME_NAME_DOS); + name[size] = L'\0'; + return wchar16to8(name + 4); // skip \\?\ header +#else + // In Linux, you can use readlink on /proc/self/fd/NNN where NNN is the file descriptor + // In OSX: + // #include + // #include + // char filePath[DIR_MAX]; + // if (fcntl(fd, F_GETPATH, filePath) != -1) { + // // do something with the file path + // } + return 0; +#endif +} +#endif + +// ----------------------------------------------------------------------------- +// new C macros + +#define cast(T) ifdef(c, void *, decltype(T)) +#define literal(T) ifdef(c, T, (T)) + +// ----------------------------------------------------------------------------- + +void v4k_init(); +static void v4k_pre_init(); +static void v4k_post_init(float); #line 0 #line 1 "v4k_ui.c" -// ---------------------------------------------------------------------------------------- -// ui extensions first - -static float -nk_text_width(struct nk_context *ctx, const char *str, unsigned len) { - const struct nk_style *style = &ctx->style; - const struct nk_user_font *f = style->font; - float pixels_width = f->width(f->userdata, f->height, str, len ? (int)len : (int)strlen(str)); - return pixels_width + 10; // 10 -> internal widget padding -} - -static nk_bool -nk_hovered_text(struct nk_context *ctx, const char *str, int len, - nk_flags align, nk_bool value) -{ - struct nk_window *win; - struct nk_panel *layout; - const struct nk_input *in; - const struct nk_style *style; - - enum nk_widget_layout_states state; - struct nk_rect bounds; - - NK_ASSERT(ctx); - NK_ASSERT(ctx->current); - NK_ASSERT(ctx->current->layout); - if (!ctx || !ctx->current || !ctx->current->layout) - return 0; - - win = ctx->current; - layout = win->layout; - style = &ctx->style; - - state = nk_widget(&bounds, ctx); - if (!state) return 0; - in = (state == NK_WIDGET_ROM || layout->flags & NK_WINDOW_ROM) ? 0 : &ctx->input; - - #if 1 //< @r-lyeh: sim button logic - struct nk_rect touch; - touch.x = bounds.x - style->selectable.touch_padding.x; - touch.y = bounds.y - style->selectable.touch_padding.y; - touch.w = bounds.w + style->selectable.touch_padding.x * 2; - touch.h = bounds.h + style->selectable.touch_padding.y * 2; - int clicked = !!nk_button_behavior(&ctx->last_widget_state, touch, in, NK_BUTTON_DEFAULT); - in = 0; //< @r-lyeh: do not pass any input - #endif - - nk_do_selectable(&ctx->last_widget_state, &win->buffer, bounds, - str, len, align, &value, &style->selectable, in, style->font); - - return clicked; //< @r-lyeh: return sim button logic instead of prev function call -} - -#define ui_push_hspace(px) \ - (int xx = px; xx; xx = 0) \ - for(struct nk_context *ctx = (struct nk_context*)ui_handle(); ctx; ctx = 0 ) \ - for(struct nk_panel *layout = ui_ctx->current->layout; layout; ) \ - for( xx = (layout->at_x += px, layout->bounds.w -= px, 0); layout; layout->at_x -= px, layout->bounds.w += px, layout = 0 ) - -// helper macros to instance an overlayed toolbar within the regions of an existing widget -#define UI_TOOLBAR_OVERLAY_DECLARE(...) \ - __VA_ARGS__; \ - struct nk_rect toolbar_bounds; nk_layout_peek(&toolbar_bounds, ui_ctx); \ - struct nk_vec2 item_padding = ui_ctx->style.text.padding; \ - struct nk_text text; \ - text.padding.x = item_padding.x; \ - text.padding.y = item_padding.y; \ - text.background = ui_ctx->style.window.background; -#define UI_TOOLBAR_OVERLAY(CHOICE,TEXT,COLOR,ALIGNMENT) \ - do { \ - text.text = COLOR; \ - nk_widget_text(&ui_ctx->current->buffer, toolbar_bounds, TEXT, strlen(TEXT), &text, ALIGNMENT, ui_ctx->style.font); \ - int clicked_x = input_down(MOUSE_L) && nk_input_is_mouse_hovering_rect(&ui_ctx->input, toolbar_bounds); \ - if( clicked_x ) clicked_x = (int)((ui_ctx->input.mouse.pos.x - toolbar_bounds.x) - (ALIGNMENT == NK_TEXT_RIGHT ? bounds.w : 0) ); \ - CHOICE = 1 + (ALIGNMENT == NK_TEXT_RIGHT ? -1 : +1) * clicked_x / (UI_ICON_FONTSIZE + UI_ICON_SPACING_X); /* divided by px per ICON_MD_ glyph approximately */ \ - int glyphs = strlen(TEXT) / 4 /*3:MD,4:MDI*/; CHOICE *= !!clicked_x * (CHOICE <= glyphs); } while(0) - -// menu macros that work not only standalone but also contained within a panel or window -static int ui_using_v2_menubar = 0; -#define UI_MENU(N, ...) do { \ - enum { MENUROW_HEIGHT = 25 }; \ - int embedded = !!ui_ctx->current; \ - struct nk_rect total_space = {0,0,window_width(),window_height()}; \ - if( embedded ) total_space = nk_window_get_bounds(ui_ctx), total_space.w -= 10; \ - int created = !embedded && nk_begin(ui_ctx, "MENU_" STRINGIZE(__COUNTER__), nk_rect(0, 0, window_width(), UI_MENUROW_HEIGHT), NK_WINDOW_NO_SCROLLBAR); \ - if ( embedded || created ) { \ - ui_using_v2_menubar = 1; \ - int align = NK_TEXT_LEFT, Nth = (N), ITEM_WIDTH = 30, span = 0; \ - nk_menubar_begin(ui_ctx); \ - nk_layout_row_begin(ui_ctx, NK_STATIC, MENUROW_HEIGHT, Nth); \ - __VA_ARGS__; \ - nk_menubar_end(ui_ctx); \ - if( created ) nk_end(ui_ctx); \ - } } while(0) -#define UI_MENU_POPUP(title, px, ...) { \ - int hspace = maxi(ITEM_WIDTH, nk_text_width(ui_ctx,(title),0)); \ - nk_layout_row_push(ui_ctx, hspace); span += hspace; \ - if (nk_menu_begin_label(ui_ctx, (title), align, nk_vec2(px.x>1?px.x:px.x*total_space.w,px.y>1?px.y:px.y*total_space.h))) { \ - __VA_ARGS__; \ - nk_menu_end(ui_ctx); \ - }} -#define UI_MENU_ITEM(title, ...) { \ - int hspace = maxi(ITEM_WIDTH, nk_text_width(ui_ctx,(title),0)); \ - nk_layout_row_push(ui_ctx, hspace); span += hspace; \ - if (nk_menu_begin_label(ui_ctx, (title), align, nk_vec2(1,1))) { \ - __VA_ARGS__; \ - nk_menu_close(ui_ctx); \ - nk_menu_end(ui_ctx); \ - }} -#define UI_MENU_ALIGN_RIGHT(px, ...) { \ - int hspace = total_space.w - span - (px) - 1.5 * ITEM_WIDTH; \ - nk_layout_row_push(ui_ctx, hspace); span += hspace; \ - if (nk_menu_begin_label(ui_ctx, (title), align = NK_TEXT_RIGHT, nk_vec2(1,1))) { \ - __VA_ARGS__; \ - nk_menu_close(ui_ctx); \ - nk_menu_end(ui_ctx); \ - }} - -// ---------------------------------------------------------------------------------------- -// ui - -#ifndef UI_ICONS_SMALL -//#define UI_ICONS_SMALL 1 -#endif - -#define UI_FONT_ENUM(carlito,b612) b612 // carlito - -#define UI_FONT_REGULAR UI_FONT_ENUM("Carlito", "B612") "-Regular.ttf" -#define UI_FONT_HEADING UI_FONT_ENUM("Carlito", "B612") "-BoldItalic.ttf" -#define UI_FONT_TERMINAL UI_FONT_ENUM("Inconsolata", "B612Mono") "-Regular.ttf" - -#if UI_LESSER_SPACING - enum { UI_SEPARATOR_HEIGHT = 5, UI_MENUBAR_ICON_HEIGHT = 20, UI_ROW_HEIGHT = 22, UI_MENUROW_HEIGHT = 32 }; -#else - enum { UI_SEPARATOR_HEIGHT = 10, UI_MENUBAR_ICON_HEIGHT = 25, UI_ROW_HEIGHT = 32, UI_MENUROW_HEIGHT = 32 }; -#endif - -#if UI_FONT_LARGE - #define UI_FONT_REGULAR_SIZE UI_FONT_ENUM(18,17) - #define UI_FONT_HEADING_SIZE UI_FONT_ENUM(20,19) - #define UI_FONT_TERMINAL_SIZE UI_FONT_ENUM(14,14) -#elif UI_FONT_SMALL - #define UI_FONT_REGULAR_SIZE UI_FONT_ENUM(13,14) - #define UI_FONT_HEADING_SIZE UI_FONT_ENUM(14.5,15) - #define UI_FONT_TERMINAL_SIZE UI_FONT_ENUM(14,14) -#else - #define UI_FONT_REGULAR_SIZE UI_FONT_ENUM(14.5,16) - #define UI_FONT_HEADING_SIZE UI_FONT_ENUM(16,17.5) - #define UI_FONT_TERMINAL_SIZE UI_FONT_ENUM(14,14) -#endif - - #define UI_FONT_REGULAR_SAMPLING UI_FONT_ENUM(vec3(1,1,1),vec3(1,1,1)) - #define UI_FONT_HEADING_SAMPLING UI_FONT_ENUM(vec3(1,1,1),vec3(1,1,1)) - #define UI_FONT_TERMINAL_SAMPLING UI_FONT_ENUM(vec3(1,1,1),vec3(1,1,1)) - -#if UI_ICONS_SMALL - #define UI_ICON_FONTSIZE UI_FONT_ENUM(16.5f,16.5f) - #define UI_ICON_SPACING_X UI_FONT_ENUM(-2,-2) - #define UI_ICON_SPACING_Y UI_FONT_ENUM(4.5f,3.5f) -#else - #define UI_ICON_FONTSIZE UI_FONT_ENUM(20,20) - #define UI_ICON_SPACING_X UI_FONT_ENUM(0,0) - #define UI_ICON_SPACING_Y UI_FONT_ENUM(6.5f,5.0f) -#endif - -#define MAX_VERTEX_MEMORY 512 * 1024 -#define MAX_ELEMENT_MEMORY 128 * 1024 - -static struct nk_context *ui_ctx; -static struct nk_glfw nk_glfw = {0}; - -void* ui_handle() { - return ui_ctx; -} - -static void nk_config_custom_fonts() { - #define UI_ICON_MIN ICON_MD_MIN - #define UI_ICON_MED ICON_MD_MAX_16 - #define UI_ICON_MAX ICON_MD_MAX - - #define ICON_BARS ICON_MD_MENU - #define ICON_FILE ICON_MD_INSERT_DRIVE_FILE - #define ICON_TRASH ICON_MD_DELETE - - struct nk_font *font = NULL; - struct nk_font_atlas *atlas = NULL; - nk_glfw3_font_stash_begin(&nk_glfw, &atlas); // nk_sdl_font_stash_begin(&atlas); - - // Default font(#1)... - int datalen = 0; - for( char *data = vfs_load(UI_FONT_REGULAR, &datalen); data; data = 0 ) { - float font_size = UI_FONT_REGULAR_SIZE; - struct nk_font_config cfg = nk_font_config(font_size); - cfg.oversample_h = UI_FONT_REGULAR_SAMPLING.x; - cfg.oversample_v = UI_FONT_REGULAR_SAMPLING.y; - cfg.pixel_snap = UI_FONT_REGULAR_SAMPLING.z; - #if UI_LESSER_SPACING - cfg.spacing.x -= 1.0; - #endif - // win32: struct nk_font *arial = nk_font_atlas_add_from_file(atlas, va("%s/fonts/arial.ttf",getenv("windir")), font_size, &cfg); font = arial ? arial : font; - // struct nk_font *droid = nk_font_atlas_add_from_file(atlas, "nuklear/extra_font/DroidSans.ttf", font_size, &cfg); font = droid ? droid : font; - struct nk_font *regular = nk_font_atlas_add_from_memory(atlas, data, datalen, font_size, &cfg); font = regular ? regular : font; - } - - // ...with icons embedded on it. - static struct icon_font { - const char *file; int yspacing; vec3 sampling; nk_rune range[3]; - } icons[] = { - {"MaterialIconsSharp-Regular.otf", UI_ICON_SPACING_Y, {1,1,1}, {UI_ICON_MIN, UI_ICON_MED /*MAX*/, 0}}, // "MaterialIconsOutlined-Regular.otf" "MaterialIcons-Regular.ttf" - {"materialdesignicons-webfont.ttf", 2, {1,1,1}, {0xF68C /*ICON_MDI_MIN*/, 0xF1CC7/*ICON_MDI_MAX*/, 0}}, - }; - for( int f = 0; f < countof(icons); ++f ) - for( char *data = vfs_load(icons[f].file, &datalen); data; data = 0 ) { - struct nk_font_config cfg = nk_font_config(UI_ICON_FONTSIZE); - cfg.range = icons[f].range; // nk_font_default_glyph_ranges(); - cfg.merge_mode = 1; - - cfg.spacing.x += UI_ICON_SPACING_X; - cfg.spacing.y += icons[f].yspacing; - // cfg.font->ascent += ICON_ASCENT; - // cfg.font->height += ICON_HEIGHT; - - cfg.oversample_h = icons[f].sampling.x; - cfg.oversample_v = icons[f].sampling.y; - cfg.pixel_snap = icons[f].sampling.z; - - #if UI_LESSER_SPACING - cfg.spacing.x -= 1.0; - #endif - - struct nk_font *icons = nk_font_atlas_add_from_memory(atlas, data, datalen, UI_ICON_FONTSIZE, &cfg); - } - - // Monospaced font. Used in terminals or consoles. - - for( char *data = vfs_load(UI_FONT_TERMINAL, &datalen); data; data = 0 ) { - const float font_size = UI_FONT_TERMINAL_SIZE; - static const nk_rune icon_range[] = {32, 127, 0}; - - struct nk_font_config cfg = nk_font_config(font_size); - cfg.range = icon_range; - - cfg.oversample_h = UI_FONT_TERMINAL_SAMPLING.x; - cfg.oversample_v = UI_FONT_TERMINAL_SAMPLING.y; - cfg.pixel_snap = UI_FONT_TERMINAL_SAMPLING.z; - - #if UI_LESSER_SPACING - cfg.spacing.x -= 1.0; - #endif - - // struct nk_font *proggy = nk_font_atlas_add_default(atlas, font_size, &cfg); - struct nk_font *bold = nk_font_atlas_add_from_memory(atlas, data, datalen, font_size, &cfg); - } - - // Extra optional fonts from here... - - for( char *data = vfs_load(UI_FONT_HEADING, &datalen); data; data = 0 ) { - struct nk_font_config cfg = nk_font_config(UI_FONT_HEADING_SIZE); - cfg.oversample_h = UI_FONT_HEADING_SAMPLING.x; - cfg.oversample_v = UI_FONT_HEADING_SAMPLING.y; - cfg.pixel_snap = UI_FONT_HEADING_SAMPLING.z; - - #if UI_LESSER_SPACING - cfg.spacing.x -= 1.0; - #endif - - struct nk_font *bold = nk_font_atlas_add_from_memory(atlas, data, datalen, UI_FONT_HEADING_SIZE, &cfg); - // font = bold ? bold : font; - } - - nk_glfw3_font_stash_end(&nk_glfw); // nk_sdl_font_stash_end(); -// ASSERT(font); - if(font) nk_style_set_font(ui_ctx, &font->handle); - - // Load Cursor: if you uncomment cursor loading please hide the cursor - // nk_style_load_all_cursors(ctx, atlas->cursors); glfwSetInputMode(win, GLFW_CURSOR, GLFW_CURSOR_HIDDEN); -} - -static void nk_config_custom_theme() { - #ifdef UI_HUE - float default_hue = UI_HUE; - #else - // 0.09 orange, 0.14 yellow, 0.40 green, 0.45 turquoise, 0.50 cyan, 0.52 default, 0.55 blue, 0.80 purple, 0.92 cherry, 0.96 red - float hues[] = { 0.40,0.45,0.50,0.52,0.55,0.80,0.92 }; - float default_hue = hues[ (int)((((date() / 10000) % 100) / 24.f) * countof(hues)) ]; // YYYYMMDDhhmmss -> hh as 0..1 -default_hue = 0.52; - #endif - float hue = clampf( optionf("--ui-hue", default_hue /*= 0.52*/), 0, 1 ); - struct nk_color main_hue = nk_hsv_f(hue+0.025, 0.80, 0.400); // washed - struct nk_color hover_hue = nk_hsv_f(hue+0.025, 1.00, 0.600); // vivid - struct nk_color active_hue = nk_hsv_f(hue-0.010, 1.00, 0.600); // bright; same /S/V than vivid, but H/ slighty biased towards a different luma on spectrum - struct nk_color main = nk_hsv_f( 0.600, 0.00, 0.125); // washed b/w - struct nk_color hover = nk_hsv_f( 0.900, 0.00, 0.000); // vivid b/w - struct nk_color active = nk_hsv_f( 0.600, 0.00, 0.150); // bright b/w - struct nk_color table[NK_COLOR_COUNT] = {0}; - table[NK_COLOR_TEXT] = nk_rgba(210, 210, 210, 255); - table[NK_COLOR_WINDOW] = nk_rgba(42, 42, 42, 245); - table[NK_COLOR_HEADER] = nk_rgba(51, 51, 56, 245); - table[NK_COLOR_BORDER] = nk_rgba(46, 46, 46, 255); - table[NK_COLOR_BUTTON] = main; - table[NK_COLOR_BUTTON_HOVER] = hover; - table[NK_COLOR_BUTTON_ACTIVE] = active; - // ok - table[NK_COLOR_TOGGLE] = nk_rgba(45*1.2, 53*1.2, 56*1.2, 255); // table[NK_COLOR_WINDOW]; // nk_rgba(45/1.2, 53/1.2, 56/1.2, 255); - table[NK_COLOR_TOGGLE_HOVER] = active; - table[NK_COLOR_TOGGLE_CURSOR] = main; // vivid_blue; - table[NK_COLOR_SCROLLBAR] = nk_rgba(50, 58, 61, 255); - table[NK_COLOR_SCROLLBAR_CURSOR] = main_hue; - table[NK_COLOR_SCROLLBAR_CURSOR_HOVER] = hover_hue; - table[NK_COLOR_SCROLLBAR_CURSOR_ACTIVE] = active_hue; - table[NK_COLOR_SLIDER] = nk_rgba(50, 58, 61, 255); - table[NK_COLOR_SLIDER_CURSOR] = main_hue; - table[NK_COLOR_SLIDER_CURSOR_HOVER] = hover_hue; - table[NK_COLOR_SLIDER_CURSOR_ACTIVE] = active_hue; - table[NK_COLOR_EDIT] = nk_rgba(50, 58, 61, 225); - table[NK_COLOR_EDIT_CURSOR] = nk_rgba(210, 210, 210, 255); - - // table[NK_COLOR_COMBO] = nk_rgba(50, 58, 61, 255); - - // table[NK_COLOR_PROPERTY] = nk_rgba(50, 58, 61, 255); -table[NK_COLOR_CHART] = nk_rgba(50, 58, 61, 255); -table[NK_COLOR_CHART_COLOR] = main_hue; -table[NK_COLOR_CHART_COLOR_HIGHLIGHT] = hover_hue; // nk_rgba(255, 0, 0, 255); - // table[NK_COLOR_TAB_HEADER] = main; - // table[NK_COLOR_SELECT] = nk_rgba(57, 67, 61, 255); - // table[NK_COLOR_SELECT_ACTIVE] = main; - -// table[NK_COLOR_SELECT] = nk_rgba(255,255,255,255); -table[NK_COLOR_SELECT_ACTIVE] = main_hue; - - // @transparent - #if !is(ems) - if( glfwGetWindowAttrib(window_handle(), GLFW_TRANSPARENT_FRAMEBUFFER) == GLFW_TRUE ) { - table[NK_COLOR_WINDOW].a = - table[NK_COLOR_HEADER].a = 255; - } - #endif - // @transparent - - nk_style_default(ui_ctx); - nk_style_from_table(ui_ctx, table); - - - if(1) - { - struct nk_style_selectable *select; - select = &ui_ctx->style.selectable; -// nk_zero_struct(*select); -// select->hover.data.color = hover_hue; -// select->normal_active = nk_style_item_color(table[NK_COLOR_SELECT_ACTIVE]); - select->text_hover = nk_rgba(0,192,255,255); - select->text_hover_active = select->text_hover; - select->text_normal_active = select->text_hover; // nk_style_item_color(table[NK_COLOR_SELECT_ACTIVE]).data.color; - select->rounding = 2.0f; - } - - - struct nk_style *s = &ui_ctx->style; - s->window.spacing = nk_vec2(4,0); - s->window.combo_border = 0.f; - s->window.scrollbar_size = nk_vec2(5,5); - s->property.rounding = 0; - s->combo.border = 0; - s->combo.button_padding.x = -18; - s->button.border = 1; - s->edit.border = 0; - - if( UI_ROW_HEIGHT < 32 ) { // UI_LESSER_SPACING - s->window.header.label_padding.y /= 2; // 2 - s->window.header.padding.y /= 2; // /= 4 -> 1 - } -} - -static float ui_alpha = 1; -static array(float) ui_alphas; -static void ui_alpha_push(float alpha) { - array_push(ui_alphas, ui_alpha); - ui_alpha = alpha; - - struct nk_color c; - struct nk_style *s = &ui_ctx->style; - c = s->window.background; c.a = alpha * 255; nk_style_push_color(ui_ctx, &s->window.background, c); - c = s->text.color; c.a = alpha * 255; nk_style_push_color(ui_ctx, &s->text.color, c); - c = s->window.fixed_background.data.color; c.a = alpha * 255; nk_style_push_style_item(ui_ctx, &s->window.fixed_background, nk_style_item_color(c)); -} -static void ui_alpha_pop() { - if( array_count(ui_alphas) ) { - nk_style_pop_style_item(ui_ctx); - nk_style_pop_color(ui_ctx); - nk_style_pop_color(ui_ctx); - - ui_alpha = *array_back(ui_alphas); - array_pop(ui_alphas); - } -} - -// ----------------------------------------------------------------------------- -// ui menu - -typedef struct ui_item_t { - char *buf; - int bufcap; - int type; // 0xED17 'edit' for a writeable inputbox buffer, else read-only label -} ui_item_t; - -static array(ui_item_t) ui_items; // queued menu names. to be evaluated during next frame -static vec2 ui_results = {0}; // clicked menu items from last frame - -int ui_item() { - return ui_items ? (ui_results.x == array_count(ui_items) ? ui_results.y : 0) : 0; -} - -int ui_menu(const char *items) { // semicolon- or comma-separated items - array_push(ui_items, ((ui_item_t){STRDUP(items),0,0})); - return ui_item(); -} -int ui_menu_editbox(char *buf, int bufcap) { - array_push(ui_items, ((ui_item_t){buf,bufcap,0xED17})); - return ui_item(); -} - -int ui_has_menubar() { - return ui_using_v2_menubar || !!ui_items; // ? UI_MENUROW_HEIGHT + 8 : 0; // array_count(ui_items) > 0; -} - -static -void ui_separator_line() { - struct nk_rect space; nk_layout_peek(&space, ui_ctx); // bounds.w *= 0.95f; - struct nk_command_buffer *canvas = nk_window_get_canvas(ui_ctx); - nk_stroke_line(canvas, space.x+0,space.y+0,space.x+space.w,space.y+0, 3.0, nk_rgb(128,128,128)); -} - -NK_API nk_bool -nk_menu_begin_text_styled(struct nk_context *ctx, const char *title, int len, - nk_flags align, struct nk_vec2 size, struct nk_style_button *style_button) //< @r-lyeh: added style_button param -{ - struct nk_window *win; - const struct nk_input *in; - struct nk_rect header; - int is_clicked = nk_false; - nk_flags state; - - NK_ASSERT(ctx); - NK_ASSERT(ctx->current); - NK_ASSERT(ctx->current->layout); - if (!ctx || !ctx->current || !ctx->current->layout) - return 0; - - win = ctx->current; - state = nk_widget(&header, ctx); - if (!state) return 0; - in = (state == NK_WIDGET_ROM || win->flags & NK_WINDOW_ROM) ? 0 : &ctx->input; - if (nk_do_button_text(&ctx->last_widget_state, &win->buffer, header, - title, len, align, NK_BUTTON_DEFAULT, style_button, in, ctx->style.font)) - is_clicked = nk_true; - return nk_menu_begin(ctx, win, title, is_clicked, header, size); -} - -static -vec2 ui_toolbar_(array(ui_item_t) ui_items, vec2 ui_results) { - // adjust size for all the upcoming UI elements - // old method: nk_layout_row_dynamic(ui_ctx, UI_MENUBAR_ICON_HEIGHT/*h*/, array_count(ui_items)); - { - const struct nk_style *style = &ui_ctx->style; - - nk_layout_row_template_begin(ui_ctx, UI_MENUBAR_ICON_HEIGHT/*h*/); - for(int i = 0; i < array_count(ui_items); ++i) { - char first_token[512]; - sscanf(ui_items[i].buf, "%[^,;|]", first_token); // @fixme: vsnscanf - - char *tooltip = strchr(first_token, '@'); - int len = tooltip ? (int)(tooltip - first_token /*- 1*/) : strlen(first_token); - - float pixels_width = nk_text_width(ui_ctx, first_token, len); - pixels_width += style->window.header.label_padding.x * 2 + style->window.header.padding.x * 2; - if( pixels_width < 5 ) pixels_width = 5; - nk_layout_row_template_push_static(ui_ctx, pixels_width); - } - nk_layout_row_template_end(ui_ctx); - } - - // display the UI elements - bool has_popups = ui_popups(); - for( int i = 0, end = array_count(ui_items); i < end; ++i ) { - array(char*) ids = strsplit(ui_items[i].buf, ",;|"); - - // transparent style - static struct nk_style_button transparent_style; - do_once transparent_style = ui_ctx->style.button; - do_once transparent_style.normal.data.color = nk_rgba(0,0,0,0); - do_once transparent_style.border_color = nk_rgba(0,0,0,0); - do_once transparent_style.active = transparent_style.normal; - do_once transparent_style.hover = transparent_style.normal; - do_once transparent_style.hover.data.color = nk_rgba(0,0,0,127); - transparent_style.text_alignment = NK_TEXT_ALIGN_CENTERED|NK_TEXT_ALIGN_MIDDLE; // array_count(ids) > 1 ? NK_TEXT_ALIGN_LEFT : NK_TEXT_ALIGN_CENTERED; - - char *tooltip = strchr(ids[0], '@'); - int len = tooltip ? (int)(tooltip - ids[0]) : strlen(ids[0]); - - // single button - if( array_count(ids) == 1 ) { - // tooltip - if( tooltip && !has_popups ) { - struct nk_rect bounds = nk_widget_bounds(ui_ctx); - if (nk_input_is_mouse_hovering_rect(&ui_ctx->input, bounds) && nk_window_has_focus(ui_ctx)) { - nk_tooltip(ui_ctx, tooltip+1); - } - } - // input... - if( ui_items[i].type == 0xED17 ) { - int active = nk_edit_string_zero_terminated(ui_ctx, NK_EDIT_AUTO_SELECT|NK_EDIT_CLIPBOARD|NK_EDIT_FIELD/*NK_EDIT_BOX*/|NK_EDIT_SIG_ENTER, ui_items[i].buf, ui_items[i].bufcap, nk_filter_default); - if( !!(active & NK_EDIT_COMMITED) ) ui_results = vec2(i+1, 0+1), nk_edit_unfocus(ui_ctx); - } - else - // ... else text - if( nk_button_text_styled(ui_ctx, &transparent_style, ids[0], len) ) { - ui_results = vec2(i+1, 0+1); - } - } - else { - struct nk_vec2 dims = {120, array_count(ids) * UI_MENUROW_HEIGHT}; - const struct nk_style *style = &ui_ctx->style; - const struct nk_user_font *f = style->font; - static array(float) lens = 0; array_resize(lens, array_count(ids)); - lens[0] = len; - for( int j = 1; j < array_count(ids); ++j ) { - lens[j] = strlen(ids[j]); - float width_px = f->width(f->userdata, f->height, ids[j], lens[j]); - dims.x = maxf(dims.x, width_px); - } - dims.x += 2 * style->window.header.label_padding.x; - - // dropdown menu - if( nk_menu_begin_text_styled(ui_ctx, ids[0], lens[0], NK_TEXT_ALIGN_CENTERED|NK_TEXT_ALIGN_MIDDLE, dims, &transparent_style) ) { - nk_layout_row_dynamic(ui_ctx, 0, 1); - - for( int j = 1; j < array_count(ids); ++j ) { - char *item = ids[j]; - if( *item == '-' ) { - while(*item == '-') ++item, --lens[j]; - //nk_menu_item_label(ui_ctx, "---", NK_TEXT_LEFT); - ui_separator_line(); - } - - if( nk_menu_item_text(ui_ctx, item, lens[j], NK_TEXT_LEFT) ) { - ui_results = vec2(i+1, j+1-1); - } - } - - nk_menu_end(ui_ctx); - } - } - } - - return ui_results; -} - -int ui_toolbar(const char *icons) { // usage: int clicked_icon = ui_toolbar( ICON_1 ";" ICON_2 ";" ICON_3 ";" ICON_4 ); - vec2 results = {0}; - array(char*) items = strsplit(icons, ",;|"); - static array(ui_item_t) temp = 0; - array_resize(temp, array_count(items)); - for( int i = 0; i < array_count(items); ++i ) temp[i].buf = items[i], temp[i].bufcap = 0, temp[i].type = 0; - return ui_toolbar_(temp, results).x; -} - - -// UI Windows handlers. These are not OS Windows but UI Windows instead. For OS Windows check window_*() API. - -#ifndef WINDOWS_INI -#define WINDOWS_INI editor_path("windows.ini") -#endif - -static map(char*,unsigned) ui_windows = 0; - -static void ui_init() { - do_once { - nk_config_custom_fonts(); - nk_config_custom_theme(); - - map_init(ui_windows, less_str, hash_str); - } -} - -static int ui_window_register(const char *panel_or_window_title) { - unsigned *state = map_find_or_add_allocated_key(ui_windows, STRDUP(panel_or_window_title), 0); - - // check for visibility flag on first call - int visible = 0; - if( *state == 0 ) { - static ini_t i = 0; - do_once i = ini(WINDOWS_INI); // @leak - char **found = i ? map_find(i, va("%s.visible", panel_or_window_title)) : NULL; - if( found ) visible = (*found)[0] == '1'; - } - - *state |= 2; - return visible; -} -int ui_visible(const char *panel_or_window_title) { - return *map_find_or_add_allocated_key(ui_windows, STRDUP(panel_or_window_title), 0) & 1; -} -int ui_show(const char *panel_or_window_title, int enabled) { - unsigned *found = map_find_or_add_allocated_key(ui_windows, STRDUP(panel_or_window_title), 0); - if( enabled ) { - *found |= 1; - nk_window_collapse(ui_ctx, panel_or_window_title, NK_MAXIMIZED); // in case windows was previously collapsed - } else { - *found &= ~1; - } - return !!enabled; -} -int ui_dims(const char *panel_or_window_title, float width, float height) { - nk_window_set_size(ui_ctx, panel_or_window_title, (struct nk_vec2){width, height}); - return 0; -} -vec2 ui_get_dims() { - return (vec2){nk_window_get_width(ui_ctx), nk_window_get_height(ui_ctx)}; -} -static char *ui_build_window_list() { - char *build_windows_menu = 0; - strcatf(&build_windows_menu, "%s;", ICON_MD_VIEW_QUILT); // "Windows"); - for each_map_ptr_sorted(ui_windows, char*, k, unsigned, v) { - strcatf(&build_windows_menu, "%s %s;", ui_visible(*k) ? ICON_MD_CHECK_BOX : ICON_MD_CHECK_BOX_OUTLINE_BLANK, *k); // ICON_MD_VISIBILITY : ICON_MD_VISIBILITY_OFF, *k); // ICON_MD_TOGGLE_ON : ICON_MD_TOGGLE_OFF, *k); - } - strcatf(&build_windows_menu, "-%s;%s", ICON_MD_RECYCLING " Reset layout", ICON_MD_SAVE_AS " Save layout"); - return build_windows_menu; // @leak if discarded -} -static int ui_layout_all_reset(const char *mask); -static int ui_layout_all_save_disk(const char *mask); -static int ui_layout_all_load_disk(const char *mask); - - -static -void ui_menu_render() { - // clean up from past frame - ui_results = vec2(0,0); - if( !ui_items ) return; - if( !array_count(ui_items) ) return; - -// artificially inject Windows menu on the first icon -bool show_window_menu = !!array_count(ui_items); -if( show_window_menu ) { - array_push_front(ui_items, ((ui_item_t){ui_build_window_list(), 0, 0})); -} - - // process menus - if( nk_begin(ui_ctx, "Menu", nk_rect(0, 0, window_width(), UI_MENUROW_HEIGHT), NK_WINDOW_NO_SCROLLBAR/*|NK_WINDOW_BACKGROUND*/)) { - if( ui_ctx->current ) { - nk_menubar_begin(ui_ctx); - - ui_results = ui_toolbar_(ui_items, ui_results); - - //nk_layout_row_end(ui_ctx); - nk_menubar_end(ui_ctx); - } - } - nk_end(ui_ctx); - -if( show_window_menu ) { - // if clicked on first menu (Windows) - if( ui_results.x == 1 ) { - array(char*) split = strsplit(ui_items[0].buf,";"); // *array_back(ui_items), ";"); - const char *title = split[(int)ui_results.y]; title += title[0] == '-'; title += 3 * (title[0] == '\xee'); title += title[0] == ' '; /*skip separator+emoji+space*/ - // toggle window unless clicked on lasts items {"reset layout", "save layout"} - bool clicked_reset_layout = ui_results.y == array_count(split) - 2; - bool clicked_save_layout = ui_results.y == array_count(split) - 1; - /**/ if( clicked_reset_layout ) ui_layout_all_reset("*"); - else if( clicked_save_layout ) file_delete(WINDOWS_INI), ui_layout_all_save_disk("*"); - else ui_show(title, ui_visible(title) ^ true); - // reset value so developers don't catch this click - ui_results = vec2(0,0); - } - // restore state prior to previously injected Windows menu - else - ui_results.x = ui_results.x > 0 ? ui_results.x - 1 : 0; -} - - // clean up for next frame - for( int i = 0; i < array_count(ui_items); ++i ) { - if(ui_items[i].type != 0xED17) - FREE(ui_items[i].buf); - } - array_resize(ui_items, 0); -} - -// ----------------------------------------------------------------------------- - -static int ui_dirty = 1; -static int ui_has_active_popups = 0; -static float ui_hue = 0; // hue -static int ui_is_hover = 0; -static int ui_is_active = 0; -static uint64_t ui_active_mask = 0; - -int ui_popups() { - return ui_has_active_popups; -} -int ui_hover() { - return ui_is_hover; -} -int ui_active() { - return ui_is_active; //window_has_cursor() && nk_window_is_any_hovered(ui_ctx) && nk_item_is_any_active(ui_ctx); -} - -static -int ui_set_enable_(int enabled) { - static struct nk_style off, on; - do_once { - off = on = ui_ctx->style; - float alpha = 0.5f; - - off.text.color.a *= alpha; - -#if 0 - off.button.normal.data.color.a *= alpha; - off.button.hover.data.color.a *= alpha; - off.button.active.data.color.a *= alpha; - off.button.border_color.a *= alpha; - off.button.text_background.a *= alpha; - off.button.text_normal.a *= alpha; - off.button.text_hover.a *= alpha; - off.button.text_active.a *= alpha; - - off.contextual_button.normal.data.color.a *= alpha; - off.contextual_button.hover.data.color.a *= alpha; - off.contextual_button.active.data.color.a *= alpha; - off.contextual_button.border_color.a *= alpha; - off.contextual_button.text_background.a *= alpha; - off.contextual_button.text_normal.a *= alpha; - off.contextual_button.text_hover.a *= alpha; - off.contextual_button.text_active.a *= alpha; -#endif - off.menu_button.normal.data.color.a *= alpha; - off.menu_button.hover.data.color.a *= alpha; - off.menu_button.active.data.color.a *= alpha; - off.menu_button.border_color.a *= alpha; - off.menu_button.text_background.a *= alpha; - off.menu_button.text_normal.a *= alpha; - off.menu_button.text_hover.a *= alpha; - off.menu_button.text_active.a *= alpha; -#if 0 - off.option.normal.data.color.a *= alpha; - off.option.hover.data.color.a *= alpha; - off.option.active.data.color.a *= alpha; - off.option.border_color.a *= alpha; - off.option.cursor_normal.data.color.a *= alpha; - off.option.cursor_hover.data.color.a *= alpha; - off.option.text_normal.a *= alpha; - off.option.text_hover.a *= alpha; - off.option.text_active.a *= alpha; - off.option.text_background.a *= alpha; - - off.checkbox.normal.data.color.a *= alpha; - off.checkbox.hover.data.color.a *= alpha; - off.checkbox.active.data.color.a *= alpha; - off.checkbox.border_color.a *= alpha; - off.checkbox.cursor_normal.data.color.a *= alpha; - off.checkbox.cursor_hover.data.color.a *= alpha; - off.checkbox.text_normal.a *= alpha; - off.checkbox.text_hover.a *= alpha; - off.checkbox.text_active.a *= alpha; - off.checkbox.text_background.a *= alpha; - - off.selectable.normal.data.color.a *= alpha; - off.selectable.hover.data.color.a *= alpha; - off.selectable.pressed.data.color.a *= alpha; - off.selectable.normal_active.data.color.a *= alpha; - off.selectable.hover_active.data.color.a *= alpha; - off.selectable.pressed_active.data.color.a *= alpha; - off.selectable.text_normal.a *= alpha; - off.selectable.text_hover.a *= alpha; - off.selectable.text_pressed.a *= alpha; - off.selectable.text_normal_active.a *= alpha; - off.selectable.text_hover_active.a *= alpha; - off.selectable.text_pressed_active.a *= alpha; - off.selectable.text_background.a *= alpha; - - off.slider.normal.data.color.a *= alpha; - off.slider.hover.data.color.a *= alpha; - off.slider.active.data.color.a *= alpha; - off.slider.border_color.a *= alpha; - off.slider.bar_normal.a *= alpha; - off.slider.bar_hover.a *= alpha; - off.slider.bar_active.a *= alpha; - off.slider.bar_filled.a *= alpha; - off.slider.cursor_normal.data.color.a *= alpha; - off.slider.cursor_hover.data.color.a *= alpha; - off.slider.cursor_active.data.color.a *= alpha; - off.slider.dec_button.normal.data.color.a *= alpha; - off.slider.dec_button.hover.data.color.a *= alpha; - off.slider.dec_button.active.data.color.a *= alpha; - off.slider.dec_button.border_color.a *= alpha; - off.slider.dec_button.text_background.a *= alpha; - off.slider.dec_button.text_normal.a *= alpha; - off.slider.dec_button.text_hover.a *= alpha; - off.slider.dec_button.text_active.a *= alpha; - off.slider.inc_button.normal.data.color.a *= alpha; - off.slider.inc_button.hover.data.color.a *= alpha; - off.slider.inc_button.active.data.color.a *= alpha; - off.slider.inc_button.border_color.a *= alpha; - off.slider.inc_button.text_background.a *= alpha; - off.slider.inc_button.text_normal.a *= alpha; - off.slider.inc_button.text_hover.a *= alpha; - off.slider.inc_button.text_active.a *= alpha; - - off.progress.normal.data.color.a *= alpha; - off.progress.hover.data.color.a *= alpha; - off.progress.active.data.color.a *= alpha; - off.progress.border_color.a *= alpha; - off.progress.cursor_normal.data.color.a *= alpha; - off.progress.cursor_hover.data.color.a *= alpha; - off.progress.cursor_active.data.color.a *= alpha; - off.progress.cursor_border_color.a *= alpha; -#endif - off.property.normal.data.color.a *= alpha; - off.property.hover.data.color.a *= alpha; - off.property.active.data.color.a *= alpha; - off.property.border_color.a *= alpha; - off.property.label_normal.a *= alpha; - off.property.label_hover.a *= alpha; - off.property.label_active.a *= alpha; - off.property.edit.normal.data.color.a *= alpha; - off.property.edit.hover.data.color.a *= alpha; - off.property.edit.active.data.color.a *= alpha; - off.property.edit.border_color.a *= alpha; - off.property.edit.cursor_normal.a *= alpha; - off.property.edit.cursor_hover.a *= alpha; - off.property.edit.cursor_text_normal.a *= alpha; - off.property.edit.cursor_text_hover.a *= alpha; - off.property.edit.text_normal.a *= alpha; - off.property.edit.text_hover.a *= alpha; - off.property.edit.text_active.a *= alpha; - off.property.edit.selected_normal.a *= alpha; - off.property.edit.selected_hover.a *= alpha; - off.property.edit.selected_text_normal.a *= alpha; - off.property.edit.selected_text_hover.a *= alpha; - off.property.dec_button.normal.data.color.a *= alpha; - off.property.dec_button.hover.data.color.a *= alpha; - off.property.dec_button.active.data.color.a *= alpha; - off.property.dec_button.border_color.a *= alpha; - off.property.dec_button.text_background.a *= alpha; - off.property.dec_button.text_normal.a *= alpha; - off.property.dec_button.text_hover.a *= alpha; - off.property.dec_button.text_active.a *= alpha; - off.property.inc_button.normal.data.color.a *= alpha; - off.property.inc_button.hover.data.color.a *= alpha; - off.property.inc_button.active.data.color.a *= alpha; - off.property.inc_button.border_color.a *= alpha; - off.property.inc_button.text_background.a *= alpha; - off.property.inc_button.text_normal.a *= alpha; - off.property.inc_button.text_hover.a *= alpha; - off.property.inc_button.text_active.a *= alpha; - - off.edit.normal.data.color.a *= alpha; - off.edit.hover.data.color.a *= alpha; - off.edit.active.data.color.a *= alpha; - off.edit.border_color.a *= alpha; - off.edit.cursor_normal.a *= alpha; - off.edit.cursor_hover.a *= alpha; - off.edit.cursor_text_normal.a *= alpha; - off.edit.cursor_text_hover.a *= alpha; - off.edit.text_normal.a *= alpha; - off.edit.text_hover.a *= alpha; - off.edit.text_active.a *= alpha; - off.edit.selected_normal.a *= alpha; - off.edit.selected_hover.a *= alpha; - off.edit.selected_text_normal.a *= alpha; - off.edit.selected_text_hover.a *= alpha; -#if 0 - off.chart.background.data.color.a *= alpha; - off.chart.border_color.a *= alpha; - off.chart.selected_color.a *= alpha; - off.chart.color.a *= alpha; - - off.scrollh.normal.data.color.a *= alpha; - off.scrollh.hover.data.color.a *= alpha; - off.scrollh.active.data.color.a *= alpha; - off.scrollh.border_color.a *= alpha; - off.scrollh.cursor_normal.data.color.a *= alpha; - off.scrollh.cursor_hover.data.color.a *= alpha; - off.scrollh.cursor_active.data.color.a *= alpha; - off.scrollh.cursor_border_color.a *= alpha; - - off.scrollv.normal.data.color.a *= alpha; - off.scrollv.hover.data.color.a *= alpha; - off.scrollv.active.data.color.a *= alpha; - off.scrollv.border_color.a *= alpha; - off.scrollv.cursor_normal.data.color.a *= alpha; - off.scrollv.cursor_hover.data.color.a *= alpha; - off.scrollv.cursor_active.data.color.a *= alpha; - off.scrollv.cursor_border_color.a *= alpha; - - off.tab.background.data.color.a *= alpha; - off.tab.border_color.a *= alpha; - off.tab.text.a *= alpha; -#endif - off.combo.normal.data.color.a *= alpha; - off.combo.hover.data.color.a *= alpha; - off.combo.active.data.color.a *= alpha; - off.combo.border_color.a *= alpha; - off.combo.label_normal.a *= alpha; - off.combo.label_hover.a *= alpha; - off.combo.label_active.a *= alpha; - off.combo.symbol_normal.a *= alpha; - off.combo.symbol_hover.a *= alpha; - off.combo.symbol_active.a *= alpha; - off.combo.button.normal.data.color.a *= alpha; - off.combo.button.hover.data.color.a *= alpha; - off.combo.button.active.data.color.a *= alpha; - off.combo.button.border_color.a *= alpha; - off.combo.button.text_background.a *= alpha; - off.combo.button.text_normal.a *= alpha; - off.combo.button.text_hover.a *= alpha; - off.combo.button.text_active.a *= alpha; -#if 0 - off.window.fixed_background.data.color.a *= alpha; - off.window.background.a *= alpha; - off.window.border_color.a *= alpha; - off.window.popup_border_color.a *= alpha; - off.window.combo_border_color.a *= alpha; - off.window.contextual_border_color.a *= alpha; - off.window.menu_border_color.a *= alpha; - off.window.group_border_color.a *= alpha; - off.window.tooltip_border_color.a *= alpha; - off.window.scaler.data.color.a *= alpha; - off.window.header.normal.data.color.a *= alpha; - off.window.header.hover.data.color.a *= alpha; - off.window.header.active.data.color.a *= alpha; -#endif - } - static struct nk_input input; - if (!enabled) { - ui_alpha_push(0.5); - ui_ctx->style = off; // .button = off.button; - input = ui_ctx->input; - memset(&ui_ctx->input, 0, sizeof(ui_ctx->input)); - } else { - ui_alpha_pop(); - ui_ctx->style = on; // .button = on.button; - ui_ctx->input = input; - } - return enabled; -} - -static int ui_is_enabled = 1; -int ui_enable() { - return ui_is_enabled == 1 ? 0 : ui_set_enable_(ui_is_enabled = 1); -} -int ui_disable() { - return ui_is_enabled == 0 ? 0 : ui_set_enable_(ui_is_enabled = 0); -} -int ui_enabled() { - return ui_is_enabled; -} - -static -void ui_destroy(void) { - if(ui_ctx) { - nk_glfw3_shutdown(&nk_glfw); // nk_sdl_shutdown(); - ui_ctx = 0; - } -} -static -void ui_create() { - do_once atexit(ui_destroy); - - if( ui_dirty ) { - nk_glfw3_new_frame(&nk_glfw); //g->nk_glfw); - ui_dirty = 0; - - ui_enable(); - } -} - -enum { - UI_NOTIFICATION_1 = 32, // sets panel as 1-story notification. used by ui_notify() - UI_NOTIFICATION_2 = 64, // sets panel as 2-story notification. used by ui_notify() -}; - -struct ui_notify { - char *title; - char *body; // char *icon; - float timeout; - float alpha; - int used; -}; - -static array(struct ui_notify) ui_notifications; // format=("%d*%s\n%s", timeout, title, body) - -static -void ui_notify_render() { - // draw queued notifications - if( array_count(ui_notifications) ) { - struct ui_notify *n = array_back(ui_notifications); - - static double timeout = 0; - timeout += 1/60.f; // window_delta(); // @fixme: use editor_time() instead - - ui_alpha_push( timeout >= n->timeout ? 1 - clampf(timeout - n->timeout,0,1) : 1 ); - - if( timeout < (n->timeout + 1) ) { // N secs display + 1s fadeout - if(n->used++ < 3) nk_window_set_focus(ui_ctx, "!notify"); - - if( ui_panel( "!notify", n->title && n->body ? UI_NOTIFICATION_2 : UI_NOTIFICATION_1 ) ) { - if(n->title) ui_label(n->title); - if(n->body) ui_label(n->body); - - ui_panel_end(); - } - } - - if( timeout >= (n->timeout + 2) ) { // 1s fadeout + 1s idle - timeout = 0; - - if(n->title) FREE(n->title); - if(n->body) FREE(n->body); - array_pop(ui_notifications); - } - - ui_alpha_pop(); - } -} - -static -void ui_hue_cycle( unsigned num_cycles ) { - // cycle color (phi ratio) - for( unsigned i = 0; i < num_cycles; ++i ) { - //ui_hue = (ui_hue+0.61803f)*1.61803f; while(ui_hue > 1) ui_hue -= 1; - ui_hue *= 1.61803f / 1.85f; while(ui_hue > 1) ui_hue -= 1; - } -} - -static bool win_debug_visible = true; - -static -void ui_render() { - // draw queued menus - ui_notify_render(); - ui_menu_render(); - - /* IMPORTANT: `nk_sdl_render` modifies some global OpenGL state - * with blending, scissor, face culling, depth test and viewport and - * defaults everything back into a default state. - * Make sure to either a.) save and restore or b.) reset your own state after - * rendering the UI. */ - //nk_sdl_render(NK_ANTI_ALIASING_ON, MAX_VERTEX_MEMORY, MAX_ELEMENT_MEMORY); - - if (win_debug_visible) { - GLfloat bkColor[4]; glGetFloatv(GL_COLOR_CLEAR_VALUE, bkColor); // @transparent - glClearColor(0,0,0,1); // @transparent - glColorMask(GL_TRUE,GL_TRUE,GL_TRUE,!bkColor[3] ? GL_TRUE : GL_FALSE); // @transparent - nk_glfw3_render(&nk_glfw, NK_ANTI_ALIASING_ON, MAX_VERTEX_MEMORY, MAX_ELEMENT_MEMORY); - glColorMask(GL_TRUE,GL_TRUE,GL_TRUE,GL_TRUE); // @transparent - } else { - nk_clear(&nk_glfw.ctx); - } - -#if is(ems) - glFinish(); -#endif - - ui_dirty = 1; - ui_hue = 0; - - ui_is_hover = nk_window_is_any_hovered(ui_ctx) && window_has_cursor(); - - if(input_down(MOUSE_L)) - ui_is_active = (ui_is_hover && nk_item_is_any_active(ui_ctx)); - if(input_up(MOUSE_L)) - ui_is_active = 0; -} - - -// ----------------------------------------------------------------------------- -// save/restore all window layouts on every framebuffer resize - -#define UI_SNAP_PX 1 /*treshold of pixels when snapping panels/windows to the application borders [1..N]*/ -#define UI_ANIM_ALPHA 0.9 /*animation alpha used when restoring panels/windows state from application resizing events: [0..1]*/ -//#define UI_MENUBAR_Y 32 // menubar and row - -typedef struct ui_layout { - const char *title; - - bool is_panel; - - vec2 desktop; - vec2 p0,p1; - float l0,l1; - - float alpha; - float anim_timer; - -} ui_layout; - -static array(ui_layout) ui_layouts[2] = {0}; - -static -int ui_layout_find(const char *title, bool is_panel) { - int i = 0; - for each_array_ptr(ui_layouts[is_panel], ui_layout, s) { - if( !strcmp(title, s->title) ) return i; - ++i; - } - ui_layout s = {0}; - s.is_panel = is_panel; - s.title = STRDUP(title); - array_push(ui_layouts[is_panel], s); - return array_count(ui_layouts[is_panel]) - 1; -} - -static -void ui_layout_save_mem(int idx, vec2 desktop, float workarea_h, struct nk_rect *xywh_, bool is_panel) { - struct nk_rect xywh = *xywh_; //< workaround for a (tcc-0.9.27+lubuntu16) bug, where xywh_ is never populated (ie, empty always) when passed by-copy - - ui_layout *s = &ui_layouts[is_panel][idx]; - - struct nk_window *win = nk_window_find(ui_ctx, s->title); - // if(win && win->flags & NK_WINDOW_FULLSCREEN) return; // skip if maximized - - s->desktop = desktop; - -float excess = 0; -if( win && (win->flags & NK_WINDOW_MINIMIZED)) { - excess = xywh.h - UI_MENUROW_HEIGHT; - xywh.h = UI_MENUROW_HEIGHT; -} - - // sanity checks - if(xywh.x<0) xywh.x = 0; - if(xywh.w>desktop.w-UI_SNAP_PX) xywh.w = desktop.w-UI_SNAP_PX-1; - - if(xywh.ydesktop.h-workarea_h-UI_SNAP_PX) xywh.h = desktop.h-workarea_h-UI_SNAP_PX-1; - - if((xywh.x+xywh.w)>desktop.w) xywh.x-= xywh.x+xywh.w-desktop.w; - if((xywh.y+xywh.h)>desktop.h) xywh.y-= xywh.y+xywh.h-desktop.h; - -if( win && (win->flags & NK_WINDOW_MINIMIZED)) { - xywh.h += excess; -} - - // build reconstruction vectors from bottom-right corner - s->p0 = vec2(xywh.x/s->desktop.x,xywh.y/s->desktop.y); - s->p1 = vec2(xywh.w/s->desktop.x,xywh.h/s->desktop.y); - s->p0 = sub2(s->p0, vec2(1,1)); s->l0 = len2(s->p0); - s->p1 = sub2(s->p1, vec2(1,1)); s->l1 = len2(s->p1); -} - -static -struct nk_rect ui_layout_load_mem(int idx, vec2 desktop, bool is_panel) { - ui_layout *s = &ui_layouts[is_panel][idx]; - - // extract reconstruction coords from bottom-right corner - vec2 p0 = mul2(add2(vec2(1,1), scale2(norm2(s->p0), s->l0)), desktop); - vec2 p1 = mul2(add2(vec2(1,1), scale2(norm2(s->p1), s->l1)), desktop); - - return nk_rect( p0.x, p0.y, p1.x, p1.y ); -} - -static -int ui_layout_all_reset(const char *mask) { - ui_layout z = {0}; - - vec2 desktop = vec2(window_width(), window_height()); - float workarea_h = ui_has_menubar()*UI_MENUROW_HEIGHT; // @fixme workarea -> reserved_area - - for( int is_panel = 0; is_panel < 2; ++is_panel ) { - for( int j = 0; j < array_count(ui_layouts[is_panel]); ++j ) { - if( ui_layouts[is_panel][j].title ) { - - if( nk_window_is_hidden(ui_ctx, ui_layouts[is_panel][j].title) ) continue; - - struct nk_rect xywh = { 0, workarea_h + j * UI_MENUROW_HEIGHT, desktop.w / 3.333, UI_MENUROW_HEIGHT }; - if( is_panel ) { - xywh.x = 0; - xywh.y = workarea_h + j * UI_MENUROW_HEIGHT; - xywh.w = desktop.w / 4; - xywh.h = desktop.h / 3; - } else { - xywh.x = desktop.w / 3.00 + j * UI_MENUROW_HEIGHT; - xywh.y = workarea_h + j * UI_MENUROW_HEIGHT; - xywh.w = desktop.w / 4; - xywh.h = desktop.h / 3; - } - nk_window_set_focus(ui_ctx, ui_layouts[is_panel][j].title); - nk_window_collapse(ui_ctx, ui_layouts[is_panel][j].title, is_panel ? 0 : 1); - struct nk_window* win = is_panel ? 0 : nk_window_find(ui_ctx, ui_layouts[is_panel][j].title ); - if(win) win->flags &= ~NK_WINDOW_FULLSCREEN; - if(win) win->flags &= ~NK_WINDOW_MINIMIZED; - ui_layout_save_mem(j, desktop, workarea_h, &xywh, is_panel); - ui_layouts[is_panel][j].anim_timer = 1.0; - } - } - } - - return 1; -} - -static -int ui_layout_all_save_disk(const char *mask) { - float w = window_width(), h = window_height(); - for each_map_ptr_sorted(ui_windows, char*, k, unsigned, v) { - struct nk_window *win = nk_window_find(ui_ctx, *k); - if( win && strmatchi(*k, mask) ) { - ini_write(WINDOWS_INI, *k, "x", va("%f", win->bounds.x / w )); - ini_write(WINDOWS_INI, *k, "y", va("%f", win->bounds.y / h )); - ini_write(WINDOWS_INI, *k, "w", va("%f", win->bounds.w / w )); - ini_write(WINDOWS_INI, *k, "h", va("%f", win->bounds.h / h )); - ini_write(WINDOWS_INI, *k, "visible", ui_visible(*k) ? "1":"0"); - } - } - return 1; -} - -static -const char *ui_layout_load_disk(const char *title, const char *mask, ini_t i, struct nk_rect *r) { - if(!i) return 0; - - const char *dot = strrchr(title, '.'); - if( dot ) title = va("%.*s", (int)(dot - title), title); - if( !strmatchi(title, mask) ) return 0; - - char **x = map_find(i, va("%s.x", title)); - char **y = map_find(i, va("%s.y", title)); - char **w = map_find(i, va("%s.w", title)); - char **h = map_find(i, va("%s.h", title)); - if( x && y && w && h ) { - float ww = window_width(), wh = window_height(); - r->x = atof(*x) * ww; - r->y = atof(*y) * wh; - r->w = atof(*w) * ww; - r->h = atof(*h) * wh; - - char **on = map_find(i, va("%s.visible", title)); - - return title; - } - return 0; -} - -static -int ui_layout_all_load_disk(const char *mask) { - ini_t i = ini(WINDOWS_INI); // @leak - if( !i ) return 0; - for each_map(i, char*, k, char*, v) { - struct nk_rect out = {0}; - const char *title = ui_layout_load_disk(k, mask, i, &out); - if( title ) { - struct nk_window *win = nk_window_find(ui_ctx, title); - if( win ) { - win->bounds.x = out.x; - win->bounds.y = out.y; - win->bounds.w = out.w; - win->bounds.h = out.h; - } - } - } - return 1; -} - - -// ----------------------------------------------------------------------------- -// shared code for both panels and windows. really messy. - -static -int ui_begin_panel_or_window_(const char *title, int flags, bool is_window) { - -struct nk_window *win = nk_window_find(ui_ctx, title); - -int is_panel = !is_window; -bool starts_minimized = is_panel ? !(flags & PANEL_OPEN) : 0; -bool is_closable = is_window; -bool is_scalable = true; -bool is_movable = true; -bool is_auto_minimizes = starts_minimized; // false; -bool is_pinned = win && (win->flags & NK_WINDOW_PINNED); - -if( is_pinned ) { -// is_closable = false; - is_auto_minimizes = false; - is_scalable = false; -// is_movable = false; -} - - ui_create(); - - uint64_t hash = 14695981039346656037ULL, mult = 0x100000001b3ULL; - for(int i = 0; title[i]; ++i) hash = (hash ^ title[i]) * mult; - ui_hue = (hash & 0x3F) / (float)0x3F; ui_hue += !ui_hue; - - int idx = ui_layout_find(title, is_panel); - ui_layout *s = &ui_layouts[is_panel][idx]; - -vec2 desktop = vec2(window_width(), window_height()); -float workarea_h = ui_has_menubar()*UI_MENUROW_HEIGHT; - - int row = idx + !!ui_has_menubar(); // add 1 to skip menu - vec2 offset = vec2(0, UI_ROW_HEIGHT*row); - float w = desktop.w / 3.33, h = (flags & UI_NOTIFICATION_2 ? UI_MENUROW_HEIGHT*2 : (flags & UI_NOTIFICATION_1 ? UI_MENUROW_HEIGHT : desktop.h - offset.y * 2 - 1)); // h = desktop.h * 0.66; // - struct nk_rect start_coords = {offset.x, offset.y, offset.x+w, offset.y+h}; - -if(is_window) { - w = desktop.w / 1.5; - h = desktop.h / 1.5; - start_coords.x = (desktop.w-w)/2; - start_coords.y = (desktop.h-h)/2 + workarea_h/2; - start_coords.w = w; - start_coords.h = h; -} - - static vec2 edge = {0}; static int edge_type = 0; // [off],L,R,U,D - do_once edge = vec2(desktop.w * 0.33, desktop.h * 0.66); - -// do not snap windows and/or save windows when using may be interacting with UI -int is_active = 0; -int mouse_pressed = !!input(MOUSE_L) && ui_ctx->active == win; -if( win ) { - // update global window activity bitmask - is_active = ui_ctx->active == win; - ui_active_mask = is_active ? ui_active_mask | (1ull << idx) : ui_active_mask & ~(1ull << idx); -} - -// struct nk_style *s = &ui_ctx->style; -// nk_style_push_color(ui_ctx, &s->window.header.normal.data.color, nk_hsv_f(ui_hue,0.6,0.8)); - -// adjust inactive edges automatically -if( win ) { - bool group1_any = !is_active; // && !input(MOUSE_L); - bool group2_not_resizing = is_active && !win->is_window_resizing; - bool group2_interacting = is_active && input(MOUSE_L); - -#if 0 - if( group1_any ) { - // cancel self-adjust if this window is not overlapping the active one that is being resized at the moment - struct nk_window *parent = ui_ctx->active; - - struct nk_rect a = win->bounds, b = parent->bounds; - bool overlap = a.x <= (b.x+b.w) && b.x <= (a.x+a.w) && a.y <= (b.y+b.h) && b.y <= (a.y+a.h); - - group1_any = overlap; - } -#else - if( group1_any ) - group1_any = !(win->flags & NK_WINDOW_PINNED); -#endif - - if( group1_any ) { - float mouse_x = clampf(input(MOUSE_X), 0, desktop.w); - float mouse_y = clampf(input(MOUSE_Y), 0, desktop.h); - float distance_x = absf(mouse_x - win->bounds.x) / desktop.w; - float distance_y = absf(mouse_y - win->bounds.y) / desktop.h; - float alpha_x = sqrt(sqrt(distance_x)); // amplify signals a little bit: 0.1->0.56,0.5->0.84,0.98->0.99,etc - float alpha_y = sqrt(sqrt(distance_y)); - - /**/ if( (edge_type & 1) && win->bounds.x <= UI_SNAP_PX ) { - win->bounds.w = win->bounds.w * alpha_y + edge.w * (1-alpha_y); - } - else if( (edge_type & 2) && (win->bounds.x + win->bounds.w) >= (desktop.w-UI_SNAP_PX) ) { - win->bounds.w = win->bounds.w * alpha_y + edge.w * (1-alpha_y); - win->bounds.x = desktop.w - win->bounds.w; - } - if( (edge_type & 8) && (win->bounds.y + (win->flags & NK_WINDOW_MINIMIZED ? UI_ROW_HEIGHT : win->bounds.h)) >= (desktop.h-UI_SNAP_PX) ) { - win->bounds.h = win->bounds.h * alpha_x + edge.h * (1-alpha_x); - win->bounds.y = desktop.h - (win->flags & NK_WINDOW_MINIMIZED ? UI_ROW_HEIGHT : win->bounds.h); - } - } - - // skip any saving if window is animating (moving) and/or maximized - bool anim_in_progress = s->anim_timer > 1e-3; - s->anim_timer *= anim_in_progress * UI_ANIM_ALPHA; - - if( group1_any || !group2_interacting || anim_in_progress ) { - struct nk_rect target = ui_layout_load_mem(idx, desktop, is_panel); - float alpha = len2sq(sub2(s->desktop, desktop)) ? 0 : UI_ANIM_ALPHA; // smooth unless we're restoring a desktop change -#if 1 - if( is_window && win->flags & NK_WINDOW_FULLSCREEN ) { - target.x = 1; - target.w = desktop.w - 1; - target.y = workarea_h + 1; - target.h = desktop.h - workarea_h - 2; - } - if( is_window && win->is_window_restoring > 1e-2) { - win->is_window_restoring = win->is_window_restoring * alpha + 0 * (1 - alpha); - target.w = desktop.w / 2; - target.h = (desktop.h - workarea_h) / 2; - target.x = (desktop.w - target.w) / 2; - target.y = ((desktop.h - workarea_h) - target.h) / 2; - } -#endif - win->bounds = nk_rect( - win->bounds.x * alpha + target.x * (1 - alpha), - win->bounds.y * alpha + target.y * (1 - alpha), - win->bounds.w * alpha + target.w * (1 - alpha), - win->bounds.h * alpha + target.h * (1 - alpha) - ); - } - if(!anim_in_progress) - ui_layout_save_mem(idx, desktop, workarea_h, &win->bounds, is_panel); -} else { // if(!win) - ui_layout_save_mem(idx, desktop, workarea_h, &start_coords, is_panel); -} - - - int window_flags = NK_WINDOW_PINNABLE | NK_WINDOW_MINIMIZABLE | NK_WINDOW_NO_SCROLLBAR_X | (is_window ? NK_WINDOW_MAXIMIZABLE : 0); - if( starts_minimized ) window_flags |= (win ? 0 : NK_WINDOW_MINIMIZED); - if( is_auto_minimizes ) window_flags |= is_active ? 0 : !!starts_minimized * NK_WINDOW_MINIMIZED; - if( is_movable ) window_flags |= NK_WINDOW_MOVABLE; - if( is_closable ) window_flags |= NK_WINDOW_CLOSABLE; - if( is_scalable ) { - window_flags |= NK_WINDOW_SCALABLE; - if(win) window_flags |= input(MOUSE_X) < (win->bounds.x + win->bounds.w/2) ? NK_WINDOW_SCALE_LEFT : 0; - if(win) window_flags |= input(MOUSE_Y) < (win->bounds.y + win->bounds.h/2) ? NK_WINDOW_SCALE_TOP : 0; - } - -// if( is_pinned ) - window_flags |= NK_WINDOW_BORDER; - -if( is_panel && win && !is_active ) { - if( !is_pinned && is_auto_minimizes ) { - window_flags |= NK_WINDOW_MINIMIZED; - } -} - -// if( is_modal ) window_flags &= ~(NK_WINDOW_MINIMIZED | NK_WINDOW_MINIMIZABLE); -if( is_panel && win ) { -// if( win->bounds.x > 0 && (win->bounds.x+win->bounds.w) < desktop.w-1 ) window_flags &= ~NK_WINDOW_MINIMIZED; -} - -if(!win) { // if newly created window (!win) - // first time, try to restore from WINDOWS_INI file - static ini_t i; do_once i = ini(WINDOWS_INI); // @leak - ui_layout_load_disk(title, "*", i, &start_coords); - ui_layout_save_mem(idx, desktop, workarea_h, &start_coords, is_panel); -} - -bool is_notify = flags & (UI_NOTIFICATION_1 | UI_NOTIFICATION_2); -if( is_notify ) { - window_flags = NK_WINDOW_MOVABLE | NK_WINDOW_NOT_INTERACTIVE | NK_WINDOW_NO_SCROLLBAR; - start_coords = nk_rect(desktop.w / 2 - w / 2, -h, w, h); -} - - if( nk_begin(ui_ctx, title, start_coords, window_flags) ) { - -// set width for all inactive panels -struct nk_rect bounds = nk_window_get_bounds(ui_ctx); -if( mouse_pressed && win && win->is_window_resizing ) { - edge = vec2(bounds.w, bounds.h); - - // push direction - int top = !!(win->is_window_resizing & NK_WINDOW_SCALE_TOP); - int left = !!(win->is_window_resizing & NK_WINDOW_SCALE_LEFT), right = !left; - - edge_type = 0; - /**/ if( right && (win->bounds.x <= UI_SNAP_PX) ) edge_type |= 1; - else if( left && (win->bounds.x + win->bounds.w) >= (desktop.w-UI_SNAP_PX) ) edge_type |= 2; - /**/ if( top && (win->bounds.y + win->bounds.h) >= (desktop.h-UI_SNAP_PX) ) edge_type |= 8; - - // @fixme - // - if window is in a corner (sharing 2 edges), do not allow for multi edges. either vert or horiz depending on the clicked scaler - // - or maybe, only propagate edge changes to the other windows that overlapping our window. -} - - return 1; - } else { - -if(is_panel) { - ui_panel_end(); -} else ui_window_end(); - - return 0; - } -} - -static const char *ui_last_title = 0; -static int *ui_last_enabled = 0; -static int ui_has_window = 0; -static int ui_window_has_menubar = 0; -int ui_window(const char *title, int *enabled) { - if( window_width() <= 0 ) return 0; - if( window_height() <= 0 ) return 0; - if( !ui_ctx || !ui_ctx->style.font ) return 0; - - bool forced_creation = enabled && *enabled; // ( enabled ? *enabled : !ui_has_menubar() ); - forced_creation |= ui_window_register(title); - if(!ui_visible(title)) { - if( !forced_creation ) return 0; - ui_show(title, forced_creation); - } - - ui_last_enabled = enabled; - ui_last_title = title; - ui_has_window = 1; - return ui_begin_panel_or_window_(title, /*flags*/0, true); -} -int ui_window_end() { - if(ui_window_has_menubar) nk_menubar_end(ui_ctx), ui_window_has_menubar = 0; - nk_end(ui_ctx), ui_has_window = 0; - - int closed = 0; - if( nk_window_is_hidden(ui_ctx, ui_last_title) ) { - nk_window_close(ui_ctx, ui_last_title); - ui_show(ui_last_title, false); - if( ui_last_enabled ) *ui_last_enabled = 0; // clear developers' flag - closed = 1; - } - - // @transparent - #if !is(ems) - static bool has_transparent_attrib = 0; do_once has_transparent_attrib = glfwGetWindowAttrib(window_handle(), GLFW_TRANSPARENT_FRAMEBUFFER) == GLFW_TRUE; - if( closed && has_transparent_attrib && !ui_has_menubar() ) { - bool any_open = 0; - for each_map_ptr(ui_windows, char*, k, unsigned, v) any_open |= *v & 1; - if( !any_open ) glfwSetWindowShouldClose(window_handle(), GLFW_TRUE); - } - #endif - // @transparent - - return 0; -} - -int ui_panel(const char *title, int flags) { - if( window_width() <= 0 ) return 0; - if( window_height() <= 0 ) return 0; - if( !ui_ctx || !ui_ctx->style.font ) return 0; - - if( ui_has_window ) { - // transparent style - static struct nk_style_button transparent_style; - do_once transparent_style = ui_ctx->style.button; - do_once transparent_style.normal.data.color = nk_rgba(0,0,0,0); - do_once transparent_style.border_color = nk_rgba(0,0,0,0); - do_once transparent_style.active = transparent_style.normal; - do_once transparent_style.hover = transparent_style.normal; - do_once transparent_style.hover.data.color = nk_rgba(0,0,0,127); - transparent_style.text_alignment = NK_TEXT_ALIGN_CENTERED|NK_TEXT_ALIGN_MIDDLE; - - if(!ui_window_has_menubar) nk_menubar_begin(ui_ctx); - if(!ui_window_has_menubar) nk_layout_row_begin(ui_ctx, NK_STATIC, UI_MENUBAR_ICON_HEIGHT, 4); - if(!ui_window_has_menubar) nk_layout_row_push(ui_ctx, 70); - ui_window_has_menubar = 1; - - return nk_menu_begin_text_styled(ui_ctx, title, strlen(title), NK_TEXT_ALIGN_CENTERED|NK_TEXT_ALIGN_MIDDLE, nk_vec2(220, 200), &transparent_style); - } - - return ui_begin_panel_or_window_(title, flags, false); -} -int ui_panel_end() { - if( ui_has_window ) { - nk_menu_end(ui_ctx); - return 0; - } - nk_end(ui_ctx); -// nk_style_pop_color(ui_ctx); - return 0; -} - -static unsigned ui_collapse_state = 0; -int ui_collapse(const char *label, const char *id) { // mask: 0(closed),1(open),2(created) - int start_open = label[0] == '!'; label += start_open; - - uint64_t hash = 14695981039346656037ULL, mult = 0x100000001b3ULL; - for(int i = 0; id[i]; ++i) hash = (hash ^ id[i]) * mult; - ui_hue = (hash & 0x3F) / (float)0x3F; ui_hue += !ui_hue; - - int forced = ui_filter && ui_filter[0]; - enum nk_collapse_states forced_open = NK_MAXIMIZED; - - ui_collapse_state = nk_tree_base_(ui_ctx, NK_TREE_NODE, 0, label, start_open ? NK_MAXIMIZED : NK_MINIMIZED, forced ? &forced_open : NULL, id, strlen(id), 0); - - return ui_collapse_state & 1; // |1 open, |2 clicked, |4 toggled -} -int ui_collapse_clicked() { - return ui_collapse_state >> 1; // |1 clicked, |2 toggled -} -int ui_collapse_end() { - return nk_tree_pop(ui_ctx), 1; -} - - -int ui_contextual() { -#if 0 - struct nk_rect bounds = nk_widget_bounds(ui_ctx); // = nk_window_get_bounds(ui_ctx); - bounds.y -= 25; - return ui_popups() ? 0 : nk_contextual_begin(ui_ctx, 0, nk_vec2(150, 300), bounds); -#else - return ui_popups() ? 0 : nk_contextual_begin(ui_ctx, 0, nk_vec2(300, 220), nk_window_get_bounds(ui_ctx)); -#endif -} -int ui_contextual_end(int close) { - if(close) nk_contextual_close(ui_ctx); - nk_contextual_end(ui_ctx); - return 1; -} -int ui_submenu(const char *options) { - int choice = 0; - if( ui_contextual() ) { - array(char*) tokens = strsplit(options, ";"); - for( int i = 0; i < array_count(tokens) ; ++i ) { - if( ui_button_transparent(tokens[i]) ) choice = i + 1; - } - ui_contextual_end(0); - } - return choice; -} - -// ----------------------------------------------------------------------------- -// code for all the widgets - -static -int nk_button_transparent(struct nk_context *ctx, const char *text) { - static struct nk_style_button transparent_style; - do_once transparent_style = ctx->style.button; - do_once transparent_style.text_alignment = NK_TEXT_ALIGN_CENTERED|NK_TEXT_ALIGN_MIDDLE; - do_once transparent_style.normal.data.color = nk_rgba(0,0,0,0); - do_once transparent_style.border_color = nk_rgba(0,0,0,0); - do_once transparent_style.active = transparent_style.normal; - do_once transparent_style.hover = transparent_style.normal; - do_once transparent_style.hover.data.color = nk_rgba(0,0,0,127); - transparent_style.text_background.a = 255 * ui_alpha; - transparent_style.text_normal.a = 255 * ui_alpha; - transparent_style.text_hover.a = 255 * ui_alpha; - transparent_style.text_active.a = 255 * ui_alpha; - return nk_button_label_styled(ctx, &transparent_style, text); -} - -// internal vars for our editor. @todo: maybe expose these to the end-user as well? -bool ui_label_icon_highlight; -vec2 ui_label_icon_clicked_L; // left -vec2 ui_label_icon_clicked_R; // right - -static -int ui_label_(const char *label, int alignment) { - // beware: assuming label can start with any ICON_MD_ glyph, which I consider them to be a 3-bytes utf8 sequence. - // done for optimization reasons because this codepath is called a lot! - const char *icon = label ? label : ""; while( icon[0] == '!' || icon[0] == '*' ) ++icon; - int has_icon = (unsigned)icon[0] > 127, icon_len = 3, icon_width_px = 1*24; - - struct nk_rect bounds = nk_widget_bounds(ui_ctx); - const struct nk_input *input = &ui_ctx->input; - int is_hovering = nk_input_is_mouse_hovering_rect(input, bounds) && !ui_has_active_popups; - if( is_hovering ) { - struct nk_rect winbounds = nk_window_get_bounds(ui_ctx); - is_hovering &= nk_input_is_mouse_hovering_rect(input, winbounds); - - struct nk_window *win = ui_ctx->current; - bool has_contextual = !win->name; // contextual windows are annonymous - - is_hovering &= has_contextual || nk_window_has_focus(ui_ctx); - } - - int skip_color_tab = label && label[0] == '!'; - if( skip_color_tab) label++; - - int spacing = 8; // between left colorbar and content - struct nk_window *win = ui_ctx->current; - struct nk_panel *layout = win->layout; - layout->at_x += spacing; - layout->bounds.w -= spacing; - if( !skip_color_tab ) { - float w = is_hovering ? 4 : 2; // spacing*3/4 : spacing/2-1; - bounds.w = w; - bounds.h -= 1; - struct nk_command_buffer *canvas = nk_window_get_canvas(ui_ctx); - nk_fill_rect(canvas, bounds, 0, nk_hsva_f(ui_hue, 0.75f, 0.8f, ui_alpha) ); - } - - if(!label || !label[0]) { - nk_label(ui_ctx, "", alignment); - layout->at_x -= spacing; - layout->bounds.w += spacing; - return 0; - } - - const char *split = strchr(label, '@'); - char buffer[128]; if( split ) label = (snprintf(buffer, 128, "%.*s", (int)(split-label), label), buffer); - -struct nk_style *style = &ui_ctx->style; -bool bold = label[0] == '*'; label += bold; -struct nk_font *font = bold && nk_glfw.atlas.fonts->next ? nk_glfw.atlas.fonts->next->next /*3rd font*/ : NULL; // list - -if( !has_icon ) { - // set bold style and color if needed - if( font && nk_style_push_font(ui_ctx, &font->handle) ) {} else font = 0; - if( font ) nk_style_push_color(ui_ctx, &style->text.color, nk_rgba(255, 255, 255, 255 * ui_alpha)); - nk_label(ui_ctx, label, alignment); -} else { - char *icon_glyph = va("%.*s", icon_len, icon); - -// @todo: implement nk_push_layout() -// nk_rect bounds = {..}; nk_panel_alloc_space(bounds, ctx); - struct nk_window *win = ui_ctx->current; - struct nk_panel *layout = win->layout, copy = *layout; - struct nk_rect before; nk_layout_peek(&before, ui_ctx); - nk_label_colored(ui_ctx, icon_glyph, alignment, nk_rgba(255, 255, 255, (64 + 192 * ui_label_icon_highlight) * ui_alpha) ); - struct nk_rect after; nk_layout_peek(&after, ui_ctx); - *layout = copy; - layout->at_x += icon_width_px; layout->bounds.w -= icon_width_px; // nk_layout_space_push(ui_ctx, nk_rect(0,0,icon_width_px,0)); - - // set bold style and color if needed - if( font && nk_style_push_font(ui_ctx, &font->handle) ) {} else font = 0; - if( font ) nk_style_push_color(ui_ctx, &style->text.color, nk_rgba(255, 255, 255, 255 * ui_alpha)); - nk_label(ui_ctx, icon+icon_len, alignment); - - layout->at_x -= icon_width_px; layout->bounds.w += icon_width_px; -} - -if( font ) nk_style_pop_color(ui_ctx); -if( font ) nk_style_pop_font(ui_ctx); - - if (split && is_hovering && !ui_has_active_popups && nk_window_has_focus(ui_ctx)) { - nk_tooltip(ui_ctx, split + 1); // @fixme: not working under ui_disable() state - } - - layout->at_x -= spacing; - layout->bounds.w += spacing; - - // old way - // ui_labeicon_l_icked_L.x = is_hovering ? nk_input_has_mouse_click_down_in_rect(input, NK_BUTTON_LEFT, layout->bounds, nk_true) : 0; - // new way - // this is an ugly hack to detect which icon (within a label) we're clicking on. - // @todo: figure out a better way to detect this... would it be better to have a ui_label_toolbar(lbl,bar) helper function instead? - ui_label_icon_clicked_L.x = is_hovering ? ( (int)((input->mouse.pos.x - bounds.x) - (alignment == NK_TEXT_RIGHT ? bounds.w : 0) ) * nk_input_is_mouse_released(input, NK_BUTTON_LEFT)) : 0; - - return ui_label_icon_clicked_L.x; -} - -int ui_label(const char *label) { - if( label && ui_filter && ui_filter[0] ) if( !strstri(label, ui_filter) ) return 0; - - int align = label[0] == '>' ? (label++, NK_TEXT_RIGHT) : label[0] == '=' ? (label++, NK_TEXT_CENTERED) : label[0] == '<' ? (label++, NK_TEXT_LEFT) : NK_TEXT_LEFT; - nk_layout_row_dynamic(ui_ctx, 0, 1); - return ui_label_(label, align); -} - -static int nk_label_(struct nk_context *ui_ctx, const char *text_, int align2 ) { - const struct nk_input *input = &ui_ctx->input; - struct nk_rect bounds = nk_widget_bounds(ui_ctx); - int is_hovering = nk_input_is_mouse_hovering_rect(input, bounds) && !ui_has_active_popups; - if( is_hovering ) { - struct nk_rect winbounds = nk_window_get_bounds(ui_ctx); - is_hovering &= nk_input_is_mouse_hovering_rect(input, winbounds); - is_hovering &= nk_window_has_focus(ui_ctx); - } - - nk_label(ui_ctx, text_, align2); - - // this is an ugly hack to detect which icon (within a label) we're clicking on. - // @todo: figure out a better way to detect this... would it be better to have a ui_label_toolbar(lbl,bar) helper function instead? - ui_label_icon_clicked_R.x = is_hovering ? ( (int)((input->mouse.pos.x - bounds.x) - (align2 == NK_TEXT_RIGHT ? bounds.w : 0) ) * nk_input_is_mouse_released(input, NK_BUTTON_LEFT)) : 0; - - return ui_label_icon_clicked_R.x; -} - - -int ui_label2(const char *label, const char *text_) { - if( label && ui_filter && ui_filter[0] ) if( !strstri(label, ui_filter) ) return 0; - - nk_layout_row_dynamic(ui_ctx, 0, 2); - - int align1 = NK_TEXT_LEFT; - int align2 = NK_TEXT_LEFT; - if( label ) align1 = label[0] == '>' ? (label++, NK_TEXT_RIGHT) : label[0] == '=' ? (label++, NK_TEXT_CENTERED) : label[0] == '<' ? (label++, NK_TEXT_LEFT) : NK_TEXT_LEFT; - if( text_ ) align2 = text_[0] == '>' ? (text_++, NK_TEXT_RIGHT) : text_[0] == '=' ? (text_++, NK_TEXT_CENTERED) : text_[0] == '<' ? (text_++, NK_TEXT_LEFT) : NK_TEXT_LEFT; - ui_label_(label, align1); - - return nk_label_(ui_ctx, text_, align2); -} -int ui_label2_bool(const char *text, bool value) { - bool b = !!value; - return ui_bool(text, &b), 0; -} -int ui_label2_float(const char *text, float value) { - float f = (float)value; - return ui_float(text, &f), 0; -} -int ui_label2_wrap(const char *label, const char *str) { // @fixme: does not work (remove dynamic layout?) - nk_layout_row_dynamic(ui_ctx, 0, 2); - ui_label_(label, NK_TEXT_LEFT); - nk_text_wrap(ui_ctx, str, strlen(str)); - return 0; -} -int ui_label2_toolbar(const char *label, const char *icons) { - int mouse_click = ui_label2(label, va(">%s", icons)); - int choice = !mouse_click ? 0 : 1 + -mouse_click / (UI_ICON_FONTSIZE + UI_ICON_SPACING_X); // divided by px per ICON_MD_ glyph approximately - int glyphs = strlen(icons) / 3; - return choice > glyphs ? 0 : choice; -} - -int ui_notify(const char *title, const char *body) { - app_beep(); - - struct ui_notify n = {0}; - n.title = title && title[0] ? stringf("*%s", title) : 0; - n.body = body && body[0] ? STRDUP(body) : 0; - n.timeout = 2; // 4s = 2s timeout (+ 1s fade + 1s idle) - n.alpha = 1; - array_push_front(ui_notifications, n); - return 1; -} - -int ui_button_transparent(const char *text) { - nk_layout_row_dynamic(ui_ctx, 0, 1); - int align = text[0] == '>' ? (text++, NK_TEXT_RIGHT) : text[0] == '=' ? (text++, NK_TEXT_CENTERED) : text[0] == '<' ? (text++, NK_TEXT_LEFT) : NK_TEXT_CENTERED; - return !!nk_contextual_item_label(ui_ctx, text, align); -} - -#ifndef UI_BUTTON_MONOCHROME -#define UI_BUTTON_MONOCHROME 0 -#endif - -static -int ui_button_(const char *label) { - if( label && ui_filter && ui_filter[0] ) if( !strstri(label, ui_filter) ) return 0; - - if( 1 ) { -#if UI_BUTTON_MONOCHROME - nk_style_push_color(ui_ctx, &ui_ctx->style.button.text_normal, nk_rgba(0,0,0,ui_alpha)); - nk_style_push_color(ui_ctx, &ui_ctx->style.button.text_hover, nk_rgba(0,0,0,ui_alpha)); - nk_style_push_color(ui_ctx, &ui_ctx->style.button.text_active, nk_rgba(0,0,0,ui_alpha)); - - nk_style_push_color(ui_ctx, &ui_ctx->style.button.normal.data.color, nk_hsva_f(ui_hue,0.0,0.8*ui_alpha)); - nk_style_push_color(ui_ctx, &ui_ctx->style.button.hover.data.color, nk_hsva_f(ui_hue,0.0,1.0*ui_alpha)); - nk_style_push_color(ui_ctx, &ui_ctx->style.button.active.data.color, nk_hsva_f(ui_hue,0.0,0.4*ui_alpha)); -#elif 0 // old - nk_style_push_color(ui_ctx, &ui_ctx->style.button.text_normal, nk_rgba(0,0,0,ui_alpha)); - nk_style_push_color(ui_ctx, &ui_ctx->style.button.text_hover, nk_rgba(0,0,0,ui_alpha)); - nk_style_push_color(ui_ctx, &ui_ctx->style.button.text_active, nk_rgba(0,0,0,ui_alpha)); - - nk_style_push_color(ui_ctx, &ui_ctx->style.button.normal.data.color, nk_hsva_f(ui_hue,0.75,0.8*ui_alpha)); - nk_style_push_color(ui_ctx, &ui_ctx->style.button.hover.data.color, nk_hsva_f(ui_hue,1.00,1.0*ui_alpha)); - nk_style_push_color(ui_ctx, &ui_ctx->style.button.active.data.color, nk_hsva_f(ui_hue,0.60,0.4*ui_alpha)); -#else // new - nk_style_push_color(ui_ctx, &ui_ctx->style.button.text_normal, nk_rgba_f(0.00,0.00,0.00,ui_alpha)); - nk_style_push_color(ui_ctx, &ui_ctx->style.button.text_hover, nk_rgba_f(0.11,0.11,0.11,ui_alpha)); - nk_style_push_color(ui_ctx, &ui_ctx->style.button.text_active, nk_rgba_f(0.00,0.00,0.00,ui_alpha)); - - nk_style_push_color(ui_ctx, &ui_ctx->style.button.normal.data.color, nk_hsva_f(ui_hue,0.80,0.6,0.90*ui_alpha)); - nk_style_push_color(ui_ctx, &ui_ctx->style.button.hover.data.color, nk_hsva_f(ui_hue,0.85,0.9,0.90*ui_alpha)); - nk_style_push_color(ui_ctx, &ui_ctx->style.button.active.data.color, nk_hsva_f(ui_hue,0.80,0.6,0.90*ui_alpha)); -#endif - } - - struct nk_rect bounds = nk_widget_bounds(ui_ctx); - - const char *split = strchr(label, '@'), *tooltip = split + 1; - int ret = nk_button_text(ui_ctx, label, split ? (int)(split - label) : strlen(label) ); - - const struct nk_input *in = &ui_ctx->input; - if (split && nk_input_is_mouse_hovering_rect(in, bounds) && !ui_has_active_popups && nk_window_has_focus(ui_ctx)) { - nk_tooltip(ui_ctx, tooltip); - } - - if( 1 ) { - nk_style_pop_color(ui_ctx); - nk_style_pop_color(ui_ctx); - nk_style_pop_color(ui_ctx); - - nk_style_pop_color(ui_ctx); - nk_style_pop_color(ui_ctx); - nk_style_pop_color(ui_ctx); - } - - return ret; -} - -int ui_buttons(int buttons, ...) { - static array(char*) args = 0; - array_resize(args, 0); - - int num_skips = 0; - va_list list; - va_start(list, buttons); - for( int i = 0; i < buttons; ++i ) { - const char *label = va_arg(list, const char*); - int skip = ui_filter && ui_filter[0] && !strstri(label, ui_filter); - array_push(args, skip ? NULL : (char*)label); - num_skips += skip; - } - va_end(list); - - if( num_skips == array_count(args) ) return 0; - buttons = array_count(args) - num_skips; - - nk_layout_row_dynamic(ui_ctx, 0, buttons); - - float ui_hue_old = ui_hue; - - int indent = 8; - struct nk_window *win = ui_ctx->current; - struct nk_panel *layout = win->layout; - struct nk_panel copy = *layout; - ui_label_("", NK_TEXT_LEFT); - *layout = copy; - layout->at_x += indent; - layout->bounds.w -= indent; - - int rc = 0; - for( int i = 0, end = array_count(args); i < end; ++i ) { - if( args[i] && ui_button_( args[i] ) ) rc = i+1; - ui_hue_cycle( 3 ); - } - va_end(list); - - layout->at_x -= indent; - layout->bounds.w += indent; - - ui_hue = ui_hue_old; - return rc; -} - -int ui_button(const char *s) { - return ui_buttons(1, s); -} - -int ui_toggle(const char *label, bool *value) { - if( label && ui_filter && ui_filter[0] ) if( !strstri(label, ui_filter) ) return 0; - - nk_layout_row_dynamic(ui_ctx, 0, 2); - ui_label_(label, NK_TEXT_LEFT); - - // nk_label(ui_ctx, label, alignment); - int rc = nk_button_transparent(ui_ctx, *value ? ICON_MD_TOGGLE_ON : ICON_MD_TOGGLE_OFF); - return rc ? (*value ^= 1), rc : rc; -} - -static enum color_mode {COL_RGB, COL_HSV} ui_color_mode = COL_RGB; - -int ui_color4f(const char *label, float *color) { - if( label && ui_filter && ui_filter[0] ) if( !strstri(label, ui_filter) ) return 0; - - nk_layout_row_dynamic(ui_ctx, 0, 2); - ui_label_(label, NK_TEXT_LEFT); - - struct nk_colorf after = { color[0]*ui_alpha, color[1]*ui_alpha, color[2]*ui_alpha, color[3]*ui_alpha }, before = after; - struct nk_colorf clamped = { clampf(after.r,0,1), clampf(after.g,0,1), clampf(after.b,0,1), clampf(after.a,0,1) }; - if (nk_combo_begin_color(ui_ctx, nk_rgb_cf(clamped), nk_vec2(200,400))) { - nk_layout_row_dynamic(ui_ctx, 120, 1); - after = nk_color_picker(ui_ctx, after, NK_RGB); - - nk_layout_row_dynamic(ui_ctx, 0, 2); - ui_color_mode = nk_option_label(ui_ctx, "RGB", ui_color_mode == COL_RGB) ? COL_RGB : ui_color_mode; - ui_color_mode = nk_option_label(ui_ctx, "HSV", ui_color_mode == COL_HSV) ? COL_HSV : ui_color_mode; - - nk_layout_row_dynamic(ui_ctx, 0, 1); - if (ui_color_mode == COL_RGB) { - after.r = nk_propertyf(ui_ctx, "#R:", -FLT_MAX, after.r, FLT_MAX, 0.01f,0.005f); - after.g = nk_propertyf(ui_ctx, "#G:", -FLT_MAX, after.g, FLT_MAX, 0.01f,0.005f); - after.b = nk_propertyf(ui_ctx, "#B:", -FLT_MAX, after.b, FLT_MAX, 0.01f,0.005f); - } else { - float hsva[4]; - nk_colorf_hsva_fv(hsva, after); - hsva[0] = nk_propertyf(ui_ctx, "#H:", -FLT_MAX, hsva[0], FLT_MAX, 0.01f,0.005f); - hsva[1] = nk_propertyf(ui_ctx, "#S:", -FLT_MAX, hsva[1], FLT_MAX, 0.01f,0.005f); - hsva[2] = nk_propertyf(ui_ctx, "#V:", -FLT_MAX, hsva[2], FLT_MAX, 0.01f,0.005f); - after = nk_hsva_colorfv(hsva); - } - nk_label(ui_ctx, va("#%02X%02X%02X", (unsigned)clampf(after.r*255,0,255), (unsigned)clampf(after.g*255,0,255), (unsigned)clampf(after.b*255,0,255)), NK_TEXT_CENTERED); - - color[0] = after.r; - color[1] = after.g; - color[2] = after.b; - color[3] = after.a; - - nk_combo_end(ui_ctx); - } - return !!memcmp(&before.r, &after.r, sizeof(struct nk_colorf)); -} -int ui_color4(const char *label, unsigned *color) { - if( label && ui_filter && ui_filter[0] ) if( !strstri(label, ui_filter) ) return 0; - - unsigned a = *color >> 24; - unsigned b =(*color >> 16)&255; - unsigned g =(*color >> 8)&255; - unsigned r = *color & 255; - - nk_layout_row_dynamic(ui_ctx, 0, 2); - ui_label_(label, NK_TEXT_LEFT); - - struct nk_colorf after = { r*ui_alpha/255, g*ui_alpha/255, b*ui_alpha/255, a*ui_alpha/255 }, before = after; - if (nk_combo_begin_color(ui_ctx, nk_rgb_cf(after), nk_vec2(200,400))) { - nk_layout_row_dynamic(ui_ctx, 120, 1); - after = nk_color_picker(ui_ctx, after, NK_RGBA); - - nk_layout_row_dynamic(ui_ctx, 0, 2); - ui_color_mode = nk_option_label(ui_ctx, "RGB", ui_color_mode == COL_RGB) ? COL_RGB : ui_color_mode; - ui_color_mode = nk_option_label(ui_ctx, "HSV", ui_color_mode == COL_HSV) ? COL_HSV : ui_color_mode; - - nk_layout_row_dynamic(ui_ctx, 0, 1); - if (ui_color_mode == COL_RGB) { - after.r = nk_propertyi(ui_ctx, "#R:", 0, after.r * 255, 255, 1,1) / 255.f; - after.g = nk_propertyi(ui_ctx, "#G:", 0, after.g * 255, 255, 1,1) / 255.f; - after.b = nk_propertyi(ui_ctx, "#B:", 0, after.b * 255, 255, 1,1) / 255.f; - after.a = nk_propertyi(ui_ctx, "#A:", 0, after.a * 255, 255, 1,1) / 255.f; - } else { - float hsva[4]; - nk_colorf_hsva_fv(hsva, after); - hsva[0] = nk_propertyi(ui_ctx, "#H:", 0, hsva[0] * 255, 255, 1,1) / 255.f; - hsva[1] = nk_propertyi(ui_ctx, "#S:", 0, hsva[1] * 255, 255, 1,1) / 255.f; - hsva[2] = nk_propertyi(ui_ctx, "#V:", 0, hsva[2] * 255, 255, 1,1) / 255.f; - hsva[3] = nk_propertyi(ui_ctx, "#A:", 0, hsva[3] * 255, 255, 1,1) / 255.f; - after = nk_hsva_colorfv(hsva); - } - r = after.r * 255; - g = after.g * 255; - b = after.b * 255; - a = after.a * 255; - *color = rgba(r,g,b,a); - - nk_label(ui_ctx, va("#%02X%02X%02X%02X", r, g, b, a), NK_TEXT_CENTERED); - - nk_combo_end(ui_ctx); - } - return !!memcmp(&before.r, &after.r, sizeof(struct nk_colorf)); -} - -int ui_color3f(const char *label, float *color) { - if( label && ui_filter && ui_filter[0] ) if( !strstri(label, ui_filter) ) return 0; - - nk_layout_row_dynamic(ui_ctx, 0, 2); - ui_label_(label, NK_TEXT_LEFT); - - struct nk_colorf after = { color[0]*ui_alpha, color[1]*ui_alpha, color[2]*ui_alpha, color[3]*ui_alpha }, before = after; - struct nk_colorf clamped = { clampf(after.r,0,1), clampf(after.g,0,1), clampf(after.b,0,1), ui_alpha }; - if (nk_combo_begin_color(ui_ctx, nk_rgb_cf(clamped), nk_vec2(200,400))) { - nk_layout_row_dynamic(ui_ctx, 120, 1); - after = nk_color_picker(ui_ctx, after, NK_RGB); - - nk_layout_row_dynamic(ui_ctx, 0, 2); - ui_color_mode = nk_option_label(ui_ctx, "RGB", ui_color_mode == COL_RGB) ? COL_RGB : ui_color_mode; - ui_color_mode = nk_option_label(ui_ctx, "HSV", ui_color_mode == COL_HSV) ? COL_HSV : ui_color_mode; - - nk_layout_row_dynamic(ui_ctx, 0, 1); - if (ui_color_mode == COL_RGB) { - after.r = nk_propertyf(ui_ctx, "#R:", -FLT_MAX, after.r, FLT_MAX, 0.01f,0.005f); - after.g = nk_propertyf(ui_ctx, "#G:", -FLT_MAX, after.g, FLT_MAX, 0.01f,0.005f); - after.b = nk_propertyf(ui_ctx, "#B:", -FLT_MAX, after.b, FLT_MAX, 0.01f,0.005f); - } else { - float hsva[4]; - nk_colorf_hsva_fv(hsva, after); - hsva[0] = nk_propertyf(ui_ctx, "#H:", -FLT_MAX, hsva[0], FLT_MAX, 0.01f,0.005f); - hsva[1] = nk_propertyf(ui_ctx, "#S:", -FLT_MAX, hsva[1], FLT_MAX, 0.01f,0.005f); - hsva[2] = nk_propertyf(ui_ctx, "#V:", -FLT_MAX, hsva[2], FLT_MAX, 0.01f,0.005f); - after = nk_hsva_colorfv(hsva); - } - nk_label(ui_ctx, va("#%02X%02X%02X", (unsigned)clampf(after.r*255,0,255), (unsigned)clampf(after.g*255,0,255), (unsigned)clampf(after.b*255,0,255)), NK_TEXT_CENTERED); - - color[0] = after.r; - color[1] = after.g; - color[2] = after.b; - - nk_combo_end(ui_ctx); - } - return !!memcmp(&before.r, &after.r, sizeof(struct nk_colorf)); -} -int ui_color3(const char *label, unsigned *color) { - if( label && ui_filter && ui_filter[0] ) if( !strstri(label, ui_filter) ) return 0; - - unsigned a = *color >> 24; - unsigned b =(*color >> 16)&255; - unsigned g =(*color >> 8)&255; - unsigned r = *color & 255; - - nk_layout_row_dynamic(ui_ctx, 0, 2); - ui_label_(label, NK_TEXT_LEFT); - - struct nk_colorf after = { r*ui_alpha/255, g*ui_alpha/255, b*ui_alpha/255, ui_alpha }, before = after; - if (nk_combo_begin_color(ui_ctx, nk_rgb_cf(after), nk_vec2(200,400))) { - nk_layout_row_dynamic(ui_ctx, 120, 1); - after = nk_color_picker(ui_ctx, after, NK_RGB); - - nk_layout_row_dynamic(ui_ctx, 0, 2); - ui_color_mode = nk_option_label(ui_ctx, "RGB", ui_color_mode == COL_RGB) ? COL_RGB : ui_color_mode; - ui_color_mode = nk_option_label(ui_ctx, "HSV", ui_color_mode == COL_HSV) ? COL_HSV : ui_color_mode; - - nk_layout_row_dynamic(ui_ctx, 0, 1); - if (ui_color_mode == COL_RGB) { - after.r = nk_propertyi(ui_ctx, "#R:", 0, after.r * 255, 255, 1,1) / 255.f; - after.g = nk_propertyi(ui_ctx, "#G:", 0, after.g * 255, 255, 1,1) / 255.f; - after.b = nk_propertyi(ui_ctx, "#B:", 0, after.b * 255, 255, 1,1) / 255.f; - } else { - float hsva[4]; - nk_colorf_hsva_fv(hsva, after); - hsva[0] = nk_propertyi(ui_ctx, "#H:", 0, hsva[0] * 255, 255, 1,1) / 255.f; - hsva[1] = nk_propertyi(ui_ctx, "#S:", 0, hsva[1] * 255, 255, 1,1) / 255.f; - hsva[2] = nk_propertyi(ui_ctx, "#V:", 0, hsva[2] * 255, 255, 1,1) / 255.f; - after = nk_hsva_colorfv(hsva); - } - r = after.r * 255; - g = after.g * 255; - b = after.b * 255; - *color = rgba(r,g,b,a); - - nk_label(ui_ctx, va("#%02X%02X%02X", r, g, b), NK_TEXT_CENTERED); - - nk_combo_end(ui_ctx); - } - return !!memcmp(&before.r, &after.r, sizeof(struct nk_colorf)); -} - -int ui_list(const char *label, const char **items, int num_items, int *selector) { - if( label && ui_filter && ui_filter[0] ) if( !strstri(label, ui_filter) ) return 0; - - nk_layout_row_dynamic(ui_ctx, 0, 2); - ui_label_(label, NK_TEXT_LEFT); - - int val = nk_combo(ui_ctx, items, num_items, *selector, UI_ROW_HEIGHT, nk_vec2(200,200)); - int chg = val != *selector; - *selector = val; - return chg; -} - -int ui_slider(const char *label, float *slider) { - if( label && ui_filter && ui_filter[0] ) if( !strstri(label, ui_filter) ) return 0; - - // return ui_slider2(label, slider, va("%.2f ", *slider)); - nk_layout_row_dynamic(ui_ctx, 0, 2); - ui_label_(label, NK_TEXT_LEFT); - - nk_size val = *slider * 1000; - int chg = nk_progress(ui_ctx, &val, 1000, NK_MODIFIABLE); - *slider = val / 1000.f; - return chg; -} -int ui_slider2(const char *label, float *slider, const char *caption) { - if( label && ui_filter && ui_filter[0] ) if( !strstri(label, ui_filter) ) return 0; - - nk_layout_row_dynamic(ui_ctx, 0, 2); - ui_label_(label, NK_TEXT_LEFT); - - struct nk_window *win = ui_ctx->current; - const struct nk_style *style = &ui_ctx->style; - struct nk_rect bounds; nk_layout_peek(&bounds, ui_ctx); bounds.w -= 10; // bounds.w *= 0.95f; - struct nk_vec2 item_padding = style->text.padding; - struct nk_text text; - text.padding.x = item_padding.x; - text.padding.y = item_padding.y; - text.background = style->window.background; - text.text = nk_rgba_f(1,1,1,ui_alpha); - - nk_size val = *slider * 1000; - int chg = nk_progress(ui_ctx, &val, 1000, NK_MODIFIABLE); - *slider = val / 1000.f; - - chg |= input(MOUSE_L) && nk_input_is_mouse_hovering_rect(&ui_ctx->input, bounds); // , true); - - nk_widget_text(&win->buffer, bounds, caption, strlen(caption), &text, NK_TEXT_RIGHT, style->font); - return chg; -} - -int ui_bool(const char *label, bool *enabled ) { - if( label && ui_filter && ui_filter[0] ) if( !strstri(label, ui_filter) ) return 0; - - nk_layout_row_dynamic(ui_ctx, 0, 2); - ui_label_(label, NK_TEXT_LEFT); - - int val = *enabled; -#if 0 - int chg = !!nk_checkbox_label(ui_ctx, "", &val); -#else - int chg = !!nk_button_transparent(ui_ctx, val ? ICON_MD_CHECK_BOX : ICON_MD_CHECK_BOX_OUTLINE_BLANK ); -#endif - *enabled ^= chg; - return chg; -} - -static int ui_num_signs = 0; - -int ui_int(const char *label, int *v) { - if( label && ui_filter && ui_filter[0] ) if( !strstri(label, ui_filter) ) return 0; - - nk_layout_row_dynamic(ui_ctx, 0, 2); - ui_label_(label, NK_TEXT_LEFT); - - int prev = *v; - *v = nk_propertyi(ui_ctx, "#", INT_MIN, *v, INT_MAX, 1,1); - return prev != *v; -} - -int ui_unsigned(const char *label, unsigned *v) { - if( label && ui_filter && ui_filter[0] ) if( !strstri(label, ui_filter) ) return 0; - - nk_layout_row_dynamic(ui_ctx, 0, 2); - ui_label_(label, NK_TEXT_LEFT); - - unsigned prev = *v; - *v = (unsigned)nk_propertyd(ui_ctx, "#", 0, *v, UINT_MAX, 1,1); - return prev != *v; -} -int ui_unsigned2(const char *label, unsigned *v) { - if( label && ui_filter && ui_filter[0] ) if( !strstri(label, ui_filter) ) return 0; - - nk_layout_row_dynamic(ui_ctx, 0, 2); - ui_label_(label, NK_TEXT_LEFT); - - char *buffer = ui_num_signs ? - --ui_num_signs, va("%+2u %+2u", v[0], v[1]) : - va("%2u, %2u", v[0], v[1]); - - if (nk_combo_begin_label(ui_ctx, buffer, nk_vec2(200,200))) { - nk_layout_row_dynamic(ui_ctx, 0, 1); - unsigned prev0 = v[0]; nk_property_int(ui_ctx, "#X:", 0, &v[0], INT_MAX, 1,0.5f); - unsigned prev1 = v[1]; nk_property_int(ui_ctx, "#Y:", 0, &v[1], INT_MAX, 1,0.5f); - nk_combo_end(ui_ctx); - return prev0 != v[0] || prev1 != v[1]; - } - return 0; -} -int ui_unsigned3(const char *label, unsigned *v) { - if( label && ui_filter && ui_filter[0] ) if( !strstri(label, ui_filter) ) return 0; - - nk_layout_row_dynamic(ui_ctx, 0, 2); - ui_label_(label, NK_TEXT_LEFT); - - char *buffer = ui_num_signs ? - --ui_num_signs, va("%+2u %+2u %+2u", v[0], v[1], v[2]) : - va("%2u, %2u, %2u", v[0], v[1], v[2]); - - if (nk_combo_begin_label(ui_ctx, buffer, nk_vec2(200,200))) { - nk_layout_row_dynamic(ui_ctx, 0, 1); - unsigned prev0 = v[0]; nk_property_int(ui_ctx, "#X:", 0, &v[0], INT_MAX, 1,0.5f); - unsigned prev1 = v[1]; nk_property_int(ui_ctx, "#Y:", 0, &v[1], INT_MAX, 1,0.5f); - unsigned prev2 = v[2]; nk_property_int(ui_ctx, "#Z:", 0, &v[2], INT_MAX, 1,0.5f); - nk_combo_end(ui_ctx); - return prev0 != v[0] || prev1 != v[1] || prev2 != v[2]; - } - return 0; -} - -int ui_short(const char *label, short *v) { - if( label && ui_filter && ui_filter[0] ) if( !strstri(label, ui_filter) ) return 0; - - int i = *v, ret = ui_int( label, &i ); - return *v = (short)i, ret; -} - -int ui_float(const char *label, float *v) { - if( label && ui_filter && ui_filter[0] ) if( !strstri(label, ui_filter) ) return 0; - - nk_layout_row_dynamic(ui_ctx, 0, 2); - ui_label_(label, NK_TEXT_LEFT); - - float prev = v[0]; v[0] = nk_propertyf(ui_ctx, "#", -FLT_MAX, v[0], FLT_MAX, 0.01f,0.005f); - return prev != v[0]; -} - -int ui_double(const char *label, double *v) { - if( label && ui_filter && ui_filter[0] ) if( !strstri(label, ui_filter) ) return 0; - - nk_layout_row_dynamic(ui_ctx, 0, 2); - ui_label_(label, NK_TEXT_LEFT); - - double prev = v[0]; v[0] = nk_propertyd(ui_ctx, "#", -DBL_MAX, v[0], DBL_MAX, 0.01f,0.005f); - return prev != v[0]; -} - -int ui_clampf(const char *label, float *v, float minf, float maxf) { - if( label && ui_filter && ui_filter[0] ) if( !strstri(label, ui_filter) ) return 0; - - if( minf > maxf ) return ui_clampf(label, v, maxf, minf); - - nk_layout_row_dynamic(ui_ctx, 0, 2); - ui_label_(label, NK_TEXT_LEFT); - - float prev = v[0]; v[0] = nk_propertyf(ui_ctx, "#", minf, v[0], maxf, 0.1f,0.05f); - return prev != v[0]; -} - -int ui_float2(const char *label, float *v) { - if( label && ui_filter && ui_filter[0] ) if( !strstri(label, ui_filter) ) return 0; - - nk_layout_row_dynamic(ui_ctx, 0, 2); - ui_label_(label, NK_TEXT_LEFT); - - char *buffer = ui_num_signs ? - --ui_num_signs, va("%+.3f %+.3f", v[0], v[1]) : - va("%.3f, %.3f", v[0], v[1]); - - if (nk_combo_begin_label(ui_ctx, buffer, nk_vec2(200,200))) { - nk_layout_row_dynamic(ui_ctx, 0, 1); - float prev0 = v[0]; nk_property_float(ui_ctx, "#X:", -FLT_MAX, &v[0], FLT_MAX, 1,0.5f); - float prev1 = v[1]; nk_property_float(ui_ctx, "#Y:", -FLT_MAX, &v[1], FLT_MAX, 1,0.5f); - nk_combo_end(ui_ctx); - return prev0 != v[0] || prev1 != v[1]; - } - return 0; -} - -int ui_float3(const char *label, float *v) { - if( label && ui_filter && ui_filter[0] ) if( !strstri(label, ui_filter) ) return 0; - - nk_layout_row_dynamic(ui_ctx, 0, 2); - ui_label_(label, NK_TEXT_LEFT); - - char *buffer = ui_num_signs ? - --ui_num_signs, va("%+.2f %+.2f %+.2f", v[0], v[1], v[2]) : - va("%.2f, %.2f, %.2f", v[0], v[1], v[2]); - - if (nk_combo_begin_label(ui_ctx, buffer, nk_vec2(200,200))) { - nk_layout_row_dynamic(ui_ctx, 0, 1); - float prev0 = v[0]; nk_property_float(ui_ctx, "#X:", -FLT_MAX, &v[0], FLT_MAX, 1,0.5f); - float prev1 = v[1]; nk_property_float(ui_ctx, "#Y:", -FLT_MAX, &v[1], FLT_MAX, 1,0.5f); - float prev2 = v[2]; nk_property_float(ui_ctx, "#Z:", -FLT_MAX, &v[2], FLT_MAX, 1,0.5f); - nk_combo_end(ui_ctx); - return prev0 != v[0] || prev1 != v[1] || prev2 != v[2]; - } - return 0; -} - -int ui_float4(const char *label, float *v) { - if( label && ui_filter && ui_filter[0] ) if( !strstri(label, ui_filter) ) return 0; - - nk_layout_row_dynamic(ui_ctx, 0, 2); - ui_label_(label, NK_TEXT_LEFT); - - char *buffer = ui_num_signs ? - --ui_num_signs, va("%+.2f %+.2f %+.2f %+.2f", v[0], v[1], v[2], v[3]) : - va("%.2f,%.2f,%.2f,%.2f", v[0], v[1], v[2], v[3]); - - if (nk_combo_begin_label(ui_ctx, buffer, nk_vec2(200,200))) { - nk_layout_row_dynamic(ui_ctx, 0, 1); - float prev0 = v[0]; nk_property_float(ui_ctx, "#X:", -FLT_MAX, &v[0], FLT_MAX, 1,0.5f); - float prev1 = v[1]; nk_property_float(ui_ctx, "#Y:", -FLT_MAX, &v[1], FLT_MAX, 1,0.5f); - float prev2 = v[2]; nk_property_float(ui_ctx, "#Z:", -FLT_MAX, &v[2], FLT_MAX, 1,0.5f); - float prev3 = v[3]; nk_property_float(ui_ctx, "#W:", -FLT_MAX, &v[3], FLT_MAX, 1,0.5f); - nk_combo_end(ui_ctx); - return prev0 != v[0] || prev1 != v[1] || prev2 != v[2] || prev3 != v[3]; - } - - return 0; -} - -int ui_mat33(const char *label, float M[9]) { - if( label && ui_filter && ui_filter[0] ) if( !strstri(label, ui_filter) ) return 0; - - ui_num_signs = 3; - int changed = 0; - changed |= ui_label(label); - changed |= ui_float3(NULL, M); - changed |= ui_float3(NULL, M+3); - changed |= ui_float3(NULL, M+6); - return changed; -} -int ui_mat34(const char *label, float M[12]) { - if( label && ui_filter && ui_filter[0] ) if( !strstri(label, ui_filter) ) return 0; - - ui_num_signs = 3; - int changed = 0; - changed |= ui_label(label); - changed |= ui_float4(NULL, M); - changed |= ui_float4(NULL, M+4); - changed |= ui_float4(NULL, M+8); - return changed; -} -int ui_mat44(const char *label, float M[16]) { - if( label && ui_filter && ui_filter[0] ) if( !strstri(label, ui_filter) ) return 0; - - ui_num_signs = 4; - int changed = 0; - changed |= ui_label(label); - changed |= ui_float4(NULL, M); - changed |= ui_float4(NULL, M+4); - changed |= ui_float4(NULL, M+8); - changed |= ui_float4(NULL, M+12); - return changed; -} - -int ui_buffer(const char *label, char *buffer, int buflen) { - if( label && ui_filter && ui_filter[0] ) if( !strstri(label, ui_filter) ) return 0; - - nk_layout_row_dynamic(ui_ctx, 0, 1 + (label && label[0])); - if(label && label[0]) ui_label_(label, NK_TEXT_LEFT); - - int active = nk_edit_string_zero_terminated(ui_ctx, NK_EDIT_AUTO_SELECT|NK_EDIT_CLIPBOARD|NK_EDIT_FIELD/*NK_EDIT_BOX*/|NK_EDIT_SIG_ENTER, buffer, buflen, nk_filter_default); - return !!(active & NK_EDIT_COMMITED) ? nk_edit_unfocus(ui_ctx), 1 : 0; -} - -int ui_string(const char *label, char **str) { - if( label && ui_filter && ui_filter[0] ) if( !strstri(label, ui_filter) ) return 0; - - char *bak = va("%s%c", *str ? *str : "", '\0'); - int rc = ui_buffer(label, bak, strlen(bak)+2); - if( *str ) 0[*str] = '\0'; - strcatf(str, "%s", bak); - return rc; -} - -int ui_separator() { - if( /*label &&*/ ui_filter && ui_filter[0] ) return 0; // if( !strstri(label, ui_filter) ) return 0; - - nk_layout_row_dynamic(ui_ctx, UI_SEPARATOR_HEIGHT, 1); - - ui_hue_cycle( 1 ); - - struct nk_command_buffer *canvas; - struct nk_input *input = &ui_ctx->input; - canvas = nk_window_get_canvas(ui_ctx); - struct nk_rect space; - enum nk_widget_layout_states state; - state = nk_widget(&space, ui_ctx); - if (state) nk_fill_rect(canvas, space, 0, ui_ctx->style.window.header.normal.data.color ); - - return 1; -} - -int ui_subimage(const char *label, handle id, unsigned iw, unsigned ih, unsigned sx, unsigned sy, unsigned sw, unsigned sh) { - if( label && ui_filter && ui_filter[0] ) if( !strstri(label, ui_filter) ) return 0; - - nk_layout_row_dynamic(ui_ctx, sh < 30 || id == texture_checker().id ? 0 : sh, 1 + (label && label[0])); - if( label && label[0] ) ui_label_(label, NK_TEXT_LEFT); - - struct nk_rect bounds; nk_layout_peek(&bounds, ui_ctx); bounds.w -= 10; // bounds.w *= 0.95f; - - int ret = nk_button_image_styled(ui_ctx, &ui_ctx->style.button, nk_subimage_id((int)id, iw, ih, nk_rect(sx,sy,sw,sh))); - if( !ret ) { - ret |= input(MOUSE_L) && nk_input_is_mouse_hovering_rect(&ui_ctx->input, bounds); // , true); - } - if( ret ) { - int px = 100 * (ui_ctx->input.mouse.pos.x - bounds.x ) / (float)bounds.w; - int py = 100 * (ui_ctx->input.mouse.pos.y - bounds.y ) / (float)bounds.h; - return px * 100 + py; // printf("%d %d xy:%d\n", px, py, (px * 100) + py); - } - return ret; // !!ret; -} - -int ui_image(const char *label, handle id, unsigned w, unsigned h) { - return ui_subimage(label, id, w,h, 0,0,w,h); -} - -int ui_texture(const char *label, texture_t t) { - return ui_subimage(label, t.id, t.w,t.h, 0,0,t.w,t.h); -} - -int ui_subtexture(const char *label, texture_t t, unsigned x, unsigned y, unsigned w, unsigned h) { - return ui_subimage(label, t.id, t.w,t.h, x,y,w,h); -} - -int ui_colormap( const char *label, colormap_t *cm ) { - if( label && ui_filter && ui_filter[0] ) if( !strstri(label, ui_filter) ) return 0; - - int ret = 0; - if( !cm->texture ) { - const char *title = va("%s (no image)", label); - if( ui_image( title, texture_checker().id, 0,0 ) ) { - ret = 2; - } - } else { - unsigned w = cm->texture->w, h = cm->texture->h; - ui_label(va("%s (%s)", label, cm->texture->filename) ); // @fixme: labelf would crash? - - const char *fmt[] = { "", "R", "RG", "RGB", "RGBA" }; - const char *title = va("%s %dx%d %s", label, w, h, fmt[cm->texture->n]); - if( ui_image( title, cm->texture->id, 128, 128 ) ) { - ret = 2; - } - } - - if( ui_color4f( va("%s Color", label), (float *) &cm->color ) ) { - ret = 1; - } - return ret; -} - -int ui_radio(const char *label, const char **items, int num_items, int *selector) { - if( label && ui_filter && ui_filter[0] ) if( !strstri(label, ui_filter) ) return 0; - - int ret = 0; - if( label && label[0] ) ui_label(label); - for( int i = 0; i < num_items; i++ ) { - bool enabled = *selector == i; - if( ui_bool( va("%s%s", label && label[0] ? " ":"", items[i]), &enabled ) ) { - *selector = i; - ret |= 1; - } - } - return ret; -} - -int ui_section(const char *label) { - if( label && ui_filter && ui_filter[0] ) if( !strstri(label, ui_filter) ) return 0; - - //ui_separator(); - return ui_label(va("*%s", label)); -} - -int ui_dialog(const char *label, const char *text, int choices, bool *show) { // @fixme: return - if( label && ui_filter && ui_filter[0] ) if( !strstri(label, ui_filter) ) return 0; - - ui_has_active_popups = 0; - if(*show) { - static struct nk_rect s = {0, 0, 300, 190}; - if (nk_popup_begin(ui_ctx, NK_POPUP_STATIC, label, NK_WINDOW_BORDER|NK_WINDOW_CLOSABLE, s)) { - nk_layout_row_dynamic(ui_ctx, 20, 1); - for( char t[1024]; *text && sscanf(text, "%[^\r\n]", t); ) { - nk_label(ui_ctx, t, NK_TEXT_LEFT); - text += strlen(t); while(*text && *text < 32) text++; - } - - if( choices ) { - if( ui_buttons(choices > 1 ? 2 : 1, "OK", "Cancel") ) { - *show = 0; - nk_popup_close(ui_ctx); - } - } - - nk_popup_end(ui_ctx); - } else { - *show = nk_false; - } - ui_has_active_popups = *show; - } - return *show; -} - -#define ui_bitmask_template(X) \ -int ui_bitmask##X(const char *label, uint##X##_t *enabled) { \ - if( label && ui_filter && ui_filter[0] ) if( !strstri(label, ui_filter) ) return 0; \ -\ - /* @fixme: better way to retrieve widget width? nk_layout_row_dynamic() seems excessive */ \ - nk_layout_row_dynamic(ui_ctx, 1, 1); \ - struct nk_rect bounds = nk_widget_bounds(ui_ctx); \ -\ - /* actual widget: label + X checkboxes */ \ - nk_layout_row_begin(ui_ctx, NK_STATIC, 0, 1+X); \ -\ - int offset = bounds.w > (15*X) ? bounds.w - (15*X) : 0; /* bits widget below needs at least 118px wide */ \ - nk_layout_row_push(ui_ctx, offset); \ - ui_label_(label, NK_TEXT_LEFT); \ -\ - uint8_t copy = *enabled; \ - for( int i = 0; i < X; ++i ) { \ - int b = (X-1-i); \ - nk_layout_row_push(ui_ctx, 10); \ - /* bit */ \ - int val = (*enabled >> b) & 1; \ - int chg = nk_checkbox_label(ui_ctx, "", &val); \ - *enabled = (*enabled & ~(1 << b)) | ((!!val) << b); \ - /* tooltip */ \ - struct nk_rect bb = { offset + 10 + i * 14, bounds.y, 14, 30 }; /* 10:padding,14:width,30:height */ \ - if (nk_input_is_mouse_hovering_rect(&ui_ctx->input, bb) && !ui_has_active_popups && nk_window_has_focus(ui_ctx)) { \ - nk_tooltipf(ui_ctx, "Bit %d", b); \ - } \ - } \ -\ - nk_layout_row_end(ui_ctx); \ - return copy ^ *enabled; \ -} - -ui_bitmask_template(8); -ui_bitmask_template(16); -//ui_bitmask_template(32); - -int ui_console() { // @fixme: buggy - static char *cmd = 0; - static int enter = 0; - - struct nk_font *font = nk_glfw.atlas.fonts->next /*2nd font*/; - if( font && nk_style_push_font(ui_ctx, &font->handle) ) {} else font = 0; - - struct nk_rect bounds = {0,0,400,300}; // @fixme: how to retrieve inlined region below? (inlined) - if( 1 ) /*if( windowed || (!windowed && *inlined) )*/ bounds = nk_window_get_content_region(ui_ctx); - else { struct nk_rect b; nk_layout_peek(&b, ui_ctx); bounds.w = b.w; } - - nk_layout_row_static(ui_ctx, bounds.h - UI_ROW_HEIGHT, bounds.w, 1); - - static array(char*) lines = 0; - for( int i = 0; i < array_count(lines); ++i ) - if(lines[i]) nk_label_wrap(ui_ctx, lines[i]); // "This is a very long line to hopefully get this text to be wrapped into multiple lines to show line wrapping"); - - if( enter ) { - array_push(lines, 0); - - for( FILE *fp = popen(cmd, "r"); fp; pclose(fp), fp = 0) { - int ch; - do { - ch = fgetc(fp); - if( strchr("\r\n\t\b", ch) ) { - array_push(lines,0); - continue; - } - if( ch >= ' ' ) strcatf(array_back(lines), "%c", ch); - } while(ch > 0); - } - - cmd[0] = 0; - } - - enter = ui_string("", &cmd); - - if( font ) nk_style_pop_font(ui_ctx); - - return enter; -} - -int ui_browse(const char **output, bool *inlined) { - static struct browser_media media = {0}; - static struct browser browsers[2] = {0}; // 2 instances max: 0=inlined, 1=windowed - static char *results[2] = {0}; // 2 instances max: 0=inlined, 1=windowed - do_once { - const int W = 96, H = 96; // 2048x481 px, 21x5 cells - texture_t i = texture("icons/suru.png", TEXTURE_RGBA|TEXTURE_MIPMAPS); - browser_config_dir(icon_load_rect(i.id, i.w, i.h, W, H, 16, 3), BROWSER_FOLDER); // default group - browser_config_dir(icon_load_rect(i.id, i.w, i.h, W, H, 2, 4), BROWSER_HOME); - browser_config_dir(icon_load_rect(i.id, i.w, i.h, W, H, 17, 3), BROWSER_COMPUTER); - browser_config_dir(icon_load_rect(i.id, i.w, i.h, W, H, 1, 4), BROWSER_PROJECT); - browser_config_dir(icon_load_rect(i.id, i.w, i.h, W, H, 0, 4), BROWSER_DESKTOP); - - browser_config_type(icon_load_rect(i.id, i.w, i.h, W, H, 8, 0), ""); - browser_config_type(icon_load_rect(i.id, i.w, i.h, W, H, 10, 2), ".txt.md.doc.license" "."); - browser_config_type(icon_load_rect(i.id, i.w, i.h, W, H, 8, 1), ".ini.cfg" "."); - browser_config_type(icon_load_rect(i.id, i.w, i.h, W, H, 8, 3), ".xlsx" "."); - browser_config_type(icon_load_rect(i.id, i.w, i.h, W, H, 9, 0), ".c" "."); - browser_config_type(icon_load_rect(i.id, i.w, i.h, W, H, 4, 1), ".h.hpp.hh.hxx" "."); - browser_config_type(icon_load_rect(i.id, i.w, i.h, W, H, 4, 2), ".fs.vs.gs.fx.glsl.shader" "."); - browser_config_type(icon_load_rect(i.id, i.w, i.h, W, H, 12, 0), ".cpp.cc.cxx" "."); - browser_config_type(icon_load_rect(i.id, i.w, i.h, W, H, 15, 0), ".json" "."); - browser_config_type(icon_load_rect(i.id, i.w, i.h, W, H, 15, 2), ".bat.sh" "."); - browser_config_type(icon_load_rect(i.id, i.w, i.h, W, H, 6, 1), ".htm.html" "."); - browser_config_type(icon_load_rect(i.id, i.w, i.h, W, H, 20, 1), ".xml" "."); - browser_config_type(icon_load_rect(i.id, i.w, i.h, W, H, 12, 1), ".js" "."); - browser_config_type(icon_load_rect(i.id, i.w, i.h, W, H, 0, 3), ".ts" "."); - browser_config_type(icon_load_rect(i.id, i.w, i.h, W, H, 6, 2), ".py" "."); - browser_config_type(icon_load_rect(i.id, i.w, i.h, W, H, 16, 1), ".lua" "."); - browser_config_type(icon_load_rect(i.id, i.w, i.h, W, H, 10, 0), ".css.doc" "."); - browser_config_type(icon_load_rect(i.id, i.w, i.h, W, H, 6, 0), ".wav.flac.ogg.mp1.mp3.mod.xm.s3m.it.sfxr.mid.fur" "."); - browser_config_type(icon_load_rect(i.id, i.w, i.h, W, H, 1, 3), ".ttf.ttc.otf" "."); - browser_config_type(icon_load_rect(i.id, i.w, i.h, W, H, 7, 1), ".jpg.jpeg.png.bmp.psd.pic.pnm.ico.ktx.pvr.dds.astc.basis.hdr.tga.gif" "."); - browser_config_type(icon_load_rect(i.id, i.w, i.h, W, H, 4, 3), ".mp4.mpg.ogv.mkv.wmv.avi" "."); - browser_config_type(icon_load_rect(i.id, i.w, i.h, W, H, 2, 1), ".iqm.iqe.gltf.gltf2.glb.fbx.obj.dae.blend.md3.md5.ms3d.smd.x.3ds.bvh.dxf.lwo" "."); - browser_config_type(icon_load_rect(i.id, i.w, i.h, W, H, 0, 1), ".exe" "."); - browser_config_type(icon_load_rect(i.id, i.w, i.h, W, H, 7, 0), ".bin.dSYM.pdb.o.lib.dll" "."); - browser_config_type(icon_load_rect(i.id, i.w, i.h, W, H, 15, 3), ".zip.rar.7z.pak" "."); - - for( int j = 0; j < countof(browsers); ++j ) browser_init(&browsers[j]); - browsers[0].listing = 1; // inlined version got listing by default, as there is not much space for layouting - } - // at_exit: browser_free(&browser); - - int clicked = 0; - bool windowed = !inlined; - if( windowed || (!windowed && *inlined) ) { - - struct browser *browser = browsers + windowed; // select instance - char **result = results + windowed; // select instance - - struct nk_rect bounds = {0}; // // {0,0,400,300}; - // #define P(b) printf(FILELINE " (%3d,%3d) %3d,%3d\n", (int)b.x,(int)b.y, (int)b.w,(int)b.h) - // if(ui_ctx->current) bounds = nk_layout_space_bounds(ui_ctx), P(bounds); - // if(ui_ctx->current) bounds = nk_layout_widget_bounds(ui_ctx), P(bounds); - // if(ui_ctx->current) bounds = nk_widget_bounds(ui_ctx), P(bounds); - // if(ui_ctx->current) bounds = nk_window_get_bounds(ui_ctx), P(bounds); - // if(ui_ctx->current) bounds = nk_window_get_content_region(ui_ctx), P(bounds); - // if(ui_ctx->current) nk_layout_peek(&bounds, ui_ctx), P(bounds); - // if(ui_ctx->current) nk_layout_widget_space(&bounds, ui_ctx, ui_ctx->current, nk_false), P(bounds); // note: cant be used within a panel - // #undef P - - // panel - // v4k_ui.c:2497 ( 6, 34) 310, 24 - // v4k_ui.c:2498 ( 16, 62) 286, 24 - // v4k_ui.c:2499 ( 16, 86) 296, 24 - // v4k_ui.c:2500 ( 0, 0) 327,613 - // v4k_ui.c:2501 ( 6, 34) 310,572 << ok - // v4k_ui.c:2502 ( 16, 86) 296, 24 - // v4k_ui.c:2503 (316, 62) 297, 24 - - // window - // v4k_ui.c:2497 (188,152) 711, 4 - // v4k_ui.c:2498 (188,152) 711, 4 - // v4k_ui.c:2499 (-2147483648,156) -2147483648, 4 - // v4k_ui.c:2500 (182,118) 728,409 - // v4k_ui.c:2501 (188,152) 711,368 << ok - // v4k_ui.c:2502 (-2147483648,156) -2147483648, 4 - // v4k_ui.c:2503 (-2147483648,152) -2147483648, 4 - - // popup - // v4k_ui.c:2497 ( 9, 30) 350, 24 - // v4k_ui.c:2498 ( 19, 58) 326, 24 - // v4k_ui.c:2499 ( 19, 82) 336, 24 - // v4k_ui.c:2500 ( 4, 29) 360,460 - // v4k_ui.c:2501 ( 9, 30) 350,458 << ok - // v4k_ui.c:2502 ( 19, 82) 336, 24 - // v4k_ui.c:2503 (359, 58) 336, 24 - - bounds = nk_window_get_content_region(ui_ctx); - if( !windowed && *inlined ) bounds.h *= 0.80; - - clicked = browser_run(ui_ctx, browser, windowed, bounds); - if( clicked ) { - strcatf(result, "%d", 0); - (*result)[0] = '\0'; - strcatf(result, "%s", browser->file); - if( inlined ) *inlined = 0; - - const char *target = ifdef(win32, "/", "\\"), *replace = ifdef(win32, "\\", "/"); - strswap(*result, target, replace); - - if( output ) *output = *result; - } - } - - return clicked; -} - -/* -// demo: - static const char *file; - if( ui_panel("inlined", 0)) { - static bool show_browser = 0; - if( ui_button("my button") ) { show_browser = true; } - if( ui_browse(&file, &show_browser) ) puts(file); - ui_panel_end(); - } - if( ui_window("windowed", 0) ) { - if( ui_browse(&file, NULL) ) puts(file); - ui_window_end(); - } -*/ - -// ---------------------------------------------------------------------------- - -int ui_demo(int do_windows) { - static int integer = 42; - static bool toggle = true; - static bool boolean = true; - static float floating = 3.14159; - static float float2[2] = {1,2}; - static float float3[3] = {1,2,3}; - static float float4[4] = {1,2,3,4}; - static float rgbf[3] = {0.84,0.67,0.17}; - static float rgbaf[4] = {0.67,0.90,0.12,1}; - static unsigned rgb = CYAN; - static unsigned rgba = PINK; - static float slider = 0.5f; - static float slider2 = 0.5f; - static char string[64] = "hello world 123"; - static int item = 0; const char *list[] = {"one","two","three"}; - static bool show_dialog = false; - static bool show_browser = false; - static const char* browsed_file = ""; - static uint8_t bitmask = 0x55; - static int hits = 0; - static int window1 = 0, window2 = 0, window3 = 0; - static int disable_all = 0; - - if( ui_panel("UI", 0) ) { - int choice = ui_toolbar("Browser;Toast@Notify;Toggle on/off"); - if(choice == 1) show_browser = true; - if(choice == 2) ui_notify(va("My random toast (%d)", rand()), va("This is notification #%d", ++hits)); - if(choice == 3) disable_all ^= 1; - - if( disable_all ) ui_disable(); - - if( ui_browse(&browsed_file, &show_browser) ) puts(browsed_file); - - if( ui_section("Labels")) {} - if( ui_label("my label")) {} - if( ui_label("my label with tooltip@built on " __DATE__ " " __TIME__)) {} - if( ui_label2_toolbar("my toolbar", ICON_MD_STAR ICON_MD_STAR_OUTLINE ICON_MD_BOOKMARK ICON_MD_BOOKMARK_BORDER) ) {} - //if( ui_label2_wrap("my long label", "and some long long long long text wrapped")) {} - - if( ui_section("Types")) {} - if( ui_bool("my bool", &boolean) ) puts("bool changed"); - if( ui_int("my int", &integer) ) puts("int changed"); - if( ui_float("my float", &floating) ) puts("float changed"); - if( ui_buffer("my string", string, 64) ) puts("string changed"); - - if( ui_section("Vectors") ) {} - if( ui_float2("my float2", float2) ) puts("float2 changed"); - if( ui_float3("my float3", float3) ) puts("float3 changed"); - if( ui_float4("my float4", float4) ) puts("float4 changed"); - - if( ui_section("Lists")) {} - if( ui_list("my list", list, 3, &item ) ) puts("list changed"); - - if( ui_section("Colors")) {} - if( ui_color3("my color3", &rgb) ) puts("color3 changed"); - if( ui_color4("my color4@this is a tooltip", &rgba) ) puts("color4 changed"); - if( ui_color3f("my color3f", rgbf) ) puts("color3f changed"); - if( ui_color4f("my color4f@this is a tooltip", rgbaf) ) puts("color4f changed"); - - if( ui_section("Sliders")) {} - if( ui_slider("my slider", &slider)) puts("slider changed"); - if( ui_slider2("my slider 2", &slider2, va("%.2f", slider2))) puts("slider2 changed"); - - if( do_windows ) { - if( ui_section("Windows")) {} - int show = ui_buttons(3, "Container", "SubPanel", "SubRender"); - if( show == 1 ) window1 = 1; - if( show == 2 ) window2 = 1; - if( show == 3 ) window3 = 1; - } - - if( ui_section("Others")) {} - if( ui_bitmask8("my bitmask", &bitmask) ) printf("bitmask changed %x\n", bitmask); - if( ui_toggle("my toggle", &toggle) ) printf("toggle %s\n", toggle ? "on":"off"); - if( ui_image("my image", texture_checker().id, 0, 0) ) { puts("image clicked"); } - - if( ui_separator() ) {} - if( ui_button("my button") ) { puts("button clicked"); show_dialog = true; } - if( ui_buttons(2, "yes", "no") ) { puts("button clicked"); } - if( ui_buttons(3, "yes", "no", "maybe") ) { puts("button clicked"); } - if( ui_dialog("my dialog", __FILE__ "\n" __DATE__ "\n" "Public Domain.", 2/*two buttons*/, &show_dialog) ) {} - - if( disable_all ) ui_enable(); // restore enabled state - - ui_panel_end(); - } - - if( !do_windows ) return 0; - - // window api showcasing - if( ui_window("Container demo", &window1) ) { - ui_label("label #1"); - if( ui_bool("my bool", &boolean) ) puts("bool changed"); - if( ui_int("my int", &integer) ) puts("int changed"); - if( ui_float("my float", &floating) ) puts("float changed"); - if( ui_buffer("my string", string, 64) ) puts("string changed"); - ui_window_end(); - } - - if( ui_window("SubPanel demo", &window2) ) { - if( ui_panel("panel #2", 0) ) { - ui_label("label #2"); - if( ui_bool("my bool", &boolean) ) puts("bool changed"); - if( ui_int("my int", &integer) ) puts("int changed"); - if( ui_float("my float", &floating) ) puts("float changed"); - if( ui_buffer("my string", string, 64) ) puts("string changed"); - ui_panel_end(); - } - ui_window_end(); - } - - if( ui_window("SubRender demo", &window3) ) { - if( ui_panel("panel #3A", 0) ) { - if( ui_bool("my bool", &boolean) ) puts("bool changed"); - if( ui_int("my int", &integer) ) puts("int changed"); - if( ui_float("my float", &floating) ) puts("float changed"); - if( ui_buffer("my string", string, 64) ) puts("string changed"); - if( ui_separator() ) {} - if( ui_slider("my slider", &slider)) puts("slider changed"); - if( ui_slider2("my slider 2", &slider2, va("%.2f", slider2))) puts("slider2 changed"); - ui_panel_end(); - } - if( ui_panel("panel #3B", 0) ) { - if( ui_bool("my bool", &boolean) ) puts("bool changed"); - if( ui_int("my int", &integer) ) puts("int changed"); - if( ui_float("my float", &floating) ) puts("float changed"); - if( ui_buffer("my string", string, 64) ) puts("string changed"); - if( ui_separator() ) {} - if( ui_slider("my slider", &slider)) puts("slider changed"); - if( ui_slider2("my slider 2", &slider2, va("%.2f", slider2))) puts("slider2 changed"); - ui_panel_end(); - } - - const char *title = "SubRender demo"; - struct nk_window *win = nk_window_find(ui_ctx, title); - if( win ) { - enum { menubar_height = 65 }; // title bar (~32) + menu bounds (~25) - struct nk_rect bounds = win->bounds; bounds.y += menubar_height; bounds.h -= menubar_height; -#if 1 - ddraw_flush(); - - // @fixme: this is breaking rendering when post-fxs are in use. edit: cannot reproduce - static texture_t tx = {0}; - if( texture_rec_begin(&tx, bounds.w, bounds.h )) { - glClearColor(0.15,0.15,0.15,1); - glClear(GL_COLOR_BUFFER_BIT); - ddraw_grid(10); - ddraw_flush(); - texture_rec_end(&tx); - } - struct nk_image image = nk_image_id((int)tx.id); - nk_draw_image_flipped(nk_window_get_canvas(ui_ctx), bounds, &image, nk_white); -#else - static video_t *v = NULL; - do_once v = video( "bjork-all-is-full-of-love.mp4", VIDEO_RGB ); - - texture_t *textures = video_decode( v ); - - struct nk_image image = nk_image_id((int)textures[0].id); - nk_draw_image(nk_window_get_canvas(ui_ctx), bounds, &image, nk_white); -#endif - } - - ui_window_end(); - } - return 0; -} +// ---------------------------------------------------------------------------------------- +// ui extensions first + +static float +nk_text_width(struct nk_context *ctx, const char *str, unsigned len) { + const struct nk_style *style = &ctx->style; + const struct nk_user_font *f = style->font; + float pixels_width = f->width(f->userdata, f->height, str, len ? (int)len : (int)strlen(str)); + return pixels_width + 10; // 10 -> internal widget padding +} + +static nk_bool +nk_hovered_text(struct nk_context *ctx, const char *str, int len, + nk_flags align, nk_bool value) +{ + struct nk_window *win; + struct nk_panel *layout; + const struct nk_input *in; + const struct nk_style *style; + + enum nk_widget_layout_states state; + struct nk_rect bounds; + + NK_ASSERT(ctx); + NK_ASSERT(ctx->current); + NK_ASSERT(ctx->current->layout); + if (!ctx || !ctx->current || !ctx->current->layout) + return 0; + + win = ctx->current; + layout = win->layout; + style = &ctx->style; + + state = nk_widget(&bounds, ctx); + if (!state) return 0; + in = (state == NK_WIDGET_ROM || layout->flags & NK_WINDOW_ROM) ? 0 : &ctx->input; + + #if 1 //< @r-lyeh: sim button logic + struct nk_rect touch; + touch.x = bounds.x - style->selectable.touch_padding.x; + touch.y = bounds.y - style->selectable.touch_padding.y; + touch.w = bounds.w + style->selectable.touch_padding.x * 2; + touch.h = bounds.h + style->selectable.touch_padding.y * 2; + int clicked = !!nk_button_behavior(&ctx->last_widget_state, touch, in, NK_BUTTON_DEFAULT); + in = 0; //< @r-lyeh: do not pass any input + #endif + + nk_do_selectable(&ctx->last_widget_state, &win->buffer, bounds, + str, len, align, &value, &style->selectable, in, style->font); + + return clicked; //< @r-lyeh: return sim button logic instead of prev function call +} + +#define ui_push_hspace(px) \ + (int xx = px; xx; xx = 0) \ + for(struct nk_context *ctx = (struct nk_context*)ui_handle(); ctx; ctx = 0 ) \ + for(struct nk_panel *layout = ui_ctx->current->layout; layout; ) \ + for( xx = (layout->at_x += px, layout->bounds.w -= px, 0); layout; layout->at_x -= px, layout->bounds.w += px, layout = 0 ) + +// helper macros to instance an overlayed toolbar within the regions of an existing widget +#define UI_TOOLBAR_OVERLAY_DECLARE(...) \ + __VA_ARGS__; \ + struct nk_rect toolbar_bounds; nk_layout_peek(&toolbar_bounds, ui_ctx); \ + struct nk_vec2 item_padding = ui_ctx->style.text.padding; \ + struct nk_text text; \ + text.padding.x = item_padding.x; \ + text.padding.y = item_padding.y; \ + text.background = ui_ctx->style.window.background; +#define UI_TOOLBAR_OVERLAY(CHOICE,TEXT,COLOR,ALIGNMENT) \ + do { \ + text.text = COLOR; \ + nk_widget_text(&ui_ctx->current->buffer, toolbar_bounds, TEXT, strlen(TEXT), &text, ALIGNMENT, ui_ctx->style.font); \ + int clicked_x = input_down(MOUSE_L) && nk_input_is_mouse_hovering_rect(&ui_ctx->input, toolbar_bounds); \ + if( clicked_x ) clicked_x = (int)((ui_ctx->input.mouse.pos.x - toolbar_bounds.x) - (ALIGNMENT == NK_TEXT_RIGHT ? bounds.w : 0) ); \ + CHOICE = 1 + (ALIGNMENT == NK_TEXT_RIGHT ? -1 : +1) * clicked_x / (UI_ICON_FONTSIZE + UI_ICON_SPACING_X); /* divided by px per ICON_MD_ glyph approximately */ \ + int glyphs = strlen(TEXT) / 4 /*3:MD,4:MDI*/; CHOICE *= !!clicked_x * (CHOICE <= glyphs); } while(0) + +// menu macros that work not only standalone but also contained within a panel or window +static int ui_using_v2_menubar = 0; +#define UI_MENU(N, ...) do { \ + enum { MENUROW_HEIGHT = 25 }; \ + int embedded = !!ui_ctx->current; \ + struct nk_rect total_space = {0,0,window_width(),window_height()}; \ + if( embedded ) total_space = nk_window_get_bounds(ui_ctx), total_space.w -= 10; \ + int created = !embedded && nk_begin(ui_ctx, "MENU_" STRINGIZE(__COUNTER__), nk_rect(0, 0, window_width(), UI_MENUROW_HEIGHT), NK_WINDOW_NO_SCROLLBAR); \ + if ( embedded || created ) { \ + ui_using_v2_menubar = 1; \ + int align = NK_TEXT_LEFT, Nth = (N), ITEM_WIDTH = 30, span = 0; \ + nk_menubar_begin(ui_ctx); \ + nk_layout_row_begin(ui_ctx, NK_STATIC, MENUROW_HEIGHT, Nth); \ + __VA_ARGS__; \ + nk_menubar_end(ui_ctx); \ + if( created ) nk_end(ui_ctx); \ + } } while(0) +#define UI_MENU_POPUP(title, px, ...) { \ + int hspace = maxi(ITEM_WIDTH, nk_text_width(ui_ctx,(title),0)); \ + nk_layout_row_push(ui_ctx, hspace); span += hspace; \ + if (nk_menu_begin_label(ui_ctx, (title), align, nk_vec2(px.x>1?px.x:px.x*total_space.w,px.y>1?px.y:px.y*total_space.h))) { \ + __VA_ARGS__; \ + nk_menu_end(ui_ctx); \ + }} +#define UI_MENU_ITEM(title, ...) { \ + int hspace = maxi(ITEM_WIDTH, nk_text_width(ui_ctx,(title),0)); \ + nk_layout_row_push(ui_ctx, hspace); span += hspace; \ + if (nk_menu_begin_label(ui_ctx, (title), align, nk_vec2(1,1))) { \ + __VA_ARGS__; \ + nk_menu_close(ui_ctx); \ + nk_menu_end(ui_ctx); \ + }} +#define UI_MENU_ALIGN_RIGHT(px, ...) { \ + int hspace = total_space.w - span - (px) - 1.5 * ITEM_WIDTH; \ + nk_layout_row_push(ui_ctx, hspace); span += hspace; \ + if (nk_menu_begin_label(ui_ctx, (title), align = NK_TEXT_RIGHT, nk_vec2(1,1))) { \ + __VA_ARGS__; \ + nk_menu_close(ui_ctx); \ + nk_menu_end(ui_ctx); \ + }} + +// ---------------------------------------------------------------------------------------- +// ui + +#ifndef UI_ICONS_SMALL +//#define UI_ICONS_SMALL 1 +#endif + +#define UI_FONT_ENUM(carlito,b612) b612 // carlito + +#define UI_FONT_REGULAR UI_FONT_ENUM("Carlito", "B612") "-Regular.ttf" +#define UI_FONT_HEADING UI_FONT_ENUM("Carlito", "B612") "-BoldItalic.ttf" +#define UI_FONT_TERMINAL UI_FONT_ENUM("Inconsolata", "B612Mono") "-Regular.ttf" + +#if UI_LESSER_SPACING + enum { UI_SEPARATOR_HEIGHT = 5, UI_MENUBAR_ICON_HEIGHT = 20, UI_ROW_HEIGHT = 22, UI_MENUROW_HEIGHT = 32 }; +#else + enum { UI_SEPARATOR_HEIGHT = 10, UI_MENUBAR_ICON_HEIGHT = 25, UI_ROW_HEIGHT = 32, UI_MENUROW_HEIGHT = 32 }; +#endif + +#if UI_FONT_LARGE + #define UI_FONT_REGULAR_SIZE UI_FONT_ENUM(18,17) + #define UI_FONT_HEADING_SIZE UI_FONT_ENUM(20,19) + #define UI_FONT_TERMINAL_SIZE UI_FONT_ENUM(14,14) +#elif UI_FONT_SMALL + #define UI_FONT_REGULAR_SIZE UI_FONT_ENUM(13,14) + #define UI_FONT_HEADING_SIZE UI_FONT_ENUM(14.5,15) + #define UI_FONT_TERMINAL_SIZE UI_FONT_ENUM(14,14) +#else + #define UI_FONT_REGULAR_SIZE UI_FONT_ENUM(14.5,16) + #define UI_FONT_HEADING_SIZE UI_FONT_ENUM(16,17.5) + #define UI_FONT_TERMINAL_SIZE UI_FONT_ENUM(14,14) +#endif + + #define UI_FONT_REGULAR_SAMPLING UI_FONT_ENUM(vec3(1,1,1),vec3(1,1,1)) + #define UI_FONT_HEADING_SAMPLING UI_FONT_ENUM(vec3(1,1,1),vec3(1,1,1)) + #define UI_FONT_TERMINAL_SAMPLING UI_FONT_ENUM(vec3(1,1,1),vec3(1,1,1)) + +#if UI_ICONS_SMALL + #define UI_ICON_FONTSIZE UI_FONT_ENUM(16.5f,16.5f) + #define UI_ICON_SPACING_X UI_FONT_ENUM(-2,-2) + #define UI_ICON_SPACING_Y UI_FONT_ENUM(4.5f,3.5f) +#else + #define UI_ICON_FONTSIZE UI_FONT_ENUM(20,20) + #define UI_ICON_SPACING_X UI_FONT_ENUM(0,0) + #define UI_ICON_SPACING_Y UI_FONT_ENUM(6.5f,5.0f) +#endif + +#define MAX_VERTEX_MEMORY 512 * 1024 +#define MAX_ELEMENT_MEMORY 128 * 1024 + +static struct nk_context *ui_ctx; +static struct nk_glfw nk_glfw = {0}; + +void* ui_handle() { + return ui_ctx; +} + +static void nk_config_custom_fonts() { + #define UI_ICON_MIN ICON_MD_MIN + #define UI_ICON_MED ICON_MD_MAX_16 + #define UI_ICON_MAX ICON_MD_MAX + + #define ICON_BARS ICON_MD_MENU + #define ICON_FILE ICON_MD_INSERT_DRIVE_FILE + #define ICON_TRASH ICON_MD_DELETE + + struct nk_font *font = NULL; + struct nk_font_atlas *atlas = NULL; + nk_glfw3_font_stash_begin(&nk_glfw, &atlas); // nk_sdl_font_stash_begin(&atlas); + + // Default font(#1)... + int datalen = 0; + for( char *data = vfs_load(UI_FONT_REGULAR, &datalen); data; data = 0 ) { + float font_size = UI_FONT_REGULAR_SIZE; + struct nk_font_config cfg = nk_font_config(font_size); + cfg.oversample_h = UI_FONT_REGULAR_SAMPLING.x; + cfg.oversample_v = UI_FONT_REGULAR_SAMPLING.y; + cfg.pixel_snap = UI_FONT_REGULAR_SAMPLING.z; + #if UI_LESSER_SPACING + cfg.spacing.x -= 1.0; + #endif + // win32: struct nk_font *arial = nk_font_atlas_add_from_file(atlas, va("%s/fonts/arial.ttf",getenv("windir")), font_size, &cfg); font = arial ? arial : font; + // struct nk_font *droid = nk_font_atlas_add_from_file(atlas, "nuklear/extra_font/DroidSans.ttf", font_size, &cfg); font = droid ? droid : font; + struct nk_font *regular = nk_font_atlas_add_from_memory(atlas, data, datalen, font_size, &cfg); font = regular ? regular : font; + } + + // ...with icons embedded on it. + static struct icon_font { + const char *file; int yspacing; vec3 sampling; nk_rune range[3]; + } icons[] = { + {"MaterialIconsSharp-Regular.otf", UI_ICON_SPACING_Y, {1,1,1}, {UI_ICON_MIN, UI_ICON_MED /*MAX*/, 0}}, // "MaterialIconsOutlined-Regular.otf" "MaterialIcons-Regular.ttf" + {"materialdesignicons-webfont.ttf", 2, {1,1,1}, {0xF68C /*ICON_MDI_MIN*/, 0xF1CC7/*ICON_MDI_MAX*/, 0}}, + }; + for( int f = 0; f < countof(icons); ++f ) + for( char *data = vfs_load(icons[f].file, &datalen); data; data = 0 ) { + struct nk_font_config cfg = nk_font_config(UI_ICON_FONTSIZE); + cfg.range = icons[f].range; // nk_font_default_glyph_ranges(); + cfg.merge_mode = 1; + + cfg.spacing.x += UI_ICON_SPACING_X; + cfg.spacing.y += icons[f].yspacing; + // cfg.font->ascent += ICON_ASCENT; + // cfg.font->height += ICON_HEIGHT; + + cfg.oversample_h = icons[f].sampling.x; + cfg.oversample_v = icons[f].sampling.y; + cfg.pixel_snap = icons[f].sampling.z; + + #if UI_LESSER_SPACING + cfg.spacing.x -= 1.0; + #endif + + struct nk_font *icons = nk_font_atlas_add_from_memory(atlas, data, datalen, UI_ICON_FONTSIZE, &cfg); + } + + // Monospaced font. Used in terminals or consoles. + + for( char *data = vfs_load(UI_FONT_TERMINAL, &datalen); data; data = 0 ) { + const float font_size = UI_FONT_TERMINAL_SIZE; + static const nk_rune icon_range[] = {32, 127, 0}; + + struct nk_font_config cfg = nk_font_config(font_size); + cfg.range = icon_range; + + cfg.oversample_h = UI_FONT_TERMINAL_SAMPLING.x; + cfg.oversample_v = UI_FONT_TERMINAL_SAMPLING.y; + cfg.pixel_snap = UI_FONT_TERMINAL_SAMPLING.z; + + #if UI_LESSER_SPACING + cfg.spacing.x -= 1.0; + #endif + + // struct nk_font *proggy = nk_font_atlas_add_default(atlas, font_size, &cfg); + struct nk_font *bold = nk_font_atlas_add_from_memory(atlas, data, datalen, font_size, &cfg); + } + + // Extra optional fonts from here... + + for( char *data = vfs_load(UI_FONT_HEADING, &datalen); data; data = 0 ) { + struct nk_font_config cfg = nk_font_config(UI_FONT_HEADING_SIZE); + cfg.oversample_h = UI_FONT_HEADING_SAMPLING.x; + cfg.oversample_v = UI_FONT_HEADING_SAMPLING.y; + cfg.pixel_snap = UI_FONT_HEADING_SAMPLING.z; + + #if UI_LESSER_SPACING + cfg.spacing.x -= 1.0; + #endif + + struct nk_font *bold = nk_font_atlas_add_from_memory(atlas, data, datalen, UI_FONT_HEADING_SIZE, &cfg); + // font = bold ? bold : font; + } + + nk_glfw3_font_stash_end(&nk_glfw); // nk_sdl_font_stash_end(); +// ASSERT(font); + if(font) nk_style_set_font(ui_ctx, &font->handle); + + // Load Cursor: if you uncomment cursor loading please hide the cursor + // nk_style_load_all_cursors(ctx, atlas->cursors); glfwSetInputMode(win, GLFW_CURSOR, GLFW_CURSOR_HIDDEN); +} + +static void nk_config_custom_theme() { + #ifdef UI_HUE + float default_hue = UI_HUE; + #else + // 0.09 orange, 0.14 yellow, 0.40 green, 0.45 turquoise, 0.50 cyan, 0.52 default, 0.55 blue, 0.80 purple, 0.92 cherry, 0.96 red + float hues[] = { 0.40,0.45,0.50,0.52,0.55,0.80,0.92 }; + float default_hue = hues[ (int)((((date() / 10000) % 100) / 24.f) * countof(hues)) ]; // YYYYMMDDhhmmss -> hh as 0..1 +default_hue = 0.52; + #endif + float hue = clampf( optionf("--ui-hue", default_hue /*= 0.52*/), 0, 1 ); + struct nk_color main_hue = nk_hsv_f(hue+0.025, 0.80, 0.400); // washed + struct nk_color hover_hue = nk_hsv_f(hue+0.025, 1.00, 0.600); // vivid + struct nk_color active_hue = nk_hsv_f(hue-0.010, 1.00, 0.600); // bright; same /S/V than vivid, but H/ slighty biased towards a different luma on spectrum + struct nk_color main = nk_hsv_f( 0.600, 0.00, 0.125); // washed b/w + struct nk_color hover = nk_hsv_f( 0.900, 0.00, 0.000); // vivid b/w + struct nk_color active = nk_hsv_f( 0.600, 0.00, 0.150); // bright b/w + struct nk_color table[NK_COLOR_COUNT] = {0}; + table[NK_COLOR_TEXT] = nk_rgba(210, 210, 210, 255); + table[NK_COLOR_WINDOW] = nk_rgba(42, 42, 42, 245); + table[NK_COLOR_HEADER] = nk_rgba(51, 51, 56, 245); + table[NK_COLOR_BORDER] = nk_rgba(46, 46, 46, 255); + table[NK_COLOR_BUTTON] = main; + table[NK_COLOR_BUTTON_HOVER] = hover; + table[NK_COLOR_BUTTON_ACTIVE] = active; + // ok + table[NK_COLOR_TOGGLE] = nk_rgba(45*1.2, 53*1.2, 56*1.2, 255); // table[NK_COLOR_WINDOW]; // nk_rgba(45/1.2, 53/1.2, 56/1.2, 255); + table[NK_COLOR_TOGGLE_HOVER] = active; + table[NK_COLOR_TOGGLE_CURSOR] = main; // vivid_blue; + table[NK_COLOR_SCROLLBAR] = nk_rgba(50, 58, 61, 255); + table[NK_COLOR_SCROLLBAR_CURSOR] = main_hue; + table[NK_COLOR_SCROLLBAR_CURSOR_HOVER] = hover_hue; + table[NK_COLOR_SCROLLBAR_CURSOR_ACTIVE] = active_hue; + table[NK_COLOR_SLIDER] = nk_rgba(50, 58, 61, 255); + table[NK_COLOR_SLIDER_CURSOR] = main_hue; + table[NK_COLOR_SLIDER_CURSOR_HOVER] = hover_hue; + table[NK_COLOR_SLIDER_CURSOR_ACTIVE] = active_hue; + table[NK_COLOR_EDIT] = nk_rgba(50, 58, 61, 225); + table[NK_COLOR_EDIT_CURSOR] = nk_rgba(210, 210, 210, 255); + + // table[NK_COLOR_COMBO] = nk_rgba(50, 58, 61, 255); + + // table[NK_COLOR_PROPERTY] = nk_rgba(50, 58, 61, 255); +table[NK_COLOR_CHART] = nk_rgba(50, 58, 61, 255); +table[NK_COLOR_CHART_COLOR] = main_hue; +table[NK_COLOR_CHART_COLOR_HIGHLIGHT] = hover_hue; // nk_rgba(255, 0, 0, 255); + // table[NK_COLOR_TAB_HEADER] = main; + // table[NK_COLOR_SELECT] = nk_rgba(57, 67, 61, 255); + // table[NK_COLOR_SELECT_ACTIVE] = main; + +// table[NK_COLOR_SELECT] = nk_rgba(255,255,255,255); +table[NK_COLOR_SELECT_ACTIVE] = main_hue; + + // @transparent + #if !is(ems) + if( glfwGetWindowAttrib(window_handle(), GLFW_TRANSPARENT_FRAMEBUFFER) == GLFW_TRUE ) { + table[NK_COLOR_WINDOW].a = + table[NK_COLOR_HEADER].a = 255; + } + #endif + // @transparent + + nk_style_default(ui_ctx); + nk_style_from_table(ui_ctx, table); + + + if(1) + { + struct nk_style_selectable *select; + select = &ui_ctx->style.selectable; +// nk_zero_struct(*select); +// select->hover.data.color = hover_hue; +// select->normal_active = nk_style_item_color(table[NK_COLOR_SELECT_ACTIVE]); + select->text_hover = nk_rgba(0,192,255,255); + select->text_hover_active = select->text_hover; + select->text_normal_active = select->text_hover; // nk_style_item_color(table[NK_COLOR_SELECT_ACTIVE]).data.color; + select->rounding = 2.0f; + } + + + struct nk_style *s = &ui_ctx->style; + s->window.spacing = nk_vec2(4,0); + s->window.combo_border = 0.f; + s->window.scrollbar_size = nk_vec2(5,5); + s->property.rounding = 0; + s->combo.border = 0; + s->combo.button_padding.x = -18; + s->button.border = 1; + s->edit.border = 0; + + if( UI_ROW_HEIGHT < 32 ) { // UI_LESSER_SPACING + s->window.header.label_padding.y /= 2; // 2 + s->window.header.padding.y /= 2; // /= 4 -> 1 + } +} + +static float ui_alpha = 1; +static array(float) ui_alphas; +static void ui_alpha_push(float alpha) { + array_push(ui_alphas, ui_alpha); + ui_alpha = alpha; + + struct nk_color c; + struct nk_style *s = &ui_ctx->style; + c = s->window.background; c.a = alpha * 255; nk_style_push_color(ui_ctx, &s->window.background, c); + c = s->text.color; c.a = alpha * 255; nk_style_push_color(ui_ctx, &s->text.color, c); + c = s->window.fixed_background.data.color; c.a = alpha * 255; nk_style_push_style_item(ui_ctx, &s->window.fixed_background, nk_style_item_color(c)); +} +static void ui_alpha_pop() { + if( array_count(ui_alphas) ) { + nk_style_pop_style_item(ui_ctx); + nk_style_pop_color(ui_ctx); + nk_style_pop_color(ui_ctx); + + ui_alpha = *array_back(ui_alphas); + array_pop(ui_alphas); + } +} + +// ----------------------------------------------------------------------------- +// ui menu + +typedef struct ui_item_t { + char *buf; + int bufcap; + int type; // 0xED17 'edit' for a writeable inputbox buffer, else read-only label +} ui_item_t; + +static array(ui_item_t) ui_items; // queued menu names. to be evaluated during next frame +static vec2 ui_results = {0}; // clicked menu items from last frame + +int ui_item() { + return ui_items ? (ui_results.x == array_count(ui_items) ? ui_results.y : 0) : 0; +} + +int ui_menu(const char *items) { // semicolon- or comma-separated items + array_push(ui_items, ((ui_item_t){STRDUP(items),0,0})); + return ui_item(); +} +int ui_menu_editbox(char *buf, int bufcap) { + array_push(ui_items, ((ui_item_t){buf,bufcap,0xED17})); + return ui_item(); +} + +int ui_has_menubar() { + return ui_using_v2_menubar || !!ui_items; // ? UI_MENUROW_HEIGHT + 8 : 0; // array_count(ui_items) > 0; +} + +static +void ui_separator_line() { + struct nk_rect space; nk_layout_peek(&space, ui_ctx); // bounds.w *= 0.95f; + struct nk_command_buffer *canvas = nk_window_get_canvas(ui_ctx); + nk_stroke_line(canvas, space.x+0,space.y+0,space.x+space.w,space.y+0, 3.0, nk_rgb(128,128,128)); +} + +NK_API nk_bool +nk_menu_begin_text_styled(struct nk_context *ctx, const char *title, int len, + nk_flags align, struct nk_vec2 size, struct nk_style_button *style_button) //< @r-lyeh: added style_button param +{ + struct nk_window *win; + const struct nk_input *in; + struct nk_rect header; + int is_clicked = nk_false; + nk_flags state; + + NK_ASSERT(ctx); + NK_ASSERT(ctx->current); + NK_ASSERT(ctx->current->layout); + if (!ctx || !ctx->current || !ctx->current->layout) + return 0; + + win = ctx->current; + state = nk_widget(&header, ctx); + if (!state) return 0; + in = (state == NK_WIDGET_ROM || win->flags & NK_WINDOW_ROM) ? 0 : &ctx->input; + if (nk_do_button_text(&ctx->last_widget_state, &win->buffer, header, + title, len, align, NK_BUTTON_DEFAULT, style_button, in, ctx->style.font)) + is_clicked = nk_true; + return nk_menu_begin(ctx, win, title, is_clicked, header, size); +} + +static +vec2 ui_toolbar_(array(ui_item_t) ui_items, vec2 ui_results) { + // adjust size for all the upcoming UI elements + // old method: nk_layout_row_dynamic(ui_ctx, UI_MENUBAR_ICON_HEIGHT/*h*/, array_count(ui_items)); + { + const struct nk_style *style = &ui_ctx->style; + + nk_layout_row_template_begin(ui_ctx, UI_MENUBAR_ICON_HEIGHT/*h*/); + for(int i = 0; i < array_count(ui_items); ++i) { + char first_token[512]; + sscanf(ui_items[i].buf, "%[^,;|]", first_token); // @fixme: vsnscanf + + char *tooltip = strchr(first_token, '@'); + int len = tooltip ? (int)(tooltip - first_token /*- 1*/) : strlen(first_token); + + float pixels_width = nk_text_width(ui_ctx, first_token, len); + pixels_width += style->window.header.label_padding.x * 2 + style->window.header.padding.x * 2; + if( pixels_width < 5 ) pixels_width = 5; + nk_layout_row_template_push_static(ui_ctx, pixels_width); + } + nk_layout_row_template_end(ui_ctx); + } + + // display the UI elements + bool has_popups = ui_popups(); + for( int i = 0, end = array_count(ui_items); i < end; ++i ) { + array(char*) ids = strsplit(ui_items[i].buf, ",;|"); + + // transparent style + static struct nk_style_button transparent_style; + do_once transparent_style = ui_ctx->style.button; + do_once transparent_style.normal.data.color = nk_rgba(0,0,0,0); + do_once transparent_style.border_color = nk_rgba(0,0,0,0); + do_once transparent_style.active = transparent_style.normal; + do_once transparent_style.hover = transparent_style.normal; + do_once transparent_style.hover.data.color = nk_rgba(0,0,0,127); + transparent_style.text_alignment = NK_TEXT_ALIGN_CENTERED|NK_TEXT_ALIGN_MIDDLE; // array_count(ids) > 1 ? NK_TEXT_ALIGN_LEFT : NK_TEXT_ALIGN_CENTERED; + + char *tooltip = strchr(ids[0], '@'); + int len = tooltip ? (int)(tooltip - ids[0]) : strlen(ids[0]); + + // single button + if( array_count(ids) == 1 ) { + // tooltip + if( tooltip && !has_popups ) { + struct nk_rect bounds = nk_widget_bounds(ui_ctx); + if (nk_input_is_mouse_hovering_rect(&ui_ctx->input, bounds) && nk_window_has_focus(ui_ctx)) { + nk_tooltip(ui_ctx, tooltip+1); + } + } + // input... + if( ui_items[i].type == 0xED17 ) { + int active = nk_edit_string_zero_terminated(ui_ctx, NK_EDIT_AUTO_SELECT|NK_EDIT_CLIPBOARD|NK_EDIT_FIELD/*NK_EDIT_BOX*/|NK_EDIT_SIG_ENTER, ui_items[i].buf, ui_items[i].bufcap, nk_filter_default); + if( !!(active & NK_EDIT_COMMITED) ) ui_results = vec2(i+1, 0+1), nk_edit_unfocus(ui_ctx); + } + else + // ... else text + if( nk_button_text_styled(ui_ctx, &transparent_style, ids[0], len) ) { + ui_results = vec2(i+1, 0+1); + } + } + else { + struct nk_vec2 dims = {120, array_count(ids) * UI_MENUROW_HEIGHT}; + const struct nk_style *style = &ui_ctx->style; + const struct nk_user_font *f = style->font; + static array(float) lens = 0; array_resize(lens, array_count(ids)); + lens[0] = len; + for( int j = 1; j < array_count(ids); ++j ) { + lens[j] = strlen(ids[j]); + float width_px = f->width(f->userdata, f->height, ids[j], lens[j]); + dims.x = maxf(dims.x, width_px); + } + dims.x += 2 * style->window.header.label_padding.x; + + // dropdown menu + if( nk_menu_begin_text_styled(ui_ctx, ids[0], lens[0], NK_TEXT_ALIGN_CENTERED|NK_TEXT_ALIGN_MIDDLE, dims, &transparent_style) ) { + nk_layout_row_dynamic(ui_ctx, 0, 1); + + for( int j = 1; j < array_count(ids); ++j ) { + char *item = ids[j]; + if( *item == '-' ) { + while(*item == '-') ++item, --lens[j]; + //nk_menu_item_label(ui_ctx, "---", NK_TEXT_LEFT); + ui_separator_line(); + } + + if( nk_menu_item_text(ui_ctx, item, lens[j], NK_TEXT_LEFT) ) { + ui_results = vec2(i+1, j+1-1); + } + } + + nk_menu_end(ui_ctx); + } + } + } + + return ui_results; +} + +int ui_toolbar(const char *icons) { // usage: int clicked_icon = ui_toolbar( ICON_1 ";" ICON_2 ";" ICON_3 ";" ICON_4 ); + vec2 results = {0}; + array(char*) items = strsplit(icons, ",;|"); + static array(ui_item_t) temp = 0; + array_resize(temp, array_count(items)); + for( int i = 0; i < array_count(items); ++i ) temp[i].buf = items[i], temp[i].bufcap = 0, temp[i].type = 0; + return ui_toolbar_(temp, results).x; +} + + +// UI Windows handlers. These are not OS Windows but UI Windows instead. For OS Windows check window_*() API. + +#ifndef WINDOWS_INI +#define WINDOWS_INI editor_path("windows.ini") +#endif + +static map(char*,unsigned) ui_windows = 0; + +static void ui_init() { + do_once { + nk_config_custom_fonts(); + nk_config_custom_theme(); + + map_init(ui_windows, less_str, hash_str); + } +} + +static int ui_window_register(const char *panel_or_window_title) { + unsigned *state = map_find_or_add_allocated_key(ui_windows, STRDUP(panel_or_window_title), 0); + + // check for visibility flag on first call + int visible = 0; + if( *state == 0 ) { + static ini_t i = 0; + do_once i = ini(WINDOWS_INI); // @leak + char **found = i ? map_find(i, va("%s.visible", panel_or_window_title)) : NULL; + if( found ) visible = (*found)[0] == '1'; + } + + *state |= 2; + return visible; +} +int ui_visible(const char *panel_or_window_title) { + return *map_find_or_add_allocated_key(ui_windows, STRDUP(panel_or_window_title), 0) & 1; +} +int ui_show(const char *panel_or_window_title, int enabled) { + unsigned *found = map_find_or_add_allocated_key(ui_windows, STRDUP(panel_or_window_title), 0); + if( enabled ) { + *found |= 1; + nk_window_collapse(ui_ctx, panel_or_window_title, NK_MAXIMIZED); // in case windows was previously collapsed + } else { + *found &= ~1; + } + return !!enabled; +} +int ui_dims(const char *panel_or_window_title, float width, float height) { + nk_window_set_size(ui_ctx, panel_or_window_title, (struct nk_vec2){width, height}); + return 0; +} +vec2 ui_get_dims() { + return (vec2){nk_window_get_width(ui_ctx), nk_window_get_height(ui_ctx)}; +} +static char *ui_build_window_list() { + char *build_windows_menu = 0; + strcatf(&build_windows_menu, "%s;", ICON_MD_VIEW_QUILT); // "Windows"); + for each_map_ptr_sorted(ui_windows, char*, k, unsigned, v) { + strcatf(&build_windows_menu, "%s %s;", ui_visible(*k) ? ICON_MD_CHECK_BOX : ICON_MD_CHECK_BOX_OUTLINE_BLANK, *k); // ICON_MD_VISIBILITY : ICON_MD_VISIBILITY_OFF, *k); // ICON_MD_TOGGLE_ON : ICON_MD_TOGGLE_OFF, *k); + } + strcatf(&build_windows_menu, "-%s;%s", ICON_MD_RECYCLING " Reset layout", ICON_MD_SAVE_AS " Save layout"); + return build_windows_menu; // @leak if discarded +} +static int ui_layout_all_reset(const char *mask); +static int ui_layout_all_save_disk(const char *mask); +static int ui_layout_all_load_disk(const char *mask); + + +static +void ui_menu_render() { + // clean up from past frame + ui_results = vec2(0,0); + if( !ui_items ) return; + if( !array_count(ui_items) ) return; + +// artificially inject Windows menu on the first icon +bool show_window_menu = !!array_count(ui_items); +if( show_window_menu ) { + array_push_front(ui_items, ((ui_item_t){ui_build_window_list(), 0, 0})); +} + + // process menus + if( nk_begin(ui_ctx, "Menu", nk_rect(0, 0, window_width(), UI_MENUROW_HEIGHT), NK_WINDOW_NO_SCROLLBAR/*|NK_WINDOW_BACKGROUND*/)) { + if( ui_ctx->current ) { + nk_menubar_begin(ui_ctx); + + ui_results = ui_toolbar_(ui_items, ui_results); + + //nk_layout_row_end(ui_ctx); + nk_menubar_end(ui_ctx); + } + } + nk_end(ui_ctx); + +if( show_window_menu ) { + // if clicked on first menu (Windows) + if( ui_results.x == 1 ) { + array(char*) split = strsplit(ui_items[0].buf,";"); // *array_back(ui_items), ";"); + const char *title = split[(int)ui_results.y]; title += title[0] == '-'; title += 3 * (title[0] == '\xee'); title += title[0] == ' '; /*skip separator+emoji+space*/ + // toggle window unless clicked on lasts items {"reset layout", "save layout"} + bool clicked_reset_layout = ui_results.y == array_count(split) - 2; + bool clicked_save_layout = ui_results.y == array_count(split) - 1; + /**/ if( clicked_reset_layout ) ui_layout_all_reset("*"); + else if( clicked_save_layout ) file_delete(WINDOWS_INI), ui_layout_all_save_disk("*"); + else ui_show(title, ui_visible(title) ^ true); + // reset value so developers don't catch this click + ui_results = vec2(0,0); + } + // restore state prior to previously injected Windows menu + else + ui_results.x = ui_results.x > 0 ? ui_results.x - 1 : 0; +} + + // clean up for next frame + for( int i = 0; i < array_count(ui_items); ++i ) { + if(ui_items[i].type != 0xED17) + FREE(ui_items[i].buf); + } + array_resize(ui_items, 0); +} + +// ----------------------------------------------------------------------------- + +static int ui_dirty = 1; +static int ui_has_active_popups = 0; +static float ui_hue = 0; // hue +static int ui_is_hover = 0; +static int ui_is_active = 0; +static uint64_t ui_active_mask = 0; + +int ui_popups() { + return ui_has_active_popups; +} +int ui_hover() { + return ui_is_hover; +} +int ui_active() { + return ui_is_active; //window_has_cursor() && nk_window_is_any_hovered(ui_ctx) && nk_item_is_any_active(ui_ctx); +} + +static +int ui_set_enable_(int enabled) { + static struct nk_style off, on; + do_once { + off = on = ui_ctx->style; + float alpha = 0.5f; + + off.text.color.a *= alpha; + +#if 0 + off.button.normal.data.color.a *= alpha; + off.button.hover.data.color.a *= alpha; + off.button.active.data.color.a *= alpha; + off.button.border_color.a *= alpha; + off.button.text_background.a *= alpha; + off.button.text_normal.a *= alpha; + off.button.text_hover.a *= alpha; + off.button.text_active.a *= alpha; + + off.contextual_button.normal.data.color.a *= alpha; + off.contextual_button.hover.data.color.a *= alpha; + off.contextual_button.active.data.color.a *= alpha; + off.contextual_button.border_color.a *= alpha; + off.contextual_button.text_background.a *= alpha; + off.contextual_button.text_normal.a *= alpha; + off.contextual_button.text_hover.a *= alpha; + off.contextual_button.text_active.a *= alpha; +#endif + off.menu_button.normal.data.color.a *= alpha; + off.menu_button.hover.data.color.a *= alpha; + off.menu_button.active.data.color.a *= alpha; + off.menu_button.border_color.a *= alpha; + off.menu_button.text_background.a *= alpha; + off.menu_button.text_normal.a *= alpha; + off.menu_button.text_hover.a *= alpha; + off.menu_button.text_active.a *= alpha; +#if 0 + off.option.normal.data.color.a *= alpha; + off.option.hover.data.color.a *= alpha; + off.option.active.data.color.a *= alpha; + off.option.border_color.a *= alpha; + off.option.cursor_normal.data.color.a *= alpha; + off.option.cursor_hover.data.color.a *= alpha; + off.option.text_normal.a *= alpha; + off.option.text_hover.a *= alpha; + off.option.text_active.a *= alpha; + off.option.text_background.a *= alpha; + + off.checkbox.normal.data.color.a *= alpha; + off.checkbox.hover.data.color.a *= alpha; + off.checkbox.active.data.color.a *= alpha; + off.checkbox.border_color.a *= alpha; + off.checkbox.cursor_normal.data.color.a *= alpha; + off.checkbox.cursor_hover.data.color.a *= alpha; + off.checkbox.text_normal.a *= alpha; + off.checkbox.text_hover.a *= alpha; + off.checkbox.text_active.a *= alpha; + off.checkbox.text_background.a *= alpha; + + off.selectable.normal.data.color.a *= alpha; + off.selectable.hover.data.color.a *= alpha; + off.selectable.pressed.data.color.a *= alpha; + off.selectable.normal_active.data.color.a *= alpha; + off.selectable.hover_active.data.color.a *= alpha; + off.selectable.pressed_active.data.color.a *= alpha; + off.selectable.text_normal.a *= alpha; + off.selectable.text_hover.a *= alpha; + off.selectable.text_pressed.a *= alpha; + off.selectable.text_normal_active.a *= alpha; + off.selectable.text_hover_active.a *= alpha; + off.selectable.text_pressed_active.a *= alpha; + off.selectable.text_background.a *= alpha; + + off.slider.normal.data.color.a *= alpha; + off.slider.hover.data.color.a *= alpha; + off.slider.active.data.color.a *= alpha; + off.slider.border_color.a *= alpha; + off.slider.bar_normal.a *= alpha; + off.slider.bar_hover.a *= alpha; + off.slider.bar_active.a *= alpha; + off.slider.bar_filled.a *= alpha; + off.slider.cursor_normal.data.color.a *= alpha; + off.slider.cursor_hover.data.color.a *= alpha; + off.slider.cursor_active.data.color.a *= alpha; + off.slider.dec_button.normal.data.color.a *= alpha; + off.slider.dec_button.hover.data.color.a *= alpha; + off.slider.dec_button.active.data.color.a *= alpha; + off.slider.dec_button.border_color.a *= alpha; + off.slider.dec_button.text_background.a *= alpha; + off.slider.dec_button.text_normal.a *= alpha; + off.slider.dec_button.text_hover.a *= alpha; + off.slider.dec_button.text_active.a *= alpha; + off.slider.inc_button.normal.data.color.a *= alpha; + off.slider.inc_button.hover.data.color.a *= alpha; + off.slider.inc_button.active.data.color.a *= alpha; + off.slider.inc_button.border_color.a *= alpha; + off.slider.inc_button.text_background.a *= alpha; + off.slider.inc_button.text_normal.a *= alpha; + off.slider.inc_button.text_hover.a *= alpha; + off.slider.inc_button.text_active.a *= alpha; + + off.progress.normal.data.color.a *= alpha; + off.progress.hover.data.color.a *= alpha; + off.progress.active.data.color.a *= alpha; + off.progress.border_color.a *= alpha; + off.progress.cursor_normal.data.color.a *= alpha; + off.progress.cursor_hover.data.color.a *= alpha; + off.progress.cursor_active.data.color.a *= alpha; + off.progress.cursor_border_color.a *= alpha; +#endif + off.property.normal.data.color.a *= alpha; + off.property.hover.data.color.a *= alpha; + off.property.active.data.color.a *= alpha; + off.property.border_color.a *= alpha; + off.property.label_normal.a *= alpha; + off.property.label_hover.a *= alpha; + off.property.label_active.a *= alpha; + off.property.edit.normal.data.color.a *= alpha; + off.property.edit.hover.data.color.a *= alpha; + off.property.edit.active.data.color.a *= alpha; + off.property.edit.border_color.a *= alpha; + off.property.edit.cursor_normal.a *= alpha; + off.property.edit.cursor_hover.a *= alpha; + off.property.edit.cursor_text_normal.a *= alpha; + off.property.edit.cursor_text_hover.a *= alpha; + off.property.edit.text_normal.a *= alpha; + off.property.edit.text_hover.a *= alpha; + off.property.edit.text_active.a *= alpha; + off.property.edit.selected_normal.a *= alpha; + off.property.edit.selected_hover.a *= alpha; + off.property.edit.selected_text_normal.a *= alpha; + off.property.edit.selected_text_hover.a *= alpha; + off.property.dec_button.normal.data.color.a *= alpha; + off.property.dec_button.hover.data.color.a *= alpha; + off.property.dec_button.active.data.color.a *= alpha; + off.property.dec_button.border_color.a *= alpha; + off.property.dec_button.text_background.a *= alpha; + off.property.dec_button.text_normal.a *= alpha; + off.property.dec_button.text_hover.a *= alpha; + off.property.dec_button.text_active.a *= alpha; + off.property.inc_button.normal.data.color.a *= alpha; + off.property.inc_button.hover.data.color.a *= alpha; + off.property.inc_button.active.data.color.a *= alpha; + off.property.inc_button.border_color.a *= alpha; + off.property.inc_button.text_background.a *= alpha; + off.property.inc_button.text_normal.a *= alpha; + off.property.inc_button.text_hover.a *= alpha; + off.property.inc_button.text_active.a *= alpha; + + off.edit.normal.data.color.a *= alpha; + off.edit.hover.data.color.a *= alpha; + off.edit.active.data.color.a *= alpha; + off.edit.border_color.a *= alpha; + off.edit.cursor_normal.a *= alpha; + off.edit.cursor_hover.a *= alpha; + off.edit.cursor_text_normal.a *= alpha; + off.edit.cursor_text_hover.a *= alpha; + off.edit.text_normal.a *= alpha; + off.edit.text_hover.a *= alpha; + off.edit.text_active.a *= alpha; + off.edit.selected_normal.a *= alpha; + off.edit.selected_hover.a *= alpha; + off.edit.selected_text_normal.a *= alpha; + off.edit.selected_text_hover.a *= alpha; +#if 0 + off.chart.background.data.color.a *= alpha; + off.chart.border_color.a *= alpha; + off.chart.selected_color.a *= alpha; + off.chart.color.a *= alpha; + + off.scrollh.normal.data.color.a *= alpha; + off.scrollh.hover.data.color.a *= alpha; + off.scrollh.active.data.color.a *= alpha; + off.scrollh.border_color.a *= alpha; + off.scrollh.cursor_normal.data.color.a *= alpha; + off.scrollh.cursor_hover.data.color.a *= alpha; + off.scrollh.cursor_active.data.color.a *= alpha; + off.scrollh.cursor_border_color.a *= alpha; + + off.scrollv.normal.data.color.a *= alpha; + off.scrollv.hover.data.color.a *= alpha; + off.scrollv.active.data.color.a *= alpha; + off.scrollv.border_color.a *= alpha; + off.scrollv.cursor_normal.data.color.a *= alpha; + off.scrollv.cursor_hover.data.color.a *= alpha; + off.scrollv.cursor_active.data.color.a *= alpha; + off.scrollv.cursor_border_color.a *= alpha; + + off.tab.background.data.color.a *= alpha; + off.tab.border_color.a *= alpha; + off.tab.text.a *= alpha; +#endif + off.combo.normal.data.color.a *= alpha; + off.combo.hover.data.color.a *= alpha; + off.combo.active.data.color.a *= alpha; + off.combo.border_color.a *= alpha; + off.combo.label_normal.a *= alpha; + off.combo.label_hover.a *= alpha; + off.combo.label_active.a *= alpha; + off.combo.symbol_normal.a *= alpha; + off.combo.symbol_hover.a *= alpha; + off.combo.symbol_active.a *= alpha; + off.combo.button.normal.data.color.a *= alpha; + off.combo.button.hover.data.color.a *= alpha; + off.combo.button.active.data.color.a *= alpha; + off.combo.button.border_color.a *= alpha; + off.combo.button.text_background.a *= alpha; + off.combo.button.text_normal.a *= alpha; + off.combo.button.text_hover.a *= alpha; + off.combo.button.text_active.a *= alpha; +#if 0 + off.window.fixed_background.data.color.a *= alpha; + off.window.background.a *= alpha; + off.window.border_color.a *= alpha; + off.window.popup_border_color.a *= alpha; + off.window.combo_border_color.a *= alpha; + off.window.contextual_border_color.a *= alpha; + off.window.menu_border_color.a *= alpha; + off.window.group_border_color.a *= alpha; + off.window.tooltip_border_color.a *= alpha; + off.window.scaler.data.color.a *= alpha; + off.window.header.normal.data.color.a *= alpha; + off.window.header.hover.data.color.a *= alpha; + off.window.header.active.data.color.a *= alpha; +#endif + } + static struct nk_input input; + if (!enabled) { + ui_alpha_push(0.5); + ui_ctx->style = off; // .button = off.button; + input = ui_ctx->input; + memset(&ui_ctx->input, 0, sizeof(ui_ctx->input)); + } else { + ui_alpha_pop(); + ui_ctx->style = on; // .button = on.button; + ui_ctx->input = input; + } + return enabled; +} + +static int ui_is_enabled = 1; +int ui_enable() { + return ui_is_enabled == 1 ? 0 : ui_set_enable_(ui_is_enabled = 1); +} +int ui_disable() { + return ui_is_enabled == 0 ? 0 : ui_set_enable_(ui_is_enabled = 0); +} +int ui_enabled() { + return ui_is_enabled; +} + +static +void ui_destroy(void) { + if(ui_ctx) { + nk_glfw3_shutdown(&nk_glfw); // nk_sdl_shutdown(); + ui_ctx = 0; + } +} +static +void ui_create() { + do_once atexit(ui_destroy); + + if( ui_dirty ) { + nk_glfw3_new_frame(&nk_glfw); //g->nk_glfw); + ui_dirty = 0; + + ui_enable(); + } +} + +enum { + UI_NOTIFICATION_1 = 32, // sets panel as 1-story notification. used by ui_notify() + UI_NOTIFICATION_2 = 64, // sets panel as 2-story notification. used by ui_notify() +}; + +struct ui_notify { + char *title; + char *body; // char *icon; + float timeout; + float alpha; + int used; +}; + +static array(struct ui_notify) ui_notifications; // format=("%d*%s\n%s", timeout, title, body) + +static +void ui_notify_render() { + // draw queued notifications + if( array_count(ui_notifications) ) { + struct ui_notify *n = array_back(ui_notifications); + + static double timeout = 0; + timeout += 1/60.f; // window_delta(); // @fixme: use editor_time() instead + + ui_alpha_push( timeout >= n->timeout ? 1 - clampf(timeout - n->timeout,0,1) : 1 ); + + if( timeout < (n->timeout + 1) ) { // N secs display + 1s fadeout + if(n->used++ < 3) nk_window_set_focus(ui_ctx, "!notify"); + + if( ui_panel( "!notify", n->title && n->body ? UI_NOTIFICATION_2 : UI_NOTIFICATION_1 ) ) { + if(n->title) ui_label(n->title); + if(n->body) ui_label(n->body); + + ui_panel_end(); + } + } + + if( timeout >= (n->timeout + 2) ) { // 1s fadeout + 1s idle + timeout = 0; + + if(n->title) FREE(n->title); + if(n->body) FREE(n->body); + array_pop(ui_notifications); + } + + ui_alpha_pop(); + } +} + +static +void ui_hue_cycle( unsigned num_cycles ) { + // cycle color (phi ratio) + for( unsigned i = 0; i < num_cycles; ++i ) { + //ui_hue = (ui_hue+0.61803f)*1.61803f; while(ui_hue > 1) ui_hue -= 1; + ui_hue *= 1.61803f / 1.85f; while(ui_hue > 1) ui_hue -= 1; + } +} + +static bool win_debug_visible = true; + +static +void ui_render() { + // draw queued menus + ui_notify_render(); + ui_menu_render(); + + /* IMPORTANT: `nk_sdl_render` modifies some global OpenGL state + * with blending, scissor, face culling, depth test and viewport and + * defaults everything back into a default state. + * Make sure to either a.) save and restore or b.) reset your own state after + * rendering the UI. */ + //nk_sdl_render(NK_ANTI_ALIASING_ON, MAX_VERTEX_MEMORY, MAX_ELEMENT_MEMORY); + + if (win_debug_visible) { + GLfloat bkColor[4]; glGetFloatv(GL_COLOR_CLEAR_VALUE, bkColor); // @transparent + glClearColor(0,0,0,1); // @transparent + glColorMask(GL_TRUE,GL_TRUE,GL_TRUE,!bkColor[3] ? GL_TRUE : GL_FALSE); // @transparent + nk_glfw3_render(&nk_glfw, NK_ANTI_ALIASING_ON, MAX_VERTEX_MEMORY, MAX_ELEMENT_MEMORY); + glColorMask(GL_TRUE,GL_TRUE,GL_TRUE,GL_TRUE); // @transparent + } else { + nk_clear(&nk_glfw.ctx); + } + +#if is(ems) + glFinish(); +#endif + + ui_dirty = 1; + ui_hue = 0; + + ui_is_hover = nk_window_is_any_hovered(ui_ctx) && window_has_cursor(); + + if(input_down(MOUSE_L)) + ui_is_active = (ui_is_hover && nk_item_is_any_active(ui_ctx)); + if(input_up(MOUSE_L)) + ui_is_active = 0; +} + + +// ----------------------------------------------------------------------------- +// save/restore all window layouts on every framebuffer resize + +#define UI_SNAP_PX 1 /*treshold of pixels when snapping panels/windows to the application borders [1..N]*/ +#define UI_ANIM_ALPHA 0.9 /*animation alpha used when restoring panels/windows state from application resizing events: [0..1]*/ +//#define UI_MENUBAR_Y 32 // menubar and row + +typedef struct ui_layout { + const char *title; + + bool is_panel; + + vec2 desktop; + vec2 p0,p1; + float l0,l1; + + float alpha; + float anim_timer; + +} ui_layout; + +static array(ui_layout) ui_layouts[2] = {0}; + +static +int ui_layout_find(const char *title, bool is_panel) { + int i = 0; + for each_array_ptr(ui_layouts[is_panel], ui_layout, s) { + if( !strcmp(title, s->title) ) return i; + ++i; + } + ui_layout s = {0}; + s.is_panel = is_panel; + s.title = STRDUP(title); + array_push(ui_layouts[is_panel], s); + return array_count(ui_layouts[is_panel]) - 1; +} + +static +void ui_layout_save_mem(int idx, vec2 desktop, float workarea_h, struct nk_rect *xywh_, bool is_panel) { + struct nk_rect xywh = *xywh_; //< workaround for a (tcc-0.9.27+lubuntu16) bug, where xywh_ is never populated (ie, empty always) when passed by-copy + + ui_layout *s = &ui_layouts[is_panel][idx]; + + struct nk_window *win = nk_window_find(ui_ctx, s->title); + // if(win && win->flags & NK_WINDOW_FULLSCREEN) return; // skip if maximized + + s->desktop = desktop; + +float excess = 0; +if( win && (win->flags & NK_WINDOW_MINIMIZED)) { + excess = xywh.h - UI_MENUROW_HEIGHT; + xywh.h = UI_MENUROW_HEIGHT; +} + + // sanity checks + if(xywh.x<0) xywh.x = 0; + if(xywh.w>desktop.w-UI_SNAP_PX) xywh.w = desktop.w-UI_SNAP_PX-1; + + if(xywh.ydesktop.h-workarea_h-UI_SNAP_PX) xywh.h = desktop.h-workarea_h-UI_SNAP_PX-1; + + if((xywh.x+xywh.w)>desktop.w) xywh.x-= xywh.x+xywh.w-desktop.w; + if((xywh.y+xywh.h)>desktop.h) xywh.y-= xywh.y+xywh.h-desktop.h; + +if( win && (win->flags & NK_WINDOW_MINIMIZED)) { + xywh.h += excess; +} + + // build reconstruction vectors from bottom-right corner + s->p0 = vec2(xywh.x/s->desktop.x,xywh.y/s->desktop.y); + s->p1 = vec2(xywh.w/s->desktop.x,xywh.h/s->desktop.y); + s->p0 = sub2(s->p0, vec2(1,1)); s->l0 = len2(s->p0); + s->p1 = sub2(s->p1, vec2(1,1)); s->l1 = len2(s->p1); +} + +static +struct nk_rect ui_layout_load_mem(int idx, vec2 desktop, bool is_panel) { + ui_layout *s = &ui_layouts[is_panel][idx]; + + // extract reconstruction coords from bottom-right corner + vec2 p0 = mul2(add2(vec2(1,1), scale2(norm2(s->p0), s->l0)), desktop); + vec2 p1 = mul2(add2(vec2(1,1), scale2(norm2(s->p1), s->l1)), desktop); + + return nk_rect( p0.x, p0.y, p1.x, p1.y ); +} + +static +int ui_layout_all_reset(const char *mask) { + ui_layout z = {0}; + + vec2 desktop = vec2(window_width(), window_height()); + float workarea_h = ui_has_menubar()*UI_MENUROW_HEIGHT; // @fixme workarea -> reserved_area + + for( int is_panel = 0; is_panel < 2; ++is_panel ) { + for( int j = 0; j < array_count(ui_layouts[is_panel]); ++j ) { + if( ui_layouts[is_panel][j].title ) { + + if( nk_window_is_hidden(ui_ctx, ui_layouts[is_panel][j].title) ) continue; + + struct nk_rect xywh = { 0, workarea_h + j * UI_MENUROW_HEIGHT, desktop.w / 3.333, UI_MENUROW_HEIGHT }; + if( is_panel ) { + xywh.x = 0; + xywh.y = workarea_h + j * UI_MENUROW_HEIGHT; + xywh.w = desktop.w / 4; + xywh.h = desktop.h / 3; + } else { + xywh.x = desktop.w / 3.00 + j * UI_MENUROW_HEIGHT; + xywh.y = workarea_h + j * UI_MENUROW_HEIGHT; + xywh.w = desktop.w / 4; + xywh.h = desktop.h / 3; + } + nk_window_set_focus(ui_ctx, ui_layouts[is_panel][j].title); + nk_window_collapse(ui_ctx, ui_layouts[is_panel][j].title, is_panel ? 0 : 1); + struct nk_window* win = is_panel ? 0 : nk_window_find(ui_ctx, ui_layouts[is_panel][j].title ); + if(win) win->flags &= ~NK_WINDOW_FULLSCREEN; + if(win) win->flags &= ~NK_WINDOW_MINIMIZED; + ui_layout_save_mem(j, desktop, workarea_h, &xywh, is_panel); + ui_layouts[is_panel][j].anim_timer = 1.0; + } + } + } + + return 1; +} + +static +int ui_layout_all_save_disk(const char *mask) { + float w = window_width(), h = window_height(); + for each_map_ptr_sorted(ui_windows, char*, k, unsigned, v) { + struct nk_window *win = nk_window_find(ui_ctx, *k); + if( win && strmatchi(*k, mask) ) { + ini_write(WINDOWS_INI, *k, "x", va("%f", win->bounds.x / w )); + ini_write(WINDOWS_INI, *k, "y", va("%f", win->bounds.y / h )); + ini_write(WINDOWS_INI, *k, "w", va("%f", win->bounds.w / w )); + ini_write(WINDOWS_INI, *k, "h", va("%f", win->bounds.h / h )); + ini_write(WINDOWS_INI, *k, "visible", ui_visible(*k) ? "1":"0"); + } + } + return 1; +} + +static +const char *ui_layout_load_disk(const char *title, const char *mask, ini_t i, struct nk_rect *r) { + if(!i) return 0; + + const char *dot = strrchr(title, '.'); + if( dot ) title = va("%.*s", (int)(dot - title), title); + if( !strmatchi(title, mask) ) return 0; + + char **x = map_find(i, va("%s.x", title)); + char **y = map_find(i, va("%s.y", title)); + char **w = map_find(i, va("%s.w", title)); + char **h = map_find(i, va("%s.h", title)); + if( x && y && w && h ) { + float ww = window_width(), wh = window_height(); + r->x = atof(*x) * ww; + r->y = atof(*y) * wh; + r->w = atof(*w) * ww; + r->h = atof(*h) * wh; + + char **on = map_find(i, va("%s.visible", title)); + + return title; + } + return 0; +} + +static +int ui_layout_all_load_disk(const char *mask) { + ini_t i = ini(WINDOWS_INI); // @leak + if( !i ) return 0; + for each_map(i, char*, k, char*, v) { + struct nk_rect out = {0}; + const char *title = ui_layout_load_disk(k, mask, i, &out); + if( title ) { + struct nk_window *win = nk_window_find(ui_ctx, title); + if( win ) { + win->bounds.x = out.x; + win->bounds.y = out.y; + win->bounds.w = out.w; + win->bounds.h = out.h; + } + } + } + return 1; +} + + +// ----------------------------------------------------------------------------- +// shared code for both panels and windows. really messy. + +static +int ui_begin_panel_or_window_(const char *title, int flags, bool is_window) { + +struct nk_window *win = nk_window_find(ui_ctx, title); + +int is_panel = !is_window; +bool starts_minimized = is_panel ? !(flags & PANEL_OPEN) : 0; +bool is_closable = is_window; +bool is_scalable = true; +bool is_movable = true; +bool is_auto_minimizes = starts_minimized; // false; +bool is_pinned = win && (win->flags & NK_WINDOW_PINNED); + +if( is_pinned ) { +// is_closable = false; + is_auto_minimizes = false; + is_scalable = false; +// is_movable = false; +} + + ui_create(); + + uint64_t hash = 14695981039346656037ULL, mult = 0x100000001b3ULL; + for(int i = 0; title[i]; ++i) hash = (hash ^ title[i]) * mult; + ui_hue = (hash & 0x3F) / (float)0x3F; ui_hue += !ui_hue; + + int idx = ui_layout_find(title, is_panel); + ui_layout *s = &ui_layouts[is_panel][idx]; + +vec2 desktop = vec2(window_width(), window_height()); +float workarea_h = ui_has_menubar()*UI_MENUROW_HEIGHT; + + int row = idx + !!ui_has_menubar(); // add 1 to skip menu + vec2 offset = vec2(0, UI_ROW_HEIGHT*row); + float w = desktop.w / 3.33, h = (flags & UI_NOTIFICATION_2 ? UI_MENUROW_HEIGHT*2 : (flags & UI_NOTIFICATION_1 ? UI_MENUROW_HEIGHT : desktop.h - offset.y * 2 - 1)); // h = desktop.h * 0.66; // + struct nk_rect start_coords = {offset.x, offset.y, offset.x+w, offset.y+h}; + +if(is_window) { + w = desktop.w / 1.5; + h = desktop.h / 1.5; + start_coords.x = (desktop.w-w)/2; + start_coords.y = (desktop.h-h)/2 + workarea_h/2; + start_coords.w = w; + start_coords.h = h; +} + + static vec2 edge = {0}; static int edge_type = 0; // [off],L,R,U,D + do_once edge = vec2(desktop.w * 0.33, desktop.h * 0.66); + +// do not snap windows and/or save windows when using may be interacting with UI +int is_active = 0; +int mouse_pressed = !!input(MOUSE_L) && ui_ctx->active == win; +if( win ) { + // update global window activity bitmask + is_active = ui_ctx->active == win; + ui_active_mask = is_active ? ui_active_mask | (1ull << idx) : ui_active_mask & ~(1ull << idx); +} + +// struct nk_style *s = &ui_ctx->style; +// nk_style_push_color(ui_ctx, &s->window.header.normal.data.color, nk_hsv_f(ui_hue,0.6,0.8)); + +// adjust inactive edges automatically +if( win ) { + bool group1_any = !is_active; // && !input(MOUSE_L); + bool group2_not_resizing = is_active && !win->is_window_resizing; + bool group2_interacting = is_active && input(MOUSE_L); + +#if 0 + if( group1_any ) { + // cancel self-adjust if this window is not overlapping the active one that is being resized at the moment + struct nk_window *parent = ui_ctx->active; + + struct nk_rect a = win->bounds, b = parent->bounds; + bool overlap = a.x <= (b.x+b.w) && b.x <= (a.x+a.w) && a.y <= (b.y+b.h) && b.y <= (a.y+a.h); + + group1_any = overlap; + } +#else + if( group1_any ) + group1_any = !(win->flags & NK_WINDOW_PINNED); +#endif + + if( group1_any ) { + float mouse_x = clampf(input(MOUSE_X), 0, desktop.w); + float mouse_y = clampf(input(MOUSE_Y), 0, desktop.h); + float distance_x = absf(mouse_x - win->bounds.x) / desktop.w; + float distance_y = absf(mouse_y - win->bounds.y) / desktop.h; + float alpha_x = sqrt(sqrt(distance_x)); // amplify signals a little bit: 0.1->0.56,0.5->0.84,0.98->0.99,etc + float alpha_y = sqrt(sqrt(distance_y)); + + /**/ if( (edge_type & 1) && win->bounds.x <= UI_SNAP_PX ) { + win->bounds.w = win->bounds.w * alpha_y + edge.w * (1-alpha_y); + } + else if( (edge_type & 2) && (win->bounds.x + win->bounds.w) >= (desktop.w-UI_SNAP_PX) ) { + win->bounds.w = win->bounds.w * alpha_y + edge.w * (1-alpha_y); + win->bounds.x = desktop.w - win->bounds.w; + } + if( (edge_type & 8) && (win->bounds.y + (win->flags & NK_WINDOW_MINIMIZED ? UI_ROW_HEIGHT : win->bounds.h)) >= (desktop.h-UI_SNAP_PX) ) { + win->bounds.h = win->bounds.h * alpha_x + edge.h * (1-alpha_x); + win->bounds.y = desktop.h - (win->flags & NK_WINDOW_MINIMIZED ? UI_ROW_HEIGHT : win->bounds.h); + } + } + + // skip any saving if window is animating (moving) and/or maximized + bool anim_in_progress = s->anim_timer > 1e-3; + s->anim_timer *= anim_in_progress * UI_ANIM_ALPHA; + + if( group1_any || !group2_interacting || anim_in_progress ) { + struct nk_rect target = ui_layout_load_mem(idx, desktop, is_panel); + float alpha = len2sq(sub2(s->desktop, desktop)) ? 0 : UI_ANIM_ALPHA; // smooth unless we're restoring a desktop change +#if 1 + if( is_window && win->flags & NK_WINDOW_FULLSCREEN ) { + target.x = 1; + target.w = desktop.w - 1; + target.y = workarea_h + 1; + target.h = desktop.h - workarea_h - 2; + } + if( is_window && win->is_window_restoring > 1e-2) { + win->is_window_restoring = win->is_window_restoring * alpha + 0 * (1 - alpha); + target.w = desktop.w / 2; + target.h = (desktop.h - workarea_h) / 2; + target.x = (desktop.w - target.w) / 2; + target.y = ((desktop.h - workarea_h) - target.h) / 2; + } +#endif + win->bounds = nk_rect( + win->bounds.x * alpha + target.x * (1 - alpha), + win->bounds.y * alpha + target.y * (1 - alpha), + win->bounds.w * alpha + target.w * (1 - alpha), + win->bounds.h * alpha + target.h * (1 - alpha) + ); + } + if(!anim_in_progress) + ui_layout_save_mem(idx, desktop, workarea_h, &win->bounds, is_panel); +} else { // if(!win) + ui_layout_save_mem(idx, desktop, workarea_h, &start_coords, is_panel); +} + + + int window_flags = NK_WINDOW_PINNABLE | NK_WINDOW_MINIMIZABLE | NK_WINDOW_NO_SCROLLBAR_X | (is_window ? NK_WINDOW_MAXIMIZABLE : 0); + if( starts_minimized ) window_flags |= (win ? 0 : NK_WINDOW_MINIMIZED); + if( is_auto_minimizes ) window_flags |= is_active ? 0 : !!starts_minimized * NK_WINDOW_MINIMIZED; + if( is_movable ) window_flags |= NK_WINDOW_MOVABLE; + if( is_closable ) window_flags |= NK_WINDOW_CLOSABLE; + if( is_scalable ) { + window_flags |= NK_WINDOW_SCALABLE; + if(win) window_flags |= input(MOUSE_X) < (win->bounds.x + win->bounds.w/2) ? NK_WINDOW_SCALE_LEFT : 0; + if(win) window_flags |= input(MOUSE_Y) < (win->bounds.y + win->bounds.h/2) ? NK_WINDOW_SCALE_TOP : 0; + } + +// if( is_pinned ) + window_flags |= NK_WINDOW_BORDER; + +if( is_panel && win && !is_active ) { + if( !is_pinned && is_auto_minimizes ) { + window_flags |= NK_WINDOW_MINIMIZED; + } +} + +// if( is_modal ) window_flags &= ~(NK_WINDOW_MINIMIZED | NK_WINDOW_MINIMIZABLE); +if( is_panel && win ) { +// if( win->bounds.x > 0 && (win->bounds.x+win->bounds.w) < desktop.w-1 ) window_flags &= ~NK_WINDOW_MINIMIZED; +} + +if(!win) { // if newly created window (!win) + // first time, try to restore from WINDOWS_INI file + static ini_t i; do_once i = ini(WINDOWS_INI); // @leak + ui_layout_load_disk(title, "*", i, &start_coords); + ui_layout_save_mem(idx, desktop, workarea_h, &start_coords, is_panel); +} + +bool is_notify = flags & (UI_NOTIFICATION_1 | UI_NOTIFICATION_2); +if( is_notify ) { + window_flags = NK_WINDOW_MOVABLE | NK_WINDOW_NOT_INTERACTIVE | NK_WINDOW_NO_SCROLLBAR; + start_coords = nk_rect(desktop.w / 2 - w / 2, -h, w, h); +} + + if( nk_begin(ui_ctx, title, start_coords, window_flags) ) { + +// set width for all inactive panels +struct nk_rect bounds = nk_window_get_bounds(ui_ctx); +if( mouse_pressed && win && win->is_window_resizing ) { + edge = vec2(bounds.w, bounds.h); + + // push direction + int top = !!(win->is_window_resizing & NK_WINDOW_SCALE_TOP); + int left = !!(win->is_window_resizing & NK_WINDOW_SCALE_LEFT), right = !left; + + edge_type = 0; + /**/ if( right && (win->bounds.x <= UI_SNAP_PX) ) edge_type |= 1; + else if( left && (win->bounds.x + win->bounds.w) >= (desktop.w-UI_SNAP_PX) ) edge_type |= 2; + /**/ if( top && (win->bounds.y + win->bounds.h) >= (desktop.h-UI_SNAP_PX) ) edge_type |= 8; + + // @fixme + // - if window is in a corner (sharing 2 edges), do not allow for multi edges. either vert or horiz depending on the clicked scaler + // - or maybe, only propagate edge changes to the other windows that overlapping our window. +} + + return 1; + } else { + +if(is_panel) { + ui_panel_end(); +} else ui_window_end(); + + return 0; + } +} + +static const char *ui_last_title = 0; +static int *ui_last_enabled = 0; +static int ui_has_window = 0; +static int ui_window_has_menubar = 0; +int ui_window(const char *title, int *enabled) { + if( window_width() <= 0 ) return 0; + if( window_height() <= 0 ) return 0; + if( !ui_ctx || !ui_ctx->style.font ) return 0; + + bool forced_creation = enabled && *enabled; // ( enabled ? *enabled : !ui_has_menubar() ); + forced_creation |= ui_window_register(title); + if(!ui_visible(title)) { + if( !forced_creation ) return 0; + ui_show(title, forced_creation); + } + + ui_last_enabled = enabled; + ui_last_title = title; + ui_has_window = 1; + return ui_begin_panel_or_window_(title, /*flags*/0, true); +} +int ui_window_end() { + if(ui_window_has_menubar) nk_menubar_end(ui_ctx), ui_window_has_menubar = 0; + nk_end(ui_ctx), ui_has_window = 0; + + int closed = 0; + if( nk_window_is_hidden(ui_ctx, ui_last_title) ) { + nk_window_close(ui_ctx, ui_last_title); + ui_show(ui_last_title, false); + if( ui_last_enabled ) *ui_last_enabled = 0; // clear developers' flag + closed = 1; + } + + // @transparent + #if !is(ems) + static bool has_transparent_attrib = 0; do_once has_transparent_attrib = glfwGetWindowAttrib(window_handle(), GLFW_TRANSPARENT_FRAMEBUFFER) == GLFW_TRUE; + if( closed && has_transparent_attrib && !ui_has_menubar() ) { + bool any_open = 0; + for each_map_ptr(ui_windows, char*, k, unsigned, v) any_open |= *v & 1; + if( !any_open ) glfwSetWindowShouldClose(window_handle(), GLFW_TRUE); + } + #endif + // @transparent + + return 0; +} + +int ui_panel(const char *title, int flags) { + if( window_width() <= 0 ) return 0; + if( window_height() <= 0 ) return 0; + if( !ui_ctx || !ui_ctx->style.font ) return 0; + + if( ui_has_window ) { + // transparent style + static struct nk_style_button transparent_style; + do_once transparent_style = ui_ctx->style.button; + do_once transparent_style.normal.data.color = nk_rgba(0,0,0,0); + do_once transparent_style.border_color = nk_rgba(0,0,0,0); + do_once transparent_style.active = transparent_style.normal; + do_once transparent_style.hover = transparent_style.normal; + do_once transparent_style.hover.data.color = nk_rgba(0,0,0,127); + transparent_style.text_alignment = NK_TEXT_ALIGN_CENTERED|NK_TEXT_ALIGN_MIDDLE; + + if(!ui_window_has_menubar) nk_menubar_begin(ui_ctx); + if(!ui_window_has_menubar) nk_layout_row_begin(ui_ctx, NK_STATIC, UI_MENUBAR_ICON_HEIGHT, 4); + if(!ui_window_has_menubar) nk_layout_row_push(ui_ctx, 70); + ui_window_has_menubar = 1; + + return nk_menu_begin_text_styled(ui_ctx, title, strlen(title), NK_TEXT_ALIGN_CENTERED|NK_TEXT_ALIGN_MIDDLE, nk_vec2(220, 200), &transparent_style); + } + + return ui_begin_panel_or_window_(title, flags, false); +} +int ui_panel_end() { + if( ui_has_window ) { + nk_menu_end(ui_ctx); + return 0; + } + nk_end(ui_ctx); +// nk_style_pop_color(ui_ctx); + return 0; +} + +static unsigned ui_collapse_state = 0; +int ui_collapse(const char *label, const char *id) { // mask: 0(closed),1(open),2(created) + int start_open = label[0] == '!'; label += start_open; + + uint64_t hash = 14695981039346656037ULL, mult = 0x100000001b3ULL; + for(int i = 0; id[i]; ++i) hash = (hash ^ id[i]) * mult; + ui_hue = (hash & 0x3F) / (float)0x3F; ui_hue += !ui_hue; + + int forced = ui_filter && ui_filter[0]; + enum nk_collapse_states forced_open = NK_MAXIMIZED; + + ui_collapse_state = nk_tree_base_(ui_ctx, NK_TREE_NODE, 0, label, start_open ? NK_MAXIMIZED : NK_MINIMIZED, forced ? &forced_open : NULL, id, strlen(id), 0); + + return ui_collapse_state & 1; // |1 open, |2 clicked, |4 toggled +} +int ui_collapse_clicked() { + return ui_collapse_state >> 1; // |1 clicked, |2 toggled +} +int ui_collapse_end() { + return nk_tree_pop(ui_ctx), 1; +} + + +int ui_contextual() { +#if 0 + struct nk_rect bounds = nk_widget_bounds(ui_ctx); // = nk_window_get_bounds(ui_ctx); + bounds.y -= 25; + return ui_popups() ? 0 : nk_contextual_begin(ui_ctx, 0, nk_vec2(150, 300), bounds); +#else + return ui_popups() ? 0 : nk_contextual_begin(ui_ctx, 0, nk_vec2(300, 220), nk_window_get_bounds(ui_ctx)); +#endif +} +int ui_contextual_end(int close) { + if(close) nk_contextual_close(ui_ctx); + nk_contextual_end(ui_ctx); + return 1; +} +int ui_submenu(const char *options) { + int choice = 0; + if( ui_contextual() ) { + array(char*) tokens = strsplit(options, ";"); + for( int i = 0; i < array_count(tokens) ; ++i ) { + if( ui_button_transparent(tokens[i]) ) choice = i + 1; + } + ui_contextual_end(0); + } + return choice; +} + +// ----------------------------------------------------------------------------- +// code for all the widgets + +static +int nk_button_transparent(struct nk_context *ctx, const char *text) { + static struct nk_style_button transparent_style; + do_once transparent_style = ctx->style.button; + do_once transparent_style.text_alignment = NK_TEXT_ALIGN_CENTERED|NK_TEXT_ALIGN_MIDDLE; + do_once transparent_style.normal.data.color = nk_rgba(0,0,0,0); + do_once transparent_style.border_color = nk_rgba(0,0,0,0); + do_once transparent_style.active = transparent_style.normal; + do_once transparent_style.hover = transparent_style.normal; + do_once transparent_style.hover.data.color = nk_rgba(0,0,0,127); + transparent_style.text_background.a = 255 * ui_alpha; + transparent_style.text_normal.a = 255 * ui_alpha; + transparent_style.text_hover.a = 255 * ui_alpha; + transparent_style.text_active.a = 255 * ui_alpha; + return nk_button_label_styled(ctx, &transparent_style, text); +} + +// internal vars for our editor. @todo: maybe expose these to the end-user as well? +bool ui_label_icon_highlight; +vec2 ui_label_icon_clicked_L; // left +vec2 ui_label_icon_clicked_R; // right + +static +int ui_label_(const char *label, int alignment) { + // beware: assuming label can start with any ICON_MD_ glyph, which I consider them to be a 3-bytes utf8 sequence. + // done for optimization reasons because this codepath is called a lot! + const char *icon = label ? label : ""; while( icon[0] == '!' || icon[0] == '*' ) ++icon; + int has_icon = (unsigned)icon[0] > 127, icon_len = 3, icon_width_px = 1*24; + + struct nk_rect bounds = nk_widget_bounds(ui_ctx); + const struct nk_input *input = &ui_ctx->input; + int is_hovering = nk_input_is_mouse_hovering_rect(input, bounds) && !ui_has_active_popups; + if( is_hovering ) { + struct nk_rect winbounds = nk_window_get_bounds(ui_ctx); + is_hovering &= nk_input_is_mouse_hovering_rect(input, winbounds); + + struct nk_window *win = ui_ctx->current; + bool has_contextual = !win->name; // contextual windows are annonymous + + is_hovering &= has_contextual || nk_window_has_focus(ui_ctx); + } + + int skip_color_tab = label && label[0] == '!'; + if( skip_color_tab) label++; + + int spacing = 8; // between left colorbar and content + struct nk_window *win = ui_ctx->current; + struct nk_panel *layout = win->layout; + layout->at_x += spacing; + layout->bounds.w -= spacing; + if( !skip_color_tab ) { + float w = is_hovering ? 4 : 2; // spacing*3/4 : spacing/2-1; + bounds.w = w; + bounds.h -= 1; + struct nk_command_buffer *canvas = nk_window_get_canvas(ui_ctx); + nk_fill_rect(canvas, bounds, 0, nk_hsva_f(ui_hue, 0.75f, 0.8f, ui_alpha) ); + } + + if(!label || !label[0]) { + nk_label(ui_ctx, "", alignment); + layout->at_x -= spacing; + layout->bounds.w += spacing; + return 0; + } + + const char *split = strchr(label, '@'); + char buffer[128]; if( split ) label = (snprintf(buffer, 128, "%.*s", (int)(split-label), label), buffer); + +struct nk_style *style = &ui_ctx->style; +bool bold = label[0] == '*'; label += bold; +struct nk_font *font = bold && nk_glfw.atlas.fonts->next ? nk_glfw.atlas.fonts->next->next /*3rd font*/ : NULL; // list + +if( !has_icon ) { + // set bold style and color if needed + if( font && nk_style_push_font(ui_ctx, &font->handle) ) {} else font = 0; + if( font ) nk_style_push_color(ui_ctx, &style->text.color, nk_rgba(255, 255, 255, 255 * ui_alpha)); + nk_label(ui_ctx, label, alignment); +} else { + char *icon_glyph = va("%.*s", icon_len, icon); + +// @todo: implement nk_push_layout() +// nk_rect bounds = {..}; nk_panel_alloc_space(bounds, ctx); + struct nk_window *win = ui_ctx->current; + struct nk_panel *layout = win->layout, copy = *layout; + struct nk_rect before; nk_layout_peek(&before, ui_ctx); + nk_label_colored(ui_ctx, icon_glyph, alignment, nk_rgba(255, 255, 255, (64 + 192 * ui_label_icon_highlight) * ui_alpha) ); + struct nk_rect after; nk_layout_peek(&after, ui_ctx); + *layout = copy; + layout->at_x += icon_width_px; layout->bounds.w -= icon_width_px; // nk_layout_space_push(ui_ctx, nk_rect(0,0,icon_width_px,0)); + + // set bold style and color if needed + if( font && nk_style_push_font(ui_ctx, &font->handle) ) {} else font = 0; + if( font ) nk_style_push_color(ui_ctx, &style->text.color, nk_rgba(255, 255, 255, 255 * ui_alpha)); + nk_label(ui_ctx, icon+icon_len, alignment); + + layout->at_x -= icon_width_px; layout->bounds.w += icon_width_px; +} + +if( font ) nk_style_pop_color(ui_ctx); +if( font ) nk_style_pop_font(ui_ctx); + + if (split && is_hovering && !ui_has_active_popups && nk_window_has_focus(ui_ctx)) { + nk_tooltip(ui_ctx, split + 1); // @fixme: not working under ui_disable() state + } + + layout->at_x -= spacing; + layout->bounds.w += spacing; + + // old way + // ui_labeicon_l_icked_L.x = is_hovering ? nk_input_has_mouse_click_down_in_rect(input, NK_BUTTON_LEFT, layout->bounds, nk_true) : 0; + // new way + // this is an ugly hack to detect which icon (within a label) we're clicking on. + // @todo: figure out a better way to detect this... would it be better to have a ui_label_toolbar(lbl,bar) helper function instead? + ui_label_icon_clicked_L.x = is_hovering ? ( (int)((input->mouse.pos.x - bounds.x) - (alignment == NK_TEXT_RIGHT ? bounds.w : 0) ) * nk_input_is_mouse_released(input, NK_BUTTON_LEFT)) : 0; + + return ui_label_icon_clicked_L.x; +} + +int ui_label(const char *label) { + if( label && ui_filter && ui_filter[0] ) if( !strstri(label, ui_filter) ) return 0; + + int align = label[0] == '>' ? (label++, NK_TEXT_RIGHT) : label[0] == '=' ? (label++, NK_TEXT_CENTERED) : label[0] == '<' ? (label++, NK_TEXT_LEFT) : NK_TEXT_LEFT; + nk_layout_row_dynamic(ui_ctx, 0, 1); + return ui_label_(label, align); +} + +static int nk_label_(struct nk_context *ui_ctx, const char *text_, int align2 ) { + const struct nk_input *input = &ui_ctx->input; + struct nk_rect bounds = nk_widget_bounds(ui_ctx); + int is_hovering = nk_input_is_mouse_hovering_rect(input, bounds) && !ui_has_active_popups; + if( is_hovering ) { + struct nk_rect winbounds = nk_window_get_bounds(ui_ctx); + is_hovering &= nk_input_is_mouse_hovering_rect(input, winbounds); + is_hovering &= nk_window_has_focus(ui_ctx); + } + + nk_label(ui_ctx, text_, align2); + + // this is an ugly hack to detect which icon (within a label) we're clicking on. + // @todo: figure out a better way to detect this... would it be better to have a ui_label_toolbar(lbl,bar) helper function instead? + ui_label_icon_clicked_R.x = is_hovering ? ( (int)((input->mouse.pos.x - bounds.x) - (align2 == NK_TEXT_RIGHT ? bounds.w : 0) ) * nk_input_is_mouse_released(input, NK_BUTTON_LEFT)) : 0; + + return ui_label_icon_clicked_R.x; +} + + +int ui_label2(const char *label, const char *text_) { + if( label && ui_filter && ui_filter[0] ) if( !strstri(label, ui_filter) ) return 0; + + nk_layout_row_dynamic(ui_ctx, 0, 2); + + int align1 = NK_TEXT_LEFT; + int align2 = NK_TEXT_LEFT; + if( label ) align1 = label[0] == '>' ? (label++, NK_TEXT_RIGHT) : label[0] == '=' ? (label++, NK_TEXT_CENTERED) : label[0] == '<' ? (label++, NK_TEXT_LEFT) : NK_TEXT_LEFT; + if( text_ ) align2 = text_[0] == '>' ? (text_++, NK_TEXT_RIGHT) : text_[0] == '=' ? (text_++, NK_TEXT_CENTERED) : text_[0] == '<' ? (text_++, NK_TEXT_LEFT) : NK_TEXT_LEFT; + ui_label_(label, align1); + + return nk_label_(ui_ctx, text_, align2); +} +int ui_label2_bool(const char *text, bool value) { + bool b = !!value; + return ui_bool(text, &b), 0; +} +int ui_label2_float(const char *text, float value) { + float f = (float)value; + return ui_float(text, &f), 0; +} +int ui_label2_wrap(const char *label, const char *str) { // @fixme: does not work (remove dynamic layout?) + nk_layout_row_dynamic(ui_ctx, 0, 2); + ui_label_(label, NK_TEXT_LEFT); + nk_text_wrap(ui_ctx, str, strlen(str)); + return 0; +} +int ui_label2_toolbar(const char *label, const char *icons) { + int mouse_click = ui_label2(label, va(">%s", icons)); + int choice = !mouse_click ? 0 : 1 + -mouse_click / (UI_ICON_FONTSIZE + UI_ICON_SPACING_X); // divided by px per ICON_MD_ glyph approximately + int glyphs = strlen(icons) / 3; + return choice > glyphs ? 0 : choice; +} + +int ui_notify(const char *title, const char *body) { + app_beep(); + + struct ui_notify n = {0}; + n.title = title && title[0] ? stringf("*%s", title) : 0; + n.body = body && body[0] ? STRDUP(body) : 0; + n.timeout = 2; // 4s = 2s timeout (+ 1s fade + 1s idle) + n.alpha = 1; + array_push_front(ui_notifications, n); + return 1; +} + +int ui_button_transparent(const char *text) { + nk_layout_row_dynamic(ui_ctx, 0, 1); + int align = text[0] == '>' ? (text++, NK_TEXT_RIGHT) : text[0] == '=' ? (text++, NK_TEXT_CENTERED) : text[0] == '<' ? (text++, NK_TEXT_LEFT) : NK_TEXT_CENTERED; + return !!nk_contextual_item_label(ui_ctx, text, align); +} + +#ifndef UI_BUTTON_MONOCHROME +#define UI_BUTTON_MONOCHROME 0 +#endif + +static +int ui_button_(const char *label) { + if( label && ui_filter && ui_filter[0] ) if( !strstri(label, ui_filter) ) return 0; + + if( 1 ) { +#if UI_BUTTON_MONOCHROME + nk_style_push_color(ui_ctx, &ui_ctx->style.button.text_normal, nk_rgba(0,0,0,ui_alpha)); + nk_style_push_color(ui_ctx, &ui_ctx->style.button.text_hover, nk_rgba(0,0,0,ui_alpha)); + nk_style_push_color(ui_ctx, &ui_ctx->style.button.text_active, nk_rgba(0,0,0,ui_alpha)); + + nk_style_push_color(ui_ctx, &ui_ctx->style.button.normal.data.color, nk_hsva_f(ui_hue,0.0,0.8*ui_alpha)); + nk_style_push_color(ui_ctx, &ui_ctx->style.button.hover.data.color, nk_hsva_f(ui_hue,0.0,1.0*ui_alpha)); + nk_style_push_color(ui_ctx, &ui_ctx->style.button.active.data.color, nk_hsva_f(ui_hue,0.0,0.4*ui_alpha)); +#elif 0 // old + nk_style_push_color(ui_ctx, &ui_ctx->style.button.text_normal, nk_rgba(0,0,0,ui_alpha)); + nk_style_push_color(ui_ctx, &ui_ctx->style.button.text_hover, nk_rgba(0,0,0,ui_alpha)); + nk_style_push_color(ui_ctx, &ui_ctx->style.button.text_active, nk_rgba(0,0,0,ui_alpha)); + + nk_style_push_color(ui_ctx, &ui_ctx->style.button.normal.data.color, nk_hsva_f(ui_hue,0.75,0.8*ui_alpha)); + nk_style_push_color(ui_ctx, &ui_ctx->style.button.hover.data.color, nk_hsva_f(ui_hue,1.00,1.0*ui_alpha)); + nk_style_push_color(ui_ctx, &ui_ctx->style.button.active.data.color, nk_hsva_f(ui_hue,0.60,0.4*ui_alpha)); +#else // new + nk_style_push_color(ui_ctx, &ui_ctx->style.button.text_normal, nk_rgba_f(0.00,0.00,0.00,ui_alpha)); + nk_style_push_color(ui_ctx, &ui_ctx->style.button.text_hover, nk_rgba_f(0.11,0.11,0.11,ui_alpha)); + nk_style_push_color(ui_ctx, &ui_ctx->style.button.text_active, nk_rgba_f(0.00,0.00,0.00,ui_alpha)); + + nk_style_push_color(ui_ctx, &ui_ctx->style.button.normal.data.color, nk_hsva_f(ui_hue,0.80,0.6,0.90*ui_alpha)); + nk_style_push_color(ui_ctx, &ui_ctx->style.button.hover.data.color, nk_hsva_f(ui_hue,0.85,0.9,0.90*ui_alpha)); + nk_style_push_color(ui_ctx, &ui_ctx->style.button.active.data.color, nk_hsva_f(ui_hue,0.80,0.6,0.90*ui_alpha)); +#endif + } + + struct nk_rect bounds = nk_widget_bounds(ui_ctx); + + const char *split = strchr(label, '@'), *tooltip = split + 1; + int ret = nk_button_text(ui_ctx, label, split ? (int)(split - label) : strlen(label) ); + + const struct nk_input *in = &ui_ctx->input; + if (split && nk_input_is_mouse_hovering_rect(in, bounds) && !ui_has_active_popups && nk_window_has_focus(ui_ctx)) { + nk_tooltip(ui_ctx, tooltip); + } + + if( 1 ) { + nk_style_pop_color(ui_ctx); + nk_style_pop_color(ui_ctx); + nk_style_pop_color(ui_ctx); + + nk_style_pop_color(ui_ctx); + nk_style_pop_color(ui_ctx); + nk_style_pop_color(ui_ctx); + } + + return ret; +} + +int ui_buttons(int buttons, ...) { + static array(char*) args = 0; + array_resize(args, 0); + + int num_skips = 0; + va_list list; + va_start(list, buttons); + for( int i = 0; i < buttons; ++i ) { + const char *label = va_arg(list, const char*); + int skip = ui_filter && ui_filter[0] && !strstri(label, ui_filter); + array_push(args, skip ? NULL : (char*)label); + num_skips += skip; + } + va_end(list); + + if( num_skips == array_count(args) ) return 0; + buttons = array_count(args) - num_skips; + + nk_layout_row_dynamic(ui_ctx, 0, buttons); + + float ui_hue_old = ui_hue; + + int indent = 8; + struct nk_window *win = ui_ctx->current; + struct nk_panel *layout = win->layout; + struct nk_panel copy = *layout; + ui_label_("", NK_TEXT_LEFT); + *layout = copy; + layout->at_x += indent; + layout->bounds.w -= indent; + + int rc = 0; + for( int i = 0, end = array_count(args); i < end; ++i ) { + if( args[i] && ui_button_( args[i] ) ) rc = i+1; + ui_hue_cycle( 3 ); + } + va_end(list); + + layout->at_x -= indent; + layout->bounds.w += indent; + + ui_hue = ui_hue_old; + return rc; +} + +int ui_button(const char *s) { + return ui_buttons(1, s); +} + +int ui_toggle(const char *label, bool *value) { + if( label && ui_filter && ui_filter[0] ) if( !strstri(label, ui_filter) ) return 0; + + nk_layout_row_dynamic(ui_ctx, 0, 2); + ui_label_(label, NK_TEXT_LEFT); + + // nk_label(ui_ctx, label, alignment); + int rc = nk_button_transparent(ui_ctx, *value ? ICON_MD_TOGGLE_ON : ICON_MD_TOGGLE_OFF); + return rc ? (*value ^= 1), rc : rc; +} + +static enum color_mode {COL_RGB, COL_HSV} ui_color_mode = COL_RGB; + +int ui_color4f(const char *label, float *color) { + if( label && ui_filter && ui_filter[0] ) if( !strstri(label, ui_filter) ) return 0; + + nk_layout_row_dynamic(ui_ctx, 0, 2); + ui_label_(label, NK_TEXT_LEFT); + + struct nk_colorf after = { color[0]*ui_alpha, color[1]*ui_alpha, color[2]*ui_alpha, color[3]*ui_alpha }, before = after; + struct nk_colorf clamped = { clampf(after.r,0,1), clampf(after.g,0,1), clampf(after.b,0,1), clampf(after.a,0,1) }; + if (nk_combo_begin_color(ui_ctx, nk_rgb_cf(clamped), nk_vec2(200,400))) { + nk_layout_row_dynamic(ui_ctx, 120, 1); + after = nk_color_picker(ui_ctx, after, NK_RGB); + + nk_layout_row_dynamic(ui_ctx, 0, 2); + ui_color_mode = nk_option_label(ui_ctx, "RGB", ui_color_mode == COL_RGB) ? COL_RGB : ui_color_mode; + ui_color_mode = nk_option_label(ui_ctx, "HSV", ui_color_mode == COL_HSV) ? COL_HSV : ui_color_mode; + + nk_layout_row_dynamic(ui_ctx, 0, 1); + if (ui_color_mode == COL_RGB) { + after.r = nk_propertyf(ui_ctx, "#R:", -FLT_MAX, after.r, FLT_MAX, 0.01f,0.005f); + after.g = nk_propertyf(ui_ctx, "#G:", -FLT_MAX, after.g, FLT_MAX, 0.01f,0.005f); + after.b = nk_propertyf(ui_ctx, "#B:", -FLT_MAX, after.b, FLT_MAX, 0.01f,0.005f); + } else { + float hsva[4]; + nk_colorf_hsva_fv(hsva, after); + hsva[0] = nk_propertyf(ui_ctx, "#H:", -FLT_MAX, hsva[0], FLT_MAX, 0.01f,0.005f); + hsva[1] = nk_propertyf(ui_ctx, "#S:", -FLT_MAX, hsva[1], FLT_MAX, 0.01f,0.005f); + hsva[2] = nk_propertyf(ui_ctx, "#V:", -FLT_MAX, hsva[2], FLT_MAX, 0.01f,0.005f); + after = nk_hsva_colorfv(hsva); + } + nk_label(ui_ctx, va("#%02X%02X%02X", (unsigned)clampf(after.r*255,0,255), (unsigned)clampf(after.g*255,0,255), (unsigned)clampf(after.b*255,0,255)), NK_TEXT_CENTERED); + + color[0] = after.r; + color[1] = after.g; + color[2] = after.b; + color[3] = after.a; + + nk_combo_end(ui_ctx); + } + return !!memcmp(&before.r, &after.r, sizeof(struct nk_colorf)); +} +int ui_color4(const char *label, unsigned *color) { + if( label && ui_filter && ui_filter[0] ) if( !strstri(label, ui_filter) ) return 0; + + unsigned a = *color >> 24; + unsigned b =(*color >> 16)&255; + unsigned g =(*color >> 8)&255; + unsigned r = *color & 255; + + nk_layout_row_dynamic(ui_ctx, 0, 2); + ui_label_(label, NK_TEXT_LEFT); + + struct nk_colorf after = { r*ui_alpha/255, g*ui_alpha/255, b*ui_alpha/255, a*ui_alpha/255 }, before = after; + if (nk_combo_begin_color(ui_ctx, nk_rgb_cf(after), nk_vec2(200,400))) { + nk_layout_row_dynamic(ui_ctx, 120, 1); + after = nk_color_picker(ui_ctx, after, NK_RGBA); + + nk_layout_row_dynamic(ui_ctx, 0, 2); + ui_color_mode = nk_option_label(ui_ctx, "RGB", ui_color_mode == COL_RGB) ? COL_RGB : ui_color_mode; + ui_color_mode = nk_option_label(ui_ctx, "HSV", ui_color_mode == COL_HSV) ? COL_HSV : ui_color_mode; + + nk_layout_row_dynamic(ui_ctx, 0, 1); + if (ui_color_mode == COL_RGB) { + after.r = nk_propertyi(ui_ctx, "#R:", 0, after.r * 255, 255, 1,1) / 255.f; + after.g = nk_propertyi(ui_ctx, "#G:", 0, after.g * 255, 255, 1,1) / 255.f; + after.b = nk_propertyi(ui_ctx, "#B:", 0, after.b * 255, 255, 1,1) / 255.f; + after.a = nk_propertyi(ui_ctx, "#A:", 0, after.a * 255, 255, 1,1) / 255.f; + } else { + float hsva[4]; + nk_colorf_hsva_fv(hsva, after); + hsva[0] = nk_propertyi(ui_ctx, "#H:", 0, hsva[0] * 255, 255, 1,1) / 255.f; + hsva[1] = nk_propertyi(ui_ctx, "#S:", 0, hsva[1] * 255, 255, 1,1) / 255.f; + hsva[2] = nk_propertyi(ui_ctx, "#V:", 0, hsva[2] * 255, 255, 1,1) / 255.f; + hsva[3] = nk_propertyi(ui_ctx, "#A:", 0, hsva[3] * 255, 255, 1,1) / 255.f; + after = nk_hsva_colorfv(hsva); + } + r = after.r * 255; + g = after.g * 255; + b = after.b * 255; + a = after.a * 255; + *color = rgba(r,g,b,a); + + nk_label(ui_ctx, va("#%02X%02X%02X%02X", r, g, b, a), NK_TEXT_CENTERED); + + nk_combo_end(ui_ctx); + } + return !!memcmp(&before.r, &after.r, sizeof(struct nk_colorf)); +} + +int ui_color3f(const char *label, float *color) { + if( label && ui_filter && ui_filter[0] ) if( !strstri(label, ui_filter) ) return 0; + + nk_layout_row_dynamic(ui_ctx, 0, 2); + ui_label_(label, NK_TEXT_LEFT); + + struct nk_colorf after = { color[0]*ui_alpha, color[1]*ui_alpha, color[2]*ui_alpha, color[3]*ui_alpha }, before = after; + struct nk_colorf clamped = { clampf(after.r,0,1), clampf(after.g,0,1), clampf(after.b,0,1), ui_alpha }; + if (nk_combo_begin_color(ui_ctx, nk_rgb_cf(clamped), nk_vec2(200,400))) { + nk_layout_row_dynamic(ui_ctx, 120, 1); + after = nk_color_picker(ui_ctx, after, NK_RGB); + + nk_layout_row_dynamic(ui_ctx, 0, 2); + ui_color_mode = nk_option_label(ui_ctx, "RGB", ui_color_mode == COL_RGB) ? COL_RGB : ui_color_mode; + ui_color_mode = nk_option_label(ui_ctx, "HSV", ui_color_mode == COL_HSV) ? COL_HSV : ui_color_mode; + + nk_layout_row_dynamic(ui_ctx, 0, 1); + if (ui_color_mode == COL_RGB) { + after.r = nk_propertyf(ui_ctx, "#R:", -FLT_MAX, after.r, FLT_MAX, 0.01f,0.005f); + after.g = nk_propertyf(ui_ctx, "#G:", -FLT_MAX, after.g, FLT_MAX, 0.01f,0.005f); + after.b = nk_propertyf(ui_ctx, "#B:", -FLT_MAX, after.b, FLT_MAX, 0.01f,0.005f); + } else { + float hsva[4]; + nk_colorf_hsva_fv(hsva, after); + hsva[0] = nk_propertyf(ui_ctx, "#H:", -FLT_MAX, hsva[0], FLT_MAX, 0.01f,0.005f); + hsva[1] = nk_propertyf(ui_ctx, "#S:", -FLT_MAX, hsva[1], FLT_MAX, 0.01f,0.005f); + hsva[2] = nk_propertyf(ui_ctx, "#V:", -FLT_MAX, hsva[2], FLT_MAX, 0.01f,0.005f); + after = nk_hsva_colorfv(hsva); + } + nk_label(ui_ctx, va("#%02X%02X%02X", (unsigned)clampf(after.r*255,0,255), (unsigned)clampf(after.g*255,0,255), (unsigned)clampf(after.b*255,0,255)), NK_TEXT_CENTERED); + + color[0] = after.r; + color[1] = after.g; + color[2] = after.b; + + nk_combo_end(ui_ctx); + } + return !!memcmp(&before.r, &after.r, sizeof(struct nk_colorf)); +} +int ui_color3(const char *label, unsigned *color) { + if( label && ui_filter && ui_filter[0] ) if( !strstri(label, ui_filter) ) return 0; + + unsigned a = *color >> 24; + unsigned b =(*color >> 16)&255; + unsigned g =(*color >> 8)&255; + unsigned r = *color & 255; + + nk_layout_row_dynamic(ui_ctx, 0, 2); + ui_label_(label, NK_TEXT_LEFT); + + struct nk_colorf after = { r*ui_alpha/255, g*ui_alpha/255, b*ui_alpha/255, ui_alpha }, before = after; + if (nk_combo_begin_color(ui_ctx, nk_rgb_cf(after), nk_vec2(200,400))) { + nk_layout_row_dynamic(ui_ctx, 120, 1); + after = nk_color_picker(ui_ctx, after, NK_RGB); + + nk_layout_row_dynamic(ui_ctx, 0, 2); + ui_color_mode = nk_option_label(ui_ctx, "RGB", ui_color_mode == COL_RGB) ? COL_RGB : ui_color_mode; + ui_color_mode = nk_option_label(ui_ctx, "HSV", ui_color_mode == COL_HSV) ? COL_HSV : ui_color_mode; + + nk_layout_row_dynamic(ui_ctx, 0, 1); + if (ui_color_mode == COL_RGB) { + after.r = nk_propertyi(ui_ctx, "#R:", 0, after.r * 255, 255, 1,1) / 255.f; + after.g = nk_propertyi(ui_ctx, "#G:", 0, after.g * 255, 255, 1,1) / 255.f; + after.b = nk_propertyi(ui_ctx, "#B:", 0, after.b * 255, 255, 1,1) / 255.f; + } else { + float hsva[4]; + nk_colorf_hsva_fv(hsva, after); + hsva[0] = nk_propertyi(ui_ctx, "#H:", 0, hsva[0] * 255, 255, 1,1) / 255.f; + hsva[1] = nk_propertyi(ui_ctx, "#S:", 0, hsva[1] * 255, 255, 1,1) / 255.f; + hsva[2] = nk_propertyi(ui_ctx, "#V:", 0, hsva[2] * 255, 255, 1,1) / 255.f; + after = nk_hsva_colorfv(hsva); + } + r = after.r * 255; + g = after.g * 255; + b = after.b * 255; + *color = rgba(r,g,b,a); + + nk_label(ui_ctx, va("#%02X%02X%02X", r, g, b), NK_TEXT_CENTERED); + + nk_combo_end(ui_ctx); + } + return !!memcmp(&before.r, &after.r, sizeof(struct nk_colorf)); +} + +int ui_list(const char *label, const char **items, int num_items, int *selector) { + if( label && ui_filter && ui_filter[0] ) if( !strstri(label, ui_filter) ) return 0; + + nk_layout_row_dynamic(ui_ctx, 0, 2); + ui_label_(label, NK_TEXT_LEFT); + + int val = nk_combo(ui_ctx, items, num_items, *selector, UI_ROW_HEIGHT, nk_vec2(200,200)); + int chg = val != *selector; + *selector = val; + return chg; +} + +int ui_slider(const char *label, float *slider) { + if( label && ui_filter && ui_filter[0] ) if( !strstri(label, ui_filter) ) return 0; + + // return ui_slider2(label, slider, va("%.2f ", *slider)); + nk_layout_row_dynamic(ui_ctx, 0, 2); + ui_label_(label, NK_TEXT_LEFT); + + nk_size val = *slider * 1000; + int chg = nk_progress(ui_ctx, &val, 1000, NK_MODIFIABLE); + *slider = val / 1000.f; + return chg; +} +int ui_slider2(const char *label, float *slider, const char *caption) { + if( label && ui_filter && ui_filter[0] ) if( !strstri(label, ui_filter) ) return 0; + + nk_layout_row_dynamic(ui_ctx, 0, 2); + ui_label_(label, NK_TEXT_LEFT); + + struct nk_window *win = ui_ctx->current; + const struct nk_style *style = &ui_ctx->style; + struct nk_rect bounds; nk_layout_peek(&bounds, ui_ctx); bounds.w -= 10; // bounds.w *= 0.95f; + struct nk_vec2 item_padding = style->text.padding; + struct nk_text text; + text.padding.x = item_padding.x; + text.padding.y = item_padding.y; + text.background = style->window.background; + text.text = nk_rgba_f(1,1,1,ui_alpha); + + nk_size val = *slider * 1000; + int chg = nk_progress(ui_ctx, &val, 1000, NK_MODIFIABLE); + *slider = val / 1000.f; + + chg |= input(MOUSE_L) && nk_input_is_mouse_hovering_rect(&ui_ctx->input, bounds); // , true); + + nk_widget_text(&win->buffer, bounds, caption, strlen(caption), &text, NK_TEXT_RIGHT, style->font); + return chg; +} + +int ui_bool(const char *label, bool *enabled ) { + if( label && ui_filter && ui_filter[0] ) if( !strstri(label, ui_filter) ) return 0; + + nk_layout_row_dynamic(ui_ctx, 0, 2); + ui_label_(label, NK_TEXT_LEFT); + + int val = *enabled; +#if 0 + int chg = !!nk_checkbox_label(ui_ctx, "", &val); +#else + int chg = !!nk_button_transparent(ui_ctx, val ? ICON_MD_CHECK_BOX : ICON_MD_CHECK_BOX_OUTLINE_BLANK ); +#endif + *enabled ^= chg; + return chg; +} + +static int ui_num_signs = 0; + +int ui_int(const char *label, int *v) { + if( label && ui_filter && ui_filter[0] ) if( !strstri(label, ui_filter) ) return 0; + + nk_layout_row_dynamic(ui_ctx, 0, 2); + ui_label_(label, NK_TEXT_LEFT); + + int prev = *v; + *v = nk_propertyi(ui_ctx, "#", INT_MIN, *v, INT_MAX, 1,1); + return prev != *v; +} + +int ui_unsigned(const char *label, unsigned *v) { + if( label && ui_filter && ui_filter[0] ) if( !strstri(label, ui_filter) ) return 0; + + nk_layout_row_dynamic(ui_ctx, 0, 2); + ui_label_(label, NK_TEXT_LEFT); + + unsigned prev = *v; + *v = (unsigned)nk_propertyd(ui_ctx, "#", 0, *v, UINT_MAX, 1,1); + return prev != *v; +} +int ui_unsigned2(const char *label, unsigned *v) { + if( label && ui_filter && ui_filter[0] ) if( !strstri(label, ui_filter) ) return 0; + + nk_layout_row_dynamic(ui_ctx, 0, 2); + ui_label_(label, NK_TEXT_LEFT); + + char *buffer = ui_num_signs ? + --ui_num_signs, va("%+2u %+2u", v[0], v[1]) : + va("%2u, %2u", v[0], v[1]); + + if (nk_combo_begin_label(ui_ctx, buffer, nk_vec2(200,200))) { + nk_layout_row_dynamic(ui_ctx, 0, 1); + unsigned prev0 = v[0]; nk_property_int(ui_ctx, "#X:", 0, &v[0], INT_MAX, 1,0.5f); + unsigned prev1 = v[1]; nk_property_int(ui_ctx, "#Y:", 0, &v[1], INT_MAX, 1,0.5f); + nk_combo_end(ui_ctx); + return prev0 != v[0] || prev1 != v[1]; + } + return 0; +} +int ui_unsigned3(const char *label, unsigned *v) { + if( label && ui_filter && ui_filter[0] ) if( !strstri(label, ui_filter) ) return 0; + + nk_layout_row_dynamic(ui_ctx, 0, 2); + ui_label_(label, NK_TEXT_LEFT); + + char *buffer = ui_num_signs ? + --ui_num_signs, va("%+2u %+2u %+2u", v[0], v[1], v[2]) : + va("%2u, %2u, %2u", v[0], v[1], v[2]); + + if (nk_combo_begin_label(ui_ctx, buffer, nk_vec2(200,200))) { + nk_layout_row_dynamic(ui_ctx, 0, 1); + unsigned prev0 = v[0]; nk_property_int(ui_ctx, "#X:", 0, &v[0], INT_MAX, 1,0.5f); + unsigned prev1 = v[1]; nk_property_int(ui_ctx, "#Y:", 0, &v[1], INT_MAX, 1,0.5f); + unsigned prev2 = v[2]; nk_property_int(ui_ctx, "#Z:", 0, &v[2], INT_MAX, 1,0.5f); + nk_combo_end(ui_ctx); + return prev0 != v[0] || prev1 != v[1] || prev2 != v[2]; + } + return 0; +} + +int ui_short(const char *label, short *v) { + if( label && ui_filter && ui_filter[0] ) if( !strstri(label, ui_filter) ) return 0; + + int i = *v, ret = ui_int( label, &i ); + return *v = (short)i, ret; +} + +int ui_float(const char *label, float *v) { + if( label && ui_filter && ui_filter[0] ) if( !strstri(label, ui_filter) ) return 0; + + nk_layout_row_dynamic(ui_ctx, 0, 2); + ui_label_(label, NK_TEXT_LEFT); + + float prev = v[0]; v[0] = nk_propertyf(ui_ctx, "#", -FLT_MAX, v[0], FLT_MAX, 0.01f,0.005f); + return prev != v[0]; +} + +int ui_double(const char *label, double *v) { + if( label && ui_filter && ui_filter[0] ) if( !strstri(label, ui_filter) ) return 0; + + nk_layout_row_dynamic(ui_ctx, 0, 2); + ui_label_(label, NK_TEXT_LEFT); + + double prev = v[0]; v[0] = nk_propertyd(ui_ctx, "#", -DBL_MAX, v[0], DBL_MAX, 0.01f,0.005f); + return prev != v[0]; +} + +int ui_clampf(const char *label, float *v, float minf, float maxf) { + if( label && ui_filter && ui_filter[0] ) if( !strstri(label, ui_filter) ) return 0; + + if( minf > maxf ) return ui_clampf(label, v, maxf, minf); + + nk_layout_row_dynamic(ui_ctx, 0, 2); + ui_label_(label, NK_TEXT_LEFT); + + float prev = v[0]; v[0] = nk_propertyf(ui_ctx, "#", minf, v[0], maxf, 0.1f,0.05f); + return prev != v[0]; +} + +int ui_float2(const char *label, float *v) { + if( label && ui_filter && ui_filter[0] ) if( !strstri(label, ui_filter) ) return 0; + + nk_layout_row_dynamic(ui_ctx, 0, 2); + ui_label_(label, NK_TEXT_LEFT); + + char *buffer = ui_num_signs ? + --ui_num_signs, va("%+.3f %+.3f", v[0], v[1]) : + va("%.3f, %.3f", v[0], v[1]); + + if (nk_combo_begin_label(ui_ctx, buffer, nk_vec2(200,200))) { + nk_layout_row_dynamic(ui_ctx, 0, 1); + float prev0 = v[0]; nk_property_float(ui_ctx, "#X:", -FLT_MAX, &v[0], FLT_MAX, 1,0.5f); + float prev1 = v[1]; nk_property_float(ui_ctx, "#Y:", -FLT_MAX, &v[1], FLT_MAX, 1,0.5f); + nk_combo_end(ui_ctx); + return prev0 != v[0] || prev1 != v[1]; + } + return 0; +} + +int ui_float3(const char *label, float *v) { + if( label && ui_filter && ui_filter[0] ) if( !strstri(label, ui_filter) ) return 0; + + nk_layout_row_dynamic(ui_ctx, 0, 2); + ui_label_(label, NK_TEXT_LEFT); + + char *buffer = ui_num_signs ? + --ui_num_signs, va("%+.2f %+.2f %+.2f", v[0], v[1], v[2]) : + va("%.2f, %.2f, %.2f", v[0], v[1], v[2]); + + if (nk_combo_begin_label(ui_ctx, buffer, nk_vec2(200,200))) { + nk_layout_row_dynamic(ui_ctx, 0, 1); + float prev0 = v[0]; nk_property_float(ui_ctx, "#X:", -FLT_MAX, &v[0], FLT_MAX, 1,0.5f); + float prev1 = v[1]; nk_property_float(ui_ctx, "#Y:", -FLT_MAX, &v[1], FLT_MAX, 1,0.5f); + float prev2 = v[2]; nk_property_float(ui_ctx, "#Z:", -FLT_MAX, &v[2], FLT_MAX, 1,0.5f); + nk_combo_end(ui_ctx); + return prev0 != v[0] || prev1 != v[1] || prev2 != v[2]; + } + return 0; +} + +int ui_float4(const char *label, float *v) { + if( label && ui_filter && ui_filter[0] ) if( !strstri(label, ui_filter) ) return 0; + + nk_layout_row_dynamic(ui_ctx, 0, 2); + ui_label_(label, NK_TEXT_LEFT); + + char *buffer = ui_num_signs ? + --ui_num_signs, va("%+.2f %+.2f %+.2f %+.2f", v[0], v[1], v[2], v[3]) : + va("%.2f,%.2f,%.2f,%.2f", v[0], v[1], v[2], v[3]); + + if (nk_combo_begin_label(ui_ctx, buffer, nk_vec2(200,200))) { + nk_layout_row_dynamic(ui_ctx, 0, 1); + float prev0 = v[0]; nk_property_float(ui_ctx, "#X:", -FLT_MAX, &v[0], FLT_MAX, 1,0.5f); + float prev1 = v[1]; nk_property_float(ui_ctx, "#Y:", -FLT_MAX, &v[1], FLT_MAX, 1,0.5f); + float prev2 = v[2]; nk_property_float(ui_ctx, "#Z:", -FLT_MAX, &v[2], FLT_MAX, 1,0.5f); + float prev3 = v[3]; nk_property_float(ui_ctx, "#W:", -FLT_MAX, &v[3], FLT_MAX, 1,0.5f); + nk_combo_end(ui_ctx); + return prev0 != v[0] || prev1 != v[1] || prev2 != v[2] || prev3 != v[3]; + } + + return 0; +} + +int ui_mat33(const char *label, float M[9]) { + if( label && ui_filter && ui_filter[0] ) if( !strstri(label, ui_filter) ) return 0; + + ui_num_signs = 3; + int changed = 0; + changed |= ui_label(label); + changed |= ui_float3(NULL, M); + changed |= ui_float3(NULL, M+3); + changed |= ui_float3(NULL, M+6); + return changed; +} +int ui_mat34(const char *label, float M[12]) { + if( label && ui_filter && ui_filter[0] ) if( !strstri(label, ui_filter) ) return 0; + + ui_num_signs = 3; + int changed = 0; + changed |= ui_label(label); + changed |= ui_float4(NULL, M); + changed |= ui_float4(NULL, M+4); + changed |= ui_float4(NULL, M+8); + return changed; +} +int ui_mat44(const char *label, float M[16]) { + if( label && ui_filter && ui_filter[0] ) if( !strstri(label, ui_filter) ) return 0; + + ui_num_signs = 4; + int changed = 0; + changed |= ui_label(label); + changed |= ui_float4(NULL, M); + changed |= ui_float4(NULL, M+4); + changed |= ui_float4(NULL, M+8); + changed |= ui_float4(NULL, M+12); + return changed; +} + +int ui_buffer(const char *label, char *buffer, int buflen) { + if( label && ui_filter && ui_filter[0] ) if( !strstri(label, ui_filter) ) return 0; + + nk_layout_row_dynamic(ui_ctx, 0, 1 + (label && label[0])); + if(label && label[0]) ui_label_(label, NK_TEXT_LEFT); + + int active = nk_edit_string_zero_terminated(ui_ctx, NK_EDIT_AUTO_SELECT|NK_EDIT_CLIPBOARD|NK_EDIT_FIELD/*NK_EDIT_BOX*/|NK_EDIT_SIG_ENTER, buffer, buflen, nk_filter_default); + return !!(active & NK_EDIT_COMMITED) ? nk_edit_unfocus(ui_ctx), 1 : 0; +} + +int ui_string(const char *label, char **str) { + if( label && ui_filter && ui_filter[0] ) if( !strstri(label, ui_filter) ) return 0; + + char *bak = va("%s%c", *str ? *str : "", '\0'); + int rc = ui_buffer(label, bak, strlen(bak)+2); + if( *str ) 0[*str] = '\0'; + strcatf(str, "%s", bak); + return rc; +} + +int ui_separator() { + if( /*label &&*/ ui_filter && ui_filter[0] ) return 0; // if( !strstri(label, ui_filter) ) return 0; + + nk_layout_row_dynamic(ui_ctx, UI_SEPARATOR_HEIGHT, 1); + + ui_hue_cycle( 1 ); + + struct nk_command_buffer *canvas; + struct nk_input *input = &ui_ctx->input; + canvas = nk_window_get_canvas(ui_ctx); + struct nk_rect space; + enum nk_widget_layout_states state; + state = nk_widget(&space, ui_ctx); + if (state) nk_fill_rect(canvas, space, 0, ui_ctx->style.window.header.normal.data.color ); + + return 1; +} + +int ui_subimage(const char *label, handle id, unsigned iw, unsigned ih, unsigned sx, unsigned sy, unsigned sw, unsigned sh) { + if( label && ui_filter && ui_filter[0] ) if( !strstri(label, ui_filter) ) return 0; + + nk_layout_row_dynamic(ui_ctx, sh < 30 || id == texture_checker().id ? 0 : sh, 1 + (label && label[0])); + if( label && label[0] ) ui_label_(label, NK_TEXT_LEFT); + + struct nk_rect bounds; nk_layout_peek(&bounds, ui_ctx); bounds.w -= 10; // bounds.w *= 0.95f; + + int ret = nk_button_image_styled(ui_ctx, &ui_ctx->style.button, nk_subimage_id((int)id, iw, ih, nk_rect(sx,sy,sw,sh))); + if( !ret ) { + ret |= input(MOUSE_L) && nk_input_is_mouse_hovering_rect(&ui_ctx->input, bounds); // , true); + } + if( ret ) { + int px = 100 * (ui_ctx->input.mouse.pos.x - bounds.x ) / (float)bounds.w; + int py = 100 * (ui_ctx->input.mouse.pos.y - bounds.y ) / (float)bounds.h; + return px * 100 + py; // printf("%d %d xy:%d\n", px, py, (px * 100) + py); + } + return ret; // !!ret; +} + +int ui_image(const char *label, handle id, unsigned w, unsigned h) { + return ui_subimage(label, id, w,h, 0,0,w,h); +} + +int ui_texture(const char *label, texture_t t) { + return ui_subimage(label, t.id, t.w,t.h, 0,0,t.w,t.h); +} + +int ui_subtexture(const char *label, texture_t t, unsigned x, unsigned y, unsigned w, unsigned h) { + return ui_subimage(label, t.id, t.w,t.h, x,y,w,h); +} + +int ui_colormap( const char *label, colormap_t *cm ) { + if( label && ui_filter && ui_filter[0] ) if( !strstri(label, ui_filter) ) return 0; + + int ret = 0; + if( !cm->texture ) { + const char *title = va("%s (no image)", label); + if( ui_image( title, texture_checker().id, 0,0 ) ) { + ret = 2; + } + } else { + unsigned w = cm->texture->w, h = cm->texture->h; + ui_label(va("%s (%s)", label, cm->texture->filename) ); // @fixme: labelf would crash? + + const char *fmt[] = { "", "R", "RG", "RGB", "RGBA" }; + const char *title = va("%s %dx%d %s", label, w, h, fmt[cm->texture->n]); + if( ui_image( title, cm->texture->id, 128, 128 ) ) { + ret = 2; + } + } + + if( ui_color4f( va("%s Color", label), (float *) &cm->color ) ) { + ret = 1; + } + return ret; +} + +int ui_radio(const char *label, const char **items, int num_items, int *selector) { + if( label && ui_filter && ui_filter[0] ) if( !strstri(label, ui_filter) ) return 0; + + int ret = 0; + if( label && label[0] ) ui_label(label); + for( int i = 0; i < num_items; i++ ) { + bool enabled = *selector == i; + if( ui_bool( va("%s%s", label && label[0] ? " ":"", items[i]), &enabled ) ) { + *selector = i; + ret |= 1; + } + } + return ret; +} + +int ui_section(const char *label) { + if( label && ui_filter && ui_filter[0] ) if( !strstri(label, ui_filter) ) return 0; + + //ui_separator(); + return ui_label(va("*%s", label)); +} + +int ui_dialog(const char *label, const char *text, int choices, bool *show) { // @fixme: return + if( label && ui_filter && ui_filter[0] ) if( !strstri(label, ui_filter) ) return 0; + + ui_has_active_popups = 0; + if(*show) { + static struct nk_rect s = {0, 0, 300, 190}; + if (nk_popup_begin(ui_ctx, NK_POPUP_STATIC, label, NK_WINDOW_BORDER|NK_WINDOW_CLOSABLE, s)) { + nk_layout_row_dynamic(ui_ctx, 20, 1); + for( char t[1024]; *text && sscanf(text, "%[^\r\n]", t); ) { + nk_label(ui_ctx, t, NK_TEXT_LEFT); + text += strlen(t); while(*text && *text < 32) text++; + } + + if( choices ) { + if( ui_buttons(choices > 1 ? 2 : 1, "OK", "Cancel") ) { + *show = 0; + nk_popup_close(ui_ctx); + } + } + + nk_popup_end(ui_ctx); + } else { + *show = nk_false; + } + ui_has_active_popups = *show; + } + return *show; +} + +#define ui_bitmask_template(X) \ +int ui_bitmask##X(const char *label, uint##X##_t *enabled) { \ + if( label && ui_filter && ui_filter[0] ) if( !strstri(label, ui_filter) ) return 0; \ +\ + /* @fixme: better way to retrieve widget width? nk_layout_row_dynamic() seems excessive */ \ + nk_layout_row_dynamic(ui_ctx, 1, 1); \ + struct nk_rect bounds = nk_widget_bounds(ui_ctx); \ +\ + /* actual widget: label + X checkboxes */ \ + nk_layout_row_begin(ui_ctx, NK_STATIC, 0, 1+X); \ +\ + int offset = bounds.w > (15*X) ? bounds.w - (15*X) : 0; /* bits widget below needs at least 118px wide */ \ + nk_layout_row_push(ui_ctx, offset); \ + ui_label_(label, NK_TEXT_LEFT); \ +\ + uint8_t copy = *enabled; \ + for( int i = 0; i < X; ++i ) { \ + int b = (X-1-i); \ + nk_layout_row_push(ui_ctx, 10); \ + /* bit */ \ + int val = (*enabled >> b) & 1; \ + int chg = nk_checkbox_label(ui_ctx, "", &val); \ + *enabled = (*enabled & ~(1 << b)) | ((!!val) << b); \ + /* tooltip */ \ + struct nk_rect bb = { offset + 10 + i * 14, bounds.y, 14, 30 }; /* 10:padding,14:width,30:height */ \ + if (nk_input_is_mouse_hovering_rect(&ui_ctx->input, bb) && !ui_has_active_popups && nk_window_has_focus(ui_ctx)) { \ + nk_tooltipf(ui_ctx, "Bit %d", b); \ + } \ + } \ +\ + nk_layout_row_end(ui_ctx); \ + return copy ^ *enabled; \ +} + +ui_bitmask_template(8); +ui_bitmask_template(16); +//ui_bitmask_template(32); + +int ui_console() { // @fixme: buggy + static char *cmd = 0; + static int enter = 0; + + struct nk_font *font = nk_glfw.atlas.fonts->next /*2nd font*/; + if( font && nk_style_push_font(ui_ctx, &font->handle) ) {} else font = 0; + + struct nk_rect bounds = {0,0,400,300}; // @fixme: how to retrieve inlined region below? (inlined) + if( 1 ) /*if( windowed || (!windowed && *inlined) )*/ bounds = nk_window_get_content_region(ui_ctx); + else { struct nk_rect b; nk_layout_peek(&b, ui_ctx); bounds.w = b.w; } + + nk_layout_row_static(ui_ctx, bounds.h - UI_ROW_HEIGHT, bounds.w, 1); + + static array(char*) lines = 0; + for( int i = 0; i < array_count(lines); ++i ) + if(lines[i]) nk_label_wrap(ui_ctx, lines[i]); // "This is a very long line to hopefully get this text to be wrapped into multiple lines to show line wrapping"); + + if( enter ) { + array_push(lines, 0); + + for( FILE *fp = popen(cmd, "r"); fp; pclose(fp), fp = 0) { + int ch; + do { + ch = fgetc(fp); + if( strchr("\r\n\t\b", ch) ) { + array_push(lines,0); + continue; + } + if( ch >= ' ' ) strcatf(array_back(lines), "%c", ch); + } while(ch > 0); + } + + cmd[0] = 0; + } + + enter = ui_string("", &cmd); + + if( font ) nk_style_pop_font(ui_ctx); + + return enter; +} + +int ui_browse(const char **output, bool *inlined) { + static struct browser_media media = {0}; + static struct browser browsers[2] = {0}; // 2 instances max: 0=inlined, 1=windowed + static char *results[2] = {0}; // 2 instances max: 0=inlined, 1=windowed + do_once { + const int W = 96, H = 96; // 2048x481 px, 21x5 cells + texture_t i = texture("icons/suru.png", TEXTURE_RGBA|TEXTURE_MIPMAPS); + browser_config_dir(icon_load_rect(i.id, i.w, i.h, W, H, 16, 3), BROWSER_FOLDER); // default group + browser_config_dir(icon_load_rect(i.id, i.w, i.h, W, H, 2, 4), BROWSER_HOME); + browser_config_dir(icon_load_rect(i.id, i.w, i.h, W, H, 17, 3), BROWSER_COMPUTER); + browser_config_dir(icon_load_rect(i.id, i.w, i.h, W, H, 1, 4), BROWSER_PROJECT); + browser_config_dir(icon_load_rect(i.id, i.w, i.h, W, H, 0, 4), BROWSER_DESKTOP); + + browser_config_type(icon_load_rect(i.id, i.w, i.h, W, H, 8, 0), ""); + browser_config_type(icon_load_rect(i.id, i.w, i.h, W, H, 10, 2), ".txt.md.doc.license" "."); + browser_config_type(icon_load_rect(i.id, i.w, i.h, W, H, 8, 1), ".ini.cfg" "."); + browser_config_type(icon_load_rect(i.id, i.w, i.h, W, H, 8, 3), ".xlsx" "."); + browser_config_type(icon_load_rect(i.id, i.w, i.h, W, H, 9, 0), ".c" "."); + browser_config_type(icon_load_rect(i.id, i.w, i.h, W, H, 4, 1), ".h.hpp.hh.hxx" "."); + browser_config_type(icon_load_rect(i.id, i.w, i.h, W, H, 4, 2), ".fs.vs.gs.fx.glsl.shader" "."); + browser_config_type(icon_load_rect(i.id, i.w, i.h, W, H, 12, 0), ".cpp.cc.cxx" "."); + browser_config_type(icon_load_rect(i.id, i.w, i.h, W, H, 15, 0), ".json" "."); + browser_config_type(icon_load_rect(i.id, i.w, i.h, W, H, 15, 2), ".bat.sh" "."); + browser_config_type(icon_load_rect(i.id, i.w, i.h, W, H, 6, 1), ".htm.html" "."); + browser_config_type(icon_load_rect(i.id, i.w, i.h, W, H, 20, 1), ".xml" "."); + browser_config_type(icon_load_rect(i.id, i.w, i.h, W, H, 12, 1), ".js" "."); + browser_config_type(icon_load_rect(i.id, i.w, i.h, W, H, 0, 3), ".ts" "."); + browser_config_type(icon_load_rect(i.id, i.w, i.h, W, H, 6, 2), ".py" "."); + browser_config_type(icon_load_rect(i.id, i.w, i.h, W, H, 16, 1), ".lua" "."); + browser_config_type(icon_load_rect(i.id, i.w, i.h, W, H, 10, 0), ".css.doc" "."); + browser_config_type(icon_load_rect(i.id, i.w, i.h, W, H, 6, 0), ".wav.flac.ogg.mp1.mp3.mod.xm.s3m.it.sfxr.mid.fur" "."); + browser_config_type(icon_load_rect(i.id, i.w, i.h, W, H, 1, 3), ".ttf.ttc.otf" "."); + browser_config_type(icon_load_rect(i.id, i.w, i.h, W, H, 7, 1), ".jpg.jpeg.png.bmp.psd.pic.pnm.ico.ktx.pvr.dds.astc.basis.hdr.tga.gif" "."); + browser_config_type(icon_load_rect(i.id, i.w, i.h, W, H, 4, 3), ".mp4.mpg.ogv.mkv.wmv.avi" "."); + browser_config_type(icon_load_rect(i.id, i.w, i.h, W, H, 2, 1), ".iqm.iqe.gltf.gltf2.glb.fbx.obj.dae.blend.md3.md5.ms3d.smd.x.3ds.bvh.dxf.lwo" "."); + browser_config_type(icon_load_rect(i.id, i.w, i.h, W, H, 0, 1), ".exe" "."); + browser_config_type(icon_load_rect(i.id, i.w, i.h, W, H, 7, 0), ".bin.dSYM.pdb.o.lib.dll" "."); + browser_config_type(icon_load_rect(i.id, i.w, i.h, W, H, 15, 3), ".zip.rar.7z.pak" "."); + + for( int j = 0; j < countof(browsers); ++j ) browser_init(&browsers[j]); + browsers[0].listing = 1; // inlined version got listing by default, as there is not much space for layouting + } + // at_exit: browser_free(&browser); + + int clicked = 0; + bool windowed = !inlined; + if( windowed || (!windowed && *inlined) ) { + + struct browser *browser = browsers + windowed; // select instance + char **result = results + windowed; // select instance + + struct nk_rect bounds = {0}; // // {0,0,400,300}; + // #define P(b) printf(FILELINE " (%3d,%3d) %3d,%3d\n", (int)b.x,(int)b.y, (int)b.w,(int)b.h) + // if(ui_ctx->current) bounds = nk_layout_space_bounds(ui_ctx), P(bounds); + // if(ui_ctx->current) bounds = nk_layout_widget_bounds(ui_ctx), P(bounds); + // if(ui_ctx->current) bounds = nk_widget_bounds(ui_ctx), P(bounds); + // if(ui_ctx->current) bounds = nk_window_get_bounds(ui_ctx), P(bounds); + // if(ui_ctx->current) bounds = nk_window_get_content_region(ui_ctx), P(bounds); + // if(ui_ctx->current) nk_layout_peek(&bounds, ui_ctx), P(bounds); + // if(ui_ctx->current) nk_layout_widget_space(&bounds, ui_ctx, ui_ctx->current, nk_false), P(bounds); // note: cant be used within a panel + // #undef P + + // panel + // v4k_ui.c:2497 ( 6, 34) 310, 24 + // v4k_ui.c:2498 ( 16, 62) 286, 24 + // v4k_ui.c:2499 ( 16, 86) 296, 24 + // v4k_ui.c:2500 ( 0, 0) 327,613 + // v4k_ui.c:2501 ( 6, 34) 310,572 << ok + // v4k_ui.c:2502 ( 16, 86) 296, 24 + // v4k_ui.c:2503 (316, 62) 297, 24 + + // window + // v4k_ui.c:2497 (188,152) 711, 4 + // v4k_ui.c:2498 (188,152) 711, 4 + // v4k_ui.c:2499 (-2147483648,156) -2147483648, 4 + // v4k_ui.c:2500 (182,118) 728,409 + // v4k_ui.c:2501 (188,152) 711,368 << ok + // v4k_ui.c:2502 (-2147483648,156) -2147483648, 4 + // v4k_ui.c:2503 (-2147483648,152) -2147483648, 4 + + // popup + // v4k_ui.c:2497 ( 9, 30) 350, 24 + // v4k_ui.c:2498 ( 19, 58) 326, 24 + // v4k_ui.c:2499 ( 19, 82) 336, 24 + // v4k_ui.c:2500 ( 4, 29) 360,460 + // v4k_ui.c:2501 ( 9, 30) 350,458 << ok + // v4k_ui.c:2502 ( 19, 82) 336, 24 + // v4k_ui.c:2503 (359, 58) 336, 24 + + bounds = nk_window_get_content_region(ui_ctx); + if( !windowed && *inlined ) bounds.h *= 0.80; + + clicked = browser_run(ui_ctx, browser, windowed, bounds); + if( clicked ) { + strcatf(result, "%d", 0); + (*result)[0] = '\0'; + strcatf(result, "%s", browser->file); + if( inlined ) *inlined = 0; + + const char *target = ifdef(win32, "/", "\\"), *replace = ifdef(win32, "\\", "/"); + strswap(*result, target, replace); + + if( output ) *output = *result; + } + } + + return clicked; +} + +/* +// demo: + static const char *file; + if( ui_panel("inlined", 0)) { + static bool show_browser = 0; + if( ui_button("my button") ) { show_browser = true; } + if( ui_browse(&file, &show_browser) ) puts(file); + ui_panel_end(); + } + if( ui_window("windowed", 0) ) { + if( ui_browse(&file, NULL) ) puts(file); + ui_window_end(); + } +*/ + +// ---------------------------------------------------------------------------- + +int ui_demo(int do_windows) { + static int integer = 42; + static bool toggle = true; + static bool boolean = true; + static float floating = 3.14159; + static float float2[2] = {1,2}; + static float float3[3] = {1,2,3}; + static float float4[4] = {1,2,3,4}; + static float rgbf[3] = {0.84,0.67,0.17}; + static float rgbaf[4] = {0.67,0.90,0.12,1}; + static unsigned rgb = CYAN; + static unsigned rgba = PINK; + static float slider = 0.5f; + static float slider2 = 0.5f; + static char string[64] = "hello world 123"; + static int item = 0; const char *list[] = {"one","two","three"}; + static bool show_dialog = false; + static bool show_browser = false; + static const char* browsed_file = ""; + static uint8_t bitmask = 0x55; + static int hits = 0; + static int window1 = 0, window2 = 0, window3 = 0; + static int disable_all = 0; + + if( ui_panel("UI", 0) ) { + int choice = ui_toolbar("Browser;Toast@Notify;Toggle on/off"); + if(choice == 1) show_browser = true; + if(choice == 2) ui_notify(va("My random toast (%d)", rand()), va("This is notification #%d", ++hits)); + if(choice == 3) disable_all ^= 1; + + if( disable_all ) ui_disable(); + + if( ui_browse(&browsed_file, &show_browser) ) puts(browsed_file); + + if( ui_section("Labels")) {} + if( ui_label("my label")) {} + if( ui_label("my label with tooltip@built on " __DATE__ " " __TIME__)) {} + if( ui_label2_toolbar("my toolbar", ICON_MD_STAR ICON_MD_STAR_OUTLINE ICON_MD_BOOKMARK ICON_MD_BOOKMARK_BORDER) ) {} + //if( ui_label2_wrap("my long label", "and some long long long long text wrapped")) {} + + if( ui_section("Types")) {} + if( ui_bool("my bool", &boolean) ) puts("bool changed"); + if( ui_int("my int", &integer) ) puts("int changed"); + if( ui_float("my float", &floating) ) puts("float changed"); + if( ui_buffer("my string", string, 64) ) puts("string changed"); + + if( ui_section("Vectors") ) {} + if( ui_float2("my float2", float2) ) puts("float2 changed"); + if( ui_float3("my float3", float3) ) puts("float3 changed"); + if( ui_float4("my float4", float4) ) puts("float4 changed"); + + if( ui_section("Lists")) {} + if( ui_list("my list", list, 3, &item ) ) puts("list changed"); + + if( ui_section("Colors")) {} + if( ui_color3("my color3", &rgb) ) puts("color3 changed"); + if( ui_color4("my color4@this is a tooltip", &rgba) ) puts("color4 changed"); + if( ui_color3f("my color3f", rgbf) ) puts("color3f changed"); + if( ui_color4f("my color4f@this is a tooltip", rgbaf) ) puts("color4f changed"); + + if( ui_section("Sliders")) {} + if( ui_slider("my slider", &slider)) puts("slider changed"); + if( ui_slider2("my slider 2", &slider2, va("%.2f", slider2))) puts("slider2 changed"); + + if( do_windows ) { + if( ui_section("Windows")) {} + int show = ui_buttons(3, "Container", "SubPanel", "SubRender"); + if( show == 1 ) window1 = 1; + if( show == 2 ) window2 = 1; + if( show == 3 ) window3 = 1; + } + + if( ui_section("Others")) {} + if( ui_bitmask8("my bitmask", &bitmask) ) printf("bitmask changed %x\n", bitmask); + if( ui_toggle("my toggle", &toggle) ) printf("toggle %s\n", toggle ? "on":"off"); + if( ui_image("my image", texture_checker().id, 0, 0) ) { puts("image clicked"); } + + if( ui_separator() ) {} + if( ui_button("my button") ) { puts("button clicked"); show_dialog = true; } + if( ui_buttons(2, "yes", "no") ) { puts("button clicked"); } + if( ui_buttons(3, "yes", "no", "maybe") ) { puts("button clicked"); } + if( ui_dialog("my dialog", __FILE__ "\n" __DATE__ "\n" "Public Domain.", 2/*two buttons*/, &show_dialog) ) {} + + if( disable_all ) ui_enable(); // restore enabled state + + ui_panel_end(); + } + + if( !do_windows ) return 0; + + // window api showcasing + if( ui_window("Container demo", &window1) ) { + ui_label("label #1"); + if( ui_bool("my bool", &boolean) ) puts("bool changed"); + if( ui_int("my int", &integer) ) puts("int changed"); + if( ui_float("my float", &floating) ) puts("float changed"); + if( ui_buffer("my string", string, 64) ) puts("string changed"); + ui_window_end(); + } + + if( ui_window("SubPanel demo", &window2) ) { + if( ui_panel("panel #2", 0) ) { + ui_label("label #2"); + if( ui_bool("my bool", &boolean) ) puts("bool changed"); + if( ui_int("my int", &integer) ) puts("int changed"); + if( ui_float("my float", &floating) ) puts("float changed"); + if( ui_buffer("my string", string, 64) ) puts("string changed"); + ui_panel_end(); + } + ui_window_end(); + } + + if( ui_window("SubRender demo", &window3) ) { + if( ui_panel("panel #3A", 0) ) { + if( ui_bool("my bool", &boolean) ) puts("bool changed"); + if( ui_int("my int", &integer) ) puts("int changed"); + if( ui_float("my float", &floating) ) puts("float changed"); + if( ui_buffer("my string", string, 64) ) puts("string changed"); + if( ui_separator() ) {} + if( ui_slider("my slider", &slider)) puts("slider changed"); + if( ui_slider2("my slider 2", &slider2, va("%.2f", slider2))) puts("slider2 changed"); + ui_panel_end(); + } + if( ui_panel("panel #3B", 0) ) { + if( ui_bool("my bool", &boolean) ) puts("bool changed"); + if( ui_int("my int", &integer) ) puts("int changed"); + if( ui_float("my float", &floating) ) puts("float changed"); + if( ui_buffer("my string", string, 64) ) puts("string changed"); + if( ui_separator() ) {} + if( ui_slider("my slider", &slider)) puts("slider changed"); + if( ui_slider2("my slider 2", &slider2, va("%.2f", slider2))) puts("slider2 changed"); + ui_panel_end(); + } + + const char *title = "SubRender demo"; + struct nk_window *win = nk_window_find(ui_ctx, title); + if( win ) { + enum { menubar_height = 65 }; // title bar (~32) + menu bounds (~25) + struct nk_rect bounds = win->bounds; bounds.y += menubar_height; bounds.h -= menubar_height; +#if 1 + ddraw_flush(); + + // @fixme: this is breaking rendering when post-fxs are in use. edit: cannot reproduce + static texture_t tx = {0}; + if( texture_rec_begin(&tx, bounds.w, bounds.h )) { + glClearColor(0.15,0.15,0.15,1); + glClear(GL_COLOR_BUFFER_BIT); + ddraw_grid(10); + ddraw_flush(); + texture_rec_end(&tx); + } + struct nk_image image = nk_image_id((int)tx.id); + nk_draw_image_flipped(nk_window_get_canvas(ui_ctx), bounds, &image, nk_white); +#else + static video_t *v = NULL; + do_once v = video( "bjork-all-is-full-of-love.mp4", VIDEO_RGB ); + + texture_t *textures = video_decode( v ); + + struct nk_image image = nk_image_id((int)textures[0].id); + nk_draw_image(nk_window_get_canvas(ui_ctx), bounds, &image, nk_white); +#endif + } + + ui_window_end(); + } + return 0; +} #line 0 #line 1 "v4k_audio.c" -// @fixme: really shutdown audio & related threads before quitting. ma_dr_wav crashes. - - -#if is(win32) && !is(gcc) -#include -#include // midi -static HMIDIOUT midi_out_handle = 0; -#elif is(osx) -static AudioUnit midi_out_handle = 0; -#endif - -static void midi_init() { -#if is(win32) && !is(gcc) - if( midiOutGetNumDevs() != 0 ) { - midiOutOpen(&midi_out_handle, 0, 0, 0, 0); - } -#elif is(osx) - AUGraph graph; - AUNode outputNode, mixerNode, dlsNode; - NewAUGraph(&graph); - AudioComponentDescription output = {'auou','ahal','appl',0,0}; - AUGraphAddNode(graph, &output, &outputNode); - AUGraphOpen(graph); - AUGraphInitialize(graph); - AUGraphStart(graph); - AudioComponentDescription dls = {'aumu','dls ','appl',0,0}; - AUGraphAddNode(graph, &dls, &dlsNode); - AUGraphNodeInfo(graph, dlsNode, NULL, &midi_out_handle); - AudioComponentDescription mixer = {'aumx','smxr','appl',0,0}; - AUGraphAddNode(graph, &mixer, &mixerNode); - AUGraphConnectNodeInput(graph,mixerNode,0,outputNode,0); - AUGraphConnectNodeInput(graph,dlsNode,0,mixerNode,0); - AUGraphUpdate(graph,NULL); -#endif -} - -static void midi_quit() { -#if is(win32) && !is(gcc) - if (midi_out_handle) midiOutClose(midi_out_handle); -#endif - // @fixme: osx - // https://developer.apple.com/library/archive/samplecode/PlaySoftMIDI/Listings/main_cpp.html#//apple_ref/doc/uid/DTS40008635-main_cpp-DontLinkElementID_4 -} - -void midi_send(unsigned midi_msg) { -#if is(win32) && !is(gcc) - if( midi_out_handle ) { - midiOutShortMsg(midi_out_handle, midi_msg); - } -#elif is(osx) - if( midi_out_handle ) { - MusicDeviceMIDIEvent(midi_out_handle, (midi_msg) & 0xFF, (midi_msg >> 8) & 0xFF, (midi_msg >> 16) & 0xFF, 0); - } -#endif -} - -// encapsulate ma_dr_wav,ma_dr_mp3,stbvorbis and some buffer with the sts_mixer_stream_t -enum { UNK, WAV, OGG, MP1, MP3 }; -typedef struct { - int type; - union { - ma_dr_wav wav; - stb_vorbis *ogg; - void *opaque; - ma_dr_mp3 mp3_; - }; - sts_mixer_stream_t stream; // mixer stream - union { - int32_t data[4096*2]; // static sample buffer - float dataf[4096*2]; - }; - bool rewind; - bool loop; -} mystream_t; - -static void downsample_to_mono_flt( int channels, float *buffer, int samples ) { - if( channels > 1 ) { - float *output = buffer; - while( samples-- > 0 ) { - float mix = 0; - for( int i = 0; i < channels; ++i ) mix += *buffer++; - *output++ = (float)(mix / channels); - } - } -} -static void downsample_to_mono_s16( int channels, short *buffer, int samples ) { - if( channels > 1 ) { - short *output = buffer; - while( samples-- > 0 ) { - float mix = 0; - for( int i = 0; i < channels; ++i ) mix += *buffer++; - *output++ = (short)(mix / channels); - } - } -} - -// the callback to refill the (stereo) stream data -static bool refill_stream(sts_mixer_sample_t* sample, void* userdata) { - mystream_t* stream = (mystream_t*)userdata; - switch( stream->type ) { - default: - break; case WAV: { - int sl = sample->length / 2; /*sample->channels*/; - if( stream->rewind ) stream->rewind = 0, ma_dr_wav_seek_to_pcm_frame(&stream->wav, 0); - if (ma_dr_wav_read_pcm_frames_s16(&stream->wav, sl, (short*)stream->data) < sl) { - ma_dr_wav_seek_to_pcm_frame(&stream->wav, 0); - if (!stream->loop) return false; - } - } - break; case MP3: { - int sl = sample->length / 2; /*sample->channels*/; - if( stream->rewind ) stream->rewind = 0, ma_dr_mp3_seek_to_pcm_frame(&stream->mp3_, 0); - if (ma_dr_mp3_read_pcm_frames_f32(&stream->mp3_, sl, stream->dataf) < sl) { - ma_dr_mp3_seek_to_pcm_frame(&stream->mp3_, 0); - if (!stream->loop) return false; - } - } - break; case OGG: { - stb_vorbis *ogg = (stb_vorbis*)stream->ogg; - if( stream->rewind ) stream->rewind = 0, stb_vorbis_seek(stream->ogg, 0); - if( stb_vorbis_get_samples_short_interleaved(ogg, 2, (short*)stream->data, sample->length) == 0 ) { - stb_vorbis_seek(stream->ogg, 0); - if (!stream->loop) return false; - } - } - } - - return true; -} -static void reset_stream(mystream_t* stream) { - if( stream ) memset( stream->data, 0, sizeof(stream->data) ), stream->rewind = 1; -} - -// load a (stereo) stream -static bool load_stream(mystream_t* stream, const char *filename) { - int datalen; - char *data = vfs_load(filename, &datalen); if(!data) return false; - - int error; - int HZ = 44100; - stream->type = UNK; - stream->loop = true; - if( stream->type == UNK && (stream->ogg = stb_vorbis_open_memory((const unsigned char *)data, datalen, &error, NULL)) ) { - stb_vorbis_info info = stb_vorbis_get_info(stream->ogg); - if( info.channels != 2 ) { puts("cannot stream ogg file. stereo required."); goto end; } // @fixme: upsample - stream->type = OGG; - stream->stream.sample.frequency = info.sample_rate; - stream->stream.sample.audio_format = STS_MIXER_SAMPLE_FORMAT_16; - } - if( stream->type == UNK && ma_dr_wav_init_memory(&stream->wav, data, datalen, NULL)) { - if( stream->wav.channels != 2 ) { puts("cannot stream wav file. stereo required."); goto end; } // @fixme: upsample - stream->type = WAV; - stream->stream.sample.frequency = stream->wav.sampleRate; - stream->stream.sample.audio_format = STS_MIXER_SAMPLE_FORMAT_16; - } - ma_dr_mp3_config mp3_cfg = { 2, HZ }; - if( stream->type == UNK && (ma_dr_mp3_init_memory(&stream->mp3_, data, datalen, NULL/*&mp3_cfg*/) != 0) ) { - stream->type = MP3; - stream->stream.sample.frequency = stream->mp3_.sampleRate; - stream->stream.sample.audio_format = STS_MIXER_SAMPLE_FORMAT_FLOAT; - } - - if( stream->type == UNK ) { - return false; - } - - end:; - stream->stream.userdata = stream; - stream->stream.callback = refill_stream; - stream->stream.sample.length = sizeof(stream->data) / sizeof(stream->data[0]); - stream->stream.sample.data = stream->data; - refill_stream(&stream->stream.sample, stream); - - return true; -} - -// load a (mono) sample -static bool load_sample(sts_mixer_sample_t* sample, const char *filename) { - int datalen; - char *data = vfs_load(filename, &datalen); if(!data) return false; - - int error; - int channels = 0; - - if( !channels ) for( ma_dr_wav w = {0}, *wav = &w; wav && ma_dr_wav_init_memory(wav, data, datalen, NULL); wav = 0 ) { - channels = wav->channels; - sample->frequency = wav->sampleRate; - sample->audio_format = STS_MIXER_SAMPLE_FORMAT_16; - sample->length = wav->totalPCMFrameCount; - sample->data = REALLOC(0, sample->length * sizeof(short) * channels); - ma_dr_wav_read_pcm_frames_s16(wav, sample->length, (short*)sample->data); - ma_dr_wav_uninit(wav); - } - if( !channels ) for( stb_vorbis *ogg = stb_vorbis_open_memory((const unsigned char *)data, datalen, &error, NULL); ogg; ogg = 0 ) { - stb_vorbis_info info = stb_vorbis_get_info(ogg); - channels = info.channels; - sample->frequency = info.sample_rate; - sample->audio_format = STS_MIXER_SAMPLE_FORMAT_16; - sample->length = (int)stb_vorbis_stream_length_in_samples(ogg); - stb_vorbis_close(ogg); - - short *buffer; - int sample_rate; - stb_vorbis_decode_memory((const unsigned char *)data, datalen, &channels, &sample_rate, (short **)&buffer); - sample->data = buffer; - } - ma_dr_mp3_config mp3_cfg = { 2, 44100 }; - ma_uint64 mp3_fc; - if( !channels ) for( short *fbuf = ma_dr_mp3_open_memory_and_read_pcm_frames_s16(data, datalen, &mp3_cfg, &mp3_fc, NULL); fbuf ; fbuf = 0 ) { - channels = mp3_cfg.channels; - sample->frequency = mp3_cfg.sampleRate; - sample->audio_format = STS_MIXER_SAMPLE_FORMAT_16; - sample->length = mp3_fc; // / sizeof(float) / mp3_cfg.channels; - sample->data = fbuf; - } - if( !channels ) { - short *output = 0; - int outputSize, hz, mp1channels; - bool ok = jo_read_mp1(data, datalen, &output, &outputSize, &hz, &mp1channels); - if( ok ) { - channels = mp1channels; - sample->frequency = hz; - sample->audio_format = STS_MIXER_SAMPLE_FORMAT_16; - sample->length = outputSize / sizeof(int16_t) / channels; - sample->data = output; // REALLOC(0, sample->length * sizeof(int16_t) * channels ); - // memcpy( sample->data, output, outputSize ); - } - } - - if( !channels ) { - return false; - } - - if( channels > 1 ) { - if( sample->audio_format == STS_MIXER_SAMPLE_FORMAT_FLOAT ) { - downsample_to_mono_flt( channels, sample->data, sample->length ); - sample->data = REALLOC( sample->data, sample->length * sizeof(float)); - } - else - if( sample->audio_format == STS_MIXER_SAMPLE_FORMAT_16 ) { - downsample_to_mono_s16( channels, sample->data, sample->length ); - sample->data = REALLOC( sample->data, sample->length * sizeof(short)); - } - else { - puts("error!"); // @fixme - } - } - - return true; -} - -// ----------------------------------------------------------------------------- - -static ma_device device; -static ma_context context; -static sts_mixer_t mixer; - -// This is the function that's used for sending more data to the device for playback. -static void audio_callback(ma_device* pDevice, void* pOutput, const void* pInput, ma_uint32 frameCount) { - int len = frameCount; - sts_mixer_mix_audio(&mixer, pOutput, len / (sizeof(int32_t) / 4)); - (void)pDevice; (void)pInput; - // return len / (sizeof(int32_t) / 4); -} - -void audio_drop(void) { - ma_device_stop(&device); - ma_device_uninit(&device); - ma_context_uninit(&context); -} - -int audio_init( int flags ) { - atexit(audio_drop); - - // init sts_mixer - sts_mixer_init(&mixer, 44100, STS_MIXER_SAMPLE_FORMAT_32); - - // The prioritization of backends can be controlled by the application. You need only specify the backends - // you care about. If the context cannot be initialized for any of the specified backends ma_context_init() - // will fail. - ma_backend backends[] = { -#if 1 - ma_backend_wasapi, // Higest priority. - ma_backend_dsound, - ma_backend_winmm, - ma_backend_coreaudio, - ma_backend_pulseaudio, - ma_backend_alsa, - ma_backend_oss, - ma_backend_jack, - ma_backend_opensl, - // ma_backend_webaudio, - // ma_backend_openal, - //ma_backend_sdl, - ma_backend_null // Lowest priority. -#else - // Highest priority - ma_backend_wasapi, // WASAPI | Windows Vista+ - ma_backend_dsound, // DirectSound | Windows XP+ - ma_backend_winmm, // WinMM | Windows XP+ (may work on older versions, but untested) - ma_backend_coreaudio, // Core Audio | macOS, iOS - ma_backend_pulseaudio, // PulseAudio | Cross Platform (disabled on Windows, BSD and Android) - ma_backend_alsa, // ALSA | Linux - ma_backend_oss, // OSS | FreeBSD - ma_backend_jack, // JACK | Cross Platform (disabled on BSD and Android) - ma_backend_opensl, // OpenSL ES | Android (API level 16+) - ma_backend_webaudio, // Web Audio | Web (via Emscripten) - ma_backend_sndio, // sndio | OpenBSD - ma_backend_audio4, // audio(4) | NetBSD, OpenBSD - ma_backend_aaudio, // AAudio | Android 8+ - ma_backend_custom, // Custom | Cross Platform - ma_backend_null, // Null | Cross Platform (not used on Web) - // Lowest priority -#endif - }; - - if (ma_context_init(backends, countof(backends), NULL, &context) != MA_SUCCESS) { - PRINTF("%s\n", "Failed to initialize audio context."); - return false; - } - - ma_device_config config = ma_device_config_init(ma_device_type_playback); // Or ma_device_type_capture or ma_device_type_duplex. - config.playback.pDeviceID = NULL; // &myPlaybackDeviceID; // Or NULL for the default playback device. - config.playback.format = ma_format_s32; - config.playback.channels = 2; - config.sampleRate = 44100; - config.dataCallback = (void*)audio_callback; //< @r-lyeh add void* cast - config.pUserData = NULL; - - if (ma_device_init(NULL, &config, &device) != MA_SUCCESS) { - printf("Failed to open playback device."); - ma_context_uninit(&context); - return false; - } - - (void)flags; - ma_device_start(&device); - return true; -} - -typedef struct audio_handle { - bool is_clip; - bool is_stream; - union { - sts_mixer_sample_t clip; - mystream_t stream; - }; -} audio_handle; - -static array(audio_handle*) audio_instances; - -audio_t audio_clip( const char *pathfile ) { - audio_handle *a = REALLOC(0, sizeof(audio_handle) ); - memset(a, 0, sizeof(audio_handle)); - a->is_clip = load_sample( &a->clip, pathfile ); - array_push(audio_instances, a); - return a; -} -audio_t audio_stream( const char *pathfile ) { - audio_handle *a = REALLOC(0, sizeof(audio_handle) ); - memset(a, 0, sizeof(audio_handle)); - a->is_stream = load_stream( &a->stream, pathfile ); - array_push(audio_instances, a); - return a; -} - - -static float volume_clip = 1, volume_stream = 1, volume_master = 1; -float audio_volume_clip(float gain) { - if( gain >= 0 && gain <= 1 ) volume_clip = gain * gain; - // patch all live clips - for(int i = 0, active = 0; i < STS_MIXER_VOICES; ++i) { - if(mixer.voices[i].state != STS_MIXER_VOICE_STOPPED) // is_active? - if( mixer.voices[i].sample ) // is_sample? - mixer.voices[i].gain = volume_clip; - } - return sqrt( volume_clip ); -} -float audio_volume_stream(float gain) { - if( gain >= 0 && gain <= 1 ) volume_stream = gain * gain; - // patch all live streams - for(int i = 0, active = 0; i < STS_MIXER_VOICES; ++i) { - if(mixer.voices[i].state != STS_MIXER_VOICE_STOPPED) // is_active? - if( mixer.voices[i].stream ) // is_stream? - mixer.voices[i].gain = volume_stream; - } - return sqrt( volume_stream ); -} -float audio_volume_master(float gain) { - if( gain >= 0 && gain <= 1 ) volume_master = gain * gain; - // patch global mixer - mixer.gain = volume_master; - return sqrt( volume_master ); -} -int audio_mute(int mute) { - static bool muted = 0; do_once muted = flag("--mute") || flag("--muted"); - if( mute >= 0 && mute <= 1 ) muted = mute; - return muted; -} -int audio_muted() { - return audio_mute(-1); -} - -int audio_play_gain_pitch_pan( audio_t a, int flags, float gain, float pitch, float pan ) { - if(audio_muted()) return 1; - - if( flags & AUDIO_IGNORE_MIXER_GAIN ) { - // do nothing, gain used as-is - } else { - // apply mixer gains on top - gain += a->is_clip ? volume_clip : volume_stream; - } - - if( flags & AUDIO_SINGLE_INSTANCE ) { - audio_stop( a ); - } - - // gain: [0..+1], pitch: (0..N], pan: [-1..+1] - - if( a->is_clip ) { - int voice = sts_mixer_play_sample(&mixer, &a->clip, gain, pitch, pan); - if( voice == -1 ) return 0; // all voices busy - } - if( a->is_stream ) { - int voice = sts_mixer_play_stream(&mixer, &a->stream.stream, gain); - if( voice == -1 ) return 0; // all voices busy - } - return 1; -} - -int audio_play_gain_pitch( audio_t a, int flags, float gain, float pitch ) { - return audio_play_gain_pitch_pan(a, flags, gain, pitch, 0); -} - -int audio_play_gain( audio_t a, int flags, float gain ) { - return audio_play_gain_pitch(a, flags, gain, 1.f); -} - -int audio_play( audio_t a, int flags ) { - return audio_play_gain(a, flags & ~AUDIO_IGNORE_MIXER_GAIN, 0.f); -} - -int audio_stop( audio_t a ) { - if( a->is_clip ) { - sts_mixer_stop_sample(&mixer, &a->clip); - } - if( a->is_stream ) { - sts_mixer_stop_stream(&mixer, &a->stream.stream); - reset_stream(&a->stream); - } - return 1; -} - -void audio_loop( audio_t a, bool loop ) { - if ( a->is_stream ) { - a->stream.loop = loop; - } -} - -bool audio_playing( audio_t a ) { - if( a->is_clip ) { - return !sts_mixer_sample_stopped(&mixer, &a->clip); - } - if( a->is_stream ) { - return !sts_mixer_stream_stopped(&mixer, &a->stream.stream); - } - return false; -} - -// ----------------------------------------------------------------------------- -// audio queue - -#ifndef AUDIO_QUEUE_BUFFERING_MS -#define AUDIO_QUEUE_BUFFERING_MS 50 // 10 // 100 -#endif -#ifndef AUDIO_QUEUE_MAX -#define AUDIO_QUEUE_MAX 2048 -#endif -#ifndef AUDIO_QUEUE_TIMEOUT -#define AUDIO_QUEUE_TIMEOUT ifdef(win32, THREAD_QUEUE_WAIT_INFINITE, 500) -#endif - -typedef struct audio_queue_t { - int cursor; - int avail; - unsigned flags; - char data[0]; -} audio_queue_t; - -static thread_queue_t queue_mutex; - -static void audio_queue_init() { - static void* audio_queues[AUDIO_QUEUE_MAX] = {0}; - do_once thread_queue_init(&queue_mutex, countof(audio_queues), audio_queues, 0); -} - -static bool audio_queue_callback(sts_mixer_sample_t* sample, void* userdata) { - (void)userdata; - - int sl = sample->length / 2; // 2 ch - int bytes = sl * 2 * (sample->audio_format == STS_MIXER_SAMPLE_FORMAT_16 ? 2 : 4); - char *dst = sample->data; - - static audio_queue_t *aq = 0; - - do { - while( !aq ) aq = (audio_queue_t*)thread_queue_consume(&queue_mutex, THREAD_QUEUE_WAIT_INFINITE); - - int len = aq->avail > bytes ? bytes : aq->avail; - memcpy(dst, (char*)aq->data + aq->cursor, len); - dst += len; - bytes -= len; - aq->cursor += len; - aq->avail -= len; - - if( aq->avail <= 0 ) { - FREE(aq); // @fixme: mattias' original thread_queue_consume() implementation crashes here on tcc+win because of a double free on same pointer. using mcmp for now - aq = 0; - } - } while( bytes > 0 ); - - return 1; -} - -static int audio_queue_voice = -1; -void audio_queue_clear() { - do_once audio_queue_init(); - sts_mixer_stop_voice(&mixer, audio_queue_voice); - audio_queue_voice = -1; -} -int audio_queue( const void *samples, int num_samples, int flags ) { - do_once audio_queue_init(); - - float gain = 1; // [0..1] - float pitch = 1; // (0..N] - float pan = 0; // [-1..1] - - int bits = flags & AUDIO_8 ? 8 : flags & (AUDIO_32|AUDIO_FLOAT) ? 32 : 16; - int channels = flags & AUDIO_2CH ? 2 : 1; - int bytes_per_sample = channels * (bits / 8); - int bytes = num_samples * bytes_per_sample; - - static sts_mixer_stream_t q = { 0 }; - if( audio_queue_voice < 0 ) { - void *reuse_ptr = q.sample.data; - q = ((sts_mixer_stream_t){0}); - q.sample.data = reuse_ptr; - - q.callback = audio_queue_callback; - q.sample.frequency = flags & AUDIO_8KHZ ? 8000 : flags & AUDIO_11KHZ ? 11025 : flags & AUDIO_44KHZ ? 44100 : flags & AUDIO_32KHZ ? 32000 : 22050; - q.sample.audio_format = flags & AUDIO_FLOAT ? STS_MIXER_SAMPLE_FORMAT_FLOAT : STS_MIXER_SAMPLE_FORMAT_16; - q.sample.length = q.sample.frequency / (1000 / AUDIO_QUEUE_BUFFERING_MS); // num_samples; - int bytes = q.sample.length * 2 * (flags & AUDIO_FLOAT ? 4 : 2); - q.sample.data = memset(REALLOC(q.sample.data, bytes), 0, bytes); - audio_queue_voice = sts_mixer_play_stream(&mixer, &q, gain * 1.f); - if( audio_queue_voice < 0 ) return 0; - } - - audio_queue_t *aq = MALLOC(sizeof(audio_queue_t) + (bytes << (channels == 1))); // dupe space if going to be converted from mono to stereo - aq->cursor = 0; - aq->avail = bytes; - aq->flags = flags; - if( !samples ) { - memset(aq->data, 0, bytes); - } else { - // @todo: convert from other source formats to target format in here: add AUDIO_8, AUDIO_32 - if( channels == 1 ) { - // mixer accepts stereo samples only; so resample mono to stereo if needed - for( int i = 0; i < num_samples; ++i ) { - memcpy((char*)aq->data + (i*2+0) * bytes_per_sample, (char*)samples + i * bytes_per_sample, bytes_per_sample ); - memcpy((char*)aq->data + (i*2+1) * bytes_per_sample, (char*)samples + i * bytes_per_sample, bytes_per_sample ); - } - } else { - memcpy(aq->data, samples, bytes); - } - } - - while( !thread_queue_produce(&queue_mutex, aq, THREAD_QUEUE_WAIT_INFINITE) ) {} - - return audio_queue_voice; -} - -int ui_audio() { - int changed = 0; - - float sfx = sqrt(volume_clip), bgm = sqrt(volume_stream), master = sqrt(volume_master); - if( ui_slider2("BGM volume", &bgm, va("%.2f", bgm))) changed = 1, audio_volume_stream(bgm); - if( ui_slider2("SFX volume", &sfx, va("%.2f", sfx))) changed = 1, audio_volume_clip(sfx); - if( ui_slider2("Master volume", &master, va("%.2f", master))) changed = 1, audio_volume_master(master); - - ui_separator(); - - int num_voices = sts_mixer_get_active_voices(&mixer); - ui_label2("Format", mixer.audio_format == 0 ? "None" : mixer.audio_format == 1 ? "8-bit" : mixer.audio_format == 2 ? "16-bit" : mixer.audio_format == 3 ? "32-bit integer" : "32-bit float"); - ui_label2("Frequency", va("%4.1f KHz", mixer.frequency / 1000.0)); - ui_label2("Voices", va("%d/%d", num_voices, STS_MIXER_VOICES)); - ui_separator(); - - for( int i = 0; i < STS_MIXER_VOICES; ++i ) { - if( mixer.voices[i].state != STS_MIXER_VOICE_STOPPED ) { // PLAYING || STREAMING - ui_label(va("Voice %d", i+1)); - - // float mul = mixer.voices[i].state == STS_MIXER_VOICE_STREAMING ? 2 : 1; - // float div = mixer.voices[i].state == STS_MIXER_VOICE_STREAMING ? mixer.voices[i].stream->sample.length : mixer.voices[i].sample->length; - // float pct = mixer.voices[i].position * mul / div; - // if(ui_slider2("Position", &pct, va("%5.2f", pct))) changed = 1; - if(ui_slider2("Gain", &mixer.voices[i].gain, va("%5.2f", mixer.voices[i].gain))) changed = 1; - if(ui_slider2("Pitch", &mixer.voices[i].pitch, va("%5.2f", mixer.voices[i].pitch))) changed = 1; - if(ui_slider2("Pan", &mixer.voices[i].pan, va("%5.2f", mixer.voices[i].pan))) changed = 1; - ui_separator(); - } - } - - return changed; -} +// @fixme: really shutdown audio & related threads before quitting. ma_dr_wav crashes. + + +#if is(win32) && !is(gcc) +#include +#include // midi +static HMIDIOUT midi_out_handle = 0; +#elif is(osx) +static AudioUnit midi_out_handle = 0; +#endif + +static void midi_init() { +#if is(win32) && !is(gcc) + if( midiOutGetNumDevs() != 0 ) { + midiOutOpen(&midi_out_handle, 0, 0, 0, 0); + } +#elif is(osx) + AUGraph graph; + AUNode outputNode, mixerNode, dlsNode; + NewAUGraph(&graph); + AudioComponentDescription output = {'auou','ahal','appl',0,0}; + AUGraphAddNode(graph, &output, &outputNode); + AUGraphOpen(graph); + AUGraphInitialize(graph); + AUGraphStart(graph); + AudioComponentDescription dls = {'aumu','dls ','appl',0,0}; + AUGraphAddNode(graph, &dls, &dlsNode); + AUGraphNodeInfo(graph, dlsNode, NULL, &midi_out_handle); + AudioComponentDescription mixer = {'aumx','smxr','appl',0,0}; + AUGraphAddNode(graph, &mixer, &mixerNode); + AUGraphConnectNodeInput(graph,mixerNode,0,outputNode,0); + AUGraphConnectNodeInput(graph,dlsNode,0,mixerNode,0); + AUGraphUpdate(graph,NULL); +#endif +} + +static void midi_quit() { +#if is(win32) && !is(gcc) + if (midi_out_handle) midiOutClose(midi_out_handle); +#endif + // @fixme: osx + // https://developer.apple.com/library/archive/samplecode/PlaySoftMIDI/Listings/main_cpp.html#//apple_ref/doc/uid/DTS40008635-main_cpp-DontLinkElementID_4 +} + +void midi_send(unsigned midi_msg) { +#if is(win32) && !is(gcc) + if( midi_out_handle ) { + midiOutShortMsg(midi_out_handle, midi_msg); + } +#elif is(osx) + if( midi_out_handle ) { + MusicDeviceMIDIEvent(midi_out_handle, (midi_msg) & 0xFF, (midi_msg >> 8) & 0xFF, (midi_msg >> 16) & 0xFF, 0); + } +#endif +} + +// encapsulate ma_dr_wav,ma_dr_mp3,stbvorbis and some buffer with the sts_mixer_stream_t +enum { UNK, WAV, OGG, MP1, MP3 }; +typedef struct { + int type; + union { + ma_dr_wav wav; + stb_vorbis *ogg; + void *opaque; + ma_dr_mp3 mp3_; + }; + sts_mixer_stream_t stream; // mixer stream + union { + int32_t data[4096*2]; // static sample buffer + float dataf[4096*2]; + }; + bool rewind; + bool loop; +} mystream_t; + +static void downsample_to_mono_flt( int channels, float *buffer, int samples ) { + if( channels > 1 ) { + float *output = buffer; + while( samples-- > 0 ) { + float mix = 0; + for( int i = 0; i < channels; ++i ) mix += *buffer++; + *output++ = (float)(mix / channels); + } + } +} +static void downsample_to_mono_s16( int channels, short *buffer, int samples ) { + if( channels > 1 ) { + short *output = buffer; + while( samples-- > 0 ) { + float mix = 0; + for( int i = 0; i < channels; ++i ) mix += *buffer++; + *output++ = (short)(mix / channels); + } + } +} + +// the callback to refill the (stereo) stream data +static bool refill_stream(sts_mixer_sample_t* sample, void* userdata) { + mystream_t* stream = (mystream_t*)userdata; + switch( stream->type ) { + default: + break; case WAV: { + int sl = sample->length / 2; /*sample->channels*/; + if( stream->rewind ) stream->rewind = 0, ma_dr_wav_seek_to_pcm_frame(&stream->wav, 0); + if (ma_dr_wav_read_pcm_frames_s16(&stream->wav, sl, (short*)stream->data) < sl) { + ma_dr_wav_seek_to_pcm_frame(&stream->wav, 0); + if (!stream->loop) return false; + } + } + break; case MP3: { + int sl = sample->length / 2; /*sample->channels*/; + if( stream->rewind ) stream->rewind = 0, ma_dr_mp3_seek_to_pcm_frame(&stream->mp3_, 0); + if (ma_dr_mp3_read_pcm_frames_f32(&stream->mp3_, sl, stream->dataf) < sl) { + ma_dr_mp3_seek_to_pcm_frame(&stream->mp3_, 0); + if (!stream->loop) return false; + } + } + break; case OGG: { + stb_vorbis *ogg = (stb_vorbis*)stream->ogg; + if( stream->rewind ) stream->rewind = 0, stb_vorbis_seek(stream->ogg, 0); + if( stb_vorbis_get_samples_short_interleaved(ogg, 2, (short*)stream->data, sample->length) == 0 ) { + stb_vorbis_seek(stream->ogg, 0); + if (!stream->loop) return false; + } + } + } + + return true; +} +static void reset_stream(mystream_t* stream) { + if( stream ) memset( stream->data, 0, sizeof(stream->data) ), stream->rewind = 1; +} + +// load a (stereo) stream +static bool load_stream(mystream_t* stream, const char *filename) { + int datalen; + char *data = vfs_load(filename, &datalen); if(!data) return false; + + int error; + int HZ = 44100; + stream->type = UNK; + stream->loop = true; + if( stream->type == UNK && (stream->ogg = stb_vorbis_open_memory((const unsigned char *)data, datalen, &error, NULL)) ) { + stb_vorbis_info info = stb_vorbis_get_info(stream->ogg); + if( info.channels != 2 ) { puts("cannot stream ogg file. stereo required."); goto end; } // @fixme: upsample + stream->type = OGG; + stream->stream.sample.frequency = info.sample_rate; + stream->stream.sample.audio_format = STS_MIXER_SAMPLE_FORMAT_16; + } + if( stream->type == UNK && ma_dr_wav_init_memory(&stream->wav, data, datalen, NULL)) { + if( stream->wav.channels != 2 ) { puts("cannot stream wav file. stereo required."); goto end; } // @fixme: upsample + stream->type = WAV; + stream->stream.sample.frequency = stream->wav.sampleRate; + stream->stream.sample.audio_format = STS_MIXER_SAMPLE_FORMAT_16; + } + ma_dr_mp3_config mp3_cfg = { 2, HZ }; + if( stream->type == UNK && (ma_dr_mp3_init_memory(&stream->mp3_, data, datalen, NULL/*&mp3_cfg*/) != 0) ) { + stream->type = MP3; + stream->stream.sample.frequency = stream->mp3_.sampleRate; + stream->stream.sample.audio_format = STS_MIXER_SAMPLE_FORMAT_FLOAT; + } + + if( stream->type == UNK ) { + return false; + } + + end:; + stream->stream.userdata = stream; + stream->stream.callback = refill_stream; + stream->stream.sample.length = sizeof(stream->data) / sizeof(stream->data[0]); + stream->stream.sample.data = stream->data; + refill_stream(&stream->stream.sample, stream); + + return true; +} + +// load a (mono) sample +static bool load_sample(sts_mixer_sample_t* sample, const char *filename) { + int datalen; + char *data = vfs_load(filename, &datalen); if(!data) return false; + + int error; + int channels = 0; + + if( !channels ) for( ma_dr_wav w = {0}, *wav = &w; wav && ma_dr_wav_init_memory(wav, data, datalen, NULL); wav = 0 ) { + channels = wav->channels; + sample->frequency = wav->sampleRate; + sample->audio_format = STS_MIXER_SAMPLE_FORMAT_16; + sample->length = wav->totalPCMFrameCount; + sample->data = REALLOC(0, sample->length * sizeof(short) * channels); + ma_dr_wav_read_pcm_frames_s16(wav, sample->length, (short*)sample->data); + ma_dr_wav_uninit(wav); + } + if( !channels ) for( stb_vorbis *ogg = stb_vorbis_open_memory((const unsigned char *)data, datalen, &error, NULL); ogg; ogg = 0 ) { + stb_vorbis_info info = stb_vorbis_get_info(ogg); + channels = info.channels; + sample->frequency = info.sample_rate; + sample->audio_format = STS_MIXER_SAMPLE_FORMAT_16; + sample->length = (int)stb_vorbis_stream_length_in_samples(ogg); + stb_vorbis_close(ogg); + + short *buffer; + int sample_rate; + stb_vorbis_decode_memory((const unsigned char *)data, datalen, &channels, &sample_rate, (short **)&buffer); + sample->data = buffer; + } + ma_dr_mp3_config mp3_cfg = { 2, 44100 }; + ma_uint64 mp3_fc; + if( !channels ) for( short *fbuf = ma_dr_mp3_open_memory_and_read_pcm_frames_s16(data, datalen, &mp3_cfg, &mp3_fc, NULL); fbuf ; fbuf = 0 ) { + channels = mp3_cfg.channels; + sample->frequency = mp3_cfg.sampleRate; + sample->audio_format = STS_MIXER_SAMPLE_FORMAT_16; + sample->length = mp3_fc; // / sizeof(float) / mp3_cfg.channels; + sample->data = fbuf; + } + if( !channels ) { + short *output = 0; + int outputSize, hz, mp1channels; + bool ok = jo_read_mp1(data, datalen, &output, &outputSize, &hz, &mp1channels); + if( ok ) { + channels = mp1channels; + sample->frequency = hz; + sample->audio_format = STS_MIXER_SAMPLE_FORMAT_16; + sample->length = outputSize / sizeof(int16_t) / channels; + sample->data = output; // REALLOC(0, sample->length * sizeof(int16_t) * channels ); + // memcpy( sample->data, output, outputSize ); + } + } + + if( !channels ) { + return false; + } + + if( channels > 1 ) { + if( sample->audio_format == STS_MIXER_SAMPLE_FORMAT_FLOAT ) { + downsample_to_mono_flt( channels, sample->data, sample->length ); + sample->data = REALLOC( sample->data, sample->length * sizeof(float)); + } + else + if( sample->audio_format == STS_MIXER_SAMPLE_FORMAT_16 ) { + downsample_to_mono_s16( channels, sample->data, sample->length ); + sample->data = REALLOC( sample->data, sample->length * sizeof(short)); + } + else { + puts("error!"); // @fixme + } + } + + return true; +} + +// ----------------------------------------------------------------------------- + +static ma_device device; +static ma_context context; +static sts_mixer_t mixer; + +// This is the function that's used for sending more data to the device for playback. +static void audio_callback(ma_device* pDevice, void* pOutput, const void* pInput, ma_uint32 frameCount) { + int len = frameCount; + sts_mixer_mix_audio(&mixer, pOutput, len / (sizeof(int32_t) / 4)); + (void)pDevice; (void)pInput; + // return len / (sizeof(int32_t) / 4); +} + +void audio_drop(void) { + ma_device_stop(&device); + ma_device_uninit(&device); + ma_context_uninit(&context); +} + +int audio_init( int flags ) { + atexit(audio_drop); + + // init sts_mixer + sts_mixer_init(&mixer, 44100, STS_MIXER_SAMPLE_FORMAT_32); + + // The prioritization of backends can be controlled by the application. You need only specify the backends + // you care about. If the context cannot be initialized for any of the specified backends ma_context_init() + // will fail. + ma_backend backends[] = { +#if 1 + ma_backend_wasapi, // Higest priority. + ma_backend_dsound, + ma_backend_winmm, + ma_backend_coreaudio, + ma_backend_pulseaudio, + ma_backend_alsa, + ma_backend_oss, + ma_backend_jack, + ma_backend_opensl, + // ma_backend_webaudio, + // ma_backend_openal, + //ma_backend_sdl, + ma_backend_null // Lowest priority. +#else + // Highest priority + ma_backend_wasapi, // WASAPI | Windows Vista+ + ma_backend_dsound, // DirectSound | Windows XP+ + ma_backend_winmm, // WinMM | Windows XP+ (may work on older versions, but untested) + ma_backend_coreaudio, // Core Audio | macOS, iOS + ma_backend_pulseaudio, // PulseAudio | Cross Platform (disabled on Windows, BSD and Android) + ma_backend_alsa, // ALSA | Linux + ma_backend_oss, // OSS | FreeBSD + ma_backend_jack, // JACK | Cross Platform (disabled on BSD and Android) + ma_backend_opensl, // OpenSL ES | Android (API level 16+) + ma_backend_webaudio, // Web Audio | Web (via Emscripten) + ma_backend_sndio, // sndio | OpenBSD + ma_backend_audio4, // audio(4) | NetBSD, OpenBSD + ma_backend_aaudio, // AAudio | Android 8+ + ma_backend_custom, // Custom | Cross Platform + ma_backend_null, // Null | Cross Platform (not used on Web) + // Lowest priority +#endif + }; + + if (ma_context_init(backends, countof(backends), NULL, &context) != MA_SUCCESS) { + PRINTF("%s\n", "Failed to initialize audio context."); + return false; + } + + ma_device_config config = ma_device_config_init(ma_device_type_playback); // Or ma_device_type_capture or ma_device_type_duplex. + config.playback.pDeviceID = NULL; // &myPlaybackDeviceID; // Or NULL for the default playback device. + config.playback.format = ma_format_s32; + config.playback.channels = 2; + config.sampleRate = 44100; + config.dataCallback = (void*)audio_callback; //< @r-lyeh add void* cast + config.pUserData = NULL; + + if (ma_device_init(NULL, &config, &device) != MA_SUCCESS) { + printf("Failed to open playback device."); + ma_context_uninit(&context); + return false; + } + + (void)flags; + ma_device_start(&device); + return true; +} + +typedef struct audio_handle { + bool is_clip; + bool is_stream; + union { + sts_mixer_sample_t clip; + mystream_t stream; + }; +} audio_handle; + +static array(audio_handle*) audio_instances; + +audio_t audio_clip( const char *pathfile ) { + audio_handle *a = REALLOC(0, sizeof(audio_handle) ); + memset(a, 0, sizeof(audio_handle)); + a->is_clip = load_sample( &a->clip, pathfile ); + array_push(audio_instances, a); + return a; +} +audio_t audio_stream( const char *pathfile ) { + audio_handle *a = REALLOC(0, sizeof(audio_handle) ); + memset(a, 0, sizeof(audio_handle)); + a->is_stream = load_stream( &a->stream, pathfile ); + array_push(audio_instances, a); + return a; +} + + +static float volume_clip = 1, volume_stream = 1, volume_master = 1; +float audio_volume_clip(float gain) { + if( gain >= 0 && gain <= 1 ) volume_clip = gain * gain; + // patch all live clips + for(int i = 0, active = 0; i < STS_MIXER_VOICES; ++i) { + if(mixer.voices[i].state != STS_MIXER_VOICE_STOPPED) // is_active? + if( mixer.voices[i].sample ) // is_sample? + mixer.voices[i].gain = volume_clip; + } + return sqrt( volume_clip ); +} +float audio_volume_stream(float gain) { + if( gain >= 0 && gain <= 1 ) volume_stream = gain * gain; + // patch all live streams + for(int i = 0, active = 0; i < STS_MIXER_VOICES; ++i) { + if(mixer.voices[i].state != STS_MIXER_VOICE_STOPPED) // is_active? + if( mixer.voices[i].stream ) // is_stream? + mixer.voices[i].gain = volume_stream; + } + return sqrt( volume_stream ); +} +float audio_volume_master(float gain) { + if( gain >= 0 && gain <= 1 ) volume_master = gain * gain; + // patch global mixer + mixer.gain = volume_master; + return sqrt( volume_master ); +} +int audio_mute(int mute) { + static bool muted = 0; do_once muted = flag("--mute") || flag("--muted"); + if( mute >= 0 && mute <= 1 ) muted = mute; + return muted; +} +int audio_muted() { + return audio_mute(-1); +} + +int audio_play_gain_pitch_pan( audio_t a, int flags, float gain, float pitch, float pan ) { + if(audio_muted()) return 1; + + if( flags & AUDIO_IGNORE_MIXER_GAIN ) { + // do nothing, gain used as-is + } else { + // apply mixer gains on top + gain += a->is_clip ? volume_clip : volume_stream; + } + + if( flags & AUDIO_SINGLE_INSTANCE ) { + audio_stop( a ); + } + + // gain: [0..+1], pitch: (0..N], pan: [-1..+1] + + if( a->is_clip ) { + int voice = sts_mixer_play_sample(&mixer, &a->clip, gain, pitch, pan); + if( voice == -1 ) return 0; // all voices busy + } + if( a->is_stream ) { + int voice = sts_mixer_play_stream(&mixer, &a->stream.stream, gain); + if( voice == -1 ) return 0; // all voices busy + } + return 1; +} + +int audio_play_gain_pitch( audio_t a, int flags, float gain, float pitch ) { + return audio_play_gain_pitch_pan(a, flags, gain, pitch, 0); +} + +int audio_play_gain( audio_t a, int flags, float gain ) { + return audio_play_gain_pitch(a, flags, gain, 1.f); +} + +int audio_play( audio_t a, int flags ) { + return audio_play_gain(a, flags & ~AUDIO_IGNORE_MIXER_GAIN, 0.f); +} + +int audio_stop( audio_t a ) { + if( a->is_clip ) { + sts_mixer_stop_sample(&mixer, &a->clip); + } + if( a->is_stream ) { + sts_mixer_stop_stream(&mixer, &a->stream.stream); + reset_stream(&a->stream); + } + return 1; +} + +void audio_loop( audio_t a, bool loop ) { + if ( a->is_stream ) { + a->stream.loop = loop; + } +} + +bool audio_playing( audio_t a ) { + if( a->is_clip ) { + return !sts_mixer_sample_stopped(&mixer, &a->clip); + } + if( a->is_stream ) { + return !sts_mixer_stream_stopped(&mixer, &a->stream.stream); + } + return false; +} + +// ----------------------------------------------------------------------------- +// audio queue + +#ifndef AUDIO_QUEUE_BUFFERING_MS +#define AUDIO_QUEUE_BUFFERING_MS 50 // 10 // 100 +#endif +#ifndef AUDIO_QUEUE_MAX +#define AUDIO_QUEUE_MAX 2048 +#endif +#ifndef AUDIO_QUEUE_TIMEOUT +#define AUDIO_QUEUE_TIMEOUT ifdef(win32, THREAD_QUEUE_WAIT_INFINITE, 500) +#endif + +typedef struct audio_queue_t { + int cursor; + int avail; + unsigned flags; + char data[0]; +} audio_queue_t; + +static thread_queue_t queue_mutex; + +static void audio_queue_init() { + static void* audio_queues[AUDIO_QUEUE_MAX] = {0}; + do_once thread_queue_init(&queue_mutex, countof(audio_queues), audio_queues, 0); +} + +static bool audio_queue_callback(sts_mixer_sample_t* sample, void* userdata) { + (void)userdata; + + int sl = sample->length / 2; // 2 ch + int bytes = sl * 2 * (sample->audio_format == STS_MIXER_SAMPLE_FORMAT_16 ? 2 : 4); + char *dst = sample->data; + + static audio_queue_t *aq = 0; + + do { + while( !aq ) aq = (audio_queue_t*)thread_queue_consume(&queue_mutex, THREAD_QUEUE_WAIT_INFINITE); + + int len = aq->avail > bytes ? bytes : aq->avail; + memcpy(dst, (char*)aq->data + aq->cursor, len); + dst += len; + bytes -= len; + aq->cursor += len; + aq->avail -= len; + + if( aq->avail <= 0 ) { + FREE(aq); // @fixme: mattias' original thread_queue_consume() implementation crashes here on tcc+win because of a double free on same pointer. using mcmp for now + aq = 0; + } + } while( bytes > 0 ); + + return 1; +} + +static int audio_queue_voice = -1; +void audio_queue_clear() { + do_once audio_queue_init(); + sts_mixer_stop_voice(&mixer, audio_queue_voice); + audio_queue_voice = -1; +} +int audio_queue( const void *samples, int num_samples, int flags ) { + do_once audio_queue_init(); + + float gain = 1; // [0..1] + float pitch = 1; // (0..N] + float pan = 0; // [-1..1] + + int bits = flags & AUDIO_8 ? 8 : flags & (AUDIO_32|AUDIO_FLOAT) ? 32 : 16; + int channels = flags & AUDIO_2CH ? 2 : 1; + int bytes_per_sample = channels * (bits / 8); + int bytes = num_samples * bytes_per_sample; + + static sts_mixer_stream_t q = { 0 }; + if( audio_queue_voice < 0 ) { + void *reuse_ptr = q.sample.data; + q = ((sts_mixer_stream_t){0}); + q.sample.data = reuse_ptr; + + q.callback = audio_queue_callback; + q.sample.frequency = flags & AUDIO_8KHZ ? 8000 : flags & AUDIO_11KHZ ? 11025 : flags & AUDIO_44KHZ ? 44100 : flags & AUDIO_32KHZ ? 32000 : 22050; + q.sample.audio_format = flags & AUDIO_FLOAT ? STS_MIXER_SAMPLE_FORMAT_FLOAT : STS_MIXER_SAMPLE_FORMAT_16; + q.sample.length = q.sample.frequency / (1000 / AUDIO_QUEUE_BUFFERING_MS); // num_samples; + int bytes = q.sample.length * 2 * (flags & AUDIO_FLOAT ? 4 : 2); + q.sample.data = memset(REALLOC(q.sample.data, bytes), 0, bytes); + audio_queue_voice = sts_mixer_play_stream(&mixer, &q, gain * 1.f); + if( audio_queue_voice < 0 ) return 0; + } + + audio_queue_t *aq = MALLOC(sizeof(audio_queue_t) + (bytes << (channels == 1))); // dupe space if going to be converted from mono to stereo + aq->cursor = 0; + aq->avail = bytes; + aq->flags = flags; + if( !samples ) { + memset(aq->data, 0, bytes); + } else { + // @todo: convert from other source formats to target format in here: add AUDIO_8, AUDIO_32 + if( channels == 1 ) { + // mixer accepts stereo samples only; so resample mono to stereo if needed + for( int i = 0; i < num_samples; ++i ) { + memcpy((char*)aq->data + (i*2+0) * bytes_per_sample, (char*)samples + i * bytes_per_sample, bytes_per_sample ); + memcpy((char*)aq->data + (i*2+1) * bytes_per_sample, (char*)samples + i * bytes_per_sample, bytes_per_sample ); + } + } else { + memcpy(aq->data, samples, bytes); + } + } + + while( !thread_queue_produce(&queue_mutex, aq, THREAD_QUEUE_WAIT_INFINITE) ) {} + + return audio_queue_voice; +} + +int ui_audio() { + int changed = 0; + + float sfx = sqrt(volume_clip), bgm = sqrt(volume_stream), master = sqrt(volume_master); + if( ui_slider2("BGM volume", &bgm, va("%.2f", bgm))) changed = 1, audio_volume_stream(bgm); + if( ui_slider2("SFX volume", &sfx, va("%.2f", sfx))) changed = 1, audio_volume_clip(sfx); + if( ui_slider2("Master volume", &master, va("%.2f", master))) changed = 1, audio_volume_master(master); + + ui_separator(); + + int num_voices = sts_mixer_get_active_voices(&mixer); + ui_label2("Format", mixer.audio_format == 0 ? "None" : mixer.audio_format == 1 ? "8-bit" : mixer.audio_format == 2 ? "16-bit" : mixer.audio_format == 3 ? "32-bit integer" : "32-bit float"); + ui_label2("Frequency", va("%4.1f KHz", mixer.frequency / 1000.0)); + ui_label2("Voices", va("%d/%d", num_voices, STS_MIXER_VOICES)); + ui_separator(); + + for( int i = 0; i < STS_MIXER_VOICES; ++i ) { + if( mixer.voices[i].state != STS_MIXER_VOICE_STOPPED ) { // PLAYING || STREAMING + ui_label(va("Voice %d", i+1)); + + // float mul = mixer.voices[i].state == STS_MIXER_VOICE_STREAMING ? 2 : 1; + // float div = mixer.voices[i].state == STS_MIXER_VOICE_STREAMING ? mixer.voices[i].stream->sample.length : mixer.voices[i].sample->length; + // float pct = mixer.voices[i].position * mul / div; + // if(ui_slider2("Position", &pct, va("%5.2f", pct))) changed = 1; + if(ui_slider2("Gain", &mixer.voices[i].gain, va("%5.2f", mixer.voices[i].gain))) changed = 1; + if(ui_slider2("Pitch", &mixer.voices[i].pitch, va("%5.2f", mixer.voices[i].pitch))) changed = 1; + if(ui_slider2("Pan", &mixer.voices[i].pan, va("%5.2f", mixer.voices[i].pan))) changed = 1; + ui_separator(); + } + } + + return changed; +} #line 0 #line 1 "v4k_collide.c" -/* poly */ -poly poly_alloc(int cnt) { - poly p = {0}; - p.cnt = cnt; - p.verts = REALLOC(p.verts, sizeof(p.verts[0]) * cnt); // array_resize(p.verts, cnt); - return p; -} - -void poly_free(poly *p) { - REALLOC(p->verts, 0); // array_free(p->verts); - poly z = {0}; - *p = z; -} - -/* plane */ -vec4 plane4(vec3 p, vec3 n) { - return vec34(n, -dot3(n,p)); -} - -/* pyramid */ -poly pyramid(vec3 from, vec3 to, float size) { - /* calculate axis */ - vec3 up, right, forward = norm3( sub3(to, from) ); - ortho3(&right, &up, forward); - - /* calculate extend */ - vec3 xext = scale3(right, size); - vec3 yext = scale3(up, size); - vec3 nxext = scale3(right, -size); - vec3 nyext = scale3(up, -size); - - /* calculate base vertices */ - poly p = {0}; - p.verts = REALLOC(p.verts, sizeof(p.verts[0]) * (5+1)); p.cnt = 5; /*+1 for diamond case*/ // array_resize(p.verts, 5+1); p.cnt = 5; - p.verts[0] = add3(add3(from, xext), yext); /*a*/ - p.verts[1] = add3(add3(from, xext), nyext); /*b*/ - p.verts[2] = add3(add3(from, nxext), nyext); /*c*/ - p.verts[3] = add3(add3(from, nxext), yext); /*d*/ - p.verts[4] = to; /*r*/ - return p; -} - -/* pyramid */ -poly diamond(vec3 from, vec3 to, float size) { - vec3 mid = add3(from, scale3(sub3(to, from), 0.5f)); - poly p = pyramid(mid, to, size); - p.verts[5] = from; p.cnt = 6; - return p; -} - -// --- - -static void transform_(vec3 *r, vec3 v, const float *r33, vec3 t3) { - for (int i = 0; i < 3; ++i) { - i[&r->x] = i[&v.x] * r33[i*3+0]; - i[&r->x] += i[&v.x] * r33[i*3+1]; - i[&r->x] += i[&v.x] * r33[i*3+2]; - i[&r->x] += i[&t3.x]; - } -} -static void transformS(vec3 *v, const float *r33, vec3 t3) { - vec3 tmp = *v; - transform_(v, tmp, r33, t3); -} -static void transformT(vec3 *r, vec3 v, const float *r33, vec3 t3) { - for (int i = 0; i < 3; ++i) { - float p = i[&v.x] - i[&t3.x]; - i[&r->x] = p * r33[0*3+i]; - i[&r->x] += p * r33[1*3+i]; - i[&r->x] += p * r33[2*3+i]; - } -} -static void transformST(vec3 *v, const float *r33, vec3 t3) { - vec3 tmp = *v; - transformT(v, tmp, r33, t3); -} - -/* ============================================================================ - * - * COLLISION - * - * =========================================================================== */ - -static __thread hit hits[16] = {0}; -static __thread int hit_index = -1; -#define hit_next() &hits[ (++hit_index) & 15 ] - -static float line_closest_line_(float *t1, float *t2, vec3 *c1, vec3 *c2, line l, line m) { - vec3 r, d1, d2; - d1 = sub3(l.b, l.a); /* direction vector segment s1 */ - d2 = sub3(m.b, m.a); /* direction vector segment s2 */ - r = sub3(l.a, m.a); - - float i = dot3(d1, d1); - float e = dot3(d2, d2); - float f = dot3(d2, r); - - if (i <= C_EPSILON && e <= C_EPSILON) { - /* both segments degenerate into points */ - vec3 d12; - *t1 = *t2 = 0.0f; - *c1 = l.a; - *c2 = m.a; - d12 = sub3(*c1, *c2); - return dot3(d12,d12); - } - if (i > C_EPSILON) { - float c = dot3(d1,r); - if (e > C_EPSILON) { - /* non-degenerate case */ - float b = dot3(d1,d2); - float denom = i*e - b*b; - - /* compute closest point on L1/L2 if not parallel else pick any t2 */ - if (denom != 0.0f) - *t1 = clampf(0.0f, (b*f - c*e) / denom, 1.0f); - else *t1 = 0.0f; - - /* cmpute point on L2 closest to S1(s) */ - *t2 = (b*(*t1) + f) / e; - if (*t2 < 0.0f) { - *t2 = 0.0f; - *t1 = clampf(0.0f, -c/i, 1.0f); - } else if (*t2 > 1.0f) { - *t2 = 1.0f; - *t1 = clampf(0.0f, (b-c)/i, 1.0f); - } - } else { - /* second segment degenerates into a point */ - *t1 = clampf(0.0f, -c/i, 1.0f); - *t2 = 0.0f; - } - } else { - /* first segment degenerates into a point */ - *t2 = clampf(0.0f, f/e, 1.0f); - *t1 = 0.0f; - } - /* calculate closest points */ - vec3 n, d12; - n = scale3(d1, *t1); - *c1 = add3(l.a, n); - n = scale3(d2, *t2); - *c2 = add3(m.a, n); - - /* calculate squared distance */ - d12 = sub3(*c1, *c2); - return dot3(d12,d12); -} - -vec3 line_closest_point(line l, vec3 p) { - vec3 ab = sub3(l.b,l.a), pa = sub3(p,l.a); - float t = dot3(pa,ab) / dot3(ab,ab); - return add3(l.a, scale3(ab, t < 0 ? 0 : t > 1 ? 1 : t)); -} -float line_distance2_point(line l, vec3 p) { - vec3 ab = sub3(l.a,l.b), ap = sub3(l.a,p), bp = sub3(l.b,p); - /* handle cases p proj outside ab */ - float e = dot3(ap,ab); if (e <= 0) return dot3(ap,ap); - float f = dot3(ab,ab); if (e >= f) return dot3(bp,bp); - return dot3(ap,ap) - (e*e)/f; -} -float ray_test_plane(ray r, vec4 plane) { - /* Ray: P = origin + rd * t - * Plane: plane_normal * P + d = 0 - * - * Substitute: - * normal * (origin + rd*t) + d = 0 - * - * Solve for t: - * plane_normal * origin + plane_normal * rd*t + d = 0 - * -(plane_normal*rd*t) = plane_normal * origin + d - * - * plane_normal * origin + d - * t = -1 * ------------------------- - * plane_normal * rd - * - * Result: - * Behind: t < 0 - * Infront: t >= 0 - * Parallel: t = 0 - * Intersection point: ro + rd * t - */ - vec3 p = ptr3(&plane.x); - float n = -(dot3(p,r.p) + plane.w); - if (fabs(n) < 0.0001f) return 0.0f; - return n/(dot3(p,r.d)); -} -float ray_test_triangle(ray r, triangle tr) { - float t = 0; - vec3 di0, di1, di2; - vec3 d21, d02, in; - vec3 n, d10, d20; - vec3 in0, in1, in2; - - /* calculate triangle normal */ - d10 = sub3(tr.p1,tr.p0); - d20 = sub3(tr.p2,tr.p0); - d21 = sub3(tr.p2,tr.p1); - d02 = sub3(tr.p0,tr.p2); - n = cross3(d10,d20); - - /* check for plane intersection */ - vec4 p = plane4(tr.p0, n); - t = ray_test_plane(r, p); - if (t <= 0.0f) return t; - - /* intersection point */ - in = scale3(r.d,t); - in = add3(in,r.p); - - /* check if point inside triangle in plane */ - di0 = sub3(in, tr.p0); - di1 = sub3(in, tr.p1); - di2 = sub3(in, tr.p2); - - in0 = cross3(d10, di0); - in1 = cross3(d21, di1); - in2 = cross3(d02, di2); - - if (dot3(in0,n) < 0.0f) - return -1; - if (dot3(in1,n) < 0.0f) - return -1; - if (dot3(in2,n) < 0.0f) - return -1; - return t; -} -int ray_test_sphere(float *t0, float *t1, ray r, sphere s) { - vec3 a; - float tc,td,d2,r2; - a = sub3(s.c,r.p); - tc = dot3(r.d,a); - if (tc < 0) return 0; - - r2 = s.r*s.r; - d2 = dot3(a,a) - tc*tc; - if (d2 > r2) return 0; - td = sqrtf(r2 - d2); - - *t0 = tc - td; - *t1 = tc + td; - return 1; -} -int ray_test_aabb(float *t0, float *t1, ray r, aabb a) { - float t0x = (a.min.x - r.p.x) / r.d.x; - float t0y = (a.min.y - r.p.y) / r.d.y; - float t0z = (a.min.z - r.p.z) / r.d.z; - float t1x = (a.max.x - r.p.x) / r.d.x; - float t1y = (a.max.y - r.p.y) / r.d.y; - float t1z = (a.max.z - r.p.z) / r.d.z; - - float tminx = minf(t0x, t1x); - float tminy = minf(t0y, t1y); - float tminz = minf(t0z, t1z); - float tmaxx = maxf(t0x, t1x); - float tmaxy = maxf(t0y, t1y); - float tmaxz = maxf(t0z, t1z); - if (tminx > tmaxy || tminy > tmaxx) - return 0; - - *t0 = maxf(tminx, tminy); - *t1 = minf(tmaxy, tmaxx); - if (*t0 > tmaxz || tminz> *t1) - return 0; - - *t0 = maxf(*t0, tminz); - *t1 = minf(*t1, tmaxz); - return 1; -} -vec3 sphere_closest_point(sphere s, vec3 p) { - vec3 d = norm3(sub3(p, s.c)); - return add3(s.c, scale3(d,s.r)); -} -int sphere_test_sphere(sphere a, sphere b) { - vec3 d = sub3(b.c, a.c); - float r = a.r + b.r; - if (dot3(d,d) > r*r) - return 0; - return 1; -} -hit *sphere_hit_sphere(sphere a, sphere b) { - vec3 d = sub3(b.c, a.c); - float r = a.r + b.r; - float d2 = dot3(d,d); - if (d2 > r*r) return 0; - - hit *m = hit_next(); - float l = sqrtf(d2); - float linv = 1.0f / ((l != 0) ? l: 1.0f); - m->normal = scale3(d, linv); - m->depth = r - l; - d = scale3(m->normal, b.r); - m->contact_point = sub3(b.c, d); - return m; -} -int sphere_test_aabb(sphere s, aabb a) { - return aabb_test_sphere(a, s); -} -hit *sphere_hit_aabb(sphere s, aabb a) { - /* find closest aabb point to sphere center point */ - vec3 ap = aabb_closest_point(a, s.c); - vec3 d = sub3(s.c, ap); - float d2 = dot3(d, d); - if (d2 > s.r*s.r) return 0; - - hit *m = hit_next(); - /* calculate distance vector between sphere and aabb center points */ - vec3 ac = add3(a.min, scale3(sub3(a.max, a.min), 0.5f)); - d = sub3(ac, s.c); - - /* normalize distance vector */ - float l2 = dot3(d,d); - float l = l2 != 0.0f ? sqrtf(l2): 1.0f; - float linv = 1.0f/l; - d = scale3(d, linv); - - m->normal = d; - m->contact_point = scale3(m->normal, s.r); - m->contact_point = add3(s.c, m->contact_point); - - /* calculate penetration depth */ - vec3 sp = sphere_closest_point(s, ap); - d = sub3(sp, ap); - m->depth = sqrtf(dot3(d,d)) - l; - return m; -} -int sphere_test_capsule(sphere s, capsule c) { - return capsule_test_sphere(c, s); -} -hit *sphere_hit_capsule(sphere s, capsule c) { -#if 0 - // original code - /* find closest capsule point to sphere center point */ - hit *m = hit_next(); - vec3 cp = capsule_closest_point(c, s.c); - m->normal = sub3(cp, s.c); - float d2 = dot3(m->normal, m->normal); - if (d2 > s.r*s.r) return 0; - - /* normalize hit normal vector */ - m->normal = norm3(m->normal); - - /* calculate penetration depth */ - m->depth = d2 - s.r*s.r; - m->depth = m->depth != 0.0f ? sqrtf(m->depth): 0.0f; - m->contact_point = add3(s.c, scale3(m->normal, s.r)); - return m; -#else - // aproximation of I would expect this function to return instead - vec3 l = sub3(c.a,c.b); float len = len3(l); - vec3 d = norm3(l); - ray r = ray(add3(c.a,scale3(d,-2*len)), d); - s.r += c.r; - hit *h = ray_hit_sphere(r, s); - if(!h) return 0; - s.r -= c.r; - h->contact_point = add3(s.c,scale3(norm3(sub3(h->contact_point,s.c)),s.r)); - return h; -#endif -} -int sphere_test_poly(sphere s, poly p) { - return poly_test_sphere(p, s); -} -void aabb_rebalance_transform(aabb *b, aabb a, mat33 m, vec3 t) { - for (int i = 0; i < 3; ++i) { - i[&b->min.x] = i[&b->max.x] = i[&t.x]; - for (int j = 0; j < 3; ++j) { - float e = m[i*3+j] * j[&a.min.x]; - float f = m[i*3+j] * j[&a.max.x]; - if (e < f) { - i[&b->min.x] += e; - i[&b->max.x] += f; - } else { - i[&b->min.x] += f; - i[&b->max.x] += e; - } - } - } -} -vec3 aabb_closest_point(aabb a, vec3 p) { - vec3 res; - for (int i = 0; i < 3; ++i) { - float v = i[&p.x]; - if (v < i[&a.min.x]) v = i[&a.min.x]; - if (v > i[&a.max.x]) v = i[&a.max.x]; - i[&res.x] = v; - } - return res; -} -float aabb_distance2_point(aabb a, vec3 p) { - float r = 0; - for (int i = 0; i < 3; ++i) { - float v = i[&p.x]; - if (v < i[&a.min.x]) r += (i[&a.min.x]-v) * (i[&a.min.x]-v); - if (v > i[&a.max.x]) r += (v-i[&a.max.x]) * (v-i[&a.max.x]); - } return r; -} -int aabb_contains_point(aabb a, vec3 p) { - if (p.x < a.min.x || p.x > a.max.x) return 0; - if (p.y < a.min.y || p.y > a.max.y) return 0; - if (p.z < a.min.z || p.z > a.max.z) return 0; - return 1; -} -int aabb_test_aabb(aabb a, aabb b) { - if (a.max.x < b.min.x || a.min.x > b.max.x) return 0; - if (a.max.y < b.min.y || a.min.y > b.max.y) return 0; - if (a.max.z < b.min.z || a.min.z > b.max.z) return 0; - return 1; -} -hit *aabb_hit_aabb(aabb a, aabb b) { - if (!aabb_test_aabb(a, b)) - return 0; - - hit *m = hit_next(); - /* calculate distance vector between both aabb center points */ - vec3 ac, bc, d; - ac = sub3(a.max, a.min); - bc = sub3(b.max, b.min); - - ac = scale3(ac, 0.5f); - bc = scale3(bc, 0.5f); - - ac = add3(a.min, ac); - bc = add3(b.min, bc); - d = sub3(bc, ac); - - /* normalize distance vector */ - float l2 = dot3(d,d); - float l = l2 != 0.0f ? sqrtf(l2): 1.0f; - float linv = 1.0f/l; - d = scale3(d, linv); - - /* calculate contact point */ - m->normal = d; - m->contact_point = aabb_closest_point(a, bc); - d = sub3(m->contact_point, ac); - - /* calculate penetration depth */ - float r2 = dot3(d,d); - float r = sqrtf(r2); - m->depth = r - l; - return m; -} -int aabb_test_sphere(aabb a, sphere s) { - /* compute squared distance between sphere center and aabb */ - float d2 = aabb_distance2_point(a, s.c); - /* intersection if distance is smaller/equal sphere radius*/ - return d2 <= s.r*s.r; -} -hit *aabb_hit_sphere(aabb a, sphere s) { - /* find closest aabb point to sphere center point */ - hit *m = hit_next(); - m->contact_point = aabb_closest_point(a, s.c); - vec3 d = sub3(s.c, m->contact_point); - float d2 = dot3(d, d); - if (d2 > s.r*s.r) return 0; - - /* calculate distance vector between aabb and sphere center points */ - vec3 ac = add3(a.min, scale3(sub3(a.max, a.min), 0.5f)); - d = sub3(s.c, ac); - - /* normalize distance vector */ - float l2 = dot3(d,d); - float l = l2 != 0.0f ? sqrtf(l2): 1.0f; - float linv = 1.0f/l; - d = scale3(d, linv); - - /* calculate penetration depth */ - m->normal = d; - d = sub3(m->contact_point, ac); - m->depth = sqrtf(dot3(d,d)); - return m; -} -int aabb_test_capsule(aabb a, capsule c) { - return capsule_test_aabb(c, a); -} -hit *aabb_hit_capsule(aabb a, capsule c) { - /* calculate aabb center point */ - vec3 ac = add3(a.min, scale3(sub3(a.max, a.min), 0.5f)); - - /* calculate closest point from aabb to point on capsule and check if inside aabb */ - vec3 cp = capsule_closest_point(c, ac); - if (!aabb_contains_point(a, cp)) - return 0; - - hit *m = hit_next(); - /* vector and distance between both capsule closests point and aabb center*/ - vec3 d; float d2; - d = sub3(cp, ac); - d2 = dot3(d,d); - - /* calculate penetration depth from closest aabb point to capsule */ - vec3 ap = aabb_closest_point(a, cp); - vec3 dt = sub3(ap, cp); - m->depth = sqrtf(dot3(dt,dt)); - - /* calculate normal */ - float l = sqrtf(d2); - float linv = 1.0f / ((l != 0.0f) ? l: 1.0f); - m->normal = scale3(d, linv); - m->contact_point = ap; - return m; -} -int aabb_test_poly(aabb a, poly p) { - return poly_test_aabb(p, a); -} -float capsule_distance2_point(capsule c, vec3 p) { - float d2 = line_distance2_point(line(c.a,c.b), p); - return d2 - (c.r*c.r); -} -vec3 capsule_closest_point(capsule c, vec3 p) { - /* calculate closest point to internal capsule segment */ - vec3 pp = line_closest_point(line(c.a,c.b), p); - - /* extend point out by radius in normal direction */ - vec3 d = norm3(sub3(p,pp)); - return add3(pp, scale3(d, c.r)); -} -int capsule_test_capsule(capsule a, capsule b) { - float t1, t2; - vec3 c1, c2; - float d2 = line_closest_line_(&t1, &t2, &c1, &c2, line(a.a,a.b), line(b.a,b.b)); - float r = a.r + b.r; - return d2 <= r*r; -} -hit *capsule_hit_capsule(capsule a, capsule b) { - float t1, t2; - vec3 c1, c2; - float d2 = line_closest_line_(&t1, &t2, &c1, &c2, line(a.a,a.b), line(b.a,b.b)); - float r = a.r + b.r; - if (d2 > r*r) return 0; - - hit *m = hit_next(); - /* calculate normal from both closest points for each segement */ - vec3 cp, d; - m->normal = sub3(c2, c1); - m->normal = norm3(m->normal); - - /* calculate contact point from closest point and depth */ - m->contact_point = capsule_closest_point(a, c2); - cp = capsule_closest_point(b, c1); - d = sub3(c1, cp); - m->depth = sqrtf(dot3(d,d)); - return m; -} -int capsule_test_sphere(capsule c, sphere s) { - /* squared distance bwetween sphere center and capsule line segment */ - float d2 = line_distance2_point(line(c.a,c.b), s.c); - float r = s.r + c.r; - return d2 <= r * r; -} -hit *capsule_hit_sphere(capsule c, sphere s) { - /* find closest capsule point to sphere center point */ - hit *m = hit_next(); - m->contact_point = capsule_closest_point(c, s.c); - m->normal = sub3(s.c, m->contact_point); - float d2 = dot3(m->normal, m->normal); - if (d2 > s.r*s.r) return 0; - - /* normalize hit normal vector */ - float l = d2 != 0.0f ? sqrtf(d2): 1; - float linv = 1.0f/l; - m->normal = scale3(m->normal, linv); - - /* calculate penetration depth */ - m->depth = d2 - s.r*s.r; - m->depth = m->depth != 0.0f ? sqrtf(m->depth): 0.0f; - return m; -} -int capsule_test_aabb(capsule c, aabb a) { - /* calculate aabb center point */ - vec3 ac = scale3(sub3(a.max, a.min), 0.5f); - - /* calculate closest point from aabb to point on capsule and check if inside aabb */ - vec3 p = capsule_closest_point(c, ac); - return aabb_contains_point(a, p); -} -hit *capsule_hit_aabb(capsule c, aabb a) { - /* calculate aabb center point */ - vec3 ac = add3(a.min, scale3(sub3(a.max, a.min), 0.5f)); - - /* calculate closest point from aabb to point on capsule and check if inside aabb */ - vec3 cp = capsule_closest_point(c, ac); - if (!aabb_contains_point(a, cp)) - return 0; - - hit *m = hit_next(); - /* vector and distance between both capsule closests point and aabb center*/ - vec3 d; float d2; - d = sub3(ac, cp); - d2 = dot3(d,d); - - /* calculate penetration depth from closest aabb point to capsule */ - vec3 ap = aabb_closest_point(a, cp); - vec3 dt = sub3(ap, cp); - m->depth = sqrtf(dot3(dt,dt)); - - /* calculate normal */ - float l = sqrtf(d2); - float linv = 1.0f / ((l != 0.0f) ? l: 1.0f); - m->normal = scale3(d, linv); - m->contact_point = cp; - return m; -} -int capsule_test_poly(capsule c, poly p) { - return poly_test_capsule(p, c); -} -int line_support(vec3 *support, vec3 d, vec3 a, vec3 b) { - int i = 0; - float adot = dot3(a, d); - float bdot = dot3(b, d); - if (adot < bdot) { - *support = b; - i = 1; - } else *support = a; - return i; -} -int poly_support(vec3 *support, vec3 d, poly p) { - int imax = 0; - float dmax = dot3(*p.verts, d); - for (int i = 1; i < p.cnt; ++i) { - /* find vertex with max dot product in direction d */ - float dot = dot3(p.verts[i], d); - if (dot < dmax) continue; - imax = i, dmax = dot; - } *support = p.verts[imax]; - return imax; -} -int poly_hit_sphere(struct gjk_result *res, - poly p, - sphere s) { - /* initial guess */ - vec3 d = {0}; - gjk_support gs = {0}; - gs.a = *p.verts; - gs.b = s.c; - d = sub3(gs.b, gs.a); - - /* run gjk algorithm */ - gjk_simplex gsx = {0}; - while (gjk(&gsx, &gs, &d)) { - vec3 n = scale3(d, -1); - gs.aid = poly_support(&gs.a, n, p); - d = sub3(gs.b, gs.a); - } - /* check distance between closest points */ - *res = gjk_analyze(&gsx); - return res->distance_squared <= s.r*s.r; -} -int poly_hit_sphere_transform(struct gjk_result *res, poly p, vec3 pos3, mat33 rot33, sphere s) { - /* initial guess */ - vec3 d = {0}; - gjk_support gs = {0}; - gs.a = *p.verts; - gs.b = s.c; - transformS(&gs.a, rot33, pos3); - d = sub3(gs.b, gs.a); - - /* run gjk algorithm */ - gjk_simplex gsx = {0}; - while (gjk(&gsx, &gs, &d)) { - vec3 n = scale3(d, -1); - vec3 da; transformT(&da, n, rot33, pos3); - - gs.aid = poly_support(&gs.a, da, p); - transformS(&gs.a, rot33, pos3); - d = sub3(gs.b, gs.a); - } - /* check distance between closest points */ - *res = gjk_analyze(&gsx); - return res->distance_squared <= s.r*s.r; -} -int poly_test_sphere(poly p, sphere s) { - struct gjk_result res; - return poly_hit_sphere(&res, p, s); -} -int poly_test_sphere_transform(poly p, vec3 pos3, mat33 rot33, sphere s) { - struct gjk_result res; - return poly_hit_sphere_transform(&res, p, pos3, rot33, s); -} -int poly_hit_capsule(struct gjk_result *res, poly p, capsule c) { - /* initial guess */ - vec3 d = {0}; - gjk_support s = {0}; - s.a = *p.verts; - s.b = c.a; - d = sub3(s.b, s.a); - - /* run gjk algorithm */ - gjk_simplex gsx = {0}; - while (gjk(&gsx, &s, &d)) { - vec3 n = scale3(d, -1); - s.aid = poly_support(&s.a, n, p); - s.bid = line_support(&s.b, d, c.a, c.b); - d = sub3(s.b, s.a); - } - /* check distance between closest points */ - assert(gsx.iter < gsx.max_iter); - *res = gjk_analyze(&gsx); - return res->distance_squared <= c.r*c.r; -} -int poly_test_capsule(poly p, capsule c) { - struct gjk_result res; - return poly_hit_capsule(&res, p, c); -} -int poly_hit_capsule_transform(struct gjk_result *res, poly p, vec3 pos3, mat33 rot33, capsule c) { - /* initial guess */ - vec3 d = {0}; - gjk_support gs = {0}; - gs.a = *p.verts; - gs.b = c.a; - transformS(&gs.a, rot33, pos3); - d = sub3(gs.b, gs.a); - - /* run gjk algorithm */ - gjk_simplex gsx = {0}; - while (gjk(&gsx, &gs, &d)) { - vec3 n = scale3(d, -1); - vec3 da; transformT(&da, n, rot33, pos3); - - gs.aid = poly_support(&gs.a, da, p); - gs.bid = line_support(&gs.b, d, c.a, c.b); - transformS(&gs.a, rot33, pos3); - d = sub3(gs.b, gs.a); - } - /* check distance between closest points */ - *res = gjk_analyze(&gsx); - return res->distance_squared <= c.r*c.r; -} -int poly_test_capsule_transform(poly p, vec3 pos3, mat33 rot33, capsule c) { - struct gjk_result res; - return poly_hit_capsule_transform(&res, p, pos3, rot33, c); -} -int poly_hit_poly_transform(struct gjk_result *res, - poly a, vec3 at3, mat33 ar33, - poly b, vec3 bt3, mat33 br33) { - /* initial guess */ - vec3 d = {0}; - gjk_support gs = {0}; - gs.a = *a.verts; - gs.b = *b.verts; - transformS(&gs.a, ar33, at3); - transformS(&gs.b, br33, bt3); - d = sub3(gs.b, gs.a); - - /* run gjk algorithm */ - gjk_simplex gsx = {0}; - while (gjk(&gsx, &gs, &d)) { - /* transform direction */ - vec3 n = scale3(d, -1); - vec3 da; transformT(&da, n, ar33, at3); - vec3 db; transformT(&db, d, br33, bt3); - /* run support function on tranformed directions */ - gs.aid = poly_support(&gs.a, da, a); - gs.bid = poly_support(&gs.b, db, b); - /* calculate distance vector on transformed points */ - transformS(&gs.a, ar33, at3); - transformS(&gs.b, br33, bt3); - d = sub3(gs.b, gs.a); - } - *res = gjk_analyze(&gsx); - return gsx.hit; -} -int poly_hit_poly(struct gjk_result *res, - poly a, - poly b) { - /* initial guess */ - vec3 d = {0}; - gjk_support gs = {0}; - gs.a = *a.verts; - gs.b = *b.verts; - d = sub3(gs.b, gs.a); - - /* run gjk algorithm */ - gjk_simplex gsx = {0}; - while (gjk(&gsx, &gs, &d)) { - vec3 n = scale3(d, -1); - gs.aid = poly_support(&gs.a, n, a); - gs.bid = poly_support(&gs.b, d, b); - d = sub3(gs.b, gs.a); - } - *res = gjk_analyze(&gsx); - return gsx.hit; -} -int poly_test_poly(poly a, poly b) { - struct gjk_result res; - return poly_hit_poly(&res, a, b); -} -int poly_test_poly_transform(poly a, vec3 apos3, mat33 arot33, - poly b, vec3 bpos3, mat33 brot33) { - struct gjk_result res; - return poly_hit_poly_transform(&res, a, apos3, arot33, b, bpos3, brot33); -} -int poly_hit_aabb(struct gjk_result *res, poly p, aabb a) { - vec3 box[8]; - box[0] = vec3(a.min.x, a.min.y, a.min.z), - box[1] = vec3(a.min.x, a.min.y, a.max.z); - box[2] = vec3(a.min.x, a.max.y, a.min.z); - box[3] = vec3(a.min.x, a.max.y, a.max.z); - box[4] = vec3(a.max.x, a.min.y, a.min.z); - box[5] = vec3(a.max.x, a.min.y, a.max.z); - box[6] = vec3(a.max.x, a.max.y, a.min.z); - box[7] = vec3(a.max.x, a.max.y, a.max.z); - return poly_hit_poly(res, p, poly(&box[0], 8)); -} -int poly_hit_aabb_transform(struct gjk_result *res, poly p, vec3 pos3, mat33 rot33, aabb a) { - vec3 zero = {0}; - vec3 id[3] = {{1,0,0},{0,1,0},{0,0,1}}; - vec3 box[8]; - box[0] = vec3(a.min.x, a.min.y, a.min.z), - box[1] = vec3(a.min.x, a.min.y, a.max.z); - box[2] = vec3(a.min.x, a.max.y, a.min.z); - box[3] = vec3(a.min.x, a.max.y, a.max.z); - box[4] = vec3(a.max.x, a.min.y, a.min.z); - box[5] = vec3(a.max.x, a.min.y, a.max.z); - box[6] = vec3(a.max.x, a.max.y, a.min.z); - box[7] = vec3(a.max.x, a.max.y, a.max.z); - return poly_hit_poly_transform(res, p, pos3, rot33, poly(&box[0], 8), zero, id[0].v3); -} -int poly_test_aabb(poly p, aabb a) { - struct gjk_result res; - return poly_hit_aabb(&res, p, a); -} -int poly_test_aabb_transform(poly p, vec3 apos3, mat33 arot33, aabb a) { - struct gjk_result res; - return poly_hit_aabb_transform(&res, p, apos3, arot33, a); -} - -/* ============================================================================ - * - * COLLISION VOLUME - * - * =========================================================================== */ - -hit *ray_hit_plane(ray r, plane p) { - vec4 pf = plane4(p.p, p.n); - float t = ray_test_plane(r, pf); - if (t <= 0.0f) return 0; - hit *o = hit_next(); - o->p = add3(r.p, scale3(r.d, t)); - o->t0 = o->t1 = t; - o->n = scale3(p.n, -1.0f); - return o; -} -hit *ray_hit_triangle(ray r, triangle tr) { - float t = ray_test_triangle(r, tr); - if (t <= 0) return 0; - - hit *o = hit_next(); - o->t0 = o->t1 = t; - o->p = add3(r.p, scale3(r.d, t)); - o->n = norm3(cross3(sub3(tr.p1,tr.p0),sub3(tr.p2,tr.p0))); - return o; -} -hit *ray_hit_sphere(ray r, sphere s) { - hit *o = hit_next(); - if (!ray_test_sphere(&o->t0, &o->t1, r, s)) - return 0; - o->p = add3(r.p, scale3(r.d, minf(o->t0,o->t1))); - o->n = norm3(sub3(o->p, s.c)); - return o; -} -hit *ray_hit_aabb(ray r, aabb a) { - hit *o = hit_next(); - - vec3 pnt, ext, c; - float d, min; - if (!ray_test_aabb(&o->t0, &o->t1, r, a)) - return 0; - - o->p = add3(r.p, scale3(r.d, minf(o->t0,o->t1))); - ext = sub3(a.max, a.min); - c = add3(a.min, scale3(ext,0.5f)); - pnt = sub3(o->p, c); - - min = fabs(ext.x - fabs(pnt.x)); - o->n = scale3(vec3(1,0,0), signf(pnt.x)); - d = fabs(ext.y - fabs(pnt.y)); - if (d < min) { - min = d; - o->n = scale3(vec3(0,1,0), signf(pnt.y)); - } - d = fabs(ext.z - fabs(pnt.z)); - if (d < min) - o->n = scale3(vec3(0,0,1), signf(pnt.z)); - return o; -} - -frustum frustum_build(mat44 pv) { - frustum f; - f.l = vec4(pv[ 3]+pv[ 0], pv[ 7]+pv[ 4], pv[11]+pv[ 8], pv[15]+pv[12]); - f.r = vec4(pv[ 3]-pv[ 0], pv[ 7]-pv[ 4], pv[11]-pv[ 8], pv[15]-pv[12]); - f.t = vec4(pv[ 3]-pv[ 1], pv[ 7]-pv[ 5], pv[11]-pv[ 9], pv[15]-pv[13]); - f.b = vec4(pv[ 3]+pv[ 1], pv[ 7]+pv[ 5], pv[11]+pv[ 9], pv[15]+pv[13]); - f.n = vec4(pv[ 3]+pv[ 2], pv[ 7]+pv[ 6], pv[11]+pv[10], pv[15]+pv[14]); - f.f = vec4(pv[ 3]-pv[ 2], pv[ 7]-pv[ 6], pv[11]-pv[10], pv[15]-pv[14]); - for (int i = 0; i < 6; i++) f.pl[i] = scale4(f.pl[i], 1 / len3(f.pl[i].xyz)); - return f; -} -int frustum_test_sphere(frustum f, sphere s) { - for(int i = 0; i < 6; i++) { - if((dot3(f.pl[i].xyz, s.c) + f.pl[i].w + s.r) < 0) return 0; - } - return 1; -} -int frustum_test_aabb(frustum f, aabb a) { - for(int i = 0; i < 6; i++) { - vec3 v = vec3(f.pl[i].x > 0 ? a.max.x : a.min.x, f.pl[i].y > 0 ? a.max.y : a.min.y, f.pl[i].z > 0 ? a.max.z : a.min.z); - if((dot3(f.pl[i].xyz, v) + f.pl[i].w) < 0) return 0; - } - return 1; -} - -void collide_demo() { // debug draw collisions // @fixme: fix leaks: poly_free() - - // animation - static float dx = 0, dy = 0; - float delta = (0.25f / 60.f); - dx = dx + delta * 2.0f; - dy = dy + delta * 0.8f; - -#if 0 - // 3D - glEnable(GL_DEPTH_TEST); - - // grid - ddraw_grid(0); -#endif - - { - // Triangle-Ray Intersection*/ - vec3 ro, rd; - int suc; - - triangle tri = { vec3(-9,1,28), vec3(-10,0,28), vec3(-11,1,28) }; - - // ray - ro = vec3(-10,-1,20); - rd = vec3(-10+0.4f*sin(dx), 2.0f*cos(dy), 29.81023f); - rd = sub3(rd, ro); - rd = norm3(rd); - - ray r = ray(ro, rd); - hit *hit = ray_hit_triangle(r, tri); - if (hit) { - // point of intersection - ddraw_color(RED); - ddraw_box(hit->p, vec3(0.10f, 0.10f, 0.10f)); - - // intersection normal - ddraw_color(BLUE); - vec3 v = add3(hit->p, hit->n); - ddraw_arrow(hit->p, v); - } - - // line - ddraw_color(RED); - rd = scale3(rd,10); - rd = add3(ro,rd); - ddraw_line(ro, rd); - - // triangle - if (hit) ddraw_color(RED); - else ddraw_color(WHITE); - ddraw_triangle(tri.p0,tri.p1,tri.p2); - } - { - // Plane-Ray Intersection*/ - vec3 ro, rd; - mat33 rot; - - // ray - static float d = 0; - d += delta * 2.0f; - ro = vec3(0,-1,20); - rd = vec3(0.1f, 0.5f, 9.81023f); - rd = sub3(rd, ro); - rd = norm3(rd); - - // rotation - rotation33(rot, deg(d), 0,1,0); - rd = mulv33(rot, rd); - - // intersection - ray r = ray(ro, rd); - plane pl = plane(vec3(0,0,28), vec3(0,0,1)); - hit *hit = ray_hit_plane(r, pl); - if (hit) { - // point of intersection - ddraw_color(RED); - ddraw_box(hit->p, vec3(0.10f, 0.10f, 0.10f)); - - // intersection normal - ddraw_color(BLUE); - vec3 v = add3(hit->p, hit->n); - ddraw_arrow(hit->p, v); - ddraw_color(RED); - } - // line - ddraw_color(RED); - rd = scale3(rd,9); - rd = add3(ro,rd); - ddraw_line(ro, rd); - - // plane - if (hit) ddraw_color(RED); - else ddraw_color(WHITE); - ddraw_plane(vec3(0,0,28), vec3(0,0,1), 3.0f); - } - { - // Sphere-Ray Intersection*/ - vec3 ro, rd; - sphere s; - - // ray - ro = vec3(0,-1,0); - rd = vec3(0.4f*sin(dx), 2.0f*cos(dy), 9.81023f); - rd = sub3(rd, ro); - rd = norm3(rd); - - ray r = ray(ro, rd); - s = sphere(vec3(0,0,8), 1); - hit *hit = ray_hit_sphere(r, s); - if(hit) { - // points of intersection - vec3 in = add3(ro,scale3(rd,hit->t0)); - - ddraw_color(GREEN); - ddraw_box(in, vec3(0.05f, 0.05f, 0.05f)); - - in = add3(ro,scale3(rd,hit->t1)); - - ddraw_color(YELLOW); - ddraw_box(in, vec3(0.05f, 0.05f, 0.05f)); - - // intersection normal - ddraw_color(BLUE); - vec3 v = add3(hit->p, hit->n); - ddraw_arrow(hit->p, v); - ddraw_color(RED); - } - // line - ddraw_color(RED); - rd = scale3(rd,10); - rd = add3(ro,rd); - ddraw_line(ro, rd); - - // sphere - if (hit) ddraw_color(RED); - else ddraw_color(WHITE); - ddraw_sphere(vec3(0,0,8), 1); - } - { // ray-aabb - aabb bounds = aabb(vec3(10-0.5f,-0.5f,7.5f), vec3(10.5f,0.5f,8.5f)); - - vec3 ro = vec3(10,-1,0); - vec3 rd = vec3(10+0.4f*sin(dx), 2.0f*cos(dy), 9.81023f); - rd = norm3(sub3(rd, ro)); - ray r = ray(ro, rd); - - hit *hit = ray_hit_aabb(r, bounds); - if(hit) { - // points of intersection - vec3 in; - in = scale3(rd,hit->t0); - in = add3(ro,in); - - ddraw_color(RED); - ddraw_box(in, vec3(0.05f, 0.05f, 0.05f)); - - in = scale3(rd,hit->t1); - in = add3(ro,in); - - ddraw_color(RED); - ddraw_box(in, vec3(0.05f, 0.05f, 0.05f)); - - // intersection normal - ddraw_color(BLUE); - vec3 v = add3(hit->p, hit->n); - ddraw_arrow(hit->p, v); - ddraw_color(RED); - } else ddraw_color(WHITE); - ddraw_box(vec3(10,0,8), vec3(1,1,1)); - - // line - ddraw_color(RED); - rd = scale3(rd,10); - rd = add3(ro,rd); - ddraw_line(ro, rd); - } - { - // Sphere-Sphere intersection*/ - sphere a = sphere(vec3(-10,0,8), 1); - sphere b = sphere(vec3(-10+0.6f*sin(dx), 3.0f*cos(dy),8), 1); - hit *m = sphere_hit_sphere(a, b); - if (m) { - vec3 v; - ddraw_color(BLUE); - ddraw_box(m->contact_point, vec3(0.05f, 0.05f, 0.05f)); - v = add3(m->contact_point, m->normal); - ddraw_arrow(m->contact_point, v); - ddraw_color(RED); - } else ddraw_color(WHITE); - - ddraw_sphere(a.c, 1); - ddraw_sphere(b.c, 1); - } - { - // AABB-AABB intersection*/ - const float x = 10+0.6f*sin(dx); - const float y = 3.0f*cos(dy); - const float z = 20.0f; - - aabb a = aabb(vec3(10-0.5f,-0.5f,20-0.5f), vec3(10+0.5f,0.5f,20.5f)); - aabb b = aabb(vec3(x-0.5f,y-0.5f,z-0.5f), vec3(x+0.5f,y+0.5f,z+0.5f)); - hit *m = aabb_hit_aabb(a, b); - if(m) { - vec3 v; - ddraw_color(BLUE); - ddraw_box(m->contact_point, vec3(0.05f, 0.05f, 0.05f)); - v = add3(m->contact_point, m->normal); - ddraw_arrow(m->contact_point, v); - ddraw_color(RED); - } else ddraw_color(WHITE); - - ddraw_box(vec3(10,0,20), vec3(1,1,1)); - ddraw_box(vec3(x,y,z), vec3(1,1,1)); - } - { - // Capsule-Capsule intersection*/ - const float x = 20+0.4f*sin(dx); - const float y = 3.0f*cos(dy); - const float z = 28.5f; - - capsule a = capsule(vec3(20.0f,-1.0f,28.0f), vec3(20.0f,1.0f,28.0f), 0.2f); - capsule b = capsule(vec3(x,y-1.0f,z), vec3(x,y+1.0f,z-1.0f), 0.2f); - hit *m = capsule_hit_capsule(a, b); - if( m ) { - vec3 v; - ddraw_color(BLUE); - ddraw_box(m->contact_point, vec3(0.05f, 0.05f, 0.05f)); - v = add3(m->contact_point, m->normal); - ddraw_arrow(m->contact_point, v); - ddraw_color(RED); - } else ddraw_color(WHITE); - ddraw_capsule(vec3(x,y-1.0f,z), vec3(x,y+1.0f,z-1.0f), 0.2f); - ddraw_capsule(vec3(20.0f,-1.0f,28.0f), vec3(20.0f,1.0f,28.0f), 0.2f); - } - { - // AABB-Sphere intersection*/ - aabb a = aabb(vec3(20-0.5f,-0.5f,7.5f), vec3(20.5f,0.5f,8.5f)); - sphere s = sphere(vec3(20+0.6f*sin(dx), 3.0f*cos(dy),8), 1); - hit *m = aabb_hit_sphere(a, s); - if(m) { - vec3 v; - ddraw_color(BLUE); - ddraw_box(m->contact_point, vec3(0.05f, 0.05f, 0.05f)); - v = add3(m->contact_point, m->normal); - ddraw_arrow(m->contact_point, v); - ddraw_color(RED); - } else ddraw_color(WHITE); - - ddraw_box(vec3(20,0,8), vec3(1,1,1)); - ddraw_sphere(s.c, 1); - } - { - // Sphere-AABB intersection*/ - const float x = 10+0.6f*sin(dx); - const float y = 3.0f*cos(dy); - const float z = -8.0f; - - sphere s = sphere(vec3(10,0,-8), 1); - aabb a = aabb(vec3(x-0.5f,y-0.5f,z-0.5f), vec3(x+0.5f,y+0.5f,z+0.5f)); - hit *m = sphere_hit_aabb(s, a); - if(m) { - vec3 v; - ddraw_color(BLUE); - ddraw_box(m->contact_point, vec3(0.05f, 0.05f, 0.05f)); - v = add3(m->contact_point, m->normal); - ddraw_arrow(m->contact_point, v); - ddraw_color(RED); - } else ddraw_color(WHITE); - - ddraw_box(vec3(x,y,z), vec3(1,1,1)); - ddraw_sphere(s.c, 1); - } - { - // Capsule-Sphere intersection*/ - capsule c = capsule(vec3(-20.5f,-1.0f,7.5f), vec3(-20+0.5f,1.0f,8.5f), 0.2f); - sphere b = sphere(vec3(-20+0.6f*sin(dx), 3.0f*cos(dy),8), 1); - hit *m = capsule_hit_sphere(c, b); - if(m) { - vec3 v; - ddraw_color(BLUE); - ddraw_box(m->contact_point, vec3(0.05f, 0.05f, 0.05f)); - v = add3(m->contact_point, m->normal); - ddraw_arrow(m->contact_point, v); - ddraw_color(RED); - } else ddraw_color(WHITE); - ddraw_sphere(b.c, 1); - ddraw_capsule(vec3(-20.5f,-1.0f,7.5f), vec3(-20+0.5f,1.0f,8.5f), 0.2f); - } - { - // Sphere-Capsule intersection*/ - const float x = 20+0.4f*sin(dx); - const float y = 3.0f*cos(dy); - const float z = -8; - - sphere s = sphere(vec3(20,0,-8), 1); - capsule c = capsule(vec3(x,y-1.0f,z), vec3(x,y+1.0f,z-1.0f), 0.2f); - hit *m = sphere_hit_capsule(s, c); - if(m) { - vec3 v; - ddraw_color(BLUE); - ddraw_box(m->contact_point, vec3(0.05f, 0.05f, 0.05f)); - v = add3(m->contact_point, m->normal); - ddraw_arrow(m->contact_point, v); - ddraw_color(RED); - } else ddraw_color(WHITE); - - ddraw_capsule(vec3(x,y-1.0f,z), vec3(x,y+1.0f,z-1.0f), 0.2f); - ddraw_sphere(s.c, 1); - } - { - // Capsule-AABB intersection*/ - const float x = -20+0.6f*sin(dx); - const float y = 3.0f*cos(dy); - const float z = 28.0f; - - capsule c = capsule(vec3(-20.5f,-1.0f,27.5f), vec3(-20+0.5f,1.0f,28.5f), 0.2f); - aabb b = aabb(vec3(x-0.5f,y-0.5f,z-0.5f), vec3(x+0.5f,y+0.5f,z+0.5f)); - hit *m = capsule_hit_aabb(c, b); - if(m) { - vec3 v; - ddraw_color(BLUE); - ddraw_box(m->contact_point, vec3(0.05f, 0.05f, 0.05f)); - v = add3(m->contact_point, m->normal); - ddraw_arrow(m->contact_point, v); - ddraw_color(RED); - } else ddraw_color(WHITE); - ddraw_box(vec3(x,y,z), vec3(1,1,1)); - ddraw_capsule(vec3(-20.5f,-1.0f,27.5f), vec3(-20+0.5f,1.0f,28.5f), 0.2f); - } - { - // AABB-Capsule intersection*/ - const float x = 0.4f*sin(dx); - const float y = 3.0f*cos(dy); - const float z = -8; - - aabb a = aabb(vec3(-0.5f,-0.5f,-8.5f), vec3(0.5f,0.5f,-7.5f)); - capsule c = capsule(vec3(x,y-1.0f,z), vec3(x,y+1.0f,z-1.0f), 0.2f); - hit *m = aabb_hit_capsule(a, c); - if(m) { - ddraw_color(RED); - ddraw_box(m->contact_point, vec3(0.05f, 0.05f, 0.05f)); - ddraw_arrow(m->contact_point, add3(m->contact_point, m->normal)); - } else ddraw_color(WHITE); - - ddraw_capsule(vec3(x,y-1.0f,z), vec3(x,y+1.0f,z-1.0f), 0.2f); - ddraw_box(vec3(0,0,-8.0f), vec3(1,1,1)); - } - { - // poly(Pyramid)-Sphere (GJK) intersection*/ - sphere s = sphere(vec3(-10+0.6f*sin(dx), 3.0f*cos(dy),-8), 1); - poly pyr = pyramid(vec3(-10.5f,-0.5f,-7.5f), vec3(-10.5f,1.0f,-7.5f), 1.0f); - - gjk_result gjk; - if (poly_hit_sphere(&gjk, pyr, s)) - ddraw_color(RED); - else ddraw_color(WHITE); - - ddraw_sphere(s.c, 1); - ddraw_pyramid(vec3(-10.5f,-0.5f,-7.5f), 0.5f/*vec3(-10.5f,1.0f,-7.5f)*/, 1.0f); - - poly_free(&pyr); - - ddraw_box(gjk.p0, vec3(0.05f, 0.05f, 0.05f)); - ddraw_box(gjk.p1, vec3(0.05f, 0.05f, 0.05f)); - ddraw_line(gjk.p0, gjk.p1); - } - { - // poly(Diamond)-Sphere (GJK) intersection*/ - - sphere s = sphere(vec3(-20+0.6f*sin(dx), 3.0f*cos(dy),-8), 1); - poly dmd = diamond(vec3(-20.5f,-0.5f,-7.5f), vec3(-20.5f,1.0f,-7.5f), 0.5f); - - gjk_result gjk; - if (poly_hit_sphere(&gjk, dmd, s)) - ddraw_color(RED); - else ddraw_color(WHITE); - - ddraw_sphere(s.c, 1); - ddraw_diamond(vec3(-20.5f,-0.5f,-7.5f), vec3(-20.5f,1.0f,-7.5f), 0.5f); - - poly_free(&dmd); - - ddraw_box(gjk.p0, vec3(0.05f, 0.05f, 0.05f)); - ddraw_box(gjk.p1, vec3(0.05f, 0.05f, 0.05f)); - ddraw_line(gjk.p0, gjk.p1); - } - { - // poly(Pyramid)-Capsule (GJK) intersection*/ - - const float x = 0.4f*sin(dx); - const float y = 3.0f*cos(dy); - const float z = -15; - - capsule c = capsule(vec3(x,y-1.0f,z), vec3(x,y+1.0f,z), 0.2f); - poly pyr = pyramid(vec3(-0.5f,-0.5f,-15.5f), vec3(-0.5f,1.0f,-15.5f), 1.0f); - - gjk_result gjk; - if (poly_hit_capsule(&gjk, pyr, c)) - ddraw_color(RED); - else ddraw_color(WHITE); - - ddraw_capsule(c.a, c.b, c.r); - ddraw_pyramid(vec3(-0.5f,-0.5f,-15.5f), 0.5f/*vec3(-0.5f,1.0f,-15.5f)*/, 1.0f); - - poly_free(&pyr); - - ddraw_box(gjk.p0, vec3(0.05f, 0.05f, 0.05f)); - ddraw_box(gjk.p1, vec3(0.05f, 0.05f, 0.05f)); - ddraw_line(gjk.p0, gjk.p1); - } - - { - // poly(Diamond)-Capsule (GJK) intersection*/ - - const float x = -10 + 0.4f*sin(dx); - const float y = 3.0f*cos(dy); - const float z = -15; - - capsule c = capsule(vec3(x,y-1.0f,z), vec3(x,y+1.0f,z), 0.2f); - poly dmd = diamond(vec3(-10.5f,-0.5f,-15.5f), vec3(-10.5f,1.0f,-15.5f), 0.5f); - - gjk_result gjk; - if (poly_hit_capsule(&gjk, dmd, c)) - ddraw_color(RED); - else ddraw_color(WHITE); - - ddraw_capsule(c.a, c.b, c.r); - ddraw_diamond(vec3(-10.5f,-0.5f,-15.5f), vec3(-10.5f,1.0f,-15.5f), 0.5f); - - poly_free(&dmd); - - ddraw_box(gjk.p0, vec3(0.05f, 0.05f, 0.05f)); - ddraw_box(gjk.p1, vec3(0.05f, 0.05f, 0.05f)); - ddraw_line(gjk.p0, gjk.p1); - } - - { - // poly(Diamond)-poly(Pyramid) (GJK) intersection*/ - - const float x = -20 + 0.4f*sin(dx); - const float y = 3.0f*cos(dy); - const float z = -15; - - poly pyr = pyramid(vec3(x,y-0.5f,z), vec3(x,y+1,z), 0.8f); - poly dmd = diamond(vec3(-20.5f,-0.5f,-15.5f), vec3(-20.5f,1.0f,-15.5f), 0.5f); - - gjk_result gjk; - if (poly_hit_poly(&gjk, dmd, pyr)) - ddraw_color(RED); - else ddraw_color(WHITE); - - ddraw_pyramid(vec3(x,y-0.5f,z), 1/*vec3(x,y+1,z)*/, 1/*0.8f*/); - ddraw_diamond(vec3(-20.5f,-0.5f,-15.5f), vec3(-20.5f,1.0f,-15.5f), 0.5f); - - poly_free(&dmd); - poly_free(&pyr); - - ddraw_box(gjk.p0, vec3(0.05f, 0.05f, 0.05f)); - ddraw_box(gjk.p1, vec3(0.05f, 0.05f, 0.05f)); - ddraw_line(gjk.p0, gjk.p1); - } - { - // poly(Pyramid)-poly(Diamond) (GJK) intersection*/ - - const float x = 10 + 0.4f*sin(dx); - const float y = 3.0f*cos(dy); - const float z = -15; - - poly dmd = diamond(vec3(x,y-0.5f,z), vec3(x,y+1,z), 0.5f); - poly pyr = pyramid(vec3(10.5f,-0.5f,-15.5f), vec3(10.5f,1.0f,-15.5f), 1.0f); - - gjk_result gjk; - if (poly_hit_poly(&gjk, dmd, pyr)) - ddraw_color(RED); - else ddraw_color(WHITE); - - ddraw_diamond(vec3(x,y-0.5f,z), vec3(x,y+1,z), 0.5f); - ddraw_pyramid(vec3(10.5f,-0.5f,-15.5f), 0.5f/*vec3(10.5f,1.0f,-15.5f)*/, 1.0f); - - poly_free(&dmd); - poly_free(&pyr); - - ddraw_box(gjk.p0, vec3(0.05f, 0.05f, 0.05f)); - ddraw_box(gjk.p1, vec3(0.05f, 0.05f, 0.05f)); - ddraw_line(gjk.p0, gjk.p1); - } - { - // poly(Diamond)-AABB (GJK) intersection*/ - - const float x = 20 + 0.4f*sin(dx); - const float y = 3.0f*cos(dy); - const float z = -15; - - poly dmd = diamond(vec3(x,y-0.5f,z), vec3(x,y+1,z), 0.5f); - aabb a = aabb(vec3(19.5f,-0.5f,-14.5f), vec3(20.5f,0.5f,-15.5f)); - - gjk_result gjk; - if (poly_hit_aabb(&gjk, dmd, a)) - ddraw_color(RED); - else ddraw_color(WHITE); - - poly_free(&dmd); - - ddraw_diamond(vec3(x,y-0.5f,z), vec3(x,y+1,z), 0.5f); - ddraw_box(vec3(20,0,-15), vec3(1,1,1)); - - ddraw_box(gjk.p0, vec3(0.05f, 0.05f, 0.05f)); - ddraw_box(gjk.p1, vec3(0.05f, 0.05f, 0.05f)); - ddraw_line(gjk.p0, gjk.p1); - } -} +/* poly */ +poly poly_alloc(int cnt) { + poly p = {0}; + p.cnt = cnt; + p.verts = REALLOC(p.verts, sizeof(p.verts[0]) * cnt); // array_resize(p.verts, cnt); + return p; +} + +void poly_free(poly *p) { + REALLOC(p->verts, 0); // array_free(p->verts); + poly z = {0}; + *p = z; +} + +/* plane */ +vec4 plane4(vec3 p, vec3 n) { + return vec34(n, -dot3(n,p)); +} + +/* pyramid */ +poly pyramid(vec3 from, vec3 to, float size) { + /* calculate axis */ + vec3 up, right, forward = norm3( sub3(to, from) ); + ortho3(&right, &up, forward); + + /* calculate extend */ + vec3 xext = scale3(right, size); + vec3 yext = scale3(up, size); + vec3 nxext = scale3(right, -size); + vec3 nyext = scale3(up, -size); + + /* calculate base vertices */ + poly p = {0}; + p.verts = REALLOC(p.verts, sizeof(p.verts[0]) * (5+1)); p.cnt = 5; /*+1 for diamond case*/ // array_resize(p.verts, 5+1); p.cnt = 5; + p.verts[0] = add3(add3(from, xext), yext); /*a*/ + p.verts[1] = add3(add3(from, xext), nyext); /*b*/ + p.verts[2] = add3(add3(from, nxext), nyext); /*c*/ + p.verts[3] = add3(add3(from, nxext), yext); /*d*/ + p.verts[4] = to; /*r*/ + return p; +} + +/* pyramid */ +poly diamond(vec3 from, vec3 to, float size) { + vec3 mid = add3(from, scale3(sub3(to, from), 0.5f)); + poly p = pyramid(mid, to, size); + p.verts[5] = from; p.cnt = 6; + return p; +} + +// --- + +static void transform_(vec3 *r, vec3 v, const float *r33, vec3 t3) { + for (int i = 0; i < 3; ++i) { + i[&r->x] = i[&v.x] * r33[i*3+0]; + i[&r->x] += i[&v.x] * r33[i*3+1]; + i[&r->x] += i[&v.x] * r33[i*3+2]; + i[&r->x] += i[&t3.x]; + } +} +static void transformS(vec3 *v, const float *r33, vec3 t3) { + vec3 tmp = *v; + transform_(v, tmp, r33, t3); +} +static void transformT(vec3 *r, vec3 v, const float *r33, vec3 t3) { + for (int i = 0; i < 3; ++i) { + float p = i[&v.x] - i[&t3.x]; + i[&r->x] = p * r33[0*3+i]; + i[&r->x] += p * r33[1*3+i]; + i[&r->x] += p * r33[2*3+i]; + } +} +static void transformST(vec3 *v, const float *r33, vec3 t3) { + vec3 tmp = *v; + transformT(v, tmp, r33, t3); +} + +/* ============================================================================ + * + * COLLISION + * + * =========================================================================== */ + +static __thread hit hits[16] = {0}; +static __thread int hit_index = -1; +#define hit_next() &hits[ (++hit_index) & 15 ] + +static float line_closest_line_(float *t1, float *t2, vec3 *c1, vec3 *c2, line l, line m) { + vec3 r, d1, d2; + d1 = sub3(l.b, l.a); /* direction vector segment s1 */ + d2 = sub3(m.b, m.a); /* direction vector segment s2 */ + r = sub3(l.a, m.a); + + float i = dot3(d1, d1); + float e = dot3(d2, d2); + float f = dot3(d2, r); + + if (i <= C_EPSILON && e <= C_EPSILON) { + /* both segments degenerate into points */ + vec3 d12; + *t1 = *t2 = 0.0f; + *c1 = l.a; + *c2 = m.a; + d12 = sub3(*c1, *c2); + return dot3(d12,d12); + } + if (i > C_EPSILON) { + float c = dot3(d1,r); + if (e > C_EPSILON) { + /* non-degenerate case */ + float b = dot3(d1,d2); + float denom = i*e - b*b; + + /* compute closest point on L1/L2 if not parallel else pick any t2 */ + if (denom != 0.0f) + *t1 = clampf(0.0f, (b*f - c*e) / denom, 1.0f); + else *t1 = 0.0f; + + /* cmpute point on L2 closest to S1(s) */ + *t2 = (b*(*t1) + f) / e; + if (*t2 < 0.0f) { + *t2 = 0.0f; + *t1 = clampf(0.0f, -c/i, 1.0f); + } else if (*t2 > 1.0f) { + *t2 = 1.0f; + *t1 = clampf(0.0f, (b-c)/i, 1.0f); + } + } else { + /* second segment degenerates into a point */ + *t1 = clampf(0.0f, -c/i, 1.0f); + *t2 = 0.0f; + } + } else { + /* first segment degenerates into a point */ + *t2 = clampf(0.0f, f/e, 1.0f); + *t1 = 0.0f; + } + /* calculate closest points */ + vec3 n, d12; + n = scale3(d1, *t1); + *c1 = add3(l.a, n); + n = scale3(d2, *t2); + *c2 = add3(m.a, n); + + /* calculate squared distance */ + d12 = sub3(*c1, *c2); + return dot3(d12,d12); +} + +vec3 line_closest_point(line l, vec3 p) { + vec3 ab = sub3(l.b,l.a), pa = sub3(p,l.a); + float t = dot3(pa,ab) / dot3(ab,ab); + return add3(l.a, scale3(ab, t < 0 ? 0 : t > 1 ? 1 : t)); +} +float line_distance2_point(line l, vec3 p) { + vec3 ab = sub3(l.a,l.b), ap = sub3(l.a,p), bp = sub3(l.b,p); + /* handle cases p proj outside ab */ + float e = dot3(ap,ab); if (e <= 0) return dot3(ap,ap); + float f = dot3(ab,ab); if (e >= f) return dot3(bp,bp); + return dot3(ap,ap) - (e*e)/f; +} +float ray_test_plane(ray r, vec4 plane) { + /* Ray: P = origin + rd * t + * Plane: plane_normal * P + d = 0 + * + * Substitute: + * normal * (origin + rd*t) + d = 0 + * + * Solve for t: + * plane_normal * origin + plane_normal * rd*t + d = 0 + * -(plane_normal*rd*t) = plane_normal * origin + d + * + * plane_normal * origin + d + * t = -1 * ------------------------- + * plane_normal * rd + * + * Result: + * Behind: t < 0 + * Infront: t >= 0 + * Parallel: t = 0 + * Intersection point: ro + rd * t + */ + vec3 p = ptr3(&plane.x); + float n = -(dot3(p,r.p) + plane.w); + if (fabs(n) < 0.0001f) return 0.0f; + return n/(dot3(p,r.d)); +} +float ray_test_triangle(ray r, triangle tr) { + float t = 0; + vec3 di0, di1, di2; + vec3 d21, d02, in; + vec3 n, d10, d20; + vec3 in0, in1, in2; + + /* calculate triangle normal */ + d10 = sub3(tr.p1,tr.p0); + d20 = sub3(tr.p2,tr.p0); + d21 = sub3(tr.p2,tr.p1); + d02 = sub3(tr.p0,tr.p2); + n = cross3(d10,d20); + + /* check for plane intersection */ + vec4 p = plane4(tr.p0, n); + t = ray_test_plane(r, p); + if (t <= 0.0f) return t; + + /* intersection point */ + in = scale3(r.d,t); + in = add3(in,r.p); + + /* check if point inside triangle in plane */ + di0 = sub3(in, tr.p0); + di1 = sub3(in, tr.p1); + di2 = sub3(in, tr.p2); + + in0 = cross3(d10, di0); + in1 = cross3(d21, di1); + in2 = cross3(d02, di2); + + if (dot3(in0,n) < 0.0f) + return -1; + if (dot3(in1,n) < 0.0f) + return -1; + if (dot3(in2,n) < 0.0f) + return -1; + return t; +} +int ray_test_sphere(float *t0, float *t1, ray r, sphere s) { + vec3 a; + float tc,td,d2,r2; + a = sub3(s.c,r.p); + tc = dot3(r.d,a); + if (tc < 0) return 0; + + r2 = s.r*s.r; + d2 = dot3(a,a) - tc*tc; + if (d2 > r2) return 0; + td = sqrtf(r2 - d2); + + *t0 = tc - td; + *t1 = tc + td; + return 1; +} +int ray_test_aabb(float *t0, float *t1, ray r, aabb a) { + float t0x = (a.min.x - r.p.x) / r.d.x; + float t0y = (a.min.y - r.p.y) / r.d.y; + float t0z = (a.min.z - r.p.z) / r.d.z; + float t1x = (a.max.x - r.p.x) / r.d.x; + float t1y = (a.max.y - r.p.y) / r.d.y; + float t1z = (a.max.z - r.p.z) / r.d.z; + + float tminx = minf(t0x, t1x); + float tminy = minf(t0y, t1y); + float tminz = minf(t0z, t1z); + float tmaxx = maxf(t0x, t1x); + float tmaxy = maxf(t0y, t1y); + float tmaxz = maxf(t0z, t1z); + if (tminx > tmaxy || tminy > tmaxx) + return 0; + + *t0 = maxf(tminx, tminy); + *t1 = minf(tmaxy, tmaxx); + if (*t0 > tmaxz || tminz> *t1) + return 0; + + *t0 = maxf(*t0, tminz); + *t1 = minf(*t1, tmaxz); + return 1; +} +vec3 sphere_closest_point(sphere s, vec3 p) { + vec3 d = norm3(sub3(p, s.c)); + return add3(s.c, scale3(d,s.r)); +} +int sphere_test_sphere(sphere a, sphere b) { + vec3 d = sub3(b.c, a.c); + float r = a.r + b.r; + if (dot3(d,d) > r*r) + return 0; + return 1; +} +hit *sphere_hit_sphere(sphere a, sphere b) { + vec3 d = sub3(b.c, a.c); + float r = a.r + b.r; + float d2 = dot3(d,d); + if (d2 > r*r) return 0; + + hit *m = hit_next(); + float l = sqrtf(d2); + float linv = 1.0f / ((l != 0) ? l: 1.0f); + m->normal = scale3(d, linv); + m->depth = r - l; + d = scale3(m->normal, b.r); + m->contact_point = sub3(b.c, d); + return m; +} +int sphere_test_aabb(sphere s, aabb a) { + return aabb_test_sphere(a, s); +} +hit *sphere_hit_aabb(sphere s, aabb a) { + /* find closest aabb point to sphere center point */ + vec3 ap = aabb_closest_point(a, s.c); + vec3 d = sub3(s.c, ap); + float d2 = dot3(d, d); + if (d2 > s.r*s.r) return 0; + + hit *m = hit_next(); + /* calculate distance vector between sphere and aabb center points */ + vec3 ac = add3(a.min, scale3(sub3(a.max, a.min), 0.5f)); + d = sub3(ac, s.c); + + /* normalize distance vector */ + float l2 = dot3(d,d); + float l = l2 != 0.0f ? sqrtf(l2): 1.0f; + float linv = 1.0f/l; + d = scale3(d, linv); + + m->normal = d; + m->contact_point = scale3(m->normal, s.r); + m->contact_point = add3(s.c, m->contact_point); + + /* calculate penetration depth */ + vec3 sp = sphere_closest_point(s, ap); + d = sub3(sp, ap); + m->depth = sqrtf(dot3(d,d)) - l; + return m; +} +int sphere_test_capsule(sphere s, capsule c) { + return capsule_test_sphere(c, s); +} +hit *sphere_hit_capsule(sphere s, capsule c) { +#if 0 + // original code + /* find closest capsule point to sphere center point */ + hit *m = hit_next(); + vec3 cp = capsule_closest_point(c, s.c); + m->normal = sub3(cp, s.c); + float d2 = dot3(m->normal, m->normal); + if (d2 > s.r*s.r) return 0; + + /* normalize hit normal vector */ + m->normal = norm3(m->normal); + + /* calculate penetration depth */ + m->depth = d2 - s.r*s.r; + m->depth = m->depth != 0.0f ? sqrtf(m->depth): 0.0f; + m->contact_point = add3(s.c, scale3(m->normal, s.r)); + return m; +#else + // aproximation of I would expect this function to return instead + vec3 l = sub3(c.a,c.b); float len = len3(l); + vec3 d = norm3(l); + ray r = ray(add3(c.a,scale3(d,-2*len)), d); + s.r += c.r; + hit *h = ray_hit_sphere(r, s); + if(!h) return 0; + s.r -= c.r; + h->contact_point = add3(s.c,scale3(norm3(sub3(h->contact_point,s.c)),s.r)); + return h; +#endif +} +int sphere_test_poly(sphere s, poly p) { + return poly_test_sphere(p, s); +} +void aabb_rebalance_transform(aabb *b, aabb a, mat33 m, vec3 t) { + for (int i = 0; i < 3; ++i) { + i[&b->min.x] = i[&b->max.x] = i[&t.x]; + for (int j = 0; j < 3; ++j) { + float e = m[i*3+j] * j[&a.min.x]; + float f = m[i*3+j] * j[&a.max.x]; + if (e < f) { + i[&b->min.x] += e; + i[&b->max.x] += f; + } else { + i[&b->min.x] += f; + i[&b->max.x] += e; + } + } + } +} +vec3 aabb_closest_point(aabb a, vec3 p) { + vec3 res; + for (int i = 0; i < 3; ++i) { + float v = i[&p.x]; + if (v < i[&a.min.x]) v = i[&a.min.x]; + if (v > i[&a.max.x]) v = i[&a.max.x]; + i[&res.x] = v; + } + return res; +} +float aabb_distance2_point(aabb a, vec3 p) { + float r = 0; + for (int i = 0; i < 3; ++i) { + float v = i[&p.x]; + if (v < i[&a.min.x]) r += (i[&a.min.x]-v) * (i[&a.min.x]-v); + if (v > i[&a.max.x]) r += (v-i[&a.max.x]) * (v-i[&a.max.x]); + } return r; +} +int aabb_contains_point(aabb a, vec3 p) { + if (p.x < a.min.x || p.x > a.max.x) return 0; + if (p.y < a.min.y || p.y > a.max.y) return 0; + if (p.z < a.min.z || p.z > a.max.z) return 0; + return 1; +} +int aabb_test_aabb(aabb a, aabb b) { + if (a.max.x < b.min.x || a.min.x > b.max.x) return 0; + if (a.max.y < b.min.y || a.min.y > b.max.y) return 0; + if (a.max.z < b.min.z || a.min.z > b.max.z) return 0; + return 1; +} +hit *aabb_hit_aabb(aabb a, aabb b) { + if (!aabb_test_aabb(a, b)) + return 0; + + hit *m = hit_next(); + /* calculate distance vector between both aabb center points */ + vec3 ac, bc, d; + ac = sub3(a.max, a.min); + bc = sub3(b.max, b.min); + + ac = scale3(ac, 0.5f); + bc = scale3(bc, 0.5f); + + ac = add3(a.min, ac); + bc = add3(b.min, bc); + d = sub3(bc, ac); + + /* normalize distance vector */ + float l2 = dot3(d,d); + float l = l2 != 0.0f ? sqrtf(l2): 1.0f; + float linv = 1.0f/l; + d = scale3(d, linv); + + /* calculate contact point */ + m->normal = d; + m->contact_point = aabb_closest_point(a, bc); + d = sub3(m->contact_point, ac); + + /* calculate penetration depth */ + float r2 = dot3(d,d); + float r = sqrtf(r2); + m->depth = r - l; + return m; +} +int aabb_test_sphere(aabb a, sphere s) { + /* compute squared distance between sphere center and aabb */ + float d2 = aabb_distance2_point(a, s.c); + /* intersection if distance is smaller/equal sphere radius*/ + return d2 <= s.r*s.r; +} +hit *aabb_hit_sphere(aabb a, sphere s) { + /* find closest aabb point to sphere center point */ + hit *m = hit_next(); + m->contact_point = aabb_closest_point(a, s.c); + vec3 d = sub3(s.c, m->contact_point); + float d2 = dot3(d, d); + if (d2 > s.r*s.r) return 0; + + /* calculate distance vector between aabb and sphere center points */ + vec3 ac = add3(a.min, scale3(sub3(a.max, a.min), 0.5f)); + d = sub3(s.c, ac); + + /* normalize distance vector */ + float l2 = dot3(d,d); + float l = l2 != 0.0f ? sqrtf(l2): 1.0f; + float linv = 1.0f/l; + d = scale3(d, linv); + + /* calculate penetration depth */ + m->normal = d; + d = sub3(m->contact_point, ac); + m->depth = sqrtf(dot3(d,d)); + return m; +} +int aabb_test_capsule(aabb a, capsule c) { + return capsule_test_aabb(c, a); +} +hit *aabb_hit_capsule(aabb a, capsule c) { + /* calculate aabb center point */ + vec3 ac = add3(a.min, scale3(sub3(a.max, a.min), 0.5f)); + + /* calculate closest point from aabb to point on capsule and check if inside aabb */ + vec3 cp = capsule_closest_point(c, ac); + if (!aabb_contains_point(a, cp)) + return 0; + + hit *m = hit_next(); + /* vector and distance between both capsule closests point and aabb center*/ + vec3 d; float d2; + d = sub3(cp, ac); + d2 = dot3(d,d); + + /* calculate penetration depth from closest aabb point to capsule */ + vec3 ap = aabb_closest_point(a, cp); + vec3 dt = sub3(ap, cp); + m->depth = sqrtf(dot3(dt,dt)); + + /* calculate normal */ + float l = sqrtf(d2); + float linv = 1.0f / ((l != 0.0f) ? l: 1.0f); + m->normal = scale3(d, linv); + m->contact_point = ap; + return m; +} +int aabb_test_poly(aabb a, poly p) { + return poly_test_aabb(p, a); +} +float capsule_distance2_point(capsule c, vec3 p) { + float d2 = line_distance2_point(line(c.a,c.b), p); + return d2 - (c.r*c.r); +} +vec3 capsule_closest_point(capsule c, vec3 p) { + /* calculate closest point to internal capsule segment */ + vec3 pp = line_closest_point(line(c.a,c.b), p); + + /* extend point out by radius in normal direction */ + vec3 d = norm3(sub3(p,pp)); + return add3(pp, scale3(d, c.r)); +} +int capsule_test_capsule(capsule a, capsule b) { + float t1, t2; + vec3 c1, c2; + float d2 = line_closest_line_(&t1, &t2, &c1, &c2, line(a.a,a.b), line(b.a,b.b)); + float r = a.r + b.r; + return d2 <= r*r; +} +hit *capsule_hit_capsule(capsule a, capsule b) { + float t1, t2; + vec3 c1, c2; + float d2 = line_closest_line_(&t1, &t2, &c1, &c2, line(a.a,a.b), line(b.a,b.b)); + float r = a.r + b.r; + if (d2 > r*r) return 0; + + hit *m = hit_next(); + /* calculate normal from both closest points for each segement */ + vec3 cp, d; + m->normal = sub3(c2, c1); + m->normal = norm3(m->normal); + + /* calculate contact point from closest point and depth */ + m->contact_point = capsule_closest_point(a, c2); + cp = capsule_closest_point(b, c1); + d = sub3(c1, cp); + m->depth = sqrtf(dot3(d,d)); + return m; +} +int capsule_test_sphere(capsule c, sphere s) { + /* squared distance bwetween sphere center and capsule line segment */ + float d2 = line_distance2_point(line(c.a,c.b), s.c); + float r = s.r + c.r; + return d2 <= r * r; +} +hit *capsule_hit_sphere(capsule c, sphere s) { + /* find closest capsule point to sphere center point */ + hit *m = hit_next(); + m->contact_point = capsule_closest_point(c, s.c); + m->normal = sub3(s.c, m->contact_point); + float d2 = dot3(m->normal, m->normal); + if (d2 > s.r*s.r) return 0; + + /* normalize hit normal vector */ + float l = d2 != 0.0f ? sqrtf(d2): 1; + float linv = 1.0f/l; + m->normal = scale3(m->normal, linv); + + /* calculate penetration depth */ + m->depth = d2 - s.r*s.r; + m->depth = m->depth != 0.0f ? sqrtf(m->depth): 0.0f; + return m; +} +int capsule_test_aabb(capsule c, aabb a) { + /* calculate aabb center point */ + vec3 ac = scale3(sub3(a.max, a.min), 0.5f); + + /* calculate closest point from aabb to point on capsule and check if inside aabb */ + vec3 p = capsule_closest_point(c, ac); + return aabb_contains_point(a, p); +} +hit *capsule_hit_aabb(capsule c, aabb a) { + /* calculate aabb center point */ + vec3 ac = add3(a.min, scale3(sub3(a.max, a.min), 0.5f)); + + /* calculate closest point from aabb to point on capsule and check if inside aabb */ + vec3 cp = capsule_closest_point(c, ac); + if (!aabb_contains_point(a, cp)) + return 0; + + hit *m = hit_next(); + /* vector and distance between both capsule closests point and aabb center*/ + vec3 d; float d2; + d = sub3(ac, cp); + d2 = dot3(d,d); + + /* calculate penetration depth from closest aabb point to capsule */ + vec3 ap = aabb_closest_point(a, cp); + vec3 dt = sub3(ap, cp); + m->depth = sqrtf(dot3(dt,dt)); + + /* calculate normal */ + float l = sqrtf(d2); + float linv = 1.0f / ((l != 0.0f) ? l: 1.0f); + m->normal = scale3(d, linv); + m->contact_point = cp; + return m; +} +int capsule_test_poly(capsule c, poly p) { + return poly_test_capsule(p, c); +} +int line_support(vec3 *support, vec3 d, vec3 a, vec3 b) { + int i = 0; + float adot = dot3(a, d); + float bdot = dot3(b, d); + if (adot < bdot) { + *support = b; + i = 1; + } else *support = a; + return i; +} +int poly_support(vec3 *support, vec3 d, poly p) { + int imax = 0; + float dmax = dot3(*p.verts, d); + for (int i = 1; i < p.cnt; ++i) { + /* find vertex with max dot product in direction d */ + float dot = dot3(p.verts[i], d); + if (dot < dmax) continue; + imax = i, dmax = dot; + } *support = p.verts[imax]; + return imax; +} +int poly_hit_sphere(struct gjk_result *res, + poly p, + sphere s) { + /* initial guess */ + vec3 d = {0}; + gjk_support gs = {0}; + gs.a = *p.verts; + gs.b = s.c; + d = sub3(gs.b, gs.a); + + /* run gjk algorithm */ + gjk_simplex gsx = {0}; + while (gjk(&gsx, &gs, &d)) { + vec3 n = scale3(d, -1); + gs.aid = poly_support(&gs.a, n, p); + d = sub3(gs.b, gs.a); + } + /* check distance between closest points */ + *res = gjk_analyze(&gsx); + return res->distance_squared <= s.r*s.r; +} +int poly_hit_sphere_transform(struct gjk_result *res, poly p, vec3 pos3, mat33 rot33, sphere s) { + /* initial guess */ + vec3 d = {0}; + gjk_support gs = {0}; + gs.a = *p.verts; + gs.b = s.c; + transformS(&gs.a, rot33, pos3); + d = sub3(gs.b, gs.a); + + /* run gjk algorithm */ + gjk_simplex gsx = {0}; + while (gjk(&gsx, &gs, &d)) { + vec3 n = scale3(d, -1); + vec3 da; transformT(&da, n, rot33, pos3); + + gs.aid = poly_support(&gs.a, da, p); + transformS(&gs.a, rot33, pos3); + d = sub3(gs.b, gs.a); + } + /* check distance between closest points */ + *res = gjk_analyze(&gsx); + return res->distance_squared <= s.r*s.r; +} +int poly_test_sphere(poly p, sphere s) { + struct gjk_result res; + return poly_hit_sphere(&res, p, s); +} +int poly_test_sphere_transform(poly p, vec3 pos3, mat33 rot33, sphere s) { + struct gjk_result res; + return poly_hit_sphere_transform(&res, p, pos3, rot33, s); +} +int poly_hit_capsule(struct gjk_result *res, poly p, capsule c) { + /* initial guess */ + vec3 d = {0}; + gjk_support s = {0}; + s.a = *p.verts; + s.b = c.a; + d = sub3(s.b, s.a); + + /* run gjk algorithm */ + gjk_simplex gsx = {0}; + while (gjk(&gsx, &s, &d)) { + vec3 n = scale3(d, -1); + s.aid = poly_support(&s.a, n, p); + s.bid = line_support(&s.b, d, c.a, c.b); + d = sub3(s.b, s.a); + } + /* check distance between closest points */ + assert(gsx.iter < gsx.max_iter); + *res = gjk_analyze(&gsx); + return res->distance_squared <= c.r*c.r; +} +int poly_test_capsule(poly p, capsule c) { + struct gjk_result res; + return poly_hit_capsule(&res, p, c); +} +int poly_hit_capsule_transform(struct gjk_result *res, poly p, vec3 pos3, mat33 rot33, capsule c) { + /* initial guess */ + vec3 d = {0}; + gjk_support gs = {0}; + gs.a = *p.verts; + gs.b = c.a; + transformS(&gs.a, rot33, pos3); + d = sub3(gs.b, gs.a); + + /* run gjk algorithm */ + gjk_simplex gsx = {0}; + while (gjk(&gsx, &gs, &d)) { + vec3 n = scale3(d, -1); + vec3 da; transformT(&da, n, rot33, pos3); + + gs.aid = poly_support(&gs.a, da, p); + gs.bid = line_support(&gs.b, d, c.a, c.b); + transformS(&gs.a, rot33, pos3); + d = sub3(gs.b, gs.a); + } + /* check distance between closest points */ + *res = gjk_analyze(&gsx); + return res->distance_squared <= c.r*c.r; +} +int poly_test_capsule_transform(poly p, vec3 pos3, mat33 rot33, capsule c) { + struct gjk_result res; + return poly_hit_capsule_transform(&res, p, pos3, rot33, c); +} +int poly_hit_poly_transform(struct gjk_result *res, + poly a, vec3 at3, mat33 ar33, + poly b, vec3 bt3, mat33 br33) { + /* initial guess */ + vec3 d = {0}; + gjk_support gs = {0}; + gs.a = *a.verts; + gs.b = *b.verts; + transformS(&gs.a, ar33, at3); + transformS(&gs.b, br33, bt3); + d = sub3(gs.b, gs.a); + + /* run gjk algorithm */ + gjk_simplex gsx = {0}; + while (gjk(&gsx, &gs, &d)) { + /* transform direction */ + vec3 n = scale3(d, -1); + vec3 da; transformT(&da, n, ar33, at3); + vec3 db; transformT(&db, d, br33, bt3); + /* run support function on tranformed directions */ + gs.aid = poly_support(&gs.a, da, a); + gs.bid = poly_support(&gs.b, db, b); + /* calculate distance vector on transformed points */ + transformS(&gs.a, ar33, at3); + transformS(&gs.b, br33, bt3); + d = sub3(gs.b, gs.a); + } + *res = gjk_analyze(&gsx); + return gsx.hit; +} +int poly_hit_poly(struct gjk_result *res, + poly a, + poly b) { + /* initial guess */ + vec3 d = {0}; + gjk_support gs = {0}; + gs.a = *a.verts; + gs.b = *b.verts; + d = sub3(gs.b, gs.a); + + /* run gjk algorithm */ + gjk_simplex gsx = {0}; + while (gjk(&gsx, &gs, &d)) { + vec3 n = scale3(d, -1); + gs.aid = poly_support(&gs.a, n, a); + gs.bid = poly_support(&gs.b, d, b); + d = sub3(gs.b, gs.a); + } + *res = gjk_analyze(&gsx); + return gsx.hit; +} +int poly_test_poly(poly a, poly b) { + struct gjk_result res; + return poly_hit_poly(&res, a, b); +} +int poly_test_poly_transform(poly a, vec3 apos3, mat33 arot33, + poly b, vec3 bpos3, mat33 brot33) { + struct gjk_result res; + return poly_hit_poly_transform(&res, a, apos3, arot33, b, bpos3, brot33); +} +int poly_hit_aabb(struct gjk_result *res, poly p, aabb a) { + vec3 box[8]; + box[0] = vec3(a.min.x, a.min.y, a.min.z), + box[1] = vec3(a.min.x, a.min.y, a.max.z); + box[2] = vec3(a.min.x, a.max.y, a.min.z); + box[3] = vec3(a.min.x, a.max.y, a.max.z); + box[4] = vec3(a.max.x, a.min.y, a.min.z); + box[5] = vec3(a.max.x, a.min.y, a.max.z); + box[6] = vec3(a.max.x, a.max.y, a.min.z); + box[7] = vec3(a.max.x, a.max.y, a.max.z); + return poly_hit_poly(res, p, poly(&box[0], 8)); +} +int poly_hit_aabb_transform(struct gjk_result *res, poly p, vec3 pos3, mat33 rot33, aabb a) { + vec3 zero = {0}; + vec3 id[3] = {{1,0,0},{0,1,0},{0,0,1}}; + vec3 box[8]; + box[0] = vec3(a.min.x, a.min.y, a.min.z), + box[1] = vec3(a.min.x, a.min.y, a.max.z); + box[2] = vec3(a.min.x, a.max.y, a.min.z); + box[3] = vec3(a.min.x, a.max.y, a.max.z); + box[4] = vec3(a.max.x, a.min.y, a.min.z); + box[5] = vec3(a.max.x, a.min.y, a.max.z); + box[6] = vec3(a.max.x, a.max.y, a.min.z); + box[7] = vec3(a.max.x, a.max.y, a.max.z); + return poly_hit_poly_transform(res, p, pos3, rot33, poly(&box[0], 8), zero, id[0].v3); +} +int poly_test_aabb(poly p, aabb a) { + struct gjk_result res; + return poly_hit_aabb(&res, p, a); +} +int poly_test_aabb_transform(poly p, vec3 apos3, mat33 arot33, aabb a) { + struct gjk_result res; + return poly_hit_aabb_transform(&res, p, apos3, arot33, a); +} + +/* ============================================================================ + * + * COLLISION VOLUME + * + * =========================================================================== */ + +hit *ray_hit_plane(ray r, plane p) { + vec4 pf = plane4(p.p, p.n); + float t = ray_test_plane(r, pf); + if (t <= 0.0f) return 0; + hit *o = hit_next(); + o->p = add3(r.p, scale3(r.d, t)); + o->t0 = o->t1 = t; + o->n = scale3(p.n, -1.0f); + return o; +} +hit *ray_hit_triangle(ray r, triangle tr) { + float t = ray_test_triangle(r, tr); + if (t <= 0) return 0; + + hit *o = hit_next(); + o->t0 = o->t1 = t; + o->p = add3(r.p, scale3(r.d, t)); + o->n = norm3(cross3(sub3(tr.p1,tr.p0),sub3(tr.p2,tr.p0))); + return o; +} +hit *ray_hit_sphere(ray r, sphere s) { + hit *o = hit_next(); + if (!ray_test_sphere(&o->t0, &o->t1, r, s)) + return 0; + o->p = add3(r.p, scale3(r.d, minf(o->t0,o->t1))); + o->n = norm3(sub3(o->p, s.c)); + return o; +} +hit *ray_hit_aabb(ray r, aabb a) { + hit *o = hit_next(); + + vec3 pnt, ext, c; + float d, min; + if (!ray_test_aabb(&o->t0, &o->t1, r, a)) + return 0; + + o->p = add3(r.p, scale3(r.d, minf(o->t0,o->t1))); + ext = sub3(a.max, a.min); + c = add3(a.min, scale3(ext,0.5f)); + pnt = sub3(o->p, c); + + min = fabs(ext.x - fabs(pnt.x)); + o->n = scale3(vec3(1,0,0), signf(pnt.x)); + d = fabs(ext.y - fabs(pnt.y)); + if (d < min) { + min = d; + o->n = scale3(vec3(0,1,0), signf(pnt.y)); + } + d = fabs(ext.z - fabs(pnt.z)); + if (d < min) + o->n = scale3(vec3(0,0,1), signf(pnt.z)); + return o; +} + +frustum frustum_build(mat44 pv) { + frustum f; + f.l = vec4(pv[ 3]+pv[ 0], pv[ 7]+pv[ 4], pv[11]+pv[ 8], pv[15]+pv[12]); + f.r = vec4(pv[ 3]-pv[ 0], pv[ 7]-pv[ 4], pv[11]-pv[ 8], pv[15]-pv[12]); + f.t = vec4(pv[ 3]-pv[ 1], pv[ 7]-pv[ 5], pv[11]-pv[ 9], pv[15]-pv[13]); + f.b = vec4(pv[ 3]+pv[ 1], pv[ 7]+pv[ 5], pv[11]+pv[ 9], pv[15]+pv[13]); + f.n = vec4(pv[ 3]+pv[ 2], pv[ 7]+pv[ 6], pv[11]+pv[10], pv[15]+pv[14]); + f.f = vec4(pv[ 3]-pv[ 2], pv[ 7]-pv[ 6], pv[11]-pv[10], pv[15]-pv[14]); + for (int i = 0; i < 6; i++) f.pl[i] = scale4(f.pl[i], 1 / len3(f.pl[i].xyz)); + return f; +} +int frustum_test_sphere(frustum f, sphere s) { + for(int i = 0; i < 6; i++) { + if((dot3(f.pl[i].xyz, s.c) + f.pl[i].w + s.r) < 0) return 0; + } + return 1; +} +int frustum_test_aabb(frustum f, aabb a) { + for(int i = 0; i < 6; i++) { + vec3 v = vec3(f.pl[i].x > 0 ? a.max.x : a.min.x, f.pl[i].y > 0 ? a.max.y : a.min.y, f.pl[i].z > 0 ? a.max.z : a.min.z); + if((dot3(f.pl[i].xyz, v) + f.pl[i].w) < 0) return 0; + } + return 1; +} + +void collide_demo() { // debug draw collisions // @fixme: fix leaks: poly_free() + + // animation + static float dx = 0, dy = 0; + float delta = (0.25f / 60.f); + dx = dx + delta * 2.0f; + dy = dy + delta * 0.8f; + +#if 0 + // 3D + glEnable(GL_DEPTH_TEST); + + // grid + ddraw_grid(0); +#endif + + { + // Triangle-Ray Intersection*/ + vec3 ro, rd; + int suc; + + triangle tri = { vec3(-9,1,28), vec3(-10,0,28), vec3(-11,1,28) }; + + // ray + ro = vec3(-10,-1,20); + rd = vec3(-10+0.4f*sin(dx), 2.0f*cos(dy), 29.81023f); + rd = sub3(rd, ro); + rd = norm3(rd); + + ray r = ray(ro, rd); + hit *hit = ray_hit_triangle(r, tri); + if (hit) { + // point of intersection + ddraw_color(RED); + ddraw_box(hit->p, vec3(0.10f, 0.10f, 0.10f)); + + // intersection normal + ddraw_color(BLUE); + vec3 v = add3(hit->p, hit->n); + ddraw_arrow(hit->p, v); + } + + // line + ddraw_color(RED); + rd = scale3(rd,10); + rd = add3(ro,rd); + ddraw_line(ro, rd); + + // triangle + if (hit) ddraw_color(RED); + else ddraw_color(WHITE); + ddraw_triangle(tri.p0,tri.p1,tri.p2); + } + { + // Plane-Ray Intersection*/ + vec3 ro, rd; + mat33 rot; + + // ray + static float d = 0; + d += delta * 2.0f; + ro = vec3(0,-1,20); + rd = vec3(0.1f, 0.5f, 9.81023f); + rd = sub3(rd, ro); + rd = norm3(rd); + + // rotation + rotation33(rot, deg(d), 0,1,0); + rd = mulv33(rot, rd); + + // intersection + ray r = ray(ro, rd); + plane pl = plane(vec3(0,0,28), vec3(0,0,1)); + hit *hit = ray_hit_plane(r, pl); + if (hit) { + // point of intersection + ddraw_color(RED); + ddraw_box(hit->p, vec3(0.10f, 0.10f, 0.10f)); + + // intersection normal + ddraw_color(BLUE); + vec3 v = add3(hit->p, hit->n); + ddraw_arrow(hit->p, v); + ddraw_color(RED); + } + // line + ddraw_color(RED); + rd = scale3(rd,9); + rd = add3(ro,rd); + ddraw_line(ro, rd); + + // plane + if (hit) ddraw_color(RED); + else ddraw_color(WHITE); + ddraw_plane(vec3(0,0,28), vec3(0,0,1), 3.0f); + } + { + // Sphere-Ray Intersection*/ + vec3 ro, rd; + sphere s; + + // ray + ro = vec3(0,-1,0); + rd = vec3(0.4f*sin(dx), 2.0f*cos(dy), 9.81023f); + rd = sub3(rd, ro); + rd = norm3(rd); + + ray r = ray(ro, rd); + s = sphere(vec3(0,0,8), 1); + hit *hit = ray_hit_sphere(r, s); + if(hit) { + // points of intersection + vec3 in = add3(ro,scale3(rd,hit->t0)); + + ddraw_color(GREEN); + ddraw_box(in, vec3(0.05f, 0.05f, 0.05f)); + + in = add3(ro,scale3(rd,hit->t1)); + + ddraw_color(YELLOW); + ddraw_box(in, vec3(0.05f, 0.05f, 0.05f)); + + // intersection normal + ddraw_color(BLUE); + vec3 v = add3(hit->p, hit->n); + ddraw_arrow(hit->p, v); + ddraw_color(RED); + } + // line + ddraw_color(RED); + rd = scale3(rd,10); + rd = add3(ro,rd); + ddraw_line(ro, rd); + + // sphere + if (hit) ddraw_color(RED); + else ddraw_color(WHITE); + ddraw_sphere(vec3(0,0,8), 1); + } + { // ray-aabb + aabb bounds = aabb(vec3(10-0.5f,-0.5f,7.5f), vec3(10.5f,0.5f,8.5f)); + + vec3 ro = vec3(10,-1,0); + vec3 rd = vec3(10+0.4f*sin(dx), 2.0f*cos(dy), 9.81023f); + rd = norm3(sub3(rd, ro)); + ray r = ray(ro, rd); + + hit *hit = ray_hit_aabb(r, bounds); + if(hit) { + // points of intersection + vec3 in; + in = scale3(rd,hit->t0); + in = add3(ro,in); + + ddraw_color(RED); + ddraw_box(in, vec3(0.05f, 0.05f, 0.05f)); + + in = scale3(rd,hit->t1); + in = add3(ro,in); + + ddraw_color(RED); + ddraw_box(in, vec3(0.05f, 0.05f, 0.05f)); + + // intersection normal + ddraw_color(BLUE); + vec3 v = add3(hit->p, hit->n); + ddraw_arrow(hit->p, v); + ddraw_color(RED); + } else ddraw_color(WHITE); + ddraw_box(vec3(10,0,8), vec3(1,1,1)); + + // line + ddraw_color(RED); + rd = scale3(rd,10); + rd = add3(ro,rd); + ddraw_line(ro, rd); + } + { + // Sphere-Sphere intersection*/ + sphere a = sphere(vec3(-10,0,8), 1); + sphere b = sphere(vec3(-10+0.6f*sin(dx), 3.0f*cos(dy),8), 1); + hit *m = sphere_hit_sphere(a, b); + if (m) { + vec3 v; + ddraw_color(BLUE); + ddraw_box(m->contact_point, vec3(0.05f, 0.05f, 0.05f)); + v = add3(m->contact_point, m->normal); + ddraw_arrow(m->contact_point, v); + ddraw_color(RED); + } else ddraw_color(WHITE); + + ddraw_sphere(a.c, 1); + ddraw_sphere(b.c, 1); + } + { + // AABB-AABB intersection*/ + const float x = 10+0.6f*sin(dx); + const float y = 3.0f*cos(dy); + const float z = 20.0f; + + aabb a = aabb(vec3(10-0.5f,-0.5f,20-0.5f), vec3(10+0.5f,0.5f,20.5f)); + aabb b = aabb(vec3(x-0.5f,y-0.5f,z-0.5f), vec3(x+0.5f,y+0.5f,z+0.5f)); + hit *m = aabb_hit_aabb(a, b); + if(m) { + vec3 v; + ddraw_color(BLUE); + ddraw_box(m->contact_point, vec3(0.05f, 0.05f, 0.05f)); + v = add3(m->contact_point, m->normal); + ddraw_arrow(m->contact_point, v); + ddraw_color(RED); + } else ddraw_color(WHITE); + + ddraw_box(vec3(10,0,20), vec3(1,1,1)); + ddraw_box(vec3(x,y,z), vec3(1,1,1)); + } + { + // Capsule-Capsule intersection*/ + const float x = 20+0.4f*sin(dx); + const float y = 3.0f*cos(dy); + const float z = 28.5f; + + capsule a = capsule(vec3(20.0f,-1.0f,28.0f), vec3(20.0f,1.0f,28.0f), 0.2f); + capsule b = capsule(vec3(x,y-1.0f,z), vec3(x,y+1.0f,z-1.0f), 0.2f); + hit *m = capsule_hit_capsule(a, b); + if( m ) { + vec3 v; + ddraw_color(BLUE); + ddraw_box(m->contact_point, vec3(0.05f, 0.05f, 0.05f)); + v = add3(m->contact_point, m->normal); + ddraw_arrow(m->contact_point, v); + ddraw_color(RED); + } else ddraw_color(WHITE); + ddraw_capsule(vec3(x,y-1.0f,z), vec3(x,y+1.0f,z-1.0f), 0.2f); + ddraw_capsule(vec3(20.0f,-1.0f,28.0f), vec3(20.0f,1.0f,28.0f), 0.2f); + } + { + // AABB-Sphere intersection*/ + aabb a = aabb(vec3(20-0.5f,-0.5f,7.5f), vec3(20.5f,0.5f,8.5f)); + sphere s = sphere(vec3(20+0.6f*sin(dx), 3.0f*cos(dy),8), 1); + hit *m = aabb_hit_sphere(a, s); + if(m) { + vec3 v; + ddraw_color(BLUE); + ddraw_box(m->contact_point, vec3(0.05f, 0.05f, 0.05f)); + v = add3(m->contact_point, m->normal); + ddraw_arrow(m->contact_point, v); + ddraw_color(RED); + } else ddraw_color(WHITE); + + ddraw_box(vec3(20,0,8), vec3(1,1,1)); + ddraw_sphere(s.c, 1); + } + { + // Sphere-AABB intersection*/ + const float x = 10+0.6f*sin(dx); + const float y = 3.0f*cos(dy); + const float z = -8.0f; + + sphere s = sphere(vec3(10,0,-8), 1); + aabb a = aabb(vec3(x-0.5f,y-0.5f,z-0.5f), vec3(x+0.5f,y+0.5f,z+0.5f)); + hit *m = sphere_hit_aabb(s, a); + if(m) { + vec3 v; + ddraw_color(BLUE); + ddraw_box(m->contact_point, vec3(0.05f, 0.05f, 0.05f)); + v = add3(m->contact_point, m->normal); + ddraw_arrow(m->contact_point, v); + ddraw_color(RED); + } else ddraw_color(WHITE); + + ddraw_box(vec3(x,y,z), vec3(1,1,1)); + ddraw_sphere(s.c, 1); + } + { + // Capsule-Sphere intersection*/ + capsule c = capsule(vec3(-20.5f,-1.0f,7.5f), vec3(-20+0.5f,1.0f,8.5f), 0.2f); + sphere b = sphere(vec3(-20+0.6f*sin(dx), 3.0f*cos(dy),8), 1); + hit *m = capsule_hit_sphere(c, b); + if(m) { + vec3 v; + ddraw_color(BLUE); + ddraw_box(m->contact_point, vec3(0.05f, 0.05f, 0.05f)); + v = add3(m->contact_point, m->normal); + ddraw_arrow(m->contact_point, v); + ddraw_color(RED); + } else ddraw_color(WHITE); + ddraw_sphere(b.c, 1); + ddraw_capsule(vec3(-20.5f,-1.0f,7.5f), vec3(-20+0.5f,1.0f,8.5f), 0.2f); + } + { + // Sphere-Capsule intersection*/ + const float x = 20+0.4f*sin(dx); + const float y = 3.0f*cos(dy); + const float z = -8; + + sphere s = sphere(vec3(20,0,-8), 1); + capsule c = capsule(vec3(x,y-1.0f,z), vec3(x,y+1.0f,z-1.0f), 0.2f); + hit *m = sphere_hit_capsule(s, c); + if(m) { + vec3 v; + ddraw_color(BLUE); + ddraw_box(m->contact_point, vec3(0.05f, 0.05f, 0.05f)); + v = add3(m->contact_point, m->normal); + ddraw_arrow(m->contact_point, v); + ddraw_color(RED); + } else ddraw_color(WHITE); + + ddraw_capsule(vec3(x,y-1.0f,z), vec3(x,y+1.0f,z-1.0f), 0.2f); + ddraw_sphere(s.c, 1); + } + { + // Capsule-AABB intersection*/ + const float x = -20+0.6f*sin(dx); + const float y = 3.0f*cos(dy); + const float z = 28.0f; + + capsule c = capsule(vec3(-20.5f,-1.0f,27.5f), vec3(-20+0.5f,1.0f,28.5f), 0.2f); + aabb b = aabb(vec3(x-0.5f,y-0.5f,z-0.5f), vec3(x+0.5f,y+0.5f,z+0.5f)); + hit *m = capsule_hit_aabb(c, b); + if(m) { + vec3 v; + ddraw_color(BLUE); + ddraw_box(m->contact_point, vec3(0.05f, 0.05f, 0.05f)); + v = add3(m->contact_point, m->normal); + ddraw_arrow(m->contact_point, v); + ddraw_color(RED); + } else ddraw_color(WHITE); + ddraw_box(vec3(x,y,z), vec3(1,1,1)); + ddraw_capsule(vec3(-20.5f,-1.0f,27.5f), vec3(-20+0.5f,1.0f,28.5f), 0.2f); + } + { + // AABB-Capsule intersection*/ + const float x = 0.4f*sin(dx); + const float y = 3.0f*cos(dy); + const float z = -8; + + aabb a = aabb(vec3(-0.5f,-0.5f,-8.5f), vec3(0.5f,0.5f,-7.5f)); + capsule c = capsule(vec3(x,y-1.0f,z), vec3(x,y+1.0f,z-1.0f), 0.2f); + hit *m = aabb_hit_capsule(a, c); + if(m) { + ddraw_color(RED); + ddraw_box(m->contact_point, vec3(0.05f, 0.05f, 0.05f)); + ddraw_arrow(m->contact_point, add3(m->contact_point, m->normal)); + } else ddraw_color(WHITE); + + ddraw_capsule(vec3(x,y-1.0f,z), vec3(x,y+1.0f,z-1.0f), 0.2f); + ddraw_box(vec3(0,0,-8.0f), vec3(1,1,1)); + } + { + // poly(Pyramid)-Sphere (GJK) intersection*/ + sphere s = sphere(vec3(-10+0.6f*sin(dx), 3.0f*cos(dy),-8), 1); + poly pyr = pyramid(vec3(-10.5f,-0.5f,-7.5f), vec3(-10.5f,1.0f,-7.5f), 1.0f); + + gjk_result gjk; + if (poly_hit_sphere(&gjk, pyr, s)) + ddraw_color(RED); + else ddraw_color(WHITE); + + ddraw_sphere(s.c, 1); + ddraw_pyramid(vec3(-10.5f,-0.5f,-7.5f), 0.5f/*vec3(-10.5f,1.0f,-7.5f)*/, 1.0f); + + poly_free(&pyr); + + ddraw_box(gjk.p0, vec3(0.05f, 0.05f, 0.05f)); + ddraw_box(gjk.p1, vec3(0.05f, 0.05f, 0.05f)); + ddraw_line(gjk.p0, gjk.p1); + } + { + // poly(Diamond)-Sphere (GJK) intersection*/ + + sphere s = sphere(vec3(-20+0.6f*sin(dx), 3.0f*cos(dy),-8), 1); + poly dmd = diamond(vec3(-20.5f,-0.5f,-7.5f), vec3(-20.5f,1.0f,-7.5f), 0.5f); + + gjk_result gjk; + if (poly_hit_sphere(&gjk, dmd, s)) + ddraw_color(RED); + else ddraw_color(WHITE); + + ddraw_sphere(s.c, 1); + ddraw_diamond(vec3(-20.5f,-0.5f,-7.5f), vec3(-20.5f,1.0f,-7.5f), 0.5f); + + poly_free(&dmd); + + ddraw_box(gjk.p0, vec3(0.05f, 0.05f, 0.05f)); + ddraw_box(gjk.p1, vec3(0.05f, 0.05f, 0.05f)); + ddraw_line(gjk.p0, gjk.p1); + } + { + // poly(Pyramid)-Capsule (GJK) intersection*/ + + const float x = 0.4f*sin(dx); + const float y = 3.0f*cos(dy); + const float z = -15; + + capsule c = capsule(vec3(x,y-1.0f,z), vec3(x,y+1.0f,z), 0.2f); + poly pyr = pyramid(vec3(-0.5f,-0.5f,-15.5f), vec3(-0.5f,1.0f,-15.5f), 1.0f); + + gjk_result gjk; + if (poly_hit_capsule(&gjk, pyr, c)) + ddraw_color(RED); + else ddraw_color(WHITE); + + ddraw_capsule(c.a, c.b, c.r); + ddraw_pyramid(vec3(-0.5f,-0.5f,-15.5f), 0.5f/*vec3(-0.5f,1.0f,-15.5f)*/, 1.0f); + + poly_free(&pyr); + + ddraw_box(gjk.p0, vec3(0.05f, 0.05f, 0.05f)); + ddraw_box(gjk.p1, vec3(0.05f, 0.05f, 0.05f)); + ddraw_line(gjk.p0, gjk.p1); + } + + { + // poly(Diamond)-Capsule (GJK) intersection*/ + + const float x = -10 + 0.4f*sin(dx); + const float y = 3.0f*cos(dy); + const float z = -15; + + capsule c = capsule(vec3(x,y-1.0f,z), vec3(x,y+1.0f,z), 0.2f); + poly dmd = diamond(vec3(-10.5f,-0.5f,-15.5f), vec3(-10.5f,1.0f,-15.5f), 0.5f); + + gjk_result gjk; + if (poly_hit_capsule(&gjk, dmd, c)) + ddraw_color(RED); + else ddraw_color(WHITE); + + ddraw_capsule(c.a, c.b, c.r); + ddraw_diamond(vec3(-10.5f,-0.5f,-15.5f), vec3(-10.5f,1.0f,-15.5f), 0.5f); + + poly_free(&dmd); + + ddraw_box(gjk.p0, vec3(0.05f, 0.05f, 0.05f)); + ddraw_box(gjk.p1, vec3(0.05f, 0.05f, 0.05f)); + ddraw_line(gjk.p0, gjk.p1); + } + + { + // poly(Diamond)-poly(Pyramid) (GJK) intersection*/ + + const float x = -20 + 0.4f*sin(dx); + const float y = 3.0f*cos(dy); + const float z = -15; + + poly pyr = pyramid(vec3(x,y-0.5f,z), vec3(x,y+1,z), 0.8f); + poly dmd = diamond(vec3(-20.5f,-0.5f,-15.5f), vec3(-20.5f,1.0f,-15.5f), 0.5f); + + gjk_result gjk; + if (poly_hit_poly(&gjk, dmd, pyr)) + ddraw_color(RED); + else ddraw_color(WHITE); + + ddraw_pyramid(vec3(x,y-0.5f,z), 1/*vec3(x,y+1,z)*/, 1/*0.8f*/); + ddraw_diamond(vec3(-20.5f,-0.5f,-15.5f), vec3(-20.5f,1.0f,-15.5f), 0.5f); + + poly_free(&dmd); + poly_free(&pyr); + + ddraw_box(gjk.p0, vec3(0.05f, 0.05f, 0.05f)); + ddraw_box(gjk.p1, vec3(0.05f, 0.05f, 0.05f)); + ddraw_line(gjk.p0, gjk.p1); + } + { + // poly(Pyramid)-poly(Diamond) (GJK) intersection*/ + + const float x = 10 + 0.4f*sin(dx); + const float y = 3.0f*cos(dy); + const float z = -15; + + poly dmd = diamond(vec3(x,y-0.5f,z), vec3(x,y+1,z), 0.5f); + poly pyr = pyramid(vec3(10.5f,-0.5f,-15.5f), vec3(10.5f,1.0f,-15.5f), 1.0f); + + gjk_result gjk; + if (poly_hit_poly(&gjk, dmd, pyr)) + ddraw_color(RED); + else ddraw_color(WHITE); + + ddraw_diamond(vec3(x,y-0.5f,z), vec3(x,y+1,z), 0.5f); + ddraw_pyramid(vec3(10.5f,-0.5f,-15.5f), 0.5f/*vec3(10.5f,1.0f,-15.5f)*/, 1.0f); + + poly_free(&dmd); + poly_free(&pyr); + + ddraw_box(gjk.p0, vec3(0.05f, 0.05f, 0.05f)); + ddraw_box(gjk.p1, vec3(0.05f, 0.05f, 0.05f)); + ddraw_line(gjk.p0, gjk.p1); + } + { + // poly(Diamond)-AABB (GJK) intersection*/ + + const float x = 20 + 0.4f*sin(dx); + const float y = 3.0f*cos(dy); + const float z = -15; + + poly dmd = diamond(vec3(x,y-0.5f,z), vec3(x,y+1,z), 0.5f); + aabb a = aabb(vec3(19.5f,-0.5f,-14.5f), vec3(20.5f,0.5f,-15.5f)); + + gjk_result gjk; + if (poly_hit_aabb(&gjk, dmd, a)) + ddraw_color(RED); + else ddraw_color(WHITE); + + poly_free(&dmd); + + ddraw_diamond(vec3(x,y-0.5f,z), vec3(x,y+1,z), 0.5f); + ddraw_box(vec3(20,0,-15), vec3(1,1,1)); + + ddraw_box(gjk.p0, vec3(0.05f, 0.05f, 0.05f)); + ddraw_box(gjk.p1, vec3(0.05f, 0.05f, 0.05f)); + ddraw_line(gjk.p0, gjk.p1); + } +} #line 0 #line 1 "v4k_cook.c" -// data pipeline -// - rlyeh, public domain. -// ---------------------------------------------------------------------------- -// @todo: threads should steal workloads from job queue -// @todo: restore errno/errorlevel checks -// @todo: +=, -=, that_asset.ini -// @todo: @dae FLAGS+=-U -// @todo: SF2_SOUNDBANK=TOOLS/soundbank.sf2 -// @fixme: leaks (worth?) -// ----------------------------------------------------------------------------- - -#ifndef COOK_INI_PATHFILE -#define COOK_INI_PATHFILE "tools/cook.ini" -#endif - -const char *ART = "art/"; -const char *TOOLS = "tools/bin/"; -const char *EDITOR = "tools/"; -const char *COOK_INI = COOK_INI_PATHFILE; - -static unsigned ART_SKIP_ROOT; // number of chars to skip the base root in ART folder -static unsigned ART_LEN; // dupe - -typedef struct cook_subscript_t { - char *infile; - char *outfile; // can be either infile, or a totally different file - char *script; - char *outname; - int compress_level; - uint64_t pass_ns, gen_ns, exe_ns, zip_ns; -} cook_subscript_t; - -typedef struct cook_script_t { - cook_subscript_t cs[8]; - int num_passes; - uint64_t pass_ns, gen_ns, exe_ns, zip_ns; -} cook_script_t; - -static -cook_script_t cook_script(const char *rules, const char *infile, const char *outfile) { - cook_script_t mcs = { 0 }; - - // pass loop: some asset rules may require multiple cook passes - for( int pass = 0; pass < countof(mcs.cs); ++pass ) { - // by default, assume: - // - no script is going to be generated (empty script) - // - if no script is going to be generated, output is in fact input file. - // - no compression is going to be required. - cook_subscript_t cs = { 0 }; - cs.gen_ns -= time_ns(); - - // reuse script heap from last call if possible (optimization) - static __thread char *script = 0; - if(script) script[0] = 0; - - // reuse parsing maps if possible (optimization) - static __thread map(char*, char*) symbols = 0; if(!symbols) map_init_str(symbols); - static __thread map(char*, char*) groups = 0; if(!groups) map_init_str(groups); - static __thread set(char*) passes = 0; if(!passes) set_init_str(passes); - map_clear(symbols); - map_clear(groups); - - - map_find_or_add(symbols, "INFILE", STRDUP(infile)); - map_find_or_add(symbols, "INPUT", STRDUP(infile)); - map_find_or_add(symbols, "PRETTY", STRDUP(infile + ART_SKIP_ROOT)); // pretty (truncated) input (C:/prj/V4K/art/file.wav -> file.wav) - map_find_or_add(symbols, "OUTPUT", STRDUP(outfile)); - map_find_or_add(symbols, "TOOLS", STRDUP(TOOLS)); - map_find_or_add(symbols, "EDITOR", STRDUP(EDITOR)); - map_find_or_add(symbols, "PROGRESS", STRDUP(va("%03d", cook_progress()))); - - // clear pass counter - set_clear(passes); - - // start parsing. parsing is enabled by default - int enabled = 1; - array(char*)lines = strsplit(rules, "\r\n"); - for( int i = 0, end = array_count(lines); i < end; ++i ) { - // skip blanks - int blanks = strspn(lines[i], " \t"); - char *line = lines[i] + blanks; - - // discard full comments - if( line[0] == ';' ) continue; - // truncate inline comments - if( strstr(line, ";") ) *strstr(line, ";") = 0; - // trim ending spaces - char *eos = line + strlen(line); while(eos > line && eos[-1] == ' ' ) *--eos = 0; - // discard non-specific lines - if( line[0] == '@' ) { - int with_wine = flag("--cook-wine") && !!strstr(line, "@win"); - int parse = 0 - | ifdef(win32, (!!strstr(line, "@win")), 0) - | ifdef(linux, (!!strstr(line, "@lin") ? 1 : with_wine), 0) - | ifdef(osx, (!!strstr(line, "@osx") ? 1 : with_wine), 0); - - if( !parse ) continue; - - line = strchr(line+1, ' '); - if(!line) continue; - line += strspn(line, " \t"); - } - // execute `shell` commands - if( line[0] == '`' ) { - char *eos = strrchr(++line, '`'); - if( eos ) *eos = 0; - - // replace all symbols - char* nl = STRDUP(line); // @leak - for each_map(symbols, char*, key, char*, val) { - strrepl(&nl, key, val); - } - lines[i] = line = nl; - -#if 0 - static thread_mutex_t lock, *init = 0; if(!init) thread_mutex_init(init = &lock); - thread_mutex_lock( &lock ); - system(line); // strcatf(&script, "%s\n", line); - thread_mutex_unlock( &lock ); -#else - // append line - strcatf(&script, "%s\n", line); -#endif - - continue; - } - // process [sections] - if( line[0] == '[' ) { - enabled = 1; - int is_cook = !!strstr(line, "[cook]"); - int is_compress = !!strstr(line, "[compress]"); - if( !is_cook && !is_compress ) { // if not a special section... - // remove hint cook tag if present. that's informative only. - if(strbegi(line, "[cook ") ) memcpy(line+1, " ", 4); // line += 6; - - // start parsing expressions like `[media && !avi && mp3]` - array(char*) tags = strsplit(line, " []&"); - - // let's check whether INPUT belongs to tags above - char **INPUT = map_find(symbols, "INPUT"); - bool found_in_set = true; - - for( int i = 0, end = array_count(tags); i < end; ++i) { - bool negate = false; - char *tag = tags[i]; - while(*tag == '!') negate ^= 1, ++tag; - - // find tag in groups map - // either a group or an extension - char **is_group = map_find(groups, tag); - if( is_group ) { - char *list = *is_group; - char *INPUT_EXT = file_ext(infile); INPUT_EXT = strrchr(INPUT_EXT, '.'); // .ext1.ext -> .ext - char *ext = INPUT_EXT; ext += ext[0] == '.'; // dotless - bool in_list = strbegi(list, ext) || strendi(list, va(",%s",ext)) || strstri(list, va(",%s,",ext)); - if( !in_list ^ negate ) { found_in_set = false; break; } - } else { - char *ext = va(".%s", tag); - bool found = !!strendi(*INPUT, ext); - if( !found ^ negate ) { found_in_set = false; break; } - } - } - if( found_in_set ) { - // inc pass - set_find_or_add(passes, STRDUP(*tags)); // @leak - // check whether we keep searching - int num_passes = set_count(passes); - found_in_set = ( pass == (num_passes-1) ); - } - // - enabled = found_in_set ? 1 : 0; - } - } - // either SYMBOL=, group=, or regular script line - if( enabled && line[0] != '[' ) { - enum { group, symbol, regular } type = regular; - int tokenlen = strspn(line, "-+_.|0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"); - char *token = va("%.*s", tokenlen, line); - char *equal = strchr(line, '='); - if( equal ) { - if( equal == &line[tokenlen] ) { // if key=value expression found - // discriminate: symbols are uppercase and never begin with digits. groups are [0-9]+[|][a-z]. - type = strcmp(strupper(token), token) || isdigit(token[0]) ? group : symbol; - } - } - if( type == group ) map_find_or_add(groups, token, STRDUP(equal+1)); - if( type == symbol ) { - // @todo: perform the replacement/union/intersection on set here - bool is_add = strendi(token, "+"); - bool is_del = strendi(token, "-"); - - // if present, remove last sign from token -> (FLAGS1+)=, (FLAGS1-)= - if(is_add || is_del) token[strlen(token) - 1] = 0; - - map_find_or_add(symbols, token, STRDUP(equal+1)); - } - // for each_map(symbols, char*, key, char*, val) printf("%s=%s,", key, val); puts(""); - // for each_map(groups, char*, key, char*, val) printf("%s=%s,", key, val); puts(""); - // if( type != regular ) printf("%s found >> %s\n", type == group ? "group" : "symbol", line); - - if( type == regular ) { - char** INPUT = map_find(symbols, "INPUT"); - char** OUTPUT = map_find(symbols, "OUTPUT"); - - // parse return code - char *has_errorlevel = strstr(line, "=="); //==N form - int errorlevel = has_errorlevel ? atoi(has_errorlevel + 2) : 0; - if( has_errorlevel ) memcpy(has_errorlevel, " ", 3); - - // detect if newer extension or filename is present, and thus update OUTPUT if needed - char *newer_extension = strstr(line, "->"); if(newer_extension) { - *newer_extension = 0; - newer_extension += 2 + strspn(newer_extension + 2, " "); - - if( strchr(newer_extension, '.') ) { - // newer filename - cs.outname = stringf("%s@%s", cs.outname ? cs.outname : infile, newer_extension); // @leak // special char (multi-pass cooks) - newer_extension = NULL; - } else { - strcatf(&*OUTPUT, ".%s", newer_extension); - } - } - - // replace all symbols - char* nl = STRDUP(line); // @leak - for each_map(symbols, char*, key, char*, val) { - strrepl(&nl, key, val); - } - lines[i] = line = nl; - - // convert slashes - ifdef(win32, - strswap(line, "/", "\\") - , // else - strswap(line, "\\", "/") - ); - - // append line - strcatf(&script, "%s\n", line); - - // handle return code here - // if(has_errorlevel) - // strcatf(&script, "IF NOT '%%ERRORLEVEL%%'=='%d' echo ERROR!\n", errorlevel); - - // rename output->input for further chaining, in case it is needed - if( newer_extension ) { - *INPUT[0] = 0; - strcatf(&*INPUT, "%s", *OUTPUT); - } - } - } - } - - char** OUTPUT = map_find(symbols, "OUTPUT"); - int ext_num_groups = 0; - - // compression - if( 1 ) { - char* ext = file_ext(infile); ext = strrchr(ext, '.'); ext += ext[0] == '.'; // dotless INPUT_EXT - char* belongs_to = 0; - for each_map(groups, char*, key, char*, val) { - if( !isdigit(key[0]) ) { - char *comma = va(",%s,", ext); - if( !strcmpi(val,ext) || strbegi(val, comma+1) || strstri(val, comma) || strendi(val, va(",%s", ext))) { - belongs_to = key; - ext_num_groups++; - } - } - } - char *compression = 0; - for each_map_ptr_sorted(groups, char*, key, char*, val) { // sorted iteration, so hopefully '0' no compression gets evaluated first - if( !compression && isdigit((*key)[0]) ) { - char *comma = va(",%s,", ext); - if( !strcmpi(*val,ext) || strbegi(*val, comma+1) || strstri(*val, comma) || strendi(*val, va(",%s", ext))) { - compression = (*key); - } - comma = va(",%s,", belongs_to); - if( !strcmpi(*val,ext) || strbegi(*val, comma+1) || strstri(*val, comma) || strendi(*val, va(",%s", ext))) { - compression = (*key); - } - } - } - - cs.compress_level = 0; - if( compression ) { - // last chance to optionally override the compressor at command-line level - static const char *compressor_override; - do_once compressor_override = option("--cook-compressor", ""); - if( compressor_override[0] ) compression = (char*)compressor_override; - - /**/ if(strstri(compression, "PPP")) cs.compress_level = atoi(compression) | PPP; - else if(strstri(compression, "ULZ")) cs.compress_level = atoi(compression) | ULZ; - else if(strstri(compression, "LZ4")) cs.compress_level = atoi(compression) | LZ4X; - else if(strstri(compression, "CRSH")) cs.compress_level = atoi(compression) | CRSH; - else if(strstri(compression, "DEFL")) cs.compress_level = isdigit(compression[0]) ? atoi(compression) : 6 /*| DEFL*/; - //else if(strstri(compression, "LZP")) cs.compress_level = atoi(compression) | LZP1; // not supported - else if(strstri(compression, "LZMA")) cs.compress_level = atoi(compression) | LZMA; - else if(strstri(compression, "BALZ")) cs.compress_level = atoi(compression) | BALZ; - else if(strstri(compression, "LZW")) cs.compress_level = atoi(compression) | LZW3; - else if(strstri(compression, "LZSS")) cs.compress_level = atoi(compression) | LZSS; - else if(strstri(compression, "BCM")) cs.compress_level = atoi(compression) | BCM; - else cs.compress_level = isdigit(compression[0]) ? atoi(compression) : 6 /*| DEFL*/; - } - } - - // if script was generated... - if( script && script[0] && strstr(script, ifdef(win32, file_normalize(va("%s",infile)), infile )) ) { - // update outfile - cs.outfile = *OUTPUT; - - // amalgamate script - array(char*) lines = strsplit(script, "\r\n"); - - #if is(win32) - char *joint = strjoin(lines, " && "); - cs.script = joint; - #else - if( flag("--cook-wine") ) { - // dear linux/osx/bsd users: - // tools going wrong for any reason? cant compile them maybe? - // small hack to use win32 pipeline tools instead - char *joint = strjoin(lines, " && wine " ); - cs.script = va("wine %s", /*TOOLS,*/ joint); - } else { - char *joint = strjoin(lines, " && " ); - cs.script = va("export LD_LIBRARY_PATH=%s && %s", TOOLS, joint); - } - #endif - } else { - // if( script && script[0] ) system(script); //< @todo: un-comment this line if we want to get the shell command prints invoked per entry - - // ... else bypass infile->outfile - char** INFILE = map_find(symbols, "INFILE"); - cs.outfile = *INFILE; - - // and return an empty script - cs.script = ""; - } - - cs.outname = cs.outname ? cs.outname : (char*)infile; - cs.gen_ns += time_ns(); - - ASSERT(mcs.num_passes < countof(mcs.cs)); - mcs.cs[mcs.num_passes++] = cs; - - bool next_pass_required = mcs.num_passes < ext_num_groups; - if( !next_pass_required ) break; - } - - return mcs; -} - -// ---------------------------------------------------------------------------- - -struct fs { - char *fname, status; - uint64_t stamp; - uint64_t bytes; -}; - -static array(struct fs) fs_now; -static __thread array(char*) added; -static __thread array(char*) changed; -static __thread array(char*) deleted; -static __thread array(char*) uncooked; - -static -array(struct fs) zipscan_filter(int threadid, int numthreads) { - // iterate all previously scanned files - array(struct fs) fs = 0; - for( int i = 0, end = array_count(fs_now); i < end; ++i ) { - // during workload distribution, we assign random files to specific thread buckets. - // we achieve this by hashing the basename of the file. we used to hash also the path - // long time ago but that is less resilient to file relocations across the repository. - // excluding the file extension from the hash also helps from external file conversions. - char *fname = file_name(fs_now[i].fname); - char *sign = strrchr(fname, '@'); if(sign) *sign = '\0'; // special char (multi-pass cooks) - char *dot = strrchr(fname, '.'); if(dot) *dot = '\0'; - - // skip if list item does not belong to this thread bucket - uint64_t hash = hash_str(fname); - unsigned bucket = (hash /*>> 32*/) % numthreads; - if(bucket != threadid) continue; - - array_push(fs, fs_now[i]); - } - return fs; -} - -static -int zipscan_diff( zip* old, array(struct fs) now ) { - array_free(added); - array_free(changed); - array_free(deleted); - array_free(uncooked); - - // if not zipfile is present, all files are new and must be added - if( !old ) { - for( int i = 0; i < array_count(now); ++i ) { - array_push(uncooked, STRDUP(now[i].fname)); - } - return 1; - } - - // compare for new & changed files - for( int i = 0; i < array_count(now); ++i ) { - int found = zip_find(old, now[i].fname); - if( found < 0 ) { - array_push(added, STRDUP(now[i].fname)); - array_push(uncooked, STRDUP(now[i].fname)); - } else { - uint64_t oldsize = atoi64(zip_comment(old,found)); // zip_size(old, found); returns sizeof processed asset. return original size of unprocessed asset, which we store in comment section - uint64_t oldstamp = atoi64(zip_modt(old,found)+20); // format is "YYYY/MM/DD hh:mm:ss", then +20 chars later a hidden epoch timestamp in base10 can be found - int64_t diffstamp = oldstamp < now[i].stamp ? now[i].stamp - oldstamp : oldstamp - now[i].stamp; - if( oldsize != now[i].bytes || diffstamp > 1 ) { // @fixme: should use hash instead. hashof(tool) ^ hashof(args used) ^ hashof(rawsize) ^ hashof(rawdate) - printf("%s:\t%u vs %u, %llu vs %llu\n", now[i].fname, (unsigned)oldsize,(unsigned)now[i].bytes, (long long unsigned)oldstamp, (long long unsigned)now[i].stamp); - array_push(changed, STRDUP(now[i].fname)); - array_push(uncooked, STRDUP(now[i].fname)); - } - } - } - // compare for deleted files - for( int i = 0; i < zip_count(old); ++i ) { - char *oldname = zip_name(old, i); - //if( strchr(oldname, '@') ) oldname = va("%*.s", (int)(strchr(oldname, '@') - oldname), oldname ); // special char (multi-pass cooks) - - int idx = zip_find(old, oldname); // find latest versioned file in zip - unsigned oldsize = zip_size(old, idx); - if (!oldsize) continue; - - struct fs *found = 0; // zipscan_locate(now, oldname); - for(int j = 0; j < array_count(now); ++j) { - if( !strcmp(now[j].fname,oldname)) { - found = &now[j]; - break; - } - } - - if( !found ) { - array_push(deleted, STRDUP(oldname)); - } - } - return 1; -} - -// ---------------------------------------------------------------------------- - -typedef struct cook_worker { - const char **files; - const char *rules; - int threadid, numthreads; - thread_ptr_t self; - volatile int progress; - thread_mutex_t *lock; -} cook_worker; - -enum { JOBS_MAX = 256 }; -static cook_worker jobs[JOBS_MAX] = {0}; -static volatile bool cook_cancelable = false, cook_cancelling = false, cook_debug = false; - -#ifndef COOK_ON_DEMAND -#define COOK_ON_DEMAND ifdef(cook, optioni("--cook-on-demand", 0), false) -#endif - -static -int cook(void *userdata) { - cook_worker *job = (cook_worker*)userdata; - - // start progress - volatile int *progress = &job->progress; - *progress = 0; - - // preload a few large binaries -// dll("tools/furnace.exe", 0); -// dll("tools/assimp-vc143-mt.dll", 0); -// dll("tools/ffmpeg.exe", 0); - - // scan disk from fs_now snapshot - array(struct fs) filtered = zipscan_filter(job->threadid, job->numthreads); - //printf("Scanned: %d items found\n", array_count(now)); - - // prepare out tempname - char COOK_TMPFILE[64]; snprintf(COOK_TMPFILE, 64, "temp_%02d", job->threadid); - - // prepare zip - char zipfile[64]; snprintf(zipfile, 64, ".art[%02x].zip", job->threadid); - if( file_size(zipfile) == 0 ) unlink(zipfile); - - // populate added/deleted/changed arrays by examining current disk vs last cache - zip *z; - { - z = zip_open(zipfile, "r+b"); - zipscan_diff(z, filtered); - if( z ) zip_close(z); - - fflush(0); - - z = zip_open(zipfile, "a+b"); - if( !z ) { - unlink(zipfile); - z = zip_open(zipfile, "a+b"); // try again - if(!z) PANIC("cannot open file for updating: %s", zipfile); - } - } - - // deleted files. --cook-additive runs are append-only, so they skip this block - if( !flag("--cook-additive") ) - for( int i = 0, end = array_count(deleted); i < end; ++i ) { - printf("Deleting %03d%% %s\n", (i+1) == end ? 100 : (i * 100) / end, deleted[i]); - FILE* out = fopen(COOK_TMPFILE, "wb"); fclose(out); - FILE* in = fopen(COOK_TMPFILE, "rb"); - char *comment = "0"; - zip_append_file/*_timeinfo*/(z, deleted[i], comment, in, 0/*, tm_now*/); - fclose(in); - } - -// if(array_count(uncooked)) -// PRINTF("cook_jobs[%d]=%d\n", job->threadid, array_count(uncooked)); - - // generate cook metrics. you usually do `game.exe --cook-stats && (type *.csv | sort /R > cook.csv)` - static __thread FILE *statsfile = 0; - if(flag("--cook-stats")) - fseek(statsfile = fopen(va("cook%d.csv",job->threadid), "a+t"), 0L, SEEK_END); - if(statsfile && !job->threadid && ftell(statsfile) == 0) fprintf(statsfile,"%10s,%10s,%10s,%10s,%10s, %s\n","+total_ms","gen_ms","exe_ms","zip_ms","pass","file"); - - // added or changed files - for( int i = 0, end = array_count(uncooked); i < end && !cook_cancelling; ++i ) { - *progress = ((i+1) == end ? 90 : (i * 90) / end); // (i+i>0) * 100.f / end; - - // start cook - const char *infile = uncooked[i]; //job->files[j]; - int inlen = file_size(infile); - - // generate a cooking script for this asset - cook_script_t mcs = cook_script(job->rules, infile, COOK_TMPFILE); - // puts(cs.script); - - for(int pass = 0; pass < mcs.num_passes; ++pass) { - cook_subscript_t cs = mcs.cs[pass]; - - // log to batch file for forensic purposes, if explicitly requested - static __thread int logging = -1; if(logging < 0) logging = !!flag("--cook-debug") || cook_debug; - if( logging ) { - static __thread FILE *logfile = 0; if(!logfile) fseek(logfile = fopen(va("cook%d.cmd",job->threadid), "a+t"), 0L, SEEK_END); - if( logfile ) { - fprintf(logfile, "@rem %s\n%s\n", cs.outname, cs.script); - fprintf(logfile, "for %%%%i in (\"%s\") do md _cook\\%%%%~pi\\%%%%~ni%%%%~xi 1>nul 2>nul\n", infile); - fprintf(logfile, "for %%%%i in (\"%s\") do xcopy /y %s _cook\\%%%%~pi\\%%%%~ni%%%%~xi\n\n", infile, file_normalize(cs.outfile)); - } - } - - // invoke cooking script - mcs.cs[pass].exe_ns -= time_ns(); - // invoke cooking script - const char *rc_output = app_exec(cs.script); - // recap status - int rc = atoi(rc_output); - // int outlen = file_size(cs.outfile); - int failed = rc; // cs.script[0] ? rc || !outlen : 0; - // print errors - if( failed ) { - PRINTF("Import failed: %s while executing:\n%s\nReturned:\n%s\n", cs.outname, cs.script, rc_output); - continue; - } - if( pass > 0 ) { // (multi-pass cook) - // newly generated file: refresh values - // ensure newly created files by cook are also present on repo/disc for further cook passes - file_delete(cs.outname); - file_move(cs.outfile, cs.outname); - inlen = file_size(infile = cs.outfile = cs.outname); - } - mcs.cs[pass].exe_ns += time_ns(); - - // process only if included. may include optional compression. - mcs.cs[pass].zip_ns -= time_ns(); - if( cs.compress_level >= 0 ) { - FILE *in = fopen(cs.outfile ? cs.outfile : infile, "rb"); - if(!in) in = fopen(infile, "rb"); - - char *comment = va("%d", inlen); - if( !zip_append_file(z, infile, comment, in, cs.compress_level) ) { - PANIC("failed to add processed file into %s: %s(%s)", zipfile, cs.outname, infile); - } - - fclose(in); - } - mcs.cs[pass].zip_ns += time_ns(); - - // stats per subscript - mcs.cs[pass].pass_ns = mcs.cs[pass].gen_ns + mcs.cs[pass].exe_ns + mcs.cs[pass].zip_ns; - if(statsfile) fprintf(statsfile, "%10.f,%10.f,%10.f,%10.f,%10d, \"%s\"\n", mcs.cs[pass].pass_ns/1e6, mcs.cs[pass].gen_ns/1e6, mcs.cs[pass].exe_ns/1e6, mcs.cs[pass].zip_ns/1e6, pass+1, infile); - } - } - - zip_close(z); - - // end progress - if( file_size(zipfile) == 0 ) unlink(zipfile); - *progress = 100; - - return 1; -} - -static -int cook_async( void *userdata ) { -#if COOK_FROM_TERMINAL - // nothing to do... -#else - while(!window_handle()) sleep_ms(100); // wait for window handle to be created -#endif - - // boost cook thread #0, which happens to be the only spawn thread when num_jobs=1 (tcc case, cook-sync case). - // also in multi-threaded scenarios, it is not bad at all to have one high priority thread... - // in any case, game view is not going to look bad because the game will be displaying a progress bar at that time. - cook_worker *job = (cook_worker*)userdata; - if( job->threadid == 0 ) thread_set_high_priority(); - - // tcc: only a single running thread shall pass, because of racing shared state due to missing thread_local support at compiler level - ifdef(tcc, thread_mutex_lock( job->lock )); - ifdef(osx, thread_mutex_lock( job->lock )); // @todo: remove silicon mac M1 hack - - int ret = cook(userdata); - - // tcc: only a single running thread shall pass, because of racing shared state due to missing thread_local support at compiler level - ifdef(osx, thread_mutex_unlock( job->lock )); // @todo: remove silicon mac M1 hack - ifdef(tcc, thread_mutex_unlock( job->lock )); - - thread_exit( ret ); - return ret; -} - -bool cook_start( const char *cook_ini, const char *masks, int flags ) { - cook_ini = cook_ini ? cook_ini : COOK_INI; - - char *rules_ = file_read(cook_ini); - if(!rules_ || rules_[0] == 0) return false; - - static char *rules; do_once rules = STRDUP(rules_); - - do_once { - #if 0 - const char *HOME = file_pathabs(cook_ini); // ../tools/cook.ini -> c:/prj/v4k/tools/cook.ini - if( strbeg(HOME, app_path() ) ) HOME = STRDUP( file_path( HOME += strlen(app_path()) ) ); // -> tools/ @leak - #else - char *HOME = STRDUP(file_pathabs(cook_ini)); // ../tools/cook.ini -> c:/prj/v4k/tools/cook.ini - HOME[ strlen(HOME) - strlen(file_name(cook_ini)) ] = '\0'; // -> tools/ @leak - #endif - - ART_LEN = 0; //strlen(app_path()); - /* = MAX_PATH; - for each_substring(ART, ",", art_folder) { - ART_LEN = mini(ART_LEN, strlen(art_folder)); - }*/ - - if( strstr(rules, "ART=") ) { - ART = va( "%s", strstr(rules, "ART=") + 4 ); - char *r = strchr( ART, '\r' ); if(r) *r = 0; - char *n = strchr( ART, '\n' ); if(n) *n = 0; - char *s = strchr( ART, ';' ); if(s) *s = 0; - char *w = strchr( ART, ' ' ); if(w) *w = 0; - char *out = 0; const char *sep = ""; - for each_substring(ART, ",", t) { - char *tmp = file_pathabs(va("%s%s", HOME, t)) + ART_LEN; - for(int i = 0; tmp[i]; ++i) if(tmp[i]=='\\') tmp[i] = '/'; - strcatf(&out, "%s%s%s", sep, tmp, strendi(tmp, "/") ? "" : "/"); - assert( out[strlen(out) - 1] == '/' ); - - sep = ","; - } - ART = out; // @leak - } - - if( strstr(rules, "TOOLS=") ) { - TOOLS = va( "%s", strstr(rules, "TOOLS=") + 6 ); - char *r = strchr( TOOLS, '\r' ); if(r) *r = 0; - char *n = strchr( TOOLS, '\n' ); if(n) *n = 0; - char *s = strchr( TOOLS, ';' ); if(s) *s = 0; - char *w = strchr( TOOLS, ' ' ); if(w) *w = 0; - char *cat = va("%s%s", HOME, TOOLS), *out = 0; - for(int i = 0; cat[i]; ++i) if(cat[i]=='\\') cat[i] = '/'; - strcatf(&out, "%s%s", cat, strend(cat, "/") ? "" : "/"); - TOOLS = out; // @leak - assert( TOOLS[strlen(TOOLS) - 1] == '/' ); - - // last chance to autodetect tools folder (from cook.ini path) - if( !file_directory(TOOLS) ) { - out = STRDUP(cook_ini); - for(int i = 0; out[i]; ++i) if(out[i]=='\\') out[i] = '/'; - TOOLS = out; // @leak - } - } - - if( strstr(rules, "EDITOR=") ) { - EDITOR = va( "%s", strstr(rules, "EDITOR=") + 7 ); - char *r = strchr( EDITOR, '\r' ); if(r) *r = 0; - char *n = strchr( EDITOR, '\n' ); if(n) *n = 0; - char *s = strchr( EDITOR, ';' ); if(s) *s = 0; - char *w = strchr( EDITOR, ' ' ); if(w) *w = 0; - char *cat = va("%s%s", HOME, EDITOR), *out = 0; - for(int i = 0; cat[i]; ++i) if(cat[i]=='\\') cat[i] = '/'; - strcatf(&out, "%s%s", cat, strend(cat, "/") ? "" : "/"); - EDITOR = out; // @leak - assert( EDITOR[strlen(EDITOR) - 1] == '/' ); - } - - // small optimization for upcoming parser: remove whole comments from file - array(char*) lines = strsplit(rules, "\r\n"); - for( int i = 0; i < array_count(lines); ) { - if( lines[i][0] == ';' ) array_erase_slow(lines, i); - else ++i; - } - rules = STRDUP( strjoin(lines, "\n") ); - } - - if( !masks ) { - return true; // nothing to do - } - - // estimate ART_SKIP_ROOT (C:/prj/v4k/demos/assets/file.png -> strlen(C:/prj/v4k/) -> 11) - { - array(char*) dirs = 0; - for each_substring(ART, ",", art_folder) { - array_push(dirs, file_pathabs(art_folder)); - } - if( array_count(dirs) > 1 ) { - for( int ok = 1, ch = dirs[0][ART_SKIP_ROOT]; ch && ok; ch = dirs[0][++ART_SKIP_ROOT] ) { - for( int i = 1; i < array_count(dirs) && ok; ++i ) { - ok = dirs[i][ART_SKIP_ROOT] == ch; - } - } - } - while( ART_SKIP_ROOT > 0 && !strchr("\\/", dirs[0][ART_SKIP_ROOT-1]) ) --ART_SKIP_ROOT; - array_free(dirs); - } - - if( COOK_ON_DEMAND ) { - return true; // cooking is deferred - } - - // scan disk: all subfolders in ART (comma-separated) - static array(char *) list = 0; // @leak - for each_substring(ART, ",", art_folder) { - array(char *) glob = file_list(va("%s**",art_folder)); // art_folder ends with '/' - for( unsigned i = 0, end = array_count(glob); i < end; ++i ) { - const char *fname = glob[i]; - if( !strmatchi(fname, masks)) continue; - - // skip special files, folders and internal files like .art.zip - const char *dir = file_path(fname); - if( dir[0] == '.' ) continue; // discard system dirs and hidden files - if( strbegi(dir, TOOLS) ) continue; // discard tools folder - if( !file_ext(fname)[0] ) continue; // discard extensionless entries - if( !file_size(fname)) continue; // skip dirs and empty files - - // exclude vc c/c++ .obj files. they're not 3d wavefront .obj files - if( strend(fname, ".obj") ) { - char header[4] = {0}; - for( FILE *in = fopen(fname, "rb"); in; fclose(in), in = NULL) { - fread(header, 2, 1, in); - } - if( !memcmp(header, "\x64\x86", 2) ) continue; - if( !memcmp(header, "\x00\x00", 2) ) continue; - } - - char *dot = strrchr(fname, '.'); - if( dot ) { - char extdot[32]; - snprintf(extdot, 32, "%s.", dot); // .png -> .png. - // exclude vc/gcc/clang files - if( strstr(fname, ".a.o.pdb.lib.ilk.exp.dSYM.") ) // must end with dot - continue; - } - - // @todo: normalize path & rebase here (absolute to local) - // [...] - // fi.normalized = ; tolower->to_underscore([]();:+ )->remove_extra_underscores - - if (file_name(fname)[0] == '.') continue; // skip system files - if (file_name(fname)[0] == ';') continue; // skip comment files - - array_push(list, STRDUP(fname)); - } - } - - // inspect disk - for( int i = 0, end = array_count(list); i < end; ++i ) { - char *fname = list[i]; - - struct fs fi = {0}; - fi.fname = fname; // STRDUP(fname); - fi.bytes = file_size(fname); - fi.stamp = file_stamp10(fname); // timestamp in base10(yyyymmddhhmmss) - - array_push(fs_now, fi); - } - - cook_debug = !!( flags & COOK_DEBUGLOG ); - cook_cancelable = !!( flags & COOK_CANCELABLE ); - - // spawn all the threads - int num_jobs = cook_jobs(); - for( int i = 0; i < num_jobs; ++i ) { - jobs[i].self = 0; - jobs[i].threadid = i; - jobs[i].numthreads = flags & COOK_ASYNC ? num_jobs : 1; - jobs[i].files = (const char **)list; - jobs[i].rules = rules; - jobs[i].progress = -1; - static thread_mutex_t lock; do_once thread_mutex_init(&lock); - jobs[i].lock = &lock; - } - for( int i = 0; i < num_jobs; ++i ) { - if( flags & COOK_ASYNC ) { - jobs[i].self = thread_init(cook_async, &jobs[i], "cook_async()", 0/*STACK_SIZE*/); - continue; - } - - if(!cook(&jobs[i])) return false; - } - - return true; -} - -void cook_stop() { - // join all threads - int num_jobs = cook_jobs(); - for( int i = 0; i < num_jobs; ++i ) { - if(jobs[i].self) thread_join(jobs[i].self); - } - // remove all temporary outfiles - for each_array(file_list("temp_*"), char*, tempfile) unlink(tempfile); -} - -int cook_progress() { - int count = 0, sum = 0; - for( int i = 0, end = cook_jobs(); i < end; ++i ) { - sum += jobs[i].progress; - ++count; - } - return cook_jobs() ? sum / (count+!count) : 100; -} - -void cook_cancel() { - if( cook_cancelable ) cook_cancelling = true; -} - -int cook_jobs() { - int num_jobs = optioni("--cook-jobs", maxf(1.15,app_cores()) * 1.75), max_jobs = countof(jobs); - ifdef(ems, num_jobs = 0); - ifdef(retail, num_jobs = 0); - ifdef(nocook, num_jobs = 0); - return clampi(num_jobs, 0, max_jobs); -} - -void cook_config( const char *pathfile_to_cook_ini ) { // @todo: test run-from-"bin/" case on Linux. - COOK_INI = pathfile_to_cook_ini; - ASSERT( file_exist(COOK_INI) ); -} - -bool have_tools() { - static bool found; do_once found = file_exist(COOK_INI); - return ifdef(retail, false, found); -} +// data pipeline +// - rlyeh, public domain. +// ---------------------------------------------------------------------------- +// @todo: threads should steal workloads from job queue +// @todo: restore errno/errorlevel checks +// @todo: +=, -=, that_asset.ini +// @todo: @dae FLAGS+=-U +// @todo: SF2_SOUNDBANK=TOOLS/soundbank.sf2 +// @fixme: leaks (worth?) +// ----------------------------------------------------------------------------- + +#ifndef COOK_INI_PATHFILE +#define COOK_INI_PATHFILE "tools/cook.ini" +#endif + +const char *ART = "art/"; +const char *TOOLS = "tools/bin/"; +const char *EDITOR = "tools/"; +const char *COOK_INI = COOK_INI_PATHFILE; + +static unsigned ART_SKIP_ROOT; // number of chars to skip the base root in ART folder +static unsigned ART_LEN; // dupe + +typedef struct cook_subscript_t { + char *infile; + char *outfile; // can be either infile, or a totally different file + char *script; + char *outname; + int compress_level; + uint64_t pass_ns, gen_ns, exe_ns, zip_ns; +} cook_subscript_t; + +typedef struct cook_script_t { + cook_subscript_t cs[8]; + int num_passes; + uint64_t pass_ns, gen_ns, exe_ns, zip_ns; +} cook_script_t; + +static +cook_script_t cook_script(const char *rules, const char *infile, const char *outfile) { + cook_script_t mcs = { 0 }; + + // pass loop: some asset rules may require multiple cook passes + for( int pass = 0; pass < countof(mcs.cs); ++pass ) { + // by default, assume: + // - no script is going to be generated (empty script) + // - if no script is going to be generated, output is in fact input file. + // - no compression is going to be required. + cook_subscript_t cs = { 0 }; + cs.gen_ns -= time_ns(); + + // reuse script heap from last call if possible (optimization) + static __thread char *script = 0; + if(script) script[0] = 0; + + // reuse parsing maps if possible (optimization) + static __thread map(char*, char*) symbols = 0; if(!symbols) map_init_str(symbols); + static __thread map(char*, char*) groups = 0; if(!groups) map_init_str(groups); + static __thread set(char*) passes = 0; if(!passes) set_init_str(passes); + map_clear(symbols); + map_clear(groups); + + + map_find_or_add(symbols, "INFILE", STRDUP(infile)); + map_find_or_add(symbols, "INPUT", STRDUP(infile)); + map_find_or_add(symbols, "PRETTY", STRDUP(infile + ART_SKIP_ROOT)); // pretty (truncated) input (C:/prj/V4K/art/file.wav -> file.wav) + map_find_or_add(symbols, "OUTPUT", STRDUP(outfile)); + map_find_or_add(symbols, "TOOLS", STRDUP(TOOLS)); + map_find_or_add(symbols, "EDITOR", STRDUP(EDITOR)); + map_find_or_add(symbols, "PROGRESS", STRDUP(va("%03d", cook_progress()))); + + // clear pass counter + set_clear(passes); + + // start parsing. parsing is enabled by default + int enabled = 1; + array(char*)lines = strsplit(rules, "\r\n"); + for( int i = 0, end = array_count(lines); i < end; ++i ) { + // skip blanks + int blanks = strspn(lines[i], " \t"); + char *line = lines[i] + blanks; + + // discard full comments + if( line[0] == ';' ) continue; + // truncate inline comments + if( strstr(line, ";") ) *strstr(line, ";") = 0; + // trim ending spaces + char *eos = line + strlen(line); while(eos > line && eos[-1] == ' ' ) *--eos = 0; + // discard non-specific lines + if( line[0] == '@' ) { + int with_wine = flag("--cook-wine") && !!strstr(line, "@win"); + int parse = 0 + | ifdef(win32, (!!strstr(line, "@win")), 0) + | ifdef(linux, (!!strstr(line, "@lin") ? 1 : with_wine), 0) + | ifdef(osx, (!!strstr(line, "@osx") ? 1 : with_wine), 0); + + if( !parse ) continue; + + line = strchr(line+1, ' '); + if(!line) continue; + line += strspn(line, " \t"); + } + // execute `shell` commands + if( line[0] == '`' ) { + char *eos = strrchr(++line, '`'); + if( eos ) *eos = 0; + + // replace all symbols + char* nl = STRDUP(line); // @leak + for each_map(symbols, char*, key, char*, val) { + strrepl(&nl, key, val); + } + lines[i] = line = nl; + +#if 0 + static thread_mutex_t lock, *init = 0; if(!init) thread_mutex_init(init = &lock); + thread_mutex_lock( &lock ); + system(line); // strcatf(&script, "%s\n", line); + thread_mutex_unlock( &lock ); +#else + // append line + strcatf(&script, "%s\n", line); +#endif + + continue; + } + // process [sections] + if( line[0] == '[' ) { + enabled = 1; + int is_cook = !!strstr(line, "[cook]"); + int is_compress = !!strstr(line, "[compress]"); + if( !is_cook && !is_compress ) { // if not a special section... + // remove hint cook tag if present. that's informative only. + if(strbegi(line, "[cook ") ) memcpy(line+1, " ", 4); // line += 6; + + // start parsing expressions like `[media && !avi && mp3]` + array(char*) tags = strsplit(line, " []&"); + + // let's check whether INPUT belongs to tags above + char **INPUT = map_find(symbols, "INPUT"); + bool found_in_set = true; + + for( int i = 0, end = array_count(tags); i < end; ++i) { + bool negate = false; + char *tag = tags[i]; + while(*tag == '!') negate ^= 1, ++tag; + + // find tag in groups map + // either a group or an extension + char **is_group = map_find(groups, tag); + if( is_group ) { + char *list = *is_group; + char *INPUT_EXT = file_ext(infile); INPUT_EXT = strrchr(INPUT_EXT, '.'); // .ext1.ext -> .ext + char *ext = INPUT_EXT; ext += ext[0] == '.'; // dotless + bool in_list = strbegi(list, ext) || strendi(list, va(",%s",ext)) || strstri(list, va(",%s,",ext)); + if( !in_list ^ negate ) { found_in_set = false; break; } + } else { + char *ext = va(".%s", tag); + bool found = !!strendi(*INPUT, ext); + if( !found ^ negate ) { found_in_set = false; break; } + } + } + if( found_in_set ) { + // inc pass + set_find_or_add(passes, STRDUP(*tags)); // @leak + // check whether we keep searching + int num_passes = set_count(passes); + found_in_set = ( pass == (num_passes-1) ); + } + // + enabled = found_in_set ? 1 : 0; + } + } + // either SYMBOL=, group=, or regular script line + if( enabled && line[0] != '[' ) { + enum { group, symbol, regular } type = regular; + int tokenlen = strspn(line, "-+_.|0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"); + char *token = va("%.*s", tokenlen, line); + char *equal = strchr(line, '='); + if( equal ) { + if( equal == &line[tokenlen] ) { // if key=value expression found + // discriminate: symbols are uppercase and never begin with digits. groups are [0-9]+[|][a-z]. + type = strcmp(strupper(token), token) || isdigit(token[0]) ? group : symbol; + } + } + if( type == group ) map_find_or_add(groups, token, STRDUP(equal+1)); + if( type == symbol ) { + // @todo: perform the replacement/union/intersection on set here + bool is_add = strendi(token, "+"); + bool is_del = strendi(token, "-"); + + // if present, remove last sign from token -> (FLAGS1+)=, (FLAGS1-)= + if(is_add || is_del) token[strlen(token) - 1] = 0; + + map_find_or_add(symbols, token, STRDUP(equal+1)); + } + // for each_map(symbols, char*, key, char*, val) printf("%s=%s,", key, val); puts(""); + // for each_map(groups, char*, key, char*, val) printf("%s=%s,", key, val); puts(""); + // if( type != regular ) printf("%s found >> %s\n", type == group ? "group" : "symbol", line); + + if( type == regular ) { + char** INPUT = map_find(symbols, "INPUT"); + char** OUTPUT = map_find(symbols, "OUTPUT"); + + // parse return code + char *has_errorlevel = strstr(line, "=="); //==N form + int errorlevel = has_errorlevel ? atoi(has_errorlevel + 2) : 0; + if( has_errorlevel ) memcpy(has_errorlevel, " ", 3); + + // detect if newer extension or filename is present, and thus update OUTPUT if needed + char *newer_extension = strstr(line, "->"); if(newer_extension) { + *newer_extension = 0; + newer_extension += 2 + strspn(newer_extension + 2, " "); + + if( strchr(newer_extension, '.') ) { + // newer filename + cs.outname = stringf("%s@%s", cs.outname ? cs.outname : infile, newer_extension); // @leak // special char (multi-pass cooks) + newer_extension = NULL; + } else { + strcatf(&*OUTPUT, ".%s", newer_extension); + } + } + + // replace all symbols + char* nl = STRDUP(line); // @leak + for each_map(symbols, char*, key, char*, val) { + strrepl(&nl, key, val); + } + lines[i] = line = nl; + + // convert slashes + ifdef(win32, + strswap(line, "/", "\\") + , // else + strswap(line, "\\", "/") + ); + + // append line + strcatf(&script, "%s\n", line); + + // handle return code here + // if(has_errorlevel) + // strcatf(&script, "IF NOT '%%ERRORLEVEL%%'=='%d' echo ERROR!\n", errorlevel); + + // rename output->input for further chaining, in case it is needed + if( newer_extension ) { + *INPUT[0] = 0; + strcatf(&*INPUT, "%s", *OUTPUT); + } + } + } + } + + char** OUTPUT = map_find(symbols, "OUTPUT"); + int ext_num_groups = 0; + + // compression + if( 1 ) { + char* ext = file_ext(infile); ext = strrchr(ext, '.'); ext += ext[0] == '.'; // dotless INPUT_EXT + char* belongs_to = 0; + for each_map(groups, char*, key, char*, val) { + if( !isdigit(key[0]) ) { + char *comma = va(",%s,", ext); + if( !strcmpi(val,ext) || strbegi(val, comma+1) || strstri(val, comma) || strendi(val, va(",%s", ext))) { + belongs_to = key; + ext_num_groups++; + } + } + } + char *compression = 0; + for each_map_ptr_sorted(groups, char*, key, char*, val) { // sorted iteration, so hopefully '0' no compression gets evaluated first + if( !compression && isdigit((*key)[0]) ) { + char *comma = va(",%s,", ext); + if( !strcmpi(*val,ext) || strbegi(*val, comma+1) || strstri(*val, comma) || strendi(*val, va(",%s", ext))) { + compression = (*key); + } + comma = va(",%s,", belongs_to); + if( !strcmpi(*val,ext) || strbegi(*val, comma+1) || strstri(*val, comma) || strendi(*val, va(",%s", ext))) { + compression = (*key); + } + } + } + + cs.compress_level = 0; + if( compression ) { + // last chance to optionally override the compressor at command-line level + static const char *compressor_override; + do_once compressor_override = option("--cook-compressor", ""); + if( compressor_override[0] ) compression = (char*)compressor_override; + + /**/ if(strstri(compression, "PPP")) cs.compress_level = atoi(compression) | PPP; + else if(strstri(compression, "ULZ")) cs.compress_level = atoi(compression) | ULZ; + else if(strstri(compression, "LZ4")) cs.compress_level = atoi(compression) | LZ4X; + else if(strstri(compression, "CRSH")) cs.compress_level = atoi(compression) | CRSH; + else if(strstri(compression, "DEFL")) cs.compress_level = isdigit(compression[0]) ? atoi(compression) : 6 /*| DEFL*/; + //else if(strstri(compression, "LZP")) cs.compress_level = atoi(compression) | LZP1; // not supported + else if(strstri(compression, "LZMA")) cs.compress_level = atoi(compression) | LZMA; + else if(strstri(compression, "BALZ")) cs.compress_level = atoi(compression) | BALZ; + else if(strstri(compression, "LZW")) cs.compress_level = atoi(compression) | LZW3; + else if(strstri(compression, "LZSS")) cs.compress_level = atoi(compression) | LZSS; + else if(strstri(compression, "BCM")) cs.compress_level = atoi(compression) | BCM; + else cs.compress_level = isdigit(compression[0]) ? atoi(compression) : 6 /*| DEFL*/; + } + } + + // if script was generated... + if( script && script[0] && strstr(script, ifdef(win32, file_normalize(va("%s",infile)), infile )) ) { + // update outfile + cs.outfile = *OUTPUT; + + // amalgamate script + array(char*) lines = strsplit(script, "\r\n"); + + #if is(win32) + char *joint = strjoin(lines, " && "); + cs.script = joint; + #else + if( flag("--cook-wine") ) { + // dear linux/osx/bsd users: + // tools going wrong for any reason? cant compile them maybe? + // small hack to use win32 pipeline tools instead + char *joint = strjoin(lines, " && wine " ); + cs.script = va("wine %s", /*TOOLS,*/ joint); + } else { + char *joint = strjoin(lines, " && " ); + cs.script = va("export LD_LIBRARY_PATH=%s && %s", TOOLS, joint); + } + #endif + } else { + // if( script && script[0] ) system(script); //< @todo: un-comment this line if we want to get the shell command prints invoked per entry + + // ... else bypass infile->outfile + char** INFILE = map_find(symbols, "INFILE"); + cs.outfile = *INFILE; + + // and return an empty script + cs.script = ""; + } + + cs.outname = cs.outname ? cs.outname : (char*)infile; + cs.gen_ns += time_ns(); + + ASSERT(mcs.num_passes < countof(mcs.cs)); + mcs.cs[mcs.num_passes++] = cs; + + bool next_pass_required = mcs.num_passes < ext_num_groups; + if( !next_pass_required ) break; + } + + return mcs; +} + +// ---------------------------------------------------------------------------- + +struct fs { + char *fname, status; + uint64_t stamp; + uint64_t bytes; +}; + +static array(struct fs) fs_now; +static __thread array(char*) added; +static __thread array(char*) changed; +static __thread array(char*) deleted; +static __thread array(char*) uncooked; + +static +array(struct fs) zipscan_filter(int threadid, int numthreads) { + // iterate all previously scanned files + array(struct fs) fs = 0; + for( int i = 0, end = array_count(fs_now); i < end; ++i ) { + // during workload distribution, we assign random files to specific thread buckets. + // we achieve this by hashing the basename of the file. we used to hash also the path + // long time ago but that is less resilient to file relocations across the repository. + // excluding the file extension from the hash also helps from external file conversions. + char *fname = file_name(fs_now[i].fname); + char *sign = strrchr(fname, '@'); if(sign) *sign = '\0'; // special char (multi-pass cooks) + char *dot = strrchr(fname, '.'); if(dot) *dot = '\0'; + + // skip if list item does not belong to this thread bucket + uint64_t hash = hash_str(fname); + unsigned bucket = (hash /*>> 32*/) % numthreads; + if(bucket != threadid) continue; + + array_push(fs, fs_now[i]); + } + return fs; +} + +static +int zipscan_diff( zip* old, array(struct fs) now ) { + array_free(added); + array_free(changed); + array_free(deleted); + array_free(uncooked); + + // if not zipfile is present, all files are new and must be added + if( !old ) { + for( int i = 0; i < array_count(now); ++i ) { + array_push(uncooked, STRDUP(now[i].fname)); + } + return 1; + } + + // compare for new & changed files + for( int i = 0; i < array_count(now); ++i ) { + int found = zip_find(old, now[i].fname); + if( found < 0 ) { + array_push(added, STRDUP(now[i].fname)); + array_push(uncooked, STRDUP(now[i].fname)); + } else { + uint64_t oldsize = atoi64(zip_comment(old,found)); // zip_size(old, found); returns sizeof processed asset. return original size of unprocessed asset, which we store in comment section + uint64_t oldstamp = atoi64(zip_modt(old,found)+20); // format is "YYYY/MM/DD hh:mm:ss", then +20 chars later a hidden epoch timestamp in base10 can be found + int64_t diffstamp = oldstamp < now[i].stamp ? now[i].stamp - oldstamp : oldstamp - now[i].stamp; + if( oldsize != now[i].bytes || diffstamp > 1 ) { // @fixme: should use hash instead. hashof(tool) ^ hashof(args used) ^ hashof(rawsize) ^ hashof(rawdate) + printf("%s:\t%u vs %u, %llu vs %llu\n", now[i].fname, (unsigned)oldsize,(unsigned)now[i].bytes, (long long unsigned)oldstamp, (long long unsigned)now[i].stamp); + array_push(changed, STRDUP(now[i].fname)); + array_push(uncooked, STRDUP(now[i].fname)); + } + } + } + // compare for deleted files + for( int i = 0; i < zip_count(old); ++i ) { + char *oldname = zip_name(old, i); + //if( strchr(oldname, '@') ) oldname = va("%*.s", (int)(strchr(oldname, '@') - oldname), oldname ); // special char (multi-pass cooks) + + int idx = zip_find(old, oldname); // find latest versioned file in zip + unsigned oldsize = zip_size(old, idx); + if (!oldsize) continue; + + struct fs *found = 0; // zipscan_locate(now, oldname); + for(int j = 0; j < array_count(now); ++j) { + if( !strcmp(now[j].fname,oldname)) { + found = &now[j]; + break; + } + } + + if( !found ) { + array_push(deleted, STRDUP(oldname)); + } + } + return 1; +} + +// ---------------------------------------------------------------------------- + +typedef struct cook_worker { + const char **files; + const char *rules; + int threadid, numthreads; + thread_ptr_t self; + volatile int progress; + thread_mutex_t *lock; +} cook_worker; + +enum { JOBS_MAX = 256 }; +static cook_worker jobs[JOBS_MAX] = {0}; +static volatile bool cook_cancelable = false, cook_cancelling = false, cook_debug = false; + +#ifndef COOK_ON_DEMAND +#define COOK_ON_DEMAND ifdef(cook, optioni("--cook-on-demand", 0), false) +#endif + +static +int cook(void *userdata) { + cook_worker *job = (cook_worker*)userdata; + + // start progress + volatile int *progress = &job->progress; + *progress = 0; + + // preload a few large binaries +// dll("tools/furnace.exe", 0); +// dll("tools/assimp-vc143-mt.dll", 0); +// dll("tools/ffmpeg.exe", 0); + + // scan disk from fs_now snapshot + array(struct fs) filtered = zipscan_filter(job->threadid, job->numthreads); + //printf("Scanned: %d items found\n", array_count(now)); + + // prepare out tempname + char COOK_TMPFILE[64]; snprintf(COOK_TMPFILE, 64, "temp_%02d", job->threadid); + + // prepare zip + char zipfile[64]; snprintf(zipfile, 64, ".art[%02x].zip", job->threadid); + if( file_size(zipfile) == 0 ) unlink(zipfile); + + // populate added/deleted/changed arrays by examining current disk vs last cache + zip *z; + { + z = zip_open(zipfile, "r+b"); + zipscan_diff(z, filtered); + if( z ) zip_close(z); + + fflush(0); + + z = zip_open(zipfile, "a+b"); + if( !z ) { + unlink(zipfile); + z = zip_open(zipfile, "a+b"); // try again + if(!z) PANIC("cannot open file for updating: %s", zipfile); + } + } + + // deleted files. --cook-additive runs are append-only, so they skip this block + if( !flag("--cook-additive") ) + for( int i = 0, end = array_count(deleted); i < end; ++i ) { + printf("Deleting %03d%% %s\n", (i+1) == end ? 100 : (i * 100) / end, deleted[i]); + FILE* out = fopen(COOK_TMPFILE, "wb"); fclose(out); + FILE* in = fopen(COOK_TMPFILE, "rb"); + char *comment = "0"; + zip_append_file/*_timeinfo*/(z, deleted[i], comment, in, 0/*, tm_now*/); + fclose(in); + } + +// if(array_count(uncooked)) +// PRINTF("cook_jobs[%d]=%d\n", job->threadid, array_count(uncooked)); + + // generate cook metrics. you usually do `game.exe --cook-stats && (type *.csv | sort /R > cook.csv)` + static __thread FILE *statsfile = 0; + if(flag("--cook-stats")) + fseek(statsfile = fopen(va("cook%d.csv",job->threadid), "a+t"), 0L, SEEK_END); + if(statsfile && !job->threadid && ftell(statsfile) == 0) fprintf(statsfile,"%10s,%10s,%10s,%10s,%10s, %s\n","+total_ms","gen_ms","exe_ms","zip_ms","pass","file"); + + // added or changed files + for( int i = 0, end = array_count(uncooked); i < end && !cook_cancelling; ++i ) { + *progress = ((i+1) == end ? 90 : (i * 90) / end); // (i+i>0) * 100.f / end; + + // start cook + const char *infile = uncooked[i]; //job->files[j]; + int inlen = file_size(infile); + + // generate a cooking script for this asset + cook_script_t mcs = cook_script(job->rules, infile, COOK_TMPFILE); + // puts(cs.script); + + for(int pass = 0; pass < mcs.num_passes; ++pass) { + cook_subscript_t cs = mcs.cs[pass]; + + // log to batch file for forensic purposes, if explicitly requested + static __thread int logging = -1; if(logging < 0) logging = !!flag("--cook-debug") || cook_debug; + if( logging ) { + static __thread FILE *logfile = 0; if(!logfile) fseek(logfile = fopen(va("cook%d.cmd",job->threadid), "a+t"), 0L, SEEK_END); + if( logfile ) { + fprintf(logfile, "@rem %s\n%s\n", cs.outname, cs.script); + fprintf(logfile, "for %%%%i in (\"%s\") do md _cook\\%%%%~pi\\%%%%~ni%%%%~xi 1>nul 2>nul\n", infile); + fprintf(logfile, "for %%%%i in (\"%s\") do xcopy /y %s _cook\\%%%%~pi\\%%%%~ni%%%%~xi\n\n", infile, file_normalize(cs.outfile)); + } + } + + // invoke cooking script + mcs.cs[pass].exe_ns -= time_ns(); + // invoke cooking script + const char *rc_output = app_exec(cs.script); + // recap status + int rc = atoi(rc_output); + // int outlen = file_size(cs.outfile); + int failed = rc; // cs.script[0] ? rc || !outlen : 0; + // print errors + if( failed ) { + PRINTF("Import failed: %s while executing:\n%s\nReturned:\n%s\n", cs.outname, cs.script, rc_output); + continue; + } + if( pass > 0 ) { // (multi-pass cook) + // newly generated file: refresh values + // ensure newly created files by cook are also present on repo/disc for further cook passes + file_delete(cs.outname); + file_move(cs.outfile, cs.outname); + inlen = file_size(infile = cs.outfile = cs.outname); + } + mcs.cs[pass].exe_ns += time_ns(); + + // process only if included. may include optional compression. + mcs.cs[pass].zip_ns -= time_ns(); + if( cs.compress_level >= 0 ) { + FILE *in = fopen(cs.outfile ? cs.outfile : infile, "rb"); + if(!in) in = fopen(infile, "rb"); + + char *comment = va("%d", inlen); + if( !zip_append_file(z, infile, comment, in, cs.compress_level) ) { + PANIC("failed to add processed file into %s: %s(%s)", zipfile, cs.outname, infile); + } + + fclose(in); + } + mcs.cs[pass].zip_ns += time_ns(); + + // stats per subscript + mcs.cs[pass].pass_ns = mcs.cs[pass].gen_ns + mcs.cs[pass].exe_ns + mcs.cs[pass].zip_ns; + if(statsfile) fprintf(statsfile, "%10.f,%10.f,%10.f,%10.f,%10d, \"%s\"\n", mcs.cs[pass].pass_ns/1e6, mcs.cs[pass].gen_ns/1e6, mcs.cs[pass].exe_ns/1e6, mcs.cs[pass].zip_ns/1e6, pass+1, infile); + } + } + + zip_close(z); + + // end progress + if( file_size(zipfile) == 0 ) unlink(zipfile); + *progress = 100; + + return 1; +} + +static +int cook_async( void *userdata ) { +#if COOK_FROM_TERMINAL + // nothing to do... +#else + while(!window_handle()) sleep_ms(100); // wait for window handle to be created +#endif + + // boost cook thread #0, which happens to be the only spawn thread when num_jobs=1 (tcc case, cook-sync case). + // also in multi-threaded scenarios, it is not bad at all to have one high priority thread... + // in any case, game view is not going to look bad because the game will be displaying a progress bar at that time. + cook_worker *job = (cook_worker*)userdata; + if( job->threadid == 0 ) thread_set_high_priority(); + + // tcc: only a single running thread shall pass, because of racing shared state due to missing thread_local support at compiler level + ifdef(tcc, thread_mutex_lock( job->lock )); + ifdef(osx, thread_mutex_lock( job->lock )); // @todo: remove silicon mac M1 hack + + int ret = cook(userdata); + + // tcc: only a single running thread shall pass, because of racing shared state due to missing thread_local support at compiler level + ifdef(osx, thread_mutex_unlock( job->lock )); // @todo: remove silicon mac M1 hack + ifdef(tcc, thread_mutex_unlock( job->lock )); + + thread_exit( ret ); + return ret; +} + +bool cook_start( const char *cook_ini, const char *masks, int flags ) { + cook_ini = cook_ini ? cook_ini : COOK_INI; + + char *rules_ = file_read(cook_ini); + if(!rules_ || rules_[0] == 0) return false; + + static char *rules; do_once rules = STRDUP(rules_); + + do_once { + #if 0 + const char *HOME = file_pathabs(cook_ini); // ../tools/cook.ini -> c:/prj/v4k/tools/cook.ini + if( strbeg(HOME, app_path() ) ) HOME = STRDUP( file_path( HOME += strlen(app_path()) ) ); // -> tools/ @leak + #else + char *HOME = STRDUP(file_pathabs(cook_ini)); // ../tools/cook.ini -> c:/prj/v4k/tools/cook.ini + HOME[ strlen(HOME) - strlen(file_name(cook_ini)) ] = '\0'; // -> tools/ @leak + #endif + + ART_LEN = 0; //strlen(app_path()); + /* = MAX_PATH; + for each_substring(ART, ",", art_folder) { + ART_LEN = mini(ART_LEN, strlen(art_folder)); + }*/ + + if( strstr(rules, "ART=") ) { + ART = va( "%s", strstr(rules, "ART=") + 4 ); + char *r = strchr( ART, '\r' ); if(r) *r = 0; + char *n = strchr( ART, '\n' ); if(n) *n = 0; + char *s = strchr( ART, ';' ); if(s) *s = 0; + char *w = strchr( ART, ' ' ); if(w) *w = 0; + char *out = 0; const char *sep = ""; + for each_substring(ART, ",", t) { + char *tmp = file_pathabs(va("%s%s", HOME, t)) + ART_LEN; + for(int i = 0; tmp[i]; ++i) if(tmp[i]=='\\') tmp[i] = '/'; + strcatf(&out, "%s%s%s", sep, tmp, strendi(tmp, "/") ? "" : "/"); + assert( out[strlen(out) - 1] == '/' ); + + sep = ","; + } + ART = out; // @leak + } + + if( strstr(rules, "TOOLS=") ) { + TOOLS = va( "%s", strstr(rules, "TOOLS=") + 6 ); + char *r = strchr( TOOLS, '\r' ); if(r) *r = 0; + char *n = strchr( TOOLS, '\n' ); if(n) *n = 0; + char *s = strchr( TOOLS, ';' ); if(s) *s = 0; + char *w = strchr( TOOLS, ' ' ); if(w) *w = 0; + char *cat = va("%s%s", HOME, TOOLS), *out = 0; + for(int i = 0; cat[i]; ++i) if(cat[i]=='\\') cat[i] = '/'; + strcatf(&out, "%s%s", cat, strend(cat, "/") ? "" : "/"); + TOOLS = out; // @leak + assert( TOOLS[strlen(TOOLS) - 1] == '/' ); + + // last chance to autodetect tools folder (from cook.ini path) + if( !file_directory(TOOLS) ) { + out = STRDUP(cook_ini); + for(int i = 0; out[i]; ++i) if(out[i]=='\\') out[i] = '/'; + TOOLS = out; // @leak + } + } + + if( strstr(rules, "EDITOR=") ) { + EDITOR = va( "%s", strstr(rules, "EDITOR=") + 7 ); + char *r = strchr( EDITOR, '\r' ); if(r) *r = 0; + char *n = strchr( EDITOR, '\n' ); if(n) *n = 0; + char *s = strchr( EDITOR, ';' ); if(s) *s = 0; + char *w = strchr( EDITOR, ' ' ); if(w) *w = 0; + char *cat = va("%s%s", HOME, EDITOR), *out = 0; + for(int i = 0; cat[i]; ++i) if(cat[i]=='\\') cat[i] = '/'; + strcatf(&out, "%s%s", cat, strend(cat, "/") ? "" : "/"); + EDITOR = out; // @leak + assert( EDITOR[strlen(EDITOR) - 1] == '/' ); + } + + // small optimization for upcoming parser: remove whole comments from file + array(char*) lines = strsplit(rules, "\r\n"); + for( int i = 0; i < array_count(lines); ) { + if( lines[i][0] == ';' ) array_erase_slow(lines, i); + else ++i; + } + rules = STRDUP( strjoin(lines, "\n") ); + } + + if( !masks ) { + return true; // nothing to do + } + + // estimate ART_SKIP_ROOT (C:/prj/v4k/demos/assets/file.png -> strlen(C:/prj/v4k/) -> 11) + { + array(char*) dirs = 0; + for each_substring(ART, ",", art_folder) { + array_push(dirs, file_pathabs(art_folder)); + } + if( array_count(dirs) > 1 ) { + for( int ok = 1, ch = dirs[0][ART_SKIP_ROOT]; ch && ok; ch = dirs[0][++ART_SKIP_ROOT] ) { + for( int i = 1; i < array_count(dirs) && ok; ++i ) { + ok = dirs[i][ART_SKIP_ROOT] == ch; + } + } + } + while( ART_SKIP_ROOT > 0 && !strchr("\\/", dirs[0][ART_SKIP_ROOT-1]) ) --ART_SKIP_ROOT; + array_free(dirs); + } + + if( COOK_ON_DEMAND ) { + return true; // cooking is deferred + } + + // scan disk: all subfolders in ART (comma-separated) + static array(char *) list = 0; // @leak + for each_substring(ART, ",", art_folder) { + array(char *) glob = file_list(va("%s**",art_folder)); // art_folder ends with '/' + for( unsigned i = 0, end = array_count(glob); i < end; ++i ) { + const char *fname = glob[i]; + if( !strmatchi(fname, masks)) continue; + + // skip special files, folders and internal files like .art.zip + const char *dir = file_path(fname); + if( dir[0] == '.' ) continue; // discard system dirs and hidden files + if( strbegi(dir, TOOLS) ) continue; // discard tools folder + if( !file_ext(fname)[0] ) continue; // discard extensionless entries + if( !file_size(fname)) continue; // skip dirs and empty files + + // exclude vc c/c++ .obj files. they're not 3d wavefront .obj files + if( strend(fname, ".obj") ) { + char header[4] = {0}; + for( FILE *in = fopen(fname, "rb"); in; fclose(in), in = NULL) { + fread(header, 2, 1, in); + } + if( !memcmp(header, "\x64\x86", 2) ) continue; + if( !memcmp(header, "\x00\x00", 2) ) continue; + } + + char *dot = strrchr(fname, '.'); + if( dot ) { + char extdot[32]; + snprintf(extdot, 32, "%s.", dot); // .png -> .png. + // exclude vc/gcc/clang files + if( strstr(fname, ".a.o.pdb.lib.ilk.exp.dSYM.") ) // must end with dot + continue; + } + + // @todo: normalize path & rebase here (absolute to local) + // [...] + // fi.normalized = ; tolower->to_underscore([]();:+ )->remove_extra_underscores + + if (file_name(fname)[0] == '.') continue; // skip system files + if (file_name(fname)[0] == ';') continue; // skip comment files + + array_push(list, STRDUP(fname)); + } + } + + // inspect disk + for( int i = 0, end = array_count(list); i < end; ++i ) { + char *fname = list[i]; + + struct fs fi = {0}; + fi.fname = fname; // STRDUP(fname); + fi.bytes = file_size(fname); + fi.stamp = file_stamp10(fname); // timestamp in base10(yyyymmddhhmmss) + + array_push(fs_now, fi); + } + + cook_debug = !!( flags & COOK_DEBUGLOG ); + cook_cancelable = !!( flags & COOK_CANCELABLE ); + + // spawn all the threads + int num_jobs = cook_jobs(); + for( int i = 0; i < num_jobs; ++i ) { + jobs[i].self = 0; + jobs[i].threadid = i; + jobs[i].numthreads = flags & COOK_ASYNC ? num_jobs : 1; + jobs[i].files = (const char **)list; + jobs[i].rules = rules; + jobs[i].progress = -1; + static thread_mutex_t lock; do_once thread_mutex_init(&lock); + jobs[i].lock = &lock; + } + for( int i = 0; i < num_jobs; ++i ) { + if( flags & COOK_ASYNC ) { + jobs[i].self = thread_init(cook_async, &jobs[i], "cook_async()", 0/*STACK_SIZE*/); + continue; + } + + if(!cook(&jobs[i])) return false; + } + + return true; +} + +void cook_stop() { + // join all threads + int num_jobs = cook_jobs(); + for( int i = 0; i < num_jobs; ++i ) { + if(jobs[i].self) thread_join(jobs[i].self); + } + // remove all temporary outfiles + for each_array(file_list("temp_*"), char*, tempfile) unlink(tempfile); +} + +int cook_progress() { + int count = 0, sum = 0; + for( int i = 0, end = cook_jobs(); i < end; ++i ) { + sum += jobs[i].progress; + ++count; + } + return cook_jobs() ? sum / (count+!count) : 100; +} + +void cook_cancel() { + if( cook_cancelable ) cook_cancelling = true; +} + +int cook_jobs() { + int num_jobs = optioni("--cook-jobs", maxf(1.15,app_cores()) * 1.75), max_jobs = countof(jobs); + ifdef(ems, num_jobs = 0); + ifdef(retail, num_jobs = 0); + ifdef(nocook, num_jobs = 0); + return clampi(num_jobs, 0, max_jobs); +} + +void cook_config( const char *pathfile_to_cook_ini ) { // @todo: test run-from-"bin/" case on Linux. + COOK_INI = pathfile_to_cook_ini; + ASSERT( file_exist(COOK_INI) ); +} + +bool have_tools() { + static bool found; do_once found = file_exist(COOK_INI); + return ifdef(retail, false, found); +} #line 0 #line 1 "v4k_data.c" - -static array(json5) roots; -static array(char*) sources; - -bool json_push(const char *source) { - char *source_rw = STRDUP(source); - json5 root = {0}; - char *error = json5_parse(&root, source_rw, 0); - if( error ) { - FREE(source_rw); - return false; - } else { - array_push(sources, source_rw); - array_push(roots, root); - return true; - } -} - -bool json_pop() { - if( array_count(roots) > 0 ) { - FREE(*array_back(sources)); - array_pop(sources); - - json5_free(array_back(roots)); - array_pop(roots); - return true; - } - return false; -} - -json5* json_node(const char *keypath) { - json5 *j = array_back(roots), *r = j; - for each_substring( keypath, "/[.]", key ) { - r = 0; - /**/ if( j->type == JSON5_ARRAY ) r = j = &j->array[atoi(key)]; - else if( j->type == JSON5_OBJECT && isdigit(key[0]) ) - for( int i = 0, seq = atoi(key); !r && i < j->count; ++i ) { - if( i == seq ) { - r = j = &j->nodes[i]; - break; - } - } - else if( j->type == JSON5_OBJECT ) - for( int i = 0; !r && i < j->count; ++i ) { - if( j->nodes[i].name && !strcmp(j->nodes[i].name, key) ) { - r = j = &j->nodes[i]; - break; - } - } - if( !j ) break; - } - return r; -} - -int (json_count)(const char *keypath) { - json5* j = json_node(keypath); - return j ? j->count : 0; -} - -json_t *json_find(const char *type_keypath) { - char type = type_keypath[0]; - const char *key = type_keypath+1; - json5 *j = json_node(key); - if( !j ) return NULL; - - static __thread int slot = 0; - static __thread json_t buf[128] = {0}; - slot = (slot+1) % 128; - - json_t *v = &buf[slot]; - v->i = j ? j->integer : 0; - if(type == 's' && (!v->p || j->type == JSON5_NULL)) v->s = ""; // if_null_string - if(type == 'f' && j && j->type == JSON5_INTEGER) v->f = j->integer; - return v; -} - -json_t json_get(const char *type_keypath) { - char type = type_keypath[0]; - const char *key = type_keypath+1; - json5 *j = json_node(key); - - json_t v = {0}; - v.i = j ? j->integer : 0; - if(type == 's' && (!v.p || j->type == JSON5_NULL)) v.s = ""; // if_null_string - if(type == 'f' && j && j->type == JSON5_INTEGER) v.f = j->integer; - return v; -} - -const char *(json_key)(const char *keypath) { - json5 *j = json_node(keypath); - if( !j ) return ""; - return j->name; -} - -// xml impl - -static __thread array(char *) xml_sources; -static __thread array(struct xml *) xml_docs; - -int xml_push(const char *xml_source) { - if( xml_source ) { - char *src = STRDUP(xml_source), *error = 0; - for( struct xml *doc = xml_parse(src, 0, &error); doc && !error; ) { - array_push(xml_docs, doc); - array_push(xml_sources, src); - return 1; - } - if( error ) PRINTF("%s\n", error); - FREE(src); - } - return 0; -} - -void xml_pop() { - if( array_count(xml_docs) ) { - xml_free( *array_back(xml_docs) ); - array_pop(xml_docs); - FREE( *array_back(xml_sources) ); - array_pop(xml_sources); - } -} - -static void *xml_path(struct xml *node, char *path, int down) { - if( !path || !path[0] ) return node; - if( node ) { - - char type = path[0]; - if( type == '/' ) { - int sep = strcspn(++path, "/[@$"); - if( !sep ) type = path[0]; - else - if( 1 ) { // path[ sep ] ) { - char tag[32]; snprintf(tag, 32, "%.*s", sep, path); - // Find the first sibling with the given tag name (may be the same node) - struct xml *next = down ? xml_find_down(node, tag) : xml_find(node, tag); - return xml_path(next, &path[ sep ], 1); - } - } - if( type == '$' ) { - return (void*)( node->down ? xml_text( node->down ) : xml_tag( node ) ); - } - if( type == '@' ) { - return (void*)xml_att(node, ++path); - } - if( type == '[' ) { - for( int i = 0, end = atoi(++path); i < end; ++i ) { node = xml_find_next(node, xml_tag(node)); if(!node) return NULL; } - while( isdigit(path[0]) ) ++path; - return xml_path(node, ++path, 1); - } - } - return NULL; -} - -const char *(xml_string)(char *key) { - struct xml *node = xml_path(*array_back(xml_docs), key, 0); - if( node && strchr(key, '@') ) return (const char *)node; - if( node && strchr(key, '$') ) return (const char *)node; - return ""; -} -unsigned (xml_count)(char *key) { - struct xml *node = xml_path(*array_back(xml_docs), key, 0); - if( !node ) return 0; - const char *tag = xml_tag(node); - unsigned count = 1; - while( (node = xml_find_next(node, tag)) != 0) ++count; - return count; -} -array(char) (xml_blob)(char *key) { // base64 blob - struct xml *node = xml_path(*array_back(xml_docs), key, 0); - if( !node ) return 0; - if( !strchr(key, '$') ) return 0; - const char *data = (const char*)node; - array(char) out = base64_decode(data, strlen(data)); // either array of chars (ok) or null (error) - return out; -} - -bool data_tests() { - // data tests (json5) - const char json5[] = - " /* json5 */ // comment\n" - " abc: 42.67, def: true, integer:0x100 \n" - " huge: 2.2239333e5, \n" - " hello: 'world /*comment in string*/ //again', \n" - " children : { a: 1, b: 2, c: 3 },\n" - " array: [+1,2,-3,4,5], \n" - " invalids : [ nan, NaN, -nan, -NaN, inf, Infinity, -inf, -Infinity ],"; - if( json_push(json5) ) { - assert( json_float("/abc") == 42.67 ); - assert( json_int("/def") == 1 ); - assert( json_int("/integer") == 0x100 ); - assert( json_float("/huge") > 2.22e5 ); - assert( strlen(json_string("/hello")) == 35 ); - assert( json_int("/children/a") == 1 ); - assert( json_int("/children.b") == 2 ); - assert( json_int("/children[c]") == 3 ); - assert( json_int("/array[%d]", 2) == -3 ); - assert( json_count("/invalids") == 8 ); - assert( isnan(json_float("/invalids[0]")) ); - assert( !json_find("/non_existing") ); - assert( PRINTF("json5 tests OK\n") ); - json_pop(); - } - - // data tests (xml) - const char *xml = // vfs_read("test1.xml"); - "" - "" - " Robert" - " Smith" - "
" - " 12345 Sixth Ave" - " Anytown" - " CA" - " 98765-4321" - "
" - "
"; - if( xml_push(xml) ) { - assert( !strcmp("Robert", xml_string("/person/firstName/$")) ); - assert( !strcmp("Smith", xml_string("/person/lastName/$")) ); - assert( !strcmp("home", xml_string("/person/address/@type")) ); - assert( PRINTF("xml tests OK\n") ); - xml_pop(); - } - - return true; -} + +static array(json5) roots; +static array(char*) sources; + +bool json_push(const char *source) { + char *source_rw = STRDUP(source); + json5 root = {0}; + char *error = json5_parse(&root, source_rw, 0); + if( error ) { + FREE(source_rw); + return false; + } else { + array_push(sources, source_rw); + array_push(roots, root); + return true; + } +} + +bool json_pop() { + if( array_count(roots) > 0 ) { + FREE(*array_back(sources)); + array_pop(sources); + + json5_free(array_back(roots)); + array_pop(roots); + return true; + } + return false; +} + +json5* json_node(const char *keypath) { + json5 *j = array_back(roots), *r = j; + for each_substring( keypath, "/[.]", key ) { + r = 0; + /**/ if( j->type == JSON5_ARRAY ) r = j = &j->array[atoi(key)]; + else if( j->type == JSON5_OBJECT && isdigit(key[0]) ) + for( int i = 0, seq = atoi(key); !r && i < j->count; ++i ) { + if( i == seq ) { + r = j = &j->nodes[i]; + break; + } + } + else if( j->type == JSON5_OBJECT ) + for( int i = 0; !r && i < j->count; ++i ) { + if( j->nodes[i].name && !strcmp(j->nodes[i].name, key) ) { + r = j = &j->nodes[i]; + break; + } + } + if( !j ) break; + } + return r; +} + +int (json_count)(const char *keypath) { + json5* j = json_node(keypath); + return j ? j->count : 0; +} + +json_t *json_find(const char *type_keypath) { + char type = type_keypath[0]; + const char *key = type_keypath+1; + json5 *j = json_node(key); + if( !j ) return NULL; + + static __thread int slot = 0; + static __thread json_t buf[128] = {0}; + slot = (slot+1) % 128; + + json_t *v = &buf[slot]; + v->i = j ? j->integer : 0; + if(type == 's' && (!v->p || j->type == JSON5_NULL)) v->s = ""; // if_null_string + if(type == 'f' && j && j->type == JSON5_INTEGER) v->f = j->integer; + return v; +} + +json_t json_get(const char *type_keypath) { + char type = type_keypath[0]; + const char *key = type_keypath+1; + json5 *j = json_node(key); + + json_t v = {0}; + v.i = j ? j->integer : 0; + if(type == 's' && (!v.p || j->type == JSON5_NULL)) v.s = ""; // if_null_string + if(type == 'f' && j && j->type == JSON5_INTEGER) v.f = j->integer; + return v; +} + +const char *(json_key)(const char *keypath) { + json5 *j = json_node(keypath); + if( !j ) return ""; + return j->name; +} + +// xml impl + +static __thread array(char *) xml_sources; +static __thread array(struct xml *) xml_docs; + +int xml_push(const char *xml_source) { + if( xml_source ) { + char *src = STRDUP(xml_source), *error = 0; + for( struct xml *doc = xml_parse(src, 0, &error); doc && !error; ) { + array_push(xml_docs, doc); + array_push(xml_sources, src); + return 1; + } + if( error ) PRINTF("%s\n", error); + FREE(src); + } + return 0; +} + +void xml_pop() { + if( array_count(xml_docs) ) { + xml_free( *array_back(xml_docs) ); + array_pop(xml_docs); + FREE( *array_back(xml_sources) ); + array_pop(xml_sources); + } +} + +static void *xml_path(struct xml *node, char *path, int down) { + if( !path || !path[0] ) return node; + if( node ) { + + char type = path[0]; + if( type == '/' ) { + int sep = strcspn(++path, "/[@$"); + if( !sep ) type = path[0]; + else + if( 1 ) { // path[ sep ] ) { + char tag[32]; snprintf(tag, 32, "%.*s", sep, path); + // Find the first sibling with the given tag name (may be the same node) + struct xml *next = down ? xml_find_down(node, tag) : xml_find(node, tag); + return xml_path(next, &path[ sep ], 1); + } + } + if( type == '$' ) { + return (void*)( node->down ? xml_text( node->down ) : xml_tag( node ) ); + } + if( type == '@' ) { + return (void*)xml_att(node, ++path); + } + if( type == '[' ) { + for( int i = 0, end = atoi(++path); i < end; ++i ) { node = xml_find_next(node, xml_tag(node)); if(!node) return NULL; } + while( isdigit(path[0]) ) ++path; + return xml_path(node, ++path, 1); + } + } + return NULL; +} + +const char *(xml_string)(char *key) { + struct xml *node = xml_path(*array_back(xml_docs), key, 0); + if( node && strchr(key, '@') ) return (const char *)node; + if( node && strchr(key, '$') ) return (const char *)node; + return ""; +} +unsigned (xml_count)(char *key) { + struct xml *node = xml_path(*array_back(xml_docs), key, 0); + if( !node ) return 0; + const char *tag = xml_tag(node); + unsigned count = 1; + while( (node = xml_find_next(node, tag)) != 0) ++count; + return count; +} +array(char) (xml_blob)(char *key) { // base64 blob + struct xml *node = xml_path(*array_back(xml_docs), key, 0); + if( !node ) return 0; + if( !strchr(key, '$') ) return 0; + const char *data = (const char*)node; + array(char) out = base64_decode(data, strlen(data)); // either array of chars (ok) or null (error) + return out; +} + +bool data_tests() { + // data tests (json5) + const char json5[] = + " /* json5 */ // comment\n" + " abc: 42.67, def: true, integer:0x100 \n" + " huge: 2.2239333e5, \n" + " hello: 'world /*comment in string*/ //again', \n" + " children : { a: 1, b: 2, c: 3 },\n" + " array: [+1,2,-3,4,5], \n" + " invalids : [ nan, NaN, -nan, -NaN, inf, Infinity, -inf, -Infinity ],"; + if( json_push(json5) ) { + assert( json_float("/abc") == 42.67 ); + assert( json_int("/def") == 1 ); + assert( json_int("/integer") == 0x100 ); + assert( json_float("/huge") > 2.22e5 ); + assert( strlen(json_string("/hello")) == 35 ); + assert( json_int("/children/a") == 1 ); + assert( json_int("/children.b") == 2 ); + assert( json_int("/children[c]") == 3 ); + assert( json_int("/array[%d]", 2) == -3 ); + assert( json_count("/invalids") == 8 ); + assert( isnan(json_float("/invalids[0]")) ); + assert( !json_find("/non_existing") ); + assert( PRINTF("json5 tests OK\n") ); + json_pop(); + } + + // data tests (xml) + const char *xml = // vfs_read("test1.xml"); + "" + "" + " Robert" + " Smith" + "
" + " 12345 Sixth Ave" + " Anytown" + " CA" + " 98765-4321" + "
" + "
"; + if( xml_push(xml) ) { + assert( !strcmp("Robert", xml_string("/person/firstName/$")) ); + assert( !strcmp("Smith", xml_string("/person/lastName/$")) ); + assert( !strcmp("home", xml_string("/person/address/@type")) ); + assert( PRINTF("xml tests OK\n") ); + xml_pop(); + } + + return true; +} #line 0 #line 1 "v4k_extend.c" -// dll ------------------------------------------------------------------------ - -/* deprecated -#if is(win32) -# include -# define dlopen(name,flags) (void*)( (name) ? LoadLibraryA(name) : GetModuleHandleA(NULL)) -# define dlsym(handle,symbol) GetProcAddress((HMODULE)(handle), symbol ) -# define dlclose(handle) 0 -#else -# include -# define dlopen(name,flags) (void*)( (name) ? dlopen(name, flags) : NULL ) -# define dlsym(handle,symbol) dlsym( (handle) ? (handle) : ifdef(osx,RTLD_SELF,NULL), symbol ) -#endif -*/ - -void* dll(const char *fname, const char *symbol) { - if( fname && !file_exist(fname) ) { - char *buf, *path = file_path(fname), *base = file_base(fname); - if( file_exist(buf = va("%s%s.dll", path, base)) || - file_exist(buf = va("%s%s.so", path, base)) || - file_exist(buf = va("%slib%s.so", path, base)) || - file_exist(buf = va("%s%s.dylib", path, base)) ) { - fname = (const char *)buf; - } else { - return NULL; - } - } -#if is(win32) - return (void*)GetProcAddress(fname ? LoadLibraryA(fname) : GetModuleHandleA(NULL), symbol); -#else - return dlsym(fname ? dlopen(fname, RTLD_NOW|RTLD_LOCAL) : ifdef(osx, RTLD_SELF, NULL), symbol); -#endif -} - -#if 0 // demo: cl demo.c /LD && REM dll -EXPORT int add2(int a, int b) { return a + b; } -int main() { int (*adder)() = dll("demo.dll", "add2"); printf("%d\n", adder(2,3)); } -#endif - -// script --------------------------------------------------------------------- - -typedef lua_State lua; - -// the Lua interpreter(s) -static array(lua*) Ls; - -// the **current** Lua interpreter -static lua *L; - -#if is(linux) -void luaopen_libv4k(lua_State *L) {} -#endif - -static void* script__realloc(void *userdef, void *ptr, size_t osize, size_t nsize) { - (void)userdef; - return ptr = REALLOC( ptr, /* (osize+1) * */ nsize ); -} -static int script__traceback(lua_State *L) { - if (!lua_isstring(L, 1)) { // try metamethod if non-string error object - if (lua_isnoneornil(L, 1) || - !luaL_callmeta(L, 1, "__tostring") || - !lua_isstring(L, -1)) - return 1; // return non-string error object - lua_remove(L, 1); // replace object with result of __tostring metamethod - } - luaL_traceback(L, L, lua_tostring(L, 1), 1); - return 1; -} -static void script__error(lua_State *L, int status) { - if (status != 0) { - const char *errormsg = lua_tostring(L, -1); - PRINTF( "!-- %s\n", errormsg); - lua_pop(L, 1); // remove error message - } -} -static int script__call(lua_State *L, int narg, int clear) { -#if ENABLE_FASTCALL_LUA - lua_call(L, 0, 0); - return 0; -#else - int base = lua_gettop(L) - narg; // function index - lua_pushcfunction(L, script__traceback); // push traceback function - lua_insert(L, base); // put it under chunk and args - int status = lua_pcall(L, narg, (clear ? 0 : LUA_MULTRET), base); - script__error(L, status); - lua_remove(L, base); // remove traceback function - if (status != 0) lua_gc(L, LUA_GCCOLLECT, 0); // force gc in case of errors - return status; -#endif -} - -void script_bind_function(const char *c_name, void *c_function) { - lua_pushcfunction( L, c_function ); - lua_setglobal( L, c_name ); -} - -void script_call(const char *lua_function) { - lua_getglobal( L, lua_function ); - script__call( L, 0, 1 ); -} - -void script_bind_class(const char *classname, int num, const char **methods, void **functions) { - lua_newtable( L ); - - for( int i = 0; i < num; ++i) { - lua_pushcfunction( L, functions[i] ); - lua_setfield( L, 1, methods[i] ); - } - - lua_setglobal( L, classname ); -} - -void script_run(const char *script) { - int ret = luaL_dostring(L, script); - if( ret != LUA_OK ) { - PRINTF("!Script failed to run: %s\n", lua_tostring(L, -1)); - lua_pop(L, 1); // pop error message - } -} - -void script_runfile(const char *pathfile) { - PRINTF( "Loading script '%s'\n", pathfile ); - int loadResult = luaL_loadfile( L, pathfile ); - - /**/ if( loadResult == LUA_OK ) { - script__call( L, 0, 1 ); - } - else if( loadResult == LUA_ERRSYNTAX ) { - PRINTF("!Script failed to load (LUA_ERRSYNTAX, '%s'): %s\n", lua_tostring( L, 1 ), pathfile ); -// lua_pop(L, 1); // pop error message - } - else if( loadResult == LUA_ERRMEM ) { - PRINTF("!Script failed to load (LUA_ERRMEM): %s\n", pathfile); - } - else { - PRINTF("!Script failed to load: %s\n", pathfile ); - } -} - -// syntax sugars -/* usage: -int window_create_lua(lua *L) { - window_create(arg_float(1), arg_int(2)); - return_void(0); -} -int window_swap_lua(lua *L) { - int r = window_swap(); - return_int(r); -} -*/ - -#define arg_int(nth) lua_tointeger(L, nth) -#define arg_bool(nth) lua_toboolean(L, nth) -#define arg__Bool(nth) lua_toboolean(L, nth) -#define arg_float(nth) (float)lua_tonumber(L, nth) -#define arg_double(nth) lua_tonumber(L, nth) -#define arg_string(nth) lua_tolstring(L, nth, 0) -#define return_void(x) return ((x), 0) -#define return_bool(x) return (lua_pushboolean(L, x), 1) -#define return__Bool(x) return (lua_pushboolean(L, x), 1) -#define return_int(x) return (lua_pushinteger(L, x), 1) -#define return_float(x) return (lua_pushnumber(L, x), 1) -#define return_double(x) return (lua_pushnumber(L, x), 1) -#define return_string(x) return (lua_pushstring(L, x), 1) - -#define WRAP_ALL(...) EXPAND(WRAP_ALL, __VA_ARGS__) -#define WRAP_ALL2(rc, func) int func##_lua(lua*L) { return_##rc(func()); } -#define WRAP_ALL3(rc, func, a1) int func##_lua(lua*L) { return_##rc(func(arg_##a1(1))); } -#define WRAP_ALL4(rc, func, a1,a2) int func##_lua(lua*L) { return_##rc(func(arg_##a1(1),arg_##a2(2))); } - -#define BIND_ALL(...) EXPAND(BIND_ALL, __VA_ARGS__); -#define BIND_ALL2(rc,func) script_bind_function(#func, func##_lua) -#define BIND_ALL3(rc,func,a1) script_bind_function(#func, func##_lua) -#define BIND_ALL4(rc,func,a1,a2) script_bind_function(#func, func##_lua) - -#define XMACRO(X) /* @fixme: add all remaining V4K functions */ \ - X(bool, window_create, float, int ) \ - X(bool, window_swap ) \ - X(void, ddraw_grid, float ) \ - X(bool, ui_panel, string, int ) \ - X(bool, ui_notify, string, string ) \ - X(void, ui_panel_end ) - -XMACRO(WRAP_ALL) - -void script_quit(void) { - if( L ) { - lua_close(L); - L = 0; - } -} -void script_init() { - if( !L ) { - // v4k_init(); - - // initialize Lua - L = lua_newstate(script__realloc, 0); // L = luaL_newstate(); - - // load various Lua libraries - luaL_openlibs(L); - luaopen_base(L); - luaopen_table(L); - luaopen_io(L); - luaopen_string(L); - luaopen_math(L); - - // enable ffi (via luaffi) - luaopen_ffi(L); - - // @fixme: workaround that prevents script binding on lua 5.4.3 on top of luajit 2.1.0-beta3 on linux. lua_setglobal() crashing when accessing null L->l_G - if(L->l_G) { - XMACRO(BIND_ALL); - } - - atexit(script_quit); - } -} - -bool script_tests() { - // script test (lua) - script_run( "-- Bye.lua\nio.write(\"script test: Bye world!, from \", _VERSION, \"\\n\")" ); - return true; -} - -#undef XMACRO - -// script v2 ------------------------------------------------------------------ - -#define luaL_dostringsafe(L, str) \ - luaL_dostring(L, \ - "xpcall(function()\n" \ - str \ - "end, function(err)\n" \ - " print('Error: ' .. tostring(err))\n" \ - " print(debug.traceback(nil, 2))\n" \ - " if core and core.on_error then\n" \ - " pcall(core.on_error, err)\n" \ - " end\n" \ - " os.exit(1)\n" \ - "end)" \ - ); - -static int f_vfs_read(lua_State *L) { - char *file = file_normalize(luaL_checkstring(L, 1)); - if( strbegi(file, app_path()) ) file += strlen(app_path()); - strswap(file+1, ".", "/"); - strswap(file+1, "/lua", ".lua"); - int len; char *data = vfs_load(file, &len); - if( len ) { - data = memcpy(MALLOC(len+1), data, len), data[len] = 0; - //tty_color(data ? GREEN : RED); - //printf("%s (%s)\n%s", file, data ? "ok" : "failed", data); - //tty_color(0); - } - return lua_pushstring(L, data), 1; // "\n\tcannot find `%s` within mounted zipfiles", file), 1; -} - -// add our zip loader at the end of package.loaders -void lua_add_ziploader(lua_State* L) { - lua_pushcfunction( L, f_vfs_read ); - lua_setglobal( L, "vfs_read" ); - - luaL_dostringsafe(L, -// "package.path = [[;;<>;]]\n" // .. package.path\n" - "package.searchers[#package.searchers + 1] = function(libraryname)\n" - " for pattern in string.gmatch( package.path, '[^;]+' ) do\n" - " local proper_path = string.gsub(pattern, '?', libraryname)\n" - " local f = vfs_read(proper_path)\n" - " if f ~= nil then\n" - " return load(f, proper_path)\n" - " end\n" - " end\n" - " return nil\n" - "end\n" - ); -} - -void *script_init_env(unsigned flags) { - if( flags & SCRIPT_LUA ) { - lua_State *L = luaL_newstate(); - luaL_openlibs(L); - - if( flags & SCRIPT_DEBUGGER ) { - // Register debuggers/inspectors - // luaL_dostringsafe(L, "I = require('inspect').inspect\n"); - dbg_setup_default(L); - } - - lua_add_ziploader(L); - return L; - } - - return 0; -} - -bool script_push(void *env) { - array_push(Ls, L = env); - return true; -} - -bool script_pop() { - L = array_count(Ls) && (array_pop(Ls), array_count(Ls)) ? *array_back(Ls) : NULL; - return !!array_count(Ls); -} +// dll ------------------------------------------------------------------------ + +/* deprecated +#if is(win32) +# include +# define dlopen(name,flags) (void*)( (name) ? LoadLibraryA(name) : GetModuleHandleA(NULL)) +# define dlsym(handle,symbol) GetProcAddress((HMODULE)(handle), symbol ) +# define dlclose(handle) 0 +#else +# include +# define dlopen(name,flags) (void*)( (name) ? dlopen(name, flags) : NULL ) +# define dlsym(handle,symbol) dlsym( (handle) ? (handle) : ifdef(osx,RTLD_SELF,NULL), symbol ) +#endif +*/ + +void* dll(const char *fname, const char *symbol) { + if( fname && !file_exist(fname) ) { + char *buf, *path = file_path(fname), *base = file_base(fname); + if( file_exist(buf = va("%s%s.dll", path, base)) || + file_exist(buf = va("%s%s.so", path, base)) || + file_exist(buf = va("%slib%s.so", path, base)) || + file_exist(buf = va("%s%s.dylib", path, base)) ) { + fname = (const char *)buf; + } else { + return NULL; + } + } +#if is(win32) + return (void*)GetProcAddress(fname ? LoadLibraryA(fname) : GetModuleHandleA(NULL), symbol); +#else + return dlsym(fname ? dlopen(fname, RTLD_NOW|RTLD_LOCAL) : ifdef(osx, RTLD_SELF, NULL), symbol); +#endif +} + +#if 0 // demo: cl demo.c /LD && REM dll +EXPORT int add2(int a, int b) { return a + b; } +int main() { int (*adder)() = dll("demo.dll", "add2"); printf("%d\n", adder(2,3)); } +#endif + +// script --------------------------------------------------------------------- + +typedef lua_State lua; + +// the Lua interpreter(s) +static array(lua*) Ls; + +// the **current** Lua interpreter +static lua *L; + +#if is(linux) +void luaopen_libv4k(lua_State *L) {} +#endif + +static void* script__realloc(void *userdef, void *ptr, size_t osize, size_t nsize) { + (void)userdef; + return ptr = REALLOC( ptr, /* (osize+1) * */ nsize ); +} +static int script__traceback(lua_State *L) { + if (!lua_isstring(L, 1)) { // try metamethod if non-string error object + if (lua_isnoneornil(L, 1) || + !luaL_callmeta(L, 1, "__tostring") || + !lua_isstring(L, -1)) + return 1; // return non-string error object + lua_remove(L, 1); // replace object with result of __tostring metamethod + } + luaL_traceback(L, L, lua_tostring(L, 1), 1); + return 1; +} +static void script__error(lua_State *L, int status) { + if (status != 0) { + const char *errormsg = lua_tostring(L, -1); + PRINTF( "!-- %s\n", errormsg); + lua_pop(L, 1); // remove error message + } +} +static int script__call(lua_State *L, int narg, int clear) { +#if ENABLE_FASTCALL_LUA + lua_call(L, 0, 0); + return 0; +#else + int base = lua_gettop(L) - narg; // function index + lua_pushcfunction(L, script__traceback); // push traceback function + lua_insert(L, base); // put it under chunk and args + int status = lua_pcall(L, narg, (clear ? 0 : LUA_MULTRET), base); + script__error(L, status); + lua_remove(L, base); // remove traceback function + if (status != 0) lua_gc(L, LUA_GCCOLLECT, 0); // force gc in case of errors + return status; +#endif +} + +void script_bind_function(const char *c_name, void *c_function) { + lua_pushcfunction( L, c_function ); + lua_setglobal( L, c_name ); +} + +void script_call(const char *lua_function) { + lua_getglobal( L, lua_function ); + script__call( L, 0, 1 ); +} + +void script_bind_class(const char *classname, int num, const char **methods, void **functions) { + lua_newtable( L ); + + for( int i = 0; i < num; ++i) { + lua_pushcfunction( L, functions[i] ); + lua_setfield( L, 1, methods[i] ); + } + + lua_setglobal( L, classname ); +} + +void script_run(const char *script) { + int ret = luaL_dostring(L, script); + if( ret != LUA_OK ) { + PRINTF("!Script failed to run: %s\n", lua_tostring(L, -1)); + lua_pop(L, 1); // pop error message + } +} + +void script_runfile(const char *pathfile) { + PRINTF( "Loading script '%s'\n", pathfile ); + int loadResult = luaL_loadfile( L, pathfile ); + + /**/ if( loadResult == LUA_OK ) { + script__call( L, 0, 1 ); + } + else if( loadResult == LUA_ERRSYNTAX ) { + PRINTF("!Script failed to load (LUA_ERRSYNTAX, '%s'): %s\n", lua_tostring( L, 1 ), pathfile ); +// lua_pop(L, 1); // pop error message + } + else if( loadResult == LUA_ERRMEM ) { + PRINTF("!Script failed to load (LUA_ERRMEM): %s\n", pathfile); + } + else { + PRINTF("!Script failed to load: %s\n", pathfile ); + } +} + +// syntax sugars +/* usage: +int window_create_lua(lua *L) { + window_create(arg_float(1), arg_int(2)); + return_void(0); +} +int window_swap_lua(lua *L) { + int r = window_swap(); + return_int(r); +} +*/ + +#define arg_int(nth) lua_tointeger(L, nth) +#define arg_bool(nth) lua_toboolean(L, nth) +#define arg__Bool(nth) lua_toboolean(L, nth) +#define arg_float(nth) (float)lua_tonumber(L, nth) +#define arg_double(nth) lua_tonumber(L, nth) +#define arg_string(nth) lua_tolstring(L, nth, 0) +#define return_void(x) return ((x), 0) +#define return_bool(x) return (lua_pushboolean(L, x), 1) +#define return__Bool(x) return (lua_pushboolean(L, x), 1) +#define return_int(x) return (lua_pushinteger(L, x), 1) +#define return_float(x) return (lua_pushnumber(L, x), 1) +#define return_double(x) return (lua_pushnumber(L, x), 1) +#define return_string(x) return (lua_pushstring(L, x), 1) + +#define WRAP_ALL(...) EXPAND(WRAP_ALL, __VA_ARGS__) +#define WRAP_ALL2(rc, func) int func##_lua(lua*L) { return_##rc(func()); } +#define WRAP_ALL3(rc, func, a1) int func##_lua(lua*L) { return_##rc(func(arg_##a1(1))); } +#define WRAP_ALL4(rc, func, a1,a2) int func##_lua(lua*L) { return_##rc(func(arg_##a1(1),arg_##a2(2))); } + +#define BIND_ALL(...) EXPAND(BIND_ALL, __VA_ARGS__); +#define BIND_ALL2(rc,func) script_bind_function(#func, func##_lua) +#define BIND_ALL3(rc,func,a1) script_bind_function(#func, func##_lua) +#define BIND_ALL4(rc,func,a1,a2) script_bind_function(#func, func##_lua) + +#define XMACRO(X) /* @fixme: add all remaining V4K functions */ \ + X(bool, window_create, float, int ) \ + X(bool, window_swap ) \ + X(void, ddraw_grid, float ) \ + X(bool, ui_panel, string, int ) \ + X(bool, ui_notify, string, string ) \ + X(void, ui_panel_end ) + +XMACRO(WRAP_ALL) + +void script_quit(void) { + if( L ) { + lua_close(L); + L = 0; + } +} +void script_init() { + if( !L ) { + // v4k_init(); + + // initialize Lua + L = lua_newstate(script__realloc, 0); // L = luaL_newstate(); + + // load various Lua libraries + luaL_openlibs(L); + luaopen_base(L); + luaopen_table(L); + luaopen_io(L); + luaopen_string(L); + luaopen_math(L); + + // enable ffi (via luaffi) + luaopen_ffi(L); + + // @fixme: workaround that prevents script binding on lua 5.4.3 on top of luajit 2.1.0-beta3 on linux. lua_setglobal() crashing when accessing null L->l_G + if(L->l_G) { + XMACRO(BIND_ALL); + } + + atexit(script_quit); + } +} + +bool script_tests() { + // script test (lua) + script_run( "-- Bye.lua\nio.write(\"script test: Bye world!, from \", _VERSION, \"\\n\")" ); + return true; +} + +#undef XMACRO + +// script v2 ------------------------------------------------------------------ + +#define luaL_dostringsafe(L, str) \ + luaL_dostring(L, \ + "xpcall(function()\n" \ + str \ + "end, function(err)\n" \ + " print('Error: ' .. tostring(err))\n" \ + " print(debug.traceback(nil, 2))\n" \ + " if core and core.on_error then\n" \ + " pcall(core.on_error, err)\n" \ + " end\n" \ + " os.exit(1)\n" \ + "end)" \ + ); + +static int f_vfs_read(lua_State *L) { + char *file = file_normalize(luaL_checkstring(L, 1)); + if( strbegi(file, app_path()) ) file += strlen(app_path()); + strswap(file+1, ".", "/"); + strswap(file+1, "/lua", ".lua"); + int len; char *data = vfs_load(file, &len); + if( len ) { + data = memcpy(MALLOC(len+1), data, len), data[len] = 0; + //tty_color(data ? GREEN : RED); + //printf("%s (%s)\n%s", file, data ? "ok" : "failed", data); + //tty_color(0); + } + return lua_pushstring(L, data), 1; // "\n\tcannot find `%s` within mounted zipfiles", file), 1; +} + +// add our zip loader at the end of package.loaders +void lua_add_ziploader(lua_State* L) { + lua_pushcfunction( L, f_vfs_read ); + lua_setglobal( L, "vfs_read" ); + + luaL_dostringsafe(L, +// "package.path = [[;;<>;]]\n" // .. package.path\n" + "package.searchers[#package.searchers + 1] = function(libraryname)\n" + " for pattern in string.gmatch( package.path, '[^;]+' ) do\n" + " local proper_path = string.gsub(pattern, '?', libraryname)\n" + " local f = vfs_read(proper_path)\n" + " if f ~= nil then\n" + " return load(f, proper_path)\n" + " end\n" + " end\n" + " return nil\n" + "end\n" + ); +} + +void *script_init_env(unsigned flags) { + if( flags & SCRIPT_LUA ) { + lua_State *L = luaL_newstate(); + luaL_openlibs(L); + + if( flags & SCRIPT_DEBUGGER ) { + // Register debuggers/inspectors + // luaL_dostringsafe(L, "I = require('inspect').inspect\n"); + dbg_setup_default(L); + } + + lua_add_ziploader(L); + return L; + } + + return 0; +} + +bool script_push(void *env) { + array_push(Ls, L = env); + return true; +} + +bool script_pop() { + L = array_count(Ls) && (array_pop(Ls), array_count(Ls)) ? *array_back(Ls) : NULL; + return !!array_count(Ls); +} #line 0 #line 1 "v4k_file.c" -// ----------------------------------------------------------------------------- -// file - -#if 0 // ifdef _WIN32 -#include -#if is(tcc) - #define CP_UTF8 65001 - int WINAPI MultiByteToWideChar(); - int WINAPI WideCharToMultiByte(); -#endif -// widen() ? string1252() ? string16() ? stringw() ? -wchar_t *widen(const char *utf8) { // wide strings (win only) - int chars = MultiByteToWideChar(CP_UTF8, 0, utf8, -1, NULL, 0); - char *buf = va("%.*s", (int)(chars * sizeof(wchar_t)), ""); - return MultiByteToWideChar(CP_UTF8, 0, utf8, -1, (void*)buf, chars), (wchar_t *)buf; -} -#define open8(path,mode) ifdef(win, _wopen(widen(path)) , open(path, mode) ) -#define fopen8(path,mode) ifdef(win, _wfopen(widen(path),widen(mode)) , fopen(path,mode) ) -#define remove8(path) ifdef(win, _wremove(widen(path)) , remove(path) ) -#define rename8(path) ifdef(win, _wrename(widen(path)) , rename(path) ) -#define stat8(path,st) ifdef(win, _wstat(widen(path),st) , stat(path,st) ) // _stati64() -#define stat8_t ifdef(win, _stat , stat_t ) // struct _stati64 -#endif - -char *file_name(const char *pathfile) { - char *s = strrchr(pathfile, '/'), *t = strrchr(pathfile, '\\'); - return va("%s", s > t ? s+1 : t ? t+1 : pathfile); -} -char *file_base(const char *pathfile) { - char *s = file_name(pathfile); - char *e = file_ext(pathfile); - return s[ strlen(s) - strlen(e) ] = '\0', s; -} -char *file_pathabs( const char *pathfile ) { - char *out = va("%*.s", DIR_MAX+1, ""); -#if is(win32) - _fullpath(out, pathfile, DIR_MAX); -#else - realpath(pathfile, out); -#endif - return out; -} -char *file_path(const char *pathfile) { - return va("%.*s", (int)(strlen(pathfile)-strlen(file_name(pathfile))), pathfile); -} -char *file_load(const char *filename, int *len) { // @todo: 32 counters/thread enough? - static __thread array(char) buffer[32] = {0}, *invalid[1]; - static __thread unsigned i = 0; i = (i+1) % 32; - - FILE *fp = filename[0] ? fopen(filename, "rb") : NULL; - if( fp ) { - fseek(fp, 0L, SEEK_END); - size_t sz = ftell(fp); - fseek(fp, 0L, SEEK_SET); - array_resize(buffer[i], sz+1); - sz *= fread(buffer[i],sz,1,fp) == 1; - buffer[i][sz] = 0; - if(len) *len = (int)sz; - fclose(fp); - return buffer[i]; // @fixme: return 0 on error instead? - } - if (len) *len = 0; - return 0; -} -char *file_read(const char *filename) { // @todo: fix leaks - return file_load(filename, NULL); -} -bool file_write(const char *name, const void *ptr, int len) { - bool ok = 0; - for( FILE *fp = name && ptr && len >= 0 ? fopen(name, "wb") : NULL; fp; fclose(fp), fp = 0) { - ok = fwrite(ptr, len,1, fp) == 1; - } - return ok; -} -bool file_append(const char *name, const void *ptr, int len) { - bool ok = 0; - for( FILE *fp = name && ptr && len >= 0 ? fopen(name, "a+b") : NULL; fp; fclose(fp), fp = 0) { - ok = fwrite(ptr, len,1, fp) == 1; - } - return ok; -} -static // not exposed -bool file_stat(const char *fname, struct stat *st) { - // remove ending slashes. win32+tcc does not like them. - int l = strlen(fname), m = l; - while( l && (fname[l-1] == '/' || fname[l-1] == '\\') ) --l; - fname = l == m ? fname : va("%.*s", l, fname); - return stat(fname, st) >= 0; -} -uint64_t file_stamp(const char *fname) { - struct stat st; - return !file_stat(fname, &st) ? 0ULL : st.st_mtime; -} -uint64_t file_stamp10(const char *fname) { - time_t mtime = (time_t)file_stamp(fname); - struct tm *ti = localtime(&mtime); - return atoi64(va("%04d%02d%02d%02d%02d%02d",ti->tm_year+1900,ti->tm_mon+1,ti->tm_mday,ti->tm_hour,ti->tm_min,ti->tm_sec)); -} -uint64_t file_size(const char *fname) { - struct stat st; - return !file_stat(fname, &st) ? 0ULL : st.st_size; -} -bool file_directory( const char *pathfile ) { - struct stat st; - return !file_stat(pathfile, &st) ? 0 : S_IFDIR == ( st.st_mode & S_IFMT ); -} -bool file_exist(const char *fname) { - struct stat st; - return !file_stat(fname, &st) ? false : true; -} -char *file_normalize(const char *name) { - char *copy = va("%s", name), *s = copy, c; -#if is(win32) - for( int i = 0; copy[i]; ++i ) { if(copy[i] == '/') copy[i] = '\\'; if(copy[i] == '\'') copy[i] = '\"'; } -#else - for( int i = 0; copy[i]; ++i ) { if(copy[i] == '\\') copy[i] = '/'; if(copy[i] == '\"') copy[i] = '\''; } -#endif - return copy; -} -#if 0 -char *file_normalize(const char *name) { - char *copy = va("%s", name), *s = copy, c; - // lowercases+digits+underscores+slashes only. anything else is truncated. - for( ; *name ; ++name ) { - /**/ if( *name >= 'a' && *name <= 'z' ) *s++ = *name; - else if( *name >= 'A' && *name <= 'Z' ) *s++ = *name - 'A' + 'a'; - else if( *name >= '0' && *name <= '9' ) *s++ = *name; - else if( *name == '/' || *name == '\\') *s++ = '/'; - else if( *name <= ' ' || *name == '.' ) *s++ = '_'; - } *s++ = 0; - // remove dupe slashes - for( name = s = copy, c = '/'; *name ; ) { - while( *name && *name != c ) *s++ = *name++; - if( *name ) *s++ = c; - while( *name && *name == c ) name++; - } *s++ = 0; - // remove dupe underlines - for( name = s = copy, c = '_'; *name ; ) { - while( *name && *name != c ) *s++ = *name++; - if( *name ) *s++ = c; - while( *name && *name == c ) name++; - } *s++ = 0; - return copy; -} -char *file_normalize_with_folder(const char *name) { - char *s = file_normalize(name); - char *slash = strrchr(s, '/'); if(slash) *slash = 0; - char *penultimate = strrchr(s, '/'); if(slash) *slash = '/'; - return penultimate ? penultimate+1 : /*slash ? slash+1 :*/ s; -} -#endif -char *file_ext(const char *name) { - char *b = file_name(name), *s = strchr(b, '.'); //strrchr(name, '.'); - return va("%s", s ? s : "" ); // , name ); -} - -char *file_id(const char *pathfile) { - char *dir = file_path(pathfile); for(int i=0;dir[i];++i) dir[i]=tolower(dir[i]); - char *base = file_name(pathfile); for(int i=0;base[i];++i) base[i]=tolower(base[i]); -#if 0 // extensionless, larry.mid and larry.txt will collide, diffuse.tga and diffuse.png will match -char *ext = strchr(base, '.'); if (ext) ext[0] = '\0'; // remove all extensions -#else // extensionless for audio/images only (materials: diffuse.tga and diffuse.png will match) -char *ext = strrchr(base, '.'); //if (ext) ext[0] = '\0'; // remove all extensions - if(ext) if( strstr(".jpg.png.bmp.tga.hdr"".", ext) || strstr(".ogg.mp3.wav.mod.xm.flac"".", ext) || strstr(".mp4.ogv.avi.mkv.wmv.mpg.mpeg"".", ext) ) { - ext = strchr(base, '.'); - ext[0] = '\0'; //strcpy(ext, "_xxx"); - } -#endif - -// if (!dir[0]) return base; - char *stem = va("%s/%s", dir, base); // file_name(dir); - - // /path2/path1/file2_file1 -> file1_file2/path1/path2 - int len = 0; - int ids_count = 0; - char ids[64][64] = { 0 }; - // split path stems - for each_substring(stem, "/\\@", key) { - int tokens_count = 0; - char* tokens[64] = { 0 }; - // split tokens - for each_substring(key, "[]()_ ", it) { - tokens[tokens_count++] = va("%s", it); - } - // sort alphabetically - if( tokens_count > 1 ) qsort(tokens, tokens_count, sizeof(char *), strcmp_qsort); - // concat sorted token1_token2_... - char built[256]; *built = 0; - for( int i = 0; i < tokens_count; ++i ) { - strlcat(built, "_", 256); - strlcat(built, tokens[i], 256); - } - strncpy( ids[ ids_count ], &built[1], 64 ); - len += strlen( ids[ ids_count++ ] ); - } - // concat in inverse order: file/path1/path2/... - char buffer[DIR_MAX]; buffer[0] = 0; - for( int it = ids_count; --it >= 0; ) { - strcat(buffer, ids[it]); - strcat(buffer, "/"); - } - return va("%s", buffer); -} -array(char*) file_list(const char *pathmasks) { - static __thread array(char*) list = 0; // @fixme: add 16 slots - - for( int i = 0; i < array_count(list); ++i ) { - FREE(list[i]); - } - array_resize(list, 0); - - for each_substring(pathmasks,";",pathmask) { - char *cwd = 0, *masks = 0; - char *slash = strrchr(pathmask, '/'); - if( !slash ) cwd = "./", masks = pathmask; - else { - masks = va("%s", slash+1); - cwd = pathmask, slash[1] = '\0'; - } - if( !masks[0] ) masks = "*"; - - ASSERT(strend(cwd, "/"), "Error: dirs like '%s' must end with slash", cwd); - - int recurse = strstr(cwd, "**") || strstr(masks, "**"); - strswap(cwd, "**", "./"); - - dir *d = dir_open(cwd, recurse ? "r" : ""); - if( d ) { - for( int i = 0; i < dir_count(d); ++i ) { - if( dir_file(d,i) ) { - // dir_name() should return full normalized paths "C:/prj/v4k/demos/art/fx/fxBloom.fs". should exclude system dirs as well - char *entry = dir_name(d,i); - char *fname = file_name(entry); - - int allowed = 0; - for each_substring(masks,";",mask) { - allowed |= strmatch(fname, mask); - } - if( !allowed ) continue; - - // if( strstr(fname, "/.") ) continue; // @fixme: still needed? useful? - - // insert copy - char *copy = STRDUP(entry); - array_push(list, copy); - } - } - dir_close(d); - } - } - - array_sort(list, strcmp); - return list; -} - -bool file_move(const char *src, const char *dst) { - bool ok = file_exist(src) && !file_exist(dst) && 0 == rename(src, dst); - return ok; -} -bool file_delete(const char *pathfile) { - if( file_exist(pathfile) ) { - for( int i = 0; i < 10; ++i ) { - bool ok = 0 == unlink(pathfile); - if( ok ) return true; - sleep_ms(10); - } - return false; - } - return true; -} -bool file_copy(const char *src, const char *dst) { - int ok = 0, BUFSIZE = 1 << 20; // 1 MiB - static __thread char *buffer = 0; do_once buffer = REALLOC(0, BUFSIZE); // @leak - for( FILE *in = fopen(src, "rb"); in; fclose(in), in = 0) { - for( FILE *out = fopen(dst, "wb"); out; fclose(out), out = 0, ok = 1) { - for( int n; !!(n = fread( buffer, 1, BUFSIZE, in )); ){ - if(fwrite( buffer, 1, n, out ) != n) - return fclose(in), fclose(out), false; - } - } - } - return ok; -} - -char* file_tempname() { - static __thread int id; - return va("%s/v4k-temp.%s.%p.%d", app_temp(), getenv(ifdef(win32, "username", "USER")), &id, rand()); -} -FILE *file_temp(void) { - const char *fname = file_tempname(); - FILE *fp = fopen(fname, "w+b"); - if( fp ) unlink(fname); - return fp; -} - -char *file_counter(const char *name) { - static __thread char outfile[DIR_MAX], init = 0; - static __thread map(char*, int) ext_counters; - if(!init) map_init(ext_counters, less_str, hash_str), init = '\1'; - - char *base = va("%s",name), *ext = file_ext(name); - if(ext && ext[0]) *strstr(base, ext) = '\0'; - - int *counter = map_find_or_add(ext_counters, ext, 0); - while( *counter >= 0 ) { - *counter = *counter + 1; - sprintf(outfile, "%s(%03d)%s", base, *counter, ext); - if( !file_exist(outfile) ) { - return va("%s", outfile); - } - } - return 0; -} - -enum { MD5_HASHLEN = 16 }; -enum { SHA1_HASHLEN = 20 }; -enum { CRC32_HASHLEN = 4 }; - -void* file_sha1(const char *file) { // 20bytes - hash_state hs = {0}; - sha1_init(&hs); - for( FILE *fp = fopen(file, "rb"); fp; fclose(fp), fp = 0) { - char buf[8192]; - for( int inlen; (inlen = sizeof(buf) * fread(buf, sizeof(buf), 1, fp)); ) { - sha1_process(&hs, (const unsigned char *)buf, inlen); - } - } - unsigned char *hash = va("%.*s", SHA1_HASHLEN, ""); - sha1_done(&hs, hash); - return hash; -} - -void* file_md5(const char *file) { // 16bytes - hash_state hs = {0}; - md5_init(&hs); - for( FILE *fp = fopen(file, "rb"); fp; fclose(fp), fp = 0) { - char buf[8192]; - for( int inlen; (inlen = sizeof(buf) * fread(buf, sizeof(buf), 1, fp)); ) { - md5_process(&hs, (const unsigned char *)buf, inlen); - } - } - unsigned char *hash = va("%.*s", MD5_HASHLEN, ""); - md5_done(&hs, hash); - return hash; -} - -void* file_crc32(const char *file) { // 4bytes - unsigned crc = 0; - for( FILE *fp = fopen(file, "rb"); fp; fclose(fp), fp = 0) { - char buf[8192]; - for( int inlen; (inlen = sizeof(buf) * fread(buf, sizeof(buf), 1, fp)); ) { - crc = zip__crc32(crc, buf, inlen); // unsigned int stbiw__crc32(unsigned char *buffer, int len) - } - } - unsigned char *hash = va("%.*s", (int)sizeof(crc), ""); - memcpy(hash, &crc, sizeof(crc)); - return hash; -} - -#if 0 -void* crc32_mem(const void *ptr, int inlen) { // 4bytes - unsigned hash = 0; - hash = zip__crc32(hash, ptr, inlen); // unsigned int stbiw__crc32(unsigned char *buffer, int len) - return hash; -} -void* md5_mem(const void *ptr, int inlen) { // 16bytes - hash_state hs = {0}; - md5_init(&hs); - md5_process(&hs, (const unsigned char *)ptr, inlen); - unsigned char *hash = va("%.*s", MD5_HASHLEN, ""); - md5_done(&hs, hash); - return hash; -} -void* sha1_mem(const void *ptr, int inlen) { // 20bytes - hash_state hs = {0}; - sha1_init(&hs); - sha1_process(&hs, (const unsigned char *)ptr, inlen); - unsigned char *hash = va("%.*s", SHA1_HASHLEN, ""); - sha1_done(&hs, hash); - return hash; -} -unsigned crc32_mem(unsigned h, const void *ptr_, unsigned len) { - // based on public domain code by Karl Malbrain - const uint8_t *ptr = (const uint8_t *)ptr_; - if (!ptr) return 0; - const unsigned tbl[16] = { - 0x00000000, 0x1db71064, 0x3b6e20c8, 0x26d930ac, 0x76dc4190, 0x6b6b51f4, 0x4db26158, 0x5005713c, - 0xedb88320, 0xf00f9344, 0xd6d6a3e8, 0xcb61b38c, 0x9b64c2b0, 0x86d3d2d4, 0xa00ae278, 0xbdbdf21c }; - for(h = ~h; len--; ) { uint8_t b = *ptr++; h = (h >> 4) ^ tbl[(h & 15) ^ (b & 15)]; h = (h >> 4) ^ tbl[(h & 15) ^ (b >> 4)]; } - return ~h; -} -uint64_t crc64_mem(uint64_t h, const void *ptr, uint64_t len) { - // based on public domain code by Lasse Collin - // also, use poly64 0xC96C5795D7870F42 for crc64-ecma - static uint64_t crc64_table[256]; - static uint64_t poly64 = UINT64_C(0x95AC9329AC4BC9B5); - if( poly64 ) { - for( int b = 0; b < 256; ++b ) { - uint64_t r = b; - for( int i = 0; i < 8; ++i ) { - r = r & 1 ? (r >> 1) ^ poly64 : r >> 1; - } - crc64_table[ b ] = r; - //printf("%016llx\n", crc64_table[b]); - } - poly64 = 0; - } - const uint8_t *buf = (const uint8_t *)ptr; - uint64_t crc = ~h; // ~crc; - while( len != 0 ) { - crc = crc64_table[(uint8_t)crc ^ *buf++] ^ (crc >> 8); - --len; - } - return ~crc; -} -// https://en.wikipedia.org/wiki/MurmurHash -static inline uint32_t murmur3_scramble(uint32_t k) { - return k *= 0xcc9e2d51, k = (k << 15) | (k >> 17), k *= 0x1b873593; -} -uint32_t murmur3_mem(const uint8_t* key, size_t len, uint32_t seed) { - uint32_t h = seed; - uint32_t k; - /* Read in groups of 4. */ - for (size_t i = len >> 2; i; i--) { - // Here is a source of differing results across endiannesses. - // A swap here has no effects on hash properties though. - k = *((uint32_t*)key); - key += sizeof(uint32_t); - h ^= murmur3_scramble(k); - h = (h << 13) | (h >> 19); - h = h * 5 + 0xe6546b64; - } - /* Read the rest. */ - k = 0; - for (size_t i = len & 3; i; i--) { - k <<= 8; - k |= key[i - 1]; - } - // A swap is *not* necessary here because the preceeding loop already - // places the low bytes in the low places according to whatever endianness - // we use. Swaps only apply when the memory is copied in a chunk. - h ^= murmur3_scramble(k); - /* Finalize. */ - h ^= len; - h ^= h >> 16; - h *= 0x85ebca6b; - h ^= h >> 13; - h *= 0xc2b2ae35; - h ^= h >> 16; - return h; -} -#endif - -// ----------------------------------------------------------------------------- -// storage (emscripten only) - -void storage_mount(const char* folder) { - #if is(ems) - emscripten_run_script(va("FS.mkdir('%s'); FS.mount(IDBFS, {}, '%s');", folder, folder)); - #else - (void)folder; - #endif -} - -void storage_read() { - #if is(ems) - EM_ASM( - /* sync from persisted state into memory */ - FS.syncfs(true, function (err) { - assert(!err); - }); - ); - #endif -} - -void storage_flush() { - #if is(ems) - EM_ASM( - FS.syncfs(false, function (err) { - assert(!err); - }); - ); - #endif -} - -// ----------------------------------------------------------------------------- -// compressed archives - -// return list of files inside zipfile -array(char*) file_zip_list(const char *zipfile) { - static __thread array(char*) list[16] = {0}; - static __thread int count = 0; - - count = (count+1) % 16; - array_resize(list[count], 0); - - for( zip *z = zip_open(zipfile, "rb"); z; zip_close(z), z = 0) { - for( unsigned i = 0; i < zip_count(z); ++i ) { - array_push( list[count], zip_name(z, i) ); - } - } - - return list[count]; -} - -// extract single file content from zipfile -array(char) file_zip_extract(const char *zipfile, const char *filename) { - static __thread array(char) list[16] = {0}; - static __thread int count = 0; - - array(char) out = list[count = (count+1) % 16]; - array_resize(out, 0); - - for( zip *z = zip_open(zipfile, "rb"); z; zip_close(z), z = 0) { - int index = zip_find(z, filename); // convert entry to index. returns <0 if not found. - if( index < 0 ) return zip_close(z), out; - - unsigned outlen = zip_size(z, index); - unsigned excess = zip_excess(z, index); - array_resize(out, outlen + 1 + excess); - unsigned ret = zip_extract_inplace(z, index, out, array_count(out)); - if(ret) { out[outlen] = '\0'; array_resize(out, outlen); } else { array_resize(out, 0); } - } - - return out; -} - -// append single file into zipfile. compress with DEFLATE|6. Other compressors are also supported (try LZMA|5, ULZ|9, LZ4X|3, etc.) -bool file_zip_append(const char *zipfile, const char *filename, int clevel) { - bool ok = false; - for( zip *z = zip_open(zipfile, "a+b"); z; zip_close(z), z = 0) { - for( FILE *fp = fopen(filename, "rb"); fp; fclose(fp), fp = 0) { - ok = zip_append_file(z, filename, "", fp, clevel); - } - } - return ok; -} - -// append mem blob into zipfile. compress with DEFLATE|6. Other compressors are also supported (try LZMA|5, ULZ|9, LZ4X|3, etc.) -// @fixme: implement zip_append_mem() and use that instead -bool file_zip_appendmem(const char *zipfile, const char *entryname, const void *ptr, unsigned len, int clevel) { - bool ok = false; - if( ptr ) - for( zip *z = zip_open(zipfile, "a+b"); z; zip_close(z), z = 0) { - ok = zip_append_mem(z, entryname, "", ptr, len, clevel); - } - return ok; -} - -// ----------------------------------------------------------------------------- -// archives - -enum { is_zip, is_tar, is_pak, is_dir }; - -typedef struct archive_dir { - char* path; - union { - int type; - int size; // for cache only - }; - union { - void *archive; - void *data; // for cache only - zip* zip_archive; - tar* tar_archive; - pak* pak_archive; - }; - struct archive_dir *next; -} archive_dir; - -static archive_dir *dir_mount; -static archive_dir *dir_cache; - -#ifndef MAX_CACHED_FILES // @todo: should this be MAX_CACHED_SIZE (in MiB) instead? -#define MAX_CACHED_FILES 32 // @todo: should we cache the cooked contents instead? ie, stbi() result instead of file.png? -#endif - -struct vfs_entry { - const char *name; - const char *id; - unsigned size; -}; -static array(struct vfs_entry) vfs_hints; // mounted raw assets -static array(struct vfs_entry) vfs_entries; // mounted cooked assets - -static bool vfs_mount_hints(const char *path); - -void vfs_reload() { - const char *app = app_name(); - - array_resize(vfs_hints, 0); // @leak - array_resize(vfs_entries, 0); // @leak - - // mount virtual filesystems later (mounting order matters: low -> to -> high priority) -#if defined(EMSCRIPTEN) - vfs_mount("index.zip"); -#else - // mount fused executables - vfs_mount(va("%s%s%s", app_path(), app_name(), ifdef(win32, ".exe", ""))); - // mount all zipfiles - for each_array( file_list("*.zip"), char*, file ) vfs_mount(file); -#endif - - // vfs_resolve() will use these art_folder locations as hints when cook-on-demand is in progress. - // cook-on-demand will not be able to resolve a virtual pathfile if there are no cooked assets on disk, - // unless there is a record of what's actually on disk somewhere, and that's where the hints belong to. - if( COOK_ON_DEMAND ) - for each_substring(ART,",",art_folder) { - vfs_mount_hints(art_folder); - } -} - - - -#define ARK1 0x41724B31 // 'ArK1' in le, 0x314B7241 41 72 4B 31 otherwise -#define ARK1_PADDING (512 - 40) // 472 -#define ARK_PRINTF(f,...) 0 // printf(f,__VA_ARGS__) -#define ARK_SWAP32(x) (x) -#define ARK_SWAP64(x) (x) -#define ARK_REALLOC REALLOC -static uint64_t ark_fget64( FILE *in ) { uint64_t v; fread( &v, 8, 1, in ); return ARK_SWAP64(v); } -void ark_list( const char *infile, zip **z ) { - for( FILE *in = fopen(infile, "rb"); in; fclose(in), in = 0 ) - while(!feof(in)) { - if( 0 != (ftell(in) % ARK1_PADDING) ) fseek(in, ARK1_PADDING - (ftell(in) % ARK1_PADDING), SEEK_CUR); - ARK_PRINTF("Reading at #%d\n", (int)ftell(in)); - uint64_t mark = ark_fget64(in); - if( mark != ARK1 ) continue; - uint64_t stamp = ark_fget64(in); - uint64_t datalen = ark_fget64(in); - uint64_t datahash = ark_fget64(in); - uint64_t namelen = ark_fget64(in); - - *z = zip_open_handle(in, "rb"); - return; - } -} - - - -static -bool vfs_mount_(const char *path, array(struct vfs_entry) *entries) { - const char *path_bak = path; - - zip *z = NULL; tar *t = NULL; pak *p = NULL; dir *d = NULL; - int is_folder = ('/' == path[strlen(path)-1]); - if( is_folder ) d = dir_open(path, "rb"); - if( is_folder && !d ) return 0; - if( !is_folder ) z = zip_open(path, "rb"); - if( !is_folder && !z ) t = tar_open(path, "rb"); - if( !is_folder && !z && !t ) p = pak_open(path, "rb"); - if( !is_folder && !z && !t && !p ) ark_list(path, &z); // last resort. try as .ark - if( !is_folder && !z && !t && !p ) return 0; - - // normalize input -> "././" to "" - while (path[0] == '.' && path[1] == '/') path += 2; - path = STRDUP(path); - if( z || t || p ) { - // save local path for archives, so we can subtract those from upcoming requests - if(strrchr(path,'/')) strrchr(path,'/')[1] = '\0'; - } else if(d) 0[(char*)path] = 0; - - // append to mounted archives - archive_dir *prev = dir_mount, zero = {0}; - *(dir_mount = REALLOC(0, sizeof(archive_dir))) = zero; - dir_mount->next = prev; - dir_mount->path = (char*)path; - dir_mount->archive = z ? (void*)z : t ? (void*)t : p ? (void*)p : (void*)d; - dir_mount->type = is_folder ? is_dir : z ? is_zip : t ? is_tar : p ? is_pak : -1; - ASSERT(dir_mount->type >= 0 && dir_mount->type < 4); - - // append list of files to internal listing - for( archive_dir *dir = dir_mount; dir ; dir = 0 ) { // for(archive_dir *dir = dir_mount; dir; dir = dir->next) { - assert(dir->type >= 0 && dir->type < 4); - unsigned (*fn_count[4])(void*) = {(void*)zip_count, (void*)tar_count, (void*)pak_count, (void*)dir_count}; - char* (*fn_name[4])(void*, unsigned index) = {(void*)zip_name, (void*)tar_name, (void*)pak_name, (void*)dir_name}; - unsigned (*fn_size[4])(void*, unsigned index) = {(void*)zip_size, (void*)tar_size, (void*)pak_size, (void*)dir_size}; - - for( unsigned idx = 0, end = fn_count[dir->type](dir->archive); idx < end; ++idx ) { - assert(idx < end); - const char *filename = STRDUP( fn_name[dir->type](dir->archive, idx) ); - const char *fileid = STRDUP( file_id(filename) ); - unsigned filesize = fn_size[dir->type](dir->archive, idx); - // printf("%u) %s %u [%s]\n", idx, filename, filesize, fileid); - // append to list - array_push(*entries, (struct vfs_entry){filename, fileid, filesize}); - } - - // PRINTF("Mounted VFS volume '%s' (%u entries)\n", path_bak, fn_count[dir->type](dir->archive) ); - } - - return 1; -} -static -bool vfs_mount_hints(const char *path) { - return vfs_mount_(path, &vfs_hints); -} -bool vfs_mount(const char *path) { - return vfs_mount_(path, &vfs_entries); -} -array(char*) vfs_list(const char *masks) { - static __thread array(char*) list = 0; // @fixme: add 16 slots - - for( int i = 0; i < array_count(list); ++i ) { - FREE(list[i]); - } - array_resize(list, 0); - - for each_substring(masks,";",it) { - if( COOK_ON_DEMAND ) // edge case: any game using only vfs api + cook-on-demand flag will never find any file - for each_array(file_list(it), char*, item) { - // insert copy - char *copy = STRDUP(item); - array_push(list, copy); - } - - it = va("*/%s", it); - // int recurse = !!strstr(it, "**"); // @fixme: support non-recursive - for( unsigned i = 0; i < array_count(vfs_entries); ++i ) { - const char *name = vfs_entries[i].name; - if( strmatch(name, it) ) { - // insert copy - char *copy = STRDUP(name); - array_push(list, copy); - } - } - } - - // sort alphabetically then remove dupes - array_sort(list, strcmp); - array_unique(list, strcmp_qsort); - - return list; -} - -static -char *vfs_unpack(const char *pathfile, int *size) { // must FREE() after use - // @todo: add cache here - char *data = NULL; - for(archive_dir *dir = dir_mount; dir && !data; dir = dir->next) { - if( dir->type == is_dir ) { -#if 0 // sandboxed - char buf[DIR_MAX]; - snprintf(buf, sizeof(buf), "%s%s", dir->path, pathfile); - data = file_load(buf, size); -#endif - } else { - int (*fn_find[3])(void *, const char *) = {(void*)zip_find, (void*)tar_find, (void*)pak_find}; - void* (*fn_unpack[3])(void *, unsigned) = {(void*)zip_extract, (void*)tar_extract, (void*)pak_extract}; - unsigned (*fn_size[3])(void *, unsigned) = {(void*)zip_size, (void*)tar_size, (void*)pak_size}; - -#if 0 - const char* cleanup = pathfile + strbegi(pathfile, dir->path) * strlen(dir->path); - while (cleanup[0] == '/') ++cleanup; -#else - const char *cleanup = pathfile; -#endif - - int index = fn_find[dir->type](dir->archive, cleanup); - data = fn_unpack[dir->type](dir->archive, index); - if( size ) *size = fn_size[dir->type](dir->archive, index); - } - // printf("%c trying %s in %s ...\n", data ? 'Y':'N', pathfile, dir->path); - } - //wait_ms(1000); // <-- simulate slow hdd - return data; -} - -const char *vfs_resolve(const char *pathfile) { - // we dont resolve absolute paths. they dont belong to the vfs - // if( pathfile[0] == '/' || pathfile[0] == '\\' || pathfile[1] == ':' ) return pathfile; - - char* id = file_id(pathfile); - // find best match (vfs_entries first) - for (int i = array_count(vfs_entries); --i >= 0; ) { - if (strbegi(vfs_entries[i].id, id) ) { - return vfs_entries[i].name; - } - } - // find best match (vfs_hints later) - for (int i = array_count(vfs_hints); --i >= 0; ) { - if (strbegi(vfs_hints[i].id, id) ) { - return vfs_hints[i].name; - } - } - return pathfile; -} - -char* vfs_load(const char *pathfile, int *size_out) { // @todo: fix leaks, vfs_unpack() - // @fixme: handle \\?\ absolute path (win) - if (!pathfile[0]) return file_load(pathfile, size_out); - while( pathfile[0] == '.' && (pathfile[1] == '/' || pathfile[1] == '\\') ) pathfile += 2; - // if (pathfile[0] == '/' || pathfile[1] == ':') return file_load(pathfile, size_out); // @fixme: handle current cooked /home/V4K or C:/V4K path cases within zipfiles - -if( size_out ) *size_out = 0; -if( strend(pathfile, "/") ) return 0; // it's a dir -static __thread map(char*,int) misses = 0, *init = 0; if(!init) init = misses, map_init(misses, less_str, hash_str); -int *found = map_find_or_add_allocated_key(misses, STRDUP(pathfile), -1); // [-1]non-init,[false]could not cook,[true]cooked -if( found && *found == 0 ) { - return 0; -} - - //{ - // exclude garbage from material names - // @todo: exclude double slashs in paths - char *base = file_name(pathfile); if(strchr(base,'+')) base = strchr(base, '+')+1; - if(base[0] == '\0') return 0; // it's a dir - char *folder = file_path(pathfile); - pathfile = va("%s%s", folder, base); - - // solve virtual path - pathfile = va("%s", vfs_resolve(pathfile)); - base = file_name(pathfile); - if(base[0] == '\0') return 0; // it's a dir - folder = file_path(pathfile); - // ease folders reading by shortening them: /home/rlyeh/prj/v4k/art/demos/audio/coin.wav -> demos/audio/coin.wav - // or C:/prj/v4k/engine/art/fonts/B612-BoldItalic.ttf -> fonts/B612-BoldItalic.ttf - static __thread array(char*) art_paths = 0; - if(!art_paths) for each_substring(ART,",",stem) array_push(art_paths, STRDUP(stem)); - char* pretty_folder = ""; - if( folder ) for( int i = 0; i < array_count(art_paths); ++i ) { - if( strbeg(folder, art_paths[i]) ) { pretty_folder = folder + strlen(art_paths[i]); break; } - } - //} - - int size = 0; - void *ptr = 0; - -#if 0 - // clean pathfile - while (pathfile[0] == '.' && pathfile[1] == '/') pathfile += 2; - while (pathfile[0] == '/') ++pathfile; -#endif - - const char *lookup_id = /*file_normalize_with_folder*/(pathfile); - - // search (last item) - static __thread char last_item[256] = { 0 }; - static __thread void *last_ptr = 0; - static __thread int last_size = 0; - if( !strcmpi(lookup_id, last_item)) { - ptr = last_ptr; - size = last_size; - } - - // search (cache) - if( !ptr && !is(osx) ) { // @todo: remove silicon mac M1 hack - ptr = cache_lookup(lookup_id, &size); - } - - if( ptr ) { - PRINTF("Loading VFS (%s)%s (cached)\n", pretty_folder, base); - } else { - PRINTF("Loading VFS (%s)%s\n", pretty_folder, base); - } - - // read cooked asset from mounted disks - if( !ptr ) { - ptr = vfs_unpack(pathfile, &size); - - // asset not found? maybe it has not been cooked yet at this point (see --cook-on-demand) - if( !ptr && COOK_ON_DEMAND ) { - - static thread_mutex_t mutex, *init = 0; if(!init) thread_mutex_init(init = &mutex); - thread_mutex_lock(&mutex); - -// this block saves some boot time (editor --cook-on-demand: boot 1.50s -> 0.90s) -#if 1 // EXPERIMENTAL_DONT_COOK_NON_EXISTING_ASSETS - static set(char*) disk = 0; - if(!disk) { set_init_str(disk); for each_substring(ART,",",art_folder) for each_array(file_list(va("%s**", art_folder)), char*, item) set_insert(disk, STRDUP(item)); } // art_folder ends with '/' - int found = !!set_find(disk, (char*)pathfile); - if( found ) -#endif - { - // technically, we should only cook `base` asset at this point. however, cooks on demand can be very - // expensive. not only because we're invoking an external tool/cook app in here, which is scanning all the - // cook folders at every call, but also because there is this expensive vfs_reload() call at end of current scope. - // so, in order to minimize the number of upcoming cook requests, we cook more stuff than needed at this point; - // just in anticipation of what's likely going to happen in the next frames. - // so, when asked to cook "models/model.fbx" we actually: - // - do cook "models/model.* (so, "model.tga","model.png","model.jpg","model.mtl",etc. are also cooked) - // - do cook "models/*.fbx" as well - char *dir = file_path(pathfile + ART_SKIP_ROOT); - char *group1 = dir[0] ? va("\"*/%s%s.*\"", dir, file_base(pathfile)) : base; // -> "*/models/model.*" - char *group2 = dir[0] ? va("\"*/%s*%s\"", dir, file_ext(pathfile)) : ""; // -> "*/models/*.fbx" - - char *cmd = va("%scook" ifdef(osx,".osx",ifdef(linux,".linux",".exe"))" %s %s --cook-ini=%s --cook-additive --cook-jobs=1 --quiet", TOOLS, group1, group2, COOK_INI); - - // cook groups - int rc = system(cmd); // atoi(app_exec(cmd)); - if(rc < 0) PANIC("cannot invoke `%scook` (return code %d)", TOOLS, rc); - - vfs_reload(); // @todo: optimize me. it is waaay inefficent to reload the whole VFS layout after cooking a single asset - } - - thread_mutex_unlock(&mutex); - - // finally, try again - pathfile = va("%s", vfs_resolve(pathfile)); - ptr = vfs_unpack(pathfile, &size); - } - - if( ptr ) { - cache_insert(lookup_id, ptr, size); - } - } - - if( ptr && size ) - if( ptr != last_ptr) { - snprintf(last_item, 256, "%s", lookup_id); - last_ptr = ptr; - last_size = size; - } - - // yet another last resort: redirect vfs_load() calls to file_load() - // (for environments without tools or cooked assets) - if(!ptr) { - if( !have_tools() ) { - ptr = file_load(pathfile, size_out); - } - } - - if(!ptr) { - PRINTF("Loading %s (not found)\n", pathfile); - } - -*found = ptr ? true : false; - - if( size_out ) *size_out = ptr ? size : 0; - return ptr; -} -char* vfs_read(const char *pathfile) { - return vfs_load(pathfile, NULL); -} -int vfs_size(const char *pathfile) { - int sz; - return vfs_load(pathfile, &sz), sz; -} - - -FILE* vfs_handle(const char *pathfile) { - // @fixme: non-compressible assets (adpcm wavs,mp3,ogg,mp4,avi,...) are taking a suboptimal code path here. - // no need to unzip them. just seek within the zipfile and return the *fp at that position - int sz; - char *buf = vfs_load(pathfile, &sz); - FILE *fp = fmemopen(buf ? buf : "", buf ? sz : 0, "r+b"); - ASSERT( fp, "cannot create tempfile" ); - return fp; -} -#if 0 -const char *vfs_extract(const char *pathfile) { // extract a vfs file into the local (temp) filesystem -#if 0 - FILE* fp = vfs_handle(pathfile); - return fp ? pathfile_from_handle(fp) : ""; -#else - int sz; - char *buf = vfs_load(pathfile, &sz); - if( !buf ) return ""; - - // pool of temp files. recycles after every loop - enum { MAX_TEMP_FILES = 16 }; - static __thread char temps[MAX_TEMP_FILES][DIR_MAX] = {0}; - static __thread int i = 0; - if( temps[i][0] ) unlink(temps[i]); - i = (i + 1) % MAX_TEMP_FILES; - if(!temps[i][0] ) snprintf(temps[i], DIR_MAX, "%s", file_tempname()); - char *name = temps[i]; - - FILE *tmp = fopen(name, "wb"); //unlink(name); - ASSERT( tmp, "cannot create tempfile %s", name ); - fwrite(buf ? buf : "", 1, buf ? sz : 0, tmp); - fclose(tmp); - return name; -#endif -} -#endif - - -// ----------------------------------------------------------------------------- -// cache - -static thread_mutex_t cache_mutex; AUTORUN{ thread_mutex_init(&cache_mutex); } - -void* cache_lookup(const char *pathfile, int *size) { // find key->value - if( !MAX_CACHED_FILES ) return 0; - void* data = 0; - thread_mutex_lock(&cache_mutex); - for(archive_dir *dir = dir_cache; dir; dir = dir->next) { - if( !strcmp(dir->path, pathfile) ) { - if(size) *size = dir->size; - data = dir->data; - break; - } - } - thread_mutex_unlock(&cache_mutex); - return data; -} -void* cache_insert(const char *pathfile, void *ptr, int size) { // append key/value; return LRU or NULL - if( !MAX_CACHED_FILES ) return 0; - if( !ptr || !size ) return 0; - - // keep cached files within limits - thread_mutex_lock(&cache_mutex); - - // append to cache - archive_dir zero = {0}, *old = dir_cache; - *(dir_cache = REALLOC(0, sizeof(archive_dir))) = zero; - dir_cache->next = old; - dir_cache->path = STRDUP(pathfile); - dir_cache->size = size; - dir_cache->data = REALLOC(0, size+1); - memcpy(dir_cache->data, ptr, size); size[(char*)dir_cache->data] = 0; // copy+terminator - - void *found = 0; - - static int added = 0; - if( added < MAX_CACHED_FILES ) { - ++added; - } else { - // remove oldest cache entry - for( archive_dir *prev = dir_cache, *dir = prev; dir ; prev = dir, dir = dir->next ) { - if( !dir->next ) { - prev->next = 0; // break link - found = dir->data; - dir->path = REALLOC(dir->path, 0); - dir->data = REALLOC(dir->data, 0); - dir = REALLOC(dir, 0); - break; - } - } - } - - thread_mutex_unlock(&cache_mutex); - - return found; -} - -// ---------------------------------------------------------------------------- -// ini - - -/* ini+, extended ini format -// - rlyeh, public domain -// -// # spec -// -// ; line comment -// [user] ; map section name (optional) -// name=john ; key and value (mapped here as user.name=john) -// +surname=doe jr. ; sub-key and value (mapped here as user.name.surname=doe jr.) -// age=30 ; numbers -// color=240 ; key and value \ -// color=253 ; key and value |> array: color[0], color[1] and color[2] -// color=255 ; key and value / -// color= ; remove key/value(s) -// color=white ; recreate key; color[1] and color[2] no longer exist -// [] ; unmap section -// -note=keys may start with symbols (except plus and semicolon) -// -note=linefeeds are either \r, \n or \r\n. -// -note=utf8 everywhere. -*/ - -static -char *ini_parse( const char *s ) { - char *map = 0; - int mapcap = 0, maplen = 0; - enum { DEL, REM, TAG, KEY, SUB, VAL } fsm = DEL; - const char *cut[6] = {0}, *end[6] = {0}; - while( *s ) { - while( *s && (*s == ' ' || *s == '\t' || *s == '\r' || *s == '\n') ) ++s; - /**/ if( *s == ';' ) cut[fsm = REM] = ++s; - else if( *s == '[' ) cut[fsm = TAG] = ++s; - else if( *s == '+' ) cut[fsm = SUB] = ++s; - else if( *s == '=' ) cut[fsm = VAL] = ++s; - else if( *s > ' ' && *s <= 'z' && *s != ']' ) cut[fsm = KEY] = cut[SUB] = end[SUB] = s; - else { if( *s ) ++s; continue; } - /**/ if( fsm == REM ) { while(*s && *s != '\r'&& *s != '\n') ++s; } - else if( fsm == TAG ) { while(*s && *s != '\r'&& *s != '\n'&& *s != ']') ++s; end[TAG] = s; } - else if( fsm == KEY ) { while(*s && *s > ' ' && *s <= 'z' && *s != '=') ++s; end[KEY] = s; } - else if( fsm == SUB ) { while(*s && *s > ' ' && *s <= 'z' && *s != '=') ++s; end[SUB] = s; } - else if( fsm == VAL ) { while(*s && *s >= ' ' && *s <= 127 && *s != ';') ++s; end[VAL] = s; - while( end[VAL][-1] <= ' ' ) { --end[VAL]; } - char buf[256] = {0}, *key = buf; - if( end[TAG] - cut[TAG] ) key += sprintf(key, "%.*s.", (int)(end[TAG] - cut[TAG]), cut[TAG] ); - if( end[KEY] - cut[KEY] ) key += sprintf(key, "%.*s", (int)(end[KEY] - cut[KEY]), cut[KEY] ); - if( end[SUB] - cut[SUB] ) key += sprintf(key, ".%.*s", (int)(end[SUB] - cut[SUB]), cut[SUB] ); - int reqlen = (key - buf) + 1 + (end[VAL] - cut[VAL]) + 1 + 1; - if( (reqlen + maplen) >= mapcap ) map = REALLOC( map, mapcap += reqlen + 512 ); - sprintf( map + maplen, "%.*s%c%.*s%c%c", (int)(key - buf), buf, 0, (int)(end[VAL] - cut[VAL]), cut[VAL], 0, 0 ); - maplen += reqlen - 1; - } - } - return map; -} - -// @todo: evaluate alt api -// int count = ini_count(filename); -// char *key = ini_key(filename, id); -// char *val = ini_val(filename, id); - -void ini_destroy(ini_t x) { - for each_map(x, char*, k, char*, v) { - FREE(k); - FREE(v); - } - map_free(x); -} - -ini_t ini_from_mem(const char *data) { - if( !data || !data[0] ) return 0; - - char *kv = ini_parse(data); - if( !kv ) return 0; - - ini_t map = 0; - map_init(map, less_str, hash_str); - for( char *iter = kv; iter[0]; ) { - char *key = iter; while( *iter++ ); - char *val = iter; while( *iter++ ); - - char **found = map_find(map, key); - if( !found ) map_insert(map, STRDUP(key), STRDUP(val)); - assert( map_find(map,key) ); - } - - FREE( kv ); - - return map; -} - -ini_t ini(const char *filename) { - char *kv = file_read(filename); - if(!kv) kv = vfs_read(filename); - return ini_from_mem(kv); -} - -bool ini_write(const char *filename, const char *section, const char *key, const char *value) { - // this is a little hacky { - char *data = file_read(filename); - if( data && data[0] ) { - char *begin = strrchr(data, '['); - char *end = strrchr(data, ']'); - if( begin && end && begin < end ) { - char *last_section = va("%.*s", (int)(end - begin - 1), begin + 1); - if( !strcmpi(last_section, section) ) section = 0; - } - } - // } - - char *s = va("%s%s=%s\r\n", section ? va("[%s]\r\n", section) : "", key, value); - return file_append(filename, s, strlen(s)); -} - +// ----------------------------------------------------------------------------- +// file + +#if 0 // ifdef _WIN32 +#include +#if is(tcc) + #define CP_UTF8 65001 + int WINAPI MultiByteToWideChar(); + int WINAPI WideCharToMultiByte(); +#endif +// widen() ? string1252() ? string16() ? stringw() ? +wchar_t *widen(const char *utf8) { // wide strings (win only) + int chars = MultiByteToWideChar(CP_UTF8, 0, utf8, -1, NULL, 0); + char *buf = va("%.*s", (int)(chars * sizeof(wchar_t)), ""); + return MultiByteToWideChar(CP_UTF8, 0, utf8, -1, (void*)buf, chars), (wchar_t *)buf; +} +#define open8(path,mode) ifdef(win, _wopen(widen(path)) , open(path, mode) ) +#define fopen8(path,mode) ifdef(win, _wfopen(widen(path),widen(mode)) , fopen(path,mode) ) +#define remove8(path) ifdef(win, _wremove(widen(path)) , remove(path) ) +#define rename8(path) ifdef(win, _wrename(widen(path)) , rename(path) ) +#define stat8(path,st) ifdef(win, _wstat(widen(path),st) , stat(path,st) ) // _stati64() +#define stat8_t ifdef(win, _stat , stat_t ) // struct _stati64 +#endif + +char *file_name(const char *pathfile) { + char *s = strrchr(pathfile, '/'), *t = strrchr(pathfile, '\\'); + return va("%s", s > t ? s+1 : t ? t+1 : pathfile); +} +char *file_base(const char *pathfile) { + char *s = file_name(pathfile); + char *e = file_ext(pathfile); + return s[ strlen(s) - strlen(e) ] = '\0', s; +} +char *file_pathabs( const char *pathfile ) { + char *out = va("%*.s", DIR_MAX+1, ""); +#if is(win32) + _fullpath(out, pathfile, DIR_MAX); +#else + realpath(pathfile, out); +#endif + return out; +} +char *file_path(const char *pathfile) { + return va("%.*s", (int)(strlen(pathfile)-strlen(file_name(pathfile))), pathfile); +} +char *file_load(const char *filename, int *len) { // @todo: 32 counters/thread enough? + static __thread array(char) buffer[32] = {0}, *invalid[1]; + static __thread unsigned i = 0; i = (i+1) % 32; + + FILE *fp = filename[0] ? fopen(filename, "rb") : NULL; + if( fp ) { + fseek(fp, 0L, SEEK_END); + size_t sz = ftell(fp); + fseek(fp, 0L, SEEK_SET); + array_resize(buffer[i], sz+1); + sz *= fread(buffer[i],sz,1,fp) == 1; + buffer[i][sz] = 0; + if(len) *len = (int)sz; + fclose(fp); + return buffer[i]; // @fixme: return 0 on error instead? + } + if (len) *len = 0; + return 0; +} +char *file_read(const char *filename) { // @todo: fix leaks + return file_load(filename, NULL); +} +bool file_write(const char *name, const void *ptr, int len) { + bool ok = 0; + for( FILE *fp = name && ptr && len >= 0 ? fopen(name, "wb") : NULL; fp; fclose(fp), fp = 0) { + ok = fwrite(ptr, len,1, fp) == 1; + } + return ok; +} +bool file_append(const char *name, const void *ptr, int len) { + bool ok = 0; + for( FILE *fp = name && ptr && len >= 0 ? fopen(name, "a+b") : NULL; fp; fclose(fp), fp = 0) { + ok = fwrite(ptr, len,1, fp) == 1; + } + return ok; +} +static // not exposed +bool file_stat(const char *fname, struct stat *st) { + // remove ending slashes. win32+tcc does not like them. + int l = strlen(fname), m = l; + while( l && (fname[l-1] == '/' || fname[l-1] == '\\') ) --l; + fname = l == m ? fname : va("%.*s", l, fname); + return stat(fname, st) >= 0; +} +uint64_t file_stamp(const char *fname) { + struct stat st; + return !file_stat(fname, &st) ? 0ULL : st.st_mtime; +} +uint64_t file_stamp10(const char *fname) { + time_t mtime = (time_t)file_stamp(fname); + struct tm *ti = localtime(&mtime); + return atoi64(va("%04d%02d%02d%02d%02d%02d",ti->tm_year+1900,ti->tm_mon+1,ti->tm_mday,ti->tm_hour,ti->tm_min,ti->tm_sec)); +} +uint64_t file_size(const char *fname) { + struct stat st; + return !file_stat(fname, &st) ? 0ULL : st.st_size; +} +bool file_directory( const char *pathfile ) { + struct stat st; + return !file_stat(pathfile, &st) ? 0 : S_IFDIR == ( st.st_mode & S_IFMT ); +} +bool file_exist(const char *fname) { + struct stat st; + return !file_stat(fname, &st) ? false : true; +} +char *file_normalize(const char *name) { + char *copy = va("%s", name), *s = copy, c; +#if is(win32) + for( int i = 0; copy[i]; ++i ) { if(copy[i] == '/') copy[i] = '\\'; if(copy[i] == '\'') copy[i] = '\"'; } +#else + for( int i = 0; copy[i]; ++i ) { if(copy[i] == '\\') copy[i] = '/'; if(copy[i] == '\"') copy[i] = '\''; } +#endif + return copy; +} +#if 0 +char *file_normalize(const char *name) { + char *copy = va("%s", name), *s = copy, c; + // lowercases+digits+underscores+slashes only. anything else is truncated. + for( ; *name ; ++name ) { + /**/ if( *name >= 'a' && *name <= 'z' ) *s++ = *name; + else if( *name >= 'A' && *name <= 'Z' ) *s++ = *name - 'A' + 'a'; + else if( *name >= '0' && *name <= '9' ) *s++ = *name; + else if( *name == '/' || *name == '\\') *s++ = '/'; + else if( *name <= ' ' || *name == '.' ) *s++ = '_'; + } *s++ = 0; + // remove dupe slashes + for( name = s = copy, c = '/'; *name ; ) { + while( *name && *name != c ) *s++ = *name++; + if( *name ) *s++ = c; + while( *name && *name == c ) name++; + } *s++ = 0; + // remove dupe underlines + for( name = s = copy, c = '_'; *name ; ) { + while( *name && *name != c ) *s++ = *name++; + if( *name ) *s++ = c; + while( *name && *name == c ) name++; + } *s++ = 0; + return copy; +} +char *file_normalize_with_folder(const char *name) { + char *s = file_normalize(name); + char *slash = strrchr(s, '/'); if(slash) *slash = 0; + char *penultimate = strrchr(s, '/'); if(slash) *slash = '/'; + return penultimate ? penultimate+1 : /*slash ? slash+1 :*/ s; +} +#endif +char *file_ext(const char *name) { + char *b = file_name(name), *s = strchr(b, '.'); //strrchr(name, '.'); + return va("%s", s ? s : "" ); // , name ); +} + +char *file_id(const char *pathfile) { + char *dir = file_path(pathfile); for(int i=0;dir[i];++i) dir[i]=tolower(dir[i]); + char *base = file_name(pathfile); for(int i=0;base[i];++i) base[i]=tolower(base[i]); +#if 0 // extensionless, larry.mid and larry.txt will collide, diffuse.tga and diffuse.png will match +char *ext = strchr(base, '.'); if (ext) ext[0] = '\0'; // remove all extensions +#else // extensionless for audio/images only (materials: diffuse.tga and diffuse.png will match) +char *ext = strrchr(base, '.'); //if (ext) ext[0] = '\0'; // remove all extensions + if(ext) if( strstr(".jpg.png.bmp.tga.hdr"".", ext) || strstr(".ogg.mp3.wav.mod.xm.flac"".", ext) || strstr(".mp4.ogv.avi.mkv.wmv.mpg.mpeg"".", ext) ) { + ext = strchr(base, '.'); + ext[0] = '\0'; //strcpy(ext, "_xxx"); + } +#endif + +// if (!dir[0]) return base; + char *stem = va("%s/%s", dir, base); // file_name(dir); + + // /path2/path1/file2_file1 -> file1_file2/path1/path2 + int len = 0; + int ids_count = 0; + char ids[64][64] = { 0 }; + // split path stems + for each_substring(stem, "/\\@", key) { + int tokens_count = 0; + char* tokens[64] = { 0 }; + // split tokens + for each_substring(key, "[]()_ ", it) { + tokens[tokens_count++] = va("%s", it); + } + // sort alphabetically + if( tokens_count > 1 ) qsort(tokens, tokens_count, sizeof(char *), strcmp_qsort); + // concat sorted token1_token2_... + char built[256]; *built = 0; + for( int i = 0; i < tokens_count; ++i ) { + strlcat(built, "_", 256); + strlcat(built, tokens[i], 256); + } + strncpy( ids[ ids_count ], &built[1], 64 ); + len += strlen( ids[ ids_count++ ] ); + } + // concat in inverse order: file/path1/path2/... + char buffer[DIR_MAX]; buffer[0] = 0; + for( int it = ids_count; --it >= 0; ) { + strcat(buffer, ids[it]); + strcat(buffer, "/"); + } + return va("%s", buffer); +} +array(char*) file_list(const char *pathmasks) { + static __thread array(char*) list = 0; // @fixme: add 16 slots + + for( int i = 0; i < array_count(list); ++i ) { + FREE(list[i]); + } + array_resize(list, 0); + + for each_substring(pathmasks,";",pathmask) { + char *cwd = 0, *masks = 0; + char *slash = strrchr(pathmask, '/'); + if( !slash ) cwd = "./", masks = pathmask; + else { + masks = va("%s", slash+1); + cwd = pathmask, slash[1] = '\0'; + } + if( !masks[0] ) masks = "*"; + + ASSERT(strend(cwd, "/"), "Error: dirs like '%s' must end with slash", cwd); + + int recurse = strstr(cwd, "**") || strstr(masks, "**"); + strswap(cwd, "**", "./"); + + dir *d = dir_open(cwd, recurse ? "r" : ""); + if( d ) { + for( int i = 0; i < dir_count(d); ++i ) { + if( dir_file(d,i) ) { + // dir_name() should return full normalized paths "C:/prj/v4k/demos/art/fx/fxBloom.fs". should exclude system dirs as well + char *entry = dir_name(d,i); + char *fname = file_name(entry); + + int allowed = 0; + for each_substring(masks,";",mask) { + allowed |= strmatch(fname, mask); + } + if( !allowed ) continue; + + // if( strstr(fname, "/.") ) continue; // @fixme: still needed? useful? + + // insert copy + char *copy = STRDUP(entry); + array_push(list, copy); + } + } + dir_close(d); + } + } + + array_sort(list, strcmp); + return list; +} + +bool file_move(const char *src, const char *dst) { + bool ok = file_exist(src) && !file_exist(dst) && 0 == rename(src, dst); + return ok; +} +bool file_delete(const char *pathfile) { + if( file_exist(pathfile) ) { + for( int i = 0; i < 10; ++i ) { + bool ok = 0 == unlink(pathfile); + if( ok ) return true; + sleep_ms(10); + } + return false; + } + return true; +} +bool file_copy(const char *src, const char *dst) { + int ok = 0, BUFSIZE = 1 << 20; // 1 MiB + static __thread char *buffer = 0; do_once buffer = REALLOC(0, BUFSIZE); // @leak + for( FILE *in = fopen(src, "rb"); in; fclose(in), in = 0) { + for( FILE *out = fopen(dst, "wb"); out; fclose(out), out = 0, ok = 1) { + for( int n; !!(n = fread( buffer, 1, BUFSIZE, in )); ){ + if(fwrite( buffer, 1, n, out ) != n) + return fclose(in), fclose(out), false; + } + } + } + return ok; +} + +char* file_tempname() { + static __thread int id; + return va("%s/v4k-temp.%s.%p.%d", app_temp(), getenv(ifdef(win32, "username", "USER")), &id, rand()); +} +FILE *file_temp(void) { + const char *fname = file_tempname(); + FILE *fp = fopen(fname, "w+b"); + if( fp ) unlink(fname); + return fp; +} + +char *file_counter(const char *name) { + static __thread char outfile[DIR_MAX], init = 0; + static __thread map(char*, int) ext_counters; + if(!init) map_init(ext_counters, less_str, hash_str), init = '\1'; + + char *base = va("%s",name), *ext = file_ext(name); + if(ext && ext[0]) *strstr(base, ext) = '\0'; + + int *counter = map_find_or_add(ext_counters, ext, 0); + while( *counter >= 0 ) { + *counter = *counter + 1; + sprintf(outfile, "%s(%03d)%s", base, *counter, ext); + if( !file_exist(outfile) ) { + return va("%s", outfile); + } + } + return 0; +} + +enum { MD5_HASHLEN = 16 }; +enum { SHA1_HASHLEN = 20 }; +enum { CRC32_HASHLEN = 4 }; + +void* file_sha1(const char *file) { // 20bytes + hash_state hs = {0}; + sha1_init(&hs); + for( FILE *fp = fopen(file, "rb"); fp; fclose(fp), fp = 0) { + char buf[8192]; + for( int inlen; (inlen = sizeof(buf) * fread(buf, sizeof(buf), 1, fp)); ) { + sha1_process(&hs, (const unsigned char *)buf, inlen); + } + } + unsigned char *hash = va("%.*s", SHA1_HASHLEN, ""); + sha1_done(&hs, hash); + return hash; +} + +void* file_md5(const char *file) { // 16bytes + hash_state hs = {0}; + md5_init(&hs); + for( FILE *fp = fopen(file, "rb"); fp; fclose(fp), fp = 0) { + char buf[8192]; + for( int inlen; (inlen = sizeof(buf) * fread(buf, sizeof(buf), 1, fp)); ) { + md5_process(&hs, (const unsigned char *)buf, inlen); + } + } + unsigned char *hash = va("%.*s", MD5_HASHLEN, ""); + md5_done(&hs, hash); + return hash; +} + +void* file_crc32(const char *file) { // 4bytes + unsigned crc = 0; + for( FILE *fp = fopen(file, "rb"); fp; fclose(fp), fp = 0) { + char buf[8192]; + for( int inlen; (inlen = sizeof(buf) * fread(buf, sizeof(buf), 1, fp)); ) { + crc = zip__crc32(crc, buf, inlen); // unsigned int stbiw__crc32(unsigned char *buffer, int len) + } + } + unsigned char *hash = va("%.*s", (int)sizeof(crc), ""); + memcpy(hash, &crc, sizeof(crc)); + return hash; +} + +#if 0 +void* crc32_mem(const void *ptr, int inlen) { // 4bytes + unsigned hash = 0; + hash = zip__crc32(hash, ptr, inlen); // unsigned int stbiw__crc32(unsigned char *buffer, int len) + return hash; +} +void* md5_mem(const void *ptr, int inlen) { // 16bytes + hash_state hs = {0}; + md5_init(&hs); + md5_process(&hs, (const unsigned char *)ptr, inlen); + unsigned char *hash = va("%.*s", MD5_HASHLEN, ""); + md5_done(&hs, hash); + return hash; +} +void* sha1_mem(const void *ptr, int inlen) { // 20bytes + hash_state hs = {0}; + sha1_init(&hs); + sha1_process(&hs, (const unsigned char *)ptr, inlen); + unsigned char *hash = va("%.*s", SHA1_HASHLEN, ""); + sha1_done(&hs, hash); + return hash; +} +unsigned crc32_mem(unsigned h, const void *ptr_, unsigned len) { + // based on public domain code by Karl Malbrain + const uint8_t *ptr = (const uint8_t *)ptr_; + if (!ptr) return 0; + const unsigned tbl[16] = { + 0x00000000, 0x1db71064, 0x3b6e20c8, 0x26d930ac, 0x76dc4190, 0x6b6b51f4, 0x4db26158, 0x5005713c, + 0xedb88320, 0xf00f9344, 0xd6d6a3e8, 0xcb61b38c, 0x9b64c2b0, 0x86d3d2d4, 0xa00ae278, 0xbdbdf21c }; + for(h = ~h; len--; ) { uint8_t b = *ptr++; h = (h >> 4) ^ tbl[(h & 15) ^ (b & 15)]; h = (h >> 4) ^ tbl[(h & 15) ^ (b >> 4)]; } + return ~h; +} +uint64_t crc64_mem(uint64_t h, const void *ptr, uint64_t len) { + // based on public domain code by Lasse Collin + // also, use poly64 0xC96C5795D7870F42 for crc64-ecma + static uint64_t crc64_table[256]; + static uint64_t poly64 = UINT64_C(0x95AC9329AC4BC9B5); + if( poly64 ) { + for( int b = 0; b < 256; ++b ) { + uint64_t r = b; + for( int i = 0; i < 8; ++i ) { + r = r & 1 ? (r >> 1) ^ poly64 : r >> 1; + } + crc64_table[ b ] = r; + //printf("%016llx\n", crc64_table[b]); + } + poly64 = 0; + } + const uint8_t *buf = (const uint8_t *)ptr; + uint64_t crc = ~h; // ~crc; + while( len != 0 ) { + crc = crc64_table[(uint8_t)crc ^ *buf++] ^ (crc >> 8); + --len; + } + return ~crc; +} +// https://en.wikipedia.org/wiki/MurmurHash +static inline uint32_t murmur3_scramble(uint32_t k) { + return k *= 0xcc9e2d51, k = (k << 15) | (k >> 17), k *= 0x1b873593; +} +uint32_t murmur3_mem(const uint8_t* key, size_t len, uint32_t seed) { + uint32_t h = seed; + uint32_t k; + /* Read in groups of 4. */ + for (size_t i = len >> 2; i; i--) { + // Here is a source of differing results across endiannesses. + // A swap here has no effects on hash properties though. + k = *((uint32_t*)key); + key += sizeof(uint32_t); + h ^= murmur3_scramble(k); + h = (h << 13) | (h >> 19); + h = h * 5 + 0xe6546b64; + } + /* Read the rest. */ + k = 0; + for (size_t i = len & 3; i; i--) { + k <<= 8; + k |= key[i - 1]; + } + // A swap is *not* necessary here because the preceeding loop already + // places the low bytes in the low places according to whatever endianness + // we use. Swaps only apply when the memory is copied in a chunk. + h ^= murmur3_scramble(k); + /* Finalize. */ + h ^= len; + h ^= h >> 16; + h *= 0x85ebca6b; + h ^= h >> 13; + h *= 0xc2b2ae35; + h ^= h >> 16; + return h; +} +#endif + +// ----------------------------------------------------------------------------- +// storage (emscripten only) + +void storage_mount(const char* folder) { + #if is(ems) + emscripten_run_script(va("FS.mkdir('%s'); FS.mount(IDBFS, {}, '%s');", folder, folder)); + #else + (void)folder; + #endif +} + +void storage_read() { + #if is(ems) + EM_ASM( + /* sync from persisted state into memory */ + FS.syncfs(true, function (err) { + assert(!err); + }); + ); + #endif +} + +void storage_flush() { + #if is(ems) + EM_ASM( + FS.syncfs(false, function (err) { + assert(!err); + }); + ); + #endif +} + +// ----------------------------------------------------------------------------- +// compressed archives + +// return list of files inside zipfile +array(char*) file_zip_list(const char *zipfile) { + static __thread array(char*) list[16] = {0}; + static __thread int count = 0; + + count = (count+1) % 16; + array_resize(list[count], 0); + + for( zip *z = zip_open(zipfile, "rb"); z; zip_close(z), z = 0) { + for( unsigned i = 0; i < zip_count(z); ++i ) { + array_push( list[count], zip_name(z, i) ); + } + } + + return list[count]; +} + +// extract single file content from zipfile +array(char) file_zip_extract(const char *zipfile, const char *filename) { + static __thread array(char) list[16] = {0}; + static __thread int count = 0; + + array(char) out = list[count = (count+1) % 16]; + array_resize(out, 0); + + for( zip *z = zip_open(zipfile, "rb"); z; zip_close(z), z = 0) { + int index = zip_find(z, filename); // convert entry to index. returns <0 if not found. + if( index < 0 ) return zip_close(z), out; + + unsigned outlen = zip_size(z, index); + unsigned excess = zip_excess(z, index); + array_resize(out, outlen + 1 + excess); + unsigned ret = zip_extract_inplace(z, index, out, array_count(out)); + if(ret) { out[outlen] = '\0'; array_resize(out, outlen); } else { array_resize(out, 0); } + } + + return out; +} + +// append single file into zipfile. compress with DEFLATE|6. Other compressors are also supported (try LZMA|5, ULZ|9, LZ4X|3, etc.) +bool file_zip_append(const char *zipfile, const char *filename, int clevel) { + bool ok = false; + for( zip *z = zip_open(zipfile, "a+b"); z; zip_close(z), z = 0) { + for( FILE *fp = fopen(filename, "rb"); fp; fclose(fp), fp = 0) { + ok = zip_append_file(z, filename, "", fp, clevel); + } + } + return ok; +} + +// append mem blob into zipfile. compress with DEFLATE|6. Other compressors are also supported (try LZMA|5, ULZ|9, LZ4X|3, etc.) +// @fixme: implement zip_append_mem() and use that instead +bool file_zip_appendmem(const char *zipfile, const char *entryname, const void *ptr, unsigned len, int clevel) { + bool ok = false; + if( ptr ) + for( zip *z = zip_open(zipfile, "a+b"); z; zip_close(z), z = 0) { + ok = zip_append_mem(z, entryname, "", ptr, len, clevel); + } + return ok; +} + +// ----------------------------------------------------------------------------- +// archives + +enum { is_zip, is_tar, is_pak, is_dir }; + +typedef struct archive_dir { + char* path; + union { + int type; + int size; // for cache only + }; + union { + void *archive; + void *data; // for cache only + zip* zip_archive; + tar* tar_archive; + pak* pak_archive; + }; + struct archive_dir *next; +} archive_dir; + +static archive_dir *dir_mount; +static archive_dir *dir_cache; + +#ifndef MAX_CACHED_FILES // @todo: should this be MAX_CACHED_SIZE (in MiB) instead? +#define MAX_CACHED_FILES 32 // @todo: should we cache the cooked contents instead? ie, stbi() result instead of file.png? +#endif + +struct vfs_entry { + const char *name; + const char *id; + unsigned size; +}; +static array(struct vfs_entry) vfs_hints; // mounted raw assets +static array(struct vfs_entry) vfs_entries; // mounted cooked assets + +static bool vfs_mount_hints(const char *path); + +void vfs_reload() { + const char *app = app_name(); + + array_resize(vfs_hints, 0); // @leak + array_resize(vfs_entries, 0); // @leak + + // mount virtual filesystems later (mounting order matters: low -> to -> high priority) +#if defined(EMSCRIPTEN) + vfs_mount("index.zip"); +#else + // mount fused executables + vfs_mount(va("%s%s%s", app_path(), app_name(), ifdef(win32, ".exe", ""))); + // mount all zipfiles + for each_array( file_list("*.zip"), char*, file ) vfs_mount(file); +#endif + + // vfs_resolve() will use these art_folder locations as hints when cook-on-demand is in progress. + // cook-on-demand will not be able to resolve a virtual pathfile if there are no cooked assets on disk, + // unless there is a record of what's actually on disk somewhere, and that's where the hints belong to. + if( COOK_ON_DEMAND ) + for each_substring(ART,",",art_folder) { + vfs_mount_hints(art_folder); + } +} + + + +#define ARK1 0x41724B31 // 'ArK1' in le, 0x314B7241 41 72 4B 31 otherwise +#define ARK1_PADDING (512 - 40) // 472 +#define ARK_PRINTF(f,...) 0 // printf(f,__VA_ARGS__) +#define ARK_SWAP32(x) (x) +#define ARK_SWAP64(x) (x) +#define ARK_REALLOC REALLOC +static uint64_t ark_fget64( FILE *in ) { uint64_t v; fread( &v, 8, 1, in ); return ARK_SWAP64(v); } +void ark_list( const char *infile, zip **z ) { + for( FILE *in = fopen(infile, "rb"); in; fclose(in), in = 0 ) + while(!feof(in)) { + if( 0 != (ftell(in) % ARK1_PADDING) ) fseek(in, ARK1_PADDING - (ftell(in) % ARK1_PADDING), SEEK_CUR); + ARK_PRINTF("Reading at #%d\n", (int)ftell(in)); + uint64_t mark = ark_fget64(in); + if( mark != ARK1 ) continue; + uint64_t stamp = ark_fget64(in); + uint64_t datalen = ark_fget64(in); + uint64_t datahash = ark_fget64(in); + uint64_t namelen = ark_fget64(in); + + *z = zip_open_handle(in, "rb"); + return; + } +} + + + +static +bool vfs_mount_(const char *path, array(struct vfs_entry) *entries) { + const char *path_bak = path; + + zip *z = NULL; tar *t = NULL; pak *p = NULL; dir *d = NULL; + int is_folder = ('/' == path[strlen(path)-1]); + if( is_folder ) d = dir_open(path, "rb"); + if( is_folder && !d ) return 0; + if( !is_folder ) z = zip_open(path, "rb"); + if( !is_folder && !z ) t = tar_open(path, "rb"); + if( !is_folder && !z && !t ) p = pak_open(path, "rb"); + if( !is_folder && !z && !t && !p ) ark_list(path, &z); // last resort. try as .ark + if( !is_folder && !z && !t && !p ) return 0; + + // normalize input -> "././" to "" + while (path[0] == '.' && path[1] == '/') path += 2; + path = STRDUP(path); + if( z || t || p ) { + // save local path for archives, so we can subtract those from upcoming requests + if(strrchr(path,'/')) strrchr(path,'/')[1] = '\0'; + } else if(d) 0[(char*)path] = 0; + + // append to mounted archives + archive_dir *prev = dir_mount, zero = {0}; + *(dir_mount = REALLOC(0, sizeof(archive_dir))) = zero; + dir_mount->next = prev; + dir_mount->path = (char*)path; + dir_mount->archive = z ? (void*)z : t ? (void*)t : p ? (void*)p : (void*)d; + dir_mount->type = is_folder ? is_dir : z ? is_zip : t ? is_tar : p ? is_pak : -1; + ASSERT(dir_mount->type >= 0 && dir_mount->type < 4); + + // append list of files to internal listing + for( archive_dir *dir = dir_mount; dir ; dir = 0 ) { // for(archive_dir *dir = dir_mount; dir; dir = dir->next) { + assert(dir->type >= 0 && dir->type < 4); + unsigned (*fn_count[4])(void*) = {(void*)zip_count, (void*)tar_count, (void*)pak_count, (void*)dir_count}; + char* (*fn_name[4])(void*, unsigned index) = {(void*)zip_name, (void*)tar_name, (void*)pak_name, (void*)dir_name}; + unsigned (*fn_size[4])(void*, unsigned index) = {(void*)zip_size, (void*)tar_size, (void*)pak_size, (void*)dir_size}; + + for( unsigned idx = 0, end = fn_count[dir->type](dir->archive); idx < end; ++idx ) { + assert(idx < end); + const char *filename = STRDUP( fn_name[dir->type](dir->archive, idx) ); + const char *fileid = STRDUP( file_id(filename) ); + unsigned filesize = fn_size[dir->type](dir->archive, idx); + // printf("%u) %s %u [%s]\n", idx, filename, filesize, fileid); + // append to list + array_push(*entries, (struct vfs_entry){filename, fileid, filesize}); + } + + // PRINTF("Mounted VFS volume '%s' (%u entries)\n", path_bak, fn_count[dir->type](dir->archive) ); + } + + return 1; +} +static +bool vfs_mount_hints(const char *path) { + return vfs_mount_(path, &vfs_hints); +} +bool vfs_mount(const char *path) { + return vfs_mount_(path, &vfs_entries); +} +array(char*) vfs_list(const char *masks) { + static __thread array(char*) list = 0; // @fixme: add 16 slots + + for( int i = 0; i < array_count(list); ++i ) { + FREE(list[i]); + } + array_resize(list, 0); + + for each_substring(masks,";",it) { + if( COOK_ON_DEMAND ) // edge case: any game using only vfs api + cook-on-demand flag will never find any file + for each_array(file_list(it), char*, item) { + // insert copy + char *copy = STRDUP(item); + array_push(list, copy); + } + + it = va("*/%s", it); + // int recurse = !!strstr(it, "**"); // @fixme: support non-recursive + for( unsigned i = 0; i < array_count(vfs_entries); ++i ) { + const char *name = vfs_entries[i].name; + if( strmatch(name, it) ) { + // insert copy + char *copy = STRDUP(name); + array_push(list, copy); + } + } + } + + // sort alphabetically then remove dupes + array_sort(list, strcmp); + array_unique(list, strcmp_qsort); + + return list; +} + +static +char *vfs_unpack(const char *pathfile, int *size) { // must FREE() after use + // @todo: add cache here + char *data = NULL; + for(archive_dir *dir = dir_mount; dir && !data; dir = dir->next) { + if( dir->type == is_dir ) { +#if 0 // sandboxed + char buf[DIR_MAX]; + snprintf(buf, sizeof(buf), "%s%s", dir->path, pathfile); + data = file_load(buf, size); +#endif + } else { + int (*fn_find[3])(void *, const char *) = {(void*)zip_find, (void*)tar_find, (void*)pak_find}; + void* (*fn_unpack[3])(void *, unsigned) = {(void*)zip_extract, (void*)tar_extract, (void*)pak_extract}; + unsigned (*fn_size[3])(void *, unsigned) = {(void*)zip_size, (void*)tar_size, (void*)pak_size}; + +#if 0 + const char* cleanup = pathfile + strbegi(pathfile, dir->path) * strlen(dir->path); + while (cleanup[0] == '/') ++cleanup; +#else + const char *cleanup = pathfile; +#endif + + int index = fn_find[dir->type](dir->archive, cleanup); + data = fn_unpack[dir->type](dir->archive, index); + if( size ) *size = fn_size[dir->type](dir->archive, index); + } + // printf("%c trying %s in %s ...\n", data ? 'Y':'N', pathfile, dir->path); + } + //wait_ms(1000); // <-- simulate slow hdd + return data; +} + +const char *vfs_resolve(const char *pathfile) { + // we dont resolve absolute paths. they dont belong to the vfs + // if( pathfile[0] == '/' || pathfile[0] == '\\' || pathfile[1] == ':' ) return pathfile; + + char* id = file_id(pathfile); + // find best match (vfs_entries first) + for (int i = array_count(vfs_entries); --i >= 0; ) { + if (strbegi(vfs_entries[i].id, id) ) { + return vfs_entries[i].name; + } + } + // find best match (vfs_hints later) + for (int i = array_count(vfs_hints); --i >= 0; ) { + if (strbegi(vfs_hints[i].id, id) ) { + return vfs_hints[i].name; + } + } + return pathfile; +} + +char* vfs_load(const char *pathfile, int *size_out) { // @todo: fix leaks, vfs_unpack() + // @fixme: handle \\?\ absolute path (win) + if (!pathfile[0]) return file_load(pathfile, size_out); + while( pathfile[0] == '.' && (pathfile[1] == '/' || pathfile[1] == '\\') ) pathfile += 2; + // if (pathfile[0] == '/' || pathfile[1] == ':') return file_load(pathfile, size_out); // @fixme: handle current cooked /home/V4K or C:/V4K path cases within zipfiles + +if( size_out ) *size_out = 0; +if( strend(pathfile, "/") ) return 0; // it's a dir +static __thread map(char*,int) misses = 0, *init = 0; if(!init) init = misses, map_init(misses, less_str, hash_str); +int *found = map_find_or_add_allocated_key(misses, STRDUP(pathfile), -1); // [-1]non-init,[false]could not cook,[true]cooked +if( found && *found == 0 ) { + return 0; +} + + //{ + // exclude garbage from material names + // @todo: exclude double slashs in paths + char *base = file_name(pathfile); if(strchr(base,'+')) base = strchr(base, '+')+1; + if(base[0] == '\0') return 0; // it's a dir + char *folder = file_path(pathfile); + pathfile = va("%s%s", folder, base); + + // solve virtual path + pathfile = va("%s", vfs_resolve(pathfile)); + base = file_name(pathfile); + if(base[0] == '\0') return 0; // it's a dir + folder = file_path(pathfile); + // ease folders reading by shortening them: /home/rlyeh/prj/v4k/art/demos/audio/coin.wav -> demos/audio/coin.wav + // or C:/prj/v4k/engine/art/fonts/B612-BoldItalic.ttf -> fonts/B612-BoldItalic.ttf + static __thread array(char*) art_paths = 0; + if(!art_paths) for each_substring(ART,",",stem) array_push(art_paths, STRDUP(stem)); + char* pretty_folder = ""; + if( folder ) for( int i = 0; i < array_count(art_paths); ++i ) { + if( strbeg(folder, art_paths[i]) ) { pretty_folder = folder + strlen(art_paths[i]); break; } + } + //} + + int size = 0; + void *ptr = 0; + +#if 0 + // clean pathfile + while (pathfile[0] == '.' && pathfile[1] == '/') pathfile += 2; + while (pathfile[0] == '/') ++pathfile; +#endif + + const char *lookup_id = /*file_normalize_with_folder*/(pathfile); + + // search (last item) + static __thread char last_item[256] = { 0 }; + static __thread void *last_ptr = 0; + static __thread int last_size = 0; + if( !strcmpi(lookup_id, last_item)) { + ptr = last_ptr; + size = last_size; + } + + // search (cache) + if( !ptr && !is(osx) ) { // @todo: remove silicon mac M1 hack + ptr = cache_lookup(lookup_id, &size); + } + + if( ptr ) { + PRINTF("Loading VFS (%s)%s (cached)\n", pretty_folder, base); + } else { + PRINTF("Loading VFS (%s)%s\n", pretty_folder, base); + } + + // read cooked asset from mounted disks + if( !ptr ) { + ptr = vfs_unpack(pathfile, &size); + + // asset not found? maybe it has not been cooked yet at this point (see --cook-on-demand) + if( !ptr && COOK_ON_DEMAND ) { + + static thread_mutex_t mutex, *init = 0; if(!init) thread_mutex_init(init = &mutex); + thread_mutex_lock(&mutex); + +// this block saves some boot time (editor --cook-on-demand: boot 1.50s -> 0.90s) +#if 1 // EXPERIMENTAL_DONT_COOK_NON_EXISTING_ASSETS + static set(char*) disk = 0; + if(!disk) { set_init_str(disk); for each_substring(ART,",",art_folder) for each_array(file_list(va("%s**", art_folder)), char*, item) set_insert(disk, STRDUP(item)); } // art_folder ends with '/' + int found = !!set_find(disk, (char*)pathfile); + if( found ) +#endif + { + // technically, we should only cook `base` asset at this point. however, cooks on demand can be very + // expensive. not only because we're invoking an external tool/cook app in here, which is scanning all the + // cook folders at every call, but also because there is this expensive vfs_reload() call at end of current scope. + // so, in order to minimize the number of upcoming cook requests, we cook more stuff than needed at this point; + // just in anticipation of what's likely going to happen in the next frames. + // so, when asked to cook "models/model.fbx" we actually: + // - do cook "models/model.* (so, "model.tga","model.png","model.jpg","model.mtl",etc. are also cooked) + // - do cook "models/*.fbx" as well + char *dir = file_path(pathfile + ART_SKIP_ROOT); + char *group1 = dir[0] ? va("\"*/%s%s.*\"", dir, file_base(pathfile)) : base; // -> "*/models/model.*" + char *group2 = dir[0] ? va("\"*/%s*%s\"", dir, file_ext(pathfile)) : ""; // -> "*/models/*.fbx" + + char *cmd = va("%scook" ifdef(osx,".osx",ifdef(linux,".linux",".exe"))" %s %s --cook-ini=%s --cook-additive --cook-jobs=1 --quiet", TOOLS, group1, group2, COOK_INI); + + // cook groups + int rc = system(cmd); // atoi(app_exec(cmd)); + if(rc < 0) PANIC("cannot invoke `%scook` (return code %d)", TOOLS, rc); + + vfs_reload(); // @todo: optimize me. it is waaay inefficent to reload the whole VFS layout after cooking a single asset + } + + thread_mutex_unlock(&mutex); + + // finally, try again + pathfile = va("%s", vfs_resolve(pathfile)); + ptr = vfs_unpack(pathfile, &size); + } + + if( ptr ) { + cache_insert(lookup_id, ptr, size); + } + } + + if( ptr && size ) + if( ptr != last_ptr) { + snprintf(last_item, 256, "%s", lookup_id); + last_ptr = ptr; + last_size = size; + } + + // yet another last resort: redirect vfs_load() calls to file_load() + // (for environments without tools or cooked assets) + if(!ptr) { + if( !have_tools() ) { + ptr = file_load(pathfile, size_out); + } + } + + if(!ptr) { + PRINTF("Loading %s (not found)\n", pathfile); + } + +*found = ptr ? true : false; + + if( size_out ) *size_out = ptr ? size : 0; + return ptr; +} +char* vfs_read(const char *pathfile) { + return vfs_load(pathfile, NULL); +} +int vfs_size(const char *pathfile) { + int sz; + return vfs_load(pathfile, &sz), sz; +} + + +FILE* vfs_handle(const char *pathfile) { + // @fixme: non-compressible assets (adpcm wavs,mp3,ogg,mp4,avi,...) are taking a suboptimal code path here. + // no need to unzip them. just seek within the zipfile and return the *fp at that position + int sz; + char *buf = vfs_load(pathfile, &sz); + FILE *fp = fmemopen(buf ? buf : "", buf ? sz : 0, "r+b"); + ASSERT( fp, "cannot create tempfile" ); + return fp; +} +#if 0 +const char *vfs_extract(const char *pathfile) { // extract a vfs file into the local (temp) filesystem +#if 0 + FILE* fp = vfs_handle(pathfile); + return fp ? pathfile_from_handle(fp) : ""; +#else + int sz; + char *buf = vfs_load(pathfile, &sz); + if( !buf ) return ""; + + // pool of temp files. recycles after every loop + enum { MAX_TEMP_FILES = 16 }; + static __thread char temps[MAX_TEMP_FILES][DIR_MAX] = {0}; + static __thread int i = 0; + if( temps[i][0] ) unlink(temps[i]); + i = (i + 1) % MAX_TEMP_FILES; + if(!temps[i][0] ) snprintf(temps[i], DIR_MAX, "%s", file_tempname()); + char *name = temps[i]; + + FILE *tmp = fopen(name, "wb"); //unlink(name); + ASSERT( tmp, "cannot create tempfile %s", name ); + fwrite(buf ? buf : "", 1, buf ? sz : 0, tmp); + fclose(tmp); + return name; +#endif +} +#endif + + +// ----------------------------------------------------------------------------- +// cache + +static thread_mutex_t cache_mutex; AUTORUN{ thread_mutex_init(&cache_mutex); } + +void* cache_lookup(const char *pathfile, int *size) { // find key->value + if( !MAX_CACHED_FILES ) return 0; + void* data = 0; + thread_mutex_lock(&cache_mutex); + for(archive_dir *dir = dir_cache; dir; dir = dir->next) { + if( !strcmp(dir->path, pathfile) ) { + if(size) *size = dir->size; + data = dir->data; + break; + } + } + thread_mutex_unlock(&cache_mutex); + return data; +} +void* cache_insert(const char *pathfile, void *ptr, int size) { // append key/value; return LRU or NULL + if( !MAX_CACHED_FILES ) return 0; + if( !ptr || !size ) return 0; + + // keep cached files within limits + thread_mutex_lock(&cache_mutex); + + // append to cache + archive_dir zero = {0}, *old = dir_cache; + *(dir_cache = REALLOC(0, sizeof(archive_dir))) = zero; + dir_cache->next = old; + dir_cache->path = STRDUP(pathfile); + dir_cache->size = size; + dir_cache->data = REALLOC(0, size+1); + memcpy(dir_cache->data, ptr, size); size[(char*)dir_cache->data] = 0; // copy+terminator + + void *found = 0; + + static int added = 0; + if( added < MAX_CACHED_FILES ) { + ++added; + } else { + // remove oldest cache entry + for( archive_dir *prev = dir_cache, *dir = prev; dir ; prev = dir, dir = dir->next ) { + if( !dir->next ) { + prev->next = 0; // break link + found = dir->data; + dir->path = REALLOC(dir->path, 0); + dir->data = REALLOC(dir->data, 0); + dir = REALLOC(dir, 0); + break; + } + } + } + + thread_mutex_unlock(&cache_mutex); + + return found; +} + +// ---------------------------------------------------------------------------- +// ini + + +/* ini+, extended ini format +// - rlyeh, public domain +// +// # spec +// +// ; line comment +// [user] ; map section name (optional) +// name=john ; key and value (mapped here as user.name=john) +// +surname=doe jr. ; sub-key and value (mapped here as user.name.surname=doe jr.) +// age=30 ; numbers +// color=240 ; key and value \ +// color=253 ; key and value |> array: color[0], color[1] and color[2] +// color=255 ; key and value / +// color= ; remove key/value(s) +// color=white ; recreate key; color[1] and color[2] no longer exist +// [] ; unmap section +// -note=keys may start with symbols (except plus and semicolon) +// -note=linefeeds are either \r, \n or \r\n. +// -note=utf8 everywhere. +*/ + +static +char *ini_parse( const char *s ) { + char *map = 0; + int mapcap = 0, maplen = 0; + enum { DEL, REM, TAG, KEY, SUB, VAL } fsm = DEL; + const char *cut[6] = {0}, *end[6] = {0}; + while( *s ) { + while( *s && (*s == ' ' || *s == '\t' || *s == '\r' || *s == '\n') ) ++s; + /**/ if( *s == ';' ) cut[fsm = REM] = ++s; + else if( *s == '[' ) cut[fsm = TAG] = ++s; + else if( *s == '+' ) cut[fsm = SUB] = ++s; + else if( *s == '=' ) cut[fsm = VAL] = ++s; + else if( *s > ' ' && *s <= 'z' && *s != ']' ) cut[fsm = KEY] = cut[SUB] = end[SUB] = s; + else { if( *s ) ++s; continue; } + /**/ if( fsm == REM ) { while(*s && *s != '\r'&& *s != '\n') ++s; } + else if( fsm == TAG ) { while(*s && *s != '\r'&& *s != '\n'&& *s != ']') ++s; end[TAG] = s; } + else if( fsm == KEY ) { while(*s && *s > ' ' && *s <= 'z' && *s != '=') ++s; end[KEY] = s; } + else if( fsm == SUB ) { while(*s && *s > ' ' && *s <= 'z' && *s != '=') ++s; end[SUB] = s; } + else if( fsm == VAL ) { while(*s && *s >= ' ' && *s <= 127 && *s != ';') ++s; end[VAL] = s; + while( end[VAL][-1] <= ' ' ) { --end[VAL]; } + char buf[256] = {0}, *key = buf; + if( end[TAG] - cut[TAG] ) key += sprintf(key, "%.*s.", (int)(end[TAG] - cut[TAG]), cut[TAG] ); + if( end[KEY] - cut[KEY] ) key += sprintf(key, "%.*s", (int)(end[KEY] - cut[KEY]), cut[KEY] ); + if( end[SUB] - cut[SUB] ) key += sprintf(key, ".%.*s", (int)(end[SUB] - cut[SUB]), cut[SUB] ); + int reqlen = (key - buf) + 1 + (end[VAL] - cut[VAL]) + 1 + 1; + if( (reqlen + maplen) >= mapcap ) map = REALLOC( map, mapcap += reqlen + 512 ); + sprintf( map + maplen, "%.*s%c%.*s%c%c", (int)(key - buf), buf, 0, (int)(end[VAL] - cut[VAL]), cut[VAL], 0, 0 ); + maplen += reqlen - 1; + } + } + return map; +} + +// @todo: evaluate alt api +// int count = ini_count(filename); +// char *key = ini_key(filename, id); +// char *val = ini_val(filename, id); + +void ini_destroy(ini_t x) { + for each_map(x, char*, k, char*, v) { + FREE(k); + FREE(v); + } + map_free(x); +} + +ini_t ini_from_mem(const char *data) { + if( !data || !data[0] ) return 0; + + char *kv = ini_parse(data); + if( !kv ) return 0; + + ini_t map = 0; + map_init(map, less_str, hash_str); + for( char *iter = kv; iter[0]; ) { + char *key = iter; while( *iter++ ); + char *val = iter; while( *iter++ ); + + char **found = map_find(map, key); + if( !found ) map_insert(map, STRDUP(key), STRDUP(val)); + assert( map_find(map,key) ); + } + + FREE( kv ); + + return map; +} + +ini_t ini(const char *filename) { + char *kv = file_read(filename); + if(!kv) kv = vfs_read(filename); + return ini_from_mem(kv); +} + +bool ini_write(const char *filename, const char *section, const char *key, const char *value) { + // this is a little hacky { + char *data = file_read(filename); + if( data && data[0] ) { + char *begin = strrchr(data, '['); + char *end = strrchr(data, ']'); + if( begin && end && begin < end ) { + char *last_section = va("%.*s", (int)(end - begin - 1), begin + 1); + if( !strcmpi(last_section, section) ) section = 0; + } + } + // } + + char *s = va("%s%s=%s\r\n", section ? va("[%s]\r\n", section) : "", key, value); + return file_append(filename, s, strlen(s)); +} + #line 0 #line 1 "v4k_font.c" -// font framework. original code by Vassvik (UNLICENSED) -// - rlyeh, public domain. -// -// [x] embedded default font (bm mini). -// [x] oversampling, texture dimensions. -// [x] utf8, unicode ranges. -// [x] markup opcodes. -// [x] faces (italic, bold, regular, cjk), colors and sizes. -// [x] unicode ranges from dear-imgui (@ocornut allowed to mit-0 relicense the data tables). -// [*] alignment. kinda hacky. revisit some day. -// [ ] underlining, soft/hard shadows, outlines. -// [ ] clip/wrap/overflow regions. -// [ ] text-shaping, text-layout. -// [ ] text-wrapping. -// [ ] optimizations. -// -// ## language families that could be merged on a single texture alias -// - EU+EL+RU -// - AR+HE+RU -// - TH+VI+TW -// - ZH -// - JP -// - KR - -// ----------------------------------------------------------------------------- - -// bm-mini.zip (public domain font) -// http://bitmapmania.m78.com -// cooz@m78.com - -static const char bm_mini_ttf[] = { -/*000000*/ 0x00,0x01,0x00,0x00,0x00,0x0e,0x00,0x30,0x00,0x03,0x00,0xb0,0x4f,0x53,0x2f,0x32, -/*000010*/ 0x80,0x00,0x6d,0x88,0x00,0x00,0x4e,0x04,0x00,0x00,0x00,0x4e,0x63,0x6d,0x61,0x70, -/*000020*/ 0xf1,0x89,0xe8,0x81,0x00,0x00,0x45,0x54,0x00,0x00,0x02,0x28,0x63,0x76,0x74,0x20, -/*000030*/ 0x5a,0x9b,0xfa,0x82,0x00,0x00,0x03,0xe8,0x00,0x00,0x00,0x32,0x66,0x70,0x67,0x6d, -/*000040*/ 0x83,0x33,0xc2,0x4f,0x00,0x00,0x03,0xd4,0x00,0x00,0x00,0x14,0x67,0x6c,0x79,0x66, -/*000050*/ 0x05,0xa3,0xba,0x6b,0x00,0x00,0x04,0x64,0x00,0x00,0x3c,0xec,0x68,0x64,0x6d,0x78, -/*000060*/ 0x0d,0xad,0x0b,0x14,0x00,0x00,0x47,0x7c,0x00,0x00,0x06,0x88,0x68,0x65,0x61,0x64, -/*000070*/ 0xce,0xfe,0xc6,0xae,0x00,0x00,0x4e,0x54,0x00,0x00,0x00,0x36,0x68,0x68,0x65,0x61, -/*000080*/ 0x05,0x15,0x02,0xee,0x00,0x00,0x4e,0x8c,0x00,0x00,0x00,0x24,0x68,0x6d,0x74,0x78, -/*000090*/ 0xae,0x38,0x00,0xf4,0x00,0x00,0x42,0xe0,0x00,0x00,0x01,0x8c,0x6c,0x6f,0x63,0x61, -/*0000a0*/ 0x00,0x0b,0xe4,0xba,0x00,0x00,0x41,0x50,0x00,0x00,0x01,0x90,0x6d,0x61,0x78,0x70, -/*0000b0*/ 0x00,0xfe,0x01,0x4d,0x00,0x00,0x4e,0xb0,0x00,0x00,0x00,0x20,0x6e,0x61,0x6d,0x65, -/*0000c0*/ 0xd6,0xe2,0x1a,0x1f,0x00,0x00,0x00,0xec,0x00,0x00,0x02,0xe5,0x70,0x6f,0x73,0x74, -/*0000d0*/ 0x09,0x85,0x09,0xff,0x00,0x00,0x44,0x6c,0x00,0x00,0x00,0xe8,0x70,0x72,0x65,0x70, -/*0000e0*/ 0xc9,0x0f,0xd2,0x13,0x00,0x00,0x04,0x1c,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x15, -/*0000f0*/ 0x01,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x76,0x00,0x3b,0x00,0x00, -/*000100*/ 0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x0e,0x00,0xb8,0x00,0x00,0x00,0x00,0x00,0x00, -/*000110*/ 0x00,0x02,0x00,0x04,0x00,0xc8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x4e, -/*000120*/ 0x01,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x14,0x00,0xd6,0x00,0x00, -/*000130*/ 0x00,0x00,0x00,0x00,0x00,0x05,0x00,0x48,0x01,0x83,0x00,0x00,0x00,0x00,0x00,0x00, -/*000140*/ 0x00,0x06,0x00,0x10,0x01,0xd3,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b, -/*000150*/ 0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x07,0x00,0xb1,0x00,0x01, -/*000160*/ 0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x02,0x00,0xc6,0x00,0x01,0x00,0x00,0x00,0x00, -/*000170*/ 0x00,0x03,0x00,0x27,0x00,0xea,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x0a, -/*000180*/ 0x00,0xcc,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x05,0x00,0x24,0x01,0x5f,0x00,0x01, -/*000190*/ 0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x08,0x01,0xcb,0x00,0x03,0x00,0x01,0x04,0x09, -/*0001a0*/ 0x00,0x00,0x00,0x76,0x00,0x3b,0x00,0x03,0x00,0x01,0x04,0x09,0x00,0x01,0x00,0x0e, -/*0001b0*/ 0x00,0xb8,0x00,0x03,0x00,0x01,0x04,0x09,0x00,0x02,0x00,0x04,0x00,0xc8,0x00,0x03, -/*0001c0*/ 0x00,0x01,0x04,0x09,0x00,0x03,0x00,0x4e,0x01,0x11,0x00,0x03,0x00,0x01,0x04,0x09, -/*0001d0*/ 0x00,0x04,0x00,0x14,0x00,0xd6,0x00,0x03,0x00,0x01,0x04,0x09,0x00,0x05,0x00,0x48, -/*0001e0*/ 0x01,0x83,0x00,0x03,0x00,0x01,0x04,0x09,0x00,0x06,0x00,0x10,0x01,0xd3,0x43,0x6f, -/*0001f0*/ 0x70,0x79,0x72,0x69,0x67,0x68,0x74,0x20,0x28,0x43,0x29,0x20,0x32,0x30,0x30,0x31, -/*000200*/ 0x20,0x42,0x69,0x74,0x6d,0x61,0x70,0x4d,0x61,0x6e,0x69,0x61,0x20,0x2f,0x20,0x43, -/*000210*/ 0x4f,0x4f,0x5a,0x2e,0x20,0x41,0x6c,0x6c,0x20,0x72,0x69,0x67,0x68,0x74,0x73,0x20, -/*000220*/ 0x72,0x65,0x73,0x65,0x72,0x76,0x65,0x64,0x2e,0x00,0x43,0x00,0x6f,0x00,0x70,0x00, -/*000230*/ 0x79,0x00,0x72,0x00,0x69,0x00,0x67,0x00,0x68,0x00,0x74,0x00,0x20,0x00,0x28,0x00, -/*000240*/ 0x43,0x00,0x29,0x00,0x20,0x00,0x32,0x00,0x30,0x00,0x30,0x00,0x31,0x00,0x20,0x00, -/*000250*/ 0x42,0x00,0x69,0x00,0x74,0x00,0x6d,0x00,0x61,0x00,0x70,0x00,0x4d,0x00,0x61,0x00, -/*000260*/ 0x6e,0x00,0x69,0x00,0x61,0x00,0x20,0x00,0x2f,0x00,0x20,0x00,0x43,0x00,0x4f,0x00, -/*000270*/ 0x4f,0x00,0x5a,0x00,0x2e,0x00,0x20,0x00,0x41,0x00,0x6c,0x00,0x6c,0x00,0x20,0x00, -/*000280*/ 0x72,0x00,0x69,0x00,0x67,0x00,0x68,0x00,0x74,0x00,0x73,0x00,0x20,0x00,0x72,0x00, -/*000290*/ 0x65,0x00,0x73,0x00,0x65,0x00,0x72,0x00,0x76,0x00,0x65,0x00,0x64,0x00,0x2e,0x42, -/*0002a0*/ 0x4d,0x20,0x6d,0x69,0x6e,0x69,0x00,0x42,0x00,0x4d,0x00,0x20,0x00,0x6d,0x00,0x69, -/*0002b0*/ 0x00,0x6e,0x00,0x69,0x41,0x38,0x00,0x41,0x00,0x38,0x42,0x4d,0x20,0x6d,0x69,0x6e, -/*0002c0*/ 0x69,0x20,0x41,0x38,0x00,0x42,0x00,0x4d,0x00,0x20,0x00,0x6d,0x00,0x69,0x00,0x6e, -/*0002d0*/ 0x00,0x69,0x00,0x20,0x00,0x41,0x00,0x38,0x4d,0x61,0x63,0x72,0x6f,0x6d,0x65,0x64, -/*0002e0*/ 0x69,0x61,0x20,0x46,0x6f,0x6e,0x74,0x6f,0x67,0x72,0x61,0x70,0x68,0x65,0x72,0x20, -/*0002f0*/ 0x34,0x2e,0x31,0x4a,0x20,0x42,0x4d,0x20,0x6d,0x69,0x6e,0x69,0x20,0x41,0x38,0x00, -/*000300*/ 0x4d,0x00,0x61,0x00,0x63,0x00,0x72,0x00,0x6f,0x00,0x6d,0x00,0x65,0x00,0x64,0x00, -/*000310*/ 0x69,0x00,0x61,0x00,0x20,0x00,0x46,0x00,0x6f,0x00,0x6e,0x00,0x74,0x00,0x6f,0x00, -/*000320*/ 0x67,0x00,0x72,0x00,0x61,0x00,0x70,0x00,0x68,0x00,0x65,0x00,0x72,0x00,0x20,0x00, -/*000330*/ 0x34,0x00,0x2e,0x00,0x31,0x00,0x4a,0x00,0x20,0x00,0x42,0x00,0x4d,0x00,0x20,0x00, -/*000340*/ 0x6d,0x00,0x69,0x00,0x6e,0x00,0x69,0x00,0x20,0x00,0x41,0x00,0x38,0x4d,0x61,0x63, -/*000350*/ 0x72,0x6f,0x6d,0x65,0x64,0x69,0x61,0x20,0x46,0x6f,0x6e,0x74,0x6f,0x67,0x72,0x61, -/*000360*/ 0x70,0x68,0x65,0x72,0x20,0x34,0x2e,0x31,0x4a,0x20,0x30,0x31,0x2e,0x31,0x2e,0x32, -/*000370*/ 0x37,0x00,0x4d,0x00,0x61,0x00,0x63,0x00,0x72,0x00,0x6f,0x00,0x6d,0x00,0x65,0x00, -/*000380*/ 0x64,0x00,0x69,0x00,0x61,0x00,0x20,0x00,0x46,0x00,0x6f,0x00,0x6e,0x00,0x74,0x00, -/*000390*/ 0x6f,0x00,0x67,0x00,0x72,0x00,0x61,0x00,0x70,0x00,0x68,0x00,0x65,0x00,0x72,0x00, -/*0003a0*/ 0x20,0x00,0x34,0x00,0x2e,0x00,0x31,0x00,0x4a,0x00,0x20,0x00,0x30,0x00,0x31,0x00, -/*0003b0*/ 0x2e,0x00,0x31,0x00,0x2e,0x00,0x32,0x00,0x37,0x42,0x4d,0x6d,0x69,0x6e,0x69,0x41, -/*0003c0*/ 0x38,0x00,0x42,0x00,0x4d,0x00,0x6d,0x00,0x69,0x00,0x6e,0x00,0x69,0x00,0x41,0x00, -/*0003d0*/ 0x38,0x00,0x00,0x00,0x40,0x01,0x00,0x2c,0x76,0x45,0x20,0xb0,0x03,0x25,0x45,0x23, -/*0003e0*/ 0x61,0x68,0x18,0x23,0x68,0x60,0x44,0x2d,0xff,0x39,0x00,0x01,0x01,0x8f,0x02,0x57, -/*0003f0*/ 0x00,0x62,0x00,0xc5,0x00,0x62,0x00,0xc5,0x01,0x29,0x01,0x8d,0x01,0x8e,0x01,0x2a, -/*000400*/ 0x5a,0x67,0x12,0x06,0xd2,0xb8,0x6a,0x18,0xf8,0x2a,0x61,0xa3,0x0e,0x40,0xee,0xd2, -/*000410*/ 0x80,0x3a,0x27,0x55,0xa2,0x87,0x00,0x01,0x00,0x0d,0x00,0x00,0x40,0x11,0x0b,0x0b, -/*000420*/ 0x0a,0x0a,0x09,0x09,0x08,0x08,0x03,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x01,0x8d, -/*000430*/ 0xb8,0x01,0xff,0x85,0x45,0x68,0x44,0x45,0x68,0x44,0x45,0x68,0x44,0x45,0x68,0x44, -/*000440*/ 0x45,0x68,0x44,0x45,0x68,0x44,0x45,0x68,0x44,0x45,0x68,0x44,0xb3,0x05,0x04,0x46, -/*000450*/ 0x00,0x2b,0xb3,0x07,0x06,0x46,0x00,0x2b,0xb1,0x04,0x04,0x45,0x68,0x44,0xb1,0x06, -/*000460*/ 0x06,0x45,0x68,0x44,0x00,0x02,0x00,0x32,0x00,0x00,0x01,0x5e,0x02,0x58,0x00,0x03, -/*000470*/ 0x00,0x07,0x00,0x55,0x40,0x1f,0x01,0x08,0x08,0x40,0x09,0x02,0x07,0x04,0x04,0x01, -/*000480*/ 0x00,0x06,0x05,0x04,0x03,0x02,0x05,0x04,0x06,0x00,0x07,0x06,0x06,0x01,0x02,0x01, -/*000490*/ 0x03,0x00,0x01,0x00,0x46,0x76,0x2f,0x37,0x18,0x00,0x2f,0x3c,0x2f,0x3c,0x10,0xfd, -/*0004a0*/ 0x3c,0x10,0xfd,0x3c,0x01,0x2f,0x3c,0xfd,0x3c,0x2f,0x3c,0xfd,0x3c,0x00,0x31,0x30, -/*0004b0*/ 0x01,0x49,0x68,0xb9,0x00,0x00,0x00,0x08,0x49,0x68,0x61,0xb0,0x40,0x52,0x58,0x38, -/*0004c0*/ 0x11,0x37,0xb9,0x00,0x08,0xff,0xc0,0x38,0x59,0x33,0x11,0x21,0x11,0x27,0x33,0x11, -/*0004d0*/ 0x23,0x32,0x01,0x2c,0xfa,0xc8,0xc8,0x02,0x58,0xfd,0xa8,0x32,0x01,0xf4,0x00,0x02, -/*0004e0*/ 0x00,0x01,0x00,0x01,0x00,0x63,0x02,0x57,0x00,0x03,0x00,0x07,0x00,0x53,0x40,0x20, -/*0004f0*/ 0x01,0x08,0x08,0x40,0x09,0x00,0x01,0x00,0x06,0x05,0x02,0x03,0x01,0x04,0x07,0x04, -/*000500*/ 0x03,0x03,0x00,0x07,0x06,0x06,0x04,0x05,0x04,0x01,0x03,0x02,0x03,0x01,0x01,0x46, -/*000510*/ 0x76,0x2f,0x37,0x18,0x00,0x3f,0x3c,0x3f,0x3c,0x10,0xfd,0x3c,0x01,0x2f,0x17,0x3c, -/*000520*/ 0xfd,0x17,0x3c,0x00,0x2e,0x2e,0x31,0x30,0x01,0x49,0x68,0xb9,0x00,0x01,0x00,0x08, -/*000530*/ 0x49,0x68,0x61,0xb0,0x40,0x52,0x58,0x38,0x11,0x37,0xb9,0x00,0x08,0xff,0xc0,0x38, -/*000540*/ 0x59,0x37,0x23,0x11,0x33,0x11,0x23,0x35,0x33,0x63,0x62,0x62,0x62,0x62,0xc9,0x01, -/*000550*/ 0x8e,0xfd,0xaa,0x62,0x00,0x02,0x00,0x01,0x01,0x91,0x01,0x2b,0x02,0x57,0x00,0x03, -/*000560*/ 0x00,0x07,0x00,0x50,0x40,0x1e,0x01,0x08,0x08,0x40,0x09,0x00,0x02,0x01,0x04,0x03, -/*000570*/ 0x00,0x07,0x04,0x04,0x06,0x05,0x05,0x04,0x01,0x03,0x00,0x07,0x06,0x03,0x03,0x02, -/*000580*/ 0x03,0x01,0x05,0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x17,0x3c,0x2f,0x17,0x3c,0x01, -/*000590*/ 0x2f,0x3c,0xfd,0x3c,0x2f,0x3c,0xfd,0x3c,0x00,0x31,0x30,0x01,0x49,0x68,0xb9,0x00, -/*0005a0*/ 0x05,0x00,0x08,0x49,0x68,0x61,0xb0,0x40,0x52,0x58,0x38,0x11,0x37,0xb9,0x00,0x08, -/*0005b0*/ 0xff,0xc0,0x38,0x59,0x01,0x23,0x35,0x33,0x07,0x23,0x35,0x33,0x01,0x2b,0x62,0x62, -/*0005c0*/ 0xc8,0x62,0x62,0x01,0x91,0xc6,0xc6,0xc6,0x00,0x02,0x00,0x01,0x00,0x65,0x01,0xf3, -/*0005d0*/ 0x02,0x57,0x00,0x1b,0x00,0x1f,0x00,0xb3,0x40,0x5e,0x01,0x20,0x20,0x40,0x21,0x00, -/*0005e0*/ 0x1b,0x18,0x17,0x14,0x13,0x0e,0x0d,0x0a,0x09,0x00,0x06,0x05,0x04,0x07,0x1f,0x12, -/*0005f0*/ 0x11,0x03,0x1e,0x04,0x10,0x0f,0x0c,0x0b,0x08,0x05,0x07,0x1d,0x04,0x03,0x03,0x1c, -/*000600*/ 0x04,0x1a,0x19,0x16,0x02,0x01,0x05,0x15,0x1b,0x1a,0x06,0x00,0x1f,0x0b,0x0a,0x03, -/*000610*/ 0x1c,0x06,0x09,0x08,0x05,0x04,0x01,0x05,0x00,0x0d,0x0c,0x06,0x0e,0x1e,0x19,0x18, -/*000620*/ 0x03,0x1d,0x06,0x17,0x16,0x13,0x12,0x0f,0x05,0x0e,0x07,0x06,0x03,0x03,0x02,0x15, -/*000630*/ 0x14,0x11,0x03,0x10,0x03,0x01,0x09,0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x17,0x3c, -/*000640*/ 0x2f,0x17,0x3c,0x2f,0x17,0x3c,0xfd,0x17,0x3c,0x10,0xfd,0x3c,0x2f,0x17,0x3c,0xfd, -/*000650*/ 0x17,0x3c,0x10,0xfd,0x3c,0x01,0x2f,0x17,0x3c,0xfd,0x17,0x3c,0x2f,0x17,0x3c,0xfd, -/*000660*/ 0x17,0x3c,0x10,0xfd,0x3c,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x00, -/*000670*/ 0x31,0x30,0x01,0x49,0x68,0xb9,0x00,0x09,0x00,0x20,0x49,0x68,0x61,0xb0,0x40,0x52, -/*000680*/ 0x58,0x38,0x11,0x37,0xb9,0x00,0x20,0xff,0xc0,0x38,0x59,0x25,0x23,0x15,0x23,0x35, -/*000690*/ 0x23,0x15,0x23,0x35,0x23,0x35,0x33,0x35,0x23,0x35,0x33,0x35,0x33,0x15,0x33,0x35, -/*0006a0*/ 0x33,0x15,0x33,0x15,0x23,0x15,0x33,0x27,0x35,0x23,0x15,0x01,0xf3,0x65,0x61,0x67, -/*0006b0*/ 0x61,0x64,0x64,0x64,0x64,0x62,0x67,0x61,0x64,0x64,0x64,0xc8,0x62,0xc9,0x64,0x64, -/*0006c0*/ 0x64,0x65,0x61,0x67,0x61,0x64,0x64,0x64,0x65,0x61,0x67,0x03,0x62,0x62,0x00,0x01, -/*0006d0*/ 0x00,0x01,0x00,0x01,0x01,0xf3,0x01,0xf3,0x00,0x13,0x00,0x88,0x40,0x42,0x01,0x14, -/*0006e0*/ 0x14,0x40,0x15,0x00,0x13,0x0a,0x09,0x00,0x04,0x03,0x04,0x05,0x0e,0x06,0x05,0x03, -/*0006f0*/ 0x0d,0x04,0x0c,0x0b,0x08,0x03,0x07,0x10,0x0f,0x04,0x12,0x02,0x01,0x03,0x11,0x07, -/*000700*/ 0x06,0x03,0x03,0x02,0x0b,0x00,0x09,0x08,0x01,0x03,0x00,0x07,0x12,0x11,0x10,0x0d, -/*000710*/ 0x03,0x0c,0x13,0x12,0x0f,0x0e,0x0b,0x05,0x0a,0x02,0x05,0x04,0x01,0x01,0x09,0x46, -/*000720*/ 0x76,0x2f,0x37,0x18,0x00,0x3f,0x3c,0x3f,0x17,0x3c,0x2f,0x17,0x3c,0x10,0xfd,0x17, -/*000730*/ 0x3c,0x10,0xfd,0x17,0x3c,0x01,0x2f,0x17,0x3c,0xfd,0x3c,0x2f,0x17,0x3c,0xfd,0x17, -/*000740*/ 0x3c,0x10,0xfd,0x3c,0x2e,0x2e,0x2e,0x2e,0x00,0x31,0x30,0x01,0x49,0x68,0xb9,0x00, -/*000750*/ 0x09,0x00,0x14,0x49,0x68,0x61,0xb0,0x40,0x52,0x58,0x38,0x11,0x37,0xb9,0x00,0x14, -/*000760*/ 0xff,0xc0,0x38,0x59,0x25,0x23,0x15,0x23,0x15,0x23,0x35,0x23,0x35,0x23,0x35,0x33, -/*000770*/ 0x35,0x33,0x15,0x33,0x35,0x33,0x15,0x33,0x01,0xf3,0x65,0x64,0x61,0x64,0x64,0x64, -/*000780*/ 0x62,0x67,0x61,0x64,0xc9,0x64,0x64,0x65,0x64,0xc5,0x64,0x64,0x64,0x65,0x00,0x03, -/*000790*/ 0x00,0x01,0x00,0x01,0x02,0xbb,0x02,0x57,0x00,0x23,0x00,0x27,0x00,0x2b,0x00,0xde, -/*0007a0*/ 0x40,0x80,0x01,0x2c,0x2c,0x40,0x2d,0x00,0x20,0x1f,0x08,0x07,0x04,0x0a,0x09,0x1e, -/*0007b0*/ 0x1d,0x04,0x18,0x17,0x0c,0x03,0x0b,0x29,0x28,0x16,0x15,0x0e,0x05,0x0d,0x04,0x0f, -/*0007c0*/ 0x2b,0x2a,0x14,0x13,0x10,0x05,0x0f,0x04,0x12,0x11,0x1a,0x06,0x05,0x03,0x19,0x04, -/*0007d0*/ 0x27,0x26,0x1c,0x04,0x03,0x05,0x1b,0x25,0x24,0x22,0x02,0x01,0x05,0x21,0x04,0x23, -/*0007e0*/ 0x00,0x27,0x24,0x05,0x04,0x01,0x05,0x00,0x06,0x02,0x1d,0x1c,0x11,0x10,0x0d,0x05, -/*0007f0*/ 0x0c,0x06,0x0e,0x21,0x0f,0x0e,0x03,0x20,0x06,0x26,0x25,0x23,0x22,0x1f,0x1e,0x0b, -/*000800*/ 0x07,0x06,0x09,0x0a,0x2a,0x29,0x17,0x16,0x13,0x05,0x12,0x06,0x14,0x2b,0x28,0x19, -/*000810*/ 0x03,0x18,0x02,0x1b,0x1a,0x15,0x03,0x14,0x03,0x09,0x08,0x03,0x03,0x02,0x01,0x01, -/*000820*/ 0x11,0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x17,0x3c,0x3f,0x17,0x3c,0x3f,0x17,0x3c, -/*000830*/ 0x10,0xfd,0x17,0x3c,0x2f,0x17,0x3c,0xfd,0x17,0x3c,0x10,0xfd,0x17,0x3c,0x10,0xfd, -/*000840*/ 0x17,0x3c,0x01,0x2f,0x3c,0xfd,0x17,0x3c,0x2f,0x17,0x3c,0xfd,0x17,0x3c,0x2f,0x3c, -/*000850*/ 0xfd,0x17,0x3c,0x10,0xfd,0x17,0x3c,0x2f,0x17,0x3c,0xfd,0x3c,0x2f,0x3c,0xfd,0x3c, -/*000860*/ 0x2e,0x2e,0x00,0x31,0x30,0x01,0x49,0x68,0xb9,0x00,0x11,0x00,0x2c,0x49,0x68,0x61, -/*000870*/ 0xb0,0x40,0x52,0x58,0x38,0x11,0x37,0xb9,0x00,0x2c,0xff,0xc0,0x38,0x59,0x25,0x23, -/*000880*/ 0x15,0x23,0x35,0x23,0x35,0x23,0x15,0x23,0x35,0x33,0x35,0x23,0x15,0x23,0x35,0x23, -/*000890*/ 0x35,0x33,0x35,0x33,0x15,0x33,0x15,0x33,0x35,0x33,0x15,0x23,0x15,0x33,0x35,0x33, -/*0008a0*/ 0x15,0x33,0x07,0x35,0x23,0x15,0x01,0x35,0x23,0x15,0x02,0xbb,0x65,0x61,0x64,0x67, -/*0008b0*/ 0x61,0x64,0x67,0x61,0x64,0x64,0x62,0x64,0x67,0x61,0x64,0x67,0x61,0x64,0x64,0x62, -/*0008c0*/ 0xfe,0xd2,0x62,0x65,0x64,0x65,0x63,0xc8,0xc6,0xca,0x64,0x65,0x61,0x64,0x65,0x63, -/*0008d0*/ 0xc8,0xc6,0xca,0x64,0x65,0x61,0x62,0x62,0x01,0x2c,0x62,0x62,0x00,0x03,0x00,0x01, -/*0008e0*/ 0x00,0x01,0x01,0xf3,0x02,0x57,0x00,0x1b,0x00,0x1f,0x00,0x25,0x00,0xce,0x40,0x76, -/*0008f0*/ 0x01,0x26,0x26,0x40,0x27,0x00,0x1a,0x19,0x1b,0x04,0x03,0x03,0x00,0x04,0x05,0x10, -/*000900*/ 0x0f,0x0c,0x03,0x0b,0x04,0x09,0x25,0x24,0x1f,0x1e,0x12,0x11,0x0e,0x0d,0x0a,0x09, -/*000910*/ 0x09,0x04,0x13,0x23,0x22,0x1d,0x1c,0x18,0x17,0x14,0x07,0x13,0x04,0x15,0x21,0x20, -/*000920*/ 0x16,0x08,0x07,0x05,0x15,0x04,0x06,0x05,0x02,0x03,0x01,0x03,0x02,0x06,0x04,0x25, -/*000930*/ 0x20,0x0b,0x0a,0x07,0x05,0x06,0x06,0x04,0x1e,0x1d,0x15,0x14,0x11,0x05,0x10,0x06, -/*000940*/ 0x12,0x22,0x21,0x06,0x0c,0x24,0x23,0x19,0x18,0x0d,0x01,0x00,0x07,0x0c,0x06,0x17, -/*000950*/ 0x0f,0x0e,0x03,0x16,0x1f,0x1c,0x1b,0x03,0x1a,0x02,0x13,0x12,0x03,0x09,0x08,0x05, -/*000960*/ 0x03,0x04,0x01,0x01,0x0b,0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x17,0x3c,0x3f,0x3c, -/*000970*/ 0x3f,0x17,0x3c,0x2f,0x17,0x3c,0xfd,0x17,0x3c,0x10,0xfd,0x3c,0x10,0xfd,0x17,0x3c, -/*000980*/ 0x10,0xfd,0x17,0x3c,0x10,0xfd,0x3c,0x01,0x2f,0x17,0x3c,0xfd,0x17,0x3c,0x10,0xfd, -/*000990*/ 0x17,0x3c,0x10,0xfd,0x17,0x3c,0x10,0xfd,0x17,0x3c,0x10,0xfd,0x17,0x3c,0x2e,0x2e, -/*0009a0*/ 0x00,0x31,0x30,0x01,0x49,0x68,0xb9,0x00,0x0b,0x00,0x26,0x49,0x68,0x61,0xb0,0x40, -/*0009b0*/ 0x52,0x58,0x38,0x11,0x37,0xb9,0x00,0x26,0xff,0xc0,0x38,0x59,0x01,0x23,0x15,0x33, -/*0009c0*/ 0x15,0x23,0x35,0x23,0x15,0x23,0x35,0x23,0x35,0x33,0x35,0x23,0x35,0x33,0x35,0x33, -/*0009d0*/ 0x15,0x33,0x15,0x23,0x15,0x33,0x35,0x33,0x25,0x35,0x23,0x15,0x13,0x35,0x23,0x35, -/*0009e0*/ 0x23,0x15,0x01,0xf3,0x64,0x64,0x62,0x67,0xc5,0x64,0x64,0x64,0x64,0x62,0x64,0x64, -/*0009f0*/ 0xcb,0x61,0xfe,0xd4,0x62,0xc6,0x64,0x62,0x01,0x2d,0xcb,0x61,0x64,0x64,0x65,0xc5, -/*000a00*/ 0x67,0x61,0x64,0x65,0x61,0x66,0x64,0x02,0x62,0x62,0xfe,0xd4,0x61,0x65,0xc6,0x00, -/*000a10*/ 0x00,0x01,0x00,0x01,0x01,0x91,0x00,0x63,0x02,0x57,0x00,0x03,0x00,0x3f,0x40,0x13, -/*000a20*/ 0x01,0x04,0x04,0x40,0x05,0x00,0x02,0x01,0x04,0x03,0x00,0x01,0x00,0x03,0x02,0x03, -/*000a30*/ 0x01,0x01,0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x3c,0x2f,0x3c,0x01,0x2f,0x3c,0xfd, -/*000a40*/ 0x3c,0x00,0x31,0x30,0x01,0x49,0x68,0xb9,0x00,0x01,0x00,0x04,0x49,0x68,0x61,0xb0, -/*000a50*/ 0x40,0x52,0x58,0x38,0x11,0x37,0xb9,0x00,0x04,0xff,0xc0,0x38,0x59,0x13,0x23,0x35, -/*000a60*/ 0x33,0x63,0x62,0x62,0x01,0x91,0xc6,0x00,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0xc7, -/*000a70*/ 0x02,0x57,0x00,0x0b,0x00,0x67,0x40,0x2d,0x01,0x0c,0x0c,0x40,0x0d,0x00,0x07,0x06, -/*000a80*/ 0x0b,0x04,0x03,0x03,0x00,0x04,0x05,0x0a,0x09,0x06,0x05,0x02,0x05,0x01,0x04,0x08, -/*000a90*/ 0x07,0x09,0x08,0x01,0x03,0x00,0x06,0x0a,0x03,0x02,0x06,0x04,0x0b,0x0a,0x03,0x05, -/*000aa0*/ 0x04,0x01,0x01,0x07,0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x3c,0x3f,0x3c,0x10,0xfd, -/*000ab0*/ 0x3c,0x10,0xfd,0x17,0x3c,0x01,0x2f,0x3c,0xfd,0x17,0x3c,0x10,0xfd,0x17,0x3c,0x00, -/*000ac0*/ 0x2e,0x2e,0x31,0x30,0x01,0x49,0x68,0xb9,0x00,0x07,0x00,0x0c,0x49,0x68,0x61,0xb0, -/*000ad0*/ 0x40,0x52,0x58,0x38,0x11,0x37,0xb9,0x00,0x0c,0xff,0xc0,0x38,0x59,0x13,0x23,0x11, -/*000ae0*/ 0x33,0x15,0x23,0x35,0x23,0x11,0x33,0x35,0x33,0xc7,0x64,0x64,0x62,0x64,0x64,0x62, -/*000af0*/ 0x01,0xf5,0xfe,0x6d,0x61,0x65,0x01,0x8d,0x64,0x00,0x00,0x01,0x00,0x01,0x00,0x01, -/*000b00*/ 0x00,0xc7,0x02,0x57,0x00,0x0b,0x00,0x67,0x40,0x2c,0x01,0x0c,0x0c,0x40,0x0d,0x00, -/*000b10*/ 0x0b,0x0a,0x02,0x01,0x04,0x08,0x07,0x04,0x03,0x03,0x0a,0x09,0x06,0x03,0x05,0x04, -/*000b20*/ 0x0b,0x00,0x05,0x01,0x00,0x03,0x04,0x06,0x02,0x07,0x06,0x06,0x08,0x09,0x08,0x03, -/*000b30*/ 0x03,0x02,0x01,0x01,0x03,0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x3c,0x3f,0x3c,0x10, -/*000b40*/ 0xfd,0x3c,0x10,0xfd,0x17,0x3c,0x01,0x2f,0x3c,0xfd,0x17,0x3c,0x2f,0x17,0x3c,0xfd, -/*000b50*/ 0x3c,0x00,0x2e,0x2e,0x31,0x30,0x01,0x49,0x68,0xb9,0x00,0x03,0x00,0x0c,0x49,0x68, -/*000b60*/ 0x61,0xb0,0x40,0x52,0x58,0x38,0x11,0x37,0xb9,0x00,0x0c,0xff,0xc0,0x38,0x59,0x37, -/*000b70*/ 0x23,0x15,0x23,0x35,0x33,0x11,0x23,0x35,0x33,0x15,0x33,0xc7,0x65,0x61,0x64,0x64, -/*000b80*/ 0x62,0x64,0x65,0x64,0x62,0x01,0x92,0x62,0x65,0x00,0x00,0x01,0x00,0x01,0x01,0x2d, -/*000b90*/ 0x01,0x2b,0x02,0x57,0x00,0x13,0x00,0x83,0x40,0x40,0x01,0x14,0x14,0x40,0x15,0x00, -/*000ba0*/ 0x12,0x11,0x13,0x04,0x03,0x03,0x00,0x04,0x05,0x08,0x07,0x04,0x0e,0x0d,0x0a,0x03, -/*000bb0*/ 0x09,0x10,0x0f,0x0c,0x03,0x0b,0x04,0x06,0x05,0x02,0x03,0x01,0x07,0x06,0x06,0x11, -/*000bc0*/ 0x0d,0x0c,0x01,0x00,0x05,0x10,0x09,0x08,0x05,0x03,0x04,0x13,0x12,0x0f,0x03,0x0e, -/*000bd0*/ 0x03,0x0b,0x03,0x02,0x03,0x0a,0x02,0x01,0x09,0x46,0x76,0x2f,0x37,0x18,0x00,0x3f, -/*000be0*/ 0x17,0x3c,0x3f,0x17,0x3c,0x2f,0x17,0x3c,0x2f,0x17,0x3c,0xfd,0x3c,0x01,0x2f,0x17, -/*000bf0*/ 0x3c,0xfd,0x17,0x3c,0x2f,0x17,0x3c,0xfd,0x3c,0x10,0xfd,0x17,0x3c,0x2e,0x2e,0x00, -/*000c00*/ 0x31,0x30,0x01,0x49,0x68,0xb9,0x00,0x09,0x00,0x14,0x49,0x68,0x61,0xb0,0x40,0x52, -/*000c10*/ 0x58,0x38,0x11,0x37,0xb9,0x00,0x14,0xff,0xc0,0x38,0x59,0x01,0x23,0x15,0x33,0x15, -/*000c20*/ 0x23,0x35,0x23,0x15,0x23,0x35,0x33,0x35,0x23,0x35,0x33,0x15,0x33,0x35,0x33,0x01, -/*000c30*/ 0x2b,0x64,0x64,0x62,0x67,0x61,0x64,0x64,0x62,0x67,0x61,0x01,0xf5,0x67,0x61,0x64, -/*000c40*/ 0x64,0x62,0x66,0x62,0x64,0x64,0x00,0x01,0x00,0x01,0x00,0x65,0x01,0x2b,0x01,0x8f, -/*000c50*/ 0x00,0x0b,0x00,0x66,0x40,0x2c,0x01,0x0c,0x0c,0x40,0x0d,0x00,0x0b,0x00,0x08,0x01, -/*000c60*/ 0x06,0x05,0x08,0x03,0x0a,0x09,0x02,0x03,0x01,0x04,0x08,0x07,0x04,0x03,0x03,0x0b, -/*000c70*/ 0x07,0x06,0x03,0x0a,0x06,0x05,0x04,0x01,0x03,0x00,0x03,0x02,0x09,0x08,0x02,0x01, -/*000c80*/ 0x05,0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x3c,0x2f,0x3c,0x2f,0x17,0x3c,0xfd,0x17, -/*000c90*/ 0x3c,0x01,0x2f,0x17,0x3c,0xfd,0x17,0x3c,0x10,0xfd,0x3c,0x10,0xfd,0x3c,0x00,0x31, -/*000ca0*/ 0x30,0x01,0x49,0x68,0xb9,0x00,0x05,0x00,0x0c,0x49,0x68,0x61,0xb0,0x40,0x52,0x58, -/*000cb0*/ 0x38,0x11,0x37,0xb9,0x00,0x0c,0xff,0xc0,0x38,0x59,0x25,0x23,0x15,0x23,0x35,0x23, -/*000cc0*/ 0x35,0x33,0x35,0x33,0x15,0x33,0x01,0x2b,0x65,0x61,0x64,0x64,0x62,0x64,0xc9,0x64, -/*000cd0*/ 0x65,0x61,0x64,0x65,0x00,0x01,0x00,0x01,0xff,0x9d,0x00,0xc7,0x00,0x63,0x00,0x07, -/*000ce0*/ 0x00,0x53,0x40,0x1e,0x01,0x08,0x08,0x40,0x09,0x00,0x02,0x01,0x04,0x04,0x03,0x06, -/*000cf0*/ 0x05,0x04,0x07,0x00,0x05,0x04,0x06,0x02,0x07,0x06,0x03,0x02,0x01,0x00,0x01,0x01, -/*000d00*/ 0x03,0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x3c,0x2f,0x3c,0x2f,0x3c,0x10,0xfd,0x3c, -/*000d10*/ 0x01,0x2f,0x3c,0xfd,0x3c,0x2f,0x3c,0xfd,0x3c,0x00,0x31,0x30,0x01,0x49,0x68,0xb9, -/*000d20*/ 0x00,0x03,0x00,0x08,0x49,0x68,0x61,0xb0,0x40,0x52,0x58,0x38,0x11,0x37,0xb9,0x00, -/*000d30*/ 0x08,0xff,0xc0,0x38,0x59,0x37,0x23,0x15,0x23,0x35,0x33,0x35,0x33,0xc7,0x65,0x61, -/*000d40*/ 0x64,0x62,0x01,0x64,0x62,0x64,0x00,0x01,0x00,0x01,0x00,0xc9,0x01,0x2b,0x01,0x2b, -/*000d50*/ 0x00,0x03,0x00,0x3d,0x40,0x11,0x01,0x04,0x04,0x40,0x05,0x00,0x03,0x02,0x01,0x00, -/*000d60*/ 0x03,0x02,0x01,0x00,0x01,0x01,0x46,0x76,0x2f,0x37,0x18,0x00,0x2f,0x3c,0x2f,0x3c, -/*000d70*/ 0x01,0x2e,0x2e,0x2e,0x2e,0x00,0x31,0x30,0x01,0x49,0x68,0xb9,0x00,0x01,0x00,0x04, -/*000d80*/ 0x49,0x68,0x61,0xb0,0x40,0x52,0x58,0x38,0x11,0x37,0xb9,0x00,0x04,0xff,0xc0,0x38, -/*000d90*/ 0x59,0x25,0x21,0x35,0x21,0x01,0x2b,0xfe,0xd6,0x01,0x2a,0xc9,0x62,0x00,0x00,0x01, -/*000da0*/ 0x00,0x01,0x00,0x01,0x00,0x63,0x00,0x63,0x00,0x03,0x00,0x3f,0x40,0x13,0x01,0x04, -/*000db0*/ 0x04,0x40,0x05,0x00,0x03,0x00,0x04,0x02,0x01,0x03,0x02,0x01,0x00,0x01,0x01,0x01, -/*000dc0*/ 0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x3c,0x2f,0x3c,0x01,0x2f,0x3c,0xfd,0x3c,0x00, -/*000dd0*/ 0x31,0x30,0x01,0x49,0x68,0xb9,0x00,0x01,0x00,0x04,0x49,0x68,0x61,0xb0,0x40,0x52, -/*000de0*/ 0x58,0x38,0x11,0x37,0xb9,0x00,0x04,0xff,0xc0,0x38,0x59,0x37,0x23,0x35,0x33,0x63, -/*000df0*/ 0x62,0x62,0x01,0x62,0x00,0x01,0x00,0x01,0x00,0x01,0x01,0x2b,0x02,0x57,0x00,0x0b, -/*000e00*/ 0x00,0x69,0x40,0x2c,0x01,0x0c,0x0c,0x40,0x0d,0x00,0x04,0x03,0x04,0x06,0x05,0x08, -/*000e10*/ 0x07,0x04,0x02,0x01,0x0a,0x09,0x04,0x0b,0x00,0x01,0x00,0x07,0x0a,0x07,0x03,0x02, -/*000e20*/ 0x03,0x06,0x07,0x04,0x0b,0x0a,0x03,0x09,0x08,0x02,0x05,0x04,0x01,0x01,0x05,0x46, -/*000e30*/ 0x76,0x2f,0x37,0x18,0x00,0x3f,0x3c,0x3f,0x3c,0x3f,0x3c,0x10,0xfd,0x17,0x3c,0x10, -/*000e40*/ 0xfd,0x3c,0x01,0x2f,0x3c,0xfd,0x3c,0x2f,0x3c,0xfd,0x3c,0x2f,0x3c,0xfd,0x3c,0x00, -/*000e50*/ 0x31,0x30,0x01,0x49,0x68,0xb9,0x00,0x05,0x00,0x0c,0x49,0x68,0x61,0xb0,0x40,0x52, -/*000e60*/ 0x58,0x38,0x11,0x37,0xb9,0x00,0x0c,0xff,0xc0,0x38,0x59,0x01,0x23,0x15,0x23,0x15, -/*000e70*/ 0x23,0x35,0x33,0x35,0x33,0x35,0x33,0x01,0x2b,0x65,0x64,0x61,0x65,0x63,0x62,0x01, -/*000e80*/ 0x91,0xc8,0xc8,0xc6,0xc8,0xc8,0x00,0x03,0x00,0x01,0x00,0x01,0x01,0x8f,0x02,0x57, -/*000e90*/ 0x00,0x0b,0x00,0x11,0x00,0x17,0x00,0x95,0x40,0x4d,0x01,0x18,0x18,0x40,0x19,0x00, -/*000ea0*/ 0x15,0x14,0x05,0x05,0x11,0x10,0x05,0x00,0x17,0x16,0x0f,0x0e,0x08,0x07,0x04,0x07, -/*000eb0*/ 0x03,0x04,0x06,0x05,0x13,0x12,0x0d,0x0c,0x0a,0x02,0x01,0x07,0x09,0x04,0x0b,0x00, -/*000ec0*/ 0x17,0x12,0x05,0x04,0x01,0x05,0x00,0x06,0x02,0x0e,0x0d,0x0b,0x0a,0x07,0x05,0x06, -/*000ed0*/ 0x06,0x08,0x11,0x0c,0x06,0x13,0x14,0x13,0x10,0x03,0x0f,0x06,0x16,0x15,0x09,0x08, -/*000ee0*/ 0x03,0x03,0x02,0x01,0x01,0x05,0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x3c,0x3f,0x3c, -/*000ef0*/ 0x2f,0x3c,0xfd,0x17,0x3c,0x10,0xfd,0x3c,0x10,0xfd,0x17,0x3c,0x10,0xfd,0x17,0x3c, -/*000f00*/ 0x01,0x2f,0x3c,0xfd,0x17,0x3c,0x2f,0x3c,0xfd,0x17,0x3c,0x10,0xfd,0x3c,0x10,0xfd, -/*000f10*/ 0x3c,0x00,0x31,0x30,0x01,0x49,0x68,0xb9,0x00,0x05,0x00,0x18,0x49,0x68,0x61,0xb0, -/*000f20*/ 0x40,0x52,0x58,0x38,0x11,0x37,0xb9,0x00,0x18,0xff,0xc0,0x38,0x59,0x25,0x23,0x15, -/*000f30*/ 0x23,0x35,0x23,0x11,0x33,0x35,0x33,0x15,0x33,0x07,0x35,0x23,0x15,0x33,0x35,0x13, -/*000f40*/ 0x35,0x23,0x15,0x23,0x15,0x01,0x8f,0x65,0xc5,0x64,0x64,0xc6,0x64,0x64,0xc6,0x61, -/*000f50*/ 0x65,0x62,0x64,0x65,0x64,0x65,0x01,0x8d,0x64,0x65,0x61,0x62,0xc6,0x64,0xfe,0xd4, -/*000f60*/ 0xc6,0x64,0x62,0x00,0x00,0x01,0x00,0x65,0x00,0x01,0x01,0x2b,0x02,0x57,0x00,0x07, -/*000f70*/ 0x00,0x54,0x40,0x20,0x01,0x08,0x08,0x40,0x09,0x00,0x04,0x03,0x05,0x00,0x06,0x05, -/*000f80*/ 0x02,0x03,0x01,0x04,0x07,0x00,0x03,0x02,0x06,0x05,0x04,0x07,0x06,0x03,0x01,0x00, -/*000f90*/ 0x01,0x01,0x03,0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x3c,0x3f,0x3c,0x2f,0x3c,0xfd, -/*000fa0*/ 0x3c,0x01,0x2f,0x3c,0xfd,0x17,0x3c,0x10,0xfd,0x3c,0x00,0x31,0x30,0x01,0x49,0x68, -/*000fb0*/ 0xb9,0x00,0x03,0x00,0x08,0x49,0x68,0x61,0xb0,0x40,0x52,0x58,0x38,0x11,0x37,0xb9, -/*000fc0*/ 0x00,0x08,0xff,0xc0,0x38,0x59,0x25,0x23,0x11,0x23,0x35,0x33,0x35,0x33,0x01,0x2b, -/*000fd0*/ 0x62,0x64,0x64,0x62,0x01,0x01,0x91,0x61,0x64,0x00,0x00,0x01,0x00,0x01,0x00,0x01, -/*000fe0*/ 0x01,0x8f,0x02,0x57,0x00,0x19,0x00,0xa4,0x40,0x53,0x01,0x1a,0x1a,0x40,0x1b,0x00, -/*000ff0*/ 0x12,0x11,0x06,0x03,0x05,0x04,0x14,0x13,0x0a,0x03,0x09,0x04,0x03,0x04,0x16,0x15, -/*001000*/ 0x0c,0x03,0x0b,0x0e,0x0d,0x04,0x02,0x01,0x18,0x17,0x10,0x03,0x0f,0x04,0x19,0x08, -/*001010*/ 0x07,0x03,0x00,0x13,0x12,0x01,0x03,0x00,0x06,0x19,0x18,0x0d,0x03,0x02,0x03,0x0c, -/*001020*/ 0x06,0x0b,0x0a,0x05,0x03,0x04,0x07,0x06,0x06,0x08,0x15,0x14,0x11,0x03,0x10,0x06, -/*001030*/ 0x16,0x17,0x16,0x03,0x0f,0x0e,0x02,0x09,0x08,0x01,0x01,0x09,0x46,0x76,0x2f,0x37, -/*001040*/ 0x18,0x00,0x3f,0x3c,0x3f,0x3c,0x3f,0x3c,0x10,0xfd,0x17,0x3c,0x10,0xfd,0x3c,0x2f, -/*001050*/ 0x17,0x3c,0xfd,0x17,0x3c,0x2f,0x3c,0xfd,0x17,0x3c,0x01,0x2f,0x17,0x3c,0xfd,0x17, -/*001060*/ 0x3c,0x2f,0x3c,0xfd,0x3c,0x2f,0x17,0x3c,0xfd,0x3c,0x2f,0x17,0x3c,0xfd,0x17,0x3c, -/*001070*/ 0x00,0x31,0x30,0x01,0x49,0x68,0xb9,0x00,0x09,0x00,0x1a,0x49,0x68,0x61,0xb0,0x40, -/*001080*/ 0x52,0x58,0x38,0x11,0x37,0xb9,0x00,0x1a,0xff,0xc0,0x38,0x59,0x01,0x23,0x15,0x23, -/*001090*/ 0x15,0x23,0x15,0x21,0x15,0x21,0x35,0x33,0x35,0x33,0x35,0x33,0x35,0x23,0x15,0x23, -/*0010a0*/ 0x35,0x33,0x35,0x33,0x15,0x33,0x01,0x8f,0x65,0x64,0x63,0x01,0x2c,0xfe,0x72,0x65, -/*0010b0*/ 0x64,0x63,0xcb,0x61,0x64,0xc6,0x64,0x01,0x91,0x64,0x64,0x67,0x61,0xc6,0x64,0x64, -/*0010c0*/ 0x66,0x64,0x62,0x64,0x65,0x00,0x00,0x01,0x00,0x01,0x00,0x01,0x01,0x8f,0x02,0x57, -/*0010d0*/ 0x00,0x1b,0x00,0xa4,0x40,0x57,0x01,0x1c,0x1c,0x40,0x1d,0x00,0x14,0x13,0x10,0x0f, -/*0010e0*/ 0x08,0x04,0x03,0x07,0x07,0x04,0x12,0x11,0x06,0x03,0x05,0x1b,0x18,0x17,0x03,0x00, -/*0010f0*/ 0x04,0x09,0x0c,0x0b,0x04,0x1a,0x19,0x16,0x0e,0x0d,0x0a,0x09,0x02,0x01,0x09,0x15, -/*001100*/ 0x1b,0x1a,0x07,0x00,0x09,0x08,0x06,0x02,0x07,0x06,0x06,0x05,0x01,0x00,0x03,0x04, -/*001110*/ 0x0b,0x0a,0x06,0x0c,0x19,0x18,0x11,0x03,0x10,0x06,0x17,0x16,0x13,0x0f,0x0e,0x05, -/*001120*/ 0x12,0x15,0x14,0x03,0x0d,0x0c,0x02,0x03,0x02,0x01,0x01,0x05,0x46,0x76,0x2f,0x37, -/*001130*/ 0x18,0x00,0x3f,0x3c,0x3f,0x3c,0x3f,0x3c,0x2f,0x17,0x3c,0xfd,0x17,0x3c,0x10,0xfd, -/*001140*/ 0x3c,0x2f,0x17,0x3c,0xfd,0x3c,0x10,0xfd,0x3c,0x10,0xfd,0x3c,0x01,0x2f,0x17,0x3c, -/*001150*/ 0xfd,0x3c,0x10,0xfd,0x17,0x3c,0x2f,0x17,0x3c,0xfd,0x17,0x3c,0x00,0x31,0x30,0x01, -/*001160*/ 0x49,0x68,0xb9,0x00,0x05,0x00,0x1c,0x49,0x68,0x61,0xb0,0x40,0x52,0x58,0x38,0x11, -/*001170*/ 0x37,0xb9,0x00,0x1c,0xff,0xc0,0x38,0x59,0x25,0x23,0x15,0x23,0x35,0x23,0x35,0x33, -/*001180*/ 0x15,0x33,0x35,0x23,0x35,0x33,0x35,0x23,0x15,0x23,0x35,0x33,0x35,0x33,0x15,0x33, -/*001190*/ 0x15,0x23,0x15,0x33,0x01,0x8f,0x65,0xc5,0x64,0x62,0xca,0x64,0x64,0xcb,0x61,0x64, -/*0011a0*/ 0xc6,0x64,0x64,0x64,0x65,0x64,0x65,0x61,0x64,0xcb,0x61,0x66,0x64,0x62,0x64,0x65, -/*0011b0*/ 0x61,0x67,0x00,0x01,0x00,0x01,0x00,0x01,0x01,0x8f,0x02,0x57,0x00,0x0d,0x00,0x6a, -/*0011c0*/ 0x40,0x2f,0x01,0x0e,0x0e,0x40,0x0f,0x00,0x0d,0x00,0x0a,0x09,0x04,0x03,0x03,0x04, -/*0011d0*/ 0x0c,0x0b,0x02,0x03,0x01,0x08,0x07,0x04,0x06,0x05,0x0d,0x09,0x08,0x03,0x0c,0x06, -/*0011e0*/ 0x05,0x04,0x01,0x03,0x00,0x0b,0x0a,0x07,0x03,0x06,0x03,0x03,0x02,0x01,0x01,0x05, -/*0011f0*/ 0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x3c,0x3f,0x17,0x3c,0x2f,0x17,0x3c,0xfd,0x17, -/*001200*/ 0x3c,0x01,0x2f,0x3c,0xfd,0x3c,0x2f,0x17,0x3c,0xfd,0x17,0x3c,0x2e,0x2e,0x00,0x31, -/*001210*/ 0x30,0x01,0x49,0x68,0xb9,0x00,0x05,0x00,0x0e,0x49,0x68,0x61,0xb0,0x40,0x52,0x58, -/*001220*/ 0x38,0x11,0x37,0xb9,0x00,0x0e,0xff,0xc0,0x38,0x59,0x25,0x23,0x15,0x23,0x35,0x23, -/*001230*/ 0x11,0x33,0x11,0x33,0x11,0x33,0x11,0x33,0x01,0x8f,0x65,0x61,0xc8,0x62,0x67,0x61, -/*001240*/ 0x64,0xc9,0xc8,0xc8,0x01,0x8e,0xfe,0xd4,0x01,0x2c,0xfe,0xd3,0x00,0x01,0x00,0x01, -/*001250*/ 0x00,0x01,0x01,0x8f,0x02,0x57,0x00,0x0f,0x00,0x7b,0x40,0x38,0x01,0x10,0x10,0x40, -/*001260*/ 0x11,0x00,0x02,0x01,0x0e,0x0d,0x06,0x03,0x05,0x04,0x0f,0x0a,0x09,0x03,0x00,0x0c, -/*001270*/ 0x0b,0x04,0x08,0x07,0x04,0x03,0x03,0x0f,0x0e,0x07,0x00,0x05,0x01,0x00,0x03,0x04, -/*001280*/ 0x06,0x02,0x07,0x06,0x06,0x0d,0x0c,0x0b,0x0a,0x06,0x08,0x09,0x08,0x03,0x03,0x02, -/*001290*/ 0x01,0x01,0x03,0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x3c,0x3f,0x3c,0x10,0xfd,0x3c, -/*0012a0*/ 0x2f,0x3c,0xfd,0x3c,0x10,0xfd,0x17,0x3c,0x10,0xfd,0x3c,0x01,0x2f,0x17,0x3c,0xfd, -/*0012b0*/ 0x3c,0x2f,0x17,0x3c,0xfd,0x17,0x3c,0x2e,0x2e,0x00,0x31,0x30,0x01,0x49,0x68,0xb9, -/*0012c0*/ 0x00,0x03,0x00,0x10,0x49,0x68,0x61,0xb0,0x40,0x52,0x58,0x38,0x11,0x37,0xb9,0x00, -/*0012d0*/ 0x10,0xff,0xc0,0x38,0x59,0x25,0x23,0x15,0x21,0x35,0x21,0x35,0x21,0x11,0x21,0x15, -/*0012e0*/ 0x21,0x15,0x33,0x15,0x33,0x01,0x8f,0x65,0xfe,0xd7,0x01,0x2c,0xfe,0xd4,0x01,0x8e, -/*0012f0*/ 0xfe,0xd4,0xc8,0x64,0x65,0x64,0x62,0xca,0x01,0x2a,0x62,0x67,0x64,0x00,0x00,0x03, -/*001300*/ 0x00,0x01,0x00,0x01,0x01,0x8f,0x02,0x57,0x00,0x0f,0x00,0x13,0x00,0x17,0x00,0x8a, -/*001310*/ 0x40,0x49,0x01,0x18,0x18,0x40,0x19,0x00,0x17,0x16,0x13,0x12,0x08,0x07,0x04,0x07, -/*001320*/ 0x03,0x04,0x06,0x05,0x15,0x14,0x11,0x10,0x0e,0x0d,0x0a,0x02,0x01,0x09,0x09,0x04, -/*001330*/ 0x0f,0x0c,0x0b,0x03,0x00,0x17,0x14,0x05,0x04,0x01,0x05,0x00,0x06,0x02,0x12,0x11, -/*001340*/ 0x0b,0x0a,0x07,0x05,0x06,0x06,0x08,0x16,0x0f,0x0e,0x03,0x15,0x06,0x13,0x10,0x0d, -/*001350*/ 0x03,0x0c,0x09,0x08,0x03,0x03,0x02,0x01,0x01,0x05,0x46,0x76,0x2f,0x37,0x18,0x00, -/*001360*/ 0x3f,0x3c,0x3f,0x3c,0x2f,0x17,0x3c,0xfd,0x17,0x3c,0x10,0xfd,0x17,0x3c,0x10,0xfd, -/*001370*/ 0x17,0x3c,0x01,0x2f,0x17,0x3c,0xfd,0x17,0x3c,0x2f,0x3c,0xfd,0x17,0x3c,0x00,0x31, -/*001380*/ 0x30,0x01,0x49,0x68,0xb9,0x00,0x05,0x00,0x18,0x49,0x68,0x61,0xb0,0x40,0x52,0x58, -/*001390*/ 0x38,0x11,0x37,0xb9,0x00,0x18,0xff,0xc0,0x38,0x59,0x25,0x23,0x15,0x23,0x35,0x23, -/*0013a0*/ 0x11,0x33,0x35,0x33,0x15,0x33,0x15,0x23,0x15,0x33,0x27,0x35,0x23,0x15,0x13,0x35, -/*0013b0*/ 0x23,0x15,0x01,0x8f,0x65,0xc5,0x64,0x64,0xc6,0x64,0x64,0x64,0x64,0xc6,0xc6,0xc6, -/*0013c0*/ 0x65,0x64,0x65,0x01,0x8d,0x64,0x65,0x61,0x67,0x67,0x62,0x62,0xfe,0xd4,0xc6,0xc6, -/*0013d0*/ 0x00,0x01,0x00,0x01,0x00,0x01,0x01,0x8f,0x02,0x57,0x00,0x0f,0x00,0x7d,0x40,0x38, -/*0013e0*/ 0x01,0x10,0x10,0x40,0x11,0x00,0x04,0x03,0x04,0x06,0x05,0x08,0x07,0x04,0x02,0x01, -/*0013f0*/ 0x0a,0x09,0x04,0x0f,0x00,0x0c,0x0b,0x04,0x0e,0x0d,0x0d,0x0c,0x01,0x03,0x00,0x07, -/*001400*/ 0x0e,0x07,0x03,0x02,0x03,0x06,0x07,0x04,0x0b,0x0a,0x06,0x0e,0x0f,0x0e,0x03,0x09, -/*001410*/ 0x08,0x02,0x05,0x04,0x01,0x01,0x0d,0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x3c,0x3f, -/*001420*/ 0x3c,0x3f,0x3c,0x10,0xfd,0x3c,0x10,0xfd,0x17,0x3c,0x10,0xfd,0x17,0x3c,0x01,0x2f, -/*001430*/ 0x3c,0xfd,0x3c,0x2f,0x3c,0xfd,0x3c,0x2f,0x3c,0xfd,0x3c,0x2f,0x3c,0xfd,0x3c,0x00, -/*001440*/ 0x31,0x30,0x01,0x49,0x68,0xb9,0x00,0x0d,0x00,0x10,0x49,0x68,0x61,0xb0,0x40,0x52, -/*001450*/ 0x58,0x38,0x11,0x37,0xb9,0x00,0x10,0xff,0xc0,0x38,0x59,0x01,0x23,0x15,0x23,0x15, -/*001460*/ 0x23,0x35,0x33,0x35,0x33,0x35,0x23,0x15,0x23,0x35,0x21,0x01,0x8f,0x65,0x64,0x61, -/*001470*/ 0x65,0x63,0xcb,0x61,0x01,0x8e,0x01,0x91,0xc8,0xc8,0xc6,0xc8,0x66,0x64,0xc6,0x00, -/*001480*/ 0x00,0x03,0x00,0x01,0x00,0x01,0x01,0x8f,0x02,0x57,0x00,0x13,0x00,0x17,0x00,0x1b, -/*001490*/ 0x00,0x94,0x40,0x52,0x01,0x1c,0x1c,0x40,0x1d,0x00,0x1b,0x1a,0x17,0x16,0x0c,0x0b, -/*0014a0*/ 0x08,0x07,0x04,0x09,0x03,0x04,0x0a,0x09,0x06,0x03,0x05,0x19,0x18,0x15,0x14,0x12, -/*0014b0*/ 0x11,0x0e,0x02,0x01,0x09,0x0d,0x04,0x13,0x10,0x0f,0x03,0x00,0x1b,0x18,0x05,0x04, -/*0014c0*/ 0x01,0x05,0x00,0x06,0x02,0x16,0x15,0x0f,0x0e,0x0b,0x05,0x0a,0x06,0x0c,0x1a,0x19, -/*0014d0*/ 0x13,0x12,0x07,0x05,0x06,0x06,0x17,0x14,0x11,0x09,0x08,0x05,0x10,0x0d,0x0c,0x03, -/*0014e0*/ 0x03,0x02,0x01,0x01,0x05,0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x3c,0x3f,0x3c,0x2f, -/*0014f0*/ 0x17,0x3c,0xfd,0x17,0x3c,0x10,0xfd,0x17,0x3c,0x10,0xfd,0x17,0x3c,0x01,0x2f,0x17, -/*001500*/ 0x3c,0xfd,0x17,0x3c,0x2f,0x17,0x3c,0xfd,0x17,0x3c,0x00,0x31,0x30,0x01,0x49,0x68, -/*001510*/ 0xb9,0x00,0x05,0x00,0x1c,0x49,0x68,0x61,0xb0,0x40,0x52,0x58,0x38,0x11,0x37,0xb9, -/*001520*/ 0x00,0x1c,0xff,0xc0,0x38,0x59,0x25,0x23,0x15,0x23,0x35,0x23,0x35,0x33,0x35,0x23, -/*001530*/ 0x35,0x33,0x35,0x33,0x15,0x33,0x15,0x23,0x15,0x33,0x27,0x35,0x23,0x15,0x13,0x35, -/*001540*/ 0x23,0x15,0x01,0x8f,0x65,0xc5,0x64,0x64,0x64,0x64,0xc6,0x64,0x64,0x64,0x64,0xc6, -/*001550*/ 0xc6,0xc6,0x65,0x64,0x65,0xc5,0x67,0x61,0x64,0x65,0x61,0x67,0x67,0x62,0x62,0xfe, -/*001560*/ 0xd4,0xc6,0xc6,0x00,0x00,0x03,0x00,0x01,0x00,0x01,0x01,0x8f,0x02,0x57,0x00,0x0f, -/*001570*/ 0x00,0x13,0x00,0x17,0x00,0x8a,0x40,0x49,0x01,0x18,0x18,0x40,0x19,0x00,0x17,0x16, -/*001580*/ 0x13,0x12,0x0c,0x0b,0x08,0x07,0x04,0x09,0x03,0x04,0x0a,0x09,0x06,0x03,0x05,0x15, -/*001590*/ 0x14,0x11,0x10,0x0e,0x02,0x01,0x07,0x0d,0x04,0x0f,0x00,0x17,0x14,0x05,0x01,0x00, -/*0015a0*/ 0x05,0x04,0x06,0x06,0x12,0x11,0x0f,0x0e,0x0b,0x05,0x0a,0x06,0x0c,0x13,0x09,0x08, -/*0015b0*/ 0x03,0x10,0x06,0x16,0x15,0x07,0x03,0x06,0x0d,0x0c,0x03,0x03,0x02,0x01,0x01,0x05, -/*0015c0*/ 0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x3c,0x3f,0x3c,0x2f,0x17,0x3c,0xfd,0x17,0x3c, -/*0015d0*/ 0x10,0xfd,0x17,0x3c,0x10,0xfd,0x17,0x3c,0x01,0x2f,0x3c,0xfd,0x17,0x3c,0x2f,0x17, -/*0015e0*/ 0x3c,0xfd,0x17,0x3c,0x00,0x31,0x30,0x01,0x49,0x68,0xb9,0x00,0x05,0x00,0x18,0x49, -/*0015f0*/ 0x68,0x61,0xb0,0x40,0x52,0x58,0x38,0x11,0x37,0xb9,0x00,0x18,0xff,0xc0,0x38,0x59, -/*001600*/ 0x25,0x23,0x15,0x23,0x35,0x23,0x35,0x33,0x35,0x23,0x35,0x33,0x35,0x33,0x15,0x33, -/*001610*/ 0x07,0x35,0x23,0x15,0x17,0x35,0x23,0x15,0x01,0x8f,0x65,0xc5,0x64,0x64,0x64,0x64, -/*001620*/ 0xc6,0x64,0x64,0xc6,0xc6,0xc6,0x65,0x64,0x65,0x61,0x67,0xc5,0x64,0x65,0xc5,0xc6, -/*001630*/ 0xc6,0xc8,0x62,0x62,0x00,0x02,0x00,0x01,0x00,0x65,0x00,0x63,0x01,0xf3,0x00,0x03, -/*001640*/ 0x00,0x07,0x00,0x54,0x40,0x20,0x01,0x08,0x08,0x40,0x09,0x00,0x07,0x04,0x03,0x03, -/*001650*/ 0x00,0x04,0x06,0x05,0x02,0x03,0x01,0x01,0x00,0x06,0x02,0x07,0x06,0x06,0x04,0x03, -/*001660*/ 0x02,0x05,0x04,0x01,0x01,0x46,0x76,0x2f,0x37,0x18,0x00,0x2f,0x3c,0x2f,0x3c,0x10, -/*001670*/ 0xfd,0x3c,0x10,0xfd,0x3c,0x01,0x2f,0x17,0x3c,0xfd,0x17,0x3c,0x00,0x31,0x30,0x01, -/*001680*/ 0x49,0x68,0xb9,0x00,0x01,0x00,0x08,0x49,0x68,0x61,0xb0,0x40,0x52,0x58,0x38,0x11, -/*001690*/ 0x37,0xb9,0x00,0x08,0xff,0xc0,0x38,0x59,0x13,0x23,0x35,0x33,0x11,0x23,0x35,0x33, -/*0016a0*/ 0x63,0x62,0x62,0x62,0x62,0x01,0x91,0x62,0xfe,0x72,0x62,0x00,0x00,0x02,0x00,0x01, -/*0016b0*/ 0x00,0x01,0x00,0x63,0x01,0xf3,0x00,0x03,0x00,0x07,0x00,0x55,0x40,0x21,0x01,0x08, -/*0016c0*/ 0x08,0x40,0x09,0x00,0x07,0x04,0x03,0x03,0x00,0x04,0x06,0x05,0x02,0x03,0x01,0x07, -/*0016d0*/ 0x06,0x07,0x04,0x01,0x00,0x06,0x02,0x03,0x02,0x05,0x04,0x01,0x01,0x01,0x46,0x76, -/*0016e0*/ 0x2f,0x37,0x18,0x00,0x3f,0x3c,0x2f,0x3c,0x10,0xfd,0x3c,0x10,0xfd,0x3c,0x01,0x2f, -/*0016f0*/ 0x17,0x3c,0xfd,0x17,0x3c,0x00,0x31,0x30,0x01,0x49,0x68,0xb9,0x00,0x01,0x00,0x08, -/*001700*/ 0x49,0x68,0x61,0xb0,0x40,0x52,0x58,0x38,0x11,0x37,0xb9,0x00,0x08,0xff,0xc0,0x38, -/*001710*/ 0x59,0x13,0x23,0x35,0x33,0x11,0x23,0x35,0x33,0x63,0x62,0x62,0x62,0x62,0x01,0x91, -/*001720*/ 0x62,0xfe,0x0e,0xc6,0x00,0x01,0x00,0x01,0x00,0x01,0x01,0x2b,0x01,0xf3,0x00,0x13, -/*001730*/ 0x00,0x8a,0x40,0x42,0x01,0x14,0x14,0x40,0x15,0x00,0x10,0x0f,0x13,0x08,0x07,0x03, -/*001740*/ 0x00,0x04,0x09,0x12,0x11,0x0a,0x09,0x06,0x02,0x01,0x07,0x05,0x04,0x0b,0x0c,0x0b, -/*001750*/ 0x04,0x03,0x03,0x04,0x0e,0x0d,0x01,0x00,0x06,0x12,0x07,0x06,0x06,0x08,0x05,0x04, -/*001760*/ 0x06,0x0b,0x0a,0x0d,0x0c,0x06,0x0f,0x03,0x02,0x03,0x0e,0x13,0x12,0x11,0x10,0x02, -/*001770*/ 0x09,0x08,0x01,0x01,0x0d,0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x3c,0x3f,0x3c,0x2f, -/*001780*/ 0x3c,0x2f,0x17,0x3c,0xfd,0x3c,0x2f,0x3c,0xfd,0x3c,0x10,0xfd,0x3c,0x10,0xfd,0x3c, -/*001790*/ 0x01,0x2f,0x3c,0xfd,0x17,0x3c,0x10,0xfd,0x17,0x3c,0x10,0xfd,0x17,0x3c,0x2e,0x2e, -/*0017a0*/ 0x00,0x31,0x30,0x01,0x49,0x68,0xb9,0x00,0x0d,0x00,0x14,0x49,0x68,0x61,0xb0,0x40, -/*0017b0*/ 0x52,0x58,0x38,0x11,0x37,0xb9,0x00,0x14,0xff,0xc0,0x38,0x59,0x01,0x23,0x15,0x23, -/*0017c0*/ 0x15,0x33,0x15,0x33,0x15,0x23,0x35,0x23,0x35,0x23,0x35,0x33,0x35,0x33,0x35,0x33, -/*0017d0*/ 0x01,0x2b,0x65,0x63,0x64,0x64,0x62,0x64,0x64,0x65,0x63,0x62,0x01,0x91,0x64,0x67, -/*0017e0*/ 0x64,0x61,0x65,0x64,0x61,0x64,0x64,0x00,0x00,0x02,0x00,0x01,0x00,0x65,0x01,0x2b, -/*0017f0*/ 0x01,0x8f,0x00,0x03,0x00,0x07,0x00,0x54,0x40,0x1e,0x01,0x08,0x08,0x40,0x09,0x00, -/*001800*/ 0x07,0x06,0x05,0x04,0x03,0x02,0x01,0x00,0x01,0x00,0x06,0x02,0x07,0x06,0x06,0x04, -/*001810*/ 0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x3c,0x2f, -/*001820*/ 0x3c,0x10,0xfd,0x3c,0x10,0xfd,0x3c,0x01,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e, -/*001830*/ 0x00,0x31,0x30,0x01,0x49,0x68,0xb9,0x00,0x01,0x00,0x08,0x49,0x68,0x61,0xb0,0x40, -/*001840*/ 0x52,0x58,0x38,0x11,0x37,0xb9,0x00,0x08,0xff,0xc0,0x38,0x59,0x01,0x21,0x35,0x21, -/*001850*/ 0x11,0x21,0x35,0x21,0x01,0x2b,0xfe,0xd6,0x01,0x2a,0xfe,0xd6,0x01,0x2a,0x01,0x2d, -/*001860*/ 0x62,0xfe,0xd6,0x62,0x00,0x01,0x00,0x01,0x00,0x01,0x01,0x2b,0x01,0xf3,0x00,0x13, -/*001870*/ 0x00,0x8e,0x40,0x44,0x01,0x14,0x14,0x40,0x15,0x00,0x10,0x0f,0x04,0x03,0x03,0x04, -/*001880*/ 0x0e,0x0d,0x06,0x03,0x05,0x0c,0x0b,0x08,0x03,0x07,0x04,0x02,0x01,0x12,0x11,0x0a, -/*001890*/ 0x03,0x09,0x04,0x13,0x00,0x13,0x12,0x06,0x00,0x09,0x01,0x00,0x03,0x08,0x06,0x02, -/*0018a0*/ 0x07,0x03,0x02,0x03,0x06,0x06,0x04,0x0b,0x0a,0x06,0x11,0x10,0x0d,0x0c,0x06,0x0e, -/*0018b0*/ 0x0f,0x0e,0x05,0x04,0x01,0x01,0x05,0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x3c,0x2f, -/*0018c0*/ 0x3c,0x10,0xfd,0x3c,0x2f,0x3c,0xfd,0x3c,0x10,0xfd,0x17,0x3c,0x10,0xfd,0x17,0x3c, -/*0018d0*/ 0x10,0xfd,0x3c,0x01,0x2f,0x3c,0xfd,0x17,0x3c,0x2f,0x3c,0xfd,0x17,0x3c,0x2f,0x17, -/*0018e0*/ 0x3c,0xfd,0x17,0x3c,0x00,0x31,0x30,0x01,0x49,0x68,0xb9,0x00,0x05,0x00,0x14,0x49, -/*0018f0*/ 0x68,0x61,0xb0,0x40,0x52,0x58,0x38,0x11,0x37,0xb9,0x00,0x14,0xff,0xc0,0x38,0x59, -/*001900*/ 0x25,0x23,0x15,0x23,0x15,0x23,0x35,0x33,0x35,0x33,0x35,0x23,0x35,0x23,0x35,0x33, -/*001910*/ 0x15,0x33,0x15,0x33,0x01,0x2b,0x65,0x64,0x61,0x65,0x63,0x64,0x64,0x62,0x64,0x64, -/*001920*/ 0xc9,0x64,0x64,0x62,0x64,0x67,0x63,0x62,0x65,0x64,0x00,0x02,0x00,0x01,0x00,0x01, -/*001930*/ 0x01,0x8f,0x02,0x57,0x00,0x0f,0x00,0x13,0x00,0x86,0x40,0x40,0x01,0x14,0x14,0x40, -/*001940*/ 0x15,0x00,0x02,0x01,0x05,0x03,0x0e,0x0d,0x06,0x03,0x05,0x04,0x0f,0x00,0x08,0x07, -/*001950*/ 0x04,0x0a,0x09,0x13,0x10,0x04,0x12,0x11,0x0c,0x0b,0x04,0x05,0x03,0x05,0x01,0x00, -/*001960*/ 0x03,0x04,0x06,0x03,0x02,0x09,0x08,0x06,0x0f,0x0e,0x0b,0x07,0x06,0x05,0x0a,0x13, -/*001970*/ 0x12,0x06,0x10,0x11,0x10,0x01,0x0d,0x0c,0x03,0x01,0x09,0x46,0x76,0x2f,0x37,0x18, -/*001980*/ 0x00,0x3f,0x3c,0x3f,0x3c,0x10,0xfd,0x3c,0x2f,0x17,0x3c,0xfd,0x3c,0x2f,0x3c,0xfd, -/*001990*/ 0x17,0x3c,0x01,0x2f,0x17,0x3c,0xfd,0x3c,0x2f,0x3c,0xfd,0x3c,0x2f,0x3c,0xfd,0x17, -/*0019a0*/ 0x3c,0x10,0xfd,0x3c,0x00,0x31,0x30,0x01,0x49,0x68,0xb9,0x00,0x09,0x00,0x14,0x49, -/*0019b0*/ 0x68,0x61,0xb0,0x40,0x52,0x58,0x38,0x11,0x37,0xb9,0x00,0x14,0xff,0xc0,0x38,0x59, -/*0019c0*/ 0x01,0x23,0x15,0x23,0x35,0x33,0x35,0x23,0x15,0x23,0x35,0x33,0x35,0x33,0x15,0x33, -/*0019d0*/ 0x03,0x23,0x35,0x33,0x01,0x8f,0x65,0xc5,0xc8,0xcb,0x61,0x64,0xc6,0x64,0xc8,0x62, -/*0019e0*/ 0x62,0x01,0x2d,0x64,0x62,0xca,0x64,0x62,0x64,0x65,0xfe,0x0f,0x62,0x00,0x00,0x03, -/*0019f0*/ 0x00,0x01,0xff,0x9d,0x01,0xf3,0x01,0xf3,0x00,0x0b,0x00,0x0f,0x00,0x15,0x00,0x8a, -/*001a00*/ 0x40,0x42,0x01,0x16,0x16,0x40,0x17,0x00,0x14,0x13,0x12,0x11,0x13,0x12,0x08,0x07, -/*001a10*/ 0x04,0x05,0x03,0x04,0x06,0x05,0x11,0x10,0x0d,0x0c,0x0a,0x05,0x09,0x04,0x0b,0x00, -/*001a20*/ 0x0f,0x0e,0x04,0x15,0x02,0x01,0x03,0x14,0x0f,0x0c,0x06,0x00,0x0e,0x0d,0x06,0x15, -/*001a30*/ 0x10,0x09,0x08,0x03,0x02,0x0b,0x0a,0x07,0x03,0x06,0x02,0x05,0x04,0x01,0x03,0x00, -/*001a40*/ 0x01,0x01,0x05,0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x17,0x3c,0x3f,0x17,0x3c,0x2f, -/*001a50*/ 0x3c,0x2f,0x3c,0x2f,0x3c,0xfd,0x3c,0x10,0xfd,0x3c,0x01,0x2f,0x17,0x3c,0xfd,0x3c, -/*001a60*/ 0x2f,0x3c,0xfd,0x17,0x3c,0x2f,0x3c,0xfd,0x17,0x3c,0x00,0x2e,0x2e,0x2e,0x2e,0x31, -/*001a70*/ 0x30,0x01,0x49,0x68,0xb9,0x00,0x05,0x00,0x16,0x49,0x68,0x61,0xb0,0x40,0x52,0x58, -/*001a80*/ 0x38,0x11,0x37,0xb9,0x00,0x16,0xff,0xc0,0x38,0x59,0x25,0x21,0x15,0x23,0x35,0x23, -/*001a90*/ 0x11,0x33,0x35,0x21,0x15,0x33,0x03,0x35,0x23,0x15,0x37,0x35,0x21,0x11,0x33,0x11, -/*001aa0*/ 0x01,0xf3,0xfe,0xd3,0x61,0x64,0x64,0x01,0x2a,0x64,0x64,0x62,0x62,0xfe,0xd6,0x62, -/*001ab0*/ 0x01,0x64,0x65,0x01,0x8d,0x64,0x65,0xfe,0xd7,0x62,0x62,0xc8,0x62,0xfe,0x72,0x01, -/*001ac0*/ 0x2c,0x00,0x00,0x02,0x00,0x01,0x00,0x01,0x01,0x8f,0x02,0x57,0x00,0x09,0x00,0x0d, -/*001ad0*/ 0x00,0x6b,0x40,0x30,0x01,0x0e,0x0e,0x40,0x0f,0x00,0x0d,0x0c,0x08,0x04,0x03,0x05, -/*001ae0*/ 0x07,0x04,0x06,0x05,0x0b,0x02,0x01,0x03,0x0a,0x04,0x09,0x00,0x0d,0x0a,0x06,0x03, -/*001af0*/ 0x02,0x0c,0x0b,0x07,0x03,0x06,0x06,0x08,0x09,0x08,0x03,0x05,0x04,0x01,0x03,0x00, -/*001b00*/ 0x01,0x01,0x05,0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x17,0x3c,0x3f,0x3c,0x10,0xfd, -/*001b10*/ 0x17,0x3c,0x2f,0x3c,0xfd,0x3c,0x01,0x2f,0x3c,0xfd,0x17,0x3c,0x2f,0x3c,0xfd,0x17, -/*001b20*/ 0x3c,0x00,0x31,0x30,0x01,0x49,0x68,0xb9,0x00,0x05,0x00,0x0e,0x49,0x68,0x61,0xb0, -/*001b30*/ 0x40,0x52,0x58,0x38,0x11,0x37,0xb9,0x00,0x0e,0xff,0xc0,0x38,0x59,0x25,0x23,0x35, -/*001b40*/ 0x23,0x15,0x23,0x11,0x33,0x35,0x21,0x03,0x35,0x23,0x15,0x01,0x8f,0x62,0xca,0x62, -/*001b50*/ 0x64,0x01,0x2a,0x64,0xc6,0x01,0xc8,0xc8,0x01,0xf2,0x64,0xfe,0xd6,0xc6,0xc6,0x00, -/*001b60*/ 0x00,0x03,0x00,0x01,0x00,0x01,0x01,0x8f,0x02,0x57,0x00,0x0b,0x00,0x0f,0x00,0x13, -/*001b70*/ 0x00,0x82,0x40,0x41,0x01,0x14,0x14,0x40,0x15,0x00,0x13,0x12,0x0f,0x03,0x0e,0x04, -/*001b80*/ 0x04,0x03,0x11,0x10,0x0d,0x0c,0x0a,0x09,0x06,0x02,0x01,0x09,0x05,0x04,0x0b,0x08, -/*001b90*/ 0x07,0x03,0x00,0x13,0x10,0x01,0x03,0x00,0x06,0x02,0x0e,0x07,0x06,0x03,0x0d,0x06, -/*001ba0*/ 0x04,0x12,0x0b,0x0a,0x03,0x11,0x06,0x0f,0x0c,0x09,0x03,0x08,0x05,0x04,0x03,0x03, -/*001bb0*/ 0x02,0x01,0x01,0x03,0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x3c,0x3f,0x3c,0x2f,0x17, -/*001bc0*/ 0x3c,0xfd,0x17,0x3c,0x10,0xfd,0x17,0x3c,0x10,0xfd,0x17,0x3c,0x01,0x2f,0x17,0x3c, -/*001bd0*/ 0xfd,0x17,0x3c,0x2f,0x3c,0xfd,0x17,0x3c,0x00,0x31,0x30,0x01,0x49,0x68,0xb9,0x00, -/*001be0*/ 0x03,0x00,0x14,0x49,0x68,0x61,0xb0,0x40,0x52,0x58,0x38,0x11,0x37,0xb9,0x00,0x14, -/*001bf0*/ 0xff,0xc0,0x38,0x59,0x25,0x23,0x15,0x21,0x11,0x21,0x15,0x33,0x15,0x23,0x15,0x33, -/*001c00*/ 0x27,0x35,0x23,0x15,0x13,0x35,0x23,0x15,0x01,0x8f,0x65,0xfe,0xd7,0x01,0x2a,0x64, -/*001c10*/ 0x64,0x64,0x64,0xc6,0xc6,0xc6,0x65,0x64,0x02,0x56,0x65,0x61,0x67,0x67,0x62,0x62, -/*001c20*/ 0xfe,0xd4,0xc6,0xc6,0x00,0x01,0x00,0x01,0x00,0x01,0x01,0x8f,0x02,0x57,0x00,0x0b, -/*001c30*/ 0x00,0x64,0x40,0x2a,0x01,0x0c,0x0c,0x40,0x0d,0x00,0x07,0x06,0x0b,0x04,0x03,0x00, -/*001c40*/ 0x0a,0x09,0x06,0x05,0x02,0x05,0x01,0x04,0x08,0x07,0x09,0x08,0x01,0x03,0x00,0x06, -/*001c50*/ 0x0a,0x03,0x02,0x06,0x04,0x0b,0x0a,0x03,0x05,0x04,0x01,0x01,0x07,0x46,0x76,0x2f, -/*001c60*/ 0x37,0x18,0x00,0x3f,0x3c,0x3f,0x3c,0x10,0xfd,0x3c,0x10,0xfd,0x17,0x3c,0x01,0x2f, -/*001c70*/ 0x3c,0xfd,0x17,0x3c,0x2e,0x2e,0x2e,0x2e,0x00,0x2e,0x2e,0x31,0x30,0x01,0x49,0x68, -/*001c80*/ 0xb9,0x00,0x07,0x00,0x0c,0x49,0x68,0x61,0xb0,0x40,0x52,0x58,0x38,0x11,0x37,0xb9, -/*001c90*/ 0x00,0x0c,0xff,0xc0,0x38,0x59,0x01,0x21,0x11,0x21,0x15,0x21,0x35,0x23,0x11,0x33, -/*001ca0*/ 0x35,0x21,0x01,0x8f,0xfe,0xd4,0x01,0x2c,0xfe,0xd6,0x64,0x64,0x01,0x2a,0x01,0xf5, -/*001cb0*/ 0xfe,0x6e,0x62,0x65,0x01,0x8d,0x64,0x00,0x00,0x02,0x00,0x01,0x00,0x01,0x01,0x8f, -/*001cc0*/ 0x02,0x57,0x00,0x07,0x00,0x0b,0x00,0x65,0x40,0x2c,0x01,0x0c,0x0c,0x40,0x0d,0x00, -/*001cd0*/ 0x0b,0x0a,0x04,0x04,0x03,0x09,0x08,0x06,0x02,0x01,0x05,0x05,0x04,0x07,0x00,0x0b, -/*001ce0*/ 0x08,0x01,0x03,0x00,0x06,0x02,0x0a,0x07,0x06,0x03,0x09,0x06,0x04,0x05,0x04,0x03, -/*001cf0*/ 0x03,0x02,0x01,0x01,0x03,0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x3c,0x3f,0x3c,0x10, -/*001d00*/ 0xfd,0x17,0x3c,0x10,0xfd,0x17,0x3c,0x01,0x2f,0x3c,0xfd,0x17,0x3c,0x2f,0x3c,0xfd, -/*001d10*/ 0x3c,0x00,0x31,0x30,0x01,0x49,0x68,0xb9,0x00,0x03,0x00,0x0c,0x49,0x68,0x61,0xb0, -/*001d20*/ 0x40,0x52,0x58,0x38,0x11,0x37,0xb9,0x00,0x0c,0xff,0xc0,0x38,0x59,0x25,0x23,0x15, -/*001d30*/ 0x21,0x11,0x21,0x15,0x33,0x03,0x11,0x23,0x11,0x01,0x8f,0x65,0xfe,0xd7,0x01,0x2a, -/*001d40*/ 0x64,0x64,0xc6,0x65,0x64,0x02,0x56,0x65,0xfe,0x73,0x01,0x8e,0xfe,0x72,0x00,0x01, -/*001d50*/ 0x00,0x01,0x00,0x01,0x01,0x8f,0x02,0x57,0x00,0x0d,0x00,0x6d,0x40,0x2f,0x01,0x0e, -/*001d60*/ 0x0e,0x40,0x0f,0x00,0x0d,0x08,0x07,0x04,0x03,0x00,0x0c,0x0b,0x06,0x05,0x02,0x05, -/*001d70*/ 0x01,0x04,0x0a,0x09,0x0b,0x0a,0x01,0x03,0x00,0x06,0x0c,0x05,0x04,0x06,0x03,0x02, -/*001d80*/ 0x07,0x06,0x06,0x08,0x0d,0x0c,0x03,0x09,0x08,0x01,0x01,0x09,0x46,0x76,0x2f,0x37, -/*001d90*/ 0x18,0x00,0x3f,0x3c,0x3f,0x3c,0x10,0xfd,0x3c,0x2f,0x3c,0xfd,0x3c,0x10,0xfd,0x17, -/*001da0*/ 0x3c,0x01,0x2f,0x3c,0xfd,0x17,0x3c,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x00,0x31,0x30, -/*001db0*/ 0x01,0x49,0x68,0xb9,0x00,0x09,0x00,0x0e,0x49,0x68,0x61,0xb0,0x40,0x52,0x58,0x38, -/*001dc0*/ 0x11,0x37,0xb9,0x00,0x0e,0xff,0xc0,0x38,0x59,0x01,0x21,0x15,0x33,0x15,0x23,0x15, -/*001dd0*/ 0x21,0x15,0x21,0x11,0x33,0x35,0x21,0x01,0x8f,0xfe,0xd4,0xc8,0xc8,0x01,0x2c,0xfe, -/*001de0*/ 0x72,0x64,0x01,0x2a,0x01,0xf5,0x67,0x61,0xca,0x62,0x01,0xf2,0x64,0x00,0x00,0x01, -/*001df0*/ 0x00,0x01,0x00,0x01,0x01,0x8f,0x02,0x57,0x00,0x0b,0x00,0x62,0x40,0x29,0x01,0x0c, -/*001e00*/ 0x0c,0x40,0x0d,0x00,0x0b,0x04,0x03,0x00,0x0a,0x09,0x06,0x05,0x02,0x05,0x01,0x04, -/*001e10*/ 0x08,0x07,0x09,0x08,0x01,0x03,0x00,0x06,0x0a,0x05,0x04,0x06,0x03,0x02,0x0b,0x0a, -/*001e20*/ 0x03,0x07,0x06,0x01,0x01,0x07,0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x3c,0x3f,0x3c, -/*001e30*/ 0x2f,0x3c,0xfd,0x3c,0x10,0xfd,0x17,0x3c,0x01,0x2f,0x3c,0xfd,0x17,0x3c,0x2e,0x2e, -/*001e40*/ 0x2e,0x2e,0x00,0x31,0x30,0x01,0x49,0x68,0xb9,0x00,0x07,0x00,0x0c,0x49,0x68,0x61, -/*001e50*/ 0xb0,0x40,0x52,0x58,0x38,0x11,0x37,0xb9,0x00,0x0c,0xff,0xc0,0x38,0x59,0x01,0x21, -/*001e60*/ 0x15,0x33,0x15,0x23,0x11,0x23,0x11,0x33,0x35,0x21,0x01,0x8f,0xfe,0xd4,0xc8,0xc8, -/*001e70*/ 0x62,0x64,0x01,0x2a,0x01,0xf5,0x67,0x61,0xfe,0xd4,0x01,0xf2,0x64,0x00,0x00,0x01, -/*001e80*/ 0x00,0x01,0x00,0x01,0x01,0x8f,0x02,0x57,0x00,0x0f,0x00,0x7c,0x40,0x39,0x01,0x10, -/*001e90*/ 0x10,0x40,0x11,0x00,0x03,0x02,0x0e,0x0d,0x05,0x00,0x0a,0x06,0x05,0x02,0x01,0x05, -/*001ea0*/ 0x09,0x04,0x04,0x03,0x0c,0x0b,0x04,0x0f,0x08,0x07,0x03,0x00,0x0b,0x0a,0x06,0x00, -/*001eb0*/ 0x09,0x05,0x04,0x03,0x08,0x06,0x06,0x0d,0x0c,0x06,0x0e,0x0f,0x0e,0x02,0x07,0x06, -/*001ec0*/ 0x03,0x01,0x00,0x01,0x01,0x03,0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x3c,0x3f,0x3c, -/*001ed0*/ 0x3f,0x3c,0x10,0xfd,0x3c,0x10,0xfd,0x17,0x3c,0x10,0xfd,0x3c,0x01,0x2f,0x17,0x3c, -/*001ee0*/ 0xfd,0x3c,0x2f,0x3c,0xfd,0x17,0x3c,0x10,0xfd,0x3c,0x00,0x2e,0x2e,0x31,0x30,0x01, -/*001ef0*/ 0x49,0x68,0xb9,0x00,0x03,0x00,0x10,0x49,0x68,0x61,0xb0,0x40,0x52,0x58,0x38,0x11, -/*001f00*/ 0x37,0xb9,0x00,0x10,0xff,0xc0,0x38,0x59,0x25,0x21,0x35,0x23,0x11,0x33,0x35,0x21, -/*001f10*/ 0x15,0x21,0x11,0x33,0x35,0x23,0x35,0x33,0x01,0x8f,0xfe,0xd6,0x64,0x64,0x01,0x2a, -/*001f20*/ 0xfe,0xd4,0xca,0x64,0xc6,0x01,0x65,0x01,0x8d,0x64,0x62,0xfe,0x6e,0xcb,0x61,0x00, -/*001f30*/ 0x00,0x01,0x00,0x01,0x00,0x01,0x01,0x8f,0x02,0x57,0x00,0x0b,0x00,0x65,0x40,0x2c, -/*001f40*/ 0x01,0x0c,0x0c,0x40,0x0d,0x00,0x0a,0x09,0x02,0x03,0x01,0x04,0x0b,0x00,0x08,0x07, -/*001f50*/ 0x04,0x03,0x03,0x04,0x06,0x05,0x03,0x02,0x06,0x08,0x09,0x08,0x02,0x0b,0x0a,0x07, -/*001f60*/ 0x03,0x06,0x03,0x05,0x04,0x01,0x03,0x00,0x01,0x01,0x05,0x46,0x76,0x2f,0x37,0x18, -/*001f70*/ 0x00,0x3f,0x17,0x3c,0x3f,0x17,0x3c,0x3f,0x3c,0x10,0xfd,0x3c,0x01,0x2f,0x3c,0xfd, -/*001f80*/ 0x17,0x3c,0x2f,0x3c,0xfd,0x17,0x3c,0x00,0x31,0x30,0x01,0x49,0x68,0xb9,0x00,0x05, -/*001f90*/ 0x00,0x0c,0x49,0x68,0x61,0xb0,0x40,0x52,0x58,0x38,0x11,0x37,0xb9,0x00,0x0c,0xff, -/*001fa0*/ 0xc0,0x38,0x59,0x25,0x23,0x11,0x23,0x11,0x23,0x11,0x33,0x15,0x33,0x35,0x33,0x01, -/*001fb0*/ 0x8f,0x62,0xca,0x62,0x62,0xca,0x62,0x01,0x01,0x2c,0xfe,0xd4,0x02,0x56,0xc8,0xc8, -/*001fc0*/ 0x00,0x01,0x00,0x01,0x00,0x01,0x01,0x2b,0x02,0x57,0x00,0x0b,0x00,0x6c,0x40,0x30, -/*001fd0*/ 0x01,0x0c,0x0c,0x40,0x0d,0x00,0x0b,0x08,0x07,0x03,0x00,0x08,0x09,0x06,0x05,0x02, -/*001fe0*/ 0x03,0x01,0x08,0x03,0x04,0x03,0x04,0x0a,0x09,0x0b,0x0a,0x03,0x03,0x02,0x06,0x00, -/*001ff0*/ 0x09,0x08,0x05,0x03,0x04,0x06,0x06,0x07,0x06,0x03,0x01,0x00,0x01,0x01,0x01,0x46, -/*002000*/ 0x76,0x2f,0x37,0x18,0x00,0x3f,0x3c,0x3f,0x3c,0x10,0xfd,0x17,0x3c,0x10,0xfd,0x17, -/*002010*/ 0x3c,0x01,0x2f,0x3c,0xfd,0x3c,0x10,0xfd,0x17,0x3c,0x10,0xfd,0x17,0x3c,0x00,0x31, -/*002020*/ 0x30,0x01,0x49,0x68,0xb9,0x00,0x01,0x00,0x0c,0x49,0x68,0x61,0xb0,0x40,0x52,0x58, -/*002030*/ 0x38,0x11,0x37,0xb9,0x00,0x0c,0xff,0xc0,0x38,0x59,0x25,0x21,0x35,0x33,0x11,0x23, -/*002040*/ 0x35,0x21,0x15,0x23,0x11,0x33,0x01,0x2b,0xfe,0xd6,0x64,0x64,0x01,0x2a,0x64,0x64, -/*002050*/ 0x01,0x62,0x01,0x92,0x62,0x62,0xfe,0x6d,0x00,0x01,0x00,0x01,0x00,0x01,0x01,0x8f, -/*002060*/ 0x02,0x57,0x00,0x09,0x00,0x61,0x40,0x27,0x01,0x0a,0x0a,0x40,0x0b,0x00,0x04,0x03, -/*002070*/ 0x02,0x01,0x08,0x07,0x05,0x00,0x06,0x05,0x04,0x09,0x00,0x05,0x01,0x00,0x03,0x04, -/*002080*/ 0x06,0x02,0x07,0x06,0x06,0x08,0x09,0x08,0x03,0x03,0x02,0x01,0x01,0x03,0x46,0x76, -/*002090*/ 0x2f,0x37,0x18,0x00,0x3f,0x3c,0x3f,0x3c,0x10,0xfd,0x3c,0x10,0xfd,0x17,0x3c,0x01, -/*0020a0*/ 0x2f,0x3c,0xfd,0x3c,0x10,0xfd,0x3c,0x2e,0x2e,0x2e,0x2e,0x00,0x31,0x30,0x01,0x49, -/*0020b0*/ 0x68,0xb9,0x00,0x03,0x00,0x0a,0x49,0x68,0x61,0xb0,0x40,0x52,0x58,0x38,0x11,0x37, -/*0020c0*/ 0xb9,0x00,0x0a,0xff,0xc0,0x38,0x59,0x25,0x23,0x15,0x21,0x35,0x21,0x11,0x23,0x35, -/*0020d0*/ 0x33,0x01,0x8f,0x65,0xfe,0xd7,0x01,0x2c,0x64,0xc6,0x65,0x64,0x62,0x01,0x92,0x62, -/*0020e0*/ 0x00,0x01,0x00,0x01,0x00,0x01,0x01,0x8f,0x02,0x57,0x00,0x0f,0x00,0x76,0x40,0x37, -/*0020f0*/ 0x01,0x10,0x10,0x40,0x11,0x00,0x0f,0x0e,0x0e,0x0d,0x0a,0x09,0x02,0x05,0x01,0x04, -/*002100*/ 0x0f,0x0c,0x0b,0x03,0x00,0x08,0x07,0x04,0x03,0x03,0x04,0x06,0x05,0x0d,0x0c,0x07, -/*002110*/ 0x06,0x03,0x02,0x06,0x08,0x09,0x08,0x02,0x0b,0x0a,0x07,0x03,0x06,0x03,0x05,0x04, -/*002120*/ 0x01,0x03,0x00,0x01,0x01,0x05,0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x17,0x3c,0x3f, -/*002130*/ 0x17,0x3c,0x3f,0x3c,0x10,0xfd,0x3c,0x10,0xfd,0x3c,0x01,0x2f,0x3c,0xfd,0x17,0x3c, -/*002140*/ 0x2f,0x17,0x3c,0xfd,0x17,0x3c,0x00,0x2e,0x2e,0x31,0x30,0x01,0x49,0x68,0xb9,0x00, -/*002150*/ 0x05,0x00,0x10,0x49,0x68,0x61,0xb0,0x40,0x52,0x58,0x38,0x11,0x37,0xb9,0x00,0x10, -/*002160*/ 0xff,0xc0,0x38,0x59,0x25,0x23,0x11,0x23,0x11,0x23,0x11,0x33,0x15,0x33,0x35,0x33, -/*002170*/ 0x15,0x23,0x15,0x33,0x01,0x8f,0x62,0xca,0x62,0x62,0xca,0x62,0x64,0x64,0x01,0x01, -/*002180*/ 0x2c,0xfe,0xd4,0x02,0x56,0xc8,0xc8,0xc6,0x67,0x00,0x00,0x01,0x00,0x01,0x00,0x01, -/*002190*/ 0x01,0x8f,0x02,0x57,0x00,0x07,0x00,0x53,0x40,0x1f,0x01,0x08,0x08,0x40,0x09,0x00, -/*0021a0*/ 0x03,0x02,0x07,0x00,0x06,0x02,0x01,0x03,0x05,0x04,0x04,0x03,0x07,0x06,0x06,0x00, -/*0021b0*/ 0x05,0x04,0x03,0x01,0x00,0x01,0x01,0x03,0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x3c, -/*0021c0*/ 0x3f,0x3c,0x10,0xfd,0x3c,0x01,0x2f,0x3c,0xfd,0x17,0x3c,0x2e,0x2e,0x00,0x2e,0x2e, -/*0021d0*/ 0x31,0x30,0x01,0x49,0x68,0xb9,0x00,0x03,0x00,0x08,0x49,0x68,0x61,0xb0,0x40,0x52, -/*0021e0*/ 0x58,0x38,0x11,0x37,0xb9,0x00,0x08,0xff,0xc0,0x38,0x59,0x25,0x21,0x35,0x23,0x11, -/*0021f0*/ 0x33,0x11,0x21,0x01,0x8f,0xfe,0xd6,0x64,0x62,0x01,0x2c,0x01,0x65,0x01,0xf1,0xfe, -/*002200*/ 0x0c,0x00,0x00,0x01,0x00,0x01,0x00,0x01,0x01,0xf3,0x02,0x57,0x00,0x13,0x00,0x8a, -/*002210*/ 0x40,0x43,0x01,0x14,0x14,0x40,0x15,0x00,0x10,0x0f,0x05,0x00,0x12,0x11,0x02,0x03, -/*002220*/ 0x01,0x04,0x13,0x00,0x04,0x03,0x04,0x0e,0x0d,0x06,0x03,0x05,0x0c,0x0b,0x08,0x03, -/*002230*/ 0x07,0x04,0x0a,0x09,0x07,0x06,0x03,0x03,0x02,0x06,0x11,0x0d,0x0c,0x03,0x10,0x05, -/*002240*/ 0x04,0x06,0x0e,0x0f,0x0e,0x02,0x13,0x12,0x0b,0x03,0x0a,0x03,0x09,0x08,0x01,0x03, -/*002250*/ 0x00,0x01,0x01,0x09,0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x17,0x3c,0x3f,0x17,0x3c, -/*002260*/ 0x3f,0x3c,0x10,0xfd,0x3c,0x2f,0x17,0x3c,0xfd,0x17,0x3c,0x01,0x2f,0x3c,0xfd,0x17, -/*002270*/ 0x3c,0x2f,0x17,0x3c,0xfd,0x3c,0x2f,0x3c,0xfd,0x17,0x3c,0x10,0xfd,0x3c,0x00,0x31, -/*002280*/ 0x30,0x01,0x49,0x68,0xb9,0x00,0x09,0x00,0x14,0x49,0x68,0x61,0xb0,0x40,0x52,0x58, -/*002290*/ 0x38,0x11,0x37,0xb9,0x00,0x14,0xff,0xc0,0x38,0x59,0x25,0x23,0x11,0x23,0x15,0x23, -/*0022a0*/ 0x35,0x23,0x11,0x23,0x11,0x33,0x15,0x33,0x15,0x33,0x35,0x33,0x35,0x33,0x01,0xf3, -/*0022b0*/ 0x62,0x67,0x61,0x67,0x61,0x62,0x64,0x67,0x64,0x61,0x01,0x01,0x90,0x64,0x64,0xfe, -/*0022c0*/ 0x70,0x02,0x56,0x65,0x63,0x64,0x64,0x00,0x00,0x01,0x00,0x01,0x00,0x01,0x01,0x8f, -/*0022d0*/ 0x02,0x57,0x00,0x0f,0x00,0x79,0x40,0x38,0x01,0x10,0x10,0x40,0x11,0x00,0x0c,0x04, -/*0022e0*/ 0x03,0x03,0x0b,0x05,0x07,0x0e,0x0d,0x02,0x03,0x01,0x04,0x0f,0x00,0x0a,0x09,0x06, -/*0022f0*/ 0x03,0x05,0x04,0x08,0x07,0x03,0x02,0x06,0x0c,0x05,0x04,0x06,0x0b,0x0a,0x0d,0x0c, -/*002300*/ 0x02,0x0f,0x0e,0x09,0x03,0x08,0x03,0x07,0x06,0x01,0x03,0x00,0x01,0x01,0x07,0x46, -/*002310*/ 0x76,0x2f,0x37,0x18,0x00,0x3f,0x17,0x3c,0x3f,0x17,0x3c,0x3f,0x3c,0x2f,0x3c,0xfd, -/*002320*/ 0x3c,0x10,0xfd,0x3c,0x01,0x2f,0x3c,0xfd,0x17,0x3c,0x2f,0x3c,0xfd,0x17,0x3c,0x10, -/*002330*/ 0xfd,0x17,0x3c,0x00,0x31,0x30,0x01,0x49,0x68,0xb9,0x00,0x07,0x00,0x10,0x49,0x68, -/*002340*/ 0x61,0xb0,0x40,0x52,0x58,0x38,0x11,0x37,0xb9,0x00,0x10,0xff,0xc0,0x38,0x59,0x25, -/*002350*/ 0x23,0x11,0x23,0x35,0x23,0x11,0x23,0x11,0x33,0x15,0x33,0x15,0x33,0x35,0x33,0x01, -/*002360*/ 0x8f,0x62,0x64,0x67,0x61,0x62,0x64,0x67,0x61,0x01,0x01,0x2d,0x63,0xfe,0x70,0x02, -/*002370*/ 0x56,0x65,0x63,0xc8,0x00,0x02,0x00,0x01,0x00,0x01,0x01,0x8f,0x02,0x57,0x00,0x0b, -/*002380*/ 0x00,0x0f,0x00,0x6f,0x40,0x35,0x01,0x10,0x10,0x40,0x11,0x00,0x0f,0x0e,0x08,0x07, -/*002390*/ 0x04,0x05,0x03,0x04,0x06,0x05,0x0d,0x0c,0x0a,0x02,0x01,0x05,0x09,0x04,0x0b,0x00, -/*0023a0*/ 0x0f,0x0c,0x05,0x04,0x01,0x05,0x00,0x06,0x02,0x0e,0x0d,0x0b,0x0a,0x07,0x05,0x06, -/*0023b0*/ 0x06,0x08,0x09,0x08,0x03,0x03,0x02,0x01,0x01,0x05,0x46,0x76,0x2f,0x37,0x18,0x00, -/*0023c0*/ 0x3f,0x3c,0x3f,0x3c,0x10,0xfd,0x17,0x3c,0x10,0xfd,0x17,0x3c,0x01,0x2f,0x3c,0xfd, -/*0023d0*/ 0x17,0x3c,0x2f,0x3c,0xfd,0x17,0x3c,0x00,0x31,0x30,0x01,0x49,0x68,0xb9,0x00,0x05, -/*0023e0*/ 0x00,0x10,0x49,0x68,0x61,0xb0,0x40,0x52,0x58,0x38,0x11,0x37,0xb9,0x00,0x10,0xff, -/*0023f0*/ 0xc0,0x38,0x59,0x25,0x23,0x15,0x23,0x35,0x23,0x11,0x33,0x35,0x33,0x15,0x33,0x03, -/*002400*/ 0x11,0x23,0x11,0x01,0x8f,0x65,0xc5,0x64,0x64,0xc6,0x64,0x64,0xc6,0x65,0x64,0x65, -/*002410*/ 0x01,0x8d,0x64,0x65,0xfe,0x73,0x01,0x8e,0xfe,0x72,0x00,0x02,0x00,0x01,0x00,0x01, -/*002420*/ 0x01,0x8f,0x02,0x57,0x00,0x09,0x00,0x0d,0x00,0x6b,0x40,0x30,0x01,0x0e,0x0e,0x40, -/*002430*/ 0x0f,0x00,0x0d,0x04,0x03,0x03,0x0c,0x04,0x06,0x05,0x0b,0x0a,0x08,0x02,0x01,0x05, -/*002440*/ 0x07,0x04,0x09,0x00,0x0d,0x0a,0x01,0x03,0x00,0x06,0x03,0x02,0x0c,0x09,0x08,0x03, -/*002450*/ 0x0b,0x06,0x06,0x07,0x06,0x03,0x05,0x04,0x01,0x01,0x05,0x46,0x76,0x2f,0x37,0x18, -/*002460*/ 0x00,0x3f,0x3c,0x3f,0x3c,0x10,0xfd,0x17,0x3c,0x2f,0x3c,0xfd,0x17,0x3c,0x01,0x2f, -/*002470*/ 0x3c,0xfd,0x17,0x3c,0x2f,0x3c,0xfd,0x17,0x3c,0x00,0x31,0x30,0x01,0x49,0x68,0xb9, -/*002480*/ 0x00,0x05,0x00,0x0e,0x49,0x68,0x61,0xb0,0x40,0x52,0x58,0x38,0x11,0x37,0xb9,0x00, -/*002490*/ 0x0e,0xff,0xc0,0x38,0x59,0x01,0x23,0x15,0x23,0x15,0x23,0x11,0x21,0x15,0x33,0x07, -/*0024a0*/ 0x35,0x23,0x15,0x01,0x8f,0x65,0xc7,0x62,0x01,0x2a,0x64,0x64,0xc6,0x01,0x2d,0x64, -/*0024b0*/ 0xc8,0x02,0x56,0x65,0xc5,0xc6,0xc6,0x00,0x00,0x03,0x00,0x01,0x00,0x01,0x01,0x8f, -/*0024c0*/ 0x02,0x57,0x00,0x09,0x00,0x0f,0x00,0x13,0x00,0x85,0x40,0x42,0x01,0x14,0x14,0x40, -/*0024d0*/ 0x15,0x00,0x11,0x0f,0x0e,0x03,0x10,0x05,0x00,0x13,0x12,0x0d,0x0c,0x06,0x05,0x02, -/*0024e0*/ 0x07,0x01,0x04,0x04,0x03,0x0b,0x0a,0x08,0x03,0x07,0x04,0x09,0x00,0x13,0x03,0x02, -/*0024f0*/ 0x03,0x10,0x06,0x00,0x0c,0x0b,0x09,0x08,0x05,0x05,0x04,0x06,0x06,0x0e,0x0d,0x06, -/*002500*/ 0x12,0x0f,0x0a,0x03,0x11,0x07,0x06,0x03,0x01,0x00,0x01,0x01,0x03,0x46,0x76,0x2f, -/*002510*/ 0x37,0x18,0x00,0x3f,0x3c,0x3f,0x3c,0x2f,0x17,0x3c,0xfd,0x3c,0x10,0xfd,0x17,0x3c, -/*002520*/ 0x10,0xfd,0x17,0x3c,0x01,0x2f,0x3c,0xfd,0x17,0x3c,0x2f,0x3c,0xfd,0x17,0x3c,0x10, -/*002530*/ 0xfd,0x17,0x3c,0x00,0x31,0x30,0x01,0x49,0x68,0xb9,0x00,0x03,0x00,0x14,0x49,0x68, -/*002540*/ 0x61,0xb0,0x40,0x52,0x58,0x38,0x11,0x37,0xb9,0x00,0x14,0xff,0xc0,0x38,0x59,0x25, -/*002550*/ 0x21,0x35,0x23,0x11,0x33,0x35,0x33,0x15,0x33,0x03,0x11,0x23,0x15,0x33,0x15,0x07, -/*002560*/ 0x35,0x23,0x15,0x01,0x8f,0xfe,0xd6,0x64,0x64,0xc6,0x64,0x64,0xc6,0x64,0x02,0x62, -/*002570*/ 0x01,0x65,0x01,0x8d,0x64,0x65,0xfe,0xd7,0x01,0x2a,0xc5,0x65,0x64,0x62,0x62,0x00, -/*002580*/ 0x00,0x02,0x00,0x01,0x00,0x01,0x01,0x8f,0x02,0x57,0x00,0x0d,0x00,0x11,0x00,0x7c, -/*002590*/ 0x40,0x3c,0x01,0x12,0x12,0x40,0x13,0x00,0x11,0x04,0x03,0x03,0x10,0x04,0x06,0x05, -/*0025a0*/ 0x0f,0x0e,0x0c,0x0b,0x08,0x02,0x01,0x07,0x07,0x04,0x0d,0x0a,0x09,0x03,0x00,0x0d, -/*0025b0*/ 0x0c,0x07,0x00,0x11,0x0e,0x0b,0x03,0x0a,0x06,0x03,0x02,0x10,0x09,0x08,0x03,0x0f, -/*0025c0*/ 0x06,0x06,0x07,0x06,0x03,0x05,0x04,0x01,0x03,0x00,0x01,0x01,0x05,0x46,0x76,0x2f, -/*0025d0*/ 0x37,0x18,0x00,0x3f,0x17,0x3c,0x3f,0x3c,0x10,0xfd,0x17,0x3c,0x2f,0x3c,0xfd,0x17, -/*0025e0*/ 0x3c,0x10,0xfd,0x3c,0x01,0x2f,0x17,0x3c,0xfd,0x17,0x3c,0x2f,0x3c,0xfd,0x17,0x3c, -/*0025f0*/ 0x00,0x31,0x30,0x01,0x49,0x68,0xb9,0x00,0x05,0x00,0x12,0x49,0x68,0x61,0xb0,0x40, -/*002600*/ 0x52,0x58,0x38,0x11,0x37,0xb9,0x00,0x12,0xff,0xc0,0x38,0x59,0x25,0x23,0x35,0x23, -/*002610*/ 0x15,0x23,0x11,0x21,0x15,0x33,0x15,0x23,0x15,0x33,0x27,0x35,0x23,0x15,0x01,0x8f, -/*002620*/ 0x62,0xca,0x62,0x01,0x2a,0x64,0x64,0x64,0x64,0xc6,0x01,0xc8,0xc8,0x02,0x56,0x65, -/*002630*/ 0xc5,0x67,0x67,0xc6,0xc6,0x00,0x00,0x01,0x00,0x01,0x00,0x01,0x01,0x8f,0x02,0x57, -/*002640*/ 0x00,0x17,0x00,0xa3,0x40,0x53,0x01,0x18,0x18,0x40,0x19,0x00,0x17,0x10,0x0f,0x03, -/*002650*/ 0x00,0x04,0x05,0x16,0x06,0x05,0x02,0x01,0x05,0x15,0x04,0x07,0x14,0x08,0x07,0x03, -/*002660*/ 0x13,0x04,0x09,0x12,0x0e,0x0d,0x0a,0x09,0x05,0x11,0x04,0x0c,0x0b,0x04,0x03,0x03, -/*002670*/ 0x17,0x16,0x06,0x00,0x05,0x01,0x00,0x03,0x04,0x06,0x02,0x15,0x14,0x06,0x07,0x06, -/*002680*/ 0x09,0x08,0x06,0x13,0x12,0x0b,0x0a,0x06,0x0c,0x11,0x0d,0x0c,0x03,0x10,0x06,0x0e, -/*002690*/ 0x0f,0x0e,0x03,0x03,0x02,0x01,0x01,0x03,0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x3c, -/*0026a0*/ 0x3f,0x3c,0x10,0xfd,0x17,0x3c,0x10,0xfd,0x3c,0x2f,0x3c,0xfd,0x3c,0x2f,0x3c,0xfd, -/*0026b0*/ 0x3c,0x10,0xfd,0x17,0x3c,0x10,0xfd,0x3c,0x01,0x2f,0x17,0x3c,0xfd,0x17,0x3c,0x10, -/*0026c0*/ 0xfd,0x17,0x3c,0x10,0xfd,0x17,0x3c,0x10,0xfd,0x17,0x3c,0x00,0x31,0x30,0x01,0x49, -/*0026d0*/ 0x68,0xb9,0x00,0x03,0x00,0x18,0x49,0x68,0x61,0xb0,0x40,0x52,0x58,0x38,0x11,0x37, -/*0026e0*/ 0xb9,0x00,0x18,0xff,0xc0,0x38,0x59,0x25,0x23,0x15,0x21,0x35,0x21,0x35,0x23,0x35, -/*0026f0*/ 0x23,0x35,0x23,0x35,0x33,0x35,0x21,0x15,0x21,0x15,0x33,0x15,0x33,0x15,0x33,0x01, -/*002700*/ 0x8f,0x65,0xfe,0xd7,0x01,0x2c,0x64,0x64,0x64,0x64,0x01,0x2a,0xfe,0xd4,0x64,0x64, -/*002710*/ 0x64,0x65,0x64,0x62,0x67,0x64,0x64,0x61,0x64,0x62,0x67,0x64,0x64,0x00,0x00,0x01, -/*002720*/ 0x00,0x01,0x00,0x01,0x01,0xf3,0x02,0x57,0x00,0x07,0x00,0x53,0x40,0x1f,0x01,0x08, -/*002730*/ 0x08,0x40,0x09,0x00,0x07,0x06,0x05,0x00,0x02,0x01,0x04,0x04,0x03,0x05,0x04,0x01, -/*002740*/ 0x03,0x00,0x06,0x06,0x07,0x06,0x03,0x03,0x02,0x01,0x01,0x05,0x46,0x76,0x2f,0x37, -/*002750*/ 0x18,0x00,0x3f,0x3c,0x3f,0x3c,0x10,0xfd,0x17,0x3c,0x01,0x2f,0x3c,0xfd,0x3c,0x2e, -/*002760*/ 0x2e,0x2e,0x2e,0x00,0x31,0x30,0x01,0x49,0x68,0xb9,0x00,0x05,0x00,0x08,0x49,0x68, -/*002770*/ 0x61,0xb0,0x40,0x52,0x58,0x38,0x11,0x37,0xb9,0x00,0x08,0xff,0xc0,0x38,0x59,0x01, -/*002780*/ 0x23,0x11,0x23,0x11,0x23,0x35,0x21,0x01,0xf3,0xc8,0x62,0xc8,0x01,0xf2,0x01,0xf5, -/*002790*/ 0xfe,0x0c,0x01,0xf4,0x62,0x00,0x00,0x01,0x00,0x01,0x00,0x01,0x01,0x8f,0x02,0x57, -/*0027a0*/ 0x00,0x0b,0x00,0x67,0x40,0x2c,0x01,0x0c,0x0c,0x40,0x0d,0x00,0x05,0x04,0x02,0x01, -/*0027b0*/ 0x05,0x03,0x08,0x04,0x03,0x03,0x07,0x04,0x06,0x05,0x0a,0x09,0x04,0x0b,0x00,0x09, -/*0027c0*/ 0x01,0x00,0x03,0x08,0x06,0x02,0x0b,0x0a,0x07,0x03,0x06,0x03,0x03,0x02,0x01,0x01, -/*0027d0*/ 0x05,0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x3c,0x3f,0x17,0x3c,0x10,0xfd,0x17,0x3c, -/*0027e0*/ 0x01,0x2f,0x3c,0xfd,0x3c,0x2f,0x3c,0xfd,0x17,0x3c,0x10,0xfd,0x3c,0x00,0x2e,0x2e, -/*0027f0*/ 0x31,0x30,0x01,0x49,0x68,0xb9,0x00,0x05,0x00,0x0c,0x49,0x68,0x61,0xb0,0x40,0x52, -/*002800*/ 0x58,0x38,0x11,0x37,0xb9,0x00,0x0c,0xff,0xc0,0x38,0x59,0x25,0x23,0x15,0x23,0x35, -/*002810*/ 0x23,0x11,0x33,0x11,0x33,0x11,0x33,0x01,0x8f,0x65,0xc5,0x64,0x62,0xca,0x62,0x65, -/*002820*/ 0x64,0x65,0x01,0xf1,0xfe,0x0c,0x01,0xf4,0x00,0x01,0x00,0x01,0x00,0x01,0x01,0x8f, -/*002830*/ 0x02,0x57,0x00,0x0f,0x00,0x79,0x40,0x37,0x01,0x10,0x10,0x40,0x11,0x00,0x04,0x03, -/*002840*/ 0x05,0x07,0x0a,0x09,0x06,0x03,0x05,0x04,0x08,0x07,0x0c,0x0b,0x04,0x02,0x01,0x0e, -/*002850*/ 0x0d,0x04,0x0f,0x00,0x0d,0x01,0x00,0x03,0x0c,0x06,0x02,0x0b,0x03,0x02,0x03,0x0a, -/*002860*/ 0x06,0x05,0x04,0x0f,0x0e,0x09,0x03,0x08,0x03,0x07,0x06,0x01,0x01,0x07,0x46,0x76, -/*002870*/ 0x2f,0x37,0x18,0x00,0x3f,0x3c,0x3f,0x17,0x3c,0x2f,0x3c,0xfd,0x17,0x3c,0x10,0xfd, -/*002880*/ 0x17,0x3c,0x01,0x2f,0x3c,0xfd,0x3c,0x2f,0x3c,0xfd,0x3c,0x2f,0x3c,0xfd,0x17,0x3c, -/*002890*/ 0x10,0xfd,0x3c,0x00,0x31,0x30,0x01,0x49,0x68,0xb9,0x00,0x07,0x00,0x10,0x49,0x68, -/*0028a0*/ 0x61,0xb0,0x40,0x52,0x58,0x38,0x11,0x37,0xb9,0x00,0x10,0xff,0xc0,0x38,0x59,0x01, -/*0028b0*/ 0x23,0x15,0x23,0x15,0x23,0x15,0x23,0x11,0x33,0x11,0x33,0x35,0x33,0x11,0x33,0x01, -/*0028c0*/ 0x8f,0x65,0x64,0x64,0x61,0x62,0x67,0x64,0x61,0x01,0x2d,0x64,0x64,0x64,0x02,0x56, -/*0028d0*/ 0xfe,0x70,0x64,0x01,0x2c,0x00,0x00,0x01,0x00,0x01,0x00,0x01,0x01,0xf3,0x02,0x57, -/*0028e0*/ 0x00,0x13,0x00,0x87,0x40,0x41,0x01,0x14,0x14,0x40,0x15,0x00,0x0f,0x0e,0x09,0x08, -/*0028f0*/ 0x02,0x01,0x04,0x03,0x06,0x05,0x04,0x07,0x0c,0x08,0x07,0x03,0x0b,0x04,0x0a,0x09, -/*002900*/ 0x0e,0x0d,0x04,0x10,0x04,0x03,0x03,0x0f,0x12,0x11,0x04,0x13,0x00,0x11,0x10,0x0d, -/*002910*/ 0x05,0x04,0x01,0x00,0x07,0x0c,0x06,0x02,0x13,0x12,0x0b,0x03,0x0a,0x03,0x07,0x06, -/*002920*/ 0x03,0x03,0x02,0x01,0x01,0x09,0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x17,0x3c,0x3f, -/*002930*/ 0x17,0x3c,0x10,0xfd,0x17,0x3c,0x01,0x2f,0x3c,0xfd,0x3c,0x2f,0x17,0x3c,0xfd,0x3c, -/*002940*/ 0x2f,0x3c,0xfd,0x17,0x3c,0x10,0xfd,0x3c,0x10,0xfd,0x3c,0x00,0x2e,0x2e,0x2e,0x2e, -/*002950*/ 0x31,0x30,0x01,0x49,0x68,0xb9,0x00,0x09,0x00,0x14,0x49,0x68,0x61,0xb0,0x40,0x52, -/*002960*/ 0x58,0x38,0x11,0x37,0xb9,0x00,0x14,0xff,0xc0,0x38,0x59,0x25,0x23,0x15,0x23,0x35, -/*002970*/ 0x23,0x15,0x23,0x35,0x23,0x11,0x33,0x11,0x33,0x11,0x33,0x11,0x33,0x11,0x33,0x01, -/*002980*/ 0xf3,0x65,0x61,0x67,0x61,0x64,0x62,0x67,0x61,0x66,0x62,0x65,0x64,0x64,0x64,0x65, -/*002990*/ 0x01,0xf1,0xfe,0x0c,0x01,0x90,0xfe,0x70,0x01,0xf4,0x00,0x01,0x00,0x01,0x00,0x01, -/*0029a0*/ 0x01,0x8f,0x02,0x57,0x00,0x13,0x00,0x87,0x40,0x44,0x01,0x14,0x14,0x40,0x15,0x00, -/*0029b0*/ 0x12,0x11,0x06,0x02,0x01,0x05,0x05,0x04,0x13,0x04,0x03,0x03,0x00,0x10,0x0f,0x0c, -/*0029c0*/ 0x0b,0x08,0x05,0x07,0x04,0x0e,0x0d,0x0a,0x03,0x09,0x0d,0x0c,0x01,0x03,0x00,0x07, -/*0029d0*/ 0x0e,0x03,0x02,0x07,0x04,0x0b,0x0a,0x07,0x03,0x06,0x07,0x10,0x11,0x10,0x02,0x13, -/*0029e0*/ 0x12,0x0f,0x03,0x0e,0x03,0x09,0x08,0x05,0x03,0x04,0x01,0x01,0x09,0x46,0x76,0x2f, -/*0029f0*/ 0x37,0x18,0x00,0x3f,0x17,0x3c,0x3f,0x17,0x3c,0x3f,0x3c,0x10,0xfd,0x17,0x3c,0x10, -/*002a00*/ 0xfd,0x3c,0x10,0xfd,0x17,0x3c,0x01,0x2f,0x17,0x3c,0xfd,0x17,0x3c,0x2f,0x17,0x3c, -/*002a10*/ 0xfd,0x17,0x3c,0x00,0x31,0x30,0x01,0x49,0x68,0xb9,0x00,0x09,0x00,0x14,0x49,0x68, -/*002a20*/ 0x61,0xb0,0x40,0x52,0x58,0x38,0x11,0x37,0xb9,0x00,0x14,0xff,0xc0,0x38,0x59,0x01, -/*002a30*/ 0x23,0x15,0x33,0x15,0x23,0x35,0x23,0x15,0x23,0x35,0x33,0x35,0x23,0x35,0x33,0x15, -/*002a40*/ 0x33,0x35,0x33,0x01,0x8f,0x64,0x64,0x62,0xca,0x62,0x64,0x64,0x62,0xca,0x62,0x01, -/*002a50*/ 0x91,0xcb,0xc5,0xc8,0xc8,0xc6,0xca,0xc6,0xc8,0xc8,0x00,0x01,0x00,0x01,0x00,0x01, -/*002a60*/ 0x01,0x8f,0x02,0x57,0x00,0x0f,0x00,0x76,0x40,0x36,0x01,0x10,0x10,0x40,0x11,0x00, -/*002a70*/ 0x09,0x08,0x02,0x01,0x05,0x03,0x0e,0x0d,0x06,0x03,0x05,0x04,0x0f,0x00,0x0c,0x08, -/*002a80*/ 0x07,0x04,0x03,0x05,0x0b,0x04,0x0a,0x09,0x05,0x01,0x00,0x03,0x04,0x06,0x02,0x0d, -/*002a90*/ 0x0c,0x06,0x07,0x06,0x0f,0x0e,0x0b,0x03,0x0a,0x03,0x03,0x02,0x01,0x01,0x09,0x46, -/*002aa0*/ 0x76,0x2f,0x37,0x18,0x00,0x3f,0x3c,0x3f,0x17,0x3c,0x2f,0x3c,0xfd,0x3c,0x10,0xfd, -/*002ab0*/ 0x17,0x3c,0x01,0x2f,0x3c,0xfd,0x17,0x3c,0x2f,0x3c,0xfd,0x17,0x3c,0x10,0xfd,0x3c, -/*002ac0*/ 0x00,0x2e,0x2e,0x31,0x30,0x01,0x49,0x68,0xb9,0x00,0x09,0x00,0x10,0x49,0x68,0x61, -/*002ad0*/ 0xb0,0x40,0x52,0x58,0x38,0x11,0x37,0xb9,0x00,0x10,0xff,0xc0,0x38,0x59,0x25,0x23, -/*002ae0*/ 0x15,0x23,0x35,0x33,0x35,0x23,0x35,0x23,0x11,0x33,0x11,0x33,0x11,0x33,0x01,0x8f, -/*002af0*/ 0x65,0xc5,0xc8,0xc8,0x64,0x62,0xca,0x62,0x65,0x64,0x62,0x67,0x64,0x01,0x29,0xfe, -/*002b00*/ 0xd4,0x01,0x2c,0x00,0x00,0x01,0x00,0x01,0x00,0x01,0x01,0x8f,0x02,0x57,0x00,0x13, -/*002b10*/ 0x00,0x8e,0x40,0x43,0x01,0x14,0x14,0x40,0x15,0x00,0x06,0x05,0x04,0x12,0x11,0x0a, -/*002b20*/ 0x03,0x09,0x04,0x03,0x04,0x0c,0x0b,0x0e,0x0d,0x04,0x02,0x01,0x10,0x0f,0x04,0x13, -/*002b30*/ 0x08,0x07,0x03,0x00,0x01,0x00,0x07,0x12,0x0d,0x03,0x02,0x03,0x0c,0x06,0x0b,0x0a, -/*002b40*/ 0x05,0x03,0x04,0x07,0x06,0x06,0x08,0x11,0x10,0x06,0x12,0x13,0x12,0x03,0x0f,0x0e, -/*002b50*/ 0x02,0x09,0x08,0x01,0x01,0x09,0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x3c,0x3f,0x3c, -/*002b60*/ 0x3f,0x3c,0x10,0xfd,0x3c,0x10,0xfd,0x3c,0x2f,0x17,0x3c,0xfd,0x17,0x3c,0x10,0xfd, -/*002b70*/ 0x3c,0x01,0x2f,0x17,0x3c,0xfd,0x3c,0x2f,0x3c,0xfd,0x3c,0x2f,0x3c,0xfd,0x3c,0x2f, -/*002b80*/ 0x17,0x3c,0xfd,0x3c,0x00,0x31,0x30,0x01,0x49,0x68,0xb9,0x00,0x09,0x00,0x14,0x49, -/*002b90*/ 0x68,0x61,0xb0,0x40,0x52,0x58,0x38,0x11,0x37,0xb9,0x00,0x14,0xff,0xc0,0x38,0x59, -/*002ba0*/ 0x01,0x23,0x15,0x23,0x15,0x23,0x15,0x21,0x15,0x21,0x35,0x33,0x35,0x33,0x35,0x33, -/*002bb0*/ 0x35,0x21,0x35,0x21,0x01,0x8f,0x65,0x64,0x63,0x01,0x2c,0xfe,0x72,0x65,0x64,0x63, -/*002bc0*/ 0xfe,0xd4,0x01,0x8e,0x01,0x91,0x64,0x64,0x67,0x61,0xc6,0x64,0x64,0x66,0x62,0x00, -/*002bd0*/ 0x00,0x01,0x00,0x01,0x00,0x01,0x00,0xc7,0x02,0x57,0x00,0x07,0x00,0x59,0x40,0x23, -/*002be0*/ 0x01,0x08,0x08,0x40,0x09,0x00,0x07,0x04,0x03,0x03,0x00,0x05,0x01,0x06,0x05,0x04, -/*002bf0*/ 0x02,0x01,0x07,0x06,0x06,0x00,0x05,0x04,0x06,0x02,0x03,0x02,0x03,0x01,0x00,0x01, -/*002c00*/ 0x01,0x01,0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x3c,0x3f,0x3c,0x10,0xfd,0x3c,0x10, -/*002c10*/ 0xfd,0x3c,0x01,0x2f,0x3c,0xfd,0x3c,0x10,0xfd,0x17,0x3c,0x00,0x31,0x30,0x01,0x49, -/*002c20*/ 0x68,0xb9,0x00,0x01,0x00,0x08,0x49,0x68,0x61,0xb0,0x40,0x52,0x58,0x38,0x11,0x37, -/*002c30*/ 0xb9,0x00,0x08,0xff,0xc0,0x38,0x59,0x37,0x23,0x11,0x33,0x15,0x23,0x11,0x33,0xc7, -/*002c40*/ 0xc6,0xc6,0x64,0x64,0x01,0x02,0x56,0x62,0xfe,0x6d,0x00,0x01,0x00,0x01,0x00,0x01, -/*002c50*/ 0x01,0x2b,0x02,0x57,0x00,0x0b,0x00,0x6d,0x40,0x2f,0x01,0x0c,0x0c,0x40,0x0d,0x00, -/*002c60*/ 0x0b,0x00,0x04,0x01,0x0a,0x02,0x01,0x03,0x09,0x04,0x03,0x08,0x04,0x03,0x03,0x07, -/*002c70*/ 0x04,0x06,0x05,0x0b,0x0a,0x07,0x00,0x03,0x02,0x07,0x09,0x08,0x05,0x04,0x07,0x06, -/*002c80*/ 0x07,0x06,0x03,0x01,0x00,0x01,0x01,0x05,0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x3c, -/*002c90*/ 0x3f,0x3c,0x10,0xfd,0x3c,0x2f,0x3c,0xfd,0x3c,0x10,0xfd,0x3c,0x01,0x2f,0x3c,0xfd, -/*002ca0*/ 0x17,0x3c,0x10,0xfd,0x17,0x3c,0x10,0xfd,0x3c,0x00,0x31,0x30,0x01,0x49,0x68,0xb9, -/*002cb0*/ 0x00,0x05,0x00,0x0c,0x49,0x68,0x61,0xb0,0x40,0x52,0x58,0x38,0x11,0x37,0xb9,0x00, -/*002cc0*/ 0x0c,0xff,0xc0,0x38,0x59,0x25,0x23,0x35,0x23,0x35,0x23,0x35,0x33,0x15,0x33,0x15, -/*002cd0*/ 0x33,0x01,0x2b,0x62,0x64,0x64,0x62,0x64,0x64,0x01,0xc9,0xc7,0xc6,0xc9,0xc8,0x00, -/*002ce0*/ 0x00,0x01,0x00,0x01,0x00,0x01,0x00,0xc7,0x02,0x57,0x00,0x07,0x00,0x59,0x40,0x23, -/*002cf0*/ 0x01,0x08,0x08,0x40,0x09,0x00,0x06,0x05,0x02,0x03,0x01,0x05,0x00,0x04,0x03,0x04, -/*002d00*/ 0x07,0x00,0x03,0x02,0x06,0x00,0x05,0x04,0x06,0x06,0x07,0x06,0x03,0x01,0x00,0x01, -/*002d10*/ 0x01,0x01,0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x3c,0x3f,0x3c,0x10,0xfd,0x3c,0x10, -/*002d20*/ 0xfd,0x3c,0x01,0x2f,0x3c,0xfd,0x3c,0x10,0xfd,0x17,0x3c,0x00,0x31,0x30,0x01,0x49, -/*002d30*/ 0x68,0xb9,0x00,0x01,0x00,0x08,0x49,0x68,0x61,0xb0,0x40,0x52,0x58,0x38,0x11,0x37, -/*002d40*/ 0xb9,0x00,0x08,0xff,0xc0,0x38,0x59,0x37,0x23,0x35,0x33,0x11,0x23,0x35,0x33,0xc7, -/*002d50*/ 0xc6,0x64,0x64,0xc6,0x01,0x62,0x01,0x92,0x62,0x00,0x00,0x01,0x00,0x01,0x01,0x91, -/*002d60*/ 0x01,0x2b,0x02,0x57,0x00,0x0b,0x00,0x69,0x40,0x2d,0x01,0x0c,0x0c,0x40,0x0d,0x00, -/*002d70*/ 0x0b,0x00,0x04,0x01,0x04,0x03,0x04,0x06,0x05,0x08,0x07,0x04,0x0a,0x02,0x01,0x03, -/*002d80*/ 0x09,0x0b,0x0a,0x06,0x00,0x07,0x06,0x03,0x03,0x02,0x06,0x08,0x05,0x04,0x01,0x03, -/*002d90*/ 0x00,0x09,0x08,0x03,0x01,0x05,0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x3c,0x2f,0x17, -/*002da0*/ 0x3c,0x10,0xfd,0x17,0x3c,0x10,0xfd,0x3c,0x01,0x2f,0x17,0x3c,0xfd,0x3c,0x2f,0x3c, -/*002db0*/ 0xfd,0x3c,0x10,0xfd,0x3c,0x00,0x31,0x30,0x01,0x49,0x68,0xb9,0x00,0x05,0x00,0x0c, -/*002dc0*/ 0x49,0x68,0x61,0xb0,0x40,0x52,0x58,0x38,0x11,0x37,0xb9,0x00,0x0c,0xff,0xc0,0x38, -/*002dd0*/ 0x59,0x01,0x23,0x35,0x23,0x15,0x23,0x35,0x33,0x35,0x33,0x15,0x33,0x01,0x2b,0x62, -/*002de0*/ 0x67,0x61,0x64,0x62,0x64,0x01,0x91,0x64,0x64,0x62,0x64,0x65,0x00,0x01,0x00,0x01, -/*002df0*/ 0x00,0x01,0x01,0x8f,0x00,0x63,0x00,0x03,0x00,0x3e,0x40,0x12,0x01,0x04,0x04,0x40, -/*002e00*/ 0x05,0x00,0x03,0x02,0x01,0x00,0x03,0x02,0x01,0x00,0x01,0x01,0x01,0x46,0x76,0x2f, -/*002e10*/ 0x37,0x18,0x00,0x3f,0x3c,0x2f,0x3c,0x01,0x2e,0x2e,0x2e,0x2e,0x00,0x31,0x30,0x01, -/*002e20*/ 0x49,0x68,0xb9,0x00,0x01,0x00,0x04,0x49,0x68,0x61,0xb0,0x40,0x52,0x58,0x38,0x11, -/*002e30*/ 0x37,0xb9,0x00,0x04,0xff,0xc0,0x38,0x59,0x25,0x21,0x35,0x21,0x01,0x8f,0xfe,0x72, -/*002e40*/ 0x01,0x8e,0x01,0x62,0x00,0x02,0x00,0x01,0x00,0x01,0x01,0x8f,0x01,0x8f,0x00,0x07, -/*002e50*/ 0x00,0x0b,0x00,0x65,0x40,0x2c,0x01,0x0c,0x0c,0x40,0x0d,0x00,0x0b,0x0a,0x06,0x05, -/*002e60*/ 0x02,0x05,0x01,0x04,0x04,0x03,0x09,0x08,0x04,0x07,0x00,0x0b,0x03,0x02,0x03,0x08, -/*002e70*/ 0x06,0x00,0x0a,0x09,0x05,0x03,0x04,0x06,0x06,0x07,0x06,0x02,0x01,0x00,0x01,0x01, -/*002e80*/ 0x03,0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x3c,0x3f,0x3c,0x10,0xfd,0x17,0x3c,0x10, -/*002e90*/ 0xfd,0x17,0x3c,0x01,0x2f,0x3c,0xfd,0x3c,0x2f,0x3c,0xfd,0x17,0x3c,0x00,0x31,0x30, -/*002ea0*/ 0x01,0x49,0x68,0xb9,0x00,0x03,0x00,0x0c,0x49,0x68,0x61,0xb0,0x40,0x52,0x58,0x38, -/*002eb0*/ 0x11,0x37,0xb9,0x00,0x0c,0xff,0xc0,0x38,0x59,0x25,0x21,0x35,0x23,0x35,0x33,0x35, -/*002ec0*/ 0x21,0x03,0x35,0x23,0x15,0x01,0x8f,0xfe,0xd6,0x64,0x64,0x01,0x2a,0x64,0xc6,0x01, -/*002ed0*/ 0x65,0xc5,0x64,0xfe,0xd6,0xc6,0xc6,0x00,0x00,0x02,0x00,0x01,0x00,0x01,0x01,0x8f, -/*002ee0*/ 0x02,0x57,0x00,0x09,0x00,0x0d,0x00,0x6e,0x40,0x32,0x01,0x0e,0x0e,0x40,0x0f,0x00, -/*002ef0*/ 0x0d,0x06,0x05,0x03,0x0c,0x04,0x04,0x03,0x0b,0x0a,0x08,0x02,0x01,0x05,0x07,0x04, -/*002f00*/ 0x09,0x00,0x0d,0x0a,0x01,0x03,0x00,0x06,0x02,0x0c,0x09,0x08,0x03,0x0b,0x06,0x06, -/*002f10*/ 0x07,0x06,0x02,0x05,0x04,0x03,0x03,0x02,0x01,0x01,0x03,0x46,0x76,0x2f,0x37,0x18, -/*002f20*/ 0x00,0x3f,0x3c,0x3f,0x3c,0x3f,0x3c,0x10,0xfd,0x17,0x3c,0x10,0xfd,0x17,0x3c,0x01, -/*002f30*/ 0x2f,0x3c,0xfd,0x17,0x3c,0x2f,0x3c,0xfd,0x17,0x3c,0x00,0x31,0x30,0x01,0x49,0x68, -/*002f40*/ 0xb9,0x00,0x03,0x00,0x0e,0x49,0x68,0x61,0xb0,0x40,0x52,0x58,0x38,0x11,0x37,0xb9, -/*002f50*/ 0x00,0x0e,0xff,0xc0,0x38,0x59,0x25,0x23,0x15,0x21,0x11,0x33,0x15,0x33,0x15,0x33, -/*002f60*/ 0x07,0x35,0x23,0x15,0x01,0x8f,0x65,0xfe,0xd7,0x62,0xc8,0x64,0x64,0xc6,0x65,0x64, -/*002f70*/ 0x02,0x56,0xc8,0x65,0xc5,0xc6,0xc6,0x00,0x00,0x01,0x00,0x01,0x00,0x01,0x01,0x8f, -/*002f80*/ 0x01,0x8f,0x00,0x0b,0x00,0x67,0x40,0x2c,0x01,0x0c,0x0c,0x40,0x0d,0x00,0x0b,0x04, -/*002f90*/ 0x03,0x00,0x0a,0x09,0x06,0x05,0x02,0x05,0x01,0x04,0x08,0x07,0x07,0x06,0x07,0x08, -/*002fa0*/ 0x09,0x08,0x01,0x03,0x00,0x06,0x0a,0x03,0x02,0x06,0x04,0x0b,0x0a,0x02,0x05,0x04, -/*002fb0*/ 0x01,0x01,0x07,0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x3c,0x3f,0x3c,0x10,0xfd,0x3c, -/*002fc0*/ 0x10,0xfd,0x17,0x3c,0x10,0xfd,0x3c,0x01,0x2f,0x3c,0xfd,0x17,0x3c,0x2e,0x2e,0x2e, -/*002fd0*/ 0x2e,0x00,0x31,0x30,0x01,0x49,0x68,0xb9,0x00,0x07,0x00,0x0c,0x49,0x68,0x61,0xb0, -/*002fe0*/ 0x40,0x52,0x58,0x38,0x11,0x37,0xb9,0x00,0x0c,0xff,0xc0,0x38,0x59,0x01,0x21,0x15, -/*002ff0*/ 0x21,0x15,0x21,0x35,0x23,0x35,0x33,0x35,0x21,0x01,0x8f,0xfe,0xd4,0x01,0x2c,0xfe, -/*003000*/ 0xd6,0x64,0x64,0x01,0x2a,0x01,0x2d,0xca,0x62,0x65,0xc5,0x64,0x00,0x02,0x00,0x01, -/*003010*/ 0x00,0x01,0x01,0x8f,0x02,0x57,0x00,0x09,0x00,0x0d,0x00,0x6e,0x40,0x32,0x01,0x0e, -/*003020*/ 0x0e,0x40,0x0f,0x00,0x0d,0x0c,0x06,0x05,0x02,0x05,0x01,0x04,0x04,0x03,0x0b,0x08, -/*003030*/ 0x07,0x03,0x0a,0x04,0x09,0x00,0x0d,0x03,0x02,0x03,0x0a,0x06,0x00,0x0c,0x0b,0x05, -/*003040*/ 0x03,0x04,0x06,0x06,0x09,0x08,0x03,0x07,0x06,0x02,0x01,0x00,0x01,0x01,0x03,0x46, -/*003050*/ 0x76,0x2f,0x37,0x18,0x00,0x3f,0x3c,0x3f,0x3c,0x3f,0x3c,0x10,0xfd,0x17,0x3c,0x10, -/*003060*/ 0xfd,0x17,0x3c,0x01,0x2f,0x3c,0xfd,0x17,0x3c,0x2f,0x3c,0xfd,0x17,0x3c,0x00,0x31, -/*003070*/ 0x30,0x01,0x49,0x68,0xb9,0x00,0x03,0x00,0x0e,0x49,0x68,0x61,0xb0,0x40,0x52,0x58, -/*003080*/ 0x38,0x11,0x37,0xb9,0x00,0x0e,0xff,0xc0,0x38,0x59,0x25,0x21,0x35,0x23,0x35,0x33, -/*003090*/ 0x35,0x33,0x35,0x33,0x03,0x35,0x23,0x15,0x01,0x8f,0xfe,0xd6,0x64,0x65,0xc7,0x62, -/*0030a0*/ 0x64,0xc6,0x01,0x65,0xc5,0x64,0xc8,0xfe,0x0e,0xc6,0xc6,0x00,0x00,0x02,0x00,0x01, -/*0030b0*/ 0x00,0x01,0x01,0x8f,0x01,0x8f,0x00,0x0d,0x00,0x11,0x00,0x89,0x40,0x43,0x01,0x12, -/*0030c0*/ 0x12,0x40,0x13,0x00,0x0c,0x0b,0x05,0x05,0x0d,0x04,0x03,0x03,0x00,0x05,0x01,0x0f, -/*0030d0*/ 0x0e,0x02,0x03,0x01,0x04,0x05,0x11,0x10,0x0a,0x09,0x06,0x05,0x05,0x04,0x08,0x07, -/*0030e0*/ 0x07,0x06,0x07,0x08,0x11,0x0e,0x01,0x03,0x00,0x06,0x0c,0x03,0x02,0x06,0x04,0x10, -/*0030f0*/ 0x0f,0x0d,0x0c,0x09,0x05,0x08,0x06,0x0a,0x0b,0x0a,0x02,0x05,0x04,0x01,0x01,0x07, -/*003100*/ 0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x3c,0x3f,0x3c,0x10,0xfd,0x17,0x3c,0x10,0xfd, -/*003110*/ 0x3c,0x10,0xfd,0x17,0x3c,0x10,0xfd,0x3c,0x01,0x2f,0x3c,0xfd,0x17,0x3c,0x10,0xfd, -/*003120*/ 0x17,0x3c,0x10,0xfd,0x17,0x3c,0x10,0xfd,0x3c,0x00,0x31,0x30,0x01,0x49,0x68,0xb9, -/*003130*/ 0x00,0x07,0x00,0x12,0x49,0x68,0x61,0xb0,0x40,0x52,0x58,0x38,0x11,0x37,0xb9,0x00, -/*003140*/ 0x12,0xff,0xc0,0x38,0x59,0x25,0x23,0x15,0x33,0x15,0x21,0x35,0x23,0x35,0x33,0x35, -/*003150*/ 0x33,0x15,0x33,0x07,0x35,0x23,0x15,0x01,0x8f,0xc8,0xc8,0xfe,0xd6,0x64,0x64,0xc6, -/*003160*/ 0x64,0xc8,0x62,0xc9,0x67,0x61,0x65,0xc5,0x64,0x65,0x61,0x62,0x62,0x00,0x00,0x01, -/*003170*/ 0x00,0x01,0x00,0x01,0x01,0x2b,0x02,0x57,0x00,0x0b,0x00,0x68,0x40,0x2d,0x01,0x0c, -/*003180*/ 0x0c,0x40,0x0d,0x00,0x04,0x03,0x05,0x07,0x0b,0x00,0x05,0x09,0x0a,0x09,0x06,0x05, -/*003190*/ 0x02,0x05,0x01,0x04,0x08,0x07,0x09,0x08,0x01,0x03,0x00,0x06,0x0a,0x05,0x04,0x06, -/*0031a0*/ 0x03,0x02,0x0b,0x0a,0x03,0x07,0x06,0x01,0x01,0x07,0x46,0x76,0x2f,0x37,0x18,0x00, -/*0031b0*/ 0x3f,0x3c,0x3f,0x3c,0x2f,0x3c,0xfd,0x3c,0x10,0xfd,0x17,0x3c,0x01,0x2f,0x3c,0xfd, -/*0031c0*/ 0x17,0x3c,0x10,0xfd,0x3c,0x10,0xfd,0x3c,0x00,0x31,0x30,0x01,0x49,0x68,0xb9,0x00, -/*0031d0*/ 0x07,0x00,0x0c,0x49,0x68,0x61,0xb0,0x40,0x52,0x58,0x38,0x11,0x37,0xb9,0x00,0x0c, -/*0031e0*/ 0xff,0xc0,0x38,0x59,0x01,0x23,0x15,0x33,0x15,0x23,0x11,0x23,0x11,0x33,0x35,0x33, -/*0031f0*/ 0x01,0x2b,0xc8,0x64,0x65,0x61,0x64,0xc6,0x01,0xf5,0x67,0x61,0xfe,0xd4,0x01,0xf2, -/*003200*/ 0x64,0x00,0x00,0x02,0x00,0x01,0xff,0x39,0x01,0x8f,0x01,0x8f,0x00,0x0d,0x00,0x11, -/*003210*/ 0x00,0x7a,0x40,0x3b,0x01,0x12,0x12,0x40,0x13,0x00,0x11,0x10,0x0c,0x0b,0x08,0x07, -/*003220*/ 0x04,0x07,0x03,0x04,0x0a,0x09,0x0f,0x06,0x05,0x02,0x01,0x05,0x0e,0x04,0x0d,0x00, -/*003230*/ 0x05,0x01,0x00,0x03,0x04,0x06,0x02,0x11,0x09,0x08,0x03,0x0e,0x06,0x07,0x06,0x10, -/*003240*/ 0x0f,0x0b,0x03,0x0a,0x06,0x0c,0x0d,0x0c,0x02,0x03,0x02,0x00,0x01,0x09,0x46,0x76, -/*003250*/ 0x2f,0x37,0x18,0x00,0x3f,0x3c,0x3f,0x3c,0x10,0xfd,0x17,0x3c,0x2f,0x3c,0xfd,0x17, -/*003260*/ 0x3c,0x10,0xfd,0x17,0x3c,0x01,0x2f,0x3c,0xfd,0x17,0x3c,0x2f,0x3c,0xfd,0x17,0x3c, -/*003270*/ 0x00,0x31,0x30,0x01,0x49,0x68,0xb9,0x00,0x09,0x00,0x12,0x49,0x68,0x61,0xb0,0x40, -/*003280*/ 0x52,0x58,0x38,0x11,0x37,0xb9,0x00,0x12,0xff,0xc0,0x38,0x59,0x05,0x23,0x15,0x23, -/*003290*/ 0x35,0x33,0x35,0x23,0x35,0x23,0x35,0x33,0x35,0x21,0x03,0x35,0x23,0x15,0x01,0x8f, -/*0032a0*/ 0x65,0xc5,0xc8,0xc8,0x64,0x64,0x01,0x2a,0x64,0xc6,0x63,0x64,0x62,0x67,0x64,0xc5, -/*0032b0*/ 0x64,0xfe,0xd6,0xc6,0xc6,0x00,0x00,0x01,0x00,0x01,0x00,0x01,0x01,0x8f,0x02,0x57, -/*0032c0*/ 0x00,0x0b,0x00,0x65,0x40,0x2b,0x01,0x0c,0x0c,0x40,0x0d,0x00,0x0b,0x0a,0x0a,0x09, -/*0032d0*/ 0x02,0x03,0x01,0x04,0x0b,0x00,0x08,0x07,0x04,0x03,0x03,0x04,0x06,0x05,0x03,0x02, -/*0032e0*/ 0x06,0x08,0x09,0x08,0x02,0x07,0x06,0x03,0x05,0x04,0x01,0x03,0x00,0x01,0x01,0x05, -/*0032f0*/ 0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x17,0x3c,0x3f,0x3c,0x3f,0x3c,0x10,0xfd,0x3c, -/*003300*/ 0x01,0x2f,0x3c,0xfd,0x17,0x3c,0x2f,0x3c,0xfd,0x17,0x3c,0x00,0x2e,0x2e,0x31,0x30, -/*003310*/ 0x01,0x49,0x68,0xb9,0x00,0x05,0x00,0x0c,0x49,0x68,0x61,0xb0,0x40,0x52,0x58,0x38, -/*003320*/ 0x11,0x37,0xb9,0x00,0x0c,0xff,0xc0,0x38,0x59,0x25,0x23,0x11,0x23,0x11,0x23,0x11, -/*003330*/ 0x33,0x15,0x33,0x15,0x33,0x01,0x8f,0x62,0xca,0x62,0x62,0xc8,0x64,0x01,0x01,0x2c, -/*003340*/ 0xfe,0xd4,0x02,0x56,0xc8,0x65,0x00,0x02,0x00,0x01,0x00,0x01,0x00,0x63,0x02,0x57, -/*003350*/ 0x00,0x03,0x00,0x07,0x00,0x54,0x40,0x21,0x01,0x08,0x08,0x40,0x09,0x00,0x07,0x04, -/*003360*/ 0x03,0x03,0x00,0x04,0x06,0x05,0x02,0x03,0x01,0x01,0x00,0x06,0x02,0x07,0x06,0x02, -/*003370*/ 0x05,0x04,0x01,0x03,0x02,0x03,0x01,0x01,0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x3c, -/*003380*/ 0x3f,0x3c,0x3f,0x3c,0x10,0xfd,0x3c,0x01,0x2f,0x17,0x3c,0xfd,0x17,0x3c,0x00,0x31, -/*003390*/ 0x30,0x01,0x49,0x68,0xb9,0x00,0x01,0x00,0x08,0x49,0x68,0x61,0xb0,0x40,0x52,0x58, -/*0033a0*/ 0x38,0x11,0x37,0xb9,0x00,0x08,0xff,0xc0,0x38,0x59,0x13,0x23,0x35,0x33,0x11,0x23, -/*0033b0*/ 0x11,0x33,0x63,0x62,0x62,0x62,0x62,0x01,0xf5,0x62,0xfd,0xaa,0x01,0x8e,0x00,0x02, -/*0033c0*/ 0x00,0x01,0xff,0x39,0x00,0xc7,0x02,0x57,0x00,0x03,0x00,0x0b,0x00,0x68,0x40,0x2d, -/*0033d0*/ 0x01,0x0c,0x0c,0x40,0x0d,0x00,0x0a,0x09,0x02,0x03,0x01,0x04,0x0b,0x04,0x03,0x03, -/*0033e0*/ 0x00,0x06,0x05,0x04,0x08,0x07,0x01,0x00,0x06,0x02,0x09,0x05,0x04,0x03,0x08,0x06, -/*0033f0*/ 0x06,0x0b,0x0a,0x02,0x07,0x06,0x00,0x03,0x02,0x03,0x01,0x07,0x46,0x76,0x2f,0x37, -/*003400*/ 0x18,0x00,0x3f,0x3c,0x3f,0x3c,0x3f,0x3c,0x10,0xfd,0x17,0x3c,0x10,0xfd,0x3c,0x01, -/*003410*/ 0x2f,0x3c,0xfd,0x3c,0x2f,0x17,0x3c,0xfd,0x17,0x3c,0x00,0x31,0x30,0x01,0x49,0x68, -/*003420*/ 0xb9,0x00,0x07,0x00,0x0c,0x49,0x68,0x61,0xb0,0x40,0x52,0x58,0x38,0x11,0x37,0xb9, -/*003430*/ 0x00,0x0c,0xff,0xc0,0x38,0x59,0x13,0x23,0x35,0x33,0x11,0x23,0x15,0x23,0x35,0x33, -/*003440*/ 0x11,0x33,0xc7,0x62,0x62,0x65,0x61,0x64,0x62,0x01,0xf5,0x62,0xfd,0x46,0x64,0x62, -/*003450*/ 0x01,0xf4,0x00,0x01,0x00,0x01,0x00,0x01,0x01,0x8f,0x02,0x57,0x00,0x0f,0x00,0x79, -/*003460*/ 0x40,0x39,0x01,0x10,0x10,0x40,0x11,0x00,0x0e,0x0d,0x0a,0x09,0x02,0x05,0x01,0x04, -/*003470*/ 0x0f,0x0c,0x0b,0x03,0x00,0x08,0x07,0x04,0x03,0x03,0x04,0x06,0x05,0x0f,0x0e,0x07, -/*003480*/ 0x00,0x03,0x02,0x06,0x08,0x0d,0x09,0x08,0x03,0x0c,0x06,0x0a,0x0b,0x0a,0x02,0x07, -/*003490*/ 0x06,0x03,0x05,0x04,0x01,0x03,0x00,0x01,0x01,0x05,0x46,0x76,0x2f,0x37,0x18,0x00, -/*0034a0*/ 0x3f,0x17,0x3c,0x3f,0x3c,0x3f,0x3c,0x10,0xfd,0x17,0x3c,0x10,0xfd,0x3c,0x10,0xfd, -/*0034b0*/ 0x3c,0x01,0x2f,0x3c,0xfd,0x17,0x3c,0x2f,0x17,0x3c,0xfd,0x17,0x3c,0x00,0x31,0x30, -/*0034c0*/ 0x01,0x49,0x68,0xb9,0x00,0x05,0x00,0x10,0x49,0x68,0x61,0xb0,0x40,0x52,0x58,0x38, -/*0034d0*/ 0x11,0x37,0xb9,0x00,0x10,0xff,0xc0,0x38,0x59,0x25,0x23,0x35,0x23,0x15,0x23,0x11, -/*0034e0*/ 0x33,0x11,0x33,0x35,0x33,0x15,0x23,0x15,0x33,0x01,0x8f,0x62,0xca,0x62,0x62,0xcb, -/*0034f0*/ 0x61,0x64,0x64,0x01,0xc8,0xc8,0x02,0x56,0xfe,0xd4,0x64,0x62,0x67,0x00,0x00,0x01, -/*003500*/ 0x00,0x01,0x00,0x01,0x00,0x63,0x02,0x57,0x00,0x03,0x00,0x40,0x40,0x14,0x01,0x04, -/*003510*/ 0x04,0x40,0x05,0x00,0x02,0x01,0x04,0x03,0x00,0x03,0x02,0x03,0x01,0x00,0x01,0x01, -/*003520*/ 0x01,0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x3c,0x3f,0x3c,0x01,0x2f,0x3c,0xfd,0x3c, -/*003530*/ 0x00,0x31,0x30,0x01,0x49,0x68,0xb9,0x00,0x01,0x00,0x04,0x49,0x68,0x61,0xb0,0x40, -/*003540*/ 0x52,0x58,0x38,0x11,0x37,0xb9,0x00,0x04,0xff,0xc0,0x38,0x59,0x37,0x23,0x11,0x33, -/*003550*/ 0x63,0x62,0x62,0x01,0x02,0x56,0x00,0x01,0x00,0x01,0x00,0x01,0x01,0xf3,0x01,0x8f, -/*003560*/ 0x00,0x0d,0x00,0x6b,0x40,0x2f,0x01,0x0e,0x0e,0x40,0x0f,0x00,0x0d,0x0c,0x0c,0x0b, -/*003570*/ 0x02,0x03,0x01,0x04,0x0d,0x00,0x04,0x03,0x04,0x06,0x05,0x08,0x07,0x04,0x0a,0x09, -/*003580*/ 0x07,0x06,0x03,0x03,0x02,0x06,0x0a,0x0b,0x0a,0x02,0x09,0x08,0x05,0x04,0x01,0x05, -/*003590*/ 0x00,0x01,0x01,0x09,0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x17,0x3c,0x3f,0x3c,0x10, -/*0035a0*/ 0xfd,0x17,0x3c,0x01,0x2f,0x3c,0xfd,0x3c,0x2f,0x3c,0xfd,0x3c,0x2f,0x3c,0xfd,0x17, -/*0035b0*/ 0x3c,0x00,0x2e,0x2e,0x31,0x30,0x01,0x49,0x68,0xb9,0x00,0x09,0x00,0x0e,0x49,0x68, -/*0035c0*/ 0x61,0xb0,0x40,0x52,0x58,0x38,0x11,0x37,0xb9,0x00,0x0e,0xff,0xc0,0x38,0x59,0x25, -/*0035d0*/ 0x23,0x11,0x23,0x11,0x23,0x11,0x23,0x11,0x23,0x11,0x21,0x15,0x33,0x01,0xf3,0x62, -/*0035e0*/ 0x67,0x61,0x67,0x61,0x01,0x8e,0x64,0x01,0x01,0x2c,0xfe,0xd4,0x01,0x2c,0xfe,0xd4, -/*0035f0*/ 0x01,0x8e,0x65,0x00,0x00,0x01,0x00,0x01,0x00,0x01,0x01,0x8f,0x01,0x8f,0x00,0x09, -/*003600*/ 0x00,0x5c,0x40,0x25,0x01,0x0a,0x0a,0x40,0x0b,0x00,0x09,0x08,0x08,0x07,0x02,0x03, -/*003610*/ 0x01,0x04,0x09,0x00,0x04,0x03,0x04,0x06,0x05,0x03,0x02,0x06,0x06,0x07,0x06,0x02, -/*003620*/ 0x05,0x04,0x01,0x03,0x00,0x01,0x01,0x05,0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x17, -/*003630*/ 0x3c,0x3f,0x3c,0x10,0xfd,0x3c,0x01,0x2f,0x3c,0xfd,0x3c,0x2f,0x3c,0xfd,0x17,0x3c, -/*003640*/ 0x00,0x2e,0x2e,0x31,0x30,0x01,0x49,0x68,0xb9,0x00,0x05,0x00,0x0a,0x49,0x68,0x61, -/*003650*/ 0xb0,0x40,0x52,0x58,0x38,0x11,0x37,0xb9,0x00,0x0a,0xff,0xc0,0x38,0x59,0x25,0x23, -/*003660*/ 0x11,0x23,0x11,0x23,0x11,0x21,0x15,0x33,0x01,0x8f,0x62,0xca,0x62,0x01,0x2a,0x64, -/*003670*/ 0x01,0x01,0x2c,0xfe,0xd4,0x01,0x8e,0x65,0x00,0x02,0x00,0x01,0x00,0x01,0x01,0x8f, -/*003680*/ 0x01,0x8f,0x00,0x0b,0x00,0x0f,0x00,0x6f,0x40,0x35,0x01,0x10,0x10,0x40,0x11,0x00, -/*003690*/ 0x0f,0x0e,0x08,0x07,0x04,0x05,0x03,0x04,0x06,0x05,0x0d,0x0c,0x0a,0x02,0x01,0x05, -/*0036a0*/ 0x09,0x04,0x0b,0x00,0x0f,0x0c,0x05,0x04,0x01,0x05,0x00,0x06,0x02,0x0e,0x0d,0x0b, -/*0036b0*/ 0x0a,0x07,0x05,0x06,0x06,0x08,0x09,0x08,0x02,0x03,0x02,0x01,0x01,0x05,0x46,0x76, -/*0036c0*/ 0x2f,0x37,0x18,0x00,0x3f,0x3c,0x3f,0x3c,0x10,0xfd,0x17,0x3c,0x10,0xfd,0x17,0x3c, -/*0036d0*/ 0x01,0x2f,0x3c,0xfd,0x17,0x3c,0x2f,0x3c,0xfd,0x17,0x3c,0x00,0x31,0x30,0x01,0x49, -/*0036e0*/ 0x68,0xb9,0x00,0x05,0x00,0x10,0x49,0x68,0x61,0xb0,0x40,0x52,0x58,0x38,0x11,0x37, -/*0036f0*/ 0xb9,0x00,0x10,0xff,0xc0,0x38,0x59,0x25,0x23,0x15,0x23,0x35,0x23,0x35,0x33,0x35, -/*003700*/ 0x33,0x15,0x33,0x07,0x35,0x23,0x15,0x01,0x8f,0x65,0xc5,0x64,0x64,0xc6,0x64,0x64, -/*003710*/ 0xc6,0x65,0x64,0x65,0xc5,0x64,0x65,0xc5,0xc6,0xc6,0x00,0x02,0x00,0x01,0xff,0x39, -/*003720*/ 0x01,0x8f,0x01,0x8f,0x00,0x09,0x00,0x0d,0x00,0x6e,0x40,0x32,0x01,0x0e,0x0e,0x40, -/*003730*/ 0x0f,0x00,0x0d,0x04,0x03,0x03,0x0c,0x04,0x06,0x05,0x0b,0x0a,0x08,0x02,0x01,0x05, -/*003740*/ 0x07,0x04,0x09,0x00,0x0d,0x0a,0x01,0x03,0x00,0x06,0x02,0x0c,0x09,0x08,0x03,0x0b, -/*003750*/ 0x06,0x06,0x07,0x06,0x02,0x05,0x04,0x00,0x03,0x02,0x01,0x01,0x05,0x46,0x76,0x2f, -/*003760*/ 0x37,0x18,0x00,0x3f,0x3c,0x3f,0x3c,0x3f,0x3c,0x10,0xfd,0x17,0x3c,0x10,0xfd,0x17, -/*003770*/ 0x3c,0x01,0x2f,0x3c,0xfd,0x17,0x3c,0x2f,0x3c,0xfd,0x17,0x3c,0x00,0x31,0x30,0x01, -/*003780*/ 0x49,0x68,0xb9,0x00,0x05,0x00,0x0e,0x49,0x68,0x61,0xb0,0x40,0x52,0x58,0x38,0x11, -/*003790*/ 0x37,0xb9,0x00,0x0e,0xff,0xc0,0x38,0x59,0x25,0x23,0x15,0x23,0x15,0x23,0x11,0x21, -/*0037a0*/ 0x15,0x33,0x07,0x35,0x23,0x15,0x01,0x8f,0x65,0xc7,0x62,0x01,0x2a,0x64,0x64,0xc6, -/*0037b0*/ 0x65,0x64,0xc8,0x02,0x56,0x65,0xc5,0xc6,0xc6,0x00,0x00,0x02,0x00,0x01,0xff,0x39, -/*0037c0*/ 0x01,0x8f,0x01,0x8f,0x00,0x09,0x00,0x0d,0x00,0x6e,0x40,0x32,0x01,0x0e,0x0e,0x40, -/*0037d0*/ 0x0f,0x00,0x0d,0x0c,0x08,0x07,0x04,0x05,0x03,0x04,0x06,0x05,0x0b,0x02,0x01,0x03, -/*0037e0*/ 0x0a,0x04,0x09,0x00,0x0d,0x05,0x04,0x03,0x0a,0x06,0x02,0x0c,0x0b,0x07,0x03,0x06, -/*0037f0*/ 0x06,0x08,0x09,0x08,0x02,0x03,0x02,0x01,0x01,0x00,0x00,0x01,0x05,0x46,0x76,0x2f, -/*003800*/ 0x37,0x18,0x00,0x3f,0x3c,0x3f,0x3c,0x3f,0x3c,0x10,0xfd,0x17,0x3c,0x10,0xfd,0x17, -/*003810*/ 0x3c,0x01,0x2f,0x3c,0xfd,0x17,0x3c,0x2f,0x3c,0xfd,0x17,0x3c,0x00,0x31,0x30,0x01, -/*003820*/ 0x49,0x68,0xb9,0x00,0x05,0x00,0x0e,0x49,0x68,0x61,0xb0,0x40,0x52,0x58,0x38,0x11, -/*003830*/ 0x37,0xb9,0x00,0x0e,0xff,0xc0,0x38,0x59,0x05,0x23,0x35,0x23,0x35,0x23,0x35,0x33, -/*003840*/ 0x35,0x21,0x03,0x35,0x23,0x15,0x01,0x8f,0x62,0xc8,0x64,0x64,0x01,0x2a,0x64,0xc6, -/*003850*/ 0xc7,0xc8,0x65,0xc5,0x64,0xfe,0xd6,0xc6,0xc6,0x00,0x00,0x01,0x00,0x01,0x00,0x01, -/*003860*/ 0x01,0x8f,0x01,0x8f,0x00,0x0b,0x00,0x65,0x40,0x2b,0x01,0x0c,0x0c,0x40,0x0d,0x00, -/*003870*/ 0x02,0x01,0x05,0x05,0x0a,0x09,0x05,0x0b,0x00,0x08,0x07,0x04,0x03,0x03,0x04,0x06, -/*003880*/ 0x05,0x03,0x02,0x06,0x09,0x01,0x00,0x03,0x08,0x0b,0x0a,0x07,0x03,0x06,0x02,0x05, -/*003890*/ 0x04,0x01,0x01,0x05,0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x3c,0x3f,0x17,0x3c,0x2f, -/*0038a0*/ 0x17,0x3c,0xfd,0x3c,0x01,0x2f,0x3c,0xfd,0x17,0x3c,0x2f,0x3c,0xfd,0x3c,0x10,0xfd, -/*0038b0*/ 0x3c,0x00,0x31,0x30,0x01,0x49,0x68,0xb9,0x00,0x05,0x00,0x0c,0x49,0x68,0x61,0xb0, -/*0038c0*/ 0x40,0x52,0x58,0x38,0x11,0x37,0xb9,0x00,0x0c,0xff,0xc0,0x38,0x59,0x01,0x23,0x15, -/*0038d0*/ 0x23,0x15,0x23,0x11,0x33,0x15,0x33,0x35,0x33,0x01,0x8f,0xc9,0x64,0x61,0x62,0x67, -/*0038e0*/ 0xc5,0x01,0x2d,0x64,0xc8,0x01,0x8e,0x64,0x64,0x00,0x00,0x01,0x00,0x01,0x00,0x01, -/*0038f0*/ 0x01,0x8f,0x01,0x8f,0x00,0x0f,0x00,0x85,0x40,0x3f,0x01,0x10,0x10,0x40,0x11,0x00, -/*003900*/ 0x0a,0x09,0x08,0x05,0x0f,0x0c,0x0b,0x03,0x00,0x05,0x05,0x08,0x07,0x04,0x03,0x03, -/*003910*/ 0x05,0x0d,0x0e,0x0d,0x06,0x03,0x05,0x04,0x02,0x01,0x0f,0x0e,0x06,0x00,0x05,0x01, -/*003920*/ 0x00,0x03,0x04,0x06,0x02,0x07,0x06,0x06,0x08,0x0d,0x09,0x08,0x03,0x0c,0x06,0x0a, -/*003930*/ 0x0b,0x0a,0x02,0x03,0x02,0x01,0x01,0x03,0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x3c, -/*003940*/ 0x3f,0x3c,0x10,0xfd,0x17,0x3c,0x10,0xfd,0x3c,0x10,0xfd,0x17,0x3c,0x10,0xfd,0x3c, -/*003950*/ 0x01,0x2f,0x3c,0xfd,0x17,0x3c,0x10,0xfd,0x17,0x3c,0x10,0xfd,0x17,0x3c,0x10,0xfd, -/*003960*/ 0x3c,0x00,0x31,0x30,0x01,0x49,0x68,0xb9,0x00,0x03,0x00,0x10,0x49,0x68,0x61,0xb0, -/*003970*/ 0x40,0x52,0x58,0x38,0x11,0x37,0xb9,0x00,0x10,0xff,0xc0,0x38,0x59,0x25,0x23,0x15, -/*003980*/ 0x21,0x35,0x33,0x35,0x23,0x35,0x33,0x35,0x21,0x15,0x23,0x15,0x33,0x01,0x8f,0x65, -/*003990*/ 0xfe,0xd7,0xc8,0xc8,0x64,0x01,0x2a,0xc8,0xc8,0x65,0x64,0x62,0x67,0x61,0x64,0x62, -/*0039a0*/ 0x67,0x00,0x00,0x01,0x00,0x01,0x00,0x01,0x01,0x2b,0x01,0xf3,0x00,0x0b,0x00,0x64, -/*0039b0*/ 0x40,0x2a,0x01,0x0c,0x0c,0x40,0x0d,0x00,0x03,0x02,0x0b,0x08,0x07,0x03,0x00,0x05, -/*0039c0*/ 0x01,0x0a,0x09,0x06,0x02,0x01,0x05,0x05,0x04,0x04,0x03,0x0b,0x0a,0x06,0x00,0x09, -/*0039d0*/ 0x08,0x06,0x07,0x06,0x05,0x04,0x01,0x00,0x01,0x01,0x03,0x46,0x76,0x2f,0x37,0x18, -/*0039e0*/ 0x00,0x3f,0x3c,0x2f,0x3c,0x2f,0x3c,0xfd,0x3c,0x10,0xfd,0x3c,0x01,0x2f,0x3c,0xfd, -/*0039f0*/ 0x17,0x3c,0x10,0xfd,0x17,0x3c,0x00,0x2e,0x2e,0x31,0x30,0x01,0x49,0x68,0xb9,0x00, -/*003a00*/ 0x03,0x00,0x0c,0x49,0x68,0x61,0xb0,0x40,0x52,0x58,0x38,0x11,0x37,0xb9,0x00,0x0c, -/*003a10*/ 0xff,0xc0,0x38,0x59,0x25,0x23,0x35,0x23,0x11,0x33,0x15,0x33,0x15,0x23,0x15,0x33, -/*003a20*/ 0x01,0x2b,0xc6,0x64,0x62,0xc8,0xc8,0xc8,0x01,0x65,0x01,0x8d,0x65,0x61,0xca,0x00, -/*003a30*/ 0x00,0x01,0x00,0x01,0x00,0x01,0x01,0x8f,0x01,0x8f,0x00,0x09,0x00,0x5c,0x40,0x25, -/*003a40*/ 0x01,0x0a,0x0a,0x40,0x0b,0x00,0x03,0x02,0x06,0x02,0x01,0x03,0x05,0x04,0x04,0x03, -/*003a50*/ 0x08,0x07,0x04,0x09,0x00,0x07,0x06,0x06,0x00,0x09,0x08,0x05,0x03,0x04,0x02,0x01, -/*003a60*/ 0x00,0x01,0x01,0x03,0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x3c,0x3f,0x17,0x3c,0x10, -/*003a70*/ 0xfd,0x3c,0x01,0x2f,0x3c,0xfd,0x3c,0x2f,0x3c,0xfd,0x17,0x3c,0x00,0x2e,0x2e,0x31, -/*003a80*/ 0x30,0x01,0x49,0x68,0xb9,0x00,0x03,0x00,0x0a,0x49,0x68,0x61,0xb0,0x40,0x52,0x58, -/*003a90*/ 0x38,0x11,0x37,0xb9,0x00,0x0a,0xff,0xc0,0x38,0x59,0x25,0x21,0x35,0x23,0x11,0x33, -/*003aa0*/ 0x11,0x33,0x11,0x33,0x01,0x8f,0xfe,0xd6,0x64,0x62,0xca,0x62,0x01,0x65,0x01,0x29, -/*003ab0*/ 0xfe,0xd4,0x01,0x2c,0x00,0x01,0x00,0x01,0x00,0x01,0x01,0x8f,0x01,0x8f,0x00,0x0b, -/*003ac0*/ 0x00,0x65,0x40,0x2c,0x01,0x0c,0x0c,0x40,0x0d,0x00,0x02,0x01,0x05,0x03,0x08,0x04, -/*003ad0*/ 0x03,0x03,0x07,0x04,0x06,0x05,0x0a,0x09,0x04,0x0b,0x00,0x09,0x05,0x04,0x01,0x00, -/*003ae0*/ 0x05,0x08,0x07,0x02,0x0b,0x0a,0x07,0x03,0x06,0x02,0x03,0x02,0x01,0x01,0x05,0x46, -/*003af0*/ 0x76,0x2f,0x37,0x18,0x00,0x3f,0x3c,0x3f,0x17,0x3c,0x10,0xfd,0x17,0x3c,0x01,0x2f, -/*003b00*/ 0x3c,0xfd,0x3c,0x2f,0x3c,0xfd,0x17,0x3c,0x10,0xfd,0x3c,0x00,0x31,0x30,0x01,0x49, -/*003b10*/ 0x68,0xb9,0x00,0x05,0x00,0x0c,0x49,0x68,0x61,0xb0,0x40,0x52,0x58,0x38,0x11,0x37, -/*003b20*/ 0xb9,0x00,0x0c,0xff,0xc0,0x38,0x59,0x25,0x23,0x15,0x23,0x35,0x23,0x35,0x33,0x15, -/*003b30*/ 0x33,0x35,0x33,0x01,0x8f,0x65,0xc5,0x64,0x62,0xca,0x62,0xc9,0xc8,0xc8,0xc6,0xc8, -/*003b40*/ 0xc8,0x00,0x00,0x01,0x00,0x01,0x00,0x01,0x01,0xf3,0x01,0x8f,0x00,0x0d,0x00,0x6b, -/*003b50*/ 0x40,0x2f,0x01,0x0e,0x0e,0x40,0x0f,0x00,0x03,0x02,0x06,0x02,0x01,0x03,0x05,0x04, -/*003b60*/ 0x04,0x03,0x08,0x07,0x04,0x0a,0x09,0x0c,0x0b,0x04,0x0d,0x00,0x0b,0x0a,0x07,0x03, -/*003b70*/ 0x06,0x06,0x00,0x0d,0x0c,0x09,0x08,0x05,0x05,0x04,0x02,0x01,0x00,0x01,0x01,0x03, -/*003b80*/ 0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x3c,0x3f,0x17,0x3c,0x10,0xfd,0x17,0x3c,0x01, -/*003b90*/ 0x2f,0x3c,0xfd,0x3c,0x2f,0x3c,0xfd,0x3c,0x2f,0x3c,0xfd,0x17,0x3c,0x00,0x2e,0x2e, -/*003ba0*/ 0x31,0x30,0x01,0x49,0x68,0xb9,0x00,0x03,0x00,0x0e,0x49,0x68,0x61,0xb0,0x40,0x52, -/*003bb0*/ 0x58,0x38,0x11,0x37,0xb9,0x00,0x0e,0xff,0xc0,0x38,0x59,0x25,0x21,0x35,0x23,0x11, -/*003bc0*/ 0x33,0x11,0x33,0x11,0x33,0x11,0x33,0x11,0x33,0x01,0xf3,0xfe,0x72,0x64,0x62,0x67, -/*003bd0*/ 0x61,0x67,0x61,0x01,0x65,0x01,0x29,0xfe,0xd4,0x01,0x2c,0xfe,0xd4,0x01,0x2c,0x00, -/*003be0*/ 0x00,0x01,0x00,0x01,0x00,0x01,0x01,0x8f,0x01,0x8f,0x00,0x13,0x00,0x89,0x40,0x45, -/*003bf0*/ 0x01,0x14,0x14,0x40,0x15,0x00,0x0c,0x0b,0x05,0x01,0x12,0x11,0x06,0x02,0x01,0x05, -/*003c00*/ 0x05,0x04,0x13,0x04,0x03,0x03,0x00,0x10,0x0f,0x08,0x03,0x07,0x04,0x0e,0x0d,0x0a, -/*003c10*/ 0x03,0x09,0x07,0x06,0x07,0x10,0x11,0x10,0x0d,0x0c,0x01,0x05,0x00,0x06,0x0e,0x0b, -/*003c20*/ 0x0a,0x03,0x03,0x02,0x06,0x04,0x13,0x12,0x0f,0x03,0x0e,0x02,0x09,0x08,0x05,0x03, -/*003c30*/ 0x04,0x01,0x01,0x09,0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x17,0x3c,0x3f,0x17,0x3c, -/*003c40*/ 0x10,0xfd,0x17,0x3c,0x10,0xfd,0x17,0x3c,0x10,0xfd,0x3c,0x01,0x2f,0x17,0x3c,0xfd, -/*003c50*/ 0x17,0x3c,0x2f,0x17,0x3c,0xfd,0x17,0x3c,0x10,0xfd,0x3c,0x00,0x31,0x30,0x01,0x49, -/*003c60*/ 0x68,0xb9,0x00,0x09,0x00,0x14,0x49,0x68,0x61,0xb0,0x40,0x52,0x58,0x38,0x11,0x37, -/*003c70*/ 0xb9,0x00,0x14,0xff,0xc0,0x38,0x59,0x01,0x23,0x15,0x33,0x15,0x23,0x35,0x23,0x15, -/*003c80*/ 0x23,0x35,0x33,0x35,0x23,0x35,0x33,0x15,0x33,0x35,0x33,0x01,0x8f,0x64,0x64,0x62, -/*003c90*/ 0xcb,0x61,0x64,0x64,0x62,0xcb,0x61,0x01,0x2d,0xcb,0x61,0x64,0x64,0x62,0xca,0x62, -/*003ca0*/ 0x64,0x64,0x00,0x01,0x00,0x01,0xff,0x39,0x01,0x8f,0x01,0x8f,0x00,0x0f,0x00,0x76, -/*003cb0*/ 0x40,0x36,0x01,0x10,0x10,0x40,0x11,0x00,0x09,0x08,0x02,0x01,0x05,0x03,0x0e,0x0d, -/*003cc0*/ 0x06,0x03,0x05,0x04,0x0f,0x00,0x0c,0x08,0x07,0x04,0x03,0x05,0x0b,0x04,0x0a,0x09, -/*003cd0*/ 0x05,0x01,0x00,0x03,0x04,0x06,0x02,0x0d,0x0c,0x06,0x07,0x06,0x0f,0x0e,0x0b,0x03, -/*003ce0*/ 0x0a,0x02,0x03,0x02,0x00,0x01,0x09,0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x3c,0x3f, -/*003cf0*/ 0x17,0x3c,0x2f,0x3c,0xfd,0x3c,0x10,0xfd,0x17,0x3c,0x01,0x2f,0x3c,0xfd,0x17,0x3c, -/*003d00*/ 0x2f,0x3c,0xfd,0x17,0x3c,0x10,0xfd,0x3c,0x00,0x2e,0x2e,0x31,0x30,0x01,0x49,0x68, -/*003d10*/ 0xb9,0x00,0x09,0x00,0x10,0x49,0x68,0x61,0xb0,0x40,0x52,0x58,0x38,0x11,0x37,0xb9, -/*003d20*/ 0x00,0x10,0xff,0xc0,0x38,0x59,0x05,0x23,0x15,0x23,0x35,0x33,0x35,0x23,0x35,0x23, -/*003d30*/ 0x11,0x33,0x11,0x33,0x11,0x33,0x01,0x8f,0x65,0xc5,0xc8,0xc8,0x64,0x62,0xca,0x62, -/*003d40*/ 0x63,0x64,0x62,0x67,0x64,0x01,0x29,0xfe,0xd4,0x01,0x2c,0x00,0x00,0x01,0x00,0x01, -/*003d50*/ 0x00,0x01,0x01,0x8f,0x01,0x8f,0x00,0x0f,0x00,0x7c,0x40,0x38,0x01,0x10,0x10,0x40, -/*003d60*/ 0x11,0x00,0x0f,0x0a,0x09,0x08,0x07,0x02,0x01,0x00,0x04,0x03,0x04,0x0d,0x0e,0x0d, -/*003d70*/ 0x06,0x03,0x05,0x04,0x0c,0x0b,0x0d,0x05,0x04,0x03,0x0c,0x07,0x08,0x0f,0x0e,0x03, -/*003d80*/ 0x03,0x02,0x06,0x00,0x0b,0x0a,0x07,0x03,0x06,0x06,0x08,0x09,0x08,0x02,0x01,0x00, -/*003d90*/ 0x01,0x01,0x01,0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x3c,0x3f,0x3c,0x10,0xfd,0x17, -/*003da0*/ 0x3c,0x10,0xfd,0x17,0x3c,0x10,0xfd,0x17,0x3c,0x01,0x2f,0x3c,0xfd,0x17,0x3c,0x10, -/*003db0*/ 0xfd,0x3c,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x00,0x31,0x30,0x01,0x49,0x68, -/*003dc0*/ 0xb9,0x00,0x01,0x00,0x10,0x49,0x68,0x61,0xb0,0x40,0x52,0x58,0x38,0x11,0x37,0xb9, -/*003dd0*/ 0x00,0x10,0xff,0xc0,0x38,0x59,0x25,0x21,0x35,0x33,0x35,0x33,0x35,0x23,0x35,0x21, -/*003de0*/ 0x15,0x23,0x15,0x23,0x15,0x33,0x01,0x8f,0xfe,0x72,0x65,0x63,0xc8,0x01,0x8e,0x65, -/*003df0*/ 0x63,0xc8,0x01,0x62,0x64,0x66,0x62,0x62,0x64,0x67,0x00,0x01,0x00,0x01,0xff,0x9d, -/*003e00*/ 0x01,0x2b,0x02,0x57,0x00,0x13,0x00,0x89,0x40,0x42,0x01,0x14,0x14,0x40,0x15,0x00, -/*003e10*/ 0x10,0x0f,0x13,0x08,0x07,0x03,0x00,0x04,0x09,0x12,0x11,0x0a,0x09,0x06,0x02,0x01, -/*003e20*/ 0x07,0x05,0x04,0x0b,0x0c,0x0b,0x04,0x03,0x03,0x04,0x0e,0x0d,0x05,0x04,0x07,0x0b, -/*003e30*/ 0x0a,0x11,0x10,0x01,0x03,0x00,0x06,0x12,0x07,0x06,0x06,0x08,0x0d,0x0c,0x06,0x0f, -/*003e40*/ 0x03,0x02,0x03,0x0e,0x09,0x08,0x13,0x12,0x03,0x01,0x0d,0x46,0x76,0x2f,0x37,0x18, -/*003e50*/ 0x00,0x3f,0x3c,0x2f,0x3c,0x2f,0x17,0x3c,0xfd,0x3c,0x10,0xfd,0x3c,0x10,0xfd,0x17, -/*003e60*/ 0x3c,0x2f,0x3c,0xfd,0x3c,0x01,0x2f,0x3c,0xfd,0x17,0x3c,0x10,0xfd,0x17,0x3c,0x10, -/*003e70*/ 0xfd,0x17,0x3c,0x2e,0x2e,0x00,0x31,0x30,0x01,0x49,0x68,0xb9,0x00,0x0d,0x00,0x14, -/*003e80*/ 0x49,0x68,0x61,0xb0,0x40,0x52,0x58,0x38,0x11,0x37,0xb9,0x00,0x14,0xff,0xc0,0x38, -/*003e90*/ 0x59,0x01,0x23,0x15,0x23,0x15,0x33,0x15,0x33,0x15,0x23,0x35,0x23,0x35,0x23,0x35, -/*003ea0*/ 0x33,0x35,0x33,0x35,0x33,0x01,0x2b,0x65,0x63,0x64,0x64,0x62,0x64,0x64,0x65,0x63, -/*003eb0*/ 0x62,0x01,0xf5,0xc8,0x67,0xc8,0x61,0x65,0xc8,0x61,0xc8,0x64,0x00,0x01,0x00,0x01, -/*003ec0*/ 0x00,0x01,0x00,0x63,0x02,0x57,0x00,0x03,0x00,0x40,0x40,0x14,0x01,0x04,0x04,0x40, -/*003ed0*/ 0x05,0x00,0x02,0x01,0x04,0x03,0x00,0x03,0x02,0x03,0x01,0x00,0x01,0x01,0x01,0x46, -/*003ee0*/ 0x76,0x2f,0x37,0x18,0x00,0x3f,0x3c,0x3f,0x3c,0x01,0x2f,0x3c,0xfd,0x3c,0x00,0x31, -/*003ef0*/ 0x30,0x01,0x49,0x68,0xb9,0x00,0x01,0x00,0x04,0x49,0x68,0x61,0xb0,0x40,0x52,0x58, -/*003f00*/ 0x38,0x11,0x37,0xb9,0x00,0x04,0xff,0xc0,0x38,0x59,0x37,0x23,0x11,0x33,0x63,0x62, -/*003f10*/ 0x62,0x01,0x02,0x56,0x00,0x01,0x00,0x01,0xff,0x9d,0x01,0x2b,0x02,0x57,0x00,0x13, -/*003f20*/ 0x00,0x8a,0x40,0x41,0x01,0x14,0x14,0x40,0x15,0x00,0x10,0x0f,0x04,0x03,0x03,0x04, -/*003f30*/ 0x0e,0x0d,0x06,0x03,0x05,0x0c,0x0b,0x08,0x03,0x07,0x04,0x02,0x01,0x12,0x11,0x0a, -/*003f40*/ 0x03,0x09,0x04,0x13,0x00,0x0b,0x0a,0x07,0x11,0x10,0x13,0x12,0x06,0x09,0x08,0x01, -/*003f50*/ 0x03,0x00,0x07,0x06,0x06,0x04,0x0d,0x0c,0x06,0x0e,0x05,0x04,0x0f,0x0e,0x03,0x03, -/*003f60*/ 0x02,0x01,0x01,0x05,0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x3c,0x3f,0x3c,0x2f,0x3c, -/*003f70*/ 0x10,0xfd,0x3c,0x10,0xfd,0x3c,0x2f,0x17,0x3c,0xfd,0x3c,0x2f,0x3c,0xfd,0x3c,0x01, -/*003f80*/ 0x2f,0x3c,0xfd,0x17,0x3c,0x2f,0x3c,0xfd,0x17,0x3c,0x2f,0x17,0x3c,0xfd,0x17,0x3c, -/*003f90*/ 0x00,0x31,0x30,0x01,0x49,0x68,0xb9,0x00,0x05,0x00,0x14,0x49,0x68,0x61,0xb0,0x40, -/*003fa0*/ 0x52,0x58,0x38,0x11,0x37,0xb9,0x00,0x14,0xff,0xc0,0x38,0x59,0x25,0x23,0x15,0x23, -/*003fb0*/ 0x15,0x23,0x35,0x33,0x35,0x33,0x35,0x23,0x35,0x23,0x35,0x33,0x15,0x33,0x15,0x33, -/*003fc0*/ 0x01,0x2b,0x65,0x64,0x61,0x65,0x63,0x64,0x64,0x62,0x64,0x64,0xc9,0xc8,0x64,0x62, -/*003fd0*/ 0xc8,0x67,0xc7,0x62,0x65,0xc8,0x00,0x01,0x00,0x01,0x01,0x91,0x01,0x8f,0x02,0x57, -/*003fe0*/ 0x00,0x0f,0x00,0x73,0x40,0x35,0x01,0x10,0x10,0x40,0x11,0x00,0x02,0x01,0x04,0x03, -/*003ff0*/ 0x06,0x05,0x04,0x08,0x07,0x0c,0x04,0x03,0x03,0x0b,0x04,0x0a,0x09,0x0e,0x0d,0x04, -/*004000*/ 0x0f,0x00,0x0d,0x0c,0x09,0x05,0x04,0x01,0x00,0x07,0x08,0x06,0x02,0x07,0x06,0x03, -/*004010*/ 0x03,0x02,0x0f,0x0e,0x0b,0x03,0x0a,0x03,0x01,0x07,0x46,0x76,0x2f,0x37,0x18,0x00, -/*004020*/ 0x3f,0x17,0x3c,0x2f,0x17,0x3c,0x10,0xfd,0x17,0x3c,0x01,0x2f,0x3c,0xfd,0x3c,0x2f, -/*004030*/ 0x3c,0xfd,0x17,0x3c,0x2f,0x3c,0xfd,0x3c,0x10,0xfd,0x3c,0x00,0x31,0x30,0x01,0x49, -/*004040*/ 0x68,0xb9,0x00,0x07,0x00,0x10,0x49,0x68,0x61,0xb0,0x40,0x52,0x58,0x38,0x11,0x37, -/*004050*/ 0xb9,0x00,0x10,0xff,0xc0,0x38,0x59,0x01,0x23,0x15,0x23,0x35,0x23,0x15,0x23,0x35, -/*004060*/ 0x33,0x35,0x33,0x15,0x33,0x35,0x33,0x01,0x8f,0x65,0x61,0x67,0x61,0x64,0x62,0x67, -/*004070*/ 0x61,0x01,0xf5,0x64,0x64,0x64,0x62,0x64,0x64,0x64,0x00,0x01,0x00,0x01,0x00,0x01, -/*004080*/ 0x01,0xf3,0x02,0x57,0x00,0x17,0x00,0x95,0x40,0x4a,0x01,0x18,0x18,0x40,0x19,0x00, -/*004090*/ 0x17,0x0e,0x0d,0x0a,0x09,0x04,0x03,0x00,0x06,0x02,0x01,0x03,0x05,0x04,0x07,0x12, -/*0040a0*/ 0x0c,0x0b,0x08,0x07,0x05,0x11,0x04,0x10,0x0f,0x14,0x13,0x04,0x16,0x15,0x0d,0x0c, -/*0040b0*/ 0x01,0x03,0x00,0x06,0x16,0x0b,0x0a,0x03,0x03,0x02,0x06,0x09,0x08,0x05,0x03,0x04, -/*0040c0*/ 0x15,0x14,0x11,0x03,0x10,0x03,0x17,0x16,0x13,0x12,0x0f,0x05,0x0e,0x02,0x07,0x06, -/*0040d0*/ 0x01,0x01,0x09,0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x3c,0x3f,0x17,0x3c,0x3f,0x17, -/*0040e0*/ 0x3c,0x2f,0x17,0x3c,0xfd,0x17,0x3c,0x10,0xfd,0x17,0x3c,0x01,0x2f,0x3c,0xfd,0x3c, -/*0040f0*/ 0x2f,0x3c,0xfd,0x17,0x3c,0x10,0xfd,0x17,0x3c,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e, -/*004100*/ 0x2e,0x00,0x31,0x30,0x01,0x49,0x68,0xb9,0x00,0x09,0x00,0x18,0x49,0x68,0x61,0xb0, -/*004110*/ 0x40,0x52,0x58,0x38,0x11,0x37,0xb9,0x00,0x18,0xff,0xc0,0x38,0x59,0x01,0x23,0x15, -/*004120*/ 0x33,0x15,0x23,0x15,0x23,0x35,0x23,0x35,0x33,0x35,0x23,0x35,0x33,0x35,0x33,0x15, -/*004130*/ 0x33,0x35,0x33,0x15,0x33,0x01,0xf3,0xc8,0xc8,0xc9,0x61,0xc8,0xc8,0xc8,0x64,0x62, -/*004140*/ 0x67,0x61,0x64,0x01,0x2d,0x67,0x61,0x64,0x65,0x61,0x67,0x61,0xc8,0xc8,0xc8,0xc9, -/*004150*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0x7a, -/*004160*/ 0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0xf0,0x00,0x00,0x01,0x64,0x00,0x00,0x02,0x6a, -/*004170*/ 0x00,0x00,0x03,0x2a,0x00,0x00,0x04,0x78,0x00,0x00,0x05,0xac,0x00,0x00,0x06,0x04, -/*004180*/ 0x00,0x00,0x06,0x96,0x00,0x00,0x07,0x26,0x00,0x00,0x07,0xe2,0x00,0x00,0x08,0x70, -/*004190*/ 0x00,0x00,0x08,0xe2,0x00,0x00,0x09,0x3a,0x00,0x00,0x09,0x90,0x00,0x00,0x0a,0x22, -/*0041a0*/ 0x00,0x00,0x0b,0x00,0x00,0x00,0x0b,0x76,0x00,0x00,0x0c,0x62,0x00,0x00,0x0d,0x4e, -/*0041b0*/ 0x00,0x00,0x0d,0xe8,0x00,0x00,0x0e,0x9a,0x00,0x00,0x0f,0x6c,0x00,0x00,0x10,0x1c, -/*0041c0*/ 0x00,0x00,0x11,0x00,0x00,0x00,0x11,0xd0,0x00,0x00,0x12,0x48,0x00,0x00,0x12,0xc0, -/*0041d0*/ 0x00,0x00,0x13,0x84,0x00,0x00,0x14,0x00,0x00,0x00,0x14,0xc6,0x00,0x00,0x15,0x8a, -/*0041e0*/ 0x00,0x00,0x16,0x5e,0x00,0x00,0x16,0xfc,0x00,0x00,0x17,0xc0,0x00,0x00,0x18,0x54, -/*0041f0*/ 0x00,0x00,0x18,0xea,0x00,0x00,0x19,0x8a,0x00,0x00,0x1a,0x1a,0x00,0x00,0x1a,0xcc, -/*004200*/ 0x00,0x00,0x1b,0x5c,0x00,0x00,0x1b,0xf4,0x00,0x00,0x1c,0x7c,0x00,0x00,0x1d,0x26, -/*004210*/ 0x00,0x00,0x1d,0x9e,0x00,0x00,0x1e,0x64,0x00,0x00,0x1f,0x10,0x00,0x00,0x1f,0xb6, -/*004220*/ 0x00,0x00,0x20,0x54,0x00,0x00,0x21,0x1c,0x00,0x00,0x21,0xd2,0x00,0x00,0x22,0xba, -/*004230*/ 0x00,0x00,0x23,0x32,0x00,0x00,0x23,0xc4,0x00,0x00,0x24,0x72,0x00,0x00,0x25,0x36, -/*004240*/ 0x00,0x00,0x25,0xf6,0x00,0x00,0x26,0xa0,0x00,0x00,0x27,0x6c,0x00,0x00,0x27,0xe6, -/*004250*/ 0x00,0x00,0x28,0x7c,0x00,0x00,0x28,0xf6,0x00,0x00,0x29,0x88,0x00,0x00,0x29,0xe0, -/*004260*/ 0x00,0x00,0x2a,0x74,0x00,0x00,0x2b,0x14,0x00,0x00,0x2b,0xa8,0x00,0x00,0x2c,0x48, -/*004270*/ 0x00,0x00,0x2d,0x0a,0x00,0x00,0x2d,0x9e,0x00,0x00,0x2e,0x52,0x00,0x00,0x2e,0xe2, -/*004280*/ 0x00,0x00,0x2f,0x5a,0x00,0x00,0x2f,0xee,0x00,0x00,0x30,0x9a,0x00,0x00,0x30,0xf2, -/*004290*/ 0x00,0x00,0x31,0x90,0x00,0x00,0x32,0x14,0x00,0x00,0x32,0xb6,0x00,0x00,0x33,0x56, -/*0042a0*/ 0x00,0x00,0x33,0xf6,0x00,0x00,0x34,0x86,0x00,0x00,0x35,0x3e,0x00,0x00,0x35,0xcc, -/*0042b0*/ 0x00,0x00,0x36,0x50,0x00,0x00,0x36,0xde,0x00,0x00,0x37,0x7c,0x00,0x00,0x38,0x3e, -/*0042c0*/ 0x00,0x00,0x38,0xe8,0x00,0x00,0x39,0x96,0x00,0x00,0x3a,0x58,0x00,0x00,0x3a,0xb0, -/*0042d0*/ 0x00,0x00,0x3b,0x72,0x00,0x00,0x3c,0x16,0x00,0x00,0x3c,0xec,0x00,0x00,0x3c,0xec, -/*0042e0*/ 0x01,0x90,0x00,0x32,0x00,0x00,0x00,0x00,0x01,0x2c,0x00,0x00,0x01,0x2c,0x00,0x00, -/*0042f0*/ 0x00,0xc8,0x00,0x01,0x01,0x90,0x00,0x01,0x02,0x58,0x00,0x01,0x02,0x58,0x00,0x01, -/*004300*/ 0x03,0x20,0x00,0x01,0x02,0x58,0x00,0x01,0x00,0xc8,0x00,0x01,0x01,0x2c,0x00,0x01, -/*004310*/ 0x01,0x2c,0x00,0x01,0x01,0x90,0x00,0x01,0x01,0x90,0x00,0x01,0x01,0x2c,0x00,0x01, -/*004320*/ 0x01,0x90,0x00,0x01,0x00,0xc8,0x00,0x01,0x01,0x90,0x00,0x01,0x01,0xf4,0x00,0x01, -/*004330*/ 0x01,0xf4,0x00,0x65,0x01,0xf4,0x00,0x01,0x01,0xf4,0x00,0x01,0x01,0xf4,0x00,0x01, -/*004340*/ 0x01,0xf4,0x00,0x01,0x01,0xf4,0x00,0x01,0x01,0xf4,0x00,0x01,0x01,0xf4,0x00,0x01, -/*004350*/ 0x01,0xf4,0x00,0x01,0x00,0xc8,0x00,0x01,0x00,0xc8,0x00,0x01,0x01,0x90,0x00,0x01, -/*004360*/ 0x01,0x90,0x00,0x01,0x01,0x90,0x00,0x01,0x01,0xf4,0x00,0x01,0x02,0x58,0x00,0x01, -/*004370*/ 0x01,0xf4,0x00,0x01,0x01,0xf4,0x00,0x01,0x01,0xf4,0x00,0x01,0x01,0xf4,0x00,0x01, -/*004380*/ 0x01,0xf4,0x00,0x01,0x01,0xf4,0x00,0x01,0x01,0xf4,0x00,0x01,0x01,0xf4,0x00,0x01, -/*004390*/ 0x01,0x90,0x00,0x01,0x01,0xf4,0x00,0x01,0x01,0xf4,0x00,0x01,0x01,0xf4,0x00,0x01, -/*0043a0*/ 0x02,0x58,0x00,0x01,0x01,0xf4,0x00,0x01,0x01,0xf4,0x00,0x01,0x01,0xf4,0x00,0x01, -/*0043b0*/ 0x01,0xf4,0x00,0x01,0x01,0xf4,0x00,0x01,0x01,0xf4,0x00,0x01,0x02,0x58,0x00,0x01, -/*0043c0*/ 0x01,0xf4,0x00,0x01,0x01,0xf4,0x00,0x01,0x02,0x58,0x00,0x01,0x01,0xf4,0x00,0x01, -/*0043d0*/ 0x01,0xf4,0x00,0x01,0x01,0xf4,0x00,0x01,0x01,0x2c,0x00,0x01,0x01,0x90,0x00,0x01, -/*0043e0*/ 0x01,0x2c,0x00,0x01,0x01,0x90,0x00,0x01,0x01,0xf4,0x00,0x01,0x01,0xf4,0x00,0x01, -/*0043f0*/ 0x01,0xf4,0x00,0x01,0x01,0xf4,0x00,0x01,0x01,0xf4,0x00,0x01,0x01,0xf4,0x00,0x01, -/*004400*/ 0x01,0x90,0x00,0x01,0x01,0xf4,0x00,0x01,0x01,0xf4,0x00,0x01,0x00,0xc8,0x00,0x01, -/*004410*/ 0x01,0x2c,0x00,0x01,0x01,0xf4,0x00,0x01,0x00,0xc8,0x00,0x01,0x02,0x58,0x00,0x01, -/*004420*/ 0x01,0xf4,0x00,0x01,0x01,0xf4,0x00,0x01,0x01,0xf4,0x00,0x01,0x01,0xf4,0x00,0x01, -/*004430*/ 0x01,0xf4,0x00,0x01,0x01,0xf4,0x00,0x01,0x01,0x90,0x00,0x01,0x01,0xf4,0x00,0x01, -/*004440*/ 0x01,0xf4,0x00,0x01,0x02,0x58,0x00,0x01,0x01,0xf4,0x00,0x01,0x01,0xf4,0x00,0x01, -/*004450*/ 0x01,0xf4,0x00,0x01,0x01,0x90,0x00,0x01,0x00,0xc8,0x00,0x01,0x01,0x90,0x00,0x01, -/*004460*/ 0x01,0xf4,0x00,0x01,0x02,0x58,0x00,0x01,0x01,0x90,0x00,0x00,0x00,0x02,0x00,0x00, -/*004470*/ 0x00,0x00,0x00,0x00,0xff,0x7b,0x00,0x14,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -/*004480*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x63,0x00,0x00, -/*004490*/ 0x00,0x01,0x00,0x02,0x00,0x03,0x00,0x04,0x00,0x05,0x00,0x06,0x00,0x07,0x00,0x08, -/*0044a0*/ 0x00,0x09,0x00,0x0a,0x00,0x0b,0x00,0x0c,0x00,0x0d,0x00,0x0e,0x00,0x0f,0x00,0x10, -/*0044b0*/ 0x00,0x11,0x00,0x12,0x00,0x13,0x00,0x14,0x00,0x15,0x00,0x16,0x00,0x17,0x00,0x18, -/*0044c0*/ 0x00,0x19,0x00,0x1a,0x00,0x1b,0x00,0x1c,0x00,0x1d,0x00,0x1e,0x00,0x1f,0x00,0x20, -/*0044d0*/ 0x00,0x21,0x00,0x22,0x00,0x23,0x00,0x24,0x00,0x25,0x00,0x26,0x00,0x27,0x00,0x28, -/*0044e0*/ 0x00,0x29,0x00,0x2a,0x00,0x2b,0x00,0x2c,0x00,0x2d,0x00,0x2e,0x00,0x2f,0x00,0x30, -/*0044f0*/ 0x00,0x31,0x00,0x32,0x00,0x33,0x00,0x34,0x00,0x35,0x00,0x36,0x00,0x37,0x00,0x38, -/*004500*/ 0x00,0x39,0x00,0x3a,0x00,0x3b,0x00,0x3c,0x00,0x3d,0x00,0x3e,0x00,0x3f,0x00,0x40, -/*004510*/ 0x00,0x41,0x00,0x42,0x00,0x44,0x00,0x45,0x00,0x46,0x00,0x47,0x00,0x48,0x00,0x49, -/*004520*/ 0x00,0x4a,0x00,0x4b,0x00,0x4c,0x00,0x4d,0x00,0x4e,0x00,0x4f,0x00,0x50,0x00,0x51, -/*004530*/ 0x00,0x52,0x00,0x53,0x00,0x54,0x00,0x55,0x00,0x56,0x00,0x57,0x00,0x58,0x00,0x59, -/*004540*/ 0x00,0x5a,0x00,0x5b,0x00,0x5c,0x00,0x5d,0x00,0x5e,0x00,0x5f,0x00,0x60,0x00,0x61, -/*004550*/ 0x00,0x96,0x00,0xac,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x24, -/*004560*/ 0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x1c,0x00,0x03,0x00,0x01,0x00,0x00,0x01,0x24, -/*004570*/ 0x00,0x00,0x01,0x06,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03, -/*004580*/ 0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -/*004590*/ 0x00,0x00,0x00,0x01,0x00,0x00,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c, -/*0045a0*/ 0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c, -/*0045b0*/ 0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c, -/*0045c0*/ 0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c, -/*0045d0*/ 0x3d,0x3e,0x3f,0x40,0x41,0x42,0x00,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x4b, -/*0045e0*/ 0x4c,0x4d,0x4e,0x4f,0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a,0x5b, -/*0045f0*/ 0x5c,0x5d,0x5e,0x5f,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -/*004600*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -/*004610*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x00, -/*004620*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -/*004630*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -/*004640*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00, -/*004650*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -/*004660*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -/*004670*/ 0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x04,0x01,0x04,0x00,0x00,0x00,0x0c, -/*004680*/ 0x00,0x08,0x00,0x02,0x00,0x04,0x00,0x5f,0x00,0x7e,0x00,0xa0,0x00,0xa5,0x20,0x10, -/*004690*/ 0xff,0xff,0x00,0x00,0x00,0x20,0x00,0x61,0x00,0xa0,0x00,0xa5,0x20,0x10,0xff,0xff, -/*0046a0*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x0c,0x00,0x8a, -/*0046b0*/ 0x00,0xc4,0x00,0xc4,0x00,0xc4,0xff,0xff,0x00,0x03,0x00,0x04,0x00,0x05,0x00,0x06, -/*0046c0*/ 0x00,0x07,0x00,0x08,0x00,0x09,0x00,0x0a,0x00,0x0b,0x00,0x0c,0x00,0x0d,0x00,0x0e, -/*0046d0*/ 0x00,0x0f,0x00,0x10,0x00,0x11,0x00,0x12,0x00,0x13,0x00,0x14,0x00,0x15,0x00,0x16, -/*0046e0*/ 0x00,0x17,0x00,0x18,0x00,0x19,0x00,0x1a,0x00,0x1b,0x00,0x1c,0x00,0x1d,0x00,0x1e, -/*0046f0*/ 0x00,0x1f,0x00,0x20,0x00,0x21,0x00,0x22,0x00,0x23,0x00,0x24,0x00,0x25,0x00,0x26, -/*004700*/ 0x00,0x27,0x00,0x28,0x00,0x29,0x00,0x2a,0x00,0x2b,0x00,0x2c,0x00,0x2d,0x00,0x2e, -/*004710*/ 0x00,0x2f,0x00,0x30,0x00,0x31,0x00,0x32,0x00,0x33,0x00,0x34,0x00,0x35,0x00,0x36, -/*004720*/ 0x00,0x37,0x00,0x38,0x00,0x39,0x00,0x3a,0x00,0x3b,0x00,0x3c,0x00,0x3d,0x00,0x3e, -/*004730*/ 0x00,0x3f,0x00,0x40,0x00,0x41,0x00,0x42,0x00,0x43,0x00,0x44,0x00,0x45,0x00,0x46, -/*004740*/ 0x00,0x47,0x00,0x48,0x00,0x49,0x00,0x4a,0x00,0x4b,0x00,0x4c,0x00,0x4d,0x00,0x4e, -/*004750*/ 0x00,0x4f,0x00,0x50,0x00,0x51,0x00,0x52,0x00,0x53,0x00,0x54,0x00,0x55,0x00,0x56, -/*004760*/ 0x00,0x57,0x00,0x58,0x00,0x59,0x00,0x5a,0x00,0x5b,0x00,0x5c,0x00,0x5d,0x00,0x5e, -/*004770*/ 0x00,0x5f,0x00,0x60,0x00,0x62,0x00,0x61,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x10, -/*004780*/ 0x00,0x00,0x00,0x68,0x09,0x09,0x05,0x00,0x03,0x03,0x02,0x05,0x07,0x07,0x09,0x07, -/*004790*/ 0x02,0x03,0x03,0x05,0x05,0x03,0x05,0x02,0x05,0x06,0x06,0x06,0x06,0x06,0x06,0x06, -/*0047a0*/ 0x06,0x06,0x06,0x02,0x02,0x05,0x05,0x05,0x06,0x07,0x06,0x06,0x06,0x06,0x06,0x06, -/*0047b0*/ 0x06,0x06,0x05,0x06,0x06,0x06,0x07,0x06,0x06,0x06,0x06,0x06,0x06,0x07,0x06,0x06, -/*0047c0*/ 0x07,0x06,0x06,0x06,0x03,0x05,0x03,0x05,0x06,0x06,0x06,0x06,0x06,0x06,0x05,0x06, -/*0047d0*/ 0x06,0x02,0x03,0x06,0x02,0x07,0x06,0x06,0x06,0x06,0x06,0x06,0x05,0x06,0x06,0x07, -/*0047e0*/ 0x06,0x06,0x06,0x05,0x02,0x05,0x06,0x07,0x05,0x00,0x00,0x00,0x0a,0x0a,0x05,0x00, -/*0047f0*/ 0x04,0x04,0x03,0x05,0x08,0x08,0x0a,0x08,0x03,0x04,0x04,0x05,0x05,0x04,0x05,0x03, -/*004800*/ 0x05,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x03,0x03,0x05,0x05,0x05, -/*004810*/ 0x06,0x08,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x05,0x06,0x06,0x06,0x08,0x06, -/*004820*/ 0x06,0x06,0x06,0x06,0x06,0x08,0x06,0x06,0x08,0x06,0x06,0x06,0x04,0x05,0x04,0x05, -/*004830*/ 0x06,0x06,0x06,0x06,0x06,0x06,0x05,0x06,0x06,0x03,0x04,0x06,0x03,0x08,0x06,0x06, -/*004840*/ 0x06,0x06,0x06,0x06,0x05,0x06,0x06,0x08,0x06,0x06,0x06,0x05,0x03,0x05,0x06,0x08, -/*004850*/ 0x05,0x00,0x00,0x00,0x0b,0x0b,0x06,0x00,0x04,0x04,0x03,0x06,0x08,0x08,0x0b,0x08, -/*004860*/ 0x03,0x04,0x04,0x06,0x06,0x04,0x06,0x03,0x06,0x07,0x07,0x07,0x07,0x07,0x07,0x07, -/*004870*/ 0x07,0x07,0x07,0x03,0x03,0x06,0x06,0x06,0x07,0x08,0x07,0x07,0x07,0x07,0x07,0x07, -/*004880*/ 0x07,0x07,0x06,0x07,0x07,0x07,0x08,0x07,0x07,0x07,0x07,0x07,0x07,0x08,0x07,0x07, -/*004890*/ 0x08,0x07,0x07,0x07,0x04,0x06,0x04,0x06,0x07,0x07,0x07,0x07,0x07,0x07,0x06,0x07, -/*0048a0*/ 0x07,0x03,0x04,0x07,0x03,0x08,0x07,0x07,0x07,0x07,0x07,0x07,0x06,0x07,0x07,0x08, -/*0048b0*/ 0x07,0x07,0x07,0x06,0x03,0x06,0x07,0x08,0x06,0x00,0x00,0x00,0x0c,0x0c,0x06,0x00, -/*0048c0*/ 0x05,0x05,0x03,0x06,0x09,0x09,0x0c,0x09,0x03,0x05,0x05,0x06,0x06,0x05,0x06,0x03, -/*0048d0*/ 0x06,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x03,0x03,0x06,0x06,0x06, -/*0048e0*/ 0x08,0x09,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x06,0x08,0x08,0x08,0x09,0x08, -/*0048f0*/ 0x08,0x08,0x08,0x08,0x08,0x09,0x08,0x08,0x09,0x08,0x08,0x08,0x05,0x06,0x05,0x06, -/*004900*/ 0x08,0x08,0x08,0x08,0x08,0x08,0x06,0x08,0x08,0x03,0x05,0x08,0x03,0x09,0x08,0x08, -/*004910*/ 0x08,0x08,0x08,0x08,0x06,0x08,0x08,0x09,0x08,0x08,0x08,0x06,0x03,0x06,0x08,0x09, -/*004920*/ 0x06,0x00,0x00,0x00,0x0d,0x0d,0x07,0x00,0x05,0x05,0x03,0x07,0x0a,0x0a,0x0d,0x0a, -/*004930*/ 0x03,0x05,0x05,0x07,0x07,0x05,0x07,0x03,0x07,0x08,0x08,0x08,0x08,0x08,0x08,0x08, -/*004940*/ 0x08,0x08,0x08,0x03,0x03,0x07,0x07,0x07,0x08,0x0a,0x08,0x08,0x08,0x08,0x08,0x08, -/*004950*/ 0x08,0x08,0x07,0x08,0x08,0x08,0x0a,0x08,0x08,0x08,0x08,0x08,0x08,0x0a,0x08,0x08, -/*004960*/ 0x0a,0x08,0x08,0x08,0x05,0x07,0x05,0x07,0x08,0x08,0x08,0x08,0x08,0x08,0x07,0x08, -/*004970*/ 0x08,0x03,0x05,0x08,0x03,0x0a,0x08,0x08,0x08,0x08,0x08,0x08,0x07,0x08,0x08,0x0a, -/*004980*/ 0x08,0x08,0x08,0x07,0x03,0x07,0x08,0x0a,0x07,0x00,0x00,0x00,0x0e,0x0e,0x07,0x00, -/*004990*/ 0x05,0x05,0x04,0x07,0x0b,0x0b,0x0e,0x0b,0x04,0x05,0x05,0x07,0x07,0x05,0x07,0x04, -/*0049a0*/ 0x07,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x04,0x04,0x07,0x07,0x07, -/*0049b0*/ 0x09,0x0b,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x07,0x09,0x09,0x09,0x0b,0x09, -/*0049c0*/ 0x09,0x09,0x09,0x09,0x09,0x0b,0x09,0x09,0x0b,0x09,0x09,0x09,0x05,0x07,0x05,0x07, -/*0049d0*/ 0x09,0x09,0x09,0x09,0x09,0x09,0x07,0x09,0x09,0x04,0x05,0x09,0x04,0x0b,0x09,0x09, -/*0049e0*/ 0x09,0x09,0x09,0x09,0x07,0x09,0x09,0x0b,0x09,0x09,0x09,0x07,0x04,0x07,0x09,0x0b, -/*0049f0*/ 0x07,0x00,0x00,0x00,0x0f,0x0f,0x08,0x00,0x06,0x06,0x04,0x08,0x0b,0x0b,0x0f,0x0b, -/*004a00*/ 0x04,0x06,0x06,0x08,0x08,0x06,0x08,0x04,0x08,0x09,0x09,0x09,0x09,0x09,0x09,0x09, -/*004a10*/ 0x09,0x09,0x09,0x04,0x04,0x08,0x08,0x08,0x09,0x0b,0x09,0x09,0x09,0x09,0x09,0x09, -/*004a20*/ 0x09,0x09,0x08,0x09,0x09,0x09,0x0b,0x09,0x09,0x09,0x09,0x09,0x09,0x0b,0x09,0x09, -/*004a30*/ 0x0b,0x09,0x09,0x09,0x06,0x08,0x06,0x08,0x09,0x09,0x09,0x09,0x09,0x09,0x08,0x09, -/*004a40*/ 0x09,0x04,0x06,0x09,0x04,0x0b,0x09,0x09,0x09,0x09,0x09,0x09,0x08,0x09,0x09,0x0b, -/*004a50*/ 0x09,0x09,0x09,0x08,0x04,0x08,0x09,0x0b,0x08,0x00,0x00,0x00,0x10,0x10,0x08,0x00, -/*004a60*/ 0x06,0x06,0x04,0x08,0x0c,0x0c,0x10,0x0c,0x04,0x06,0x06,0x08,0x08,0x06,0x08,0x04, -/*004a70*/ 0x08,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x04,0x04,0x08,0x08,0x08, -/*004a80*/ 0x0a,0x0c,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x08,0x0a,0x0a,0x0a,0x0c,0x0a, -/*004a90*/ 0x0a,0x0a,0x0a,0x0a,0x0a,0x0c,0x0a,0x0a,0x0c,0x0a,0x0a,0x0a,0x06,0x08,0x06,0x08, -/*004aa0*/ 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x08,0x0a,0x0a,0x04,0x06,0x0a,0x04,0x0c,0x0a,0x0a, -/*004ab0*/ 0x0a,0x0a,0x0a,0x0a,0x08,0x0a,0x0a,0x0c,0x0a,0x0a,0x0a,0x08,0x04,0x08,0x0a,0x0c, -/*004ac0*/ 0x08,0x00,0x00,0x00,0x11,0x11,0x09,0x00,0x06,0x06,0x04,0x09,0x0d,0x0d,0x11,0x0d, -/*004ad0*/ 0x04,0x06,0x06,0x09,0x09,0x06,0x09,0x04,0x09,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b, -/*004ae0*/ 0x0b,0x0b,0x0b,0x04,0x04,0x09,0x09,0x09,0x0b,0x0d,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b, -/*004af0*/ 0x0b,0x0b,0x09,0x0b,0x0b,0x0b,0x0d,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0d,0x0b,0x0b, -/*004b00*/ 0x0d,0x0b,0x0b,0x0b,0x06,0x09,0x06,0x09,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x09,0x0b, -/*004b10*/ 0x0b,0x04,0x06,0x0b,0x04,0x0d,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x09,0x0b,0x0b,0x0d, -/*004b20*/ 0x0b,0x0b,0x0b,0x09,0x04,0x09,0x0b,0x0d,0x09,0x00,0x00,0x00,0x12,0x12,0x09,0x00, -/*004b30*/ 0x07,0x07,0x05,0x09,0x0e,0x0e,0x12,0x0e,0x05,0x07,0x07,0x09,0x09,0x07,0x09,0x05, -/*004b40*/ 0x09,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x05,0x05,0x09,0x09,0x09, -/*004b50*/ 0x0b,0x0e,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x09,0x0b,0x0b,0x0b,0x0e,0x0b, -/*004b60*/ 0x0b,0x0b,0x0b,0x0b,0x0b,0x0e,0x0b,0x0b,0x0e,0x0b,0x0b,0x0b,0x07,0x09,0x07,0x09, -/*004b70*/ 0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x09,0x0b,0x0b,0x05,0x07,0x0b,0x05,0x0e,0x0b,0x0b, -/*004b80*/ 0x0b,0x0b,0x0b,0x0b,0x09,0x0b,0x0b,0x0e,0x0b,0x0b,0x0b,0x09,0x05,0x09,0x0b,0x0e, -/*004b90*/ 0x09,0x00,0x00,0x00,0x13,0x13,0x0a,0x00,0x07,0x07,0x05,0x0a,0x0e,0x0e,0x13,0x0e, -/*004ba0*/ 0x05,0x07,0x07,0x0a,0x0a,0x07,0x0a,0x05,0x0a,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c, -/*004bb0*/ 0x0c,0x0c,0x0c,0x05,0x05,0x0a,0x0a,0x0a,0x0c,0x0e,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c, -/*004bc0*/ 0x0c,0x0c,0x0a,0x0c,0x0c,0x0c,0x0e,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0e,0x0c,0x0c, -/*004bd0*/ 0x0e,0x0c,0x0c,0x0c,0x07,0x0a,0x07,0x0a,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0a,0x0c, -/*004be0*/ 0x0c,0x05,0x07,0x0c,0x05,0x0e,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0a,0x0c,0x0c,0x0e, -/*004bf0*/ 0x0c,0x0c,0x0c,0x0a,0x05,0x0a,0x0c,0x0e,0x0a,0x00,0x00,0x00,0x14,0x14,0x0a,0x00, -/*004c00*/ 0x08,0x08,0x05,0x0a,0x0f,0x0f,0x14,0x0f,0x05,0x08,0x08,0x0a,0x0a,0x08,0x0a,0x05, -/*004c10*/ 0x0a,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x05,0x05,0x0a,0x0a,0x0a, -/*004c20*/ 0x0d,0x0f,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0a,0x0d,0x0d,0x0d,0x0f,0x0d, -/*004c30*/ 0x0d,0x0d,0x0d,0x0d,0x0d,0x0f,0x0d,0x0d,0x0f,0x0d,0x0d,0x0d,0x08,0x0a,0x08,0x0a, -/*004c40*/ 0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0a,0x0d,0x0d,0x05,0x08,0x0d,0x05,0x0f,0x0d,0x0d, -/*004c50*/ 0x0d,0x0d,0x0d,0x0d,0x0a,0x0d,0x0d,0x0f,0x0d,0x0d,0x0d,0x0a,0x05,0x0a,0x0d,0x0f, -/*004c60*/ 0x0a,0x00,0x00,0x00,0x15,0x15,0x0b,0x00,0x08,0x08,0x05,0x0b,0x10,0x10,0x15,0x10, -/*004c70*/ 0x05,0x08,0x08,0x0b,0x0b,0x08,0x0b,0x05,0x0b,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d, -/*004c80*/ 0x0d,0x0d,0x0d,0x05,0x05,0x0b,0x0b,0x0b,0x0d,0x10,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d, -/*004c90*/ 0x0d,0x0d,0x0b,0x0d,0x0d,0x0d,0x10,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x10,0x0d,0x0d, -/*004ca0*/ 0x10,0x0d,0x0d,0x0d,0x08,0x0b,0x08,0x0b,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0b,0x0d, -/*004cb0*/ 0x0d,0x05,0x08,0x0d,0x05,0x10,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0b,0x0d,0x0d,0x10, -/*004cc0*/ 0x0d,0x0d,0x0d,0x0b,0x05,0x0b,0x0d,0x10,0x0b,0x00,0x00,0x00,0x16,0x16,0x0b,0x00, -/*004cd0*/ 0x08,0x08,0x06,0x0b,0x11,0x11,0x16,0x11,0x06,0x08,0x08,0x0b,0x0b,0x08,0x0b,0x06, -/*004ce0*/ 0x0b,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x06,0x06,0x0b,0x0b,0x0b, -/*004cf0*/ 0x0e,0x11,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0b,0x0e,0x0e,0x0e,0x11,0x0e, -/*004d00*/ 0x0e,0x0e,0x0e,0x0e,0x0e,0x11,0x0e,0x0e,0x11,0x0e,0x0e,0x0e,0x08,0x0b,0x08,0x0b, -/*004d10*/ 0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0b,0x0e,0x0e,0x06,0x08,0x0e,0x06,0x11,0x0e,0x0e, -/*004d20*/ 0x0e,0x0e,0x0e,0x0e,0x0b,0x0e,0x0e,0x11,0x0e,0x0e,0x0e,0x0b,0x06,0x0b,0x0e,0x11, -/*004d30*/ 0x0b,0x00,0x00,0x00,0x17,0x17,0x0c,0x00,0x09,0x09,0x06,0x0c,0x11,0x11,0x17,0x11, -/*004d40*/ 0x06,0x09,0x09,0x0c,0x0c,0x09,0x0c,0x06,0x0c,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e, -/*004d50*/ 0x0e,0x0e,0x0e,0x06,0x06,0x0c,0x0c,0x0c,0x0e,0x11,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e, -/*004d60*/ 0x0e,0x0e,0x0c,0x0e,0x0e,0x0e,0x11,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x11,0x0e,0x0e, -/*004d70*/ 0x11,0x0e,0x0e,0x0e,0x09,0x0c,0x09,0x0c,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0c,0x0e, -/*004d80*/ 0x0e,0x06,0x09,0x0e,0x06,0x11,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0c,0x0e,0x0e,0x11, -/*004d90*/ 0x0e,0x0e,0x0e,0x0c,0x06,0x0c,0x0e,0x11,0x0c,0x00,0x00,0x00,0x18,0x18,0x0c,0x00, -/*004da0*/ 0x09,0x09,0x06,0x0c,0x12,0x12,0x18,0x12,0x06,0x09,0x09,0x0c,0x0c,0x09,0x0c,0x06, -/*004db0*/ 0x0c,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x06,0x06,0x0c,0x0c,0x0c, -/*004dc0*/ 0x0f,0x12,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0c,0x0f,0x0f,0x0f,0x12,0x0f, -/*004dd0*/ 0x0f,0x0f,0x0f,0x0f,0x0f,0x12,0x0f,0x0f,0x12,0x0f,0x0f,0x0f,0x09,0x0c,0x09,0x0c, -/*004de0*/ 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0c,0x0f,0x0f,0x06,0x09,0x0f,0x06,0x12,0x0f,0x0f, -/*004df0*/ 0x0f,0x0f,0x0f,0x0f,0x0c,0x0f,0x0f,0x12,0x0f,0x0f,0x0f,0x0c,0x06,0x0c,0x0f,0x12, -/*004e00*/ 0x0c,0x00,0x00,0x00,0x00,0x00,0x01,0xaf,0x01,0x90,0x00,0x05,0x00,0x01,0x02,0x30, -/*004e10*/ 0x02,0x08,0x00,0x00,0x00,0x72,0x02,0x30,0x02,0x08,0x00,0x00,0x01,0x6b,0x00,0x28, -/*004e20*/ 0x00,0xcf,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -/*004e30*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x41,0x6c, -/*004e40*/ 0x74,0x73,0x00,0x40,0x00,0x20,0x20,0x10,0x02,0x58,0xff,0x38,0x00,0x00,0x02,0x58, -/*004e50*/ 0x00,0xc7,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0xe3,0xe5,0x12,0x31, -/*004e60*/ 0x5f,0x0f,0x3c,0xf5,0x00,0x00,0x03,0x20,0x00,0x00,0x00,0x00,0xb6,0x97,0xc2,0x82, -/*004e70*/ 0x00,0x00,0x00,0x00,0xb6,0x97,0xc2,0x82,0x00,0x00,0xff,0x39,0x02,0xbb,0x02,0x58, -/*004e80*/ 0x00,0x00,0x00,0x03,0x00,0x02,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00, -/*004e90*/ 0x02,0x58,0xff,0x38,0x00,0x00,0x03,0x20,0x00,0x00,0x00,0x32,0x02,0xbb,0x00,0x01, -/*004ea0*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x63, -/*004eb0*/ 0x00,0x01,0x00,0x00,0x00,0x63,0x00,0x2c,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x02, -/*004ec0*/ 0x00,0x08,0x00,0x40,0x00,0x0a,0x00,0x00,0x00,0x84,0x00,0xde,0x00,0x01,0x00,0x01 -}; - -// ----------------------------------------------------------------------------- - -// The following data tables are coming from Dear Imgui. -// Re-licensed under permission as MIT-0. -// -// @todo: 0x3100, 0x312F, FONT_TW, // Bopomofo - -static const unsigned table_common[] = { - 0x0020, 0x00FF, // Basic Latin + Latin Supplement - 0xFFFD, 0xFFFD, // Invalid - 0, -}; - -static const unsigned table_cyrillic[] = { - 0x0400, 0x052F, // Cyrillic + Cyrillic Supplement - 0x2DE0, 0x2DFF, // Cyrillic Extended-A - 0xA640, 0xA69F, // Cyrillic Extended-B - 0, -}; - -static const unsigned table_vietnamese[] = { - 0x0102, 0x0103, - 0x0110, 0x0111, - 0x0128, 0x0129, - 0x0168, 0x0169, - 0x01A0, 0x01A1, - 0x01AF, 0x01B0, - 0x1EA0, 0x1EF9, - 0, -}; - -static const unsigned table_thai[] = { - 0x0E00, 0x0E7F, // Thai - 0x2010, 0x205E, // General Punctuation (smaller set than full CJK 2000-206F) - 0, -}; - -static const unsigned table_korean[] = { - 0x1100, 0x11FF, // Hangul Jamo - 0x3131, 0x3163, // Korean alphabets (no 3130-318F?) - 0xAC00, 0xD7A3, // Korean characters (no AC00-D7AF?) - 0, -}; - -static const unsigned table_chinese_punctuation[] = { - 0x2000, 0x206F, // General CJK Punctuation (Thai uses 2010-205E) - 0, -}; - -static const unsigned table_chinese_japanese_common[] = { - 0x3000, 0x30FF, // CJK Symbols and Punctuations, Hiragana, Katakana - 0x31F0, 0x31FF, // Katakana Phonetic Extensions - 0xFF00, 0xFFEF, // Half-width characters (Romaji) - 0, -}; - -static const unsigned table_chinese_full[] = { - 0x4e00, 0x9FAF, // CJK Ideograms - 0, -}; - -static const unsigned table_eastern_europe[] = { - 0x0100, 0x017F, // Latin_Extended-A - 0x0180, 0x024F, // Latin_Extended-B - 0x0250, 0x02AF, // International Phonetic Alphabet (IPA) - 0x02B0, 0x02FF, // Spacing modifier letters (and quotes) - 0x0300, 0x036F, // Fix IPA missing glyphs (?) - 0x16A0, 0x16F0, // Old Norse / Runic - 0x1E00, 0x1EFF, // Latin_Extended_Additional - 0x2000, 0x206F, // General punctuaction -// 0x2C60, 0x2C7F, // Latin Extended-C (Uighur New Script, the Uralic Phonetic Alphabet, Shona, and Claudian Latin) - 0xFB00, 0xFB4F, // Ligatures for the Latin, Armenian, and Hebrew scripts - 0 -}; - -static const unsigned table_western_europe[] = { - 0x0370, 0x03FF, // Greek and Coptic - 0x10A0, 0x10FF, // Modern Georgian, Svan, and Mingrelian - 0x1F00, 0x1FFF, // fix ancient greek glyphs (?) - 0x0400, 0x052F, // Cyrillic + Cyrillic Supplement - 0x2DE0, 0x2DFF, // Cyrillic Extended-A - 0xA640, 0xA69F, // Cyrillic Extended-B - 0xFB00, 0xFB4F, // Ligatures for the Latin, Armenian, and Hebrew scripts - 0 -}; - -static const unsigned table_middle_east[] = { - 0x0590, 0x05FF, // Hebrew, Yiddish, Ladino, and other Jewish diaspora languages. - 0x0600, 0x06FF, // Arabic script and Arabic-Indic digits - 0xFB00, 0xFB4F, // Ligatures for the Latin, Armenian, and Hebrew scripts - 0 -}; - -static const unsigned table_emoji[] = { -// 0xE000, 0xEB4C, // Private use (emojis) - 0xE000, 0xF68B, // Private use (emojis+webfonts). U+F68C excluded - 0xF68D, 0xF8FF, // Private use (emojis+webfonts) - 0xF0001,0xF1CC7,// Private use (icon mdi) - 0 -}; - -// Store 2500 regularly used characters for Simplified Chinese. Table below covers 97.97% of all characters used during the month in July, 1987. -// [ref] https://zh.wiktionary.org/wiki/%E9%99%84%E5%BD%95:%E7%8E%B0%E4%BB%A3%E6%B1%89%E8%AF%AD%E5%B8%B8%E7%94%A8%E5%AD%97%E8%A1%A8 -static const unsigned short packed_table_chinese[] = { // starts with 0x4E00 - 0,1,2,4,1,1,1,1,2,1,3,2,1,2,2,1,1,1,1,1,5,2,1,2,3,3,3,2,2,4,1,1,1,2,1,5,2,3,1,2,1,2,1,1,2,1,1,2,2,1,4,1,1,1,1,5,10,1,2,19,2,1,2,1,2,1,2,1,2, - 1,5,1,6,3,2,1,2,2,1,1,1,4,8,5,1,1,4,1,1,3,1,2,1,5,1,2,1,1,1,10,1,1,5,2,4,6,1,4,2,2,2,12,2,1,1,6,1,1,1,4,1,1,4,6,5,1,4,2,2,4,10,7,1,1,4,2,4, - 2,1,4,3,6,10,12,5,7,2,14,2,9,1,1,6,7,10,4,7,13,1,5,4,8,4,1,1,2,28,5,6,1,1,5,2,5,20,2,2,9,8,11,2,9,17,1,8,6,8,27,4,6,9,20,11,27,6,68,2,2,1,1, - 1,2,1,2,2,7,6,11,3,3,1,1,3,1,2,1,1,1,1,1,3,1,1,8,3,4,1,5,7,2,1,4,4,8,4,2,1,2,1,1,4,5,6,3,6,2,12,3,1,3,9,2,4,3,4,1,5,3,3,1,3,7,1,5,1,1,1,1,2, - 3,4,5,2,3,2,6,1,1,2,1,7,1,7,3,4,5,15,2,2,1,5,3,22,19,2,1,1,1,1,2,5,1,1,1,6,1,1,12,8,2,9,18,22,4,1,1,5,1,16,1,2,7,10,15,1,1,6,2,4,1,2,4,1,6, - 1,1,3,2,4,1,6,4,5,1,2,1,1,2,1,10,3,1,3,2,1,9,3,2,5,7,2,19,4,3,6,1,1,1,1,1,4,3,2,1,1,1,2,5,3,1,1,1,2,2,1,1,2,1,1,2,1,3,1,1,1,3,7,1,4,1,1,2,1, - 1,2,1,2,4,4,3,8,1,1,1,2,1,3,5,1,3,1,3,4,6,2,2,14,4,6,6,11,9,1,15,3,1,28,5,2,5,5,3,1,3,4,5,4,6,14,3,2,3,5,21,2,7,20,10,1,2,19,2,4,28,28,2,3, - 2,1,14,4,1,26,28,42,12,40,3,52,79,5,14,17,3,2,2,11,3,4,6,3,1,8,2,23,4,5,8,10,4,2,7,3,5,1,1,6,3,1,2,2,2,5,28,1,1,7,7,20,5,3,29,3,17,26,1,8,4, - 27,3,6,11,23,5,3,4,6,13,24,16,6,5,10,25,35,7,3,2,3,3,14,3,6,2,6,1,4,2,3,8,2,1,1,3,3,3,4,1,1,13,2,2,4,5,2,1,14,14,1,2,2,1,4,5,2,3,1,14,3,12, - 3,17,2,16,5,1,2,1,8,9,3,19,4,2,2,4,17,25,21,20,28,75,1,10,29,103,4,1,2,1,1,4,2,4,1,2,3,24,2,2,2,1,1,2,1,3,8,1,1,1,2,1,1,3,1,1,1,6,1,5,3,1,1, - 1,3,4,1,1,5,2,1,5,6,13,9,16,1,1,1,1,3,2,3,2,4,5,2,5,2,2,3,7,13,7,2,2,1,1,1,1,2,3,3,2,1,6,4,9,2,1,14,2,14,2,1,18,3,4,14,4,11,41,15,23,15,23, - 176,1,3,4,1,1,1,1,5,3,1,2,3,7,3,1,1,2,1,2,4,4,6,2,4,1,9,7,1,10,5,8,16,29,1,1,2,2,3,1,3,5,2,4,5,4,1,1,2,2,3,3,7,1,6,10,1,17,1,44,4,6,2,1,1,6, - 5,4,2,10,1,6,9,2,8,1,24,1,2,13,7,8,8,2,1,4,1,3,1,3,3,5,2,5,10,9,4,9,12,2,1,6,1,10,1,1,7,7,4,10,8,3,1,13,4,3,1,6,1,3,5,2,1,2,17,16,5,2,16,6, - 1,4,2,1,3,3,6,8,5,11,11,1,3,3,2,4,6,10,9,5,7,4,7,4,7,1,1,4,2,1,3,6,8,7,1,6,11,5,5,3,24,9,4,2,7,13,5,1,8,82,16,61,1,1,1,4,2,2,16,10,3,8,1,1, - 6,4,2,1,3,1,1,1,4,3,8,4,2,2,1,1,1,1,1,6,3,5,1,1,4,6,9,2,1,1,1,2,1,7,2,1,6,1,5,4,4,3,1,8,1,3,3,1,3,2,2,2,2,3,1,6,1,2,1,2,1,3,7,1,8,2,1,2,1,5, - 2,5,3,5,10,1,2,1,1,3,2,5,11,3,9,3,5,1,1,5,9,1,2,1,5,7,9,9,8,1,3,3,3,6,8,2,3,2,1,1,32,6,1,2,15,9,3,7,13,1,3,10,13,2,14,1,13,10,2,1,3,10,4,15, - 2,15,15,10,1,3,9,6,9,32,25,26,47,7,3,2,3,1,6,3,4,3,2,8,5,4,1,9,4,2,2,19,10,6,2,3,8,1,2,2,4,2,1,9,4,4,4,6,4,8,9,2,3,1,1,1,1,3,5,5,1,3,8,4,6, - 2,1,4,12,1,5,3,7,13,2,5,8,1,6,1,2,5,14,6,1,5,2,4,8,15,5,1,23,6,62,2,10,1,1,8,1,2,2,10,4,2,2,9,2,1,1,3,2,3,1,5,3,3,2,1,3,8,1,1,1,11,3,1,1,4, - 3,7,1,14,1,2,3,12,5,2,5,1,6,7,5,7,14,11,1,3,1,8,9,12,2,1,11,8,4,4,2,6,10,9,13,1,1,3,1,5,1,3,2,4,4,1,18,2,3,14,11,4,29,4,2,7,1,3,13,9,2,2,5, - 3,5,20,7,16,8,5,72,34,6,4,22,12,12,28,45,36,9,7,39,9,191,1,1,1,4,11,8,4,9,2,3,22,1,1,1,1,4,17,1,7,7,1,11,31,10,2,4,8,2,3,2,1,4,2,16,4,32,2, - 3,19,13,4,9,1,5,2,14,8,1,1,3,6,19,6,5,1,16,6,2,10,8,5,1,2,3,1,5,5,1,11,6,6,1,3,3,2,6,3,8,1,1,4,10,7,5,7,7,5,8,9,2,1,3,4,1,1,3,1,3,3,2,6,16, - 1,4,6,3,1,10,6,1,3,15,2,9,2,10,25,13,9,16,6,2,2,10,11,4,3,9,1,2,6,6,5,4,30,40,1,10,7,12,14,33,6,3,6,7,3,1,3,1,11,14,4,9,5,12,11,49,18,51,31, - 140,31,2,2,1,5,1,8,1,10,1,4,4,3,24,1,10,1,3,6,6,16,3,4,5,2,1,4,2,57,10,6,22,2,22,3,7,22,6,10,11,36,18,16,33,36,2,5,5,1,1,1,4,10,1,4,13,2,7, - 5,2,9,3,4,1,7,43,3,7,3,9,14,7,9,1,11,1,1,3,7,4,18,13,1,14,1,3,6,10,73,2,2,30,6,1,11,18,19,13,22,3,46,42,37,89,7,3,16,34,2,2,3,9,1,7,1,1,1,2, - 2,4,10,7,3,10,3,9,5,28,9,2,6,13,7,3,1,3,10,2,7,2,11,3,6,21,54,85,2,1,4,2,2,1,39,3,21,2,2,5,1,1,1,4,1,1,3,4,15,1,3,2,4,4,2,3,8,2,20,1,8,7,13, - 4,1,26,6,2,9,34,4,21,52,10,4,4,1,5,12,2,11,1,7,2,30,12,44,2,30,1,1,3,6,16,9,17,39,82,2,2,24,7,1,7,3,16,9,14,44,2,1,2,1,2,3,5,2,4,1,6,7,5,3, - 2,6,1,11,5,11,2,1,18,19,8,1,3,24,29,2,1,3,5,2,2,1,13,6,5,1,46,11,3,5,1,1,5,8,2,10,6,12,6,3,7,11,2,4,16,13,2,5,1,1,2,2,5,2,28,5,2,23,10,8,4, - 4,22,39,95,38,8,14,9,5,1,13,5,4,3,13,12,11,1,9,1,27,37,2,5,4,4,63,211,95,2,2,2,1,3,5,2,1,1,2,2,1,1,1,3,2,4,1,2,1,1,5,2,2,1,1,2,3,1,3,1,1,1, - 3,1,4,2,1,3,6,1,1,3,7,15,5,3,2,5,3,9,11,4,2,22,1,6,3,8,7,1,4,28,4,16,3,3,25,4,4,27,27,1,4,1,2,2,7,1,3,5,2,28,8,2,14,1,8,6,16,25,3,3,3,14,3, - 3,1,1,2,1,4,6,3,8,4,1,1,1,2,3,6,10,6,2,3,18,3,2,5,5,4,3,1,5,2,5,4,23,7,6,12,6,4,17,11,9,5,1,1,10,5,12,1,1,11,26,33,7,3,6,1,17,7,1,5,12,1,11, - 2,4,1,8,14,17,23,1,2,1,7,8,16,11,9,6,5,2,6,4,16,2,8,14,1,11,8,9,1,1,1,9,25,4,11,19,7,2,15,2,12,8,52,7,5,19,2,16,4,36,8,1,16,8,24,26,4,6,2,9, - 5,4,36,3,28,12,25,15,37,27,17,12,59,38,5,32,127,1,2,9,17,14,4,1,2,1,1,8,11,50,4,14,2,19,16,4,17,5,4,5,26,12,45,2,23,45,104,30,12,8,3,10,2,2, - 3,3,1,4,20,7,2,9,6,15,2,20,1,3,16,4,11,15,6,134,2,5,59,1,2,2,2,1,9,17,3,26,137,10,211,59,1,2,4,1,4,1,1,1,2,6,2,3,1,1,2,3,2,3,1,3,4,4,2,3,3, - 1,4,3,1,7,2,2,3,1,2,1,3,3,3,2,2,3,2,1,3,14,6,1,3,2,9,6,15,27,9,34,145,1,1,2,1,1,1,1,2,1,1,1,1,2,2,2,3,1,2,1,1,1,2,3,5,8,3,5,2,4,1,3,2,2,2,12, - 4,1,1,1,10,4,5,1,20,4,16,1,15,9,5,12,2,9,2,5,4,2,26,19,7,1,26,4,30,12,15,42,1,6,8,172,1,1,4,2,1,1,11,2,2,4,2,1,2,1,10,8,1,2,1,4,5,1,2,5,1,8, - 4,1,3,4,2,1,6,2,1,3,4,1,2,1,1,1,1,12,5,7,2,4,3,1,1,1,3,3,6,1,2,2,3,3,3,2,1,2,12,14,11,6,6,4,12,2,8,1,7,10,1,35,7,4,13,15,4,3,23,21,28,52,5, - 26,5,6,1,7,10,2,7,53,3,2,1,1,1,2,163,532,1,10,11,1,3,3,4,8,2,8,6,2,2,23,22,4,2,2,4,2,1,3,1,3,3,5,9,8,2,1,2,8,1,10,2,12,21,20,15,105,2,3,1,1, - 3,2,3,1,1,2,5,1,4,15,11,19,1,1,1,1,5,4,5,1,1,2,5,3,5,12,1,2,5,1,11,1,1,15,9,1,4,5,3,26,8,2,1,3,1,1,15,19,2,12,1,2,5,2,7,2,19,2,20,6,26,7,5, - 2,2,7,34,21,13,70,2,128,1,1,2,1,1,2,1,1,3,2,2,2,15,1,4,1,3,4,42,10,6,1,49,85,8,1,2,1,1,4,4,2,3,6,1,5,7,4,3,211,4,1,2,1,2,5,1,2,4,2,2,6,5,6, - 10,3,4,48,100,6,2,16,296,5,27,387,2,2,3,7,16,8,5,38,15,39,21,9,10,3,7,59,13,27,21,47,5,21,6 -}; - -// 2999 japanese ideograms = 2136 Joyo (for common use) + 863 Jinmeiyo (for personal name) Kanji code points. -// [ref] https://github.com/ocornut/imgui/pull/3627 - Missing 1 Joyo Kanji: U+20B9F (Kun'yomi: Shikaru, On'yomi: Shitsu,shichi). -static const unsigned short packed_table_japanese[] = { // starts with 0x4E00 - 0,1,2,4,1,1,1,1,2,1,3,3,2,2,1,5,3,5,7,5,6,1,2,1,7,2,6,3,1,8,1,1,4,1,1,18,2,11,2,6,2,1,2,1,5,1,2,1,3,1,2,1,2,3,3,1,1,2,3,1,1,1,12,7,9,1,4,5,1, - 1,2,1,10,1,1,9,2,2,4,5,6,9,3,1,1,1,1,9,3,18,5,2,2,2,2,1,6,3,7,1,1,1,1,2,2,4,2,1,23,2,10,4,3,5,2,4,10,2,4,13,1,6,1,9,3,1,1,6,6,7,6,3,1,2,11,3, - 2,2,3,2,15,2,2,5,4,3,6,4,1,2,5,2,12,16,6,13,9,13,2,1,1,7,16,4,7,1,19,1,5,1,2,2,7,7,8,2,6,5,4,9,18,7,4,5,9,13,11,8,15,2,1,1,1,2,1,2,2,1,2,2,8, - 2,9,3,3,1,1,4,4,1,1,1,4,9,1,4,3,5,5,2,7,5,3,4,8,2,1,13,2,3,3,1,14,1,1,4,5,1,3,6,1,5,2,1,1,3,3,3,3,1,1,2,7,6,6,7,1,4,7,6,1,1,1,1,1,12,3,3,9,5, - 2,6,1,5,6,1,2,3,18,2,4,14,4,1,3,6,1,1,6,3,5,5,3,2,2,2,2,12,3,1,4,2,3,2,3,11,1,7,4,1,2,1,3,17,1,9,1,24,1,1,4,2,2,4,1,2,7,1,1,1,3,1,2,2,4,15,1, - 1,2,1,1,2,1,5,2,5,20,2,5,9,1,10,8,7,6,1,1,1,1,1,1,6,2,1,2,8,1,1,1,1,5,1,1,3,1,1,1,1,3,1,1,12,4,1,3,1,1,1,1,1,10,3,1,7,5,13,1,2,3,4,6,1,1,30, - 2,9,9,1,15,38,11,3,1,8,24,7,1,9,8,10,2,1,9,31,2,13,6,2,9,4,49,5,2,15,2,1,10,2,1,1,1,2,2,6,15,30,35,3,14,18,8,1,16,10,28,12,19,45,38,1,3,2,3, - 13,2,1,7,3,6,5,3,4,3,1,5,7,8,1,5,3,18,5,3,6,1,21,4,24,9,24,40,3,14,3,21,3,2,1,2,4,2,3,1,15,15,6,5,1,1,3,1,5,6,1,9,7,3,3,2,1,4,3,8,21,5,16,4, - 5,2,10,11,11,3,6,3,2,9,3,6,13,1,2,1,1,1,1,11,12,6,6,1,4,2,6,5,2,1,1,3,3,6,13,3,1,1,5,1,2,3,3,14,2,1,2,2,2,5,1,9,5,1,1,6,12,3,12,3,4,13,2,14, - 2,8,1,17,5,1,16,4,2,2,21,8,9,6,23,20,12,25,19,9,38,8,3,21,40,25,33,13,4,3,1,4,1,2,4,1,2,5,26,2,1,1,2,1,3,6,2,1,1,1,1,1,1,2,3,1,1,1,9,2,3,1,1, - 1,3,6,3,2,1,1,6,6,1,8,2,2,2,1,4,1,2,3,2,7,3,2,4,1,2,1,2,2,1,1,1,1,1,3,1,2,5,4,10,9,4,9,1,1,1,1,1,1,5,3,2,1,6,4,9,6,1,10,2,31,17,8,3,7,5,40,1, - 7,7,1,6,5,2,10,7,8,4,15,39,25,6,28,47,18,10,7,1,3,1,1,2,1,1,1,3,3,3,1,1,1,3,4,2,1,4,1,3,6,10,7,8,6,2,2,1,3,3,2,5,8,7,9,12,2,15,1,1,4,1,2,1,1, - 1,3,2,1,3,3,5,6,2,3,2,10,1,4,2,8,1,1,1,11,6,1,21,4,16,3,1,3,1,4,2,3,6,5,1,3,1,1,3,3,4,6,1,1,10,4,2,7,10,4,7,4,2,9,4,3,1,1,1,4,1,8,3,4,1,3,1, - 6,1,4,2,1,4,7,2,1,8,1,4,5,1,1,2,2,4,6,2,7,1,10,1,1,3,4,11,10,8,21,4,6,1,3,5,2,1,2,28,5,5,2,3,13,1,2,3,1,4,2,1,5,20,3,8,11,1,3,3,3,1,8,10,9,2, - 10,9,2,3,1,1,2,4,1,8,3,6,1,7,8,6,11,1,4,29,8,4,3,1,2,7,13,1,4,1,6,2,6,12,12,2,20,3,2,3,6,4,8,9,2,7,34,5,1,18,6,1,1,4,4,5,7,9,1,2,2,4,3,4,1,7, - 2,2,2,6,2,3,25,5,3,6,1,4,6,7,4,2,1,4,2,13,6,4,4,3,1,5,3,4,4,3,2,1,1,4,1,2,1,1,3,1,11,1,6,3,1,7,3,6,2,8,8,6,9,3,4,11,3,2,10,12,2,5,11,1,6,4,5, - 3,1,8,5,4,6,6,3,5,1,1,3,2,1,2,2,6,17,12,1,10,1,6,12,1,6,6,19,9,6,16,1,13,4,4,15,7,17,6,11,9,15,12,6,7,2,1,2,2,15,9,3,21,4,6,49,18,7,3,2,3,1, - 6,8,2,2,6,2,9,1,3,6,4,4,1,2,16,2,5,2,1,6,2,3,5,3,1,2,5,1,2,1,9,3,1,8,6,4,8,11,3,1,1,1,1,3,1,13,8,4,1,3,2,2,1,4,1,11,1,5,2,1,5,2,5,8,6,1,1,7, - 4,3,8,3,2,7,2,1,5,1,5,2,4,7,6,2,8,5,1,11,4,5,3,6,18,1,2,13,3,3,1,21,1,1,4,1,4,1,1,1,8,1,2,2,7,1,2,4,2,2,9,2,1,1,1,4,3,6,3,12,5,1,1,1,5,6,3,2, - 4,8,2,2,4,2,7,1,8,9,5,2,3,2,1,3,2,13,7,14,6,5,1,1,2,1,4,2,23,2,1,1,6,3,1,4,1,15,3,1,7,3,9,14,1,3,1,4,1,1,5,8,1,3,8,3,8,15,11,4,14,4,4,2,5,5, - 1,7,1,6,14,7,7,8,5,15,4,8,6,5,6,2,1,13,1,20,15,11,9,2,5,6,2,11,2,6,2,5,1,5,8,4,13,19,25,4,1,1,11,1,34,2,5,9,14,6,2,2,6,1,1,14,1,3,14,13,1,6, - 12,21,14,14,6,32,17,8,32,9,28,1,2,4,11,8,3,1,14,2,5,15,1,1,1,1,3,6,4,1,3,4,11,3,1,1,11,30,1,5,1,4,1,5,8,1,1,3,2,4,3,17,35,2,6,12,17,3,1,6,2, - 1,1,12,2,7,3,3,2,1,16,2,8,3,6,5,4,7,3,3,8,1,9,8,5,1,2,1,3,2,8,1,2,9,12,1,1,2,3,8,3,24,12,4,3,7,5,8,3,3,3,3,3,3,1,23,10,3,1,2,2,6,3,1,16,1,16, - 22,3,10,4,11,6,9,7,7,3,6,2,2,2,4,10,2,1,1,2,8,7,1,6,4,1,3,3,3,5,10,12,12,2,3,12,8,15,1,1,16,6,6,1,5,9,11,4,11,4,2,6,12,1,17,5,13,1,4,9,5,1,11, - 2,1,8,1,5,7,28,8,3,5,10,2,17,3,38,22,1,2,18,12,10,4,38,18,1,4,44,19,4,1,8,4,1,12,1,4,31,12,1,14,7,75,7,5,10,6,6,13,3,2,11,11,3,2,5,28,15,6,18, - 18,5,6,4,3,16,1,7,18,7,36,3,5,3,1,7,1,9,1,10,7,2,4,2,6,2,9,7,4,3,32,12,3,7,10,2,23,16,3,1,12,3,31,4,11,1,3,8,9,5,1,30,15,6,12,3,2,2,11,19,9, - 14,2,6,2,3,19,13,17,5,3,3,25,3,14,1,1,1,36,1,3,2,19,3,13,36,9,13,31,6,4,16,34,2,5,4,2,3,3,5,1,1,1,4,3,1,17,3,2,3,5,3,1,3,2,3,5,6,3,12,11,1,3, - 1,2,26,7,12,7,2,14,3,3,7,7,11,25,25,28,16,4,36,1,2,1,6,2,1,9,3,27,17,4,3,4,13,4,1,3,2,2,1,10,4,2,4,6,3,8,2,1,18,1,1,24,2,2,4,33,2,3,63,7,1,6, - 40,7,3,4,4,2,4,15,18,1,16,1,1,11,2,41,14,1,3,18,13,3,2,4,16,2,17,7,15,24,7,18,13,44,2,2,3,6,1,1,7,5,1,7,1,4,3,3,5,10,8,2,3,1,8,1,1,27,4,2,1, - 12,1,2,1,10,6,1,6,7,5,2,3,7,11,5,11,3,6,6,2,3,15,4,9,1,1,2,1,2,11,2,8,12,8,5,4,2,3,1,5,2,2,1,14,1,12,11,4,1,11,17,17,4,3,2,5,5,7,3,1,5,9,9,8, - 2,5,6,6,13,13,2,1,2,6,1,2,2,49,4,9,1,2,10,16,7,8,4,3,2,23,4,58,3,29,1,14,19,19,11,11,2,7,5,1,3,4,6,2,18,5,12,12,17,17,3,3,2,4,1,6,2,3,4,3,1, - 1,1,1,5,1,1,9,1,3,1,3,6,1,8,1,1,2,6,4,14,3,1,4,11,4,1,3,32,1,2,4,13,4,1,2,4,2,1,3,1,11,1,4,2,1,4,4,6,3,5,1,6,5,7,6,3,23,3,5,3,5,3,3,13,3,9,10, - 1,12,10,2,3,18,13,7,160,52,4,2,2,3,2,14,5,4,12,4,6,4,1,20,4,11,6,2,12,27,1,4,1,2,2,7,4,5,2,28,3,7,25,8,3,19,3,6,10,2,2,1,10,2,5,4,1,3,4,1,5, - 3,2,6,9,3,6,2,16,3,3,16,4,5,5,3,2,1,2,16,15,8,2,6,21,2,4,1,22,5,8,1,1,21,11,2,1,11,11,19,13,12,4,2,3,2,3,6,1,8,11,1,4,2,9,5,2,1,11,2,9,1,1,2, - 14,31,9,3,4,21,14,4,8,1,7,2,2,2,5,1,4,20,3,3,4,10,1,11,9,8,2,1,4,5,14,12,14,2,17,9,6,31,4,14,1,20,13,26,5,2,7,3,6,13,2,4,2,19,6,2,2,18,9,3,5, - 12,12,14,4,6,2,3,6,9,5,22,4,5,25,6,4,8,5,2,6,27,2,35,2,16,3,7,8,8,6,6,5,9,17,2,20,6,19,2,13,3,1,1,1,4,17,12,2,14,7,1,4,18,12,38,33,2,10,1,1, - 2,13,14,17,11,50,6,33,20,26,74,16,23,45,50,13,38,33,6,6,7,4,4,2,1,3,2,5,8,7,8,9,3,11,21,9,13,1,3,10,6,7,1,2,2,18,5,5,1,9,9,2,68,9,19,13,2,5, - 1,4,4,7,4,13,3,9,10,21,17,3,26,2,1,5,2,4,5,4,1,7,4,7,3,4,2,1,6,1,1,20,4,1,9,2,2,1,3,3,2,3,2,1,1,1,20,2,3,1,6,2,3,6,2,4,8,1,3,2,10,3,5,3,4,4, - 3,4,16,1,6,1,10,2,4,2,1,1,2,10,11,2,2,3,1,24,31,4,10,10,2,5,12,16,164,15,4,16,7,9,15,19,17,1,2,1,1,5,1,1,1,1,1,3,1,4,3,1,3,1,3,1,2,1,1,3,3,7, - 2,8,1,2,2,2,1,3,4,3,7,8,12,92,2,10,3,1,3,14,5,25,16,42,4,7,7,4,2,21,5,27,26,27,21,25,30,31,2,1,5,13,3,22,5,6,6,11,9,12,1,5,9,7,5,5,22,60,3,5, - 13,1,1,8,1,1,3,3,2,1,9,3,3,18,4,1,2,3,7,6,3,1,2,3,9,1,3,1,3,2,1,3,1,1,1,2,1,11,3,1,6,9,1,3,2,3,1,2,1,5,1,1,4,3,4,1,2,2,4,4,1,7,2,1,2,2,3,5,13, - 18,3,4,14,9,9,4,16,3,7,5,8,2,6,48,28,3,1,1,4,2,14,8,2,9,2,1,15,2,4,3,2,10,16,12,8,7,1,1,3,1,1,1,2,7,4,1,6,4,38,39,16,23,7,15,15,3,2,12,7,21, - 37,27,6,5,4,8,2,10,8,8,6,5,1,2,1,3,24,1,16,17,9,23,10,17,6,1,51,55,44,13,294,9,3,6,2,4,2,2,15,1,1,1,13,21,17,68,14,8,9,4,1,4,9,3,11,7,1,1,1, - 5,6,3,2,1,1,1,2,3,8,1,2,2,4,1,5,5,2,1,4,3,7,13,4,1,4,1,3,1,1,1,5,5,10,1,6,1,5,2,1,5,2,4,1,4,5,7,3,18,2,9,11,32,4,3,3,2,4,7,11,16,9,11,8,13,38, - 32,8,4,2,1,1,2,1,2,4,4,1,1,1,4,1,21,3,11,1,16,1,1,6,1,3,2,4,9,8,57,7,44,1,3,3,13,3,10,1,1,7,5,2,7,21,47,63,3,15,4,7,1,16,1,1,2,8,2,3,42,15,4, - 1,29,7,22,10,3,78,16,12,20,18,4,67,11,5,1,3,15,6,21,31,32,27,18,13,71,35,5,142,4,10,1,2,50,19,33,16,35,37,16,19,27,7,1,133,19,1,4,8,7,20,1,4, - 4,1,10,3,1,6,1,2,51,5,40,15,24,43,22928,11,1,13,154,70,3,1,1,7,4,10,1,2,1,1,2,1,2,1,2,2,1,1,2,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1, - 3,2,1,1,1,1,2,1,1, -}; - -// ----------------------------------------------------------------------------- - -enum { FONT_MAX_COLORS = 256}; -enum { FONT_MAX_STRING_LEN = 40000 }; // more glyphs than any reasonable person would show on the screen at once. you can only fit 20736 10x10 rects in a 1920x1080 window - -static unsigned font_palette[FONT_MAX_COLORS] = { - RGB4(248, 248, 242, 255), // foreground color - RGB4(249, 38, 114, 255), // operator - RGB4(174, 129, 255, 255), // numeric - RGB4(102, 217, 239, 255), // function - RGB4(249, 38, 114, 255), // keyword - RGB4(117, 113, 94, 255), // comment - RGB4(102, 217, 239, 255), // type - RGB4( 73, 72, 62, 255), // background color - RGB4( 39, 40, 34, 255), // clear color -}; - -typedef struct font_t { - bool initialized; - - //char filename[256]; - - // character info - // filled up by stb_truetype.h - stbtt_packedchar *cdata; - unsigned num_glyphs; - unsigned *cp2iter; - unsigned *iter2cp; - unsigned begin; // first glyph. used in cp2iter table to clamp into a lesser range - - // font info and data - int height; // bitmap height - int width; // bitmap width - float font_size; // font size in pixels (matches scale[0+1] size below) - float factor; // font factor (font_size / (ascent - descent)) - float scale[7]; // user defined font scale (match H1..H6 tags) - - // displacement info - float ascent; // max distance above baseline for all glyphs - float descent; // max distance below baseline for all glyphs - float linegap; // distance betwen ascent of next line and descent of current line - float linedist; // distance between the baseline of two lines (ascent - descent + linegap) - - // opengl stuff - GLuint vao; - GLuint program; - - // font bitmap texture - // generated using stb_truetype.h - GLuint texture_fontdata; - - // metadata texture. - // first row contains information on which parts of the bitmap correspond to a glyph. - // the second row contain information about the relative displacement of the glyph relative to the cursor position - GLuint texture_offsets; - - // color texture - // used to color each glyph individually, e.g. for syntax highlighting - GLuint texture_colors; - - // vbos - GLuint vbo_quad; // vec2: simply just a regular [0,1]x[0,1] quad - GLuint vbo_instances; // vec4: (char_pos_x, char_pos_y, char_index, color_index) - - // render state - renderstate_t rs; -} font_t; - -enum { FONTS_MAX = 10 }; - -static font_t fonts[FONTS_MAX] = {0}; - -static -void font_init() { - do_once { - font_face_from_mem(FONT_FACE1, bm_mini_ttf,countof(bm_mini_ttf), 42.5f, 0); - font_face_from_mem(FONT_FACE2, bm_mini_ttf,countof(bm_mini_ttf), 42.5f, 0); - font_face_from_mem(FONT_FACE3, bm_mini_ttf,countof(bm_mini_ttf), 42.5f, 0); - font_face_from_mem(FONT_FACE4, bm_mini_ttf,countof(bm_mini_ttf), 42.5f, 0); - font_face_from_mem(FONT_FACE5, bm_mini_ttf,countof(bm_mini_ttf), 42.5f, 0); - font_face_from_mem(FONT_FACE6, bm_mini_ttf,countof(bm_mini_ttf), 42.5f, 0); - font_face_from_mem(FONT_FACE7, bm_mini_ttf,countof(bm_mini_ttf), 42.5f, 0); - font_face_from_mem(FONT_FACE8, bm_mini_ttf,countof(bm_mini_ttf), 42.5f, 0); - font_face_from_mem(FONT_FACE9, bm_mini_ttf,countof(bm_mini_ttf), 42.5f, 0); - font_face_from_mem(FONT_FACE10,bm_mini_ttf,countof(bm_mini_ttf), 42.5f, 0); - } -} - -// Remap color within all existing color textures -void font_color(const char *tag, uint32_t color) { - font_init(); - - unsigned index = *tag - FONT_COLOR1[0]; - if( index < FONT_MAX_COLORS ) { - font_palette[index] = color; - - for( int i = 0; i < FONTS_MAX; ++i ) { - font_t *f = &fonts[i]; - if( f->initialized ) { - glActiveTexture(GL_TEXTURE2); - glBindTexture(GL_TEXTURE_1D, f->texture_colors); - glTexSubImage1D(GL_TEXTURE_1D, 0, 0, FONT_MAX_COLORS, GL_RGBA, GL_UNSIGNED_BYTE, font_palette); - } - } - } -} - -void ui_font() { - for( int i = 0; i < countof(fonts); ++i ) { - if( ui_collapse(va("Font %d", i), va("%p%d", &fonts[i], i) ) ) { - font_t *f = &fonts[i]; - ui_float("Ascent", &f->ascent); - ui_float("Descent", &f->descent); - ui_float("Line Gap", &f->linegap); - f->linedist = (f->ascent-f->descent+f->linegap); - ui_collapse_end(); - } - } -} - -void font_scale(const char *tag, int s, float v) { - font_init(); - - if (s < 0 || s >= 10) return; - - unsigned index = *tag - FONT_FACE1[0]; - if( index > FONTS_MAX ) return; - - font_t *f = &fonts[index]; - if (!f->initialized) return; - - f->scale[s] = v / f->font_size; -} - -void font_scales(const char *tag, float h1, float h2, float h3, float h4, float h5, float h6) { - font_init(); - - unsigned index = *tag - FONT_FACE1[0]; - if( index > FONTS_MAX ) return; - - font_t *f = &fonts[index]; - if (!f->initialized) return; - - f->scale[0] = h1 / f->font_size; - f->scale[1] = h1 / f->font_size; - f->scale[2] = h2 / f->font_size; - f->scale[3] = h3 / f->font_size; - f->scale[4] = h4 / f->font_size; - f->scale[5] = h5 / f->font_size; - f->scale[6] = h6 / f->font_size; -} - -// 1. Compile the shaders. -// 1. Call stb_truetype.h routines to read and parse a .ttf file. -// 1. Create a bitmap that is uploaded to the gpu using opengl. -// 1. Calculate and save a bunch of useful variables and put them in the global font variable. -void font_face_from_mem(const char *tag, const void *ttf_data, unsigned ttf_len, float font_size, unsigned flags) { - unsigned index = *tag - FONT_FACE1[0]; - if( index > FONTS_MAX ) return; - if( font_size <= 0 || font_size > 72 ) return; - if( !ttf_data || !ttf_len ) return; - - if(!(flags & FONT_EM)) - flags |= FONT_ASCII; // ensure this minimal range [0020-00FF] is almost always in - - font_t *f = &fonts[index]; - f->initialized = 1; - - // load .ttf into a bitmap using stb_truetype.h - int dim = flags & FONT_4096 ? 4096 : flags & FONT_2048 ? 2048 : flags & FONT_1024 ? 1024 : 512; - f->width = dim; - f->height = dim; - - // change size [h1(largest) to h3(regular) to h6(smallest)] - f->font_size = font_size; - f->scale[0] = 1.0000f; // H1 - f->scale[1] = 1.0000f; // H1 - f->scale[2] = 0.7500f; // H2 - f->scale[3] = 0.6600f; // H3 - f->scale[4] = 0.5000f; // H4 - f->scale[5] = 0.3750f; // H5 - f->scale[6] = 0.2500f; // H6 - - const char *vs = vfs_read("vs_font.glsl"); - const char *fs = vfs_read("fs_font.glsl"); - f->program = shader(vs, fs, "vertexPosition,instanceGlyph", "outColor", NULL); - - // figure out what ranges we're about to bake - #define MERGE_TABLE(table) do { \ - for( unsigned i = 0 ; table[i]; i += 2 ) { \ - uint64_t begin = table[i+0], end = table[i+1]; \ - for( unsigned j = begin; j <= end; ++j ) { \ - array_push(sorted, j); \ - } \ - } } while(0) - #define MERGE_PACKED_TABLE(codepoint_begin, table) do { \ - for( int i = 0, begin = codepoint_begin, end = countof(table); i < end; i++) { \ - array_push(sorted, (unsigned)(begin + table[i])); \ - begin += table[i]; \ - } } while(0) - - array(uint64_t) sorted = 0; - if(flags & FONT_ASCII) { MERGE_TABLE(table_common); } - if(flags & FONT_EM) { MERGE_TABLE(table_emoji); } - if(flags & FONT_EU) { MERGE_TABLE(table_eastern_europe); } - if(flags & FONT_RU) { MERGE_TABLE(table_western_europe); } - if(flags & FONT_EL) { MERGE_TABLE(table_western_europe); } - if(flags & FONT_AR) { MERGE_TABLE(table_middle_east); } - if(flags & FONT_HE) { MERGE_TABLE(table_middle_east); } - if(flags & FONT_TH) { MERGE_TABLE(table_thai); } - if(flags & FONT_VI) { MERGE_TABLE(table_vietnamese); } - if(flags & FONT_KR) { MERGE_TABLE(table_korean); } - if(flags & FONT_JP) { MERGE_TABLE(table_chinese_japanese_common); MERGE_PACKED_TABLE(0x4E00, packed_table_japanese); } - if(flags & FONT_ZH) { MERGE_TABLE(table_chinese_japanese_common); MERGE_PACKED_TABLE(0x4E00, packed_table_chinese); } // zh-simplified - if(flags & FONT_ZH) { MERGE_TABLE(table_chinese_punctuation); } // both zh-simplified and zh-full -// if(flags & FONT_ZH) { MERGE_TABLE(table_chinese_full); } // zh-full - array_sort(sorted, less_64_ptr); - array_unique(sorted, less_64_ptr); // sort + unique pass - - // pack and create bitmap - unsigned char *bitmap = (unsigned char*)MALLOC(f->height*f->width); - - int charCount = *array_back(sorted) - sorted[0] + 1; // 0xEFFFF; - f->cdata = (stbtt_packedchar*)CALLOC(1, sizeof(stbtt_packedchar) * charCount); - f->iter2cp = (unsigned*)MALLOC( sizeof(unsigned) * charCount ); - f->cp2iter = (unsigned*)MALLOC( sizeof(unsigned) * charCount ); - for( int i = 0; i < charCount; ++i ) - f->iter2cp[i] = f->cp2iter[i] = 0xFFFD; // default invalid glyph - - // find first char - { - stbtt_fontinfo info = {0}; - stbtt_InitFont(&info, ttf_data, stbtt_GetFontOffsetForIndex(ttf_data,0)); - - for( int i = 0, end = array_count(sorted); i < end; ++i ) { - unsigned glyph = sorted[i]; - if(!stbtt_FindGlyphIndex(&info, glyph)) continue; - f->begin = glyph; - break; - } - } - - stbtt_pack_context pc; - if( !stbtt_PackBegin(&pc, bitmap, f->width, f->height, 0, 1, NULL) ) { - PANIC("Failed to initialize atlas font"); - } - stbtt_PackSetOversampling(&pc, flags & FONT_OVERSAMPLE_X ? 2 : 1, flags & FONT_OVERSAMPLE_Y ? 2 : 1); /*useful on small fonts*/ - int count = 0; - for( int i = 0, num = array_count(sorted); i < num; ++i ) { - - uint64_t begin = sorted[i], end = sorted[i]; - while( i < (num-1) && (sorted[i+1]-sorted[i]) == 1 ) end = sorted[++i]; - //printf("(%d,%d)", (unsigned)begin, (unsigned)end); - - if( begin < f->begin ) continue; - - if( stbtt_PackFontRange(&pc, ttf_data, 0, f->font_size, begin, end - begin + 1, (stbtt_packedchar*)f->cdata + begin - f->begin) ) { - for( uint64_t cp = begin; cp <= end; ++cp ) { - // unicode->index runtime lookup - f->cp2iter[ cp - f->begin ] = count; - f->iter2cp[ count++ ] = cp; - } - } else { - PRINTF("!Failed to pack atlas font. Likely out of texture mem."); - } - } - stbtt_PackEnd(&pc); - f->num_glyphs = count; - - assert( f->num_glyphs < charCount ); - - array_free(sorted); - - // calculate vertical font metrics - stbtt_fontinfo info = {0}; - stbtt_InitFont(&info, ttf_data, stbtt_GetFontOffsetForIndex(ttf_data,0)); - - int a, d, l; - if (!stbtt_GetFontVMetricsOS2(&info, &a, &d, &l)) - stbtt_GetFontVMetrics(&info, &a, &d, &l); - - f->ascent = a; - f->descent = d; - f->linegap = l; - f->linedist = (a - d + l); - f->factor = (f->font_size / (f->ascent - f->descent)); - - // save some gpu memory by truncating unused vertical space in atlas texture - { - int max_y1 = 0; - for (int i = 0; i < f->num_glyphs; i++) { - int cp = f->iter2cp[i]; - if( cp == 0xFFFD ) continue; - stbtt_packedchar *cd = &f->cdata[ cp - f->begin ]; - if (cd->y1 > max_y1) { - max_y1 = cd->y1; - } - } - // cut away the unused part of the bitmap - f->height = max_y1+1; - } - - PRINTF("Font atlas size %dx%d (GL_R, %5.2fKiB) (%u glyphs)\n", f->width, f->height, f->width * f->height / 1024.f, f->num_glyphs); - - // vao - glGenVertexArrays(1, &f->vao); - glBindVertexArray(f->vao); - - // quad vbo setup, used for glyph vertex positions, - // just uv coordinates that will be stretched accordingly by the glyphs width and height - float v[] = {0,0, 1,0, 0,1, 0,1, 1,0, 1,1}; - - glGenBuffers(1, &f->vbo_quad); - glBindBuffer(GL_ARRAY_BUFFER, f->vbo_quad); - glBufferData(GL_ARRAY_BUFFER, sizeof(v), v, GL_STATIC_DRAW); - - glEnableVertexAttribArray(0); - glVertexAttribPointer(0,2,GL_FLOAT,GL_FALSE,0,(void*)0); - glVertexAttribDivisor(0, 0); - - // instance vbo setup: for glyph positions, glyph index and color index - glGenBuffers(1, &f->vbo_instances); - glBindBuffer(GL_ARRAY_BUFFER, f->vbo_instances); - glBufferData(GL_ARRAY_BUFFER, sizeof(float)*4*FONT_MAX_STRING_LEN, NULL, GL_DYNAMIC_DRAW); - - glEnableVertexAttribArray(1); - glVertexAttribPointer(1,4,GL_FLOAT,GL_FALSE,0,(void*)0); - glVertexAttribDivisor(1, 1); - // glEnable(GL_FRAMEBUFFER_SRGB); - - // setup and upload font bitmap texture - glGenTextures(1, &f->texture_fontdata); - glActiveTexture(GL_TEXTURE0); - glBindTexture(GL_TEXTURE_2D, f->texture_fontdata); - glTexImage2D(GL_TEXTURE_2D, 0, GL_RED, f->width, f->height, 0, GL_RED, GL_UNSIGNED_BYTE, bitmap); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); - - // last chance to inspect the font atlases - if( flag("--font-debug") ) - stbi_write_png(va("font_debug%d.png", index), f->width, f->height, 1, bitmap, 0); - - FREE(bitmap); - - // setup and upload font metadata texture - // used for lookup in the bitmap texture - glGenTextures(1, &f->texture_offsets); - glActiveTexture(GL_TEXTURE1); - glBindTexture(GL_TEXTURE_2D, f->texture_offsets); - - float *texture_offsets = (float*)MALLOC(sizeof(float)*8*f->num_glyphs); - - // remap larger 0xFFFF unicodes into smaller NUM_GLYPHS glyphs - for (int i = 0, count = 0; i < f->num_glyphs; i++) { - - unsigned cp = f->iter2cp[ i ]; - if(cp == 0xFFFD) continue; - - stbtt_packedchar *cd = &f->cdata[ cp - f->begin ]; -// if(cd->x1==cd->x0) { f->iter2cp[i] = f->cp2iter[cp - f->begin] = 0xFFFD; continue; } - - int k1 = 0*f->num_glyphs + count; - int k2 = 1*f->num_glyphs + count; ++count; - - texture_offsets[4*k1+0] = cd->x0/(double)f->width; - texture_offsets[4*k1+1] = cd->y0/(double)f->height; - texture_offsets[4*k1+2] = (cd->x1-cd->x0)/(double)f->width; - texture_offsets[4*k1+3] = (cd->y1-cd->y0)/(double)f->height; - - texture_offsets[4*k2+0] = cd->xoff/(double)f->width; - texture_offsets[4*k2+1] = cd->yoff/(double)f->height; - texture_offsets[4*k2+2] = cd->xoff2/(double)f->width; - texture_offsets[4*k2+3] = cd->yoff2/(double)f->height; - } - - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32F, f->num_glyphs, 2, 0, GL_RGBA, GL_FLOAT, texture_offsets); - - FREE(texture_offsets); - - // setup color texture - glGenTextures(1, &f->texture_colors); - glActiveTexture(GL_TEXTURE2); - glBindTexture(GL_TEXTURE_1D, f->texture_colors); - glTexImage1D(GL_TEXTURE_1D, 0, GL_RGBA, FONT_MAX_COLORS, 0, GL_RGBA, GL_UNSIGNED_BYTE, font_palette); - glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_WRAP_S, GL_REPEAT); - - // upload constant uniforms - glUseProgram(f->program); - glUniform1i(glGetUniformLocation(f->program, "sampler_font"), 0); - glUniform1i(glGetUniformLocation(f->program, "sampler_meta"), 1); - glUniform1i(glGetUniformLocation(f->program, "sampler_colors"), 2); - - glUniform2f(glGetUniformLocation(f->program, "res_bitmap"), f->width, f->height); - glUniform2f(glGetUniformLocation(f->program, "res_meta"), f->num_glyphs, 2); - glUniform1f(glGetUniformLocation(f->program, "num_colors"), FONT_MAX_COLORS); - (void)flags; - - // set up pipeline - f->rs = renderstate(); - f->rs.blend_enabled = 1; - f->rs.blend_func = GL_FUNC_ADD; - f->rs.blend_src = GL_SRC_ALPHA; - f->rs.blend_dst = GL_ONE_MINUS_SRC_ALPHA; - f->rs.scissor_test_enabled = 1; - f->rs.depth_test_enabled = 0; - f->rs.cull_face_enabled = 0; -} - -void font_face(const char *tag, const char *filename_ttf, float font_size, unsigned flags) { - font_init(); - - int len; - const char *buffer = vfs_load(filename_ttf, &len); - if( !buffer ) buffer = file_load(filename_ttf, &len); - - font_face_from_mem(tag, buffer,len, font_size, flags); -} - -static -void font_draw_cmd(font_t *f, const float *glyph_data, int glyph_idx, float factor, vec2 offset, vec4 rect) { - // Backup GL state - GLint last_program, last_vertex_array; - GLint last_texture0, last_texture1, last_texture2; - GLint last_blend_src, last_blend_dst; - GLint last_blend_equation_rgb, last_blend_equation_alpha; - - glGetIntegerv(GL_CURRENT_PROGRAM, &last_program); - glGetIntegerv(GL_VERTEX_ARRAY_BINDING, &last_vertex_array); - - glActiveTexture(GL_TEXTURE0); - glGetIntegerv(GL_TEXTURE_BINDING_2D, &last_texture0); - glActiveTexture(GL_TEXTURE1); - glGetIntegerv(GL_TEXTURE_BINDING_2D, &last_texture1); - glActiveTexture(GL_TEXTURE2); - glGetIntegerv(GL_TEXTURE_BINDING_1D, &last_texture2); - - glScissor(rect.x, window_height() - (rect.y+rect.w), rect.z, rect.w); - - glActiveTexture(GL_TEXTURE0); - glBindTexture(GL_TEXTURE_2D, f->texture_fontdata); - glActiveTexture(GL_TEXTURE1); - glBindTexture(GL_TEXTURE_2D, f->texture_offsets); - glActiveTexture(GL_TEXTURE2); - glBindTexture(GL_TEXTURE_1D, f->texture_colors); - - // update bindings - glBindVertexArray(f->vao); - - // update uniforms - glUseProgram(f->program); - glUniform1f(glGetUniformLocation(f->program, "scale_factor"), factor); - glUniform2fv(glGetUniformLocation(f->program, "string_offset"), 1, &offset.x); - glUniform1f(glGetUniformLocation(f->program, "offset_firstline"), f->ascent*f->factor); - - GLint dims[4] = {0}; - glGetIntegerv(GL_VIEWPORT, dims); - glUniform2f(glGetUniformLocation(f->program, "resolution"), dims[2], dims[3]); - - // actual uploading - glBindBuffer(GL_ARRAY_BUFFER, f->vbo_instances); - glBufferSubData(GL_ARRAY_BUFFER, 0, 4*4*glyph_idx, glyph_data); - - // setup pipeline - renderstate_apply(&f->rs); - - // actual drawing - glDrawArraysInstanced(GL_TRIANGLES, 0, 6, glyph_idx); - - // Restore modified GL state - glUseProgram(last_program); - - glActiveTexture(GL_TEXTURE0); - glBindTexture(GL_TEXTURE_2D, last_texture0); - glActiveTexture(GL_TEXTURE1); - glBindTexture(GL_TEXTURE_2D, last_texture1); - glActiveTexture(GL_TEXTURE2); - glBindTexture(GL_TEXTURE_1D, last_texture2); - - glBindVertexArray(last_vertex_array); -} - -// 1. call font_face() if it's the first time it's called. -// 1. parse the string and update the instance vbo, then upload it -// 1. draw the string -static -vec2 font_draw_ex(const char *text, vec2 offset, vec4 rect, const char *col, void (*draw_cmd)(font_t *,const float *,int,float,vec2,vec4)) { - font_init(); - - // sanity checks - int len = strlen(text); - if (len >= FONT_MAX_STRING_LEN) { - return vec2(0, 0); - } - - // pre-init - static __thread float *text_glyph_data; - do_once text_glyph_data = MALLOC(4 * FONT_MAX_STRING_LEN * sizeof(float)); - - // ready - font_t *f = &fonts[0]; - int S = 3; - uint32_t color = 0; - float X = 0, Y = 0, W = 0, L = f->ascent*f->factor*f->scale[S], LL = 0; // LL=largest linedist - offset.y = -offset.y; // invert y polarity - - // utf8 to utf32 - array(uint32_t) unicode = string32(text); - - // parse string - float *t = text_glyph_data; - for( int i = 0, end = array_count(unicode); i < end; ++i ) { - uint32_t ch = unicode[i]; - - if( ch == '\n' ) { - // change cursor, advance y, record largest x as width, increase height - if( X > W ) W = X; - X = 0.0; - Y -= f->linedist*f->factor*f->scale[S]; - // if (i+1==end) { //@hack: ensures we terminate the height at the correct position - // Y -= (f->descent+f->linegap)*f->factor*f->scale[S]; - // } - continue; - } - if( ch >= 1 && ch <= 6 ) { - // flush previous state - if(draw_cmd) draw_cmd(f, text_glyph_data, (t - text_glyph_data)/4, f->scale[S], offset, rect); - t = text_glyph_data; - - // reposition offset to align new baseline - // @fixme: - // offset.y += (f->linedist - f->linegap) * ( f->scale[ch] - f->scale[S] ); - - // change size - S = ch; - //@hack: use descent when we use >H4 - L = f->ascent*f->factor*f->scale[S]; - if(L > LL) LL = L; - continue; - } - if( ch >= 0x1a && ch <= 0x1f ) { - color = ch - 0x1a; - continue; - } - if( ch >= 0x10 && ch <= 0x19 ) { - if( fonts[ ch - 0x10 ].initialized) { - // flush previous state - if(draw_cmd) draw_cmd(f, text_glyph_data, (t - text_glyph_data)/4, f->scale[S], offset, rect); - t = text_glyph_data; - - // change face - f = &fonts[ ch - 0x10 ]; - L = f->ascent*f->factor*f->scale[S]; - if(L > LL) LL = L; - } - continue; - } - - if (!LL) - LL = L; - - // convert to vbo data - int cp = ch - f->begin; // f->cp2iter[ch - f->begin]; - //if(cp == 0xFFFD) continue; - //if (cp > f->num_glyphs) continue; - - *t++ = X; - *t++ = Y; - *t++ = f->cp2iter[cp]; - *t++ = col ? col[i] : color; - - X += f->cdata[cp].xadvance*f->scale[S]; - } - - if(draw_cmd) draw_cmd(f, text_glyph_data, (t - text_glyph_data)/4, f->scale[S], offset, rect); - - //if(strstr(text, "fps")) printf("(%f,%f) (%f) L:%f LINEDIST:%f\n", X, Y, W, L, f->linedist); - return abs2(vec2(W*W > X*X ? W : X, Y*Y > LL*LL ? Y : LL)); -} - -static vec2 gotoxy = {0}; - -// Return cursor -vec2 font_xy() { - return gotoxy; -} - -// Relocate cursor -void font_goto(float x, float y) { - gotoxy = vec2(x, y); -} - -// Print and linefeed. Text may include markup code -vec2 font_clip(const char *text, vec4 rect) { - int l=0,c=0,r=0,j=0,t=0,b=0,m=0,B=0; - - while ( text[0] == FONT_LEFT[0] ) { - int has_set=0; - if (text[1] == FONT_LEFT[1]) l = 1, has_set=1; - if (text[1] == FONT_CENTER[1]) c = 1, has_set=1; - if (text[1] == FONT_RIGHT[1]) r = 1, has_set=1; - if (text[1] == FONT_JUSTIFY[1]) j = 1, has_set=1; - if (text[1] == FONT_TOP[1]) t = 1, has_set=1; - if (text[1] == FONT_BOTTOM[1]) b = 1, has_set=1; - if (text[1] == FONT_MIDDLE[1]) m = 1, has_set=1; - if (text[1] == FONT_BASELINE[1]) B = 1, has_set=1; - if (!has_set) break; - else text += 2; - } - - int num_newlines = 0; - for (int i = 0, end = strlen(text); i < end; ++i) { - if (text[i] == '\n') ++num_newlines; - } - - if (num_newlines > 1) { - vec2 text_dims = font_rect(text); - char tags[4] = {0}; - int t=0; - while (*text) { - char ch = *text; - - if( (ch >= 1 && ch <= 6) || - (ch >= 0x1a && ch <= 0x1f) || - (ch >= 0x10 && ch <= 0x19)) { - if (t < sizeof(tags)) tags[t++] = ch; - } - else break; - ++text; - } - array(char *) lines = strsplit(text, "\n"); - if (b) { - gotoxy.y += (rect.w - text_dims.y); - } - if (m) { - gotoxy.y += (rect.w/2. - text_dims.y/2.); - } - if (B) { - gotoxy.y += (rect.w/2. - text_dims.y/1.); - } - for (int i = 0; i < array_count(lines); i++) { - char *line = va("%s%s\n", tags, lines[i]); - vec2 text_rect = font_rect(line); - if( l || c || r ) { - gotoxy.x = l ? rect.x : r ? ((rect.x+rect.z) - text_rect.x) : rect.x+rect.z/2. - text_rect.x/2.; - } else if (j) { - float words_space = 0.0f; - array(char *) words = strsplit(lines[i], " "); - for (int k = 0; k < array_count(words); ++k) { - words_space += font_rect(words[k]).x; - } - if (array_count(words) == 0) { - gotoxy.y += text_rect.y; - continue; - } - float extra_space = rect.z - words_space; - int gaps = array_count(words) - 1; - float space_offset = gaps > 0 ? extra_space / (float)gaps : 0; - for (int k = 0; k < array_count(words); ++k) { - vec2 dims = font_draw_ex(va("%s%s", tags, words[k]), gotoxy, rect, NULL, font_draw_cmd); - gotoxy.x += dims.x + space_offset; - } - gotoxy.x = rect.x; - } - - if (!j) { - font_draw_ex(line, gotoxy, rect, NULL, font_draw_cmd); - } - - gotoxy.y += text_rect.y; - } - return text_dims; - } else { - if( l || c || r ) { - vec2 text_rect = font_rect(text); - gotoxy.x = l ? rect.x : r ? ((rect.x+rect.z) - text_rect.x) : rect.x+rect.z/2. - text_rect.x/2.; - } - if( t || b || m || B ) { - vec2 text_rect = font_rect(text); - gotoxy.y = t ? rect.y : b ? ((rect.y+rect.w) - text_rect.y) : m ? rect.y+rect.w/2.-text_rect.y/2. : rect.y+rect.w/2.-text_rect.y/1; - } - vec2 dims = font_draw_ex(text, gotoxy, rect, NULL, font_draw_cmd); - gotoxy.y += strchr(text, '\n') ? dims.y : 0; - gotoxy.x += !strchr(text, '\n') ? dims.x : 0; - return dims; - } -} - -vec2 font_print(const char *text) { - vec4 dims = {0, 0, window_width(), window_height()}; - return font_clip(text, dims); -} - -const char *font_wrap(const char *text, float max_width) { - // return early if the text fits the max_width already - if (font_rect(text).x <= max_width) { - return text; - } - - // skip alignment flags and collect tags - while ( text[0] == FONT_LEFT[0] ) { - int has_set=0; - if (text[1] == FONT_LEFT[1]) has_set=1; - if (text[1] == FONT_CENTER[1]) has_set=1; - if (text[1] == FONT_RIGHT[1]) has_set=1; - if (text[1] == FONT_JUSTIFY[1]) has_set=1; - if (text[1] == FONT_TOP[1]) has_set=1; - if (text[1] == FONT_BOTTOM[1]) has_set=1; - if (text[1] == FONT_MIDDLE[1]) has_set=1; - if (text[1] == FONT_BASELINE[1]) has_set=1; - if (!has_set) break; - else text += 2; - } - - char tags[4] = {0}; - int t=0; - while (*text) { - char ch = *text; - - if( (ch >= 1 && ch <= 6) || - (ch >= 0x1a && ch <= 0x1f) || - (ch >= 0x10 && ch <= 0x19)) { - if (t < sizeof(tags)) tags[t++] = ch; - } - else break; - ++text; - } - - array(char*) words = strsplit(text, " "); - static __thread int slot = 0; - static __thread char buf[16][FONT_MAX_STRING_LEN] = {0}; - - int len = strlen(text) + array_count(words); - slot = (slot+1) % 16; - memset(buf[slot], 0, len+1); - - char *out = buf[slot]; - - float width = 0.0f; - for (int i = 0; i < array_count(words); ++i) { - char *word = words[i]; - float word_width = font_rect(va("%s%s ", tags, word)).x; - if (strstr(word, "\n")) { - width = word_width; - strcat(out, va("%s ", word)); - } else { - if (width+word_width > max_width) { - width = 0.0f; - strcat(out, "\n"); - } - width += word_width; - strcat(out, va("%s ", word)); - } - } - - // get rid of the space added at the end - out[strlen(out)] = 0; - - return out; -} - -// Print a code snippet with syntax highlighting -vec2 font_highlight(const char *text, const void *colors) { - vec4 screen_dim = {0, 0, window_width(), window_height()}; - vec2 dims = font_draw_ex(text, gotoxy, screen_dim, (const char *)colors, font_draw_cmd); - gotoxy.y += strchr(text, '\n') ? dims.y : 0; - gotoxy.x += !strchr(text, '\n') ? dims.x : 0; - return dims; -} - -// Calculate the size of a string, in the pixel size specified. Count stray newlines too. -vec2 font_rect(const char *str) { - vec4 dims = {0, 0, window_width(), window_height()}; - return font_draw_ex(str, gotoxy, dims, NULL, NULL); -} - -font_metrics_t font_metrics(const char *text) { - font_metrics_t m={0}; - int S = 3; - font_t *f = &fonts[0]; - - // utf8 to utf32 - array(uint32_t) unicode = string32(text); - - // parse string - for( int i = 0, end = array_count(unicode); i < end; ++i ) { - uint32_t ch = unicode[i]; - if( ch >= 1 && ch <= 6 ) { - S = ch; - continue; - } - if( ch >= 0x1a && ch <= 0x1f ) { - if( fonts[ ch - 0x1a ].initialized) { - // change face - f = &fonts[ ch - 0x1a ]; - } - continue; - } - } - - m.ascent = f->ascent*f->factor*f->scale[S]; - m.descent = f->descent*f->factor*f->scale[S]; - m.linegap = f->linegap*f->factor*f->scale[S]; - m.linedist = f->linedist*f->factor*f->scale[S]; - return m; -} - -void *font_colorize(const char *text, const char *comma_types, const char *comma_keywords) { - // reallocate memory - static __thread int slot = 0; - static __thread char *buf[16] = {0}; - static __thread array(char*) list[16] = {0}; - - slot = (slot+1) % 16; - buf[slot] = REALLOC(buf[slot], strlen(text)+1); - memset(buf[slot], 0, strlen(text)+1); - - // ready - char *col = buf[slot]; - char *str = STRDUP(text); - - // split inputs - array(char*) TYPES = strsplit(comma_types, ", "); - array(char*) KEYWORDS = strsplit(comma_keywords, ", "); - - // ignored characters - char delims[] = " ,(){}[];\t\n"; - int num_delims = strlen(delims); - - char operators[] = "/+-*<>=&|"; - int num_operators = strlen(operators); - - struct token { - char *start, *stop; - enum { - TOKEN_OTHER,TOKEN_OPERATOR,TOKEN_NUMERIC,TOKEN_FUNCTION, - TOKEN_KEYWORD,TOKEN_COMMENT,TOKEN_VARIABLE,TOKEN_UNSET - } type; - } tokens[9999]; // hurr - int num_tokens = 0; // running counter - - char *ptr = str; - while (*ptr) { - // skip delimiters - int is_delim = 0; - for (int i = 0; i < num_delims; i++) { - if (*ptr == delims[i]) { - is_delim = 1; - break; - } - } - - if (is_delim == 1) { - ptr++; - continue; - } - - // found a token! - char *start = ptr; - - if (*ptr == '/' && *(ptr+1) == '/') { - // found a line comment, go to end of line or end of file - while (*ptr != '\n' && *ptr != '\0') { - ptr++; - } - - tokens[num_tokens].start = start; - tokens[num_tokens].stop = ptr; - tokens[num_tokens].type = TOKEN_COMMENT; - num_tokens++; - - ptr++; - continue; - } - - if (*ptr == '/' && *(ptr+1) == '*') { - // found a block comment, go to end of line or end of file - while (!(*ptr == '*' && *(ptr+1) == '/') && *ptr != '\0') { - ptr++; - } - ptr++; - - tokens[num_tokens].start = start; - tokens[num_tokens].stop = ptr+1; - tokens[num_tokens].type = TOKEN_COMMENT; - num_tokens++; - - ptr++; - continue; - } - - // check if it's an operator - int is_operator = 0; - for (int i = 0; i < num_operators; i++) { - if (*ptr == operators[i]) { - is_operator = 1; - break; - } - } - - if (is_operator == 1) { - tokens[num_tokens].start = start; - tokens[num_tokens].stop = ptr+1; - tokens[num_tokens].type = TOKEN_OPERATOR; - num_tokens++; - ptr++; - continue; - } - - // it's either a name, type, a keyword, a function, or an names separated by an operator without spaces - while (*ptr) { - // check whether it's an operator stuck between two names - int is_operator2 = 0; - for (int i = 0; i < num_operators; i++) { - if (*ptr == operators[i]) { - is_operator2 = 1; - break; - } - } - - if (is_operator2 == 1) { - tokens[num_tokens].start = start; - tokens[num_tokens].stop = ptr; - tokens[num_tokens].type = TOKEN_UNSET; - num_tokens++; - break; - } - - // otherwise go until we find the next delimiter - int is_delim2 = 0; - for (int i = 0; i < num_delims; i++) { - if (*ptr == delims[i]) { - is_delim2 = 1; - break; - } - } - - if (is_delim2 == 1) { - tokens[num_tokens].start = start; - tokens[num_tokens].stop = ptr; - tokens[num_tokens].type = TOKEN_UNSET; - num_tokens++; - ptr++; - break; - } - - // did not find delimiter, check next char - ptr++; - } - } - - // determine the types of the unset tokens, i.e. either - // a name, a type, a keyword, or a function - int num_keywords = array_count(KEYWORDS); - int num_types = array_count(TYPES); - - for (int i = 0; i < num_tokens; i++) { - // TOKEN_OPERATOR and TOKEN_COMMENT should already be set, so skip those - if (tokens[i].type != TOKEN_UNSET) { - continue; - } - - char end_char = *tokens[i].stop; - - // temporarily null terminate at end of token, restored after parsing - *tokens[i].stop = '\0'; - - // parse - - // if it's a keyword - int is_keyword = 0; - for (int j = 0; j < num_keywords; j++) { - if (strcmp(tokens[i].start, KEYWORDS[j]) == 0) { - is_keyword = 1; - break; - } - } - if (is_keyword == 1) { - tokens[i].type = TOKEN_KEYWORD; - *tokens[i].stop = end_char; - continue; - } - - // Check if it's a function - float f; - if (end_char == '(') { - tokens[i].type = TOKEN_FUNCTION; - *tokens[i].stop = end_char; - continue; - } - - // or if it's a numeric value. catches both integers and floats - if (sscanf(tokens[i].start, "%f", &f) == 1) { - tokens[i].type = TOKEN_NUMERIC; - *tokens[i].stop = end_char; - continue; - } - - // if it's a variable type - int is_type = 0; - for (int j = 0; j < num_types; j++) { - if (strcmp(tokens[i].start, TYPES[j]) == 0) { - is_type = 1; - break; - } - } - if (is_type == 1) { - tokens[i].type = TOKEN_VARIABLE; - *tokens[i].stop = end_char; - continue; - } - - // otherwise it's a regular variable name - tokens[i].type = TOKEN_OTHER; - *tokens[i].stop = end_char; - } - - // print all tokens and their types - for (int i = 0; i < num_tokens; i++) { - - for (char *p = tokens[i].start; p != tokens[i].stop; p++) { - col[(p - str)] = tokens[i].type; - } - } - - FREE(str); - return col; -} - +// font framework. original code by Vassvik (UNLICENSED) +// - rlyeh, public domain. +// +// [x] embedded default font (bm mini). +// [x] oversampling, texture dimensions. +// [x] utf8, unicode ranges. +// [x] markup opcodes. +// [x] faces (italic, bold, regular, cjk), colors and sizes. +// [x] unicode ranges from dear-imgui (@ocornut allowed to mit-0 relicense the data tables). +// [*] alignment. kinda hacky. revisit some day. +// [ ] underlining, soft/hard shadows, outlines. +// [ ] clip/wrap/overflow regions. +// [ ] text-shaping, text-layout. +// [ ] text-wrapping. +// [ ] optimizations. +// +// ## language families that could be merged on a single texture alias +// - EU+EL+RU +// - AR+HE+RU +// - TH+VI+TW +// - ZH +// - JP +// - KR + +// ----------------------------------------------------------------------------- + +// bm-mini.zip (public domain font) +// http://bitmapmania.m78.com +// cooz@m78.com + +static const char bm_mini_ttf[] = { +/*000000*/ 0x00,0x01,0x00,0x00,0x00,0x0e,0x00,0x30,0x00,0x03,0x00,0xb0,0x4f,0x53,0x2f,0x32, +/*000010*/ 0x80,0x00,0x6d,0x88,0x00,0x00,0x4e,0x04,0x00,0x00,0x00,0x4e,0x63,0x6d,0x61,0x70, +/*000020*/ 0xf1,0x89,0xe8,0x81,0x00,0x00,0x45,0x54,0x00,0x00,0x02,0x28,0x63,0x76,0x74,0x20, +/*000030*/ 0x5a,0x9b,0xfa,0x82,0x00,0x00,0x03,0xe8,0x00,0x00,0x00,0x32,0x66,0x70,0x67,0x6d, +/*000040*/ 0x83,0x33,0xc2,0x4f,0x00,0x00,0x03,0xd4,0x00,0x00,0x00,0x14,0x67,0x6c,0x79,0x66, +/*000050*/ 0x05,0xa3,0xba,0x6b,0x00,0x00,0x04,0x64,0x00,0x00,0x3c,0xec,0x68,0x64,0x6d,0x78, +/*000060*/ 0x0d,0xad,0x0b,0x14,0x00,0x00,0x47,0x7c,0x00,0x00,0x06,0x88,0x68,0x65,0x61,0x64, +/*000070*/ 0xce,0xfe,0xc6,0xae,0x00,0x00,0x4e,0x54,0x00,0x00,0x00,0x36,0x68,0x68,0x65,0x61, +/*000080*/ 0x05,0x15,0x02,0xee,0x00,0x00,0x4e,0x8c,0x00,0x00,0x00,0x24,0x68,0x6d,0x74,0x78, +/*000090*/ 0xae,0x38,0x00,0xf4,0x00,0x00,0x42,0xe0,0x00,0x00,0x01,0x8c,0x6c,0x6f,0x63,0x61, +/*0000a0*/ 0x00,0x0b,0xe4,0xba,0x00,0x00,0x41,0x50,0x00,0x00,0x01,0x90,0x6d,0x61,0x78,0x70, +/*0000b0*/ 0x00,0xfe,0x01,0x4d,0x00,0x00,0x4e,0xb0,0x00,0x00,0x00,0x20,0x6e,0x61,0x6d,0x65, +/*0000c0*/ 0xd6,0xe2,0x1a,0x1f,0x00,0x00,0x00,0xec,0x00,0x00,0x02,0xe5,0x70,0x6f,0x73,0x74, +/*0000d0*/ 0x09,0x85,0x09,0xff,0x00,0x00,0x44,0x6c,0x00,0x00,0x00,0xe8,0x70,0x72,0x65,0x70, +/*0000e0*/ 0xc9,0x0f,0xd2,0x13,0x00,0x00,0x04,0x1c,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x15, +/*0000f0*/ 0x01,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x76,0x00,0x3b,0x00,0x00, +/*000100*/ 0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x0e,0x00,0xb8,0x00,0x00,0x00,0x00,0x00,0x00, +/*000110*/ 0x00,0x02,0x00,0x04,0x00,0xc8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x4e, +/*000120*/ 0x01,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x14,0x00,0xd6,0x00,0x00, +/*000130*/ 0x00,0x00,0x00,0x00,0x00,0x05,0x00,0x48,0x01,0x83,0x00,0x00,0x00,0x00,0x00,0x00, +/*000140*/ 0x00,0x06,0x00,0x10,0x01,0xd3,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b, +/*000150*/ 0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x07,0x00,0xb1,0x00,0x01, +/*000160*/ 0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x02,0x00,0xc6,0x00,0x01,0x00,0x00,0x00,0x00, +/*000170*/ 0x00,0x03,0x00,0x27,0x00,0xea,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x0a, +/*000180*/ 0x00,0xcc,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x05,0x00,0x24,0x01,0x5f,0x00,0x01, +/*000190*/ 0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x08,0x01,0xcb,0x00,0x03,0x00,0x01,0x04,0x09, +/*0001a0*/ 0x00,0x00,0x00,0x76,0x00,0x3b,0x00,0x03,0x00,0x01,0x04,0x09,0x00,0x01,0x00,0x0e, +/*0001b0*/ 0x00,0xb8,0x00,0x03,0x00,0x01,0x04,0x09,0x00,0x02,0x00,0x04,0x00,0xc8,0x00,0x03, +/*0001c0*/ 0x00,0x01,0x04,0x09,0x00,0x03,0x00,0x4e,0x01,0x11,0x00,0x03,0x00,0x01,0x04,0x09, +/*0001d0*/ 0x00,0x04,0x00,0x14,0x00,0xd6,0x00,0x03,0x00,0x01,0x04,0x09,0x00,0x05,0x00,0x48, +/*0001e0*/ 0x01,0x83,0x00,0x03,0x00,0x01,0x04,0x09,0x00,0x06,0x00,0x10,0x01,0xd3,0x43,0x6f, +/*0001f0*/ 0x70,0x79,0x72,0x69,0x67,0x68,0x74,0x20,0x28,0x43,0x29,0x20,0x32,0x30,0x30,0x31, +/*000200*/ 0x20,0x42,0x69,0x74,0x6d,0x61,0x70,0x4d,0x61,0x6e,0x69,0x61,0x20,0x2f,0x20,0x43, +/*000210*/ 0x4f,0x4f,0x5a,0x2e,0x20,0x41,0x6c,0x6c,0x20,0x72,0x69,0x67,0x68,0x74,0x73,0x20, +/*000220*/ 0x72,0x65,0x73,0x65,0x72,0x76,0x65,0x64,0x2e,0x00,0x43,0x00,0x6f,0x00,0x70,0x00, +/*000230*/ 0x79,0x00,0x72,0x00,0x69,0x00,0x67,0x00,0x68,0x00,0x74,0x00,0x20,0x00,0x28,0x00, +/*000240*/ 0x43,0x00,0x29,0x00,0x20,0x00,0x32,0x00,0x30,0x00,0x30,0x00,0x31,0x00,0x20,0x00, +/*000250*/ 0x42,0x00,0x69,0x00,0x74,0x00,0x6d,0x00,0x61,0x00,0x70,0x00,0x4d,0x00,0x61,0x00, +/*000260*/ 0x6e,0x00,0x69,0x00,0x61,0x00,0x20,0x00,0x2f,0x00,0x20,0x00,0x43,0x00,0x4f,0x00, +/*000270*/ 0x4f,0x00,0x5a,0x00,0x2e,0x00,0x20,0x00,0x41,0x00,0x6c,0x00,0x6c,0x00,0x20,0x00, +/*000280*/ 0x72,0x00,0x69,0x00,0x67,0x00,0x68,0x00,0x74,0x00,0x73,0x00,0x20,0x00,0x72,0x00, +/*000290*/ 0x65,0x00,0x73,0x00,0x65,0x00,0x72,0x00,0x76,0x00,0x65,0x00,0x64,0x00,0x2e,0x42, +/*0002a0*/ 0x4d,0x20,0x6d,0x69,0x6e,0x69,0x00,0x42,0x00,0x4d,0x00,0x20,0x00,0x6d,0x00,0x69, +/*0002b0*/ 0x00,0x6e,0x00,0x69,0x41,0x38,0x00,0x41,0x00,0x38,0x42,0x4d,0x20,0x6d,0x69,0x6e, +/*0002c0*/ 0x69,0x20,0x41,0x38,0x00,0x42,0x00,0x4d,0x00,0x20,0x00,0x6d,0x00,0x69,0x00,0x6e, +/*0002d0*/ 0x00,0x69,0x00,0x20,0x00,0x41,0x00,0x38,0x4d,0x61,0x63,0x72,0x6f,0x6d,0x65,0x64, +/*0002e0*/ 0x69,0x61,0x20,0x46,0x6f,0x6e,0x74,0x6f,0x67,0x72,0x61,0x70,0x68,0x65,0x72,0x20, +/*0002f0*/ 0x34,0x2e,0x31,0x4a,0x20,0x42,0x4d,0x20,0x6d,0x69,0x6e,0x69,0x20,0x41,0x38,0x00, +/*000300*/ 0x4d,0x00,0x61,0x00,0x63,0x00,0x72,0x00,0x6f,0x00,0x6d,0x00,0x65,0x00,0x64,0x00, +/*000310*/ 0x69,0x00,0x61,0x00,0x20,0x00,0x46,0x00,0x6f,0x00,0x6e,0x00,0x74,0x00,0x6f,0x00, +/*000320*/ 0x67,0x00,0x72,0x00,0x61,0x00,0x70,0x00,0x68,0x00,0x65,0x00,0x72,0x00,0x20,0x00, +/*000330*/ 0x34,0x00,0x2e,0x00,0x31,0x00,0x4a,0x00,0x20,0x00,0x42,0x00,0x4d,0x00,0x20,0x00, +/*000340*/ 0x6d,0x00,0x69,0x00,0x6e,0x00,0x69,0x00,0x20,0x00,0x41,0x00,0x38,0x4d,0x61,0x63, +/*000350*/ 0x72,0x6f,0x6d,0x65,0x64,0x69,0x61,0x20,0x46,0x6f,0x6e,0x74,0x6f,0x67,0x72,0x61, +/*000360*/ 0x70,0x68,0x65,0x72,0x20,0x34,0x2e,0x31,0x4a,0x20,0x30,0x31,0x2e,0x31,0x2e,0x32, +/*000370*/ 0x37,0x00,0x4d,0x00,0x61,0x00,0x63,0x00,0x72,0x00,0x6f,0x00,0x6d,0x00,0x65,0x00, +/*000380*/ 0x64,0x00,0x69,0x00,0x61,0x00,0x20,0x00,0x46,0x00,0x6f,0x00,0x6e,0x00,0x74,0x00, +/*000390*/ 0x6f,0x00,0x67,0x00,0x72,0x00,0x61,0x00,0x70,0x00,0x68,0x00,0x65,0x00,0x72,0x00, +/*0003a0*/ 0x20,0x00,0x34,0x00,0x2e,0x00,0x31,0x00,0x4a,0x00,0x20,0x00,0x30,0x00,0x31,0x00, +/*0003b0*/ 0x2e,0x00,0x31,0x00,0x2e,0x00,0x32,0x00,0x37,0x42,0x4d,0x6d,0x69,0x6e,0x69,0x41, +/*0003c0*/ 0x38,0x00,0x42,0x00,0x4d,0x00,0x6d,0x00,0x69,0x00,0x6e,0x00,0x69,0x00,0x41,0x00, +/*0003d0*/ 0x38,0x00,0x00,0x00,0x40,0x01,0x00,0x2c,0x76,0x45,0x20,0xb0,0x03,0x25,0x45,0x23, +/*0003e0*/ 0x61,0x68,0x18,0x23,0x68,0x60,0x44,0x2d,0xff,0x39,0x00,0x01,0x01,0x8f,0x02,0x57, +/*0003f0*/ 0x00,0x62,0x00,0xc5,0x00,0x62,0x00,0xc5,0x01,0x29,0x01,0x8d,0x01,0x8e,0x01,0x2a, +/*000400*/ 0x5a,0x67,0x12,0x06,0xd2,0xb8,0x6a,0x18,0xf8,0x2a,0x61,0xa3,0x0e,0x40,0xee,0xd2, +/*000410*/ 0x80,0x3a,0x27,0x55,0xa2,0x87,0x00,0x01,0x00,0x0d,0x00,0x00,0x40,0x11,0x0b,0x0b, +/*000420*/ 0x0a,0x0a,0x09,0x09,0x08,0x08,0x03,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x01,0x8d, +/*000430*/ 0xb8,0x01,0xff,0x85,0x45,0x68,0x44,0x45,0x68,0x44,0x45,0x68,0x44,0x45,0x68,0x44, +/*000440*/ 0x45,0x68,0x44,0x45,0x68,0x44,0x45,0x68,0x44,0x45,0x68,0x44,0xb3,0x05,0x04,0x46, +/*000450*/ 0x00,0x2b,0xb3,0x07,0x06,0x46,0x00,0x2b,0xb1,0x04,0x04,0x45,0x68,0x44,0xb1,0x06, +/*000460*/ 0x06,0x45,0x68,0x44,0x00,0x02,0x00,0x32,0x00,0x00,0x01,0x5e,0x02,0x58,0x00,0x03, +/*000470*/ 0x00,0x07,0x00,0x55,0x40,0x1f,0x01,0x08,0x08,0x40,0x09,0x02,0x07,0x04,0x04,0x01, +/*000480*/ 0x00,0x06,0x05,0x04,0x03,0x02,0x05,0x04,0x06,0x00,0x07,0x06,0x06,0x01,0x02,0x01, +/*000490*/ 0x03,0x00,0x01,0x00,0x46,0x76,0x2f,0x37,0x18,0x00,0x2f,0x3c,0x2f,0x3c,0x10,0xfd, +/*0004a0*/ 0x3c,0x10,0xfd,0x3c,0x01,0x2f,0x3c,0xfd,0x3c,0x2f,0x3c,0xfd,0x3c,0x00,0x31,0x30, +/*0004b0*/ 0x01,0x49,0x68,0xb9,0x00,0x00,0x00,0x08,0x49,0x68,0x61,0xb0,0x40,0x52,0x58,0x38, +/*0004c0*/ 0x11,0x37,0xb9,0x00,0x08,0xff,0xc0,0x38,0x59,0x33,0x11,0x21,0x11,0x27,0x33,0x11, +/*0004d0*/ 0x23,0x32,0x01,0x2c,0xfa,0xc8,0xc8,0x02,0x58,0xfd,0xa8,0x32,0x01,0xf4,0x00,0x02, +/*0004e0*/ 0x00,0x01,0x00,0x01,0x00,0x63,0x02,0x57,0x00,0x03,0x00,0x07,0x00,0x53,0x40,0x20, +/*0004f0*/ 0x01,0x08,0x08,0x40,0x09,0x00,0x01,0x00,0x06,0x05,0x02,0x03,0x01,0x04,0x07,0x04, +/*000500*/ 0x03,0x03,0x00,0x07,0x06,0x06,0x04,0x05,0x04,0x01,0x03,0x02,0x03,0x01,0x01,0x46, +/*000510*/ 0x76,0x2f,0x37,0x18,0x00,0x3f,0x3c,0x3f,0x3c,0x10,0xfd,0x3c,0x01,0x2f,0x17,0x3c, +/*000520*/ 0xfd,0x17,0x3c,0x00,0x2e,0x2e,0x31,0x30,0x01,0x49,0x68,0xb9,0x00,0x01,0x00,0x08, +/*000530*/ 0x49,0x68,0x61,0xb0,0x40,0x52,0x58,0x38,0x11,0x37,0xb9,0x00,0x08,0xff,0xc0,0x38, +/*000540*/ 0x59,0x37,0x23,0x11,0x33,0x11,0x23,0x35,0x33,0x63,0x62,0x62,0x62,0x62,0xc9,0x01, +/*000550*/ 0x8e,0xfd,0xaa,0x62,0x00,0x02,0x00,0x01,0x01,0x91,0x01,0x2b,0x02,0x57,0x00,0x03, +/*000560*/ 0x00,0x07,0x00,0x50,0x40,0x1e,0x01,0x08,0x08,0x40,0x09,0x00,0x02,0x01,0x04,0x03, +/*000570*/ 0x00,0x07,0x04,0x04,0x06,0x05,0x05,0x04,0x01,0x03,0x00,0x07,0x06,0x03,0x03,0x02, +/*000580*/ 0x03,0x01,0x05,0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x17,0x3c,0x2f,0x17,0x3c,0x01, +/*000590*/ 0x2f,0x3c,0xfd,0x3c,0x2f,0x3c,0xfd,0x3c,0x00,0x31,0x30,0x01,0x49,0x68,0xb9,0x00, +/*0005a0*/ 0x05,0x00,0x08,0x49,0x68,0x61,0xb0,0x40,0x52,0x58,0x38,0x11,0x37,0xb9,0x00,0x08, +/*0005b0*/ 0xff,0xc0,0x38,0x59,0x01,0x23,0x35,0x33,0x07,0x23,0x35,0x33,0x01,0x2b,0x62,0x62, +/*0005c0*/ 0xc8,0x62,0x62,0x01,0x91,0xc6,0xc6,0xc6,0x00,0x02,0x00,0x01,0x00,0x65,0x01,0xf3, +/*0005d0*/ 0x02,0x57,0x00,0x1b,0x00,0x1f,0x00,0xb3,0x40,0x5e,0x01,0x20,0x20,0x40,0x21,0x00, +/*0005e0*/ 0x1b,0x18,0x17,0x14,0x13,0x0e,0x0d,0x0a,0x09,0x00,0x06,0x05,0x04,0x07,0x1f,0x12, +/*0005f0*/ 0x11,0x03,0x1e,0x04,0x10,0x0f,0x0c,0x0b,0x08,0x05,0x07,0x1d,0x04,0x03,0x03,0x1c, +/*000600*/ 0x04,0x1a,0x19,0x16,0x02,0x01,0x05,0x15,0x1b,0x1a,0x06,0x00,0x1f,0x0b,0x0a,0x03, +/*000610*/ 0x1c,0x06,0x09,0x08,0x05,0x04,0x01,0x05,0x00,0x0d,0x0c,0x06,0x0e,0x1e,0x19,0x18, +/*000620*/ 0x03,0x1d,0x06,0x17,0x16,0x13,0x12,0x0f,0x05,0x0e,0x07,0x06,0x03,0x03,0x02,0x15, +/*000630*/ 0x14,0x11,0x03,0x10,0x03,0x01,0x09,0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x17,0x3c, +/*000640*/ 0x2f,0x17,0x3c,0x2f,0x17,0x3c,0xfd,0x17,0x3c,0x10,0xfd,0x3c,0x2f,0x17,0x3c,0xfd, +/*000650*/ 0x17,0x3c,0x10,0xfd,0x3c,0x01,0x2f,0x17,0x3c,0xfd,0x17,0x3c,0x2f,0x17,0x3c,0xfd, +/*000660*/ 0x17,0x3c,0x10,0xfd,0x3c,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x00, +/*000670*/ 0x31,0x30,0x01,0x49,0x68,0xb9,0x00,0x09,0x00,0x20,0x49,0x68,0x61,0xb0,0x40,0x52, +/*000680*/ 0x58,0x38,0x11,0x37,0xb9,0x00,0x20,0xff,0xc0,0x38,0x59,0x25,0x23,0x15,0x23,0x35, +/*000690*/ 0x23,0x15,0x23,0x35,0x23,0x35,0x33,0x35,0x23,0x35,0x33,0x35,0x33,0x15,0x33,0x35, +/*0006a0*/ 0x33,0x15,0x33,0x15,0x23,0x15,0x33,0x27,0x35,0x23,0x15,0x01,0xf3,0x65,0x61,0x67, +/*0006b0*/ 0x61,0x64,0x64,0x64,0x64,0x62,0x67,0x61,0x64,0x64,0x64,0xc8,0x62,0xc9,0x64,0x64, +/*0006c0*/ 0x64,0x65,0x61,0x67,0x61,0x64,0x64,0x64,0x65,0x61,0x67,0x03,0x62,0x62,0x00,0x01, +/*0006d0*/ 0x00,0x01,0x00,0x01,0x01,0xf3,0x01,0xf3,0x00,0x13,0x00,0x88,0x40,0x42,0x01,0x14, +/*0006e0*/ 0x14,0x40,0x15,0x00,0x13,0x0a,0x09,0x00,0x04,0x03,0x04,0x05,0x0e,0x06,0x05,0x03, +/*0006f0*/ 0x0d,0x04,0x0c,0x0b,0x08,0x03,0x07,0x10,0x0f,0x04,0x12,0x02,0x01,0x03,0x11,0x07, +/*000700*/ 0x06,0x03,0x03,0x02,0x0b,0x00,0x09,0x08,0x01,0x03,0x00,0x07,0x12,0x11,0x10,0x0d, +/*000710*/ 0x03,0x0c,0x13,0x12,0x0f,0x0e,0x0b,0x05,0x0a,0x02,0x05,0x04,0x01,0x01,0x09,0x46, +/*000720*/ 0x76,0x2f,0x37,0x18,0x00,0x3f,0x3c,0x3f,0x17,0x3c,0x2f,0x17,0x3c,0x10,0xfd,0x17, +/*000730*/ 0x3c,0x10,0xfd,0x17,0x3c,0x01,0x2f,0x17,0x3c,0xfd,0x3c,0x2f,0x17,0x3c,0xfd,0x17, +/*000740*/ 0x3c,0x10,0xfd,0x3c,0x2e,0x2e,0x2e,0x2e,0x00,0x31,0x30,0x01,0x49,0x68,0xb9,0x00, +/*000750*/ 0x09,0x00,0x14,0x49,0x68,0x61,0xb0,0x40,0x52,0x58,0x38,0x11,0x37,0xb9,0x00,0x14, +/*000760*/ 0xff,0xc0,0x38,0x59,0x25,0x23,0x15,0x23,0x15,0x23,0x35,0x23,0x35,0x23,0x35,0x33, +/*000770*/ 0x35,0x33,0x15,0x33,0x35,0x33,0x15,0x33,0x01,0xf3,0x65,0x64,0x61,0x64,0x64,0x64, +/*000780*/ 0x62,0x67,0x61,0x64,0xc9,0x64,0x64,0x65,0x64,0xc5,0x64,0x64,0x64,0x65,0x00,0x03, +/*000790*/ 0x00,0x01,0x00,0x01,0x02,0xbb,0x02,0x57,0x00,0x23,0x00,0x27,0x00,0x2b,0x00,0xde, +/*0007a0*/ 0x40,0x80,0x01,0x2c,0x2c,0x40,0x2d,0x00,0x20,0x1f,0x08,0x07,0x04,0x0a,0x09,0x1e, +/*0007b0*/ 0x1d,0x04,0x18,0x17,0x0c,0x03,0x0b,0x29,0x28,0x16,0x15,0x0e,0x05,0x0d,0x04,0x0f, +/*0007c0*/ 0x2b,0x2a,0x14,0x13,0x10,0x05,0x0f,0x04,0x12,0x11,0x1a,0x06,0x05,0x03,0x19,0x04, +/*0007d0*/ 0x27,0x26,0x1c,0x04,0x03,0x05,0x1b,0x25,0x24,0x22,0x02,0x01,0x05,0x21,0x04,0x23, +/*0007e0*/ 0x00,0x27,0x24,0x05,0x04,0x01,0x05,0x00,0x06,0x02,0x1d,0x1c,0x11,0x10,0x0d,0x05, +/*0007f0*/ 0x0c,0x06,0x0e,0x21,0x0f,0x0e,0x03,0x20,0x06,0x26,0x25,0x23,0x22,0x1f,0x1e,0x0b, +/*000800*/ 0x07,0x06,0x09,0x0a,0x2a,0x29,0x17,0x16,0x13,0x05,0x12,0x06,0x14,0x2b,0x28,0x19, +/*000810*/ 0x03,0x18,0x02,0x1b,0x1a,0x15,0x03,0x14,0x03,0x09,0x08,0x03,0x03,0x02,0x01,0x01, +/*000820*/ 0x11,0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x17,0x3c,0x3f,0x17,0x3c,0x3f,0x17,0x3c, +/*000830*/ 0x10,0xfd,0x17,0x3c,0x2f,0x17,0x3c,0xfd,0x17,0x3c,0x10,0xfd,0x17,0x3c,0x10,0xfd, +/*000840*/ 0x17,0x3c,0x01,0x2f,0x3c,0xfd,0x17,0x3c,0x2f,0x17,0x3c,0xfd,0x17,0x3c,0x2f,0x3c, +/*000850*/ 0xfd,0x17,0x3c,0x10,0xfd,0x17,0x3c,0x2f,0x17,0x3c,0xfd,0x3c,0x2f,0x3c,0xfd,0x3c, +/*000860*/ 0x2e,0x2e,0x00,0x31,0x30,0x01,0x49,0x68,0xb9,0x00,0x11,0x00,0x2c,0x49,0x68,0x61, +/*000870*/ 0xb0,0x40,0x52,0x58,0x38,0x11,0x37,0xb9,0x00,0x2c,0xff,0xc0,0x38,0x59,0x25,0x23, +/*000880*/ 0x15,0x23,0x35,0x23,0x35,0x23,0x15,0x23,0x35,0x33,0x35,0x23,0x15,0x23,0x35,0x23, +/*000890*/ 0x35,0x33,0x35,0x33,0x15,0x33,0x15,0x33,0x35,0x33,0x15,0x23,0x15,0x33,0x35,0x33, +/*0008a0*/ 0x15,0x33,0x07,0x35,0x23,0x15,0x01,0x35,0x23,0x15,0x02,0xbb,0x65,0x61,0x64,0x67, +/*0008b0*/ 0x61,0x64,0x67,0x61,0x64,0x64,0x62,0x64,0x67,0x61,0x64,0x67,0x61,0x64,0x64,0x62, +/*0008c0*/ 0xfe,0xd2,0x62,0x65,0x64,0x65,0x63,0xc8,0xc6,0xca,0x64,0x65,0x61,0x64,0x65,0x63, +/*0008d0*/ 0xc8,0xc6,0xca,0x64,0x65,0x61,0x62,0x62,0x01,0x2c,0x62,0x62,0x00,0x03,0x00,0x01, +/*0008e0*/ 0x00,0x01,0x01,0xf3,0x02,0x57,0x00,0x1b,0x00,0x1f,0x00,0x25,0x00,0xce,0x40,0x76, +/*0008f0*/ 0x01,0x26,0x26,0x40,0x27,0x00,0x1a,0x19,0x1b,0x04,0x03,0x03,0x00,0x04,0x05,0x10, +/*000900*/ 0x0f,0x0c,0x03,0x0b,0x04,0x09,0x25,0x24,0x1f,0x1e,0x12,0x11,0x0e,0x0d,0x0a,0x09, +/*000910*/ 0x09,0x04,0x13,0x23,0x22,0x1d,0x1c,0x18,0x17,0x14,0x07,0x13,0x04,0x15,0x21,0x20, +/*000920*/ 0x16,0x08,0x07,0x05,0x15,0x04,0x06,0x05,0x02,0x03,0x01,0x03,0x02,0x06,0x04,0x25, +/*000930*/ 0x20,0x0b,0x0a,0x07,0x05,0x06,0x06,0x04,0x1e,0x1d,0x15,0x14,0x11,0x05,0x10,0x06, +/*000940*/ 0x12,0x22,0x21,0x06,0x0c,0x24,0x23,0x19,0x18,0x0d,0x01,0x00,0x07,0x0c,0x06,0x17, +/*000950*/ 0x0f,0x0e,0x03,0x16,0x1f,0x1c,0x1b,0x03,0x1a,0x02,0x13,0x12,0x03,0x09,0x08,0x05, +/*000960*/ 0x03,0x04,0x01,0x01,0x0b,0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x17,0x3c,0x3f,0x3c, +/*000970*/ 0x3f,0x17,0x3c,0x2f,0x17,0x3c,0xfd,0x17,0x3c,0x10,0xfd,0x3c,0x10,0xfd,0x17,0x3c, +/*000980*/ 0x10,0xfd,0x17,0x3c,0x10,0xfd,0x3c,0x01,0x2f,0x17,0x3c,0xfd,0x17,0x3c,0x10,0xfd, +/*000990*/ 0x17,0x3c,0x10,0xfd,0x17,0x3c,0x10,0xfd,0x17,0x3c,0x10,0xfd,0x17,0x3c,0x2e,0x2e, +/*0009a0*/ 0x00,0x31,0x30,0x01,0x49,0x68,0xb9,0x00,0x0b,0x00,0x26,0x49,0x68,0x61,0xb0,0x40, +/*0009b0*/ 0x52,0x58,0x38,0x11,0x37,0xb9,0x00,0x26,0xff,0xc0,0x38,0x59,0x01,0x23,0x15,0x33, +/*0009c0*/ 0x15,0x23,0x35,0x23,0x15,0x23,0x35,0x23,0x35,0x33,0x35,0x23,0x35,0x33,0x35,0x33, +/*0009d0*/ 0x15,0x33,0x15,0x23,0x15,0x33,0x35,0x33,0x25,0x35,0x23,0x15,0x13,0x35,0x23,0x35, +/*0009e0*/ 0x23,0x15,0x01,0xf3,0x64,0x64,0x62,0x67,0xc5,0x64,0x64,0x64,0x64,0x62,0x64,0x64, +/*0009f0*/ 0xcb,0x61,0xfe,0xd4,0x62,0xc6,0x64,0x62,0x01,0x2d,0xcb,0x61,0x64,0x64,0x65,0xc5, +/*000a00*/ 0x67,0x61,0x64,0x65,0x61,0x66,0x64,0x02,0x62,0x62,0xfe,0xd4,0x61,0x65,0xc6,0x00, +/*000a10*/ 0x00,0x01,0x00,0x01,0x01,0x91,0x00,0x63,0x02,0x57,0x00,0x03,0x00,0x3f,0x40,0x13, +/*000a20*/ 0x01,0x04,0x04,0x40,0x05,0x00,0x02,0x01,0x04,0x03,0x00,0x01,0x00,0x03,0x02,0x03, +/*000a30*/ 0x01,0x01,0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x3c,0x2f,0x3c,0x01,0x2f,0x3c,0xfd, +/*000a40*/ 0x3c,0x00,0x31,0x30,0x01,0x49,0x68,0xb9,0x00,0x01,0x00,0x04,0x49,0x68,0x61,0xb0, +/*000a50*/ 0x40,0x52,0x58,0x38,0x11,0x37,0xb9,0x00,0x04,0xff,0xc0,0x38,0x59,0x13,0x23,0x35, +/*000a60*/ 0x33,0x63,0x62,0x62,0x01,0x91,0xc6,0x00,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0xc7, +/*000a70*/ 0x02,0x57,0x00,0x0b,0x00,0x67,0x40,0x2d,0x01,0x0c,0x0c,0x40,0x0d,0x00,0x07,0x06, +/*000a80*/ 0x0b,0x04,0x03,0x03,0x00,0x04,0x05,0x0a,0x09,0x06,0x05,0x02,0x05,0x01,0x04,0x08, +/*000a90*/ 0x07,0x09,0x08,0x01,0x03,0x00,0x06,0x0a,0x03,0x02,0x06,0x04,0x0b,0x0a,0x03,0x05, +/*000aa0*/ 0x04,0x01,0x01,0x07,0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x3c,0x3f,0x3c,0x10,0xfd, +/*000ab0*/ 0x3c,0x10,0xfd,0x17,0x3c,0x01,0x2f,0x3c,0xfd,0x17,0x3c,0x10,0xfd,0x17,0x3c,0x00, +/*000ac0*/ 0x2e,0x2e,0x31,0x30,0x01,0x49,0x68,0xb9,0x00,0x07,0x00,0x0c,0x49,0x68,0x61,0xb0, +/*000ad0*/ 0x40,0x52,0x58,0x38,0x11,0x37,0xb9,0x00,0x0c,0xff,0xc0,0x38,0x59,0x13,0x23,0x11, +/*000ae0*/ 0x33,0x15,0x23,0x35,0x23,0x11,0x33,0x35,0x33,0xc7,0x64,0x64,0x62,0x64,0x64,0x62, +/*000af0*/ 0x01,0xf5,0xfe,0x6d,0x61,0x65,0x01,0x8d,0x64,0x00,0x00,0x01,0x00,0x01,0x00,0x01, +/*000b00*/ 0x00,0xc7,0x02,0x57,0x00,0x0b,0x00,0x67,0x40,0x2c,0x01,0x0c,0x0c,0x40,0x0d,0x00, +/*000b10*/ 0x0b,0x0a,0x02,0x01,0x04,0x08,0x07,0x04,0x03,0x03,0x0a,0x09,0x06,0x03,0x05,0x04, +/*000b20*/ 0x0b,0x00,0x05,0x01,0x00,0x03,0x04,0x06,0x02,0x07,0x06,0x06,0x08,0x09,0x08,0x03, +/*000b30*/ 0x03,0x02,0x01,0x01,0x03,0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x3c,0x3f,0x3c,0x10, +/*000b40*/ 0xfd,0x3c,0x10,0xfd,0x17,0x3c,0x01,0x2f,0x3c,0xfd,0x17,0x3c,0x2f,0x17,0x3c,0xfd, +/*000b50*/ 0x3c,0x00,0x2e,0x2e,0x31,0x30,0x01,0x49,0x68,0xb9,0x00,0x03,0x00,0x0c,0x49,0x68, +/*000b60*/ 0x61,0xb0,0x40,0x52,0x58,0x38,0x11,0x37,0xb9,0x00,0x0c,0xff,0xc0,0x38,0x59,0x37, +/*000b70*/ 0x23,0x15,0x23,0x35,0x33,0x11,0x23,0x35,0x33,0x15,0x33,0xc7,0x65,0x61,0x64,0x64, +/*000b80*/ 0x62,0x64,0x65,0x64,0x62,0x01,0x92,0x62,0x65,0x00,0x00,0x01,0x00,0x01,0x01,0x2d, +/*000b90*/ 0x01,0x2b,0x02,0x57,0x00,0x13,0x00,0x83,0x40,0x40,0x01,0x14,0x14,0x40,0x15,0x00, +/*000ba0*/ 0x12,0x11,0x13,0x04,0x03,0x03,0x00,0x04,0x05,0x08,0x07,0x04,0x0e,0x0d,0x0a,0x03, +/*000bb0*/ 0x09,0x10,0x0f,0x0c,0x03,0x0b,0x04,0x06,0x05,0x02,0x03,0x01,0x07,0x06,0x06,0x11, +/*000bc0*/ 0x0d,0x0c,0x01,0x00,0x05,0x10,0x09,0x08,0x05,0x03,0x04,0x13,0x12,0x0f,0x03,0x0e, +/*000bd0*/ 0x03,0x0b,0x03,0x02,0x03,0x0a,0x02,0x01,0x09,0x46,0x76,0x2f,0x37,0x18,0x00,0x3f, +/*000be0*/ 0x17,0x3c,0x3f,0x17,0x3c,0x2f,0x17,0x3c,0x2f,0x17,0x3c,0xfd,0x3c,0x01,0x2f,0x17, +/*000bf0*/ 0x3c,0xfd,0x17,0x3c,0x2f,0x17,0x3c,0xfd,0x3c,0x10,0xfd,0x17,0x3c,0x2e,0x2e,0x00, +/*000c00*/ 0x31,0x30,0x01,0x49,0x68,0xb9,0x00,0x09,0x00,0x14,0x49,0x68,0x61,0xb0,0x40,0x52, +/*000c10*/ 0x58,0x38,0x11,0x37,0xb9,0x00,0x14,0xff,0xc0,0x38,0x59,0x01,0x23,0x15,0x33,0x15, +/*000c20*/ 0x23,0x35,0x23,0x15,0x23,0x35,0x33,0x35,0x23,0x35,0x33,0x15,0x33,0x35,0x33,0x01, +/*000c30*/ 0x2b,0x64,0x64,0x62,0x67,0x61,0x64,0x64,0x62,0x67,0x61,0x01,0xf5,0x67,0x61,0x64, +/*000c40*/ 0x64,0x62,0x66,0x62,0x64,0x64,0x00,0x01,0x00,0x01,0x00,0x65,0x01,0x2b,0x01,0x8f, +/*000c50*/ 0x00,0x0b,0x00,0x66,0x40,0x2c,0x01,0x0c,0x0c,0x40,0x0d,0x00,0x0b,0x00,0x08,0x01, +/*000c60*/ 0x06,0x05,0x08,0x03,0x0a,0x09,0x02,0x03,0x01,0x04,0x08,0x07,0x04,0x03,0x03,0x0b, +/*000c70*/ 0x07,0x06,0x03,0x0a,0x06,0x05,0x04,0x01,0x03,0x00,0x03,0x02,0x09,0x08,0x02,0x01, +/*000c80*/ 0x05,0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x3c,0x2f,0x3c,0x2f,0x17,0x3c,0xfd,0x17, +/*000c90*/ 0x3c,0x01,0x2f,0x17,0x3c,0xfd,0x17,0x3c,0x10,0xfd,0x3c,0x10,0xfd,0x3c,0x00,0x31, +/*000ca0*/ 0x30,0x01,0x49,0x68,0xb9,0x00,0x05,0x00,0x0c,0x49,0x68,0x61,0xb0,0x40,0x52,0x58, +/*000cb0*/ 0x38,0x11,0x37,0xb9,0x00,0x0c,0xff,0xc0,0x38,0x59,0x25,0x23,0x15,0x23,0x35,0x23, +/*000cc0*/ 0x35,0x33,0x35,0x33,0x15,0x33,0x01,0x2b,0x65,0x61,0x64,0x64,0x62,0x64,0xc9,0x64, +/*000cd0*/ 0x65,0x61,0x64,0x65,0x00,0x01,0x00,0x01,0xff,0x9d,0x00,0xc7,0x00,0x63,0x00,0x07, +/*000ce0*/ 0x00,0x53,0x40,0x1e,0x01,0x08,0x08,0x40,0x09,0x00,0x02,0x01,0x04,0x04,0x03,0x06, +/*000cf0*/ 0x05,0x04,0x07,0x00,0x05,0x04,0x06,0x02,0x07,0x06,0x03,0x02,0x01,0x00,0x01,0x01, +/*000d00*/ 0x03,0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x3c,0x2f,0x3c,0x2f,0x3c,0x10,0xfd,0x3c, +/*000d10*/ 0x01,0x2f,0x3c,0xfd,0x3c,0x2f,0x3c,0xfd,0x3c,0x00,0x31,0x30,0x01,0x49,0x68,0xb9, +/*000d20*/ 0x00,0x03,0x00,0x08,0x49,0x68,0x61,0xb0,0x40,0x52,0x58,0x38,0x11,0x37,0xb9,0x00, +/*000d30*/ 0x08,0xff,0xc0,0x38,0x59,0x37,0x23,0x15,0x23,0x35,0x33,0x35,0x33,0xc7,0x65,0x61, +/*000d40*/ 0x64,0x62,0x01,0x64,0x62,0x64,0x00,0x01,0x00,0x01,0x00,0xc9,0x01,0x2b,0x01,0x2b, +/*000d50*/ 0x00,0x03,0x00,0x3d,0x40,0x11,0x01,0x04,0x04,0x40,0x05,0x00,0x03,0x02,0x01,0x00, +/*000d60*/ 0x03,0x02,0x01,0x00,0x01,0x01,0x46,0x76,0x2f,0x37,0x18,0x00,0x2f,0x3c,0x2f,0x3c, +/*000d70*/ 0x01,0x2e,0x2e,0x2e,0x2e,0x00,0x31,0x30,0x01,0x49,0x68,0xb9,0x00,0x01,0x00,0x04, +/*000d80*/ 0x49,0x68,0x61,0xb0,0x40,0x52,0x58,0x38,0x11,0x37,0xb9,0x00,0x04,0xff,0xc0,0x38, +/*000d90*/ 0x59,0x25,0x21,0x35,0x21,0x01,0x2b,0xfe,0xd6,0x01,0x2a,0xc9,0x62,0x00,0x00,0x01, +/*000da0*/ 0x00,0x01,0x00,0x01,0x00,0x63,0x00,0x63,0x00,0x03,0x00,0x3f,0x40,0x13,0x01,0x04, +/*000db0*/ 0x04,0x40,0x05,0x00,0x03,0x00,0x04,0x02,0x01,0x03,0x02,0x01,0x00,0x01,0x01,0x01, +/*000dc0*/ 0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x3c,0x2f,0x3c,0x01,0x2f,0x3c,0xfd,0x3c,0x00, +/*000dd0*/ 0x31,0x30,0x01,0x49,0x68,0xb9,0x00,0x01,0x00,0x04,0x49,0x68,0x61,0xb0,0x40,0x52, +/*000de0*/ 0x58,0x38,0x11,0x37,0xb9,0x00,0x04,0xff,0xc0,0x38,0x59,0x37,0x23,0x35,0x33,0x63, +/*000df0*/ 0x62,0x62,0x01,0x62,0x00,0x01,0x00,0x01,0x00,0x01,0x01,0x2b,0x02,0x57,0x00,0x0b, +/*000e00*/ 0x00,0x69,0x40,0x2c,0x01,0x0c,0x0c,0x40,0x0d,0x00,0x04,0x03,0x04,0x06,0x05,0x08, +/*000e10*/ 0x07,0x04,0x02,0x01,0x0a,0x09,0x04,0x0b,0x00,0x01,0x00,0x07,0x0a,0x07,0x03,0x02, +/*000e20*/ 0x03,0x06,0x07,0x04,0x0b,0x0a,0x03,0x09,0x08,0x02,0x05,0x04,0x01,0x01,0x05,0x46, +/*000e30*/ 0x76,0x2f,0x37,0x18,0x00,0x3f,0x3c,0x3f,0x3c,0x3f,0x3c,0x10,0xfd,0x17,0x3c,0x10, +/*000e40*/ 0xfd,0x3c,0x01,0x2f,0x3c,0xfd,0x3c,0x2f,0x3c,0xfd,0x3c,0x2f,0x3c,0xfd,0x3c,0x00, +/*000e50*/ 0x31,0x30,0x01,0x49,0x68,0xb9,0x00,0x05,0x00,0x0c,0x49,0x68,0x61,0xb0,0x40,0x52, +/*000e60*/ 0x58,0x38,0x11,0x37,0xb9,0x00,0x0c,0xff,0xc0,0x38,0x59,0x01,0x23,0x15,0x23,0x15, +/*000e70*/ 0x23,0x35,0x33,0x35,0x33,0x35,0x33,0x01,0x2b,0x65,0x64,0x61,0x65,0x63,0x62,0x01, +/*000e80*/ 0x91,0xc8,0xc8,0xc6,0xc8,0xc8,0x00,0x03,0x00,0x01,0x00,0x01,0x01,0x8f,0x02,0x57, +/*000e90*/ 0x00,0x0b,0x00,0x11,0x00,0x17,0x00,0x95,0x40,0x4d,0x01,0x18,0x18,0x40,0x19,0x00, +/*000ea0*/ 0x15,0x14,0x05,0x05,0x11,0x10,0x05,0x00,0x17,0x16,0x0f,0x0e,0x08,0x07,0x04,0x07, +/*000eb0*/ 0x03,0x04,0x06,0x05,0x13,0x12,0x0d,0x0c,0x0a,0x02,0x01,0x07,0x09,0x04,0x0b,0x00, +/*000ec0*/ 0x17,0x12,0x05,0x04,0x01,0x05,0x00,0x06,0x02,0x0e,0x0d,0x0b,0x0a,0x07,0x05,0x06, +/*000ed0*/ 0x06,0x08,0x11,0x0c,0x06,0x13,0x14,0x13,0x10,0x03,0x0f,0x06,0x16,0x15,0x09,0x08, +/*000ee0*/ 0x03,0x03,0x02,0x01,0x01,0x05,0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x3c,0x3f,0x3c, +/*000ef0*/ 0x2f,0x3c,0xfd,0x17,0x3c,0x10,0xfd,0x3c,0x10,0xfd,0x17,0x3c,0x10,0xfd,0x17,0x3c, +/*000f00*/ 0x01,0x2f,0x3c,0xfd,0x17,0x3c,0x2f,0x3c,0xfd,0x17,0x3c,0x10,0xfd,0x3c,0x10,0xfd, +/*000f10*/ 0x3c,0x00,0x31,0x30,0x01,0x49,0x68,0xb9,0x00,0x05,0x00,0x18,0x49,0x68,0x61,0xb0, +/*000f20*/ 0x40,0x52,0x58,0x38,0x11,0x37,0xb9,0x00,0x18,0xff,0xc0,0x38,0x59,0x25,0x23,0x15, +/*000f30*/ 0x23,0x35,0x23,0x11,0x33,0x35,0x33,0x15,0x33,0x07,0x35,0x23,0x15,0x33,0x35,0x13, +/*000f40*/ 0x35,0x23,0x15,0x23,0x15,0x01,0x8f,0x65,0xc5,0x64,0x64,0xc6,0x64,0x64,0xc6,0x61, +/*000f50*/ 0x65,0x62,0x64,0x65,0x64,0x65,0x01,0x8d,0x64,0x65,0x61,0x62,0xc6,0x64,0xfe,0xd4, +/*000f60*/ 0xc6,0x64,0x62,0x00,0x00,0x01,0x00,0x65,0x00,0x01,0x01,0x2b,0x02,0x57,0x00,0x07, +/*000f70*/ 0x00,0x54,0x40,0x20,0x01,0x08,0x08,0x40,0x09,0x00,0x04,0x03,0x05,0x00,0x06,0x05, +/*000f80*/ 0x02,0x03,0x01,0x04,0x07,0x00,0x03,0x02,0x06,0x05,0x04,0x07,0x06,0x03,0x01,0x00, +/*000f90*/ 0x01,0x01,0x03,0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x3c,0x3f,0x3c,0x2f,0x3c,0xfd, +/*000fa0*/ 0x3c,0x01,0x2f,0x3c,0xfd,0x17,0x3c,0x10,0xfd,0x3c,0x00,0x31,0x30,0x01,0x49,0x68, +/*000fb0*/ 0xb9,0x00,0x03,0x00,0x08,0x49,0x68,0x61,0xb0,0x40,0x52,0x58,0x38,0x11,0x37,0xb9, +/*000fc0*/ 0x00,0x08,0xff,0xc0,0x38,0x59,0x25,0x23,0x11,0x23,0x35,0x33,0x35,0x33,0x01,0x2b, +/*000fd0*/ 0x62,0x64,0x64,0x62,0x01,0x01,0x91,0x61,0x64,0x00,0x00,0x01,0x00,0x01,0x00,0x01, +/*000fe0*/ 0x01,0x8f,0x02,0x57,0x00,0x19,0x00,0xa4,0x40,0x53,0x01,0x1a,0x1a,0x40,0x1b,0x00, +/*000ff0*/ 0x12,0x11,0x06,0x03,0x05,0x04,0x14,0x13,0x0a,0x03,0x09,0x04,0x03,0x04,0x16,0x15, +/*001000*/ 0x0c,0x03,0x0b,0x0e,0x0d,0x04,0x02,0x01,0x18,0x17,0x10,0x03,0x0f,0x04,0x19,0x08, +/*001010*/ 0x07,0x03,0x00,0x13,0x12,0x01,0x03,0x00,0x06,0x19,0x18,0x0d,0x03,0x02,0x03,0x0c, +/*001020*/ 0x06,0x0b,0x0a,0x05,0x03,0x04,0x07,0x06,0x06,0x08,0x15,0x14,0x11,0x03,0x10,0x06, +/*001030*/ 0x16,0x17,0x16,0x03,0x0f,0x0e,0x02,0x09,0x08,0x01,0x01,0x09,0x46,0x76,0x2f,0x37, +/*001040*/ 0x18,0x00,0x3f,0x3c,0x3f,0x3c,0x3f,0x3c,0x10,0xfd,0x17,0x3c,0x10,0xfd,0x3c,0x2f, +/*001050*/ 0x17,0x3c,0xfd,0x17,0x3c,0x2f,0x3c,0xfd,0x17,0x3c,0x01,0x2f,0x17,0x3c,0xfd,0x17, +/*001060*/ 0x3c,0x2f,0x3c,0xfd,0x3c,0x2f,0x17,0x3c,0xfd,0x3c,0x2f,0x17,0x3c,0xfd,0x17,0x3c, +/*001070*/ 0x00,0x31,0x30,0x01,0x49,0x68,0xb9,0x00,0x09,0x00,0x1a,0x49,0x68,0x61,0xb0,0x40, +/*001080*/ 0x52,0x58,0x38,0x11,0x37,0xb9,0x00,0x1a,0xff,0xc0,0x38,0x59,0x01,0x23,0x15,0x23, +/*001090*/ 0x15,0x23,0x15,0x21,0x15,0x21,0x35,0x33,0x35,0x33,0x35,0x33,0x35,0x23,0x15,0x23, +/*0010a0*/ 0x35,0x33,0x35,0x33,0x15,0x33,0x01,0x8f,0x65,0x64,0x63,0x01,0x2c,0xfe,0x72,0x65, +/*0010b0*/ 0x64,0x63,0xcb,0x61,0x64,0xc6,0x64,0x01,0x91,0x64,0x64,0x67,0x61,0xc6,0x64,0x64, +/*0010c0*/ 0x66,0x64,0x62,0x64,0x65,0x00,0x00,0x01,0x00,0x01,0x00,0x01,0x01,0x8f,0x02,0x57, +/*0010d0*/ 0x00,0x1b,0x00,0xa4,0x40,0x57,0x01,0x1c,0x1c,0x40,0x1d,0x00,0x14,0x13,0x10,0x0f, +/*0010e0*/ 0x08,0x04,0x03,0x07,0x07,0x04,0x12,0x11,0x06,0x03,0x05,0x1b,0x18,0x17,0x03,0x00, +/*0010f0*/ 0x04,0x09,0x0c,0x0b,0x04,0x1a,0x19,0x16,0x0e,0x0d,0x0a,0x09,0x02,0x01,0x09,0x15, +/*001100*/ 0x1b,0x1a,0x07,0x00,0x09,0x08,0x06,0x02,0x07,0x06,0x06,0x05,0x01,0x00,0x03,0x04, +/*001110*/ 0x0b,0x0a,0x06,0x0c,0x19,0x18,0x11,0x03,0x10,0x06,0x17,0x16,0x13,0x0f,0x0e,0x05, +/*001120*/ 0x12,0x15,0x14,0x03,0x0d,0x0c,0x02,0x03,0x02,0x01,0x01,0x05,0x46,0x76,0x2f,0x37, +/*001130*/ 0x18,0x00,0x3f,0x3c,0x3f,0x3c,0x3f,0x3c,0x2f,0x17,0x3c,0xfd,0x17,0x3c,0x10,0xfd, +/*001140*/ 0x3c,0x2f,0x17,0x3c,0xfd,0x3c,0x10,0xfd,0x3c,0x10,0xfd,0x3c,0x01,0x2f,0x17,0x3c, +/*001150*/ 0xfd,0x3c,0x10,0xfd,0x17,0x3c,0x2f,0x17,0x3c,0xfd,0x17,0x3c,0x00,0x31,0x30,0x01, +/*001160*/ 0x49,0x68,0xb9,0x00,0x05,0x00,0x1c,0x49,0x68,0x61,0xb0,0x40,0x52,0x58,0x38,0x11, +/*001170*/ 0x37,0xb9,0x00,0x1c,0xff,0xc0,0x38,0x59,0x25,0x23,0x15,0x23,0x35,0x23,0x35,0x33, +/*001180*/ 0x15,0x33,0x35,0x23,0x35,0x33,0x35,0x23,0x15,0x23,0x35,0x33,0x35,0x33,0x15,0x33, +/*001190*/ 0x15,0x23,0x15,0x33,0x01,0x8f,0x65,0xc5,0x64,0x62,0xca,0x64,0x64,0xcb,0x61,0x64, +/*0011a0*/ 0xc6,0x64,0x64,0x64,0x65,0x64,0x65,0x61,0x64,0xcb,0x61,0x66,0x64,0x62,0x64,0x65, +/*0011b0*/ 0x61,0x67,0x00,0x01,0x00,0x01,0x00,0x01,0x01,0x8f,0x02,0x57,0x00,0x0d,0x00,0x6a, +/*0011c0*/ 0x40,0x2f,0x01,0x0e,0x0e,0x40,0x0f,0x00,0x0d,0x00,0x0a,0x09,0x04,0x03,0x03,0x04, +/*0011d0*/ 0x0c,0x0b,0x02,0x03,0x01,0x08,0x07,0x04,0x06,0x05,0x0d,0x09,0x08,0x03,0x0c,0x06, +/*0011e0*/ 0x05,0x04,0x01,0x03,0x00,0x0b,0x0a,0x07,0x03,0x06,0x03,0x03,0x02,0x01,0x01,0x05, +/*0011f0*/ 0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x3c,0x3f,0x17,0x3c,0x2f,0x17,0x3c,0xfd,0x17, +/*001200*/ 0x3c,0x01,0x2f,0x3c,0xfd,0x3c,0x2f,0x17,0x3c,0xfd,0x17,0x3c,0x2e,0x2e,0x00,0x31, +/*001210*/ 0x30,0x01,0x49,0x68,0xb9,0x00,0x05,0x00,0x0e,0x49,0x68,0x61,0xb0,0x40,0x52,0x58, +/*001220*/ 0x38,0x11,0x37,0xb9,0x00,0x0e,0xff,0xc0,0x38,0x59,0x25,0x23,0x15,0x23,0x35,0x23, +/*001230*/ 0x11,0x33,0x11,0x33,0x11,0x33,0x11,0x33,0x01,0x8f,0x65,0x61,0xc8,0x62,0x67,0x61, +/*001240*/ 0x64,0xc9,0xc8,0xc8,0x01,0x8e,0xfe,0xd4,0x01,0x2c,0xfe,0xd3,0x00,0x01,0x00,0x01, +/*001250*/ 0x00,0x01,0x01,0x8f,0x02,0x57,0x00,0x0f,0x00,0x7b,0x40,0x38,0x01,0x10,0x10,0x40, +/*001260*/ 0x11,0x00,0x02,0x01,0x0e,0x0d,0x06,0x03,0x05,0x04,0x0f,0x0a,0x09,0x03,0x00,0x0c, +/*001270*/ 0x0b,0x04,0x08,0x07,0x04,0x03,0x03,0x0f,0x0e,0x07,0x00,0x05,0x01,0x00,0x03,0x04, +/*001280*/ 0x06,0x02,0x07,0x06,0x06,0x0d,0x0c,0x0b,0x0a,0x06,0x08,0x09,0x08,0x03,0x03,0x02, +/*001290*/ 0x01,0x01,0x03,0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x3c,0x3f,0x3c,0x10,0xfd,0x3c, +/*0012a0*/ 0x2f,0x3c,0xfd,0x3c,0x10,0xfd,0x17,0x3c,0x10,0xfd,0x3c,0x01,0x2f,0x17,0x3c,0xfd, +/*0012b0*/ 0x3c,0x2f,0x17,0x3c,0xfd,0x17,0x3c,0x2e,0x2e,0x00,0x31,0x30,0x01,0x49,0x68,0xb9, +/*0012c0*/ 0x00,0x03,0x00,0x10,0x49,0x68,0x61,0xb0,0x40,0x52,0x58,0x38,0x11,0x37,0xb9,0x00, +/*0012d0*/ 0x10,0xff,0xc0,0x38,0x59,0x25,0x23,0x15,0x21,0x35,0x21,0x35,0x21,0x11,0x21,0x15, +/*0012e0*/ 0x21,0x15,0x33,0x15,0x33,0x01,0x8f,0x65,0xfe,0xd7,0x01,0x2c,0xfe,0xd4,0x01,0x8e, +/*0012f0*/ 0xfe,0xd4,0xc8,0x64,0x65,0x64,0x62,0xca,0x01,0x2a,0x62,0x67,0x64,0x00,0x00,0x03, +/*001300*/ 0x00,0x01,0x00,0x01,0x01,0x8f,0x02,0x57,0x00,0x0f,0x00,0x13,0x00,0x17,0x00,0x8a, +/*001310*/ 0x40,0x49,0x01,0x18,0x18,0x40,0x19,0x00,0x17,0x16,0x13,0x12,0x08,0x07,0x04,0x07, +/*001320*/ 0x03,0x04,0x06,0x05,0x15,0x14,0x11,0x10,0x0e,0x0d,0x0a,0x02,0x01,0x09,0x09,0x04, +/*001330*/ 0x0f,0x0c,0x0b,0x03,0x00,0x17,0x14,0x05,0x04,0x01,0x05,0x00,0x06,0x02,0x12,0x11, +/*001340*/ 0x0b,0x0a,0x07,0x05,0x06,0x06,0x08,0x16,0x0f,0x0e,0x03,0x15,0x06,0x13,0x10,0x0d, +/*001350*/ 0x03,0x0c,0x09,0x08,0x03,0x03,0x02,0x01,0x01,0x05,0x46,0x76,0x2f,0x37,0x18,0x00, +/*001360*/ 0x3f,0x3c,0x3f,0x3c,0x2f,0x17,0x3c,0xfd,0x17,0x3c,0x10,0xfd,0x17,0x3c,0x10,0xfd, +/*001370*/ 0x17,0x3c,0x01,0x2f,0x17,0x3c,0xfd,0x17,0x3c,0x2f,0x3c,0xfd,0x17,0x3c,0x00,0x31, +/*001380*/ 0x30,0x01,0x49,0x68,0xb9,0x00,0x05,0x00,0x18,0x49,0x68,0x61,0xb0,0x40,0x52,0x58, +/*001390*/ 0x38,0x11,0x37,0xb9,0x00,0x18,0xff,0xc0,0x38,0x59,0x25,0x23,0x15,0x23,0x35,0x23, +/*0013a0*/ 0x11,0x33,0x35,0x33,0x15,0x33,0x15,0x23,0x15,0x33,0x27,0x35,0x23,0x15,0x13,0x35, +/*0013b0*/ 0x23,0x15,0x01,0x8f,0x65,0xc5,0x64,0x64,0xc6,0x64,0x64,0x64,0x64,0xc6,0xc6,0xc6, +/*0013c0*/ 0x65,0x64,0x65,0x01,0x8d,0x64,0x65,0x61,0x67,0x67,0x62,0x62,0xfe,0xd4,0xc6,0xc6, +/*0013d0*/ 0x00,0x01,0x00,0x01,0x00,0x01,0x01,0x8f,0x02,0x57,0x00,0x0f,0x00,0x7d,0x40,0x38, +/*0013e0*/ 0x01,0x10,0x10,0x40,0x11,0x00,0x04,0x03,0x04,0x06,0x05,0x08,0x07,0x04,0x02,0x01, +/*0013f0*/ 0x0a,0x09,0x04,0x0f,0x00,0x0c,0x0b,0x04,0x0e,0x0d,0x0d,0x0c,0x01,0x03,0x00,0x07, +/*001400*/ 0x0e,0x07,0x03,0x02,0x03,0x06,0x07,0x04,0x0b,0x0a,0x06,0x0e,0x0f,0x0e,0x03,0x09, +/*001410*/ 0x08,0x02,0x05,0x04,0x01,0x01,0x0d,0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x3c,0x3f, +/*001420*/ 0x3c,0x3f,0x3c,0x10,0xfd,0x3c,0x10,0xfd,0x17,0x3c,0x10,0xfd,0x17,0x3c,0x01,0x2f, +/*001430*/ 0x3c,0xfd,0x3c,0x2f,0x3c,0xfd,0x3c,0x2f,0x3c,0xfd,0x3c,0x2f,0x3c,0xfd,0x3c,0x00, +/*001440*/ 0x31,0x30,0x01,0x49,0x68,0xb9,0x00,0x0d,0x00,0x10,0x49,0x68,0x61,0xb0,0x40,0x52, +/*001450*/ 0x58,0x38,0x11,0x37,0xb9,0x00,0x10,0xff,0xc0,0x38,0x59,0x01,0x23,0x15,0x23,0x15, +/*001460*/ 0x23,0x35,0x33,0x35,0x33,0x35,0x23,0x15,0x23,0x35,0x21,0x01,0x8f,0x65,0x64,0x61, +/*001470*/ 0x65,0x63,0xcb,0x61,0x01,0x8e,0x01,0x91,0xc8,0xc8,0xc6,0xc8,0x66,0x64,0xc6,0x00, +/*001480*/ 0x00,0x03,0x00,0x01,0x00,0x01,0x01,0x8f,0x02,0x57,0x00,0x13,0x00,0x17,0x00,0x1b, +/*001490*/ 0x00,0x94,0x40,0x52,0x01,0x1c,0x1c,0x40,0x1d,0x00,0x1b,0x1a,0x17,0x16,0x0c,0x0b, +/*0014a0*/ 0x08,0x07,0x04,0x09,0x03,0x04,0x0a,0x09,0x06,0x03,0x05,0x19,0x18,0x15,0x14,0x12, +/*0014b0*/ 0x11,0x0e,0x02,0x01,0x09,0x0d,0x04,0x13,0x10,0x0f,0x03,0x00,0x1b,0x18,0x05,0x04, +/*0014c0*/ 0x01,0x05,0x00,0x06,0x02,0x16,0x15,0x0f,0x0e,0x0b,0x05,0x0a,0x06,0x0c,0x1a,0x19, +/*0014d0*/ 0x13,0x12,0x07,0x05,0x06,0x06,0x17,0x14,0x11,0x09,0x08,0x05,0x10,0x0d,0x0c,0x03, +/*0014e0*/ 0x03,0x02,0x01,0x01,0x05,0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x3c,0x3f,0x3c,0x2f, +/*0014f0*/ 0x17,0x3c,0xfd,0x17,0x3c,0x10,0xfd,0x17,0x3c,0x10,0xfd,0x17,0x3c,0x01,0x2f,0x17, +/*001500*/ 0x3c,0xfd,0x17,0x3c,0x2f,0x17,0x3c,0xfd,0x17,0x3c,0x00,0x31,0x30,0x01,0x49,0x68, +/*001510*/ 0xb9,0x00,0x05,0x00,0x1c,0x49,0x68,0x61,0xb0,0x40,0x52,0x58,0x38,0x11,0x37,0xb9, +/*001520*/ 0x00,0x1c,0xff,0xc0,0x38,0x59,0x25,0x23,0x15,0x23,0x35,0x23,0x35,0x33,0x35,0x23, +/*001530*/ 0x35,0x33,0x35,0x33,0x15,0x33,0x15,0x23,0x15,0x33,0x27,0x35,0x23,0x15,0x13,0x35, +/*001540*/ 0x23,0x15,0x01,0x8f,0x65,0xc5,0x64,0x64,0x64,0x64,0xc6,0x64,0x64,0x64,0x64,0xc6, +/*001550*/ 0xc6,0xc6,0x65,0x64,0x65,0xc5,0x67,0x61,0x64,0x65,0x61,0x67,0x67,0x62,0x62,0xfe, +/*001560*/ 0xd4,0xc6,0xc6,0x00,0x00,0x03,0x00,0x01,0x00,0x01,0x01,0x8f,0x02,0x57,0x00,0x0f, +/*001570*/ 0x00,0x13,0x00,0x17,0x00,0x8a,0x40,0x49,0x01,0x18,0x18,0x40,0x19,0x00,0x17,0x16, +/*001580*/ 0x13,0x12,0x0c,0x0b,0x08,0x07,0x04,0x09,0x03,0x04,0x0a,0x09,0x06,0x03,0x05,0x15, +/*001590*/ 0x14,0x11,0x10,0x0e,0x02,0x01,0x07,0x0d,0x04,0x0f,0x00,0x17,0x14,0x05,0x01,0x00, +/*0015a0*/ 0x05,0x04,0x06,0x06,0x12,0x11,0x0f,0x0e,0x0b,0x05,0x0a,0x06,0x0c,0x13,0x09,0x08, +/*0015b0*/ 0x03,0x10,0x06,0x16,0x15,0x07,0x03,0x06,0x0d,0x0c,0x03,0x03,0x02,0x01,0x01,0x05, +/*0015c0*/ 0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x3c,0x3f,0x3c,0x2f,0x17,0x3c,0xfd,0x17,0x3c, +/*0015d0*/ 0x10,0xfd,0x17,0x3c,0x10,0xfd,0x17,0x3c,0x01,0x2f,0x3c,0xfd,0x17,0x3c,0x2f,0x17, +/*0015e0*/ 0x3c,0xfd,0x17,0x3c,0x00,0x31,0x30,0x01,0x49,0x68,0xb9,0x00,0x05,0x00,0x18,0x49, +/*0015f0*/ 0x68,0x61,0xb0,0x40,0x52,0x58,0x38,0x11,0x37,0xb9,0x00,0x18,0xff,0xc0,0x38,0x59, +/*001600*/ 0x25,0x23,0x15,0x23,0x35,0x23,0x35,0x33,0x35,0x23,0x35,0x33,0x35,0x33,0x15,0x33, +/*001610*/ 0x07,0x35,0x23,0x15,0x17,0x35,0x23,0x15,0x01,0x8f,0x65,0xc5,0x64,0x64,0x64,0x64, +/*001620*/ 0xc6,0x64,0x64,0xc6,0xc6,0xc6,0x65,0x64,0x65,0x61,0x67,0xc5,0x64,0x65,0xc5,0xc6, +/*001630*/ 0xc6,0xc8,0x62,0x62,0x00,0x02,0x00,0x01,0x00,0x65,0x00,0x63,0x01,0xf3,0x00,0x03, +/*001640*/ 0x00,0x07,0x00,0x54,0x40,0x20,0x01,0x08,0x08,0x40,0x09,0x00,0x07,0x04,0x03,0x03, +/*001650*/ 0x00,0x04,0x06,0x05,0x02,0x03,0x01,0x01,0x00,0x06,0x02,0x07,0x06,0x06,0x04,0x03, +/*001660*/ 0x02,0x05,0x04,0x01,0x01,0x46,0x76,0x2f,0x37,0x18,0x00,0x2f,0x3c,0x2f,0x3c,0x10, +/*001670*/ 0xfd,0x3c,0x10,0xfd,0x3c,0x01,0x2f,0x17,0x3c,0xfd,0x17,0x3c,0x00,0x31,0x30,0x01, +/*001680*/ 0x49,0x68,0xb9,0x00,0x01,0x00,0x08,0x49,0x68,0x61,0xb0,0x40,0x52,0x58,0x38,0x11, +/*001690*/ 0x37,0xb9,0x00,0x08,0xff,0xc0,0x38,0x59,0x13,0x23,0x35,0x33,0x11,0x23,0x35,0x33, +/*0016a0*/ 0x63,0x62,0x62,0x62,0x62,0x01,0x91,0x62,0xfe,0x72,0x62,0x00,0x00,0x02,0x00,0x01, +/*0016b0*/ 0x00,0x01,0x00,0x63,0x01,0xf3,0x00,0x03,0x00,0x07,0x00,0x55,0x40,0x21,0x01,0x08, +/*0016c0*/ 0x08,0x40,0x09,0x00,0x07,0x04,0x03,0x03,0x00,0x04,0x06,0x05,0x02,0x03,0x01,0x07, +/*0016d0*/ 0x06,0x07,0x04,0x01,0x00,0x06,0x02,0x03,0x02,0x05,0x04,0x01,0x01,0x01,0x46,0x76, +/*0016e0*/ 0x2f,0x37,0x18,0x00,0x3f,0x3c,0x2f,0x3c,0x10,0xfd,0x3c,0x10,0xfd,0x3c,0x01,0x2f, +/*0016f0*/ 0x17,0x3c,0xfd,0x17,0x3c,0x00,0x31,0x30,0x01,0x49,0x68,0xb9,0x00,0x01,0x00,0x08, +/*001700*/ 0x49,0x68,0x61,0xb0,0x40,0x52,0x58,0x38,0x11,0x37,0xb9,0x00,0x08,0xff,0xc0,0x38, +/*001710*/ 0x59,0x13,0x23,0x35,0x33,0x11,0x23,0x35,0x33,0x63,0x62,0x62,0x62,0x62,0x01,0x91, +/*001720*/ 0x62,0xfe,0x0e,0xc6,0x00,0x01,0x00,0x01,0x00,0x01,0x01,0x2b,0x01,0xf3,0x00,0x13, +/*001730*/ 0x00,0x8a,0x40,0x42,0x01,0x14,0x14,0x40,0x15,0x00,0x10,0x0f,0x13,0x08,0x07,0x03, +/*001740*/ 0x00,0x04,0x09,0x12,0x11,0x0a,0x09,0x06,0x02,0x01,0x07,0x05,0x04,0x0b,0x0c,0x0b, +/*001750*/ 0x04,0x03,0x03,0x04,0x0e,0x0d,0x01,0x00,0x06,0x12,0x07,0x06,0x06,0x08,0x05,0x04, +/*001760*/ 0x06,0x0b,0x0a,0x0d,0x0c,0x06,0x0f,0x03,0x02,0x03,0x0e,0x13,0x12,0x11,0x10,0x02, +/*001770*/ 0x09,0x08,0x01,0x01,0x0d,0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x3c,0x3f,0x3c,0x2f, +/*001780*/ 0x3c,0x2f,0x17,0x3c,0xfd,0x3c,0x2f,0x3c,0xfd,0x3c,0x10,0xfd,0x3c,0x10,0xfd,0x3c, +/*001790*/ 0x01,0x2f,0x3c,0xfd,0x17,0x3c,0x10,0xfd,0x17,0x3c,0x10,0xfd,0x17,0x3c,0x2e,0x2e, +/*0017a0*/ 0x00,0x31,0x30,0x01,0x49,0x68,0xb9,0x00,0x0d,0x00,0x14,0x49,0x68,0x61,0xb0,0x40, +/*0017b0*/ 0x52,0x58,0x38,0x11,0x37,0xb9,0x00,0x14,0xff,0xc0,0x38,0x59,0x01,0x23,0x15,0x23, +/*0017c0*/ 0x15,0x33,0x15,0x33,0x15,0x23,0x35,0x23,0x35,0x23,0x35,0x33,0x35,0x33,0x35,0x33, +/*0017d0*/ 0x01,0x2b,0x65,0x63,0x64,0x64,0x62,0x64,0x64,0x65,0x63,0x62,0x01,0x91,0x64,0x67, +/*0017e0*/ 0x64,0x61,0x65,0x64,0x61,0x64,0x64,0x00,0x00,0x02,0x00,0x01,0x00,0x65,0x01,0x2b, +/*0017f0*/ 0x01,0x8f,0x00,0x03,0x00,0x07,0x00,0x54,0x40,0x1e,0x01,0x08,0x08,0x40,0x09,0x00, +/*001800*/ 0x07,0x06,0x05,0x04,0x03,0x02,0x01,0x00,0x01,0x00,0x06,0x02,0x07,0x06,0x06,0x04, +/*001810*/ 0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x3c,0x2f, +/*001820*/ 0x3c,0x10,0xfd,0x3c,0x10,0xfd,0x3c,0x01,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e, +/*001830*/ 0x00,0x31,0x30,0x01,0x49,0x68,0xb9,0x00,0x01,0x00,0x08,0x49,0x68,0x61,0xb0,0x40, +/*001840*/ 0x52,0x58,0x38,0x11,0x37,0xb9,0x00,0x08,0xff,0xc0,0x38,0x59,0x01,0x21,0x35,0x21, +/*001850*/ 0x11,0x21,0x35,0x21,0x01,0x2b,0xfe,0xd6,0x01,0x2a,0xfe,0xd6,0x01,0x2a,0x01,0x2d, +/*001860*/ 0x62,0xfe,0xd6,0x62,0x00,0x01,0x00,0x01,0x00,0x01,0x01,0x2b,0x01,0xf3,0x00,0x13, +/*001870*/ 0x00,0x8e,0x40,0x44,0x01,0x14,0x14,0x40,0x15,0x00,0x10,0x0f,0x04,0x03,0x03,0x04, +/*001880*/ 0x0e,0x0d,0x06,0x03,0x05,0x0c,0x0b,0x08,0x03,0x07,0x04,0x02,0x01,0x12,0x11,0x0a, +/*001890*/ 0x03,0x09,0x04,0x13,0x00,0x13,0x12,0x06,0x00,0x09,0x01,0x00,0x03,0x08,0x06,0x02, +/*0018a0*/ 0x07,0x03,0x02,0x03,0x06,0x06,0x04,0x0b,0x0a,0x06,0x11,0x10,0x0d,0x0c,0x06,0x0e, +/*0018b0*/ 0x0f,0x0e,0x05,0x04,0x01,0x01,0x05,0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x3c,0x2f, +/*0018c0*/ 0x3c,0x10,0xfd,0x3c,0x2f,0x3c,0xfd,0x3c,0x10,0xfd,0x17,0x3c,0x10,0xfd,0x17,0x3c, +/*0018d0*/ 0x10,0xfd,0x3c,0x01,0x2f,0x3c,0xfd,0x17,0x3c,0x2f,0x3c,0xfd,0x17,0x3c,0x2f,0x17, +/*0018e0*/ 0x3c,0xfd,0x17,0x3c,0x00,0x31,0x30,0x01,0x49,0x68,0xb9,0x00,0x05,0x00,0x14,0x49, +/*0018f0*/ 0x68,0x61,0xb0,0x40,0x52,0x58,0x38,0x11,0x37,0xb9,0x00,0x14,0xff,0xc0,0x38,0x59, +/*001900*/ 0x25,0x23,0x15,0x23,0x15,0x23,0x35,0x33,0x35,0x33,0x35,0x23,0x35,0x23,0x35,0x33, +/*001910*/ 0x15,0x33,0x15,0x33,0x01,0x2b,0x65,0x64,0x61,0x65,0x63,0x64,0x64,0x62,0x64,0x64, +/*001920*/ 0xc9,0x64,0x64,0x62,0x64,0x67,0x63,0x62,0x65,0x64,0x00,0x02,0x00,0x01,0x00,0x01, +/*001930*/ 0x01,0x8f,0x02,0x57,0x00,0x0f,0x00,0x13,0x00,0x86,0x40,0x40,0x01,0x14,0x14,0x40, +/*001940*/ 0x15,0x00,0x02,0x01,0x05,0x03,0x0e,0x0d,0x06,0x03,0x05,0x04,0x0f,0x00,0x08,0x07, +/*001950*/ 0x04,0x0a,0x09,0x13,0x10,0x04,0x12,0x11,0x0c,0x0b,0x04,0x05,0x03,0x05,0x01,0x00, +/*001960*/ 0x03,0x04,0x06,0x03,0x02,0x09,0x08,0x06,0x0f,0x0e,0x0b,0x07,0x06,0x05,0x0a,0x13, +/*001970*/ 0x12,0x06,0x10,0x11,0x10,0x01,0x0d,0x0c,0x03,0x01,0x09,0x46,0x76,0x2f,0x37,0x18, +/*001980*/ 0x00,0x3f,0x3c,0x3f,0x3c,0x10,0xfd,0x3c,0x2f,0x17,0x3c,0xfd,0x3c,0x2f,0x3c,0xfd, +/*001990*/ 0x17,0x3c,0x01,0x2f,0x17,0x3c,0xfd,0x3c,0x2f,0x3c,0xfd,0x3c,0x2f,0x3c,0xfd,0x17, +/*0019a0*/ 0x3c,0x10,0xfd,0x3c,0x00,0x31,0x30,0x01,0x49,0x68,0xb9,0x00,0x09,0x00,0x14,0x49, +/*0019b0*/ 0x68,0x61,0xb0,0x40,0x52,0x58,0x38,0x11,0x37,0xb9,0x00,0x14,0xff,0xc0,0x38,0x59, +/*0019c0*/ 0x01,0x23,0x15,0x23,0x35,0x33,0x35,0x23,0x15,0x23,0x35,0x33,0x35,0x33,0x15,0x33, +/*0019d0*/ 0x03,0x23,0x35,0x33,0x01,0x8f,0x65,0xc5,0xc8,0xcb,0x61,0x64,0xc6,0x64,0xc8,0x62, +/*0019e0*/ 0x62,0x01,0x2d,0x64,0x62,0xca,0x64,0x62,0x64,0x65,0xfe,0x0f,0x62,0x00,0x00,0x03, +/*0019f0*/ 0x00,0x01,0xff,0x9d,0x01,0xf3,0x01,0xf3,0x00,0x0b,0x00,0x0f,0x00,0x15,0x00,0x8a, +/*001a00*/ 0x40,0x42,0x01,0x16,0x16,0x40,0x17,0x00,0x14,0x13,0x12,0x11,0x13,0x12,0x08,0x07, +/*001a10*/ 0x04,0x05,0x03,0x04,0x06,0x05,0x11,0x10,0x0d,0x0c,0x0a,0x05,0x09,0x04,0x0b,0x00, +/*001a20*/ 0x0f,0x0e,0x04,0x15,0x02,0x01,0x03,0x14,0x0f,0x0c,0x06,0x00,0x0e,0x0d,0x06,0x15, +/*001a30*/ 0x10,0x09,0x08,0x03,0x02,0x0b,0x0a,0x07,0x03,0x06,0x02,0x05,0x04,0x01,0x03,0x00, +/*001a40*/ 0x01,0x01,0x05,0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x17,0x3c,0x3f,0x17,0x3c,0x2f, +/*001a50*/ 0x3c,0x2f,0x3c,0x2f,0x3c,0xfd,0x3c,0x10,0xfd,0x3c,0x01,0x2f,0x17,0x3c,0xfd,0x3c, +/*001a60*/ 0x2f,0x3c,0xfd,0x17,0x3c,0x2f,0x3c,0xfd,0x17,0x3c,0x00,0x2e,0x2e,0x2e,0x2e,0x31, +/*001a70*/ 0x30,0x01,0x49,0x68,0xb9,0x00,0x05,0x00,0x16,0x49,0x68,0x61,0xb0,0x40,0x52,0x58, +/*001a80*/ 0x38,0x11,0x37,0xb9,0x00,0x16,0xff,0xc0,0x38,0x59,0x25,0x21,0x15,0x23,0x35,0x23, +/*001a90*/ 0x11,0x33,0x35,0x21,0x15,0x33,0x03,0x35,0x23,0x15,0x37,0x35,0x21,0x11,0x33,0x11, +/*001aa0*/ 0x01,0xf3,0xfe,0xd3,0x61,0x64,0x64,0x01,0x2a,0x64,0x64,0x62,0x62,0xfe,0xd6,0x62, +/*001ab0*/ 0x01,0x64,0x65,0x01,0x8d,0x64,0x65,0xfe,0xd7,0x62,0x62,0xc8,0x62,0xfe,0x72,0x01, +/*001ac0*/ 0x2c,0x00,0x00,0x02,0x00,0x01,0x00,0x01,0x01,0x8f,0x02,0x57,0x00,0x09,0x00,0x0d, +/*001ad0*/ 0x00,0x6b,0x40,0x30,0x01,0x0e,0x0e,0x40,0x0f,0x00,0x0d,0x0c,0x08,0x04,0x03,0x05, +/*001ae0*/ 0x07,0x04,0x06,0x05,0x0b,0x02,0x01,0x03,0x0a,0x04,0x09,0x00,0x0d,0x0a,0x06,0x03, +/*001af0*/ 0x02,0x0c,0x0b,0x07,0x03,0x06,0x06,0x08,0x09,0x08,0x03,0x05,0x04,0x01,0x03,0x00, +/*001b00*/ 0x01,0x01,0x05,0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x17,0x3c,0x3f,0x3c,0x10,0xfd, +/*001b10*/ 0x17,0x3c,0x2f,0x3c,0xfd,0x3c,0x01,0x2f,0x3c,0xfd,0x17,0x3c,0x2f,0x3c,0xfd,0x17, +/*001b20*/ 0x3c,0x00,0x31,0x30,0x01,0x49,0x68,0xb9,0x00,0x05,0x00,0x0e,0x49,0x68,0x61,0xb0, +/*001b30*/ 0x40,0x52,0x58,0x38,0x11,0x37,0xb9,0x00,0x0e,0xff,0xc0,0x38,0x59,0x25,0x23,0x35, +/*001b40*/ 0x23,0x15,0x23,0x11,0x33,0x35,0x21,0x03,0x35,0x23,0x15,0x01,0x8f,0x62,0xca,0x62, +/*001b50*/ 0x64,0x01,0x2a,0x64,0xc6,0x01,0xc8,0xc8,0x01,0xf2,0x64,0xfe,0xd6,0xc6,0xc6,0x00, +/*001b60*/ 0x00,0x03,0x00,0x01,0x00,0x01,0x01,0x8f,0x02,0x57,0x00,0x0b,0x00,0x0f,0x00,0x13, +/*001b70*/ 0x00,0x82,0x40,0x41,0x01,0x14,0x14,0x40,0x15,0x00,0x13,0x12,0x0f,0x03,0x0e,0x04, +/*001b80*/ 0x04,0x03,0x11,0x10,0x0d,0x0c,0x0a,0x09,0x06,0x02,0x01,0x09,0x05,0x04,0x0b,0x08, +/*001b90*/ 0x07,0x03,0x00,0x13,0x10,0x01,0x03,0x00,0x06,0x02,0x0e,0x07,0x06,0x03,0x0d,0x06, +/*001ba0*/ 0x04,0x12,0x0b,0x0a,0x03,0x11,0x06,0x0f,0x0c,0x09,0x03,0x08,0x05,0x04,0x03,0x03, +/*001bb0*/ 0x02,0x01,0x01,0x03,0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x3c,0x3f,0x3c,0x2f,0x17, +/*001bc0*/ 0x3c,0xfd,0x17,0x3c,0x10,0xfd,0x17,0x3c,0x10,0xfd,0x17,0x3c,0x01,0x2f,0x17,0x3c, +/*001bd0*/ 0xfd,0x17,0x3c,0x2f,0x3c,0xfd,0x17,0x3c,0x00,0x31,0x30,0x01,0x49,0x68,0xb9,0x00, +/*001be0*/ 0x03,0x00,0x14,0x49,0x68,0x61,0xb0,0x40,0x52,0x58,0x38,0x11,0x37,0xb9,0x00,0x14, +/*001bf0*/ 0xff,0xc0,0x38,0x59,0x25,0x23,0x15,0x21,0x11,0x21,0x15,0x33,0x15,0x23,0x15,0x33, +/*001c00*/ 0x27,0x35,0x23,0x15,0x13,0x35,0x23,0x15,0x01,0x8f,0x65,0xfe,0xd7,0x01,0x2a,0x64, +/*001c10*/ 0x64,0x64,0x64,0xc6,0xc6,0xc6,0x65,0x64,0x02,0x56,0x65,0x61,0x67,0x67,0x62,0x62, +/*001c20*/ 0xfe,0xd4,0xc6,0xc6,0x00,0x01,0x00,0x01,0x00,0x01,0x01,0x8f,0x02,0x57,0x00,0x0b, +/*001c30*/ 0x00,0x64,0x40,0x2a,0x01,0x0c,0x0c,0x40,0x0d,0x00,0x07,0x06,0x0b,0x04,0x03,0x00, +/*001c40*/ 0x0a,0x09,0x06,0x05,0x02,0x05,0x01,0x04,0x08,0x07,0x09,0x08,0x01,0x03,0x00,0x06, +/*001c50*/ 0x0a,0x03,0x02,0x06,0x04,0x0b,0x0a,0x03,0x05,0x04,0x01,0x01,0x07,0x46,0x76,0x2f, +/*001c60*/ 0x37,0x18,0x00,0x3f,0x3c,0x3f,0x3c,0x10,0xfd,0x3c,0x10,0xfd,0x17,0x3c,0x01,0x2f, +/*001c70*/ 0x3c,0xfd,0x17,0x3c,0x2e,0x2e,0x2e,0x2e,0x00,0x2e,0x2e,0x31,0x30,0x01,0x49,0x68, +/*001c80*/ 0xb9,0x00,0x07,0x00,0x0c,0x49,0x68,0x61,0xb0,0x40,0x52,0x58,0x38,0x11,0x37,0xb9, +/*001c90*/ 0x00,0x0c,0xff,0xc0,0x38,0x59,0x01,0x21,0x11,0x21,0x15,0x21,0x35,0x23,0x11,0x33, +/*001ca0*/ 0x35,0x21,0x01,0x8f,0xfe,0xd4,0x01,0x2c,0xfe,0xd6,0x64,0x64,0x01,0x2a,0x01,0xf5, +/*001cb0*/ 0xfe,0x6e,0x62,0x65,0x01,0x8d,0x64,0x00,0x00,0x02,0x00,0x01,0x00,0x01,0x01,0x8f, +/*001cc0*/ 0x02,0x57,0x00,0x07,0x00,0x0b,0x00,0x65,0x40,0x2c,0x01,0x0c,0x0c,0x40,0x0d,0x00, +/*001cd0*/ 0x0b,0x0a,0x04,0x04,0x03,0x09,0x08,0x06,0x02,0x01,0x05,0x05,0x04,0x07,0x00,0x0b, +/*001ce0*/ 0x08,0x01,0x03,0x00,0x06,0x02,0x0a,0x07,0x06,0x03,0x09,0x06,0x04,0x05,0x04,0x03, +/*001cf0*/ 0x03,0x02,0x01,0x01,0x03,0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x3c,0x3f,0x3c,0x10, +/*001d00*/ 0xfd,0x17,0x3c,0x10,0xfd,0x17,0x3c,0x01,0x2f,0x3c,0xfd,0x17,0x3c,0x2f,0x3c,0xfd, +/*001d10*/ 0x3c,0x00,0x31,0x30,0x01,0x49,0x68,0xb9,0x00,0x03,0x00,0x0c,0x49,0x68,0x61,0xb0, +/*001d20*/ 0x40,0x52,0x58,0x38,0x11,0x37,0xb9,0x00,0x0c,0xff,0xc0,0x38,0x59,0x25,0x23,0x15, +/*001d30*/ 0x21,0x11,0x21,0x15,0x33,0x03,0x11,0x23,0x11,0x01,0x8f,0x65,0xfe,0xd7,0x01,0x2a, +/*001d40*/ 0x64,0x64,0xc6,0x65,0x64,0x02,0x56,0x65,0xfe,0x73,0x01,0x8e,0xfe,0x72,0x00,0x01, +/*001d50*/ 0x00,0x01,0x00,0x01,0x01,0x8f,0x02,0x57,0x00,0x0d,0x00,0x6d,0x40,0x2f,0x01,0x0e, +/*001d60*/ 0x0e,0x40,0x0f,0x00,0x0d,0x08,0x07,0x04,0x03,0x00,0x0c,0x0b,0x06,0x05,0x02,0x05, +/*001d70*/ 0x01,0x04,0x0a,0x09,0x0b,0x0a,0x01,0x03,0x00,0x06,0x0c,0x05,0x04,0x06,0x03,0x02, +/*001d80*/ 0x07,0x06,0x06,0x08,0x0d,0x0c,0x03,0x09,0x08,0x01,0x01,0x09,0x46,0x76,0x2f,0x37, +/*001d90*/ 0x18,0x00,0x3f,0x3c,0x3f,0x3c,0x10,0xfd,0x3c,0x2f,0x3c,0xfd,0x3c,0x10,0xfd,0x17, +/*001da0*/ 0x3c,0x01,0x2f,0x3c,0xfd,0x17,0x3c,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x00,0x31,0x30, +/*001db0*/ 0x01,0x49,0x68,0xb9,0x00,0x09,0x00,0x0e,0x49,0x68,0x61,0xb0,0x40,0x52,0x58,0x38, +/*001dc0*/ 0x11,0x37,0xb9,0x00,0x0e,0xff,0xc0,0x38,0x59,0x01,0x21,0x15,0x33,0x15,0x23,0x15, +/*001dd0*/ 0x21,0x15,0x21,0x11,0x33,0x35,0x21,0x01,0x8f,0xfe,0xd4,0xc8,0xc8,0x01,0x2c,0xfe, +/*001de0*/ 0x72,0x64,0x01,0x2a,0x01,0xf5,0x67,0x61,0xca,0x62,0x01,0xf2,0x64,0x00,0x00,0x01, +/*001df0*/ 0x00,0x01,0x00,0x01,0x01,0x8f,0x02,0x57,0x00,0x0b,0x00,0x62,0x40,0x29,0x01,0x0c, +/*001e00*/ 0x0c,0x40,0x0d,0x00,0x0b,0x04,0x03,0x00,0x0a,0x09,0x06,0x05,0x02,0x05,0x01,0x04, +/*001e10*/ 0x08,0x07,0x09,0x08,0x01,0x03,0x00,0x06,0x0a,0x05,0x04,0x06,0x03,0x02,0x0b,0x0a, +/*001e20*/ 0x03,0x07,0x06,0x01,0x01,0x07,0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x3c,0x3f,0x3c, +/*001e30*/ 0x2f,0x3c,0xfd,0x3c,0x10,0xfd,0x17,0x3c,0x01,0x2f,0x3c,0xfd,0x17,0x3c,0x2e,0x2e, +/*001e40*/ 0x2e,0x2e,0x00,0x31,0x30,0x01,0x49,0x68,0xb9,0x00,0x07,0x00,0x0c,0x49,0x68,0x61, +/*001e50*/ 0xb0,0x40,0x52,0x58,0x38,0x11,0x37,0xb9,0x00,0x0c,0xff,0xc0,0x38,0x59,0x01,0x21, +/*001e60*/ 0x15,0x33,0x15,0x23,0x11,0x23,0x11,0x33,0x35,0x21,0x01,0x8f,0xfe,0xd4,0xc8,0xc8, +/*001e70*/ 0x62,0x64,0x01,0x2a,0x01,0xf5,0x67,0x61,0xfe,0xd4,0x01,0xf2,0x64,0x00,0x00,0x01, +/*001e80*/ 0x00,0x01,0x00,0x01,0x01,0x8f,0x02,0x57,0x00,0x0f,0x00,0x7c,0x40,0x39,0x01,0x10, +/*001e90*/ 0x10,0x40,0x11,0x00,0x03,0x02,0x0e,0x0d,0x05,0x00,0x0a,0x06,0x05,0x02,0x01,0x05, +/*001ea0*/ 0x09,0x04,0x04,0x03,0x0c,0x0b,0x04,0x0f,0x08,0x07,0x03,0x00,0x0b,0x0a,0x06,0x00, +/*001eb0*/ 0x09,0x05,0x04,0x03,0x08,0x06,0x06,0x0d,0x0c,0x06,0x0e,0x0f,0x0e,0x02,0x07,0x06, +/*001ec0*/ 0x03,0x01,0x00,0x01,0x01,0x03,0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x3c,0x3f,0x3c, +/*001ed0*/ 0x3f,0x3c,0x10,0xfd,0x3c,0x10,0xfd,0x17,0x3c,0x10,0xfd,0x3c,0x01,0x2f,0x17,0x3c, +/*001ee0*/ 0xfd,0x3c,0x2f,0x3c,0xfd,0x17,0x3c,0x10,0xfd,0x3c,0x00,0x2e,0x2e,0x31,0x30,0x01, +/*001ef0*/ 0x49,0x68,0xb9,0x00,0x03,0x00,0x10,0x49,0x68,0x61,0xb0,0x40,0x52,0x58,0x38,0x11, +/*001f00*/ 0x37,0xb9,0x00,0x10,0xff,0xc0,0x38,0x59,0x25,0x21,0x35,0x23,0x11,0x33,0x35,0x21, +/*001f10*/ 0x15,0x21,0x11,0x33,0x35,0x23,0x35,0x33,0x01,0x8f,0xfe,0xd6,0x64,0x64,0x01,0x2a, +/*001f20*/ 0xfe,0xd4,0xca,0x64,0xc6,0x01,0x65,0x01,0x8d,0x64,0x62,0xfe,0x6e,0xcb,0x61,0x00, +/*001f30*/ 0x00,0x01,0x00,0x01,0x00,0x01,0x01,0x8f,0x02,0x57,0x00,0x0b,0x00,0x65,0x40,0x2c, +/*001f40*/ 0x01,0x0c,0x0c,0x40,0x0d,0x00,0x0a,0x09,0x02,0x03,0x01,0x04,0x0b,0x00,0x08,0x07, +/*001f50*/ 0x04,0x03,0x03,0x04,0x06,0x05,0x03,0x02,0x06,0x08,0x09,0x08,0x02,0x0b,0x0a,0x07, +/*001f60*/ 0x03,0x06,0x03,0x05,0x04,0x01,0x03,0x00,0x01,0x01,0x05,0x46,0x76,0x2f,0x37,0x18, +/*001f70*/ 0x00,0x3f,0x17,0x3c,0x3f,0x17,0x3c,0x3f,0x3c,0x10,0xfd,0x3c,0x01,0x2f,0x3c,0xfd, +/*001f80*/ 0x17,0x3c,0x2f,0x3c,0xfd,0x17,0x3c,0x00,0x31,0x30,0x01,0x49,0x68,0xb9,0x00,0x05, +/*001f90*/ 0x00,0x0c,0x49,0x68,0x61,0xb0,0x40,0x52,0x58,0x38,0x11,0x37,0xb9,0x00,0x0c,0xff, +/*001fa0*/ 0xc0,0x38,0x59,0x25,0x23,0x11,0x23,0x11,0x23,0x11,0x33,0x15,0x33,0x35,0x33,0x01, +/*001fb0*/ 0x8f,0x62,0xca,0x62,0x62,0xca,0x62,0x01,0x01,0x2c,0xfe,0xd4,0x02,0x56,0xc8,0xc8, +/*001fc0*/ 0x00,0x01,0x00,0x01,0x00,0x01,0x01,0x2b,0x02,0x57,0x00,0x0b,0x00,0x6c,0x40,0x30, +/*001fd0*/ 0x01,0x0c,0x0c,0x40,0x0d,0x00,0x0b,0x08,0x07,0x03,0x00,0x08,0x09,0x06,0x05,0x02, +/*001fe0*/ 0x03,0x01,0x08,0x03,0x04,0x03,0x04,0x0a,0x09,0x0b,0x0a,0x03,0x03,0x02,0x06,0x00, +/*001ff0*/ 0x09,0x08,0x05,0x03,0x04,0x06,0x06,0x07,0x06,0x03,0x01,0x00,0x01,0x01,0x01,0x46, +/*002000*/ 0x76,0x2f,0x37,0x18,0x00,0x3f,0x3c,0x3f,0x3c,0x10,0xfd,0x17,0x3c,0x10,0xfd,0x17, +/*002010*/ 0x3c,0x01,0x2f,0x3c,0xfd,0x3c,0x10,0xfd,0x17,0x3c,0x10,0xfd,0x17,0x3c,0x00,0x31, +/*002020*/ 0x30,0x01,0x49,0x68,0xb9,0x00,0x01,0x00,0x0c,0x49,0x68,0x61,0xb0,0x40,0x52,0x58, +/*002030*/ 0x38,0x11,0x37,0xb9,0x00,0x0c,0xff,0xc0,0x38,0x59,0x25,0x21,0x35,0x33,0x11,0x23, +/*002040*/ 0x35,0x21,0x15,0x23,0x11,0x33,0x01,0x2b,0xfe,0xd6,0x64,0x64,0x01,0x2a,0x64,0x64, +/*002050*/ 0x01,0x62,0x01,0x92,0x62,0x62,0xfe,0x6d,0x00,0x01,0x00,0x01,0x00,0x01,0x01,0x8f, +/*002060*/ 0x02,0x57,0x00,0x09,0x00,0x61,0x40,0x27,0x01,0x0a,0x0a,0x40,0x0b,0x00,0x04,0x03, +/*002070*/ 0x02,0x01,0x08,0x07,0x05,0x00,0x06,0x05,0x04,0x09,0x00,0x05,0x01,0x00,0x03,0x04, +/*002080*/ 0x06,0x02,0x07,0x06,0x06,0x08,0x09,0x08,0x03,0x03,0x02,0x01,0x01,0x03,0x46,0x76, +/*002090*/ 0x2f,0x37,0x18,0x00,0x3f,0x3c,0x3f,0x3c,0x10,0xfd,0x3c,0x10,0xfd,0x17,0x3c,0x01, +/*0020a0*/ 0x2f,0x3c,0xfd,0x3c,0x10,0xfd,0x3c,0x2e,0x2e,0x2e,0x2e,0x00,0x31,0x30,0x01,0x49, +/*0020b0*/ 0x68,0xb9,0x00,0x03,0x00,0x0a,0x49,0x68,0x61,0xb0,0x40,0x52,0x58,0x38,0x11,0x37, +/*0020c0*/ 0xb9,0x00,0x0a,0xff,0xc0,0x38,0x59,0x25,0x23,0x15,0x21,0x35,0x21,0x11,0x23,0x35, +/*0020d0*/ 0x33,0x01,0x8f,0x65,0xfe,0xd7,0x01,0x2c,0x64,0xc6,0x65,0x64,0x62,0x01,0x92,0x62, +/*0020e0*/ 0x00,0x01,0x00,0x01,0x00,0x01,0x01,0x8f,0x02,0x57,0x00,0x0f,0x00,0x76,0x40,0x37, +/*0020f0*/ 0x01,0x10,0x10,0x40,0x11,0x00,0x0f,0x0e,0x0e,0x0d,0x0a,0x09,0x02,0x05,0x01,0x04, +/*002100*/ 0x0f,0x0c,0x0b,0x03,0x00,0x08,0x07,0x04,0x03,0x03,0x04,0x06,0x05,0x0d,0x0c,0x07, +/*002110*/ 0x06,0x03,0x02,0x06,0x08,0x09,0x08,0x02,0x0b,0x0a,0x07,0x03,0x06,0x03,0x05,0x04, +/*002120*/ 0x01,0x03,0x00,0x01,0x01,0x05,0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x17,0x3c,0x3f, +/*002130*/ 0x17,0x3c,0x3f,0x3c,0x10,0xfd,0x3c,0x10,0xfd,0x3c,0x01,0x2f,0x3c,0xfd,0x17,0x3c, +/*002140*/ 0x2f,0x17,0x3c,0xfd,0x17,0x3c,0x00,0x2e,0x2e,0x31,0x30,0x01,0x49,0x68,0xb9,0x00, +/*002150*/ 0x05,0x00,0x10,0x49,0x68,0x61,0xb0,0x40,0x52,0x58,0x38,0x11,0x37,0xb9,0x00,0x10, +/*002160*/ 0xff,0xc0,0x38,0x59,0x25,0x23,0x11,0x23,0x11,0x23,0x11,0x33,0x15,0x33,0x35,0x33, +/*002170*/ 0x15,0x23,0x15,0x33,0x01,0x8f,0x62,0xca,0x62,0x62,0xca,0x62,0x64,0x64,0x01,0x01, +/*002180*/ 0x2c,0xfe,0xd4,0x02,0x56,0xc8,0xc8,0xc6,0x67,0x00,0x00,0x01,0x00,0x01,0x00,0x01, +/*002190*/ 0x01,0x8f,0x02,0x57,0x00,0x07,0x00,0x53,0x40,0x1f,0x01,0x08,0x08,0x40,0x09,0x00, +/*0021a0*/ 0x03,0x02,0x07,0x00,0x06,0x02,0x01,0x03,0x05,0x04,0x04,0x03,0x07,0x06,0x06,0x00, +/*0021b0*/ 0x05,0x04,0x03,0x01,0x00,0x01,0x01,0x03,0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x3c, +/*0021c0*/ 0x3f,0x3c,0x10,0xfd,0x3c,0x01,0x2f,0x3c,0xfd,0x17,0x3c,0x2e,0x2e,0x00,0x2e,0x2e, +/*0021d0*/ 0x31,0x30,0x01,0x49,0x68,0xb9,0x00,0x03,0x00,0x08,0x49,0x68,0x61,0xb0,0x40,0x52, +/*0021e0*/ 0x58,0x38,0x11,0x37,0xb9,0x00,0x08,0xff,0xc0,0x38,0x59,0x25,0x21,0x35,0x23,0x11, +/*0021f0*/ 0x33,0x11,0x21,0x01,0x8f,0xfe,0xd6,0x64,0x62,0x01,0x2c,0x01,0x65,0x01,0xf1,0xfe, +/*002200*/ 0x0c,0x00,0x00,0x01,0x00,0x01,0x00,0x01,0x01,0xf3,0x02,0x57,0x00,0x13,0x00,0x8a, +/*002210*/ 0x40,0x43,0x01,0x14,0x14,0x40,0x15,0x00,0x10,0x0f,0x05,0x00,0x12,0x11,0x02,0x03, +/*002220*/ 0x01,0x04,0x13,0x00,0x04,0x03,0x04,0x0e,0x0d,0x06,0x03,0x05,0x0c,0x0b,0x08,0x03, +/*002230*/ 0x07,0x04,0x0a,0x09,0x07,0x06,0x03,0x03,0x02,0x06,0x11,0x0d,0x0c,0x03,0x10,0x05, +/*002240*/ 0x04,0x06,0x0e,0x0f,0x0e,0x02,0x13,0x12,0x0b,0x03,0x0a,0x03,0x09,0x08,0x01,0x03, +/*002250*/ 0x00,0x01,0x01,0x09,0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x17,0x3c,0x3f,0x17,0x3c, +/*002260*/ 0x3f,0x3c,0x10,0xfd,0x3c,0x2f,0x17,0x3c,0xfd,0x17,0x3c,0x01,0x2f,0x3c,0xfd,0x17, +/*002270*/ 0x3c,0x2f,0x17,0x3c,0xfd,0x3c,0x2f,0x3c,0xfd,0x17,0x3c,0x10,0xfd,0x3c,0x00,0x31, +/*002280*/ 0x30,0x01,0x49,0x68,0xb9,0x00,0x09,0x00,0x14,0x49,0x68,0x61,0xb0,0x40,0x52,0x58, +/*002290*/ 0x38,0x11,0x37,0xb9,0x00,0x14,0xff,0xc0,0x38,0x59,0x25,0x23,0x11,0x23,0x15,0x23, +/*0022a0*/ 0x35,0x23,0x11,0x23,0x11,0x33,0x15,0x33,0x15,0x33,0x35,0x33,0x35,0x33,0x01,0xf3, +/*0022b0*/ 0x62,0x67,0x61,0x67,0x61,0x62,0x64,0x67,0x64,0x61,0x01,0x01,0x90,0x64,0x64,0xfe, +/*0022c0*/ 0x70,0x02,0x56,0x65,0x63,0x64,0x64,0x00,0x00,0x01,0x00,0x01,0x00,0x01,0x01,0x8f, +/*0022d0*/ 0x02,0x57,0x00,0x0f,0x00,0x79,0x40,0x38,0x01,0x10,0x10,0x40,0x11,0x00,0x0c,0x04, +/*0022e0*/ 0x03,0x03,0x0b,0x05,0x07,0x0e,0x0d,0x02,0x03,0x01,0x04,0x0f,0x00,0x0a,0x09,0x06, +/*0022f0*/ 0x03,0x05,0x04,0x08,0x07,0x03,0x02,0x06,0x0c,0x05,0x04,0x06,0x0b,0x0a,0x0d,0x0c, +/*002300*/ 0x02,0x0f,0x0e,0x09,0x03,0x08,0x03,0x07,0x06,0x01,0x03,0x00,0x01,0x01,0x07,0x46, +/*002310*/ 0x76,0x2f,0x37,0x18,0x00,0x3f,0x17,0x3c,0x3f,0x17,0x3c,0x3f,0x3c,0x2f,0x3c,0xfd, +/*002320*/ 0x3c,0x10,0xfd,0x3c,0x01,0x2f,0x3c,0xfd,0x17,0x3c,0x2f,0x3c,0xfd,0x17,0x3c,0x10, +/*002330*/ 0xfd,0x17,0x3c,0x00,0x31,0x30,0x01,0x49,0x68,0xb9,0x00,0x07,0x00,0x10,0x49,0x68, +/*002340*/ 0x61,0xb0,0x40,0x52,0x58,0x38,0x11,0x37,0xb9,0x00,0x10,0xff,0xc0,0x38,0x59,0x25, +/*002350*/ 0x23,0x11,0x23,0x35,0x23,0x11,0x23,0x11,0x33,0x15,0x33,0x15,0x33,0x35,0x33,0x01, +/*002360*/ 0x8f,0x62,0x64,0x67,0x61,0x62,0x64,0x67,0x61,0x01,0x01,0x2d,0x63,0xfe,0x70,0x02, +/*002370*/ 0x56,0x65,0x63,0xc8,0x00,0x02,0x00,0x01,0x00,0x01,0x01,0x8f,0x02,0x57,0x00,0x0b, +/*002380*/ 0x00,0x0f,0x00,0x6f,0x40,0x35,0x01,0x10,0x10,0x40,0x11,0x00,0x0f,0x0e,0x08,0x07, +/*002390*/ 0x04,0x05,0x03,0x04,0x06,0x05,0x0d,0x0c,0x0a,0x02,0x01,0x05,0x09,0x04,0x0b,0x00, +/*0023a0*/ 0x0f,0x0c,0x05,0x04,0x01,0x05,0x00,0x06,0x02,0x0e,0x0d,0x0b,0x0a,0x07,0x05,0x06, +/*0023b0*/ 0x06,0x08,0x09,0x08,0x03,0x03,0x02,0x01,0x01,0x05,0x46,0x76,0x2f,0x37,0x18,0x00, +/*0023c0*/ 0x3f,0x3c,0x3f,0x3c,0x10,0xfd,0x17,0x3c,0x10,0xfd,0x17,0x3c,0x01,0x2f,0x3c,0xfd, +/*0023d0*/ 0x17,0x3c,0x2f,0x3c,0xfd,0x17,0x3c,0x00,0x31,0x30,0x01,0x49,0x68,0xb9,0x00,0x05, +/*0023e0*/ 0x00,0x10,0x49,0x68,0x61,0xb0,0x40,0x52,0x58,0x38,0x11,0x37,0xb9,0x00,0x10,0xff, +/*0023f0*/ 0xc0,0x38,0x59,0x25,0x23,0x15,0x23,0x35,0x23,0x11,0x33,0x35,0x33,0x15,0x33,0x03, +/*002400*/ 0x11,0x23,0x11,0x01,0x8f,0x65,0xc5,0x64,0x64,0xc6,0x64,0x64,0xc6,0x65,0x64,0x65, +/*002410*/ 0x01,0x8d,0x64,0x65,0xfe,0x73,0x01,0x8e,0xfe,0x72,0x00,0x02,0x00,0x01,0x00,0x01, +/*002420*/ 0x01,0x8f,0x02,0x57,0x00,0x09,0x00,0x0d,0x00,0x6b,0x40,0x30,0x01,0x0e,0x0e,0x40, +/*002430*/ 0x0f,0x00,0x0d,0x04,0x03,0x03,0x0c,0x04,0x06,0x05,0x0b,0x0a,0x08,0x02,0x01,0x05, +/*002440*/ 0x07,0x04,0x09,0x00,0x0d,0x0a,0x01,0x03,0x00,0x06,0x03,0x02,0x0c,0x09,0x08,0x03, +/*002450*/ 0x0b,0x06,0x06,0x07,0x06,0x03,0x05,0x04,0x01,0x01,0x05,0x46,0x76,0x2f,0x37,0x18, +/*002460*/ 0x00,0x3f,0x3c,0x3f,0x3c,0x10,0xfd,0x17,0x3c,0x2f,0x3c,0xfd,0x17,0x3c,0x01,0x2f, +/*002470*/ 0x3c,0xfd,0x17,0x3c,0x2f,0x3c,0xfd,0x17,0x3c,0x00,0x31,0x30,0x01,0x49,0x68,0xb9, +/*002480*/ 0x00,0x05,0x00,0x0e,0x49,0x68,0x61,0xb0,0x40,0x52,0x58,0x38,0x11,0x37,0xb9,0x00, +/*002490*/ 0x0e,0xff,0xc0,0x38,0x59,0x01,0x23,0x15,0x23,0x15,0x23,0x11,0x21,0x15,0x33,0x07, +/*0024a0*/ 0x35,0x23,0x15,0x01,0x8f,0x65,0xc7,0x62,0x01,0x2a,0x64,0x64,0xc6,0x01,0x2d,0x64, +/*0024b0*/ 0xc8,0x02,0x56,0x65,0xc5,0xc6,0xc6,0x00,0x00,0x03,0x00,0x01,0x00,0x01,0x01,0x8f, +/*0024c0*/ 0x02,0x57,0x00,0x09,0x00,0x0f,0x00,0x13,0x00,0x85,0x40,0x42,0x01,0x14,0x14,0x40, +/*0024d0*/ 0x15,0x00,0x11,0x0f,0x0e,0x03,0x10,0x05,0x00,0x13,0x12,0x0d,0x0c,0x06,0x05,0x02, +/*0024e0*/ 0x07,0x01,0x04,0x04,0x03,0x0b,0x0a,0x08,0x03,0x07,0x04,0x09,0x00,0x13,0x03,0x02, +/*0024f0*/ 0x03,0x10,0x06,0x00,0x0c,0x0b,0x09,0x08,0x05,0x05,0x04,0x06,0x06,0x0e,0x0d,0x06, +/*002500*/ 0x12,0x0f,0x0a,0x03,0x11,0x07,0x06,0x03,0x01,0x00,0x01,0x01,0x03,0x46,0x76,0x2f, +/*002510*/ 0x37,0x18,0x00,0x3f,0x3c,0x3f,0x3c,0x2f,0x17,0x3c,0xfd,0x3c,0x10,0xfd,0x17,0x3c, +/*002520*/ 0x10,0xfd,0x17,0x3c,0x01,0x2f,0x3c,0xfd,0x17,0x3c,0x2f,0x3c,0xfd,0x17,0x3c,0x10, +/*002530*/ 0xfd,0x17,0x3c,0x00,0x31,0x30,0x01,0x49,0x68,0xb9,0x00,0x03,0x00,0x14,0x49,0x68, +/*002540*/ 0x61,0xb0,0x40,0x52,0x58,0x38,0x11,0x37,0xb9,0x00,0x14,0xff,0xc0,0x38,0x59,0x25, +/*002550*/ 0x21,0x35,0x23,0x11,0x33,0x35,0x33,0x15,0x33,0x03,0x11,0x23,0x15,0x33,0x15,0x07, +/*002560*/ 0x35,0x23,0x15,0x01,0x8f,0xfe,0xd6,0x64,0x64,0xc6,0x64,0x64,0xc6,0x64,0x02,0x62, +/*002570*/ 0x01,0x65,0x01,0x8d,0x64,0x65,0xfe,0xd7,0x01,0x2a,0xc5,0x65,0x64,0x62,0x62,0x00, +/*002580*/ 0x00,0x02,0x00,0x01,0x00,0x01,0x01,0x8f,0x02,0x57,0x00,0x0d,0x00,0x11,0x00,0x7c, +/*002590*/ 0x40,0x3c,0x01,0x12,0x12,0x40,0x13,0x00,0x11,0x04,0x03,0x03,0x10,0x04,0x06,0x05, +/*0025a0*/ 0x0f,0x0e,0x0c,0x0b,0x08,0x02,0x01,0x07,0x07,0x04,0x0d,0x0a,0x09,0x03,0x00,0x0d, +/*0025b0*/ 0x0c,0x07,0x00,0x11,0x0e,0x0b,0x03,0x0a,0x06,0x03,0x02,0x10,0x09,0x08,0x03,0x0f, +/*0025c0*/ 0x06,0x06,0x07,0x06,0x03,0x05,0x04,0x01,0x03,0x00,0x01,0x01,0x05,0x46,0x76,0x2f, +/*0025d0*/ 0x37,0x18,0x00,0x3f,0x17,0x3c,0x3f,0x3c,0x10,0xfd,0x17,0x3c,0x2f,0x3c,0xfd,0x17, +/*0025e0*/ 0x3c,0x10,0xfd,0x3c,0x01,0x2f,0x17,0x3c,0xfd,0x17,0x3c,0x2f,0x3c,0xfd,0x17,0x3c, +/*0025f0*/ 0x00,0x31,0x30,0x01,0x49,0x68,0xb9,0x00,0x05,0x00,0x12,0x49,0x68,0x61,0xb0,0x40, +/*002600*/ 0x52,0x58,0x38,0x11,0x37,0xb9,0x00,0x12,0xff,0xc0,0x38,0x59,0x25,0x23,0x35,0x23, +/*002610*/ 0x15,0x23,0x11,0x21,0x15,0x33,0x15,0x23,0x15,0x33,0x27,0x35,0x23,0x15,0x01,0x8f, +/*002620*/ 0x62,0xca,0x62,0x01,0x2a,0x64,0x64,0x64,0x64,0xc6,0x01,0xc8,0xc8,0x02,0x56,0x65, +/*002630*/ 0xc5,0x67,0x67,0xc6,0xc6,0x00,0x00,0x01,0x00,0x01,0x00,0x01,0x01,0x8f,0x02,0x57, +/*002640*/ 0x00,0x17,0x00,0xa3,0x40,0x53,0x01,0x18,0x18,0x40,0x19,0x00,0x17,0x10,0x0f,0x03, +/*002650*/ 0x00,0x04,0x05,0x16,0x06,0x05,0x02,0x01,0x05,0x15,0x04,0x07,0x14,0x08,0x07,0x03, +/*002660*/ 0x13,0x04,0x09,0x12,0x0e,0x0d,0x0a,0x09,0x05,0x11,0x04,0x0c,0x0b,0x04,0x03,0x03, +/*002670*/ 0x17,0x16,0x06,0x00,0x05,0x01,0x00,0x03,0x04,0x06,0x02,0x15,0x14,0x06,0x07,0x06, +/*002680*/ 0x09,0x08,0x06,0x13,0x12,0x0b,0x0a,0x06,0x0c,0x11,0x0d,0x0c,0x03,0x10,0x06,0x0e, +/*002690*/ 0x0f,0x0e,0x03,0x03,0x02,0x01,0x01,0x03,0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x3c, +/*0026a0*/ 0x3f,0x3c,0x10,0xfd,0x17,0x3c,0x10,0xfd,0x3c,0x2f,0x3c,0xfd,0x3c,0x2f,0x3c,0xfd, +/*0026b0*/ 0x3c,0x10,0xfd,0x17,0x3c,0x10,0xfd,0x3c,0x01,0x2f,0x17,0x3c,0xfd,0x17,0x3c,0x10, +/*0026c0*/ 0xfd,0x17,0x3c,0x10,0xfd,0x17,0x3c,0x10,0xfd,0x17,0x3c,0x00,0x31,0x30,0x01,0x49, +/*0026d0*/ 0x68,0xb9,0x00,0x03,0x00,0x18,0x49,0x68,0x61,0xb0,0x40,0x52,0x58,0x38,0x11,0x37, +/*0026e0*/ 0xb9,0x00,0x18,0xff,0xc0,0x38,0x59,0x25,0x23,0x15,0x21,0x35,0x21,0x35,0x23,0x35, +/*0026f0*/ 0x23,0x35,0x23,0x35,0x33,0x35,0x21,0x15,0x21,0x15,0x33,0x15,0x33,0x15,0x33,0x01, +/*002700*/ 0x8f,0x65,0xfe,0xd7,0x01,0x2c,0x64,0x64,0x64,0x64,0x01,0x2a,0xfe,0xd4,0x64,0x64, +/*002710*/ 0x64,0x65,0x64,0x62,0x67,0x64,0x64,0x61,0x64,0x62,0x67,0x64,0x64,0x00,0x00,0x01, +/*002720*/ 0x00,0x01,0x00,0x01,0x01,0xf3,0x02,0x57,0x00,0x07,0x00,0x53,0x40,0x1f,0x01,0x08, +/*002730*/ 0x08,0x40,0x09,0x00,0x07,0x06,0x05,0x00,0x02,0x01,0x04,0x04,0x03,0x05,0x04,0x01, +/*002740*/ 0x03,0x00,0x06,0x06,0x07,0x06,0x03,0x03,0x02,0x01,0x01,0x05,0x46,0x76,0x2f,0x37, +/*002750*/ 0x18,0x00,0x3f,0x3c,0x3f,0x3c,0x10,0xfd,0x17,0x3c,0x01,0x2f,0x3c,0xfd,0x3c,0x2e, +/*002760*/ 0x2e,0x2e,0x2e,0x00,0x31,0x30,0x01,0x49,0x68,0xb9,0x00,0x05,0x00,0x08,0x49,0x68, +/*002770*/ 0x61,0xb0,0x40,0x52,0x58,0x38,0x11,0x37,0xb9,0x00,0x08,0xff,0xc0,0x38,0x59,0x01, +/*002780*/ 0x23,0x11,0x23,0x11,0x23,0x35,0x21,0x01,0xf3,0xc8,0x62,0xc8,0x01,0xf2,0x01,0xf5, +/*002790*/ 0xfe,0x0c,0x01,0xf4,0x62,0x00,0x00,0x01,0x00,0x01,0x00,0x01,0x01,0x8f,0x02,0x57, +/*0027a0*/ 0x00,0x0b,0x00,0x67,0x40,0x2c,0x01,0x0c,0x0c,0x40,0x0d,0x00,0x05,0x04,0x02,0x01, +/*0027b0*/ 0x05,0x03,0x08,0x04,0x03,0x03,0x07,0x04,0x06,0x05,0x0a,0x09,0x04,0x0b,0x00,0x09, +/*0027c0*/ 0x01,0x00,0x03,0x08,0x06,0x02,0x0b,0x0a,0x07,0x03,0x06,0x03,0x03,0x02,0x01,0x01, +/*0027d0*/ 0x05,0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x3c,0x3f,0x17,0x3c,0x10,0xfd,0x17,0x3c, +/*0027e0*/ 0x01,0x2f,0x3c,0xfd,0x3c,0x2f,0x3c,0xfd,0x17,0x3c,0x10,0xfd,0x3c,0x00,0x2e,0x2e, +/*0027f0*/ 0x31,0x30,0x01,0x49,0x68,0xb9,0x00,0x05,0x00,0x0c,0x49,0x68,0x61,0xb0,0x40,0x52, +/*002800*/ 0x58,0x38,0x11,0x37,0xb9,0x00,0x0c,0xff,0xc0,0x38,0x59,0x25,0x23,0x15,0x23,0x35, +/*002810*/ 0x23,0x11,0x33,0x11,0x33,0x11,0x33,0x01,0x8f,0x65,0xc5,0x64,0x62,0xca,0x62,0x65, +/*002820*/ 0x64,0x65,0x01,0xf1,0xfe,0x0c,0x01,0xf4,0x00,0x01,0x00,0x01,0x00,0x01,0x01,0x8f, +/*002830*/ 0x02,0x57,0x00,0x0f,0x00,0x79,0x40,0x37,0x01,0x10,0x10,0x40,0x11,0x00,0x04,0x03, +/*002840*/ 0x05,0x07,0x0a,0x09,0x06,0x03,0x05,0x04,0x08,0x07,0x0c,0x0b,0x04,0x02,0x01,0x0e, +/*002850*/ 0x0d,0x04,0x0f,0x00,0x0d,0x01,0x00,0x03,0x0c,0x06,0x02,0x0b,0x03,0x02,0x03,0x0a, +/*002860*/ 0x06,0x05,0x04,0x0f,0x0e,0x09,0x03,0x08,0x03,0x07,0x06,0x01,0x01,0x07,0x46,0x76, +/*002870*/ 0x2f,0x37,0x18,0x00,0x3f,0x3c,0x3f,0x17,0x3c,0x2f,0x3c,0xfd,0x17,0x3c,0x10,0xfd, +/*002880*/ 0x17,0x3c,0x01,0x2f,0x3c,0xfd,0x3c,0x2f,0x3c,0xfd,0x3c,0x2f,0x3c,0xfd,0x17,0x3c, +/*002890*/ 0x10,0xfd,0x3c,0x00,0x31,0x30,0x01,0x49,0x68,0xb9,0x00,0x07,0x00,0x10,0x49,0x68, +/*0028a0*/ 0x61,0xb0,0x40,0x52,0x58,0x38,0x11,0x37,0xb9,0x00,0x10,0xff,0xc0,0x38,0x59,0x01, +/*0028b0*/ 0x23,0x15,0x23,0x15,0x23,0x15,0x23,0x11,0x33,0x11,0x33,0x35,0x33,0x11,0x33,0x01, +/*0028c0*/ 0x8f,0x65,0x64,0x64,0x61,0x62,0x67,0x64,0x61,0x01,0x2d,0x64,0x64,0x64,0x02,0x56, +/*0028d0*/ 0xfe,0x70,0x64,0x01,0x2c,0x00,0x00,0x01,0x00,0x01,0x00,0x01,0x01,0xf3,0x02,0x57, +/*0028e0*/ 0x00,0x13,0x00,0x87,0x40,0x41,0x01,0x14,0x14,0x40,0x15,0x00,0x0f,0x0e,0x09,0x08, +/*0028f0*/ 0x02,0x01,0x04,0x03,0x06,0x05,0x04,0x07,0x0c,0x08,0x07,0x03,0x0b,0x04,0x0a,0x09, +/*002900*/ 0x0e,0x0d,0x04,0x10,0x04,0x03,0x03,0x0f,0x12,0x11,0x04,0x13,0x00,0x11,0x10,0x0d, +/*002910*/ 0x05,0x04,0x01,0x00,0x07,0x0c,0x06,0x02,0x13,0x12,0x0b,0x03,0x0a,0x03,0x07,0x06, +/*002920*/ 0x03,0x03,0x02,0x01,0x01,0x09,0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x17,0x3c,0x3f, +/*002930*/ 0x17,0x3c,0x10,0xfd,0x17,0x3c,0x01,0x2f,0x3c,0xfd,0x3c,0x2f,0x17,0x3c,0xfd,0x3c, +/*002940*/ 0x2f,0x3c,0xfd,0x17,0x3c,0x10,0xfd,0x3c,0x10,0xfd,0x3c,0x00,0x2e,0x2e,0x2e,0x2e, +/*002950*/ 0x31,0x30,0x01,0x49,0x68,0xb9,0x00,0x09,0x00,0x14,0x49,0x68,0x61,0xb0,0x40,0x52, +/*002960*/ 0x58,0x38,0x11,0x37,0xb9,0x00,0x14,0xff,0xc0,0x38,0x59,0x25,0x23,0x15,0x23,0x35, +/*002970*/ 0x23,0x15,0x23,0x35,0x23,0x11,0x33,0x11,0x33,0x11,0x33,0x11,0x33,0x11,0x33,0x01, +/*002980*/ 0xf3,0x65,0x61,0x67,0x61,0x64,0x62,0x67,0x61,0x66,0x62,0x65,0x64,0x64,0x64,0x65, +/*002990*/ 0x01,0xf1,0xfe,0x0c,0x01,0x90,0xfe,0x70,0x01,0xf4,0x00,0x01,0x00,0x01,0x00,0x01, +/*0029a0*/ 0x01,0x8f,0x02,0x57,0x00,0x13,0x00,0x87,0x40,0x44,0x01,0x14,0x14,0x40,0x15,0x00, +/*0029b0*/ 0x12,0x11,0x06,0x02,0x01,0x05,0x05,0x04,0x13,0x04,0x03,0x03,0x00,0x10,0x0f,0x0c, +/*0029c0*/ 0x0b,0x08,0x05,0x07,0x04,0x0e,0x0d,0x0a,0x03,0x09,0x0d,0x0c,0x01,0x03,0x00,0x07, +/*0029d0*/ 0x0e,0x03,0x02,0x07,0x04,0x0b,0x0a,0x07,0x03,0x06,0x07,0x10,0x11,0x10,0x02,0x13, +/*0029e0*/ 0x12,0x0f,0x03,0x0e,0x03,0x09,0x08,0x05,0x03,0x04,0x01,0x01,0x09,0x46,0x76,0x2f, +/*0029f0*/ 0x37,0x18,0x00,0x3f,0x17,0x3c,0x3f,0x17,0x3c,0x3f,0x3c,0x10,0xfd,0x17,0x3c,0x10, +/*002a00*/ 0xfd,0x3c,0x10,0xfd,0x17,0x3c,0x01,0x2f,0x17,0x3c,0xfd,0x17,0x3c,0x2f,0x17,0x3c, +/*002a10*/ 0xfd,0x17,0x3c,0x00,0x31,0x30,0x01,0x49,0x68,0xb9,0x00,0x09,0x00,0x14,0x49,0x68, +/*002a20*/ 0x61,0xb0,0x40,0x52,0x58,0x38,0x11,0x37,0xb9,0x00,0x14,0xff,0xc0,0x38,0x59,0x01, +/*002a30*/ 0x23,0x15,0x33,0x15,0x23,0x35,0x23,0x15,0x23,0x35,0x33,0x35,0x23,0x35,0x33,0x15, +/*002a40*/ 0x33,0x35,0x33,0x01,0x8f,0x64,0x64,0x62,0xca,0x62,0x64,0x64,0x62,0xca,0x62,0x01, +/*002a50*/ 0x91,0xcb,0xc5,0xc8,0xc8,0xc6,0xca,0xc6,0xc8,0xc8,0x00,0x01,0x00,0x01,0x00,0x01, +/*002a60*/ 0x01,0x8f,0x02,0x57,0x00,0x0f,0x00,0x76,0x40,0x36,0x01,0x10,0x10,0x40,0x11,0x00, +/*002a70*/ 0x09,0x08,0x02,0x01,0x05,0x03,0x0e,0x0d,0x06,0x03,0x05,0x04,0x0f,0x00,0x0c,0x08, +/*002a80*/ 0x07,0x04,0x03,0x05,0x0b,0x04,0x0a,0x09,0x05,0x01,0x00,0x03,0x04,0x06,0x02,0x0d, +/*002a90*/ 0x0c,0x06,0x07,0x06,0x0f,0x0e,0x0b,0x03,0x0a,0x03,0x03,0x02,0x01,0x01,0x09,0x46, +/*002aa0*/ 0x76,0x2f,0x37,0x18,0x00,0x3f,0x3c,0x3f,0x17,0x3c,0x2f,0x3c,0xfd,0x3c,0x10,0xfd, +/*002ab0*/ 0x17,0x3c,0x01,0x2f,0x3c,0xfd,0x17,0x3c,0x2f,0x3c,0xfd,0x17,0x3c,0x10,0xfd,0x3c, +/*002ac0*/ 0x00,0x2e,0x2e,0x31,0x30,0x01,0x49,0x68,0xb9,0x00,0x09,0x00,0x10,0x49,0x68,0x61, +/*002ad0*/ 0xb0,0x40,0x52,0x58,0x38,0x11,0x37,0xb9,0x00,0x10,0xff,0xc0,0x38,0x59,0x25,0x23, +/*002ae0*/ 0x15,0x23,0x35,0x33,0x35,0x23,0x35,0x23,0x11,0x33,0x11,0x33,0x11,0x33,0x01,0x8f, +/*002af0*/ 0x65,0xc5,0xc8,0xc8,0x64,0x62,0xca,0x62,0x65,0x64,0x62,0x67,0x64,0x01,0x29,0xfe, +/*002b00*/ 0xd4,0x01,0x2c,0x00,0x00,0x01,0x00,0x01,0x00,0x01,0x01,0x8f,0x02,0x57,0x00,0x13, +/*002b10*/ 0x00,0x8e,0x40,0x43,0x01,0x14,0x14,0x40,0x15,0x00,0x06,0x05,0x04,0x12,0x11,0x0a, +/*002b20*/ 0x03,0x09,0x04,0x03,0x04,0x0c,0x0b,0x0e,0x0d,0x04,0x02,0x01,0x10,0x0f,0x04,0x13, +/*002b30*/ 0x08,0x07,0x03,0x00,0x01,0x00,0x07,0x12,0x0d,0x03,0x02,0x03,0x0c,0x06,0x0b,0x0a, +/*002b40*/ 0x05,0x03,0x04,0x07,0x06,0x06,0x08,0x11,0x10,0x06,0x12,0x13,0x12,0x03,0x0f,0x0e, +/*002b50*/ 0x02,0x09,0x08,0x01,0x01,0x09,0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x3c,0x3f,0x3c, +/*002b60*/ 0x3f,0x3c,0x10,0xfd,0x3c,0x10,0xfd,0x3c,0x2f,0x17,0x3c,0xfd,0x17,0x3c,0x10,0xfd, +/*002b70*/ 0x3c,0x01,0x2f,0x17,0x3c,0xfd,0x3c,0x2f,0x3c,0xfd,0x3c,0x2f,0x3c,0xfd,0x3c,0x2f, +/*002b80*/ 0x17,0x3c,0xfd,0x3c,0x00,0x31,0x30,0x01,0x49,0x68,0xb9,0x00,0x09,0x00,0x14,0x49, +/*002b90*/ 0x68,0x61,0xb0,0x40,0x52,0x58,0x38,0x11,0x37,0xb9,0x00,0x14,0xff,0xc0,0x38,0x59, +/*002ba0*/ 0x01,0x23,0x15,0x23,0x15,0x23,0x15,0x21,0x15,0x21,0x35,0x33,0x35,0x33,0x35,0x33, +/*002bb0*/ 0x35,0x21,0x35,0x21,0x01,0x8f,0x65,0x64,0x63,0x01,0x2c,0xfe,0x72,0x65,0x64,0x63, +/*002bc0*/ 0xfe,0xd4,0x01,0x8e,0x01,0x91,0x64,0x64,0x67,0x61,0xc6,0x64,0x64,0x66,0x62,0x00, +/*002bd0*/ 0x00,0x01,0x00,0x01,0x00,0x01,0x00,0xc7,0x02,0x57,0x00,0x07,0x00,0x59,0x40,0x23, +/*002be0*/ 0x01,0x08,0x08,0x40,0x09,0x00,0x07,0x04,0x03,0x03,0x00,0x05,0x01,0x06,0x05,0x04, +/*002bf0*/ 0x02,0x01,0x07,0x06,0x06,0x00,0x05,0x04,0x06,0x02,0x03,0x02,0x03,0x01,0x00,0x01, +/*002c00*/ 0x01,0x01,0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x3c,0x3f,0x3c,0x10,0xfd,0x3c,0x10, +/*002c10*/ 0xfd,0x3c,0x01,0x2f,0x3c,0xfd,0x3c,0x10,0xfd,0x17,0x3c,0x00,0x31,0x30,0x01,0x49, +/*002c20*/ 0x68,0xb9,0x00,0x01,0x00,0x08,0x49,0x68,0x61,0xb0,0x40,0x52,0x58,0x38,0x11,0x37, +/*002c30*/ 0xb9,0x00,0x08,0xff,0xc0,0x38,0x59,0x37,0x23,0x11,0x33,0x15,0x23,0x11,0x33,0xc7, +/*002c40*/ 0xc6,0xc6,0x64,0x64,0x01,0x02,0x56,0x62,0xfe,0x6d,0x00,0x01,0x00,0x01,0x00,0x01, +/*002c50*/ 0x01,0x2b,0x02,0x57,0x00,0x0b,0x00,0x6d,0x40,0x2f,0x01,0x0c,0x0c,0x40,0x0d,0x00, +/*002c60*/ 0x0b,0x00,0x04,0x01,0x0a,0x02,0x01,0x03,0x09,0x04,0x03,0x08,0x04,0x03,0x03,0x07, +/*002c70*/ 0x04,0x06,0x05,0x0b,0x0a,0x07,0x00,0x03,0x02,0x07,0x09,0x08,0x05,0x04,0x07,0x06, +/*002c80*/ 0x07,0x06,0x03,0x01,0x00,0x01,0x01,0x05,0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x3c, +/*002c90*/ 0x3f,0x3c,0x10,0xfd,0x3c,0x2f,0x3c,0xfd,0x3c,0x10,0xfd,0x3c,0x01,0x2f,0x3c,0xfd, +/*002ca0*/ 0x17,0x3c,0x10,0xfd,0x17,0x3c,0x10,0xfd,0x3c,0x00,0x31,0x30,0x01,0x49,0x68,0xb9, +/*002cb0*/ 0x00,0x05,0x00,0x0c,0x49,0x68,0x61,0xb0,0x40,0x52,0x58,0x38,0x11,0x37,0xb9,0x00, +/*002cc0*/ 0x0c,0xff,0xc0,0x38,0x59,0x25,0x23,0x35,0x23,0x35,0x23,0x35,0x33,0x15,0x33,0x15, +/*002cd0*/ 0x33,0x01,0x2b,0x62,0x64,0x64,0x62,0x64,0x64,0x01,0xc9,0xc7,0xc6,0xc9,0xc8,0x00, +/*002ce0*/ 0x00,0x01,0x00,0x01,0x00,0x01,0x00,0xc7,0x02,0x57,0x00,0x07,0x00,0x59,0x40,0x23, +/*002cf0*/ 0x01,0x08,0x08,0x40,0x09,0x00,0x06,0x05,0x02,0x03,0x01,0x05,0x00,0x04,0x03,0x04, +/*002d00*/ 0x07,0x00,0x03,0x02,0x06,0x00,0x05,0x04,0x06,0x06,0x07,0x06,0x03,0x01,0x00,0x01, +/*002d10*/ 0x01,0x01,0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x3c,0x3f,0x3c,0x10,0xfd,0x3c,0x10, +/*002d20*/ 0xfd,0x3c,0x01,0x2f,0x3c,0xfd,0x3c,0x10,0xfd,0x17,0x3c,0x00,0x31,0x30,0x01,0x49, +/*002d30*/ 0x68,0xb9,0x00,0x01,0x00,0x08,0x49,0x68,0x61,0xb0,0x40,0x52,0x58,0x38,0x11,0x37, +/*002d40*/ 0xb9,0x00,0x08,0xff,0xc0,0x38,0x59,0x37,0x23,0x35,0x33,0x11,0x23,0x35,0x33,0xc7, +/*002d50*/ 0xc6,0x64,0x64,0xc6,0x01,0x62,0x01,0x92,0x62,0x00,0x00,0x01,0x00,0x01,0x01,0x91, +/*002d60*/ 0x01,0x2b,0x02,0x57,0x00,0x0b,0x00,0x69,0x40,0x2d,0x01,0x0c,0x0c,0x40,0x0d,0x00, +/*002d70*/ 0x0b,0x00,0x04,0x01,0x04,0x03,0x04,0x06,0x05,0x08,0x07,0x04,0x0a,0x02,0x01,0x03, +/*002d80*/ 0x09,0x0b,0x0a,0x06,0x00,0x07,0x06,0x03,0x03,0x02,0x06,0x08,0x05,0x04,0x01,0x03, +/*002d90*/ 0x00,0x09,0x08,0x03,0x01,0x05,0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x3c,0x2f,0x17, +/*002da0*/ 0x3c,0x10,0xfd,0x17,0x3c,0x10,0xfd,0x3c,0x01,0x2f,0x17,0x3c,0xfd,0x3c,0x2f,0x3c, +/*002db0*/ 0xfd,0x3c,0x10,0xfd,0x3c,0x00,0x31,0x30,0x01,0x49,0x68,0xb9,0x00,0x05,0x00,0x0c, +/*002dc0*/ 0x49,0x68,0x61,0xb0,0x40,0x52,0x58,0x38,0x11,0x37,0xb9,0x00,0x0c,0xff,0xc0,0x38, +/*002dd0*/ 0x59,0x01,0x23,0x35,0x23,0x15,0x23,0x35,0x33,0x35,0x33,0x15,0x33,0x01,0x2b,0x62, +/*002de0*/ 0x67,0x61,0x64,0x62,0x64,0x01,0x91,0x64,0x64,0x62,0x64,0x65,0x00,0x01,0x00,0x01, +/*002df0*/ 0x00,0x01,0x01,0x8f,0x00,0x63,0x00,0x03,0x00,0x3e,0x40,0x12,0x01,0x04,0x04,0x40, +/*002e00*/ 0x05,0x00,0x03,0x02,0x01,0x00,0x03,0x02,0x01,0x00,0x01,0x01,0x01,0x46,0x76,0x2f, +/*002e10*/ 0x37,0x18,0x00,0x3f,0x3c,0x2f,0x3c,0x01,0x2e,0x2e,0x2e,0x2e,0x00,0x31,0x30,0x01, +/*002e20*/ 0x49,0x68,0xb9,0x00,0x01,0x00,0x04,0x49,0x68,0x61,0xb0,0x40,0x52,0x58,0x38,0x11, +/*002e30*/ 0x37,0xb9,0x00,0x04,0xff,0xc0,0x38,0x59,0x25,0x21,0x35,0x21,0x01,0x8f,0xfe,0x72, +/*002e40*/ 0x01,0x8e,0x01,0x62,0x00,0x02,0x00,0x01,0x00,0x01,0x01,0x8f,0x01,0x8f,0x00,0x07, +/*002e50*/ 0x00,0x0b,0x00,0x65,0x40,0x2c,0x01,0x0c,0x0c,0x40,0x0d,0x00,0x0b,0x0a,0x06,0x05, +/*002e60*/ 0x02,0x05,0x01,0x04,0x04,0x03,0x09,0x08,0x04,0x07,0x00,0x0b,0x03,0x02,0x03,0x08, +/*002e70*/ 0x06,0x00,0x0a,0x09,0x05,0x03,0x04,0x06,0x06,0x07,0x06,0x02,0x01,0x00,0x01,0x01, +/*002e80*/ 0x03,0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x3c,0x3f,0x3c,0x10,0xfd,0x17,0x3c,0x10, +/*002e90*/ 0xfd,0x17,0x3c,0x01,0x2f,0x3c,0xfd,0x3c,0x2f,0x3c,0xfd,0x17,0x3c,0x00,0x31,0x30, +/*002ea0*/ 0x01,0x49,0x68,0xb9,0x00,0x03,0x00,0x0c,0x49,0x68,0x61,0xb0,0x40,0x52,0x58,0x38, +/*002eb0*/ 0x11,0x37,0xb9,0x00,0x0c,0xff,0xc0,0x38,0x59,0x25,0x21,0x35,0x23,0x35,0x33,0x35, +/*002ec0*/ 0x21,0x03,0x35,0x23,0x15,0x01,0x8f,0xfe,0xd6,0x64,0x64,0x01,0x2a,0x64,0xc6,0x01, +/*002ed0*/ 0x65,0xc5,0x64,0xfe,0xd6,0xc6,0xc6,0x00,0x00,0x02,0x00,0x01,0x00,0x01,0x01,0x8f, +/*002ee0*/ 0x02,0x57,0x00,0x09,0x00,0x0d,0x00,0x6e,0x40,0x32,0x01,0x0e,0x0e,0x40,0x0f,0x00, +/*002ef0*/ 0x0d,0x06,0x05,0x03,0x0c,0x04,0x04,0x03,0x0b,0x0a,0x08,0x02,0x01,0x05,0x07,0x04, +/*002f00*/ 0x09,0x00,0x0d,0x0a,0x01,0x03,0x00,0x06,0x02,0x0c,0x09,0x08,0x03,0x0b,0x06,0x06, +/*002f10*/ 0x07,0x06,0x02,0x05,0x04,0x03,0x03,0x02,0x01,0x01,0x03,0x46,0x76,0x2f,0x37,0x18, +/*002f20*/ 0x00,0x3f,0x3c,0x3f,0x3c,0x3f,0x3c,0x10,0xfd,0x17,0x3c,0x10,0xfd,0x17,0x3c,0x01, +/*002f30*/ 0x2f,0x3c,0xfd,0x17,0x3c,0x2f,0x3c,0xfd,0x17,0x3c,0x00,0x31,0x30,0x01,0x49,0x68, +/*002f40*/ 0xb9,0x00,0x03,0x00,0x0e,0x49,0x68,0x61,0xb0,0x40,0x52,0x58,0x38,0x11,0x37,0xb9, +/*002f50*/ 0x00,0x0e,0xff,0xc0,0x38,0x59,0x25,0x23,0x15,0x21,0x11,0x33,0x15,0x33,0x15,0x33, +/*002f60*/ 0x07,0x35,0x23,0x15,0x01,0x8f,0x65,0xfe,0xd7,0x62,0xc8,0x64,0x64,0xc6,0x65,0x64, +/*002f70*/ 0x02,0x56,0xc8,0x65,0xc5,0xc6,0xc6,0x00,0x00,0x01,0x00,0x01,0x00,0x01,0x01,0x8f, +/*002f80*/ 0x01,0x8f,0x00,0x0b,0x00,0x67,0x40,0x2c,0x01,0x0c,0x0c,0x40,0x0d,0x00,0x0b,0x04, +/*002f90*/ 0x03,0x00,0x0a,0x09,0x06,0x05,0x02,0x05,0x01,0x04,0x08,0x07,0x07,0x06,0x07,0x08, +/*002fa0*/ 0x09,0x08,0x01,0x03,0x00,0x06,0x0a,0x03,0x02,0x06,0x04,0x0b,0x0a,0x02,0x05,0x04, +/*002fb0*/ 0x01,0x01,0x07,0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x3c,0x3f,0x3c,0x10,0xfd,0x3c, +/*002fc0*/ 0x10,0xfd,0x17,0x3c,0x10,0xfd,0x3c,0x01,0x2f,0x3c,0xfd,0x17,0x3c,0x2e,0x2e,0x2e, +/*002fd0*/ 0x2e,0x00,0x31,0x30,0x01,0x49,0x68,0xb9,0x00,0x07,0x00,0x0c,0x49,0x68,0x61,0xb0, +/*002fe0*/ 0x40,0x52,0x58,0x38,0x11,0x37,0xb9,0x00,0x0c,0xff,0xc0,0x38,0x59,0x01,0x21,0x15, +/*002ff0*/ 0x21,0x15,0x21,0x35,0x23,0x35,0x33,0x35,0x21,0x01,0x8f,0xfe,0xd4,0x01,0x2c,0xfe, +/*003000*/ 0xd6,0x64,0x64,0x01,0x2a,0x01,0x2d,0xca,0x62,0x65,0xc5,0x64,0x00,0x02,0x00,0x01, +/*003010*/ 0x00,0x01,0x01,0x8f,0x02,0x57,0x00,0x09,0x00,0x0d,0x00,0x6e,0x40,0x32,0x01,0x0e, +/*003020*/ 0x0e,0x40,0x0f,0x00,0x0d,0x0c,0x06,0x05,0x02,0x05,0x01,0x04,0x04,0x03,0x0b,0x08, +/*003030*/ 0x07,0x03,0x0a,0x04,0x09,0x00,0x0d,0x03,0x02,0x03,0x0a,0x06,0x00,0x0c,0x0b,0x05, +/*003040*/ 0x03,0x04,0x06,0x06,0x09,0x08,0x03,0x07,0x06,0x02,0x01,0x00,0x01,0x01,0x03,0x46, +/*003050*/ 0x76,0x2f,0x37,0x18,0x00,0x3f,0x3c,0x3f,0x3c,0x3f,0x3c,0x10,0xfd,0x17,0x3c,0x10, +/*003060*/ 0xfd,0x17,0x3c,0x01,0x2f,0x3c,0xfd,0x17,0x3c,0x2f,0x3c,0xfd,0x17,0x3c,0x00,0x31, +/*003070*/ 0x30,0x01,0x49,0x68,0xb9,0x00,0x03,0x00,0x0e,0x49,0x68,0x61,0xb0,0x40,0x52,0x58, +/*003080*/ 0x38,0x11,0x37,0xb9,0x00,0x0e,0xff,0xc0,0x38,0x59,0x25,0x21,0x35,0x23,0x35,0x33, +/*003090*/ 0x35,0x33,0x35,0x33,0x03,0x35,0x23,0x15,0x01,0x8f,0xfe,0xd6,0x64,0x65,0xc7,0x62, +/*0030a0*/ 0x64,0xc6,0x01,0x65,0xc5,0x64,0xc8,0xfe,0x0e,0xc6,0xc6,0x00,0x00,0x02,0x00,0x01, +/*0030b0*/ 0x00,0x01,0x01,0x8f,0x01,0x8f,0x00,0x0d,0x00,0x11,0x00,0x89,0x40,0x43,0x01,0x12, +/*0030c0*/ 0x12,0x40,0x13,0x00,0x0c,0x0b,0x05,0x05,0x0d,0x04,0x03,0x03,0x00,0x05,0x01,0x0f, +/*0030d0*/ 0x0e,0x02,0x03,0x01,0x04,0x05,0x11,0x10,0x0a,0x09,0x06,0x05,0x05,0x04,0x08,0x07, +/*0030e0*/ 0x07,0x06,0x07,0x08,0x11,0x0e,0x01,0x03,0x00,0x06,0x0c,0x03,0x02,0x06,0x04,0x10, +/*0030f0*/ 0x0f,0x0d,0x0c,0x09,0x05,0x08,0x06,0x0a,0x0b,0x0a,0x02,0x05,0x04,0x01,0x01,0x07, +/*003100*/ 0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x3c,0x3f,0x3c,0x10,0xfd,0x17,0x3c,0x10,0xfd, +/*003110*/ 0x3c,0x10,0xfd,0x17,0x3c,0x10,0xfd,0x3c,0x01,0x2f,0x3c,0xfd,0x17,0x3c,0x10,0xfd, +/*003120*/ 0x17,0x3c,0x10,0xfd,0x17,0x3c,0x10,0xfd,0x3c,0x00,0x31,0x30,0x01,0x49,0x68,0xb9, +/*003130*/ 0x00,0x07,0x00,0x12,0x49,0x68,0x61,0xb0,0x40,0x52,0x58,0x38,0x11,0x37,0xb9,0x00, +/*003140*/ 0x12,0xff,0xc0,0x38,0x59,0x25,0x23,0x15,0x33,0x15,0x21,0x35,0x23,0x35,0x33,0x35, +/*003150*/ 0x33,0x15,0x33,0x07,0x35,0x23,0x15,0x01,0x8f,0xc8,0xc8,0xfe,0xd6,0x64,0x64,0xc6, +/*003160*/ 0x64,0xc8,0x62,0xc9,0x67,0x61,0x65,0xc5,0x64,0x65,0x61,0x62,0x62,0x00,0x00,0x01, +/*003170*/ 0x00,0x01,0x00,0x01,0x01,0x2b,0x02,0x57,0x00,0x0b,0x00,0x68,0x40,0x2d,0x01,0x0c, +/*003180*/ 0x0c,0x40,0x0d,0x00,0x04,0x03,0x05,0x07,0x0b,0x00,0x05,0x09,0x0a,0x09,0x06,0x05, +/*003190*/ 0x02,0x05,0x01,0x04,0x08,0x07,0x09,0x08,0x01,0x03,0x00,0x06,0x0a,0x05,0x04,0x06, +/*0031a0*/ 0x03,0x02,0x0b,0x0a,0x03,0x07,0x06,0x01,0x01,0x07,0x46,0x76,0x2f,0x37,0x18,0x00, +/*0031b0*/ 0x3f,0x3c,0x3f,0x3c,0x2f,0x3c,0xfd,0x3c,0x10,0xfd,0x17,0x3c,0x01,0x2f,0x3c,0xfd, +/*0031c0*/ 0x17,0x3c,0x10,0xfd,0x3c,0x10,0xfd,0x3c,0x00,0x31,0x30,0x01,0x49,0x68,0xb9,0x00, +/*0031d0*/ 0x07,0x00,0x0c,0x49,0x68,0x61,0xb0,0x40,0x52,0x58,0x38,0x11,0x37,0xb9,0x00,0x0c, +/*0031e0*/ 0xff,0xc0,0x38,0x59,0x01,0x23,0x15,0x33,0x15,0x23,0x11,0x23,0x11,0x33,0x35,0x33, +/*0031f0*/ 0x01,0x2b,0xc8,0x64,0x65,0x61,0x64,0xc6,0x01,0xf5,0x67,0x61,0xfe,0xd4,0x01,0xf2, +/*003200*/ 0x64,0x00,0x00,0x02,0x00,0x01,0xff,0x39,0x01,0x8f,0x01,0x8f,0x00,0x0d,0x00,0x11, +/*003210*/ 0x00,0x7a,0x40,0x3b,0x01,0x12,0x12,0x40,0x13,0x00,0x11,0x10,0x0c,0x0b,0x08,0x07, +/*003220*/ 0x04,0x07,0x03,0x04,0x0a,0x09,0x0f,0x06,0x05,0x02,0x01,0x05,0x0e,0x04,0x0d,0x00, +/*003230*/ 0x05,0x01,0x00,0x03,0x04,0x06,0x02,0x11,0x09,0x08,0x03,0x0e,0x06,0x07,0x06,0x10, +/*003240*/ 0x0f,0x0b,0x03,0x0a,0x06,0x0c,0x0d,0x0c,0x02,0x03,0x02,0x00,0x01,0x09,0x46,0x76, +/*003250*/ 0x2f,0x37,0x18,0x00,0x3f,0x3c,0x3f,0x3c,0x10,0xfd,0x17,0x3c,0x2f,0x3c,0xfd,0x17, +/*003260*/ 0x3c,0x10,0xfd,0x17,0x3c,0x01,0x2f,0x3c,0xfd,0x17,0x3c,0x2f,0x3c,0xfd,0x17,0x3c, +/*003270*/ 0x00,0x31,0x30,0x01,0x49,0x68,0xb9,0x00,0x09,0x00,0x12,0x49,0x68,0x61,0xb0,0x40, +/*003280*/ 0x52,0x58,0x38,0x11,0x37,0xb9,0x00,0x12,0xff,0xc0,0x38,0x59,0x05,0x23,0x15,0x23, +/*003290*/ 0x35,0x33,0x35,0x23,0x35,0x23,0x35,0x33,0x35,0x21,0x03,0x35,0x23,0x15,0x01,0x8f, +/*0032a0*/ 0x65,0xc5,0xc8,0xc8,0x64,0x64,0x01,0x2a,0x64,0xc6,0x63,0x64,0x62,0x67,0x64,0xc5, +/*0032b0*/ 0x64,0xfe,0xd6,0xc6,0xc6,0x00,0x00,0x01,0x00,0x01,0x00,0x01,0x01,0x8f,0x02,0x57, +/*0032c0*/ 0x00,0x0b,0x00,0x65,0x40,0x2b,0x01,0x0c,0x0c,0x40,0x0d,0x00,0x0b,0x0a,0x0a,0x09, +/*0032d0*/ 0x02,0x03,0x01,0x04,0x0b,0x00,0x08,0x07,0x04,0x03,0x03,0x04,0x06,0x05,0x03,0x02, +/*0032e0*/ 0x06,0x08,0x09,0x08,0x02,0x07,0x06,0x03,0x05,0x04,0x01,0x03,0x00,0x01,0x01,0x05, +/*0032f0*/ 0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x17,0x3c,0x3f,0x3c,0x3f,0x3c,0x10,0xfd,0x3c, +/*003300*/ 0x01,0x2f,0x3c,0xfd,0x17,0x3c,0x2f,0x3c,0xfd,0x17,0x3c,0x00,0x2e,0x2e,0x31,0x30, +/*003310*/ 0x01,0x49,0x68,0xb9,0x00,0x05,0x00,0x0c,0x49,0x68,0x61,0xb0,0x40,0x52,0x58,0x38, +/*003320*/ 0x11,0x37,0xb9,0x00,0x0c,0xff,0xc0,0x38,0x59,0x25,0x23,0x11,0x23,0x11,0x23,0x11, +/*003330*/ 0x33,0x15,0x33,0x15,0x33,0x01,0x8f,0x62,0xca,0x62,0x62,0xc8,0x64,0x01,0x01,0x2c, +/*003340*/ 0xfe,0xd4,0x02,0x56,0xc8,0x65,0x00,0x02,0x00,0x01,0x00,0x01,0x00,0x63,0x02,0x57, +/*003350*/ 0x00,0x03,0x00,0x07,0x00,0x54,0x40,0x21,0x01,0x08,0x08,0x40,0x09,0x00,0x07,0x04, +/*003360*/ 0x03,0x03,0x00,0x04,0x06,0x05,0x02,0x03,0x01,0x01,0x00,0x06,0x02,0x07,0x06,0x02, +/*003370*/ 0x05,0x04,0x01,0x03,0x02,0x03,0x01,0x01,0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x3c, +/*003380*/ 0x3f,0x3c,0x3f,0x3c,0x10,0xfd,0x3c,0x01,0x2f,0x17,0x3c,0xfd,0x17,0x3c,0x00,0x31, +/*003390*/ 0x30,0x01,0x49,0x68,0xb9,0x00,0x01,0x00,0x08,0x49,0x68,0x61,0xb0,0x40,0x52,0x58, +/*0033a0*/ 0x38,0x11,0x37,0xb9,0x00,0x08,0xff,0xc0,0x38,0x59,0x13,0x23,0x35,0x33,0x11,0x23, +/*0033b0*/ 0x11,0x33,0x63,0x62,0x62,0x62,0x62,0x01,0xf5,0x62,0xfd,0xaa,0x01,0x8e,0x00,0x02, +/*0033c0*/ 0x00,0x01,0xff,0x39,0x00,0xc7,0x02,0x57,0x00,0x03,0x00,0x0b,0x00,0x68,0x40,0x2d, +/*0033d0*/ 0x01,0x0c,0x0c,0x40,0x0d,0x00,0x0a,0x09,0x02,0x03,0x01,0x04,0x0b,0x04,0x03,0x03, +/*0033e0*/ 0x00,0x06,0x05,0x04,0x08,0x07,0x01,0x00,0x06,0x02,0x09,0x05,0x04,0x03,0x08,0x06, +/*0033f0*/ 0x06,0x0b,0x0a,0x02,0x07,0x06,0x00,0x03,0x02,0x03,0x01,0x07,0x46,0x76,0x2f,0x37, +/*003400*/ 0x18,0x00,0x3f,0x3c,0x3f,0x3c,0x3f,0x3c,0x10,0xfd,0x17,0x3c,0x10,0xfd,0x3c,0x01, +/*003410*/ 0x2f,0x3c,0xfd,0x3c,0x2f,0x17,0x3c,0xfd,0x17,0x3c,0x00,0x31,0x30,0x01,0x49,0x68, +/*003420*/ 0xb9,0x00,0x07,0x00,0x0c,0x49,0x68,0x61,0xb0,0x40,0x52,0x58,0x38,0x11,0x37,0xb9, +/*003430*/ 0x00,0x0c,0xff,0xc0,0x38,0x59,0x13,0x23,0x35,0x33,0x11,0x23,0x15,0x23,0x35,0x33, +/*003440*/ 0x11,0x33,0xc7,0x62,0x62,0x65,0x61,0x64,0x62,0x01,0xf5,0x62,0xfd,0x46,0x64,0x62, +/*003450*/ 0x01,0xf4,0x00,0x01,0x00,0x01,0x00,0x01,0x01,0x8f,0x02,0x57,0x00,0x0f,0x00,0x79, +/*003460*/ 0x40,0x39,0x01,0x10,0x10,0x40,0x11,0x00,0x0e,0x0d,0x0a,0x09,0x02,0x05,0x01,0x04, +/*003470*/ 0x0f,0x0c,0x0b,0x03,0x00,0x08,0x07,0x04,0x03,0x03,0x04,0x06,0x05,0x0f,0x0e,0x07, +/*003480*/ 0x00,0x03,0x02,0x06,0x08,0x0d,0x09,0x08,0x03,0x0c,0x06,0x0a,0x0b,0x0a,0x02,0x07, +/*003490*/ 0x06,0x03,0x05,0x04,0x01,0x03,0x00,0x01,0x01,0x05,0x46,0x76,0x2f,0x37,0x18,0x00, +/*0034a0*/ 0x3f,0x17,0x3c,0x3f,0x3c,0x3f,0x3c,0x10,0xfd,0x17,0x3c,0x10,0xfd,0x3c,0x10,0xfd, +/*0034b0*/ 0x3c,0x01,0x2f,0x3c,0xfd,0x17,0x3c,0x2f,0x17,0x3c,0xfd,0x17,0x3c,0x00,0x31,0x30, +/*0034c0*/ 0x01,0x49,0x68,0xb9,0x00,0x05,0x00,0x10,0x49,0x68,0x61,0xb0,0x40,0x52,0x58,0x38, +/*0034d0*/ 0x11,0x37,0xb9,0x00,0x10,0xff,0xc0,0x38,0x59,0x25,0x23,0x35,0x23,0x15,0x23,0x11, +/*0034e0*/ 0x33,0x11,0x33,0x35,0x33,0x15,0x23,0x15,0x33,0x01,0x8f,0x62,0xca,0x62,0x62,0xcb, +/*0034f0*/ 0x61,0x64,0x64,0x01,0xc8,0xc8,0x02,0x56,0xfe,0xd4,0x64,0x62,0x67,0x00,0x00,0x01, +/*003500*/ 0x00,0x01,0x00,0x01,0x00,0x63,0x02,0x57,0x00,0x03,0x00,0x40,0x40,0x14,0x01,0x04, +/*003510*/ 0x04,0x40,0x05,0x00,0x02,0x01,0x04,0x03,0x00,0x03,0x02,0x03,0x01,0x00,0x01,0x01, +/*003520*/ 0x01,0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x3c,0x3f,0x3c,0x01,0x2f,0x3c,0xfd,0x3c, +/*003530*/ 0x00,0x31,0x30,0x01,0x49,0x68,0xb9,0x00,0x01,0x00,0x04,0x49,0x68,0x61,0xb0,0x40, +/*003540*/ 0x52,0x58,0x38,0x11,0x37,0xb9,0x00,0x04,0xff,0xc0,0x38,0x59,0x37,0x23,0x11,0x33, +/*003550*/ 0x63,0x62,0x62,0x01,0x02,0x56,0x00,0x01,0x00,0x01,0x00,0x01,0x01,0xf3,0x01,0x8f, +/*003560*/ 0x00,0x0d,0x00,0x6b,0x40,0x2f,0x01,0x0e,0x0e,0x40,0x0f,0x00,0x0d,0x0c,0x0c,0x0b, +/*003570*/ 0x02,0x03,0x01,0x04,0x0d,0x00,0x04,0x03,0x04,0x06,0x05,0x08,0x07,0x04,0x0a,0x09, +/*003580*/ 0x07,0x06,0x03,0x03,0x02,0x06,0x0a,0x0b,0x0a,0x02,0x09,0x08,0x05,0x04,0x01,0x05, +/*003590*/ 0x00,0x01,0x01,0x09,0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x17,0x3c,0x3f,0x3c,0x10, +/*0035a0*/ 0xfd,0x17,0x3c,0x01,0x2f,0x3c,0xfd,0x3c,0x2f,0x3c,0xfd,0x3c,0x2f,0x3c,0xfd,0x17, +/*0035b0*/ 0x3c,0x00,0x2e,0x2e,0x31,0x30,0x01,0x49,0x68,0xb9,0x00,0x09,0x00,0x0e,0x49,0x68, +/*0035c0*/ 0x61,0xb0,0x40,0x52,0x58,0x38,0x11,0x37,0xb9,0x00,0x0e,0xff,0xc0,0x38,0x59,0x25, +/*0035d0*/ 0x23,0x11,0x23,0x11,0x23,0x11,0x23,0x11,0x23,0x11,0x21,0x15,0x33,0x01,0xf3,0x62, +/*0035e0*/ 0x67,0x61,0x67,0x61,0x01,0x8e,0x64,0x01,0x01,0x2c,0xfe,0xd4,0x01,0x2c,0xfe,0xd4, +/*0035f0*/ 0x01,0x8e,0x65,0x00,0x00,0x01,0x00,0x01,0x00,0x01,0x01,0x8f,0x01,0x8f,0x00,0x09, +/*003600*/ 0x00,0x5c,0x40,0x25,0x01,0x0a,0x0a,0x40,0x0b,0x00,0x09,0x08,0x08,0x07,0x02,0x03, +/*003610*/ 0x01,0x04,0x09,0x00,0x04,0x03,0x04,0x06,0x05,0x03,0x02,0x06,0x06,0x07,0x06,0x02, +/*003620*/ 0x05,0x04,0x01,0x03,0x00,0x01,0x01,0x05,0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x17, +/*003630*/ 0x3c,0x3f,0x3c,0x10,0xfd,0x3c,0x01,0x2f,0x3c,0xfd,0x3c,0x2f,0x3c,0xfd,0x17,0x3c, +/*003640*/ 0x00,0x2e,0x2e,0x31,0x30,0x01,0x49,0x68,0xb9,0x00,0x05,0x00,0x0a,0x49,0x68,0x61, +/*003650*/ 0xb0,0x40,0x52,0x58,0x38,0x11,0x37,0xb9,0x00,0x0a,0xff,0xc0,0x38,0x59,0x25,0x23, +/*003660*/ 0x11,0x23,0x11,0x23,0x11,0x21,0x15,0x33,0x01,0x8f,0x62,0xca,0x62,0x01,0x2a,0x64, +/*003670*/ 0x01,0x01,0x2c,0xfe,0xd4,0x01,0x8e,0x65,0x00,0x02,0x00,0x01,0x00,0x01,0x01,0x8f, +/*003680*/ 0x01,0x8f,0x00,0x0b,0x00,0x0f,0x00,0x6f,0x40,0x35,0x01,0x10,0x10,0x40,0x11,0x00, +/*003690*/ 0x0f,0x0e,0x08,0x07,0x04,0x05,0x03,0x04,0x06,0x05,0x0d,0x0c,0x0a,0x02,0x01,0x05, +/*0036a0*/ 0x09,0x04,0x0b,0x00,0x0f,0x0c,0x05,0x04,0x01,0x05,0x00,0x06,0x02,0x0e,0x0d,0x0b, +/*0036b0*/ 0x0a,0x07,0x05,0x06,0x06,0x08,0x09,0x08,0x02,0x03,0x02,0x01,0x01,0x05,0x46,0x76, +/*0036c0*/ 0x2f,0x37,0x18,0x00,0x3f,0x3c,0x3f,0x3c,0x10,0xfd,0x17,0x3c,0x10,0xfd,0x17,0x3c, +/*0036d0*/ 0x01,0x2f,0x3c,0xfd,0x17,0x3c,0x2f,0x3c,0xfd,0x17,0x3c,0x00,0x31,0x30,0x01,0x49, +/*0036e0*/ 0x68,0xb9,0x00,0x05,0x00,0x10,0x49,0x68,0x61,0xb0,0x40,0x52,0x58,0x38,0x11,0x37, +/*0036f0*/ 0xb9,0x00,0x10,0xff,0xc0,0x38,0x59,0x25,0x23,0x15,0x23,0x35,0x23,0x35,0x33,0x35, +/*003700*/ 0x33,0x15,0x33,0x07,0x35,0x23,0x15,0x01,0x8f,0x65,0xc5,0x64,0x64,0xc6,0x64,0x64, +/*003710*/ 0xc6,0x65,0x64,0x65,0xc5,0x64,0x65,0xc5,0xc6,0xc6,0x00,0x02,0x00,0x01,0xff,0x39, +/*003720*/ 0x01,0x8f,0x01,0x8f,0x00,0x09,0x00,0x0d,0x00,0x6e,0x40,0x32,0x01,0x0e,0x0e,0x40, +/*003730*/ 0x0f,0x00,0x0d,0x04,0x03,0x03,0x0c,0x04,0x06,0x05,0x0b,0x0a,0x08,0x02,0x01,0x05, +/*003740*/ 0x07,0x04,0x09,0x00,0x0d,0x0a,0x01,0x03,0x00,0x06,0x02,0x0c,0x09,0x08,0x03,0x0b, +/*003750*/ 0x06,0x06,0x07,0x06,0x02,0x05,0x04,0x00,0x03,0x02,0x01,0x01,0x05,0x46,0x76,0x2f, +/*003760*/ 0x37,0x18,0x00,0x3f,0x3c,0x3f,0x3c,0x3f,0x3c,0x10,0xfd,0x17,0x3c,0x10,0xfd,0x17, +/*003770*/ 0x3c,0x01,0x2f,0x3c,0xfd,0x17,0x3c,0x2f,0x3c,0xfd,0x17,0x3c,0x00,0x31,0x30,0x01, +/*003780*/ 0x49,0x68,0xb9,0x00,0x05,0x00,0x0e,0x49,0x68,0x61,0xb0,0x40,0x52,0x58,0x38,0x11, +/*003790*/ 0x37,0xb9,0x00,0x0e,0xff,0xc0,0x38,0x59,0x25,0x23,0x15,0x23,0x15,0x23,0x11,0x21, +/*0037a0*/ 0x15,0x33,0x07,0x35,0x23,0x15,0x01,0x8f,0x65,0xc7,0x62,0x01,0x2a,0x64,0x64,0xc6, +/*0037b0*/ 0x65,0x64,0xc8,0x02,0x56,0x65,0xc5,0xc6,0xc6,0x00,0x00,0x02,0x00,0x01,0xff,0x39, +/*0037c0*/ 0x01,0x8f,0x01,0x8f,0x00,0x09,0x00,0x0d,0x00,0x6e,0x40,0x32,0x01,0x0e,0x0e,0x40, +/*0037d0*/ 0x0f,0x00,0x0d,0x0c,0x08,0x07,0x04,0x05,0x03,0x04,0x06,0x05,0x0b,0x02,0x01,0x03, +/*0037e0*/ 0x0a,0x04,0x09,0x00,0x0d,0x05,0x04,0x03,0x0a,0x06,0x02,0x0c,0x0b,0x07,0x03,0x06, +/*0037f0*/ 0x06,0x08,0x09,0x08,0x02,0x03,0x02,0x01,0x01,0x00,0x00,0x01,0x05,0x46,0x76,0x2f, +/*003800*/ 0x37,0x18,0x00,0x3f,0x3c,0x3f,0x3c,0x3f,0x3c,0x10,0xfd,0x17,0x3c,0x10,0xfd,0x17, +/*003810*/ 0x3c,0x01,0x2f,0x3c,0xfd,0x17,0x3c,0x2f,0x3c,0xfd,0x17,0x3c,0x00,0x31,0x30,0x01, +/*003820*/ 0x49,0x68,0xb9,0x00,0x05,0x00,0x0e,0x49,0x68,0x61,0xb0,0x40,0x52,0x58,0x38,0x11, +/*003830*/ 0x37,0xb9,0x00,0x0e,0xff,0xc0,0x38,0x59,0x05,0x23,0x35,0x23,0x35,0x23,0x35,0x33, +/*003840*/ 0x35,0x21,0x03,0x35,0x23,0x15,0x01,0x8f,0x62,0xc8,0x64,0x64,0x01,0x2a,0x64,0xc6, +/*003850*/ 0xc7,0xc8,0x65,0xc5,0x64,0xfe,0xd6,0xc6,0xc6,0x00,0x00,0x01,0x00,0x01,0x00,0x01, +/*003860*/ 0x01,0x8f,0x01,0x8f,0x00,0x0b,0x00,0x65,0x40,0x2b,0x01,0x0c,0x0c,0x40,0x0d,0x00, +/*003870*/ 0x02,0x01,0x05,0x05,0x0a,0x09,0x05,0x0b,0x00,0x08,0x07,0x04,0x03,0x03,0x04,0x06, +/*003880*/ 0x05,0x03,0x02,0x06,0x09,0x01,0x00,0x03,0x08,0x0b,0x0a,0x07,0x03,0x06,0x02,0x05, +/*003890*/ 0x04,0x01,0x01,0x05,0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x3c,0x3f,0x17,0x3c,0x2f, +/*0038a0*/ 0x17,0x3c,0xfd,0x3c,0x01,0x2f,0x3c,0xfd,0x17,0x3c,0x2f,0x3c,0xfd,0x3c,0x10,0xfd, +/*0038b0*/ 0x3c,0x00,0x31,0x30,0x01,0x49,0x68,0xb9,0x00,0x05,0x00,0x0c,0x49,0x68,0x61,0xb0, +/*0038c0*/ 0x40,0x52,0x58,0x38,0x11,0x37,0xb9,0x00,0x0c,0xff,0xc0,0x38,0x59,0x01,0x23,0x15, +/*0038d0*/ 0x23,0x15,0x23,0x11,0x33,0x15,0x33,0x35,0x33,0x01,0x8f,0xc9,0x64,0x61,0x62,0x67, +/*0038e0*/ 0xc5,0x01,0x2d,0x64,0xc8,0x01,0x8e,0x64,0x64,0x00,0x00,0x01,0x00,0x01,0x00,0x01, +/*0038f0*/ 0x01,0x8f,0x01,0x8f,0x00,0x0f,0x00,0x85,0x40,0x3f,0x01,0x10,0x10,0x40,0x11,0x00, +/*003900*/ 0x0a,0x09,0x08,0x05,0x0f,0x0c,0x0b,0x03,0x00,0x05,0x05,0x08,0x07,0x04,0x03,0x03, +/*003910*/ 0x05,0x0d,0x0e,0x0d,0x06,0x03,0x05,0x04,0x02,0x01,0x0f,0x0e,0x06,0x00,0x05,0x01, +/*003920*/ 0x00,0x03,0x04,0x06,0x02,0x07,0x06,0x06,0x08,0x0d,0x09,0x08,0x03,0x0c,0x06,0x0a, +/*003930*/ 0x0b,0x0a,0x02,0x03,0x02,0x01,0x01,0x03,0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x3c, +/*003940*/ 0x3f,0x3c,0x10,0xfd,0x17,0x3c,0x10,0xfd,0x3c,0x10,0xfd,0x17,0x3c,0x10,0xfd,0x3c, +/*003950*/ 0x01,0x2f,0x3c,0xfd,0x17,0x3c,0x10,0xfd,0x17,0x3c,0x10,0xfd,0x17,0x3c,0x10,0xfd, +/*003960*/ 0x3c,0x00,0x31,0x30,0x01,0x49,0x68,0xb9,0x00,0x03,0x00,0x10,0x49,0x68,0x61,0xb0, +/*003970*/ 0x40,0x52,0x58,0x38,0x11,0x37,0xb9,0x00,0x10,0xff,0xc0,0x38,0x59,0x25,0x23,0x15, +/*003980*/ 0x21,0x35,0x33,0x35,0x23,0x35,0x33,0x35,0x21,0x15,0x23,0x15,0x33,0x01,0x8f,0x65, +/*003990*/ 0xfe,0xd7,0xc8,0xc8,0x64,0x01,0x2a,0xc8,0xc8,0x65,0x64,0x62,0x67,0x61,0x64,0x62, +/*0039a0*/ 0x67,0x00,0x00,0x01,0x00,0x01,0x00,0x01,0x01,0x2b,0x01,0xf3,0x00,0x0b,0x00,0x64, +/*0039b0*/ 0x40,0x2a,0x01,0x0c,0x0c,0x40,0x0d,0x00,0x03,0x02,0x0b,0x08,0x07,0x03,0x00,0x05, +/*0039c0*/ 0x01,0x0a,0x09,0x06,0x02,0x01,0x05,0x05,0x04,0x04,0x03,0x0b,0x0a,0x06,0x00,0x09, +/*0039d0*/ 0x08,0x06,0x07,0x06,0x05,0x04,0x01,0x00,0x01,0x01,0x03,0x46,0x76,0x2f,0x37,0x18, +/*0039e0*/ 0x00,0x3f,0x3c,0x2f,0x3c,0x2f,0x3c,0xfd,0x3c,0x10,0xfd,0x3c,0x01,0x2f,0x3c,0xfd, +/*0039f0*/ 0x17,0x3c,0x10,0xfd,0x17,0x3c,0x00,0x2e,0x2e,0x31,0x30,0x01,0x49,0x68,0xb9,0x00, +/*003a00*/ 0x03,0x00,0x0c,0x49,0x68,0x61,0xb0,0x40,0x52,0x58,0x38,0x11,0x37,0xb9,0x00,0x0c, +/*003a10*/ 0xff,0xc0,0x38,0x59,0x25,0x23,0x35,0x23,0x11,0x33,0x15,0x33,0x15,0x23,0x15,0x33, +/*003a20*/ 0x01,0x2b,0xc6,0x64,0x62,0xc8,0xc8,0xc8,0x01,0x65,0x01,0x8d,0x65,0x61,0xca,0x00, +/*003a30*/ 0x00,0x01,0x00,0x01,0x00,0x01,0x01,0x8f,0x01,0x8f,0x00,0x09,0x00,0x5c,0x40,0x25, +/*003a40*/ 0x01,0x0a,0x0a,0x40,0x0b,0x00,0x03,0x02,0x06,0x02,0x01,0x03,0x05,0x04,0x04,0x03, +/*003a50*/ 0x08,0x07,0x04,0x09,0x00,0x07,0x06,0x06,0x00,0x09,0x08,0x05,0x03,0x04,0x02,0x01, +/*003a60*/ 0x00,0x01,0x01,0x03,0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x3c,0x3f,0x17,0x3c,0x10, +/*003a70*/ 0xfd,0x3c,0x01,0x2f,0x3c,0xfd,0x3c,0x2f,0x3c,0xfd,0x17,0x3c,0x00,0x2e,0x2e,0x31, +/*003a80*/ 0x30,0x01,0x49,0x68,0xb9,0x00,0x03,0x00,0x0a,0x49,0x68,0x61,0xb0,0x40,0x52,0x58, +/*003a90*/ 0x38,0x11,0x37,0xb9,0x00,0x0a,0xff,0xc0,0x38,0x59,0x25,0x21,0x35,0x23,0x11,0x33, +/*003aa0*/ 0x11,0x33,0x11,0x33,0x01,0x8f,0xfe,0xd6,0x64,0x62,0xca,0x62,0x01,0x65,0x01,0x29, +/*003ab0*/ 0xfe,0xd4,0x01,0x2c,0x00,0x01,0x00,0x01,0x00,0x01,0x01,0x8f,0x01,0x8f,0x00,0x0b, +/*003ac0*/ 0x00,0x65,0x40,0x2c,0x01,0x0c,0x0c,0x40,0x0d,0x00,0x02,0x01,0x05,0x03,0x08,0x04, +/*003ad0*/ 0x03,0x03,0x07,0x04,0x06,0x05,0x0a,0x09,0x04,0x0b,0x00,0x09,0x05,0x04,0x01,0x00, +/*003ae0*/ 0x05,0x08,0x07,0x02,0x0b,0x0a,0x07,0x03,0x06,0x02,0x03,0x02,0x01,0x01,0x05,0x46, +/*003af0*/ 0x76,0x2f,0x37,0x18,0x00,0x3f,0x3c,0x3f,0x17,0x3c,0x10,0xfd,0x17,0x3c,0x01,0x2f, +/*003b00*/ 0x3c,0xfd,0x3c,0x2f,0x3c,0xfd,0x17,0x3c,0x10,0xfd,0x3c,0x00,0x31,0x30,0x01,0x49, +/*003b10*/ 0x68,0xb9,0x00,0x05,0x00,0x0c,0x49,0x68,0x61,0xb0,0x40,0x52,0x58,0x38,0x11,0x37, +/*003b20*/ 0xb9,0x00,0x0c,0xff,0xc0,0x38,0x59,0x25,0x23,0x15,0x23,0x35,0x23,0x35,0x33,0x15, +/*003b30*/ 0x33,0x35,0x33,0x01,0x8f,0x65,0xc5,0x64,0x62,0xca,0x62,0xc9,0xc8,0xc8,0xc6,0xc8, +/*003b40*/ 0xc8,0x00,0x00,0x01,0x00,0x01,0x00,0x01,0x01,0xf3,0x01,0x8f,0x00,0x0d,0x00,0x6b, +/*003b50*/ 0x40,0x2f,0x01,0x0e,0x0e,0x40,0x0f,0x00,0x03,0x02,0x06,0x02,0x01,0x03,0x05,0x04, +/*003b60*/ 0x04,0x03,0x08,0x07,0x04,0x0a,0x09,0x0c,0x0b,0x04,0x0d,0x00,0x0b,0x0a,0x07,0x03, +/*003b70*/ 0x06,0x06,0x00,0x0d,0x0c,0x09,0x08,0x05,0x05,0x04,0x02,0x01,0x00,0x01,0x01,0x03, +/*003b80*/ 0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x3c,0x3f,0x17,0x3c,0x10,0xfd,0x17,0x3c,0x01, +/*003b90*/ 0x2f,0x3c,0xfd,0x3c,0x2f,0x3c,0xfd,0x3c,0x2f,0x3c,0xfd,0x17,0x3c,0x00,0x2e,0x2e, +/*003ba0*/ 0x31,0x30,0x01,0x49,0x68,0xb9,0x00,0x03,0x00,0x0e,0x49,0x68,0x61,0xb0,0x40,0x52, +/*003bb0*/ 0x58,0x38,0x11,0x37,0xb9,0x00,0x0e,0xff,0xc0,0x38,0x59,0x25,0x21,0x35,0x23,0x11, +/*003bc0*/ 0x33,0x11,0x33,0x11,0x33,0x11,0x33,0x11,0x33,0x01,0xf3,0xfe,0x72,0x64,0x62,0x67, +/*003bd0*/ 0x61,0x67,0x61,0x01,0x65,0x01,0x29,0xfe,0xd4,0x01,0x2c,0xfe,0xd4,0x01,0x2c,0x00, +/*003be0*/ 0x00,0x01,0x00,0x01,0x00,0x01,0x01,0x8f,0x01,0x8f,0x00,0x13,0x00,0x89,0x40,0x45, +/*003bf0*/ 0x01,0x14,0x14,0x40,0x15,0x00,0x0c,0x0b,0x05,0x01,0x12,0x11,0x06,0x02,0x01,0x05, +/*003c00*/ 0x05,0x04,0x13,0x04,0x03,0x03,0x00,0x10,0x0f,0x08,0x03,0x07,0x04,0x0e,0x0d,0x0a, +/*003c10*/ 0x03,0x09,0x07,0x06,0x07,0x10,0x11,0x10,0x0d,0x0c,0x01,0x05,0x00,0x06,0x0e,0x0b, +/*003c20*/ 0x0a,0x03,0x03,0x02,0x06,0x04,0x13,0x12,0x0f,0x03,0x0e,0x02,0x09,0x08,0x05,0x03, +/*003c30*/ 0x04,0x01,0x01,0x09,0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x17,0x3c,0x3f,0x17,0x3c, +/*003c40*/ 0x10,0xfd,0x17,0x3c,0x10,0xfd,0x17,0x3c,0x10,0xfd,0x3c,0x01,0x2f,0x17,0x3c,0xfd, +/*003c50*/ 0x17,0x3c,0x2f,0x17,0x3c,0xfd,0x17,0x3c,0x10,0xfd,0x3c,0x00,0x31,0x30,0x01,0x49, +/*003c60*/ 0x68,0xb9,0x00,0x09,0x00,0x14,0x49,0x68,0x61,0xb0,0x40,0x52,0x58,0x38,0x11,0x37, +/*003c70*/ 0xb9,0x00,0x14,0xff,0xc0,0x38,0x59,0x01,0x23,0x15,0x33,0x15,0x23,0x35,0x23,0x15, +/*003c80*/ 0x23,0x35,0x33,0x35,0x23,0x35,0x33,0x15,0x33,0x35,0x33,0x01,0x8f,0x64,0x64,0x62, +/*003c90*/ 0xcb,0x61,0x64,0x64,0x62,0xcb,0x61,0x01,0x2d,0xcb,0x61,0x64,0x64,0x62,0xca,0x62, +/*003ca0*/ 0x64,0x64,0x00,0x01,0x00,0x01,0xff,0x39,0x01,0x8f,0x01,0x8f,0x00,0x0f,0x00,0x76, +/*003cb0*/ 0x40,0x36,0x01,0x10,0x10,0x40,0x11,0x00,0x09,0x08,0x02,0x01,0x05,0x03,0x0e,0x0d, +/*003cc0*/ 0x06,0x03,0x05,0x04,0x0f,0x00,0x0c,0x08,0x07,0x04,0x03,0x05,0x0b,0x04,0x0a,0x09, +/*003cd0*/ 0x05,0x01,0x00,0x03,0x04,0x06,0x02,0x0d,0x0c,0x06,0x07,0x06,0x0f,0x0e,0x0b,0x03, +/*003ce0*/ 0x0a,0x02,0x03,0x02,0x00,0x01,0x09,0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x3c,0x3f, +/*003cf0*/ 0x17,0x3c,0x2f,0x3c,0xfd,0x3c,0x10,0xfd,0x17,0x3c,0x01,0x2f,0x3c,0xfd,0x17,0x3c, +/*003d00*/ 0x2f,0x3c,0xfd,0x17,0x3c,0x10,0xfd,0x3c,0x00,0x2e,0x2e,0x31,0x30,0x01,0x49,0x68, +/*003d10*/ 0xb9,0x00,0x09,0x00,0x10,0x49,0x68,0x61,0xb0,0x40,0x52,0x58,0x38,0x11,0x37,0xb9, +/*003d20*/ 0x00,0x10,0xff,0xc0,0x38,0x59,0x05,0x23,0x15,0x23,0x35,0x33,0x35,0x23,0x35,0x23, +/*003d30*/ 0x11,0x33,0x11,0x33,0x11,0x33,0x01,0x8f,0x65,0xc5,0xc8,0xc8,0x64,0x62,0xca,0x62, +/*003d40*/ 0x63,0x64,0x62,0x67,0x64,0x01,0x29,0xfe,0xd4,0x01,0x2c,0x00,0x00,0x01,0x00,0x01, +/*003d50*/ 0x00,0x01,0x01,0x8f,0x01,0x8f,0x00,0x0f,0x00,0x7c,0x40,0x38,0x01,0x10,0x10,0x40, +/*003d60*/ 0x11,0x00,0x0f,0x0a,0x09,0x08,0x07,0x02,0x01,0x00,0x04,0x03,0x04,0x0d,0x0e,0x0d, +/*003d70*/ 0x06,0x03,0x05,0x04,0x0c,0x0b,0x0d,0x05,0x04,0x03,0x0c,0x07,0x08,0x0f,0x0e,0x03, +/*003d80*/ 0x03,0x02,0x06,0x00,0x0b,0x0a,0x07,0x03,0x06,0x06,0x08,0x09,0x08,0x02,0x01,0x00, +/*003d90*/ 0x01,0x01,0x01,0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x3c,0x3f,0x3c,0x10,0xfd,0x17, +/*003da0*/ 0x3c,0x10,0xfd,0x17,0x3c,0x10,0xfd,0x17,0x3c,0x01,0x2f,0x3c,0xfd,0x17,0x3c,0x10, +/*003db0*/ 0xfd,0x3c,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x00,0x31,0x30,0x01,0x49,0x68, +/*003dc0*/ 0xb9,0x00,0x01,0x00,0x10,0x49,0x68,0x61,0xb0,0x40,0x52,0x58,0x38,0x11,0x37,0xb9, +/*003dd0*/ 0x00,0x10,0xff,0xc0,0x38,0x59,0x25,0x21,0x35,0x33,0x35,0x33,0x35,0x23,0x35,0x21, +/*003de0*/ 0x15,0x23,0x15,0x23,0x15,0x33,0x01,0x8f,0xfe,0x72,0x65,0x63,0xc8,0x01,0x8e,0x65, +/*003df0*/ 0x63,0xc8,0x01,0x62,0x64,0x66,0x62,0x62,0x64,0x67,0x00,0x01,0x00,0x01,0xff,0x9d, +/*003e00*/ 0x01,0x2b,0x02,0x57,0x00,0x13,0x00,0x89,0x40,0x42,0x01,0x14,0x14,0x40,0x15,0x00, +/*003e10*/ 0x10,0x0f,0x13,0x08,0x07,0x03,0x00,0x04,0x09,0x12,0x11,0x0a,0x09,0x06,0x02,0x01, +/*003e20*/ 0x07,0x05,0x04,0x0b,0x0c,0x0b,0x04,0x03,0x03,0x04,0x0e,0x0d,0x05,0x04,0x07,0x0b, +/*003e30*/ 0x0a,0x11,0x10,0x01,0x03,0x00,0x06,0x12,0x07,0x06,0x06,0x08,0x0d,0x0c,0x06,0x0f, +/*003e40*/ 0x03,0x02,0x03,0x0e,0x09,0x08,0x13,0x12,0x03,0x01,0x0d,0x46,0x76,0x2f,0x37,0x18, +/*003e50*/ 0x00,0x3f,0x3c,0x2f,0x3c,0x2f,0x17,0x3c,0xfd,0x3c,0x10,0xfd,0x3c,0x10,0xfd,0x17, +/*003e60*/ 0x3c,0x2f,0x3c,0xfd,0x3c,0x01,0x2f,0x3c,0xfd,0x17,0x3c,0x10,0xfd,0x17,0x3c,0x10, +/*003e70*/ 0xfd,0x17,0x3c,0x2e,0x2e,0x00,0x31,0x30,0x01,0x49,0x68,0xb9,0x00,0x0d,0x00,0x14, +/*003e80*/ 0x49,0x68,0x61,0xb0,0x40,0x52,0x58,0x38,0x11,0x37,0xb9,0x00,0x14,0xff,0xc0,0x38, +/*003e90*/ 0x59,0x01,0x23,0x15,0x23,0x15,0x33,0x15,0x33,0x15,0x23,0x35,0x23,0x35,0x23,0x35, +/*003ea0*/ 0x33,0x35,0x33,0x35,0x33,0x01,0x2b,0x65,0x63,0x64,0x64,0x62,0x64,0x64,0x65,0x63, +/*003eb0*/ 0x62,0x01,0xf5,0xc8,0x67,0xc8,0x61,0x65,0xc8,0x61,0xc8,0x64,0x00,0x01,0x00,0x01, +/*003ec0*/ 0x00,0x01,0x00,0x63,0x02,0x57,0x00,0x03,0x00,0x40,0x40,0x14,0x01,0x04,0x04,0x40, +/*003ed0*/ 0x05,0x00,0x02,0x01,0x04,0x03,0x00,0x03,0x02,0x03,0x01,0x00,0x01,0x01,0x01,0x46, +/*003ee0*/ 0x76,0x2f,0x37,0x18,0x00,0x3f,0x3c,0x3f,0x3c,0x01,0x2f,0x3c,0xfd,0x3c,0x00,0x31, +/*003ef0*/ 0x30,0x01,0x49,0x68,0xb9,0x00,0x01,0x00,0x04,0x49,0x68,0x61,0xb0,0x40,0x52,0x58, +/*003f00*/ 0x38,0x11,0x37,0xb9,0x00,0x04,0xff,0xc0,0x38,0x59,0x37,0x23,0x11,0x33,0x63,0x62, +/*003f10*/ 0x62,0x01,0x02,0x56,0x00,0x01,0x00,0x01,0xff,0x9d,0x01,0x2b,0x02,0x57,0x00,0x13, +/*003f20*/ 0x00,0x8a,0x40,0x41,0x01,0x14,0x14,0x40,0x15,0x00,0x10,0x0f,0x04,0x03,0x03,0x04, +/*003f30*/ 0x0e,0x0d,0x06,0x03,0x05,0x0c,0x0b,0x08,0x03,0x07,0x04,0x02,0x01,0x12,0x11,0x0a, +/*003f40*/ 0x03,0x09,0x04,0x13,0x00,0x0b,0x0a,0x07,0x11,0x10,0x13,0x12,0x06,0x09,0x08,0x01, +/*003f50*/ 0x03,0x00,0x07,0x06,0x06,0x04,0x0d,0x0c,0x06,0x0e,0x05,0x04,0x0f,0x0e,0x03,0x03, +/*003f60*/ 0x02,0x01,0x01,0x05,0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x3c,0x3f,0x3c,0x2f,0x3c, +/*003f70*/ 0x10,0xfd,0x3c,0x10,0xfd,0x3c,0x2f,0x17,0x3c,0xfd,0x3c,0x2f,0x3c,0xfd,0x3c,0x01, +/*003f80*/ 0x2f,0x3c,0xfd,0x17,0x3c,0x2f,0x3c,0xfd,0x17,0x3c,0x2f,0x17,0x3c,0xfd,0x17,0x3c, +/*003f90*/ 0x00,0x31,0x30,0x01,0x49,0x68,0xb9,0x00,0x05,0x00,0x14,0x49,0x68,0x61,0xb0,0x40, +/*003fa0*/ 0x52,0x58,0x38,0x11,0x37,0xb9,0x00,0x14,0xff,0xc0,0x38,0x59,0x25,0x23,0x15,0x23, +/*003fb0*/ 0x15,0x23,0x35,0x33,0x35,0x33,0x35,0x23,0x35,0x23,0x35,0x33,0x15,0x33,0x15,0x33, +/*003fc0*/ 0x01,0x2b,0x65,0x64,0x61,0x65,0x63,0x64,0x64,0x62,0x64,0x64,0xc9,0xc8,0x64,0x62, +/*003fd0*/ 0xc8,0x67,0xc7,0x62,0x65,0xc8,0x00,0x01,0x00,0x01,0x01,0x91,0x01,0x8f,0x02,0x57, +/*003fe0*/ 0x00,0x0f,0x00,0x73,0x40,0x35,0x01,0x10,0x10,0x40,0x11,0x00,0x02,0x01,0x04,0x03, +/*003ff0*/ 0x06,0x05,0x04,0x08,0x07,0x0c,0x04,0x03,0x03,0x0b,0x04,0x0a,0x09,0x0e,0x0d,0x04, +/*004000*/ 0x0f,0x00,0x0d,0x0c,0x09,0x05,0x04,0x01,0x00,0x07,0x08,0x06,0x02,0x07,0x06,0x03, +/*004010*/ 0x03,0x02,0x0f,0x0e,0x0b,0x03,0x0a,0x03,0x01,0x07,0x46,0x76,0x2f,0x37,0x18,0x00, +/*004020*/ 0x3f,0x17,0x3c,0x2f,0x17,0x3c,0x10,0xfd,0x17,0x3c,0x01,0x2f,0x3c,0xfd,0x3c,0x2f, +/*004030*/ 0x3c,0xfd,0x17,0x3c,0x2f,0x3c,0xfd,0x3c,0x10,0xfd,0x3c,0x00,0x31,0x30,0x01,0x49, +/*004040*/ 0x68,0xb9,0x00,0x07,0x00,0x10,0x49,0x68,0x61,0xb0,0x40,0x52,0x58,0x38,0x11,0x37, +/*004050*/ 0xb9,0x00,0x10,0xff,0xc0,0x38,0x59,0x01,0x23,0x15,0x23,0x35,0x23,0x15,0x23,0x35, +/*004060*/ 0x33,0x35,0x33,0x15,0x33,0x35,0x33,0x01,0x8f,0x65,0x61,0x67,0x61,0x64,0x62,0x67, +/*004070*/ 0x61,0x01,0xf5,0x64,0x64,0x64,0x62,0x64,0x64,0x64,0x00,0x01,0x00,0x01,0x00,0x01, +/*004080*/ 0x01,0xf3,0x02,0x57,0x00,0x17,0x00,0x95,0x40,0x4a,0x01,0x18,0x18,0x40,0x19,0x00, +/*004090*/ 0x17,0x0e,0x0d,0x0a,0x09,0x04,0x03,0x00,0x06,0x02,0x01,0x03,0x05,0x04,0x07,0x12, +/*0040a0*/ 0x0c,0x0b,0x08,0x07,0x05,0x11,0x04,0x10,0x0f,0x14,0x13,0x04,0x16,0x15,0x0d,0x0c, +/*0040b0*/ 0x01,0x03,0x00,0x06,0x16,0x0b,0x0a,0x03,0x03,0x02,0x06,0x09,0x08,0x05,0x03,0x04, +/*0040c0*/ 0x15,0x14,0x11,0x03,0x10,0x03,0x17,0x16,0x13,0x12,0x0f,0x05,0x0e,0x02,0x07,0x06, +/*0040d0*/ 0x01,0x01,0x09,0x46,0x76,0x2f,0x37,0x18,0x00,0x3f,0x3c,0x3f,0x17,0x3c,0x3f,0x17, +/*0040e0*/ 0x3c,0x2f,0x17,0x3c,0xfd,0x17,0x3c,0x10,0xfd,0x17,0x3c,0x01,0x2f,0x3c,0xfd,0x3c, +/*0040f0*/ 0x2f,0x3c,0xfd,0x17,0x3c,0x10,0xfd,0x17,0x3c,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e, +/*004100*/ 0x2e,0x00,0x31,0x30,0x01,0x49,0x68,0xb9,0x00,0x09,0x00,0x18,0x49,0x68,0x61,0xb0, +/*004110*/ 0x40,0x52,0x58,0x38,0x11,0x37,0xb9,0x00,0x18,0xff,0xc0,0x38,0x59,0x01,0x23,0x15, +/*004120*/ 0x33,0x15,0x23,0x15,0x23,0x35,0x23,0x35,0x33,0x35,0x23,0x35,0x33,0x35,0x33,0x15, +/*004130*/ 0x33,0x35,0x33,0x15,0x33,0x01,0xf3,0xc8,0xc8,0xc9,0x61,0xc8,0xc8,0xc8,0x64,0x62, +/*004140*/ 0x67,0x61,0x64,0x01,0x2d,0x67,0x61,0x64,0x65,0x61,0x67,0x61,0xc8,0xc8,0xc8,0xc9, +/*004150*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0x7a, +/*004160*/ 0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0xf0,0x00,0x00,0x01,0x64,0x00,0x00,0x02,0x6a, +/*004170*/ 0x00,0x00,0x03,0x2a,0x00,0x00,0x04,0x78,0x00,0x00,0x05,0xac,0x00,0x00,0x06,0x04, +/*004180*/ 0x00,0x00,0x06,0x96,0x00,0x00,0x07,0x26,0x00,0x00,0x07,0xe2,0x00,0x00,0x08,0x70, +/*004190*/ 0x00,0x00,0x08,0xe2,0x00,0x00,0x09,0x3a,0x00,0x00,0x09,0x90,0x00,0x00,0x0a,0x22, +/*0041a0*/ 0x00,0x00,0x0b,0x00,0x00,0x00,0x0b,0x76,0x00,0x00,0x0c,0x62,0x00,0x00,0x0d,0x4e, +/*0041b0*/ 0x00,0x00,0x0d,0xe8,0x00,0x00,0x0e,0x9a,0x00,0x00,0x0f,0x6c,0x00,0x00,0x10,0x1c, +/*0041c0*/ 0x00,0x00,0x11,0x00,0x00,0x00,0x11,0xd0,0x00,0x00,0x12,0x48,0x00,0x00,0x12,0xc0, +/*0041d0*/ 0x00,0x00,0x13,0x84,0x00,0x00,0x14,0x00,0x00,0x00,0x14,0xc6,0x00,0x00,0x15,0x8a, +/*0041e0*/ 0x00,0x00,0x16,0x5e,0x00,0x00,0x16,0xfc,0x00,0x00,0x17,0xc0,0x00,0x00,0x18,0x54, +/*0041f0*/ 0x00,0x00,0x18,0xea,0x00,0x00,0x19,0x8a,0x00,0x00,0x1a,0x1a,0x00,0x00,0x1a,0xcc, +/*004200*/ 0x00,0x00,0x1b,0x5c,0x00,0x00,0x1b,0xf4,0x00,0x00,0x1c,0x7c,0x00,0x00,0x1d,0x26, +/*004210*/ 0x00,0x00,0x1d,0x9e,0x00,0x00,0x1e,0x64,0x00,0x00,0x1f,0x10,0x00,0x00,0x1f,0xb6, +/*004220*/ 0x00,0x00,0x20,0x54,0x00,0x00,0x21,0x1c,0x00,0x00,0x21,0xd2,0x00,0x00,0x22,0xba, +/*004230*/ 0x00,0x00,0x23,0x32,0x00,0x00,0x23,0xc4,0x00,0x00,0x24,0x72,0x00,0x00,0x25,0x36, +/*004240*/ 0x00,0x00,0x25,0xf6,0x00,0x00,0x26,0xa0,0x00,0x00,0x27,0x6c,0x00,0x00,0x27,0xe6, +/*004250*/ 0x00,0x00,0x28,0x7c,0x00,0x00,0x28,0xf6,0x00,0x00,0x29,0x88,0x00,0x00,0x29,0xe0, +/*004260*/ 0x00,0x00,0x2a,0x74,0x00,0x00,0x2b,0x14,0x00,0x00,0x2b,0xa8,0x00,0x00,0x2c,0x48, +/*004270*/ 0x00,0x00,0x2d,0x0a,0x00,0x00,0x2d,0x9e,0x00,0x00,0x2e,0x52,0x00,0x00,0x2e,0xe2, +/*004280*/ 0x00,0x00,0x2f,0x5a,0x00,0x00,0x2f,0xee,0x00,0x00,0x30,0x9a,0x00,0x00,0x30,0xf2, +/*004290*/ 0x00,0x00,0x31,0x90,0x00,0x00,0x32,0x14,0x00,0x00,0x32,0xb6,0x00,0x00,0x33,0x56, +/*0042a0*/ 0x00,0x00,0x33,0xf6,0x00,0x00,0x34,0x86,0x00,0x00,0x35,0x3e,0x00,0x00,0x35,0xcc, +/*0042b0*/ 0x00,0x00,0x36,0x50,0x00,0x00,0x36,0xde,0x00,0x00,0x37,0x7c,0x00,0x00,0x38,0x3e, +/*0042c0*/ 0x00,0x00,0x38,0xe8,0x00,0x00,0x39,0x96,0x00,0x00,0x3a,0x58,0x00,0x00,0x3a,0xb0, +/*0042d0*/ 0x00,0x00,0x3b,0x72,0x00,0x00,0x3c,0x16,0x00,0x00,0x3c,0xec,0x00,0x00,0x3c,0xec, +/*0042e0*/ 0x01,0x90,0x00,0x32,0x00,0x00,0x00,0x00,0x01,0x2c,0x00,0x00,0x01,0x2c,0x00,0x00, +/*0042f0*/ 0x00,0xc8,0x00,0x01,0x01,0x90,0x00,0x01,0x02,0x58,0x00,0x01,0x02,0x58,0x00,0x01, +/*004300*/ 0x03,0x20,0x00,0x01,0x02,0x58,0x00,0x01,0x00,0xc8,0x00,0x01,0x01,0x2c,0x00,0x01, +/*004310*/ 0x01,0x2c,0x00,0x01,0x01,0x90,0x00,0x01,0x01,0x90,0x00,0x01,0x01,0x2c,0x00,0x01, +/*004320*/ 0x01,0x90,0x00,0x01,0x00,0xc8,0x00,0x01,0x01,0x90,0x00,0x01,0x01,0xf4,0x00,0x01, +/*004330*/ 0x01,0xf4,0x00,0x65,0x01,0xf4,0x00,0x01,0x01,0xf4,0x00,0x01,0x01,0xf4,0x00,0x01, +/*004340*/ 0x01,0xf4,0x00,0x01,0x01,0xf4,0x00,0x01,0x01,0xf4,0x00,0x01,0x01,0xf4,0x00,0x01, +/*004350*/ 0x01,0xf4,0x00,0x01,0x00,0xc8,0x00,0x01,0x00,0xc8,0x00,0x01,0x01,0x90,0x00,0x01, +/*004360*/ 0x01,0x90,0x00,0x01,0x01,0x90,0x00,0x01,0x01,0xf4,0x00,0x01,0x02,0x58,0x00,0x01, +/*004370*/ 0x01,0xf4,0x00,0x01,0x01,0xf4,0x00,0x01,0x01,0xf4,0x00,0x01,0x01,0xf4,0x00,0x01, +/*004380*/ 0x01,0xf4,0x00,0x01,0x01,0xf4,0x00,0x01,0x01,0xf4,0x00,0x01,0x01,0xf4,0x00,0x01, +/*004390*/ 0x01,0x90,0x00,0x01,0x01,0xf4,0x00,0x01,0x01,0xf4,0x00,0x01,0x01,0xf4,0x00,0x01, +/*0043a0*/ 0x02,0x58,0x00,0x01,0x01,0xf4,0x00,0x01,0x01,0xf4,0x00,0x01,0x01,0xf4,0x00,0x01, +/*0043b0*/ 0x01,0xf4,0x00,0x01,0x01,0xf4,0x00,0x01,0x01,0xf4,0x00,0x01,0x02,0x58,0x00,0x01, +/*0043c0*/ 0x01,0xf4,0x00,0x01,0x01,0xf4,0x00,0x01,0x02,0x58,0x00,0x01,0x01,0xf4,0x00,0x01, +/*0043d0*/ 0x01,0xf4,0x00,0x01,0x01,0xf4,0x00,0x01,0x01,0x2c,0x00,0x01,0x01,0x90,0x00,0x01, +/*0043e0*/ 0x01,0x2c,0x00,0x01,0x01,0x90,0x00,0x01,0x01,0xf4,0x00,0x01,0x01,0xf4,0x00,0x01, +/*0043f0*/ 0x01,0xf4,0x00,0x01,0x01,0xf4,0x00,0x01,0x01,0xf4,0x00,0x01,0x01,0xf4,0x00,0x01, +/*004400*/ 0x01,0x90,0x00,0x01,0x01,0xf4,0x00,0x01,0x01,0xf4,0x00,0x01,0x00,0xc8,0x00,0x01, +/*004410*/ 0x01,0x2c,0x00,0x01,0x01,0xf4,0x00,0x01,0x00,0xc8,0x00,0x01,0x02,0x58,0x00,0x01, +/*004420*/ 0x01,0xf4,0x00,0x01,0x01,0xf4,0x00,0x01,0x01,0xf4,0x00,0x01,0x01,0xf4,0x00,0x01, +/*004430*/ 0x01,0xf4,0x00,0x01,0x01,0xf4,0x00,0x01,0x01,0x90,0x00,0x01,0x01,0xf4,0x00,0x01, +/*004440*/ 0x01,0xf4,0x00,0x01,0x02,0x58,0x00,0x01,0x01,0xf4,0x00,0x01,0x01,0xf4,0x00,0x01, +/*004450*/ 0x01,0xf4,0x00,0x01,0x01,0x90,0x00,0x01,0x00,0xc8,0x00,0x01,0x01,0x90,0x00,0x01, +/*004460*/ 0x01,0xf4,0x00,0x01,0x02,0x58,0x00,0x01,0x01,0x90,0x00,0x00,0x00,0x02,0x00,0x00, +/*004470*/ 0x00,0x00,0x00,0x00,0xff,0x7b,0x00,0x14,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +/*004480*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x63,0x00,0x00, +/*004490*/ 0x00,0x01,0x00,0x02,0x00,0x03,0x00,0x04,0x00,0x05,0x00,0x06,0x00,0x07,0x00,0x08, +/*0044a0*/ 0x00,0x09,0x00,0x0a,0x00,0x0b,0x00,0x0c,0x00,0x0d,0x00,0x0e,0x00,0x0f,0x00,0x10, +/*0044b0*/ 0x00,0x11,0x00,0x12,0x00,0x13,0x00,0x14,0x00,0x15,0x00,0x16,0x00,0x17,0x00,0x18, +/*0044c0*/ 0x00,0x19,0x00,0x1a,0x00,0x1b,0x00,0x1c,0x00,0x1d,0x00,0x1e,0x00,0x1f,0x00,0x20, +/*0044d0*/ 0x00,0x21,0x00,0x22,0x00,0x23,0x00,0x24,0x00,0x25,0x00,0x26,0x00,0x27,0x00,0x28, +/*0044e0*/ 0x00,0x29,0x00,0x2a,0x00,0x2b,0x00,0x2c,0x00,0x2d,0x00,0x2e,0x00,0x2f,0x00,0x30, +/*0044f0*/ 0x00,0x31,0x00,0x32,0x00,0x33,0x00,0x34,0x00,0x35,0x00,0x36,0x00,0x37,0x00,0x38, +/*004500*/ 0x00,0x39,0x00,0x3a,0x00,0x3b,0x00,0x3c,0x00,0x3d,0x00,0x3e,0x00,0x3f,0x00,0x40, +/*004510*/ 0x00,0x41,0x00,0x42,0x00,0x44,0x00,0x45,0x00,0x46,0x00,0x47,0x00,0x48,0x00,0x49, +/*004520*/ 0x00,0x4a,0x00,0x4b,0x00,0x4c,0x00,0x4d,0x00,0x4e,0x00,0x4f,0x00,0x50,0x00,0x51, +/*004530*/ 0x00,0x52,0x00,0x53,0x00,0x54,0x00,0x55,0x00,0x56,0x00,0x57,0x00,0x58,0x00,0x59, +/*004540*/ 0x00,0x5a,0x00,0x5b,0x00,0x5c,0x00,0x5d,0x00,0x5e,0x00,0x5f,0x00,0x60,0x00,0x61, +/*004550*/ 0x00,0x96,0x00,0xac,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x24, +/*004560*/ 0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x1c,0x00,0x03,0x00,0x01,0x00,0x00,0x01,0x24, +/*004570*/ 0x00,0x00,0x01,0x06,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03, +/*004580*/ 0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +/*004590*/ 0x00,0x00,0x00,0x01,0x00,0x00,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c, +/*0045a0*/ 0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c, +/*0045b0*/ 0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c, +/*0045c0*/ 0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c, +/*0045d0*/ 0x3d,0x3e,0x3f,0x40,0x41,0x42,0x00,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x4b, +/*0045e0*/ 0x4c,0x4d,0x4e,0x4f,0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a,0x5b, +/*0045f0*/ 0x5c,0x5d,0x5e,0x5f,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +/*004600*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +/*004610*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x00, +/*004620*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +/*004630*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +/*004640*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00, +/*004650*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +/*004660*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +/*004670*/ 0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x04,0x01,0x04,0x00,0x00,0x00,0x0c, +/*004680*/ 0x00,0x08,0x00,0x02,0x00,0x04,0x00,0x5f,0x00,0x7e,0x00,0xa0,0x00,0xa5,0x20,0x10, +/*004690*/ 0xff,0xff,0x00,0x00,0x00,0x20,0x00,0x61,0x00,0xa0,0x00,0xa5,0x20,0x10,0xff,0xff, +/*0046a0*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x0c,0x00,0x8a, +/*0046b0*/ 0x00,0xc4,0x00,0xc4,0x00,0xc4,0xff,0xff,0x00,0x03,0x00,0x04,0x00,0x05,0x00,0x06, +/*0046c0*/ 0x00,0x07,0x00,0x08,0x00,0x09,0x00,0x0a,0x00,0x0b,0x00,0x0c,0x00,0x0d,0x00,0x0e, +/*0046d0*/ 0x00,0x0f,0x00,0x10,0x00,0x11,0x00,0x12,0x00,0x13,0x00,0x14,0x00,0x15,0x00,0x16, +/*0046e0*/ 0x00,0x17,0x00,0x18,0x00,0x19,0x00,0x1a,0x00,0x1b,0x00,0x1c,0x00,0x1d,0x00,0x1e, +/*0046f0*/ 0x00,0x1f,0x00,0x20,0x00,0x21,0x00,0x22,0x00,0x23,0x00,0x24,0x00,0x25,0x00,0x26, +/*004700*/ 0x00,0x27,0x00,0x28,0x00,0x29,0x00,0x2a,0x00,0x2b,0x00,0x2c,0x00,0x2d,0x00,0x2e, +/*004710*/ 0x00,0x2f,0x00,0x30,0x00,0x31,0x00,0x32,0x00,0x33,0x00,0x34,0x00,0x35,0x00,0x36, +/*004720*/ 0x00,0x37,0x00,0x38,0x00,0x39,0x00,0x3a,0x00,0x3b,0x00,0x3c,0x00,0x3d,0x00,0x3e, +/*004730*/ 0x00,0x3f,0x00,0x40,0x00,0x41,0x00,0x42,0x00,0x43,0x00,0x44,0x00,0x45,0x00,0x46, +/*004740*/ 0x00,0x47,0x00,0x48,0x00,0x49,0x00,0x4a,0x00,0x4b,0x00,0x4c,0x00,0x4d,0x00,0x4e, +/*004750*/ 0x00,0x4f,0x00,0x50,0x00,0x51,0x00,0x52,0x00,0x53,0x00,0x54,0x00,0x55,0x00,0x56, +/*004760*/ 0x00,0x57,0x00,0x58,0x00,0x59,0x00,0x5a,0x00,0x5b,0x00,0x5c,0x00,0x5d,0x00,0x5e, +/*004770*/ 0x00,0x5f,0x00,0x60,0x00,0x62,0x00,0x61,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x10, +/*004780*/ 0x00,0x00,0x00,0x68,0x09,0x09,0x05,0x00,0x03,0x03,0x02,0x05,0x07,0x07,0x09,0x07, +/*004790*/ 0x02,0x03,0x03,0x05,0x05,0x03,0x05,0x02,0x05,0x06,0x06,0x06,0x06,0x06,0x06,0x06, +/*0047a0*/ 0x06,0x06,0x06,0x02,0x02,0x05,0x05,0x05,0x06,0x07,0x06,0x06,0x06,0x06,0x06,0x06, +/*0047b0*/ 0x06,0x06,0x05,0x06,0x06,0x06,0x07,0x06,0x06,0x06,0x06,0x06,0x06,0x07,0x06,0x06, +/*0047c0*/ 0x07,0x06,0x06,0x06,0x03,0x05,0x03,0x05,0x06,0x06,0x06,0x06,0x06,0x06,0x05,0x06, +/*0047d0*/ 0x06,0x02,0x03,0x06,0x02,0x07,0x06,0x06,0x06,0x06,0x06,0x06,0x05,0x06,0x06,0x07, +/*0047e0*/ 0x06,0x06,0x06,0x05,0x02,0x05,0x06,0x07,0x05,0x00,0x00,0x00,0x0a,0x0a,0x05,0x00, +/*0047f0*/ 0x04,0x04,0x03,0x05,0x08,0x08,0x0a,0x08,0x03,0x04,0x04,0x05,0x05,0x04,0x05,0x03, +/*004800*/ 0x05,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x03,0x03,0x05,0x05,0x05, +/*004810*/ 0x06,0x08,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x05,0x06,0x06,0x06,0x08,0x06, +/*004820*/ 0x06,0x06,0x06,0x06,0x06,0x08,0x06,0x06,0x08,0x06,0x06,0x06,0x04,0x05,0x04,0x05, +/*004830*/ 0x06,0x06,0x06,0x06,0x06,0x06,0x05,0x06,0x06,0x03,0x04,0x06,0x03,0x08,0x06,0x06, +/*004840*/ 0x06,0x06,0x06,0x06,0x05,0x06,0x06,0x08,0x06,0x06,0x06,0x05,0x03,0x05,0x06,0x08, +/*004850*/ 0x05,0x00,0x00,0x00,0x0b,0x0b,0x06,0x00,0x04,0x04,0x03,0x06,0x08,0x08,0x0b,0x08, +/*004860*/ 0x03,0x04,0x04,0x06,0x06,0x04,0x06,0x03,0x06,0x07,0x07,0x07,0x07,0x07,0x07,0x07, +/*004870*/ 0x07,0x07,0x07,0x03,0x03,0x06,0x06,0x06,0x07,0x08,0x07,0x07,0x07,0x07,0x07,0x07, +/*004880*/ 0x07,0x07,0x06,0x07,0x07,0x07,0x08,0x07,0x07,0x07,0x07,0x07,0x07,0x08,0x07,0x07, +/*004890*/ 0x08,0x07,0x07,0x07,0x04,0x06,0x04,0x06,0x07,0x07,0x07,0x07,0x07,0x07,0x06,0x07, +/*0048a0*/ 0x07,0x03,0x04,0x07,0x03,0x08,0x07,0x07,0x07,0x07,0x07,0x07,0x06,0x07,0x07,0x08, +/*0048b0*/ 0x07,0x07,0x07,0x06,0x03,0x06,0x07,0x08,0x06,0x00,0x00,0x00,0x0c,0x0c,0x06,0x00, +/*0048c0*/ 0x05,0x05,0x03,0x06,0x09,0x09,0x0c,0x09,0x03,0x05,0x05,0x06,0x06,0x05,0x06,0x03, +/*0048d0*/ 0x06,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x03,0x03,0x06,0x06,0x06, +/*0048e0*/ 0x08,0x09,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x06,0x08,0x08,0x08,0x09,0x08, +/*0048f0*/ 0x08,0x08,0x08,0x08,0x08,0x09,0x08,0x08,0x09,0x08,0x08,0x08,0x05,0x06,0x05,0x06, +/*004900*/ 0x08,0x08,0x08,0x08,0x08,0x08,0x06,0x08,0x08,0x03,0x05,0x08,0x03,0x09,0x08,0x08, +/*004910*/ 0x08,0x08,0x08,0x08,0x06,0x08,0x08,0x09,0x08,0x08,0x08,0x06,0x03,0x06,0x08,0x09, +/*004920*/ 0x06,0x00,0x00,0x00,0x0d,0x0d,0x07,0x00,0x05,0x05,0x03,0x07,0x0a,0x0a,0x0d,0x0a, +/*004930*/ 0x03,0x05,0x05,0x07,0x07,0x05,0x07,0x03,0x07,0x08,0x08,0x08,0x08,0x08,0x08,0x08, +/*004940*/ 0x08,0x08,0x08,0x03,0x03,0x07,0x07,0x07,0x08,0x0a,0x08,0x08,0x08,0x08,0x08,0x08, +/*004950*/ 0x08,0x08,0x07,0x08,0x08,0x08,0x0a,0x08,0x08,0x08,0x08,0x08,0x08,0x0a,0x08,0x08, +/*004960*/ 0x0a,0x08,0x08,0x08,0x05,0x07,0x05,0x07,0x08,0x08,0x08,0x08,0x08,0x08,0x07,0x08, +/*004970*/ 0x08,0x03,0x05,0x08,0x03,0x0a,0x08,0x08,0x08,0x08,0x08,0x08,0x07,0x08,0x08,0x0a, +/*004980*/ 0x08,0x08,0x08,0x07,0x03,0x07,0x08,0x0a,0x07,0x00,0x00,0x00,0x0e,0x0e,0x07,0x00, +/*004990*/ 0x05,0x05,0x04,0x07,0x0b,0x0b,0x0e,0x0b,0x04,0x05,0x05,0x07,0x07,0x05,0x07,0x04, +/*0049a0*/ 0x07,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x04,0x04,0x07,0x07,0x07, +/*0049b0*/ 0x09,0x0b,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x07,0x09,0x09,0x09,0x0b,0x09, +/*0049c0*/ 0x09,0x09,0x09,0x09,0x09,0x0b,0x09,0x09,0x0b,0x09,0x09,0x09,0x05,0x07,0x05,0x07, +/*0049d0*/ 0x09,0x09,0x09,0x09,0x09,0x09,0x07,0x09,0x09,0x04,0x05,0x09,0x04,0x0b,0x09,0x09, +/*0049e0*/ 0x09,0x09,0x09,0x09,0x07,0x09,0x09,0x0b,0x09,0x09,0x09,0x07,0x04,0x07,0x09,0x0b, +/*0049f0*/ 0x07,0x00,0x00,0x00,0x0f,0x0f,0x08,0x00,0x06,0x06,0x04,0x08,0x0b,0x0b,0x0f,0x0b, +/*004a00*/ 0x04,0x06,0x06,0x08,0x08,0x06,0x08,0x04,0x08,0x09,0x09,0x09,0x09,0x09,0x09,0x09, +/*004a10*/ 0x09,0x09,0x09,0x04,0x04,0x08,0x08,0x08,0x09,0x0b,0x09,0x09,0x09,0x09,0x09,0x09, +/*004a20*/ 0x09,0x09,0x08,0x09,0x09,0x09,0x0b,0x09,0x09,0x09,0x09,0x09,0x09,0x0b,0x09,0x09, +/*004a30*/ 0x0b,0x09,0x09,0x09,0x06,0x08,0x06,0x08,0x09,0x09,0x09,0x09,0x09,0x09,0x08,0x09, +/*004a40*/ 0x09,0x04,0x06,0x09,0x04,0x0b,0x09,0x09,0x09,0x09,0x09,0x09,0x08,0x09,0x09,0x0b, +/*004a50*/ 0x09,0x09,0x09,0x08,0x04,0x08,0x09,0x0b,0x08,0x00,0x00,0x00,0x10,0x10,0x08,0x00, +/*004a60*/ 0x06,0x06,0x04,0x08,0x0c,0x0c,0x10,0x0c,0x04,0x06,0x06,0x08,0x08,0x06,0x08,0x04, +/*004a70*/ 0x08,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x04,0x04,0x08,0x08,0x08, +/*004a80*/ 0x0a,0x0c,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x08,0x0a,0x0a,0x0a,0x0c,0x0a, +/*004a90*/ 0x0a,0x0a,0x0a,0x0a,0x0a,0x0c,0x0a,0x0a,0x0c,0x0a,0x0a,0x0a,0x06,0x08,0x06,0x08, +/*004aa0*/ 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x08,0x0a,0x0a,0x04,0x06,0x0a,0x04,0x0c,0x0a,0x0a, +/*004ab0*/ 0x0a,0x0a,0x0a,0x0a,0x08,0x0a,0x0a,0x0c,0x0a,0x0a,0x0a,0x08,0x04,0x08,0x0a,0x0c, +/*004ac0*/ 0x08,0x00,0x00,0x00,0x11,0x11,0x09,0x00,0x06,0x06,0x04,0x09,0x0d,0x0d,0x11,0x0d, +/*004ad0*/ 0x04,0x06,0x06,0x09,0x09,0x06,0x09,0x04,0x09,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b, +/*004ae0*/ 0x0b,0x0b,0x0b,0x04,0x04,0x09,0x09,0x09,0x0b,0x0d,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b, +/*004af0*/ 0x0b,0x0b,0x09,0x0b,0x0b,0x0b,0x0d,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0d,0x0b,0x0b, +/*004b00*/ 0x0d,0x0b,0x0b,0x0b,0x06,0x09,0x06,0x09,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x09,0x0b, +/*004b10*/ 0x0b,0x04,0x06,0x0b,0x04,0x0d,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x09,0x0b,0x0b,0x0d, +/*004b20*/ 0x0b,0x0b,0x0b,0x09,0x04,0x09,0x0b,0x0d,0x09,0x00,0x00,0x00,0x12,0x12,0x09,0x00, +/*004b30*/ 0x07,0x07,0x05,0x09,0x0e,0x0e,0x12,0x0e,0x05,0x07,0x07,0x09,0x09,0x07,0x09,0x05, +/*004b40*/ 0x09,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x05,0x05,0x09,0x09,0x09, +/*004b50*/ 0x0b,0x0e,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x09,0x0b,0x0b,0x0b,0x0e,0x0b, +/*004b60*/ 0x0b,0x0b,0x0b,0x0b,0x0b,0x0e,0x0b,0x0b,0x0e,0x0b,0x0b,0x0b,0x07,0x09,0x07,0x09, +/*004b70*/ 0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x09,0x0b,0x0b,0x05,0x07,0x0b,0x05,0x0e,0x0b,0x0b, +/*004b80*/ 0x0b,0x0b,0x0b,0x0b,0x09,0x0b,0x0b,0x0e,0x0b,0x0b,0x0b,0x09,0x05,0x09,0x0b,0x0e, +/*004b90*/ 0x09,0x00,0x00,0x00,0x13,0x13,0x0a,0x00,0x07,0x07,0x05,0x0a,0x0e,0x0e,0x13,0x0e, +/*004ba0*/ 0x05,0x07,0x07,0x0a,0x0a,0x07,0x0a,0x05,0x0a,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c, +/*004bb0*/ 0x0c,0x0c,0x0c,0x05,0x05,0x0a,0x0a,0x0a,0x0c,0x0e,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c, +/*004bc0*/ 0x0c,0x0c,0x0a,0x0c,0x0c,0x0c,0x0e,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0e,0x0c,0x0c, +/*004bd0*/ 0x0e,0x0c,0x0c,0x0c,0x07,0x0a,0x07,0x0a,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0a,0x0c, +/*004be0*/ 0x0c,0x05,0x07,0x0c,0x05,0x0e,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0a,0x0c,0x0c,0x0e, +/*004bf0*/ 0x0c,0x0c,0x0c,0x0a,0x05,0x0a,0x0c,0x0e,0x0a,0x00,0x00,0x00,0x14,0x14,0x0a,0x00, +/*004c00*/ 0x08,0x08,0x05,0x0a,0x0f,0x0f,0x14,0x0f,0x05,0x08,0x08,0x0a,0x0a,0x08,0x0a,0x05, +/*004c10*/ 0x0a,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x05,0x05,0x0a,0x0a,0x0a, +/*004c20*/ 0x0d,0x0f,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0a,0x0d,0x0d,0x0d,0x0f,0x0d, +/*004c30*/ 0x0d,0x0d,0x0d,0x0d,0x0d,0x0f,0x0d,0x0d,0x0f,0x0d,0x0d,0x0d,0x08,0x0a,0x08,0x0a, +/*004c40*/ 0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0a,0x0d,0x0d,0x05,0x08,0x0d,0x05,0x0f,0x0d,0x0d, +/*004c50*/ 0x0d,0x0d,0x0d,0x0d,0x0a,0x0d,0x0d,0x0f,0x0d,0x0d,0x0d,0x0a,0x05,0x0a,0x0d,0x0f, +/*004c60*/ 0x0a,0x00,0x00,0x00,0x15,0x15,0x0b,0x00,0x08,0x08,0x05,0x0b,0x10,0x10,0x15,0x10, +/*004c70*/ 0x05,0x08,0x08,0x0b,0x0b,0x08,0x0b,0x05,0x0b,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d, +/*004c80*/ 0x0d,0x0d,0x0d,0x05,0x05,0x0b,0x0b,0x0b,0x0d,0x10,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d, +/*004c90*/ 0x0d,0x0d,0x0b,0x0d,0x0d,0x0d,0x10,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x10,0x0d,0x0d, +/*004ca0*/ 0x10,0x0d,0x0d,0x0d,0x08,0x0b,0x08,0x0b,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0b,0x0d, +/*004cb0*/ 0x0d,0x05,0x08,0x0d,0x05,0x10,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0b,0x0d,0x0d,0x10, +/*004cc0*/ 0x0d,0x0d,0x0d,0x0b,0x05,0x0b,0x0d,0x10,0x0b,0x00,0x00,0x00,0x16,0x16,0x0b,0x00, +/*004cd0*/ 0x08,0x08,0x06,0x0b,0x11,0x11,0x16,0x11,0x06,0x08,0x08,0x0b,0x0b,0x08,0x0b,0x06, +/*004ce0*/ 0x0b,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x06,0x06,0x0b,0x0b,0x0b, +/*004cf0*/ 0x0e,0x11,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0b,0x0e,0x0e,0x0e,0x11,0x0e, +/*004d00*/ 0x0e,0x0e,0x0e,0x0e,0x0e,0x11,0x0e,0x0e,0x11,0x0e,0x0e,0x0e,0x08,0x0b,0x08,0x0b, +/*004d10*/ 0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0b,0x0e,0x0e,0x06,0x08,0x0e,0x06,0x11,0x0e,0x0e, +/*004d20*/ 0x0e,0x0e,0x0e,0x0e,0x0b,0x0e,0x0e,0x11,0x0e,0x0e,0x0e,0x0b,0x06,0x0b,0x0e,0x11, +/*004d30*/ 0x0b,0x00,0x00,0x00,0x17,0x17,0x0c,0x00,0x09,0x09,0x06,0x0c,0x11,0x11,0x17,0x11, +/*004d40*/ 0x06,0x09,0x09,0x0c,0x0c,0x09,0x0c,0x06,0x0c,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e, +/*004d50*/ 0x0e,0x0e,0x0e,0x06,0x06,0x0c,0x0c,0x0c,0x0e,0x11,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e, +/*004d60*/ 0x0e,0x0e,0x0c,0x0e,0x0e,0x0e,0x11,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x11,0x0e,0x0e, +/*004d70*/ 0x11,0x0e,0x0e,0x0e,0x09,0x0c,0x09,0x0c,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0c,0x0e, +/*004d80*/ 0x0e,0x06,0x09,0x0e,0x06,0x11,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0c,0x0e,0x0e,0x11, +/*004d90*/ 0x0e,0x0e,0x0e,0x0c,0x06,0x0c,0x0e,0x11,0x0c,0x00,0x00,0x00,0x18,0x18,0x0c,0x00, +/*004da0*/ 0x09,0x09,0x06,0x0c,0x12,0x12,0x18,0x12,0x06,0x09,0x09,0x0c,0x0c,0x09,0x0c,0x06, +/*004db0*/ 0x0c,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x06,0x06,0x0c,0x0c,0x0c, +/*004dc0*/ 0x0f,0x12,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0c,0x0f,0x0f,0x0f,0x12,0x0f, +/*004dd0*/ 0x0f,0x0f,0x0f,0x0f,0x0f,0x12,0x0f,0x0f,0x12,0x0f,0x0f,0x0f,0x09,0x0c,0x09,0x0c, +/*004de0*/ 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0c,0x0f,0x0f,0x06,0x09,0x0f,0x06,0x12,0x0f,0x0f, +/*004df0*/ 0x0f,0x0f,0x0f,0x0f,0x0c,0x0f,0x0f,0x12,0x0f,0x0f,0x0f,0x0c,0x06,0x0c,0x0f,0x12, +/*004e00*/ 0x0c,0x00,0x00,0x00,0x00,0x00,0x01,0xaf,0x01,0x90,0x00,0x05,0x00,0x01,0x02,0x30, +/*004e10*/ 0x02,0x08,0x00,0x00,0x00,0x72,0x02,0x30,0x02,0x08,0x00,0x00,0x01,0x6b,0x00,0x28, +/*004e20*/ 0x00,0xcf,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +/*004e30*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x41,0x6c, +/*004e40*/ 0x74,0x73,0x00,0x40,0x00,0x20,0x20,0x10,0x02,0x58,0xff,0x38,0x00,0x00,0x02,0x58, +/*004e50*/ 0x00,0xc7,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0xe3,0xe5,0x12,0x31, +/*004e60*/ 0x5f,0x0f,0x3c,0xf5,0x00,0x00,0x03,0x20,0x00,0x00,0x00,0x00,0xb6,0x97,0xc2,0x82, +/*004e70*/ 0x00,0x00,0x00,0x00,0xb6,0x97,0xc2,0x82,0x00,0x00,0xff,0x39,0x02,0xbb,0x02,0x58, +/*004e80*/ 0x00,0x00,0x00,0x03,0x00,0x02,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00, +/*004e90*/ 0x02,0x58,0xff,0x38,0x00,0x00,0x03,0x20,0x00,0x00,0x00,0x32,0x02,0xbb,0x00,0x01, +/*004ea0*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x63, +/*004eb0*/ 0x00,0x01,0x00,0x00,0x00,0x63,0x00,0x2c,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x02, +/*004ec0*/ 0x00,0x08,0x00,0x40,0x00,0x0a,0x00,0x00,0x00,0x84,0x00,0xde,0x00,0x01,0x00,0x01 +}; + +// ----------------------------------------------------------------------------- + +// The following data tables are coming from Dear Imgui. +// Re-licensed under permission as MIT-0. +// +// @todo: 0x3100, 0x312F, FONT_TW, // Bopomofo + +static const unsigned table_common[] = { + 0x0020, 0x00FF, // Basic Latin + Latin Supplement + 0xFFFD, 0xFFFD, // Invalid + 0, +}; + +static const unsigned table_cyrillic[] = { + 0x0400, 0x052F, // Cyrillic + Cyrillic Supplement + 0x2DE0, 0x2DFF, // Cyrillic Extended-A + 0xA640, 0xA69F, // Cyrillic Extended-B + 0, +}; + +static const unsigned table_vietnamese[] = { + 0x0102, 0x0103, + 0x0110, 0x0111, + 0x0128, 0x0129, + 0x0168, 0x0169, + 0x01A0, 0x01A1, + 0x01AF, 0x01B0, + 0x1EA0, 0x1EF9, + 0, +}; + +static const unsigned table_thai[] = { + 0x0E00, 0x0E7F, // Thai + 0x2010, 0x205E, // General Punctuation (smaller set than full CJK 2000-206F) + 0, +}; + +static const unsigned table_korean[] = { + 0x1100, 0x11FF, // Hangul Jamo + 0x3131, 0x3163, // Korean alphabets (no 3130-318F?) + 0xAC00, 0xD7A3, // Korean characters (no AC00-D7AF?) + 0, +}; + +static const unsigned table_chinese_punctuation[] = { + 0x2000, 0x206F, // General CJK Punctuation (Thai uses 2010-205E) + 0, +}; + +static const unsigned table_chinese_japanese_common[] = { + 0x3000, 0x30FF, // CJK Symbols and Punctuations, Hiragana, Katakana + 0x31F0, 0x31FF, // Katakana Phonetic Extensions + 0xFF00, 0xFFEF, // Half-width characters (Romaji) + 0, +}; + +static const unsigned table_chinese_full[] = { + 0x4e00, 0x9FAF, // CJK Ideograms + 0, +}; + +static const unsigned table_eastern_europe[] = { + 0x0100, 0x017F, // Latin_Extended-A + 0x0180, 0x024F, // Latin_Extended-B + 0x0250, 0x02AF, // International Phonetic Alphabet (IPA) + 0x02B0, 0x02FF, // Spacing modifier letters (and quotes) + 0x0300, 0x036F, // Fix IPA missing glyphs (?) + 0x16A0, 0x16F0, // Old Norse / Runic + 0x1E00, 0x1EFF, // Latin_Extended_Additional + 0x2000, 0x206F, // General punctuaction +// 0x2C60, 0x2C7F, // Latin Extended-C (Uighur New Script, the Uralic Phonetic Alphabet, Shona, and Claudian Latin) + 0xFB00, 0xFB4F, // Ligatures for the Latin, Armenian, and Hebrew scripts + 0 +}; + +static const unsigned table_western_europe[] = { + 0x0370, 0x03FF, // Greek and Coptic + 0x10A0, 0x10FF, // Modern Georgian, Svan, and Mingrelian + 0x1F00, 0x1FFF, // fix ancient greek glyphs (?) + 0x0400, 0x052F, // Cyrillic + Cyrillic Supplement + 0x2DE0, 0x2DFF, // Cyrillic Extended-A + 0xA640, 0xA69F, // Cyrillic Extended-B + 0xFB00, 0xFB4F, // Ligatures for the Latin, Armenian, and Hebrew scripts + 0 +}; + +static const unsigned table_middle_east[] = { + 0x0590, 0x05FF, // Hebrew, Yiddish, Ladino, and other Jewish diaspora languages. + 0x0600, 0x06FF, // Arabic script and Arabic-Indic digits + 0xFB00, 0xFB4F, // Ligatures for the Latin, Armenian, and Hebrew scripts + 0 +}; + +static const unsigned table_emoji[] = { +// 0xE000, 0xEB4C, // Private use (emojis) + 0xE000, 0xF68B, // Private use (emojis+webfonts). U+F68C excluded + 0xF68D, 0xF8FF, // Private use (emojis+webfonts) + 0xF0001,0xF1CC7,// Private use (icon mdi) + 0 +}; + +// Store 2500 regularly used characters for Simplified Chinese. Table below covers 97.97% of all characters used during the month in July, 1987. +// [ref] https://zh.wiktionary.org/wiki/%E9%99%84%E5%BD%95:%E7%8E%B0%E4%BB%A3%E6%B1%89%E8%AF%AD%E5%B8%B8%E7%94%A8%E5%AD%97%E8%A1%A8 +static const unsigned short packed_table_chinese[] = { // starts with 0x4E00 + 0,1,2,4,1,1,1,1,2,1,3,2,1,2,2,1,1,1,1,1,5,2,1,2,3,3,3,2,2,4,1,1,1,2,1,5,2,3,1,2,1,2,1,1,2,1,1,2,2,1,4,1,1,1,1,5,10,1,2,19,2,1,2,1,2,1,2,1,2, + 1,5,1,6,3,2,1,2,2,1,1,1,4,8,5,1,1,4,1,1,3,1,2,1,5,1,2,1,1,1,10,1,1,5,2,4,6,1,4,2,2,2,12,2,1,1,6,1,1,1,4,1,1,4,6,5,1,4,2,2,4,10,7,1,1,4,2,4, + 2,1,4,3,6,10,12,5,7,2,14,2,9,1,1,6,7,10,4,7,13,1,5,4,8,4,1,1,2,28,5,6,1,1,5,2,5,20,2,2,9,8,11,2,9,17,1,8,6,8,27,4,6,9,20,11,27,6,68,2,2,1,1, + 1,2,1,2,2,7,6,11,3,3,1,1,3,1,2,1,1,1,1,1,3,1,1,8,3,4,1,5,7,2,1,4,4,8,4,2,1,2,1,1,4,5,6,3,6,2,12,3,1,3,9,2,4,3,4,1,5,3,3,1,3,7,1,5,1,1,1,1,2, + 3,4,5,2,3,2,6,1,1,2,1,7,1,7,3,4,5,15,2,2,1,5,3,22,19,2,1,1,1,1,2,5,1,1,1,6,1,1,12,8,2,9,18,22,4,1,1,5,1,16,1,2,7,10,15,1,1,6,2,4,1,2,4,1,6, + 1,1,3,2,4,1,6,4,5,1,2,1,1,2,1,10,3,1,3,2,1,9,3,2,5,7,2,19,4,3,6,1,1,1,1,1,4,3,2,1,1,1,2,5,3,1,1,1,2,2,1,1,2,1,1,2,1,3,1,1,1,3,7,1,4,1,1,2,1, + 1,2,1,2,4,4,3,8,1,1,1,2,1,3,5,1,3,1,3,4,6,2,2,14,4,6,6,11,9,1,15,3,1,28,5,2,5,5,3,1,3,4,5,4,6,14,3,2,3,5,21,2,7,20,10,1,2,19,2,4,28,28,2,3, + 2,1,14,4,1,26,28,42,12,40,3,52,79,5,14,17,3,2,2,11,3,4,6,3,1,8,2,23,4,5,8,10,4,2,7,3,5,1,1,6,3,1,2,2,2,5,28,1,1,7,7,20,5,3,29,3,17,26,1,8,4, + 27,3,6,11,23,5,3,4,6,13,24,16,6,5,10,25,35,7,3,2,3,3,14,3,6,2,6,1,4,2,3,8,2,1,1,3,3,3,4,1,1,13,2,2,4,5,2,1,14,14,1,2,2,1,4,5,2,3,1,14,3,12, + 3,17,2,16,5,1,2,1,8,9,3,19,4,2,2,4,17,25,21,20,28,75,1,10,29,103,4,1,2,1,1,4,2,4,1,2,3,24,2,2,2,1,1,2,1,3,8,1,1,1,2,1,1,3,1,1,1,6,1,5,3,1,1, + 1,3,4,1,1,5,2,1,5,6,13,9,16,1,1,1,1,3,2,3,2,4,5,2,5,2,2,3,7,13,7,2,2,1,1,1,1,2,3,3,2,1,6,4,9,2,1,14,2,14,2,1,18,3,4,14,4,11,41,15,23,15,23, + 176,1,3,4,1,1,1,1,5,3,1,2,3,7,3,1,1,2,1,2,4,4,6,2,4,1,9,7,1,10,5,8,16,29,1,1,2,2,3,1,3,5,2,4,5,4,1,1,2,2,3,3,7,1,6,10,1,17,1,44,4,6,2,1,1,6, + 5,4,2,10,1,6,9,2,8,1,24,1,2,13,7,8,8,2,1,4,1,3,1,3,3,5,2,5,10,9,4,9,12,2,1,6,1,10,1,1,7,7,4,10,8,3,1,13,4,3,1,6,1,3,5,2,1,2,17,16,5,2,16,6, + 1,4,2,1,3,3,6,8,5,11,11,1,3,3,2,4,6,10,9,5,7,4,7,4,7,1,1,4,2,1,3,6,8,7,1,6,11,5,5,3,24,9,4,2,7,13,5,1,8,82,16,61,1,1,1,4,2,2,16,10,3,8,1,1, + 6,4,2,1,3,1,1,1,4,3,8,4,2,2,1,1,1,1,1,6,3,5,1,1,4,6,9,2,1,1,1,2,1,7,2,1,6,1,5,4,4,3,1,8,1,3,3,1,3,2,2,2,2,3,1,6,1,2,1,2,1,3,7,1,8,2,1,2,1,5, + 2,5,3,5,10,1,2,1,1,3,2,5,11,3,9,3,5,1,1,5,9,1,2,1,5,7,9,9,8,1,3,3,3,6,8,2,3,2,1,1,32,6,1,2,15,9,3,7,13,1,3,10,13,2,14,1,13,10,2,1,3,10,4,15, + 2,15,15,10,1,3,9,6,9,32,25,26,47,7,3,2,3,1,6,3,4,3,2,8,5,4,1,9,4,2,2,19,10,6,2,3,8,1,2,2,4,2,1,9,4,4,4,6,4,8,9,2,3,1,1,1,1,3,5,5,1,3,8,4,6, + 2,1,4,12,1,5,3,7,13,2,5,8,1,6,1,2,5,14,6,1,5,2,4,8,15,5,1,23,6,62,2,10,1,1,8,1,2,2,10,4,2,2,9,2,1,1,3,2,3,1,5,3,3,2,1,3,8,1,1,1,11,3,1,1,4, + 3,7,1,14,1,2,3,12,5,2,5,1,6,7,5,7,14,11,1,3,1,8,9,12,2,1,11,8,4,4,2,6,10,9,13,1,1,3,1,5,1,3,2,4,4,1,18,2,3,14,11,4,29,4,2,7,1,3,13,9,2,2,5, + 3,5,20,7,16,8,5,72,34,6,4,22,12,12,28,45,36,9,7,39,9,191,1,1,1,4,11,8,4,9,2,3,22,1,1,1,1,4,17,1,7,7,1,11,31,10,2,4,8,2,3,2,1,4,2,16,4,32,2, + 3,19,13,4,9,1,5,2,14,8,1,1,3,6,19,6,5,1,16,6,2,10,8,5,1,2,3,1,5,5,1,11,6,6,1,3,3,2,6,3,8,1,1,4,10,7,5,7,7,5,8,9,2,1,3,4,1,1,3,1,3,3,2,6,16, + 1,4,6,3,1,10,6,1,3,15,2,9,2,10,25,13,9,16,6,2,2,10,11,4,3,9,1,2,6,6,5,4,30,40,1,10,7,12,14,33,6,3,6,7,3,1,3,1,11,14,4,9,5,12,11,49,18,51,31, + 140,31,2,2,1,5,1,8,1,10,1,4,4,3,24,1,10,1,3,6,6,16,3,4,5,2,1,4,2,57,10,6,22,2,22,3,7,22,6,10,11,36,18,16,33,36,2,5,5,1,1,1,4,10,1,4,13,2,7, + 5,2,9,3,4,1,7,43,3,7,3,9,14,7,9,1,11,1,1,3,7,4,18,13,1,14,1,3,6,10,73,2,2,30,6,1,11,18,19,13,22,3,46,42,37,89,7,3,16,34,2,2,3,9,1,7,1,1,1,2, + 2,4,10,7,3,10,3,9,5,28,9,2,6,13,7,3,1,3,10,2,7,2,11,3,6,21,54,85,2,1,4,2,2,1,39,3,21,2,2,5,1,1,1,4,1,1,3,4,15,1,3,2,4,4,2,3,8,2,20,1,8,7,13, + 4,1,26,6,2,9,34,4,21,52,10,4,4,1,5,12,2,11,1,7,2,30,12,44,2,30,1,1,3,6,16,9,17,39,82,2,2,24,7,1,7,3,16,9,14,44,2,1,2,1,2,3,5,2,4,1,6,7,5,3, + 2,6,1,11,5,11,2,1,18,19,8,1,3,24,29,2,1,3,5,2,2,1,13,6,5,1,46,11,3,5,1,1,5,8,2,10,6,12,6,3,7,11,2,4,16,13,2,5,1,1,2,2,5,2,28,5,2,23,10,8,4, + 4,22,39,95,38,8,14,9,5,1,13,5,4,3,13,12,11,1,9,1,27,37,2,5,4,4,63,211,95,2,2,2,1,3,5,2,1,1,2,2,1,1,1,3,2,4,1,2,1,1,5,2,2,1,1,2,3,1,3,1,1,1, + 3,1,4,2,1,3,6,1,1,3,7,15,5,3,2,5,3,9,11,4,2,22,1,6,3,8,7,1,4,28,4,16,3,3,25,4,4,27,27,1,4,1,2,2,7,1,3,5,2,28,8,2,14,1,8,6,16,25,3,3,3,14,3, + 3,1,1,2,1,4,6,3,8,4,1,1,1,2,3,6,10,6,2,3,18,3,2,5,5,4,3,1,5,2,5,4,23,7,6,12,6,4,17,11,9,5,1,1,10,5,12,1,1,11,26,33,7,3,6,1,17,7,1,5,12,1,11, + 2,4,1,8,14,17,23,1,2,1,7,8,16,11,9,6,5,2,6,4,16,2,8,14,1,11,8,9,1,1,1,9,25,4,11,19,7,2,15,2,12,8,52,7,5,19,2,16,4,36,8,1,16,8,24,26,4,6,2,9, + 5,4,36,3,28,12,25,15,37,27,17,12,59,38,5,32,127,1,2,9,17,14,4,1,2,1,1,8,11,50,4,14,2,19,16,4,17,5,4,5,26,12,45,2,23,45,104,30,12,8,3,10,2,2, + 3,3,1,4,20,7,2,9,6,15,2,20,1,3,16,4,11,15,6,134,2,5,59,1,2,2,2,1,9,17,3,26,137,10,211,59,1,2,4,1,4,1,1,1,2,6,2,3,1,1,2,3,2,3,1,3,4,4,2,3,3, + 1,4,3,1,7,2,2,3,1,2,1,3,3,3,2,2,3,2,1,3,14,6,1,3,2,9,6,15,27,9,34,145,1,1,2,1,1,1,1,2,1,1,1,1,2,2,2,3,1,2,1,1,1,2,3,5,8,3,5,2,4,1,3,2,2,2,12, + 4,1,1,1,10,4,5,1,20,4,16,1,15,9,5,12,2,9,2,5,4,2,26,19,7,1,26,4,30,12,15,42,1,6,8,172,1,1,4,2,1,1,11,2,2,4,2,1,2,1,10,8,1,2,1,4,5,1,2,5,1,8, + 4,1,3,4,2,1,6,2,1,3,4,1,2,1,1,1,1,12,5,7,2,4,3,1,1,1,3,3,6,1,2,2,3,3,3,2,1,2,12,14,11,6,6,4,12,2,8,1,7,10,1,35,7,4,13,15,4,3,23,21,28,52,5, + 26,5,6,1,7,10,2,7,53,3,2,1,1,1,2,163,532,1,10,11,1,3,3,4,8,2,8,6,2,2,23,22,4,2,2,4,2,1,3,1,3,3,5,9,8,2,1,2,8,1,10,2,12,21,20,15,105,2,3,1,1, + 3,2,3,1,1,2,5,1,4,15,11,19,1,1,1,1,5,4,5,1,1,2,5,3,5,12,1,2,5,1,11,1,1,15,9,1,4,5,3,26,8,2,1,3,1,1,15,19,2,12,1,2,5,2,7,2,19,2,20,6,26,7,5, + 2,2,7,34,21,13,70,2,128,1,1,2,1,1,2,1,1,3,2,2,2,15,1,4,1,3,4,42,10,6,1,49,85,8,1,2,1,1,4,4,2,3,6,1,5,7,4,3,211,4,1,2,1,2,5,1,2,4,2,2,6,5,6, + 10,3,4,48,100,6,2,16,296,5,27,387,2,2,3,7,16,8,5,38,15,39,21,9,10,3,7,59,13,27,21,47,5,21,6 +}; + +// 2999 japanese ideograms = 2136 Joyo (for common use) + 863 Jinmeiyo (for personal name) Kanji code points. +// [ref] https://github.com/ocornut/imgui/pull/3627 - Missing 1 Joyo Kanji: U+20B9F (Kun'yomi: Shikaru, On'yomi: Shitsu,shichi). +static const unsigned short packed_table_japanese[] = { // starts with 0x4E00 + 0,1,2,4,1,1,1,1,2,1,3,3,2,2,1,5,3,5,7,5,6,1,2,1,7,2,6,3,1,8,1,1,4,1,1,18,2,11,2,6,2,1,2,1,5,1,2,1,3,1,2,1,2,3,3,1,1,2,3,1,1,1,12,7,9,1,4,5,1, + 1,2,1,10,1,1,9,2,2,4,5,6,9,3,1,1,1,1,9,3,18,5,2,2,2,2,1,6,3,7,1,1,1,1,2,2,4,2,1,23,2,10,4,3,5,2,4,10,2,4,13,1,6,1,9,3,1,1,6,6,7,6,3,1,2,11,3, + 2,2,3,2,15,2,2,5,4,3,6,4,1,2,5,2,12,16,6,13,9,13,2,1,1,7,16,4,7,1,19,1,5,1,2,2,7,7,8,2,6,5,4,9,18,7,4,5,9,13,11,8,15,2,1,1,1,2,1,2,2,1,2,2,8, + 2,9,3,3,1,1,4,4,1,1,1,4,9,1,4,3,5,5,2,7,5,3,4,8,2,1,13,2,3,3,1,14,1,1,4,5,1,3,6,1,5,2,1,1,3,3,3,3,1,1,2,7,6,6,7,1,4,7,6,1,1,1,1,1,12,3,3,9,5, + 2,6,1,5,6,1,2,3,18,2,4,14,4,1,3,6,1,1,6,3,5,5,3,2,2,2,2,12,3,1,4,2,3,2,3,11,1,7,4,1,2,1,3,17,1,9,1,24,1,1,4,2,2,4,1,2,7,1,1,1,3,1,2,2,4,15,1, + 1,2,1,1,2,1,5,2,5,20,2,5,9,1,10,8,7,6,1,1,1,1,1,1,6,2,1,2,8,1,1,1,1,5,1,1,3,1,1,1,1,3,1,1,12,4,1,3,1,1,1,1,1,10,3,1,7,5,13,1,2,3,4,6,1,1,30, + 2,9,9,1,15,38,11,3,1,8,24,7,1,9,8,10,2,1,9,31,2,13,6,2,9,4,49,5,2,15,2,1,10,2,1,1,1,2,2,6,15,30,35,3,14,18,8,1,16,10,28,12,19,45,38,1,3,2,3, + 13,2,1,7,3,6,5,3,4,3,1,5,7,8,1,5,3,18,5,3,6,1,21,4,24,9,24,40,3,14,3,21,3,2,1,2,4,2,3,1,15,15,6,5,1,1,3,1,5,6,1,9,7,3,3,2,1,4,3,8,21,5,16,4, + 5,2,10,11,11,3,6,3,2,9,3,6,13,1,2,1,1,1,1,11,12,6,6,1,4,2,6,5,2,1,1,3,3,6,13,3,1,1,5,1,2,3,3,14,2,1,2,2,2,5,1,9,5,1,1,6,12,3,12,3,4,13,2,14, + 2,8,1,17,5,1,16,4,2,2,21,8,9,6,23,20,12,25,19,9,38,8,3,21,40,25,33,13,4,3,1,4,1,2,4,1,2,5,26,2,1,1,2,1,3,6,2,1,1,1,1,1,1,2,3,1,1,1,9,2,3,1,1, + 1,3,6,3,2,1,1,6,6,1,8,2,2,2,1,4,1,2,3,2,7,3,2,4,1,2,1,2,2,1,1,1,1,1,3,1,2,5,4,10,9,4,9,1,1,1,1,1,1,5,3,2,1,6,4,9,6,1,10,2,31,17,8,3,7,5,40,1, + 7,7,1,6,5,2,10,7,8,4,15,39,25,6,28,47,18,10,7,1,3,1,1,2,1,1,1,3,3,3,1,1,1,3,4,2,1,4,1,3,6,10,7,8,6,2,2,1,3,3,2,5,8,7,9,12,2,15,1,1,4,1,2,1,1, + 1,3,2,1,3,3,5,6,2,3,2,10,1,4,2,8,1,1,1,11,6,1,21,4,16,3,1,3,1,4,2,3,6,5,1,3,1,1,3,3,4,6,1,1,10,4,2,7,10,4,7,4,2,9,4,3,1,1,1,4,1,8,3,4,1,3,1, + 6,1,4,2,1,4,7,2,1,8,1,4,5,1,1,2,2,4,6,2,7,1,10,1,1,3,4,11,10,8,21,4,6,1,3,5,2,1,2,28,5,5,2,3,13,1,2,3,1,4,2,1,5,20,3,8,11,1,3,3,3,1,8,10,9,2, + 10,9,2,3,1,1,2,4,1,8,3,6,1,7,8,6,11,1,4,29,8,4,3,1,2,7,13,1,4,1,6,2,6,12,12,2,20,3,2,3,6,4,8,9,2,7,34,5,1,18,6,1,1,4,4,5,7,9,1,2,2,4,3,4,1,7, + 2,2,2,6,2,3,25,5,3,6,1,4,6,7,4,2,1,4,2,13,6,4,4,3,1,5,3,4,4,3,2,1,1,4,1,2,1,1,3,1,11,1,6,3,1,7,3,6,2,8,8,6,9,3,4,11,3,2,10,12,2,5,11,1,6,4,5, + 3,1,8,5,4,6,6,3,5,1,1,3,2,1,2,2,6,17,12,1,10,1,6,12,1,6,6,19,9,6,16,1,13,4,4,15,7,17,6,11,9,15,12,6,7,2,1,2,2,15,9,3,21,4,6,49,18,7,3,2,3,1, + 6,8,2,2,6,2,9,1,3,6,4,4,1,2,16,2,5,2,1,6,2,3,5,3,1,2,5,1,2,1,9,3,1,8,6,4,8,11,3,1,1,1,1,3,1,13,8,4,1,3,2,2,1,4,1,11,1,5,2,1,5,2,5,8,6,1,1,7, + 4,3,8,3,2,7,2,1,5,1,5,2,4,7,6,2,8,5,1,11,4,5,3,6,18,1,2,13,3,3,1,21,1,1,4,1,4,1,1,1,8,1,2,2,7,1,2,4,2,2,9,2,1,1,1,4,3,6,3,12,5,1,1,1,5,6,3,2, + 4,8,2,2,4,2,7,1,8,9,5,2,3,2,1,3,2,13,7,14,6,5,1,1,2,1,4,2,23,2,1,1,6,3,1,4,1,15,3,1,7,3,9,14,1,3,1,4,1,1,5,8,1,3,8,3,8,15,11,4,14,4,4,2,5,5, + 1,7,1,6,14,7,7,8,5,15,4,8,6,5,6,2,1,13,1,20,15,11,9,2,5,6,2,11,2,6,2,5,1,5,8,4,13,19,25,4,1,1,11,1,34,2,5,9,14,6,2,2,6,1,1,14,1,3,14,13,1,6, + 12,21,14,14,6,32,17,8,32,9,28,1,2,4,11,8,3,1,14,2,5,15,1,1,1,1,3,6,4,1,3,4,11,3,1,1,11,30,1,5,1,4,1,5,8,1,1,3,2,4,3,17,35,2,6,12,17,3,1,6,2, + 1,1,12,2,7,3,3,2,1,16,2,8,3,6,5,4,7,3,3,8,1,9,8,5,1,2,1,3,2,8,1,2,9,12,1,1,2,3,8,3,24,12,4,3,7,5,8,3,3,3,3,3,3,1,23,10,3,1,2,2,6,3,1,16,1,16, + 22,3,10,4,11,6,9,7,7,3,6,2,2,2,4,10,2,1,1,2,8,7,1,6,4,1,3,3,3,5,10,12,12,2,3,12,8,15,1,1,16,6,6,1,5,9,11,4,11,4,2,6,12,1,17,5,13,1,4,9,5,1,11, + 2,1,8,1,5,7,28,8,3,5,10,2,17,3,38,22,1,2,18,12,10,4,38,18,1,4,44,19,4,1,8,4,1,12,1,4,31,12,1,14,7,75,7,5,10,6,6,13,3,2,11,11,3,2,5,28,15,6,18, + 18,5,6,4,3,16,1,7,18,7,36,3,5,3,1,7,1,9,1,10,7,2,4,2,6,2,9,7,4,3,32,12,3,7,10,2,23,16,3,1,12,3,31,4,11,1,3,8,9,5,1,30,15,6,12,3,2,2,11,19,9, + 14,2,6,2,3,19,13,17,5,3,3,25,3,14,1,1,1,36,1,3,2,19,3,13,36,9,13,31,6,4,16,34,2,5,4,2,3,3,5,1,1,1,4,3,1,17,3,2,3,5,3,1,3,2,3,5,6,3,12,11,1,3, + 1,2,26,7,12,7,2,14,3,3,7,7,11,25,25,28,16,4,36,1,2,1,6,2,1,9,3,27,17,4,3,4,13,4,1,3,2,2,1,10,4,2,4,6,3,8,2,1,18,1,1,24,2,2,4,33,2,3,63,7,1,6, + 40,7,3,4,4,2,4,15,18,1,16,1,1,11,2,41,14,1,3,18,13,3,2,4,16,2,17,7,15,24,7,18,13,44,2,2,3,6,1,1,7,5,1,7,1,4,3,3,5,10,8,2,3,1,8,1,1,27,4,2,1, + 12,1,2,1,10,6,1,6,7,5,2,3,7,11,5,11,3,6,6,2,3,15,4,9,1,1,2,1,2,11,2,8,12,8,5,4,2,3,1,5,2,2,1,14,1,12,11,4,1,11,17,17,4,3,2,5,5,7,3,1,5,9,9,8, + 2,5,6,6,13,13,2,1,2,6,1,2,2,49,4,9,1,2,10,16,7,8,4,3,2,23,4,58,3,29,1,14,19,19,11,11,2,7,5,1,3,4,6,2,18,5,12,12,17,17,3,3,2,4,1,6,2,3,4,3,1, + 1,1,1,5,1,1,9,1,3,1,3,6,1,8,1,1,2,6,4,14,3,1,4,11,4,1,3,32,1,2,4,13,4,1,2,4,2,1,3,1,11,1,4,2,1,4,4,6,3,5,1,6,5,7,6,3,23,3,5,3,5,3,3,13,3,9,10, + 1,12,10,2,3,18,13,7,160,52,4,2,2,3,2,14,5,4,12,4,6,4,1,20,4,11,6,2,12,27,1,4,1,2,2,7,4,5,2,28,3,7,25,8,3,19,3,6,10,2,2,1,10,2,5,4,1,3,4,1,5, + 3,2,6,9,3,6,2,16,3,3,16,4,5,5,3,2,1,2,16,15,8,2,6,21,2,4,1,22,5,8,1,1,21,11,2,1,11,11,19,13,12,4,2,3,2,3,6,1,8,11,1,4,2,9,5,2,1,11,2,9,1,1,2, + 14,31,9,3,4,21,14,4,8,1,7,2,2,2,5,1,4,20,3,3,4,10,1,11,9,8,2,1,4,5,14,12,14,2,17,9,6,31,4,14,1,20,13,26,5,2,7,3,6,13,2,4,2,19,6,2,2,18,9,3,5, + 12,12,14,4,6,2,3,6,9,5,22,4,5,25,6,4,8,5,2,6,27,2,35,2,16,3,7,8,8,6,6,5,9,17,2,20,6,19,2,13,3,1,1,1,4,17,12,2,14,7,1,4,18,12,38,33,2,10,1,1, + 2,13,14,17,11,50,6,33,20,26,74,16,23,45,50,13,38,33,6,6,7,4,4,2,1,3,2,5,8,7,8,9,3,11,21,9,13,1,3,10,6,7,1,2,2,18,5,5,1,9,9,2,68,9,19,13,2,5, + 1,4,4,7,4,13,3,9,10,21,17,3,26,2,1,5,2,4,5,4,1,7,4,7,3,4,2,1,6,1,1,20,4,1,9,2,2,1,3,3,2,3,2,1,1,1,20,2,3,1,6,2,3,6,2,4,8,1,3,2,10,3,5,3,4,4, + 3,4,16,1,6,1,10,2,4,2,1,1,2,10,11,2,2,3,1,24,31,4,10,10,2,5,12,16,164,15,4,16,7,9,15,19,17,1,2,1,1,5,1,1,1,1,1,3,1,4,3,1,3,1,3,1,2,1,1,3,3,7, + 2,8,1,2,2,2,1,3,4,3,7,8,12,92,2,10,3,1,3,14,5,25,16,42,4,7,7,4,2,21,5,27,26,27,21,25,30,31,2,1,5,13,3,22,5,6,6,11,9,12,1,5,9,7,5,5,22,60,3,5, + 13,1,1,8,1,1,3,3,2,1,9,3,3,18,4,1,2,3,7,6,3,1,2,3,9,1,3,1,3,2,1,3,1,1,1,2,1,11,3,1,6,9,1,3,2,3,1,2,1,5,1,1,4,3,4,1,2,2,4,4,1,7,2,1,2,2,3,5,13, + 18,3,4,14,9,9,4,16,3,7,5,8,2,6,48,28,3,1,1,4,2,14,8,2,9,2,1,15,2,4,3,2,10,16,12,8,7,1,1,3,1,1,1,2,7,4,1,6,4,38,39,16,23,7,15,15,3,2,12,7,21, + 37,27,6,5,4,8,2,10,8,8,6,5,1,2,1,3,24,1,16,17,9,23,10,17,6,1,51,55,44,13,294,9,3,6,2,4,2,2,15,1,1,1,13,21,17,68,14,8,9,4,1,4,9,3,11,7,1,1,1, + 5,6,3,2,1,1,1,2,3,8,1,2,2,4,1,5,5,2,1,4,3,7,13,4,1,4,1,3,1,1,1,5,5,10,1,6,1,5,2,1,5,2,4,1,4,5,7,3,18,2,9,11,32,4,3,3,2,4,7,11,16,9,11,8,13,38, + 32,8,4,2,1,1,2,1,2,4,4,1,1,1,4,1,21,3,11,1,16,1,1,6,1,3,2,4,9,8,57,7,44,1,3,3,13,3,10,1,1,7,5,2,7,21,47,63,3,15,4,7,1,16,1,1,2,8,2,3,42,15,4, + 1,29,7,22,10,3,78,16,12,20,18,4,67,11,5,1,3,15,6,21,31,32,27,18,13,71,35,5,142,4,10,1,2,50,19,33,16,35,37,16,19,27,7,1,133,19,1,4,8,7,20,1,4, + 4,1,10,3,1,6,1,2,51,5,40,15,24,43,22928,11,1,13,154,70,3,1,1,7,4,10,1,2,1,1,2,1,2,1,2,2,1,1,2,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1, + 3,2,1,1,1,1,2,1,1, +}; + +// ----------------------------------------------------------------------------- + +enum { FONT_MAX_COLORS = 256}; +enum { FONT_MAX_STRING_LEN = 40000 }; // more glyphs than any reasonable person would show on the screen at once. you can only fit 20736 10x10 rects in a 1920x1080 window + +static unsigned font_palette[FONT_MAX_COLORS] = { + RGB4(248, 248, 242, 255), // foreground color + RGB4(249, 38, 114, 255), // operator + RGB4(174, 129, 255, 255), // numeric + RGB4(102, 217, 239, 255), // function + RGB4(249, 38, 114, 255), // keyword + RGB4(117, 113, 94, 255), // comment + RGB4(102, 217, 239, 255), // type + RGB4( 73, 72, 62, 255), // background color + RGB4( 39, 40, 34, 255), // clear color +}; + +typedef struct font_t { + bool initialized; + + //char filename[256]; + + // character info + // filled up by stb_truetype.h + stbtt_packedchar *cdata; + unsigned num_glyphs; + unsigned *cp2iter; + unsigned *iter2cp; + unsigned begin; // first glyph. used in cp2iter table to clamp into a lesser range + + // font info and data + int height; // bitmap height + int width; // bitmap width + float font_size; // font size in pixels (matches scale[0+1] size below) + float factor; // font factor (font_size / (ascent - descent)) + float scale[7]; // user defined font scale (match H1..H6 tags) + + // displacement info + float ascent; // max distance above baseline for all glyphs + float descent; // max distance below baseline for all glyphs + float linegap; // distance betwen ascent of next line and descent of current line + float linedist; // distance between the baseline of two lines (ascent - descent + linegap) + + // opengl stuff + GLuint vao; + GLuint program; + + // font bitmap texture + // generated using stb_truetype.h + GLuint texture_fontdata; + + // metadata texture. + // first row contains information on which parts of the bitmap correspond to a glyph. + // the second row contain information about the relative displacement of the glyph relative to the cursor position + GLuint texture_offsets; + + // color texture + // used to color each glyph individually, e.g. for syntax highlighting + GLuint texture_colors; + + // vbos + GLuint vbo_quad; // vec2: simply just a regular [0,1]x[0,1] quad + GLuint vbo_instances; // vec4: (char_pos_x, char_pos_y, char_index, color_index) + + // render state + renderstate_t rs; +} font_t; + +enum { FONTS_MAX = 10 }; + +static font_t fonts[FONTS_MAX] = {0}; + +static +void font_init() { + do_once { + font_face_from_mem(FONT_FACE1, bm_mini_ttf,countof(bm_mini_ttf), 42.5f, 0); + font_face_from_mem(FONT_FACE2, bm_mini_ttf,countof(bm_mini_ttf), 42.5f, 0); + font_face_from_mem(FONT_FACE3, bm_mini_ttf,countof(bm_mini_ttf), 42.5f, 0); + font_face_from_mem(FONT_FACE4, bm_mini_ttf,countof(bm_mini_ttf), 42.5f, 0); + font_face_from_mem(FONT_FACE5, bm_mini_ttf,countof(bm_mini_ttf), 42.5f, 0); + font_face_from_mem(FONT_FACE6, bm_mini_ttf,countof(bm_mini_ttf), 42.5f, 0); + font_face_from_mem(FONT_FACE7, bm_mini_ttf,countof(bm_mini_ttf), 42.5f, 0); + font_face_from_mem(FONT_FACE8, bm_mini_ttf,countof(bm_mini_ttf), 42.5f, 0); + font_face_from_mem(FONT_FACE9, bm_mini_ttf,countof(bm_mini_ttf), 42.5f, 0); + font_face_from_mem(FONT_FACE10,bm_mini_ttf,countof(bm_mini_ttf), 42.5f, 0); + } +} + +// Remap color within all existing color textures +void font_color(const char *tag, uint32_t color) { + font_init(); + + unsigned index = *tag - FONT_COLOR1[0]; + if( index < FONT_MAX_COLORS ) { + font_palette[index] = color; + + for( int i = 0; i < FONTS_MAX; ++i ) { + font_t *f = &fonts[i]; + if( f->initialized ) { + glActiveTexture(GL_TEXTURE2); + glBindTexture(GL_TEXTURE_1D, f->texture_colors); + glTexSubImage1D(GL_TEXTURE_1D, 0, 0, FONT_MAX_COLORS, GL_RGBA, GL_UNSIGNED_BYTE, font_palette); + } + } + } +} + +void ui_font() { + for( int i = 0; i < countof(fonts); ++i ) { + if( ui_collapse(va("Font %d", i), va("%p%d", &fonts[i], i) ) ) { + font_t *f = &fonts[i]; + ui_float("Ascent", &f->ascent); + ui_float("Descent", &f->descent); + ui_float("Line Gap", &f->linegap); + f->linedist = (f->ascent-f->descent+f->linegap); + ui_collapse_end(); + } + } +} + +void font_scale(const char *tag, int s, float v) { + font_init(); + + if (s < 0 || s >= 10) return; + + unsigned index = *tag - FONT_FACE1[0]; + if( index > FONTS_MAX ) return; + + font_t *f = &fonts[index]; + if (!f->initialized) return; + + f->scale[s] = v / f->font_size; +} + +void font_scales(const char *tag, float h1, float h2, float h3, float h4, float h5, float h6) { + font_init(); + + unsigned index = *tag - FONT_FACE1[0]; + if( index > FONTS_MAX ) return; + + font_t *f = &fonts[index]; + if (!f->initialized) return; + + f->scale[0] = h1 / f->font_size; + f->scale[1] = h1 / f->font_size; + f->scale[2] = h2 / f->font_size; + f->scale[3] = h3 / f->font_size; + f->scale[4] = h4 / f->font_size; + f->scale[5] = h5 / f->font_size; + f->scale[6] = h6 / f->font_size; +} + +// 1. Compile the shaders. +// 1. Call stb_truetype.h routines to read and parse a .ttf file. +// 1. Create a bitmap that is uploaded to the gpu using opengl. +// 1. Calculate and save a bunch of useful variables and put them in the global font variable. +void font_face_from_mem(const char *tag, const void *ttf_data, unsigned ttf_len, float font_size, unsigned flags) { + unsigned index = *tag - FONT_FACE1[0]; + if( index > FONTS_MAX ) return; + if( font_size <= 0 || font_size > 72 ) return; + if( !ttf_data || !ttf_len ) return; + + if(!(flags & FONT_EM)) + flags |= FONT_ASCII; // ensure this minimal range [0020-00FF] is almost always in + + font_t *f = &fonts[index]; + f->initialized = 1; + + // load .ttf into a bitmap using stb_truetype.h + int dim = flags & FONT_4096 ? 4096 : flags & FONT_2048 ? 2048 : flags & FONT_1024 ? 1024 : 512; + f->width = dim; + f->height = dim; + + // change size [h1(largest) to h3(regular) to h6(smallest)] + f->font_size = font_size; + f->scale[0] = 1.0000f; // H1 + f->scale[1] = 1.0000f; // H1 + f->scale[2] = 0.7500f; // H2 + f->scale[3] = 0.6600f; // H3 + f->scale[4] = 0.5000f; // H4 + f->scale[5] = 0.3750f; // H5 + f->scale[6] = 0.2500f; // H6 + + const char *vs = vfs_read("vs_font.glsl"); + const char *fs = vfs_read("fs_font.glsl"); + f->program = shader(vs, fs, "vertexPosition,instanceGlyph", "outColor", NULL); + + // figure out what ranges we're about to bake + #define MERGE_TABLE(table) do { \ + for( unsigned i = 0 ; table[i]; i += 2 ) { \ + uint64_t begin = table[i+0], end = table[i+1]; \ + for( unsigned j = begin; j <= end; ++j ) { \ + array_push(sorted, j); \ + } \ + } } while(0) + #define MERGE_PACKED_TABLE(codepoint_begin, table) do { \ + for( int i = 0, begin = codepoint_begin, end = countof(table); i < end; i++) { \ + array_push(sorted, (unsigned)(begin + table[i])); \ + begin += table[i]; \ + } } while(0) + + array(uint64_t) sorted = 0; + if(flags & FONT_ASCII) { MERGE_TABLE(table_common); } + if(flags & FONT_EM) { MERGE_TABLE(table_emoji); } + if(flags & FONT_EU) { MERGE_TABLE(table_eastern_europe); } + if(flags & FONT_RU) { MERGE_TABLE(table_western_europe); } + if(flags & FONT_EL) { MERGE_TABLE(table_western_europe); } + if(flags & FONT_AR) { MERGE_TABLE(table_middle_east); } + if(flags & FONT_HE) { MERGE_TABLE(table_middle_east); } + if(flags & FONT_TH) { MERGE_TABLE(table_thai); } + if(flags & FONT_VI) { MERGE_TABLE(table_vietnamese); } + if(flags & FONT_KR) { MERGE_TABLE(table_korean); } + if(flags & FONT_JP) { MERGE_TABLE(table_chinese_japanese_common); MERGE_PACKED_TABLE(0x4E00, packed_table_japanese); } + if(flags & FONT_ZH) { MERGE_TABLE(table_chinese_japanese_common); MERGE_PACKED_TABLE(0x4E00, packed_table_chinese); } // zh-simplified + if(flags & FONT_ZH) { MERGE_TABLE(table_chinese_punctuation); } // both zh-simplified and zh-full +// if(flags & FONT_ZH) { MERGE_TABLE(table_chinese_full); } // zh-full + array_sort(sorted, less_64_ptr); + array_unique(sorted, less_64_ptr); // sort + unique pass + + // pack and create bitmap + unsigned char *bitmap = (unsigned char*)MALLOC(f->height*f->width); + + int charCount = *array_back(sorted) - sorted[0] + 1; // 0xEFFFF; + f->cdata = (stbtt_packedchar*)CALLOC(1, sizeof(stbtt_packedchar) * charCount); + f->iter2cp = (unsigned*)MALLOC( sizeof(unsigned) * charCount ); + f->cp2iter = (unsigned*)MALLOC( sizeof(unsigned) * charCount ); + for( int i = 0; i < charCount; ++i ) + f->iter2cp[i] = f->cp2iter[i] = 0xFFFD; // default invalid glyph + + // find first char + { + stbtt_fontinfo info = {0}; + stbtt_InitFont(&info, ttf_data, stbtt_GetFontOffsetForIndex(ttf_data,0)); + + for( int i = 0, end = array_count(sorted); i < end; ++i ) { + unsigned glyph = sorted[i]; + if(!stbtt_FindGlyphIndex(&info, glyph)) continue; + f->begin = glyph; + break; + } + } + + stbtt_pack_context pc; + if( !stbtt_PackBegin(&pc, bitmap, f->width, f->height, 0, 1, NULL) ) { + PANIC("Failed to initialize atlas font"); + } + stbtt_PackSetOversampling(&pc, flags & FONT_OVERSAMPLE_X ? 2 : 1, flags & FONT_OVERSAMPLE_Y ? 2 : 1); /*useful on small fonts*/ + int count = 0; + for( int i = 0, num = array_count(sorted); i < num; ++i ) { + + uint64_t begin = sorted[i], end = sorted[i]; + while( i < (num-1) && (sorted[i+1]-sorted[i]) == 1 ) end = sorted[++i]; + //printf("(%d,%d)", (unsigned)begin, (unsigned)end); + + if( begin < f->begin ) continue; + + if( stbtt_PackFontRange(&pc, ttf_data, 0, f->font_size, begin, end - begin + 1, (stbtt_packedchar*)f->cdata + begin - f->begin) ) { + for( uint64_t cp = begin; cp <= end; ++cp ) { + // unicode->index runtime lookup + f->cp2iter[ cp - f->begin ] = count; + f->iter2cp[ count++ ] = cp; + } + } else { + PRINTF("!Failed to pack atlas font. Likely out of texture mem."); + } + } + stbtt_PackEnd(&pc); + f->num_glyphs = count; + + assert( f->num_glyphs < charCount ); + + array_free(sorted); + + // calculate vertical font metrics + stbtt_fontinfo info = {0}; + stbtt_InitFont(&info, ttf_data, stbtt_GetFontOffsetForIndex(ttf_data,0)); + + int a, d, l; + if (!stbtt_GetFontVMetricsOS2(&info, &a, &d, &l)) + stbtt_GetFontVMetrics(&info, &a, &d, &l); + + f->ascent = a; + f->descent = d; + f->linegap = l; + f->linedist = (a - d + l); + f->factor = (f->font_size / (f->ascent - f->descent)); + + // save some gpu memory by truncating unused vertical space in atlas texture + { + int max_y1 = 0; + for (int i = 0; i < f->num_glyphs; i++) { + int cp = f->iter2cp[i]; + if( cp == 0xFFFD ) continue; + stbtt_packedchar *cd = &f->cdata[ cp - f->begin ]; + if (cd->y1 > max_y1) { + max_y1 = cd->y1; + } + } + // cut away the unused part of the bitmap + f->height = max_y1+1; + } + + PRINTF("Font atlas size %dx%d (GL_R, %5.2fKiB) (%u glyphs)\n", f->width, f->height, f->width * f->height / 1024.f, f->num_glyphs); + + // vao + glGenVertexArrays(1, &f->vao); + glBindVertexArray(f->vao); + + // quad vbo setup, used for glyph vertex positions, + // just uv coordinates that will be stretched accordingly by the glyphs width and height + float v[] = {0,0, 1,0, 0,1, 0,1, 1,0, 1,1}; + + glGenBuffers(1, &f->vbo_quad); + glBindBuffer(GL_ARRAY_BUFFER, f->vbo_quad); + glBufferData(GL_ARRAY_BUFFER, sizeof(v), v, GL_STATIC_DRAW); + + glEnableVertexAttribArray(0); + glVertexAttribPointer(0,2,GL_FLOAT,GL_FALSE,0,(void*)0); + glVertexAttribDivisor(0, 0); + + // instance vbo setup: for glyph positions, glyph index and color index + glGenBuffers(1, &f->vbo_instances); + glBindBuffer(GL_ARRAY_BUFFER, f->vbo_instances); + glBufferData(GL_ARRAY_BUFFER, sizeof(float)*4*FONT_MAX_STRING_LEN, NULL, GL_DYNAMIC_DRAW); + + glEnableVertexAttribArray(1); + glVertexAttribPointer(1,4,GL_FLOAT,GL_FALSE,0,(void*)0); + glVertexAttribDivisor(1, 1); + // glEnable(GL_FRAMEBUFFER_SRGB); + + // setup and upload font bitmap texture + glGenTextures(1, &f->texture_fontdata); + glActiveTexture(GL_TEXTURE0); + glBindTexture(GL_TEXTURE_2D, f->texture_fontdata); + glTexImage2D(GL_TEXTURE_2D, 0, GL_RED, f->width, f->height, 0, GL_RED, GL_UNSIGNED_BYTE, bitmap); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); + + // last chance to inspect the font atlases + if( flag("--font-debug") ) + stbi_write_png(va("font_debug%d.png", index), f->width, f->height, 1, bitmap, 0); + + FREE(bitmap); + + // setup and upload font metadata texture + // used for lookup in the bitmap texture + glGenTextures(1, &f->texture_offsets); + glActiveTexture(GL_TEXTURE1); + glBindTexture(GL_TEXTURE_2D, f->texture_offsets); + + float *texture_offsets = (float*)MALLOC(sizeof(float)*8*f->num_glyphs); + + // remap larger 0xFFFF unicodes into smaller NUM_GLYPHS glyphs + for (int i = 0, count = 0; i < f->num_glyphs; i++) { + + unsigned cp = f->iter2cp[ i ]; + if(cp == 0xFFFD) continue; + + stbtt_packedchar *cd = &f->cdata[ cp - f->begin ]; +// if(cd->x1==cd->x0) { f->iter2cp[i] = f->cp2iter[cp - f->begin] = 0xFFFD; continue; } + + int k1 = 0*f->num_glyphs + count; + int k2 = 1*f->num_glyphs + count; ++count; + + texture_offsets[4*k1+0] = cd->x0/(double)f->width; + texture_offsets[4*k1+1] = cd->y0/(double)f->height; + texture_offsets[4*k1+2] = (cd->x1-cd->x0)/(double)f->width; + texture_offsets[4*k1+3] = (cd->y1-cd->y0)/(double)f->height; + + texture_offsets[4*k2+0] = cd->xoff/(double)f->width; + texture_offsets[4*k2+1] = cd->yoff/(double)f->height; + texture_offsets[4*k2+2] = cd->xoff2/(double)f->width; + texture_offsets[4*k2+3] = cd->yoff2/(double)f->height; + } + + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32F, f->num_glyphs, 2, 0, GL_RGBA, GL_FLOAT, texture_offsets); + + FREE(texture_offsets); + + // setup color texture + glGenTextures(1, &f->texture_colors); + glActiveTexture(GL_TEXTURE2); + glBindTexture(GL_TEXTURE_1D, f->texture_colors); + glTexImage1D(GL_TEXTURE_1D, 0, GL_RGBA, FONT_MAX_COLORS, 0, GL_RGBA, GL_UNSIGNED_BYTE, font_palette); + glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_WRAP_S, GL_REPEAT); + + // upload constant uniforms + glUseProgram(f->program); + glUniform1i(glGetUniformLocation(f->program, "sampler_font"), 0); + glUniform1i(glGetUniformLocation(f->program, "sampler_meta"), 1); + glUniform1i(glGetUniformLocation(f->program, "sampler_colors"), 2); + + glUniform2f(glGetUniformLocation(f->program, "res_bitmap"), f->width, f->height); + glUniform2f(glGetUniformLocation(f->program, "res_meta"), f->num_glyphs, 2); + glUniform1f(glGetUniformLocation(f->program, "num_colors"), FONT_MAX_COLORS); + (void)flags; + + // set up pipeline + f->rs = renderstate(); + f->rs.blend_enabled = 1; + f->rs.blend_func = GL_FUNC_ADD; + f->rs.blend_src = GL_SRC_ALPHA; + f->rs.blend_dst = GL_ONE_MINUS_SRC_ALPHA; + f->rs.scissor_test_enabled = 1; + f->rs.depth_test_enabled = 0; + f->rs.cull_face_enabled = 0; +} + +void font_face(const char *tag, const char *filename_ttf, float font_size, unsigned flags) { + font_init(); + + int len; + const char *buffer = vfs_load(filename_ttf, &len); + if( !buffer ) buffer = file_load(filename_ttf, &len); + + font_face_from_mem(tag, buffer,len, font_size, flags); +} + +static +void font_draw_cmd(font_t *f, const float *glyph_data, int glyph_idx, float factor, vec2 offset, vec4 rect) { + // Backup GL state + GLint last_program, last_vertex_array; + GLint last_texture0, last_texture1, last_texture2; + GLint last_blend_src, last_blend_dst; + GLint last_blend_equation_rgb, last_blend_equation_alpha; + + glGetIntegerv(GL_CURRENT_PROGRAM, &last_program); + glGetIntegerv(GL_VERTEX_ARRAY_BINDING, &last_vertex_array); + + glActiveTexture(GL_TEXTURE0); + glGetIntegerv(GL_TEXTURE_BINDING_2D, &last_texture0); + glActiveTexture(GL_TEXTURE1); + glGetIntegerv(GL_TEXTURE_BINDING_2D, &last_texture1); + glActiveTexture(GL_TEXTURE2); + glGetIntegerv(GL_TEXTURE_BINDING_1D, &last_texture2); + + glScissor(rect.x, window_height() - (rect.y+rect.w), rect.z, rect.w); + + glActiveTexture(GL_TEXTURE0); + glBindTexture(GL_TEXTURE_2D, f->texture_fontdata); + glActiveTexture(GL_TEXTURE1); + glBindTexture(GL_TEXTURE_2D, f->texture_offsets); + glActiveTexture(GL_TEXTURE2); + glBindTexture(GL_TEXTURE_1D, f->texture_colors); + + // update bindings + glBindVertexArray(f->vao); + + // update uniforms + glUseProgram(f->program); + glUniform1f(glGetUniformLocation(f->program, "scale_factor"), factor); + glUniform2fv(glGetUniformLocation(f->program, "string_offset"), 1, &offset.x); + glUniform1f(glGetUniformLocation(f->program, "offset_firstline"), f->ascent*f->factor); + + GLint dims[4] = {0}; + glGetIntegerv(GL_VIEWPORT, dims); + glUniform2f(glGetUniformLocation(f->program, "resolution"), dims[2], dims[3]); + + // actual uploading + glBindBuffer(GL_ARRAY_BUFFER, f->vbo_instances); + glBufferSubData(GL_ARRAY_BUFFER, 0, 4*4*glyph_idx, glyph_data); + + // setup pipeline + renderstate_apply(&f->rs); + + // actual drawing + glDrawArraysInstanced(GL_TRIANGLES, 0, 6, glyph_idx); + + // Restore modified GL state + glUseProgram(last_program); + + glActiveTexture(GL_TEXTURE0); + glBindTexture(GL_TEXTURE_2D, last_texture0); + glActiveTexture(GL_TEXTURE1); + glBindTexture(GL_TEXTURE_2D, last_texture1); + glActiveTexture(GL_TEXTURE2); + glBindTexture(GL_TEXTURE_1D, last_texture2); + + glBindVertexArray(last_vertex_array); +} + +// 1. call font_face() if it's the first time it's called. +// 1. parse the string and update the instance vbo, then upload it +// 1. draw the string +static +vec2 font_draw_ex(const char *text, vec2 offset, vec4 rect, const char *col, void (*draw_cmd)(font_t *,const float *,int,float,vec2,vec4)) { + font_init(); + + // sanity checks + int len = strlen(text); + if (len >= FONT_MAX_STRING_LEN) { + return vec2(0, 0); + } + + // pre-init + static __thread float *text_glyph_data; + do_once text_glyph_data = MALLOC(4 * FONT_MAX_STRING_LEN * sizeof(float)); + + // ready + font_t *f = &fonts[0]; + int S = 3; + uint32_t color = 0; + float X = 0, Y = 0, W = 0, L = f->ascent*f->factor*f->scale[S], LL = 0; // LL=largest linedist + offset.y = -offset.y; // invert y polarity + + // utf8 to utf32 + array(uint32_t) unicode = string32(text); + + // parse string + float *t = text_glyph_data; + for( int i = 0, end = array_count(unicode); i < end; ++i ) { + uint32_t ch = unicode[i]; + + if( ch == '\n' ) { + // change cursor, advance y, record largest x as width, increase height + if( X > W ) W = X; + X = 0.0; + Y -= f->linedist*f->factor*f->scale[S]; + // if (i+1==end) { //@hack: ensures we terminate the height at the correct position + // Y -= (f->descent+f->linegap)*f->factor*f->scale[S]; + // } + continue; + } + if( ch >= 1 && ch <= 6 ) { + // flush previous state + if(draw_cmd) draw_cmd(f, text_glyph_data, (t - text_glyph_data)/4, f->scale[S], offset, rect); + t = text_glyph_data; + + // reposition offset to align new baseline + // @fixme: + // offset.y += (f->linedist - f->linegap) * ( f->scale[ch] - f->scale[S] ); + + // change size + S = ch; + //@hack: use descent when we use >H4 + L = f->ascent*f->factor*f->scale[S]; + if(L > LL) LL = L; + continue; + } + if( ch >= 0x1a && ch <= 0x1f ) { + color = ch - 0x1a; + continue; + } + if( ch >= 0x10 && ch <= 0x19 ) { + if( fonts[ ch - 0x10 ].initialized) { + // flush previous state + if(draw_cmd) draw_cmd(f, text_glyph_data, (t - text_glyph_data)/4, f->scale[S], offset, rect); + t = text_glyph_data; + + // change face + f = &fonts[ ch - 0x10 ]; + L = f->ascent*f->factor*f->scale[S]; + if(L > LL) LL = L; + } + continue; + } + + if (!LL) + LL = L; + + // convert to vbo data + int cp = ch - f->begin; // f->cp2iter[ch - f->begin]; + //if(cp == 0xFFFD) continue; + //if (cp > f->num_glyphs) continue; + + *t++ = X; + *t++ = Y; + *t++ = f->cp2iter[cp]; + *t++ = col ? col[i] : color; + + X += f->cdata[cp].xadvance*f->scale[S]; + } + + if(draw_cmd) draw_cmd(f, text_glyph_data, (t - text_glyph_data)/4, f->scale[S], offset, rect); + + //if(strstr(text, "fps")) printf("(%f,%f) (%f) L:%f LINEDIST:%f\n", X, Y, W, L, f->linedist); + return abs2(vec2(W*W > X*X ? W : X, Y*Y > LL*LL ? Y : LL)); +} + +static vec2 gotoxy = {0}; + +// Return cursor +vec2 font_xy() { + return gotoxy; +} + +// Relocate cursor +void font_goto(float x, float y) { + gotoxy = vec2(x, y); +} + +// Print and linefeed. Text may include markup code +vec2 font_clip(const char *text, vec4 rect) { + int l=0,c=0,r=0,j=0,t=0,b=0,m=0,B=0; + + while ( text[0] == FONT_LEFT[0] ) { + int has_set=0; + if (text[1] == FONT_LEFT[1]) l = 1, has_set=1; + if (text[1] == FONT_CENTER[1]) c = 1, has_set=1; + if (text[1] == FONT_RIGHT[1]) r = 1, has_set=1; + if (text[1] == FONT_JUSTIFY[1]) j = 1, has_set=1; + if (text[1] == FONT_TOP[1]) t = 1, has_set=1; + if (text[1] == FONT_BOTTOM[1]) b = 1, has_set=1; + if (text[1] == FONT_MIDDLE[1]) m = 1, has_set=1; + if (text[1] == FONT_BASELINE[1]) B = 1, has_set=1; + if (!has_set) break; + else text += 2; + } + + int num_newlines = 0; + for (int i = 0, end = strlen(text); i < end; ++i) { + if (text[i] == '\n') ++num_newlines; + } + + if (num_newlines > 1) { + vec2 text_dims = font_rect(text); + char tags[4] = {0}; + int t=0; + while (*text) { + char ch = *text; + + if( (ch >= 1 && ch <= 6) || + (ch >= 0x1a && ch <= 0x1f) || + (ch >= 0x10 && ch <= 0x19)) { + if (t < sizeof(tags)) tags[t++] = ch; + } + else break; + ++text; + } + array(char *) lines = strsplit(text, "\n"); + if (b) { + gotoxy.y += (rect.w - text_dims.y); + } + if (m) { + gotoxy.y += (rect.w/2. - text_dims.y/2.); + } + if (B) { + gotoxy.y += (rect.w/2. - text_dims.y/1.); + } + for (int i = 0; i < array_count(lines); i++) { + char *line = va("%s%s\n", tags, lines[i]); + vec2 text_rect = font_rect(line); + if( l || c || r ) { + gotoxy.x = l ? rect.x : r ? ((rect.x+rect.z) - text_rect.x) : rect.x+rect.z/2. - text_rect.x/2.; + } else if (j) { + float words_space = 0.0f; + array(char *) words = strsplit(lines[i], " "); + for (int k = 0; k < array_count(words); ++k) { + words_space += font_rect(words[k]).x; + } + if (array_count(words) == 0) { + gotoxy.y += text_rect.y; + continue; + } + float extra_space = rect.z - words_space; + int gaps = array_count(words) - 1; + float space_offset = gaps > 0 ? extra_space / (float)gaps : 0; + for (int k = 0; k < array_count(words); ++k) { + vec2 dims = font_draw_ex(va("%s%s", tags, words[k]), gotoxy, rect, NULL, font_draw_cmd); + gotoxy.x += dims.x + space_offset; + } + gotoxy.x = rect.x; + } + + if (!j) { + font_draw_ex(line, gotoxy, rect, NULL, font_draw_cmd); + } + + gotoxy.y += text_rect.y; + } + return text_dims; + } else { + if( l || c || r ) { + vec2 text_rect = font_rect(text); + gotoxy.x = l ? rect.x : r ? ((rect.x+rect.z) - text_rect.x) : rect.x+rect.z/2. - text_rect.x/2.; + } + if( t || b || m || B ) { + vec2 text_rect = font_rect(text); + gotoxy.y = t ? rect.y : b ? ((rect.y+rect.w) - text_rect.y) : m ? rect.y+rect.w/2.-text_rect.y/2. : rect.y+rect.w/2.-text_rect.y/1; + } + vec2 dims = font_draw_ex(text, gotoxy, rect, NULL, font_draw_cmd); + gotoxy.y += strchr(text, '\n') ? dims.y : 0; + gotoxy.x += !strchr(text, '\n') ? dims.x : 0; + return dims; + } +} + +vec2 font_print(const char *text) { + vec4 dims = {0, 0, window_width(), window_height()}; + return font_clip(text, dims); +} + +const char *font_wrap(const char *text, float max_width) { + // return early if the text fits the max_width already + if (font_rect(text).x <= max_width) { + return text; + } + + // skip alignment flags and collect tags + while ( text[0] == FONT_LEFT[0] ) { + int has_set=0; + if (text[1] == FONT_LEFT[1]) has_set=1; + if (text[1] == FONT_CENTER[1]) has_set=1; + if (text[1] == FONT_RIGHT[1]) has_set=1; + if (text[1] == FONT_JUSTIFY[1]) has_set=1; + if (text[1] == FONT_TOP[1]) has_set=1; + if (text[1] == FONT_BOTTOM[1]) has_set=1; + if (text[1] == FONT_MIDDLE[1]) has_set=1; + if (text[1] == FONT_BASELINE[1]) has_set=1; + if (!has_set) break; + else text += 2; + } + + char tags[4] = {0}; + int t=0; + while (*text) { + char ch = *text; + + if( (ch >= 1 && ch <= 6) || + (ch >= 0x1a && ch <= 0x1f) || + (ch >= 0x10 && ch <= 0x19)) { + if (t < sizeof(tags)) tags[t++] = ch; + } + else break; + ++text; + } + + array(char*) words = strsplit(text, " "); + static __thread int slot = 0; + static __thread char buf[16][FONT_MAX_STRING_LEN] = {0}; + + int len = strlen(text) + array_count(words); + slot = (slot+1) % 16; + memset(buf[slot], 0, len+1); + + char *out = buf[slot]; + + float width = 0.0f; + for (int i = 0; i < array_count(words); ++i) { + char *word = words[i]; + float word_width = font_rect(va("%s%s ", tags, word)).x; + if (strstr(word, "\n")) { + width = word_width; + strcat(out, va("%s ", word)); + } else { + if (width+word_width > max_width) { + width = 0.0f; + strcat(out, "\n"); + } + width += word_width; + strcat(out, va("%s ", word)); + } + } + + // get rid of the space added at the end + out[strlen(out)] = 0; + + return out; +} + +// Print a code snippet with syntax highlighting +vec2 font_highlight(const char *text, const void *colors) { + vec4 screen_dim = {0, 0, window_width(), window_height()}; + vec2 dims = font_draw_ex(text, gotoxy, screen_dim, (const char *)colors, font_draw_cmd); + gotoxy.y += strchr(text, '\n') ? dims.y : 0; + gotoxy.x += !strchr(text, '\n') ? dims.x : 0; + return dims; +} + +// Calculate the size of a string, in the pixel size specified. Count stray newlines too. +vec2 font_rect(const char *str) { + vec4 dims = {0, 0, window_width(), window_height()}; + return font_draw_ex(str, gotoxy, dims, NULL, NULL); +} + +font_metrics_t font_metrics(const char *text) { + font_metrics_t m={0}; + int S = 3; + font_t *f = &fonts[0]; + + // utf8 to utf32 + array(uint32_t) unicode = string32(text); + + // parse string + for( int i = 0, end = array_count(unicode); i < end; ++i ) { + uint32_t ch = unicode[i]; + if( ch >= 1 && ch <= 6 ) { + S = ch; + continue; + } + if( ch >= 0x1a && ch <= 0x1f ) { + if( fonts[ ch - 0x1a ].initialized) { + // change face + f = &fonts[ ch - 0x1a ]; + } + continue; + } + } + + m.ascent = f->ascent*f->factor*f->scale[S]; + m.descent = f->descent*f->factor*f->scale[S]; + m.linegap = f->linegap*f->factor*f->scale[S]; + m.linedist = f->linedist*f->factor*f->scale[S]; + return m; +} + +void *font_colorize(const char *text, const char *comma_types, const char *comma_keywords) { + // reallocate memory + static __thread int slot = 0; + static __thread char *buf[16] = {0}; + static __thread array(char*) list[16] = {0}; + + slot = (slot+1) % 16; + buf[slot] = REALLOC(buf[slot], strlen(text)+1); + memset(buf[slot], 0, strlen(text)+1); + + // ready + char *col = buf[slot]; + char *str = STRDUP(text); + + // split inputs + array(char*) TYPES = strsplit(comma_types, ", "); + array(char*) KEYWORDS = strsplit(comma_keywords, ", "); + + // ignored characters + char delims[] = " ,(){}[];\t\n"; + int num_delims = strlen(delims); + + char operators[] = "/+-*<>=&|"; + int num_operators = strlen(operators); + + struct token { + char *start, *stop; + enum { + TOKEN_OTHER,TOKEN_OPERATOR,TOKEN_NUMERIC,TOKEN_FUNCTION, + TOKEN_KEYWORD,TOKEN_COMMENT,TOKEN_VARIABLE,TOKEN_UNSET + } type; + } tokens[9999]; // hurr + int num_tokens = 0; // running counter + + char *ptr = str; + while (*ptr) { + // skip delimiters + int is_delim = 0; + for (int i = 0; i < num_delims; i++) { + if (*ptr == delims[i]) { + is_delim = 1; + break; + } + } + + if (is_delim == 1) { + ptr++; + continue; + } + + // found a token! + char *start = ptr; + + if (*ptr == '/' && *(ptr+1) == '/') { + // found a line comment, go to end of line or end of file + while (*ptr != '\n' && *ptr != '\0') { + ptr++; + } + + tokens[num_tokens].start = start; + tokens[num_tokens].stop = ptr; + tokens[num_tokens].type = TOKEN_COMMENT; + num_tokens++; + + ptr++; + continue; + } + + if (*ptr == '/' && *(ptr+1) == '*') { + // found a block comment, go to end of line or end of file + while (!(*ptr == '*' && *(ptr+1) == '/') && *ptr != '\0') { + ptr++; + } + ptr++; + + tokens[num_tokens].start = start; + tokens[num_tokens].stop = ptr+1; + tokens[num_tokens].type = TOKEN_COMMENT; + num_tokens++; + + ptr++; + continue; + } + + // check if it's an operator + int is_operator = 0; + for (int i = 0; i < num_operators; i++) { + if (*ptr == operators[i]) { + is_operator = 1; + break; + } + } + + if (is_operator == 1) { + tokens[num_tokens].start = start; + tokens[num_tokens].stop = ptr+1; + tokens[num_tokens].type = TOKEN_OPERATOR; + num_tokens++; + ptr++; + continue; + } + + // it's either a name, type, a keyword, a function, or an names separated by an operator without spaces + while (*ptr) { + // check whether it's an operator stuck between two names + int is_operator2 = 0; + for (int i = 0; i < num_operators; i++) { + if (*ptr == operators[i]) { + is_operator2 = 1; + break; + } + } + + if (is_operator2 == 1) { + tokens[num_tokens].start = start; + tokens[num_tokens].stop = ptr; + tokens[num_tokens].type = TOKEN_UNSET; + num_tokens++; + break; + } + + // otherwise go until we find the next delimiter + int is_delim2 = 0; + for (int i = 0; i < num_delims; i++) { + if (*ptr == delims[i]) { + is_delim2 = 1; + break; + } + } + + if (is_delim2 == 1) { + tokens[num_tokens].start = start; + tokens[num_tokens].stop = ptr; + tokens[num_tokens].type = TOKEN_UNSET; + num_tokens++; + ptr++; + break; + } + + // did not find delimiter, check next char + ptr++; + } + } + + // determine the types of the unset tokens, i.e. either + // a name, a type, a keyword, or a function + int num_keywords = array_count(KEYWORDS); + int num_types = array_count(TYPES); + + for (int i = 0; i < num_tokens; i++) { + // TOKEN_OPERATOR and TOKEN_COMMENT should already be set, so skip those + if (tokens[i].type != TOKEN_UNSET) { + continue; + } + + char end_char = *tokens[i].stop; + + // temporarily null terminate at end of token, restored after parsing + *tokens[i].stop = '\0'; + + // parse + + // if it's a keyword + int is_keyword = 0; + for (int j = 0; j < num_keywords; j++) { + if (strcmp(tokens[i].start, KEYWORDS[j]) == 0) { + is_keyword = 1; + break; + } + } + if (is_keyword == 1) { + tokens[i].type = TOKEN_KEYWORD; + *tokens[i].stop = end_char; + continue; + } + + // Check if it's a function + float f; + if (end_char == '(') { + tokens[i].type = TOKEN_FUNCTION; + *tokens[i].stop = end_char; + continue; + } + + // or if it's a numeric value. catches both integers and floats + if (sscanf(tokens[i].start, "%f", &f) == 1) { + tokens[i].type = TOKEN_NUMERIC; + *tokens[i].stop = end_char; + continue; + } + + // if it's a variable type + int is_type = 0; + for (int j = 0; j < num_types; j++) { + if (strcmp(tokens[i].start, TYPES[j]) == 0) { + is_type = 1; + break; + } + } + if (is_type == 1) { + tokens[i].type = TOKEN_VARIABLE; + *tokens[i].stop = end_char; + continue; + } + + // otherwise it's a regular variable name + tokens[i].type = TOKEN_OTHER; + *tokens[i].stop = end_char; + } + + // print all tokens and their types + for (int i = 0; i < num_tokens; i++) { + + for (char *p = tokens[i].start; p != tokens[i].stop; p++) { + col[(p - str)] = tokens[i].type; + } + } + + FREE(str); + return col; +} + #line 0 #line 1 "v4k_gui.c" -// ---------------------------------------------------------------------------- -// game ui (utils) - -API void gui_drawrect( texture_t spritesheet, vec2 tex_start, vec2 tex_end, int rgba, vec2 start, vec2 end ); - -#define v42v2(rect) vec2(rect.x,rect.y), vec2(rect.z,rect.w) - -void gui_drawrect( texture_t texture, vec2 tex_start, vec2 tex_end, int rgba, vec2 start, vec2 end ) { - static renderstate_t rect_rs; - do_once { - rect_rs = renderstate(); - rect_rs.depth_test_enabled = false; - rect_rs.blend_enabled = true; - rect_rs.blend_src = GL_SRC_ALPHA; - rect_rs.blend_dst = GL_ONE_MINUS_SRC_ALPHA; - rect_rs.front_face = GL_CW; - } - static int program = -1, vbo = -1, vao = -1, u_tint = -1, u_has_tex = -1, u_window_width = -1, u_window_height = -1; - float gamma = 1; - vec2 dpi = ifdef(osx, window_dpi(), vec2(1,1)); - if( program < 0 ) { - const char* vs = vfs_read("shaders/rect_2d.vs"); - const char* fs = vfs_read("shaders/rect_2d.fs"); - - program = shader(vs, fs, "", "fragcolor" , NULL); - ASSERT(program > 0); - u_tint = glGetUniformLocation(program, "u_tint"); - u_has_tex = glGetUniformLocation(program, "u_has_tex"); - u_window_width = glGetUniformLocation(program, "u_window_width"); - u_window_height = glGetUniformLocation(program, "u_window_height"); - glGenVertexArrays( 1, (GLuint*)&vao ); - glGenBuffers(1, &vbo); - glBindBuffer(GL_ARRAY_BUFFER, vbo); - } - - start = mul2(start, dpi); - end = mul2(end, dpi); - - renderstate_apply(&rect_rs); - - GLenum texture_type = texture.flags & TEXTURE_ARRAY ? GL_TEXTURE_2D_ARRAY : GL_TEXTURE_2D; - glUseProgram( program ); - - glBindVertexArray( vao ); - - glActiveTexture( GL_TEXTURE0 ); - glBindTexture( texture_type, texture.id ); - - glUniform1i(u_has_tex, (texture.id != 0)); - glUniform1f(u_window_width, (float)window_width()); - glUniform1f(u_window_height, (float)window_height()); - - vec4 rgbaf = {((rgba>>24)&255)/255.f, ((rgba>>16)&255)/255.f,((rgba>>8)&255)/255.f,((rgba>>0)&255)/255.f}; - glUniform4fv(u_tint, GL_TRUE, &rgbaf.x); - - // normalize texture regions - if (texture.id != 0) { - tex_start.x /= texture.w; - tex_start.y /= texture.h; - tex_end.x /= texture.w; - tex_end.y /= texture.h; - } - - GLfloat vertices[] = { - // Positions // UVs - start.x, start.y, tex_start.x, tex_start.y, - end.x, start.y, tex_end.x, tex_start.y, - end.x, end.y, tex_end.x, tex_end.y, - start.x, start.y, tex_start.x, tex_start.y, - end.x, end.y, tex_end.x, tex_end.y, - start.x, end.y, tex_start.x, tex_end.y - }; - - glBindBuffer(GL_ARRAY_BUFFER, vbo); - glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW); - - glEnableVertexAttribArray(0); - glEnableVertexAttribArray(1); - glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 4 * sizeof(GLfloat), (void*)0); - glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 4 * sizeof(GLfloat), (void*)(2 * sizeof(GLfloat))); - - glDrawArrays( GL_TRIANGLES, 0, 6 ); - profile_incstat("Render.num_drawcalls", +1); - profile_incstat("Render.num_triangles", +2); - - glBindTexture( texture_type, 0 ); - glDisableVertexAttribArray(0); - glDisableVertexAttribArray(1); - glBindVertexArray( 0 ); - glBindBuffer(GL_ARRAY_BUFFER, 0); - glUseProgram( 0 ); -} - -// ---------------------------------------------------------------------------- -// game ui - -typedef union gui_state_t { - struct { - bool held; - bool hover; - }; -} gui_state_t; - -static __thread array(guiskin_t) skins=0; -static __thread guiskin_t *last_skin=0; -static __thread map(int, gui_state_t) ctl_states=0; //@leak -static __thread array(vec4) scissor_rects=0; -static __thread bool any_widget_used=0; - -void gui_pushskin(guiskin_t skin) { - array_push(skins, skin); - last_skin = array_back(skins); -} - -void gui_popskin() { - if (!last_skin) return; - if (last_skin->free) last_skin->free(last_skin->userdata); - array_pop(skins); - last_skin = array_count(skins) ? array_back(skins) : NULL; -} - -void *gui_userdata() { - return last_skin->userdata; -} - -vec2 gui_getskinsize(const char *skin, const char *fallback) { - vec2 size={0}; - if (last_skin->getskinsize) last_skin->getskinsize(last_skin->userdata, skin, fallback, &size); - return size; -} - -unsigned gui_getskincolor(const char *skin, const char *fallback) { - unsigned color = 0xFFFFFFFF; - if (last_skin->getskincolor) last_skin->getskincolor(last_skin->userdata, skin, fallback, &color); - return color; -} - -bool gui_ismouseinrect(const char *skin, const char *fallback, vec4 rect) { - if (last_skin->ismouseinrect) return last_skin->ismouseinrect(last_skin->userdata, skin, fallback, rect); - return false; -} - -vec4 gui_getscissorrect(const char *skin, const char *fallback, vec4 rect) { - vec4 scissor = rect; - if (last_skin->getscissorrect) last_skin->getscissorrect(last_skin->userdata, skin, fallback, rect, &scissor); - return scissor; -} - -static -gui_state_t *gui_getstate(int id) { - if (!ctl_states) map_init(ctl_states, less_int, hash_int); - return map_find_or_add(ctl_states, id, (gui_state_t){0}); -} - -void gui_panel_id(int id, vec4 rect, const char *skin) { - (void)id; - vec4 scissor={0, 0, window_width(), window_height()}; - if (last_skin->drawrect) last_skin->drawrect(last_skin->userdata, skin, NULL, rect); - scissor = gui_getscissorrect(skin, NULL, rect); - - if (!array_count(scissor_rects)) - glEnable(GL_SCISSOR_TEST); - glScissor(scissor.x, window_height()-scissor.w-scissor.y, scissor.z, scissor.w); - array_push(scissor_rects, scissor); -} - -void gui_panel_end() { - ASSERT(array_count(scissor_rects)); - array_pop(scissor_rects); - if (array_count(scissor_rects)) { - vec4 scissor = *array_back(scissor_rects); - glScissor(scissor.x, scissor.y, scissor.z, scissor.w); - } else { - glDisable(GL_SCISSOR_TEST); - } -} - -bool gui_button_id(int id, vec4 r, const char *skin) { - gui_state_t *entry = gui_getstate(id); - bool was_clicked=0; - - skin=skin?skin:"button"; - char *btn = va("%s%s", skin, entry->held?"_press":entry->hover?"_hover":""); - if (gui_ismouseinrect(btn, skin, r)) { - if (input_up(MOUSE_L) && entry->held) { - was_clicked=1; - } - - if (!any_widget_used) { - any_widget_used = entry->held = input_held(MOUSE_L); - entry->hover = true; - } - } - else { - entry->hover = false; - } - - if (input_up(MOUSE_L) && entry->held) { - entry->held = false; - any_widget_used = false; - } - - if (last_skin->drawrect) last_skin->drawrect(last_skin->userdata, btn, skin, r); - - return was_clicked; -} - -bool gui_button_label_id(int id, const char *text, vec4 rect, const char *skin) { - gui_state_t *entry = gui_getstate(id); - bool state = gui_button_id(id, rect, skin); - vec2 buttonsize={0}; - skin=skin?skin:"button"; - char *btn = va("%s%s", skin, entry->held?"_press":entry->hover?"_hover":""); - buttonsize = gui_getskinsize(btn, skin); - - vec2 textsize = font_rect(text); - vec4 pos; - pos.x = rect.x + max(buttonsize.x*.5f, rect.z*.5f) - textsize.x*.5f; - pos.y = rect.y + max(buttonsize.y*.5f, rect.w*.5f) - textsize.y*.5f; - gui_label(btn, text, pos); - return state; -} - -static -float slider2posx(float min, float max, float value, float step, float w) { - float norm = value - min; - float range = max - min; - float rel = norm / range; - float res = w * rel; - return step==0.0f?res:(round(res/step)*step); -} - -static -float posx2slider(vec4 rect, float min, float max, float xpos, float step) { - xpos = clampf(xpos, rect.x, rect.x+rect.z); - double rel = (xpos - rect.x) / rect.z; - float res = min + (rel * (max - min)); - return step==0.0f?res:(round(res/step)*step); -} - -bool gui_slider_id(int id, vec4 rect, const char *skin, float min, float max, float step, float *value) { - gui_state_t *entry = gui_getstate(id); - - skin = skin?skin:"slider"; - char *cursorskin = va("%s_cursor%s", skin, entry->held?"_press":entry->hover?"_hover":""); - char *fbcursor = va("%s_cursor", skin); - if (gui_ismouseinrect(skin, NULL, rect) && !any_widget_used) { - any_widget_used = entry->held = input_held(MOUSE_L); - entry->hover = true; - } - else if (input_up(MOUSE_L) && entry->held) { - entry->held = false; - any_widget_used = false; - } - else { - entry->hover = false; - } - - float old_value = *value; - if (last_skin->drawrect) last_skin->drawrect(last_skin->userdata, skin, NULL, rect); - - vec2 slidersize={0}, cursorsize={0}; - vec4 usablerect = gui_getscissorrect(skin, NULL, rect); - slidersize = gui_getskinsize(skin, NULL); - cursorsize = gui_getskinsize(cursorskin, fbcursor); - if (entry->held) { - *value = posx2slider(usablerect, min, max, input(MOUSE_X), step); - } - float sliderx = slider2posx(min, max, *value, step, usablerect.z); - vec2 cursorpos = vec2(sliderx+(usablerect.x-rect.x)-cursorsize.x*.5f, (slidersize.y*.5f - cursorsize.y*.5f)); - vec4 cursorrect = rect; - cursorrect.x += cursorpos.x; - cursorrect.y += cursorpos.y; - cursorrect.z = cursorsize.x; - cursorrect.w = max(cursorsize.y, rect.w); - if (last_skin->drawrect) last_skin->drawrect(last_skin->userdata, cursorskin, fbcursor, cursorrect); - - return entry->held && (old_value!=*value); -} - -bool gui_slider_label_id(int id, const char *text, vec4 rect, const char *skin, float min, float max, float step, float *value) { - bool state = gui_slider_id(id, rect, skin, min, max, step, value); - vec2 slidersize={0}; - skin=skin?skin:"slider"; - slidersize = gui_getskinsize(skin, NULL); - - vec2 textsize = font_rect(text); - vec4 pos; - pos.x = rect.x + max(slidersize.x, rect.z) + 8 /*padding*/; - pos.y = rect.y + max(slidersize.y*.5f, rect.w*.5f) - textsize.y*.5f; - gui_label(skin, text, pos); - return state; -} - -void gui_rect_id(int id, vec4 r, const char *skin) { - (void)id; - if (last_skin->drawrect) last_skin->drawrect(last_skin->userdata, skin, NULL, r); -} - -void gui_label_id(int id, const char *skin, const char *text, vec4 rect) { - (void)id; - font_color(FONT_COLOR6, gui_getskincolor(skin, NULL)); - font_goto(rect.x, rect.y); - font_print(va(FONT_COLOR6 "%s", text)); -} - -/* skinned */ - -static -void skinned_free(void* userdata) { - skinned_t *a = C_CAST(skinned_t*, userdata); - atlas_destroy(&a->atlas); - FREE(a); -} - -static -atlas_slice_frame_t *skinned_getsliceframe(atlas_t *a, const char *name) { - if (!name) return NULL; - for (int i = 0; i < array_count(a->slices); i++) - if (!strcmp(quark_string(&a->db, a->slices[i].name), name)) - return &a->slice_frames[a->slices[i].frames[0]]; - // PRINTF("slice name: '%s' is missing in atlas!\n", name); - return NULL; -} - -static -void skinned_getskincolor(void *userdata, const char *skin, const char *fallback, unsigned *color) { - skinned_t *a = C_CAST(skinned_t*, userdata); - atlas_slice_frame_t *f = skinned_getsliceframe(&a->atlas, skin); - if (!f && fallback) f = skinned_getsliceframe(&a->atlas, fallback); - if (!f) return; - - if (f->text && f->text[0] == '#') *color = atorgba(f->text); -} - -static -void skinned_draw_missing_rect(vec4 r) { - vec4 size = vec4(0, 0, texture_checker().w, texture_checker().h); - gui_drawrect(texture_checker(), v42v2(size), 0x800080FF, v42v2(r)); -} - -static -bool skinned_ismouseinrect(void *userdata, const char *skin, const char *fallback, vec4 r) { - skinned_t *a = C_CAST(skinned_t*, userdata); - atlas_slice_frame_t *f = skinned_getsliceframe(&a->atlas, skin); - if (!f && fallback) f = skinned_getsliceframe(&a->atlas, fallback); - if (!f) return false; - - vec4 outer = f->bounds; - r.x -= f->pivot.x*a->scale; - r.y -= f->pivot.y*a->scale; - r.z += r.x; - r.w += r.y; - - if ((r.z-r.x) < (outer.z-outer.x) * a->scale) { - r.z = r.x + (outer.z-outer.x) * a->scale; - } - if ((r.w-r.y) < (outer.w-outer.y) * a->scale) { - r.w = r.y + (outer.w-outer.y) * a->scale; - } - - return (input(MOUSE_X) > r.x && input(MOUSE_X) < r.z && input(MOUSE_Y) > r.y && input(MOUSE_Y) < r.w); -} - -static -void skinned_draw_sprite(float scale, atlas_t *a, atlas_slice_frame_t *f, vec4 r) { - vec4 outer = f->bounds; - r.x -= f->pivot.x*scale; - r.y -= f->pivot.y*scale; - r.z += r.x; - r.w += r.y; - - // Ensure dest rectangle is large enough to render the whole element - if ((r.z-r.x) < (outer.z-outer.x) * scale) { - r.z = r.x + (outer.z-outer.x) * scale; - } - if ((r.w-r.y) < (outer.w-outer.y) * scale) { - r.w = r.y + (outer.w-outer.y) * scale; - } - - if (!f->has_9slice) { - gui_drawrect(a->tex, v42v2(f->bounds), 0xFFFFFFFF, v42v2(r)); - return; - } - - vec4 core = f->core; - core.x += outer.x; - core.y += outer.y; - core.z += outer.x; - core.w += outer.y; - - // Define the 9 slices - vec4 top_left_slice = {outer.x, outer.y, core.x, core.y}; - vec4 top_middle_slice = {core.x, outer.y, core.z, core.y}; - vec4 top_right_slice = {core.z, outer.y, outer.z, core.y}; - - vec4 middle_left_slice = {outer.x, core.y, core.x, core.w}; - vec4 center_slice = core; - vec4 middle_right_slice = {core.z, core.y, outer.z, core.w}; - - vec4 bottom_left_slice = {outer.x, core.w, core.x, outer.w}; - vec4 bottom_middle_slice = {core.x, core.w, core.z, outer.w}; - vec4 bottom_right_slice = {core.z, core.w, outer.z, outer.w}; - - vec4 top_left = {r.x, r.y, r.x + (core.x - outer.x) * scale, r.y + (core.y - outer.y) * scale}; - vec4 top_right = {r.z - (outer.z - core.z) * scale, r.y, r.z, r.y + (core.y - outer.y) * scale}; - vec4 bottom_left = {r.x, r.w - (outer.w - core.w) * scale, r.x + (core.x - outer.x) * scale, r.w}; - vec4 bottom_right = {r.z - (outer.z - core.z) * scale, r.w - (outer.w - core.w) * scale, r.z, r.w}; - - vec4 top = {top_left.z, r.y, top_right.x, top_left.w}; - vec4 bottom = {bottom_left.z, bottom_left.y, bottom_right.x, r.w}; - vec4 left = {r.x, top_left.w, top_left.z, bottom_left.y}; - vec4 right = {top_right.x, top_right.w, r.z, bottom_right.y}; - - vec4 center = {top_left.z, top_left.w, top_right.x, bottom_right.y}; - - gui_drawrect(a->tex, v42v2(center_slice), 0xFFFFFFFF, v42v2(center)); - gui_drawrect(a->tex, v42v2(top_left_slice), 0xFFFFFFFF, v42v2(top_left)); - gui_drawrect(a->tex, v42v2(top_right_slice), 0xFFFFFFFF, v42v2(top_right)); - gui_drawrect(a->tex, v42v2(bottom_left_slice), 0xFFFFFFFF, v42v2(bottom_left)); - gui_drawrect(a->tex, v42v2(bottom_right_slice), 0xFFFFFFFF, v42v2(bottom_right)); - gui_drawrect(a->tex, v42v2(top_middle_slice), 0xFFFFFFFF, v42v2(top)); - gui_drawrect(a->tex, v42v2(bottom_middle_slice), 0xFFFFFFFF, v42v2(bottom)); - gui_drawrect(a->tex, v42v2(middle_left_slice), 0xFFFFFFFF, v42v2(left)); - gui_drawrect(a->tex, v42v2(middle_right_slice), 0xFFFFFFFF, v42v2(right)); -} - -static -void skinned_draw_rect(void* userdata, const char *skin, const char *fallback, vec4 r) { - skinned_t *a = C_CAST(skinned_t*, userdata); - - atlas_slice_frame_t *f = skinned_getsliceframe(&a->atlas, skin); - if (!f && fallback) f = skinned_getsliceframe(&a->atlas, fallback); - if (!f) skinned_draw_missing_rect(r); - else skinned_draw_sprite(a->scale, &a->atlas, f, r); -} - -void skinned_getskinsize(void *userdata, const char *skin, const char *fallback, vec2 *size) { - skinned_t *a = C_CAST(skinned_t*, userdata); - - atlas_slice_frame_t *f = skinned_getsliceframe(&a->atlas, skin); - if (!f && fallback) f = skinned_getsliceframe(&a->atlas, fallback); - if (f) { - size->x = (f->bounds.z-f->bounds.x)*a->scale; - size->y = (f->bounds.w-f->bounds.y)*a->scale; - } -} - -static -void skinned_getscissorrect(void* userdata, const char *skin, const char *fallback, vec4 rect, vec4 *dims) { - skinned_t *a = C_CAST(skinned_t*, userdata); - atlas_slice_frame_t *f = skinned_getsliceframe(&a->atlas, skin); - if (!f && fallback) f = skinned_getsliceframe(&a->atlas, fallback); - if (!f) return; - - *dims = rect; - - if (!f->has_9slice) return; - vec2 skinsize, coresize; - skinsize.x = (f->bounds.z-f->bounds.x)*a->scale; - skinsize.y = (f->bounds.w-f->bounds.y)*a->scale; - coresize.x = (f->core.z-f->core.x)*a->scale; - coresize.y = (f->core.w-f->core.y)*a->scale; - - dims->x += f->core.x*a->scale; - dims->y += f->core.y*a->scale; - dims->z -= (skinsize.x - coresize.x); - dims->w -= (skinsize.y - coresize.y); -} - -guiskin_t gui_skinned(const char *asefile, float scale) { - skinned_t *a = REALLOC(0, sizeof(skinned_t)); - a->atlas = atlas_create(asefile, 0); - a->scale = scale?scale:1.0f; - guiskin_t skin={0}; - skin.userdata = a; - skin.drawrect = skinned_draw_rect; - skin.getskinsize = skinned_getskinsize; - skin.getskincolor = skinned_getskincolor; - skin.ismouseinrect = skinned_ismouseinrect; - skin.getscissorrect = skinned_getscissorrect; - skin.free = skinned_free; - return skin; -} +// ---------------------------------------------------------------------------- +// game ui (utils) + +API void gui_drawrect( texture_t spritesheet, vec2 tex_start, vec2 tex_end, int rgba, vec2 start, vec2 end ); + +#define v42v2(rect) vec2(rect.x,rect.y), vec2(rect.z,rect.w) + +void gui_drawrect( texture_t texture, vec2 tex_start, vec2 tex_end, int rgba, vec2 start, vec2 end ) { + static renderstate_t rect_rs; + do_once { + rect_rs = renderstate(); + rect_rs.depth_test_enabled = false; + rect_rs.blend_enabled = true; + rect_rs.blend_src = GL_SRC_ALPHA; + rect_rs.blend_dst = GL_ONE_MINUS_SRC_ALPHA; + rect_rs.front_face = GL_CW; + } + static int program = -1, vbo = -1, vao = -1, u_tint = -1, u_has_tex = -1, u_window_width = -1, u_window_height = -1; + float gamma = 1; + vec2 dpi = ifdef(osx, window_dpi(), vec2(1,1)); + if( program < 0 ) { + const char* vs = vfs_read("shaders/rect_2d.vs"); + const char* fs = vfs_read("shaders/rect_2d.fs"); + + program = shader(vs, fs, "", "fragcolor" , NULL); + ASSERT(program > 0); + u_tint = glGetUniformLocation(program, "u_tint"); + u_has_tex = glGetUniformLocation(program, "u_has_tex"); + u_window_width = glGetUniformLocation(program, "u_window_width"); + u_window_height = glGetUniformLocation(program, "u_window_height"); + glGenVertexArrays( 1, (GLuint*)&vao ); + glGenBuffers(1, &vbo); + glBindBuffer(GL_ARRAY_BUFFER, vbo); + } + + start = mul2(start, dpi); + end = mul2(end, dpi); + + renderstate_apply(&rect_rs); + + GLenum texture_type = texture.flags & TEXTURE_ARRAY ? GL_TEXTURE_2D_ARRAY : GL_TEXTURE_2D; + glUseProgram( program ); + + glBindVertexArray( vao ); + + glActiveTexture( GL_TEXTURE0 ); + glBindTexture( texture_type, texture.id ); + + glUniform1i(u_has_tex, (texture.id != 0)); + glUniform1f(u_window_width, (float)window_width()); + glUniform1f(u_window_height, (float)window_height()); + + vec4 rgbaf = {((rgba>>24)&255)/255.f, ((rgba>>16)&255)/255.f,((rgba>>8)&255)/255.f,((rgba>>0)&255)/255.f}; + glUniform4fv(u_tint, GL_TRUE, &rgbaf.x); + + // normalize texture regions + if (texture.id != 0) { + tex_start.x /= texture.w; + tex_start.y /= texture.h; + tex_end.x /= texture.w; + tex_end.y /= texture.h; + } + + GLfloat vertices[] = { + // Positions // UVs + start.x, start.y, tex_start.x, tex_start.y, + end.x, start.y, tex_end.x, tex_start.y, + end.x, end.y, tex_end.x, tex_end.y, + start.x, start.y, tex_start.x, tex_start.y, + end.x, end.y, tex_end.x, tex_end.y, + start.x, end.y, tex_start.x, tex_end.y + }; + + glBindBuffer(GL_ARRAY_BUFFER, vbo); + glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW); + + glEnableVertexAttribArray(0); + glEnableVertexAttribArray(1); + glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 4 * sizeof(GLfloat), (void*)0); + glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 4 * sizeof(GLfloat), (void*)(2 * sizeof(GLfloat))); + + glDrawArrays( GL_TRIANGLES, 0, 6 ); + profile_incstat("Render.num_drawcalls", +1); + profile_incstat("Render.num_triangles", +2); + + glBindTexture( texture_type, 0 ); + glDisableVertexAttribArray(0); + glDisableVertexAttribArray(1); + glBindVertexArray( 0 ); + glBindBuffer(GL_ARRAY_BUFFER, 0); + glUseProgram( 0 ); +} + +// ---------------------------------------------------------------------------- +// game ui + +typedef union gui_state_t { + struct { + bool held; + bool hover; + }; +} gui_state_t; + +static __thread array(guiskin_t) skins=0; +static __thread guiskin_t *last_skin=0; +static __thread map(int, gui_state_t) ctl_states=0; //@leak +static __thread array(vec4) scissor_rects=0; +static __thread bool any_widget_used=0; + +void gui_pushskin(guiskin_t skin) { + array_push(skins, skin); + last_skin = array_back(skins); +} + +void gui_popskin() { + if (!last_skin) return; + if (last_skin->free) last_skin->free(last_skin->userdata); + array_pop(skins); + last_skin = array_count(skins) ? array_back(skins) : NULL; +} + +void *gui_userdata() { + return last_skin->userdata; +} + +vec2 gui_getskinsize(const char *skin, const char *fallback) { + vec2 size={0}; + if (last_skin->getskinsize) last_skin->getskinsize(last_skin->userdata, skin, fallback, &size); + return size; +} + +unsigned gui_getskincolor(const char *skin, const char *fallback) { + unsigned color = 0xFFFFFFFF; + if (last_skin->getskincolor) last_skin->getskincolor(last_skin->userdata, skin, fallback, &color); + return color; +} + +bool gui_ismouseinrect(const char *skin, const char *fallback, vec4 rect) { + if (last_skin->ismouseinrect) return last_skin->ismouseinrect(last_skin->userdata, skin, fallback, rect); + return false; +} + +vec4 gui_getscissorrect(const char *skin, const char *fallback, vec4 rect) { + vec4 scissor = rect; + if (last_skin->getscissorrect) last_skin->getscissorrect(last_skin->userdata, skin, fallback, rect, &scissor); + return scissor; +} + +static +gui_state_t *gui_getstate(int id) { + if (!ctl_states) map_init(ctl_states, less_int, hash_int); + return map_find_or_add(ctl_states, id, (gui_state_t){0}); +} + +void gui_panel_id(int id, vec4 rect, const char *skin) { + (void)id; + vec4 scissor={0, 0, window_width(), window_height()}; + if (last_skin->drawrect) last_skin->drawrect(last_skin->userdata, skin, NULL, rect); + scissor = gui_getscissorrect(skin, NULL, rect); + + if (!array_count(scissor_rects)) + glEnable(GL_SCISSOR_TEST); + glScissor(scissor.x, window_height()-scissor.w-scissor.y, scissor.z, scissor.w); + array_push(scissor_rects, scissor); +} + +void gui_panel_end() { + ASSERT(array_count(scissor_rects)); + array_pop(scissor_rects); + if (array_count(scissor_rects)) { + vec4 scissor = *array_back(scissor_rects); + glScissor(scissor.x, scissor.y, scissor.z, scissor.w); + } else { + glDisable(GL_SCISSOR_TEST); + } +} + +bool gui_button_id(int id, vec4 r, const char *skin) { + gui_state_t *entry = gui_getstate(id); + bool was_clicked=0; + + skin=skin?skin:"button"; + char *btn = va("%s%s", skin, entry->held?"_press":entry->hover?"_hover":""); + if (gui_ismouseinrect(btn, skin, r)) { + if (input_up(MOUSE_L) && entry->held) { + was_clicked=1; + } + + if (!any_widget_used) { + any_widget_used = entry->held = input_held(MOUSE_L); + entry->hover = true; + } + } + else { + entry->hover = false; + } + + if (input_up(MOUSE_L) && entry->held) { + entry->held = false; + any_widget_used = false; + } + + if (last_skin->drawrect) last_skin->drawrect(last_skin->userdata, btn, skin, r); + + return was_clicked; +} + +bool gui_button_label_id(int id, const char *text, vec4 rect, const char *skin) { + gui_state_t *entry = gui_getstate(id); + bool state = gui_button_id(id, rect, skin); + vec2 buttonsize={0}; + skin=skin?skin:"button"; + char *btn = va("%s%s", skin, entry->held?"_press":entry->hover?"_hover":""); + buttonsize = gui_getskinsize(btn, skin); + + vec2 textsize = font_rect(text); + vec4 pos; + pos.x = rect.x + max(buttonsize.x*.5f, rect.z*.5f) - textsize.x*.5f; + pos.y = rect.y + max(buttonsize.y*.5f, rect.w*.5f) - textsize.y*.5f; + gui_label(btn, text, pos); + return state; +} + +static +float slider2posx(float min, float max, float value, float step, float w) { + float norm = value - min; + float range = max - min; + float rel = norm / range; + float res = w * rel; + return step==0.0f?res:(round(res/step)*step); +} + +static +float posx2slider(vec4 rect, float min, float max, float xpos, float step) { + xpos = clampf(xpos, rect.x, rect.x+rect.z); + double rel = (xpos - rect.x) / rect.z; + float res = min + (rel * (max - min)); + return step==0.0f?res:(round(res/step)*step); +} + +bool gui_slider_id(int id, vec4 rect, const char *skin, float min, float max, float step, float *value) { + gui_state_t *entry = gui_getstate(id); + + skin = skin?skin:"slider"; + char *cursorskin = va("%s_cursor%s", skin, entry->held?"_press":entry->hover?"_hover":""); + char *fbcursor = va("%s_cursor", skin); + if (gui_ismouseinrect(skin, NULL, rect) && !any_widget_used) { + any_widget_used = entry->held = input_held(MOUSE_L); + entry->hover = true; + } + else if (input_up(MOUSE_L) && entry->held) { + entry->held = false; + any_widget_used = false; + } + else { + entry->hover = false; + } + + float old_value = *value; + if (last_skin->drawrect) last_skin->drawrect(last_skin->userdata, skin, NULL, rect); + + vec2 slidersize={0}, cursorsize={0}; + vec4 usablerect = gui_getscissorrect(skin, NULL, rect); + slidersize = gui_getskinsize(skin, NULL); + cursorsize = gui_getskinsize(cursorskin, fbcursor); + if (entry->held) { + *value = posx2slider(usablerect, min, max, input(MOUSE_X), step); + } + float sliderx = slider2posx(min, max, *value, step, usablerect.z); + vec2 cursorpos = vec2(sliderx+(usablerect.x-rect.x)-cursorsize.x*.5f, (slidersize.y*.5f - cursorsize.y*.5f)); + vec4 cursorrect = rect; + cursorrect.x += cursorpos.x; + cursorrect.y += cursorpos.y; + cursorrect.z = cursorsize.x; + cursorrect.w = max(cursorsize.y, rect.w); + if (last_skin->drawrect) last_skin->drawrect(last_skin->userdata, cursorskin, fbcursor, cursorrect); + + return entry->held && (old_value!=*value); +} + +bool gui_slider_label_id(int id, const char *text, vec4 rect, const char *skin, float min, float max, float step, float *value) { + bool state = gui_slider_id(id, rect, skin, min, max, step, value); + vec2 slidersize={0}; + skin=skin?skin:"slider"; + slidersize = gui_getskinsize(skin, NULL); + + vec2 textsize = font_rect(text); + vec4 pos; + pos.x = rect.x + max(slidersize.x, rect.z) + 8 /*padding*/; + pos.y = rect.y + max(slidersize.y*.5f, rect.w*.5f) - textsize.y*.5f; + gui_label(skin, text, pos); + return state; +} + +void gui_rect_id(int id, vec4 r, const char *skin) { + (void)id; + if (last_skin->drawrect) last_skin->drawrect(last_skin->userdata, skin, NULL, r); +} + +void gui_label_id(int id, const char *skin, const char *text, vec4 rect) { + (void)id; + font_color(FONT_COLOR6, gui_getskincolor(skin, NULL)); + font_goto(rect.x, rect.y); + font_print(va(FONT_COLOR6 "%s", text)); +} + +/* skinned */ + +static +void skinned_free(void* userdata) { + skinned_t *a = C_CAST(skinned_t*, userdata); + atlas_destroy(&a->atlas); + FREE(a); +} + +static +atlas_slice_frame_t *skinned_getsliceframe(atlas_t *a, const char *name) { + if (!name) return NULL; + for (int i = 0; i < array_count(a->slices); i++) + if (!strcmp(quark_string(&a->db, a->slices[i].name), name)) + return &a->slice_frames[a->slices[i].frames[0]]; + // PRINTF("slice name: '%s' is missing in atlas!\n", name); + return NULL; +} + +static +void skinned_getskincolor(void *userdata, const char *skin, const char *fallback, unsigned *color) { + skinned_t *a = C_CAST(skinned_t*, userdata); + atlas_slice_frame_t *f = skinned_getsliceframe(&a->atlas, skin); + if (!f && fallback) f = skinned_getsliceframe(&a->atlas, fallback); + if (!f) return; + + if (f->text && f->text[0] == '#') *color = atorgba(f->text); +} + +static +void skinned_draw_missing_rect(vec4 r) { + vec4 size = vec4(0, 0, texture_checker().w, texture_checker().h); + gui_drawrect(texture_checker(), v42v2(size), 0x800080FF, v42v2(r)); +} + +static +bool skinned_ismouseinrect(void *userdata, const char *skin, const char *fallback, vec4 r) { + skinned_t *a = C_CAST(skinned_t*, userdata); + atlas_slice_frame_t *f = skinned_getsliceframe(&a->atlas, skin); + if (!f && fallback) f = skinned_getsliceframe(&a->atlas, fallback); + if (!f) return false; + + vec4 outer = f->bounds; + r.x -= f->pivot.x*a->scale; + r.y -= f->pivot.y*a->scale; + r.z += r.x; + r.w += r.y; + + if ((r.z-r.x) < (outer.z-outer.x) * a->scale) { + r.z = r.x + (outer.z-outer.x) * a->scale; + } + if ((r.w-r.y) < (outer.w-outer.y) * a->scale) { + r.w = r.y + (outer.w-outer.y) * a->scale; + } + + return (input(MOUSE_X) > r.x && input(MOUSE_X) < r.z && input(MOUSE_Y) > r.y && input(MOUSE_Y) < r.w); +} + +static +void skinned_draw_sprite(float scale, atlas_t *a, atlas_slice_frame_t *f, vec4 r) { + vec4 outer = f->bounds; + r.x -= f->pivot.x*scale; + r.y -= f->pivot.y*scale; + r.z += r.x; + r.w += r.y; + + // Ensure dest rectangle is large enough to render the whole element + if ((r.z-r.x) < (outer.z-outer.x) * scale) { + r.z = r.x + (outer.z-outer.x) * scale; + } + if ((r.w-r.y) < (outer.w-outer.y) * scale) { + r.w = r.y + (outer.w-outer.y) * scale; + } + + if (!f->has_9slice) { + gui_drawrect(a->tex, v42v2(f->bounds), 0xFFFFFFFF, v42v2(r)); + return; + } + + vec4 core = f->core; + core.x += outer.x; + core.y += outer.y; + core.z += outer.x; + core.w += outer.y; + + // Define the 9 slices + vec4 top_left_slice = {outer.x, outer.y, core.x, core.y}; + vec4 top_middle_slice = {core.x, outer.y, core.z, core.y}; + vec4 top_right_slice = {core.z, outer.y, outer.z, core.y}; + + vec4 middle_left_slice = {outer.x, core.y, core.x, core.w}; + vec4 center_slice = core; + vec4 middle_right_slice = {core.z, core.y, outer.z, core.w}; + + vec4 bottom_left_slice = {outer.x, core.w, core.x, outer.w}; + vec4 bottom_middle_slice = {core.x, core.w, core.z, outer.w}; + vec4 bottom_right_slice = {core.z, core.w, outer.z, outer.w}; + + vec4 top_left = {r.x, r.y, r.x + (core.x - outer.x) * scale, r.y + (core.y - outer.y) * scale}; + vec4 top_right = {r.z - (outer.z - core.z) * scale, r.y, r.z, r.y + (core.y - outer.y) * scale}; + vec4 bottom_left = {r.x, r.w - (outer.w - core.w) * scale, r.x + (core.x - outer.x) * scale, r.w}; + vec4 bottom_right = {r.z - (outer.z - core.z) * scale, r.w - (outer.w - core.w) * scale, r.z, r.w}; + + vec4 top = {top_left.z, r.y, top_right.x, top_left.w}; + vec4 bottom = {bottom_left.z, bottom_left.y, bottom_right.x, r.w}; + vec4 left = {r.x, top_left.w, top_left.z, bottom_left.y}; + vec4 right = {top_right.x, top_right.w, r.z, bottom_right.y}; + + vec4 center = {top_left.z, top_left.w, top_right.x, bottom_right.y}; + + gui_drawrect(a->tex, v42v2(center_slice), 0xFFFFFFFF, v42v2(center)); + gui_drawrect(a->tex, v42v2(top_left_slice), 0xFFFFFFFF, v42v2(top_left)); + gui_drawrect(a->tex, v42v2(top_right_slice), 0xFFFFFFFF, v42v2(top_right)); + gui_drawrect(a->tex, v42v2(bottom_left_slice), 0xFFFFFFFF, v42v2(bottom_left)); + gui_drawrect(a->tex, v42v2(bottom_right_slice), 0xFFFFFFFF, v42v2(bottom_right)); + gui_drawrect(a->tex, v42v2(top_middle_slice), 0xFFFFFFFF, v42v2(top)); + gui_drawrect(a->tex, v42v2(bottom_middle_slice), 0xFFFFFFFF, v42v2(bottom)); + gui_drawrect(a->tex, v42v2(middle_left_slice), 0xFFFFFFFF, v42v2(left)); + gui_drawrect(a->tex, v42v2(middle_right_slice), 0xFFFFFFFF, v42v2(right)); +} + +static +void skinned_draw_rect(void* userdata, const char *skin, const char *fallback, vec4 r) { + skinned_t *a = C_CAST(skinned_t*, userdata); + + atlas_slice_frame_t *f = skinned_getsliceframe(&a->atlas, skin); + if (!f && fallback) f = skinned_getsliceframe(&a->atlas, fallback); + if (!f) skinned_draw_missing_rect(r); + else skinned_draw_sprite(a->scale, &a->atlas, f, r); +} + +void skinned_getskinsize(void *userdata, const char *skin, const char *fallback, vec2 *size) { + skinned_t *a = C_CAST(skinned_t*, userdata); + + atlas_slice_frame_t *f = skinned_getsliceframe(&a->atlas, skin); + if (!f && fallback) f = skinned_getsliceframe(&a->atlas, fallback); + if (f) { + size->x = (f->bounds.z-f->bounds.x)*a->scale; + size->y = (f->bounds.w-f->bounds.y)*a->scale; + } +} + +static +void skinned_getscissorrect(void* userdata, const char *skin, const char *fallback, vec4 rect, vec4 *dims) { + skinned_t *a = C_CAST(skinned_t*, userdata); + atlas_slice_frame_t *f = skinned_getsliceframe(&a->atlas, skin); + if (!f && fallback) f = skinned_getsliceframe(&a->atlas, fallback); + if (!f) return; + + *dims = rect; + + if (!f->has_9slice) return; + vec2 skinsize, coresize; + skinsize.x = (f->bounds.z-f->bounds.x)*a->scale; + skinsize.y = (f->bounds.w-f->bounds.y)*a->scale; + coresize.x = (f->core.z-f->core.x)*a->scale; + coresize.y = (f->core.w-f->core.y)*a->scale; + + dims->x += f->core.x*a->scale; + dims->y += f->core.y*a->scale; + dims->z -= (skinsize.x - coresize.x); + dims->w -= (skinsize.y - coresize.y); +} + +guiskin_t gui_skinned(const char *asefile, float scale) { + skinned_t *a = REALLOC(0, sizeof(skinned_t)); + a->atlas = atlas_create(asefile, 0); + a->scale = scale?scale:1.0f; + guiskin_t skin={0}; + skin.userdata = a; + skin.drawrect = skinned_draw_rect; + skin.getskinsize = skinned_getskinsize; + skin.getskincolor = skinned_getskincolor; + skin.ismouseinrect = skinned_ismouseinrect; + skin.getscissorrect = skinned_getscissorrect; + skin.free = skinned_free; + return skin; +} #line 0 #line 1 "v4k_input.c" -// input framework -// - rlyeh, public domain -// -// multi-touch(emscripten) port based on code by @procedural (MIT-0 licensed) - -// gotta love linux -#ifdef __linux -#undef KEY_ESC -#undef KEY_TICK -#undef KEY_1 -#undef KEY_2 -#undef KEY_3 -#undef KEY_4 -#undef KEY_5 -#undef KEY_6 -#undef KEY_7 -#undef KEY_8 -#undef KEY_9 -#undef KEY_0 -#undef KEY_BS -#undef KEY_TAB -#undef KEY_Q -#undef KEY_W -#undef KEY_E -#undef KEY_R -#undef KEY_T -#undef KEY_Y -#undef KEY_U -#undef KEY_I -#undef KEY_O -#undef KEY_P -#undef KEY_CAPS -#undef KEY_A -#undef KEY_S -#undef KEY_D -#undef KEY_F -#undef KEY_G -#undef KEY_H -#undef KEY_J -#undef KEY_K -#undef KEY_L -#undef KEY_ENTER -#undef KEY_LSHIFT -#undef KEY_Z -#undef KEY_X -#undef KEY_C -#undef KEY_V -#undef KEY_B -#undef KEY_N -#undef KEY_M -#undef KEY_RSHIFT -#undef KEY_UP -#undef KEY_LCTRL -#undef KEY_LALT -#undef KEY_SPACE -#undef KEY_RALT -#undef KEY_RCTRL -#undef KEY_LEFT -#undef KEY_DOWN -#undef KEY_RIGHT -#undef KEY_INS -#undef KEY_HOME -#undef KEY_PGUP -#undef KEY_DEL -#undef KEY_END -#undef KEY_PGDN -#undef KEY_LMETA -#undef KEY_RMETA -#undef KEY_MENU -#undef KEY_PRINT -#undef KEY_PAUSE -#undef KEY_SCROLL -#undef KEY_NUMLOCK -#undef KEY_MINUS -#undef KEY_EQUAL -#undef KEY_LSQUARE -#undef KEY_RSQUARE -#undef KEY_SEMICOLON -#undef KEY_QUOTE -#undef KEY_HASH -#undef KEY_BAR -#undef KEY_COMMA -#undef KEY_DOT -#undef KEY_SLASH -#undef KEY_F1 -#undef KEY_F2 -#undef KEY_F3 -#undef KEY_F4 -#undef KEY_F5 -#undef KEY_F6 -#undef KEY_F7 -#undef KEY_F8 -#undef KEY_F9 -#undef KEY_F10 -#undef KEY_F11 -#undef KEY_F12 -#undef KEY_PAD1 -#undef KEY_PAD2 -#undef KEY_PAD3 -#undef KEY_PAD4 -#undef KEY_PAD5 -#undef KEY_PAD6 -#undef KEY_PAD7 -#undef KEY_PAD8 -#undef KEY_PAD9 -#undef KEY_PAD0 -#undef KEY_PADADD -#undef KEY_PADSUB -#undef KEY_PADMUL -#undef KEY_PADDIV -#undef KEY_PADDOT -#undef KEY_PADENTER -#undef MOUSE_L -#undef MOUSE_M -#undef MOUSE_R -#undef GAMEPAD_CONNECTED -#undef GAMEPAD_A -#undef GAMEPAD_B -#undef GAMEPAD_X -#undef GAMEPAD_Y -#undef GAMEPAD_UP -#undef GAMEPAD_DOWN -#undef GAMEPAD_LEFT -#undef GAMEPAD_RIGHT -#undef GAMEPAD_MENU -#undef GAMEPAD_START -#undef GAMEPAD_LB -#undef GAMEPAD_RB -#undef GAMEPAD_LTHUMB -#undef GAMEPAD_RTHUMB -#undef WINDOW_BLUR -#undef WINDOW_FOCUS -#undef WINDOW_CLOSE -#undef WINDOW_MINIMIZE -#undef WINDOW_MAXIMIZE -#undef WINDOW_FULLSCREEN -#undef WINDOW_WINDOWED -#undef GAMEPAD_LPAD -#undef GAMEPAD_LPAD -#undef GAMEPAD_LPADY -#undef GAMEPAD_RPAD -#undef GAMEPAD_RPAD -#undef GAMEPAD_RPADY -#undef GAMEPAD_LT -#undef GAMEPAD_RT -#undef GAMEPAD_BATTERY -#undef MOUSE -#undef MOUSE -#undef MOUSE_Y -#undef MOUSE_W -#undef TOUCH_X1 -#undef TOUCH_Y1 -#undef TOUCH_X2 -#undef TOUCH_Y2 -#undef WINDOW_RESIZE -#undef WINDOW_RESIZE -#undef WINDOW_RESIZEY -#undef WINDOW_ORIENTATION -#undef WINDOW_BATTERY -#undef GAMEPAD_GUID -#undef GAMEPAD_NAME -#endif - -static int controller_id = 0; -static int controller_cycle[4] = {0}; - -static struct controller_t { - const char* strings[2]; - float floats[7+3+4+4]; - char bits[104+3+15+7]; -} controller[4] = {0}, frame[4][60] = {{0},{0},{0},{0}}; - -static struct controller_t *input_logger(int position, int advance) { - int *cycle = &controller_cycle[controller_id]; - position += (*cycle += advance); - position = position >= 0 ? position % 60 : 60-1 + ((position+1) % 60); - return &frame[controller_id][position]; -} - -void input_mappings(const char *filename) { -#if !is(ems) // emscripten: no glfwUpdateGamepadMappings() available - char* mappings = vfs_read(filename); - if( mappings ) { glfwUpdateGamepadMappings(mappings); /*REALLOC(mappings, 0);*/ } -#endif -} - -void input_init() { - do_once { - input_mappings("gamecontrollerdb.txt"); - } - #if 0 // deprecated - void input_update(); - window_hook(input_update, NULL); - #endif -} - -static int any_key = 0; -int input_anykey() { - return any_key; -} - -void input_update() { - struct controller_t *c = &controller[0]; // @fixme - - char *bits = &c->bits[0]; - float *floats = c->floats; floats -= GAMEPAD_LPADX; - const char **strings = c->strings; strings -= GAMEPAD_GUID; - float mouse_wheel_old = floats[MOUSE_W]; - - struct controller_t clear = {0}; - *c = clear; - for( int i = 0; i < countof(c->strings); ++i ) c->strings[i] = ""; - - struct GLFWwindow *win = window_handle(); - // glfwSetInputMode(win, GLFW_STICKY_MOUSE_BUTTONS, GLFW_TRUE); - double mx, my; - glfwGetCursorPos(win, &mx, &my); - floats[MOUSE_X] = mx; - floats[MOUSE_Y] = my; - struct nk_glfw* glfw = glfwGetWindowUserPointer(win); // from nuklear, because it is overriding glfwSetScrollCallback() - floats[MOUSE_W] = !glfw ? 0 : mouse_wheel_old + (float)glfw->scroll_bak.x + (float)glfw->scroll_bak.y; - glfw->scroll_bak.x = glfw->scroll_bak.y = 0; - - // Dear Win32 users, - // - Touchpad cursor freezing when any key is being pressed? - // If using Alps/Elantech/Dell/Toshiba touchpad driver or similar, ensure to disable TouchGuard, TouchCheck, PalmTracking, etc. - // - Touchpad button not clicking when any key is being pressed? - // Change Touchpad settings on Windows10 from HighSentivity (default) to MostSensitivity. - // - Apparently, a sane solution is just to never bind FIRE/JUMP actions to LMB/RMB buttons, and bind actions to keys instead. - bits[MOUSE_L] = (glfwGetMouseButton(win, GLFW_MOUSE_BUTTON_LEFT) == GLFW_PRESS); - bits[MOUSE_M] = (glfwGetMouseButton(win, GLFW_MOUSE_BUTTON_MIDDLE) == GLFW_PRESS); - bits[MOUSE_R] = (glfwGetMouseButton(win, GLFW_MOUSE_BUTTON_RIGHT) == GLFW_PRESS); - - #define k2(VK,GLFW) [KEY_##VK] = GLFW_KEY_##GLFW - #define k(VK) k2(VK,VK) - int table[] = { - k2(ESC,ESCAPE), - k2(TICK,GRAVE_ACCENT), k(1),k(2),k(3),k(4),k(5),k(6),k(7),k(8),k(9),k(0), k2(BS,BACKSPACE), - k(TAB), k(Q),k(W),k(E),k(R),k(T),k(Y),k(U),k(I),k(O),k(P), - k2(CAPS,CAPS_LOCK), k(A),k(S),k(D),k(F),k(G),k(H),k(J),k(K),k(L), k(ENTER), - k2(LSHIFT,LEFT_SHIFT), k(Z),k(X),k(C),k(V),k(B),k(N),k(M), k2(RSHIFT,RIGHT_SHIFT), k(UP), - k2(LCTRL,LEFT_CONTROL),k2(LALT,LEFT_ALT), k(SPACE), k2(RALT,RIGHT_ALT),k2(RCTRL,RIGHT_CONTROL), k(LEFT),k(DOWN),k(RIGHT), - - k(F1),k(F2),k(F3),k(F4),k(F5),k(F6),k(F7),k(F8),k(F9),k(F10),k(F11),k(F12), k2(PRINT,PRINT_SCREEN),k(PAUSE), - k2(INS,INSERT),k(HOME),k2(PGUP,PAGE_UP), k2(DEL,DELETE),k(END), k2(PGDN,PAGE_DOWN), - }; - #undef k - #undef k2 - any_key = 0; - for(int i = 0; i < countof(table); ++i) { -#if is(ems) - if( table[i] ) any_key |= (bits[i] = glfwGetKey(win, table[i] ) == GLFW_PRESS); -#else - any_key |= (bits[i] = glfwGetKeys(win)[ table[i] ]); -#endif - } - // special cases: plain shift/alt/ctrl enums will also check right counterparts - any_key |= (bits[KEY_ALT] |= glfwGetKey(win, table[KEY_RALT] ) == GLFW_PRESS); - any_key |= (bits[KEY_CTRL] |= glfwGetKey(win, table[KEY_RCTRL] ) == GLFW_PRESS); - any_key |= (bits[KEY_SHIFT] |= glfwGetKey(win, table[KEY_RSHIFT] ) == GLFW_PRESS); - -#if is(ems) - { - int jid = 0; // @fixme - EmscriptenGamepadEvent state = {0}; - - if( emscripten_sample_gamepad_data() == EMSCRIPTEN_RESULT_SUCCESS ) { - if( emscripten_get_gamepad_status(jid, &state) == EMSCRIPTEN_RESULT_SUCCESS ) { - // hardcoded for Xbox controller - if( state.numAxes >= 4 && state.numButtons >= 16 ) { - - bits[GAMEPAD_CONNECTED] = 1; // !!state.connected - strings[GAMEPAD_GUID] = va("%s", state.id); - strings[GAMEPAD_NAME] = va("emscripten %s", state.mapping); - floats[GAMEPAD_BATTERY] = 100; - - // e.digitalButton[i], e.analogButton[i] - - bits[GAMEPAD_A] = state.analogButton[0]; // cross - bits[GAMEPAD_B] = state.analogButton[1]; // circle - bits[GAMEPAD_X] = state.analogButton[2]; // square - bits[GAMEPAD_Y] = state.analogButton[3]; // triangle - - bits[GAMEPAD_UP] = state.analogButton[12]; - bits[GAMEPAD_DOWN] = state.analogButton[13]; - bits[GAMEPAD_LEFT] = state.analogButton[14]; - bits[GAMEPAD_RIGHT] = state.analogButton[15]; - - bits[GAMEPAD_LB] = state.analogButton[4]; - bits[GAMEPAD_RB] = state.analogButton[5]; - bits[GAMEPAD_MENU] = state.analogButton[8]; - bits[GAMEPAD_START] = state.analogButton[9]; - - bits[GAMEPAD_LTHUMB] = state.analogButton[10]; - bits[GAMEPAD_RTHUMB] = state.analogButton[11]; - - floats[GAMEPAD_LT] = state.analogButton[6]; - floats[GAMEPAD_RT] = state.analogButton[7]; - - floats[GAMEPAD_LPADX] = state.axis[0]; - floats[GAMEPAD_LPADY] = -state.axis[1]; - - floats[GAMEPAD_RPADX] = state.axis[2]; - floats[GAMEPAD_RPADY] = -state.axis[3]; - } - } - } - - if( 0 && ui_panel("emspad", 0)) { - for(int i = 0; i <= 5; ++i ) - ui_label(va("axis #%d: %5.2f", i, (float)state.axis[i])); - - for(int i = 0; i <= 15; ++i ) - ui_label(va("button #%d: %d %5.2f", i, state.digitalButton[i], (float)state.analogButton[i])); - - ui_panel_end(); - } - } -#else - int jid = GLFW_JOYSTICK_1 + 0; // @fixme - if( glfwGetGamepadName(jid) ) { // glfwJoystickPresent(jid) && glfwJoystickIsGamepad(jid) ) { - bits[GAMEPAD_CONNECTED] = 1; - strings[GAMEPAD_GUID] = glfwGetJoystickGUID(jid); - strings[GAMEPAD_NAME] = glfwGetGamepadName(jid); - floats[GAMEPAD_BATTERY] = 100; //glfwJoystickCurrentPowerLevel(jid); - - GLFWgamepadstate state; - if (glfwGetGamepadState(jid, &state)) { - bits[GAMEPAD_A] = state.buttons[GLFW_GAMEPAD_BUTTON_A]; // cross - bits[GAMEPAD_B] = state.buttons[GLFW_GAMEPAD_BUTTON_B]; // circle - bits[GAMEPAD_X] = state.buttons[GLFW_GAMEPAD_BUTTON_X]; // square - bits[GAMEPAD_Y] = state.buttons[GLFW_GAMEPAD_BUTTON_Y]; // triangle - - bits[GAMEPAD_UP] = state.buttons[GLFW_GAMEPAD_BUTTON_DPAD_UP]; - bits[GAMEPAD_DOWN] = state.buttons[GLFW_GAMEPAD_BUTTON_DPAD_DOWN]; - bits[GAMEPAD_LEFT] = state.buttons[GLFW_GAMEPAD_BUTTON_DPAD_LEFT]; - bits[GAMEPAD_RIGHT] = state.buttons[GLFW_GAMEPAD_BUTTON_DPAD_RIGHT]; - - bits[GAMEPAD_LB] = state.buttons[GLFW_GAMEPAD_BUTTON_LEFT_BUMPER]; - bits[GAMEPAD_RB] = state.buttons[GLFW_GAMEPAD_BUTTON_RIGHT_BUMPER]; - bits[GAMEPAD_MENU] = state.buttons[GLFW_GAMEPAD_BUTTON_BACK]; - bits[GAMEPAD_START] = state.buttons[GLFW_GAMEPAD_BUTTON_START]; // _GUIDE - - bits[GAMEPAD_LTHUMB] = state.buttons[GLFW_GAMEPAD_BUTTON_LEFT_THUMB]; - bits[GAMEPAD_RTHUMB] = state.buttons[GLFW_GAMEPAD_BUTTON_RIGHT_THUMB]; - - floats[GAMEPAD_LT] = input_filter_positive(state.axes[GLFW_GAMEPAD_AXIS_LEFT_TRIGGER]); // [-1..+1] -> [0..1] - floats[GAMEPAD_RT] = input_filter_positive(state.axes[GLFW_GAMEPAD_AXIS_RIGHT_TRIGGER]); // [-1..+1] -> [0..1] - - floats[GAMEPAD_LPADX] = state.axes[GLFW_GAMEPAD_AXIS_LEFT_X]; - floats[GAMEPAD_LPADY] = -state.axes[GLFW_GAMEPAD_AXIS_LEFT_Y]; - - floats[GAMEPAD_RPADX] = state.axes[GLFW_GAMEPAD_AXIS_RIGHT_X]; - floats[GAMEPAD_RPADY] = -state.axes[GLFW_GAMEPAD_AXIS_RIGHT_Y]; - } - } -#endif - - *input_logger(0,+1) = controller[0]; -} - -int input_use(int id) { - return controller_id >= 0 && controller_id <= 3 ? controller_id = id, 1 : 0; -} - -float input_frame( int vk, int frame ) { - if( controller_id > 0 ) return 0; // @fixme - struct controller_t *c = input_logger(frame, +0); - if(vk < GAMEPAD_LPADX) return c->bits[vk]; // if in bits... - if(vk < GAMEPAD_GUID) return c->floats[vk - GAMEPAD_LPADX]; // if in floats... - return 0.f; // NAN? -} -vec2 input_frame2( int vk, int frame ) { - return vec2( input_frame(vk, frame), input_frame(vk+1, frame) ); -} - -const char *input_string( int vk ) { - int frame = 0; - if( controller_id > 0 ) return ""; // @fixme - struct controller_t *c = input_logger(frame, +0); - return vk >= GAMEPAD_GUID ? c->strings[vk - GAMEPAD_GUID] : ""; // if in strings... -} - -// --- sugars - -float input_diff( int vk ) { - return input_frame(vk, 0) - input_frame(vk, -1); -} -vec2 input_diff2( int vk ) { - return vec2( input_diff(vk), input_diff(vk+1) ); -} -float input( int vk ) { - return input_frame( vk, 0 ); -} -vec2 input2( int vk ) { - return vec2( input_frame(vk, 0), input_frame(vk+1, 0) ); -} - -// --- events - -const float MS2FRAME = 0.06f; // 60 hz/1000 ms - -int event( int vk ) { - float v = input_frame(vk,0); - return (v * v) > 0; -} -int input_chord2( int vk1, int vk2 ) { - return event(vk1) && event(vk2); -} -int input_chord3( int vk1, int vk2, int vk3 ) { - return event(vk1) && input_chord2(vk2, vk3); -} -int input_chord4( int vk1, int vk2, int vk3, int vk4 ) { - return event(vk1) && input_chord3(vk2, vk3, vk4); -} -int input_down( int vk ) { - return input_diff(vk) > 0; // input_frame(vk,-1) <= 0 && input_frame(vk,0) > 0; -} -int input_held( int vk ) { - return input_diff(vk) == 0 && input_frame(vk,0) > 0; // input_frame(vk,-1) > 0 && input_frame(vk,0) > 0; -} -int input_up( int vk ) { - return input_diff(vk) < 0; // input_frame(vk,-1) > 0 && input_frame(vk,0) <= 0; -} -int input_idle( int vk ) { - return input_diff(vk) == 0 && input_frame(vk,0) <= 0; // input_frame(vk,-1) <= 0 && input_frame(vk,0) <= 0; -} -int input_repeat( int vk, int ms ) { // @fixme: broken - assert((unsigned)ms <= 1000); - return input_frame(vk,-ms * MS2FRAME ) > 0 && input_frame(vk,-ms * MS2FRAME /2) > 0 && input_frame(vk,0) > 0; -} -int input_click( int vk, int ms ) { // @fixme: broken - assert((unsigned)ms <= 1000); - return input_frame(vk,-ms * MS2FRAME ) <= 0 && input_frame(vk,-ms * MS2FRAME /2) > 0 && input_frame(vk,0) <= 0; -} -int input_click2( int vk, int ms ) { // @fixme: broken - assert((unsigned)ms <= 1000); - return input_frame(vk,-ms * MS2FRAME ) <= 0 && input_frame(vk,-ms * MS2FRAME *3/4) > 0 - && input_frame(vk,-ms * MS2FRAME *2/4) <= 0 && input_frame(vk,-ms * MS2FRAME *1/4) > 0 && input_frame(vk,0) <= 0; -} - -#undef MS2FRAME - -// --- filters - -float input_filter_positive( float v ) { // [-1..1] -> [0..1] - return ( v + 1 ) * 0.5f; -} -vec2 input_filter_positive2( vec2 v ) { // [-1..1] -> [0..1] - return scale2(inc2(v,1), 0.5f); -} - -vec2 input_filter_deadzone( vec2 v, float deadzone ) { - assert(deadzone > 0); - float mag = sqrt( v.x*v.x + v.y*v.y ); - float nx = v.x / mag, ny = v.y / mag, k = (mag - deadzone) / (1 - deadzone); - if( k > 1 ) k = 1; // clamp - // k = k * k; // uncomment for a smoother curve - return mag < deadzone ? vec2(0, 0) : vec2(nx * k, ny * k); -} - -vec2 input_filter_deadzone_4way( vec2 v, float deadzone ) { - assert(deadzone > 0); - float v0 = v.x*v.x < deadzone*deadzone ? 0 : v.x; - float v1 = v.y*v.y < deadzone*deadzone ? 0 : v.y; - return vec2(v0, v1); -} - -int input_enum(const char *vk) { - static map(char*,int) m = 0; - do_once { - map_init_str(m); - #define k(VK) map_find_or_add(m, STRINGIZE(VK), KEY_##VK); map_find_or_add(m, STRINGIZE(KEY_##VK), KEY_##VK); - k(ESC) - k(TICK) k(1) k(2) k(3) k(4) k(5) k(6) k(7) k(8) k(9) k(0) k(BS) - k(TAB) k(Q) k(W) k(E) k(R) k(T) k(Y) k(U) k(I) k(O) k(P) - k(CAPS) k(A) k(S) k(D) k(F) k(G) k(H) k(J) k(K) k(L) k(ENTER) - k(LSHIFT) k(Z) k(X) k(C) k(V) k(B) k(N) k(M) k(RSHIFT) k(UP) - k(LCTRL) k(LALT) k(SPACE) k(RALT) k(RCTRL) k(LEFT) k(DOWN) k(RIGHT) - - k(F1) k(F2) k(F3) k(F4) k(F5) k(F6) k(F7) k(F8) k(F9) k(F10) k(F11) k(F12) k(PRINT) k(PAUSE) - k(INS) k(HOME) k(PGUP) k(DEL) k(END) k(PGDN) - - k(ALT) k(CTRL) k(SHIFT) - #undef k - }; - int *found = map_find(m, (char*)vk); - return found ? *found : -1; -} - -int input_eval(const char *expression) { - if( expression && expression[0] ) { - return eval(expression) > 0; - } - return 0; -} - -// converts keyboard code to its latin char (if any) -char input_keychar(unsigned code) { - #define k2(VK,GLFW) [KEY_##VK] = GLFW_KEY_##GLFW - #define k(VK) k2(VK,VK) - int table[256] = { - k2(ESC,ESCAPE), - k2(TICK,GRAVE_ACCENT), k(1),k(2),k(3),k(4),k(5),k(6),k(7),k(8),k(9),k(0), k2(BS,BACKSPACE), - k(TAB), k(Q),k(W),k(E),k(R),k(T),k(Y),k(U),k(I),k(O),k(P), - k2(CAPS,CAPS_LOCK), k(A),k(S),k(D),k(F),k(G),k(H),k(J),k(K),k(L), k(ENTER), - k2(LSHIFT,LEFT_SHIFT), k(Z),k(X),k(C),k(V),k(B),k(N),k(M), k2(RSHIFT,RIGHT_SHIFT), k(UP), - k2(LCTRL,LEFT_CONTROL),k2(LALT,LEFT_ALT), k(SPACE), k2(RALT,RIGHT_ALT),k2(RCTRL,RIGHT_CONTROL), k(LEFT),k(DOWN),k(RIGHT), - - k(F1),k(F2),k(F3),k(F4),k(F5),k(F6),k(F7),k(F8),k(F9),k(F10),k(F11),k(F12), k2(PRINT,PRINT_SCREEN),k(PAUSE), - k2(INS,INSERT),k(HOME),k2(PGUP,PAGE_UP), k2(DEL,DELETE),k(END), k2(PGDN,PAGE_DOWN), - }; - #undef k - #undef k2 - - code = table[ code & 255 ]; - - const char* name = glfwGetKeyName(code, 0); - if( name && strlen(name) == 1 ) { - return *name >= 'A' && *name <= 'Z' ? name[0] - 'A' + 'a' : name[0]; - } - - if( code >= GLFW_KEY_0 && code <= GLFW_KEY_9 ) return code - GLFW_KEY_0 + '0'; - if( code >= GLFW_KEY_A && code <= GLFW_KEY_Z ) return code - GLFW_KEY_A + 'a'; - switch(code) { - default: break; - case GLFW_KEY_APOSTROPHE: return '\''; - case GLFW_KEY_BACKSLASH: return '\\'; - case GLFW_KEY_COMMA: return ','; - case GLFW_KEY_EQUAL: return '='; - case GLFW_KEY_GRAVE_ACCENT: return '`'; - case GLFW_KEY_LEFT_BRACKET: return '['; - case GLFW_KEY_MINUS: return '-'; - case GLFW_KEY_PERIOD: return '.'; - case GLFW_KEY_RIGHT_BRACKET: return ']'; - case GLFW_KEY_SEMICOLON: return ';'; - case GLFW_KEY_SLASH: return '/'; - //case GLFW_KEY_WORLD_1: return non-US #1; - //case GLFW_KEY_WORLD_2: return non-US #2; - } - - return '\0'; -} - -// -- multi-touch input -// multi-touch(emscripten) port based on code by @procedural (MIT-0 licensed) - -#if !is(ems) - -void touch_init() {} -void touch_flush() {} -void input_touch_area(unsigned button, vec2 from, vec2 to) {} -vec2 input_touch(unsigned button, float sensitivity) { return vec2(0,0); } -vec2 input_touch_delta_from_origin(unsigned button, float sensitivity) { return vec2(0,0); } -vec2 input_touch_delta(unsigned button, float sensitivity) { return vec2(0,0); } -bool input_touch_active() { return false; } - -#else - -static struct touch { - bool init; - vec2 move, cached, origin, prev; - vec4 area; -} touch[2] = {0}; - -static EM_BOOL touch_move(int eventType, const EmscriptenTouchEvent *e, void *userData) { - for( int i = 0; i < (int)e->numTouches; ++i) { - if( !e->touches[i].isChanged ) continue; - int j = e->touches[i].identifier; - if( j >= countof(touch) ) continue; - - touch[j].cached = vec2(e->touches[i].clientX, e->touches[i].clientY); - if (!touch[j].init) touch[j].init = 1, touch[j].origin = touch[j].prev = touch[j].move = touch[j].cached; - } - - return EM_TRUE; -} - -static EM_BOOL touch_end(int eventType, const EmscriptenTouchEvent *e, void *userData) { - for( int i = 0; i < (int)e->numTouches; ++i) { - if( !e->touches[i].isChanged ) continue; - int j = e->touches[i].identifier; - if( j >= countof(touch) ) continue; - - //memset(&touch[j], 0, sizeof(touch[j])); - touch[j].init = false; - touch[j].move = touch[j].cached = touch[j].origin = touch[j].prev = vec2(0,0); - } - - return EM_TRUE; -} - -void input_touch_area(unsigned button, vec2 from_ndc, vec2 to_ndc) { - if( button >= countof(touch) ) return; - touch[button].area = vec4( from_ndc.x, from_ndc.y, to_ndc.x, to_ndc.y ); -} - -void touch_init() { - memset(touch, 0, sizeof(touch)); - - // default areas: left screen (button #0) and right_screen (button #1) - input_touch_area(0, vec2(0.0,0.0), vec2(0.5,1.0)); - input_touch_area(1, vec2(0.5,0.0), vec2(1.0,1.0)); - - emscripten_set_touchstart_callback("#canvas", 0, EM_FALSE, &touch_move); - emscripten_set_touchmove_callback("#canvas", 0, EM_FALSE, &touch_move); - emscripten_set_touchend_callback("#canvas", 0, EM_FALSE, &touch_end); -} - -void touch_flush() { - for( int j = 0; j < countof(touch); ++j) { - touch[j].prev = touch[j].move; - touch[j].move = touch[j].cached; - } -} - -static -unsigned input_locate_button(unsigned button) { - // locate button in user-defined areas - vec2 c = window_canvas(); - for( int j = 0; j < countof(touch); ++j ) { - if( touch[j].init ) - if( touch[j].origin.x >= (touch[button].area.x * c.x) ) - if( touch[j].origin.y >= (touch[button].area.y * c.y) ) - if( touch[j].origin.x <= (touch[button].area.z * c.x) ) - if( touch[j].origin.y <= (touch[button].area.w * c.y) ) - return j; - } - return ~0u; -} - -vec2 input_touch(unsigned button, float sensitivity) { - button = input_locate_button(button); - if( button >= countof(touch) ) return vec2(0,0); - return touch[button].init ? touch[button].move : vec2(0,0); -} - -vec2 input_touch_delta(unsigned button, float sensitivity) { - button = input_locate_button(button); - if( button >= countof(touch) ) return vec2(0,0); - return touch[button].init ? scale2( sub2(touch[button].move, touch[button].prev), sensitivity ) : vec2(0,0); -} - -vec2 input_touch_delta_from_origin(unsigned button, float sensitivity) { - button = input_locate_button(button); - if( button >= countof(touch) ) return vec2(0,0); - return touch[button].init ? scale2( sub2(touch[button].move, touch[button].origin), sensitivity ) : vec2(0,0); -} - -bool input_touch_active() { - for( int j = 0; j < countof(touch); ++j ) { - if( touch[j].init ) return true; - } - return false; -} - -#endif // !is(ems) - -int ui_mouse() { - ui_label2_float("X", input(MOUSE_X)); - ui_label2_float("Y", input(MOUSE_Y)); - ui_label2_float("Wheel", input(MOUSE_W)); - ui_separator(); - ui_label2_bool("Left", input(MOUSE_L)); - ui_label2_bool("Middle", input(MOUSE_M)); - ui_label2_bool("Right", input(MOUSE_R)); - ui_separator(); - for( int i = 0; i <= CURSOR_SW_AUTO; ++i ) if(ui_button(va("Cursor shape #%d", i))) window_cursor_shape(i); - - return 0; -} - -int ui_keyboard() { - char *keys[] = { - "F1","F2","F3","F4","F5","F6","F7","F8","F9","F10","F11","F12", - "ESC", - "TICK","1","2","3","4","5","6","7","8","9","0","BS", - "TAB","Q","W","E","R","T","Y","U","I","O","P", - "CAPS","A","S","D","F","G","H","J","K","L","ENTER", - "LSHIFT","Z","X","C","V","B","N","M","RSHIFT","^", - "LCTRL","LALT","SPACE","RALT","RCTRL","<","V",">", - }; - - float rows[] = { - 12, - 1, - 12, - 11, - 11, - 10, - 8 - }; - - for( int row = 0, k = 0; row < countof(rows); ++row ) { - static char *buf = 0; if(buf) *buf = 0; - for( int col = 0; col < rows[row]; ++col, ++k ) { - assert( input_enum(keys[k]) == input_enum(va("KEY_%s", keys[k])) ); - strcatf(&buf, input(input_enum(keys[k])) ? "[%s]" : " %s ", keys[k]); - } - ui_label(buf); - } - - return 0; -} - -int ui_gamepad(int gamepad_id) { - input_use(gamepad_id); - - bool connected = !!input(GAMEPAD_CONNECTED); - - ui_label2("Name", connected ? input_string(GAMEPAD_NAME) : "(Not connected)"); - - if( !connected ) ui_disable(); - - ui_separator(); - - ui_label2_bool("A", input(GAMEPAD_A) ); - ui_label2_bool("B", input(GAMEPAD_B) ); - ui_label2_bool("X", input(GAMEPAD_X) ); - ui_label2_bool("Y", input(GAMEPAD_Y) ); - ui_label2_bool("Up", input(GAMEPAD_UP) ); - ui_label2_bool("Down", input(GAMEPAD_DOWN) ); - ui_label2_bool("Left", input(GAMEPAD_LEFT) ); - ui_label2_bool("Right", input(GAMEPAD_RIGHT) ); - ui_label2_bool("Menu", input(GAMEPAD_MENU) ); - ui_label2_bool("Start", input(GAMEPAD_START) ); - - ui_separator(); - - ui_label2_float("Left pad x", input(GAMEPAD_LPADX) ); - ui_label2_float("Left pad y", input(GAMEPAD_LPADY) ); - ui_label2_float("Left trigger", input(GAMEPAD_LT) ); - ui_label2_bool("Left bumper", input(GAMEPAD_LB) ); - ui_label2_bool("Left thumb", input(GAMEPAD_LTHUMB) ); - - vec2 v = input_filter_deadzone( input2(GAMEPAD_LPADX), 0.1f ); - ui_label2_float("Filtered pad x", v.x); - ui_label2_float("Filtered pad y", v.y); - - ui_separator(); - - ui_label2_float("Right pad x", input(GAMEPAD_RPADX) ); - ui_label2_float("Right pad y", input(GAMEPAD_RPADY) ); - ui_label2_float("Right trigger", input(GAMEPAD_RT) ); - ui_label2_bool("Right bumper", input(GAMEPAD_RB) ); - ui_label2_bool("Right thumb", input(GAMEPAD_RTHUMB) ); - - vec2 w = input_filter_deadzone( input2(GAMEPAD_RPADX), 0.1f ); - ui_label2_float("Filtered pad x", w.x); - ui_label2_float("Filtered pad y", w.y); - - ui_enable(); - - input_use(0); - return 0; -} - -int ui_gamepads() { - for( int i = 0; i < 4; ++i ) ui_gamepad(i); - - return 0; -} +// input framework +// - rlyeh, public domain +// +// multi-touch(emscripten) port based on code by @procedural (MIT-0 licensed) + +// gotta love linux +#ifdef __linux +#undef KEY_ESC +#undef KEY_TICK +#undef KEY_1 +#undef KEY_2 +#undef KEY_3 +#undef KEY_4 +#undef KEY_5 +#undef KEY_6 +#undef KEY_7 +#undef KEY_8 +#undef KEY_9 +#undef KEY_0 +#undef KEY_BS +#undef KEY_TAB +#undef KEY_Q +#undef KEY_W +#undef KEY_E +#undef KEY_R +#undef KEY_T +#undef KEY_Y +#undef KEY_U +#undef KEY_I +#undef KEY_O +#undef KEY_P +#undef KEY_CAPS +#undef KEY_A +#undef KEY_S +#undef KEY_D +#undef KEY_F +#undef KEY_G +#undef KEY_H +#undef KEY_J +#undef KEY_K +#undef KEY_L +#undef KEY_ENTER +#undef KEY_LSHIFT +#undef KEY_Z +#undef KEY_X +#undef KEY_C +#undef KEY_V +#undef KEY_B +#undef KEY_N +#undef KEY_M +#undef KEY_RSHIFT +#undef KEY_UP +#undef KEY_LCTRL +#undef KEY_LALT +#undef KEY_SPACE +#undef KEY_RALT +#undef KEY_RCTRL +#undef KEY_LEFT +#undef KEY_DOWN +#undef KEY_RIGHT +#undef KEY_INS +#undef KEY_HOME +#undef KEY_PGUP +#undef KEY_DEL +#undef KEY_END +#undef KEY_PGDN +#undef KEY_LMETA +#undef KEY_RMETA +#undef KEY_MENU +#undef KEY_PRINT +#undef KEY_PAUSE +#undef KEY_SCROLL +#undef KEY_NUMLOCK +#undef KEY_MINUS +#undef KEY_EQUAL +#undef KEY_LSQUARE +#undef KEY_RSQUARE +#undef KEY_SEMICOLON +#undef KEY_QUOTE +#undef KEY_HASH +#undef KEY_BAR +#undef KEY_COMMA +#undef KEY_DOT +#undef KEY_SLASH +#undef KEY_F1 +#undef KEY_F2 +#undef KEY_F3 +#undef KEY_F4 +#undef KEY_F5 +#undef KEY_F6 +#undef KEY_F7 +#undef KEY_F8 +#undef KEY_F9 +#undef KEY_F10 +#undef KEY_F11 +#undef KEY_F12 +#undef KEY_PAD1 +#undef KEY_PAD2 +#undef KEY_PAD3 +#undef KEY_PAD4 +#undef KEY_PAD5 +#undef KEY_PAD6 +#undef KEY_PAD7 +#undef KEY_PAD8 +#undef KEY_PAD9 +#undef KEY_PAD0 +#undef KEY_PADADD +#undef KEY_PADSUB +#undef KEY_PADMUL +#undef KEY_PADDIV +#undef KEY_PADDOT +#undef KEY_PADENTER +#undef MOUSE_L +#undef MOUSE_M +#undef MOUSE_R +#undef GAMEPAD_CONNECTED +#undef GAMEPAD_A +#undef GAMEPAD_B +#undef GAMEPAD_X +#undef GAMEPAD_Y +#undef GAMEPAD_UP +#undef GAMEPAD_DOWN +#undef GAMEPAD_LEFT +#undef GAMEPAD_RIGHT +#undef GAMEPAD_MENU +#undef GAMEPAD_START +#undef GAMEPAD_LB +#undef GAMEPAD_RB +#undef GAMEPAD_LTHUMB +#undef GAMEPAD_RTHUMB +#undef WINDOW_BLUR +#undef WINDOW_FOCUS +#undef WINDOW_CLOSE +#undef WINDOW_MINIMIZE +#undef WINDOW_MAXIMIZE +#undef WINDOW_FULLSCREEN +#undef WINDOW_WINDOWED +#undef GAMEPAD_LPAD +#undef GAMEPAD_LPAD +#undef GAMEPAD_LPADY +#undef GAMEPAD_RPAD +#undef GAMEPAD_RPAD +#undef GAMEPAD_RPADY +#undef GAMEPAD_LT +#undef GAMEPAD_RT +#undef GAMEPAD_BATTERY +#undef MOUSE +#undef MOUSE +#undef MOUSE_Y +#undef MOUSE_W +#undef TOUCH_X1 +#undef TOUCH_Y1 +#undef TOUCH_X2 +#undef TOUCH_Y2 +#undef WINDOW_RESIZE +#undef WINDOW_RESIZE +#undef WINDOW_RESIZEY +#undef WINDOW_ORIENTATION +#undef WINDOW_BATTERY +#undef GAMEPAD_GUID +#undef GAMEPAD_NAME +#endif + +static int controller_id = 0; +static int controller_cycle[4] = {0}; + +static struct controller_t { + const char* strings[2]; + float floats[7+3+4+4]; + char bits[104+3+15+7]; +} controller[4] = {0}, frame[4][60] = {{0},{0},{0},{0}}; + +static struct controller_t *input_logger(int position, int advance) { + int *cycle = &controller_cycle[controller_id]; + position += (*cycle += advance); + position = position >= 0 ? position % 60 : 60-1 + ((position+1) % 60); + return &frame[controller_id][position]; +} + +void input_mappings(const char *filename) { +#if !is(ems) // emscripten: no glfwUpdateGamepadMappings() available + char* mappings = vfs_read(filename); + if( mappings ) { glfwUpdateGamepadMappings(mappings); /*REALLOC(mappings, 0);*/ } +#endif +} + +void input_init() { + do_once { + input_mappings("gamecontrollerdb.txt"); + } + #if 0 // deprecated + void input_update(); + window_hook(input_update, NULL); + #endif +} + +static int any_key = 0; +int input_anykey() { + return any_key; +} + +void input_update() { + struct controller_t *c = &controller[0]; // @fixme + + char *bits = &c->bits[0]; + float *floats = c->floats; floats -= GAMEPAD_LPADX; + const char **strings = c->strings; strings -= GAMEPAD_GUID; + float mouse_wheel_old = floats[MOUSE_W]; + + struct controller_t clear = {0}; + *c = clear; + for( int i = 0; i < countof(c->strings); ++i ) c->strings[i] = ""; + + struct GLFWwindow *win = window_handle(); + // glfwSetInputMode(win, GLFW_STICKY_MOUSE_BUTTONS, GLFW_TRUE); + double mx, my; + glfwGetCursorPos(win, &mx, &my); + floats[MOUSE_X] = mx; + floats[MOUSE_Y] = my; + struct nk_glfw* glfw = glfwGetWindowUserPointer(win); // from nuklear, because it is overriding glfwSetScrollCallback() + floats[MOUSE_W] = !glfw ? 0 : mouse_wheel_old + (float)glfw->scroll_bak.x + (float)glfw->scroll_bak.y; + glfw->scroll_bak.x = glfw->scroll_bak.y = 0; + + // Dear Win32 users, + // - Touchpad cursor freezing when any key is being pressed? + // If using Alps/Elantech/Dell/Toshiba touchpad driver or similar, ensure to disable TouchGuard, TouchCheck, PalmTracking, etc. + // - Touchpad button not clicking when any key is being pressed? + // Change Touchpad settings on Windows10 from HighSentivity (default) to MostSensitivity. + // - Apparently, a sane solution is just to never bind FIRE/JUMP actions to LMB/RMB buttons, and bind actions to keys instead. + bits[MOUSE_L] = (glfwGetMouseButton(win, GLFW_MOUSE_BUTTON_LEFT) == GLFW_PRESS); + bits[MOUSE_M] = (glfwGetMouseButton(win, GLFW_MOUSE_BUTTON_MIDDLE) == GLFW_PRESS); + bits[MOUSE_R] = (glfwGetMouseButton(win, GLFW_MOUSE_BUTTON_RIGHT) == GLFW_PRESS); + + #define k2(VK,GLFW) [KEY_##VK] = GLFW_KEY_##GLFW + #define k(VK) k2(VK,VK) + int table[] = { + k2(ESC,ESCAPE), + k2(TICK,GRAVE_ACCENT), k(1),k(2),k(3),k(4),k(5),k(6),k(7),k(8),k(9),k(0), k2(BS,BACKSPACE), + k(TAB), k(Q),k(W),k(E),k(R),k(T),k(Y),k(U),k(I),k(O),k(P), + k2(CAPS,CAPS_LOCK), k(A),k(S),k(D),k(F),k(G),k(H),k(J),k(K),k(L), k(ENTER), + k2(LSHIFT,LEFT_SHIFT), k(Z),k(X),k(C),k(V),k(B),k(N),k(M), k2(RSHIFT,RIGHT_SHIFT), k(UP), + k2(LCTRL,LEFT_CONTROL),k2(LALT,LEFT_ALT), k(SPACE), k2(RALT,RIGHT_ALT),k2(RCTRL,RIGHT_CONTROL), k(LEFT),k(DOWN),k(RIGHT), + + k(F1),k(F2),k(F3),k(F4),k(F5),k(F6),k(F7),k(F8),k(F9),k(F10),k(F11),k(F12), k2(PRINT,PRINT_SCREEN),k(PAUSE), + k2(INS,INSERT),k(HOME),k2(PGUP,PAGE_UP), k2(DEL,DELETE),k(END), k2(PGDN,PAGE_DOWN), + }; + #undef k + #undef k2 + any_key = 0; + for(int i = 0; i < countof(table); ++i) { +#if is(ems) + if( table[i] ) any_key |= (bits[i] = glfwGetKey(win, table[i] ) == GLFW_PRESS); +#else + any_key |= (bits[i] = glfwGetKeys(win)[ table[i] ]); +#endif + } + // special cases: plain shift/alt/ctrl enums will also check right counterparts + any_key |= (bits[KEY_ALT] |= glfwGetKey(win, table[KEY_RALT] ) == GLFW_PRESS); + any_key |= (bits[KEY_CTRL] |= glfwGetKey(win, table[KEY_RCTRL] ) == GLFW_PRESS); + any_key |= (bits[KEY_SHIFT] |= glfwGetKey(win, table[KEY_RSHIFT] ) == GLFW_PRESS); + +#if is(ems) + { + int jid = 0; // @fixme + EmscriptenGamepadEvent state = {0}; + + if( emscripten_sample_gamepad_data() == EMSCRIPTEN_RESULT_SUCCESS ) { + if( emscripten_get_gamepad_status(jid, &state) == EMSCRIPTEN_RESULT_SUCCESS ) { + // hardcoded for Xbox controller + if( state.numAxes >= 4 && state.numButtons >= 16 ) { + + bits[GAMEPAD_CONNECTED] = 1; // !!state.connected + strings[GAMEPAD_GUID] = va("%s", state.id); + strings[GAMEPAD_NAME] = va("emscripten %s", state.mapping); + floats[GAMEPAD_BATTERY] = 100; + + // e.digitalButton[i], e.analogButton[i] + + bits[GAMEPAD_A] = state.analogButton[0]; // cross + bits[GAMEPAD_B] = state.analogButton[1]; // circle + bits[GAMEPAD_X] = state.analogButton[2]; // square + bits[GAMEPAD_Y] = state.analogButton[3]; // triangle + + bits[GAMEPAD_UP] = state.analogButton[12]; + bits[GAMEPAD_DOWN] = state.analogButton[13]; + bits[GAMEPAD_LEFT] = state.analogButton[14]; + bits[GAMEPAD_RIGHT] = state.analogButton[15]; + + bits[GAMEPAD_LB] = state.analogButton[4]; + bits[GAMEPAD_RB] = state.analogButton[5]; + bits[GAMEPAD_MENU] = state.analogButton[8]; + bits[GAMEPAD_START] = state.analogButton[9]; + + bits[GAMEPAD_LTHUMB] = state.analogButton[10]; + bits[GAMEPAD_RTHUMB] = state.analogButton[11]; + + floats[GAMEPAD_LT] = state.analogButton[6]; + floats[GAMEPAD_RT] = state.analogButton[7]; + + floats[GAMEPAD_LPADX] = state.axis[0]; + floats[GAMEPAD_LPADY] = -state.axis[1]; + + floats[GAMEPAD_RPADX] = state.axis[2]; + floats[GAMEPAD_RPADY] = -state.axis[3]; + } + } + } + + if( 0 && ui_panel("emspad", 0)) { + for(int i = 0; i <= 5; ++i ) + ui_label(va("axis #%d: %5.2f", i, (float)state.axis[i])); + + for(int i = 0; i <= 15; ++i ) + ui_label(va("button #%d: %d %5.2f", i, state.digitalButton[i], (float)state.analogButton[i])); + + ui_panel_end(); + } + } +#else + int jid = GLFW_JOYSTICK_1 + 0; // @fixme + if( glfwGetGamepadName(jid) ) { // glfwJoystickPresent(jid) && glfwJoystickIsGamepad(jid) ) { + bits[GAMEPAD_CONNECTED] = 1; + strings[GAMEPAD_GUID] = glfwGetJoystickGUID(jid); + strings[GAMEPAD_NAME] = glfwGetGamepadName(jid); + floats[GAMEPAD_BATTERY] = 100; //glfwJoystickCurrentPowerLevel(jid); + + GLFWgamepadstate state; + if (glfwGetGamepadState(jid, &state)) { + bits[GAMEPAD_A] = state.buttons[GLFW_GAMEPAD_BUTTON_A]; // cross + bits[GAMEPAD_B] = state.buttons[GLFW_GAMEPAD_BUTTON_B]; // circle + bits[GAMEPAD_X] = state.buttons[GLFW_GAMEPAD_BUTTON_X]; // square + bits[GAMEPAD_Y] = state.buttons[GLFW_GAMEPAD_BUTTON_Y]; // triangle + + bits[GAMEPAD_UP] = state.buttons[GLFW_GAMEPAD_BUTTON_DPAD_UP]; + bits[GAMEPAD_DOWN] = state.buttons[GLFW_GAMEPAD_BUTTON_DPAD_DOWN]; + bits[GAMEPAD_LEFT] = state.buttons[GLFW_GAMEPAD_BUTTON_DPAD_LEFT]; + bits[GAMEPAD_RIGHT] = state.buttons[GLFW_GAMEPAD_BUTTON_DPAD_RIGHT]; + + bits[GAMEPAD_LB] = state.buttons[GLFW_GAMEPAD_BUTTON_LEFT_BUMPER]; + bits[GAMEPAD_RB] = state.buttons[GLFW_GAMEPAD_BUTTON_RIGHT_BUMPER]; + bits[GAMEPAD_MENU] = state.buttons[GLFW_GAMEPAD_BUTTON_BACK]; + bits[GAMEPAD_START] = state.buttons[GLFW_GAMEPAD_BUTTON_START]; // _GUIDE + + bits[GAMEPAD_LTHUMB] = state.buttons[GLFW_GAMEPAD_BUTTON_LEFT_THUMB]; + bits[GAMEPAD_RTHUMB] = state.buttons[GLFW_GAMEPAD_BUTTON_RIGHT_THUMB]; + + floats[GAMEPAD_LT] = input_filter_positive(state.axes[GLFW_GAMEPAD_AXIS_LEFT_TRIGGER]); // [-1..+1] -> [0..1] + floats[GAMEPAD_RT] = input_filter_positive(state.axes[GLFW_GAMEPAD_AXIS_RIGHT_TRIGGER]); // [-1..+1] -> [0..1] + + floats[GAMEPAD_LPADX] = state.axes[GLFW_GAMEPAD_AXIS_LEFT_X]; + floats[GAMEPAD_LPADY] = -state.axes[GLFW_GAMEPAD_AXIS_LEFT_Y]; + + floats[GAMEPAD_RPADX] = state.axes[GLFW_GAMEPAD_AXIS_RIGHT_X]; + floats[GAMEPAD_RPADY] = -state.axes[GLFW_GAMEPAD_AXIS_RIGHT_Y]; + } + } +#endif + + *input_logger(0,+1) = controller[0]; +} + +int input_use(int id) { + return controller_id >= 0 && controller_id <= 3 ? controller_id = id, 1 : 0; +} + +float input_frame( int vk, int frame ) { + if( controller_id > 0 ) return 0; // @fixme + struct controller_t *c = input_logger(frame, +0); + if(vk < GAMEPAD_LPADX) return c->bits[vk]; // if in bits... + if(vk < GAMEPAD_GUID) return c->floats[vk - GAMEPAD_LPADX]; // if in floats... + return 0.f; // NAN? +} +vec2 input_frame2( int vk, int frame ) { + return vec2( input_frame(vk, frame), input_frame(vk+1, frame) ); +} + +const char *input_string( int vk ) { + int frame = 0; + if( controller_id > 0 ) return ""; // @fixme + struct controller_t *c = input_logger(frame, +0); + return vk >= GAMEPAD_GUID ? c->strings[vk - GAMEPAD_GUID] : ""; // if in strings... +} + +// --- sugars + +float input_diff( int vk ) { + return input_frame(vk, 0) - input_frame(vk, -1); +} +vec2 input_diff2( int vk ) { + return vec2( input_diff(vk), input_diff(vk+1) ); +} +float input( int vk ) { + return input_frame( vk, 0 ); +} +vec2 input2( int vk ) { + return vec2( input_frame(vk, 0), input_frame(vk+1, 0) ); +} + +// --- events + +const float MS2FRAME = 0.06f; // 60 hz/1000 ms + +int event( int vk ) { + float v = input_frame(vk,0); + return (v * v) > 0; +} +int input_chord2( int vk1, int vk2 ) { + return event(vk1) && event(vk2); +} +int input_chord3( int vk1, int vk2, int vk3 ) { + return event(vk1) && input_chord2(vk2, vk3); +} +int input_chord4( int vk1, int vk2, int vk3, int vk4 ) { + return event(vk1) && input_chord3(vk2, vk3, vk4); +} +int input_down( int vk ) { + return input_diff(vk) > 0; // input_frame(vk,-1) <= 0 && input_frame(vk,0) > 0; +} +int input_held( int vk ) { + return input_diff(vk) == 0 && input_frame(vk,0) > 0; // input_frame(vk,-1) > 0 && input_frame(vk,0) > 0; +} +int input_up( int vk ) { + return input_diff(vk) < 0; // input_frame(vk,-1) > 0 && input_frame(vk,0) <= 0; +} +int input_idle( int vk ) { + return input_diff(vk) == 0 && input_frame(vk,0) <= 0; // input_frame(vk,-1) <= 0 && input_frame(vk,0) <= 0; +} +int input_repeat( int vk, int ms ) { // @fixme: broken + assert((unsigned)ms <= 1000); + return input_frame(vk,-ms * MS2FRAME ) > 0 && input_frame(vk,-ms * MS2FRAME /2) > 0 && input_frame(vk,0) > 0; +} +int input_click( int vk, int ms ) { // @fixme: broken + assert((unsigned)ms <= 1000); + return input_frame(vk,-ms * MS2FRAME ) <= 0 && input_frame(vk,-ms * MS2FRAME /2) > 0 && input_frame(vk,0) <= 0; +} +int input_click2( int vk, int ms ) { // @fixme: broken + assert((unsigned)ms <= 1000); + return input_frame(vk,-ms * MS2FRAME ) <= 0 && input_frame(vk,-ms * MS2FRAME *3/4) > 0 + && input_frame(vk,-ms * MS2FRAME *2/4) <= 0 && input_frame(vk,-ms * MS2FRAME *1/4) > 0 && input_frame(vk,0) <= 0; +} + +#undef MS2FRAME + +// --- filters + +float input_filter_positive( float v ) { // [-1..1] -> [0..1] + return ( v + 1 ) * 0.5f; +} +vec2 input_filter_positive2( vec2 v ) { // [-1..1] -> [0..1] + return scale2(inc2(v,1), 0.5f); +} + +vec2 input_filter_deadzone( vec2 v, float deadzone ) { + assert(deadzone > 0); + float mag = sqrt( v.x*v.x + v.y*v.y ); + float nx = v.x / mag, ny = v.y / mag, k = (mag - deadzone) / (1 - deadzone); + if( k > 1 ) k = 1; // clamp + // k = k * k; // uncomment for a smoother curve + return mag < deadzone ? vec2(0, 0) : vec2(nx * k, ny * k); +} + +vec2 input_filter_deadzone_4way( vec2 v, float deadzone ) { + assert(deadzone > 0); + float v0 = v.x*v.x < deadzone*deadzone ? 0 : v.x; + float v1 = v.y*v.y < deadzone*deadzone ? 0 : v.y; + return vec2(v0, v1); +} + +int input_enum(const char *vk) { + static map(char*,int) m = 0; + do_once { + map_init_str(m); + #define k(VK) map_find_or_add(m, STRINGIZE(VK), KEY_##VK); map_find_or_add(m, STRINGIZE(KEY_##VK), KEY_##VK); + k(ESC) + k(TICK) k(1) k(2) k(3) k(4) k(5) k(6) k(7) k(8) k(9) k(0) k(BS) + k(TAB) k(Q) k(W) k(E) k(R) k(T) k(Y) k(U) k(I) k(O) k(P) + k(CAPS) k(A) k(S) k(D) k(F) k(G) k(H) k(J) k(K) k(L) k(ENTER) + k(LSHIFT) k(Z) k(X) k(C) k(V) k(B) k(N) k(M) k(RSHIFT) k(UP) + k(LCTRL) k(LALT) k(SPACE) k(RALT) k(RCTRL) k(LEFT) k(DOWN) k(RIGHT) + + k(F1) k(F2) k(F3) k(F4) k(F5) k(F6) k(F7) k(F8) k(F9) k(F10) k(F11) k(F12) k(PRINT) k(PAUSE) + k(INS) k(HOME) k(PGUP) k(DEL) k(END) k(PGDN) + + k(ALT) k(CTRL) k(SHIFT) + #undef k + }; + int *found = map_find(m, (char*)vk); + return found ? *found : -1; +} + +int input_eval(const char *expression) { + if( expression && expression[0] ) { + return eval(expression) > 0; + } + return 0; +} + +// converts keyboard code to its latin char (if any) +char input_keychar(unsigned code) { + #define k2(VK,GLFW) [KEY_##VK] = GLFW_KEY_##GLFW + #define k(VK) k2(VK,VK) + int table[256] = { + k2(ESC,ESCAPE), + k2(TICK,GRAVE_ACCENT), k(1),k(2),k(3),k(4),k(5),k(6),k(7),k(8),k(9),k(0), k2(BS,BACKSPACE), + k(TAB), k(Q),k(W),k(E),k(R),k(T),k(Y),k(U),k(I),k(O),k(P), + k2(CAPS,CAPS_LOCK), k(A),k(S),k(D),k(F),k(G),k(H),k(J),k(K),k(L), k(ENTER), + k2(LSHIFT,LEFT_SHIFT), k(Z),k(X),k(C),k(V),k(B),k(N),k(M), k2(RSHIFT,RIGHT_SHIFT), k(UP), + k2(LCTRL,LEFT_CONTROL),k2(LALT,LEFT_ALT), k(SPACE), k2(RALT,RIGHT_ALT),k2(RCTRL,RIGHT_CONTROL), k(LEFT),k(DOWN),k(RIGHT), + + k(F1),k(F2),k(F3),k(F4),k(F5),k(F6),k(F7),k(F8),k(F9),k(F10),k(F11),k(F12), k2(PRINT,PRINT_SCREEN),k(PAUSE), + k2(INS,INSERT),k(HOME),k2(PGUP,PAGE_UP), k2(DEL,DELETE),k(END), k2(PGDN,PAGE_DOWN), + }; + #undef k + #undef k2 + + code = table[ code & 255 ]; + + const char* name = glfwGetKeyName(code, 0); + if( name && strlen(name) == 1 ) { + return *name >= 'A' && *name <= 'Z' ? name[0] - 'A' + 'a' : name[0]; + } + + if( code >= GLFW_KEY_0 && code <= GLFW_KEY_9 ) return code - GLFW_KEY_0 + '0'; + if( code >= GLFW_KEY_A && code <= GLFW_KEY_Z ) return code - GLFW_KEY_A + 'a'; + switch(code) { + default: break; + case GLFW_KEY_APOSTROPHE: return '\''; + case GLFW_KEY_BACKSLASH: return '\\'; + case GLFW_KEY_COMMA: return ','; + case GLFW_KEY_EQUAL: return '='; + case GLFW_KEY_GRAVE_ACCENT: return '`'; + case GLFW_KEY_LEFT_BRACKET: return '['; + case GLFW_KEY_MINUS: return '-'; + case GLFW_KEY_PERIOD: return '.'; + case GLFW_KEY_RIGHT_BRACKET: return ']'; + case GLFW_KEY_SEMICOLON: return ';'; + case GLFW_KEY_SLASH: return '/'; + //case GLFW_KEY_WORLD_1: return non-US #1; + //case GLFW_KEY_WORLD_2: return non-US #2; + } + + return '\0'; +} + +// -- multi-touch input +// multi-touch(emscripten) port based on code by @procedural (MIT-0 licensed) + +#if !is(ems) + +void touch_init() {} +void touch_flush() {} +void input_touch_area(unsigned button, vec2 from, vec2 to) {} +vec2 input_touch(unsigned button, float sensitivity) { return vec2(0,0); } +vec2 input_touch_delta_from_origin(unsigned button, float sensitivity) { return vec2(0,0); } +vec2 input_touch_delta(unsigned button, float sensitivity) { return vec2(0,0); } +bool input_touch_active() { return false; } + +#else + +static struct touch { + bool init; + vec2 move, cached, origin, prev; + vec4 area; +} touch[2] = {0}; + +static EM_BOOL touch_move(int eventType, const EmscriptenTouchEvent *e, void *userData) { + for( int i = 0; i < (int)e->numTouches; ++i) { + if( !e->touches[i].isChanged ) continue; + int j = e->touches[i].identifier; + if( j >= countof(touch) ) continue; + + touch[j].cached = vec2(e->touches[i].clientX, e->touches[i].clientY); + if (!touch[j].init) touch[j].init = 1, touch[j].origin = touch[j].prev = touch[j].move = touch[j].cached; + } + + return EM_TRUE; +} + +static EM_BOOL touch_end(int eventType, const EmscriptenTouchEvent *e, void *userData) { + for( int i = 0; i < (int)e->numTouches; ++i) { + if( !e->touches[i].isChanged ) continue; + int j = e->touches[i].identifier; + if( j >= countof(touch) ) continue; + + //memset(&touch[j], 0, sizeof(touch[j])); + touch[j].init = false; + touch[j].move = touch[j].cached = touch[j].origin = touch[j].prev = vec2(0,0); + } + + return EM_TRUE; +} + +void input_touch_area(unsigned button, vec2 from_ndc, vec2 to_ndc) { + if( button >= countof(touch) ) return; + touch[button].area = vec4( from_ndc.x, from_ndc.y, to_ndc.x, to_ndc.y ); +} + +void touch_init() { + memset(touch, 0, sizeof(touch)); + + // default areas: left screen (button #0) and right_screen (button #1) + input_touch_area(0, vec2(0.0,0.0), vec2(0.5,1.0)); + input_touch_area(1, vec2(0.5,0.0), vec2(1.0,1.0)); + + emscripten_set_touchstart_callback("#canvas", 0, EM_FALSE, &touch_move); + emscripten_set_touchmove_callback("#canvas", 0, EM_FALSE, &touch_move); + emscripten_set_touchend_callback("#canvas", 0, EM_FALSE, &touch_end); +} + +void touch_flush() { + for( int j = 0; j < countof(touch); ++j) { + touch[j].prev = touch[j].move; + touch[j].move = touch[j].cached; + } +} + +static +unsigned input_locate_button(unsigned button) { + // locate button in user-defined areas + vec2 c = window_canvas(); + for( int j = 0; j < countof(touch); ++j ) { + if( touch[j].init ) + if( touch[j].origin.x >= (touch[button].area.x * c.x) ) + if( touch[j].origin.y >= (touch[button].area.y * c.y) ) + if( touch[j].origin.x <= (touch[button].area.z * c.x) ) + if( touch[j].origin.y <= (touch[button].area.w * c.y) ) + return j; + } + return ~0u; +} + +vec2 input_touch(unsigned button, float sensitivity) { + button = input_locate_button(button); + if( button >= countof(touch) ) return vec2(0,0); + return touch[button].init ? touch[button].move : vec2(0,0); +} + +vec2 input_touch_delta(unsigned button, float sensitivity) { + button = input_locate_button(button); + if( button >= countof(touch) ) return vec2(0,0); + return touch[button].init ? scale2( sub2(touch[button].move, touch[button].prev), sensitivity ) : vec2(0,0); +} + +vec2 input_touch_delta_from_origin(unsigned button, float sensitivity) { + button = input_locate_button(button); + if( button >= countof(touch) ) return vec2(0,0); + return touch[button].init ? scale2( sub2(touch[button].move, touch[button].origin), sensitivity ) : vec2(0,0); +} + +bool input_touch_active() { + for( int j = 0; j < countof(touch); ++j ) { + if( touch[j].init ) return true; + } + return false; +} + +#endif // !is(ems) + +int ui_mouse() { + ui_label2_float("X", input(MOUSE_X)); + ui_label2_float("Y", input(MOUSE_Y)); + ui_label2_float("Wheel", input(MOUSE_W)); + ui_separator(); + ui_label2_bool("Left", input(MOUSE_L)); + ui_label2_bool("Middle", input(MOUSE_M)); + ui_label2_bool("Right", input(MOUSE_R)); + ui_separator(); + for( int i = 0; i <= CURSOR_SW_AUTO; ++i ) if(ui_button(va("Cursor shape #%d", i))) window_cursor_shape(i); + + return 0; +} + +int ui_keyboard() { + char *keys[] = { + "F1","F2","F3","F4","F5","F6","F7","F8","F9","F10","F11","F12", + "ESC", + "TICK","1","2","3","4","5","6","7","8","9","0","BS", + "TAB","Q","W","E","R","T","Y","U","I","O","P", + "CAPS","A","S","D","F","G","H","J","K","L","ENTER", + "LSHIFT","Z","X","C","V","B","N","M","RSHIFT","^", + "LCTRL","LALT","SPACE","RALT","RCTRL","<","V",">", + }; + + float rows[] = { + 12, + 1, + 12, + 11, + 11, + 10, + 8 + }; + + for( int row = 0, k = 0; row < countof(rows); ++row ) { + static char *buf = 0; if(buf) *buf = 0; + for( int col = 0; col < rows[row]; ++col, ++k ) { + assert( input_enum(keys[k]) == input_enum(va("KEY_%s", keys[k])) ); + strcatf(&buf, input(input_enum(keys[k])) ? "[%s]" : " %s ", keys[k]); + } + ui_label(buf); + } + + return 0; +} + +int ui_gamepad(int gamepad_id) { + input_use(gamepad_id); + + bool connected = !!input(GAMEPAD_CONNECTED); + + ui_label2("Name", connected ? input_string(GAMEPAD_NAME) : "(Not connected)"); + + if( !connected ) ui_disable(); + + ui_separator(); + + ui_label2_bool("A", input(GAMEPAD_A) ); + ui_label2_bool("B", input(GAMEPAD_B) ); + ui_label2_bool("X", input(GAMEPAD_X) ); + ui_label2_bool("Y", input(GAMEPAD_Y) ); + ui_label2_bool("Up", input(GAMEPAD_UP) ); + ui_label2_bool("Down", input(GAMEPAD_DOWN) ); + ui_label2_bool("Left", input(GAMEPAD_LEFT) ); + ui_label2_bool("Right", input(GAMEPAD_RIGHT) ); + ui_label2_bool("Menu", input(GAMEPAD_MENU) ); + ui_label2_bool("Start", input(GAMEPAD_START) ); + + ui_separator(); + + ui_label2_float("Left pad x", input(GAMEPAD_LPADX) ); + ui_label2_float("Left pad y", input(GAMEPAD_LPADY) ); + ui_label2_float("Left trigger", input(GAMEPAD_LT) ); + ui_label2_bool("Left bumper", input(GAMEPAD_LB) ); + ui_label2_bool("Left thumb", input(GAMEPAD_LTHUMB) ); + + vec2 v = input_filter_deadzone( input2(GAMEPAD_LPADX), 0.1f ); + ui_label2_float("Filtered pad x", v.x); + ui_label2_float("Filtered pad y", v.y); + + ui_separator(); + + ui_label2_float("Right pad x", input(GAMEPAD_RPADX) ); + ui_label2_float("Right pad y", input(GAMEPAD_RPADY) ); + ui_label2_float("Right trigger", input(GAMEPAD_RT) ); + ui_label2_bool("Right bumper", input(GAMEPAD_RB) ); + ui_label2_bool("Right thumb", input(GAMEPAD_RTHUMB) ); + + vec2 w = input_filter_deadzone( input2(GAMEPAD_RPADX), 0.1f ); + ui_label2_float("Filtered pad x", w.x); + ui_label2_float("Filtered pad y", w.y); + + ui_enable(); + + input_use(0); + return 0; +} + +int ui_gamepads() { + for( int i = 0; i < 4; ++i ) ui_gamepad(i); + + return 0; +} #line 0 #line 1 "v4k_math.c" -// ----------------------------------------------------------------------------- -// math framework: rand, ease, vec2, vec3, vec4, quat, mat2, mat33, mat34, mat4 -// - rlyeh, public domain -// -// Credits: @ands+@krig+@vurtun (PD), @datenwolf (WTFPL2), @evanw+@barerose (CC0), @sgorsten (Unlicense). - -#include -#include -#include -#include - -static uint64_t rand_xoro256(uint64_t x256_s[4]) { // xoshiro256+ 1.0 by David Blackman and Sebastiano Vigna (PD) - const uint64_t result = x256_s[0] + x256_s[3]; - const uint64_t t = x256_s[1] << 17; - - x256_s[2] ^= x256_s[0]; - x256_s[3] ^= x256_s[1]; - x256_s[1] ^= x256_s[2]; - x256_s[0] ^= x256_s[3]; - - x256_s[2] ^= t; - - x256_s[3] = (x256_s[3] << 45) | (x256_s[3] >> (64 - 45)); //x256_rotl(x256_s[3], 45); - - return result; -} -static __thread uint64_t rand_state[4] = {// = splitmix64(0),splitmix64(splitmix64(0)),... x4 times - UINT64_C(0x9e3779b8bb0b2c64),UINT64_C(0x3c6ef372178960e7), - UINT64_C(0xdaa66d2b71a12917),UINT64_C(0x78dde6e4d584aef9) -}; -void randset(uint64_t x) { - x = hash_64(x); - for( int i = 0; i < 4; ++i) { - // http://xoroshiro.di.unimi.it/splitmix64.c - uint64_t z = (x += UINT64_C(0x9E3779B97F4A7C15)); - z = (z ^ (z >> 30)) * UINT64_C(0xBF58476D1CE4E5B9); - z = (z ^ (z >> 27)) * UINT64_C(0x94D049BB133111EB); - x = x ^ (z >> 31); - rand_state[i] = x; - } -} -uint64_t rand64(void) { - return rand_xoro256(rand_state); -} -double randf(void) { // [0, 1) interval - uint64_t u64 = rand64(); - // fastest way to convert in C99 a 64-bit unsigned integer to a 64-bit double - union { uint64_t i; double d; } u; u.i = UINT64_C(0x3FF) << 52 | u64 >> 12; - double dbl = u.d - 1.0; - return 1 - 2.0 * ((float)(dbl / 2)); -} -int randi(int mini, int maxi) { // [mini, maxi) interval ; @todo: test randi(-4,4) and #define randi(m,x) (m + randf() * (x-m)) - if( mini < maxi ) { - uint32_t x, r, range = maxi - mini; - do r = (x = rand64()) % range; while(range > (r-x)); - return mini + r; - } - return mini > maxi ? randi(maxi, mini) : mini; -} -#if 0 // @todo: deprecate me -double rng(void) { // [0..1) Lehmer RNG "minimal standard" - static __thread unsigned int seed = 123; - seed *= 16807; - return seed / (double)0x100000000ULL; -} -#endif - -// ---------------------------------------------------------------------------- - -// @todo: evaluate stb_perlin.h as well -float simplex1( float v ){ return snoise1(v); } -float simplex2( vec2 v ) { return snoise2(v.x,v.y); } -float simplex3( vec3 v ) { return snoise3(v.x,v.y,v.z); } -float simplex4( vec4 v ) { return snoise4(v.x,v.y,v.z,v.w); } - -// ---------------------------------------------------------------------------- - -float deg (float radians) { return radians / C_PI * 180.0f; } -float rad (float degrees) { return degrees * C_PI / 180.0f; } - -int mini (int a, int b) { return a < b ? a : b; } -int maxi (int a, int b) { return a > b ? a : b; } -int absi (int a ) { return a < 0 ? -a : a; } -int clampi (int v,int a,int b) { return maxi(mini(b,v),a); } - -float minf (float a, float b) { return a < b ? a : b; } -float maxf (float a, float b) { return a > b ? a : b; } -float absf (float a ) { return a < 0.0f ? -a : a; } -float pmodf (float a, float b) { return (a < 0.0f ? 1.0f : 0.0f) + (float)fmod(a, b); } // positive mod -float signf (float a) { return (a < 0) ? -1.f : 1.f; } -float clampf(float v,float a,float b){return maxf(minf(b,v),a); } -float mixf(float a,float b,float t) { return a*(1-t)+b*t; } -float slerpf(float a,float b,float t) { - a = fmod(a, 360); if (a < 0) a += 360; - b = fmod(b, 360); if (b < 0) b += 360; - float diff = b - a; - if (diff < 0.0) - diff += 360.0; - - float r = a + t*diff; - if (r >= 360.0) - r -= 360.0; - return r; -} -float fractf (float a) { return a - (int)a; } - -// ---------------------------------------------------------------------------- - -vec2 ptr2 (const float *a ) { return vec2(a[0],a[1]); } -// -vec2 neg2 (vec2 a ) { return vec2(-a.x, -a.y); } -vec2 add2 (vec2 a, vec2 b) { return vec2(a.x + b.x, a.y + b.y); } -vec2 sub2 (vec2 a, vec2 b) { return vec2(a.x - b.x, a.y - b.y); } -vec2 mul2 (vec2 a, vec2 b) { return vec2(a.x * b.x, a.y * b.y); } -vec2 div2 (vec2 a, vec2 b) { return vec2(a.x / (b.x + !b.x), a.y / (b.y + !b.y)); } -vec2 inc2 (vec2 a, float b) { return vec2(a.x + b, a.y + b); } -vec2 dec2 (vec2 a, float b) { return vec2(a.x - b, a.y - b); } -vec2 scale2 (vec2 a, float b) { return vec2(a.x * b, a.y * b); } -vec2 pmod2 (vec2 a, float b) { return vec2(pmodf(a.x, b), pmodf(a.y, b)); } -vec2 min2 (vec2 a, vec2 b) { return vec2(minf(a.x, b.x), minf(a.y, b.y)); } -vec2 max2 (vec2 a, vec2 b) { return vec2(maxf(a.x, b.x), maxf(a.y, b.y)); } -vec2 abs2 (vec2 a ) { return vec2(absf(a.x), absf(a.y)); } -vec2 floor2 (vec2 a ) { return vec2(floorf(a.x), floorf(a.y)); } -vec2 fract2 (vec2 a ) { return sub2(a, floor2(a)); } -vec2 ceil2 (vec2 a ) { return vec2(ceilf (a.x), ceilf (a.y)); } -float dot2 (vec2 a, vec2 b) { return a.x * b.x + a.y * b.y; } -vec2 refl2 (vec2 a, vec2 b) { return sub2(a, scale2(b, 2*dot2(a,b))); } -float cross2 (vec2 a, vec2 b) { return a.x * b.y - a.y * b.x; } // pseudo cross product -float len2sq (vec2 a ) { return a.x * a.x + a.y * a.y; } -float len2 (vec2 a ) { return sqrtf(len2sq(a)); } -vec2 norm2 (vec2 a ) { return len2sq(a) == 0 ? a : scale2(a, 1 / len2(a)); } -vec2 norm2sq (vec2 a ) { return len2sq(a) == 0 ? a : scale2(a, 1 / len2sq(a)); } -int finite2 (vec2 a ) { return FINITE(a.x) && FINITE(a.y); } -vec2 mix2 (vec2 a,vec2 b,float t) { return add2(scale2((a),1-(t)), scale2((b), t)); } -vec2 clamp2(vec2 v, vec2 a, vec2 b){ return vec2(maxf(minf(b.x,v.x),a.x),maxf(minf(b.y,v.y),a.y)); } -vec2 clamp2f(vec2 v,float a,float b){ return vec2(maxf(minf(b,v.x),a),maxf(minf(b,v.y),a)); } -// ---------------------------------------------------------------------------- - -vec3 ptr3 (const float *a ) { return vec3(a[0],a[1],a[2]); } -vec3 vec23 (vec2 a, float z ) { return vec3(a.x,a.y,z); } -// -vec3 neg3 (vec3 a ) { return vec3(-a.x, -a.y, -a.z); } -vec3 add3 (vec3 a, vec3 b) { return vec3(a.x + b.x, a.y + b.y, a.z + b.z); } -vec3 sub3 (vec3 a, vec3 b) { return vec3(a.x - b.x, a.y - b.y, a.z - b.z); } -vec3 mul3 (vec3 a, vec3 b) { return vec3(a.x * b.x, a.y * b.y, a.z * b.z); } -vec3 div3 (vec3 a, vec3 b) { return vec3(a.x / (b.x + !b.x), a.y / (b.y + !b.y), a.z / (b.z + !b.z)); } -vec3 inc3 (vec3 a, float b) { return vec3(a.x + b, a.y + b, a.z + b); } -vec3 dec3 (vec3 a, float b) { return vec3(a.x - b, a.y - b, a.z - b); } -vec3 scale3 (vec3 a, float b) { return vec3(a.x * b, a.y * b, a.z * b); } -vec3 pmod3 (vec3 a, float b) { return vec3(pmodf(a.x, b), pmodf(a.y, b), pmodf(a.z, b)); } -vec3 min3 (vec3 a, vec3 b) { return vec3(minf(a.x, b.x), minf(a.y, b.y), minf(a.z, b.z)); } -vec3 max3 (vec3 a, vec3 b) { return vec3(maxf(a.x, b.x), maxf(a.y, b.y), maxf(a.z, b.z)); } -vec3 abs3 (vec3 a ) { return vec3(absf(a.x), absf(a.y), absf(a.z)); } -vec3 floor3 (vec3 a ) { return vec3(floorf(a.x), floorf(a.y), floorf(a.z)); } -vec3 fract3 (vec3 a ) { return sub3(a, floor3(a)); } -vec3 ceil3 (vec3 a ) { return vec3(ceilf (a.x), ceilf (a.y), ceilf (a.z)); } -vec3 cross3 (vec3 a, vec3 b) { return vec3(a.y * b.z - b.y * a.z, a.z * b.x - b.z * a.x, a.x * b.y - b.x * a.y); } -float dot3 (vec3 a, vec3 b) { return a.x * b.x + a.y * b.y + a.z * b.z; } -vec3 refl3 (vec3 a, vec3 b) { return sub3(a, scale3(b, 2*dot3(a, b))); } -float len3sq (vec3 a ) { return dot3(a,a); } -float len3 (vec3 a ) { return sqrtf(len3sq(a)); } -vec3 norm3 (vec3 a ) { return len3sq(a) == 0 ? a : scale3(a, 1 / len3(a)); } -vec3 norm3sq (vec3 a ) { return len3sq(a) == 0 ? a : scale3(a, 1 / len3sq(a)); } -int finite3 (vec3 a ) { return finite2(vec2(a.x,a.y)) && FINITE(a.z); } -vec3 mix3 (vec3 a,vec3 b,float t) { return add3(scale3((a),1-(t)), scale3((b), t)); } -vec3 clamp3(vec3 v, vec3 a, vec3 b){ return vec3(maxf(minf(b.x,v.x),a.x),maxf(minf(b.y,v.y),a.y),maxf(minf(b.z,v.z),a.z)); } -vec3 clamp3f(vec3 v,float a,float b){ return vec3(maxf(minf(b,v.x),a),maxf(minf(b,v.y),a),maxf(minf(b,v.z),a)); } -//vec3 tricross3 (vec3 a, vec3 b, vec3 c) { return cross3(a,cross3(b,c)); } // useful? -void ortho3 (vec3 *left, vec3 *up, vec3 v) { -#if 0 - if ((v.z * v.z) > (0.7f * 0.7f)) { - float sqrlen = v.y*v.y + v.z*v.z; - float invlen = 1.f / sqrtf(sqrlen); - *up = vec3(0, v.z*invlen, -v.y*invlen); - *left = vec3(sqrlen*invlen, -v.x*up->z, v.x*up->y); - } else { - float sqrlen = v.x*v.x + v.y*v.y; - float invlen = 1.f / sqrtf(sqrlen); - *left = vec3(-v.y*invlen, v.x*invlen, 0); - *up = vec3(-v.z*left->y, v.z*left->x, sqrlen*invlen); - } -#else - *left = (v.z*v.z) < (v.x*v.x) ? vec3(v.y,-v.x,0) : vec3(0,-v.z,v.y); - *up = cross3(*left, v); -#endif -} - -#define rotateq3(v,q) transformq(q,v) -vec3 rotatex3(vec3 dir, float degrees) { return rotateq3(dir, rotationq(degrees,1,0,0)); } -vec3 rotatey3(vec3 dir, float degrees) { return rotateq3(dir, rotationq(degrees,0,1,0)); } -vec3 rotatez3(vec3 dir, float degrees) { return rotateq3(dir, rotationq(degrees,0,0,1)); } - -// ---------------------------------------------------------------------------- - -vec4 ptr4 (const float *a ) { return vec4(a[0],a[1],a[2],a[3]); } -vec4 vec34 (vec3 a, float w ) { return vec4(a.x,a.y,a.z,w); } -// -vec4 neg4 (vec4 a ) { return vec4(-a.x, -a.y, -a.z, -a.w); } -vec4 add4 (vec4 a, vec4 b) { return vec4(a.x + b.x, a.y + b.y, a.z + b.z, a.w + b.w); } -vec4 sub4 (vec4 a, vec4 b) { return vec4(a.x - b.x, a.y - b.y, a.z - b.z, a.w - b.w); } -vec4 mul4 (vec4 a, vec4 b) { return vec4(a.x * b.x, a.y * b.y, a.z * b.z, a.w * b.w); } -vec4 div4 (vec4 a, vec4 b) { return vec4(a.x / (b.x + !b.x), a.y / (b.y + !b.y), a.z / (b.z + !b.z), a.w / (b.w + !b.w)); } -vec4 inc4 (vec4 a, float b) { return vec4(a.x + b, a.y + b, a.z + b, a.w + b); } -vec4 dec4 (vec4 a, float b) { return vec4(a.x - b, a.y - b, a.z - b, a.w - b); } -vec4 scale4 (vec4 a, float b) { return vec4(a.x * b, a.y * b, a.z * b, a.w * b); } -vec4 pmod4 (vec4 a, float b) { return vec4(pmodf(a.x, b), pmodf(a.y, b), pmodf(a.z, b), pmodf(a.w, b)); } -vec4 min4 (vec4 a, vec4 b) { return vec4(minf(a.x, b.x), minf(a.y, b.y), minf(a.z, b.z), minf(a.w, b.w)); } -vec4 max4 (vec4 a, vec4 b) { return vec4(maxf(a.x, b.x), maxf(a.y, b.y), maxf(a.z, b.z), maxf(a.w, b.w)); } -vec4 abs4 (vec4 a ) { return vec4(absf(a.x), absf(a.y), absf(a.z), absf(a.w)); } -vec4 floor4 (vec4 a ) { return vec4(floorf(a.x), floorf(a.y), floorf(a.z), floorf(a.w)); } -vec4 fract4 (vec4 a ) { return sub4(a, floor4(a)); } -vec4 ceil4 (vec4 a ) { return vec4(ceilf (a.x), ceilf (a.y), ceilf (a.z), ceilf (a.w)); } -float dot4 (vec4 a, vec4 b) { return a.x * b.x + a.y * b.y + a.z * b.z + a.w * b.w; } -vec4 refl4 (vec4 a, vec4 b) { return sub4(a, scale4(b, 2*dot4(a, b))); } -float len4sq (vec4 a ) { return dot4(a,a); } -float len4 (vec4 a ) { return sqrtf(len4sq(a)); } -vec4 norm4 (vec4 a ) { return len4sq(a) == 0 ? a : scale4(a, 1 / len4(a)); } -vec4 norm4sq (vec4 a ) { return len4sq(a) == 0 ? a : scale4(a, 1 / len4sq(a)); } -int finite4 (vec4 a ) { return finite3(vec3(a.x,a.y,a.z)) && FINITE(a.w); } -vec4 mix4 (vec4 a,vec4 b,float t) { return add4(scale4((a),1-(t)), scale4((b), t)); } -vec4 clamp4(vec4 v, vec4 a, vec4 b){ return vec4(maxf(minf(b.x,v.x),a.x),maxf(minf(b.y,v.y),a.y),maxf(minf(b.z,v.z),a.z),maxf(minf(b.w,v.w),a.w)); } -vec4 clamp4f(vec4 v,float a,float b){ return vec4(maxf(minf(b,v.x),a),maxf(minf(b,v.y),a),maxf(minf(b,v.z),a),maxf(minf(b,v.w),a)); } -// vec4 cross4(vec4 v0, vec4 v1) { return vec34(cross3(v0.xyz, v1.xyz), (v0.w + v1.w) * 0.5f); } // may fail - -// ---------------------------------------------------------------------------- - -quat idq ( ) { return quat(1,0,0,0); } // 0,0,0,1? -quat ptrq (const float *a ) { return quat(a[0],a[1],a[2],a[3]); } -quat vec3q (vec3 a, float w ) { return quat(a.x,a.y,a.z,w); } -quat vec4q (vec4 a ) { return quat(a.x,a.y,a.z,a.w); } -// -quat negq (quat a ) { return quat(-a.x,-a.y,-a.z,-a.w); } -quat conjq (quat a ) { return quat(-a.x,-a.y,-a.z,a.w); } -quat addq (quat a, quat b) { return quat(a.x+b.x,a.y+b.y,a.z+b.z,a.w+b.w); } -quat subq (quat a, quat b) { return quat(a.x-b.x,a.y-b.y,a.z-b.z,a.w-b.w); } -quat mulq (quat p, quat q) { vec3 w = scale3(p.xyz, q.w), r = add3(add3(cross3(p.xyz, q.xyz), w), scale3(q.xyz, p.w)); return quat(r.x,r.y,r.z,p.w*q.w - dot3(p.xyz, q.xyz)); } -quat scaleq (quat a, float s) { return quat(a.x*s,a.y*s,a.z*s,a.w*s); } -quat normq (quat a ) { vec4 v = norm4(a.xyzw); return quat(v.x,v.y,v.z,v.w); } -float dotq (quat a, quat b) { return a.x*b.x + a.y*b.y + a.z*b.z + a.w*b.w; } -quat mixq(quat a, quat b, float t) { return normq(dotq(a,b) < 0 ? addq(negq(a),scaleq(addq(b,a),t)) : addq(a,scaleq(subq(b,a),t))); } -/* quat lerpq(quat a, quat b, float s) { - return norm(quat((1-s)*a.x + s*b.x, (1-s)*a.y + s*b.y, (1-s)*a.z + s*b.z, (1-s)*a.w + s*b.w)); -}*/ -quat slerpq(quat a, quat b, float s) { //ok ? - float t = acosf(dotq(a,b)), st = sinf(t), wa = sinf((1-s)*t)/st, wb = sinf(s*t)/st; - return normq(quat(wa*a.x + wb*b.x, wa*a.y + wb*b.y, wa*a.z + wb*b.z, wa*a.w + wb*b.w)); -} - -quat rotationq(float deg,float x,float y,float z){ deg=rad(deg)*0.5f; return vec3q(scale3(vec3(x,y,z),sinf(deg)),cosf(deg)); } -quat mat44q (mat44 M) { - float r=0.f; - int perm[] = { 0, 1, 2, 0, 1 }, *p = perm; - for(int i = 0; i<3; i++) { - float m = M[i*4+i]; - if( m < r ) continue; - m = r; - p = &perm[i]; - } - r = sqrtf(1.f + M[p[0]*4+p[0]] - M[p[1]*4+p[1]] - M[p[2]*4+p[2]] ); - return r >= 1e-6 ? quat(1,0,0,0) - : quat(r/2.f, (M[p[0]*4+p[1]] - M[p[1]*4+p[0]])/(2.f*r), (M[p[2]*4+p[0]] - M[p[0]*4+p[2]])/(2.f*r), (M[p[2]*4+p[1]] - M[p[1]*4+p[2]])/(2.f*r) ); -} - -vec3 rotate3q_2(vec3 v, quat q) { // rotate vec3 by quat @testme - vec3 u = {q.x, q.y, q.z}; // extract the vector part of the quaternion - float s = q.w; // scalar part - vec3 cuv = cross3(u, v); - float duv2 = dot3(u, v) * 2; - float ss_duu = s*s - dot3(u, u); - return add3(add3(scale3(u,duv2), scale3(v,ss_duu)), scale3(cuv,2*s)); -} - -vec3 rotate3q(vec3 v, quat r) { // rotate vec3 by quat @testme - float num12 = r.x + r.x; - float num2 = r.y + r.y; - float num = r.z + r.z; - float num11 = r.w * num12; - float num10 = r.w * num2; - float num9 = r.w * num; - float num8 = r.x * num12; - float num7 = r.x * num2; - float num6 = r.x * num; - float num5 = r.y * num2; - float num4 = r.y * num; - float num3 = r.z * num; - float num15 = ((v.x * ((1 - num5) - num3)) + (v.y * (num7 - num9))) + (v.z * (num6 + num10)); - float num14 = ((v.x * (num7 + num9)) + (v.y * ((1 - num8) - num3))) + (v.z * (num4 - num11)); - float num13 = ((v.x * (num6 - num10)) + (v.y * (num4 + num11))) + (v.z * ((1 - num8) - num5)); - return vec3(num15, num14, num13); -} - -// euler <-> quat -vec3 euler (quat q) { // bugs? returns PitchYawRoll (PYR) in degrees. ref: https://en.wikipedia.org/wiki/Conversion_between_quaternions_and_Euler_angles - float sr_cp = 2*(q.x*q.y + q.z*q.w), cr_cp = 1-2*(q.y*q.y + q.z*q.z); - float sy_cp = 2*(q.x*q.w + q.y*q.z), cy_cp = 1-2*(q.z*q.z + q.w*q.w), sp = 2*(q.x*q.z-q.w*q.y); - float p = fabs(sp) >= 1 ? copysignf(C_PI / 2, sp) : asinf(sp); - float y = atan2f(sy_cp, cy_cp); - float r = atan2f(sr_cp, cr_cp); - return scale3(vec3(p, y, r), TO_DEG); -} - -quat eulerq (vec3 pyr_degrees) { // bugs? -#if 0 - quat x = vec3q(vec3(1,0,0),rad(pyr_degrees.x)); // x, not pitch - quat y = vec3q(vec3(0,1,0),rad(pyr_degrees.y)); // y, not yaw - quat z = vec3q(vec3(0,0,1),rad(pyr_degrees.z)); // z, not row - return normq(mulq(mulq(x, y), z)); -#else - float p = rad(pyr_degrees.x), y = rad(pyr_degrees.y), r = rad(pyr_degrees.z); - float ha = p * 0.5f, hb = r * 0.5f, hc = y * 0.5f; - float cp = cosf(ha), sp = sinf(ha), cr = cosf(hb), sr = sinf(hb), cy = cosf(hc), sy = sinf(hc); - return quat(cy*cr*cp + sy*sr*sp, cy*sr*cp - sy*cr*sp, cy*cr*sp + sy*sr*cp, sy*cr*cp - cy*sr*sp); -#endif -} - -// ---------------------------------------------------------------------------- - -void scaling33(mat33 m, float x, float y, float z) { // !!! ok, i guess - m[0] = x; m[1] = 0; m[2] = 0; - m[3] = 0; m[4] = y; m[5] = 0; - m[6] = 0; m[7] = 0; m[8] = z; -} -void scale33(mat33 m, float x, float y, float z) { -#if 0 // original !!! ok, i guess - m[0] *= x; m[1] *= x; m[2] *= x; - m[3] *= y; m[4] *= y; m[5] *= y; - m[6] *= z; m[7] *= z; m[8] *= z; -#else - m[0] *= x; m[3] *= x; m[6] *= x; - m[1] *= y; m[4] *= y; m[7] *= y; - m[2] *= z; m[5] *= z; m[8] *= z; -#endif -} -void id33(mat33 m) { - scaling33(m, 1,1,1); -} -void extract33(mat33 m, const mat44 M) { // extract rot/sca from mat44 - m[0] = M[0]; m[1] = M[1]; m[2] = M[ 2]; - m[3] = M[4]; m[4] = M[5]; m[5] = M[ 6]; - m[6] = M[8]; m[7] = M[9]; m[8] = M[10]; -} -void copy33(mat33 m, const mat33 a) { - for(int i = 0; i < 9; ++i) m[i] = a[i]; -} -// -vec3 mulv33(mat33 m, vec3 v) { - return vec3(m[0]*v.x+m[1]*v.y+m[2]*v.z,m[3]*v.x+m[4]*v.y+m[5]*v.z,m[6]*v.x+m[7]*v.y+m[8]*v.z); -} -void multiply33x2(mat33 m, const mat33 a, const mat33 b) { - m[0] = a[0]*b[0]+a[1]*b[3]+a[2]*b[6]; - m[1] = a[0]*b[1]+a[1]*b[4]+a[2]*b[7]; - m[2] = a[0]*b[2]+a[1]*b[5]+a[2]*b[8]; - - m[3] = a[3]*b[0]+a[4]*b[3]+a[5]*b[6]; - m[4] = a[3]*b[1]+a[4]*b[4]+a[5]*b[7]; - m[5] = a[3]*b[2]+a[4]*b[5]+a[5]*b[8]; - - m[6] = a[6]*b[0]+a[7]*b[3]+a[8]*b[6]; - m[7] = a[6]*b[1]+a[7]*b[4]+a[8]*b[7]; - m[8] = a[6]*b[2]+a[7]*b[5]+a[8]*b[8]; -} - -void rotation33(mat33 m, float degrees, float x,float y,float z) { - float radians = degrees * C_PI / 180.0f; - float s = sinf(radians), c = cosf(radians), c1 = 1.0f - c; - float xy = x*y, yz = y*z, zx = z*x, xs = x*s, ys = y*s, zs = z*s; - m[0] = c1*x*x+c; m[1] = c1*xy-zs; m[2] = c1*zx+ys; - m[3] = c1*xy+zs; m[4] = c1*y*y+c; m[5] = c1*yz-xs; - m[6] = c1*zx-ys; m[7] = c1*yz+xs; m[8] = c1*z*z+c; -} -void rotationq33(mat33 m, quat q) { -#if 0 - float a = q.w, b = q.x, c = q.y, d = q.z; - float a2 = a*a, b2 = b*b, c2 = c*c, d2 = d*d; - m[ 0] = a2 + b2 - c2 - d2; m[ 1] = 2*(b*c + a*d); m[ 2] = 2*(b*d - a*c); - m[ 3] = 2*(b*c - a*d); m[ 4] = a2 - b2 + c2 - d2; m[ 5] = 2*(c*d + a*b); - m[ 6] = 2*(b*d + a*c); m[ 7] = 2*(c*d - a*b); m[ 8] = a2 - b2 - c2 + d2; -#else - float x2 = q.x*q.x, y2 = q.y*q.y, z2 = q.z*q.z, w2 = q.w*q.w; - float xz = q.x*q.z, xy = q.x*q.y, yz = q.y*q.z, wz = q.w*q.z, wy = q.w*q.y, wx = q.w*q.x; - m[0] = 1-2*(y2+z2); m[1] = 2*(xy+wz); m[2] = 2*(xz-wy); - m[3] = 2*(xy-wz); m[4] = 1-2*(x2+z2); m[5] = 2*(yz+wx); - m[6] = 2*(xz+wy); m[7] = 2*(yz-wx); m[8] = 1-2*(x2+y2); -#endif -} -void rotate33(mat33 r, float degrees, float x,float y,float z) { - if(len3sq(vec3(x,y,z)) < (1e-4 * 1e-4)) return; - float m[9]; rotate33(m, degrees, x,y,z); - multiply33x2(r, r, m); -} -void compose33(mat33 m, quat r, vec3 s) { // verify me - rotationq33(m, r); - scale33(m, s.x,s.y,s.z); -} - -// ---------------------------------------------------------------------------- - -void id34(mat34 m) { // verify me - m[ 0] = 1; m[ 1] = 0; m[ 2] = 0; m[ 3] = 0; - m[ 4] = 0; m[ 5] = 1; m[ 6] = 0; m[ 7] = 0; - m[ 8] = 0; m[ 9] = 0; m[10] = 1; m[11] = 0; -} -void copy34(mat34 m, const mat34 a) { - for( int i = 0; i < 12; ++i ) m[i] = a[i]; -} -void scale34(mat34 m, float s) { - for( int i = 0; i < 12; ++i ) m[i] *= s; -} -void add34(mat34 m, mat34 n) { - for( int i = 0; i < 12; ++i ) m[i] += n[i]; -} -void muladd34(mat34 m, mat34 n, float s) { - for( int i = 0; i < 12; ++i ) m[i] += n[i] * s; -} -void add34x2(mat34 m, mat34 n, mat34 o) { - for( int i = 0; i < 12; ++i ) m[i] = n[i] + o[i]; -} -void lerp34(mat34 m, mat34 n, mat34 o, float alpha) { - for( int i = 0; i < 12; ++i ) m[i] = n[i] * (1-alpha) + o[i] * alpha; -} -void multiply34x2(mat34 m, const mat34 m0, const mat34 m1) { - vec4 r0 = { m0[0*4+0], m0[0*4+1], m0[0*4+2], m0[0*4+3] }; // rows - vec4 r1 = { m0[1*4+0], m0[1*4+1], m0[1*4+2], m0[1*4+3] }; - vec4 r2 = { m0[2*4+0], m0[2*4+1], m0[2*4+2], m0[2*4+3] }; - - vec4 c0 = { m1[0*4+0], m1[1*4+0], m1[2*4+0], 0.0f }; // cols - vec4 c1 = { m1[0*4+1], m1[1*4+1], m1[2*4+1], 0.0f }; - vec4 c2 = { m1[0*4+2], m1[1*4+2], m1[2*4+2], 0.0f }; - vec4 c3 = { m1[0*4+3], m1[1*4+3], m1[2*4+3], 1.0f }; - - m[ 0] = dot4(r0, c0); m[ 1] = dot4(r0, c1); m[ 2] = dot4(r0, c2); m[ 3] = dot4(r0, c3); - m[ 4] = dot4(r1, c0); m[ 5] = dot4(r1, c1); m[ 6] = dot4(r1, c2); m[ 7] = dot4(r1, c3); - m[ 8] = dot4(r2, c0); m[ 9] = dot4(r2, c1); m[10] = dot4(r2, c2); m[11] = dot4(r2, c3); -} -void multiply34(mat34 m, const mat34 a) { - mat34 x; copy34(x, m); - multiply34x2(m, x, a); -} -void multiply34x3(mat34 m, const mat34 a, const mat34 b, const mat34 c) { - mat34 x; - multiply34x2(x, a, b); - multiply34x2(m, x, c); -} -void compose34(mat34 m, vec3 t, quat q, vec3 s) { - m[ 0] = s.x * (1 - 2 * q.y * q.y - 2 * q.z * q.z); - m[ 1] = s.y * ( 2 * q.x * q.y - 2 * q.w * q.z); - m[ 2] = s.z * ( 2 * q.x * q.z + 2 * q.w * q.y); - m[ 3] = t.x; - m[ 4] = s.x * ( 2 * q.x * q.y + 2 * q.w * q.z); - m[ 5] = s.y * (1 - 2 * q.x * q.x - 2 * q.z * q.z); - m[ 6] = s.z * ( 2 * q.y * q.z - 2 * q.w * q.x); - m[ 7] = t.y; - m[ 8] = s.x * ( 2 * q.x * q.z - 2 * q.w * q.y); - m[ 9] = s.y * ( 2 * q.y * q.z + 2 * q.w * q.x); - m[10] = s.z * (1 - 2 * q.x * q.x - 2 * q.y * q.y); - m[11] = t.z; -} -void invert34(mat34 m, const mat34 o) { - vec3 a = norm3sq(vec3(o[0*4+0], o[1*4+0], o[2*4+0])); - vec3 b = norm3sq(vec3(o[0*4+1], o[1*4+1], o[2*4+1])); - vec3 c = norm3sq(vec3(o[0*4+2], o[1*4+2], o[2*4+2])); - vec3 trans = vec3(o[0*4+3], o[1*4+3], o[2*4+3]); - vec4 A = vec34(a, -dot3(a, trans)); - vec4 B = vec34(b, -dot3(b, trans)); - vec4 C = vec34(c, -dot3(c, trans)); - m[ 0] = A.x; m[ 1] = A.y; m[ 2] = A.z; m[ 3] = A.w; - m[ 4] = B.x; m[ 5] = B.y; m[ 6] = B.z; m[ 7] = B.w; - m[ 8] = C.x; m[ 9] = C.y; m[10] = C.z; m[11] = C.w; -} - -// ---------------------------------------------------------------------------- - -void scaling44(mat44 m, float x, float y, float z); -void id44(mat44 m) { - scaling44(m, 1,1,1); -} -void identity44(mat44 m) { - scaling44(m, 1,1,1); -} -void copy44(mat44 m, const mat44 a) { - for( int i = 0; i < 16; ++i ) m[i] = a[i]; -} -void multiply44x2(mat44 m, const mat44 a, const mat44 b) { - for (int y = 0; y < 4; y++) - for (int x = 0; x < 4; x++) - m[y*4+x] = a[x] * b[y*4]+a[4+x] * b[y*4+1]+a[8+x] * b[y*4+2]+a[12+x] * b[y*4+3]; -} -void multiply44x3(mat44 m, const mat44 a, const mat44 b, const mat44 c) { - mat44 x; - multiply44x2(x, a, b); - multiply44x2(m, x, c); -} -void multiply44(mat44 m, const mat44 a) { - mat44 b; copy44(b, m); - multiply44x2(m, b, a); -} -// --- -void ortho44(mat44 m, float l, float r, float b, float t, float n, float f) { - m[ 0] = 2/(r-l); m[ 1] = 0; m[ 2] = 0; m[ 3] = 0; - m[ 4] = 0; m[ 5] = 2/(t-b); m[ 6] = 0; m[ 7] = 0; - m[ 8] = 0; m[ 9] = 0; m[10] = -2/(f-n); m[11] = 0; - m[12] = -(r+l)/(r-l); m[13] = -(t+b)/(t-b); m[14] = -(f+n)/(f-n); m[15] = 1; -} -void frustum44(mat44 m, float l, float r, float b, float t, float n, float f) { - m[ 0] = 2*n/(r-l); m[ 1] = 0; m[ 2] = 0; m[ 3] = 0; - m[ 4] = 0; m[ 5] = 2*n/(t-b); m[ 6] = 0; m[ 7] = 0; - m[ 8] = (r+l)/(r-l); m[ 9] = (t+b)/(t-b); m[10] = -(f+n)/(f-n); m[11] = -1; - m[12] = 0; m[13] = 0; m[14] = -2*(f*n)/(f-n); m[15] = 0; -} -void perspective44(mat44 m, float fovy_degrees, float aspect, float nearp, float farp) { - float y = tanf(fovy_degrees * C_PI / 360) * nearp, x = y * aspect; - frustum44(m, -x, x, -y, y, nearp, farp); -} -void lookat44(mat44 m, vec3 eye, vec3 center, vec3 up) { - vec3 f = norm3(sub3(center, eye)); - vec3 r = norm3(cross3(f, up)); - vec3 u = cross3(r, f); - m[ 0] = r.x; m[ 1] = u.x; m[ 2] = -f.x; m[ 3] = 0; - m[ 4] = r.y; m[ 5] = u.y; m[ 6] = -f.y; m[ 7] = 0; - m[ 8] = r.z; m[ 9] = u.z; m[10] = -f.z; m[11] = 0; - m[12] = -dot3(r, eye); m[13] = -dot3(u, eye); m[14] = dot3(f, eye); m[15] = 1; -} -// --- -void translation44(mat44 m, float x, float y, float z) { // identity4 + translate4 - m[ 0] = 1.0f; m[ 1] = 0.0f; m[ 2] = 0.0f; m[ 3] = 0.0f; - m[ 4] = 0.0f; m[ 5] = 1.0f; m[ 6] = 0.0f; m[ 7] = 0.0f; - m[ 8] = 0.0f; m[ 9] = 0.0f; m[10] = 1.0f; m[11] = 0.0f; - m[12] = x; m[13] = y; m[14] = z; m[15] = 1.0f; -} -void translate44(mat44 m, float x, float y, float z) { // translate in place -#if 0 // original - vec4 t = {x, y, z, 0}; - m[12] += dot4(vec4(m[0],m[4],m[ 8],m[12]),t); // row4(M,0) - m[13] += dot4(vec4(m[1],m[5],m[ 9],m[13]),t); // row4(M,1) - m[14] += dot4(vec4(m[2],m[6],m[10],m[14]),t); // row4(M,2) - m[15] += dot4(vec4(m[3],m[7],m[11],m[15]),t); // row4(M,3) -#else - m[12] += m[ 0]*x + m[ 4]*y + m[ 8]*z; - m[13] += m[ 1]*x + m[ 5]*y + m[ 9]*z; - m[14] += m[ 2]*x + m[ 6]*y + m[10]*z; - m[15] += m[ 3]*x + m[ 7]*y + m[11]*z; -#endif -} -void relocate44(mat44 m, float x, float y, float z) { - m[12] = x; m[13] = y; m[14] = z; -} -void rotationq44(mat44 m, quat q) { -#if 0 - float a = q.w, b = q.x, c = q.y, d = q.z; - float a2 = a*a, b2 = b*b, c2 = c*c, d2 = d*d; - m[ 0] = a2 + b2 - c2 - d2; m[ 1] = 2*(b*c + a*d); m[ 2] = 2*(b*d - a*c); m[ 3] = 0; - m[ 4] = 2*(b*c - a*d); m[ 5] = a2 - b2 + c2 - d2; m[ 6] = 2*(c*d + a*b); m[ 7] = 0; - m[ 8] = 2*(b*d + a*c); m[ 9] = 2*(c*d - a*b); m[10] = a2 - b2 - c2 + d2; m[11] = 0; - m[12] = 0; m[13] = 0; m[14] = 0; m[15] = 1; -#else - float x2 = q.x*q.x, y2 = q.y*q.y, z2 = q.z*q.z, w2 = q.w*q.w; - float xz = q.x*q.z, xy = q.x*q.y, yz = q.y*q.z, wz = q.w*q.z, wy = q.w*q.y, wx = q.w*q.x; - m[ 0] = 1-2*(y2+z2); m[ 1] = 2*(xy+wz); m[ 2] = 2*(xz-wy); m[ 3] = 0; - m[ 4] = 2*(xy-wz); m[ 5] = 1-2*(x2+z2); m[ 6] = 2*(yz+wx); m[ 7] = 0; - m[ 8] = 2*(xz+wy); m[ 9] = 2*(yz-wx); m[10] = 1-2*(x2+y2); m[11] = 0; - m[12] = 0; m[13] = 0; m[14] = 0; m[15] = 1; -#endif -} -void rotation44(mat44 m, float degrees, float x, float y, float z) { - //if(len3sq(vec3(x,y,z)) < (1e-4 * 1e-4)) return; - - float radians = degrees * C_PI / 180.0f; - float c = cosf(radians), s = sinf(radians), c1 = 1.0f - c; - m[ 0] = x*x*c1 + c; m[ 1] = y*x*c1 + z*s; m[ 2] = x*z*c1 - y*s; m[ 3] = 0.0f; - m[ 4] = x*y*c1 - z*s; m[ 5] = y*y*c1 + c; m[ 6] = y*z*c1 + x*s; m[ 7] = 0.0f; - m[ 8] = x*z*c1 + y*s; m[ 9] = y*z*c1 - x*s; m[10] = z*z*c1 + c; m[11] = 0.0f; - m[12] = 0.0f; m[13] = 0.0f; m[14] = 0.0f; m[15] = 1.0f; -} -void rotate44(mat44 m, float degrees, float x, float y, float z) { // !!! ok, i guess - if(len3sq(vec3(x,y,z)) < (1e-4 * 1e-4)) return; - - float radians = degrees * C_PI / 180.0f; - float c = cosf(radians), s = -sinf(radians), c1 = 1 - c; - float m00 = m[ 0], m01 = m[ 1], m02 = m[ 2], m03 = m[ 3], - m04 = m[ 4], m05 = m[ 5], m06 = m[ 6], m07 = m[ 7], - m08 = m[ 8], m09 = m[ 9], m10 = m[10], m11 = m[11]; - - // rotation matrix - float r00 = x*x*c1 + c, r01 = y*x*c1 + z*s, r02 = x*z*c1 - y*s; - float r04 = x*y*c1 - z*s, r05 = y*y*c1 + c, r06 = y*z*c1 + x*s; - float r08 = x*z*c1 + y*s, r09 = y*z*c1 - x*s, r10 = z*z*c1 + c; - - // multiply - m[ 0] = r00 * m00 + r04 * m04 + r08 * m08; - m[ 1] = r00 * m01 + r04 * m05 + r08 * m09; - m[ 2] = r00 * m02 + r04 * m06 + r08 * m10; - m[ 3] = r00 * m03 + r04 * m07 + r08 * m11; - m[ 4] = r01 * m00 + r05 * m04 + r09 * m08; - m[ 5] = r01 * m01 + r05 * m05 + r09 * m09; - m[ 6] = r01 * m02 + r05 * m06 + r09 * m10; - m[ 7] = r01 * m03 + r05 * m07 + r09 * m11; - m[ 8] = r02 * m00 + r06 * m04 + r10 * m08; - m[ 9] = r02 * m01 + r06 * m05 + r10 * m09; - m[10] = r02 * m02 + r06 * m06 + r10 * m10; - m[11] = r02 * m03 + r06 * m07 + r10 * m11; -} -void scaling44(mat44 m, float x, float y, float z) { // !!! ok, i guess - m[ 0] = x; m[ 1] = 0; m[ 2] = 0; m[ 3] = 0; - m[ 4] = 0; m[ 5] = y; m[ 6] = 0; m[ 7] = 0; - m[ 8] = 0; m[ 9] = 0; m[10] = z; m[11] = 0; - m[12] = 0; m[13] = 0; m[14] = 0; m[15] = 1; -} -void scale44(mat44 m, float x, float y, float z) { -#if 0 // original !!! ok, i guess - m[ 0] *= x; m[ 1] *= x; m[ 2] *= x; m[ 3] *= x; - m[ 4] *= y; m[ 5] *= y; m[ 6] *= y; m[ 7] *= y; - m[ 8] *= z; m[ 9] *= z; m[10] *= z; m[11] *= z; -#else - m[0] *= x; m[4] *= x; m[8] *= x; - m[1] *= y; m[5] *= y; m[9] *= y; - m[2] *= z; m[6] *= z; m[10] *= z; -#endif -} -// --- -void transpose44(mat44 m, const mat44 a) { // M[i][j] = A[j][i]; - m[ 0] = a[0]; m[ 1] = a[4]; m[ 2] = a[ 8]; m[ 3] = a[12]; - m[ 4] = a[1]; m[ 5] = a[5]; m[ 6] = a[ 9]; m[ 7] = a[13]; - m[ 8] = a[2]; m[ 9] = a[6]; m[10] = a[10]; m[11] = a[14]; - m[12] = a[3]; m[13] = a[7]; m[14] = a[11]; m[15] = a[15]; -} - -// @todo: test me -// float det33 = M[0,0]*((M[1,1]*M[2,2])-(M[2,1]*M[1,2]))-M[0,1]*(M[1,0]*M[2,2]-M[2,0]*M[1,2])+M[0,2]*(M[1,0]*M[2,1]-M[2,0]*M[1,1]); -// -// float det33 = -// rgt.x * fwd.y * upv.z - rgt.z * fwd.y * upv.x + -// rgt.y * fwd.z * upv.x - rgt.y * fwd.x * upv.z + -// rgt.z * fwd.x * upv.y - rgt.x * fwd.z * upv.y; -// -// void transpose33(mat33 m, const mat33 a) { // M[i][j] = A[j][i]; -// m[0] = a[0]; m[1] = a[3]; m[2] = a[6]; -// m[3] = a[1]; m[4] = a[4]; m[5] = a[7]; -// m[6] = a[2]; m[7] = a[5]; m[8] = a[8]; -// } - -float det44(const mat44 M) { // !!! ok, i guess - float s[6], c[6]; - s[0] = M[0*4+0]*M[1*4+1] - M[1*4+0]*M[0*4+1]; - s[1] = M[0*4+0]*M[1*4+2] - M[1*4+0]*M[0*4+2]; - s[2] = M[0*4+0]*M[1*4+3] - M[1*4+0]*M[0*4+3]; - s[3] = M[0*4+1]*M[1*4+2] - M[1*4+1]*M[0*4+2]; - s[4] = M[0*4+1]*M[1*4+3] - M[1*4+1]*M[0*4+3]; - s[5] = M[0*4+2]*M[1*4+3] - M[1*4+2]*M[0*4+3]; - - c[0] = M[2*4+0]*M[3*4+1] - M[3*4+0]*M[2*4+1]; - c[1] = M[2*4+0]*M[3*4+2] - M[3*4+0]*M[2*4+2]; - c[2] = M[2*4+0]*M[3*4+3] - M[3*4+0]*M[2*4+3]; - c[3] = M[2*4+1]*M[3*4+2] - M[3*4+1]*M[2*4+2]; - c[4] = M[2*4+1]*M[3*4+3] - M[3*4+1]*M[2*4+3]; - c[5] = M[2*4+2]*M[3*4+3] - M[3*4+2]*M[2*4+3]; - - return ( s[0]*c[5]-s[1]*c[4]+s[2]*c[3]+s[3]*c[2]-s[4]*c[1]+s[5]*c[0] ); -} -bool invert44(mat44 T, const mat44 M) { // !!! ok, i guess - float s[6], c[6]; - s[0] = M[0*4+0]*M[1*4+1] - M[1*4+0]*M[0*4+1]; - s[1] = M[0*4+0]*M[1*4+2] - M[1*4+0]*M[0*4+2]; - s[2] = M[0*4+0]*M[1*4+3] - M[1*4+0]*M[0*4+3]; - s[3] = M[0*4+1]*M[1*4+2] - M[1*4+1]*M[0*4+2]; - s[4] = M[0*4+1]*M[1*4+3] - M[1*4+1]*M[0*4+3]; - s[5] = M[0*4+2]*M[1*4+3] - M[1*4+2]*M[0*4+3]; - - c[0] = M[2*4+0]*M[3*4+1] - M[3*4+0]*M[2*4+1]; - c[1] = M[2*4+0]*M[3*4+2] - M[3*4+0]*M[2*4+2]; - c[2] = M[2*4+0]*M[3*4+3] - M[3*4+0]*M[2*4+3]; - c[3] = M[2*4+1]*M[3*4+2] - M[3*4+1]*M[2*4+2]; - c[4] = M[2*4+1]*M[3*4+3] - M[3*4+1]*M[2*4+3]; - c[5] = M[2*4+2]*M[3*4+3] - M[3*4+2]*M[2*4+3]; - - float det = ( s[0]*c[5]-s[1]*c[4]+s[2]*c[3]+s[3]*c[2]-s[4]*c[1]+s[5]*c[0] ); - if( !det ) return false; - float idet = 1.0f / det; - - T[0*4+0] = ( M[1*4+1] * c[5] - M[1*4+2] * c[4] + M[1*4+3] * c[3]) * idet; - T[0*4+1] = (-M[0*4+1] * c[5] + M[0*4+2] * c[4] - M[0*4+3] * c[3]) * idet; - T[0*4+2] = ( M[3*4+1] * s[5] - M[3*4+2] * s[4] + M[3*4+3] * s[3]) * idet; - T[0*4+3] = (-M[2*4+1] * s[5] + M[2*4+2] * s[4] - M[2*4+3] * s[3]) * idet; - - T[1*4+0] = (-M[1*4+0] * c[5] + M[1*4+2] * c[2] - M[1*4+3] * c[1]) * idet; - T[1*4+1] = ( M[0*4+0] * c[5] - M[0*4+2] * c[2] + M[0*4+3] * c[1]) * idet; - T[1*4+2] = (-M[3*4+0] * s[5] + M[3*4+2] * s[2] - M[3*4+3] * s[1]) * idet; - T[1*4+3] = ( M[2*4+0] * s[5] - M[2*4+2] * s[2] + M[2*4+3] * s[1]) * idet; - - T[2*4+0] = ( M[1*4+0] * c[4] - M[1*4+1] * c[2] + M[1*4+3] * c[0]) * idet; - T[2*4+1] = (-M[0*4+0] * c[4] + M[0*4+1] * c[2] - M[0*4+3] * c[0]) * idet; - T[2*4+2] = ( M[3*4+0] * s[4] - M[3*4+1] * s[2] + M[3*4+3] * s[0]) * idet; - T[2*4+3] = (-M[2*4+0] * s[4] + M[2*4+1] * s[2] - M[2*4+3] * s[0]) * idet; - - T[3*4+0] = (-M[1*4+0] * c[3] + M[1*4+1] * c[1] - M[1*4+2] * c[0]) * idet; - T[3*4+1] = ( M[0*4+0] * c[3] - M[0*4+1] * c[1] + M[0*4+2] * c[0]) * idet; - T[3*4+2] = (-M[3*4+0] * s[3] + M[3*4+1] * s[1] - M[3*4+2] * s[0]) * idet; - T[3*4+3] = ( M[2*4+0] * s[3] - M[2*4+1] * s[1] + M[2*4+2] * s[0]) * idet; - return true; -} - -vec4 transform444(const mat44, const vec4); -bool unproject44(vec3 *out, vec3 xyd, vec4 viewport, mat44 mvp) { // @fixme: this function is broken (verified by @zpl-zak) - // xyd: usually x:mouse_x,y:window_height()-mouse_y,d:0=znear/1=zfar - // src: https://www.khronos.org/opengl/wiki/GluProject_and_gluUnProject_code - mat44 inv_mvp; - if( invert44(inv_mvp, mvp) ) { - vec4 in = vec4( (xyd.x-viewport.x)/viewport.z*2-1, (xyd.y-viewport.y)/viewport.w*2-1, 2*xyd.z-1, 1 ); - vec4 p = transform444(inv_mvp, in); - if( p.w != 0 ) { - p.w = 1.f/p.w; - *out = vec3(p.x*p.w,p.y*p.w,p.z*p.w); - return true; - } - } - return false; -} - -void compose44(mat44 m, vec3 t, quat q, vec3 s) { -#if 0 - // quat to rotation matrix - m[0] = 1 - 2 * (q.y * q.y + q.z * q.z); - m[1] = 2 * (q.x * q.y + q.z * q.w); - m[2] = 2 * (q.x * q.z - q.y * q.w); - - m[4] = 2 * (q.x * q.y - q.z * q.w); - m[5] = 1 - 2 * (q.x * q.x + q.z * q.z); - m[6] = 2 * (q.y * q.z + q.x * q.w); - - m[8] = 2 * (q.x * q.z + q.y * q.w); - m[9] = 2 * (q.y * q.z - q.x * q.w); - m[10] = 1 - 2 * (q.x * q.x + q.y * q.y); - - // scale matrix - m[0] *= s.x; m[4] *= s.x; m[8] *= s.x; - m[1] *= s.y; m[5] *= s.y; m[9] *= s.y; - m[2] *= s.z; m[6] *= s.z; m[10] *= s.z; - - // set translation - m[12] = t.x; m[13] = t.y; m[14] = t.z; - - m[3] = 0; m[7] = 0; m[11] = 0; m[15] = 1; -#else - rotationq44(m,q); - scale44(m,s.x,s.y,s.z); - relocate44(m,t.x,t.y,t.z); -// relocate44(m,t.x,t.y,t.z); // ok? -// scale44(m,s.x,s.y,s.z); // ok? - - m[3] = 0; m[7] = 0; m[11] = 0; m[15] = 1; -#endif -} - -// ---------------------------------------------------------------------------- - -vec3 transform33(const mat33 m, vec3 p) { - float x = (m[0] * p.x) + (m[4] * p.y) + (m[ 8] * p.z); - float y = (m[1] * p.x) + (m[5] * p.y) + (m[ 9] * p.z); - float z = (m[2] * p.x) + (m[6] * p.y) + (m[10] * p.z); - return vec3(x,y,z); -} - -vec4 transform444(const mat44 m, const vec4 p) { - // remember w = 1 for move in space; w = 0 rotate in space; - float x = m[0]*p.x + m[4]*p.y + m[ 8]*p.z + m[12]*p.w; - float y = m[1]*p.x + m[5]*p.y + m[ 9]*p.z + m[13]*p.w; - float z = m[2]*p.x + m[6]*p.y + m[10]*p.z + m[14]*p.w; - float w = m[3]*p.x + m[7]*p.y + m[11]*p.z + m[15]*p.w; - return vec4(x,y,z,w); -} - -vec3 transform344(const mat44 m, const vec3 p) { - vec4 v = transform444(m, vec34(p, 1)); - return scale3(v.xyz, 1.f / v.w); -} - -vec3 transformq(const quat q, const vec3 v) { // !!! ok, i guess - // [src] https://gamedev.stackexchange.com/questions/28395/rotating-vector3-by-a-quaternion (laurent couvidou) - // Extract the vector part of the quaternion - vec3 u = vec3(q.x, q.y, q.z); - // Extract the scalar part of the quaternion - float s = q.w; - // Do the math - vec3 a = scale3(u, 2 * dot3(u,v)); - vec3 b = scale3(v, s*s - dot3(u,u)); - vec3 c = scale3(cross3(u,v), 2*s); - return add3(a, add3(b,c)); -} - -#if 0 -vec3 transform_axis(const coord_system, const AXIS_ENUMS); -void rebase44(mat44 m, const coord_system src_basis, const coord_system dst_basis) { - vec3 v1 = transform_axis(src_basis, dst_basis.x); - vec3 v2 = transform_axis(src_basis, dst_basis.y); - vec3 v3 = transform_axis(src_basis, dst_basis.z); - m[ 0] = v1.x; m[ 1] = v1.y; m[ 2] = v1.z; m[ 3] = 0; - m[ 4] = v2.x; m[ 5] = v2.y; m[ 6] = v2.z; m[ 7] = 0; - m[ 8] = v3.x; m[ 9] = v3.y; m[10] = v3.z; m[11] = 0; - m[12] = 0; m[13] = 0; m[14] = 0; m[15] = 1; -} - -vec3 transform_axis(const coord_system basis, const AXIS_ENUMS to) { - const float dot_table[6][6] = { - {+1,-1,0,0,0,0},{-1,+1,0,0,0,0},{0,0,+1,-1,0,0}, - {0,0,-1,+1,0,0},{0,0,0,0,+1,-1},{0,0,0,0,-1,+1}, - }; - return vec3( dot_table[basis.x][to], dot_table[basis.y][to], dot_table[basis.z][to] ); -} - -// A vector is the difference between two points in 3D space, possessing both direction and magnitude -vec3 transform_vector (const mat44 m, const vec3 vector) { - return transform344(m, vector); -} - -// A point is a specific location within a 3D space -vec3 transform_point (const mat44 m, const vec3 p) { // return (m * vec4{point,1).xyz()/r.w; - float inv = 1.0f / (m[3+4*0]*p.x + m[3+4*1]*p.y + m[3+4*2]*p.z + m[3+4*3]); - return vec3( - (m[0+4*0]*p.x + m[0+4*1]*p.y + m[0+4*2]*p.z + m[0+4*3]) * inv, - (m[1+4*0]*p.x + m[1+4*1]*p.y + m[1+4*2]*p.z + m[1+4*3]) * inv, - (m[2+4*0]*p.x + m[2+4*1]*p.y + m[2+4*2]*p.z + m[2+4*3]) * inv - ); -} - -// A tangent is a unit-length vector which is parallel to a piece of geometry, such as a surface or a curve -vec3 transform_tangent (const mat44 m, const vec3 tangent) { return norm3(transform_vector(m, tangent)); } - -// A normal is a unit-length bivector which is perpendicular to a piece of geometry, such as a surface or a curve -vec3 transform_normal (const mat44 m, const vec3 normal) { - return transform_tangent(m, normal); // ok? - - mat44 t; transpose44(t,m); mat44 i; invert44(i,t); - return scale3(norm3(transform_vector(i, normal)), det44(m) < 0 ? -1.f : 1.f); -} - -// A quaternion can describe both a rotation and a uniform scaling in 3D space -quat transform_quat (const mat44 m, const quat q) { - vec3 s = scale3(transform_vector(m, q.xyz), det44(m) < 0 ? -1.f : 1.f); - return quat(s.x,s.y,s.z,q.w); -} - -// A matrix can describe a general transformation of homogeneous coordinates in projective space -float* transform_matrix(mat44 out, const mat44 m, const mat44 matrix) { - mat44 I; invert44(I, m); - multiply44x3(out, I, matrix, m); // m,matrix,I instead ? - return out; -} - -// Scaling factors are not a vector, they are a compact representation of a scaling matrix -vec3 transform_scaling (const mat44 m, const vec3 scaling) { - mat44 s; scaling44(s, scaling.x, scaling.y, scaling.z); - mat44 out; transform_matrix(out, m, s); - return vec3( out[0], out[5], out[10] ); -} -#endif - -// ---------------------------------------------------------------------------- -// !!! for debugging - -void printi_( int *m, int ii, int jj ) { - for( int j = 0; j < jj; ++j ) { - for( int i = 0; i < ii; ++i ) printf("%10d ", *m++); - puts(""); - } -// puts("---"); -} -void print_( float *m, int ii, int jj ) { - for( int j = 0; j < jj; ++j ) { - for( int i = 0; i < ii; ++i ) printf("%8.3f", *m++); - puts(""); - } -// puts("---"); -} -void print2i( vec2i v ) { printi_(&v.x,2,1); } -void print3i( vec3i v ) { printi_(&v.x,3,1); } -void print2( vec2 v ) { print_(&v.x,2,1); } -void print3( vec3 v ) { print_(&v.x,3,1); } -void print4( vec4 v ) { print_(&v.x,4,1); } -void printq( quat q ) { print_(&q.x,4,1); } -void print33( float *m ) { print_(m,3,3); } -void print34( float *m ) { print_(m,3,4); } -void print44( float *m ) { print_(m,4,4); } - -// ----------- - -AUTORUN { - STRUCT( vec3, float, x ); - STRUCT( vec3, float, y ); - STRUCT( vec3, float, z, "Up" ); -} +// ----------------------------------------------------------------------------- +// math framework: rand, ease, vec2, vec3, vec4, quat, mat2, mat33, mat34, mat4 +// - rlyeh, public domain +// +// Credits: @ands+@krig+@vurtun (PD), @datenwolf (WTFPL2), @evanw+@barerose (CC0), @sgorsten (Unlicense). + +#include +#include +#include +#include + +static uint64_t rand_xoro256(uint64_t x256_s[4]) { // xoshiro256+ 1.0 by David Blackman and Sebastiano Vigna (PD) + const uint64_t result = x256_s[0] + x256_s[3]; + const uint64_t t = x256_s[1] << 17; + + x256_s[2] ^= x256_s[0]; + x256_s[3] ^= x256_s[1]; + x256_s[1] ^= x256_s[2]; + x256_s[0] ^= x256_s[3]; + + x256_s[2] ^= t; + + x256_s[3] = (x256_s[3] << 45) | (x256_s[3] >> (64 - 45)); //x256_rotl(x256_s[3], 45); + + return result; +} +static __thread uint64_t rand_state[4] = {// = splitmix64(0),splitmix64(splitmix64(0)),... x4 times + UINT64_C(0x9e3779b8bb0b2c64),UINT64_C(0x3c6ef372178960e7), + UINT64_C(0xdaa66d2b71a12917),UINT64_C(0x78dde6e4d584aef9) +}; +void randset(uint64_t x) { + x = hash_64(x); + for( int i = 0; i < 4; ++i) { + // http://xoroshiro.di.unimi.it/splitmix64.c + uint64_t z = (x += UINT64_C(0x9E3779B97F4A7C15)); + z = (z ^ (z >> 30)) * UINT64_C(0xBF58476D1CE4E5B9); + z = (z ^ (z >> 27)) * UINT64_C(0x94D049BB133111EB); + x = x ^ (z >> 31); + rand_state[i] = x; + } +} +uint64_t rand64(void) { + return rand_xoro256(rand_state); +} +double randf(void) { // [0, 1) interval + uint64_t u64 = rand64(); + // fastest way to convert in C99 a 64-bit unsigned integer to a 64-bit double + union { uint64_t i; double d; } u; u.i = UINT64_C(0x3FF) << 52 | u64 >> 12; + double dbl = u.d - 1.0; + return 1 - 2.0 * ((float)(dbl / 2)); +} +int randi(int mini, int maxi) { // [mini, maxi) interval ; @todo: test randi(-4,4) and #define randi(m,x) (m + randf() * (x-m)) + if( mini < maxi ) { + uint32_t x, r, range = maxi - mini; + do r = (x = rand64()) % range; while(range > (r-x)); + return mini + r; + } + return mini > maxi ? randi(maxi, mini) : mini; +} +#if 0 // @todo: deprecate me +double rng(void) { // [0..1) Lehmer RNG "minimal standard" + static __thread unsigned int seed = 123; + seed *= 16807; + return seed / (double)0x100000000ULL; +} +#endif + +// ---------------------------------------------------------------------------- + +// @todo: evaluate stb_perlin.h as well +float simplex1( float v ){ return snoise1(v); } +float simplex2( vec2 v ) { return snoise2(v.x,v.y); } +float simplex3( vec3 v ) { return snoise3(v.x,v.y,v.z); } +float simplex4( vec4 v ) { return snoise4(v.x,v.y,v.z,v.w); } + +// ---------------------------------------------------------------------------- + +float deg (float radians) { return radians / C_PI * 180.0f; } +float rad (float degrees) { return degrees * C_PI / 180.0f; } + +int mini (int a, int b) { return a < b ? a : b; } +int maxi (int a, int b) { return a > b ? a : b; } +int absi (int a ) { return a < 0 ? -a : a; } +int clampi (int v,int a,int b) { return maxi(mini(b,v),a); } + +float minf (float a, float b) { return a < b ? a : b; } +float maxf (float a, float b) { return a > b ? a : b; } +float absf (float a ) { return a < 0.0f ? -a : a; } +float pmodf (float a, float b) { return (a < 0.0f ? 1.0f : 0.0f) + (float)fmod(a, b); } // positive mod +float signf (float a) { return (a < 0) ? -1.f : 1.f; } +float clampf(float v,float a,float b){return maxf(minf(b,v),a); } +float mixf(float a,float b,float t) { return a*(1-t)+b*t; } +float slerpf(float a,float b,float t) { + a = fmod(a, 360); if (a < 0) a += 360; + b = fmod(b, 360); if (b < 0) b += 360; + float diff = b - a; + if (diff < 0.0) + diff += 360.0; + + float r = a + t*diff; + if (r >= 360.0) + r -= 360.0; + return r; +} +float fractf (float a) { return a - (int)a; } + +// ---------------------------------------------------------------------------- + +vec2 ptr2 (const float *a ) { return vec2(a[0],a[1]); } +// +vec2 neg2 (vec2 a ) { return vec2(-a.x, -a.y); } +vec2 add2 (vec2 a, vec2 b) { return vec2(a.x + b.x, a.y + b.y); } +vec2 sub2 (vec2 a, vec2 b) { return vec2(a.x - b.x, a.y - b.y); } +vec2 mul2 (vec2 a, vec2 b) { return vec2(a.x * b.x, a.y * b.y); } +vec2 div2 (vec2 a, vec2 b) { return vec2(a.x / (b.x + !b.x), a.y / (b.y + !b.y)); } +vec2 inc2 (vec2 a, float b) { return vec2(a.x + b, a.y + b); } +vec2 dec2 (vec2 a, float b) { return vec2(a.x - b, a.y - b); } +vec2 scale2 (vec2 a, float b) { return vec2(a.x * b, a.y * b); } +vec2 pmod2 (vec2 a, float b) { return vec2(pmodf(a.x, b), pmodf(a.y, b)); } +vec2 min2 (vec2 a, vec2 b) { return vec2(minf(a.x, b.x), minf(a.y, b.y)); } +vec2 max2 (vec2 a, vec2 b) { return vec2(maxf(a.x, b.x), maxf(a.y, b.y)); } +vec2 abs2 (vec2 a ) { return vec2(absf(a.x), absf(a.y)); } +vec2 floor2 (vec2 a ) { return vec2(floorf(a.x), floorf(a.y)); } +vec2 fract2 (vec2 a ) { return sub2(a, floor2(a)); } +vec2 ceil2 (vec2 a ) { return vec2(ceilf (a.x), ceilf (a.y)); } +float dot2 (vec2 a, vec2 b) { return a.x * b.x + a.y * b.y; } +vec2 refl2 (vec2 a, vec2 b) { return sub2(a, scale2(b, 2*dot2(a,b))); } +float cross2 (vec2 a, vec2 b) { return a.x * b.y - a.y * b.x; } // pseudo cross product +float len2sq (vec2 a ) { return a.x * a.x + a.y * a.y; } +float len2 (vec2 a ) { return sqrtf(len2sq(a)); } +vec2 norm2 (vec2 a ) { return len2sq(a) == 0 ? a : scale2(a, 1 / len2(a)); } +vec2 norm2sq (vec2 a ) { return len2sq(a) == 0 ? a : scale2(a, 1 / len2sq(a)); } +int finite2 (vec2 a ) { return FINITE(a.x) && FINITE(a.y); } +vec2 mix2 (vec2 a,vec2 b,float t) { return add2(scale2((a),1-(t)), scale2((b), t)); } +vec2 clamp2(vec2 v, vec2 a, vec2 b){ return vec2(maxf(minf(b.x,v.x),a.x),maxf(minf(b.y,v.y),a.y)); } +vec2 clamp2f(vec2 v,float a,float b){ return vec2(maxf(minf(b,v.x),a),maxf(minf(b,v.y),a)); } +// ---------------------------------------------------------------------------- + +vec3 ptr3 (const float *a ) { return vec3(a[0],a[1],a[2]); } +vec3 vec23 (vec2 a, float z ) { return vec3(a.x,a.y,z); } +// +vec3 neg3 (vec3 a ) { return vec3(-a.x, -a.y, -a.z); } +vec3 add3 (vec3 a, vec3 b) { return vec3(a.x + b.x, a.y + b.y, a.z + b.z); } +vec3 sub3 (vec3 a, vec3 b) { return vec3(a.x - b.x, a.y - b.y, a.z - b.z); } +vec3 mul3 (vec3 a, vec3 b) { return vec3(a.x * b.x, a.y * b.y, a.z * b.z); } +vec3 div3 (vec3 a, vec3 b) { return vec3(a.x / (b.x + !b.x), a.y / (b.y + !b.y), a.z / (b.z + !b.z)); } +vec3 inc3 (vec3 a, float b) { return vec3(a.x + b, a.y + b, a.z + b); } +vec3 dec3 (vec3 a, float b) { return vec3(a.x - b, a.y - b, a.z - b); } +vec3 scale3 (vec3 a, float b) { return vec3(a.x * b, a.y * b, a.z * b); } +vec3 pmod3 (vec3 a, float b) { return vec3(pmodf(a.x, b), pmodf(a.y, b), pmodf(a.z, b)); } +vec3 min3 (vec3 a, vec3 b) { return vec3(minf(a.x, b.x), minf(a.y, b.y), minf(a.z, b.z)); } +vec3 max3 (vec3 a, vec3 b) { return vec3(maxf(a.x, b.x), maxf(a.y, b.y), maxf(a.z, b.z)); } +vec3 abs3 (vec3 a ) { return vec3(absf(a.x), absf(a.y), absf(a.z)); } +vec3 floor3 (vec3 a ) { return vec3(floorf(a.x), floorf(a.y), floorf(a.z)); } +vec3 fract3 (vec3 a ) { return sub3(a, floor3(a)); } +vec3 ceil3 (vec3 a ) { return vec3(ceilf (a.x), ceilf (a.y), ceilf (a.z)); } +vec3 cross3 (vec3 a, vec3 b) { return vec3(a.y * b.z - b.y * a.z, a.z * b.x - b.z * a.x, a.x * b.y - b.x * a.y); } +float dot3 (vec3 a, vec3 b) { return a.x * b.x + a.y * b.y + a.z * b.z; } +vec3 refl3 (vec3 a, vec3 b) { return sub3(a, scale3(b, 2*dot3(a, b))); } +float len3sq (vec3 a ) { return dot3(a,a); } +float len3 (vec3 a ) { return sqrtf(len3sq(a)); } +vec3 norm3 (vec3 a ) { return len3sq(a) == 0 ? a : scale3(a, 1 / len3(a)); } +vec3 norm3sq (vec3 a ) { return len3sq(a) == 0 ? a : scale3(a, 1 / len3sq(a)); } +int finite3 (vec3 a ) { return finite2(vec2(a.x,a.y)) && FINITE(a.z); } +vec3 mix3 (vec3 a,vec3 b,float t) { return add3(scale3((a),1-(t)), scale3((b), t)); } +vec3 clamp3(vec3 v, vec3 a, vec3 b){ return vec3(maxf(minf(b.x,v.x),a.x),maxf(minf(b.y,v.y),a.y),maxf(minf(b.z,v.z),a.z)); } +vec3 clamp3f(vec3 v,float a,float b){ return vec3(maxf(minf(b,v.x),a),maxf(minf(b,v.y),a),maxf(minf(b,v.z),a)); } +//vec3 tricross3 (vec3 a, vec3 b, vec3 c) { return cross3(a,cross3(b,c)); } // useful? +void ortho3 (vec3 *left, vec3 *up, vec3 v) { +#if 0 + if ((v.z * v.z) > (0.7f * 0.7f)) { + float sqrlen = v.y*v.y + v.z*v.z; + float invlen = 1.f / sqrtf(sqrlen); + *up = vec3(0, v.z*invlen, -v.y*invlen); + *left = vec3(sqrlen*invlen, -v.x*up->z, v.x*up->y); + } else { + float sqrlen = v.x*v.x + v.y*v.y; + float invlen = 1.f / sqrtf(sqrlen); + *left = vec3(-v.y*invlen, v.x*invlen, 0); + *up = vec3(-v.z*left->y, v.z*left->x, sqrlen*invlen); + } +#else + *left = (v.z*v.z) < (v.x*v.x) ? vec3(v.y,-v.x,0) : vec3(0,-v.z,v.y); + *up = cross3(*left, v); +#endif +} + +#define rotateq3(v,q) transformq(q,v) +vec3 rotatex3(vec3 dir, float degrees) { return rotateq3(dir, rotationq(degrees,1,0,0)); } +vec3 rotatey3(vec3 dir, float degrees) { return rotateq3(dir, rotationq(degrees,0,1,0)); } +vec3 rotatez3(vec3 dir, float degrees) { return rotateq3(dir, rotationq(degrees,0,0,1)); } + +// ---------------------------------------------------------------------------- + +vec4 ptr4 (const float *a ) { return vec4(a[0],a[1],a[2],a[3]); } +vec4 vec34 (vec3 a, float w ) { return vec4(a.x,a.y,a.z,w); } +// +vec4 neg4 (vec4 a ) { return vec4(-a.x, -a.y, -a.z, -a.w); } +vec4 add4 (vec4 a, vec4 b) { return vec4(a.x + b.x, a.y + b.y, a.z + b.z, a.w + b.w); } +vec4 sub4 (vec4 a, vec4 b) { return vec4(a.x - b.x, a.y - b.y, a.z - b.z, a.w - b.w); } +vec4 mul4 (vec4 a, vec4 b) { return vec4(a.x * b.x, a.y * b.y, a.z * b.z, a.w * b.w); } +vec4 div4 (vec4 a, vec4 b) { return vec4(a.x / (b.x + !b.x), a.y / (b.y + !b.y), a.z / (b.z + !b.z), a.w / (b.w + !b.w)); } +vec4 inc4 (vec4 a, float b) { return vec4(a.x + b, a.y + b, a.z + b, a.w + b); } +vec4 dec4 (vec4 a, float b) { return vec4(a.x - b, a.y - b, a.z - b, a.w - b); } +vec4 scale4 (vec4 a, float b) { return vec4(a.x * b, a.y * b, a.z * b, a.w * b); } +vec4 pmod4 (vec4 a, float b) { return vec4(pmodf(a.x, b), pmodf(a.y, b), pmodf(a.z, b), pmodf(a.w, b)); } +vec4 min4 (vec4 a, vec4 b) { return vec4(minf(a.x, b.x), minf(a.y, b.y), minf(a.z, b.z), minf(a.w, b.w)); } +vec4 max4 (vec4 a, vec4 b) { return vec4(maxf(a.x, b.x), maxf(a.y, b.y), maxf(a.z, b.z), maxf(a.w, b.w)); } +vec4 abs4 (vec4 a ) { return vec4(absf(a.x), absf(a.y), absf(a.z), absf(a.w)); } +vec4 floor4 (vec4 a ) { return vec4(floorf(a.x), floorf(a.y), floorf(a.z), floorf(a.w)); } +vec4 fract4 (vec4 a ) { return sub4(a, floor4(a)); } +vec4 ceil4 (vec4 a ) { return vec4(ceilf (a.x), ceilf (a.y), ceilf (a.z), ceilf (a.w)); } +float dot4 (vec4 a, vec4 b) { return a.x * b.x + a.y * b.y + a.z * b.z + a.w * b.w; } +vec4 refl4 (vec4 a, vec4 b) { return sub4(a, scale4(b, 2*dot4(a, b))); } +float len4sq (vec4 a ) { return dot4(a,a); } +float len4 (vec4 a ) { return sqrtf(len4sq(a)); } +vec4 norm4 (vec4 a ) { return len4sq(a) == 0 ? a : scale4(a, 1 / len4(a)); } +vec4 norm4sq (vec4 a ) { return len4sq(a) == 0 ? a : scale4(a, 1 / len4sq(a)); } +int finite4 (vec4 a ) { return finite3(vec3(a.x,a.y,a.z)) && FINITE(a.w); } +vec4 mix4 (vec4 a,vec4 b,float t) { return add4(scale4((a),1-(t)), scale4((b), t)); } +vec4 clamp4(vec4 v, vec4 a, vec4 b){ return vec4(maxf(minf(b.x,v.x),a.x),maxf(minf(b.y,v.y),a.y),maxf(minf(b.z,v.z),a.z),maxf(minf(b.w,v.w),a.w)); } +vec4 clamp4f(vec4 v,float a,float b){ return vec4(maxf(minf(b,v.x),a),maxf(minf(b,v.y),a),maxf(minf(b,v.z),a),maxf(minf(b,v.w),a)); } +// vec4 cross4(vec4 v0, vec4 v1) { return vec34(cross3(v0.xyz, v1.xyz), (v0.w + v1.w) * 0.5f); } // may fail + +// ---------------------------------------------------------------------------- + +quat idq ( ) { return quat(1,0,0,0); } // 0,0,0,1? +quat ptrq (const float *a ) { return quat(a[0],a[1],a[2],a[3]); } +quat vec3q (vec3 a, float w ) { return quat(a.x,a.y,a.z,w); } +quat vec4q (vec4 a ) { return quat(a.x,a.y,a.z,a.w); } +// +quat negq (quat a ) { return quat(-a.x,-a.y,-a.z,-a.w); } +quat conjq (quat a ) { return quat(-a.x,-a.y,-a.z,a.w); } +quat addq (quat a, quat b) { return quat(a.x+b.x,a.y+b.y,a.z+b.z,a.w+b.w); } +quat subq (quat a, quat b) { return quat(a.x-b.x,a.y-b.y,a.z-b.z,a.w-b.w); } +quat mulq (quat p, quat q) { vec3 w = scale3(p.xyz, q.w), r = add3(add3(cross3(p.xyz, q.xyz), w), scale3(q.xyz, p.w)); return quat(r.x,r.y,r.z,p.w*q.w - dot3(p.xyz, q.xyz)); } +quat scaleq (quat a, float s) { return quat(a.x*s,a.y*s,a.z*s,a.w*s); } +quat normq (quat a ) { vec4 v = norm4(a.xyzw); return quat(v.x,v.y,v.z,v.w); } +float dotq (quat a, quat b) { return a.x*b.x + a.y*b.y + a.z*b.z + a.w*b.w; } +quat mixq(quat a, quat b, float t) { return normq(dotq(a,b) < 0 ? addq(negq(a),scaleq(addq(b,a),t)) : addq(a,scaleq(subq(b,a),t))); } +/* quat lerpq(quat a, quat b, float s) { + return norm(quat((1-s)*a.x + s*b.x, (1-s)*a.y + s*b.y, (1-s)*a.z + s*b.z, (1-s)*a.w + s*b.w)); +}*/ +quat slerpq(quat a, quat b, float s) { //ok ? + float t = acosf(dotq(a,b)), st = sinf(t), wa = sinf((1-s)*t)/st, wb = sinf(s*t)/st; + return normq(quat(wa*a.x + wb*b.x, wa*a.y + wb*b.y, wa*a.z + wb*b.z, wa*a.w + wb*b.w)); +} + +quat rotationq(float deg,float x,float y,float z){ deg=rad(deg)*0.5f; return vec3q(scale3(vec3(x,y,z),sinf(deg)),cosf(deg)); } +quat mat44q (mat44 M) { + float r=0.f; + int perm[] = { 0, 1, 2, 0, 1 }, *p = perm; + for(int i = 0; i<3; i++) { + float m = M[i*4+i]; + if( m < r ) continue; + m = r; + p = &perm[i]; + } + r = sqrtf(1.f + M[p[0]*4+p[0]] - M[p[1]*4+p[1]] - M[p[2]*4+p[2]] ); + return r >= 1e-6 ? quat(1,0,0,0) + : quat(r/2.f, (M[p[0]*4+p[1]] - M[p[1]*4+p[0]])/(2.f*r), (M[p[2]*4+p[0]] - M[p[0]*4+p[2]])/(2.f*r), (M[p[2]*4+p[1]] - M[p[1]*4+p[2]])/(2.f*r) ); +} + +vec3 rotate3q_2(vec3 v, quat q) { // rotate vec3 by quat @testme + vec3 u = {q.x, q.y, q.z}; // extract the vector part of the quaternion + float s = q.w; // scalar part + vec3 cuv = cross3(u, v); + float duv2 = dot3(u, v) * 2; + float ss_duu = s*s - dot3(u, u); + return add3(add3(scale3(u,duv2), scale3(v,ss_duu)), scale3(cuv,2*s)); +} + +vec3 rotate3q(vec3 v, quat r) { // rotate vec3 by quat @testme + float num12 = r.x + r.x; + float num2 = r.y + r.y; + float num = r.z + r.z; + float num11 = r.w * num12; + float num10 = r.w * num2; + float num9 = r.w * num; + float num8 = r.x * num12; + float num7 = r.x * num2; + float num6 = r.x * num; + float num5 = r.y * num2; + float num4 = r.y * num; + float num3 = r.z * num; + float num15 = ((v.x * ((1 - num5) - num3)) + (v.y * (num7 - num9))) + (v.z * (num6 + num10)); + float num14 = ((v.x * (num7 + num9)) + (v.y * ((1 - num8) - num3))) + (v.z * (num4 - num11)); + float num13 = ((v.x * (num6 - num10)) + (v.y * (num4 + num11))) + (v.z * ((1 - num8) - num5)); + return vec3(num15, num14, num13); +} + +// euler <-> quat +vec3 euler (quat q) { // bugs? returns PitchYawRoll (PYR) in degrees. ref: https://en.wikipedia.org/wiki/Conversion_between_quaternions_and_Euler_angles + float sr_cp = 2*(q.x*q.y + q.z*q.w), cr_cp = 1-2*(q.y*q.y + q.z*q.z); + float sy_cp = 2*(q.x*q.w + q.y*q.z), cy_cp = 1-2*(q.z*q.z + q.w*q.w), sp = 2*(q.x*q.z-q.w*q.y); + float p = fabs(sp) >= 1 ? copysignf(C_PI / 2, sp) : asinf(sp); + float y = atan2f(sy_cp, cy_cp); + float r = atan2f(sr_cp, cr_cp); + return scale3(vec3(p, y, r), TO_DEG); +} + +quat eulerq (vec3 pyr_degrees) { // bugs? +#if 0 + quat x = vec3q(vec3(1,0,0),rad(pyr_degrees.x)); // x, not pitch + quat y = vec3q(vec3(0,1,0),rad(pyr_degrees.y)); // y, not yaw + quat z = vec3q(vec3(0,0,1),rad(pyr_degrees.z)); // z, not row + return normq(mulq(mulq(x, y), z)); +#else + float p = rad(pyr_degrees.x), y = rad(pyr_degrees.y), r = rad(pyr_degrees.z); + float ha = p * 0.5f, hb = r * 0.5f, hc = y * 0.5f; + float cp = cosf(ha), sp = sinf(ha), cr = cosf(hb), sr = sinf(hb), cy = cosf(hc), sy = sinf(hc); + return quat(cy*cr*cp + sy*sr*sp, cy*sr*cp - sy*cr*sp, cy*cr*sp + sy*sr*cp, sy*cr*cp - cy*sr*sp); +#endif +} + +// ---------------------------------------------------------------------------- + +void scaling33(mat33 m, float x, float y, float z) { // !!! ok, i guess + m[0] = x; m[1] = 0; m[2] = 0; + m[3] = 0; m[4] = y; m[5] = 0; + m[6] = 0; m[7] = 0; m[8] = z; +} +void scale33(mat33 m, float x, float y, float z) { +#if 0 // original !!! ok, i guess + m[0] *= x; m[1] *= x; m[2] *= x; + m[3] *= y; m[4] *= y; m[5] *= y; + m[6] *= z; m[7] *= z; m[8] *= z; +#else + m[0] *= x; m[3] *= x; m[6] *= x; + m[1] *= y; m[4] *= y; m[7] *= y; + m[2] *= z; m[5] *= z; m[8] *= z; +#endif +} +void id33(mat33 m) { + scaling33(m, 1,1,1); +} +void extract33(mat33 m, const mat44 M) { // extract rot/sca from mat44 + m[0] = M[0]; m[1] = M[1]; m[2] = M[ 2]; + m[3] = M[4]; m[4] = M[5]; m[5] = M[ 6]; + m[6] = M[8]; m[7] = M[9]; m[8] = M[10]; +} +void copy33(mat33 m, const mat33 a) { + for(int i = 0; i < 9; ++i) m[i] = a[i]; +} +// +vec3 mulv33(mat33 m, vec3 v) { + return vec3(m[0]*v.x+m[1]*v.y+m[2]*v.z,m[3]*v.x+m[4]*v.y+m[5]*v.z,m[6]*v.x+m[7]*v.y+m[8]*v.z); +} +void multiply33x2(mat33 m, const mat33 a, const mat33 b) { + m[0] = a[0]*b[0]+a[1]*b[3]+a[2]*b[6]; + m[1] = a[0]*b[1]+a[1]*b[4]+a[2]*b[7]; + m[2] = a[0]*b[2]+a[1]*b[5]+a[2]*b[8]; + + m[3] = a[3]*b[0]+a[4]*b[3]+a[5]*b[6]; + m[4] = a[3]*b[1]+a[4]*b[4]+a[5]*b[7]; + m[5] = a[3]*b[2]+a[4]*b[5]+a[5]*b[8]; + + m[6] = a[6]*b[0]+a[7]*b[3]+a[8]*b[6]; + m[7] = a[6]*b[1]+a[7]*b[4]+a[8]*b[7]; + m[8] = a[6]*b[2]+a[7]*b[5]+a[8]*b[8]; +} + +void rotation33(mat33 m, float degrees, float x,float y,float z) { + float radians = degrees * C_PI / 180.0f; + float s = sinf(radians), c = cosf(radians), c1 = 1.0f - c; + float xy = x*y, yz = y*z, zx = z*x, xs = x*s, ys = y*s, zs = z*s; + m[0] = c1*x*x+c; m[1] = c1*xy-zs; m[2] = c1*zx+ys; + m[3] = c1*xy+zs; m[4] = c1*y*y+c; m[5] = c1*yz-xs; + m[6] = c1*zx-ys; m[7] = c1*yz+xs; m[8] = c1*z*z+c; +} +void rotationq33(mat33 m, quat q) { +#if 0 + float a = q.w, b = q.x, c = q.y, d = q.z; + float a2 = a*a, b2 = b*b, c2 = c*c, d2 = d*d; + m[ 0] = a2 + b2 - c2 - d2; m[ 1] = 2*(b*c + a*d); m[ 2] = 2*(b*d - a*c); + m[ 3] = 2*(b*c - a*d); m[ 4] = a2 - b2 + c2 - d2; m[ 5] = 2*(c*d + a*b); + m[ 6] = 2*(b*d + a*c); m[ 7] = 2*(c*d - a*b); m[ 8] = a2 - b2 - c2 + d2; +#else + float x2 = q.x*q.x, y2 = q.y*q.y, z2 = q.z*q.z, w2 = q.w*q.w; + float xz = q.x*q.z, xy = q.x*q.y, yz = q.y*q.z, wz = q.w*q.z, wy = q.w*q.y, wx = q.w*q.x; + m[0] = 1-2*(y2+z2); m[1] = 2*(xy+wz); m[2] = 2*(xz-wy); + m[3] = 2*(xy-wz); m[4] = 1-2*(x2+z2); m[5] = 2*(yz+wx); + m[6] = 2*(xz+wy); m[7] = 2*(yz-wx); m[8] = 1-2*(x2+y2); +#endif +} +void rotate33(mat33 r, float degrees, float x,float y,float z) { + if(len3sq(vec3(x,y,z)) < (1e-4 * 1e-4)) return; + float m[9]; rotate33(m, degrees, x,y,z); + multiply33x2(r, r, m); +} +void compose33(mat33 m, quat r, vec3 s) { // verify me + rotationq33(m, r); + scale33(m, s.x,s.y,s.z); +} + +// ---------------------------------------------------------------------------- + +void id34(mat34 m) { // verify me + m[ 0] = 1; m[ 1] = 0; m[ 2] = 0; m[ 3] = 0; + m[ 4] = 0; m[ 5] = 1; m[ 6] = 0; m[ 7] = 0; + m[ 8] = 0; m[ 9] = 0; m[10] = 1; m[11] = 0; +} +void copy34(mat34 m, const mat34 a) { + for( int i = 0; i < 12; ++i ) m[i] = a[i]; +} +void scale34(mat34 m, float s) { + for( int i = 0; i < 12; ++i ) m[i] *= s; +} +void add34(mat34 m, mat34 n) { + for( int i = 0; i < 12; ++i ) m[i] += n[i]; +} +void muladd34(mat34 m, mat34 n, float s) { + for( int i = 0; i < 12; ++i ) m[i] += n[i] * s; +} +void add34x2(mat34 m, mat34 n, mat34 o) { + for( int i = 0; i < 12; ++i ) m[i] = n[i] + o[i]; +} +void lerp34(mat34 m, mat34 n, mat34 o, float alpha) { + for( int i = 0; i < 12; ++i ) m[i] = n[i] * (1-alpha) + o[i] * alpha; +} +void multiply34x2(mat34 m, const mat34 m0, const mat34 m1) { + vec4 r0 = { m0[0*4+0], m0[0*4+1], m0[0*4+2], m0[0*4+3] }; // rows + vec4 r1 = { m0[1*4+0], m0[1*4+1], m0[1*4+2], m0[1*4+3] }; + vec4 r2 = { m0[2*4+0], m0[2*4+1], m0[2*4+2], m0[2*4+3] }; + + vec4 c0 = { m1[0*4+0], m1[1*4+0], m1[2*4+0], 0.0f }; // cols + vec4 c1 = { m1[0*4+1], m1[1*4+1], m1[2*4+1], 0.0f }; + vec4 c2 = { m1[0*4+2], m1[1*4+2], m1[2*4+2], 0.0f }; + vec4 c3 = { m1[0*4+3], m1[1*4+3], m1[2*4+3], 1.0f }; + + m[ 0] = dot4(r0, c0); m[ 1] = dot4(r0, c1); m[ 2] = dot4(r0, c2); m[ 3] = dot4(r0, c3); + m[ 4] = dot4(r1, c0); m[ 5] = dot4(r1, c1); m[ 6] = dot4(r1, c2); m[ 7] = dot4(r1, c3); + m[ 8] = dot4(r2, c0); m[ 9] = dot4(r2, c1); m[10] = dot4(r2, c2); m[11] = dot4(r2, c3); +} +void multiply34(mat34 m, const mat34 a) { + mat34 x; copy34(x, m); + multiply34x2(m, x, a); +} +void multiply34x3(mat34 m, const mat34 a, const mat34 b, const mat34 c) { + mat34 x; + multiply34x2(x, a, b); + multiply34x2(m, x, c); +} +void compose34(mat34 m, vec3 t, quat q, vec3 s) { + m[ 0] = s.x * (1 - 2 * q.y * q.y - 2 * q.z * q.z); + m[ 1] = s.y * ( 2 * q.x * q.y - 2 * q.w * q.z); + m[ 2] = s.z * ( 2 * q.x * q.z + 2 * q.w * q.y); + m[ 3] = t.x; + m[ 4] = s.x * ( 2 * q.x * q.y + 2 * q.w * q.z); + m[ 5] = s.y * (1 - 2 * q.x * q.x - 2 * q.z * q.z); + m[ 6] = s.z * ( 2 * q.y * q.z - 2 * q.w * q.x); + m[ 7] = t.y; + m[ 8] = s.x * ( 2 * q.x * q.z - 2 * q.w * q.y); + m[ 9] = s.y * ( 2 * q.y * q.z + 2 * q.w * q.x); + m[10] = s.z * (1 - 2 * q.x * q.x - 2 * q.y * q.y); + m[11] = t.z; +} +void invert34(mat34 m, const mat34 o) { + vec3 a = norm3sq(vec3(o[0*4+0], o[1*4+0], o[2*4+0])); + vec3 b = norm3sq(vec3(o[0*4+1], o[1*4+1], o[2*4+1])); + vec3 c = norm3sq(vec3(o[0*4+2], o[1*4+2], o[2*4+2])); + vec3 trans = vec3(o[0*4+3], o[1*4+3], o[2*4+3]); + vec4 A = vec34(a, -dot3(a, trans)); + vec4 B = vec34(b, -dot3(b, trans)); + vec4 C = vec34(c, -dot3(c, trans)); + m[ 0] = A.x; m[ 1] = A.y; m[ 2] = A.z; m[ 3] = A.w; + m[ 4] = B.x; m[ 5] = B.y; m[ 6] = B.z; m[ 7] = B.w; + m[ 8] = C.x; m[ 9] = C.y; m[10] = C.z; m[11] = C.w; +} + +// ---------------------------------------------------------------------------- + +void scaling44(mat44 m, float x, float y, float z); +void id44(mat44 m) { + scaling44(m, 1,1,1); +} +void identity44(mat44 m) { + scaling44(m, 1,1,1); +} +void copy44(mat44 m, const mat44 a) { + for( int i = 0; i < 16; ++i ) m[i] = a[i]; +} +void multiply44x2(mat44 m, const mat44 a, const mat44 b) { + for (int y = 0; y < 4; y++) + for (int x = 0; x < 4; x++) + m[y*4+x] = a[x] * b[y*4]+a[4+x] * b[y*4+1]+a[8+x] * b[y*4+2]+a[12+x] * b[y*4+3]; +} +void multiply44x3(mat44 m, const mat44 a, const mat44 b, const mat44 c) { + mat44 x; + multiply44x2(x, a, b); + multiply44x2(m, x, c); +} +void multiply44(mat44 m, const mat44 a) { + mat44 b; copy44(b, m); + multiply44x2(m, b, a); +} +// --- +void ortho44(mat44 m, float l, float r, float b, float t, float n, float f) { + m[ 0] = 2/(r-l); m[ 1] = 0; m[ 2] = 0; m[ 3] = 0; + m[ 4] = 0; m[ 5] = 2/(t-b); m[ 6] = 0; m[ 7] = 0; + m[ 8] = 0; m[ 9] = 0; m[10] = -2/(f-n); m[11] = 0; + m[12] = -(r+l)/(r-l); m[13] = -(t+b)/(t-b); m[14] = -(f+n)/(f-n); m[15] = 1; +} +void frustum44(mat44 m, float l, float r, float b, float t, float n, float f) { + m[ 0] = 2*n/(r-l); m[ 1] = 0; m[ 2] = 0; m[ 3] = 0; + m[ 4] = 0; m[ 5] = 2*n/(t-b); m[ 6] = 0; m[ 7] = 0; + m[ 8] = (r+l)/(r-l); m[ 9] = (t+b)/(t-b); m[10] = -(f+n)/(f-n); m[11] = -1; + m[12] = 0; m[13] = 0; m[14] = -2*(f*n)/(f-n); m[15] = 0; +} +void perspective44(mat44 m, float fovy_degrees, float aspect, float nearp, float farp) { + float y = tanf(fovy_degrees * C_PI / 360) * nearp, x = y * aspect; + frustum44(m, -x, x, -y, y, nearp, farp); +} +void lookat44(mat44 m, vec3 eye, vec3 center, vec3 up) { + vec3 f = norm3(sub3(center, eye)); + vec3 r = norm3(cross3(f, up)); + vec3 u = cross3(r, f); + m[ 0] = r.x; m[ 1] = u.x; m[ 2] = -f.x; m[ 3] = 0; + m[ 4] = r.y; m[ 5] = u.y; m[ 6] = -f.y; m[ 7] = 0; + m[ 8] = r.z; m[ 9] = u.z; m[10] = -f.z; m[11] = 0; + m[12] = -dot3(r, eye); m[13] = -dot3(u, eye); m[14] = dot3(f, eye); m[15] = 1; +} +// --- +void translation44(mat44 m, float x, float y, float z) { // identity4 + translate4 + m[ 0] = 1.0f; m[ 1] = 0.0f; m[ 2] = 0.0f; m[ 3] = 0.0f; + m[ 4] = 0.0f; m[ 5] = 1.0f; m[ 6] = 0.0f; m[ 7] = 0.0f; + m[ 8] = 0.0f; m[ 9] = 0.0f; m[10] = 1.0f; m[11] = 0.0f; + m[12] = x; m[13] = y; m[14] = z; m[15] = 1.0f; +} +void translate44(mat44 m, float x, float y, float z) { // translate in place +#if 0 // original + vec4 t = {x, y, z, 0}; + m[12] += dot4(vec4(m[0],m[4],m[ 8],m[12]),t); // row4(M,0) + m[13] += dot4(vec4(m[1],m[5],m[ 9],m[13]),t); // row4(M,1) + m[14] += dot4(vec4(m[2],m[6],m[10],m[14]),t); // row4(M,2) + m[15] += dot4(vec4(m[3],m[7],m[11],m[15]),t); // row4(M,3) +#else + m[12] += m[ 0]*x + m[ 4]*y + m[ 8]*z; + m[13] += m[ 1]*x + m[ 5]*y + m[ 9]*z; + m[14] += m[ 2]*x + m[ 6]*y + m[10]*z; + m[15] += m[ 3]*x + m[ 7]*y + m[11]*z; +#endif +} +void relocate44(mat44 m, float x, float y, float z) { + m[12] = x; m[13] = y; m[14] = z; +} +void rotationq44(mat44 m, quat q) { +#if 0 + float a = q.w, b = q.x, c = q.y, d = q.z; + float a2 = a*a, b2 = b*b, c2 = c*c, d2 = d*d; + m[ 0] = a2 + b2 - c2 - d2; m[ 1] = 2*(b*c + a*d); m[ 2] = 2*(b*d - a*c); m[ 3] = 0; + m[ 4] = 2*(b*c - a*d); m[ 5] = a2 - b2 + c2 - d2; m[ 6] = 2*(c*d + a*b); m[ 7] = 0; + m[ 8] = 2*(b*d + a*c); m[ 9] = 2*(c*d - a*b); m[10] = a2 - b2 - c2 + d2; m[11] = 0; + m[12] = 0; m[13] = 0; m[14] = 0; m[15] = 1; +#else + float x2 = q.x*q.x, y2 = q.y*q.y, z2 = q.z*q.z, w2 = q.w*q.w; + float xz = q.x*q.z, xy = q.x*q.y, yz = q.y*q.z, wz = q.w*q.z, wy = q.w*q.y, wx = q.w*q.x; + m[ 0] = 1-2*(y2+z2); m[ 1] = 2*(xy+wz); m[ 2] = 2*(xz-wy); m[ 3] = 0; + m[ 4] = 2*(xy-wz); m[ 5] = 1-2*(x2+z2); m[ 6] = 2*(yz+wx); m[ 7] = 0; + m[ 8] = 2*(xz+wy); m[ 9] = 2*(yz-wx); m[10] = 1-2*(x2+y2); m[11] = 0; + m[12] = 0; m[13] = 0; m[14] = 0; m[15] = 1; +#endif +} +void rotation44(mat44 m, float degrees, float x, float y, float z) { + //if(len3sq(vec3(x,y,z)) < (1e-4 * 1e-4)) return; + + float radians = degrees * C_PI / 180.0f; + float c = cosf(radians), s = sinf(radians), c1 = 1.0f - c; + m[ 0] = x*x*c1 + c; m[ 1] = y*x*c1 + z*s; m[ 2] = x*z*c1 - y*s; m[ 3] = 0.0f; + m[ 4] = x*y*c1 - z*s; m[ 5] = y*y*c1 + c; m[ 6] = y*z*c1 + x*s; m[ 7] = 0.0f; + m[ 8] = x*z*c1 + y*s; m[ 9] = y*z*c1 - x*s; m[10] = z*z*c1 + c; m[11] = 0.0f; + m[12] = 0.0f; m[13] = 0.0f; m[14] = 0.0f; m[15] = 1.0f; +} +void rotate44(mat44 m, float degrees, float x, float y, float z) { // !!! ok, i guess + if(len3sq(vec3(x,y,z)) < (1e-4 * 1e-4)) return; + + float radians = degrees * C_PI / 180.0f; + float c = cosf(radians), s = -sinf(radians), c1 = 1 - c; + float m00 = m[ 0], m01 = m[ 1], m02 = m[ 2], m03 = m[ 3], + m04 = m[ 4], m05 = m[ 5], m06 = m[ 6], m07 = m[ 7], + m08 = m[ 8], m09 = m[ 9], m10 = m[10], m11 = m[11]; + + // rotation matrix + float r00 = x*x*c1 + c, r01 = y*x*c1 + z*s, r02 = x*z*c1 - y*s; + float r04 = x*y*c1 - z*s, r05 = y*y*c1 + c, r06 = y*z*c1 + x*s; + float r08 = x*z*c1 + y*s, r09 = y*z*c1 - x*s, r10 = z*z*c1 + c; + + // multiply + m[ 0] = r00 * m00 + r04 * m04 + r08 * m08; + m[ 1] = r00 * m01 + r04 * m05 + r08 * m09; + m[ 2] = r00 * m02 + r04 * m06 + r08 * m10; + m[ 3] = r00 * m03 + r04 * m07 + r08 * m11; + m[ 4] = r01 * m00 + r05 * m04 + r09 * m08; + m[ 5] = r01 * m01 + r05 * m05 + r09 * m09; + m[ 6] = r01 * m02 + r05 * m06 + r09 * m10; + m[ 7] = r01 * m03 + r05 * m07 + r09 * m11; + m[ 8] = r02 * m00 + r06 * m04 + r10 * m08; + m[ 9] = r02 * m01 + r06 * m05 + r10 * m09; + m[10] = r02 * m02 + r06 * m06 + r10 * m10; + m[11] = r02 * m03 + r06 * m07 + r10 * m11; +} +void scaling44(mat44 m, float x, float y, float z) { // !!! ok, i guess + m[ 0] = x; m[ 1] = 0; m[ 2] = 0; m[ 3] = 0; + m[ 4] = 0; m[ 5] = y; m[ 6] = 0; m[ 7] = 0; + m[ 8] = 0; m[ 9] = 0; m[10] = z; m[11] = 0; + m[12] = 0; m[13] = 0; m[14] = 0; m[15] = 1; +} +void scale44(mat44 m, float x, float y, float z) { +#if 0 // original !!! ok, i guess + m[ 0] *= x; m[ 1] *= x; m[ 2] *= x; m[ 3] *= x; + m[ 4] *= y; m[ 5] *= y; m[ 6] *= y; m[ 7] *= y; + m[ 8] *= z; m[ 9] *= z; m[10] *= z; m[11] *= z; +#else + m[0] *= x; m[4] *= x; m[8] *= x; + m[1] *= y; m[5] *= y; m[9] *= y; + m[2] *= z; m[6] *= z; m[10] *= z; +#endif +} +// --- +void transpose44(mat44 m, const mat44 a) { // M[i][j] = A[j][i]; + m[ 0] = a[0]; m[ 1] = a[4]; m[ 2] = a[ 8]; m[ 3] = a[12]; + m[ 4] = a[1]; m[ 5] = a[5]; m[ 6] = a[ 9]; m[ 7] = a[13]; + m[ 8] = a[2]; m[ 9] = a[6]; m[10] = a[10]; m[11] = a[14]; + m[12] = a[3]; m[13] = a[7]; m[14] = a[11]; m[15] = a[15]; +} + +// @todo: test me +// float det33 = M[0,0]*((M[1,1]*M[2,2])-(M[2,1]*M[1,2]))-M[0,1]*(M[1,0]*M[2,2]-M[2,0]*M[1,2])+M[0,2]*(M[1,0]*M[2,1]-M[2,0]*M[1,1]); +// +// float det33 = +// rgt.x * fwd.y * upv.z - rgt.z * fwd.y * upv.x + +// rgt.y * fwd.z * upv.x - rgt.y * fwd.x * upv.z + +// rgt.z * fwd.x * upv.y - rgt.x * fwd.z * upv.y; +// +// void transpose33(mat33 m, const mat33 a) { // M[i][j] = A[j][i]; +// m[0] = a[0]; m[1] = a[3]; m[2] = a[6]; +// m[3] = a[1]; m[4] = a[4]; m[5] = a[7]; +// m[6] = a[2]; m[7] = a[5]; m[8] = a[8]; +// } + +float det44(const mat44 M) { // !!! ok, i guess + float s[6], c[6]; + s[0] = M[0*4+0]*M[1*4+1] - M[1*4+0]*M[0*4+1]; + s[1] = M[0*4+0]*M[1*4+2] - M[1*4+0]*M[0*4+2]; + s[2] = M[0*4+0]*M[1*4+3] - M[1*4+0]*M[0*4+3]; + s[3] = M[0*4+1]*M[1*4+2] - M[1*4+1]*M[0*4+2]; + s[4] = M[0*4+1]*M[1*4+3] - M[1*4+1]*M[0*4+3]; + s[5] = M[0*4+2]*M[1*4+3] - M[1*4+2]*M[0*4+3]; + + c[0] = M[2*4+0]*M[3*4+1] - M[3*4+0]*M[2*4+1]; + c[1] = M[2*4+0]*M[3*4+2] - M[3*4+0]*M[2*4+2]; + c[2] = M[2*4+0]*M[3*4+3] - M[3*4+0]*M[2*4+3]; + c[3] = M[2*4+1]*M[3*4+2] - M[3*4+1]*M[2*4+2]; + c[4] = M[2*4+1]*M[3*4+3] - M[3*4+1]*M[2*4+3]; + c[5] = M[2*4+2]*M[3*4+3] - M[3*4+2]*M[2*4+3]; + + return ( s[0]*c[5]-s[1]*c[4]+s[2]*c[3]+s[3]*c[2]-s[4]*c[1]+s[5]*c[0] ); +} +bool invert44(mat44 T, const mat44 M) { // !!! ok, i guess + float s[6], c[6]; + s[0] = M[0*4+0]*M[1*4+1] - M[1*4+0]*M[0*4+1]; + s[1] = M[0*4+0]*M[1*4+2] - M[1*4+0]*M[0*4+2]; + s[2] = M[0*4+0]*M[1*4+3] - M[1*4+0]*M[0*4+3]; + s[3] = M[0*4+1]*M[1*4+2] - M[1*4+1]*M[0*4+2]; + s[4] = M[0*4+1]*M[1*4+3] - M[1*4+1]*M[0*4+3]; + s[5] = M[0*4+2]*M[1*4+3] - M[1*4+2]*M[0*4+3]; + + c[0] = M[2*4+0]*M[3*4+1] - M[3*4+0]*M[2*4+1]; + c[1] = M[2*4+0]*M[3*4+2] - M[3*4+0]*M[2*4+2]; + c[2] = M[2*4+0]*M[3*4+3] - M[3*4+0]*M[2*4+3]; + c[3] = M[2*4+1]*M[3*4+2] - M[3*4+1]*M[2*4+2]; + c[4] = M[2*4+1]*M[3*4+3] - M[3*4+1]*M[2*4+3]; + c[5] = M[2*4+2]*M[3*4+3] - M[3*4+2]*M[2*4+3]; + + float det = ( s[0]*c[5]-s[1]*c[4]+s[2]*c[3]+s[3]*c[2]-s[4]*c[1]+s[5]*c[0] ); + if( !det ) return false; + float idet = 1.0f / det; + + T[0*4+0] = ( M[1*4+1] * c[5] - M[1*4+2] * c[4] + M[1*4+3] * c[3]) * idet; + T[0*4+1] = (-M[0*4+1] * c[5] + M[0*4+2] * c[4] - M[0*4+3] * c[3]) * idet; + T[0*4+2] = ( M[3*4+1] * s[5] - M[3*4+2] * s[4] + M[3*4+3] * s[3]) * idet; + T[0*4+3] = (-M[2*4+1] * s[5] + M[2*4+2] * s[4] - M[2*4+3] * s[3]) * idet; + + T[1*4+0] = (-M[1*4+0] * c[5] + M[1*4+2] * c[2] - M[1*4+3] * c[1]) * idet; + T[1*4+1] = ( M[0*4+0] * c[5] - M[0*4+2] * c[2] + M[0*4+3] * c[1]) * idet; + T[1*4+2] = (-M[3*4+0] * s[5] + M[3*4+2] * s[2] - M[3*4+3] * s[1]) * idet; + T[1*4+3] = ( M[2*4+0] * s[5] - M[2*4+2] * s[2] + M[2*4+3] * s[1]) * idet; + + T[2*4+0] = ( M[1*4+0] * c[4] - M[1*4+1] * c[2] + M[1*4+3] * c[0]) * idet; + T[2*4+1] = (-M[0*4+0] * c[4] + M[0*4+1] * c[2] - M[0*4+3] * c[0]) * idet; + T[2*4+2] = ( M[3*4+0] * s[4] - M[3*4+1] * s[2] + M[3*4+3] * s[0]) * idet; + T[2*4+3] = (-M[2*4+0] * s[4] + M[2*4+1] * s[2] - M[2*4+3] * s[0]) * idet; + + T[3*4+0] = (-M[1*4+0] * c[3] + M[1*4+1] * c[1] - M[1*4+2] * c[0]) * idet; + T[3*4+1] = ( M[0*4+0] * c[3] - M[0*4+1] * c[1] + M[0*4+2] * c[0]) * idet; + T[3*4+2] = (-M[3*4+0] * s[3] + M[3*4+1] * s[1] - M[3*4+2] * s[0]) * idet; + T[3*4+3] = ( M[2*4+0] * s[3] - M[2*4+1] * s[1] + M[2*4+2] * s[0]) * idet; + return true; +} + +vec4 transform444(const mat44, const vec4); +bool unproject44(vec3 *out, vec3 xyd, vec4 viewport, mat44 mvp) { // @fixme: this function is broken (verified by @zpl-zak) + // xyd: usually x:mouse_x,y:window_height()-mouse_y,d:0=znear/1=zfar + // src: https://www.khronos.org/opengl/wiki/GluProject_and_gluUnProject_code + mat44 inv_mvp; + if( invert44(inv_mvp, mvp) ) { + vec4 in = vec4( (xyd.x-viewport.x)/viewport.z*2-1, (xyd.y-viewport.y)/viewport.w*2-1, 2*xyd.z-1, 1 ); + vec4 p = transform444(inv_mvp, in); + if( p.w != 0 ) { + p.w = 1.f/p.w; + *out = vec3(p.x*p.w,p.y*p.w,p.z*p.w); + return true; + } + } + return false; +} + +void compose44(mat44 m, vec3 t, quat q, vec3 s) { +#if 0 + // quat to rotation matrix + m[0] = 1 - 2 * (q.y * q.y + q.z * q.z); + m[1] = 2 * (q.x * q.y + q.z * q.w); + m[2] = 2 * (q.x * q.z - q.y * q.w); + + m[4] = 2 * (q.x * q.y - q.z * q.w); + m[5] = 1 - 2 * (q.x * q.x + q.z * q.z); + m[6] = 2 * (q.y * q.z + q.x * q.w); + + m[8] = 2 * (q.x * q.z + q.y * q.w); + m[9] = 2 * (q.y * q.z - q.x * q.w); + m[10] = 1 - 2 * (q.x * q.x + q.y * q.y); + + // scale matrix + m[0] *= s.x; m[4] *= s.x; m[8] *= s.x; + m[1] *= s.y; m[5] *= s.y; m[9] *= s.y; + m[2] *= s.z; m[6] *= s.z; m[10] *= s.z; + + // set translation + m[12] = t.x; m[13] = t.y; m[14] = t.z; + + m[3] = 0; m[7] = 0; m[11] = 0; m[15] = 1; +#else + rotationq44(m,q); + scale44(m,s.x,s.y,s.z); + relocate44(m,t.x,t.y,t.z); +// relocate44(m,t.x,t.y,t.z); // ok? +// scale44(m,s.x,s.y,s.z); // ok? + + m[3] = 0; m[7] = 0; m[11] = 0; m[15] = 1; +#endif +} + +// ---------------------------------------------------------------------------- + +vec3 transform33(const mat33 m, vec3 p) { + float x = (m[0] * p.x) + (m[4] * p.y) + (m[ 8] * p.z); + float y = (m[1] * p.x) + (m[5] * p.y) + (m[ 9] * p.z); + float z = (m[2] * p.x) + (m[6] * p.y) + (m[10] * p.z); + return vec3(x,y,z); +} + +vec4 transform444(const mat44 m, const vec4 p) { + // remember w = 1 for move in space; w = 0 rotate in space; + float x = m[0]*p.x + m[4]*p.y + m[ 8]*p.z + m[12]*p.w; + float y = m[1]*p.x + m[5]*p.y + m[ 9]*p.z + m[13]*p.w; + float z = m[2]*p.x + m[6]*p.y + m[10]*p.z + m[14]*p.w; + float w = m[3]*p.x + m[7]*p.y + m[11]*p.z + m[15]*p.w; + return vec4(x,y,z,w); +} + +vec3 transform344(const mat44 m, const vec3 p) { + vec4 v = transform444(m, vec34(p, 1)); + return scale3(v.xyz, 1.f / v.w); +} + +vec3 transformq(const quat q, const vec3 v) { // !!! ok, i guess + // [src] https://gamedev.stackexchange.com/questions/28395/rotating-vector3-by-a-quaternion (laurent couvidou) + // Extract the vector part of the quaternion + vec3 u = vec3(q.x, q.y, q.z); + // Extract the scalar part of the quaternion + float s = q.w; + // Do the math + vec3 a = scale3(u, 2 * dot3(u,v)); + vec3 b = scale3(v, s*s - dot3(u,u)); + vec3 c = scale3(cross3(u,v), 2*s); + return add3(a, add3(b,c)); +} + +#if 0 +vec3 transform_axis(const coord_system, const AXIS_ENUMS); +void rebase44(mat44 m, const coord_system src_basis, const coord_system dst_basis) { + vec3 v1 = transform_axis(src_basis, dst_basis.x); + vec3 v2 = transform_axis(src_basis, dst_basis.y); + vec3 v3 = transform_axis(src_basis, dst_basis.z); + m[ 0] = v1.x; m[ 1] = v1.y; m[ 2] = v1.z; m[ 3] = 0; + m[ 4] = v2.x; m[ 5] = v2.y; m[ 6] = v2.z; m[ 7] = 0; + m[ 8] = v3.x; m[ 9] = v3.y; m[10] = v3.z; m[11] = 0; + m[12] = 0; m[13] = 0; m[14] = 0; m[15] = 1; +} + +vec3 transform_axis(const coord_system basis, const AXIS_ENUMS to) { + const float dot_table[6][6] = { + {+1,-1,0,0,0,0},{-1,+1,0,0,0,0},{0,0,+1,-1,0,0}, + {0,0,-1,+1,0,0},{0,0,0,0,+1,-1},{0,0,0,0,-1,+1}, + }; + return vec3( dot_table[basis.x][to], dot_table[basis.y][to], dot_table[basis.z][to] ); +} + +// A vector is the difference between two points in 3D space, possessing both direction and magnitude +vec3 transform_vector (const mat44 m, const vec3 vector) { + return transform344(m, vector); +} + +// A point is a specific location within a 3D space +vec3 transform_point (const mat44 m, const vec3 p) { // return (m * vec4{point,1).xyz()/r.w; + float inv = 1.0f / (m[3+4*0]*p.x + m[3+4*1]*p.y + m[3+4*2]*p.z + m[3+4*3]); + return vec3( + (m[0+4*0]*p.x + m[0+4*1]*p.y + m[0+4*2]*p.z + m[0+4*3]) * inv, + (m[1+4*0]*p.x + m[1+4*1]*p.y + m[1+4*2]*p.z + m[1+4*3]) * inv, + (m[2+4*0]*p.x + m[2+4*1]*p.y + m[2+4*2]*p.z + m[2+4*3]) * inv + ); +} + +// A tangent is a unit-length vector which is parallel to a piece of geometry, such as a surface or a curve +vec3 transform_tangent (const mat44 m, const vec3 tangent) { return norm3(transform_vector(m, tangent)); } + +// A normal is a unit-length bivector which is perpendicular to a piece of geometry, such as a surface or a curve +vec3 transform_normal (const mat44 m, const vec3 normal) { + return transform_tangent(m, normal); // ok? + + mat44 t; transpose44(t,m); mat44 i; invert44(i,t); + return scale3(norm3(transform_vector(i, normal)), det44(m) < 0 ? -1.f : 1.f); +} + +// A quaternion can describe both a rotation and a uniform scaling in 3D space +quat transform_quat (const mat44 m, const quat q) { + vec3 s = scale3(transform_vector(m, q.xyz), det44(m) < 0 ? -1.f : 1.f); + return quat(s.x,s.y,s.z,q.w); +} + +// A matrix can describe a general transformation of homogeneous coordinates in projective space +float* transform_matrix(mat44 out, const mat44 m, const mat44 matrix) { + mat44 I; invert44(I, m); + multiply44x3(out, I, matrix, m); // m,matrix,I instead ? + return out; +} + +// Scaling factors are not a vector, they are a compact representation of a scaling matrix +vec3 transform_scaling (const mat44 m, const vec3 scaling) { + mat44 s; scaling44(s, scaling.x, scaling.y, scaling.z); + mat44 out; transform_matrix(out, m, s); + return vec3( out[0], out[5], out[10] ); +} +#endif + +// ---------------------------------------------------------------------------- +// !!! for debugging + +void printi_( int *m, int ii, int jj ) { + for( int j = 0; j < jj; ++j ) { + for( int i = 0; i < ii; ++i ) printf("%10d ", *m++); + puts(""); + } +// puts("---"); +} +void print_( float *m, int ii, int jj ) { + for( int j = 0; j < jj; ++j ) { + for( int i = 0; i < ii; ++i ) printf("%8.3f", *m++); + puts(""); + } +// puts("---"); +} +void print2i( vec2i v ) { printi_(&v.x,2,1); } +void print3i( vec3i v ) { printi_(&v.x,3,1); } +void print2( vec2 v ) { print_(&v.x,2,1); } +void print3( vec3 v ) { print_(&v.x,3,1); } +void print4( vec4 v ) { print_(&v.x,4,1); } +void printq( quat q ) { print_(&q.x,4,1); } +void print33( float *m ) { print_(m,3,3); } +void print34( float *m ) { print_(m,3,4); } +void print44( float *m ) { print_(m,4,4); } + +// ----------- + +AUTORUN { + STRUCT( vec3, float, x ); + STRUCT( vec3, float, y ); + STRUCT( vec3, float, z, "Up" ); +} #line 0 #line 1 "v4k_memory.c" -size_t dlmalloc_usable_size(void*); // __ANDROID_API__ - -#if is(bsd) || is(osx) // bsd or osx -# include -#else -# include -#endif - -#ifndef SYS_MEM_INIT -#define SYS_MEM_INIT() -#define SYS_MEM_REALLOC realloc -#define SYS_MEM_SIZE /* bsd/osx, then win32, then ems/__GLIBC__, then __ANDROID_API__ */ \ - ifdef(osx, malloc_size, ifdef(bsd, malloc_size, \ - ifdef(win32, _msize, malloc_usable_size))) -#endif - -// xrealloc -------------------------------------------------------------------- - -static __thread uint64_t xstats_current = 0, xstats_total = 0, xstats_allocs = 0; - -void* xrealloc(void* oldptr, size_t size) { - static __thread int once = 0; for(;!once;once = 1) SYS_MEM_INIT(); - - // for stats - size_t oldsize = xsize(oldptr); - - void *ptr = SYS_MEM_REALLOC(oldptr, size); - if( !ptr && size ) { - PANIC("Not memory enough (trying to allocate %u bytes)", (unsigned)size); - } -#if ENABLE_MEMORY_POISON - if( !oldptr && size ) { - memset(ptr, 0xCD, size); - } -#endif - - // for stats - if( oldptr ) { - xstats_current += (int64_t)size - (int64_t)oldsize; - xstats_allocs -= !size; - } else { - xstats_current += size; - xstats_allocs += !!size; - } - if( xstats_current > xstats_total ) { - xstats_total = xstats_current; - } - - return ptr; -} -size_t xsize(void* p) { - if( p ) return SYS_MEM_SIZE(p); - return 0; -} -char *xstats(void) { - uint64_t xtra = 0; // xstats_allocs * 65536; // assumes 64K pagesize for every alloc - return va("%03u/%03uMB", (unsigned)((xstats_current+xtra) / 1024 / 1024), (unsigned)((xstats_total+xtra) / 1024 / 1024)); -} - -// stack ----------------------------------------------------------------------- - -void* stack(int bytes) { // use negative bytes to rewind stack - static __thread uint8_t *stack_mem = 0; - static __thread uint64_t stack_ptr = 0; - static __thread uint64_t stack_max = 0; // watch this var, in case you want to fine tune 4 MiB value below - if( bytes < 0 ) { - if( stack_ptr > stack_max ) stack_max = stack_ptr; - return (stack_ptr = 0), NULL; - } - if( !stack_mem ) stack_mem = xrealloc(stack_mem, xsize(stack_mem) + 4 * 1024 * 1024); - return &stack_mem[ (stack_ptr += bytes) - bytes ]; -} - -// leaks ---------------------------------------------------------------------- - -void* watch( void *ptr, int sz ) { - static __thread int open = 1; - if( ptr && open ) { - open = 0; - - char buf[256]; - sprintf(buf, "%p.mem", ptr); - for( FILE *fp = fopen(buf, "a+"); fp; fclose(fp), fp = 0 ) { - fseek(fp, 0L, SEEK_END); - const char *cs = callstack( +16 ); // +48 - fprintf(fp, "Built %s %s\n", __DATE__, __TIME__); // today() instead? - fprintf(fp, "Memleak address: [%p], size: %d\n%s\n", ptr, sz, cs ? cs : "No callstack."); - } - - open = 1; - } - return ptr; -} -void* forget( void *ptr ) { - if( ptr ) { - char buf[256]; - sprintf(buf, "%p.mem", ptr); - unlink(buf); - } - return ptr; -} +size_t dlmalloc_usable_size(void*); // __ANDROID_API__ + +#if is(bsd) || is(osx) // bsd or osx +# include +#else +# include +#endif + +#ifndef SYS_MEM_INIT +#define SYS_MEM_INIT() +#define SYS_MEM_REALLOC realloc +#define SYS_MEM_SIZE /* bsd/osx, then win32, then ems/__GLIBC__, then __ANDROID_API__ */ \ + ifdef(osx, malloc_size, ifdef(bsd, malloc_size, \ + ifdef(win32, _msize, malloc_usable_size))) +#endif + +// xrealloc -------------------------------------------------------------------- + +static __thread uint64_t xstats_current = 0, xstats_total = 0, xstats_allocs = 0; + +void* xrealloc(void* oldptr, size_t size) { + static __thread int once = 0; for(;!once;once = 1) SYS_MEM_INIT(); + + // for stats + size_t oldsize = xsize(oldptr); + + void *ptr = SYS_MEM_REALLOC(oldptr, size); + if( !ptr && size ) { + PANIC("Not memory enough (trying to allocate %u bytes)", (unsigned)size); + } +#if ENABLE_MEMORY_POISON + if( !oldptr && size ) { + memset(ptr, 0xCD, size); + } +#endif + + // for stats + if( oldptr ) { + xstats_current += (int64_t)size - (int64_t)oldsize; + xstats_allocs -= !size; + } else { + xstats_current += size; + xstats_allocs += !!size; + } + if( xstats_current > xstats_total ) { + xstats_total = xstats_current; + } + + return ptr; +} +size_t xsize(void* p) { + if( p ) return SYS_MEM_SIZE(p); + return 0; +} +char *xstats(void) { + uint64_t xtra = 0; // xstats_allocs * 65536; // assumes 64K pagesize for every alloc + return va("%03u/%03uMB", (unsigned)((xstats_current+xtra) / 1024 / 1024), (unsigned)((xstats_total+xtra) / 1024 / 1024)); +} + +// stack ----------------------------------------------------------------------- + +void* stack(int bytes) { // use negative bytes to rewind stack + static __thread uint8_t *stack_mem = 0; + static __thread uint64_t stack_ptr = 0; + static __thread uint64_t stack_max = 0; // watch this var, in case you want to fine tune 4 MiB value below + if( bytes < 0 ) { + if( stack_ptr > stack_max ) stack_max = stack_ptr; + return (stack_ptr = 0), NULL; + } + if( !stack_mem ) stack_mem = xrealloc(stack_mem, xsize(stack_mem) + 4 * 1024 * 1024); + return &stack_mem[ (stack_ptr += bytes) - bytes ]; +} + +// leaks ---------------------------------------------------------------------- + +void* watch( void *ptr, int sz ) { + static __thread int open = 1; + if( ptr && open ) { + open = 0; + + char buf[256]; + sprintf(buf, "%p.mem", ptr); + for( FILE *fp = fopen(buf, "a+"); fp; fclose(fp), fp = 0 ) { + fseek(fp, 0L, SEEK_END); + const char *cs = callstack( +16 ); // +48 + fprintf(fp, "Built %s %s\n", __DATE__, __TIME__); // today() instead? + fprintf(fp, "Memleak address: [%p], size: %d\n%s\n", ptr, sz, cs ? cs : "No callstack."); + } + + open = 1; + } + return ptr; +} +void* forget( void *ptr ) { + if( ptr ) { + char buf[256]; + sprintf(buf, "%p.mem", ptr); + unlink(buf); + } + return ptr; +} #line 0 #line 1 "v4k_network.c" - -#if is(tcc) && is(win32) // @fixme: https lib is broken with tcc. replaced with InternetReadFile() api for now - -# include -# pragma comment(lib,"wininet") - -int download_file( FILE *out, const char *url ) { - int ok = false; - char buffer[ 4096 ]; - DWORD response_size = 0; - - if( out ) - for( HINTERNET session = InternetOpenA("v4k.download_file", PRE_CONFIG_INTERNET_ACCESS, NULL, INTERNET_INVALID_PORT_NUMBER, 0); session; InternetCloseHandle(session), session = 0 ) - for( HINTERNET request = InternetOpenUrlA(session, url, NULL, 0, INTERNET_FLAG_RELOAD, 0); request; InternetCloseHandle(request), request = 0 ) - for(; InternetReadFile(request, buffer, sizeof(buffer), &response_size) != FALSE && response_size > 0; ) { - ok = (fwrite(buffer, response_size, 1, out) == 1); - if(!ok) break; - } - - return ok; -} - -array(char) download( const char *url ) { - char buffer[ 4096 ]; - DWORD response_size = 0, pos = 0; - - array(char) out = 0; - for( HINTERNET session = InternetOpenA("v4k.download", PRE_CONFIG_INTERNET_ACCESS, NULL, INTERNET_INVALID_PORT_NUMBER, 0); session; InternetCloseHandle(session), session = 0 ) - for( HINTERNET request = InternetOpenUrlA(session, url, NULL, 0, INTERNET_FLAG_RELOAD, 0); request; InternetCloseHandle(request), request = 0 ) - for(; InternetReadFile(request, buffer, sizeof(buffer), &response_size) != FALSE && response_size > 0; ) { - array_resize(out, pos + response_size); - memcpy(out + (pos += response_size) - response_size, buffer, response_size); - } - - return out; -} -#else -int download_file( FILE *out, const char *url ) { - int ok = false; - if( out ) for( https_t *h = https_get(url, NULL); h; https_release(h), h = NULL ) { - while (https_process(h) == HTTPS_STATUS_PENDING) sleep_ms(1); - //printf("fetch status%d, %d %s\n\n%.*s\n", https_process(h), h->status_code, h->content_type, (int)h->response_size, (char*)h->response_data); - if(https_process(h) == HTTPS_STATUS_COMPLETED) - ok = fwrite(h->response_data, h->response_size, 1, out) == 1; - } - return ok; -} - -// @fixme: broken with tcc -m64 (our default tcc configuration) -array(char) download( const char *url ) { - array(char) out = 0; - for( https_t *h = https_get(url, NULL); h; https_release(h), h = NULL ) { - while (https_process(h) == HTTPS_STATUS_PENDING) sleep_ms(1); - //printf("fetch status:%d, %d %s\n\n%.*s\n", https_process(h), h->status_code, h->content_type, (int)h->response_size, (char*)h->response_data); - if( https_process(h) == HTTPS_STATUS_COMPLETED ) { - array_resize(out, h->response_size); - memcpy(out, h->response_data, h->response_size); - } - } - return out; -} -#endif - -bool network_tests() { - // network test (https) - array(char) webfile = download("https://www.google.com/"); - printf("Network test: %d bytes downloaded from google.com\n", array_count(webfile)); - // array_push(webfile, '\0'); puts(webfile); - return true; -} - -int portname( const char *service_name, unsigned retries ) { - // Determine port for a given service based on hash of its name. - // If port cant be reached, client should retry with next hash. - // Algorithm: fnv1a(name of service) -> splitmix64 num retries -> remap bucket as [min..max] ports. - - // hash64 - uint64_t hash = 14695981039346656037ULL; - while( *service_name ) { - hash = ( (unsigned char)*service_name++ ^ hash ) * 0x100000001b3ULL; - } - - // splitmix64 - for( unsigned i = 0; i < retries; ++i ) { - uint64_t h = (hash += UINT64_C(0x9E3779B97F4A7C15)); - h = (h ^ (h >> 30)) * UINT64_C(0xBF58476D1CE4E5B9); - h = (h ^ (h >> 27)) * UINT64_C(0x94D049BB133111EB); - h = (h ^ (h >> 31)); - hash = h; - } - - // See dynamic ports: https://en.wikipedia.org/wiki/Ephemeral_port - // So, excluded ranges: 32768..60999 (linux), 49152..65535 (freebsd+vista+win7), 1024..5000 (winsrv2003+bsd) - // Output range: [5001..32724], in 4096 steps - return ((hash & 0xFFF) * 677 / 100 + 5001); -} - -// ----------------------------------------------------------------------------- - -#define UDP_DEBUG 0 - -static int udp_init() { - do_once { - int rc = swrapInit(); // atexit(swrapTerminate); - if( rc ) PANIC("udp_init: swrapInit error"); - } - return 1; -} - -int udp_open(const char *address, const char *port) { - do_once udp_init(); - int fd = swrapSocket(SWRAP_UDP, SWRAP_CONNECT, 0, address, port); - // if( fd == -1 ) PANIC("udp_open: swrapSocket error"); - return fd; -} - -int udp_bind(const char *address, const char *port) { - do_once udp_init(); - int fd = swrapSocket(SWRAP_UDP, SWRAP_BIND, 0, address, port); - // if( fd == -1 ) PANIC("udp_bind: swrapSocket error"); - return fd; -} - -int udp_send( int fd, const void *buf, int len ) { // returns bytes sent, or -1 if error - int rc = -1; - if( fd >= 0 ) for( ;; ) { - rc = swrapSend(fd, (const char *)buf, len); -#if is(win32) - if( rc == -1 && WSAGetLastError() == WSAEINTR ) continue; - else break; -#else - if( rc == -1 && errno == EINTR ) continue; - else break; -#endif - } -#if UDP_DEBUG - if( rc > 0 ) { - char host[128], serv[128]; - int rc2 = swrapAddressInfo(&sa, host, 128, serv, 128 ); - if( rc2 != 0 ) PANIC("swrapAddressInfo error"); - printf("udp_send: %d bytes to %s:%s : %.*s\n", rc, host, serv, rc, buf ); - hexdump(buf, rc); - } -#endif - return rc; -} - -int udp_close( int fd ) { // @todo: expose me? needed? -#if is(win32) - // closesocket(fd); -#else - // close(fd); -#endif - fd = -1; // noop - return 0; -} - -#if 0 -// use socket to send data to another address -int udp_sendto( int fd, const char *ip, const char *port, const void *buf, int len ) { // return number of bytes sent -#if 0 - int rc = swrapSendTo(fd, struct swrap_addr*, (const char*)buf, len); - if( rc == -1 ) return -1; //PANIC("udp_send: swrapSend error"); - return rc; -#else - struct sockaddr_in addr = {0}; - addr.sin_family = AF_INET; - // use inet_addr. tcc(win32) wont work otherwise. - addr.sin_addr.s_addr = inet_addr(ip); // inet_pton(AF_INET, ip, &addr.sin_addr); - addr.sin_port = htons(atoi(port)); - - int n = sendto(fd, buf, len, 0, (struct sockaddr *)&addr, sizeof(addr)); - return n < 0 ? -1 : n; -#endif -} -#endif - -int udp_peek( int fd ) { // <0 error, 0 timeout, >0 data - int rc = swrapSelect(fd, 0.00001); - if( rc < 0 ) return -1; // PANIC("udp_peek: swrapSelect error"); - if( rc == 0 ) return 0; // timeout - return 1; //> 0: new data is available -} - -int udp_recv( int fd, void *buf, int len ) { // <0 error, 0 orderly shutdown, >0 received bytes - struct swrap_addr sa = {0}; - int rc = swrapReceiveFrom(fd, &sa, buf, len); - if( rc < 0 ) return -1; // PANIC("udp_recv: swrapReceiveFrom error"); - if( rc == 0 ) return 0; // orderly shutdown - -#if UDP_DEBUG - char host[128], serv[128]; - int rc2 = swrapAddressInfo(&sa, host, 128, serv, 128 ); - if( rc2 != 0 ) PANIC("swrapAddressInfo error"); - printf("udp_recv: %d bytes from %s:%s : %.*s\n", rc, host, serv, rc, buf ); - hexdump(buf, rc); -#endif - - return rc; -} - -// ----------------------------------------------------------------------------- - -#define TCP_DEBUG 1 - -#if TCP_DEBUG -static set(int) tcp_set; -#endif - -void tcp_init(void) { - do_once { - udp_init(); -#if TCP_DEBUG - set_init(tcp_set, less_int, hash_int); -#endif - } -} -int tcp_open(const char *address, const char *port) { - do_once tcp_init(); - int fd = swrapSocket(SWRAP_TCP, SWRAP_CONNECT, 0/*|SWRAP_NODELAY*/, address, port); - return fd; -} -int tcp_bind(const char *interface_, const char *port, int backlog) { - do_once tcp_init(); - int fd = swrapSocket(SWRAP_TCP, SWRAP_BIND, 0/*|SWRAP_NODELAY*//*|SWRAP_NOBLOCK*/, interface_, port); - if( fd >= 0 ) swrapListen(fd, backlog); - return fd; -} -int tcp_peek(int fd, int(*callback)(int)) { - struct swrap_addr sa; - int fd2 = swrapAccept(fd, &sa); - if( fd2 >= 0 ) return callback(fd2); - return -1; -} -int tcp_send(int fd, const void *buf, int len) { - int rc = swrapSend(fd, (const char *)buf, len); -#if TCP_DEBUG - if( set_find(tcp_set, fd) ) { - printf("send -> %11d (status: %d) %s:%s\n", len, rc, tcp_host(fd), tcp_port(fd)); - if( rc > 0 ) hexdump(buf, rc); - } -#endif - return rc; -} -int tcp_recv(int fd, void *buf, int len) { - int rc = swrapReceive(fd, (char*)buf, len); -#if TCP_DEBUG - if( rc != 0 && set_find(tcp_set, fd) ) { - printf("recv <- %11d (status: %d) %s:%s\n", len, rc, tcp_host(fd), tcp_port(fd)); - if( rc > 0 ) hexdump(buf, rc); - } -#endif - return rc; -} -char* tcp_host(int fd) { - char buf[1024]; - struct swrap_addr sa; - swrapAddress(fd, &sa); - swrapAddressInfo(&sa, buf, 512, buf+512, 512); - return va("%s", buf); -} -char* tcp_port(int fd) { - char buf[1024]; - struct swrap_addr sa; - swrapAddress(fd, &sa); - swrapAddressInfo(&sa, buf, 512, buf+512, 512); - return va("%s", buf+512); -} -int tcp_close(int fd) { - swrapClose(fd); - return 0; -} -int tcp_debug(int fd) { -#if TCP_DEBUG - if( set_find(tcp_set, fd) ) { - set_erase(tcp_set, fd); - return 0; - } else { - set_insert(tcp_set, fd); - return 1; - } -#else - return 0; -#endif -} - -// ----------------------------------------------------------------------------- - -static void network_init() { - do_once { - udp_init(); - tcp_init(); - } -} + +#if is(tcc) && is(win32) // @fixme: https lib is broken with tcc. replaced with InternetReadFile() api for now + +# include +# pragma comment(lib,"wininet") + +int download_file( FILE *out, const char *url ) { + int ok = false; + char buffer[ 4096 ]; + DWORD response_size = 0; + + if( out ) + for( HINTERNET session = InternetOpenA("v4k.download_file", PRE_CONFIG_INTERNET_ACCESS, NULL, INTERNET_INVALID_PORT_NUMBER, 0); session; InternetCloseHandle(session), session = 0 ) + for( HINTERNET request = InternetOpenUrlA(session, url, NULL, 0, INTERNET_FLAG_RELOAD, 0); request; InternetCloseHandle(request), request = 0 ) + for(; InternetReadFile(request, buffer, sizeof(buffer), &response_size) != FALSE && response_size > 0; ) { + ok = (fwrite(buffer, response_size, 1, out) == 1); + if(!ok) break; + } + + return ok; +} + +array(char) download( const char *url ) { + char buffer[ 4096 ]; + DWORD response_size = 0, pos = 0; + + array(char) out = 0; + for( HINTERNET session = InternetOpenA("v4k.download", PRE_CONFIG_INTERNET_ACCESS, NULL, INTERNET_INVALID_PORT_NUMBER, 0); session; InternetCloseHandle(session), session = 0 ) + for( HINTERNET request = InternetOpenUrlA(session, url, NULL, 0, INTERNET_FLAG_RELOAD, 0); request; InternetCloseHandle(request), request = 0 ) + for(; InternetReadFile(request, buffer, sizeof(buffer), &response_size) != FALSE && response_size > 0; ) { + array_resize(out, pos + response_size); + memcpy(out + (pos += response_size) - response_size, buffer, response_size); + } + + return out; +} +#else +int download_file( FILE *out, const char *url ) { + int ok = false; + if( out ) for( https_t *h = https_get(url, NULL); h; https_release(h), h = NULL ) { + while (https_process(h) == HTTPS_STATUS_PENDING) sleep_ms(1); + //printf("fetch status%d, %d %s\n\n%.*s\n", https_process(h), h->status_code, h->content_type, (int)h->response_size, (char*)h->response_data); + if(https_process(h) == HTTPS_STATUS_COMPLETED) + ok = fwrite(h->response_data, h->response_size, 1, out) == 1; + } + return ok; +} + +// @fixme: broken with tcc -m64 (our default tcc configuration) +array(char) download( const char *url ) { + array(char) out = 0; + for( https_t *h = https_get(url, NULL); h; https_release(h), h = NULL ) { + while (https_process(h) == HTTPS_STATUS_PENDING) sleep_ms(1); + //printf("fetch status:%d, %d %s\n\n%.*s\n", https_process(h), h->status_code, h->content_type, (int)h->response_size, (char*)h->response_data); + if( https_process(h) == HTTPS_STATUS_COMPLETED ) { + array_resize(out, h->response_size); + memcpy(out, h->response_data, h->response_size); + } + } + return out; +} +#endif + +bool network_tests() { + // network test (https) + array(char) webfile = download("https://www.google.com/"); + printf("Network test: %d bytes downloaded from google.com\n", array_count(webfile)); + // array_push(webfile, '\0'); puts(webfile); + return true; +} + +int portname( const char *service_name, unsigned retries ) { + // Determine port for a given service based on hash of its name. + // If port cant be reached, client should retry with next hash. + // Algorithm: fnv1a(name of service) -> splitmix64 num retries -> remap bucket as [min..max] ports. + + // hash64 + uint64_t hash = 14695981039346656037ULL; + while( *service_name ) { + hash = ( (unsigned char)*service_name++ ^ hash ) * 0x100000001b3ULL; + } + + // splitmix64 + for( unsigned i = 0; i < retries; ++i ) { + uint64_t h = (hash += UINT64_C(0x9E3779B97F4A7C15)); + h = (h ^ (h >> 30)) * UINT64_C(0xBF58476D1CE4E5B9); + h = (h ^ (h >> 27)) * UINT64_C(0x94D049BB133111EB); + h = (h ^ (h >> 31)); + hash = h; + } + + // See dynamic ports: https://en.wikipedia.org/wiki/Ephemeral_port + // So, excluded ranges: 32768..60999 (linux), 49152..65535 (freebsd+vista+win7), 1024..5000 (winsrv2003+bsd) + // Output range: [5001..32724], in 4096 steps + return ((hash & 0xFFF) * 677 / 100 + 5001); +} + +// ----------------------------------------------------------------------------- + +#define UDP_DEBUG 0 + +static int udp_init() { + do_once { + int rc = swrapInit(); // atexit(swrapTerminate); + if( rc ) PANIC("udp_init: swrapInit error"); + } + return 1; +} + +int udp_open(const char *address, const char *port) { + do_once udp_init(); + int fd = swrapSocket(SWRAP_UDP, SWRAP_CONNECT, 0, address, port); + // if( fd == -1 ) PANIC("udp_open: swrapSocket error"); + return fd; +} + +int udp_bind(const char *address, const char *port) { + do_once udp_init(); + int fd = swrapSocket(SWRAP_UDP, SWRAP_BIND, 0, address, port); + // if( fd == -1 ) PANIC("udp_bind: swrapSocket error"); + return fd; +} + +int udp_send( int fd, const void *buf, int len ) { // returns bytes sent, or -1 if error + int rc = -1; + if( fd >= 0 ) for( ;; ) { + rc = swrapSend(fd, (const char *)buf, len); +#if is(win32) + if( rc == -1 && WSAGetLastError() == WSAEINTR ) continue; + else break; +#else + if( rc == -1 && errno == EINTR ) continue; + else break; +#endif + } +#if UDP_DEBUG + if( rc > 0 ) { + char host[128], serv[128]; + int rc2 = swrapAddressInfo(&sa, host, 128, serv, 128 ); + if( rc2 != 0 ) PANIC("swrapAddressInfo error"); + printf("udp_send: %d bytes to %s:%s : %.*s\n", rc, host, serv, rc, buf ); + hexdump(buf, rc); + } +#endif + return rc; +} + +int udp_close( int fd ) { // @todo: expose me? needed? +#if is(win32) + // closesocket(fd); +#else + // close(fd); +#endif + fd = -1; // noop + return 0; +} + +#if 0 +// use socket to send data to another address +int udp_sendto( int fd, const char *ip, const char *port, const void *buf, int len ) { // return number of bytes sent +#if 0 + int rc = swrapSendTo(fd, struct swrap_addr*, (const char*)buf, len); + if( rc == -1 ) return -1; //PANIC("udp_send: swrapSend error"); + return rc; +#else + struct sockaddr_in addr = {0}; + addr.sin_family = AF_INET; + // use inet_addr. tcc(win32) wont work otherwise. + addr.sin_addr.s_addr = inet_addr(ip); // inet_pton(AF_INET, ip, &addr.sin_addr); + addr.sin_port = htons(atoi(port)); + + int n = sendto(fd, buf, len, 0, (struct sockaddr *)&addr, sizeof(addr)); + return n < 0 ? -1 : n; +#endif +} +#endif + +int udp_peek( int fd ) { // <0 error, 0 timeout, >0 data + int rc = swrapSelect(fd, 0.00001); + if( rc < 0 ) return -1; // PANIC("udp_peek: swrapSelect error"); + if( rc == 0 ) return 0; // timeout + return 1; //> 0: new data is available +} + +int udp_recv( int fd, void *buf, int len ) { // <0 error, 0 orderly shutdown, >0 received bytes + struct swrap_addr sa = {0}; + int rc = swrapReceiveFrom(fd, &sa, buf, len); + if( rc < 0 ) return -1; // PANIC("udp_recv: swrapReceiveFrom error"); + if( rc == 0 ) return 0; // orderly shutdown + +#if UDP_DEBUG + char host[128], serv[128]; + int rc2 = swrapAddressInfo(&sa, host, 128, serv, 128 ); + if( rc2 != 0 ) PANIC("swrapAddressInfo error"); + printf("udp_recv: %d bytes from %s:%s : %.*s\n", rc, host, serv, rc, buf ); + hexdump(buf, rc); +#endif + + return rc; +} + +// ----------------------------------------------------------------------------- + +#define TCP_DEBUG 1 + +#if TCP_DEBUG +static set(int) tcp_set; +#endif + +void tcp_init(void) { + do_once { + udp_init(); +#if TCP_DEBUG + set_init(tcp_set, less_int, hash_int); +#endif + } +} +int tcp_open(const char *address, const char *port) { + do_once tcp_init(); + int fd = swrapSocket(SWRAP_TCP, SWRAP_CONNECT, 0/*|SWRAP_NODELAY*/, address, port); + return fd; +} +int tcp_bind(const char *interface_, const char *port, int backlog) { + do_once tcp_init(); + int fd = swrapSocket(SWRAP_TCP, SWRAP_BIND, 0/*|SWRAP_NODELAY*//*|SWRAP_NOBLOCK*/, interface_, port); + if( fd >= 0 ) swrapListen(fd, backlog); + return fd; +} +int tcp_peek(int fd, int(*callback)(int)) { + struct swrap_addr sa; + int fd2 = swrapAccept(fd, &sa); + if( fd2 >= 0 ) return callback(fd2); + return -1; +} +int tcp_send(int fd, const void *buf, int len) { + int rc = swrapSend(fd, (const char *)buf, len); +#if TCP_DEBUG + if( set_find(tcp_set, fd) ) { + printf("send -> %11d (status: %d) %s:%s\n", len, rc, tcp_host(fd), tcp_port(fd)); + if( rc > 0 ) hexdump(buf, rc); + } +#endif + return rc; +} +int tcp_recv(int fd, void *buf, int len) { + int rc = swrapReceive(fd, (char*)buf, len); +#if TCP_DEBUG + if( rc != 0 && set_find(tcp_set, fd) ) { + printf("recv <- %11d (status: %d) %s:%s\n", len, rc, tcp_host(fd), tcp_port(fd)); + if( rc > 0 ) hexdump(buf, rc); + } +#endif + return rc; +} +char* tcp_host(int fd) { + char buf[1024]; + struct swrap_addr sa; + swrapAddress(fd, &sa); + swrapAddressInfo(&sa, buf, 512, buf+512, 512); + return va("%s", buf); +} +char* tcp_port(int fd) { + char buf[1024]; + struct swrap_addr sa; + swrapAddress(fd, &sa); + swrapAddressInfo(&sa, buf, 512, buf+512, 512); + return va("%s", buf+512); +} +int tcp_close(int fd) { + swrapClose(fd); + return 0; +} +int tcp_debug(int fd) { +#if TCP_DEBUG + if( set_find(tcp_set, fd) ) { + set_erase(tcp_set, fd); + return 0; + } else { + set_insert(tcp_set, fd); + return 1; + } +#else + return 0; +#endif +} + +// ----------------------------------------------------------------------------- + +static void network_init() { + do_once { + udp_init(); + tcp_init(); + } +} #line 0 #line 1 "v4k_track.c" -static __thread int track__sock = -1; - -//~ Lifecycle methods -int track_init(char const *host, char const *port) { - if (track__sock > -1) { - swrapClose(track__sock); - track__sock = -1; - } - - track__sock = swrapSocket(SWRAP_UDP, SWRAP_CONNECT, SWRAP_DEFAULT, host, port); - - if (track__sock == -1) { - return -TRACK_ERROR_SOCKET_FAIL; - } - - return 0; -} -int track_destroy(void) { - if (track__sock > -1) swrapClose(track__sock); - track__sock = -1; - return 0; -} - -//~ Buffer utilities -static __thread char track__buffer[TRACK_SEND_BUFSIZE+1]; -static __thread int track__buffer_len = 0; -static __thread int track__errno = 0; - -static void track__buffer_flush(void) { - track__buffer_len = 0; -} - -static int track__buffer_appendc(char *buf, int *len, char const *str) { - int size = (int)strlen(str); - if (*len+size > TRACK_SEND_BUFSIZE) - return -TRACK_ERROR_BUFFER_FULL; - memcpy(buf+*len, str, size); - *len += size; - return 0; -} - -#define TRACK__APPEND_SAFE_EX(buf, len, xx)\ - track__errno = track__buffer_appendc(buf, len, xx);\ - if (track__errno) return track__errno; - - -#define TRACK__APPEND_SAFE(xx)\ - TRACK__APPEND_SAFE_EX(track__buffer, &track__buffer_len, xx); - -//~ Event tracking -int track_event(char const *event_id, char const *user_id, char const *json_payload) { - if (track__sock == -1) - return -TRACK_ERROR_SOCKET_INVALID; - if (!event_id || !user_id || !json_payload) - return -TRACK_ERROR_INPUT_INVALID; - track__buffer_flush(); - - TRACK__APPEND_SAFE("{\"userId\":\""); - TRACK__APPEND_SAFE(user_id); - TRACK__APPEND_SAFE("\",\"event\":\""); - TRACK__APPEND_SAFE(event_id); - TRACK__APPEND_SAFE("\",\"properties\":"); - TRACK__APPEND_SAFE(json_payload); - TRACK__APPEND_SAFE("}"); - - if (!swrapSend(track__sock, track__buffer, track__buffer_len)) - return -TRACK_ERROR_SEND_FAIL; - return 0; -} - -int track_ident(char const *user_id, char const *traits) { - if (track__sock == -1) - return -TRACK_ERROR_SOCKET_INVALID; - if (!user_id || !traits) - return -TRACK_ERROR_INPUT_INVALID; - track__buffer_flush(); - - TRACK__APPEND_SAFE("{\"userId\":\""); - TRACK__APPEND_SAFE(user_id); - TRACK__APPEND_SAFE("\",\"traits\":"); - TRACK__APPEND_SAFE(traits); - TRACK__APPEND_SAFE("}"); - - if (!swrapSend(track__sock, track__buffer, track__buffer_len)) - return -TRACK_ERROR_SEND_FAIL; - return 0; -} - -int track_group(char const *user_id, char const *group_id, char const *traits) { - if (track__sock == -1) - return -TRACK_ERROR_SOCKET_INVALID; - if (!user_id || !group_id || !traits) - return -TRACK_ERROR_INPUT_INVALID; - track__buffer_flush(); - - TRACK__APPEND_SAFE("{\"userId\":\""); - TRACK__APPEND_SAFE(user_id); - TRACK__APPEND_SAFE("\",\"groupId\":\""); - TRACK__APPEND_SAFE(group_id); - TRACK__APPEND_SAFE("\",\"traits\":"); - TRACK__APPEND_SAFE(traits); - TRACK__APPEND_SAFE("}"); - - if (!swrapSend(track__sock, track__buffer, track__buffer_len)) - return -TRACK_ERROR_SEND_FAIL; - return 0; -} - -int track_event_props(char const *event_id, char const *user_id, const track_prop *props) { - static char buf[TRACK_SEND_BUFSIZE+1] = {0}; - int len = 0; - - - if (!props) - return track_event(event_id, user_id, ""); - - TRACK__APPEND_SAFE_EX(buf, &len, "{"); - while (props->key) { - TRACK__APPEND_SAFE_EX(buf, &len, "\""); - TRACK__APPEND_SAFE_EX(buf, &len, props->key); - TRACK__APPEND_SAFE_EX(buf, &len, "\":"); - TRACK__APPEND_SAFE_EX(buf, &len, props->val); - ++props; - if (props->key) { - TRACK__APPEND_SAFE_EX(buf, &len, ","); - } - } - TRACK__APPEND_SAFE_EX(buf, &len, "}"); - - return track_event(event_id, user_id, buf); -} - -#undef TRACK__APPEND_SAFE -#undef TRACK__APPEND_SAFE_EX +static __thread int track__sock = -1; + +//~ Lifecycle methods +int track_init(char const *host, char const *port) { + if (track__sock > -1) { + swrapClose(track__sock); + track__sock = -1; + } + + track__sock = swrapSocket(SWRAP_UDP, SWRAP_CONNECT, SWRAP_DEFAULT, host, port); + + if (track__sock == -1) { + return -TRACK_ERROR_SOCKET_FAIL; + } + + return 0; +} +int track_destroy(void) { + if (track__sock > -1) swrapClose(track__sock); + track__sock = -1; + return 0; +} + +//~ Buffer utilities +static __thread char track__buffer[TRACK_SEND_BUFSIZE+1]; +static __thread int track__buffer_len = 0; +static __thread int track__errno = 0; + +static void track__buffer_flush(void) { + track__buffer_len = 0; +} + +static int track__buffer_appendc(char *buf, int *len, char const *str) { + int size = (int)strlen(str); + if (*len+size > TRACK_SEND_BUFSIZE) + return -TRACK_ERROR_BUFFER_FULL; + memcpy(buf+*len, str, size); + *len += size; + return 0; +} + +#define TRACK__APPEND_SAFE_EX(buf, len, xx)\ + track__errno = track__buffer_appendc(buf, len, xx);\ + if (track__errno) return track__errno; + + +#define TRACK__APPEND_SAFE(xx)\ + TRACK__APPEND_SAFE_EX(track__buffer, &track__buffer_len, xx); + +//~ Event tracking +int track_event(char const *event_id, char const *user_id, char const *json_payload) { + if (track__sock == -1) + return -TRACK_ERROR_SOCKET_INVALID; + if (!event_id || !user_id || !json_payload) + return -TRACK_ERROR_INPUT_INVALID; + track__buffer_flush(); + + TRACK__APPEND_SAFE("{\"userId\":\""); + TRACK__APPEND_SAFE(user_id); + TRACK__APPEND_SAFE("\",\"event\":\""); + TRACK__APPEND_SAFE(event_id); + TRACK__APPEND_SAFE("\",\"properties\":"); + TRACK__APPEND_SAFE(json_payload); + TRACK__APPEND_SAFE("}"); + + if (!swrapSend(track__sock, track__buffer, track__buffer_len)) + return -TRACK_ERROR_SEND_FAIL; + return 0; +} + +int track_ident(char const *user_id, char const *traits) { + if (track__sock == -1) + return -TRACK_ERROR_SOCKET_INVALID; + if (!user_id || !traits) + return -TRACK_ERROR_INPUT_INVALID; + track__buffer_flush(); + + TRACK__APPEND_SAFE("{\"userId\":\""); + TRACK__APPEND_SAFE(user_id); + TRACK__APPEND_SAFE("\",\"traits\":"); + TRACK__APPEND_SAFE(traits); + TRACK__APPEND_SAFE("}"); + + if (!swrapSend(track__sock, track__buffer, track__buffer_len)) + return -TRACK_ERROR_SEND_FAIL; + return 0; +} + +int track_group(char const *user_id, char const *group_id, char const *traits) { + if (track__sock == -1) + return -TRACK_ERROR_SOCKET_INVALID; + if (!user_id || !group_id || !traits) + return -TRACK_ERROR_INPUT_INVALID; + track__buffer_flush(); + + TRACK__APPEND_SAFE("{\"userId\":\""); + TRACK__APPEND_SAFE(user_id); + TRACK__APPEND_SAFE("\",\"groupId\":\""); + TRACK__APPEND_SAFE(group_id); + TRACK__APPEND_SAFE("\",\"traits\":"); + TRACK__APPEND_SAFE(traits); + TRACK__APPEND_SAFE("}"); + + if (!swrapSend(track__sock, track__buffer, track__buffer_len)) + return -TRACK_ERROR_SEND_FAIL; + return 0; +} + +int track_event_props(char const *event_id, char const *user_id, const track_prop *props) { + static char buf[TRACK_SEND_BUFSIZE+1] = {0}; + int len = 0; + + + if (!props) + return track_event(event_id, user_id, ""); + + TRACK__APPEND_SAFE_EX(buf, &len, "{"); + while (props->key) { + TRACK__APPEND_SAFE_EX(buf, &len, "\""); + TRACK__APPEND_SAFE_EX(buf, &len, props->key); + TRACK__APPEND_SAFE_EX(buf, &len, "\":"); + TRACK__APPEND_SAFE_EX(buf, &len, props->val); + ++props; + if (props->key) { + TRACK__APPEND_SAFE_EX(buf, &len, ","); + } + } + TRACK__APPEND_SAFE_EX(buf, &len, "}"); + + return track_event(event_id, user_id, buf); +} + +#undef TRACK__APPEND_SAFE +#undef TRACK__APPEND_SAFE_EX #line 0 #line 1 "v4k_netsync.c" -typedef void* (*rpc_function)(); - -typedef struct rpc_call { - char *method; - rpc_function function; - uint64_t function_hash; -} rpc_call; - -#define RPC_SIGNATURE_i_iii UINT64_C(0x78409099752fa48a) -#define RPC_SIGNATURE_i_ii UINT64_C(0x258290edf43985a5) -#define RPC_SIGNATURE_i_s UINT64_C(0xf7b73162829ed667) -#define RPC_SIGNATURE_s_s UINT64_C(0x97deedd17d9afb12) -#define RPC_SIGNATURE_s_v UINT64_C(0x09c16a1242049b80) -#define RPC_SIGNATURE_v_v UINT64_C(0xc210c270b6f06552) -#define RPC_SIGNATURE_v_s UINT64_C(0xc1746990ab73ed24) - -static -rpc_call rpc_new_call(const char *signature, rpc_function function) { - if( signature && function ) { - array(char*)tokens = strsplit(signature, "(,)"); - if( array_count(tokens) >= 1 ) { - char *method = strrchr(tokens[0], ' ')+1; - char *rettype = va("%.*s", (int)(method - tokens[0] - 1), tokens[0]); - int num_args = array_count(tokens) - 1; - char* hash_sig = va("%s(%s)", rettype, num_args ? (array_pop_front(tokens), strjoin(tokens, ",")) : "void"); - uint64_t hash = hash_str(hash_sig); - method = va("%s%d", method, num_args ); -#if RPC_DEBUG - printf("%p %p %s `%s` %s(", function, (void*)hash, rettype, hash_sig, method); for(int i = 0, end = array_count(tokens); i < end; ++i) printf("%s%s", tokens[i], i == (end-1)? "":", "); puts(");"); -#endif - return (rpc_call) { STRDUP(method), function, hash }; // LEAK - } - } - return (rpc_call) {0}; -} - -static map(char*, rpc_call) rpc_calls = 0; - -static -void rpc_insert(const char *signature, void *function ) { - rpc_call call = rpc_new_call(signature, function); - if( call.method ) { - if( !rpc_calls ) map_init(rpc_calls, less_str, hash_str); - if( map_find(rpc_calls, call.method)) { - map_erase(rpc_calls, call.method); - } - map_insert(rpc_calls, call.method, call); - } -} - -static -char *rpc_full(unsigned id, const char* method, unsigned num_args, char *args[]) { -#if RPC_DEBUG - printf("id:%x method:%s args:", id, method ); - for( int i = 0; i < num_args; ++i ) printf("%s,", args[i]); puts(""); -#endif - - method = va("%s%d", method, num_args); - rpc_call *found = map_find(rpc_calls, (char*)method); - if( found ) { - switch(found->function_hash) { - case RPC_SIGNATURE_i_iii: return va("%d %d", id, (int)(intptr_t)found->function(atoi(args[0]), atoi(args[1]), atoi(args[2])) ); - case RPC_SIGNATURE_i_ii: return va("%d %d", id, (int)(intptr_t)found->function(atoi(args[0]), atoi(args[1])) ); - case RPC_SIGNATURE_i_s: return va("%d %d", id, (int)(intptr_t)found->function(args[0]) ); - case RPC_SIGNATURE_s_s: return va("%d %s", id, (char*)found->function(args[0]) ); - case RPC_SIGNATURE_s_v: return va("%d %s", id, (char*)found->function() ); - case RPC_SIGNATURE_v_v: return found->function(), va("%d", id); - case RPC_SIGNATURE_v_s: return found->function(args[0]), va("%d", id); - default: break; - } - } - return va("%d -1", id); -} - -static -array(char*) rpc_parse_args( const char *cmdline, bool quote_whitespaces ) { // parse cmdline arguments. must array_free() after use - // - supports quotes: "abc" "abc def" "abc \"def\"" "abc \"def\"""ghi" etc. - // - #comments removed - array(char*) args = 0; // LEAK - for( int i = 0; cmdline[i]; ) { - char buf[256] = {0}, *ptr = buf; - while(cmdline[i] && isspace(cmdline[i])) ++i; - bool quoted = cmdline[i] == '\"'; - if( quoted ) { - while(cmdline[++i]) { - char ch = cmdline[i]; - /**/ if (ch == '\\' && cmdline[i + 1] == '\"') *ptr++ = '\"', ++i; - else if (ch == '\"' && cmdline[i + 1] == '\"') ++i; - else if (ch == '\"' && (!cmdline[i + 1] || isspace(cmdline[i + 1]))) { - ++i; break; - } - else *ptr++ = ch; - } - } else { - while(cmdline[i] && !isspace(cmdline[i])) *ptr++ = cmdline[i++]; - } - if (buf[0] && buf[0] != '#') { // exclude empty args + comments - if( quote_whitespaces && quoted ) - array_push(args, va("\"%s\"",buf)); - else - array_push(args, va("%s",buf)); - } - } - return args; -} - -static -char* rpc(unsigned id, const char* cmdline) { - array(char*) args = rpc_parse_args(cmdline, false); - int num_args = array_count(args); - char *ret = num_args ? rpc_full(id, args[0], num_args - 1, &args[1]) : rpc_full(id, "", 0, NULL); - array_free(args); - return ret; -} - -static void enet_quit(void) { - do_once { - // enet_deinitialize(); - } -} -static void enet_init() { - do_once { - if( enet_initialize() != 0 ) { - PANIC("cannot initialize enet"); - } - atexit( enet_quit ); - } -} - -struct peer_node_t { - int64_t id; - struct peer_node_t *next; -}; - -static ENetHost *Server; -static map(ENetPeer *, int64_t) clients; -static map(int64_t, ENetPeer *) peers; -static int64_t next_client_id = 1; // assumes ID 0 is server -static struct peer_node_t *next_free_id = NULL; -enum { MSG_INIT, MSG_BUF, MSG_RPC, MSG_RPC_RESP }; - -bool server_bind(int max_clients, int port) { - map_init(clients, less_64, hash_64); - map_init(peers, less_64, hash_64); - assert(port == 0 || (port > 1024 && port < 65500)); - ENetAddress address = {0}; - address.host = ENET_HOST_ANY; - address.port = port; - Server = enet_host_create(&address, max_clients, 2 /*channels*/, 0 /*in bandwidth*/, 0 /*out bandwidth*/); - return Server != NULL; -} - -static -void server_drop_client(int64_t handle) { - map_erase(clients, *(ENetPeer **)map_find(peers, handle)); - map_erase(peers, *(int64_t *)handle); -} - -static -void server_drop_client_peer(ENetPeer *peer) { - struct peer_node_t *node = C_CAST(struct peer_node_t *, CALLOC(sizeof(struct peer_node_t), 1)); - node->id = *(int64_t *)map_find(clients, peer); - if (!next_free_id) { - next_free_id = node; - } else { - node->next = next_free_id; - next_free_id = node; - } - map_erase(peers, *(int64_t *)map_find(clients, peer)); - map_erase(clients, peer); -} - -void server_broadcast_bin_flags(const void *msg, int len, uint64_t flags) { - ENetPacket *packet = enet_packet_create(msg, len, flags&NETWORK_UNRELIABLE ? ENET_PACKET_FLAG_UNRELIABLE_FRAGMENT : ENET_PACKET_FLAG_RELIABLE | flags&(NETWORK_UNRELIABLE|NETWORK_UNORDERED) ? ENET_PACKET_FLAG_UNSEQUENCED : 0); - enet_host_broadcast(Server, 0, packet); -} - -void server_broadcast_bin(const void *msg, int len) { - ENetPacket *packet = enet_packet_create(msg, len, ENET_PACKET_FLAG_RELIABLE); - enet_host_broadcast(Server, 0, packet); - //enet_host_flush(Server); // flush if needed -} -void server_broadcast_flags(const char *msg, uint64_t flags) { - server_broadcast_bin_flags(msg, strlen(msg)+1, flags); -} -void server_broadcast(const char *msg) { - server_broadcast_bin(msg, strlen(msg)+1); -} -void server_terminate() { - enet_host_destroy(Server); - Server = 0; -} - -volatile int client_join_connected = 0; -static int client_join_threaded(void *userdata) { - ENetHost *host = (ENetHost *)userdata; - - ENetPacket *packet = enet_packet_create("", 1, ENET_PACKET_FLAG_RELIABLE); - enet_host_broadcast(Server, 0, packet); - - /* Wait up to 5 seconds for the connection attempt to succeed. */ - ENetEvent event; - client_join_connected = 0; - client_join_connected = enet_host_service(host, &event, 5000) > 0 && event.type == ENET_EVENT_TYPE_CONNECT; - return 0; -} - -int64_t client_join(const char *ip, int port) { - assert(port > 1024 && port < 65500); - ENetAddress address = {0}; - enet_address_set_host(&address, !strcmp(ip, "localhost") ? "127.0.0.1" : ip); - address.port = port; - - ENetHost *host = enet_host_create(NULL, 1 /*outgoing connections*/, 2 /*channels*/, 0 /*in bandwidth*/, 0 /*out bandwidth*/); - if(!host) return -1; - ENetPeer *peer = enet_host_connect(host, &address, 2, 0); - if(!peer) return -1; - Server = host; - - ENetEvent event; - bool client_join_connected = enet_host_service(host, &event, 5000) > 0 && event.type == ENET_EVENT_TYPE_CONNECT; - if(!client_join_connected) { enet_peer_reset(peer); return -1; } - - // wait for the response - bool msg_received = enet_host_service(host, &event, 5000) > 0 && event.type == ENET_EVENT_TYPE_RECEIVE; - if (!msg_received) { enet_peer_reset(peer); return -1; } - - char *ptr = (char *)event.packet->data; - int64_t cid = -1; - - // decapsulate incoming packet. - uint32_t mid = *(uint32_t*)(ptr + 0); - ptr += 4; - - switch (mid) { - case MSG_INIT: - cid = *(int64_t*)ptr; - break; - default: - enet_peer_reset(peer); - enet_packet_destroy( event.packet ); - return -1; - } - - /* Clean up the packet now that we're done using it. */ - enet_packet_destroy( event.packet ); - - return cid; -} -void server_drop(int64_t handle) { - enet_peer_disconnect_now(*(ENetPeer **)map_find(peers, handle), 0); - server_drop_client(handle); -} - -void server_send_bin(int64_t handle, const void *ptr, int len) { - ENetPacket *packet = enet_packet_create(ptr, len, ENET_PACKET_FLAG_RELIABLE); - enet_peer_send(*(ENetPeer **)map_find(peers, handle), 0, packet); -} - -void server_send(int64_t handle, const char *msg) { - server_send_bin(handle, msg, strlen(msg)+1); -} - -// --- - -typedef struct netbuffer_t { - int64_t owner; - void *ptr; - unsigned sz; - uint64_t flags; -} netbuffer_t; - -static array(char*) events; // @todo: make event 128 bytes max? -static array(int64_t) values; // @todo: map instead? -static map( int64_t, array(netbuffer_t) ) buffers; // map> -static double msg_send_cooldown = 0.0; -static double network_dt = 0.0; -static double last_netsync = 0.0; - -void network_create(unsigned max_clients, const char *ip, const char *port_, unsigned flags) { - if (buffers) map_clear(buffers); - do_once { - array_resize(values, 128); - map_init(buffers, less_64, hash_64); - - enet_init(); - } - - ip = ip ? ip : "0.0.0.0"; - int port = atoi(port_ ? port_ : "1234"); - - // network_put(NETWORK_IP, 0x7F000001); // 127.0.0.1 - network_put(NETWORK_PORT, port); - network_put(NETWORK_LIVE, -1); - network_put(NETWORK_COUNT, 0); - network_put(NETWORK_CAPACITY, max_clients); - network_put(NETWORK_BUF_CLEAR_ON_JOIN, 1); - - if( !(flags&NETWORK_CONNECT) || flags&NETWORK_BIND ) { - // server, else client - PRINTF("Trying to bind server, else we connect as a client...\n"); - network_put(NETWORK_RANK, 0); - if( server_bind(max_clients, port) ) { - network_put(NETWORK_LIVE, 1); - PRINTF("Server bound\n"); - } else { - network_put(NETWORK_RANK, -1); /* unassigned until we connect successfully */ - int64_t socket = client_join(ip, port); - if( socket >= 0 ) { - PRINTF("Client connected, id %d\n", (int)socket); - network_put(NETWORK_LIVE, 1); - network_put(NETWORK_RANK, socket); - } else { - PRINTF("!Client conn failed\n"); - network_put(NETWORK_LIVE, 0); - - if (!(flags&NETWORK_NOFAIL)) - PANIC("cannot neither connect to %s:%d, nor create a server", ip, port); - } - } - } else { - // client only - PRINTF("Connecting to server...\n"); - network_put(NETWORK_RANK, -1); /* unassigned until we connect successfully */ - int64_t socket = client_join(ip, port); - if( socket > 0 ) { - PRINTF("Client connected, id %d\n", (int)socket); - network_put(NETWORK_LIVE, 1); - network_put(NETWORK_RANK, socket); - } else { - PRINTF("!Client conn failed\n"); - network_put(NETWORK_LIVE, 0); - if (!(flags&NETWORK_NOFAIL)) - PANIC("cannot connect to server %s:%d", ip, port); - } - } - - PRINTF("Network rank:%u ip:%s port:%d\n", (unsigned)network_get(NETWORK_RANK), ip, (int)network_get(NETWORK_PORT)); -} - -int64_t network_put(uint64_t key, int64_t value) { - int64_t *found = key < array_count(values) ? &values[key] : NULL; - if(found) *found = value; - return value; -} -int64_t network_get(uint64_t key) { - int64_t *found = key < array_count(values) ? &values[key] : NULL; - return found ? *found : 0; -} - -void* network_buffer(void *ptr, unsigned sz, uint64_t flags, int64_t rank) { - assert(flags); - array(netbuffer_t) *found = map_find_or_add(buffers, rank, NULL); - - netbuffer_t nb; - nb.owner = rank; - nb.ptr = ptr; - nb.sz = sz; - nb.flags = flags; - array_push(*found, nb); - - return ptr; -} - -static -int enet_event_to_netsync(int ev) { - switch (ev) { - case ENET_EVENT_TYPE_CONNECT: return NETWORK_EVENT_CONNECT; - case ENET_EVENT_TYPE_DISCONNECT: return NETWORK_EVENT_DISCONNECT; - case ENET_EVENT_TYPE_RECEIVE: return NETWORK_EVENT_RECEIVE; - case ENET_EVENT_TYPE_DISCONNECT_TIMEOUT: return NETWORK_EVENT_DISCONNECT_TIMEOUT; - } - - /* passthrough for our own events */ - return ev; -} - -char** network_sync(unsigned timeout_ms) { - int64_t whoami = network_get(NETWORK_RANK); - bool is_server = whoami == 0; - bool is_client = !is_server; - if(timeout_ms < 2) timeout_ms = 2; - - network_dt = time_ss() - last_netsync; - last_netsync = time_ss(); - - // Split buffers into clients @todo - // clients need to do this before network polling; servers should do this after polling. - if (msg_send_cooldown <= 0.0) { - map_foreach(buffers, int64_t, rank, array(netbuffer_t), list) { - for(int i = 0, end = array_count(list); i < end; ++i) { - netbuffer_t *nb = &list[i]; - if (!is_server && !(nb->flags & NETWORK_SEND)) - continue; - static array(char) encapsulate; - array_resize(encapsulate, nb->sz + 28); - uint32_t *mid = (uint32_t*)&encapsulate[0]; *mid = MSG_BUF; - uint64_t *st = (uint64_t*)&encapsulate[4]; *st = nb->flags; - uint32_t *idx = (uint32_t*)&encapsulate[12]; *idx = i; - uint32_t *len = (uint32_t*)&encapsulate[16]; *len = nb->sz; - uint64_t *who = (uint64_t*)&encapsulate[20]; *who = nb->owner; - // PRINTF("sending %llx %u %lld %u\n", *st, *idx, *who, *len); - memcpy(&encapsulate[28], nb->ptr, nb->sz); - server_broadcast_bin(&encapsulate[0], nb->sz + 28); - } - } - msg_send_cooldown = (double)network_get(NETWORK_SEND_MS)/1000.0; - } else { - msg_send_cooldown -= network_dt; - } - - if (is_server) { - return server_poll(timeout_ms); - } else { - return client_poll(timeout_ms); - } -} - - -char** server_poll(unsigned timeout_ms) { - array_clear(events); - if(timeout_ms < 2) timeout_ms = 2; - - // network poll - for( ENetEvent event; Server && enet_host_service(Server, &event, timeout_ms) > 0; ) { - char *msg = 0; - char ip[128]; enet_peer_get_ip(event.peer, ip, 128); - - switch (event.type) { - default: // case ENET_EVENT_TYPE_NONE: - break; - - case ENET_EVENT_TYPE_CONNECT:; - /* ensure we have free slot for client */ - if (map_count(clients) >= network_get(NETWORK_CAPACITY)-1) { - msg = va("%d Server is at maximum capacity, disconnecting the peer (::%s:%u)...", 1, ip, event.peer->address.port); - enet_peer_disconnect_now(event.peer, 1); - break; - } - - int64_t client_id = -1; - - if (next_free_id) { - struct peer_node_t *node = next_free_id; - client_id = next_free_id->id; - next_free_id = next_free_id->next; - FREE(node); - } - else client_id = next_client_id++; - - // if (network_get(NETWORK_BUF_CLEAR_ON_JOIN)) { - // array(netbuffer_t) *list = map_find(buffers, client_id); - - // if (list) - // for(int i = 0, end = array_count(list); i < end; ++i) { - // netbuffer_t *nb = &list[i]; - // memset(nb->ptr, 0, nb->sz); - // } - // } - - map_find_or_add(clients, event.peer, client_id); - map_find_or_add(peers, client_id, event.peer); - network_put(NETWORK_COUNT, network_get(NETWORK_COUNT)+1); - - - // send server slot - char init_msg[12]; - *(uint32_t*)&init_msg[0] = MSG_INIT; - *(int64_t*)&init_msg[4] = client_id; - server_send_bin(client_id, init_msg, 12); - PRINTF("Client rank %u for peer ::%s:%u\n", (unsigned)client_id, ip, event.peer->address.port); - msg = va( "%d new client rank:%u from ::%s:%u", 0, (unsigned)client_id, ip, event.peer->address.port ); - event.peer->data = (void*)client_id; - break; - - case ENET_EVENT_TYPE_RECEIVE: { - char *dbg = (char *)event.peer->data; - char *ptr = (char *)event.packet->data; - unsigned sz = (unsigned)event.packet->dataLength; - unsigned id = (unsigned)event.channelID; - - // debug - // puts(dbg); - // hexdump(ptr, sz); - - // decapsulate incoming packet. - uint32_t mid = *(uint32_t*)(ptr + 0); - ptr += 4; - - switch (mid) { - case MSG_BUF: { - uint64_t *flags = (uint64_t*)(ptr + 0); - uint32_t *idx = (uint32_t*)(ptr + 8); - uint32_t *len = (uint32_t*)(ptr + 12); - uint64_t *who = (uint64_t*)(ptr + 16); - ptr += 24; - - // validate if peer owns the buffer - int64_t *cid = map_find(clients, event.peer); - uint8_t client_valid = cid ? *cid == *who : 0; - - // apply incoming packet. - if( client_valid ) { - array(netbuffer_t) *list = map_find(buffers, *who); - assert( list ); - assert( *idx < array_count(*list) ); - netbuffer_t *nb = &(*list)[*idx]; - assert( *len == nb->sz ); - memcpy(nb->ptr, ptr, *len); - } - } break; - case MSG_RPC: { - event.type = NETWORK_EVENT_RPC; - unsigned id = *(uint32_t*)ptr; ptr += 4; - char *cmdline = ptr; - char *resp = rpc(id, cmdline); - char *resp_msg = va("%*.s%s", 4, "", resp); - *(uint32_t*)&resp_msg[0] = MSG_RPC_RESP; - ENetPacket *packet = enet_packet_create(resp_msg, strlen(resp) + 5, ENET_PACKET_FLAG_RELIABLE); - enet_peer_send(event.peer, 0, packet); - msg = va("%d req:%s res:%s", 0, cmdline, resp); - } break; - case MSG_RPC_RESP: { - event.type = NETWORK_EVENT_RPC_RESP; - msg = va("%d %s", 0, va("%s", ptr)); - } break; - default: - msg = va("%d unk msg len:%u from rank:%u ::%s:%u", -1, sz, (unsigned)(uintptr_t)event.peer->data, ip, event.peer->address.port); /* @TODO: hexdump? */ - break; - } - /* Clean up the packet now that we're done using it. */ - enet_packet_destroy( event.packet ); - } break; - - case ENET_EVENT_TYPE_DISCONNECT: - msg = va( "%d disconnect rank:%u", 0, (unsigned)(uintptr_t)event.peer->data); - /* Reset the peer's client information. */ - FREE(event.peer->data); - event.peer->data = NULL; - server_drop_client_peer(event.peer); - network_put(NETWORK_COUNT, network_get(NETWORK_COUNT)-1); - break; - - case ENET_EVENT_TYPE_DISCONNECT_TIMEOUT: - msg = va( "%d timeout rank:%u", 0, (unsigned)(uintptr_t)event.peer->data); - FREE(event.peer->data); - event.peer->data = NULL; - server_drop_client_peer(event.peer); - network_put(NETWORK_COUNT, network_get(NETWORK_COUNT)-1); - break; - } - - if(msg) array_push(events, va("%d %s", enet_event_to_netsync(event.type), msg)); - } - - array_push(events, NULL); - return events; -} - -char** client_poll(unsigned timeout_ms) { - array_clear(events); - int64_t whoami = network_get(NETWORK_RANK); - if(timeout_ms < 2) timeout_ms = 2; - - // network poll - for( ENetEvent event; Server && enet_host_service(Server, &event, timeout_ms) > 0; ) { - char *msg = 0; - char ip[128]; enet_peer_get_ip(event.peer, ip, 128); - - switch (event.type) { - default: // case ENET_EVENT_TYPE_NONE: - break; - - case ENET_EVENT_TYPE_CONNECT: - break; - - case ENET_EVENT_TYPE_RECEIVE: { - char *dbg = (char *)event.peer->data; - char *ptr = (char *)event.packet->data; - unsigned sz = (unsigned)event.packet->dataLength; - unsigned id = (unsigned)event.channelID; - - // decapsulate incoming packet. - uint32_t mid = *(uint32_t*)(ptr + 0); - ptr += 4; - - switch (mid) { - case MSG_INIT: - /* handled by client_join */ - break; - case MSG_BUF: { - uint64_t *flags = (uint64_t*)(ptr + 0); - uint32_t *idx = (uint32_t*)(ptr + 8); - uint32_t *len = (uint32_t*)(ptr + 12); - uint64_t *who = (uint64_t*)(ptr + 16); - ptr += 24; - - // apply incoming packet. - if( *who != whoami ) { - array(netbuffer_t) *list = map_find(buffers, *who); - assert( list ); - assert( *idx < array_count(*list) ); - netbuffer_t *nb = &(*list)[*idx]; - assert( *len == nb->sz ); - memcpy(nb->ptr, ptr, *len); - } - } break; - case MSG_RPC: { - event.type = NETWORK_EVENT_RPC; - unsigned id = *(uint32_t*)ptr; ptr += 4; - char *cmdline = ptr; - char *resp = rpc(id, cmdline); - char *resp_msg = va("%*.s%s", 4, "", resp); - *(uint32_t*)&resp_msg[0] = MSG_RPC_RESP; - ENetPacket *packet = enet_packet_create(resp_msg, strlen(resp) + 5, ENET_PACKET_FLAG_RELIABLE); - enet_peer_send(event.peer, 0, packet); - msg = va("%d req:%s res:%s", 0, cmdline, resp); - } break; - case MSG_RPC_RESP: { - event.type = NETWORK_EVENT_RPC_RESP; - msg = va("%d %s", 0, ptr); - } break; - default: - msg = va("%d unk msg len:%u from server", -1, sz); /* @TODO: hexdump? */ - break; - } - /* Clean up the packet now that we're done using it. */ - enet_packet_destroy( event.packet ); - } break; - - case ENET_EVENT_TYPE_DISCONNECT: - msg = va( "%d disconnect", 0 ); - /* Reset the peer's client information. */ - FREE(event.peer->data); - event.peer->data = NULL; - network_put(NETWORK_RANK, -1); - network_put(NETWORK_LIVE, 0); - break; - - case ENET_EVENT_TYPE_DISCONNECT_TIMEOUT: - msg = va( "%d timeout", 0); - FREE(event.peer->data); - event.peer->data = NULL; - network_put(NETWORK_RANK, -1); - network_put(NETWORK_LIVE, 0); - break; - } - - if(msg) array_push(events, va("%d %s", enet_event_to_netsync(event.type), msg)); - } - - array_push(events, NULL); - return events; -} - -int network_event(const char *msg, int *errcode, char **errstr) { - int evid = -1; - int err = 0; - char errbuf[128] = {0}; - sscanf(msg, "%d %d %127[^\r\n]", &evid, &err, errbuf); - if (errcode) *errcode = err; - if (errstr) *errstr = va("%s", errbuf); - return evid; -} - -void network_rpc(const char *signature, void *function) { - rpc_insert(signature, function); -} - -void network_rpc_send_to(int64_t rank, unsigned id, const char *cmdline) { - assert(network_get(NETWORK_RANK) == 0); /* must be a host */ - char *msg = va("%*.s%s", 8, "", cmdline); - unsigned sz = strlen(cmdline) + 9; - *(uint32_t*)&msg[0] = MSG_RPC; - *(uint32_t*)&msg[4] = id; - server_send_bin(rank, msg, sz); -} - -void network_rpc_send(unsigned id, const char *cmdline) { - char *msg = va("%*.s%s", 8, "", cmdline); - unsigned sz = strlen(cmdline) + 9; - *(uint32_t*)&msg[0] = MSG_RPC; - *(uint32_t*)&msg[4] = id; - server_broadcast_bin(msg, sz); -} +typedef void* (*rpc_function)(); + +typedef struct rpc_call { + char *method; + rpc_function function; + uint64_t function_hash; +} rpc_call; + +#define RPC_SIGNATURE_i_iii UINT64_C(0x78409099752fa48a) +#define RPC_SIGNATURE_i_ii UINT64_C(0x258290edf43985a5) +#define RPC_SIGNATURE_i_s UINT64_C(0xf7b73162829ed667) +#define RPC_SIGNATURE_s_s UINT64_C(0x97deedd17d9afb12) +#define RPC_SIGNATURE_s_v UINT64_C(0x09c16a1242049b80) +#define RPC_SIGNATURE_v_v UINT64_C(0xc210c270b6f06552) +#define RPC_SIGNATURE_v_s UINT64_C(0xc1746990ab73ed24) + +static +rpc_call rpc_new_call(const char *signature, rpc_function function) { + if( signature && function ) { + array(char*)tokens = strsplit(signature, "(,)"); + if( array_count(tokens) >= 1 ) { + char *method = strrchr(tokens[0], ' ')+1; + char *rettype = va("%.*s", (int)(method - tokens[0] - 1), tokens[0]); + int num_args = array_count(tokens) - 1; + char* hash_sig = va("%s(%s)", rettype, num_args ? (array_pop_front(tokens), strjoin(tokens, ",")) : "void"); + uint64_t hash = hash_str(hash_sig); + method = va("%s%d", method, num_args ); +#if RPC_DEBUG + printf("%p %p %s `%s` %s(", function, (void*)hash, rettype, hash_sig, method); for(int i = 0, end = array_count(tokens); i < end; ++i) printf("%s%s", tokens[i], i == (end-1)? "":", "); puts(");"); +#endif + return (rpc_call) { STRDUP(method), function, hash }; // LEAK + } + } + return (rpc_call) {0}; +} + +static map(char*, rpc_call) rpc_calls = 0; + +static +void rpc_insert(const char *signature, void *function ) { + rpc_call call = rpc_new_call(signature, function); + if( call.method ) { + if( !rpc_calls ) map_init(rpc_calls, less_str, hash_str); + if( map_find(rpc_calls, call.method)) { + map_erase(rpc_calls, call.method); + } + map_insert(rpc_calls, call.method, call); + } +} + +static +char *rpc_full(unsigned id, const char* method, unsigned num_args, char *args[]) { +#if RPC_DEBUG + printf("id:%x method:%s args:", id, method ); + for( int i = 0; i < num_args; ++i ) printf("%s,", args[i]); puts(""); +#endif + + method = va("%s%d", method, num_args); + rpc_call *found = map_find(rpc_calls, (char*)method); + if( found ) { + switch(found->function_hash) { + case RPC_SIGNATURE_i_iii: return va("%d %d", id, (int)(intptr_t)found->function(atoi(args[0]), atoi(args[1]), atoi(args[2])) ); + case RPC_SIGNATURE_i_ii: return va("%d %d", id, (int)(intptr_t)found->function(atoi(args[0]), atoi(args[1])) ); + case RPC_SIGNATURE_i_s: return va("%d %d", id, (int)(intptr_t)found->function(args[0]) ); + case RPC_SIGNATURE_s_s: return va("%d %s", id, (char*)found->function(args[0]) ); + case RPC_SIGNATURE_s_v: return va("%d %s", id, (char*)found->function() ); + case RPC_SIGNATURE_v_v: return found->function(), va("%d", id); + case RPC_SIGNATURE_v_s: return found->function(args[0]), va("%d", id); + default: break; + } + } + return va("%d -1", id); +} + +static +array(char*) rpc_parse_args( const char *cmdline, bool quote_whitespaces ) { // parse cmdline arguments. must array_free() after use + // - supports quotes: "abc" "abc def" "abc \"def\"" "abc \"def\"""ghi" etc. + // - #comments removed + array(char*) args = 0; // LEAK + for( int i = 0; cmdline[i]; ) { + char buf[256] = {0}, *ptr = buf; + while(cmdline[i] && isspace(cmdline[i])) ++i; + bool quoted = cmdline[i] == '\"'; + if( quoted ) { + while(cmdline[++i]) { + char ch = cmdline[i]; + /**/ if (ch == '\\' && cmdline[i + 1] == '\"') *ptr++ = '\"', ++i; + else if (ch == '\"' && cmdline[i + 1] == '\"') ++i; + else if (ch == '\"' && (!cmdline[i + 1] || isspace(cmdline[i + 1]))) { + ++i; break; + } + else *ptr++ = ch; + } + } else { + while(cmdline[i] && !isspace(cmdline[i])) *ptr++ = cmdline[i++]; + } + if (buf[0] && buf[0] != '#') { // exclude empty args + comments + if( quote_whitespaces && quoted ) + array_push(args, va("\"%s\"",buf)); + else + array_push(args, va("%s",buf)); + } + } + return args; +} + +static +char* rpc(unsigned id, const char* cmdline) { + array(char*) args = rpc_parse_args(cmdline, false); + int num_args = array_count(args); + char *ret = num_args ? rpc_full(id, args[0], num_args - 1, &args[1]) : rpc_full(id, "", 0, NULL); + array_free(args); + return ret; +} + +static void enet_quit(void) { + do_once { + // enet_deinitialize(); + } +} +static void enet_init() { + do_once { + if( enet_initialize() != 0 ) { + PANIC("cannot initialize enet"); + } + atexit( enet_quit ); + } +} + +struct peer_node_t { + int64_t id; + struct peer_node_t *next; +}; + +static ENetHost *Server; +static map(ENetPeer *, int64_t) clients; +static map(int64_t, ENetPeer *) peers; +static int64_t next_client_id = 1; // assumes ID 0 is server +static struct peer_node_t *next_free_id = NULL; +enum { MSG_INIT, MSG_BUF, MSG_RPC, MSG_RPC_RESP }; + +bool server_bind(int max_clients, int port) { + map_init(clients, less_64, hash_64); + map_init(peers, less_64, hash_64); + assert(port == 0 || (port > 1024 && port < 65500)); + ENetAddress address = {0}; + address.host = ENET_HOST_ANY; + address.port = port; + Server = enet_host_create(&address, max_clients, 2 /*channels*/, 0 /*in bandwidth*/, 0 /*out bandwidth*/); + return Server != NULL; +} + +static +void server_drop_client(int64_t handle) { + map_erase(clients, *(ENetPeer **)map_find(peers, handle)); + map_erase(peers, *(int64_t *)handle); +} + +static +void server_drop_client_peer(ENetPeer *peer) { + struct peer_node_t *node = C_CAST(struct peer_node_t *, CALLOC(sizeof(struct peer_node_t), 1)); + node->id = *(int64_t *)map_find(clients, peer); + if (!next_free_id) { + next_free_id = node; + } else { + node->next = next_free_id; + next_free_id = node; + } + map_erase(peers, *(int64_t *)map_find(clients, peer)); + map_erase(clients, peer); +} + +void server_broadcast_bin_flags(const void *msg, int len, uint64_t flags) { + ENetPacket *packet = enet_packet_create(msg, len, flags&NETWORK_UNRELIABLE ? ENET_PACKET_FLAG_UNRELIABLE_FRAGMENT : ENET_PACKET_FLAG_RELIABLE | flags&(NETWORK_UNRELIABLE|NETWORK_UNORDERED) ? ENET_PACKET_FLAG_UNSEQUENCED : 0); + enet_host_broadcast(Server, 0, packet); +} + +void server_broadcast_bin(const void *msg, int len) { + ENetPacket *packet = enet_packet_create(msg, len, ENET_PACKET_FLAG_RELIABLE); + enet_host_broadcast(Server, 0, packet); + //enet_host_flush(Server); // flush if needed +} +void server_broadcast_flags(const char *msg, uint64_t flags) { + server_broadcast_bin_flags(msg, strlen(msg)+1, flags); +} +void server_broadcast(const char *msg) { + server_broadcast_bin(msg, strlen(msg)+1); +} +void server_terminate() { + enet_host_destroy(Server); + Server = 0; +} + +volatile int client_join_connected = 0; +static int client_join_threaded(void *userdata) { + ENetHost *host = (ENetHost *)userdata; + + ENetPacket *packet = enet_packet_create("", 1, ENET_PACKET_FLAG_RELIABLE); + enet_host_broadcast(Server, 0, packet); + + /* Wait up to 5 seconds for the connection attempt to succeed. */ + ENetEvent event; + client_join_connected = 0; + client_join_connected = enet_host_service(host, &event, 5000) > 0 && event.type == ENET_EVENT_TYPE_CONNECT; + return 0; +} + +int64_t client_join(const char *ip, int port) { + assert(port > 1024 && port < 65500); + ENetAddress address = {0}; + enet_address_set_host(&address, !strcmp(ip, "localhost") ? "127.0.0.1" : ip); + address.port = port; + + ENetHost *host = enet_host_create(NULL, 1 /*outgoing connections*/, 2 /*channels*/, 0 /*in bandwidth*/, 0 /*out bandwidth*/); + if(!host) return -1; + ENetPeer *peer = enet_host_connect(host, &address, 2, 0); + if(!peer) return -1; + Server = host; + + ENetEvent event; + bool client_join_connected = enet_host_service(host, &event, 5000) > 0 && event.type == ENET_EVENT_TYPE_CONNECT; + if(!client_join_connected) { enet_peer_reset(peer); return -1; } + + // wait for the response + bool msg_received = enet_host_service(host, &event, 5000) > 0 && event.type == ENET_EVENT_TYPE_RECEIVE; + if (!msg_received) { enet_peer_reset(peer); return -1; } + + char *ptr = (char *)event.packet->data; + int64_t cid = -1; + + // decapsulate incoming packet. + uint32_t mid = *(uint32_t*)(ptr + 0); + ptr += 4; + + switch (mid) { + case MSG_INIT: + cid = *(int64_t*)ptr; + break; + default: + enet_peer_reset(peer); + enet_packet_destroy( event.packet ); + return -1; + } + + /* Clean up the packet now that we're done using it. */ + enet_packet_destroy( event.packet ); + + return cid; +} +void server_drop(int64_t handle) { + enet_peer_disconnect_now(*(ENetPeer **)map_find(peers, handle), 0); + server_drop_client(handle); +} + +void server_send_bin(int64_t handle, const void *ptr, int len) { + ENetPacket *packet = enet_packet_create(ptr, len, ENET_PACKET_FLAG_RELIABLE); + enet_peer_send(*(ENetPeer **)map_find(peers, handle), 0, packet); +} + +void server_send(int64_t handle, const char *msg) { + server_send_bin(handle, msg, strlen(msg)+1); +} + +// --- + +typedef struct netbuffer_t { + int64_t owner; + void *ptr; + unsigned sz; + uint64_t flags; +} netbuffer_t; + +static array(char*) events; // @todo: make event 128 bytes max? +static array(int64_t) values; // @todo: map instead? +static map( int64_t, array(netbuffer_t) ) buffers; // map> +static double msg_send_cooldown = 0.0; +static double network_dt = 0.0; +static double last_netsync = 0.0; + +void network_create(unsigned max_clients, const char *ip, const char *port_, unsigned flags) { + if (buffers) map_clear(buffers); + do_once { + array_resize(values, 128); + map_init(buffers, less_64, hash_64); + + enet_init(); + } + + ip = ip ? ip : "0.0.0.0"; + int port = atoi(port_ ? port_ : "1234"); + + // network_put(NETWORK_IP, 0x7F000001); // 127.0.0.1 + network_put(NETWORK_PORT, port); + network_put(NETWORK_LIVE, -1); + network_put(NETWORK_COUNT, 0); + network_put(NETWORK_CAPACITY, max_clients); + network_put(NETWORK_BUF_CLEAR_ON_JOIN, 1); + + if( !(flags&NETWORK_CONNECT) || flags&NETWORK_BIND ) { + // server, else client + PRINTF("Trying to bind server, else we connect as a client...\n"); + network_put(NETWORK_RANK, 0); + if( server_bind(max_clients, port) ) { + network_put(NETWORK_LIVE, 1); + PRINTF("Server bound\n"); + } else { + network_put(NETWORK_RANK, -1); /* unassigned until we connect successfully */ + int64_t socket = client_join(ip, port); + if( socket >= 0 ) { + PRINTF("Client connected, id %d\n", (int)socket); + network_put(NETWORK_LIVE, 1); + network_put(NETWORK_RANK, socket); + } else { + PRINTF("!Client conn failed\n"); + network_put(NETWORK_LIVE, 0); + + if (!(flags&NETWORK_NOFAIL)) + PANIC("cannot neither connect to %s:%d, nor create a server", ip, port); + } + } + } else { + // client only + PRINTF("Connecting to server...\n"); + network_put(NETWORK_RANK, -1); /* unassigned until we connect successfully */ + int64_t socket = client_join(ip, port); + if( socket > 0 ) { + PRINTF("Client connected, id %d\n", (int)socket); + network_put(NETWORK_LIVE, 1); + network_put(NETWORK_RANK, socket); + } else { + PRINTF("!Client conn failed\n"); + network_put(NETWORK_LIVE, 0); + if (!(flags&NETWORK_NOFAIL)) + PANIC("cannot connect to server %s:%d", ip, port); + } + } + + PRINTF("Network rank:%u ip:%s port:%d\n", (unsigned)network_get(NETWORK_RANK), ip, (int)network_get(NETWORK_PORT)); +} + +int64_t network_put(uint64_t key, int64_t value) { + int64_t *found = key < array_count(values) ? &values[key] : NULL; + if(found) *found = value; + return value; +} +int64_t network_get(uint64_t key) { + int64_t *found = key < array_count(values) ? &values[key] : NULL; + return found ? *found : 0; +} + +void* network_buffer(void *ptr, unsigned sz, uint64_t flags, int64_t rank) { + assert(flags); + array(netbuffer_t) *found = map_find_or_add(buffers, rank, NULL); + + netbuffer_t nb; + nb.owner = rank; + nb.ptr = ptr; + nb.sz = sz; + nb.flags = flags; + array_push(*found, nb); + + return ptr; +} + +static +int enet_event_to_netsync(int ev) { + switch (ev) { + case ENET_EVENT_TYPE_CONNECT: return NETWORK_EVENT_CONNECT; + case ENET_EVENT_TYPE_DISCONNECT: return NETWORK_EVENT_DISCONNECT; + case ENET_EVENT_TYPE_RECEIVE: return NETWORK_EVENT_RECEIVE; + case ENET_EVENT_TYPE_DISCONNECT_TIMEOUT: return NETWORK_EVENT_DISCONNECT_TIMEOUT; + } + + /* passthrough for our own events */ + return ev; +} + +char** network_sync(unsigned timeout_ms) { + int64_t whoami = network_get(NETWORK_RANK); + bool is_server = whoami == 0; + bool is_client = !is_server; + if(timeout_ms < 2) timeout_ms = 2; + + network_dt = time_ss() - last_netsync; + last_netsync = time_ss(); + + // Split buffers into clients @todo + // clients need to do this before network polling; servers should do this after polling. + if (msg_send_cooldown <= 0.0) { + map_foreach(buffers, int64_t, rank, array(netbuffer_t), list) { + for(int i = 0, end = array_count(list); i < end; ++i) { + netbuffer_t *nb = &list[i]; + if (!is_server && !(nb->flags & NETWORK_SEND)) + continue; + static array(char) encapsulate; + array_resize(encapsulate, nb->sz + 28); + uint32_t *mid = (uint32_t*)&encapsulate[0]; *mid = MSG_BUF; + uint64_t *st = (uint64_t*)&encapsulate[4]; *st = nb->flags; + uint32_t *idx = (uint32_t*)&encapsulate[12]; *idx = i; + uint32_t *len = (uint32_t*)&encapsulate[16]; *len = nb->sz; + uint64_t *who = (uint64_t*)&encapsulate[20]; *who = nb->owner; + // PRINTF("sending %llx %u %lld %u\n", *st, *idx, *who, *len); + memcpy(&encapsulate[28], nb->ptr, nb->sz); + server_broadcast_bin(&encapsulate[0], nb->sz + 28); + } + } + msg_send_cooldown = (double)network_get(NETWORK_SEND_MS)/1000.0; + } else { + msg_send_cooldown -= network_dt; + } + + if (is_server) { + return server_poll(timeout_ms); + } else { + return client_poll(timeout_ms); + } +} + + +char** server_poll(unsigned timeout_ms) { + array_clear(events); + if(timeout_ms < 2) timeout_ms = 2; + + // network poll + for( ENetEvent event; Server && enet_host_service(Server, &event, timeout_ms) > 0; ) { + char *msg = 0; + char ip[128]; enet_peer_get_ip(event.peer, ip, 128); + + switch (event.type) { + default: // case ENET_EVENT_TYPE_NONE: + break; + + case ENET_EVENT_TYPE_CONNECT:; + /* ensure we have free slot for client */ + if (map_count(clients) >= network_get(NETWORK_CAPACITY)-1) { + msg = va("%d Server is at maximum capacity, disconnecting the peer (::%s:%u)...", 1, ip, event.peer->address.port); + enet_peer_disconnect_now(event.peer, 1); + break; + } + + int64_t client_id = -1; + + if (next_free_id) { + struct peer_node_t *node = next_free_id; + client_id = next_free_id->id; + next_free_id = next_free_id->next; + FREE(node); + } + else client_id = next_client_id++; + + // if (network_get(NETWORK_BUF_CLEAR_ON_JOIN)) { + // array(netbuffer_t) *list = map_find(buffers, client_id); + + // if (list) + // for(int i = 0, end = array_count(list); i < end; ++i) { + // netbuffer_t *nb = &list[i]; + // memset(nb->ptr, 0, nb->sz); + // } + // } + + map_find_or_add(clients, event.peer, client_id); + map_find_or_add(peers, client_id, event.peer); + network_put(NETWORK_COUNT, network_get(NETWORK_COUNT)+1); + + + // send server slot + char init_msg[12]; + *(uint32_t*)&init_msg[0] = MSG_INIT; + *(int64_t*)&init_msg[4] = client_id; + server_send_bin(client_id, init_msg, 12); + PRINTF("Client rank %u for peer ::%s:%u\n", (unsigned)client_id, ip, event.peer->address.port); + msg = va( "%d new client rank:%u from ::%s:%u", 0, (unsigned)client_id, ip, event.peer->address.port ); + event.peer->data = (void*)client_id; + break; + + case ENET_EVENT_TYPE_RECEIVE: { + char *dbg = (char *)event.peer->data; + char *ptr = (char *)event.packet->data; + unsigned sz = (unsigned)event.packet->dataLength; + unsigned id = (unsigned)event.channelID; + + // debug + // puts(dbg); + // hexdump(ptr, sz); + + // decapsulate incoming packet. + uint32_t mid = *(uint32_t*)(ptr + 0); + ptr += 4; + + switch (mid) { + case MSG_BUF: { + uint64_t *flags = (uint64_t*)(ptr + 0); + uint32_t *idx = (uint32_t*)(ptr + 8); + uint32_t *len = (uint32_t*)(ptr + 12); + uint64_t *who = (uint64_t*)(ptr + 16); + ptr += 24; + + // validate if peer owns the buffer + int64_t *cid = map_find(clients, event.peer); + uint8_t client_valid = cid ? *cid == *who : 0; + + // apply incoming packet. + if( client_valid ) { + array(netbuffer_t) *list = map_find(buffers, *who); + assert( list ); + assert( *idx < array_count(*list) ); + netbuffer_t *nb = &(*list)[*idx]; + assert( *len == nb->sz ); + memcpy(nb->ptr, ptr, *len); + } + } break; + case MSG_RPC: { + event.type = NETWORK_EVENT_RPC; + unsigned id = *(uint32_t*)ptr; ptr += 4; + char *cmdline = ptr; + char *resp = rpc(id, cmdline); + char *resp_msg = va("%*.s%s", 4, "", resp); + *(uint32_t*)&resp_msg[0] = MSG_RPC_RESP; + ENetPacket *packet = enet_packet_create(resp_msg, strlen(resp) + 5, ENET_PACKET_FLAG_RELIABLE); + enet_peer_send(event.peer, 0, packet); + msg = va("%d req:%s res:%s", 0, cmdline, resp); + } break; + case MSG_RPC_RESP: { + event.type = NETWORK_EVENT_RPC_RESP; + msg = va("%d %s", 0, va("%s", ptr)); + } break; + default: + msg = va("%d unk msg len:%u from rank:%u ::%s:%u", -1, sz, (unsigned)(uintptr_t)event.peer->data, ip, event.peer->address.port); /* @TODO: hexdump? */ + break; + } + /* Clean up the packet now that we're done using it. */ + enet_packet_destroy( event.packet ); + } break; + + case ENET_EVENT_TYPE_DISCONNECT: + msg = va( "%d disconnect rank:%u", 0, (unsigned)(uintptr_t)event.peer->data); + /* Reset the peer's client information. */ + FREE(event.peer->data); + event.peer->data = NULL; + server_drop_client_peer(event.peer); + network_put(NETWORK_COUNT, network_get(NETWORK_COUNT)-1); + break; + + case ENET_EVENT_TYPE_DISCONNECT_TIMEOUT: + msg = va( "%d timeout rank:%u", 0, (unsigned)(uintptr_t)event.peer->data); + FREE(event.peer->data); + event.peer->data = NULL; + server_drop_client_peer(event.peer); + network_put(NETWORK_COUNT, network_get(NETWORK_COUNT)-1); + break; + } + + if(msg) array_push(events, va("%d %s", enet_event_to_netsync(event.type), msg)); + } + + array_push(events, NULL); + return events; +} + +char** client_poll(unsigned timeout_ms) { + array_clear(events); + int64_t whoami = network_get(NETWORK_RANK); + if(timeout_ms < 2) timeout_ms = 2; + + // network poll + for( ENetEvent event; Server && enet_host_service(Server, &event, timeout_ms) > 0; ) { + char *msg = 0; + char ip[128]; enet_peer_get_ip(event.peer, ip, 128); + + switch (event.type) { + default: // case ENET_EVENT_TYPE_NONE: + break; + + case ENET_EVENT_TYPE_CONNECT: + break; + + case ENET_EVENT_TYPE_RECEIVE: { + char *dbg = (char *)event.peer->data; + char *ptr = (char *)event.packet->data; + unsigned sz = (unsigned)event.packet->dataLength; + unsigned id = (unsigned)event.channelID; + + // decapsulate incoming packet. + uint32_t mid = *(uint32_t*)(ptr + 0); + ptr += 4; + + switch (mid) { + case MSG_INIT: + /* handled by client_join */ + break; + case MSG_BUF: { + uint64_t *flags = (uint64_t*)(ptr + 0); + uint32_t *idx = (uint32_t*)(ptr + 8); + uint32_t *len = (uint32_t*)(ptr + 12); + uint64_t *who = (uint64_t*)(ptr + 16); + ptr += 24; + + // apply incoming packet. + if( *who != whoami ) { + array(netbuffer_t) *list = map_find(buffers, *who); + assert( list ); + assert( *idx < array_count(*list) ); + netbuffer_t *nb = &(*list)[*idx]; + assert( *len == nb->sz ); + memcpy(nb->ptr, ptr, *len); + } + } break; + case MSG_RPC: { + event.type = NETWORK_EVENT_RPC; + unsigned id = *(uint32_t*)ptr; ptr += 4; + char *cmdline = ptr; + char *resp = rpc(id, cmdline); + char *resp_msg = va("%*.s%s", 4, "", resp); + *(uint32_t*)&resp_msg[0] = MSG_RPC_RESP; + ENetPacket *packet = enet_packet_create(resp_msg, strlen(resp) + 5, ENET_PACKET_FLAG_RELIABLE); + enet_peer_send(event.peer, 0, packet); + msg = va("%d req:%s res:%s", 0, cmdline, resp); + } break; + case MSG_RPC_RESP: { + event.type = NETWORK_EVENT_RPC_RESP; + msg = va("%d %s", 0, ptr); + } break; + default: + msg = va("%d unk msg len:%u from server", -1, sz); /* @TODO: hexdump? */ + break; + } + /* Clean up the packet now that we're done using it. */ + enet_packet_destroy( event.packet ); + } break; + + case ENET_EVENT_TYPE_DISCONNECT: + msg = va( "%d disconnect", 0 ); + /* Reset the peer's client information. */ + FREE(event.peer->data); + event.peer->data = NULL; + network_put(NETWORK_RANK, -1); + network_put(NETWORK_LIVE, 0); + break; + + case ENET_EVENT_TYPE_DISCONNECT_TIMEOUT: + msg = va( "%d timeout", 0); + FREE(event.peer->data); + event.peer->data = NULL; + network_put(NETWORK_RANK, -1); + network_put(NETWORK_LIVE, 0); + break; + } + + if(msg) array_push(events, va("%d %s", enet_event_to_netsync(event.type), msg)); + } + + array_push(events, NULL); + return events; +} + +int network_event(const char *msg, int *errcode, char **errstr) { + int evid = -1; + int err = 0; + char errbuf[128] = {0}; + sscanf(msg, "%d %d %127[^\r\n]", &evid, &err, errbuf); + if (errcode) *errcode = err; + if (errstr) *errstr = va("%s", errbuf); + return evid; +} + +void network_rpc(const char *signature, void *function) { + rpc_insert(signature, function); +} + +void network_rpc_send_to(int64_t rank, unsigned id, const char *cmdline) { + assert(network_get(NETWORK_RANK) == 0); /* must be a host */ + char *msg = va("%*.s%s", 8, "", cmdline); + unsigned sz = strlen(cmdline) + 9; + *(uint32_t*)&msg[0] = MSG_RPC; + *(uint32_t*)&msg[4] = id; + server_send_bin(rank, msg, sz); +} + +void network_rpc_send(unsigned id, const char *cmdline) { + char *msg = va("%*.s%s", 8, "", cmdline); + unsigned sz = strlen(cmdline) + 9; + *(uint32_t*)&msg[0] = MSG_RPC; + *(uint32_t*)&msg[4] = id; + server_broadcast_bin(msg, sz); +} #line 0 #line 1 "v4k_pack.c" -// ----------------------------------------------------------------------------- -// semantic versioning in a single byte (octal) -// - rlyeh, public domain. -// -// - single octal byte that represents semantic versioning (major.minor.patch). -// - allowed range [0000..0377] ( <-> [0..255] decimal ) -// - comparison checks only major.minor tuple as per convention. - -int semver( int major, int minor, int patch ) { - return SEMVER(major, minor, patch); -} -int semvercmp( int v1, int v2 ) { - return SEMVERCMP(v1, v2); -} - -#if 0 -AUTORUN { - for( int i= 0; i <= 255; ++i) printf(SEMVERFMT ",", i); - puts(""); - - printf(SEMVERFMT "\n", semver(3,7,7)); - printf(SEMVERFMT "\n", semver(2,7,7)); - printf(SEMVERFMT "\n", semver(1,7,7)); - printf(SEMVERFMT "\n", semver(0,7,7)); - - printf(SEMVERFMT "\n", semver(3,7,1)); - printf(SEMVERFMT "\n", semver(2,5,3)); - printf(SEMVERFMT "\n", semver(1,3,5)); - printf(SEMVERFMT "\n", semver(0,1,7)); - - assert( semvercmp( 0357, 0300 ) > 0 ); - assert( semvercmp( 0277, 0300 ) < 0 ); - assert( semvercmp( 0277, 0200 ) > 0 ); - assert( semvercmp( 0277, 0100 ) < 0 ); - assert( semvercmp( 0076, 0070 ) == 0 ); - assert( semvercmp( 0076, 0077 ) == 0 ); - assert( semvercmp( 0176, 0170 ) == 0 ); - assert( semvercmp( 0176, 0177 ) == 0 ); - assert( semvercmp( 0276, 0270 ) == 0 ); - assert( semvercmp( 0276, 0277 ) == 0 ); - assert( semvercmp( 0376, 0370 ) == 0 ); - assert( semvercmp( 0376, 0377 ) == 0 ); -} -#endif - -// ----------------------------------------------------------------------------- -// compile-time fourcc, eightcc - -char *cc4str(unsigned x) { - static __thread char type[4+1] = {0}; - type[3] = (x >> 24ULL) & 255; - type[2] = (x >> 16ULL) & 255; - type[1] = (x >> 8ULL) & 255; - type[0] = (x >> 0ULL) & 255; - return type; -} -char *cc8str(uint64_t x) { - static __thread char type[8+1] = {0}; - type[7] = (x >> 56ULL) & 255; - type[6] = (x >> 48ULL) & 255; - type[5] = (x >> 40ULL) & 255; - type[4] = (x >> 32ULL) & 255; - type[3] = (x >> 24ULL) & 255; - type[2] = (x >> 16ULL) & 255; - type[1] = (x >> 8ULL) & 255; - type[0] = (x >> 0ULL) & 255; - return type; -} - -// ---------------------------------------------------------------------------- -// float conversion (text) - -char* itoa1(int v) { - return va("%d", v); -} -char* itoa2(vec2i v) { - return va("%d,%d", v.x,v.y); -} -char* itoa3(vec3i v) { - return va("%d,%d,%d", v.x,v.y,v.z); -} - -char* ftoa1(float v) { - return va("%f", v); -} -char* ftoa2(vec2 v) { - return va("%f,%f", v.x, v.y); -} -char* ftoa3(vec3 v) { - return va("%f,%f,%f", v.x, v.y, v.z); -} -char* ftoa4(vec4 v) { - return va("%f,%f,%f,%f", v.x, v.y, v.z, v.w); -} - -float atof1(const char *s) { - char buf[64]; - return sscanf(s, "%63[^]\r\n,}]", buf) == 1 ? (float)eval(buf) : (float)NAN; -} -vec2 atof2(const char *s) { - vec2 v = { 0 }; - char buf1[64],buf2[64]; - int num = sscanf(s, "%63[^]\r\n,}],%63[^]\r\n,}]", buf1, buf2); - if( num > 0 ) v.x = eval(buf1); - if( num > 1 ) v.y = eval(buf2); - return v; -} -vec3 atof3(const char *s) { - vec3 v = {0}; - char buf1[64],buf2[64],buf3[64]; - int num = sscanf(s, "%63[^]\r\n,}],%63[^]\r\n,}],%63[^]\r\n,}]", buf1, buf2, buf3); - if( num > 0 ) v.x = eval(buf1); - if( num > 1 ) v.y = eval(buf2); - if( num > 2 ) v.z = eval(buf3); - return v; -} -vec4 atof4(const char *s) { - vec4 v = {0}; - char buf1[64],buf2[64],buf3[64],buf4[64]; - int num = sscanf(s, "%63[^]\r\n,}],%63[^]\r\n,}],%63[^]\r\n,}],%63[^]\r\n,}]", buf1, buf2, buf3, buf4); - if( num > 0 ) v.x = eval(buf1); - if( num > 1 ) v.y = eval(buf2); - if( num > 2 ) v.z = eval(buf3); - if( num > 3 ) v.w = eval(buf4); - return v; -} - -// @todo: expand this to proper int parsers -int atoi1(const char *s) { - return (int)atof1(s); -} -vec2i atoi2(const char *s) { - vec2 v = atof2(s); - return vec2i( v.x, v.y ); -} -vec3i atoi3(const char *s) { - vec3 v = atof3(s); - return vec3i( v.x, v.y, v.z ); -} - -// endianness ----------------------------------------------------------------- -// - rlyeh, public domain - -int is_big() { return IS_BIG; } -int is_little() { return IS_LITTLE; } - -uint16_t lil16(uint16_t n) { return IS_BIG ? swap16(n) : n; } -uint32_t lil32(uint32_t n) { return IS_BIG ? swap32(n) : n; } -uint64_t lil64(uint64_t n) { return IS_BIG ? swap64(n) : n; } -uint16_t big16(uint16_t n) { return IS_LITTLE ? swap16(n) : n; } -uint32_t big32(uint32_t n) { return IS_LITTLE ? swap32(n) : n; } -uint64_t big64(uint64_t n) { return IS_LITTLE ? swap64(n) : n; } - -float lil32f(float n) { return IS_BIG ? swap32f(n) : n; } -double lil64f(double n) { return IS_BIG ? swap64f(n) : n; } -float big32f(float n) { return IS_LITTLE ? swap32f(n) : n; } -double big64f(double n) { return IS_LITTLE ? swap64f(n) : n; } - -uint16_t* lil16p(void *p, int sz) { if(IS_BIG ) { uint16_t *n = (uint16_t *)p; for(int i = 0; i < sz; ++i) n[i] = swap16(n[i]); } return p; } -uint16_t* big16p(void *p, int sz) { if(IS_LITTLE ) { uint16_t *n = (uint16_t *)p; for(int i = 0; i < sz; ++i) n[i] = swap16(n[i]); } return p; } -uint32_t* lil32p(void *p, int sz) { if(IS_BIG ) { uint32_t *n = (uint32_t *)p; for(int i = 0; i < sz; ++i) n[i] = swap32(n[i]); } return p; } -uint32_t* big32p(void *p, int sz) { if(IS_LITTLE ) { uint32_t *n = (uint32_t *)p; for(int i = 0; i < sz; ++i) n[i] = swap32(n[i]); } return p; } -uint64_t* lil64p(void *p, int sz) { if(IS_BIG ) { uint64_t *n = (uint64_t *)p; for(int i = 0; i < sz; ++i) n[i] = swap64(n[i]); } return p; } -uint64_t* big64p(void *p, int sz) { if(IS_LITTLE ) { uint64_t *n = (uint64_t *)p; for(int i = 0; i < sz; ++i) n[i] = swap64(n[i]); } return p; } - -float * lil32pf(void *p, int sz) { if(IS_BIG ) { float *n = (float *)p; for(int i = 0; i < sz; ++i) n[i] = swap32f(n[i]); } return p; } -float * big32pf(void *p, int sz) { if(IS_LITTLE ) { float *n = (float *)p; for(int i = 0; i < sz; ++i) n[i] = swap32f(n[i]); } return p; } -double * lil64pf(void *p, int sz) { if(IS_BIG ) { double *n = (double *)p; for(int i = 0; i < sz; ++i) n[i] = swap64f(n[i]); } return p; } -double * big64pf(void *p, int sz) { if(IS_LITTLE ) { double *n = (double *)p; for(int i = 0; i < sz; ++i) n[i] = swap64f(n[i]); } return p; } - -#if !is(cl) && !is(gcc) -uint16_t (swap16)( uint16_t x ) { return (x << 8) | (x >> 8); } -uint32_t (swap32)( uint32_t x ) { x = ((x << 8) & 0xff00ff00) | ((x >> 8) & 0x00ff00ff); return (x << 16) | (x >> 16); } -uint64_t (swap64)( uint64_t x ) { x = ((x << 8) & 0xff00ff00ff00ff00ULL) | ((x >> 8) & 0x00ff00ff00ff00ffULL); x = ((x << 16) & 0xffff0000ffff0000ULL) | ((x >> 16) & 0x0000ffff0000ffffULL); return (x << 32) | (x >> 32); } -#endif - -float swap32f(float n) { union { float t; uint32_t i; } conv; conv.t = n; conv.i = swap32(conv.i); return conv.t; } -double swap64f(double n) { union { double t; uint64_t i; } conv; conv.t = n; conv.i = swap64(conv.i); return conv.t; } - -void swapf(float *a, float *b) { - float t = *a; *a = *b; *b = *a; -} -void swapf2(vec2 *a, vec2 *b) { - float x = a->x; a->x = b->x; b->x = a->x; - float y = a->y; a->y = b->y; b->y = a->y; -} -void swapf3(vec3 *a, vec3 *b) { - float x = a->x; a->x = b->x; b->x = a->x; - float y = a->y; a->y = b->y; b->y = a->y; - float z = a->z; a->z = b->z; b->z = a->z; -} -void swapf4(vec4 *a, vec4 *b) { - float x = a->x; a->x = b->x; b->x = a->x; - float y = a->y; a->y = b->y; b->y = a->y; - float z = a->z; a->z = b->z; b->z = a->z; - float w = a->w; a->w = b->w; b->w = a->w; -} - -// half packing ----------------------------------------------------------------- -// from GingerBill's gbmath.h (public domain) - -float half_to_float(half value) { - union { unsigned int i; float f; } result; - int s = (value >> 15) & 0x001; - int e = (value >> 10) & 0x01f; - int m = value & 0x3ff; - - if (e == 0) { - if (m == 0) { - /* Plus or minus zero */ - result.i = (unsigned int)(s << 31); - return result.f; - } else { - /* Denormalized number */ - while (!(m & 0x00000400)) { - m <<= 1; - e -= 1; - } - e += 1; - m &= ~0x00000400; - } - } else if (e == 31) { - if (m == 0) { - /* Positive or negative infinity */ - result.i = (unsigned int)((s << 31) | 0x7f800000); - return result.f; - } else { - /* Nan */ - result.i = (unsigned int)((s << 31) | 0x7f800000 | (m << 13)); - return result.f; - } - } - - e = e + (127 - 15); - m = m << 13; - - result.i = (unsigned int)((s << 31) | (e << 23) | m); - return result.f; -} - -half float_to_half(float value) { - union { unsigned int i; float f; } v; - int i, s, e, m; - - v.f = value; - i = (int)v.i; - - s = (i >> 16) & 0x00008000; - e = ((i >> 23) & 0x000000ff) - (127 - 15); - m = i & 0x007fffff; - - if (e <= 0) { - if (e < -10) return (half)s; - m = (m | 0x00800000) >> (1 - e); - - if (m & 0x00001000) - m += 0x00002000; - - return (half)(s | (m >> 13)); - } else if (e == 0xff - (127 - 15)) { - if (m == 0) { - return (half)(s | 0x7c00); /* NOTE(bill): infinity */ - } else { - /* NOTE(bill): NAN */ - m >>= 13; - return (half)(s | 0x7c00 | m | (m == 0)); - } - } else { - if (m & 0x00001000) { - m += 0x00002000; - if (m & 0x00800000) { - m = 0; - e += 1; - } - } - if (e > 30) { - float volatile f = 1e12f; - int j; - for (j = 0; j < 10; j++) - f *= f; /* NOTE(bill): Cause overflow */ - return (half)(s | 0x7c00); - } - return (half)(s | (e << 10) | (m >> 13)); - } -} - -// int packing ----------------------------------------------------------------- -// - rlyeh, public domain - -// pack16i() -- store a 16-bit int into a char buffer (like htons()) -// pack32i() -- store a 32-bit int into a char buffer (like htonl()) -// pack64i() -- store a 64-bit int into a char buffer (like htonl()) - -void pack16i(uint8_t *buf, uint16_t i, int swap) { - if( swap ) i = swap16(i); - memcpy( buf, &i, sizeof(i) ); -} - -void pack32i(uint8_t *buf, uint32_t i, int swap) { - if( swap ) i = swap32(i); - memcpy( buf, &i, sizeof(i) ); -} - -void pack64i(uint8_t *buf, uint64_t i, int swap) { - if( swap ) i = swap64(i); - memcpy( buf, &i, sizeof(i) ); -} - -// unpack16i() -- unpack a 16-bit int from a char buffer (like ntohs()) -// unpack32i() -- unpack a 32-bit int from a char buffer (like ntohl()) -// unpack64i() -- unpack a 64-bit int from a char buffer (like ntohl()) -// changes unsigned numbers to signed if needed. - -int16_t unpack16i(const uint8_t *buf, int swap) { - uint16_t i; - memcpy(&i, buf, sizeof(i)); - if( swap ) i = swap16(i); - return i <= 0x7fffu ? (int16_t)i : -1 -(uint16_t)(0xffffu - i); -} - -int32_t unpack32i(const uint8_t *buf, int swap) { - uint32_t i; - memcpy(&i, buf, sizeof(i)); - if( swap ) i = swap32(i); - return i <= 0x7fffffffu ? (int32_t)i : -1 -(int32_t)(0xffffffffu - i); -} - -int64_t unpack64i(const uint8_t *buf, int swap) { - uint64_t i; - memcpy(&i, buf, sizeof(i)); - if( swap ) i = swap64(i); - return i <= 0x7fffffffffffffffull ? (int64_t)i : -1 -(int64_t)(0xffffffffffffffffull - i); -} - -// ---------------------------------------------------------------------------- -// float un/packing: 8 (micro), 16 (half), 32 (float), 64 (double) types -// - rlyeh, public domain. original code by Beej.us (PD). -// -// [src] http://beej.us/guide/bgnet/output/html/multipage/advanced.html#serialization -// Modified to encode NaN and Infinity as well. -// -// [1] http://www.mrob.com/pub/math/floatformats.html#minifloat -// [2] microfloat: [0.002 to 240] range. -// [3] half float: can approximate any 16-bit unsigned integer or its reciprocal to 3 decimal places. - -uint64_t pack754(long double f, unsigned bits, unsigned expbits) { - long double fnorm; - int shift; - long long sign, exp, significand; - unsigned significandbits = bits - expbits - 1; // -1 for sign bit - - if (f == 0.0) return 0; // get this special case out of the way -//< @r-lyeh beware! works for 32/64 only - else if (f == INFINITY) return 0x7f800000ULL << (bits - 32); // 0111 1111 1000 - else if (f == -INFINITY) return 0xff800000ULL << (bits - 32); - else if (f != f) return 0x7fc00000ULL << (bits - 32); // 0111 1111 1100 NaN -//< @r-lyeh - - // check sign and begin normalization - if (f < 0) { sign = 1; fnorm = -f; } - else { sign = 0; fnorm = f; } - - // get the normalized form of f and track the exponent - shift = 0; - while(fnorm >= 2.0) { fnorm /= 2.0; shift++; } - while(fnorm < 1.0) { fnorm *= 2.0; shift--; } - fnorm = fnorm - 1.0; - - // calculate the binary form (non-float) of the significand data - significand = fnorm * ((1LL<>significandbits)&((1LL< 0) { result *= 2.0; shift--; } - while(shift < 0) { result /= 2.0; shift++; } - - // sign it - result *= (i>>(bits-1))&1? -1.0: 1.0; - - return result; -} - -typedef int static_assert_flt[ sizeof(float) == 4 ]; -typedef int static_assert_dbl[ sizeof(double) == 8 ]; - -// ---------------------------------------------------------------------------- -// variable-length integer packing -// - rlyeh, public domain. -// -// 7 [0 xxxx xxx] 7-bit value in 1 byte (0- 127) -// 7 [10 xxx xxx] [yyyyyyyy] 14-bit value in 2 bytes (0- 16,383) -// 6 [110 xx xxx] [yyyyyyyy] [zzzzzzzz] 21-bit value in 3 bytes (0- 2,097,151) -// 8 [111 00 xxx] [ 3 bytes] 27-bit value in 4 bytes (0- 134,217,727) -// 8 [111 01 xxx] [ 4 bytes] 35-bit value in 5 bytes (0- 34,359,738,367) -// 5 [111 10 xxx] [ 5 bytes] 43-bit value in 6 bytes (0- 8,796,093,022,207) -// 8 [111 11 000] [ 6 bytes] 48-bit value in 7 bytes (0-281,474,976,710,655) -// 8 [111 11 001] [ 7 bytes] 56-bit value in 8 bytes (...) -// 8 [111 11 010] [ 8 bytes] 64-bit value in 9 bytes -// 8 [111 11 011] [ 9 bytes] 72-bit value in 10 bytes -// 8 [111 11 100] [10 bytes] 80-bit value in 11 bytes -// A [111 11 101] [12 bytes] 96-bit value in 13 bytes -// A [111 11 110] [14 bytes] 112-bit value in 15 bytes -// A [111 11 111] [16 bytes] 128-bit value in 17 bytes -// 1 1 2 3 = 7 - -uint64_t pack64uv( uint8_t *buffer, uint64_t value ) { -#if 1 // LEB128 - /* encode unsigned : 7-bit pack. MSB terminates stream */ - const uint8_t *buffer0 = buffer; - while( value > 127 ) { - *buffer++ = value | 0x80; // (uint8_t)(( value & 0xFF ) | 0x80 ); - value >>= 7; - } - *buffer++ = value; - return buffer - buffer0; -#else - #define ADD(bits) *buffer++ = (value >>= bits) - if( value < (1ull<< 7) ) return *buffer = value, 1; - if( value < (1ull<<14) ) return *buffer++ = 0x80|(value&0x3f), ADD(6), 2; - if( value < (1ull<<21) ) return *buffer++ = 0xc0|(value&0x1f), ADD(5), ADD(8), 3; - if( value < (1ull<<27) ) return *buffer++ = 0xe0|(value&0x07), ADD(3), ADD(8), ADD(8), 4; - if( value < (1ull<<35) ) return *buffer++ = 0xe8|(value&0x07), ADD(3), ADD(8), ADD(8), ADD(8), 5; - if( value < (1ull<<43) ) return *buffer++ = 0xf0|(value&0x07), ADD(3), ADD(8), ADD(8), ADD(8), ADD(8), 6; - if( value < (1ull<<48) ) return *buffer++ = 0xf8|(value&0x00), ADD(0), ADD(8), ADD(8), ADD(8), ADD(8), ADD(8), 7; - if( value < (1ull<<56) ) return *buffer++ = 0xf9|(value&0x00), ADD(0), ADD(8), ADD(8), ADD(8), ADD(8), ADD(8), ADD(8), 8; - /*if( value < (1ull<<64))*/return *buffer++ = 0xfa|(value&0x00), ADD(0), ADD(8), ADD(8), ADD(8), ADD(8), ADD(8), ADD(8), ADD(8), 9; - /*...*/ - #undef ADD -#endif -} -uint64_t unpack64uv( const uint8_t *buffer, uint64_t *value ) { -#if 1 // LEB128 - /* decode unsigned : 7-bit unpack. MSB terminates stream */ - const uint8_t *buffer0 = buffer; - uint64_t out = 0, j = -7; - do { - out |= ( ((uint64_t)*buffer) & 0x7f) << (j += 7); - } while( (*buffer++) & 0x80 ); - return buffer - buffer0; -#else - uint64_t bytes, out = 0, shift = 0; - const int table[] = { 6,7,8,9,10,12,14,16 }; - /**/ if( *buffer >= 0xf8 ) bytes = table[*buffer - 0xf8]; - else if( *buffer >= 0xe0 ) bytes = 3 + ((*buffer>>3) & 3); - else if( *buffer >= 0xc0 ) bytes = 2; - else bytes = *buffer >= 0x80; - - #define POP(bits) out = out | (uint64_t)*buffer++ << (shift += bits); - switch( bytes ) { - default: - break; case 0: out = *buffer++; - break; case 1: out = *buffer++ & 0x3f; POP(6); - break; case 2: out = *buffer++ & 0x1f; POP(5); POP(8); - break; case 3: out = *buffer++ & 0x07; POP(3); POP(8); POP(8); - break; case 4: out = *buffer++ & 0x07; POP(3); POP(8); POP(8); POP(8); - break; case 5: out = *buffer++ & 0x07; POP(3); POP(8); POP(8); POP(8); POP(8); - break; case 6: ++buffer; shift = -8; POP(8); POP(8); POP(8); POP(8); POP(8); POP(8); - break; case 7: ++buffer; shift = -8; POP(8); POP(8); POP(8); POP(8); POP(8); POP(8); POP(8); - break; case 8: ++buffer; shift = -8; POP(8); POP(8); POP(8); POP(8); POP(8); POP(8); POP(8); POP(8); - } - #undef POP - - return *value = out, bytes+1; -#endif -} - -// vbyte, varint (signed) - -uint64_t pack64iv( uint8_t *buffer, int64_t value_ ) { - uint64_t value = (uint64_t)((value_ >> 63) ^ (value_ << 1)); - return pack64uv(buffer, value); /* convert sign|magnitude to magnitude|sign */ -} - -uint64_t unpack64iv( const uint8_t *buffer, int64_t *value ) { - uint64_t out = 0, ret = unpack64uv( buffer, &out ); - *value = ((out >> 1) ^ -(out & 1)); /* convert magnitude|sign to sign|magnitude */ - return ret; -} - - -#if 0 -AUTORUN { - int tests = 0, passes = 0; - - #define testi(v) do { \ - int64_t val = v; \ - char out[16]; \ - int len = pack64iv(out, val); \ - int64_t in = ~val; \ - unpack64iv(out, &in); \ - int ok = val == in; ++tests; passes += ok; \ - printf("%c %02d/%02d (-) %#llx (%llu) <-> %d bytes <-> %#llx (%llu)\n", "NY"[ok], passes, tests, val, val, len, in, in); \ - } while(0) - - #define testu(v) do { \ - uint64_t val = (v); \ - char out[16]; \ - int len = pack64uv(out, val); \ - uint64_t in = ~val; \ - unpack64uv(out, &in); \ - int ok = val == in; ++tests; passes += ok; \ - printf("%c %02d/%02d (+) %#llx (%llu) <-> %d bytes <-> %#llx (%llu)\n", "NY"[ok], passes, tests, val, val, len, in, in); \ - } while(0) - - #define TEST(v) do { testi(v); testu(v); } while(0) - - TEST(0); - TEST((1ull<<7)-1); - TEST( 1ull<<7); - TEST((1ull<<14)-1); - TEST( 1ull<<14); - TEST((1ull<<21)-1); - TEST( 1ull<<21); - TEST((1ull<<27)-1); - TEST( 1ull<<27); - TEST((1ull<<35)-1); - TEST( 1ull<<35); - TEST((1ull<<48)-1); - TEST( 1ull<<48); - TEST(~0ull-1); - TEST(~0ull); - - #undef TEST - - printf("%d tests, %d errors\n", tests, tests - passes); -} -#endif - -// ---------------------------------------------------------------------------- -// msgpack v5, schema based struct/buffer bitpacking -// - rlyeh, public domain. -// -// [ref] https://github.com/msgpack/msgpack/blob/master/spec.md -// -// @todo: finish msgunpack() -// @todo: alt api v3 -// int msgpack( uint8_t *buf, const char *fmt, ... ); -// if !buf, bulk size; else pack. -// returns number of bytes written; 0 if not space enough. -// int msgunpack( const uint8_t *buf, const char *fmt, ... ); -// if !buf, test message; else unpack. -// returns number of processed bytes; 0 if parse error. - - -// private alt unpack api v1 { -enum { - ERR,NIL,BOL,UNS,SIG,STR,BIN,FLT,EXT,ARR,MAP -}; -typedef struct variant { - union { - uint8_t chr; - uint64_t uns; - int64_t sig; - char *str; - void *bin; - double flt; - uint32_t u32; - }; - uint64_t sz; - uint16_t ext; - uint16_t type; //[0..10]={err,nil,bol,uns,sig,str,bin,flt,ext,arr,map} -} variant; -bool msgunpack_var(struct variant *var); -// } private alt unpack api v1 - -struct writer { - uint8_t *w; // Write pointer into buffer - size_t len; // Written bytes up to date - size_t cap; // Buffer capacity -}; - -struct reader { - FILE *fp; - const void *membuf; - size_t memsize, offset; - struct variant v; // tmp -}; - -static __thread struct writer out; -static __thread struct reader in; - -static void wrbe(uint64_t n, uint8_t *b) { -#ifndef BIG - n = ntoh64(n); -#endif - memcpy(b, &n, sizeof(uint64_t)); -} -static int wr(int len, uint8_t opcode, uint64_t value) { - uint8_t b[8]; - assert((out.len + (len+1) < out.cap) && "buffer overflow!"); - *out.w++ = (opcode); - /**/ if(len == 1) *out.w++ = (uint8_t)(value); - else if(len == 2) wrbe(value, b), memcpy(out.w, &b[6], 2), out.w += 2; - else if(len == 4) wrbe(value, b), memcpy(out.w, &b[4], 4), out.w += 4; - else if(len == 8) wrbe(value, b), memcpy(out.w, &b[0], 8), out.w += 8; - out.len += len+1; - return len+1; -} -static bool rd(void *buf, size_t len, size_t swap) { // return false any error and/or eof - bool ret; - if( in.fp ) { - assert( !ferror(in.fp) && "invalid file handle (reader)" ); - ret = 1 == fread((char*)buf, len, 1, in.fp); - } else { - assert( in.membuf && "invalid memory buffer (reader)"); - assert( (in.offset + len <= in.memsize) && "memory overflow! (reader)"); - ret = !!memcpy(buf, (char*)in.membuf + in.offset, len); - } -#ifndef BIG - /**/ if( swap && len == 2 ) *((uint16_t*)buf) = ntoh16(*((uint16_t*)buf)); - else if( swap && len == 4 ) *((uint32_t*)buf) = ntoh32(*((uint32_t*)buf)); - else if( swap && len == 8 ) *((uint64_t*)buf) = ntoh64(*((uint64_t*)buf)); -#endif - return in.offset += len, ret; -} -static bool rdbuf(char **buf, size_t len) { // return false on error or out of memory - char *ptr = REALLOC(*buf, len+1); - if( ptr && rd(ptr, len, 0) ) { - (*buf = ptr)[len] = 0; - } else { - FREE(ptr), ptr = 0; - } - return !!ptr; -} - -int msgpack_new(uint8_t *w, size_t l) { - out.w = w; - out.len = 0; - out.cap = l; - return w != 0 && l != 0; -} -int msgpack_nil() { - return wr(0, 0xC0, 0); -} -int msgpack_chr(bool c) { - return wr(0, c ? 0xC3 : 0xC2, 0); -} -int msgpack_uns(uint64_t n) { - /**/ if (n < 0x80) return wr(0, n, 0); - else if (n < 0x100) return wr(1, 0xCC, n); - else if (n < 0x10000) return wr(2, 0xCD, n); - else if (n < 0x100000000) return wr(4, 0xCE, n); - else return wr(8, 0xCF, n); -} -int msgpack_int(int64_t n) { - /**/ if (n >= 0) return msgpack_uns(n); - else if (n >= -32) return wr(0, n, 0); //wr(0, 0xE0 | n, 0); - else if (n >= -128) return wr(1, 0xD0, n + 0xff + 1); - else if (n >= -32768) return wr(2, 0xD1, n + 0xffff + 1); - else if (n >= -2147483648LL) return wr(4, 0xD2, n + 0xffffffffull + 1); - else return wr(8, 0xD3, n + 0xffffffffffffffffull + 1); -} -int msgpack_flt(double g) { - float f = (float)g; - double h = f; - /**/ if(g == h) return wr(4, 0xCA, pack754_32(f)); - else return wr(8, 0xCB, pack754_64(g)); -} -int msgpack_str(const char *s) { - size_t n = strlen(s), c = n; - - /**/ if (n < 0x20) c += wr(0, 0xA0 | n, 0); - else if (n < 0x100) c += wr(1, 0xD9, n); - else if (n < 0x10000) c += wr(2, 0xDA, n); - else c += wr(4, 0xDB, n); - - memcpy(out.w, s, n); - out.w += n; - out.len += n; - return c; -} -int msgpack_bin(const char *s, size_t n) { - size_t c = n; - /**/ if (n < 0x100) c += wr(1, 0xC4, n); - else if (n < 0x10000) c += wr(2, 0xC5, n); - else c += wr(4, 0xC6, n); - - memcpy(out.w, s, n); - out.w += n; - out.len += n; - return c; -} -int msgpack_arr(uint32_t numitems) { - uint32_t n = numitems; - /**/ if (n < 0x10) return wr(0, 0x90 | n, 0); - else if (n < 0x10000) return wr(2, 0xDC, n); - else return wr(4, 0xDD, n); -} -int msgpack_map(uint32_t numpairs) { - uint32_t n = numpairs; - /**/ if (n < 0x10) return wr(0, 0x80 | n, 0); - else if (n < 0x10000) return wr(2, 0xDE, n); - else return wr(4, 0xDF, n); -} -int msgpack_ext(uint8_t key, void *val, size_t n) { - uint32_t c = n; - /**/ if (n == 1) c += wr(1, 0xD4, key); - else if (n == 2) c += wr(1, 0xD5, key); - else if (n == 4) c += wr(1, 0xD6, key); - else if (n == 8) c += wr(1, 0xD7, key); - else if (n == 16) c += wr(1, 0xD8, key); - else if (n < 0x100) c += wr(1, 0xC7, n), c += wr(0, key, 0); - else if (n < 0x10000) c += wr(2, 0xC8, n), c += wr(0, key, 0); - else c += wr(4, 0xC9, n), c += wr(0, key, 0); - - memcpy(out.w, val, n); - out.w += n; - out.len += n; - return c; -} - -bool msgunpack_new( const void *opaque_or_FILE, size_t bytes ) { - return !!((memset(&in, 0, sizeof(in)), in.memsize = bytes) ? (in.membuf = opaque_or_FILE) : (in.fp = (FILE*)opaque_or_FILE)); -} -bool msgunpack_eof() { - return in.fp ? !!feof(in.fp) : (in.offset > in.memsize); -} -bool msgunpack_err() { - return in.fp ? !!ferror(in.fp) : !in.memsize; -} -bool msgunpack_var(struct variant *w) { - uint8_t tag; - struct variant v = {0}; - if( rd(&tag, 1, 0) ) - switch(tag) { - default: - /**/ if((tag & 0x80) == 0x00) { v.type = UNS; v.sz = 1; v.uns = tag; } - else if((tag & 0xe0) == 0xe0) { v.type = SIG; v.sz = 1; v.sig = (int8_t)tag; } - else if((tag & 0xe0) == 0xa0) { v.type = rdbuf(&v.str, v.sz = tag & 0x1f) ? STR : ERR; } - else if((tag & 0xf0) == 0x90) { v.type = ARR; v.sz = tag & 0x0f; } - else if((tag & 0xf0) == 0x80) { v.type = MAP; v.sz = tag & 0x0f; } - - break; case 0xc0: v.type = NIL; v.sz = 0; - break; case 0xc2: v.type = BOL; v.sz = 1; v.chr = 0; - break; case 0xc3: v.type = BOL; v.sz = 1; v.chr = 1; - - break; case 0xcc: v.type = rd(&v.uns, v.sz = 1, 0) ? UNS : ERR; - break; case 0xcd: v.type = rd(&v.uns, v.sz = 2, 1) ? UNS : ERR; - break; case 0xce: v.type = rd(&v.uns, v.sz = 4, 1) ? UNS : ERR; - break; case 0xcf: v.type = rd(&v.uns, v.sz = 8, 1) ? UNS : ERR; - - break; case 0xd0: v.type = rd(&v.uns, v.sz = 1, 0) ? (v.sig -= 0xff + 1, SIG) : ERR; - break; case 0xd1: v.type = rd(&v.uns, v.sz = 2, 1) ? (v.sig -= 0xffff + 1, SIG) : ERR; - break; case 0xd2: v.type = rd(&v.uns, v.sz = 4, 1) ? (v.sig -= 0xffffffffull + 1, SIG) : ERR; - break; case 0xd3: v.type = rd(&v.uns, v.sz = 8, 1) ? (v.sig -= 0xffffffffffffffffull + 1, SIG) : ERR; - - break; case 0xca: v.type = rd(&v.u32, v.sz = 4, 1) ? (v.flt = unpack754_32(v.u32), FLT) : ERR; - break; case 0xcb: v.type = rd(&v.uns, v.sz = 8, 1) ? (v.flt = unpack754_64(v.uns), FLT) : ERR; - - break; case 0xd9: v.type = rd(&v.sz, 1, 0) && rdbuf(&v.str, v.sz) ? STR : ERR; - break; case 0xda: v.type = rd(&v.sz, 2, 1) && rdbuf(&v.str, v.sz) ? STR : ERR; - break; case 0xdb: v.type = rd(&v.sz, 4, 1) && rdbuf(&v.str, v.sz) ? STR : ERR; - - break; case 0xc4: v.type = rd(&v.sz, 1, 0) && rdbuf(&v.str, v.sz) ? BIN : ERR; - break; case 0xc5: v.type = rd(&v.sz, 2, 1) && rdbuf(&v.str, v.sz) ? BIN : ERR; - break; case 0xc6: v.type = rd(&v.sz, 4, 1) && rdbuf(&v.str, v.sz) ? BIN : ERR; - - break; case 0xdc: v.type = rd(&v.sz, 2, 1) ? ARR : ERR; - break; case 0xdd: v.type = rd(&v.sz, 4, 1) ? ARR : ERR; - - break; case 0xde: v.type = rd(&v.sz, 2, 1) ? MAP : ERR; - break; case 0xdf: v.type = rd(&v.sz, 4, 1) ? MAP : ERR; - - break; case 0xd4: v.type = rd(&v.ext, 1, 0) && rd(&v.uns, 1, 0) && rdbuf(&v.str, v.sz = v.uns) ? EXT : ERR; - break; case 0xd5: v.type = rd(&v.ext, 1, 0) && rd(&v.uns, 2, 1) && rdbuf(&v.str, v.sz = v.uns) ? EXT : ERR; - break; case 0xd6: v.type = rd(&v.ext, 1, 0) && rd(&v.uns, 4, 1) && rdbuf(&v.str, v.sz = v.uns) ? EXT : ERR; - break; case 0xd7: v.type = rd(&v.ext, 1, 0) && rd(&v.uns, 8, 1) && rdbuf(&v.str, v.sz = v.uns) ? EXT : ERR; - break; case 0xd8: v.type = rd(&v.ext, 1, 0) && rd(&v.uns,16, 1) && rdbuf(&v.str, v.sz = v.uns) ? EXT : ERR; - - break; case 0xc7: v.type = rd(&v.sz, 1, 0) && rd(&v.ext, 1, 0) && rdbuf(&v.str,v.sz) ? EXT : ERR; - break; case 0xc8: v.type = rd(&v.sz, 2, 1) && rd(&v.ext, 1, 1) && rdbuf(&v.str,v.sz) ? EXT : ERR; - break; case 0xc9: v.type = rd(&v.sz, 4, 1) && rd(&v.ext, 1, 1) && rdbuf(&v.str,v.sz) ? EXT : ERR; - } - return *w = v, v.type != ERR; -} -bool msgunpack_nil() { - return msgunpack_var(&in.v) && (in.v.type == NIL); -} -bool msgunpack_chr(bool *chr) { - return msgunpack_var(&in.v) && (*chr = in.v.chr, in.v.type == BOL); -} -bool msgunpack_uns(uint64_t *uns) { - return msgunpack_var(&in.v) && (*uns = in.v.uns, in.v.type == UNS); -} -bool msgunpack_int(int64_t *sig) { - return msgunpack_var(&in.v) && (*sig = in.v.sig, in.v.type == SIG); -} -bool msgunpack_flt(float *flt) { - return msgunpack_var(&in.v) && (*flt = in.v.flt, in.v.type == FLT); -} -bool msgunpack_dbl(double *dbl) { - return msgunpack_var(&in.v) && (*dbl = in.v.flt, in.v.type == FLT); -} -bool msgunpack_bin(void **bin, uint64_t *len) { - return msgunpack_var(&in.v) && (*bin = in.v.bin, *len = in.v.sz, in.v.type == BIN); -} -bool msgunpack_str(char **str) { - return msgunpack_var(&in.v) && (str ? *str = in.v.str, in.v.type == STR : in.v.type == STR); -} -bool msgunpack_ext(uint8_t *key, void **val, uint64_t *len) { - return msgunpack_var(&in.v) && (*key = in.v.ext, *val = in.v.bin, *len = in.v.sz, in.v.type == EXT); -} -bool msgunpack_arr(uint64_t *len) { - return msgunpack_var(&in.v) && (*len = in.v.sz, in.v.type == ARR); -} -bool msgunpack_map(uint64_t *len) { - return msgunpack_var(&in.v) && (*len = in.v.sz, in.v.type == MAP); -} - - -int msgpack(const char *fmt, ... ) { - int count = 0; - va_list vl; - va_start(vl, fmt); - while( *fmt ) { - char f = *fmt++; - switch( f ) { - break; case '{': { int i = va_arg(vl, int64_t); count += msgpack_map( i ); } - break; case '[': { int i = va_arg(vl, int64_t); count += msgpack_arr( i ); } - break; case 'b': { bool v = !!va_arg(vl, int64_t); count += msgpack_chr(v); } - break; case 'e': { uint8_t k = va_arg(vl, uint64_t); void *v = va_arg(vl, void*); size_t l = va_arg(vl, uint64_t); count += msgpack_ext( k, v, l ); } - break; case 'n': { count += msgpack_nil(); } - break; case 'p': { void *p = va_arg(vl, void*); size_t l = va_arg(vl, uint64_t); count += msgpack_bin( p, l ); } - break; case 's': { const char *v = va_arg(vl, const char *); count += msgpack_str(v); } - break; case 'u': { uint64_t v = va_arg(vl, uint64_t); count += msgpack_uns(v); } - break; case 'd': case 'i': { int64_t v = va_arg(vl, int64_t); count += msgpack_int(v); } - break; case 'f': case 'g': { double v = va_arg(vl, double); count += msgpack_flt(v); } - default: /*count = 0;*/ break; - } - } - va_end(vl); - return count; -} -int msgunpack(const char *fmt, ... ) { - int count = 0; - va_list vl; - va_start(vl, fmt); - while( *fmt ) { - char f = *fmt++; - switch( f ) { - break; case '{': { int64_t *i = va_arg(vl, int64_t*); count += msgunpack_map( i ); } - break; case '[': { int64_t *i = va_arg(vl, int64_t*); count += msgunpack_arr( i ); } - break; case 'f': { float *v = va_arg(vl, float*); count += msgunpack_flt(v); } - break; case 'g': { double *v = va_arg(vl, double*); count += msgunpack_dbl(v); } - break; case 's': { char **v = va_arg(vl, char **); count += msgunpack_str(v); } -// break; case 'b': { bool *v = !!va_arg(vl, bool*); count += msgunpack_chr(v); } -// break; case 'e': { uint8_t k = va_arg(vl, uint64_t); void *v = va_arg(vl, void*); size_t l = va_arg(vl, uint64_t); count += msgunpack_ext( k, v, l ); } -// break; case 'n': { count += msgunpack_nil(); } - break; case 'p': { void *p = va_arg(vl, void*); uint64_t l = va_arg(vl, uint64_t); count += msgunpack_bin( p, &l ); } -// break; case 'u': { uint64_t v = va_arg(vl, uint64_t); count += msgunpack_uns(v); } -// break; case 'd': case 'i': { int64_t v = va_arg(vl, int64_t); count += msgunpack_int(v); } - default: /*count = 0;*/ break; - } - } - va_end(vl); - return count; -} - -#if 0 -AUTORUN { -# define unit(title) -# define data(data) msgunpack_new(data, sizeof(data) -1 ) -# define TEST(expr) test(msgunpack_var(&obj) && !!(expr)) - - int test_len; - const char *test_data = 0; - struct variant obj = {0}; - - /* - * Test vectors are derived from - * `https://github.com/ludocode/mpack/blob/v0.8.2/test/test-write.c`. - */ - - unit("(minposfixint)"); - data("\x00"); - TEST(obj.type == UNS && obj.sz == 1 && obj.uns == 0); - - unit("(maxposfixint)"); - data("\x7f"); - TEST(obj.type == UNS && obj.sz == 1 && obj.uns == 127); - - unit("(maxnegfixint)"); - data("\xe0"); - TEST(obj.type == SIG && obj.sz == 1 && obj.uns == -32); - - unit("(minnegfixint)"); - data("\xff"); - TEST(obj.type == SIG && obj.sz == 1 && obj.uns == -1); - - unit("(uint8)"); - data("\xcc\0"); - TEST(obj.type == UNS && obj.sz == 1 && obj.uns == 0); - - unit("(uint16)"); - data("\xcd\0\0"); - TEST(obj.type == UNS && obj.sz == 2 && obj.uns == 0); - - unit("(uint32)"); - data("\xce\0\0\0\0"); - TEST(obj.type == UNS && obj.sz == 4 && obj.uns == 0); - - unit("(uint64)"); - data("\xcf\0\0\0\0\0\0\0\0"); - TEST(obj.type == UNS && obj.sz == 8 && obj.uns == 0); - - unit("(float32)"); - data("\xca\0\0\0\0"); - TEST(obj.type == FLT && obj.sz == 4 && obj.uns == 0); - - unit("(float64)"); - data("\xcb\0\0\0\0\0\0\0\0"); - TEST(obj.type == FLT && obj.sz == 8 && obj.uns == 0); - - unit("(string)"); - data("\xa5Hello"); - TEST(obj.type == STR && obj.sz == 5 && !strcmp(obj.str, "Hello")); - - unit("(str8)"); - data("\xd9\x05Hello"); - TEST(obj.type == STR && obj.sz == 5 && !strcmp(obj.str, "Hello")); - - unit("(str16)"); - data("\xda\0\x05Hello"); - TEST(obj.type == STR && obj.sz == 5 && !strcmp(obj.str, "Hello")); - - unit("(str32)"); - data("\xdb\0\0\0\x05Hello"); - TEST(obj.type == STR && obj.sz == 5 && !strcmp(obj.str, "Hello")); - - unit("(array)"); - data("\x91\x01"); - TEST(obj.type == ARR && obj.sz == 1); - - unit("(array8)"); - data("\x91\x01"); - TEST(obj.type == ARR && obj.sz == 1); - - unit("(array16)"); - data("\xdc\0\x01\x01"); - TEST(obj.type == ARR && obj.sz == 1); - - unit("(map8)"); - data("\x81\x01\x01"); - TEST(obj.type == MAP && obj.sz == 1); - TEST(obj.type == UNS && obj.sz == 1 && obj.uns == 1); - TEST(obj.type == UNS && obj.sz == 1 && obj.uns == 1); - - unit("(map32)"); - data("\xdf\0\0\0\x01\xa5Hello\x01"); - TEST(obj.type == MAP && obj.sz == 1); - TEST(obj.type == STR && obj.sz == 5 && !strcmp(obj.str, "Hello")); - TEST(obj.type == UNS && obj.sz == 1 && obj.uns == 1); - - unit("(+fixnum)"); - data("\x00"); TEST(obj.type == UNS && obj.uns == 0); - data("\x01"); TEST(obj.type == UNS && obj.uns == 1); - data("\x02"); TEST(obj.type == UNS && obj.uns == 2); - data("\x0f"); TEST(obj.type == UNS && obj.uns == 0x0f); - data("\x10"); TEST(obj.type == UNS && obj.uns == 0x10); - data("\x7f"); TEST(obj.type == UNS && obj.uns == 0x7f); - - unit("(-fixnum)"); - data("\xff"); TEST(obj.type == SIG && obj.sig == -1); - data("\xfe"); TEST(obj.type == SIG && obj.sig == -2); - data("\xf0"); TEST(obj.type == SIG && obj.sig == -16); - data("\xe0"); TEST(obj.type == SIG && obj.sig == -32); - - unit("(+int)"); - data("\xcc\x80"); TEST(obj.type == UNS && obj.uns == 0x80); - data("\xcc\xff"); TEST(obj.type == UNS && obj.uns == 0xff); - data("\xcd\x01\x00"); TEST(obj.type == UNS && obj.uns == 0x100); - data("\xcd\xff\xff"); TEST(obj.type == UNS && obj.uns == 0xffff); - data("\xce\x00\x01\x00\x00"); TEST(obj.type == UNS && obj.uns == 0x10000); - data("\xce\xff\xff\xff\xff"); TEST(obj.type == UNS && obj.uns == 0xffffffffull); - data("\xcf\x00\x00\x00\x01\x00\x00\x00\x00"); TEST(obj.type == UNS && obj.uns == 0x100000000ull); - data("\xcf\xff\xff\xff\xff\xff\xff\xff\xff"); TEST(obj.type == UNS && obj.uns == 0xffffffffffffffffull); - - unit("(-int)"); - data("\xd0\xdf"); TEST(obj.type == SIG && obj.sig == -33); - data("\xd0\x80"); TEST(obj.type == SIG && obj.sig == -128); - data("\xd1\xff\x7f"); TEST(obj.type == SIG && obj.sig == -129); - data("\xd1\x80\x00"); TEST(obj.type == SIG && obj.sig == -32768); - data("\xd2\xff\xff\x7f\xff"); TEST(obj.type == SIG && obj.sig == -32769); - data("\xd2\x80\x00\x00\x00"); TEST(obj.type == SIG && obj.sig == -2147483648ll); - data("\xd3\xff\xff\xff\xff\x7f\xff\xff\xff"); TEST(obj.type == SIG && obj.sig == -2147483649ll); - data("\xd3\x80\x00\x00\x00\x00\x00\x00\x00"); TEST(obj.type == SIG && obj.sig == INT64_MIN); - - unit("(misc)"); - data("\xc0"); TEST(obj.type == NIL && obj.chr == 0); - data("\xc2"); TEST(obj.type == BOL && obj.chr == 0); - data("\xc3"); TEST(obj.type == BOL && obj.chr == 1); - - data("\x90"); TEST(obj.type == ARR && obj.sz == 0); - - data("\x91\xc0"); - TEST(obj.type==ARR && obj.sz==1); - TEST(obj.type==NIL); - - data("\x9f\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e"); - TEST(obj.type==ARR && obj.sz==15); - for(int i = 0; i < 15; ++i) { - TEST(obj.type==UNS && obj.sig==i); - } - - data("\xdc\x00\x10\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c" - "\x0d\x0e\x0f"); - TEST(obj.type==ARR && obj.sz==16); - for(unsigned i = 0; i < 16; ++i) { - TEST(obj.type == UNS && obj.uns == i); - } - - data("\x80"); - TEST(obj.type == MAP && obj.sz == 0); - - data("\x81\xc0\xc0"); - TEST(obj.type == MAP && obj.sz == 1); - TEST(obj.type == NIL); - TEST(obj.type == NIL); - - data("\x82\x00\x00\x01\x01"); - TEST(obj.type == MAP && obj.sz == 2); - TEST(obj.type == UNS && obj.sig == 0); - TEST(obj.type == UNS && obj.sig == 0); - TEST(obj.type == UNS && obj.sig == 1); - TEST(obj.type == UNS && obj.sig == 1); - - data("\x8f\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e" - "\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d"); - TEST(obj.type == MAP && obj.sz == 15); - for(unsigned i = 0; i < 15; ++i) { - TEST(obj.type == UNS && obj.uns == i*2+0); - TEST(obj.type == UNS && obj.uns == i*2+1); - } - - data("\xde\x00\x10\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c" - "\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c" - "\x1d\x1e\x1f"); - TEST(obj.type == MAP && obj.sz == 16); - for(unsigned i = 0; i < 16; ++i) { - TEST(obj.type == UNS && obj.uns == i*2+0); - TEST(obj.type == UNS && obj.uns == i*2+1); - } - - data("\x91\x90"); - test( obj.type == ARR && obj.sz == 1 ); - test( obj.type == ARR && obj.sz == 0 ); - - data("\x93\x90\x91\x00\x92\x01\x02"); - test( obj.type == ARR && obj.sz == 3 ); - test( obj.type == ARR && obj.sz == 0 ); - test( obj.type == ARR && obj.sz == 1 ); - test( obj.type == UNS && obj.uns == 0 ); - test( obj.type == ARR && obj.sz == 2 ); - test( obj.type == UNS && obj.uns == 1 ); - test( obj.type == UNS && obj.uns == 2 ); - - data("\x95\x90\x91\xc0\x92\x90\x91\xc0\x9f\x00\x01\x02\x03\x04\x05\x06" - "\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\xdc\x00\x10\x00\x01\x02\x03\x04" - "\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"); - test( obj.type == ARR && obj.sz == 5 ); - test( obj.type == ARR && obj.sz == 0 ); - test( obj.type == ARR && obj.sz == 1 ); - test( obj.type == NIL ); - test( obj.type == ARR && obj.sz == 2 ); - test( obj.type == ARR && obj.sz == 0 ); - test( obj.type == ARR && obj.sz == 1 ); - test( obj.type == NIL ); - test( obj.type == ARR && obj.sz == 15 ); - for( unsigned i = 0; i < 15; ++i ) { - test( obj.type == UNS && obj.uns == i ); - } - test( obj.type == ARR && obj.sz == 16 ); - for( unsigned i = 0; i < 15; ++i ) { - test( obj.type == UNS && obj.uns == i ); - } - - data("\x85\x00\x80\x01\x81\x00\xc0\x02\x82\x00\x80\x01\x81\xc0\xc0\x03" - "\x8f\x00\x00\x01\x01\x02\x02\x03\x03\x04\x04\x05\x05\x06\x06\x07" - "\x07\x08\x08\x09\x09\x0a\x0a\x0b\x0b\x0c\x0c\x0d\x0d\x0e\x0e\x04" - "\xde\x00\x10\x00\x00\x01\x01\x02\x02\x03\x03\x04\x04\x05\x05\x06" - "\x06\x07\x07\x08\x08\x09\x09\x0a\x0a\x0b\x0b\x0c\x0c\x0d\x0d\x0e" - "\x0e\x0f\x0f"); - TEST(obj.type == MAP && obj.sz == 5); - TEST(obj.type == UNS && obj.uns == 0); - TEST(obj.type == MAP && obj.sz == 0); - TEST(obj.type == UNS && obj.uns == 1); - TEST(obj.type == MAP && obj.sz == 1); - TEST(obj.type == UNS && obj.uns == 0); - TEST(obj.type == NIL); - TEST(obj.type == UNS && obj.uns == 2); - TEST(obj.type == MAP && obj.sz == 2); - TEST(obj.type == UNS && obj.uns == 0); - TEST(obj.type == MAP && obj.sz == 0); - TEST(obj.type == UNS && obj.uns == 1); - TEST(obj.type == MAP && obj.sz == 1); - TEST(obj.type == NIL); - TEST(obj.type == NIL); - TEST(obj.type == UNS && obj.uns == 3); - TEST(obj.type == MAP && obj.sz == 15); - for( unsigned i = 0; i < 15; ++i ) { - TEST(obj.type == UNS && obj.uns == i); - TEST(obj.type == UNS && obj.uns == i); - } - TEST(obj.type == UNS && obj.uns == 4); - TEST(obj.type == MAP && obj.sz == 16); - for( unsigned i = 0; i < 16; ++i ) { - TEST(obj.type == UNS && obj.uns == i); - TEST(obj.type == UNS && obj.uns == i); - } - - data("\x85\xd0\xd1\x91\xc0\x90\x81\xc0\x00\xc0\x82\xc0\x90\x04\x05\xa5" - "\x68\x65\x6c\x6c\x6f\x93\xa7\x62\x6f\x6e\x6a\x6f\x75\x72\xc0\xff" - "\x91\x5c\xcd\x01\x5e"); - TEST(obj.type == MAP && obj.sz == 5); - TEST(obj.type == SIG && obj.sig == -47); - TEST(obj.type == ARR && obj.sz == 1); - TEST(obj.type == NIL); - TEST(obj.type == ARR && obj.sz == 0); - TEST(obj.type == MAP && obj.sz == 1); - TEST(obj.type == NIL); - TEST(obj.type == UNS && obj.uns == 0); - TEST(obj.type == NIL); - TEST(obj.type == MAP && obj.sz == 2); - TEST(obj.type == NIL); - TEST(obj.type == ARR && obj.sz == 0); - TEST(obj.type == UNS && obj.uns == 4); - TEST(obj.type == UNS && obj.uns == 5); - TEST(obj.type == STR && !strcmp(obj.str, "hello")); - TEST(obj.type == ARR && obj.sz == 3); - TEST(obj.type == STR && !strcmp(obj.str, "bonjour")); - TEST(obj.type == NIL); - TEST(obj.type == SIG && obj.sig == -1); - TEST(obj.type == ARR && obj.sz == 1); - TEST(obj.type == UNS && obj.uns == 92); - TEST(obj.type == UNS && obj.uns == 350); - - data("\x82\xa7" "compact" "\xc3\xa6" "schema" "\x00"); - TEST(obj.type == MAP && obj.sz == 2); - TEST(obj.type == STR && obj.sz == 7 && !strcmp(obj.str, "compact")); - TEST(obj.type == BOL && obj.chr == 1); - TEST(obj.type == STR && obj.sz == 6 && !strcmp(obj.str, "schema")); - TEST(obj.type == UNS && obj.sz == 1 && obj.uns == 0); - -# undef TEST -# undef data -# undef unit -} - -bool vardump( struct variant *w ) { - static int tabs = 0; - struct variant v = *w; - printf("%.*s", tabs, "\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t"); - switch( v.type ) { - default: case ERR: - if( !msgunpack_eof() ) printf("ERROR: unknown tag type (%02X)\n", (int)v.type); - return false; - break; case NIL: printf("(%s)\n", "null"); - break; case BOL: printf("bool: %d\n", v.chr); - break; case SIG: printf("int: %lld\n", v.sig); - break; case UNS: printf("uint: %llu\n", v.uns); - break; case FLT: printf("float: %g\n", v.flt); - break; case STR: printf("string: '%s'\n", v.str); - break; case BIN: { for( size_t n = 0; n < v.sz; n++ ) printf("%s%02x(%c)", n > 0 ? " ":"binary: ", v.str[n], v.str[n] >= 32 ? v.str[n] : '.'); puts(""); } - break; case EXT: { printf("ext: [%02X (%d)] ", v.ext, v.ext); for( size_t n = 0; n < v.sz; n++ ) printf("%s%02x(%c)", n > 0 ? " ":"", v.str[n], v.str[n] >= 32 ? v.str[n] : '.'); puts(""); } - break; case ARR: { - ++tabs; puts("["); - for( size_t n = v.sz; n-- > 0; ) { - if( !msgunpack_var(&v) || !vardump(&v) ) return false; - } - --tabs; puts("]"); - } - break; case MAP: { - ++tabs; puts("{"); - for( size_t n = v.sz; n-- > 0; ) { - if( !msgunpack_var(&v) || !vardump(&v) ) return false; - if( !msgunpack_var(&v) || !vardump(&v) ) return false; - } - --tabs; puts("}"); - }} - return true; -} - -void testdump( const char *fname ) { - FILE *fp = fopen(fname, "rb"); - if( !fp ) { - fputs("Cannot read input stream", stderr); - } else { - if( msgunpack_new(fp, 0) ) { - struct variant v; - while( msgunpack_var(&v) ) { - vardump(&v); - } - if( msgunpack_err() ) { - fputs("Error while unpacking", stderr); - } - } - fclose(fp); - } -} - -void testwrite(const char *outfile) { - char buf[256]; - msgpack_new(buf, 256); - int len = msgpack("ddufs [dddddddd-dddddddd {sisi bne"/*bp0*/, - -123LL, 123LL, 123456ULL, 3.14159f, "hello world", - 16ULL, - -31LL, -32LL, -127LL, -128LL, -255LL, -256LL, -511LL, -512LL, // ,121, 3, "hi", - +31LL, +32LL, +127LL, +128LL, +255LL, +256LL, +511LL, +512LL, // ,121, 3, "hi", - 2ULL, - "hello", -123LL, - "world", -456LL, - 1ULL, - 0xeeULL, "this is an EXT type", sizeof("this is an EXT type")-1 - ); - hexdump(buf, len); - - FILE *fp = fopen(outfile, "wb"); - if( fp ) { - fwrite( buf, len, 1, fp ); - fclose(fp); - } -} - -AUTORUN { - testwrite("out.mp"); - testdump("out.mp"); -} -#endif - -// ---------------------------------------------------------------------------- -// STRUCT PACKING -// Based on code by Brian "Beej Jorgensen" Hall (public domain) [1]. -// Based on code by Ginger Bill's half<->float (public domain) [2]. -// - rlyeh, public domain. -// -// pack.c -- perl/python-ish pack/unpack functions -// like printf and scanf, but for binary data. -// -// format flags: -// (<) little endian (>) big endian (! also) (=) native endian -// (c) 8-bit char (b) 8-bit byte -// (h) 16-bit half (w) 16-bit word -// (i) 32-bit integer (u) 32-bit unsigned (f) 32-bit float -// (l) 64-bit long (q) 64-bit quad (d) 64-bit double -// (v) varint -// (s) string (64-bit varint length prepended) -// (S) string (32-bit fixed length prepended) -// (m) memblock (64-bit varint length prepended) -// (M) memblock (32-bit fixed length prepended) -// (z) memblock (zeroed) -// (#) number of arguments processed (only when unpacking) -// -// @todo: -// - (x) document & test flag -// @totest: -// - (s) string (64-bit variable length automatically prepended) -// - (S) string (32-bit fixed length automatically prepended) -// - (m) memblock (64-bit variable length automatically prepended) -// - (M) memblock (32-bit fixed length automatically prepended) -// - (z) memblock (zeroed) -// - (#) number of arguments processed (only when unpacking) -// -// @refs: -// [1] http://beej.us/guide/bgnet/output/html/multipage/advanced.html#serialization (Modified to encode NaN and Infinity as well.) -// [2] https://github.com/gingerBill/gb -// [3] http://www.mrob.com/pub/math/floatformats.html#minifloat -// [4] microfloat: [0.002 to 240] range. -// [5] half float: can approximate any 16-bit unsigned integer or its reciprocal to 3 decimal places. - -// b/f packing ----------------------------------------------------------------- - -int loadb_(const uint8_t *buf, const char *fmt, va_list ap) { - uint64_t args = 0; - const uint8_t *buf0 = buf; - char tmp[16+1]; - //uint64_t size = 0, len; - int32_t len, count, maxstrlen=0; - int le = 0; - - if(!buf) // buffer estimation - for(; *fmt != '\0'; fmt++) { - switch(*fmt) { - default: if (!isdigit(*fmt)) return 0; - break; case '!': case '>': case '<': case '=': case ' ': // 0-bit endianness - break; case 'c': case 'b': { int8_t c = (int8_t)va_arg(ap, int); buf += 1; } // 8-bit promoted - break; case 'h': case 'w': { int16_t h = (int16_t)va_arg(ap, int); buf += 2; } // 16-bit promoted - break; case 'i': case 'u': { int32_t l = va_arg(ap, int32_t); buf += 4; } // 32-bit - break; case 'l': case 'q': { int64_t L = va_arg(ap, int64_t); buf += 8; } // 64-bit - break; case 'f': { float f = (float)va_arg(ap, double); buf += 4; } // 32-bit float promoted - break; case 'd': { double F = (double)va_arg(ap, double); buf += 8; } // 64-bit float (double) - break; case 'v': { int64_t L = va_arg(ap, int64_t); buf += pack64iv(tmp, L); } // varint (8,16,32,64 ...) - break; case 's': { char* s = va_arg(ap, char*); len = strlen(s); buf += pack64iv(tmp, len) + len; } // string, 64-bit variable length prepended - break; case 'S': { char* s = va_arg(ap, char*); len = strlen(s); buf += 4 + len; } // string, 32-bit fixed length prepended - break; case 'm': { int len = va_arg(ap, int); char *s = va_arg(ap, char*); buf += pack64iv(tmp, len) + len; } // memblock, 64-bit variable length prepended - break; case 'M': { int len = va_arg(ap, int); char *s = va_arg(ap, char*); buf += 4 + len; } // memblock, 32-bit fixed length prepended - break; case 'z': { int len = va_arg(ap, int); buf += len; } // memblock (zeroed) - } - } - - if(buf) // buffer unpacking - for(; *fmt != '\0'; fmt++) { - switch(*fmt) { - default: - if (isdigit(*fmt)) { // track max str len - maxstrlen = maxstrlen * 10 + (*fmt-'0'); - } else { - return 0; - } - break; case ' ': - break; case '!': le = 0; - break; case '>': le = 0; - break; case '<': le = 1; - break; case '=': le = is_little() ? 1 : 0; - break; case 'c': case 'b': ++args; { // 8-bit - int8_t *v = va_arg(ap, int8_t*); - *v = *buf <= 0x7f ? (int8_t)*buf : -1 -(uint8_t)(0xffu - *buf); - buf += 1; - } - break; case 'h': case 'w': ++args; { // 16-bit - int16_t *v = va_arg(ap, int16_t*); - *v = unpack16i(buf, le); - buf += 2; - } - break; case 'i': case 'u': ++args; { // 32-bit - int32_t *v = va_arg(ap, int32_t*); - *v = unpack32i(buf, le); - buf += 4; - } - break; case 'l': case 'q': ++args; { // 64-bit - int64_t *v = va_arg(ap, int64_t*); - *v = unpack64i(buf, le); - buf += 8; - } - break; case 'v': ++args; { // varint (8,16,32,64 ...) - int64_t *L = va_arg(ap, int64_t*); - buf += unpack64iv(buf, L); - } - break; case 'f': ++args; { // 32-bit float - float *v = va_arg(ap, float*); - int32_t i = unpack32i(buf, le); - *v = unpack754_32(i); - buf += 4; - } - break; case 'd': ++args; { // 64-bit float (double) - double *v = va_arg(ap, double*); - int64_t i = unpack64i(buf, le); - *v = unpack754_64(i); - buf += 8; - } - break; case 'S': ++args; { // string, 32-bit fixed length prepended - char *s = va_arg(ap, char*); - int64_t vlen = unpack32i(buf, le), read = 4; - count = (maxstrlen > 0 && vlen >= maxstrlen ? maxstrlen - 1 : vlen); - memcpy(s, buf + read, count); - s[count] = '\0'; - buf += read + vlen; - } - break; case 's': ++args; { // string, 64-bit variable length prepended - char *s = va_arg(ap, char*); - int64_t vlen, read = unpack64iv(buf, &vlen); - count = (maxstrlen > 0 && vlen >= maxstrlen ? maxstrlen - 1 : vlen); - memcpy(s, buf + read, count); - s[count] = '\0'; - buf += read + vlen; - } - break; case 'M': ++args; { // memblock, 32-bit fixed length prepended - char *s = va_arg(ap, char*); - int64_t vlen = unpack64iv(buf, &vlen), read = 4; - count = vlen; //(maxstrlen > 0 && vlen >= maxstrlen ? maxstrlen - 1 : vlen); - memcpy(s, buf + read, count); - //s[count] = '\0'; - buf += read + vlen; - } - break; case 'm': ++args; { // memblock, 64-bit variable length prepended - char *s = va_arg(ap, char*); - int64_t vlen, read = unpack64iv(buf, &vlen); - count = vlen; //(maxstrlen > 0 && vlen >= maxstrlen ? maxstrlen - 1 : vlen); - memcpy(s, buf + read, count); - //s[count] = '\0'; - buf += read + vlen; - } - break; case 'z': ++args; { // zero-init mem block - int *l = va_arg(ap, int*); - const uint8_t *prev = buf; - while( *buf == 0 ) ++buf; - *l = buf - prev; - } - break; case '#': { - int *l = va_arg(ap, int*); - *l = args; - } - } - - if (!isdigit(*fmt)) { - maxstrlen = 0; - } - } - - return (int)( buf - buf0 ); -} - -int saveb_(uint8_t *buf, const char *fmt, va_list ap) { - uint64_t size = 0, len; - int le = 0; - - // buffer estimation - if( !buf ) { - return loadb_(buf, fmt, ap); // + strlen(buf) * 17; // worse (v)arint estimation for 128-bit ints (17 bytes each) - } - - // buffer packing - for(; *fmt != '\0'; fmt++) { - switch(*fmt) { - default: size = 0; // error - break; case '!': le = 0; - break; case '>': le = 0; - break; case '<': le = 1; - break; case ' ': le = le; - break; case '=': le = is_little() ? 1 : 0; - break; case 'c': case 'b': { // 8-bit - int v = (int8_t)va_arg(ap, int /*promoted*/ ); - *buf++ = (v>>0)&0xff; - size += 1; - } - break; case 'h': case 'w': { // 16-bit - int v = (int16_t)va_arg(ap, int /*promoted*/ ); - pack16i(buf, v, le); - buf += 2; - size += 2; - } - break; case 'i': case 'u': { // 32-bit - int32_t v = va_arg(ap, int32_t); - pack32i(buf, v, le); - buf += 4; - size += 4; - } - break; case 'l': case 'q': { // 64-bit - int64_t v = va_arg(ap, int64_t); - pack64i(buf, v, le); - buf += 8; - size += 8; - } - break; case 'v': { // varint (8,16,32,64 ...) - int64_t v = va_arg(ap, int64_t); - int64_t L = pack64iv(buf, v); - buf += L; - size += L; - } - break; case 'f': { // 32-bit float - double v = (float)va_arg(ap, double /*promoted*/ ); - int32_t i = pack754_32(v); // convert to IEEE 754 - pack32i(buf, i, le); - buf += 4; - size += 4; - } - break; case 'd': { // 64-bit float (double) - double v = (double)va_arg(ap, double); - int64_t i = pack754_64(v); // convert to IEEE 754 - pack64i(buf, i, le); - buf += 8; - size += 8; - } - break; case 'S': { // string, 32-bit fixed length prepended - char* s = va_arg(ap, char*); - int len = strlen(s); - pack32i(buf, len, le); - memcpy(buf + 4, s, len); - buf += 4 + len; - size += 4 + len; - } - break; case 's': { // string, 64-bit variable length prepended - char* s = va_arg(ap, char*); - int len = strlen(s); - int64_t L = pack64iv(buf, len); - memcpy(buf + L, s, len); - buf += L + len; - size += L + len; - } - break; case 'M': { // memblock, 32-bit fixed length prepended - int len = va_arg(ap, int); - char* s = va_arg(ap, char*); - pack32i(buf, len, le); - memcpy(buf + 4, s, len); - buf += 4 + len; - size += 4 + len; - } - break; case 'm': { // memblock, 64-bit variable length prepended - int len = va_arg(ap, int); - char* s = va_arg(ap, char*); - int64_t L = pack64iv(buf, len); - memcpy(buf + L, s, len); - buf += L + len; - size += L + len; - } - break; case 'z': { // memblock (zeroed) - int len = va_arg(ap, int); - memset(buf, 0, len); - buf += len; - size += len; - } - } - } - - return (int)size; -} - - -int saveb(uint8_t *buf, const char *fmt, ...) { - va_list ap; - va_start(ap, fmt); - int rc = saveb_( buf, fmt, ap); - va_end(ap); - return rc; -} -int loadb(const uint8_t *buf, const char *fmt, ...) { - va_list ap; - va_start(ap, fmt); - int rc = loadb_( buf, fmt, ap); - va_end(ap); - return rc; -} - -int savef(FILE *fp, const char *fmt, ...) { - va_list ap; - va_start(ap, fmt); - - // estimate bytes - int req = saveb_( 0, fmt, ap); - - char stack[4096]; - char *buf = req < 4096 ? stack : (char*)calloc(1, req + 1 ); - int rc = saveb_(buf, fmt, ap); - fwrite(buf, req,1, fp); - if( !(req < 4096) ) free(buf); - - va_end(ap); - return rc; -} -int loadf(FILE *fp, const char *fmt, ...) { - va_list ap; - va_start(ap, fmt); - - // estimate bytes - int req = loadb_( 0, fmt, ap) * 2; // *2 in case it is underestimated - - char stack[4096]; - char *buf = req < 4096 ? stack : (char*)calloc(1, req + 1 ); - fread(buf, req,1, fp); - int rc = loadb_(buf, fmt, ap); - if( !(req < 4096) ) free(buf); - - va_end(ap); - return rc; -} - -#if 0 -AUTORUN { - const char *dna = "3b8bhbhbbhhbhhhuu"; // "1c1h212122122233"; "i3c8chchchhchhhdd" - - struct bootsector { - uint8_t jump_instruction[3]; - uint8_t oem_name[8]; - uint16_t bytes_per_sector; - uint8_t sectors_per_cluster; - uint16_t reserved_sectors; - uint8_t fat_copies; - uint16_t max_dirs; - uint16_t sector_count; - uint8_t media_descriptor; - uint16_t sectors_per_fat; - uint16_t sectors_per_head; - uint16_t heads; - uint32_t hidden_sectors; - uint32_t sector_countz; - } fat = { {0,1,2},{3,4,5,6,7,8,9,10},11,12,13,14,15,16,17,18,19,20,21,22 }; - hexdump(&fat, sizeof(struct bootsector)); - - FILE *fp = fopen("test.mbr", "wb"); - savef(fp, dna, &fat); // - fclose(fp); - - memset(&fat, 0, sizeof(struct bootsector)); - - fp = fopen("test.mbr", "rb"); - loadf(fp, dna, &fat); - fclose(fp); - - hexdump(&fat, sizeof(struct bootsector)); -} -#endif - -// ---------------------------------------------------------------------------- -// compression api - -static struct zcompressor { - // id of compressor - unsigned enumerator; - // name of compressor - const char name1, *name4, *name; - // returns worst case compression estimation for selected flags - unsigned (*bounds)(unsigned bytes, unsigned flags); - // returns number of bytes written. 0 if error. - unsigned (*encode)(const void *in, unsigned inlen, void *out, unsigned outcap, unsigned flags); - // returns number of excess bytes that will be overwritten when decoding. - unsigned (*excess)(unsigned flags); - // returns number of bytes written. 0 if error. - unsigned (*decode)(const void *in, unsigned inlen, void *out, unsigned outcap); -} zlist[] = { - { COMPRESS_RAW, '0', "raw", "raw", raw_bounds, raw_encode, raw_excess, raw_decode }, - { COMPRESS_PPP, 'p', "ppp", "ppp", ppp_bounds, ppp_encode, ppp_excess, ppp_decode }, - { COMPRESS_ULZ, 'u', "ulz", "ulz", ulz_bounds, ulz_encode, ulz_excess, ulz_decode }, - { COMPRESS_LZ4, '4', "lz4x", "lz4x", lz4x_bounds, lz4x_encode, lz4x_excess, lz4x_decode }, - { COMPRESS_CRUSH, 'c', "crsh", "crush", crush_bounds, crush_encode, crush_excess, crush_decode }, - { COMPRESS_DEFLATE, 'd', "defl", "deflate", deflate_bounds, deflate_encode, deflate_excess, deflate_decode }, - { COMPRESS_LZP1, '1', "lzp1", "lzp1", lzp1_bounds, lzp1_encode, lzp1_excess, lzp1_decode }, - { COMPRESS_LZMA, 'm', "lzma", "lzma", lzma_bounds, lzma_encode, lzma_excess, lzma_decode }, - { COMPRESS_BALZ, 'b', "balz", "balz", balz_bounds, balz_encode, balz_excess, balz_decode }, - { COMPRESS_LZW3, 'w', "lzw3", "lzrw3a", lzrw3a_bounds, lzrw3a_encode, lzrw3a_excess, lzrw3a_decode }, - { COMPRESS_LZSS, 's', "lzss", "lzss", lzss_bounds, lzss_encode, lzss_excess, lzss_decode }, - { COMPRESS_BCM, 'B', "bcm", "bcm", bcm_bounds, bcm_encode, bcm_excess, bcm_decode }, - { COMPRESS_ZLIB, 'z', "zlib", "zlib", deflate_bounds, deflatez_encode, deflate_excess, deflatez_decode }, -}; - -enum { COMPRESS_NUM = 14 }; - -static char *znameof(unsigned flags) { - static __thread char buf[16]; - snprintf(buf, 16, "%4s.%c", zlist[(flags>>4)&0x0F].name4, "0123456789ABCDEF"[flags&0xF]); - return buf; -} -unsigned zencode(void *out, unsigned outlen, const void *in, unsigned inlen, unsigned flags) { - return zlist[(flags >> 4) % COMPRESS_NUM].encode(in, inlen, (uint8_t*)out, outlen, flags & 0x0F); -} -unsigned zdecode(void *out, unsigned outlen, const void *in, unsigned inlen, unsigned flags) { - return zlist[(flags >> 4) % COMPRESS_NUM].decode((uint8_t*)in, inlen, out, outlen); -} -unsigned zbounds(unsigned inlen, unsigned flags) { - return zlist[(flags >> 4) % COMPRESS_NUM].bounds(inlen, flags & 0x0F); -} -unsigned zexcess(unsigned flags) { - return zlist[(flags >> 4) % COMPRESS_NUM].excess(flags & 0x0F); -} - -// ---------------------------------------------------------------------------- -// BASE92 en/decoder -// THE BEERWARE LICENSE (Revision 42): -// wrote this file. As long as you retain this notice you -// can do whatever you want with this stuff. If we meet some day, and you -// think this stuff is worth it, you can buy me a beer in return -// - Nathan Hwang (thenoviceoof) - -unsigned base92_bounds(unsigned inlen) { - unsigned size = (inlen * 8) % 13, extra_null = 1; - if(size == 0) return 2 * ((inlen * 8) / 13) + extra_null; - if(size < 7) return 2 * ((inlen * 8) / 13) + extra_null + 1; - return 2 * ((inlen * 8) / 13) + extra_null + 2; -} - -unsigned base92_encode(const void* in, unsigned inlen, void *out, unsigned size) { - char *res = (char *)out; - const unsigned char *str = (const unsigned char *)in; - unsigned int j = 0; // j for encoded - unsigned long workspace = 0; // bits holding bin - unsigned short wssize = 0; // number of good bits in workspace - unsigned char c; - const unsigned char ENCODE_MAPPING[256] = { - 33, 35, 36, 37, 38, 39, 40, 41, 42, 43, - 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, - 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, - 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, - 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, - 94, 95, 97, 98, 99, 100, 101, 102, 103, 104, - 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, - 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, - 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 - }; - if (inlen) { - for (unsigned i = 0; i < inlen; i++) { - workspace = workspace << 8 | str[i]; - wssize += 8; - if (wssize >= 13) { - int tmp = (workspace >> (wssize - 13)) & 8191; - c = ENCODE_MAPPING[(tmp / 91)]; - if (c == 0) return 0; // illegal char - res[j++] = c; - c = ENCODE_MAPPING[(tmp % 91)]; - if (c == 0) return 0; // illegal char - res[j++] = c; - wssize -= 13; - } - } - // encode a last byte - if (0 < wssize && wssize < 7) { - int tmp = (workspace << (6 - wssize)) & 63; // pad the right side - c = ENCODE_MAPPING[(tmp)]; - if (c == 0) return 0; // illegal char - res[j++] = c; - } else if (7 <= wssize) { - int tmp = (workspace << (13 - wssize)) & 8191; // pad the right side - c = ENCODE_MAPPING[(tmp / 91)]; - if (c == 0) return 0; // illegal char - res[j++] = c; - c = ENCODE_MAPPING[(tmp % 91)]; - if (c == 0) return 0; // illegal char - res[j++] = c; - } - } else { - res[j++] = '~'; - } - // add null byte - res[j] = 0; - return j; -} - -// this guy expects a null-terminated string -// gives back a non-null terminated string, and properly filled len -unsigned base92_decode(const void* in, unsigned size, void *out, unsigned outlen_unused) { - const char* str = (const char*)in; - unsigned char *res = (unsigned char *)out; - int i, j = 0, b1, b2; - unsigned long workspace = 0; - unsigned short wssize = 0; - const unsigned char DECODE_MAPPING[256] = { - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 0, 255, 1, 2, 3, 4, 5, - 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, - 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, - 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, - 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, - 56, 57, 58, 59, 60, 61, 255, 62, 63, 64, - 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, - 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, - 85, 86, 87, 88, 89, 90, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255 - }; - - // handle small cases first - if (size == 0 || (str[0] == '~' && str[1] == '\0')) { - res[0] = 0; - return 1; - } - // calculate size - int len = ((size/2 * 13) + (size%2 * 6)) / 8; - // handle pairs of chars - for (i = 0; i + 1 < size; i += 2) { - b1 = DECODE_MAPPING[(str[i])]; - b2 = DECODE_MAPPING[(str[i+1])]; - workspace = (workspace << 13) | (b1 * 91 + b2); - wssize += 13; - while (wssize >= 8) { - res[j++] = (workspace >> (wssize - 8)) & 255; - wssize -= 8; - } - } - // handle single char - if (size % 2 == 1) { - workspace = (workspace << 6) | DECODE_MAPPING[(str[size - 1])]; - wssize += 6; - while (wssize >= 8) { - res[j++] = (workspace >> (wssize - 8)) & 255; - wssize -= 8; - } - } - //assert(j == len); - return j; -} - -// ---------------------------------------------------------------------------- -// COBS en/decoder -// Based on code by Jacques Fortier. -// "Redistribution and use in source and binary forms are permitted, with or without modification." -// -// Consistent Overhead Byte Stuffing is an encoding that removes all 0 bytes from arbitrary binary data. -// The encoded data consists only of bytes with values from 0x01 to 0xFF. This is useful for preparing data for -// transmission over a serial link (RS-232 or RS-485 for example), as the 0 byte can be used to unambiguously indicate -// packet boundaries. COBS also has the advantage of adding very little overhead (at least 1 byte, plus up to an -// additional byte per 254 bytes of data). For messages smaller than 254 bytes, the overhead is constant. -// -// This implementation is designed to be both efficient and robust. -// The decoder is designed to detect malformed input data and report an error upon detection. -// - -unsigned cobs_bounds( unsigned len ) { - return len + ceil(len / 254.0) + 1; -} -unsigned cobs_encode(const void *in, unsigned inlen, void *out, unsigned outlen) { - const uint8_t *src = (const uint8_t *)in; - uint8_t *dst = (uint8_t*)out; - size_t srclen = inlen; - - uint8_t code = 1; - size_t read_index = 0, write_index = 1, code_index = 0; - - while( read_index < srclen ) { - if( src[ read_index ] == 0) { - dst[ code_index ] = code; - code = 1; - code_index = write_index++; - read_index++; - } else { - dst[ write_index++ ] = src[ read_index++ ]; - code++; - if( code == 0xFF ) { - dst[ code_index ] = code; - code = 1; - code_index = write_index++; - } - } - } - - dst[ code_index ] = code; - return write_index; -} -unsigned cobs_decode(const void *in, unsigned inlen, void *out, unsigned outlen) { - const uint8_t *src = (const uint8_t *)in; - uint8_t *dst = (uint8_t*)out; - size_t srclen = inlen; - - uint8_t code, i; - size_t read_index = 0, write_index = 0; - - while( read_index < srclen ) { - code = src[ read_index ]; - - if( ((read_index + code) > srclen) && (code != 1) ) { - return 0; - } - - read_index++; - - for( i = 1; i < code; i++ ) { - dst[ write_index++ ] = src[ read_index++ ]; - } - if( (code != 0xFF) && (read_index != srclen) ) { - dst[ write_index++ ] = '\0'; - } - } - - return write_index; -} - -#if 0 -static -void cobs_test( const char *buffer, int buflen ) { - char enc[4096]; - int enclen = cobs_encode( buffer, buflen, enc, 4096 ); - - char dec[4096]; - int declen = cobs_decode( enc, enclen, dec, 4096 ); - - test( enclen >= buflen ); - test( declen == buflen ); - test( memcmp(dec, buffer, buflen) == 0 ); - - printf("%d->%d->%d (+%d extra bytes)\n", declen, enclen, declen, enclen - declen); -} -AUTORUN { - const char *null = 0; - cobs_test( null, 0 ); - - const char empty[] = ""; - cobs_test( empty, sizeof(empty) ); - - const char text[] = "hello world\n"; - cobs_test( text, sizeof(text) ); - - const char bintext[] = "hello\0\0\0world\n"; - cobs_test( bintext, sizeof(bintext) ); - - const char blank[512] = {0}; - cobs_test( blank, sizeof(blank) ); - - char longbintext[1024]; - for( int i = 0; i < 1024; ++i ) longbintext[i] = (unsigned char)i; - cobs_test( longbintext, sizeof(longbintext) ); - - assert(~puts("Ok")); -} -#endif - -// ---------------------------------------------------------------------------- -// netstring en/decoder -// - rlyeh, public domain. - -unsigned netstring_bounds(unsigned inlen) { - return 5 + inlen + 3; // 3 for ;,\0 + 5 if inlen < 100k ; else (unsigned)ceil(log10(inlen + 1)) -} -unsigned netstring_encode(const char *in, unsigned inlen, char *out, unsigned outlen) { -// if(outlen < netstring_bounds(inlen)) return 0; - sprintf(out, "%u:%.*s,", inlen, inlen, in); - return strlen(out); -} -unsigned netstring_decode(const char *in, unsigned inlen, char *out, unsigned outlen) { -// if(outlen < inlen) return 0; - const char *bak = in; - sscanf(in, "%u", &outlen); - while( *++in != ':' ); - memcpy(out, in+1, outlen), out[outlen-1] = 0; - // return outlen; // number of written bytes - return (outlen + (in+2 - bak)); // number of read bytes -} - -#if 0 -AUTORUN { - // encode - const char text1[] = "hello world!", text2[] = "abc123"; - unsigned buflen = netstring_bounds(strlen(text1) + strlen(text2)); - char *buf = malloc(buflen), *ptr = buf; - ptr += netstring_encode(text1, strlen(text1), ptr, buflen -= (ptr - buf)); - ptr += netstring_encode(text2, strlen(text2), ptr, buflen -= (ptr - buf)); - printf("%s -> ", buf); - - // decode - char out[12]; - unsigned plen = strlen(ptr = buf); - while(plen > 0) { - int written = netstring_decode(ptr, plen, out, 12); - ptr += written; - plen -= written; - printf("'%s'(%s)(%d), ", out, ptr, plen ); - } - puts(""); -} -#endif - -// ---------------------------------------------------------------------------- -// array de/interleaving -// - rlyeh, public domain. -// -// results: -// R0G0B0 R1G1B1 R2G2B2... -> R0R1R2... B0B1B2... G0G1G2... -// R0G0B0A0 R1G1B1A1 R2G2B2A2... -> R0R1R2... A0A1A2... B0B1B2... G0G1G2... - -void *interleave( void *out, const void *list, int list_count, int sizeof_item, unsigned columns ) { - void *bak = out; - assert( columns < list_count ); // required - int row_count = list_count / columns; - for( int offset = 0; offset < columns; offset++ ) { - for( int row = 0; row < row_count; row++ ) { - memcpy( out, &((char*)list)[ (offset + row * columns) * sizeof_item ], sizeof_item ); - out = ((char*)out) + sizeof_item; - } - } - return bak; -} - -#if 0 -static -void interleave_test( const char *name, int interleaving, int deinterleaving, const char *original ) { - char interleaved[128] = {0}; - interleave( interleaved, original, strlen(original)/2, 2, interleaving ); - char deinterleaved[128] = {0}; - interleave( deinterleaved, interleaved, strlen(original)/2, 2, deinterleaving ); - - printf( "\n%s\n", name ); - printf( "original:\t%s\n", original ); - printf( "interleaved:\t%s\n", interleaved ); - printf( "deinterleaved:\t%s\n", deinterleaved ); - - assert( 0 == strcmp(original, deinterleaved) ); -} - -AUTORUN { - interleave_test( - "audio 2ch", 2, 3, - "L0R0" - "L1R1" - "L2R2" - ); - interleave_test( - "image 3ch", 3, 3, - "R0G0B0" - "R1G1B1" - "R2G2B2" - ); - interleave_test( - "image 4ch", 4, 3, - "R0G0B0A0" - "R1G1B1A1" - "R2G2B2A2" - ); - interleave_test( - "audio 5ch", 5, 3, - "A0B0C0L0R0" - "A1B1C1L1R1" - "A2B2C2L2R2" - ); - interleave_test( - "audio 5.1ch", 6, 3, - "A0B0C0L0R0S0" - "A1B1C1L1R1S1" - "A2B2C2L2R2S2" - ); - interleave_test( - "opengl material 9ch", 9, 3, - "X0Y0Z0q0w0e0r0u0v0" - "X1Y1Z1q1w1e1r1u1v1" - "X2Y2Z2q2w2e2r2u2v2" - ); - interleave_test( - "opengl material 10ch", 10, 3, - "X0Y0Z0q0w0e0r0s0u0v0" - "X1Y1Z1q1w1e1r1s1u1v1" - "X2Y2Z2q2w2e2r2s2u2v2" - ); - assert(~puts("Ok")); -} -#endif - -// ---------------------------------------------------------------------------- -// delta encoder - -#define delta_expand_template(N) \ -void delta##N##_encode(void *buffer_, unsigned count) { \ - uint##N##_t current, last = 0, *buffer = (uint##N##_t*)buffer_; \ - for( unsigned i = 0; i < count; i++ ) { \ - current = buffer[i]; \ - buffer[i] = current - last; \ - last = current; \ - } \ -} \ -void delta##N##_decode(void *buffer_, unsigned count) { \ - uint##N##_t delta, last = 0, *buffer = (uint##N##_t*)buffer_; \ - for( unsigned i = 0; i < count; i++ ) { \ - delta = buffer[i]; \ - buffer[i] = delta + last; \ - last = buffer[i]; \ - } \ -} -delta_expand_template(8); -delta_expand_template(16); -delta_expand_template(32); -delta_expand_template(64); - -#if 0 -AUTORUN { - char buf[] = "1231112223345555"; - int buflen = strlen(buf); - - char *dt = strdup(buf); - printf(" delta8: ", dt); - for( int i = 0; i < buflen; ++i ) printf("%c", dt[i] ); - printf("->"); - delta8_encode(dt, buflen); - for( int i = 0; i < buflen; ++i ) printf("%02d,", dt[i] ); - printf("->"); - delta8_decode(dt, buflen); - for( int i = 0; i < buflen; ++i ) printf("%c", dt[i] ); - printf("\r%c\n", 0 == strcmp(buf,dt) ? 'Y':'N'); -} -#endif - -// ---------------------------------------------------------------------------- -// zigzag en/decoder -// - rlyeh, public domain - -uint64_t zig64( int64_t value ) { // convert sign|magnitude to magnitude|sign - return (value >> 63) ^ (value << 1); -} -int64_t zag64( uint64_t value ) { // convert magnitude|sign to sign|magnitude - return (value >> 1) ^ -(value & 1); -} - -// branchless zigzag encoding 32/64 -// sign|magnitude to magnitude|sign and back -// [ref] https://developers.google.com/protocol-buffers/docs/encoding -uint32_t enczig32u( int32_t n) { return ((n << 1) ^ (n >> 31)); } -uint64_t enczig64u( int64_t n) { return ((n << 1) ^ (n >> 63)); } - int32_t deczig32i(uint32_t n) { return ((n >> 1) ^ -(n & 1)); } - int64_t deczig64i(uint64_t n) { return ((n >> 1) ^ -(n & 1)); } - -#if 0 -AUTORUN { - int16_t x = -1000; - printf("%d -> %llu %llx -> %lld\n", x, zig64(x), zig64(x), zag64(zig64(x))); -} -AUTORUN { - #define CMP32(signedN) do { \ - int32_t reconverted = deczig32i( enczig32u(signedN) ); \ - int equal = signedN == reconverted; \ - printf("[%s] %d vs %d\n", equal ? " OK " : "FAIL", signedN, reconverted ); \ - } while(0) - - #define CMP64(signedN) do { \ - int64_t reconverted = deczig64i( enczig64u(signedN) ); \ - int equal = signedN == reconverted; \ - printf("[%s] %lld vs %lld\n", equal ? " OK " : "FAIL", signedN, reconverted ); \ - } while(0) - - CMP32( 0); - CMP32(-1); - CMP32(+1); - CMP32(-2); - CMP32(+2); - CMP32(INT32_MAX - 1); - CMP32(INT32_MIN + 1); - CMP32(INT32_MAX); - CMP32(INT32_MIN); - - CMP64( 0ll); - CMP64(-1ll); - CMP64(+1ll); - CMP64(-2ll); - CMP64(+2ll); - CMP64(INT64_MAX - 1); - CMP64(INT64_MIN + 1); - CMP64(INT64_MAX); - CMP64(INT64_MIN); -} -void TESTU( uint64_t N ) { - uint8_t buf[9] = {0}; - enczig64i(buf, (N)); - uint64_t reconstructed = deczig64i(buf, 0); - if( reconstructed != (N) ) printf("[FAIL] %llu vs %02x %02x %02x %02x %02x %02x %02x %02x %02x\n", (N), buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], buf[6], buf[7], buf[8] ); - else if( 0xffffff == ((N) & 0xffffff) ) printf("[ OK ] %llx\n", (N)); -} -void TESTI( int64_t N ) { - TESTU( enczig64u(N) ); -} -AUTORUN { - TESTU(0LLU); - TESTU(1LLU); - TESTU(2LLU); - TESTU(UINT64_MAX/8); - TESTU(UINT64_MAX/4); - TESTU(UINT64_MAX/2); - TESTU(UINT64_MAX-2); - TESTU(UINT64_MAX-1); - TESTU(UINT64_MAX); - - #pragma omp parallel for // compile with /openmp - for( int64_t N = INT64_MIN; N < INT64_MAX; ++N ) { - TESTU(N); - TESTI((int64_t)N); - } -} -#endif - -// ---------------------------------------------------------------------------- -// ARC4 en/decryptor. Based on code by Mike Shaffer. -// - rlyeh, public domain. - -void *arc4( void *buf_, unsigned buflen, const void *pass_, unsigned passlen ) { - // [ref] http://www.4guysfromrolla.com/webtech/code/rc4.inc.html - assert(passlen); - int sbox[256], key[256]; - char *buf = (char*)buf_; - const char *pass = (const char*)pass_; - for( unsigned a = 0; a < 256; a++ ) { - key[a] = pass[a % passlen]; - sbox[a] = a; - } - for( unsigned a = 0, b = 0; a < 256; a++ ) { - b = (b + sbox[a] + key[a]) % 256; - int swap = sbox[a]; sbox[a] = sbox[b]; sbox[b] = swap; - } - for( unsigned a = 0, b = 0, i = 0; i < buflen; ++i ) { - a = (a + 1) % 256; - b = (b + sbox[a]) % 256; - int swap = sbox[a]; sbox[a] = sbox[b]; sbox[b] = swap; - buf[i] ^= sbox[(sbox[a] + sbox[b]) % 256]; - } - return buf_; -} - -#if 0 -AUTORUN { - char buffer[] = "Hello world."; int buflen = strlen(buffer); - char *password = "abc123"; int passlen = strlen(password); - - printf("Original: %s\n", buffer); - printf("Password: %s\n", password); - - char *encrypted = arc4( buffer, buflen, password, passlen ); - printf("ARC4 Encrypted text: '%s'\n", encrypted); - - char *decrypted = arc4( buffer, buflen, password, passlen ); - printf("ARC4 Decrypted text: '%s'\n", decrypted); -} -#endif - -// ---------------------------------------------------------------------------- -// crc64 -// - rlyeh, public domain - -uint64_t crc64(uint64_t h, const void *ptr, uint64_t len) { - // based on public domain code by Lasse Collin - // also, use poly64 0xC96C5795D7870F42 for crc64-ecma - static uint64_t crc64_table[256]; - static uint64_t poly64 = UINT64_C(0x95AC9329AC4BC9B5); - if( poly64 ) { - for( int b = 0; b < 256; ++b ) { - uint64_t r = b; - for( int i = 0; i < 8; ++i ) { - r = r & 1 ? (r >> 1) ^ poly64 : r >> 1; - } - crc64_table[ b ] = r; - //printf("%016llx\n", crc64_table[b]); - } - poly64 = 0; - } - const uint8_t *buf = (const uint8_t *)ptr; - uint64_t crc = ~h; // ~crc; - while( len != 0 ) { - crc = crc64_table[(uint8_t)crc ^ *buf++] ^ (crc >> 8); - --len; - } - return ~crc; -} - -#if 0 -unsigned crc32(unsigned h, const void *ptr_, unsigned len) { - // based on public domain code by Karl Malbrain - const uint8_t *ptr = (const uint8_t *)ptr_; - if (!ptr) return 0; - const unsigned tbl[16] = { - 0x00000000, 0x1db71064, 0x3b6e20c8, 0x26d930ac, 0x76dc4190, 0x6b6b51f4, 0x4db26158, 0x5005713c, - 0xedb88320, 0xf00f9344, 0xd6d6a3e8, 0xcb61b38c, 0x9b64c2b0, 0x86d3d2d4, 0xa00ae278, 0xbdbdf21c }; - for(h = ~h; len--; ) { uint8_t b = *ptr++; h = (h >> 4) ^ tbl[(h & 15) ^ (b & 15)]; h = (h >> 4) ^ tbl[(h & 15) ^ (b >> 4)]; } - return ~h; -} -#endif - -// ---------------------------------------------------------------------------- -// entropy encoder - -#if is(win32) -#include -#include -#pragma comment(lib, "advapi32") - -void entropy( void *buf, unsigned n ) { - HCRYPTPROV provider; - if( CryptAcquireContext( &provider, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT ) == 0 ) { - assert(!"CryptAcquireContext failed"); - } - - int rc = CryptGenRandom( provider, n, (BYTE *)buf ); - assert( rc != 0 ); - CryptReleaseContext( provider, 0 ); -} - -#elif is(linux) || is(osx) - -void entropy( void *buf, unsigned n ) { - FILE *fp = fopen( "/dev/urandom", "r" ); - if( !fp ) assert(!"/dev/urandom open failed"); - - size_t read = n * fread( buf, n, 1, fp ); - assert( read == n && "/dev/urandom read failed" ); - fclose( fp ); -} - -#else // unused for now. likely emscripten will hit this - -// pseudo random number generator with 128 bit internal state... probably not suited for cryptographical usage. -// [src] http://github.com/kokke (UNLICENSE) -// [ref] http://burtleburtle.net/bob/rand/smallprng.html - -#include - -#if is(win32) -#include -#else -#include -#endif - -static uint32_t prng_next(void) { - #define prng_rotate(x,k) (x << k) | (x >> (32 - k)) - #define prng_shuffle() do { \ - uint32_t e = ctx[0] - prng_rotate(ctx[1], 27); \ - ctx[0] = ctx[1] ^ prng_rotate(ctx[2], 17); \ - ctx[1] = ctx[2] + ctx[3]; \ - ctx[2] = ctx[3] + e; \ - ctx[3] = e + ctx[0]; } while(0) - static __thread uint32_t ctx[4], *once = 0; if( !once ) { - uint32_t seed = (uint32_t)( ifdef(win32,_getpid,getpid)() + time(0) + ((uintptr_t)once) ); - ctx[0] = 0xf1ea5eed; - ctx[1] = ctx[2] = ctx[3] = seed; - for (int i = 0; i < 31; ++i) { - prng_shuffle(); - } - once = ctx; - } - prng_shuffle(); - return ctx[3]; -} - -void entropy( void *buf, unsigned n ) { - for( ; n >= 4 ; n -= 4 ) { - uint32_t a = prng_next(); - memcpy(buf, &a, 4); - buf = ((char*)buf) + 4; - } - if( n > 0 ) { - uint32_t a = prng_next(); - memcpy(buf, &a, n); - } -} - -#endif - -#if 0 -AUTORUN { - unsigned char buf[128]; - entropy(buf, 128); - for( int i = 0; i < 128; ++i ) { - printf("%02x", buf[i]); - } - puts(""); -} -#endif +// ----------------------------------------------------------------------------- +// semantic versioning in a single byte (octal) +// - rlyeh, public domain. +// +// - single octal byte that represents semantic versioning (major.minor.patch). +// - allowed range [0000..0377] ( <-> [0..255] decimal ) +// - comparison checks only major.minor tuple as per convention. + +int semver( int major, int minor, int patch ) { + return SEMVER(major, minor, patch); +} +int semvercmp( int v1, int v2 ) { + return SEMVERCMP(v1, v2); +} + +#if 0 +AUTORUN { + for( int i= 0; i <= 255; ++i) printf(SEMVERFMT ",", i); + puts(""); + + printf(SEMVERFMT "\n", semver(3,7,7)); + printf(SEMVERFMT "\n", semver(2,7,7)); + printf(SEMVERFMT "\n", semver(1,7,7)); + printf(SEMVERFMT "\n", semver(0,7,7)); + + printf(SEMVERFMT "\n", semver(3,7,1)); + printf(SEMVERFMT "\n", semver(2,5,3)); + printf(SEMVERFMT "\n", semver(1,3,5)); + printf(SEMVERFMT "\n", semver(0,1,7)); + + assert( semvercmp( 0357, 0300 ) > 0 ); + assert( semvercmp( 0277, 0300 ) < 0 ); + assert( semvercmp( 0277, 0200 ) > 0 ); + assert( semvercmp( 0277, 0100 ) < 0 ); + assert( semvercmp( 0076, 0070 ) == 0 ); + assert( semvercmp( 0076, 0077 ) == 0 ); + assert( semvercmp( 0176, 0170 ) == 0 ); + assert( semvercmp( 0176, 0177 ) == 0 ); + assert( semvercmp( 0276, 0270 ) == 0 ); + assert( semvercmp( 0276, 0277 ) == 0 ); + assert( semvercmp( 0376, 0370 ) == 0 ); + assert( semvercmp( 0376, 0377 ) == 0 ); +} +#endif + +// ----------------------------------------------------------------------------- +// compile-time fourcc, eightcc + +char *cc4str(unsigned x) { + static __thread char type[4+1] = {0}; + type[3] = (x >> 24ULL) & 255; + type[2] = (x >> 16ULL) & 255; + type[1] = (x >> 8ULL) & 255; + type[0] = (x >> 0ULL) & 255; + return type; +} +char *cc8str(uint64_t x) { + static __thread char type[8+1] = {0}; + type[7] = (x >> 56ULL) & 255; + type[6] = (x >> 48ULL) & 255; + type[5] = (x >> 40ULL) & 255; + type[4] = (x >> 32ULL) & 255; + type[3] = (x >> 24ULL) & 255; + type[2] = (x >> 16ULL) & 255; + type[1] = (x >> 8ULL) & 255; + type[0] = (x >> 0ULL) & 255; + return type; +} + +// ---------------------------------------------------------------------------- +// float conversion (text) + +char* itoa1(int v) { + return va("%d", v); +} +char* itoa2(vec2i v) { + return va("%d,%d", v.x,v.y); +} +char* itoa3(vec3i v) { + return va("%d,%d,%d", v.x,v.y,v.z); +} + +char* ftoa1(float v) { + return va("%f", v); +} +char* ftoa2(vec2 v) { + return va("%f,%f", v.x, v.y); +} +char* ftoa3(vec3 v) { + return va("%f,%f,%f", v.x, v.y, v.z); +} +char* ftoa4(vec4 v) { + return va("%f,%f,%f,%f", v.x, v.y, v.z, v.w); +} + +float atof1(const char *s) { + char buf[64]; + return sscanf(s, "%63[^]\r\n,}]", buf) == 1 ? (float)eval(buf) : (float)NAN; +} +vec2 atof2(const char *s) { + vec2 v = { 0 }; + char buf1[64],buf2[64]; + int num = sscanf(s, "%63[^]\r\n,}],%63[^]\r\n,}]", buf1, buf2); + if( num > 0 ) v.x = eval(buf1); + if( num > 1 ) v.y = eval(buf2); + return v; +} +vec3 atof3(const char *s) { + vec3 v = {0}; + char buf1[64],buf2[64],buf3[64]; + int num = sscanf(s, "%63[^]\r\n,}],%63[^]\r\n,}],%63[^]\r\n,}]", buf1, buf2, buf3); + if( num > 0 ) v.x = eval(buf1); + if( num > 1 ) v.y = eval(buf2); + if( num > 2 ) v.z = eval(buf3); + return v; +} +vec4 atof4(const char *s) { + vec4 v = {0}; + char buf1[64],buf2[64],buf3[64],buf4[64]; + int num = sscanf(s, "%63[^]\r\n,}],%63[^]\r\n,}],%63[^]\r\n,}],%63[^]\r\n,}]", buf1, buf2, buf3, buf4); + if( num > 0 ) v.x = eval(buf1); + if( num > 1 ) v.y = eval(buf2); + if( num > 2 ) v.z = eval(buf3); + if( num > 3 ) v.w = eval(buf4); + return v; +} + +// @todo: expand this to proper int parsers +int atoi1(const char *s) { + return (int)atof1(s); +} +vec2i atoi2(const char *s) { + vec2 v = atof2(s); + return vec2i( v.x, v.y ); +} +vec3i atoi3(const char *s) { + vec3 v = atof3(s); + return vec3i( v.x, v.y, v.z ); +} + +// endianness ----------------------------------------------------------------- +// - rlyeh, public domain + +int is_big() { return IS_BIG; } +int is_little() { return IS_LITTLE; } + +uint16_t lil16(uint16_t n) { return IS_BIG ? swap16(n) : n; } +uint32_t lil32(uint32_t n) { return IS_BIG ? swap32(n) : n; } +uint64_t lil64(uint64_t n) { return IS_BIG ? swap64(n) : n; } +uint16_t big16(uint16_t n) { return IS_LITTLE ? swap16(n) : n; } +uint32_t big32(uint32_t n) { return IS_LITTLE ? swap32(n) : n; } +uint64_t big64(uint64_t n) { return IS_LITTLE ? swap64(n) : n; } + +float lil32f(float n) { return IS_BIG ? swap32f(n) : n; } +double lil64f(double n) { return IS_BIG ? swap64f(n) : n; } +float big32f(float n) { return IS_LITTLE ? swap32f(n) : n; } +double big64f(double n) { return IS_LITTLE ? swap64f(n) : n; } + +uint16_t* lil16p(void *p, int sz) { if(IS_BIG ) { uint16_t *n = (uint16_t *)p; for(int i = 0; i < sz; ++i) n[i] = swap16(n[i]); } return p; } +uint16_t* big16p(void *p, int sz) { if(IS_LITTLE ) { uint16_t *n = (uint16_t *)p; for(int i = 0; i < sz; ++i) n[i] = swap16(n[i]); } return p; } +uint32_t* lil32p(void *p, int sz) { if(IS_BIG ) { uint32_t *n = (uint32_t *)p; for(int i = 0; i < sz; ++i) n[i] = swap32(n[i]); } return p; } +uint32_t* big32p(void *p, int sz) { if(IS_LITTLE ) { uint32_t *n = (uint32_t *)p; for(int i = 0; i < sz; ++i) n[i] = swap32(n[i]); } return p; } +uint64_t* lil64p(void *p, int sz) { if(IS_BIG ) { uint64_t *n = (uint64_t *)p; for(int i = 0; i < sz; ++i) n[i] = swap64(n[i]); } return p; } +uint64_t* big64p(void *p, int sz) { if(IS_LITTLE ) { uint64_t *n = (uint64_t *)p; for(int i = 0; i < sz; ++i) n[i] = swap64(n[i]); } return p; } + +float * lil32pf(void *p, int sz) { if(IS_BIG ) { float *n = (float *)p; for(int i = 0; i < sz; ++i) n[i] = swap32f(n[i]); } return p; } +float * big32pf(void *p, int sz) { if(IS_LITTLE ) { float *n = (float *)p; for(int i = 0; i < sz; ++i) n[i] = swap32f(n[i]); } return p; } +double * lil64pf(void *p, int sz) { if(IS_BIG ) { double *n = (double *)p; for(int i = 0; i < sz; ++i) n[i] = swap64f(n[i]); } return p; } +double * big64pf(void *p, int sz) { if(IS_LITTLE ) { double *n = (double *)p; for(int i = 0; i < sz; ++i) n[i] = swap64f(n[i]); } return p; } + +#if !is(cl) && !is(gcc) +uint16_t (swap16)( uint16_t x ) { return (x << 8) | (x >> 8); } +uint32_t (swap32)( uint32_t x ) { x = ((x << 8) & 0xff00ff00) | ((x >> 8) & 0x00ff00ff); return (x << 16) | (x >> 16); } +uint64_t (swap64)( uint64_t x ) { x = ((x << 8) & 0xff00ff00ff00ff00ULL) | ((x >> 8) & 0x00ff00ff00ff00ffULL); x = ((x << 16) & 0xffff0000ffff0000ULL) | ((x >> 16) & 0x0000ffff0000ffffULL); return (x << 32) | (x >> 32); } +#endif + +float swap32f(float n) { union { float t; uint32_t i; } conv; conv.t = n; conv.i = swap32(conv.i); return conv.t; } +double swap64f(double n) { union { double t; uint64_t i; } conv; conv.t = n; conv.i = swap64(conv.i); return conv.t; } + +void swapf(float *a, float *b) { + float t = *a; *a = *b; *b = *a; +} +void swapf2(vec2 *a, vec2 *b) { + float x = a->x; a->x = b->x; b->x = a->x; + float y = a->y; a->y = b->y; b->y = a->y; +} +void swapf3(vec3 *a, vec3 *b) { + float x = a->x; a->x = b->x; b->x = a->x; + float y = a->y; a->y = b->y; b->y = a->y; + float z = a->z; a->z = b->z; b->z = a->z; +} +void swapf4(vec4 *a, vec4 *b) { + float x = a->x; a->x = b->x; b->x = a->x; + float y = a->y; a->y = b->y; b->y = a->y; + float z = a->z; a->z = b->z; b->z = a->z; + float w = a->w; a->w = b->w; b->w = a->w; +} + +// half packing ----------------------------------------------------------------- +// from GingerBill's gbmath.h (public domain) + +float half_to_float(half value) { + union { unsigned int i; float f; } result; + int s = (value >> 15) & 0x001; + int e = (value >> 10) & 0x01f; + int m = value & 0x3ff; + + if (e == 0) { + if (m == 0) { + /* Plus or minus zero */ + result.i = (unsigned int)(s << 31); + return result.f; + } else { + /* Denormalized number */ + while (!(m & 0x00000400)) { + m <<= 1; + e -= 1; + } + e += 1; + m &= ~0x00000400; + } + } else if (e == 31) { + if (m == 0) { + /* Positive or negative infinity */ + result.i = (unsigned int)((s << 31) | 0x7f800000); + return result.f; + } else { + /* Nan */ + result.i = (unsigned int)((s << 31) | 0x7f800000 | (m << 13)); + return result.f; + } + } + + e = e + (127 - 15); + m = m << 13; + + result.i = (unsigned int)((s << 31) | (e << 23) | m); + return result.f; +} + +half float_to_half(float value) { + union { unsigned int i; float f; } v; + int i, s, e, m; + + v.f = value; + i = (int)v.i; + + s = (i >> 16) & 0x00008000; + e = ((i >> 23) & 0x000000ff) - (127 - 15); + m = i & 0x007fffff; + + if (e <= 0) { + if (e < -10) return (half)s; + m = (m | 0x00800000) >> (1 - e); + + if (m & 0x00001000) + m += 0x00002000; + + return (half)(s | (m >> 13)); + } else if (e == 0xff - (127 - 15)) { + if (m == 0) { + return (half)(s | 0x7c00); /* NOTE(bill): infinity */ + } else { + /* NOTE(bill): NAN */ + m >>= 13; + return (half)(s | 0x7c00 | m | (m == 0)); + } + } else { + if (m & 0x00001000) { + m += 0x00002000; + if (m & 0x00800000) { + m = 0; + e += 1; + } + } + if (e > 30) { + float volatile f = 1e12f; + int j; + for (j = 0; j < 10; j++) + f *= f; /* NOTE(bill): Cause overflow */ + return (half)(s | 0x7c00); + } + return (half)(s | (e << 10) | (m >> 13)); + } +} + +// int packing ----------------------------------------------------------------- +// - rlyeh, public domain + +// pack16i() -- store a 16-bit int into a char buffer (like htons()) +// pack32i() -- store a 32-bit int into a char buffer (like htonl()) +// pack64i() -- store a 64-bit int into a char buffer (like htonl()) + +void pack16i(uint8_t *buf, uint16_t i, int swap) { + if( swap ) i = swap16(i); + memcpy( buf, &i, sizeof(i) ); +} + +void pack32i(uint8_t *buf, uint32_t i, int swap) { + if( swap ) i = swap32(i); + memcpy( buf, &i, sizeof(i) ); +} + +void pack64i(uint8_t *buf, uint64_t i, int swap) { + if( swap ) i = swap64(i); + memcpy( buf, &i, sizeof(i) ); +} + +// unpack16i() -- unpack a 16-bit int from a char buffer (like ntohs()) +// unpack32i() -- unpack a 32-bit int from a char buffer (like ntohl()) +// unpack64i() -- unpack a 64-bit int from a char buffer (like ntohl()) +// changes unsigned numbers to signed if needed. + +int16_t unpack16i(const uint8_t *buf, int swap) { + uint16_t i; + memcpy(&i, buf, sizeof(i)); + if( swap ) i = swap16(i); + return i <= 0x7fffu ? (int16_t)i : -1 -(uint16_t)(0xffffu - i); +} + +int32_t unpack32i(const uint8_t *buf, int swap) { + uint32_t i; + memcpy(&i, buf, sizeof(i)); + if( swap ) i = swap32(i); + return i <= 0x7fffffffu ? (int32_t)i : -1 -(int32_t)(0xffffffffu - i); +} + +int64_t unpack64i(const uint8_t *buf, int swap) { + uint64_t i; + memcpy(&i, buf, sizeof(i)); + if( swap ) i = swap64(i); + return i <= 0x7fffffffffffffffull ? (int64_t)i : -1 -(int64_t)(0xffffffffffffffffull - i); +} + +// ---------------------------------------------------------------------------- +// float un/packing: 8 (micro), 16 (half), 32 (float), 64 (double) types +// - rlyeh, public domain. original code by Beej.us (PD). +// +// [src] http://beej.us/guide/bgnet/output/html/multipage/advanced.html#serialization +// Modified to encode NaN and Infinity as well. +// +// [1] http://www.mrob.com/pub/math/floatformats.html#minifloat +// [2] microfloat: [0.002 to 240] range. +// [3] half float: can approximate any 16-bit unsigned integer or its reciprocal to 3 decimal places. + +uint64_t pack754(long double f, unsigned bits, unsigned expbits) { + long double fnorm; + int shift; + long long sign, exp, significand; + unsigned significandbits = bits - expbits - 1; // -1 for sign bit + + if (f == 0.0) return 0; // get this special case out of the way +//< @r-lyeh beware! works for 32/64 only + else if (f == INFINITY) return 0x7f800000ULL << (bits - 32); // 0111 1111 1000 + else if (f == -INFINITY) return 0xff800000ULL << (bits - 32); + else if (f != f) return 0x7fc00000ULL << (bits - 32); // 0111 1111 1100 NaN +//< @r-lyeh + + // check sign and begin normalization + if (f < 0) { sign = 1; fnorm = -f; } + else { sign = 0; fnorm = f; } + + // get the normalized form of f and track the exponent + shift = 0; + while(fnorm >= 2.0) { fnorm /= 2.0; shift++; } + while(fnorm < 1.0) { fnorm *= 2.0; shift--; } + fnorm = fnorm - 1.0; + + // calculate the binary form (non-float) of the significand data + significand = fnorm * ((1LL<>significandbits)&((1LL< 0) { result *= 2.0; shift--; } + while(shift < 0) { result /= 2.0; shift++; } + + // sign it + result *= (i>>(bits-1))&1? -1.0: 1.0; + + return result; +} + +typedef int static_assert_flt[ sizeof(float) == 4 ]; +typedef int static_assert_dbl[ sizeof(double) == 8 ]; + +// ---------------------------------------------------------------------------- +// variable-length integer packing +// - rlyeh, public domain. +// +// 7 [0 xxxx xxx] 7-bit value in 1 byte (0- 127) +// 7 [10 xxx xxx] [yyyyyyyy] 14-bit value in 2 bytes (0- 16,383) +// 6 [110 xx xxx] [yyyyyyyy] [zzzzzzzz] 21-bit value in 3 bytes (0- 2,097,151) +// 8 [111 00 xxx] [ 3 bytes] 27-bit value in 4 bytes (0- 134,217,727) +// 8 [111 01 xxx] [ 4 bytes] 35-bit value in 5 bytes (0- 34,359,738,367) +// 5 [111 10 xxx] [ 5 bytes] 43-bit value in 6 bytes (0- 8,796,093,022,207) +// 8 [111 11 000] [ 6 bytes] 48-bit value in 7 bytes (0-281,474,976,710,655) +// 8 [111 11 001] [ 7 bytes] 56-bit value in 8 bytes (...) +// 8 [111 11 010] [ 8 bytes] 64-bit value in 9 bytes +// 8 [111 11 011] [ 9 bytes] 72-bit value in 10 bytes +// 8 [111 11 100] [10 bytes] 80-bit value in 11 bytes +// A [111 11 101] [12 bytes] 96-bit value in 13 bytes +// A [111 11 110] [14 bytes] 112-bit value in 15 bytes +// A [111 11 111] [16 bytes] 128-bit value in 17 bytes +// 1 1 2 3 = 7 + +uint64_t pack64uv( uint8_t *buffer, uint64_t value ) { +#if 1 // LEB128 + /* encode unsigned : 7-bit pack. MSB terminates stream */ + const uint8_t *buffer0 = buffer; + while( value > 127 ) { + *buffer++ = value | 0x80; // (uint8_t)(( value & 0xFF ) | 0x80 ); + value >>= 7; + } + *buffer++ = value; + return buffer - buffer0; +#else + #define ADD(bits) *buffer++ = (value >>= bits) + if( value < (1ull<< 7) ) return *buffer = value, 1; + if( value < (1ull<<14) ) return *buffer++ = 0x80|(value&0x3f), ADD(6), 2; + if( value < (1ull<<21) ) return *buffer++ = 0xc0|(value&0x1f), ADD(5), ADD(8), 3; + if( value < (1ull<<27) ) return *buffer++ = 0xe0|(value&0x07), ADD(3), ADD(8), ADD(8), 4; + if( value < (1ull<<35) ) return *buffer++ = 0xe8|(value&0x07), ADD(3), ADD(8), ADD(8), ADD(8), 5; + if( value < (1ull<<43) ) return *buffer++ = 0xf0|(value&0x07), ADD(3), ADD(8), ADD(8), ADD(8), ADD(8), 6; + if( value < (1ull<<48) ) return *buffer++ = 0xf8|(value&0x00), ADD(0), ADD(8), ADD(8), ADD(8), ADD(8), ADD(8), 7; + if( value < (1ull<<56) ) return *buffer++ = 0xf9|(value&0x00), ADD(0), ADD(8), ADD(8), ADD(8), ADD(8), ADD(8), ADD(8), 8; + /*if( value < (1ull<<64))*/return *buffer++ = 0xfa|(value&0x00), ADD(0), ADD(8), ADD(8), ADD(8), ADD(8), ADD(8), ADD(8), ADD(8), 9; + /*...*/ + #undef ADD +#endif +} +uint64_t unpack64uv( const uint8_t *buffer, uint64_t *value ) { +#if 1 // LEB128 + /* decode unsigned : 7-bit unpack. MSB terminates stream */ + const uint8_t *buffer0 = buffer; + uint64_t out = 0, j = -7; + do { + out |= ( ((uint64_t)*buffer) & 0x7f) << (j += 7); + } while( (*buffer++) & 0x80 ); + return buffer - buffer0; +#else + uint64_t bytes, out = 0, shift = 0; + const int table[] = { 6,7,8,9,10,12,14,16 }; + /**/ if( *buffer >= 0xf8 ) bytes = table[*buffer - 0xf8]; + else if( *buffer >= 0xe0 ) bytes = 3 + ((*buffer>>3) & 3); + else if( *buffer >= 0xc0 ) bytes = 2; + else bytes = *buffer >= 0x80; + + #define POP(bits) out = out | (uint64_t)*buffer++ << (shift += bits); + switch( bytes ) { + default: + break; case 0: out = *buffer++; + break; case 1: out = *buffer++ & 0x3f; POP(6); + break; case 2: out = *buffer++ & 0x1f; POP(5); POP(8); + break; case 3: out = *buffer++ & 0x07; POP(3); POP(8); POP(8); + break; case 4: out = *buffer++ & 0x07; POP(3); POP(8); POP(8); POP(8); + break; case 5: out = *buffer++ & 0x07; POP(3); POP(8); POP(8); POP(8); POP(8); + break; case 6: ++buffer; shift = -8; POP(8); POP(8); POP(8); POP(8); POP(8); POP(8); + break; case 7: ++buffer; shift = -8; POP(8); POP(8); POP(8); POP(8); POP(8); POP(8); POP(8); + break; case 8: ++buffer; shift = -8; POP(8); POP(8); POP(8); POP(8); POP(8); POP(8); POP(8); POP(8); + } + #undef POP + + return *value = out, bytes+1; +#endif +} + +// vbyte, varint (signed) + +uint64_t pack64iv( uint8_t *buffer, int64_t value_ ) { + uint64_t value = (uint64_t)((value_ >> 63) ^ (value_ << 1)); + return pack64uv(buffer, value); /* convert sign|magnitude to magnitude|sign */ +} + +uint64_t unpack64iv( const uint8_t *buffer, int64_t *value ) { + uint64_t out = 0, ret = unpack64uv( buffer, &out ); + *value = ((out >> 1) ^ -(out & 1)); /* convert magnitude|sign to sign|magnitude */ + return ret; +} + + +#if 0 +AUTORUN { + int tests = 0, passes = 0; + + #define testi(v) do { \ + int64_t val = v; \ + char out[16]; \ + int len = pack64iv(out, val); \ + int64_t in = ~val; \ + unpack64iv(out, &in); \ + int ok = val == in; ++tests; passes += ok; \ + printf("%c %02d/%02d (-) %#llx (%llu) <-> %d bytes <-> %#llx (%llu)\n", "NY"[ok], passes, tests, val, val, len, in, in); \ + } while(0) + + #define testu(v) do { \ + uint64_t val = (v); \ + char out[16]; \ + int len = pack64uv(out, val); \ + uint64_t in = ~val; \ + unpack64uv(out, &in); \ + int ok = val == in; ++tests; passes += ok; \ + printf("%c %02d/%02d (+) %#llx (%llu) <-> %d bytes <-> %#llx (%llu)\n", "NY"[ok], passes, tests, val, val, len, in, in); \ + } while(0) + + #define TEST(v) do { testi(v); testu(v); } while(0) + + TEST(0); + TEST((1ull<<7)-1); + TEST( 1ull<<7); + TEST((1ull<<14)-1); + TEST( 1ull<<14); + TEST((1ull<<21)-1); + TEST( 1ull<<21); + TEST((1ull<<27)-1); + TEST( 1ull<<27); + TEST((1ull<<35)-1); + TEST( 1ull<<35); + TEST((1ull<<48)-1); + TEST( 1ull<<48); + TEST(~0ull-1); + TEST(~0ull); + + #undef TEST + + printf("%d tests, %d errors\n", tests, tests - passes); +} +#endif + +// ---------------------------------------------------------------------------- +// msgpack v5, schema based struct/buffer bitpacking +// - rlyeh, public domain. +// +// [ref] https://github.com/msgpack/msgpack/blob/master/spec.md +// +// @todo: finish msgunpack() +// @todo: alt api v3 +// int msgpack( uint8_t *buf, const char *fmt, ... ); +// if !buf, bulk size; else pack. +// returns number of bytes written; 0 if not space enough. +// int msgunpack( const uint8_t *buf, const char *fmt, ... ); +// if !buf, test message; else unpack. +// returns number of processed bytes; 0 if parse error. + + +// private alt unpack api v1 { +enum { + ERR,NIL,BOL,UNS,SIG,STR,BIN,FLT,EXT,ARR,MAP +}; +typedef struct variant { + union { + uint8_t chr; + uint64_t uns; + int64_t sig; + char *str; + void *bin; + double flt; + uint32_t u32; + }; + uint64_t sz; + uint16_t ext; + uint16_t type; //[0..10]={err,nil,bol,uns,sig,str,bin,flt,ext,arr,map} +} variant; +bool msgunpack_var(struct variant *var); +// } private alt unpack api v1 + +struct writer { + uint8_t *w; // Write pointer into buffer + size_t len; // Written bytes up to date + size_t cap; // Buffer capacity +}; + +struct reader { + FILE *fp; + const void *membuf; + size_t memsize, offset; + struct variant v; // tmp +}; + +static __thread struct writer out; +static __thread struct reader in; + +static void wrbe(uint64_t n, uint8_t *b) { +#ifndef BIG + n = ntoh64(n); +#endif + memcpy(b, &n, sizeof(uint64_t)); +} +static int wr(int len, uint8_t opcode, uint64_t value) { + uint8_t b[8]; + assert((out.len + (len+1) < out.cap) && "buffer overflow!"); + *out.w++ = (opcode); + /**/ if(len == 1) *out.w++ = (uint8_t)(value); + else if(len == 2) wrbe(value, b), memcpy(out.w, &b[6], 2), out.w += 2; + else if(len == 4) wrbe(value, b), memcpy(out.w, &b[4], 4), out.w += 4; + else if(len == 8) wrbe(value, b), memcpy(out.w, &b[0], 8), out.w += 8; + out.len += len+1; + return len+1; +} +static bool rd(void *buf, size_t len, size_t swap) { // return false any error and/or eof + bool ret; + if( in.fp ) { + assert( !ferror(in.fp) && "invalid file handle (reader)" ); + ret = 1 == fread((char*)buf, len, 1, in.fp); + } else { + assert( in.membuf && "invalid memory buffer (reader)"); + assert( (in.offset + len <= in.memsize) && "memory overflow! (reader)"); + ret = !!memcpy(buf, (char*)in.membuf + in.offset, len); + } +#ifndef BIG + /**/ if( swap && len == 2 ) *((uint16_t*)buf) = ntoh16(*((uint16_t*)buf)); + else if( swap && len == 4 ) *((uint32_t*)buf) = ntoh32(*((uint32_t*)buf)); + else if( swap && len == 8 ) *((uint64_t*)buf) = ntoh64(*((uint64_t*)buf)); +#endif + return in.offset += len, ret; +} +static bool rdbuf(char **buf, size_t len) { // return false on error or out of memory + char *ptr = REALLOC(*buf, len+1); + if( ptr && rd(ptr, len, 0) ) { + (*buf = ptr)[len] = 0; + } else { + FREE(ptr), ptr = 0; + } + return !!ptr; +} + +int msgpack_new(uint8_t *w, size_t l) { + out.w = w; + out.len = 0; + out.cap = l; + return w != 0 && l != 0; +} +int msgpack_nil() { + return wr(0, 0xC0, 0); +} +int msgpack_chr(bool c) { + return wr(0, c ? 0xC3 : 0xC2, 0); +} +int msgpack_uns(uint64_t n) { + /**/ if (n < 0x80) return wr(0, n, 0); + else if (n < 0x100) return wr(1, 0xCC, n); + else if (n < 0x10000) return wr(2, 0xCD, n); + else if (n < 0x100000000) return wr(4, 0xCE, n); + else return wr(8, 0xCF, n); +} +int msgpack_int(int64_t n) { + /**/ if (n >= 0) return msgpack_uns(n); + else if (n >= -32) return wr(0, n, 0); //wr(0, 0xE0 | n, 0); + else if (n >= -128) return wr(1, 0xD0, n + 0xff + 1); + else if (n >= -32768) return wr(2, 0xD1, n + 0xffff + 1); + else if (n >= -2147483648LL) return wr(4, 0xD2, n + 0xffffffffull + 1); + else return wr(8, 0xD3, n + 0xffffffffffffffffull + 1); +} +int msgpack_flt(double g) { + float f = (float)g; + double h = f; + /**/ if(g == h) return wr(4, 0xCA, pack754_32(f)); + else return wr(8, 0xCB, pack754_64(g)); +} +int msgpack_str(const char *s) { + size_t n = strlen(s), c = n; + + /**/ if (n < 0x20) c += wr(0, 0xA0 | n, 0); + else if (n < 0x100) c += wr(1, 0xD9, n); + else if (n < 0x10000) c += wr(2, 0xDA, n); + else c += wr(4, 0xDB, n); + + memcpy(out.w, s, n); + out.w += n; + out.len += n; + return c; +} +int msgpack_bin(const char *s, size_t n) { + size_t c = n; + /**/ if (n < 0x100) c += wr(1, 0xC4, n); + else if (n < 0x10000) c += wr(2, 0xC5, n); + else c += wr(4, 0xC6, n); + + memcpy(out.w, s, n); + out.w += n; + out.len += n; + return c; +} +int msgpack_arr(uint32_t numitems) { + uint32_t n = numitems; + /**/ if (n < 0x10) return wr(0, 0x90 | n, 0); + else if (n < 0x10000) return wr(2, 0xDC, n); + else return wr(4, 0xDD, n); +} +int msgpack_map(uint32_t numpairs) { + uint32_t n = numpairs; + /**/ if (n < 0x10) return wr(0, 0x80 | n, 0); + else if (n < 0x10000) return wr(2, 0xDE, n); + else return wr(4, 0xDF, n); +} +int msgpack_ext(uint8_t key, void *val, size_t n) { + uint32_t c = n; + /**/ if (n == 1) c += wr(1, 0xD4, key); + else if (n == 2) c += wr(1, 0xD5, key); + else if (n == 4) c += wr(1, 0xD6, key); + else if (n == 8) c += wr(1, 0xD7, key); + else if (n == 16) c += wr(1, 0xD8, key); + else if (n < 0x100) c += wr(1, 0xC7, n), c += wr(0, key, 0); + else if (n < 0x10000) c += wr(2, 0xC8, n), c += wr(0, key, 0); + else c += wr(4, 0xC9, n), c += wr(0, key, 0); + + memcpy(out.w, val, n); + out.w += n; + out.len += n; + return c; +} + +bool msgunpack_new( const void *opaque_or_FILE, size_t bytes ) { + return !!((memset(&in, 0, sizeof(in)), in.memsize = bytes) ? (in.membuf = opaque_or_FILE) : (in.fp = (FILE*)opaque_or_FILE)); +} +bool msgunpack_eof() { + return in.fp ? !!feof(in.fp) : (in.offset > in.memsize); +} +bool msgunpack_err() { + return in.fp ? !!ferror(in.fp) : !in.memsize; +} +bool msgunpack_var(struct variant *w) { + uint8_t tag; + struct variant v = {0}; + if( rd(&tag, 1, 0) ) + switch(tag) { + default: + /**/ if((tag & 0x80) == 0x00) { v.type = UNS; v.sz = 1; v.uns = tag; } + else if((tag & 0xe0) == 0xe0) { v.type = SIG; v.sz = 1; v.sig = (int8_t)tag; } + else if((tag & 0xe0) == 0xa0) { v.type = rdbuf(&v.str, v.sz = tag & 0x1f) ? STR : ERR; } + else if((tag & 0xf0) == 0x90) { v.type = ARR; v.sz = tag & 0x0f; } + else if((tag & 0xf0) == 0x80) { v.type = MAP; v.sz = tag & 0x0f; } + + break; case 0xc0: v.type = NIL; v.sz = 0; + break; case 0xc2: v.type = BOL; v.sz = 1; v.chr = 0; + break; case 0xc3: v.type = BOL; v.sz = 1; v.chr = 1; + + break; case 0xcc: v.type = rd(&v.uns, v.sz = 1, 0) ? UNS : ERR; + break; case 0xcd: v.type = rd(&v.uns, v.sz = 2, 1) ? UNS : ERR; + break; case 0xce: v.type = rd(&v.uns, v.sz = 4, 1) ? UNS : ERR; + break; case 0xcf: v.type = rd(&v.uns, v.sz = 8, 1) ? UNS : ERR; + + break; case 0xd0: v.type = rd(&v.uns, v.sz = 1, 0) ? (v.sig -= 0xff + 1, SIG) : ERR; + break; case 0xd1: v.type = rd(&v.uns, v.sz = 2, 1) ? (v.sig -= 0xffff + 1, SIG) : ERR; + break; case 0xd2: v.type = rd(&v.uns, v.sz = 4, 1) ? (v.sig -= 0xffffffffull + 1, SIG) : ERR; + break; case 0xd3: v.type = rd(&v.uns, v.sz = 8, 1) ? (v.sig -= 0xffffffffffffffffull + 1, SIG) : ERR; + + break; case 0xca: v.type = rd(&v.u32, v.sz = 4, 1) ? (v.flt = unpack754_32(v.u32), FLT) : ERR; + break; case 0xcb: v.type = rd(&v.uns, v.sz = 8, 1) ? (v.flt = unpack754_64(v.uns), FLT) : ERR; + + break; case 0xd9: v.type = rd(&v.sz, 1, 0) && rdbuf(&v.str, v.sz) ? STR : ERR; + break; case 0xda: v.type = rd(&v.sz, 2, 1) && rdbuf(&v.str, v.sz) ? STR : ERR; + break; case 0xdb: v.type = rd(&v.sz, 4, 1) && rdbuf(&v.str, v.sz) ? STR : ERR; + + break; case 0xc4: v.type = rd(&v.sz, 1, 0) && rdbuf(&v.str, v.sz) ? BIN : ERR; + break; case 0xc5: v.type = rd(&v.sz, 2, 1) && rdbuf(&v.str, v.sz) ? BIN : ERR; + break; case 0xc6: v.type = rd(&v.sz, 4, 1) && rdbuf(&v.str, v.sz) ? BIN : ERR; + + break; case 0xdc: v.type = rd(&v.sz, 2, 1) ? ARR : ERR; + break; case 0xdd: v.type = rd(&v.sz, 4, 1) ? ARR : ERR; + + break; case 0xde: v.type = rd(&v.sz, 2, 1) ? MAP : ERR; + break; case 0xdf: v.type = rd(&v.sz, 4, 1) ? MAP : ERR; + + break; case 0xd4: v.type = rd(&v.ext, 1, 0) && rd(&v.uns, 1, 0) && rdbuf(&v.str, v.sz = v.uns) ? EXT : ERR; + break; case 0xd5: v.type = rd(&v.ext, 1, 0) && rd(&v.uns, 2, 1) && rdbuf(&v.str, v.sz = v.uns) ? EXT : ERR; + break; case 0xd6: v.type = rd(&v.ext, 1, 0) && rd(&v.uns, 4, 1) && rdbuf(&v.str, v.sz = v.uns) ? EXT : ERR; + break; case 0xd7: v.type = rd(&v.ext, 1, 0) && rd(&v.uns, 8, 1) && rdbuf(&v.str, v.sz = v.uns) ? EXT : ERR; + break; case 0xd8: v.type = rd(&v.ext, 1, 0) && rd(&v.uns,16, 1) && rdbuf(&v.str, v.sz = v.uns) ? EXT : ERR; + + break; case 0xc7: v.type = rd(&v.sz, 1, 0) && rd(&v.ext, 1, 0) && rdbuf(&v.str,v.sz) ? EXT : ERR; + break; case 0xc8: v.type = rd(&v.sz, 2, 1) && rd(&v.ext, 1, 1) && rdbuf(&v.str,v.sz) ? EXT : ERR; + break; case 0xc9: v.type = rd(&v.sz, 4, 1) && rd(&v.ext, 1, 1) && rdbuf(&v.str,v.sz) ? EXT : ERR; + } + return *w = v, v.type != ERR; +} +bool msgunpack_nil() { + return msgunpack_var(&in.v) && (in.v.type == NIL); +} +bool msgunpack_chr(bool *chr) { + return msgunpack_var(&in.v) && (*chr = in.v.chr, in.v.type == BOL); +} +bool msgunpack_uns(uint64_t *uns) { + return msgunpack_var(&in.v) && (*uns = in.v.uns, in.v.type == UNS); +} +bool msgunpack_int(int64_t *sig) { + return msgunpack_var(&in.v) && (*sig = in.v.sig, in.v.type == SIG); +} +bool msgunpack_flt(float *flt) { + return msgunpack_var(&in.v) && (*flt = in.v.flt, in.v.type == FLT); +} +bool msgunpack_dbl(double *dbl) { + return msgunpack_var(&in.v) && (*dbl = in.v.flt, in.v.type == FLT); +} +bool msgunpack_bin(void **bin, uint64_t *len) { + return msgunpack_var(&in.v) && (*bin = in.v.bin, *len = in.v.sz, in.v.type == BIN); +} +bool msgunpack_str(char **str) { + return msgunpack_var(&in.v) && (str ? *str = in.v.str, in.v.type == STR : in.v.type == STR); +} +bool msgunpack_ext(uint8_t *key, void **val, uint64_t *len) { + return msgunpack_var(&in.v) && (*key = in.v.ext, *val = in.v.bin, *len = in.v.sz, in.v.type == EXT); +} +bool msgunpack_arr(uint64_t *len) { + return msgunpack_var(&in.v) && (*len = in.v.sz, in.v.type == ARR); +} +bool msgunpack_map(uint64_t *len) { + return msgunpack_var(&in.v) && (*len = in.v.sz, in.v.type == MAP); +} + + +int msgpack(const char *fmt, ... ) { + int count = 0; + va_list vl; + va_start(vl, fmt); + while( *fmt ) { + char f = *fmt++; + switch( f ) { + break; case '{': { int i = va_arg(vl, int64_t); count += msgpack_map( i ); } + break; case '[': { int i = va_arg(vl, int64_t); count += msgpack_arr( i ); } + break; case 'b': { bool v = !!va_arg(vl, int64_t); count += msgpack_chr(v); } + break; case 'e': { uint8_t k = va_arg(vl, uint64_t); void *v = va_arg(vl, void*); size_t l = va_arg(vl, uint64_t); count += msgpack_ext( k, v, l ); } + break; case 'n': { count += msgpack_nil(); } + break; case 'p': { void *p = va_arg(vl, void*); size_t l = va_arg(vl, uint64_t); count += msgpack_bin( p, l ); } + break; case 's': { const char *v = va_arg(vl, const char *); count += msgpack_str(v); } + break; case 'u': { uint64_t v = va_arg(vl, uint64_t); count += msgpack_uns(v); } + break; case 'd': case 'i': { int64_t v = va_arg(vl, int64_t); count += msgpack_int(v); } + break; case 'f': case 'g': { double v = va_arg(vl, double); count += msgpack_flt(v); } + default: /*count = 0;*/ break; + } + } + va_end(vl); + return count; +} +int msgunpack(const char *fmt, ... ) { + int count = 0; + va_list vl; + va_start(vl, fmt); + while( *fmt ) { + char f = *fmt++; + switch( f ) { + break; case '{': { int64_t *i = va_arg(vl, int64_t*); count += msgunpack_map( i ); } + break; case '[': { int64_t *i = va_arg(vl, int64_t*); count += msgunpack_arr( i ); } + break; case 'f': { float *v = va_arg(vl, float*); count += msgunpack_flt(v); } + break; case 'g': { double *v = va_arg(vl, double*); count += msgunpack_dbl(v); } + break; case 's': { char **v = va_arg(vl, char **); count += msgunpack_str(v); } +// break; case 'b': { bool *v = !!va_arg(vl, bool*); count += msgunpack_chr(v); } +// break; case 'e': { uint8_t k = va_arg(vl, uint64_t); void *v = va_arg(vl, void*); size_t l = va_arg(vl, uint64_t); count += msgunpack_ext( k, v, l ); } +// break; case 'n': { count += msgunpack_nil(); } + break; case 'p': { void *p = va_arg(vl, void*); uint64_t l = va_arg(vl, uint64_t); count += msgunpack_bin( p, &l ); } +// break; case 'u': { uint64_t v = va_arg(vl, uint64_t); count += msgunpack_uns(v); } +// break; case 'd': case 'i': { int64_t v = va_arg(vl, int64_t); count += msgunpack_int(v); } + default: /*count = 0;*/ break; + } + } + va_end(vl); + return count; +} + +#if 0 +AUTORUN { +# define unit(title) +# define data(data) msgunpack_new(data, sizeof(data) -1 ) +# define TEST(expr) test(msgunpack_var(&obj) && !!(expr)) + + int test_len; + const char *test_data = 0; + struct variant obj = {0}; + + /* + * Test vectors are derived from + * `https://github.com/ludocode/mpack/blob/v0.8.2/test/test-write.c`. + */ + + unit("(minposfixint)"); + data("\x00"); + TEST(obj.type == UNS && obj.sz == 1 && obj.uns == 0); + + unit("(maxposfixint)"); + data("\x7f"); + TEST(obj.type == UNS && obj.sz == 1 && obj.uns == 127); + + unit("(maxnegfixint)"); + data("\xe0"); + TEST(obj.type == SIG && obj.sz == 1 && obj.uns == -32); + + unit("(minnegfixint)"); + data("\xff"); + TEST(obj.type == SIG && obj.sz == 1 && obj.uns == -1); + + unit("(uint8)"); + data("\xcc\0"); + TEST(obj.type == UNS && obj.sz == 1 && obj.uns == 0); + + unit("(uint16)"); + data("\xcd\0\0"); + TEST(obj.type == UNS && obj.sz == 2 && obj.uns == 0); + + unit("(uint32)"); + data("\xce\0\0\0\0"); + TEST(obj.type == UNS && obj.sz == 4 && obj.uns == 0); + + unit("(uint64)"); + data("\xcf\0\0\0\0\0\0\0\0"); + TEST(obj.type == UNS && obj.sz == 8 && obj.uns == 0); + + unit("(float32)"); + data("\xca\0\0\0\0"); + TEST(obj.type == FLT && obj.sz == 4 && obj.uns == 0); + + unit("(float64)"); + data("\xcb\0\0\0\0\0\0\0\0"); + TEST(obj.type == FLT && obj.sz == 8 && obj.uns == 0); + + unit("(string)"); + data("\xa5Hello"); + TEST(obj.type == STR && obj.sz == 5 && !strcmp(obj.str, "Hello")); + + unit("(str8)"); + data("\xd9\x05Hello"); + TEST(obj.type == STR && obj.sz == 5 && !strcmp(obj.str, "Hello")); + + unit("(str16)"); + data("\xda\0\x05Hello"); + TEST(obj.type == STR && obj.sz == 5 && !strcmp(obj.str, "Hello")); + + unit("(str32)"); + data("\xdb\0\0\0\x05Hello"); + TEST(obj.type == STR && obj.sz == 5 && !strcmp(obj.str, "Hello")); + + unit("(array)"); + data("\x91\x01"); + TEST(obj.type == ARR && obj.sz == 1); + + unit("(array8)"); + data("\x91\x01"); + TEST(obj.type == ARR && obj.sz == 1); + + unit("(array16)"); + data("\xdc\0\x01\x01"); + TEST(obj.type == ARR && obj.sz == 1); + + unit("(map8)"); + data("\x81\x01\x01"); + TEST(obj.type == MAP && obj.sz == 1); + TEST(obj.type == UNS && obj.sz == 1 && obj.uns == 1); + TEST(obj.type == UNS && obj.sz == 1 && obj.uns == 1); + + unit("(map32)"); + data("\xdf\0\0\0\x01\xa5Hello\x01"); + TEST(obj.type == MAP && obj.sz == 1); + TEST(obj.type == STR && obj.sz == 5 && !strcmp(obj.str, "Hello")); + TEST(obj.type == UNS && obj.sz == 1 && obj.uns == 1); + + unit("(+fixnum)"); + data("\x00"); TEST(obj.type == UNS && obj.uns == 0); + data("\x01"); TEST(obj.type == UNS && obj.uns == 1); + data("\x02"); TEST(obj.type == UNS && obj.uns == 2); + data("\x0f"); TEST(obj.type == UNS && obj.uns == 0x0f); + data("\x10"); TEST(obj.type == UNS && obj.uns == 0x10); + data("\x7f"); TEST(obj.type == UNS && obj.uns == 0x7f); + + unit("(-fixnum)"); + data("\xff"); TEST(obj.type == SIG && obj.sig == -1); + data("\xfe"); TEST(obj.type == SIG && obj.sig == -2); + data("\xf0"); TEST(obj.type == SIG && obj.sig == -16); + data("\xe0"); TEST(obj.type == SIG && obj.sig == -32); + + unit("(+int)"); + data("\xcc\x80"); TEST(obj.type == UNS && obj.uns == 0x80); + data("\xcc\xff"); TEST(obj.type == UNS && obj.uns == 0xff); + data("\xcd\x01\x00"); TEST(obj.type == UNS && obj.uns == 0x100); + data("\xcd\xff\xff"); TEST(obj.type == UNS && obj.uns == 0xffff); + data("\xce\x00\x01\x00\x00"); TEST(obj.type == UNS && obj.uns == 0x10000); + data("\xce\xff\xff\xff\xff"); TEST(obj.type == UNS && obj.uns == 0xffffffffull); + data("\xcf\x00\x00\x00\x01\x00\x00\x00\x00"); TEST(obj.type == UNS && obj.uns == 0x100000000ull); + data("\xcf\xff\xff\xff\xff\xff\xff\xff\xff"); TEST(obj.type == UNS && obj.uns == 0xffffffffffffffffull); + + unit("(-int)"); + data("\xd0\xdf"); TEST(obj.type == SIG && obj.sig == -33); + data("\xd0\x80"); TEST(obj.type == SIG && obj.sig == -128); + data("\xd1\xff\x7f"); TEST(obj.type == SIG && obj.sig == -129); + data("\xd1\x80\x00"); TEST(obj.type == SIG && obj.sig == -32768); + data("\xd2\xff\xff\x7f\xff"); TEST(obj.type == SIG && obj.sig == -32769); + data("\xd2\x80\x00\x00\x00"); TEST(obj.type == SIG && obj.sig == -2147483648ll); + data("\xd3\xff\xff\xff\xff\x7f\xff\xff\xff"); TEST(obj.type == SIG && obj.sig == -2147483649ll); + data("\xd3\x80\x00\x00\x00\x00\x00\x00\x00"); TEST(obj.type == SIG && obj.sig == INT64_MIN); + + unit("(misc)"); + data("\xc0"); TEST(obj.type == NIL && obj.chr == 0); + data("\xc2"); TEST(obj.type == BOL && obj.chr == 0); + data("\xc3"); TEST(obj.type == BOL && obj.chr == 1); + + data("\x90"); TEST(obj.type == ARR && obj.sz == 0); + + data("\x91\xc0"); + TEST(obj.type==ARR && obj.sz==1); + TEST(obj.type==NIL); + + data("\x9f\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e"); + TEST(obj.type==ARR && obj.sz==15); + for(int i = 0; i < 15; ++i) { + TEST(obj.type==UNS && obj.sig==i); + } + + data("\xdc\x00\x10\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c" + "\x0d\x0e\x0f"); + TEST(obj.type==ARR && obj.sz==16); + for(unsigned i = 0; i < 16; ++i) { + TEST(obj.type == UNS && obj.uns == i); + } + + data("\x80"); + TEST(obj.type == MAP && obj.sz == 0); + + data("\x81\xc0\xc0"); + TEST(obj.type == MAP && obj.sz == 1); + TEST(obj.type == NIL); + TEST(obj.type == NIL); + + data("\x82\x00\x00\x01\x01"); + TEST(obj.type == MAP && obj.sz == 2); + TEST(obj.type == UNS && obj.sig == 0); + TEST(obj.type == UNS && obj.sig == 0); + TEST(obj.type == UNS && obj.sig == 1); + TEST(obj.type == UNS && obj.sig == 1); + + data("\x8f\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e" + "\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d"); + TEST(obj.type == MAP && obj.sz == 15); + for(unsigned i = 0; i < 15; ++i) { + TEST(obj.type == UNS && obj.uns == i*2+0); + TEST(obj.type == UNS && obj.uns == i*2+1); + } + + data("\xde\x00\x10\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c" + "\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c" + "\x1d\x1e\x1f"); + TEST(obj.type == MAP && obj.sz == 16); + for(unsigned i = 0; i < 16; ++i) { + TEST(obj.type == UNS && obj.uns == i*2+0); + TEST(obj.type == UNS && obj.uns == i*2+1); + } + + data("\x91\x90"); + test( obj.type == ARR && obj.sz == 1 ); + test( obj.type == ARR && obj.sz == 0 ); + + data("\x93\x90\x91\x00\x92\x01\x02"); + test( obj.type == ARR && obj.sz == 3 ); + test( obj.type == ARR && obj.sz == 0 ); + test( obj.type == ARR && obj.sz == 1 ); + test( obj.type == UNS && obj.uns == 0 ); + test( obj.type == ARR && obj.sz == 2 ); + test( obj.type == UNS && obj.uns == 1 ); + test( obj.type == UNS && obj.uns == 2 ); + + data("\x95\x90\x91\xc0\x92\x90\x91\xc0\x9f\x00\x01\x02\x03\x04\x05\x06" + "\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\xdc\x00\x10\x00\x01\x02\x03\x04" + "\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"); + test( obj.type == ARR && obj.sz == 5 ); + test( obj.type == ARR && obj.sz == 0 ); + test( obj.type == ARR && obj.sz == 1 ); + test( obj.type == NIL ); + test( obj.type == ARR && obj.sz == 2 ); + test( obj.type == ARR && obj.sz == 0 ); + test( obj.type == ARR && obj.sz == 1 ); + test( obj.type == NIL ); + test( obj.type == ARR && obj.sz == 15 ); + for( unsigned i = 0; i < 15; ++i ) { + test( obj.type == UNS && obj.uns == i ); + } + test( obj.type == ARR && obj.sz == 16 ); + for( unsigned i = 0; i < 15; ++i ) { + test( obj.type == UNS && obj.uns == i ); + } + + data("\x85\x00\x80\x01\x81\x00\xc0\x02\x82\x00\x80\x01\x81\xc0\xc0\x03" + "\x8f\x00\x00\x01\x01\x02\x02\x03\x03\x04\x04\x05\x05\x06\x06\x07" + "\x07\x08\x08\x09\x09\x0a\x0a\x0b\x0b\x0c\x0c\x0d\x0d\x0e\x0e\x04" + "\xde\x00\x10\x00\x00\x01\x01\x02\x02\x03\x03\x04\x04\x05\x05\x06" + "\x06\x07\x07\x08\x08\x09\x09\x0a\x0a\x0b\x0b\x0c\x0c\x0d\x0d\x0e" + "\x0e\x0f\x0f"); + TEST(obj.type == MAP && obj.sz == 5); + TEST(obj.type == UNS && obj.uns == 0); + TEST(obj.type == MAP && obj.sz == 0); + TEST(obj.type == UNS && obj.uns == 1); + TEST(obj.type == MAP && obj.sz == 1); + TEST(obj.type == UNS && obj.uns == 0); + TEST(obj.type == NIL); + TEST(obj.type == UNS && obj.uns == 2); + TEST(obj.type == MAP && obj.sz == 2); + TEST(obj.type == UNS && obj.uns == 0); + TEST(obj.type == MAP && obj.sz == 0); + TEST(obj.type == UNS && obj.uns == 1); + TEST(obj.type == MAP && obj.sz == 1); + TEST(obj.type == NIL); + TEST(obj.type == NIL); + TEST(obj.type == UNS && obj.uns == 3); + TEST(obj.type == MAP && obj.sz == 15); + for( unsigned i = 0; i < 15; ++i ) { + TEST(obj.type == UNS && obj.uns == i); + TEST(obj.type == UNS && obj.uns == i); + } + TEST(obj.type == UNS && obj.uns == 4); + TEST(obj.type == MAP && obj.sz == 16); + for( unsigned i = 0; i < 16; ++i ) { + TEST(obj.type == UNS && obj.uns == i); + TEST(obj.type == UNS && obj.uns == i); + } + + data("\x85\xd0\xd1\x91\xc0\x90\x81\xc0\x00\xc0\x82\xc0\x90\x04\x05\xa5" + "\x68\x65\x6c\x6c\x6f\x93\xa7\x62\x6f\x6e\x6a\x6f\x75\x72\xc0\xff" + "\x91\x5c\xcd\x01\x5e"); + TEST(obj.type == MAP && obj.sz == 5); + TEST(obj.type == SIG && obj.sig == -47); + TEST(obj.type == ARR && obj.sz == 1); + TEST(obj.type == NIL); + TEST(obj.type == ARR && obj.sz == 0); + TEST(obj.type == MAP && obj.sz == 1); + TEST(obj.type == NIL); + TEST(obj.type == UNS && obj.uns == 0); + TEST(obj.type == NIL); + TEST(obj.type == MAP && obj.sz == 2); + TEST(obj.type == NIL); + TEST(obj.type == ARR && obj.sz == 0); + TEST(obj.type == UNS && obj.uns == 4); + TEST(obj.type == UNS && obj.uns == 5); + TEST(obj.type == STR && !strcmp(obj.str, "hello")); + TEST(obj.type == ARR && obj.sz == 3); + TEST(obj.type == STR && !strcmp(obj.str, "bonjour")); + TEST(obj.type == NIL); + TEST(obj.type == SIG && obj.sig == -1); + TEST(obj.type == ARR && obj.sz == 1); + TEST(obj.type == UNS && obj.uns == 92); + TEST(obj.type == UNS && obj.uns == 350); + + data("\x82\xa7" "compact" "\xc3\xa6" "schema" "\x00"); + TEST(obj.type == MAP && obj.sz == 2); + TEST(obj.type == STR && obj.sz == 7 && !strcmp(obj.str, "compact")); + TEST(obj.type == BOL && obj.chr == 1); + TEST(obj.type == STR && obj.sz == 6 && !strcmp(obj.str, "schema")); + TEST(obj.type == UNS && obj.sz == 1 && obj.uns == 0); + +# undef TEST +# undef data +# undef unit +} + +bool vardump( struct variant *w ) { + static int tabs = 0; + struct variant v = *w; + printf("%.*s", tabs, "\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t"); + switch( v.type ) { + default: case ERR: + if( !msgunpack_eof() ) printf("ERROR: unknown tag type (%02X)\n", (int)v.type); + return false; + break; case NIL: printf("(%s)\n", "null"); + break; case BOL: printf("bool: %d\n", v.chr); + break; case SIG: printf("int: %lld\n", v.sig); + break; case UNS: printf("uint: %llu\n", v.uns); + break; case FLT: printf("float: %g\n", v.flt); + break; case STR: printf("string: '%s'\n", v.str); + break; case BIN: { for( size_t n = 0; n < v.sz; n++ ) printf("%s%02x(%c)", n > 0 ? " ":"binary: ", v.str[n], v.str[n] >= 32 ? v.str[n] : '.'); puts(""); } + break; case EXT: { printf("ext: [%02X (%d)] ", v.ext, v.ext); for( size_t n = 0; n < v.sz; n++ ) printf("%s%02x(%c)", n > 0 ? " ":"", v.str[n], v.str[n] >= 32 ? v.str[n] : '.'); puts(""); } + break; case ARR: { + ++tabs; puts("["); + for( size_t n = v.sz; n-- > 0; ) { + if( !msgunpack_var(&v) || !vardump(&v) ) return false; + } + --tabs; puts("]"); + } + break; case MAP: { + ++tabs; puts("{"); + for( size_t n = v.sz; n-- > 0; ) { + if( !msgunpack_var(&v) || !vardump(&v) ) return false; + if( !msgunpack_var(&v) || !vardump(&v) ) return false; + } + --tabs; puts("}"); + }} + return true; +} + +void testdump( const char *fname ) { + FILE *fp = fopen(fname, "rb"); + if( !fp ) { + fputs("Cannot read input stream", stderr); + } else { + if( msgunpack_new(fp, 0) ) { + struct variant v; + while( msgunpack_var(&v) ) { + vardump(&v); + } + if( msgunpack_err() ) { + fputs("Error while unpacking", stderr); + } + } + fclose(fp); + } +} + +void testwrite(const char *outfile) { + char buf[256]; + msgpack_new(buf, 256); + int len = msgpack("ddufs [dddddddd-dddddddd {sisi bne"/*bp0*/, + -123LL, 123LL, 123456ULL, 3.14159f, "hello world", + 16ULL, + -31LL, -32LL, -127LL, -128LL, -255LL, -256LL, -511LL, -512LL, // ,121, 3, "hi", + +31LL, +32LL, +127LL, +128LL, +255LL, +256LL, +511LL, +512LL, // ,121, 3, "hi", + 2ULL, + "hello", -123LL, + "world", -456LL, + 1ULL, + 0xeeULL, "this is an EXT type", sizeof("this is an EXT type")-1 + ); + hexdump(buf, len); + + FILE *fp = fopen(outfile, "wb"); + if( fp ) { + fwrite( buf, len, 1, fp ); + fclose(fp); + } +} + +AUTORUN { + testwrite("out.mp"); + testdump("out.mp"); +} +#endif + +// ---------------------------------------------------------------------------- +// STRUCT PACKING +// Based on code by Brian "Beej Jorgensen" Hall (public domain) [1]. +// Based on code by Ginger Bill's half<->float (public domain) [2]. +// - rlyeh, public domain. +// +// pack.c -- perl/python-ish pack/unpack functions +// like printf and scanf, but for binary data. +// +// format flags: +// (<) little endian (>) big endian (! also) (=) native endian +// (c) 8-bit char (b) 8-bit byte +// (h) 16-bit half (w) 16-bit word +// (i) 32-bit integer (u) 32-bit unsigned (f) 32-bit float +// (l) 64-bit long (q) 64-bit quad (d) 64-bit double +// (v) varint +// (s) string (64-bit varint length prepended) +// (S) string (32-bit fixed length prepended) +// (m) memblock (64-bit varint length prepended) +// (M) memblock (32-bit fixed length prepended) +// (z) memblock (zeroed) +// (#) number of arguments processed (only when unpacking) +// +// @todo: +// - (x) document & test flag +// @totest: +// - (s) string (64-bit variable length automatically prepended) +// - (S) string (32-bit fixed length automatically prepended) +// - (m) memblock (64-bit variable length automatically prepended) +// - (M) memblock (32-bit fixed length automatically prepended) +// - (z) memblock (zeroed) +// - (#) number of arguments processed (only when unpacking) +// +// @refs: +// [1] http://beej.us/guide/bgnet/output/html/multipage/advanced.html#serialization (Modified to encode NaN and Infinity as well.) +// [2] https://github.com/gingerBill/gb +// [3] http://www.mrob.com/pub/math/floatformats.html#minifloat +// [4] microfloat: [0.002 to 240] range. +// [5] half float: can approximate any 16-bit unsigned integer or its reciprocal to 3 decimal places. + +// b/f packing ----------------------------------------------------------------- + +int loadb_(const uint8_t *buf, const char *fmt, va_list ap) { + uint64_t args = 0; + const uint8_t *buf0 = buf; + char tmp[16+1]; + //uint64_t size = 0, len; + int32_t len, count, maxstrlen=0; + int le = 0; + + if(!buf) // buffer estimation + for(; *fmt != '\0'; fmt++) { + switch(*fmt) { + default: if (!isdigit(*fmt)) return 0; + break; case '!': case '>': case '<': case '=': case ' ': // 0-bit endianness + break; case 'c': case 'b': { int8_t c = (int8_t)va_arg(ap, int); buf += 1; } // 8-bit promoted + break; case 'h': case 'w': { int16_t h = (int16_t)va_arg(ap, int); buf += 2; } // 16-bit promoted + break; case 'i': case 'u': { int32_t l = va_arg(ap, int32_t); buf += 4; } // 32-bit + break; case 'l': case 'q': { int64_t L = va_arg(ap, int64_t); buf += 8; } // 64-bit + break; case 'f': { float f = (float)va_arg(ap, double); buf += 4; } // 32-bit float promoted + break; case 'd': { double F = (double)va_arg(ap, double); buf += 8; } // 64-bit float (double) + break; case 'v': { int64_t L = va_arg(ap, int64_t); buf += pack64iv(tmp, L); } // varint (8,16,32,64 ...) + break; case 's': { char* s = va_arg(ap, char*); len = strlen(s); buf += pack64iv(tmp, len) + len; } // string, 64-bit variable length prepended + break; case 'S': { char* s = va_arg(ap, char*); len = strlen(s); buf += 4 + len; } // string, 32-bit fixed length prepended + break; case 'm': { int len = va_arg(ap, int); char *s = va_arg(ap, char*); buf += pack64iv(tmp, len) + len; } // memblock, 64-bit variable length prepended + break; case 'M': { int len = va_arg(ap, int); char *s = va_arg(ap, char*); buf += 4 + len; } // memblock, 32-bit fixed length prepended + break; case 'z': { int len = va_arg(ap, int); buf += len; } // memblock (zeroed) + } + } + + if(buf) // buffer unpacking + for(; *fmt != '\0'; fmt++) { + switch(*fmt) { + default: + if (isdigit(*fmt)) { // track max str len + maxstrlen = maxstrlen * 10 + (*fmt-'0'); + } else { + return 0; + } + break; case ' ': + break; case '!': le = 0; + break; case '>': le = 0; + break; case '<': le = 1; + break; case '=': le = is_little() ? 1 : 0; + break; case 'c': case 'b': ++args; { // 8-bit + int8_t *v = va_arg(ap, int8_t*); + *v = *buf <= 0x7f ? (int8_t)*buf : -1 -(uint8_t)(0xffu - *buf); + buf += 1; + } + break; case 'h': case 'w': ++args; { // 16-bit + int16_t *v = va_arg(ap, int16_t*); + *v = unpack16i(buf, le); + buf += 2; + } + break; case 'i': case 'u': ++args; { // 32-bit + int32_t *v = va_arg(ap, int32_t*); + *v = unpack32i(buf, le); + buf += 4; + } + break; case 'l': case 'q': ++args; { // 64-bit + int64_t *v = va_arg(ap, int64_t*); + *v = unpack64i(buf, le); + buf += 8; + } + break; case 'v': ++args; { // varint (8,16,32,64 ...) + int64_t *L = va_arg(ap, int64_t*); + buf += unpack64iv(buf, L); + } + break; case 'f': ++args; { // 32-bit float + float *v = va_arg(ap, float*); + int32_t i = unpack32i(buf, le); + *v = unpack754_32(i); + buf += 4; + } + break; case 'd': ++args; { // 64-bit float (double) + double *v = va_arg(ap, double*); + int64_t i = unpack64i(buf, le); + *v = unpack754_64(i); + buf += 8; + } + break; case 'S': ++args; { // string, 32-bit fixed length prepended + char *s = va_arg(ap, char*); + int64_t vlen = unpack32i(buf, le), read = 4; + count = (maxstrlen > 0 && vlen >= maxstrlen ? maxstrlen - 1 : vlen); + memcpy(s, buf + read, count); + s[count] = '\0'; + buf += read + vlen; + } + break; case 's': ++args; { // string, 64-bit variable length prepended + char *s = va_arg(ap, char*); + int64_t vlen, read = unpack64iv(buf, &vlen); + count = (maxstrlen > 0 && vlen >= maxstrlen ? maxstrlen - 1 : vlen); + memcpy(s, buf + read, count); + s[count] = '\0'; + buf += read + vlen; + } + break; case 'M': ++args; { // memblock, 32-bit fixed length prepended + char *s = va_arg(ap, char*); + int64_t vlen = unpack64iv(buf, &vlen), read = 4; + count = vlen; //(maxstrlen > 0 && vlen >= maxstrlen ? maxstrlen - 1 : vlen); + memcpy(s, buf + read, count); + //s[count] = '\0'; + buf += read + vlen; + } + break; case 'm': ++args; { // memblock, 64-bit variable length prepended + char *s = va_arg(ap, char*); + int64_t vlen, read = unpack64iv(buf, &vlen); + count = vlen; //(maxstrlen > 0 && vlen >= maxstrlen ? maxstrlen - 1 : vlen); + memcpy(s, buf + read, count); + //s[count] = '\0'; + buf += read + vlen; + } + break; case 'z': ++args; { // zero-init mem block + int *l = va_arg(ap, int*); + const uint8_t *prev = buf; + while( *buf == 0 ) ++buf; + *l = buf - prev; + } + break; case '#': { + int *l = va_arg(ap, int*); + *l = args; + } + } + + if (!isdigit(*fmt)) { + maxstrlen = 0; + } + } + + return (int)( buf - buf0 ); +} + +int saveb_(uint8_t *buf, const char *fmt, va_list ap) { + uint64_t size = 0, len; + int le = 0; + + // buffer estimation + if( !buf ) { + return loadb_(buf, fmt, ap); // + strlen(buf) * 17; // worse (v)arint estimation for 128-bit ints (17 bytes each) + } + + // buffer packing + for(; *fmt != '\0'; fmt++) { + switch(*fmt) { + default: size = 0; // error + break; case '!': le = 0; + break; case '>': le = 0; + break; case '<': le = 1; + break; case ' ': le = le; + break; case '=': le = is_little() ? 1 : 0; + break; case 'c': case 'b': { // 8-bit + int v = (int8_t)va_arg(ap, int /*promoted*/ ); + *buf++ = (v>>0)&0xff; + size += 1; + } + break; case 'h': case 'w': { // 16-bit + int v = (int16_t)va_arg(ap, int /*promoted*/ ); + pack16i(buf, v, le); + buf += 2; + size += 2; + } + break; case 'i': case 'u': { // 32-bit + int32_t v = va_arg(ap, int32_t); + pack32i(buf, v, le); + buf += 4; + size += 4; + } + break; case 'l': case 'q': { // 64-bit + int64_t v = va_arg(ap, int64_t); + pack64i(buf, v, le); + buf += 8; + size += 8; + } + break; case 'v': { // varint (8,16,32,64 ...) + int64_t v = va_arg(ap, int64_t); + int64_t L = pack64iv(buf, v); + buf += L; + size += L; + } + break; case 'f': { // 32-bit float + double v = (float)va_arg(ap, double /*promoted*/ ); + int32_t i = pack754_32(v); // convert to IEEE 754 + pack32i(buf, i, le); + buf += 4; + size += 4; + } + break; case 'd': { // 64-bit float (double) + double v = (double)va_arg(ap, double); + int64_t i = pack754_64(v); // convert to IEEE 754 + pack64i(buf, i, le); + buf += 8; + size += 8; + } + break; case 'S': { // string, 32-bit fixed length prepended + char* s = va_arg(ap, char*); + int len = strlen(s); + pack32i(buf, len, le); + memcpy(buf + 4, s, len); + buf += 4 + len; + size += 4 + len; + } + break; case 's': { // string, 64-bit variable length prepended + char* s = va_arg(ap, char*); + int len = strlen(s); + int64_t L = pack64iv(buf, len); + memcpy(buf + L, s, len); + buf += L + len; + size += L + len; + } + break; case 'M': { // memblock, 32-bit fixed length prepended + int len = va_arg(ap, int); + char* s = va_arg(ap, char*); + pack32i(buf, len, le); + memcpy(buf + 4, s, len); + buf += 4 + len; + size += 4 + len; + } + break; case 'm': { // memblock, 64-bit variable length prepended + int len = va_arg(ap, int); + char* s = va_arg(ap, char*); + int64_t L = pack64iv(buf, len); + memcpy(buf + L, s, len); + buf += L + len; + size += L + len; + } + break; case 'z': { // memblock (zeroed) + int len = va_arg(ap, int); + memset(buf, 0, len); + buf += len; + size += len; + } + } + } + + return (int)size; +} + + +int saveb(uint8_t *buf, const char *fmt, ...) { + va_list ap; + va_start(ap, fmt); + int rc = saveb_( buf, fmt, ap); + va_end(ap); + return rc; +} +int loadb(const uint8_t *buf, const char *fmt, ...) { + va_list ap; + va_start(ap, fmt); + int rc = loadb_( buf, fmt, ap); + va_end(ap); + return rc; +} + +int savef(FILE *fp, const char *fmt, ...) { + va_list ap; + va_start(ap, fmt); + + // estimate bytes + int req = saveb_( 0, fmt, ap); + + char stack[4096]; + char *buf = req < 4096 ? stack : (char*)calloc(1, req + 1 ); + int rc = saveb_(buf, fmt, ap); + fwrite(buf, req,1, fp); + if( !(req < 4096) ) free(buf); + + va_end(ap); + return rc; +} +int loadf(FILE *fp, const char *fmt, ...) { + va_list ap; + va_start(ap, fmt); + + // estimate bytes + int req = loadb_( 0, fmt, ap) * 2; // *2 in case it is underestimated + + char stack[4096]; + char *buf = req < 4096 ? stack : (char*)calloc(1, req + 1 ); + fread(buf, req,1, fp); + int rc = loadb_(buf, fmt, ap); + if( !(req < 4096) ) free(buf); + + va_end(ap); + return rc; +} + +#if 0 +AUTORUN { + const char *dna = "3b8bhbhbbhhbhhhuu"; // "1c1h212122122233"; "i3c8chchchhchhhdd" + + struct bootsector { + uint8_t jump_instruction[3]; + uint8_t oem_name[8]; + uint16_t bytes_per_sector; + uint8_t sectors_per_cluster; + uint16_t reserved_sectors; + uint8_t fat_copies; + uint16_t max_dirs; + uint16_t sector_count; + uint8_t media_descriptor; + uint16_t sectors_per_fat; + uint16_t sectors_per_head; + uint16_t heads; + uint32_t hidden_sectors; + uint32_t sector_countz; + } fat = { {0,1,2},{3,4,5,6,7,8,9,10},11,12,13,14,15,16,17,18,19,20,21,22 }; + hexdump(&fat, sizeof(struct bootsector)); + + FILE *fp = fopen("test.mbr", "wb"); + savef(fp, dna, &fat); // + fclose(fp); + + memset(&fat, 0, sizeof(struct bootsector)); + + fp = fopen("test.mbr", "rb"); + loadf(fp, dna, &fat); + fclose(fp); + + hexdump(&fat, sizeof(struct bootsector)); +} +#endif + +// ---------------------------------------------------------------------------- +// compression api + +static struct zcompressor { + // id of compressor + unsigned enumerator; + // name of compressor + const char name1, *name4, *name; + // returns worst case compression estimation for selected flags + unsigned (*bounds)(unsigned bytes, unsigned flags); + // returns number of bytes written. 0 if error. + unsigned (*encode)(const void *in, unsigned inlen, void *out, unsigned outcap, unsigned flags); + // returns number of excess bytes that will be overwritten when decoding. + unsigned (*excess)(unsigned flags); + // returns number of bytes written. 0 if error. + unsigned (*decode)(const void *in, unsigned inlen, void *out, unsigned outcap); +} zlist[] = { + { COMPRESS_RAW, '0', "raw", "raw", raw_bounds, raw_encode, raw_excess, raw_decode }, + { COMPRESS_PPP, 'p', "ppp", "ppp", ppp_bounds, ppp_encode, ppp_excess, ppp_decode }, + { COMPRESS_ULZ, 'u', "ulz", "ulz", ulz_bounds, ulz_encode, ulz_excess, ulz_decode }, + { COMPRESS_LZ4, '4', "lz4x", "lz4x", lz4x_bounds, lz4x_encode, lz4x_excess, lz4x_decode }, + { COMPRESS_CRUSH, 'c', "crsh", "crush", crush_bounds, crush_encode, crush_excess, crush_decode }, + { COMPRESS_DEFLATE, 'd', "defl", "deflate", deflate_bounds, deflate_encode, deflate_excess, deflate_decode }, + { COMPRESS_LZP1, '1', "lzp1", "lzp1", lzp1_bounds, lzp1_encode, lzp1_excess, lzp1_decode }, + { COMPRESS_LZMA, 'm', "lzma", "lzma", lzma_bounds, lzma_encode, lzma_excess, lzma_decode }, + { COMPRESS_BALZ, 'b', "balz", "balz", balz_bounds, balz_encode, balz_excess, balz_decode }, + { COMPRESS_LZW3, 'w', "lzw3", "lzrw3a", lzrw3a_bounds, lzrw3a_encode, lzrw3a_excess, lzrw3a_decode }, + { COMPRESS_LZSS, 's', "lzss", "lzss", lzss_bounds, lzss_encode, lzss_excess, lzss_decode }, + { COMPRESS_BCM, 'B', "bcm", "bcm", bcm_bounds, bcm_encode, bcm_excess, bcm_decode }, + { COMPRESS_ZLIB, 'z', "zlib", "zlib", deflate_bounds, deflatez_encode, deflate_excess, deflatez_decode }, +}; + +enum { COMPRESS_NUM = 14 }; + +static char *znameof(unsigned flags) { + static __thread char buf[16]; + snprintf(buf, 16, "%4s.%c", zlist[(flags>>4)&0x0F].name4, "0123456789ABCDEF"[flags&0xF]); + return buf; +} +unsigned zencode(void *out, unsigned outlen, const void *in, unsigned inlen, unsigned flags) { + return zlist[(flags >> 4) % COMPRESS_NUM].encode(in, inlen, (uint8_t*)out, outlen, flags & 0x0F); +} +unsigned zdecode(void *out, unsigned outlen, const void *in, unsigned inlen, unsigned flags) { + return zlist[(flags >> 4) % COMPRESS_NUM].decode((uint8_t*)in, inlen, out, outlen); +} +unsigned zbounds(unsigned inlen, unsigned flags) { + return zlist[(flags >> 4) % COMPRESS_NUM].bounds(inlen, flags & 0x0F); +} +unsigned zexcess(unsigned flags) { + return zlist[(flags >> 4) % COMPRESS_NUM].excess(flags & 0x0F); +} + +// ---------------------------------------------------------------------------- +// BASE92 en/decoder +// THE BEERWARE LICENSE (Revision 42): +// wrote this file. As long as you retain this notice you +// can do whatever you want with this stuff. If we meet some day, and you +// think this stuff is worth it, you can buy me a beer in return +// - Nathan Hwang (thenoviceoof) + +unsigned base92_bounds(unsigned inlen) { + unsigned size = (inlen * 8) % 13, extra_null = 1; + if(size == 0) return 2 * ((inlen * 8) / 13) + extra_null; + if(size < 7) return 2 * ((inlen * 8) / 13) + extra_null + 1; + return 2 * ((inlen * 8) / 13) + extra_null + 2; +} + +unsigned base92_encode(const void* in, unsigned inlen, void *out, unsigned size) { + char *res = (char *)out; + const unsigned char *str = (const unsigned char *)in; + unsigned int j = 0; // j for encoded + unsigned long workspace = 0; // bits holding bin + unsigned short wssize = 0; // number of good bits in workspace + unsigned char c; + const unsigned char ENCODE_MAPPING[256] = { + 33, 35, 36, 37, 38, 39, 40, 41, 42, 43, + 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, + 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, + 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, + 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, + 94, 95, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, + 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0 + }; + if (inlen) { + for (unsigned i = 0; i < inlen; i++) { + workspace = workspace << 8 | str[i]; + wssize += 8; + if (wssize >= 13) { + int tmp = (workspace >> (wssize - 13)) & 8191; + c = ENCODE_MAPPING[(tmp / 91)]; + if (c == 0) return 0; // illegal char + res[j++] = c; + c = ENCODE_MAPPING[(tmp % 91)]; + if (c == 0) return 0; // illegal char + res[j++] = c; + wssize -= 13; + } + } + // encode a last byte + if (0 < wssize && wssize < 7) { + int tmp = (workspace << (6 - wssize)) & 63; // pad the right side + c = ENCODE_MAPPING[(tmp)]; + if (c == 0) return 0; // illegal char + res[j++] = c; + } else if (7 <= wssize) { + int tmp = (workspace << (13 - wssize)) & 8191; // pad the right side + c = ENCODE_MAPPING[(tmp / 91)]; + if (c == 0) return 0; // illegal char + res[j++] = c; + c = ENCODE_MAPPING[(tmp % 91)]; + if (c == 0) return 0; // illegal char + res[j++] = c; + } + } else { + res[j++] = '~'; + } + // add null byte + res[j] = 0; + return j; +} + +// this guy expects a null-terminated string +// gives back a non-null terminated string, and properly filled len +unsigned base92_decode(const void* in, unsigned size, void *out, unsigned outlen_unused) { + const char* str = (const char*)in; + unsigned char *res = (unsigned char *)out; + int i, j = 0, b1, b2; + unsigned long workspace = 0; + unsigned short wssize = 0; + const unsigned char DECODE_MAPPING[256] = { + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 0, 255, 1, 2, 3, 4, 5, + 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, + 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, + 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, + 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, + 56, 57, 58, 59, 60, 61, 255, 62, 63, 64, + 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, + 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, + 85, 86, 87, 88, 89, 90, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255 + }; + + // handle small cases first + if (size == 0 || (str[0] == '~' && str[1] == '\0')) { + res[0] = 0; + return 1; + } + // calculate size + int len = ((size/2 * 13) + (size%2 * 6)) / 8; + // handle pairs of chars + for (i = 0; i + 1 < size; i += 2) { + b1 = DECODE_MAPPING[(str[i])]; + b2 = DECODE_MAPPING[(str[i+1])]; + workspace = (workspace << 13) | (b1 * 91 + b2); + wssize += 13; + while (wssize >= 8) { + res[j++] = (workspace >> (wssize - 8)) & 255; + wssize -= 8; + } + } + // handle single char + if (size % 2 == 1) { + workspace = (workspace << 6) | DECODE_MAPPING[(str[size - 1])]; + wssize += 6; + while (wssize >= 8) { + res[j++] = (workspace >> (wssize - 8)) & 255; + wssize -= 8; + } + } + //assert(j == len); + return j; +} + +// ---------------------------------------------------------------------------- +// COBS en/decoder +// Based on code by Jacques Fortier. +// "Redistribution and use in source and binary forms are permitted, with or without modification." +// +// Consistent Overhead Byte Stuffing is an encoding that removes all 0 bytes from arbitrary binary data. +// The encoded data consists only of bytes with values from 0x01 to 0xFF. This is useful for preparing data for +// transmission over a serial link (RS-232 or RS-485 for example), as the 0 byte can be used to unambiguously indicate +// packet boundaries. COBS also has the advantage of adding very little overhead (at least 1 byte, plus up to an +// additional byte per 254 bytes of data). For messages smaller than 254 bytes, the overhead is constant. +// +// This implementation is designed to be both efficient and robust. +// The decoder is designed to detect malformed input data and report an error upon detection. +// + +unsigned cobs_bounds( unsigned len ) { + return len + ceil(len / 254.0) + 1; +} +unsigned cobs_encode(const void *in, unsigned inlen, void *out, unsigned outlen) { + const uint8_t *src = (const uint8_t *)in; + uint8_t *dst = (uint8_t*)out; + size_t srclen = inlen; + + uint8_t code = 1; + size_t read_index = 0, write_index = 1, code_index = 0; + + while( read_index < srclen ) { + if( src[ read_index ] == 0) { + dst[ code_index ] = code; + code = 1; + code_index = write_index++; + read_index++; + } else { + dst[ write_index++ ] = src[ read_index++ ]; + code++; + if( code == 0xFF ) { + dst[ code_index ] = code; + code = 1; + code_index = write_index++; + } + } + } + + dst[ code_index ] = code; + return write_index; +} +unsigned cobs_decode(const void *in, unsigned inlen, void *out, unsigned outlen) { + const uint8_t *src = (const uint8_t *)in; + uint8_t *dst = (uint8_t*)out; + size_t srclen = inlen; + + uint8_t code, i; + size_t read_index = 0, write_index = 0; + + while( read_index < srclen ) { + code = src[ read_index ]; + + if( ((read_index + code) > srclen) && (code != 1) ) { + return 0; + } + + read_index++; + + for( i = 1; i < code; i++ ) { + dst[ write_index++ ] = src[ read_index++ ]; + } + if( (code != 0xFF) && (read_index != srclen) ) { + dst[ write_index++ ] = '\0'; + } + } + + return write_index; +} + +#if 0 +static +void cobs_test( const char *buffer, int buflen ) { + char enc[4096]; + int enclen = cobs_encode( buffer, buflen, enc, 4096 ); + + char dec[4096]; + int declen = cobs_decode( enc, enclen, dec, 4096 ); + + test( enclen >= buflen ); + test( declen == buflen ); + test( memcmp(dec, buffer, buflen) == 0 ); + + printf("%d->%d->%d (+%d extra bytes)\n", declen, enclen, declen, enclen - declen); +} +AUTORUN { + const char *null = 0; + cobs_test( null, 0 ); + + const char empty[] = ""; + cobs_test( empty, sizeof(empty) ); + + const char text[] = "hello world\n"; + cobs_test( text, sizeof(text) ); + + const char bintext[] = "hello\0\0\0world\n"; + cobs_test( bintext, sizeof(bintext) ); + + const char blank[512] = {0}; + cobs_test( blank, sizeof(blank) ); + + char longbintext[1024]; + for( int i = 0; i < 1024; ++i ) longbintext[i] = (unsigned char)i; + cobs_test( longbintext, sizeof(longbintext) ); + + assert(~puts("Ok")); +} +#endif + +// ---------------------------------------------------------------------------- +// netstring en/decoder +// - rlyeh, public domain. + +unsigned netstring_bounds(unsigned inlen) { + return 5 + inlen + 3; // 3 for ;,\0 + 5 if inlen < 100k ; else (unsigned)ceil(log10(inlen + 1)) +} +unsigned netstring_encode(const char *in, unsigned inlen, char *out, unsigned outlen) { +// if(outlen < netstring_bounds(inlen)) return 0; + sprintf(out, "%u:%.*s,", inlen, inlen, in); + return strlen(out); +} +unsigned netstring_decode(const char *in, unsigned inlen, char *out, unsigned outlen) { +// if(outlen < inlen) return 0; + const char *bak = in; + sscanf(in, "%u", &outlen); + while( *++in != ':' ); + memcpy(out, in+1, outlen), out[outlen-1] = 0; + // return outlen; // number of written bytes + return (outlen + (in+2 - bak)); // number of read bytes +} + +#if 0 +AUTORUN { + // encode + const char text1[] = "hello world!", text2[] = "abc123"; + unsigned buflen = netstring_bounds(strlen(text1) + strlen(text2)); + char *buf = malloc(buflen), *ptr = buf; + ptr += netstring_encode(text1, strlen(text1), ptr, buflen -= (ptr - buf)); + ptr += netstring_encode(text2, strlen(text2), ptr, buflen -= (ptr - buf)); + printf("%s -> ", buf); + + // decode + char out[12]; + unsigned plen = strlen(ptr = buf); + while(plen > 0) { + int written = netstring_decode(ptr, plen, out, 12); + ptr += written; + plen -= written; + printf("'%s'(%s)(%d), ", out, ptr, plen ); + } + puts(""); +} +#endif + +// ---------------------------------------------------------------------------- +// array de/interleaving +// - rlyeh, public domain. +// +// results: +// R0G0B0 R1G1B1 R2G2B2... -> R0R1R2... B0B1B2... G0G1G2... +// R0G0B0A0 R1G1B1A1 R2G2B2A2... -> R0R1R2... A0A1A2... B0B1B2... G0G1G2... + +void *interleave( void *out, const void *list, int list_count, int sizeof_item, unsigned columns ) { + void *bak = out; + assert( columns < list_count ); // required + int row_count = list_count / columns; + for( int offset = 0; offset < columns; offset++ ) { + for( int row = 0; row < row_count; row++ ) { + memcpy( out, &((char*)list)[ (offset + row * columns) * sizeof_item ], sizeof_item ); + out = ((char*)out) + sizeof_item; + } + } + return bak; +} + +#if 0 +static +void interleave_test( const char *name, int interleaving, int deinterleaving, const char *original ) { + char interleaved[128] = {0}; + interleave( interleaved, original, strlen(original)/2, 2, interleaving ); + char deinterleaved[128] = {0}; + interleave( deinterleaved, interleaved, strlen(original)/2, 2, deinterleaving ); + + printf( "\n%s\n", name ); + printf( "original:\t%s\n", original ); + printf( "interleaved:\t%s\n", interleaved ); + printf( "deinterleaved:\t%s\n", deinterleaved ); + + assert( 0 == strcmp(original, deinterleaved) ); +} + +AUTORUN { + interleave_test( + "audio 2ch", 2, 3, + "L0R0" + "L1R1" + "L2R2" + ); + interleave_test( + "image 3ch", 3, 3, + "R0G0B0" + "R1G1B1" + "R2G2B2" + ); + interleave_test( + "image 4ch", 4, 3, + "R0G0B0A0" + "R1G1B1A1" + "R2G2B2A2" + ); + interleave_test( + "audio 5ch", 5, 3, + "A0B0C0L0R0" + "A1B1C1L1R1" + "A2B2C2L2R2" + ); + interleave_test( + "audio 5.1ch", 6, 3, + "A0B0C0L0R0S0" + "A1B1C1L1R1S1" + "A2B2C2L2R2S2" + ); + interleave_test( + "opengl material 9ch", 9, 3, + "X0Y0Z0q0w0e0r0u0v0" + "X1Y1Z1q1w1e1r1u1v1" + "X2Y2Z2q2w2e2r2u2v2" + ); + interleave_test( + "opengl material 10ch", 10, 3, + "X0Y0Z0q0w0e0r0s0u0v0" + "X1Y1Z1q1w1e1r1s1u1v1" + "X2Y2Z2q2w2e2r2s2u2v2" + ); + assert(~puts("Ok")); +} +#endif + +// ---------------------------------------------------------------------------- +// delta encoder + +#define delta_expand_template(N) \ +void delta##N##_encode(void *buffer_, unsigned count) { \ + uint##N##_t current, last = 0, *buffer = (uint##N##_t*)buffer_; \ + for( unsigned i = 0; i < count; i++ ) { \ + current = buffer[i]; \ + buffer[i] = current - last; \ + last = current; \ + } \ +} \ +void delta##N##_decode(void *buffer_, unsigned count) { \ + uint##N##_t delta, last = 0, *buffer = (uint##N##_t*)buffer_; \ + for( unsigned i = 0; i < count; i++ ) { \ + delta = buffer[i]; \ + buffer[i] = delta + last; \ + last = buffer[i]; \ + } \ +} +delta_expand_template(8); +delta_expand_template(16); +delta_expand_template(32); +delta_expand_template(64); + +#if 0 +AUTORUN { + char buf[] = "1231112223345555"; + int buflen = strlen(buf); + + char *dt = strdup(buf); + printf(" delta8: ", dt); + for( int i = 0; i < buflen; ++i ) printf("%c", dt[i] ); + printf("->"); + delta8_encode(dt, buflen); + for( int i = 0; i < buflen; ++i ) printf("%02d,", dt[i] ); + printf("->"); + delta8_decode(dt, buflen); + for( int i = 0; i < buflen; ++i ) printf("%c", dt[i] ); + printf("\r%c\n", 0 == strcmp(buf,dt) ? 'Y':'N'); +} +#endif + +// ---------------------------------------------------------------------------- +// zigzag en/decoder +// - rlyeh, public domain + +uint64_t zig64( int64_t value ) { // convert sign|magnitude to magnitude|sign + return (value >> 63) ^ (value << 1); +} +int64_t zag64( uint64_t value ) { // convert magnitude|sign to sign|magnitude + return (value >> 1) ^ -(value & 1); +} + +// branchless zigzag encoding 32/64 +// sign|magnitude to magnitude|sign and back +// [ref] https://developers.google.com/protocol-buffers/docs/encoding +uint32_t enczig32u( int32_t n) { return ((n << 1) ^ (n >> 31)); } +uint64_t enczig64u( int64_t n) { return ((n << 1) ^ (n >> 63)); } + int32_t deczig32i(uint32_t n) { return ((n >> 1) ^ -(n & 1)); } + int64_t deczig64i(uint64_t n) { return ((n >> 1) ^ -(n & 1)); } + +#if 0 +AUTORUN { + int16_t x = -1000; + printf("%d -> %llu %llx -> %lld\n", x, zig64(x), zig64(x), zag64(zig64(x))); +} +AUTORUN { + #define CMP32(signedN) do { \ + int32_t reconverted = deczig32i( enczig32u(signedN) ); \ + int equal = signedN == reconverted; \ + printf("[%s] %d vs %d\n", equal ? " OK " : "FAIL", signedN, reconverted ); \ + } while(0) + + #define CMP64(signedN) do { \ + int64_t reconverted = deczig64i( enczig64u(signedN) ); \ + int equal = signedN == reconverted; \ + printf("[%s] %lld vs %lld\n", equal ? " OK " : "FAIL", signedN, reconverted ); \ + } while(0) + + CMP32( 0); + CMP32(-1); + CMP32(+1); + CMP32(-2); + CMP32(+2); + CMP32(INT32_MAX - 1); + CMP32(INT32_MIN + 1); + CMP32(INT32_MAX); + CMP32(INT32_MIN); + + CMP64( 0ll); + CMP64(-1ll); + CMP64(+1ll); + CMP64(-2ll); + CMP64(+2ll); + CMP64(INT64_MAX - 1); + CMP64(INT64_MIN + 1); + CMP64(INT64_MAX); + CMP64(INT64_MIN); +} +void TESTU( uint64_t N ) { + uint8_t buf[9] = {0}; + enczig64i(buf, (N)); + uint64_t reconstructed = deczig64i(buf, 0); + if( reconstructed != (N) ) printf("[FAIL] %llu vs %02x %02x %02x %02x %02x %02x %02x %02x %02x\n", (N), buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], buf[6], buf[7], buf[8] ); + else if( 0xffffff == ((N) & 0xffffff) ) printf("[ OK ] %llx\n", (N)); +} +void TESTI( int64_t N ) { + TESTU( enczig64u(N) ); +} +AUTORUN { + TESTU(0LLU); + TESTU(1LLU); + TESTU(2LLU); + TESTU(UINT64_MAX/8); + TESTU(UINT64_MAX/4); + TESTU(UINT64_MAX/2); + TESTU(UINT64_MAX-2); + TESTU(UINT64_MAX-1); + TESTU(UINT64_MAX); + + #pragma omp parallel for // compile with /openmp + for( int64_t N = INT64_MIN; N < INT64_MAX; ++N ) { + TESTU(N); + TESTI((int64_t)N); + } +} +#endif + +// ---------------------------------------------------------------------------- +// ARC4 en/decryptor. Based on code by Mike Shaffer. +// - rlyeh, public domain. + +void *arc4( void *buf_, unsigned buflen, const void *pass_, unsigned passlen ) { + // [ref] http://www.4guysfromrolla.com/webtech/code/rc4.inc.html + assert(passlen); + int sbox[256], key[256]; + char *buf = (char*)buf_; + const char *pass = (const char*)pass_; + for( unsigned a = 0; a < 256; a++ ) { + key[a] = pass[a % passlen]; + sbox[a] = a; + } + for( unsigned a = 0, b = 0; a < 256; a++ ) { + b = (b + sbox[a] + key[a]) % 256; + int swap = sbox[a]; sbox[a] = sbox[b]; sbox[b] = swap; + } + for( unsigned a = 0, b = 0, i = 0; i < buflen; ++i ) { + a = (a + 1) % 256; + b = (b + sbox[a]) % 256; + int swap = sbox[a]; sbox[a] = sbox[b]; sbox[b] = swap; + buf[i] ^= sbox[(sbox[a] + sbox[b]) % 256]; + } + return buf_; +} + +#if 0 +AUTORUN { + char buffer[] = "Hello world."; int buflen = strlen(buffer); + char *password = "abc123"; int passlen = strlen(password); + + printf("Original: %s\n", buffer); + printf("Password: %s\n", password); + + char *encrypted = arc4( buffer, buflen, password, passlen ); + printf("ARC4 Encrypted text: '%s'\n", encrypted); + + char *decrypted = arc4( buffer, buflen, password, passlen ); + printf("ARC4 Decrypted text: '%s'\n", decrypted); +} +#endif + +// ---------------------------------------------------------------------------- +// crc64 +// - rlyeh, public domain + +uint64_t crc64(uint64_t h, const void *ptr, uint64_t len) { + // based on public domain code by Lasse Collin + // also, use poly64 0xC96C5795D7870F42 for crc64-ecma + static uint64_t crc64_table[256]; + static uint64_t poly64 = UINT64_C(0x95AC9329AC4BC9B5); + if( poly64 ) { + for( int b = 0; b < 256; ++b ) { + uint64_t r = b; + for( int i = 0; i < 8; ++i ) { + r = r & 1 ? (r >> 1) ^ poly64 : r >> 1; + } + crc64_table[ b ] = r; + //printf("%016llx\n", crc64_table[b]); + } + poly64 = 0; + } + const uint8_t *buf = (const uint8_t *)ptr; + uint64_t crc = ~h; // ~crc; + while( len != 0 ) { + crc = crc64_table[(uint8_t)crc ^ *buf++] ^ (crc >> 8); + --len; + } + return ~crc; +} + +#if 0 +unsigned crc32(unsigned h, const void *ptr_, unsigned len) { + // based on public domain code by Karl Malbrain + const uint8_t *ptr = (const uint8_t *)ptr_; + if (!ptr) return 0; + const unsigned tbl[16] = { + 0x00000000, 0x1db71064, 0x3b6e20c8, 0x26d930ac, 0x76dc4190, 0x6b6b51f4, 0x4db26158, 0x5005713c, + 0xedb88320, 0xf00f9344, 0xd6d6a3e8, 0xcb61b38c, 0x9b64c2b0, 0x86d3d2d4, 0xa00ae278, 0xbdbdf21c }; + for(h = ~h; len--; ) { uint8_t b = *ptr++; h = (h >> 4) ^ tbl[(h & 15) ^ (b & 15)]; h = (h >> 4) ^ tbl[(h & 15) ^ (b >> 4)]; } + return ~h; +} +#endif + +// ---------------------------------------------------------------------------- +// entropy encoder + +#if is(win32) +#include +#include +#pragma comment(lib, "advapi32") + +void entropy( void *buf, unsigned n ) { + HCRYPTPROV provider; + if( CryptAcquireContext( &provider, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT ) == 0 ) { + assert(!"CryptAcquireContext failed"); + } + + int rc = CryptGenRandom( provider, n, (BYTE *)buf ); + assert( rc != 0 ); + CryptReleaseContext( provider, 0 ); +} + +#elif is(linux) || is(osx) + +void entropy( void *buf, unsigned n ) { + FILE *fp = fopen( "/dev/urandom", "r" ); + if( !fp ) assert(!"/dev/urandom open failed"); + + size_t read = n * fread( buf, n, 1, fp ); + assert( read == n && "/dev/urandom read failed" ); + fclose( fp ); +} + +#else // unused for now. likely emscripten will hit this + +// pseudo random number generator with 128 bit internal state... probably not suited for cryptographical usage. +// [src] http://github.com/kokke (UNLICENSE) +// [ref] http://burtleburtle.net/bob/rand/smallprng.html + +#include + +#if is(win32) +#include +#else +#include +#endif + +static uint32_t prng_next(void) { + #define prng_rotate(x,k) (x << k) | (x >> (32 - k)) + #define prng_shuffle() do { \ + uint32_t e = ctx[0] - prng_rotate(ctx[1], 27); \ + ctx[0] = ctx[1] ^ prng_rotate(ctx[2], 17); \ + ctx[1] = ctx[2] + ctx[3]; \ + ctx[2] = ctx[3] + e; \ + ctx[3] = e + ctx[0]; } while(0) + static __thread uint32_t ctx[4], *once = 0; if( !once ) { + uint32_t seed = (uint32_t)( ifdef(win32,_getpid,getpid)() + time(0) + ((uintptr_t)once) ); + ctx[0] = 0xf1ea5eed; + ctx[1] = ctx[2] = ctx[3] = seed; + for (int i = 0; i < 31; ++i) { + prng_shuffle(); + } + once = ctx; + } + prng_shuffle(); + return ctx[3]; +} + +void entropy( void *buf, unsigned n ) { + for( ; n >= 4 ; n -= 4 ) { + uint32_t a = prng_next(); + memcpy(buf, &a, 4); + buf = ((char*)buf) + 4; + } + if( n > 0 ) { + uint32_t a = prng_next(); + memcpy(buf, &a, n); + } +} + +#endif + +#if 0 +AUTORUN { + unsigned char buf[128]; + entropy(buf, 128); + for( int i = 0; i < 128; ++i ) { + printf("%02x", buf[i]); + } + puts(""); +} +#endif #line 0 #line 1 "v4k_reflect.c" -// C reflection: enums, functions, structs, members and anotations. -// - rlyeh, public domain -// -// @todo: nested structs? pointers in members? -// @todo: declare TYPEDEF(vec3, float[3]), TYPEDEF(mat4, vec4[4]/*float[16]*/) - -static map(unsigned, reflect_t) reflects; -static map(unsigned, array(reflect_t)) members; - -void reflect_init() { - if(!reflects) map_init_int(reflects); - if(!members) map_init_int(members); -} -AUTORUN { - reflect_init(); -} - -const char* symbol_naked(const char *s) { - if( strbeg(s, "const ") ) s += 6; - if( strbeg(s, "union ") ) s += 6; - if( strbeg(s, "struct ") ) s += 7; - if(!strstr(s, " *") ) return s; - char *copy = va("%s", s); - do strswap(copy," *","*"); while( strstr(copy, " *") ); // char * -> char* - return (const char*)copy; -} - -void type_inscribe(const char *TY,unsigned TYsz,const char *infos) { - reflect_init(); - unsigned TYid = intern(TY = symbol_naked(TY)); - map_find_or_add(reflects, TYid, ((reflect_t){TYid, 0, TYsz, STRDUP(TY), infos})); // @leak -} -void enum_inscribe(const char *E,unsigned Eval,const char *infos) { - reflect_init(); - unsigned Eid = intern(E = symbol_naked(E)); - map_find_or_add(reflects, Eid, ((reflect_t){Eid,0, Eval, STRDUP(E),infos})); // @leak -} -unsigned enum_find(const char *E) { - reflect_init(); - E = symbol_naked(E); - return map_find(reflects, intern(E))->sz; -} -void function_inscribe(const char *F,void *func,const char *infos) { - reflect_init(); - unsigned Fid = intern(F = symbol_naked(F)); - map_find_or_add(reflects, Fid, ((reflect_t){Fid,0, 0, STRDUP(F),infos, func})); // @leak - reflect_t *found = map_find(reflects,Fid); -} -void *function_find(const char *F) { - reflect_init(); - F = symbol_naked(F); - return map_find(reflects, intern(F))->addr; -} -void struct_inscribe(const char *T,unsigned Tsz,unsigned OBJTYPEid, const char *infos) { - reflect_init(); - unsigned Tid = intern(T = symbol_naked(T)); - map_find_or_add(reflects, Tid, ((reflect_t){Tid, OBJTYPEid, Tsz, STRDUP(T), infos})); // @leak -} -void member_inscribe(const char *T, const char *M,unsigned Msz, const char *infos, const char *TYPE, unsigned bytes) { - reflect_init(); - unsigned Tid = intern(T = symbol_naked(T)); - unsigned Mid = intern(M = symbol_naked(M)); - unsigned Xid = intern(TYPE = symbol_naked(TYPE)); - map_find_or_add(reflects, (Mid<<16)|Tid, ((reflect_t){Mid, 0, Msz, STRDUP(M), infos, NULL, Tid, STRDUP(TYPE) })); // @leak - // add member separately as well - if(!members) map_init_int(members); - array(reflect_t) *found = map_find_or_add(members, Tid, 0); - reflect_t data = {Mid, 0, Msz, STRDUP(M), infos, NULL, Tid, STRDUP(TYPE), bytes }; // @leak - // ensure member has not been added previously -#if 1 - // works, without altering member order - reflect_t *index = 0; - for(int i = 0, end = array_count(*found); i < end; ++i) { - if( (*found)[i].id == Mid ) { index = (*found)+i; break; } - } - if( index ) *index = data; else array_push(*found, data); -#else - // works, although members get sorted - array_push(*found, data); - array_sort(*found, less_unsigned_ptr); //< first member type in reflect_t is `unsigned id`, so less_unsigned_ptr works - array_unique(*found, less_unsigned_ptr); //< first member type in reflect_t is `unsigned id`, so less_unsigned_ptr works -#endif -} -reflect_t member_find(const char *T, const char *M) { - reflect_init(); - T = symbol_naked(T); - M = symbol_naked(M); - return *map_find(reflects, (intern(M)<<16)|intern(T)); -} -void *member_findptr(void *obj, const char *T, const char *M) { - reflect_init(); - T = symbol_naked(T); - M = symbol_naked(M); - return (char*)obj + member_find(T,M).sz; -} -array(reflect_t)* members_find(const char *T) { - reflect_init(); - T = symbol_naked(T); - return map_find(members, intern(T)); -} - -static -void ui_reflect_(const reflect_t *R, const char *filter, int mask) { - // debug: - // ui_label(va("name:%s info:'%s' id:%u objtype:%u sz:%u addr:%p parent:%u type:%s\n", - // R->name ? R->name : "", R->info ? R->info : "", R->id, R->objtype, R->sz, R->addr, R->parent, R->type ? R->type : "")); - - if( mask == *R->info ) { - static __thread char *buf = 0; - if( buf ) *buf = '\0'; - - struct nk_context *ui_ctx = (struct nk_context *)ui_handle(); - for ui_push_hspace(16) { - array(reflect_t) *T = map_find(members, intern(R->name)); - /**/ if( T ) {ui_label(strcatf(&buf,"S struct %s@%s", R->name, R->info+1)); - for each_array_ptr(*T, reflect_t, it) - if(strmatchi(it->name,filter)) { - if( !R->type && !strcmp(it->name,R->name) ) // avoid recursion - ui_label(strcatf(&buf,"M %s %s@%s", it->type, it->name, it->info+1)); - else - ui_reflect_(it,filter,'M'); - } - } - else if( R->addr ) ui_label(strcatf(&buf,"F func %s()@%s", R->name, R->info+1)); - else if( !R->parent ) ui_label(strcatf(&buf,"E enum %s = %d@%s", R->name, R->sz, R->info+1)); - else ui_label(strcatf(&buf,"M %s %s@%s", R->type, R->name, R->info+1)); - } - } -} - -API void *ui_handle(); -int ui_reflect(const char *filter) { - if( !filter ) filter = "*"; - - int enabled = ui_enabled(); - ui_disable(); - - // ENUMS, then FUNCTIONS, then STRUCTS - unsigned masks[] = { 'E', 'F', 'S' }; - for( int i = 0; i < countof(masks); ++i ) - for each_map_ptr(reflects, unsigned, k, reflect_t, R) { - if( strmatchi(R->name, filter)) { - ui_reflect_(R, filter, masks[i]); - } - } - - if( enabled ) ui_enable(); - return 0; -} - -// -- tests - -// type0 is reserved (no type) -// type1 reserved for objs -// type2 reserved for entities -// @todo: type3 and 4 likely reserved for components and systems?? -// enum { OBJTYPE_vec3 = 0x03 }; - -AUTOTEST { - // register structs, enums and functions. with and without comments+tags - - STRUCT( vec3, float, x ); - STRUCT( vec3, float, y ); - STRUCT( vec3, float, z, "Up" ); - - ENUM( IMAGE_RGB ); - ENUM( TEXTURE_RGB, "3-channel Red+Green+Blue texture flag" ); - ENUM( TEXTURE_RGBA, "4-channel Red+Green+Blue+Alpha texture flag" ); - - FUNCTION( puts ); - FUNCTION( printf, "function that prints formatted text to stdout" ); - - // verify some reflected infos - - test( function_find("puts") == puts ); - test( function_find("printf") == printf ); - - test( enum_find("TEXTURE_RGB") == TEXTURE_RGB ); - test( enum_find("TEXTURE_RGBA") == TEXTURE_RGBA ); - - // iterate reflected struct - for each_member("vec3", R) { - //printf("+%s vec3.%s (+%x) // %s\n", R->type, R->name, R->member_offset, R->info); - } - - //reflect_print("puts"); - //reflect_print("TEXTURE_RGBA"); - //reflect_print("vec3"); - - //reflect_dump("*"); -} +// C reflection: enums, functions, structs, members and anotations. +// - rlyeh, public domain +// +// @todo: nested structs? pointers in members? +// @todo: declare TYPEDEF(vec3, float[3]), TYPEDEF(mat4, vec4[4]/*float[16]*/) + +static map(unsigned, reflect_t) reflects; +static map(unsigned, array(reflect_t)) members; + +void reflect_init() { + if(!reflects) map_init_int(reflects); + if(!members) map_init_int(members); +} +AUTORUN { + reflect_init(); +} + +const char* symbol_naked(const char *s) { + if( strbeg(s, "const ") ) s += 6; + if( strbeg(s, "union ") ) s += 6; + if( strbeg(s, "struct ") ) s += 7; + if(!strstr(s, " *") ) return s; + char *copy = va("%s", s); + do strswap(copy," *","*"); while( strstr(copy, " *") ); // char * -> char* + return (const char*)copy; +} + +void type_inscribe(const char *TY,unsigned TYsz,const char *infos) { + reflect_init(); + unsigned TYid = intern(TY = symbol_naked(TY)); + map_find_or_add(reflects, TYid, ((reflect_t){TYid, 0, TYsz, STRDUP(TY), infos})); // @leak +} +void enum_inscribe(const char *E,unsigned Eval,const char *infos) { + reflect_init(); + unsigned Eid = intern(E = symbol_naked(E)); + map_find_or_add(reflects, Eid, ((reflect_t){Eid,0, Eval, STRDUP(E),infos})); // @leak +} +unsigned enum_find(const char *E) { + reflect_init(); + E = symbol_naked(E); + return map_find(reflects, intern(E))->sz; +} +void function_inscribe(const char *F,void *func,const char *infos) { + reflect_init(); + unsigned Fid = intern(F = symbol_naked(F)); + map_find_or_add(reflects, Fid, ((reflect_t){Fid,0, 0, STRDUP(F),infos, func})); // @leak + reflect_t *found = map_find(reflects,Fid); +} +void *function_find(const char *F) { + reflect_init(); + F = symbol_naked(F); + return map_find(reflects, intern(F))->addr; +} +void struct_inscribe(const char *T,unsigned Tsz,unsigned OBJTYPEid, const char *infos) { + reflect_init(); + unsigned Tid = intern(T = symbol_naked(T)); + map_find_or_add(reflects, Tid, ((reflect_t){Tid, OBJTYPEid, Tsz, STRDUP(T), infos})); // @leak +} +void member_inscribe(const char *T, const char *M,unsigned Msz, const char *infos, const char *TYPE, unsigned bytes) { + reflect_init(); + unsigned Tid = intern(T = symbol_naked(T)); + unsigned Mid = intern(M = symbol_naked(M)); + unsigned Xid = intern(TYPE = symbol_naked(TYPE)); + map_find_or_add(reflects, (Mid<<16)|Tid, ((reflect_t){Mid, 0, Msz, STRDUP(M), infos, NULL, Tid, STRDUP(TYPE) })); // @leak + // add member separately as well + if(!members) map_init_int(members); + array(reflect_t) *found = map_find_or_add(members, Tid, 0); + reflect_t data = {Mid, 0, Msz, STRDUP(M), infos, NULL, Tid, STRDUP(TYPE), bytes }; // @leak + // ensure member has not been added previously +#if 1 + // works, without altering member order + reflect_t *index = 0; + for(int i = 0, end = array_count(*found); i < end; ++i) { + if( (*found)[i].id == Mid ) { index = (*found)+i; break; } + } + if( index ) *index = data; else array_push(*found, data); +#else + // works, although members get sorted + array_push(*found, data); + array_sort(*found, less_unsigned_ptr); //< first member type in reflect_t is `unsigned id`, so less_unsigned_ptr works + array_unique(*found, less_unsigned_ptr); //< first member type in reflect_t is `unsigned id`, so less_unsigned_ptr works +#endif +} +reflect_t member_find(const char *T, const char *M) { + reflect_init(); + T = symbol_naked(T); + M = symbol_naked(M); + return *map_find(reflects, (intern(M)<<16)|intern(T)); +} +void *member_findptr(void *obj, const char *T, const char *M) { + reflect_init(); + T = symbol_naked(T); + M = symbol_naked(M); + return (char*)obj + member_find(T,M).sz; +} +array(reflect_t)* members_find(const char *T) { + reflect_init(); + T = symbol_naked(T); + return map_find(members, intern(T)); +} + +static +void ui_reflect_(const reflect_t *R, const char *filter, int mask) { + // debug: + // ui_label(va("name:%s info:'%s' id:%u objtype:%u sz:%u addr:%p parent:%u type:%s\n", + // R->name ? R->name : "", R->info ? R->info : "", R->id, R->objtype, R->sz, R->addr, R->parent, R->type ? R->type : "")); + + if( mask == *R->info ) { + static __thread char *buf = 0; + if( buf ) *buf = '\0'; + + struct nk_context *ui_ctx = (struct nk_context *)ui_handle(); + for ui_push_hspace(16) { + array(reflect_t) *T = map_find(members, intern(R->name)); + /**/ if( T ) {ui_label(strcatf(&buf,"S struct %s@%s", R->name, R->info+1)); + for each_array_ptr(*T, reflect_t, it) + if(strmatchi(it->name,filter)) { + if( !R->type && !strcmp(it->name,R->name) ) // avoid recursion + ui_label(strcatf(&buf,"M %s %s@%s", it->type, it->name, it->info+1)); + else + ui_reflect_(it,filter,'M'); + } + } + else if( R->addr ) ui_label(strcatf(&buf,"F func %s()@%s", R->name, R->info+1)); + else if( !R->parent ) ui_label(strcatf(&buf,"E enum %s = %d@%s", R->name, R->sz, R->info+1)); + else ui_label(strcatf(&buf,"M %s %s@%s", R->type, R->name, R->info+1)); + } + } +} + +API void *ui_handle(); +int ui_reflect(const char *filter) { + if( !filter ) filter = "*"; + + int enabled = ui_enabled(); + ui_disable(); + + // ENUMS, then FUNCTIONS, then STRUCTS + unsigned masks[] = { 'E', 'F', 'S' }; + for( int i = 0; i < countof(masks); ++i ) + for each_map_ptr(reflects, unsigned, k, reflect_t, R) { + if( strmatchi(R->name, filter)) { + ui_reflect_(R, filter, masks[i]); + } + } + + if( enabled ) ui_enable(); + return 0; +} + +// -- tests + +// type0 is reserved (no type) +// type1 reserved for objs +// type2 reserved for entities +// @todo: type3 and 4 likely reserved for components and systems?? +// enum { OBJTYPE_vec3 = 0x03 }; + +AUTOTEST { + // register structs, enums and functions. with and without comments+tags + + STRUCT( vec3, float, x ); + STRUCT( vec3, float, y ); + STRUCT( vec3, float, z, "Up" ); + + ENUM( IMAGE_RGB ); + ENUM( TEXTURE_RGB, "3-channel Red+Green+Blue texture flag" ); + ENUM( TEXTURE_RGBA, "4-channel Red+Green+Blue+Alpha texture flag" ); + + FUNCTION( puts ); + FUNCTION( printf, "function that prints formatted text to stdout" ); + + // verify some reflected infos + + test( function_find("puts") == puts ); + test( function_find("printf") == printf ); + + test( enum_find("TEXTURE_RGB") == TEXTURE_RGB ); + test( enum_find("TEXTURE_RGBA") == TEXTURE_RGBA ); + + // iterate reflected struct + for each_member("vec3", R) { + //printf("+%s vec3.%s (+%x) // %s\n", R->type, R->name, R->member_offset, R->info); + } + + //reflect_print("puts"); + //reflect_print("TEXTURE_RGBA"); + //reflect_print("vec3"); + + //reflect_dump("*"); +} #line 0 #line 1 "v4k_render.c" -// ----------------------------------------------------------------------------- -// opengl - -#define GL_COMPRESSED_RGB_S3TC_DXT1_EXT 0x83F0 -#define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT 0x83F1 -#define GL_COMPRESSED_RGBA_S3TC_DXT3_EXT 0x83F2 -#define GL_COMPRESSED_RGBA_S3TC_DXT5_EXT 0x83F3 - -#define GL_DEBUG_SEVERITY_HIGH 0x9146 -#define GL_DEBUG_SEVERITY_NOTIFICATION 0x826B -#define GL_DEBUG_SOURCE_API 0x8246 -#define GL_DEBUG_TYPE_ERROR 0x824C -// -void glDebugCallback(uint32_t source, uint32_t type, uint32_t id, uint32_t severity, int32_t length, const char * message, void * userdata) { - // whitelisted codes (also: 131169, 131204). - if( id == 131154 ) return; // Pixel-path performance warning: Pixel transfer is synchronized with 3D rendering. - if( id == 131185 ) return; // Buffer object 2 (bound to GL_ELEMENT_ARRAY_BUFFER_ARB, usage hint is GL_STATIC_DRAW) will use VIDEO memory as the source for buffer object operations - if( id == 131218 ) return; // Program/shader state performance warning: Vertex shader in program 9 is being recompiled based on GL state. - if( id == 2 ) return; // INFO: API_ID_RECOMPILE_FRAGMENT_SHADER performance warning has been generated. Fragment shader recompiled due to state change. [ID: 2] - - const char * GL_ERROR_TYPE[] = { "ERROR", "DEPRECATED BEHAVIOR", "UNDEFINED DEHAVIOUR", "PORTABILITY", "PERFORMANCE", "OTHER" }; - const char * GL_ERROR_SOURCE[] = { "API", "WINDOW SYSTEM", "SHADER COMPILER", "THIRD PARTY", "APPLICATION", "OTHER" }; - const char * GL_ERROR_SEVERITY[] = { "HIGH", "MEDIUM", "LOW", "NOTIFICATION" }; - - type = type - GL_DEBUG_TYPE_ERROR; - source = source - GL_DEBUG_SOURCE_API; - severity = severity == GL_DEBUG_SEVERITY_NOTIFICATION ? 3 : severity - GL_DEBUG_SEVERITY_HIGH; - if(severity >= 2) return; // do not log low_severity or notifications - - PRINTF( "!%s:%s [ID: %u]\n", type == 0 ? "ERROR":"WARNING", message, id ); -// PANIC( "!%s:%s [ID: %u]\n", type == 0 ? "ERROR":"WARNING", message, id ); -} -void glDebugEnable() { - do_once { - typedef void (*GLDEBUGPROC)(uint32_t, uint32_t, uint32_t, uint32_t, int32_t, const char *, const void *); - typedef void (*GLDEBUGMESSAGECALLBACKPROC)(GLDEBUGPROC, const void *); - void *func = glfwGetProcAddress("glDebugMessageCallback"); - void (*glDebugMessageCallback)(GLDEBUGPROC, const void *) = (GLDEBUGMESSAGECALLBACKPROC)func; - if( func ) { - glEnable(GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB); - glDebugMessageCallback((GLDEBUGPROC)glDebugCallback, NULL); - } - } -} - -static -void glCopyBackbufferToTexture( texture_t *tex ) { // unused - glActiveTexture( GL_TEXTURE0 + texture_unit() ); - glBindTexture( GL_TEXTURE_2D, tex->id ); - glCopyTexImage2D( GL_TEXTURE_2D, 0, GL_RGB, 0, 0, window_width(), window_height(), 0 ); -} - -// ---------------------------------------------------------------------------- -// renderstate - -renderstate_t renderstate() { - renderstate_t state = {0}; - - // Set default clear color to black - state.clear_color[0] = 0.0f; // Red - state.clear_color[1] = 0.0f; // Green - state.clear_color[2] = 0.0f; // Blue - state.clear_color[3] = 1.0f; // Alpha - - // Set default color mask to GL_TRUE - state.color_mask[0] = GL_TRUE; - state.color_mask[1] = GL_TRUE; - state.color_mask[2] = GL_TRUE; - state.color_mask[3] = GL_TRUE; - - // Set default clear depth to maximum distance - state.clear_depth = 1.0; - - // Enable depth test by default with less or equal function - state.depth_test_enabled = GL_TRUE; - state.depth_write_enabled = GL_TRUE; - state.depth_func = GL_LEQUAL; - - // Disable polygon offset by default - state.polygon_offset_enabled = GL_FALSE; - state.polygon_offset_factor = 0.0f; - state.polygon_offset = 0.0f; - - // Disable blending by default - state.blend_enabled = GL_FALSE; - state.blend_func = GL_FUNC_ADD; - state.blend_src = GL_ONE; - state.blend_dst = GL_ZERO; - - // Disable culling by default but cull back faces - state.cull_face_enabled = GL_FALSE; - state.cull_face_mode = GL_BACK; - - // Disable stencil test by default - state.stencil_test_enabled = GL_FALSE; - state.stencil_func = GL_ALWAYS; - state.stencil_op_fail = GL_KEEP; - state.stencil_op_zfail = GL_KEEP; - state.stencil_op_zpass = GL_KEEP; - state.stencil_ref = 0; - state.stencil_read_mask = 0xFFFFFFFF; - state.stencil_write_mask = 0xFFFFFFFF; - - // Set default front face to counter-clockwise - state.front_face = GL_CCW; - - // Set default line width - state.line_smooth_enabled = GL_FALSE; - state.line_width = 1.0f; - - // Set default point size - state.point_size_enabled = GL_FALSE; - state.point_size = 1.0f; - - // Set default polygon mode to fill - state.polygon_mode_face = GL_FRONT_AND_BACK; - state.polygon_mode_draw = GL_FILL; - - // Disable scissor test by default - state.scissor_test_enabled = GL_FALSE; - - return state; -} - -bool renderstate_compare(const renderstate_t *stateA, const renderstate_t *stateB) { - return memcmp(stateA, stateB, sizeof(renderstate_t)) == 0; -} - -static renderstate_t last_rs; - -void renderstate_apply(const renderstate_t *state) { - if (state != NULL) { - // Compare renderstates and bail if they are the same - if (renderstate_compare(state, &last_rs)) { - return; - } - - // Store renderstate - last_rs = *state; - - // Apply clear color - glClearColor(state->clear_color[0], state->clear_color[1], state->clear_color[2], state->clear_color[3]); - - // Apply color mask - glColorMask(state->color_mask[0], state->color_mask[1], state->color_mask[2], state->color_mask[3]); - - // Apply clear depth - glClearDepth(state->clear_depth); - - // Apply depth test - if (state->depth_test_enabled) { - glEnable(GL_DEPTH_TEST); - glDepthFunc(state->depth_func); - } else { - glDisable(GL_DEPTH_TEST); - } - - // Apply polygon offset - if (state->polygon_offset_enabled) { - glEnable(GL_POLYGON_OFFSET_FILL); - glPolygonOffset(state->polygon_offset_factor, state->polygon_offset); - } else { - glDisable(GL_POLYGON_OFFSET_FILL); - } - - // Apply depth write - glDepthMask(state->depth_write_enabled); - - // Apply blending - if (state->blend_enabled) { - glEnable(GL_BLEND); - glBlendEquation(state->blend_func); - glBlendFunc(state->blend_src, state->blend_dst); - } else { - glDisable(GL_BLEND); - } - - // Apply culling @fixme - if (state->cull_face_enabled) { - glEnable(GL_CULL_FACE); - glCullFace(state->cull_face_mode); - } else { - glDisable(GL_CULL_FACE); - } - - // Apply stencil test - if (state->stencil_test_enabled) { - glEnable(GL_STENCIL_TEST); - glStencilMask(state->stencil_write_mask); - glStencilFunc(state->stencil_func, state->stencil_ref, state->stencil_read_mask); - glStencilOp(state->stencil_op_fail, state->stencil_op_zfail, state->stencil_op_zpass); - } else { - glDisable(GL_STENCIL_TEST); - } - - // Apply front face direction @fixme - glFrontFace(state->front_face); - - // Apply line width - glLineWidth(state->line_width); - - // Apply smooth lines - if (state->line_smooth_enabled) { - glEnable(GL_LINE_SMOOTH); - } else { - glDisable(GL_LINE_SMOOTH); - } - - // Apply point size - if (state->point_size_enabled) { - glEnable(GL_PROGRAM_POINT_SIZE); - glPointSize(state->point_size); - } else { - glDisable(GL_PROGRAM_POINT_SIZE); - } - - // Apply polygon mode - glPolygonMode(state->polygon_mode_face, state->polygon_mode_draw); - - // Apply scissor test - if (state->scissor_test_enabled) { - glEnable(GL_SCISSOR_TEST); - } else { - glDisable(GL_SCISSOR_TEST); - } - } -} - -// ---------------------------------------------------------------------------- -// shaders - -void shader_print(const char *source) { - for(int line = 0, i = 0; source[i] > 0; ) { - printf("\t%03d: ", line+1); - while( source[i] >= 32 || source[i] == '\t' ) fputc(source[i++], stdout); - while( source[i] > 0 && source[i] < 32 ) line += source[i++] == '\n'; - puts(""); - } -} - -// sorted by shader handle. an array of properties per shader. properties are plain strings. -static __thread map(unsigned, array(char*)) shader_reflect; - -static -GLuint shader_compile( GLenum type, const char *source ) { - GLuint shader = glCreateShader(type); - glShaderSource(shader, 1, (const char **)&source, NULL); - glCompileShader(shader); - - GLint status = GL_FALSE, length; - glGetShaderiv(shader, GL_COMPILE_STATUS, &status); - if( status == GL_FALSE ) { - glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &length); -// ASSERT(length < 2048); char buf[2048] = { 0 }; - char *buf = stack(length+1); - glGetShaderInfoLog(shader, length, NULL, buf); - - // dump log with line numbers - shader_print( source ); - PANIC("!ERROR: shader_compile(): %s\n%s\n", type == GL_VERTEX_SHADER ? "Vertex" : "Fragment", buf); - return 0; - } - - return shader; -} - -unsigned shader(const char *vs, const char *fs, const char *attribs, const char *fragcolor, const char *defines){ - return shader_geom(NULL, vs, fs, attribs, fragcolor, defines); -} - -static inline -char *shader_preprocess(const char *src, const char *defines) { - if (!src) return NULL; - - const char *glsl_version = va("#version %s", ifdef(ems, "300 es", "150")); - - // detect GLSL version if set - if (src[0] == '#' && src[1] == 'v') { - const char *end = strstri(src, "\n"); - glsl_version = va("%.*s", (int)(end-src), src); - src = end+1; - } - - return va("%s\n%s\n%s", glsl_version, defines ? defines : "", src); -} - -unsigned shader_geom(const char *gs, const char *vs, const char *fs, const char *attribs, const char *fragcolor, const char *defines) { - PRINTF(/*"!"*/"Compiling shader\n"); - - char *glsl_defines = ""; - if( defines ) { - for each_substring(defines, ",", def) { - glsl_defines = va("%s#define %s\n", glsl_defines, def); - } - } - - if(gs) - gs = shader_preprocess(gs, glsl_defines); - vs = shader_preprocess(vs, glsl_defines); - fs = shader_preprocess(fs, glsl_defines); - -#if is(ems) - { - char *vs_ = REALLOC( 0, strlen(vs) + 512 ); strcpy(vs_, vs); - char *fs_ = REALLOC( 0, strlen(fs) + 512 ); strcpy(fs_, fs); - char *gs_ = 0; if (gs) REALLOC( 0, strlen(gs) + 512 ); strcpy(gs_, gs); - strrepl(&fs_, "#version 300 es\n", "#version 300 es\nprecision mediump float;\n"); - vs = vs_; fs = fs_; gs = gs_; - } -#endif - - GLuint vert = shader_compile(GL_VERTEX_SHADER, vs); - GLuint frag = shader_compile(GL_FRAGMENT_SHADER, fs); - GLuint geom = 0; if (gs) geom = shader_compile(GL_GEOMETRY_SHADER, gs); - GLuint program = 0; - - if( vert && frag ) { - program = glCreateProgram(); - - glAttachShader(program, vert); - glAttachShader(program, frag); - if (geom) glAttachShader(program, geom); - - for( int i = 0; attribs && attribs[0]; ++i ) { - char attrib[128] = {0}; - sscanf(attribs, "%127[^,]", attrib); - while( attribs[0] && attribs[0] != ',' ) { attribs++; } - while( attribs[0] && attribs[0] == ',' ) { attribs++; break; } - if(!attrib[0]) continue; - glBindAttribLocation(program, i, attrib); - // PRINTF("Shader.attribute[%d]=%s\n", i, attrib); - } - -#if !is(ems) // @fixme - if(fragcolor) - glBindFragDataLocation(program, 0, fragcolor); -#endif - - glLinkProgram(program); - - GLint status = GL_FALSE, length; - glGetProgramiv(program, GL_LINK_STATUS, &status); -#ifdef DEBUG_SHADER - if (status != GL_FALSE && program == DEBUG_SHADER) { -#else - if (status == GL_FALSE) { -#endif - glGetProgramiv(program, GL_INFO_LOG_LENGTH, &length); - // ASSERT(length < 2048); char buf[2048] = { 0 }; - char *buf = stack(length+1); - glGetProgramInfoLog(program, length, NULL, buf); - puts("--- vs:"); - shader_print(vs); - puts("--- fs:"); - shader_print(fs); - if (geom) { - puts("--- gs:"); - shader_print(gs); - } - } - if (status == GL_FALSE) { - PANIC("ERROR: shader(): Shader/program link: %s\n", buf); - return 0; - } - - glDeleteShader(vert); - glDeleteShader(frag); - if (geom) glDeleteShader(geom); - -//#ifdef DEBUG_ANY_SHADER -// PRINTF("Shader #%d:\n", program); -// shader_print(vs); -// shader_print(fs); -//#endif - } - -/* - if( s->program ) { - strcatf(&s->name, "// vs (%s)\n%s\n\n\n", file_vs, vs); - strcatf(&s->name, "// fs (%s)\n%s\n\n\n", file_fs, fs); - } -*/ - - // shader compiled fine, before returning, let's parse the source and reflect the uniforms - array(char*) props = 0; - do_once map_init_int( shader_reflect ); - if(vs) for each_substring(vs, "\r\n", line) { - const char *found = strstr(line, "/""//"); - if( found > line && line[0] == '/' && line[1] == '/' ) continue; - if( found ) array_push(props, STRDUP(line)); - } - if(fs) for each_substring(fs, "\r\n", line) { - const char *found = strstr(line, "/""//"); - if( found > line && line[0] == '/' && line[1] == '/' ) continue; - if( found ) array_push(props, STRDUP(line)); - } - if(gs) for each_substring(gs, "\r\n", line) { - const char *found = strstr(line, "/""//"); - if( found > line && line[0] == '/' && line[1] == '/' ) continue; - if( found ) array_push(props, STRDUP(line)); - } - if( props ) { - map_insert(shader_reflect, program, props); - for( int i = 0; i < array_count(props); ++i ) shader_apply_param(program, i); - } - - return program; -} - -unsigned shader_properties(unsigned shader) { - array(char*) *found = map_find(shader_reflect, shader); - return found ? array_count(*found) : 0; -} - -char** shader_property(unsigned shader, unsigned property) { - array(char*) *found = map_find(shader_reflect, shader); - return found && property < array_count(*found) ? &(*found)[property] : NULL; -} - -void shader_apply_param(unsigned shader, unsigned param_no) { - unsigned num_properties = shader_properties(shader); - if( param_no < num_properties ) { - char *buf = *shader_property(shader, param_no); - - char type[32], name[32], line[128]; snprintf(line, 127, "%s", buf); - if( sscanf(line, "%*s %s %[^ =;/]", type, name) != 2 ) return; - - char *mins = strstr(line, "min:"); - char *sets = strstr(line, "set:"); - char *maxs = strstr(line, "max:"); - char *tips = strstr(line, "tip:"); - if( mins ) *mins = 0, mins += 4; - if( sets ) *sets = 0, sets += 4; - if( maxs ) *maxs = 0, maxs += 4; - if( tips ) *tips = 0, tips += 4; - - int is_color = !!strstri(name, "color"), top = is_color ? 1 : 10; - vec4 minv = mins ? atof4(mins) : vec4(0,0,0,0); - vec4 setv = sets ? atof4(sets) : vec4(0,0,0,0); - vec4 maxv = maxs ? atof4(maxs) : vec4(top,top,top,top); - - if(minv.x > maxv.x) swapf(&minv.x, &maxv.x); - if(minv.y > maxv.y) swapf(&minv.y, &maxv.y); - if(minv.z > maxv.z) swapf(&minv.z, &maxv.z); - if(minv.w > maxv.w) swapf(&minv.w, &maxv.w); - - if( !maxs ) { - if(setv.x > maxv.x) maxv.x = setv.x; - if(setv.y > maxv.y) maxv.y = setv.y; - if(setv.z > maxv.z) maxv.z = setv.z; - if(setv.w > maxv.w) maxv.w = setv.w; - } - - setv = clamp4(setv, minv, maxv); - - if( strchr("ibfv", type[0]) ) { - GLint shader_bak; glGetIntegerv(GL_CURRENT_PROGRAM, &shader_bak); - glUseProgram(shader); - /**/ if(type[0] == 'i') glUniform1i(glGetUniformLocation(shader, name), setv.x); - else if(type[0] == 'b') glUniform1i(glGetUniformLocation(shader, name), !!setv.x); - else if(type[0] == 'f') glUniform1f(glGetUniformLocation(shader, name), setv.x); - else if(type[3] == '2') glUniform2fv(glGetUniformLocation(shader, name), 1, &setv.x); - else if(type[3] == '3') glUniform3fv(glGetUniformLocation(shader, name), 1, &setv.x); - else if(type[3] == '4') glUniform4fv(glGetUniformLocation(shader, name), 1, &setv.x); - glUseProgram(shader_bak); - } - } -} - -void shader_apply_params(unsigned shader, const char *parameter_mask) { - unsigned num_properties = shader_properties(shader); - for( unsigned i = 0; i < num_properties; ++i ) { - char *line = *shader_property(shader,i); - - char name[32]; - if( sscanf(line, "%*s %*s %s", name) != 1 ) continue; - if( !strmatch(name, parameter_mask) ) continue; - shader_apply_param(shader, i); - } -} - -int ui_shader(unsigned shader) { - int changed = 0; - - unsigned num_properties = shader_properties(shader); - for( unsigned i = 0; i < num_properties; ++i ) { - char **ptr = shader_property(shader,i); - - char line[128]; snprintf(line, 127, "%s", *ptr); // debug: ui_label(line); - - char uniform[32], type[32], name[32], early_exit = '\0'; - if( sscanf(line, "%s %s %[^ =;/]", uniform, type, name) != 3 ) continue; // @todo optimize: move to shader() - - char *mins = strstr(line, "min:"); - char *sets = strstr(line, "set:"); - char *maxs = strstr(line, "max:"); - char *tips = strstr(line, "tip:"); - if( mins ) *mins = 0, mins += 4; - if( sets ) *sets = 0, sets += 4; - if( maxs ) *maxs = 0, maxs += 4; - if( tips ) *tips = 0, tips += 4; - - if( strcmp(uniform, "uniform") && strcmp(uniform, "}uniform") ) { if(tips) ui_label(va(ICON_MD_INFO "%s", tips)); continue; } // @todo optimize: move to shader() - - int is_color = !!strstri(name, "color"), top = is_color ? 1 : 10; - vec4 minv = mins ? atof4(mins) : vec4(0,0,0,0); - vec4 setv = sets ? atof4(sets) : vec4(0,0,0,0); - vec4 maxv = maxs ? atof4(maxs) : vec4(top,top,top,top); - char *label = !tips ? va("%c%s", name[0] - 32 * !!(name[0] >= 'a'), name+1) : - va("%c%s " ICON_MD_INFO "@%s", name[0] - 32 * !!(name[0] >= 'a'), name+1, tips); - - if(minv.x > maxv.x) swapf(&minv.x, &maxv.x); // @optimize: move to shader() - if(minv.y > maxv.y) swapf(&minv.y, &maxv.y); // @optimize: move to shader() - if(minv.z > maxv.z) swapf(&minv.z, &maxv.z); // @optimize: move to shader() - if(minv.w > maxv.w) swapf(&minv.w, &maxv.w); // @optimize: move to shader() - - if( !maxs ) { - if(setv.x > maxv.x) maxv.x = setv.x; - if(setv.y > maxv.y) maxv.y = setv.y; - if(setv.z > maxv.z) maxv.z = setv.z; - if(setv.w > maxv.w) maxv.w = setv.w; - } - - setv = clamp4(setv, minv, maxv); - - // supports int,float,vec2/3/4,color3/4 - int touched = 0; - if( type[0] == 'b' ) { - bool v = !!setv.x; - - if( (touched = ui_bool(label, &v)) != 0 ) { - setv.x = v; - } - } - else if( type[0] == 'i' ) { - int v = setv.x; - - if( (touched = ui_int(label, &v)) != 0 ) { - setv.x = clampi(v, minv.x, maxv.x); // min..max range - } - } - else if( type[0] == 'f' ) { - setv.x = clampf(setv.x, minv.x, maxv.x); - char *caption = va("%5.3f", setv.x); - setv.x = (setv.x - minv.x) / (maxv.x - minv.x); - - if( (touched = ui_slider2(label, &setv.x, caption)) != 0 ) { - setv.x = clampf(minv.x + setv.x * (maxv.x-minv.x), minv.x, maxv.x); // min..max range - } - } - else if( type[0] == 'v' && type[3] == '2' ) { - setv.xy = clamp2(setv.xy,minv.xy,maxv.xy); - - if( (touched = ui_float2(label, &setv.x)) != 0 ) { - setv.xy = clamp2(setv.xy,minv.xy,maxv.xy); - } - } - else if( type[0] == 'v' && type[3] == '3' ) { - setv.xyz = clamp3(setv.xyz,minv.xyz,maxv.xyz); - - if( (touched = (is_color ? ui_color3f : ui_float3)(label, &setv.x)) != 0 ) { - setv.xyz = clamp3(setv.xyz,minv.xyz,maxv.xyz); - } - } - else if( type[0] == 'v' && type[3] == '4' ) { - setv = clamp4(setv,minv,maxv); - - if( (touched = (is_color ? ui_color4f : ui_float4)(label, &setv.x)) != 0 ) { - setv = clamp4(setv,minv,maxv); - } - } - else if( tips ) ui_label( tips ); - - if( touched ) { - // upgrade value - *ptr = FREE(*ptr); - *ptr = stringf("%s %s %s ///set:%s min:%s max:%s tip:%s", uniform,type,name,ftoa4(setv),ftoa4(minv),ftoa4(maxv),tips?tips:""); - - // apply - shader_apply_param(shader, i); - - changed = 1; - } - } - - return changed; -} - -int ui_shaders() { - if( !map_count(shader_reflect) ) return ui_label(ICON_MD_WARNING " No shaders with annotations loaded."), 0; - - int changed = 0; - for each_map_ptr(shader_reflect, unsigned, k, array(char*), v) { - int open = 0, clicked_or_toggled = 0; - char *id = va("##SHD%d", *k); - char *title = va("Shader %d", *k); - for( int p = (open = ui_collapse(title, id)), dummy = (clicked_or_toggled = ui_collapse_clicked()); p; ui_collapse_end(), p = 0) { - ui_label(va("Shader %d",*k)); - changed |= ui_shader(*k); - } - } - return changed; -} - -unsigned compute(const char *cs){ - #if is(ems) - return 0; - #else - PRINTF(/*"!"*/"Compiling compute shader\n"); - - cs = cs[0] == '#' && cs[1] == 'c' ? cs : va("#version 450 core\n%s", cs ? cs : ""); - - GLuint comp = shader_compile(GL_COMPUTE_SHADER, cs); - GLuint program = 0; - - if( comp ) { - program = glCreateProgram(); - - glAttachShader(program, comp); - - glLinkProgram(program); - - GLint status = GL_FALSE, length; - glGetProgramiv(program, GL_LINK_STATUS, &status); -#ifdef DEBUG_SHADER - if (status != GL_FALSE && program == DEBUG_SHADER) { -#else - if (status == GL_FALSE) { -#endif - glGetProgramiv(program, GL_INFO_LOG_LENGTH, &length); - char *buf = stack(length+1); - glGetProgramInfoLog(program, length, NULL, buf); - puts("--- cs:"); - shader_print(cs); - } - if (status == GL_FALSE) { - PANIC("ERROR: shader(): Shader/program link: %s\n", buf); - return 0; - } - - glDeleteShader(comp); - } - return program; - #endif -} - -void compute_dispatch(unsigned wx, unsigned wy, unsigned wz){ - glDispatchCompute(wx, wy, wz); -} - -void write_barrier(){ - glMemoryBarrier(GL_ALL_BARRIER_BITS); -} - -void write_barrier_image(){ - glMemoryBarrier(GL_SHADER_IMAGE_ACCESS_BARRIER_BIT); -} - -void shader_destroy(unsigned program){ - if( program == ~0u ) return; - glDeleteProgram(program); -// if(s->name) FREE(s->name), s->name = NULL; -} - -unsigned ssbo_create(const void *data, int len, unsigned usage){ - static GLuint gl_usage[] = { GL_STATIC_DRAW, GL_STATIC_READ, GL_STATIC_COPY, GL_DYNAMIC_DRAW, GL_DYNAMIC_READ, GL_DYNAMIC_COPY, GL_STREAM_DRAW, GL_STREAM_READ, GL_STREAM_COPY }; - GLuint ssbo; - glGenBuffers(1, &ssbo); - glBindBuffer(GL_SHADER_STORAGE_BUFFER, ssbo); - glBufferData(GL_SHADER_STORAGE_BUFFER, len, data, gl_usage[usage]); - return ssbo; -} - -void ssbo_destroy(unsigned ssbo){ - glDeleteBuffers(1, &ssbo); -} - -void ssbo_update(int offset, int len, const void *data){ - glBufferSubData(GL_SHADER_STORAGE_BUFFER, offset, len, data); -} - -void *ssbo_map(unsigned access){ - static GLenum gl_access[] = {GL_READ_ONLY, GL_WRITE_ONLY, GL_READ_WRITE}; - return glMapBuffer(GL_SHADER_STORAGE_BUFFER, gl_access[access]); -} -void ssbo_unmap(){ - glUnmapBuffer(GL_SHADER_STORAGE_BUFFER); -} - -void ssbo_bind(unsigned ssbo, unsigned unit){ - glBindBuffer(GL_SHADER_STORAGE_BUFFER, ssbo); - glBindBufferBase(GL_SHADER_STORAGE_BUFFER, unit, ssbo); -} - -void ssbo_unbind(){ - glBindBuffer(GL_SHADER_STORAGE_BUFFER, 0); -} - -static __thread unsigned last_shader = -1; - -int shader_uniform(const char *name) { - return glGetUniformLocation(last_shader, name); -} -unsigned shader_get_active() { return last_shader; } -unsigned shader_bind(unsigned program) { unsigned ret = last_shader; return glUseProgram(last_shader = program), ret; } -static inline void shader_int_(int uniform, int i) { glUniform1i(uniform, i); } -static inline void shader_float_(int uniform, float f) { glUniform1f(uniform, f); } -static inline void shader_vec2_(int uniform, vec2 v) { glUniform2fv(uniform, 1, &v.x); } -static inline void shader_vec3_(int uniform, vec3 v) { glUniform3fv(uniform, 1, &v.x); } -static inline void shader_vec3v_(int uniform, int count, vec3 *v) { glUniform3fv(uniform, count, &v[0].x); } -static inline void shader_vec4_(int uniform, vec4 v) { glUniform4fv(uniform, 1, &v.x); } -static inline void shader_mat44_(int uniform, mat44 m) { glUniformMatrix4fv(uniform, 1, GL_FALSE/*GL_TRUE*/, m); } -static inline void shader_cubemap_(int sampler, unsigned texture) { - int id = texture_unit(); - glUniform1i(sampler, id); - glActiveTexture(GL_TEXTURE0 + id); - glBindTexture(GL_TEXTURE_CUBE_MAP, texture); -} -static inline void shader_bool_(int uniform, bool x) { glUniform1i(uniform, x); } -static inline void shader_uint_(int uniform, unsigned x ) { glUniform1ui(uniform, x); } -static inline void shader_texture_unit_(int sampler, unsigned id, unsigned unit) { - // @todo. if tex.h == 1 ? GL_TEXTURE_1D : GL_TEXTURE_2D - glUniform1i(sampler, unit); - glActiveTexture(GL_TEXTURE0 + unit); - glBindTexture(GL_TEXTURE_2D, id); -} -static inline void shader_texture_(int sampler, texture_t t) { shader_texture_unit_(sampler, t.id, texture_unit()); } - -// public api -void shader_int(const char *uniform, int i) { glUniform1i(shader_uniform(uniform), i); } -void shader_float(const char *uniform, float f) { glUniform1f(shader_uniform(uniform), f); } -void shader_vec2(const char *uniform, vec2 v) { glUniform2fv(shader_uniform(uniform), 1, &v.x); } -void shader_vec3(const char *uniform, vec3 v) { glUniform3fv(shader_uniform(uniform), 1, &v.x); } -void shader_vec3v(const char *uniform, int count, vec3 *v) { glUniform3fv(shader_uniform(uniform), count, &v[0].x); } -void shader_vec4(const char *uniform, vec4 v) { glUniform4fv(shader_uniform(uniform), 1, &v.x); } -void shader_mat44(const char *uniform, mat44 m) { glUniformMatrix4fv(shader_uniform(uniform), 1, GL_FALSE/*GL_TRUE*/, m); } -void shader_cubemap(const char *sampler, unsigned texture) { - int id = texture_unit(); - glUniform1i(shader_uniform(sampler), id); - glActiveTexture(GL_TEXTURE0 + id); - glBindTexture(GL_TEXTURE_CUBE_MAP, texture); -} -void shader_bool(const char *uniform, bool x) { glUniform1i(shader_uniform(uniform), x); } -void shader_uint(const char *uniform, unsigned x ) { glUniform1ui(shader_uniform(uniform), x); } -void shader_texture(const char *sampler, texture_t t) { shader_texture_unit(sampler, t.id, texture_unit()); } -void shader_texture_unit(const char *sampler, unsigned id, unsigned unit) { - // @todo. if tex.h == 1 ? GL_TEXTURE_1D : GL_TEXTURE_2D - glUniform1i(shader_uniform(sampler), unit); - glActiveTexture(GL_TEXTURE0 + unit); - glBindTexture(GL_TEXTURE_2D, id); -} -void shader_image(texture_t t, unsigned unit, unsigned level, int layer /* -1 to disable layered access */, unsigned access){ - shader_image_unit(t.id, unit, level, layer, t.texel_type, access); -} -void shader_image_unit(unsigned texture, unsigned unit, unsigned level, int layer, unsigned texel_type, unsigned access){ - static GLenum gl_access[] = {GL_READ_ONLY, GL_WRITE_ONLY, GL_READ_WRITE}; - glBindImageTexture(unit, texture, level, layer!=-1, layer!=-1?layer:0, gl_access[access], texel_type); -} - -void shader_colormap(const char *name, colormap_t c ) { - // assumes shader uses `struct { vec4 color; bool has_tex } name + sampler2D name_tex;` - shader_vec4( va("%s.color", name), c.color ); - shader_bool( va("%s.has_tex", name), c.texture != NULL ); - if( c.texture ) shader_texture( va("%s_tex", name), *c.texture ); -} - -// ----------------------------------------------------------------------------- -// colors - -unsigned rgba( uint8_t r, uint8_t g, uint8_t b, uint8_t a ) { - return (unsigned)a << 24 | b << 16 | g << 8 | r; -} -unsigned bgra( uint8_t b, uint8_t g, uint8_t r, uint8_t a ) { - return rgba(r,g,b,a); -} -unsigned alpha( unsigned rgba ) { - return rgba >> 24; -} - -unsigned rgbaf(float r, float g, float b, float a) { - return rgba(r * 255, g * 255, b * 255, a * 255); -} -unsigned bgraf(float b, float g, float r, float a) { - return rgba(r * 255, g * 255, b * 255, a * 255); -} - -unsigned atorgba(const char *s) { - if( s[0] != '#' ) return 0; - unsigned r = 0, g = 0, b = 0, a = 255; - int slen = strspn(s+1, "0123456789abcdefABCDEF"); - if( slen > 8 ) slen = 8; - /**/ if( slen == 6 ) sscanf(s+1, "%2x%2x%2x", &r,&g,&b); - else if( slen == 8 ) sscanf(s+1, "%2x%2x%2x%2x", &r,&g,&b,&a); - else if( slen == 3 ) sscanf(s+1, "%1x%1x%1x", &r,&g,&b ), r=r<<4|r,g=g<<4|g,b=b<<4|b; - else if( slen == 4 ) sscanf(s+1, "%1x%1x%1x%1x", &r,&g,&b,&a), r=r<<4|r,g=g<<4|g,b=b<<4|b,a=a<<4|a; - return rgba(r,g,b,a); -} -char *rgbatoa(unsigned rgba) { - unsigned a = rgba >> 24; - unsigned b =(rgba >> 16) & 255; - unsigned g =(rgba >> 8) & 255; - unsigned r = rgba & 255; - char *s = va("# "); - sprintf(s+1, "%02x%02x%02x%02x", r,g,b,a); - return s; -} - -// ----------------------------------------------------------------------------- -// images - -image_t image_create(int x, int y, int flags) { - int n = 3; // defaults to RGB - if(flags & IMAGE_R) n = 1; - if(flags & IMAGE_RG) n = 2; - if(flags & IMAGE_RGB) n = 3; - if(flags & IMAGE_RGBA) n = 4; - image_t img; img.x = x; img.y = y; img.n = n; - img.pixels = REALLOC(0, x * y * n ); // @fixme: image_destroy() requires stbi allocator to match REALLOC - return img; -} - -image_t image_from_mem(const void *data, int size, int flags) { - image_t img = {0}; - if( data && size ) { - stbi_set_flip_vertically_on_load(flags & IMAGE_FLIP ? 1 : 0); - - int n = 0; - if(flags & IMAGE_R) n = 1; - if(flags & IMAGE_RG) n = 2; - if(flags & IMAGE_RGB) n = 3; - if(flags & IMAGE_RGBA) n = 4; - if(flags & IMAGE_FLOAT) - img.pixels = stbi_loadf_from_memory((const stbi_uc*)data, size, (int*)&img.x,(int*)&img.y,(int*)&img.n, n); - else - img.pixels = stbi_load_from_memory((const stbi_uc*)data, size, (int*)&img.x,(int*)&img.y,(int*)&img.n, n); - if( img.pixels ) { - PRINTF("Loaded image (%dx%d %.*s->%.*s)\n",img.w,img.h,img.n,"RGBA",n?n:img.n,"RGBA"); - } else { - // PANIC("Error loading image (%s)\n", pathfile); - } - img.n = n ? n : img.n; - } - return img; -} - -image_t image(const char *pathfile, int flags) { - //const char *fname = vfs_remap(pathfile); - // if( !fname[0] ) fname = vfs_remap(va("%s.png",pathfile)); // needed? - // if( !fname[0] ) fname = vfs_remap(va("%s.jpg",pathfile)); // needed? - // if( !fname[0] ) fname = vfs_remap(va("%s.tga",pathfile)); // needed? - // if( !fname[0] ) fname = vfs_remap(va("%s.jpg.png",pathfile)); // needed? - // if( !fname[0] ) fname = vfs_remap(va("%s.tga.png",pathfile)); // needed? - // if( !fname[0] ) fname = vfs_remap(va("%s.png.jpg",pathfile)); // needed? - // if( !fname[0] ) fname = vfs_remap(va("%s.tga.jpg",pathfile)); // needed? - - int size = 0; - char *data = vfs_load(pathfile, &size); - return image_from_mem(data, size, flags); -} - -void image_destroy(image_t *img) { - if(img->pixels) stbi_image_free(img->pixels); - img->pixels = 0; // *img = (image_t){0}; // do not clear fields yet. might be useful in the future. -} - -// bilinear interpolation (uv must be in image coords, range [0..w-1,0..h-1]) -static -vec3 bilinear(image_t in, vec2 uv) { // image_bilinear_pixel() ? - float w = in.x, h = in.y, u = uv.x, v = uv.y; - float u1 = (int)u, v1 = (int)v, u2 = minf(u1+1, w-1), v2 = minf(v1+1, h-1); - float c1 = u - u1, c2 = v - v1; - uint8_t *p1 = &in.pixels8[ in.n * (int)(u1 + v1 * in.w) ]; - uint8_t *p2 = &in.pixels8[ in.n * (int)(u2 + v1 * in.w) ]; - uint8_t *p3 = &in.pixels8[ in.n * (int)(u1 + v2 * in.w) ]; - uint8_t *p4 = &in.pixels8[ in.n * (int)(u2 + v2 * in.w) ]; - vec3 A = vec3( p1[0], p1[1], p1[2] ); - vec3 B = vec3( p2[0], p2[1], p2[2] ); - vec3 C = vec3( p3[0], p3[1], p3[2] ); - vec3 D = vec3( p4[0], p4[1], p4[2] ); - return mix3(mix3(A, B, c1), mix3(C, D, c1), c2); -} - -// ----------------------------------------------------------------------------- -// textures - -int texture_unit() { - static int textureUnit = 0, totalTextureUnits = 0; - do_once glGetIntegerv(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS, &totalTextureUnits); - // ASSERT(textureUnit < totalTextureUnits, "%d texture units exceeded", totalTextureUnits); - return textureUnit++ % totalTextureUnits; -} - -unsigned texture_update(texture_t *t, unsigned w, unsigned h, unsigned n, const void *pixels, int flags) { - if( t && !t->id ) { - glGenTextures( 1, &t->id ); - return texture_update(t, w, h, n, pixels, flags); - } - ASSERT( t && t->id ); - ASSERT( n <= 4 ); - GLuint pixel_types[] = { GL_RED, GL_RED, GL_RG, GL_RGB, GL_RGBA, GL_R32F, GL_R32F, GL_RG32F, GL_RGB32F, GL_RGBA32F }; - GLenum pixel_storage = flags & TEXTURE_FLOAT ? GL_FLOAT : GL_UNSIGNED_BYTE; - GLuint pixel_type = pixel_types[ n ]; - GLuint texel_type = t->texel_type = pixel_types[ n + 5 * !!(flags & TEXTURE_FLOAT) ]; - GLenum wrap = GL_CLAMP_TO_EDGE; - GLenum min_filter = GL_NEAREST, mag_filter = GL_NEAREST; -// GLfloat color = (flags&7)/7.f, border_color[4] = { color, color, color, 1.f }; - - if( flags & TEXTURE_BGR ) if( pixel_type == GL_RGB ) pixel_type = GL_BGR; - if( flags & TEXTURE_BGR ) if( pixel_type == GL_RGBA ) pixel_type = GL_BGRA; - if( flags & TEXTURE_SRGB ) if( texel_type == GL_RGB ) texel_type = GL_SRGB; - if( flags & TEXTURE_SRGB ) if( texel_type == GL_RGBA ) texel_type = GL_SRGB_ALPHA; // GL_SRGB8_ALPHA8 ? - - if( flags & TEXTURE_BC1 ) texel_type = GL_COMPRESSED_RGBA_S3TC_DXT1_EXT; - if( flags & TEXTURE_BC2 ) texel_type = GL_COMPRESSED_RGBA_S3TC_DXT3_EXT; - if( flags & TEXTURE_BC3 ) texel_type = GL_COMPRESSED_RGBA_S3TC_DXT5_EXT; - if( flags & TEXTURE_DEPTH ) texel_type = pixel_type = GL_DEPTH_COMPONENT; // GL_DEPTH_COMPONENT32 - - if( flags & TEXTURE_REPEAT ) wrap = GL_REPEAT; - if( flags & TEXTURE_BORDER ) wrap = GL_CLAMP_TO_BORDER; - if( flags & TEXTURE_LINEAR ) min_filter = GL_LINEAR, mag_filter = GL_LINEAR; - if( flags & TEXTURE_MIPMAPS ) min_filter = flags & TEXTURE_LINEAR ? GL_LINEAR_MIPMAP_LINEAR : GL_NEAREST_MIPMAP_LINEAR; // : GL_LINEAR_MIPMAP_NEAREST; maybe? - if( flags & TEXTURE_MIPMAPS ) mag_filter = flags & TEXTURE_LINEAR ? GL_LINEAR : GL_NEAREST; - -#if 0 - if( 0 ) { // flags & TEXTURE_PREMULTIPLY_ALPHA ) - uint8_t *p = pixels; - if(n == 2) for( unsigned i = 0; i < 2*w*h; i += 2 ) { - p[i] = (p[i] * p[i+1] + 128) >> 8; - } - if(n == 4) for( unsigned i = 0; i < 4*w*h; i += 4 ) { - p[i+0] = (p[i+0] * p[i+3] + 128) >> 8; - p[i+1] = (p[i+1] * p[i+3] + 128) >> 8; - p[i+2] = (p[i+2] * p[i+3] + 128) >> 8; - } - } -#endif - -GLenum texture_type = t->flags & TEXTURE_ARRAY ? GL_TEXTURE_2D_ARRAY : GL_TEXTURE_2D; // @fixme: test GL_TEXTURE_2D_ARRAY - -//glPixelStorei( GL_UNPACK_ALIGNMENT, n < 4 ? 1 : 4 ); // for framebuffer reading -//glActiveTexture(GL_TEXTURE0 + (flags&7)); - glBindTexture(texture_type, t->id); - glTexImage2D(texture_type, 0, texel_type, w, h, 0, pixel_type, pixel_storage, pixels); - glTexParameteri(texture_type, GL_TEXTURE_WRAP_S, wrap); - glTexParameteri(texture_type, GL_TEXTURE_WRAP_T, wrap); - glTexParameteri(texture_type, GL_TEXTURE_MIN_FILTER, min_filter); - glTexParameteri(texture_type, GL_TEXTURE_MAG_FILTER, mag_filter); - - if (flags & TEXTURE_ANISOTROPY) { - GLfloat value, max_anisotropy = 16.0f; - glGetFloatv(GL_MAX_TEXTURE_MAX_ANISOTROPY, &value); - - value = (value > max_anisotropy) ? max_anisotropy : value; - glTexParameterf(texture_type, GL_TEXTURE_MAX_ANISOTROPY, value); - } - -#if 0 // only for sampler2DShadow - if( flags & TEXTURE_DEPTH ) glTexParameteri(texture_type, GL_TEXTURE_COMPARE_MODE, GL_COMPARE_REF_TO_TEXTURE); - if( flags & TEXTURE_DEPTH ) glTexParameteri(texture_type, GL_TEXTURE_COMPARE_FUNC, GL_LEQUAL); -#endif -// if( flags & TEXTURE_BORDER ) glTexParameterfv(texture_type, GL_TEXTURE_BORDER_COLOR, border_color); - if( flags & TEXTURE_MIPMAPS ) glGenerateMipmap(texture_type); - -if( flags & TEXTURE_MIPMAPS ) { - GLfloat max_aniso = 0; -// glGetFloatv(GL_MAX_TEXTURE_MAX_ANISOTROPY, &max_aniso); -max_aniso = 4; -// glTexParameterf(texture_type, GL_TEXTURE_MAX_ANISOTROPY, max_aniso); -} - - // glBindTexture(texture_type, 0); // do not unbind. current code expects texture to be bound at function exit - - t->w = w; - t->h = h; - t->n = n; - t->flags = flags; - t->filename = t->filename ? t->filename : ""; - - return t->id; -} - -texture_t texture_create(unsigned w, unsigned h, unsigned n, const void *pixels, int flags) { - texture_t texture = {0}; - glGenTextures( 1, &texture.id ); - texture_update( &texture, w, h, n, pixels, flags ); - texture.transparent = texture.n > 3; // @fixme: should be true only if any pixel.a == 0 - return texture; -} - -texture_t texture_checker() { - static texture_t texture = {0}; - if( !texture.id ) { -#if 0 - float pixels[] = { 1,0.5,0.5,1 }; - texture = texture_create(2,2,1, pixels, TEXTURE_FLOAT|TEXTURE_MIPMAPS|TEXTURE_REPEAT|TEXTURE_BORDER); -#else - uint32_t *pixels = REALLOC(0, 256*256*4); - for (int y = 0, i = 0; y < 256; y++) { - for (int x = 0; x < 256; x++) { -#if 0 - extern const uint32_t secret_palette[32]; - uint32_t rgb = secret_palette[ y / 8 ] * !!((x ^ y) & 0x8); - pixels[i++] = (rgb>>16) & 255; - pixels[i++] = (rgb>>8) & 255; - pixels[i++] = (rgb>>0) & 255; - pixels[i++] = 255; -#elif 0 - extern const uint32_t secret_palette[32]; - uint32_t rgb = ((x ^ y) & 0x8) ? secret_palette[6] : secret_palette[ 8 + ((x^y) / (256/6)) ]; - pixels[i++] = (rgb>>16) & 255; - pixels[i++] = (rgb>>8) & 255; - pixels[i++] = (rgb>>0) & 255; - pixels[i++] = 255; -#elif 0 - extern const uint32_t secret_palette[32]; - uint32_t lum = (x^y) & 8 ? 128 : (x^y) & 128 ? 192 : 255; - uint32_t rgb = rgba(lum,lum,lum,255); - pixels[i++] = rgb; -#else - int j = y, i = x; - unsigned char *p = (unsigned char *)&pixels[x + y * 256]; - p[0] = (i / 16) % 2 == (j / 16) % 2 ? 255 : 0; // r - p[1] = ((i - j) / 16) % 2 == 0 ? 255 : 0; // g - p[2] = ((i + j) / 16) % 2 == 0 ? 255 : 0; // b - p[3] = 255; // a -#endif - } - } - texture = texture_create(256,256,4, pixels, TEXTURE_RGBA|TEXTURE_MIPMAPS|TEXTURE_REPEAT|TEXTURE_BORDER); - FREE(pixels); -#endif - } - return texture; -} - -texture_t texture_from_mem(const void *ptr, int len, int flags) { - image_t img = image_from_mem(ptr, len, flags); - if( img.pixels ) { - texture_t t = texture_create(img.x, img.y, img.n, img.pixels, flags); - image_destroy(&img); - return t; - } - return texture_checker(); -} - -texture_t texture(const char *pathfile, int flags) { - // PRINTF("Loading file %s\n", pathfile); - image_t img = image(pathfile, flags); - if( img.pixels ) { - texture_t t = texture_create(img.x, img.y, img.n, img.pixels, flags); - t.filename = STRDUP(file_name(pathfile)); - image_destroy(&img); - return t; - } - return texture_checker(); -} - -void texture_destroy( texture_t *t ) { - if(t->filename && t->filename[0]) FREE(t->filename), t->filename = 0; - if(t->fbo) fbo_destroy(t->fbo), t->fbo = 0; - if(t->id) glDeleteTextures(1, &t->id), t->id = 0; - *t = (texture_t){0}; -} - -bool texture_rec_begin(texture_t *t, unsigned tw, unsigned th) { - for( unsigned w = tw ? tw : window_width(), h = th ? th : window_height(); w*h ; ) { - // resize if needed - if( t->w != w || t->h != h ) { - // re-create texture, set texture parameters and content - texture_update(t, w, h, 4, NULL, TEXTURE_RGBA); - if(!t->fbo) t->fbo = fbo(t->id, 0, 0); - } - // bind fbo to texture - fbo_bind(t->fbo); - return true; - } - return false; - -} -void texture_rec_end(texture_t *t) { - fbo_unbind(); -} - -// ktx texture loader -// - rlyeh, public domain -// -// [ref] https://developer.nvidia.com/astc-texture-compression-for-game-assets -// -// # Compatibility and modes. What to choose. -// - iOS: PVRTC1_4_RGB or PVRTC1_4 (RGBA) with q:pvrtcnormal. -// - Desktop (OSX/Linux/Windows): BC1, BC1a or BC3 with q:normal. -// - Android: ETC2_RGB or ETC2_RGBA with q:etcfast. ASTC_4x4 or ASTC_8x8 with q:astcmedium, as a fallback. - -#if 0 -enum { - // for glFormat - GLFORMAT_RED = 0x1903, - GLFORMAT_RG = 0x8227, - GLFORMAT_RGB = 0x1907, - GLFORMAT_RGBA = 0x1908, - //GLFORMAT_ALPHA = 0x1906, // 8 - //GLFORMAT_LUMINANCE = 0x1909, // 8 - //GLFORMAT_LUMINANCE_ALPHA = 0x190A, // 88 - - // for glType - GLTYPE_UNSIGNED_BYTE = 0x1401, - - // for glInternalFormat: RAW // @todo: SRGB, SRGBA, SBGR, SBGRA - UNCOMPRESSED_RGB = 0x8051, // 888, GL_RGB8_EXT - UNCOMPRESSED_RGB_565 = 0x8363, - UNCOMPRESSED_RGBA = 0x8058, // 8888, GL_RGBA8_EXT - UNCOMPRESSED_RGBA_4444 = 0x8033, - UNCOMPRESSED_RGBA_5551 = 0x8034, - UNCOMPRESSED_BGR = 0x80E0, // 888 - UNCOMPRESSED_BGRA = 0x80E1, // 8888 - - // for glInternalFormat: S3TC/DXTn/BCn // @todo: BC4,5,6,7* - COMPRESSED_RGB_BC1 = 0x83F0, // DXT1 - COMPRESSED_RGBA_BC1 = 0x83F1, // DXT1a, BC1a - COMPRESSED_RGBA_BC2 = 0x83F2, // DXT3 - COMPRESSED_RGBA_BC3 = 0x83F3, // DXT5 - COMPRESSED_RGBA_BC7 = 0x8E8C, // COMPRESSED_RGBA_BPTC_UNORM_ARB - COMPRESSED_SRGB_BC1 = 0x8C4C, - COMPRESSED_SRGBA_BC1 = 0x8C4D, - COMPRESSED_SRGBA_BC2 = 0x8C4E, - COMPRESSED_SRGBA_BC3 = 0x8C4F, - // RGB_BC7f COMPRESSED_RGB_BPTC_SIGNED_FLOAT_ARB - // RGB_BC7uf COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_ARB - // RGBA_BC7 COMPRESSED_RGBA_BPTC_UNORM_ARB - // SRGBA_BC7 COMPRESSED_SRGBA_BPTC_UNORM_ARB - - // for glInternalFormat: ETC2+EAC - COMPRESSED_R_EAC = 0x9270, // 4bpp - COMPRESSED_R_EAC_SIGNED = 0x9271, // 4bpp. can preserve 0 - COMPRESSED_RG_EAC = 0x9272, // 8bpp - COMPRESSED_RG_EAC_SIGNED = 0x9273, // 8bbp. can preserve 0 - COMPRESSED_RGB_ETC2 = 0x9274, // 4bpp - COMPRESSED_RGBA_ETC2 = 0x9276, // 4bpp A1 - COMPRESSED_RGBA_ETC2_EAC = 0x9278, // 8bpp - COMPRESSED_SRGB_ETC2 = 0x9275, // 4bpp - COMPRESSED_SRGBA_ETC2 = 0x9277, // 4bpp A1 - COMPRESSED_SRGBA_ETC2_EAC = 0x9279, // 8bpp - - // for glInternalFormat: PVR - COMPRESSED_RGB_PVR1_2 = 0x8C01, - COMPRESSED_RGB_PVR1_4 = 0x8C00, - COMPRESSED_RGBA_PVR1_2 = 0x8C03, - COMPRESSED_RGBA_PVR1_4 = 0x8C02, - - COMPRESSED_SRGB_PVR1_2 = 0x8A54, // _EXT - COMPRESSED_SRGB_PVR1_4 = 0x8A55, // _EXT - COMPRESSED_SRGBA_PVR1_2 = 0x8A56, // _EXT - COMPRESSED_SRGBA_PVR1_4 = 0x8A57, // _EXT - - COMPRESSED_RGBA_PVR2_2 = 0x9137, - COMPRESSED_RGBA_PVR2_4 = 0x9138, - COMPRESSED_SRGBA_PVR2_2 = 0x93F0, - COMPRESSED_SRGBA_PVR2_4 = 0x93F1, - - // for glInternalFormat: ASTC - COMPRESSED_RGBA_ASTC4x4 = 0x93B0, // 8.00bpp - COMPRESSED_RGBA_ASTC5x4 = 0x93B1, // 6.40bpp - COMPRESSED_RGBA_ASTC5x5 = 0x93B2, // 5.12bpp - COMPRESSED_RGBA_ASTC6x5 = 0x93B3, // 4.27bpp - COMPRESSED_RGBA_ASTC6x6 = 0x93B4, // 3.56bpp - COMPRESSED_RGBA_ASTC8x5 = 0x93B5, // 3.20bpp - COMPRESSED_RGBA_ASTC8x6 = 0x93B6, // 2.67bpp - COMPRESSED_RGBA_ASTC8x8 = 0x93B7, // 2.56bpp - COMPRESSED_RGBA_ASTC10x5 = 0x93B8, // 2.13bpp - COMPRESSED_RGBA_ASTC10x6 = 0x93B9, // 2.00bpp - COMPRESSED_RGBA_ASTC10x8 = 0x93BA, // 1.60bpp - COMPRESSED_RGBA_ASTC10x10 = 0x93BB, // 1.28bpp - COMPRESSED_RGBA_ASTC12x10 = 0x93BC, // 1.07bpp - COMPRESSED_RGBA_ASTC12x12 = 0x93BD, // 0.89bpp - - COMPRESSED_SRGBA_ASTC4x4 = 0x93D0, // 8.00bpp SRGB8 A8 - COMPRESSED_SRGBA_ASTC5x4 = 0x93D1, // 6.40bpp SRGB8 A8 - COMPRESSED_SRGBA_ASTC5x5 = 0x93D2, // 5.12bpp SRGB8 A8 - COMPRESSED_SRGBA_ASTC6x5 = 0x93D3, // 4.27bpp SRGB8 A8 - COMPRESSED_SRGBA_ASTC6x6 = 0x93D4, // 3.56bpp SRGB8 A8 - COMPRESSED_SRGBA_ASTC8x5 = 0x93D5, // 3.20bpp SRGB8 A8 - COMPRESSED_SRGBA_ASTC8x6 = 0x93D6, // 2.67bpp SRGB8 A8 - COMPRESSED_SRGBA_ASTC8x8 = 0x93D7, // 2.56bpp SRGB8 A8 - COMPRESSED_SRGBA_ASTC10x5 = 0x93D8, // 2.13bpp SRGB8 A8 - COMPRESSED_SRGBA_ASTC10x6 = 0x93D9, // 2.00bpp SRGB8 A8 - COMPRESSED_SRGBA_ASTC10x8 = 0x93DA, // 1.60bpp SRGB8 A8 - COMPRESSED_SRGBA_ASTC10x10 = 0x93DB, // 1.28bpp SRGB8 A8 - COMPRESSED_SRGBA_ASTC12x10 = 0x93DC, // 1.07bpp SRGB8 A8 - COMPRESSED_SRGBA_ASTC12x12 = 0x93DD, // 0.89bpp SRGB8 A8 - - // others: - // COMPRESSED_RED_RGTC1 - // COMPRESSED_SIGNED_RED_RGTC1 - // COMPRESSED_RG_RGTC2 - // COMPRESSED_SIGNED_RG_RGTC2 -}; -#endif - -#pragma pack(push, 1) // not really needed. the struct is exactly 64 bytes, and all members are 32-bit unsigned -typedef struct ktx_header { - unsigned identifier[3]; // "«KTX 11»\r\n\x1A\n" - unsigned endianness; // 0x04030201 if match - - unsigned glType; // 0 if compressed; otherwise: UNSIGNED_BYTE, UNSIGNED_SHORT_5_6_5, etc. - unsigned glTypeSize; // 1 if compressed; otherwise, size in bytes of glType for endianness conversion. not needed. - unsigned glFormat; // STENCIL_INDEX, DEPTH_COMPONENT, DEPTH_STENCIL, RED, GREEN, BLUE, RG, RGB, RGBA, BGR, BGRA, RED_INTEGER, GREEN_INTEGER, BLUE_INTEGER, RG_INTEGER, RGB_INTEGER, RGBA_INTEGER, BGR_INTEGER, BGRA_INTEGER, - unsigned glInternalFormat; // COMPRESSED_RED, COMPRESSED_RG, COMPRESSED_RGB, COMPRESSED_RGBA, COMPRESSED_SRGB, COMPRESSED_SRGB_ALPHA, COMPRESSED_RED_RGTC1, COMPRESSED_SIGNED_RED_RGTC1, COMPRESSED_RG_RGTC2, COMPRESSED_SIGNED_RG_RGTC2, COMPRESSED_RGBA_BPTC_UNORM, COMPRESSED_SRGB_ALPHA_BPTC_UNORM, COMPRESSED_RGB_BPTC_SIGNED_FLOAT, COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT, COMPRESSED_RGB8_ETC2, COMPRESSED_SRGB8_ETC2, COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2, COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2, COMPRESSED_RGBA8_ETC2_EAC, COMPRESSED_SRGB8_ALPHA8_ETC2_EAC, COMPRESSED_R11_EAC, COMPRESSED_SIGNED_R11_EAC, COMPRESSED_RG11_EAC, COMPRESSED_SIGNED_RG11_EAC, - unsigned glBaseInternalFormat; // DEPTH_COMPONENT, DEPTH_STENCIL, RED, RG, RGB, RGBA, STENCIL_INDEX, - - unsigned width; - unsigned height; - unsigned depth; - - unsigned num_surfaces; // >1 for material - unsigned num_faces; // =6 for cubemaps (+X,-X,+Y,-Y,+Z,-Z order), 1 otherwise - unsigned num_mipmaps; // >1 for mipmaps - - unsigned metadata_size; // length of following header - // struct ktx_metadata { - // unsigned key_and_value_size; - // char key_and_value[key_and_value_size]; - // char value_padding[3 - ((key_and_value_size + 3) % 4)]; - // }; - // struct ktx_texture_data { - // unsigned size; - // char data[0]; - // } tx; -} ktx_header; -#pragma pack(pop) - -typedef struct ktx_texture { - unsigned width; - unsigned height; - unsigned depth; - unsigned size; - const char* data; -} ktx_texture; - -typedef struct ktx { - ktx_header hdr; - const char *error; -} ktx; - -static __thread array(ktx_texture) ktx_textures; - -static -ktx ktx_load(const void *data, unsigned int len) { - ktx ctx = {0}; - - // check ktx signature - bool is_ktx = (len > sizeof(ktx_header)) && !memcmp(data, "\xABKTX 11\xBB\r\n\x1A\n", 12); - if( !is_ktx ) { - return ctx.error = "ERROR_BAD_KTX_FILE", ctx; - } - - // copy texture header - ktx_header *hdr = &ctx.hdr; - *hdr = *((const ktx_header *)data); - - // sanity checks - STATIC_ASSERT(sizeof(ktx_header) == (16*4)); - for( int i = 0; i < sizeof(ktx_header)/4; ++i) { - i[(unsigned*)hdr] = lil32(i[(unsigned*)hdr]); - } - if( hdr->endianness != 0x04030201 ) { - return ctx.error = "ERROR_BAD_ENDIANNESS", ctx; - } - if( (hdr->num_faces != 1) && (hdr->num_faces != 6) ) { - return ctx.error = "ERROR_BAD_NUMBER_OF_FACES", ctx; - } - - // normalize glInternalFormat if uncompressed. - if( hdr->glType != 0 ) { - hdr->glInternalFormat = hdr->glBaseInternalFormat; - } - - // normalize [1..N] range - hdr->num_mipmaps += !hdr->num_mipmaps; - hdr->num_surfaces += !hdr->num_surfaces; - hdr->num_faces += !hdr->num_faces; - - // basically, - // for each level in num_mipmaps { UInt32 imageSize; - // for each surface in num_surfaces { - // for each face in num_faces { - // for each slice in depth { - // for each row in height { - // for each pixel in width { - // byte data[size_based_on_pixelformat] - // byte facePadding[0-3] }}} - // } - // Byte mipPadding[0-3] } - - array_resize(ktx_textures, hdr->num_mipmaps * hdr->num_surfaces * hdr->num_faces); - - const char *bitmap = ((const char*)data) + sizeof(ktx_header) + hdr->metadata_size; - - for( unsigned m = 0; m < hdr->num_mipmaps; ++m ) { - for( unsigned s = 0; s < hdr->num_surfaces; ++s ) { - for( unsigned f = 0; f < hdr->num_faces; ++f ) { - ktx_texture *t = &ktx_textures[f+s*hdr->num_faces+m*hdr->num_faces*hdr->num_surfaces]; - - // set dimensions [1..N] - t->width = (hdr->width >> m) + !(hdr->width >> m); - t->height = (hdr->height >> m) + !(hdr->height >> m); - t->depth = (hdr->depth >> m) + !(hdr->depth >> m); - - // seek to mip - const char *ptr = bitmap; - for( int i = 0; i <= m; i++ ) { - // if cubemap, *ptr holds unpadded size of single face, - // else, *ptr holds size of all surfaces+faces+slices for whole mipmap. - unsigned size = lil32(*(unsigned*)ptr); - unsigned padding = 3 - ((size + 3) % 4); - - // seek to data - t->data = ptr + 4 + (size * f); - - // seek to next mipmap - ptr = ptr + 4 + (size * hdr->num_faces) + padding; - - // adjust size - t->size = (uintptr_t)(ptr - t->data); // -padding; needed? - } - - // ensure we're in bounds - ASSERT(t->data < ((char*)data + len), "%p < %p", t->data, ((char*)data + len)); - ASSERT(((char*)t->data+t->size) <= ((char*)data + len), "%p < %p", (char*)t->data + t->size, ((char*)data + len)); - } - } - } - - return ctx; -} - -// --- - -texture_t texture_compressed_from_mem(const void *data, int len, unsigned flags) { - ktx ctx = ktx_load(data, len); - if( ctx.error ) { - // puts(ctx.error); - // return texture_checker(); - return texture_from_mem(data, len, flags); - } - - ktx_header hdr = ctx.hdr; - - // flags - int target = hdr.num_faces == 6 ? GL_TEXTURE_CUBE_MAP : hdr.depth > 0 ? GL_TEXTURE_3D : GL_TEXTURE_2D; - int dimensions = target == GL_TEXTURE_3D ? 3 : target == GL_TEXTURE_2D || target == GL_TEXTURE_CUBE_MAP ? 2 : 1; - - // create texture - GLuint id; - glGenTextures(1, &id); - glBindTexture(target, id); - - // filtering - glTexParameteri(target, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexParameteri(target, GL_TEXTURE_MIN_FILTER, hdr.num_mipmaps > 1 ? GL_LINEAR_MIPMAP_LINEAR : GL_LINEAR); - - // wrapping - if( dimensions > 0 ) glTexParameteri(target, GL_TEXTURE_WRAP_S, GL_REPEAT); - if( dimensions > 1 ) glTexParameteri(target, GL_TEXTURE_WRAP_T, GL_REPEAT); - if( dimensions > 2 ) glTexParameteri(target, GL_TEXTURE_WRAP_R, GL_REPEAT); - if( flags&TEXTURE_CLAMP && dimensions > 0 ) glTexParameteri(target, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); - if( flags&TEXTURE_CLAMP && dimensions > 1 ) glTexParameteri(target, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); - if( flags&TEXTURE_CLAMP && dimensions > 2 ) glTexParameteri(target, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE); - - if( target == GL_TEXTURE_CUBE_MAP ) target = GL_TEXTURE_CUBE_MAP_POSITIVE_X; - - // GLenum internalFormat = flags & TEXTURE_SRGB ? GL_SRGB8_ALPHA8 : GL_RGBA8; // @fixme - - int bytes = 0; - enum { border = 0 }; - for( int m = 0; m < hdr.num_mipmaps; ++m ) { - for( int s = 0; s < hdr.num_surfaces; ++s ) { - for( int f = 0; f < hdr.num_faces; ++f ) { - int d3 = target == GL_TEXTURE_3D, compr = hdr.glType == 0, mode = d3+compr*2; - ktx_texture *t = &ktx_textures[f+s*hdr.num_faces+m*hdr.num_faces*hdr.num_surfaces]; - /**/ if(mode==0) glTexImage2D(target+f,m,hdr.glInternalFormat,t->width,t->height, border,hdr.glFormat,hdr.glType,t->data); - else if(mode==1) glTexImage3D(target ,m,hdr.glInternalFormat,t->width,t->height,t->depth, border,hdr.glFormat,hdr.glType,t->data); - else if(mode==2) glCompressedTexImage2D(target+f,m,hdr.glInternalFormat,t->width,t->height, border,t->size,t->data); - else if(mode==3) glCompressedTexImage3D(target ,m,hdr.glInternalFormat,t->width,t->height,t->depth,border,t->size,t->data); - bytes += t->size; - } - } - } - -// if( !hdr.num_mipmaps ) -// if( flags & TEXTURE_MIPMAPS ) glGenerateMipmap(target); - - texture_t t = {0}; - t.id = id; - t.w = ktx_textures[0].width; - t.h = ktx_textures[0].height; - t.d = ktx_textures[0].depth; - // @todo: reconstruct flags - - PRINTF("dims:%dx%dx%d,size:%.2fMiB,mips:%d,layers:%d,faces:%d\n", t.w, t.h, t.d, bytes / 1024.0 / 1024.0, hdr.num_mipmaps, hdr.num_surfaces, hdr.num_faces); - return t; -} - -texture_t texture_compressed(const char *pathfile, unsigned flags) { - //const char *fname = vfs_remap(pathfile); - - int size = 0; - char *data = vfs_load(pathfile, &size); - return texture_compressed_from_mem(data, size, flags); -} - -// ----------------------------------------------------------------------------- -// shadowmaps - -shadowmap_t shadowmap(int texture_width) { // = 1024 - shadowmap_t s = {0}; - s.texture_width = texture_width; - - glGetIntegerv(GL_DRAW_FRAMEBUFFER_BINDING, &s.saved_fb); - - glGenFramebuffers(1, &s.fbo); - glBindFramebuffer(GL_FRAMEBUFFER, s.fbo); - - glActiveTexture(GL_TEXTURE0); - glGenTextures(1, &s.texture); - glBindTexture(GL_TEXTURE_2D, s.texture); - - glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, texture_width, texture_width, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_BYTE, 0); - - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER); - - glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, s.texture, 0); - -#if is(ems) - GLenum nones[] = { GL_NONE }; - glDrawBuffers(1, nones); - glReadBuffer(GL_NONE); -#else - glDrawBuffer(GL_NONE); - glReadBuffer(GL_NONE); -#endif - - glBindFramebuffer(GL_FRAMEBUFFER, s.saved_fb); - return s; -} - -void shadowmap_destroy(shadowmap_t *s) { - if (s->texture) { - glDeleteTextures(1, &s->texture); - } - if (s->fbo) { - glDeleteFramebuffers(1, &s->fbo); - } - shadowmap_t z = {0}; - *s = z; -} - -void shadowmap_set_shadowmatrix(shadowmap_t *s, vec3 aLightPos, vec3 aLightAt, vec3 aLightUp, const mat44 projection) { - copy44(s->proj, projection); - s->light_position = vec4(aLightPos.x, aLightPos.y, aLightPos.z, 1); - lookat44(s->mv, aLightPos, aLightAt, aLightUp); - - mat44 bias = { - 0.5, 0.0, 0.0, 0.0, - 0.0, 0.5, 0.0, 0.0, - 0.0, 0.0, 0.5, 0.0, - 0.5, 0.5, 0.5, 1.0 }; - - // s->shadowmatrix = bias; - // s->shadowmatrix *= s->proj; - // s->shadowmatrix *= s->mv; -// multiply44x3(s->shadowmatrix, s->mv, s->proj, bias); - multiply44x3(s->shadowmatrix, bias, s->proj, s->mv); - - // mvp = projection * s->mv; -// multiply44x2(s->mvp, s->mv, projection); - multiply44x2(s->mvp, projection, s->mv); -} - -void shadowmap_begin(shadowmap_t *s) { - glGetIntegerv(GL_VIEWPORT, &s->saved_viewport[0]); - glGetIntegerv(GL_DRAW_FRAMEBUFFER_BINDING, &s->saved_fb); - - glBindFramebuffer(GL_FRAMEBUFFER, s->fbo); - glViewport(0, 0, s->texture_width, s->texture_width); - - glClearDepth(1); - glClear(GL_DEPTH_BUFFER_BIT); -} - -void shadowmap_end(shadowmap_t *s) { - glViewport(s->saved_viewport[0], s->saved_viewport[1], s->saved_viewport[2], s->saved_viewport[3]); - glBindFramebuffer(GL_FRAMEBUFFER, s->saved_fb); -} - -// shadowmap utils - -void shadowmatrix_proj(mat44 shm_proj, float aLightFov, float znear, float zfar) { - perspective44(shm_proj, aLightFov, 1.0f, znear, zfar); -} - -void shadowmatrix_ortho(mat44 shm_proj, float left, float right, float bottom, float top, float znear, float zfar) { - ortho44(shm_proj, left, right, bottom, top, znear, zfar); -} - -// ----------------------------------------------------------------------------- -// fullscreen quads - -// usage: bind empty vao & commit call for 6 (quad) or 3 vertices (tri). -// ie, glBindVertexArray(empty_vao); glDrawArrays(GL_TRIANGLES, 0, 3); - -static renderstate_t fullscreen_quad_rs; - -static inline -void fullscreen_quad_rs_init() { - do_once { - fullscreen_quad_rs = renderstate(); - fullscreen_quad_rs.depth_test_enabled = false; - fullscreen_quad_rs.blend_enabled = true; - fullscreen_quad_rs.blend_src = GL_SRC_ALPHA; - fullscreen_quad_rs.blend_dst = GL_ONE_MINUS_SRC_ALPHA; - fullscreen_quad_rs.front_face = GL_CW; - } -} - -void fullscreen_quad_rgb( texture_t texture ) { - fullscreen_quad_rs_init(); - static int program = -1, vao = -1, u_inv_gamma = -1; - if( program < 0 ) { - const char* vs = vfs_read("shaders/vs_0_2_fullscreen_quad_B_flipped.glsl"); - const char* fs = vfs_read("shaders/fs_2_4_texel_inv_gamma.glsl"); - - program = shader(vs, fs, "", "fragcolor" , NULL); - u_inv_gamma = glGetUniformLocation(program, "u_inv_gamma"); - glGenVertexArrays( 1, (GLuint*)&vao ); - } - - GLenum texture_type = texture.flags & TEXTURE_ARRAY ? GL_TEXTURE_2D_ARRAY : GL_TEXTURE_2D; - renderstate_apply(&fullscreen_quad_rs); - glUseProgram( program ); - float gamma = 1; - glUniform1f( u_inv_gamma, gamma ); - - glBindVertexArray( vao ); - - glActiveTexture( GL_TEXTURE0 ); - glBindTexture( texture_type, texture.id ); - - glDrawArrays( GL_TRIANGLES, 0, 6 ); - profile_incstat("Render.num_drawcalls", +1); - profile_incstat("Render.num_triangles", +2); - - glBindTexture( texture_type, 0 ); - glBindVertexArray( 0 ); - glUseProgram( 0 ); -// glDisable( GL_BLEND ); -} - -void fullscreen_quad_rgb_flipped( texture_t texture ) { - fullscreen_quad_rs_init(); - static int program = -1, vao = -1, u_inv_gamma = -1; - if( program < 0 ) { - const char* vs = vfs_read("shaders/vs_0_2_fullscreen_quad_B.glsl"); - const char* fs = vfs_read("shaders/fs_2_4_texel_inv_gamma.glsl"); - - program = shader(vs, fs, "", "fragcolor" , NULL); - u_inv_gamma = glGetUniformLocation(program, "u_inv_gamma"); - glGenVertexArrays( 1, (GLuint*)&vao ); - } - - GLenum texture_type = texture.flags & TEXTURE_ARRAY ? GL_TEXTURE_2D_ARRAY : GL_TEXTURE_2D; - renderstate_apply(&fullscreen_quad_rs); - glUseProgram( program ); - float gamma = 1; - glUniform1f( u_inv_gamma, gamma ); - - glBindVertexArray( vao ); - - glActiveTexture( GL_TEXTURE0 ); - glBindTexture( texture_type, texture.id ); - - glDrawArrays( GL_TRIANGLES, 0, 6 ); - profile_incstat("Render.num_drawcalls", +1); - profile_incstat("Render.num_triangles", +2); - - glBindTexture( texture_type, 0 ); - glBindVertexArray( 0 ); - glUseProgram( 0 ); -// glDisable( GL_BLEND ); -} - -void fullscreen_quad_ycbcr( texture_t textureYCbCr[3] ) { - fullscreen_quad_rs_init(); - static int program = -1, vao = -1, u_gamma = -1, uy = -1, ucb = -1, ucr = -1; - if( program < 0 ) { - const char* vs = vfs_read("shaders/vs_0_2_fullscreen_quad_B_flipped.glsl"); - const char* fs = vfs_read("shaders/fs_2_4_texel_ycbr_gamma_saturation.glsl"); - - program = shader(vs, fs, "", "fragcolor" , NULL); - u_gamma = glGetUniformLocation(program, "u_gamma"); - - uy = glGetUniformLocation(program, "u_texture_y"); - ucb = glGetUniformLocation(program, "u_texture_cb"); - ucr = glGetUniformLocation(program, "u_texture_cr"); - - glGenVertexArrays( 1, (GLuint*)&vao ); - } - - renderstate_apply(&fullscreen_quad_rs); - glUseProgram( program ); - // glUniform1f( u_gamma, gamma ); - - glBindVertexArray( vao ); - - glUniform1i(uy, 0); - glActiveTexture( GL_TEXTURE0 ); - glBindTexture( GL_TEXTURE_2D, textureYCbCr[0].id ); - - glUniform1i(ucb, 1); - glActiveTexture( GL_TEXTURE1 ); - glBindTexture( GL_TEXTURE_2D, textureYCbCr[1].id ); - - glUniform1i(ucr, 2); - glActiveTexture( GL_TEXTURE2 ); - glBindTexture( GL_TEXTURE_2D, textureYCbCr[2].id ); - - glDrawArrays( GL_TRIANGLES, 0, 6 ); - profile_incstat("Render.num_drawcalls", +1); - profile_incstat("Render.num_triangles", +2); - - glBindTexture( GL_TEXTURE_2D, 0 ); - glBindVertexArray( 0 ); - glUseProgram( 0 ); -// glDisable( GL_BLEND ); -} - -void fullscreen_quad_ycbcr_flipped( texture_t textureYCbCr[3] ) { - fullscreen_quad_rs_init(); - static int program = -1, vao = -1, u_gamma = -1, uy = -1, ucb = -1, ucr = -1; - if( program < 0 ) { - const char* vs = vfs_read("shaders/vs_0_2_fullscreen_quad_B.glsl"); - const char* fs = vfs_read("shaders/fs_2_4_texel_ycbr_gamma_saturation.glsl"); - - program = shader(vs, fs, "", "fragcolor" , NULL); - u_gamma = glGetUniformLocation(program, "u_gamma"); - - uy = glGetUniformLocation(program, "u_texture_y"); - ucb = glGetUniformLocation(program, "u_texture_cb"); - ucr = glGetUniformLocation(program, "u_texture_cr"); - - glGenVertexArrays( 1, (GLuint*)&vao ); - } - - renderstate_apply(&fullscreen_quad_rs); - glUseProgram( program ); - // glUniform1f( u_gamma, gamma ); - - glBindVertexArray( vao ); - - glUniform1i(uy, 0); - glActiveTexture( GL_TEXTURE0 ); - glBindTexture( GL_TEXTURE_2D, textureYCbCr[0].id ); - - glUniform1i(ucb, 1); - glActiveTexture( GL_TEXTURE1 ); - glBindTexture( GL_TEXTURE_2D, textureYCbCr[1].id ); - - glUniform1i(ucr, 2); - glActiveTexture( GL_TEXTURE2 ); - glBindTexture( GL_TEXTURE_2D, textureYCbCr[2].id ); - - glDrawArrays( GL_TRIANGLES, 0, 6 ); - profile_incstat("Render.num_drawcalls", +1); - profile_incstat("Render.num_triangles", +2); - - glBindTexture( GL_TEXTURE_2D, 0 ); - glBindVertexArray( 0 ); - glUseProgram( 0 ); -// glDisable( GL_BLEND ); -} - -// ----------------------------------------------------------------------------- -// cubemaps - -// project cubemap coords into sphere normals -static -vec3 cubemap2polar(int face, int x, int y, int texture_width) { - float u = (x / (texture_width - 1.f)) * 2 - 1; - float v = (y / (texture_width - 1.f)) * 2 - 1; - /**/ if( face == 0 ) return vec3( u, -1, -v); - else if( face == 1 ) return vec3(-v, -u, 1); - else if( face == 2 ) return vec3(-1, -u, -v); - else if( face == 3 ) return vec3(-u, 1, -v); - else if( face == 4 ) return vec3( v, -u, -1); - else return vec3( 1, u, -v); -} -// project normal in a sphere as 2d texcoord -static -vec2 polar2uv(vec3 n) { - n = norm3(n); - float theta = atan2(n.y, n.x); - float phi = atan2(n.z, hypot(n.x, n.y)); - float u = (theta + C_PI) / C_PI; - float v = (C_PI/2 - phi) / C_PI; - return vec2(u, v); -} - -// equirectangular panorama (2:1) to cubemap - in RGB, out RGB -static -void panorama2cubemap_(image_t out[6], const image_t in, int width){ - int face; - #pragma omp parallel for - for( face = 0; face < 6; ++face ) { - out[face] = image_create(width, width, IMAGE_RGB); - for (int j=0; j < width; ++j) { - uint32_t *line = &out[ face ].pixels32[ 0 + j * width ]; - for (int i=0; i < width; ++i) { - vec3 polar = cubemap2polar(face, i, j, width); - vec2 uv = polar2uv(polar); - uv = scale2(uv, in.h-1); // source coords (assumes 2:1, 2*h == w) - vec3 rgb = bilinear(in, uv); - union color { - struct { uint8_t r,g,b,a; }; - uint32_t rgba; - } c = { rgb.x, rgb.y, rgb.z, 255 }; - line[i] = c.rgba; - } - } - } -} -// equirectangular panorama (2:1) to cubemap - in RGB, out RGBA -void panorama2cubemap(image_t out[6], const image_t in, int width) { - int face; - #pragma omp parallel for - for( face = 0; face < 6; ++face ) { - out[face] = image_create(width, width, IMAGE_RGBA); - for (int j=0; j < width; ++j) { - uint32_t *line = &out[ face ].pixels32[ 0 + j * width ]; - for (int i=0; i < width; ++i) { - vec3 polar = cubemap2polar(face, i, j, width); - vec2 uv = polar2uv(polar); - uv = scale2(uv, in.h-1); // source coords (assumes 2:1, 2*h == w) - vec3 rgb = bilinear(in, uv); - union color { - struct { uint8_t r,g,b,a; }; - uint32_t rgba; - } c = { rgb.x, rgb.y, rgb.z, 255 }; - line[i] = c.rgba; - } - } - } -} - - -cubemap_t cubemap6( const image_t images[6], int flags ) { - cubemap_t c = {0}, z = {0}; - - glGenTextures(1, &c.id); - glBindTexture(GL_TEXTURE_CUBE_MAP, c.id); - - int samples = 0; - for (int i = 0; i < 6; i++) { - image_t img = images[i]; //image(textures[i], IMAGE_RGB); - - glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, GL_RGB, img.w, img.h, 0, img.n == 3 ? GL_RGB : GL_RGBA, GL_UNSIGNED_BYTE, img.pixels); - - // calculate SH coefficients (@ands) - const vec3 skyDir[] = {{ 1, 0, 0},{-1, 0, 0},{ 0, 1, 0},{ 0,-1, 0},{ 0, 0, 1},{ 0, 0,-1}}; - const vec3 skyX[] = {{ 0, 0,-1},{ 0, 0, 1},{ 1, 0, 0},{ 1, 0, 0},{ 1, 0, 0},{-1, 0, 0}}; - const vec3 skyY[] = {{ 0, 1, 0},{ 0, 1, 0},{ 0, 0,-1},{ 0, 0, 1},{ 0, 1, 0},{ 0, 1, 0}}; - int step = 16; - for (int y = 0; y < img.h; y += step) { - unsigned char *p = (unsigned char*)img.pixels + y * img.w * img.n; - for (int x = 0; x < img.w; x += step) { - vec3 n = add3( - add3( - scale3(skyX[i], 2.0f * (x / (img.w - 1.0f)) - 1.0f), - scale3(skyY[i], -2.0f * (y / (img.h - 1.0f)) + 1.0f)), - skyDir[i]); // texelDirection; - float l = len3(n); - vec3 light = scale3(vec3(p[0], p[1], p[2]), 1 / (255.0f * l * l * l)); // texelSolidAngle * texel_radiance; - n = norm3(n); - c.sh[0] = add3(c.sh[0], scale3(light, 0.282095f)); - c.sh[1] = add3(c.sh[1], scale3(light, -0.488603f * n.y * 2.0 / 3.0)); - c.sh[2] = add3(c.sh[2], scale3(light, 0.488603f * n.z * 2.0 / 3.0)); - c.sh[3] = add3(c.sh[3], scale3(light, -0.488603f * n.x * 2.0 / 3.0)); - c.sh[4] = add3(c.sh[4], scale3(light, 1.092548f * n.x * n.y / 4.0)); - c.sh[5] = add3(c.sh[5], scale3(light, -1.092548f * n.y * n.z / 4.0)); - c.sh[6] = add3(c.sh[6], scale3(light, 0.315392f * (3.0f * n.z * n.z - 1.0f) / 4.0)); - c.sh[7] = add3(c.sh[7], scale3(light, -1.092548f * n.x * n.z / 4.0)); - c.sh[8] = add3(c.sh[8], scale3(light, 0.546274f * (n.x * n.x - n.y * n.y) / 4.0)); - p += img.n * step; - samples++; - } - } - } - - - for (int s = 0; s < 9; s++) { - c.sh[s] = scale3(c.sh[s], 32.f / samples); - } - - // if( glGenerateMipmap ) - glGenerateMipmap(GL_TEXTURE_CUBE_MAP); - glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, /* glGenerateMipmap ?*/ GL_LINEAR_MIPMAP_LINEAR /*: GL_LINEAR*/); - glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); - glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); - glBindTexture(GL_TEXTURE_CUBE_MAP, 0); - - return c; -} - -cubemap_t cubemap( const image_t in, int flags ) { - ASSERT( in.n == 4 ); - image_t out[6]; - panorama2cubemap(out, in, in.h); - image_t swap[6] = { out[0],out[3],out[1],out[4],out[2],out[5] }; - cubemap_t c = cubemap6(swap, flags); - int i; - #pragma omp parallel for - for( i = 0; i < 6; ++i) image_destroy(&out[i]); - return c; -} - -void cubemap_destroy(cubemap_t *c) { - glDeleteTextures(1, &c->id); - c->id = 0; // do not destroy SH coefficients still. they might be useful in the future. -} - -static cubemap_t *last_cubemap; - -cubemap_t* cubemap_get_active() { - return last_cubemap; -} - -// ----------------------------------------------------------------------------- -// skyboxes - -skybox_t skybox(const char *asset, int flags) { - skybox_t sky = {0}; - - // sky mesh - vec3 vertices[] = {{+1,-1,+1},{+1,+1,+1},{+1,+1,-1},{-1,+1,-1},{+1,-1,-1},{-1,-1,-1},{-1,-1,+1},{-1,+1,+1}}; - unsigned indices[] = { 0, 1, 2, 3, 4, 5, 6, 3, 7, 1, 6, 0, 4, 2 }; - mesh_update(&sky.geometry, "p3", 0,countof(vertices),vertices, countof(indices),indices, MESH_TRIANGLE_STRIP); - - // sky program - sky.flags = flags && flags != SKYBOX_PBR ? flags : !!asset ? SKYBOX_CUBEMAP : SKYBOX_RAYLEIGH; // either cubemap or rayleigh - sky.program = shader(vfs_read("shaders/vs_3_3_skybox.glsl"), - sky.flags ? vfs_read("fs_3_4_skybox.glsl") : vfs_read("shaders/fs_3_4_skybox_rayleigh.glsl"), - "att_position", "fragcolor", NULL); - - // sky cubemap & SH - if( asset ) { - int is_panorama = vfs_size( asset ); - if( is_panorama ) { // is file - stbi_hdr_to_ldr_gamma(1.0f); - image_t panorama = image( asset, IMAGE_RGBA ); - sky.cubemap = cubemap( panorama, 0 ); // RGBA required - image_destroy(&panorama); - } else { // is folder - image_t images[6] = {0}; - images[0] = image( va("%s/posx", asset), IMAGE_RGB ); // cubepx - images[1] = image( va("%s/negx", asset), IMAGE_RGB ); // cubenx - images[2] = image( va("%s/posy", asset), IMAGE_RGB ); // cubepy - images[3] = image( va("%s/negy", asset), IMAGE_RGB ); // cubeny - images[4] = image( va("%s/posz", asset), IMAGE_RGB ); // cubepz - images[5] = image( va("%s/negz", asset), IMAGE_RGB ); // cubenz - sky.cubemap = cubemap6( images, 0 ); - for( int i = 0; i < countof(images); ++i ) image_destroy(&images[i]); - } - } else { - // set up mie defaults // @fixme: use shader params instead - shader_bind(sky.program); - shader_vec3("uSunPos", vec3( 0, 0.1, -1 )); - shader_vec3("uRayOrigin", vec3(0.0, 6372000.0, 0.0)); - shader_float("uSunIntensity", 22.0); - shader_float("uPlanetRadius", 6371000.0); - shader_float("uAtmosphereRadius", 6471000.0); - shader_vec3("uRayleighScattering", vec3(5.5e-6, 13.0e-6, 22.4e-6)); - shader_float("uMieScattering", 21e-6); - shader_float("uRayleighScaleHeight", 8000.0); - shader_float("uMieScaleHeight", 1200.0); - shader_float("uMiePreferredDirection", 0.758); - skybox_mie_calc_sh(&sky, 1.2); - } - - return sky; -} - -static inline -texture_t load_env_tex( const char *pathfile, unsigned flags ) { - int flags_hdr = strendi(pathfile, ".hdr") ? TEXTURE_FLOAT | TEXTURE_RGBA : 0; - texture_t t = texture(pathfile, flags | TEXTURE_LINEAR | TEXTURE_MIPMAPS | TEXTURE_REPEAT | flags_hdr); - glBindTexture( GL_TEXTURE_2D, t.id ); - glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT ); - glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE ); - return t; -} - -skybox_t skybox_pbr(const char *sky_map, const char *refl_map, const char *env_map) { - skybox_t sky = {0}; - - // sky mesh - vec3 vertices[] = {{+1,-1,+1},{+1,+1,+1},{+1,+1,-1},{-1,+1,-1},{+1,-1,-1},{-1,-1,-1},{-1,-1,+1},{-1,+1,+1}}; - unsigned indices[] = { 0, 1, 2, 3, 4, 5, 6, 3, 7, 1, 6, 0, 4, 2 }; - mesh_update(&sky.geometry, "p3", 0,countof(vertices),vertices, countof(indices),indices, MESH_TRIANGLE_STRIP); - - // sky program - sky.flags = SKYBOX_PBR; - sky.program = shader(vfs_read("shaders/vs_3_3_skybox.glsl"), - vfs_read("fs_3_4_skybox.glsl"), - "att_position", "fragcolor", NULL); - - // sky cubemap & SH - if( sky_map ) { - int is_panorama = vfs_size( sky_map ); - if( is_panorama ) { // is file - stbi_hdr_to_ldr_gamma(1.0f); - image_t panorama = image( sky_map, IMAGE_RGBA ); - sky.cubemap = cubemap( panorama, 0 ); // RGBA required - image_destroy(&panorama); - } else { // is folder - image_t images[6] = {0}; - images[0] = image( va("%s/posx", sky_map), IMAGE_RGB ); // cubepx - images[1] = image( va("%s/negx", sky_map), IMAGE_RGB ); // cubenx - images[2] = image( va("%s/posy", sky_map), IMAGE_RGB ); // cubepy - images[3] = image( va("%s/negy", sky_map), IMAGE_RGB ); // cubeny - images[4] = image( va("%s/posz", sky_map), IMAGE_RGB ); // cubepz - images[5] = image( va("%s/negz", sky_map), IMAGE_RGB ); // cubenz - sky.cubemap = cubemap6( images, 0 ); - for( int i = 0; i < countof(images); ++i ) image_destroy(&images[i]); - } - } - if( refl_map ) { - sky.refl = load_env_tex(refl_map, 0); - } - if( env_map ) { - sky.env = load_env_tex(env_map, 0); - } - - return sky; -} - -void skybox_mie_calc_sh(skybox_t *sky, float sky_intensity) { - unsigned WIDTH = 1024, HEIGHT = 1024; - int last_fb; - int vp[4]; - glGetIntegerv(GL_DRAW_FRAMEBUFFER_BINDING, &last_fb); - glGetIntegerv(GL_VIEWPORT, vp); - - if (!sky_intensity) { - sky_intensity = 1.0f; - } - - if (!sky->pixels) - sky->pixels = MALLOC(WIDTH*HEIGHT*12); - - if (!sky->framebuffers[0]) { - for(int i = 0; i < 6; ++i) { - glGenFramebuffers(1, &sky->framebuffers[i]); - glBindFramebuffer(GL_FRAMEBUFFER, sky->framebuffers[i]); - - glGenTextures(1, &sky->textures[i]); - glActiveTexture(GL_TEXTURE0); - glBindTexture(GL_TEXTURE_2D, sky->textures[i]); - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, WIDTH, HEIGHT, 0, GL_RGB, GL_FLOAT, NULL); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glBindTexture(GL_TEXTURE_2D, 0); - - glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, sky->textures[i], 0); - } - } - - static vec3 directions[6] = {{ 1, 0, 0},{-1, 0, 0},{ 0, 1, 0},{ 0,-1, 0},{ 0, 0, 1},{ 0, 0,-1}}; - - int samples = 0; - for(int i = 0; i < 6; ++i) { - glBindFramebuffer(GL_FRAMEBUFFER, sky->framebuffers[i]); - glViewport(0, 0, WIDTH, HEIGHT); - glUseProgram(sky->program); - - mat44 proj; perspective44(proj, 90.0f, WIDTH / (float)HEIGHT, 0.1f, 500.f); - mat44 view; lookat44(view, vec3(0,0,0), directions[i], vec3(0,-1,0)); - - skybox_render(sky, proj, view); - - glReadPixels(0, 0, WIDTH, HEIGHT, GL_RGB, GL_FLOAT, sky->pixels); - - // calculate SH coefficients (@ands) - // copied from cubemap6 method - const vec3 skyDir[] = {{ 1, 0, 0},{-1, 0, 0},{ 0, 1, 0},{ 0,-1, 0},{ 0, 0, 1},{ 0, 0,-1}}; - const vec3 skyX[] = {{ 0, 0,-1},{ 0, 0, 1},{ 1, 0, 0},{ 1, 0, 0},{ 1, 0, 0},{-1, 0, 0}}; - const vec3 skyY[] = {{ 0, 1, 0},{ 0, 1, 0},{ 0, 0,-1},{ 0, 0, 1},{ 0, 1, 0},{ 0, 1, 0}}; - int step = 16; - for (int y = 0; y < HEIGHT; y += step) { - float *p = (float*)(sky->pixels + y * WIDTH * 3); - for (int x = 0; x < WIDTH; x += step) { - vec3 n = add3( - add3( - scale3(skyX[i], 2.0f * (x / (WIDTH - 1.0f)) - 1.0f), - scale3(skyY[i], -2.0f * (y / (HEIGHT - 1.0f)) + 1.0f)), - skyDir[i]); // texelDirection; - float l = len3(n); - vec3 light = scale3(vec3(p[0], p[1], p[2]), (1 / (l * l * l)) * sky_intensity); // texelSolidAngle * texel_radiance; - n = norm3(n); - sky->cubemap.sh[0] = add3(sky->cubemap.sh[0], scale3(light, 0.282095f)); - sky->cubemap.sh[1] = add3(sky->cubemap.sh[1], scale3(light, -0.488603f * n.y * 2.0 / 3.0)); - sky->cubemap.sh[2] = add3(sky->cubemap.sh[2], scale3(light, 0.488603f * n.z * 2.0 / 3.0)); - sky->cubemap.sh[3] = add3(sky->cubemap.sh[3], scale3(light, -0.488603f * n.x * 2.0 / 3.0)); - sky->cubemap.sh[4] = add3(sky->cubemap.sh[4], scale3(light, 1.092548f * n.x * n.y / 4.0)); - sky->cubemap.sh[5] = add3(sky->cubemap.sh[5], scale3(light, -1.092548f * n.y * n.z / 4.0)); - sky->cubemap.sh[6] = add3(sky->cubemap.sh[6], scale3(light, 0.315392f * (3.0f * n.z * n.z - 1.0f) / 4.0)); - sky->cubemap.sh[7] = add3(sky->cubemap.sh[7], scale3(light, -1.092548f * n.x * n.z / 4.0)); - sky->cubemap.sh[8] = add3(sky->cubemap.sh[8], scale3(light, 0.546274f * (n.x * n.x - n.y * n.y) / 4.0)); - p += 3 * step; - samples++; - } - } - } - - for (int s = 0; s < 9; s++) { - sky->cubemap.sh[s] = scale3(sky->cubemap.sh[s], 32.f / samples); - } - - glBindFramebuffer(GL_FRAMEBUFFER, last_fb); - glViewport(vp[0], vp[1], vp[2], vp[3]); -} - -void skybox_sh_reset(skybox_t *sky) { - for (int s = 0; s < 9; s++) { - sky->cubemap.sh[s] = vec3(0,0,0); - } -} - -void skybox_sh_add_light(skybox_t *sky, vec3 light, vec3 dir, float strength) { - // Normalize the direction - vec3 norm_dir = norm3(dir); - - // Scale the light color and intensity - vec3 scaled_light = scale3(light, strength); - - // Add light to the SH coefficients - sky->cubemap.sh[0] = add3(sky->cubemap.sh[0], scale3(scaled_light, 0.282095f)); - sky->cubemap.sh[1] = add3(sky->cubemap.sh[1], scale3(scaled_light, -0.488603f * norm_dir.y)); - sky->cubemap.sh[2] = add3(sky->cubemap.sh[2], scale3(scaled_light, 0.488603f * norm_dir.z)); - sky->cubemap.sh[3] = add3(sky->cubemap.sh[3], scale3(scaled_light, -0.488603f * norm_dir.x)); -} - -API vec4 window_getcolor_(); // internal use, not public - -static renderstate_t skybox_rs; - -int skybox_push_state(skybox_t *sky, mat44 proj, mat44 view) { - last_cubemap = &sky->cubemap; - - do_once { - skybox_rs = renderstate(); - skybox_rs.depth_test_enabled = 1; - skybox_rs.cull_face_enabled = 0; - skybox_rs.front_face = GL_CCW; - } - - // we have to reset clear color here, because of wrong alpha compositing issues on native transparent windows otherwise - vec4 bgcolor = window_getcolor_(); - skybox_rs.clear_color[0] = bgcolor.r; - skybox_rs.clear_color[1] = bgcolor.g; - skybox_rs.clear_color[2] = bgcolor.b; - skybox_rs.clear_color[3] = 1; // @transparent - - mat44 mvp; multiply44x2(mvp, proj, view); - - //glDepthMask(GL_FALSE); - shader_bind(sky->program); - shader_mat44("u_mvp", mvp); - if( sky->flags ) { - shader_cubemap("u_cubemap", sky->cubemap.id); - } - - renderstate_apply(&skybox_rs); - return 0; // @fixme: return sortable hash here? -} -int skybox_pop_state() { - //vec4 bgcolor = window_getcolor_(); glClearColor(bgcolor.r, bgcolor.g, bgcolor.b, window_has_transparent() ? 0 : bgcolor.a); // @transparent - //glDepthMask(GL_TRUE); - //glClear(GL_DEPTH_BUFFER_BIT); - return 0; -} -int skybox_render(skybox_t *sky, mat44 proj, mat44 view) { - skybox_push_state(sky, proj, view); - mesh_render(&sky->geometry); - skybox_pop_state(); - return 0; -} -void skybox_destroy(skybox_t *sky) { - glDeleteProgram(sky->program); - cubemap_destroy(&sky->cubemap); - mesh_destroy(&sky->geometry); - - if (sky->pixels) { - FREE(sky->pixels); - glDeleteFramebuffers(6, sky->framebuffers); - glDeleteTextures(6, sky->textures); - } -} - -// ----------------------------------------------------------------------------- -// meshes - -mesh_t mesh() { - mesh_t z = {0}; - return z; -} - -aabb mesh_bounds(mesh_t *m) { - aabb b = {{1e9,1e9,1e9},{-1e9,-1e9,-1e9}}; - for( int i = 0; i < array_count(m->in_vertex3); ++i ) { - if( m->in_vertex3[i].x < b.min.x ) b.min.x = m->in_vertex3[i].x; - if( m->in_vertex3[i].x > b.max.x ) b.max.x = m->in_vertex3[i].x; - - if( m->in_vertex3[i].y < b.min.y ) b.min.y = m->in_vertex3[i].y; - if( m->in_vertex3[i].y > b.max.y ) b.max.y = m->in_vertex3[i].y; - - if( m->in_vertex3[i].z < b.min.z ) b.min.z = m->in_vertex3[i].z; - if( m->in_vertex3[i].z > b.max.z ) b.max.z = m->in_vertex3[i].z; - } - return b; -} - -void mesh_update(mesh_t *m, const char *format, int vertex_stride,int vertex_count,const void *vertex_data, int index_count,const void *index_data, int flags) { - m->flags = flags; - - // setup - unsigned sizeof_index = sizeof(GLuint); - unsigned sizeof_vertex = 0; - m->index_count = index_count; - m->vertex_count = vertex_count; - - // iterate vertex attributes { position, normal + uv + tangent + bitangent + ... } - struct vertex_descriptor { - int vertex_type, num_attribute, num_components, alt_normalized; - int stride, offset; - } descriptor[16] = {0}, *dc = &descriptor[0]; - - do switch( *format ) { - break; case '*': dc->alt_normalized = 1; - break; case '0': dc->num_components = 0; - break; case '1': dc->num_components = 1; - break; case '2': dc->num_components = 2; - break; case '3': dc->num_components = 3; - break; case '4': dc->num_components = 4; - break; case 'F': dc->vertex_type = GL_FLOAT; - break; case 'U': case 'I': dc->vertex_type = GL_UNSIGNED_INT; - break; case 'B': if(format[-1] >= '0' && format[-1] <= '9') dc->vertex_type = GL_UNSIGNED_BYTE; //else bitangent. - break; case ' ': while (format[1] == ' ') format++; case '\0': - if (!dc->vertex_type) dc->vertex_type = GL_FLOAT; - dc->offset = sizeof_vertex; - sizeof_vertex += (dc->stride = dc->num_components * (dc->vertex_type == GL_UNSIGNED_BYTE ? 1 : 4)); - ++dc; - break; default: if( !strchr("pntbcwai", *format) ) PANIC("unsupported vertex type '%c'", *format); - } while (*format++); - - if(vertex_stride > 0) sizeof_vertex = vertex_stride; - - // layout - if(!m->vao) glGenVertexArrays(1, &m->vao); - glBindVertexArray(m->vao); - - // index data - if( index_data && index_count ) { - m->index_count = index_count; - - if(!m->ibo) glGenBuffers(1, &m->ibo); - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m->ibo); - glBufferData(GL_ELEMENT_ARRAY_BUFFER, m->index_count * sizeof_index, index_data, flags & MESH_STREAM ? GL_STREAM_DRAW : GL_STATIC_DRAW); - } - - // vertex data - if( vertex_data && vertex_count ) { - m->vertex_count = vertex_count; - - if(!m->vbo) glGenBuffers(1, &m->vbo); - glBindBuffer(GL_ARRAY_BUFFER, m->vbo); - glBufferData(GL_ARRAY_BUFFER, m->vertex_count * sizeof_vertex, vertex_data, flags & MESH_STREAM ? GL_STREAM_DRAW : GL_STATIC_DRAW); - } - - for( int i = 0; i < 8; ++i ) { -// glDisableVertexAttribArray(i); - } - - // vertex setup: iterate descriptors - for( int i = 0; i < countof(descriptor); ++i ) { - if( descriptor[i].num_components ) { - glDisableVertexAttribArray(i); - glVertexAttribPointer(i, - descriptor[i].num_components, descriptor[i].vertex_type, (descriptor[i].vertex_type == GL_UNSIGNED_BYTE ? GL_TRUE : GL_FALSE) ^ (descriptor[i].alt_normalized ? GL_TRUE : GL_FALSE), - sizeof_vertex, (GLchar*)NULL + descriptor[i].offset); - glEnableVertexAttribArray(i); - } else { - glDisableVertexAttribArray(i); - } - } - - glBindVertexArray(0); -} - -void mesh_render(mesh_t *sm) { - if( sm->vao ) { - glBindVertexArray(sm->vao); - if( sm->ibo ) { // with indices - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, sm->ibo); // <-- why intel? - glDrawElements(sm->flags & MESH_TRIANGLE_STRIP ? GL_TRIANGLE_STRIP : GL_TRIANGLES, sm->index_count, GL_UNSIGNED_INT, (char*)0); - profile_incstat("Render.num_drawcalls", +1); - profile_incstat("Render.num_triangles", sm->index_count/3); - } else { // with vertices only - glDrawArrays(sm->flags & MESH_TRIANGLE_STRIP ? GL_TRIANGLE_STRIP : GL_TRIANGLES, 0, sm->vertex_count /* / 3 */); - profile_incstat("Render.num_drawcalls", +1); - profile_incstat("Render.num_triangles", sm->vertex_count/3); - } - } -} - -void mesh_render_prim(mesh_t *sm, unsigned prim) { - if( sm->vao ) { - glBindVertexArray(sm->vao); - if( sm->ibo ) { // with indices - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, sm->ibo); // <-- why intel? - glDrawElements(prim, sm->index_count, GL_UNSIGNED_INT, (char*)0); - profile_incstat("Render.num_drawcalls", +1); - profile_incstat("Render.num_triangles", sm->index_count/3); - } else { // with vertices only - glDrawArrays(prim, 0, sm->vertex_count /* / 3 */); - profile_incstat("Render.num_drawcalls", +1); - profile_incstat("Render.num_triangles", sm->vertex_count/3); - } - } -} - -void mesh_destroy(mesh_t *m) { - // @todo - glDeleteBuffers(1, &m->vbo); - glDeleteBuffers(1, &m->ibo); - glDeleteVertexArrays(1, &m->vao); -} - -// ----------------------------------------------------------------------------- -// screenshots - -void* screenshot( int n ) { // 3 RGB, 4 RGBA, -3 BGR, -4 BGRA - // sync, 10 ms -- pixel perfect - - int w = window_width(), h = window_height(); - int mode = n == 3 ? GL_RGB : n == -3 ? GL_BGR : n == 4 ? GL_RGBA : GL_BGRA; - static __thread uint8_t *pixels = 0; - pixels = (uint8_t*)REALLOC(pixels, w * h * 4 ); // @leak per thread - - glBindBuffer(GL_PIXEL_PACK_BUFFER, 0); // disable any pbo, in case somebody did for us - glPixelStorei(GL_PACK_ALIGNMENT, 1); - glReadBuffer(GL_FRONT); - glReadPixels(0, 0, w, h, mode, GL_UNSIGNED_BYTE, pixels); - glPixelStorei(GL_UNPACK_ALIGNMENT, 1); - return pixels; -} - -void* screenshot_async( int n ) { // 3 RGB, 4 RGBA, -3 BGR, -4 BGRA -#if is(ems) - return screenshot(n); // no glMapBuffer() on emscripten -#else - // async, 0 ms -- @fixme: MSAA can cause some artifacts with PBOs: either use glDisable(GL_MULTISAMPLE) when recording or do not create window with WINDOW_MSAAx options at all. - - int w = window_width(), h = window_height(); - int mode = n == 3 ? GL_RGB : n == -3 ? GL_BGR : n == 4 ? GL_RGBA : GL_BGRA; - static __thread uint8_t *pixels = 0; - pixels = (uint8_t*)REALLOC(pixels, w * h * 4 ); // @leak per thread - - enum { NUM_PBOS = 16 }; - static __thread GLuint pbo[NUM_PBOS] = {0}, lastw = 0, lasth = 0, bound = 0; - - if( lastw != w || lasth != h ) { - lastw = w, lasth = h; - bound = 0; - - for( int i = 0; i < NUM_PBOS; ++i ) { - if(!pbo[i]) glGenBuffers(1, &pbo[i]); - glBindBuffer(GL_PIXEL_PACK_BUFFER, pbo[i]); - glBufferData(GL_PIXEL_PACK_BUFFER, w * h * 4, NULL, GL_STREAM_READ); // GL_STATIC_READ); - //glReadPixels(0, 0, w, h, mode, GL_UNSIGNED_BYTE, (GLvoid*)((GLchar*)NULL+0)); - } - } - - // read from oldest bound pbo - glBindBuffer(GL_PIXEL_PACK_BUFFER, pbo[bound]); - void *ptr = glMapBuffer(GL_PIXEL_PACK_BUFFER, GL_READ_ONLY); - memcpy(pixels, ptr, w * h * abs(n)); - glUnmapBuffer(GL_PIXEL_PACK_BUFFER); - - // trigger next read - glReadBuffer(GL_FRONT); - glReadPixels(0, 0, w, h, mode, GL_UNSIGNED_BYTE, (GLvoid*)((GLchar*)NULL+0)); - glBindBuffer(GL_PIXEL_PACK_BUFFER, 0); - - bound = (bound + 1) % NUM_PBOS; - return pixels; -#endif -} - -// ----------------------------------------------------------------------------- -// viewports - -void viewport_color(unsigned color) { - unsigned r = (color >> 0) & 255; - unsigned g = (color >> 8) & 255; - unsigned b = (color >> 16) & 255; - unsigned a = (color >> 24) & 255; - glClearColor(r, g, b, a); -} - -void viewport_clear(bool color, bool depth) { - glClearDepthf(1); - glClearStencil(0); - glClear((color ? GL_COLOR_BUFFER_BIT : 0) | (depth ? GL_DEPTH_BUFFER_BIT : 0)); -} - -void viewport_clip(vec2 from, vec2 to) { - float x = from.x, y = from.y, w = to.x-from.x, h = to.y-from.y; - - y = window_height()-y-h; - glViewport(x, y, w, h); - glScissor(x, y, w, h); -} - -// ----------------------------------------------------------------------------- -// fbos - -unsigned fbo(unsigned color_texture_id, unsigned depth_texture_id, int flags) { - int last_fb; - glGetIntegerv(GL_DRAW_FRAMEBUFFER_BINDING, &last_fb); - - GLuint fbo; - glGenFramebuffers(1, &fbo); - glBindFramebuffer(GL_FRAMEBUFFER, fbo); - - if( color_texture_id ) glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, color_texture_id, 0); - if( depth_texture_id ) glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, depth_texture_id, 0); -#if 0 // this is working; it's just not enabled for now - else { - // create a non-sampleable renderbuffer object for depth and stencil attachments - unsigned int rbo; - glGenRenderbuffers(1, &rbo); - glBindRenderbuffer(GL_RENDERBUFFER, rbo); - glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH24_STENCIL8, color.width, color.height); // use a single renderbuffer object for both a depth AND stencil buffer. - glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_RENDERBUFFER, rbo); // now actually attach it - } -#endif - -#if is(ems) - GLenum nones[] = { GL_NONE }; - if(flags) glDrawBuffers(1, nones); - if(flags) glReadBuffer(GL_NONE); -#else - if(flags) glDrawBuffer(GL_NONE); - if(flags) glReadBuffer(GL_NONE); -#endif - -#if 1 - GLenum result = glCheckFramebufferStatus(GL_FRAMEBUFFER); - if( GL_FRAMEBUFFER_COMPLETE != result ) { - PANIC("ERROR: Framebuffer not complete."); - } -#else - switch (glCheckFramebufferStatus(GL_FRAMEBUFFER)) { - case GL_FRAMEBUFFER_COMPLETE: break; - case GL_FRAMEBUFFER_UNDEFINED: PANIC("GL_FRAMEBUFFER_UNDEFINED"); - case GL_FRAMEBUFFER_UNSUPPORTED: PANIC("GL_FRAMEBUFFER_UNSUPPORTED"); - case GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT: PANIC("GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT"); - case GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER: PANIC("GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER"); - case GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER: PANIC("GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER"); - case GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE: PANIC("GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE"); -// case GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT: PANIC("GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT"); - case GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS: PANIC("GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS"); -// case GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT: PANIC("GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT"); - case GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT: PANIC("GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT"); - default: PANIC("ERROR: Framebuffer not complete. glCheckFramebufferStatus returned %x", glCheckFramebufferStatus(GL_FRAMEBUFFER)); - } -#endif - - glBindFramebuffer (GL_FRAMEBUFFER, last_fb); - return fbo; -} -static __thread array(handle) fbos; -void fbo_bind(unsigned id) { - glBindFramebuffer(GL_FRAMEBUFFER, id); - array_push(fbos, id); -} -void fbo_unbind() { - handle id = 0; - if (array_count(fbos)) { - array_pop(fbos); - id = *array_back(fbos); - } - glBindFramebuffer(GL_FRAMEBUFFER, id); -} -void fbo_destroy(unsigned id) { - // glDeleteRenderbuffers(1, &renderbuffer); - glDeleteFramebuffers(1, &id); -} - -// ----------------------------------------------------------------------------- -// post-fxs swapchain - -typedef struct passfx passfx; -typedef struct postfx postfx; - -void postfx_create(postfx *fx, int flags); -void postfx_destroy(postfx *fx); - -bool postfx_load(postfx *fx, const char *name, const char *fragment); -bool postfx_begin(postfx *fx, int width, int height); -bool postfx_end(postfx *fx); - -bool postfx_enabled(postfx *fx, int pass_number); -bool postfx_enable(postfx *fx, int pass_number, bool enabled); -// bool postfx_toggle(postfx *fx, int pass_number); -void postfx_clear(postfx *fx); -void postfx_order(postfx *fx, int pass, unsigned priority); - -char* postfx_name(postfx *fx, int slot); - -int ui_postfx(postfx *fx, int slot); - -struct passfx { - mesh_t m; - char *name; - unsigned program; - int uniforms[16]; - unsigned priority; - bool enabled; -}; - -struct postfx { - // renderbuffers: color & depth textures - unsigned fb[2]; - texture_t diffuse[2], depth[2]; - // shader passes - array(passfx) pass; - // global enable flag - bool enabled; -}; - -enum { - u_color, - u_depth, - u_time, - u_frame, - u_width, u_height, - u_mousex, u_mousey, - u_channelres0x, u_channelres0y, - u_channelres1x, u_channelres1y, -}; - -void postfx_create(postfx *fx, int flags) { - postfx z = {0}; - *fx = z; - fx->enabled = 1; - (void)flags; -} - -void postfx_destroy( postfx *fx ) { - for( int i = 0; i < array_count(fx->pass); ++i ) { - FREE(fx->pass[i].name); - } - array_free(fx->pass); - texture_destroy(&fx->diffuse[0]); - texture_destroy(&fx->diffuse[1]); - texture_destroy(&fx->depth[0]); - texture_destroy(&fx->depth[1]); - fbo_destroy(fx->fb[0]); - fbo_destroy(fx->fb[1]); - postfx z = {0}; - *fx = z; -} - -char* postfx_name(postfx *fx, int slot) { - return slot < 0 || slot >= array_count(fx->pass) ? "" : fx->pass[ slot ].name; -} -int postfx_find(postfx *fx, const char *name) { - name = file_name(name); - for( int i = 0; i < array_count(fx->pass); ++i) if(!strcmpi(fx->pass[i].name, name)) return i; - return -1; -} - -static -int postfx_sort_fn(const void *a, const void *b) { - unsigned p1 = ((passfx*)a)->priority; - unsigned p2 = ((passfx*)b)->priority; - return (p1 > p2) - (p1 < p2); -} -void postfx_order(postfx *fx, int pass, unsigned priority) { - if (pass < 0 || pass >= array_count(fx->pass)) return; - if (priority >= array_count(fx->pass)) return; - fx->pass[priority].priority = pass; - fx->pass[pass].priority = priority; - array_sort(fx->pass, postfx_sort_fn); -} - -int postfx_load_from_mem( postfx *fx, const char *name, const char *fs ) { - PRINTF("%s\n", name); - if(!fs || !fs[0]) return -1; // PANIC("!invalid fragment shader"); - - passfx pass={0}; - array_push(fx->pass, pass); - passfx *p = array_back(fx->pass); - p->name = STRDUP(name); - p->priority = array_count(fx->pass)-1; - - // preload stuff - static const char *vs = 0; - static const char *preamble = 0; - static const char *shadertoy = 0; - static char *fs2 = 0; - do_once { - vs = STRDUP(vfs_read("shaders/vs_0_2_fullscreen_quad_B.glsl")); - preamble = STRDUP(vfs_read("shaders/fs_2_4_preamble.glsl")); - shadertoy = STRDUP(vfs_read("shaders/fs_main_shadertoy.glsl")); - fs2 = (char*)CALLOC(1, 128*1024); - } - // patch fragment - snprintf(fs2, 128*1024, "%s%s%s", preamble, strstr(fs, "mainImage") ? shadertoy : "", fs ); - - p->program = shader(vs, fs2, "vtexcoord", "fragColor" , NULL); - - glUseProgram(p->program); // needed? - - for( int i = 0; i < countof(p->uniforms); ++i ) p->uniforms[i] = -1; - - if( p->uniforms[u_time] == -1 ) p->uniforms[u_time] = glGetUniformLocation(p->program, "iTime"); - - if( p->uniforms[u_frame] == -1 ) p->uniforms[u_frame] = glGetUniformLocation(p->program, "iFrame"); - - if( p->uniforms[u_width] == -1 ) p->uniforms[u_width] = glGetUniformLocation(p->program, "iWidth"); - if( p->uniforms[u_height] == -1 ) p->uniforms[u_height] = glGetUniformLocation(p->program, "iHeight"); - - if( p->uniforms[u_mousex] == -1 ) p->uniforms[u_mousex] = glGetUniformLocation(p->program, "iMousex"); - if( p->uniforms[u_mousey] == -1 ) p->uniforms[u_mousey] = glGetUniformLocation(p->program, "iMousey"); - - if( p->uniforms[u_color] == -1 ) p->uniforms[u_color] = glGetUniformLocation(p->program, "tex"); - if( p->uniforms[u_color] == -1 ) p->uniforms[u_color] = glGetUniformLocation(p->program, "tex0"); - if( p->uniforms[u_color] == -1 ) p->uniforms[u_color] = glGetUniformLocation(p->program, "tColor"); - if( p->uniforms[u_color] == -1 ) p->uniforms[u_color] = glGetUniformLocation(p->program, "tDiffuse"); - if( p->uniforms[u_color] == -1 ) p->uniforms[u_color] = glGetUniformLocation(p->program, "iChannel0"); - - if( p->uniforms[u_depth] == -1 ) p->uniforms[u_depth] = glGetUniformLocation(p->program, "tex1"); - if( p->uniforms[u_depth] == -1 ) p->uniforms[u_depth] = glGetUniformLocation(p->program, "tDepth"); - if( p->uniforms[u_depth] == -1 ) p->uniforms[u_depth] = glGetUniformLocation(p->program, "iChannel1"); - - if( p->uniforms[u_channelres0x] == -1 ) p->uniforms[u_channelres0x] = glGetUniformLocation(p->program, "iChannelRes0x"); - if( p->uniforms[u_channelres0y] == -1 ) p->uniforms[u_channelres0y] = glGetUniformLocation(p->program, "iChannelRes0y"); - - if( p->uniforms[u_channelres1x] == -1 ) p->uniforms[u_channelres1x] = glGetUniformLocation(p->program, "iChannelRes1x"); - if( p->uniforms[u_channelres1y] == -1 ) p->uniforms[u_channelres1y] = glGetUniformLocation(p->program, "iChannelRes1y"); - - // set quad - glGenVertexArrays(1, &p->m.vao); - return array_count(fx->pass)-1; -} - -bool postfx_enable(postfx *fx, int pass, bool enabled) { - if( pass < 0 || pass >= array_count(fx->pass) ) return false; - fx->pass[pass].enabled = enabled; - fx->enabled = !!array_count(fx->pass); - return fx->enabled; -} - -bool postfx_enabled(postfx *fx, int pass) { - if( pass < 0 || pass >= array_count(fx->pass) ) return false; - return fx->pass[pass].enabled; -} - -bool postfx_toggle(postfx *fx, int pass) { - if( pass < 0 || pass >= array_count(fx->pass) ) return false; - return postfx_enable(fx, pass, 1 ^ postfx_enabled(fx, pass)); -} - -void postfx_clear(postfx *fx) { - for (int i = 0; i < array_count(fx->pass); i++) { - fx->pass[i].enabled = 0; - } - fx->enabled = 0; -} -unsigned postfx_program(postfx *fx, int pass) { - if( pass < 0 || pass >= array_count(fx->pass) ) return 0; - return fx->pass[pass].program; -} - -int ui_postfx(postfx *fx, int pass) { - if (pass < 0 || pass >= array_count(fx->pass)) return 0; - int on = ui_enabled(); - ( postfx_enabled(fx,pass) ? ui_enable : ui_disable )(); - int rc = ui_shader(fx->pass[pass].program); - ui_separator(); - int btn = ui_buttons(2, "Move up", "Move down"); - if (btn == 1) { - postfx_order(fx, pass, fx->pass[pass].priority-1); - } - else if (btn == 2) { - postfx_order(fx, pass, fx->pass[pass].priority+1); - } - ( on ? ui_enable : ui_disable )(); - return rc; -} - -static -int postfx_active_passes(postfx *fx) { - int num_passes = 0; - for (int i = 0; i < array_count(fx->pass); i++) - if (fx->pass[i].enabled) - ++num_passes; - return num_passes; -} - -bool postfx_begin(postfx *fx, int width, int height) { - // reset clear color: needed in case transparent window is being used (alpha != 0) - glClearColor(0,0,0,0); // @transparent - - width += !width; - height += !height; - - // resize if needed - if( fx->diffuse[0].w != width || fx->diffuse[0].h != height ) { - texture_destroy(&fx->diffuse[0]); - texture_destroy(&fx->diffuse[1]); - texture_destroy(&fx->depth[0]); - texture_destroy(&fx->depth[1]); - fbo_destroy(fx->fb[0]); - fbo_destroy(fx->fb[1]); - - // create texture, set texture parameters and content - fx->diffuse[0] = texture_create(width, height, 4, NULL, TEXTURE_RGBA|TEXTURE_FLOAT); - fx->depth[0] = texture_create(width, height, 1, NULL, TEXTURE_DEPTH|TEXTURE_FLOAT); - fx->fb[0] = fbo(fx->diffuse[0].id, fx->depth[0].id, 0); - - // create texture, set texture parameters and content - fx->diffuse[1] = texture_create(width, height, 4, NULL, TEXTURE_RGBA|TEXTURE_FLOAT); - fx->depth[1] = texture_create(width, height, 1, NULL, TEXTURE_DEPTH|TEXTURE_FLOAT); - fx->fb[1] = fbo(fx->diffuse[1].id, fx->depth[1].id, 0); - } - - uint64_t num_active_passes = postfx_active_passes(fx); - bool active = fx->enabled && num_active_passes; - if( !active ) { - return false; - } - - fbo_bind(fx->fb[1]); - viewport_clear(true, true); - viewport_clip(vec2(0,0), vec2(width, height)); - fbo_unbind(); - - fbo_bind(fx->fb[0]); - viewport_clear(true, true); - viewport_clip(vec2(0,0), vec2(width, height)); - // we keep fbo_0 bound so that user can render into it. - - return true; -} - -static renderstate_t postfx_rs; - -bool postfx_end(postfx *fx) { - uint64_t num_active_passes = postfx_active_passes(fx); - bool active = fx->enabled && num_active_passes; - if( !active ) { - return false; - } - - do_once { - postfx_rs = renderstate(); - // disable depth test in 2d rendering - postfx_rs.depth_test_enabled = 0; - postfx_rs.cull_face_enabled = 0; - postfx_rs.blend_enabled = 1; - postfx_rs.blend_src = GL_ONE; - postfx_rs.blend_dst = GL_ONE_MINUS_SRC_ALPHA; - } - - // unbind postfx fbo - fbo_unbind(); - - renderstate_apply(&postfx_rs); - - int frame = 0; - float t = time_ms() / 1000.f; - float w = fx->diffuse[0].w; - float h = fx->diffuse[0].h; - float mx = input(MOUSE_X); - float my = input(MOUSE_Y); - - for(int i = 0, e = array_count(fx->pass); i < e; ++i) { - passfx *pass = &fx->pass[i]; - if( pass->enabled ) { - if( !pass->program ) { --num_active_passes; continue; } - glUseProgram(pass->program); - - // bind texture to texture unit 0 - // shader_texture_unit(fx->diffuse[frame], 0); - glActiveTexture(GL_TEXTURE0 + 0); glBindTexture(GL_TEXTURE_2D, fx->diffuse[frame].id); - glUniform1i(pass->uniforms[u_color], 0); - - glUniform1f(pass->uniforms[u_channelres0x], fx->diffuse[frame].w); - glUniform1f(pass->uniforms[u_channelres0y], fx->diffuse[frame].h); - - // bind depth to texture unit 1 - // shader_texture_unit(fx->depth[frame], 1); - glActiveTexture(GL_TEXTURE0 + 1); glBindTexture(GL_TEXTURE_2D, fx->depth[frame].id); - glUniform1i(pass->uniforms[u_depth], 1); - - // bind uniforms - static unsigned f = 0; ++f; - glUniform1f(pass->uniforms[u_time], t); - glUniform1f(pass->uniforms[u_frame], f-1); - glUniform1f(pass->uniforms[u_width], w); - glUniform1f(pass->uniforms[u_height], h); - - glUniform1f(pass->uniforms[u_mousex], mx); - glUniform1f(pass->uniforms[u_mousey], my); - - // bind the vao - int bound = --num_active_passes; - if (bound) fbo_bind(fx->fb[frame ^= 1]); - - // fullscreen quad - glBindVertexArray(pass->m.vao); - glDrawArrays(GL_TRIANGLES, 0, 6); - profile_incstat("Render.num_drawcalls", +1); - profile_incstat("Render.num_triangles", +2); - glBindVertexArray(0); - - if (bound) fbo_unbind(); - } - } - glUseProgram(0); - - // restore clear color: needed in case transparent window is being used (alpha != 0) - glClearColor(0,0,0,1); // @transparent - - return true; -} - -static postfx fx; -int fx_load_from_mem(const char *nameid, const char *content) { - do_once postfx_create(&fx, 0); - return postfx_load_from_mem(&fx, nameid, content); -} -int fx_load(const char *filemask) { - static set(char*) added = 0; do_once set_init_str(added); - for each_array( vfs_list(filemask), char*, list ) { - if( set_find(added, list) ) continue; - char *name = STRDUP(list); // @leak - set_insert(added, name); - (void)postfx_load_from_mem(&fx, file_name(name), vfs_read(name)); - } - if( 1 ) - for each_array( file_list(filemask), char*, list ) { - if( set_find(added, list) ) continue; - char *name = STRDUP(list); // @leak - set_insert(added, name); - (void)postfx_load_from_mem(&fx, file_name(name), file_read(name)); - } - return 1; -} -void fx_begin() { - postfx_begin(&fx, window_width(), window_height()); -} -void fx_begin_res(int w, int h) { - postfx_begin(&fx, w, h); -} -void fx_end() { - postfx_end(&fx); -} -int fx_enabled(int pass) { - return postfx_enabled(&fx, pass); -} -void fx_enable(int pass, int enabled) { - postfx_enable(&fx, pass, enabled); -} -void fx_enable_all(int enabled) { - for( int i = 0; i < array_count(fx.pass); ++i ) { - fx_enable(i, enabled); - } -} -char *fx_name(int pass) { - return postfx_name(&fx, pass); -} -int fx_find(const char *name) { - return postfx_find(&fx, name); -} -void fx_order(int pass, unsigned priority) { - postfx_order(&fx, pass, priority); -} -unsigned fx_program(int pass) { - return postfx_program(&fx, pass); -} -void fx_setparam(int pass, const char *name, float value) { - unsigned program = fx_program(pass); - if( !program ) return; - unsigned oldprogram = shader_bind(program); - shader_float(name, value); - shader_bind(oldprogram); -} -int ui_fx(int pass) { - return ui_postfx(&fx, pass); -} -int ui_fxs() { - if(!array_count(fx.pass)) return ui_label(ICON_MD_WARNING " No Post FXs with annotations loaded."), 0; - - int changed = 0; - for( int i = 0; i < array_count(fx.pass); ++i ) { - char *name = fx_name(i); if( !name ) break; - bool b = fx_enabled(i); - if( ui_bool(name, &b) ) fx_enable(i, fx_enabled(i) ^ 1); - ui_fx(i); - ui_separator(); - } - return changed; -} - -// ----------------------------------------------------------------------------- -// brdf - -static texture_t brdf = {0}; - -static void brdf_load() { - // generate texture - unsigned tex; - glGenTextures(1, &tex); - - glBindTexture(GL_TEXTURE_2D, tex); - glTexImage2D(GL_TEXTURE_2D, 0, GL_RG16F, 512, 512, 0, GL_RG, GL_FLOAT, 0); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - - brdf.id = tex; - brdf.w = 512; - brdf.h = 512; - - // create program and generate BRDF LUT - unsigned lut_fbo = fbo(tex, 0, 0), rbo=0; - fbo_bind(lut_fbo); - - static int program = -1, vao = -1; - if( program < 0 ) { - const char* vs = vfs_read("shaders/vs_0_2_fullscreen_quad_B_flipped.glsl"); - const char* fs = vfs_read("shaders/brdf.glsl"); - - program = shader(vs, fs, "", "fragcolor", NULL); - glGenVertexArrays( 1, (GLuint*)&vao ); - } - - glDisable(GL_BLEND); - - handle old_shader = last_shader; - glUseProgram( program ); - - glViewport(0, 0, 512, 512); - - glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); - - glBindVertexArray( vao ); - - glDrawArrays( GL_TRIANGLES, 0, 6 ); - profile_incstat("Render.num_drawcalls", +1); - profile_incstat("Render.num_triangles", +2); - - glBindVertexArray( 0 ); - - glUseProgram( last_shader ); - - fbo_unbind(); - fbo_destroy(lut_fbo); -} - -texture_t brdf_lut() { - do_once brdf_load(); - return brdf; -} - -// ----------------------------------------------------------------------------- -// materials - -bool colormap( colormap_t *cm, const char *texture_name, bool load_as_srgb ) { - if( !texture_name ) return false; - - if( cm->texture ) { - texture_destroy(cm->texture); - FREE(cm->texture), cm->texture = NULL; - } - - int srgb = load_as_srgb ? TEXTURE_SRGB : 0; - int hdr = strendi(texture_name, ".hdr") ? TEXTURE_FLOAT|TEXTURE_RGBA : 0; - texture_t t = texture_compressed(texture_name, TEXTURE_LINEAR | TEXTURE_ANISOTROPY | TEXTURE_MIPMAPS | TEXTURE_REPEAT | hdr | srgb); - - if( t.id == texture_checker().id ) { - cm->texture = NULL; - return false; - } - cm->texture = CALLOC(1, sizeof(texture_t)); - *cm->texture = t; - return true; -} - -// ---------------------------------------------------------------------------- -// shadertoys -// -// @todo: multipass -// - https://www.shadertoy.com/view/Mst3Wr - la calanque -// - https://www.shadertoy.com/view/XsyGWV - sirenian dawn -// - https://www.shadertoy.com/view/Xst3zX - wordtoy -// - https://www.shadertoy.com/view/MddGzf - bricks game -// - https://www.shadertoy.com/view/Ms33WB - post process - ssao -// - https://www.shadertoy.com/view/Xds3zN - -enum shadertoy_uniforms { - iFrame, - iTime, - iDate, - iGlobalTime, - iGlobalFrame, - iGlobalDelta, - iChannel0, - iChannel1, - iChannel2, - iChannel3, - iResolution, - iMouse, - iOffset, - iSampleRate, - iChannelResolution, - iChannelTime, - // iCameraScreen - // iCameraPosition - // iCameraActive -}; - -shadertoy_t shadertoy( const char *shaderfile, unsigned flags ) { - shadertoy_t s = {0}; - s.flags = flags; - - char *file = vfs_read(shaderfile); - if( !file ) return s; - - glGenVertexArrays(1, &s.vao); - - char *fs = stringf("%s%s", vfs_read("header_shadertoy.glsl"), file); - s.program = shader((flags&SHADERTOY_FLIP_Y) ? vfs_read("shaders/vs_shadertoy_flip.glsl") : vfs_read("shaders/vs_shadertoy.glsl"), fs, "", "fragColor", NULL); - FREE(fs); - - if( strstr(file, "noise3.jpg")) - s.texture_channels[0] = texture("shadertoys/tex12.png", 0).id; - else - s.texture_channels[0] = texture("shadertoys/tex04.jpg", 0).id; - - s.uniforms[iFrame] = glGetUniformLocation(s.program, "iFrame"); - s.uniforms[iTime] = glGetUniformLocation(s.program, "iTime"); - s.uniforms[iDate] = glGetUniformLocation(s.program, "iDate"); - s.uniforms[iGlobalTime] = glGetUniformLocation(s.program, "iGlobalTime"); - s.uniforms[iGlobalDelta] = glGetUniformLocation(s.program, "iGlobalDelta"); - s.uniforms[iGlobalFrame] = glGetUniformLocation(s.program, "iGlobalFrame"); - s.uniforms[iResolution] = glGetUniformLocation(s.program, "iResolution"); - - s.uniforms[iChannel0] = glGetUniformLocation(s.program, "iChannel0"); - s.uniforms[iChannel1] = glGetUniformLocation(s.program, "iChannel1"); - s.uniforms[iChannel2] = glGetUniformLocation(s.program, "iChannel2"); - s.uniforms[iChannel3] = glGetUniformLocation(s.program, "iChannel3"); - - s.uniforms[iMouse] = glGetUniformLocation(s.program, "iMouse"); - s.uniforms[iOffset] = glGetUniformLocation(s.program, "iOffset"); - s.uniforms[iSampleRate] = glGetUniformLocation(s.program, "iSampleRate"); - s.uniforms[iChannelResolution] = glGetUniformLocation(s.program, "iChannelResolution"); - s.uniforms[iChannelTime] = glGetUniformLocation(s.program, "iChannelTime"); - - return s; -} - -shadertoy_t* shadertoy_render(shadertoy_t *s, float delta) { - if( s->program && s->vao ) { - if( s->dims.x && !(s->flags&SHADERTOY_IGNORE_FBO) && !texture_rec_begin(&s->tx, s->dims.x, s->dims.y) ) { - return s; - } - - if(input_down(MOUSE_L) || input_down(MOUSE_R) ) s->mouse.z = input(MOUSE_X), s->mouse.w = -(window_height() - input(MOUSE_Y)); - if(input(MOUSE_L) || input(MOUSE_R)) s->mouse.x = input(MOUSE_X), s->mouse.y = (window_height() - input(MOUSE_Y)); - vec4 m = mul4(s->mouse, vec4(1,1,1-2*(!input(MOUSE_L) && !input(MOUSE_R)),1-2*(input_down(MOUSE_L) || input_down(MOUSE_R)))); - - time_t tmsec = time(0); - struct tm *tm = localtime(&tmsec); - s->t += delta * 1000; - - glUseProgram(s->program); - glUniform1f(s->uniforms[iGlobalTime], s->t / 1000.f ); - glUniform1f(s->uniforms[iGlobalFrame], s->frame++); - glUniform1f(s->uniforms[iGlobalDelta], delta / 1000.f ); - glUniform2f(s->uniforms[iResolution], s->dims.x ? s->dims.x : window_width(), s->dims.y ? s->dims.y : window_height()); - if (!(s->flags&SHADERTOY_IGNORE_MOUSE)) glUniform4f(s->uniforms[iMouse], m.x,m.y,m.z,m.w ); - - glUniform1i(s->uniforms[iFrame], (int)window_frame()); - glUniform1f(s->uniforms[iTime], time_ss()); - glUniform4f(s->uniforms[iDate], tm->tm_year, tm->tm_mon, tm->tm_mday, tm->tm_sec + tm->tm_min * 60 + tm->tm_hour * 3600); - - int unit = 0; - for( int i = 0; i < 4; i++ ) { - if( s->texture_channels[i] ) { - glActiveTexture(GL_TEXTURE0 + unit); - glBindTexture(GL_TEXTURE_2D, s->texture_channels[i]); - glUniform1i(s->uniforms[iChannel0+i], unit); - unit++; - } - } - - glViewport(0, 0, s->dims.x ? s->dims.x : window_width(), s->dims.y ? s->dims.y : window_height()); - glBindVertexArray(s->vao); - glDrawArrays(GL_TRIANGLES, 0, 3); - - if(s->dims.x && !(s->flags&SHADERTOY_IGNORE_FBO)) texture_rec_end(&s->tx); // texture_rec - } - return s; -} - -// ----------------------------------------------------------------------------- -// skeletal meshes (iqm) - -#define IQM_MAGIC "INTERQUAKEMODEL" -#define IQM_VERSION 2 - -struct iqmheader { - char magic[16]; - unsigned version; - unsigned filesize; - unsigned flags; - unsigned num_text, ofs_text; - unsigned num_meshes, ofs_meshes; - unsigned num_vertexarrays, num_vertexes, ofs_vertexarrays; - unsigned num_triangles, ofs_triangles, ofs_adjacency; - unsigned num_joints, ofs_joints; - unsigned num_poses, ofs_poses; - unsigned num_anims, ofs_anims; - unsigned num_frames, num_framechannels, ofs_frames, ofs_bounds; - unsigned num_comment, ofs_comment; - unsigned num_extensions, ofs_extensions; -}; - -struct iqmmesh { - unsigned name; - unsigned material; - unsigned first_vertex, num_vertexes; - unsigned first_triangle, num_triangles; -}; - -enum { - IQM_POSITION, - IQM_TEXCOORD, - IQM_NORMAL, - IQM_TANGENT, - IQM_BLENDINDEXES, - IQM_BLENDWEIGHTS, - IQM_COLOR, - IQM_CUSTOM = 0x10 -}; - -enum { - IQM_BYTE, - IQM_UBYTE, - IQM_SHORT, - IQM_USHORT, - IQM_INT, - IQM_UINT, - IQM_HALF, - IQM_FLOAT, - IQM_DOUBLE, -}; - -struct iqmtriangle { - unsigned vertex[3]; -}; - -struct iqmadjacency { - unsigned triangle[3]; -}; - -struct iqmjoint { - unsigned name; - int parent; - float translate[3], rotate[4], scale[3]; -}; - -struct iqmpose { - int parent; - unsigned mask; - float channeloffset[10]; - float channelscale[10]; -}; - -struct iqmanim { - unsigned name; - unsigned first_frame, num_frames; - float framerate; - unsigned flags; -}; - -enum { - IQM_LOOP = 1<<0 -}; - -struct iqmvertexarray { - unsigned type; - unsigned flags; - unsigned format; - unsigned size; - unsigned offset; -}; - -struct iqmbounds { - union { - struct { float bbmin[3], bbmax[3]; }; - struct { vec3 min3, max3; }; - aabb box; - }; - float xyradius, radius; -}; - -// ----------------------------------------------------------------------------- - -typedef struct iqm_vertex { - GLfloat position[3]; - GLfloat texcoord[2]; - GLfloat normal[3]; - GLfloat tangent[4]; - GLubyte blendindexes[4]; - GLubyte blendweights[4]; - GLfloat blendvertexindex; - GLubyte color[4]; - GLfloat texcoord2[2]; -} iqm_vertex; - -typedef struct iqm_t { - int nummeshes, numtris, numverts, numjoints, numframes, numanims; - GLuint vao, ibo, vbo; - GLuint *textures; - uint8_t *buf, *meshdata, *animdata; - struct iqmmesh *meshes; - struct iqmjoint *joints; - struct iqmpose *poses; - struct iqmanim *anims; - struct iqmbounds *bounds; - mat34 *baseframe, *inversebaseframe, *outframe, *frames; - GLint bonematsoffset; - vec4 *colormaps; -} iqm_t; - -void model_set_texture(model_t m, texture_t t) { - if(!m.iqm) return; - iqm_t *q = m.iqm; - - for( int i = 0; i < q->nummeshes; ++i) { // assume 1 texture per mesh - q->textures[i] = t.id; - } -} - -//@fixme: some locations are invalid, find out why -#if 0 -static -void model_set_uniforms(model_t m, int shader, mat44 mv, mat44 proj, mat44 view, mat44 model) { // @todo: cache uniform locs - if(!m.iqm) return; - iqm_t *q = m.iqm; - - shader_bind(shader); - int loc; - //if( (loc = glGetUniformLocation(shader, "M")) >= 0 ) glUniformMatrix4fv( loc, 1, GL_FALSE/*GL_TRUE*/, m); // RIM - if( (loc = m.uniforms[MODEL_UNIFORM_MV]) >= 0 ) { - shader_mat44_(loc, mv); - } - if( (loc = m.uniforms[MODEL_UNIFORM_MVP]) >= 0 ) { - mat44 mvp; multiply44x2(mvp, proj, mv); // multiply44x3(mvp, proj, view, model); - shader_mat44_(loc, mvp); - } - if( (loc = m.uniforms[MODEL_UNIFORM_VP]) >= 0 ) { - mat44 vp; multiply44x2(vp, proj, view); - shader_mat44_(loc, vp); - } - if( (loc = m.uniforms[MODEL_UNIFORM_CAM_POS]) >= 0 ) { - vec3 pos = vec3(view[12], view[13], view[14]); - shader_vec3_(loc, pos); - } - if( (loc = m.uniforms[MODEL_UNIFORM_CAM_DIR]) >= 0 ) { - vec3 dir = norm3(vec3(view[2], view[6], view[10])); - shader_vec3_(loc, dir); - } - if( (loc = m.uniforms[MODEL_UNIFORM_BILLBOARD]) >= 0 ) { - shader_int_(loc, m.billboard); - } - if( (loc = m.uniforms[MODEL_UNIFORM_TEXLIT]) >= 0 ) { - shader_bool_(loc, (m.lightmap.w != 0)); - } - if ((loc = m.uniforms[MODEL_UNIFORM_MODEL]) >= 0) { - shader_mat44_(loc, model); - } - if ((loc = m.uniforms[MODEL_UNIFORM_VIEW]) >= 0) { - shader_mat44_(loc, view); - } - if ((loc = m.uniforms[MODEL_UNIFORM_INV_VIEW]) >= 0) { - mat44 inv_view; - invert44(inv_view, view); - shader_mat44_(loc, inv_view); - } - if ((loc = m.uniforms[MODEL_UNIFORM_PROJ]) >= 0) { - shader_mat44_(loc, proj); - } - if( (loc = m.uniforms[MODEL_UNIFORM_SKINNED]) >= 0 ) shader_int_(loc, q->numanims ? GL_TRUE : GL_FALSE); - if( q->numanims ) - if( (loc = m.uniforms[MODEL_UNIFORM_VS_BONE_MATRIX]) >= 0 ) glUniformMatrix3x4fv( loc, q->numjoints, GL_FALSE, q->outframe[0]); - if ((loc = m.uniforms[MODEL_UNIFORM_U_MATCAPS]) >= 0) { - shader_bool_(loc, m.flags & MODEL_MATCAPS ? GL_TRUE:GL_FALSE); - } - - if (m.shading == SHADING_PBR) { - handle old_shader = last_shader; - shader_bind(shader); - shader_vec2_( m.uniforms[MODEL_UNIFORM_RESOLUTION], vec2(window_width(),window_height())); - - bool has_tex_skysphere = m.sky_refl.id != texture_checker().id; - bool has_tex_skyenv = m.sky_env.id != texture_checker().id; - shader_bool_( m.uniforms[MODEL_UNIFORM_HAS_TEX_SKYSPHERE], has_tex_skysphere ); - shader_bool_( m.uniforms[MODEL_UNIFORM_HAS_TEX_SKYENV], has_tex_skyenv ); - if( has_tex_skysphere ) { - float mipCount = floor( log2( max(m.sky_refl.w, m.sky_refl.h) ) ); - shader_texture_(m.uniforms[MODEL_UNIFORM_TEX_SKYSPHERE], m.sky_refl); - shader_float_( m.uniforms[MODEL_UNIFORM_SKYSPHERE_MIP_COUNT], mipCount ); - } - if( has_tex_skyenv ) { - shader_texture_( m.uniforms[MODEL_UNIFORM_TEX_SKYENV], m.sky_env ); - } - shader_texture_( m.uniforms[MODEL_UNIFORM_TEX_BRDF_LUT], brdf_lut() ); - shader_uint_( m.uniforms[MODEL_UNIFORM_FRAME_COUNT], (unsigned)window_frame() ); - shader_bind(old_shader); - } -} -#else -static -void model_set_uniforms(model_t m, int shader, mat44 mv, mat44 proj, mat44 view, mat44 model) { // @todo: cache uniform locs - if(!m.iqm) return; - iqm_t *q = m.iqm; - - shader_bind(shader); - int loc; - //if( (loc = glGetUniformLocation(shader, "M")) >= 0 ) glUniformMatrix4fv( loc, 1, GL_FALSE/*GL_TRUE*/, m); // RIM - if( (loc = glGetUniformLocation(shader, "MV")) >= 0 ) { - glUniformMatrix4fv( loc, 1, GL_FALSE, mv); - } - else - if( (loc = glGetUniformLocation(shader, "u_mv")) >= 0 ) { - glUniformMatrix4fv( loc, 1, GL_FALSE, mv); - } - if( (loc = glGetUniformLocation(shader, "MVP")) >= 0 ) { - mat44 mvp; multiply44x2(mvp, proj, mv); // multiply44x3(mvp, proj, view, model); - glUniformMatrix4fv( loc, 1, GL_FALSE, mvp); - } - else - if( (loc = glGetUniformLocation(shader, "u_mvp")) >= 0 ) { - mat44 mvp; multiply44x2(mvp, proj, mv); // multiply44x3(mvp, proj, view, model); - glUniformMatrix4fv( loc, 1, GL_FALSE, mvp); - } - if( (loc = glGetUniformLocation(shader, "VP")) >= 0 ) { - mat44 vp; multiply44x2(vp, proj, view); - glUniformMatrix4fv( loc, 1, GL_FALSE, vp); - } - else - if( (loc = glGetUniformLocation(shader, "u_vp")) >= 0 ) { - mat44 vp; multiply44x2(vp, proj, view); - glUniformMatrix4fv( loc, 1, GL_FALSE, vp); - } - if( (loc = glGetUniformLocation(shader, "u_cam_pos")) >= 0 ) { - vec3 pos = vec3(view[12], view[13], view[14]); - glUniform3fv( loc, 1, &pos.x ); - } - else - if( (loc = glGetUniformLocation(shader, "cam_pos")) >= 0 ) { - vec3 pos = vec3(view[12], view[13], view[14]); - glUniform3fv( loc, 1, &pos.x ); - } - if( (loc = glGetUniformLocation(shader, "u_cam_dir")) >= 0 ) { - vec3 dir = norm3(vec3(view[2], view[6], view[10])); - glUniform3fv( loc, 1, &dir.x ); - } - else - if( (loc = glGetUniformLocation(shader, "cam_dir")) >= 0 ) { - vec3 dir = norm3(vec3(view[2], view[6], view[10])); - glUniform3fv( loc, 1, &dir.x ); - } - if( (loc = glGetUniformLocation(shader, "billboard")) >= 0 ) { - glUniform1i( loc, m.billboard ); - } - else - if( (loc = glGetUniformLocation(shader, "u_billboard")) >= 0 ) { - glUniform1i( loc, m.billboard ); - } - if( (loc = glGetUniformLocation(shader, "texlit")) >= 0 ) { - glUniform1i( loc, (m.lightmap.w != 0) ); - } - else - if( (loc = glGetUniformLocation(shader, "u_texlit")) >= 0 ) { - glUniform1i( loc, (m.lightmap.w != 0) ); - } -#if 0 - // @todo: mat44 projview (useful?) -#endif - if ((loc = glGetUniformLocation(shader, "M")) >= 0) { - glUniformMatrix4fv(loc, 1, GL_FALSE, model); - } - else - if ((loc = glGetUniformLocation(shader, "model")) >= 0) { - glUniformMatrix4fv(loc, 1, GL_FALSE, model); - } - if ((loc = glGetUniformLocation(shader, "V")) >= 0) { - glUniformMatrix4fv(loc, 1, GL_FALSE, view); - } - else - if ((loc = glGetUniformLocation(shader, "view")) >= 0) { - glUniformMatrix4fv(loc, 1, GL_FALSE, view); - } - if ((loc = glGetUniformLocation(shader, "inv_view")) >= 0) { - mat44 inv_view; - invert44( inv_view, view); - glUniformMatrix4fv(loc, 1, GL_FALSE, inv_view); - } - if ((loc = glGetUniformLocation(shader, "P")) >= 0) { - glUniformMatrix4fv(loc, 1, GL_FALSE, proj); - } - else - if ((loc = glGetUniformLocation(shader, "proj")) >= 0) { - glUniformMatrix4fv(loc, 1, GL_FALSE, proj); - } - if( (loc = glGetUniformLocation(shader, "SKINNED")) >= 0 ) glUniform1i( loc, q->numanims ? GL_TRUE : GL_FALSE); - if( q->numanims ) - if( (loc = glGetUniformLocation(shader, "vsBoneMatrix")) >= 0 ) glUniformMatrix3x4fv( loc, q->numjoints, GL_FALSE, q->outframe[0]); - - if ((loc = glGetUniformLocation(shader, "u_matcaps")) >= 0) { - glUniform1i(loc, m.flags & MODEL_MATCAPS ? GL_TRUE:GL_FALSE); - } - - if ((loc = glGetUniformLocation(shader, "frame_count")) >= 0) { - glUniform1i(loc, (unsigned)window_frame()); - } - - if ((loc = glGetUniformLocation(shader, "frame_time")) >= 0) { - glUniform1f(loc, (float)window_time()); - } - - if (m.shading == SHADING_PBR) { - handle old_shader = last_shader; - shader_bind(shader); - shader_vec2( "resolution", vec2(window_width(),window_height())); - - bool has_tex_skysphere = m.sky_refl.id != texture_checker().id; - bool has_tex_skyenv = m.sky_env.id != texture_checker().id; - shader_bool( "has_tex_skysphere", has_tex_skysphere ); - shader_bool( "has_tex_skyenv", has_tex_skyenv ); - if( has_tex_skysphere ) { - float mipCount = floor( log2( max(m.sky_refl.w, m.sky_refl.h) ) ); - shader_texture("tex_skysphere", m.sky_refl); - shader_float( "skysphere_mip_count", mipCount ); - } - if( has_tex_skyenv ) { - shader_texture( "tex_skyenv", m.sky_env ); - } - shader_texture( "tex_brdf_lut", brdf_lut() ); - shader_bind(old_shader); - } -} -#endif -static -void model_set_state(model_t m) { - if(!m.iqm) return; - iqm_t *q = m.iqm; - - glBindVertexArray( q->vao ); - - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, q->ibo); - glBindBuffer(GL_ARRAY_BUFFER, q->vbo); - - glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(iqm_vertex), (GLvoid*)offsetof(iqm_vertex, position) ); - glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, sizeof(iqm_vertex), (GLvoid*)offsetof(iqm_vertex, texcoord) ); - glVertexAttribPointer(2, 3, GL_FLOAT, GL_FALSE, sizeof(iqm_vertex), (GLvoid*)offsetof(iqm_vertex, normal) ); - glVertexAttribPointer(3, 4, GL_FLOAT, GL_FALSE, sizeof(iqm_vertex), (GLvoid*)offsetof(iqm_vertex, tangent) ); - - glEnableVertexAttribArray(0); - glEnableVertexAttribArray(1); - glEnableVertexAttribArray(2); - glEnableVertexAttribArray(3); - - // vertex color - glVertexAttribPointer(11, 4, GL_UNSIGNED_BYTE, GL_FALSE, sizeof(iqm_vertex), (GLvoid*)offsetof(iqm_vertex,color) ); - glEnableVertexAttribArray(11); - - // lmap data - glVertexAttribPointer(12, 2, GL_FLOAT, GL_FALSE, sizeof(iqm_vertex), (GLvoid*)offsetof(iqm_vertex, texcoord2) ); - glEnableVertexAttribArray(12); - - // animation - if(q->numframes > 0) { - glVertexAttribPointer( 8, 4, GL_UNSIGNED_BYTE, GL_FALSE, sizeof(iqm_vertex), (GLvoid*)offsetof(iqm_vertex,blendindexes) ); - glVertexAttribPointer( 9, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(iqm_vertex), (GLvoid*)offsetof(iqm_vertex,blendweights) ); - glVertexAttribPointer(10, 1, GL_FLOAT, GL_FALSE, sizeof(iqm_vertex), (GLvoid*)offsetof(iqm_vertex, blendvertexindex) ); - glEnableVertexAttribArray(8); - glEnableVertexAttribArray(9); - glEnableVertexAttribArray(10); - } - - // mat4 attribute; for instanced rendering - if( 1 ) { - unsigned vec4_size = sizeof(vec4); - unsigned mat4_size = sizeof(vec4) * 4; - - // vertex buffer object - glBindBuffer(GL_ARRAY_BUFFER, m.vao_instanced); - glBufferData(GL_ARRAY_BUFFER, m.num_instances * mat4_size, m.instanced_matrices, GL_STREAM_DRAW); - - glVertexAttribPointer(4, 4, GL_FLOAT, GL_FALSE, 4 * vec4_size, (GLvoid*)(((char*)NULL)+(0 * vec4_size))); - glVertexAttribPointer(5, 4, GL_FLOAT, GL_FALSE, 4 * vec4_size, (GLvoid*)(((char*)NULL)+(1 * vec4_size))); - glVertexAttribPointer(6, 4, GL_FLOAT, GL_FALSE, 4 * vec4_size, (GLvoid*)(((char*)NULL)+(2 * vec4_size))); - glVertexAttribPointer(7, 4, GL_FLOAT, GL_FALSE, 4 * vec4_size, (GLvoid*)(((char*)NULL)+(3 * vec4_size))); - - glEnableVertexAttribArray(4); - glEnableVertexAttribArray(5); - glEnableVertexAttribArray(6); - glEnableVertexAttribArray(7); - - glVertexAttribDivisor(4, 1); - glVertexAttribDivisor(5, 1); - glVertexAttribDivisor(6, 1); - glVertexAttribDivisor(7, 1); - } - - // 7 bitangent? into texcoord.z? - - glBindVertexArray( 0 ); -} - -static -bool model_load_meshes(iqm_t *q, const struct iqmheader *hdr, model_t *m) { - if(q->meshdata) return false; - - lil32p(&q->buf[hdr->ofs_vertexarrays], hdr->num_vertexarrays*sizeof(struct iqmvertexarray)/sizeof(uint32_t)); - lil32p(&q->buf[hdr->ofs_triangles], hdr->num_triangles*sizeof(struct iqmtriangle)/sizeof(uint32_t)); - lil32p(&q->buf[hdr->ofs_meshes], hdr->num_meshes*sizeof(struct iqmmesh)/sizeof(uint32_t)); - lil32p(&q->buf[hdr->ofs_joints], hdr->num_joints*sizeof(struct iqmjoint)/sizeof(uint32_t)); - - q->meshdata = q->buf; - q->nummeshes = hdr->num_meshes; - q->numtris = hdr->num_triangles; - q->numverts = hdr->num_vertexes; - q->numjoints = hdr->num_joints; - q->outframe = CALLOC(hdr->num_joints, sizeof(mat34)); - - float *inposition = NULL, *innormal = NULL, *intangent = NULL, *intexcoord = NULL, *invertexindex = NULL; - uint8_t *inblendindex8 = NULL, *inblendweight8 = NULL; - int *inblendindexi = NULL; float *inblendweightf = NULL; - uint8_t *invertexcolor8 = NULL; - struct iqmvertexarray *vas = (struct iqmvertexarray *)&q->buf[hdr->ofs_vertexarrays]; - for(int i = 0; i < (int)hdr->num_vertexarrays; i++) { - struct iqmvertexarray *va = &vas[i]; - switch(va->type) { - default: continue; // return PANIC("unknown iqm vertex type (%d)", va->type), false; - break; case IQM_POSITION: ASSERT(va->format == IQM_FLOAT && va->size == 3); inposition = (float *)&q->buf[va->offset]; lil32pf(inposition, 3*hdr->num_vertexes); - break; case IQM_NORMAL: ASSERT(va->format == IQM_FLOAT && va->size == 3); innormal = (float *)&q->buf[va->offset]; lil32pf(innormal, 3*hdr->num_vertexes); - break; case IQM_TANGENT: ASSERT(va->format == IQM_FLOAT && va->size == 4); intangent = (float *)&q->buf[va->offset]; lil32pf(intangent, 4*hdr->num_vertexes); - break; case IQM_TEXCOORD: ASSERT(va->format == IQM_FLOAT && va->size == 2); intexcoord = (float *)&q->buf[va->offset]; lil32pf(intexcoord, 2*hdr->num_vertexes); - break; case IQM_COLOR: ASSERT(va->size == 4); ASSERT(va->format == IQM_UBYTE); invertexcolor8 = (uint8_t *)&q->buf[va->offset]; - break; case IQM_BLENDINDEXES: ASSERT(va->size == 4); ASSERT(va->format == IQM_UBYTE || va->format == IQM_INT); - if(va->format == IQM_UBYTE) inblendindex8 = (uint8_t *)&q->buf[va->offset]; - else inblendindexi = (int *)&q->buf[va->offset]; - break; case IQM_BLENDWEIGHTS: ASSERT(va->size == 4); ASSERT(va->format == IQM_UBYTE || va->format == IQM_FLOAT); - if(va->format == IQM_UBYTE) inblendweight8 = (uint8_t *)&q->buf[va->offset]; - else inblendweightf = (float *)&q->buf[va->offset]; - invertexindex = (inblendweight8 ? (float*)(inblendweight8 + 4) : inblendweightf + 4 ); - } - } - - if (hdr->ofs_bounds) lil32p(q->buf + hdr->ofs_bounds, hdr->num_frames * sizeof(struct iqmbounds)); - if (hdr->ofs_bounds) q->bounds = (struct iqmbounds *) &q->buf[hdr->ofs_bounds]; - - q->meshes = (struct iqmmesh *)&q->buf[hdr->ofs_meshes]; - q->joints = (struct iqmjoint *)&q->buf[hdr->ofs_joints]; - - q->baseframe = CALLOC(hdr->num_joints, sizeof(mat34)); - q->inversebaseframe = CALLOC(hdr->num_joints, sizeof(mat34)); - for(int i = 0; i < (int)hdr->num_joints; i++) { - struct iqmjoint *j = &q->joints[i]; - compose34(q->baseframe[i], ptr3(j->translate), normq(ptrq(j->rotate)), ptr3(j->scale)); - invert34(q->inversebaseframe[i], q->baseframe[i]); - if(j->parent >= 0) { - multiply34x2(q->baseframe[i], q->baseframe[j->parent], q->baseframe[i]); - multiply34(q->inversebaseframe[i], q->inversebaseframe[j->parent]); - } - } - - struct iqmtriangle *tris = (struct iqmtriangle *)&q->buf[hdr->ofs_triangles]; - m->num_tris = hdr->num_triangles; - m->tris = (void*)tris; - - glGenVertexArrays(1, &q->vao); - glBindVertexArray(q->vao); - - if(!q->ibo) glGenBuffers(1, &q->ibo); - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, q->ibo); - glBufferData(GL_ELEMENT_ARRAY_BUFFER, hdr->num_triangles*sizeof(struct iqmtriangle), tris, GL_STATIC_DRAW); - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); - - iqm_vertex *verts = CALLOC(hdr->num_vertexes, sizeof(iqm_vertex)); - for(int i = 0; i < (int)hdr->num_vertexes; i++) { - iqm_vertex *v = &verts[i]; - if(inposition) memcpy(v->position, &inposition[i*3], sizeof(v->position)); - if(innormal) memcpy(v->normal, &innormal[i*3], sizeof(v->normal)); - if(intangent) memcpy(v->tangent, &intangent[i*4], sizeof(v->tangent)); - if(intexcoord) { - memcpy(v->texcoord, &intexcoord[i*2], sizeof(v->texcoord)); - memcpy(v->texcoord2, &intexcoord[i*2], sizeof(v->texcoord2)); // populate UV1 with the same value, used by lightmapper - } - if(inblendindex8) memcpy(v->blendindexes, &inblendindex8[i*4], sizeof(v->blendindexes)); - if(inblendweight8) memcpy(v->blendweights, &inblendweight8[i*4], sizeof(v->blendweights)); - if(inblendindexi) { - uint8_t conv[4] = { inblendindexi[i*4], inblendindexi[i*4+1], inblendindexi[i*4+2], inblendindexi[i*4+3] }; - memcpy(v->blendindexes, conv, sizeof(v->blendindexes)); - } - if(inblendweightf) { - uint8_t conv[4] = { inblendweightf[i*4] * 255, inblendweightf[i*4+1] * 255, inblendweightf[i*4+2] * 255, inblendweightf[i*4+3] * 255 }; - memcpy(v->blendweights, conv, sizeof(v->blendweights)); - } - if(invertexindex) { - float conv = i; - memcpy(&v->blendvertexindex, &conv, 4); - } - if(invertexcolor8) memcpy(v->color, &invertexcolor8[i*4], sizeof(v->color)); - } - - if(!q->vbo) glGenBuffers(1, &q->vbo); - glBindBuffer(GL_ARRAY_BUFFER, q->vbo); - glBufferData(GL_ARRAY_BUFFER, hdr->num_vertexes*sizeof(iqm_vertex), verts, GL_STATIC_DRAW); - glBindBuffer(GL_ARRAY_BUFFER, 0); - - m->stride = sizeof(iqm_vertex); - #if 0 - m->stride = 0; - if(inposition) m->stride += sizeof(verts[0].position); - if(innormal) m->stride += sizeof(verts[0].normal); - if(intangent) m->stride += sizeof(verts[0].tangent); - if(intexcoord) m->stride += sizeof(verts[0].texcoord); - if(inblendindex8) m->stride += sizeof(verts[0].blendindexes); // no index8? bug? - if(inblendweight8) m->stride += sizeof(verts[0].blendweights); // no weight8? bug? - if(inblendindexi) m->stride += sizeof(verts[0].blendindexes); - if(inblendweightf) m->stride += sizeof(verts[0].blendweights); - if(invertexcolor8) m->stride += sizeof(verts[0].color); - #endif - //for( int i = 0; i < 16; ++i ) printf("%.9g%s", ((float*)verts)[i], (i % 3) == 2 ? "\n" : ","); - m->verts = verts; - /*m->verts = 0; FREE(verts);*/ - - q->textures = CALLOC(hdr->num_meshes * 8, sizeof(GLuint)); - q->colormaps = CALLOC(hdr->num_meshes * 8, sizeof(vec4)); - for(int i = 0; i < (int)hdr->num_meshes; i++) { - int invalid = texture_checker().id; - q->textures[i] = invalid; - } - - const char *str = hdr->ofs_text ? (char *)&q->buf[hdr->ofs_text] : ""; - for(int i = 0; i < (int)hdr->num_meshes; i++) { - struct iqmmesh *m = &q->meshes[i]; - PRINTF("loaded mesh: %s\n", &str[m->name]); - } - - return true; -} - -static -bool model_load_anims(iqm_t *q, const struct iqmheader *hdr) { - if((int)hdr->num_poses != q->numjoints) return false; - - if(q->animdata) { - if(q->animdata != q->meshdata) FREE(q->animdata); - FREE(q->frames); - q->animdata = NULL; - q->anims = NULL; - q->frames = 0; - q->numframes = 0; - q->numanims = 0; - } - - lil32p(&q->buf[hdr->ofs_poses], hdr->num_poses*sizeof(struct iqmpose)/sizeof(uint32_t)); - lil32p(&q->buf[hdr->ofs_anims], hdr->num_anims*sizeof(struct iqmanim)/sizeof(uint32_t)); - lil16p((uint16_t *)&q->buf[hdr->ofs_frames], hdr->num_frames*hdr->num_framechannels); - - q->animdata = q->buf; - q->numanims = hdr->num_anims; - q->numframes = hdr->num_frames; - - q->anims = (struct iqmanim *)&q->buf[hdr->ofs_anims]; - q->poses = (struct iqmpose *)&q->buf[hdr->ofs_poses]; - q->frames = CALLOC(hdr->num_frames * hdr->num_poses, sizeof(mat34)); - uint16_t *framedata = (uint16_t *)&q->buf[hdr->ofs_frames]; - - for(int i = 0; i < (int)hdr->num_frames; i++) { - for(int j = 0; j < (int)hdr->num_poses; j++) { - struct iqmpose *p = &q->poses[j]; - quat rotate; - vec3 translate, scale; - translate.x = p->channeloffset[0]; if(p->mask&0x01) translate.x += *framedata++ * p->channelscale[0]; - translate.y = p->channeloffset[1]; if(p->mask&0x02) translate.y += *framedata++ * p->channelscale[1]; - translate.z = p->channeloffset[2]; if(p->mask&0x04) translate.z += *framedata++ * p->channelscale[2]; - - rotate.x = p->channeloffset[3]; if(p->mask&0x08) rotate.x += *framedata++ * p->channelscale[3]; - rotate.y = p->channeloffset[4]; if(p->mask&0x10) rotate.y += *framedata++ * p->channelscale[4]; - rotate.z = p->channeloffset[5]; if(p->mask&0x20) rotate.z += *framedata++ * p->channelscale[5]; - rotate.w = p->channeloffset[6]; if(p->mask&0x40) rotate.w += *framedata++ * p->channelscale[6]; - - scale.x = p->channeloffset[7]; if(p->mask&0x80) scale.x += *framedata++ * p->channelscale[7]; - scale.y = p->channeloffset[8]; if(p->mask&0x100) scale.y += *framedata++ * p->channelscale[8]; - scale.z = p->channeloffset[9]; if(p->mask&0x200) scale.z += *framedata++ * p->channelscale[9]; - - // Concatenate each pose with the inverse base pose to avoid doing this at animation time. - // If the joint has a parent, then it needs to be pre-concatenated with its parent's base pose. - // Thus it all negates at animation time like so: - // (parentPose * parentInverseBasePose) * (parentBasePose * childPose * childInverseBasePose) => - // parentPose * (parentInverseBasePose * parentBasePose) * childPose * childInverseBasePose => - // parentPose * childPose * childInverseBasePose - - mat34 m; compose34(m, translate, normq(rotate), scale); - if(p->parent >= 0) multiply34x3(q->frames[i*hdr->num_poses + j], q->baseframe[p->parent], m, q->inversebaseframe[j]); - else multiply34x2(q->frames[i*hdr->num_poses + j], m, q->inversebaseframe[j]); - } - } - - // const char *str = hdr->ofs_text ? (char *)&q->buf[hdr->ofs_text] : ""; - // for(int i = 0; i < (int)hdr->num_anims; i++) { - // struct iqmanim *a = &anims[i]; - // PRINTF("loaded anim[%d]: %s\n", i, &str[a->name]); - // } - - return true; -} - -// prevents crash on osx when strcpy'ing non __restrict arguments -static char* strcpy_safe(char *d, const char *s) { - sprintf(d, "%s", s); - return d; -} - -static -void model_load_pbr_layer(material_layer_t *layer, const char *texname, bool load_as_srgb) { - strcpy_safe(layer->texname, texname); - colormap(&layer->map, texname, false); -} - -static -void model_load_pbr(material_t *mt) { - // initialise default colors - mt->layer[MATERIAL_CHANNEL_DIFFUSE].map.color = vec4(0.5,0.5,0.5,0.5); - mt->layer[MATERIAL_CHANNEL_NORMALS].map.color = vec4(0,0,0,0); - mt->layer[MATERIAL_CHANNEL_SPECULAR].map.color = vec4(0,0,0,0); - mt->layer[MATERIAL_CHANNEL_SPECULAR].value = 1.0f; // specular_shininess - mt->layer[MATERIAL_CHANNEL_ALBEDO].map.color = vec4(0.5,0.5,0.5,1.0); - mt->layer[MATERIAL_CHANNEL_ROUGHNESS].map.color = vec4(1,1,1,1); - mt->layer[MATERIAL_CHANNEL_METALLIC].map.color = vec4(0,0,0,0); - mt->layer[MATERIAL_CHANNEL_AO].map.color = vec4(1,1,1,1); - mt->layer[MATERIAL_CHANNEL_AMBIENT].map.color = vec4(0,0,0,1); - mt->layer[MATERIAL_CHANNEL_EMISSIVE].map.color = vec4(0,0,0,0); - - // load colormaps - array(char*) tokens = strsplit(mt->name, "+"); - for( int j = 0, end = array_count(tokens); j < end; ++j ) { - char *t = tokens[j]; - if( strstri(t, "_D.") || strstri(t, "Diffuse") || strstri(t, "BaseColor") || strstri(t, "Base_Color") ) model_load_pbr_layer(&mt->layer[MATERIAL_CHANNEL_DIFFUSE], t, 1); - if( strstri(t, "_N.") || strstri(t, "Normal") ) model_load_pbr_layer(&mt->layer[MATERIAL_CHANNEL_NORMALS], t, 0); - if( strstri(t, "_S.") || strstri(t, "Specular") ) model_load_pbr_layer(&mt->layer[MATERIAL_CHANNEL_SPECULAR], t, 0); - if( strstri(t, "_A.") || strstri(t, "Albedo") ) model_load_pbr_layer(&mt->layer[MATERIAL_CHANNEL_ALBEDO], t, 1); // 0? - if( strstri(t, "Roughness") ) model_load_pbr_layer(&mt->layer[MATERIAL_CHANNEL_ROUGHNESS], t, 0); - if( strstri(t, "_MR.")|| strstri(t, "MetallicRoughness") || strstri(t, "OcclusionRoughnessMetallic") ) model_load_pbr_layer(&mt->layer[MATERIAL_CHANNEL_ROUGHNESS], t, 0); - else - if( strstri(t, "_M.") || strstri(t, "Metallic") ) model_load_pbr_layer(&mt->layer[MATERIAL_CHANNEL_METALLIC], t, 0); - //if( strstri(t, "_S.") || strstri(t, "Shininess") ) model_load_pbr_layer(&mt->layer[MATERIAL_CHANNEL_ROUGHNESS], t, 0); - //if( strstri(t, "_A.") || strstri(t, "Ambient") ) model_load_pbr_layer(&mt->layer[MATERIAL_CHANNEL_AMBIENT], t, 0); - if( strstri(t, "_E.") || strstri(t, "Emissive") ) model_load_pbr_layer(&mt->layer[MATERIAL_CHANNEL_EMISSIVE], t, 1); - if( strstri(t, "_AO.") || strstri(t, "AO") || strstri(t, "Occlusion") ) model_load_pbr_layer(&mt->layer[MATERIAL_CHANNEL_AO], t, 0); - } -} - -static -bool model_load_textures(iqm_t *q, const struct iqmheader *hdr, model_t *model, int _flags) { - q->textures = q->textures ? q->textures : CALLOC(hdr->num_meshes * 8, sizeof(GLuint)); // up to 8 textures per mesh - q->colormaps = q->colormaps ? q->colormaps : CALLOC(hdr->num_meshes * 8, sizeof(vec4)); // up to 8 colormaps per mesh - - GLuint *out = q->textures; - - const char *str = hdr->ofs_text ? (char *)&q->buf[hdr->ofs_text] : ""; - for(int i = 0; i < (int)hdr->num_meshes; i++) { - struct iqmmesh *m = &q->meshes[i]; - - // reuse texture+material if already decoded - bool reused = 0; - for( int j = 0; !reused && j < model->num_textures; ++j ) { - if( !strcmpi(model->texture_names[j], &str[m->material])) { - - *out++ = model->materials[j].layer[0].map.texture->id; - - { - model->num_textures++; - array_push(model->texture_names, STRDUP(&str[m->material])); - - array_push(model->materials, model->materials[j]); - array_back(model->materials)->name = STRDUP(&str[m->material]); - } - - reused = true; - } - } - if( reused ) continue; - - // decode texture+material - int flags = TEXTURE_MIPMAPS|TEXTURE_REPEAT|TEXTURE_ANISOTROPY; // LINEAR, NEAREST - if (!(_flags & MODEL_NO_FILTERING)) - flags |= TEXTURE_LINEAR; - int invalid = texture_checker().id; - -#if 1 - char *material_embedded_texture = strstr(&str[m->material], "+b64:"); - if( material_embedded_texture ) { - *material_embedded_texture = '\0'; - material_embedded_texture += 5; - array(char) embedded_texture = base64_decode(material_embedded_texture, strlen(material_embedded_texture)); - //printf("%s %d\n", material_embedded_texture, array_count(embedded_texture)); - //hexdump(embedded_texture, array_count(embedded_texture)); - *out = texture_compressed_from_mem( embedded_texture, array_count(embedded_texture), flags ).id; - array_free(embedded_texture); - } - - char* material_color_hex = strstr(&str[m->material], "+$"); - vec4 material_color = vec4(1,1,1,1); - if( material_color_hex ) { - *material_color_hex = '\0'; - material_color_hex += 2; - material_color.r = ((material_color_hex[0] >= 'a') ? material_color_hex[0] - 'a' + 10 : material_color_hex[0] - '0') / 15.f; - material_color.g = ((material_color_hex[1] >= 'a') ? material_color_hex[1] - 'a' + 10 : material_color_hex[1] - '0') / 15.f; - material_color.b = ((material_color_hex[2] >= 'a') ? material_color_hex[2] - 'a' + 10 : material_color_hex[2] - '0') / 15.f; - #if 0 // not enabled because of some .obj files like suzanne, with color_hex=9990 found - if(material_color_hex[3]) - material_color.a = ((material_color_hex[3] >= 'a') ? material_color_hex[3] - 'a' + 10 : material_color_hex[3] - '0') / 15.f; - else - #endif - material_color.a = 1; - } - - if( !material_embedded_texture ) { - char* material_name; - // remove any material+name from materials (.fbx) - // try left token first - if( 1 ) { - material_name = va("%s", &str[m->material]); - char* plus = strrchr(material_name, '+'); - if (plus) { strcpy_safe(plus, file_ext(material_name)); } - *out = texture_compressed(material_name, flags).id; - } - // else try right token - if (*out == invalid) { - material_name = file_normalize( va("%s", &str[m->material]) ); - char* plus = strrchr(material_name, '+'), *slash = strrchr(material_name, '/'); - if (plus) { - strcpy_safe(slash ? slash + 1 : material_name, plus + 1); - *out = texture_compressed(material_name, flags).id; - } - } - // else last resort - if (*out == invalid) { - *out = texture_compressed(material_name, flags).id; // needed? - } - } - - if( *out != invalid) { - PRINTF("loaded material[%d]: %s\n", i, &str[m->material]); - } else { - PRINTF("warn: material[%d] not found: %s\n", i, &str[m->material]); - PRINTF("warn: using placeholder material[%d]=texture_checker\n", i); - *out = texture_checker().id; // placeholder - } - - inscribe_tex:; - { - model->num_textures++; - array_push(model->texture_names, STRDUP(&str[m->material])); - - material_t mt = {0}; - mt.name = STRDUP(&str[m->material]); - - // initialise basic texture layer - mt.layer[MATERIAL_CHANNEL_DIFFUSE].map.color = material_color_hex ? material_color : vec4(1,1,1,1); - mt.layer[MATERIAL_CHANNEL_DIFFUSE].map.texture = CALLOC(1, sizeof(texture_t)); - mt.layer[MATERIAL_CHANNEL_DIFFUSE].map.texture->id = *out++; - - array_push(model->materials, mt); - } - -#else - material_t mt = {0}; - mt.name = STRDUP(&str[m->material]); - - array(char*) tokens = strsplit(&str[m->material], "+"); - for each_array(tokens, char*, it) { - *out = texture(it, flags).id; - - if( *out == invalid ) { - PRINTF("warn: material[%d] not found: %s\n", i, it); - } else { - PRINTF("loaded material[%d]: %s\n", i, it); - - mt.layer[mt.count++].texture = *out; - - ++out; - } - } - - // if no materials were loaded, try to signal a checkered placeholder - if( out == textures ) { - PRINTF("warn: using placeholder material[%d]=texture_checker\n", i); - *out++ = invalid; - } - - int count = (int)(intptr_t)(out - textures); - model->num_textures += count; - array_push(model->texture_names, STRDUP(&str[m->material])); - - array_push(model->materials, mt); -#endif - - } - - if( array_count(model->materials) == 0 ) { - material_t mt = {0}; - mt.name = "placeholder"; - mt.layer[0].map.color = vec4(1,1,1,1); - mt.layer[0].map.texture = CALLOC(1, sizeof(texture_t)); - mt.layer[0].map.texture->id = texture_checker().id; - - array_push(model->materials, mt); - } - - return true; -} - -static -void model_set_renderstates(model_t *m) { - for (int i = 0; irs[i] = renderstate(); - } - - // Normal pass - renderstate_t *normal_rs = &m->rs[RENDER_PASS_NORMAL]; - { - normal_rs->blend_enabled = 1; - normal_rs->blend_src = GL_SRC_ALPHA; - normal_rs->blend_dst = GL_ONE_MINUS_SRC_ALPHA; - normal_rs->cull_face_mode = GL_BACK; - normal_rs->front_face = GL_CW; - } - - // Shadow pass @todo - renderstate_t *shadow_rs = &m->rs[RENDER_PASS_SHADOW]; - { - shadow_rs->blend_enabled = 1; - shadow_rs->blend_src = GL_SRC_ALPHA; - shadow_rs->blend_dst = GL_ONE_MINUS_SRC_ALPHA; - shadow_rs->cull_face_mode = GL_BACK; - shadow_rs->front_face = GL_CW; - } - - // Lightmap pass - renderstate_t *lightmap_rs = &m->rs[RENDER_PASS_LIGHTMAP]; - { - lightmap_rs->blend_enabled = 0; - lightmap_rs->cull_face_enabled = 0; - lightmap_rs->front_face = GL_CW; - } -} - -model_t model_from_mem(const void *mem, int len, int flags) { - model_t m = {0}; - - m.stored_flags = flags; - m.shading = SHADING_PHONG; - model_set_renderstates(&m); - - const char *ptr = (const char *)mem; - iqm_t *q = CALLOC(1, sizeof(iqm_t)); - - int error = 1; - if( ptr && len ) { - struct iqmheader hdr; memcpy(&hdr, ptr, sizeof(hdr)); ptr += sizeof(hdr); - if( !memcmp(hdr.magic, IQM_MAGIC, sizeof(hdr.magic))) { - lil32p(&hdr.version, (sizeof(hdr) - sizeof(hdr.magic))/sizeof(uint32_t)); - if(hdr.version == IQM_VERSION) { - q->buf = CALLOC(hdr.filesize, sizeof(uint8_t)); - memcpy(q->buf + sizeof(hdr), ptr, hdr.filesize - sizeof(hdr)); - error = 0; - if( hdr.num_meshes > 0 && !(flags & MODEL_NO_MESHES) ) error |= !model_load_meshes(q, &hdr, &m); - if( hdr.num_meshes > 0 && !(flags & MODEL_NO_TEXTURES) ) error |= !model_load_textures(q, &hdr, &m, flags); - else { - // setup fallback - material_t mt = {0}; - mt.name = "placeholder"; - mt.layer[0].map.color = vec4(1,1,1,1); - mt.layer[0].map.texture = CALLOC(1, sizeof(texture_t)); - mt.layer[0].map.texture->id = texture_checker().id; - - array_push(m.materials, mt); - } - if( hdr.num_anims > 0 && !(flags & MODEL_NO_ANIMATIONS) ) error |= !model_load_anims(q, &hdr); - if( q->buf != q->meshdata && q->buf != q->animdata ) FREE(q->buf); - } - } - } - - if( error ) { - PRINTF("Error: cannot load %s", "model"); - FREE(q), q = 0; - } else { - m.vao = q->vao; - m.ibo = q->ibo; - m.vbo = q->vbo; - m.num_verts = q->numverts; - - // m.boxes = bounds; // <@todo - m.num_meshes = q->nummeshes; - m.num_triangles = q->numtris; - m.num_joints = q->numjoints; - //m.num_poses = numposes; - m.num_anims = q->numanims; - m.num_frames = q->numframes; - m.iqm = q; - m.curframe = model_animate(m, 0); - - //m.num_textures = q->nummeshes; // assume 1 texture only per mesh - m.textures = (q->textures); - - m.flags = flags; - - id44(m.pivot); - - m.num_instances = 0; - m.instanced_matrices = m.pivot; - - glGenBuffers(1, &m.vao_instanced); - model_set_state(m); - model_shading(&m, (flags & MODEL_PBR) ? SHADING_PBR : SHADING_PHONG); - } - return m; -} -model_t model(const char *filename, int flags) { - int len; // vfs_pushd(filedir(filename)) - char *ptr = vfs_load(filename, &len); // + vfs_popd - return model_from_mem( ptr, len, flags ); -} - -bool model_get_bone_pose(model_t m, unsigned joint, mat34 *out) { - if(!m.iqm) return false; - iqm_t *q = m.iqm; - - if(joint >= q->numjoints) return false; - - multiply34x2(*out, q->outframe[joint], q->baseframe[joint]); - return true; -} - -anim_t clip(float minframe, float maxframe, float blendtime, unsigned flags) { - return ((anim_t){minframe, maxframe, blendtime, flags, 1e6}); -} -anim_t loop(float minframe, float maxframe, float blendtime, unsigned flags) { - return clip(minframe, maxframe, blendtime, flags | ANIM_LOOP); -} - -array(anim_t) animlist(const char *pathfile) { - anim_t *animlist = 0; - char *anim_file = vfs_read(strendi(pathfile,".txt") ? pathfile : va("%s@animlist.txt", pathfile)); - if( anim_file ) { - // deserialize anim - for each_substring(anim_file, "\r\n", anim) { - int from, to; - char anim_name[128] = {0}; - if( sscanf(anim, "%*s %d-%d %127[^\r\n]", &from, &to, anim_name) != 3) continue; - array_push(animlist, !!strstri(anim_name, "loop") || !strcmpi(anim_name, "idle") ? loop(from, to, 0, 0) : clip(from, to, 0, 0)); // [from,to,flags] - array_back(animlist)->name = strswap(strswap(strswap(STRDUP(anim_name), "Loop", ""), "loop", ""), "()", ""); // @leak - } - } else { - // placeholder - array_push(animlist, clip(0,1,0,0)); - array_back(animlist)->name = STRDUP("Error"); // @leak - } - return animlist; -} - -static -void anim_tick(anim_t *p, bool is_primary, float delta) { // delta can be negative (reverses anim) - if( !is_primary ) p->active = 0; - if( is_primary && !p->active ) { - p->active = 1; - p->timer = 0; - p->alpha = 0; - if( p->flags & ANIM_DONT_RESET_AFTER_USE ) {} else p->curframe = 1e6; - } - - p->alpha = 1 - ease(p->timer / p->blendtime, p->easing); - p->timer += window_delta(); - - p->curframe += delta; - if(p->curframe < p->from || p->curframe > p->to ) p->curframe = delta >= 0 ? p->from : p->to; - p->pose = pose(delta >= 0, p->curframe, p->from, p->to, p->flags & ANIM_LOOP, NULL); -} - -float model_animate_blends(model_t m, anim_t *primary, anim_t *secondary, float delta) { - if(!m.iqm) return -1; - iqm_t *q = m.iqm; - - anim_tick(primary, 1, delta); - anim_tick(secondary, 0, delta); - - float alpha = primary->alpha; -// if( alpha <= 0 ) return model_animate(m, primary.pose.x); -// if( alpha >= 1 ) return model_animate(m, secondary.pose.x); - - unsigned frame1 = primary->pose.x; - unsigned frame2 = primary->pose.y; - float alphaA = primary->pose.z; - - unsigned frame3 = secondary->pose.x; - unsigned frame4 = secondary->pose.y; - float alphaB = secondary->pose.z; - - mat34 *mat1 = &q->frames[frame1 * q->numjoints]; - mat34 *mat2 = &q->frames[frame2 * q->numjoints]; - mat34 *mat3 = &q->frames[frame3 * q->numjoints]; - mat34 *mat4 = &q->frames[frame4 * q->numjoints]; - - for(int i = 0; i < q->numjoints; i++) { - mat34 matA, matB, matF; - lerp34(matA, mat1[i], mat2[i], alphaA); - lerp34(matB, mat3[i], mat4[i], alphaB); - lerp34(matF, matA, matB, alpha ); - if(q->joints[i].parent >= 0) multiply34x2(q->outframe[i], q->outframe[q->joints[i].parent], matF); - else copy34(q->outframe[i], matF); - } - - return frame1 + alpha; -} - -vec3 pose(bool forward_time, float curframe, int minframe, int maxframe, bool loop, float *retframe) { - float offset = curframe - (int)curframe; -#if 1 - int frame1 = (int)curframe; - int frame2 = frame1 + (forward_time ? 1 : -1); -#else - float frame1 = curframe; - float frame2 = curframe + (forward_time ? 1 : -1); -#endif - - if( loop ) { - int distance = maxframe - minframe; - frame1 = fmod(frame1 - minframe, distance) + minframe; // frame1 >= maxframe ? minframe : frame1 < minframe ? maxframe - clampf(minframe - frame1, 0, distance) : frame1; - frame2 = fmod(frame2 - minframe, distance) + minframe; // frame2 >= maxframe ? minframe : frame2 < minframe ? maxframe - clampf(minframe - frame2, 0, distance) : frame2; - if(retframe) *retframe = fmod(frame1 + offset - minframe, distance) + minframe; - } else { - frame1 = clampf(frame1, minframe, maxframe); - frame2 = clampf(frame2, minframe, maxframe); - if(retframe) *retframe = clampf(frame1 + offset, minframe, maxframe); - } - - return vec3(frame1 + (offset > 0 && offset < 1 ? offset : 0),frame2,offset); -} - -float model_animate_clip(model_t m, float curframe, int minframe, int maxframe, bool loop) { - if(!m.iqm) return -1; - iqm_t *q = m.iqm; - - float retframe = -1; - if( q->numframes > 0 ) { - vec3 p = pose(curframe >= m.curframe, curframe, minframe, maxframe, loop, &retframe); - int frame1 = p.x; - int frame2 = p.y; - float offset = p.z; - - mat34 *mat1 = &q->frames[frame1 * q->numjoints]; - mat34 *mat2 = &q->frames[frame2 * q->numjoints]; - - // @todo: add animation blending and inter-frame blending here - for(int i = 0; i < q->numjoints; i++) { - mat34 mat; lerp34(mat, mat1[i], mat2[i], offset); - if(q->joints[i].parent >= 0) multiply34x2(q->outframe[i], q->outframe[q->joints[i].parent], mat); - else copy34(q->outframe[i], mat); - } - } - - return retframe; -} - -void model_render_skeleton(model_t m, mat44 M) { - if(!m.iqm) return; - iqm_t *q = m.iqm; - - if(!q->numjoints) return; - - ddraw_ontop_push(true); - ddraw_color_push(RED); - - for( int joint = 0; joint < q->numjoints; joint++ ) { - if( q->joints[joint].parent < 0) continue; - - // bone space... - mat34 f; - model_get_bone_pose(m, joint, &f); - vec3 pos = vec3(f[3],f[7],f[11]); - - model_get_bone_pose(m, q->joints[joint].parent, &f); - vec3 src = vec3(f[3],f[7],f[11]); - - // ...to model space - src = transform344(M, src); - pos = transform344(M, pos); - - // red line - ddraw_color(RED); -// ddraw_line(src, pos); - ddraw_bone(src, pos); - - // green dot - ddraw_color(GREEN); - ddraw_point(pos); - - // yellow text - ddraw_color(YELLOW); - ddraw_text(pos, 0.005, va("%d", joint)); - } - - ddraw_color_pop(); - ddraw_ontop_pop(); -} - -float model_animate(model_t m, float curframe) { - if(!m.iqm) return -1; - iqm_t *q = m.iqm; - return model_animate_clip(m, curframe, 0, q->numframes-1, true); -} - -// @fixme: store uniform handles into model_t/colormap_t and rely on those directly -static inline -void shader_colormap_model_internal(const char *col_name, const char *bool_name, const char *tex_name, colormap_t c ) { - // assumes shader uses `struct { vec4 color; bool has_tex } name + sampler2D name_tex;` - shader_vec4( col_name, c.color ); - shader_bool( bool_name, c.texture != NULL ); - if( c.texture ) shader_texture( tex_name, *c.texture ); -} - -static -void model_draw_call(model_t m, int shader) { - if(!m.iqm) return; - iqm_t *q = m.iqm; - - handle old_shader = last_shader; - shader_bind(shader); - - renderstate_t *rs = &m.rs[RENDER_PASS_NORMAL]; - - renderstate_apply(rs); - - glBindVertexArray( q->vao ); - - struct iqmtriangle *tris = NULL; - for(int i = 0; i < q->nummeshes; i++) { - struct iqmmesh *im = &q->meshes[i]; - - if (m.shading != SHADING_PBR) { - shader_texture_unit("u_texture2d", q->textures[i], texture_unit()); - shader_texture("u_lightmap", m.lightmap); - - int loc; - if ((loc = glGetUniformLocation(shader, "u_textured")) >= 0) { - bool textured = !!q->textures[i] && q->textures[i] != texture_checker().id; // m.materials[i].layer[0].texture != texture_checker().id; - glUniform1i(loc, textured ? GL_TRUE : GL_FALSE); - if ((loc = glGetUniformLocation(shader, "u_diffuse")) >= 0) { - glUniform4f(loc, m.materials[i].layer[0].map.color.r, m.materials[i].layer[0].map.color.g, m.materials[i].layer[0].map.color.b, m.materials[i].layer[0].map.color.a); - } - } - - } else { - const material_t *material = &m.materials[i]; - shader_colormap_model_internal( "map_diffuse.color", "map_diffuse.has_tex", "map_diffuse_tex", material->layer[MATERIAL_CHANNEL_DIFFUSE].map ); - shader_colormap_model_internal( "map_normals.color", "map_normals.has_tex", "map_normals_tex", material->layer[MATERIAL_CHANNEL_NORMALS].map ); - shader_colormap_model_internal( "map_specular.color", "map_specular.has_tex", "map_specular_tex", material->layer[MATERIAL_CHANNEL_SPECULAR].map ); - shader_colormap_model_internal( "map_albedo.color", "map_albedo.has_tex", "map_albedo_tex", material->layer[MATERIAL_CHANNEL_ALBEDO].map ); - shader_colormap_model_internal( "map_roughness.color", "map_roughness.has_tex", "map_roughness_tex", material->layer[MATERIAL_CHANNEL_ROUGHNESS].map ); - shader_colormap_model_internal( "map_metallic.color", "map_metallic.has_tex", "map_metallic_tex", material->layer[MATERIAL_CHANNEL_METALLIC].map ); - shader_colormap_model_internal( "map_ao.color", "map_ao.has_tex", "map_ao_tex", material->layer[MATERIAL_CHANNEL_AO].map ); - shader_colormap_model_internal( "map_ambient.color", "map_ambient.has_tex", "map_ambient_tex", material->layer[MATERIAL_CHANNEL_AMBIENT].map ); - shader_colormap_model_internal( "map_emissive.color", "map_emissive.has_tex", "map_emissive_tex", material->layer[MATERIAL_CHANNEL_EMISSIVE].map ); - // shader_float( "specular_shininess", material->specular_shininess ); // unused, basic_specgloss.fs only - } - - glDrawElementsInstanced(GL_TRIANGLES, 3*im->num_triangles, GL_UNSIGNED_INT, &tris[im->first_triangle], m.num_instances); - profile_incstat("Render.num_drawcalls", +1); - profile_incstat("Render.num_triangles", +im->num_triangles); - } - - glBindVertexArray( 0 ); - - shader_bind(old_shader); -} - -void model_render_instanced(model_t m, mat44 proj, mat44 view, mat44* models, int shader, unsigned count) { - if(!m.iqm) return; - iqm_t *q = m.iqm; - - mat44 mv; multiply44x2(mv, view, models[0]); - - if( count != m.num_instances ) { - m.num_instances = count; - m.instanced_matrices = (float*)models; - model_set_state(m); - } - - model_set_uniforms(m, shader > 0 ? shader : m.program, mv, proj, view, models[0]); - model_draw_call(m, shader > 0 ? shader : m.program); -} - -void model_render(model_t m, mat44 proj, mat44 view, mat44 model, int shader) { - model_render_instanced(m, proj, view, (mat44*)model, shader, 1); -} - -static inline -void model_init_uniforms(model_t *m) { - for (int i=0; iuniforms[i] = -1; - unsigned shader = m->program; - int loc; - if ((loc = glGetUniformLocation(shader, "u_mv")) >= 0) - m->uniforms[MODEL_UNIFORM_MV] = loc; - else - if ((loc = glGetUniformLocation(shader, "MV")) >= 0) - m->uniforms[MODEL_UNIFORM_MV] = loc; - - if ((loc = glGetUniformLocation(shader, "u_mvp")) >= 0) - m->uniforms[MODEL_UNIFORM_MVP] = loc; - else - if ((loc = glGetUniformLocation(shader, "MVP")) >= 0) - m->uniforms[MODEL_UNIFORM_MVP] = loc; - - if ((loc = glGetUniformLocation(shader, "u_vp")) >= 0) - m->uniforms[MODEL_UNIFORM_VP] = loc; - else - if ((loc = glGetUniformLocation(shader, "VP")) >= 0) - m->uniforms[MODEL_UNIFORM_VP] = loc; - - if ((loc = glGetUniformLocation(shader, "u_cam_pos")) >= 0) - m->uniforms[MODEL_UNIFORM_CAM_POS] = loc; - else - if ((loc = glGetUniformLocation(shader, "cam_pos")) >= 0) - m->uniforms[MODEL_UNIFORM_CAM_POS] = loc; - - if ((loc = glGetUniformLocation(shader, "u_cam_dir")) >= 0) - m->uniforms[MODEL_UNIFORM_CAM_DIR] = loc; - else - if ((loc = glGetUniformLocation(shader, "cam_dir")) >= 0) - m->uniforms[MODEL_UNIFORM_CAM_DIR] = loc; - - if ((loc = glGetUniformLocation(shader, "u_billboard")) >= 0) - m->uniforms[MODEL_UNIFORM_BILLBOARD] = loc; - else - if ((loc = glGetUniformLocation(shader, "billboard")) >= 0) - m->uniforms[MODEL_UNIFORM_BILLBOARD] = loc; - - if ((loc = glGetUniformLocation(shader, "u_texlit")) >= 0) - m->uniforms[MODEL_UNIFORM_TEXLIT] = loc; - else - if ((loc = glGetUniformLocation(shader, "texlit")) >= 0) - m->uniforms[MODEL_UNIFORM_TEXLIT] = loc; - - if ((loc = glGetUniformLocation(shader, "M")) >= 0) - m->uniforms[MODEL_UNIFORM_MODEL] = loc; - else - if ((loc = glGetUniformLocation(shader, "model")) >= 0) - m->uniforms[MODEL_UNIFORM_MODEL] = loc; - - if ((loc = glGetUniformLocation(shader, "V")) >= 0) - m->uniforms[MODEL_UNIFORM_VIEW] = loc; - else - if ((loc = glGetUniformLocation(shader, "view")) >= 0) - m->uniforms[MODEL_UNIFORM_VIEW] = loc; - - if ((loc = glGetUniformLocation(shader, "inv_view")) >= 0) - m->uniforms[MODEL_UNIFORM_INV_VIEW] = loc; - - if ((loc = glGetUniformLocation(shader, "P")) >= 0) - m->uniforms[MODEL_UNIFORM_PROJ] = loc; - else - if ((loc = glGetUniformLocation(shader, "proj")) >= 0) - m->uniforms[MODEL_UNIFORM_PROJ] = loc; - - if ((loc = glGetUniformLocation(shader, "SKINNED")) >= 0) - m->uniforms[MODEL_UNIFORM_SKINNED] = loc; - - if ((loc = glGetUniformLocation(shader, "vsBoneMatrix")) >= 0) - m->uniforms[MODEL_UNIFORM_VS_BONE_MATRIX] = loc; - - if ((loc = glGetUniformLocation(shader, "u_matcaps")) >= 0) - m->uniforms[MODEL_UNIFORM_U_MATCAPS] = loc; - - if ((loc = glGetUniformLocation(shader, "has_tex_skysphere")) >= 0) - m->uniforms[MODEL_UNIFORM_HAS_TEX_SKYSPHERE] = loc; - - if ((loc = glGetUniformLocation(shader, "has_tex_skyenv")) >= 0) - m->uniforms[MODEL_UNIFORM_HAS_TEX_SKYENV] = loc; - - if ((loc = glGetUniformLocation(shader, "tex_skysphere")) >= 0) - m->uniforms[MODEL_UNIFORM_TEX_SKYSPHERE] = loc; - - if ((loc = glGetUniformLocation(shader, "skysphere_mip_count")) >= 0) - m->uniforms[MODEL_UNIFORM_SKYSPHERE_MIP_COUNT] = loc; - - if ((loc = glGetUniformLocation(shader, "tex_skyenv")) >= 0) - m->uniforms[MODEL_UNIFORM_TEX_SKYENV] = loc; - - if ((loc = glGetUniformLocation(shader, "tex_brdf_lut")) >= 0) - m->uniforms[MODEL_UNIFORM_TEX_BRDF_LUT] = loc; - - if ((loc = glGetUniformLocation(shader, "frame_count")) >= 0) - m->uniforms[MODEL_UNIFORM_FRAME_COUNT] = loc; - - if ((loc = glGetUniformLocation(shader, "resolution")) >= 0) - m->uniforms[MODEL_UNIFORM_RESOLUTION] = loc; -} - -void model_shading(model_t *m, int shading) { - m->shading = shading; - int flags = m->stored_flags; - - // load pbr material if SHADING_PBR was selected - if (shading == SHADING_PBR) { - for (int i = 0; i < array_count(m->materials); ++i) { - model_load_pbr(&m->materials[i]); - } - } - - // rebind shader - // @fixme: app crashes rn - // glUseProgram(0); - // glDeleteProgram(m->program); - const char *symbols[] = { "{{include-shadowmap}}", vfs_read("shaders/fs_0_0_shadowmap_lit.glsl") }; // #define RIM - int shaderprog = shader(strlerp(1,symbols,vfs_read("shaders/vs_323444143_16_3322_model.glsl")), strlerp(1,symbols,vfs_read("shaders/fs_32_4_model.glsl")), //fs, - "att_position,att_texcoord,att_normal,att_tangent,att_instanced_matrix,,,,att_indexes,att_weights,att_vertexindex,att_color,att_bitangent,att_texcoord2","fragColor", - va("%s,%s", shading == SHADING_PBR ? "SHADING_PBR" : "SHADING_PHONG", (flags&MODEL_RIMLIGHT)?"RIM":"")); - m->program = shaderprog; - model_init_uniforms(m); -} - -void model_skybox(model_t *mdl, skybox_t sky, bool load_sh) { - if (load_sh) { - shader_vec3v("u_coefficients_sh", 9, sky.cubemap.sh); - } - - mdl->sky_refl = sky.refl; - mdl->sky_env = sky.env; -} - -// static -aabb aabb_transform( aabb A, mat44 M ) { - // Based on "Transforming Axis-Aligned Bounding Boxes" by Jim Arvo, 1990 - aabb B = { {M[12],M[13],M[14]}, {M[12],M[13],M[14]} }; // extract translation from mat44 - for( int i = 0; i < 3; i++ ) - for( int j = 0; j < 3; j++ ) { - float a = M[i*4+j] * j[&A.min.x]; // use mat33 from mat44 - float b = M[i*4+j] * j[&A.max.x]; // use mat33 from mat44 - if( a < b ) { - i[&B.min.x] += a; - i[&B.max.x] += b; - } else { - i[&B.min.x] += b; - i[&B.max.x] += a; - } - } - return B; -} - -aabb model_aabb(model_t m, mat44 transform) { - iqm_t *q = m.iqm; - if( q && q->bounds ) { - int f = ( (int)m.curframe ) % (q->numframes + !q->numframes); - vec3 bbmin = ptr3(q->bounds[f].bbmin); - vec3 bbmax = ptr3(q->bounds[f].bbmax); - return aabb_transform(aabb(bbmin,bbmax), transform); - } - return aabb(vec3(0,0,0),vec3(0,0,0)); -} - -void model_destroy(model_t m) { - FREE(m.verts); - for( int i = 0, end = array_count(m.texture_names); i < end; ++i ) { - FREE(m.texture_names[i]); - } - array_free(m.texture_names); - - iqm_t *q = m.iqm; -// if(m.mesh) mesh_destroy(m.mesh); - FREE(q->outframe); - FREE(q->colormaps); - FREE(q->textures); - FREE(q->baseframe); - FREE(q->inversebaseframe); - if(q->animdata != q->meshdata) FREE(q->animdata); - //FREE(q->meshdata); - FREE(q->frames); - FREE(q->buf); - FREE(q); -} - -static unsigned model_renderpass = RENDER_PASS_NORMAL; - -unsigned model_getpass() { - return model_renderpass; -} - -unsigned model_setpass(unsigned pass) { - ASSERT(pass < NUM_RENDER_PASSES); - unsigned old_pass = model_renderpass; - model_renderpass = pass; - return old_pass; -} - -anims_t animations(const char *pathfile, int flags) { - anims_t a = {0}; - a.anims = animlist(pathfile); - if(a.anims) a.speed = 1.0; - return a; -} - -// ----------------------------------------------------------------------------- -// lightmapping utils -// @fixme: support xatlas uv packing, add UV1 coords to vertex model specs -lightmap_t lightmap(int hmsize, float cnear, float cfar, vec3 color, int passes, float threshold, float distmod) { - lightmap_t lm = {0}; - lm.ctx = lmCreate(hmsize, cnear, cfar, color.x, color.y, color.z, passes, threshold, distmod); - - if (!lm.ctx) { - PANIC("Error: Could not initialize lightmapper.\n"); - return lm; - } - - const char *symbols[] = { "{{include-shadowmap}}", vfs_read("shaders/fs_0_0_shadowmap_lit.glsl") }; // #define RIM - lm.shader = shader(strlerp(1,symbols,vfs_read("shaders/vs_323444143_16_3322_model.glsl")), strlerp(1,symbols,vfs_read("shaders/fs_32_4_model.glsl")), //fs, - "att_position,att_texcoord,att_normal,att_tangent,att_instanced_matrix,,,,att_indexes,att_weights,att_vertexindex,att_color,att_bitangent,att_texcoord2","fragColor", - va("%s", "LIGHTMAP_BAKING")); - - return lm; -} - -void lightmap_destroy(lightmap_t *lm) { - lmDestroy(lm->ctx); - shader_destroy(lm->shader); - // -} - -void lightmap_setup(lightmap_t *lm, int w, int h) { - lm->ready=1; - //@fixme: prep atlas for lightmaps - lm->w = w; - lm->h = h; -} - -void lightmap_bake(lightmap_t *lm, int bounces, void (*drawscene)(lightmap_t *lm, model_t *m, float *view, float *proj, void *userdata), void (*progressupdate)(float progress), void *userdata) { - ASSERT(lm->ready); - // @fixme: use xatlas to UV pack all models, update their UV1 and upload them to GPU. - - int w = lm->w, h = lm->h; - for (int i = 0; i < array_count(lm->models); i++) { - model_t *m = lm->models[i]; - if (m->lightmap.w != 0) { - texture_destroy(&m->lightmap); - } - m->lightmap = texture_create(w, h, 4, 0, TEXTURE_LINEAR|TEXTURE_FLOAT); - glBindTexture(GL_TEXTURE_2D, m->lightmap.id); - unsigned char emissive[] = { 0, 0, 0, 255 }; - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, emissive); - glBindTexture(GL_TEXTURE_2D, 0); - } - - unsigned old_pass = model_setpass(RENDER_PASS_LIGHTMAP); - - for (int b = 0; b < bounces; b++) { - for (int i = 0; i < array_count(lm->models); i++) { - model_t *m = lm->models[i]; - if (!m->lmdata) { - m->lmdata = CALLOC(w*h*4, sizeof(float)); - } - memset(m->lmdata, 0, w*h*4); - lmSetTargetLightmap(lm->ctx, m->lmdata, w, h, 4); - lmSetGeometry(lm->ctx, m->pivot, - LM_FLOAT, (uint8_t*)m->verts + offsetof(iqm_vertex, position), sizeof(iqm_vertex), - LM_FLOAT, (uint8_t*)m->verts + offsetof(iqm_vertex, normal), sizeof(iqm_vertex), - LM_FLOAT, (uint8_t*)m->verts + offsetof(iqm_vertex, texcoord), sizeof(iqm_vertex), - m->num_tris*3, LM_UNSIGNED_INT, m->tris); - - int vp[4]; - float view[16], projection[16]; - while (lmBegin(lm->ctx, vp, view, projection)) - { - // render to lightmapper framebuffer - glViewport(vp[0], vp[1], vp[2], vp[3]); - drawscene(lm, m, view, projection, userdata); - if (progressupdate) progressupdate(lmProgress(lm->ctx)); - lmEnd(lm->ctx); - } - } - - model_setpass(old_pass); - - // postprocess texture - for (int i = 0; i < array_count(lm->models); i++) { - model_t *m = lm->models[i]; - float *temp = CALLOC(w * h * 4, sizeof(float)); - for (int i = 0; i < 16; i++) - { - lmImageDilate(m->lmdata, temp, w, h, 4); - lmImageDilate(temp, m->lmdata, w, h, 4); - } - lmImageSmooth(m->lmdata, temp, w, h, 4); - lmImageDilate(temp, m->lmdata, w, h, 4); - lmImagePower(m->lmdata, w, h, 4, 1.0f / 2.2f, 0x7); // gamma correct color channels - FREE(temp); - - // save result to a file - // if (lmImageSaveTGAf("result.tga", m->lmdata, w, h, 4, 1.0f)) - // printf("Saved result.tga\n"); - // upload result - glBindTexture(GL_TEXTURE_2D, m->lightmap.id); - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, w, h, 0, GL_RGBA, GL_FLOAT, m->lmdata); - FREE(m->lmdata); m->lmdata = NULL; - } - } -} - +// ----------------------------------------------------------------------------- +// opengl + +#define GL_COMPRESSED_RGB_S3TC_DXT1_EXT 0x83F0 +#define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT 0x83F1 +#define GL_COMPRESSED_RGBA_S3TC_DXT3_EXT 0x83F2 +#define GL_COMPRESSED_RGBA_S3TC_DXT5_EXT 0x83F3 + +#define GL_DEBUG_SEVERITY_HIGH 0x9146 +#define GL_DEBUG_SEVERITY_NOTIFICATION 0x826B +#define GL_DEBUG_SOURCE_API 0x8246 +#define GL_DEBUG_TYPE_ERROR 0x824C +// +void glDebugCallback(uint32_t source, uint32_t type, uint32_t id, uint32_t severity, int32_t length, const char * message, void * userdata) { + // whitelisted codes (also: 131169, 131204). + if( id == 131154 ) return; // Pixel-path performance warning: Pixel transfer is synchronized with 3D rendering. + if( id == 131185 ) return; // Buffer object 2 (bound to GL_ELEMENT_ARRAY_BUFFER_ARB, usage hint is GL_STATIC_DRAW) will use VIDEO memory as the source for buffer object operations + if( id == 131218 ) return; // Program/shader state performance warning: Vertex shader in program 9 is being recompiled based on GL state. + if( id == 2 ) return; // INFO: API_ID_RECOMPILE_FRAGMENT_SHADER performance warning has been generated. Fragment shader recompiled due to state change. [ID: 2] + + const char * GL_ERROR_TYPE[] = { "ERROR", "DEPRECATED BEHAVIOR", "UNDEFINED DEHAVIOUR", "PORTABILITY", "PERFORMANCE", "OTHER" }; + const char * GL_ERROR_SOURCE[] = { "API", "WINDOW SYSTEM", "SHADER COMPILER", "THIRD PARTY", "APPLICATION", "OTHER" }; + const char * GL_ERROR_SEVERITY[] = { "HIGH", "MEDIUM", "LOW", "NOTIFICATION" }; + + type = type - GL_DEBUG_TYPE_ERROR; + source = source - GL_DEBUG_SOURCE_API; + severity = severity == GL_DEBUG_SEVERITY_NOTIFICATION ? 3 : severity - GL_DEBUG_SEVERITY_HIGH; + if(severity >= 2) return; // do not log low_severity or notifications + + PRINTF( "!%s:%s [ID: %u]\n", type == 0 ? "ERROR":"WARNING", message, id ); +// PANIC( "!%s:%s [ID: %u]\n", type == 0 ? "ERROR":"WARNING", message, id ); +} +void glDebugEnable() { + do_once { + typedef void (*GLDEBUGPROC)(uint32_t, uint32_t, uint32_t, uint32_t, int32_t, const char *, const void *); + typedef void (*GLDEBUGMESSAGECALLBACKPROC)(GLDEBUGPROC, const void *); + void *func = glfwGetProcAddress("glDebugMessageCallback"); + void (*glDebugMessageCallback)(GLDEBUGPROC, const void *) = (GLDEBUGMESSAGECALLBACKPROC)func; + if( func ) { + glEnable(GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB); + glDebugMessageCallback((GLDEBUGPROC)glDebugCallback, NULL); + } + } +} + +static +void glCopyBackbufferToTexture( texture_t *tex ) { // unused + glActiveTexture( GL_TEXTURE0 + texture_unit() ); + glBindTexture( GL_TEXTURE_2D, tex->id ); + glCopyTexImage2D( GL_TEXTURE_2D, 0, GL_RGB, 0, 0, window_width(), window_height(), 0 ); +} + +// ---------------------------------------------------------------------------- +// renderstate + +renderstate_t renderstate() { + renderstate_t state = {0}; + + // Set default clear color to black + state.clear_color[0] = 0.0f; // Red + state.clear_color[1] = 0.0f; // Green + state.clear_color[2] = 0.0f; // Blue + state.clear_color[3] = 1.0f; // Alpha + + // Set default color mask to GL_TRUE + state.color_mask[0] = GL_TRUE; + state.color_mask[1] = GL_TRUE; + state.color_mask[2] = GL_TRUE; + state.color_mask[3] = GL_TRUE; + + // Set default clear depth to maximum distance + state.clear_depth = 1.0; + + // Enable depth test by default with less or equal function + state.depth_test_enabled = GL_TRUE; + state.depth_write_enabled = GL_TRUE; + state.depth_func = GL_LEQUAL; + + // Disable polygon offset by default + state.polygon_offset_enabled = GL_FALSE; + state.polygon_offset_factor = 0.0f; + state.polygon_offset = 0.0f; + + // Disable blending by default + state.blend_enabled = GL_FALSE; + state.blend_func = GL_FUNC_ADD; + state.blend_src = GL_ONE; + state.blend_dst = GL_ZERO; + + // Disable culling by default but cull back faces + state.cull_face_enabled = GL_FALSE; + state.cull_face_mode = GL_BACK; + + // Disable stencil test by default + state.stencil_test_enabled = GL_FALSE; + state.stencil_func = GL_ALWAYS; + state.stencil_op_fail = GL_KEEP; + state.stencil_op_zfail = GL_KEEP; + state.stencil_op_zpass = GL_KEEP; + state.stencil_ref = 0; + state.stencil_read_mask = 0xFFFFFFFF; + state.stencil_write_mask = 0xFFFFFFFF; + + // Set default front face to counter-clockwise + state.front_face = GL_CCW; + + // Set default line width + state.line_smooth_enabled = GL_FALSE; + state.line_width = 1.0f; + + // Set default point size + state.point_size_enabled = GL_FALSE; + state.point_size = 1.0f; + + // Set default polygon mode to fill + state.polygon_mode_face = GL_FRONT_AND_BACK; + state.polygon_mode_draw = GL_FILL; + + // Disable scissor test by default + state.scissor_test_enabled = GL_FALSE; + + return state; +} + +bool renderstate_compare(const renderstate_t *stateA, const renderstate_t *stateB) { + return memcmp(stateA, stateB, sizeof(renderstate_t)) == 0; +} + +static renderstate_t last_rs; + +void renderstate_apply(const renderstate_t *state) { + if (state != NULL) { + // Compare renderstates and bail if they are the same + if (renderstate_compare(state, &last_rs)) { + return; + } + + // Store renderstate + last_rs = *state; + + // Apply clear color + glClearColor(state->clear_color[0], state->clear_color[1], state->clear_color[2], state->clear_color[3]); + + // Apply color mask + glColorMask(state->color_mask[0], state->color_mask[1], state->color_mask[2], state->color_mask[3]); + + // Apply clear depth + glClearDepth(state->clear_depth); + + // Apply depth test + if (state->depth_test_enabled) { + glEnable(GL_DEPTH_TEST); + glDepthFunc(state->depth_func); + } else { + glDisable(GL_DEPTH_TEST); + } + + // Apply polygon offset + if (state->polygon_offset_enabled) { + glEnable(GL_POLYGON_OFFSET_FILL); + glPolygonOffset(state->polygon_offset_factor, state->polygon_offset); + } else { + glDisable(GL_POLYGON_OFFSET_FILL); + } + + // Apply depth write + glDepthMask(state->depth_write_enabled); + + // Apply blending + if (state->blend_enabled) { + glEnable(GL_BLEND); + glBlendEquation(state->blend_func); + glBlendFunc(state->blend_src, state->blend_dst); + } else { + glDisable(GL_BLEND); + } + + // Apply culling @fixme + if (state->cull_face_enabled) { + glEnable(GL_CULL_FACE); + glCullFace(state->cull_face_mode); + } else { + glDisable(GL_CULL_FACE); + } + + // Apply stencil test + if (state->stencil_test_enabled) { + glEnable(GL_STENCIL_TEST); + glStencilMask(state->stencil_write_mask); + glStencilFunc(state->stencil_func, state->stencil_ref, state->stencil_read_mask); + glStencilOp(state->stencil_op_fail, state->stencil_op_zfail, state->stencil_op_zpass); + } else { + glDisable(GL_STENCIL_TEST); + } + + // Apply front face direction @fixme + glFrontFace(state->front_face); + + // Apply line width + glLineWidth(state->line_width); + + // Apply smooth lines + if (state->line_smooth_enabled) { + glEnable(GL_LINE_SMOOTH); + } else { + glDisable(GL_LINE_SMOOTH); + } + + // Apply point size + if (state->point_size_enabled) { + glEnable(GL_PROGRAM_POINT_SIZE); + glPointSize(state->point_size); + } else { + glDisable(GL_PROGRAM_POINT_SIZE); + } + + // Apply polygon mode + glPolygonMode(state->polygon_mode_face, state->polygon_mode_draw); + + // Apply scissor test + if (state->scissor_test_enabled) { + glEnable(GL_SCISSOR_TEST); + } else { + glDisable(GL_SCISSOR_TEST); + } + } +} + +// ---------------------------------------------------------------------------- +// shaders + +void shader_print(const char *source) { + for(int line = 0, i = 0; source[i] > 0; ) { + printf("\t%03d: ", line+1); + while( source[i] >= 32 || source[i] == '\t' ) fputc(source[i++], stdout); + while( source[i] > 0 && source[i] < 32 ) line += source[i++] == '\n'; + puts(""); + } +} + +// sorted by shader handle. an array of properties per shader. properties are plain strings. +static __thread map(unsigned, array(char*)) shader_reflect; + +static +GLuint shader_compile( GLenum type, const char *source ) { + GLuint shader = glCreateShader(type); + glShaderSource(shader, 1, (const char **)&source, NULL); + glCompileShader(shader); + + GLint status = GL_FALSE, length; + glGetShaderiv(shader, GL_COMPILE_STATUS, &status); + if( status == GL_FALSE ) { + glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &length); +// ASSERT(length < 2048); char buf[2048] = { 0 }; + char *buf = stack(length+1); + glGetShaderInfoLog(shader, length, NULL, buf); + + // dump log with line numbers + shader_print( source ); + PANIC("!ERROR: shader_compile(): %s\n%s\n", type == GL_VERTEX_SHADER ? "Vertex" : "Fragment", buf); + return 0; + } + + return shader; +} + +unsigned shader(const char *vs, const char *fs, const char *attribs, const char *fragcolor, const char *defines){ + return shader_geom(NULL, vs, fs, attribs, fragcolor, defines); +} + +static inline +char *shader_preprocess(const char *src, const char *defines) { + if (!src) return NULL; + + const char *glsl_version = va("#version %s", ifdef(ems, "300 es", "150")); + + // detect GLSL version if set + if (src[0] == '#' && src[1] == 'v') { + const char *end = strstri(src, "\n"); + glsl_version = va("%.*s", (int)(end-src), src); + src = end+1; + } + + return va("%s\n%s\n%s", glsl_version, defines ? defines : "", src); +} + +unsigned shader_geom(const char *gs, const char *vs, const char *fs, const char *attribs, const char *fragcolor, const char *defines) { + PRINTF(/*"!"*/"Compiling shader\n"); + + char *glsl_defines = ""; + if( defines ) { + for each_substring(defines, ",", def) { + glsl_defines = va("%s#define %s\n", glsl_defines, def); + } + } + + if(gs) + gs = shader_preprocess(gs, glsl_defines); + vs = shader_preprocess(vs, glsl_defines); + fs = shader_preprocess(fs, glsl_defines); + +#if is(ems) + { + char *vs_ = REALLOC( 0, strlen(vs) + 512 ); strcpy(vs_, vs); + char *fs_ = REALLOC( 0, strlen(fs) + 512 ); strcpy(fs_, fs); + char *gs_ = 0; if (gs) REALLOC( 0, strlen(gs) + 512 ); strcpy(gs_, gs); + strrepl(&fs_, "#version 300 es\n", "#version 300 es\nprecision mediump float;\n"); + vs = vs_; fs = fs_; gs = gs_; + } +#endif + + GLuint vert = shader_compile(GL_VERTEX_SHADER, vs); + GLuint frag = shader_compile(GL_FRAGMENT_SHADER, fs); + GLuint geom = 0; if (gs) geom = shader_compile(GL_GEOMETRY_SHADER, gs); + GLuint program = 0; + + if( vert && frag ) { + program = glCreateProgram(); + + glAttachShader(program, vert); + glAttachShader(program, frag); + if (geom) glAttachShader(program, geom); + + for( int i = 0; attribs && attribs[0]; ++i ) { + char attrib[128] = {0}; + sscanf(attribs, "%127[^,]", attrib); + while( attribs[0] && attribs[0] != ',' ) { attribs++; } + while( attribs[0] && attribs[0] == ',' ) { attribs++; break; } + if(!attrib[0]) continue; + glBindAttribLocation(program, i, attrib); + // PRINTF("Shader.attribute[%d]=%s\n", i, attrib); + } + +#if !is(ems) // @fixme + if(fragcolor) + glBindFragDataLocation(program, 0, fragcolor); +#endif + + glLinkProgram(program); + + GLint status = GL_FALSE, length; + glGetProgramiv(program, GL_LINK_STATUS, &status); +#ifdef DEBUG_SHADER + if (status != GL_FALSE && program == DEBUG_SHADER) { +#else + if (status == GL_FALSE) { +#endif + glGetProgramiv(program, GL_INFO_LOG_LENGTH, &length); + // ASSERT(length < 2048); char buf[2048] = { 0 }; + char *buf = stack(length+1); + glGetProgramInfoLog(program, length, NULL, buf); + puts("--- vs:"); + shader_print(vs); + puts("--- fs:"); + shader_print(fs); + if (geom) { + puts("--- gs:"); + shader_print(gs); + } + } + if (status == GL_FALSE) { + PANIC("ERROR: shader(): Shader/program link: %s\n", buf); + return 0; + } + + glDeleteShader(vert); + glDeleteShader(frag); + if (geom) glDeleteShader(geom); + +//#ifdef DEBUG_ANY_SHADER +// PRINTF("Shader #%d:\n", program); +// shader_print(vs); +// shader_print(fs); +//#endif + } + +/* + if( s->program ) { + strcatf(&s->name, "// vs (%s)\n%s\n\n\n", file_vs, vs); + strcatf(&s->name, "// fs (%s)\n%s\n\n\n", file_fs, fs); + } +*/ + + // shader compiled fine, before returning, let's parse the source and reflect the uniforms + array(char*) props = 0; + do_once map_init_int( shader_reflect ); + if(vs) for each_substring(vs, "\r\n", line) { + const char *found = strstr(line, "/""//"); + if( found > line && line[0] == '/' && line[1] == '/' ) continue; + if( found ) array_push(props, STRDUP(line)); + } + if(fs) for each_substring(fs, "\r\n", line) { + const char *found = strstr(line, "/""//"); + if( found > line && line[0] == '/' && line[1] == '/' ) continue; + if( found ) array_push(props, STRDUP(line)); + } + if(gs) for each_substring(gs, "\r\n", line) { + const char *found = strstr(line, "/""//"); + if( found > line && line[0] == '/' && line[1] == '/' ) continue; + if( found ) array_push(props, STRDUP(line)); + } + if( props ) { + map_insert(shader_reflect, program, props); + for( int i = 0; i < array_count(props); ++i ) shader_apply_param(program, i); + } + + return program; +} + +unsigned shader_properties(unsigned shader) { + array(char*) *found = map_find(shader_reflect, shader); + return found ? array_count(*found) : 0; +} + +char** shader_property(unsigned shader, unsigned property) { + array(char*) *found = map_find(shader_reflect, shader); + return found && property < array_count(*found) ? &(*found)[property] : NULL; +} + +void shader_apply_param(unsigned shader, unsigned param_no) { + unsigned num_properties = shader_properties(shader); + if( param_no < num_properties ) { + char *buf = *shader_property(shader, param_no); + + char type[32], name[32], line[128]; snprintf(line, 127, "%s", buf); + if( sscanf(line, "%*s %s %[^ =;/]", type, name) != 2 ) return; + + char *mins = strstr(line, "min:"); + char *sets = strstr(line, "set:"); + char *maxs = strstr(line, "max:"); + char *tips = strstr(line, "tip:"); + if( mins ) *mins = 0, mins += 4; + if( sets ) *sets = 0, sets += 4; + if( maxs ) *maxs = 0, maxs += 4; + if( tips ) *tips = 0, tips += 4; + + int is_color = !!strstri(name, "color"), top = is_color ? 1 : 10; + vec4 minv = mins ? atof4(mins) : vec4(0,0,0,0); + vec4 setv = sets ? atof4(sets) : vec4(0,0,0,0); + vec4 maxv = maxs ? atof4(maxs) : vec4(top,top,top,top); + + if(minv.x > maxv.x) swapf(&minv.x, &maxv.x); + if(minv.y > maxv.y) swapf(&minv.y, &maxv.y); + if(minv.z > maxv.z) swapf(&minv.z, &maxv.z); + if(minv.w > maxv.w) swapf(&minv.w, &maxv.w); + + if( !maxs ) { + if(setv.x > maxv.x) maxv.x = setv.x; + if(setv.y > maxv.y) maxv.y = setv.y; + if(setv.z > maxv.z) maxv.z = setv.z; + if(setv.w > maxv.w) maxv.w = setv.w; + } + + setv = clamp4(setv, minv, maxv); + + if( strchr("ibfv", type[0]) ) { + GLint shader_bak; glGetIntegerv(GL_CURRENT_PROGRAM, &shader_bak); + glUseProgram(shader); + /**/ if(type[0] == 'i') glUniform1i(glGetUniformLocation(shader, name), setv.x); + else if(type[0] == 'b') glUniform1i(glGetUniformLocation(shader, name), !!setv.x); + else if(type[0] == 'f') glUniform1f(glGetUniformLocation(shader, name), setv.x); + else if(type[3] == '2') glUniform2fv(glGetUniformLocation(shader, name), 1, &setv.x); + else if(type[3] == '3') glUniform3fv(glGetUniformLocation(shader, name), 1, &setv.x); + else if(type[3] == '4') glUniform4fv(glGetUniformLocation(shader, name), 1, &setv.x); + glUseProgram(shader_bak); + } + } +} + +void shader_apply_params(unsigned shader, const char *parameter_mask) { + unsigned num_properties = shader_properties(shader); + for( unsigned i = 0; i < num_properties; ++i ) { + char *line = *shader_property(shader,i); + + char name[32]; + if( sscanf(line, "%*s %*s %s", name) != 1 ) continue; + if( !strmatch(name, parameter_mask) ) continue; + shader_apply_param(shader, i); + } +} + +int ui_shader(unsigned shader) { + int changed = 0; + + unsigned num_properties = shader_properties(shader); + for( unsigned i = 0; i < num_properties; ++i ) { + char **ptr = shader_property(shader,i); + + char line[128]; snprintf(line, 127, "%s", *ptr); // debug: ui_label(line); + + char uniform[32], type[32], name[32], early_exit = '\0'; + if( sscanf(line, "%s %s %[^ =;/]", uniform, type, name) != 3 ) continue; // @todo optimize: move to shader() + + char *mins = strstr(line, "min:"); + char *sets = strstr(line, "set:"); + char *maxs = strstr(line, "max:"); + char *tips = strstr(line, "tip:"); + if( mins ) *mins = 0, mins += 4; + if( sets ) *sets = 0, sets += 4; + if( maxs ) *maxs = 0, maxs += 4; + if( tips ) *tips = 0, tips += 4; + + if( strcmp(uniform, "uniform") && strcmp(uniform, "}uniform") ) { if(tips) ui_label(va(ICON_MD_INFO "%s", tips)); continue; } // @todo optimize: move to shader() + + int is_color = !!strstri(name, "color"), top = is_color ? 1 : 10; + vec4 minv = mins ? atof4(mins) : vec4(0,0,0,0); + vec4 setv = sets ? atof4(sets) : vec4(0,0,0,0); + vec4 maxv = maxs ? atof4(maxs) : vec4(top,top,top,top); + char *label = !tips ? va("%c%s", name[0] - 32 * !!(name[0] >= 'a'), name+1) : + va("%c%s " ICON_MD_INFO "@%s", name[0] - 32 * !!(name[0] >= 'a'), name+1, tips); + + if(minv.x > maxv.x) swapf(&minv.x, &maxv.x); // @optimize: move to shader() + if(minv.y > maxv.y) swapf(&minv.y, &maxv.y); // @optimize: move to shader() + if(minv.z > maxv.z) swapf(&minv.z, &maxv.z); // @optimize: move to shader() + if(minv.w > maxv.w) swapf(&minv.w, &maxv.w); // @optimize: move to shader() + + if( !maxs ) { + if(setv.x > maxv.x) maxv.x = setv.x; + if(setv.y > maxv.y) maxv.y = setv.y; + if(setv.z > maxv.z) maxv.z = setv.z; + if(setv.w > maxv.w) maxv.w = setv.w; + } + + setv = clamp4(setv, minv, maxv); + + // supports int,float,vec2/3/4,color3/4 + int touched = 0; + if( type[0] == 'b' ) { + bool v = !!setv.x; + + if( (touched = ui_bool(label, &v)) != 0 ) { + setv.x = v; + } + } + else if( type[0] == 'i' ) { + int v = setv.x; + + if( (touched = ui_int(label, &v)) != 0 ) { + setv.x = clampi(v, minv.x, maxv.x); // min..max range + } + } + else if( type[0] == 'f' ) { + setv.x = clampf(setv.x, minv.x, maxv.x); + char *caption = va("%5.3f", setv.x); + setv.x = (setv.x - minv.x) / (maxv.x - minv.x); + + if( (touched = ui_slider2(label, &setv.x, caption)) != 0 ) { + setv.x = clampf(minv.x + setv.x * (maxv.x-minv.x), minv.x, maxv.x); // min..max range + } + } + else if( type[0] == 'v' && type[3] == '2' ) { + setv.xy = clamp2(setv.xy,minv.xy,maxv.xy); + + if( (touched = ui_float2(label, &setv.x)) != 0 ) { + setv.xy = clamp2(setv.xy,minv.xy,maxv.xy); + } + } + else if( type[0] == 'v' && type[3] == '3' ) { + setv.xyz = clamp3(setv.xyz,minv.xyz,maxv.xyz); + + if( (touched = (is_color ? ui_color3f : ui_float3)(label, &setv.x)) != 0 ) { + setv.xyz = clamp3(setv.xyz,minv.xyz,maxv.xyz); + } + } + else if( type[0] == 'v' && type[3] == '4' ) { + setv = clamp4(setv,minv,maxv); + + if( (touched = (is_color ? ui_color4f : ui_float4)(label, &setv.x)) != 0 ) { + setv = clamp4(setv,minv,maxv); + } + } + else if( tips ) ui_label( tips ); + + if( touched ) { + // upgrade value + *ptr = FREE(*ptr); + *ptr = stringf("%s %s %s ///set:%s min:%s max:%s tip:%s", uniform,type,name,ftoa4(setv),ftoa4(minv),ftoa4(maxv),tips?tips:""); + + // apply + shader_apply_param(shader, i); + + changed = 1; + } + } + + return changed; +} + +int ui_shaders() { + if( !map_count(shader_reflect) ) return ui_label(ICON_MD_WARNING " No shaders with annotations loaded."), 0; + + int changed = 0; + for each_map_ptr(shader_reflect, unsigned, k, array(char*), v) { + int open = 0, clicked_or_toggled = 0; + char *id = va("##SHD%d", *k); + char *title = va("Shader %d", *k); + for( int p = (open = ui_collapse(title, id)), dummy = (clicked_or_toggled = ui_collapse_clicked()); p; ui_collapse_end(), p = 0) { + ui_label(va("Shader %d",*k)); + changed |= ui_shader(*k); + } + } + return changed; +} + +unsigned compute(const char *cs){ + #if is(ems) + return 0; + #else + PRINTF(/*"!"*/"Compiling compute shader\n"); + + cs = cs[0] == '#' && cs[1] == 'c' ? cs : va("#version 450 core\n%s", cs ? cs : ""); + + GLuint comp = shader_compile(GL_COMPUTE_SHADER, cs); + GLuint program = 0; + + if( comp ) { + program = glCreateProgram(); + + glAttachShader(program, comp); + + glLinkProgram(program); + + GLint status = GL_FALSE, length; + glGetProgramiv(program, GL_LINK_STATUS, &status); +#ifdef DEBUG_SHADER + if (status != GL_FALSE && program == DEBUG_SHADER) { +#else + if (status == GL_FALSE) { +#endif + glGetProgramiv(program, GL_INFO_LOG_LENGTH, &length); + char *buf = stack(length+1); + glGetProgramInfoLog(program, length, NULL, buf); + puts("--- cs:"); + shader_print(cs); + } + if (status == GL_FALSE) { + PANIC("ERROR: shader(): Shader/program link: %s\n", buf); + return 0; + } + + glDeleteShader(comp); + } + return program; + #endif +} + +void compute_dispatch(unsigned wx, unsigned wy, unsigned wz){ + glDispatchCompute(wx, wy, wz); +} + +void write_barrier(){ + glMemoryBarrier(GL_ALL_BARRIER_BITS); +} + +void write_barrier_image(){ + glMemoryBarrier(GL_SHADER_IMAGE_ACCESS_BARRIER_BIT); +} + +void shader_destroy(unsigned program){ + if( program == ~0u ) return; + glDeleteProgram(program); +// if(s->name) FREE(s->name), s->name = NULL; +} + +unsigned ssbo_create(const void *data, int len, unsigned usage){ + static GLuint gl_usage[] = { GL_STATIC_DRAW, GL_STATIC_READ, GL_STATIC_COPY, GL_DYNAMIC_DRAW, GL_DYNAMIC_READ, GL_DYNAMIC_COPY, GL_STREAM_DRAW, GL_STREAM_READ, GL_STREAM_COPY }; + GLuint ssbo; + glGenBuffers(1, &ssbo); + glBindBuffer(GL_SHADER_STORAGE_BUFFER, ssbo); + glBufferData(GL_SHADER_STORAGE_BUFFER, len, data, gl_usage[usage]); + return ssbo; +} + +void ssbo_destroy(unsigned ssbo){ + glDeleteBuffers(1, &ssbo); +} + +void ssbo_update(int offset, int len, const void *data){ + glBufferSubData(GL_SHADER_STORAGE_BUFFER, offset, len, data); +} + +void *ssbo_map(unsigned access){ + static GLenum gl_access[] = {GL_READ_ONLY, GL_WRITE_ONLY, GL_READ_WRITE}; + return glMapBuffer(GL_SHADER_STORAGE_BUFFER, gl_access[access]); +} +void ssbo_unmap(){ + glUnmapBuffer(GL_SHADER_STORAGE_BUFFER); +} + +void ssbo_bind(unsigned ssbo, unsigned unit){ + glBindBuffer(GL_SHADER_STORAGE_BUFFER, ssbo); + glBindBufferBase(GL_SHADER_STORAGE_BUFFER, unit, ssbo); +} + +void ssbo_unbind(){ + glBindBuffer(GL_SHADER_STORAGE_BUFFER, 0); +} + +static __thread unsigned last_shader = -1; + +int shader_uniform(const char *name) { + return glGetUniformLocation(last_shader, name); +} +unsigned shader_get_active() { return last_shader; } +unsigned shader_bind(unsigned program) { unsigned ret = last_shader; return glUseProgram(last_shader = program), ret; } +static inline void shader_int_(int uniform, int i) { glUniform1i(uniform, i); } +static inline void shader_float_(int uniform, float f) { glUniform1f(uniform, f); } +static inline void shader_vec2_(int uniform, vec2 v) { glUniform2fv(uniform, 1, &v.x); } +static inline void shader_vec3_(int uniform, vec3 v) { glUniform3fv(uniform, 1, &v.x); } +static inline void shader_vec3v_(int uniform, int count, vec3 *v) { glUniform3fv(uniform, count, &v[0].x); } +static inline void shader_vec4_(int uniform, vec4 v) { glUniform4fv(uniform, 1, &v.x); } +static inline void shader_mat44_(int uniform, mat44 m) { glUniformMatrix4fv(uniform, 1, GL_FALSE/*GL_TRUE*/, m); } +static inline void shader_cubemap_(int sampler, unsigned texture) { + int id = texture_unit(); + glUniform1i(sampler, id); + glActiveTexture(GL_TEXTURE0 + id); + glBindTexture(GL_TEXTURE_CUBE_MAP, texture); +} +static inline void shader_bool_(int uniform, bool x) { glUniform1i(uniform, x); } +static inline void shader_uint_(int uniform, unsigned x ) { glUniform1ui(uniform, x); } +static inline void shader_texture_unit_(int sampler, unsigned id, unsigned unit) { + // @todo. if tex.h == 1 ? GL_TEXTURE_1D : GL_TEXTURE_2D + glUniform1i(sampler, unit); + glActiveTexture(GL_TEXTURE0 + unit); + glBindTexture(GL_TEXTURE_2D, id); +} +static inline void shader_texture_(int sampler, texture_t t) { shader_texture_unit_(sampler, t.id, texture_unit()); } + +// public api +void shader_int(const char *uniform, int i) { glUniform1i(shader_uniform(uniform), i); } +void shader_float(const char *uniform, float f) { glUniform1f(shader_uniform(uniform), f); } +void shader_vec2(const char *uniform, vec2 v) { glUniform2fv(shader_uniform(uniform), 1, &v.x); } +void shader_vec3(const char *uniform, vec3 v) { glUniform3fv(shader_uniform(uniform), 1, &v.x); } +void shader_vec3v(const char *uniform, int count, vec3 *v) { glUniform3fv(shader_uniform(uniform), count, &v[0].x); } +void shader_vec4(const char *uniform, vec4 v) { glUniform4fv(shader_uniform(uniform), 1, &v.x); } +void shader_mat44(const char *uniform, mat44 m) { glUniformMatrix4fv(shader_uniform(uniform), 1, GL_FALSE/*GL_TRUE*/, m); } +void shader_cubemap(const char *sampler, unsigned texture) { + int id = texture_unit(); + glUniform1i(shader_uniform(sampler), id); + glActiveTexture(GL_TEXTURE0 + id); + glBindTexture(GL_TEXTURE_CUBE_MAP, texture); +} +void shader_bool(const char *uniform, bool x) { glUniform1i(shader_uniform(uniform), x); } +void shader_uint(const char *uniform, unsigned x ) { glUniform1ui(shader_uniform(uniform), x); } +void shader_texture(const char *sampler, texture_t t) { shader_texture_unit(sampler, t.id, texture_unit()); } +void shader_texture_unit(const char *sampler, unsigned id, unsigned unit) { + // @todo. if tex.h == 1 ? GL_TEXTURE_1D : GL_TEXTURE_2D + glUniform1i(shader_uniform(sampler), unit); + glActiveTexture(GL_TEXTURE0 + unit); + glBindTexture(GL_TEXTURE_2D, id); +} +void shader_image(texture_t t, unsigned unit, unsigned level, int layer /* -1 to disable layered access */, unsigned access){ + shader_image_unit(t.id, unit, level, layer, t.texel_type, access); +} +void shader_image_unit(unsigned texture, unsigned unit, unsigned level, int layer, unsigned texel_type, unsigned access){ + static GLenum gl_access[] = {GL_READ_ONLY, GL_WRITE_ONLY, GL_READ_WRITE}; + glBindImageTexture(unit, texture, level, layer!=-1, layer!=-1?layer:0, gl_access[access], texel_type); +} + +void shader_colormap(const char *name, colormap_t c ) { + // assumes shader uses `struct { vec4 color; bool has_tex } name + sampler2D name_tex;` + shader_vec4( va("%s.color", name), c.color ); + shader_bool( va("%s.has_tex", name), c.texture != NULL ); + if( c.texture ) shader_texture( va("%s_tex", name), *c.texture ); +} + +// ----------------------------------------------------------------------------- +// colors + +unsigned rgba( uint8_t r, uint8_t g, uint8_t b, uint8_t a ) { + return (unsigned)a << 24 | b << 16 | g << 8 | r; +} +unsigned bgra( uint8_t b, uint8_t g, uint8_t r, uint8_t a ) { + return rgba(r,g,b,a); +} +unsigned alpha( unsigned rgba ) { + return rgba >> 24; +} + +unsigned rgbaf(float r, float g, float b, float a) { + return rgba(r * 255, g * 255, b * 255, a * 255); +} +unsigned bgraf(float b, float g, float r, float a) { + return rgba(r * 255, g * 255, b * 255, a * 255); +} + +unsigned atorgba(const char *s) { + if( s[0] != '#' ) return 0; + unsigned r = 0, g = 0, b = 0, a = 255; + int slen = strspn(s+1, "0123456789abcdefABCDEF"); + if( slen > 8 ) slen = 8; + /**/ if( slen == 6 ) sscanf(s+1, "%2x%2x%2x", &r,&g,&b); + else if( slen == 8 ) sscanf(s+1, "%2x%2x%2x%2x", &r,&g,&b,&a); + else if( slen == 3 ) sscanf(s+1, "%1x%1x%1x", &r,&g,&b ), r=r<<4|r,g=g<<4|g,b=b<<4|b; + else if( slen == 4 ) sscanf(s+1, "%1x%1x%1x%1x", &r,&g,&b,&a), r=r<<4|r,g=g<<4|g,b=b<<4|b,a=a<<4|a; + return rgba(r,g,b,a); +} +char *rgbatoa(unsigned rgba) { + unsigned a = rgba >> 24; + unsigned b =(rgba >> 16) & 255; + unsigned g =(rgba >> 8) & 255; + unsigned r = rgba & 255; + char *s = va("# "); + sprintf(s+1, "%02x%02x%02x%02x", r,g,b,a); + return s; +} + +// ----------------------------------------------------------------------------- +// images + +image_t image_create(int x, int y, int flags) { + int n = 3; // defaults to RGB + if(flags & IMAGE_R) n = 1; + if(flags & IMAGE_RG) n = 2; + if(flags & IMAGE_RGB) n = 3; + if(flags & IMAGE_RGBA) n = 4; + image_t img; img.x = x; img.y = y; img.n = n; + img.pixels = REALLOC(0, x * y * n ); // @fixme: image_destroy() requires stbi allocator to match REALLOC + return img; +} + +image_t image_from_mem(const void *data, int size, int flags) { + image_t img = {0}; + if( data && size ) { + stbi_set_flip_vertically_on_load(flags & IMAGE_FLIP ? 1 : 0); + + int n = 0; + if(flags & IMAGE_R) n = 1; + if(flags & IMAGE_RG) n = 2; + if(flags & IMAGE_RGB) n = 3; + if(flags & IMAGE_RGBA) n = 4; + if(flags & IMAGE_FLOAT) + img.pixels = stbi_loadf_from_memory((const stbi_uc*)data, size, (int*)&img.x,(int*)&img.y,(int*)&img.n, n); + else + img.pixels = stbi_load_from_memory((const stbi_uc*)data, size, (int*)&img.x,(int*)&img.y,(int*)&img.n, n); + if( img.pixels ) { + PRINTF("Loaded image (%dx%d %.*s->%.*s)\n",img.w,img.h,img.n,"RGBA",n?n:img.n,"RGBA"); + } else { + // PANIC("Error loading image (%s)\n", pathfile); + } + img.n = n ? n : img.n; + } + return img; +} + +image_t image(const char *pathfile, int flags) { + //const char *fname = vfs_remap(pathfile); + // if( !fname[0] ) fname = vfs_remap(va("%s.png",pathfile)); // needed? + // if( !fname[0] ) fname = vfs_remap(va("%s.jpg",pathfile)); // needed? + // if( !fname[0] ) fname = vfs_remap(va("%s.tga",pathfile)); // needed? + // if( !fname[0] ) fname = vfs_remap(va("%s.jpg.png",pathfile)); // needed? + // if( !fname[0] ) fname = vfs_remap(va("%s.tga.png",pathfile)); // needed? + // if( !fname[0] ) fname = vfs_remap(va("%s.png.jpg",pathfile)); // needed? + // if( !fname[0] ) fname = vfs_remap(va("%s.tga.jpg",pathfile)); // needed? + + int size = 0; + char *data = vfs_load(pathfile, &size); + return image_from_mem(data, size, flags); +} + +void image_destroy(image_t *img) { + if(img->pixels) stbi_image_free(img->pixels); + img->pixels = 0; // *img = (image_t){0}; // do not clear fields yet. might be useful in the future. +} + +// bilinear interpolation (uv must be in image coords, range [0..w-1,0..h-1]) +static +vec3 bilinear(image_t in, vec2 uv) { // image_bilinear_pixel() ? + float w = in.x, h = in.y, u = uv.x, v = uv.y; + float u1 = (int)u, v1 = (int)v, u2 = minf(u1+1, w-1), v2 = minf(v1+1, h-1); + float c1 = u - u1, c2 = v - v1; + uint8_t *p1 = &in.pixels8[ in.n * (int)(u1 + v1 * in.w) ]; + uint8_t *p2 = &in.pixels8[ in.n * (int)(u2 + v1 * in.w) ]; + uint8_t *p3 = &in.pixels8[ in.n * (int)(u1 + v2 * in.w) ]; + uint8_t *p4 = &in.pixels8[ in.n * (int)(u2 + v2 * in.w) ]; + vec3 A = vec3( p1[0], p1[1], p1[2] ); + vec3 B = vec3( p2[0], p2[1], p2[2] ); + vec3 C = vec3( p3[0], p3[1], p3[2] ); + vec3 D = vec3( p4[0], p4[1], p4[2] ); + return mix3(mix3(A, B, c1), mix3(C, D, c1), c2); +} + +// ----------------------------------------------------------------------------- +// textures + +int texture_unit() { + static int textureUnit = 0, totalTextureUnits = 0; + do_once glGetIntegerv(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS, &totalTextureUnits); + // ASSERT(textureUnit < totalTextureUnits, "%d texture units exceeded", totalTextureUnits); + return textureUnit++ % totalTextureUnits; +} + +unsigned texture_update(texture_t *t, unsigned w, unsigned h, unsigned n, const void *pixels, int flags) { + if( t && !t->id ) { + glGenTextures( 1, &t->id ); + return texture_update(t, w, h, n, pixels, flags); + } + ASSERT( t && t->id ); + ASSERT( n <= 4 ); + GLuint pixel_types[] = { GL_RED, GL_RED, GL_RG, GL_RGB, GL_RGBA, GL_R32F, GL_R32F, GL_RG32F, GL_RGB32F, GL_RGBA32F }; + GLenum pixel_storage = flags & TEXTURE_FLOAT ? GL_FLOAT : GL_UNSIGNED_BYTE; + GLuint pixel_type = pixel_types[ n ]; + GLuint texel_type = t->texel_type = pixel_types[ n + 5 * !!(flags & TEXTURE_FLOAT) ]; + GLenum wrap = GL_CLAMP_TO_EDGE; + GLenum min_filter = GL_NEAREST, mag_filter = GL_NEAREST; +// GLfloat color = (flags&7)/7.f, border_color[4] = { color, color, color, 1.f }; + + if( flags & TEXTURE_BGR ) if( pixel_type == GL_RGB ) pixel_type = GL_BGR; + if( flags & TEXTURE_BGR ) if( pixel_type == GL_RGBA ) pixel_type = GL_BGRA; + if( flags & TEXTURE_SRGB ) if( texel_type == GL_RGB ) texel_type = GL_SRGB; + if( flags & TEXTURE_SRGB ) if( texel_type == GL_RGBA ) texel_type = GL_SRGB_ALPHA; // GL_SRGB8_ALPHA8 ? + + if( flags & TEXTURE_BC1 ) texel_type = GL_COMPRESSED_RGBA_S3TC_DXT1_EXT; + if( flags & TEXTURE_BC2 ) texel_type = GL_COMPRESSED_RGBA_S3TC_DXT3_EXT; + if( flags & TEXTURE_BC3 ) texel_type = GL_COMPRESSED_RGBA_S3TC_DXT5_EXT; + if( flags & TEXTURE_DEPTH ) texel_type = pixel_type = GL_DEPTH_COMPONENT; // GL_DEPTH_COMPONENT32 + + if( flags & TEXTURE_REPEAT ) wrap = GL_REPEAT; + if( flags & TEXTURE_BORDER ) wrap = GL_CLAMP_TO_BORDER; + if( flags & TEXTURE_LINEAR ) min_filter = GL_LINEAR, mag_filter = GL_LINEAR; + if( flags & TEXTURE_MIPMAPS ) min_filter = flags & TEXTURE_LINEAR ? GL_LINEAR_MIPMAP_LINEAR : GL_NEAREST_MIPMAP_LINEAR; // : GL_LINEAR_MIPMAP_NEAREST; maybe? + if( flags & TEXTURE_MIPMAPS ) mag_filter = flags & TEXTURE_LINEAR ? GL_LINEAR : GL_NEAREST; + +#if 0 + if( 0 ) { // flags & TEXTURE_PREMULTIPLY_ALPHA ) + uint8_t *p = pixels; + if(n == 2) for( unsigned i = 0; i < 2*w*h; i += 2 ) { + p[i] = (p[i] * p[i+1] + 128) >> 8; + } + if(n == 4) for( unsigned i = 0; i < 4*w*h; i += 4 ) { + p[i+0] = (p[i+0] * p[i+3] + 128) >> 8; + p[i+1] = (p[i+1] * p[i+3] + 128) >> 8; + p[i+2] = (p[i+2] * p[i+3] + 128) >> 8; + } + } +#endif + +GLenum texture_type = t->flags & TEXTURE_ARRAY ? GL_TEXTURE_2D_ARRAY : GL_TEXTURE_2D; // @fixme: test GL_TEXTURE_2D_ARRAY + +//glPixelStorei( GL_UNPACK_ALIGNMENT, n < 4 ? 1 : 4 ); // for framebuffer reading +//glActiveTexture(GL_TEXTURE0 + (flags&7)); + glBindTexture(texture_type, t->id); + glTexImage2D(texture_type, 0, texel_type, w, h, 0, pixel_type, pixel_storage, pixels); + glTexParameteri(texture_type, GL_TEXTURE_WRAP_S, wrap); + glTexParameteri(texture_type, GL_TEXTURE_WRAP_T, wrap); + glTexParameteri(texture_type, GL_TEXTURE_MIN_FILTER, min_filter); + glTexParameteri(texture_type, GL_TEXTURE_MAG_FILTER, mag_filter); + + if (flags & TEXTURE_ANISOTROPY) { + GLfloat value, max_anisotropy = 16.0f; + glGetFloatv(GL_MAX_TEXTURE_MAX_ANISOTROPY, &value); + + value = (value > max_anisotropy) ? max_anisotropy : value; + glTexParameterf(texture_type, GL_TEXTURE_MAX_ANISOTROPY, value); + } + +#if 0 // only for sampler2DShadow + if( flags & TEXTURE_DEPTH ) glTexParameteri(texture_type, GL_TEXTURE_COMPARE_MODE, GL_COMPARE_REF_TO_TEXTURE); + if( flags & TEXTURE_DEPTH ) glTexParameteri(texture_type, GL_TEXTURE_COMPARE_FUNC, GL_LEQUAL); +#endif +// if( flags & TEXTURE_BORDER ) glTexParameterfv(texture_type, GL_TEXTURE_BORDER_COLOR, border_color); + if( flags & TEXTURE_MIPMAPS ) glGenerateMipmap(texture_type); + +if( flags & TEXTURE_MIPMAPS ) { + GLfloat max_aniso = 0; +// glGetFloatv(GL_MAX_TEXTURE_MAX_ANISOTROPY, &max_aniso); +max_aniso = 4; +// glTexParameterf(texture_type, GL_TEXTURE_MAX_ANISOTROPY, max_aniso); +} + + // glBindTexture(texture_type, 0); // do not unbind. current code expects texture to be bound at function exit + + t->w = w; + t->h = h; + t->n = n; + t->flags = flags; + t->filename = t->filename ? t->filename : ""; + + return t->id; +} + +texture_t texture_create(unsigned w, unsigned h, unsigned n, const void *pixels, int flags) { + texture_t texture = {0}; + glGenTextures( 1, &texture.id ); + texture_update( &texture, w, h, n, pixels, flags ); + texture.transparent = texture.n > 3; // @fixme: should be true only if any pixel.a == 0 + return texture; +} + +texture_t texture_checker() { + static texture_t texture = {0}; + if( !texture.id ) { +#if 0 + float pixels[] = { 1,0.5,0.5,1 }; + texture = texture_create(2,2,1, pixels, TEXTURE_FLOAT|TEXTURE_MIPMAPS|TEXTURE_REPEAT|TEXTURE_BORDER); +#else + uint32_t *pixels = REALLOC(0, 256*256*4); + for (int y = 0, i = 0; y < 256; y++) { + for (int x = 0; x < 256; x++) { +#if 0 + extern const uint32_t secret_palette[32]; + uint32_t rgb = secret_palette[ y / 8 ] * !!((x ^ y) & 0x8); + pixels[i++] = (rgb>>16) & 255; + pixels[i++] = (rgb>>8) & 255; + pixels[i++] = (rgb>>0) & 255; + pixels[i++] = 255; +#elif 0 + extern const uint32_t secret_palette[32]; + uint32_t rgb = ((x ^ y) & 0x8) ? secret_palette[6] : secret_palette[ 8 + ((x^y) / (256/6)) ]; + pixels[i++] = (rgb>>16) & 255; + pixels[i++] = (rgb>>8) & 255; + pixels[i++] = (rgb>>0) & 255; + pixels[i++] = 255; +#elif 0 + extern const uint32_t secret_palette[32]; + uint32_t lum = (x^y) & 8 ? 128 : (x^y) & 128 ? 192 : 255; + uint32_t rgb = rgba(lum,lum,lum,255); + pixels[i++] = rgb; +#else + int j = y, i = x; + unsigned char *p = (unsigned char *)&pixels[x + y * 256]; + p[0] = (i / 16) % 2 == (j / 16) % 2 ? 255 : 0; // r + p[1] = ((i - j) / 16) % 2 == 0 ? 255 : 0; // g + p[2] = ((i + j) / 16) % 2 == 0 ? 255 : 0; // b + p[3] = 255; // a +#endif + } + } + texture = texture_create(256,256,4, pixels, TEXTURE_RGBA|TEXTURE_MIPMAPS|TEXTURE_REPEAT|TEXTURE_BORDER); + FREE(pixels); +#endif + } + return texture; +} + +texture_t texture_from_mem(const void *ptr, int len, int flags) { + image_t img = image_from_mem(ptr, len, flags); + if( img.pixels ) { + texture_t t = texture_create(img.x, img.y, img.n, img.pixels, flags); + image_destroy(&img); + return t; + } + return texture_checker(); +} + +texture_t texture(const char *pathfile, int flags) { + // PRINTF("Loading file %s\n", pathfile); + image_t img = image(pathfile, flags); + if( img.pixels ) { + texture_t t = texture_create(img.x, img.y, img.n, img.pixels, flags); + t.filename = STRDUP(file_name(pathfile)); + image_destroy(&img); + return t; + } + return texture_checker(); +} + +void texture_destroy( texture_t *t ) { + if(t->filename && t->filename[0]) FREE(t->filename), t->filename = 0; + if(t->fbo) fbo_destroy(t->fbo), t->fbo = 0; + if(t->id) glDeleteTextures(1, &t->id), t->id = 0; + *t = (texture_t){0}; +} + +bool texture_rec_begin(texture_t *t, unsigned tw, unsigned th) { + for( unsigned w = tw ? tw : window_width(), h = th ? th : window_height(); w*h ; ) { + // resize if needed + if( t->w != w || t->h != h ) { + // re-create texture, set texture parameters and content + texture_update(t, w, h, 4, NULL, TEXTURE_RGBA); + if(!t->fbo) t->fbo = fbo(t->id, 0, 0); + } + // bind fbo to texture + fbo_bind(t->fbo); + return true; + } + return false; + +} +void texture_rec_end(texture_t *t) { + fbo_unbind(); +} + +// ktx texture loader +// - rlyeh, public domain +// +// [ref] https://developer.nvidia.com/astc-texture-compression-for-game-assets +// +// # Compatibility and modes. What to choose. +// - iOS: PVRTC1_4_RGB or PVRTC1_4 (RGBA) with q:pvrtcnormal. +// - Desktop (OSX/Linux/Windows): BC1, BC1a or BC3 with q:normal. +// - Android: ETC2_RGB or ETC2_RGBA with q:etcfast. ASTC_4x4 or ASTC_8x8 with q:astcmedium, as a fallback. + +#if 0 +enum { + // for glFormat + GLFORMAT_RED = 0x1903, + GLFORMAT_RG = 0x8227, + GLFORMAT_RGB = 0x1907, + GLFORMAT_RGBA = 0x1908, + //GLFORMAT_ALPHA = 0x1906, // 8 + //GLFORMAT_LUMINANCE = 0x1909, // 8 + //GLFORMAT_LUMINANCE_ALPHA = 0x190A, // 88 + + // for glType + GLTYPE_UNSIGNED_BYTE = 0x1401, + + // for glInternalFormat: RAW // @todo: SRGB, SRGBA, SBGR, SBGRA + UNCOMPRESSED_RGB = 0x8051, // 888, GL_RGB8_EXT + UNCOMPRESSED_RGB_565 = 0x8363, + UNCOMPRESSED_RGBA = 0x8058, // 8888, GL_RGBA8_EXT + UNCOMPRESSED_RGBA_4444 = 0x8033, + UNCOMPRESSED_RGBA_5551 = 0x8034, + UNCOMPRESSED_BGR = 0x80E0, // 888 + UNCOMPRESSED_BGRA = 0x80E1, // 8888 + + // for glInternalFormat: S3TC/DXTn/BCn // @todo: BC4,5,6,7* + COMPRESSED_RGB_BC1 = 0x83F0, // DXT1 + COMPRESSED_RGBA_BC1 = 0x83F1, // DXT1a, BC1a + COMPRESSED_RGBA_BC2 = 0x83F2, // DXT3 + COMPRESSED_RGBA_BC3 = 0x83F3, // DXT5 + COMPRESSED_RGBA_BC7 = 0x8E8C, // COMPRESSED_RGBA_BPTC_UNORM_ARB + COMPRESSED_SRGB_BC1 = 0x8C4C, + COMPRESSED_SRGBA_BC1 = 0x8C4D, + COMPRESSED_SRGBA_BC2 = 0x8C4E, + COMPRESSED_SRGBA_BC3 = 0x8C4F, + // RGB_BC7f COMPRESSED_RGB_BPTC_SIGNED_FLOAT_ARB + // RGB_BC7uf COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_ARB + // RGBA_BC7 COMPRESSED_RGBA_BPTC_UNORM_ARB + // SRGBA_BC7 COMPRESSED_SRGBA_BPTC_UNORM_ARB + + // for glInternalFormat: ETC2+EAC + COMPRESSED_R_EAC = 0x9270, // 4bpp + COMPRESSED_R_EAC_SIGNED = 0x9271, // 4bpp. can preserve 0 + COMPRESSED_RG_EAC = 0x9272, // 8bpp + COMPRESSED_RG_EAC_SIGNED = 0x9273, // 8bbp. can preserve 0 + COMPRESSED_RGB_ETC2 = 0x9274, // 4bpp + COMPRESSED_RGBA_ETC2 = 0x9276, // 4bpp A1 + COMPRESSED_RGBA_ETC2_EAC = 0x9278, // 8bpp + COMPRESSED_SRGB_ETC2 = 0x9275, // 4bpp + COMPRESSED_SRGBA_ETC2 = 0x9277, // 4bpp A1 + COMPRESSED_SRGBA_ETC2_EAC = 0x9279, // 8bpp + + // for glInternalFormat: PVR + COMPRESSED_RGB_PVR1_2 = 0x8C01, + COMPRESSED_RGB_PVR1_4 = 0x8C00, + COMPRESSED_RGBA_PVR1_2 = 0x8C03, + COMPRESSED_RGBA_PVR1_4 = 0x8C02, + + COMPRESSED_SRGB_PVR1_2 = 0x8A54, // _EXT + COMPRESSED_SRGB_PVR1_4 = 0x8A55, // _EXT + COMPRESSED_SRGBA_PVR1_2 = 0x8A56, // _EXT + COMPRESSED_SRGBA_PVR1_4 = 0x8A57, // _EXT + + COMPRESSED_RGBA_PVR2_2 = 0x9137, + COMPRESSED_RGBA_PVR2_4 = 0x9138, + COMPRESSED_SRGBA_PVR2_2 = 0x93F0, + COMPRESSED_SRGBA_PVR2_4 = 0x93F1, + + // for glInternalFormat: ASTC + COMPRESSED_RGBA_ASTC4x4 = 0x93B0, // 8.00bpp + COMPRESSED_RGBA_ASTC5x4 = 0x93B1, // 6.40bpp + COMPRESSED_RGBA_ASTC5x5 = 0x93B2, // 5.12bpp + COMPRESSED_RGBA_ASTC6x5 = 0x93B3, // 4.27bpp + COMPRESSED_RGBA_ASTC6x6 = 0x93B4, // 3.56bpp + COMPRESSED_RGBA_ASTC8x5 = 0x93B5, // 3.20bpp + COMPRESSED_RGBA_ASTC8x6 = 0x93B6, // 2.67bpp + COMPRESSED_RGBA_ASTC8x8 = 0x93B7, // 2.56bpp + COMPRESSED_RGBA_ASTC10x5 = 0x93B8, // 2.13bpp + COMPRESSED_RGBA_ASTC10x6 = 0x93B9, // 2.00bpp + COMPRESSED_RGBA_ASTC10x8 = 0x93BA, // 1.60bpp + COMPRESSED_RGBA_ASTC10x10 = 0x93BB, // 1.28bpp + COMPRESSED_RGBA_ASTC12x10 = 0x93BC, // 1.07bpp + COMPRESSED_RGBA_ASTC12x12 = 0x93BD, // 0.89bpp + + COMPRESSED_SRGBA_ASTC4x4 = 0x93D0, // 8.00bpp SRGB8 A8 + COMPRESSED_SRGBA_ASTC5x4 = 0x93D1, // 6.40bpp SRGB8 A8 + COMPRESSED_SRGBA_ASTC5x5 = 0x93D2, // 5.12bpp SRGB8 A8 + COMPRESSED_SRGBA_ASTC6x5 = 0x93D3, // 4.27bpp SRGB8 A8 + COMPRESSED_SRGBA_ASTC6x6 = 0x93D4, // 3.56bpp SRGB8 A8 + COMPRESSED_SRGBA_ASTC8x5 = 0x93D5, // 3.20bpp SRGB8 A8 + COMPRESSED_SRGBA_ASTC8x6 = 0x93D6, // 2.67bpp SRGB8 A8 + COMPRESSED_SRGBA_ASTC8x8 = 0x93D7, // 2.56bpp SRGB8 A8 + COMPRESSED_SRGBA_ASTC10x5 = 0x93D8, // 2.13bpp SRGB8 A8 + COMPRESSED_SRGBA_ASTC10x6 = 0x93D9, // 2.00bpp SRGB8 A8 + COMPRESSED_SRGBA_ASTC10x8 = 0x93DA, // 1.60bpp SRGB8 A8 + COMPRESSED_SRGBA_ASTC10x10 = 0x93DB, // 1.28bpp SRGB8 A8 + COMPRESSED_SRGBA_ASTC12x10 = 0x93DC, // 1.07bpp SRGB8 A8 + COMPRESSED_SRGBA_ASTC12x12 = 0x93DD, // 0.89bpp SRGB8 A8 + + // others: + // COMPRESSED_RED_RGTC1 + // COMPRESSED_SIGNED_RED_RGTC1 + // COMPRESSED_RG_RGTC2 + // COMPRESSED_SIGNED_RG_RGTC2 +}; +#endif + +#pragma pack(push, 1) // not really needed. the struct is exactly 64 bytes, and all members are 32-bit unsigned +typedef struct ktx_header { + unsigned identifier[3]; // "«KTX 11»\r\n\x1A\n" + unsigned endianness; // 0x04030201 if match + + unsigned glType; // 0 if compressed; otherwise: UNSIGNED_BYTE, UNSIGNED_SHORT_5_6_5, etc. + unsigned glTypeSize; // 1 if compressed; otherwise, size in bytes of glType for endianness conversion. not needed. + unsigned glFormat; // STENCIL_INDEX, DEPTH_COMPONENT, DEPTH_STENCIL, RED, GREEN, BLUE, RG, RGB, RGBA, BGR, BGRA, RED_INTEGER, GREEN_INTEGER, BLUE_INTEGER, RG_INTEGER, RGB_INTEGER, RGBA_INTEGER, BGR_INTEGER, BGRA_INTEGER, + unsigned glInternalFormat; // COMPRESSED_RED, COMPRESSED_RG, COMPRESSED_RGB, COMPRESSED_RGBA, COMPRESSED_SRGB, COMPRESSED_SRGB_ALPHA, COMPRESSED_RED_RGTC1, COMPRESSED_SIGNED_RED_RGTC1, COMPRESSED_RG_RGTC2, COMPRESSED_SIGNED_RG_RGTC2, COMPRESSED_RGBA_BPTC_UNORM, COMPRESSED_SRGB_ALPHA_BPTC_UNORM, COMPRESSED_RGB_BPTC_SIGNED_FLOAT, COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT, COMPRESSED_RGB8_ETC2, COMPRESSED_SRGB8_ETC2, COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2, COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2, COMPRESSED_RGBA8_ETC2_EAC, COMPRESSED_SRGB8_ALPHA8_ETC2_EAC, COMPRESSED_R11_EAC, COMPRESSED_SIGNED_R11_EAC, COMPRESSED_RG11_EAC, COMPRESSED_SIGNED_RG11_EAC, + unsigned glBaseInternalFormat; // DEPTH_COMPONENT, DEPTH_STENCIL, RED, RG, RGB, RGBA, STENCIL_INDEX, + + unsigned width; + unsigned height; + unsigned depth; + + unsigned num_surfaces; // >1 for material + unsigned num_faces; // =6 for cubemaps (+X,-X,+Y,-Y,+Z,-Z order), 1 otherwise + unsigned num_mipmaps; // >1 for mipmaps + + unsigned metadata_size; // length of following header + // struct ktx_metadata { + // unsigned key_and_value_size; + // char key_and_value[key_and_value_size]; + // char value_padding[3 - ((key_and_value_size + 3) % 4)]; + // }; + // struct ktx_texture_data { + // unsigned size; + // char data[0]; + // } tx; +} ktx_header; +#pragma pack(pop) + +typedef struct ktx_texture { + unsigned width; + unsigned height; + unsigned depth; + unsigned size; + const char* data; +} ktx_texture; + +typedef struct ktx { + ktx_header hdr; + const char *error; +} ktx; + +static __thread array(ktx_texture) ktx_textures; + +static +ktx ktx_load(const void *data, unsigned int len) { + ktx ctx = {0}; + + // check ktx signature + bool is_ktx = (len > sizeof(ktx_header)) && !memcmp(data, "\xABKTX 11\xBB\r\n\x1A\n", 12); + if( !is_ktx ) { + return ctx.error = "ERROR_BAD_KTX_FILE", ctx; + } + + // copy texture header + ktx_header *hdr = &ctx.hdr; + *hdr = *((const ktx_header *)data); + + // sanity checks + STATIC_ASSERT(sizeof(ktx_header) == (16*4)); + for( int i = 0; i < sizeof(ktx_header)/4; ++i) { + i[(unsigned*)hdr] = lil32(i[(unsigned*)hdr]); + } + if( hdr->endianness != 0x04030201 ) { + return ctx.error = "ERROR_BAD_ENDIANNESS", ctx; + } + if( (hdr->num_faces != 1) && (hdr->num_faces != 6) ) { + return ctx.error = "ERROR_BAD_NUMBER_OF_FACES", ctx; + } + + // normalize glInternalFormat if uncompressed. + if( hdr->glType != 0 ) { + hdr->glInternalFormat = hdr->glBaseInternalFormat; + } + + // normalize [1..N] range + hdr->num_mipmaps += !hdr->num_mipmaps; + hdr->num_surfaces += !hdr->num_surfaces; + hdr->num_faces += !hdr->num_faces; + + // basically, + // for each level in num_mipmaps { UInt32 imageSize; + // for each surface in num_surfaces { + // for each face in num_faces { + // for each slice in depth { + // for each row in height { + // for each pixel in width { + // byte data[size_based_on_pixelformat] + // byte facePadding[0-3] }}} + // } + // Byte mipPadding[0-3] } + + array_resize(ktx_textures, hdr->num_mipmaps * hdr->num_surfaces * hdr->num_faces); + + const char *bitmap = ((const char*)data) + sizeof(ktx_header) + hdr->metadata_size; + + for( unsigned m = 0; m < hdr->num_mipmaps; ++m ) { + for( unsigned s = 0; s < hdr->num_surfaces; ++s ) { + for( unsigned f = 0; f < hdr->num_faces; ++f ) { + ktx_texture *t = &ktx_textures[f+s*hdr->num_faces+m*hdr->num_faces*hdr->num_surfaces]; + + // set dimensions [1..N] + t->width = (hdr->width >> m) + !(hdr->width >> m); + t->height = (hdr->height >> m) + !(hdr->height >> m); + t->depth = (hdr->depth >> m) + !(hdr->depth >> m); + + // seek to mip + const char *ptr = bitmap; + for( int i = 0; i <= m; i++ ) { + // if cubemap, *ptr holds unpadded size of single face, + // else, *ptr holds size of all surfaces+faces+slices for whole mipmap. + unsigned size = lil32(*(unsigned*)ptr); + unsigned padding = 3 - ((size + 3) % 4); + + // seek to data + t->data = ptr + 4 + (size * f); + + // seek to next mipmap + ptr = ptr + 4 + (size * hdr->num_faces) + padding; + + // adjust size + t->size = (uintptr_t)(ptr - t->data); // -padding; needed? + } + + // ensure we're in bounds + ASSERT(t->data < ((char*)data + len), "%p < %p", t->data, ((char*)data + len)); + ASSERT(((char*)t->data+t->size) <= ((char*)data + len), "%p < %p", (char*)t->data + t->size, ((char*)data + len)); + } + } + } + + return ctx; +} + +// --- + +texture_t texture_compressed_from_mem(const void *data, int len, unsigned flags) { + ktx ctx = ktx_load(data, len); + if( ctx.error ) { + // puts(ctx.error); + // return texture_checker(); + return texture_from_mem(data, len, flags); + } + + ktx_header hdr = ctx.hdr; + + // flags + int target = hdr.num_faces == 6 ? GL_TEXTURE_CUBE_MAP : hdr.depth > 0 ? GL_TEXTURE_3D : GL_TEXTURE_2D; + int dimensions = target == GL_TEXTURE_3D ? 3 : target == GL_TEXTURE_2D || target == GL_TEXTURE_CUBE_MAP ? 2 : 1; + + // create texture + GLuint id; + glGenTextures(1, &id); + glBindTexture(target, id); + + // filtering + glTexParameteri(target, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glTexParameteri(target, GL_TEXTURE_MIN_FILTER, hdr.num_mipmaps > 1 ? GL_LINEAR_MIPMAP_LINEAR : GL_LINEAR); + + // wrapping + if( dimensions > 0 ) glTexParameteri(target, GL_TEXTURE_WRAP_S, GL_REPEAT); + if( dimensions > 1 ) glTexParameteri(target, GL_TEXTURE_WRAP_T, GL_REPEAT); + if( dimensions > 2 ) glTexParameteri(target, GL_TEXTURE_WRAP_R, GL_REPEAT); + if( flags&TEXTURE_CLAMP && dimensions > 0 ) glTexParameteri(target, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + if( flags&TEXTURE_CLAMP && dimensions > 1 ) glTexParameteri(target, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); + if( flags&TEXTURE_CLAMP && dimensions > 2 ) glTexParameteri(target, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE); + + if( target == GL_TEXTURE_CUBE_MAP ) target = GL_TEXTURE_CUBE_MAP_POSITIVE_X; + + // GLenum internalFormat = flags & TEXTURE_SRGB ? GL_SRGB8_ALPHA8 : GL_RGBA8; // @fixme + + int bytes = 0; + enum { border = 0 }; + for( int m = 0; m < hdr.num_mipmaps; ++m ) { + for( int s = 0; s < hdr.num_surfaces; ++s ) { + for( int f = 0; f < hdr.num_faces; ++f ) { + int d3 = target == GL_TEXTURE_3D, compr = hdr.glType == 0, mode = d3+compr*2; + ktx_texture *t = &ktx_textures[f+s*hdr.num_faces+m*hdr.num_faces*hdr.num_surfaces]; + /**/ if(mode==0) glTexImage2D(target+f,m,hdr.glInternalFormat,t->width,t->height, border,hdr.glFormat,hdr.glType,t->data); + else if(mode==1) glTexImage3D(target ,m,hdr.glInternalFormat,t->width,t->height,t->depth, border,hdr.glFormat,hdr.glType,t->data); + else if(mode==2) glCompressedTexImage2D(target+f,m,hdr.glInternalFormat,t->width,t->height, border,t->size,t->data); + else if(mode==3) glCompressedTexImage3D(target ,m,hdr.glInternalFormat,t->width,t->height,t->depth,border,t->size,t->data); + bytes += t->size; + } + } + } + +// if( !hdr.num_mipmaps ) +// if( flags & TEXTURE_MIPMAPS ) glGenerateMipmap(target); + + texture_t t = {0}; + t.id = id; + t.w = ktx_textures[0].width; + t.h = ktx_textures[0].height; + t.d = ktx_textures[0].depth; + // @todo: reconstruct flags + + PRINTF("dims:%dx%dx%d,size:%.2fMiB,mips:%d,layers:%d,faces:%d\n", t.w, t.h, t.d, bytes / 1024.0 / 1024.0, hdr.num_mipmaps, hdr.num_surfaces, hdr.num_faces); + return t; +} + +texture_t texture_compressed(const char *pathfile, unsigned flags) { + //const char *fname = vfs_remap(pathfile); + + int size = 0; + char *data = vfs_load(pathfile, &size); + return texture_compressed_from_mem(data, size, flags); +} + +// ----------------------------------------------------------------------------- +// shadowmaps + +shadowmap_t shadowmap(int texture_width) { // = 1024 + shadowmap_t s = {0}; + s.texture_width = texture_width; + + glGetIntegerv(GL_DRAW_FRAMEBUFFER_BINDING, &s.saved_fb); + + glGenFramebuffers(1, &s.fbo); + glBindFramebuffer(GL_FRAMEBUFFER, s.fbo); + + glActiveTexture(GL_TEXTURE0); + glGenTextures(1, &s.texture); + glBindTexture(GL_TEXTURE_2D, s.texture); + + glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, texture_width, texture_width, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_BYTE, 0); + + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER); + + glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, s.texture, 0); + +#if is(ems) + GLenum nones[] = { GL_NONE }; + glDrawBuffers(1, nones); + glReadBuffer(GL_NONE); +#else + glDrawBuffer(GL_NONE); + glReadBuffer(GL_NONE); +#endif + + glBindFramebuffer(GL_FRAMEBUFFER, s.saved_fb); + return s; +} + +void shadowmap_destroy(shadowmap_t *s) { + if (s->texture) { + glDeleteTextures(1, &s->texture); + } + if (s->fbo) { + glDeleteFramebuffers(1, &s->fbo); + } + shadowmap_t z = {0}; + *s = z; +} + +void shadowmap_set_shadowmatrix(shadowmap_t *s, vec3 aLightPos, vec3 aLightAt, vec3 aLightUp, const mat44 projection) { + copy44(s->proj, projection); + s->light_position = vec4(aLightPos.x, aLightPos.y, aLightPos.z, 1); + lookat44(s->mv, aLightPos, aLightAt, aLightUp); + + mat44 bias = { + 0.5, 0.0, 0.0, 0.0, + 0.0, 0.5, 0.0, 0.0, + 0.0, 0.0, 0.5, 0.0, + 0.5, 0.5, 0.5, 1.0 }; + + // s->shadowmatrix = bias; + // s->shadowmatrix *= s->proj; + // s->shadowmatrix *= s->mv; +// multiply44x3(s->shadowmatrix, s->mv, s->proj, bias); + multiply44x3(s->shadowmatrix, bias, s->proj, s->mv); + + // mvp = projection * s->mv; +// multiply44x2(s->mvp, s->mv, projection); + multiply44x2(s->mvp, projection, s->mv); +} + +void shadowmap_begin(shadowmap_t *s) { + glGetIntegerv(GL_VIEWPORT, &s->saved_viewport[0]); + glGetIntegerv(GL_DRAW_FRAMEBUFFER_BINDING, &s->saved_fb); + + glBindFramebuffer(GL_FRAMEBUFFER, s->fbo); + glViewport(0, 0, s->texture_width, s->texture_width); + + glClearDepth(1); + glClear(GL_DEPTH_BUFFER_BIT); +} + +void shadowmap_end(shadowmap_t *s) { + glViewport(s->saved_viewport[0], s->saved_viewport[1], s->saved_viewport[2], s->saved_viewport[3]); + glBindFramebuffer(GL_FRAMEBUFFER, s->saved_fb); +} + +// shadowmap utils + +void shadowmatrix_proj(mat44 shm_proj, float aLightFov, float znear, float zfar) { + perspective44(shm_proj, aLightFov, 1.0f, znear, zfar); +} + +void shadowmatrix_ortho(mat44 shm_proj, float left, float right, float bottom, float top, float znear, float zfar) { + ortho44(shm_proj, left, right, bottom, top, znear, zfar); +} + +// ----------------------------------------------------------------------------- +// fullscreen quads + +// usage: bind empty vao & commit call for 6 (quad) or 3 vertices (tri). +// ie, glBindVertexArray(empty_vao); glDrawArrays(GL_TRIANGLES, 0, 3); + +static renderstate_t fullscreen_quad_rs; + +static inline +void fullscreen_quad_rs_init() { + do_once { + fullscreen_quad_rs = renderstate(); + fullscreen_quad_rs.depth_test_enabled = false; + fullscreen_quad_rs.blend_enabled = true; + fullscreen_quad_rs.blend_src = GL_SRC_ALPHA; + fullscreen_quad_rs.blend_dst = GL_ONE_MINUS_SRC_ALPHA; + fullscreen_quad_rs.front_face = GL_CW; + } +} + +void fullscreen_quad_rgb( texture_t texture ) { + fullscreen_quad_rs_init(); + static int program = -1, vao = -1, u_inv_gamma = -1; + if( program < 0 ) { + const char* vs = vfs_read("shaders/vs_0_2_fullscreen_quad_B_flipped.glsl"); + const char* fs = vfs_read("shaders/fs_2_4_texel_inv_gamma.glsl"); + + program = shader(vs, fs, "", "fragcolor" , NULL); + u_inv_gamma = glGetUniformLocation(program, "u_inv_gamma"); + glGenVertexArrays( 1, (GLuint*)&vao ); + } + + GLenum texture_type = texture.flags & TEXTURE_ARRAY ? GL_TEXTURE_2D_ARRAY : GL_TEXTURE_2D; + renderstate_apply(&fullscreen_quad_rs); + glUseProgram( program ); + float gamma = 1; + glUniform1f( u_inv_gamma, gamma ); + + glBindVertexArray( vao ); + + glActiveTexture( GL_TEXTURE0 ); + glBindTexture( texture_type, texture.id ); + + glDrawArrays( GL_TRIANGLES, 0, 6 ); + profile_incstat("Render.num_drawcalls", +1); + profile_incstat("Render.num_triangles", +2); + + glBindTexture( texture_type, 0 ); + glBindVertexArray( 0 ); + glUseProgram( 0 ); +// glDisable( GL_BLEND ); +} + +void fullscreen_quad_rgb_flipped( texture_t texture ) { + fullscreen_quad_rs_init(); + static int program = -1, vao = -1, u_inv_gamma = -1; + if( program < 0 ) { + const char* vs = vfs_read("shaders/vs_0_2_fullscreen_quad_B.glsl"); + const char* fs = vfs_read("shaders/fs_2_4_texel_inv_gamma.glsl"); + + program = shader(vs, fs, "", "fragcolor" , NULL); + u_inv_gamma = glGetUniformLocation(program, "u_inv_gamma"); + glGenVertexArrays( 1, (GLuint*)&vao ); + } + + GLenum texture_type = texture.flags & TEXTURE_ARRAY ? GL_TEXTURE_2D_ARRAY : GL_TEXTURE_2D; + renderstate_apply(&fullscreen_quad_rs); + glUseProgram( program ); + float gamma = 1; + glUniform1f( u_inv_gamma, gamma ); + + glBindVertexArray( vao ); + + glActiveTexture( GL_TEXTURE0 ); + glBindTexture( texture_type, texture.id ); + + glDrawArrays( GL_TRIANGLES, 0, 6 ); + profile_incstat("Render.num_drawcalls", +1); + profile_incstat("Render.num_triangles", +2); + + glBindTexture( texture_type, 0 ); + glBindVertexArray( 0 ); + glUseProgram( 0 ); +// glDisable( GL_BLEND ); +} + +void fullscreen_quad_ycbcr( texture_t textureYCbCr[3] ) { + fullscreen_quad_rs_init(); + static int program = -1, vao = -1, u_gamma = -1, uy = -1, ucb = -1, ucr = -1; + if( program < 0 ) { + const char* vs = vfs_read("shaders/vs_0_2_fullscreen_quad_B_flipped.glsl"); + const char* fs = vfs_read("shaders/fs_2_4_texel_ycbr_gamma_saturation.glsl"); + + program = shader(vs, fs, "", "fragcolor" , NULL); + u_gamma = glGetUniformLocation(program, "u_gamma"); + + uy = glGetUniformLocation(program, "u_texture_y"); + ucb = glGetUniformLocation(program, "u_texture_cb"); + ucr = glGetUniformLocation(program, "u_texture_cr"); + + glGenVertexArrays( 1, (GLuint*)&vao ); + } + + renderstate_apply(&fullscreen_quad_rs); + glUseProgram( program ); + // glUniform1f( u_gamma, gamma ); + + glBindVertexArray( vao ); + + glUniform1i(uy, 0); + glActiveTexture( GL_TEXTURE0 ); + glBindTexture( GL_TEXTURE_2D, textureYCbCr[0].id ); + + glUniform1i(ucb, 1); + glActiveTexture( GL_TEXTURE1 ); + glBindTexture( GL_TEXTURE_2D, textureYCbCr[1].id ); + + glUniform1i(ucr, 2); + glActiveTexture( GL_TEXTURE2 ); + glBindTexture( GL_TEXTURE_2D, textureYCbCr[2].id ); + + glDrawArrays( GL_TRIANGLES, 0, 6 ); + profile_incstat("Render.num_drawcalls", +1); + profile_incstat("Render.num_triangles", +2); + + glBindTexture( GL_TEXTURE_2D, 0 ); + glBindVertexArray( 0 ); + glUseProgram( 0 ); +// glDisable( GL_BLEND ); +} + +void fullscreen_quad_ycbcr_flipped( texture_t textureYCbCr[3] ) { + fullscreen_quad_rs_init(); + static int program = -1, vao = -1, u_gamma = -1, uy = -1, ucb = -1, ucr = -1; + if( program < 0 ) { + const char* vs = vfs_read("shaders/vs_0_2_fullscreen_quad_B.glsl"); + const char* fs = vfs_read("shaders/fs_2_4_texel_ycbr_gamma_saturation.glsl"); + + program = shader(vs, fs, "", "fragcolor" , NULL); + u_gamma = glGetUniformLocation(program, "u_gamma"); + + uy = glGetUniformLocation(program, "u_texture_y"); + ucb = glGetUniformLocation(program, "u_texture_cb"); + ucr = glGetUniformLocation(program, "u_texture_cr"); + + glGenVertexArrays( 1, (GLuint*)&vao ); + } + + renderstate_apply(&fullscreen_quad_rs); + glUseProgram( program ); + // glUniform1f( u_gamma, gamma ); + + glBindVertexArray( vao ); + + glUniform1i(uy, 0); + glActiveTexture( GL_TEXTURE0 ); + glBindTexture( GL_TEXTURE_2D, textureYCbCr[0].id ); + + glUniform1i(ucb, 1); + glActiveTexture( GL_TEXTURE1 ); + glBindTexture( GL_TEXTURE_2D, textureYCbCr[1].id ); + + glUniform1i(ucr, 2); + glActiveTexture( GL_TEXTURE2 ); + glBindTexture( GL_TEXTURE_2D, textureYCbCr[2].id ); + + glDrawArrays( GL_TRIANGLES, 0, 6 ); + profile_incstat("Render.num_drawcalls", +1); + profile_incstat("Render.num_triangles", +2); + + glBindTexture( GL_TEXTURE_2D, 0 ); + glBindVertexArray( 0 ); + glUseProgram( 0 ); +// glDisable( GL_BLEND ); +} + +// ----------------------------------------------------------------------------- +// cubemaps + +// project cubemap coords into sphere normals +static +vec3 cubemap2polar(int face, int x, int y, int texture_width) { + float u = (x / (texture_width - 1.f)) * 2 - 1; + float v = (y / (texture_width - 1.f)) * 2 - 1; + /**/ if( face == 0 ) return vec3( u, -1, -v); + else if( face == 1 ) return vec3(-v, -u, 1); + else if( face == 2 ) return vec3(-1, -u, -v); + else if( face == 3 ) return vec3(-u, 1, -v); + else if( face == 4 ) return vec3( v, -u, -1); + else return vec3( 1, u, -v); +} +// project normal in a sphere as 2d texcoord +static +vec2 polar2uv(vec3 n) { + n = norm3(n); + float theta = atan2(n.y, n.x); + float phi = atan2(n.z, hypot(n.x, n.y)); + float u = (theta + C_PI) / C_PI; + float v = (C_PI/2 - phi) / C_PI; + return vec2(u, v); +} + +// equirectangular panorama (2:1) to cubemap - in RGB, out RGB +static +void panorama2cubemap_(image_t out[6], const image_t in, int width){ + int face; + #pragma omp parallel for + for( face = 0; face < 6; ++face ) { + out[face] = image_create(width, width, IMAGE_RGB); + for (int j=0; j < width; ++j) { + uint32_t *line = &out[ face ].pixels32[ 0 + j * width ]; + for (int i=0; i < width; ++i) { + vec3 polar = cubemap2polar(face, i, j, width); + vec2 uv = polar2uv(polar); + uv = scale2(uv, in.h-1); // source coords (assumes 2:1, 2*h == w) + vec3 rgb = bilinear(in, uv); + union color { + struct { uint8_t r,g,b,a; }; + uint32_t rgba; + } c = { rgb.x, rgb.y, rgb.z, 255 }; + line[i] = c.rgba; + } + } + } +} +// equirectangular panorama (2:1) to cubemap - in RGB, out RGBA +void panorama2cubemap(image_t out[6], const image_t in, int width) { + int face; + #pragma omp parallel for + for( face = 0; face < 6; ++face ) { + out[face] = image_create(width, width, IMAGE_RGBA); + for (int j=0; j < width; ++j) { + uint32_t *line = &out[ face ].pixels32[ 0 + j * width ]; + for (int i=0; i < width; ++i) { + vec3 polar = cubemap2polar(face, i, j, width); + vec2 uv = polar2uv(polar); + uv = scale2(uv, in.h-1); // source coords (assumes 2:1, 2*h == w) + vec3 rgb = bilinear(in, uv); + union color { + struct { uint8_t r,g,b,a; }; + uint32_t rgba; + } c = { rgb.x, rgb.y, rgb.z, 255 }; + line[i] = c.rgba; + } + } + } +} + + +cubemap_t cubemap6( const image_t images[6], int flags ) { + cubemap_t c = {0}, z = {0}; + + glGenTextures(1, &c.id); + glBindTexture(GL_TEXTURE_CUBE_MAP, c.id); + + int samples = 0; + for (int i = 0; i < 6; i++) { + image_t img = images[i]; //image(textures[i], IMAGE_RGB); + + glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, GL_RGB, img.w, img.h, 0, img.n == 3 ? GL_RGB : GL_RGBA, GL_UNSIGNED_BYTE, img.pixels); + + // calculate SH coefficients (@ands) + const vec3 skyDir[] = {{ 1, 0, 0},{-1, 0, 0},{ 0, 1, 0},{ 0,-1, 0},{ 0, 0, 1},{ 0, 0,-1}}; + const vec3 skyX[] = {{ 0, 0,-1},{ 0, 0, 1},{ 1, 0, 0},{ 1, 0, 0},{ 1, 0, 0},{-1, 0, 0}}; + const vec3 skyY[] = {{ 0, 1, 0},{ 0, 1, 0},{ 0, 0,-1},{ 0, 0, 1},{ 0, 1, 0},{ 0, 1, 0}}; + int step = 16; + for (int y = 0; y < img.h; y += step) { + unsigned char *p = (unsigned char*)img.pixels + y * img.w * img.n; + for (int x = 0; x < img.w; x += step) { + vec3 n = add3( + add3( + scale3(skyX[i], 2.0f * (x / (img.w - 1.0f)) - 1.0f), + scale3(skyY[i], -2.0f * (y / (img.h - 1.0f)) + 1.0f)), + skyDir[i]); // texelDirection; + float l = len3(n); + vec3 light = scale3(vec3(p[0], p[1], p[2]), 1 / (255.0f * l * l * l)); // texelSolidAngle * texel_radiance; + n = norm3(n); + c.sh[0] = add3(c.sh[0], scale3(light, 0.282095f)); + c.sh[1] = add3(c.sh[1], scale3(light, -0.488603f * n.y * 2.0 / 3.0)); + c.sh[2] = add3(c.sh[2], scale3(light, 0.488603f * n.z * 2.0 / 3.0)); + c.sh[3] = add3(c.sh[3], scale3(light, -0.488603f * n.x * 2.0 / 3.0)); + c.sh[4] = add3(c.sh[4], scale3(light, 1.092548f * n.x * n.y / 4.0)); + c.sh[5] = add3(c.sh[5], scale3(light, -1.092548f * n.y * n.z / 4.0)); + c.sh[6] = add3(c.sh[6], scale3(light, 0.315392f * (3.0f * n.z * n.z - 1.0f) / 4.0)); + c.sh[7] = add3(c.sh[7], scale3(light, -1.092548f * n.x * n.z / 4.0)); + c.sh[8] = add3(c.sh[8], scale3(light, 0.546274f * (n.x * n.x - n.y * n.y) / 4.0)); + p += img.n * step; + samples++; + } + } + } + + + for (int s = 0; s < 9; s++) { + c.sh[s] = scale3(c.sh[s], 32.f / samples); + } + + // if( glGenerateMipmap ) + glGenerateMipmap(GL_TEXTURE_CUBE_MAP); + glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, /* glGenerateMipmap ?*/ GL_LINEAR_MIPMAP_LINEAR /*: GL_LINEAR*/); + glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); + glBindTexture(GL_TEXTURE_CUBE_MAP, 0); + + return c; +} + +cubemap_t cubemap( const image_t in, int flags ) { + ASSERT( in.n == 4 ); + image_t out[6]; + panorama2cubemap(out, in, in.h); + image_t swap[6] = { out[0],out[3],out[1],out[4],out[2],out[5] }; + cubemap_t c = cubemap6(swap, flags); + int i; + #pragma omp parallel for + for( i = 0; i < 6; ++i) image_destroy(&out[i]); + return c; +} + +void cubemap_destroy(cubemap_t *c) { + glDeleteTextures(1, &c->id); + c->id = 0; // do not destroy SH coefficients still. they might be useful in the future. +} + +static cubemap_t *last_cubemap; + +cubemap_t* cubemap_get_active() { + return last_cubemap; +} + +// ----------------------------------------------------------------------------- +// skyboxes + +skybox_t skybox(const char *asset, int flags) { + skybox_t sky = {0}; + + // sky mesh + vec3 vertices[] = {{+1,-1,+1},{+1,+1,+1},{+1,+1,-1},{-1,+1,-1},{+1,-1,-1},{-1,-1,-1},{-1,-1,+1},{-1,+1,+1}}; + unsigned indices[] = { 0, 1, 2, 3, 4, 5, 6, 3, 7, 1, 6, 0, 4, 2 }; + mesh_update(&sky.geometry, "p3", 0,countof(vertices),vertices, countof(indices),indices, MESH_TRIANGLE_STRIP); + + // sky program + sky.flags = flags && flags != SKYBOX_PBR ? flags : !!asset ? SKYBOX_CUBEMAP : SKYBOX_RAYLEIGH; // either cubemap or rayleigh + sky.program = shader(vfs_read("shaders/vs_3_3_skybox.glsl"), + sky.flags ? vfs_read("fs_3_4_skybox.glsl") : vfs_read("shaders/fs_3_4_skybox_rayleigh.glsl"), + "att_position", "fragcolor", NULL); + + // sky cubemap & SH + if( asset ) { + int is_panorama = vfs_size( asset ); + if( is_panorama ) { // is file + stbi_hdr_to_ldr_gamma(1.0f); + image_t panorama = image( asset, IMAGE_RGBA ); + sky.cubemap = cubemap( panorama, 0 ); // RGBA required + image_destroy(&panorama); + } else { // is folder + image_t images[6] = {0}; + images[0] = image( va("%s/posx", asset), IMAGE_RGB ); // cubepx + images[1] = image( va("%s/negx", asset), IMAGE_RGB ); // cubenx + images[2] = image( va("%s/posy", asset), IMAGE_RGB ); // cubepy + images[3] = image( va("%s/negy", asset), IMAGE_RGB ); // cubeny + images[4] = image( va("%s/posz", asset), IMAGE_RGB ); // cubepz + images[5] = image( va("%s/negz", asset), IMAGE_RGB ); // cubenz + sky.cubemap = cubemap6( images, 0 ); + for( int i = 0; i < countof(images); ++i ) image_destroy(&images[i]); + } + } else { + // set up mie defaults // @fixme: use shader params instead + shader_bind(sky.program); + shader_vec3("uSunPos", vec3( 0, 0.1, -1 )); + shader_vec3("uRayOrigin", vec3(0.0, 6372000.0, 0.0)); + shader_float("uSunIntensity", 22.0); + shader_float("uPlanetRadius", 6371000.0); + shader_float("uAtmosphereRadius", 6471000.0); + shader_vec3("uRayleighScattering", vec3(5.5e-6, 13.0e-6, 22.4e-6)); + shader_float("uMieScattering", 21e-6); + shader_float("uRayleighScaleHeight", 8000.0); + shader_float("uMieScaleHeight", 1200.0); + shader_float("uMiePreferredDirection", 0.758); + skybox_mie_calc_sh(&sky, 1.2); + } + + return sky; +} + +static inline +texture_t load_env_tex( const char *pathfile, unsigned flags ) { + int flags_hdr = strendi(pathfile, ".hdr") ? TEXTURE_FLOAT | TEXTURE_RGBA : 0; + texture_t t = texture(pathfile, flags | TEXTURE_LINEAR | TEXTURE_MIPMAPS | TEXTURE_REPEAT | flags_hdr); + glBindTexture( GL_TEXTURE_2D, t.id ); + glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT ); + glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE ); + return t; +} + +skybox_t skybox_pbr(const char *sky_map, const char *refl_map, const char *env_map) { + skybox_t sky = {0}; + + // sky mesh + vec3 vertices[] = {{+1,-1,+1},{+1,+1,+1},{+1,+1,-1},{-1,+1,-1},{+1,-1,-1},{-1,-1,-1},{-1,-1,+1},{-1,+1,+1}}; + unsigned indices[] = { 0, 1, 2, 3, 4, 5, 6, 3, 7, 1, 6, 0, 4, 2 }; + mesh_update(&sky.geometry, "p3", 0,countof(vertices),vertices, countof(indices),indices, MESH_TRIANGLE_STRIP); + + // sky program + sky.flags = SKYBOX_PBR; + sky.program = shader(vfs_read("shaders/vs_3_3_skybox.glsl"), + vfs_read("fs_3_4_skybox.glsl"), + "att_position", "fragcolor", NULL); + + // sky cubemap & SH + if( sky_map ) { + int is_panorama = vfs_size( sky_map ); + if( is_panorama ) { // is file + stbi_hdr_to_ldr_gamma(1.0f); + image_t panorama = image( sky_map, IMAGE_RGBA ); + sky.cubemap = cubemap( panorama, 0 ); // RGBA required + image_destroy(&panorama); + } else { // is folder + image_t images[6] = {0}; + images[0] = image( va("%s/posx", sky_map), IMAGE_RGB ); // cubepx + images[1] = image( va("%s/negx", sky_map), IMAGE_RGB ); // cubenx + images[2] = image( va("%s/posy", sky_map), IMAGE_RGB ); // cubepy + images[3] = image( va("%s/negy", sky_map), IMAGE_RGB ); // cubeny + images[4] = image( va("%s/posz", sky_map), IMAGE_RGB ); // cubepz + images[5] = image( va("%s/negz", sky_map), IMAGE_RGB ); // cubenz + sky.cubemap = cubemap6( images, 0 ); + for( int i = 0; i < countof(images); ++i ) image_destroy(&images[i]); + } + } + if( refl_map ) { + sky.refl = load_env_tex(refl_map, 0); + } + if( env_map ) { + sky.env = load_env_tex(env_map, 0); + } + + return sky; +} + +void skybox_mie_calc_sh(skybox_t *sky, float sky_intensity) { + unsigned WIDTH = 1024, HEIGHT = 1024; + int last_fb; + int vp[4]; + glGetIntegerv(GL_DRAW_FRAMEBUFFER_BINDING, &last_fb); + glGetIntegerv(GL_VIEWPORT, vp); + + if (!sky_intensity) { + sky_intensity = 1.0f; + } + + if (!sky->pixels) + sky->pixels = MALLOC(WIDTH*HEIGHT*12); + + if (!sky->framebuffers[0]) { + for(int i = 0; i < 6; ++i) { + glGenFramebuffers(1, &sky->framebuffers[i]); + glBindFramebuffer(GL_FRAMEBUFFER, sky->framebuffers[i]); + + glGenTextures(1, &sky->textures[i]); + glActiveTexture(GL_TEXTURE0); + glBindTexture(GL_TEXTURE_2D, sky->textures[i]); + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, WIDTH, HEIGHT, 0, GL_RGB, GL_FLOAT, NULL); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glBindTexture(GL_TEXTURE_2D, 0); + + glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, sky->textures[i], 0); + } + } + + static vec3 directions[6] = {{ 1, 0, 0},{-1, 0, 0},{ 0, 1, 0},{ 0,-1, 0},{ 0, 0, 1},{ 0, 0,-1}}; + + int samples = 0; + for(int i = 0; i < 6; ++i) { + glBindFramebuffer(GL_FRAMEBUFFER, sky->framebuffers[i]); + glViewport(0, 0, WIDTH, HEIGHT); + glUseProgram(sky->program); + + mat44 proj; perspective44(proj, 90.0f, WIDTH / (float)HEIGHT, 0.1f, 500.f); + mat44 view; lookat44(view, vec3(0,0,0), directions[i], vec3(0,-1,0)); + + skybox_render(sky, proj, view); + + glReadPixels(0, 0, WIDTH, HEIGHT, GL_RGB, GL_FLOAT, sky->pixels); + + // calculate SH coefficients (@ands) + // copied from cubemap6 method + const vec3 skyDir[] = {{ 1, 0, 0},{-1, 0, 0},{ 0, 1, 0},{ 0,-1, 0},{ 0, 0, 1},{ 0, 0,-1}}; + const vec3 skyX[] = {{ 0, 0,-1},{ 0, 0, 1},{ 1, 0, 0},{ 1, 0, 0},{ 1, 0, 0},{-1, 0, 0}}; + const vec3 skyY[] = {{ 0, 1, 0},{ 0, 1, 0},{ 0, 0,-1},{ 0, 0, 1},{ 0, 1, 0},{ 0, 1, 0}}; + int step = 16; + for (int y = 0; y < HEIGHT; y += step) { + float *p = (float*)(sky->pixels + y * WIDTH * 3); + for (int x = 0; x < WIDTH; x += step) { + vec3 n = add3( + add3( + scale3(skyX[i], 2.0f * (x / (WIDTH - 1.0f)) - 1.0f), + scale3(skyY[i], -2.0f * (y / (HEIGHT - 1.0f)) + 1.0f)), + skyDir[i]); // texelDirection; + float l = len3(n); + vec3 light = scale3(vec3(p[0], p[1], p[2]), (1 / (l * l * l)) * sky_intensity); // texelSolidAngle * texel_radiance; + n = norm3(n); + sky->cubemap.sh[0] = add3(sky->cubemap.sh[0], scale3(light, 0.282095f)); + sky->cubemap.sh[1] = add3(sky->cubemap.sh[1], scale3(light, -0.488603f * n.y * 2.0 / 3.0)); + sky->cubemap.sh[2] = add3(sky->cubemap.sh[2], scale3(light, 0.488603f * n.z * 2.0 / 3.0)); + sky->cubemap.sh[3] = add3(sky->cubemap.sh[3], scale3(light, -0.488603f * n.x * 2.0 / 3.0)); + sky->cubemap.sh[4] = add3(sky->cubemap.sh[4], scale3(light, 1.092548f * n.x * n.y / 4.0)); + sky->cubemap.sh[5] = add3(sky->cubemap.sh[5], scale3(light, -1.092548f * n.y * n.z / 4.0)); + sky->cubemap.sh[6] = add3(sky->cubemap.sh[6], scale3(light, 0.315392f * (3.0f * n.z * n.z - 1.0f) / 4.0)); + sky->cubemap.sh[7] = add3(sky->cubemap.sh[7], scale3(light, -1.092548f * n.x * n.z / 4.0)); + sky->cubemap.sh[8] = add3(sky->cubemap.sh[8], scale3(light, 0.546274f * (n.x * n.x - n.y * n.y) / 4.0)); + p += 3 * step; + samples++; + } + } + } + + for (int s = 0; s < 9; s++) { + sky->cubemap.sh[s] = scale3(sky->cubemap.sh[s], 32.f / samples); + } + + glBindFramebuffer(GL_FRAMEBUFFER, last_fb); + glViewport(vp[0], vp[1], vp[2], vp[3]); +} + +void skybox_sh_reset(skybox_t *sky) { + for (int s = 0; s < 9; s++) { + sky->cubemap.sh[s] = vec3(0,0,0); + } +} + +void skybox_sh_add_light(skybox_t *sky, vec3 light, vec3 dir, float strength) { + // Normalize the direction + vec3 norm_dir = norm3(dir); + + // Scale the light color and intensity + vec3 scaled_light = scale3(light, strength); + + // Add light to the SH coefficients + sky->cubemap.sh[0] = add3(sky->cubemap.sh[0], scale3(scaled_light, 0.282095f)); + sky->cubemap.sh[1] = add3(sky->cubemap.sh[1], scale3(scaled_light, -0.488603f * norm_dir.y)); + sky->cubemap.sh[2] = add3(sky->cubemap.sh[2], scale3(scaled_light, 0.488603f * norm_dir.z)); + sky->cubemap.sh[3] = add3(sky->cubemap.sh[3], scale3(scaled_light, -0.488603f * norm_dir.x)); +} + +API vec4 window_getcolor_(); // internal use, not public + +static renderstate_t skybox_rs; + +int skybox_push_state(skybox_t *sky, mat44 proj, mat44 view) { + last_cubemap = &sky->cubemap; + + do_once { + skybox_rs = renderstate(); + skybox_rs.depth_test_enabled = 1; + skybox_rs.cull_face_enabled = 0; + skybox_rs.front_face = GL_CCW; + } + + // we have to reset clear color here, because of wrong alpha compositing issues on native transparent windows otherwise + vec4 bgcolor = window_getcolor_(); + skybox_rs.clear_color[0] = bgcolor.r; + skybox_rs.clear_color[1] = bgcolor.g; + skybox_rs.clear_color[2] = bgcolor.b; + skybox_rs.clear_color[3] = 1; // @transparent + + mat44 mvp; multiply44x2(mvp, proj, view); + + //glDepthMask(GL_FALSE); + shader_bind(sky->program); + shader_mat44("u_mvp", mvp); + if( sky->flags ) { + shader_cubemap("u_cubemap", sky->cubemap.id); + } + + renderstate_apply(&skybox_rs); + return 0; // @fixme: return sortable hash here? +} +int skybox_pop_state() { + //vec4 bgcolor = window_getcolor_(); glClearColor(bgcolor.r, bgcolor.g, bgcolor.b, window_has_transparent() ? 0 : bgcolor.a); // @transparent + //glDepthMask(GL_TRUE); + //glClear(GL_DEPTH_BUFFER_BIT); + return 0; +} +int skybox_render(skybox_t *sky, mat44 proj, mat44 view) { + skybox_push_state(sky, proj, view); + mesh_render(&sky->geometry); + skybox_pop_state(); + return 0; +} +void skybox_destroy(skybox_t *sky) { + glDeleteProgram(sky->program); + cubemap_destroy(&sky->cubemap); + mesh_destroy(&sky->geometry); + + if (sky->pixels) { + FREE(sky->pixels); + glDeleteFramebuffers(6, sky->framebuffers); + glDeleteTextures(6, sky->textures); + } +} + +// ----------------------------------------------------------------------------- +// meshes + +mesh_t mesh() { + mesh_t z = {0}; + return z; +} + +aabb mesh_bounds(mesh_t *m) { + aabb b = {{1e9,1e9,1e9},{-1e9,-1e9,-1e9}}; + for( int i = 0; i < array_count(m->in_vertex3); ++i ) { + if( m->in_vertex3[i].x < b.min.x ) b.min.x = m->in_vertex3[i].x; + if( m->in_vertex3[i].x > b.max.x ) b.max.x = m->in_vertex3[i].x; + + if( m->in_vertex3[i].y < b.min.y ) b.min.y = m->in_vertex3[i].y; + if( m->in_vertex3[i].y > b.max.y ) b.max.y = m->in_vertex3[i].y; + + if( m->in_vertex3[i].z < b.min.z ) b.min.z = m->in_vertex3[i].z; + if( m->in_vertex3[i].z > b.max.z ) b.max.z = m->in_vertex3[i].z; + } + return b; +} + +void mesh_update(mesh_t *m, const char *format, int vertex_stride,int vertex_count,const void *vertex_data, int index_count,const void *index_data, int flags) { + m->flags = flags; + + // setup + unsigned sizeof_index = sizeof(GLuint); + unsigned sizeof_vertex = 0; + m->index_count = index_count; + m->vertex_count = vertex_count; + + // iterate vertex attributes { position, normal + uv + tangent + bitangent + ... } + struct vertex_descriptor { + int vertex_type, num_attribute, num_components, alt_normalized; + int stride, offset; + } descriptor[16] = {0}, *dc = &descriptor[0]; + + do switch( *format ) { + break; case '*': dc->alt_normalized = 1; + break; case '0': dc->num_components = 0; + break; case '1': dc->num_components = 1; + break; case '2': dc->num_components = 2; + break; case '3': dc->num_components = 3; + break; case '4': dc->num_components = 4; + break; case 'F': dc->vertex_type = GL_FLOAT; + break; case 'U': case 'I': dc->vertex_type = GL_UNSIGNED_INT; + break; case 'B': if(format[-1] >= '0' && format[-1] <= '9') dc->vertex_type = GL_UNSIGNED_BYTE; //else bitangent. + break; case ' ': while (format[1] == ' ') format++; case '\0': + if (!dc->vertex_type) dc->vertex_type = GL_FLOAT; + dc->offset = sizeof_vertex; + sizeof_vertex += (dc->stride = dc->num_components * (dc->vertex_type == GL_UNSIGNED_BYTE ? 1 : 4)); + ++dc; + break; default: if( !strchr("pntbcwai", *format) ) PANIC("unsupported vertex type '%c'", *format); + } while (*format++); + + if(vertex_stride > 0) sizeof_vertex = vertex_stride; + + // layout + if(!m->vao) glGenVertexArrays(1, &m->vao); + glBindVertexArray(m->vao); + + // index data + if( index_data && index_count ) { + m->index_count = index_count; + + if(!m->ibo) glGenBuffers(1, &m->ibo); + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m->ibo); + glBufferData(GL_ELEMENT_ARRAY_BUFFER, m->index_count * sizeof_index, index_data, flags & MESH_STREAM ? GL_STREAM_DRAW : GL_STATIC_DRAW); + } + + // vertex data + if( vertex_data && vertex_count ) { + m->vertex_count = vertex_count; + + if(!m->vbo) glGenBuffers(1, &m->vbo); + glBindBuffer(GL_ARRAY_BUFFER, m->vbo); + glBufferData(GL_ARRAY_BUFFER, m->vertex_count * sizeof_vertex, vertex_data, flags & MESH_STREAM ? GL_STREAM_DRAW : GL_STATIC_DRAW); + } + + for( int i = 0; i < 8; ++i ) { +// glDisableVertexAttribArray(i); + } + + // vertex setup: iterate descriptors + for( int i = 0; i < countof(descriptor); ++i ) { + if( descriptor[i].num_components ) { + glDisableVertexAttribArray(i); + glVertexAttribPointer(i, + descriptor[i].num_components, descriptor[i].vertex_type, (descriptor[i].vertex_type == GL_UNSIGNED_BYTE ? GL_TRUE : GL_FALSE) ^ (descriptor[i].alt_normalized ? GL_TRUE : GL_FALSE), + sizeof_vertex, (GLchar*)NULL + descriptor[i].offset); + glEnableVertexAttribArray(i); + } else { + glDisableVertexAttribArray(i); + } + } + + glBindVertexArray(0); +} + +void mesh_render(mesh_t *sm) { + if( sm->vao ) { + glBindVertexArray(sm->vao); + if( sm->ibo ) { // with indices + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, sm->ibo); // <-- why intel? + glDrawElements(sm->flags & MESH_TRIANGLE_STRIP ? GL_TRIANGLE_STRIP : GL_TRIANGLES, sm->index_count, GL_UNSIGNED_INT, (char*)0); + profile_incstat("Render.num_drawcalls", +1); + profile_incstat("Render.num_triangles", sm->index_count/3); + } else { // with vertices only + glDrawArrays(sm->flags & MESH_TRIANGLE_STRIP ? GL_TRIANGLE_STRIP : GL_TRIANGLES, 0, sm->vertex_count /* / 3 */); + profile_incstat("Render.num_drawcalls", +1); + profile_incstat("Render.num_triangles", sm->vertex_count/3); + } + } +} + +void mesh_render_prim(mesh_t *sm, unsigned prim) { + if( sm->vao ) { + glBindVertexArray(sm->vao); + if( sm->ibo ) { // with indices + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, sm->ibo); // <-- why intel? + glDrawElements(prim, sm->index_count, GL_UNSIGNED_INT, (char*)0); + profile_incstat("Render.num_drawcalls", +1); + profile_incstat("Render.num_triangles", sm->index_count/3); + } else { // with vertices only + glDrawArrays(prim, 0, sm->vertex_count /* / 3 */); + profile_incstat("Render.num_drawcalls", +1); + profile_incstat("Render.num_triangles", sm->vertex_count/3); + } + } +} + +void mesh_destroy(mesh_t *m) { + // @todo + glDeleteBuffers(1, &m->vbo); + glDeleteBuffers(1, &m->ibo); + glDeleteVertexArrays(1, &m->vao); +} + +// ----------------------------------------------------------------------------- +// screenshots + +void* screenshot( int n ) { // 3 RGB, 4 RGBA, -3 BGR, -4 BGRA + // sync, 10 ms -- pixel perfect + + int w = window_width(), h = window_height(); + int mode = n == 3 ? GL_RGB : n == -3 ? GL_BGR : n == 4 ? GL_RGBA : GL_BGRA; + static __thread uint8_t *pixels = 0; + pixels = (uint8_t*)REALLOC(pixels, w * h * 4 ); // @leak per thread + + glBindBuffer(GL_PIXEL_PACK_BUFFER, 0); // disable any pbo, in case somebody did for us + glPixelStorei(GL_PACK_ALIGNMENT, 1); + glReadBuffer(GL_FRONT); + glReadPixels(0, 0, w, h, mode, GL_UNSIGNED_BYTE, pixels); + glPixelStorei(GL_UNPACK_ALIGNMENT, 1); + return pixels; +} + +void* screenshot_async( int n ) { // 3 RGB, 4 RGBA, -3 BGR, -4 BGRA +#if is(ems) + return screenshot(n); // no glMapBuffer() on emscripten +#else + // async, 0 ms -- @fixme: MSAA can cause some artifacts with PBOs: either use glDisable(GL_MULTISAMPLE) when recording or do not create window with WINDOW_MSAAx options at all. + + int w = window_width(), h = window_height(); + int mode = n == 3 ? GL_RGB : n == -3 ? GL_BGR : n == 4 ? GL_RGBA : GL_BGRA; + static __thread uint8_t *pixels = 0; + pixels = (uint8_t*)REALLOC(pixels, w * h * 4 ); // @leak per thread + + enum { NUM_PBOS = 16 }; + static __thread GLuint pbo[NUM_PBOS] = {0}, lastw = 0, lasth = 0, bound = 0; + + if( lastw != w || lasth != h ) { + lastw = w, lasth = h; + bound = 0; + + for( int i = 0; i < NUM_PBOS; ++i ) { + if(!pbo[i]) glGenBuffers(1, &pbo[i]); + glBindBuffer(GL_PIXEL_PACK_BUFFER, pbo[i]); + glBufferData(GL_PIXEL_PACK_BUFFER, w * h * 4, NULL, GL_STREAM_READ); // GL_STATIC_READ); + //glReadPixels(0, 0, w, h, mode, GL_UNSIGNED_BYTE, (GLvoid*)((GLchar*)NULL+0)); + } + } + + // read from oldest bound pbo + glBindBuffer(GL_PIXEL_PACK_BUFFER, pbo[bound]); + void *ptr = glMapBuffer(GL_PIXEL_PACK_BUFFER, GL_READ_ONLY); + memcpy(pixels, ptr, w * h * abs(n)); + glUnmapBuffer(GL_PIXEL_PACK_BUFFER); + + // trigger next read + glReadBuffer(GL_FRONT); + glReadPixels(0, 0, w, h, mode, GL_UNSIGNED_BYTE, (GLvoid*)((GLchar*)NULL+0)); + glBindBuffer(GL_PIXEL_PACK_BUFFER, 0); + + bound = (bound + 1) % NUM_PBOS; + return pixels; +#endif +} + +// ----------------------------------------------------------------------------- +// viewports + +void viewport_color(unsigned color) { + unsigned r = (color >> 0) & 255; + unsigned g = (color >> 8) & 255; + unsigned b = (color >> 16) & 255; + unsigned a = (color >> 24) & 255; + glClearColor(r, g, b, a); +} + +void viewport_clear(bool color, bool depth) { + glClearDepthf(1); + glClearStencil(0); + glClear((color ? GL_COLOR_BUFFER_BIT : 0) | (depth ? GL_DEPTH_BUFFER_BIT : 0)); +} + +void viewport_clip(vec2 from, vec2 to) { + float x = from.x, y = from.y, w = to.x-from.x, h = to.y-from.y; + + y = window_height()-y-h; + glViewport(x, y, w, h); + glScissor(x, y, w, h); +} + +// ----------------------------------------------------------------------------- +// fbos + +unsigned fbo(unsigned color_texture_id, unsigned depth_texture_id, int flags) { + int last_fb; + glGetIntegerv(GL_DRAW_FRAMEBUFFER_BINDING, &last_fb); + + GLuint fbo; + glGenFramebuffers(1, &fbo); + glBindFramebuffer(GL_FRAMEBUFFER, fbo); + + if( color_texture_id ) glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, color_texture_id, 0); + if( depth_texture_id ) glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, depth_texture_id, 0); +#if 0 // this is working; it's just not enabled for now + else { + // create a non-sampleable renderbuffer object for depth and stencil attachments + unsigned int rbo; + glGenRenderbuffers(1, &rbo); + glBindRenderbuffer(GL_RENDERBUFFER, rbo); + glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH24_STENCIL8, color.width, color.height); // use a single renderbuffer object for both a depth AND stencil buffer. + glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_RENDERBUFFER, rbo); // now actually attach it + } +#endif + +#if is(ems) + GLenum nones[] = { GL_NONE }; + if(flags) glDrawBuffers(1, nones); + if(flags) glReadBuffer(GL_NONE); +#else + if(flags) glDrawBuffer(GL_NONE); + if(flags) glReadBuffer(GL_NONE); +#endif + +#if 1 + GLenum result = glCheckFramebufferStatus(GL_FRAMEBUFFER); + if( GL_FRAMEBUFFER_COMPLETE != result ) { + PANIC("ERROR: Framebuffer not complete."); + } +#else + switch (glCheckFramebufferStatus(GL_FRAMEBUFFER)) { + case GL_FRAMEBUFFER_COMPLETE: break; + case GL_FRAMEBUFFER_UNDEFINED: PANIC("GL_FRAMEBUFFER_UNDEFINED"); + case GL_FRAMEBUFFER_UNSUPPORTED: PANIC("GL_FRAMEBUFFER_UNSUPPORTED"); + case GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT: PANIC("GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT"); + case GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER: PANIC("GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER"); + case GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER: PANIC("GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER"); + case GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE: PANIC("GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE"); +// case GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT: PANIC("GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT"); + case GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS: PANIC("GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS"); +// case GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT: PANIC("GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT"); + case GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT: PANIC("GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT"); + default: PANIC("ERROR: Framebuffer not complete. glCheckFramebufferStatus returned %x", glCheckFramebufferStatus(GL_FRAMEBUFFER)); + } +#endif + + glBindFramebuffer (GL_FRAMEBUFFER, last_fb); + return fbo; +} +static __thread array(handle) fbos; +void fbo_bind(unsigned id) { + glBindFramebuffer(GL_FRAMEBUFFER, id); + array_push(fbos, id); +} +void fbo_unbind() { + handle id = 0; + if (array_count(fbos)) { + array_pop(fbos); + id = *array_back(fbos); + } + glBindFramebuffer(GL_FRAMEBUFFER, id); +} +void fbo_destroy(unsigned id) { + // glDeleteRenderbuffers(1, &renderbuffer); + glDeleteFramebuffers(1, &id); +} + +// ----------------------------------------------------------------------------- +// post-fxs swapchain + +typedef struct passfx passfx; +typedef struct postfx postfx; + +void postfx_create(postfx *fx, int flags); +void postfx_destroy(postfx *fx); + +bool postfx_load(postfx *fx, const char *name, const char *fragment); +bool postfx_begin(postfx *fx, int width, int height); +bool postfx_end(postfx *fx); + +bool postfx_enabled(postfx *fx, int pass_number); +bool postfx_enable(postfx *fx, int pass_number, bool enabled); +// bool postfx_toggle(postfx *fx, int pass_number); +void postfx_clear(postfx *fx); +void postfx_order(postfx *fx, int pass, unsigned priority); + +char* postfx_name(postfx *fx, int slot); + +int ui_postfx(postfx *fx, int slot); + +struct passfx { + mesh_t m; + char *name; + unsigned program; + int uniforms[16]; + unsigned priority; + bool enabled; +}; + +struct postfx { + // renderbuffers: color & depth textures + unsigned fb[2]; + texture_t diffuse[2], depth[2]; + // shader passes + array(passfx) pass; + // global enable flag + bool enabled; +}; + +enum { + u_color, + u_depth, + u_time, + u_frame, + u_width, u_height, + u_mousex, u_mousey, + u_channelres0x, u_channelres0y, + u_channelres1x, u_channelres1y, +}; + +void postfx_create(postfx *fx, int flags) { + postfx z = {0}; + *fx = z; + fx->enabled = 1; + (void)flags; +} + +void postfx_destroy( postfx *fx ) { + for( int i = 0; i < array_count(fx->pass); ++i ) { + FREE(fx->pass[i].name); + } + array_free(fx->pass); + texture_destroy(&fx->diffuse[0]); + texture_destroy(&fx->diffuse[1]); + texture_destroy(&fx->depth[0]); + texture_destroy(&fx->depth[1]); + fbo_destroy(fx->fb[0]); + fbo_destroy(fx->fb[1]); + postfx z = {0}; + *fx = z; +} + +char* postfx_name(postfx *fx, int slot) { + return slot < 0 || slot >= array_count(fx->pass) ? "" : fx->pass[ slot ].name; +} +int postfx_find(postfx *fx, const char *name) { + name = file_name(name); + for( int i = 0; i < array_count(fx->pass); ++i) if(!strcmpi(fx->pass[i].name, name)) return i; + return -1; +} + +static +int postfx_sort_fn(const void *a, const void *b) { + unsigned p1 = ((passfx*)a)->priority; + unsigned p2 = ((passfx*)b)->priority; + return (p1 > p2) - (p1 < p2); +} +void postfx_order(postfx *fx, int pass, unsigned priority) { + if (pass < 0 || pass >= array_count(fx->pass)) return; + if (priority >= array_count(fx->pass)) return; + fx->pass[priority].priority = pass; + fx->pass[pass].priority = priority; + array_sort(fx->pass, postfx_sort_fn); +} + +int postfx_load_from_mem( postfx *fx, const char *name, const char *fs ) { + PRINTF("%s\n", name); + if(!fs || !fs[0]) return -1; // PANIC("!invalid fragment shader"); + + passfx pass={0}; + array_push(fx->pass, pass); + passfx *p = array_back(fx->pass); + p->name = STRDUP(name); + p->priority = array_count(fx->pass)-1; + + // preload stuff + static const char *vs = 0; + static const char *preamble = 0; + static const char *shadertoy = 0; + static char *fs2 = 0; + do_once { + vs = STRDUP(vfs_read("shaders/vs_0_2_fullscreen_quad_B.glsl")); + preamble = STRDUP(vfs_read("shaders/fs_2_4_preamble.glsl")); + shadertoy = STRDUP(vfs_read("shaders/fs_main_shadertoy.glsl")); + fs2 = (char*)CALLOC(1, 128*1024); + } + // patch fragment + snprintf(fs2, 128*1024, "%s%s%s", preamble, strstr(fs, "mainImage") ? shadertoy : "", fs ); + + p->program = shader(vs, fs2, "vtexcoord", "fragColor" , NULL); + + glUseProgram(p->program); // needed? + + for( int i = 0; i < countof(p->uniforms); ++i ) p->uniforms[i] = -1; + + if( p->uniforms[u_time] == -1 ) p->uniforms[u_time] = glGetUniformLocation(p->program, "iTime"); + + if( p->uniforms[u_frame] == -1 ) p->uniforms[u_frame] = glGetUniformLocation(p->program, "iFrame"); + + if( p->uniforms[u_width] == -1 ) p->uniforms[u_width] = glGetUniformLocation(p->program, "iWidth"); + if( p->uniforms[u_height] == -1 ) p->uniforms[u_height] = glGetUniformLocation(p->program, "iHeight"); + + if( p->uniforms[u_mousex] == -1 ) p->uniforms[u_mousex] = glGetUniformLocation(p->program, "iMousex"); + if( p->uniforms[u_mousey] == -1 ) p->uniforms[u_mousey] = glGetUniformLocation(p->program, "iMousey"); + + if( p->uniforms[u_color] == -1 ) p->uniforms[u_color] = glGetUniformLocation(p->program, "tex"); + if( p->uniforms[u_color] == -1 ) p->uniforms[u_color] = glGetUniformLocation(p->program, "tex0"); + if( p->uniforms[u_color] == -1 ) p->uniforms[u_color] = glGetUniformLocation(p->program, "tColor"); + if( p->uniforms[u_color] == -1 ) p->uniforms[u_color] = glGetUniformLocation(p->program, "tDiffuse"); + if( p->uniforms[u_color] == -1 ) p->uniforms[u_color] = glGetUniformLocation(p->program, "iChannel0"); + + if( p->uniforms[u_depth] == -1 ) p->uniforms[u_depth] = glGetUniformLocation(p->program, "tex1"); + if( p->uniforms[u_depth] == -1 ) p->uniforms[u_depth] = glGetUniformLocation(p->program, "tDepth"); + if( p->uniforms[u_depth] == -1 ) p->uniforms[u_depth] = glGetUniformLocation(p->program, "iChannel1"); + + if( p->uniforms[u_channelres0x] == -1 ) p->uniforms[u_channelres0x] = glGetUniformLocation(p->program, "iChannelRes0x"); + if( p->uniforms[u_channelres0y] == -1 ) p->uniforms[u_channelres0y] = glGetUniformLocation(p->program, "iChannelRes0y"); + + if( p->uniforms[u_channelres1x] == -1 ) p->uniforms[u_channelres1x] = glGetUniformLocation(p->program, "iChannelRes1x"); + if( p->uniforms[u_channelres1y] == -1 ) p->uniforms[u_channelres1y] = glGetUniformLocation(p->program, "iChannelRes1y"); + + // set quad + glGenVertexArrays(1, &p->m.vao); + return array_count(fx->pass)-1; +} + +bool postfx_enable(postfx *fx, int pass, bool enabled) { + if( pass < 0 || pass >= array_count(fx->pass) ) return false; + fx->pass[pass].enabled = enabled; + fx->enabled = !!array_count(fx->pass); + return fx->enabled; +} + +bool postfx_enabled(postfx *fx, int pass) { + if( pass < 0 || pass >= array_count(fx->pass) ) return false; + return fx->pass[pass].enabled; +} + +bool postfx_toggle(postfx *fx, int pass) { + if( pass < 0 || pass >= array_count(fx->pass) ) return false; + return postfx_enable(fx, pass, 1 ^ postfx_enabled(fx, pass)); +} + +void postfx_clear(postfx *fx) { + for (int i = 0; i < array_count(fx->pass); i++) { + fx->pass[i].enabled = 0; + } + fx->enabled = 0; +} +unsigned postfx_program(postfx *fx, int pass) { + if( pass < 0 || pass >= array_count(fx->pass) ) return 0; + return fx->pass[pass].program; +} + +int ui_postfx(postfx *fx, int pass) { + if (pass < 0 || pass >= array_count(fx->pass)) return 0; + int on = ui_enabled(); + ( postfx_enabled(fx,pass) ? ui_enable : ui_disable )(); + int rc = ui_shader(fx->pass[pass].program); + ui_separator(); + int btn = ui_buttons(2, "Move up", "Move down"); + if (btn == 1) { + postfx_order(fx, pass, fx->pass[pass].priority-1); + } + else if (btn == 2) { + postfx_order(fx, pass, fx->pass[pass].priority+1); + } + ( on ? ui_enable : ui_disable )(); + return rc; +} + +static +int postfx_active_passes(postfx *fx) { + int num_passes = 0; + for (int i = 0; i < array_count(fx->pass); i++) + if (fx->pass[i].enabled) + ++num_passes; + return num_passes; +} + +bool postfx_begin(postfx *fx, int width, int height) { + // reset clear color: needed in case transparent window is being used (alpha != 0) + glClearColor(0,0,0,0); // @transparent + + width += !width; + height += !height; + + // resize if needed + if( fx->diffuse[0].w != width || fx->diffuse[0].h != height ) { + texture_destroy(&fx->diffuse[0]); + texture_destroy(&fx->diffuse[1]); + texture_destroy(&fx->depth[0]); + texture_destroy(&fx->depth[1]); + fbo_destroy(fx->fb[0]); + fbo_destroy(fx->fb[1]); + + // create texture, set texture parameters and content + fx->diffuse[0] = texture_create(width, height, 4, NULL, TEXTURE_RGBA|TEXTURE_FLOAT); + fx->depth[0] = texture_create(width, height, 1, NULL, TEXTURE_DEPTH|TEXTURE_FLOAT); + fx->fb[0] = fbo(fx->diffuse[0].id, fx->depth[0].id, 0); + + // create texture, set texture parameters and content + fx->diffuse[1] = texture_create(width, height, 4, NULL, TEXTURE_RGBA|TEXTURE_FLOAT); + fx->depth[1] = texture_create(width, height, 1, NULL, TEXTURE_DEPTH|TEXTURE_FLOAT); + fx->fb[1] = fbo(fx->diffuse[1].id, fx->depth[1].id, 0); + } + + uint64_t num_active_passes = postfx_active_passes(fx); + bool active = fx->enabled && num_active_passes; + if( !active ) { + return false; + } + + fbo_bind(fx->fb[1]); + viewport_clear(true, true); + viewport_clip(vec2(0,0), vec2(width, height)); + fbo_unbind(); + + fbo_bind(fx->fb[0]); + viewport_clear(true, true); + viewport_clip(vec2(0,0), vec2(width, height)); + // we keep fbo_0 bound so that user can render into it. + + return true; +} + +static renderstate_t postfx_rs; + +bool postfx_end(postfx *fx) { + uint64_t num_active_passes = postfx_active_passes(fx); + bool active = fx->enabled && num_active_passes; + if( !active ) { + return false; + } + + do_once { + postfx_rs = renderstate(); + // disable depth test in 2d rendering + postfx_rs.depth_test_enabled = 0; + postfx_rs.cull_face_enabled = 0; + postfx_rs.blend_enabled = 1; + postfx_rs.blend_src = GL_ONE; + postfx_rs.blend_dst = GL_ONE_MINUS_SRC_ALPHA; + } + + // unbind postfx fbo + fbo_unbind(); + + renderstate_apply(&postfx_rs); + + int frame = 0; + float t = time_ms() / 1000.f; + float w = fx->diffuse[0].w; + float h = fx->diffuse[0].h; + float mx = input(MOUSE_X); + float my = input(MOUSE_Y); + + for(int i = 0, e = array_count(fx->pass); i < e; ++i) { + passfx *pass = &fx->pass[i]; + if( pass->enabled ) { + if( !pass->program ) { --num_active_passes; continue; } + glUseProgram(pass->program); + + // bind texture to texture unit 0 + // shader_texture_unit(fx->diffuse[frame], 0); + glActiveTexture(GL_TEXTURE0 + 0); glBindTexture(GL_TEXTURE_2D, fx->diffuse[frame].id); + glUniform1i(pass->uniforms[u_color], 0); + + glUniform1f(pass->uniforms[u_channelres0x], fx->diffuse[frame].w); + glUniform1f(pass->uniforms[u_channelres0y], fx->diffuse[frame].h); + + // bind depth to texture unit 1 + // shader_texture_unit(fx->depth[frame], 1); + glActiveTexture(GL_TEXTURE0 + 1); glBindTexture(GL_TEXTURE_2D, fx->depth[frame].id); + glUniform1i(pass->uniforms[u_depth], 1); + + // bind uniforms + static unsigned f = 0; ++f; + glUniform1f(pass->uniforms[u_time], t); + glUniform1f(pass->uniforms[u_frame], f-1); + glUniform1f(pass->uniforms[u_width], w); + glUniform1f(pass->uniforms[u_height], h); + + glUniform1f(pass->uniforms[u_mousex], mx); + glUniform1f(pass->uniforms[u_mousey], my); + + // bind the vao + int bound = --num_active_passes; + if (bound) fbo_bind(fx->fb[frame ^= 1]); + + // fullscreen quad + glBindVertexArray(pass->m.vao); + glDrawArrays(GL_TRIANGLES, 0, 6); + profile_incstat("Render.num_drawcalls", +1); + profile_incstat("Render.num_triangles", +2); + glBindVertexArray(0); + + if (bound) fbo_unbind(); + } + } + glUseProgram(0); + + // restore clear color: needed in case transparent window is being used (alpha != 0) + glClearColor(0,0,0,1); // @transparent + + return true; +} + +static postfx fx; +int fx_load_from_mem(const char *nameid, const char *content) { + do_once postfx_create(&fx, 0); + return postfx_load_from_mem(&fx, nameid, content); +} +int fx_load(const char *filemask) { + static set(char*) added = 0; do_once set_init_str(added); + for each_array( vfs_list(filemask), char*, list ) { + if( set_find(added, list) ) continue; + char *name = STRDUP(list); // @leak + set_insert(added, name); + (void)postfx_load_from_mem(&fx, file_name(name), vfs_read(name)); + } + if( 1 ) + for each_array( file_list(filemask), char*, list ) { + if( set_find(added, list) ) continue; + char *name = STRDUP(list); // @leak + set_insert(added, name); + (void)postfx_load_from_mem(&fx, file_name(name), file_read(name)); + } + return 1; +} +void fx_begin() { + postfx_begin(&fx, window_width(), window_height()); +} +void fx_begin_res(int w, int h) { + postfx_begin(&fx, w, h); +} +void fx_end() { + postfx_end(&fx); +} +int fx_enabled(int pass) { + return postfx_enabled(&fx, pass); +} +void fx_enable(int pass, int enabled) { + postfx_enable(&fx, pass, enabled); +} +void fx_enable_all(int enabled) { + for( int i = 0; i < array_count(fx.pass); ++i ) { + fx_enable(i, enabled); + } +} +char *fx_name(int pass) { + return postfx_name(&fx, pass); +} +int fx_find(const char *name) { + return postfx_find(&fx, name); +} +void fx_order(int pass, unsigned priority) { + postfx_order(&fx, pass, priority); +} +unsigned fx_program(int pass) { + return postfx_program(&fx, pass); +} +void fx_setparam(int pass, const char *name, float value) { + unsigned program = fx_program(pass); + if( !program ) return; + unsigned oldprogram = shader_bind(program); + shader_float(name, value); + shader_bind(oldprogram); +} +int ui_fx(int pass) { + return ui_postfx(&fx, pass); +} +int ui_fxs() { + if(!array_count(fx.pass)) return ui_label(ICON_MD_WARNING " No Post FXs with annotations loaded."), 0; + + int changed = 0; + for( int i = 0; i < array_count(fx.pass); ++i ) { + char *name = fx_name(i); if( !name ) break; + bool b = fx_enabled(i); + if( ui_bool(name, &b) ) fx_enable(i, fx_enabled(i) ^ 1); + ui_fx(i); + ui_separator(); + } + return changed; +} + +// ----------------------------------------------------------------------------- +// brdf + +static texture_t brdf = {0}; + +static void brdf_load() { + // generate texture + unsigned tex; + glGenTextures(1, &tex); + + glBindTexture(GL_TEXTURE_2D, tex); + glTexImage2D(GL_TEXTURE_2D, 0, GL_RG16F, 512, 512, 0, GL_RG, GL_FLOAT, 0); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + + brdf.id = tex; + brdf.w = 512; + brdf.h = 512; + + // create program and generate BRDF LUT + unsigned lut_fbo = fbo(tex, 0, 0), rbo=0; + fbo_bind(lut_fbo); + + static int program = -1, vao = -1; + if( program < 0 ) { + const char* vs = vfs_read("shaders/vs_0_2_fullscreen_quad_B_flipped.glsl"); + const char* fs = vfs_read("shaders/brdf.glsl"); + + program = shader(vs, fs, "", "fragcolor", NULL); + glGenVertexArrays( 1, (GLuint*)&vao ); + } + + glDisable(GL_BLEND); + + handle old_shader = last_shader; + glUseProgram( program ); + + glViewport(0, 0, 512, 512); + + glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); + + glBindVertexArray( vao ); + + glDrawArrays( GL_TRIANGLES, 0, 6 ); + profile_incstat("Render.num_drawcalls", +1); + profile_incstat("Render.num_triangles", +2); + + glBindVertexArray( 0 ); + + glUseProgram( last_shader ); + + fbo_unbind(); + fbo_destroy(lut_fbo); +} + +texture_t brdf_lut() { + do_once brdf_load(); + return brdf; +} + +// ----------------------------------------------------------------------------- +// materials + +bool colormap( colormap_t *cm, const char *texture_name, bool load_as_srgb ) { + if( !texture_name ) return false; + + if( cm->texture ) { + texture_destroy(cm->texture); + FREE(cm->texture), cm->texture = NULL; + } + + int srgb = load_as_srgb ? TEXTURE_SRGB : 0; + int hdr = strendi(texture_name, ".hdr") ? TEXTURE_FLOAT|TEXTURE_RGBA : 0; + texture_t t = texture_compressed(texture_name, TEXTURE_LINEAR | TEXTURE_ANISOTROPY | TEXTURE_MIPMAPS | TEXTURE_REPEAT | hdr | srgb); + + if( t.id == texture_checker().id ) { + cm->texture = NULL; + return false; + } + cm->texture = CALLOC(1, sizeof(texture_t)); + *cm->texture = t; + return true; +} + +// ---------------------------------------------------------------------------- +// shadertoys +// +// @todo: multipass +// - https://www.shadertoy.com/view/Mst3Wr - la calanque +// - https://www.shadertoy.com/view/XsyGWV - sirenian dawn +// - https://www.shadertoy.com/view/Xst3zX - wordtoy +// - https://www.shadertoy.com/view/MddGzf - bricks game +// - https://www.shadertoy.com/view/Ms33WB - post process - ssao +// - https://www.shadertoy.com/view/Xds3zN + +enum shadertoy_uniforms { + iFrame, + iTime, + iDate, + iGlobalTime, + iGlobalFrame, + iGlobalDelta, + iChannel0, + iChannel1, + iChannel2, + iChannel3, + iResolution, + iMouse, + iOffset, + iSampleRate, + iChannelResolution, + iChannelTime, + // iCameraScreen + // iCameraPosition + // iCameraActive +}; + +shadertoy_t shadertoy( const char *shaderfile, unsigned flags ) { + shadertoy_t s = {0}; + s.flags = flags; + + char *file = vfs_read(shaderfile); + if( !file ) return s; + + glGenVertexArrays(1, &s.vao); + + char *fs = stringf("%s%s", vfs_read("header_shadertoy.glsl"), file); + s.program = shader((flags&SHADERTOY_FLIP_Y) ? vfs_read("shaders/vs_shadertoy_flip.glsl") : vfs_read("shaders/vs_shadertoy.glsl"), fs, "", "fragColor", NULL); + FREE(fs); + + if( strstr(file, "noise3.jpg")) + s.texture_channels[0] = texture("shadertoys/tex12.png", 0).id; + else + s.texture_channels[0] = texture("shadertoys/tex04.jpg", 0).id; + + s.uniforms[iFrame] = glGetUniformLocation(s.program, "iFrame"); + s.uniforms[iTime] = glGetUniformLocation(s.program, "iTime"); + s.uniforms[iDate] = glGetUniformLocation(s.program, "iDate"); + s.uniforms[iGlobalTime] = glGetUniformLocation(s.program, "iGlobalTime"); + s.uniforms[iGlobalDelta] = glGetUniformLocation(s.program, "iGlobalDelta"); + s.uniforms[iGlobalFrame] = glGetUniformLocation(s.program, "iGlobalFrame"); + s.uniforms[iResolution] = glGetUniformLocation(s.program, "iResolution"); + + s.uniforms[iChannel0] = glGetUniformLocation(s.program, "iChannel0"); + s.uniforms[iChannel1] = glGetUniformLocation(s.program, "iChannel1"); + s.uniforms[iChannel2] = glGetUniformLocation(s.program, "iChannel2"); + s.uniforms[iChannel3] = glGetUniformLocation(s.program, "iChannel3"); + + s.uniforms[iMouse] = glGetUniformLocation(s.program, "iMouse"); + s.uniforms[iOffset] = glGetUniformLocation(s.program, "iOffset"); + s.uniforms[iSampleRate] = glGetUniformLocation(s.program, "iSampleRate"); + s.uniforms[iChannelResolution] = glGetUniformLocation(s.program, "iChannelResolution"); + s.uniforms[iChannelTime] = glGetUniformLocation(s.program, "iChannelTime"); + + return s; +} + +shadertoy_t* shadertoy_render(shadertoy_t *s, float delta) { + if( s->program && s->vao ) { + if( s->dims.x && !(s->flags&SHADERTOY_IGNORE_FBO) && !texture_rec_begin(&s->tx, s->dims.x, s->dims.y) ) { + return s; + } + + if(input_down(MOUSE_L) || input_down(MOUSE_R) ) s->mouse.z = input(MOUSE_X), s->mouse.w = -(window_height() - input(MOUSE_Y)); + if(input(MOUSE_L) || input(MOUSE_R)) s->mouse.x = input(MOUSE_X), s->mouse.y = (window_height() - input(MOUSE_Y)); + vec4 m = mul4(s->mouse, vec4(1,1,1-2*(!input(MOUSE_L) && !input(MOUSE_R)),1-2*(input_down(MOUSE_L) || input_down(MOUSE_R)))); + + time_t tmsec = time(0); + struct tm *tm = localtime(&tmsec); + s->t += delta * 1000; + + glUseProgram(s->program); + glUniform1f(s->uniforms[iGlobalTime], s->t / 1000.f ); + glUniform1f(s->uniforms[iGlobalFrame], s->frame++); + glUniform1f(s->uniforms[iGlobalDelta], delta / 1000.f ); + glUniform2f(s->uniforms[iResolution], s->dims.x ? s->dims.x : window_width(), s->dims.y ? s->dims.y : window_height()); + if (!(s->flags&SHADERTOY_IGNORE_MOUSE)) glUniform4f(s->uniforms[iMouse], m.x,m.y,m.z,m.w ); + + glUniform1i(s->uniforms[iFrame], (int)window_frame()); + glUniform1f(s->uniforms[iTime], time_ss()); + glUniform4f(s->uniforms[iDate], tm->tm_year, tm->tm_mon, tm->tm_mday, tm->tm_sec + tm->tm_min * 60 + tm->tm_hour * 3600); + + int unit = 0; + for( int i = 0; i < 4; i++ ) { + if( s->texture_channels[i] ) { + glActiveTexture(GL_TEXTURE0 + unit); + glBindTexture(GL_TEXTURE_2D, s->texture_channels[i]); + glUniform1i(s->uniforms[iChannel0+i], unit); + unit++; + } + } + + glViewport(0, 0, s->dims.x ? s->dims.x : window_width(), s->dims.y ? s->dims.y : window_height()); + glBindVertexArray(s->vao); + glDrawArrays(GL_TRIANGLES, 0, 3); + + if(s->dims.x && !(s->flags&SHADERTOY_IGNORE_FBO)) texture_rec_end(&s->tx); // texture_rec + } + return s; +} + +// ----------------------------------------------------------------------------- +// skeletal meshes (iqm) + +#define IQM_MAGIC "INTERQUAKEMODEL" +#define IQM_VERSION 2 + +struct iqmheader { + char magic[16]; + unsigned version; + unsigned filesize; + unsigned flags; + unsigned num_text, ofs_text; + unsigned num_meshes, ofs_meshes; + unsigned num_vertexarrays, num_vertexes, ofs_vertexarrays; + unsigned num_triangles, ofs_triangles, ofs_adjacency; + unsigned num_joints, ofs_joints; + unsigned num_poses, ofs_poses; + unsigned num_anims, ofs_anims; + unsigned num_frames, num_framechannels, ofs_frames, ofs_bounds; + unsigned num_comment, ofs_comment; + unsigned num_extensions, ofs_extensions; +}; + +struct iqmmesh { + unsigned name; + unsigned material; + unsigned first_vertex, num_vertexes; + unsigned first_triangle, num_triangles; +}; + +enum { + IQM_POSITION, + IQM_TEXCOORD, + IQM_NORMAL, + IQM_TANGENT, + IQM_BLENDINDEXES, + IQM_BLENDWEIGHTS, + IQM_COLOR, + IQM_CUSTOM = 0x10 +}; + +enum { + IQM_BYTE, + IQM_UBYTE, + IQM_SHORT, + IQM_USHORT, + IQM_INT, + IQM_UINT, + IQM_HALF, + IQM_FLOAT, + IQM_DOUBLE, +}; + +struct iqmtriangle { + unsigned vertex[3]; +}; + +struct iqmadjacency { + unsigned triangle[3]; +}; + +struct iqmjoint { + unsigned name; + int parent; + float translate[3], rotate[4], scale[3]; +}; + +struct iqmpose { + int parent; + unsigned mask; + float channeloffset[10]; + float channelscale[10]; +}; + +struct iqmanim { + unsigned name; + unsigned first_frame, num_frames; + float framerate; + unsigned flags; +}; + +enum { + IQM_LOOP = 1<<0 +}; + +struct iqmvertexarray { + unsigned type; + unsigned flags; + unsigned format; + unsigned size; + unsigned offset; +}; + +struct iqmbounds { + union { + struct { float bbmin[3], bbmax[3]; }; + struct { vec3 min3, max3; }; + aabb box; + }; + float xyradius, radius; +}; + +// ----------------------------------------------------------------------------- + +typedef struct iqm_vertex { + GLfloat position[3]; + GLfloat texcoord[2]; + GLfloat normal[3]; + GLfloat tangent[4]; + GLubyte blendindexes[4]; + GLubyte blendweights[4]; + GLfloat blendvertexindex; + GLubyte color[4]; + GLfloat texcoord2[2]; +} iqm_vertex; + +typedef struct iqm_t { + int nummeshes, numtris, numverts, numjoints, numframes, numanims; + GLuint vao, ibo, vbo; + GLuint *textures; + uint8_t *buf, *meshdata, *animdata; + struct iqmmesh *meshes; + struct iqmjoint *joints; + struct iqmpose *poses; + struct iqmanim *anims; + struct iqmbounds *bounds; + mat34 *baseframe, *inversebaseframe, *outframe, *frames; + GLint bonematsoffset; + vec4 *colormaps; +} iqm_t; + +void model_set_texture(model_t m, texture_t t) { + if(!m.iqm) return; + iqm_t *q = m.iqm; + + for( int i = 0; i < q->nummeshes; ++i) { // assume 1 texture per mesh + q->textures[i] = t.id; + } +} + +//@fixme: some locations are invalid, find out why +#if 0 +static +void model_set_uniforms(model_t m, int shader, mat44 mv, mat44 proj, mat44 view, mat44 model) { // @todo: cache uniform locs + if(!m.iqm) return; + iqm_t *q = m.iqm; + + shader_bind(shader); + int loc; + //if( (loc = glGetUniformLocation(shader, "M")) >= 0 ) glUniformMatrix4fv( loc, 1, GL_FALSE/*GL_TRUE*/, m); // RIM + if( (loc = m.uniforms[MODEL_UNIFORM_MV]) >= 0 ) { + shader_mat44_(loc, mv); + } + if( (loc = m.uniforms[MODEL_UNIFORM_MVP]) >= 0 ) { + mat44 mvp; multiply44x2(mvp, proj, mv); // multiply44x3(mvp, proj, view, model); + shader_mat44_(loc, mvp); + } + if( (loc = m.uniforms[MODEL_UNIFORM_VP]) >= 0 ) { + mat44 vp; multiply44x2(vp, proj, view); + shader_mat44_(loc, vp); + } + if( (loc = m.uniforms[MODEL_UNIFORM_CAM_POS]) >= 0 ) { + vec3 pos = vec3(view[12], view[13], view[14]); + shader_vec3_(loc, pos); + } + if( (loc = m.uniforms[MODEL_UNIFORM_CAM_DIR]) >= 0 ) { + vec3 dir = norm3(vec3(view[2], view[6], view[10])); + shader_vec3_(loc, dir); + } + if( (loc = m.uniforms[MODEL_UNIFORM_BILLBOARD]) >= 0 ) { + shader_int_(loc, m.billboard); + } + if( (loc = m.uniforms[MODEL_UNIFORM_TEXLIT]) >= 0 ) { + shader_bool_(loc, (m.lightmap.w != 0)); + } + if ((loc = m.uniforms[MODEL_UNIFORM_MODEL]) >= 0) { + shader_mat44_(loc, model); + } + if ((loc = m.uniforms[MODEL_UNIFORM_VIEW]) >= 0) { + shader_mat44_(loc, view); + } + if ((loc = m.uniforms[MODEL_UNIFORM_INV_VIEW]) >= 0) { + mat44 inv_view; + invert44(inv_view, view); + shader_mat44_(loc, inv_view); + } + if ((loc = m.uniforms[MODEL_UNIFORM_PROJ]) >= 0) { + shader_mat44_(loc, proj); + } + if( (loc = m.uniforms[MODEL_UNIFORM_SKINNED]) >= 0 ) shader_int_(loc, q->numanims ? GL_TRUE : GL_FALSE); + if( q->numanims ) + if( (loc = m.uniforms[MODEL_UNIFORM_VS_BONE_MATRIX]) >= 0 ) glUniformMatrix3x4fv( loc, q->numjoints, GL_FALSE, q->outframe[0]); + if ((loc = m.uniforms[MODEL_UNIFORM_U_MATCAPS]) >= 0) { + shader_bool_(loc, m.flags & MODEL_MATCAPS ? GL_TRUE:GL_FALSE); + } + + if (m.shading == SHADING_PBR) { + handle old_shader = last_shader; + shader_bind(shader); + shader_vec2_( m.uniforms[MODEL_UNIFORM_RESOLUTION], vec2(window_width(),window_height())); + + bool has_tex_skysphere = m.sky_refl.id != texture_checker().id; + bool has_tex_skyenv = m.sky_env.id != texture_checker().id; + shader_bool_( m.uniforms[MODEL_UNIFORM_HAS_TEX_SKYSPHERE], has_tex_skysphere ); + shader_bool_( m.uniforms[MODEL_UNIFORM_HAS_TEX_SKYENV], has_tex_skyenv ); + if( has_tex_skysphere ) { + float mipCount = floor( log2( max(m.sky_refl.w, m.sky_refl.h) ) ); + shader_texture_(m.uniforms[MODEL_UNIFORM_TEX_SKYSPHERE], m.sky_refl); + shader_float_( m.uniforms[MODEL_UNIFORM_SKYSPHERE_MIP_COUNT], mipCount ); + } + if( has_tex_skyenv ) { + shader_texture_( m.uniforms[MODEL_UNIFORM_TEX_SKYENV], m.sky_env ); + } + shader_texture_( m.uniforms[MODEL_UNIFORM_TEX_BRDF_LUT], brdf_lut() ); + shader_uint_( m.uniforms[MODEL_UNIFORM_FRAME_COUNT], (unsigned)window_frame() ); + shader_bind(old_shader); + } +} +#else +static +void model_set_uniforms(model_t m, int shader, mat44 mv, mat44 proj, mat44 view, mat44 model) { // @todo: cache uniform locs + if(!m.iqm) return; + iqm_t *q = m.iqm; + + shader_bind(shader); + int loc; + //if( (loc = glGetUniformLocation(shader, "M")) >= 0 ) glUniformMatrix4fv( loc, 1, GL_FALSE/*GL_TRUE*/, m); // RIM + if( (loc = glGetUniformLocation(shader, "MV")) >= 0 ) { + glUniformMatrix4fv( loc, 1, GL_FALSE, mv); + } + else + if( (loc = glGetUniformLocation(shader, "u_mv")) >= 0 ) { + glUniformMatrix4fv( loc, 1, GL_FALSE, mv); + } + if( (loc = glGetUniformLocation(shader, "MVP")) >= 0 ) { + mat44 mvp; multiply44x2(mvp, proj, mv); // multiply44x3(mvp, proj, view, model); + glUniformMatrix4fv( loc, 1, GL_FALSE, mvp); + } + else + if( (loc = glGetUniformLocation(shader, "u_mvp")) >= 0 ) { + mat44 mvp; multiply44x2(mvp, proj, mv); // multiply44x3(mvp, proj, view, model); + glUniformMatrix4fv( loc, 1, GL_FALSE, mvp); + } + if( (loc = glGetUniformLocation(shader, "VP")) >= 0 ) { + mat44 vp; multiply44x2(vp, proj, view); + glUniformMatrix4fv( loc, 1, GL_FALSE, vp); + } + else + if( (loc = glGetUniformLocation(shader, "u_vp")) >= 0 ) { + mat44 vp; multiply44x2(vp, proj, view); + glUniformMatrix4fv( loc, 1, GL_FALSE, vp); + } + if( (loc = glGetUniformLocation(shader, "u_cam_pos")) >= 0 ) { + vec3 pos = vec3(view[12], view[13], view[14]); + glUniform3fv( loc, 1, &pos.x ); + } + else + if( (loc = glGetUniformLocation(shader, "cam_pos")) >= 0 ) { + vec3 pos = vec3(view[12], view[13], view[14]); + glUniform3fv( loc, 1, &pos.x ); + } + if( (loc = glGetUniformLocation(shader, "u_cam_dir")) >= 0 ) { + vec3 dir = norm3(vec3(view[2], view[6], view[10])); + glUniform3fv( loc, 1, &dir.x ); + } + else + if( (loc = glGetUniformLocation(shader, "cam_dir")) >= 0 ) { + vec3 dir = norm3(vec3(view[2], view[6], view[10])); + glUniform3fv( loc, 1, &dir.x ); + } + if( (loc = glGetUniformLocation(shader, "billboard")) >= 0 ) { + glUniform1i( loc, m.billboard ); + } + else + if( (loc = glGetUniformLocation(shader, "u_billboard")) >= 0 ) { + glUniform1i( loc, m.billboard ); + } + if( (loc = glGetUniformLocation(shader, "texlit")) >= 0 ) { + glUniform1i( loc, (m.lightmap.w != 0) ); + } + else + if( (loc = glGetUniformLocation(shader, "u_texlit")) >= 0 ) { + glUniform1i( loc, (m.lightmap.w != 0) ); + } +#if 0 + // @todo: mat44 projview (useful?) +#endif + if ((loc = glGetUniformLocation(shader, "M")) >= 0) { + glUniformMatrix4fv(loc, 1, GL_FALSE, model); + } + else + if ((loc = glGetUniformLocation(shader, "model")) >= 0) { + glUniformMatrix4fv(loc, 1, GL_FALSE, model); + } + if ((loc = glGetUniformLocation(shader, "V")) >= 0) { + glUniformMatrix4fv(loc, 1, GL_FALSE, view); + } + else + if ((loc = glGetUniformLocation(shader, "view")) >= 0) { + glUniformMatrix4fv(loc, 1, GL_FALSE, view); + } + if ((loc = glGetUniformLocation(shader, "inv_view")) >= 0) { + mat44 inv_view; + invert44( inv_view, view); + glUniformMatrix4fv(loc, 1, GL_FALSE, inv_view); + } + if ((loc = glGetUniformLocation(shader, "P")) >= 0) { + glUniformMatrix4fv(loc, 1, GL_FALSE, proj); + } + else + if ((loc = glGetUniformLocation(shader, "proj")) >= 0) { + glUniformMatrix4fv(loc, 1, GL_FALSE, proj); + } + if( (loc = glGetUniformLocation(shader, "SKINNED")) >= 0 ) glUniform1i( loc, q->numanims ? GL_TRUE : GL_FALSE); + if( q->numanims ) + if( (loc = glGetUniformLocation(shader, "vsBoneMatrix")) >= 0 ) glUniformMatrix3x4fv( loc, q->numjoints, GL_FALSE, q->outframe[0]); + + if ((loc = glGetUniformLocation(shader, "u_matcaps")) >= 0) { + glUniform1i(loc, m.flags & MODEL_MATCAPS ? GL_TRUE:GL_FALSE); + } + + if ((loc = glGetUniformLocation(shader, "frame_count")) >= 0) { + glUniform1i(loc, (unsigned)window_frame()); + } + + if ((loc = glGetUniformLocation(shader, "frame_time")) >= 0) { + glUniform1f(loc, (float)window_time()); + } + + if (m.shading == SHADING_PBR) { + handle old_shader = last_shader; + shader_bind(shader); + shader_vec2( "resolution", vec2(window_width(),window_height())); + + bool has_tex_skysphere = m.sky_refl.id != texture_checker().id; + bool has_tex_skyenv = m.sky_env.id != texture_checker().id; + shader_bool( "has_tex_skysphere", has_tex_skysphere ); + shader_bool( "has_tex_skyenv", has_tex_skyenv ); + if( has_tex_skysphere ) { + float mipCount = floor( log2( max(m.sky_refl.w, m.sky_refl.h) ) ); + shader_texture("tex_skysphere", m.sky_refl); + shader_float( "skysphere_mip_count", mipCount ); + } + if( has_tex_skyenv ) { + shader_texture( "tex_skyenv", m.sky_env ); + } + shader_texture( "tex_brdf_lut", brdf_lut() ); + shader_bind(old_shader); + } +} +#endif +static +void model_set_state(model_t m) { + if(!m.iqm) return; + iqm_t *q = m.iqm; + + glBindVertexArray( q->vao ); + + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, q->ibo); + glBindBuffer(GL_ARRAY_BUFFER, q->vbo); + + glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(iqm_vertex), (GLvoid*)offsetof(iqm_vertex, position) ); + glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, sizeof(iqm_vertex), (GLvoid*)offsetof(iqm_vertex, texcoord) ); + glVertexAttribPointer(2, 3, GL_FLOAT, GL_FALSE, sizeof(iqm_vertex), (GLvoid*)offsetof(iqm_vertex, normal) ); + glVertexAttribPointer(3, 4, GL_FLOAT, GL_FALSE, sizeof(iqm_vertex), (GLvoid*)offsetof(iqm_vertex, tangent) ); + + glEnableVertexAttribArray(0); + glEnableVertexAttribArray(1); + glEnableVertexAttribArray(2); + glEnableVertexAttribArray(3); + + // vertex color + glVertexAttribPointer(11, 4, GL_UNSIGNED_BYTE, GL_FALSE, sizeof(iqm_vertex), (GLvoid*)offsetof(iqm_vertex,color) ); + glEnableVertexAttribArray(11); + + // lmap data + glVertexAttribPointer(12, 2, GL_FLOAT, GL_FALSE, sizeof(iqm_vertex), (GLvoid*)offsetof(iqm_vertex, texcoord2) ); + glEnableVertexAttribArray(12); + + // animation + if(q->numframes > 0) { + glVertexAttribPointer( 8, 4, GL_UNSIGNED_BYTE, GL_FALSE, sizeof(iqm_vertex), (GLvoid*)offsetof(iqm_vertex,blendindexes) ); + glVertexAttribPointer( 9, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(iqm_vertex), (GLvoid*)offsetof(iqm_vertex,blendweights) ); + glVertexAttribPointer(10, 1, GL_FLOAT, GL_FALSE, sizeof(iqm_vertex), (GLvoid*)offsetof(iqm_vertex, blendvertexindex) ); + glEnableVertexAttribArray(8); + glEnableVertexAttribArray(9); + glEnableVertexAttribArray(10); + } + + // mat4 attribute; for instanced rendering + if( 1 ) { + unsigned vec4_size = sizeof(vec4); + unsigned mat4_size = sizeof(vec4) * 4; + + // vertex buffer object + glBindBuffer(GL_ARRAY_BUFFER, m.vao_instanced); + glBufferData(GL_ARRAY_BUFFER, m.num_instances * mat4_size, m.instanced_matrices, GL_STREAM_DRAW); + + glVertexAttribPointer(4, 4, GL_FLOAT, GL_FALSE, 4 * vec4_size, (GLvoid*)(((char*)NULL)+(0 * vec4_size))); + glVertexAttribPointer(5, 4, GL_FLOAT, GL_FALSE, 4 * vec4_size, (GLvoid*)(((char*)NULL)+(1 * vec4_size))); + glVertexAttribPointer(6, 4, GL_FLOAT, GL_FALSE, 4 * vec4_size, (GLvoid*)(((char*)NULL)+(2 * vec4_size))); + glVertexAttribPointer(7, 4, GL_FLOAT, GL_FALSE, 4 * vec4_size, (GLvoid*)(((char*)NULL)+(3 * vec4_size))); + + glEnableVertexAttribArray(4); + glEnableVertexAttribArray(5); + glEnableVertexAttribArray(6); + glEnableVertexAttribArray(7); + + glVertexAttribDivisor(4, 1); + glVertexAttribDivisor(5, 1); + glVertexAttribDivisor(6, 1); + glVertexAttribDivisor(7, 1); + } + + // 7 bitangent? into texcoord.z? + + glBindVertexArray( 0 ); +} + +static +bool model_load_meshes(iqm_t *q, const struct iqmheader *hdr, model_t *m) { + if(q->meshdata) return false; + + lil32p(&q->buf[hdr->ofs_vertexarrays], hdr->num_vertexarrays*sizeof(struct iqmvertexarray)/sizeof(uint32_t)); + lil32p(&q->buf[hdr->ofs_triangles], hdr->num_triangles*sizeof(struct iqmtriangle)/sizeof(uint32_t)); + lil32p(&q->buf[hdr->ofs_meshes], hdr->num_meshes*sizeof(struct iqmmesh)/sizeof(uint32_t)); + lil32p(&q->buf[hdr->ofs_joints], hdr->num_joints*sizeof(struct iqmjoint)/sizeof(uint32_t)); + + q->meshdata = q->buf; + q->nummeshes = hdr->num_meshes; + q->numtris = hdr->num_triangles; + q->numverts = hdr->num_vertexes; + q->numjoints = hdr->num_joints; + q->outframe = CALLOC(hdr->num_joints, sizeof(mat34)); + + float *inposition = NULL, *innormal = NULL, *intangent = NULL, *intexcoord = NULL, *invertexindex = NULL; + uint8_t *inblendindex8 = NULL, *inblendweight8 = NULL; + int *inblendindexi = NULL; float *inblendweightf = NULL; + uint8_t *invertexcolor8 = NULL; + struct iqmvertexarray *vas = (struct iqmvertexarray *)&q->buf[hdr->ofs_vertexarrays]; + for(int i = 0; i < (int)hdr->num_vertexarrays; i++) { + struct iqmvertexarray *va = &vas[i]; + switch(va->type) { + default: continue; // return PANIC("unknown iqm vertex type (%d)", va->type), false; + break; case IQM_POSITION: ASSERT(va->format == IQM_FLOAT && va->size == 3); inposition = (float *)&q->buf[va->offset]; lil32pf(inposition, 3*hdr->num_vertexes); + break; case IQM_NORMAL: ASSERT(va->format == IQM_FLOAT && va->size == 3); innormal = (float *)&q->buf[va->offset]; lil32pf(innormal, 3*hdr->num_vertexes); + break; case IQM_TANGENT: ASSERT(va->format == IQM_FLOAT && va->size == 4); intangent = (float *)&q->buf[va->offset]; lil32pf(intangent, 4*hdr->num_vertexes); + break; case IQM_TEXCOORD: ASSERT(va->format == IQM_FLOAT && va->size == 2); intexcoord = (float *)&q->buf[va->offset]; lil32pf(intexcoord, 2*hdr->num_vertexes); + break; case IQM_COLOR: ASSERT(va->size == 4); ASSERT(va->format == IQM_UBYTE); invertexcolor8 = (uint8_t *)&q->buf[va->offset]; + break; case IQM_BLENDINDEXES: ASSERT(va->size == 4); ASSERT(va->format == IQM_UBYTE || va->format == IQM_INT); + if(va->format == IQM_UBYTE) inblendindex8 = (uint8_t *)&q->buf[va->offset]; + else inblendindexi = (int *)&q->buf[va->offset]; + break; case IQM_BLENDWEIGHTS: ASSERT(va->size == 4); ASSERT(va->format == IQM_UBYTE || va->format == IQM_FLOAT); + if(va->format == IQM_UBYTE) inblendweight8 = (uint8_t *)&q->buf[va->offset]; + else inblendweightf = (float *)&q->buf[va->offset]; + invertexindex = (inblendweight8 ? (float*)(inblendweight8 + 4) : inblendweightf + 4 ); + } + } + + if (hdr->ofs_bounds) lil32p(q->buf + hdr->ofs_bounds, hdr->num_frames * sizeof(struct iqmbounds)); + if (hdr->ofs_bounds) q->bounds = (struct iqmbounds *) &q->buf[hdr->ofs_bounds]; + + q->meshes = (struct iqmmesh *)&q->buf[hdr->ofs_meshes]; + q->joints = (struct iqmjoint *)&q->buf[hdr->ofs_joints]; + + q->baseframe = CALLOC(hdr->num_joints, sizeof(mat34)); + q->inversebaseframe = CALLOC(hdr->num_joints, sizeof(mat34)); + for(int i = 0; i < (int)hdr->num_joints; i++) { + struct iqmjoint *j = &q->joints[i]; + compose34(q->baseframe[i], ptr3(j->translate), normq(ptrq(j->rotate)), ptr3(j->scale)); + invert34(q->inversebaseframe[i], q->baseframe[i]); + if(j->parent >= 0) { + multiply34x2(q->baseframe[i], q->baseframe[j->parent], q->baseframe[i]); + multiply34(q->inversebaseframe[i], q->inversebaseframe[j->parent]); + } + } + + struct iqmtriangle *tris = (struct iqmtriangle *)&q->buf[hdr->ofs_triangles]; + m->num_tris = hdr->num_triangles; + m->tris = (void*)tris; + + glGenVertexArrays(1, &q->vao); + glBindVertexArray(q->vao); + + if(!q->ibo) glGenBuffers(1, &q->ibo); + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, q->ibo); + glBufferData(GL_ELEMENT_ARRAY_BUFFER, hdr->num_triangles*sizeof(struct iqmtriangle), tris, GL_STATIC_DRAW); + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); + + iqm_vertex *verts = CALLOC(hdr->num_vertexes, sizeof(iqm_vertex)); + for(int i = 0; i < (int)hdr->num_vertexes; i++) { + iqm_vertex *v = &verts[i]; + if(inposition) memcpy(v->position, &inposition[i*3], sizeof(v->position)); + if(innormal) memcpy(v->normal, &innormal[i*3], sizeof(v->normal)); + if(intangent) memcpy(v->tangent, &intangent[i*4], sizeof(v->tangent)); + if(intexcoord) { + memcpy(v->texcoord, &intexcoord[i*2], sizeof(v->texcoord)); + memcpy(v->texcoord2, &intexcoord[i*2], sizeof(v->texcoord2)); // populate UV1 with the same value, used by lightmapper + } + if(inblendindex8) memcpy(v->blendindexes, &inblendindex8[i*4], sizeof(v->blendindexes)); + if(inblendweight8) memcpy(v->blendweights, &inblendweight8[i*4], sizeof(v->blendweights)); + if(inblendindexi) { + uint8_t conv[4] = { inblendindexi[i*4], inblendindexi[i*4+1], inblendindexi[i*4+2], inblendindexi[i*4+3] }; + memcpy(v->blendindexes, conv, sizeof(v->blendindexes)); + } + if(inblendweightf) { + uint8_t conv[4] = { inblendweightf[i*4] * 255, inblendweightf[i*4+1] * 255, inblendweightf[i*4+2] * 255, inblendweightf[i*4+3] * 255 }; + memcpy(v->blendweights, conv, sizeof(v->blendweights)); + } + if(invertexindex) { + float conv = i; + memcpy(&v->blendvertexindex, &conv, 4); + } + if(invertexcolor8) memcpy(v->color, &invertexcolor8[i*4], sizeof(v->color)); + } + + if(!q->vbo) glGenBuffers(1, &q->vbo); + glBindBuffer(GL_ARRAY_BUFFER, q->vbo); + glBufferData(GL_ARRAY_BUFFER, hdr->num_vertexes*sizeof(iqm_vertex), verts, GL_STATIC_DRAW); + glBindBuffer(GL_ARRAY_BUFFER, 0); + + m->stride = sizeof(iqm_vertex); + #if 0 + m->stride = 0; + if(inposition) m->stride += sizeof(verts[0].position); + if(innormal) m->stride += sizeof(verts[0].normal); + if(intangent) m->stride += sizeof(verts[0].tangent); + if(intexcoord) m->stride += sizeof(verts[0].texcoord); + if(inblendindex8) m->stride += sizeof(verts[0].blendindexes); // no index8? bug? + if(inblendweight8) m->stride += sizeof(verts[0].blendweights); // no weight8? bug? + if(inblendindexi) m->stride += sizeof(verts[0].blendindexes); + if(inblendweightf) m->stride += sizeof(verts[0].blendweights); + if(invertexcolor8) m->stride += sizeof(verts[0].color); + #endif + //for( int i = 0; i < 16; ++i ) printf("%.9g%s", ((float*)verts)[i], (i % 3) == 2 ? "\n" : ","); + m->verts = verts; + /*m->verts = 0; FREE(verts);*/ + + q->textures = CALLOC(hdr->num_meshes * 8, sizeof(GLuint)); + q->colormaps = CALLOC(hdr->num_meshes * 8, sizeof(vec4)); + for(int i = 0; i < (int)hdr->num_meshes; i++) { + int invalid = texture_checker().id; + q->textures[i] = invalid; + } + + const char *str = hdr->ofs_text ? (char *)&q->buf[hdr->ofs_text] : ""; + for(int i = 0; i < (int)hdr->num_meshes; i++) { + struct iqmmesh *m = &q->meshes[i]; + PRINTF("loaded mesh: %s\n", &str[m->name]); + } + + return true; +} + +static +bool model_load_anims(iqm_t *q, const struct iqmheader *hdr) { + if((int)hdr->num_poses != q->numjoints) return false; + + if(q->animdata) { + if(q->animdata != q->meshdata) FREE(q->animdata); + FREE(q->frames); + q->animdata = NULL; + q->anims = NULL; + q->frames = 0; + q->numframes = 0; + q->numanims = 0; + } + + lil32p(&q->buf[hdr->ofs_poses], hdr->num_poses*sizeof(struct iqmpose)/sizeof(uint32_t)); + lil32p(&q->buf[hdr->ofs_anims], hdr->num_anims*sizeof(struct iqmanim)/sizeof(uint32_t)); + lil16p((uint16_t *)&q->buf[hdr->ofs_frames], hdr->num_frames*hdr->num_framechannels); + + q->animdata = q->buf; + q->numanims = hdr->num_anims; + q->numframes = hdr->num_frames; + + q->anims = (struct iqmanim *)&q->buf[hdr->ofs_anims]; + q->poses = (struct iqmpose *)&q->buf[hdr->ofs_poses]; + q->frames = CALLOC(hdr->num_frames * hdr->num_poses, sizeof(mat34)); + uint16_t *framedata = (uint16_t *)&q->buf[hdr->ofs_frames]; + + for(int i = 0; i < (int)hdr->num_frames; i++) { + for(int j = 0; j < (int)hdr->num_poses; j++) { + struct iqmpose *p = &q->poses[j]; + quat rotate; + vec3 translate, scale; + translate.x = p->channeloffset[0]; if(p->mask&0x01) translate.x += *framedata++ * p->channelscale[0]; + translate.y = p->channeloffset[1]; if(p->mask&0x02) translate.y += *framedata++ * p->channelscale[1]; + translate.z = p->channeloffset[2]; if(p->mask&0x04) translate.z += *framedata++ * p->channelscale[2]; + + rotate.x = p->channeloffset[3]; if(p->mask&0x08) rotate.x += *framedata++ * p->channelscale[3]; + rotate.y = p->channeloffset[4]; if(p->mask&0x10) rotate.y += *framedata++ * p->channelscale[4]; + rotate.z = p->channeloffset[5]; if(p->mask&0x20) rotate.z += *framedata++ * p->channelscale[5]; + rotate.w = p->channeloffset[6]; if(p->mask&0x40) rotate.w += *framedata++ * p->channelscale[6]; + + scale.x = p->channeloffset[7]; if(p->mask&0x80) scale.x += *framedata++ * p->channelscale[7]; + scale.y = p->channeloffset[8]; if(p->mask&0x100) scale.y += *framedata++ * p->channelscale[8]; + scale.z = p->channeloffset[9]; if(p->mask&0x200) scale.z += *framedata++ * p->channelscale[9]; + + // Concatenate each pose with the inverse base pose to avoid doing this at animation time. + // If the joint has a parent, then it needs to be pre-concatenated with its parent's base pose. + // Thus it all negates at animation time like so: + // (parentPose * parentInverseBasePose) * (parentBasePose * childPose * childInverseBasePose) => + // parentPose * (parentInverseBasePose * parentBasePose) * childPose * childInverseBasePose => + // parentPose * childPose * childInverseBasePose + + mat34 m; compose34(m, translate, normq(rotate), scale); + if(p->parent >= 0) multiply34x3(q->frames[i*hdr->num_poses + j], q->baseframe[p->parent], m, q->inversebaseframe[j]); + else multiply34x2(q->frames[i*hdr->num_poses + j], m, q->inversebaseframe[j]); + } + } + + // const char *str = hdr->ofs_text ? (char *)&q->buf[hdr->ofs_text] : ""; + // for(int i = 0; i < (int)hdr->num_anims; i++) { + // struct iqmanim *a = &anims[i]; + // PRINTF("loaded anim[%d]: %s\n", i, &str[a->name]); + // } + + return true; +} + +// prevents crash on osx when strcpy'ing non __restrict arguments +static char* strcpy_safe(char *d, const char *s) { + sprintf(d, "%s", s); + return d; +} + +static +void model_load_pbr_layer(material_layer_t *layer, const char *texname, bool load_as_srgb) { + strcpy_safe(layer->texname, texname); + colormap(&layer->map, texname, false); +} + +static +void model_load_pbr(material_t *mt) { + // initialise default colors + mt->layer[MATERIAL_CHANNEL_DIFFUSE].map.color = vec4(0.5,0.5,0.5,0.5); + mt->layer[MATERIAL_CHANNEL_NORMALS].map.color = vec4(0,0,0,0); + mt->layer[MATERIAL_CHANNEL_SPECULAR].map.color = vec4(0,0,0,0); + mt->layer[MATERIAL_CHANNEL_SPECULAR].value = 1.0f; // specular_shininess + mt->layer[MATERIAL_CHANNEL_ALBEDO].map.color = vec4(0.5,0.5,0.5,1.0); + mt->layer[MATERIAL_CHANNEL_ROUGHNESS].map.color = vec4(1,1,1,1); + mt->layer[MATERIAL_CHANNEL_METALLIC].map.color = vec4(0,0,0,0); + mt->layer[MATERIAL_CHANNEL_AO].map.color = vec4(1,1,1,1); + mt->layer[MATERIAL_CHANNEL_AMBIENT].map.color = vec4(0,0,0,1); + mt->layer[MATERIAL_CHANNEL_EMISSIVE].map.color = vec4(0,0,0,0); + + // load colormaps + array(char*) tokens = strsplit(mt->name, "+"); + for( int j = 0, end = array_count(tokens); j < end; ++j ) { + char *t = tokens[j]; + if( strstri(t, "_D.") || strstri(t, "Diffuse") || strstri(t, "BaseColor") || strstri(t, "Base_Color") ) model_load_pbr_layer(&mt->layer[MATERIAL_CHANNEL_DIFFUSE], t, 1); + if( strstri(t, "_N.") || strstri(t, "Normal") ) model_load_pbr_layer(&mt->layer[MATERIAL_CHANNEL_NORMALS], t, 0); + if( strstri(t, "_S.") || strstri(t, "Specular") ) model_load_pbr_layer(&mt->layer[MATERIAL_CHANNEL_SPECULAR], t, 0); + if( strstri(t, "_A.") || strstri(t, "Albedo") ) model_load_pbr_layer(&mt->layer[MATERIAL_CHANNEL_ALBEDO], t, 1); // 0? + if( strstri(t, "Roughness") ) model_load_pbr_layer(&mt->layer[MATERIAL_CHANNEL_ROUGHNESS], t, 0); + if( strstri(t, "_MR.")|| strstri(t, "MetallicRoughness") || strstri(t, "OcclusionRoughnessMetallic") ) model_load_pbr_layer(&mt->layer[MATERIAL_CHANNEL_ROUGHNESS], t, 0); + else + if( strstri(t, "_M.") || strstri(t, "Metallic") ) model_load_pbr_layer(&mt->layer[MATERIAL_CHANNEL_METALLIC], t, 0); + //if( strstri(t, "_S.") || strstri(t, "Shininess") ) model_load_pbr_layer(&mt->layer[MATERIAL_CHANNEL_ROUGHNESS], t, 0); + //if( strstri(t, "_A.") || strstri(t, "Ambient") ) model_load_pbr_layer(&mt->layer[MATERIAL_CHANNEL_AMBIENT], t, 0); + if( strstri(t, "_E.") || strstri(t, "Emissive") ) model_load_pbr_layer(&mt->layer[MATERIAL_CHANNEL_EMISSIVE], t, 1); + if( strstri(t, "_AO.") || strstri(t, "AO") || strstri(t, "Occlusion") ) model_load_pbr_layer(&mt->layer[MATERIAL_CHANNEL_AO], t, 0); + } +} + +static +bool model_load_textures(iqm_t *q, const struct iqmheader *hdr, model_t *model, int _flags) { + q->textures = q->textures ? q->textures : CALLOC(hdr->num_meshes * 8, sizeof(GLuint)); // up to 8 textures per mesh + q->colormaps = q->colormaps ? q->colormaps : CALLOC(hdr->num_meshes * 8, sizeof(vec4)); // up to 8 colormaps per mesh + + GLuint *out = q->textures; + + const char *str = hdr->ofs_text ? (char *)&q->buf[hdr->ofs_text] : ""; + for(int i = 0; i < (int)hdr->num_meshes; i++) { + struct iqmmesh *m = &q->meshes[i]; + + // reuse texture+material if already decoded + bool reused = 0; + for( int j = 0; !reused && j < model->num_textures; ++j ) { + if( !strcmpi(model->texture_names[j], &str[m->material])) { + + *out++ = model->materials[j].layer[0].map.texture->id; + + { + model->num_textures++; + array_push(model->texture_names, STRDUP(&str[m->material])); + + array_push(model->materials, model->materials[j]); + array_back(model->materials)->name = STRDUP(&str[m->material]); + } + + reused = true; + } + } + if( reused ) continue; + + // decode texture+material + int flags = TEXTURE_MIPMAPS|TEXTURE_REPEAT|TEXTURE_ANISOTROPY; // LINEAR, NEAREST + if (!(_flags & MODEL_NO_FILTERING)) + flags |= TEXTURE_LINEAR; + int invalid = texture_checker().id; + +#if 1 + char *material_embedded_texture = strstr(&str[m->material], "+b64:"); + if( material_embedded_texture ) { + *material_embedded_texture = '\0'; + material_embedded_texture += 5; + array(char) embedded_texture = base64_decode(material_embedded_texture, strlen(material_embedded_texture)); + //printf("%s %d\n", material_embedded_texture, array_count(embedded_texture)); + //hexdump(embedded_texture, array_count(embedded_texture)); + *out = texture_compressed_from_mem( embedded_texture, array_count(embedded_texture), flags ).id; + array_free(embedded_texture); + } + + char* material_color_hex = strstr(&str[m->material], "+$"); + vec4 material_color = vec4(1,1,1,1); + if( material_color_hex ) { + *material_color_hex = '\0'; + material_color_hex += 2; + material_color.r = ((material_color_hex[0] >= 'a') ? material_color_hex[0] - 'a' + 10 : material_color_hex[0] - '0') / 15.f; + material_color.g = ((material_color_hex[1] >= 'a') ? material_color_hex[1] - 'a' + 10 : material_color_hex[1] - '0') / 15.f; + material_color.b = ((material_color_hex[2] >= 'a') ? material_color_hex[2] - 'a' + 10 : material_color_hex[2] - '0') / 15.f; + #if 0 // not enabled because of some .obj files like suzanne, with color_hex=9990 found + if(material_color_hex[3]) + material_color.a = ((material_color_hex[3] >= 'a') ? material_color_hex[3] - 'a' + 10 : material_color_hex[3] - '0') / 15.f; + else + #endif + material_color.a = 1; + } + + if( !material_embedded_texture ) { + char* material_name; + // remove any material+name from materials (.fbx) + // try left token first + if( 1 ) { + material_name = va("%s", &str[m->material]); + char* plus = strrchr(material_name, '+'); + if (plus) { strcpy_safe(plus, file_ext(material_name)); } + *out = texture_compressed(material_name, flags).id; + } + // else try right token + if (*out == invalid) { + material_name = file_normalize( va("%s", &str[m->material]) ); + char* plus = strrchr(material_name, '+'), *slash = strrchr(material_name, '/'); + if (plus) { + strcpy_safe(slash ? slash + 1 : material_name, plus + 1); + *out = texture_compressed(material_name, flags).id; + } + } + // else last resort + if (*out == invalid) { + *out = texture_compressed(material_name, flags).id; // needed? + } + } + + if( *out != invalid) { + PRINTF("loaded material[%d]: %s\n", i, &str[m->material]); + } else { + PRINTF("warn: material[%d] not found: %s\n", i, &str[m->material]); + PRINTF("warn: using placeholder material[%d]=texture_checker\n", i); + *out = texture_checker().id; // placeholder + } + + inscribe_tex:; + { + model->num_textures++; + array_push(model->texture_names, STRDUP(&str[m->material])); + + material_t mt = {0}; + mt.name = STRDUP(&str[m->material]); + + // initialise basic texture layer + mt.layer[MATERIAL_CHANNEL_DIFFUSE].map.color = material_color_hex ? material_color : vec4(1,1,1,1); + mt.layer[MATERIAL_CHANNEL_DIFFUSE].map.texture = CALLOC(1, sizeof(texture_t)); + mt.layer[MATERIAL_CHANNEL_DIFFUSE].map.texture->id = *out++; + + array_push(model->materials, mt); + } + +#else + material_t mt = {0}; + mt.name = STRDUP(&str[m->material]); + + array(char*) tokens = strsplit(&str[m->material], "+"); + for each_array(tokens, char*, it) { + *out = texture(it, flags).id; + + if( *out == invalid ) { + PRINTF("warn: material[%d] not found: %s\n", i, it); + } else { + PRINTF("loaded material[%d]: %s\n", i, it); + + mt.layer[mt.count++].texture = *out; + + ++out; + } + } + + // if no materials were loaded, try to signal a checkered placeholder + if( out == textures ) { + PRINTF("warn: using placeholder material[%d]=texture_checker\n", i); + *out++ = invalid; + } + + int count = (int)(intptr_t)(out - textures); + model->num_textures += count; + array_push(model->texture_names, STRDUP(&str[m->material])); + + array_push(model->materials, mt); +#endif + + } + + if( array_count(model->materials) == 0 ) { + material_t mt = {0}; + mt.name = "placeholder"; + mt.layer[0].map.color = vec4(1,1,1,1); + mt.layer[0].map.texture = CALLOC(1, sizeof(texture_t)); + mt.layer[0].map.texture->id = texture_checker().id; + + array_push(model->materials, mt); + } + + return true; +} + +static +void model_set_renderstates(model_t *m) { + for (int i = 0; irs[i] = renderstate(); + } + + // Normal pass + renderstate_t *normal_rs = &m->rs[RENDER_PASS_NORMAL]; + { + normal_rs->blend_enabled = 1; + normal_rs->blend_src = GL_SRC_ALPHA; + normal_rs->blend_dst = GL_ONE_MINUS_SRC_ALPHA; + normal_rs->cull_face_mode = GL_BACK; + normal_rs->front_face = GL_CW; + } + + // Shadow pass @todo + renderstate_t *shadow_rs = &m->rs[RENDER_PASS_SHADOW]; + { + shadow_rs->blend_enabled = 1; + shadow_rs->blend_src = GL_SRC_ALPHA; + shadow_rs->blend_dst = GL_ONE_MINUS_SRC_ALPHA; + shadow_rs->cull_face_mode = GL_BACK; + shadow_rs->front_face = GL_CW; + } + + // Lightmap pass + renderstate_t *lightmap_rs = &m->rs[RENDER_PASS_LIGHTMAP]; + { + lightmap_rs->blend_enabled = 0; + lightmap_rs->cull_face_enabled = 0; + lightmap_rs->front_face = GL_CW; + } +} + +model_t model_from_mem(const void *mem, int len, int flags) { + model_t m = {0}; + + m.stored_flags = flags; + m.shading = SHADING_PHONG; + model_set_renderstates(&m); + + const char *ptr = (const char *)mem; + iqm_t *q = CALLOC(1, sizeof(iqm_t)); + + int error = 1; + if( ptr && len ) { + struct iqmheader hdr; memcpy(&hdr, ptr, sizeof(hdr)); ptr += sizeof(hdr); + if( !memcmp(hdr.magic, IQM_MAGIC, sizeof(hdr.magic))) { + lil32p(&hdr.version, (sizeof(hdr) - sizeof(hdr.magic))/sizeof(uint32_t)); + if(hdr.version == IQM_VERSION) { + q->buf = CALLOC(hdr.filesize, sizeof(uint8_t)); + memcpy(q->buf + sizeof(hdr), ptr, hdr.filesize - sizeof(hdr)); + error = 0; + if( hdr.num_meshes > 0 && !(flags & MODEL_NO_MESHES) ) error |= !model_load_meshes(q, &hdr, &m); + if( hdr.num_meshes > 0 && !(flags & MODEL_NO_TEXTURES) ) error |= !model_load_textures(q, &hdr, &m, flags); + else { + // setup fallback + material_t mt = {0}; + mt.name = "placeholder"; + mt.layer[0].map.color = vec4(1,1,1,1); + mt.layer[0].map.texture = CALLOC(1, sizeof(texture_t)); + mt.layer[0].map.texture->id = texture_checker().id; + + array_push(m.materials, mt); + } + if( hdr.num_anims > 0 && !(flags & MODEL_NO_ANIMATIONS) ) error |= !model_load_anims(q, &hdr); + if( q->buf != q->meshdata && q->buf != q->animdata ) FREE(q->buf); + } + } + } + + if( error ) { + PRINTF("Error: cannot load %s", "model"); + FREE(q), q = 0; + } else { + m.vao = q->vao; + m.ibo = q->ibo; + m.vbo = q->vbo; + m.num_verts = q->numverts; + + // m.boxes = bounds; // <@todo + m.num_meshes = q->nummeshes; + m.num_triangles = q->numtris; + m.num_joints = q->numjoints; + //m.num_poses = numposes; + m.num_anims = q->numanims; + m.num_frames = q->numframes; + m.iqm = q; + m.curframe = model_animate(m, 0); + + //m.num_textures = q->nummeshes; // assume 1 texture only per mesh + m.textures = (q->textures); + + m.flags = flags; + + id44(m.pivot); + + m.num_instances = 0; + m.instanced_matrices = m.pivot; + + glGenBuffers(1, &m.vao_instanced); + model_set_state(m); + model_shading(&m, (flags & MODEL_PBR) ? SHADING_PBR : SHADING_PHONG); + } + return m; +} +model_t model(const char *filename, int flags) { + int len; // vfs_pushd(filedir(filename)) + char *ptr = vfs_load(filename, &len); // + vfs_popd + return model_from_mem( ptr, len, flags ); +} + +bool model_get_bone_pose(model_t m, unsigned joint, mat34 *out) { + if(!m.iqm) return false; + iqm_t *q = m.iqm; + + if(joint >= q->numjoints) return false; + + multiply34x2(*out, q->outframe[joint], q->baseframe[joint]); + return true; +} + +anim_t clip(float minframe, float maxframe, float blendtime, unsigned flags) { + return ((anim_t){minframe, maxframe, blendtime, flags, 1e6}); +} +anim_t loop(float minframe, float maxframe, float blendtime, unsigned flags) { + return clip(minframe, maxframe, blendtime, flags | ANIM_LOOP); +} + +array(anim_t) animlist(const char *pathfile) { + anim_t *animlist = 0; + char *anim_file = vfs_read(strendi(pathfile,".txt") ? pathfile : va("%s@animlist.txt", pathfile)); + if( anim_file ) { + // deserialize anim + for each_substring(anim_file, "\r\n", anim) { + int from, to; + char anim_name[128] = {0}; + if( sscanf(anim, "%*s %d-%d %127[^\r\n]", &from, &to, anim_name) != 3) continue; + array_push(animlist, !!strstri(anim_name, "loop") || !strcmpi(anim_name, "idle") ? loop(from, to, 0, 0) : clip(from, to, 0, 0)); // [from,to,flags] + array_back(animlist)->name = strswap(strswap(strswap(STRDUP(anim_name), "Loop", ""), "loop", ""), "()", ""); // @leak + } + } else { + // placeholder + array_push(animlist, clip(0,1,0,0)); + array_back(animlist)->name = STRDUP("Error"); // @leak + } + return animlist; +} + +static +void anim_tick(anim_t *p, bool is_primary, float delta) { // delta can be negative (reverses anim) + if( !is_primary ) p->active = 0; + if( is_primary && !p->active ) { + p->active = 1; + p->timer = 0; + p->alpha = 0; + if( p->flags & ANIM_DONT_RESET_AFTER_USE ) {} else p->curframe = 1e6; + } + + p->alpha = 1 - ease(p->timer / p->blendtime, p->easing); + p->timer += window_delta(); + + p->curframe += delta; + if(p->curframe < p->from || p->curframe > p->to ) p->curframe = delta >= 0 ? p->from : p->to; + p->pose = pose(delta >= 0, p->curframe, p->from, p->to, p->flags & ANIM_LOOP, NULL); +} + +float model_animate_blends(model_t m, anim_t *primary, anim_t *secondary, float delta) { + if(!m.iqm) return -1; + iqm_t *q = m.iqm; + + anim_tick(primary, 1, delta); + anim_tick(secondary, 0, delta); + + float alpha = primary->alpha; +// if( alpha <= 0 ) return model_animate(m, primary.pose.x); +// if( alpha >= 1 ) return model_animate(m, secondary.pose.x); + + unsigned frame1 = primary->pose.x; + unsigned frame2 = primary->pose.y; + float alphaA = primary->pose.z; + + unsigned frame3 = secondary->pose.x; + unsigned frame4 = secondary->pose.y; + float alphaB = secondary->pose.z; + + mat34 *mat1 = &q->frames[frame1 * q->numjoints]; + mat34 *mat2 = &q->frames[frame2 * q->numjoints]; + mat34 *mat3 = &q->frames[frame3 * q->numjoints]; + mat34 *mat4 = &q->frames[frame4 * q->numjoints]; + + for(int i = 0; i < q->numjoints; i++) { + mat34 matA, matB, matF; + lerp34(matA, mat1[i], mat2[i], alphaA); + lerp34(matB, mat3[i], mat4[i], alphaB); + lerp34(matF, matA, matB, alpha ); + if(q->joints[i].parent >= 0) multiply34x2(q->outframe[i], q->outframe[q->joints[i].parent], matF); + else copy34(q->outframe[i], matF); + } + + return frame1 + alpha; +} + +vec3 pose(bool forward_time, float curframe, int minframe, int maxframe, bool loop, float *retframe) { + float offset = curframe - (int)curframe; +#if 1 + int frame1 = (int)curframe; + int frame2 = frame1 + (forward_time ? 1 : -1); +#else + float frame1 = curframe; + float frame2 = curframe + (forward_time ? 1 : -1); +#endif + + if( loop ) { + int distance = maxframe - minframe; + frame1 = fmod(frame1 - minframe, distance) + minframe; // frame1 >= maxframe ? minframe : frame1 < minframe ? maxframe - clampf(minframe - frame1, 0, distance) : frame1; + frame2 = fmod(frame2 - minframe, distance) + minframe; // frame2 >= maxframe ? minframe : frame2 < minframe ? maxframe - clampf(minframe - frame2, 0, distance) : frame2; + if(retframe) *retframe = fmod(frame1 + offset - minframe, distance) + minframe; + } else { + frame1 = clampf(frame1, minframe, maxframe); + frame2 = clampf(frame2, minframe, maxframe); + if(retframe) *retframe = clampf(frame1 + offset, minframe, maxframe); + } + + return vec3(frame1 + (offset > 0 && offset < 1 ? offset : 0),frame2,offset); +} + +float model_animate_clip(model_t m, float curframe, int minframe, int maxframe, bool loop) { + if(!m.iqm) return -1; + iqm_t *q = m.iqm; + + float retframe = -1; + if( q->numframes > 0 ) { + vec3 p = pose(curframe >= m.curframe, curframe, minframe, maxframe, loop, &retframe); + int frame1 = p.x; + int frame2 = p.y; + float offset = p.z; + + mat34 *mat1 = &q->frames[frame1 * q->numjoints]; + mat34 *mat2 = &q->frames[frame2 * q->numjoints]; + + // @todo: add animation blending and inter-frame blending here + for(int i = 0; i < q->numjoints; i++) { + mat34 mat; lerp34(mat, mat1[i], mat2[i], offset); + if(q->joints[i].parent >= 0) multiply34x2(q->outframe[i], q->outframe[q->joints[i].parent], mat); + else copy34(q->outframe[i], mat); + } + } + + return retframe; +} + +void model_render_skeleton(model_t m, mat44 M) { + if(!m.iqm) return; + iqm_t *q = m.iqm; + + if(!q->numjoints) return; + + ddraw_ontop_push(true); + ddraw_color_push(RED); + + for( int joint = 0; joint < q->numjoints; joint++ ) { + if( q->joints[joint].parent < 0) continue; + + // bone space... + mat34 f; + model_get_bone_pose(m, joint, &f); + vec3 pos = vec3(f[3],f[7],f[11]); + + model_get_bone_pose(m, q->joints[joint].parent, &f); + vec3 src = vec3(f[3],f[7],f[11]); + + // ...to model space + src = transform344(M, src); + pos = transform344(M, pos); + + // red line + ddraw_color(RED); +// ddraw_line(src, pos); + ddraw_bone(src, pos); + + // green dot + ddraw_color(GREEN); + ddraw_point(pos); + + // yellow text + ddraw_color(YELLOW); + ddraw_text(pos, 0.005, va("%d", joint)); + } + + ddraw_color_pop(); + ddraw_ontop_pop(); +} + +float model_animate(model_t m, float curframe) { + if(!m.iqm) return -1; + iqm_t *q = m.iqm; + return model_animate_clip(m, curframe, 0, q->numframes-1, true); +} + +// @fixme: store uniform handles into model_t/colormap_t and rely on those directly +static inline +void shader_colormap_model_internal(const char *col_name, const char *bool_name, const char *tex_name, colormap_t c ) { + // assumes shader uses `struct { vec4 color; bool has_tex } name + sampler2D name_tex;` + shader_vec4( col_name, c.color ); + shader_bool( bool_name, c.texture != NULL ); + if( c.texture ) shader_texture( tex_name, *c.texture ); +} + +static +void model_draw_call(model_t m, int shader) { + if(!m.iqm) return; + iqm_t *q = m.iqm; + + handle old_shader = last_shader; + shader_bind(shader); + + renderstate_t *rs = &m.rs[RENDER_PASS_NORMAL]; + + renderstate_apply(rs); + + glBindVertexArray( q->vao ); + + struct iqmtriangle *tris = NULL; + for(int i = 0; i < q->nummeshes; i++) { + struct iqmmesh *im = &q->meshes[i]; + + if (m.shading != SHADING_PBR) { + shader_texture_unit("u_texture2d", q->textures[i], texture_unit()); + shader_texture("u_lightmap", m.lightmap); + + int loc; + if ((loc = glGetUniformLocation(shader, "u_textured")) >= 0) { + bool textured = !!q->textures[i] && q->textures[i] != texture_checker().id; // m.materials[i].layer[0].texture != texture_checker().id; + glUniform1i(loc, textured ? GL_TRUE : GL_FALSE); + if ((loc = glGetUniformLocation(shader, "u_diffuse")) >= 0) { + glUniform4f(loc, m.materials[i].layer[0].map.color.r, m.materials[i].layer[0].map.color.g, m.materials[i].layer[0].map.color.b, m.materials[i].layer[0].map.color.a); + } + } + + } else { + const material_t *material = &m.materials[i]; + shader_colormap_model_internal( "map_diffuse.color", "map_diffuse.has_tex", "map_diffuse_tex", material->layer[MATERIAL_CHANNEL_DIFFUSE].map ); + shader_colormap_model_internal( "map_normals.color", "map_normals.has_tex", "map_normals_tex", material->layer[MATERIAL_CHANNEL_NORMALS].map ); + shader_colormap_model_internal( "map_specular.color", "map_specular.has_tex", "map_specular_tex", material->layer[MATERIAL_CHANNEL_SPECULAR].map ); + shader_colormap_model_internal( "map_albedo.color", "map_albedo.has_tex", "map_albedo_tex", material->layer[MATERIAL_CHANNEL_ALBEDO].map ); + shader_colormap_model_internal( "map_roughness.color", "map_roughness.has_tex", "map_roughness_tex", material->layer[MATERIAL_CHANNEL_ROUGHNESS].map ); + shader_colormap_model_internal( "map_metallic.color", "map_metallic.has_tex", "map_metallic_tex", material->layer[MATERIAL_CHANNEL_METALLIC].map ); + shader_colormap_model_internal( "map_ao.color", "map_ao.has_tex", "map_ao_tex", material->layer[MATERIAL_CHANNEL_AO].map ); + shader_colormap_model_internal( "map_ambient.color", "map_ambient.has_tex", "map_ambient_tex", material->layer[MATERIAL_CHANNEL_AMBIENT].map ); + shader_colormap_model_internal( "map_emissive.color", "map_emissive.has_tex", "map_emissive_tex", material->layer[MATERIAL_CHANNEL_EMISSIVE].map ); + // shader_float( "specular_shininess", material->specular_shininess ); // unused, basic_specgloss.fs only + } + + glDrawElementsInstanced(GL_TRIANGLES, 3*im->num_triangles, GL_UNSIGNED_INT, &tris[im->first_triangle], m.num_instances); + profile_incstat("Render.num_drawcalls", +1); + profile_incstat("Render.num_triangles", +im->num_triangles); + } + + glBindVertexArray( 0 ); + + shader_bind(old_shader); +} + +void model_render_instanced(model_t m, mat44 proj, mat44 view, mat44* models, int shader, unsigned count) { + if(!m.iqm) return; + iqm_t *q = m.iqm; + + mat44 mv; multiply44x2(mv, view, models[0]); + + if( count != m.num_instances ) { + m.num_instances = count; + m.instanced_matrices = (float*)models; + model_set_state(m); + } + + model_set_uniforms(m, shader > 0 ? shader : m.program, mv, proj, view, models[0]); + model_draw_call(m, shader > 0 ? shader : m.program); +} + +void model_render(model_t m, mat44 proj, mat44 view, mat44 model, int shader) { + model_render_instanced(m, proj, view, (mat44*)model, shader, 1); +} + +static inline +void model_init_uniforms(model_t *m) { + for (int i=0; iuniforms[i] = -1; + unsigned shader = m->program; + int loc; + if ((loc = glGetUniformLocation(shader, "u_mv")) >= 0) + m->uniforms[MODEL_UNIFORM_MV] = loc; + else + if ((loc = glGetUniformLocation(shader, "MV")) >= 0) + m->uniforms[MODEL_UNIFORM_MV] = loc; + + if ((loc = glGetUniformLocation(shader, "u_mvp")) >= 0) + m->uniforms[MODEL_UNIFORM_MVP] = loc; + else + if ((loc = glGetUniformLocation(shader, "MVP")) >= 0) + m->uniforms[MODEL_UNIFORM_MVP] = loc; + + if ((loc = glGetUniformLocation(shader, "u_vp")) >= 0) + m->uniforms[MODEL_UNIFORM_VP] = loc; + else + if ((loc = glGetUniformLocation(shader, "VP")) >= 0) + m->uniforms[MODEL_UNIFORM_VP] = loc; + + if ((loc = glGetUniformLocation(shader, "u_cam_pos")) >= 0) + m->uniforms[MODEL_UNIFORM_CAM_POS] = loc; + else + if ((loc = glGetUniformLocation(shader, "cam_pos")) >= 0) + m->uniforms[MODEL_UNIFORM_CAM_POS] = loc; + + if ((loc = glGetUniformLocation(shader, "u_cam_dir")) >= 0) + m->uniforms[MODEL_UNIFORM_CAM_DIR] = loc; + else + if ((loc = glGetUniformLocation(shader, "cam_dir")) >= 0) + m->uniforms[MODEL_UNIFORM_CAM_DIR] = loc; + + if ((loc = glGetUniformLocation(shader, "u_billboard")) >= 0) + m->uniforms[MODEL_UNIFORM_BILLBOARD] = loc; + else + if ((loc = glGetUniformLocation(shader, "billboard")) >= 0) + m->uniforms[MODEL_UNIFORM_BILLBOARD] = loc; + + if ((loc = glGetUniformLocation(shader, "u_texlit")) >= 0) + m->uniforms[MODEL_UNIFORM_TEXLIT] = loc; + else + if ((loc = glGetUniformLocation(shader, "texlit")) >= 0) + m->uniforms[MODEL_UNIFORM_TEXLIT] = loc; + + if ((loc = glGetUniformLocation(shader, "M")) >= 0) + m->uniforms[MODEL_UNIFORM_MODEL] = loc; + else + if ((loc = glGetUniformLocation(shader, "model")) >= 0) + m->uniforms[MODEL_UNIFORM_MODEL] = loc; + + if ((loc = glGetUniformLocation(shader, "V")) >= 0) + m->uniforms[MODEL_UNIFORM_VIEW] = loc; + else + if ((loc = glGetUniformLocation(shader, "view")) >= 0) + m->uniforms[MODEL_UNIFORM_VIEW] = loc; + + if ((loc = glGetUniformLocation(shader, "inv_view")) >= 0) + m->uniforms[MODEL_UNIFORM_INV_VIEW] = loc; + + if ((loc = glGetUniformLocation(shader, "P")) >= 0) + m->uniforms[MODEL_UNIFORM_PROJ] = loc; + else + if ((loc = glGetUniformLocation(shader, "proj")) >= 0) + m->uniforms[MODEL_UNIFORM_PROJ] = loc; + + if ((loc = glGetUniformLocation(shader, "SKINNED")) >= 0) + m->uniforms[MODEL_UNIFORM_SKINNED] = loc; + + if ((loc = glGetUniformLocation(shader, "vsBoneMatrix")) >= 0) + m->uniforms[MODEL_UNIFORM_VS_BONE_MATRIX] = loc; + + if ((loc = glGetUniformLocation(shader, "u_matcaps")) >= 0) + m->uniforms[MODEL_UNIFORM_U_MATCAPS] = loc; + + if ((loc = glGetUniformLocation(shader, "has_tex_skysphere")) >= 0) + m->uniforms[MODEL_UNIFORM_HAS_TEX_SKYSPHERE] = loc; + + if ((loc = glGetUniformLocation(shader, "has_tex_skyenv")) >= 0) + m->uniforms[MODEL_UNIFORM_HAS_TEX_SKYENV] = loc; + + if ((loc = glGetUniformLocation(shader, "tex_skysphere")) >= 0) + m->uniforms[MODEL_UNIFORM_TEX_SKYSPHERE] = loc; + + if ((loc = glGetUniformLocation(shader, "skysphere_mip_count")) >= 0) + m->uniforms[MODEL_UNIFORM_SKYSPHERE_MIP_COUNT] = loc; + + if ((loc = glGetUniformLocation(shader, "tex_skyenv")) >= 0) + m->uniforms[MODEL_UNIFORM_TEX_SKYENV] = loc; + + if ((loc = glGetUniformLocation(shader, "tex_brdf_lut")) >= 0) + m->uniforms[MODEL_UNIFORM_TEX_BRDF_LUT] = loc; + + if ((loc = glGetUniformLocation(shader, "frame_count")) >= 0) + m->uniforms[MODEL_UNIFORM_FRAME_COUNT] = loc; + + if ((loc = glGetUniformLocation(shader, "resolution")) >= 0) + m->uniforms[MODEL_UNIFORM_RESOLUTION] = loc; +} + +void model_shading(model_t *m, int shading) { + m->shading = shading; + int flags = m->stored_flags; + + // load pbr material if SHADING_PBR was selected + if (shading == SHADING_PBR) { + for (int i = 0; i < array_count(m->materials); ++i) { + model_load_pbr(&m->materials[i]); + } + } + + // rebind shader + // @fixme: app crashes rn + // glUseProgram(0); + // glDeleteProgram(m->program); + const char *symbols[] = { "{{include-shadowmap}}", vfs_read("shaders/fs_0_0_shadowmap_lit.glsl") }; // #define RIM + int shaderprog = shader(strlerp(1,symbols,vfs_read("shaders/vs_323444143_16_3322_model.glsl")), strlerp(1,symbols,vfs_read("shaders/fs_32_4_model.glsl")), //fs, + "att_position,att_texcoord,att_normal,att_tangent,att_instanced_matrix,,,,att_indexes,att_weights,att_vertexindex,att_color,att_bitangent,att_texcoord2","fragColor", + va("%s,%s", shading == SHADING_PBR ? "SHADING_PBR" : "SHADING_PHONG", (flags&MODEL_RIMLIGHT)?"RIM":"")); + m->program = shaderprog; + model_init_uniforms(m); +} + +void model_skybox(model_t *mdl, skybox_t sky, bool load_sh) { + if (load_sh) { + shader_vec3v("u_coefficients_sh", 9, sky.cubemap.sh); + } + + mdl->sky_refl = sky.refl; + mdl->sky_env = sky.env; +} + +// static +aabb aabb_transform( aabb A, mat44 M ) { + // Based on "Transforming Axis-Aligned Bounding Boxes" by Jim Arvo, 1990 + aabb B = { {M[12],M[13],M[14]}, {M[12],M[13],M[14]} }; // extract translation from mat44 + for( int i = 0; i < 3; i++ ) + for( int j = 0; j < 3; j++ ) { + float a = M[i*4+j] * j[&A.min.x]; // use mat33 from mat44 + float b = M[i*4+j] * j[&A.max.x]; // use mat33 from mat44 + if( a < b ) { + i[&B.min.x] += a; + i[&B.max.x] += b; + } else { + i[&B.min.x] += b; + i[&B.max.x] += a; + } + } + return B; +} + +aabb model_aabb(model_t m, mat44 transform) { + iqm_t *q = m.iqm; + if( q && q->bounds ) { + int f = ( (int)m.curframe ) % (q->numframes + !q->numframes); + vec3 bbmin = ptr3(q->bounds[f].bbmin); + vec3 bbmax = ptr3(q->bounds[f].bbmax); + return aabb_transform(aabb(bbmin,bbmax), transform); + } + return aabb(vec3(0,0,0),vec3(0,0,0)); +} + +void model_destroy(model_t m) { + FREE(m.verts); + for( int i = 0, end = array_count(m.texture_names); i < end; ++i ) { + FREE(m.texture_names[i]); + } + array_free(m.texture_names); + + iqm_t *q = m.iqm; +// if(m.mesh) mesh_destroy(m.mesh); + FREE(q->outframe); + FREE(q->colormaps); + FREE(q->textures); + FREE(q->baseframe); + FREE(q->inversebaseframe); + if(q->animdata != q->meshdata) FREE(q->animdata); + //FREE(q->meshdata); + FREE(q->frames); + FREE(q->buf); + FREE(q); +} + +static unsigned model_renderpass = RENDER_PASS_NORMAL; + +unsigned model_getpass() { + return model_renderpass; +} + +unsigned model_setpass(unsigned pass) { + ASSERT(pass < NUM_RENDER_PASSES); + unsigned old_pass = model_renderpass; + model_renderpass = pass; + return old_pass; +} + +anims_t animations(const char *pathfile, int flags) { + anims_t a = {0}; + a.anims = animlist(pathfile); + if(a.anims) a.speed = 1.0; + return a; +} + +// ----------------------------------------------------------------------------- +// lightmapping utils +// @fixme: support xatlas uv packing, add UV1 coords to vertex model specs +lightmap_t lightmap(int hmsize, float cnear, float cfar, vec3 color, int passes, float threshold, float distmod) { + lightmap_t lm = {0}; + lm.ctx = lmCreate(hmsize, cnear, cfar, color.x, color.y, color.z, passes, threshold, distmod); + + if (!lm.ctx) { + PANIC("Error: Could not initialize lightmapper.\n"); + return lm; + } + + const char *symbols[] = { "{{include-shadowmap}}", vfs_read("shaders/fs_0_0_shadowmap_lit.glsl") }; // #define RIM + lm.shader = shader(strlerp(1,symbols,vfs_read("shaders/vs_323444143_16_3322_model.glsl")), strlerp(1,symbols,vfs_read("shaders/fs_32_4_model.glsl")), //fs, + "att_position,att_texcoord,att_normal,att_tangent,att_instanced_matrix,,,,att_indexes,att_weights,att_vertexindex,att_color,att_bitangent,att_texcoord2","fragColor", + va("%s", "LIGHTMAP_BAKING")); + + return lm; +} + +void lightmap_destroy(lightmap_t *lm) { + lmDestroy(lm->ctx); + shader_destroy(lm->shader); + // +} + +void lightmap_setup(lightmap_t *lm, int w, int h) { + lm->ready=1; + //@fixme: prep atlas for lightmaps + lm->w = w; + lm->h = h; +} + +void lightmap_bake(lightmap_t *lm, int bounces, void (*drawscene)(lightmap_t *lm, model_t *m, float *view, float *proj, void *userdata), void (*progressupdate)(float progress), void *userdata) { + ASSERT(lm->ready); + // @fixme: use xatlas to UV pack all models, update their UV1 and upload them to GPU. + + int w = lm->w, h = lm->h; + for (int i = 0; i < array_count(lm->models); i++) { + model_t *m = lm->models[i]; + if (m->lightmap.w != 0) { + texture_destroy(&m->lightmap); + } + m->lightmap = texture_create(w, h, 4, 0, TEXTURE_LINEAR|TEXTURE_FLOAT); + glBindTexture(GL_TEXTURE_2D, m->lightmap.id); + unsigned char emissive[] = { 0, 0, 0, 255 }; + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, emissive); + glBindTexture(GL_TEXTURE_2D, 0); + } + + unsigned old_pass = model_setpass(RENDER_PASS_LIGHTMAP); + + for (int b = 0; b < bounces; b++) { + for (int i = 0; i < array_count(lm->models); i++) { + model_t *m = lm->models[i]; + if (!m->lmdata) { + m->lmdata = CALLOC(w*h*4, sizeof(float)); + } + memset(m->lmdata, 0, w*h*4); + lmSetTargetLightmap(lm->ctx, m->lmdata, w, h, 4); + lmSetGeometry(lm->ctx, m->pivot, + LM_FLOAT, (uint8_t*)m->verts + offsetof(iqm_vertex, position), sizeof(iqm_vertex), + LM_FLOAT, (uint8_t*)m->verts + offsetof(iqm_vertex, normal), sizeof(iqm_vertex), + LM_FLOAT, (uint8_t*)m->verts + offsetof(iqm_vertex, texcoord), sizeof(iqm_vertex), + m->num_tris*3, LM_UNSIGNED_INT, m->tris); + + int vp[4]; + float view[16], projection[16]; + while (lmBegin(lm->ctx, vp, view, projection)) + { + // render to lightmapper framebuffer + glViewport(vp[0], vp[1], vp[2], vp[3]); + drawscene(lm, m, view, projection, userdata); + if (progressupdate) progressupdate(lmProgress(lm->ctx)); + lmEnd(lm->ctx); + } + } + + model_setpass(old_pass); + + // postprocess texture + for (int i = 0; i < array_count(lm->models); i++) { + model_t *m = lm->models[i]; + float *temp = CALLOC(w * h * 4, sizeof(float)); + for (int i = 0; i < 16; i++) + { + lmImageDilate(m->lmdata, temp, w, h, 4); + lmImageDilate(temp, m->lmdata, w, h, 4); + } + lmImageSmooth(m->lmdata, temp, w, h, 4); + lmImageDilate(temp, m->lmdata, w, h, 4); + lmImagePower(m->lmdata, w, h, 4, 1.0f / 2.2f, 0x7); // gamma correct color channels + FREE(temp); + + // save result to a file + // if (lmImageSaveTGAf("result.tga", m->lmdata, w, h, 4, 1.0f)) + // printf("Saved result.tga\n"); + // upload result + glBindTexture(GL_TEXTURE_2D, m->lightmap.id); + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, w, h, 0, GL_RGBA, GL_FLOAT, m->lmdata); + FREE(m->lmdata); m->lmdata = NULL; + } + } +} + #line 0 #line 1 "v4k_renderdd.c" -static const char *dd_vs = "//" FILELINE "\n" - "in vec3 att_position;\n" - "uniform mat4 u_MVP;\n" - "uniform vec3 u_color;\n" - "out vec3 out_color;\n" - "void main() {\n" - " gl_Position = u_MVP * vec4(att_position, 1.0);\n" - " gl_PointSize = 4.0; /* for GL_POINTS draw commands */\n" - " out_color = u_color;\n" - "}"; - -static const char *dd_fs = "//" FILELINE "\n" - // "precision mediump float;\n" - "in vec3 out_color;\n" - "out vec4 fragcolor;\n" - "void main() {\n" - " fragcolor = vec4(out_color, 1.0);\n" - "}"; - -#define X(x) RGBX(x,255) -const uint32_t secret_palette[32] = { // pico8 secret palette (CC0, public domain) -X(0x000000),X(0x1D2B53),X(0x7E2553),X(0x008751),X(0xAB5236),X(0x5F574F),X(0xC2C3C7),X(0xFFF1E8), /*00.07*/ -X(0xFF004D),X(0xFFA300),X(0xFFEC27),X(0x00E436),X(0x29ADFF),X(0x83769C),X(0xFF77A8),X(0xFFCCAA), /*08.15*/ -X(0x291814),X(0x111D35),X(0x422136),X(0x125359),X(0x742F29),X(0x49333B),X(0xA28879),X(0xF3EF7D), /*16.23*/ -X(0xBE1250),X(0xFF6C24),X(0xA8E72E),X(0x00B543),X(0x065AB5),X(0x754665),X(0xFF6E59),X(0xFF9D81), /*24.31*/ -}; -#undef X - -typedef struct text2d_cmd { - const char *str; - uint32_t col; - vec3 pos; - float sca; -} text2d_cmd; - -static renderstate_t dd_rs; -static uint32_t dd_color = ~0u; -static GLuint dd_program = -1; -static int dd_u_color = -1; -static map(unsigned,array(vec3)) dd_lists[2][3] = {0}; // [0/1 ontop][0/1/2 thin lines/thick lines/points] -static bool dd_use_line = 0; -static bool dd_ontop = 0; -static array(text2d_cmd) dd_text2d; -static array(vec4) dd_matrix2d; - -void ddraw_push_2d() { - float width = window_width(); - float height = window_height(); - float zdepth_max = window_height(); - array_push(dd_matrix2d, vec4(width,height,zdepth_max,0)); - - ddraw_flush(); -} - -void ddraw_pop_2d() { - vec4 dim = *array_back(dd_matrix2d); - array_pop(dd_matrix2d); - - mat44 id, proj; - id44(id); - ortho44(proj, 0,dim.x,dim.y,0, -dim.z, +dim.z); - ddraw_flush_projview(proj, id); -} - -void ddraw_flush() { - ddraw_flush_projview(camera_get_active()->proj, camera_get_active()->view); -} - -static float dd_line_width = 1.0f; -void ddraw_flush_projview(mat44 proj, mat44 view) { - do_once dd_rs = renderstate(); - dd_rs.depth_test_enabled = dd_ontop; - dd_rs.cull_face_enabled = 0; - - glActiveTexture(GL_TEXTURE0); - - mat44 mvp; - multiply44x2(mvp, proj, view); // MVP where M=id - - glUseProgram(dd_program); - glUniformMatrix4fv(glGetUniformLocation(dd_program, "u_MVP"), 1, GL_FALSE, mvp); - - static GLuint vao, vbo; - if(!vao) glGenVertexArrays(1, &vao); glBindVertexArray(vao); - if(!vbo) glGenBuffers(1, &vbo); glBindBuffer(GL_ARRAY_BUFFER, vbo); - - glEnableVertexAttribArray(0); - - dd_rs.point_size_enabled = 1; - dd_rs.line_smooth_enabled = 1; - - for( int i = 0; i < 3; ++i ) { // [0] thin, [1] thick, [2] points - GLenum mode = i < 2 ? GL_LINES : GL_POINTS; - dd_rs.line_width = (i == 1 ? dd_line_width : 0.3); // 0.625); - renderstate_apply(&dd_rs); - for each_map(dd_lists[dd_ontop][i], unsigned, rgb, array(vec3), list) { - int count = array_count(list); - if(!count) continue; - // color - vec3 rgbf = {((rgb>>0)&255)/255.f,((rgb>>8)&255)/255.f,((rgb>>16)&255)/255.f}; - glUniform3fv(dd_u_color, GL_TRUE, &rgbf.x); - // config vertex data - glBufferData(GL_ARRAY_BUFFER, count * 3 * 4, list, GL_STATIC_DRAW); - glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(GLfloat), 0); - // feed vertex data - glDrawArrays(mode, 0, count); - profile_incstat("Render.num_drawcalls", +1); - profile_incstat(i < 2 ? "Render.num_lines" : "Render.num_points", count); - array_clear(list); - } - } - - if(array_count(dd_text2d)) { // text 2d - // queue - for(int i = 0; i < array_count(dd_text2d); ++i) { - ddraw_color(dd_text2d[i].col); - ddraw_text(dd_text2d[i].pos, dd_text2d[i].sca, dd_text2d[i].str); - } - - // flush - float mvp[16]; float zdepth_max = 1; - ortho44(mvp, -window_width()/2, window_width()/2, -window_height()/2, window_height()/2, -1, 1); - translate44(mvp, -window_width()/2, window_height()/2, 0); - glUniformMatrix4fv(glGetUniformLocation(dd_program, "u_MVP"), 1, GL_FALSE, mvp); - for( int i = 0; i < 3; ++i ) { // [0] thin, [1] thick, [2] points - GLenum mode = i < 2 ? GL_LINES : GL_POINTS; - dd_rs.line_width = (i == 1 ? 1 : 0.3); // 0.625); - for each_map(dd_lists[dd_ontop][i], unsigned, rgb, array(vec3), list) { - int count = array_count(list); - if(!count) continue; - renderstate_apply(&dd_rs); - // color - vec3 rgbf = {((rgb>>0)&255)/255.f,((rgb>>8)&255)/255.f,((rgb>>16)&255)/255.f}; - glUniform3fv(dd_u_color, GL_TRUE, &rgbf.x); - // config vertex data - glBufferData(GL_ARRAY_BUFFER, count * 3 * 4, list, GL_STATIC_DRAW); - glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(GLfloat), 0); - // feed vertex data - glDrawArrays(mode, 0, count); - profile_incstat("Render.num_drawcalls", +1); - profile_incstat(i < 2 ? "Render.num_lines" : "Render.num_points", count); - array_clear(list); - } - } - - // clear - array_resize(dd_text2d, 0); - } - - glBindVertexArray(0); - - ddraw_color(WHITE); // reset color for next drawcall -} - -static array(bool) dd_ontops; -void ddraw_ontop(int enabled) { - dd_ontop = !!enabled; -} -void ddraw_ontop_push(int enabled) { - array_push(dd_ontops, dd_ontop); - dd_ontop = !!enabled; -} -void ddraw_ontop_pop() { - bool *pop = array_pop(dd_ontops); - if(pop) dd_ontop = *pop; -} - -void ddraw_line_width(float width) { - dd_line_width = width; -} - -static array(uint32_t) dd_colors; -void ddraw_color(unsigned rgb) { - dd_color = rgb; -} -void ddraw_color_push(unsigned rgb) { - array_push(dd_colors, dd_color); - dd_color = rgb; -} -void ddraw_color_pop() { - unsigned *pop = array_pop(dd_colors); - if(pop) dd_color = *pop; -} - -void ddraw_point(vec3 from) { - array(vec3) *found = map_find_or_add(dd_lists[dd_ontop][2], dd_color, 0); - array_push(*found, from); -} -void ddraw_line_thin(vec3 from, vec3 to) { // thin lines - array(vec3) *found = map_find_or_add(dd_lists[dd_ontop][0], dd_color, 0); - array_push(*found, from); - array_push(*found, to); -} -void ddraw_line(vec3 from, vec3 to) { // thick lines - array(vec3) *found = map_find_or_add(dd_lists[dd_ontop][1], dd_color, 0); - array_push(*found, from); - array_push(*found, to); -} -void ddraw_line_dashed(vec3 from, vec3 to) { // thick lines - vec3 dist = sub3(to, from); vec3 unit = norm3(dist); - for( float len = 0, mag = len3(dist) / 2; len < mag; ++len ) { - to = add3(from, unit); - ddraw_line(from, to); - from = add3(to, unit); - } -} -void ddraw_triangle(vec3 pa, vec3 pb, vec3 pc) { - ddraw_line(pa, pb); - ddraw_line(pa, pc); - ddraw_line(pb, pc); -} -void ddraw_axis(float units) { - ddraw_color(RED); ddraw_line(vec3(0,0,0), vec3(units,0,0)); ddraw_line_dashed(vec3(0,0,0), vec3(-units,0,0)); - ddraw_color(GREEN); ddraw_line(vec3(0,0,0), vec3(0,units,0)); ddraw_line_dashed(vec3(0,0,0), vec3(0,-units,0)); - ddraw_color(BLUE); ddraw_line(vec3(0,0,0), vec3(0,0,units)); ddraw_line_dashed(vec3(0,0,0), vec3(0,0,-units)); -} -void ddraw_ground_(float scale) { // 10x10 - ddraw_color( WHITE ); // outer - for( float i = -scale, c = 0; c <= 20; c += 20, i += c * (scale/10) ) { - ddraw_line(vec3(-scale,0,i), vec3(+scale,0,i)); // horiz - ddraw_line(vec3(i,0,-scale), vec3(i,0,+scale)); // vert - } - ddraw_color( RGB3(149,149,149) ); // inner, light grey - for( float i = -scale + scale/10, c = 1; c < 20; ++c, i += (scale/10) ) { - ddraw_line_thin(vec3(-scale,0,i), vec3(+scale,0,i)); // horiz - ddraw_line_thin(vec3(i,0,-scale), vec3(i,0,+scale)); // vert - } -} -void ddraw_ground(float scale) { - if( scale ) { - ddraw_ground_(scale); - } else { - ddraw_ground_(100); - ddraw_ground_(10); - ddraw_ground_(1); - ddraw_ground_(0.1); - ddraw_ground_(0.01); - } -} -void ddraw_grid(float scale) { - ddraw_ground(scale); - ddraw_axis(scale ? scale : 100); -} - -void ddraw_text2d(vec2 pos, const char *text) { - struct text2d_cmd t = {0}; - t.sca = 0.5f; // 0.5 is like vertical 12units each - t.pos = vec3(pos.x, 0 - pos.y - 12, 0); - t.str = text; - t.col = YELLOW; - array_push(dd_text2d, t); -} - -void (ddraw_text)(vec3 pos, float scale, const char *text) { - // [ref] http://paulbourke.net/dataformats/hershey/ (PD) - // [ref] https://sol.gfxile.net/hershey/fontprev.html (WTFPL2) - static const char *hershey[] = { /* simplex font */ - "AQ","IKFVFH@@FCEBFAGBFC","FQEVEO@@MVMO","LVLZE:@@RZK:@@EMSM@@DGRG","[UIZI=@@MZ" - "M=@@RSPUMVIVFUDSDQEOFNHMNKPJQIRGRDPBMAIAFBDD","`YVVDA@@IVKTKRJPHOFODQDSEUGVIVK" - "UNTQTTUVV@@RHPGOEOCQASAUBVDVFTHRH","c[XMXNWOVOUNTLRGPDNBLAHAFBECDEDGEIFJMNNOOQ" - "OSNULVJUISIQJNLKQDSBUAWAXBXC","HKFTEUFVGUGSFQEP","KOLZJXHUFQELEHFCH?JE=",\ - "C[EJWJ","FKFCEBFAGBFC","CWUZC:","RUJVGUERDMDJEEGBJALAOBQERJRMQROULVJV","EUGRIS" - "LVLA","OUEQERFTGUIVMVOUPTQRQPPNNKDARA","PUFVQVKNNNPMQLRIRGQDOBLAIAFBECDE","GUN" - "VDHSH@@NVNA","RUPVFVEMFNIOLOONQLRIRGQDOBLAIAFBECDE","XUQSPUMVKVHUFREMEHFDHBKAL" - "AOBQDRGRHQKOMLNKNHMFKEH","FURVHA@@DVRV","^UIVFUESEQFOHNLMOLQJRHREQCPBMAIAFBECD" - "EDHEJGLJMNNPOQQQSPUMVIV","XUQOPLNJKIJIGJELDODPESGUJVKVNUPSQOQJPENBKAIAFBED","L" - "KFOENFMGNFO@@FCEBFAGBFC","OKFOENFMGNFO@@GBFAEBFCGBG@F>E=","DYUSEJUA","F[EMWM@@" - "EGWG","DYESUJEA","USDQDRETFUHVLVNUOTPRPPONNMJKJH@@JCIBJAKBJC","x\\SNRPPQMQKPJO" - "ILIIJGLFOFQGRI@@MQKOJLJIKGLF@@SQRIRGTFVFXHYKYMXPWRUTSUPVMVJUHTFREPDMDJEGFEHCJB" - "MAPASBUCVD@@TQSISGTF","ISJVBA@@JVRA@@EHOH","XVEVEA@@EVNVQURTSRSPRNQMNL@@ELNLQK" - "RJSHSERCQBNAEA","SVSQRSPUNVJVHUFSEQDNDIEFFDHBJANAPBRDSF","PVEVEA@@EVLVOUQSRQSN" - "SIRFQDOBLAEA","LTEVEA@@EVRV@@ELML@@EARA","ISEVEA@@EVRV@@ELML","WVSQRSPUNVJVHUF" - "SEQDNDIEFFDHBJANAPBRDSFSI@@NISI","IWEVEA@@SVSA@@ELSL","CIEVEA","KQMVMFLCKBIAGA" - "EBDCCFCH","IVEVEA@@SVEH@@JMSA","FREVEA@@EAQA","LYEVEA@@EVMA@@UVMA@@UVUA","IWEV" - "EA@@EVSA@@SVSA","VWJVHUFSEQDNDIEFFDHBJANAPBRDSFTITNSQRSPUNVJV","NVEVEA@@EVNVQU" - "RTSRSORMQLNKEK","YWJVHUFSEQDNDIEFFDHBJANAPBRDSFTITNSQRSPUNVJV@@MES?","QVEVEA@@" - "EVNVQURTSRSPRNQMNLEL@@LLSA","UURSPUMVIVFUDSDQEOFNHMNKPJQIRGRDPBMAIAFBDD","FQIV" - "IA@@BVPV","KWEVEGFDHBKAMAPBRDSGSV","FSBVJA@@RVJA","LYCVHA@@MVHA@@MVRA@@WVRA","" - "FUDVRA@@RVDA","GSBVJLJA@@RVJL","IURVDA@@DVRV@@DARA","LOEZE:@@FZF:@@EZLZ@@E:L:", - "COAVO>","LOJZJ:@@KZK:@@DZKZ@@D:K:","KQGPISKP@@DMIRNM@@IRIA","CQA?Q?","HKGVFUES" - "EQFPGQFR","RTPOPA@@PLNNLOIOGNELDIDGEDGBIALANBPD","RTEVEA@@ELGNIOLONNPLQIQGPDNB" - "LAIAGBED","OSPLNNLOIOGNELDIDGEDGBIALANBPD","RTPVPA@@PLNNLOIOGNELDIDGEDGBIALANB" - "PD","RSDIPIPKOMNNLOIOGNELDIDGEDGBIALANBPD","IMKVIVGUFRFA@@COJO","WTPOP?OF;D:B:","IREVEA@@OOEE@@IIPA","CIEVEA","S_EOEA@@EKHNJOMOO" - "NPKPA@@PKSNUOXOZN[K[A","KTEOEA@@EKHNJOMOONPKPA","RTIOGNELDIDGEDGBIALANBPDQGQIP" - "LNNLOIO","RTEOE:@@ELGNIOLONNPLQIQGPDNBLAIAGBED","RTPOP:@@PLNNLOIOGNELDIDGEDGBI" - "ALANBPD","INEOEA@@EIFLHNJOMO","RROLNNKOHOENDLEJGILHNGOEODNBKAHAEBDD","IMFVFEGB" - "IAKA@@COJO","KTEOEEFBHAKAMBPE@@POPA","FQCOIA@@OOIA","LWDOHA@@LOHA@@LOPA@@TOPA", - "FRDOOA@@OODA","JQCOIA@@OOIAG=E;C:B:","IROODA@@DOOO@@DAOA","hOJZHYGXFVFTGRHQIOI" - "MGK@@HYGWGUHSIRJPJNILEJIHJFJDIBHAG?G=H;@@GIIGIEHCGBF@F>GI 0 && c < 127); ) { - if( c == '\n' || c == '\r' ) { - pos.x = src.x, pos.y -= scale * ((signed char)hershey['W'-32][1] - 65) * 1.25f; // spacing @1 - } else { - const char *glyph = (const char*)hershey[c - 32]; - if( c > 32 ) for( int pen = 0, i = 0; i < (glyph[0] - 65); i++ ) { // verts @0 - int x = glyph[2 + i*2 + 0] - 65, y = glyph[2 + i*2 + 1] - 65; - if( x == -1 && y == -1 ) pen = 0; else { - vec3 next = add3(pos, vec3(abs_scale*x, scale*y, 0)); - if( !pen ) pen = 1; else ddraw_line(old, next); - old = next; - } - } - pos.x += abs_scale * (glyph[1] - 65); // spacing @1 - } - } -} - -void ddraw_prism(vec3 center, float radius, float height, vec3 normal, int segments) { - vec3 left = {0}, up = {0}; - ortho3(&left, &up, normal); - - vec3 point, lastPoint; - up = scale3(up, radius); - left = scale3(left, radius); - lastPoint = add3(center, up); - vec3 pivot = add3(center, scale3(normal, height)); - - for (int i = 1; i <= segments; ++i) { - const float radians = (C_PI * 2) * i / segments; - - vec3 vs = scale3(left, sinf(radians)); - vec3 vc = scale3(up, cosf(radians)); - - point = add3(center, vs); - point = add3(point, vc); - - ddraw_line(lastPoint, point); - if( height > 0 ) ddraw_line(point, pivot); - else if(height < 0) { - ddraw_line(point, add3(point,scale3(normal, -height))); - } - lastPoint = point; - } - - if(height < 0) ddraw_prism(add3(center, scale3(normal, -height)), radius, 0, normal, segments); -} - -void ddraw_cube(vec3 center, float radius) { // draw_prism(center, 1, -1, vec3(0,1,0), 4); - float half = radius * 0.5f; - vec3 l = vec3(center.x-half,center.y+half,center.z-half); // left-top-far - vec3 r = vec3(center.x+half,center.y-half,center.z+half); // right-bottom-near - - ddraw_line(l, vec3(r.x,l.y,l.z)); - ddraw_line(vec3(r.x,l.y,l.z), vec3(r.x,l.y,r.z)); - ddraw_line(vec3(r.x,l.y,r.z), vec3(l.x,l.y,r.z)); - ddraw_line(vec3(l.x,l.y,r.z), l); - ddraw_line(l, vec3(l.x,r.y,l.z)); - - ddraw_line(r, vec3(l.x,r.y,r.z)); - ddraw_line(vec3(l.x,r.y,r.z), vec3(l.x,r.y,l.z)); - ddraw_line(vec3(l.x,r.y,l.z), vec3(r.x,r.y,l.z)); - ddraw_line(vec3(r.x,r.y,l.z), r); - ddraw_line(r, vec3(r.x,l.y,r.z)); - - ddraw_line(vec3(l.x,l.y,r.z), vec3(l.x,r.y,r.z)); - ddraw_line(vec3(r.x,l.y,l.z), vec3(r.x,r.y,l.z)); -} - -#if 0 // @fixme: broken -void ddraw_cube44(vec3 radius, mat44 M) { - float m33[9]; extract33(m33, M); // = { M[0,1,2], M[4,5,6], M[8,9,10] } - ddraw_cube33( vec3(M[12], M[13], M[14]), radius, m33 ); -} -#endif - -void ddraw_cube33(vec3 center, vec3 radius, mat33 M) { - vec3 half = scale3(radius, 0.5f); - vec3 l = vec3(-half.x,+half.y,-half.z); // left-top-far - vec3 r = vec3(+half.x,-half.y,+half.z); // right-bottom-near - - vec3 points[8] = { - vec3(l.x, r.y, r.z), - vec3(l.x, r.y, l.z), - vec3(r.x, r.y, l.z), - vec3(r.x, r.y, r.z), - vec3(l.x, l.y, r.z), - vec3(l.x, l.y, l.z), - vec3(r.x, l.y, l.z), - vec3(r.x, l.y, r.z), - }; - - for( int i = 0; i < 8; ++i ) { - points[i] = add3(center, transform33(M, points[i])); - } - - ddraw_bounds(points); -} - -void ddraw_normal(vec3 pos, vec3 n) { - ddraw_color(YELLOW); - ddraw_line(pos, add3(pos, norm3(n))); -} - -void ddraw_circle(vec3 pos, vec3 n, float r) { ddraw_prism(pos, r, 0, n, 32); } -void ddraw_ring(vec3 pos, vec3 n, float r) { ddraw_circle(pos,n,r);ddraw_circle(pos,n,r*0.90); } -void ddraw_hexagon(vec3 pos, float r) { ddraw_prism(pos, r, 0, vec3(0,1,0), 6); } -void ddraw_pentagon(vec3 pos, float r) { ddraw_prism(pos, r, 0, vec3(0,1,0), 5); } -void ddraw_square(vec3 pos, float r) { ddraw_prism(pos, r, 0, vec3(0,1,0), 4); } -//void ddraw_triangle(vec3 pos, float r) { ddraw_prism(pos, r, 0, vec3(0,1,0), 3); } -void ddraw_sphere(vec3 center, float radius) { - float lod = 8, yp = -radius, rp = 0, y, r, x, z; - for( int j = 1; j <= lod / 2; ++j, yp = y, rp = r ) { - y = j * 2.f / (lod / 2) - 1; - r = cosf(y * 3.14159f / 2) * radius; - y = sinf(y * 3.14159f / 2) * radius; - - float xp = 1, zp = 0; - for( int i = 1; i <= lod; ++i, xp = x, zp = z ) { - x = 3.14159f * 2 * i / lod; - z = sinf(x); - x = cosf(x); - - vec3 a1 = add3(center, vec3(xp * rp, yp, zp * rp)); - vec3 b1 = add3(center, vec3(xp * r, y, zp * r)); - vec3 c1 = add3(center, vec3(x * r, y, z * r)); - - ddraw_line(a1,b1); - ddraw_line(b1,c1); - ddraw_line(c1,a1); - - vec3 a2 = add3(center, vec3(xp * rp, yp, zp * rp)); - vec3 b2 = add3(center, vec3(x * r, y, z * r)); - vec3 c2 = add3(center, vec3(x * rp, yp, z * rp)); - - ddraw_line(a2,b2); - ddraw_line(b2,c2); - ddraw_line(c2,a2); - } - } -} -void ddraw_box(vec3 c, vec3 extents) { - vec3 points[8], whd = scale3(extents, 0.5f); - #define DD_BOX_V(v, op1, op2, op3) (v).x = c.x op1 whd.x; (v).y = c.y op2 whd.y; (v).z = c.z op3 whd.z - DD_BOX_V(points[0], -, +, +); - DD_BOX_V(points[1], -, +, -); - DD_BOX_V(points[2], +, +, -); - DD_BOX_V(points[3], +, +, +); - DD_BOX_V(points[4], -, -, +); - DD_BOX_V(points[5], -, -, -); - DD_BOX_V(points[6], +, -, -); - DD_BOX_V(points[7], +, -, +); - #undef DD_BOX_V - ddraw_bounds(points); -} -void ddraw_capsule(vec3 from, vec3 to, float r) { - /* calculate axis */ - vec3 up, right, forward; - forward = sub3(to, from); - forward = norm3(forward); - ortho3(&right, &up, forward); - - /* calculate first two cone verts (buttom + top) */ - vec3 lastf, lastt; - lastf = scale3(up,r); - lastt = add3(to,lastf); - lastf = add3(from,lastf); - - /* step along circle outline and draw lines */ - enum { step_size = 20 }; - for (int i = step_size; i <= 360; i += step_size) { - /* calculate current rotation */ - vec3 ax = scale3(right, sinf(i*TO_RAD)); - vec3 ay = scale3(up, cosf(i*TO_RAD)); - - /* calculate current vertices on cone */ - vec3 tmp = add3(ax, ay); - vec3 pf = scale3(tmp, r); - vec3 pt = scale3(tmp, r); - - pf = add3(pf, from); - pt = add3(pt, to); - - /* draw cone vertices */ - ddraw_line(lastf, pf); - ddraw_line(lastt, pt); - ddraw_line(pf, pt); - - lastf = pf; - lastt = pt; - - /* calculate first top sphere vert */ - vec3 prevt = scale3(tmp, r); - vec3 prevf = add3(prevt, from); - prevt = add3(prevt, to); - - /* sphere (two half spheres )*/ - for (int j = 1; j < 180/step_size; j++) { - /* angles */ - float ta = j*step_size; - float fa = 360-(j*step_size); - - /* top half-sphere */ - ax = scale3(forward, sinf(ta*TO_RAD)); - ay = scale3(tmp, cosf(ta*TO_RAD)); - - vec3 t = add3(ax, ay); - pf = scale3(t, r); - pf = add3(pf, to); - ddraw_line(pf, prevt); - prevt = pf; - - /* bottom half-sphere */ - ax = scale3(forward, sinf(fa*TO_RAD)); - ay = scale3(tmp, cosf(fa*TO_RAD)); - - t = add3(ax, ay); - pf = scale3(t, r); - pf = add3(pf, from); - ddraw_line(pf, prevf); - prevf = pf; - } - } -} -void ddraw_pyramid(vec3 center, float height, int segments) { - ddraw_prism(center, 1, height, vec3(0,1,0), segments); -} -void ddraw_cylinder(vec3 center, float height, int segments) { - ddraw_prism(center, 1, -height, vec3(0,1,0), segments); -} -void ddraw_diamond(vec3 from, vec3 to, float size) { - poly p = diamond(from, to, size); - vec3 *dmd = p.verts; - - vec3 *a = dmd + 0; - vec3 *b = dmd + 1; - vec3 *c = dmd + 2; - vec3 *d = dmd + 3; - vec3 *t = dmd + 4; - vec3 *f = dmd + 5; - - /* draw vertices */ - ddraw_line(*a, *b); - ddraw_line(*b, *c); - ddraw_line(*c, *d); - ddraw_line(*d, *a); - - /* draw roof */ - ddraw_line(*a, *t); - ddraw_line(*b, *t); - ddraw_line(*c, *t); - ddraw_line(*d, *t); - - /* draw floor */ - ddraw_line(*a, *f); - ddraw_line(*b, *f); - ddraw_line(*c, *f); - ddraw_line(*d, *f); - - poly_free(&p); -} -void ddraw_cone(vec3 center, vec3 top, float radius) { - vec3 diff3 = sub3(top, center); - ddraw_prism(center, radius ? radius : 1, len3(diff3), norm3(diff3), 24); -} -void ddraw_cone_lowres(vec3 center, vec3 top, float radius) { - vec3 diff3 = sub3(top, center); - ddraw_prism(center, radius ? radius : 1, len3(diff3), norm3(diff3), 3); -} -void ddraw_bone(vec3 center, vec3 end) { - vec3 diff3 = sub3(end, center); - float len = len3(diff3), len10 = len / 10; - ddraw_prism(center, len10, 0, vec3(1,0,0), 24); - ddraw_prism(center, len10, 0, vec3(0,1,0), 24); - ddraw_prism(center, len10, 0, vec3(0,0,1), 24); - ddraw_line(end, add3(center, vec3(0,+len10,0))); - ddraw_line(end, add3(center, vec3(0,-len10,0))); -} -void ddraw_bounds(const vec3 points[8]) { - for( int i = 0; i < 4; ++i ) { - ddraw_line(points[i], points[(i + 1) & 3]); - ddraw_line(points[i], points[4 + i]); - ddraw_line(points[4 + i], points[4 + ((i + 1) & 3)]); - } -} -void ddraw_bounds_corners(const vec3 points[8]) { - for( int i = 0; i < 4; ++i ) { - #define ddraw_unit(a,b) ddraw_line(a,add3(a,norm3(sub3(b,a)))), ddraw_line(b,add3(b,norm3(sub3(a,b)))) - ddraw_unit(points[i], points[(i + 1) & 3]); - ddraw_unit(points[i], points[4 + i]); - ddraw_unit(points[4 + i], points[4 + ((i + 1) & 3)]); - #undef ddraw_unit - } -} -void ddraw_aabb(vec3 minbb, vec3 maxbb) { - vec3 points[8], bb[2] = { minbb, maxbb }; - for (int i = 0; i < 8; ++i) { - points[i].x = bb[(i ^ (i >> 1)) & 1].x; - points[i].y = bb[ (i >> 1) & 1].y; - points[i].z = bb[ (i >> 2) & 1].z; - } - ddraw_bounds/*_corners*/(points); -} -void ddraw_frustum(float projview[16]) { - mat44 clipmatrix = {0}; // clip matrix - invert44(clipmatrix, projview); - - // Start with the standard clip volume, then bring it back to world space. - const vec3 planes[8] = { - {-1,-1,-1}, {+1,-1,-1}, {+1,+1,-1}, {-1,+1,-1}, // near plane - {-1,-1,+1}, {+1,-1,+1}, {+1,+1,+1}, {-1,+1,+1}, // far plane - }; - - vec3 points[8]; - float wCoords[8]; - - // Transform the planes by the inverse clip matrix: - for( int i = 0; i < 8; ++i ) { - // wCoords[i] = matTransformPointXYZW2(&points[i], planes[i], clipmatrix); - vec3 *out = &points[i], in = planes[i]; const float *m = clipmatrix; - out->x = (m[0] * in.x) + (m[4] * in.y) + (m[ 8] * in.z) + m[12]; // in.w (vec4) assumed to be 1 - out->y = (m[1] * in.x) + (m[5] * in.y) + (m[ 9] * in.z) + m[13]; - out->z = (m[2] * in.x) + (m[6] * in.y) + (m[10] * in.z) + m[14]; - wCoords[i] = (m[3] * in.x) + (m[7] * in.y) + (m[11] * in.z) + m[15]; // rw - - // bail if any W ended up as zero. - const float epsilon = 1e-9f; - if (absf(wCoords[i]) < epsilon) { - return; - } - } - - // Divide by the W component of each: - for( int i = 0; i < 8; ++i ) { - points[i].x /= wCoords[i]; - points[i].y /= wCoords[i]; - points[i].z /= wCoords[i]; - } - - // Connect the dots: - ddraw_bounds(points); -} - -void ddraw_camera(camera_t *cam) { - vec3 center = cam->position; - vec3 rightdir = cross3(cam->lookdir,cam->updir); - float proj[16]; // reproject perspective matrix with a smaller view distance (100 units) - perspective44(proj, cam->fov, window_width() / ((float)window_height()+!window_height()), 0.01f, 100.f); - - ddraw_color_push(YELLOW); - // frustum - mat44 projview; multiply44x2(projview, /*cam->*/proj, cam->view); - ddraw_frustum(projview); - // top circles - ddraw_circle(add3(center,add3(cam->lookdir,cam->updir)), rightdir, 2); - ddraw_circle(add3(center,add3(neg3(cam->lookdir),cam->updir)), rightdir, 2); - // orientation - ddraw_color(RED); - ddraw_arrow(cam->position, add3(cam->position,cam->lookdir)); - ddraw_color(GREEN); - ddraw_arrow(cam->position, add3(cam->position,cam->updir)); - ddraw_color(BLUE); - ddraw_arrow(cam->position, add3(cam->position,rightdir)); - ddraw_color_pop(); -} - -void ddraw_arrow(vec3 begin, vec3 end) { - vec3 diff = sub3(end, begin); - float len = len3(diff), stick_len = len * 2 / 3; - - ddraw_line(begin, end); - ddraw_cone_lowres(add3(begin, scale3(norm3(diff), stick_len)), end, len / 6); -} - -void ddraw_plane(vec3 p, vec3 n, float scale) { - // if n is too similar to up vector, use right. else use up vector - vec3 v1 = cross3(n, dot3(n, vec3(0,1,0)) > 0.8f ? vec3(1,0,0) : vec3(0,1,0)); - vec3 v2 = cross3(n, v1); - - // draw axis - ddraw_line(p, add3(p,n)); - ddraw_line(p, add3(p,v1)); - ddraw_line(p, add3(p,v2)); - - // get plane coords - v1 = scale3(v1, scale); - v2 = scale3(v2, scale); - vec3 p1 = add3(add3(p, v1), v2); - vec3 p2 = add3(sub3(p, v1), v2); - vec3 p3 = sub3(sub3(p, v1), v2); - vec3 p4 = sub3(add3(p, v1), v2); - - // draw plane - ddraw_line(p1, p2); - ddraw_line(p2, p3); - ddraw_line(p3, p4); - ddraw_line(p4, p1); -} - -void ddraw_boid(vec3 position, vec3 dir) { - dir = norm3(dir); - - // if n is too similar to up vector, use right. else use up vector - vec3 v1 = cross3(dir, dot3(dir, vec3(0,1,0)) > 0.8f ? vec3(1,0,0) : vec3(0,1,0)); - vec3 v2 = cross3(dir, v1); - v1 = cross3(dir, v2); - - uint32_t bak = dd_color; - ddraw_color( position.y < 0 ? ORANGE : CYAN ); - - vec3 front = add3(position, scale3(dir, 1)); - vec3 back = add3(position, scale3(dir, -0.25f)); - vec3 right = add3(back, scale3(v1, 0.5f)); - vec3 left = add3(back, scale3(v1, -0.5f)); - ddraw_line( front, left ); - ddraw_line( left, position ); - ddraw_line( position, right ); - ddraw_line( right, front ); - - dd_color = bak; -} - -void ddraw_circle__with_orientation(vec3 center, vec3 dir, float radius) { - // we'll skip 3 segments out of 32. 1.5 per half circle. - int segments = 32, skip = 3, drawn_segments = segments-skip; - -// dir = norm3(dir); - vec3 right = cross3(dir, vec3(0,1,0)); - vec3 up = cross3(dir, right); - right = cross3(dir, up); - - vec3 point, lastPoint; - dir = scale3(dir, radius); - right = scale3(right, radius); - //lastPoint = add3(center, dir); - - { - const float radians = (C_PI * 2) * (0+skip/2.f) / segments; - vec3 vs = scale3(right, sinf(radians)); - vec3 vc = scale3(dir, cosf(radians)); - lastPoint = add3(center, vs); - lastPoint = add3(lastPoint, vc); - } - - //ddraw_color(GREEN); - ddraw_line(lastPoint, add3(center, scale3(dir, radius * (radius <= 1 ? 1.25 : 0.65) ))); - //ddraw_color(YELLOW); - - for (int i = 0; i <= drawn_segments; ++i) { - const float radians = (C_PI * 2) * (i+skip/2.f) / segments; - - vec3 vs = scale3(right, sinf(radians)); - vec3 vc = scale3(dir, cosf(radians)); - - point = add3(center, vs); - point = add3(point, vc); - - ddraw_line(lastPoint, point); - lastPoint = point; - } - - //ddraw_color(RED); - ddraw_line(lastPoint, add3(center, scale3(dir, radius * (radius <= 1 ? 1.25 : 0.65) ))); -} - -void ddraw_position_dir( vec3 position, vec3 direction, float radius ) { - // idea from http://www.cs.caltech.edu/~keenan/m3drv.pdf and flotilla game UI - uint32_t bak = dd_color; - - vec3 ground = vec3(position.x, 0, position.z); - ddraw_color( position.y < 0 ? PINK/*ORANGE*/ : CYAN ); - ddraw_point( ground ); - ddraw_point( position ); - (position.y < 0 ? ddraw_line_dashed : ddraw_line)( ground, position ); - - vec3 n = norm3(direction), up = vec3(0,1,0); - for( int i = 0; i < 10 && i <= fabs(position.y); ++i ) { - if( i < 2 && len3(direction) ) - ddraw_circle__with_orientation(ground, n, radius); - else - ddraw_circle(ground, up, radius); - radius *= 0.9f; - } - - dd_color = bak; -} - -void ddraw_position( vec3 position, float radius ) { - ddraw_position_dir(position, vec3(0,0,0), radius); -} - -void ddraw_init() { - do_once { - for( int i = 0; i < 2; ++i ) - for( int j = 0; j < 3; ++j ) map_init(dd_lists[i][j], less_int, hash_int); - dd_program = shader(dd_vs,dd_fs,"att_position","fragcolor", NULL); - dd_u_color = glGetUniformLocation(dd_program, "u_color"); - ddraw_flush(); // alloc vao & vbo, also resets color - } -} - -void ddraw_demo() { - ddraw_color_push(YELLOW); - - // freeze current frame for (frustum) camera forensics - static mat44 projview_copy; - do_once { - multiply44x2(projview_copy, camera_get_active()->proj, camera_get_active()->view); - } - ddraw_frustum(projview_copy); - - //ddraw_grid(); - - vec3 origin = {0,0,0}; - ddraw_color(ORANGE); - ddraw_arrow(origin, vec3(-1,1,1)); - ddraw_color(YELLOW); - ddraw_text(vec3(-1,1,1), 0.008f, va("hello 1%s2!", "world")); - - const char abc[] = " !\"#$%&'()*+,-./\n" - "0123456789:;<=>?@\n" - "ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`\n" - "abcdefghijklmnopqrstuvwxyz{|}~"; - ddraw_text(vec3(2,2,2), 0.008f, abc); - - - for( int i = -5; i <= 5; ++i ) { - ddraw_pyramid(vec3(i*2,0,3), 0, i+5+2); ddraw_text(vec3(i*2,0,3), 0.008f, va("%d/1", i)); - ddraw_pyramid(vec3(i*2,0,6), -2, i+5+2); ddraw_text(vec3(i*2,0,6), 0.008f, va("%d/2", i)); - ddraw_pyramid(vec3(i*2,0,9), +2, i+5+2); ddraw_text(vec3(i*2,0,9), 0.008f, va("%d/3", i)); - } - -#if 1 // @fixme: add positions to these - // ddraw_triangle(origin, 1); - ddraw_square(origin, 1); - ddraw_pentagon(origin, 1); - ddraw_hexagon(origin, 1); - ddraw_cube(origin, 1); - ddraw_pyramid(origin, 2, 3); - ddraw_pyramid(origin, 2, 16); - ddraw_cone(origin, add3(origin, vec3(0,1,0)), 0.5f); - ddraw_arrow(origin, vec3(0,1,0)); - ddraw_bone(vec3(0,0,0), vec3(3,3,3)); - ddraw_aabb(vec3(0,0,0), vec3(1,1,1)); -#endif - - ddraw_plane(vec3(0,10,0), vec3(0,1,0), 10); - //ddraw_boid(vec3(15,0,15), vec3(-15,0,-15) ); - ddraw_position(vec3(10,10,10), 1); - ddraw_position(vec3(-10,-10,10), 1); - - ddraw_point(vec3(-2,0,-2)); - ddraw_color(PURPLE); - ddraw_sphere(vec3(-3,0,-3),1); - - ddraw_color_pop(); -} - -static int gizmo__mode; -static int gizmo__active; -static int gizmo__hover; -bool gizmo_active() { - return gizmo__active; -} -bool gizmo_hover() { - return gizmo__hover; -} -int gizmo(vec3 *pos, vec3 *rot, vec3 *sca) { -#if 0 - ddraw_flush(); - mat44 copy; copy44(copy, camera_get_active()->view); - if( 1 ) { - float *mv = camera_get_active()->view; - float d = sqrt(mv[4*0+0] * mv[4*0+0] + mv[4*1+1] * mv[4*1+1] + mv[4*2+2] * mv[4*2+2]); - if(4) mv[4*0+0] = d, mv[4*0+1] = 0, mv[4*0+2] = 0; - if(2) mv[4*1+0] = 0, mv[4*1+1] = d, mv[4*1+2] = 0; - if(1) mv[4*2+0] = 0, mv[4*2+1] = 0, mv[4*2+2] = d; - } -#endif - - ddraw_color_push(dd_color); - ddraw_ontop_push(1); - - int enabled = !ui_active() && !ui_hover(); - vec3 mouse = enabled ? vec3(input(MOUSE_X),input(MOUSE_Y),input_down(MOUSE_L)) : vec3(0,0,0); // x,y,l - vec3 from = camera_get_active()->position; - vec3 to = editor_pick(mouse.x, mouse.y); - ray r = ray(from, to); - - static vec3 src3, hit3, off3; static vec2 src2; - #define on_gizmo_dragged(X,Y,Z,COLOR,DRAWCMD, ...) do { \ - vec3 dir = vec3(X,Y,Z); \ - line axis = {add3(*pos, scale3(dir,100)), add3(*pos, scale3(dir,-100))}; \ - plane ground = { vec3(0,0,0), vec3(Y?1:0,Y?0:1,0) }; \ - vec3 unit = vec3(X+(1.0-X)*0.3,Y+(1.0-Y)*0.3,Z+(1.0-Z)*0.3); \ - aabb arrow = { sub3(*pos,unit), add3(*pos,unit) }; \ - hit *hit_arrow = ray_hit_aabb(r, arrow), *hit_ground = ray_hit_plane(r, ground); \ - ddraw_color( hit_arrow || gizmo__active == (X*4+Y*2+Z) ? gizmo__hover = 1, YELLOW : COLOR ); \ - DRAWCMD; \ - if( !gizmo__active && hit_arrow && mouse.z ) src2 = vec2(mouse.x,mouse.y), src3 = *pos, hit3 = hit_ground->p, off3 = mul3(sub3(src3,hit3),vec3(X,Y,Z)), gizmo__active = X*4+Y*2+Z; \ - if( (gizmo__active && gizmo__active==(X*4+Y*2+Z)) || (!gizmo__active && hit_arrow) ) { ddraw_color( COLOR ); ( 1 ? ddraw_line : ddraw_line_dashed)(axis.a, axis.b); } \ - if( gizmo__active == (X*4+Y*2+Z) && hit_ground ) {{ __VA_ARGS__ }; modified = 1; gizmo__active *= !!input(MOUSE_L); } \ - } while(0) - #define gizmo_translate(X,Y,Z,COLOR) \ - on_gizmo_dragged(X,Y,Z,COLOR, ddraw_arrow(*pos,add3(*pos,vec3(X,Y,Z))), { \ - *pos = add3(line_closest_point(axis, hit_ground->p), off3); \ - } ) - #define gizmo_scale(X,Y,Z,COLOR) \ - on_gizmo_dragged(X,Y,Z,COLOR, (ddraw_line(*pos,add3(*pos,vec3(X,Y,Z))),ddraw_sphere(add3(*pos,vec3(X-0.1*X,Y-0.1*Y,Z-0.1*Z)),0.1)), { /*ddraw_aabb(arrow.min,arrow.max)*/ \ - int component = (X*1+Y*2+Z*3)-1; \ - float mag = len2(sub2(vec2(mouse.x, mouse.y), src2)); \ - float magx = (mouse.x - src2.x) * (mouse.x - src2.x); \ - float magy = (mouse.y - src2.y) * (mouse.y - src2.y); \ - float sgn = (magx > magy ? mouse.x > src2.x : mouse.y > src2.y) ? 1 : -1; \ - sca->v3[component] -= sgn * mag * 0.01; \ - src2 = vec2(mouse.x, mouse.y); \ - } ) - #define gizmo_rotate(X,Y,Z,COLOR) do { \ - vec3 dir = vec3(X,Y,Z); \ - line axis = {add3(*pos, scale3(dir,100)), add3(*pos, scale3(dir,-100))}; \ - plane ground = { vec3(0,0,0), vec3(0,1,0) }; \ - vec3 unit = vec3(X+(1.0-X)*0.3,Y+(1.0-Y)*0.3,Z+(1.0-Z)*0.3); \ - aabb arrow = { sub3(*pos,unit), add3(*pos,unit) }; \ - hit *hit_arrow = ray_hit_aabb(r, arrow), *hit_ground = ray_hit_plane(r, ground); \ - int hover = (hit_arrow ? (X*4+Y*2+Z) : 0); \ - if( gizmo__active == (X*4+Y*2+Z) ) { ddraw_color(gizmo__active ? gizmo__hover = 1, YELLOW : WHITE); ddraw_circle(*pos, vec3(X,Y,Z), 1); } \ - else if( !gizmo__active && hover == (X*4+Y*2+Z) ) { gizmo__hover = 1; ddraw_color(COLOR); ddraw_circle(*pos, vec3(X,Y,Z), 1); } \ - else if( !gizmo__active ) { ddraw_color(WHITE); ddraw_circle(*pos, vec3(X,Y,Z), 1); } \ - if( !gizmo__active && hit_arrow && mouse.z ) src2 = vec2(mouse.x,mouse.y), gizmo__active = hover; \ - if( (!gizmo__active && hover == (X*4+Y*2+Z)) || gizmo__active == (X*4+Y*2+Z) ) { gizmo__hover = 1; ddraw_color( COLOR ); ( 1 ? ddraw_line_thin : ddraw_line_dashed)(axis.a, axis.b); } \ - if( gizmo__active && gizmo__active == (X*4+Y*2+Z) && hit_ground && enabled ) { \ - int component = (Y*1+X*2+Z*3)-1; /*pitch,yaw,roll*/ \ - float mag = len2(sub2(vec2(mouse.x, mouse.y), src2)); \ - float magx = (mouse.x - src2.x) * (mouse.x - src2.x); \ - float magy = (mouse.y - src2.y) * (mouse.y - src2.y); \ - float sgn = (magx > magy ? mouse.x > src2.x : mouse.y > src2.y) ? 1 : -1; \ - rot->v3[component] += sgn * mag; \ - /*rot->v3[component] = clampf(rot->v3[component], -360, +360);*/ \ - src2 = vec2(mouse.x, mouse.y); \ - \ - } \ - gizmo__active *= enabled && !!input(MOUSE_L); \ - } while(0) - - gizmo__hover = 0; - - int modified = 0; - if(enabled && input_down(KEY_SPACE)) gizmo__active = 0, gizmo__mode = (gizmo__mode + 1) % 3; - if(gizmo__mode == 0) gizmo_translate(1,0,0, RED); - if(gizmo__mode == 0) gizmo_translate(0,1,0, GREEN); - if(gizmo__mode == 0) gizmo_translate(0,0,1, BLUE); - if(gizmo__mode == 1) gizmo_scale(1,0,0, RED); - if(gizmo__mode == 1) gizmo_scale(0,1,0, GREEN); - if(gizmo__mode == 1) gizmo_scale(0,0,1, BLUE); - if(gizmo__mode == 2) gizmo_rotate(1,0,0, RED); - if(gizmo__mode == 2) gizmo_rotate(0,1,0, GREEN); - if(gizmo__mode == 2) gizmo_rotate(0,0,1, BLUE); - -#if 0 - ddraw_flush(); - copy44(camera_get_active()->view, copy); -#endif - - ddraw_ontop_pop(); - ddraw_color_pop(); - - return modified; -} +static const char *dd_vs = "//" FILELINE "\n" + "in vec3 att_position;\n" + "uniform mat4 u_MVP;\n" + "uniform vec3 u_color;\n" + "out vec3 out_color;\n" + "void main() {\n" + " gl_Position = u_MVP * vec4(att_position, 1.0);\n" + " gl_PointSize = 4.0; /* for GL_POINTS draw commands */\n" + " out_color = u_color;\n" + "}"; + +static const char *dd_fs = "//" FILELINE "\n" + // "precision mediump float;\n" + "in vec3 out_color;\n" + "out vec4 fragcolor;\n" + "void main() {\n" + " fragcolor = vec4(out_color, 1.0);\n" + "}"; + +#define X(x) RGBX(x,255) +const uint32_t secret_palette[32] = { // pico8 secret palette (CC0, public domain) +X(0x000000),X(0x1D2B53),X(0x7E2553),X(0x008751),X(0xAB5236),X(0x5F574F),X(0xC2C3C7),X(0xFFF1E8), /*00.07*/ +X(0xFF004D),X(0xFFA300),X(0xFFEC27),X(0x00E436),X(0x29ADFF),X(0x83769C),X(0xFF77A8),X(0xFFCCAA), /*08.15*/ +X(0x291814),X(0x111D35),X(0x422136),X(0x125359),X(0x742F29),X(0x49333B),X(0xA28879),X(0xF3EF7D), /*16.23*/ +X(0xBE1250),X(0xFF6C24),X(0xA8E72E),X(0x00B543),X(0x065AB5),X(0x754665),X(0xFF6E59),X(0xFF9D81), /*24.31*/ +}; +#undef X + +typedef struct text2d_cmd { + const char *str; + uint32_t col; + vec3 pos; + float sca; +} text2d_cmd; + +static renderstate_t dd_rs; +static uint32_t dd_color = ~0u; +static GLuint dd_program = -1; +static int dd_u_color = -1; +static map(unsigned,array(vec3)) dd_lists[2][3] = {0}; // [0/1 ontop][0/1/2 thin lines/thick lines/points] +static bool dd_use_line = 0; +static bool dd_ontop = 0; +static array(text2d_cmd) dd_text2d; +static array(vec4) dd_matrix2d; + +void ddraw_push_2d() { + float width = window_width(); + float height = window_height(); + float zdepth_max = window_height(); + array_push(dd_matrix2d, vec4(width,height,zdepth_max,0)); + + ddraw_flush(); +} + +void ddraw_pop_2d() { + vec4 dim = *array_back(dd_matrix2d); + array_pop(dd_matrix2d); + + mat44 id, proj; + id44(id); + ortho44(proj, 0,dim.x,dim.y,0, -dim.z, +dim.z); + ddraw_flush_projview(proj, id); +} + +void ddraw_flush() { + ddraw_flush_projview(camera_get_active()->proj, camera_get_active()->view); +} + +static float dd_line_width = 1.0f; +void ddraw_flush_projview(mat44 proj, mat44 view) { + do_once dd_rs = renderstate(); + dd_rs.depth_test_enabled = dd_ontop; + dd_rs.cull_face_enabled = 0; + + glActiveTexture(GL_TEXTURE0); + + mat44 mvp; + multiply44x2(mvp, proj, view); // MVP where M=id + + glUseProgram(dd_program); + glUniformMatrix4fv(glGetUniformLocation(dd_program, "u_MVP"), 1, GL_FALSE, mvp); + + static GLuint vao, vbo; + if(!vao) glGenVertexArrays(1, &vao); glBindVertexArray(vao); + if(!vbo) glGenBuffers(1, &vbo); glBindBuffer(GL_ARRAY_BUFFER, vbo); + + glEnableVertexAttribArray(0); + + dd_rs.point_size_enabled = 1; + dd_rs.line_smooth_enabled = 1; + + for( int i = 0; i < 3; ++i ) { // [0] thin, [1] thick, [2] points + GLenum mode = i < 2 ? GL_LINES : GL_POINTS; + dd_rs.line_width = (i == 1 ? dd_line_width : 0.3); // 0.625); + renderstate_apply(&dd_rs); + for each_map(dd_lists[dd_ontop][i], unsigned, rgb, array(vec3), list) { + int count = array_count(list); + if(!count) continue; + // color + vec3 rgbf = {((rgb>>0)&255)/255.f,((rgb>>8)&255)/255.f,((rgb>>16)&255)/255.f}; + glUniform3fv(dd_u_color, GL_TRUE, &rgbf.x); + // config vertex data + glBufferData(GL_ARRAY_BUFFER, count * 3 * 4, list, GL_STATIC_DRAW); + glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(GLfloat), 0); + // feed vertex data + glDrawArrays(mode, 0, count); + profile_incstat("Render.num_drawcalls", +1); + profile_incstat(i < 2 ? "Render.num_lines" : "Render.num_points", count); + array_clear(list); + } + } + + if(array_count(dd_text2d)) { // text 2d + // queue + for(int i = 0; i < array_count(dd_text2d); ++i) { + ddraw_color(dd_text2d[i].col); + ddraw_text(dd_text2d[i].pos, dd_text2d[i].sca, dd_text2d[i].str); + } + + // flush + float mvp[16]; float zdepth_max = 1; + ortho44(mvp, -window_width()/2, window_width()/2, -window_height()/2, window_height()/2, -1, 1); + translate44(mvp, -window_width()/2, window_height()/2, 0); + glUniformMatrix4fv(glGetUniformLocation(dd_program, "u_MVP"), 1, GL_FALSE, mvp); + for( int i = 0; i < 3; ++i ) { // [0] thin, [1] thick, [2] points + GLenum mode = i < 2 ? GL_LINES : GL_POINTS; + dd_rs.line_width = (i == 1 ? 1 : 0.3); // 0.625); + for each_map(dd_lists[dd_ontop][i], unsigned, rgb, array(vec3), list) { + int count = array_count(list); + if(!count) continue; + renderstate_apply(&dd_rs); + // color + vec3 rgbf = {((rgb>>0)&255)/255.f,((rgb>>8)&255)/255.f,((rgb>>16)&255)/255.f}; + glUniform3fv(dd_u_color, GL_TRUE, &rgbf.x); + // config vertex data + glBufferData(GL_ARRAY_BUFFER, count * 3 * 4, list, GL_STATIC_DRAW); + glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(GLfloat), 0); + // feed vertex data + glDrawArrays(mode, 0, count); + profile_incstat("Render.num_drawcalls", +1); + profile_incstat(i < 2 ? "Render.num_lines" : "Render.num_points", count); + array_clear(list); + } + } + + // clear + array_resize(dd_text2d, 0); + } + + glBindVertexArray(0); + + ddraw_color(WHITE); // reset color for next drawcall +} + +static array(bool) dd_ontops; +void ddraw_ontop(int enabled) { + dd_ontop = !!enabled; +} +void ddraw_ontop_push(int enabled) { + array_push(dd_ontops, dd_ontop); + dd_ontop = !!enabled; +} +void ddraw_ontop_pop() { + bool *pop = array_pop(dd_ontops); + if(pop) dd_ontop = *pop; +} + +void ddraw_line_width(float width) { + dd_line_width = width; +} + +static array(uint32_t) dd_colors; +void ddraw_color(unsigned rgb) { + dd_color = rgb; +} +void ddraw_color_push(unsigned rgb) { + array_push(dd_colors, dd_color); + dd_color = rgb; +} +void ddraw_color_pop() { + unsigned *pop = array_pop(dd_colors); + if(pop) dd_color = *pop; +} + +void ddraw_point(vec3 from) { + array(vec3) *found = map_find_or_add(dd_lists[dd_ontop][2], dd_color, 0); + array_push(*found, from); +} +void ddraw_line_thin(vec3 from, vec3 to) { // thin lines + array(vec3) *found = map_find_or_add(dd_lists[dd_ontop][0], dd_color, 0); + array_push(*found, from); + array_push(*found, to); +} +void ddraw_line(vec3 from, vec3 to) { // thick lines + array(vec3) *found = map_find_or_add(dd_lists[dd_ontop][1], dd_color, 0); + array_push(*found, from); + array_push(*found, to); +} +void ddraw_line_dashed(vec3 from, vec3 to) { // thick lines + vec3 dist = sub3(to, from); vec3 unit = norm3(dist); + for( float len = 0, mag = len3(dist) / 2; len < mag; ++len ) { + to = add3(from, unit); + ddraw_line(from, to); + from = add3(to, unit); + } +} +void ddraw_triangle(vec3 pa, vec3 pb, vec3 pc) { + ddraw_line(pa, pb); + ddraw_line(pa, pc); + ddraw_line(pb, pc); +} +void ddraw_axis(float units) { + ddraw_color(RED); ddraw_line(vec3(0,0,0), vec3(units,0,0)); ddraw_line_dashed(vec3(0,0,0), vec3(-units,0,0)); + ddraw_color(GREEN); ddraw_line(vec3(0,0,0), vec3(0,units,0)); ddraw_line_dashed(vec3(0,0,0), vec3(0,-units,0)); + ddraw_color(BLUE); ddraw_line(vec3(0,0,0), vec3(0,0,units)); ddraw_line_dashed(vec3(0,0,0), vec3(0,0,-units)); +} +void ddraw_ground_(float scale) { // 10x10 + ddraw_color( WHITE ); // outer + for( float i = -scale, c = 0; c <= 20; c += 20, i += c * (scale/10) ) { + ddraw_line(vec3(-scale,0,i), vec3(+scale,0,i)); // horiz + ddraw_line(vec3(i,0,-scale), vec3(i,0,+scale)); // vert + } + ddraw_color( RGB3(149,149,149) ); // inner, light grey + for( float i = -scale + scale/10, c = 1; c < 20; ++c, i += (scale/10) ) { + ddraw_line_thin(vec3(-scale,0,i), vec3(+scale,0,i)); // horiz + ddraw_line_thin(vec3(i,0,-scale), vec3(i,0,+scale)); // vert + } +} +void ddraw_ground(float scale) { + if( scale ) { + ddraw_ground_(scale); + } else { + ddraw_ground_(100); + ddraw_ground_(10); + ddraw_ground_(1); + ddraw_ground_(0.1); + ddraw_ground_(0.01); + } +} +void ddraw_grid(float scale) { + ddraw_ground(scale); + ddraw_axis(scale ? scale : 100); +} + +void ddraw_text2d(vec2 pos, const char *text) { + struct text2d_cmd t = {0}; + t.sca = 0.5f; // 0.5 is like vertical 12units each + t.pos = vec3(pos.x, 0 - pos.y - 12, 0); + t.str = text; + t.col = YELLOW; + array_push(dd_text2d, t); +} + +void (ddraw_text)(vec3 pos, float scale, const char *text) { + // [ref] http://paulbourke.net/dataformats/hershey/ (PD) + // [ref] https://sol.gfxile.net/hershey/fontprev.html (WTFPL2) + static const char *hershey[] = { /* simplex font */ + "AQ","IKFVFH@@FCEBFAGBFC","FQEVEO@@MVMO","LVLZE:@@RZK:@@EMSM@@DGRG","[UIZI=@@MZ" + "M=@@RSPUMVIVFUDSDQEOFNHMNKPJQIRGRDPBMAIAFBDD","`YVVDA@@IVKTKRJPHOFODQDSEUGVIVK" + "UNTQTTUVV@@RHPGOEOCQASAUBVDVFTHRH","c[XMXNWOVOUNTLRGPDNBLAHAFBECDEDGEIFJMNNOOQ" + "OSNULVJUISIQJNLKQDSBUAWAXBXC","HKFTEUFVGUGSFQEP","KOLZJXHUFQELEHFCH?JE=",\ + "C[EJWJ","FKFCEBFAGBFC","CWUZC:","RUJVGUERDMDJEEGBJALAOBQERJRMQROULVJV","EUGRIS" + "LVLA","OUEQERFTGUIVMVOUPTQRQPPNNKDARA","PUFVQVKNNNPMQLRIRGQDOBLAIAFBECDE","GUN" + "VDHSH@@NVNA","RUPVFVEMFNIOLOONQLRIRGQDOBLAIAFBECDE","XUQSPUMVKVHUFREMEHFDHBKAL" + "AOBQDRGRHQKOMLNKNHMFKEH","FURVHA@@DVRV","^UIVFUESEQFOHNLMOLQJRHREQCPBMAIAFBECD" + "EDHEJGLJMNNPOQQQSPUMVIV","XUQOPLNJKIJIGJELDODPESGUJVKVNUPSQOQJPENBKAIAFBED","L" + "KFOENFMGNFO@@FCEBFAGBFC","OKFOENFMGNFO@@GBFAEBFCGBG@F>E=","DYUSEJUA","F[EMWM@@" + "EGWG","DYESUJEA","USDQDRETFUHVLVNUOTPRPPONNMJKJH@@JCIBJAKBJC","x\\SNRPPQMQKPJO" + "ILIIJGLFOFQGRI@@MQKOJLJIKGLF@@SQRIRGTFVFXHYKYMXPWRUTSUPVMVJUHTFREPDMDJEGFEHCJB" + "MAPASBUCVD@@TQSISGTF","ISJVBA@@JVRA@@EHOH","XVEVEA@@EVNVQURTSRSPRNQMNL@@ELNLQK" + "RJSHSERCQBNAEA","SVSQRSPUNVJVHUFSEQDNDIEFFDHBJANAPBRDSF","PVEVEA@@EVLVOUQSRQSN" + "SIRFQDOBLAEA","LTEVEA@@EVRV@@ELML@@EARA","ISEVEA@@EVRV@@ELML","WVSQRSPUNVJVHUF" + "SEQDNDIEFFDHBJANAPBRDSFSI@@NISI","IWEVEA@@SVSA@@ELSL","CIEVEA","KQMVMFLCKBIAGA" + "EBDCCFCH","IVEVEA@@SVEH@@JMSA","FREVEA@@EAQA","LYEVEA@@EVMA@@UVMA@@UVUA","IWEV" + "EA@@EVSA@@SVSA","VWJVHUFSEQDNDIEFFDHBJANAPBRDSFTITNSQRSPUNVJV","NVEVEA@@EVNVQU" + "RTSRSORMQLNKEK","YWJVHUFSEQDNDIEFFDHBJANAPBRDSFTITNSQRSPUNVJV@@MES?","QVEVEA@@" + "EVNVQURTSRSPRNQMNLEL@@LLSA","UURSPUMVIVFUDSDQEOFNHMNKPJQIRGRDPBMAIAFBDD","FQIV" + "IA@@BVPV","KWEVEGFDHBKAMAPBRDSGSV","FSBVJA@@RVJA","LYCVHA@@MVHA@@MVRA@@WVRA","" + "FUDVRA@@RVDA","GSBVJLJA@@RVJL","IURVDA@@DVRV@@DARA","LOEZE:@@FZF:@@EZLZ@@E:L:", + "COAVO>","LOJZJ:@@KZK:@@DZKZ@@D:K:","KQGPISKP@@DMIRNM@@IRIA","CQA?Q?","HKGVFUES" + "EQFPGQFR","RTPOPA@@PLNNLOIOGNELDIDGEDGBIALANBPD","RTEVEA@@ELGNIOLONNPLQIQGPDNB" + "LAIAGBED","OSPLNNLOIOGNELDIDGEDGBIALANBPD","RTPVPA@@PLNNLOIOGNELDIDGEDGBIALANB" + "PD","RSDIPIPKOMNNLOIOGNELDIDGEDGBIALANBPD","IMKVIVGUFRFA@@COJO","WTPOP?OF;D:B:","IREVEA@@OOEE@@IIPA","CIEVEA","S_EOEA@@EKHNJOMOO" + "NPKPA@@PKSNUOXOZN[K[A","KTEOEA@@EKHNJOMOONPKPA","RTIOGNELDIDGEDGBIALANBPDQGQIP" + "LNNLOIO","RTEOE:@@ELGNIOLONNPLQIQGPDNBLAIAGBED","RTPOP:@@PLNNLOIOGNELDIDGEDGBI" + "ALANBPD","INEOEA@@EIFLHNJOMO","RROLNNKOHOENDLEJGILHNGOEODNBKAHAEBDD","IMFVFEGB" + "IAKA@@COJO","KTEOEEFBHAKAMBPE@@POPA","FQCOIA@@OOIA","LWDOHA@@LOHA@@LOPA@@TOPA", + "FRDOOA@@OODA","JQCOIA@@OOIAG=E;C:B:","IROODA@@DOOO@@DAOA","hOJZHYGXFVFTGRHQIOI" + "MGK@@HYGWGUHSIRJPJNILEJIHJFJDIBHAG?G=H;@@GIIGIEHCGBF@F>GI 0 && c < 127); ) { + if( c == '\n' || c == '\r' ) { + pos.x = src.x, pos.y -= scale * ((signed char)hershey['W'-32][1] - 65) * 1.25f; // spacing @1 + } else { + const char *glyph = (const char*)hershey[c - 32]; + if( c > 32 ) for( int pen = 0, i = 0; i < (glyph[0] - 65); i++ ) { // verts @0 + int x = glyph[2 + i*2 + 0] - 65, y = glyph[2 + i*2 + 1] - 65; + if( x == -1 && y == -1 ) pen = 0; else { + vec3 next = add3(pos, vec3(abs_scale*x, scale*y, 0)); + if( !pen ) pen = 1; else ddraw_line(old, next); + old = next; + } + } + pos.x += abs_scale * (glyph[1] - 65); // spacing @1 + } + } +} + +void ddraw_prism(vec3 center, float radius, float height, vec3 normal, int segments) { + vec3 left = {0}, up = {0}; + ortho3(&left, &up, normal); + + vec3 point, lastPoint; + up = scale3(up, radius); + left = scale3(left, radius); + lastPoint = add3(center, up); + vec3 pivot = add3(center, scale3(normal, height)); + + for (int i = 1; i <= segments; ++i) { + const float radians = (C_PI * 2) * i / segments; + + vec3 vs = scale3(left, sinf(radians)); + vec3 vc = scale3(up, cosf(radians)); + + point = add3(center, vs); + point = add3(point, vc); + + ddraw_line(lastPoint, point); + if( height > 0 ) ddraw_line(point, pivot); + else if(height < 0) { + ddraw_line(point, add3(point,scale3(normal, -height))); + } + lastPoint = point; + } + + if(height < 0) ddraw_prism(add3(center, scale3(normal, -height)), radius, 0, normal, segments); +} + +void ddraw_cube(vec3 center, float radius) { // draw_prism(center, 1, -1, vec3(0,1,0), 4); + float half = radius * 0.5f; + vec3 l = vec3(center.x-half,center.y+half,center.z-half); // left-top-far + vec3 r = vec3(center.x+half,center.y-half,center.z+half); // right-bottom-near + + ddraw_line(l, vec3(r.x,l.y,l.z)); + ddraw_line(vec3(r.x,l.y,l.z), vec3(r.x,l.y,r.z)); + ddraw_line(vec3(r.x,l.y,r.z), vec3(l.x,l.y,r.z)); + ddraw_line(vec3(l.x,l.y,r.z), l); + ddraw_line(l, vec3(l.x,r.y,l.z)); + + ddraw_line(r, vec3(l.x,r.y,r.z)); + ddraw_line(vec3(l.x,r.y,r.z), vec3(l.x,r.y,l.z)); + ddraw_line(vec3(l.x,r.y,l.z), vec3(r.x,r.y,l.z)); + ddraw_line(vec3(r.x,r.y,l.z), r); + ddraw_line(r, vec3(r.x,l.y,r.z)); + + ddraw_line(vec3(l.x,l.y,r.z), vec3(l.x,r.y,r.z)); + ddraw_line(vec3(r.x,l.y,l.z), vec3(r.x,r.y,l.z)); +} + +#if 0 // @fixme: broken +void ddraw_cube44(vec3 radius, mat44 M) { + float m33[9]; extract33(m33, M); // = { M[0,1,2], M[4,5,6], M[8,9,10] } + ddraw_cube33( vec3(M[12], M[13], M[14]), radius, m33 ); +} +#endif + +void ddraw_cube33(vec3 center, vec3 radius, mat33 M) { + vec3 half = scale3(radius, 0.5f); + vec3 l = vec3(-half.x,+half.y,-half.z); // left-top-far + vec3 r = vec3(+half.x,-half.y,+half.z); // right-bottom-near + + vec3 points[8] = { + vec3(l.x, r.y, r.z), + vec3(l.x, r.y, l.z), + vec3(r.x, r.y, l.z), + vec3(r.x, r.y, r.z), + vec3(l.x, l.y, r.z), + vec3(l.x, l.y, l.z), + vec3(r.x, l.y, l.z), + vec3(r.x, l.y, r.z), + }; + + for( int i = 0; i < 8; ++i ) { + points[i] = add3(center, transform33(M, points[i])); + } + + ddraw_bounds(points); +} + +void ddraw_normal(vec3 pos, vec3 n) { + ddraw_color(YELLOW); + ddraw_line(pos, add3(pos, norm3(n))); +} + +void ddraw_circle(vec3 pos, vec3 n, float r) { ddraw_prism(pos, r, 0, n, 32); } +void ddraw_ring(vec3 pos, vec3 n, float r) { ddraw_circle(pos,n,r);ddraw_circle(pos,n,r*0.90); } +void ddraw_hexagon(vec3 pos, float r) { ddraw_prism(pos, r, 0, vec3(0,1,0), 6); } +void ddraw_pentagon(vec3 pos, float r) { ddraw_prism(pos, r, 0, vec3(0,1,0), 5); } +void ddraw_square(vec3 pos, float r) { ddraw_prism(pos, r, 0, vec3(0,1,0), 4); } +//void ddraw_triangle(vec3 pos, float r) { ddraw_prism(pos, r, 0, vec3(0,1,0), 3); } +void ddraw_sphere(vec3 center, float radius) { + float lod = 8, yp = -radius, rp = 0, y, r, x, z; + for( int j = 1; j <= lod / 2; ++j, yp = y, rp = r ) { + y = j * 2.f / (lod / 2) - 1; + r = cosf(y * 3.14159f / 2) * radius; + y = sinf(y * 3.14159f / 2) * radius; + + float xp = 1, zp = 0; + for( int i = 1; i <= lod; ++i, xp = x, zp = z ) { + x = 3.14159f * 2 * i / lod; + z = sinf(x); + x = cosf(x); + + vec3 a1 = add3(center, vec3(xp * rp, yp, zp * rp)); + vec3 b1 = add3(center, vec3(xp * r, y, zp * r)); + vec3 c1 = add3(center, vec3(x * r, y, z * r)); + + ddraw_line(a1,b1); + ddraw_line(b1,c1); + ddraw_line(c1,a1); + + vec3 a2 = add3(center, vec3(xp * rp, yp, zp * rp)); + vec3 b2 = add3(center, vec3(x * r, y, z * r)); + vec3 c2 = add3(center, vec3(x * rp, yp, z * rp)); + + ddraw_line(a2,b2); + ddraw_line(b2,c2); + ddraw_line(c2,a2); + } + } +} +void ddraw_box(vec3 c, vec3 extents) { + vec3 points[8], whd = scale3(extents, 0.5f); + #define DD_BOX_V(v, op1, op2, op3) (v).x = c.x op1 whd.x; (v).y = c.y op2 whd.y; (v).z = c.z op3 whd.z + DD_BOX_V(points[0], -, +, +); + DD_BOX_V(points[1], -, +, -); + DD_BOX_V(points[2], +, +, -); + DD_BOX_V(points[3], +, +, +); + DD_BOX_V(points[4], -, -, +); + DD_BOX_V(points[5], -, -, -); + DD_BOX_V(points[6], +, -, -); + DD_BOX_V(points[7], +, -, +); + #undef DD_BOX_V + ddraw_bounds(points); +} +void ddraw_capsule(vec3 from, vec3 to, float r) { + /* calculate axis */ + vec3 up, right, forward; + forward = sub3(to, from); + forward = norm3(forward); + ortho3(&right, &up, forward); + + /* calculate first two cone verts (buttom + top) */ + vec3 lastf, lastt; + lastf = scale3(up,r); + lastt = add3(to,lastf); + lastf = add3(from,lastf); + + /* step along circle outline and draw lines */ + enum { step_size = 20 }; + for (int i = step_size; i <= 360; i += step_size) { + /* calculate current rotation */ + vec3 ax = scale3(right, sinf(i*TO_RAD)); + vec3 ay = scale3(up, cosf(i*TO_RAD)); + + /* calculate current vertices on cone */ + vec3 tmp = add3(ax, ay); + vec3 pf = scale3(tmp, r); + vec3 pt = scale3(tmp, r); + + pf = add3(pf, from); + pt = add3(pt, to); + + /* draw cone vertices */ + ddraw_line(lastf, pf); + ddraw_line(lastt, pt); + ddraw_line(pf, pt); + + lastf = pf; + lastt = pt; + + /* calculate first top sphere vert */ + vec3 prevt = scale3(tmp, r); + vec3 prevf = add3(prevt, from); + prevt = add3(prevt, to); + + /* sphere (two half spheres )*/ + for (int j = 1; j < 180/step_size; j++) { + /* angles */ + float ta = j*step_size; + float fa = 360-(j*step_size); + + /* top half-sphere */ + ax = scale3(forward, sinf(ta*TO_RAD)); + ay = scale3(tmp, cosf(ta*TO_RAD)); + + vec3 t = add3(ax, ay); + pf = scale3(t, r); + pf = add3(pf, to); + ddraw_line(pf, prevt); + prevt = pf; + + /* bottom half-sphere */ + ax = scale3(forward, sinf(fa*TO_RAD)); + ay = scale3(tmp, cosf(fa*TO_RAD)); + + t = add3(ax, ay); + pf = scale3(t, r); + pf = add3(pf, from); + ddraw_line(pf, prevf); + prevf = pf; + } + } +} +void ddraw_pyramid(vec3 center, float height, int segments) { + ddraw_prism(center, 1, height, vec3(0,1,0), segments); +} +void ddraw_cylinder(vec3 center, float height, int segments) { + ddraw_prism(center, 1, -height, vec3(0,1,0), segments); +} +void ddraw_diamond(vec3 from, vec3 to, float size) { + poly p = diamond(from, to, size); + vec3 *dmd = p.verts; + + vec3 *a = dmd + 0; + vec3 *b = dmd + 1; + vec3 *c = dmd + 2; + vec3 *d = dmd + 3; + vec3 *t = dmd + 4; + vec3 *f = dmd + 5; + + /* draw vertices */ + ddraw_line(*a, *b); + ddraw_line(*b, *c); + ddraw_line(*c, *d); + ddraw_line(*d, *a); + + /* draw roof */ + ddraw_line(*a, *t); + ddraw_line(*b, *t); + ddraw_line(*c, *t); + ddraw_line(*d, *t); + + /* draw floor */ + ddraw_line(*a, *f); + ddraw_line(*b, *f); + ddraw_line(*c, *f); + ddraw_line(*d, *f); + + poly_free(&p); +} +void ddraw_cone(vec3 center, vec3 top, float radius) { + vec3 diff3 = sub3(top, center); + ddraw_prism(center, radius ? radius : 1, len3(diff3), norm3(diff3), 24); +} +void ddraw_cone_lowres(vec3 center, vec3 top, float radius) { + vec3 diff3 = sub3(top, center); + ddraw_prism(center, radius ? radius : 1, len3(diff3), norm3(diff3), 3); +} +void ddraw_bone(vec3 center, vec3 end) { + vec3 diff3 = sub3(end, center); + float len = len3(diff3), len10 = len / 10; + ddraw_prism(center, len10, 0, vec3(1,0,0), 24); + ddraw_prism(center, len10, 0, vec3(0,1,0), 24); + ddraw_prism(center, len10, 0, vec3(0,0,1), 24); + ddraw_line(end, add3(center, vec3(0,+len10,0))); + ddraw_line(end, add3(center, vec3(0,-len10,0))); +} +void ddraw_bounds(const vec3 points[8]) { + for( int i = 0; i < 4; ++i ) { + ddraw_line(points[i], points[(i + 1) & 3]); + ddraw_line(points[i], points[4 + i]); + ddraw_line(points[4 + i], points[4 + ((i + 1) & 3)]); + } +} +void ddraw_bounds_corners(const vec3 points[8]) { + for( int i = 0; i < 4; ++i ) { + #define ddraw_unit(a,b) ddraw_line(a,add3(a,norm3(sub3(b,a)))), ddraw_line(b,add3(b,norm3(sub3(a,b)))) + ddraw_unit(points[i], points[(i + 1) & 3]); + ddraw_unit(points[i], points[4 + i]); + ddraw_unit(points[4 + i], points[4 + ((i + 1) & 3)]); + #undef ddraw_unit + } +} +void ddraw_aabb(vec3 minbb, vec3 maxbb) { + vec3 points[8], bb[2] = { minbb, maxbb }; + for (int i = 0; i < 8; ++i) { + points[i].x = bb[(i ^ (i >> 1)) & 1].x; + points[i].y = bb[ (i >> 1) & 1].y; + points[i].z = bb[ (i >> 2) & 1].z; + } + ddraw_bounds/*_corners*/(points); +} +void ddraw_frustum(float projview[16]) { + mat44 clipmatrix = {0}; // clip matrix + invert44(clipmatrix, projview); + + // Start with the standard clip volume, then bring it back to world space. + const vec3 planes[8] = { + {-1,-1,-1}, {+1,-1,-1}, {+1,+1,-1}, {-1,+1,-1}, // near plane + {-1,-1,+1}, {+1,-1,+1}, {+1,+1,+1}, {-1,+1,+1}, // far plane + }; + + vec3 points[8]; + float wCoords[8]; + + // Transform the planes by the inverse clip matrix: + for( int i = 0; i < 8; ++i ) { + // wCoords[i] = matTransformPointXYZW2(&points[i], planes[i], clipmatrix); + vec3 *out = &points[i], in = planes[i]; const float *m = clipmatrix; + out->x = (m[0] * in.x) + (m[4] * in.y) + (m[ 8] * in.z) + m[12]; // in.w (vec4) assumed to be 1 + out->y = (m[1] * in.x) + (m[5] * in.y) + (m[ 9] * in.z) + m[13]; + out->z = (m[2] * in.x) + (m[6] * in.y) + (m[10] * in.z) + m[14]; + wCoords[i] = (m[3] * in.x) + (m[7] * in.y) + (m[11] * in.z) + m[15]; // rw + + // bail if any W ended up as zero. + const float epsilon = 1e-9f; + if (absf(wCoords[i]) < epsilon) { + return; + } + } + + // Divide by the W component of each: + for( int i = 0; i < 8; ++i ) { + points[i].x /= wCoords[i]; + points[i].y /= wCoords[i]; + points[i].z /= wCoords[i]; + } + + // Connect the dots: + ddraw_bounds(points); +} + +void ddraw_camera(camera_t *cam) { + vec3 center = cam->position; + vec3 rightdir = cross3(cam->lookdir,cam->updir); + float proj[16]; // reproject perspective matrix with a smaller view distance (100 units) + perspective44(proj, cam->fov, window_width() / ((float)window_height()+!window_height()), 0.01f, 100.f); + + ddraw_color_push(YELLOW); + // frustum + mat44 projview; multiply44x2(projview, /*cam->*/proj, cam->view); + ddraw_frustum(projview); + // top circles + ddraw_circle(add3(center,add3(cam->lookdir,cam->updir)), rightdir, 2); + ddraw_circle(add3(center,add3(neg3(cam->lookdir),cam->updir)), rightdir, 2); + // orientation + ddraw_color(RED); + ddraw_arrow(cam->position, add3(cam->position,cam->lookdir)); + ddraw_color(GREEN); + ddraw_arrow(cam->position, add3(cam->position,cam->updir)); + ddraw_color(BLUE); + ddraw_arrow(cam->position, add3(cam->position,rightdir)); + ddraw_color_pop(); +} + +void ddraw_arrow(vec3 begin, vec3 end) { + vec3 diff = sub3(end, begin); + float len = len3(diff), stick_len = len * 2 / 3; + + ddraw_line(begin, end); + ddraw_cone_lowres(add3(begin, scale3(norm3(diff), stick_len)), end, len / 6); +} + +void ddraw_plane(vec3 p, vec3 n, float scale) { + // if n is too similar to up vector, use right. else use up vector + vec3 v1 = cross3(n, dot3(n, vec3(0,1,0)) > 0.8f ? vec3(1,0,0) : vec3(0,1,0)); + vec3 v2 = cross3(n, v1); + + // draw axis + ddraw_line(p, add3(p,n)); + ddraw_line(p, add3(p,v1)); + ddraw_line(p, add3(p,v2)); + + // get plane coords + v1 = scale3(v1, scale); + v2 = scale3(v2, scale); + vec3 p1 = add3(add3(p, v1), v2); + vec3 p2 = add3(sub3(p, v1), v2); + vec3 p3 = sub3(sub3(p, v1), v2); + vec3 p4 = sub3(add3(p, v1), v2); + + // draw plane + ddraw_line(p1, p2); + ddraw_line(p2, p3); + ddraw_line(p3, p4); + ddraw_line(p4, p1); +} + +void ddraw_boid(vec3 position, vec3 dir) { + dir = norm3(dir); + + // if n is too similar to up vector, use right. else use up vector + vec3 v1 = cross3(dir, dot3(dir, vec3(0,1,0)) > 0.8f ? vec3(1,0,0) : vec3(0,1,0)); + vec3 v2 = cross3(dir, v1); + v1 = cross3(dir, v2); + + uint32_t bak = dd_color; + ddraw_color( position.y < 0 ? ORANGE : CYAN ); + + vec3 front = add3(position, scale3(dir, 1)); + vec3 back = add3(position, scale3(dir, -0.25f)); + vec3 right = add3(back, scale3(v1, 0.5f)); + vec3 left = add3(back, scale3(v1, -0.5f)); + ddraw_line( front, left ); + ddraw_line( left, position ); + ddraw_line( position, right ); + ddraw_line( right, front ); + + dd_color = bak; +} + +void ddraw_circle__with_orientation(vec3 center, vec3 dir, float radius) { + // we'll skip 3 segments out of 32. 1.5 per half circle. + int segments = 32, skip = 3, drawn_segments = segments-skip; + +// dir = norm3(dir); + vec3 right = cross3(dir, vec3(0,1,0)); + vec3 up = cross3(dir, right); + right = cross3(dir, up); + + vec3 point, lastPoint; + dir = scale3(dir, radius); + right = scale3(right, radius); + //lastPoint = add3(center, dir); + + { + const float radians = (C_PI * 2) * (0+skip/2.f) / segments; + vec3 vs = scale3(right, sinf(radians)); + vec3 vc = scale3(dir, cosf(radians)); + lastPoint = add3(center, vs); + lastPoint = add3(lastPoint, vc); + } + + //ddraw_color(GREEN); + ddraw_line(lastPoint, add3(center, scale3(dir, radius * (radius <= 1 ? 1.25 : 0.65) ))); + //ddraw_color(YELLOW); + + for (int i = 0; i <= drawn_segments; ++i) { + const float radians = (C_PI * 2) * (i+skip/2.f) / segments; + + vec3 vs = scale3(right, sinf(radians)); + vec3 vc = scale3(dir, cosf(radians)); + + point = add3(center, vs); + point = add3(point, vc); + + ddraw_line(lastPoint, point); + lastPoint = point; + } + + //ddraw_color(RED); + ddraw_line(lastPoint, add3(center, scale3(dir, radius * (radius <= 1 ? 1.25 : 0.65) ))); +} + +void ddraw_position_dir( vec3 position, vec3 direction, float radius ) { + // idea from http://www.cs.caltech.edu/~keenan/m3drv.pdf and flotilla game UI + uint32_t bak = dd_color; + + vec3 ground = vec3(position.x, 0, position.z); + ddraw_color( position.y < 0 ? PINK/*ORANGE*/ : CYAN ); + ddraw_point( ground ); + ddraw_point( position ); + (position.y < 0 ? ddraw_line_dashed : ddraw_line)( ground, position ); + + vec3 n = norm3(direction), up = vec3(0,1,0); + for( int i = 0; i < 10 && i <= fabs(position.y); ++i ) { + if( i < 2 && len3(direction) ) + ddraw_circle__with_orientation(ground, n, radius); + else + ddraw_circle(ground, up, radius); + radius *= 0.9f; + } + + dd_color = bak; +} + +void ddraw_position( vec3 position, float radius ) { + ddraw_position_dir(position, vec3(0,0,0), radius); +} + +void ddraw_init() { + do_once { + for( int i = 0; i < 2; ++i ) + for( int j = 0; j < 3; ++j ) map_init(dd_lists[i][j], less_int, hash_int); + dd_program = shader(dd_vs,dd_fs,"att_position","fragcolor", NULL); + dd_u_color = glGetUniformLocation(dd_program, "u_color"); + ddraw_flush(); // alloc vao & vbo, also resets color + } +} + +void ddraw_demo() { + ddraw_color_push(YELLOW); + + // freeze current frame for (frustum) camera forensics + static mat44 projview_copy; + do_once { + multiply44x2(projview_copy, camera_get_active()->proj, camera_get_active()->view); + } + ddraw_frustum(projview_copy); + + //ddraw_grid(); + + vec3 origin = {0,0,0}; + ddraw_color(ORANGE); + ddraw_arrow(origin, vec3(-1,1,1)); + ddraw_color(YELLOW); + ddraw_text(vec3(-1,1,1), 0.008f, va("hello 1%s2!", "world")); + + const char abc[] = " !\"#$%&'()*+,-./\n" + "0123456789:;<=>?@\n" + "ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`\n" + "abcdefghijklmnopqrstuvwxyz{|}~"; + ddraw_text(vec3(2,2,2), 0.008f, abc); + + + for( int i = -5; i <= 5; ++i ) { + ddraw_pyramid(vec3(i*2,0,3), 0, i+5+2); ddraw_text(vec3(i*2,0,3), 0.008f, va("%d/1", i)); + ddraw_pyramid(vec3(i*2,0,6), -2, i+5+2); ddraw_text(vec3(i*2,0,6), 0.008f, va("%d/2", i)); + ddraw_pyramid(vec3(i*2,0,9), +2, i+5+2); ddraw_text(vec3(i*2,0,9), 0.008f, va("%d/3", i)); + } + +#if 1 // @fixme: add positions to these + // ddraw_triangle(origin, 1); + ddraw_square(origin, 1); + ddraw_pentagon(origin, 1); + ddraw_hexagon(origin, 1); + ddraw_cube(origin, 1); + ddraw_pyramid(origin, 2, 3); + ddraw_pyramid(origin, 2, 16); + ddraw_cone(origin, add3(origin, vec3(0,1,0)), 0.5f); + ddraw_arrow(origin, vec3(0,1,0)); + ddraw_bone(vec3(0,0,0), vec3(3,3,3)); + ddraw_aabb(vec3(0,0,0), vec3(1,1,1)); +#endif + + ddraw_plane(vec3(0,10,0), vec3(0,1,0), 10); + //ddraw_boid(vec3(15,0,15), vec3(-15,0,-15) ); + ddraw_position(vec3(10,10,10), 1); + ddraw_position(vec3(-10,-10,10), 1); + + ddraw_point(vec3(-2,0,-2)); + ddraw_color(PURPLE); + ddraw_sphere(vec3(-3,0,-3),1); + + ddraw_color_pop(); +} + +static int gizmo__mode; +static int gizmo__active; +static int gizmo__hover; +bool gizmo_active() { + return gizmo__active; +} +bool gizmo_hover() { + return gizmo__hover; +} +int gizmo(vec3 *pos, vec3 *rot, vec3 *sca) { +#if 0 + ddraw_flush(); + mat44 copy; copy44(copy, camera_get_active()->view); + if( 1 ) { + float *mv = camera_get_active()->view; + float d = sqrt(mv[4*0+0] * mv[4*0+0] + mv[4*1+1] * mv[4*1+1] + mv[4*2+2] * mv[4*2+2]); + if(4) mv[4*0+0] = d, mv[4*0+1] = 0, mv[4*0+2] = 0; + if(2) mv[4*1+0] = 0, mv[4*1+1] = d, mv[4*1+2] = 0; + if(1) mv[4*2+0] = 0, mv[4*2+1] = 0, mv[4*2+2] = d; + } +#endif + + ddraw_color_push(dd_color); + ddraw_ontop_push(1); + + int enabled = !ui_active() && !ui_hover(); + vec3 mouse = enabled ? vec3(input(MOUSE_X),input(MOUSE_Y),input_down(MOUSE_L)) : vec3(0,0,0); // x,y,l + vec3 from = camera_get_active()->position; + vec3 to = editor_pick(mouse.x, mouse.y); + ray r = ray(from, to); + + static vec3 src3, hit3, off3; static vec2 src2; + #define on_gizmo_dragged(X,Y,Z,COLOR,DRAWCMD, ...) do { \ + vec3 dir = vec3(X,Y,Z); \ + line axis = {add3(*pos, scale3(dir,100)), add3(*pos, scale3(dir,-100))}; \ + plane ground = { vec3(0,0,0), vec3(Y?1:0,Y?0:1,0) }; \ + vec3 unit = vec3(X+(1.0-X)*0.3,Y+(1.0-Y)*0.3,Z+(1.0-Z)*0.3); \ + aabb arrow = { sub3(*pos,unit), add3(*pos,unit) }; \ + hit *hit_arrow = ray_hit_aabb(r, arrow), *hit_ground = ray_hit_plane(r, ground); \ + ddraw_color( hit_arrow || gizmo__active == (X*4+Y*2+Z) ? gizmo__hover = 1, YELLOW : COLOR ); \ + DRAWCMD; \ + if( !gizmo__active && hit_arrow && mouse.z ) src2 = vec2(mouse.x,mouse.y), src3 = *pos, hit3 = hit_ground->p, off3 = mul3(sub3(src3,hit3),vec3(X,Y,Z)), gizmo__active = X*4+Y*2+Z; \ + if( (gizmo__active && gizmo__active==(X*4+Y*2+Z)) || (!gizmo__active && hit_arrow) ) { ddraw_color( COLOR ); ( 1 ? ddraw_line : ddraw_line_dashed)(axis.a, axis.b); } \ + if( gizmo__active == (X*4+Y*2+Z) && hit_ground ) {{ __VA_ARGS__ }; modified = 1; gizmo__active *= !!input(MOUSE_L); } \ + } while(0) + #define gizmo_translate(X,Y,Z,COLOR) \ + on_gizmo_dragged(X,Y,Z,COLOR, ddraw_arrow(*pos,add3(*pos,vec3(X,Y,Z))), { \ + *pos = add3(line_closest_point(axis, hit_ground->p), off3); \ + } ) + #define gizmo_scale(X,Y,Z,COLOR) \ + on_gizmo_dragged(X,Y,Z,COLOR, (ddraw_line(*pos,add3(*pos,vec3(X,Y,Z))),ddraw_sphere(add3(*pos,vec3(X-0.1*X,Y-0.1*Y,Z-0.1*Z)),0.1)), { /*ddraw_aabb(arrow.min,arrow.max)*/ \ + int component = (X*1+Y*2+Z*3)-1; \ + float mag = len2(sub2(vec2(mouse.x, mouse.y), src2)); \ + float magx = (mouse.x - src2.x) * (mouse.x - src2.x); \ + float magy = (mouse.y - src2.y) * (mouse.y - src2.y); \ + float sgn = (magx > magy ? mouse.x > src2.x : mouse.y > src2.y) ? 1 : -1; \ + sca->v3[component] -= sgn * mag * 0.01; \ + src2 = vec2(mouse.x, mouse.y); \ + } ) + #define gizmo_rotate(X,Y,Z,COLOR) do { \ + vec3 dir = vec3(X,Y,Z); \ + line axis = {add3(*pos, scale3(dir,100)), add3(*pos, scale3(dir,-100))}; \ + plane ground = { vec3(0,0,0), vec3(0,1,0) }; \ + vec3 unit = vec3(X+(1.0-X)*0.3,Y+(1.0-Y)*0.3,Z+(1.0-Z)*0.3); \ + aabb arrow = { sub3(*pos,unit), add3(*pos,unit) }; \ + hit *hit_arrow = ray_hit_aabb(r, arrow), *hit_ground = ray_hit_plane(r, ground); \ + int hover = (hit_arrow ? (X*4+Y*2+Z) : 0); \ + if( gizmo__active == (X*4+Y*2+Z) ) { ddraw_color(gizmo__active ? gizmo__hover = 1, YELLOW : WHITE); ddraw_circle(*pos, vec3(X,Y,Z), 1); } \ + else if( !gizmo__active && hover == (X*4+Y*2+Z) ) { gizmo__hover = 1; ddraw_color(COLOR); ddraw_circle(*pos, vec3(X,Y,Z), 1); } \ + else if( !gizmo__active ) { ddraw_color(WHITE); ddraw_circle(*pos, vec3(X,Y,Z), 1); } \ + if( !gizmo__active && hit_arrow && mouse.z ) src2 = vec2(mouse.x,mouse.y), gizmo__active = hover; \ + if( (!gizmo__active && hover == (X*4+Y*2+Z)) || gizmo__active == (X*4+Y*2+Z) ) { gizmo__hover = 1; ddraw_color( COLOR ); ( 1 ? ddraw_line_thin : ddraw_line_dashed)(axis.a, axis.b); } \ + if( gizmo__active && gizmo__active == (X*4+Y*2+Z) && hit_ground && enabled ) { \ + int component = (Y*1+X*2+Z*3)-1; /*pitch,yaw,roll*/ \ + float mag = len2(sub2(vec2(mouse.x, mouse.y), src2)); \ + float magx = (mouse.x - src2.x) * (mouse.x - src2.x); \ + float magy = (mouse.y - src2.y) * (mouse.y - src2.y); \ + float sgn = (magx > magy ? mouse.x > src2.x : mouse.y > src2.y) ? 1 : -1; \ + rot->v3[component] += sgn * mag; \ + /*rot->v3[component] = clampf(rot->v3[component], -360, +360);*/ \ + src2 = vec2(mouse.x, mouse.y); \ + \ + } \ + gizmo__active *= enabled && !!input(MOUSE_L); \ + } while(0) + + gizmo__hover = 0; + + int modified = 0; + if(enabled && input_down(KEY_SPACE)) gizmo__active = 0, gizmo__mode = (gizmo__mode + 1) % 3; + if(gizmo__mode == 0) gizmo_translate(1,0,0, RED); + if(gizmo__mode == 0) gizmo_translate(0,1,0, GREEN); + if(gizmo__mode == 0) gizmo_translate(0,0,1, BLUE); + if(gizmo__mode == 1) gizmo_scale(1,0,0, RED); + if(gizmo__mode == 1) gizmo_scale(0,1,0, GREEN); + if(gizmo__mode == 1) gizmo_scale(0,0,1, BLUE); + if(gizmo__mode == 2) gizmo_rotate(1,0,0, RED); + if(gizmo__mode == 2) gizmo_rotate(0,1,0, GREEN); + if(gizmo__mode == 2) gizmo_rotate(0,0,1, BLUE); + +#if 0 + ddraw_flush(); + copy44(camera_get_active()->view, copy); +#endif + + ddraw_ontop_pop(); + ddraw_color_pop(); + + return modified; +} #line 0 #line 1 "v4k_scene.c" -// -// @todo: remove explicit GL code from here - -static camera_t *last_camera; - -camera_t camera() { - camera_t *old = last_camera; - - static camera_t cam = {0}; - do_once { - cam.speed = 0.50f; - cam.position = vec3(10,10,10); - cam.updir = vec3(0,1,0); - cam.fov = 45; - cam.orthographic = false; - cam.distance = 3; // len3(cam.position); - - cam.damping = false; - cam.move_friction = 0.09f; - cam.move_damping = 0.96f; - cam.look_friction = 0.30f; - cam.look_damping = 0.96f; - cam.last_look = vec3(0,0,0); - cam.last_move = vec3(0,0,0); - - // update proj & view - camera_lookat(&cam,vec3(-5,0,-5)); - - // @todo: remove this hack that is used to consolidate dampings - if( 1 ) { - vec3 zero = {0}; - for( int i = 0; i < 1000; ++i ) { - camera_moveby(&cam, zero); - camera_fps(&cam,0,0); - } - } - } - - last_camera = old; - *camera_get_active() = cam; - return cam; -} - -camera_t *camera_get_active() { - static camera_t defaults = {0}; - if( !last_camera ) { - identity44(defaults.view); - identity44(defaults.proj); - last_camera = &defaults; - } - return last_camera; -} - -void camera_moveby(camera_t *cam, vec3 inc) { - // calculate camera damping - if( cam->damping ) { - float fr = cam->move_friction; fr *= fr; fr *= fr; fr *= fr; - float sm = clampf(cam->move_damping, 0, 0.999f); sm *= sm; sm *= sm; - - cam->last_move = scale3(cam->last_move, 1 - fr); - inc.x = cam->last_move.x = inc.x * (1 - sm) + cam->last_move.x * sm; - inc.y = cam->last_move.y = inc.y * (1 - sm) + cam->last_move.y * sm; - inc.z = cam->last_move.z = inc.z * (1 - sm) + cam->last_move.z * sm; - } - - vec3 dir = norm3(cross3(cam->lookdir, cam->updir)); - cam->position = add3(cam->position, scale3(dir, inc.x)); // right - cam->position = add3(cam->position, scale3(cam->updir, inc.y)); // up - cam->position = add3(cam->position, scale3(cam->lookdir, inc.z)); // front - - camera_fps(cam, 0, 0); -} - -void camera_teleport(camera_t *cam, vec3 pos) { - bool damping = cam->damping; - cam->damping = 0; - cam->last_move = vec3(0,0,0); - cam->position = pos; - camera_fps(cam, 0, 0); - cam->damping = damping; -} - -void camera_lookat(camera_t *cam, vec3 target) { - // invert expression that cam->lookdir = norm3(vec3(cos(y) * cos(p), sin(p), sin(y) * cos(p))); - // look.y = sin p > y = asin(p) - // look.x = cos y * cos p; -> cos p = look.x / cos y \ look.x / cos y = look.z / sin y - // look.z = sin y * cos p; -> cos p = look.z / sin y / - // so, sin y / cos y = look x / look z > tan y = look x / look z > y = atan(look x / look z) - - vec3 look = norm3(sub3(target, cam->position)); - const float rad2deg = 1 / 0.0174532f; - float pitch = asin(look.y) * rad2deg; - float yaw = atan2(look.z, look.x) * rad2deg; // coords swapped. it was (look.x, look.z) before. @todo: testme - - camera_fps(cam, yaw-cam->yaw, pitch-cam->pitch); -} - -void camera_enable(camera_t *cam) { - // camera_t *other = camera_get_active(); // init default camera in case there is none - last_camera = cam; - // trigger a dummy update -> update matrices - camera_fps(cam, 0, 0); -} - -void camera_fov(camera_t *cam, float fov) { - last_camera = cam; - - float aspect = window_width() / ((float)window_height()+!window_height()); - - cam->fov = fov; - - if( cam->orthographic ) { - ortho44(cam->proj, -cam->fov * aspect, cam->fov * aspect, -cam->fov, cam->fov, 0.01f, 2000); - // [ref] https://commons.wikimedia.org/wiki/File:Isometric_dimetric_camera_views.png - // float pitch = cam->dimetric ? 30.000f : 35.264f; // dimetric or isometric - // cam->pitch = -pitch; // quickly reorient towards origin - } else { - perspective44(cam->proj, cam->fov, aspect, 0.01f, 2000.f); - } -} - -void camera_fps2(camera_t *cam, float yaw, float pitch, float roll) { - last_camera = cam; - - // camera damping - if( cam->damping ) { - float fr = cam->look_friction; fr *= fr; fr *= fr; fr *= fr; - float sm = clampf(cam->look_damping, 0, 0.999f); sm *= sm; sm *= sm; - - cam->last_look = scale3(cam->last_look, 1 - fr); - yaw = cam->last_look.y = yaw * (1 - sm) + cam->last_look.y * sm; - pitch = cam->last_look.x = pitch * (1 - sm) + cam->last_look.x * sm; - roll = cam->last_look.z = roll * (1 - sm) + cam->last_look.z * sm; - } - - cam->yaw += yaw; - cam->yaw = fmod(cam->yaw, 360); - cam->pitch += pitch; - cam->pitch = cam->pitch > 89 ? 89 : cam->pitch < -89 ? -89 : cam->pitch; - cam->roll += roll; - cam->roll += fmod(cam->roll, 360); - - const float deg2rad = 0.0174532f, y = cam->yaw * deg2rad, p = cam->pitch * deg2rad, r = cam->roll * deg2rad; - cam->lookdir = norm3(vec3(cos(y) * cos(p), sin(p), sin(y) * cos(p))); - vec3 up = vec3(0,1,0); - // calculate updir - { - float cosfa = cosf(r); - float sinfa = sinf(r); - vec3 right = cross3(cam->lookdir, up); - float th = dot3(cam->lookdir, up); - - cam->updir.x = up.x * cosfa + right.x * sinfa + cam->lookdir.x * th * (1.0f - cosfa); - cam->updir.y = up.y * cosfa + right.y * sinfa + cam->lookdir.y * th * (1.0f - cosfa); - cam->updir.z = up.z * cosfa + right.z * sinfa + cam->lookdir.z * th * (1.0f - cosfa); - } - - lookat44(cam->view, cam->position, add3(cam->position, cam->lookdir), cam->updir); // eye,center,up - - camera_fov(cam, cam->fov); -} - -void camera_fps(camera_t *cam, float yaw, float pitch) { - camera_fps2(cam, yaw, pitch, 0.0f); -} - -void camera_orbit( camera_t *cam, float yaw, float pitch, float inc_distance ) { - last_camera = cam; - - // update dummy state - camera_fps(cam, 0,0); - - // @todo: add damping - vec3 _mouse = vec3(yaw, pitch, inc_distance); - cam->yaw += _mouse.x; - cam->pitch += _mouse.y; - cam->distance += _mouse.z; - - // look: limit pitch angle [-89..89] - cam->pitch = cam->pitch > 89 ? 89 : cam->pitch < -89 ? -89 : cam->pitch; - - // compute view matrix - float x = rad(cam->yaw), y = rad(-cam->pitch), cx = cosf(x), cy = cosf(y), sx = sinf(x), sy = sinf(y); - lookat44(cam->view, vec3( cx*cy*cam->distance, sy*cam->distance, sx*cy*cam->distance ), vec3(0,0,0), vec3(0,1,0) ); - - // save for next call - cam->last_move.x = _mouse.x; - cam->last_move.y = _mouse.y; -} - -int ui_camera( camera_t *cam ) { - int changed = 0; - changed |= ui_bool("Orthographic", &cam->orthographic); - changed |= ui_bool("Damping", &cam->damping); - if( !cam->damping ) ui_disable(); - changed |= ui_slider2("Move friction", &cam->move_friction, va("%5.3f", cam->move_friction)); - changed |= ui_slider2("Move damping", &cam->move_damping, va("%5.3f", cam->move_damping)); - changed |= ui_slider2("View friction", &cam->look_friction, va("%5.3f", cam->look_friction)); - changed |= ui_slider2("View damping", &cam->look_damping, va("%5.3f", cam->look_damping)); - if( !cam->damping ) ui_enable(); - ui_separator(); - changed |= ui_float("Speed", &cam->speed); - changed |= ui_float3("Position", cam->position.v3); - changed |= ui_float3("LookDir", cam->lookdir.v3); - changed |= ui_float3("UpDir", cam->updir.v3); - ui_disable(); - changed |= ui_mat44("View matrix", cam->view); - ui_enable(); - ui_separator(); - changed |= ui_float("FOV (degrees)", &cam->fov); - changed |= ui_float("Orbit distance", &cam->distance); - ui_disable(); - changed |= ui_mat44("Projection matrix", cam->proj); - ui_enable(); - return changed; -} - -// ----------------------------------------------------------------------------- - -static -void object_update(object_t *obj) { - quat p = eulerq(vec3(obj->pivot.x,obj->pivot.y,obj->pivot.z)); - quat e = eulerq(vec3(obj->euler.x,obj->euler.y,obj->euler.z)); - compose44(obj->transform, obj->pos, mulq(e, p), obj->sca); - - -} - -object_t object() { - object_t obj = {0}; - identity44(obj.transform); - //obj.rot = idq(); - obj.sca = vec3(1,1,1); - //obj.bounds = aabb(vec3(0,0,0),vec3(1,1,1)); // defaults to small 1-unit cube -object_rotate(&obj, vec3(0,0,0)); - //array_init(obj.textures); - return obj; -} - -void object_pivot(object_t *obj, vec3 euler) { - obj->pivot = euler; - object_update(obj); -} - -void object_rotate(object_t *obj, vec3 euler) { - quat p = eulerq(vec3(obj->pivot.x,obj->pivot.y,obj->pivot.z)); - quat e = eulerq(vec3(euler.x,euler.y,euler.z)); - obj->rot = mulq(p,e); - obj->euler = euler; - object_update(obj); -} - -void object_teleport(object_t *obj, vec3 pos) { - obj->pos = pos; - object_update(obj); -} - -void object_move(object_t *obj, vec3 inc) { - obj->pos = add3(obj->pos, inc); - object_update(obj); -} - -void object_scale(object_t *obj, vec3 sca) { - obj->sca = vec3(sca.x, sca.y, sca.z); - object_update(obj); -} - -vec3 object_position(object_t *obj) { - return vec3(obj->transform[12], obj->transform[13], obj->transform[14]); -} - -void object_model(object_t *obj, model_t model) { - obj->model = model; -} - -void object_anim(object_t *obj, anim_t anim, float speed) { - obj->anim = anim; - obj->anim_speed = speed; -} - -void object_push_diffuse(object_t *obj, texture_t tex) { - array_push(obj->textures, tex.id); -} - -void object_pop_diffuse(object_t *obj) { - array_pop(obj->textures); -} - -void object_diffuse(object_t *obj, texture_t tex) { - array_clear(obj->textures); - object_push_diffuse(obj, tex); -} - -void object_billboard(object_t *obj, unsigned mode) { - obj->billboard = mode; -} - -// ----------------------------------------------------------------------------- - -light_t light() { - light_t l = {0}; - l.diffuse = vec3(1,1,1); - l.dir = vec3(1,-1,-1); - l.falloff.constant = 1.0f; - l.falloff.linear = 0.09f; - l.falloff.quadratic = 0.0032f; - l.specularPower = 32.f; - l.innerCone = 0.9f; // 25 deg - l.outerCone = 0.85f; // 31 deg - - return l; -} - -void light_type(light_t* l, char type) { - l->cached = 0; - l->type = type; -} - -void light_diffuse(light_t* l, vec3 color) { - l->cached = 0; - l->diffuse = color; -} - -void light_specular(light_t* l, vec3 color) { - l->cached = 0; - l->specular = color; -} - -void light_ambient(light_t* l, vec3 color) { - l->cached = 0; - l->ambient = color; -} - -void light_teleport(light_t* l, vec3 pos) { - l->cached = 0; - l->pos = pos; -} - -void light_dir(light_t* l, vec3 dir) { - l->cached = 0; - l->dir = dir; -} - -void light_power(light_t* l, float power) { - l->cached = 0; - l->specularPower = power; -} - -void light_falloff(light_t* l, float constant, float linear, float quadratic) { - l->cached = 0; - l->falloff.constant = constant; - l->falloff.linear = linear; - l->falloff.quadratic = quadratic; -} - -void light_cone(light_t* l, float innerCone, float outerCone) { - l->cached = 0; - l->innerCone = acos(innerCone); - l->outerCone = acos(outerCone); -} - -void light_update(unsigned num_lights, light_t *lv) { - shader_int("u_num_lights", num_lights); - - for (unsigned i=0; i < num_lights; ++i) { - lv[i].cached = 1; - shader_int(va("u_lights[%d].type", i), lv[i].type); - shader_vec3(va("u_lights[%d].pos", i), lv[i].pos); - shader_vec3(va("u_lights[%d].dir", i), lv[i].dir); - shader_vec3(va("u_lights[%d].diffuse", i), lv[i].diffuse); - shader_vec3(va("u_lights[%d].specular", i), lv[i].specular); - shader_vec3(va("u_lights[%d].ambient", i), lv[i].ambient); - shader_float(va("u_lights[%d].power", i), lv[i].specularPower); - shader_float(va("u_lights[%d].constant", i), lv[i].falloff.constant); - shader_float(va("u_lights[%d].linear", i), lv[i].falloff.linear); - shader_float(va("u_lights[%d].quadratic", i), lv[i].falloff.quadratic); - shader_float(va("u_lights[%d].innerCone", i), lv[i].innerCone); - shader_float(va("u_lights[%d].outerCone", i), lv[i].outerCone); - } -} - -// ----------------------------------------------------------------------------- - -array(scene_t*) scenes; -scene_t* last_scene; - -static void scene_init() { -#ifndef __EMSCRIPTEN__ // @fixme ems -> shaders - do_once scene_push(); // create an empty scene by default -#endif -} - -scene_t* scene_get_active() { - return last_scene; -} - -scene_t* scene_push() { - scene_t *s = REALLOC(0, sizeof(scene_t)), clear = {0}; *s = clear; - s->skybox = skybox(NULL, 0); - array_push(scenes, s); - last_scene = s; - return s; -} - -void scene_pop() { - // @fixme: fix leaks, scene_cleanup(); - scene_t clear = {0}; - *last_scene = clear; - array_pop(scenes); - last_scene = *array_back(scenes); -} - -int scene_merge(const char *source) { - int count = 0; - if( json_push(source) ) { - for(int i = 0, e = json_count("/") - 1; i <= e ; ++i) { - const char *skybox_folder = json_string("/[%d]/skybox",i); - if( skybox_folder[0] ) { - PRINTF("Loading skybox folder: %s\n", skybox_folder); - last_scene->skybox = skybox( skybox_folder, 0 ); - continue; - } - const char *mesh_file = json_string("/[%d]/mesh",i); - const char *texture_file = json_string("/[%d]/texture",i); - const char *animation_file = json_string("/[%d]/animation",i); - vec3 position = vec3(json_float("/[%d]/position[0]",i),json_float("/[%d]/position[1]",i),json_float("/[%d]/position[2]",i)); - vec3 rotation = vec3(json_float("/[%d]/rotation[0]",i),json_float("/[%d]/rotation[1]",i),json_float("/[%d]/rotation[2]",i)); - vec3 scale = scale3(vec3(1,1,1), json_float("/[%d]/scale",i)); - bool opt_swap_zy = json_int("/[%d]/swapzy",i); - bool opt_flip_uv = json_int("/[%d]/flipuv",i); - PRINTF("Scene %d/%d Loading: %s\n", i, e, mesh_file); - PRINTF("Scene %d/%d Texture: %s\n", i, e, texture_file); - PRINTF("Scene %d/%d Animation: %s\n", i, e, animation_file); - PRINTF("Scene %d/%d Position: (%f,%f,%f)\n", i, e, position.x, position.y, position.z); - PRINTF("Scene %d/%d Rotation: (%f,%f,%f)\n", i, e, rotation.x, rotation.y, rotation.z); - PRINTF("Scene %d/%d Scale: (%f,%f,%f)\n", i, e, scale.x, scale.y, scale.z); - PRINTF("Scene %d/%d Swap_ZY: %d\n", i, e, opt_swap_zy ); - PRINTF("Scene %d/%d Flip_UV: %d\n", i, e, opt_flip_uv ); - model_t m = model_from_mem(vfs_read(mesh_file), vfs_size(mesh_file), 0/*opt_swap_zy*/); - //char *a = archive_read(animation_file); - object_t *o = scene_spawn(); - object_model(o, m); - if( texture_file[0] ) object_diffuse(o, texture_from_mem(vfs_read(texture_file), vfs_size(texture_file), (opt_flip_uv ? IMAGE_FLIP : 0)) ); - object_scale(o, scale); - object_teleport(o, position); - object_pivot(o, rotation); // object_rotate(o, rotation); - //object_name(x), scene_find(name) -// o->bounds = aabb(mul3(m.bounds.min,o->sca),mul3(m.bounds.max,o->sca)); -// PRINTF("aabb={%f,%f,%f},{%f,%f,%f}\n", o->bounds.min.x, o->bounds.min.y, o->bounds.min.z, o->bounds.max.x, o->bounds.max.y, o->bounds.max.z); - -/* - if(opt_swap_zy) { - // swap zy bounds - vec3 min = o->bounds.min, max = o->bounds.max; - o->bounds = aabb( vec3(min.x,min.z,min.y), vec3(max.x,max.z,max.y) ); - } -*/ - - count++; - } - json_pop(); - } - // PRINTF("scene loading took %5.2fs\n", secs); - PRINTF("%d objects merged into scene\n", count); - return count; -} - -object_t* scene_spawn() { - object_t obj = object(); - array_push(last_scene->objs, obj); - - return array_back(last_scene->objs); -} - -unsigned scene_count() { - return array_count(last_scene->objs); -} - -object_t* scene_index(unsigned obj_index) { - unsigned obj_count = scene_count(); - ASSERT(obj_index < obj_count, "Object index %d exceeds number (%d) of spawned objects", obj_index, obj_count); - return &last_scene->objs[obj_index]; -} - -light_t* scene_spawn_light() { - light_t l = light(); - array_push(last_scene->lights, l); - - return array_back(last_scene->lights); -} - -unsigned scene_count_light() { - return array_count(last_scene->lights); -} - -light_t* scene_index_light(unsigned light_index) { - unsigned light_count = scene_count_light(); - ASSERT(light_index < light_count, "Light index %d exceeds number (%d) of spawned lights", light_index, light_count); - return &last_scene->lights[light_index]; -} - -void scene_render(int flags) { - camera_t *cam = camera_get_active(); - - if(flags & SCENE_BACKGROUND) { - if(last_scene->skybox.program) { - skybox_push_state(&last_scene->skybox, cam->proj, cam->view); - mesh_render(&last_scene->skybox.geometry); - skybox_pop_state(); - } - - ddraw_flush(); - } - - if( flags & SCENE_FOREGROUND ) { - bool do_relighting = 0; - for (unsigned j = 0; j < array_count(last_scene->lights); ++j) { - if (!last_scene->lights[j].cached) { - do_relighting = 1; - break; - } - } - - for(unsigned j = 0, obj_count = scene_count(); j < obj_count; ++j ) { - object_t *obj = scene_index(j); - model_t *model = &obj->model; - anim_t *anim = &obj->anim; - mat44 *views = (mat44*)(&cam->view); - - // @todo: avoid heap allocs here? - static array(handle) old_textures = 0; - - int do_retexturing = model->iqm && array_count(obj->textures) > 0; - if( do_retexturing ) { - for(int i = 0; i < model->iqm->nummeshes; ++i) { - array_push(old_textures, model->iqm->textures[i]); - model->iqm->textures[i] = *array_back(obj->textures); - } - } - - if ( do_relighting || !obj->light_cached ) { - obj->light_cached = 1; - shader_bind(model->program); - light_update(array_count(last_scene->lights), last_scene->lights); - } - - if ( flags&SCENE_UPDATE_SH_COEF ) { - shader_bind(model->program); - shader_vec3v("u_coefficients_sh", 9, last_scene->skybox.cubemap.sh); - } - - model_skybox(model, last_scene->skybox, 0); - - if (anim) { - float delta = window_delta() * obj->anim_speed; - model->curframe = model_animate_clip(*model, model->curframe + delta, anim->from, anim->to, anim->flags & ANIM_LOOP ); - } - - - model->billboard = obj->billboard; - model->rs[RENDER_PASS_NORMAL].cull_face_enabled = flags&SCENE_CULLFACE ? 1 : 0; - model->rs[RENDER_PASS_NORMAL].polygon_mode_draw = flags&SCENE_WIREFRAME ? GL_LINE : GL_FILL; - model_render(*model, cam->proj, cam->view, obj->transform, model->program); - - if( do_retexturing ) { - for(int i = 0; i < model->iqm->nummeshes; ++i) { - model->iqm->textures[i] = old_textures[i]; - } - array_resize(old_textures, 0); - } - } - glBindVertexArray(0); - } -} +// +// @todo: remove explicit GL code from here + +static camera_t *last_camera; + +camera_t camera() { + camera_t *old = last_camera; + + static camera_t cam = {0}; + do_once { + cam.speed = 0.50f; + cam.position = vec3(10,10,10); + cam.updir = vec3(0,1,0); + cam.fov = 45; + cam.orthographic = false; + cam.distance = 3; // len3(cam.position); + + cam.damping = false; + cam.move_friction = 0.09f; + cam.move_damping = 0.96f; + cam.look_friction = 0.30f; + cam.look_damping = 0.96f; + cam.last_look = vec3(0,0,0); + cam.last_move = vec3(0,0,0); + + // update proj & view + camera_lookat(&cam,vec3(-5,0,-5)); + + // @todo: remove this hack that is used to consolidate dampings + if( 1 ) { + vec3 zero = {0}; + for( int i = 0; i < 1000; ++i ) { + camera_moveby(&cam, zero); + camera_fps(&cam,0,0); + } + } + } + + last_camera = old; + *camera_get_active() = cam; + return cam; +} + +camera_t *camera_get_active() { + static camera_t defaults = {0}; + if( !last_camera ) { + identity44(defaults.view); + identity44(defaults.proj); + last_camera = &defaults; + } + return last_camera; +} + +void camera_moveby(camera_t *cam, vec3 inc) { + // calculate camera damping + if( cam->damping ) { + float fr = cam->move_friction; fr *= fr; fr *= fr; fr *= fr; + float sm = clampf(cam->move_damping, 0, 0.999f); sm *= sm; sm *= sm; + + cam->last_move = scale3(cam->last_move, 1 - fr); + inc.x = cam->last_move.x = inc.x * (1 - sm) + cam->last_move.x * sm; + inc.y = cam->last_move.y = inc.y * (1 - sm) + cam->last_move.y * sm; + inc.z = cam->last_move.z = inc.z * (1 - sm) + cam->last_move.z * sm; + } + + vec3 dir = norm3(cross3(cam->lookdir, cam->updir)); + cam->position = add3(cam->position, scale3(dir, inc.x)); // right + cam->position = add3(cam->position, scale3(cam->updir, inc.y)); // up + cam->position = add3(cam->position, scale3(cam->lookdir, inc.z)); // front + + camera_fps(cam, 0, 0); +} + +void camera_teleport(camera_t *cam, vec3 pos) { + bool damping = cam->damping; + cam->damping = 0; + cam->last_move = vec3(0,0,0); + cam->position = pos; + camera_fps(cam, 0, 0); + cam->damping = damping; +} + +void camera_lookat(camera_t *cam, vec3 target) { + // invert expression that cam->lookdir = norm3(vec3(cos(y) * cos(p), sin(p), sin(y) * cos(p))); + // look.y = sin p > y = asin(p) + // look.x = cos y * cos p; -> cos p = look.x / cos y \ look.x / cos y = look.z / sin y + // look.z = sin y * cos p; -> cos p = look.z / sin y / + // so, sin y / cos y = look x / look z > tan y = look x / look z > y = atan(look x / look z) + + vec3 look = norm3(sub3(target, cam->position)); + const float rad2deg = 1 / 0.0174532f; + float pitch = asin(look.y) * rad2deg; + float yaw = atan2(look.z, look.x) * rad2deg; // coords swapped. it was (look.x, look.z) before. @todo: testme + + camera_fps(cam, yaw-cam->yaw, pitch-cam->pitch); +} + +void camera_enable(camera_t *cam) { + // camera_t *other = camera_get_active(); // init default camera in case there is none + last_camera = cam; + // trigger a dummy update -> update matrices + camera_fps(cam, 0, 0); +} + +void camera_fov(camera_t *cam, float fov) { + last_camera = cam; + + float aspect = window_width() / ((float)window_height()+!window_height()); + + cam->fov = fov; + + if( cam->orthographic ) { + ortho44(cam->proj, -cam->fov * aspect, cam->fov * aspect, -cam->fov, cam->fov, 0.01f, 2000); + // [ref] https://commons.wikimedia.org/wiki/File:Isometric_dimetric_camera_views.png + // float pitch = cam->dimetric ? 30.000f : 35.264f; // dimetric or isometric + // cam->pitch = -pitch; // quickly reorient towards origin + } else { + perspective44(cam->proj, cam->fov, aspect, 0.01f, 2000.f); + } +} + +void camera_fps2(camera_t *cam, float yaw, float pitch, float roll) { + last_camera = cam; + + // camera damping + if( cam->damping ) { + float fr = cam->look_friction; fr *= fr; fr *= fr; fr *= fr; + float sm = clampf(cam->look_damping, 0, 0.999f); sm *= sm; sm *= sm; + + cam->last_look = scale3(cam->last_look, 1 - fr); + yaw = cam->last_look.y = yaw * (1 - sm) + cam->last_look.y * sm; + pitch = cam->last_look.x = pitch * (1 - sm) + cam->last_look.x * sm; + roll = cam->last_look.z = roll * (1 - sm) + cam->last_look.z * sm; + } + + cam->yaw += yaw; + cam->yaw = fmod(cam->yaw, 360); + cam->pitch += pitch; + cam->pitch = cam->pitch > 89 ? 89 : cam->pitch < -89 ? -89 : cam->pitch; + cam->roll += roll; + cam->roll += fmod(cam->roll, 360); + + const float deg2rad = 0.0174532f, y = cam->yaw * deg2rad, p = cam->pitch * deg2rad, r = cam->roll * deg2rad; + cam->lookdir = norm3(vec3(cos(y) * cos(p), sin(p), sin(y) * cos(p))); + vec3 up = vec3(0,1,0); + // calculate updir + { + float cosfa = cosf(r); + float sinfa = sinf(r); + vec3 right = cross3(cam->lookdir, up); + float th = dot3(cam->lookdir, up); + + cam->updir.x = up.x * cosfa + right.x * sinfa + cam->lookdir.x * th * (1.0f - cosfa); + cam->updir.y = up.y * cosfa + right.y * sinfa + cam->lookdir.y * th * (1.0f - cosfa); + cam->updir.z = up.z * cosfa + right.z * sinfa + cam->lookdir.z * th * (1.0f - cosfa); + } + + lookat44(cam->view, cam->position, add3(cam->position, cam->lookdir), cam->updir); // eye,center,up + + camera_fov(cam, cam->fov); +} + +void camera_fps(camera_t *cam, float yaw, float pitch) { + camera_fps2(cam, yaw, pitch, 0.0f); +} + +void camera_orbit( camera_t *cam, float yaw, float pitch, float inc_distance ) { + last_camera = cam; + + // update dummy state + camera_fps(cam, 0,0); + + // @todo: add damping + vec3 _mouse = vec3(yaw, pitch, inc_distance); + cam->yaw += _mouse.x; + cam->pitch += _mouse.y; + cam->distance += _mouse.z; + + // look: limit pitch angle [-89..89] + cam->pitch = cam->pitch > 89 ? 89 : cam->pitch < -89 ? -89 : cam->pitch; + + // compute view matrix + float x = rad(cam->yaw), y = rad(-cam->pitch), cx = cosf(x), cy = cosf(y), sx = sinf(x), sy = sinf(y); + lookat44(cam->view, vec3( cx*cy*cam->distance, sy*cam->distance, sx*cy*cam->distance ), vec3(0,0,0), vec3(0,1,0) ); + + // save for next call + cam->last_move.x = _mouse.x; + cam->last_move.y = _mouse.y; +} + +int ui_camera( camera_t *cam ) { + int changed = 0; + changed |= ui_bool("Orthographic", &cam->orthographic); + changed |= ui_bool("Damping", &cam->damping); + if( !cam->damping ) ui_disable(); + changed |= ui_slider2("Move friction", &cam->move_friction, va("%5.3f", cam->move_friction)); + changed |= ui_slider2("Move damping", &cam->move_damping, va("%5.3f", cam->move_damping)); + changed |= ui_slider2("View friction", &cam->look_friction, va("%5.3f", cam->look_friction)); + changed |= ui_slider2("View damping", &cam->look_damping, va("%5.3f", cam->look_damping)); + if( !cam->damping ) ui_enable(); + ui_separator(); + changed |= ui_float("Speed", &cam->speed); + changed |= ui_float3("Position", cam->position.v3); + changed |= ui_float3("LookDir", cam->lookdir.v3); + changed |= ui_float3("UpDir", cam->updir.v3); + ui_disable(); + changed |= ui_mat44("View matrix", cam->view); + ui_enable(); + ui_separator(); + changed |= ui_float("FOV (degrees)", &cam->fov); + changed |= ui_float("Orbit distance", &cam->distance); + ui_disable(); + changed |= ui_mat44("Projection matrix", cam->proj); + ui_enable(); + return changed; +} + +// ----------------------------------------------------------------------------- + +static +void object_update(object_t *obj) { + quat p = eulerq(vec3(obj->pivot.x,obj->pivot.y,obj->pivot.z)); + quat e = eulerq(vec3(obj->euler.x,obj->euler.y,obj->euler.z)); + compose44(obj->transform, obj->pos, mulq(e, p), obj->sca); + + +} + +object_t object() { + object_t obj = {0}; + identity44(obj.transform); + //obj.rot = idq(); + obj.sca = vec3(1,1,1); + //obj.bounds = aabb(vec3(0,0,0),vec3(1,1,1)); // defaults to small 1-unit cube +object_rotate(&obj, vec3(0,0,0)); + //array_init(obj.textures); + return obj; +} + +void object_pivot(object_t *obj, vec3 euler) { + obj->pivot = euler; + object_update(obj); +} + +void object_rotate(object_t *obj, vec3 euler) { + quat p = eulerq(vec3(obj->pivot.x,obj->pivot.y,obj->pivot.z)); + quat e = eulerq(vec3(euler.x,euler.y,euler.z)); + obj->rot = mulq(p,e); + obj->euler = euler; + object_update(obj); +} + +void object_teleport(object_t *obj, vec3 pos) { + obj->pos = pos; + object_update(obj); +} + +void object_move(object_t *obj, vec3 inc) { + obj->pos = add3(obj->pos, inc); + object_update(obj); +} + +void object_scale(object_t *obj, vec3 sca) { + obj->sca = vec3(sca.x, sca.y, sca.z); + object_update(obj); +} + +vec3 object_position(object_t *obj) { + return vec3(obj->transform[12], obj->transform[13], obj->transform[14]); +} + +void object_model(object_t *obj, model_t model) { + obj->model = model; +} + +void object_anim(object_t *obj, anim_t anim, float speed) { + obj->anim = anim; + obj->anim_speed = speed; +} + +void object_push_diffuse(object_t *obj, texture_t tex) { + array_push(obj->textures, tex.id); +} + +void object_pop_diffuse(object_t *obj) { + array_pop(obj->textures); +} + +void object_diffuse(object_t *obj, texture_t tex) { + array_clear(obj->textures); + object_push_diffuse(obj, tex); +} + +void object_billboard(object_t *obj, unsigned mode) { + obj->billboard = mode; +} + +// ----------------------------------------------------------------------------- + +light_t light() { + light_t l = {0}; + l.diffuse = vec3(1,1,1); + l.dir = vec3(1,-1,-1); + l.falloff.constant = 1.0f; + l.falloff.linear = 0.09f; + l.falloff.quadratic = 0.0032f; + l.specularPower = 32.f; + l.innerCone = 0.9f; // 25 deg + l.outerCone = 0.85f; // 31 deg + + return l; +} + +void light_type(light_t* l, char type) { + l->cached = 0; + l->type = type; +} + +void light_diffuse(light_t* l, vec3 color) { + l->cached = 0; + l->diffuse = color; +} + +void light_specular(light_t* l, vec3 color) { + l->cached = 0; + l->specular = color; +} + +void light_ambient(light_t* l, vec3 color) { + l->cached = 0; + l->ambient = color; +} + +void light_teleport(light_t* l, vec3 pos) { + l->cached = 0; + l->pos = pos; +} + +void light_dir(light_t* l, vec3 dir) { + l->cached = 0; + l->dir = dir; +} + +void light_power(light_t* l, float power) { + l->cached = 0; + l->specularPower = power; +} + +void light_falloff(light_t* l, float constant, float linear, float quadratic) { + l->cached = 0; + l->falloff.constant = constant; + l->falloff.linear = linear; + l->falloff.quadratic = quadratic; +} + +void light_cone(light_t* l, float innerCone, float outerCone) { + l->cached = 0; + l->innerCone = acos(innerCone); + l->outerCone = acos(outerCone); +} + +void light_update(unsigned num_lights, light_t *lv) { + shader_int("u_num_lights", num_lights); + + for (unsigned i=0; i < num_lights; ++i) { + lv[i].cached = 1; + shader_int(va("u_lights[%d].type", i), lv[i].type); + shader_vec3(va("u_lights[%d].pos", i), lv[i].pos); + shader_vec3(va("u_lights[%d].dir", i), lv[i].dir); + shader_vec3(va("u_lights[%d].diffuse", i), lv[i].diffuse); + shader_vec3(va("u_lights[%d].specular", i), lv[i].specular); + shader_vec3(va("u_lights[%d].ambient", i), lv[i].ambient); + shader_float(va("u_lights[%d].power", i), lv[i].specularPower); + shader_float(va("u_lights[%d].constant", i), lv[i].falloff.constant); + shader_float(va("u_lights[%d].linear", i), lv[i].falloff.linear); + shader_float(va("u_lights[%d].quadratic", i), lv[i].falloff.quadratic); + shader_float(va("u_lights[%d].innerCone", i), lv[i].innerCone); + shader_float(va("u_lights[%d].outerCone", i), lv[i].outerCone); + } +} + +// ----------------------------------------------------------------------------- + +array(scene_t*) scenes; +scene_t* last_scene; + +static void scene_init() { +#ifndef __EMSCRIPTEN__ // @fixme ems -> shaders + do_once scene_push(); // create an empty scene by default +#endif +} + +scene_t* scene_get_active() { + return last_scene; +} + +scene_t* scene_push() { + scene_t *s = REALLOC(0, sizeof(scene_t)), clear = {0}; *s = clear; + s->skybox = skybox(NULL, 0); + array_push(scenes, s); + last_scene = s; + return s; +} + +void scene_pop() { + // @fixme: fix leaks, scene_cleanup(); + scene_t clear = {0}; + *last_scene = clear; + array_pop(scenes); + last_scene = *array_back(scenes); +} + +int scene_merge(const char *source) { + int count = 0; + if( json_push(source) ) { + for(int i = 0, e = json_count("/") - 1; i <= e ; ++i) { + const char *skybox_folder = json_string("/[%d]/skybox",i); + if( skybox_folder[0] ) { + PRINTF("Loading skybox folder: %s\n", skybox_folder); + last_scene->skybox = skybox( skybox_folder, 0 ); + continue; + } + const char *mesh_file = json_string("/[%d]/mesh",i); + const char *texture_file = json_string("/[%d]/texture",i); + const char *animation_file = json_string("/[%d]/animation",i); + vec3 position = vec3(json_float("/[%d]/position[0]",i),json_float("/[%d]/position[1]",i),json_float("/[%d]/position[2]",i)); + vec3 rotation = vec3(json_float("/[%d]/rotation[0]",i),json_float("/[%d]/rotation[1]",i),json_float("/[%d]/rotation[2]",i)); + vec3 scale = scale3(vec3(1,1,1), json_float("/[%d]/scale",i)); + bool opt_swap_zy = json_int("/[%d]/swapzy",i); + bool opt_flip_uv = json_int("/[%d]/flipuv",i); + PRINTF("Scene %d/%d Loading: %s\n", i, e, mesh_file); + PRINTF("Scene %d/%d Texture: %s\n", i, e, texture_file); + PRINTF("Scene %d/%d Animation: %s\n", i, e, animation_file); + PRINTF("Scene %d/%d Position: (%f,%f,%f)\n", i, e, position.x, position.y, position.z); + PRINTF("Scene %d/%d Rotation: (%f,%f,%f)\n", i, e, rotation.x, rotation.y, rotation.z); + PRINTF("Scene %d/%d Scale: (%f,%f,%f)\n", i, e, scale.x, scale.y, scale.z); + PRINTF("Scene %d/%d Swap_ZY: %d\n", i, e, opt_swap_zy ); + PRINTF("Scene %d/%d Flip_UV: %d\n", i, e, opt_flip_uv ); + model_t m = model_from_mem(vfs_read(mesh_file), vfs_size(mesh_file), 0/*opt_swap_zy*/); + //char *a = archive_read(animation_file); + object_t *o = scene_spawn(); + object_model(o, m); + if( texture_file[0] ) object_diffuse(o, texture_from_mem(vfs_read(texture_file), vfs_size(texture_file), (opt_flip_uv ? IMAGE_FLIP : 0)) ); + object_scale(o, scale); + object_teleport(o, position); + object_pivot(o, rotation); // object_rotate(o, rotation); + //object_name(x), scene_find(name) +// o->bounds = aabb(mul3(m.bounds.min,o->sca),mul3(m.bounds.max,o->sca)); +// PRINTF("aabb={%f,%f,%f},{%f,%f,%f}\n", o->bounds.min.x, o->bounds.min.y, o->bounds.min.z, o->bounds.max.x, o->bounds.max.y, o->bounds.max.z); + +/* + if(opt_swap_zy) { + // swap zy bounds + vec3 min = o->bounds.min, max = o->bounds.max; + o->bounds = aabb( vec3(min.x,min.z,min.y), vec3(max.x,max.z,max.y) ); + } +*/ + + count++; + } + json_pop(); + } + // PRINTF("scene loading took %5.2fs\n", secs); + PRINTF("%d objects merged into scene\n", count); + return count; +} + +object_t* scene_spawn() { + object_t obj = object(); + array_push(last_scene->objs, obj); + + return array_back(last_scene->objs); +} + +unsigned scene_count() { + return array_count(last_scene->objs); +} + +object_t* scene_index(unsigned obj_index) { + unsigned obj_count = scene_count(); + ASSERT(obj_index < obj_count, "Object index %d exceeds number (%d) of spawned objects", obj_index, obj_count); + return &last_scene->objs[obj_index]; +} + +light_t* scene_spawn_light() { + light_t l = light(); + array_push(last_scene->lights, l); + + return array_back(last_scene->lights); +} + +unsigned scene_count_light() { + return array_count(last_scene->lights); +} + +light_t* scene_index_light(unsigned light_index) { + unsigned light_count = scene_count_light(); + ASSERT(light_index < light_count, "Light index %d exceeds number (%d) of spawned lights", light_index, light_count); + return &last_scene->lights[light_index]; +} + +void scene_render(int flags) { + camera_t *cam = camera_get_active(); + + if(flags & SCENE_BACKGROUND) { + if(last_scene->skybox.program) { + skybox_push_state(&last_scene->skybox, cam->proj, cam->view); + mesh_render(&last_scene->skybox.geometry); + skybox_pop_state(); + } + + ddraw_flush(); + } + + if( flags & SCENE_FOREGROUND ) { + bool do_relighting = 0; + for (unsigned j = 0; j < array_count(last_scene->lights); ++j) { + if (!last_scene->lights[j].cached) { + do_relighting = 1; + break; + } + } + + for(unsigned j = 0, obj_count = scene_count(); j < obj_count; ++j ) { + object_t *obj = scene_index(j); + model_t *model = &obj->model; + anim_t *anim = &obj->anim; + mat44 *views = (mat44*)(&cam->view); + + // @todo: avoid heap allocs here? + static array(handle) old_textures = 0; + + int do_retexturing = model->iqm && array_count(obj->textures) > 0; + if( do_retexturing ) { + for(int i = 0; i < model->iqm->nummeshes; ++i) { + array_push(old_textures, model->iqm->textures[i]); + model->iqm->textures[i] = *array_back(obj->textures); + } + } + + if ( do_relighting || !obj->light_cached ) { + obj->light_cached = 1; + shader_bind(model->program); + light_update(array_count(last_scene->lights), last_scene->lights); + } + + if ( flags&SCENE_UPDATE_SH_COEF ) { + shader_bind(model->program); + shader_vec3v("u_coefficients_sh", 9, last_scene->skybox.cubemap.sh); + } + + model_skybox(model, last_scene->skybox, 0); + + if (anim) { + float delta = window_delta() * obj->anim_speed; + model->curframe = model_animate_clip(*model, model->curframe + delta, anim->from, anim->to, anim->flags & ANIM_LOOP ); + } + + + model->billboard = obj->billboard; + model->rs[RENDER_PASS_NORMAL].cull_face_enabled = flags&SCENE_CULLFACE ? 1 : 0; + model->rs[RENDER_PASS_NORMAL].polygon_mode_draw = flags&SCENE_WIREFRAME ? GL_LINE : GL_FILL; + model_render(*model, cam->proj, cam->view, obj->transform, model->program); + + if( do_retexturing ) { + for(int i = 0; i < model->iqm->nummeshes; ++i) { + model->iqm->textures[i] = old_textures[i]; + } + array_resize(old_textures, 0); + } + } + glBindVertexArray(0); + } +} #line 0 #line 1 "v4k_sprite.c" -// ---------------------------------------------------------------------------- -// sprites - -typedef struct sprite_static_t { - float px, py, pz; // origin x, y, depth - float ox, oy, cos, sin; // offset x, offset y, cos/sin of rotation degree - float sx, sy; // scale x,y - float cellw, cellh; // dimensions of any cell in spritesheet - - union { - struct { - int frame, ncx, ncy; // frame in a (num cellx, num celly) spritesheet - }; - struct { - float x, y, w, h; // normalized[0..1] within texture bounds - }; - }; - - uint32_t rgba, flags; // vertex color and flags -} sprite_static_t; - -// sprite batching -typedef struct batch_t { array(sprite_static_t) sprites; mesh_t mesh; int dirty; } batch_t; -typedef map(int, batch_t) batch_group_t; // mapkey is anything that forces a flush. texture_id for now, might be texture_id+program_id soon - -// sprite stream -typedef struct sprite_vertex { vec3 pos; vec2 uv; uint32_t rgba; } sprite_vertex; -typedef struct sprite_index { GLuint triangle[3]; } sprite_index; - -#define sprite_vertex(...) C_CAST(sprite_vertex, __VA_ARGS__) -#define sprite_index(...) C_CAST(sprite_index, __VA_ARGS__) - -// sprite impl -static int sprite_count = 0; -static int sprite_program = -1; -static array(sprite_index) sprite_indices = 0; -static array(sprite_vertex) sprite_vertices = 0; - -// center_wh << 2 | additive << 1 | projected << 0 -static batch_group_t sprite_group[8] = {0}; - -// rect(x,y,w,h) is [0..1] normalized, pos(xyz,z-index), scale_offset(sx,sy,offx,offy), rotation (degrees), color (rgba) -void sprite_rect( texture_t t, vec4 rect, vec4 pos, vec4 scale_offset, float tilt_deg, unsigned tint_rgba, unsigned flags) { - float zindex = pos.w; - float scalex = scale_offset.x; - float scaley = scale_offset.y; - float offsetx = scale_offset.z; - float offsety = scale_offset.w; - - // do not queue if either scales or alpha are zero - if( 0 == (scalex * scaley * ((tint_rgba>>24) & 255)) ) return; - - ASSERT( (flags & SPRITE_CENTERED) == 0 ); - if( flags & SPRITE_PROJECTED ) { - tilt_deg += 180, scalex = -scalex; // flip texture Y on mvp3d (same than turn 180º then flip X) - } - - sprite_static_t s = {0}; - - s.px = pos.x, s.py = pos.y, s.pz = pos.z - zindex; - s.sx = scalex, s.sy = scaley; - - s.x = rect.x, s.y = rect.y, s.w = rect.z, s.h = rect.w; - s.cellw = s.w * s.sx * t.w, s.cellh = s.h * s.sy * t.h; - - s.rgba = tint_rgba; - s.flags = flags; - -#if 0 - s.ox = 0/*ox*/ * s.sx; - s.oy = 0/*oy*/ * s.sy; -#else - s.ox += offsetx * scalex; - s.oy += offsety * scaley; -#endif - - if( tilt_deg ) { - tilt_deg = (tilt_deg + 0) * ((float)C_PI / 180); - s.cos = cosf(tilt_deg); - s.sin = sinf(tilt_deg); - } else { - s.cos = 1; - s.sin = 0; - } - - batch_group_t *batches = &sprite_group[ flags & 7 ]; - batch_t *found = map_find_or_add(*batches, t.id, (batch_t){0}); - - array_push(found->sprites, s); -} - -void sprite_sheet( texture_t texture, float spritesheet[3], float position[3], float rotation, float offset[2], float scale[2], unsigned rgba, unsigned flags) { - flags |= SPRITE_CENTERED; - ASSERT( flags & SPRITE_CENTERED ); - - const float px = position[0], py = position[1], pz = position[2]; - const float ox = offset[0], oy = offset[1], sx = scale[0], sy = scale[1]; - const float frame = spritesheet[0], xcells = spritesheet[1], ycells = spritesheet[2]; - - if (frame < 0) return; - if (frame > 0 && frame >= (xcells * ycells)) return; - - // no need to queue if alpha or scale are zero - if( sx && sy && alpha(rgba) ) { - vec3 bak = camera_get_active()->position; - if( flags & SPRITE_RESOLUTION_INDEPENDANT ) { // @todo: optimize me - sprite_flush(); - camera_get_active()->position = vec3(window_width()/2,window_height()/2,1); - } - - sprite_static_t s; - s.px = px; - s.py = py; - s.pz = pz; - s.frame = frame; - s.ncx = xcells ? xcells : 1; - s.ncy = ycells ? ycells : 1; - s.sx = sx; - s.sy = sy; - s.ox = ox * sx; - s.oy = oy * sy; - s.cellw = (texture.x * sx / s.ncx); - s.cellh = (texture.y * sy / s.ncy); - s.rgba = rgba; - s.flags = flags; - s.cos = 1; - s.sin = 0; - if(rotation) { - rotation = (rotation + 0) * ((float)C_PI / 180); - s.cos = cosf(rotation); - s.sin = sinf(rotation); - } - - batch_group_t *batches = &sprite_group[ flags & 7 ]; -#if 0 - batch_t *found = map_find(*batches, texture.id); - if( !found ) found = map_insert(*batches, texture.id, (batch_t){0}); -#else - batch_t *found = map_find_or_add(*batches, texture.id, (batch_t){0}); -#endif - - array_push(found->sprites, s); - - if( flags & SPRITE_RESOLUTION_INDEPENDANT ) { // @todo: optimize me - sprite_flush(); - camera_get_active()->position = bak; - } - } -} - -void sprite( texture_t texture, float position[3], float rotation, unsigned color, unsigned flags) { - float offset[2] = {0,0}, scale[2] = {1,1}, spritesheet[3] = {0,0,0}; - sprite_sheet( texture, spritesheet, position, rotation, offset, scale, color, flags ); -} - -static void sprite_rebuild_meshes() { - sprite_count = 0; - - // w/2,h/2 centered - for( int l = countof(sprite_group) / 2; l < countof(sprite_group); ++l) { - for each_map_ptr(sprite_group[l], int,_, batch_t,bt) { - - bt->dirty = array_count(bt->sprites) ? 1 : 0; - if( !bt->dirty ) continue; - - int index = 0; - array_clear(sprite_indices); - array_clear(sprite_vertices); - - array_foreach_ptr(bt->sprites, sprite_static_t,it ) { - float x0 = it->ox - it->cellw/2, x3 = x0 + it->cellw; - float y0 = it->oy - it->cellh/2, y3 = y0; - float x1 = x0, x2 = x3; - float y1 = y0 + it->cellh, y2 = y1; - - // @todo: move this affine transform into glsl shader - vec3 v0 = { it->px + ( x0 * it->cos - y0 * it->sin ), it->py + ( x0 * it->sin + y0 * it->cos ), it->pz }; - vec3 v1 = { it->px + ( x1 * it->cos - y1 * it->sin ), it->py + ( x1 * it->sin + y1 * it->cos ), it->pz }; - vec3 v2 = { it->px + ( x2 * it->cos - y2 * it->sin ), it->py + ( x2 * it->sin + y2 * it->cos ), it->pz }; - vec3 v3 = { it->px + ( x3 * it->cos - y3 * it->sin ), it->py + ( x3 * it->sin + y3 * it->cos ), it->pz }; - - float cx = (1.0f / it->ncx) - 1e-9f; - float cy = (1.0f / it->ncy) - 1e-9f; - int idx = (int)it->frame; - int px = idx % it->ncx; - int py = idx / it->ncx; - - float ux = px * cx, uy = py * cy; - float vx = ux + cx, vy = uy + cy; - - vec2 uv0 = vec2(ux, uy); - vec2 uv1 = vec2(ux, vy); - vec2 uv2 = vec2(vx, vy); - vec2 uv3 = vec2(vx, uy); - - array_push( sprite_vertices, sprite_vertex(v0, uv0, it->rgba) ); // Vertex 0 (A) - array_push( sprite_vertices, sprite_vertex(v1, uv1, it->rgba) ); // Vertex 1 (B) - array_push( sprite_vertices, sprite_vertex(v2, uv2, it->rgba) ); // Vertex 2 (C) - array_push( sprite_vertices, sprite_vertex(v3, uv3, it->rgba) ); // Vertex 3 (D) - - // A--B A A-B - // quad | | becomes triangle |\ and triangle \| - // D--C D-C C - GLuint A = (index+0), B = (index+1), C = (index+2), D = (index+3); index += 4; - - array_push( sprite_indices, sprite_index(C, D, A) ); // Triangle 1 - array_push( sprite_indices, sprite_index(C, A, B) ); // Triangle 2 - } - - mesh_update(&bt->mesh, "p3 t2 c4B", 0,array_count(sprite_vertices),sprite_vertices, 3*array_count(sprite_indices),sprite_indices, MESH_STATIC); - - // clear elements from queue - sprite_count += array_count(bt->sprites); - array_clear(bt->sprites); - } - } - - // (0,0) centered - for( int l = 0; l < countof(sprite_group) / 2; ++l) { - for each_map_ptr(sprite_group[l], int,_, batch_t,bt) { - - bt->dirty = array_count(bt->sprites) ? 1 : 0; - if( !bt->dirty ) continue; - - int index = 0; - array_clear(sprite_indices); - array_clear(sprite_vertices); - - array_foreach_ptr(bt->sprites, sprite_static_t,it ) { - float x0 = it->ox - it->cellw/2, x3 = x0 + it->cellw; - float y0 = it->oy - it->cellh/2, y3 = y0; - float x1 = x0, x2 = x3; - float y1 = y0 + it->cellh, y2 = y1; - - // @todo: move this affine transform into glsl shader - vec3 v0 = { it->px + ( x0 * it->cos - y0 * it->sin ), it->py + ( x0 * it->sin + y0 * it->cos ), it->pz }; - vec3 v1 = { it->px + ( x1 * it->cos - y1 * it->sin ), it->py + ( x1 * it->sin + y1 * it->cos ), it->pz }; - vec3 v2 = { it->px + ( x2 * it->cos - y2 * it->sin ), it->py + ( x2 * it->sin + y2 * it->cos ), it->pz }; - vec3 v3 = { it->px + ( x3 * it->cos - y3 * it->sin ), it->py + ( x3 * it->sin + y3 * it->cos ), it->pz }; - - float ux = it->x, vx = ux + it->w; - float uy = it->y, vy = uy + it->h; - - vec2 uv0 = vec2(ux, uy); - vec2 uv1 = vec2(ux, vy); - vec2 uv2 = vec2(vx, vy); - vec2 uv3 = vec2(vx, uy); - - array_push( sprite_vertices, sprite_vertex(v0, uv0, it->rgba) ); // Vertex 0 (A) - array_push( sprite_vertices, sprite_vertex(v1, uv1, it->rgba) ); // Vertex 1 (B) - array_push( sprite_vertices, sprite_vertex(v2, uv2, it->rgba) ); // Vertex 2 (C) - array_push( sprite_vertices, sprite_vertex(v3, uv3, it->rgba) ); // Vertex 3 (D) - - // A--B A A-B - // quad | | becomes triangle |\ and triangle \| - // D--C D-C C - GLuint A = (index+0), B = (index+1), C = (index+2), D = (index+3); index += 4; - - array_push( sprite_indices, sprite_index(C, D, A) ); // Triangle 1 - array_push( sprite_indices, sprite_index(C, A, B) ); // Triangle 2 - } - - mesh_update(&bt->mesh, "p3 t2 c4B", 0,array_count(sprite_vertices),sprite_vertices, 3*array_count(sprite_indices),sprite_indices, MESH_STATIC); - - // clear elements from queue - sprite_count += array_count(bt->sprites); - array_clear(bt->sprites); - } - } -} - -static void sprite_render_meshes_group(batch_group_t* sprites, int alpha_key, int alpha_value, float mvp[16]) { - if( map_count(*sprites) > 0 ) { - // setup shader - if( sprite_program < 0 ) { - sprite_program = shader( vfs_read("shaders/vs_324_24_sprite.glsl"), vfs_read("shaders/fs_24_4_sprite.glsl"), - "att_Position,att_TexCoord,att_Color", - "fragColor", NULL - ); - } - shader_bind(sprite_program); - shader_mat44("u_mvp", mvp); - - // set (unit 0) in the uniform texture sampler, and render batch - glActiveTexture(GL_TEXTURE0); - glBlendFunc( alpha_key, alpha_value ); - - for each_map_ptr(*sprites, int,texture_id, batch_t,bt) { - if( bt->dirty ) { - shader_texture_unit("u_texture", *texture_id, 0); - mesh_render(&bt->mesh); - } - } -// map_clear(*sprites); - } -} - -static void sprite_init() { - do_once for(int i = 0; i < countof(sprite_group); ++i) { - map_init(sprite_group[i], less_int, hash_int); - } -} - -static renderstate_t sprite_rs; - -void sprite_flush() { - do_once { - sprite_rs = renderstate(); - sprite_rs.depth_test_enabled = 1; - sprite_rs.blend_enabled = 1; - sprite_rs.cull_face_enabled = 0; - sprite_rs.front_face = GL_CCW; - } - - profile("Sprite.rebuild_time") { - sprite_rebuild_meshes(); - } - profile("Sprite.render_time") { - // setup rendering state - renderstate_apply(&sprite_rs); - - // 3d - mat44 mvp3d; multiply44x2(mvp3d, camera_get_active()->proj, camera_get_active()->view); - // render all additive then translucent groups - sprite_render_meshes_group(&sprite_group[SPRITE_PROJECTED], GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, mvp3d ); - sprite_render_meshes_group(&sprite_group[SPRITE_PROJECTED|SPRITE_CENTERED], GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, mvp3d ); - sprite_render_meshes_group(&sprite_group[SPRITE_PROJECTED|SPRITE_CENTERED|SPRITE_ADDITIVE], GL_SRC_ALPHA, GL_ONE, mvp3d ); - sprite_render_meshes_group(&sprite_group[SPRITE_PROJECTED|SPRITE_ADDITIVE], GL_SRC_ALPHA, GL_ONE, mvp3d ); - - // 2d: (0,0) is center of screen - mat44 mvp2d; - vec3 pos = camera_get_active()->position; - float zoom = absf(pos.z); if(zoom < 0.1f) zoom = 0.1f; zoom = 1.f / (zoom + !zoom); - float zdepth_max = window_height(); // 1; - float l = pos.x - window_width() * zoom / 2; - float r = pos.x + window_width() * zoom / 2; - float b = pos.y + window_height() * zoom / 2; - float t = pos.y - window_height() * zoom / 2; - ortho44(mvp2d, l,r,b,t, -zdepth_max, +zdepth_max); - // render all additive then translucent groups - sprite_render_meshes_group(&sprite_group[0], GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, mvp2d ); - sprite_render_meshes_group(&sprite_group[SPRITE_CENTERED], GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, mvp2d ); - sprite_render_meshes_group(&sprite_group[SPRITE_CENTERED|SPRITE_ADDITIVE], GL_SRC_ALPHA, GL_ONE, mvp2d ); - sprite_render_meshes_group(&sprite_group[SPRITE_ADDITIVE], GL_SRC_ALPHA, GL_ONE, mvp2d ); - - // restore rendering state - glUseProgram(0); - } -} - -// ----------------------------------------------------------------------------- -// tilemaps - -tilemap_t tilemap(const char *map, int blank_chr, int linefeed_chr) { - tilemap_t t = {0}; - t.tint = ~0u; // WHITE - t.blank_chr = blank_chr; - for( ; *map ; ++map ) { - if( map[0] == linefeed_chr ) ++t.rows; - else { - array_push(t.map, map[0]); - ++t.cols; - } - } - return t; -} - -void tilemap_render_ext( tilemap_t m, tileset_t t, float zindex, float xy_zoom[3], float tilt, unsigned tint, bool is_additive ) { - vec3 old_pos = camera_get_active()->position; - sprite_flush(); - camera_get_active()->position = vec3(window_width()/2,window_height()/2,1); - - float scale[2] = {xy_zoom[2], xy_zoom[2]}; - xy_zoom[2] = zindex; - - float offset[2] = {0,0}; - float spritesheet[3] = {0,t.cols,t.rows}; // selected tile index and spritesheet dimensions (cols,rows) - - for( unsigned y = 0, c = 0; y < m.rows; ++y ) { - for( unsigned x = 0; x < m.cols; ++x, ++c ) { - if( m.map[c] != m.blank_chr ) { - spritesheet[0] = m.map[c]; - sprite_sheet(t.tex, spritesheet, xy_zoom, tilt, offset, scale, tint, is_additive ? SPRITE_ADDITIVE : 0); - } - offset[0] += t.tile_w; - } - offset[0] = 0, offset[1] += t.tile_h; - } - - sprite_flush(); - camera_get_active()->position = old_pos; -} - -void tilemap_render( tilemap_t map, tileset_t set ) { - map.position.x += set.tile_w; - map.position.y += set.tile_h; - tilemap_render_ext( map, set, map.zindex, &map.position.x, map.tilt, map.tint, map.is_additive ); -} - -tileset_t tileset(texture_t tex, unsigned tile_w, unsigned tile_h, unsigned cols, unsigned rows) { - tileset_t t = {0}; - t.tex = tex; - t.cols = cols, t.rows = rows; - t.tile_w = tile_w, t.tile_h = tile_h; - return t; -} - -int ui_tileset( tileset_t t ) { - ui_subimage(va("Selection #%d (%d,%d)", t.selected, t.selected % t.cols, t.selected / t.cols), t.tex.id, t.tex.w, t.tex.h, (t.selected % t.cols) * t.tile_w, (t.selected / t.cols) * t.tile_h, t.tile_w, t.tile_h); - int choice; - if( (choice = ui_image(0, t.tex.id, t.tex.w,t.tex.h)) ) { - int px = ((choice / 100) / 100.f) * t.tex.w / t.tile_w; - int py = ((choice % 100) / 100.f) * t.tex.h / t.tile_h; - t.selected = px + py * t.cols; - } - // if( (choice = ui_buttons(3, "load", "save", "clear")) ) {} - return t.selected; -} - -// ----------------------------------------------------------------------------- -// tiled - -tiled_t tiled(const char *file_tmx) { - tiled_t zero = {0}, ti = zero; - - // read file and parse json - if( !xml_push(file_tmx) ) return zero; - - // sanity checks - bool supported = !strcmp(xml_string("/map/@orientation"), "orthogonal") && !strcmp(xml_string("/map/@renderorder"), "right-down"); - if( !supported ) return xml_pop(), zero; - - // tileset - const char *file_tsx = xml_string("/map/tileset/@source"); - if( !xml_push(vfs_read(file_tsx)) ) return zero; - const char *set_src = xml_string("/tileset/image/@source"); - int set_w = xml_int("/tileset/@tilewidth"); - int set_h = xml_int("/tileset/@tileheight"); - int set_c = xml_int("/tileset/@columns"); - int set_r = xml_int("/tileset/@tilecount") / set_c; - tileset_t set = tileset(texture(set_src,0), set_w, set_h, set_c, set_r ); - xml_pop(); - - // actual parsing - ti.w = xml_int("/map/@width"); - ti.h = xml_int("/map/@height"); - ti.tilew = xml_int("/map/@tilewidth"); - ti.tileh = xml_int("/map/@tileheight"); - ti.first_gid = xml_int("/map/tileset/@firstgid"); - ti.map_name = STRDUP( xml_string("/map/tileset/@source") ); // @leak - - for(int l = 0, layers = xml_count("/map/layer"); l < layers; ++l ) { - if( strcmp(xml_string("/map/layer[%d]/data/@encoding",l), "base64") || strcmp(xml_string("/map/layer[%d]/data/@compression",l), "zlib") ) { - PRINTF("Warning: layer encoding not supported: '%s' -> layer '%s'\n", file_tmx, *array_back(ti.names)); - continue; - } - - int cols = xml_int("/map/layer[%d]/@width",l); - int rows = xml_int("/map/layer[%d]/@height",l); - - tilemap_t tm = tilemap("", ' ', '\n'); - tm.blank_chr = ~0u; //ti.first_gid - 1; - tm.cols = cols; - tm.rows = rows; - array_resize(tm.map, tm.cols * tm.rows); - memset(tm.map, 0xFF, tm.cols * tm.rows * sizeof(int)); - - for( int c = 0, chunks = xml_count("/map/layer[%d]/data/chunk", l); c <= chunks; ++c ) { - int cw, ch; - int cx, cy; - array(char) b64 = 0; - - if( !chunks ) { // non-infinite mode - b64 = xml_blob("/map/layer[%d]/data/$",l); - cw = tm.cols, ch = tm.rows; - cx = 0, cy = 0; - } else { // infinite mode - b64 = xml_blob("/map/layer[%d]/data/chunk[%d]/$",l,c); - cw = xml_int("/map/layer[%d]/data/chunk[%d]/@width",l,c), ch = xml_int("/map/layer[%d]/data/chunk[%d]/@height",l,c); // 20x20 - cx = xml_int("/map/layer[%d]/data/chunk[%d]/@x",l,c), cy = xml_int("/map/layer[%d]/data/chunk[%d]/@y",l,c); // (-16,-32) - cx = abs(cx), cy = abs(cy); - } - - int outlen = cw * ch * 4; - static __thread int *out = 0; out = (int *)REALLOC( 0, outlen + zexcess(COMPRESS_ZLIB) ); // @leak - if( zdecode( out, outlen, b64, array_count(b64), COMPRESS_ZLIB ) > 0 ) { - for( int y = 0, p = 0; y < ch; ++y ) { - for( int x = 0; x < cw; ++x, ++p ) { - if( out[p] >= ti.first_gid ) { - int offset = (x + cx) + (y + cy) * tm.cols; - if( offset >= 0 && offset < (cw * ch) ) - tm.map[ offset ] = out[ p ] - ti.first_gid; - } - } - } - } - else { - PRINTF("Warning: bad zlib stream: '%s' -> layer #%d -> chunk #%d\n", file_tmx, l, c); - } - - array_free(b64); - } - - array_push(ti.layers, tm); - array_push(ti.names, STRDUP(xml_string("/map/layer[%d]/@name",l))); - array_push(ti.visible, true); - array_push(ti.sets, set); - } - - xml_pop(); - return ti; -} - -void tiled_render(tiled_t tmx, vec3 pos) { - for( unsigned i = 0, end = array_count(tmx.layers); i < end; ++i ) { - tmx.layers[i].position = pos; // add3(camera_get_active()->position, pos); - if( tmx.parallax ) tmx.layers[i].position.x /= (3+i), tmx.layers[i].position.y /= (5+i); - if( tmx.visible[i] ) tilemap_render(tmx.layers[i], tmx.sets[i]); - } -} - -void ui_tiled(tiled_t *t) { - ui_label2("Loaded map", t->map_name ? t->map_name : "(none)"); - ui_label2("Map dimensions", va("%dx%d", t->w, t->h)); - ui_label2("Tile dimensions", va("%dx%d", t->tilew, t->tileh)); - ui_separator(); - ui_bool("Parallax", &t->parallax); - ui_separator(); - ui_label2("Layers", va("%d", array_count(t->layers))); - for( int i = 0; i < array_count(t->layers); ++i ) { - if( ui_label2_toolbar(va("- %s (%dx%d)", t->names[i], t->layers[i].cols, t->layers[i].rows ), t->visible[i] ? "\xee\xa3\xb4" : "\xee\xa3\xb5") > 0 ) { // ICON_MD_VISIBILITY / ICON_MD_VISIBILITY_OFF - t->visible[i] ^= true; - } - } - ui_separator(); - if( ui_collapse(va("Sets: %d", array_count(t->layers)), va("%p",t))) { - for( int i = 0; i < array_count(t->layers); ++i ) { - if( ui_collapse(va("%d", i+1), va("%p%d",t,i)) ) { - t->sets[i].selected = ui_tileset( t->sets[i] ); - ui_collapse_end(); - } - } - ui_collapse_end(); - } -} - -// ----------------------------------------------------------------------------- -// spine json loader (wip) -// - rlyeh, public domain -// -// [ref] http://es.esotericsoftware.com/spine-json-format -// -// notable misses: -// - mesh deforms -// - cubic beziers -// - shears -// - bounding boxes - -enum { SPINE_MAX_BONES = 64 }; // max bones - -typedef struct spine_bone_t { - char *name, *parent; - struct spine_bone_t *parent_bone; - - float z; // draw order usually matches bone-id. ie, zindex == bone_id .. root(0) < chest (mid) < finger(top) - - float len; - float x, y, deg; // base - float x2, y2, deg2; // accum / temporaries during bone transform time - float x3, y3, deg3; // values from timeline - - unsigned rect_id; - unsigned atlas_id; -} spine_bone_t; - -typedef struct spine_slot_t { - char *name, *bone, *attach; -} spine_slot_t; - -typedef struct spine_rect_t { - char *name; - float x,y,w,h,sx,sy,deg; -} spine_rect_t; - -typedef struct spine_skin_t { - char *name; - array(spine_rect_t) rects; -} spine_skin_t; - -typedef struct spine_animkey_t { // offline; only during loading - float time, curve[4]; // time is mandatory, curve is optional - union { - char *name; // type: attachment (mode-1) - struct { float deg; }; // type: rotate (mode-2) - struct { float x,y; }; // type: translate (mode-3) - }; -} spine_animkey_t; - -#if 0 -typedef struct spine_pose_t { // runtime; only during playing - unsigned frame; - array(vec4) xform; // entry per bone. translation(x,y),rotation(z),attachment-id(w) -} spine_pose_t; -#endif - -typedef struct spine_anim_t { - char *name; - union { -#if 0 - struct { - unsigned frames; - array(spine_pose_t) poses; - }; -#endif - struct { - array(spine_animkey_t) attach_keys[SPINE_MAX_BONES]; - array(spine_animkey_t) rotate_keys[SPINE_MAX_BONES]; - array(spine_animkey_t) translate_keys[SPINE_MAX_BONES]; - }; - }; -} spine_anim_t; - -typedef struct spine_atlas_t { - char *name; - float x,y,w,h,deg; -} spine_atlas_t; - -typedef struct spine_t { - char *name; - texture_t texture; - unsigned skin; - array(spine_bone_t) bones; - array(spine_slot_t) slots; - array(spine_skin_t) skins; - array(spine_anim_t) anims; - array(spine_atlas_t) atlas; - // anim controller - unsigned inuse; - float time, maxtime; - unsigned debug_atlas_id; -} spine_t; - -// --- - -static -void spine_convert_animkeys_to_animpose(spine_anim_t *input) { - spine_anim_t copy = *input; // @todo - // @leak: attach/rot/tra keys -} - -static -int find_bone_id(spine_t *s, const char *bone_name) { - for( unsigned i = 0, end = array_count(s->bones); i < end; ++i ) - if( !strcmp(s->bones[i].name, bone_name)) return i; - return -1; -} -static -spine_bone_t *find_bone(spine_t *s, const char *bone_name) { - int bone_id = find_bone_id(s, bone_name); - return bone_id >= 0 ? &s->bones[bone_id] : NULL; -} - -void spine_skin(spine_t *p, unsigned skin) { - if( !p->texture.id ) return; - if( skin >= array_count(p->skins) ) return; - - p->skin = skin; - - char *skin_name = va("%s/", p->skins[skin].name); - int header = strlen(skin_name); - - for( int i = 0; i < array_count(p->atlas); ++i) { - if(!strbeg(p->atlas[i].name, skin_name)) continue; - - int bone_id = find_bone_id(p, p->atlas[i].name+header ); - if( bone_id < 0 ) continue; - - p->bones[bone_id].atlas_id = i; - } - - for( int i = 0; i < array_count(p->skins[p->skin].rects); ++i) { - int bone_id = find_bone_id(p, p->skins[p->skin].rects[i].name ); - if( bone_id < 0 ) continue; - - p->bones[bone_id].rect_id = i; - } -} - -static -bool spine_(spine_t *t, const char *file_json, const char *file_atlas, unsigned flags) { - char *atlas = vfs_read(file_atlas); - if(!atlas || !atlas[0]) return false; - - memset(t, 0, sizeof(spine_t)); - - // goblins.png - // size: 1024, 128 - // filter: Linear, Linear - // pma: true - // dagger - // bounds: 2, 18, 26, 108 - // goblin/eyes-closed - // bounds: 2, 4, 34, 12 - spine_atlas_t *sa = 0; - const char *last_id = 0; - const char *texture_name = 0; - const char *texture_filter = 0; - const char *texture_format = 0; - const char *texture_repeat = 0; - float texture_width = 0, texture_height = 0, temp; - for each_substring(atlas, "\r\n", it) { - it += strspn(it, " \t\f\v"); - /**/ if( strbeg(it, "pma:" ) || strbeg(it, "index:") ) {} // ignored - else if( strbeg(it, "size:" ) ) sscanf(it+5, "%f,%f", &texture_width, &texture_height); - else if( strbeg(it, "rotate:" ) ) { float tmp; tmp=sa->w,sa->w=sa->h,sa->h=tmp; sa->deg = 90; } // assert(val==90) - else if( strbeg(it, "repeat:" ) ) texture_repeat = it+7; // temp string - else if( strbeg(it, "filter:" ) ) texture_filter = it+7; // temp string - else if( strbeg(it, "format:" ) ) texture_format = it+7; // temp string - else if( strbeg(it, "bounds:" ) ) { - sscanf(it+7, "%f,%f,%f,%f", &sa->x, &sa->y, &sa->w, &sa->h); - } - else if( !texture_name ) texture_name = va("%s", it); - else { - array_push(t->atlas, ((spine_atlas_t){0}) ); - sa = &t->atlas[array_count(t->atlas) - 1]; - sa->name = STRDUP(it); - } - } - for( int i = 0; i < array_count(t->atlas); ++i ) { - sa = &t->atlas[i]; - sa->x /= texture_width, sa->y /= texture_height; - sa->w /= texture_width, sa->h /= texture_height; - } - - if(!texture_name) return false; - - t->texture = texture(texture_name, TEXTURE_LINEAR); - - json_push(vfs_read(file_json)); // @fixme: json_push_from_file() ? - - array_resize(t->bones, json_count("/bones")); - array_reserve(t->slots, json_count("/slots")); - array_resize(t->skins, json_count("/skins")); - array_resize(t->anims, json_count("/animations")); - - for( int i = 0, end = json_count("/bones"); i < end; ++i ) { - spine_bone_t v = {0}; - v.name = STRDUP(json_string("/bones[%d]/name", i)); - v.parent = STRDUP(json_string("/bones[%d]/parent", i)); - v.x = json_float("/bones[%d]/x", i); - v.y = json_float("/bones[%d]/y", i); - v.z = i; - v.len = json_float("/bones[%d]/length", i); - v.deg = json_float("/bones[%d]/rotation", i); - t->bones[i] = v; - - for( int j = i-1; j > 0; --j ) { - if( strcmp(t->bones[j].name,v.parent) ) continue; - t->bones[i].parent_bone = &t->bones[j]; - break; - } - } - - for( int i = 0, end = json_count("/slots"); i < end; ++i ) { - spine_slot_t v = {0}; - v.name = STRDUP(json_string("/slots[%d]/name", i)); - v.bone = STRDUP(json_string("/slots[%d]/bone", i)); - v.attach = STRDUP(json_string("/slots[%d]/attachment", i)); - - array_push(t->slots, v); - - // slots define draw-order. so, update draw-order/zindex in bone - spine_bone_t *b = find_bone(t, v.name); - if( b ) b->z = i; - } - - for( int i = 0, end = json_count("/skins"); i < end; ++i ) { - spine_skin_t v = {0}; - v.name = STRDUP(json_string("/skins[%d]/name", i)); - - for( int j = 0, jend = json_count("/skins[%d]/attachments",i); j < jend; ++j ) // /skins/default/ - for( int k = 0, kend = json_count("/skins[%d]/attachments[%d]",i,j); k < kend; ++k ) { // /skins/default/left hand item/ - spine_rect_t r = {0}; - r.name = STRDUP(json_key("/skins[%d]/attachments[%d][%d]",i,j,k)); // stringf("%s-%s-%s", json_key("/skins[%d]",i), json_key("/skins[%d][%d]",i,j), json_key("/skins[%d][%d][%d]",i,j,k)); - r.x = json_float("/skins[%d]/attachments[%d][%d]/x",i,j,k); - r.y = json_float("/skins[%d]/attachments[%d][%d]/y",i,j,k); - r.sx= json_float("/skins[%d]/attachments[%d][%d]/scaleX",i,j,k); r.sx += !r.sx; - r.sy= json_float("/skins[%d]/attachments[%d][%d]/scaleY",i,j,k); r.sy += !r.sy; - r.w = json_float("/skins[%d]/attachments[%d][%d]/width",i,j,k); - r.h = json_float("/skins[%d]/attachments[%d][%d]/height",i,j,k); - r.deg = json_float("/skins[%d]/attachments[%d][%d]/rotation",i,j,k); - array_push(v.rects, r); - } - - t->skins[i] = v; - } - -#if 1 - // simplify: - // merge /skins/default into existing /skins/*, then delete /skins/default - if( array_count(t->skins) > 1 ) { - for( int i = 1; i < array_count(t->skins); ++i ) { - for( int j = 0; j < array_count(t->skins[0].rects); ++j ) { - array_push(t->skins[i].rects, t->skins[0].rects[j]); - } - } - // @leak @fixme: FREE(t->skins[0]) - for( int i = 0; i < array_count(t->skins)-1; ++i ) { - t->skins[i] = t->skins[i+1]; - } - array_pop(t->skins); - } -#endif - - for( int i = 0, end = json_count("/animations"); i < end; ++i ) { - int id; - const char *name; - - spine_anim_t v = {0}; - v.name = STRDUP(json_key("/animations[%d]", i)); - - // slots / attachments - - for( int j = 0, jend = json_count("/animations[%d]/slots",i); j < jend; ++j ) - for( int k = 0, kend = json_count("/animations[%d]/slots[%d]",i,j); k < kend; ++k ) // ids - { - int bone_id = find_bone_id(t, json_key("/animations[%d]/bones[%d]",i,j)); - if( bone_id < 0 ) continue; - - for( int l = 0, lend = json_count("/animations[%d]/slots[%d][%d]",i,j,k); l < lend; ++l ) { // channels (rot,tra,attach) - spine_animkey_t key = {0}; - - key.name = STRDUP(json_string("/animations[%d]/slots[%d][%d][%d]/name",i,j,k,l)); - key.time = json_float("/animations[%d]/slots[%d][%d][%d]/time",i,j,k,l); - if( json_count("/animations[%d]/slots[%d][%d][%d]/curve",i,j,k,l) == 4 ) { - key.curve[0] = json_float("/animations[%d]/slots[%d][%d][%d]/curve[0]",i,j,k,l); - key.curve[1] = json_float("/animations[%d]/slots[%d][%d][%d]/curve[1]",i,j,k,l); - key.curve[2] = json_float("/animations[%d]/slots[%d][%d][%d]/curve[2]",i,j,k,l); - key.curve[3] = json_float("/animations[%d]/slots[%d][%d][%d]/curve[3]",i,j,k,l); - } - - // @todo: convert name to id - // for(id = 0; t->bones[id].name && strcmp(t->bones[id].name,key.name); ++id) - // printf("%s vs %s\n", key.name, t->bones[id].name); - - array_push(v.attach_keys[bone_id], key); - } - } - - // bones - - for( int j = 0, jend = json_count("/animations[%d]/bones",i); j < jend; ++j ) // slots or bones - for( int k = 0, kend = json_count("/animations[%d]/bones[%d]",i,j); k < kend; ++k ) { // bone ids - int bone_id = find_bone_id(t, json_key("/animations[%d]/bones[%d]",i,j)); - if( bone_id < 0 ) continue; - - // parse bones - for( int l = 0, lend = json_count("/animations[%d]/bones[%d][%d]",i,j,k); l < lend; ++l ) { // channels (rot,tra,attach) - const char *channel = json_key("/animations[%d]/bones[%d][%d]",i,j,k); - int track = !strcmp(channel, "rotate") ? 1 : !strcmp(channel, "translate") ? 2 : 0; - if( !track ) continue; - - spine_animkey_t key = {0}; - - key.time = json_float("/animations[%d]/bones[%d][%d][%d]/time",i,j,k,l); - if( json_count("/animations[%d]/bones[%d][%d][%d]/curve",i,j,k,l) == 4 ) { - key.curve[0] = json_float("/animations[%d]/bones[%d][%d][%d]/curve[0]",i,j,k,l); - key.curve[1] = json_float("/animations[%d]/bones[%d][%d][%d]/curve[1]",i,j,k,l); - key.curve[2] = json_float("/animations[%d]/bones[%d][%d][%d]/curve[2]",i,j,k,l); - key.curve[3] = json_float("/animations[%d]/bones[%d][%d][%d]/curve[3]",i,j,k,l); - } - - if( track == 1 ) - key.deg = json_float("/animations[%d]/bones[%d][%d][%d]/value",i,j,k,l), // "/angle" - array_push(v.rotate_keys[bone_id], key); - else - key.x = json_float("/animations[%d]/bones[%d][%d][%d]/x",i,j,k,l), - key.y = json_float("/animations[%d]/bones[%d][%d][%d]/y",i,j,k,l), - array_push(v.translate_keys[bone_id], key); - } - } - - t->anims[i] = v; - } - - json_pop(); - - spine_skin(t, 0); - - return true; -} - -spine_t* spine(const char *file_json, const char *file_atlas, unsigned flags) { - spine_t *t = MALLOC(sizeof(spine_t)); - if( !spine_(t, file_json, file_atlas, flags) ) return FREE(t), NULL; - return t; -} - -void spine_render(spine_t *p, vec3 offset, unsigned flags) { - if( !p->texture.id ) return; - if( !flags ) return; - - ddraw_push_2d(); - // if( flags & 2 ) ddraw_line(vec3(0,0,0), vec3(window_width(),window_height(),0)); - // if( flags & 2 ) ddraw_line(vec3(window_width(),0,0), vec3(0,window_height(),0)); - - // int already_computed[SPINE_MAX_BONES] = {0}; // @fixme: optimize: update longest chains first, then remnant branches - - for( int i = 1; i < array_count(p->bones); ++i ) { - spine_bone_t *self = &p->bones[i]; - if( !self->rect_id ) continue; - - int num_bones = 0; - static array(spine_bone_t*) chain = 0; array_resize(chain, 0); - for( spine_bone_t *next = self; next ; next = next->parent_bone, ++num_bones ) { - array_push(chain, next); - } - - vec3 target = {0}, prev = {0}; - for( int j = 0, end = array_count(chain); j < end; ++j ) { // traverse from root(skipped) -> `i` bone direction - int j_opposite = end - 1 - j; - - spine_bone_t *b = chain[j_opposite]; // bone - spine_bone_t *pb = b->parent_bone; // parent bone - - float pb_x2 = 0, pb_y2 = 0, pb_deg2 = 0; - if( pb ) pb_x2 = pb->x2, pb_y2 = pb->y2, pb_deg2 = pb->deg2; - - const float deg2rad = C_PI / 180; - b->x2 = b->x3 + pb_x2 + b->x * cos( -pb_deg2 * deg2rad ) - b->y * sin( -pb_deg2 * deg2rad ); - b->y2 = -b->y3 + pb_y2 - b->y * cos( pb_deg2 * deg2rad ) + b->x * sin( pb_deg2 * deg2rad ); - b->deg2 = -b->deg3 + pb_deg2 - b->deg; - - prev = target; - target = vec3(b->x2,b->y2,b->deg2); - } - - target.z = 0; - target = add3(target, offset); - prev.z = 0; - prev = add3(prev, offset); - - if( flags & 2 ) { - ddraw_point( target ); - ddraw_text( target, -0.25f, self->name ); - ddraw_bone( prev, target ); // from parent to bone - } - if( flags & 1 ) { - spine_atlas_t *a = &p->atlas[self->atlas_id]; - spine_rect_t *r = &p->skins[p->skin].rects[self->rect_id]; - - vec4 rect = ptr4(&a->x); - float zindex = self->z; - float offsx = 0; - float offsy = 0; - float tilt = self->deg2 + (a->deg - r->deg); - unsigned tint = self->atlas_id == p->debug_atlas_id ? 0xFF<<24 | 0xFF : ~0u; - - if( 1 ) { - vec3 dir = vec3(r->x,r->y,0); - dir = rotatez3(dir, self->deg2); - offsx = dir.x * r->sx; - offsy = dir.y * r->sy; - } - - sprite_rect(p->texture, rect, vec4(target.x,target.y,0,zindex), vec4(1,1,offsx,offsy), tilt, tint, 0); - } - } - - ddraw_pop_2d(); - ddraw_flush(); -} - -static -void spine_animate_(spine_t *p, float *time, float *maxtime, float delta) { - if( !p->texture.id ) return; - - if( delta > 1/120.f ) delta = 1/120.f; - if( *time >= *maxtime ) *time = 0; else *time += delta; - - // reset root // needed? - p->bones[0].x2 = 0; - p->bones[0].y2 = 0; - p->bones[0].deg2 = 0; - p->bones[0].x3 = 0; - p->bones[0].y3 = 0; - p->bones[0].deg3 = 0; - - for( int i = 0, end = array_count(p->bones); i < end; ++i) { - // @todo: attach channel - // @todo: per channel: if curve == linear || curve == stepped || array_count(curve) == 4 {...} - for each_array_ptr(p->anims[p->inuse].rotate_keys[i], spine_animkey_t, r) { - double r0 = r->time; - *maxtime = maxf( *maxtime, r0 ); - if( absf(*time - r0) < delta ) { - p->bones[i].deg3 = r->deg; - } - } - for each_array_ptr(p->anims[p->inuse].translate_keys[i], spine_animkey_t, r) { - double r0 = r->time; - *maxtime = maxf( *maxtime, r0 ); - if( absf(*time - r0) < delta ) { - p->bones[i].x3 = r->x; - p->bones[i].y3 = r->y; - } - } - } -} - -void spine_animate(spine_t *p, float delta) { - spine_animate_(p, &p->time, &p->maxtime, delta); -} - -void ui_spine(spine_t *p) { - if( ui_collapse(va("Anims: %d", array_count(p->anims)), va("%p-a", p))) { - for each_array_ptr(p->anims, spine_anim_t, q) { - if(ui_slider2("", &p->time, va("%.2f/%.0f %.2f%%", p->time, p->maxtime, p->time * 100.f))) { - spine_animate(p, 0); - } - - int choice = ui_label2_toolbar(q->name, ICON_MD_PAUSE_CIRCLE " " ICON_MD_PLAY_CIRCLE); - if( choice == 1 ) window_pause( 0 ); // play - if( choice == 2 ) window_pause( 1 ); // pause - - for( int i = 0; i < SPINE_MAX_BONES; ++i ) { - ui_separator(); - ui_label(va("Bone %d: Attachment keys", i)); - for each_array_ptr(q->attach_keys[i], spine_animkey_t, r) { - ui_label(va("%.2f [%.2f %.2f %.2f %.2f] %s", r->time, r->curve[0], r->curve[1], r->curve[2], r->curve[3], r->name)); - } - ui_label(va("Bone %d: Rotate keys", i)); - for each_array_ptr(q->rotate_keys[i], spine_animkey_t, r) { - ui_label(va("%.2f [%.2f %.2f %.2f %.2f] %.2f deg", r->time, r->curve[0], r->curve[1], r->curve[2], r->curve[3], r->deg)); - } - ui_label(va("Bone %d: Translate keys", i)); - for each_array_ptr(q->translate_keys[i], spine_animkey_t, r) { - ui_label(va("%.2f [%.2f %.2f %.2f %.2f] (%.2f,%.2f)", r->time, r->curve[0], r->curve[1], r->curve[2], r->curve[3], r->x, r->y)); - } - } - } - ui_collapse_end(); - } - if( ui_collapse(va("Bones: %d", array_count(p->bones)), va("%p-b", p))) { - for each_array_ptr(p->bones, spine_bone_t, q) - if( ui_collapse(q->name, va("%p-b2", q)) ) { - ui_label2("Parent:", q->parent); - ui_label2("X:", va("%.2f", q->x)); - ui_label2("Y:", va("%.2f", q->y)); - ui_label2("Length:", va("%.2f", q->len)); - ui_label2("Rotation:", va("%.2f", q->deg)); - ui_collapse_end(); - } - ui_collapse_end(); - } - if( ui_collapse(va("Slots: %d", array_count(p->slots)), va("%p-s", p))) { - for each_array_ptr(p->slots, spine_slot_t, q) - if( ui_collapse(q->name, va("%p-s2", q)) ) { - ui_label2("Bone:", q->bone); - ui_label2("Attachment:", q->attach); - ui_collapse_end(); - } - ui_collapse_end(); - } - if( ui_collapse(va("Skins: %d", array_count(p->skins)), va("%p-k", p))) { - for each_array_ptr(p->skins, spine_skin_t, q) - if( ui_collapse(q->name, va("%p-k2", q)) ) { - for each_array_ptr(q->rects, spine_rect_t, r) - if( ui_collapse(r->name, va("%p-k3", r)) ) { - ui_label2("X:", va("%.2f", r->x)); - ui_label2("Y:", va("%.2f", r->y)); - ui_label2("Scale X:", va("%.2f", r->sx)); - ui_label2("Scale Y:", va("%.2f", r->sy)); - ui_label2("Width:", va("%.2f", r->w)); - ui_label2("Height:", va("%.2f", r->h)); - ui_label2("Rotation:", va("%.2f", r->deg)); - ui_collapse_end(); - - spine_bone_t *b = find_bone(p, r->name); - if( b ) { - p->debug_atlas_id = b->atlas_id; - - static float tilt = 0; - if( input(KEY_LCTRL) ) tilt += 60*1/60.f; else tilt = 0; - spine_atlas_t *r = p->atlas + b->atlas_id; - sprite_flush(); - camera_get_active()->position = vec3(0,0,2); - vec4 rect = ptr4(&r->x); float zindex = 0; vec4 scale_offset = vec4(1,1,0,0); - sprite_rect(p->texture, ptr4(&r->x), vec4(0,0,0,zindex), scale_offset, r->deg + tilt, ~0u, 0); - sprite_flush(); - camera_get_active()->position = vec3(+window_width()/3,window_height()/2.25,2); - } - } - ui_collapse_end(); - } - ui_collapse_end(); - } - - if( ui_int("Use skin", &p->skin) ) { - p->skin = clampf(p->skin, 0, array_count(p->skins) - 1); - spine_skin(p, p->skin); - } - - if( p->texture.id ) ui_texture(0, p->texture); -} - -// ---------------------------------------------------------------------------- - -// texture_t texture_createclip(unsigned cx,unsigned cy,unsigned cw,unsigned ch, unsigned tw,unsigned th,unsigned tn,void *pixels, unsigned flags) { -// return texture_create(tw,th,tn,pixels,flags); -// static array(unsigned) clip = 0; -// array_resize(clip, cw*ch*4); -// for( unsigned y = 0; y < ch; ++y ) -// memcpy((char *)clip + (0+(0+y)*cw)*tn, (char*)pixels + (cx+(cy+y)*tw)*tn, cw*tn); -// return texture_create(cw,ch,tn,clip,flags); -// } - -typedef unsigned quark_t; - -#define array_reserve_(arr,x) (array_count(arr) > (x) ? (arr) : array_resize(arr, 1+(x))) - -#define ui_array(label,type,ptr) do { \ - int changed = 0; \ - if( ui_collapse(label, va(#type "%p",ptr)) ) { \ - char label_ex[8]; \ - for( int idx = 0, iend = array_count(*(ptr)); idx < iend; ++idx ) { \ - type* it = *(ptr) + idx; \ - snprintf(label_ex, sizeof(label_ex), "[%d]", idx); \ - changed |= ui_##type(label_ex, it); \ - } \ - ui_collapse_end(); \ - } \ -} while(0) - -int ui_vec2i(const char *label, vec2i *v) { return ui_unsigned2(label, (unsigned*)v); } -int ui_vec3i(const char *label, vec3i *v) { return ui_unsigned3(label, (unsigned*)v); } -int ui_vec2(const char *label, vec2 *v) { return ui_float2(label, (float*)v); } -int ui_vec3(const char *label, vec3 *v) { return ui_float3(label, (float*)v); } -int ui_vec4(const char *label, vec4 *v) { return ui_float4(label, (float*)v); } - -char *trimspace(char *str) { - for( char *s = str; *s; ++s ) - if(*s <= 32) memmove(s, s+1, strlen(s)); - return str; -} - -char *file_parent(const char *f) { // folder/folder/abc - char *p = file_path(f); // folder/folder/ - char *last = strrchr(p, '/'); // ^ - if( !last ) return p; // return parent if no sep - *last = '\0'; // folder/folder - last = strrchr(p, '/'); // ^ - return last ? last + 1 : p; // return parent if no sep -} - -int ui_obj(const char *fmt, obj *o) { - int changed = 0, item = 1; - for each_objmember(o, TYPE,NAME,PTR) { - char *label = va(fmt, NAME); - /**/ if(!strcmp(TYPE,"float")) { if(ui_float(label, PTR)) changed = item; } - else if(!strcmp(TYPE,"int")) { if(ui_int(label, PTR)) changed = item; } - else if(!strcmp(TYPE,"unsigned")) { if(ui_unsigned(label, PTR)) changed = item; } - else if(!strcmp(TYPE,"vec2")) { if(ui_float2(label, PTR)) changed = item; } - else if(!strcmp(TYPE,"vec3")) { if(ui_float3(label, PTR)) changed = item; } - else if(!strcmp(TYPE,"vec4")) { if(ui_float4(label, PTR)) changed = item; } - else if(!strcmp(TYPE,"rgb")) { if(ui_color3(label, PTR)) changed = item; } - else if(!strcmp(TYPE,"rgba")) { if(ui_color4(label, PTR)) changed = item; } - else if(!strcmp(TYPE,"color")) { if(ui_color4f(label, PTR)) changed = item; } - else if(!strcmp(TYPE,"color3f")) { if(ui_color3f(label, PTR)) changed = item; } - else if(!strcmp(TYPE,"color4f")) { if(ui_color4f(label, PTR)) changed = item; } - else if(!strcmp(TYPE,"char*")) { if(ui_string(label, PTR)) changed = item; } - else ui_label2(label, va("(%s)", TYPE)); // INFO instead of (TYPE)? - ++item; - } - return changed; -} - -#define OBJTYPEDEF2(...) OBJTYPEDEF(__VA_ARGS__); AUTORUN - -// ---------------------------------------------------------------------------- -// atlas - -int ui_atlas_frame(atlas_frame_t *f) { - ui_unsigned("delay", &f->delay); - ui_vec4("sheet", &f->sheet); - ui_array("indices", vec3i, &f->indices); - ui_array("coords", vec2, &f->coords); - ui_array("uvs", vec2, &f->uvs); - return 0; -} - -int ui_atlas_slice_frame(atlas_slice_frame_t *f) { - ui_vec4("bounds", &f->bounds); - ui_bool("9-slice", &f->has_9slice); - ui_vec4("core", &f->core); - return 0; -} - -int ui_atlas(atlas_t *a) { - int changed = 0; - ui_texture(NULL, a->tex); - for( int i = 0; i < array_count(a->anims); ++i ) { - if( ui_collapse(quark_string(&a->db, a->anims[i].name), va("%p%d", a, a->anims[i].name) ) ) { - changed = i+1; - for( int j = 0; j < array_count(a->anims[i].frames); ++j ) { - if( ui_collapse(va("[%d]",j), va("%p%d.%d", a, a->anims[i].name,j) ) ) { - ui_unsigned("Frame", &a->anims[i].frames[j]); - ui_atlas_frame(a->frames + a->anims[i].frames[j]); - ui_collapse_end(); - } - } - ui_collapse_end(); - } - } - for( int i = 0; i < array_count(a->slices); ++i ) { - if( ui_collapse(quark_string(&a->db, a->slices[i].name), va("%p%d", a, a->slices[i].name) ) ) { - changed = i+1; - for( int j = 0; j < array_count(a->slices[i].frames); ++j ) { - if( ui_collapse(va("[%d]",j), va("%p%d.%d", a, a->slices[i].name,j) ) ) { - // ui_unsigned("Frame", &a->slices[i].frames[j]); - ui_atlas_slice_frame(a->slice_frames + a->slices[i].frames[j]); - ui_collapse_end(); - } - } - ui_collapse_end(); - } - } - return changed; -} - -void atlas_destroy(atlas_t *a) { - if( a ) { - texture_destroy(&a->tex); - memset(a, 0, sizeof(atlas_t)); - } -} -atlas_t atlas_create(const char *inifile, unsigned flags) { - atlas_t a = {0}; - int padding = 0, border = 0; - - ini_t kv = ini(inifile); - for each_map(kv, char*,k, char*,v ) { - unsigned index = atoi(k); - // printf("entry %s=%s\n", k, v); - /**/ if( strend(k, ".name") ) { - array_reserve_(a.anims, index); - - a.anims[index].name = quark_intern(&a.db, v); - } - else if ( strend(k, ".sl_name") ) { - array_reserve_(a.slices, index); - - a.slices[index].name = quark_intern(&a.db, v); - } - else if ( strend(k, ".sl_frames") ) { - array_reserve_(a.slices, index); - - const char *text = v; - array(char*) frames = strsplit(text, ","); - for( int i = 0; i < array_count(frames); i++ ) { - unsigned frame = atoi(frames[i]); - array_push(a.slices[index].frames, frame); - } - } - else if ( strend(k, ".sl_bounds") ) { - array_reserve_(a.slice_frames, index); - - float x,y,z,w; - sscanf(v, "%f,%f,%f,%f", &x, &y, &z, &w); - - a.slice_frames[index].bounds = vec4(x,y,x+z,y+w); - } - else if ( strend(k, ".sl_9slice") ) { - array_reserve_(a.slice_frames, index); - - a.slice_frames[index].has_9slice = atoi(v); - } - else if ( strend(k, ".sl_core") ) { - array_reserve_(a.slice_frames, index); - - float x,y,z,w; - sscanf(v, "%f,%f,%f,%f", &x, &y, &z, &w); - - a.slice_frames[index].core = vec4(x,y,x+z,y+w); - } - else if ( strend(k, ".sl_pivot") ) { - array_reserve_(a.slice_frames, index); - - float x,y; - sscanf(v, "%f,%f", &x, &y); - - a.slice_frames[index].pivot = vec2(x,y); - } - else if ( strend(k, ".sl_color") ) { - array_reserve_(a.slice_frames, index); - - unsigned color; - sscanf(v, "%u", &color); - - a.slice_frames[index].color = color; - } - else if ( strend(k, ".sl_text") ) { - array_reserve_(a.slice_frames, index); - a.slice_frames[index].text = STRDUP(v); - } - else if( strend(k, ".frames") ) { - array_reserve_(a.anims, index); - - array(char*) pairs = strsplit(v, ","); - for( int i = 0, end = array_count(pairs); i < end; i += 2 ) { - unsigned frame = atoi(pairs[i]); - unsigned delay = atoi(pairs[i+1]); - - array_reserve_(a.frames, frame); - a.frames[frame].delay = delay; - - array_push(a.anims[index].frames, frame); - } - } - else if( strend(k, ".sheet") ) { - array_reserve_(a.frames, index); - - vec4 sheet = atof4(v); //x,y,x2+2,y2+2 -> x,y,w,h (for 2,2 padding) - a.frames[index].sheet = vec4(sheet.x,sheet.y,sheet.z-sheet.x,sheet.w-sheet.y); - } - else if( strend(k, ".indices") ) { - array_reserve_(a.frames, index); - - const char *text = v; - array(char*) tuples = strsplit(text, ","); - for( int i = 0, end = array_count(tuples); i < end; i += 3 ) { - unsigned p1 = atoi(tuples[i]); - unsigned p2 = atoi(tuples[i+1]); - unsigned p3 = atoi(tuples[i+2]); - array_push(a.frames[index].indices, vec3i(p1,p2,p3)); - } - } - else if( strend(k, ".coords") ) { - array_reserve_(a.frames, index); - - const char *text = v; - array(char*) pairs = strsplit(text, ","); - for( int i = 0, end = array_count(pairs); i < end; i += 2 ) { - unsigned x = atoi(pairs[i]); - unsigned y = atoi(pairs[i+1]); - array_push(a.frames[index].coords, vec2(x,y)); - } - } - else if( strend(k, ".uvs") ) { - array_reserve_(a.frames, index); - - const char *text = v; - array(char*) pairs = strsplit(text, ","); - for( int i = 0, end = array_count(pairs); i < end; i += 2 ) { - unsigned u = atoi(pairs[i]); - unsigned v = atoi(pairs[i+1]); - array_push(a.frames[index].uvs, vec2(u,v)); - } - } - else if( strend(k, "padding") ) { - padding = atoi(v); - } - else if( strend(k, "border") ) { - border = atoi(v); - } - else if( strend(k, "file") ) { - a.tex = texture(v, 0); - } - else if( strend(k, "bitmap") ) { - const char *text = v; - array(char) bin = base64_decode(text, strlen(text)); - a.tex = texture_from_mem(bin, array_count(bin), 0); - array_free(bin); - } -#if 0 - else if( strend(k, ".frame") ) { - array_reserve_(a.frames, index); - puts(k), puts(v); - } -#endif - } - - // post-process: normalize uvs and coords into [0..1] ranges - for each_array_ptr(a.frames, atlas_frame_t, f) { - for each_array_ptr(f->uvs, vec2, uv) { - uv->x /= a.tex.w; - uv->y /= a.tex.h; - } - for each_array_ptr(f->coords, vec2, xy) { - xy->x /= a.tex.w; - xy->y /= a.tex.h; - } - // @todo: adjust padding/border - } - for each_array_ptr(a.slice_frames, atlas_slice_frame_t, f) { - f->bounds.x += padding+border; - f->bounds.y += padding+border; - f->bounds.z += padding+border; - f->bounds.w += padding+border; - } -#if 0 - // post-process: specify an anchor for each anim based on 1st frame dims - for each_array_ptr(a.anims, atlas_anim_t, anim) { - atlas_frame_t *first = a.frames + *anim->frames; - for( int i = 0; i < array_count(anim->frames); i += 2) { - atlas_frame_t *ff = a.frames + anim->frames[ i ]; - ff->anchor.x = (ff->sheet.z - first->sheet.z) / 2; - ff->anchor.y = (ff->sheet.w - first->sheet.w) / 2; - } - } -#endif - - return a; -} - -// ---------------------------------------------------------------------------- -// sprite v2 - -void sprite_ctor(sprite_t *s) { - s->tint = WHITE; - s->timer_ms = 100; - s->flipped = 1; - s->sca.x += !s->sca.x; - s->sca.y += !s->sca.y; -} -void sprite_dtor(sprite_t *s) { - memset(s, 0, sizeof(*s)); -} -void sprite_tick(sprite_t *s) { - int right = input(s->gamepad.array[3]) - input(s->gamepad.array[2]); // RIGHT - LEFT - int forward = input(s->gamepad.array[1]) - input(s->gamepad.array[0]); // DOWN - UP - int move = right || forward; - int dt = 16; // window_delta() * 1000; - - unsigned over = (s->timer - dt) > s->timer; - if(!s->paused) s->timer -= dt; - if( over ) { - int len = array_count(s->a->anims[s->play].frames); - unsigned next = (s->frame + 1) % (len + !len); - unsigned eoa = next < s->frame; - s->frame = next; - - atlas_frame_t *f = &s->a->frames[ s->a->anims[s->play].frames[s->frame] ]; - s->timer_ms = f->delay; - s->timer += s->timer_ms; - } - - if( s->play == 0 && move ) sprite_setanim(s, 1); - if( s->play == 1 ) { //< - if(right) s->flip_ = right < 0, sprite_setanim(s, 1); - if(!right && !forward) sprite_setanim(s, 0); - - float speed = s->sca.x*2; - s->pos = add4(s->pos, scale4(norm4(vec4(right,0,forward,0)),speed)); - } -} -void sprite_draw(sprite_t *s) { - atlas_frame_t *f = &s->a->frames[ s->a->anims[s->play].frames[s->frame] ]; - -#if 1 - // @todo { - unsigned sample = s->a->anims[s->play].frames[s->frame]; - sample = 0; - f->anchor.x = (-s->a->frames[sample].sheet.z + f->sheet.z) / 2; - f->anchor.y = (+s->a->frames[sample].sheet.w - f->sheet.w) / 2; - // } -#endif - - // rect(x,y,w,h) is [0..1] normalized, z-index, pos(x,y,scale), rotation (degrees), color (rgba) - vec4 rect = { f->sheet.x / s->a->tex.w, f->sheet.y / s->a->tex.h, f->sheet.z / s->a->tex.w, f->sheet.w / s->a->tex.h }; - sprite_rect(s->a->tex, rect, s->pos, vec4(s->flip_ ^ s->flipped?s->sca.x:-s->sca.x,s->sca.y,f->anchor.x,f->anchor.y), s->tilt, s->tint, 0|SPRITE_PROJECTED); -} -void sprite_edit(sprite_t *s) { - const char *name = obj_name(s); - const char *id = vac("%p", s); - if( s && ui_collapse(name ? name : id, id) ) { - ui_obj("%s", (obj*)s); - - ui_bool("paused", &s->paused); - ui_label(va("frame anim [%d]", s->a->anims[s->play].frames[s->frame])); - - int k = s->play; - if( ui_int("anim", &k) ) { - sprite_setanim(s, k); - } - - int selected = ui_atlas(s->a); - if( selected ) sprite_setanim(s, selected - 1); - - ui_collapse_end(); - } -} - -sprite_t* sprite_new(const char *ase, int bindings[6]) { - sprite_t *s = obj_new(sprite_t, {bindings[0],bindings[1],bindings[2],bindings[3]}, {bindings[4],bindings[5]}); - atlas_t own = atlas_create(ase, 0); - memcpy(s->a = MALLOC(sizeof(atlas_t)), &own, sizeof(atlas_t)); // s->a = &s->own; - return s; -} -void sprite_del(sprite_t *s) { - if( s ) { - if( s->a ) atlas_destroy(s->a), FREE(s->a); // if( s->a == &s->own ) - obj_free(s); - memset(s, 0, sizeof(sprite_t)); - } -} -void sprite_setanim(sprite_t *s, unsigned name) { - if( s->play != name ) { - s->play = name; - s->frame = 0; - - atlas_frame_t *f = &s->a->frames[ s->a->anims[s->play].frames[s->frame] ]; - - s->timer_ms = f->delay; - s->timer = s->timer_ms; - } -} - -AUTORUN { - STRUCT(sprite_t, vec4, pos); - STRUCT(sprite_t, vec2, sca); - STRUCT(sprite_t, float, tilt); - STRUCT(sprite_t, vec4, gamepad); - STRUCT(sprite_t, vec2, fire); - STRUCT(sprite_t, rgba, tint); - STRUCT(sprite_t, unsigned, frame); - STRUCT(sprite_t, unsigned, timer); - STRUCT(sprite_t, unsigned, timer_ms); - STRUCT(sprite_t, unsigned, flipped); - STRUCT(sprite_t, unsigned, play); - EXTEND_T(sprite, ctor,edit,draw,tick); -} +// ---------------------------------------------------------------------------- +// sprites + +typedef struct sprite_static_t { + float px, py, pz; // origin x, y, depth + float ox, oy, cos, sin; // offset x, offset y, cos/sin of rotation degree + float sx, sy; // scale x,y + float cellw, cellh; // dimensions of any cell in spritesheet + + union { + struct { + int frame, ncx, ncy; // frame in a (num cellx, num celly) spritesheet + }; + struct { + float x, y, w, h; // normalized[0..1] within texture bounds + }; + }; + + uint32_t rgba, flags; // vertex color and flags +} sprite_static_t; + +// sprite batching +typedef struct batch_t { array(sprite_static_t) sprites; mesh_t mesh; int dirty; } batch_t; +typedef map(int, batch_t) batch_group_t; // mapkey is anything that forces a flush. texture_id for now, might be texture_id+program_id soon + +// sprite stream +typedef struct sprite_vertex { vec3 pos; vec2 uv; uint32_t rgba; } sprite_vertex; +typedef struct sprite_index { GLuint triangle[3]; } sprite_index; + +#define sprite_vertex(...) C_CAST(sprite_vertex, __VA_ARGS__) +#define sprite_index(...) C_CAST(sprite_index, __VA_ARGS__) + +// sprite impl +static int sprite_count = 0; +static int sprite_program = -1; +static array(sprite_index) sprite_indices = 0; +static array(sprite_vertex) sprite_vertices = 0; + +// center_wh << 2 | additive << 1 | projected << 0 +static batch_group_t sprite_group[8] = {0}; + +// rect(x,y,w,h) is [0..1] normalized, pos(xyz,z-index), scale_offset(sx,sy,offx,offy), rotation (degrees), color (rgba) +void sprite_rect( texture_t t, vec4 rect, vec4 pos, vec4 scale_offset, float tilt_deg, unsigned tint_rgba, unsigned flags) { + float zindex = pos.w; + float scalex = scale_offset.x; + float scaley = scale_offset.y; + float offsetx = scale_offset.z; + float offsety = scale_offset.w; + + // do not queue if either scales or alpha are zero + if( 0 == (scalex * scaley * ((tint_rgba>>24) & 255)) ) return; + + ASSERT( (flags & SPRITE_CENTERED) == 0 ); + if( flags & SPRITE_PROJECTED ) { + tilt_deg += 180, scalex = -scalex; // flip texture Y on mvp3d (same than turn 180º then flip X) + } + + sprite_static_t s = {0}; + + s.px = pos.x, s.py = pos.y, s.pz = pos.z - zindex; + s.sx = scalex, s.sy = scaley; + + s.x = rect.x, s.y = rect.y, s.w = rect.z, s.h = rect.w; + s.cellw = s.w * s.sx * t.w, s.cellh = s.h * s.sy * t.h; + + s.rgba = tint_rgba; + s.flags = flags; + +#if 0 + s.ox = 0/*ox*/ * s.sx; + s.oy = 0/*oy*/ * s.sy; +#else + s.ox += offsetx * scalex; + s.oy += offsety * scaley; +#endif + + if( tilt_deg ) { + tilt_deg = (tilt_deg + 0) * ((float)C_PI / 180); + s.cos = cosf(tilt_deg); + s.sin = sinf(tilt_deg); + } else { + s.cos = 1; + s.sin = 0; + } + + batch_group_t *batches = &sprite_group[ flags & 7 ]; + batch_t *found = map_find_or_add(*batches, t.id, (batch_t){0}); + + array_push(found->sprites, s); +} + +void sprite_sheet( texture_t texture, float spritesheet[3], float position[3], float rotation, float offset[2], float scale[2], unsigned rgba, unsigned flags) { + flags |= SPRITE_CENTERED; + ASSERT( flags & SPRITE_CENTERED ); + + const float px = position[0], py = position[1], pz = position[2]; + const float ox = offset[0], oy = offset[1], sx = scale[0], sy = scale[1]; + const float frame = spritesheet[0], xcells = spritesheet[1], ycells = spritesheet[2]; + + if (frame < 0) return; + if (frame > 0 && frame >= (xcells * ycells)) return; + + // no need to queue if alpha or scale are zero + if( sx && sy && alpha(rgba) ) { + vec3 bak = camera_get_active()->position; + if( flags & SPRITE_RESOLUTION_INDEPENDANT ) { // @todo: optimize me + sprite_flush(); + camera_get_active()->position = vec3(window_width()/2,window_height()/2,1); + } + + sprite_static_t s; + s.px = px; + s.py = py; + s.pz = pz; + s.frame = frame; + s.ncx = xcells ? xcells : 1; + s.ncy = ycells ? ycells : 1; + s.sx = sx; + s.sy = sy; + s.ox = ox * sx; + s.oy = oy * sy; + s.cellw = (texture.x * sx / s.ncx); + s.cellh = (texture.y * sy / s.ncy); + s.rgba = rgba; + s.flags = flags; + s.cos = 1; + s.sin = 0; + if(rotation) { + rotation = (rotation + 0) * ((float)C_PI / 180); + s.cos = cosf(rotation); + s.sin = sinf(rotation); + } + + batch_group_t *batches = &sprite_group[ flags & 7 ]; +#if 0 + batch_t *found = map_find(*batches, texture.id); + if( !found ) found = map_insert(*batches, texture.id, (batch_t){0}); +#else + batch_t *found = map_find_or_add(*batches, texture.id, (batch_t){0}); +#endif + + array_push(found->sprites, s); + + if( flags & SPRITE_RESOLUTION_INDEPENDANT ) { // @todo: optimize me + sprite_flush(); + camera_get_active()->position = bak; + } + } +} + +void sprite( texture_t texture, float position[3], float rotation, unsigned color, unsigned flags) { + float offset[2] = {0,0}, scale[2] = {1,1}, spritesheet[3] = {0,0,0}; + sprite_sheet( texture, spritesheet, position, rotation, offset, scale, color, flags ); +} + +static void sprite_rebuild_meshes() { + sprite_count = 0; + + // w/2,h/2 centered + for( int l = countof(sprite_group) / 2; l < countof(sprite_group); ++l) { + for each_map_ptr(sprite_group[l], int,_, batch_t,bt) { + + bt->dirty = array_count(bt->sprites) ? 1 : 0; + if( !bt->dirty ) continue; + + int index = 0; + array_clear(sprite_indices); + array_clear(sprite_vertices); + + array_foreach_ptr(bt->sprites, sprite_static_t,it ) { + float x0 = it->ox - it->cellw/2, x3 = x0 + it->cellw; + float y0 = it->oy - it->cellh/2, y3 = y0; + float x1 = x0, x2 = x3; + float y1 = y0 + it->cellh, y2 = y1; + + // @todo: move this affine transform into glsl shader + vec3 v0 = { it->px + ( x0 * it->cos - y0 * it->sin ), it->py + ( x0 * it->sin + y0 * it->cos ), it->pz }; + vec3 v1 = { it->px + ( x1 * it->cos - y1 * it->sin ), it->py + ( x1 * it->sin + y1 * it->cos ), it->pz }; + vec3 v2 = { it->px + ( x2 * it->cos - y2 * it->sin ), it->py + ( x2 * it->sin + y2 * it->cos ), it->pz }; + vec3 v3 = { it->px + ( x3 * it->cos - y3 * it->sin ), it->py + ( x3 * it->sin + y3 * it->cos ), it->pz }; + + float cx = (1.0f / it->ncx) - 1e-9f; + float cy = (1.0f / it->ncy) - 1e-9f; + int idx = (int)it->frame; + int px = idx % it->ncx; + int py = idx / it->ncx; + + float ux = px * cx, uy = py * cy; + float vx = ux + cx, vy = uy + cy; + + vec2 uv0 = vec2(ux, uy); + vec2 uv1 = vec2(ux, vy); + vec2 uv2 = vec2(vx, vy); + vec2 uv3 = vec2(vx, uy); + + array_push( sprite_vertices, sprite_vertex(v0, uv0, it->rgba) ); // Vertex 0 (A) + array_push( sprite_vertices, sprite_vertex(v1, uv1, it->rgba) ); // Vertex 1 (B) + array_push( sprite_vertices, sprite_vertex(v2, uv2, it->rgba) ); // Vertex 2 (C) + array_push( sprite_vertices, sprite_vertex(v3, uv3, it->rgba) ); // Vertex 3 (D) + + // A--B A A-B + // quad | | becomes triangle |\ and triangle \| + // D--C D-C C + GLuint A = (index+0), B = (index+1), C = (index+2), D = (index+3); index += 4; + + array_push( sprite_indices, sprite_index(C, D, A) ); // Triangle 1 + array_push( sprite_indices, sprite_index(C, A, B) ); // Triangle 2 + } + + mesh_update(&bt->mesh, "p3 t2 c4B", 0,array_count(sprite_vertices),sprite_vertices, 3*array_count(sprite_indices),sprite_indices, MESH_STATIC); + + // clear elements from queue + sprite_count += array_count(bt->sprites); + array_clear(bt->sprites); + } + } + + // (0,0) centered + for( int l = 0; l < countof(sprite_group) / 2; ++l) { + for each_map_ptr(sprite_group[l], int,_, batch_t,bt) { + + bt->dirty = array_count(bt->sprites) ? 1 : 0; + if( !bt->dirty ) continue; + + int index = 0; + array_clear(sprite_indices); + array_clear(sprite_vertices); + + array_foreach_ptr(bt->sprites, sprite_static_t,it ) { + float x0 = it->ox - it->cellw/2, x3 = x0 + it->cellw; + float y0 = it->oy - it->cellh/2, y3 = y0; + float x1 = x0, x2 = x3; + float y1 = y0 + it->cellh, y2 = y1; + + // @todo: move this affine transform into glsl shader + vec3 v0 = { it->px + ( x0 * it->cos - y0 * it->sin ), it->py + ( x0 * it->sin + y0 * it->cos ), it->pz }; + vec3 v1 = { it->px + ( x1 * it->cos - y1 * it->sin ), it->py + ( x1 * it->sin + y1 * it->cos ), it->pz }; + vec3 v2 = { it->px + ( x2 * it->cos - y2 * it->sin ), it->py + ( x2 * it->sin + y2 * it->cos ), it->pz }; + vec3 v3 = { it->px + ( x3 * it->cos - y3 * it->sin ), it->py + ( x3 * it->sin + y3 * it->cos ), it->pz }; + + float ux = it->x, vx = ux + it->w; + float uy = it->y, vy = uy + it->h; + + vec2 uv0 = vec2(ux, uy); + vec2 uv1 = vec2(ux, vy); + vec2 uv2 = vec2(vx, vy); + vec2 uv3 = vec2(vx, uy); + + array_push( sprite_vertices, sprite_vertex(v0, uv0, it->rgba) ); // Vertex 0 (A) + array_push( sprite_vertices, sprite_vertex(v1, uv1, it->rgba) ); // Vertex 1 (B) + array_push( sprite_vertices, sprite_vertex(v2, uv2, it->rgba) ); // Vertex 2 (C) + array_push( sprite_vertices, sprite_vertex(v3, uv3, it->rgba) ); // Vertex 3 (D) + + // A--B A A-B + // quad | | becomes triangle |\ and triangle \| + // D--C D-C C + GLuint A = (index+0), B = (index+1), C = (index+2), D = (index+3); index += 4; + + array_push( sprite_indices, sprite_index(C, D, A) ); // Triangle 1 + array_push( sprite_indices, sprite_index(C, A, B) ); // Triangle 2 + } + + mesh_update(&bt->mesh, "p3 t2 c4B", 0,array_count(sprite_vertices),sprite_vertices, 3*array_count(sprite_indices),sprite_indices, MESH_STATIC); + + // clear elements from queue + sprite_count += array_count(bt->sprites); + array_clear(bt->sprites); + } + } +} + +static void sprite_render_meshes_group(batch_group_t* sprites, int alpha_key, int alpha_value, float mvp[16]) { + if( map_count(*sprites) > 0 ) { + // setup shader + if( sprite_program < 0 ) { + sprite_program = shader( vfs_read("shaders/vs_324_24_sprite.glsl"), vfs_read("shaders/fs_24_4_sprite.glsl"), + "att_Position,att_TexCoord,att_Color", + "fragColor", NULL + ); + } + shader_bind(sprite_program); + shader_mat44("u_mvp", mvp); + + // set (unit 0) in the uniform texture sampler, and render batch + glActiveTexture(GL_TEXTURE0); + glBlendFunc( alpha_key, alpha_value ); + + for each_map_ptr(*sprites, int,texture_id, batch_t,bt) { + if( bt->dirty ) { + shader_texture_unit("u_texture", *texture_id, 0); + mesh_render(&bt->mesh); + } + } +// map_clear(*sprites); + } +} + +static void sprite_init() { + do_once for(int i = 0; i < countof(sprite_group); ++i) { + map_init(sprite_group[i], less_int, hash_int); + } +} + +static renderstate_t sprite_rs; + +void sprite_flush() { + do_once { + sprite_rs = renderstate(); + sprite_rs.depth_test_enabled = 1; + sprite_rs.blend_enabled = 1; + sprite_rs.cull_face_enabled = 0; + sprite_rs.front_face = GL_CCW; + } + + profile("Sprite.rebuild_time") { + sprite_rebuild_meshes(); + } + profile("Sprite.render_time") { + // setup rendering state + renderstate_apply(&sprite_rs); + + // 3d + mat44 mvp3d; multiply44x2(mvp3d, camera_get_active()->proj, camera_get_active()->view); + // render all additive then translucent groups + sprite_render_meshes_group(&sprite_group[SPRITE_PROJECTED], GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, mvp3d ); + sprite_render_meshes_group(&sprite_group[SPRITE_PROJECTED|SPRITE_CENTERED], GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, mvp3d ); + sprite_render_meshes_group(&sprite_group[SPRITE_PROJECTED|SPRITE_CENTERED|SPRITE_ADDITIVE], GL_SRC_ALPHA, GL_ONE, mvp3d ); + sprite_render_meshes_group(&sprite_group[SPRITE_PROJECTED|SPRITE_ADDITIVE], GL_SRC_ALPHA, GL_ONE, mvp3d ); + + // 2d: (0,0) is center of screen + mat44 mvp2d; + vec3 pos = camera_get_active()->position; + float zoom = absf(pos.z); if(zoom < 0.1f) zoom = 0.1f; zoom = 1.f / (zoom + !zoom); + float zdepth_max = window_height(); // 1; + float l = pos.x - window_width() * zoom / 2; + float r = pos.x + window_width() * zoom / 2; + float b = pos.y + window_height() * zoom / 2; + float t = pos.y - window_height() * zoom / 2; + ortho44(mvp2d, l,r,b,t, -zdepth_max, +zdepth_max); + // render all additive then translucent groups + sprite_render_meshes_group(&sprite_group[0], GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, mvp2d ); + sprite_render_meshes_group(&sprite_group[SPRITE_CENTERED], GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, mvp2d ); + sprite_render_meshes_group(&sprite_group[SPRITE_CENTERED|SPRITE_ADDITIVE], GL_SRC_ALPHA, GL_ONE, mvp2d ); + sprite_render_meshes_group(&sprite_group[SPRITE_ADDITIVE], GL_SRC_ALPHA, GL_ONE, mvp2d ); + + // restore rendering state + glUseProgram(0); + } +} + +// ----------------------------------------------------------------------------- +// tilemaps + +tilemap_t tilemap(const char *map, int blank_chr, int linefeed_chr) { + tilemap_t t = {0}; + t.tint = ~0u; // WHITE + t.blank_chr = blank_chr; + for( ; *map ; ++map ) { + if( map[0] == linefeed_chr ) ++t.rows; + else { + array_push(t.map, map[0]); + ++t.cols; + } + } + return t; +} + +void tilemap_render_ext( tilemap_t m, tileset_t t, float zindex, float xy_zoom[3], float tilt, unsigned tint, bool is_additive ) { + vec3 old_pos = camera_get_active()->position; + sprite_flush(); + camera_get_active()->position = vec3(window_width()/2,window_height()/2,1); + + float scale[2] = {xy_zoom[2], xy_zoom[2]}; + xy_zoom[2] = zindex; + + float offset[2] = {0,0}; + float spritesheet[3] = {0,t.cols,t.rows}; // selected tile index and spritesheet dimensions (cols,rows) + + for( unsigned y = 0, c = 0; y < m.rows; ++y ) { + for( unsigned x = 0; x < m.cols; ++x, ++c ) { + if( m.map[c] != m.blank_chr ) { + spritesheet[0] = m.map[c]; + sprite_sheet(t.tex, spritesheet, xy_zoom, tilt, offset, scale, tint, is_additive ? SPRITE_ADDITIVE : 0); + } + offset[0] += t.tile_w; + } + offset[0] = 0, offset[1] += t.tile_h; + } + + sprite_flush(); + camera_get_active()->position = old_pos; +} + +void tilemap_render( tilemap_t map, tileset_t set ) { + map.position.x += set.tile_w; + map.position.y += set.tile_h; + tilemap_render_ext( map, set, map.zindex, &map.position.x, map.tilt, map.tint, map.is_additive ); +} + +tileset_t tileset(texture_t tex, unsigned tile_w, unsigned tile_h, unsigned cols, unsigned rows) { + tileset_t t = {0}; + t.tex = tex; + t.cols = cols, t.rows = rows; + t.tile_w = tile_w, t.tile_h = tile_h; + return t; +} + +int ui_tileset( tileset_t t ) { + ui_subimage(va("Selection #%d (%d,%d)", t.selected, t.selected % t.cols, t.selected / t.cols), t.tex.id, t.tex.w, t.tex.h, (t.selected % t.cols) * t.tile_w, (t.selected / t.cols) * t.tile_h, t.tile_w, t.tile_h); + int choice; + if( (choice = ui_image(0, t.tex.id, t.tex.w,t.tex.h)) ) { + int px = ((choice / 100) / 100.f) * t.tex.w / t.tile_w; + int py = ((choice % 100) / 100.f) * t.tex.h / t.tile_h; + t.selected = px + py * t.cols; + } + // if( (choice = ui_buttons(3, "load", "save", "clear")) ) {} + return t.selected; +} + +// ----------------------------------------------------------------------------- +// tiled + +tiled_t tiled(const char *file_tmx) { + tiled_t zero = {0}, ti = zero; + + // read file and parse json + if( !xml_push(file_tmx) ) return zero; + + // sanity checks + bool supported = !strcmp(xml_string("/map/@orientation"), "orthogonal") && !strcmp(xml_string("/map/@renderorder"), "right-down"); + if( !supported ) return xml_pop(), zero; + + // tileset + const char *file_tsx = xml_string("/map/tileset/@source"); + if( !xml_push(vfs_read(file_tsx)) ) return zero; + const char *set_src = xml_string("/tileset/image/@source"); + int set_w = xml_int("/tileset/@tilewidth"); + int set_h = xml_int("/tileset/@tileheight"); + int set_c = xml_int("/tileset/@columns"); + int set_r = xml_int("/tileset/@tilecount") / set_c; + tileset_t set = tileset(texture(set_src,0), set_w, set_h, set_c, set_r ); + xml_pop(); + + // actual parsing + ti.w = xml_int("/map/@width"); + ti.h = xml_int("/map/@height"); + ti.tilew = xml_int("/map/@tilewidth"); + ti.tileh = xml_int("/map/@tileheight"); + ti.first_gid = xml_int("/map/tileset/@firstgid"); + ti.map_name = STRDUP( xml_string("/map/tileset/@source") ); // @leak + + for(int l = 0, layers = xml_count("/map/layer"); l < layers; ++l ) { + if( strcmp(xml_string("/map/layer[%d]/data/@encoding",l), "base64") || strcmp(xml_string("/map/layer[%d]/data/@compression",l), "zlib") ) { + PRINTF("Warning: layer encoding not supported: '%s' -> layer '%s'\n", file_tmx, *array_back(ti.names)); + continue; + } + + int cols = xml_int("/map/layer[%d]/@width",l); + int rows = xml_int("/map/layer[%d]/@height",l); + + tilemap_t tm = tilemap("", ' ', '\n'); + tm.blank_chr = ~0u; //ti.first_gid - 1; + tm.cols = cols; + tm.rows = rows; + array_resize(tm.map, tm.cols * tm.rows); + memset(tm.map, 0xFF, tm.cols * tm.rows * sizeof(int)); + + for( int c = 0, chunks = xml_count("/map/layer[%d]/data/chunk", l); c <= chunks; ++c ) { + int cw, ch; + int cx, cy; + array(char) b64 = 0; + + if( !chunks ) { // non-infinite mode + b64 = xml_blob("/map/layer[%d]/data/$",l); + cw = tm.cols, ch = tm.rows; + cx = 0, cy = 0; + } else { // infinite mode + b64 = xml_blob("/map/layer[%d]/data/chunk[%d]/$",l,c); + cw = xml_int("/map/layer[%d]/data/chunk[%d]/@width",l,c), ch = xml_int("/map/layer[%d]/data/chunk[%d]/@height",l,c); // 20x20 + cx = xml_int("/map/layer[%d]/data/chunk[%d]/@x",l,c), cy = xml_int("/map/layer[%d]/data/chunk[%d]/@y",l,c); // (-16,-32) + cx = abs(cx), cy = abs(cy); + } + + int outlen = cw * ch * 4; + static __thread int *out = 0; out = (int *)REALLOC( 0, outlen + zexcess(COMPRESS_ZLIB) ); // @leak + if( zdecode( out, outlen, b64, array_count(b64), COMPRESS_ZLIB ) > 0 ) { + for( int y = 0, p = 0; y < ch; ++y ) { + for( int x = 0; x < cw; ++x, ++p ) { + if( out[p] >= ti.first_gid ) { + int offset = (x + cx) + (y + cy) * tm.cols; + if( offset >= 0 && offset < (cw * ch) ) + tm.map[ offset ] = out[ p ] - ti.first_gid; + } + } + } + } + else { + PRINTF("Warning: bad zlib stream: '%s' -> layer #%d -> chunk #%d\n", file_tmx, l, c); + } + + array_free(b64); + } + + array_push(ti.layers, tm); + array_push(ti.names, STRDUP(xml_string("/map/layer[%d]/@name",l))); + array_push(ti.visible, true); + array_push(ti.sets, set); + } + + xml_pop(); + return ti; +} + +void tiled_render(tiled_t tmx, vec3 pos) { + for( unsigned i = 0, end = array_count(tmx.layers); i < end; ++i ) { + tmx.layers[i].position = pos; // add3(camera_get_active()->position, pos); + if( tmx.parallax ) tmx.layers[i].position.x /= (3+i), tmx.layers[i].position.y /= (5+i); + if( tmx.visible[i] ) tilemap_render(tmx.layers[i], tmx.sets[i]); + } +} + +void ui_tiled(tiled_t *t) { + ui_label2("Loaded map", t->map_name ? t->map_name : "(none)"); + ui_label2("Map dimensions", va("%dx%d", t->w, t->h)); + ui_label2("Tile dimensions", va("%dx%d", t->tilew, t->tileh)); + ui_separator(); + ui_bool("Parallax", &t->parallax); + ui_separator(); + ui_label2("Layers", va("%d", array_count(t->layers))); + for( int i = 0; i < array_count(t->layers); ++i ) { + if( ui_label2_toolbar(va("- %s (%dx%d)", t->names[i], t->layers[i].cols, t->layers[i].rows ), t->visible[i] ? "\xee\xa3\xb4" : "\xee\xa3\xb5") > 0 ) { // ICON_MD_VISIBILITY / ICON_MD_VISIBILITY_OFF + t->visible[i] ^= true; + } + } + ui_separator(); + if( ui_collapse(va("Sets: %d", array_count(t->layers)), va("%p",t))) { + for( int i = 0; i < array_count(t->layers); ++i ) { + if( ui_collapse(va("%d", i+1), va("%p%d",t,i)) ) { + t->sets[i].selected = ui_tileset( t->sets[i] ); + ui_collapse_end(); + } + } + ui_collapse_end(); + } +} + +// ----------------------------------------------------------------------------- +// spine json loader (wip) +// - rlyeh, public domain +// +// [ref] http://es.esotericsoftware.com/spine-json-format +// +// notable misses: +// - mesh deforms +// - cubic beziers +// - shears +// - bounding boxes + +enum { SPINE_MAX_BONES = 64 }; // max bones + +typedef struct spine_bone_t { + char *name, *parent; + struct spine_bone_t *parent_bone; + + float z; // draw order usually matches bone-id. ie, zindex == bone_id .. root(0) < chest (mid) < finger(top) + + float len; + float x, y, deg; // base + float x2, y2, deg2; // accum / temporaries during bone transform time + float x3, y3, deg3; // values from timeline + + unsigned rect_id; + unsigned atlas_id; +} spine_bone_t; + +typedef struct spine_slot_t { + char *name, *bone, *attach; +} spine_slot_t; + +typedef struct spine_rect_t { + char *name; + float x,y,w,h,sx,sy,deg; +} spine_rect_t; + +typedef struct spine_skin_t { + char *name; + array(spine_rect_t) rects; +} spine_skin_t; + +typedef struct spine_animkey_t { // offline; only during loading + float time, curve[4]; // time is mandatory, curve is optional + union { + char *name; // type: attachment (mode-1) + struct { float deg; }; // type: rotate (mode-2) + struct { float x,y; }; // type: translate (mode-3) + }; +} spine_animkey_t; + +#if 0 +typedef struct spine_pose_t { // runtime; only during playing + unsigned frame; + array(vec4) xform; // entry per bone. translation(x,y),rotation(z),attachment-id(w) +} spine_pose_t; +#endif + +typedef struct spine_anim_t { + char *name; + union { +#if 0 + struct { + unsigned frames; + array(spine_pose_t) poses; + }; +#endif + struct { + array(spine_animkey_t) attach_keys[SPINE_MAX_BONES]; + array(spine_animkey_t) rotate_keys[SPINE_MAX_BONES]; + array(spine_animkey_t) translate_keys[SPINE_MAX_BONES]; + }; + }; +} spine_anim_t; + +typedef struct spine_atlas_t { + char *name; + float x,y,w,h,deg; +} spine_atlas_t; + +typedef struct spine_t { + char *name; + texture_t texture; + unsigned skin; + array(spine_bone_t) bones; + array(spine_slot_t) slots; + array(spine_skin_t) skins; + array(spine_anim_t) anims; + array(spine_atlas_t) atlas; + // anim controller + unsigned inuse; + float time, maxtime; + unsigned debug_atlas_id; +} spine_t; + +// --- + +static +void spine_convert_animkeys_to_animpose(spine_anim_t *input) { + spine_anim_t copy = *input; // @todo + // @leak: attach/rot/tra keys +} + +static +int find_bone_id(spine_t *s, const char *bone_name) { + for( unsigned i = 0, end = array_count(s->bones); i < end; ++i ) + if( !strcmp(s->bones[i].name, bone_name)) return i; + return -1; +} +static +spine_bone_t *find_bone(spine_t *s, const char *bone_name) { + int bone_id = find_bone_id(s, bone_name); + return bone_id >= 0 ? &s->bones[bone_id] : NULL; +} + +void spine_skin(spine_t *p, unsigned skin) { + if( !p->texture.id ) return; + if( skin >= array_count(p->skins) ) return; + + p->skin = skin; + + char *skin_name = va("%s/", p->skins[skin].name); + int header = strlen(skin_name); + + for( int i = 0; i < array_count(p->atlas); ++i) { + if(!strbeg(p->atlas[i].name, skin_name)) continue; + + int bone_id = find_bone_id(p, p->atlas[i].name+header ); + if( bone_id < 0 ) continue; + + p->bones[bone_id].atlas_id = i; + } + + for( int i = 0; i < array_count(p->skins[p->skin].rects); ++i) { + int bone_id = find_bone_id(p, p->skins[p->skin].rects[i].name ); + if( bone_id < 0 ) continue; + + p->bones[bone_id].rect_id = i; + } +} + +static +bool spine_(spine_t *t, const char *file_json, const char *file_atlas, unsigned flags) { + char *atlas = vfs_read(file_atlas); + if(!atlas || !atlas[0]) return false; + + memset(t, 0, sizeof(spine_t)); + + // goblins.png + // size: 1024, 128 + // filter: Linear, Linear + // pma: true + // dagger + // bounds: 2, 18, 26, 108 + // goblin/eyes-closed + // bounds: 2, 4, 34, 12 + spine_atlas_t *sa = 0; + const char *last_id = 0; + const char *texture_name = 0; + const char *texture_filter = 0; + const char *texture_format = 0; + const char *texture_repeat = 0; + float texture_width = 0, texture_height = 0, temp; + for each_substring(atlas, "\r\n", it) { + it += strspn(it, " \t\f\v"); + /**/ if( strbeg(it, "pma:" ) || strbeg(it, "index:") ) {} // ignored + else if( strbeg(it, "size:" ) ) sscanf(it+5, "%f,%f", &texture_width, &texture_height); + else if( strbeg(it, "rotate:" ) ) { float tmp; tmp=sa->w,sa->w=sa->h,sa->h=tmp; sa->deg = 90; } // assert(val==90) + else if( strbeg(it, "repeat:" ) ) texture_repeat = it+7; // temp string + else if( strbeg(it, "filter:" ) ) texture_filter = it+7; // temp string + else if( strbeg(it, "format:" ) ) texture_format = it+7; // temp string + else if( strbeg(it, "bounds:" ) ) { + sscanf(it+7, "%f,%f,%f,%f", &sa->x, &sa->y, &sa->w, &sa->h); + } + else if( !texture_name ) texture_name = va("%s", it); + else { + array_push(t->atlas, ((spine_atlas_t){0}) ); + sa = &t->atlas[array_count(t->atlas) - 1]; + sa->name = STRDUP(it); + } + } + for( int i = 0; i < array_count(t->atlas); ++i ) { + sa = &t->atlas[i]; + sa->x /= texture_width, sa->y /= texture_height; + sa->w /= texture_width, sa->h /= texture_height; + } + + if(!texture_name) return false; + + t->texture = texture(texture_name, TEXTURE_LINEAR); + + json_push(vfs_read(file_json)); // @fixme: json_push_from_file() ? + + array_resize(t->bones, json_count("/bones")); + array_reserve(t->slots, json_count("/slots")); + array_resize(t->skins, json_count("/skins")); + array_resize(t->anims, json_count("/animations")); + + for( int i = 0, end = json_count("/bones"); i < end; ++i ) { + spine_bone_t v = {0}; + v.name = STRDUP(json_string("/bones[%d]/name", i)); + v.parent = STRDUP(json_string("/bones[%d]/parent", i)); + v.x = json_float("/bones[%d]/x", i); + v.y = json_float("/bones[%d]/y", i); + v.z = i; + v.len = json_float("/bones[%d]/length", i); + v.deg = json_float("/bones[%d]/rotation", i); + t->bones[i] = v; + + for( int j = i-1; j > 0; --j ) { + if( strcmp(t->bones[j].name,v.parent) ) continue; + t->bones[i].parent_bone = &t->bones[j]; + break; + } + } + + for( int i = 0, end = json_count("/slots"); i < end; ++i ) { + spine_slot_t v = {0}; + v.name = STRDUP(json_string("/slots[%d]/name", i)); + v.bone = STRDUP(json_string("/slots[%d]/bone", i)); + v.attach = STRDUP(json_string("/slots[%d]/attachment", i)); + + array_push(t->slots, v); + + // slots define draw-order. so, update draw-order/zindex in bone + spine_bone_t *b = find_bone(t, v.name); + if( b ) b->z = i; + } + + for( int i = 0, end = json_count("/skins"); i < end; ++i ) { + spine_skin_t v = {0}; + v.name = STRDUP(json_string("/skins[%d]/name", i)); + + for( int j = 0, jend = json_count("/skins[%d]/attachments",i); j < jend; ++j ) // /skins/default/ + for( int k = 0, kend = json_count("/skins[%d]/attachments[%d]",i,j); k < kend; ++k ) { // /skins/default/left hand item/ + spine_rect_t r = {0}; + r.name = STRDUP(json_key("/skins[%d]/attachments[%d][%d]",i,j,k)); // stringf("%s-%s-%s", json_key("/skins[%d]",i), json_key("/skins[%d][%d]",i,j), json_key("/skins[%d][%d][%d]",i,j,k)); + r.x = json_float("/skins[%d]/attachments[%d][%d]/x",i,j,k); + r.y = json_float("/skins[%d]/attachments[%d][%d]/y",i,j,k); + r.sx= json_float("/skins[%d]/attachments[%d][%d]/scaleX",i,j,k); r.sx += !r.sx; + r.sy= json_float("/skins[%d]/attachments[%d][%d]/scaleY",i,j,k); r.sy += !r.sy; + r.w = json_float("/skins[%d]/attachments[%d][%d]/width",i,j,k); + r.h = json_float("/skins[%d]/attachments[%d][%d]/height",i,j,k); + r.deg = json_float("/skins[%d]/attachments[%d][%d]/rotation",i,j,k); + array_push(v.rects, r); + } + + t->skins[i] = v; + } + +#if 1 + // simplify: + // merge /skins/default into existing /skins/*, then delete /skins/default + if( array_count(t->skins) > 1 ) { + for( int i = 1; i < array_count(t->skins); ++i ) { + for( int j = 0; j < array_count(t->skins[0].rects); ++j ) { + array_push(t->skins[i].rects, t->skins[0].rects[j]); + } + } + // @leak @fixme: FREE(t->skins[0]) + for( int i = 0; i < array_count(t->skins)-1; ++i ) { + t->skins[i] = t->skins[i+1]; + } + array_pop(t->skins); + } +#endif + + for( int i = 0, end = json_count("/animations"); i < end; ++i ) { + int id; + const char *name; + + spine_anim_t v = {0}; + v.name = STRDUP(json_key("/animations[%d]", i)); + + // slots / attachments + + for( int j = 0, jend = json_count("/animations[%d]/slots",i); j < jend; ++j ) + for( int k = 0, kend = json_count("/animations[%d]/slots[%d]",i,j); k < kend; ++k ) // ids + { + int bone_id = find_bone_id(t, json_key("/animations[%d]/bones[%d]",i,j)); + if( bone_id < 0 ) continue; + + for( int l = 0, lend = json_count("/animations[%d]/slots[%d][%d]",i,j,k); l < lend; ++l ) { // channels (rot,tra,attach) + spine_animkey_t key = {0}; + + key.name = STRDUP(json_string("/animations[%d]/slots[%d][%d][%d]/name",i,j,k,l)); + key.time = json_float("/animations[%d]/slots[%d][%d][%d]/time",i,j,k,l); + if( json_count("/animations[%d]/slots[%d][%d][%d]/curve",i,j,k,l) == 4 ) { + key.curve[0] = json_float("/animations[%d]/slots[%d][%d][%d]/curve[0]",i,j,k,l); + key.curve[1] = json_float("/animations[%d]/slots[%d][%d][%d]/curve[1]",i,j,k,l); + key.curve[2] = json_float("/animations[%d]/slots[%d][%d][%d]/curve[2]",i,j,k,l); + key.curve[3] = json_float("/animations[%d]/slots[%d][%d][%d]/curve[3]",i,j,k,l); + } + + // @todo: convert name to id + // for(id = 0; t->bones[id].name && strcmp(t->bones[id].name,key.name); ++id) + // printf("%s vs %s\n", key.name, t->bones[id].name); + + array_push(v.attach_keys[bone_id], key); + } + } + + // bones + + for( int j = 0, jend = json_count("/animations[%d]/bones",i); j < jend; ++j ) // slots or bones + for( int k = 0, kend = json_count("/animations[%d]/bones[%d]",i,j); k < kend; ++k ) { // bone ids + int bone_id = find_bone_id(t, json_key("/animations[%d]/bones[%d]",i,j)); + if( bone_id < 0 ) continue; + + // parse bones + for( int l = 0, lend = json_count("/animations[%d]/bones[%d][%d]",i,j,k); l < lend; ++l ) { // channels (rot,tra,attach) + const char *channel = json_key("/animations[%d]/bones[%d][%d]",i,j,k); + int track = !strcmp(channel, "rotate") ? 1 : !strcmp(channel, "translate") ? 2 : 0; + if( !track ) continue; + + spine_animkey_t key = {0}; + + key.time = json_float("/animations[%d]/bones[%d][%d][%d]/time",i,j,k,l); + if( json_count("/animations[%d]/bones[%d][%d][%d]/curve",i,j,k,l) == 4 ) { + key.curve[0] = json_float("/animations[%d]/bones[%d][%d][%d]/curve[0]",i,j,k,l); + key.curve[1] = json_float("/animations[%d]/bones[%d][%d][%d]/curve[1]",i,j,k,l); + key.curve[2] = json_float("/animations[%d]/bones[%d][%d][%d]/curve[2]",i,j,k,l); + key.curve[3] = json_float("/animations[%d]/bones[%d][%d][%d]/curve[3]",i,j,k,l); + } + + if( track == 1 ) + key.deg = json_float("/animations[%d]/bones[%d][%d][%d]/value",i,j,k,l), // "/angle" + array_push(v.rotate_keys[bone_id], key); + else + key.x = json_float("/animations[%d]/bones[%d][%d][%d]/x",i,j,k,l), + key.y = json_float("/animations[%d]/bones[%d][%d][%d]/y",i,j,k,l), + array_push(v.translate_keys[bone_id], key); + } + } + + t->anims[i] = v; + } + + json_pop(); + + spine_skin(t, 0); + + return true; +} + +spine_t* spine(const char *file_json, const char *file_atlas, unsigned flags) { + spine_t *t = MALLOC(sizeof(spine_t)); + if( !spine_(t, file_json, file_atlas, flags) ) return FREE(t), NULL; + return t; +} + +void spine_render(spine_t *p, vec3 offset, unsigned flags) { + if( !p->texture.id ) return; + if( !flags ) return; + + ddraw_push_2d(); + // if( flags & 2 ) ddraw_line(vec3(0,0,0), vec3(window_width(),window_height(),0)); + // if( flags & 2 ) ddraw_line(vec3(window_width(),0,0), vec3(0,window_height(),0)); + + // int already_computed[SPINE_MAX_BONES] = {0}; // @fixme: optimize: update longest chains first, then remnant branches + + for( int i = 1; i < array_count(p->bones); ++i ) { + spine_bone_t *self = &p->bones[i]; + if( !self->rect_id ) continue; + + int num_bones = 0; + static array(spine_bone_t*) chain = 0; array_resize(chain, 0); + for( spine_bone_t *next = self; next ; next = next->parent_bone, ++num_bones ) { + array_push(chain, next); + } + + vec3 target = {0}, prev = {0}; + for( int j = 0, end = array_count(chain); j < end; ++j ) { // traverse from root(skipped) -> `i` bone direction + int j_opposite = end - 1 - j; + + spine_bone_t *b = chain[j_opposite]; // bone + spine_bone_t *pb = b->parent_bone; // parent bone + + float pb_x2 = 0, pb_y2 = 0, pb_deg2 = 0; + if( pb ) pb_x2 = pb->x2, pb_y2 = pb->y2, pb_deg2 = pb->deg2; + + const float deg2rad = C_PI / 180; + b->x2 = b->x3 + pb_x2 + b->x * cos( -pb_deg2 * deg2rad ) - b->y * sin( -pb_deg2 * deg2rad ); + b->y2 = -b->y3 + pb_y2 - b->y * cos( pb_deg2 * deg2rad ) + b->x * sin( pb_deg2 * deg2rad ); + b->deg2 = -b->deg3 + pb_deg2 - b->deg; + + prev = target; + target = vec3(b->x2,b->y2,b->deg2); + } + + target.z = 0; + target = add3(target, offset); + prev.z = 0; + prev = add3(prev, offset); + + if( flags & 2 ) { + ddraw_point( target ); + ddraw_text( target, -0.25f, self->name ); + ddraw_bone( prev, target ); // from parent to bone + } + if( flags & 1 ) { + spine_atlas_t *a = &p->atlas[self->atlas_id]; + spine_rect_t *r = &p->skins[p->skin].rects[self->rect_id]; + + vec4 rect = ptr4(&a->x); + float zindex = self->z; + float offsx = 0; + float offsy = 0; + float tilt = self->deg2 + (a->deg - r->deg); + unsigned tint = self->atlas_id == p->debug_atlas_id ? 0xFF<<24 | 0xFF : ~0u; + + if( 1 ) { + vec3 dir = vec3(r->x,r->y,0); + dir = rotatez3(dir, self->deg2); + offsx = dir.x * r->sx; + offsy = dir.y * r->sy; + } + + sprite_rect(p->texture, rect, vec4(target.x,target.y,0,zindex), vec4(1,1,offsx,offsy), tilt, tint, 0); + } + } + + ddraw_pop_2d(); + ddraw_flush(); +} + +static +void spine_animate_(spine_t *p, float *time, float *maxtime, float delta) { + if( !p->texture.id ) return; + + if( delta > 1/120.f ) delta = 1/120.f; + if( *time >= *maxtime ) *time = 0; else *time += delta; + + // reset root // needed? + p->bones[0].x2 = 0; + p->bones[0].y2 = 0; + p->bones[0].deg2 = 0; + p->bones[0].x3 = 0; + p->bones[0].y3 = 0; + p->bones[0].deg3 = 0; + + for( int i = 0, end = array_count(p->bones); i < end; ++i) { + // @todo: attach channel + // @todo: per channel: if curve == linear || curve == stepped || array_count(curve) == 4 {...} + for each_array_ptr(p->anims[p->inuse].rotate_keys[i], spine_animkey_t, r) { + double r0 = r->time; + *maxtime = maxf( *maxtime, r0 ); + if( absf(*time - r0) < delta ) { + p->bones[i].deg3 = r->deg; + } + } + for each_array_ptr(p->anims[p->inuse].translate_keys[i], spine_animkey_t, r) { + double r0 = r->time; + *maxtime = maxf( *maxtime, r0 ); + if( absf(*time - r0) < delta ) { + p->bones[i].x3 = r->x; + p->bones[i].y3 = r->y; + } + } + } +} + +void spine_animate(spine_t *p, float delta) { + spine_animate_(p, &p->time, &p->maxtime, delta); +} + +void ui_spine(spine_t *p) { + if( ui_collapse(va("Anims: %d", array_count(p->anims)), va("%p-a", p))) { + for each_array_ptr(p->anims, spine_anim_t, q) { + if(ui_slider2("", &p->time, va("%.2f/%.0f %.2f%%", p->time, p->maxtime, p->time * 100.f))) { + spine_animate(p, 0); + } + + int choice = ui_label2_toolbar(q->name, ICON_MD_PAUSE_CIRCLE " " ICON_MD_PLAY_CIRCLE); + if( choice == 1 ) window_pause( 0 ); // play + if( choice == 2 ) window_pause( 1 ); // pause + + for( int i = 0; i < SPINE_MAX_BONES; ++i ) { + ui_separator(); + ui_label(va("Bone %d: Attachment keys", i)); + for each_array_ptr(q->attach_keys[i], spine_animkey_t, r) { + ui_label(va("%.2f [%.2f %.2f %.2f %.2f] %s", r->time, r->curve[0], r->curve[1], r->curve[2], r->curve[3], r->name)); + } + ui_label(va("Bone %d: Rotate keys", i)); + for each_array_ptr(q->rotate_keys[i], spine_animkey_t, r) { + ui_label(va("%.2f [%.2f %.2f %.2f %.2f] %.2f deg", r->time, r->curve[0], r->curve[1], r->curve[2], r->curve[3], r->deg)); + } + ui_label(va("Bone %d: Translate keys", i)); + for each_array_ptr(q->translate_keys[i], spine_animkey_t, r) { + ui_label(va("%.2f [%.2f %.2f %.2f %.2f] (%.2f,%.2f)", r->time, r->curve[0], r->curve[1], r->curve[2], r->curve[3], r->x, r->y)); + } + } + } + ui_collapse_end(); + } + if( ui_collapse(va("Bones: %d", array_count(p->bones)), va("%p-b", p))) { + for each_array_ptr(p->bones, spine_bone_t, q) + if( ui_collapse(q->name, va("%p-b2", q)) ) { + ui_label2("Parent:", q->parent); + ui_label2("X:", va("%.2f", q->x)); + ui_label2("Y:", va("%.2f", q->y)); + ui_label2("Length:", va("%.2f", q->len)); + ui_label2("Rotation:", va("%.2f", q->deg)); + ui_collapse_end(); + } + ui_collapse_end(); + } + if( ui_collapse(va("Slots: %d", array_count(p->slots)), va("%p-s", p))) { + for each_array_ptr(p->slots, spine_slot_t, q) + if( ui_collapse(q->name, va("%p-s2", q)) ) { + ui_label2("Bone:", q->bone); + ui_label2("Attachment:", q->attach); + ui_collapse_end(); + } + ui_collapse_end(); + } + if( ui_collapse(va("Skins: %d", array_count(p->skins)), va("%p-k", p))) { + for each_array_ptr(p->skins, spine_skin_t, q) + if( ui_collapse(q->name, va("%p-k2", q)) ) { + for each_array_ptr(q->rects, spine_rect_t, r) + if( ui_collapse(r->name, va("%p-k3", r)) ) { + ui_label2("X:", va("%.2f", r->x)); + ui_label2("Y:", va("%.2f", r->y)); + ui_label2("Scale X:", va("%.2f", r->sx)); + ui_label2("Scale Y:", va("%.2f", r->sy)); + ui_label2("Width:", va("%.2f", r->w)); + ui_label2("Height:", va("%.2f", r->h)); + ui_label2("Rotation:", va("%.2f", r->deg)); + ui_collapse_end(); + + spine_bone_t *b = find_bone(p, r->name); + if( b ) { + p->debug_atlas_id = b->atlas_id; + + static float tilt = 0; + if( input(KEY_LCTRL) ) tilt += 60*1/60.f; else tilt = 0; + spine_atlas_t *r = p->atlas + b->atlas_id; + sprite_flush(); + camera_get_active()->position = vec3(0,0,2); + vec4 rect = ptr4(&r->x); float zindex = 0; vec4 scale_offset = vec4(1,1,0,0); + sprite_rect(p->texture, ptr4(&r->x), vec4(0,0,0,zindex), scale_offset, r->deg + tilt, ~0u, 0); + sprite_flush(); + camera_get_active()->position = vec3(+window_width()/3,window_height()/2.25,2); + } + } + ui_collapse_end(); + } + ui_collapse_end(); + } + + if( ui_int("Use skin", &p->skin) ) { + p->skin = clampf(p->skin, 0, array_count(p->skins) - 1); + spine_skin(p, p->skin); + } + + if( p->texture.id ) ui_texture(0, p->texture); +} + +// ---------------------------------------------------------------------------- + +// texture_t texture_createclip(unsigned cx,unsigned cy,unsigned cw,unsigned ch, unsigned tw,unsigned th,unsigned tn,void *pixels, unsigned flags) { +// return texture_create(tw,th,tn,pixels,flags); +// static array(unsigned) clip = 0; +// array_resize(clip, cw*ch*4); +// for( unsigned y = 0; y < ch; ++y ) +// memcpy((char *)clip + (0+(0+y)*cw)*tn, (char*)pixels + (cx+(cy+y)*tw)*tn, cw*tn); +// return texture_create(cw,ch,tn,clip,flags); +// } + +typedef unsigned quark_t; + +#define array_reserve_(arr,x) (array_count(arr) > (x) ? (arr) : array_resize(arr, 1+(x))) + +#define ui_array(label,type,ptr) do { \ + int changed = 0; \ + if( ui_collapse(label, va(#type "%p",ptr)) ) { \ + char label_ex[8]; \ + for( int idx = 0, iend = array_count(*(ptr)); idx < iend; ++idx ) { \ + type* it = *(ptr) + idx; \ + snprintf(label_ex, sizeof(label_ex), "[%d]", idx); \ + changed |= ui_##type(label_ex, it); \ + } \ + ui_collapse_end(); \ + } \ +} while(0) + +int ui_vec2i(const char *label, vec2i *v) { return ui_unsigned2(label, (unsigned*)v); } +int ui_vec3i(const char *label, vec3i *v) { return ui_unsigned3(label, (unsigned*)v); } +int ui_vec2(const char *label, vec2 *v) { return ui_float2(label, (float*)v); } +int ui_vec3(const char *label, vec3 *v) { return ui_float3(label, (float*)v); } +int ui_vec4(const char *label, vec4 *v) { return ui_float4(label, (float*)v); } + +char *trimspace(char *str) { + for( char *s = str; *s; ++s ) + if(*s <= 32) memmove(s, s+1, strlen(s)); + return str; +} + +char *file_parent(const char *f) { // folder/folder/abc + char *p = file_path(f); // folder/folder/ + char *last = strrchr(p, '/'); // ^ + if( !last ) return p; // return parent if no sep + *last = '\0'; // folder/folder + last = strrchr(p, '/'); // ^ + return last ? last + 1 : p; // return parent if no sep +} + +int ui_obj(const char *fmt, obj *o) { + int changed = 0, item = 1; + for each_objmember(o, TYPE,NAME,PTR) { + char *label = va(fmt, NAME); + /**/ if(!strcmp(TYPE,"float")) { if(ui_float(label, PTR)) changed = item; } + else if(!strcmp(TYPE,"int")) { if(ui_int(label, PTR)) changed = item; } + else if(!strcmp(TYPE,"unsigned")) { if(ui_unsigned(label, PTR)) changed = item; } + else if(!strcmp(TYPE,"vec2")) { if(ui_float2(label, PTR)) changed = item; } + else if(!strcmp(TYPE,"vec3")) { if(ui_float3(label, PTR)) changed = item; } + else if(!strcmp(TYPE,"vec4")) { if(ui_float4(label, PTR)) changed = item; } + else if(!strcmp(TYPE,"rgb")) { if(ui_color3(label, PTR)) changed = item; } + else if(!strcmp(TYPE,"rgba")) { if(ui_color4(label, PTR)) changed = item; } + else if(!strcmp(TYPE,"color")) { if(ui_color4f(label, PTR)) changed = item; } + else if(!strcmp(TYPE,"color3f")) { if(ui_color3f(label, PTR)) changed = item; } + else if(!strcmp(TYPE,"color4f")) { if(ui_color4f(label, PTR)) changed = item; } + else if(!strcmp(TYPE,"char*")) { if(ui_string(label, PTR)) changed = item; } + else ui_label2(label, va("(%s)", TYPE)); // INFO instead of (TYPE)? + ++item; + } + return changed; +} + +#define OBJTYPEDEF2(...) OBJTYPEDEF(__VA_ARGS__); AUTORUN + +// ---------------------------------------------------------------------------- +// atlas + +int ui_atlas_frame(atlas_frame_t *f) { + ui_unsigned("delay", &f->delay); + ui_vec4("sheet", &f->sheet); + ui_array("indices", vec3i, &f->indices); + ui_array("coords", vec2, &f->coords); + ui_array("uvs", vec2, &f->uvs); + return 0; +} + +int ui_atlas_slice_frame(atlas_slice_frame_t *f) { + ui_vec4("bounds", &f->bounds); + ui_bool("9-slice", &f->has_9slice); + ui_vec4("core", &f->core); + return 0; +} + +int ui_atlas(atlas_t *a) { + int changed = 0; + ui_texture(NULL, a->tex); + for( int i = 0; i < array_count(a->anims); ++i ) { + if( ui_collapse(quark_string(&a->db, a->anims[i].name), va("%p%d", a, a->anims[i].name) ) ) { + changed = i+1; + for( int j = 0; j < array_count(a->anims[i].frames); ++j ) { + if( ui_collapse(va("[%d]",j), va("%p%d.%d", a, a->anims[i].name,j) ) ) { + ui_unsigned("Frame", &a->anims[i].frames[j]); + ui_atlas_frame(a->frames + a->anims[i].frames[j]); + ui_collapse_end(); + } + } + ui_collapse_end(); + } + } + for( int i = 0; i < array_count(a->slices); ++i ) { + if( ui_collapse(quark_string(&a->db, a->slices[i].name), va("%p%d", a, a->slices[i].name) ) ) { + changed = i+1; + for( int j = 0; j < array_count(a->slices[i].frames); ++j ) { + if( ui_collapse(va("[%d]",j), va("%p%d.%d", a, a->slices[i].name,j) ) ) { + // ui_unsigned("Frame", &a->slices[i].frames[j]); + ui_atlas_slice_frame(a->slice_frames + a->slices[i].frames[j]); + ui_collapse_end(); + } + } + ui_collapse_end(); + } + } + return changed; +} + +void atlas_destroy(atlas_t *a) { + if( a ) { + texture_destroy(&a->tex); + memset(a, 0, sizeof(atlas_t)); + } +} +atlas_t atlas_create(const char *inifile, unsigned flags) { + atlas_t a = {0}; + int padding = 0, border = 0; + + ini_t kv = ini(inifile); + for each_map(kv, char*,k, char*,v ) { + unsigned index = atoi(k); + // printf("entry %s=%s\n", k, v); + /**/ if( strend(k, ".name") ) { + array_reserve_(a.anims, index); + + a.anims[index].name = quark_intern(&a.db, v); + } + else if ( strend(k, ".sl_name") ) { + array_reserve_(a.slices, index); + + a.slices[index].name = quark_intern(&a.db, v); + } + else if ( strend(k, ".sl_frames") ) { + array_reserve_(a.slices, index); + + const char *text = v; + array(char*) frames = strsplit(text, ","); + for( int i = 0; i < array_count(frames); i++ ) { + unsigned frame = atoi(frames[i]); + array_push(a.slices[index].frames, frame); + } + } + else if ( strend(k, ".sl_bounds") ) { + array_reserve_(a.slice_frames, index); + + float x,y,z,w; + sscanf(v, "%f,%f,%f,%f", &x, &y, &z, &w); + + a.slice_frames[index].bounds = vec4(x,y,x+z,y+w); + } + else if ( strend(k, ".sl_9slice") ) { + array_reserve_(a.slice_frames, index); + + a.slice_frames[index].has_9slice = atoi(v); + } + else if ( strend(k, ".sl_core") ) { + array_reserve_(a.slice_frames, index); + + float x,y,z,w; + sscanf(v, "%f,%f,%f,%f", &x, &y, &z, &w); + + a.slice_frames[index].core = vec4(x,y,x+z,y+w); + } + else if ( strend(k, ".sl_pivot") ) { + array_reserve_(a.slice_frames, index); + + float x,y; + sscanf(v, "%f,%f", &x, &y); + + a.slice_frames[index].pivot = vec2(x,y); + } + else if ( strend(k, ".sl_color") ) { + array_reserve_(a.slice_frames, index); + + unsigned color; + sscanf(v, "%u", &color); + + a.slice_frames[index].color = color; + } + else if ( strend(k, ".sl_text") ) { + array_reserve_(a.slice_frames, index); + a.slice_frames[index].text = STRDUP(v); + } + else if( strend(k, ".frames") ) { + array_reserve_(a.anims, index); + + array(char*) pairs = strsplit(v, ","); + for( int i = 0, end = array_count(pairs); i < end; i += 2 ) { + unsigned frame = atoi(pairs[i]); + unsigned delay = atoi(pairs[i+1]); + + array_reserve_(a.frames, frame); + a.frames[frame].delay = delay; + + array_push(a.anims[index].frames, frame); + } + } + else if( strend(k, ".sheet") ) { + array_reserve_(a.frames, index); + + vec4 sheet = atof4(v); //x,y,x2+2,y2+2 -> x,y,w,h (for 2,2 padding) + a.frames[index].sheet = vec4(sheet.x,sheet.y,sheet.z-sheet.x,sheet.w-sheet.y); + } + else if( strend(k, ".indices") ) { + array_reserve_(a.frames, index); + + const char *text = v; + array(char*) tuples = strsplit(text, ","); + for( int i = 0, end = array_count(tuples); i < end; i += 3 ) { + unsigned p1 = atoi(tuples[i]); + unsigned p2 = atoi(tuples[i+1]); + unsigned p3 = atoi(tuples[i+2]); + array_push(a.frames[index].indices, vec3i(p1,p2,p3)); + } + } + else if( strend(k, ".coords") ) { + array_reserve_(a.frames, index); + + const char *text = v; + array(char*) pairs = strsplit(text, ","); + for( int i = 0, end = array_count(pairs); i < end; i += 2 ) { + unsigned x = atoi(pairs[i]); + unsigned y = atoi(pairs[i+1]); + array_push(a.frames[index].coords, vec2(x,y)); + } + } + else if( strend(k, ".uvs") ) { + array_reserve_(a.frames, index); + + const char *text = v; + array(char*) pairs = strsplit(text, ","); + for( int i = 0, end = array_count(pairs); i < end; i += 2 ) { + unsigned u = atoi(pairs[i]); + unsigned v = atoi(pairs[i+1]); + array_push(a.frames[index].uvs, vec2(u,v)); + } + } + else if( strend(k, "padding") ) { + padding = atoi(v); + } + else if( strend(k, "border") ) { + border = atoi(v); + } + else if( strend(k, "file") ) { + a.tex = texture(v, 0); + } + else if( strend(k, "bitmap") ) { + const char *text = v; + array(char) bin = base64_decode(text, strlen(text)); + a.tex = texture_from_mem(bin, array_count(bin), 0); + array_free(bin); + } +#if 0 + else if( strend(k, ".frame") ) { + array_reserve_(a.frames, index); + puts(k), puts(v); + } +#endif + } + + // post-process: normalize uvs and coords into [0..1] ranges + for each_array_ptr(a.frames, atlas_frame_t, f) { + for each_array_ptr(f->uvs, vec2, uv) { + uv->x /= a.tex.w; + uv->y /= a.tex.h; + } + for each_array_ptr(f->coords, vec2, xy) { + xy->x /= a.tex.w; + xy->y /= a.tex.h; + } + // @todo: adjust padding/border + } + for each_array_ptr(a.slice_frames, atlas_slice_frame_t, f) { + f->bounds.x += padding+border; + f->bounds.y += padding+border; + f->bounds.z += padding+border; + f->bounds.w += padding+border; + } +#if 0 + // post-process: specify an anchor for each anim based on 1st frame dims + for each_array_ptr(a.anims, atlas_anim_t, anim) { + atlas_frame_t *first = a.frames + *anim->frames; + for( int i = 0; i < array_count(anim->frames); i += 2) { + atlas_frame_t *ff = a.frames + anim->frames[ i ]; + ff->anchor.x = (ff->sheet.z - first->sheet.z) / 2; + ff->anchor.y = (ff->sheet.w - first->sheet.w) / 2; + } + } +#endif + + return a; +} + +// ---------------------------------------------------------------------------- +// sprite v2 + +void sprite_ctor(sprite_t *s) { + s->tint = WHITE; + s->timer_ms = 100; + s->flipped = 1; + s->sca.x += !s->sca.x; + s->sca.y += !s->sca.y; +} +void sprite_dtor(sprite_t *s) { + memset(s, 0, sizeof(*s)); +} +void sprite_tick(sprite_t *s) { + int right = input(s->gamepad.array[3]) - input(s->gamepad.array[2]); // RIGHT - LEFT + int forward = input(s->gamepad.array[1]) - input(s->gamepad.array[0]); // DOWN - UP + int move = right || forward; + int dt = 16; // window_delta() * 1000; + + unsigned over = (s->timer - dt) > s->timer; + if(!s->paused) s->timer -= dt; + if( over ) { + int len = array_count(s->a->anims[s->play].frames); + unsigned next = (s->frame + 1) % (len + !len); + unsigned eoa = next < s->frame; + s->frame = next; + + atlas_frame_t *f = &s->a->frames[ s->a->anims[s->play].frames[s->frame] ]; + s->timer_ms = f->delay; + s->timer += s->timer_ms; + } + + if( s->play == 0 && move ) sprite_setanim(s, 1); + if( s->play == 1 ) { //< + if(right) s->flip_ = right < 0, sprite_setanim(s, 1); + if(!right && !forward) sprite_setanim(s, 0); + + float speed = s->sca.x*2; + s->pos = add4(s->pos, scale4(norm4(vec4(right,0,forward,0)),speed)); + } +} +void sprite_draw(sprite_t *s) { + atlas_frame_t *f = &s->a->frames[ s->a->anims[s->play].frames[s->frame] ]; + +#if 1 + // @todo { + unsigned sample = s->a->anims[s->play].frames[s->frame]; + sample = 0; + f->anchor.x = (-s->a->frames[sample].sheet.z + f->sheet.z) / 2; + f->anchor.y = (+s->a->frames[sample].sheet.w - f->sheet.w) / 2; + // } +#endif + + // rect(x,y,w,h) is [0..1] normalized, z-index, pos(x,y,scale), rotation (degrees), color (rgba) + vec4 rect = { f->sheet.x / s->a->tex.w, f->sheet.y / s->a->tex.h, f->sheet.z / s->a->tex.w, f->sheet.w / s->a->tex.h }; + sprite_rect(s->a->tex, rect, s->pos, vec4(s->flip_ ^ s->flipped?s->sca.x:-s->sca.x,s->sca.y,f->anchor.x,f->anchor.y), s->tilt, s->tint, 0|SPRITE_PROJECTED); +} +void sprite_edit(sprite_t *s) { + const char *name = obj_name(s); + const char *id = vac("%p", s); + if( s && ui_collapse(name ? name : id, id) ) { + ui_obj("%s", (obj*)s); + + ui_bool("paused", &s->paused); + ui_label(va("frame anim [%d]", s->a->anims[s->play].frames[s->frame])); + + int k = s->play; + if( ui_int("anim", &k) ) { + sprite_setanim(s, k); + } + + int selected = ui_atlas(s->a); + if( selected ) sprite_setanim(s, selected - 1); + + ui_collapse_end(); + } +} + +sprite_t* sprite_new(const char *ase, int bindings[6]) { + sprite_t *s = obj_new(sprite_t, {bindings[0],bindings[1],bindings[2],bindings[3]}, {bindings[4],bindings[5]}); + atlas_t own = atlas_create(ase, 0); + memcpy(s->a = MALLOC(sizeof(atlas_t)), &own, sizeof(atlas_t)); // s->a = &s->own; + return s; +} +void sprite_del(sprite_t *s) { + if( s ) { + if( s->a ) atlas_destroy(s->a), FREE(s->a); // if( s->a == &s->own ) + obj_free(s); + memset(s, 0, sizeof(sprite_t)); + } +} +void sprite_setanim(sprite_t *s, unsigned name) { + if( s->play != name ) { + s->play = name; + s->frame = 0; + + atlas_frame_t *f = &s->a->frames[ s->a->anims[s->play].frames[s->frame] ]; + + s->timer_ms = f->delay; + s->timer = s->timer_ms; + } +} + +AUTORUN { + STRUCT(sprite_t, vec4, pos); + STRUCT(sprite_t, vec2, sca); + STRUCT(sprite_t, float, tilt); + STRUCT(sprite_t, vec4, gamepad); + STRUCT(sprite_t, vec2, fire); + STRUCT(sprite_t, rgba, tint); + STRUCT(sprite_t, unsigned, frame); + STRUCT(sprite_t, unsigned, timer); + STRUCT(sprite_t, unsigned, timer_ms); + STRUCT(sprite_t, unsigned, flipped); + STRUCT(sprite_t, unsigned, play); + EXTEND_T(sprite, ctor,edit,draw,tick); +} #line 0 #line 1 "v4k_steam.c" -// ---------------------------------------------------------------------------- -// steam framework -// - rlyeh, public domain -// -// hints: -// - steam must be running in background -// - steamworks dll must be close to executable (may be "steam_api64.dll", "libsteam_api.dylib" or "libsteam_api.so") -// - family mode should be off (achievements not displayed otherwise) -// -// [src] https://steamdb.info/app/480/ -// [src] https://steamdb.info/app/480/stats/ -// [src] https://partner.steamgames.com/doc/ -// [src] dumpbin /exports steam_api64.dll - -#ifndef STEAM_APPID -#define STEAM_APPID 480 -#endif - -#ifndef STEAM_DLL -#define STEAM_DLL ifdef(win32, "steam_api64.dll", "libsteam_api" ifdef(osx, ".dylib", ".so")) -#endif - -#define STEAM_API_DECL(ret,name,args) API ret (*name) args; -#define STEAM_API_DEFN(ret,name,args) ret (*name) args; -#define STEAM_API_LOAD(ret,name,args) name = dll(STEAM_DLL, #name); if(!name) PRINTF("Cannot load `" STEAM_DLL "@%s`\n", #name); - -STEAM_API(STEAM_API_DECL); -STEAM_API(STEAM_API_DEFN); - -struct steam_t { - intptr_t iclient; - intptr_t iapps; - intptr_t ifriends; - intptr_t ihtmlsurface; - intptr_t imatchmaking; - intptr_t imatchmakingservers; - intptr_t inetworking; - intptr_t iremoteplay; - intptr_t iremotestorage; - intptr_t iscreenshots; - intptr_t iuser; - intptr_t iuserstats; - intptr_t iutils; - uint64_t steamid; - - int num_friends; - bool running, overlay; - bool logged, behindnat; - char status[256], username[256], language[32]; -} steam = {0}; - -static -void steam_message_cb(int severity, const char *message) { - /**/ if( severity == 0 ) printf("%s", message); - else if( severity == 1 ) printf("Warning: %s", message); - else printf("Unknown severity %d: %s", severity, message); -} - -bool steam_init(unsigned app_id) { - struct steam_t z = {0}; - steam = z; - - app_id = app_id ? app_id : STEAM_APPID; - - // Steam installed? - #if is(win32) - HKEY hSteamProcess; - if( RegOpenKeyExA(HKEY_CURRENT_USER,"Software\\Valve\\Steam\\ActiveProcess", 0, KEY_READ, &hSteamProcess) ) { - return !strcpy(steam.status, "Err: steam not installed"); - } - RegCloseKey(hSteamProcess); - #endif - - // dll present? - if( !file_exist(STEAM_DLL) ) { - return !strcpy(steam.status, "Err: " STEAM_DLL " not found"); - } - - // Load symbols - STEAM_API(STEAM_API_LOAD); - if( !SteamAPI_Init ) SteamAPI_Init = SteamAPI_InitSafe; - - // Initialize - char *app_id_str = va("%d", app_id); - //if( !file_exist("steam_appid.txt") ) file_write("steam_appid.txt", app_id_str, strlen(app_id_str)); - #if is(win32) - if( !getenv("SteamAppId") ) SetEnvironmentVariableA("SteamAppId", app_id_str); - #endif - - int started = SteamAPI_Init && SteamAPI_Init(); - if( !started ) { - return !strcpy(steam.status, "Err: steam not running"); - } - - if( SteamAPI_RestartAppIfNecessary(app_id) ) - exit(0); // restarting app thru Steam client if needed - - // Create interfaces - steam.iclient = (intptr_t)SteamInternal_CreateInterface("SteamClient020"); - if( !steam.iclient ) { - return !strcpy(steam.status, "Err: incompatible dll"); - } - - HSteamPipe hpipe = SteamAPI_ISteamClient_CreateSteamPipe(steam.iclient); - HSteamUser huser = SteamAPI_ISteamClient_ConnectToGlobalUser(steam.iclient, hpipe); - - steam.iapps = (intptr_t)SteamAPI_ISteamClient_GetISteamApps(steam.iclient, huser, hpipe, "STEAMAPPS_INTERFACE_VERSION008"); - steam.ifriends = (intptr_t)SteamAPI_ISteamClient_GetISteamFriends(steam.iclient, huser, hpipe, "SteamFriends017"); // 015 - steam.ihtmlsurface = (intptr_t)SteamAPI_ISteamClient_GetISteamHTMLSurface(steam.iclient, huser, hpipe, "STEAMHTMLSURFACE_INTERFACE_VERSION_005"); - steam.imatchmaking = (intptr_t)SteamAPI_ISteamClient_GetISteamMatchmaking(steam.iclient, huser, hpipe, "SteamMatchMaking009"); - steam.imatchmakingservers = (intptr_t)SteamAPI_ISteamClient_GetISteamMatchmakingServers(steam.iclient, huser, hpipe, "SteamMatchMakingServers002"); - steam.inetworking = (intptr_t)SteamAPI_ISteamClient_GetISteamNetworking(steam.iclient, huser, hpipe, "SteamNetworking006"); - //steam.iremoteplay = (intptr_t)SteamAPI_ISteamClient_GetISteamRemotePlay(steam.iclient, huser, hpipe, "STEAMREMOTEPLAY_INTERFACE_VERSION001"); - steam.iremotestorage = (intptr_t)SteamAPI_ISteamClient_GetISteamRemoteStorage(steam.iclient, huser, hpipe, "STEAMREMOTESTORAGE_INTERFACE_VERSION014"); - steam.iscreenshots = (intptr_t)SteamAPI_ISteamClient_GetISteamScreenshots(steam.iclient, huser, hpipe, "STEAMSCREENSHOTS_INTERFACE_VERSION003"); - steam.iuser = (intptr_t)SteamAPI_ISteamClient_GetISteamUser(steam.iclient, huser, hpipe, "SteamUser021"); // 019 - steam.iuserstats = (intptr_t)SteamAPI_ISteamClient_GetISteamUserStats(steam.iclient, huser, hpipe, "STEAMUSERSTATS_INTERFACE_VERSION012"); - steam.iutils = (intptr_t)SteamAPI_ISteamClient_GetISteamUtils(steam.iclient, hpipe, "SteamUtils010"); - - SteamAPI_ISteamClient_SetWarningMessageHook(steam.iclient, steam_message_cb); - - // Retrieve some vars - steam.running = SteamAPI_IsSteamRunning(); - steam.steamid = SteamAPI_ISteamUser_GetSteamID(steam.iuser); - steam.logged = SteamAPI_ISteamUser_BLoggedOn(steam.iuser); - steam.behindnat = SteamAPI_ISteamUser_BIsBehindNAT(steam.iuser); - steam.num_friends = SteamAPI_ISteamFriends_GetFriendCount(steam.ifriends, k_EFriendFlagAll); - strncpy(steam.username, SteamAPI_ISteamFriends_GetPersonaName(steam.ifriends), sizeof(steam.username)); - strncpy(steam.language, SteamAPI_ISteamUtils_GetSteamUILanguage(steam.iutils), sizeof(steam.language)); // SteamAPI_ISteamApps_GetCurrentGameLanguage(steam.iapps) - - if(steam.logged) - SteamAPI_ISteamUserStats_RequestCurrentStats(steam.iuserstats); - - ASSERT(steam.iapps); - ASSERT(steam.ifriends); - ASSERT(steam.ihtmlsurface); - ASSERT(steam.imatchmaking); - ASSERT(steam.imatchmakingservers); - ASSERT(steam.inetworking); - // ASSERT(steam.iremoteplay); - ASSERT(steam.iremotestorage); - ASSERT(steam.iscreenshots); - ASSERT(steam.iuser); - ASSERT(steam.iuserstats); - ASSERT(steam.iutils); - - strcpy(steam.status, "Ok"); - return true; -} - -void steam_tick() { - if( steam.iclient ) { - SteamAPI_RunCallbacks(); - steam.overlay = SteamAPI_ISteamUtils_IsOverlayEnabled(steam.iutils); - } -} - -void steam_trophy(const char *trophy_id, bool redeem) { - if( steam.iclient && steam.logged ) { - if( redeem ) - SteamAPI_ISteamUserStats_SetAchievement(steam.iuserstats, trophy_id); - else - SteamAPI_ISteamUserStats_ClearAchievement(steam.iuserstats, trophy_id); - SteamAPI_ISteamUserStats_StoreStats(steam.iuserstats); - } -} - -void steam_screenshot() { - if( steam.iclient ) { - SteamAPI_ISteamScreenshots_TriggerScreenshot(steam.iscreenshots); - } -} - -void steam_destroy() { - if( steam.iclient ) { - steam.iclient = 0; - SteamAPI_Shutdown(); - } -} - -int ui_steam() { - ui_disable(); - - ui_label2("Status", steam.status); - ui_label2("Username", steam.username); - ui_label2("Language", steam.language); - ui_label2("Friends", va("%d", steam.num_friends)); - ui_label2("SteamID", va("%llu", steam.steamid)); - ui_bool("Overlay?", &steam.overlay); - - ui_enable(); - - return 0; -} +// ---------------------------------------------------------------------------- +// steam framework +// - rlyeh, public domain +// +// hints: +// - steam must be running in background +// - steamworks dll must be close to executable (may be "steam_api64.dll", "libsteam_api.dylib" or "libsteam_api.so") +// - family mode should be off (achievements not displayed otherwise) +// +// [src] https://steamdb.info/app/480/ +// [src] https://steamdb.info/app/480/stats/ +// [src] https://partner.steamgames.com/doc/ +// [src] dumpbin /exports steam_api64.dll + +#ifndef STEAM_APPID +#define STEAM_APPID 480 +#endif + +#ifndef STEAM_DLL +#define STEAM_DLL ifdef(win32, "steam_api64.dll", "libsteam_api" ifdef(osx, ".dylib", ".so")) +#endif + +#define STEAM_API_DECL(ret,name,args) API ret (*name) args; +#define STEAM_API_DEFN(ret,name,args) ret (*name) args; +#define STEAM_API_LOAD(ret,name,args) name = dll(STEAM_DLL, #name); if(!name) PRINTF("Cannot load `" STEAM_DLL "@%s`\n", #name); + +STEAM_API(STEAM_API_DECL); +STEAM_API(STEAM_API_DEFN); + +struct steam_t { + intptr_t iclient; + intptr_t iapps; + intptr_t ifriends; + intptr_t ihtmlsurface; + intptr_t imatchmaking; + intptr_t imatchmakingservers; + intptr_t inetworking; + intptr_t iremoteplay; + intptr_t iremotestorage; + intptr_t iscreenshots; + intptr_t iuser; + intptr_t iuserstats; + intptr_t iutils; + uint64_t steamid; + + int num_friends; + bool running, overlay; + bool logged, behindnat; + char status[256], username[256], language[32]; +} steam = {0}; + +static +void steam_message_cb(int severity, const char *message) { + /**/ if( severity == 0 ) printf("%s", message); + else if( severity == 1 ) printf("Warning: %s", message); + else printf("Unknown severity %d: %s", severity, message); +} + +bool steam_init(unsigned app_id) { + struct steam_t z = {0}; + steam = z; + + app_id = app_id ? app_id : STEAM_APPID; + + // Steam installed? + #if is(win32) + HKEY hSteamProcess; + if( RegOpenKeyExA(HKEY_CURRENT_USER,"Software\\Valve\\Steam\\ActiveProcess", 0, KEY_READ, &hSteamProcess) ) { + return !strcpy(steam.status, "Err: steam not installed"); + } + RegCloseKey(hSteamProcess); + #endif + + // dll present? + if( !file_exist(STEAM_DLL) ) { + return !strcpy(steam.status, "Err: " STEAM_DLL " not found"); + } + + // Load symbols + STEAM_API(STEAM_API_LOAD); + if( !SteamAPI_Init ) SteamAPI_Init = SteamAPI_InitSafe; + + // Initialize + char *app_id_str = va("%d", app_id); + //if( !file_exist("steam_appid.txt") ) file_write("steam_appid.txt", app_id_str, strlen(app_id_str)); + #if is(win32) + if( !getenv("SteamAppId") ) SetEnvironmentVariableA("SteamAppId", app_id_str); + #endif + + int started = SteamAPI_Init && SteamAPI_Init(); + if( !started ) { + return !strcpy(steam.status, "Err: steam not running"); + } + + if( SteamAPI_RestartAppIfNecessary(app_id) ) + exit(0); // restarting app thru Steam client if needed + + // Create interfaces + steam.iclient = (intptr_t)SteamInternal_CreateInterface("SteamClient020"); + if( !steam.iclient ) { + return !strcpy(steam.status, "Err: incompatible dll"); + } + + HSteamPipe hpipe = SteamAPI_ISteamClient_CreateSteamPipe(steam.iclient); + HSteamUser huser = SteamAPI_ISteamClient_ConnectToGlobalUser(steam.iclient, hpipe); + + steam.iapps = (intptr_t)SteamAPI_ISteamClient_GetISteamApps(steam.iclient, huser, hpipe, "STEAMAPPS_INTERFACE_VERSION008"); + steam.ifriends = (intptr_t)SteamAPI_ISteamClient_GetISteamFriends(steam.iclient, huser, hpipe, "SteamFriends017"); // 015 + steam.ihtmlsurface = (intptr_t)SteamAPI_ISteamClient_GetISteamHTMLSurface(steam.iclient, huser, hpipe, "STEAMHTMLSURFACE_INTERFACE_VERSION_005"); + steam.imatchmaking = (intptr_t)SteamAPI_ISteamClient_GetISteamMatchmaking(steam.iclient, huser, hpipe, "SteamMatchMaking009"); + steam.imatchmakingservers = (intptr_t)SteamAPI_ISteamClient_GetISteamMatchmakingServers(steam.iclient, huser, hpipe, "SteamMatchMakingServers002"); + steam.inetworking = (intptr_t)SteamAPI_ISteamClient_GetISteamNetworking(steam.iclient, huser, hpipe, "SteamNetworking006"); + //steam.iremoteplay = (intptr_t)SteamAPI_ISteamClient_GetISteamRemotePlay(steam.iclient, huser, hpipe, "STEAMREMOTEPLAY_INTERFACE_VERSION001"); + steam.iremotestorage = (intptr_t)SteamAPI_ISteamClient_GetISteamRemoteStorage(steam.iclient, huser, hpipe, "STEAMREMOTESTORAGE_INTERFACE_VERSION014"); + steam.iscreenshots = (intptr_t)SteamAPI_ISteamClient_GetISteamScreenshots(steam.iclient, huser, hpipe, "STEAMSCREENSHOTS_INTERFACE_VERSION003"); + steam.iuser = (intptr_t)SteamAPI_ISteamClient_GetISteamUser(steam.iclient, huser, hpipe, "SteamUser021"); // 019 + steam.iuserstats = (intptr_t)SteamAPI_ISteamClient_GetISteamUserStats(steam.iclient, huser, hpipe, "STEAMUSERSTATS_INTERFACE_VERSION012"); + steam.iutils = (intptr_t)SteamAPI_ISteamClient_GetISteamUtils(steam.iclient, hpipe, "SteamUtils010"); + + SteamAPI_ISteamClient_SetWarningMessageHook(steam.iclient, steam_message_cb); + + // Retrieve some vars + steam.running = SteamAPI_IsSteamRunning(); + steam.steamid = SteamAPI_ISteamUser_GetSteamID(steam.iuser); + steam.logged = SteamAPI_ISteamUser_BLoggedOn(steam.iuser); + steam.behindnat = SteamAPI_ISteamUser_BIsBehindNAT(steam.iuser); + steam.num_friends = SteamAPI_ISteamFriends_GetFriendCount(steam.ifriends, k_EFriendFlagAll); + strncpy(steam.username, SteamAPI_ISteamFriends_GetPersonaName(steam.ifriends), sizeof(steam.username)); + strncpy(steam.language, SteamAPI_ISteamUtils_GetSteamUILanguage(steam.iutils), sizeof(steam.language)); // SteamAPI_ISteamApps_GetCurrentGameLanguage(steam.iapps) + + if(steam.logged) + SteamAPI_ISteamUserStats_RequestCurrentStats(steam.iuserstats); + + ASSERT(steam.iapps); + ASSERT(steam.ifriends); + ASSERT(steam.ihtmlsurface); + ASSERT(steam.imatchmaking); + ASSERT(steam.imatchmakingservers); + ASSERT(steam.inetworking); + // ASSERT(steam.iremoteplay); + ASSERT(steam.iremotestorage); + ASSERT(steam.iscreenshots); + ASSERT(steam.iuser); + ASSERT(steam.iuserstats); + ASSERT(steam.iutils); + + strcpy(steam.status, "Ok"); + return true; +} + +void steam_tick() { + if( steam.iclient ) { + SteamAPI_RunCallbacks(); + steam.overlay = SteamAPI_ISteamUtils_IsOverlayEnabled(steam.iutils); + } +} + +void steam_trophy(const char *trophy_id, bool redeem) { + if( steam.iclient && steam.logged ) { + if( redeem ) + SteamAPI_ISteamUserStats_SetAchievement(steam.iuserstats, trophy_id); + else + SteamAPI_ISteamUserStats_ClearAchievement(steam.iuserstats, trophy_id); + SteamAPI_ISteamUserStats_StoreStats(steam.iuserstats); + } +} + +void steam_screenshot() { + if( steam.iclient ) { + SteamAPI_ISteamScreenshots_TriggerScreenshot(steam.iscreenshots); + } +} + +void steam_destroy() { + if( steam.iclient ) { + steam.iclient = 0; + SteamAPI_Shutdown(); + } +} + +int ui_steam() { + ui_disable(); + + ui_label2("Status", steam.status); + ui_label2("Username", steam.username); + ui_label2("Language", steam.language); + ui_label2("Friends", va("%d", steam.num_friends)); + ui_label2("SteamID", va("%llu", steam.steamid)); + ui_bool("Overlay?", &steam.overlay); + + ui_enable(); + + return 0; +} #line 0 #line 1 "v4k_system.c" -#if (is(tcc) && is(linux)) || (is(gcc) && !is(mingw)) // || is(clang) -int __argc; char **__argv; -#if !is(ems) -__attribute__((constructor)) void init_argcv(int argc, char **argv) { __argc = argc; __argv = argv; } -#endif -#endif - -void argvadd(const char *arg) { - char **argv = MALLOC( sizeof(char*) * (__argc+1) ); - for( int i = 0; i < __argc; ++i ) { - argv[i] = __argv[i]; - } - argv[__argc] = STRDUP(arg); - __argv = argv; - ++__argc; -} - -const char *app_path() { // @fixme: should return absolute path always. see tcc -g -run - static char buffer[1024] = {0}; - if( buffer[0] ) return buffer; -#if is(win32) - unsigned length = GetModuleFileNameA(NULL, buffer, sizeof(buffer)); // @todo: use GetModuleFileNameW+wchar_t && convert to utf8 instead - char *a = strrchr(buffer, '/'); if(!a) a = buffer + strlen(buffer); - char *b = strrchr(buffer, '\\'); if(!b) b = buffer + strlen(buffer); - char slash = (a < b ? *a : b < a ? *b : '/'); - snprintf(buffer, 1024, "%.*s%c", length - (int)(a < b ? b - a : a - b), buffer, slash); - if( strendi(buffer, "tools\\tcc\\") ) { // fix tcc -g -run case. @fixme: use TOOLS instead - strcat(buffer, "..\\..\\"); - } -#else // #elif is(linux) - char path[32] = {0}; - sprintf(path, "/proc/%d/exe", getpid()); - readlink(path, buffer, sizeof(buffer)); - if(strrchr(buffer,'/')) 1[strrchr(buffer,'/')] = '\0'; -#endif - return buffer; -} - -const char *app_temp() { - static char buffer[256] = {0}; - if( !buffer[0] ) { - snprintf(buffer, 256, "%s", ifdef(win32, getenv("TEMP"), P_tmpdir)); - for( int i = 0; buffer[i]; ++i ) if( buffer[i] == '\\' ) buffer[i] = '/'; - if(buffer[strlen(buffer)-1] != '/') strcat(buffer, "/"); - } - return buffer; -} - -/* - bool exporting_dll = !strcmp(STRINGIZE(API), STRINGIZE(EXPORT)); - bool importing_dll = !strcmp(STRINGIZE(API), STRINGIZE(IMPORT)); - else static_build -*/ - -#ifndef APP_NAME -#define APP_NAME ifdef(ems, "", (__argv ? __argv[0] : "")) -#endif - -const char *app_name() { - static char buffer[256] = {0}; - if( !buffer[0] ) { - char s[256]; - strncpy(s, APP_NAME, 256); - char *a = strrchr(s, '/'); - char *b = strrchr(s, '\\'); - strncpy(buffer, a > b ? a+1 : b > a ? b+1 : s, 256); - if(strendi(buffer, ".exe")) buffer[strlen(buffer) - 4] = 0; - } - return buffer; -} - -const char *app_cmdline() { - static char *cmdline = 0; - if( !cmdline ) { - if( argc() <= 1 ) strcatf(&cmdline, "%s", " "); - for( int i = 1; i < argc(); ++i ) strcatf(&cmdline, " %s", argv(i)); - } - return cmdline+1; -} - -const char *app_cache() { - static char buffer[256] = {0}; - if( !buffer[0] ) { - - #if is(osx) - snprintf(buffer, 256, "~/Library/Caches/%s/", app_name()); // getenv("user.home") - #elif is(win32) // APPDATA for roaming? - snprintf(buffer, 256, "%s\\%s\\", getenv("LOCALAPPDATA"), app_name()); // getenv("LOCALAPPDATA") - #else // linux - snprintf(buffer, 256, "~/.cache/%s/", app_name()); // getenv("user.home") - #endif - - mkdir(buffer, 0777); - - for( int i = 0; buffer[i]; ++i ) if( buffer[i] == '\\' ) buffer[i] = '/'; - } - - return buffer; -} - -const char * app_exec( const char *cmd ) { - static __thread char output[4096+16] = {0}; - char *buf = output + 16; buf[0] = 0; // memset(buf, 0, 4096); - - if( !cmd[0] ) return "0 "; - cmd = file_normalize(cmd); - - int rc = -1; - - // pick the fastest code path per platform -#if is(osx) - for( FILE *fp = popen( cmd, "r" ); fp; rc = pclose(fp), fp = 0) { - // while( fgets(buf, 4096 - 1, fp) ) {} - } - // if( rc != 0 ) { - // char *r = strrchr(buf, '\r'); if(r) *r = 0; - // char *n = strrchr(buf, '\n'); if(n) *n = 0; - // } -#elif is(win32) - STARTUPINFOA si = {0}; si.cb = sizeof(si); - PROCESS_INFORMATION pi = {0}; - - snprintf(output+16, 4096, "cmd /c \"%s\"", cmd); - - int prio = //strstr(cmd, "ffmpeg") || strstr(cmd, "furnace") || strstr(cmd, "ass2iqe") ? - REALTIME_PRIORITY_CLASS; //: 0; - -//prio |= DETACHED_PROCESS; -//si.dwFlags = STARTF_USESTDHANDLES; - - if( CreateProcessA( - NULL, output+16, // cmdline - NULL, - NULL, - FALSE, // FALSE: dont inherit handles - prio /*CREATE_DEFAULT_ERROR_MODE|CREATE_NO_WINDOW*/, // 0|HIGH_PRIORITY_CLASS - NULL, // "", // NULL would inherit env - NULL, // current dir - &si, &pi) ) - { - // Wait for process - DWORD dwExitCode2 = WaitForSingleObject(pi.hProcess, INFINITE); - DWORD dwExitCode; GetExitCodeProcess(pi.hProcess, &dwExitCode); - rc = dwExitCode; - } - else - { - // CreateProcess() failed - rc = GetLastError(); - } -#else - rc = system(cmd); -#endif - - return snprintf(output, 16, "%-15d", rc), buf[-1] = ' ', output; -} - -int app_spawn( const char *cmd ) { - if( !cmd[0] ) return false; - cmd = file_normalize(cmd); - -#if _WIN32 - bool ok = WinExec(va("cmd /c \"%s\"", cmd), SW_HIDE) > 31; -#else - bool ok = system(va("%s &", cmd)) == 0; -#endif - - return ok; -} - -#if is(osx) -#include // backtrace, backtrace_symbols -#include // dladdr, Dl_info -#elif is(gcc) && !is(ems) && !is(mingw) // maybe is(linux) is enough? -#include // backtrace, backtrace_symbols -#elif is(win32) // && !defined __TINYC__ -#include // windows.h alternative -#include -#pragma comment(lib, "DbgHelp") -#pragma comment(lib, "Kernel32") -static int backtrace( void **addr, int maxtraces ) { - static bool init = 0; - do_once SymSetOptions(SYMOPT_UNDNAME | SYMOPT_DEFERRED_LOADS | SYMOPT_INCLUDE_32BIT_MODULES); - do_once init = SymInitialize(GetCurrentProcess(), NULL, TRUE); - if(!init) return 0; // error: cannot initialize DbgHelp.lib - - //typedef USHORT (WINAPI *pFN)(__in ULONG, __in ULONG, __out PVOID*, __out_opt PULONG); // _MSC_VER - typedef USHORT (WINAPI *pFN)(); // TINYC - static pFN rtlCaptureStackBackTrace = 0; - if( !rtlCaptureStackBackTrace ) { - rtlCaptureStackBackTrace = (pFN)GetProcAddress(LoadLibraryA("kernel32.dll"), "RtlCaptureStackBackTrace"); - } - if( !rtlCaptureStackBackTrace ) { - return 0; - } - return rtlCaptureStackBackTrace(1, maxtraces, (PVOID *)addr, (DWORD *) 0); -} -static char **backtrace_symbols(void *const *list,int size) { - HANDLE process = GetCurrentProcess(); - - struct symbol_t { - SYMBOL_INFO info; - TCHAR symbolname[256], terminator; - } si = { {0} }; - si.info.SizeOfStruct = sizeof(SYMBOL_INFO); - si.info.MaxNameLen = sizeof(si.symbolname) / sizeof(TCHAR); // number of chars, not bytes - - IMAGEHLP_LINE l64 = { 0 }; - l64.SizeOfStruct = sizeof(IMAGEHLP_LINE); - - static __thread char **symbols = 0; //[32][64] = {0}; - if( !symbols ) { - symbols = SYS_MEM_REALLOC(0, 128 * sizeof(char*)); - for( int i = 0; i < 128; ++i) symbols[i] = SYS_MEM_REALLOC(0, 128 * sizeof(char)); - } - - if(size > 128) size = 128; - for( int i = 0; i < size; ++i ) { - - char *ptr = symbols[i]; - *ptr = '\0'; - - if (SymFromAddr(process, (DWORD64)(uintptr_t)list[i], 0, &si.info)) { - //char undecorated[1024]; - //UnDecorateSymbolName(si.info.Name, undecorated, sizeof(undecorated)-1, UNDNAME_COMPLETE); - char* undecorated = (char*)si.info.Name; - ptr += snprintf(ptr, 128, "%s", undecorated); - } else { - ptr += snprintf(ptr, 128, "%s", "(?""?)"); - } - - DWORD dw = 0; - if (SymGetLineFromAddr(process, (DWORD64)(uintptr_t)list[i], &dw, &l64)) { - ptr += snprintf(ptr, 128 - (ptr - symbols[i]), " (%s:%u)", l64.FileName, (unsigned)l64.LineNumber); - } - } - - return symbols; -} -#else -static int backtrace(void **heap, int num) { return 0; } -static char **backtrace_symbols(void *const *sym,int num) { return 0; } -#endif - -char *callstack( int traces ) { - static __thread char *output = 0; - if(!output ) output = SYS_MEM_REALLOC( 0, 128 * (64+2) ); - if( output ) output[0] = '\0'; - char *ptr = output; - - enum { skip = 1 }; /* exclude 1 trace from stack (this function) */ - enum { maxtraces = 128 }; - - int inc = 1; - if( traces < 0 ) traces = -traces, inc = -1; - if( traces == 0 ) return ""; - if( traces > maxtraces ) traces = maxtraces; - - void* stacks[maxtraces/* + 1*/]; // = { 0 }; - traces = backtrace( stacks, traces ); - char **symbols = backtrace_symbols( stacks, traces ); // @todo: optimization: map(void*,char*) cache; and retrieve only symbols not in cache - - char demangled[1024] = "??"; - int L = 0, B = inc>0 ? skip - 1 : traces, E = inc>0 ? traces : skip - 1; - for( int i = B; ( i += inc ) != E; ) { -#if is(linux) - #if ENABLE_LINUX_CALLSTACKS - // @fixme: following snippet works if compiled with '-g', albeit terribly slow - // should concat addresses into a multi-address line - - char *binary = symbols[i]; - char *address = strchr( symbols[i], '(' ) + 1; - *strrchr( address, ')') = '\0'; *(address - 1) = '\0'; - - for( FILE *fp = popen(va("addr2line -e %s %s", binary, address), "r" ); fp ; pclose(fp), fp = 0 ) { //addr2line -e binary -f -C address - fgets(demangled, sizeof(demangled), fp); - int len = strlen(demangled); while( len > 0 && demangled[len-1] < 32 ) demangled[--len] = 0; - } - symbols[i] = demangled; - #else - // make it shorter. ie, `0x00558997ccc87e ./a.out(+0x20187e) [0x00558997ccc87e]` - strchr(symbols[i], ')')[1] = '\0'; - #endif -#elif is(osx) - /*struct*/ Dl_info info; - if( dladdr(stacks[i], &info) && info.dli_sname ) { - const char *dmgbuf = info.dli_sname[0] != '_' ? NULL : - ifdef(cpp, __cxa_demangle(info.dli_sname, NULL, 0, NULL), info.dli_sname); - strcpy( demangled, dmgbuf ? dmgbuf : info.dli_sname ); - symbols[i] = demangled; - if( dmgbuf ) free( (void*)dmgbuf ); - } -#endif - ptr += sprintf(ptr, "%03d: %#016llx %s\n", ++L, (unsigned long long)(uintptr_t)stacks[i], symbols[i]); // format gymnastics because %p is not standard when printing pointers - } - -#if is(linux) || is(osx) - if(symbols) free(symbols); -#endif - - return output ? output : ""; -} - -int callstackf( FILE *fp, int traces ) { - char *buf = callstack(traces); - fputs(buf, fp); - return 0; -} - -// trap signals --------------------------------------------------------------- - -const char *trap_name(int signal) { - if(signal == SIGABRT) return "SIGABRT - \"abort\", abnormal termination"; - if(signal == SIGFPE) return "SIGFPE - floating point exception"; - if(signal == SIGILL) return "SIGILL - \"illegal\", invalid instruction"; - if(signal == SIGSEGV) return "SIGSEGV - \"segmentation violation\", invalid memory access"; - if(signal == SIGINT) return "SIGINT - \"interrupt\", interactive attention request sent to the program"; - if(signal == SIGTERM) return "SIGTERM - \"terminate\", termination request sent to the program"; - ifndef(win32, if(signal == SIGBUS) return "SIGBUS"); - ifdef(linux, if(signal == SIGSTKFLT) return "SIGSTKFLT"); - ifndef(win32, if(signal == SIGQUIT) return "SIGQUIT"); - return "??"; -} -void trap_on_ignore(int sgn) { - signal(sgn, trap_on_ignore); -} -void trap_on_quit(int sgn) { - signal(sgn, trap_on_quit); - exit(0); -} -void trap_on_abort(int sgn) { - char *cs = va("Error: unexpected signal %s (%d)\n%s", trap_name(sgn), sgn, callstack(+16)); - fprintf(stderr, "%s\n", cs), alert(cs), breakpoint(); - signal(sgn, trap_on_abort); - exit(-sgn); -} -void trap_on_debug(int sgn) { // @todo: rename to trap_on_choice() and ask the developer what to do next? abort, continue, debug - char *cs = va("Error: unexpected signal %s (%d)\n%s", trap_name(sgn), sgn, callstack(+16)); - fprintf(stderr, "%s\n", cs), alert(cs), breakpoint(); - signal(sgn, trap_on_debug); -} -#if is(win32) -LONG WINAPI trap_on_SEH(PEXCEPTION_POINTERS pExceptionPtrs) { - char *cs = va("Error: unexpected SEH exception\n%s", callstack(+16)); - fprintf(stderr, "%s\n", cs), alert(cs), breakpoint(); - return EXCEPTION_EXECUTE_HANDLER; // Execute default exception handler next -} -#endif -void trap_install(void) { - // expected signals - signal(SIGINT, trap_on_quit); - signal(SIGTERM, trap_on_quit); - ifndef(win32, signal(SIGQUIT, trap_on_quit)); - // unexpected signals - signal(SIGABRT, trap_on_abort); - signal(SIGFPE, trap_on_abort); - signal(SIGILL, trap_on_abort); - signal(SIGSEGV, trap_on_abort); - ifndef(win32, signal(SIGBUS, trap_on_abort)); - ifdef(linux, signal(SIGSTKFLT, trap_on_abort)); - // others - ifdef(win32,SetUnhandledExceptionFilter(trap_on_SEH)); -} - -#ifdef TRAP_DEMO -AUTORUN { - trap_install(); - app_crash(); // app_hang(); -} -#endif - -// cpu ------------------------------------------------------------------------- - -#if is(linux) -#include -#endif - -int app_cores() { -#if is(win32) - DWORD_PTR pm, sm; - if( GetProcessAffinityMask(GetCurrentProcess(), &pm, &sm) ) if( pm ) { - int count = 0; - while( pm ) { - ++count; - pm &= pm - 1; - } - return count; - } - { SYSTEM_INFO si; GetSystemInfo(&si); return (int)si.dwNumberOfProcessors; } -#else // unix - int count = sysconf(_SC_NPROCESSORS_ONLN); - return count > 0 ? count : 1; -#endif -#if 0 -#elif is(linux) - cpu_set_t prevmask, testmask; - CPU_ZERO(&prevmask); - CPU_ZERO(&testmask); - sched_getaffinity(0, sizeof(prevmask), &prevmask); //Get current mask - sched_setaffinity(0, sizeof(testmask), &testmask); //Set zero mask - sched_getaffinity(0, sizeof(testmask), &testmask); //Get mask for all CPUs - sched_setaffinity(0, sizeof(prevmask), &prevmask); //Reset current mask - int num = CPU_COUNT(&testmask); - return (num > 1 ? num : 1); -#elif is(cpp) - return (int)std::thread::hardware_concurrency(); -#elif defined(_OPENMP) - // omp - int cores = 0; - #pragma omp parallel - { - #pragma omp atomic - ++cores; - } - return cores; -#endif -} - -// ----------------------------------------------------------------------------- -// Battery API. Based on code by Rabia Alhaffar (UNLICENSE) -// - rlyeh, public domain. - -#if is(win32) -#include - -int app_battery() { - SYSTEM_POWER_STATUS ibstatus; - - if (GetSystemPowerStatus(&ibstatus) == FALSE) { - return 0; - } - - int level = (ibstatus.BatteryLifePercent != 255) ? ibstatus.BatteryLifePercent : 0; - int charging = (ibstatus.BatteryFlag & 8) > 0; - return charging ? +level : -level; -} - -#elif defined __linux__ // is(linux) -#include -#include -#include -#include -#include - -int app_battery() { - static int battery_status_handle; - static int battery_capacity_handle; - - do_once { - battery_status_handle = open("/sys/class/power_supply/BAT0/status", O_RDONLY); - battery_capacity_handle = open("/sys/class/power_supply/BAT0/capacity", O_RDONLY); - } - - if (battery_status_handle == -1 || battery_capacity_handle == -1) { - return 0; - } - - char buffer[512]; - - // level - lseek(battery_capacity_handle, 0, SEEK_SET); - int readlen = read(battery_capacity_handle, buffer, 511); buffer[readlen < 0 ? 0 : readlen] = '\0'; - int level = atoi(buffer); - - // charging - lseek(battery_status_handle, 0, SEEK_SET); - readlen = read(battery_status_handle, buffer, 511); buffer[readlen < 0 ? 0 : readlen] = '\0'; - int charging = strstr(buffer, "Discharging") ? 0 : 1; - return charging ? +level : -level; -} - -#elif is(osx) -#import -#include -#import -#import - -int app_battery() { - static CFDictionaryRef psrc; - - do_once { - CFTypeRef blob = IOPSCopyPowerSourcesInfo(); - CFArrayRef sources = IOPSCopyPowerSourcesList(blob); - int sourcesCount = CFArrayGetCount(sources); - - if (sourcesCount > 0) { - psrc = IOPSGetPowerSourceDescription(blob, CFArrayGetValueAtIndex(sources, 0)); - } - } - - if(psrc == NULL) return 0; - - int cur_cap = 0; - CFNumberGetValue((CFNumberRef)CFDictionaryGetValue(psrc, CFSTR(kIOPSCurrentCapacityKey)), kCFNumberSInt32Type, &cur_cap); - - int max_cap = 0; - CFNumberGetValue((CFNumberRef)CFDictionaryGetValue(psrc, CFSTR(kIOPSMaxCapacityKey)), kCFNumberSInt32Type, &max_cap); - - int level = (int)(cur_cap * 100.f / max_cap); - int charging = CFDictionaryGetValue(psrc, CFSTR(kIOPSIsChargingKey)) == kCFBooleanTrue; - return charging ? +level : -level; -} - -#else - -int app_battery() { - return 0; -} - -#endif - -// ---------------------------------------------------------------------------- -// argc/v - -static void argc_init() { -#if is(tcc) && is(linux) - do_once { - char buffer[128], arg0[128] = {0}; - for( FILE *fp = fopen("/proc/self/status", "rb"); fp; fclose(fp), fp = 0) { - while( fgets(buffer, 128, fp) ) { - if( strbeg(buffer, "Name:") ) { - sscanf(buffer + 5, "%s", arg0 ); - break; - } - } - } - extern char **environ; - __argv = environ - 2; // last argv, as stack is [argc][argv0][argv1][...][NULL][envp] - while( !strend(*__argv,arg0) ) --__argv; - __argc = *(int*)(__argv-1); - } -#endif -} - -int argc() { - do_once argc_init(); - return __argc; -} -char* argv(int arg) { - do_once argc_init(); - static __thread char empty[1]; - return (unsigned)arg < __argc ? __argv[arg] : (empty[0] = '\0', empty); -} - -// ---------------------------------------------------------------------------- -// options - -int flag(const char *commalist) { - while( commalist[0] ) { - const char *begin = commalist; - while(*commalist != ',' && *commalist != '\0') ++commalist; - const char *end = commalist; - - char token[128]; - snprintf(token, 128, "%.*s", (int)(end - begin), begin); - - for( int i = 1; i < argc(); ++i ) { - char *arg = argv(i); - - if( !strcmpi( arg, token ) ) { // --arg - return 1; - } - } - - commalist = end + !!end[0]; - } - return 0; -} - -const char *option(const char *commalist, const char *defaults) { - while( commalist[0] ) { - const char *begin = commalist; - while(*commalist != ',' && *commalist != '\0') ++commalist; - const char *end = commalist; - - char token[128], tokeneq[128]; - snprintf(token, 128, "%.*s", (int)(end - begin), begin); - snprintf(tokeneq, 128, "%.*s=", (int)(end - begin), begin); - - for( int i = 1; i < argc(); ++i ) { - char *arg = argv(i); - - if( strbegi( arg, tokeneq ) ) { // --arg=value - return argv(i) + strlen(tokeneq); - } - if( !strcmpi( arg, token ) ) { // --arg value - if( (i+1) < argc() ) { - return argv(i+1); - } - } - } - - commalist = end + !!end[0]; - } - return defaults; -} - -int optioni(const char *commalist, int defaults) { - const char *rc = option(commalist, 0); - return rc ? atoi(rc) : defaults; -} -float optionf(const char *commalist, float defaults) { - const char *rc = option(commalist, 0); - return rc ? atof(rc) : defaults; -} - -// ---------------------------------------------------------------------------- -// tty - -void tty_color(unsigned color) { - #if is(win32) - do_once { - DWORD mode = 0; SetConsoleMode(GetStdHandle(-11), (GetConsoleMode(GetStdHandle(-11), &mode), mode|4)); - } - #endif - if( color ) { - // if( color == RED ) alert("break on error message (RED)"), breakpoint(); // debug - unsigned r = (color >> 0) & 255; - unsigned g = (color >> 8) & 255; - unsigned b = (color >> 16) & 255; - // 24-bit console ESC[ … 38;2;;; … m Select RGB foreground color - // 256-color console ESC[38;5;m - // 0x00-0x07: standard colors (as in ESC [ 30..37 m) - // 0x08-0x0F: high intensity colors (as in ESC [ 90..97 m) - // 0x10-0xE7: 6*6*6=216 colors: 16 + 36*r + 6*g + b (0≤r,g,b≤5) - // 0xE8-0xFF: grayscale from black to white in 24 steps - r /= 51, g /= 51, b /= 51; // [0..5] - printf("\033[38;5;%dm", r*36+g*6+b+16); // "\033[0;3%sm", color_code); - } else { - printf("%s", "\x1B[39;49m"); // reset - } -} -void tty_puts(unsigned color, const char *text) { - tty_color(color); puts(text); -} -void tty_init() { - tty_color(0); -} -int tty_cols() { -#if is(win32) - CONSOLE_SCREEN_BUFFER_INFO c; - if( GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &c) ) { - int w = c.srWindow.Right-c.srWindow.Left-c.dwCursorPosition.X; - return w > 2 ? w - 1 : w; // w-1 to allow window resizing to a larger dimension (already printed text would break otherwise) - } -#endif -#ifdef TIOCGWINSZ - struct winsize ws; - ioctl(STDIN_FILENO, TIOCGWINSZ, &ws); - return ws.ws_col - 1; -#endif -#ifdef TIOCGSIZE - struct ttysize ts; - ioctl(STDIN_FILENO, TIOCGSIZE, &ts); - return ts.ts_cols - 1; -#endif - return 80; -} -void tty_detach() { - ifdef(win32, FreeConsole()); -} -void tty_attach() { -#if is(win32) - // in order to have a Windows gui application with console: - // - use WinMain() then AllocConsole(), but that may require supporintg different entry points for different platforms. - // - /link /SUBSYSTEM:CONSOLE and then call FreeConsole() if no console is needed, but feels naive to flash the terminal for a second. - // - /link /SUBSYSTEM:WINDOWS /entry:mainCRTStartup, then AllocConsole() as follows. Quoting @pmttavara: - // "following calls are the closest i'm aware you can get to /SUBSYSTEM:CONSOLE in a gui program - // while cleanly handling existing consoles (cmd.exe), pipes (ninja) and no console (VS/RemedyBG; double-clicking the game)" - do_once { - if( !AttachConsole(ATTACH_PARENT_PROCESS) && GetLastError() != ERROR_ACCESS_DENIED ) { bool ok = !!AllocConsole(); ASSERT( ok ); } - printf("\n"); // print >= 1 byte to distinguish empty stdout from a redirected stdout (fgetpos() position <= 0) - fpos_t pos = 0; - if( fgetpos(stdout, &pos) != 0 || pos <= 0 ) { - bool ok1 = !!freopen("CONIN$" , "r", stdin ); ASSERT( ok1 ); - bool ok2 = !!freopen("CONOUT$", "w", stderr); ASSERT( ok2 ); - bool ok3 = !!freopen("CONOUT$", "w", stdout); ASSERT( ok3 ); - } - } -#endif -} - -// ----------------------------------------------------------------------------- -// debugger - -#include -void hexdumpf( FILE *fp, const void *ptr, unsigned len, int width ) { - unsigned char *data = (unsigned char*)ptr; - for( unsigned jt = 0; jt <= len; jt += width ) { - fprintf( fp, "; %05d%s", jt, jt == len ? "\n" : " " ); - for( unsigned it = jt, next = it + width; it < len && it < next; ++it ) { - fprintf( fp, "%02x %s", (unsigned char)data[it], &" \n\0...\n"[ (1+it) < len ? 2 * !!((1+it) % width) : 3 ] ); - } - fprintf( fp, "; %05d%s", jt, jt == len ? "\n" : " " ); - for( unsigned it = jt, next = it + width; it < len && it < next; ++it ) { - fprintf( fp, " %c %s", (signed char)data[it] >= 32 ? (signed char)data[it] : (signed char)'.', &" \n\0..."[ (1+it) < len ? 2 * !!((1+it) % width) : 3 ] ); - } - } - fprintf(fp, " %d bytes\n", len); -} -void hexdump( const void *ptr, unsigned len ) { - hexdumpf( stdout, ptr, len, 16 ); -} - -#if 0 // is(cl) only -static void debugbreak(void) { - do { \ - __try { DebugBreak(); } \ - __except (GetExceptionCode() == EXCEPTION_BREAKPOINT ? \ - EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) {} \ - } while(0); -} -#endif - -#if is(win32) -static void debugbreak(void) { if(IsDebuggerPresent()) DebugBreak(); } -#else // is(unix) -static int is_debugger_present = -1; -static void _sigtrap_handler(int signum) { - is_debugger_present = 0; - signal(SIGTRAP, SIG_DFL); -} -static void debugbreak(void) { // break if debugger present - // __builtin_trap(); // - //raise(SIGABRT); // SIGTRAP); - //__asm__ volatile("int $0x03"); - if( is_debugger_present < 0 ) { - is_debugger_present = 1; - signal(SIGTRAP, _sigtrap_handler); - raise(SIGTRAP); - } -} -#endif - -void alert(const char *message) { // @todo: move to app_, besides die() - window_visible(false); - message = message[0] == '!' ? (const char*)va("%s\n%s", message+1, callstack(+48)) : message; - -#if is(win32) - MessageBoxA(0, message, 0,0); -#elif is(ems) - emscripten_run_script(va("alert('%s')", message)); -#elif is(linux) - for(FILE *fp = fopen("/tmp/v4k.warning","wb");fp;fp=0) - fputs(message,fp), fclose(fp), system("xmessage -center -file /tmp/v4k.warning"); -#elif is(osx) - system(va("osascript -e 'display alert \"Alert\" message \"%s\"'", message)); -#endif - - window_visible(true); -} - -void breakpoint() { - debugbreak(); -} - -bool has_debugger() { -#if is(win32) - return IsDebuggerPresent(); // SetLastError(123); OutputDebugStringA("\1"); enabled = GetLastError() != 123; -#else - return false; -#endif -} - -void die(const char *message) { - fprintf(stderr, "%s\n", message); - fflush(stderr); - alert(message); - exit(-1); -} - -// ---------------------------------------------------------------------------- -// logger - -//static int __thread _thread_id; -//#define PRINTF(...) (printf("%03d %07.3fs|%-16s|", (((unsigned)(uintptr_t)&_thread_id)>>8) % 1000, time_ss(), __FUNCTION__), printf(__VA_ARGS__), printf("%s", 1[#__VA_ARGS__] == '!' ? callstack(+48) : "")) // verbose logger - -int (PRINTF)(const char *text, const char *stack, const char *file, int line, const char *function) { - double secs = time_ss(); - uint32_t color = 0; - /**/ if( strstri(text, "fail") || strstri(text, "error") ) color = RED; - else if( strstri(text, "warn") || strstri(text, "not found") ) color = YELLOW; - #if is(cl) - char *slash = strrchr(file, '\\'); if(slash) file = slash + 1; - #endif - char *location = va("|%s|%s:%d", /*errno?strerror(errno):*/function, file, line); - int cols = tty_cols() + 1 - (int)strlen(location); - - flockfile(stdout); - - tty_color(color); - printf("\r%*.s%s", cols, "", location); - printf("\r%07.3fs|%s%s", secs, text, stack); - tty_color(0); - - funlockfile(stdout); - - return 1; -} - -// ---------------------------------------------------------------------------- -// panic - -static void *panic_oom_reserve; // for out-of-memory recovery -int (PANIC)(const char *error, const char *file, int line) { - panic_oom_reserve = SYS_MEM_REALLOC(panic_oom_reserve, 0); - - tty_color(RED); - - error += error[0] == '!'; - fprintf(stderr, "Error: %s (%s:%d) (errno:%s)\n", error, file, line, strerror(errno)); - fprintf(stderr, "%s", callstack(+16)); // no \n - fflush(0); // fflush(stderr); - - tty_color(0); - - alert(error); - breakpoint(); - - exit(-line); - return 1; -} - -// ---------------------------------------------------------------------------- -// threads - -struct thread_wrapper { - int (*func)(void *user_data); - void *user_data; -}; - -static -int thread_proc( void* user_data ) { - struct thread_wrapper *w = (struct thread_wrapper*)user_data; - int return_code = w->func( w->user_data ); - thread_exit( return_code ); - FREE(w); - return 0; -} - -void* thread( int (*thread_func)(void* user_data), void* user_data ) { - struct thread_wrapper *w = MALLOC(sizeof(struct thread_wrapper)); - w->func = thread_func; - w->user_data = user_data; - - int thread_stack_size = 0; - const char *thread_name = ""; - thread_ptr_t thd = thread_init( thread_proc, w, thread_name, thread_stack_size ); - return thd; -} -void thread_destroy( void *thd ) { - int rc = thread_join(thd); - thread_term(thd); -} - -void app_hang() { - for(;;); -} -void app_crash() { - volatile int *p = 0; - *p = 42; -} -void app_beep() { - ifdef(win32, app_spawn("rundll32 user32.dll,MessageBeep"); return; ); - ifdef(linux, app_spawn("paplay /usr/share/sounds/freedesktop/stereo/message.oga"); return; ); - ifdef(osx, app_spawn("tput bel"); return; ); - - //fallback: - fputc('\x7', stdout); - - // win32: - // rundll32 user32.dll,MessageBeep ; ok - // rundll32 cmdext.dll,MessageBeepStub ; ok - - // osx: - // tput bel - // say "beep" - // osascript -e 'beep' - // osascript -e "beep 1" - // afplay /System/Library/Sounds/Ping.aiff - // /usr/bin/printf "\a" - - // linux: - // paplay /usr/share/sounds/freedesktop/stereo/message.oga ; ok - // paplay /usr/share/sounds/freedesktop/stereo/complete.oga ; ok - // paplay /usr/share/sounds/freedesktop/stereo/bell.oga ; ok - // beep ; apt-get - // echo -e '\007' ; mute - // echo -e "\007" >/dev/tty10 ; sudo - // tput bel ; mute -} - -void app_singleton(const char *guid) { - #ifdef _WIN32 - do_once { - char buffer[128]; - snprintf(buffer, 128, "Global\\{%s}", guid); - static HANDLE app_mutex = 0; - app_mutex = CreateMutexA(NULL, FALSE, buffer); - if( ERROR_ALREADY_EXISTS == GetLastError() ) { - exit(-1); - } - } - #endif -} - -#ifdef APP_SINGLETON_GUID -AUTORUN { app_singleton(APP_SINGLETON_GUID); } -#endif - -static -bool app_open_folder(const char *file) { - char buf[1024]; -#ifdef _WIN32 - snprintf(buf, sizeof(buf), "start \"\" \"%s\"", file); -#elif __APPLE__ - snprintf(buf, sizeof(buf), "%s \"%s\"", file_directory(file) ? "open" : "open --reveal", file); -#else - snprintf(buf, sizeof(buf), "xdg-open \"%s\"", file); -#endif - return app_spawn(buf); -} - -static -bool app_open_file(const char *file) { - char buf[1024]; -#ifdef _WIN32 - snprintf(buf, sizeof(buf), "start \"\" \"%s\"", file); -#elif __APPLE__ - snprintf(buf, sizeof(buf), "open \"%s\"", file); -#else - snprintf(buf, sizeof(buf), "xdg-open \"%s\"", file); -#endif - return app_spawn(buf); -} - -static -bool app_open_url(const char *url) { - return app_open_file(url); -} - -bool app_open(const char *link) { - if( file_directory(link) ) return app_open_folder(link); - if( file_exist(link) ) return app_open_file(link); - return app_open_url(link); -} - -const char* app_loadfile() { - const char *windowTitle = NULL; - const char *defaultPathFile = NULL; - const char *filterHints = NULL; // "image files" - const char *filters[] = { "*.*" }; - int allowMultipleSelections = 0; - - tinyfd_assumeGraphicDisplay = 1; - return tinyfd_openFileDialog( windowTitle, defaultPathFile, countof(filters), filters, filterHints, allowMultipleSelections ); -} -const char* app_savefile() { - const char *windowTitle = NULL; - const char *defaultPathFile = NULL; - const char *filterHints = NULL; // "image files" - const char *filters[] = { "*.*" }; - - tinyfd_assumeGraphicDisplay = 1; - return tinyfd_saveFileDialog( windowTitle, defaultPathFile, countof(filters), filters, filterHints ); -} - -// ---------------------------------------------------------------------------- -// tests - -static __thread int test_oks, test_errors, test_once; -static void test_exit(void) { fprintf(stderr, "%d/%d tests passed\n", test_oks, test_oks+test_errors); } -int (test)(const char *file, int line, const char *expr, bool result) { - static int breakon = -1; if(breakon<0) breakon = optioni("--test-break", 0); - if( breakon == (test_oks+test_errors+1) ) alert("user requested to break on this test"), breakpoint(); - test_once = test_once || !(atexit)(test_exit); - test_oks += result, test_errors += !result; - return (result || (tty_color(RED), fprintf(stderr, "(Test `%s` failed %s:%d)\n", expr, file, line), tty_color(0), 0) ); -} +#if (is(tcc) && is(linux)) || (is(gcc) && !is(mingw)) // || is(clang) +int __argc; char **__argv; +#if !is(ems) +__attribute__((constructor)) void init_argcv(int argc, char **argv) { __argc = argc; __argv = argv; } +#endif +#endif + +void argvadd(const char *arg) { + char **argv = MALLOC( sizeof(char*) * (__argc+1) ); + for( int i = 0; i < __argc; ++i ) { + argv[i] = __argv[i]; + } + argv[__argc] = STRDUP(arg); + __argv = argv; + ++__argc; +} + +const char *app_path() { // @fixme: should return absolute path always. see tcc -g -run + static char buffer[1024] = {0}; + if( buffer[0] ) return buffer; +#if is(win32) + unsigned length = GetModuleFileNameA(NULL, buffer, sizeof(buffer)); // @todo: use GetModuleFileNameW+wchar_t && convert to utf8 instead + char *a = strrchr(buffer, '/'); if(!a) a = buffer + strlen(buffer); + char *b = strrchr(buffer, '\\'); if(!b) b = buffer + strlen(buffer); + char slash = (a < b ? *a : b < a ? *b : '/'); + snprintf(buffer, 1024, "%.*s%c", length - (int)(a < b ? b - a : a - b), buffer, slash); + if( strendi(buffer, "tools\\tcc\\") ) { // fix tcc -g -run case. @fixme: use TOOLS instead + strcat(buffer, "..\\..\\"); + } +#else // #elif is(linux) + char path[32] = {0}; + sprintf(path, "/proc/%d/exe", getpid()); + readlink(path, buffer, sizeof(buffer)); + if(strrchr(buffer,'/')) 1[strrchr(buffer,'/')] = '\0'; +#endif + return buffer; +} + +const char *app_temp() { + static char buffer[256] = {0}; + if( !buffer[0] ) { + snprintf(buffer, 256, "%s", ifdef(win32, getenv("TEMP"), P_tmpdir)); + for( int i = 0; buffer[i]; ++i ) if( buffer[i] == '\\' ) buffer[i] = '/'; + if(buffer[strlen(buffer)-1] != '/') strcat(buffer, "/"); + } + return buffer; +} + +/* + bool exporting_dll = !strcmp(STRINGIZE(API), STRINGIZE(EXPORT)); + bool importing_dll = !strcmp(STRINGIZE(API), STRINGIZE(IMPORT)); + else static_build +*/ + +#ifndef APP_NAME +#define APP_NAME ifdef(ems, "", (__argv ? __argv[0] : "")) +#endif + +const char *app_name() { + static char buffer[256] = {0}; + if( !buffer[0] ) { + char s[256]; + strncpy(s, APP_NAME, 256); + char *a = strrchr(s, '/'); + char *b = strrchr(s, '\\'); + strncpy(buffer, a > b ? a+1 : b > a ? b+1 : s, 256); + if(strendi(buffer, ".exe")) buffer[strlen(buffer) - 4] = 0; + } + return buffer; +} + +const char *app_cmdline() { + static char *cmdline = 0; + if( !cmdline ) { + if( argc() <= 1 ) strcatf(&cmdline, "%s", " "); + for( int i = 1; i < argc(); ++i ) strcatf(&cmdline, " %s", argv(i)); + } + return cmdline+1; +} + +const char *app_cache() { + static char buffer[256] = {0}; + if( !buffer[0] ) { + + #if is(osx) + snprintf(buffer, 256, "~/Library/Caches/%s/", app_name()); // getenv("user.home") + #elif is(win32) // APPDATA for roaming? + snprintf(buffer, 256, "%s\\%s\\", getenv("LOCALAPPDATA"), app_name()); // getenv("LOCALAPPDATA") + #else // linux + snprintf(buffer, 256, "~/.cache/%s/", app_name()); // getenv("user.home") + #endif + + mkdir(buffer, 0777); + + for( int i = 0; buffer[i]; ++i ) if( buffer[i] == '\\' ) buffer[i] = '/'; + } + + return buffer; +} + +const char * app_exec( const char *cmd ) { + static __thread char output[4096+16] = {0}; + char *buf = output + 16; buf[0] = 0; // memset(buf, 0, 4096); + + if( !cmd[0] ) return "0 "; + cmd = file_normalize(cmd); + + int rc = -1; + + // pick the fastest code path per platform +#if is(osx) + for( FILE *fp = popen( cmd, "r" ); fp; rc = pclose(fp), fp = 0) { + // while( fgets(buf, 4096 - 1, fp) ) {} + } + // if( rc != 0 ) { + // char *r = strrchr(buf, '\r'); if(r) *r = 0; + // char *n = strrchr(buf, '\n'); if(n) *n = 0; + // } +#elif is(win32) + STARTUPINFOA si = {0}; si.cb = sizeof(si); + PROCESS_INFORMATION pi = {0}; + + snprintf(output+16, 4096, "cmd /c \"%s\"", cmd); + + int prio = //strstr(cmd, "ffmpeg") || strstr(cmd, "furnace") || strstr(cmd, "ass2iqe") ? + REALTIME_PRIORITY_CLASS; //: 0; + +//prio |= DETACHED_PROCESS; +//si.dwFlags = STARTF_USESTDHANDLES; + + if( CreateProcessA( + NULL, output+16, // cmdline + NULL, + NULL, + FALSE, // FALSE: dont inherit handles + prio /*CREATE_DEFAULT_ERROR_MODE|CREATE_NO_WINDOW*/, // 0|HIGH_PRIORITY_CLASS + NULL, // "", // NULL would inherit env + NULL, // current dir + &si, &pi) ) + { + // Wait for process + DWORD dwExitCode2 = WaitForSingleObject(pi.hProcess, INFINITE); + DWORD dwExitCode; GetExitCodeProcess(pi.hProcess, &dwExitCode); + rc = dwExitCode; + } + else + { + // CreateProcess() failed + rc = GetLastError(); + } +#else + rc = system(cmd); +#endif + + return snprintf(output, 16, "%-15d", rc), buf[-1] = ' ', output; +} + +int app_spawn( const char *cmd ) { + if( !cmd[0] ) return false; + cmd = file_normalize(cmd); + +#if _WIN32 + bool ok = WinExec(va("cmd /c \"%s\"", cmd), SW_HIDE) > 31; +#else + bool ok = system(va("%s &", cmd)) == 0; +#endif + + return ok; +} + +#if is(osx) +#include // backtrace, backtrace_symbols +#include // dladdr, Dl_info +#elif is(gcc) && !is(ems) && !is(mingw) // maybe is(linux) is enough? +#include // backtrace, backtrace_symbols +#elif is(win32) // && !defined __TINYC__ +#include // windows.h alternative +#include +#pragma comment(lib, "DbgHelp") +#pragma comment(lib, "Kernel32") +static int backtrace( void **addr, int maxtraces ) { + static bool init = 0; + do_once SymSetOptions(SYMOPT_UNDNAME | SYMOPT_DEFERRED_LOADS | SYMOPT_INCLUDE_32BIT_MODULES); + do_once init = SymInitialize(GetCurrentProcess(), NULL, TRUE); + if(!init) return 0; // error: cannot initialize DbgHelp.lib + + //typedef USHORT (WINAPI *pFN)(__in ULONG, __in ULONG, __out PVOID*, __out_opt PULONG); // _MSC_VER + typedef USHORT (WINAPI *pFN)(); // TINYC + static pFN rtlCaptureStackBackTrace = 0; + if( !rtlCaptureStackBackTrace ) { + rtlCaptureStackBackTrace = (pFN)GetProcAddress(LoadLibraryA("kernel32.dll"), "RtlCaptureStackBackTrace"); + } + if( !rtlCaptureStackBackTrace ) { + return 0; + } + return rtlCaptureStackBackTrace(1, maxtraces, (PVOID *)addr, (DWORD *) 0); +} +static char **backtrace_symbols(void *const *list,int size) { + HANDLE process = GetCurrentProcess(); + + struct symbol_t { + SYMBOL_INFO info; + TCHAR symbolname[256], terminator; + } si = { {0} }; + si.info.SizeOfStruct = sizeof(SYMBOL_INFO); + si.info.MaxNameLen = sizeof(si.symbolname) / sizeof(TCHAR); // number of chars, not bytes + + IMAGEHLP_LINE l64 = { 0 }; + l64.SizeOfStruct = sizeof(IMAGEHLP_LINE); + + static __thread char **symbols = 0; //[32][64] = {0}; + if( !symbols ) { + symbols = SYS_MEM_REALLOC(0, 128 * sizeof(char*)); + for( int i = 0; i < 128; ++i) symbols[i] = SYS_MEM_REALLOC(0, 128 * sizeof(char)); + } + + if(size > 128) size = 128; + for( int i = 0; i < size; ++i ) { + + char *ptr = symbols[i]; + *ptr = '\0'; + + if (SymFromAddr(process, (DWORD64)(uintptr_t)list[i], 0, &si.info)) { + //char undecorated[1024]; + //UnDecorateSymbolName(si.info.Name, undecorated, sizeof(undecorated)-1, UNDNAME_COMPLETE); + char* undecorated = (char*)si.info.Name; + ptr += snprintf(ptr, 128, "%s", undecorated); + } else { + ptr += snprintf(ptr, 128, "%s", "(?""?)"); + } + + DWORD dw = 0; + if (SymGetLineFromAddr(process, (DWORD64)(uintptr_t)list[i], &dw, &l64)) { + ptr += snprintf(ptr, 128 - (ptr - symbols[i]), " (%s:%u)", l64.FileName, (unsigned)l64.LineNumber); + } + } + + return symbols; +} +#else +static int backtrace(void **heap, int num) { return 0; } +static char **backtrace_symbols(void *const *sym,int num) { return 0; } +#endif + +char *callstack( int traces ) { + static __thread char *output = 0; + if(!output ) output = SYS_MEM_REALLOC( 0, 128 * (64+2) ); + if( output ) output[0] = '\0'; + char *ptr = output; + + enum { skip = 1 }; /* exclude 1 trace from stack (this function) */ + enum { maxtraces = 128 }; + + int inc = 1; + if( traces < 0 ) traces = -traces, inc = -1; + if( traces == 0 ) return ""; + if( traces > maxtraces ) traces = maxtraces; + + void* stacks[maxtraces/* + 1*/]; // = { 0 }; + traces = backtrace( stacks, traces ); + char **symbols = backtrace_symbols( stacks, traces ); // @todo: optimization: map(void*,char*) cache; and retrieve only symbols not in cache + + char demangled[1024] = "??"; + int L = 0, B = inc>0 ? skip - 1 : traces, E = inc>0 ? traces : skip - 1; + for( int i = B; ( i += inc ) != E; ) { +#if is(linux) + #if ENABLE_LINUX_CALLSTACKS + // @fixme: following snippet works if compiled with '-g', albeit terribly slow + // should concat addresses into a multi-address line + + char *binary = symbols[i]; + char *address = strchr( symbols[i], '(' ) + 1; + *strrchr( address, ')') = '\0'; *(address - 1) = '\0'; + + for( FILE *fp = popen(va("addr2line -e %s %s", binary, address), "r" ); fp ; pclose(fp), fp = 0 ) { //addr2line -e binary -f -C address + fgets(demangled, sizeof(demangled), fp); + int len = strlen(demangled); while( len > 0 && demangled[len-1] < 32 ) demangled[--len] = 0; + } + symbols[i] = demangled; + #else + // make it shorter. ie, `0x00558997ccc87e ./a.out(+0x20187e) [0x00558997ccc87e]` + strchr(symbols[i], ')')[1] = '\0'; + #endif +#elif is(osx) + /*struct*/ Dl_info info; + if( dladdr(stacks[i], &info) && info.dli_sname ) { + const char *dmgbuf = info.dli_sname[0] != '_' ? NULL : + ifdef(cpp, __cxa_demangle(info.dli_sname, NULL, 0, NULL), info.dli_sname); + strcpy( demangled, dmgbuf ? dmgbuf : info.dli_sname ); + symbols[i] = demangled; + if( dmgbuf ) free( (void*)dmgbuf ); + } +#endif + ptr += sprintf(ptr, "%03d: %#016llx %s\n", ++L, (unsigned long long)(uintptr_t)stacks[i], symbols[i]); // format gymnastics because %p is not standard when printing pointers + } + +#if is(linux) || is(osx) + if(symbols) free(symbols); +#endif + + return output ? output : ""; +} + +int callstackf( FILE *fp, int traces ) { + char *buf = callstack(traces); + fputs(buf, fp); + return 0; +} + +// trap signals --------------------------------------------------------------- + +const char *trap_name(int signal) { + if(signal == SIGABRT) return "SIGABRT - \"abort\", abnormal termination"; + if(signal == SIGFPE) return "SIGFPE - floating point exception"; + if(signal == SIGILL) return "SIGILL - \"illegal\", invalid instruction"; + if(signal == SIGSEGV) return "SIGSEGV - \"segmentation violation\", invalid memory access"; + if(signal == SIGINT) return "SIGINT - \"interrupt\", interactive attention request sent to the program"; + if(signal == SIGTERM) return "SIGTERM - \"terminate\", termination request sent to the program"; + ifndef(win32, if(signal == SIGBUS) return "SIGBUS"); + ifdef(linux, if(signal == SIGSTKFLT) return "SIGSTKFLT"); + ifndef(win32, if(signal == SIGQUIT) return "SIGQUIT"); + return "??"; +} +void trap_on_ignore(int sgn) { + signal(sgn, trap_on_ignore); +} +void trap_on_quit(int sgn) { + signal(sgn, trap_on_quit); + exit(0); +} +void trap_on_abort(int sgn) { + char *cs = va("Error: unexpected signal %s (%d)\n%s", trap_name(sgn), sgn, callstack(+16)); + fprintf(stderr, "%s\n", cs), alert(cs), breakpoint(); + signal(sgn, trap_on_abort); + exit(-sgn); +} +void trap_on_debug(int sgn) { // @todo: rename to trap_on_choice() and ask the developer what to do next? abort, continue, debug + char *cs = va("Error: unexpected signal %s (%d)\n%s", trap_name(sgn), sgn, callstack(+16)); + fprintf(stderr, "%s\n", cs), alert(cs), breakpoint(); + signal(sgn, trap_on_debug); +} +#if is(win32) +LONG WINAPI trap_on_SEH(PEXCEPTION_POINTERS pExceptionPtrs) { + char *cs = va("Error: unexpected SEH exception\n%s", callstack(+16)); + fprintf(stderr, "%s\n", cs), alert(cs), breakpoint(); + return EXCEPTION_EXECUTE_HANDLER; // Execute default exception handler next +} +#endif +void trap_install(void) { + // expected signals + signal(SIGINT, trap_on_quit); + signal(SIGTERM, trap_on_quit); + ifndef(win32, signal(SIGQUIT, trap_on_quit)); + // unexpected signals + signal(SIGABRT, trap_on_abort); + signal(SIGFPE, trap_on_abort); + signal(SIGILL, trap_on_abort); + signal(SIGSEGV, trap_on_abort); + ifndef(win32, signal(SIGBUS, trap_on_abort)); + ifdef(linux, signal(SIGSTKFLT, trap_on_abort)); + // others + ifdef(win32,SetUnhandledExceptionFilter(trap_on_SEH)); +} + +#ifdef TRAP_DEMO +AUTORUN { + trap_install(); + app_crash(); // app_hang(); +} +#endif + +// cpu ------------------------------------------------------------------------- + +#if is(linux) +#include +#endif + +int app_cores() { +#if is(win32) + DWORD_PTR pm, sm; + if( GetProcessAffinityMask(GetCurrentProcess(), &pm, &sm) ) if( pm ) { + int count = 0; + while( pm ) { + ++count; + pm &= pm - 1; + } + return count; + } + { SYSTEM_INFO si; GetSystemInfo(&si); return (int)si.dwNumberOfProcessors; } +#else // unix + int count = sysconf(_SC_NPROCESSORS_ONLN); + return count > 0 ? count : 1; +#endif +#if 0 +#elif is(linux) + cpu_set_t prevmask, testmask; + CPU_ZERO(&prevmask); + CPU_ZERO(&testmask); + sched_getaffinity(0, sizeof(prevmask), &prevmask); //Get current mask + sched_setaffinity(0, sizeof(testmask), &testmask); //Set zero mask + sched_getaffinity(0, sizeof(testmask), &testmask); //Get mask for all CPUs + sched_setaffinity(0, sizeof(prevmask), &prevmask); //Reset current mask + int num = CPU_COUNT(&testmask); + return (num > 1 ? num : 1); +#elif is(cpp) + return (int)std::thread::hardware_concurrency(); +#elif defined(_OPENMP) + // omp + int cores = 0; + #pragma omp parallel + { + #pragma omp atomic + ++cores; + } + return cores; +#endif +} + +// ----------------------------------------------------------------------------- +// Battery API. Based on code by Rabia Alhaffar (UNLICENSE) +// - rlyeh, public domain. + +#if is(win32) +#include + +int app_battery() { + SYSTEM_POWER_STATUS ibstatus; + + if (GetSystemPowerStatus(&ibstatus) == FALSE) { + return 0; + } + + int level = (ibstatus.BatteryLifePercent != 255) ? ibstatus.BatteryLifePercent : 0; + int charging = (ibstatus.BatteryFlag & 8) > 0; + return charging ? +level : -level; +} + +#elif defined __linux__ // is(linux) +#include +#include +#include +#include +#include + +int app_battery() { + static int battery_status_handle; + static int battery_capacity_handle; + + do_once { + battery_status_handle = open("/sys/class/power_supply/BAT0/status", O_RDONLY); + battery_capacity_handle = open("/sys/class/power_supply/BAT0/capacity", O_RDONLY); + } + + if (battery_status_handle == -1 || battery_capacity_handle == -1) { + return 0; + } + + char buffer[512]; + + // level + lseek(battery_capacity_handle, 0, SEEK_SET); + int readlen = read(battery_capacity_handle, buffer, 511); buffer[readlen < 0 ? 0 : readlen] = '\0'; + int level = atoi(buffer); + + // charging + lseek(battery_status_handle, 0, SEEK_SET); + readlen = read(battery_status_handle, buffer, 511); buffer[readlen < 0 ? 0 : readlen] = '\0'; + int charging = strstr(buffer, "Discharging") ? 0 : 1; + return charging ? +level : -level; +} + +#elif is(osx) +#import +#include +#import +#import + +int app_battery() { + static CFDictionaryRef psrc; + + do_once { + CFTypeRef blob = IOPSCopyPowerSourcesInfo(); + CFArrayRef sources = IOPSCopyPowerSourcesList(blob); + int sourcesCount = CFArrayGetCount(sources); + + if (sourcesCount > 0) { + psrc = IOPSGetPowerSourceDescription(blob, CFArrayGetValueAtIndex(sources, 0)); + } + } + + if(psrc == NULL) return 0; + + int cur_cap = 0; + CFNumberGetValue((CFNumberRef)CFDictionaryGetValue(psrc, CFSTR(kIOPSCurrentCapacityKey)), kCFNumberSInt32Type, &cur_cap); + + int max_cap = 0; + CFNumberGetValue((CFNumberRef)CFDictionaryGetValue(psrc, CFSTR(kIOPSMaxCapacityKey)), kCFNumberSInt32Type, &max_cap); + + int level = (int)(cur_cap * 100.f / max_cap); + int charging = CFDictionaryGetValue(psrc, CFSTR(kIOPSIsChargingKey)) == kCFBooleanTrue; + return charging ? +level : -level; +} + +#else + +int app_battery() { + return 0; +} + +#endif + +// ---------------------------------------------------------------------------- +// argc/v + +static void argc_init() { +#if is(tcc) && is(linux) + do_once { + char buffer[128], arg0[128] = {0}; + for( FILE *fp = fopen("/proc/self/status", "rb"); fp; fclose(fp), fp = 0) { + while( fgets(buffer, 128, fp) ) { + if( strbeg(buffer, "Name:") ) { + sscanf(buffer + 5, "%s", arg0 ); + break; + } + } + } + extern char **environ; + __argv = environ - 2; // last argv, as stack is [argc][argv0][argv1][...][NULL][envp] + while( !strend(*__argv,arg0) ) --__argv; + __argc = *(int*)(__argv-1); + } +#endif +} + +int argc() { + do_once argc_init(); + return __argc; +} +char* argv(int arg) { + do_once argc_init(); + static __thread char empty[1]; + return (unsigned)arg < __argc ? __argv[arg] : (empty[0] = '\0', empty); +} + +// ---------------------------------------------------------------------------- +// options + +int flag(const char *commalist) { + while( commalist[0] ) { + const char *begin = commalist; + while(*commalist != ',' && *commalist != '\0') ++commalist; + const char *end = commalist; + + char token[128]; + snprintf(token, 128, "%.*s", (int)(end - begin), begin); + + for( int i = 1; i < argc(); ++i ) { + char *arg = argv(i); + + if( !strcmpi( arg, token ) ) { // --arg + return 1; + } + } + + commalist = end + !!end[0]; + } + return 0; +} + +const char *option(const char *commalist, const char *defaults) { + while( commalist[0] ) { + const char *begin = commalist; + while(*commalist != ',' && *commalist != '\0') ++commalist; + const char *end = commalist; + + char token[128], tokeneq[128]; + snprintf(token, 128, "%.*s", (int)(end - begin), begin); + snprintf(tokeneq, 128, "%.*s=", (int)(end - begin), begin); + + for( int i = 1; i < argc(); ++i ) { + char *arg = argv(i); + + if( strbegi( arg, tokeneq ) ) { // --arg=value + return argv(i) + strlen(tokeneq); + } + if( !strcmpi( arg, token ) ) { // --arg value + if( (i+1) < argc() ) { + return argv(i+1); + } + } + } + + commalist = end + !!end[0]; + } + return defaults; +} + +int optioni(const char *commalist, int defaults) { + const char *rc = option(commalist, 0); + return rc ? atoi(rc) : defaults; +} +float optionf(const char *commalist, float defaults) { + const char *rc = option(commalist, 0); + return rc ? atof(rc) : defaults; +} + +// ---------------------------------------------------------------------------- +// tty + +void tty_color(unsigned color) { + #if is(win32) + do_once { + DWORD mode = 0; SetConsoleMode(GetStdHandle(-11), (GetConsoleMode(GetStdHandle(-11), &mode), mode|4)); + } + #endif + if( color ) { + // if( color == RED ) alert("break on error message (RED)"), breakpoint(); // debug + unsigned r = (color >> 0) & 255; + unsigned g = (color >> 8) & 255; + unsigned b = (color >> 16) & 255; + // 24-bit console ESC[ … 38;2;;; … m Select RGB foreground color + // 256-color console ESC[38;5;m + // 0x00-0x07: standard colors (as in ESC [ 30..37 m) + // 0x08-0x0F: high intensity colors (as in ESC [ 90..97 m) + // 0x10-0xE7: 6*6*6=216 colors: 16 + 36*r + 6*g + b (0≤r,g,b≤5) + // 0xE8-0xFF: grayscale from black to white in 24 steps + r /= 51, g /= 51, b /= 51; // [0..5] + printf("\033[38;5;%dm", r*36+g*6+b+16); // "\033[0;3%sm", color_code); + } else { + printf("%s", "\x1B[39;49m"); // reset + } +} +void tty_puts(unsigned color, const char *text) { + tty_color(color); puts(text); +} +void tty_init() { + tty_color(0); +} +int tty_cols() { +#if is(win32) + CONSOLE_SCREEN_BUFFER_INFO c; + if( GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &c) ) { + int w = c.srWindow.Right-c.srWindow.Left-c.dwCursorPosition.X; + return w > 2 ? w - 1 : w; // w-1 to allow window resizing to a larger dimension (already printed text would break otherwise) + } +#endif +#ifdef TIOCGWINSZ + struct winsize ws; + ioctl(STDIN_FILENO, TIOCGWINSZ, &ws); + return ws.ws_col - 1; +#endif +#ifdef TIOCGSIZE + struct ttysize ts; + ioctl(STDIN_FILENO, TIOCGSIZE, &ts); + return ts.ts_cols - 1; +#endif + return 80; +} +void tty_detach() { + ifdef(win32, FreeConsole()); +} +void tty_attach() { +#if is(win32) + // in order to have a Windows gui application with console: + // - use WinMain() then AllocConsole(), but that may require supporintg different entry points for different platforms. + // - /link /SUBSYSTEM:CONSOLE and then call FreeConsole() if no console is needed, but feels naive to flash the terminal for a second. + // - /link /SUBSYSTEM:WINDOWS /entry:mainCRTStartup, then AllocConsole() as follows. Quoting @pmttavara: + // "following calls are the closest i'm aware you can get to /SUBSYSTEM:CONSOLE in a gui program + // while cleanly handling existing consoles (cmd.exe), pipes (ninja) and no console (VS/RemedyBG; double-clicking the game)" + do_once { + if( !AttachConsole(ATTACH_PARENT_PROCESS) && GetLastError() != ERROR_ACCESS_DENIED ) { bool ok = !!AllocConsole(); ASSERT( ok ); } + printf("\n"); // print >= 1 byte to distinguish empty stdout from a redirected stdout (fgetpos() position <= 0) + fpos_t pos = 0; + if( fgetpos(stdout, &pos) != 0 || pos <= 0 ) { + bool ok1 = !!freopen("CONIN$" , "r", stdin ); ASSERT( ok1 ); + bool ok2 = !!freopen("CONOUT$", "w", stderr); ASSERT( ok2 ); + bool ok3 = !!freopen("CONOUT$", "w", stdout); ASSERT( ok3 ); + } + } +#endif +} + +// ----------------------------------------------------------------------------- +// debugger + +#include +void hexdumpf( FILE *fp, const void *ptr, unsigned len, int width ) { + unsigned char *data = (unsigned char*)ptr; + for( unsigned jt = 0; jt <= len; jt += width ) { + fprintf( fp, "; %05d%s", jt, jt == len ? "\n" : " " ); + for( unsigned it = jt, next = it + width; it < len && it < next; ++it ) { + fprintf( fp, "%02x %s", (unsigned char)data[it], &" \n\0...\n"[ (1+it) < len ? 2 * !!((1+it) % width) : 3 ] ); + } + fprintf( fp, "; %05d%s", jt, jt == len ? "\n" : " " ); + for( unsigned it = jt, next = it + width; it < len && it < next; ++it ) { + fprintf( fp, " %c %s", (signed char)data[it] >= 32 ? (signed char)data[it] : (signed char)'.', &" \n\0..."[ (1+it) < len ? 2 * !!((1+it) % width) : 3 ] ); + } + } + fprintf(fp, " %d bytes\n", len); +} +void hexdump( const void *ptr, unsigned len ) { + hexdumpf( stdout, ptr, len, 16 ); +} + +#if 0 // is(cl) only +static void debugbreak(void) { + do { \ + __try { DebugBreak(); } \ + __except (GetExceptionCode() == EXCEPTION_BREAKPOINT ? \ + EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) {} \ + } while(0); +} +#endif + +#if is(win32) +static void debugbreak(void) { if(IsDebuggerPresent()) DebugBreak(); } +#else // is(unix) +static int is_debugger_present = -1; +static void _sigtrap_handler(int signum) { + is_debugger_present = 0; + signal(SIGTRAP, SIG_DFL); +} +static void debugbreak(void) { // break if debugger present + // __builtin_trap(); // + //raise(SIGABRT); // SIGTRAP); + //__asm__ volatile("int $0x03"); + if( is_debugger_present < 0 ) { + is_debugger_present = 1; + signal(SIGTRAP, _sigtrap_handler); + raise(SIGTRAP); + } +} +#endif + +void alert(const char *message) { // @todo: move to app_, besides die() + window_visible(false); + message = message[0] == '!' ? (const char*)va("%s\n%s", message+1, callstack(+48)) : message; + +#if is(win32) + MessageBoxA(0, message, 0,0); +#elif is(ems) + emscripten_run_script(va("alert('%s')", message)); +#elif is(linux) + for(FILE *fp = fopen("/tmp/v4k.warning","wb");fp;fp=0) + fputs(message,fp), fclose(fp), system("xmessage -center -file /tmp/v4k.warning"); +#elif is(osx) + system(va("osascript -e 'display alert \"Alert\" message \"%s\"'", message)); +#endif + + window_visible(true); +} + +void breakpoint() { + debugbreak(); +} + +bool has_debugger() { +#if is(win32) + return IsDebuggerPresent(); // SetLastError(123); OutputDebugStringA("\1"); enabled = GetLastError() != 123; +#else + return false; +#endif +} + +void die(const char *message) { + fprintf(stderr, "%s\n", message); + fflush(stderr); + alert(message); + exit(-1); +} + +// ---------------------------------------------------------------------------- +// logger + +//static int __thread _thread_id; +//#define PRINTF(...) (printf("%03d %07.3fs|%-16s|", (((unsigned)(uintptr_t)&_thread_id)>>8) % 1000, time_ss(), __FUNCTION__), printf(__VA_ARGS__), printf("%s", 1[#__VA_ARGS__] == '!' ? callstack(+48) : "")) // verbose logger + +int (PRINTF)(const char *text, const char *stack, const char *file, int line, const char *function) { + double secs = time_ss(); + uint32_t color = 0; + /**/ if( strstri(text, "fail") || strstri(text, "error") ) color = RED; + else if( strstri(text, "warn") || strstri(text, "not found") ) color = YELLOW; + #if is(cl) + char *slash = strrchr(file, '\\'); if(slash) file = slash + 1; + #endif + char *location = va("|%s|%s:%d", /*errno?strerror(errno):*/function, file, line); + int cols = tty_cols() + 1 - (int)strlen(location); + + flockfile(stdout); + + tty_color(color); + printf("\r%*.s%s", cols, "", location); + printf("\r%07.3fs|%s%s", secs, text, stack); + tty_color(0); + + funlockfile(stdout); + + return 1; +} + +// ---------------------------------------------------------------------------- +// panic + +static void *panic_oom_reserve; // for out-of-memory recovery +int (PANIC)(const char *error, const char *file, int line) { + panic_oom_reserve = SYS_MEM_REALLOC(panic_oom_reserve, 0); + + tty_color(RED); + + error += error[0] == '!'; + fprintf(stderr, "Error: %s (%s:%d) (errno:%s)\n", error, file, line, strerror(errno)); + fprintf(stderr, "%s", callstack(+16)); // no \n + fflush(0); // fflush(stderr); + + tty_color(0); + + alert(error); + breakpoint(); + + exit(-line); + return 1; +} + +// ---------------------------------------------------------------------------- +// threads + +struct thread_wrapper { + int (*func)(void *user_data); + void *user_data; +}; + +static +int thread_proc( void* user_data ) { + struct thread_wrapper *w = (struct thread_wrapper*)user_data; + int return_code = w->func( w->user_data ); + thread_exit( return_code ); + FREE(w); + return 0; +} + +void* thread( int (*thread_func)(void* user_data), void* user_data ) { + struct thread_wrapper *w = MALLOC(sizeof(struct thread_wrapper)); + w->func = thread_func; + w->user_data = user_data; + + int thread_stack_size = 0; + const char *thread_name = ""; + thread_ptr_t thd = thread_init( thread_proc, w, thread_name, thread_stack_size ); + return thd; +} +void thread_destroy( void *thd ) { + int rc = thread_join(thd); + thread_term(thd); +} + +void app_hang() { + for(;;); +} +void app_crash() { + volatile int *p = 0; + *p = 42; +} +void app_beep() { + ifdef(win32, app_spawn("rundll32 user32.dll,MessageBeep"); return; ); + ifdef(linux, app_spawn("paplay /usr/share/sounds/freedesktop/stereo/message.oga"); return; ); + ifdef(osx, app_spawn("tput bel"); return; ); + + //fallback: + fputc('\x7', stdout); + + // win32: + // rundll32 user32.dll,MessageBeep ; ok + // rundll32 cmdext.dll,MessageBeepStub ; ok + + // osx: + // tput bel + // say "beep" + // osascript -e 'beep' + // osascript -e "beep 1" + // afplay /System/Library/Sounds/Ping.aiff + // /usr/bin/printf "\a" + + // linux: + // paplay /usr/share/sounds/freedesktop/stereo/message.oga ; ok + // paplay /usr/share/sounds/freedesktop/stereo/complete.oga ; ok + // paplay /usr/share/sounds/freedesktop/stereo/bell.oga ; ok + // beep ; apt-get + // echo -e '\007' ; mute + // echo -e "\007" >/dev/tty10 ; sudo + // tput bel ; mute +} + +void app_singleton(const char *guid) { + #ifdef _WIN32 + do_once { + char buffer[128]; + snprintf(buffer, 128, "Global\\{%s}", guid); + static HANDLE app_mutex = 0; + app_mutex = CreateMutexA(NULL, FALSE, buffer); + if( ERROR_ALREADY_EXISTS == GetLastError() ) { + exit(-1); + } + } + #endif +} + +#ifdef APP_SINGLETON_GUID +AUTORUN { app_singleton(APP_SINGLETON_GUID); } +#endif + +static +bool app_open_folder(const char *file) { + char buf[1024]; +#ifdef _WIN32 + snprintf(buf, sizeof(buf), "start \"\" \"%s\"", file); +#elif __APPLE__ + snprintf(buf, sizeof(buf), "%s \"%s\"", file_directory(file) ? "open" : "open --reveal", file); +#else + snprintf(buf, sizeof(buf), "xdg-open \"%s\"", file); +#endif + return app_spawn(buf); +} + +static +bool app_open_file(const char *file) { + char buf[1024]; +#ifdef _WIN32 + snprintf(buf, sizeof(buf), "start \"\" \"%s\"", file); +#elif __APPLE__ + snprintf(buf, sizeof(buf), "open \"%s\"", file); +#else + snprintf(buf, sizeof(buf), "xdg-open \"%s\"", file); +#endif + return app_spawn(buf); +} + +static +bool app_open_url(const char *url) { + return app_open_file(url); +} + +bool app_open(const char *link) { + if( file_directory(link) ) return app_open_folder(link); + if( file_exist(link) ) return app_open_file(link); + return app_open_url(link); +} + +const char* app_loadfile() { + const char *windowTitle = NULL; + const char *defaultPathFile = NULL; + const char *filterHints = NULL; // "image files" + const char *filters[] = { "*.*" }; + int allowMultipleSelections = 0; + + tinyfd_assumeGraphicDisplay = 1; + return tinyfd_openFileDialog( windowTitle, defaultPathFile, countof(filters), filters, filterHints, allowMultipleSelections ); +} +const char* app_savefile() { + const char *windowTitle = NULL; + const char *defaultPathFile = NULL; + const char *filterHints = NULL; // "image files" + const char *filters[] = { "*.*" }; + + tinyfd_assumeGraphicDisplay = 1; + return tinyfd_saveFileDialog( windowTitle, defaultPathFile, countof(filters), filters, filterHints ); +} + +// ---------------------------------------------------------------------------- +// tests + +static __thread int test_oks, test_errors, test_once; +static void test_exit(void) { fprintf(stderr, "%d/%d tests passed\n", test_oks, test_oks+test_errors); } +int (test)(const char *file, int line, const char *expr, bool result) { + static int breakon = -1; if(breakon<0) breakon = optioni("--test-break", 0); + if( breakon == (test_oks+test_errors+1) ) alert("user requested to break on this test"), breakpoint(); + test_once = test_once || !(atexit)(test_exit); + test_oks += result, test_errors += !result; + return (result || (tty_color(RED), fprintf(stderr, "(Test `%s` failed %s:%d)\n", expr, file, line), tty_color(0), 0) ); +} #line 0 #line 1 "v4k_time.c" -// ---------------------------------------------------------------------------- -// time - -#if 0 -uint64_t time_gpu() { - GLint64 t = 123456789; - glGetInteger64v(GL_TIMESTAMP, &t); - return (uint64_t)t; -} -#endif -uint64_t date() { - time_t epoch = time(0); - struct tm *ti = localtime(&epoch); - return atoi64(va("%04d%02d%02d%02d%02d%02d",ti->tm_year+1900,ti->tm_mon+1,ti->tm_mday,ti->tm_hour,ti->tm_min,ti->tm_sec)); -} -char *date_string() { - time_t epoch = time(0); - struct tm *ti = localtime(&epoch); - return va("%04d-%02d-%02d %02d:%02d:%02d",ti->tm_year+1900,ti->tm_mon+1,ti->tm_mday,ti->tm_hour,ti->tm_min,ti->tm_sec); -} -uint64_t date_epoch() { - time_t epoch = time(0); - return epoch; -} -#if 0 -double time_ss() { - return glfwGetTime(); -} -double time_ms() { - return glfwGetTime() * 1000.0; -} -uint64_t time_us() { - return (uint64_t)(glfwGetTime() * 1000000.0); // @fixme: use a high resolution timer instead, or time_gpu below -} -uint64_t sleep_us(uint64_t us) { // @fixme: use a high resolution sleeper instead - return sleep_ms( us / 1000.0 ); -} -double sleep_ms(double ms) { - double now = time_ms(); - if( ms <= 0 ) { -#if is(win32) - Sleep(0); // yield -#else - usleep(0); -#endif - } else { -#if is(win32) - Sleep(ms); -#else - usleep(ms * 1000); -#endif - } - return time_ms() - now; -} -double sleep_ss(double ss) { - return sleep_ms( ss * 1000 ) / 1000.0; -} -#endif - -// high-perf functions - -#define TIMER_E3 1000ULL -#define TIMER_E6 1000000ULL -#define TIMER_E9 1000000000ULL - -#ifdef CLOCK_MONOTONIC_RAW -#define TIME_MONOTONIC CLOCK_MONOTONIC_RAW -#elif defined CLOCK_MONOTONIC -#define TIME_MONOTONIC CLOCK_MONOTONIC -#else -// #define TIME_MONOTONIC CLOCK_REALTIME // untested -#endif - -static uint64_t nanotimer(uint64_t *out_freq) { - if( out_freq ) { -#if is(win32) - LARGE_INTEGER li; - QueryPerformanceFrequency(&li); - *out_freq = li.QuadPart; -//#elif is(ANDROID) -// *out_freq = CLOCKS_PER_SEC; -#elif defined TIME_MONOTONIC - *out_freq = TIMER_E9; -#else - *out_freq = TIMER_E6; -#endif - } -#if is(win32) - LARGE_INTEGER li; - QueryPerformanceCounter(&li); - return (uint64_t)li.QuadPart; -//#elif is(ANDROID) -// return (uint64_t)clock(); -#elif defined TIME_MONOTONIC - struct timespec ts; - clock_gettime(TIME_MONOTONIC, &ts); - return (TIMER_E9 * (uint64_t)ts.tv_sec) + ts.tv_nsec; -#else - struct timeval tv; - gettimeofday(&tv, NULL); - return (TIMER_E6 * (uint64_t)tv.tv_sec) + tv.tv_usec; -#endif -} - -uint64_t time_ns() { - static __thread uint64_t epoch = 0; - static __thread uint64_t freq = 0; - if( !freq ) { - epoch = nanotimer(&freq); - } - - uint64_t a = nanotimer(NULL) - epoch; - uint64_t b = TIMER_E9; - uint64_t c = freq; - - // Computes (a*b)/c without overflow, as long as both (a*b) and the overall result fit into 64-bits. - // [ref] https://github.com/rust-lang/rust/blob/3809bbf47c8557bd149b3e52ceb47434ca8378d5/src/libstd/sys_common/mod.rs#L124 - uint64_t q = a / c; - uint64_t r = a % c; - return q * b + r * b / c; -} -uint64_t time_us() { - return time_ns() / TIMER_E3; -} -uint64_t time_ms() { - return time_ns() / TIMER_E6; -} -double time_ss() { - return time_ns() / 1e9; // TIMER_E9; -} -double time_mm() { - return time_ss() / 60; -} -double time_hh() { - return time_mm() / 60; -} - -void sleep_ns( double ns ) { -#if is(win32) - if( ns >= 100 ) { - LARGE_INTEGER li; // Windows sleep in 100ns units - HANDLE timer = CreateWaitableTimer(NULL, TRUE, NULL); - li.QuadPart = (LONGLONG)(__int64)(-ns/100); // Negative for relative time - SetWaitableTimer(timer, &li, 0, NULL, NULL, FALSE); - WaitForSingleObject(timer, INFINITE); - CloseHandle(timer); -#else - if( ns > 0 ) { - struct timespec wait = {0}; - wait.tv_sec = ns / 1e9; - wait.tv_nsec = ns - wait.tv_sec * 1e9; - nanosleep(&wait, NULL); -#endif - } else { -#if is(win32) - Sleep(0); // yield, Sleep(0), SwitchToThread -#else - usleep(0); -#endif - } -} -void sleep_us( double us ) { - sleep_ns(us * 1e3); -} -void sleep_ms( double ms ) { - sleep_ns(ms * 1e6); -} -void sleep_ss( double ss ) { - sleep_ns(ss * 1e9); -} - -// ---------------------------------------------------------------------------- -// timer - -struct timer_internal_t { - unsigned ms; - unsigned (*callback)(unsigned interval, void *arg); - void *arg; - thread_ptr_t thd; -}; - -static int timer_func(void *arg) { - struct timer_internal_t *p = (struct timer_internal_t*)arg; - - sleep_ms( p->ms ); - - for( ;; ) { - unsigned then = time_ms(); - - p->ms = p->callback(p->ms, p->arg); - if( !p->ms ) break; - - unsigned now = time_ms(); - unsigned lapse = now - then; - int diff = p->ms - lapse; - sleep_ms( diff <= 0 ? 0 : diff ); - } - - thread_exit(0); - return 0; -} - -static __thread array(struct timer_internal_t *) timers; - -unsigned timer(unsigned ms, unsigned (*callback)(unsigned ms, void *arg), void *arg) { - struct timer_internal_t *p = MALLOC( sizeof(struct timer_internal_t) ); - p->ms = ms; - p->callback = callback; - p->arg = arg; - p->thd = thread_init( timer_func, p, "", 0 ); - - array_push(timers, p); - return array_count(timers); -} -void timer_destroy(unsigned i) { - if( i-- ) { - thread_join(timers[i]->thd); - thread_term(timers[i]->thd); - FREE(timers[i]); - timers[i] = 0; - } -} - -// ---------------------------------------------------------------------------- -// guid - -//typedef vec3i guid; - -guid guid_create() { - static __thread unsigned counter = 0; - static uint64_t appid = 0; do_once appid = hash_str(app_name()); - - union conv { - struct { - unsigned timestamp : 32; - unsigned threadid : 16; // inverted order in LE - unsigned appid : 16; // - unsigned counter : 32; - }; - vec3i v3; - } c; - c.timestamp = date_epoch() - 0x65000000; - c.appid = (unsigned)appid; - c.threadid = (unsigned)(uintptr_t)thread_current_thread_id(); - c.counter = ++counter; - - return c.v3; -} - -// ---------------------------------------------------------------------------- -// ease - -float ease_zero(float t) { return 0; } -float ease_one(float t) { return 1; } -float ease_linear(float t) { return t; } - -float ease_out_sine(float t) { return sinf(t*(C_PI*0.5f)); } -float ease_out_quad(float t) { return -(t*(t-2)); } -float ease_out_cubic(float t) { float f=t-1; return f*f*f+1; } -float ease_out_quart(float t) { float f=t-1; return f*f*f*(1-t)+1; } -float ease_out_quint(float t) { float f=(t-1); return f*f*f*f*f+1; } -float ease_out_expo(float t) { return (t >= 1) ? t : 1-powf(2,-10*t); } -float ease_out_circ(float t) { return sqrtf((2-t)*t); } -float ease_out_back(float t) { float f=1-t; return 1-(f*f*f-f*sinf(f*C_PI)); } -float ease_out_elastic(float t) { return sinf(-13*(C_PI*0.5f)*(t+1))*powf(2,-10*t)+1; } -float ease_out_bounce(float t) { return (t < 4.f/11) ? (121.f*t*t)/16 : (t < 8.f/11) ? (363.f/40*t*t)-(99.f/10*t)+17.f/5 : (t < 9.f/10) ? (4356.f/361*t*t)-(35442.f/1805*t)+16061.f/1805 : (54.f/5*t*t)-(513.f/25*t)+268.f/25; } - -float ease_in_sine(float t) { return 1+sinf((t-1)*(C_PI*0.5f)); } -float ease_in_quad(float t) { return t*t; } -float ease_in_cubic(float t) { return t*t*t; } -float ease_in_quart(float t) { return t*t*t*t; } -float ease_in_quint(float t) { return t*t*t*t*t; } -float ease_in_expo(float t) { return (t <= 0) ? t : powf(2,10*(t-1)); } -float ease_in_circ(float t) { return 1-sqrtf(1-(t*t)); } -float ease_in_back(float t) { return t*t*t-t*sinf(t*C_PI); } -float ease_in_elastic(float t) { return sinf(13*(C_PI*0.5f)*t)*powf(2,10*(t-1)); } -float ease_in_bounce(float t) { return 1-ease_out_bounce(1-t); } - -float ease_inout_sine(float t) { return 0.5f*(1-cosf(t*C_PI)); } -float ease_inout_quad(float t) { return (t < 0.5f) ? 2*t*t : (-2*t*t)+(4*t)-1; } -float ease_inout_cubic(float t) { float f; return (t < 0.5f) ? 4*t*t*t : (f=(2*t)-2,0.5f*f*f*f+1); } -float ease_inout_quart(float t) { float f; return (t < 0.5f) ? 8*t*t*t*t : (f=(t-1),-8*f*f*f*f+1); } -float ease_inout_quint(float t) { float f; return (t < 0.5f) ? 16*t*t*t*t*t : (f=((2*t)-2),0.5f*f*f*f*f*f+1); } -float ease_inout_expo(float t) { return (t <= 0 || t >= 1) ? t : t < 0.5f ? 0.5f*powf(2,(20*t)-10) : -0.5f*powf(2,(-20*t)+10)+1; } -float ease_inout_circ(float t) { return t < 0.5f ? 0.5f*(1-sqrtf(1-4*(t*t))) : 0.5f*(sqrtf(-((2*t)-3)*((2*t)-1))+1); } -float ease_inout_back(float t) { float f; return t < 0.5f ? (f=2*t,0.5f*(f*f*f-f*sinf(f*C_PI))) : (f=(1-(2*t-1)),0.5f*(1-(f*f*f-f*sinf(f*C_PI)))+0.5f); } -float ease_inout_elastic(float t) { return t < 0.5f ? 0.5f*sinf(13*(C_PI*0.5f)*(2*t))*powf(2,10*((2*t)-1)) : 0.5f*(sinf(-13*(C_PI*0.5f)*((2*t-1)+1))*powf(2,-10*(2*t-1))+2); } -float ease_inout_bounce(float t) { return t < 0.5f ? 0.5f*ease_in_bounce(t*2) : 0.5f*ease_out_bounce(t*2-1)+0.5f; } - -float ease_inout_perlin(float t) { float t3=t*t*t,t4=t3*t,t5=t4*t; return 6*t5-15*t4+10*t3; } - -float ease(float t01, unsigned mode) { - typedef float (*easing)(float); - easing modes[] = { - ease_out_sine, - ease_out_quad, - ease_out_cubic, - ease_out_quart, - ease_out_quint, - ease_out_expo, - ease_out_circ, - ease_out_back, - ease_out_elastic, - ease_out_bounce, - - ease_in_sine, - ease_in_quad, - ease_in_cubic, - ease_in_quart, - ease_in_quint, - ease_in_expo, - ease_in_circ, - ease_in_back, - ease_in_elastic, - ease_in_bounce, - - ease_inout_sine, - ease_inout_quad, - ease_inout_cubic, - ease_inout_quart, - ease_inout_quint, - ease_inout_expo, - ease_inout_circ, - ease_inout_back, - ease_inout_elastic, - ease_inout_bounce, - - ease_zero, - ease_one, - ease_linear, - ease_inout_perlin, - }; - return modes[clampi(mode, 0, countof(modes))](clampf(t01,0,1)); -} - -float ease_pong(float t, unsigned fn) { return 1 - ease(t, fn); } -float ease_ping_pong(float t, unsigned fn1, unsigned fn2) { return t < 0.5 ? ease(t*2,fn1) : ease(1-(t-0.5)*2,fn2); } -float ease_pong_ping(float t, unsigned fn1, unsigned fn2) { return 1 - ease_ping_pong(t,fn1,fn2); } - - -const char **ease_enums() { - static const char *list[] = { - "ease_out_sine", - "ease_out_quad", - "ease_out_cubic", - "ease_out_quart", - "ease_out_quint", - "ease_out_expo", - "ease_out_circ", - "ease_out_back", - "ease_out_elastic", - "ease_out_bounce", - - "ease_in_sine", - "ease_in_quad", - "ease_in_cubic", - "ease_in_quart", - "ease_in_quint", - "ease_in_expo", - "ease_in_circ", - "ease_in_back", - "ease_in_elastic", - "ease_in_bounce", - - "ease_inout_sine", - "ease_inout_quad", - "ease_inout_cubic", - "ease_inout_quart", - "ease_inout_quint", - "ease_inout_expo", - "ease_inout_circ", - "ease_inout_back", - "ease_inout_elastic", - "ease_inout_bounce", - - "ease_zero", - "ease_one", - "ease_linear", - "ease_inout_perlin", - - 0 - }; - return list; -} - -const char *ease_enum(unsigned mode) { - return mode[ ease_enums() ]; -} - -/*AUTORUN { - ENUM(EASE_LINEAR|EASE_OUT); - ENUM(EASE_SINE|EASE_OUT); - ENUM(EASE_QUAD|EASE_OUT); - ENUM(EASE_CUBIC|EASE_OUT); - ENUM(EASE_QUART|EASE_OUT); - ENUM(EASE_QUINT|EASE_OUT); - ENUM(EASE_EXPO|EASE_OUT); - ENUM(EASE_CIRC|EASE_OUT); - ENUM(EASE_BACK|EASE_OUT); - ENUM(EASE_ELASTIC|EASE_OUT); - ENUM(EASE_BOUNCE|EASE_OUT); - - ENUM(EASE_SINE|EASE_IN); - ENUM(EASE_QUAD|EASE_IN); - ENUM(EASE_CUBIC|EASE_IN); - ENUM(EASE_QUART|EASE_IN); - ENUM(EASE_QUINT|EASE_IN); - ENUM(EASE_EXPO|EASE_IN); - ENUM(EASE_CIRC|EASE_IN); - ENUM(EASE_BACK|EASE_IN); - ENUM(EASE_ELASTIC|EASE_IN); - ENUM(EASE_BOUNCE|EASE_IN); - - ENUM(EASE_SINE|EASE_INOUT); - ENUM(EASE_QUAD|EASE_INOUT); - ENUM(EASE_CUBIC|EASE_INOUT); - ENUM(EASE_QUART|EASE_INOUT); - ENUM(EASE_QUINT|EASE_INOUT); - ENUM(EASE_EXPO|EASE_INOUT); - ENUM(EASE_CIRC|EASE_INOUT); - ENUM(EASE_BACK|EASE_INOUT); - ENUM(EASE_ELASTIC|EASE_INOUT); - ENUM(EASE_BOUNCE|EASE_INOUT); - - ENUM(EASE_ZERO); - ENUM(EASE_ONE); - ENUM(EASE_LINEAR); - ENUM(EASE_INOUT_PERLIN); -};*/ - -// ---------------------------------------------------------------------------- -// tween - -tween_t tween() { - tween_t tw = {0}; - return tw; -} - -float tween_update(tween_t *tw, float dt) { - if( !array_count(tw->keyframes) ) return 0.0f; - - for( int i = 0, end = array_count(tw->keyframes) - 1; i < end; ++i ) { - tween_keyframe_t *kf1 = &tw->keyframes[i]; - tween_keyframe_t *kf2 = &tw->keyframes[i + 1]; - if (tw->time >= kf1->t && tw->time <= kf2->t) { - float localT = (tw->time - kf1->t) / (kf2->t - kf1->t); - float easedT = ease(localT, kf1->ease); - tw->result = mix3(kf1->v, kf2->v, easedT); - break; - } - } - - float done = (tw->time / tw->duration); - tw->time += dt; - return clampf(done, 0.0f, 1.0f); -} - -void tween_reset(tween_t *tw) { - tw->time = 0.0f; -} - -void tween_destroy(tween_t *tw) { - tween_t tw_ = {0}; - array_free(tw->keyframes); - *tw = tw_; -} - -static INLINE -int tween_comp_keyframes(const void *a, const void *b) { - float t1 = ((const tween_keyframe_t*)a)->t; - float t2 = ((const tween_keyframe_t*)b)->t; - return (t1 > t2) - (t1 < t2); -} - -void tween_setkey(tween_t *tw, float t, vec3 v, unsigned mode) { - tween_keyframe_t keyframe = { t, v, mode }; - array_push(tw->keyframes, keyframe); - array_sort(tw->keyframes, tween_comp_keyframes); - tw->duration = array_back(tw->keyframes)->t; -} - -void tween_delkey(tween_t *tw, float t) { // @todo: untested - for( int i = 0, end = array_count(tw->keyframes); i < end; i++ ) { - if( tw->keyframes[i].t == t ) { - array_erase_slow(tw->keyframes, i); - tw->duration = array_back(tw->keyframes)->t; - return; - } - } -} - -// ---------------------------------------------------------------------------- -// curve - -curve_t curve() { - curve_t c = {0}; - return c; -} - -static INLINE -vec3 catmull( vec3 p0, vec3 p1, vec3 p2, vec3 p3, float t ) { - float t2 = t*t; - float t3 = t*t*t; - - vec3 c; - c.x = 0.5 * ((2 * p1.x) + (-p0.x + p2.x) * t + (2 * p0.x - 5 * p1.x + 4 * p2.x - p3.x) * t2 + (-p0.x + 3 * p1.x - 3 * p2.x + p3.x) * t3); - c.y = 0.5 * ((2 * p1.y) + (-p0.y + p2.y) * t + (2 * p0.y - 5 * p1.y + 4 * p2.y - p3.y) * t2 + (-p0.y + 3 * p1.y - 3 * p2.y + p3.y) * t3); - c.z = 0.5 * ((2 * p1.z) + (-p0.z + p2.z) * t + (2 * p0.z - 5 * p1.z + 4 * p2.z - p3.z) * t2 + (-p0.z + 3 * p1.z - 3 * p2.z + p3.z) * t3); - return c; -} - -void curve_add(curve_t *c, vec3 p) { - array_push(c->points, p); -} - -void curve_end( curve_t *c, int k ) { - ASSERT( k > 0 ); - - array_free(c->lengths); - array_free(c->samples); - array_free(c->indices); - array_free(c->colors); - - // refit points[N] to samples[K] - int N = array_count(c->points); - if( k < N ) { - // truncate: expected k-points lesser or equal than existing N points - for( int i = 0; i <= k; ++i ) { - float s = (float)i / k; - int t = s * (N-1); - array_push(c->samples, c->points[t]); - - float p = fmod(i, N-1) / (N-1); // [0..1) - int is_control_point = p <= 0 || p >= 1; - array_push(c->colors, is_control_point ? ORANGE: BLUE); - } - - } else { - // interpolate: expected k-points greater than existing N-points - --N; - int upper = N - (k%N); - int lower = (k%N); - if(upper < lower) - k += upper; - else - k -= lower; - - int points_per_segment = (k / N); - ++N; - - int looped = len3sq(sub3(c->points[0], *array_back(c->points))) < 0.1; - - for( int i = 0; i <= k; ++i ) { - int point = i % points_per_segment; - float p = point / (float)points_per_segment; // [0..1) - int t = i / points_per_segment; - - // linear - vec3 l = mix3(c->points[t], c->points[t+(i!=k)], p); - - // printf("%d) %d>%d %f\n", i, t, t+(i!=k), p); - ASSERT(p <= 1); - - // catmull - int p0 = t - 1; - int p1 = t + 0; - int p2 = t + 1; - int p3 = t + 2; - if( looped ) - { - int M = N-1; - if(p0<0) p0+=M; else if(p0>=M) p0-=M; - if(p1<0) p1+=M; else if(p1>=M) p1-=M; - if(p2<0) p2+=M; else if(p2>=M) p2-=M; - if(p3<0) p3+=M; else if(p3>=M) p3-=M; - } - else - { - int M = N-1; - if(p0<0) p0=0; else if(p0>=M) p0=M; - if(p1<0) p1=0; else if(p1>=M) p1=M; - if(p2<0) p2=0; else if(p2>=M) p2=M; - if(p3<0) p3=0; else if(p3>=M) p3=M; - } - vec3 m = catmull(c->points[p0],c->points[p1],c->points[p2],c->points[p3],p); - l = m; - - array_push(c->samples, l); - - int is_control_point = p <= 0 || p >= 1; - array_push(c->colors, is_control_point ? ORANGE: BLUE); - } - } - - array_push(c->lengths, 0 ); - for( int i = 1; i <= k; ++i ) { - // approximate curve length at every sample point - array_push(c->lengths, len3(sub3(c->samples[i], c->samples[i-1])) + c->lengths[i-1] ); - } - // normalize lengths to be between 0 and 1 - float maxv = c->lengths[k]; - for( int i = 1; i <= k; ++i ) c->lengths[i] /= maxv; - - array_push(c->indices, 0 ); - for( int i = 0/*1*/; i indices) + 1; j lengths[j] lengths[j] > 0.01) - array_push(c->indices, j ); - } -} - -vec3 curve_eval(curve_t *c, float dt, unsigned *color) { - dt = clampf(dt, 0.0f, 1.0f); - int l = (int)(array_count(c->indices) - 1); - int p = (int)(dt * l); - int t = c->indices[p]; - - t %= (array_count(c->indices)-1); - vec3 pos = mix3(c->samples[t], c->samples[t+1], dt * l - p); - if(color) *color = c->colors[t]; - - return pos; -} - -void curve_destroy(curve_t *c) { - array_free(c->lengths); - array_free(c->colors); - array_free(c->samples); - array_free(c->points); - array_free(c->indices); -} +// ---------------------------------------------------------------------------- +// time + +#if 0 +uint64_t time_gpu() { + GLint64 t = 123456789; + glGetInteger64v(GL_TIMESTAMP, &t); + return (uint64_t)t; +} +#endif +uint64_t date() { + time_t epoch = time(0); + struct tm *ti = localtime(&epoch); + return atoi64(va("%04d%02d%02d%02d%02d%02d",ti->tm_year+1900,ti->tm_mon+1,ti->tm_mday,ti->tm_hour,ti->tm_min,ti->tm_sec)); +} +char *date_string() { + time_t epoch = time(0); + struct tm *ti = localtime(&epoch); + return va("%04d-%02d-%02d %02d:%02d:%02d",ti->tm_year+1900,ti->tm_mon+1,ti->tm_mday,ti->tm_hour,ti->tm_min,ti->tm_sec); +} +uint64_t date_epoch() { + time_t epoch = time(0); + return epoch; +} +#if 0 +double time_ss() { + return glfwGetTime(); +} +double time_ms() { + return glfwGetTime() * 1000.0; +} +uint64_t time_us() { + return (uint64_t)(glfwGetTime() * 1000000.0); // @fixme: use a high resolution timer instead, or time_gpu below +} +uint64_t sleep_us(uint64_t us) { // @fixme: use a high resolution sleeper instead + return sleep_ms( us / 1000.0 ); +} +double sleep_ms(double ms) { + double now = time_ms(); + if( ms <= 0 ) { +#if is(win32) + Sleep(0); // yield +#else + usleep(0); +#endif + } else { +#if is(win32) + Sleep(ms); +#else + usleep(ms * 1000); +#endif + } + return time_ms() - now; +} +double sleep_ss(double ss) { + return sleep_ms( ss * 1000 ) / 1000.0; +} +#endif + +// high-perf functions + +#define TIMER_E3 1000ULL +#define TIMER_E6 1000000ULL +#define TIMER_E9 1000000000ULL + +#ifdef CLOCK_MONOTONIC_RAW +#define TIME_MONOTONIC CLOCK_MONOTONIC_RAW +#elif defined CLOCK_MONOTONIC +#define TIME_MONOTONIC CLOCK_MONOTONIC +#else +// #define TIME_MONOTONIC CLOCK_REALTIME // untested +#endif + +static uint64_t nanotimer(uint64_t *out_freq) { + if( out_freq ) { +#if is(win32) + LARGE_INTEGER li; + QueryPerformanceFrequency(&li); + *out_freq = li.QuadPart; +//#elif is(ANDROID) +// *out_freq = CLOCKS_PER_SEC; +#elif defined TIME_MONOTONIC + *out_freq = TIMER_E9; +#else + *out_freq = TIMER_E6; +#endif + } +#if is(win32) + LARGE_INTEGER li; + QueryPerformanceCounter(&li); + return (uint64_t)li.QuadPart; +//#elif is(ANDROID) +// return (uint64_t)clock(); +#elif defined TIME_MONOTONIC + struct timespec ts; + clock_gettime(TIME_MONOTONIC, &ts); + return (TIMER_E9 * (uint64_t)ts.tv_sec) + ts.tv_nsec; +#else + struct timeval tv; + gettimeofday(&tv, NULL); + return (TIMER_E6 * (uint64_t)tv.tv_sec) + tv.tv_usec; +#endif +} + +uint64_t time_ns() { + static __thread uint64_t epoch = 0; + static __thread uint64_t freq = 0; + if( !freq ) { + epoch = nanotimer(&freq); + } + + uint64_t a = nanotimer(NULL) - epoch; + uint64_t b = TIMER_E9; + uint64_t c = freq; + + // Computes (a*b)/c without overflow, as long as both (a*b) and the overall result fit into 64-bits. + // [ref] https://github.com/rust-lang/rust/blob/3809bbf47c8557bd149b3e52ceb47434ca8378d5/src/libstd/sys_common/mod.rs#L124 + uint64_t q = a / c; + uint64_t r = a % c; + return q * b + r * b / c; +} +uint64_t time_us() { + return time_ns() / TIMER_E3; +} +uint64_t time_ms() { + return time_ns() / TIMER_E6; +} +double time_ss() { + return time_ns() / 1e9; // TIMER_E9; +} +double time_mm() { + return time_ss() / 60; +} +double time_hh() { + return time_mm() / 60; +} + +void sleep_ns( double ns ) { +#if is(win32) + if( ns >= 100 ) { + LARGE_INTEGER li; // Windows sleep in 100ns units + HANDLE timer = CreateWaitableTimer(NULL, TRUE, NULL); + li.QuadPart = (LONGLONG)(__int64)(-ns/100); // Negative for relative time + SetWaitableTimer(timer, &li, 0, NULL, NULL, FALSE); + WaitForSingleObject(timer, INFINITE); + CloseHandle(timer); +#else + if( ns > 0 ) { + struct timespec wait = {0}; + wait.tv_sec = ns / 1e9; + wait.tv_nsec = ns - wait.tv_sec * 1e9; + nanosleep(&wait, NULL); +#endif + } else { +#if is(win32) + Sleep(0); // yield, Sleep(0), SwitchToThread +#else + usleep(0); +#endif + } +} +void sleep_us( double us ) { + sleep_ns(us * 1e3); +} +void sleep_ms( double ms ) { + sleep_ns(ms * 1e6); +} +void sleep_ss( double ss ) { + sleep_ns(ss * 1e9); +} + +// ---------------------------------------------------------------------------- +// timer + +struct timer_internal_t { + unsigned ms; + unsigned (*callback)(unsigned interval, void *arg); + void *arg; + thread_ptr_t thd; +}; + +static int timer_func(void *arg) { + struct timer_internal_t *p = (struct timer_internal_t*)arg; + + sleep_ms( p->ms ); + + for( ;; ) { + unsigned then = time_ms(); + + p->ms = p->callback(p->ms, p->arg); + if( !p->ms ) break; + + unsigned now = time_ms(); + unsigned lapse = now - then; + int diff = p->ms - lapse; + sleep_ms( diff <= 0 ? 0 : diff ); + } + + thread_exit(0); + return 0; +} + +static __thread array(struct timer_internal_t *) timers; + +unsigned timer(unsigned ms, unsigned (*callback)(unsigned ms, void *arg), void *arg) { + struct timer_internal_t *p = MALLOC( sizeof(struct timer_internal_t) ); + p->ms = ms; + p->callback = callback; + p->arg = arg; + p->thd = thread_init( timer_func, p, "", 0 ); + + array_push(timers, p); + return array_count(timers); +} +void timer_destroy(unsigned i) { + if( i-- ) { + thread_join(timers[i]->thd); + thread_term(timers[i]->thd); + FREE(timers[i]); + timers[i] = 0; + } +} + +// ---------------------------------------------------------------------------- +// guid + +//typedef vec3i guid; + +guid guid_create() { + static __thread unsigned counter = 0; + static uint64_t appid = 0; do_once appid = hash_str(app_name()); + + union conv { + struct { + unsigned timestamp : 32; + unsigned threadid : 16; // inverted order in LE + unsigned appid : 16; // + unsigned counter : 32; + }; + vec3i v3; + } c; + c.timestamp = date_epoch() - 0x65000000; + c.appid = (unsigned)appid; + c.threadid = (unsigned)(uintptr_t)thread_current_thread_id(); + c.counter = ++counter; + + return c.v3; +} + +// ---------------------------------------------------------------------------- +// ease + +float ease_zero(float t) { return 0; } +float ease_one(float t) { return 1; } +float ease_linear(float t) { return t; } + +float ease_out_sine(float t) { return sinf(t*(C_PI*0.5f)); } +float ease_out_quad(float t) { return -(t*(t-2)); } +float ease_out_cubic(float t) { float f=t-1; return f*f*f+1; } +float ease_out_quart(float t) { float f=t-1; return f*f*f*(1-t)+1; } +float ease_out_quint(float t) { float f=(t-1); return f*f*f*f*f+1; } +float ease_out_expo(float t) { return (t >= 1) ? t : 1-powf(2,-10*t); } +float ease_out_circ(float t) { return sqrtf((2-t)*t); } +float ease_out_back(float t) { float f=1-t; return 1-(f*f*f-f*sinf(f*C_PI)); } +float ease_out_elastic(float t) { return sinf(-13*(C_PI*0.5f)*(t+1))*powf(2,-10*t)+1; } +float ease_out_bounce(float t) { return (t < 4.f/11) ? (121.f*t*t)/16 : (t < 8.f/11) ? (363.f/40*t*t)-(99.f/10*t)+17.f/5 : (t < 9.f/10) ? (4356.f/361*t*t)-(35442.f/1805*t)+16061.f/1805 : (54.f/5*t*t)-(513.f/25*t)+268.f/25; } + +float ease_in_sine(float t) { return 1+sinf((t-1)*(C_PI*0.5f)); } +float ease_in_quad(float t) { return t*t; } +float ease_in_cubic(float t) { return t*t*t; } +float ease_in_quart(float t) { return t*t*t*t; } +float ease_in_quint(float t) { return t*t*t*t*t; } +float ease_in_expo(float t) { return (t <= 0) ? t : powf(2,10*(t-1)); } +float ease_in_circ(float t) { return 1-sqrtf(1-(t*t)); } +float ease_in_back(float t) { return t*t*t-t*sinf(t*C_PI); } +float ease_in_elastic(float t) { return sinf(13*(C_PI*0.5f)*t)*powf(2,10*(t-1)); } +float ease_in_bounce(float t) { return 1-ease_out_bounce(1-t); } + +float ease_inout_sine(float t) { return 0.5f*(1-cosf(t*C_PI)); } +float ease_inout_quad(float t) { return (t < 0.5f) ? 2*t*t : (-2*t*t)+(4*t)-1; } +float ease_inout_cubic(float t) { float f; return (t < 0.5f) ? 4*t*t*t : (f=(2*t)-2,0.5f*f*f*f+1); } +float ease_inout_quart(float t) { float f; return (t < 0.5f) ? 8*t*t*t*t : (f=(t-1),-8*f*f*f*f+1); } +float ease_inout_quint(float t) { float f; return (t < 0.5f) ? 16*t*t*t*t*t : (f=((2*t)-2),0.5f*f*f*f*f*f+1); } +float ease_inout_expo(float t) { return (t <= 0 || t >= 1) ? t : t < 0.5f ? 0.5f*powf(2,(20*t)-10) : -0.5f*powf(2,(-20*t)+10)+1; } +float ease_inout_circ(float t) { return t < 0.5f ? 0.5f*(1-sqrtf(1-4*(t*t))) : 0.5f*(sqrtf(-((2*t)-3)*((2*t)-1))+1); } +float ease_inout_back(float t) { float f; return t < 0.5f ? (f=2*t,0.5f*(f*f*f-f*sinf(f*C_PI))) : (f=(1-(2*t-1)),0.5f*(1-(f*f*f-f*sinf(f*C_PI)))+0.5f); } +float ease_inout_elastic(float t) { return t < 0.5f ? 0.5f*sinf(13*(C_PI*0.5f)*(2*t))*powf(2,10*((2*t)-1)) : 0.5f*(sinf(-13*(C_PI*0.5f)*((2*t-1)+1))*powf(2,-10*(2*t-1))+2); } +float ease_inout_bounce(float t) { return t < 0.5f ? 0.5f*ease_in_bounce(t*2) : 0.5f*ease_out_bounce(t*2-1)+0.5f; } + +float ease_inout_perlin(float t) { float t3=t*t*t,t4=t3*t,t5=t4*t; return 6*t5-15*t4+10*t3; } + +float ease(float t01, unsigned mode) { + typedef float (*easing)(float); + easing modes[] = { + ease_out_sine, + ease_out_quad, + ease_out_cubic, + ease_out_quart, + ease_out_quint, + ease_out_expo, + ease_out_circ, + ease_out_back, + ease_out_elastic, + ease_out_bounce, + + ease_in_sine, + ease_in_quad, + ease_in_cubic, + ease_in_quart, + ease_in_quint, + ease_in_expo, + ease_in_circ, + ease_in_back, + ease_in_elastic, + ease_in_bounce, + + ease_inout_sine, + ease_inout_quad, + ease_inout_cubic, + ease_inout_quart, + ease_inout_quint, + ease_inout_expo, + ease_inout_circ, + ease_inout_back, + ease_inout_elastic, + ease_inout_bounce, + + ease_zero, + ease_one, + ease_linear, + ease_inout_perlin, + }; + return modes[clampi(mode, 0, countof(modes))](clampf(t01,0,1)); +} + +float ease_pong(float t, unsigned fn) { return 1 - ease(t, fn); } +float ease_ping_pong(float t, unsigned fn1, unsigned fn2) { return t < 0.5 ? ease(t*2,fn1) : ease(1-(t-0.5)*2,fn2); } +float ease_pong_ping(float t, unsigned fn1, unsigned fn2) { return 1 - ease_ping_pong(t,fn1,fn2); } + + +const char **ease_enums() { + static const char *list[] = { + "ease_out_sine", + "ease_out_quad", + "ease_out_cubic", + "ease_out_quart", + "ease_out_quint", + "ease_out_expo", + "ease_out_circ", + "ease_out_back", + "ease_out_elastic", + "ease_out_bounce", + + "ease_in_sine", + "ease_in_quad", + "ease_in_cubic", + "ease_in_quart", + "ease_in_quint", + "ease_in_expo", + "ease_in_circ", + "ease_in_back", + "ease_in_elastic", + "ease_in_bounce", + + "ease_inout_sine", + "ease_inout_quad", + "ease_inout_cubic", + "ease_inout_quart", + "ease_inout_quint", + "ease_inout_expo", + "ease_inout_circ", + "ease_inout_back", + "ease_inout_elastic", + "ease_inout_bounce", + + "ease_zero", + "ease_one", + "ease_linear", + "ease_inout_perlin", + + 0 + }; + return list; +} + +const char *ease_enum(unsigned mode) { + return mode[ ease_enums() ]; +} + +/*AUTORUN { + ENUM(EASE_LINEAR|EASE_OUT); + ENUM(EASE_SINE|EASE_OUT); + ENUM(EASE_QUAD|EASE_OUT); + ENUM(EASE_CUBIC|EASE_OUT); + ENUM(EASE_QUART|EASE_OUT); + ENUM(EASE_QUINT|EASE_OUT); + ENUM(EASE_EXPO|EASE_OUT); + ENUM(EASE_CIRC|EASE_OUT); + ENUM(EASE_BACK|EASE_OUT); + ENUM(EASE_ELASTIC|EASE_OUT); + ENUM(EASE_BOUNCE|EASE_OUT); + + ENUM(EASE_SINE|EASE_IN); + ENUM(EASE_QUAD|EASE_IN); + ENUM(EASE_CUBIC|EASE_IN); + ENUM(EASE_QUART|EASE_IN); + ENUM(EASE_QUINT|EASE_IN); + ENUM(EASE_EXPO|EASE_IN); + ENUM(EASE_CIRC|EASE_IN); + ENUM(EASE_BACK|EASE_IN); + ENUM(EASE_ELASTIC|EASE_IN); + ENUM(EASE_BOUNCE|EASE_IN); + + ENUM(EASE_SINE|EASE_INOUT); + ENUM(EASE_QUAD|EASE_INOUT); + ENUM(EASE_CUBIC|EASE_INOUT); + ENUM(EASE_QUART|EASE_INOUT); + ENUM(EASE_QUINT|EASE_INOUT); + ENUM(EASE_EXPO|EASE_INOUT); + ENUM(EASE_CIRC|EASE_INOUT); + ENUM(EASE_BACK|EASE_INOUT); + ENUM(EASE_ELASTIC|EASE_INOUT); + ENUM(EASE_BOUNCE|EASE_INOUT); + + ENUM(EASE_ZERO); + ENUM(EASE_ONE); + ENUM(EASE_LINEAR); + ENUM(EASE_INOUT_PERLIN); +};*/ + +// ---------------------------------------------------------------------------- +// tween + +tween_t tween() { + tween_t tw = {0}; + return tw; +} + +float tween_update(tween_t *tw, float dt) { + if( !array_count(tw->keyframes) ) return 0.0f; + + for( int i = 0, end = array_count(tw->keyframes) - 1; i < end; ++i ) { + tween_keyframe_t *kf1 = &tw->keyframes[i]; + tween_keyframe_t *kf2 = &tw->keyframes[i + 1]; + if (tw->time >= kf1->t && tw->time <= kf2->t) { + float localT = (tw->time - kf1->t) / (kf2->t - kf1->t); + float easedT = ease(localT, kf1->ease); + tw->result = mix3(kf1->v, kf2->v, easedT); + break; + } + } + + float done = (tw->time / tw->duration); + tw->time += dt; + return clampf(done, 0.0f, 1.0f); +} + +void tween_reset(tween_t *tw) { + tw->time = 0.0f; +} + +void tween_destroy(tween_t *tw) { + tween_t tw_ = {0}; + array_free(tw->keyframes); + *tw = tw_; +} + +static INLINE +int tween_comp_keyframes(const void *a, const void *b) { + float t1 = ((const tween_keyframe_t*)a)->t; + float t2 = ((const tween_keyframe_t*)b)->t; + return (t1 > t2) - (t1 < t2); +} + +void tween_setkey(tween_t *tw, float t, vec3 v, unsigned mode) { + tween_keyframe_t keyframe = { t, v, mode }; + array_push(tw->keyframes, keyframe); + array_sort(tw->keyframes, tween_comp_keyframes); + tw->duration = array_back(tw->keyframes)->t; +} + +void tween_delkey(tween_t *tw, float t) { // @todo: untested + for( int i = 0, end = array_count(tw->keyframes); i < end; i++ ) { + if( tw->keyframes[i].t == t ) { + array_erase_slow(tw->keyframes, i); + tw->duration = array_back(tw->keyframes)->t; + return; + } + } +} + +// ---------------------------------------------------------------------------- +// curve + +curve_t curve() { + curve_t c = {0}; + return c; +} + +static INLINE +vec3 catmull( vec3 p0, vec3 p1, vec3 p2, vec3 p3, float t ) { + float t2 = t*t; + float t3 = t*t*t; + + vec3 c; + c.x = 0.5 * ((2 * p1.x) + (-p0.x + p2.x) * t + (2 * p0.x - 5 * p1.x + 4 * p2.x - p3.x) * t2 + (-p0.x + 3 * p1.x - 3 * p2.x + p3.x) * t3); + c.y = 0.5 * ((2 * p1.y) + (-p0.y + p2.y) * t + (2 * p0.y - 5 * p1.y + 4 * p2.y - p3.y) * t2 + (-p0.y + 3 * p1.y - 3 * p2.y + p3.y) * t3); + c.z = 0.5 * ((2 * p1.z) + (-p0.z + p2.z) * t + (2 * p0.z - 5 * p1.z + 4 * p2.z - p3.z) * t2 + (-p0.z + 3 * p1.z - 3 * p2.z + p3.z) * t3); + return c; +} + +void curve_add(curve_t *c, vec3 p) { + array_push(c->points, p); +} + +void curve_end( curve_t *c, int k ) { + ASSERT( k > 0 ); + + array_free(c->lengths); + array_free(c->samples); + array_free(c->indices); + array_free(c->colors); + + // refit points[N] to samples[K] + int N = array_count(c->points); + if( k < N ) { + // truncate: expected k-points lesser or equal than existing N points + for( int i = 0; i <= k; ++i ) { + float s = (float)i / k; + int t = s * (N-1); + array_push(c->samples, c->points[t]); + + float p = fmod(i, N-1) / (N-1); // [0..1) + int is_control_point = p <= 0 || p >= 1; + array_push(c->colors, is_control_point ? ORANGE: BLUE); + } + + } else { + // interpolate: expected k-points greater than existing N-points + --N; + int upper = N - (k%N); + int lower = (k%N); + if(upper < lower) + k += upper; + else + k -= lower; + + int points_per_segment = (k / N); + ++N; + + int looped = len3sq(sub3(c->points[0], *array_back(c->points))) < 0.1; + + for( int i = 0; i <= k; ++i ) { + int point = i % points_per_segment; + float p = point / (float)points_per_segment; // [0..1) + int t = i / points_per_segment; + + // linear + vec3 l = mix3(c->points[t], c->points[t+(i!=k)], p); + + // printf("%d) %d>%d %f\n", i, t, t+(i!=k), p); + ASSERT(p <= 1); + + // catmull + int p0 = t - 1; + int p1 = t + 0; + int p2 = t + 1; + int p3 = t + 2; + if( looped ) + { + int M = N-1; + if(p0<0) p0+=M; else if(p0>=M) p0-=M; + if(p1<0) p1+=M; else if(p1>=M) p1-=M; + if(p2<0) p2+=M; else if(p2>=M) p2-=M; + if(p3<0) p3+=M; else if(p3>=M) p3-=M; + } + else + { + int M = N-1; + if(p0<0) p0=0; else if(p0>=M) p0=M; + if(p1<0) p1=0; else if(p1>=M) p1=M; + if(p2<0) p2=0; else if(p2>=M) p2=M; + if(p3<0) p3=0; else if(p3>=M) p3=M; + } + vec3 m = catmull(c->points[p0],c->points[p1],c->points[p2],c->points[p3],p); + l = m; + + array_push(c->samples, l); + + int is_control_point = p <= 0 || p >= 1; + array_push(c->colors, is_control_point ? ORANGE: BLUE); + } + } + + array_push(c->lengths, 0 ); + for( int i = 1; i <= k; ++i ) { + // approximate curve length at every sample point + array_push(c->lengths, len3(sub3(c->samples[i], c->samples[i-1])) + c->lengths[i-1] ); + } + // normalize lengths to be between 0 and 1 + float maxv = c->lengths[k]; + for( int i = 1; i <= k; ++i ) c->lengths[i] /= maxv; + + array_push(c->indices, 0 ); + for( int i = 0/*1*/; i indices) + 1; j lengths[j] lengths[j] > 0.01) + array_push(c->indices, j ); + } +} + +vec3 curve_eval(curve_t *c, float dt, unsigned *color) { + dt = clampf(dt, 0.0f, 1.0f); + int l = (int)(array_count(c->indices) - 1); + int p = (int)(dt * l); + int t = c->indices[p]; + + t %= (array_count(c->indices)-1); + vec3 pos = mix3(c->samples[t], c->samples[t+1], dt * l - p); + if(color) *color = c->colors[t]; + + return pos; +} + +void curve_destroy(curve_t *c) { + array_free(c->lengths); + array_free(c->colors); + array_free(c->samples); + array_free(c->points); + array_free(c->indices); +} #line 0 #line 1 "v4k_profile.c" -#if ENABLE_PROFILER -profiler_t profiler; -int profiler_enabled = 1; - -void (profiler_init)() { map_init(profiler, less_str, hash_str); profiler_enabled &= !!profiler; } -int (profiler_enable)(bool on) { return profiler_enabled = on; } -void (ui_profiler)() { - // @todo: ui_plot() - - double fps = window_fps(); - profile_setstat("Render.num_fps", fps); - - enum { COUNT = 300 }; - static float values[COUNT] = {0}; static int offset = 0; - values[offset=(offset+1)%COUNT] = fps; - - // draw fps-meter: 300 samples, [0..70] range each, 70px height plot ... - // ... unless filtering is enabled - if( !(ui_filter && ui_filter[0]) ) { - nk_layout_row_dynamic(ui_ctx, 70, 1); - - int index = -1; - if( nk_chart_begin(ui_ctx, NK_CHART_LINES, COUNT, 0.f, 70.f) ) { - for( int i = 0; i < COUNT; ++i ) { - nk_flags res = nk_chart_push(ui_ctx, (float)values[i]); - if( res & NK_CHART_HOVERING ) index = i; - if( res & NK_CHART_CLICKED ) index = i; - } - nk_chart_end(ui_ctx); - } - - // hightlight 60fps, 36fps and 12fps - struct nk_rect space; nk_layout_peek(&space, ui_ctx); - struct nk_command_buffer *canvas = nk_window_get_canvas(ui_ctx); - nk_stroke_line(canvas, space.x+0,space.y-60,space.x+space.w,space.y-60, 1.0, nk_rgba(0,255,0,128)); - nk_stroke_line(canvas, space.x+0,space.y-36,space.x+space.w,space.y-36, 1.0, nk_rgba(255,255,0,128)); - nk_stroke_line(canvas, space.x+0,space.y-12,space.x+space.w,space.y-12, 1.0, nk_rgba(255,0,0,128)); - - if( index >= 0 ) { - nk_tooltipf(ui_ctx, "%.2f fps", (float)values[index]); - } - } - - for each_map_ptr_sorted(profiler, const char *, key, struct profile_t, val ) { - if( isnan(val->stat) ) { - float v = val->avg/1000.0; - ui_slider2(*key, &v, va("%.2f ms", val->avg/1000.0)); - } else { - float v = val->stat; - ui_slider2(*key, &v, va("%.2f", val->stat)); - val->stat = 0; - } - } -} -#endif +#if ENABLE_PROFILER +profiler_t profiler; +int profiler_enabled = 1; + +void (profiler_init)() { map_init(profiler, less_str, hash_str); profiler_enabled &= !!profiler; } +int (profiler_enable)(bool on) { return profiler_enabled = on; } +void (ui_profiler)() { + // @todo: ui_plot() + + double fps = window_fps(); + profile_setstat("Render.num_fps", fps); + + enum { COUNT = 300 }; + static float values[COUNT] = {0}; static int offset = 0; + values[offset=(offset+1)%COUNT] = fps; + + // draw fps-meter: 300 samples, [0..70] range each, 70px height plot ... + // ... unless filtering is enabled + if( !(ui_filter && ui_filter[0]) ) { + nk_layout_row_dynamic(ui_ctx, 70, 1); + + int index = -1; + if( nk_chart_begin(ui_ctx, NK_CHART_LINES, COUNT, 0.f, 70.f) ) { + for( int i = 0; i < COUNT; ++i ) { + nk_flags res = nk_chart_push(ui_ctx, (float)values[i]); + if( res & NK_CHART_HOVERING ) index = i; + if( res & NK_CHART_CLICKED ) index = i; + } + nk_chart_end(ui_ctx); + } + + // hightlight 60fps, 36fps and 12fps + struct nk_rect space; nk_layout_peek(&space, ui_ctx); + struct nk_command_buffer *canvas = nk_window_get_canvas(ui_ctx); + nk_stroke_line(canvas, space.x+0,space.y-60,space.x+space.w,space.y-60, 1.0, nk_rgba(0,255,0,128)); + nk_stroke_line(canvas, space.x+0,space.y-36,space.x+space.w,space.y-36, 1.0, nk_rgba(255,255,0,128)); + nk_stroke_line(canvas, space.x+0,space.y-12,space.x+space.w,space.y-12, 1.0, nk_rgba(255,0,0,128)); + + if( index >= 0 ) { + nk_tooltipf(ui_ctx, "%.2f fps", (float)values[index]); + } + } + + for each_map_ptr_sorted(profiler, const char *, key, struct profile_t, val ) { + if( isnan(val->stat) ) { + float v = val->avg/1000.0; + ui_slider2(*key, &v, va("%.2f ms", val->avg/1000.0)); + } else { + float v = val->stat; + ui_slider2(*key, &v, va("%.2f", val->stat)); + val->stat = 0; + } + } +} +#endif #line 0 #line 1 "v4k_video.c" -// tip: convert video to x265/mp4. note: higher crf to increase compression (default crf is 28) -// ffmpeg -i {{infile}} -c:v libx265 -crf 24 -c:a copy {{outfile}} - -struct video_t { - // mpeg player - plm_t *plm; - double previous_time; - bool paused; - bool has_ycbcr; - bool has_audio; - // yCbCr - union { - struct { - texture_t textureY; - texture_t textureCb; - texture_t textureCr; - }; - texture_t textures[3]; - }; - // rgb - void *surface; - texture_t texture; -}; - -static void mpeg_update_texture(GLuint unit, GLuint texture, plm_plane_t *plane) { - glActiveTexture(unit); - glBindTexture(GL_TEXTURE_2D, texture); - glTexImage2D( - GL_TEXTURE_2D, 0, GL_RED, plane->width, plane->height, 0, - GL_RED, GL_UNSIGNED_BYTE, plane->data - ); -} -static void mpeg_video_callback( plm_t* plm, plm_frame_t* frame, void* user ) { - video_t *v = (video_t*)user; - if(v->paused) return; - - if(v->has_ycbcr) { - mpeg_update_texture(GL_TEXTURE0, v->textureY.id, &frame->y); - mpeg_update_texture(GL_TEXTURE1, v->textureCb.id, &frame->cb); - mpeg_update_texture(GL_TEXTURE2, v->textureCr.id, &frame->cr); - } else { - plm_frame_to_rgb( frame, v->surface, v->texture.w * 3 ); - texture_update( &v->texture, v->texture.w, v->texture.h, v->texture.n, v->surface, v->texture.flags ); - } - (void)plm; -} -static void mpeg_audio_callback(plm_t *plm, plm_samples_t *samples, void *user) { - video_t *v = (video_t*)user; - audio_queue(v->paused ? NULL : samples->interleaved, samples->count, AUDIO_FLOAT | AUDIO_2CH | AUDIO_44KHZ ); - (void)plm; -} - -video_t* video( const char *filename, int flags ) { - plm_t* plm = plm_create_with_file( vfs_handle(filename), 1 ); - if ( !plm ) { - PANIC( "!Cannot open '%s' file for reading\n", filename ); - return 0; - } - - int w = plm_get_width( plm ); - int h = plm_get_height( plm ); - float fps = plm_get_framerate( plm ); - float rate = plm_get_samplerate( plm ); - - video_t *v = MALLOC(sizeof(video_t)), zero = {0}; - *v = zero; - - v->has_ycbcr = flags & VIDEO_RGB ? 0 : 1; - - if( v->has_ycbcr ) { - v->textureY = texture_create( w, h, 1, NULL, TEXTURE_R ); - v->textureCb = texture_create( w, h, 1, NULL, TEXTURE_R ); - v->textureCr = texture_create( w, h, 1, NULL, TEXTURE_R ); - } else { - int w16 = (w+15) & ~15; - int h16 = (h+15) & ~15; - v->texture = texture_create( w16, h16, 3, NULL, 0 ); - v->surface = REALLOC( v->surface, w16 * h16 * 3 ); - } - - v->plm = plm; - - v->has_audio = flags & VIDEO_NO_AUDIO ? 0 : 1; - - plm_set_loop(plm, flags & VIDEO_LOOP); - plm_set_video_decode_callback(plm, mpeg_video_callback, v); - if( v->has_audio ) { - plm_set_audio_enabled(plm, true); - plm_set_audio_stream(plm, 0); - plm_set_audio_decode_callback(plm, mpeg_audio_callback, v); - } - - PRINTF( "Video texture: %s (%dx%dx%d %.0ffps %.1fKHz)\n", file_name(filename), w, h, v->has_ycbcr ? 3:1, fps, rate / 1000 ); - return v; -} - -texture_t* video_decode( video_t *v ) { // decodes next frame, returns associated texture(s) - double current_time = time_ss(); - double elapsed_time = current_time - v->previous_time; - if (elapsed_time > 1.0 / 30.0) { - elapsed_time = 1.0 / 30.0; - } - v->previous_time = current_time; - - if(!v->paused) - plm_decode(v->plm, elapsed_time); - - return v->has_ycbcr ? &v->textureY : &v->texture; -} - -void video_destroy(video_t *v) { - plm_destroy( v->plm ); - - if( v->has_ycbcr ) { - texture_destroy(&v->textureY); - texture_destroy(&v->textureCr); - texture_destroy(&v->textureCb); - } else { - texture_destroy(&v->texture); - v->surface = REALLOC(v->surface, 0); - } - - video_t zero = {0}; - *v = zero; - FREE(v); -} - -int video_has_finished(video_t *v) { - return !!plm_has_ended(v->plm); -} -double video_duration(video_t *v) { - return plm_get_duration(v->plm); -} -int video_seek(video_t *v, double seek_to) { - plm_seek(v->plm, clampf(seek_to, 0, video_duration(v)), FALSE); - if( v->has_audio ) audio_queue_clear(); - return 1; -} -double video_position(video_t *v) { - return plm_get_time(v->plm); -} -void video_pause(video_t *v, bool paused) { - v->paused = paused; -} -bool video_is_paused(video_t *v) { - return v->paused; -} -bool video_is_rgb(video_t *v) { - return !v->has_ycbcr; -} -texture_t* video_textures( video_t *v ) { - return v->has_ycbcr ? &v->textureY : &v->texture; -} - -// ----------------------------------------------------------------------------- -// ffmpeg video recording -// [src] http://blog.mmacklin.com/2013/06/11/real-time-video-capture-with-ffmpeg/ - -static FILE* rec_ffmpeg; -static FILE* rec_mpeg1; - -void record_stop(void) { - if(rec_ffmpeg) ifdef(win32, _pclose, pclose)(rec_ffmpeg); - rec_ffmpeg = 0; - - if(rec_mpeg1) fclose(rec_mpeg1); - rec_mpeg1 = 0; -} - -bool record_active() { - return rec_ffmpeg || rec_mpeg1; -} - -bool record_start(const char *outfile_mp4) { - do_once atexit(record_stop); - - record_stop(); - - // first choice: external ffmpeg encoder - if( !rec_ffmpeg ) { - extern const char *TOOLS; - - char *tools_native_path = strswap( va("%s/", TOOLS), ifdef(win32, "/", "\\"), ifdef(win32, "\\", "/") ); - - char *cmd = va("%sffmpeg%s " - "-hide_banner -loglevel error " // less verbose - "-r %d -f rawvideo -pix_fmt bgr24 -s %dx%d " // raw BGR WxH-60Hz frames - // "-framerate 30 " // interpolating new video output frames from the source frames - "-i - " // read frames from stdin - //"-draw_mouse 1 " - "-threads 0 " - //"-vsync vfr " - "-preset ultrafast " // collection of options that will provide a certain encoding speed [fast,ultrafast] - // "-tune zerolatency " // change settings based upon the specifics of your input - //"-crf 21 " // range of the CRF scale [0(lossless)..23(default)..51(worst quality)] - "-pix_fmt yuv420p " // compatible with Windows Media Player and Quicktime - "-vf vflip " // flip Y -// "-vf \"pad=ceil(iw/2)*2:ceil(ih/2)*2\" " - "-y \"%s\"", tools_native_path, ifdef(win32, ".exe", ifdef(osx, ".osx",".linux")), - (int)window_fps(), window_width(), window_height(), outfile_mp4); // overwrite output file - - // -rtbufsize 100M (https://trac.ffmpeg.org/wiki/DirectShow#BufferingLatency) Prevent some frames in the buffer from being dropped. - // -probesize 10M (https://www.ffmpeg.org/ffmpeg-formats.html#Format-Options) Set probing size in bytes, i.e. the size of the data to analyze to get stream information. A higher value will enable detecting more information in case it is dispersed into the stream, but will increase latency. Must be an integer not lesser than 32. It is 5000000 by default. - // -c:v libx264 (https://www.ffmpeg.org/ffmpeg.html#Main-options) Select an encoder (when used before an output file) or a decoder (when used before an input file) for one or more streams. codec is the name of a decoder/encoder or a special value copy (output only) to indicate that the stream is not to be re-encoded. - - // open pipe to ffmpeg's stdin in binary write mode - rec_ffmpeg = ifdef(win32, _popen(cmd, "wb"), popen(cmd, "w")); - } - - // fallback: built-in mpeg1 encoder - if( !rec_ffmpeg ) { - rec_mpeg1 = fopen(outfile_mp4, "wb"); // "a+b" - } - - return record_active(); -} - -void record_frame() { - if( record_active() ) { - void* pixels = screenshot_async(-3); // 3 RGB, 4 RGBA, -3 BGR, -4 BGRA. ps: BGR is fastest on my intel discrete gpu - - if( rec_ffmpeg ) { - fwrite(pixels, 3 * window_width() * window_height(), 1, rec_ffmpeg); - } - if( rec_mpeg1 ) { - jo_write_mpeg(rec_mpeg1, pixels, window_width(), window_height(), 24); // 24fps - } - } -} +// tip: convert video to x265/mp4. note: higher crf to increase compression (default crf is 28) +// ffmpeg -i {{infile}} -c:v libx265 -crf 24 -c:a copy {{outfile}} + +struct video_t { + // mpeg player + plm_t *plm; + double previous_time; + bool paused; + bool has_ycbcr; + bool has_audio; + // yCbCr + union { + struct { + texture_t textureY; + texture_t textureCb; + texture_t textureCr; + }; + texture_t textures[3]; + }; + // rgb + void *surface; + texture_t texture; +}; + +static void mpeg_update_texture(GLuint unit, GLuint texture, plm_plane_t *plane) { + glActiveTexture(unit); + glBindTexture(GL_TEXTURE_2D, texture); + glTexImage2D( + GL_TEXTURE_2D, 0, GL_RED, plane->width, plane->height, 0, + GL_RED, GL_UNSIGNED_BYTE, plane->data + ); +} +static void mpeg_video_callback( plm_t* plm, plm_frame_t* frame, void* user ) { + video_t *v = (video_t*)user; + if(v->paused) return; + + if(v->has_ycbcr) { + mpeg_update_texture(GL_TEXTURE0, v->textureY.id, &frame->y); + mpeg_update_texture(GL_TEXTURE1, v->textureCb.id, &frame->cb); + mpeg_update_texture(GL_TEXTURE2, v->textureCr.id, &frame->cr); + } else { + plm_frame_to_rgb( frame, v->surface, v->texture.w * 3 ); + texture_update( &v->texture, v->texture.w, v->texture.h, v->texture.n, v->surface, v->texture.flags ); + } + (void)plm; +} +static void mpeg_audio_callback(plm_t *plm, plm_samples_t *samples, void *user) { + video_t *v = (video_t*)user; + audio_queue(v->paused ? NULL : samples->interleaved, samples->count, AUDIO_FLOAT | AUDIO_2CH | AUDIO_44KHZ ); + (void)plm; +} + +video_t* video( const char *filename, int flags ) { + plm_t* plm = plm_create_with_file( vfs_handle(filename), 1 ); + if ( !plm ) { + PANIC( "!Cannot open '%s' file for reading\n", filename ); + return 0; + } + + int w = plm_get_width( plm ); + int h = plm_get_height( plm ); + float fps = plm_get_framerate( plm ); + float rate = plm_get_samplerate( plm ); + + video_t *v = MALLOC(sizeof(video_t)), zero = {0}; + *v = zero; + + v->has_ycbcr = flags & VIDEO_RGB ? 0 : 1; + + if( v->has_ycbcr ) { + v->textureY = texture_create( w, h, 1, NULL, TEXTURE_R ); + v->textureCb = texture_create( w, h, 1, NULL, TEXTURE_R ); + v->textureCr = texture_create( w, h, 1, NULL, TEXTURE_R ); + } else { + int w16 = (w+15) & ~15; + int h16 = (h+15) & ~15; + v->texture = texture_create( w16, h16, 3, NULL, 0 ); + v->surface = REALLOC( v->surface, w16 * h16 * 3 ); + } + + v->plm = plm; + + v->has_audio = flags & VIDEO_NO_AUDIO ? 0 : 1; + + plm_set_loop(plm, flags & VIDEO_LOOP); + plm_set_video_decode_callback(plm, mpeg_video_callback, v); + if( v->has_audio ) { + plm_set_audio_enabled(plm, true); + plm_set_audio_stream(plm, 0); + plm_set_audio_decode_callback(plm, mpeg_audio_callback, v); + } + + PRINTF( "Video texture: %s (%dx%dx%d %.0ffps %.1fKHz)\n", file_name(filename), w, h, v->has_ycbcr ? 3:1, fps, rate / 1000 ); + return v; +} + +texture_t* video_decode( video_t *v ) { // decodes next frame, returns associated texture(s) + double current_time = time_ss(); + double elapsed_time = current_time - v->previous_time; + if (elapsed_time > 1.0 / 30.0) { + elapsed_time = 1.0 / 30.0; + } + v->previous_time = current_time; + + if(!v->paused) + plm_decode(v->plm, elapsed_time); + + return v->has_ycbcr ? &v->textureY : &v->texture; +} + +void video_destroy(video_t *v) { + plm_destroy( v->plm ); + + if( v->has_ycbcr ) { + texture_destroy(&v->textureY); + texture_destroy(&v->textureCr); + texture_destroy(&v->textureCb); + } else { + texture_destroy(&v->texture); + v->surface = REALLOC(v->surface, 0); + } + + video_t zero = {0}; + *v = zero; + FREE(v); +} + +int video_has_finished(video_t *v) { + return !!plm_has_ended(v->plm); +} +double video_duration(video_t *v) { + return plm_get_duration(v->plm); +} +int video_seek(video_t *v, double seek_to) { + plm_seek(v->plm, clampf(seek_to, 0, video_duration(v)), FALSE); + if( v->has_audio ) audio_queue_clear(); + return 1; +} +double video_position(video_t *v) { + return plm_get_time(v->plm); +} +void video_pause(video_t *v, bool paused) { + v->paused = paused; +} +bool video_is_paused(video_t *v) { + return v->paused; +} +bool video_is_rgb(video_t *v) { + return !v->has_ycbcr; +} +texture_t* video_textures( video_t *v ) { + return v->has_ycbcr ? &v->textureY : &v->texture; +} + +// ----------------------------------------------------------------------------- +// ffmpeg video recording +// [src] http://blog.mmacklin.com/2013/06/11/real-time-video-capture-with-ffmpeg/ + +static FILE* rec_ffmpeg; +static FILE* rec_mpeg1; + +void record_stop(void) { + if(rec_ffmpeg) ifdef(win32, _pclose, pclose)(rec_ffmpeg); + rec_ffmpeg = 0; + + if(rec_mpeg1) fclose(rec_mpeg1); + rec_mpeg1 = 0; +} + +bool record_active() { + return rec_ffmpeg || rec_mpeg1; +} + +bool record_start(const char *outfile_mp4) { + do_once atexit(record_stop); + + record_stop(); + + // first choice: external ffmpeg encoder + if( !rec_ffmpeg ) { + extern const char *TOOLS; + + char *tools_native_path = strswap( va("%s/", TOOLS), ifdef(win32, "/", "\\"), ifdef(win32, "\\", "/") ); + + char *cmd = va("%sffmpeg%s " + "-hide_banner -loglevel error " // less verbose + "-r %d -f rawvideo -pix_fmt bgr24 -s %dx%d " // raw BGR WxH-60Hz frames + // "-framerate 30 " // interpolating new video output frames from the source frames + "-i - " // read frames from stdin + //"-draw_mouse 1 " + "-threads 0 " + //"-vsync vfr " + "-preset ultrafast " // collection of options that will provide a certain encoding speed [fast,ultrafast] + // "-tune zerolatency " // change settings based upon the specifics of your input + //"-crf 21 " // range of the CRF scale [0(lossless)..23(default)..51(worst quality)] + "-pix_fmt yuv420p " // compatible with Windows Media Player and Quicktime + "-vf vflip " // flip Y +// "-vf \"pad=ceil(iw/2)*2:ceil(ih/2)*2\" " + "-y \"%s\"", tools_native_path, ifdef(win32, ".exe", ifdef(osx, ".osx",".linux")), + (int)window_fps(), window_width(), window_height(), outfile_mp4); // overwrite output file + + // -rtbufsize 100M (https://trac.ffmpeg.org/wiki/DirectShow#BufferingLatency) Prevent some frames in the buffer from being dropped. + // -probesize 10M (https://www.ffmpeg.org/ffmpeg-formats.html#Format-Options) Set probing size in bytes, i.e. the size of the data to analyze to get stream information. A higher value will enable detecting more information in case it is dispersed into the stream, but will increase latency. Must be an integer not lesser than 32. It is 5000000 by default. + // -c:v libx264 (https://www.ffmpeg.org/ffmpeg.html#Main-options) Select an encoder (when used before an output file) or a decoder (when used before an input file) for one or more streams. codec is the name of a decoder/encoder or a special value copy (output only) to indicate that the stream is not to be re-encoded. + + // open pipe to ffmpeg's stdin in binary write mode + rec_ffmpeg = ifdef(win32, _popen(cmd, "wb"), popen(cmd, "w")); + } + + // fallback: built-in mpeg1 encoder + if( !rec_ffmpeg ) { + rec_mpeg1 = fopen(outfile_mp4, "wb"); // "a+b" + } + + return record_active(); +} + +void record_frame() { + if( record_active() ) { + void* pixels = screenshot_async(-3); // 3 RGB, 4 RGBA, -3 BGR, -4 BGRA. ps: BGR is fastest on my intel discrete gpu + + if( rec_ffmpeg ) { + fwrite(pixels, 3 * window_width() * window_height(), 1, rec_ffmpeg); + } + if( rec_mpeg1 ) { + jo_write_mpeg(rec_mpeg1, pixels, window_width(), window_height(), 24); // 24fps + } + } +} #line 0 #line 1 "v4k_window.c" -//----------------------------------------------------------------------------- -// capture tests -static -uint64_t tests_captureframes() { - static uint64_t capture_target; do_once capture_target = optioni("--capture", 0); - return capture_target; -} - -//----------------------------------------------------------------------------- -// fps locking - -static volatile float framerate = 0; -static volatile unsigned fps_active, timer_counter, loop_counter; -static -int fps__timing_thread(void *arg) { - int64_t ns_excess = 0; - while( fps_active ) { - if( framerate <= 0 ) { - loop_counter = timer_counter = 0; - sleep_ms(250); - } else { - timer_counter++; - int64_t tt = (int64_t)(1e9/(float)framerate) - ns_excess; - uint64_t took = -time_ns(); - #if is(win32) - timeBeginPeriod(1); - #endif - sleep_ns( tt > 0 ? (float)tt : 0.f ); - took += time_ns(); - ns_excess = took - tt; - if( ns_excess < 0 ) ns_excess = 0; - //puts( strf("%lld", ns_excess) ); - } - } - fps_active = 1; - - (void)arg; - return thread_exit(0), 0; -} -static -void fps_locker( int on ) { - if( on ) { - // private threaded timer - fps_active = 1, timer_counter = loop_counter = 0; - thread_init( fps__timing_thread, 0, "fps__timing_thread()", 0 ); - } else { - fps_active = 0; - } -} -// function that locks render to desired `framerate` framerate (in FPS). -// - assumes fps_locker() was enabled beforehand. -// - returns true if must render, else 0. -static -int fps_wait() { - if( framerate <= 0 ) return 1; - if( !fps_active ) return 1; - - // if we throttled too much, cpu idle wait - while( fps_active && (loop_counter > timer_counter) ) { - //thread_yield(); - sleep_ns(100); - } - - // max auto frameskip is 10: ie, even if speed is low paint at least one frame every 10 - enum { maxframeskip = 10 }; - if( timer_counter > loop_counter + maxframeskip ) { - loop_counter = timer_counter; - } - loop_counter++; - - // only draw if we are fast enough, otherwise skip the frame - return loop_counter >= timer_counter; -} -static -void window_vsync(float hz) { - if( tests_captureframes() ) return; - if( hz <= 0 ) return; - do_once fps_locker(1); - framerate = hz; - fps_wait(); -} - -//----------------------------------------------------------------------------- - -#if 0 // deprecated -static void (*hooks[64])() = {0}; -static void *userdatas[64] = {0}; - -bool window_hook(void (*func)(), void* user) { - window_unhook( func ); - for( int i = 0; i < 64; ++i ) { - if( !hooks[i] ) { - hooks[i] = func; - userdatas[i] = user; - return true; - } - } - return false; -} -void window_unhook(void (*func)()) { - for( int i = 0; i < 64; ++i ) { - if(hooks[i] == func) { - hooks[i] = 0; - userdatas[i] = 0; - } - } -} -#endif - -static GLFWwindow *window; -static int w, h, xpos, ypos, paused; -static int fullscreen, xprev, yprev, wprev, hprev; -static uint64_t frame_count; -static double t, dt, fps, hz = 0.00; -static char title[128] = {0}; -static char screenshot_file[DIR_MAX]; -static int locked_aspect_ratio = 0; -static vec4 winbgcolor = {0,0,0,1}; - -vec4 window_getcolor_() { return winbgcolor; } // internal - -// ----------------------------------------------------------------------------- -// glfw - -struct app { - GLFWwindow *window; - int width, height, keep_running; - unsigned flags; - - struct nk_context *ctx; - struct nk_glfw *nk_glfw; -} appHandle = {0}, *g; - -static void glfw_error_callback(int error, const char *description) { - if( is(osx) && error == 65544 ) return; // whitelisted - PANIC("%s (error %x)", description, error); -} - -void glfw_quit(void) { - do_once { - glfwTerminate(); - } -} - -void glfw_init() { - do_once { - g = &appHandle; - - glfwSetErrorCallback(glfw_error_callback); - int ok = !!glfwInit(); - assert(ok); // if(!ok) PANIC("cannot initialize glfw"); - - atexit(glfw_quit); //glfwTerminate); - } -} - -void window_drop_callback(GLFWwindow* window, int count, const char** paths) { - // @fixme: win: convert from utf8 to window16 before processing - - char pathdir[DIR_MAX]; snprintf(pathdir, DIR_MAX, "%s/import/%llu_%s/", ART, (unsigned long long)date(), ifdef(linux, getlogin(), getenv("USERNAME"))); - mkdir( pathdir, 0777 ); - - int errors = 0; - for( int i = 0; i < count; ++i ) { - const char *src = paths[i]; - const char *dst = va("%s%s", pathdir, file_name(src)); - errors += file_copy(src, dst) ? 0 : 1; - } - - if( errors ) PANIC("%d errors found during file dropping", errors); - else window_reload(); - - (void)window; -} - -void window_hints(unsigned flags) { - #ifdef __APPLE__ - //glfwInitHint( GLFW_COCOA_CHDIR_RESOURCES, GLFW_FALSE ); - glfwWindowHint( GLFW_COCOA_RETINA_FRAMEBUFFER, GLFW_FALSE ); // @todo: remove silicon mac M1 hack - //glfwWindowHint( GLFW_COCOA_GRAPHICS_SWITCHING, GLFW_FALSE ); - //glfwWindowHint( GLFW_COCOA_MENUBAR, GLFW_FALSE ); - #endif - - #ifdef __APPLE__ - /* We need to explicitly ask for a 3.2 context on OS X */ - glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); // osx - glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 2); // osx, 2:#version150,3:330 - #else - // Compute shaders need 4.5 otherwise. But... - // According to the GLFW docs, the context version hint acts as a minimum version. - // i.e, the context you actually get may be a higher or highest version (which is usually the case) - glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); - glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 2); - #endif - #ifdef __APPLE__ - glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); //osx - #endif - glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); //osx+ems - glfwWindowHint(GLFW_STENCIL_BITS, 8); //osx - glfwWindowHint(GLFW_OPENGL_DEBUG_CONTEXT, GL_TRUE); - - //glfwWindowHint( GLFW_RED_BITS, 8 ); - //glfwWindowHint( GLFW_GREEN_BITS, 8 ); - //glfwWindowHint( GLFW_BLUE_BITS, 8 ); - //glfwWindowHint( GLFW_ALPHA_BITS, 8 ); - //glfwWindowHint( GLFW_DEPTH_BITS, 24 ); - - //glfwWindowHint(GLFW_AUX_BUFFERS, Nth); - //glfwWindowHint(GLFW_STEREO, GL_TRUE); - glfwWindowHint(GLFW_DOUBLEBUFFER, GL_TRUE); - - // Prevent fullscreen window minimize on focus loss - glfwWindowHint( GLFW_AUTO_ICONIFY, GL_FALSE ); - - // Fix SRGB on intels - glfwWindowHint(GLFW_SRGB_CAPABLE, GLFW_TRUE); - - glfwWindowHint(GLFW_FOCUSED, GLFW_TRUE); - glfwWindowHint(GLFW_VISIBLE, GLFW_FALSE); - // glfwWindowHint(GLFW_RESIZABLE, GLFW_FALSE); - // glfwWindowHint(GLFW_DECORATED, GLFW_FALSE); // makes it non-resizable - if(flags & WINDOW_MSAA2) glfwWindowHint(GLFW_SAMPLES, 2); // x2 AA - if(flags & WINDOW_MSAA4) glfwWindowHint(GLFW_SAMPLES, 4); // x4 AA - if(flags & WINDOW_MSAA8) glfwWindowHint(GLFW_SAMPLES, 8); // x8 AA - - g->flags = flags; -} - -struct nk_glfw *window_handle_nkglfw() { - return g->nk_glfw; -} - -static renderstate_t window_rs; - -void glNewFrame() { - do_once { - window_rs = renderstate(); - window_rs.blend_enabled = 1; - window_rs.depth_test_enabled = 1; - } - - window_rs.clear_color[0] = winbgcolor.r; - window_rs.clear_color[1] = winbgcolor.g; - window_rs.clear_color[2] = winbgcolor.b; - window_rs.clear_color[3] = window_has_transparent() ? 0 : winbgcolor.a; - - // @transparent debug - // if( input_down(KEY_F1) ) window_transparent(window_has_transparent()^1); - // if( input_down(KEY_F2) ) window_maximize(window_has_maximize()^1); - // @transparent debug - -#if 0 // is(ems) - int canvasWidth, canvasHeight; - emscripten_get_canvas_element_size("#canvas", &canvasWidth, &canvasHeight); - w = canvasWidth; - h = canvasHeight; - //printf("%dx%d\n", w, h); -#else - //glfwGetWindowSize(window, &w, &h); - glfwGetFramebufferSize(window, &w, &h); - //printf("%dx%d\n", w, h); -#endif - - g->width = w; - g->height = h; - - renderstate_apply(&window_rs); - - glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT ); -} - -static bool cook_done = false; - -bool window_create_from_handle(void *handle, float scale, unsigned flags) { - // abort run if any test suite failed in unit-test mode - ifdef(debug, if( flag("--test") ) exit( test_errors ? -test_errors : 0 )); - - glfw_init(); - v4k_init(); - if(!t) t = glfwGetTime(); - - #if is(ems) - scale = 100.f; - #endif - - if( flag("--fullscreen") ) scale = 100; - scale = (scale < 1 ? scale * 100 : scale); - - bool FLAGS_FULLSCREEN = scale > 101; - bool FLAGS_FULLSCREEN_BORDERLESS = scale == 101; - bool FLAGS_FULLSCREEN_DESKTOP = scale == 100; - bool FLAGS_WINDOWED = scale < 100 || FLAGS_FULLSCREEN_BORDERLESS; - flags |= FLAGS_FULLSCREEN_BORDERLESS == 1 ? WINDOW_BORDERLESS : 0; - bool FLAGS_TRANSPARENT = flag("--transparent") || (flags & WINDOW_TRANSPARENT); - if( FLAGS_TRANSPARENT ) FLAGS_FULLSCREEN = 0, FLAGS_FULLSCREEN_DESKTOP = 0, FLAGS_WINDOWED = 1; - scale = (scale > 100 ? 100 : scale) / 100.f; - int winWidth = window_canvas().w * scale; - int winHeight = window_canvas().h * scale; - - if (tests_captureframes()) { - winWidth = 1280; - winHeight = 720; - } - - window_hints(flags); - - GLFWmonitor* monitor = NULL; - #ifndef __EMSCRIPTEN__ - if( FLAGS_FULLSCREEN || FLAGS_FULLSCREEN_DESKTOP ) { - monitor = glfwGetPrimaryMonitor(); - } - if( FLAGS_FULLSCREEN_DESKTOP ) { - const GLFWvidmode* mode = glfwGetVideoMode(monitor); - glfwWindowHint(GLFW_RED_BITS, mode->redBits); - glfwWindowHint(GLFW_GREEN_BITS, mode->greenBits); - glfwWindowHint(GLFW_BLUE_BITS, mode->blueBits); - glfwWindowHint(GLFW_REFRESH_RATE, mode->refreshRate); - winWidth = mode->width; - winHeight = mode->height; - } - if( FLAGS_WINDOWED ) { - #if !is(ems) - if( FLAGS_TRANSPARENT ) { // @transparent - //glfwWindowHint(GLFW_MOUSE_PASSTHROUGH, GLFW_TRUE); // see through. requires undecorated - //glfwWindowHint(GLFW_FLOATING, GLFW_TRUE); // always on top - glfwWindowHint(GLFW_TRANSPARENT_FRAMEBUFFER, GLFW_TRUE); - } - if( flags & WINDOW_BORDERLESS ) { - glfwWindowHint(GLFW_DECORATED, GLFW_FALSE); - } - #endif - // windowed - float ratio = (float)winWidth / (winHeight + !winHeight); - if( flags & WINDOW_SQUARE ) winWidth = winHeight = winWidth > winHeight ? winHeight : winWidth; - //if( flags & WINDOW_LANDSCAPE ) if( winWidth < winHeight ) winHeight = winWidth * ratio; - if( flags & WINDOW_PORTRAIT ) if( winWidth > winHeight ) winWidth = winHeight * (1.f / ratio); - } - #endif - - window = handle ? handle : glfwCreateWindow(winWidth, winHeight, "", monitor, NULL); - if( !window ) return PANIC("GLFW Window creation failed"), false; - - glfwGetFramebufferSize(window, &w, &h); //glfwGetWindowSize(window, &w, &h); - - if( flags & WINDOW_FIXED ) { // disable resizing - glfwSetWindowSizeLimits(window, w, h, w, h); - } - if( flags & (WINDOW_SQUARE | WINDOW_PORTRAIT | WINDOW_LANDSCAPE | WINDOW_ASPECT) ) { // keep aspect ratio - window_aspect_lock(w, h); - } - - #ifndef __EMSCRIPTEN__ - if( FLAGS_WINDOWED ) { - // center window - monitor = monitor ? monitor : glfwGetPrimaryMonitor(); - const GLFWvidmode* mode = glfwGetVideoMode(monitor); - - int area_width = mode->width, area_height = mode->height; - glfwGetMonitorWorkarea(monitor, &xpos, &ypos, &area_width, &area_height); - glfwSetWindowPos(window, xpos = xpos + (area_width - winWidth) / 2, ypos = ypos + (area_height - winHeight) / 2); - //printf("%dx%d @(%d,%d) [res:%dx%d]\n", winWidth, winHeight, xpos,ypos, area_width, area_height ); - - wprev = w, hprev = h; - xprev = xpos, yprev = ypos; - } - #endif - - glfwMakeContextCurrent(window); - - #if is(ems) - if( FLAGS_FULLSCREEN ) window_fullscreen(1); - #else - int gl_version = gladLoadGL(glfwGetProcAddress); - #endif - - glDebugEnable(); - - // setup nuklear ui - ui_ctx = nk_glfw3_init(&nk_glfw, window, NK_GLFW3_INSTALL_CALLBACKS); - - //glEnable(GL_TEXTURE_2D); - - // 0:disable vsync, 1:enable vsync, <0:adaptive (allow vsync when framerate is higher than syncrate and disable vsync when framerate drops below syncrate) - flags |= optioni("--vsync", 0) || flag("--vsync") ? WINDOW_VSYNC : WINDOW_VSYNC_DISABLED; - flags |= optioni("--vsync-adaptive", 0) || flag("--vsync-adaptive") ? WINDOW_VSYNC_ADAPTIVE : 0; - int has_adaptive_vsync = glfwExtensionSupported("WGL_EXT_swap_control_tear") || glfwExtensionSupported("GLX_EXT_swap_control_tear") || glfwExtensionSupported("EXT_swap_control_tear"); - int wants_adaptive_vsync = (flags & WINDOW_VSYNC_ADAPTIVE); - int interval = has_adaptive_vsync && wants_adaptive_vsync ? -1 : (flags & WINDOW_VSYNC ? 1 : 0); - glfwSwapInterval(interval); - - const GLFWvidmode *mode = glfwGetVideoMode(monitor ? monitor : glfwGetPrimaryMonitor()); - PRINTF("Build version: %s\n", BUILD_VERSION); - PRINTF("Monitor: %s (%dHz, vsync=%d)\n", glfwGetMonitorName(monitor ? monitor : glfwGetPrimaryMonitor()), mode->refreshRate, interval); - PRINTF("GPU device: %s\n", glGetString(GL_RENDERER)); - PRINTF("GPU driver: %s\n", glGetString(GL_VERSION)); - - #if !is(ems) - PRINTF("GPU OpenGL: %d.%d\n", GLAD_VERSION_MAJOR(gl_version), GLAD_VERSION_MINOR(gl_version)); - - if( FLAGS_TRANSPARENT ) { // @transparent - glfwSetWindowAttrib(window, GLFW_DECORATED, GLFW_FALSE); // @todo: is decorated an attrib or a hint? - if( scale >= 1 ) glfwMaximizeWindow(window); - } - #endif - - g->ctx = ui_ctx; - g->nk_glfw = &nk_glfw; - g->window = window; - g->width = window_width(); - g->height = window_height(); - - // window_cursor(flags & WINDOW_NO_MOUSE ? false : true); - glfwSetDropCallback(window, window_drop_callback); - - // camera inits for v4k_pre_init() -> ddraw_flush() -> get_active_camera() - // static camera_t cam = {0}; id44(cam.view); id44(cam.proj); extern camera_t *last_camera; last_camera = &cam; - v4k_pre_init(); - - // display a progress bar meanwhile cook is working in the background - // Sleep(500); - if( !COOK_ON_DEMAND ) - if( have_tools() && cook_jobs() ) - while( cook_progress() < 100 ) { - for( int frames = 0; frames < 2/*10*/ && window_swap(); frames += cook_progress() >= 100 ) { - window_title(va("%s %.2d%%", cook_cancelling ? "Aborting" : "Cooking assets", cook_progress())); - if( input(KEY_ESC) ) cook_cancel(); - - glNewFrame(); - - static float previous[JOBS_MAX] = {0}; - - #define ddraw_progress_bar(JOB_ID, JOB_MAX, PERCENT) do { \ - /* NDC coordinates (2d): bottom-left(-1,-1), center(0,0), top-right(+1,+1) */ \ - float progress = (PERCENT+1) / 100.f; if(progress > 1) progress = 1; \ - float speed = progress < 1 ? 0.05f : 0.75f; \ - float smooth = previous[JOB_ID] = progress * speed + previous[JOB_ID] * (1-speed); \ - \ - float pixel = 2.f / window_height(), dist = smooth*2-1, y = pixel*3*JOB_ID; \ - if(JOB_ID==0)ddraw_line(vec3(-1,y-pixel*2,0), vec3(1, y-pixel*2,0)); /* full line */ \ - ddraw_line(vec3(-1,y-pixel ,0), vec3(dist,y-pixel ,0)); /* progress line */ \ - ddraw_line(vec3(-1,y+0 ,0), vec3(dist,y+0 ,0)); /* progress line */ \ - ddraw_line(vec3(-1,y+pixel ,0), vec3(dist,y+pixel ,0)); /* progress line */ \ - if(JOB_ID==JOB_MAX-1)ddraw_line(vec3(-1,y+pixel*2,0), vec3(1, y+pixel*2,0)); /* full line */ \ - } while(0) - - if( FLAGS_TRANSPARENT ) {} else // @transparent - for(int i = 0; i < cook_jobs(); ++i) ddraw_progress_bar(i, cook_jobs(), jobs[i].progress); - // ddraw_progress_bar(0, 1, cook_progress()); - - ddraw_flush(); - - do_once window_visible(1); - - // render progress bar at 30Hz + give the cook threads more time to actually cook the assets. - // no big deal since progress bar is usually quiet when cooking assets most of the time. - // also, make the delay even larger when window is minimized or hidden. - // shaved cook times: 88s -> 57s (tcc), 50s -> 43s (vc) - sleep_ms( window_has_visible() && window_has_focus() ? 8 : 16 ); - } - // set black screen - glNewFrame(); - window_swap(); -#if !ENABLE_RETAIL - window_title(""); -#endif - } - - if(cook_cancelling) cook_stop(), exit(-1); - cook_done = true; - - v4k_post_init(mode->refreshRate); - return true; -} - -bool window_create(float scale, unsigned flags) { - return window_create_from_handle(NULL, scale, flags); -} - -static double boot_time = 0; - -char* window_stats() { - static double num_frames = 0, begin = FLT_MAX, prev_frame = 0; - - double now = time_ss(); - if( boot_time < 0 ) boot_time = now; - - if( begin > now ) { - begin = now; - num_frames = 0; - } - if( (now - begin) >= 0.25f ) { - fps = num_frames * (1.f / (now - begin)); - } - if( (now - begin) > 1 ) { - begin = now + ((now - begin) - 1); - num_frames = 0; - } - - const char *cmdline = app_cmdline(); - - // @todo: print %used/%avail kib mem, %used/%avail objs as well - static char buf[256]; - snprintf(buf, 256, "%s%s%s%s | boot %.2fs | %5.2ffps (%.2fms)%s%s", - title, BUILD_VERSION[0] ? " (":"", BUILD_VERSION[0] ? BUILD_VERSION:"", BUILD_VERSION[0] ? ")":"", - !boot_time ? now : boot_time, - fps, (now - prev_frame) * 1000.f, - cmdline[0] ? " | ":"", cmdline[0] ? cmdline:""); - - prev_frame = now; - ++num_frames; - - return buf + strspn(buf, " "); -} - -int window_frame_begin() { - glfwPollEvents(); - - // we cannot simply terminate threads on some OSes. also, aborted cook jobs could leave temporary files on disc. - // so let's try to be polite: we will be disabling any window closing briefly until all cook is either done or canceled. - static bool has_cook; do_once has_cook = !COOK_ON_DEMAND && have_tools() && cook_jobs(); - if( has_cook ) { - has_cook = cook_progress() < 100; - if( glfwWindowShouldClose(g->window) ) cook_cancel(); - glfwSetWindowShouldClose(g->window, GLFW_FALSE); - } - - if( glfwWindowShouldClose(g->window) ) { - return 0; - } - - glNewFrame(); - - ui_create(); - -#if !ENABLE_RETAIL - bool has_menu = ui_has_menubar(); - bool may_render_debug_panel = 1; - - if( have_tools() ) { - static int cook_has_progressbar; do_once cook_has_progressbar = !COOK_ON_DEMAND; - if( cook_has_progressbar) { - // render profiler, unless we are in the cook progress screen - static unsigned frames = 0; if(frames <= 0) frames += cook_progress() >= 100; - may_render_debug_panel = (frames > 0); - } - } - - if (!win_debug_visible) - may_render_debug_panel = 0; - - // generate Debug panel contents - if( may_render_debug_panel ) { - if( has_menu ? ui_window("Debug " ICON_MD_SETTINGS, 0) : ui_panel("Debug " ICON_MD_SETTINGS, 0) ) { - ui_engine(); - - (has_menu ? ui_window_end : ui_panel_end)(); - } - - API int engine_tick(); - engine_tick(); - } -#endif // ENABLE_RETAIL - -#if 0 // deprecated - // run user-defined hooks - for(int i = 0; i < 64; ++i) { - if( hooks[i] ) hooks[i]( userdatas[i] ); - } -#endif - - double now = paused ? t : glfwGetTime(); - dt = now - t; - t = now; - -#if !ENABLE_RETAIL - char *st = window_stats(); - static double timer = 0; - timer += window_delta(); - if( timer >= 0.25 ) { - glfwSetWindowTitle(window, st); - timer = 0; - } -#else - glfwSetWindowTitle(window, title); -#endif - - void input_update(); - input_update(); - - return 1; -} - -void window_frame_end() { - // flush batching systems that need to be rendered before frame swapping. order matters. - { - font_goto(0,0); - touch_flush(); - sprite_flush(); - - // flush all debugdraw calls before swap - dd_ontop = 0; - ddraw_flush(); - glClear(GL_DEPTH_BUFFER_BIT); - dd_ontop = 1; - ddraw_flush(); - - ui_render(); - } - -#if !is(ems) - // save screenshot if queued - if( screenshot_file[0] ) { - int n = 3; - void *rgb = screenshot(n); - stbi_flip_vertically_on_write(true); - if(!stbi_write_png(screenshot_file, w, h, n, rgb, n * w) ) { - PANIC("!could not write screenshot file `%s`\n", screenshot_file); - } - screenshot_file[0] = 0; - } - if( record_active() ) { - void record_frame(); - record_frame(); - } -#endif -} - -void window_frame_swap() { - // glFinish(); -#if !is(ems) - window_vsync(hz); -#endif - glfwSwapBuffers(window); - // emscripten_webgl_commit_frame(); - - static int delay = 0; do_once delay = optioni("--delay", 0); - if( delay && !COOK_ON_DEMAND && cook_progress() >= 100 ) sleep_ms( delay ); -} - -static -void window_shutdown() { - do_once { - #if ENABLE_SELFIES - - snprintf(screenshot_file, DIR_MAX, "%s.png", app_name()); - - int n = 3; - void *rgb = screenshot(n); - stbi_flip_vertically_on_write(true); - if(!stbi_write_png(screenshot_file, w, h, n, rgb, n * w) ) { - PANIC("!could not write screenshot file `%s`\n", screenshot_file); - } - screenshot_file[0] = 0; - - #endif - - window_loop_exit(); // finish emscripten loop automatically - } -} - -int window_swap() { - - // end frame - if( frame_count > 0 ) { - window_frame_end(); - window_frame_swap(); - } - - ++frame_count; - - // begin frame - int ready = window_frame_begin(); - if( !ready ) { - window_shutdown(); - return 0; - } - - static uint64_t capture_frame = 0; - if( cook_done && ++capture_frame == tests_captureframes() ) { - mkdir( "tests/out", 0777 ); - const char *screenshot_file = va("tests/out/%s.png", app_name()); - - int n = 3; - void *rgb = screenshot(n); - stbi_flip_vertically_on_write(true); - if(!stbi_write_png(screenshot_file, w, h, n, rgb, n * w) ) { - PANIC("!could not write screenshot file `%s`\n", screenshot_file); - } - return 0; - } - - return 1; -} - -static -void (*window_render_callback)(void* loopArg); - -static vec2 last_canvas_size = {0}; - -static -void window_resize() { -#if is(ems) - EM_ASM(canvas.canResize = 0); - if (g->flags&WINDOW_FIXED) return; - EM_ASM(canvas.canResize = 1); - vec2 size = window_canvas(); - if (size.x != last_canvas_size.x || size.y != last_canvas_size.y) { - w = size.x; - h = size.y; - g->width = w; - g->height = h; - last_canvas_size = vec2(w,h); - emscripten_set_canvas_size(w, h); - } -#endif /* __EMSCRIPTEN__ */ -} - -static -void window_loop_wrapper( void *loopArg ) { - if( window_frame_begin() ) { - window_resize(); - window_render_callback(loopArg); - window_frame_end(); - window_frame_swap(); - } else { - do_once window_shutdown(); - } -} - -void window_loop(void (*user_function)(void* loopArg), void* loopArg ) { -#if is(ems) - window_render_callback = user_function; - emscripten_set_main_loop_arg(window_loop_wrapper, loopArg, 0, 1); -#else - g->keep_running = true; - while (g->keep_running) - user_function(loopArg); -#endif /* __EMSCRIPTEN__ */ -} - -void window_loop_exit() { -#if is(ems) - emscripten_cancel_main_loop(); -#else - g->keep_running = false; -#endif /* __EMSCRIPTEN__ */ -} - -vec2 window_canvas() { -#if is(ems) - int width = EM_ASM_INT_V(return canvas.width); - int height = EM_ASM_INT_V(return canvas.height); - return vec2(width, height); -#else - glfw_init(); - const GLFWvidmode* mode = glfwGetVideoMode( glfwGetPrimaryMonitor() ); - assert( mode ); - return vec2(mode->width, mode->height); -#endif /* __EMSCRIPTEN__ */ -} - -int window_width() { - return w; -} -int window_height() { - return h; -} -double window_time() { - return t; -} -double window_delta() { - return dt; -} - -void window_debug(int visible) { - win_debug_visible = visible; -} -int window_has_debug() { - return win_debug_visible; -} - -double window_fps() { - return fps; -} -void window_fps_lock(float fps) { - hz = fps; -} -void window_fps_unlock() { - hz = 0; -} -double window_fps_target() { - return hz; -} - -void window_fps_vsync(int vsync) { - glfwSwapInterval(vsync); -} - -uint64_t window_frame() { - return frame_count; -} -void window_title(const char *title_) { - snprintf(title, 128, "%s", title_); - if( !title[0] ) glfwSetWindowTitle(window, title); -} -void window_color(unsigned color) { - unsigned r = (color >> 0) & 255; - unsigned g = (color >> 8) & 255; - unsigned b = (color >> 16) & 255; - unsigned a = (color >> 24) & 255; - winbgcolor = vec4(r / 255.0, g / 255.0, b / 255.0, a / 255.0); -} -static int has_icon; -int window_has_icon() { - return has_icon; -} -void window_icon(const char *file_icon) { - int len = 0; - void *data = vfs_load(file_icon, &len); - if( !data ) data = file_read(file_icon), len = file_size(file_icon); - - if( data && len ) { - image_t img = image_from_mem(data, len, IMAGE_RGBA); - if( img.w && img.h && img.pixels ) { - GLFWimage images[1]; - images[0].width = img.w; - images[0].height = img.h; - images[0].pixels = img.pixels; - glfwSetWindowIcon(window, 1, images); - has_icon = 1; - return; - } - } -#if 0 // is(win32) - HANDLE hIcon = LoadImageA(0, file_icon, IMAGE_ICON, 0, 0, LR_DEFAULTSIZE | LR_LOADFROMFILE); - if( hIcon ) { - HWND hWnd = glfwGetWin32Window(window); - SendMessage(hWnd, WM_SETICON, ICON_SMALL, (LPARAM)hIcon); - SendMessage(hWnd, WM_SETICON, ICON_BIG, (LPARAM)hIcon); - SendMessage(GetWindow(hWnd, GW_OWNER), WM_SETICON, ICON_SMALL, (LPARAM)hIcon); - SendMessage(GetWindow(hWnd, GW_OWNER), WM_SETICON, ICON_BIG, (LPARAM)hIcon); - has_icon = 1; - return; - } -#endif -} -void* window_handle() { - return window; -} - -void window_reload() { - // @todo: save_on_exit(); - fflush(0); - // chdir(app_path()); - execv(__argv[0], __argv); - exit(0); -} - -int window_record(const char *outfile_mp4) { - record_start(outfile_mp4); - // @todo: if( flags & RECORD_MOUSE ) - if( record_active() ) window_cursor_shape(CURSOR_SW_AUTO); else window_cursor_shape(CURSOR_HW_ARROW); - return record_active(); -} - -vec2 window_dpi() { - vec2 dpi = vec2(1,1); -#if !is(ems) && !is(osx) // @todo: remove silicon mac M1 hack - glfwGetMonitorContentScale(glfwGetPrimaryMonitor(), &dpi.x, &dpi.y); -#endif - return dpi; -} - -// ----------------------------------------------------------------------------- -// fullscreen - -static -GLFWmonitor *window_find_monitor(int wx, int wy) { - GLFWmonitor *monitor = glfwGetPrimaryMonitor(); - - // find best monitor given current window coordinates. @todo: select by ocuppied window area inside each monitor instead. - int num_monitors = 0; - GLFWmonitor** monitors = glfwGetMonitors(&num_monitors); -#if is(ems) - return *monitors; -#else - for( int i = 0; i < num_monitors; ++i) { - int mx = 0, my = 0, mw = 0, mh = 0; - glfwGetMonitorWorkarea(monitors[i], &mx, &my, &mw, &mh); - monitor = wx >= mx && wx <= (mx+mw) && wy >= my && wy <= (my+mh) ? monitors[i] : monitor; - } - return monitor; -#endif -} - -#if 0 // to deprecate - -void window_fullscreen(int enabled) { - fullscreen = !!enabled; -#ifndef __EMSCRIPTEN__ - if( fullscreen ) { - int wx = 0, wy = 0; glfwGetWindowPos(window, &wx, &wy); - GLFWmonitor *monitor = window_find_monitor(wx, wy); - - wprev = w, hprev = h, xprev = wx, yprev = wy; // save window context for further restoring - - int width, height; - glfwGetMonitorWorkarea(monitor, NULL, NULL, &width, &height); - glfwSetWindowMonitor(window, monitor, 0, 0, width, height, GLFW_DONT_CARE); - } else { - glfwSetWindowMonitor(window, NULL, xpos, ypos, wprev, hprev, GLFW_DONT_CARE); - glfwSetWindowPos(window, xprev, yprev); - } -#endif -} -int window_has_fullscreen() { - return fullscreen; -} - -#else - -int window_has_fullscreen() { -#if is(ems) - EmscriptenFullscreenChangeEvent fsce; - emscripten_get_fullscreen_status(&fsce); - return !!fsce.isFullscreen; -#else - return !!glfwGetWindowMonitor(g->window); -#endif /* __EMSCRIPTEN__ */ -} - -void window_fullscreen(int enabled) { - if( window_has_fullscreen() == !!enabled ) return; - -#if is(ems) - -#if 0 // deprecated: crash - if( enabled ) { - emscripten_exit_soft_fullscreen(); - - /* Workaround https://github.com/kripken/emscripten/issues/5124#issuecomment-292849872 */ - EM_ASM(JSEvents.inEventHandler = true); - EM_ASM(JSEvents.currentEventHandler = {allowsDeferredCalls:true}); - - EmscriptenFullscreenStrategy strategy = {0}; - strategy.scaleMode = EMSCRIPTEN_FULLSCREEN_SCALE_STRETCH; // _ASPECT - strategy.canvasResolutionScaleMode = EMSCRIPTEN_FULLSCREEN_CANVAS_SCALE_STDDEF; // _NONE _HIDEF - strategy.filteringMode = EMSCRIPTEN_FULLSCREEN_FILTERING_DEFAULT; // _NEAREST - - emscripten_request_fullscreen_strategy(NULL, EM_FALSE/*EM_TRUE*/, &strategy); - //emscripten_enter_soft_fullscreen(NULL, &strategy); - } else { - emscripten_exit_fullscreen(); - } -#else - if( enabled ) - EM_ASM(Module.requestFullscreen(1, 1)); - else - EM_ASM(Module.exitFullscreen()); -#endif - -#else - -#if 0 - if( enabled ) { - /*glfwGetWindowPos(g->window, &g->window_xpos, &g->window_ypos);*/ - glfwGetWindowSize(g->window, &g->width, &g->height); - glfwSetWindowMonitor(g->window, glfwGetPrimaryMonitor(), 0, 0, g->width, g->height, GLFW_DONT_CARE); - } else { - glfwSetWindowMonitor(g->window, NULL, 0, 0, g->width, g->height, GLFW_DONT_CARE); - } -#else - if( enabled ) { - int wx = 0, wy = 0; glfwGetWindowPos(window, &wx, &wy); - GLFWmonitor *monitor = window_find_monitor(wx, wy); - - wprev = w, hprev = h, xprev = wx, yprev = wy; // save window context for further restoring - - int width, height; - glfwGetMonitorWorkarea(monitor, NULL, NULL, &width, &height); - glfwSetWindowMonitor(window, monitor, 0, 0, width, height, GLFW_DONT_CARE); - } else { - glfwSetWindowMonitor(window, NULL, xpos, ypos, wprev, hprev, GLFW_DONT_CARE); - glfwSetWindowPos(window, xprev, yprev); - } -#endif - -#endif -} - -#endif - -void window_pause(int enabled) { - paused = enabled; -} -int window_has_pause() { - return paused; -} -void window_focus() { - glfwFocusWindow(window); -} -int window_has_focus() { - return !!glfwGetWindowAttrib(window, GLFW_FOCUSED); -} -static int cursorshape = 1; -void window_cursor_shape(unsigned mode) { - cursorshape = (mode &= 7); - - static GLFWcursor* cursors[7] = { 0 }; - static unsigned enums[7] = { - 0, - GLFW_ARROW_CURSOR, - GLFW_IBEAM_CURSOR, - GLFW_HRESIZE_CURSOR, - GLFW_VRESIZE_CURSOR, - GLFW_HAND_CURSOR, - GLFW_CROSSHAIR_CURSOR, - }; - do_once { - static unsigned pixels[16 * 16] = { 0x01000000 }; // ABGR(le) glfw3 note: A(0x00) means 0xFF for some reason - static GLFWimage image = { 16, 16, (void*)pixels }; - static GLFWcursor* empty; - for( int x = 0; x < 16 * 16; ++x ) pixels[x] = pixels[0]; - empty = glfwCreateCursor(&image, 0, 0); - - for(int i = 0; i < countof(enums); ++i) cursors[i] = i ? glfwCreateStandardCursor( enums[i] ) : empty; - } - if( mode == CURSOR_SW_AUTO ) { // UI (nuklear) driven cursor - nk_style_show_cursor(ui_handle()); - glfwSetCursor(window, cursors[0] ); - } else { - nk_style_hide_cursor(ui_handle()); - glfwSetCursor(window, mode < countof(enums) ? cursors[mode] : NULL); - } -} -void window_cursor(int visible) { - (cursorshape == CURSOR_SW_AUTO && visible ? nk_style_show_cursor : nk_style_hide_cursor)(ui_handle()); - glfwSetInputMode(window, GLFW_CURSOR, visible ? GLFW_CURSOR_NORMAL : GLFW_CURSOR_DISABLED); -} -int window_has_cursor() { - return glfwGetInputMode(window, GLFW_CURSOR) == GLFW_CURSOR_NORMAL; -} - -void window_visible(int visible) { - if(!window) return; - //if(window) (visible ? glfwRestoreWindow : glfwIconifyWindow)(window); - (visible ? glfwShowWindow : glfwHideWindow)(window); - // call glfwpollevents in linux to flush visiblity changes that would happen in next frame otherwise - #if is(linux) || is(osx) - glfwPollEvents(); - #endif -} -int window_has_visible() { - return glfwGetWindowAttrib(window, GLFW_VISIBLE); -} - -void window_screenshot(const char* outfile_png) { - snprintf(screenshot_file, DIR_MAX, "%s", outfile_png ? outfile_png : ""); -} - -double window_aspect() { - return (double)w / (h + !h); -} -void window_aspect_lock(unsigned numer, unsigned denom) { - if(!window) return; - if( numer * denom ) { - glfwSetWindowAspectRatio(window, numer, denom); - } else { - glfwSetWindowAspectRatio(window, GLFW_DONT_CARE, GLFW_DONT_CARE); - } -} -void window_aspect_unlock() { - if(!window) return; - window_aspect_lock(0, 0); -} - -void window_transparent(int enabled) { - #if !is(ems) - if( !window_has_fullscreen() ) { - if( enabled ) { - glfwSetWindowAttrib(window, GLFW_DECORATED, GLFW_FALSE); - //glfwSetWindowAttrib(window, GLFW_MOUSE_PASSTHROUGH , GLFW_TRUE); - //glfwMaximizeWindow(window); - } else { - //glfwRestoreWindow(window); - //glfwSetWindowAttrib(window, GLFW_MOUSE_PASSTHROUGH , GLFW_FALSE); - glfwSetWindowAttrib(window, GLFW_DECORATED, GLFW_TRUE); - } - } - #endif -} -int window_has_transparent() { - return ifdef(ems, 0, glfwGetWindowAttrib(window, GLFW_DECORATED) != GLFW_TRUE); -} - -void window_maximize(int enabled) { - ifdef(ems, return); - if( !window_has_fullscreen() ) { - if( enabled ) { - glfwMaximizeWindow(window); - } else { - glfwRestoreWindow(window); - } - } -} -int window_has_maximize() { - return ifdef(ems, 0, glfwGetWindowAttrib(window, GLFW_MAXIMIZED) == GLFW_TRUE); -} - -const char *window_clipboard() { - return glfwGetClipboardString(window); -} -void window_setclipboard(const char *text) { - glfwSetClipboardString(window, text); -} - -static -double window_scale() { // ok? @testme - float xscale = 1, yscale = 1; - #if !is(ems) && !is(osx) // @todo: remove silicon mac M1 hack - GLFWmonitor *monitor = glfwGetPrimaryMonitor(); - glfwGetMonitorContentScale(monitor, &xscale, &yscale); - #endif - return maxi(xscale, yscale); -} +//----------------------------------------------------------------------------- +// capture tests +static +uint64_t tests_captureframes() { + static uint64_t capture_target; do_once capture_target = optioni("--capture", 0); + return capture_target; +} + +//----------------------------------------------------------------------------- +// fps locking + +static volatile float framerate = 0; +static volatile unsigned fps_active, timer_counter, loop_counter; +static +int fps__timing_thread(void *arg) { + int64_t ns_excess = 0; + while( fps_active ) { + if( framerate <= 0 ) { + loop_counter = timer_counter = 0; + sleep_ms(250); + } else { + timer_counter++; + int64_t tt = (int64_t)(1e9/(float)framerate) - ns_excess; + uint64_t took = -time_ns(); + #if is(win32) + timeBeginPeriod(1); + #endif + sleep_ns( tt > 0 ? (float)tt : 0.f ); + took += time_ns(); + ns_excess = took - tt; + if( ns_excess < 0 ) ns_excess = 0; + //puts( strf("%lld", ns_excess) ); + } + } + fps_active = 1; + + (void)arg; + return thread_exit(0), 0; +} +static +void fps_locker( int on ) { + if( on ) { + // private threaded timer + fps_active = 1, timer_counter = loop_counter = 0; + thread_init( fps__timing_thread, 0, "fps__timing_thread()", 0 ); + } else { + fps_active = 0; + } +} +// function that locks render to desired `framerate` framerate (in FPS). +// - assumes fps_locker() was enabled beforehand. +// - returns true if must render, else 0. +static +int fps_wait() { + if( framerate <= 0 ) return 1; + if( !fps_active ) return 1; + + // if we throttled too much, cpu idle wait + while( fps_active && (loop_counter > timer_counter) ) { + //thread_yield(); + sleep_ns(100); + } + + // max auto frameskip is 10: ie, even if speed is low paint at least one frame every 10 + enum { maxframeskip = 10 }; + if( timer_counter > loop_counter + maxframeskip ) { + loop_counter = timer_counter; + } + loop_counter++; + + // only draw if we are fast enough, otherwise skip the frame + return loop_counter >= timer_counter; +} +static +void window_vsync(float hz) { + if( tests_captureframes() ) return; + if( hz <= 0 ) return; + do_once fps_locker(1); + framerate = hz; + fps_wait(); +} + +//----------------------------------------------------------------------------- + +#if 0 // deprecated +static void (*hooks[64])() = {0}; +static void *userdatas[64] = {0}; + +bool window_hook(void (*func)(), void* user) { + window_unhook( func ); + for( int i = 0; i < 64; ++i ) { + if( !hooks[i] ) { + hooks[i] = func; + userdatas[i] = user; + return true; + } + } + return false; +} +void window_unhook(void (*func)()) { + for( int i = 0; i < 64; ++i ) { + if(hooks[i] == func) { + hooks[i] = 0; + userdatas[i] = 0; + } + } +} +#endif + +static GLFWwindow *window; +static int w, h, xpos, ypos, paused; +static int fullscreen, xprev, yprev, wprev, hprev; +static uint64_t frame_count; +static double t, dt, fps, hz = 0.00; +static char title[128] = {0}; +static char screenshot_file[DIR_MAX]; +static int locked_aspect_ratio = 0; +static vec4 winbgcolor = {0,0,0,1}; + +vec4 window_getcolor_() { return winbgcolor; } // internal + +// ----------------------------------------------------------------------------- +// glfw + +struct app { + GLFWwindow *window; + int width, height, keep_running; + unsigned flags; + + struct nk_context *ctx; + struct nk_glfw *nk_glfw; +} appHandle = {0}, *g; + +static void glfw_error_callback(int error, const char *description) { + if( is(osx) && error == 65544 ) return; // whitelisted + PANIC("%s (error %x)", description, error); +} + +void glfw_quit(void) { + do_once { + glfwTerminate(); + } +} + +void glfw_init() { + do_once { + g = &appHandle; + + glfwSetErrorCallback(glfw_error_callback); + int ok = !!glfwInit(); + assert(ok); // if(!ok) PANIC("cannot initialize glfw"); + + atexit(glfw_quit); //glfwTerminate); + } +} + +void window_drop_callback(GLFWwindow* window, int count, const char** paths) { + // @fixme: win: convert from utf8 to window16 before processing + + char pathdir[DIR_MAX]; snprintf(pathdir, DIR_MAX, "%s/import/%llu_%s/", ART, (unsigned long long)date(), ifdef(linux, getlogin(), getenv("USERNAME"))); + mkdir( pathdir, 0777 ); + + int errors = 0; + for( int i = 0; i < count; ++i ) { + const char *src = paths[i]; + const char *dst = va("%s%s", pathdir, file_name(src)); + errors += file_copy(src, dst) ? 0 : 1; + } + + if( errors ) PANIC("%d errors found during file dropping", errors); + else window_reload(); + + (void)window; +} + +void window_hints(unsigned flags) { + #ifdef __APPLE__ + //glfwInitHint( GLFW_COCOA_CHDIR_RESOURCES, GLFW_FALSE ); + glfwWindowHint( GLFW_COCOA_RETINA_FRAMEBUFFER, GLFW_FALSE ); // @todo: remove silicon mac M1 hack + //glfwWindowHint( GLFW_COCOA_GRAPHICS_SWITCHING, GLFW_FALSE ); + //glfwWindowHint( GLFW_COCOA_MENUBAR, GLFW_FALSE ); + #endif + + #ifdef __APPLE__ + /* We need to explicitly ask for a 3.2 context on OS X */ + glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); // osx + glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 2); // osx, 2:#version150,3:330 + #else + // Compute shaders need 4.5 otherwise. But... + // According to the GLFW docs, the context version hint acts as a minimum version. + // i.e, the context you actually get may be a higher or highest version (which is usually the case) + glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); + glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 2); + #endif + #ifdef __APPLE__ + glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); //osx + #endif + glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); //osx+ems + glfwWindowHint(GLFW_STENCIL_BITS, 8); //osx + glfwWindowHint(GLFW_OPENGL_DEBUG_CONTEXT, GL_TRUE); + + //glfwWindowHint( GLFW_RED_BITS, 8 ); + //glfwWindowHint( GLFW_GREEN_BITS, 8 ); + //glfwWindowHint( GLFW_BLUE_BITS, 8 ); + //glfwWindowHint( GLFW_ALPHA_BITS, 8 ); + //glfwWindowHint( GLFW_DEPTH_BITS, 24 ); + + //glfwWindowHint(GLFW_AUX_BUFFERS, Nth); + //glfwWindowHint(GLFW_STEREO, GL_TRUE); + glfwWindowHint(GLFW_DOUBLEBUFFER, GL_TRUE); + + // Prevent fullscreen window minimize on focus loss + glfwWindowHint( GLFW_AUTO_ICONIFY, GL_FALSE ); + + // Fix SRGB on intels + glfwWindowHint(GLFW_SRGB_CAPABLE, GLFW_TRUE); + + glfwWindowHint(GLFW_FOCUSED, GLFW_TRUE); + glfwWindowHint(GLFW_VISIBLE, GLFW_FALSE); + // glfwWindowHint(GLFW_RESIZABLE, GLFW_FALSE); + // glfwWindowHint(GLFW_DECORATED, GLFW_FALSE); // makes it non-resizable + if(flags & WINDOW_MSAA2) glfwWindowHint(GLFW_SAMPLES, 2); // x2 AA + if(flags & WINDOW_MSAA4) glfwWindowHint(GLFW_SAMPLES, 4); // x4 AA + if(flags & WINDOW_MSAA8) glfwWindowHint(GLFW_SAMPLES, 8); // x8 AA + + g->flags = flags; +} + +struct nk_glfw *window_handle_nkglfw() { + return g->nk_glfw; +} + +static renderstate_t window_rs; + +void glNewFrame() { + do_once { + window_rs = renderstate(); + window_rs.blend_enabled = 1; + window_rs.depth_test_enabled = 1; + } + + window_rs.clear_color[0] = winbgcolor.r; + window_rs.clear_color[1] = winbgcolor.g; + window_rs.clear_color[2] = winbgcolor.b; + window_rs.clear_color[3] = window_has_transparent() ? 0 : winbgcolor.a; + + // @transparent debug + // if( input_down(KEY_F1) ) window_transparent(window_has_transparent()^1); + // if( input_down(KEY_F2) ) window_maximize(window_has_maximize()^1); + // @transparent debug + +#if 0 // is(ems) + int canvasWidth, canvasHeight; + emscripten_get_canvas_element_size("#canvas", &canvasWidth, &canvasHeight); + w = canvasWidth; + h = canvasHeight; + //printf("%dx%d\n", w, h); +#else + //glfwGetWindowSize(window, &w, &h); + glfwGetFramebufferSize(window, &w, &h); + //printf("%dx%d\n", w, h); +#endif + + g->width = w; + g->height = h; + + renderstate_apply(&window_rs); + + glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT ); +} + +static bool cook_done = false; + +bool window_create_from_handle(void *handle, float scale, unsigned flags) { + // abort run if any test suite failed in unit-test mode + ifdef(debug, if( flag("--test") ) exit( test_errors ? -test_errors : 0 )); + + glfw_init(); + v4k_init(); + if(!t) t = glfwGetTime(); + + #if is(ems) + scale = 100.f; + #endif + + if( flag("--fullscreen") ) scale = 100; + scale = (scale < 1 ? scale * 100 : scale); + + bool FLAGS_FULLSCREEN = scale > 101; + bool FLAGS_FULLSCREEN_BORDERLESS = scale == 101; + bool FLAGS_FULLSCREEN_DESKTOP = scale == 100; + bool FLAGS_WINDOWED = scale < 100 || FLAGS_FULLSCREEN_BORDERLESS; + flags |= FLAGS_FULLSCREEN_BORDERLESS == 1 ? WINDOW_BORDERLESS : 0; + bool FLAGS_TRANSPARENT = flag("--transparent") || (flags & WINDOW_TRANSPARENT); + if( FLAGS_TRANSPARENT ) FLAGS_FULLSCREEN = 0, FLAGS_FULLSCREEN_DESKTOP = 0, FLAGS_WINDOWED = 1; + scale = (scale > 100 ? 100 : scale) / 100.f; + int winWidth = window_canvas().w * scale; + int winHeight = window_canvas().h * scale; + + if (tests_captureframes()) { + winWidth = 1280; + winHeight = 720; + } + + window_hints(flags); + + GLFWmonitor* monitor = NULL; + #ifndef __EMSCRIPTEN__ + if( FLAGS_FULLSCREEN || FLAGS_FULLSCREEN_DESKTOP ) { + monitor = glfwGetPrimaryMonitor(); + } + if( FLAGS_FULLSCREEN_DESKTOP ) { + const GLFWvidmode* mode = glfwGetVideoMode(monitor); + glfwWindowHint(GLFW_RED_BITS, mode->redBits); + glfwWindowHint(GLFW_GREEN_BITS, mode->greenBits); + glfwWindowHint(GLFW_BLUE_BITS, mode->blueBits); + glfwWindowHint(GLFW_REFRESH_RATE, mode->refreshRate); + winWidth = mode->width; + winHeight = mode->height; + } + if( FLAGS_WINDOWED ) { + #if !is(ems) + if( FLAGS_TRANSPARENT ) { // @transparent + //glfwWindowHint(GLFW_MOUSE_PASSTHROUGH, GLFW_TRUE); // see through. requires undecorated + //glfwWindowHint(GLFW_FLOATING, GLFW_TRUE); // always on top + glfwWindowHint(GLFW_TRANSPARENT_FRAMEBUFFER, GLFW_TRUE); + } + if( flags & WINDOW_BORDERLESS ) { + glfwWindowHint(GLFW_DECORATED, GLFW_FALSE); + } + #endif + // windowed + float ratio = (float)winWidth / (winHeight + !winHeight); + if( flags & WINDOW_SQUARE ) winWidth = winHeight = winWidth > winHeight ? winHeight : winWidth; + //if( flags & WINDOW_LANDSCAPE ) if( winWidth < winHeight ) winHeight = winWidth * ratio; + if( flags & WINDOW_PORTRAIT ) if( winWidth > winHeight ) winWidth = winHeight * (1.f / ratio); + } + #endif + + window = handle ? handle : glfwCreateWindow(winWidth, winHeight, "", monitor, NULL); + if( !window ) return PANIC("GLFW Window creation failed"), false; + + glfwGetFramebufferSize(window, &w, &h); //glfwGetWindowSize(window, &w, &h); + + if( flags & WINDOW_FIXED ) { // disable resizing + glfwSetWindowSizeLimits(window, w, h, w, h); + } + if( flags & (WINDOW_SQUARE | WINDOW_PORTRAIT | WINDOW_LANDSCAPE | WINDOW_ASPECT) ) { // keep aspect ratio + window_aspect_lock(w, h); + } + + #ifndef __EMSCRIPTEN__ + if( FLAGS_WINDOWED ) { + // center window + monitor = monitor ? monitor : glfwGetPrimaryMonitor(); + const GLFWvidmode* mode = glfwGetVideoMode(monitor); + + int area_width = mode->width, area_height = mode->height; + glfwGetMonitorWorkarea(monitor, &xpos, &ypos, &area_width, &area_height); + glfwSetWindowPos(window, xpos = xpos + (area_width - winWidth) / 2, ypos = ypos + (area_height - winHeight) / 2); + //printf("%dx%d @(%d,%d) [res:%dx%d]\n", winWidth, winHeight, xpos,ypos, area_width, area_height ); + + wprev = w, hprev = h; + xprev = xpos, yprev = ypos; + } + #endif + + glfwMakeContextCurrent(window); + + #if is(ems) + if( FLAGS_FULLSCREEN ) window_fullscreen(1); + #else + int gl_version = gladLoadGL(glfwGetProcAddress); + #endif + + glDebugEnable(); + + // setup nuklear ui + ui_ctx = nk_glfw3_init(&nk_glfw, window, NK_GLFW3_INSTALL_CALLBACKS); + + //glEnable(GL_TEXTURE_2D); + + // 0:disable vsync, 1:enable vsync, <0:adaptive (allow vsync when framerate is higher than syncrate and disable vsync when framerate drops below syncrate) + flags |= optioni("--vsync", 0) || flag("--vsync") ? WINDOW_VSYNC : WINDOW_VSYNC_DISABLED; + flags |= optioni("--vsync-adaptive", 0) || flag("--vsync-adaptive") ? WINDOW_VSYNC_ADAPTIVE : 0; + int has_adaptive_vsync = glfwExtensionSupported("WGL_EXT_swap_control_tear") || glfwExtensionSupported("GLX_EXT_swap_control_tear") || glfwExtensionSupported("EXT_swap_control_tear"); + int wants_adaptive_vsync = (flags & WINDOW_VSYNC_ADAPTIVE); + int interval = has_adaptive_vsync && wants_adaptive_vsync ? -1 : (flags & WINDOW_VSYNC ? 1 : 0); + glfwSwapInterval(interval); + + const GLFWvidmode *mode = glfwGetVideoMode(monitor ? monitor : glfwGetPrimaryMonitor()); + PRINTF("Build version: %s\n", BUILD_VERSION); + PRINTF("Monitor: %s (%dHz, vsync=%d)\n", glfwGetMonitorName(monitor ? monitor : glfwGetPrimaryMonitor()), mode->refreshRate, interval); + PRINTF("GPU device: %s\n", glGetString(GL_RENDERER)); + PRINTF("GPU driver: %s\n", glGetString(GL_VERSION)); + + #if !is(ems) + PRINTF("GPU OpenGL: %d.%d\n", GLAD_VERSION_MAJOR(gl_version), GLAD_VERSION_MINOR(gl_version)); + + if( FLAGS_TRANSPARENT ) { // @transparent + glfwSetWindowAttrib(window, GLFW_DECORATED, GLFW_FALSE); // @todo: is decorated an attrib or a hint? + if( scale >= 1 ) glfwMaximizeWindow(window); + } + #endif + + g->ctx = ui_ctx; + g->nk_glfw = &nk_glfw; + g->window = window; + g->width = window_width(); + g->height = window_height(); + + // window_cursor(flags & WINDOW_NO_MOUSE ? false : true); + glfwSetDropCallback(window, window_drop_callback); + + // camera inits for v4k_pre_init() -> ddraw_flush() -> get_active_camera() + // static camera_t cam = {0}; id44(cam.view); id44(cam.proj); extern camera_t *last_camera; last_camera = &cam; + v4k_pre_init(); + + // display a progress bar meanwhile cook is working in the background + // Sleep(500); + if( !COOK_ON_DEMAND ) + if( have_tools() && cook_jobs() ) + while( cook_progress() < 100 ) { + for( int frames = 0; frames < 2/*10*/ && window_swap(); frames += cook_progress() >= 100 ) { + window_title(va("%s %.2d%%", cook_cancelling ? "Aborting" : "Cooking assets", cook_progress())); + if( input(KEY_ESC) ) cook_cancel(); + + glNewFrame(); + + static float previous[JOBS_MAX] = {0}; + + #define ddraw_progress_bar(JOB_ID, JOB_MAX, PERCENT) do { \ + /* NDC coordinates (2d): bottom-left(-1,-1), center(0,0), top-right(+1,+1) */ \ + float progress = (PERCENT+1) / 100.f; if(progress > 1) progress = 1; \ + float speed = progress < 1 ? 0.05f : 0.75f; \ + float smooth = previous[JOB_ID] = progress * speed + previous[JOB_ID] * (1-speed); \ + \ + float pixel = 2.f / window_height(), dist = smooth*2-1, y = pixel*3*JOB_ID; \ + if(JOB_ID==0)ddraw_line(vec3(-1,y-pixel*2,0), vec3(1, y-pixel*2,0)); /* full line */ \ + ddraw_line(vec3(-1,y-pixel ,0), vec3(dist,y-pixel ,0)); /* progress line */ \ + ddraw_line(vec3(-1,y+0 ,0), vec3(dist,y+0 ,0)); /* progress line */ \ + ddraw_line(vec3(-1,y+pixel ,0), vec3(dist,y+pixel ,0)); /* progress line */ \ + if(JOB_ID==JOB_MAX-1)ddraw_line(vec3(-1,y+pixel*2,0), vec3(1, y+pixel*2,0)); /* full line */ \ + } while(0) + + if( FLAGS_TRANSPARENT ) {} else // @transparent + for(int i = 0; i < cook_jobs(); ++i) ddraw_progress_bar(i, cook_jobs(), jobs[i].progress); + // ddraw_progress_bar(0, 1, cook_progress()); + + ddraw_flush(); + + do_once window_visible(1); + + // render progress bar at 30Hz + give the cook threads more time to actually cook the assets. + // no big deal since progress bar is usually quiet when cooking assets most of the time. + // also, make the delay even larger when window is minimized or hidden. + // shaved cook times: 88s -> 57s (tcc), 50s -> 43s (vc) + sleep_ms( window_has_visible() && window_has_focus() ? 8 : 16 ); + } + // set black screen + glNewFrame(); + window_swap(); +#if !ENABLE_RETAIL + window_title(""); +#endif + } + + if(cook_cancelling) cook_stop(), exit(-1); + cook_done = true; + + v4k_post_init(mode->refreshRate); + return true; +} + +bool window_create(float scale, unsigned flags) { + return window_create_from_handle(NULL, scale, flags); +} + +static double boot_time = 0; + +char* window_stats() { + static double num_frames = 0, begin = FLT_MAX, prev_frame = 0; + + double now = time_ss(); + if( boot_time < 0 ) boot_time = now; + + if( begin > now ) { + begin = now; + num_frames = 0; + } + if( (now - begin) >= 0.25f ) { + fps = num_frames * (1.f / (now - begin)); + } + if( (now - begin) > 1 ) { + begin = now + ((now - begin) - 1); + num_frames = 0; + } + + const char *cmdline = app_cmdline(); + + // @todo: print %used/%avail kib mem, %used/%avail objs as well + static char buf[256]; + snprintf(buf, 256, "%s%s%s%s | boot %.2fs | %5.2ffps (%.2fms)%s%s", + title, BUILD_VERSION[0] ? " (":"", BUILD_VERSION[0] ? BUILD_VERSION:"", BUILD_VERSION[0] ? ")":"", + !boot_time ? now : boot_time, + fps, (now - prev_frame) * 1000.f, + cmdline[0] ? " | ":"", cmdline[0] ? cmdline:""); + + prev_frame = now; + ++num_frames; + + return buf + strspn(buf, " "); +} + +int window_frame_begin() { + glfwPollEvents(); + + // we cannot simply terminate threads on some OSes. also, aborted cook jobs could leave temporary files on disc. + // so let's try to be polite: we will be disabling any window closing briefly until all cook is either done or canceled. + static bool has_cook; do_once has_cook = !COOK_ON_DEMAND && have_tools() && cook_jobs(); + if( has_cook ) { + has_cook = cook_progress() < 100; + if( glfwWindowShouldClose(g->window) ) cook_cancel(); + glfwSetWindowShouldClose(g->window, GLFW_FALSE); + } + + if( glfwWindowShouldClose(g->window) ) { + return 0; + } + + glNewFrame(); + + ui_create(); + +#if !ENABLE_RETAIL + bool has_menu = ui_has_menubar(); + bool may_render_debug_panel = 1; + + if( have_tools() ) { + static int cook_has_progressbar; do_once cook_has_progressbar = !COOK_ON_DEMAND; + if( cook_has_progressbar) { + // render profiler, unless we are in the cook progress screen + static unsigned frames = 0; if(frames <= 0) frames += cook_progress() >= 100; + may_render_debug_panel = (frames > 0); + } + } + + if (!win_debug_visible) + may_render_debug_panel = 0; + + // generate Debug panel contents + if( may_render_debug_panel ) { + if( has_menu ? ui_window("Debug " ICON_MD_SETTINGS, 0) : ui_panel("Debug " ICON_MD_SETTINGS, 0) ) { + ui_engine(); + + (has_menu ? ui_window_end : ui_panel_end)(); + } + + API int engine_tick(); + engine_tick(); + } +#endif // ENABLE_RETAIL + +#if 0 // deprecated + // run user-defined hooks + for(int i = 0; i < 64; ++i) { + if( hooks[i] ) hooks[i]( userdatas[i] ); + } +#endif + + double now = paused ? t : glfwGetTime(); + dt = now - t; + t = now; + +#if !ENABLE_RETAIL + char *st = window_stats(); + static double timer = 0; + timer += window_delta(); + if( timer >= 0.25 ) { + glfwSetWindowTitle(window, st); + timer = 0; + } +#else + glfwSetWindowTitle(window, title); +#endif + + void input_update(); + input_update(); + + return 1; +} + +void window_frame_end() { + // flush batching systems that need to be rendered before frame swapping. order matters. + { + font_goto(0,0); + touch_flush(); + sprite_flush(); + + // flush all debugdraw calls before swap + dd_ontop = 0; + ddraw_flush(); + glClear(GL_DEPTH_BUFFER_BIT); + dd_ontop = 1; + ddraw_flush(); + + ui_render(); + } + +#if !is(ems) + // save screenshot if queued + if( screenshot_file[0] ) { + int n = 3; + void *rgb = screenshot(n); + stbi_flip_vertically_on_write(true); + if(!stbi_write_png(screenshot_file, w, h, n, rgb, n * w) ) { + PANIC("!could not write screenshot file `%s`\n", screenshot_file); + } + screenshot_file[0] = 0; + } + if( record_active() ) { + void record_frame(); + record_frame(); + } +#endif +} + +void window_frame_swap() { + // glFinish(); +#if !is(ems) + window_vsync(hz); +#endif + glfwSwapBuffers(window); + // emscripten_webgl_commit_frame(); + + static int delay = 0; do_once delay = optioni("--delay", 0); + if( delay && !COOK_ON_DEMAND && cook_progress() >= 100 ) sleep_ms( delay ); +} + +static +void window_shutdown() { + do_once { + #if ENABLE_SELFIES + + snprintf(screenshot_file, DIR_MAX, "%s.png", app_name()); + + int n = 3; + void *rgb = screenshot(n); + stbi_flip_vertically_on_write(true); + if(!stbi_write_png(screenshot_file, w, h, n, rgb, n * w) ) { + PANIC("!could not write screenshot file `%s`\n", screenshot_file); + } + screenshot_file[0] = 0; + + #endif + + window_loop_exit(); // finish emscripten loop automatically + } +} + +int window_swap() { + + // end frame + if( frame_count > 0 ) { + window_frame_end(); + window_frame_swap(); + } + + ++frame_count; + + // begin frame + int ready = window_frame_begin(); + if( !ready ) { + window_shutdown(); + return 0; + } + + static uint64_t capture_frame = 0; + if( cook_done && ++capture_frame == tests_captureframes() ) { + mkdir( "tests/out", 0777 ); + const char *screenshot_file = va("tests/out/%s.png", app_name()); + + int n = 3; + void *rgb = screenshot(n); + stbi_flip_vertically_on_write(true); + if(!stbi_write_png(screenshot_file, w, h, n, rgb, n * w) ) { + PANIC("!could not write screenshot file `%s`\n", screenshot_file); + } + return 0; + } + + return 1; +} + +static +void (*window_render_callback)(void* loopArg); + +static vec2 last_canvas_size = {0}; + +static +void window_resize() { +#if is(ems) + EM_ASM(canvas.canResize = 0); + if (g->flags&WINDOW_FIXED) return; + EM_ASM(canvas.canResize = 1); + vec2 size = window_canvas(); + if (size.x != last_canvas_size.x || size.y != last_canvas_size.y) { + w = size.x; + h = size.y; + g->width = w; + g->height = h; + last_canvas_size = vec2(w,h); + emscripten_set_canvas_size(w, h); + } +#endif /* __EMSCRIPTEN__ */ +} + +static +void window_loop_wrapper( void *loopArg ) { + if( window_frame_begin() ) { + window_resize(); + window_render_callback(loopArg); + window_frame_end(); + window_frame_swap(); + } else { + do_once window_shutdown(); + } +} + +void window_loop(void (*user_function)(void* loopArg), void* loopArg ) { +#if is(ems) + window_render_callback = user_function; + emscripten_set_main_loop_arg(window_loop_wrapper, loopArg, 0, 1); +#else + g->keep_running = true; + while (g->keep_running) + user_function(loopArg); +#endif /* __EMSCRIPTEN__ */ +} + +void window_loop_exit() { +#if is(ems) + emscripten_cancel_main_loop(); +#else + g->keep_running = false; +#endif /* __EMSCRIPTEN__ */ +} + +vec2 window_canvas() { +#if is(ems) + int width = EM_ASM_INT_V(return canvas.width); + int height = EM_ASM_INT_V(return canvas.height); + return vec2(width, height); +#else + glfw_init(); + const GLFWvidmode* mode = glfwGetVideoMode( glfwGetPrimaryMonitor() ); + assert( mode ); + return vec2(mode->width, mode->height); +#endif /* __EMSCRIPTEN__ */ +} + +int window_width() { + return w; +} +int window_height() { + return h; +} +double window_time() { + return t; +} +double window_delta() { + return dt; +} + +void window_debug(int visible) { + win_debug_visible = visible; +} +int window_has_debug() { + return win_debug_visible; +} + +double window_fps() { + return fps; +} +void window_fps_lock(float fps) { + hz = fps; +} +void window_fps_unlock() { + hz = 0; +} +double window_fps_target() { + return hz; +} + +void window_fps_vsync(int vsync) { + glfwSwapInterval(vsync); +} + +uint64_t window_frame() { + return frame_count; +} +void window_title(const char *title_) { + snprintf(title, 128, "%s", title_); + if( !title[0] ) glfwSetWindowTitle(window, title); +} +void window_color(unsigned color) { + unsigned r = (color >> 0) & 255; + unsigned g = (color >> 8) & 255; + unsigned b = (color >> 16) & 255; + unsigned a = (color >> 24) & 255; + winbgcolor = vec4(r / 255.0, g / 255.0, b / 255.0, a / 255.0); +} +static int has_icon; +int window_has_icon() { + return has_icon; +} +void window_icon(const char *file_icon) { + int len = 0; + void *data = vfs_load(file_icon, &len); + if( !data ) data = file_read(file_icon), len = file_size(file_icon); + + if( data && len ) { + image_t img = image_from_mem(data, len, IMAGE_RGBA); + if( img.w && img.h && img.pixels ) { + GLFWimage images[1]; + images[0].width = img.w; + images[0].height = img.h; + images[0].pixels = img.pixels; + glfwSetWindowIcon(window, 1, images); + has_icon = 1; + return; + } + } +#if 0 // is(win32) + HANDLE hIcon = LoadImageA(0, file_icon, IMAGE_ICON, 0, 0, LR_DEFAULTSIZE | LR_LOADFROMFILE); + if( hIcon ) { + HWND hWnd = glfwGetWin32Window(window); + SendMessage(hWnd, WM_SETICON, ICON_SMALL, (LPARAM)hIcon); + SendMessage(hWnd, WM_SETICON, ICON_BIG, (LPARAM)hIcon); + SendMessage(GetWindow(hWnd, GW_OWNER), WM_SETICON, ICON_SMALL, (LPARAM)hIcon); + SendMessage(GetWindow(hWnd, GW_OWNER), WM_SETICON, ICON_BIG, (LPARAM)hIcon); + has_icon = 1; + return; + } +#endif +} +void* window_handle() { + return window; +} + +void window_reload() { + // @todo: save_on_exit(); + fflush(0); + // chdir(app_path()); + execv(__argv[0], __argv); + exit(0); +} + +int window_record(const char *outfile_mp4) { + record_start(outfile_mp4); + // @todo: if( flags & RECORD_MOUSE ) + if( record_active() ) window_cursor_shape(CURSOR_SW_AUTO); else window_cursor_shape(CURSOR_HW_ARROW); + return record_active(); +} + +vec2 window_dpi() { + vec2 dpi = vec2(1,1); +#if !is(ems) && !is(osx) // @todo: remove silicon mac M1 hack + glfwGetMonitorContentScale(glfwGetPrimaryMonitor(), &dpi.x, &dpi.y); +#endif + return dpi; +} + +// ----------------------------------------------------------------------------- +// fullscreen + +static +GLFWmonitor *window_find_monitor(int wx, int wy) { + GLFWmonitor *monitor = glfwGetPrimaryMonitor(); + + // find best monitor given current window coordinates. @todo: select by ocuppied window area inside each monitor instead. + int num_monitors = 0; + GLFWmonitor** monitors = glfwGetMonitors(&num_monitors); +#if is(ems) + return *monitors; +#else + for( int i = 0; i < num_monitors; ++i) { + int mx = 0, my = 0, mw = 0, mh = 0; + glfwGetMonitorWorkarea(monitors[i], &mx, &my, &mw, &mh); + monitor = wx >= mx && wx <= (mx+mw) && wy >= my && wy <= (my+mh) ? monitors[i] : monitor; + } + return monitor; +#endif +} + +#if 0 // to deprecate + +void window_fullscreen(int enabled) { + fullscreen = !!enabled; +#ifndef __EMSCRIPTEN__ + if( fullscreen ) { + int wx = 0, wy = 0; glfwGetWindowPos(window, &wx, &wy); + GLFWmonitor *monitor = window_find_monitor(wx, wy); + + wprev = w, hprev = h, xprev = wx, yprev = wy; // save window context for further restoring + + int width, height; + glfwGetMonitorWorkarea(monitor, NULL, NULL, &width, &height); + glfwSetWindowMonitor(window, monitor, 0, 0, width, height, GLFW_DONT_CARE); + } else { + glfwSetWindowMonitor(window, NULL, xpos, ypos, wprev, hprev, GLFW_DONT_CARE); + glfwSetWindowPos(window, xprev, yprev); + } +#endif +} +int window_has_fullscreen() { + return fullscreen; +} + +#else + +int window_has_fullscreen() { +#if is(ems) + EmscriptenFullscreenChangeEvent fsce; + emscripten_get_fullscreen_status(&fsce); + return !!fsce.isFullscreen; +#else + return !!glfwGetWindowMonitor(g->window); +#endif /* __EMSCRIPTEN__ */ +} + +void window_fullscreen(int enabled) { + if( window_has_fullscreen() == !!enabled ) return; + +#if is(ems) + +#if 0 // deprecated: crash + if( enabled ) { + emscripten_exit_soft_fullscreen(); + + /* Workaround https://github.com/kripken/emscripten/issues/5124#issuecomment-292849872 */ + EM_ASM(JSEvents.inEventHandler = true); + EM_ASM(JSEvents.currentEventHandler = {allowsDeferredCalls:true}); + + EmscriptenFullscreenStrategy strategy = {0}; + strategy.scaleMode = EMSCRIPTEN_FULLSCREEN_SCALE_STRETCH; // _ASPECT + strategy.canvasResolutionScaleMode = EMSCRIPTEN_FULLSCREEN_CANVAS_SCALE_STDDEF; // _NONE _HIDEF + strategy.filteringMode = EMSCRIPTEN_FULLSCREEN_FILTERING_DEFAULT; // _NEAREST + + emscripten_request_fullscreen_strategy(NULL, EM_FALSE/*EM_TRUE*/, &strategy); + //emscripten_enter_soft_fullscreen(NULL, &strategy); + } else { + emscripten_exit_fullscreen(); + } +#else + if( enabled ) + EM_ASM(Module.requestFullscreen(1, 1)); + else + EM_ASM(Module.exitFullscreen()); +#endif + +#else + +#if 0 + if( enabled ) { + /*glfwGetWindowPos(g->window, &g->window_xpos, &g->window_ypos);*/ + glfwGetWindowSize(g->window, &g->width, &g->height); + glfwSetWindowMonitor(g->window, glfwGetPrimaryMonitor(), 0, 0, g->width, g->height, GLFW_DONT_CARE); + } else { + glfwSetWindowMonitor(g->window, NULL, 0, 0, g->width, g->height, GLFW_DONT_CARE); + } +#else + if( enabled ) { + int wx = 0, wy = 0; glfwGetWindowPos(window, &wx, &wy); + GLFWmonitor *monitor = window_find_monitor(wx, wy); + + wprev = w, hprev = h, xprev = wx, yprev = wy; // save window context for further restoring + + int width, height; + glfwGetMonitorWorkarea(monitor, NULL, NULL, &width, &height); + glfwSetWindowMonitor(window, monitor, 0, 0, width, height, GLFW_DONT_CARE); + } else { + glfwSetWindowMonitor(window, NULL, xpos, ypos, wprev, hprev, GLFW_DONT_CARE); + glfwSetWindowPos(window, xprev, yprev); + } +#endif + +#endif +} + +#endif + +void window_pause(int enabled) { + paused = enabled; +} +int window_has_pause() { + return paused; +} +void window_focus() { + glfwFocusWindow(window); +} +int window_has_focus() { + return !!glfwGetWindowAttrib(window, GLFW_FOCUSED); +} +static int cursorshape = 1; +void window_cursor_shape(unsigned mode) { + cursorshape = (mode &= 7); + + static GLFWcursor* cursors[7] = { 0 }; + static unsigned enums[7] = { + 0, + GLFW_ARROW_CURSOR, + GLFW_IBEAM_CURSOR, + GLFW_HRESIZE_CURSOR, + GLFW_VRESIZE_CURSOR, + GLFW_HAND_CURSOR, + GLFW_CROSSHAIR_CURSOR, + }; + do_once { + static unsigned pixels[16 * 16] = { 0x01000000 }; // ABGR(le) glfw3 note: A(0x00) means 0xFF for some reason + static GLFWimage image = { 16, 16, (void*)pixels }; + static GLFWcursor* empty; + for( int x = 0; x < 16 * 16; ++x ) pixels[x] = pixels[0]; + empty = glfwCreateCursor(&image, 0, 0); + + for(int i = 0; i < countof(enums); ++i) cursors[i] = i ? glfwCreateStandardCursor( enums[i] ) : empty; + } + if( mode == CURSOR_SW_AUTO ) { // UI (nuklear) driven cursor + nk_style_show_cursor(ui_handle()); + glfwSetCursor(window, cursors[0] ); + } else { + nk_style_hide_cursor(ui_handle()); + glfwSetCursor(window, mode < countof(enums) ? cursors[mode] : NULL); + } +} +void window_cursor(int visible) { + (cursorshape == CURSOR_SW_AUTO && visible ? nk_style_show_cursor : nk_style_hide_cursor)(ui_handle()); + glfwSetInputMode(window, GLFW_CURSOR, visible ? GLFW_CURSOR_NORMAL : GLFW_CURSOR_DISABLED); +} +int window_has_cursor() { + return glfwGetInputMode(window, GLFW_CURSOR) == GLFW_CURSOR_NORMAL; +} + +void window_visible(int visible) { + if(!window) return; + //if(window) (visible ? glfwRestoreWindow : glfwIconifyWindow)(window); + (visible ? glfwShowWindow : glfwHideWindow)(window); + // call glfwpollevents in linux to flush visiblity changes that would happen in next frame otherwise + #if is(linux) || is(osx) + glfwPollEvents(); + #endif +} +int window_has_visible() { + return glfwGetWindowAttrib(window, GLFW_VISIBLE); +} + +void window_screenshot(const char* outfile_png) { + snprintf(screenshot_file, DIR_MAX, "%s", outfile_png ? outfile_png : ""); +} + +double window_aspect() { + return (double)w / (h + !h); +} +void window_aspect_lock(unsigned numer, unsigned denom) { + if(!window) return; + if( numer * denom ) { + glfwSetWindowAspectRatio(window, numer, denom); + } else { + glfwSetWindowAspectRatio(window, GLFW_DONT_CARE, GLFW_DONT_CARE); + } +} +void window_aspect_unlock() { + if(!window) return; + window_aspect_lock(0, 0); +} + +void window_transparent(int enabled) { + #if !is(ems) + if( !window_has_fullscreen() ) { + if( enabled ) { + glfwSetWindowAttrib(window, GLFW_DECORATED, GLFW_FALSE); + //glfwSetWindowAttrib(window, GLFW_MOUSE_PASSTHROUGH , GLFW_TRUE); + //glfwMaximizeWindow(window); + } else { + //glfwRestoreWindow(window); + //glfwSetWindowAttrib(window, GLFW_MOUSE_PASSTHROUGH , GLFW_FALSE); + glfwSetWindowAttrib(window, GLFW_DECORATED, GLFW_TRUE); + } + } + #endif +} +int window_has_transparent() { + return ifdef(ems, 0, glfwGetWindowAttrib(window, GLFW_DECORATED) != GLFW_TRUE); +} + +void window_maximize(int enabled) { + ifdef(ems, return); + if( !window_has_fullscreen() ) { + if( enabled ) { + glfwMaximizeWindow(window); + } else { + glfwRestoreWindow(window); + } + } +} +int window_has_maximize() { + return ifdef(ems, 0, glfwGetWindowAttrib(window, GLFW_MAXIMIZED) == GLFW_TRUE); +} + +const char *window_clipboard() { + return glfwGetClipboardString(window); +} +void window_setclipboard(const char *text) { + glfwSetClipboardString(window, text); +} + +static +double window_scale() { // ok? @testme + float xscale = 1, yscale = 1; + #if !is(ems) && !is(osx) // @todo: remove silicon mac M1 hack + GLFWmonitor *monitor = glfwGetPrimaryMonitor(); + glfwGetMonitorContentScale(monitor, &xscale, &yscale); + #endif + return maxi(xscale, yscale); +} #line 0 #line 1 "v4k_obj.c" -// ----------------------------------------------------------------------------- -// factory of handle ids, based on code by randy gaul (PD/Zlib licensed) -// - rlyeh, public domain -// -// [src] http://www.randygaul.net/wp-content/uploads/2021/04/handle_table.cpp -// [ref] http://bitsquid.blogspot.com.es/2011/09/managing-decoupling-part-4-id-lookup.html -// [ref] http://glampert.com/2016/05-04/dissecting-idhashindex/ -// [ref] https://github.com/nlguillemot/dof/blob/master/viewer/packed_freelist.h -// [ref] https://gist.github.com/pervognsen/ffd89e45b5750e9ce4c6c8589fc7f253 - -// you cannot change this one: the number of ID_DATA_BITS you can store in a handle depends on ID_COUNT_BITS -#define ID_DATA_BITS (64-ID_COUNT_BITS) - -typedef union id64 { - uint64_t h; - struct { -#if (ID_INDEX_BITS+ID_COUNT_BITS) != 64 - uint64_t padding : 64-ID_INDEX_BITS-ID_COUNT_BITS; -#endif - uint64_t index : ID_INDEX_BITS; - uint64_t count : ID_COUNT_BITS; - }; -} id64; - -typedef struct id_factory id_factory; -id_factory id_factory_create(uint64_t capacity /*= 256*/); -id64 id_factory_insert(id_factory *f, uint64_t data); -uint64_t id_factory_getvalue(id_factory *f, id64 handle); -void id_factory_setvalue(id_factory *f, id64 handle, uint64_t data); -void id_factory_erase(id_factory *f, id64 handle); -bool id_factory_isvalid(id_factory *f, id64 handle); -void id_factory_destroy(id_factory *f); - -// --- - -typedef struct id_factory { - uint64_t freelist; - uint64_t capacity; - uint64_t canary; - union entry* entries; -} id_factory; - -typedef union entry { - struct { - uint64_t data : ID_DATA_BITS; - uint64_t count : ID_COUNT_BITS; - }; - uint64_t h; -} entry; - -id_factory id_factory_create(uint64_t capacity) { - if(!capacity) capacity = 1ULL << ID_INDEX_BITS; - - id_factory f = {0}; - f.entries = CALLOC(1, sizeof(entry) * capacity); - f.capacity = capacity; - - for (int i = 0; i < capacity - 1; ++i) { - f.entries[i].data = i + 1; - f.entries[i].count = 0; - } - f.entries[capacity - 1].h = 0; - f.entries[capacity - 1].data = ~0; - f.entries[capacity - 1].count = ~0; - f.canary = f.entries[capacity - 1].data; - - return f; -} - -void id_factory_destroy(id_factory *f) { - FREE(f->entries); -} - -id64 id_factory_insert(id_factory *f, uint64_t data) { - // pop element off the free list - assert(f->freelist != f->canary && "max alive capacity reached"); - uint64_t index = f->freelist; - f->freelist = f->entries[f->freelist].data; - - // create new id64 - f->entries[index].data = data; - id64 handle = {0}; - handle.index = index; - handle.count = f->entries[index].count; - return handle; -} - -void id_factory_erase(id_factory *f, id64 handle) { - // push id64 onto the freelist - uint64_t index = handle.index; - f->entries[index].data = f->freelist; - f->freelist = index; - - // increment the count. this signifies a change in lifetime (this particular id64 is now dead) - // the next time this particular index is used in alloc, a new `count` will be used to uniquely identify - f->entries[index].count++; -} - -uint64_t id_factory_getvalue(id_factory *f, id64 handle) { - uint64_t index = handle.index; - uint64_t count = handle.count; - assert(f->entries[index].count == count); - return f->entries[index].data; -} - -void id_factory_setvalue(id_factory *f, id64 handle, uint64_t data) { - uint64_t index = handle.index; - uint64_t count = handle.count; - assert(f->entries[index].count == count); - f->entries[index].data = data; -} - -bool id_factory_isvalid(id_factory *f, id64 handle) { - uint64_t index = handle.index; - uint64_t count = handle.count; - if (index >= f->capacity) return false; - return f->entries[index].count == count; -} - -#if 0 -// monitor history of a single entity by running `id_factory | find " 123."` -AUTORUN { - trap_install(); - - id_factory f = id_factory_create(optioni("--NUM",256)); - - array(id64) ids = 0; - for( int i = 0 ; ; ++i, i &= ((1ULL << ID_INDEX_BITS) - 1) ) { // infinite wrap - printf("count_ids(%d) ", array_count(ids)); - bool insert = randf() < 0.49; // biased against deletion - if( insert ) { - id64 h = id_factory_insert(&f, i); - array_push(ids, h); - printf("add %llu.%llu\n", h.index, h.count); - } else { - int count = array_count(ids); - if( count ) { - int chosen = randi(0,count); - printf("del %d.\n", chosen); - id64 h = ids[chosen]; - id_factory_erase(&f, h); - array_erase(ids, chosen); - } - } - } -} -#endif - -// ---------------------------------------------------------------------- -// public api - -static id_factory fid; // @fixme: threadsafe - -uintptr_t id_make(void *ptr) { - do_once fid = id_factory_create(0), id_factory_insert(&fid, 0); // init and reserve id(0) - id64 newid = id_factory_insert(&fid, (uint64_t)(uintptr_t)ptr ); // 48-bit effective addr - return newid.h; -} - -void *id_handle(uintptr_t id) { - return (void *)(uintptr_t)id_factory_getvalue(&fid, ((id64){ (uint64_t)id }) ); -} - -void id_dispose(uintptr_t id) { - id_factory_erase(&fid, ((id64){ (uint64_t)id }) ); -} - -bool id_valid(uintptr_t id) { - return id_factory_isvalid(&fid, ((id64){ (uint64_t)id }) ); -} - -// ---------------------------------------------------------------------- -// C objects framework -// - rlyeh, public domain. - -// --- implement new vtables - -obj_vtable(ctor, void, {} ); -obj_vtable(dtor, void, {} ); - -obj_vtable_null(save, char* ); -obj_vtable_null(load, bool ); -obj_vtable_null(test, int ); - -obj_vtable_null(init, int ); -obj_vtable_null(quit, int ); -obj_vtable_null(tick, int ); -obj_vtable_null(draw, int ); - -obj_vtable_null(lerp, int ); -obj_vtable_null(edit, int ); // OSC cmds: argc,argv "undo","redo","cut","copy","paste","edit","view","menu" -obj_vtable_null(menu, int ); -obj_vtable_null(aabb, int ); -obj_vtable_null(icon, char* ); - -// ---------------------------------------------------------------------------- - -const char *OBJTYPES[256] = { 0 }; // = { REPEAT256("") }; - -// ---------------------------------------------------------------------------- -// heap/stack ctor/dtor - -void *obj_malloc(unsigned sz) { - //sz = sizeof(obj) + sz + sizeof(array(obj*))); // useful? - obj *ptr = CALLOC(1, sz); - OBJ_CTOR_HDR(ptr,1,sz,OBJTYPE_obj); - return ptr; -} -void *obj_free(void *o) { - if( !((obj*)o)->objrefs ) { - obj_detach(o); - obj_dtor(o); - //obj_zero(o); - if( ((obj*)o)->objheap ) { - FREE(o); - } - return 0; - } - return o; // cannot destroy: object is still referenced -} - -// ---------------------------------------------------------------------------- -// core - -uintptr_t obj_header(const void *o) { - return ((obj*)o)->objheader; -} -uintptr_t obj_id(const void *o) { - return ((obj*)o)->objid; -} -unsigned obj_typeid(const void *o) { - return ((obj*)o)->objtype; -} -const char *obj_type(const void *o) { - return OBJTYPES[ (((obj*)o)->objtype) ]; -} -//const char *obj_name(const void *o) { -// return quark(((obj*)o)->objnameid); -//} -int obj_sizeof(const void *o) { - return (int)( ((const obj*)o)->objsizew << OBJ_MIN_PRAGMAPACK_BITS ); -} -int obj_size(const void *o) { // size of all members together in struct. may include padding bytes. - static int obj_sizes[256] = {0}; - unsigned objtypeid = ((obj*)o)->objtype; - if( objtypeid > 1 && !obj_sizes[objtypeid] ) { // check reflection for a more accurate objsize (without padding bits) - reflect_init(); - array(reflect_t) *found = map_find(members, intern(obj_type(o))); - if(!found) - obj_sizes[objtypeid] = obj_sizeof(o) - sizeof(obj); // @fixme: -= sizeof(entity); - else - for each_array_ptr(*found, reflect_t, it) - obj_sizes[objtypeid] += it->bytes; - } - return obj_sizes[objtypeid]; -} -char *obj_data(void *o) { // pointer to the first member in struct - return (char*)o + sizeof(obj); -} -const char *obj_datac(const void *o) { // const pointer to the first struct member - return (const char*)o + sizeof(obj); -} -void* obj_payload(const void *o) { // pointer right after last member in struct - return (char*)o + (((obj*)o)->objsizew<objrefs; - ++o->objrefs; - assert( num < o->objrefs && "Object referenced too many times"); - //++global_ref_count; - return o; -} -void *obj_unref(void *oo) { - obj* o = (obj*)oo; - if( o->objrefs ) --o->objrefs; - if( o->objrefs ) return o; - obj_free(o); - //--global_ref_count; - return 0; -} - -// ---------------------------------------------------------------------------- -// scene tree - -array(obj*)* obj_children(const void *o) { - array(obj*) *c = &((obj*)o)->objchildren; - if(!(*c)) array_push((*c), NULL); // default parenting: none. @todo: optimize & move this at construction time - return c; -} -obj* obj_parent(const void *o) { - array(obj*) *c = obj_children(o); - return 0[*c]; // (*c) ? 0[*c] : NULL; -} -obj* obj_root(const void *o) { - while( obj_parent(o) ) o = obj_parent(o); - return (obj*)o; -} -array(obj*)* obj_siblings(const void *o) { - return obj_children(obj_parent(o)); -} - -static -obj* obj_reparent(obj *o, const void *p) { - array(obj*) *c = obj_children(o); - 0[*c] = (void*)p; - return o; -} - -obj* obj_detach(void *c) { - obj *p = obj_parent(c); - if( p ) { - uintptr_t id = obj_id(c); - - array(obj*) *oo = obj_children(p); - for( int i = 1, end = array_count(*oo); i < end; ++i) { - obj *v = (*oo)[i]; - { - if( obj_id(v) == id ) { - obj_reparent(c, 0); - array_erase_slow(*oo, i); - return c; - } - } - } - } - return 0; -} -obj* obj_attach(void *o, void *c) { - // reattach - obj_detach(c); - obj_reparent(c, o); - // insert into children - array(obj*) *p = obj_children(o); - array_push(*p, c); - return o; -} - -int obj_dumptree(const void *o) { - static int tabs = 0; - printf("%*s" "+- %s\n", tabs++, "", obj_name(o)); - for each_objchild(o, obj*, v) { - obj_dumptree(v); - } - --tabs; - return 0; -} - -static -void test_obj_scene() { - obj *r = obj_new_ext(obj, "root"); // root - obj *c1 = obj_new_ext(obj, "child1"); // child1 - obj *c2 = obj_new_ext(obj, "child2"); // child2 - obj *gc1 = obj_new_ext(obj, "grandchild1"); // grandchild1 - obj *gc2 = obj_new_ext(obj, "grandchild2"); // grandchild2 - obj *gc3 = obj_new_ext(obj, "grandchild3"); // grandchild3 - - test( !obj_parent(r) ); - test( !obj_parent(c1) ); - test( !obj_parent(c2) ); - test( !obj_parent(gc1) ); - test( !obj_parent(gc2) ); - test( !obj_parent(gc3) ); - test( obj_root(r) == r ); - test( obj_root(c1) == c1 ); - test( obj_root(c2) == c2 ); - test( obj_root(gc1) == gc1 ); - test( obj_root(gc2) == gc2 ); - test( obj_root(gc3) == gc3 ); - - // r - obj_attach(r, c1); // +- c1 - obj_attach(c1, gc1); // +- gc1 - obj_attach(r, c2); // +- c2 - obj_attach(c2, gc2); // +- gc2 - obj_attach(c2, gc3); // +- gc3 - - obj_dumptree(r); - // puts("---"); - - test( obj_parent(r) == 0 ); - test( obj_parent(c1) == r ); - test( obj_parent(c2) == r ); - test( obj_parent(gc1) == c1 ); - test( obj_parent(gc2) == c2 ); - test( obj_parent(gc3) == c2 ); - - test( obj_root(r) == r ); - test( obj_root(c1) == r ); - test( obj_root(c2) == r ); - test( obj_root(gc1) == r ); - test( obj_root(gc2) == r ); - test( obj_root(gc3) == r ); - - for each_objchild(r, obj*, o) test( o == c1 || o == c2 ); - for each_objchild(c1, obj*, o) test( o == gc1 ); - for each_objchild(c2, obj*, o) test( o == gc2 || o == gc3 ); - - obj_detach(c1); - test( !obj_parent(c1) ); - for each_objchild(r, obj*, o) test( o != c1 ); - for each_objchild(c1, obj*, o) test( o == gc1 ); - - obj_detach(c2); - test( !obj_parent(c2) ); - for each_objchild(r, obj*, o) test( o != c2 ); - for each_objchild(c2, obj*, o) test( o == gc2 || o == gc3 ); -} - -// ---------------------------------------------------------------------------- -// metadata - -static map(int,int) oms; -static thread_mutex_t *oms_lock; -void *obj_setmeta(void *o, const char *key, const char *value) { - void *ret = 0; - do_threadlock(oms_lock) { - if(!oms) map_init_int(oms); - int *q = map_find_or_add(oms, intern(va("%llu-%s",obj_id((obj*)o),key)), 0); - if(!*q && !value[0]) {} else *q = intern(value); - quark(*q), ret = o; - } - return ret; -} -const char* obj_meta(const void *o, const char *key) { - const char *ret = 0; - do_threadlock(oms_lock) { - if(!oms) map_init_int(oms); - int *q = map_find_or_add(oms, intern(va("%llu-%s",obj_id((obj*)o),key)), 0); - ret = quark(*q); - } - return ret; -} - -void *obj_setname(void *o, const char *name) { - ifdef(debug,((obj*)o)->objname = name); - return obj_setmeta(o, "name", name); -} -const char *obj_name(const void *o) { - const char *objname = obj_meta(o, "name"); - return objname[0] ? objname : "obj"; -} - - -static -void test_obj_metadatas( void *o1 ) { - obj *o = (obj *)o1; - test( !strcmp("", obj_meta(o, "has_passed_test")) ); - test( obj_setmeta(o, "has_passed_test", "yes") ); - test( !strcmp("yes", obj_meta(o, "has_passed_test")) ); -} - -// ---------------------------------------------------------------------------- -// stl - -void* obj_swap(void *dst, void *src) { // @testme - int len = obj_size(dst); - char *buffer = ALLOCA(len); - memcpy(buffer, obj_datac(dst), len); - memcpy(obj_data(dst), obj_datac(src), len); - memcpy(obj_data(src), buffer, len); - return dst; -} - -void* obj_copy_fast(void *dst, const void *src) { - // note: prefer obj_copy() as it should handle pointers and guids as well - return memcpy(obj_data(dst), obj_datac(src), obj_size(dst)); -} -void* obj_copy(void *dst, const void *src) { // @testme - // @todo: use obj_copy_fast() silently if the object does not contain any pointers/guids - return obj_loadini(dst, obj_saveini(src)); - // return obj_load(dst, obj_save(src)); - // return obj_loadbin(dst, obj_savebin(src)); - // return obj_loadini(dst, obj_saveini(src)); - // return obj_loadjson(dst, obj_savejson(src)); - // return obj_loadmpack(dst, obj_savempack(src)); -} - -int obj_comp_fast(const void *a, const void *b) { - // note: prefer obj_comp() as it should handle pointers and guids as well - return memcmp(obj_datac(a), obj_datac(b), obj_size(a)); -} -int obj_comp(const void *a, const void *b) { - // @todo: use obj_comp_fast() silently if the object does not contain any pointers/guids - return strcmp(obj_saveini(a),obj_saveini(b)); -} -int obj_lesser(const void *a, const void *b) { - return obj_comp(a,b) < 0; -} -int obj_greater(const void *a, const void *b) { - return obj_comp(a,b) > 0; -} -int obj_equal(const void *a, const void *b) { - return obj_comp(a,b) == 0; -} - -uint64_t obj_hash(const void *o) { - return hash_bin(obj_datac(o), obj_size(o)); -} - -static -void test_obj_similarity(void *o1, void *o2) { - obj *b = (obj*)o1; - obj *c = (obj*)o2; - test( 0 == strcmp(obj_name(b),obj_name(c)) ); - test( 0 == strcmp(obj_type(b),obj_type(c)) ); -} -static -void test_obj_equality(void *o1, void *o2) { - obj *b = (obj*)o1; - obj *c = (obj*)o2; - test_obj_similarity(b, c); - test( obj_size(b) == obj_size(c) ); - test( obj_hash(b) == obj_hash(c) ); - test( 0 == obj_comp(b,c) ); - test( obj_equal(b,c) ); - test( !obj_lesser(b,c) ); - test( !obj_greater(b,c) ); -} -static -void test_obj_exact(void *o1, void *o2) { - obj *b = (obj*)o1; - obj *c = (obj*)o2; - test_obj_equality(b, c); - test( obj_header(b) == obj_header(c) ); - test( 0 == memcmp(b, c, obj_sizeof(b)) ); -} - -// ---------------------------------------------------------------------------- -// debug - -bool obj_hexdump(const void *oo) { - const obj *o = (const obj *)oo; - int header = 1 * sizeof(obj); - printf("; name[%s] type[%s] id[%d..%d] unused[%08x] sizeof[%02d] %llx\n", - obj_name(o), obj_type(o), - (int)o->objid>>16, (int)o->objid&0xffff, (int)o->objunused, - obj_sizeof(o), o->objheader); - return hexdump(obj_datac(o) - header, obj_size(o) + header), 1; -} -int obj_print(const void *o) { - char *sav = obj_saveini(o); // obj_savejson(o) - return puts(sav); -} -static char *obj_tempname = 0; -static FILE *obj_filelog = 0; -int (obj_printf)(const void *o, const char *text) { - if( !obj_tempname ) { - obj_tempname = stringf("%s.log", app_name()); - unlink(obj_tempname); - obj_filelog = fopen(obj_tempname, "w+b"); - if( obj_filelog ) fseek(obj_filelog, 0L, SEEK_SET); - } - int rc = 0; - for( char *end; (end = strchr(text, '\n')) != NULL; ) { - rc |= fprintf(obj_filelog, "[%p] %.*s\n", o, (int)(end - text), text ); - text = end + 1; - } - if( text[0] ) rc |= fprintf(obj_filelog, "[%p] %s\n", o, text); - return rc; -} -int obj_console(const void *o) { // obj_output() ? - if( obj_filelog ) fflush(obj_filelog); - return obj_tempname && !system(va(ifdef(win32,"type \"%s\" | find \"[%p]\"", "cat %s | grep \"[%p]\""), obj_tempname, o)); -} - -static -void test_obj_console(void *o1) { - obj *o = (obj *)o1; - - obj_printf(o, "this is [%s], line 1\n", obj_name(o)); - obj_printf(NULL, "this line does not belong to any object\n"); - obj_printf(o, "this is [%s], line 2\n", obj_name(o)); - obj_console(o); -} - -// ---------------------------------------------------------------------------- -// serialization - -const char *p2s(const char *type, void *p) { - // @todo: p2s(int interned_type, void *p) - /**/ if( !strcmp(type, "int") ) return itoa1(*(int*)p); - else if( !strcmp(type, "unsigned") ) return itoa1(*(unsigned*)p); - else if( !strcmp(type, "float") ) return ftoa1(*(float*)p); - else if( !strcmp(type, "double") ) return ftoa1(*(double*)p); - else if( !strcmp(type, "uintptr_t") ) return va("%08llx", *(uintptr_t*)p); - else if( !strcmp(type, "vec2i") ) return itoa2(*(vec2i*)p); - else if( !strcmp(type, "vec3i") ) return itoa3(*(vec3i*)p); - else if( !strcmp(type, "vec2") ) return ftoa2(*(vec2*)p); - else if( !strcmp(type, "vec3") ) return ftoa3(*(vec3*)p); - else if( !strcmp(type, "vec4") ) return ftoa4(*(vec4*)p); - else if( !strcmp(type, "rgb") ) return rgbatoa(*(unsigned*)p); - else if( !strcmp(type, "rgba") ) return rgbatoa(*(unsigned*)p); - else if( !strcmp(type, "char*") || !strcmp(type, "string") ) return va("%s", *(char**)p); - // @todo: if strchr('*') assume obj, if reflected save guid: obj_id(); - return tty_color(YELLOW), printf("p2s: cannot serialize `%s` type\n", type), tty_color(0), ""; -} -bool s2p(void *P, const char *type, const char *str) { - int i; unsigned u; float f; double g; char *s = 0; uintptr_t p; - vec2 v2; vec3 v3; vec4 v4; vec2i v2i; vec3i v3i; - /**/ if( !strcmp(type, "int") ) return !!memcpy(P, (i = atoi1(str), &i), sizeof(i)); - else if( !strcmp(type, "unsigned") ) return !!memcpy(P, (u = atoi1(str), &u), sizeof(u)); - else if( !strcmp(type, "vec2i") ) return !!memcpy(P, (v2i = atoi2(str), &v2i), sizeof(v2i)); - else if( !strcmp(type, "vec3i") ) return !!memcpy(P, (v3i = atoi3(str), &v3i), sizeof(v3i)); - else if( !strcmp(type, "float") ) return !!memcpy(P, (f = atof1(str), &f), sizeof(f)); - else if( !strcmp(type, "double") ) return !!memcpy(P, (g = atof1(str), &g), sizeof(g)); - else if( !strcmp(type, "vec2") ) return !!memcpy(P, (v2 = atof2(str), &v2), sizeof(v2)); - else if( !strcmp(type, "vec3") ) return !!memcpy(P, (v3 = atof3(str), &v3), sizeof(v3)); - else if( !strcmp(type, "vec4") ) return !!memcpy(P, (v4 = atof4(str), &v4), sizeof(v4)); - else if( !strcmp(type, "rgb") ) return !!memcpy(P, (u = atorgba(str), &u), sizeof(u)); - else if( !strcmp(type, "rgba") ) return !!memcpy(P, (u = atorgba(str), &u), sizeof(u)); - else if( !strcmp(type, "uintptr_t") ) return !!memcpy(P, (p = strtol(str, NULL, 16), &p), sizeof(p)); - else if( !strcmp(type, "char*") || !strcmp(type, "string") ) { - char substring[128] = {0}; - sscanf(str, "%[^\r\n]", substring); - - strcatf(&s, "%s", substring); - - *(uintptr_t*)(P) = (uintptr_t)s; - return 1; - } - // @todo: if strchr('*') assume obj, if reflected load guid: obj_id(); - return tty_color(YELLOW), printf("s2p: cannot deserialize `%s` type\n", type), tty_color(0), 0; -} - -char *obj_saveini(const void *o) { // @testme - char *out = 0; - const char *T = obj_type(o); - strcatf(&out, "[%s] ; v100\n", T); - for each_member(T,R) { - const char *sav = p2s(R->type,(char*)(o)+R->sz); - if(!sav) return FREE(out), NULL; - strcatf(&out,"%s.%s=%s\n", R->type,R->name,sav ); - } - char *cpy = va("%s", out); - FREE(out); - return cpy; -} -obj *obj_mergeini(void *o, const char *ini) { // @testme - const char *sqr = strchr(ini, '['); - if( !sqr ) return 0; - ini = sqr+1; - - char T[64] = {0}; - if( sscanf(ini, "%63[^]]", T) != 1 ) return 0; // @todo: parse version as well - ini += strlen(T); - - for each_member(T,R) { - char *lookup = va("\n%s.%s=", R->type,R->name), *found = 0; - - // type needed? /* - if(!found) { found = strstr(ini, lookup); if (found) found += strlen(lookup); } - if(!found) { *lookup = '\r'; } - if(!found) { found = strstr(ini, lookup); if (found) found += strlen(lookup); } - // */ - - if(!found) lookup = va("\n%s=", R->name); - - if(!found) { found = strstr(ini, lookup); if (found) found += strlen(lookup); } - if(!found) { *lookup = '\r'; } - if(!found) { found = strstr(ini, lookup); if (found) found += strlen(lookup); } - - if( found) { - if(!s2p((char*)(o)+R->sz, R->type, found)) - return 0; - } - } - return o; -} -obj *obj_loadini(void *o, const char *ini) { // @testme - return obj_mergeini(obj_zero(o), ini); -} - -char *obj_savejson(const void *o) { - char *j = 0; - const char *T = obj_type(o); - for each_member(T,R) { - const char *sav = p2s(R->type,(char*)(o)+R->sz); - if(!sav) return FREE(j), NULL; - char is_string = !strcmp(R->type,"char*") || !strcmp(R->type,"string"); - strcatf(&j," %s: %s%s%s,\n", R->name,is_string?"\"":"",sav,is_string?"\"":"" ); - } - char *out = va("%s: { // v100\n%s}\n", T,j); - FREE(j); -#if is(debug) - json5 root = { 0 }; - char *error = json5_parse(&root, va("%s", out), 0); - assert( !error ); - json5_free(&root); -#endif - return out; -} -obj *obj_mergejson(void *o, const char *json) { - // @fixme: va() call below could be optimized out since we could figure it out if json was internally provided (via va or strdup), or user-provided - json5 root = { 0 }; - char *error = json5_parse(&root, va("%s", json), 0); // @todo: parse version comment - if( !error && root.type == JSON5_OBJECT && root.count == 1 ) { - json5 *n = &root.nodes[0]; - char *T = n->name; - for each_member(T,R) { - for( int i = 0; i < n->count; ++i ) { - if( !strcmp(R->name, n->nodes[i].name) ) { - void *p = (char*)o + R->sz; - /**/ if( n->nodes[i].type == JSON5_UNDEFINED ) {} - else if( n->nodes[i].type == JSON5_NULL ) { - *(uintptr_t*)(p) = (uintptr_t)0; - } - else if( n->nodes[i].type == JSON5_BOOL ) { - *(bool*)p = n->nodes[i].boolean; - } - else if( n->nodes[i].type == JSON5_INTEGER ) { - if( strstr(R->type, "64" ) ) - *(int64_t*)p = n->nodes[i].integer; - else - *(int*)p = n->nodes[i].integer; - } - else if( n->nodes[i].type == JSON5_STRING ) { - char *s = 0; - strcatf(&s, "%s", n->nodes[i].string); - *(uintptr_t*)(p) = (uintptr_t)s; - } - else if( n->nodes[i].type == JSON5_REAL ) { - if( R->type[0] == 'f' ) - *(float*)(p) = n->nodes[i].real; - else - *(double*)(p) = n->nodes[i].real; - } - else if( n->nodes[i].type == JSON5_OBJECT ) {} - else if( n->nodes[i].type == JSON5_ARRAY ) {} - break; - } - } - } - } - json5_free(&root); - return error ? 0 : o; -} -obj *obj_loadjson(void *o, const char *json) { // @testme - return obj_mergejson(obj_zero(o), json); -} - -char *obj_savebin(const void *o) { // PACKMSG("ss", "entity_v1", quark(self->objnameid)); // = PACKMSG("p", obj_data(&b), (uint64_t)obj_size(&b)); - int len = cobs_bounds(obj_size(o)); - char *sav = va("%*.s", len, ""); - len = cobs_encode(obj_datac(o), obj_size(o), sav, len); - sav[len] = '\0'; - return sav; -} -obj *obj_mergebin(void *o, const char *sav) { // UNPACKMSG(sav, "p", obj_data(c), (uint64_t)obj_size(c)); - int outlen = cobs_decode(sav, strlen(sav), obj_data(o), obj_size(o)); - return outlen != obj_size(o) ? NULL : o; -} -obj *obj_loadbin(void *o, const char *sav) { - return obj_mergebin(obj_zero(o), sav); -} - -char *obj_savempack(const void *o) { // @todo - return ""; -} -obj *obj_mergempack(void *o, const char *sav) { // @todo - return 0; -} -obj *obj_loadmpack(void *o, const char *sav) { // @todo - return obj_mergempack(obj_zero(o), sav); -} - -static __thread map(void*,array(char*)) obj_stack; -int obj_push(const void *o) { - if(!obj_stack) map_init_ptr(obj_stack); - array(char*) *found = map_find_or_add(obj_stack,(void*)o,0); - - char *bin = STRDUP(obj_saveini(o)); // @todo: savebin - array_push(*found, bin); - return 1; -} -int obj_pop(void *o) { - if(!obj_stack) map_init_ptr(obj_stack); - array(char*) *found = map_find_or_add(obj_stack,(void*)o,0); - - char **bin = array_back(*found); - if( bin ) { - int rc = !!obj_loadini(o, *bin); // @todo: loadbin - if( array_count(*found) > 1 ) { - FREE(*bin); - array_pop(*found); - } - return rc; - } - return 0; -} - -static -void test_obj_serialization(void *o1, void *o2) { - obj* b = (obj*)o1; - obj* c = (obj*)o2; - - char *json = obj_savejson(b); // puts(json); - test( json[0] ); - char *ini = obj_saveini(b); // puts(ini); - test( ini[0] ); - char *bin = obj_savebin(b); // puts(bin); - test( bin[0] ); - - obj_push(c); - - test( obj_copy(c,b) ); - test( obj_comp(b,c) == 0 ) || obj_hexdump(b) & obj_hexdump(c); - - test( obj_zero(c) ); - test( obj_comp(c,b) != 0 ) || obj_hexdump(c); - test( obj_loadbin(c, bin) ); - test( obj_comp(c,b) == 0 ) || obj_hexdump(c) & obj_hexdump(b); - - test( obj_zero(c) ); - test( obj_comp(c,b) != 0 ) || obj_hexdump(c); - test( obj_loadini(c, ini) ); - test( obj_comp(c,b) == 0 ) || obj_hexdump(c) & obj_hexdump(b); - - test( obj_zero(c) ); - test( obj_comp(c,b) != 0 ) || obj_hexdump(c); - test( obj_loadjson(c, json) ); - test( obj_comp(c,b) == 0 ) || obj_hexdump(c) & obj_hexdump(b); - - obj_pop(c); - obj_hexdump(c); -} - -// ---------------------------------------------------------------------------- -// components - -bool obj_addcomponent(entity *e, unsigned c, void *ptr) { - e->cflags |= (3ULL << c); - e->c[c & (OBJCOMPONENTS_MAX-1)] = ptr; - return 1; -} -bool obj_hascomponent(entity *e, unsigned c) { - return !!(e->cflags & (3ULL << c)); -} -void* obj_getcomponent(entity *e, unsigned c) { - return e->c[c & (OBJCOMPONENTS_MAX-1)]; -} -bool obj_delcomponent(entity *e, unsigned c) { - e->cflags &= ~(3ULL << c); - e->c[c & (OBJCOMPONENTS_MAX-1)] = NULL; - return 1; -} -bool obj_usecomponent(entity *e, unsigned c) { - e->cflags |= (1ULL << c); - return 1; -} -bool obj_offcomponent(entity *e, unsigned c) { - e->cflags &= ~(1ULL << c); - return 0; -} - -char *entity_save(entity *self) { - char *sav = obj_saveini(self); - return sav; -} - -static -void entity_register() { - do_once { - STRUCT(entity, uintptr_t, cflags); - obj_extend(entity, save); - } -} - -AUTORUN{ - entity_register(); -} - -static -void test_obj_ecs() { - entity_register(); // why is this required here? autorun init fiasco? - - entity *e = entity_new(entity); - puts(obj_save(e)); - - for( int i = 0; i < 32; ++i) test(0 == obj_hascomponent(e, i)); - for( int i = 0; i < 32; ++i) test(1 == obj_addcomponent(e, i, NULL)); - for( int i = 0; i < 32; ++i) test(1 == obj_hascomponent(e, i)); - for( int i = 0; i < 32; ++i) test(1 == obj_delcomponent(e, i)); - for( int i = 0; i < 32; ++i) test(0 == obj_hascomponent(e, i)); -} - -// ---------------------------------------------------------------------------- -// reflection - -void* obj_mutate(void *dst, const void *src) { - ((obj*)dst)->objheader = ((const obj *)src)->objheader; - -#if 0 - // mutate a class. ie, convert a given object class into a different one, - // while preserving the original metas, components and references as much as possible. - // @todo iterate per field - - dtor(dst); - - unsigned src_sz = obj_sizeof(src); - unsigned src_id = obj_id(src); - - void *dst_ptr = *((void**)dst - 1); - unsigned payload = (OBJPAYLOAD16(dst_ptr) & 255) | src_id << 8; - FREE( OBJUNBOX(dst_ptr) ); - *((void**)dst - 1) = OBJBOX( STRDUP( OBJUNBOX(*((void**)src - 1)) ), payload); - - void *base = (void*)((void**)dst - 1); - base = REALLOC(base, src_sz + sizeof(void*)); - *dst_ = (char*)base + sizeof(void*); - dst = (char*)base + sizeof(void*); - memcpy(dst, src, src_sz); - - ctor(dst); -#endif - return dst; -} - -void *obj_clone(const void *src) { - int sz = sizeof(obj) + obj_size(src) + sizeof(array(obj*)); - enum { N = 8 }; sz = ((sz + (N - 1)) & -N); // Round up to N-byte boundary - obj *ptr = obj_malloc( sz ); - obj_mutate(ptr, src); // ptr->objheader = ((const obj *)src)->objheader; - obj_loadini(ptr, obj_saveini(src)); - return ptr; -} - -void* obj_merge(void *dst, const void *src) { // @testme - char *bin = obj_savebin(src); - return obj_mergebin(dst, bin); -} - -void *obj_make(const char *str) { - const char *T; - const char *I = strchr(str, '['); // is_ini - const char *J = strchr(str, '{'); // is_json - if( !I && !J ) return 0; - else if( I && !J ) T = I; - else if( !I && J ) T = J; - else T = I < J ? I : J; - - char name[64] = {0}; - if( sscanf(T+1, T == I ? "%63[^]]" : "%63[^:=]", name) != 1 ) return 0; - - int has_components = 0; // @todo: support entities too - - unsigned Tid = intern(name); - reflect_init(); - reflect_t *found = map_find(reflects, Tid); - if(!found) return obj_new(obj); - - obj *ptr = CALLOC(1, found->sz + (has_components+1) * sizeof(array(obj*))); - void *ret = (T == I ? obj_mergeini : obj_mergejson)(ptr, str); - OBJTYPES[ found->objtype ] = found->name; - OBJ_CTOR_PTR(ptr,1,/*found->id,*/found->sz,found->objtype); - obj_setname(ptr, name); // found->id); - - return ptr; // returns partial construction as well. @todo: just return `ret` for a more strict built/failed policy -} +// ----------------------------------------------------------------------------- +// factory of handle ids, based on code by randy gaul (PD/Zlib licensed) +// - rlyeh, public domain +// +// [src] http://www.randygaul.net/wp-content/uploads/2021/04/handle_table.cpp +// [ref] http://bitsquid.blogspot.com.es/2011/09/managing-decoupling-part-4-id-lookup.html +// [ref] http://glampert.com/2016/05-04/dissecting-idhashindex/ +// [ref] https://github.com/nlguillemot/dof/blob/master/viewer/packed_freelist.h +// [ref] https://gist.github.com/pervognsen/ffd89e45b5750e9ce4c6c8589fc7f253 + +// you cannot change this one: the number of ID_DATA_BITS you can store in a handle depends on ID_COUNT_BITS +#define ID_DATA_BITS (64-ID_COUNT_BITS) + +typedef union id64 { + uint64_t h; + struct { +#if (ID_INDEX_BITS+ID_COUNT_BITS) != 64 + uint64_t padding : 64-ID_INDEX_BITS-ID_COUNT_BITS; +#endif + uint64_t index : ID_INDEX_BITS; + uint64_t count : ID_COUNT_BITS; + }; +} id64; + +typedef struct id_factory id_factory; +id_factory id_factory_create(uint64_t capacity /*= 256*/); +id64 id_factory_insert(id_factory *f, uint64_t data); +uint64_t id_factory_getvalue(id_factory *f, id64 handle); +void id_factory_setvalue(id_factory *f, id64 handle, uint64_t data); +void id_factory_erase(id_factory *f, id64 handle); +bool id_factory_isvalid(id_factory *f, id64 handle); +void id_factory_destroy(id_factory *f); + +// --- + +typedef struct id_factory { + uint64_t freelist; + uint64_t capacity; + uint64_t canary; + union entry* entries; +} id_factory; + +typedef union entry { + struct { + uint64_t data : ID_DATA_BITS; + uint64_t count : ID_COUNT_BITS; + }; + uint64_t h; +} entry; + +id_factory id_factory_create(uint64_t capacity) { + if(!capacity) capacity = 1ULL << ID_INDEX_BITS; + + id_factory f = {0}; + f.entries = CALLOC(1, sizeof(entry) * capacity); + f.capacity = capacity; + + for (int i = 0; i < capacity - 1; ++i) { + f.entries[i].data = i + 1; + f.entries[i].count = 0; + } + f.entries[capacity - 1].h = 0; + f.entries[capacity - 1].data = ~0; + f.entries[capacity - 1].count = ~0; + f.canary = f.entries[capacity - 1].data; + + return f; +} + +void id_factory_destroy(id_factory *f) { + FREE(f->entries); +} + +id64 id_factory_insert(id_factory *f, uint64_t data) { + // pop element off the free list + assert(f->freelist != f->canary && "max alive capacity reached"); + uint64_t index = f->freelist; + f->freelist = f->entries[f->freelist].data; + + // create new id64 + f->entries[index].data = data; + id64 handle = {0}; + handle.index = index; + handle.count = f->entries[index].count; + return handle; +} + +void id_factory_erase(id_factory *f, id64 handle) { + // push id64 onto the freelist + uint64_t index = handle.index; + f->entries[index].data = f->freelist; + f->freelist = index; + + // increment the count. this signifies a change in lifetime (this particular id64 is now dead) + // the next time this particular index is used in alloc, a new `count` will be used to uniquely identify + f->entries[index].count++; +} + +uint64_t id_factory_getvalue(id_factory *f, id64 handle) { + uint64_t index = handle.index; + uint64_t count = handle.count; + assert(f->entries[index].count == count); + return f->entries[index].data; +} + +void id_factory_setvalue(id_factory *f, id64 handle, uint64_t data) { + uint64_t index = handle.index; + uint64_t count = handle.count; + assert(f->entries[index].count == count); + f->entries[index].data = data; +} + +bool id_factory_isvalid(id_factory *f, id64 handle) { + uint64_t index = handle.index; + uint64_t count = handle.count; + if (index >= f->capacity) return false; + return f->entries[index].count == count; +} + +#if 0 +// monitor history of a single entity by running `id_factory | find " 123."` +AUTORUN { + trap_install(); + + id_factory f = id_factory_create(optioni("--NUM",256)); + + array(id64) ids = 0; + for( int i = 0 ; ; ++i, i &= ((1ULL << ID_INDEX_BITS) - 1) ) { // infinite wrap + printf("count_ids(%d) ", array_count(ids)); + bool insert = randf() < 0.49; // biased against deletion + if( insert ) { + id64 h = id_factory_insert(&f, i); + array_push(ids, h); + printf("add %llu.%llu\n", h.index, h.count); + } else { + int count = array_count(ids); + if( count ) { + int chosen = randi(0,count); + printf("del %d.\n", chosen); + id64 h = ids[chosen]; + id_factory_erase(&f, h); + array_erase(ids, chosen); + } + } + } +} +#endif + +// ---------------------------------------------------------------------- +// public api + +static id_factory fid; // @fixme: threadsafe + +uintptr_t id_make(void *ptr) { + do_once fid = id_factory_create(0), id_factory_insert(&fid, 0); // init and reserve id(0) + id64 newid = id_factory_insert(&fid, (uint64_t)(uintptr_t)ptr ); // 48-bit effective addr + return newid.h; +} + +void *id_handle(uintptr_t id) { + return (void *)(uintptr_t)id_factory_getvalue(&fid, ((id64){ (uint64_t)id }) ); +} + +void id_dispose(uintptr_t id) { + id_factory_erase(&fid, ((id64){ (uint64_t)id }) ); +} + +bool id_valid(uintptr_t id) { + return id_factory_isvalid(&fid, ((id64){ (uint64_t)id }) ); +} + +// ---------------------------------------------------------------------- +// C objects framework +// - rlyeh, public domain. + +// --- implement new vtables + +obj_vtable(ctor, void, {} ); +obj_vtable(dtor, void, {} ); + +obj_vtable_null(save, char* ); +obj_vtable_null(load, bool ); +obj_vtable_null(test, int ); + +obj_vtable_null(init, int ); +obj_vtable_null(quit, int ); +obj_vtable_null(tick, int ); +obj_vtable_null(draw, int ); + +obj_vtable_null(lerp, int ); +obj_vtable_null(edit, int ); // OSC cmds: argc,argv "undo","redo","cut","copy","paste","edit","view","menu" +obj_vtable_null(menu, int ); +obj_vtable_null(aabb, int ); +obj_vtable_null(icon, char* ); + +// ---------------------------------------------------------------------------- + +const char *OBJTYPES[256] = { 0 }; // = { REPEAT256("") }; + +// ---------------------------------------------------------------------------- +// heap/stack ctor/dtor + +void *obj_malloc(unsigned sz) { + //sz = sizeof(obj) + sz + sizeof(array(obj*))); // useful? + obj *ptr = CALLOC(1, sz); + OBJ_CTOR_HDR(ptr,1,sz,OBJTYPE_obj); + return ptr; +} +void *obj_free(void *o) { + if( !((obj*)o)->objrefs ) { + obj_detach(o); + obj_dtor(o); + //obj_zero(o); + if( ((obj*)o)->objheap ) { + FREE(o); + } + return 0; + } + return o; // cannot destroy: object is still referenced +} + +// ---------------------------------------------------------------------------- +// core + +uintptr_t obj_header(const void *o) { + return ((obj*)o)->objheader; +} +uintptr_t obj_id(const void *o) { + return ((obj*)o)->objid; +} +unsigned obj_typeid(const void *o) { + return ((obj*)o)->objtype; +} +const char *obj_type(const void *o) { + return OBJTYPES[ (((obj*)o)->objtype) ]; +} +//const char *obj_name(const void *o) { +// return quark(((obj*)o)->objnameid); +//} +int obj_sizeof(const void *o) { + return (int)( ((const obj*)o)->objsizew << OBJ_MIN_PRAGMAPACK_BITS ); +} +int obj_size(const void *o) { // size of all members together in struct. may include padding bytes. + static int obj_sizes[256] = {0}; + unsigned objtypeid = ((obj*)o)->objtype; + if( objtypeid > 1 && !obj_sizes[objtypeid] ) { // check reflection for a more accurate objsize (without padding bits) + reflect_init(); + array(reflect_t) *found = map_find(members, intern(obj_type(o))); + if(!found) + obj_sizes[objtypeid] = obj_sizeof(o) - sizeof(obj); // @fixme: -= sizeof(entity); + else + for each_array_ptr(*found, reflect_t, it) + obj_sizes[objtypeid] += it->bytes; + } + return obj_sizes[objtypeid]; +} +char *obj_data(void *o) { // pointer to the first member in struct + return (char*)o + sizeof(obj); +} +const char *obj_datac(const void *o) { // const pointer to the first struct member + return (const char*)o + sizeof(obj); +} +void* obj_payload(const void *o) { // pointer right after last member in struct + return (char*)o + (((obj*)o)->objsizew<objrefs; + ++o->objrefs; + assert( num < o->objrefs && "Object referenced too many times"); + //++global_ref_count; + return o; +} +void *obj_unref(void *oo) { + obj* o = (obj*)oo; + if( o->objrefs ) --o->objrefs; + if( o->objrefs ) return o; + obj_free(o); + //--global_ref_count; + return 0; +} + +// ---------------------------------------------------------------------------- +// scene tree + +array(obj*)* obj_children(const void *o) { + array(obj*) *c = &((obj*)o)->objchildren; + if(!(*c)) array_push((*c), NULL); // default parenting: none. @todo: optimize & move this at construction time + return c; +} +obj* obj_parent(const void *o) { + array(obj*) *c = obj_children(o); + return 0[*c]; // (*c) ? 0[*c] : NULL; +} +obj* obj_root(const void *o) { + while( obj_parent(o) ) o = obj_parent(o); + return (obj*)o; +} +array(obj*)* obj_siblings(const void *o) { + return obj_children(obj_parent(o)); +} + +static +obj* obj_reparent(obj *o, const void *p) { + array(obj*) *c = obj_children(o); + 0[*c] = (void*)p; + return o; +} + +obj* obj_detach(void *c) { + obj *p = obj_parent(c); + if( p ) { + uintptr_t id = obj_id(c); + + array(obj*) *oo = obj_children(p); + for( int i = 1, end = array_count(*oo); i < end; ++i) { + obj *v = (*oo)[i]; + { + if( obj_id(v) == id ) { + obj_reparent(c, 0); + array_erase_slow(*oo, i); + return c; + } + } + } + } + return 0; +} +obj* obj_attach(void *o, void *c) { + // reattach + obj_detach(c); + obj_reparent(c, o); + // insert into children + array(obj*) *p = obj_children(o); + array_push(*p, c); + return o; +} + +int obj_dumptree(const void *o) { + static int tabs = 0; + printf("%*s" "+- %s\n", tabs++, "", obj_name(o)); + for each_objchild(o, obj*, v) { + obj_dumptree(v); + } + --tabs; + return 0; +} + +static +void test_obj_scene() { + obj *r = obj_new_ext(obj, "root"); // root + obj *c1 = obj_new_ext(obj, "child1"); // child1 + obj *c2 = obj_new_ext(obj, "child2"); // child2 + obj *gc1 = obj_new_ext(obj, "grandchild1"); // grandchild1 + obj *gc2 = obj_new_ext(obj, "grandchild2"); // grandchild2 + obj *gc3 = obj_new_ext(obj, "grandchild3"); // grandchild3 + + test( !obj_parent(r) ); + test( !obj_parent(c1) ); + test( !obj_parent(c2) ); + test( !obj_parent(gc1) ); + test( !obj_parent(gc2) ); + test( !obj_parent(gc3) ); + test( obj_root(r) == r ); + test( obj_root(c1) == c1 ); + test( obj_root(c2) == c2 ); + test( obj_root(gc1) == gc1 ); + test( obj_root(gc2) == gc2 ); + test( obj_root(gc3) == gc3 ); + + // r + obj_attach(r, c1); // +- c1 + obj_attach(c1, gc1); // +- gc1 + obj_attach(r, c2); // +- c2 + obj_attach(c2, gc2); // +- gc2 + obj_attach(c2, gc3); // +- gc3 + + obj_dumptree(r); + // puts("---"); + + test( obj_parent(r) == 0 ); + test( obj_parent(c1) == r ); + test( obj_parent(c2) == r ); + test( obj_parent(gc1) == c1 ); + test( obj_parent(gc2) == c2 ); + test( obj_parent(gc3) == c2 ); + + test( obj_root(r) == r ); + test( obj_root(c1) == r ); + test( obj_root(c2) == r ); + test( obj_root(gc1) == r ); + test( obj_root(gc2) == r ); + test( obj_root(gc3) == r ); + + for each_objchild(r, obj*, o) test( o == c1 || o == c2 ); + for each_objchild(c1, obj*, o) test( o == gc1 ); + for each_objchild(c2, obj*, o) test( o == gc2 || o == gc3 ); + + obj_detach(c1); + test( !obj_parent(c1) ); + for each_objchild(r, obj*, o) test( o != c1 ); + for each_objchild(c1, obj*, o) test( o == gc1 ); + + obj_detach(c2); + test( !obj_parent(c2) ); + for each_objchild(r, obj*, o) test( o != c2 ); + for each_objchild(c2, obj*, o) test( o == gc2 || o == gc3 ); +} + +// ---------------------------------------------------------------------------- +// metadata + +static map(int,int) oms; +static thread_mutex_t *oms_lock; +void *obj_setmeta(void *o, const char *key, const char *value) { + void *ret = 0; + do_threadlock(oms_lock) { + if(!oms) map_init_int(oms); + int *q = map_find_or_add(oms, intern(va("%llu-%s",obj_id((obj*)o),key)), 0); + if(!*q && !value[0]) {} else *q = intern(value); + quark(*q), ret = o; + } + return ret; +} +const char* obj_meta(const void *o, const char *key) { + const char *ret = 0; + do_threadlock(oms_lock) { + if(!oms) map_init_int(oms); + int *q = map_find_or_add(oms, intern(va("%llu-%s",obj_id((obj*)o),key)), 0); + ret = quark(*q); + } + return ret; +} + +void *obj_setname(void *o, const char *name) { + ifdef(debug,((obj*)o)->objname = name); + return obj_setmeta(o, "name", name); +} +const char *obj_name(const void *o) { + const char *objname = obj_meta(o, "name"); + return objname[0] ? objname : "obj"; +} + + +static +void test_obj_metadatas( void *o1 ) { + obj *o = (obj *)o1; + test( !strcmp("", obj_meta(o, "has_passed_test")) ); + test( obj_setmeta(o, "has_passed_test", "yes") ); + test( !strcmp("yes", obj_meta(o, "has_passed_test")) ); +} + +// ---------------------------------------------------------------------------- +// stl + +void* obj_swap(void *dst, void *src) { // @testme + int len = obj_size(dst); + char *buffer = ALLOCA(len); + memcpy(buffer, obj_datac(dst), len); + memcpy(obj_data(dst), obj_datac(src), len); + memcpy(obj_data(src), buffer, len); + return dst; +} + +void* obj_copy_fast(void *dst, const void *src) { + // note: prefer obj_copy() as it should handle pointers and guids as well + return memcpy(obj_data(dst), obj_datac(src), obj_size(dst)); +} +void* obj_copy(void *dst, const void *src) { // @testme + // @todo: use obj_copy_fast() silently if the object does not contain any pointers/guids + return obj_loadini(dst, obj_saveini(src)); + // return obj_load(dst, obj_save(src)); + // return obj_loadbin(dst, obj_savebin(src)); + // return obj_loadini(dst, obj_saveini(src)); + // return obj_loadjson(dst, obj_savejson(src)); + // return obj_loadmpack(dst, obj_savempack(src)); +} + +int obj_comp_fast(const void *a, const void *b) { + // note: prefer obj_comp() as it should handle pointers and guids as well + return memcmp(obj_datac(a), obj_datac(b), obj_size(a)); +} +int obj_comp(const void *a, const void *b) { + // @todo: use obj_comp_fast() silently if the object does not contain any pointers/guids + return strcmp(obj_saveini(a),obj_saveini(b)); +} +int obj_lesser(const void *a, const void *b) { + return obj_comp(a,b) < 0; +} +int obj_greater(const void *a, const void *b) { + return obj_comp(a,b) > 0; +} +int obj_equal(const void *a, const void *b) { + return obj_comp(a,b) == 0; +} + +uint64_t obj_hash(const void *o) { + return hash_bin(obj_datac(o), obj_size(o)); +} + +static +void test_obj_similarity(void *o1, void *o2) { + obj *b = (obj*)o1; + obj *c = (obj*)o2; + test( 0 == strcmp(obj_name(b),obj_name(c)) ); + test( 0 == strcmp(obj_type(b),obj_type(c)) ); +} +static +void test_obj_equality(void *o1, void *o2) { + obj *b = (obj*)o1; + obj *c = (obj*)o2; + test_obj_similarity(b, c); + test( obj_size(b) == obj_size(c) ); + test( obj_hash(b) == obj_hash(c) ); + test( 0 == obj_comp(b,c) ); + test( obj_equal(b,c) ); + test( !obj_lesser(b,c) ); + test( !obj_greater(b,c) ); +} +static +void test_obj_exact(void *o1, void *o2) { + obj *b = (obj*)o1; + obj *c = (obj*)o2; + test_obj_equality(b, c); + test( obj_header(b) == obj_header(c) ); + test( 0 == memcmp(b, c, obj_sizeof(b)) ); +} + +// ---------------------------------------------------------------------------- +// debug + +bool obj_hexdump(const void *oo) { + const obj *o = (const obj *)oo; + int header = 1 * sizeof(obj); + printf("; name[%s] type[%s] id[%d..%d] unused[%08x] sizeof[%02d] %llx\n", + obj_name(o), obj_type(o), + (int)o->objid>>16, (int)o->objid&0xffff, (int)o->objunused, + obj_sizeof(o), o->objheader); + return hexdump(obj_datac(o) - header, obj_size(o) + header), 1; +} +int obj_print(const void *o) { + char *sav = obj_saveini(o); // obj_savejson(o) + return puts(sav); +} +static char *obj_tempname = 0; +static FILE *obj_filelog = 0; +int (obj_printf)(const void *o, const char *text) { + if( !obj_tempname ) { + obj_tempname = stringf("%s.log", app_name()); + unlink(obj_tempname); + obj_filelog = fopen(obj_tempname, "w+b"); + if( obj_filelog ) fseek(obj_filelog, 0L, SEEK_SET); + } + int rc = 0; + for( char *end; (end = strchr(text, '\n')) != NULL; ) { + rc |= fprintf(obj_filelog, "[%p] %.*s\n", o, (int)(end - text), text ); + text = end + 1; + } + if( text[0] ) rc |= fprintf(obj_filelog, "[%p] %s\n", o, text); + return rc; +} +int obj_console(const void *o) { // obj_output() ? + if( obj_filelog ) fflush(obj_filelog); + return obj_tempname && !system(va(ifdef(win32,"type \"%s\" | find \"[%p]\"", "cat %s | grep \"[%p]\""), obj_tempname, o)); +} + +static +void test_obj_console(void *o1) { + obj *o = (obj *)o1; + + obj_printf(o, "this is [%s], line 1\n", obj_name(o)); + obj_printf(NULL, "this line does not belong to any object\n"); + obj_printf(o, "this is [%s], line 2\n", obj_name(o)); + obj_console(o); +} + +// ---------------------------------------------------------------------------- +// serialization + +const char *p2s(const char *type, void *p) { + // @todo: p2s(int interned_type, void *p) + /**/ if( !strcmp(type, "int") ) return itoa1(*(int*)p); + else if( !strcmp(type, "unsigned") ) return itoa1(*(unsigned*)p); + else if( !strcmp(type, "float") ) return ftoa1(*(float*)p); + else if( !strcmp(type, "double") ) return ftoa1(*(double*)p); + else if( !strcmp(type, "uintptr_t") ) return va("%08llx", *(uintptr_t*)p); + else if( !strcmp(type, "vec2i") ) return itoa2(*(vec2i*)p); + else if( !strcmp(type, "vec3i") ) return itoa3(*(vec3i*)p); + else if( !strcmp(type, "vec2") ) return ftoa2(*(vec2*)p); + else if( !strcmp(type, "vec3") ) return ftoa3(*(vec3*)p); + else if( !strcmp(type, "vec4") ) return ftoa4(*(vec4*)p); + else if( !strcmp(type, "rgb") ) return rgbatoa(*(unsigned*)p); + else if( !strcmp(type, "rgba") ) return rgbatoa(*(unsigned*)p); + else if( !strcmp(type, "char*") || !strcmp(type, "string") ) return va("%s", *(char**)p); + // @todo: if strchr('*') assume obj, if reflected save guid: obj_id(); + return tty_color(YELLOW), printf("p2s: cannot serialize `%s` type\n", type), tty_color(0), ""; +} +bool s2p(void *P, const char *type, const char *str) { + int i; unsigned u; float f; double g; char *s = 0; uintptr_t p; + vec2 v2; vec3 v3; vec4 v4; vec2i v2i; vec3i v3i; + /**/ if( !strcmp(type, "int") ) return !!memcpy(P, (i = atoi1(str), &i), sizeof(i)); + else if( !strcmp(type, "unsigned") ) return !!memcpy(P, (u = atoi1(str), &u), sizeof(u)); + else if( !strcmp(type, "vec2i") ) return !!memcpy(P, (v2i = atoi2(str), &v2i), sizeof(v2i)); + else if( !strcmp(type, "vec3i") ) return !!memcpy(P, (v3i = atoi3(str), &v3i), sizeof(v3i)); + else if( !strcmp(type, "float") ) return !!memcpy(P, (f = atof1(str), &f), sizeof(f)); + else if( !strcmp(type, "double") ) return !!memcpy(P, (g = atof1(str), &g), sizeof(g)); + else if( !strcmp(type, "vec2") ) return !!memcpy(P, (v2 = atof2(str), &v2), sizeof(v2)); + else if( !strcmp(type, "vec3") ) return !!memcpy(P, (v3 = atof3(str), &v3), sizeof(v3)); + else if( !strcmp(type, "vec4") ) return !!memcpy(P, (v4 = atof4(str), &v4), sizeof(v4)); + else if( !strcmp(type, "rgb") ) return !!memcpy(P, (u = atorgba(str), &u), sizeof(u)); + else if( !strcmp(type, "rgba") ) return !!memcpy(P, (u = atorgba(str), &u), sizeof(u)); + else if( !strcmp(type, "uintptr_t") ) return !!memcpy(P, (p = strtol(str, NULL, 16), &p), sizeof(p)); + else if( !strcmp(type, "char*") || !strcmp(type, "string") ) { + char substring[128] = {0}; + sscanf(str, "%[^\r\n]", substring); + + strcatf(&s, "%s", substring); + + *(uintptr_t*)(P) = (uintptr_t)s; + return 1; + } + // @todo: if strchr('*') assume obj, if reflected load guid: obj_id(); + return tty_color(YELLOW), printf("s2p: cannot deserialize `%s` type\n", type), tty_color(0), 0; +} + +char *obj_saveini(const void *o) { // @testme + char *out = 0; + const char *T = obj_type(o); + strcatf(&out, "[%s] ; v100\n", T); + for each_member(T,R) { + const char *sav = p2s(R->type,(char*)(o)+R->sz); + if(!sav) return FREE(out), NULL; + strcatf(&out,"%s.%s=%s\n", R->type,R->name,sav ); + } + char *cpy = va("%s", out); + FREE(out); + return cpy; +} +obj *obj_mergeini(void *o, const char *ini) { // @testme + const char *sqr = strchr(ini, '['); + if( !sqr ) return 0; + ini = sqr+1; + + char T[64] = {0}; + if( sscanf(ini, "%63[^]]", T) != 1 ) return 0; // @todo: parse version as well + ini += strlen(T); + + for each_member(T,R) { + char *lookup = va("\n%s.%s=", R->type,R->name), *found = 0; + + // type needed? /* + if(!found) { found = strstr(ini, lookup); if (found) found += strlen(lookup); } + if(!found) { *lookup = '\r'; } + if(!found) { found = strstr(ini, lookup); if (found) found += strlen(lookup); } + // */ + + if(!found) lookup = va("\n%s=", R->name); + + if(!found) { found = strstr(ini, lookup); if (found) found += strlen(lookup); } + if(!found) { *lookup = '\r'; } + if(!found) { found = strstr(ini, lookup); if (found) found += strlen(lookup); } + + if( found) { + if(!s2p((char*)(o)+R->sz, R->type, found)) + return 0; + } + } + return o; +} +obj *obj_loadini(void *o, const char *ini) { // @testme + return obj_mergeini(obj_zero(o), ini); +} + +char *obj_savejson(const void *o) { + char *j = 0; + const char *T = obj_type(o); + for each_member(T,R) { + const char *sav = p2s(R->type,(char*)(o)+R->sz); + if(!sav) return FREE(j), NULL; + char is_string = !strcmp(R->type,"char*") || !strcmp(R->type,"string"); + strcatf(&j," %s: %s%s%s,\n", R->name,is_string?"\"":"",sav,is_string?"\"":"" ); + } + char *out = va("%s: { // v100\n%s}\n", T,j); + FREE(j); +#if is(debug) + json5 root = { 0 }; + char *error = json5_parse(&root, va("%s", out), 0); + assert( !error ); + json5_free(&root); +#endif + return out; +} +obj *obj_mergejson(void *o, const char *json) { + // @fixme: va() call below could be optimized out since we could figure it out if json was internally provided (via va or strdup), or user-provided + json5 root = { 0 }; + char *error = json5_parse(&root, va("%s", json), 0); // @todo: parse version comment + if( !error && root.type == JSON5_OBJECT && root.count == 1 ) { + json5 *n = &root.nodes[0]; + char *T = n->name; + for each_member(T,R) { + for( int i = 0; i < n->count; ++i ) { + if( !strcmp(R->name, n->nodes[i].name) ) { + void *p = (char*)o + R->sz; + /**/ if( n->nodes[i].type == JSON5_UNDEFINED ) {} + else if( n->nodes[i].type == JSON5_NULL ) { + *(uintptr_t*)(p) = (uintptr_t)0; + } + else if( n->nodes[i].type == JSON5_BOOL ) { + *(bool*)p = n->nodes[i].boolean; + } + else if( n->nodes[i].type == JSON5_INTEGER ) { + if( strstr(R->type, "64" ) ) + *(int64_t*)p = n->nodes[i].integer; + else + *(int*)p = n->nodes[i].integer; + } + else if( n->nodes[i].type == JSON5_STRING ) { + char *s = 0; + strcatf(&s, "%s", n->nodes[i].string); + *(uintptr_t*)(p) = (uintptr_t)s; + } + else if( n->nodes[i].type == JSON5_REAL ) { + if( R->type[0] == 'f' ) + *(float*)(p) = n->nodes[i].real; + else + *(double*)(p) = n->nodes[i].real; + } + else if( n->nodes[i].type == JSON5_OBJECT ) {} + else if( n->nodes[i].type == JSON5_ARRAY ) {} + break; + } + } + } + } + json5_free(&root); + return error ? 0 : o; +} +obj *obj_loadjson(void *o, const char *json) { // @testme + return obj_mergejson(obj_zero(o), json); +} + +char *obj_savebin(const void *o) { // PACKMSG("ss", "entity_v1", quark(self->objnameid)); // = PACKMSG("p", obj_data(&b), (uint64_t)obj_size(&b)); + int len = cobs_bounds(obj_size(o)); + char *sav = va("%*.s", len, ""); + len = cobs_encode(obj_datac(o), obj_size(o), sav, len); + sav[len] = '\0'; + return sav; +} +obj *obj_mergebin(void *o, const char *sav) { // UNPACKMSG(sav, "p", obj_data(c), (uint64_t)obj_size(c)); + int outlen = cobs_decode(sav, strlen(sav), obj_data(o), obj_size(o)); + return outlen != obj_size(o) ? NULL : o; +} +obj *obj_loadbin(void *o, const char *sav) { + return obj_mergebin(obj_zero(o), sav); +} + +char *obj_savempack(const void *o) { // @todo + return ""; +} +obj *obj_mergempack(void *o, const char *sav) { // @todo + return 0; +} +obj *obj_loadmpack(void *o, const char *sav) { // @todo + return obj_mergempack(obj_zero(o), sav); +} + +static __thread map(void*,array(char*)) obj_stack; +int obj_push(const void *o) { + if(!obj_stack) map_init_ptr(obj_stack); + array(char*) *found = map_find_or_add(obj_stack,(void*)o,0); + + char *bin = STRDUP(obj_saveini(o)); // @todo: savebin + array_push(*found, bin); + return 1; +} +int obj_pop(void *o) { + if(!obj_stack) map_init_ptr(obj_stack); + array(char*) *found = map_find_or_add(obj_stack,(void*)o,0); + + char **bin = array_back(*found); + if( bin ) { + int rc = !!obj_loadini(o, *bin); // @todo: loadbin + if( array_count(*found) > 1 ) { + FREE(*bin); + array_pop(*found); + } + return rc; + } + return 0; +} + +static +void test_obj_serialization(void *o1, void *o2) { + obj* b = (obj*)o1; + obj* c = (obj*)o2; + + char *json = obj_savejson(b); // puts(json); + test( json[0] ); + char *ini = obj_saveini(b); // puts(ini); + test( ini[0] ); + char *bin = obj_savebin(b); // puts(bin); + test( bin[0] ); + + obj_push(c); + + test( obj_copy(c,b) ); + test( obj_comp(b,c) == 0 ) || obj_hexdump(b) & obj_hexdump(c); + + test( obj_zero(c) ); + test( obj_comp(c,b) != 0 ) || obj_hexdump(c); + test( obj_loadbin(c, bin) ); + test( obj_comp(c,b) == 0 ) || obj_hexdump(c) & obj_hexdump(b); + + test( obj_zero(c) ); + test( obj_comp(c,b) != 0 ) || obj_hexdump(c); + test( obj_loadini(c, ini) ); + test( obj_comp(c,b) == 0 ) || obj_hexdump(c) & obj_hexdump(b); + + test( obj_zero(c) ); + test( obj_comp(c,b) != 0 ) || obj_hexdump(c); + test( obj_loadjson(c, json) ); + test( obj_comp(c,b) == 0 ) || obj_hexdump(c) & obj_hexdump(b); + + obj_pop(c); + obj_hexdump(c); +} + +// ---------------------------------------------------------------------------- +// components + +bool obj_addcomponent(entity *e, unsigned c, void *ptr) { + e->cflags |= (3ULL << c); + e->c[c & (OBJCOMPONENTS_MAX-1)] = ptr; + return 1; +} +bool obj_hascomponent(entity *e, unsigned c) { + return !!(e->cflags & (3ULL << c)); +} +void* obj_getcomponent(entity *e, unsigned c) { + return e->c[c & (OBJCOMPONENTS_MAX-1)]; +} +bool obj_delcomponent(entity *e, unsigned c) { + e->cflags &= ~(3ULL << c); + e->c[c & (OBJCOMPONENTS_MAX-1)] = NULL; + return 1; +} +bool obj_usecomponent(entity *e, unsigned c) { + e->cflags |= (1ULL << c); + return 1; +} +bool obj_offcomponent(entity *e, unsigned c) { + e->cflags &= ~(1ULL << c); + return 0; +} + +char *entity_save(entity *self) { + char *sav = obj_saveini(self); + return sav; +} + +static +void entity_register() { + do_once { + STRUCT(entity, uintptr_t, cflags); + obj_extend(entity, save); + } +} + +AUTORUN{ + entity_register(); +} + +static +void test_obj_ecs() { + entity_register(); // why is this required here? autorun init fiasco? + + entity *e = entity_new(entity); + puts(obj_save(e)); + + for( int i = 0; i < 32; ++i) test(0 == obj_hascomponent(e, i)); + for( int i = 0; i < 32; ++i) test(1 == obj_addcomponent(e, i, NULL)); + for( int i = 0; i < 32; ++i) test(1 == obj_hascomponent(e, i)); + for( int i = 0; i < 32; ++i) test(1 == obj_delcomponent(e, i)); + for( int i = 0; i < 32; ++i) test(0 == obj_hascomponent(e, i)); +} + +// ---------------------------------------------------------------------------- +// reflection + +void* obj_mutate(void *dst, const void *src) { + ((obj*)dst)->objheader = ((const obj *)src)->objheader; + +#if 0 + // mutate a class. ie, convert a given object class into a different one, + // while preserving the original metas, components and references as much as possible. + // @todo iterate per field + + dtor(dst); + + unsigned src_sz = obj_sizeof(src); + unsigned src_id = obj_id(src); + + void *dst_ptr = *((void**)dst - 1); + unsigned payload = (OBJPAYLOAD16(dst_ptr) & 255) | src_id << 8; + FREE( OBJUNBOX(dst_ptr) ); + *((void**)dst - 1) = OBJBOX( STRDUP( OBJUNBOX(*((void**)src - 1)) ), payload); + + void *base = (void*)((void**)dst - 1); + base = REALLOC(base, src_sz + sizeof(void*)); + *dst_ = (char*)base + sizeof(void*); + dst = (char*)base + sizeof(void*); + memcpy(dst, src, src_sz); + + ctor(dst); +#endif + return dst; +} + +void *obj_clone(const void *src) { + int sz = sizeof(obj) + obj_size(src) + sizeof(array(obj*)); + enum { N = 8 }; sz = ((sz + (N - 1)) & -N); // Round up to N-byte boundary + obj *ptr = obj_malloc( sz ); + obj_mutate(ptr, src); // ptr->objheader = ((const obj *)src)->objheader; + obj_loadini(ptr, obj_saveini(src)); + return ptr; +} + +void* obj_merge(void *dst, const void *src) { // @testme + char *bin = obj_savebin(src); + return obj_mergebin(dst, bin); +} + +void *obj_make(const char *str) { + const char *T; + const char *I = strchr(str, '['); // is_ini + const char *J = strchr(str, '{'); // is_json + if( !I && !J ) return 0; + else if( I && !J ) T = I; + else if( !I && J ) T = J; + else T = I < J ? I : J; + + char name[64] = {0}; + if( sscanf(T+1, T == I ? "%63[^]]" : "%63[^:=]", name) != 1 ) return 0; + + int has_components = 0; // @todo: support entities too + + unsigned Tid = intern(name); + reflect_init(); + reflect_t *found = map_find(reflects, Tid); + if(!found) return obj_new(obj); + + obj *ptr = CALLOC(1, found->sz + (has_components+1) * sizeof(array(obj*))); + void *ret = (T == I ? obj_mergeini : obj_mergejson)(ptr, str); + OBJTYPES[ found->objtype ] = found->name; + OBJ_CTOR_PTR(ptr,1,/*found->id,*/found->sz,found->objtype); + obj_setname(ptr, name); // found->id); + + return ptr; // returns partial construction as well. @todo: just return `ret` for a more strict built/failed policy +} #line 0 #line 1 "v4k_ai.c" -// AI framework -// - rlyeh, public domain. -// -// [src] original A-star code by @mmozeiko (PD) - https://gist.github.com/mmozeiko/68f0a8459ef2f98bcd879158011cc275 -// [src] original swarm/boids code by @Cultrarius (UNLICENSE) - https://github.com/Cultrarius/Swarmz - -// boids/swarm ----------------------------------------------------------------- - -vec3 rnd3() { // random uniform - float theta = randf() * C_PI * 2; - float r = sqrt(randf()); - float z = sqrt(1.0f - r * r) * (randf() > 0.5f ? -1.0f : 1.0f); - return vec3(r * cos(theta), r * sin(theta), z); -} -int less3(vec3 *lhs, vec3 *rhs) { - if(lhs->x != rhs->x) return lhs->x - rhs->x; - if(lhs->y != rhs->y) return lhs->y - rhs->y; - if(lhs->z != rhs->z) return lhs->z - rhs->z; // @testme: remove superfluous if check - return 0; -} -uint64_t hash3(vec3 *v) { - uint64_t h1 = hash_flt(v->x); - uint64_t h2 = hash_flt(v->y); - uint64_t h3 = hash_flt(v->z); - return (h1 * 31 + h2) * 31 + h3; -} -vec3 clamplen3(vec3 v, float length) { - return len3(v) <= length ? v : scale3(norm3(v), length); -} - -float transform_distance(float distance, SWARM_DISTANCE type) { - float quad; - /**/ if (type == SWARM_DISTANCE_LINEAR) return distance; - else if (type == SWARM_DISTANCE_QUADRATIC) return distance * distance; - else if (type == SWARM_DISTANCE_INVERSE_LINEAR) return distance == 0 ? 0 : 1 / distance; - else if (type == SWARM_DISTANCE_INVERSE_QUADRATIC) return (quad = distance * distance), (quad == 0 ? 0 : 1 / quad); - return distance; // throw exception instead? -} - -typedef struct nearby_boid_t { - boid_t *boid; - vec3 direction; - float distance; -} nearby_boid_t; - -static -vec3 get_voxel_for_boid(float perception_radius, const boid_t *b) { // quantize position - float r = absf(perception_radius); - return vec3( (int)(b->position.x / r), (int)(b->position.y / r), (int)(b->position.z / r) ); -} - -static -void check_voxel_for_boids(float perception_radius, float blindspot_angledeg_compare_value, array(boid_t*) voxel_cached, array(nearby_boid_t) *result, const vec3 voxelPos, const boid_t *b) { - for each_array_ptr(voxel_cached, boid_t*, test) { - vec3 p1 = b->position; - vec3 p2 = (*test)->position; - vec3 vec = sub3(p2, p1); - float distance = len3(vec); - - float compare_value = 0; - float l1 = len3(vec); - float l2 = len3(b->velocity); - if (l1 != 0 && l2 != 0) { - compare_value = dot3(neg3(b->velocity), vec) / (l1 * l2); - } - - if (b != (*test) && distance <= perception_radius && (blindspot_angledeg_compare_value > compare_value || len3(b->velocity) == 0)) { - nearby_boid_t nb; - nb.boid = (boid_t*)*test; - nb.distance = distance; - nb.direction = vec; - array_push(*result, nb); - } - } -} - -static -array(nearby_boid_t) get_nearby_boids(const swarm_t *self, const boid_t *b) { - array(nearby_boid_t) result = 0; - array_reserve(result, array_count(self->boids)); - - vec3 voxelPos = get_voxel_for_boid(self->perception_radius, b); - voxelPos.x -= 1; - voxelPos.y -= 1; - voxelPos.z -= 1; - for (int x = 0; x < 3; x++) { - for (int y = 0; y < 3; y++) { - for (int z = 0; z < 3; z++) { - array(boid_t*) *found = map_find(self->voxel_cache_, &voxelPos); - if( found ) check_voxel_for_boids(self->perception_radius, self->blindspot_angledeg_compare_value_, *found, &result, voxelPos, b); - voxelPos.z++; - } - voxelPos.z -= 3; - voxelPos.y++; - } - voxelPos.y -= 3; - voxelPos.x++; - } - return result; -} - -static -void update_boid(swarm_t *self, boid_t *b) { - vec3 separation_sum = {0}; - vec3 heading_sum = {0}; - vec3 position_sum = {0}; - vec3 po = b->position; - - array(nearby_boid_t) nearby = get_nearby_boids(self, b); // @leak - - for each_array_ptr(nearby, nearby_boid_t, closeboid_t) { - if (closeboid_t->distance == 0) { - separation_sum = add3(separation_sum, scale3(rnd3(), 1000)); //addscale3 - } - else { - float separation_factor = transform_distance(closeboid_t->distance, self->separation_type); - separation_sum = add3(separation_sum, scale3(neg3(closeboid_t->direction), separation_factor)); // addscale3 - } - heading_sum = add3(heading_sum, closeboid_t->boid->velocity); // inc3 - position_sum = add3(position_sum, closeboid_t->boid->position); // inc3 - } - - vec3 steering_target = b->position; - float target_distance = -1; - for( int i = 0, end = array_count(self->steering_targets); i < end; ++i ) { - vec3 *target = &self->steering_targets[i]; - - float distance = transform_distance(len3(sub3(*target,b->position)), self->steering_target_type); - if (target_distance < 0 || distance < target_distance) { - steering_target = *target; - target_distance = distance; - } - } - - int nearby_size = array_count(nearby); - - // Separation: steer to avoid crowding local flockmates - vec3 separation = nearby_size > 0 ? scale3(separation_sum, 1.f / nearby_size) : separation_sum; - - // Alignment: steer towards the average heading of local flockmates - vec3 alignment = nearby_size > 0 ? scale3(heading_sum, 1.f / nearby_size) : heading_sum; - - // Cohesion: steer to move toward the average position of local flockmates - vec3 avgposition = nearby_size > 0 ? scale3(position_sum, 1.f / nearby_size) : b->position; - vec3 cohesion = sub3(avgposition, b->position); - - // Steering: steer towards the nearest target location (like a moth to the light) - vec3 steering = scale3(norm3(sub3(steering_target, b->position)), target_distance); - - // calculate boid acceleration - vec3 acceleration; - acceleration = scale3(separation, self->separation_weight); - acceleration = add3(acceleration, scale3(alignment, self->alignment_weight)); - acceleration = add3(acceleration, scale3(cohesion, self->cohesion_weight)); - acceleration = add3(acceleration, scale3(steering, self->steering_weight)); - b->acceleration = clamplen3(acceleration, self->max_acceleration); -} - -swarm_t swarm() { - swarm_t self = {0}; - - self.boids = NULL; - - self.perception_radius = 3; // 30 - - self.separation_weight = 0.1; // 1 - self.separation_type = SWARM_DISTANCE_INVERSE_QUADRATIC; - - self.alignment_weight = 0.1; // 1 - self.cohesion_weight = 0.1; // 1 - - self.steering_weight = 0.1; // 0.1 - // array_push(self.steering_targets, vec3(0,0,0)); - self.steering_target_type = SWARM_DISTANCE_LINEAR; - - self.blindspot_angledeg = 2; // 20 - self.max_acceleration = 1; // 10; - self.max_velocity = 2; // 20; - - self.blindspot_angledeg_compare_value_ = 0; // = cos(M_PI * 2 * blindspot_angledeg / 360) - map_init(self.voxel_cache_, less3, hash3); - return self; -} - -void swarm_update_acceleration_only(swarm_t *self) { - self->perception_radius += !self->perception_radius; // 0->1 - - // build voxel cache - map_clear(self->voxel_cache_); - for( int i = 0, end = array_count(self->boids); i < end; ++i ) { - boid_t *b = &(self->boids)[i]; - - vec3 *key = MALLOC(sizeof(vec3)); - *key = get_voxel_for_boid(self->perception_radius, b); - array(boid_t*) *found = map_find_or_add_allocated_key( self->voxel_cache_, key, 0 ); - array_push(*found, b); - } - - // update all boids - for( int i = 0, end = array_count(self->boids); i < end; ++i ) { - boid_t *b = &(self->boids)[i]; - update_boid(self, b); - } -} - -void swarm_update_acceleration_and_velocity_only(swarm_t *self, float delta) { - self->blindspot_angledeg_compare_value_ = cosf(C_PI * 2 * self->blindspot_angledeg / 360.0f); - swarm_update_acceleration_only(self); - - for( int i = 0, end = array_count(self->boids); i < end; ++i ) { - boid_t *b = &(self->boids)[i]; - b->velocity = clamplen3(add3(b->velocity, scale3(b->acceleration, delta)), self->max_velocity); - } -} - -void swarm_update(swarm_t *self, float delta) { - swarm_update_acceleration_and_velocity_only(self, delta); - - for( int i = 0, end = array_count(self->boids); i < end; ++i ) { - boid_t *b = &(self->boids)[i]; - b->prev_position = b->position; - b->position = add3(b->position, scale3(b->velocity, delta)); - } -} - -int ui_swarm(swarm_t *self) { - const char *distances[] = { - "Linear", - "Inverse Linear", - "Quadratic", - "Inverse Quadratic" - }; - - int rc = 0; - rc |= ui_float( "Perception Radius", &self->perception_radius); - ui_separator(); - - rc |= ui_float( "Separation Weight", &self->separation_weight); - rc |= ui_radio( "Separation Type", distances, countof(distances), (int*)&self->separation_type); - ui_separator(); - - rc |= ui_float( "Alignment Weight", &self->alignment_weight); - rc |= ui_float( "Cohesion Weight", &self->cohesion_weight); - ui_separator(); - - rc |= ui_float( "Steering Weight", &self->steering_weight); - //array(vec3) steering_targets; - rc |= ui_radio( "Steering Target Type", distances, countof(distances), (int*)&self->steering_target_type); - ui_separator(); - - rc |= ui_float( "Blindspot Angle", &self->blindspot_angledeg); - rc |= ui_float( "Max Acceleration", &self->max_acceleration); - rc |= ui_float( "Max Velocity", &self->max_velocity); - - return rc; -} - -// pathfinding ----------------------------------------------------------------- - -int pathfind_astar(int width, int height, const unsigned* map, vec2i src, vec2i dst, vec2i* path, size_t maxpath) { -#define ALLOW_DIAGONAL_MOVEMENT 1 - -#if ALLOW_DIAGONAL_MOVEMENT - #define ASTAR_DIR_COUNT 8 -#else - #define ASTAR_DIR_COUNT 4 -#endif - - static const vec2i dir[ASTAR_DIR_COUNT] = - { - { 1, 0 }, - { 0, 1 }, - { -1, 0 }, - { 0, -1 }, -#if ALLOW_DIAGONAL_MOVEMENT - { 1, 1 }, - { 1, -1 }, - { -1, 1 }, - { -1, -1 }, -#endif - }; - - #define ASTAR_POS_TYPE vec2i - #define ASTAR_POS_START src - #define ASTAR_POS_FINISH dst - #define ASTAR_POS_INDEX(p) ((p).y * width + (p).x) - #define ASTAR_MAX_INDEX (width * height) - #define ASTAR_INDEX_POS(p, i) \ - do { \ - (p).x = (i) % width; \ - (p).y = (i) / width; \ - } while (0) - #define ASTAR_POS_EQUAL(a, b) ((a).x == (b).x && (a).y == (b).y) - #define ASTAR_MAP_IS_FREE(p) ((p).y >= 0 && (p).y < height && (p).x >= 0 && (p).x < width && (char)map[(p).y * width + (p).x] == 0) - #define ASTAR_NEXT_POS(p, i) \ - do { \ - (p).x += dir[i].x; \ - (p).y += dir[i].y; \ - } while (0) - #define ASTAR_PREV_POS(p, i) \ - do { \ - (p).x -= dir[i].x; \ - (p).y -= dir[i].y; \ - } while (0) - #define ASTAR_GET_COST(a, b) (abs((a).x - (b).x) + abs((a).y - (b).y)) - -#if ALLOW_DIAGONAL_MOVEMENT - #define ASTAR_EXTRA_COST(i) (i < 4 ? 5 : 7) // 7/5 is approx sqrt(2) - #define ASTAR_COST_MUL 5 -#endif - - size_t path_count = 0; - #define ASTAR_PATH(p) if (path_count < maxpath) path[path_count++] = p - - // tempwork memory, not thread-safe. - #define ASTAR_TEMP_SIZE (ASTAR_MAX_INDEX * (sizeof(unsigned)*2) + sizeof(unsigned)*4) // (16<<20) - #define ASTAR_TEMP temp - static array(char) ASTAR_TEMP; do_once array_resize(ASTAR_TEMP, ASTAR_TEMP_SIZE); - - // #if 1 "astar.h" - { - // generic A* pathfinding - - // - // INTERFACE - // - - // mandatory macros - - #ifndef ASTAR_POS_TYPE - #error ASTAR_POS_TYPE should specify position type - #endif - - #ifndef ASTAR_POS_START - #error ASTAR_POS_START should specify start position - #endif - - #ifndef ASTAR_POS_FINISH - #error ASTAR_POS_FINISH should specify finish position - #endif - - #ifndef ASTAR_POS_INDEX - #error ASTAR_POS_INDEX(p) should specify macro to map position to index - #endif - - #ifndef ASTAR_MAX_INDEX - #error ASTAR_MAX_INDEX should specify max count of indices the position can map to - #endif - - #ifndef ASTAR_INDEX_POS - #error ASTAR_INDEX_POS(i) should specify macro to map index to position - #endif - - #ifndef ASTAR_POS_EQUAL - #error ASTAR_POS_EQUAL(a, b) should specify macro to compare if two positions are the same - #endif - - #ifndef ASTAR_MAP_IS_FREE - #error ASTAR_MAP_IS_FREE(p) should specify macro to check if map at position p is free - #endif - - #ifndef ASTAR_NEXT_POS - #error ASTAR_NEXT_POS(p, i) should specify macro to get next position in specific direction - #endif - - #ifndef ASTAR_PREV_POS - #error ASTAR_PREV_POS(p, i) should specify macro to get previous position from specific direction - #endif - - #ifndef ASTAR_DIR_COUNT - #error ASTAR_DIR_COUNT should specify possible direction count - #endif - - #ifndef ASTAR_GET_COST - #error ASTAR_GET_COST(a, b) should specify macro to get get cost between two positions - #endif - - #ifndef ASTAR_PATH - #error ASTAR_PATH(p) should specify macro that will be invoked on each position for path (in reverse order), including start/finish positions - #endif - - #if !defined(ASTAR_TEMP) || !defined(ASTAR_TEMP_SIZE) - #error ASTAR_TEMP and ASTAR_TEMP_SIZE should specify variable & size for temporary memory (should be at least ASTAR_MAX_INDEX * 4 + extra) - #endif - - // optional macros - - // adds extra cost for specific direction (useful for increasing cost for diagonal movements) - #ifndef ASTAR_EXTRA_COST - #define ASTAR_EXTRA_COST(i) 1 - #endif - - // multiplier for adding cost values (current_cost + mul * new_cost) - useful when using extra cost for diagonal movements - #ifndef ASTAR_COST_MUL - #define ASTAR_COST_MUL 1 - #endif - - // - // IMPLEMENTATION - // - - #if ASTAR_DIR_COUNT <= 4 - #define ASTAR_DIR_BITS 2 - #elif ASTAR_DIR_COUNT <= 8 - #define ASTAR_DIR_BITS 3 - #elif ASTAR_DIR_COUNT <= 16 - #define ASTAR_DIR_BITS 4 - #elif ASTAR_DIR_COUNT <= 32 - #define ASTAR_DIR_BITS 5 - #elif ASTAR_DIR_COUNT <= 64 - #define ASTAR_DIR_BITS 6 - #else - #error Too many elements for ASTAR_DIR_COUNT, 64 is max - #endif - - #define ASTAR_COST_BITS (32 - 1 - ASTAR_DIR_BITS) - - #define ASTAR_HEAP_SWAP(a, b) \ - do { \ - heapnode t = heap[a]; \ - heap[a] = heap[b]; \ - heap[b] = t; \ - } while (0) \ - - #define ASTAR_HEAP_PUSH(idx, c) \ - do { \ - heap[heap_count].index = idx; \ - heap[heap_count].cost = c; \ - int i = heap_count++; \ - int p = (i - 1) / 2; \ - while (i != 0 && heap[p].cost > heap[i].cost) \ - { \ - ASTAR_HEAP_SWAP(i, p); \ - i = p; \ - p = (i - 1) / 2; \ - } \ - } while (0) - - #define ASTAR_HEAP_POP() \ - do { \ - heap[0] = heap[--heap_count]; \ - int i = 0; \ - for (;;) \ - { \ - int l = 2 * i + 1; \ - int r = 2 * i + 2; \ - int s = i; \ - if (l < heap_count && heap[l].cost < heap[i].cost) s = l; \ - if (r < heap_count && heap[r].cost < heap[s].cost) s = r; \ - if (s == i) break; \ - ASTAR_HEAP_SWAP(i, s); \ - i = s; \ - } \ - } while (0) - - typedef union { - struct { - unsigned int cost : ASTAR_COST_BITS; - unsigned int dir : ASTAR_DIR_BITS; - unsigned int visited : 1; - }; - unsigned int all; - } node; - - typedef struct { - unsigned int index; - unsigned int cost; - } heapnode; - - if (ASTAR_TEMP_SIZE >= sizeof(node) * ASTAR_MAX_INDEX + sizeof(heapnode)) - { - node* nodes = (node*)ASTAR_TEMP; - for (unsigned int i = 0; i < ASTAR_MAX_INDEX; i++) - { - nodes[i].all = 0; - } - - heapnode* heap = (heapnode*)((char*)ASTAR_TEMP + sizeof(node) * ASTAR_MAX_INDEX); - unsigned int heap_max = (ASTAR_TEMP_SIZE - sizeof(node) * ASTAR_MAX_INDEX) / sizeof(heapnode); - int heap_count = 0; - - ASTAR_POS_TYPE p = ASTAR_POS_START; - unsigned int nindex = ASTAR_POS_INDEX(p); - node* n = nodes + nindex; - n->cost = 0; - n->visited = 1; - ASTAR_HEAP_PUSH(nindex, ASTAR_GET_COST(p, ASTAR_POS_FINISH)); - - int found = 0; - while (heap_count != 0) - { - nindex = heap[0].index; - n = nodes + nindex; - ASTAR_HEAP_POP(); - - ASTAR_INDEX_POS(p, nindex); - if (ASTAR_POS_EQUAL(p, ASTAR_POS_FINISH)) - { - found = 1; - break; - } - n->visited = 1; - - for (unsigned int i = 0; i < ASTAR_DIR_COUNT; i++) - { - ASTAR_POS_TYPE next = p; - ASTAR_NEXT_POS(next, i); - if (ASTAR_MAP_IS_FREE(next)) - { - unsigned int nnext_index = ASTAR_POS_INDEX(next); - node* nnext = nodes + nnext_index; - unsigned int cost = n->cost + ASTAR_EXTRA_COST(i); - if (nnext->visited == 0 || cost < nnext->cost) - { - nnext->cost = cost; - nnext->dir = i; - nnext->visited = 1; - if (heap_count == heap_max) - { - // out of memory - goto bail; - } - unsigned int new_cost = cost + ASTAR_COST_MUL * ASTAR_GET_COST(next, ASTAR_POS_FINISH); - ASTAR_HEAP_PUSH(nnext_index, new_cost); - } - } - } - } - bail: - - if (found) - { - ASTAR_PATH(p); - while (!ASTAR_POS_EQUAL(p, ASTAR_POS_START)) - { - ASTAR_PREV_POS(p, n->dir); - n = nodes + ASTAR_POS_INDEX(p); - ASTAR_PATH(p); - } - } - } - else - { - // not enough temp memory - } - - #undef ASTAR_POS_TYPE - #undef ASTAR_POS_START - #undef ASTAR_POS_FINISH - #undef ASTAR_POS_INDEX - #undef ASTAR_MAX_INDEX - #undef ASTAR_INDEX_POS - #undef ASTAR_POS_EQUAL - #undef ASTAR_MAP_IS_FREE - #undef ASTAR_NEXT_POS - #undef ASTAR_PREV_POS - #undef ASTAR_DIR_COUNT - #undef ASTAR_GET_COST - #undef ASTAR_EXTRA_COST - #undef ASTAR_COST_MUL - #undef ASTAR_PATH - #undef ASTAR_TEMP - #undef ASTAR_TEMP_SIZE - #undef ASTAR_COST_BITS - #undef ASTAR_DIR_BITS - #undef ASTAR_HEAP_SWAP - #undef ASTAR_HEAP_PUSH - #undef ASTAR_HEAP_POP - } - // #endif "astar.h" - - return path_count; -} - -// Behavior trees: decision planning and decision making. -// Supersedes finite state-machines (FSM) and hierarchical finite state-machines (HFSM). -// - rlyeh, public domain. -// -// [ref] https://outforafight.wordpress.com/2014/07/15/behaviour-behavior-trees-for-ai-dudes-part-1/ -// [ref] https://www.gameaipro.com/GameAIPro/GameAIPro_Chapter06_The_Behavior_Tree_Starter_Kit.pdf -// [ref] https://gitlab.com/NotYetGames/DlgSystem/-/wikis/Dialogue-Manual -// [ref] https://towardsdatascience.com/designing-ai-agents-behaviors-with-behavior-trees-b28aa1c3cf8a -// [ref] https://docs.nvidia.com/isaac/packages/behavior_tree/doc/behavior_trees.html -// [ref] https://docs.unrealengine.com/4.26/en-US/InteractiveExperiences/ArtificialIntelligence/BehaviorTrees/ -// [ref] gdc ChampandardDaweHernandezCerpa_BehaviorTrees.pdf @todo debugging -// [ref] https://docs.cocos.com/cocos2d-x/manual/en/actions/ - -// The nodes in a behavior tree can be broadly categorized into three main types: control nodes, task nodes, and decorator nodes. Here is a brief description of each category: - -// Control Nodes: Control nodes are used to control the flow of the behavior tree. They determine the order in which child nodes are executed and how the results of those nodes are combined. They are usually parent nodes. -// Action Nodes: Action nodes are used to perform specific actions or tasks within the behavior tree. They can include actions such as moving, attacking, or interacting with objects in the game world. They are usually leaf nodes. -// Decorator Nodes: Decorator nodes are used to modify the behavior of child nodes in some way. They can be used to repeat child nodes, invert the result of a child node, or add a cooldown period between executions. They are usually located between control and action nodes. - -// --- VARIABLES - -// Key Prefixes: -// {visiblity:(l)ocal,s(q)uad,(r)ace,(f)action,(g)lobal} -// [persistence:(t)emp,(u)serdata,(s)avegame,(c)loud] + '_' + name. -// [persistence:(tmp),(usr)data,(sav)egame,(net)cloud] + '_' + name. - -// Ie, l_health = 123.4, gsav_player = "john" - -// --- ACTION NODES - -// [ ] * Actions/Behaviors have a common structure: -// [ ] - Entry point (function name) for a C call or Lua script. -// [ ] * Status: -// [ ] - Uninitialized (never run) -// [ ] - Running (in progress) -// [ ] - Suspended (on hold till resumed) -// [ ] - Success (finished and succeeded) -// [ ] - Failure (finished and failed) -// [ ] * Optional callbacks: -// [ ] - on_enter -// [ ] - on_leave -// [ ] - on_success -// [ ] - on_failure -// [ ] - on_suspend -// [ ] - on_resume - -// [x] Action Node: This node performs a single action, such as moving to a specific location or attacking a target. -// [ ] Blackboard Node: Node that reads and writes data to a shared memory space known as a blackboard. The blackboard can be used to store information that is relevant to multiple nodes in the behavior tree. -// [ ] SetKey(keyVar,object) -// [ ] HasKey(keyVar) -// [ ] CompareKeys(keyVar1, operator < <= > >= == !=, keyVar2) -// [ ] SetTags(names=blank,cooldownTime=inf,bIsCooldownAdditive=false) -// [ ] HasTags(names=blank,bAllRequired=true) -// [ ] PushToStack(keyVar,itemObj): creates a new stack if one doesnt exist, and stores it in the passed variable name, and then pushes item object onto it. -// [ ] PopFromStack(keyVar,itemVar): pop pops an item off the stack, and stores it in the itemVar variable, failing if the stack is already empty. -// [ ] IsEmptyStack(keyVar): checks if the stack passed is empty and returns success if it is, and failure if its not. -// [ ] Communication Node: This is a type of action node that allows an AI agent to communicate with other agents or entities in the game world. The node takes an input specifying the message to be communicated and the recipient(s) of the message (wildmask,l/p/f/g prefixes). The node then sends the message to the designated recipient(s) and returns success when the communication is completed. This node can be useful for implementing behaviors that require the AI agent to coordinate with other agents or to convey information to the player. It could use a radius argument to specify the maximum allowed distance for the recipients. -// [ ] Condition Node: A leaf node that checks a specific condition, such as the distance to an object, the presence of an enemy, or the status of a health bar. -// [ ] Distance Condition Node: This is a type of condition node that evaluates whether an AI agent is within a specified distance of a target object or location. The node takes two inputs: the current position of the AI agent and the position of the target object or location. If the distance between the two is within a specified range, the node returns success. If the distance is outside of the specified range, the node returns failure. This node can be useful for implementing behaviors that require the AI agent to maintain a certain distance from a target, such as following or avoiding an object. Could use a flag to disambiguate between linear distance and path distance. -// [ ] Query Node: This node checks a condition and returns success or failure based on the result. For example, a query node could check whether an enemy is within range or whether a door is locked. -// [ ] Query Node: A type of decorator node that retrieves information from a database or external system, such as a web service or file system. The Query node can be used to retrieve data that is not available within the game engine, such as weather or traffic conditions. -// [ ] A condition is made of: -// [ ] - Optional [!] negate -// [ ] - Mandatory Value1(Int/Flt/Bool/VarName/FuncName) -// [ ] - Optional operator [< <= > >= == !=] and Value2(Int/Flt/Bool/VarName/FuncName) -// [ ] AllConditions(...) : SUCCESS if ( empty array || all conditions met) -// [ ] AnyConditions(...) : SUCCESS if (!empty array && one conditions met) - -// --- DECORATOR NODES - -// [ ] Cooldown Node: Decorator node that adds a cooldown period between the execution of a child node, preventing it from being executed again until the cooldown period has elapsed. -// [x] Counter Node: Decorator node that limits the number of times that a child node can execute. For example, if the child node has executed a certain number of times, the Counter node will return a failure. -// [x] Once Node: Decorator node that triggers a specified action when a condition is met for the first time. This can be useful for triggering a one-time event, such as when an AI agent discovers a hidden item or reaches a new area of the game world. -// [x] Inverter Node: Decorator node that inverts the result of a child node, returning success if the child node fails and failure if the child node succeeds. This can be useful for negating the outcome of a particular behavior, such as avoiding a certain area of the game world. -// [x] Repeater Node: Decorator node that repeats the execution of a child node a specified number of times or indefinitely. -// [x] Repeat(times=inf): Runs child node given times. These are often used at the very base of the tree, to make the tree to run continuously. -// [ ] RepeatIf(strong/weak condition): Runs child node as long as the conditions are met. -// [ ] RepeatIfOk(times=inf): Runs child node if it succeedes, max given times. -// [ ] RepeatIfFail(times=inf): Runs child node if it fails, max given times. -// [ ] Branch Node: 2 children [0] for true, [1] for false -// [ ] Resource Node: Decorator node that manages a shared resource, such as a limited supply of ammunition or a limited amount of processing power. The Resource node The node can be used to decide when to use or conserve the resource. For example, if the AI agent is low on ammunition, the node may decide to switch to a melee weapon or to retreat to a safer location. This node can be useful for implementing behaviors that require the AI agent to make strategic decisions about resource use. -// [x] Result Node: Decorator node that tracks the result of a child action node and returns either success or failure depending on the outcome. This can be useful for determining whether an action was successful or not, and then adjusting the AI agent's behavior accordingly. -// [x] Succeeder Node: Decorator node that always returns success, regardless of the result of its child node. This can be useful for ensuring that certain behaviors are always executed, regardless of the overall success or failure of the behavior tree. -// [x] Success(): FAILURE becomes SUCCESS (TRUE). -// [x] Failure(): SUCCESS becomes FAILURE (FALSE). -// [ ] Throttle Node: Decorator node that limits the rate at which a child node can execute. For example, a Throttle node might ensure that an AI agent can only fire its weapon, or using a special ability, only a certain number of times per second. -// [x] Delay Node: Decorator node that adds a delay to the execution of a child node. The delay might be configured to sleep before the execution, after the execution, or both. -// [x] Defer Delay(duration_ss=1): Runs the child node, then sleeps for given seconds. -// [ ] Ease(time,name): Clamps child time to [0,1] range, and applies easing function on it. -// [ ] Dilate(Mul=1,Add=0): Dilates child time - -// --- CONTROL NODES - -// [x] Root Node: The topmost node in a behavior tree that represents the start of the decision-making process. Returns success if any of its child nodes suceedes. -// [x] Root-Failure Node: Control node that only returns failure if all of its child nodes fail. This can be useful for ensuring that a behavior tree is not prematurely terminated if one or more child nodes fail. - -// [ ] Event(name): When name event is raised, it suspends current tree and calls child. "Incoming projectile" -> Evade. Stimulus types: may be disabled by event, or autodisabled. -// [ ] Raise(name): Triggers event name. - -// [ ] Checkpoint Node: Control node that saves a state in memory and then continues the tree execution from that point the next time the tree is executed. It can be useful in situations where the behavior tree needs to be interrupted and resumed later. -// [ ] Decision Making Node: Control node that implements a decision-making process for the AI agent. The node takes input specifying the available options for the AI agent and the criteria for evaluating each option. The node then evaluates each option based on the specified criteria and selects the best option. This node can be useful for implementing behaviors that require the AI agent to make strategic decisions, such as choosing a target or selecting a path through the game world. -// [ ] Could be extended with GOAP if dynamically inserting the scores on each update then calling a Probability Selector Node (0.2,0.3,0.5) -// [ ] https://cdn.cloudflare.steamstatic.com/apps/valve/2012/GDC2012_Ruskin_Elan_DynamicDialog.pdf -// [ ] Evaluate Node / Recheck(): -// [ ] Actively rechecks all existing sub-conditions on a regular basis after having made decisions about them. -// [ ] Use this feature to dynamically check for risks or opportunities in selected parts of the tree. -// [ ] For example, interrupting a patrol with a search behavior if a disturbance is reported. -// [ ] Interrupt Node: Control node that interrupts the execution of a lower-priority node when a higher-priority node needs to be executed. It can be useful for handling urgent tasks or emergency situations. -// [ ] Monitor Node: Control node that continuously monitors a condition and triggers a specified action when the condition is met. For example, a Monitor node might monitor the distance between an AI agent and a target and trigger a "retreat" behavior when the distance falls below a certain threshold. -// [ ] Observer Node: Control node that monitors the state of the game world and triggers a specified action when certain conditions are met. For example, an Observer node might trigger a "hide" behavior when an enemy is spotted. -// [ ] Parallel Node: Control node that executes multiple child nodes simultaneously. The Parallel node continues to execute even if some of its child nodes fail. -// [ ] Parallel All Node(required_successes=100%): Control node that executes multiple child nodes simultaneously. Returns false when first child fails, and aborts any other running tasks. Returns true if all its children succeed. -// [ ] Parallel One Node(required_successes=1): Control node that executes multiple child nodes simultaneously. Returns true when first child suceedes, and aborts any other running tasks. Returns false if all its children fail. -// [ ] Subsumption Node: Control node that allows multiple behaviors to be executed simultaneously, with higher-priority behaviors taking precedence over lower-priority ones. This can be useful for implementing complex, multi-level behaviors in autonomous systems. -// [ ] Semaphore Node: Control node that blocks the execution of its child nodes until a certain condition is met. For example, a Semaphore node might block the execution of a behavior until a certain object is in range or a certain event occurs. -// [ ] Semaphore Wait Node: Control node that blocks the execution of its child nodes until a resource becomes available. This can be useful for controlling access to shared resources such as a pathfinding system or a communication channel. -// [ ] WaitTags(tags=blank,timeout_ss=inf): Stops execution of child node until the cooldown tag(s) do expire. May return earlier if timed out. -// [ ] WaitEvent(name=blank,timeout_ss=inf): Stops execution of child node until event is raised. May return earlier if timed out. -// [x] Sequence Node(reversed,iterator(From,To)): Control node that executes a series of child nodes in order. If any of the child nodes fail, the Sequence node stops executing and returns a failure. -// [ ] Dynamic Sequence Node: Control node that dynamically changes the order in which its child nodes are executed based on certain conditions. For example, a Dynamic Sequence node might give higher priority to a child node that has recently failed or that is more likely to succeed. -// [ ] Reverse(): iterates children in reversed order (Iterator:(-1,0) equivalent) -// [ ] Iterator(from,to): allows negative indexing. increments if (abs from < abs to), decrements otherwise -// [x] Selector Node: Control node that selects a child node to execute based on a predefined priority or set of conditions. The Selector node stops executing child nodes as soon as one of them succeeds. -// [ ] Priority Selector Node: Control node that executes its child nodes in order of priority. If the first child node fails, it moves on to the next child node in the list until a successful node is found. This can be useful for implementing behaviors that require a specific order of execution, such as a patrol route or a search pattern. -// [ ] Probability Selector Node: Control node that selects a child node to execute based on a probability distribution. For example, if there are three child nodes with probabilities of 0.2, 0.3, and 0.5, the Probability Selector node will execute the third child node 50% of the time. -// [ ] Dynamic Selector Node: Control node that dynamically changes the order in which its child nodes are executed based on certain conditions. For example, a Dynamic Selector node might give higher priority to a child node that has recently succeeded or that is more likely to succeed. -// [ ] Dynamic Selector Node: Control node that dynamically changes the order in which child nodes are executed based on certain conditions. For example, it may prioritize certain nodes when health is low, and other nodes when resources are scarce. -// [ ] Dynamic Priority Node: Control node that dynamically changes the priority of its child nodes based on certain conditions. For example, if a child node is more likely to result in success, the Dynamic Priority node will give it a higher priority. -// [ ] Weighted / Cover Selection Node: This is a type of selector node that evaluates the available cover options in the game world and selects the best cover position for the AI agent. The node takes input specifying the current position of the AI agent and the location of potential cover positions. The node then evaluates the cover positions based on criteria such as distance to enemy positions, line of sight, and available cover points, and selects the best option. This node can be useful for implementing behaviors that require the AI agent to take cover and avoid enemy fire. -// [ ] Random Selector Node: Control node that selects a child node to execute at random. This can be useful for introducing variety and unpredictability into the behavior of an AI agent. -// [ ] Random Weight / Stochastic Node(0.2,0.3,0.5): Control node that introduces randomness into the decision-making process of an AI agent. For example, a Stochastic node might randomly select a child node to execute, with the probability of each child node being proportional to its likelihood of success. -// [ ] Break(bool): breaks parent sequence or selector. may return SUCCESS or FAILURE. -// [ ] Hybrid Node: Control node that combines the functionality of multiple control nodes, such as a sequence node and a selector node. It can be useful for creating complex behavior patterns that require multiple control structures. The Hybrid Node has two modes of operation: strict mode and flexible mode. In strict mode, the child nodes are executed in a fixed order, similar to a Sequence Node. If any child node fails, the entire Hybrid Node fails. In flexible mode, the child nodes can be executed in any order, similar to a Selector Node. If any child node succeeds, the entire Hybrid Node succeeds. The Hybrid Node is often used when you need to create complex behavior patterns that require multiple control structures. For example, you might use a Hybrid Node to implement a search behavior where the AI agent first moves in a fixed direction for a certain distance (strict mode), but then switches to a more exploratory mode where it randomly explores nearby areas (flexible mode). -// [ ] Subtree Node: Control node that calls another behavior tree as a subroutine. This is useful for breaking down complex behaviors into smaller, more manageable parts. -// [ ] Call(name): Calls to the child node with the matching name within behavior tree. Returns FAILURE if name is invalid or if invoked behavior returns FAILURE. -// [ ] Return(boolean): Exits current Call. -// [ ] AttachTree(Name,bDetachAfterUse=true): Attaches subtree to main tree. When a NPC founds the actor, it attaches the behavior to the tree. Ie, Level specific content: Patrols, Initial setups, Story driven events, etc. Ie, DLCs: Behaviors are added to actors in the DLC level (enticers). -// [ ] DetachTree(Name) -// [ ] Switch Node: Control node that evaluates a condition and then selects one of several possible child nodes to execute based on the result of the condition. -// [ ] Switch(name): Jumps to the child node with the matching name within behavior tree. If name is invalid will defer to Fallback child node. -// [ ] Timeout Node: Control node that aborts the execution of its child node after a certain amount of time has elapsed. This can be useful for preventing an AI agent from getting stuck in a loop or waiting indefinitely for a particular event to occur. -// [ ] TimeLimit(timeout_ss=inf): Give the child any amount of time to finish before it gets canceled. The timer is reset every time the node gains focus. -// [ ] Timer Node: Control node which invokes its child node every XX seconds. The timer can repeat the action any given number of times, or indefinitely. - -// ## Proposal ----------------------------------------------------------------------------- - -// BehaviorTrees as case-insensitive INI files. Then, -// - INI -> C INTERPRETER, OR -// - INI -> LUA TRANSPILER -> LUA BYTECODE -> LUA VM. - -// ```ini -// [bt] -// recheck -// sequence ;; Approach the player if seen! -// conditions=IsPlayerVisible, -// action=MoveTowardsPlayer -// sequence ;; Attack the player if seen! -// conditions=IsPlayerInRange, -// repeat=3 -// action=FireAtPlayer -// sequence ;; Search near last known position -// conditions=HaveWeGotASuspectedLocation, -// action=MoveToPlayersLastKnownPosition -// action=LookAround -// sequence ;; Randomly scanning nearby -// action=MoveToRandomPosition -// action=LookAround -// event=IncomingProjectile -// action=Evade -// ``` - -map(char*, bt_func) binds; - -void bt_addfun(const char *name, int(*func)()){ - do_once map_init_str(binds); - map_find_or_add_allocated_key(binds, STRDUP(name), func); -} -bt_func bt_findfun(const char *name) { - bt_func *found = map_find(binds, (char*)name); - return found ? *found : 0; -} -char * bt_funcname(bt_func fn) { - for each_map(binds,char*,k,bt_func,f) { - if( f == fn ) return k; - } - return 0; -} - -bt_t bt(const char *ini_file, unsigned flags) { - bt_t z = {0}, root = z; - array(char*) m = strsplit(vfs_read(ini_file), "\r\n"); - - bt_t *self = &root; - self->type = cc4(r,o,o,t); - //self->parent = self; - - for( int i = 0; i < array_count(m); ++i ) { - // parse ini - int level = strspn(m[i], " \t"); - char *k = m[i] + level; - if( k[0] == '[' ) { - if( strcmp(k+1, "bt]") ) return z; // we only support [bt] - continue; - } - int sep = strcspn(k, " =:"); - char *v = k + sep; if(sep) *v++ = '\0'; else v = k + strlen(k); // v = (char*)""; - array(char*) args = *v ? strsplit(v, " ") : NULL; - - // insert node in tree - bt_t *out = self; - while( level-- ) { - out = array_back(out->children); - } - array_push(out->children, ((bt_t){0})); - //array_back(out->children)->parent = out; - out = array_back(out->children); - - // config node - out->type = *(uint64_t*)va("%-8s", k); - if( array_count(args) ) out->argf = atof(args[0]); - if( !strcmp(k, "run") ) out->action = bt_findfun(v); - } - - return root; -} - -int bt_run(bt_t *b) { - int rc = 0; - - /**/ if( b->type == cc3( r,u,n) ) { return b->action ? b->action() : 0; } - else if( b->type == cc3( n,o,t) ) { return !bt_run(b->children + 0); } - else if( b->type == cc5( s,l,e,e,p) ) { return sleep_ss(b->argf), bt_run(b->children + 0); } - else if( b->type == cc5( d,e,f,e,r) ) { rc = bt_run(b->children + 0); return sleep_ss(b->argf), rc; } - else if( b->type == cc4( l,o,o,p) ) { int rc; for(int i = 0; i < b->argf; ++i) rc = bt_run(b->children + 0); return rc; } - else if( b->type == cc4( o,n,c,e) ) { return b->argf ? 0 : (b->argf = 1), bt_run(b->children + 0); } - else if( b->type == cc5( c,o,u,n,t) ) { return b->argf <= 0 ? 0 : --b->argf, bt_run(b->children + 0); } - else if( b->type == cc4( p,a,s,s) ) { return bt_run(b->children + 0), 1; } - else if( b->type == cc4( f,a,i,l) ) { return bt_run(b->children + 0), 0; } - else if( b->type == cc6( r,e,s,u,l,t) ) { return bt_run(b->children + 0), !!b->argf; } - else if( b->type == cc3( a,l,l) ) { for( int i = 0; i < array_count(b->children); ++i ) if(!bt_run(b->children+i)) return 0; return 1; } - else if( b->type == cc3( a,n,y) ) { for( int i = 0; i < array_count(b->children); ++i ) if( bt_run(b->children+i)) return 1; return 0; } - else if( b->type == cc4( r,o,o,t) ) { for( int i = 0; i < array_count(b->children); ++i ) rc|=bt_run(b->children+i); return rc; } - else if( b->type == cc8(r,o,o,t,f,a,i,l) ) { rc = 1; for( int i = 0; i < array_count(b->children); ++i ) rc&=~bt_run(b->children+i); return rc; } - - return 0; -} - -int ui_bt(bt_t *b) { - if( b ) { - char *info = bt_funcname(b->action); - if(!info) info = va("%d", array_count(b->children)); - - if( ui_collapse(va("%s (%s)", cc8str(b->type), info), va("bt%p",b)) ) { - for( int i = 0; i < array_count(b->children); ++i) { - ui_bt(b->children + i); - } - ui_collapse_end(); - } - } - return 0; -} +// AI framework +// - rlyeh, public domain. +// +// [src] original A-star code by @mmozeiko (PD) - https://gist.github.com/mmozeiko/68f0a8459ef2f98bcd879158011cc275 +// [src] original swarm/boids code by @Cultrarius (UNLICENSE) - https://github.com/Cultrarius/Swarmz + +// boids/swarm ----------------------------------------------------------------- + +vec3 rnd3() { // random uniform + float theta = randf() * C_PI * 2; + float r = sqrt(randf()); + float z = sqrt(1.0f - r * r) * (randf() > 0.5f ? -1.0f : 1.0f); + return vec3(r * cos(theta), r * sin(theta), z); +} +int less3(vec3 *lhs, vec3 *rhs) { + if(lhs->x != rhs->x) return lhs->x - rhs->x; + if(lhs->y != rhs->y) return lhs->y - rhs->y; + if(lhs->z != rhs->z) return lhs->z - rhs->z; // @testme: remove superfluous if check + return 0; +} +uint64_t hash3(vec3 *v) { + uint64_t h1 = hash_flt(v->x); + uint64_t h2 = hash_flt(v->y); + uint64_t h3 = hash_flt(v->z); + return (h1 * 31 + h2) * 31 + h3; +} +vec3 clamplen3(vec3 v, float length) { + return len3(v) <= length ? v : scale3(norm3(v), length); +} + +float transform_distance(float distance, SWARM_DISTANCE type) { + float quad; + /**/ if (type == SWARM_DISTANCE_LINEAR) return distance; + else if (type == SWARM_DISTANCE_QUADRATIC) return distance * distance; + else if (type == SWARM_DISTANCE_INVERSE_LINEAR) return distance == 0 ? 0 : 1 / distance; + else if (type == SWARM_DISTANCE_INVERSE_QUADRATIC) return (quad = distance * distance), (quad == 0 ? 0 : 1 / quad); + return distance; // throw exception instead? +} + +typedef struct nearby_boid_t { + boid_t *boid; + vec3 direction; + float distance; +} nearby_boid_t; + +static +vec3 get_voxel_for_boid(float perception_radius, const boid_t *b) { // quantize position + float r = absf(perception_radius); + return vec3( (int)(b->position.x / r), (int)(b->position.y / r), (int)(b->position.z / r) ); +} + +static +void check_voxel_for_boids(float perception_radius, float blindspot_angledeg_compare_value, array(boid_t*) voxel_cached, array(nearby_boid_t) *result, const vec3 voxelPos, const boid_t *b) { + for each_array_ptr(voxel_cached, boid_t*, test) { + vec3 p1 = b->position; + vec3 p2 = (*test)->position; + vec3 vec = sub3(p2, p1); + float distance = len3(vec); + + float compare_value = 0; + float l1 = len3(vec); + float l2 = len3(b->velocity); + if (l1 != 0 && l2 != 0) { + compare_value = dot3(neg3(b->velocity), vec) / (l1 * l2); + } + + if (b != (*test) && distance <= perception_radius && (blindspot_angledeg_compare_value > compare_value || len3(b->velocity) == 0)) { + nearby_boid_t nb; + nb.boid = (boid_t*)*test; + nb.distance = distance; + nb.direction = vec; + array_push(*result, nb); + } + } +} + +static +array(nearby_boid_t) get_nearby_boids(const swarm_t *self, const boid_t *b) { + array(nearby_boid_t) result = 0; + array_reserve(result, array_count(self->boids)); + + vec3 voxelPos = get_voxel_for_boid(self->perception_radius, b); + voxelPos.x -= 1; + voxelPos.y -= 1; + voxelPos.z -= 1; + for (int x = 0; x < 3; x++) { + for (int y = 0; y < 3; y++) { + for (int z = 0; z < 3; z++) { + array(boid_t*) *found = map_find(self->voxel_cache_, &voxelPos); + if( found ) check_voxel_for_boids(self->perception_radius, self->blindspot_angledeg_compare_value_, *found, &result, voxelPos, b); + voxelPos.z++; + } + voxelPos.z -= 3; + voxelPos.y++; + } + voxelPos.y -= 3; + voxelPos.x++; + } + return result; +} + +static +void update_boid(swarm_t *self, boid_t *b) { + vec3 separation_sum = {0}; + vec3 heading_sum = {0}; + vec3 position_sum = {0}; + vec3 po = b->position; + + array(nearby_boid_t) nearby = get_nearby_boids(self, b); // @leak + + for each_array_ptr(nearby, nearby_boid_t, closeboid_t) { + if (closeboid_t->distance == 0) { + separation_sum = add3(separation_sum, scale3(rnd3(), 1000)); //addscale3 + } + else { + float separation_factor = transform_distance(closeboid_t->distance, self->separation_type); + separation_sum = add3(separation_sum, scale3(neg3(closeboid_t->direction), separation_factor)); // addscale3 + } + heading_sum = add3(heading_sum, closeboid_t->boid->velocity); // inc3 + position_sum = add3(position_sum, closeboid_t->boid->position); // inc3 + } + + vec3 steering_target = b->position; + float target_distance = -1; + for( int i = 0, end = array_count(self->steering_targets); i < end; ++i ) { + vec3 *target = &self->steering_targets[i]; + + float distance = transform_distance(len3(sub3(*target,b->position)), self->steering_target_type); + if (target_distance < 0 || distance < target_distance) { + steering_target = *target; + target_distance = distance; + } + } + + int nearby_size = array_count(nearby); + + // Separation: steer to avoid crowding local flockmates + vec3 separation = nearby_size > 0 ? scale3(separation_sum, 1.f / nearby_size) : separation_sum; + + // Alignment: steer towards the average heading of local flockmates + vec3 alignment = nearby_size > 0 ? scale3(heading_sum, 1.f / nearby_size) : heading_sum; + + // Cohesion: steer to move toward the average position of local flockmates + vec3 avgposition = nearby_size > 0 ? scale3(position_sum, 1.f / nearby_size) : b->position; + vec3 cohesion = sub3(avgposition, b->position); + + // Steering: steer towards the nearest target location (like a moth to the light) + vec3 steering = scale3(norm3(sub3(steering_target, b->position)), target_distance); + + // calculate boid acceleration + vec3 acceleration; + acceleration = scale3(separation, self->separation_weight); + acceleration = add3(acceleration, scale3(alignment, self->alignment_weight)); + acceleration = add3(acceleration, scale3(cohesion, self->cohesion_weight)); + acceleration = add3(acceleration, scale3(steering, self->steering_weight)); + b->acceleration = clamplen3(acceleration, self->max_acceleration); +} + +swarm_t swarm() { + swarm_t self = {0}; + + self.boids = NULL; + + self.perception_radius = 3; // 30 + + self.separation_weight = 0.1; // 1 + self.separation_type = SWARM_DISTANCE_INVERSE_QUADRATIC; + + self.alignment_weight = 0.1; // 1 + self.cohesion_weight = 0.1; // 1 + + self.steering_weight = 0.1; // 0.1 + // array_push(self.steering_targets, vec3(0,0,0)); + self.steering_target_type = SWARM_DISTANCE_LINEAR; + + self.blindspot_angledeg = 2; // 20 + self.max_acceleration = 1; // 10; + self.max_velocity = 2; // 20; + + self.blindspot_angledeg_compare_value_ = 0; // = cos(M_PI * 2 * blindspot_angledeg / 360) + map_init(self.voxel_cache_, less3, hash3); + return self; +} + +void swarm_update_acceleration_only(swarm_t *self) { + self->perception_radius += !self->perception_radius; // 0->1 + + // build voxel cache + map_clear(self->voxel_cache_); + for( int i = 0, end = array_count(self->boids); i < end; ++i ) { + boid_t *b = &(self->boids)[i]; + + vec3 *key = MALLOC(sizeof(vec3)); + *key = get_voxel_for_boid(self->perception_radius, b); + array(boid_t*) *found = map_find_or_add_allocated_key( self->voxel_cache_, key, 0 ); + array_push(*found, b); + } + + // update all boids + for( int i = 0, end = array_count(self->boids); i < end; ++i ) { + boid_t *b = &(self->boids)[i]; + update_boid(self, b); + } +} + +void swarm_update_acceleration_and_velocity_only(swarm_t *self, float delta) { + self->blindspot_angledeg_compare_value_ = cosf(C_PI * 2 * self->blindspot_angledeg / 360.0f); + swarm_update_acceleration_only(self); + + for( int i = 0, end = array_count(self->boids); i < end; ++i ) { + boid_t *b = &(self->boids)[i]; + b->velocity = clamplen3(add3(b->velocity, scale3(b->acceleration, delta)), self->max_velocity); + } +} + +void swarm_update(swarm_t *self, float delta) { + swarm_update_acceleration_and_velocity_only(self, delta); + + for( int i = 0, end = array_count(self->boids); i < end; ++i ) { + boid_t *b = &(self->boids)[i]; + b->prev_position = b->position; + b->position = add3(b->position, scale3(b->velocity, delta)); + } +} + +int ui_swarm(swarm_t *self) { + const char *distances[] = { + "Linear", + "Inverse Linear", + "Quadratic", + "Inverse Quadratic" + }; + + int rc = 0; + rc |= ui_float( "Perception Radius", &self->perception_radius); + ui_separator(); + + rc |= ui_float( "Separation Weight", &self->separation_weight); + rc |= ui_radio( "Separation Type", distances, countof(distances), (int*)&self->separation_type); + ui_separator(); + + rc |= ui_float( "Alignment Weight", &self->alignment_weight); + rc |= ui_float( "Cohesion Weight", &self->cohesion_weight); + ui_separator(); + + rc |= ui_float( "Steering Weight", &self->steering_weight); + //array(vec3) steering_targets; + rc |= ui_radio( "Steering Target Type", distances, countof(distances), (int*)&self->steering_target_type); + ui_separator(); + + rc |= ui_float( "Blindspot Angle", &self->blindspot_angledeg); + rc |= ui_float( "Max Acceleration", &self->max_acceleration); + rc |= ui_float( "Max Velocity", &self->max_velocity); + + return rc; +} + +// pathfinding ----------------------------------------------------------------- + +int pathfind_astar(int width, int height, const unsigned* map, vec2i src, vec2i dst, vec2i* path, size_t maxpath) { +#define ALLOW_DIAGONAL_MOVEMENT 1 + +#if ALLOW_DIAGONAL_MOVEMENT + #define ASTAR_DIR_COUNT 8 +#else + #define ASTAR_DIR_COUNT 4 +#endif + + static const vec2i dir[ASTAR_DIR_COUNT] = + { + { 1, 0 }, + { 0, 1 }, + { -1, 0 }, + { 0, -1 }, +#if ALLOW_DIAGONAL_MOVEMENT + { 1, 1 }, + { 1, -1 }, + { -1, 1 }, + { -1, -1 }, +#endif + }; + + #define ASTAR_POS_TYPE vec2i + #define ASTAR_POS_START src + #define ASTAR_POS_FINISH dst + #define ASTAR_POS_INDEX(p) ((p).y * width + (p).x) + #define ASTAR_MAX_INDEX (width * height) + #define ASTAR_INDEX_POS(p, i) \ + do { \ + (p).x = (i) % width; \ + (p).y = (i) / width; \ + } while (0) + #define ASTAR_POS_EQUAL(a, b) ((a).x == (b).x && (a).y == (b).y) + #define ASTAR_MAP_IS_FREE(p) ((p).y >= 0 && (p).y < height && (p).x >= 0 && (p).x < width && (char)map[(p).y * width + (p).x] == 0) + #define ASTAR_NEXT_POS(p, i) \ + do { \ + (p).x += dir[i].x; \ + (p).y += dir[i].y; \ + } while (0) + #define ASTAR_PREV_POS(p, i) \ + do { \ + (p).x -= dir[i].x; \ + (p).y -= dir[i].y; \ + } while (0) + #define ASTAR_GET_COST(a, b) (abs((a).x - (b).x) + abs((a).y - (b).y)) + +#if ALLOW_DIAGONAL_MOVEMENT + #define ASTAR_EXTRA_COST(i) (i < 4 ? 5 : 7) // 7/5 is approx sqrt(2) + #define ASTAR_COST_MUL 5 +#endif + + size_t path_count = 0; + #define ASTAR_PATH(p) if (path_count < maxpath) path[path_count++] = p + + // tempwork memory, not thread-safe. + #define ASTAR_TEMP_SIZE (ASTAR_MAX_INDEX * (sizeof(unsigned)*2) + sizeof(unsigned)*4) // (16<<20) + #define ASTAR_TEMP temp + static array(char) ASTAR_TEMP; do_once array_resize(ASTAR_TEMP, ASTAR_TEMP_SIZE); + + // #if 1 "astar.h" + { + // generic A* pathfinding + + // + // INTERFACE + // + + // mandatory macros + + #ifndef ASTAR_POS_TYPE + #error ASTAR_POS_TYPE should specify position type + #endif + + #ifndef ASTAR_POS_START + #error ASTAR_POS_START should specify start position + #endif + + #ifndef ASTAR_POS_FINISH + #error ASTAR_POS_FINISH should specify finish position + #endif + + #ifndef ASTAR_POS_INDEX + #error ASTAR_POS_INDEX(p) should specify macro to map position to index + #endif + + #ifndef ASTAR_MAX_INDEX + #error ASTAR_MAX_INDEX should specify max count of indices the position can map to + #endif + + #ifndef ASTAR_INDEX_POS + #error ASTAR_INDEX_POS(i) should specify macro to map index to position + #endif + + #ifndef ASTAR_POS_EQUAL + #error ASTAR_POS_EQUAL(a, b) should specify macro to compare if two positions are the same + #endif + + #ifndef ASTAR_MAP_IS_FREE + #error ASTAR_MAP_IS_FREE(p) should specify macro to check if map at position p is free + #endif + + #ifndef ASTAR_NEXT_POS + #error ASTAR_NEXT_POS(p, i) should specify macro to get next position in specific direction + #endif + + #ifndef ASTAR_PREV_POS + #error ASTAR_PREV_POS(p, i) should specify macro to get previous position from specific direction + #endif + + #ifndef ASTAR_DIR_COUNT + #error ASTAR_DIR_COUNT should specify possible direction count + #endif + + #ifndef ASTAR_GET_COST + #error ASTAR_GET_COST(a, b) should specify macro to get get cost between two positions + #endif + + #ifndef ASTAR_PATH + #error ASTAR_PATH(p) should specify macro that will be invoked on each position for path (in reverse order), including start/finish positions + #endif + + #if !defined(ASTAR_TEMP) || !defined(ASTAR_TEMP_SIZE) + #error ASTAR_TEMP and ASTAR_TEMP_SIZE should specify variable & size for temporary memory (should be at least ASTAR_MAX_INDEX * 4 + extra) + #endif + + // optional macros + + // adds extra cost for specific direction (useful for increasing cost for diagonal movements) + #ifndef ASTAR_EXTRA_COST + #define ASTAR_EXTRA_COST(i) 1 + #endif + + // multiplier for adding cost values (current_cost + mul * new_cost) - useful when using extra cost for diagonal movements + #ifndef ASTAR_COST_MUL + #define ASTAR_COST_MUL 1 + #endif + + // + // IMPLEMENTATION + // + + #if ASTAR_DIR_COUNT <= 4 + #define ASTAR_DIR_BITS 2 + #elif ASTAR_DIR_COUNT <= 8 + #define ASTAR_DIR_BITS 3 + #elif ASTAR_DIR_COUNT <= 16 + #define ASTAR_DIR_BITS 4 + #elif ASTAR_DIR_COUNT <= 32 + #define ASTAR_DIR_BITS 5 + #elif ASTAR_DIR_COUNT <= 64 + #define ASTAR_DIR_BITS 6 + #else + #error Too many elements for ASTAR_DIR_COUNT, 64 is max + #endif + + #define ASTAR_COST_BITS (32 - 1 - ASTAR_DIR_BITS) + + #define ASTAR_HEAP_SWAP(a, b) \ + do { \ + heapnode t = heap[a]; \ + heap[a] = heap[b]; \ + heap[b] = t; \ + } while (0) \ + + #define ASTAR_HEAP_PUSH(idx, c) \ + do { \ + heap[heap_count].index = idx; \ + heap[heap_count].cost = c; \ + int i = heap_count++; \ + int p = (i - 1) / 2; \ + while (i != 0 && heap[p].cost > heap[i].cost) \ + { \ + ASTAR_HEAP_SWAP(i, p); \ + i = p; \ + p = (i - 1) / 2; \ + } \ + } while (0) + + #define ASTAR_HEAP_POP() \ + do { \ + heap[0] = heap[--heap_count]; \ + int i = 0; \ + for (;;) \ + { \ + int l = 2 * i + 1; \ + int r = 2 * i + 2; \ + int s = i; \ + if (l < heap_count && heap[l].cost < heap[i].cost) s = l; \ + if (r < heap_count && heap[r].cost < heap[s].cost) s = r; \ + if (s == i) break; \ + ASTAR_HEAP_SWAP(i, s); \ + i = s; \ + } \ + } while (0) + + typedef union { + struct { + unsigned int cost : ASTAR_COST_BITS; + unsigned int dir : ASTAR_DIR_BITS; + unsigned int visited : 1; + }; + unsigned int all; + } node; + + typedef struct { + unsigned int index; + unsigned int cost; + } heapnode; + + if (ASTAR_TEMP_SIZE >= sizeof(node) * ASTAR_MAX_INDEX + sizeof(heapnode)) + { + node* nodes = (node*)ASTAR_TEMP; + for (unsigned int i = 0; i < ASTAR_MAX_INDEX; i++) + { + nodes[i].all = 0; + } + + heapnode* heap = (heapnode*)((char*)ASTAR_TEMP + sizeof(node) * ASTAR_MAX_INDEX); + unsigned int heap_max = (ASTAR_TEMP_SIZE - sizeof(node) * ASTAR_MAX_INDEX) / sizeof(heapnode); + int heap_count = 0; + + ASTAR_POS_TYPE p = ASTAR_POS_START; + unsigned int nindex = ASTAR_POS_INDEX(p); + node* n = nodes + nindex; + n->cost = 0; + n->visited = 1; + ASTAR_HEAP_PUSH(nindex, ASTAR_GET_COST(p, ASTAR_POS_FINISH)); + + int found = 0; + while (heap_count != 0) + { + nindex = heap[0].index; + n = nodes + nindex; + ASTAR_HEAP_POP(); + + ASTAR_INDEX_POS(p, nindex); + if (ASTAR_POS_EQUAL(p, ASTAR_POS_FINISH)) + { + found = 1; + break; + } + n->visited = 1; + + for (unsigned int i = 0; i < ASTAR_DIR_COUNT; i++) + { + ASTAR_POS_TYPE next = p; + ASTAR_NEXT_POS(next, i); + if (ASTAR_MAP_IS_FREE(next)) + { + unsigned int nnext_index = ASTAR_POS_INDEX(next); + node* nnext = nodes + nnext_index; + unsigned int cost = n->cost + ASTAR_EXTRA_COST(i); + if (nnext->visited == 0 || cost < nnext->cost) + { + nnext->cost = cost; + nnext->dir = i; + nnext->visited = 1; + if (heap_count == heap_max) + { + // out of memory + goto bail; + } + unsigned int new_cost = cost + ASTAR_COST_MUL * ASTAR_GET_COST(next, ASTAR_POS_FINISH); + ASTAR_HEAP_PUSH(nnext_index, new_cost); + } + } + } + } + bail: + + if (found) + { + ASTAR_PATH(p); + while (!ASTAR_POS_EQUAL(p, ASTAR_POS_START)) + { + ASTAR_PREV_POS(p, n->dir); + n = nodes + ASTAR_POS_INDEX(p); + ASTAR_PATH(p); + } + } + } + else + { + // not enough temp memory + } + + #undef ASTAR_POS_TYPE + #undef ASTAR_POS_START + #undef ASTAR_POS_FINISH + #undef ASTAR_POS_INDEX + #undef ASTAR_MAX_INDEX + #undef ASTAR_INDEX_POS + #undef ASTAR_POS_EQUAL + #undef ASTAR_MAP_IS_FREE + #undef ASTAR_NEXT_POS + #undef ASTAR_PREV_POS + #undef ASTAR_DIR_COUNT + #undef ASTAR_GET_COST + #undef ASTAR_EXTRA_COST + #undef ASTAR_COST_MUL + #undef ASTAR_PATH + #undef ASTAR_TEMP + #undef ASTAR_TEMP_SIZE + #undef ASTAR_COST_BITS + #undef ASTAR_DIR_BITS + #undef ASTAR_HEAP_SWAP + #undef ASTAR_HEAP_PUSH + #undef ASTAR_HEAP_POP + } + // #endif "astar.h" + + return path_count; +} + +// Behavior trees: decision planning and decision making. +// Supersedes finite state-machines (FSM) and hierarchical finite state-machines (HFSM). +// - rlyeh, public domain. +// +// [ref] https://outforafight.wordpress.com/2014/07/15/behaviour-behavior-trees-for-ai-dudes-part-1/ +// [ref] https://www.gameaipro.com/GameAIPro/GameAIPro_Chapter06_The_Behavior_Tree_Starter_Kit.pdf +// [ref] https://gitlab.com/NotYetGames/DlgSystem/-/wikis/Dialogue-Manual +// [ref] https://towardsdatascience.com/designing-ai-agents-behaviors-with-behavior-trees-b28aa1c3cf8a +// [ref] https://docs.nvidia.com/isaac/packages/behavior_tree/doc/behavior_trees.html +// [ref] https://docs.unrealengine.com/4.26/en-US/InteractiveExperiences/ArtificialIntelligence/BehaviorTrees/ +// [ref] gdc ChampandardDaweHernandezCerpa_BehaviorTrees.pdf @todo debugging +// [ref] https://docs.cocos.com/cocos2d-x/manual/en/actions/ + +// The nodes in a behavior tree can be broadly categorized into three main types: control nodes, task nodes, and decorator nodes. Here is a brief description of each category: + +// Control Nodes: Control nodes are used to control the flow of the behavior tree. They determine the order in which child nodes are executed and how the results of those nodes are combined. They are usually parent nodes. +// Action Nodes: Action nodes are used to perform specific actions or tasks within the behavior tree. They can include actions such as moving, attacking, or interacting with objects in the game world. They are usually leaf nodes. +// Decorator Nodes: Decorator nodes are used to modify the behavior of child nodes in some way. They can be used to repeat child nodes, invert the result of a child node, or add a cooldown period between executions. They are usually located between control and action nodes. + +// --- VARIABLES + +// Key Prefixes: +// {visiblity:(l)ocal,s(q)uad,(r)ace,(f)action,(g)lobal} +// [persistence:(t)emp,(u)serdata,(s)avegame,(c)loud] + '_' + name. +// [persistence:(tmp),(usr)data,(sav)egame,(net)cloud] + '_' + name. + +// Ie, l_health = 123.4, gsav_player = "john" + +// --- ACTION NODES + +// [ ] * Actions/Behaviors have a common structure: +// [ ] - Entry point (function name) for a C call or Lua script. +// [ ] * Status: +// [ ] - Uninitialized (never run) +// [ ] - Running (in progress) +// [ ] - Suspended (on hold till resumed) +// [ ] - Success (finished and succeeded) +// [ ] - Failure (finished and failed) +// [ ] * Optional callbacks: +// [ ] - on_enter +// [ ] - on_leave +// [ ] - on_success +// [ ] - on_failure +// [ ] - on_suspend +// [ ] - on_resume + +// [x] Action Node: This node performs a single action, such as moving to a specific location or attacking a target. +// [ ] Blackboard Node: Node that reads and writes data to a shared memory space known as a blackboard. The blackboard can be used to store information that is relevant to multiple nodes in the behavior tree. +// [ ] SetKey(keyVar,object) +// [ ] HasKey(keyVar) +// [ ] CompareKeys(keyVar1, operator < <= > >= == !=, keyVar2) +// [ ] SetTags(names=blank,cooldownTime=inf,bIsCooldownAdditive=false) +// [ ] HasTags(names=blank,bAllRequired=true) +// [ ] PushToStack(keyVar,itemObj): creates a new stack if one doesnt exist, and stores it in the passed variable name, and then pushes item object onto it. +// [ ] PopFromStack(keyVar,itemVar): pop pops an item off the stack, and stores it in the itemVar variable, failing if the stack is already empty. +// [ ] IsEmptyStack(keyVar): checks if the stack passed is empty and returns success if it is, and failure if its not. +// [ ] Communication Node: This is a type of action node that allows an AI agent to communicate with other agents or entities in the game world. The node takes an input specifying the message to be communicated and the recipient(s) of the message (wildmask,l/p/f/g prefixes). The node then sends the message to the designated recipient(s) and returns success when the communication is completed. This node can be useful for implementing behaviors that require the AI agent to coordinate with other agents or to convey information to the player. It could use a radius argument to specify the maximum allowed distance for the recipients. +// [ ] Condition Node: A leaf node that checks a specific condition, such as the distance to an object, the presence of an enemy, or the status of a health bar. +// [ ] Distance Condition Node: This is a type of condition node that evaluates whether an AI agent is within a specified distance of a target object or location. The node takes two inputs: the current position of the AI agent and the position of the target object or location. If the distance between the two is within a specified range, the node returns success. If the distance is outside of the specified range, the node returns failure. This node can be useful for implementing behaviors that require the AI agent to maintain a certain distance from a target, such as following or avoiding an object. Could use a flag to disambiguate between linear distance and path distance. +// [ ] Query Node: This node checks a condition and returns success or failure based on the result. For example, a query node could check whether an enemy is within range or whether a door is locked. +// [ ] Query Node: A type of decorator node that retrieves information from a database or external system, such as a web service or file system. The Query node can be used to retrieve data that is not available within the game engine, such as weather or traffic conditions. +// [ ] A condition is made of: +// [ ] - Optional [!] negate +// [ ] - Mandatory Value1(Int/Flt/Bool/VarName/FuncName) +// [ ] - Optional operator [< <= > >= == !=] and Value2(Int/Flt/Bool/VarName/FuncName) +// [ ] AllConditions(...) : SUCCESS if ( empty array || all conditions met) +// [ ] AnyConditions(...) : SUCCESS if (!empty array && one conditions met) + +// --- DECORATOR NODES + +// [ ] Cooldown Node: Decorator node that adds a cooldown period between the execution of a child node, preventing it from being executed again until the cooldown period has elapsed. +// [x] Counter Node: Decorator node that limits the number of times that a child node can execute. For example, if the child node has executed a certain number of times, the Counter node will return a failure. +// [x] Once Node: Decorator node that triggers a specified action when a condition is met for the first time. This can be useful for triggering a one-time event, such as when an AI agent discovers a hidden item or reaches a new area of the game world. +// [x] Inverter Node: Decorator node that inverts the result of a child node, returning success if the child node fails and failure if the child node succeeds. This can be useful for negating the outcome of a particular behavior, such as avoiding a certain area of the game world. +// [x] Repeater Node: Decorator node that repeats the execution of a child node a specified number of times or indefinitely. +// [x] Repeat(times=inf): Runs child node given times. These are often used at the very base of the tree, to make the tree to run continuously. +// [ ] RepeatIf(strong/weak condition): Runs child node as long as the conditions are met. +// [ ] RepeatIfOk(times=inf): Runs child node if it succeedes, max given times. +// [ ] RepeatIfFail(times=inf): Runs child node if it fails, max given times. +// [ ] Branch Node: 2 children [0] for true, [1] for false +// [ ] Resource Node: Decorator node that manages a shared resource, such as a limited supply of ammunition or a limited amount of processing power. The Resource node The node can be used to decide when to use or conserve the resource. For example, if the AI agent is low on ammunition, the node may decide to switch to a melee weapon or to retreat to a safer location. This node can be useful for implementing behaviors that require the AI agent to make strategic decisions about resource use. +// [x] Result Node: Decorator node that tracks the result of a child action node and returns either success or failure depending on the outcome. This can be useful for determining whether an action was successful or not, and then adjusting the AI agent's behavior accordingly. +// [x] Succeeder Node: Decorator node that always returns success, regardless of the result of its child node. This can be useful for ensuring that certain behaviors are always executed, regardless of the overall success or failure of the behavior tree. +// [x] Success(): FAILURE becomes SUCCESS (TRUE). +// [x] Failure(): SUCCESS becomes FAILURE (FALSE). +// [ ] Throttle Node: Decorator node that limits the rate at which a child node can execute. For example, a Throttle node might ensure that an AI agent can only fire its weapon, or using a special ability, only a certain number of times per second. +// [x] Delay Node: Decorator node that adds a delay to the execution of a child node. The delay might be configured to sleep before the execution, after the execution, or both. +// [x] Defer Delay(duration_ss=1): Runs the child node, then sleeps for given seconds. +// [ ] Ease(time,name): Clamps child time to [0,1] range, and applies easing function on it. +// [ ] Dilate(Mul=1,Add=0): Dilates child time + +// --- CONTROL NODES + +// [x] Root Node: The topmost node in a behavior tree that represents the start of the decision-making process. Returns success if any of its child nodes suceedes. +// [x] Root-Failure Node: Control node that only returns failure if all of its child nodes fail. This can be useful for ensuring that a behavior tree is not prematurely terminated if one or more child nodes fail. + +// [ ] Event(name): When name event is raised, it suspends current tree and calls child. "Incoming projectile" -> Evade. Stimulus types: may be disabled by event, or autodisabled. +// [ ] Raise(name): Triggers event name. + +// [ ] Checkpoint Node: Control node that saves a state in memory and then continues the tree execution from that point the next time the tree is executed. It can be useful in situations where the behavior tree needs to be interrupted and resumed later. +// [ ] Decision Making Node: Control node that implements a decision-making process for the AI agent. The node takes input specifying the available options for the AI agent and the criteria for evaluating each option. The node then evaluates each option based on the specified criteria and selects the best option. This node can be useful for implementing behaviors that require the AI agent to make strategic decisions, such as choosing a target or selecting a path through the game world. +// [ ] Could be extended with GOAP if dynamically inserting the scores on each update then calling a Probability Selector Node (0.2,0.3,0.5) +// [ ] https://cdn.cloudflare.steamstatic.com/apps/valve/2012/GDC2012_Ruskin_Elan_DynamicDialog.pdf +// [ ] Evaluate Node / Recheck(): +// [ ] Actively rechecks all existing sub-conditions on a regular basis after having made decisions about them. +// [ ] Use this feature to dynamically check for risks or opportunities in selected parts of the tree. +// [ ] For example, interrupting a patrol with a search behavior if a disturbance is reported. +// [ ] Interrupt Node: Control node that interrupts the execution of a lower-priority node when a higher-priority node needs to be executed. It can be useful for handling urgent tasks or emergency situations. +// [ ] Monitor Node: Control node that continuously monitors a condition and triggers a specified action when the condition is met. For example, a Monitor node might monitor the distance between an AI agent and a target and trigger a "retreat" behavior when the distance falls below a certain threshold. +// [ ] Observer Node: Control node that monitors the state of the game world and triggers a specified action when certain conditions are met. For example, an Observer node might trigger a "hide" behavior when an enemy is spotted. +// [ ] Parallel Node: Control node that executes multiple child nodes simultaneously. The Parallel node continues to execute even if some of its child nodes fail. +// [ ] Parallel All Node(required_successes=100%): Control node that executes multiple child nodes simultaneously. Returns false when first child fails, and aborts any other running tasks. Returns true if all its children succeed. +// [ ] Parallel One Node(required_successes=1): Control node that executes multiple child nodes simultaneously. Returns true when first child suceedes, and aborts any other running tasks. Returns false if all its children fail. +// [ ] Subsumption Node: Control node that allows multiple behaviors to be executed simultaneously, with higher-priority behaviors taking precedence over lower-priority ones. This can be useful for implementing complex, multi-level behaviors in autonomous systems. +// [ ] Semaphore Node: Control node that blocks the execution of its child nodes until a certain condition is met. For example, a Semaphore node might block the execution of a behavior until a certain object is in range or a certain event occurs. +// [ ] Semaphore Wait Node: Control node that blocks the execution of its child nodes until a resource becomes available. This can be useful for controlling access to shared resources such as a pathfinding system or a communication channel. +// [ ] WaitTags(tags=blank,timeout_ss=inf): Stops execution of child node until the cooldown tag(s) do expire. May return earlier if timed out. +// [ ] WaitEvent(name=blank,timeout_ss=inf): Stops execution of child node until event is raised. May return earlier if timed out. +// [x] Sequence Node(reversed,iterator(From,To)): Control node that executes a series of child nodes in order. If any of the child nodes fail, the Sequence node stops executing and returns a failure. +// [ ] Dynamic Sequence Node: Control node that dynamically changes the order in which its child nodes are executed based on certain conditions. For example, a Dynamic Sequence node might give higher priority to a child node that has recently failed or that is more likely to succeed. +// [ ] Reverse(): iterates children in reversed order (Iterator:(-1,0) equivalent) +// [ ] Iterator(from,to): allows negative indexing. increments if (abs from < abs to), decrements otherwise +// [x] Selector Node: Control node that selects a child node to execute based on a predefined priority or set of conditions. The Selector node stops executing child nodes as soon as one of them succeeds. +// [ ] Priority Selector Node: Control node that executes its child nodes in order of priority. If the first child node fails, it moves on to the next child node in the list until a successful node is found. This can be useful for implementing behaviors that require a specific order of execution, such as a patrol route or a search pattern. +// [ ] Probability Selector Node: Control node that selects a child node to execute based on a probability distribution. For example, if there are three child nodes with probabilities of 0.2, 0.3, and 0.5, the Probability Selector node will execute the third child node 50% of the time. +// [ ] Dynamic Selector Node: Control node that dynamically changes the order in which its child nodes are executed based on certain conditions. For example, a Dynamic Selector node might give higher priority to a child node that has recently succeeded or that is more likely to succeed. +// [ ] Dynamic Selector Node: Control node that dynamically changes the order in which child nodes are executed based on certain conditions. For example, it may prioritize certain nodes when health is low, and other nodes when resources are scarce. +// [ ] Dynamic Priority Node: Control node that dynamically changes the priority of its child nodes based on certain conditions. For example, if a child node is more likely to result in success, the Dynamic Priority node will give it a higher priority. +// [ ] Weighted / Cover Selection Node: This is a type of selector node that evaluates the available cover options in the game world and selects the best cover position for the AI agent. The node takes input specifying the current position of the AI agent and the location of potential cover positions. The node then evaluates the cover positions based on criteria such as distance to enemy positions, line of sight, and available cover points, and selects the best option. This node can be useful for implementing behaviors that require the AI agent to take cover and avoid enemy fire. +// [ ] Random Selector Node: Control node that selects a child node to execute at random. This can be useful for introducing variety and unpredictability into the behavior of an AI agent. +// [ ] Random Weight / Stochastic Node(0.2,0.3,0.5): Control node that introduces randomness into the decision-making process of an AI agent. For example, a Stochastic node might randomly select a child node to execute, with the probability of each child node being proportional to its likelihood of success. +// [ ] Break(bool): breaks parent sequence or selector. may return SUCCESS or FAILURE. +// [ ] Hybrid Node: Control node that combines the functionality of multiple control nodes, such as a sequence node and a selector node. It can be useful for creating complex behavior patterns that require multiple control structures. The Hybrid Node has two modes of operation: strict mode and flexible mode. In strict mode, the child nodes are executed in a fixed order, similar to a Sequence Node. If any child node fails, the entire Hybrid Node fails. In flexible mode, the child nodes can be executed in any order, similar to a Selector Node. If any child node succeeds, the entire Hybrid Node succeeds. The Hybrid Node is often used when you need to create complex behavior patterns that require multiple control structures. For example, you might use a Hybrid Node to implement a search behavior where the AI agent first moves in a fixed direction for a certain distance (strict mode), but then switches to a more exploratory mode where it randomly explores nearby areas (flexible mode). +// [ ] Subtree Node: Control node that calls another behavior tree as a subroutine. This is useful for breaking down complex behaviors into smaller, more manageable parts. +// [ ] Call(name): Calls to the child node with the matching name within behavior tree. Returns FAILURE if name is invalid or if invoked behavior returns FAILURE. +// [ ] Return(boolean): Exits current Call. +// [ ] AttachTree(Name,bDetachAfterUse=true): Attaches subtree to main tree. When a NPC founds the actor, it attaches the behavior to the tree. Ie, Level specific content: Patrols, Initial setups, Story driven events, etc. Ie, DLCs: Behaviors are added to actors in the DLC level (enticers). +// [ ] DetachTree(Name) +// [ ] Switch Node: Control node that evaluates a condition and then selects one of several possible child nodes to execute based on the result of the condition. +// [ ] Switch(name): Jumps to the child node with the matching name within behavior tree. If name is invalid will defer to Fallback child node. +// [ ] Timeout Node: Control node that aborts the execution of its child node after a certain amount of time has elapsed. This can be useful for preventing an AI agent from getting stuck in a loop or waiting indefinitely for a particular event to occur. +// [ ] TimeLimit(timeout_ss=inf): Give the child any amount of time to finish before it gets canceled. The timer is reset every time the node gains focus. +// [ ] Timer Node: Control node which invokes its child node every XX seconds. The timer can repeat the action any given number of times, or indefinitely. + +// ## Proposal ----------------------------------------------------------------------------- + +// BehaviorTrees as case-insensitive INI files. Then, +// - INI -> C INTERPRETER, OR +// - INI -> LUA TRANSPILER -> LUA BYTECODE -> LUA VM. + +// ```ini +// [bt] +// recheck +// sequence ;; Approach the player if seen! +// conditions=IsPlayerVisible, +// action=MoveTowardsPlayer +// sequence ;; Attack the player if seen! +// conditions=IsPlayerInRange, +// repeat=3 +// action=FireAtPlayer +// sequence ;; Search near last known position +// conditions=HaveWeGotASuspectedLocation, +// action=MoveToPlayersLastKnownPosition +// action=LookAround +// sequence ;; Randomly scanning nearby +// action=MoveToRandomPosition +// action=LookAround +// event=IncomingProjectile +// action=Evade +// ``` + +map(char*, bt_func) binds; + +void bt_addfun(const char *name, int(*func)()){ + do_once map_init_str(binds); + map_find_or_add_allocated_key(binds, STRDUP(name), func); +} +bt_func bt_findfun(const char *name) { + bt_func *found = map_find(binds, (char*)name); + return found ? *found : 0; +} +char * bt_funcname(bt_func fn) { + for each_map(binds,char*,k,bt_func,f) { + if( f == fn ) return k; + } + return 0; +} + +bt_t bt(const char *ini_file, unsigned flags) { + bt_t z = {0}, root = z; + array(char*) m = strsplit(vfs_read(ini_file), "\r\n"); + + bt_t *self = &root; + self->type = cc4(r,o,o,t); + //self->parent = self; + + for( int i = 0; i < array_count(m); ++i ) { + // parse ini + int level = strspn(m[i], " \t"); + char *k = m[i] + level; + if( k[0] == '[' ) { + if( strcmp(k+1, "bt]") ) return z; // we only support [bt] + continue; + } + int sep = strcspn(k, " =:"); + char *v = k + sep; if(sep) *v++ = '\0'; else v = k + strlen(k); // v = (char*)""; + array(char*) args = *v ? strsplit(v, " ") : NULL; + + // insert node in tree + bt_t *out = self; + while( level-- ) { + out = array_back(out->children); + } + array_push(out->children, ((bt_t){0})); + //array_back(out->children)->parent = out; + out = array_back(out->children); + + // config node + out->type = *(uint64_t*)va("%-8s", k); + if( array_count(args) ) out->argf = atof(args[0]); + if( !strcmp(k, "run") ) out->action = bt_findfun(v); + } + + return root; +} + +int bt_run(bt_t *b) { + int rc = 0; + + /**/ if( b->type == cc3( r,u,n) ) { return b->action ? b->action() : 0; } + else if( b->type == cc3( n,o,t) ) { return !bt_run(b->children + 0); } + else if( b->type == cc5( s,l,e,e,p) ) { return sleep_ss(b->argf), bt_run(b->children + 0); } + else if( b->type == cc5( d,e,f,e,r) ) { rc = bt_run(b->children + 0); return sleep_ss(b->argf), rc; } + else if( b->type == cc4( l,o,o,p) ) { int rc; for(int i = 0; i < b->argf; ++i) rc = bt_run(b->children + 0); return rc; } + else if( b->type == cc4( o,n,c,e) ) { return b->argf ? 0 : (b->argf = 1), bt_run(b->children + 0); } + else if( b->type == cc5( c,o,u,n,t) ) { return b->argf <= 0 ? 0 : --b->argf, bt_run(b->children + 0); } + else if( b->type == cc4( p,a,s,s) ) { return bt_run(b->children + 0), 1; } + else if( b->type == cc4( f,a,i,l) ) { return bt_run(b->children + 0), 0; } + else if( b->type == cc6( r,e,s,u,l,t) ) { return bt_run(b->children + 0), !!b->argf; } + else if( b->type == cc3( a,l,l) ) { for( int i = 0; i < array_count(b->children); ++i ) if(!bt_run(b->children+i)) return 0; return 1; } + else if( b->type == cc3( a,n,y) ) { for( int i = 0; i < array_count(b->children); ++i ) if( bt_run(b->children+i)) return 1; return 0; } + else if( b->type == cc4( r,o,o,t) ) { for( int i = 0; i < array_count(b->children); ++i ) rc|=bt_run(b->children+i); return rc; } + else if( b->type == cc8(r,o,o,t,f,a,i,l) ) { rc = 1; for( int i = 0; i < array_count(b->children); ++i ) rc&=~bt_run(b->children+i); return rc; } + + return 0; +} + +int ui_bt(bt_t *b) { + if( b ) { + char *info = bt_funcname(b->action); + if(!info) info = va("%d", array_count(b->children)); + + if( ui_collapse(va("%s (%s)", cc8str(b->type), info), va("bt%p",b)) ) { + for( int i = 0; i < array_count(b->children); ++i) { + ui_bt(b->children + i); + } + ui_collapse_end(); + } + } + return 0; +} #line 0 #line 1 "v4k_editor0.c" -// editing: -// nope > functions: add/rem property - -#define ICON_PLAY ICON_MD_PLAY_ARROW -#define ICON_PAUSE ICON_MD_PAUSE -#define ICON_STOP ICON_MD_STOP -#define ICON_CANCEL ICON_MD_CLOSE - -#define ICON_WARNING ICON_MD_WARNING -#define ICON_BROWSER ICON_MD_FOLDER_SPECIAL -#define ICON_OUTLINER ICON_MD_VIEW_IN_AR -#define ICON_BUILD ICON_MD_BUILD -#define ICON_SCREENSHOT ICON_MD_PHOTO_CAMERA -#define ICON_CAMERA_ON ICON_MD_VIDEOCAM -#define ICON_CAMERA_OFF ICON_MD_VIDEOCAM_OFF -#define ICON_GAMEPAD_ON ICON_MD_VIDEOGAME_ASSET -#define ICON_GAMEPAD_OFF ICON_MD_VIDEOGAME_ASSET_OFF -#define ICON_AUDIO_ON ICON_MD_VOLUME_UP -#define ICON_AUDIO_OFF ICON_MD_VOLUME_OFF -#define ICON_WINDOWED ICON_MD_FULLSCREEN_EXIT -#define ICON_FULLSCREEN ICON_MD_FULLSCREEN -#define ICON_LIGHTS_ON ICON_MD_LIGHTBULB -#define ICON_LIGHTS_OFF ICON_MD_LIGHTBULB_OUTLINE -#define ICON_RENDER_BASIC ICON_MD_IMAGE_SEARCH -#define ICON_RENDER_FULL ICON_MD_INSERT_PHOTO - -#define ICON_SIGNAL ICON_MD_SIGNAL_CELLULAR_ALT -#define ICON_DISK ICON_MD_STORAGE -#define ICON_RATE ICON_MD_SPEED - -#define ICON_CLOCK ICON_MD_TODAY -#define ICON_CHRONO ICON_MD_TIMELAPSE - -#define ICON_SETTINGS ICON_MD_SETTINGS -#define ICON_LANGUAGE ICON_MD_G_TRANSLATE -#define ICON_PERSONA ICON_MD_FACE -#define ICON_SOCIAL ICON_MD_MESSAGE -#define ICON_GAME ICON_MD_ROCKET_LAUNCH -#define ICON_KEYBOARD ICON_MD_KEYBOARD -#define ICON_MOUSE ICON_MD_MOUSE -#define ICON_GAMEPAD ICON_MD_GAMEPAD -#define ICON_MONITOR ICON_MD_MONITOR -#define ICON_WIFI ICON_MD_WIFI -#define ICON_BUDGET ICON_MD_SAVINGS -#define ICON_NEW_FOLDER ICON_MD_CREATE_NEW_FOLDER -#define ICON_PLUGIN ICON_MD_EXTENSION -#define ICON_RESTART ICON_MD_REPLAY -#define ICON_QUIT ICON_MD_CLOSE - -#define ICON_POWER ICON_MD_BOLT // ICON_MD_POWER -#define ICON_BATTERY_CHARGING ICON_MD_BATTERY_CHARGING_FULL -#define ICON_BATTERY_LEVELS \ - ICON_MD_BATTERY_ALERT, \ - ICON_MD_BATTERY_0_BAR,ICON_MD_BATTERY_1_BAR, \ - ICON_MD_BATTERY_2_BAR,ICON_MD_BATTERY_3_BAR, \ - ICON_MD_BATTERY_4_BAR,ICON_MD_BATTERY_5_BAR, \ - ICON_MD_BATTERY_6_BAR,ICON_MD_BATTERY_FULL - -char *editor_path(const char *path) { - return va("%s/%s", EDITOR, path); -} - -vec3 editor_pick(float mouse_x, float mouse_y) { -#if 0 - // unproject 2d coord as 3d coord - camera_t *camera = camera_get_active(); - vec3 out, xyd = vec3(mouse_x,window_height()-mouse_y,1); // usually x:mouse_x,y:window_height()-mouse_y,d:0=znear/1=zfar - mat44 mvp, model; identity44(model); multiply44x3(mvp, camera->proj, camera->view, model); - bool ok = unproject44(&out, xyd, vec4(0,0,window_width(),window_height()), mvp); - return out; -#else - // unproject 2d coord as 3d coord - vec2 dpi = ifdef(osx, window_dpi(), vec2(1,1)); - camera_t *camera = camera_get_active(); - float x = (2.0f * mouse_x) / (dpi.x * window_width()) - 1.0f; - float y = 1.0f - (2.0f * mouse_y) / (dpi.y * window_height()); - float z = 1.0f; - vec3 ray_nds = vec3(x, y, z); - vec4 ray_clip = vec4(ray_nds.x, ray_nds.y, -1.0, 1.0); - mat44 inv_proj; invert44(inv_proj, camera->proj); - mat44 inv_view; invert44(inv_view, camera->view); - vec4 p = transform444(inv_proj, ray_clip); - vec4 eye = vec4(p.x, p.y, -1.0, 0.0); - vec4 wld = norm4(transform444(inv_view, eye)); - return vec3(wld.x, wld.y, wld.z); -#endif -} - - -typedef union engine_var { - int i; - float f; - char *s; -} engine_var; -static map(char*,engine_var) engine_vars; -float *engine_getf(const char *key) { - if(!engine_vars) map_init_str(engine_vars); - engine_var *found = map_find_or_add(engine_vars, (char*)key, ((engine_var){0}) ); - return &found->f; -} -int *engine_geti(const char *key) { - if(!engine_vars) map_init_str(engine_vars); - engine_var *found = map_find_or_add(engine_vars, (char*)key, ((engine_var){0}) ); - return &found->i; -} -char **engine_gets(const char *key) { - if(!engine_vars) map_init_str(engine_vars); - engine_var *found = map_find_or_add(engine_vars, (char*)key, ((engine_var){0}) ); - if(!found->s) found->s = stringf("%s",""); - return &found->s; -} - -int engine_send(const char *cmd, const char *optional_value) { - unsigned *gamepads = engine_geti("gamepads"); // 0 off, mask gamepad1(1), gamepad2(2), gamepad3(4), gamepad4(8)... - unsigned *renders = engine_geti("renders"); // 0 off, mask: 1=lit, 2=ddraw, 3=whiteboxes - float *speed = engine_getf("speed"); // <0 num of frames to advance, 0 paused, [0..1] slomo, 1 play regular speed, >1 fast-forward (x2/x4/x8) - unsigned *powersave = engine_geti("powersave"); - - char *name; - /**/ if( !strcmp(cmd, "key_quit" )) record_stop(), exit(0); - else if( !strcmp(cmd, "key_stop" )) window_pause(1); - else if( !strcmp(cmd, "key_mute" )) audio_volume_master( 1 ^ !!audio_volume_master(-1) ); - else if( !strcmp(cmd, "key_pause" )) window_pause( window_has_pause() ^ 1 ); - else if( !strcmp(cmd, "key_reload" )) window_reload(); - else if( !strcmp(cmd, "key_battery" )) *powersave = optional_value ? !!atoi(optional_value) : *powersave ^ 1; - else if( !strcmp(cmd, "key_browser" )) ui_show("File Browser", ui_visible("File Browser") ^ true); - else if( !strcmp(cmd, "key_outliner" )) ui_show("Outliner", ui_visible("Outliner") ^ true); - else if( !strcmp(cmd, "key_record" )) if(record_active()) record_stop(), ui_notify(va("Video recorded"), date_string()); else - app_beep(), name = file_counter(va("%s.mp4",app_name())), window_record(name); - else if( !strcmp(cmd, "key_screenshot" )) name = file_counter(va("%s.png",app_name())), window_screenshot(name), ui_notify(va("Screenshot: %s", name), date_string()); - else if( !strcmp(cmd, "key_profiler" )) ui_show("Profiler", profiler_enable(ui_visible("Profiler") ^ true)); - else if( !strcmp(cmd, "key_fullscreen" )) record_stop(), window_fullscreen( window_has_fullscreen() ^ 1 ); // framebuffer resizing corrupts video stream, so stop any recording beforehand - else if( !strcmp(cmd, "key_gamepad" )) *gamepads = (*gamepads & ~1u) | ((*gamepads & 1) ^ 1); - else if( !strcmp(cmd, "key_lit" )) *renders = (*renders & ~1u) | ((*renders & 1) ^ 1); - else if( !strcmp(cmd, "key_ddraw" )) *renders = (*renders & ~2u) | ((*renders & 2) ^ 2); - else alert(va("editor could not handle `%s` command.", cmd)); - - return 0; -} - -int engine_tick() { - enum { engine_hz_mid = 30 }; - enum { engine_hz_low = 10 }; - static double old_hz = 0.0; - if( *engine_geti("powersave") ) { - // adaptive framerate - int app_on_background = !window_has_focus(); - int hz = app_on_background ? engine_hz_low : engine_hz_mid; - if (!old_hz) old_hz = window_fps_target(); - window_fps_lock( hz ); - } else if( old_hz && old_hz != window_fps_target() ) { - window_fps_lock( old_hz ); - old_hz = 0.0; - } - - return 0; -} - -int ui_engine() { - static int time_factor = 0; - static int playing = 0; - static int paused = 0; - int advance_frame = 0; - -#if 0 - static int do_filter = 0; - static int do_profile = 0; - static int do_extra = 0; - - char *EDITOR_TOOLBAR_ICONS = va("%s;%s;%s;%s;%s;%s;%s;%s", - do_filter ? ICON_MD_CLOSE : ICON_MD_SEARCH, - ICON_MD_PLAY_ARROW, - paused ? ICON_MD_SKIP_NEXT : ICON_MD_PAUSE, - ICON_MD_FAST_FORWARD, - ICON_MD_STOP, - ICON_MD_REPLAY, - ICON_MD_FACE, - ICON_MD_MENU - ); - - if( input_down(KEY_F) ) if( input(KEY_LCTRL) || input(KEY_RCTRL) ) do_filter ^= 1; - int choice = ui_toolbar(EDITOR_TOOLBAR_ICONS); - if( choice == 1 ) do_filter ^= 1, do_profile = 0, do_extra = 0; - if( choice == 2 ) playing = 1, paused = 0; - if( choice == 3 ) advance_frame = !!paused, paused = 1; - if( choice == 4 ) paused = 0, time_factor = (++time_factor) % 4; - if( choice == 5 ) playing = 0, paused = 0, advance_frame = 0, time_factor = 0; - if( choice == 6 ) window_reload(); - if( choice == 7 ) do_filter = 0, do_profile ^= 1, do_extra = 0; - if( choice == 8 ) do_filter = 0, do_profile = 0, do_extra ^= 1; - - if( do_filter ) { - char *bak = ui_filter; ui_filter = 0; - ui_string(ICON_MD_CLOSE " Filter " ICON_MD_SEARCH, &bak); - ui_filter = bak; - if( ui_label_icon_clicked_L.x > 0 && ui_label_icon_clicked_L.x <= 24 ) { // if clicked on CANCEL icon (1st icon) - do_filter = 0; - } - } else { - if( ui_filter ) ui_filter[0] = '\0'; - } - char *filter_mask = ui_filter && ui_filter[0] ? va("*%s*", ui_filter) : "*"; - - static char *username = 0; - static char *userpass = 0; - if( do_profile ) { - ui_string(ICON_MD_FACE " Username", &username); - ui_string(ICON_MD_FACE " Password", &userpass); - } - - if( do_extra ) { - int choice2 = ui_label2_toolbar(NULL, - ICON_MD_VIEW_IN_AR - ICON_MD_MESSAGE - ICON_MD_TIPS_AND_UPDATES ICON_MD_LIGHTBULB ICON_MD_LIGHTBULB_OUTLINE - ICON_MD_IMAGE_SEARCH ICON_MD_INSERT_PHOTO - ICON_MD_VIDEOGAME_ASSET ICON_MD_VIDEOGAME_ASSET_OFF - - ICON_MD_VOLUME_UP ICON_MD_VOLUME_OFF // audio_volume_master(-1) > 0 - - ICON_MD_TROUBLESHOOT ICON_MD_SCHEMA ICON_MD_MENU - ); - } -#endif - - int open = 0, clicked_or_toggled = 0; - - - #define EDITOR_UI_COLLAPSE(f,...) \ - for( int macro(p) = (open = ui_collapse(f,__VA_ARGS__)), macro(dummy) = (clicked_or_toggled = ui_collapse_clicked()); macro(p); ui_collapse_end(), macro(p) = 0) - - EDITOR_UI_COLLAPSE(ICON_MD_VIEW_QUILT " Windows", "Debug.Windows") { - int choice = ui_toolbar(ICON_MD_RECYCLING "@Reset layout;" ICON_MD_SAVE_AS "@Save layout"); - if( choice == 1 ) ui_layout_all_reset("*"); - if( choice == 2 ) file_delete(WINDOWS_INI), ui_layout_all_save_disk("*"); - - for each_map_ptr_sorted(ui_windows, char*, k, unsigned, v) { - bool visible = ui_visible(*k); - if( ui_bool( *k, &visible ) ) { - ui_show( *k, ui_visible(*k) ^ true ); - } - } - } - - EDITOR_UI_COLLAPSE(ICON_MD_BUG_REPORT " Bugs 0", "Debug.Bugs") { - // @todo. parse /bugs.ini, includes saved screenshots & videos. - // @todo. screenshot include parseable level, position screen markers (same info as /bugs.ini) - } - - - // Art and bookmarks - EDITOR_UI_COLLAPSE(ICON_MD_FOLDER_SPECIAL " Art", "Debug.Art") { - bool inlined = true; - const char *file = 0; - if( ui_browse(&file, &inlined) ) { - const char *sep = ifdef(win32, "\"", "'"); - app_exec(va("%s %s%s%s", ifdef(win32, "start \"\"", ifdef(osx, "open", "xdg-open")), sep, file, sep)); - } - } - EDITOR_UI_COLLAPSE(ICON_MD_BOOKMARK " Bookmarks", "Debug.Bookmarks") { /* @todo */ } - - - // E,C,S,W - EDITOR_UI_COLLAPSE(ICON_MD_ACCOUNT_TREE " Scene", "Debug.Scene") { - EDITOR_UI_COLLAPSE(ICON_MD_BUBBLE_CHART/*ICON_MD_SCATTER_PLOT*/ " Entities", "Debug.Entities") { /* @todo */ } - EDITOR_UI_COLLAPSE(ICON_MD_TUNE " Components", "Debug.Components") { /* @todo */ } - EDITOR_UI_COLLAPSE(ICON_MD_PRECISION_MANUFACTURING " Systems", "Debug.Systems") { /* @todo */ } - EDITOR_UI_COLLAPSE(ICON_MD_PUBLIC " Levels", "Debug.Levels") { - //node_edit(editor.edit.down,&editor.edit); - } - - //EDITOR_UI_COLLAPSE(ICON_MD_ACCOUNT_TREE " Init", "Debug.HierarchyInit") { /* @todo */ } - //EDITOR_UI_COLLAPSE(ICON_MD_ACCOUNT_TREE " Draw", "Debug.HierarchyDraw") { /* @todo */ } - //EDITOR_UI_COLLAPSE(ICON_MD_ACCOUNT_TREE " Tick", "Debug.HierarchyTick") { /* @todo */ } - //EDITOR_UI_COLLAPSE(ICON_MD_ACCOUNT_TREE " Edit", "Debug.HierarchyEdit") { /* @todo */ } - //EDITOR_UI_COLLAPSE(ICON_MD_ACCOUNT_TREE " Quit", "Debug.HierarchyQuit") { /* @todo */ } - - // node_edit(&editor.init,&editor.init); - // node_edit(&editor.draw,&editor.draw); - // node_edit(&editor.tick,&editor.tick); - // node_edit(&editor.edit,&editor.edit); - // node_edit(&editor.quit,&editor.quit); - } - - EDITOR_UI_COLLAPSE(ICON_MD_ROCKET_LAUNCH " AI", "Debug.AI") { - // @todo - } - EDITOR_UI_COLLAPSE(ICON_MD_VOLUME_UP " Audio", "Debug.Audio") { - ui_audio(); - } - EDITOR_UI_COLLAPSE(ICON_MD_VIDEOCAM " Camera", "Debug.Camera") { - ui_camera( camera_get_active() ); - } - EDITOR_UI_COLLAPSE(ICON_MD_MONITOR " Display", "Debug.Display") { - // @todo: fps lock, fps target, aspect ratio, fullscreen - char *text = va("%s;%s;%s", - window_has_fullscreen() ? ICON_MD_FULLSCREEN_EXIT : ICON_MD_FULLSCREEN, - ICON_MD_PHOTO_CAMERA, - record_active() ? ICON_MD_VIDEOCAM_OFF : ICON_MD_VIDEOCAM - ); - - int choice = ui_toolbar(text); - if( choice == 1 ) engine_send("key_fullscreen",0); - if( choice == 2 ) engine_send("key_screenshot",0); - if( choice == 3 ) engine_send("key_record",0); - } - EDITOR_UI_COLLAPSE(ICON_MD_KEYBOARD " Keyboard", "Debug.Keyboard") { - ui_keyboard(); - } - EDITOR_UI_COLLAPSE(ICON_MD_MOUSE " Mouse", "Debug.Mouse") { - ui_mouse(); - } - EDITOR_UI_COLLAPSE(ICON_MD_GAMEPAD " Gamepads", "Debug.Gamepads") { - for( int q = 0; q < 4; ++q ) { - for( int r = (open = ui_collapse(va("Gamepad #%d",q+1), va("Debug.Gamepads%d",q))), dummy = (clicked_or_toggled = ui_collapse_clicked()); r; ui_collapse_end(), r = 0) { - ui_gamepad(q); - } - } - } - - EDITOR_UI_COLLAPSE(ICON_MD_TEXT_FIELDS " Fonts", "Debug.Fonts") { - ui_font(); - } - - - EDITOR_UI_COLLAPSE(ICON_MD_CONTENT_PASTE " Scripts", "Debug.Scripts") { - // @todo - } - EDITOR_UI_COLLAPSE(ICON_MD_STAR_HALF " Shaders", "Debug.Shaders") { - ui_shaders(); - } - EDITOR_UI_COLLAPSE(ICON_MD_MOVIE " FXs", "Debug.FXs") { - ui_fxs(); - } - - - EDITOR_UI_COLLAPSE(ICON_MD_SAVINGS " Budgets", "Debug.Budgets") { - // @todo. // mem,fps,gfx,net,hdd,... also logging - } - EDITOR_UI_COLLAPSE(ICON_MD_WIFI/*ICON_MD_SIGNAL_CELLULAR_ALT*/ " Network 0/0 KiB", "Debug.Network") { - // @todo - // SIGNAL_CELLULAR_1_BAR SIGNAL_CELLULAR_2_BAR - } - EDITOR_UI_COLLAPSE(va(ICON_MD_SPEED " Profiler %5.2f/%dfps", window_fps(), (int)window_fps_target()), "Debug.Profiler") { - ui_profiler(); - } - EDITOR_UI_COLLAPSE(va(ICON_MD_STORAGE " Storage %s", xstats()), "Debug.Storage") { - // @todo - } - - - - // logic: either plug icon (power saving off) or one of the following ones (power saving on): - // if 0% batt (no batt): battery alert - // if discharging: battery levels [alert,0..6,full] - // if charging: battery charging - int battery_read = app_battery(); - int battery_level = abs(battery_read); - int battery_discharging = battery_read < 0 && battery_level < 100; - const char *power_icon_label = ICON_MD_POWER " Power"; - if( battery_level ) { - const char *battery_levels[9] = { // @todo: remap [7%..100%] -> [0..1] ? - ICON_MD_BATTERY_ALERT,ICON_MD_BATTERY_0_BAR,ICON_MD_BATTERY_1_BAR, - ICON_MD_BATTERY_2_BAR,ICON_MD_BATTERY_3_BAR,ICON_MD_BATTERY_4_BAR, - ICON_MD_BATTERY_5_BAR,ICON_MD_BATTERY_6_BAR,ICON_MD_BATTERY_FULL, - }; - power_icon_label = (const char*)va("%s Power %d%%", - battery_discharging ? battery_levels[(int)((9-1)*clampf(battery_level/100.f,0,1))] : ICON_MD_BATTERY_CHARGING_FULL, - battery_level); - } - - EDITOR_UI_COLLAPSE(power_icon_label, "Debug.Power") { - int choice = ui_toolbar( ICON_MD_POWER ";" ICON_MD_BOLT ); - if( choice == 1 ) engine_send("key_battery","0"); - if( choice == 2 ) engine_send("key_battery","1"); - } - - EDITOR_UI_COLLAPSE(ICON_MD_WATER " Reflection", "Debug.Reflect") { - ui_reflect("*"); - } - - EDITOR_UI_COLLAPSE(ICON_MD_EXTENSION " Plugins", "Debug.Plugins") { - // @todo. include VCS - EDITOR_UI_COLLAPSE(ICON_MD_BUILD " Cook", "Debug.Cook") { - // @todo - } - } - - return 0; -} +// editing: +// nope > functions: add/rem property + +#define ICON_PLAY ICON_MD_PLAY_ARROW +#define ICON_PAUSE ICON_MD_PAUSE +#define ICON_STOP ICON_MD_STOP +#define ICON_CANCEL ICON_MD_CLOSE + +#define ICON_WARNING ICON_MD_WARNING +#define ICON_BROWSER ICON_MD_FOLDER_SPECIAL +#define ICON_OUTLINER ICON_MD_VIEW_IN_AR +#define ICON_BUILD ICON_MD_BUILD +#define ICON_SCREENSHOT ICON_MD_PHOTO_CAMERA +#define ICON_CAMERA_ON ICON_MD_VIDEOCAM +#define ICON_CAMERA_OFF ICON_MD_VIDEOCAM_OFF +#define ICON_GAMEPAD_ON ICON_MD_VIDEOGAME_ASSET +#define ICON_GAMEPAD_OFF ICON_MD_VIDEOGAME_ASSET_OFF +#define ICON_AUDIO_ON ICON_MD_VOLUME_UP +#define ICON_AUDIO_OFF ICON_MD_VOLUME_OFF +#define ICON_WINDOWED ICON_MD_FULLSCREEN_EXIT +#define ICON_FULLSCREEN ICON_MD_FULLSCREEN +#define ICON_LIGHTS_ON ICON_MD_LIGHTBULB +#define ICON_LIGHTS_OFF ICON_MD_LIGHTBULB_OUTLINE +#define ICON_RENDER_BASIC ICON_MD_IMAGE_SEARCH +#define ICON_RENDER_FULL ICON_MD_INSERT_PHOTO + +#define ICON_SIGNAL ICON_MD_SIGNAL_CELLULAR_ALT +#define ICON_DISK ICON_MD_STORAGE +#define ICON_RATE ICON_MD_SPEED + +#define ICON_CLOCK ICON_MD_TODAY +#define ICON_CHRONO ICON_MD_TIMELAPSE + +#define ICON_SETTINGS ICON_MD_SETTINGS +#define ICON_LANGUAGE ICON_MD_G_TRANSLATE +#define ICON_PERSONA ICON_MD_FACE +#define ICON_SOCIAL ICON_MD_MESSAGE +#define ICON_GAME ICON_MD_ROCKET_LAUNCH +#define ICON_KEYBOARD ICON_MD_KEYBOARD +#define ICON_MOUSE ICON_MD_MOUSE +#define ICON_GAMEPAD ICON_MD_GAMEPAD +#define ICON_MONITOR ICON_MD_MONITOR +#define ICON_WIFI ICON_MD_WIFI +#define ICON_BUDGET ICON_MD_SAVINGS +#define ICON_NEW_FOLDER ICON_MD_CREATE_NEW_FOLDER +#define ICON_PLUGIN ICON_MD_EXTENSION +#define ICON_RESTART ICON_MD_REPLAY +#define ICON_QUIT ICON_MD_CLOSE + +#define ICON_POWER ICON_MD_BOLT // ICON_MD_POWER +#define ICON_BATTERY_CHARGING ICON_MD_BATTERY_CHARGING_FULL +#define ICON_BATTERY_LEVELS \ + ICON_MD_BATTERY_ALERT, \ + ICON_MD_BATTERY_0_BAR,ICON_MD_BATTERY_1_BAR, \ + ICON_MD_BATTERY_2_BAR,ICON_MD_BATTERY_3_BAR, \ + ICON_MD_BATTERY_4_BAR,ICON_MD_BATTERY_5_BAR, \ + ICON_MD_BATTERY_6_BAR,ICON_MD_BATTERY_FULL + +char *editor_path(const char *path) { + return va("%s/%s", EDITOR, path); +} + +vec3 editor_pick(float mouse_x, float mouse_y) { +#if 0 + // unproject 2d coord as 3d coord + camera_t *camera = camera_get_active(); + vec3 out, xyd = vec3(mouse_x,window_height()-mouse_y,1); // usually x:mouse_x,y:window_height()-mouse_y,d:0=znear/1=zfar + mat44 mvp, model; identity44(model); multiply44x3(mvp, camera->proj, camera->view, model); + bool ok = unproject44(&out, xyd, vec4(0,0,window_width(),window_height()), mvp); + return out; +#else + // unproject 2d coord as 3d coord + vec2 dpi = ifdef(osx, window_dpi(), vec2(1,1)); + camera_t *camera = camera_get_active(); + float x = (2.0f * mouse_x) / (dpi.x * window_width()) - 1.0f; + float y = 1.0f - (2.0f * mouse_y) / (dpi.y * window_height()); + float z = 1.0f; + vec3 ray_nds = vec3(x, y, z); + vec4 ray_clip = vec4(ray_nds.x, ray_nds.y, -1.0, 1.0); + mat44 inv_proj; invert44(inv_proj, camera->proj); + mat44 inv_view; invert44(inv_view, camera->view); + vec4 p = transform444(inv_proj, ray_clip); + vec4 eye = vec4(p.x, p.y, -1.0, 0.0); + vec4 wld = norm4(transform444(inv_view, eye)); + return vec3(wld.x, wld.y, wld.z); +#endif +} + + +typedef union engine_var { + int i; + float f; + char *s; +} engine_var; +static map(char*,engine_var) engine_vars; +float *engine_getf(const char *key) { + if(!engine_vars) map_init_str(engine_vars); + engine_var *found = map_find_or_add(engine_vars, (char*)key, ((engine_var){0}) ); + return &found->f; +} +int *engine_geti(const char *key) { + if(!engine_vars) map_init_str(engine_vars); + engine_var *found = map_find_or_add(engine_vars, (char*)key, ((engine_var){0}) ); + return &found->i; +} +char **engine_gets(const char *key) { + if(!engine_vars) map_init_str(engine_vars); + engine_var *found = map_find_or_add(engine_vars, (char*)key, ((engine_var){0}) ); + if(!found->s) found->s = stringf("%s",""); + return &found->s; +} + +int engine_send(const char *cmd, const char *optional_value) { + unsigned *gamepads = engine_geti("gamepads"); // 0 off, mask gamepad1(1), gamepad2(2), gamepad3(4), gamepad4(8)... + unsigned *renders = engine_geti("renders"); // 0 off, mask: 1=lit, 2=ddraw, 3=whiteboxes + float *speed = engine_getf("speed"); // <0 num of frames to advance, 0 paused, [0..1] slomo, 1 play regular speed, >1 fast-forward (x2/x4/x8) + unsigned *powersave = engine_geti("powersave"); + + char *name; + /**/ if( !strcmp(cmd, "key_quit" )) record_stop(), exit(0); + else if( !strcmp(cmd, "key_stop" )) window_pause(1); + else if( !strcmp(cmd, "key_mute" )) audio_volume_master( 1 ^ !!audio_volume_master(-1) ); + else if( !strcmp(cmd, "key_pause" )) window_pause( window_has_pause() ^ 1 ); + else if( !strcmp(cmd, "key_reload" )) window_reload(); + else if( !strcmp(cmd, "key_battery" )) *powersave = optional_value ? !!atoi(optional_value) : *powersave ^ 1; + else if( !strcmp(cmd, "key_browser" )) ui_show("File Browser", ui_visible("File Browser") ^ true); + else if( !strcmp(cmd, "key_outliner" )) ui_show("Outliner", ui_visible("Outliner") ^ true); + else if( !strcmp(cmd, "key_record" )) if(record_active()) record_stop(), ui_notify(va("Video recorded"), date_string()); else + app_beep(), name = file_counter(va("%s.mp4",app_name())), window_record(name); + else if( !strcmp(cmd, "key_screenshot" )) name = file_counter(va("%s.png",app_name())), window_screenshot(name), ui_notify(va("Screenshot: %s", name), date_string()); + else if( !strcmp(cmd, "key_profiler" )) ui_show("Profiler", profiler_enable(ui_visible("Profiler") ^ true)); + else if( !strcmp(cmd, "key_fullscreen" )) record_stop(), window_fullscreen( window_has_fullscreen() ^ 1 ); // framebuffer resizing corrupts video stream, so stop any recording beforehand + else if( !strcmp(cmd, "key_gamepad" )) *gamepads = (*gamepads & ~1u) | ((*gamepads & 1) ^ 1); + else if( !strcmp(cmd, "key_lit" )) *renders = (*renders & ~1u) | ((*renders & 1) ^ 1); + else if( !strcmp(cmd, "key_ddraw" )) *renders = (*renders & ~2u) | ((*renders & 2) ^ 2); + else alert(va("editor could not handle `%s` command.", cmd)); + + return 0; +} + +int engine_tick() { + enum { engine_hz_mid = 30 }; + enum { engine_hz_low = 10 }; + static double old_hz = 0.0; + if( *engine_geti("powersave") ) { + // adaptive framerate + int app_on_background = !window_has_focus(); + int hz = app_on_background ? engine_hz_low : engine_hz_mid; + if (!old_hz) old_hz = window_fps_target(); + window_fps_lock( hz ); + } else if( old_hz && old_hz != window_fps_target() ) { + window_fps_lock( old_hz ); + old_hz = 0.0; + } + + return 0; +} + +int ui_engine() { + static int time_factor = 0; + static int playing = 0; + static int paused = 0; + int advance_frame = 0; + +#if 0 + static int do_filter = 0; + static int do_profile = 0; + static int do_extra = 0; + + char *EDITOR_TOOLBAR_ICONS = va("%s;%s;%s;%s;%s;%s;%s;%s", + do_filter ? ICON_MD_CLOSE : ICON_MD_SEARCH, + ICON_MD_PLAY_ARROW, + paused ? ICON_MD_SKIP_NEXT : ICON_MD_PAUSE, + ICON_MD_FAST_FORWARD, + ICON_MD_STOP, + ICON_MD_REPLAY, + ICON_MD_FACE, + ICON_MD_MENU + ); + + if( input_down(KEY_F) ) if( input(KEY_LCTRL) || input(KEY_RCTRL) ) do_filter ^= 1; + int choice = ui_toolbar(EDITOR_TOOLBAR_ICONS); + if( choice == 1 ) do_filter ^= 1, do_profile = 0, do_extra = 0; + if( choice == 2 ) playing = 1, paused = 0; + if( choice == 3 ) advance_frame = !!paused, paused = 1; + if( choice == 4 ) paused = 0, time_factor = (++time_factor) % 4; + if( choice == 5 ) playing = 0, paused = 0, advance_frame = 0, time_factor = 0; + if( choice == 6 ) window_reload(); + if( choice == 7 ) do_filter = 0, do_profile ^= 1, do_extra = 0; + if( choice == 8 ) do_filter = 0, do_profile = 0, do_extra ^= 1; + + if( do_filter ) { + char *bak = ui_filter; ui_filter = 0; + ui_string(ICON_MD_CLOSE " Filter " ICON_MD_SEARCH, &bak); + ui_filter = bak; + if( ui_label_icon_clicked_L.x > 0 && ui_label_icon_clicked_L.x <= 24 ) { // if clicked on CANCEL icon (1st icon) + do_filter = 0; + } + } else { + if( ui_filter ) ui_filter[0] = '\0'; + } + char *filter_mask = ui_filter && ui_filter[0] ? va("*%s*", ui_filter) : "*"; + + static char *username = 0; + static char *userpass = 0; + if( do_profile ) { + ui_string(ICON_MD_FACE " Username", &username); + ui_string(ICON_MD_FACE " Password", &userpass); + } + + if( do_extra ) { + int choice2 = ui_label2_toolbar(NULL, + ICON_MD_VIEW_IN_AR + ICON_MD_MESSAGE + ICON_MD_TIPS_AND_UPDATES ICON_MD_LIGHTBULB ICON_MD_LIGHTBULB_OUTLINE + ICON_MD_IMAGE_SEARCH ICON_MD_INSERT_PHOTO + ICON_MD_VIDEOGAME_ASSET ICON_MD_VIDEOGAME_ASSET_OFF + + ICON_MD_VOLUME_UP ICON_MD_VOLUME_OFF // audio_volume_master(-1) > 0 + + ICON_MD_TROUBLESHOOT ICON_MD_SCHEMA ICON_MD_MENU + ); + } +#endif + + int open = 0, clicked_or_toggled = 0; + + + #define EDITOR_UI_COLLAPSE(f,...) \ + for( int macro(p) = (open = ui_collapse(f,__VA_ARGS__)), macro(dummy) = (clicked_or_toggled = ui_collapse_clicked()); macro(p); ui_collapse_end(), macro(p) = 0) + + EDITOR_UI_COLLAPSE(ICON_MD_VIEW_QUILT " Windows", "Debug.Windows") { + int choice = ui_toolbar(ICON_MD_RECYCLING "@Reset layout;" ICON_MD_SAVE_AS "@Save layout"); + if( choice == 1 ) ui_layout_all_reset("*"); + if( choice == 2 ) file_delete(WINDOWS_INI), ui_layout_all_save_disk("*"); + + for each_map_ptr_sorted(ui_windows, char*, k, unsigned, v) { + bool visible = ui_visible(*k); + if( ui_bool( *k, &visible ) ) { + ui_show( *k, ui_visible(*k) ^ true ); + } + } + } + + EDITOR_UI_COLLAPSE(ICON_MD_BUG_REPORT " Bugs 0", "Debug.Bugs") { + // @todo. parse /bugs.ini, includes saved screenshots & videos. + // @todo. screenshot include parseable level, position screen markers (same info as /bugs.ini) + } + + + // Art and bookmarks + EDITOR_UI_COLLAPSE(ICON_MD_FOLDER_SPECIAL " Art", "Debug.Art") { + bool inlined = true; + const char *file = 0; + if( ui_browse(&file, &inlined) ) { + const char *sep = ifdef(win32, "\"", "'"); + app_exec(va("%s %s%s%s", ifdef(win32, "start \"\"", ifdef(osx, "open", "xdg-open")), sep, file, sep)); + } + } + EDITOR_UI_COLLAPSE(ICON_MD_BOOKMARK " Bookmarks", "Debug.Bookmarks") { /* @todo */ } + + + // E,C,S,W + EDITOR_UI_COLLAPSE(ICON_MD_ACCOUNT_TREE " Scene", "Debug.Scene") { + EDITOR_UI_COLLAPSE(ICON_MD_BUBBLE_CHART/*ICON_MD_SCATTER_PLOT*/ " Entities", "Debug.Entities") { /* @todo */ } + EDITOR_UI_COLLAPSE(ICON_MD_TUNE " Components", "Debug.Components") { /* @todo */ } + EDITOR_UI_COLLAPSE(ICON_MD_PRECISION_MANUFACTURING " Systems", "Debug.Systems") { /* @todo */ } + EDITOR_UI_COLLAPSE(ICON_MD_PUBLIC " Levels", "Debug.Levels") { + //node_edit(editor.edit.down,&editor.edit); + } + + //EDITOR_UI_COLLAPSE(ICON_MD_ACCOUNT_TREE " Init", "Debug.HierarchyInit") { /* @todo */ } + //EDITOR_UI_COLLAPSE(ICON_MD_ACCOUNT_TREE " Draw", "Debug.HierarchyDraw") { /* @todo */ } + //EDITOR_UI_COLLAPSE(ICON_MD_ACCOUNT_TREE " Tick", "Debug.HierarchyTick") { /* @todo */ } + //EDITOR_UI_COLLAPSE(ICON_MD_ACCOUNT_TREE " Edit", "Debug.HierarchyEdit") { /* @todo */ } + //EDITOR_UI_COLLAPSE(ICON_MD_ACCOUNT_TREE " Quit", "Debug.HierarchyQuit") { /* @todo */ } + + // node_edit(&editor.init,&editor.init); + // node_edit(&editor.draw,&editor.draw); + // node_edit(&editor.tick,&editor.tick); + // node_edit(&editor.edit,&editor.edit); + // node_edit(&editor.quit,&editor.quit); + } + + EDITOR_UI_COLLAPSE(ICON_MD_ROCKET_LAUNCH " AI", "Debug.AI") { + // @todo + } + EDITOR_UI_COLLAPSE(ICON_MD_VOLUME_UP " Audio", "Debug.Audio") { + ui_audio(); + } + EDITOR_UI_COLLAPSE(ICON_MD_VIDEOCAM " Camera", "Debug.Camera") { + ui_camera( camera_get_active() ); + } + EDITOR_UI_COLLAPSE(ICON_MD_MONITOR " Display", "Debug.Display") { + // @todo: fps lock, fps target, aspect ratio, fullscreen + char *text = va("%s;%s;%s", + window_has_fullscreen() ? ICON_MD_FULLSCREEN_EXIT : ICON_MD_FULLSCREEN, + ICON_MD_PHOTO_CAMERA, + record_active() ? ICON_MD_VIDEOCAM_OFF : ICON_MD_VIDEOCAM + ); + + int choice = ui_toolbar(text); + if( choice == 1 ) engine_send("key_fullscreen",0); + if( choice == 2 ) engine_send("key_screenshot",0); + if( choice == 3 ) engine_send("key_record",0); + } + EDITOR_UI_COLLAPSE(ICON_MD_KEYBOARD " Keyboard", "Debug.Keyboard") { + ui_keyboard(); + } + EDITOR_UI_COLLAPSE(ICON_MD_MOUSE " Mouse", "Debug.Mouse") { + ui_mouse(); + } + EDITOR_UI_COLLAPSE(ICON_MD_GAMEPAD " Gamepads", "Debug.Gamepads") { + for( int q = 0; q < 4; ++q ) { + for( int r = (open = ui_collapse(va("Gamepad #%d",q+1), va("Debug.Gamepads%d",q))), dummy = (clicked_or_toggled = ui_collapse_clicked()); r; ui_collapse_end(), r = 0) { + ui_gamepad(q); + } + } + } + + EDITOR_UI_COLLAPSE(ICON_MD_TEXT_FIELDS " Fonts", "Debug.Fonts") { + ui_font(); + } + + + EDITOR_UI_COLLAPSE(ICON_MD_CONTENT_PASTE " Scripts", "Debug.Scripts") { + // @todo + } + EDITOR_UI_COLLAPSE(ICON_MD_STAR_HALF " Shaders", "Debug.Shaders") { + ui_shaders(); + } + EDITOR_UI_COLLAPSE(ICON_MD_MOVIE " FXs", "Debug.FXs") { + ui_fxs(); + } + + + EDITOR_UI_COLLAPSE(ICON_MD_SAVINGS " Budgets", "Debug.Budgets") { + // @todo. // mem,fps,gfx,net,hdd,... also logging + } + EDITOR_UI_COLLAPSE(ICON_MD_WIFI/*ICON_MD_SIGNAL_CELLULAR_ALT*/ " Network 0/0 KiB", "Debug.Network") { + // @todo + // SIGNAL_CELLULAR_1_BAR SIGNAL_CELLULAR_2_BAR + } + EDITOR_UI_COLLAPSE(va(ICON_MD_SPEED " Profiler %5.2f/%dfps", window_fps(), (int)window_fps_target()), "Debug.Profiler") { + ui_profiler(); + } + EDITOR_UI_COLLAPSE(va(ICON_MD_STORAGE " Storage %s", xstats()), "Debug.Storage") { + // @todo + } + + + + // logic: either plug icon (power saving off) or one of the following ones (power saving on): + // if 0% batt (no batt): battery alert + // if discharging: battery levels [alert,0..6,full] + // if charging: battery charging + int battery_read = app_battery(); + int battery_level = abs(battery_read); + int battery_discharging = battery_read < 0 && battery_level < 100; + const char *power_icon_label = ICON_MD_POWER " Power"; + if( battery_level ) { + const char *battery_levels[9] = { // @todo: remap [7%..100%] -> [0..1] ? + ICON_MD_BATTERY_ALERT,ICON_MD_BATTERY_0_BAR,ICON_MD_BATTERY_1_BAR, + ICON_MD_BATTERY_2_BAR,ICON_MD_BATTERY_3_BAR,ICON_MD_BATTERY_4_BAR, + ICON_MD_BATTERY_5_BAR,ICON_MD_BATTERY_6_BAR,ICON_MD_BATTERY_FULL, + }; + power_icon_label = (const char*)va("%s Power %d%%", + battery_discharging ? battery_levels[(int)((9-1)*clampf(battery_level/100.f,0,1))] : ICON_MD_BATTERY_CHARGING_FULL, + battery_level); + } + + EDITOR_UI_COLLAPSE(power_icon_label, "Debug.Power") { + int choice = ui_toolbar( ICON_MD_POWER ";" ICON_MD_BOLT ); + if( choice == 1 ) engine_send("key_battery","0"); + if( choice == 2 ) engine_send("key_battery","1"); + } + + EDITOR_UI_COLLAPSE(ICON_MD_WATER " Reflection", "Debug.Reflect") { + ui_reflect("*"); + } + + EDITOR_UI_COLLAPSE(ICON_MD_EXTENSION " Plugins", "Debug.Plugins") { + // @todo. include VCS + EDITOR_UI_COLLAPSE(ICON_MD_BUILD " Cook", "Debug.Cook") { + // @todo + } + } + + return 0; +} #line 0 #line 1 "v4k_main.c" -// ---------------------------------------------------------------------------- - -static void v4k_pre_init() { - window_icon(va("%s%s.png", app_path(), app_name())); - - glfwPollEvents(); - - int i; - #pragma omp parallel for - for( i = 0; i <= 3; ++i) { - /**/ if( i == 0 ) ddraw_init();// init this on thread#0 since it will be compiling shaders, and shaders need to be compiled from the very same thread than glfwMakeContextCurrent() was set up - else if( i == 1 ) sprite_init(); - else if( i == 2 ) profiler_init(); - else if( i == 3 ) storage_mount("save/"), storage_read(), touch_init(); // for ems - } - - // window_swap(); -} -static void v4k_post_init(float refresh_rate) { - // cook cleanup - cook_stop(); - - vfs_reload(); - - // init subsystems that depend on cooked assets now - - int i; - #pragma omp parallel for - for( i = 0; i <= 3; ++i ) { - if(i == 0) scene_init(); // init these on thread #0, since both will be compiling shaders, and shaders need to be compiled from the very same thread than glfwMakeContextCurrent() was set up - if(i == 0) ui_init(); // init these on thread #0, since both will be compiling shaders, and shaders need to be compiled from the very same thread than glfwMakeContextCurrent() was set up - if(i == 0) window_icon(va("%s.png", app_name())); // init on thread #0, because of glfw - if(i == 0) input_init(); // init on thread #0, because of glfw - if(i == 1) audio_init(0); - if(i == 2) script_init(), kit_init(), midi_init(); - if(i == 3) network_init(); - } - - // display window - glfwShowWindow(window); - glfwGetFramebufferSize(window, &w, &h); //glfwGetWindowSize(window, &w, &h); - - randset(time_ns() * !tests_captureframes()); - boot_time = -time_ss(); // measure boot time, this is continued in window_stats() - - // clean any errno setup by cooking stage - errno = 0; - - hz = refresh_rate; - // t = glfwGetTime(); - - // preload brdf LUT early - (void)brdf_lut(); - - uint64_t fps = optioni("--fps", 0); - if( fps ) { - window_fps_lock(fps); - } -} - -// ---------------------------------------------------------------------------- - -static -void v4k_quit(void) { - storage_flush(); - midi_quit(); -} - -void v4k_init() { - do_once { - // install signal handlers - ifdef(debug, trap_install()); - - // init panic handler - panic_oom_reserve = SYS_MEM_REALLOC(panic_oom_reserve, 1<<20); // 1MiB - - // init glfw - glfw_init(); - - // enable ansi console - tty_init(); - - // chdir to root (if invoked as tcc -g -run) - // chdir(app_path()); - - // skip tcc argvs (if invoked as tcc file.c v4k.c -g -run) (win) - if( __argc > 1 ) if( strstr(__argv[0], "/tcc") || strstr(__argv[0], "\\tcc") ) { - __argc = 0; - } - - // create or update cook.zip file - if( /* !COOK_ON_DEMAND && */ have_tools() && cook_jobs() ) { - cook_start(COOK_INI, "**", 0|COOK_ASYNC|COOK_CANCELABLE ); - } - - atexit(v4k_quit); - } -} +// ---------------------------------------------------------------------------- + +static void v4k_pre_init() { + window_icon(va("%s%s.png", app_path(), app_name())); + + glfwPollEvents(); + + int i; + #pragma omp parallel for + for( i = 0; i <= 3; ++i) { + /**/ if( i == 0 ) ddraw_init();// init this on thread#0 since it will be compiling shaders, and shaders need to be compiled from the very same thread than glfwMakeContextCurrent() was set up + else if( i == 1 ) sprite_init(); + else if( i == 2 ) profiler_init(); + else if( i == 3 ) storage_mount("save/"), storage_read(), touch_init(); // for ems + } + + // window_swap(); +} +static void v4k_post_init(float refresh_rate) { + // cook cleanup + cook_stop(); + + vfs_reload(); + + // init subsystems that depend on cooked assets now + + int i; + #pragma omp parallel for + for( i = 0; i <= 3; ++i ) { + if(i == 0) scene_init(); // init these on thread #0, since both will be compiling shaders, and shaders need to be compiled from the very same thread than glfwMakeContextCurrent() was set up + if(i == 0) ui_init(); // init these on thread #0, since both will be compiling shaders, and shaders need to be compiled from the very same thread than glfwMakeContextCurrent() was set up + if(i == 0) window_icon(va("%s.png", app_name())); // init on thread #0, because of glfw + if(i == 0) input_init(); // init on thread #0, because of glfw + if(i == 1) audio_init(0); + if(i == 2) script_init(), kit_init(), midi_init(); + if(i == 3) network_init(); + } + + // display window + glfwShowWindow(window); + glfwGetFramebufferSize(window, &w, &h); //glfwGetWindowSize(window, &w, &h); + + randset(time_ns() * !tests_captureframes()); + boot_time = -time_ss(); // measure boot time, this is continued in window_stats() + + // clean any errno setup by cooking stage + errno = 0; + + hz = refresh_rate; + // t = glfwGetTime(); + + // preload brdf LUT early + (void)brdf_lut(); + + uint64_t fps = optioni("--fps", 0); + if( fps ) { + window_fps_lock(fps); + } +} + +// ---------------------------------------------------------------------------- + +static +void v4k_quit(void) { + storage_flush(); + midi_quit(); +} + +void v4k_init() { + do_once { + // install signal handlers + ifdef(debug, trap_install()); + + // init panic handler + panic_oom_reserve = SYS_MEM_REALLOC(panic_oom_reserve, 1<<20); // 1MiB + + // init glfw + glfw_init(); + + // enable ansi console + tty_init(); + + // chdir to root (if invoked as tcc -g -run) + // chdir(app_path()); + + // skip tcc argvs (if invoked as tcc file.c v4k.c -g -run) (win) + if( __argc > 1 ) if( strstr(__argv[0], "/tcc") || strstr(__argv[0], "\\tcc") ) { + __argc = 0; + } + + // create or update cook.zip file + if( /* !COOK_ON_DEMAND && */ have_tools() && cook_jobs() ) { + cook_start(COOK_INI, "**", 0|COOK_ASYNC|COOK_CANCELABLE ); + } + + atexit(v4k_quit); + } +} #line 0 // editor is last in place, so it can use all internals from above headers #line 1 "v4k_editor.c" -// ## Editor long-term plan -// - editor = tree of nodes. levels and objects are nodes, and their widgets are also nodes -// - you can perform actions on nodes, with or without descendants, top-bottom or bottom-top -// - these operations include load/save, undo/redo, reset, play/render, ddraw, etc -// - nodes are saved to disk as a filesystem layout: parents are folders, and leafs are files -// - network replication can be done by external tools by comparing the filesystems and by sending the resulting diff zipped -// -// ## Editor roadmap -// - Gizmos✱, scene tree, property editor✱, load/save✱, undo/redo✱, copy/paste, on/off (vis,tick,ddraw,log), vcs. -// - Scenenode pass: node singleton display, node console, node labels, node outlines✱. -// - Render pass: billboards✱, materials, un/lit, cast shadows, wireframe, skybox✱/mie✱, fog/atmosphere -// - Level pass: volumes, triggers, platforms, level streaming, collide✱, physics -// - Edit pass: Procedural content, brushes, noise and CSG. -// - GUI pass: timeline and data tracks, node graphs. - -// ## Alt plan -// editor is a database + window/tile manager + ui toolkit; all network driven. -// to be precise, editor is a dumb app and ... -// - does not know a thing about what it stores. -// - does not know how to render the game graphics. -// - does not know how to run the game logic. -// -// the editor will create a canvas for your game to render. -// your game will be responsible to tick the logic and render the window inside the editor. -// -// that being said, editor... -// - can store datas hierarchically. -// - can perform diffs and merges, and version the datas into repositories. -// - can be instructed to render UI on top of game and window views. -// - can download new .natvis and plugins quickly. -// - can dump whole project in a filesystem form (zip). - -// - editor reflects database contents up-to-date. -// - database can be queried and modified via OSC(UDP) commands. - -// editor database uses one table, and stores two kind of payload types: -// - classes: defines typename and dna. class names are prefixed by '@' -// - instances: defines typename and datas. instance names are as-is, not prefixed. -// -// every save contains 5Ws: what, who, when, where, how, -// every save can be diffed/merged. - -// ---------------------------------------------------------------------------- - -array(editor_bind_t) editor_binds; - -void editor_addbind(editor_bind_t bind) { - array_push(editor_binds, bind); -} - -// ---------------------------------------------------------------------------- - -typedef void (*editor_no_property)(void *); -array(void*) editor_persist_kv; -array(editor_no_property) editor_no_properties; - -#define EDITOR_PROPERTY(T,property_name,defaults) \ -editor_##property_name##_map_t *editor_##property_name##_map() { \ - static editor_##property_name##_map_t map = 0; do_once map_init_ptr(map); \ - return ↦ \ -} \ -T editor_##property_name(const void *obj) { \ - return *map_find_or_add(*editor_##property_name##_map(), (void*)obj, ((T) defaults)); \ -} \ -void editor_set##property_name(const void *obj, T value) { \ - *map_find_or_add(*editor_##property_name##_map(), (void*)obj, ((T) value)) = ((T) value); \ -} \ -void editor_alt##property_name(const void *obj) { \ - T* found = map_find_or_add(*editor_##property_name##_map(), (void*)obj, ((T) defaults)); \ - *found = (T)(uintptr_t)!(*found); \ -} \ -void editor_no##property_name(void *obj) { \ - T* found = map_find_or_add(*editor_##property_name##_map(), (void*)obj, ((T) defaults)); \ - map_erase(*editor_##property_name##_map(), (void*)obj); \ -} \ -AUTORUN { array_push(editor_persist_kv, #T); array_push(editor_persist_kv, editor_##property_name##_map()); array_push(editor_no_properties, editor_no##property_name); } - -EDITOR_PROPERTY(int, open, 0); // whether object is tree opened in tree editor -EDITOR_PROPERTY(int, selected, 0); // whether object is displaying a contextual popup or not -EDITOR_PROPERTY(int, changed, 0); // whether object is displaying a contextual popup or not -EDITOR_PROPERTY(int, popup, 0); // whether object is displaying a contextual popup or not -EDITOR_PROPERTY(int, bookmarked, 0); -EDITOR_PROPERTY(int, visible, 0); -EDITOR_PROPERTY(int, script, 0); -EDITOR_PROPERTY(int, event, 0); -EDITOR_PROPERTY(char*, iconinstance, 0); -EDITOR_PROPERTY(char*, iconclass, 0); -EDITOR_PROPERTY(int, treeoffsety, 0); -// new prop: breakpoint: request to break on any given node -// new prop: persist: objects with this property will be saved on disk - -void editor_destroy_properties(void *o) { - for each_array(editor_no_properties,editor_no_property,fn) { - fn(o); - } -} - -void editor_load_on_boot(void) { -} -void editor_save_on_quit(void) { -} -AUTORUN { - editor_load_on_boot(); - (atexit)(editor_save_on_quit); -} - -// ---------------------------------------------------------------------------- - -typedef int(*subeditor)(int mode); - -struct editor_t { - // time - unsigned frame; - double t, dt, slomo; - // controls - int transparent; - int attached; - int active; // focus? does_grabinput instead? - int key; - vec2 mouse; // 2d coord for ray/picking - bool gamepad; // mask instead? |1|2|4|8 - int hz_high, hz_medium, hz_low; - int filter; - bool battery; // battery mode: low fps - bool unlit; - bool ddraw; - // event root nodes - obj* root; - obj* on_init; - obj* on_tick; - obj* on_draw; - obj* on_edit; - obj* on_quit; - // all of them (hierarchical) - array(obj*) objs; // @todo:set() world? - // all of them (flat) - set(obj*) world; - // - array(char*) cmds; - // subeditors - array(subeditor) subeditors; -} editor = { - .active = 1, - .gamepad = 1, - .hz_high = 60, .hz_medium = 18, .hz_low = 5, -}; - -int editor_begin(const char *title, int mode) { - if( mode == 0 ) return ui_panel(title, PANEL_OPEN); - if( mode == 1 ) return ui_window(title, 0); - - int ww = window_width(), w = ww * 0.66; - int hh = window_height(), h = hh * 0.66; - - struct nk_rect position = { (ww-w)/2,(hh-h)/2, w,h }; - nk_flags win_flags = NK_WINDOW_TITLE | NK_WINDOW_BORDER | - NK_WINDOW_MOVABLE | NK_WINDOW_SCALABLE | - NK_WINDOW_CLOSABLE | NK_WINDOW_MINIMIZABLE | - // NK_WINDOW_SCALE_LEFT|NK_WINDOW_SCALE_TOP| //< @fixme: move this logic into nuklear - // NK_WINDOW_MAXIMIZABLE | NK_WINDOW_PINNABLE | - 0; // NK_WINDOW_SCROLL_AUTO_HIDE; - - if( mode == 3 ) { - mode = 2, position.x = input(MOUSE_X), position.w = w/3, win_flags = - NK_WINDOW_TITLE|NK_WINDOW_CLOSABLE| - NK_WINDOW_SCALABLE|NK_WINDOW_MOVABLE| //< nuklear requires these two to `remember` popup rects - 0; - } - - if( mode == 2 || mode == 3 ) - if (nk_begin(ui_ctx, title, position, win_flags)) - return 1; - else - return nk_end(ui_ctx), 0; - - return 0; -} -int editor_end(int mode) { - if( mode == 0 ) return ui_panel_end(); - if( mode == 1 ) return ui_window_end(); - if( mode == 2 ) nk_end(ui_ctx); - if( mode == 3 ) nk_end(ui_ctx); - return 0; -} - -#if 0 // deprecate -bool editor_active() { - return ui_hover() || ui_active() || gizmo_active() ? editor.active : 0; -} -#endif - -int editor_filter() { - if( editor.filter ) { - if (nk_begin(ui_ctx, "Filter", nk_rect(window_width()-window_width()*0.33,32, window_width()*0.33, 40), - NK_WINDOW_NO_SCROLLBAR)) { - - char *bak = ui_filter; ui_filter = 0; - ui_string(ICON_MD_CLOSE " Filter " ICON_MD_SEARCH, &bak); - ui_filter = bak; - - if( input(KEY_ESC) || ( ui_label_icon_clicked_L.x > 0 && ui_label_icon_clicked_L.x <= 24 )) { - if( ui_filter ) ui_filter[0] = '\0'; - editor.filter = 0; - } - } - nk_end(ui_ctx); - } - - return editor.filter; -} - -static -int editor_select_(void *o, const char *mask) { - int matches = 0; - int off = mask[0] == '!', inv = mask[0] == '~'; - int match = strmatchi(obj_type(o), mask+off+inv) || strmatchi(obj_name(o), mask+off+inv); - if( match ) { - editor_setselected(o, inv ? editor_selected(o) ^ 1 : !off); - ++matches; - } - for each_objchild(o, obj*, oo) { - matches += editor_select_(oo, mask); - } - return matches; -} -void editor_select(const char *mask) { - for each_array( editor.objs, obj*, o ) - editor_select_(o, mask); -} -void editor_unselect() { // same than editor_select("!**"); - for each_map_ptr(*editor_selected_map(), void*,o, int, k) { - if( *k ) *k = 0; - } -} - -void editor_select_aabb(aabb box) { - int is_inv = input_held(KEY_CTRL); - int is_add = input_held(KEY_SHIFT); - if( !is_inv && !is_add ) editor_unselect(); - - aabb item = {0}; - for each_set_ptr( editor.world, obj*, o ) { - if( obj_hasmethod(*o,aabb) && obj_aabb(*o, &item) ) { - if( aabb_test_aabb(item, box) ) { - if( is_inv ) - editor_altselected(*o); - else - editor_setselected(*o, 1); - } - } - } -} - -static obj* active_ = 0; -static void editor_selectgroup_(obj *o, obj *first, obj *last) { - // printf("%s (looking for %s in [%s..%s])\n", obj_name(o), active_ ? obj_name(active_) : "", obj_name(first), obj_name(last)); - if( !active_ ) if( o == first || o == last ) active_ = o == first ? last : first; - if( active_ ) editor_setselected(o, 1); - if( o == active_ ) active_ = 0; - for each_objchild(o, obj*, oo) { - editor_selectgroup_(oo, first, last); - } -} -void editor_selectgroup(obj *first, obj *last) { - if( last ) { - if( !first ) first = array_count(editor.objs) ? editor.objs[0] : NULL; - if( !first ) editor_setselected(last, 1); - else { - active_ = 0; - for each_array(editor.objs,obj*,o) { - editor_selectgroup_(o, first, last); - } - } - } -} - -static obj *find_any_selected_(obj *o) { - if( editor_selected(o) ) return o; - for each_objchild(o,obj*,oo) { - obj *ooo = find_any_selected_(oo); - if( ooo ) - return ooo; - } - return 0; -} -void* editor_first_selected() { - for each_array(editor.objs,obj*,o) { - obj *oo = find_any_selected_(o); - // if( oo ) printf("1st found: %s\n", obj_name(oo)); - if( oo ) return oo; - } - return 0; -} - -static obj *find_last_selected_(obj *o) { - void *last = 0; - if( editor_selected(o) ) last = o; - for each_objchild(o,obj*,oo) { - obj *ooo = find_last_selected_(oo); - if( ooo ) - last = ooo; - } - return last; -} -void* editor_last_selected() { - void *last = 0; - for each_array(editor.objs,obj*,o) { - obj *oo = find_last_selected_(o); - // if( oo ) printf("last found: %s\n", obj_name(oo)); - if( oo ) last = oo; - } - return last; -} - -// ---------------------------------------------------------------------------------------- - -void editor_addtoworld(obj *o) { - set_find_or_add(editor.world, o); - for each_objchild(o, obj*, oo) { - editor_addtoworld(oo); - } -} - -void editor_watch(const void *o) { - array_push(editor.objs, (obj*)o); - obj_push(o); // save state - - editor_addtoworld((obj*)o); -} -void* editor_spawn(const char *ini) { // deprecate? - obj *o = obj_make(ini); - editor_watch(o); - return o; -} -void editor_spawn1() { - obj *selected = editor_first_selected(); - obj *o = selected ? obj_make(obj_saveini(selected)) : obj_new(obj); - if( selected ) obj_attach(selected, o), editor_setopen(selected, 1); - else - editor_watch(o); - - editor_unselect(); - editor_setselected(o, 1); -} - -typedef set(obj*) set_objp_t; -static -void editor_glob_recurse(set_objp_t*list, obj *o) { - set_find_or_add(*list, o); - for each_objchild(o,obj*,oo) { - editor_glob_recurse(list, oo); - } -} -void editor_destroy_selected() { - set_objp_t list = 0; - set_init_ptr(list); - for each_map_ptr(*editor_selected_map(), obj*,o, int,selected) { - if( *selected ) { editor_glob_recurse(&list, *o); } - } - for each_set(list, obj*, o) { - obj_detach(o); - } - for each_set(list, obj*, o) { - // printf("deleting %p %s\n", o, obj_name(o)); - // remove from watched items - for (int i = 0, end = array_count(editor.objs); i < end; ++i) { - if (editor.objs[i] == o) { - editor.objs[i] = 0; - array_erase_slow(editor.objs, i); - --end; - --i; - } - } - // delete from world - set_erase(editor.world, o); - // delete properties + obj - editor_destroy_properties(o); - obj_free(o); - } - set_free(list); -} -void editor_inspect(obj *o) { - ui_section(va("%s (%s)", obj_type(o), obj_name(o))); - - if( obj_hasmethod(o, menu) ) { - obj_menu(o); - } - - for each_objmember(o,TYPE,NAME,PTR) { - if( !editor_changed(PTR) ) { - obj_push(o); - } - ui_label_icon_highlight = editor_changed(PTR); // @hack: remove ui_label_icon_highlight hack - char *label = va(ICON_MD_UNDO "%s", NAME); - int changed = 0; - /**/ if( !strcmp(TYPE,"float") ) changed = ui_float(label, PTR); - else if( !strcmp(TYPE,"int") ) changed = ui_int(label, PTR); - else if( !strcmp(TYPE,"vec2") ) changed = ui_float2(label, PTR); - else if( !strcmp(TYPE,"vec3") ) changed = ui_float3(label, PTR); - else if( !strcmp(TYPE,"vec4") ) changed = ui_float4(label, PTR); - else if( !strcmp(TYPE,"rgb") ) changed = ui_color3(label, PTR); - else if( !strcmp(TYPE,"rgba") ) changed = ui_color4(label, PTR); - else if( !strcmp(TYPE,"color") ) changed = ui_color4f(label, PTR); - else if( !strcmp(TYPE,"color3f") ) changed = ui_color3f(label, PTR); - else if( !strcmp(TYPE,"color4f") ) changed = ui_color4f(label, PTR); - else if( !strcmp(TYPE,"char*") ) changed = ui_string(label, PTR); - else ui_label2(label, va("(%s)", TYPE)); // INFO instead of (TYPE)? - if( changed ) { - editor_setchanged(PTR, 1); - } - if( ui_label_icon_highlight ) - if( ui_label_icon_clicked_L.x >= 6 && ui_label_icon_clicked_L.x <= 26 ) { // @hack: if clicked on UNDO icon (1st icon) - editor_setchanged(PTR, 0); - } - if( !editor_changed(PTR) ) { - obj_pop(o); - } - } -} - -// ---------------------------------------------------------------------------------------- -// tty - -static thread_mutex_t *console_lock; -static array(char*) editor_jobs; -int editor_send(const char *cmd) { // return job-id - int skip = strspn(cmd, " \t\r\n"); - char *buf = STRDUP(cmd + skip); - strswap(buf, "\r\n", ""); - int jobid; - do_threadlock(console_lock) { - array_push(editor_jobs, buf); - jobid = array_count(editor_jobs) - 1; - } - return jobid; -} -const char* editor_recv(int jobid, double timeout_ss) { - char *answer = 0; - - while(!answer && timeout_ss >= 0 ) { - do_threadlock(console_lock) { - if( editor_jobs[jobid][0] == '\0' ) - answer = editor_jobs[jobid]; - } - timeout_ss -= 0.1; - if( timeout_ss > 0 ) sleep_ms(100); // thread_yield() - } - - return answer + 1; -} - -// plain and ctrl keys -EDITOR_BIND(play, "down(F5)", { window_pause(0); /* if(!editor.slomo) editor.active = 0; */ editor.slomo = 1; } ); -EDITOR_BIND(stop, "down(ESC)", { if(editor.t > 0) { window_pause(1), editor.frame = 0, editor.t = 0, editor.dt = 0, editor.slomo = 0, editor.active = 1; editor_select("**"); editor_destroy_selected(); }} ); -EDITOR_BIND(eject, "down(F1)", { /*window_pause(!editor.active); editor.slomo = !!editor.active;*/ editor.active ^= 1; } ); -EDITOR_BIND(pause, "(held(CTRL) & down(P)) | down(PAUSE)", { window_pause( window_has_pause() ^ 1 ); } ); -EDITOR_BIND(frame, "held(CTRL) & down(LEFT)", { window_pause(1); editor.frame++, editor.t += (editor.dt = 1/60.f); } ); -EDITOR_BIND(slomo, "held(CTRL) & down(RIGHT)", { window_pause(0); editor.slomo = maxf(fmod(editor.slomo * 2, 16), 0.125); } ); -EDITOR_BIND(reload, "held(CTRL) & down(F5)", { window_reload(); } ); -EDITOR_BIND(filter, "held(CTRL) & down(F)", { editor.filter ^= 1; } ); - -// alt keys -EDITOR_BIND(quit, "held(ALT) & down(F4)", { record_stop(), exit(0); } ); -EDITOR_BIND(mute, "held(ALT) & down(M)", { audio_volume_master( 1 ^ !!audio_volume_master(-1) ); } ); -EDITOR_BIND(gamepad, "held(ALT) & down(G)", { editor.gamepad ^= 1; } ); -EDITOR_BIND(transparent, "held(ALT) & down(T)", { editor.transparent ^= 1; } ); -EDITOR_BIND(record, "held(ALT) & down(Z)", { if(record_active()) record_stop(), ui_notify(va("Video recorded"), date_string()); else { char *name = file_counter(va("%s.mp4",app_name())); app_beep(), window_record(name); } } ); -EDITOR_BIND(screenshot, "held(ALT) & down(S)", { char *name = file_counter(va("%s.png",app_name())); window_screenshot(name), ui_notify(va("Screenshot: %s", name), date_string()); } ); -EDITOR_BIND(battery, "held(ALT) & down(B)", { editor.battery ^= 1; } ); -EDITOR_BIND(outliner, "held(ALT) & down(O)", { ui_show("Outliner", ui_visible("Outliner") ^ true); } ); -EDITOR_BIND(profiler, "held(ALT) & down(P)", { ui_show("Profiler", profiler_enable(ui_visible("Profiler") ^ true)); } ); -EDITOR_BIND(fullscreen, "(held(ALT)&down(ENTER))|down(F11)",{ record_stop(), window_fullscreen( window_has_fullscreen() ^ 1 ); } ); // close any recording before framebuffer resizing, which would corrupt video stream -EDITOR_BIND(unlit, "held(ALT) & down(U)", { editor.unlit ^= 1; } ); -EDITOR_BIND(ddraw, "held(ALT) & down(D)", { editor.ddraw ^= 1; } ); - -void editor_pump() { - for each_array(editor_binds,editor_bind_t,b) { - if( input_eval(b.bindings) ) { - editor_send(b.command); - } - } - - do_threadlock(console_lock) { - for each_array_ptr(editor_jobs,char*,cmd) { - if( (*cmd)[0] ) { - int found = 0; - for each_array(editor_binds,editor_bind_t,b) { - if( !strcmpi(b.command, *cmd)) { - b.fn(); - found = 1; - break; - } - } - - if( !found ) { - // alert(va("Editor: could not handle `%s` command.", *cmd)); - (*cmd)[0] = '\0'; strcatf(&(*cmd), "\1%s\n", "Err\n"); (*cmd)[0] = '\0'; - } - - if( (*cmd)[0] ) { - (*cmd)[0] = '\0'; strcatf(&(*cmd), "\1%s\n", "Ok\n"); (*cmd)[0] = '\0'; - } - } - } - } -} - -// ---------------------------------------------------------------------------------------- - -void editor_setmouse(int x, int y) { - glfwSetCursorPos( window_handle(), x, y ); -} - -vec2 editor_glyph(int x, int y, const char *style, unsigned codepoint) { - do_once { - // style: atlas size, unicode ranges and 3 font faces max - font_face(FONT_FACE10, "B612-Regular.ttf", 12.f, 0); - font_face(FONT_FACE9, "MaterialIconsSharp-Regular.otf", 24.f, FONT_EM|FONT_2048); - font_face(FONT_FACE8, "materialdesignicons-webfont.ttf", 24.f, FONT_EM|FONT_2048); // {0xF68C /*ICON_MDI_MIN*/, 0xF1CC7/*ICON_MDI_MAX*/, 0}}, - // style: 5 colors max - font_color(FONT_COLOR1, WHITE); - font_color(FONT_COLOR2, RGBX(0xE8F1FF,128)); // GRAY); - font_color(FONT_COLOR3, YELLOW); - font_color(FONT_COLOR4, ORANGE); - font_color(FONT_COLOR5, CYAN); - } - - font_goto(x,y); - vec2 pos = {x,y}; - const char *sym = codepoint_to_utf8(codepoint); - return add2(pos, font_print(va("%s%s%s", style ? style : "", codepoint >= ICON_MDI_MIN ? FONT_FACE8 : codepoint >= ICON_MD_MIN ? FONT_FACE9 : FONT_FACE10, sym))); -} - -vec2 editor_glyphs(int x, int y, const char *style, const char *utf8) { - vec2 pos = {x,y}; - array(unsigned) codepoints = string32(utf8); - for( int i = 0, end = array_count(codepoints); i < end; ++i) - pos = add2(pos, editor_glyph(pos.x,pos.y,style,codepoints[i])); - return pos; -} - -void editor_frame( void (*game)(unsigned, float, double) ) { - do_once { - set_init_ptr(editor.world); - //set_init_ptr(editor.selection); - profiler_enable( false ); - - window_pause( true ); - window_cursor_shape(CURSOR_SW_AUTO); - editor.hz_high = window_fps_target(); - - fx_load("**/editorOutline.fs"); - fx_enable(0, 1); - - obj_setname(editor.root = obj_new(obj), "Signals"); - obj_setname(editor.on_init = obj_new(obj), "onInit"); - obj_setname(editor.on_tick = obj_new(obj), "onTick"); - obj_setname(editor.on_draw = obj_new(obj), "onDraw"); - obj_setname(editor.on_edit = obj_new(obj), "onEdit"); - obj_setname(editor.on_quit = obj_new(obj), "onQuit"); - - obj_attach(editor.root, editor.on_init); - obj_attach(editor.root, editor.on_tick); - obj_attach(editor.root, editor.on_draw); - obj_attach(editor.root, editor.on_edit); - obj_attach(editor.root, editor.on_quit); - - editor_seticoninstance(editor.root, ICON_MDI_SIGNAL_VARIANT); - editor_seticoninstance(editor.on_init, ICON_MDI_SIGNAL_VARIANT); - editor_seticoninstance(editor.on_tick, ICON_MDI_SIGNAL_VARIANT); - editor_seticoninstance(editor.on_draw, ICON_MDI_SIGNAL_VARIANT); - editor_seticoninstance(editor.on_edit, ICON_MDI_SIGNAL_VARIANT); - editor_seticoninstance(editor.on_quit, ICON_MDI_SIGNAL_VARIANT); - - editor_seticonclass(obj_type(editor.root), ICON_MDI_CUBE_OUTLINE); - } - - // game tick - game(editor.frame, editor.dt, editor.t); - - // timing - editor.dt = clampf(window_delta(), 0, 1/60.f) * !window_has_pause() * editor.slomo; - editor.t += editor.dt; - editor.frame += !window_has_pause(); - editor.frame += !editor.frame; - - // process inputs & messages - editor_pump(); - - // adaptive framerate - int app_on_background = !window_has_focus(); - int hz = app_on_background ? editor.hz_low : editor.battery ? editor.hz_medium : editor.hz_high; - window_fps_lock( hz < 5 ? 5 : hz ); - - // draw menubar - static int stats_mode = 1; - static double last_fps = 0; if(!window_has_pause()) last_fps = window_fps(); - const char *STATS = va("x%4.3f %03d.%03dss %02dF %s", - editor.slomo, (int)editor.t, (int)(1000 * (editor.t - (int)editor.t)), - (editor.frame-1) % ((int)window_fps_target() + !(int)window_fps_target()), - stats_mode == 1 ? va("%5.2f/%dfps", last_fps, (int)window_fps_target()) : stats_mode == 0 ? "0/0 KiB" : xstats()); - const char *ICON_PL4Y = window_has_pause() ? ICON_MDI_PLAY : ICON_MDI_PAUSE; - const char *ICON_SKIP = window_has_pause() ? ICON_MDI_STEP_FORWARD/*ICON_MDI_SKIP_NEXT*/ : ICON_MDI_FAST_FORWARD; - - int is_borderless = !glfwGetWindowAttrib(window, GLFW_DECORATED); - int ingame = !editor.active; - static double clicked_titlebar = 0; - UI_MENU(14+2*is_borderless, \ - if(ingame) ui_disable(); \ - UI_MENU_POPUP(ICON_MD_SETTINGS, vec2(0.33,1.00), ui_engine()) \ - if(ingame) ui_enable(); \ - UI_MENU_ITEM(ICON_PL4Y, if(editor.t == 0) editor_send("eject"); editor_send(window_has_pause() ? "play" : "pause")) \ - UI_MENU_ITEM(ICON_SKIP, editor_send(window_has_pause() ? "frame" : "slomo")) \ - UI_MENU_ITEM(ICON_MDI_STOP, editor_send("stop")) \ - UI_MENU_ITEM(ICON_MDI_EJECT, editor_send("eject")) \ - UI_MENU_ITEM(STATS, stats_mode = (++stats_mode) % 3) \ - UI_MENU_ALIGN_RIGHT(32+32+32+32+32+32+32 + 32*2*is_borderless + 10, clicked_titlebar = time_ms()) \ - if(ingame) ui_disable(); \ - UI_MENU_ITEM(ICON_MD_FOLDER_SPECIAL, editor_send("browser")) \ - UI_MENU_ITEM(ICON_MDI_FILE_TREE, editor_send("scene")) \ - UI_MENU_ITEM(ICON_MDI_SCRIPT_TEXT, editor_send("script")) \ - UI_MENU_ITEM(ICON_MDI_CHART_TIMELINE, editor_send("timeline")) \ - UI_MENU_ITEM(ICON_MDI_CONSOLE, editor_send("console")) \ - UI_MENU_ITEM(ICON_MDI_GRAPH, editor_send("nodes")) \ - UI_MENU_ITEM(ICON_MDI_MAGNIFY, editor_send("filter")) /*MD_SEARCH*/ \ - if(ingame) ui_enable(); \ - UI_MENU_ITEM(window_has_maximize() ? ICON_MDI_WINDOW_MINIMIZE : ICON_MDI_WINDOW_MAXIMIZE, window_maximize(1 ^ window_has_maximize())) \ - UI_MENU_ITEM(ICON_MDI_CLOSE, editor_send("quit")) \ - ); - - if( is_borderless ) { - static vec3 drag = {0}; - if( clicked_titlebar ) { - static double clicks = 0; - if( input_up(MOUSE_L) ) ++clicks; - if( input_up(MOUSE_L) && clicks == 2 ) window_visible(false), window_maximize( window_has_maximize() ^ 1 ), window_visible(true); - if( (time_ms() - clicked_titlebar) > 400 ) clicks = 0, clicked_titlebar = 0; - - if( input_down(MOUSE_L) ) drag = vec3(input(MOUSE_X), input(MOUSE_Y), 1); - } - if( drag.z *= !input_up(MOUSE_L) ) { - int wx = 0, wy = 0; - glfwGetWindowPos(window_handle(), &wx, &wy); - glfwSetWindowPos(window_handle(), wx + input(MOUSE_X) - drag.x, wy + input(MOUSE_Y) - drag.y); - } - } - - if( !editor.active ) return; - - // draw edit view (gizmos, position markers, etc). - for each_set_ptr(editor.world,obj*,o) { - if( obj_hasmethod(*o,edit) ) { - obj_edit(*o); - } - } - - // draw silhouettes - sprite_flush(); - fx_begin(); - for each_map_ptr(*editor_selected_map(),void*,o,int,selected) { - if( !*selected ) continue; - if( obj_hasmethod(*o,draw) ) { - obj_draw(*o); - } - if( obj_hasmethod(*o,edit) ) { - obj_edit(*o); - } - } - sprite_flush(); - fx_end(); - - // draw box selection - if( !ui_active() && window_has_cursor() && cursorshape ) { //< check that we're not moving a window + not in fps cam - static vec2 from = {0}, to = {0}; - if( input_down(MOUSE_L) ) to = vec2(input(MOUSE_X), input(MOUSE_Y)), from = to; - if( input(MOUSE_L) ) to = vec2(input(MOUSE_X), input(MOUSE_Y)); - if( len2sq(sub2(from,to)) > 0 ) { - vec2 a = min2(from, to), b = max2(from, to); - ddraw_push_2d(); - ddraw_color_push(YELLOW); - ddraw_line( vec3(a.x,a.y,0),vec3(b.x-1,a.y,0) ); - ddraw_line( vec3(b.x,a.y,0),vec3(b.x,b.y-1,0) ); - ddraw_line( vec3(b.x,b.y,0),vec3(a.x-1,b.y,0) ); - ddraw_line( vec3(a.x,b.y,0),vec3(a.x,a.y-1,0) ); - ddraw_color_pop(); - ddraw_pop_2d(); - } - if( input_up(MOUSE_L) ) { - vec2 a = min2(from, to), b = max2(from, to); - from = to = vec2(0,0); - - editor_select_aabb(aabb(vec3(a.x,a.y,0),vec3(b.x,b.y,0))); - } - } - - // draw mouse aabb - aabb mouse = { vec3(input(MOUSE_X),input(MOUSE_Y),0), vec3(input(MOUSE_X),input(MOUSE_Y),1)}; - if( 1 ) { - ddraw_color_push(YELLOW); - ddraw_push_2d(); - ddraw_aabb(mouse.min, mouse.max); - ddraw_pop_2d(); - ddraw_color_pop(); - } - - // tick mouse aabb selection and contextual tab (RMB) - aabb box = {0}; - for each_set(editor.world,obj*,o) { - if( !obj_hasmethod(o, aabb) ) continue; - if( !obj_aabb(o, &box) ) continue; - - // trigger contextual inspector - if( input_down(MOUSE_R) ) { - int is_selected = editor_selected(o); - editor_setpopup(o, is_selected); - } - - // draw contextual inspector - if( editor_popup(o) ) { - if( editor_begin(va("%s (%s)", obj_name(o), obj_type(o)),EDITOR_WINDOW_NK_SMALL) ) { - ui_label2(obj_name(o), obj_type(o)); - editor_inspect(o); - editor_end(EDITOR_WINDOW_NK_SMALL); - } else { - editor_setpopup(o, 0); - } - } - } - - - // draw subeditors - static int preferred_window_mode = EDITOR_WINDOW; - static struct nk_color bak, *on = 0; do_once bak = ui_ctx->style.window.fixed_background.data.color; // ui_ctx->style.window.fixed_background.data.color = !!(on = (on ? NULL : &bak)) ? AS_NKCOLOR(0) : bak; }; - if( editor.transparent ) ui_ctx->style.window.fixed_background.data.color = AS_NKCOLOR(0); - for each_array(editor.subeditors, subeditor, fn) { - fn(preferred_window_mode); - } - ui_ctx->style.window.fixed_background.data.color = bak; - - // draw ui filter (note: render at end-of-frame, so it's hopefully on-top) - editor_filter(); -} - - -void editor_gizmos(int dim) { - // debugdraw - if(dim == 2) ddraw_push_2d(); - ddraw_ontop_push(0); - - // draw gizmos, aabbs, markers, etc - for each_map_ptr(*editor_selected_map(),void*,o,int,selected) { - if( !*selected ) continue; - - void *obj = *o; - - // get transform - vec3 *p = NULL; - vec3 *r = NULL; - vec3 *s = NULL; - aabb *a = NULL; - - for each_objmember(obj,TYPE,NAME,PTR) { - /**/ if( !strcmp(NAME, "position") ) p = PTR; - else if( !strcmp(NAME, "pos") ) p = PTR; - else if( !strcmp(NAME, "rotation") ) r = PTR; - else if( !strcmp(NAME, "rot") ) r = PTR; - else if( !strcmp(NAME, "scale") ) s = PTR; - else if( !strcmp(NAME, "sca") ) s = PTR; - else if( !strcmp(NAME, "aabb") ) a = PTR; - } - - ddraw_ontop(0); - - // bounding box 3d - if( 0 ) { - aabb box; - if( obj_hasmethod(*o, aabb) && obj_aabb(*o, &box) ) { - ddraw_color_push(YELLOW); - ddraw_aabb(box.min, box.max); - ddraw_color_pop(); - } - } - - // position marker - if( p ) { - static map(void*, vec3) prev_dir = 0; - do_once map_init_ptr(prev_dir); - vec3* dir = map_find_or_add(prev_dir, obj, vec3(1,0,0)); - - static map(void*, vec3) prev_pos = 0; - do_once map_init_ptr(prev_pos); - vec3* found = map_find_or_add(prev_pos, obj, *p), fwd = sub3(*p, *found); - if( (fwd.y = 0, len3sq(fwd)) ) { - *found = *p; - *dir = norm3(fwd); - } - - // float diameter = len2( sub2(vec2(box->max.x,box->max.z), vec2(box->min.x,box->min.z) )); - // float radius = diameter * 0.5; - ddraw_position_dir(*p, *dir, 1); - } - - ddraw_ontop(1); - - // transform gizmo - if( p && r && s ) { - gizmo(p,r,s); - } - } - - ddraw_ontop_pop(); - if(dim == 2) ddraw_pop_2d(); -} +// ## Editor long-term plan +// - editor = tree of nodes. levels and objects are nodes, and their widgets are also nodes +// - you can perform actions on nodes, with or without descendants, top-bottom or bottom-top +// - these operations include load/save, undo/redo, reset, play/render, ddraw, etc +// - nodes are saved to disk as a filesystem layout: parents are folders, and leafs are files +// - network replication can be done by external tools by comparing the filesystems and by sending the resulting diff zipped +// +// ## Editor roadmap +// - Gizmos✱, scene tree, property editor✱, load/save✱, undo/redo✱, copy/paste, on/off (vis,tick,ddraw,log), vcs. +// - Scenenode pass: node singleton display, node console, node labels, node outlines✱. +// - Render pass: billboards✱, materials, un/lit, cast shadows, wireframe, skybox✱/mie✱, fog/atmosphere +// - Level pass: volumes, triggers, platforms, level streaming, collide✱, physics +// - Edit pass: Procedural content, brushes, noise and CSG. +// - GUI pass: timeline and data tracks, node graphs. + +// ## Alt plan +// editor is a database + window/tile manager + ui toolkit; all network driven. +// to be precise, editor is a dumb app and ... +// - does not know a thing about what it stores. +// - does not know how to render the game graphics. +// - does not know how to run the game logic. +// +// the editor will create a canvas for your game to render. +// your game will be responsible to tick the logic and render the window inside the editor. +// +// that being said, editor... +// - can store datas hierarchically. +// - can perform diffs and merges, and version the datas into repositories. +// - can be instructed to render UI on top of game and window views. +// - can download new .natvis and plugins quickly. +// - can dump whole project in a filesystem form (zip). + +// - editor reflects database contents up-to-date. +// - database can be queried and modified via OSC(UDP) commands. + +// editor database uses one table, and stores two kind of payload types: +// - classes: defines typename and dna. class names are prefixed by '@' +// - instances: defines typename and datas. instance names are as-is, not prefixed. +// +// every save contains 5Ws: what, who, when, where, how, +// every save can be diffed/merged. + +// ---------------------------------------------------------------------------- + +array(editor_bind_t) editor_binds; + +void editor_addbind(editor_bind_t bind) { + array_push(editor_binds, bind); +} + +// ---------------------------------------------------------------------------- + +typedef void (*editor_no_property)(void *); +array(void*) editor_persist_kv; +array(editor_no_property) editor_no_properties; + +#define EDITOR_PROPERTY(T,property_name,defaults) \ +editor_##property_name##_map_t *editor_##property_name##_map() { \ + static editor_##property_name##_map_t map = 0; do_once map_init_ptr(map); \ + return ↦ \ +} \ +T editor_##property_name(const void *obj) { \ + return *map_find_or_add(*editor_##property_name##_map(), (void*)obj, ((T) defaults)); \ +} \ +void editor_set##property_name(const void *obj, T value) { \ + *map_find_or_add(*editor_##property_name##_map(), (void*)obj, ((T) value)) = ((T) value); \ +} \ +void editor_alt##property_name(const void *obj) { \ + T* found = map_find_or_add(*editor_##property_name##_map(), (void*)obj, ((T) defaults)); \ + *found = (T)(uintptr_t)!(*found); \ +} \ +void editor_no##property_name(void *obj) { \ + T* found = map_find_or_add(*editor_##property_name##_map(), (void*)obj, ((T) defaults)); \ + map_erase(*editor_##property_name##_map(), (void*)obj); \ +} \ +AUTORUN { array_push(editor_persist_kv, #T); array_push(editor_persist_kv, editor_##property_name##_map()); array_push(editor_no_properties, editor_no##property_name); } + +EDITOR_PROPERTY(int, open, 0); // whether object is tree opened in tree editor +EDITOR_PROPERTY(int, selected, 0); // whether object is displaying a contextual popup or not +EDITOR_PROPERTY(int, changed, 0); // whether object is displaying a contextual popup or not +EDITOR_PROPERTY(int, popup, 0); // whether object is displaying a contextual popup or not +EDITOR_PROPERTY(int, bookmarked, 0); +EDITOR_PROPERTY(int, visible, 0); +EDITOR_PROPERTY(int, script, 0); +EDITOR_PROPERTY(int, event, 0); +EDITOR_PROPERTY(char*, iconinstance, 0); +EDITOR_PROPERTY(char*, iconclass, 0); +EDITOR_PROPERTY(int, treeoffsety, 0); +// new prop: breakpoint: request to break on any given node +// new prop: persist: objects with this property will be saved on disk + +void editor_destroy_properties(void *o) { + for each_array(editor_no_properties,editor_no_property,fn) { + fn(o); + } +} + +void editor_load_on_boot(void) { +} +void editor_save_on_quit(void) { +} +AUTORUN { + editor_load_on_boot(); + (atexit)(editor_save_on_quit); +} + +// ---------------------------------------------------------------------------- + +typedef int(*subeditor)(int mode); + +struct editor_t { + // time + unsigned frame; + double t, dt, slomo; + // controls + int transparent; + int attached; + int active; // focus? does_grabinput instead? + int key; + vec2 mouse; // 2d coord for ray/picking + bool gamepad; // mask instead? |1|2|4|8 + int hz_high, hz_medium, hz_low; + int filter; + bool battery; // battery mode: low fps + bool unlit; + bool ddraw; + // event root nodes + obj* root; + obj* on_init; + obj* on_tick; + obj* on_draw; + obj* on_edit; + obj* on_quit; + // all of them (hierarchical) + array(obj*) objs; // @todo:set() world? + // all of them (flat) + set(obj*) world; + // + array(char*) cmds; + // subeditors + array(subeditor) subeditors; +} editor = { + .active = 1, + .gamepad = 1, + .hz_high = 60, .hz_medium = 18, .hz_low = 5, +}; + +int editor_begin(const char *title, int mode) { + if( mode == 0 ) return ui_panel(title, PANEL_OPEN); + if( mode == 1 ) return ui_window(title, 0); + + int ww = window_width(), w = ww * 0.66; + int hh = window_height(), h = hh * 0.66; + + struct nk_rect position = { (ww-w)/2,(hh-h)/2, w,h }; + nk_flags win_flags = NK_WINDOW_TITLE | NK_WINDOW_BORDER | + NK_WINDOW_MOVABLE | NK_WINDOW_SCALABLE | + NK_WINDOW_CLOSABLE | NK_WINDOW_MINIMIZABLE | + // NK_WINDOW_SCALE_LEFT|NK_WINDOW_SCALE_TOP| //< @fixme: move this logic into nuklear + // NK_WINDOW_MAXIMIZABLE | NK_WINDOW_PINNABLE | + 0; // NK_WINDOW_SCROLL_AUTO_HIDE; + + if( mode == 3 ) { + mode = 2, position.x = input(MOUSE_X), position.w = w/3, win_flags = + NK_WINDOW_TITLE|NK_WINDOW_CLOSABLE| + NK_WINDOW_SCALABLE|NK_WINDOW_MOVABLE| //< nuklear requires these two to `remember` popup rects + 0; + } + + if( mode == 2 || mode == 3 ) + if (nk_begin(ui_ctx, title, position, win_flags)) + return 1; + else + return nk_end(ui_ctx), 0; + + return 0; +} +int editor_end(int mode) { + if( mode == 0 ) return ui_panel_end(); + if( mode == 1 ) return ui_window_end(); + if( mode == 2 ) nk_end(ui_ctx); + if( mode == 3 ) nk_end(ui_ctx); + return 0; +} + +#if 0 // deprecate +bool editor_active() { + return ui_hover() || ui_active() || gizmo_active() ? editor.active : 0; +} +#endif + +int editor_filter() { + if( editor.filter ) { + if (nk_begin(ui_ctx, "Filter", nk_rect(window_width()-window_width()*0.33,32, window_width()*0.33, 40), + NK_WINDOW_NO_SCROLLBAR)) { + + char *bak = ui_filter; ui_filter = 0; + ui_string(ICON_MD_CLOSE " Filter " ICON_MD_SEARCH, &bak); + ui_filter = bak; + + if( input(KEY_ESC) || ( ui_label_icon_clicked_L.x > 0 && ui_label_icon_clicked_L.x <= 24 )) { + if( ui_filter ) ui_filter[0] = '\0'; + editor.filter = 0; + } + } + nk_end(ui_ctx); + } + + return editor.filter; +} + +static +int editor_select_(void *o, const char *mask) { + int matches = 0; + int off = mask[0] == '!', inv = mask[0] == '~'; + int match = strmatchi(obj_type(o), mask+off+inv) || strmatchi(obj_name(o), mask+off+inv); + if( match ) { + editor_setselected(o, inv ? editor_selected(o) ^ 1 : !off); + ++matches; + } + for each_objchild(o, obj*, oo) { + matches += editor_select_(oo, mask); + } + return matches; +} +void editor_select(const char *mask) { + for each_array( editor.objs, obj*, o ) + editor_select_(o, mask); +} +void editor_unselect() { // same than editor_select("!**"); + for each_map_ptr(*editor_selected_map(), void*,o, int, k) { + if( *k ) *k = 0; + } +} + +void editor_select_aabb(aabb box) { + int is_inv = input_held(KEY_CTRL); + int is_add = input_held(KEY_SHIFT); + if( !is_inv && !is_add ) editor_unselect(); + + aabb item = {0}; + for each_set_ptr( editor.world, obj*, o ) { + if( obj_hasmethod(*o,aabb) && obj_aabb(*o, &item) ) { + if( aabb_test_aabb(item, box) ) { + if( is_inv ) + editor_altselected(*o); + else + editor_setselected(*o, 1); + } + } + } +} + +static obj* active_ = 0; +static void editor_selectgroup_(obj *o, obj *first, obj *last) { + // printf("%s (looking for %s in [%s..%s])\n", obj_name(o), active_ ? obj_name(active_) : "", obj_name(first), obj_name(last)); + if( !active_ ) if( o == first || o == last ) active_ = o == first ? last : first; + if( active_ ) editor_setselected(o, 1); + if( o == active_ ) active_ = 0; + for each_objchild(o, obj*, oo) { + editor_selectgroup_(oo, first, last); + } +} +void editor_selectgroup(obj *first, obj *last) { + if( last ) { + if( !first ) first = array_count(editor.objs) ? editor.objs[0] : NULL; + if( !first ) editor_setselected(last, 1); + else { + active_ = 0; + for each_array(editor.objs,obj*,o) { + editor_selectgroup_(o, first, last); + } + } + } +} + +static obj *find_any_selected_(obj *o) { + if( editor_selected(o) ) return o; + for each_objchild(o,obj*,oo) { + obj *ooo = find_any_selected_(oo); + if( ooo ) + return ooo; + } + return 0; +} +void* editor_first_selected() { + for each_array(editor.objs,obj*,o) { + obj *oo = find_any_selected_(o); + // if( oo ) printf("1st found: %s\n", obj_name(oo)); + if( oo ) return oo; + } + return 0; +} + +static obj *find_last_selected_(obj *o) { + void *last = 0; + if( editor_selected(o) ) last = o; + for each_objchild(o,obj*,oo) { + obj *ooo = find_last_selected_(oo); + if( ooo ) + last = ooo; + } + return last; +} +void* editor_last_selected() { + void *last = 0; + for each_array(editor.objs,obj*,o) { + obj *oo = find_last_selected_(o); + // if( oo ) printf("last found: %s\n", obj_name(oo)); + if( oo ) last = oo; + } + return last; +} + +// ---------------------------------------------------------------------------------------- + +void editor_addtoworld(obj *o) { + set_find_or_add(editor.world, o); + for each_objchild(o, obj*, oo) { + editor_addtoworld(oo); + } +} + +void editor_watch(const void *o) { + array_push(editor.objs, (obj*)o); + obj_push(o); // save state + + editor_addtoworld((obj*)o); +} +void* editor_spawn(const char *ini) { // deprecate? + obj *o = obj_make(ini); + editor_watch(o); + return o; +} +void editor_spawn1() { + obj *selected = editor_first_selected(); + obj *o = selected ? obj_make(obj_saveini(selected)) : obj_new(obj); + if( selected ) obj_attach(selected, o), editor_setopen(selected, 1); + else + editor_watch(o); + + editor_unselect(); + editor_setselected(o, 1); +} + +typedef set(obj*) set_objp_t; +static +void editor_glob_recurse(set_objp_t*list, obj *o) { + set_find_or_add(*list, o); + for each_objchild(o,obj*,oo) { + editor_glob_recurse(list, oo); + } +} +void editor_destroy_selected() { + set_objp_t list = 0; + set_init_ptr(list); + for each_map_ptr(*editor_selected_map(), obj*,o, int,selected) { + if( *selected ) { editor_glob_recurse(&list, *o); } + } + for each_set(list, obj*, o) { + obj_detach(o); + } + for each_set(list, obj*, o) { + // printf("deleting %p %s\n", o, obj_name(o)); + // remove from watched items + for (int i = 0, end = array_count(editor.objs); i < end; ++i) { + if (editor.objs[i] == o) { + editor.objs[i] = 0; + array_erase_slow(editor.objs, i); + --end; + --i; + } + } + // delete from world + set_erase(editor.world, o); + // delete properties + obj + editor_destroy_properties(o); + obj_free(o); + } + set_free(list); +} +void editor_inspect(obj *o) { + ui_section(va("%s (%s)", obj_type(o), obj_name(o))); + + if( obj_hasmethod(o, menu) ) { + obj_menu(o); + } + + for each_objmember(o,TYPE,NAME,PTR) { + if( !editor_changed(PTR) ) { + obj_push(o); + } + ui_label_icon_highlight = editor_changed(PTR); // @hack: remove ui_label_icon_highlight hack + char *label = va(ICON_MD_UNDO "%s", NAME); + int changed = 0; + /**/ if( !strcmp(TYPE,"float") ) changed = ui_float(label, PTR); + else if( !strcmp(TYPE,"int") ) changed = ui_int(label, PTR); + else if( !strcmp(TYPE,"vec2") ) changed = ui_float2(label, PTR); + else if( !strcmp(TYPE,"vec3") ) changed = ui_float3(label, PTR); + else if( !strcmp(TYPE,"vec4") ) changed = ui_float4(label, PTR); + else if( !strcmp(TYPE,"rgb") ) changed = ui_color3(label, PTR); + else if( !strcmp(TYPE,"rgba") ) changed = ui_color4(label, PTR); + else if( !strcmp(TYPE,"color") ) changed = ui_color4f(label, PTR); + else if( !strcmp(TYPE,"color3f") ) changed = ui_color3f(label, PTR); + else if( !strcmp(TYPE,"color4f") ) changed = ui_color4f(label, PTR); + else if( !strcmp(TYPE,"char*") ) changed = ui_string(label, PTR); + else ui_label2(label, va("(%s)", TYPE)); // INFO instead of (TYPE)? + if( changed ) { + editor_setchanged(PTR, 1); + } + if( ui_label_icon_highlight ) + if( ui_label_icon_clicked_L.x >= 6 && ui_label_icon_clicked_L.x <= 26 ) { // @hack: if clicked on UNDO icon (1st icon) + editor_setchanged(PTR, 0); + } + if( !editor_changed(PTR) ) { + obj_pop(o); + } + } +} + +// ---------------------------------------------------------------------------------------- +// tty + +static thread_mutex_t *console_lock; +static array(char*) editor_jobs; +int editor_send(const char *cmd) { // return job-id + int skip = strspn(cmd, " \t\r\n"); + char *buf = STRDUP(cmd + skip); + strswap(buf, "\r\n", ""); + int jobid; + do_threadlock(console_lock) { + array_push(editor_jobs, buf); + jobid = array_count(editor_jobs) - 1; + } + return jobid; +} +const char* editor_recv(int jobid, double timeout_ss) { + char *answer = 0; + + while(!answer && timeout_ss >= 0 ) { + do_threadlock(console_lock) { + if( editor_jobs[jobid][0] == '\0' ) + answer = editor_jobs[jobid]; + } + timeout_ss -= 0.1; + if( timeout_ss > 0 ) sleep_ms(100); // thread_yield() + } + + return answer + 1; +} + +// plain and ctrl keys +EDITOR_BIND(play, "down(F5)", { window_pause(0); /* if(!editor.slomo) editor.active = 0; */ editor.slomo = 1; } ); +EDITOR_BIND(stop, "down(ESC)", { if(editor.t > 0) { window_pause(1), editor.frame = 0, editor.t = 0, editor.dt = 0, editor.slomo = 0, editor.active = 1; editor_select("**"); editor_destroy_selected(); }} ); +EDITOR_BIND(eject, "down(F1)", { /*window_pause(!editor.active); editor.slomo = !!editor.active;*/ editor.active ^= 1; } ); +EDITOR_BIND(pause, "(held(CTRL) & down(P)) | down(PAUSE)", { window_pause( window_has_pause() ^ 1 ); } ); +EDITOR_BIND(frame, "held(CTRL) & down(LEFT)", { window_pause(1); editor.frame++, editor.t += (editor.dt = 1/60.f); } ); +EDITOR_BIND(slomo, "held(CTRL) & down(RIGHT)", { window_pause(0); editor.slomo = maxf(fmod(editor.slomo * 2, 16), 0.125); } ); +EDITOR_BIND(reload, "held(CTRL) & down(F5)", { window_reload(); } ); +EDITOR_BIND(filter, "held(CTRL) & down(F)", { editor.filter ^= 1; } ); + +// alt keys +EDITOR_BIND(quit, "held(ALT) & down(F4)", { record_stop(), exit(0); } ); +EDITOR_BIND(mute, "held(ALT) & down(M)", { audio_volume_master( 1 ^ !!audio_volume_master(-1) ); } ); +EDITOR_BIND(gamepad, "held(ALT) & down(G)", { editor.gamepad ^= 1; } ); +EDITOR_BIND(transparent, "held(ALT) & down(T)", { editor.transparent ^= 1; } ); +EDITOR_BIND(record, "held(ALT) & down(Z)", { if(record_active()) record_stop(), ui_notify(va("Video recorded"), date_string()); else { char *name = file_counter(va("%s.mp4",app_name())); app_beep(), window_record(name); } } ); +EDITOR_BIND(screenshot, "held(ALT) & down(S)", { char *name = file_counter(va("%s.png",app_name())); window_screenshot(name), ui_notify(va("Screenshot: %s", name), date_string()); } ); +EDITOR_BIND(battery, "held(ALT) & down(B)", { editor.battery ^= 1; } ); +EDITOR_BIND(outliner, "held(ALT) & down(O)", { ui_show("Outliner", ui_visible("Outliner") ^ true); } ); +EDITOR_BIND(profiler, "held(ALT) & down(P)", { ui_show("Profiler", profiler_enable(ui_visible("Profiler") ^ true)); } ); +EDITOR_BIND(fullscreen, "(held(ALT)&down(ENTER))|down(F11)",{ record_stop(), window_fullscreen( window_has_fullscreen() ^ 1 ); } ); // close any recording before framebuffer resizing, which would corrupt video stream +EDITOR_BIND(unlit, "held(ALT) & down(U)", { editor.unlit ^= 1; } ); +EDITOR_BIND(ddraw, "held(ALT) & down(D)", { editor.ddraw ^= 1; } ); + +void editor_pump() { + for each_array(editor_binds,editor_bind_t,b) { + if( input_eval(b.bindings) ) { + editor_send(b.command); + } + } + + do_threadlock(console_lock) { + for each_array_ptr(editor_jobs,char*,cmd) { + if( (*cmd)[0] ) { + int found = 0; + for each_array(editor_binds,editor_bind_t,b) { + if( !strcmpi(b.command, *cmd)) { + b.fn(); + found = 1; + break; + } + } + + if( !found ) { + // alert(va("Editor: could not handle `%s` command.", *cmd)); + (*cmd)[0] = '\0'; strcatf(&(*cmd), "\1%s\n", "Err\n"); (*cmd)[0] = '\0'; + } + + if( (*cmd)[0] ) { + (*cmd)[0] = '\0'; strcatf(&(*cmd), "\1%s\n", "Ok\n"); (*cmd)[0] = '\0'; + } + } + } + } +} + +// ---------------------------------------------------------------------------------------- + +void editor_setmouse(int x, int y) { + glfwSetCursorPos( window_handle(), x, y ); +} + +vec2 editor_glyph(int x, int y, const char *style, unsigned codepoint) { + do_once { + // style: atlas size, unicode ranges and 3 font faces max + font_face(FONT_FACE10, "B612-Regular.ttf", 12.f, 0); + font_face(FONT_FACE9, "MaterialIconsSharp-Regular.otf", 24.f, FONT_EM|FONT_2048); + font_face(FONT_FACE8, "materialdesignicons-webfont.ttf", 24.f, FONT_EM|FONT_2048); // {0xF68C /*ICON_MDI_MIN*/, 0xF1CC7/*ICON_MDI_MAX*/, 0}}, + // style: 5 colors max + font_color(FONT_COLOR1, WHITE); + font_color(FONT_COLOR2, RGBX(0xE8F1FF,128)); // GRAY); + font_color(FONT_COLOR3, YELLOW); + font_color(FONT_COLOR4, ORANGE); + font_color(FONT_COLOR5, CYAN); + } + + font_goto(x,y); + vec2 pos = {x,y}; + const char *sym = codepoint_to_utf8(codepoint); + return add2(pos, font_print(va("%s%s%s", style ? style : "", codepoint >= ICON_MDI_MIN ? FONT_FACE8 : codepoint >= ICON_MD_MIN ? FONT_FACE9 : FONT_FACE10, sym))); +} + +vec2 editor_glyphs(int x, int y, const char *style, const char *utf8) { + vec2 pos = {x,y}; + array(unsigned) codepoints = string32(utf8); + for( int i = 0, end = array_count(codepoints); i < end; ++i) + pos = add2(pos, editor_glyph(pos.x,pos.y,style,codepoints[i])); + return pos; +} + +void editor_frame( void (*game)(unsigned, float, double) ) { + do_once { + set_init_ptr(editor.world); + //set_init_ptr(editor.selection); + profiler_enable( false ); + + window_pause( true ); + window_cursor_shape(CURSOR_SW_AUTO); + editor.hz_high = window_fps_target(); + + fx_load("**/editorOutline.fs"); + fx_enable(0, 1); + + obj_setname(editor.root = obj_new(obj), "Signals"); + obj_setname(editor.on_init = obj_new(obj), "onInit"); + obj_setname(editor.on_tick = obj_new(obj), "onTick"); + obj_setname(editor.on_draw = obj_new(obj), "onDraw"); + obj_setname(editor.on_edit = obj_new(obj), "onEdit"); + obj_setname(editor.on_quit = obj_new(obj), "onQuit"); + + obj_attach(editor.root, editor.on_init); + obj_attach(editor.root, editor.on_tick); + obj_attach(editor.root, editor.on_draw); + obj_attach(editor.root, editor.on_edit); + obj_attach(editor.root, editor.on_quit); + + editor_seticoninstance(editor.root, ICON_MDI_SIGNAL_VARIANT); + editor_seticoninstance(editor.on_init, ICON_MDI_SIGNAL_VARIANT); + editor_seticoninstance(editor.on_tick, ICON_MDI_SIGNAL_VARIANT); + editor_seticoninstance(editor.on_draw, ICON_MDI_SIGNAL_VARIANT); + editor_seticoninstance(editor.on_edit, ICON_MDI_SIGNAL_VARIANT); + editor_seticoninstance(editor.on_quit, ICON_MDI_SIGNAL_VARIANT); + + editor_seticonclass(obj_type(editor.root), ICON_MDI_CUBE_OUTLINE); + } + + // game tick + game(editor.frame, editor.dt, editor.t); + + // timing + editor.dt = clampf(window_delta(), 0, 1/60.f) * !window_has_pause() * editor.slomo; + editor.t += editor.dt; + editor.frame += !window_has_pause(); + editor.frame += !editor.frame; + + // process inputs & messages + editor_pump(); + + // adaptive framerate + int app_on_background = !window_has_focus(); + int hz = app_on_background ? editor.hz_low : editor.battery ? editor.hz_medium : editor.hz_high; + window_fps_lock( hz < 5 ? 5 : hz ); + + // draw menubar + static int stats_mode = 1; + static double last_fps = 0; if(!window_has_pause()) last_fps = window_fps(); + const char *STATS = va("x%4.3f %03d.%03dss %02dF %s", + editor.slomo, (int)editor.t, (int)(1000 * (editor.t - (int)editor.t)), + (editor.frame-1) % ((int)window_fps_target() + !(int)window_fps_target()), + stats_mode == 1 ? va("%5.2f/%dfps", last_fps, (int)window_fps_target()) : stats_mode == 0 ? "0/0 KiB" : xstats()); + const char *ICON_PL4Y = window_has_pause() ? ICON_MDI_PLAY : ICON_MDI_PAUSE; + const char *ICON_SKIP = window_has_pause() ? ICON_MDI_STEP_FORWARD/*ICON_MDI_SKIP_NEXT*/ : ICON_MDI_FAST_FORWARD; + + int is_borderless = !glfwGetWindowAttrib(window, GLFW_DECORATED); + int ingame = !editor.active; + static double clicked_titlebar = 0; + UI_MENU(14+2*is_borderless, \ + if(ingame) ui_disable(); \ + UI_MENU_POPUP(ICON_MD_SETTINGS, vec2(0.33,1.00), ui_engine()) \ + if(ingame) ui_enable(); \ + UI_MENU_ITEM(ICON_PL4Y, if(editor.t == 0) editor_send("eject"); editor_send(window_has_pause() ? "play" : "pause")) \ + UI_MENU_ITEM(ICON_SKIP, editor_send(window_has_pause() ? "frame" : "slomo")) \ + UI_MENU_ITEM(ICON_MDI_STOP, editor_send("stop")) \ + UI_MENU_ITEM(ICON_MDI_EJECT, editor_send("eject")) \ + UI_MENU_ITEM(STATS, stats_mode = (++stats_mode) % 3) \ + UI_MENU_ALIGN_RIGHT(32+32+32+32+32+32+32 + 32*2*is_borderless + 10, clicked_titlebar = time_ms()) \ + if(ingame) ui_disable(); \ + UI_MENU_ITEM(ICON_MD_FOLDER_SPECIAL, editor_send("browser")) \ + UI_MENU_ITEM(ICON_MDI_FILE_TREE, editor_send("scene")) \ + UI_MENU_ITEM(ICON_MDI_SCRIPT_TEXT, editor_send("script")) \ + UI_MENU_ITEM(ICON_MDI_CHART_TIMELINE, editor_send("timeline")) \ + UI_MENU_ITEM(ICON_MDI_CONSOLE, editor_send("console")) \ + UI_MENU_ITEM(ICON_MDI_GRAPH, editor_send("nodes")) \ + UI_MENU_ITEM(ICON_MDI_MAGNIFY, editor_send("filter")) /*MD_SEARCH*/ \ + if(ingame) ui_enable(); \ + UI_MENU_ITEM(window_has_maximize() ? ICON_MDI_WINDOW_MINIMIZE : ICON_MDI_WINDOW_MAXIMIZE, window_maximize(1 ^ window_has_maximize())) \ + UI_MENU_ITEM(ICON_MDI_CLOSE, editor_send("quit")) \ + ); + + if( is_borderless ) { + static vec3 drag = {0}; + if( clicked_titlebar ) { + static double clicks = 0; + if( input_up(MOUSE_L) ) ++clicks; + if( input_up(MOUSE_L) && clicks == 2 ) window_visible(false), window_maximize( window_has_maximize() ^ 1 ), window_visible(true); + if( (time_ms() - clicked_titlebar) > 400 ) clicks = 0, clicked_titlebar = 0; + + if( input_down(MOUSE_L) ) drag = vec3(input(MOUSE_X), input(MOUSE_Y), 1); + } + if( drag.z *= !input_up(MOUSE_L) ) { + int wx = 0, wy = 0; + glfwGetWindowPos(window_handle(), &wx, &wy); + glfwSetWindowPos(window_handle(), wx + input(MOUSE_X) - drag.x, wy + input(MOUSE_Y) - drag.y); + } + } + + if( !editor.active ) return; + + // draw edit view (gizmos, position markers, etc). + for each_set_ptr(editor.world,obj*,o) { + if( obj_hasmethod(*o,edit) ) { + obj_edit(*o); + } + } + + // draw silhouettes + sprite_flush(); + fx_begin(); + for each_map_ptr(*editor_selected_map(),void*,o,int,selected) { + if( !*selected ) continue; + if( obj_hasmethod(*o,draw) ) { + obj_draw(*o); + } + if( obj_hasmethod(*o,edit) ) { + obj_edit(*o); + } + } + sprite_flush(); + fx_end(); + + // draw box selection + if( !ui_active() && window_has_cursor() && cursorshape ) { //< check that we're not moving a window + not in fps cam + static vec2 from = {0}, to = {0}; + if( input_down(MOUSE_L) ) to = vec2(input(MOUSE_X), input(MOUSE_Y)), from = to; + if( input(MOUSE_L) ) to = vec2(input(MOUSE_X), input(MOUSE_Y)); + if( len2sq(sub2(from,to)) > 0 ) { + vec2 a = min2(from, to), b = max2(from, to); + ddraw_push_2d(); + ddraw_color_push(YELLOW); + ddraw_line( vec3(a.x,a.y,0),vec3(b.x-1,a.y,0) ); + ddraw_line( vec3(b.x,a.y,0),vec3(b.x,b.y-1,0) ); + ddraw_line( vec3(b.x,b.y,0),vec3(a.x-1,b.y,0) ); + ddraw_line( vec3(a.x,b.y,0),vec3(a.x,a.y-1,0) ); + ddraw_color_pop(); + ddraw_pop_2d(); + } + if( input_up(MOUSE_L) ) { + vec2 a = min2(from, to), b = max2(from, to); + from = to = vec2(0,0); + + editor_select_aabb(aabb(vec3(a.x,a.y,0),vec3(b.x,b.y,0))); + } + } + + // draw mouse aabb + aabb mouse = { vec3(input(MOUSE_X),input(MOUSE_Y),0), vec3(input(MOUSE_X),input(MOUSE_Y),1)}; + if( 1 ) { + ddraw_color_push(YELLOW); + ddraw_push_2d(); + ddraw_aabb(mouse.min, mouse.max); + ddraw_pop_2d(); + ddraw_color_pop(); + } + + // tick mouse aabb selection and contextual tab (RMB) + aabb box = {0}; + for each_set(editor.world,obj*,o) { + if( !obj_hasmethod(o, aabb) ) continue; + if( !obj_aabb(o, &box) ) continue; + + // trigger contextual inspector + if( input_down(MOUSE_R) ) { + int is_selected = editor_selected(o); + editor_setpopup(o, is_selected); + } + + // draw contextual inspector + if( editor_popup(o) ) { + if( editor_begin(va("%s (%s)", obj_name(o), obj_type(o)),EDITOR_WINDOW_NK_SMALL) ) { + ui_label2(obj_name(o), obj_type(o)); + editor_inspect(o); + editor_end(EDITOR_WINDOW_NK_SMALL); + } else { + editor_setpopup(o, 0); + } + } + } + + + // draw subeditors + static int preferred_window_mode = EDITOR_WINDOW; + static struct nk_color bak, *on = 0; do_once bak = ui_ctx->style.window.fixed_background.data.color; // ui_ctx->style.window.fixed_background.data.color = !!(on = (on ? NULL : &bak)) ? AS_NKCOLOR(0) : bak; }; + if( editor.transparent ) ui_ctx->style.window.fixed_background.data.color = AS_NKCOLOR(0); + for each_array(editor.subeditors, subeditor, fn) { + fn(preferred_window_mode); + } + ui_ctx->style.window.fixed_background.data.color = bak; + + // draw ui filter (note: render at end-of-frame, so it's hopefully on-top) + editor_filter(); +} + + +void editor_gizmos(int dim) { + // debugdraw + if(dim == 2) ddraw_push_2d(); + ddraw_ontop_push(0); + + // draw gizmos, aabbs, markers, etc + for each_map_ptr(*editor_selected_map(),void*,o,int,selected) { + if( !*selected ) continue; + + void *obj = *o; + + // get transform + vec3 *p = NULL; + vec3 *r = NULL; + vec3 *s = NULL; + aabb *a = NULL; + + for each_objmember(obj,TYPE,NAME,PTR) { + /**/ if( !strcmp(NAME, "position") ) p = PTR; + else if( !strcmp(NAME, "pos") ) p = PTR; + else if( !strcmp(NAME, "rotation") ) r = PTR; + else if( !strcmp(NAME, "rot") ) r = PTR; + else if( !strcmp(NAME, "scale") ) s = PTR; + else if( !strcmp(NAME, "sca") ) s = PTR; + else if( !strcmp(NAME, "aabb") ) a = PTR; + } + + ddraw_ontop(0); + + // bounding box 3d + if( 0 ) { + aabb box; + if( obj_hasmethod(*o, aabb) && obj_aabb(*o, &box) ) { + ddraw_color_push(YELLOW); + ddraw_aabb(box.min, box.max); + ddraw_color_pop(); + } + } + + // position marker + if( p ) { + static map(void*, vec3) prev_dir = 0; + do_once map_init_ptr(prev_dir); + vec3* dir = map_find_or_add(prev_dir, obj, vec3(1,0,0)); + + static map(void*, vec3) prev_pos = 0; + do_once map_init_ptr(prev_pos); + vec3* found = map_find_or_add(prev_pos, obj, *p), fwd = sub3(*p, *found); + if( (fwd.y = 0, len3sq(fwd)) ) { + *found = *p; + *dir = norm3(fwd); + } + + // float diameter = len2( sub2(vec2(box->max.x,box->max.z), vec2(box->min.x,box->min.z) )); + // float radius = diameter * 0.5; + ddraw_position_dir(*p, *dir, 1); + } + + ddraw_ontop(1); + + // transform gizmo + if( p && r && s ) { + gizmo(p,r,s); + } + } + + ddraw_ontop_pop(); + if(dim == 2) ddraw_pop_2d(); +} #line 0 #line 1 "v4k_editor_scene.h" -#define SCENE_ICON ICON_MDI_FILE_TREE -#define SCENE_TITLE "Scene " SCENE_ICON - -EDITOR_BIND(scene, "held(CTRL)&down(1)", { ui_show(SCENE_TITLE, ui_visible(SCENE_TITLE) ^ true); }); - -EDITOR_BIND(node_new, "down(INS)", { editor_spawn1(); } ); -EDITOR_BIND(node_del, "down(DEL)", { editor_destroy_selected(); } ); -EDITOR_BIND(node_save, "held(CTRL)&down(S)", { puts("@todo"); } ); -EDITOR_BIND(scene_save, "held(CTRL)&down(S)&held(SHIFT)",{ puts("@todo"); } ); -EDITOR_BIND(select_all, "held(CTRL) & down(A)", { editor_select("**"); } ); -EDITOR_BIND(select_none, "held(CTRL) & down(D)", { editor_select("!**"); } ); -EDITOR_BIND(select_invert, "held(CTRL) & down(I)", { editor_select("~**"); } ); -EDITOR_BIND(bookmark, "held(CTRL) & down(B)", { editor_selected_map_t *map = editor_selected_map(); \ - int on = 0; \ - for each_map_ptr(*map,void*,o,int,selected) if(*selected) on |= !editor_bookmarked(*o); \ - for each_map_ptr(*map,void*,o,int,selected) if(*selected) editor_setbookmarked(*o, on); \ -} ); - -enum { - SCENE_RECURSE = 1, - SCENE_SELECTION = 2, - SCENE_CHECKBOX = 4, - SCENE_INDENT = 8, - SCENE_ALL = ~0u -}; - -static -void editor_scene_(obj *o, unsigned flags) { - static unsigned tabs = ~0u; - ++tabs; - - if( o ) { - unsigned do_tags = 1; - unsigned do_indent = !!(flags & SCENE_INDENT); - unsigned do_checkbox = !!(flags & SCENE_CHECKBOX); - unsigned do_recurse = !!(flags & SCENE_RECURSE); - unsigned do_selection = !!(flags & SCENE_SELECTION); - - nk_layout_row_dynamic(ui_ctx, 25, 1); - - const char *objicon = editor_iconinstance(o); - if(!objicon) objicon = editor_iconclass(obj_type(o)); - if(!objicon) objicon = ICON_MDI_CUBE_OUTLINE; - - const char *objname = va("%s (%s)", obj_type(o), obj_name(o)); - - const char *objchevron = - !do_recurse || array_count(*obj_children(o)) <= 1 ? ICON_MDI_CIRCLE_SMALL : - editor_open(o) ? ICON_MDI_CHEVRON_DOWN : ICON_MDI_CHEVRON_RIGHT; - - char *label = va("%*s%s%s %s", do_indent*(4+2*tabs), "", objchevron, objicon, objname); - - const char *iconsL = - //editor_selected(o) ? ICON_MD_CHECK_BOX : ICON_MD_CHECK_BOX_OUTLINE_BLANK; - editor_selected(o) ? ICON_MDI_CHECKBOX_MARKED : ICON_MDI_CHECKBOX_BLANK_OUTLINE; - - const char *iconsR = va("%s%s%s", - editor_script(o) ? ICON_MDI_SCRIPT : ICON_MDI_CIRCLE_SMALL, - editor_event(o) ? ICON_MDI_CALENDAR : ICON_MDI_CIRCLE_SMALL, - editor_visible(o) ? ICON_MDI_EYE_OUTLINE : ICON_MDI_EYE_CLOSED ); - - UI_TOOLBAR_OVERLAY_DECLARE(int choiceL, choiceR); - - struct nk_command_buffer *canvas = nk_window_get_canvas(ui_ctx); - struct nk_rect bounds; nk_layout_peek(&bounds, ui_ctx); - - int clicked = nk_hovered_text(ui_ctx, label, strlen(label), NK_TEXT_LEFT, editor_selected(o)); - if( clicked && nk_input_is_mouse_hovering_rect(&ui_ctx->input, ((struct nk_rect) { bounds.x,bounds.y,bounds.w*0.66,bounds.h })) ) - editor_altselected( o ); - - vec2i offset_in_tree = {0}; - - if( do_indent ) { - float thickness = 2.f; - struct nk_color color = {255,255,255,64}; - - int offsx = 30; - int spacx = 10; - int lenx = (tabs+1)*spacx; - int halfy = bounds.h / 2; - int offsy = halfy + 2; - - offset_in_tree = vec2i(bounds.x+offsx+lenx-spacx,bounds.y+offsy); - - editor_settreeoffsety(o, offset_in_tree.y); - - for( obj *p = obj_parent(o); p ; p = 0 ) - nk_stroke_line(canvas, offset_in_tree.x-6,offset_in_tree.y, offset_in_tree.x-spacx,offset_in_tree.y, thickness, color), - nk_stroke_line(canvas, offset_in_tree.x-spacx,offset_in_tree.y,offset_in_tree.x-spacx,editor_treeoffsety(p)+4, thickness, color); - } - - if( ui_contextual() ) { - int choice = ui_label(ICON_MD_BOOKMARK_ADDED "Toggle bookmarks (CTRL+B)"); - if( choice & 1 ) editor_send("bookmark"); - - ui_contextual_end(!!choice); - } - - UI_TOOLBAR_OVERLAY(choiceL,iconsL,nk_rgba_f(1,1,1,do_checkbox*ui_alpha*0.65),NK_TEXT_LEFT); - - if( do_tags ) - UI_TOOLBAR_OVERLAY(choiceR,iconsR,nk_rgba_f(1,1,1,ui_alpha*0.65),NK_TEXT_RIGHT); - - if( choiceR == 3 ) editor_altscript( o ); - if( choiceR == 2 ) editor_altevent( o); - if( choiceR == 1 ) editor_altvisible( o ); - - if( do_recurse && editor_open(o) ) { - for each_objchild(o,obj*,oo) { - editor_scene_(oo,flags); - } - } - - if( clicked && !choiceL && !choiceR ) { - int is_picking = input(KEY_CTRL); - if( !is_picking ) { - if( input(KEY_SHIFT) ) { - editor_selectgroup( editor_first_selected(), editor_last_selected() ); - } else { - editor_unselect(); - editor_setselected(o, 1); - } - } - for( obj *p = obj_parent(o); p; p = obj_parent(p) ) { - editor_setopen(p, 1); - } - if( nk_input_is_mouse_hovering_rect(&ui_ctx->input, ((struct nk_rect) { bounds.x,bounds.y,offset_in_tree.x-bounds.x+UI_ICON_FONTSIZE/2,bounds.h })) ) { - editor_altopen( o ); - } - } - } - - --tabs; -} - -int editor_scene(int window_mode) { - window_mode = EDITOR_WINDOW; // force window - - if( editor_begin(SCENE_TITLE, window_mode)) { - // #define HELP ICON_MDI_INFORMATION_OUTLINE "@-A\n-B\n-C\n" ";" - int choice = ui_toolbar(ICON_MDI_PLUS "@New node (CTRL+N);" ICON_MDI_DOWNLOAD "@Save node (CTRL+S);" ICON_MDI_DOWNLOAD "@Save scene (SHIFT+CTRL+S);" ICON_MD_BOOKMARK_ADDED "@Toggle Bookmark (CTRL+B);"); - if( choice == 1 ) editor_send("node_new"); - if( choice == 2 ) editor_send("node_save"); - if( choice == 3 ) editor_send("scene_save"); - if( choice == 4 ) editor_send("bookmark"); - - array(obj*) bookmarks = 0; - for each_map_ptr(*editor_bookmarked_map(), void*,o,int,bookmarked) { - if( *bookmarked ) { - array_push(bookmarks, *o); - } - } - if( ui_collapse("!" ICON_MD_BOOKMARK "Bookmarks", "DEBUG:BOOKMARK")) { - for each_array( bookmarks, obj*, o ) - editor_scene_( o, SCENE_ALL & ~(SCENE_RECURSE|SCENE_INDENT|SCENE_CHECKBOX) ); - ui_collapse_end(); - } - array_free(bookmarks); - - editor_scene_( editor.root, SCENE_ALL ); - - for each_array( editor.objs, obj*, o ) - editor_scene_( o, SCENE_ALL ); - - ui_separator(); - - // edit selection - for each_map(*editor_selected_map(), void*,o, int, k) { - if( k ) editor_inspect(o); - } - - editor_end(window_mode); - } - - return 0; -} - -AUTORUN { - array_push(editor.subeditors, editor_scene); -} +#define SCENE_ICON ICON_MDI_FILE_TREE +#define SCENE_TITLE "Scene " SCENE_ICON + +EDITOR_BIND(scene, "held(CTRL)&down(1)", { ui_show(SCENE_TITLE, ui_visible(SCENE_TITLE) ^ true); }); + +EDITOR_BIND(node_new, "down(INS)", { editor_spawn1(); } ); +EDITOR_BIND(node_del, "down(DEL)", { editor_destroy_selected(); } ); +EDITOR_BIND(node_save, "held(CTRL)&down(S)", { puts("@todo"); } ); +EDITOR_BIND(scene_save, "held(CTRL)&down(S)&held(SHIFT)",{ puts("@todo"); } ); +EDITOR_BIND(select_all, "held(CTRL) & down(A)", { editor_select("**"); } ); +EDITOR_BIND(select_none, "held(CTRL) & down(D)", { editor_select("!**"); } ); +EDITOR_BIND(select_invert, "held(CTRL) & down(I)", { editor_select("~**"); } ); +EDITOR_BIND(bookmark, "held(CTRL) & down(B)", { editor_selected_map_t *map = editor_selected_map(); \ + int on = 0; \ + for each_map_ptr(*map,void*,o,int,selected) if(*selected) on |= !editor_bookmarked(*o); \ + for each_map_ptr(*map,void*,o,int,selected) if(*selected) editor_setbookmarked(*o, on); \ +} ); + +enum { + SCENE_RECURSE = 1, + SCENE_SELECTION = 2, + SCENE_CHECKBOX = 4, + SCENE_INDENT = 8, + SCENE_ALL = ~0u +}; + +static +void editor_scene_(obj *o, unsigned flags) { + static unsigned tabs = ~0u; + ++tabs; + + if( o ) { + unsigned do_tags = 1; + unsigned do_indent = !!(flags & SCENE_INDENT); + unsigned do_checkbox = !!(flags & SCENE_CHECKBOX); + unsigned do_recurse = !!(flags & SCENE_RECURSE); + unsigned do_selection = !!(flags & SCENE_SELECTION); + + nk_layout_row_dynamic(ui_ctx, 25, 1); + + const char *objicon = editor_iconinstance(o); + if(!objicon) objicon = editor_iconclass(obj_type(o)); + if(!objicon) objicon = ICON_MDI_CUBE_OUTLINE; + + const char *objname = va("%s (%s)", obj_type(o), obj_name(o)); + + const char *objchevron = + !do_recurse || array_count(*obj_children(o)) <= 1 ? ICON_MDI_CIRCLE_SMALL : + editor_open(o) ? ICON_MDI_CHEVRON_DOWN : ICON_MDI_CHEVRON_RIGHT; + + char *label = va("%*s%s%s %s", do_indent*(4+2*tabs), "", objchevron, objicon, objname); + + const char *iconsL = + //editor_selected(o) ? ICON_MD_CHECK_BOX : ICON_MD_CHECK_BOX_OUTLINE_BLANK; + editor_selected(o) ? ICON_MDI_CHECKBOX_MARKED : ICON_MDI_CHECKBOX_BLANK_OUTLINE; + + const char *iconsR = va("%s%s%s", + editor_script(o) ? ICON_MDI_SCRIPT : ICON_MDI_CIRCLE_SMALL, + editor_event(o) ? ICON_MDI_CALENDAR : ICON_MDI_CIRCLE_SMALL, + editor_visible(o) ? ICON_MDI_EYE_OUTLINE : ICON_MDI_EYE_CLOSED ); + + UI_TOOLBAR_OVERLAY_DECLARE(int choiceL, choiceR); + + struct nk_command_buffer *canvas = nk_window_get_canvas(ui_ctx); + struct nk_rect bounds; nk_layout_peek(&bounds, ui_ctx); + + int clicked = nk_hovered_text(ui_ctx, label, strlen(label), NK_TEXT_LEFT, editor_selected(o)); + if( clicked && nk_input_is_mouse_hovering_rect(&ui_ctx->input, ((struct nk_rect) { bounds.x,bounds.y,bounds.w*0.66,bounds.h })) ) + editor_altselected( o ); + + vec2i offset_in_tree = {0}; + + if( do_indent ) { + float thickness = 2.f; + struct nk_color color = {255,255,255,64}; + + int offsx = 30; + int spacx = 10; + int lenx = (tabs+1)*spacx; + int halfy = bounds.h / 2; + int offsy = halfy + 2; + + offset_in_tree = vec2i(bounds.x+offsx+lenx-spacx,bounds.y+offsy); + + editor_settreeoffsety(o, offset_in_tree.y); + + for( obj *p = obj_parent(o); p ; p = 0 ) + nk_stroke_line(canvas, offset_in_tree.x-6,offset_in_tree.y, offset_in_tree.x-spacx,offset_in_tree.y, thickness, color), + nk_stroke_line(canvas, offset_in_tree.x-spacx,offset_in_tree.y,offset_in_tree.x-spacx,editor_treeoffsety(p)+4, thickness, color); + } + + if( ui_contextual() ) { + int choice = ui_label(ICON_MD_BOOKMARK_ADDED "Toggle bookmarks (CTRL+B)"); + if( choice & 1 ) editor_send("bookmark"); + + ui_contextual_end(!!choice); + } + + UI_TOOLBAR_OVERLAY(choiceL,iconsL,nk_rgba_f(1,1,1,do_checkbox*ui_alpha*0.65),NK_TEXT_LEFT); + + if( do_tags ) + UI_TOOLBAR_OVERLAY(choiceR,iconsR,nk_rgba_f(1,1,1,ui_alpha*0.65),NK_TEXT_RIGHT); + + if( choiceR == 3 ) editor_altscript( o ); + if( choiceR == 2 ) editor_altevent( o); + if( choiceR == 1 ) editor_altvisible( o ); + + if( do_recurse && editor_open(o) ) { + for each_objchild(o,obj*,oo) { + editor_scene_(oo,flags); + } + } + + if( clicked && !choiceL && !choiceR ) { + int is_picking = input(KEY_CTRL); + if( !is_picking ) { + if( input(KEY_SHIFT) ) { + editor_selectgroup( editor_first_selected(), editor_last_selected() ); + } else { + editor_unselect(); + editor_setselected(o, 1); + } + } + for( obj *p = obj_parent(o); p; p = obj_parent(p) ) { + editor_setopen(p, 1); + } + if( nk_input_is_mouse_hovering_rect(&ui_ctx->input, ((struct nk_rect) { bounds.x,bounds.y,offset_in_tree.x-bounds.x+UI_ICON_FONTSIZE/2,bounds.h })) ) { + editor_altopen( o ); + } + } + } + + --tabs; +} + +int editor_scene(int window_mode) { + window_mode = EDITOR_WINDOW; // force window + + if( editor_begin(SCENE_TITLE, window_mode)) { + // #define HELP ICON_MDI_INFORMATION_OUTLINE "@-A\n-B\n-C\n" ";" + int choice = ui_toolbar(ICON_MDI_PLUS "@New node (CTRL+N);" ICON_MDI_DOWNLOAD "@Save node (CTRL+S);" ICON_MDI_DOWNLOAD "@Save scene (SHIFT+CTRL+S);" ICON_MD_BOOKMARK_ADDED "@Toggle Bookmark (CTRL+B);"); + if( choice == 1 ) editor_send("node_new"); + if( choice == 2 ) editor_send("node_save"); + if( choice == 3 ) editor_send("scene_save"); + if( choice == 4 ) editor_send("bookmark"); + + array(obj*) bookmarks = 0; + for each_map_ptr(*editor_bookmarked_map(), void*,o,int,bookmarked) { + if( *bookmarked ) { + array_push(bookmarks, *o); + } + } + if( ui_collapse("!" ICON_MD_BOOKMARK "Bookmarks", "DEBUG:BOOKMARK")) { + for each_array( bookmarks, obj*, o ) + editor_scene_( o, SCENE_ALL & ~(SCENE_RECURSE|SCENE_INDENT|SCENE_CHECKBOX) ); + ui_collapse_end(); + } + array_free(bookmarks); + + editor_scene_( editor.root, SCENE_ALL ); + + for each_array( editor.objs, obj*, o ) + editor_scene_( o, SCENE_ALL ); + + ui_separator(); + + // edit selection + for each_map(*editor_selected_map(), void*,o, int, k) { + if( k ) editor_inspect(o); + } + + editor_end(window_mode); + } + + return 0; +} + +AUTORUN { + array_push(editor.subeditors, editor_scene); +} #line 0 #line 1 "v4k_editor_browser.h" -#define BROWSER_ICON ICON_MD_FOLDER_SPECIAL -#define BROWSER_TITLE "Browser " BROWSER_ICON - -EDITOR_BIND(browser, "held(CTRL)&down(2)", { ui_show(BROWSER_TITLE, ui_visible(BROWSER_TITLE) ^ true); }); - -int editor_browser(int window_mode) { - window_mode = EDITOR_WINDOW; // force window - if( editor_begin(BROWSER_TITLE, window_mode) ) { - const char *file = 0; - if( ui_browse(&file, NULL) ) { - const char *sep = ifdef(win32, "\"", "'"); - app_exec(va("%s %s%s%s", ifdef(win32, "start \"\"", ifdef(osx, "open", "xdg-open")), sep, file, sep)); - } - editor_end(window_mode); - } - return 0; -} - -AUTORUN { - array_push(editor.subeditors, editor_browser); -} +#define BROWSER_ICON ICON_MD_FOLDER_SPECIAL +#define BROWSER_TITLE "Browser " BROWSER_ICON + +EDITOR_BIND(browser, "held(CTRL)&down(2)", { ui_show(BROWSER_TITLE, ui_visible(BROWSER_TITLE) ^ true); }); + +int editor_browser(int window_mode) { + window_mode = EDITOR_WINDOW; // force window + if( editor_begin(BROWSER_TITLE, window_mode) ) { + const char *file = 0; + if( ui_browse(&file, NULL) ) { + const char *sep = ifdef(win32, "\"", "'"); + app_exec(va("%s %s%s%s", ifdef(win32, "start \"\"", ifdef(osx, "open", "xdg-open")), sep, file, sep)); + } + editor_end(window_mode); + } + return 0; +} + +AUTORUN { + array_push(editor.subeditors, editor_browser); +} #line 0 #line 1 "v4k_editor_timeline.h" -#define TIMELINE_ICON ICON_MDI_CHART_TIMELINE -#define TIMELINE_TITLE "Timeline " TIMELINE_ICON - -EDITOR_BIND(timeline, "held(CTRL)&down(3)", { ui_show(TIMELINE_TITLE, ui_visible(TIMELINE_TITLE) ^ true); }); - -int ui_tween(const char *label, tween_t *t) { - if( ui_filter && ui_filter[0] ) if( !strstr(label, ui_filter) ) return 0; - - int expand_keys = label[0] == '!'; label += expand_keys; - const char *id = label; - if( strchr(id, '@') ) *strchr((char*)(id = (const char*)va("%s", label)), '@') = '\0'; - - enum { LABEL_SPACING = 250 }; - enum { ROUNDING = 0 }; - enum { THICKNESS = 1 }; - enum { PIXELS_PER_SECOND = 60 }; - enum { KEY_WIDTH = 5, KEY_HEIGHT = 5 }; - enum { TIMELINE_HEIGHT = 25 }; - enum { MARKER1_HEIGHT = 5, MARKER10_HEIGHT = 20, MARKER5_HEIGHT = (MARKER1_HEIGHT + MARKER10_HEIGHT) / 2 }; - unsigned base_color = WHITE; - unsigned time_color = YELLOW; - unsigned duration_color = ORANGE; - unsigned key_color = GREEN; - - int changed = 0; - -#if 0 - // two rows with height:30 composed of three widgets - nk_layout_row_template_begin(ui_ctx, 30); - nk_layout_row_template_push_variable(ui_ctx, t->duration * PIXELS_PER_SECOND); // min 80px. can grow - nk_layout_row_template_end(ui_ctx); -#endif - - char *sid = va("%s.%d", id, 0); - uint64_t hash = 14695981039346656037ULL, mult = 0x100000001b3ULL; - for(int i = 0; sid[i]; ++i) hash = (hash ^ sid[i]) * mult; - ui_hue = (hash & 0x3F) / (float)0x3F; ui_hue += !ui_hue; - - ui_label(label); - - struct nk_command_buffer *canvas = nk_window_get_canvas(ui_ctx); - struct nk_rect bounds; nk_layout_peek(&bounds, ui_ctx); - bounds.y -= 30; - - struct nk_rect baseline = bounds; baseline.y += 30/2; - baseline.x += LABEL_SPACING; - baseline.w -= LABEL_SPACING; - - // tween duration - { - struct nk_rect pos = baseline; - pos.w = pos.x + t->duration * PIXELS_PER_SECOND; - pos.y -= TIMELINE_HEIGHT/2; - pos.h = TIMELINE_HEIGHT; - nk_stroke_rect(canvas, pos, ROUNDING, THICKNESS*2, AS_NKCOLOR(duration_color)); - } - - // tween ranges - for(int i = 0, end = array_count(t->keyframes) - 1; i < end; ++i) { - tween_keyframe_t *k = t->keyframes + i; - tween_keyframe_t *next = k + 1; - - struct nk_rect pos = baseline; - pos.x += k->t * PIXELS_PER_SECOND; - pos.w = (next->t - k->t) * PIXELS_PER_SECOND; - pos.y -= TIMELINE_HEIGHT/2; - pos.h = TIMELINE_HEIGHT; - - char *sid = va("%s.%d", id, i); - uint64_t hash = 14695981039346656037ULL, mult = 0x100000001b3ULL; - for(int i = 0; sid[i]; ++i) hash = (hash ^ sid[i]) * mult; - ui_hue = (hash & 0x3F) / (float)0x3F; ui_hue += !ui_hue; - - struct nk_color c = nk_hsva_f(ui_hue, 0.75f, 0.8f, ui_alpha); - nk_fill_rect(canvas, pos, ROUNDING, k->ease == EASE_ZERO ? AS_NKCOLOR(0) : c); // AS_NKCOLOR(track_color)); - } - - // horizontal line - nk_stroke_line(canvas, baseline.x, baseline.y, baseline.x+baseline.w,baseline.y, THICKNESS, AS_NKCOLOR(base_color)); - - // unit, 5-unit and 10-unit markers - for( float i = 0, j = 0; i < baseline.w; i += PIXELS_PER_SECOND/10, ++j ) { - int len = !((int)j%10) ? MARKER10_HEIGHT : !((int)j%5) ? MARKER5_HEIGHT : MARKER1_HEIGHT; - nk_stroke_line(canvas, baseline.x+i, baseline.y-len, baseline.x+i, baseline.y+len, THICKNESS, AS_NKCOLOR(base_color)); - } - - // time marker - float px = t->time * PIXELS_PER_SECOND; - nk_stroke_line(canvas, baseline.x+px, bounds.y, baseline.x+px, bounds.y+bounds.h, THICKNESS*2, AS_NKCOLOR(time_color)); - nk_draw_symbol(canvas, NK_SYMBOL_TRIANGLE_DOWN, ((struct nk_rect){ baseline.x+px-4,bounds.y-4-8,8,8}), /*bg*/AS_NKCOLOR(0), /*fg*/AS_NKCOLOR(time_color), 0.f/*border_width*/, ui_ctx->style.font); - - // key markers - for each_array_ptr(t->keyframes, tween_keyframe_t, k) { - struct nk_rect pos = baseline; - pos.x += k->t * PIXELS_PER_SECOND; - - vec2 romboid[] = { - {pos.x-KEY_WIDTH,pos.y}, {pos.x,pos.y-KEY_HEIGHT}, - {pos.x+KEY_WIDTH,pos.y}, {pos.x,pos.y+KEY_HEIGHT} - }; - - nk_fill_polygon(canvas, (float*)romboid, countof(romboid), AS_NKCOLOR(key_color)); - } - - // keys ui - if( expand_keys ) - for(int i = 0, end = array_count(t->keyframes); i < end; ++i) { - tween_keyframe_t *k = t->keyframes + i; - if( ui_collapse(va("Key %d", i), va("%s.%d", id, i))) { - changed |= ui_float("Time", &k->t); - changed |= ui_float3("Value", &k->v.x); - changed |= ui_list("Ease", ease_enums(), EASE_NUM, &k->ease ); - ui_collapse_end(); - } - } - - return changed; -} - -tween_t* rand_tween() { - tween_t demo = tween(); - int num_keys = randi(2,8); - double t = 0; - for( int i = 0; i < num_keys; ++i) { - tween_setkey(&demo, t, scale3(vec3(randf(),randf(),randf()),randi(-5,5)), randi(0,EASE_NUM) ); - t += randi(1,5) / ((float)(1 << randi(0,2))); - } - tween_t *p = CALLOC(1, sizeof(tween_t)); - memcpy(p, &demo, sizeof(tween_t)); - return p; -} - -int editor_timeline(int window_mode) { - static array(tween_t*) tweens = 0; - - do_once { - array_push(tweens, rand_tween()); - } - - if( editor.t == 0 ) - for each_array(tweens, tween_t*,t) { - tween_reset(t); - } - else - for each_array(tweens, tween_t*,t) { - tween_update(t, editor.dt); - } - - static void *selected = NULL; - if( editor_begin(TIMELINE_TITLE, window_mode) ) { - - int choice = ui_toolbar(ICON_MDI_PLUS ";" ICON_MDI_MINUS ); - if( choice == 1 ) array_push(tweens, rand_tween()); - if( choice == 2 && selected ) { - int target = -1; - for( int i = 0, end = array_count(tweens); i < end; ++i ) if( tweens[i] == selected ) { target = i; break; } - if( target >= 0 ) { array_erase_slow(tweens, target); selected = NULL; } - } - - for each_array(tweens, tween_t*,t) { - ui_tween(va("%s%p@%05.2fs Value: %s", t == selected ? "!":"", t, t->time, ftoa3(t->result)), t); - if(ui_label_icon_clicked_L.x) selected = (t != selected) ? t : NULL; - } - - editor_end(window_mode); - } - return 0; -} - -AUTORUN { - array_push(editor.subeditors, editor_timeline); -} +#define TIMELINE_ICON ICON_MDI_CHART_TIMELINE +#define TIMELINE_TITLE "Timeline " TIMELINE_ICON + +EDITOR_BIND(timeline, "held(CTRL)&down(3)", { ui_show(TIMELINE_TITLE, ui_visible(TIMELINE_TITLE) ^ true); }); + +int ui_tween(const char *label, tween_t *t) { + if( ui_filter && ui_filter[0] ) if( !strstr(label, ui_filter) ) return 0; + + int expand_keys = label[0] == '!'; label += expand_keys; + const char *id = label; + if( strchr(id, '@') ) *strchr((char*)(id = (const char*)va("%s", label)), '@') = '\0'; + + enum { LABEL_SPACING = 250 }; + enum { ROUNDING = 0 }; + enum { THICKNESS = 1 }; + enum { PIXELS_PER_SECOND = 60 }; + enum { KEY_WIDTH = 5, KEY_HEIGHT = 5 }; + enum { TIMELINE_HEIGHT = 25 }; + enum { MARKER1_HEIGHT = 5, MARKER10_HEIGHT = 20, MARKER5_HEIGHT = (MARKER1_HEIGHT + MARKER10_HEIGHT) / 2 }; + unsigned base_color = WHITE; + unsigned time_color = YELLOW; + unsigned duration_color = ORANGE; + unsigned key_color = GREEN; + + int changed = 0; + +#if 0 + // two rows with height:30 composed of three widgets + nk_layout_row_template_begin(ui_ctx, 30); + nk_layout_row_template_push_variable(ui_ctx, t->duration * PIXELS_PER_SECOND); // min 80px. can grow + nk_layout_row_template_end(ui_ctx); +#endif + + char *sid = va("%s.%d", id, 0); + uint64_t hash = 14695981039346656037ULL, mult = 0x100000001b3ULL; + for(int i = 0; sid[i]; ++i) hash = (hash ^ sid[i]) * mult; + ui_hue = (hash & 0x3F) / (float)0x3F; ui_hue += !ui_hue; + + ui_label(label); + + struct nk_command_buffer *canvas = nk_window_get_canvas(ui_ctx); + struct nk_rect bounds; nk_layout_peek(&bounds, ui_ctx); + bounds.y -= 30; + + struct nk_rect baseline = bounds; baseline.y += 30/2; + baseline.x += LABEL_SPACING; + baseline.w -= LABEL_SPACING; + + // tween duration + { + struct nk_rect pos = baseline; + pos.w = pos.x + t->duration * PIXELS_PER_SECOND; + pos.y -= TIMELINE_HEIGHT/2; + pos.h = TIMELINE_HEIGHT; + nk_stroke_rect(canvas, pos, ROUNDING, THICKNESS*2, AS_NKCOLOR(duration_color)); + } + + // tween ranges + for(int i = 0, end = array_count(t->keyframes) - 1; i < end; ++i) { + tween_keyframe_t *k = t->keyframes + i; + tween_keyframe_t *next = k + 1; + + struct nk_rect pos = baseline; + pos.x += k->t * PIXELS_PER_SECOND; + pos.w = (next->t - k->t) * PIXELS_PER_SECOND; + pos.y -= TIMELINE_HEIGHT/2; + pos.h = TIMELINE_HEIGHT; + + char *sid = va("%s.%d", id, i); + uint64_t hash = 14695981039346656037ULL, mult = 0x100000001b3ULL; + for(int i = 0; sid[i]; ++i) hash = (hash ^ sid[i]) * mult; + ui_hue = (hash & 0x3F) / (float)0x3F; ui_hue += !ui_hue; + + struct nk_color c = nk_hsva_f(ui_hue, 0.75f, 0.8f, ui_alpha); + nk_fill_rect(canvas, pos, ROUNDING, k->ease == EASE_ZERO ? AS_NKCOLOR(0) : c); // AS_NKCOLOR(track_color)); + } + + // horizontal line + nk_stroke_line(canvas, baseline.x, baseline.y, baseline.x+baseline.w,baseline.y, THICKNESS, AS_NKCOLOR(base_color)); + + // unit, 5-unit and 10-unit markers + for( float i = 0, j = 0; i < baseline.w; i += PIXELS_PER_SECOND/10, ++j ) { + int len = !((int)j%10) ? MARKER10_HEIGHT : !((int)j%5) ? MARKER5_HEIGHT : MARKER1_HEIGHT; + nk_stroke_line(canvas, baseline.x+i, baseline.y-len, baseline.x+i, baseline.y+len, THICKNESS, AS_NKCOLOR(base_color)); + } + + // time marker + float px = t->time * PIXELS_PER_SECOND; + nk_stroke_line(canvas, baseline.x+px, bounds.y, baseline.x+px, bounds.y+bounds.h, THICKNESS*2, AS_NKCOLOR(time_color)); + nk_draw_symbol(canvas, NK_SYMBOL_TRIANGLE_DOWN, ((struct nk_rect){ baseline.x+px-4,bounds.y-4-8,8,8}), /*bg*/AS_NKCOLOR(0), /*fg*/AS_NKCOLOR(time_color), 0.f/*border_width*/, ui_ctx->style.font); + + // key markers + for each_array_ptr(t->keyframes, tween_keyframe_t, k) { + struct nk_rect pos = baseline; + pos.x += k->t * PIXELS_PER_SECOND; + + vec2 romboid[] = { + {pos.x-KEY_WIDTH,pos.y}, {pos.x,pos.y-KEY_HEIGHT}, + {pos.x+KEY_WIDTH,pos.y}, {pos.x,pos.y+KEY_HEIGHT} + }; + + nk_fill_polygon(canvas, (float*)romboid, countof(romboid), AS_NKCOLOR(key_color)); + } + + // keys ui + if( expand_keys ) + for(int i = 0, end = array_count(t->keyframes); i < end; ++i) { + tween_keyframe_t *k = t->keyframes + i; + if( ui_collapse(va("Key %d", i), va("%s.%d", id, i))) { + changed |= ui_float("Time", &k->t); + changed |= ui_float3("Value", &k->v.x); + changed |= ui_list("Ease", ease_enums(), EASE_NUM, &k->ease ); + ui_collapse_end(); + } + } + + return changed; +} + +tween_t* rand_tween() { + tween_t demo = tween(); + int num_keys = randi(2,8); + double t = 0; + for( int i = 0; i < num_keys; ++i) { + tween_setkey(&demo, t, scale3(vec3(randf(),randf(),randf()),randi(-5,5)), randi(0,EASE_NUM) ); + t += randi(1,5) / ((float)(1 << randi(0,2))); + } + tween_t *p = CALLOC(1, sizeof(tween_t)); + memcpy(p, &demo, sizeof(tween_t)); + return p; +} + +int editor_timeline(int window_mode) { + static array(tween_t*) tweens = 0; + + do_once { + array_push(tweens, rand_tween()); + } + + if( editor.t == 0 ) + for each_array(tweens, tween_t*,t) { + tween_reset(t); + } + else + for each_array(tweens, tween_t*,t) { + tween_update(t, editor.dt); + } + + static void *selected = NULL; + if( editor_begin(TIMELINE_TITLE, window_mode) ) { + + int choice = ui_toolbar(ICON_MDI_PLUS ";" ICON_MDI_MINUS ); + if( choice == 1 ) array_push(tweens, rand_tween()); + if( choice == 2 && selected ) { + int target = -1; + for( int i = 0, end = array_count(tweens); i < end; ++i ) if( tweens[i] == selected ) { target = i; break; } + if( target >= 0 ) { array_erase_slow(tweens, target); selected = NULL; } + } + + for each_array(tweens, tween_t*,t) { + ui_tween(va("%s%p@%05.2fs Value: %s", t == selected ? "!":"", t, t->time, ftoa3(t->result)), t); + if(ui_label_icon_clicked_L.x) selected = (t != selected) ? t : NULL; + } + + editor_end(window_mode); + } + return 0; +} + +AUTORUN { + array_push(editor.subeditors, editor_timeline); +} #line 0 #line 1 "v4k_editor_console.h" -#define CONSOLE_ICON ICON_MDI_CONSOLE -#define CONSOLE_TITLE "Console " CONSOLE_ICON - -EDITOR_BIND(console, "held(CTRL)&down(4)", { ui_show(CONSOLE_TITLE, ui_visible(CONSOLE_TITLE) ^ true); }); - -int editor_console(int window_mode) { - if( editor_begin(CONSOLE_TITLE, window_mode) ) { - - // peek complete window space - struct nk_rect bounds = nk_window_get_content_region(ui_ctx); - - enum { CONSOLE_LINE_HEIGHT = 20 }; - static array(char*) lines = 0; - do_once { - array_push(lines, stringf("> Editor v%s. Type `%s` for help.", EDITOR_VERSION, "")); - } - int max_lines = (bounds.h - UI_ROW_HEIGHT) / (CONSOLE_LINE_HEIGHT * 2); - if( max_lines >= 1 ) { - nk_layout_row_static(ui_ctx, bounds.h - UI_ROW_HEIGHT, bounds.w, 1); - if(nk_group_begin(ui_ctx, "console.group", NK_WINDOW_NO_SCROLLBAR|NK_WINDOW_BORDER)) { - nk_layout_row_static(ui_ctx, CONSOLE_LINE_HEIGHT, bounds.w, 1); - for( int i = array_count(lines); i < max_lines; ++i ) - array_push_front(lines, 0); - for( int i = array_count(lines) - max_lines; i < array_count(lines); ++i ) { - if( !lines[i] ) { - #if 0 // debug - nk_label_wrap(ui_ctx, va("%d.A/%d",i+1,max_lines)); - nk_label_wrap(ui_ctx, va("%d.B/%d",i+1,max_lines)); - #else - nk_label_wrap(ui_ctx, ""); - nk_label_wrap(ui_ctx, ""); - #endif - } else { - nk_label_wrap(ui_ctx, lines[i]); - const char *answer = isdigit(*lines[i]) ? editor_recv( atoi(lines[i]), 0 ) : NULL; - nk_label_wrap(ui_ctx, answer ? answer : ""); - } - } - nk_group_end(ui_ctx); - } - } - static char *cmd = 0; - if( ui_string(NULL, &cmd) ) { - int jobid = editor_send(cmd); - array_push(lines, stringf("%d> %s", jobid, cmd)); - cmd[0] = 0; - } - - editor_end(window_mode); - } - return 0; -} - -AUTORUN { - array_push(editor.subeditors, editor_console); -} +#define CONSOLE_ICON ICON_MDI_CONSOLE +#define CONSOLE_TITLE "Console " CONSOLE_ICON + +EDITOR_BIND(console, "held(CTRL)&down(4)", { ui_show(CONSOLE_TITLE, ui_visible(CONSOLE_TITLE) ^ true); }); + +int editor_console(int window_mode) { + if( editor_begin(CONSOLE_TITLE, window_mode) ) { + + // peek complete window space + struct nk_rect bounds = nk_window_get_content_region(ui_ctx); + + enum { CONSOLE_LINE_HEIGHT = 20 }; + static array(char*) lines = 0; + do_once { + array_push(lines, stringf("> Editor v%s. Type `%s` for help.", EDITOR_VERSION, "")); + } + int max_lines = (bounds.h - UI_ROW_HEIGHT) / (CONSOLE_LINE_HEIGHT * 2); + if( max_lines >= 1 ) { + nk_layout_row_static(ui_ctx, bounds.h - UI_ROW_HEIGHT, bounds.w, 1); + if(nk_group_begin(ui_ctx, "console.group", NK_WINDOW_NO_SCROLLBAR|NK_WINDOW_BORDER)) { + nk_layout_row_static(ui_ctx, CONSOLE_LINE_HEIGHT, bounds.w, 1); + for( int i = array_count(lines); i < max_lines; ++i ) + array_push_front(lines, 0); + for( int i = array_count(lines) - max_lines; i < array_count(lines); ++i ) { + if( !lines[i] ) { + #if 0 // debug + nk_label_wrap(ui_ctx, va("%d.A/%d",i+1,max_lines)); + nk_label_wrap(ui_ctx, va("%d.B/%d",i+1,max_lines)); + #else + nk_label_wrap(ui_ctx, ""); + nk_label_wrap(ui_ctx, ""); + #endif + } else { + nk_label_wrap(ui_ctx, lines[i]); + const char *answer = isdigit(*lines[i]) ? editor_recv( atoi(lines[i]), 0 ) : NULL; + nk_label_wrap(ui_ctx, answer ? answer : ""); + } + } + nk_group_end(ui_ctx); + } + } + static char *cmd = 0; + if( ui_string(NULL, &cmd) ) { + int jobid = editor_send(cmd); + array_push(lines, stringf("%d> %s", jobid, cmd)); + cmd[0] = 0; + } + + editor_end(window_mode); + } + return 0; +} + +AUTORUN { + array_push(editor.subeditors, editor_console); +} #line 0 #line 1 "v4k_editor_nodes.h" -#define NODES_ICON ICON_MDI_GRAPH -#define NODES_TITLE "Nodes " NODES_ICON - -EDITOR_BIND(nodes, "held(CTRL)&down(5)", { ui_show(NODES_TITLE, ui_visible(NODES_TITLE) ^ true); }); - -/* -A basic node-based UI built with Nuklear. -Builds on the node editor example included in Nuklear v1.00, with the aim of -being used as a prototype for implementing a functioning node editor. - -Features: -- Nodes of different types. Currently their implementations are #included in - the main file, but they could easily be turned into eg. a plugin system. -- Pins/pins of different types -- currently float values and colors. -- Adding and removing nodes. -- Linking nodes, with validation (one link per input, only link similar pins). -- Detaching and moving links. -- Evaluation of output values of connected nodes. -- Memory management based on fixed size arrays for links and node pointers -- Multiple node types -- Multiple pin types -- Linking between pins of the same type -- Detaching and reattaching links -- Getting value from linked node if pin is connected - -Todo: -- Complete pin types. -- Allow dragging from output to input pin. -- Cut link by CTRL+clicking input pin. -- Cut link by drawing intersect line on a link. -- Group elemnts together with mouse, or LSHIFT+clicking. -- Drag groups. -- DEL elements. -- DEL groups. -- CTRL-C/CTRL-V/CTRL-X elements. -- CTRL-C/CTRL-V/CTRL-X groups. -- CTRL-Z,CTRL-Y. -- CTRL-N. -- CTRL-L,CTRL-S. -- CTRL-F. -- CTRL-Wheel Zooming. -- Allow to extend node types from Lua. - -Extra todo: -- Execution Flow (see: nk_stroke_triangle, nk_fill_triangle) -- Complete missing nodes (see: nk_draw_image, nk_draw_text) -- Right-click could visualize node/board diagram as Lua script. -- Once that done, copy/pasting scripts should work within editor. - -Sources: -- https://github.com/Immediate-Mode-UI/Nuklear/pull/561 -- https://github.com/vurtun/nuklear/blob/master/demo/node_editor.c -*/ - -typedef enum pin_type_t { - type_flow, - type_int,type_float, - type_block,type_texture,type_image, - type_color, - /* - type_bool, - type_char, type_string, - type_int2, type_int3, type_int4, - type_float2, type_float3, type_float4, - type_array, type_map, - */ - - type_total -} pin_type_t; - -struct node_pin { - pin_type_t pin_type; - nk_bool is_connected; - struct node* connected_node; - int connected_pin; -}; - -struct node { - int ID; - char name[32]; - struct nk_rect bounds; - int input_count; - int output_count; - struct node_pin *inputs; - struct node_pin *outputs; - struct { - float in_padding_x; - float in_padding_y; - float in_spacing_y; - float out_padding_x; - float out_padding_y; - float out_spacing_y; - } pin_spacing; /* Maybe this should be called "node_layout" and include the bounds? */ - struct node *next; /* Z ordering only */ - struct node *prev; /* Z ordering only */ - - void* (*eval_func)(struct node*, int oIndex); - void (*display_func)(struct nk_context*, struct node*); -}; - -struct node_link { - struct node* input_node; - int input_pin; - struct node* output_node; - int output_pin; - nk_bool is_active; -}; - -struct node_linking { - int active; - struct node *node; - int input_id; - int input_pin; -}; - -struct node_editor { - int initialized; - struct node *node_buf[32]; - struct node_link links[64]; - struct node *output_node; - struct node *begin; - struct node *end; - int node_count; - int link_count; - struct nk_rect bounds; - struct node *selected; - int show_grid; - struct nk_vec2 scrolling; - struct node_linking linking; -}; - -/* === PROTOTYPES === */ -/* The node implementations need these two functions. */ -/* These could/should go in a header file along with the node and node_pin structs and be #included in the node implementations */ - -struct node* node_editor_add(struct node_editor *editor, size_t nodeSize, const char *name, struct nk_rect bounds, int in_count, int out_count); -void* node_editor_eval_connected(struct node *node, int input_pin_number); -/* ================== */ - -/* === NODE TYPE IMPLEMENTATIONS === */ - -#define NODE_DEFAULT_ROW_HEIGHT 25 - - -// ---------------------------------------------------------------------------------------------------- -// #include "node_output.h" - -struct node_type_output { - struct node node; - struct nk_colorf input_val; -}; - -struct nk_colorf *node_output_get(struct node* node) { - struct node_type_output *output_node = (struct node_type_output*)node; - if (!node->inputs[0].is_connected) { - struct nk_colorf black = {0.0f, 0.0f, 0.0f, 0.0f}; - output_node->input_val = black; - } - return &output_node->input_val; -} - -static void node_output_display(struct nk_context *ctx, struct node *node) { - if (node->inputs[0].is_connected) { - struct node_type_output *output_node = (struct node_type_output*)node; - output_node->input_val = *(struct nk_colorf*)node_editor_eval_connected(node, 0); - nk_layout_row_dynamic(ctx, 60, 1); - nk_button_color(ctx, nk_rgba_cf(output_node->input_val)); - } -} - -struct node* node_output_create(struct node_editor *editor, struct nk_vec2 position) { - struct node_type_output *output_node = (struct node_type_output*)node_editor_add(editor, sizeof(struct node_type_output), "Output", nk_rect(position.x, position.y, 100, 100), 1, 0); - if (output_node){ - output_node->node.inputs[0].pin_type = type_color; - output_node->node.display_func = node_output_display; - } - return (struct node*)output_node; -} - -// ---------------------------------------------------------------------------------------------------- -// #include "node_float.h" - -struct node_type_float { - struct node node; - float output_val; -}; - -static float *node_float_eval(struct node* node, int oIndex) { - struct node_type_float *float_node = (struct node_type_float*)node; - NK_ASSERT(oIndex == 0); - return &float_node->output_val; -} - -static void node_float_draw(struct nk_context *ctx, struct node *node) { - struct node_type_float *float_node = (struct node_type_float*)node; - nk_layout_row_dynamic(ctx, NODE_DEFAULT_ROW_HEIGHT, 1); - float_node->output_val = nk_propertyf(ctx, "#Value:", 0.0f, float_node->output_val, 1.0f, 0.01f, 0.01f); -} - -void node_float_create(struct node_editor *editor, struct nk_vec2 position) { - struct node_type_float *float_node = (struct node_type_float*)node_editor_add(editor, sizeof(struct node_type_float), "Float", nk_rect(position.x, position.y, 180, 75), 0, 1); - if (float_node) - { - float_node->output_val = 1.0f; - float_node->node.display_func = node_float_draw; - float_node->node.eval_func = (void*(*)(struct node*, int)) node_float_eval; - } -} - -// ---------------------------------------------------------------------------------------------------- -// #include "node_color.h" - -struct node_type_color { - struct node node; - float input_val[4]; - struct nk_colorf output_val; -}; - -static struct nk_colorf *node_color_eval(struct node* node, int oIndex) -{ - struct node_type_color *color_node = (struct node_type_color*)node; - NK_ASSERT(oIndex == 0); /* only one output connector */ - - return &color_node->output_val; -} - - -static void node_color_draw(struct nk_context *ctx, struct node *node) -{ - struct node_type_color *color_node = (struct node_type_color*)node; - float eval_result; /* Get the values from connected nodes into this so the inputs revert on disconnect */ - const char* labels[4] = {"#R:","#G:","#B:","#A:"}; - float color_val[4]; /* Because we can't just loop through the struct... */ - nk_layout_row_dynamic(ctx, NODE_DEFAULT_ROW_HEIGHT, 1); - nk_button_color(ctx, nk_rgba_cf(color_node->output_val)); - - for (int i = 0; i < 4; i++) - { - if (color_node->node.inputs[i].is_connected) { - eval_result = *(float*)node_editor_eval_connected(node, i); - eval_result = nk_propertyf(ctx, labels[i], eval_result, eval_result, eval_result, 0.01f, 0.01f); - color_val[i] = eval_result; - } - else { - color_node->input_val[i] = nk_propertyf(ctx, labels[i], 0.0f, color_node->input_val[i], 1.0f, 0.01f, 0.01f); - color_val[i] = color_node->input_val[i]; - } - } - - color_node->output_val.r = color_val[0]; - color_node->output_val.g = color_val[1]; - color_node->output_val.b = color_val[2]; - color_node->output_val.a = color_val[3]; -} - -void node_color_create(struct node_editor *editor, struct nk_vec2 position) -{ - struct node_type_color *color_node = (struct node_type_color*)node_editor_add(editor, sizeof(struct node_type_color), "Color", nk_rect(position.x, position.y, 180, 190), 4, 1); - if (color_node) - { - const struct nk_colorf black = {0.0f, 0.0f, 0.0f, 1.0f}; - - for (int i = 0; i < color_node->node.input_count; i++) - color_node->node.inputs[i].pin_type = type_float; - color_node->node.outputs[0].pin_type = type_color; - - color_node->node.pin_spacing.in_padding_y += NODE_DEFAULT_ROW_HEIGHT; - - color_node->input_val[0] = 0.0f; - color_node->input_val[1] = 0.0f; - color_node->input_val[2] = 0.0f; - color_node->input_val[3] = 1.0f; - - color_node->output_val = black; - - color_node->node.display_func = node_color_draw; - color_node->node.eval_func = (void*(*)(struct node*, int)) node_color_eval; - } -} - -// ---------------------------------------------------------------------------------------------------- -// #include "node_blend.h" - -struct node_type_blend { - struct node node; - struct nk_colorf input_val[2]; - struct nk_colorf output_val; - float blend_val; -}; - -static struct nk_colorf *node_blend_eval(struct node *node, int oIndex) { - struct node_type_blend* blend_node = (struct node_type_blend*)node; - return &blend_node->output_val; -} - -static void node_blend_display(struct nk_context *ctx, struct node *node) { - struct node_type_blend *blend_node = (struct node_type_blend*)node; - const struct nk_colorf blank = {0.0f, 0.0f, 0.0f, 0.0f}; - float blend_amnt; - - nk_layout_row_dynamic(ctx, NODE_DEFAULT_ROW_HEIGHT, 1); - for (int i = 0; i < 2; i++){ - if(node->inputs[i].is_connected) { - blend_node->input_val[i] = *(struct nk_colorf*)node_editor_eval_connected(node, i); - } - else { - blend_node->input_val[i] = blank; - } - nk_button_color(ctx, nk_rgba_cf(blend_node->input_val[i])); - } - - if (node->inputs[2].is_connected) { - blend_amnt = *(float*)node_editor_eval_connected(node, 2); - blend_amnt = nk_propertyf(ctx, "#Blend", blend_amnt, blend_amnt, blend_amnt, 0.01f, 0.01f); - } - else { - blend_node->blend_val = nk_propertyf(ctx, "#Blend", 0.0f, blend_node->blend_val, 1.0f, 0.01f, 0.01f); - blend_amnt = blend_node->blend_val; - } - - - if(node->inputs[0].is_connected && node->inputs[1].is_connected) { - blend_node->output_val.r = blend_node->input_val[0].r * (1.0f-blend_amnt) + blend_node->input_val[1].r * blend_amnt; - blend_node->output_val.g = blend_node->input_val[0].g * (1.0f-blend_amnt) + blend_node->input_val[1].g * blend_amnt; - blend_node->output_val.b = blend_node->input_val[0].b * (1.0f-blend_amnt) + blend_node->input_val[1].b * blend_amnt; - blend_node->output_val.a = blend_node->input_val[0].a * (1.0f-blend_amnt) + blend_node->input_val[1].a * blend_amnt; - } - else { - blend_node->output_val = blank; - } -} - -void node_blend_create(struct node_editor *editor, struct nk_vec2 position) { - struct node_type_blend* blend_node = (struct node_type_blend*)node_editor_add(editor, sizeof(struct node_type_blend), "Blend", nk_rect(position.x, position.y, 180, 130), 3, 1); - if (blend_node) { - const struct nk_colorf blank = {0.0f, 0.0f, 0.0f, 0.0f}; - for (int i = 0; i < (int)NK_LEN(blend_node->input_val); i++) - blend_node->node.inputs[i].pin_type = type_color; - blend_node->node.outputs[0].pin_type = type_color; - - // blend_node->node.pin_spacing.in_padding_y = 42.0f; - // blend_node->node.pin_spacing.in_spacing_y = 29.0f; - - for (int i = 0; i < (int)NK_LEN(blend_node->input_val); i++) - blend_node->input_val[i] = blank; - blend_node->output_val = blank; - - blend_node->blend_val = 0.5f; - - blend_node->node.display_func = node_blend_display; - blend_node->node.eval_func = (void*(*)(struct node*, int)) node_blend_eval; - - } -} - -/* ================================= */ - -#define NK_RGB3(r,g,b) {r,g,b,255} -#define BG_COLOR ((struct nk_color){60,60,60,192}) // nk_rgba(0,0,0,192) - -static -struct editor_node_style { - int pin_type; - const char *shape; - struct nk_color color_idle; - struct nk_color color_hover; -} styles[] = { - // order matters: - { type_flow, "triangle_right", NK_RGB3(200,200,200), NK_RGB3(255,255,255) }, // if .num_links == 0 - { type_int, "circle", NK_RGB3(33,227,175), NK_RGB3(135,239,195) }, - { type_float, "circle", NK_RGB3(156,253,65), NK_RGB3(144,225,137) }, - { type_block, "circle", NK_RGB3(6,165,239), NK_RGB3(137,196,247) }, - { type_texture, "circle", NK_RGB3(148,0,0), NK_RGB3(183,137,137) }, - { type_image, "circle", NK_RGB3(200,130,255), NK_RGB3(220,170,255) }, - { type_color, "circle", NK_RGB3(252,200,35), NK_RGB3(255,217,140) }, -}; - -#define COLOR_FLOW_HI styles[type_flow].color_hover -#define COLOR_FLOW_LO styles[type_flow].color_idle - -#define GRID_SIZE 64.0f -#define GRID_COLOR ((struct nk_color)NK_RGB3(80,80,120)) -#define GRID_THICKNESS 1.0f - -// 4 colors: top-left, top-right, bottom-right, bottom-left -#define GRID_BG_COLORS ((struct nk_color){30,30,30,255}), ((struct nk_color){40,20,0,255}), ((struct nk_color){30,30,30,255}), ((struct nk_color){20,30,40,255}) - -#define LINK_THICKNESS 1.0f -#define LINK_DRAW(POINT_A,POINT_B,COLOR) do { \ - vec2 a = (POINT_A); \ - vec2 b = (POINT_B); \ - nk_stroke_line(canvas, a.x, a.y, b.x, b.y, LINK_THICKNESS, COLOR); \ -} while(0) -#undef LINK_DRAW -#define LINK_DRAW(POINT_A,POINT_B,COLOR) do { \ - vec2 a = (POINT_A); \ - vec2 b = (POINT_B); \ - nk_stroke_curve(canvas, a.x, a.y, a.x+50, a.y, b.x-50, b.y, b.x, b.y, LINK_THICKNESS, COLOR); \ -} while(0) -#undef LINK_DRAW -#define LINK_DRAW(POINT_A,POINT_B,COLOR) do { \ - vec2 a = (POINT_A); \ - vec2 b = (POINT_B); \ - float dist2 = len2( sub2( ptr2(&b.x), ptr2(&a.x) ) ); \ - vec2 mid_a = mix2( ptr2(&a.x), ptr2(&b.x), 0.25 ); mid_a.y += dist2/2; \ - vec2 mid_b = mix2( ptr2(&a.x), ptr2(&b.x), 0.75 ); mid_b.y += dist2/3; \ - nk_stroke_curve(canvas, a.x, a.y, mid_a.x, mid_a.y, mid_b.x, mid_b.y, b.x, b.y, LINK_THICKNESS, COLOR); \ -} while(0) - - -#define PIN_RADIUS 12 -#define PIN_THICKNESS 1.0f -#define PIN_DRAW(PIN_ADDR,POINT,RADIUS) do { \ - circle.x = (POINT).x - (RADIUS) / 2; \ - circle.y = (POINT).y - (RADIUS) / 2; \ - circle.w = circle.h = (RADIUS); \ - struct nk_color color = node_get_type_color((PIN_ADDR).pin_type); \ - if((PIN_ADDR).is_connected) \ - nk_fill_circle(canvas, circle, color); \ - else \ - nk_stroke_circle(canvas, circle, PIN_THICKNESS, color); \ -} while(0) - - -static struct nk_color node_get_type_color(unsigned pin_type) { - for( int i = 0; i < type_total; ++i ) - if( styles[i].pin_type == pin_type ) - return styles[i].color_idle; - return ((struct nk_color)NK_RGB3(255,0,255)); -} - -static void node_editor_push(struct node_editor *editor, struct node *node) { - if (!editor->begin) { - node->next = NULL; - node->prev = NULL; - editor->begin = node; - editor->end = node; - } else { - node->prev = editor->end; - if (editor->end) - editor->end->next = node; - node->next = NULL; - editor->end = node; - } -} - -static void node_editor_pop(struct node_editor *editor, struct node *node) { - if (node->next) - node->next->prev = node->prev; - if (node->prev) - node->prev->next = node->next; - if (editor->end == node) - editor->end = node->prev; - if (editor->begin == node) - editor->begin = node->next; - node->next = NULL; - node->prev = NULL; -} - -static struct node* node_editor_find_by_id(struct node_editor *editor, int ID) { - struct node *iter = editor->begin; - while (iter) { - if (iter->ID == ID) - return iter; - iter = iter->next; - } - return NULL; -} - -static struct node_link* node_editor_find_link_by_output(struct node_editor *editor, struct node *output_node, int node_input_connector) { - for( int i = 0; i < editor->link_count; i++ ) { - if (editor->links[i].output_node == output_node && - editor->links[i].output_pin == node_input_connector && - editor->links[i].is_active == nk_true) { - return &editor->links[i]; - } - } - return NULL; -} - -static struct node_link* node_editor_find_link_by_input(struct node_editor *editor, struct node *input_node, int node_output_connector) { - for( int i = 0; i < editor->link_count; i++ ) { - if (editor->links[i].input_node == input_node && - editor->links[i].input_pin == node_output_connector && - editor->links[i].is_active == nk_true) { - return &editor->links[i]; - } - } - return NULL; -} - -static void node_editor_delete_link(struct node_link *link) { - link->is_active = nk_false; - link->input_node->outputs[link->input_pin].is_connected = nk_false; - link->output_node->inputs[link->output_pin].is_connected = nk_false; -} - -struct node* node_editor_add(struct node_editor *editor, size_t nodeSize, const char *name, struct nk_rect bounds, int in_count, int out_count) { - static int IDs = 0; - struct node *node = NULL; - - if ((nk_size)editor->node_count < NK_LEN(editor->node_buf)) { - /* node_buf has unused pins */ - node = MALLOC(nodeSize); - editor->node_buf[editor->node_count++] = node; - node->ID = IDs++; - } else { - /* check for freed up pins in node_buf */ - for (int i = 0; i < editor->node_count; i++) { - if (editor->node_buf[i] == NULL) { - node = MALLOC(nodeSize); - editor->node_buf[i] = node; - node->ID = i; - break; - } - } - } - if (node == NULL) { - puts("Node creation failed"); - return NULL; - } - - node->bounds = bounds; - - node->input_count = in_count; - node->output_count = out_count; - - node->inputs = MALLOC(node->input_count * sizeof(struct node_pin)); - node->outputs = MALLOC(node->output_count * sizeof(struct node_pin)); - - for (int i = 0; i < node->input_count; i++) { - node->inputs[i].is_connected = nk_false; - node->inputs[i].pin_type = type_float; /* default pin type */ - } - for (int i = 0; i < node->output_count; i++) { - node->outputs[i].is_connected = nk_false; - node->outputs[i].pin_type = type_float; /* default pin type */ - } - - /* default pin spacing */ - node->pin_spacing.in_padding_x = 2; - node->pin_spacing.in_padding_y = 32 + 25/2 + 6; // titlebar height + next half row + adjust - node->pin_spacing.in_spacing_y = 25; // row height+border - node->pin_spacing.out_padding_x = 3; - node->pin_spacing.out_padding_y = 32 + 25/2 + 6; // titlebar height + next half row + adjust - node->pin_spacing.out_spacing_y = 25; // row height+border - - strcpy(node->name, name); - node_editor_push(editor, node); - - return node; -} - -void *node_editor_eval_connected(struct node* node, int input_pin_number) { - NK_ASSERT(node->inputs[input_pin_number].is_connected); - return node->inputs[input_pin_number].connected_node->eval_func(node->inputs[input_pin_number].connected_node, node->inputs[input_pin_number].connected_pin); -} - -static void node_editor_link(struct node_editor *editor, struct node *in_node, int in_pin, struct node *out_node, int out_pin) { - /* Confusingly, in and out nodes/pins here refer to the inputs and outputs OF THE LINK ITSELF, not the nodes */ - struct node_link *link = NULL; - - if ((nk_size)editor->link_count < NK_LEN(editor->links)) { - link = &editor->links[editor->link_count++]; - } else { - for (int i = 0; i < (int)NK_LEN(editor->links); i++) - { - if (editor->links[i].is_active == nk_false) { - link = &editor->links[i]; - break; - } - } - } - if (link) { - out_node->inputs[out_pin].is_connected = nk_true; - in_node->outputs[in_pin].is_connected = nk_true; - out_node->inputs[out_pin].connected_node = in_node; - out_node->inputs[out_pin].connected_pin = in_pin; - - link->input_node = in_node; - link->input_pin = in_pin; - link->output_node = out_node; - link->output_pin = out_pin; - link->is_active = nk_true; - } else { - puts("Too many links"); - } -} - -static void node_editor_init(struct node_editor *editor) { - if (editor->initialized) return; - - struct nk_rect total_space = nk_window_get_content_region(ui_ctx); - struct nk_vec2 output_node_position = { total_space.w*2/3, total_space.h/3 }; - struct nk_vec2 color_node_position = { total_space.w*1/4, total_space.h/3 }; - - memset(editor, 0, sizeof(*editor)); - - editor->output_node = node_output_create(editor, output_node_position); - node_color_create(editor, color_node_position); - editor->show_grid = nk_true; - - editor->initialized = 1; -} - -static int node_editor(struct node_editor *editor) { - int n = 0; - struct nk_rect total_space; - const struct nk_input *in = &ui_ctx->input; - struct nk_command_buffer *canvas = nk_window_get_canvas(ui_ctx); - struct node *updated = 0; - - node_editor_init(editor); - - { - /* allocate complete window space */ - total_space = nk_window_get_content_region(ui_ctx); - nk_layout_space_begin(ui_ctx, NK_STATIC, total_space.h, editor->node_count); - { - struct node *it = editor->begin; - struct nk_rect size = nk_layout_space_bounds(ui_ctx); - struct nk_panel *nodePanel = 0; - - //nk_fill_rect(canvas, size, 0/*rounding*/, ((struct nk_color){30,30,30,255})); // 20,30,40,255 - nk_fill_rect_multi_color(canvas, size, GRID_BG_COLORS); - - if (editor->show_grid) { - /* display grid */ - for (float x = (float)fmod(size.x - editor->scrolling.x, GRID_SIZE); x < size.w; x += GRID_SIZE) - nk_stroke_line(canvas, x+size.x, size.y, x+size.x, size.y+size.h, GRID_THICKNESS, GRID_COLOR); - for (float y = (float)fmod(size.y - editor->scrolling.y, GRID_SIZE); y < size.h; y += GRID_SIZE) - nk_stroke_line(canvas, size.x, y+size.y, size.x+size.w, y+size.y, GRID_THICKNESS, GRID_COLOR); - } - - /* execute each node as a movable group */ - /* loop through nodes */ - while (it) { - /* Output node window should not have a close button */ - nk_flags nodePanel_flags = NK_WINDOW_MOVABLE|NK_WINDOW_NO_SCROLLBAR|NK_WINDOW_BORDER|NK_WINDOW_TITLE; - if (it != editor->output_node) - nodePanel_flags |= NK_WINDOW_CLOSABLE; - - /* calculate scrolled node window position and size */ - nk_layout_space_push(ui_ctx, nk_rect(it->bounds.x - editor->scrolling.x, - it->bounds.y - editor->scrolling.y, it->bounds.w, it->bounds.h)); - - /* execute node window */ - char *name = va(" " ICON_MD_MENU " %s",it->name); //< @r-lyeh added some spacing+icon because of our UI customizations - -struct nk_color bak = ui_ctx->style.window.fixed_background.data.color; -ui_ctx->style.window.fixed_background.data.color = BG_COLOR; - - if (nk_group_begin(ui_ctx, name, nodePanel_flags)) - { - /* always have last selected node on top */ - - nodePanel = nk_window_get_panel(ui_ctx); - if (nk_input_mouse_clicked(in, NK_BUTTON_LEFT, nodePanel->bounds) && - (!(it->prev && nk_input_mouse_clicked(in, NK_BUTTON_LEFT, - nk_layout_space_rect_to_screen(ui_ctx, nodePanel->bounds)))) && - editor->end != it) - { - updated = it; - } - - if ((nodePanel->flags & NK_WINDOW_HIDDEN)) /* Node close button has been clicked */ - { - /* Delete node */ - struct node_link *link_remove; - node_editor_pop(editor, it); - for (int n = 0; n < it->input_count; n++) { - if ((link_remove = node_editor_find_link_by_output(editor, it, n))) - { - node_editor_delete_link(link_remove); - } - } - for (int n = 0; n < it -> output_count; n++) { - while((link_remove = node_editor_find_link_by_input(editor, it, n))) - { - node_editor_delete_link(link_remove); - } - } - NK_ASSERT(editor->node_buf[it->ID] == it); - editor->node_buf[it->ID] = NULL; - FREE(it->inputs); - FREE(it->outputs); - FREE(it); - } - else { - - /* ================= NODE CONTENT ===================== */ - - it->display_func(ui_ctx, it); - - /* ==================================================== */ - - } - nk_group_end(ui_ctx); - - } - -ui_ctx->style.window.fixed_background.data.color = bak; - - if (!(nodePanel->flags & NK_WINDOW_HIDDEN)) - { - /* node pin and linking */ - struct nk_rect bounds; - bounds = nk_layout_space_rect_to_local(ui_ctx, nodePanel->bounds); - bounds.x += editor->scrolling.x; - bounds.y += editor->scrolling.y; - it->bounds = bounds; - - /* output pins */ - for (int n = 0; n < it->output_count; ++n) { - struct nk_rect circle; - struct nk_vec2 pt = {nodePanel->bounds.x, nodePanel->bounds.y}; - pt.x += nodePanel->bounds.w - PIN_RADIUS / 2 + it->pin_spacing.out_padding_x; - pt.y += it->pin_spacing.out_padding_y + it->pin_spacing.out_spacing_y * (n); - PIN_DRAW(it->outputs[n],pt,PIN_RADIUS); - - /* start linking process */ - /* set linking active */ - if (nk_input_has_mouse_click_down_in_rect(in, NK_BUTTON_LEFT, circle, nk_true)) { - editor->linking.active = nk_true; - editor->linking.node = it; - editor->linking.input_id = it->ID; - editor->linking.input_pin = n; - } - - /* draw link being dragged (from linked pin to mouse position) */ - if (editor->linking.active && editor->linking.node == it && - editor->linking.input_pin == n) { - LINK_DRAW(vec2(circle.x+3,circle.y+3),ptr2(&in->mouse.pos.x),COLOR_FLOW_HI); - } - } - - /* input pins */ - for (int n = 0; n < it->input_count; ++n) { - struct nk_rect circle; - struct nk_vec2 pt = {nodePanel->bounds.x, nodePanel->bounds.y}; - pt.x += it->pin_spacing.in_padding_x; - pt.y += it->pin_spacing.in_padding_y + it->pin_spacing.in_spacing_y * (n); - PIN_DRAW(it->inputs[n],pt,PIN_RADIUS); - - /* Detach link */ - if (nk_input_has_mouse_click_down_in_rect(in, NK_BUTTON_LEFT, circle, nk_true) && - editor->linking.active == nk_false && - it->inputs[n].is_connected == nk_true) { - struct node_link *node_relink = node_editor_find_link_by_output(editor, it, n); - editor->linking.active = nk_true; - editor->linking.node = node_relink->input_node; - editor->linking.input_id = node_relink->input_node->ID; - editor->linking.input_pin = node_relink->input_pin; - node_editor_delete_link(node_relink); - } - - /* Create link */ - if (nk_input_is_mouse_released(in, NK_BUTTON_LEFT) && - nk_input_is_mouse_hovering_rect(in, circle) && - editor->linking.active && - editor->linking.node != it && - it->inputs[n].pin_type == editor->linking.node->outputs[editor->linking.input_pin].pin_type && - it->inputs[n].is_connected != nk_true) { - editor->linking.active = nk_false; - - node_editor_link(editor, editor->linking.node, - editor->linking.input_pin, it, n); - } - } - } - it = it->next; - } - - /* reset (output) linking connection */ - if (editor->linking.active && (!!input(KEY_LCTRL) || !!input(KEY_RCTRL) || nk_input_is_mouse_released(in, NK_BUTTON_LEFT))) { - editor->linking.active = nk_false; - editor->linking.node = NULL; - } - - /* draw each static link */ - for (int n = 0; n < editor->link_count; ++n) { - struct node_link *link = &editor->links[n]; - if (link->is_active == nk_true){ - struct node *ni = link->input_node; - struct node *no = link->output_node; - struct nk_vec2 l0 = nk_layout_space_to_screen(ui_ctx, nk_vec2(ni->bounds.x + ni->bounds.w + ni->pin_spacing.out_padding_x, 3.0f + ni->bounds.y + ni->pin_spacing.out_padding_y + ni->pin_spacing.out_spacing_y * (link->input_pin))); - struct nk_vec2 l1 = nk_layout_space_to_screen(ui_ctx, nk_vec2(no->bounds.x + no->pin_spacing.in_padding_x, 3.0f + no->bounds.y + no->pin_spacing.in_padding_y + no->pin_spacing.in_spacing_y * (link->output_pin))); - - l0.x -= editor->scrolling.x; - l0.y -= editor->scrolling.y; - l1.x -= editor->scrolling.x; - l1.y -= editor->scrolling.y; - - struct nk_color color = node_get_type_color(no->inputs[link->output_pin].pin_type); - LINK_DRAW(ptr2(&l0.x), ptr2(&l1.x), color); - } - } - - if (updated) { - /* reshuffle nodes to have least recently selected node on top */ - node_editor_pop(editor, updated); - node_editor_push(editor, updated); - } - - /* node selection */ - if (nk_input_mouse_clicked(in, NK_BUTTON_LEFT, nk_layout_space_bounds(ui_ctx))) { - it = editor->begin; - editor->selected = NULL; - editor->bounds = nk_rect(in->mouse.pos.x, in->mouse.pos.y, 100, 200); - while (it) { - struct nk_rect b = nk_layout_space_rect_to_screen(ui_ctx, it->bounds); - b.x -= editor->scrolling.x; - b.y -= editor->scrolling.y; - if (nk_input_is_mouse_hovering_rect(in, b)) - editor->selected = it; - it = it->next; - } - } - - /* contextual menu */ - if (nk_contextual_begin(ui_ctx, 0, nk_vec2(150, 220), nk_window_get_bounds(ui_ctx))) { - struct nk_vec2 wincoords = { in->mouse.pos.x-total_space.x-50, in->mouse.pos.y-total_space.y-32 }; - -#if 1 - static char *filter = 0; - static int do_filter = 0; - if( input_down(KEY_F) ) if( input(KEY_LCTRL) || input(KEY_RCTRL) ) do_filter ^= 1; - int choice = ui_toolbar(ICON_MD_SEARCH ";"); - if( choice == 1 ) do_filter = 1; - if( do_filter ) { - ui_string(ICON_MD_CLOSE " Filter " ICON_MD_SEARCH, &filter); - if( ui_label_icon_clicked_L.x > 0 && ui_label_icon_clicked_L.x <= 24 ) { // if clicked on CANCEL icon (1st icon) - do_filter = 0; - } - } else { - if( filter ) filter[0] = '\0'; - } - char *filter_mask = filter && filter[0] ? va("*%s*", filter) : "*"; -#endif - - #define ui_label_filtered(lbl) (strmatchi(lbl,filter_mask) && ui_label(lbl)) - - int close = 0; - if (ui_label_filtered("=Add Color node")) close=1,node_color_create(editor, wincoords); - if (ui_label_filtered("=Add Float node")) close=1,node_float_create(editor, wincoords); - if (ui_label_filtered("=Add Blend Node")) close=1,node_blend_create(editor, wincoords); - if (ui_label_filtered(editor->show_grid ? "=Hide Grid" : "=Show Grid")) - close=1,editor->show_grid = !editor->show_grid; - if(close) do_filter = 0, (filter ? filter[0] = '\0' : '\0'), nk_contextual_close(ui_ctx); - nk_contextual_end(ui_ctx); - } - } - nk_layout_space_end(ui_ctx); - - /* window content scrolling */ - if (nk_input_is_mouse_hovering_rect(in, nk_window_get_bounds(ui_ctx)) && - nk_input_is_mouse_down(in, NK_BUTTON_MIDDLE)) { - editor->scrolling.x += in->mouse.delta.x; - editor->scrolling.y += in->mouse.delta.y; - } - } - - return !nk_window_is_closed(ui_ctx, "NodeEdit"); -} - -int editor_nodes(int window_mode) { - window_mode = EDITOR_WINDOW; // force window - - if( editor_begin(NODES_TITLE, window_mode) ) { - - static struct node_editor nodeEditor = {0}; - node_editor(&nodeEditor); - - editor_end(window_mode); - } - return 0; -} - -AUTORUN { - array_push(editor.subeditors, editor_nodes); -} +#define NODES_ICON ICON_MDI_GRAPH +#define NODES_TITLE "Nodes " NODES_ICON + +EDITOR_BIND(nodes, "held(CTRL)&down(5)", { ui_show(NODES_TITLE, ui_visible(NODES_TITLE) ^ true); }); + +/* +A basic node-based UI built with Nuklear. +Builds on the node editor example included in Nuklear v1.00, with the aim of +being used as a prototype for implementing a functioning node editor. + +Features: +- Nodes of different types. Currently their implementations are #included in + the main file, but they could easily be turned into eg. a plugin system. +- Pins/pins of different types -- currently float values and colors. +- Adding and removing nodes. +- Linking nodes, with validation (one link per input, only link similar pins). +- Detaching and moving links. +- Evaluation of output values of connected nodes. +- Memory management based on fixed size arrays for links and node pointers +- Multiple node types +- Multiple pin types +- Linking between pins of the same type +- Detaching and reattaching links +- Getting value from linked node if pin is connected + +Todo: +- Complete pin types. +- Allow dragging from output to input pin. +- Cut link by CTRL+clicking input pin. +- Cut link by drawing intersect line on a link. +- Group elemnts together with mouse, or LSHIFT+clicking. +- Drag groups. +- DEL elements. +- DEL groups. +- CTRL-C/CTRL-V/CTRL-X elements. +- CTRL-C/CTRL-V/CTRL-X groups. +- CTRL-Z,CTRL-Y. +- CTRL-N. +- CTRL-L,CTRL-S. +- CTRL-F. +- CTRL-Wheel Zooming. +- Allow to extend node types from Lua. + +Extra todo: +- Execution Flow (see: nk_stroke_triangle, nk_fill_triangle) +- Complete missing nodes (see: nk_draw_image, nk_draw_text) +- Right-click could visualize node/board diagram as Lua script. +- Once that done, copy/pasting scripts should work within editor. + +Sources: +- https://github.com/Immediate-Mode-UI/Nuklear/pull/561 +- https://github.com/vurtun/nuklear/blob/master/demo/node_editor.c +*/ + +typedef enum pin_type_t { + type_flow, + type_int,type_float, + type_block,type_texture,type_image, + type_color, + /* + type_bool, + type_char, type_string, + type_int2, type_int3, type_int4, + type_float2, type_float3, type_float4, + type_array, type_map, + */ + + type_total +} pin_type_t; + +struct node_pin { + pin_type_t pin_type; + nk_bool is_connected; + struct node* connected_node; + int connected_pin; +}; + +struct node { + int ID; + char name[32]; + struct nk_rect bounds; + int input_count; + int output_count; + struct node_pin *inputs; + struct node_pin *outputs; + struct { + float in_padding_x; + float in_padding_y; + float in_spacing_y; + float out_padding_x; + float out_padding_y; + float out_spacing_y; + } pin_spacing; /* Maybe this should be called "node_layout" and include the bounds? */ + struct node *next; /* Z ordering only */ + struct node *prev; /* Z ordering only */ + + void* (*eval_func)(struct node*, int oIndex); + void (*display_func)(struct nk_context*, struct node*); +}; + +struct node_link { + struct node* input_node; + int input_pin; + struct node* output_node; + int output_pin; + nk_bool is_active; +}; + +struct node_linking { + int active; + struct node *node; + int input_id; + int input_pin; +}; + +struct node_editor { + int initialized; + struct node *node_buf[32]; + struct node_link links[64]; + struct node *output_node; + struct node *begin; + struct node *end; + int node_count; + int link_count; + struct nk_rect bounds; + struct node *selected; + int show_grid; + struct nk_vec2 scrolling; + struct node_linking linking; +}; + +/* === PROTOTYPES === */ +/* The node implementations need these two functions. */ +/* These could/should go in a header file along with the node and node_pin structs and be #included in the node implementations */ + +struct node* node_editor_add(struct node_editor *editor, size_t nodeSize, const char *name, struct nk_rect bounds, int in_count, int out_count); +void* node_editor_eval_connected(struct node *node, int input_pin_number); +/* ================== */ + +/* === NODE TYPE IMPLEMENTATIONS === */ + +#define NODE_DEFAULT_ROW_HEIGHT 25 + + +// ---------------------------------------------------------------------------------------------------- +// #include "node_output.h" + +struct node_type_output { + struct node node; + struct nk_colorf input_val; +}; + +struct nk_colorf *node_output_get(struct node* node) { + struct node_type_output *output_node = (struct node_type_output*)node; + if (!node->inputs[0].is_connected) { + struct nk_colorf black = {0.0f, 0.0f, 0.0f, 0.0f}; + output_node->input_val = black; + } + return &output_node->input_val; +} + +static void node_output_display(struct nk_context *ctx, struct node *node) { + if (node->inputs[0].is_connected) { + struct node_type_output *output_node = (struct node_type_output*)node; + output_node->input_val = *(struct nk_colorf*)node_editor_eval_connected(node, 0); + nk_layout_row_dynamic(ctx, 60, 1); + nk_button_color(ctx, nk_rgba_cf(output_node->input_val)); + } +} + +struct node* node_output_create(struct node_editor *editor, struct nk_vec2 position) { + struct node_type_output *output_node = (struct node_type_output*)node_editor_add(editor, sizeof(struct node_type_output), "Output", nk_rect(position.x, position.y, 100, 100), 1, 0); + if (output_node){ + output_node->node.inputs[0].pin_type = type_color; + output_node->node.display_func = node_output_display; + } + return (struct node*)output_node; +} + +// ---------------------------------------------------------------------------------------------------- +// #include "node_float.h" + +struct node_type_float { + struct node node; + float output_val; +}; + +static float *node_float_eval(struct node* node, int oIndex) { + struct node_type_float *float_node = (struct node_type_float*)node; + NK_ASSERT(oIndex == 0); + return &float_node->output_val; +} + +static void node_float_draw(struct nk_context *ctx, struct node *node) { + struct node_type_float *float_node = (struct node_type_float*)node; + nk_layout_row_dynamic(ctx, NODE_DEFAULT_ROW_HEIGHT, 1); + float_node->output_val = nk_propertyf(ctx, "#Value:", 0.0f, float_node->output_val, 1.0f, 0.01f, 0.01f); +} + +void node_float_create(struct node_editor *editor, struct nk_vec2 position) { + struct node_type_float *float_node = (struct node_type_float*)node_editor_add(editor, sizeof(struct node_type_float), "Float", nk_rect(position.x, position.y, 180, 75), 0, 1); + if (float_node) + { + float_node->output_val = 1.0f; + float_node->node.display_func = node_float_draw; + float_node->node.eval_func = (void*(*)(struct node*, int)) node_float_eval; + } +} + +// ---------------------------------------------------------------------------------------------------- +// #include "node_color.h" + +struct node_type_color { + struct node node; + float input_val[4]; + struct nk_colorf output_val; +}; + +static struct nk_colorf *node_color_eval(struct node* node, int oIndex) +{ + struct node_type_color *color_node = (struct node_type_color*)node; + NK_ASSERT(oIndex == 0); /* only one output connector */ + + return &color_node->output_val; +} + + +static void node_color_draw(struct nk_context *ctx, struct node *node) +{ + struct node_type_color *color_node = (struct node_type_color*)node; + float eval_result; /* Get the values from connected nodes into this so the inputs revert on disconnect */ + const char* labels[4] = {"#R:","#G:","#B:","#A:"}; + float color_val[4]; /* Because we can't just loop through the struct... */ + nk_layout_row_dynamic(ctx, NODE_DEFAULT_ROW_HEIGHT, 1); + nk_button_color(ctx, nk_rgba_cf(color_node->output_val)); + + for (int i = 0; i < 4; i++) + { + if (color_node->node.inputs[i].is_connected) { + eval_result = *(float*)node_editor_eval_connected(node, i); + eval_result = nk_propertyf(ctx, labels[i], eval_result, eval_result, eval_result, 0.01f, 0.01f); + color_val[i] = eval_result; + } + else { + color_node->input_val[i] = nk_propertyf(ctx, labels[i], 0.0f, color_node->input_val[i], 1.0f, 0.01f, 0.01f); + color_val[i] = color_node->input_val[i]; + } + } + + color_node->output_val.r = color_val[0]; + color_node->output_val.g = color_val[1]; + color_node->output_val.b = color_val[2]; + color_node->output_val.a = color_val[3]; +} + +void node_color_create(struct node_editor *editor, struct nk_vec2 position) +{ + struct node_type_color *color_node = (struct node_type_color*)node_editor_add(editor, sizeof(struct node_type_color), "Color", nk_rect(position.x, position.y, 180, 190), 4, 1); + if (color_node) + { + const struct nk_colorf black = {0.0f, 0.0f, 0.0f, 1.0f}; + + for (int i = 0; i < color_node->node.input_count; i++) + color_node->node.inputs[i].pin_type = type_float; + color_node->node.outputs[0].pin_type = type_color; + + color_node->node.pin_spacing.in_padding_y += NODE_DEFAULT_ROW_HEIGHT; + + color_node->input_val[0] = 0.0f; + color_node->input_val[1] = 0.0f; + color_node->input_val[2] = 0.0f; + color_node->input_val[3] = 1.0f; + + color_node->output_val = black; + + color_node->node.display_func = node_color_draw; + color_node->node.eval_func = (void*(*)(struct node*, int)) node_color_eval; + } +} + +// ---------------------------------------------------------------------------------------------------- +// #include "node_blend.h" + +struct node_type_blend { + struct node node; + struct nk_colorf input_val[2]; + struct nk_colorf output_val; + float blend_val; +}; + +static struct nk_colorf *node_blend_eval(struct node *node, int oIndex) { + struct node_type_blend* blend_node = (struct node_type_blend*)node; + return &blend_node->output_val; +} + +static void node_blend_display(struct nk_context *ctx, struct node *node) { + struct node_type_blend *blend_node = (struct node_type_blend*)node; + const struct nk_colorf blank = {0.0f, 0.0f, 0.0f, 0.0f}; + float blend_amnt; + + nk_layout_row_dynamic(ctx, NODE_DEFAULT_ROW_HEIGHT, 1); + for (int i = 0; i < 2; i++){ + if(node->inputs[i].is_connected) { + blend_node->input_val[i] = *(struct nk_colorf*)node_editor_eval_connected(node, i); + } + else { + blend_node->input_val[i] = blank; + } + nk_button_color(ctx, nk_rgba_cf(blend_node->input_val[i])); + } + + if (node->inputs[2].is_connected) { + blend_amnt = *(float*)node_editor_eval_connected(node, 2); + blend_amnt = nk_propertyf(ctx, "#Blend", blend_amnt, blend_amnt, blend_amnt, 0.01f, 0.01f); + } + else { + blend_node->blend_val = nk_propertyf(ctx, "#Blend", 0.0f, blend_node->blend_val, 1.0f, 0.01f, 0.01f); + blend_amnt = blend_node->blend_val; + } + + + if(node->inputs[0].is_connected && node->inputs[1].is_connected) { + blend_node->output_val.r = blend_node->input_val[0].r * (1.0f-blend_amnt) + blend_node->input_val[1].r * blend_amnt; + blend_node->output_val.g = blend_node->input_val[0].g * (1.0f-blend_amnt) + blend_node->input_val[1].g * blend_amnt; + blend_node->output_val.b = blend_node->input_val[0].b * (1.0f-blend_amnt) + blend_node->input_val[1].b * blend_amnt; + blend_node->output_val.a = blend_node->input_val[0].a * (1.0f-blend_amnt) + blend_node->input_val[1].a * blend_amnt; + } + else { + blend_node->output_val = blank; + } +} + +void node_blend_create(struct node_editor *editor, struct nk_vec2 position) { + struct node_type_blend* blend_node = (struct node_type_blend*)node_editor_add(editor, sizeof(struct node_type_blend), "Blend", nk_rect(position.x, position.y, 180, 130), 3, 1); + if (blend_node) { + const struct nk_colorf blank = {0.0f, 0.0f, 0.0f, 0.0f}; + for (int i = 0; i < (int)NK_LEN(blend_node->input_val); i++) + blend_node->node.inputs[i].pin_type = type_color; + blend_node->node.outputs[0].pin_type = type_color; + + // blend_node->node.pin_spacing.in_padding_y = 42.0f; + // blend_node->node.pin_spacing.in_spacing_y = 29.0f; + + for (int i = 0; i < (int)NK_LEN(blend_node->input_val); i++) + blend_node->input_val[i] = blank; + blend_node->output_val = blank; + + blend_node->blend_val = 0.5f; + + blend_node->node.display_func = node_blend_display; + blend_node->node.eval_func = (void*(*)(struct node*, int)) node_blend_eval; + + } +} + +/* ================================= */ + +#define NK_RGB3(r,g,b) {r,g,b,255} +#define BG_COLOR ((struct nk_color){60,60,60,192}) // nk_rgba(0,0,0,192) + +static +struct editor_node_style { + int pin_type; + const char *shape; + struct nk_color color_idle; + struct nk_color color_hover; +} styles[] = { + // order matters: + { type_flow, "triangle_right", NK_RGB3(200,200,200), NK_RGB3(255,255,255) }, // if .num_links == 0 + { type_int, "circle", NK_RGB3(33,227,175), NK_RGB3(135,239,195) }, + { type_float, "circle", NK_RGB3(156,253,65), NK_RGB3(144,225,137) }, + { type_block, "circle", NK_RGB3(6,165,239), NK_RGB3(137,196,247) }, + { type_texture, "circle", NK_RGB3(148,0,0), NK_RGB3(183,137,137) }, + { type_image, "circle", NK_RGB3(200,130,255), NK_RGB3(220,170,255) }, + { type_color, "circle", NK_RGB3(252,200,35), NK_RGB3(255,217,140) }, +}; + +#define COLOR_FLOW_HI styles[type_flow].color_hover +#define COLOR_FLOW_LO styles[type_flow].color_idle + +#define GRID_SIZE 64.0f +#define GRID_COLOR ((struct nk_color)NK_RGB3(80,80,120)) +#define GRID_THICKNESS 1.0f + +// 4 colors: top-left, top-right, bottom-right, bottom-left +#define GRID_BG_COLORS ((struct nk_color){30,30,30,255}), ((struct nk_color){40,20,0,255}), ((struct nk_color){30,30,30,255}), ((struct nk_color){20,30,40,255}) + +#define LINK_THICKNESS 1.0f +#define LINK_DRAW(POINT_A,POINT_B,COLOR) do { \ + vec2 a = (POINT_A); \ + vec2 b = (POINT_B); \ + nk_stroke_line(canvas, a.x, a.y, b.x, b.y, LINK_THICKNESS, COLOR); \ +} while(0) +#undef LINK_DRAW +#define LINK_DRAW(POINT_A,POINT_B,COLOR) do { \ + vec2 a = (POINT_A); \ + vec2 b = (POINT_B); \ + nk_stroke_curve(canvas, a.x, a.y, a.x+50, a.y, b.x-50, b.y, b.x, b.y, LINK_THICKNESS, COLOR); \ +} while(0) +#undef LINK_DRAW +#define LINK_DRAW(POINT_A,POINT_B,COLOR) do { \ + vec2 a = (POINT_A); \ + vec2 b = (POINT_B); \ + float dist2 = len2( sub2( ptr2(&b.x), ptr2(&a.x) ) ); \ + vec2 mid_a = mix2( ptr2(&a.x), ptr2(&b.x), 0.25 ); mid_a.y += dist2/2; \ + vec2 mid_b = mix2( ptr2(&a.x), ptr2(&b.x), 0.75 ); mid_b.y += dist2/3; \ + nk_stroke_curve(canvas, a.x, a.y, mid_a.x, mid_a.y, mid_b.x, mid_b.y, b.x, b.y, LINK_THICKNESS, COLOR); \ +} while(0) + + +#define PIN_RADIUS 12 +#define PIN_THICKNESS 1.0f +#define PIN_DRAW(PIN_ADDR,POINT,RADIUS) do { \ + circle.x = (POINT).x - (RADIUS) / 2; \ + circle.y = (POINT).y - (RADIUS) / 2; \ + circle.w = circle.h = (RADIUS); \ + struct nk_color color = node_get_type_color((PIN_ADDR).pin_type); \ + if((PIN_ADDR).is_connected) \ + nk_fill_circle(canvas, circle, color); \ + else \ + nk_stroke_circle(canvas, circle, PIN_THICKNESS, color); \ +} while(0) + + +static struct nk_color node_get_type_color(unsigned pin_type) { + for( int i = 0; i < type_total; ++i ) + if( styles[i].pin_type == pin_type ) + return styles[i].color_idle; + return ((struct nk_color)NK_RGB3(255,0,255)); +} + +static void node_editor_push(struct node_editor *editor, struct node *node) { + if (!editor->begin) { + node->next = NULL; + node->prev = NULL; + editor->begin = node; + editor->end = node; + } else { + node->prev = editor->end; + if (editor->end) + editor->end->next = node; + node->next = NULL; + editor->end = node; + } +} + +static void node_editor_pop(struct node_editor *editor, struct node *node) { + if (node->next) + node->next->prev = node->prev; + if (node->prev) + node->prev->next = node->next; + if (editor->end == node) + editor->end = node->prev; + if (editor->begin == node) + editor->begin = node->next; + node->next = NULL; + node->prev = NULL; +} + +static struct node* node_editor_find_by_id(struct node_editor *editor, int ID) { + struct node *iter = editor->begin; + while (iter) { + if (iter->ID == ID) + return iter; + iter = iter->next; + } + return NULL; +} + +static struct node_link* node_editor_find_link_by_output(struct node_editor *editor, struct node *output_node, int node_input_connector) { + for( int i = 0; i < editor->link_count; i++ ) { + if (editor->links[i].output_node == output_node && + editor->links[i].output_pin == node_input_connector && + editor->links[i].is_active == nk_true) { + return &editor->links[i]; + } + } + return NULL; +} + +static struct node_link* node_editor_find_link_by_input(struct node_editor *editor, struct node *input_node, int node_output_connector) { + for( int i = 0; i < editor->link_count; i++ ) { + if (editor->links[i].input_node == input_node && + editor->links[i].input_pin == node_output_connector && + editor->links[i].is_active == nk_true) { + return &editor->links[i]; + } + } + return NULL; +} + +static void node_editor_delete_link(struct node_link *link) { + link->is_active = nk_false; + link->input_node->outputs[link->input_pin].is_connected = nk_false; + link->output_node->inputs[link->output_pin].is_connected = nk_false; +} + +struct node* node_editor_add(struct node_editor *editor, size_t nodeSize, const char *name, struct nk_rect bounds, int in_count, int out_count) { + static int IDs = 0; + struct node *node = NULL; + + if ((nk_size)editor->node_count < NK_LEN(editor->node_buf)) { + /* node_buf has unused pins */ + node = MALLOC(nodeSize); + editor->node_buf[editor->node_count++] = node; + node->ID = IDs++; + } else { + /* check for freed up pins in node_buf */ + for (int i = 0; i < editor->node_count; i++) { + if (editor->node_buf[i] == NULL) { + node = MALLOC(nodeSize); + editor->node_buf[i] = node; + node->ID = i; + break; + } + } + } + if (node == NULL) { + puts("Node creation failed"); + return NULL; + } + + node->bounds = bounds; + + node->input_count = in_count; + node->output_count = out_count; + + node->inputs = MALLOC(node->input_count * sizeof(struct node_pin)); + node->outputs = MALLOC(node->output_count * sizeof(struct node_pin)); + + for (int i = 0; i < node->input_count; i++) { + node->inputs[i].is_connected = nk_false; + node->inputs[i].pin_type = type_float; /* default pin type */ + } + for (int i = 0; i < node->output_count; i++) { + node->outputs[i].is_connected = nk_false; + node->outputs[i].pin_type = type_float; /* default pin type */ + } + + /* default pin spacing */ + node->pin_spacing.in_padding_x = 2; + node->pin_spacing.in_padding_y = 32 + 25/2 + 6; // titlebar height + next half row + adjust + node->pin_spacing.in_spacing_y = 25; // row height+border + node->pin_spacing.out_padding_x = 3; + node->pin_spacing.out_padding_y = 32 + 25/2 + 6; // titlebar height + next half row + adjust + node->pin_spacing.out_spacing_y = 25; // row height+border + + strcpy(node->name, name); + node_editor_push(editor, node); + + return node; +} + +void *node_editor_eval_connected(struct node* node, int input_pin_number) { + NK_ASSERT(node->inputs[input_pin_number].is_connected); + return node->inputs[input_pin_number].connected_node->eval_func(node->inputs[input_pin_number].connected_node, node->inputs[input_pin_number].connected_pin); +} + +static void node_editor_link(struct node_editor *editor, struct node *in_node, int in_pin, struct node *out_node, int out_pin) { + /* Confusingly, in and out nodes/pins here refer to the inputs and outputs OF THE LINK ITSELF, not the nodes */ + struct node_link *link = NULL; + + if ((nk_size)editor->link_count < NK_LEN(editor->links)) { + link = &editor->links[editor->link_count++]; + } else { + for (int i = 0; i < (int)NK_LEN(editor->links); i++) + { + if (editor->links[i].is_active == nk_false) { + link = &editor->links[i]; + break; + } + } + } + if (link) { + out_node->inputs[out_pin].is_connected = nk_true; + in_node->outputs[in_pin].is_connected = nk_true; + out_node->inputs[out_pin].connected_node = in_node; + out_node->inputs[out_pin].connected_pin = in_pin; + + link->input_node = in_node; + link->input_pin = in_pin; + link->output_node = out_node; + link->output_pin = out_pin; + link->is_active = nk_true; + } else { + puts("Too many links"); + } +} + +static void node_editor_init(struct node_editor *editor) { + if (editor->initialized) return; + + struct nk_rect total_space = nk_window_get_content_region(ui_ctx); + struct nk_vec2 output_node_position = { total_space.w*2/3, total_space.h/3 }; + struct nk_vec2 color_node_position = { total_space.w*1/4, total_space.h/3 }; + + memset(editor, 0, sizeof(*editor)); + + editor->output_node = node_output_create(editor, output_node_position); + node_color_create(editor, color_node_position); + editor->show_grid = nk_true; + + editor->initialized = 1; +} + +static int node_editor(struct node_editor *editor) { + int n = 0; + struct nk_rect total_space; + const struct nk_input *in = &ui_ctx->input; + struct nk_command_buffer *canvas = nk_window_get_canvas(ui_ctx); + struct node *updated = 0; + + node_editor_init(editor); + + { + /* allocate complete window space */ + total_space = nk_window_get_content_region(ui_ctx); + nk_layout_space_begin(ui_ctx, NK_STATIC, total_space.h, editor->node_count); + { + struct node *it = editor->begin; + struct nk_rect size = nk_layout_space_bounds(ui_ctx); + struct nk_panel *nodePanel = 0; + + //nk_fill_rect(canvas, size, 0/*rounding*/, ((struct nk_color){30,30,30,255})); // 20,30,40,255 + nk_fill_rect_multi_color(canvas, size, GRID_BG_COLORS); + + if (editor->show_grid) { + /* display grid */ + for (float x = (float)fmod(size.x - editor->scrolling.x, GRID_SIZE); x < size.w; x += GRID_SIZE) + nk_stroke_line(canvas, x+size.x, size.y, x+size.x, size.y+size.h, GRID_THICKNESS, GRID_COLOR); + for (float y = (float)fmod(size.y - editor->scrolling.y, GRID_SIZE); y < size.h; y += GRID_SIZE) + nk_stroke_line(canvas, size.x, y+size.y, size.x+size.w, y+size.y, GRID_THICKNESS, GRID_COLOR); + } + + /* execute each node as a movable group */ + /* loop through nodes */ + while (it) { + /* Output node window should not have a close button */ + nk_flags nodePanel_flags = NK_WINDOW_MOVABLE|NK_WINDOW_NO_SCROLLBAR|NK_WINDOW_BORDER|NK_WINDOW_TITLE; + if (it != editor->output_node) + nodePanel_flags |= NK_WINDOW_CLOSABLE; + + /* calculate scrolled node window position and size */ + nk_layout_space_push(ui_ctx, nk_rect(it->bounds.x - editor->scrolling.x, + it->bounds.y - editor->scrolling.y, it->bounds.w, it->bounds.h)); + + /* execute node window */ + char *name = va(" " ICON_MD_MENU " %s",it->name); //< @r-lyeh added some spacing+icon because of our UI customizations + +struct nk_color bak = ui_ctx->style.window.fixed_background.data.color; +ui_ctx->style.window.fixed_background.data.color = BG_COLOR; + + if (nk_group_begin(ui_ctx, name, nodePanel_flags)) + { + /* always have last selected node on top */ + + nodePanel = nk_window_get_panel(ui_ctx); + if (nk_input_mouse_clicked(in, NK_BUTTON_LEFT, nodePanel->bounds) && + (!(it->prev && nk_input_mouse_clicked(in, NK_BUTTON_LEFT, + nk_layout_space_rect_to_screen(ui_ctx, nodePanel->bounds)))) && + editor->end != it) + { + updated = it; + } + + if ((nodePanel->flags & NK_WINDOW_HIDDEN)) /* Node close button has been clicked */ + { + /* Delete node */ + struct node_link *link_remove; + node_editor_pop(editor, it); + for (int n = 0; n < it->input_count; n++) { + if ((link_remove = node_editor_find_link_by_output(editor, it, n))) + { + node_editor_delete_link(link_remove); + } + } + for (int n = 0; n < it -> output_count; n++) { + while((link_remove = node_editor_find_link_by_input(editor, it, n))) + { + node_editor_delete_link(link_remove); + } + } + NK_ASSERT(editor->node_buf[it->ID] == it); + editor->node_buf[it->ID] = NULL; + FREE(it->inputs); + FREE(it->outputs); + FREE(it); + } + else { + + /* ================= NODE CONTENT ===================== */ + + it->display_func(ui_ctx, it); + + /* ==================================================== */ + + } + nk_group_end(ui_ctx); + + } + +ui_ctx->style.window.fixed_background.data.color = bak; + + if (!(nodePanel->flags & NK_WINDOW_HIDDEN)) + { + /* node pin and linking */ + struct nk_rect bounds; + bounds = nk_layout_space_rect_to_local(ui_ctx, nodePanel->bounds); + bounds.x += editor->scrolling.x; + bounds.y += editor->scrolling.y; + it->bounds = bounds; + + /* output pins */ + for (int n = 0; n < it->output_count; ++n) { + struct nk_rect circle; + struct nk_vec2 pt = {nodePanel->bounds.x, nodePanel->bounds.y}; + pt.x += nodePanel->bounds.w - PIN_RADIUS / 2 + it->pin_spacing.out_padding_x; + pt.y += it->pin_spacing.out_padding_y + it->pin_spacing.out_spacing_y * (n); + PIN_DRAW(it->outputs[n],pt,PIN_RADIUS); + + /* start linking process */ + /* set linking active */ + if (nk_input_has_mouse_click_down_in_rect(in, NK_BUTTON_LEFT, circle, nk_true)) { + editor->linking.active = nk_true; + editor->linking.node = it; + editor->linking.input_id = it->ID; + editor->linking.input_pin = n; + } + + /* draw link being dragged (from linked pin to mouse position) */ + if (editor->linking.active && editor->linking.node == it && + editor->linking.input_pin == n) { + LINK_DRAW(vec2(circle.x+3,circle.y+3),ptr2(&in->mouse.pos.x),COLOR_FLOW_HI); + } + } + + /* input pins */ + for (int n = 0; n < it->input_count; ++n) { + struct nk_rect circle; + struct nk_vec2 pt = {nodePanel->bounds.x, nodePanel->bounds.y}; + pt.x += it->pin_spacing.in_padding_x; + pt.y += it->pin_spacing.in_padding_y + it->pin_spacing.in_spacing_y * (n); + PIN_DRAW(it->inputs[n],pt,PIN_RADIUS); + + /* Detach link */ + if (nk_input_has_mouse_click_down_in_rect(in, NK_BUTTON_LEFT, circle, nk_true) && + editor->linking.active == nk_false && + it->inputs[n].is_connected == nk_true) { + struct node_link *node_relink = node_editor_find_link_by_output(editor, it, n); + editor->linking.active = nk_true; + editor->linking.node = node_relink->input_node; + editor->linking.input_id = node_relink->input_node->ID; + editor->linking.input_pin = node_relink->input_pin; + node_editor_delete_link(node_relink); + } + + /* Create link */ + if (nk_input_is_mouse_released(in, NK_BUTTON_LEFT) && + nk_input_is_mouse_hovering_rect(in, circle) && + editor->linking.active && + editor->linking.node != it && + it->inputs[n].pin_type == editor->linking.node->outputs[editor->linking.input_pin].pin_type && + it->inputs[n].is_connected != nk_true) { + editor->linking.active = nk_false; + + node_editor_link(editor, editor->linking.node, + editor->linking.input_pin, it, n); + } + } + } + it = it->next; + } + + /* reset (output) linking connection */ + if (editor->linking.active && (!!input(KEY_LCTRL) || !!input(KEY_RCTRL) || nk_input_is_mouse_released(in, NK_BUTTON_LEFT))) { + editor->linking.active = nk_false; + editor->linking.node = NULL; + } + + /* draw each static link */ + for (int n = 0; n < editor->link_count; ++n) { + struct node_link *link = &editor->links[n]; + if (link->is_active == nk_true){ + struct node *ni = link->input_node; + struct node *no = link->output_node; + struct nk_vec2 l0 = nk_layout_space_to_screen(ui_ctx, nk_vec2(ni->bounds.x + ni->bounds.w + ni->pin_spacing.out_padding_x, 3.0f + ni->bounds.y + ni->pin_spacing.out_padding_y + ni->pin_spacing.out_spacing_y * (link->input_pin))); + struct nk_vec2 l1 = nk_layout_space_to_screen(ui_ctx, nk_vec2(no->bounds.x + no->pin_spacing.in_padding_x, 3.0f + no->bounds.y + no->pin_spacing.in_padding_y + no->pin_spacing.in_spacing_y * (link->output_pin))); + + l0.x -= editor->scrolling.x; + l0.y -= editor->scrolling.y; + l1.x -= editor->scrolling.x; + l1.y -= editor->scrolling.y; + + struct nk_color color = node_get_type_color(no->inputs[link->output_pin].pin_type); + LINK_DRAW(ptr2(&l0.x), ptr2(&l1.x), color); + } + } + + if (updated) { + /* reshuffle nodes to have least recently selected node on top */ + node_editor_pop(editor, updated); + node_editor_push(editor, updated); + } + + /* node selection */ + if (nk_input_mouse_clicked(in, NK_BUTTON_LEFT, nk_layout_space_bounds(ui_ctx))) { + it = editor->begin; + editor->selected = NULL; + editor->bounds = nk_rect(in->mouse.pos.x, in->mouse.pos.y, 100, 200); + while (it) { + struct nk_rect b = nk_layout_space_rect_to_screen(ui_ctx, it->bounds); + b.x -= editor->scrolling.x; + b.y -= editor->scrolling.y; + if (nk_input_is_mouse_hovering_rect(in, b)) + editor->selected = it; + it = it->next; + } + } + + /* contextual menu */ + if (nk_contextual_begin(ui_ctx, 0, nk_vec2(150, 220), nk_window_get_bounds(ui_ctx))) { + struct nk_vec2 wincoords = { in->mouse.pos.x-total_space.x-50, in->mouse.pos.y-total_space.y-32 }; + +#if 1 + static char *filter = 0; + static int do_filter = 0; + if( input_down(KEY_F) ) if( input(KEY_LCTRL) || input(KEY_RCTRL) ) do_filter ^= 1; + int choice = ui_toolbar(ICON_MD_SEARCH ";"); + if( choice == 1 ) do_filter = 1; + if( do_filter ) { + ui_string(ICON_MD_CLOSE " Filter " ICON_MD_SEARCH, &filter); + if( ui_label_icon_clicked_L.x > 0 && ui_label_icon_clicked_L.x <= 24 ) { // if clicked on CANCEL icon (1st icon) + do_filter = 0; + } + } else { + if( filter ) filter[0] = '\0'; + } + char *filter_mask = filter && filter[0] ? va("*%s*", filter) : "*"; +#endif + + #define ui_label_filtered(lbl) (strmatchi(lbl,filter_mask) && ui_label(lbl)) + + int close = 0; + if (ui_label_filtered("=Add Color node")) close=1,node_color_create(editor, wincoords); + if (ui_label_filtered("=Add Float node")) close=1,node_float_create(editor, wincoords); + if (ui_label_filtered("=Add Blend Node")) close=1,node_blend_create(editor, wincoords); + if (ui_label_filtered(editor->show_grid ? "=Hide Grid" : "=Show Grid")) + close=1,editor->show_grid = !editor->show_grid; + if(close) do_filter = 0, (filter ? filter[0] = '\0' : '\0'), nk_contextual_close(ui_ctx); + nk_contextual_end(ui_ctx); + } + } + nk_layout_space_end(ui_ctx); + + /* window content scrolling */ + if (nk_input_is_mouse_hovering_rect(in, nk_window_get_bounds(ui_ctx)) && + nk_input_is_mouse_down(in, NK_BUTTON_MIDDLE)) { + editor->scrolling.x += in->mouse.delta.x; + editor->scrolling.y += in->mouse.delta.y; + } + } + + return !nk_window_is_closed(ui_ctx, "NodeEdit"); +} + +int editor_nodes(int window_mode) { + window_mode = EDITOR_WINDOW; // force window + + if( editor_begin(NODES_TITLE, window_mode) ) { + + static struct node_editor nodeEditor = {0}; + node_editor(&nodeEditor); + + editor_end(window_mode); + } + return 0; +} + +AUTORUN { + array_push(editor.subeditors, editor_nodes); +} #line 0 #line 1 "v4k_editor_script.h" - -int ui_texture_fit(texture_t t, struct nk_rect bounds) { - // allocate complete window space - struct nk_rect total_space = nk_window_get_content_region(ui_ctx); - nk_layout_space_begin(ui_ctx, NK_DYNAMIC, total_space.h - 4, 1); // -4 to hide scrollbar Y - nk_layout_space_push(ui_ctx, nk_rect(0,0,1,1)); - - struct nk_command_buffer *canvas = nk_window_get_canvas(ui_ctx); - struct nk_image image = nk_image_id((int)t.id); - nk_draw_image(canvas, bounds, &image, nk_white); - - nk_layout_space_end(ui_ctx); - return 0; -} - -#define LITE_ICON ICON_MDI_SCRIPT_TEXT -#define LITE_TITLE "Script " LITE_ICON - -EDITOR_BIND(script, "held(CTRL)&down(6)", { ui_show(LITE_TITLE, ui_visible(LITE_TITLE) ^ true); }); - -int editor_scripted(int window_mode) { - window_mode = EDITOR_WINDOW; // force mode - - static lua_State *L = 0; - do_once { - L = script_init_env(SCRIPT_LUA|SCRIPT_DEBUGGER); - - const char *platform = "" // "Android" "FreeBSD" "OpenBSD" "NetBSD" - ifdef(ems, "Emscripten") - ifdef(linux, "Linux") - ifdef(osx, "macOS") - ifdef(win32, "Windows") - ; - const char *pathexe = vac("%s%s%s", app_path(), app_name(), ifdef(win32, ".exe", "")); - - gleqInit(); - gleqTrackWindow(window_handle()); - lt_init(L, window_handle(), LT_DATAPATH, __argc, __argv, window_scale(), platform, pathexe); - } - - unsigned lt_none = 0u; - unsigned lt_all = ~0u & ~(GLEQ_WINDOW_MOVED/*|GLEQ_WINDOW_RESIZED|GLEQ_WINDOW_REFRESH*/); - lt_events = lt_none; - - int mouse_in_rect = 0; - if( editor_begin(LITE_TITLE, window_mode) ) { - - lt_events = lt_all; - if( !nk_window_has_focus(ui_ctx) ) lt_events = lt_none; - - struct nk_rect bounds = nk_window_get_content_region(ui_ctx); - - lt_mx = input(MOUSE_X) - bounds.x; - lt_my = input(MOUSE_Y) - bounds.y; - lt_wx = bounds.x; - lt_wy = bounds.y; - lt_ww = bounds.w; - lt_wh = bounds.h; - - if( lt_resizesurface(lt_getsurface(0), lt_ww, lt_wh) ) { - gleq_window_refresh_callback(window_handle()); - } - // fullscreen_quad_rgb( lt_getsurface(0)->t, 1.2f ); - ui_texture_fit(lt_getsurface(0)->t, bounds); - - if( !!nk_input_is_mouse_hovering_rect(&ui_ctx->input, ((struct nk_rect){lt_wx+5,lt_wy+5,lt_ww-10,lt_wh-10})) ) { - lt_events &= ~(1<<31); // dont cursor shape - } - - editor_end(window_mode); - } - - lt_tick(L); - return 0; -} - -AUTORUN { - array_push(editor.subeditors, editor_scripted); -} + +int ui_texture_fit(texture_t t, struct nk_rect bounds) { + // allocate complete window space + struct nk_rect total_space = nk_window_get_content_region(ui_ctx); + nk_layout_space_begin(ui_ctx, NK_DYNAMIC, total_space.h - 4, 1); // -4 to hide scrollbar Y + nk_layout_space_push(ui_ctx, nk_rect(0,0,1,1)); + + struct nk_command_buffer *canvas = nk_window_get_canvas(ui_ctx); + struct nk_image image = nk_image_id((int)t.id); + nk_draw_image(canvas, bounds, &image, nk_white); + + nk_layout_space_end(ui_ctx); + return 0; +} + +#define LITE_ICON ICON_MDI_SCRIPT_TEXT +#define LITE_TITLE "Script " LITE_ICON + +EDITOR_BIND(script, "held(CTRL)&down(6)", { ui_show(LITE_TITLE, ui_visible(LITE_TITLE) ^ true); }); + +int editor_scripted(int window_mode) { + window_mode = EDITOR_WINDOW; // force mode + + static lua_State *L = 0; + do_once { + L = script_init_env(SCRIPT_LUA|SCRIPT_DEBUGGER); + + const char *platform = "" // "Android" "FreeBSD" "OpenBSD" "NetBSD" + ifdef(ems, "Emscripten") + ifdef(linux, "Linux") + ifdef(osx, "macOS") + ifdef(win32, "Windows") + ; + const char *pathexe = vac("%s%s%s", app_path(), app_name(), ifdef(win32, ".exe", "")); + + gleqInit(); + gleqTrackWindow(window_handle()); + lt_init(L, window_handle(), LT_DATAPATH, __argc, __argv, window_scale(), platform, pathexe); + } + + unsigned lt_none = 0u; + unsigned lt_all = ~0u & ~(GLEQ_WINDOW_MOVED/*|GLEQ_WINDOW_RESIZED|GLEQ_WINDOW_REFRESH*/); + lt_events = lt_none; + + int mouse_in_rect = 0; + if( editor_begin(LITE_TITLE, window_mode) ) { + + lt_events = lt_all; + if( !nk_window_has_focus(ui_ctx) ) lt_events = lt_none; + + struct nk_rect bounds = nk_window_get_content_region(ui_ctx); + + lt_mx = input(MOUSE_X) - bounds.x; + lt_my = input(MOUSE_Y) - bounds.y; + lt_wx = bounds.x; + lt_wy = bounds.y; + lt_ww = bounds.w; + lt_wh = bounds.h; + + if( lt_resizesurface(lt_getsurface(0), lt_ww, lt_wh) ) { + gleq_window_refresh_callback(window_handle()); + } + // fullscreen_quad_rgb( lt_getsurface(0)->t, 1.2f ); + ui_texture_fit(lt_getsurface(0)->t, bounds); + + if( !!nk_input_is_mouse_hovering_rect(&ui_ctx->input, ((struct nk_rect){lt_wx+5,lt_wy+5,lt_ww-10,lt_wh-10})) ) { + lt_events &= ~(1<<31); // dont cursor shape + } + + editor_end(window_mode); + } + + lt_tick(L); + return 0; +} + +AUTORUN { + array_push(editor.subeditors, editor_scripted); +} #line 0 #line 1 "v4k_end.c" -// Enable more performant GPUs on laptops. Does this work into a dll? -// int NvOptimusEnablement = 1; -// int AmdPowerXpressRequestHighPerformance = 1; - -#if is(linux) && is(tcc) // fixes `tcc: error: undefined symbol '__dso_handle'` -int __dso_handle; // compiled with: `tcc demo.c v4k.c -D__STDC_NO_VLA__ -lX11` -#endif - -#if is(win32) && is(tcc) // fixes `tcc: error: undefined symbol '_InterlockedExchangeAdd'` when compiling with `-m64` flag -__CRT_INLINE LONG _InterlockedExchangeAdd(LONG volatile *add, LONG val) { - LONG old; - do old = *add; while( InterlockedCompareExchange(add, old + val, old) != old ); - return old; -} -__CRT_INLINE LONGLONG _InterlockedExchangeAdd64(LONGLONG volatile *add, LONGLONG val) { // 64bit version, for completeness - LONGLONG old; - do old = *add; while( InterlockedCompareExchange64(add, old + val, old) != old ); - return old; -} -#endif - -#ifdef ZIG_CC -static int IN6_IS_ADDR_V4MAPPED(const struct in6_addr *a) { return ((a->s6_words[0]==0) && (a->s6_words[1]==0) && (a->s6_words[2]==0) && (a->s6_words[3]==0) && (a->s6_words[4]==0) && (a->s6_words[5]==0xffff)); } -const struct in6_addr in6addr_any; // = IN6ADDR_ANY_INIT; -//static const struct in6_addr in6addr_loopback = IN6ADDR_LOOPBACK_INIT; -#endif - -ifdef(retail, AUTORUN { - fclose(stderr); - fclose(stdout); - - const char* null_stream = ifdef(win32, "nul:", "/dev/null"); - - if (!freopen(null_stream, "a", stdout)) PANIC("cannot recreate standard streams"); - if (!freopen(null_stream, "a", stderr)) PANIC("cannot recreate standard streams"); -} ) +// Enable more performant GPUs on laptops. Does this work into a dll? +// int NvOptimusEnablement = 1; +// int AmdPowerXpressRequestHighPerformance = 1; + +#if is(linux) && is(tcc) // fixes `tcc: error: undefined symbol '__dso_handle'` +int __dso_handle; // compiled with: `tcc demo.c v4k.c -D__STDC_NO_VLA__ -lX11` +#endif + +#if is(win32) && is(tcc) // fixes `tcc: error: undefined symbol '_InterlockedExchangeAdd'` when compiling with `-m64` flag +__CRT_INLINE LONG _InterlockedExchangeAdd(LONG volatile *add, LONG val) { + LONG old; + do old = *add; while( InterlockedCompareExchange(add, old + val, old) != old ); + return old; +} +__CRT_INLINE LONGLONG _InterlockedExchangeAdd64(LONGLONG volatile *add, LONGLONG val) { // 64bit version, for completeness + LONGLONG old; + do old = *add; while( InterlockedCompareExchange64(add, old + val, old) != old ); + return old; +} +#endif + +#ifdef ZIG_CC +static int IN6_IS_ADDR_V4MAPPED(const struct in6_addr *a) { return ((a->s6_words[0]==0) && (a->s6_words[1]==0) && (a->s6_words[2]==0) && (a->s6_words[3]==0) && (a->s6_words[4]==0) && (a->s6_words[5]==0xffff)); } +const struct in6_addr in6addr_any; // = IN6ADDR_ANY_INIT; +//static const struct in6_addr in6addr_loopback = IN6ADDR_LOOPBACK_INIT; +#endif + +ifdef(retail, AUTORUN { + fclose(stderr); + fclose(stdout); + + const char* null_stream = ifdef(win32, "nul:", "/dev/null"); + + if (!freopen(null_stream, "a", stdout)) PANIC("cannot recreate standard streams"); + if (!freopen(null_stream, "a", stderr)) PANIC("cannot recreate standard streams"); +} ) #line 0 diff --git a/engine/v4k.h b/engine/v4k.h index 92ab3bc..491e79f 100644 --- a/engine/v4k.h +++ b/engine/v4k.h @@ -96,4956 +96,4956 @@ extern "C" { // Headers #line 1 "v4k_config.h" -// ----------------------------------------------------------------------------- -// config directives - -#ifndef ENABLE_FASTCALL_LUA -#define ENABLE_FASTCALL_LUA 1 ///+ -#endif - -#ifndef ENABLE_PROFILER -#define ENABLE_PROFILER ifdef(retail, 0, 1) ///+ -#endif - -#ifndef ENABLE_SELFIES -#define ENABLE_SELFIES 0 ///+ -#endif - -#ifndef ENABLE_MEMORY_POISON -#define ENABLE_MEMORY_POISON ifdef(debug, 1, 0) ///+ -#endif - -#ifndef ENABLE_MEMORY_LEAKS -#define ENABLE_MEMORY_LEAKS 0 ///+ -#endif - -#ifndef ENABLE_LINUX_CALLSTACKS -#define ENABLE_LINUX_CALLSTACKS 0 ///+ -#endif - -#ifndef ENABLE_AUTOTESTS -#define ENABLE_AUTOTESTS ifdef(debug, ifndef(ems, 1, 0), 0) ///+ -#endif - -#ifndef ENABLE_RETAIL -#define ENABLE_RETAIL 0 // ifdef(retail, 1, 0) ///+ -#endif - -#ifndef ENABLE_COOK -#define ENABLE_COOK ifdef(retail, 0, 1) ///+ -#endif - -#ifndef ENABLE_RPMALLOC -#define ENABLE_RPMALLOC 0 // ifdef(tcc, 0, 1) // forbidden on tcc because of lacking TLS support -#endif - -// ----------------------------------------------------------------------------- -// if/n/def hell - -#define ifdef(macro, yes, /*no*/...) ifdef_##macro(yes, __VA_ARGS__) -#define ifndef(macro, yes, /*no*/...) ifdef_##macro(__VA_ARGS__, yes) -#define is(macro) ifdef_##macro(1,0) -#define isnt(macro) ifdef_##macro(0,1) -#define ifdef_true(yes, /*no*/...) yes -#define ifdef_false(yes, /*no*/...) __VA_ARGS__ - -#ifdef _MSC_VER -#define ifdef_gcc ifdef_false -#define ifdef_mingw ifdef_false -#define ifdef_tcc ifdef_false -#define ifdef_cl ifdef_true -#elif defined __TINYC__ -#define ifdef_gcc ifdef_false -#define ifdef_mingw ifdef_false -#define ifdef_tcc ifdef_true -#define ifdef_cl ifdef_false -#elif defined __MINGW64__ || defined __MINGW32__ -#define ifdef_gcc ifdef_true -#define ifdef_mingw ifdef_true -#define ifdef_tcc ifdef_false -#define ifdef_cl ifdef_false -#else // also __clang__ -#define ifdef_gcc ifdef_true -#define ifdef_mingw ifdef_false -#define ifdef_tcc ifdef_false -#define ifdef_cl ifdef_false -#endif - -#ifdef __cplusplus -#define ifdef_cpp ifdef_true -#define ifdef_c ifdef_false -#else -#define ifdef_c ifdef_true -#define ifdef_cpp ifdef_false -#endif - -#if defined _WIN32 -#define ifdef_win32 ifdef_true -#define ifdef_linux ifdef_false -#define ifdef_osx ifdef_false -#define ifdef_bsd ifdef_false -#define ifdef_ems ifdef_false -#elif defined __linux__ -#define ifdef_win32 ifdef_false -#define ifdef_linux ifdef_true -#define ifdef_osx ifdef_false -#define ifdef_bsd ifdef_false -#define ifdef_ems ifdef_false -#elif defined __APPLE__ -#define ifdef_win32 ifdef_false -#define ifdef_linux ifdef_false -#define ifdef_osx ifdef_true -#define ifdef_bsd ifdef_false -#define ifdef_ems ifdef_false -#elif defined __EMSCRIPTEN__ -#define ifdef_win32 ifdef_false -#define ifdef_linux ifdef_false -#define ifdef_osx ifdef_false -#define ifdef_bsd ifdef_false -#define ifdef_ems ifdef_true -#else // __FreeBSD__ || @todo: __ANDROID_API__ -#define ifdef_win32 ifdef_false -#define ifdef_linux ifdef_false -#define ifdef_osx ifdef_false -#define ifdef_bsd ifdef_true -#define ifdef_ems ifdef_false -#endif - -#ifdef NDEBUG // rely on NDEBUG as the official/portable way to disable asserts -#define ifdef_debug ifdef_false -#define ifdef_release ifdef_true -#else -#define ifdef_debug ifdef_true -#define ifdef_release ifdef_false -#endif - -#if ENABLE_RETAIL // NDEBUG>=2 ? -#define ifdef_retail ifdef_true -#else -#define ifdef_retail ifdef_false -#endif - -#if ENABLE_COOK -#define ifdef_cook ifdef_true -#define ifdef_nocook ifdef_false -#else -#define ifdef_cook ifdef_false -#define ifdef_nocook ifdef_true -#endif - -#if defined NDEBUG && NDEBUG >= 3 // we use NDEBUG=[0,1,2,3] to signal the compiler optimization flags O0,O1,O2,O3 -#define ifdef_O3 ifdef_true -#define ifdef_O2 ifdef_false -#define ifdef_O1 ifdef_false -#define ifdef_O0 ifdef_false -#elif defined NDEBUG && NDEBUG >= 2 -#define ifdef_O3 ifdef_false -#define ifdef_O2 ifdef_true -#define ifdef_O1 ifdef_false -#define ifdef_O0 ifdef_false -#elif defined NDEBUG && NDEBUG >= 1 -#define ifdef_O3 ifdef_false -#define ifdef_O2 ifdef_false -#define ifdef_O1 ifdef_true -#define ifdef_O0 ifdef_false -#else -#define ifdef_O3 ifdef_false -#define ifdef_O2 ifdef_false -#define ifdef_O1 ifdef_false -#define ifdef_O0 ifdef_true -#endif - -#include -#if (defined INTPTR_MAX && INTPTR_MAX == INT64_MAX) || defined(_M_X64) || defined(__amd64__) || defined(__x86_64__) || defined(__ppc64__) || __WORDSIZE == 64 -#define ifdef_64 ifdef_true -#define ifdef_32 ifdef_false -#else -#define ifdef_64 ifdef_false -#define ifdef_32 ifdef_true -#endif - -// ----------------------------------------------------------------------------- -// new C keywords - -#define countof(x) (int)(sizeof (x) / sizeof 0[x]) - -#define concat(a,b) conc4t(a,b) -#define conc4t(a,b) a##b ///- - -#define macro(name) concat(name, __LINE__) -#define unique(name) concat(concat(concat(name,concat(_L,__LINE__)),_),__COUNTER__) -#define defer(begin,end) for(int macro(i) = ((begin), 0); !macro(i); macro(i) = ((end), 1)) -#define scope(end) defer((void)0, end) -#define benchmark for(double macro(i) = 1, macro(t) = (time_ss(),-time_ss()); macro(i); macro(t)+=time_ss(), macro(i)=0, printf("%.4fs %2.f%% (" FILELINE ")\n", macro(t), macro(t)*100/0.0166667 )) -#define benchmark_ms for(double macro(i) = 1, macro(t) = (time_ss(),-time_ss()); macro(i); macro(t)+=time_ss(), macro(i)=0, printf("%.2fms %2.f%% (" FILELINE ")\n", macro(t)*1000, macro(t)*100/0.016666667 )) -#define do_once static int macro(once) = 0; for(;!macro(once);macro(once)=1) - -#if is(cl) -#define __thread __declspec(thread) -#elif is(tcc) && is(win32) -#define __thread __declspec(thread) // compiles fine apparently, but does not work -#elif is(tcc) -#define __thread -#endif - -// usage: bool static(audio_is_init) = audio_init(); -//#define static(var) static var; do_once var - -//----------------------------------------------------------------------------- -// new C macros - -#if ENABLE_RETAIL -#define ASSERT(expr, ...) (void)0 -#define ASSERT_ONCE(expr, ...) (void)0 -#else -#define ASSERT(expr, ...) do { int fool_msvc[] = {0,}; if(!(expr)) { fool_msvc[0]++; alert(va("!Expression failed: " #expr " " FILELINE "\n" __VA_ARGS__)), breakpoint(); } } while(0) -#define ASSERT_ONCE(expr, ...) do { int fool_msvc[] = {0,}; if(!(expr)) { fool_msvc[0]++; static int seen = 0; if(!seen) seen = 1, alert(va("!Expression failed: " #expr " " FILELINE "\n" __VA_ARGS__)), breakpoint(); } } while(0) -#endif - -#ifndef STATIC_ASSERT -#define STATIC_ASSERT(EXPR) typedef struct { unsigned macro(static_assert_on_L) : !!(EXPR); } unique(static_assert_on_L) -#endif - -#define FILELINE __FILE__ ":" STRINGIZE(__LINE__) -#define STRINGIZE(x) STRINGIZ3(x) -#define STRINGIZ3(x) #x ///- - -#define EXPAND(name, ...) EXPAND_QUOTE(EXPAND_JOIN(name, EXPAND_COUNT_ARGS(__VA_ARGS__)), (__VA_ARGS__)) -#define EXPAND_QUOTE(x, y) x y ///- -#define EXPAND_JOIN(name, count) EXPAND_J0IN(name, count) ///- -#define EXPAND_J0IN(name, count) EXPAND_J01N(name, count) ///- -#define EXPAND_J01N(name, count) name##count ///- -#define EXPAND_COUNT_ARGS(...) EXPAND_ARGS((__VA_ARGS__, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0)) ///- -#define EXPAND_ARGS(args) EXPAND_RETURN_COUNT args ///- -#define EXPAND_RETURN_COUNT(_1_, _2_, _3_, _4_, _5_, _6_, _7_, _8_, _9_, count, ...) count ///- - -// expands to the first argument -#define VA_FIRST(...) VA_F1RST(__VA_ARGS__, throwaway) -#define VA_F1RST(first, ...) first ///- -// if there's only one argument, expands to nothing. if there is more -// than one argument, expands to a comma followed by everything but -// the first argument. only supports up to 9 arguments but can be expanded. -#define VA_REST(...) VA_R3ST(VA_NUM(__VA_ARGS__), __VA_ARGS__) -#define VA_R3ST(qty, ...) VA_R3S7(qty, __VA_ARGS__) ///- -#define VA_R3S7(qty, ...) VA_R3S7_##qty(__VA_ARGS__) ///- -#define VA_R3S7_ONE(first) ///- -#define VA_R3S7_TWOORMORE(first, ...) , __VA_ARGS__ ///- -#define VA_NUM(...) VA_SELECT_10TH(__VA_ARGS__, TWOORMORE, TWOORMORE, TWOORMORE, TWOORMORE, TWOORMORE, TWOORMORE, TWOORMORE, TWOORMORE, ONE, throwaway) ///- -#define VA_SELECT_10TH(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, ...) A10 -// VA_SPLIT() expands to A) 1 item OR B) 1 item + ',' + va_args[1..N] -#define VA_SPLIT(...) VA_FIRST(__VA_ARGS__) VA_REST(__VA_ARGS__) -// VA_COUNT() counts number of va args -#define VA_COUNT(...) (int)(sizeof((int[]){0, ##__VA_ARGS__})/sizeof(int)-1) - -#if is(cl) && !is(cpp) -#define INLINE __inline -#else -#define INLINE inline -#endif - -#if is(cl) -#define FORCE_INLINE __forceinline -#elif is(gcc) -#define FORCE_INLINE __attribute__((always_inline)) inline -#else -#define FORCE_INLINE INLINE -#endif - -#if is(cl) && (_MSC_VER <= 1700) -#define FINITE _finite -#else -#define FINITE isfinite -#endif - -// usage: #define vec2(...) C_CAST(vec2, __VA_ARGS__) -// typedef union vec2 { float X,Y; }; vec2 a = {0,1}, b = vec2(0,1); -#define C_CAST(type, ...) ( ifdef(c,(type),type) { __VA_ARGS__ } ) - -// create a WARNING(...) macro -// usage: WARNING("this is displayed at compile time") -#if is(gcc) -# define WARNING(msg) WARN1NG( message( msg ) ) -# define WARN1NG(msg) _Pragma(#msg) -#elif is(cl) -# define WARNING(msg) __pragma( message( msg ) ) -#else -# define WARNING(msg) -#endif - -// document todos and fixmes via compiler warnings -#define TODO(str) ifdef(debug,WARNING("TO DO: " str " (" FILELINE ")")) -#define FIXME(str) ifdef(debug,WARNING("FIXME: " str " (" FILELINE ")")) - -// ----------------------------------------------------------------------------- -// autorun initializers for C -// - rlyeh, public domain -// -// note: based on code by Joe Lowe (public domain). -// note: XIU for C initializers, XCU for C++ initializers, XTU for C deinitializers - -#define AUTORUN AUTORUN_( unique(fn) ) -#ifdef __cplusplus -#define AUTORUN_(fn) \ - static void fn(void); \ - static const int concat(fn,__1) = (fn(), 1); \ - static void fn(void) -#elif defined _MSC_VER && !defined(__clang__) // cl, but not clang-cl -#define AUTORUN_(fn) \ - static void fn(void); \ - static int concat(fn,__1) (){ fn(); return 0; } \ - __pragma(section(".CRT$XIU", long, read)) \ - __declspec(allocate(".CRT$XIU")) \ - static int(* concat(fn,__2) )() = concat(fn,__1); \ - static void fn(void) -#elif defined __TINYC__ // tcc... -#define AUTORUN_(fn) \ - __attribute__((constructor)) \ - static void fn(void) -#else // gcc,clang,clang-cl... -#define AUTORUN_(fn) \ - __attribute__((constructor(__COUNTER__+101))) \ - static void fn(void) -#endif - -// ----------------------------------------------------------------------------- -// build info - -#ifndef BUILD_VERSION -#define BUILD_VERSION "" -#endif - -// ----------------------------------------------------------------------------- -// visibility - -// win32 users would need to -DAPI=EXPORT/IMPORT as needed when building/using V4K as DLL. - -#define IMPORT ifdef(win32, ifdef(gcc, __attribute__ ((dllimport)), __declspec(dllimport))) -#define EXPORT ifdef(win32, ifdef(gcc, __attribute__ ((dllexport)), __declspec(dllexport))) -#define STATIC - -#ifndef API -#define API STATIC -#endif - -// ----------------------------------------------------------------------------- -// system headers - -#ifndef _GNU_SOURCE -#define _GNU_SOURCE ///- for linux -#endif - -#if is(cl) && is(win32) // for VC IDE -#define _CRT_SECURE_NO_WARNINGS ///- -#define _CRT_NONSTDC_NO_DEPRECATE ///- -#define _WINSOCK_DEPRECATED_NO_WARNINGS ///- -#define _WIN32_WINNT 0x0600 ///- 0x0502 // GetInfoAddrW/FreeAddrInfoW for X86 -#endif - -#if is(cl) -#include // compile with /openmp to speed up some computations -#endif -#include -//#include -//#include -#include // NAN -#include // va_*(), ... -#include // bool,true,false -#include // u/int8/16/32/64_t -#include // FILE,NULL -#include // malloc,free,exit, -#include // strlen,memset,memcpy, - -#if is(tcc) && is(win32) && defined(__x86_64) -#include - -// @fixme workarounds on `tcc0.9.27 -m64` (win) for fmod()/trunc() functions. test: 00-easing broken otherwise -//#define trunc(x) ((double)(int64_t)(x)) -//#define fmod(x,y) ((x) - trunc((x) / (y)) * (y)) - -// @fixme workarounds on `tcc0.9.27 -m64` (win) for all functions with ending bool argument. test: 00-anims crashes otherwise -#undef bool -typedef char bool; ///- - -// missing libm symbols on tinycc HEAD repo (tcc-x64 pre-0.9.28) -//#define fabsf fabs -#define sqrtf sqrt -#define sinf sin -#define asinf asin -#define cosf cos -#define acosf acos -#define tanf tan -#define atan2f atan2 -#define powf pow -#define floorf floor -#define logf log -#define ceilf ceil -#define copysignf copysign -//#define ldexpf ldexp -#define expf exp -//#define frexpf frexp -#define fmodf fmod -#define log10f log10 -//#define logf log -#define hypotf hypot - -#endif - -// ----------------------------------------------------------------------------- -// pragma libs - -#if is(win32) && (is(cl) || is(tcc)) -#pragma comment(lib, "advapi32") -#pragma comment(lib, "comdlg32") -#pragma comment(lib, "dbghelp") -#pragma comment(lib, "gdi32") -#pragma comment(lib, "ole32") -#pragma comment(lib, "shell32") -#pragma comment(lib, "user32") -#pragma comment(lib, "winmm") -#pragma comment(lib, "wininet") -#pragma comment(lib, "ws2_32") -#endif - -#if is(linux) && is(tcc) -#pragma comment(lib, "dl") -#pragma comment(lib, "m") -#pragma comment(lib, "pthread") -#endif +// ----------------------------------------------------------------------------- +// config directives + +#ifndef ENABLE_FASTCALL_LUA +#define ENABLE_FASTCALL_LUA 1 ///+ +#endif + +#ifndef ENABLE_PROFILER +#define ENABLE_PROFILER ifdef(retail, 0, 1) ///+ +#endif + +#ifndef ENABLE_SELFIES +#define ENABLE_SELFIES 0 ///+ +#endif + +#ifndef ENABLE_MEMORY_POISON +#define ENABLE_MEMORY_POISON ifdef(debug, 1, 0) ///+ +#endif + +#ifndef ENABLE_MEMORY_LEAKS +#define ENABLE_MEMORY_LEAKS 0 ///+ +#endif + +#ifndef ENABLE_LINUX_CALLSTACKS +#define ENABLE_LINUX_CALLSTACKS 0 ///+ +#endif + +#ifndef ENABLE_AUTOTESTS +#define ENABLE_AUTOTESTS ifdef(debug, ifndef(ems, 1, 0), 0) ///+ +#endif + +#ifndef ENABLE_RETAIL +#define ENABLE_RETAIL 0 // ifdef(retail, 1, 0) ///+ +#endif + +#ifndef ENABLE_COOK +#define ENABLE_COOK ifdef(retail, 0, 1) ///+ +#endif + +#ifndef ENABLE_RPMALLOC +#define ENABLE_RPMALLOC 0 // ifdef(tcc, 0, 1) // forbidden on tcc because of lacking TLS support +#endif + +// ----------------------------------------------------------------------------- +// if/n/def hell + +#define ifdef(macro, yes, /*no*/...) ifdef_##macro(yes, __VA_ARGS__) +#define ifndef(macro, yes, /*no*/...) ifdef_##macro(__VA_ARGS__, yes) +#define is(macro) ifdef_##macro(1,0) +#define isnt(macro) ifdef_##macro(0,1) +#define ifdef_true(yes, /*no*/...) yes +#define ifdef_false(yes, /*no*/...) __VA_ARGS__ + +#ifdef _MSC_VER +#define ifdef_gcc ifdef_false +#define ifdef_mingw ifdef_false +#define ifdef_tcc ifdef_false +#define ifdef_cl ifdef_true +#elif defined __TINYC__ +#define ifdef_gcc ifdef_false +#define ifdef_mingw ifdef_false +#define ifdef_tcc ifdef_true +#define ifdef_cl ifdef_false +#elif defined __MINGW64__ || defined __MINGW32__ +#define ifdef_gcc ifdef_true +#define ifdef_mingw ifdef_true +#define ifdef_tcc ifdef_false +#define ifdef_cl ifdef_false +#else // also __clang__ +#define ifdef_gcc ifdef_true +#define ifdef_mingw ifdef_false +#define ifdef_tcc ifdef_false +#define ifdef_cl ifdef_false +#endif + +#ifdef __cplusplus +#define ifdef_cpp ifdef_true +#define ifdef_c ifdef_false +#else +#define ifdef_c ifdef_true +#define ifdef_cpp ifdef_false +#endif + +#if defined _WIN32 +#define ifdef_win32 ifdef_true +#define ifdef_linux ifdef_false +#define ifdef_osx ifdef_false +#define ifdef_bsd ifdef_false +#define ifdef_ems ifdef_false +#elif defined __linux__ +#define ifdef_win32 ifdef_false +#define ifdef_linux ifdef_true +#define ifdef_osx ifdef_false +#define ifdef_bsd ifdef_false +#define ifdef_ems ifdef_false +#elif defined __APPLE__ +#define ifdef_win32 ifdef_false +#define ifdef_linux ifdef_false +#define ifdef_osx ifdef_true +#define ifdef_bsd ifdef_false +#define ifdef_ems ifdef_false +#elif defined __EMSCRIPTEN__ +#define ifdef_win32 ifdef_false +#define ifdef_linux ifdef_false +#define ifdef_osx ifdef_false +#define ifdef_bsd ifdef_false +#define ifdef_ems ifdef_true +#else // __FreeBSD__ || @todo: __ANDROID_API__ +#define ifdef_win32 ifdef_false +#define ifdef_linux ifdef_false +#define ifdef_osx ifdef_false +#define ifdef_bsd ifdef_true +#define ifdef_ems ifdef_false +#endif + +#ifdef NDEBUG // rely on NDEBUG as the official/portable way to disable asserts +#define ifdef_debug ifdef_false +#define ifdef_release ifdef_true +#else +#define ifdef_debug ifdef_true +#define ifdef_release ifdef_false +#endif + +#if ENABLE_RETAIL // NDEBUG>=2 ? +#define ifdef_retail ifdef_true +#else +#define ifdef_retail ifdef_false +#endif + +#if ENABLE_COOK +#define ifdef_cook ifdef_true +#define ifdef_nocook ifdef_false +#else +#define ifdef_cook ifdef_false +#define ifdef_nocook ifdef_true +#endif + +#if defined NDEBUG && NDEBUG >= 3 // we use NDEBUG=[0,1,2,3] to signal the compiler optimization flags O0,O1,O2,O3 +#define ifdef_O3 ifdef_true +#define ifdef_O2 ifdef_false +#define ifdef_O1 ifdef_false +#define ifdef_O0 ifdef_false +#elif defined NDEBUG && NDEBUG >= 2 +#define ifdef_O3 ifdef_false +#define ifdef_O2 ifdef_true +#define ifdef_O1 ifdef_false +#define ifdef_O0 ifdef_false +#elif defined NDEBUG && NDEBUG >= 1 +#define ifdef_O3 ifdef_false +#define ifdef_O2 ifdef_false +#define ifdef_O1 ifdef_true +#define ifdef_O0 ifdef_false +#else +#define ifdef_O3 ifdef_false +#define ifdef_O2 ifdef_false +#define ifdef_O1 ifdef_false +#define ifdef_O0 ifdef_true +#endif + +#include +#if (defined INTPTR_MAX && INTPTR_MAX == INT64_MAX) || defined(_M_X64) || defined(__amd64__) || defined(__x86_64__) || defined(__ppc64__) || __WORDSIZE == 64 +#define ifdef_64 ifdef_true +#define ifdef_32 ifdef_false +#else +#define ifdef_64 ifdef_false +#define ifdef_32 ifdef_true +#endif + +// ----------------------------------------------------------------------------- +// new C keywords + +#define countof(x) (int)(sizeof (x) / sizeof 0[x]) + +#define concat(a,b) conc4t(a,b) +#define conc4t(a,b) a##b ///- + +#define macro(name) concat(name, __LINE__) +#define unique(name) concat(concat(concat(name,concat(_L,__LINE__)),_),__COUNTER__) +#define defer(begin,end) for(int macro(i) = ((begin), 0); !macro(i); macro(i) = ((end), 1)) +#define scope(end) defer((void)0, end) +#define benchmark for(double macro(i) = 1, macro(t) = (time_ss(),-time_ss()); macro(i); macro(t)+=time_ss(), macro(i)=0, printf("%.4fs %2.f%% (" FILELINE ")\n", macro(t), macro(t)*100/0.0166667 )) +#define benchmark_ms for(double macro(i) = 1, macro(t) = (time_ss(),-time_ss()); macro(i); macro(t)+=time_ss(), macro(i)=0, printf("%.2fms %2.f%% (" FILELINE ")\n", macro(t)*1000, macro(t)*100/0.016666667 )) +#define do_once static int macro(once) = 0; for(;!macro(once);macro(once)=1) + +#if is(cl) +#define __thread __declspec(thread) +#elif is(tcc) && is(win32) +#define __thread __declspec(thread) // compiles fine apparently, but does not work +#elif is(tcc) +#define __thread +#endif + +// usage: bool static(audio_is_init) = audio_init(); +//#define static(var) static var; do_once var + +//----------------------------------------------------------------------------- +// new C macros + +#if ENABLE_RETAIL +#define ASSERT(expr, ...) (void)0 +#define ASSERT_ONCE(expr, ...) (void)0 +#else +#define ASSERT(expr, ...) do { int fool_msvc[] = {0,}; if(!(expr)) { fool_msvc[0]++; alert(va("!Expression failed: " #expr " " FILELINE "\n" __VA_ARGS__)), breakpoint(); } } while(0) +#define ASSERT_ONCE(expr, ...) do { int fool_msvc[] = {0,}; if(!(expr)) { fool_msvc[0]++; static int seen = 0; if(!seen) seen = 1, alert(va("!Expression failed: " #expr " " FILELINE "\n" __VA_ARGS__)), breakpoint(); } } while(0) +#endif + +#ifndef STATIC_ASSERT +#define STATIC_ASSERT(EXPR) typedef struct { unsigned macro(static_assert_on_L) : !!(EXPR); } unique(static_assert_on_L) +#endif + +#define FILELINE __FILE__ ":" STRINGIZE(__LINE__) +#define STRINGIZE(x) STRINGIZ3(x) +#define STRINGIZ3(x) #x ///- + +#define EXPAND(name, ...) EXPAND_QUOTE(EXPAND_JOIN(name, EXPAND_COUNT_ARGS(__VA_ARGS__)), (__VA_ARGS__)) +#define EXPAND_QUOTE(x, y) x y ///- +#define EXPAND_JOIN(name, count) EXPAND_J0IN(name, count) ///- +#define EXPAND_J0IN(name, count) EXPAND_J01N(name, count) ///- +#define EXPAND_J01N(name, count) name##count ///- +#define EXPAND_COUNT_ARGS(...) EXPAND_ARGS((__VA_ARGS__, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0)) ///- +#define EXPAND_ARGS(args) EXPAND_RETURN_COUNT args ///- +#define EXPAND_RETURN_COUNT(_1_, _2_, _3_, _4_, _5_, _6_, _7_, _8_, _9_, count, ...) count ///- + +// expands to the first argument +#define VA_FIRST(...) VA_F1RST(__VA_ARGS__, throwaway) +#define VA_F1RST(first, ...) first ///- +// if there's only one argument, expands to nothing. if there is more +// than one argument, expands to a comma followed by everything but +// the first argument. only supports up to 9 arguments but can be expanded. +#define VA_REST(...) VA_R3ST(VA_NUM(__VA_ARGS__), __VA_ARGS__) +#define VA_R3ST(qty, ...) VA_R3S7(qty, __VA_ARGS__) ///- +#define VA_R3S7(qty, ...) VA_R3S7_##qty(__VA_ARGS__) ///- +#define VA_R3S7_ONE(first) ///- +#define VA_R3S7_TWOORMORE(first, ...) , __VA_ARGS__ ///- +#define VA_NUM(...) VA_SELECT_10TH(__VA_ARGS__, TWOORMORE, TWOORMORE, TWOORMORE, TWOORMORE, TWOORMORE, TWOORMORE, TWOORMORE, TWOORMORE, ONE, throwaway) ///- +#define VA_SELECT_10TH(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, ...) A10 +// VA_SPLIT() expands to A) 1 item OR B) 1 item + ',' + va_args[1..N] +#define VA_SPLIT(...) VA_FIRST(__VA_ARGS__) VA_REST(__VA_ARGS__) +// VA_COUNT() counts number of va args +#define VA_COUNT(...) (int)(sizeof((int[]){0, ##__VA_ARGS__})/sizeof(int)-1) + +#if is(cl) && !is(cpp) +#define INLINE __inline +#else +#define INLINE inline +#endif + +#if is(cl) +#define FORCE_INLINE __forceinline +#elif is(gcc) +#define FORCE_INLINE __attribute__((always_inline)) inline +#else +#define FORCE_INLINE INLINE +#endif + +#if is(cl) && (_MSC_VER <= 1700) +#define FINITE _finite +#else +#define FINITE isfinite +#endif + +// usage: #define vec2(...) C_CAST(vec2, __VA_ARGS__) +// typedef union vec2 { float X,Y; }; vec2 a = {0,1}, b = vec2(0,1); +#define C_CAST(type, ...) ( ifdef(c,(type),type) { __VA_ARGS__ } ) + +// create a WARNING(...) macro +// usage: WARNING("this is displayed at compile time") +#if is(gcc) +# define WARNING(msg) WARN1NG( message( msg ) ) +# define WARN1NG(msg) _Pragma(#msg) +#elif is(cl) +# define WARNING(msg) __pragma( message( msg ) ) +#else +# define WARNING(msg) +#endif + +// document todos and fixmes via compiler warnings +#define TODO(str) ifdef(debug,WARNING("TO DO: " str " (" FILELINE ")")) +#define FIXME(str) ifdef(debug,WARNING("FIXME: " str " (" FILELINE ")")) + +// ----------------------------------------------------------------------------- +// autorun initializers for C +// - rlyeh, public domain +// +// note: based on code by Joe Lowe (public domain). +// note: XIU for C initializers, XCU for C++ initializers, XTU for C deinitializers + +#define AUTORUN AUTORUN_( unique(fn) ) +#ifdef __cplusplus +#define AUTORUN_(fn) \ + static void fn(void); \ + static const int concat(fn,__1) = (fn(), 1); \ + static void fn(void) +#elif defined _MSC_VER && !defined(__clang__) // cl, but not clang-cl +#define AUTORUN_(fn) \ + static void fn(void); \ + static int concat(fn,__1) (){ fn(); return 0; } \ + __pragma(section(".CRT$XIU", long, read)) \ + __declspec(allocate(".CRT$XIU")) \ + static int(* concat(fn,__2) )() = concat(fn,__1); \ + static void fn(void) +#elif defined __TINYC__ // tcc... +#define AUTORUN_(fn) \ + __attribute__((constructor)) \ + static void fn(void) +#else // gcc,clang,clang-cl... +#define AUTORUN_(fn) \ + __attribute__((constructor(__COUNTER__+101))) \ + static void fn(void) +#endif + +// ----------------------------------------------------------------------------- +// build info + +#ifndef BUILD_VERSION +#define BUILD_VERSION "" +#endif + +// ----------------------------------------------------------------------------- +// visibility + +// win32 users would need to -DAPI=EXPORT/IMPORT as needed when building/using V4K as DLL. + +#define IMPORT ifdef(win32, ifdef(gcc, __attribute__ ((dllimport)), __declspec(dllimport))) +#define EXPORT ifdef(win32, ifdef(gcc, __attribute__ ((dllexport)), __declspec(dllexport))) +#define STATIC + +#ifndef API +#define API STATIC +#endif + +// ----------------------------------------------------------------------------- +// system headers + +#ifndef _GNU_SOURCE +#define _GNU_SOURCE ///- for linux +#endif + +#if is(cl) && is(win32) // for VC IDE +#define _CRT_SECURE_NO_WARNINGS ///- +#define _CRT_NONSTDC_NO_DEPRECATE ///- +#define _WINSOCK_DEPRECATED_NO_WARNINGS ///- +#define _WIN32_WINNT 0x0600 ///- 0x0502 // GetInfoAddrW/FreeAddrInfoW for X86 +#endif + +#if is(cl) +#include // compile with /openmp to speed up some computations +#endif +#include +//#include +//#include +#include // NAN +#include // va_*(), ... +#include // bool,true,false +#include // u/int8/16/32/64_t +#include // FILE,NULL +#include // malloc,free,exit, +#include // strlen,memset,memcpy, + +#if is(tcc) && is(win32) && defined(__x86_64) +#include + +// @fixme workarounds on `tcc0.9.27 -m64` (win) for fmod()/trunc() functions. test: 00-easing broken otherwise +//#define trunc(x) ((double)(int64_t)(x)) +//#define fmod(x,y) ((x) - trunc((x) / (y)) * (y)) + +// @fixme workarounds on `tcc0.9.27 -m64` (win) for all functions with ending bool argument. test: 00-anims crashes otherwise +#undef bool +typedef char bool; ///- + +// missing libm symbols on tinycc HEAD repo (tcc-x64 pre-0.9.28) +//#define fabsf fabs +#define sqrtf sqrt +#define sinf sin +#define asinf asin +#define cosf cos +#define acosf acos +#define tanf tan +#define atan2f atan2 +#define powf pow +#define floorf floor +#define logf log +#define ceilf ceil +#define copysignf copysign +//#define ldexpf ldexp +#define expf exp +//#define frexpf frexp +#define fmodf fmod +#define log10f log10 +//#define logf log +#define hypotf hypot + +#endif + +// ----------------------------------------------------------------------------- +// pragma libs + +#if is(win32) && (is(cl) || is(tcc)) +#pragma comment(lib, "advapi32") +#pragma comment(lib, "comdlg32") +#pragma comment(lib, "dbghelp") +#pragma comment(lib, "gdi32") +#pragma comment(lib, "ole32") +#pragma comment(lib, "shell32") +#pragma comment(lib, "user32") +#pragma comment(lib, "winmm") +#pragma comment(lib, "wininet") +#pragma comment(lib, "ws2_32") +#endif + +#if is(linux) && is(tcc) +#pragma comment(lib, "dl") +#pragma comment(lib, "m") +#pragma comment(lib, "pthread") +#endif #line 0 #line 1 "v4k_ds.h" -// data structures and utils: array, set, map, hash, sort. -// - rlyeh, public domain - -// ----------------------------------------------------------------------------- -// less - -API int less_64(uint64_t a, uint64_t b); -API int less_int(int a, int b); -API int less_ptr(void *a, void *b); -API int less_str(char *a, char *b); - -// ----------------------------------------------------------------------------- -// qsort - -API int less_64_ptr(const void *a, const void *b); -API int less_int_ptr(const void *a, const void *b); - -// ----------------------------------------------------------------------------- -// un/hash - -API uint32_t unhash_32(uint32_t x); -API uint32_t hash_32(uint32_t x); -API uint64_t hash_64(uint64_t x); -API uint64_t hash_flt(double x); -API uint64_t hash_int(int key); -API uint64_t hash_ptr(const void* ptr); -API uint64_t hash_bin(const void* ptr, unsigned len); -API uint64_t hash_str(const char* str); - -// ----------------------------------------------------------------------------- -// bits - -API uint64_t popcnt64(uint64_t x); - -// ----------------------------------------------------------------------------- -// vector based allocator (x1.75 enlarge factor) - -API void* vrealloc( void* p, size_t sz ); -API size_t vlen( void* p ); - -// ----------------------------------------------------------------------------- -// arrays - -#if is(cpp) -#define array_cast(x) (decltype x) -#else -#define array_cast(x) (void *) -#endif - -#define array(t) t* -#define array_init(t) ( (t) = 0 ) -#define array_resize(t, n) ( array_c_ = array_count(t), array_n_ = (n), array_realloc_((t),array_n_), (array_n_>array_c_? memset(array_c_+(t),0,(array_n_-array_c_)*sizeof(0[t])) : (void*)0), (t) ) -#define array_push(t, ...) ( array_realloc_((t),array_count(t)+1), (t)[ array_count(t) - 1 ] = (__VA_ARGS__) ) -#define array_pop(t) ( array_realloc_((t), array_count(t)-1) ) -#define array_back(t) ( &(t)[ array_count(t)-1 ] ) // ( (t) ? &(t)[ array_count(t)-1 ] : NULL ) -#define array_data(t) (t) -#define array_at(t,i) (t[i]) -#define array_count(t) (int)( (t) ? array_vlen_(t) / sizeof(0[t]) : 0u ) -#define array_bytes(t) (int)( (t) ? array_vlen_(t) : 0u ) -#define array_sort(t, cmpfunc) qsort( t, array_count(t), sizeof(0[t]), (uintptr_t)cmpfunc == (uintptr_t)strcmp ? (void*)strcmp_qsort : (void*)cmpfunc ) -#define array_empty(t) ( !array_count(t) ) - -#define array_push_front(arr,x) \ - (array_resize((arr), array_count(arr)+1), memmove((arr)+1, (arr), sizeof(0[arr])*array_count(arr)), 0[arr] = (x)) -#define array_pop_front(arr) ( \ - (array_count(arr) > 1 ? memmove((arr), (arr)+1, sizeof(0[arr])*(array_count(arr)-1)) : (void*)0), \ - (array_count(arr) > 0 ? array_resize(arr, array_count(arr) - 1 ) : array_resize( arr, 0 ) ) ) - -static __thread unsigned array_c_; -static __thread unsigned array_n_; - -#if 0 // original: no reserve support -#define array_reserve(t, n) ((void)0) // not implemented -#define array_clear(t) ( array_realloc_((t), 0), (t) = 0 ) -#define array_vlen_(t) ( vlen(t) - 0 ) -#define array_realloc_(t,n) ( (t) = array_cast(t) vrealloc((t), ((n)+0) * sizeof(0[t])) ) -#define array_free(t) array_clear(t) -#else // new: with reserve support (@todo: check for bugs?) -#define array_reserve(t, n) ( array_realloc_((t),(n)), array_clear(t) ) -#define array_clear(t) ( array_realloc_((t),0) ) // -1 -#define array_vlen_(t) ( vlen(t) - sizeof(0[t]) ) // -1 -#define array_realloc_(t,n) ( (t) = array_cast(t) vrealloc((t), ((n)+1) * sizeof(0[t])) ) // +1 -#define array_free(t) ( array_realloc_((t), -1), (t) = 0 ) // -1 -#endif - -#define array_reverse(t) \ - do if( array_count(t) ) { \ - for(int l = array_count(t), e = l-1, i = (array_push(t, 0[t]), 0); i <= e/2; ++i ) \ - { l[t] = i[t]; i[t] = (e-i)[t]; (e-i)[t] = l[t]; } \ - array_pop(t); \ - } while(0) - -#define array_foreach(t,val_t,v) for each_array(t,val_t,v) -#define each_array(a,val_t,v) \ - ( array(val_t) a_ = (a); a_; a_ = 0 ) \ - for( int i_ = 0, e_ = array_count(a_); i_ < e_; ++i_ ) \ - for( val_t v = i_[a_], *v_ = (void*)(uintptr_t)&v; v_; v_ = 0 ) - -#define array_foreach_ptr(t,val_t,v) for each_array_ptr(t,val_t,v) -#define each_array_ptr(a,val_t,v) \ - ( array(val_t) a_ = (a); a_; a_ = 0 ) \ - for( int i_ = 0, e_ = array_count(a_); i_ < e_; ++i_ ) \ - for( val_t *v = (val_t*)&i_[a_]; v; v = 0 ) - -#define array_search(t, key, cmpfn) /* requires sorted array beforehand */ \ - bsearch(&key, t, array_count(t), sizeof(t[0]), cmpfn ) - -#define array_insert(t, i, n) do { \ - int ac = array_count(t); \ - if( i >= ac ) { \ - array_push(t, n); \ - } else { \ - array_push(t, array_back(t)); \ - memmove( &(t)[(i)+1], &(t)[i], (ac - (i)) * sizeof(t[0]) ); \ - (t)[ i ] = (n); \ - } \ -} while(0) - -#define array_copy(t, src) do { \ - array_free(t); \ - (t) = array_realloc_( (t), array_count(src)); \ - memcpy( (t), src, array_count(src) * sizeof(0[t])); \ -} while(0) - -#define array_erase_fast(t, i) do { /*alters ordering*/ \ - memcpy( &(t)[i], &(t)[array_count(t) - 1], sizeof(0[t])); \ - array_pop(t); \ -} while(0) - -#define array_erase_slow(t, i) do { /*preserves ordering*/ \ - memmove( &(t)[i], &(t)[i + 1], sizeof(0[t])*(array_count(t) - i - 1)); \ - array_pop(t); \ -} while(0) - -#define array_unique(t, cmpfunc) do { /*@todo: optimize me. requires array_sort() beforehand*/ \ - int cnt = array_count(t), cnt_bak = cnt; \ - if( cnt > 1 ) { \ - for( int i = 1; i < cnt; ++i ) { \ - while( i < cnt && !cmpfunc(&(t)[i-1], &(t)[i]) ) { \ - memmove(&(t)[i-1], &(t)[i], (cnt - 1 - i) * sizeof((t)[0]) ) ; \ - --cnt; \ - } \ - } \ - if( cnt_bak != cnt ) array_resize((t), cnt); \ - } \ - } while(0) - -#if 0 // snippet below does work -#define array_unique(t, cmpfunc) \ - array_sort(t, cmpfunc); \ - for( int i = 0, end = array_count(t) - 1; i < end; ) { \ - if( !strcmp(t[i], t[i+1]) ) { \ - /* array_erase(t, i+1); */ \ - memmove(&(t)[i+1], &(t)[i+2], (end - 1 - i) * sizeof((t)[0]) ); \ - array_pop(t); \ - --end; \ - } else { \ - ++i; \ - } \ - } -#endif - -#define array_shuffle(t) do { /* https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle */ \ - void* tmp = stack(sizeof(0[t])); \ - for( int i = 0, n = array_count(t); i < n; ++i ) { \ - int j = randi(i, n); /* j random integer such that [i,n) i<=j -// ideas from: https://en.wikipedia.org/wiki/Hash_table -// ideas from: https://probablydance.com/2017/02/26/i-wrote-the-fastest-hashtable/ -// ideas from: http://www.idryman.org/blog/2017/05/03/writing-a-damn-fast-hash-table-with-tiny-memory-footprints/ - -// config -#ifndef SET_HASHSIZE -#define SET_HASHSIZE (4096 << 4) -#endif -#ifndef SET_DONT_ERASE -#define SET_DONT_ERASE 1 -#endif - -// public api -#define set(K) \ - struct { set base; struct { set_item p; K key; } tmp, *ptr; K *tmpval; \ - int (*typed_cmp)(K, K); uint64_t (*typed_hash)(K); } * - -#define set_init(m, cmpfn, hashfn) ( \ - (m) = set_cast(m) REALLOC(0, sizeof(*m)), \ - set_init(&(m)->base), \ - (m)->base.cmp = (int(*)(void*,void*))( (m)->typed_cmp = set_cast(cmpfn) cmpfn ), \ - (m)->base.hash = (uint64_t(*)(void*))( (m)->typed_hash = set_cast(hashfn) hashfn ) \ - ) - -#define set_free(m) ( \ - set_clear(m), \ - set_free(&(m)->base), \ - (m) = set_cast(m) REALLOC((m), 0), \ - (m) = 0 \ - ) - -#define set_insert(m, k) ( \ - (m)->ptr = set_cast((m)->ptr) REALLOC(0, sizeof((m)->tmp)), \ - (m)->ptr->p.keyhash = (m)->typed_hash((m)->ptr->key = (k)), \ - set_insert(&(m)->base, &(m)->ptr->p, &(m)->ptr->key, (m)->ptr->p.keyhash, (m)->ptr), \ - &(m)->ptr->key \ - ) - -#define set_find(m, k) ( \ - (m)->ptr = &(m)->tmp, \ - (m)->ptr->p.keyhash = (m)->typed_hash((m)->ptr->key = (k)), \ - (m)->ptr = set_cast((m)->ptr) set_find(&(m)->base, &(m)->ptr->key, (m)->ptr->p.keyhash), \ - (m)->ptr ? &(m)->ptr->key : 0 \ - ) - -#define set_find_or_add(m, k) ( \ - (m)->tmp.key = (k), \ - (m)->tmpval = set_find((m), ((m)->tmp.key)), \ - (m)->tmpval = (m)->tmpval ? (m)->tmpval : set_insert((m), ((m)->tmp.key)) \ - ) - -#define set_find_or_add_allocated_key(m, k) ( \ - (m)->tmp.key = (k), \ - (m)->tmpval = set_find((m), ((m)->tmp.key)), \ - (m)->tmpval = (m)->tmpval ? FREE((m)->tmp.key), (m)->tmpval : set_insert((m), ((m)->tmp.key)) \ - ) - -#define set_erase(m, k) ( \ - (m)->ptr = &(m)->tmp, \ - (m)->ptr->p.keyhash = (m)->typed_hash((m)->ptr->key = (k)), \ - set_erase(&(m)->base, &(m)->ptr->key, (m)->ptr->p.keyhash) \ - ) - -#define set_foreach for each_set -#define each_set(m,key_t,k) \ - ( int i_ = (m)->base.count ? 0 : SET_HASHSIZE; i_ < SET_HASHSIZE; ++i_) \ - for( set_item *cur_ = (m)->base.array[i_], *on_ = cur_; cur_; on_ = cur_ = cur_->next ) \ - for( key_t k = *(key_t *)cur_->key; on_; on_ = 0 ) - -#define set_foreach_ptr for each_set_ptr -#define each_set_ptr(m,key_t,k) \ - ( int i_ = (m)->base.count ? 0 : SET_HASHSIZE; i_ < SET_HASHSIZE; ++i_) \ - for( set_item *cur_ = (m)->base.array[i_], *on_ = cur_; cur_; on_ = cur_ = cur_->next ) \ - for( key_t *k = (key_t *)cur_->key; on_; on_ = 0 ) - -#define set_clear(m) ( \ - set_clear(&(m)->base) \ - ) - -#define set_isempty(m) set_isempty(&(m)->base) -#define set_count(m) set_count(&(m)->base) -#define set_gc(m) set_gc(&(m)->base) - -#ifndef set_init_int -#define set_init_int(m) set_init((m), less_int, hash_64) // hash_int) -#define set_init_str(m) set_init((m), less_str, hash_str) -#define set_init_ptr(m) set_init((m), less_ptr, hash_ptr) -#endif - -// private: - -#if is(cpp) -#define set_cast(t) (decltype(t)) -#else -#define set_cast(t) (void *) -#endif - -typedef struct set_item { - struct set_item *next; - - uint64_t keyhash; - void *key; - void *super; -} set_item; - -typedef struct set { - array(set_item*) array; - int (*cmp)(void *, void *); - uint64_t (*hash)(void *); - int count; -} set; - -API void (set_init)(set *m); -API void (set_free)(set *m); - -API void (set_insert)(set *m, set_item *p, void *key, uint64_t keyhash, void *super); -API void (set_erase)(set *m, void *key, uint64_t keyhash); -API void* (set_find)(const set *m, void *key, uint64_t keyhash); -API int (set_isempty)(const set *m); -API int (set_count)(const set *m); -API void (set_gc)(set *m); // only if using SET_DONT_ERASE -API void (set_clear)(set* m); - -// ----------------------------------------------------------------------------- -// map -// ideas from: https://en.wikipedia.org/wiki/Hash_table -// ideas from: https://probablydance.com/2017/02/26/i-wrote-the-fastest-hashtable/ -// ideas from: http://www.idryman.org/blog/2017/05/03/writing-a-damn-fast-hash-table-with-tiny-memory-footprints/ - -// config -#ifndef MAP_HASHSIZE -#define MAP_HASHSIZE (4096 << 4) -#endif -#ifndef MAP_DONT_ERASE -#define MAP_DONT_ERASE 1 -#endif - -// public api -#define map(K,V) \ - struct { map base; struct { pair p; K key; V val; } tmp, *ptr; V* tmpval; \ - int (*typed_cmp)(K, K); uint64_t (*typed_hash)(K); } * - -#define map_init(m, cmpfn, hashfn) ( \ - (m) = map_cast(m) REALLOC(0, sizeof(*(m))), \ - map_init(&(m)->base), \ - (m)->base.cmp = (int(*)(void*,void*))( (m)->typed_cmp = map_cast((m)->typed_cmp) cmpfn), \ - (m)->base.hash = (uint64_t(*)(void*))( (m)->typed_hash = map_cast((m)->typed_hash) hashfn ) \ - ) - -#define map_free(m) ( \ - map_free(&(m)->base), \ - map_cast(m) REALLOC((m), sizeof(*(m))), (m) = 0 \ - ) - -#define map_insert(m, k, v) ( \ - (m)->ptr = map_cast((m)->ptr) REALLOC(0, sizeof((m)->tmp)), \ - (m)->ptr->val = (v), \ - (m)->ptr->p.keyhash = (m)->typed_hash((m)->ptr->key = (k)), \ - map_insert(&(m)->base, &(m)->ptr->p, &(m)->ptr->key, &(m)->ptr->val, (m)->ptr->p.keyhash, (m)->ptr), \ - &(m)->ptr->val \ - ) - -#define map_find(m, k) ( \ - (m)->ptr = &(m)->tmp, \ - (m)->ptr->p.keyhash = (m)->typed_hash((m)->ptr->key = (k)), \ - (m)->ptr = map_cast((m)->ptr) map_find(&(m)->base, &(m)->ptr->key, (m)->ptr->p.keyhash), \ - (m)->ptr ? &(m)->ptr->val : 0 \ - ) - -#define map_find_or_add(m, k, v) ( \ - (m)->tmp.key = (k), (m)->tmp.val = (v), \ - (m)->tmpval = map_find((m), ((m)->tmp.key)), \ - (m)->tmpval = (m)->tmpval ? (m)->tmpval : map_insert((m), ((m)->tmp.key), ((m)->tmp.val)) \ - ) - -#define map_find_or_add_allocated_key(m, k, v) ( \ - (m)->tmp.key = (k), (m)->tmp.val = (v), \ - (m)->tmpval = map_find((m), ((m)->tmp.key)), \ - (m)->tmpval = (m)->tmpval ? FREE((m)->tmp.key), (m)->tmpval : map_insert((m), ((m)->tmp.key), ((m)->tmp.val)) \ - ) - -#define map_erase(m, k) ( \ - (m)->ptr = &(m)->tmp, \ - (m)->ptr->p.keyhash = (m)->typed_hash((m)->ptr->key = (k)), \ - map_erase(&(m)->base, &(m)->ptr->key, (m)->ptr->p.keyhash) \ - ) - -#define map_foreach for each_map -#define each_map(m,key_t,k,val_t,v) \ - ( int i_ = (m)->base.count ? 0 : MAP_HASHSIZE; i_ < MAP_HASHSIZE; ++i_) \ - for( pair *cur_ = (m)->base.array[i_], *on_ = cur_; cur_; on_ = cur_ = cur_->next ) \ - for( key_t k = *(key_t *)cur_->key; on_; ) \ - for( val_t v = *(val_t *)cur_->value; on_; on_ = 0 ) - -#define map_foreach_ptr for each_map_ptr -#define each_map_ptr(m,key_t,k,val_t,v) \ - ( int i_ = (m)->base.count ? 0 : MAP_HASHSIZE; i_ < MAP_HASHSIZE; ++i_) \ - for( pair *cur_ = (m)->base.array[i_], *on_ = cur_; cur_; on_ = cur_ = cur_->next ) \ - for( key_t *k = (key_t *)cur_->key; on_; ) \ - for( val_t *v = (val_t *)cur_->value; on_; on_ = 0 ) - -#define map_foreach_ptr_sorted for each_map_ptr_sorted -#define each_map_ptr_sorted(m,key_t,k,val_t,v) \ - ( int i_ = (map_sort(&(m)->base), 0); i_ < array_count((m)->base.sorted); ++i_) \ - for( pair *cur_ = (m)->base.sorted[i_]; cur_; ) \ - for( key_t *k = (key_t *)cur_->key; cur_; ) \ - for( val_t *v = (val_t *)cur_->value; cur_; cur_ = 0 ) - -#define map_clear(m) ( \ - map_clear(&(m)->base) \ - ) - -#define map_isempty(m) map_isempty(&(m)->base) -#define map_count(m) map_count(&(m)->base) -#define map_gc(m) map_gc(&(m)->base) - -// aliases: - -#ifndef map_init_int -#define map_init_int(m) map_init((m), less_int, hash_64) // hash_int -#define map_init_str(m) map_init((m), less_str, hash_str) -#define map_init_ptr(m) map_init((m), less_ptr, hash_ptr) -#endif - -// private: - -#if is(cpp) -#define map_cast(t) (decltype(t)) -#else -#define map_cast(t) (void *) -#endif - -typedef struct pair { - struct pair *next; - - uint64_t keyhash; - void *key; - void *value; - void *super; -} pair; - -typedef struct map { - array(pair*) array; - int (*cmp)(void *, void *); - uint64_t (*hash)(void *); - int count:31; - - int is_sorted:1; - array(pair*) sorted; -} map; - -API void (map_init)(map *m); -API void (map_free)(map *m); - -API void (map_insert)(map *m, pair *p, void *key, void *value, uint64_t keyhash, void *super); -API void (map_erase)(map *m, void *key, uint64_t keyhash); -API void* (map_find)(map *m, void *key, uint64_t keyhash); -API int (map_isempty)(map *m); -API int (map_count)(map *m); -API void (map_gc)(map *m); // only if using MAP_DONT_ERASE -API bool (map_sort)(map* m); -API void (map_clear)(map* m); +// data structures and utils: array, set, map, hash, sort. +// - rlyeh, public domain + +// ----------------------------------------------------------------------------- +// less + +API int less_64(uint64_t a, uint64_t b); +API int less_int(int a, int b); +API int less_ptr(void *a, void *b); +API int less_str(char *a, char *b); + +// ----------------------------------------------------------------------------- +// qsort + +API int less_64_ptr(const void *a, const void *b); +API int less_int_ptr(const void *a, const void *b); + +// ----------------------------------------------------------------------------- +// un/hash + +API uint32_t unhash_32(uint32_t x); +API uint32_t hash_32(uint32_t x); +API uint64_t hash_64(uint64_t x); +API uint64_t hash_flt(double x); +API uint64_t hash_int(int key); +API uint64_t hash_ptr(const void* ptr); +API uint64_t hash_bin(const void* ptr, unsigned len); +API uint64_t hash_str(const char* str); + +// ----------------------------------------------------------------------------- +// bits + +API uint64_t popcnt64(uint64_t x); + +// ----------------------------------------------------------------------------- +// vector based allocator (x1.75 enlarge factor) + +API void* vrealloc( void* p, size_t sz ); +API size_t vlen( void* p ); + +// ----------------------------------------------------------------------------- +// arrays + +#if is(cpp) +#define array_cast(x) (decltype x) +#else +#define array_cast(x) (void *) +#endif + +#define array(t) t* +#define array_init(t) ( (t) = 0 ) +#define array_resize(t, n) ( array_c_ = array_count(t), array_n_ = (n), array_realloc_((t),array_n_), (array_n_>array_c_? memset(array_c_+(t),0,(array_n_-array_c_)*sizeof(0[t])) : (void*)0), (t) ) +#define array_push(t, ...) ( array_realloc_((t),array_count(t)+1), (t)[ array_count(t) - 1 ] = (__VA_ARGS__) ) +#define array_pop(t) ( array_realloc_((t), array_count(t)-1) ) +#define array_back(t) ( &(t)[ array_count(t)-1 ] ) // ( (t) ? &(t)[ array_count(t)-1 ] : NULL ) +#define array_data(t) (t) +#define array_at(t,i) (t[i]) +#define array_count(t) (int)( (t) ? array_vlen_(t) / sizeof(0[t]) : 0u ) +#define array_bytes(t) (int)( (t) ? array_vlen_(t) : 0u ) +#define array_sort(t, cmpfunc) qsort( t, array_count(t), sizeof(0[t]), (uintptr_t)cmpfunc == (uintptr_t)strcmp ? (void*)strcmp_qsort : (void*)cmpfunc ) +#define array_empty(t) ( !array_count(t) ) + +#define array_push_front(arr,x) \ + (array_resize((arr), array_count(arr)+1), memmove((arr)+1, (arr), sizeof(0[arr])*array_count(arr)), 0[arr] = (x)) +#define array_pop_front(arr) ( \ + (array_count(arr) > 1 ? memmove((arr), (arr)+1, sizeof(0[arr])*(array_count(arr)-1)) : (void*)0), \ + (array_count(arr) > 0 ? array_resize(arr, array_count(arr) - 1 ) : array_resize( arr, 0 ) ) ) + +static __thread unsigned array_c_; +static __thread unsigned array_n_; + +#if 0 // original: no reserve support +#define array_reserve(t, n) ((void)0) // not implemented +#define array_clear(t) ( array_realloc_((t), 0), (t) = 0 ) +#define array_vlen_(t) ( vlen(t) - 0 ) +#define array_realloc_(t,n) ( (t) = array_cast(t) vrealloc((t), ((n)+0) * sizeof(0[t])) ) +#define array_free(t) array_clear(t) +#else // new: with reserve support (@todo: check for bugs?) +#define array_reserve(t, n) ( array_realloc_((t),(n)), array_clear(t) ) +#define array_clear(t) ( array_realloc_((t),0) ) // -1 +#define array_vlen_(t) ( vlen(t) - sizeof(0[t]) ) // -1 +#define array_realloc_(t,n) ( (t) = array_cast(t) vrealloc((t), ((n)+1) * sizeof(0[t])) ) // +1 +#define array_free(t) ( array_realloc_((t), -1), (t) = 0 ) // -1 +#endif + +#define array_reverse(t) \ + do if( array_count(t) ) { \ + for(int l = array_count(t), e = l-1, i = (array_push(t, 0[t]), 0); i <= e/2; ++i ) \ + { l[t] = i[t]; i[t] = (e-i)[t]; (e-i)[t] = l[t]; } \ + array_pop(t); \ + } while(0) + +#define array_foreach(t,val_t,v) for each_array(t,val_t,v) +#define each_array(a,val_t,v) \ + ( array(val_t) a_ = (a); a_; a_ = 0 ) \ + for( int i_ = 0, e_ = array_count(a_); i_ < e_; ++i_ ) \ + for( val_t v = i_[a_], *v_ = (void*)(uintptr_t)&v; v_; v_ = 0 ) + +#define array_foreach_ptr(t,val_t,v) for each_array_ptr(t,val_t,v) +#define each_array_ptr(a,val_t,v) \ + ( array(val_t) a_ = (a); a_; a_ = 0 ) \ + for( int i_ = 0, e_ = array_count(a_); i_ < e_; ++i_ ) \ + for( val_t *v = (val_t*)&i_[a_]; v; v = 0 ) + +#define array_search(t, key, cmpfn) /* requires sorted array beforehand */ \ + bsearch(&key, t, array_count(t), sizeof(t[0]), cmpfn ) + +#define array_insert(t, i, n) do { \ + int ac = array_count(t); \ + if( i >= ac ) { \ + array_push(t, n); \ + } else { \ + array_push(t, array_back(t)); \ + memmove( &(t)[(i)+1], &(t)[i], (ac - (i)) * sizeof(t[0]) ); \ + (t)[ i ] = (n); \ + } \ +} while(0) + +#define array_copy(t, src) do { \ + array_free(t); \ + (t) = array_realloc_( (t), array_count(src)); \ + memcpy( (t), src, array_count(src) * sizeof(0[t])); \ +} while(0) + +#define array_erase_fast(t, i) do { /*alters ordering*/ \ + memcpy( &(t)[i], &(t)[array_count(t) - 1], sizeof(0[t])); \ + array_pop(t); \ +} while(0) + +#define array_erase_slow(t, i) do { /*preserves ordering*/ \ + memmove( &(t)[i], &(t)[i + 1], sizeof(0[t])*(array_count(t) - i - 1)); \ + array_pop(t); \ +} while(0) + +#define array_unique(t, cmpfunc) do { /*@todo: optimize me. requires array_sort() beforehand*/ \ + int cnt = array_count(t), cnt_bak = cnt; \ + if( cnt > 1 ) { \ + for( int i = 1; i < cnt; ++i ) { \ + while( i < cnt && !cmpfunc(&(t)[i-1], &(t)[i]) ) { \ + memmove(&(t)[i-1], &(t)[i], (cnt - 1 - i) * sizeof((t)[0]) ) ; \ + --cnt; \ + } \ + } \ + if( cnt_bak != cnt ) array_resize((t), cnt); \ + } \ + } while(0) + +#if 0 // snippet below does work +#define array_unique(t, cmpfunc) \ + array_sort(t, cmpfunc); \ + for( int i = 0, end = array_count(t) - 1; i < end; ) { \ + if( !strcmp(t[i], t[i+1]) ) { \ + /* array_erase(t, i+1); */ \ + memmove(&(t)[i+1], &(t)[i+2], (end - 1 - i) * sizeof((t)[0]) ); \ + array_pop(t); \ + --end; \ + } else { \ + ++i; \ + } \ + } +#endif + +#define array_shuffle(t) do { /* https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle */ \ + void* tmp = stack(sizeof(0[t])); \ + for( int i = 0, n = array_count(t); i < n; ++i ) { \ + int j = randi(i, n); /* j random integer such that [i,n) i<=j +// ideas from: https://en.wikipedia.org/wiki/Hash_table +// ideas from: https://probablydance.com/2017/02/26/i-wrote-the-fastest-hashtable/ +// ideas from: http://www.idryman.org/blog/2017/05/03/writing-a-damn-fast-hash-table-with-tiny-memory-footprints/ + +// config +#ifndef SET_HASHSIZE +#define SET_HASHSIZE (4096 << 4) +#endif +#ifndef SET_DONT_ERASE +#define SET_DONT_ERASE 1 +#endif + +// public api +#define set(K) \ + struct { set base; struct { set_item p; K key; } tmp, *ptr; K *tmpval; \ + int (*typed_cmp)(K, K); uint64_t (*typed_hash)(K); } * + +#define set_init(m, cmpfn, hashfn) ( \ + (m) = set_cast(m) REALLOC(0, sizeof(*m)), \ + set_init(&(m)->base), \ + (m)->base.cmp = (int(*)(void*,void*))( (m)->typed_cmp = set_cast(cmpfn) cmpfn ), \ + (m)->base.hash = (uint64_t(*)(void*))( (m)->typed_hash = set_cast(hashfn) hashfn ) \ + ) + +#define set_free(m) ( \ + set_clear(m), \ + set_free(&(m)->base), \ + (m) = set_cast(m) REALLOC((m), 0), \ + (m) = 0 \ + ) + +#define set_insert(m, k) ( \ + (m)->ptr = set_cast((m)->ptr) REALLOC(0, sizeof((m)->tmp)), \ + (m)->ptr->p.keyhash = (m)->typed_hash((m)->ptr->key = (k)), \ + set_insert(&(m)->base, &(m)->ptr->p, &(m)->ptr->key, (m)->ptr->p.keyhash, (m)->ptr), \ + &(m)->ptr->key \ + ) + +#define set_find(m, k) ( \ + (m)->ptr = &(m)->tmp, \ + (m)->ptr->p.keyhash = (m)->typed_hash((m)->ptr->key = (k)), \ + (m)->ptr = set_cast((m)->ptr) set_find(&(m)->base, &(m)->ptr->key, (m)->ptr->p.keyhash), \ + (m)->ptr ? &(m)->ptr->key : 0 \ + ) + +#define set_find_or_add(m, k) ( \ + (m)->tmp.key = (k), \ + (m)->tmpval = set_find((m), ((m)->tmp.key)), \ + (m)->tmpval = (m)->tmpval ? (m)->tmpval : set_insert((m), ((m)->tmp.key)) \ + ) + +#define set_find_or_add_allocated_key(m, k) ( \ + (m)->tmp.key = (k), \ + (m)->tmpval = set_find((m), ((m)->tmp.key)), \ + (m)->tmpval = (m)->tmpval ? FREE((m)->tmp.key), (m)->tmpval : set_insert((m), ((m)->tmp.key)) \ + ) + +#define set_erase(m, k) ( \ + (m)->ptr = &(m)->tmp, \ + (m)->ptr->p.keyhash = (m)->typed_hash((m)->ptr->key = (k)), \ + set_erase(&(m)->base, &(m)->ptr->key, (m)->ptr->p.keyhash) \ + ) + +#define set_foreach for each_set +#define each_set(m,key_t,k) \ + ( int i_ = (m)->base.count ? 0 : SET_HASHSIZE; i_ < SET_HASHSIZE; ++i_) \ + for( set_item *cur_ = (m)->base.array[i_], *on_ = cur_; cur_; on_ = cur_ = cur_->next ) \ + for( key_t k = *(key_t *)cur_->key; on_; on_ = 0 ) + +#define set_foreach_ptr for each_set_ptr +#define each_set_ptr(m,key_t,k) \ + ( int i_ = (m)->base.count ? 0 : SET_HASHSIZE; i_ < SET_HASHSIZE; ++i_) \ + for( set_item *cur_ = (m)->base.array[i_], *on_ = cur_; cur_; on_ = cur_ = cur_->next ) \ + for( key_t *k = (key_t *)cur_->key; on_; on_ = 0 ) + +#define set_clear(m) ( \ + set_clear(&(m)->base) \ + ) + +#define set_isempty(m) set_isempty(&(m)->base) +#define set_count(m) set_count(&(m)->base) +#define set_gc(m) set_gc(&(m)->base) + +#ifndef set_init_int +#define set_init_int(m) set_init((m), less_int, hash_64) // hash_int) +#define set_init_str(m) set_init((m), less_str, hash_str) +#define set_init_ptr(m) set_init((m), less_ptr, hash_ptr) +#endif + +// private: + +#if is(cpp) +#define set_cast(t) (decltype(t)) +#else +#define set_cast(t) (void *) +#endif + +typedef struct set_item { + struct set_item *next; + + uint64_t keyhash; + void *key; + void *super; +} set_item; + +typedef struct set { + array(set_item*) array; + int (*cmp)(void *, void *); + uint64_t (*hash)(void *); + int count; +} set; + +API void (set_init)(set *m); +API void (set_free)(set *m); + +API void (set_insert)(set *m, set_item *p, void *key, uint64_t keyhash, void *super); +API void (set_erase)(set *m, void *key, uint64_t keyhash); +API void* (set_find)(const set *m, void *key, uint64_t keyhash); +API int (set_isempty)(const set *m); +API int (set_count)(const set *m); +API void (set_gc)(set *m); // only if using SET_DONT_ERASE +API void (set_clear)(set* m); + +// ----------------------------------------------------------------------------- +// map +// ideas from: https://en.wikipedia.org/wiki/Hash_table +// ideas from: https://probablydance.com/2017/02/26/i-wrote-the-fastest-hashtable/ +// ideas from: http://www.idryman.org/blog/2017/05/03/writing-a-damn-fast-hash-table-with-tiny-memory-footprints/ + +// config +#ifndef MAP_HASHSIZE +#define MAP_HASHSIZE (4096 << 4) +#endif +#ifndef MAP_DONT_ERASE +#define MAP_DONT_ERASE 1 +#endif + +// public api +#define map(K,V) \ + struct { map base; struct { pair p; K key; V val; } tmp, *ptr; V* tmpval; \ + int (*typed_cmp)(K, K); uint64_t (*typed_hash)(K); } * + +#define map_init(m, cmpfn, hashfn) ( \ + (m) = map_cast(m) REALLOC(0, sizeof(*(m))), \ + map_init(&(m)->base), \ + (m)->base.cmp = (int(*)(void*,void*))( (m)->typed_cmp = map_cast((m)->typed_cmp) cmpfn), \ + (m)->base.hash = (uint64_t(*)(void*))( (m)->typed_hash = map_cast((m)->typed_hash) hashfn ) \ + ) + +#define map_free(m) ( \ + map_free(&(m)->base), \ + map_cast(m) REALLOC((m), sizeof(*(m))), (m) = 0 \ + ) + +#define map_insert(m, k, v) ( \ + (m)->ptr = map_cast((m)->ptr) REALLOC(0, sizeof((m)->tmp)), \ + (m)->ptr->val = (v), \ + (m)->ptr->p.keyhash = (m)->typed_hash((m)->ptr->key = (k)), \ + map_insert(&(m)->base, &(m)->ptr->p, &(m)->ptr->key, &(m)->ptr->val, (m)->ptr->p.keyhash, (m)->ptr), \ + &(m)->ptr->val \ + ) + +#define map_find(m, k) ( \ + (m)->ptr = &(m)->tmp, \ + (m)->ptr->p.keyhash = (m)->typed_hash((m)->ptr->key = (k)), \ + (m)->ptr = map_cast((m)->ptr) map_find(&(m)->base, &(m)->ptr->key, (m)->ptr->p.keyhash), \ + (m)->ptr ? &(m)->ptr->val : 0 \ + ) + +#define map_find_or_add(m, k, v) ( \ + (m)->tmp.key = (k), (m)->tmp.val = (v), \ + (m)->tmpval = map_find((m), ((m)->tmp.key)), \ + (m)->tmpval = (m)->tmpval ? (m)->tmpval : map_insert((m), ((m)->tmp.key), ((m)->tmp.val)) \ + ) + +#define map_find_or_add_allocated_key(m, k, v) ( \ + (m)->tmp.key = (k), (m)->tmp.val = (v), \ + (m)->tmpval = map_find((m), ((m)->tmp.key)), \ + (m)->tmpval = (m)->tmpval ? FREE((m)->tmp.key), (m)->tmpval : map_insert((m), ((m)->tmp.key), ((m)->tmp.val)) \ + ) + +#define map_erase(m, k) ( \ + (m)->ptr = &(m)->tmp, \ + (m)->ptr->p.keyhash = (m)->typed_hash((m)->ptr->key = (k)), \ + map_erase(&(m)->base, &(m)->ptr->key, (m)->ptr->p.keyhash) \ + ) + +#define map_foreach for each_map +#define each_map(m,key_t,k,val_t,v) \ + ( int i_ = (m)->base.count ? 0 : MAP_HASHSIZE; i_ < MAP_HASHSIZE; ++i_) \ + for( pair *cur_ = (m)->base.array[i_], *on_ = cur_; cur_; on_ = cur_ = cur_->next ) \ + for( key_t k = *(key_t *)cur_->key; on_; ) \ + for( val_t v = *(val_t *)cur_->value; on_; on_ = 0 ) + +#define map_foreach_ptr for each_map_ptr +#define each_map_ptr(m,key_t,k,val_t,v) \ + ( int i_ = (m)->base.count ? 0 : MAP_HASHSIZE; i_ < MAP_HASHSIZE; ++i_) \ + for( pair *cur_ = (m)->base.array[i_], *on_ = cur_; cur_; on_ = cur_ = cur_->next ) \ + for( key_t *k = (key_t *)cur_->key; on_; ) \ + for( val_t *v = (val_t *)cur_->value; on_; on_ = 0 ) + +#define map_foreach_ptr_sorted for each_map_ptr_sorted +#define each_map_ptr_sorted(m,key_t,k,val_t,v) \ + ( int i_ = (map_sort(&(m)->base), 0); i_ < array_count((m)->base.sorted); ++i_) \ + for( pair *cur_ = (m)->base.sorted[i_]; cur_; ) \ + for( key_t *k = (key_t *)cur_->key; cur_; ) \ + for( val_t *v = (val_t *)cur_->value; cur_; cur_ = 0 ) + +#define map_clear(m) ( \ + map_clear(&(m)->base) \ + ) + +#define map_isempty(m) map_isempty(&(m)->base) +#define map_count(m) map_count(&(m)->base) +#define map_gc(m) map_gc(&(m)->base) + +// aliases: + +#ifndef map_init_int +#define map_init_int(m) map_init((m), less_int, hash_64) // hash_int +#define map_init_str(m) map_init((m), less_str, hash_str) +#define map_init_ptr(m) map_init((m), less_ptr, hash_ptr) +#endif + +// private: + +#if is(cpp) +#define map_cast(t) (decltype(t)) +#else +#define map_cast(t) (void *) +#endif + +typedef struct pair { + struct pair *next; + + uint64_t keyhash; + void *key; + void *value; + void *super; +} pair; + +typedef struct map { + array(pair*) array; + int (*cmp)(void *, void *); + uint64_t (*hash)(void *); + int count:31; + + int is_sorted:1; + array(pair*) sorted; +} map; + +API void (map_init)(map *m); +API void (map_free)(map *m); + +API void (map_insert)(map *m, pair *p, void *key, void *value, uint64_t keyhash, void *super); +API void (map_erase)(map *m, void *key, uint64_t keyhash); +API void* (map_find)(map *m, void *key, uint64_t keyhash); +API int (map_isempty)(map *m); +API int (map_count)(map *m); +API void (map_gc)(map *m); // only if using MAP_DONT_ERASE +API bool (map_sort)(map* m); +API void (map_clear)(map* m); #line 0 #line 1 "v4k_math.h" -// ----------------------------------------------------------------------------- -// math framework: rand, ease, vec2, vec3, vec4, quat, mat2, mat33, mat34, mat4 -// - rlyeh, public domain -// -// Credits: @ands+@krig+@vurtun (PD), @datenwolf (WTFPL2), @evanw+@barerose (CC0), @sgorsten (Unlicense). - -#define C_EPSILON (1e-6) -#define C_PI (3.14159265358979323846f) // (3.141592654f) -#define TO_RAD (C_PI/180) -#define TO_DEG (180/C_PI) - -// ---------------------------------------------------------------------------- - -//#define ptr(type) 0[&(type).x] -#define vec2i(x, y ) C_CAST(vec2i,(int)(x), (int)(y) ) -#define vec3i(x, y, z ) C_CAST(vec3i,(int)(x), (int)(y), (int)(z) ) -#define vec2(x, y ) C_CAST(vec2, (float)(x), (float)(y) ) -#define vec3(x, y, z ) C_CAST(vec3, (float)(x), (float)(y), (float)(z), ) -#define vec4(x, y, z, w) C_CAST(vec4, (float)(x), (float)(y), (float)(z), (float)(w)) -#define quat(x, y, z, w) C_CAST(quat, (float)(x), (float)(y), (float)(z), (float)(w)) -#define axis(x, y, z) C_CAST(axis, (float)(x), (float)(y), (float)(z)) -#define mat33(...) C_CAST(mat33, __VA_ARGS__ ) -#define mat34(...) C_CAST(mat34, __VA_ARGS__ ) -#define mat44(...) C_CAST(mat44, __VA_ARGS__ ) - -typedef union vec2i{ struct { int X,Y; }; struct { int x,y; }; struct { int r,g; }; struct { int w,h; }; struct { int min,max; }; struct { int from,to; }; struct { int src,dst; }; int v2[2]; int array[1]; } vec2i; -typedef union vec3i{ struct { int X,Y,Z; }; struct { int x,y,z; }; struct { int r,g,b; }; struct { int w,h,d; }; struct { int min,max; }; struct { int from,to,step; }; struct { int src,dst; }; int v3[3]; int array[1]; } vec3i; -typedef union vec2 { struct { float X,Y; }; struct { float x,y; }; struct { float r,g; }; struct { float w,h; }; struct { float min,max; }; struct { float from,to; }; struct { float src,dst; }; float v2[2]; float array[1]; } vec2; -typedef union vec3 { struct { float X,Y,Z; }; struct { float x,y,z; }; struct { float r,g,b; }; struct { float min,max; }; struct { float from,to; }; vec2 xy; vec2 rg; vec2 wh; float v3[3]; float array[1]; } vec3; -typedef union vec4 { struct { float X,Y,Z,W; }; struct { float x,y,z,w; }; struct { float r,g,b,a; }; struct { float min,max; }; struct { float from,to; }; vec2 xy; vec3 xyz; vec2 rg; vec3 rgb; vec2 wh; vec3 whd; float v4[4]; float array[1]; } vec4; -typedef union quat { struct { float X,Y,Z,W; }; struct { float x,y,z,w; }; vec3 xyz; vec4 xyzw; float v4[4]; float array[1]; } quat; -typedef float mat33[9]; -typedef float mat34[12]; -typedef float mat44[16]; - -// ---------------------------------------------------------------------------- - -API void randset(uint64_t state); -API uint64_t rand64(void); -API double randf(void); // [0, 1) interval -API int randi(int mini, int maxi); // [mini, maxi) interval - -// ---------------------------------------------------------------------------- - -API float simplex1( float x ); -API float simplex2( vec2 xy ); -API float simplex3( vec3 xyz ); -API float simplex4( vec4 xyzw ); - -// ---------------------------------------------------------------------------- - -API float deg (float radians); -API float rad (float degrees); - -API int mini (int a, int b); -API int maxi (int a, int b); -API int absi (int a ); -API int clampi (int v,int a,int b); - -API float minf (float a, float b); -API float maxf (float a, float b); -API float absf (float a ); -API float pmodf (float a, float b); -API float signf (float a) ; -API float clampf (float v,float a,float b); -API float mixf (float a,float b,float t); -API float slerpf (float a,float b,float t); -API float fractf (float a); - -// ---------------------------------------------------------------------------- - -API vec2 ptr2 (const float *a ); -// -API vec2 neg2 (vec2 a ); -API vec2 add2 (vec2 a, vec2 b); -API vec2 sub2 (vec2 a, vec2 b); -API vec2 mul2 (vec2 a, vec2 b); -API vec2 div2 (vec2 a, vec2 b); -API vec2 inc2 (vec2 a, float b); -API vec2 dec2 (vec2 a, float b); -API vec2 scale2 (vec2 a, float b); -API vec2 pmod2 (vec2 a, float b); -API vec2 min2 (vec2 a, vec2 b); -API vec2 max2 (vec2 a, vec2 b); -API vec2 abs2 (vec2 a ); -API vec2 floor2 (vec2 a ); -API vec2 fract2 (vec2 a ); -API vec2 ceil2 (vec2 a ); -API float dot2 (vec2 a, vec2 b); -API vec2 refl2 (vec2 a, vec2 b); -API float cross2 (vec2 a, vec2 b); -API float len2sq (vec2 a ); -API float len2 (vec2 a ); -API vec2 norm2 (vec2 a ); -API int finite2 (vec2 a ); -API vec2 mix2 (vec2 a,vec2 b,float t); -API vec2 clamp2(vec2 v,vec2 a,vec2 b); -API vec2 clamp2f(vec2 v,float a,float b); -// ---------------------------------------------------------------------------- - -API vec3 rnd3 (void); // @todo: rnd2,rnd4,rndq -API vec3 ptr3 (const float *a ); -API vec3 vec23 (vec2 a, float z ); -// -API vec3 neg3 (vec3 a ); -API vec3 add3 (vec3 a, vec3 b); -API vec3 sub3 (vec3 a, vec3 b); -API vec3 mul3 (vec3 a, vec3 b); -API vec3 div3 (vec3 a, vec3 b); -API vec3 inc3 (vec3 a, float b); -API vec3 dec3 (vec3 a, float b); -API vec3 scale3 (vec3 a, float b); -API vec3 pmod3 (vec3 a, float b); -API vec3 min3 (vec3 a, vec3 b); -API vec3 max3 (vec3 a, vec3 b); -API vec3 abs3 (vec3 a ); -API vec3 floor3 (vec3 a ); -API vec3 fract3 (vec3 a ); -API vec3 ceil3 (vec3 a ); -API vec3 cross3 (vec3 a, vec3 b); -API float dot3 (vec3 a, vec3 b); -API vec3 refl3 (vec3 a, vec3 b); -API float len3sq (vec3 a ); -API float len3 (vec3 a ); -API vec3 norm3 (vec3 a ); -API vec3 norm3sq (vec3 a ); -API int finite3 (vec3 a ); -API vec3 mix3 (vec3 a,vec3 b,float t); -API vec3 clamp3(vec3 v,vec3 a,vec3 b); -API vec3 clamp3f(vec3 v,float a,float b); -//vec3 tricross3 (vec3 a, vec3 b, vec3 c); -API void ortho3 (vec3 *left, vec3 *up, vec3 v); - -API vec3 rotatex3 (vec3 dir, float degrees); -API vec3 rotatey3 (vec3 dir, float degrees); -API vec3 rotatez3 (vec3 dir, float degrees); - -// ---------------------------------------------------------------------------- - -API vec4 ptr4 (const float *a ); -API vec4 vec34 (vec3 a, float w ); -// -API vec4 neg4 (vec4 a ); -API vec4 add4 (vec4 a, vec4 b); -API vec4 sub4 (vec4 a, vec4 b); -API vec4 mul4 (vec4 a, vec4 b); -API vec4 div4 (vec4 a, vec4 b); -API vec4 inc4 (vec4 a, float b); -API vec4 dec4 (vec4 a, float b); -API vec4 scale4 (vec4 a, float b); -API vec4 pmod4 (vec4 a, float b); -API vec4 min4 (vec4 a, vec4 b); -API vec4 max4 (vec4 a, vec4 b); -API vec4 abs4 (vec4 a ); -API vec4 floor4 (vec4 a ); -API vec4 fract4 (vec4 a ); -API vec4 ceil4 (vec4 a ); -API float dot4 (vec4 a, vec4 b); -API vec4 refl4 (vec4 a, vec4 b); -API float len4sq (vec4 a ); -API float len4 (vec4 a ); -API vec4 norm4 (vec4 a ); -API vec4 norm4sq (vec4 a ); -API int finite4 (vec4 a ); -API vec4 mix4 (vec4 a,vec4 b,float t); -API vec4 clamp4(vec4 v,vec4 a,vec4 b); -API vec4 clamp4f(vec4 v,float a,float b); -// vec4 cross4(vec4 v0, vec4 v1); - -// ---------------------------------------------------------------------------- - -API quat idq ( ); -API quat ptrq (const float *a ); -API quat vec3q (vec3 a, float w ); -API quat vec4q (vec4 a ); -// -API quat negq (quat a ); -API quat conjq (quat a ); -API quat addq (quat a, quat b); -API quat subq (quat a, quat b); -API quat mulq (quat p, quat q); -API quat scaleq (quat a, float s); -API quat normq (quat a ); -API float dotq (quat a, quat b); -API quat mixq(quat a, quat b, float t); -/* quat lerpq(quat a, quat b, float s); - return norm(quat((1-s)*a.x + s*b.x, (1-s)*a.y + s*b.y, (1-s)*a.z + s*b.z, (1-s)*a.w + s*b.w)); -}*/ -API quat slerpq(quat a, quat b, float s); - -API quat rotationq(float deg,float x,float y,float z); -API quat mat44q (mat44 M); - -API vec3 rotate3q_2(vec3 v, quat q); -API vec3 rotate3q(vec3 v, quat r); - -// euler <-> quat -API vec3 euler (quat q); -API quat eulerq (vec3 pyr_degrees); - -// ---------------------------------------------------------------------------- - -API void scaling33(mat33 m, float x, float y, float z); -API void scale33(mat33 m, float x, float y, float z); -API void id33(mat33 m); -API void extract33(mat33 m, const mat44 m4); -API void copy33(mat33 m, const mat33 a);// -API vec3 mulv33(mat33 m, vec3 v); -API void multiply33x2(mat33 m, const mat33 a, const mat33 b); - -API void rotation33(mat33 m, float degrees, float x,float y,float z); -API void rotationq33(mat33 m, quat q); -API void rotate33(mat33 r, float degrees, float x,float y,float z); -API void compose33(mat33 m, quat r, vec3 s); - -// ---------------------------------------------------------------------------- - -API void id34(mat34 m); -API void copy34(mat34 m, const mat34 a); -API void scale34(mat34 m, float s); -API void add34(mat34 m, mat34 n); -API void muladd34(mat34 m, mat34 n, float s); -API void add34x2(mat34 m, mat34 n, mat34 o); -API void lerp34(mat34 m, mat34 n, mat34 o, float alpha); // mix34? -API void multiply34x2(mat34 m, const mat34 m0, const mat34 m1); -API void multiply34(mat34 m, const mat34 a); -API void multiply34x3(mat34 m, const mat34 a, const mat34 b, const mat34 c); -API void compose34(mat34 m, vec3 t, quat q, vec3 s); -API void invert34(mat34 m, const mat34 o); - -// ---------------------------------------------------------------------------- - -API void id44(mat44 m); -API void identity44(mat44 m); -API void copy44(mat44 m, const mat44 a); -API void multiply44x2(mat44 m, const mat44 a, const mat44 b); -API void multiply44x3(mat44 m, const mat44 a, const mat44 b, const mat44 c); -API void multiply44(mat44 m, const mat44 a); -// --- -API void ortho44(mat44 m, float l, float r, float b, float t, float n, float f); -API void frustum44(mat44 m, float l, float r, float b, float t, float n, float f); -API void perspective44(mat44 m, float fovy_degrees, float aspect, float nearp, float farp); -API void lookat44(mat44 m, vec3 eye, vec3 center, vec3 up); -// --- -API void translation44(mat44 m, float x, float y, float z); -API void translate44(mat44 m, float x, float y, float z); -API void relocate44(mat44 m, float x, float y, float z); -API void rotationq44(mat44 m, quat q); -API void rotation44(mat44 m, float degrees, float x, float y, float z); -API void rotate44(mat44 m, float degrees, float x, float y, float z); -API void scaling44(mat44 m, float x, float y, float z); -API void scale44(mat44 m, float x, float y, float z); -// --- -API void transpose44(mat44 m, const mat44 a); -API float det44(const mat44 M); -API bool invert44(mat44 T, const mat44 M); - -API void compose44(mat44 m, vec3 t, quat q, vec3 s); - -// ---------------------------------------------------------------------------- - -API vec3 transformq(const quat q, const vec3 v); -API vec3 transform33(const mat33 m, vec3 p); -API vec3 transform344(const mat44 m, const vec3 p); -API vec4 transform444(const mat44 m, const vec4 p); -API bool unproject44(vec3 *out, vec3 xyd, vec4 viewport, mat44 mvp); - -// ---------------------------------------------------------------------------- -// debugging and utils - -API void print2i( vec2i v ); -API void print3i( vec3i v ); -API void print2( vec2 v ); -API void print3( vec3 v ); -API void print4( vec4 v ); -API void printq( quat q ); -API void print33( float *m ); -API void print34( float *m ); -API void print44( float *m ); +// ----------------------------------------------------------------------------- +// math framework: rand, ease, vec2, vec3, vec4, quat, mat2, mat33, mat34, mat4 +// - rlyeh, public domain +// +// Credits: @ands+@krig+@vurtun (PD), @datenwolf (WTFPL2), @evanw+@barerose (CC0), @sgorsten (Unlicense). + +#define C_EPSILON (1e-6) +#define C_PI (3.14159265358979323846f) // (3.141592654f) +#define TO_RAD (C_PI/180) +#define TO_DEG (180/C_PI) + +// ---------------------------------------------------------------------------- + +//#define ptr(type) 0[&(type).x] +#define vec2i(x, y ) C_CAST(vec2i,(int)(x), (int)(y) ) +#define vec3i(x, y, z ) C_CAST(vec3i,(int)(x), (int)(y), (int)(z) ) +#define vec2(x, y ) C_CAST(vec2, (float)(x), (float)(y) ) +#define vec3(x, y, z ) C_CAST(vec3, (float)(x), (float)(y), (float)(z), ) +#define vec4(x, y, z, w) C_CAST(vec4, (float)(x), (float)(y), (float)(z), (float)(w)) +#define quat(x, y, z, w) C_CAST(quat, (float)(x), (float)(y), (float)(z), (float)(w)) +#define axis(x, y, z) C_CAST(axis, (float)(x), (float)(y), (float)(z)) +#define mat33(...) C_CAST(mat33, __VA_ARGS__ ) +#define mat34(...) C_CAST(mat34, __VA_ARGS__ ) +#define mat44(...) C_CAST(mat44, __VA_ARGS__ ) + +typedef union vec2i{ struct { int X,Y; }; struct { int x,y; }; struct { int r,g; }; struct { int w,h; }; struct { int min,max; }; struct { int from,to; }; struct { int src,dst; }; int v2[2]; int array[1]; } vec2i; +typedef union vec3i{ struct { int X,Y,Z; }; struct { int x,y,z; }; struct { int r,g,b; }; struct { int w,h,d; }; struct { int min,max; }; struct { int from,to,step; }; struct { int src,dst; }; int v3[3]; int array[1]; } vec3i; +typedef union vec2 { struct { float X,Y; }; struct { float x,y; }; struct { float r,g; }; struct { float w,h; }; struct { float min,max; }; struct { float from,to; }; struct { float src,dst; }; float v2[2]; float array[1]; } vec2; +typedef union vec3 { struct { float X,Y,Z; }; struct { float x,y,z; }; struct { float r,g,b; }; struct { float min,max; }; struct { float from,to; }; vec2 xy; vec2 rg; vec2 wh; float v3[3]; float array[1]; } vec3; +typedef union vec4 { struct { float X,Y,Z,W; }; struct { float x,y,z,w; }; struct { float r,g,b,a; }; struct { float min,max; }; struct { float from,to; }; vec2 xy; vec3 xyz; vec2 rg; vec3 rgb; vec2 wh; vec3 whd; float v4[4]; float array[1]; } vec4; +typedef union quat { struct { float X,Y,Z,W; }; struct { float x,y,z,w; }; vec3 xyz; vec4 xyzw; float v4[4]; float array[1]; } quat; +typedef float mat33[9]; +typedef float mat34[12]; +typedef float mat44[16]; + +// ---------------------------------------------------------------------------- + +API void randset(uint64_t state); +API uint64_t rand64(void); +API double randf(void); // [0, 1) interval +API int randi(int mini, int maxi); // [mini, maxi) interval + +// ---------------------------------------------------------------------------- + +API float simplex1( float x ); +API float simplex2( vec2 xy ); +API float simplex3( vec3 xyz ); +API float simplex4( vec4 xyzw ); + +// ---------------------------------------------------------------------------- + +API float deg (float radians); +API float rad (float degrees); + +API int mini (int a, int b); +API int maxi (int a, int b); +API int absi (int a ); +API int clampi (int v,int a,int b); + +API float minf (float a, float b); +API float maxf (float a, float b); +API float absf (float a ); +API float pmodf (float a, float b); +API float signf (float a) ; +API float clampf (float v,float a,float b); +API float mixf (float a,float b,float t); +API float slerpf (float a,float b,float t); +API float fractf (float a); + +// ---------------------------------------------------------------------------- + +API vec2 ptr2 (const float *a ); +// +API vec2 neg2 (vec2 a ); +API vec2 add2 (vec2 a, vec2 b); +API vec2 sub2 (vec2 a, vec2 b); +API vec2 mul2 (vec2 a, vec2 b); +API vec2 div2 (vec2 a, vec2 b); +API vec2 inc2 (vec2 a, float b); +API vec2 dec2 (vec2 a, float b); +API vec2 scale2 (vec2 a, float b); +API vec2 pmod2 (vec2 a, float b); +API vec2 min2 (vec2 a, vec2 b); +API vec2 max2 (vec2 a, vec2 b); +API vec2 abs2 (vec2 a ); +API vec2 floor2 (vec2 a ); +API vec2 fract2 (vec2 a ); +API vec2 ceil2 (vec2 a ); +API float dot2 (vec2 a, vec2 b); +API vec2 refl2 (vec2 a, vec2 b); +API float cross2 (vec2 a, vec2 b); +API float len2sq (vec2 a ); +API float len2 (vec2 a ); +API vec2 norm2 (vec2 a ); +API int finite2 (vec2 a ); +API vec2 mix2 (vec2 a,vec2 b,float t); +API vec2 clamp2(vec2 v,vec2 a,vec2 b); +API vec2 clamp2f(vec2 v,float a,float b); +// ---------------------------------------------------------------------------- + +API vec3 rnd3 (void); // @todo: rnd2,rnd4,rndq +API vec3 ptr3 (const float *a ); +API vec3 vec23 (vec2 a, float z ); +// +API vec3 neg3 (vec3 a ); +API vec3 add3 (vec3 a, vec3 b); +API vec3 sub3 (vec3 a, vec3 b); +API vec3 mul3 (vec3 a, vec3 b); +API vec3 div3 (vec3 a, vec3 b); +API vec3 inc3 (vec3 a, float b); +API vec3 dec3 (vec3 a, float b); +API vec3 scale3 (vec3 a, float b); +API vec3 pmod3 (vec3 a, float b); +API vec3 min3 (vec3 a, vec3 b); +API vec3 max3 (vec3 a, vec3 b); +API vec3 abs3 (vec3 a ); +API vec3 floor3 (vec3 a ); +API vec3 fract3 (vec3 a ); +API vec3 ceil3 (vec3 a ); +API vec3 cross3 (vec3 a, vec3 b); +API float dot3 (vec3 a, vec3 b); +API vec3 refl3 (vec3 a, vec3 b); +API float len3sq (vec3 a ); +API float len3 (vec3 a ); +API vec3 norm3 (vec3 a ); +API vec3 norm3sq (vec3 a ); +API int finite3 (vec3 a ); +API vec3 mix3 (vec3 a,vec3 b,float t); +API vec3 clamp3(vec3 v,vec3 a,vec3 b); +API vec3 clamp3f(vec3 v,float a,float b); +//vec3 tricross3 (vec3 a, vec3 b, vec3 c); +API void ortho3 (vec3 *left, vec3 *up, vec3 v); + +API vec3 rotatex3 (vec3 dir, float degrees); +API vec3 rotatey3 (vec3 dir, float degrees); +API vec3 rotatez3 (vec3 dir, float degrees); + +// ---------------------------------------------------------------------------- + +API vec4 ptr4 (const float *a ); +API vec4 vec34 (vec3 a, float w ); +// +API vec4 neg4 (vec4 a ); +API vec4 add4 (vec4 a, vec4 b); +API vec4 sub4 (vec4 a, vec4 b); +API vec4 mul4 (vec4 a, vec4 b); +API vec4 div4 (vec4 a, vec4 b); +API vec4 inc4 (vec4 a, float b); +API vec4 dec4 (vec4 a, float b); +API vec4 scale4 (vec4 a, float b); +API vec4 pmod4 (vec4 a, float b); +API vec4 min4 (vec4 a, vec4 b); +API vec4 max4 (vec4 a, vec4 b); +API vec4 abs4 (vec4 a ); +API vec4 floor4 (vec4 a ); +API vec4 fract4 (vec4 a ); +API vec4 ceil4 (vec4 a ); +API float dot4 (vec4 a, vec4 b); +API vec4 refl4 (vec4 a, vec4 b); +API float len4sq (vec4 a ); +API float len4 (vec4 a ); +API vec4 norm4 (vec4 a ); +API vec4 norm4sq (vec4 a ); +API int finite4 (vec4 a ); +API vec4 mix4 (vec4 a,vec4 b,float t); +API vec4 clamp4(vec4 v,vec4 a,vec4 b); +API vec4 clamp4f(vec4 v,float a,float b); +// vec4 cross4(vec4 v0, vec4 v1); + +// ---------------------------------------------------------------------------- + +API quat idq ( ); +API quat ptrq (const float *a ); +API quat vec3q (vec3 a, float w ); +API quat vec4q (vec4 a ); +// +API quat negq (quat a ); +API quat conjq (quat a ); +API quat addq (quat a, quat b); +API quat subq (quat a, quat b); +API quat mulq (quat p, quat q); +API quat scaleq (quat a, float s); +API quat normq (quat a ); +API float dotq (quat a, quat b); +API quat mixq(quat a, quat b, float t); +/* quat lerpq(quat a, quat b, float s); + return norm(quat((1-s)*a.x + s*b.x, (1-s)*a.y + s*b.y, (1-s)*a.z + s*b.z, (1-s)*a.w + s*b.w)); +}*/ +API quat slerpq(quat a, quat b, float s); + +API quat rotationq(float deg,float x,float y,float z); +API quat mat44q (mat44 M); + +API vec3 rotate3q_2(vec3 v, quat q); +API vec3 rotate3q(vec3 v, quat r); + +// euler <-> quat +API vec3 euler (quat q); +API quat eulerq (vec3 pyr_degrees); + +// ---------------------------------------------------------------------------- + +API void scaling33(mat33 m, float x, float y, float z); +API void scale33(mat33 m, float x, float y, float z); +API void id33(mat33 m); +API void extract33(mat33 m, const mat44 m4); +API void copy33(mat33 m, const mat33 a);// +API vec3 mulv33(mat33 m, vec3 v); +API void multiply33x2(mat33 m, const mat33 a, const mat33 b); + +API void rotation33(mat33 m, float degrees, float x,float y,float z); +API void rotationq33(mat33 m, quat q); +API void rotate33(mat33 r, float degrees, float x,float y,float z); +API void compose33(mat33 m, quat r, vec3 s); + +// ---------------------------------------------------------------------------- + +API void id34(mat34 m); +API void copy34(mat34 m, const mat34 a); +API void scale34(mat34 m, float s); +API void add34(mat34 m, mat34 n); +API void muladd34(mat34 m, mat34 n, float s); +API void add34x2(mat34 m, mat34 n, mat34 o); +API void lerp34(mat34 m, mat34 n, mat34 o, float alpha); // mix34? +API void multiply34x2(mat34 m, const mat34 m0, const mat34 m1); +API void multiply34(mat34 m, const mat34 a); +API void multiply34x3(mat34 m, const mat34 a, const mat34 b, const mat34 c); +API void compose34(mat34 m, vec3 t, quat q, vec3 s); +API void invert34(mat34 m, const mat34 o); + +// ---------------------------------------------------------------------------- + +API void id44(mat44 m); +API void identity44(mat44 m); +API void copy44(mat44 m, const mat44 a); +API void multiply44x2(mat44 m, const mat44 a, const mat44 b); +API void multiply44x3(mat44 m, const mat44 a, const mat44 b, const mat44 c); +API void multiply44(mat44 m, const mat44 a); +// --- +API void ortho44(mat44 m, float l, float r, float b, float t, float n, float f); +API void frustum44(mat44 m, float l, float r, float b, float t, float n, float f); +API void perspective44(mat44 m, float fovy_degrees, float aspect, float nearp, float farp); +API void lookat44(mat44 m, vec3 eye, vec3 center, vec3 up); +// --- +API void translation44(mat44 m, float x, float y, float z); +API void translate44(mat44 m, float x, float y, float z); +API void relocate44(mat44 m, float x, float y, float z); +API void rotationq44(mat44 m, quat q); +API void rotation44(mat44 m, float degrees, float x, float y, float z); +API void rotate44(mat44 m, float degrees, float x, float y, float z); +API void scaling44(mat44 m, float x, float y, float z); +API void scale44(mat44 m, float x, float y, float z); +// --- +API void transpose44(mat44 m, const mat44 a); +API float det44(const mat44 M); +API bool invert44(mat44 T, const mat44 M); + +API void compose44(mat44 m, vec3 t, quat q, vec3 s); + +// ---------------------------------------------------------------------------- + +API vec3 transformq(const quat q, const vec3 v); +API vec3 transform33(const mat33 m, vec3 p); +API vec3 transform344(const mat44 m, const vec3 p); +API vec4 transform444(const mat44 m, const vec4 p); +API bool unproject44(vec3 *out, vec3 xyd, vec4 viewport, mat44 mvp); + +// ---------------------------------------------------------------------------- +// debugging and utils + +API void print2i( vec2i v ); +API void print3i( vec3i v ); +API void print2( vec2 v ); +API void print3( vec3 v ); +API void print4( vec4 v ); +API void printq( quat q ); +API void print33( float *m ); +API void print34( float *m ); +API void print44( float *m ); #line 0 #line 1 "v4k_obj.h" -// ----------------------------------------------------------------------------- -// factory of handle ids - -// convert between hard refs (pointers) and weak refs (ids) -API uintptr_t id_make(void *ptr); -API void * id_handle(uintptr_t id); -API void id_dispose(uintptr_t id); -API bool id_valid(uintptr_t id); - -// configuration: -// ideally, these two should be 32 each. they were changed to fit our OBJHEADER bits -#ifndef ID_INDEX_BITS -#define ID_INDEX_BITS 16 -#endif -#ifndef ID_COUNT_BITS -#define ID_COUNT_BITS 3 -#endif - -// C objects framework -// - rlyeh, public domain. -// -// ## object limitations -// - 8-byte overhead per object -// - XX-byte overhead per object-entity -// - 32 components max per object-entity -// - 256 classes max per game -// - 256 references max per object -// - 1024K bytes max per object -// - 8 generations + 64K IDs per running instance (19-bit IDs) -// - support for pragma pack(1) structs not enabled by default. - -/* /!\ if you plan to use pragma pack(1) on any struct, you need #define OBJ_MIN_PRAGMAPACK_BITS 0 at the expense of max class size /!\ */ -#ifndef OBJ_MIN_PRAGMAPACK_BITS -//#define OBJ_MIN_PRAGMAPACK_BITS 3 // allows pragma packs >= 8. objsizew becomes 8<<3, so 2048 bytes max per class (default) -#define OBJ_MIN_PRAGMAPACK_BITS 2 // allows pragma packs >= 4. objsizew becomes 8<<2, so 1024 bytes max per class -//#define OBJ_MIN_PRAGMAPACK_BITS 1 // allows pragma packs >= 2. objsizew becomes 8<<1, so 512 bytes max per class -//#define OBJ_MIN_PRAGMAPACK_BITS 0 // allows pragma packs >= 1. objsizew becomes 8<<0, so 256 bytes max per class -#endif - -#define OBJHEADER \ - struct { \ - ifdef(debug, const char *objname;) \ - union { \ - uintptr_t objheader; \ - struct { \ - uintptr_t objtype:8; \ - uintptr_t objsizew:8; \ - uintptr_t objrefs:8; \ - uintptr_t objheap:1; \ - uintptr_t objcomps:1; /* << can be removed? check payload ptr instead? */ \ - uintptr_t objunused:64-8-8-8-1-1-ID_INDEX_BITS-ID_COUNT_BITS; /*19*/ \ - uintptr_t objid:ID_INDEX_BITS+ID_COUNT_BITS; /*16+3*/ \ - }; \ - }; \ - array(struct obj*) objchildren; \ - }; - -#ifndef OBJ -#define OBJ \ - OBJHEADER -#endif - -// ---------------------------------------------------------------------------- -// syntax sugars - -#ifdef OBJTYPE -#undef OBJTYPE -#endif - -#define OBJTYPE(T) \ - OBJTYPE_##T - -#define OBJTYPEDEF(NAME,N) \ - enum { OBJTYPE(NAME) = N }; \ - STATIC_ASSERT( N <= 255 ); \ - STATIC_ASSERT( sizeof(NAME) == ((sizeof(NAME)>>OBJ_MIN_PRAGMAPACK_BITS)<objheader = HEAP ? id_make(PTR) : 0, /*should assign to .objid instead. however, id_make() returns shifted bits already*/ \ - (PTR)->objtype = (OBJ_TYPE), \ - (PTR)->objheap = (HEAP), \ - (PTR)->objsizew = (SIZEOF_OBJ>>OBJ_MIN_PRAGMAPACK_BITS)) -#define OBJ_CTOR_PTR(PTR,HEAP,SIZEOF_OBJ,OBJ_TYPE) ( \ - OBJ_CTOR_HDR(PTR,HEAP,SIZEOF_OBJ,OBJ_TYPE), \ - obj_ctor(PTR)) -#define OBJ_CTOR(TYPE, NAME, HEAP, PAYLOAD_SIZE, ...) (TYPE*)( \ - objtmp = (HEAP ? MALLOC(sizeof(TYPE)+(PAYLOAD_SIZE)) : ALLOCA(sizeof(TYPE)+(PAYLOAD_SIZE))), \ - *(TYPE*)objtmp = ((TYPE){ {0,}, __VA_ARGS__}), \ - ((PAYLOAD_SIZE) ? memset((char*)objtmp + sizeof(TYPE), 0, (PAYLOAD_SIZE)) : objtmp), \ - ( OBJTYPES[ OBJTYPE(TYPE) ] = #TYPE ), \ - OBJ_CTOR_PTR(objtmp, HEAP,sizeof(TYPE),OBJTYPE(TYPE)), \ - ifdef(debug, (obj_printf)(objtmp, va("%s", callstack(+16))), 0), \ - obj_setname(objtmp, NAME)) - -#define obj(TYPE, ...) *OBJ_CTOR(TYPE, #TYPE, 0, 0, __VA_ARGS__) -#define obj_new(TYPE, ...) OBJ_CTOR(TYPE, #TYPE, 1, 0, __VA_ARGS__) -#define obj_new_ext(TYPE, NAME, ...) OBJ_CTOR(TYPE, NAME, 1, 0, __VA_ARGS__) - -void* obj_malloc(unsigned sz); -void* obj_free(void *o); - -// ---------------------------------------------------------------------------- -// obj generics. can be extended. - -#define obj_ctor(o,...) obj_method(ctor, o, ##__VA_ARGS__) -#define obj_dtor(o,...) obj_method(dtor, o, ##__VA_ARGS__) - -#define obj_save(o,...) obj_method(save, o, ##__VA_ARGS__) -#define obj_load(o,...) obj_method(load, o, ##__VA_ARGS__) - -#define obj_test(o,...) obj_method(test, o, ##__VA_ARGS__) - -#define obj_init(o,...) obj_method(init, o, ##__VA_ARGS__) -#define obj_quit(o,...) obj_method(quit, o, ##__VA_ARGS__) -#define obj_tick(o,...) obj_method(tick, o, ##__VA_ARGS__) -#define obj_draw(o,...) obj_method(draw, o, ##__VA_ARGS__) - -#define obj_lerp(o,...) obj_method(lerp, o, ##__VA_ARGS__) -#define obj_edit(o,...) obj_method(edit, o, ##__VA_ARGS__) -#define obj_menu(o,...) obj_method(menu, o, ##__VA_ARGS__) -#define obj_aabb(o,...) obj_method(aabb, o, ##__VA_ARGS__) -#define obj_icon(o,...) obj_method(icon, o, ##__VA_ARGS__) - -// --- syntax sugars - -#define obj_extend(T,method) (obj_##method[OBJTYPE(T)] = (void*)T##_##method) -#define obj_extend_t(T,method) (obj_##method[OBJTYPE(T##_t)] = (void*)T##_##method) -#define obj_method(method,o,...) (obj_##method[((struct obj*)(o))->objtype](o,##__VA_ARGS__)) // (obj_##method[((struct obj*)(o))->objtype]((o), ##__VA_ARGS__)) -#define obj_hasmethod(o,method) (obj_typeid(o)[obj_##method]) - -#define obj_vtable(method,RC,...) RC macro(obj_##method)(){ __VA_ARGS__ }; RC (*obj_##method[256])() = { REPEAT256(macro(obj_##method)) }; -#define obj_vtable_null(method,RC) RC (*obj_##method[256])() = { 0 }; // null virtual table. will crash unless obj_extend'ed - -#define REPEAT16(f) f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f ///- -#define REPEAT64(f) REPEAT16(f),REPEAT16(f),REPEAT16(f),REPEAT16(f) ///- -#define REPEAT256(f) REPEAT64(f),REPEAT64(f),REPEAT64(f),REPEAT64(f) ///- - -#undef EXTEND -#define EXTEND(...) EXPAND(EXTEND, __VA_ARGS__) -#define EXTEND2(o,F1) obj_extend(o,F1) ///- -#define EXTEND3(o,F1,F2) obj_extend(o,F1), obj_extend(o,F2) ///- -#define EXTEND4(o,F1,F2,F3) obj_extend(o,F1), obj_extend(o,F2), obj_extend(o,F3) ///- -#define EXTEND5(o,F1,F2,F3,F4) obj_extend(o,F1), obj_extend(o,F2), obj_extend(o,F3), obj_extend(o,F4) ///- -#define EXTEND6(o,F1,F2,F3,F4,F5) obj_extend(o,F1), obj_extend(o,F2), obj_extend(o,F3), obj_extend(o,F4), obj_extend(o,F5) ///- -#define EXTEND7(o,F1,F2,F3,F4,F5,F6) obj_extend(o,F1), obj_extend(o,F2), obj_extend(o,F3), obj_extend(o,F4), obj_extend(o,F5), obj_extend(o,F6) ///- -#define EXTEND8(o,F1,F2,F3,F4,F5,F6,F7) obj_extend(o,F1), obj_extend(o,F2), obj_extend(o,F3), obj_extend(o,F4), obj_extend(o,F5), obj_extend(o,F6), obj_extend(o,F7) ///- -#define EXTEND9(o,F1,F2,F3,F4,F5,F6,F7,F8) obj_extend(o,F1), obj_extend(o,F2), obj_extend(o,F3), obj_extend(o,F4), obj_extend(o,F5), obj_extend(o,F6), obj_extend(o,F7), obj_extend(o,F8) ///- -#define EXTEND10(o,F1,F2,F3,F4,F5,F6,F7,F8,F9) obj_extend(o,F1), obj_extend(o,F2), obj_extend(o,F3), obj_extend(o,F4), obj_extend(o,F5), obj_extend(o,F6), obj_extend(o,F7), obj_extend(o,F8), obj_extend(o,F9) ///- - -#define EXTEND_T(...) EXPAND(EXTEND_T, __VA_ARGS__) -#define EXTEND_T2(o,F1) obj_extend_t(o,F1) ///- -#define EXTEND_T3(o,F1,F2) obj_extend_t(o,F1), obj_extend_t(o,F2) ///- -#define EXTEND_T4(o,F1,F2,F3) obj_extend_t(o,F1), obj_extend_t(o,F2), obj_extend_t(o,F3) ///- -#define EXTEND_T5(o,F1,F2,F3,F4) obj_extend_t(o,F1), obj_extend_t(o,F2), obj_extend_t(o,F3), obj_extend_t(o,F4) ///- -#define EXTEND_T6(o,F1,F2,F3,F4,F5) obj_extend_t(o,F1), obj_extend_t(o,F2), obj_extend_t(o,F3), obj_extend_t(o,F4), obj_extend_t(o,F5) ///- -#define EXTEND_T7(o,F1,F2,F3,F4,F5,F6) obj_extend_t(o,F1), obj_extend_t(o,F2), obj_extend_t(o,F3), obj_extend_t(o,F4), obj_extend_t(o,F5), obj_extend_t(o,F6) ///- -#define EXTEND_T8(o,F1,F2,F3,F4,F5,F6,F7) obj_extend_t(o,F1), obj_extend_t(o,F2), obj_extend_t(o,F3), obj_extend_t(o,F4), obj_extend_t(o,F5), obj_extend_t(o,F6), obj_extend_t(o,F7) ///- -#define EXTEND_T9(o,F1,F2,F3,F4,F5,F6,F7,F8) obj_extend_t(o,F1), obj_extend_t(o,F2), obj_extend_t(o,F3), obj_extend_t(o,F4), obj_extend_t(o,F5), obj_extend_t(o,F6), obj_extend_t(o,F7), obj_extend_t(o,F8) ///- -#define EXTEND_T10(o,F1,F2,F3,F4,F5,F6,F7,F8,F9) obj_extend_t(o,F1), obj_extend_t(o,F2), obj_extend_t(o,F3), obj_extend_t(o,F4), obj_extend_t(o,F5), obj_extend_t(o,F6), obj_extend_t(o,F7), obj_extend_t(o,F8), obj_extend_t(o,F9) ///- - -// --- declare vtables - -API extern void (*obj_ctor[256])(); ///- -API extern void (*obj_dtor[256])(); ///- - -API extern char* (*obj_save[256])(); ///- -API extern bool (*obj_load[256])(); ///- -API extern int (*obj_test[256])(); ///- - -API extern int (*obj_init[256])(); ///- -API extern int (*obj_quit[256])(); ///- -API extern int (*obj_tick[256])(); ///- -API extern int (*obj_draw[256])(); ///- -API extern int (*obj_lerp[256])(); ///- - -API extern int (*obj_aabb[256])(); ///- -API extern int (*obj_edit[256])(); ///- -API extern int (*obj_menu[256])(); ///- -API extern char* (*obj_icon[256])(); ///- - -API extern const char*OBJTYPES[256]; ///- - -// ---------------------------------------------------------------------------- -// core - -API uintptr_t obj_header(const void *o); -API uintptr_t obj_id(const void *o); - -API const char* obj_type(const void *o); -API unsigned obj_typeid(const void *o); - -API int obj_sizeof(const void *o); -API int obj_size(const void *o); // size of all members together in struct. may include padding bytes. - -API char* obj_data(void *o); // pointer to the first member in struct -API const char* obj_datac(const void *o); // const pointer to the first struct member - -API void* obj_payload(const void *o); // pointer right after last member in struct -API void* obj_zero(void *o); // reset all object members - -// ---------------------------------------------------------------------------- -// refcounting - -API void* obj_ref(void *oo); -API void* obj_unref(void *oo); - -// ---------------------------------------------------------------------------- -// scene tree - -#define each_objchild(p,T,o) /*non-recursive*/ \ - (array(struct obj*)* children = obj_children(p); children; children = 0) \ - for(int _i = 1, _end = array_count(*children); _i < _end; ++_i) \ - for(T o = (T)((*children)[_i]); o && (obj_parent(o) == p); o = 0) - -API obj* obj_detach(void *c); -API obj* obj_attach(void *o, void *c); - -API obj* obj_root(const void *o); -API obj* obj_parent(const void *o); -API array(obj*)*obj_children(const void *o); // child[0]: parent, child[1]: 1st child, child[2]: 2nd child... -API array(obj*)*obj_siblings(const void *o); // child[0]: grandpa, child[1]: sibling1, child[2]: sibling2... - -API int obj_dumptree(const void *o); - -// ---------------------------------------------------------------------------- -// metadata - -API void* obj_setmeta(void *o, const char *key, const char *value); -API const char* obj_meta(const void *o, const char *key); - -API void* obj_setname(void *o, const char *name); -API const char* obj_name(const void *o); - -// ---------------------------------------------------------------------------- -// stl - -API void* obj_swap(void *dst, void *src); -API void* obj_copy_fast(void *dst, const void *src); -API void* obj_copy(void *dst, const void *src); - -API int obj_comp_fast(const void *a, const void *b); -API int obj_comp(const void *a, const void *b); -API int obj_lesser(const void *a, const void *b); -API int obj_greater(const void *a, const void *b); -API int obj_equal(const void *a, const void *b); - -API uint64_t obj_hash(const void *o); - -// ---------------------------------------------------------------------------- -// debug - -API bool obj_hexdump(const void *oo); -API int obj_print(const void *o); - -API int obj_printf(const void *o, const char *text); -API int obj_console(const void *o); // obj_output() ? - -#define obj_printf(o, ...) obj_printf(o, va(__VA_ARGS__)) - -// ---------------------------------------------------------------------------- -// serialization - -API char* obj_saveini(const void *o); -API obj* obj_mergeini(void *o, const char *ini); -API obj* obj_loadini(void *o, const char *ini); - -API char* obj_savejson(const void *o); -API obj* obj_mergejson(void *o, const char *json); -API obj* obj_loadjson(void *o, const char *json); - -API char* obj_savebin(const void *o); -API obj* obj_mergebin(void *o, const char *sav); -API obj* obj_loadbin(void *o, const char *sav); - -API char* obj_savempack(const void *o); // @todo -API obj* obj_mergempack(void *o, const char *sav); // @todo -API obj* obj_loadmpack(void *o, const char *sav); // @todo - -API int obj_push(const void *o); -API int obj_pop(void *o); - -// ---------------------------------------------------------------------------- -// components - -API bool obj_addcomponent(entity *e, unsigned c, void *ptr); -API bool obj_hascomponent(entity *e, unsigned c); -API void* obj_getcomponent(entity *e, unsigned c); -API bool obj_delcomponent(entity *e, unsigned c); -API bool obj_usecomponent(entity *e, unsigned c); -API bool obj_offcomponent(entity *e, unsigned c); - -API char* entity_save(entity *self); - -// ---------------------------------------------------------------------------- -// reflection - -#define each_objmember(oo,TYPE,NAME,PTR) \ - (array(reflect_t) *found_ = members_find(obj_type(oo)); found_; found_ = 0) \ - for(int it_ = 0, end_ = array_count(*found_); it_ != end_; ++it_ ) \ - for(reflect_t *R = &(*found_)[it_]; R; R = 0 ) \ - for(const char *NAME = R->name, *TYPE = R->type; NAME || TYPE; ) \ - for(void *PTR = ((char*)oo) + R->sz ; NAME || TYPE ; NAME = TYPE = 0 ) - -API void* obj_clone(const void *src); -API void* obj_merge(void *dst, const void *src); // @testme -API void* obj_mutate(void *dst, const void *src); -API void* obj_make(const char *str); - -// built-ins - -typedef enum OBJTYPE_BUILTINS { - OBJTYPE_obj = 0, - OBJTYPE_entity = 1, - OBJTYPE_vec2 = 2, - OBJTYPE_vec3 = 3, - OBJTYPE_vec4 = 4, - OBJTYPE_quat = 5, - OBJTYPE_mat33 = 6, - OBJTYPE_mat34 = 7, - OBJTYPE_mat44 = 8, - OBJTYPE_vec2i = 9, - OBJTYPE_vec3i = 10, -} OBJTYPE_BUILTINS; +// ----------------------------------------------------------------------------- +// factory of handle ids + +// convert between hard refs (pointers) and weak refs (ids) +API uintptr_t id_make(void *ptr); +API void * id_handle(uintptr_t id); +API void id_dispose(uintptr_t id); +API bool id_valid(uintptr_t id); + +// configuration: +// ideally, these two should be 32 each. they were changed to fit our OBJHEADER bits +#ifndef ID_INDEX_BITS +#define ID_INDEX_BITS 16 +#endif +#ifndef ID_COUNT_BITS +#define ID_COUNT_BITS 3 +#endif + +// C objects framework +// - rlyeh, public domain. +// +// ## object limitations +// - 8-byte overhead per object +// - XX-byte overhead per object-entity +// - 32 components max per object-entity +// - 256 classes max per game +// - 256 references max per object +// - 1024K bytes max per object +// - 8 generations + 64K IDs per running instance (19-bit IDs) +// - support for pragma pack(1) structs not enabled by default. + +/* /!\ if you plan to use pragma pack(1) on any struct, you need #define OBJ_MIN_PRAGMAPACK_BITS 0 at the expense of max class size /!\ */ +#ifndef OBJ_MIN_PRAGMAPACK_BITS +//#define OBJ_MIN_PRAGMAPACK_BITS 3 // allows pragma packs >= 8. objsizew becomes 8<<3, so 2048 bytes max per class (default) +#define OBJ_MIN_PRAGMAPACK_BITS 2 // allows pragma packs >= 4. objsizew becomes 8<<2, so 1024 bytes max per class +//#define OBJ_MIN_PRAGMAPACK_BITS 1 // allows pragma packs >= 2. objsizew becomes 8<<1, so 512 bytes max per class +//#define OBJ_MIN_PRAGMAPACK_BITS 0 // allows pragma packs >= 1. objsizew becomes 8<<0, so 256 bytes max per class +#endif + +#define OBJHEADER \ + struct { \ + ifdef(debug, const char *objname;) \ + union { \ + uintptr_t objheader; \ + struct { \ + uintptr_t objtype:8; \ + uintptr_t objsizew:8; \ + uintptr_t objrefs:8; \ + uintptr_t objheap:1; \ + uintptr_t objcomps:1; /* << can be removed? check payload ptr instead? */ \ + uintptr_t objunused:64-8-8-8-1-1-ID_INDEX_BITS-ID_COUNT_BITS; /*19*/ \ + uintptr_t objid:ID_INDEX_BITS+ID_COUNT_BITS; /*16+3*/ \ + }; \ + }; \ + array(struct obj*) objchildren; \ + }; + +#ifndef OBJ +#define OBJ \ + OBJHEADER +#endif + +// ---------------------------------------------------------------------------- +// syntax sugars + +#ifdef OBJTYPE +#undef OBJTYPE +#endif + +#define OBJTYPE(T) \ + OBJTYPE_##T + +#define OBJTYPEDEF(NAME,N) \ + enum { OBJTYPE(NAME) = N }; \ + STATIC_ASSERT( N <= 255 ); \ + STATIC_ASSERT( sizeof(NAME) == ((sizeof(NAME)>>OBJ_MIN_PRAGMAPACK_BITS)<objheader = HEAP ? id_make(PTR) : 0, /*should assign to .objid instead. however, id_make() returns shifted bits already*/ \ + (PTR)->objtype = (OBJ_TYPE), \ + (PTR)->objheap = (HEAP), \ + (PTR)->objsizew = (SIZEOF_OBJ>>OBJ_MIN_PRAGMAPACK_BITS)) +#define OBJ_CTOR_PTR(PTR,HEAP,SIZEOF_OBJ,OBJ_TYPE) ( \ + OBJ_CTOR_HDR(PTR,HEAP,SIZEOF_OBJ,OBJ_TYPE), \ + obj_ctor(PTR)) +#define OBJ_CTOR(TYPE, NAME, HEAP, PAYLOAD_SIZE, ...) (TYPE*)( \ + objtmp = (HEAP ? MALLOC(sizeof(TYPE)+(PAYLOAD_SIZE)) : ALLOCA(sizeof(TYPE)+(PAYLOAD_SIZE))), \ + *(TYPE*)objtmp = ((TYPE){ {0,}, __VA_ARGS__}), \ + ((PAYLOAD_SIZE) ? memset((char*)objtmp + sizeof(TYPE), 0, (PAYLOAD_SIZE)) : objtmp), \ + ( OBJTYPES[ OBJTYPE(TYPE) ] = #TYPE ), \ + OBJ_CTOR_PTR(objtmp, HEAP,sizeof(TYPE),OBJTYPE(TYPE)), \ + ifdef(debug, (obj_printf)(objtmp, va("%s", callstack(+16))), 0), \ + obj_setname(objtmp, NAME)) + +#define obj(TYPE, ...) *OBJ_CTOR(TYPE, #TYPE, 0, 0, __VA_ARGS__) +#define obj_new(TYPE, ...) OBJ_CTOR(TYPE, #TYPE, 1, 0, __VA_ARGS__) +#define obj_new_ext(TYPE, NAME, ...) OBJ_CTOR(TYPE, NAME, 1, 0, __VA_ARGS__) + +void* obj_malloc(unsigned sz); +void* obj_free(void *o); + +// ---------------------------------------------------------------------------- +// obj generics. can be extended. + +#define obj_ctor(o,...) obj_method(ctor, o, ##__VA_ARGS__) +#define obj_dtor(o,...) obj_method(dtor, o, ##__VA_ARGS__) + +#define obj_save(o,...) obj_method(save, o, ##__VA_ARGS__) +#define obj_load(o,...) obj_method(load, o, ##__VA_ARGS__) + +#define obj_test(o,...) obj_method(test, o, ##__VA_ARGS__) + +#define obj_init(o,...) obj_method(init, o, ##__VA_ARGS__) +#define obj_quit(o,...) obj_method(quit, o, ##__VA_ARGS__) +#define obj_tick(o,...) obj_method(tick, o, ##__VA_ARGS__) +#define obj_draw(o,...) obj_method(draw, o, ##__VA_ARGS__) + +#define obj_lerp(o,...) obj_method(lerp, o, ##__VA_ARGS__) +#define obj_edit(o,...) obj_method(edit, o, ##__VA_ARGS__) +#define obj_menu(o,...) obj_method(menu, o, ##__VA_ARGS__) +#define obj_aabb(o,...) obj_method(aabb, o, ##__VA_ARGS__) +#define obj_icon(o,...) obj_method(icon, o, ##__VA_ARGS__) + +// --- syntax sugars + +#define obj_extend(T,method) (obj_##method[OBJTYPE(T)] = (void*)T##_##method) +#define obj_extend_t(T,method) (obj_##method[OBJTYPE(T##_t)] = (void*)T##_##method) +#define obj_method(method,o,...) (obj_##method[((struct obj*)(o))->objtype](o,##__VA_ARGS__)) // (obj_##method[((struct obj*)(o))->objtype]((o), ##__VA_ARGS__)) +#define obj_hasmethod(o,method) (obj_typeid(o)[obj_##method]) + +#define obj_vtable(method,RC,...) RC macro(obj_##method)(){ __VA_ARGS__ }; RC (*obj_##method[256])() = { REPEAT256(macro(obj_##method)) }; +#define obj_vtable_null(method,RC) RC (*obj_##method[256])() = { 0 }; // null virtual table. will crash unless obj_extend'ed + +#define REPEAT16(f) f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f ///- +#define REPEAT64(f) REPEAT16(f),REPEAT16(f),REPEAT16(f),REPEAT16(f) ///- +#define REPEAT256(f) REPEAT64(f),REPEAT64(f),REPEAT64(f),REPEAT64(f) ///- + +#undef EXTEND +#define EXTEND(...) EXPAND(EXTEND, __VA_ARGS__) +#define EXTEND2(o,F1) obj_extend(o,F1) ///- +#define EXTEND3(o,F1,F2) obj_extend(o,F1), obj_extend(o,F2) ///- +#define EXTEND4(o,F1,F2,F3) obj_extend(o,F1), obj_extend(o,F2), obj_extend(o,F3) ///- +#define EXTEND5(o,F1,F2,F3,F4) obj_extend(o,F1), obj_extend(o,F2), obj_extend(o,F3), obj_extend(o,F4) ///- +#define EXTEND6(o,F1,F2,F3,F4,F5) obj_extend(o,F1), obj_extend(o,F2), obj_extend(o,F3), obj_extend(o,F4), obj_extend(o,F5) ///- +#define EXTEND7(o,F1,F2,F3,F4,F5,F6) obj_extend(o,F1), obj_extend(o,F2), obj_extend(o,F3), obj_extend(o,F4), obj_extend(o,F5), obj_extend(o,F6) ///- +#define EXTEND8(o,F1,F2,F3,F4,F5,F6,F7) obj_extend(o,F1), obj_extend(o,F2), obj_extend(o,F3), obj_extend(o,F4), obj_extend(o,F5), obj_extend(o,F6), obj_extend(o,F7) ///- +#define EXTEND9(o,F1,F2,F3,F4,F5,F6,F7,F8) obj_extend(o,F1), obj_extend(o,F2), obj_extend(o,F3), obj_extend(o,F4), obj_extend(o,F5), obj_extend(o,F6), obj_extend(o,F7), obj_extend(o,F8) ///- +#define EXTEND10(o,F1,F2,F3,F4,F5,F6,F7,F8,F9) obj_extend(o,F1), obj_extend(o,F2), obj_extend(o,F3), obj_extend(o,F4), obj_extend(o,F5), obj_extend(o,F6), obj_extend(o,F7), obj_extend(o,F8), obj_extend(o,F9) ///- + +#define EXTEND_T(...) EXPAND(EXTEND_T, __VA_ARGS__) +#define EXTEND_T2(o,F1) obj_extend_t(o,F1) ///- +#define EXTEND_T3(o,F1,F2) obj_extend_t(o,F1), obj_extend_t(o,F2) ///- +#define EXTEND_T4(o,F1,F2,F3) obj_extend_t(o,F1), obj_extend_t(o,F2), obj_extend_t(o,F3) ///- +#define EXTEND_T5(o,F1,F2,F3,F4) obj_extend_t(o,F1), obj_extend_t(o,F2), obj_extend_t(o,F3), obj_extend_t(o,F4) ///- +#define EXTEND_T6(o,F1,F2,F3,F4,F5) obj_extend_t(o,F1), obj_extend_t(o,F2), obj_extend_t(o,F3), obj_extend_t(o,F4), obj_extend_t(o,F5) ///- +#define EXTEND_T7(o,F1,F2,F3,F4,F5,F6) obj_extend_t(o,F1), obj_extend_t(o,F2), obj_extend_t(o,F3), obj_extend_t(o,F4), obj_extend_t(o,F5), obj_extend_t(o,F6) ///- +#define EXTEND_T8(o,F1,F2,F3,F4,F5,F6,F7) obj_extend_t(o,F1), obj_extend_t(o,F2), obj_extend_t(o,F3), obj_extend_t(o,F4), obj_extend_t(o,F5), obj_extend_t(o,F6), obj_extend_t(o,F7) ///- +#define EXTEND_T9(o,F1,F2,F3,F4,F5,F6,F7,F8) obj_extend_t(o,F1), obj_extend_t(o,F2), obj_extend_t(o,F3), obj_extend_t(o,F4), obj_extend_t(o,F5), obj_extend_t(o,F6), obj_extend_t(o,F7), obj_extend_t(o,F8) ///- +#define EXTEND_T10(o,F1,F2,F3,F4,F5,F6,F7,F8,F9) obj_extend_t(o,F1), obj_extend_t(o,F2), obj_extend_t(o,F3), obj_extend_t(o,F4), obj_extend_t(o,F5), obj_extend_t(o,F6), obj_extend_t(o,F7), obj_extend_t(o,F8), obj_extend_t(o,F9) ///- + +// --- declare vtables + +API extern void (*obj_ctor[256])(); ///- +API extern void (*obj_dtor[256])(); ///- + +API extern char* (*obj_save[256])(); ///- +API extern bool (*obj_load[256])(); ///- +API extern int (*obj_test[256])(); ///- + +API extern int (*obj_init[256])(); ///- +API extern int (*obj_quit[256])(); ///- +API extern int (*obj_tick[256])(); ///- +API extern int (*obj_draw[256])(); ///- +API extern int (*obj_lerp[256])(); ///- + +API extern int (*obj_aabb[256])(); ///- +API extern int (*obj_edit[256])(); ///- +API extern int (*obj_menu[256])(); ///- +API extern char* (*obj_icon[256])(); ///- + +API extern const char*OBJTYPES[256]; ///- + +// ---------------------------------------------------------------------------- +// core + +API uintptr_t obj_header(const void *o); +API uintptr_t obj_id(const void *o); + +API const char* obj_type(const void *o); +API unsigned obj_typeid(const void *o); + +API int obj_sizeof(const void *o); +API int obj_size(const void *o); // size of all members together in struct. may include padding bytes. + +API char* obj_data(void *o); // pointer to the first member in struct +API const char* obj_datac(const void *o); // const pointer to the first struct member + +API void* obj_payload(const void *o); // pointer right after last member in struct +API void* obj_zero(void *o); // reset all object members + +// ---------------------------------------------------------------------------- +// refcounting + +API void* obj_ref(void *oo); +API void* obj_unref(void *oo); + +// ---------------------------------------------------------------------------- +// scene tree + +#define each_objchild(p,T,o) /*non-recursive*/ \ + (array(struct obj*)* children = obj_children(p); children; children = 0) \ + for(int _i = 1, _end = array_count(*children); _i < _end; ++_i) \ + for(T o = (T)((*children)[_i]); o && (obj_parent(o) == p); o = 0) + +API obj* obj_detach(void *c); +API obj* obj_attach(void *o, void *c); + +API obj* obj_root(const void *o); +API obj* obj_parent(const void *o); +API array(obj*)*obj_children(const void *o); // child[0]: parent, child[1]: 1st child, child[2]: 2nd child... +API array(obj*)*obj_siblings(const void *o); // child[0]: grandpa, child[1]: sibling1, child[2]: sibling2... + +API int obj_dumptree(const void *o); + +// ---------------------------------------------------------------------------- +// metadata + +API void* obj_setmeta(void *o, const char *key, const char *value); +API const char* obj_meta(const void *o, const char *key); + +API void* obj_setname(void *o, const char *name); +API const char* obj_name(const void *o); + +// ---------------------------------------------------------------------------- +// stl + +API void* obj_swap(void *dst, void *src); +API void* obj_copy_fast(void *dst, const void *src); +API void* obj_copy(void *dst, const void *src); + +API int obj_comp_fast(const void *a, const void *b); +API int obj_comp(const void *a, const void *b); +API int obj_lesser(const void *a, const void *b); +API int obj_greater(const void *a, const void *b); +API int obj_equal(const void *a, const void *b); + +API uint64_t obj_hash(const void *o); + +// ---------------------------------------------------------------------------- +// debug + +API bool obj_hexdump(const void *oo); +API int obj_print(const void *o); + +API int obj_printf(const void *o, const char *text); +API int obj_console(const void *o); // obj_output() ? + +#define obj_printf(o, ...) obj_printf(o, va(__VA_ARGS__)) + +// ---------------------------------------------------------------------------- +// serialization + +API char* obj_saveini(const void *o); +API obj* obj_mergeini(void *o, const char *ini); +API obj* obj_loadini(void *o, const char *ini); + +API char* obj_savejson(const void *o); +API obj* obj_mergejson(void *o, const char *json); +API obj* obj_loadjson(void *o, const char *json); + +API char* obj_savebin(const void *o); +API obj* obj_mergebin(void *o, const char *sav); +API obj* obj_loadbin(void *o, const char *sav); + +API char* obj_savempack(const void *o); // @todo +API obj* obj_mergempack(void *o, const char *sav); // @todo +API obj* obj_loadmpack(void *o, const char *sav); // @todo + +API int obj_push(const void *o); +API int obj_pop(void *o); + +// ---------------------------------------------------------------------------- +// components + +API bool obj_addcomponent(entity *e, unsigned c, void *ptr); +API bool obj_hascomponent(entity *e, unsigned c); +API void* obj_getcomponent(entity *e, unsigned c); +API bool obj_delcomponent(entity *e, unsigned c); +API bool obj_usecomponent(entity *e, unsigned c); +API bool obj_offcomponent(entity *e, unsigned c); + +API char* entity_save(entity *self); + +// ---------------------------------------------------------------------------- +// reflection + +#define each_objmember(oo,TYPE,NAME,PTR) \ + (array(reflect_t) *found_ = members_find(obj_type(oo)); found_; found_ = 0) \ + for(int it_ = 0, end_ = array_count(*found_); it_ != end_; ++it_ ) \ + for(reflect_t *R = &(*found_)[it_]; R; R = 0 ) \ + for(const char *NAME = R->name, *TYPE = R->type; NAME || TYPE; ) \ + for(void *PTR = ((char*)oo) + R->sz ; NAME || TYPE ; NAME = TYPE = 0 ) + +API void* obj_clone(const void *src); +API void* obj_merge(void *dst, const void *src); // @testme +API void* obj_mutate(void *dst, const void *src); +API void* obj_make(const char *str); + +// built-ins + +typedef enum OBJTYPE_BUILTINS { + OBJTYPE_obj = 0, + OBJTYPE_entity = 1, + OBJTYPE_vec2 = 2, + OBJTYPE_vec3 = 3, + OBJTYPE_vec4 = 4, + OBJTYPE_quat = 5, + OBJTYPE_mat33 = 6, + OBJTYPE_mat34 = 7, + OBJTYPE_mat44 = 8, + OBJTYPE_vec2i = 9, + OBJTYPE_vec3i = 10, +} OBJTYPE_BUILTINS; #line 0 #line 1 "v4k_ai.h" -// AI framework -// - rlyeh, public domain. -// -// [src] original A-star code by @mmozeiko (PD) - https://gist.github.com/mmozeiko/68f0a8459ef2f98bcd879158011cc275 -// [src] original swarm/boids code by @Cultrarius (UNLICENSE) - https://github.com/Cultrarius/Swarmz - -// pathfinding ----------------------------------------------------------------- - -API int pathfind_astar(int width, int height, const unsigned* map, vec2i src, vec2i dst, vec2i* path, size_t maxpath); - -// ---------------------------------------------------------------------------- -// Behavior trees: decision planning and decision making. -// Supersedes finite state-machines (FSM) and hierarchical finite state-machines (HFSM). - -typedef int (*bt_func)(); - -typedef struct bt_t { - uint64_t type; - int (*action)(); - union { - int argi; - float argf; - }; - array(struct bt_t) children; -} bt_t; - -API bt_t bt(const char *ini_file, unsigned flags); -API int bt_run(bt_t *b); -API void bt_addfun(const char *name, int(*func)()); -API bt_func bt_findfun(const char *name); -API char *bt_funcname(bt_func fn); - -API int ui_bt(bt_t *b); - -// boids/swarm ----------------------------------------------------------------- - -typedef enum SWARM_DISTANCE { - SWARM_DISTANCE_LINEAR, - SWARM_DISTANCE_INVERSE_LINEAR, - SWARM_DISTANCE_QUADRATIC, - SWARM_DISTANCE_INVERSE_QUADRATIC -} SWARM_DISTANCE; - -#define boid(...) C_CAST(boid_t, __VA_ARGS__) - -typedef struct boid_t { - vec3 position; - vec3 velocity; - vec3 acceleration; - vec3 prev_position; -} boid_t; - -typedef struct swarm_t { - array(boid_t) boids; - - float perception_radius; // determines the vision radius of each boid. Only boids within this distance influence each other. - - float separation_weight; // how much boids repel each other - SWARM_DISTANCE separation_type; - - float alignment_weight; // how much boids want go in the same direction - float cohesion_weight; // how much boids want to be in the center of the swarm - - float steering_weight; - array(vec3) steering_targets; - SWARM_DISTANCE steering_target_type; - - float blindspot_angledeg; - float max_acceleration; // how fast each boid can change its direction - float max_velocity; // how fast each boid can move - - // private: - map(vec3*, array(boid_t*)) voxel_cache_; - float blindspot_angledeg_compare_value_; -} swarm_t; - -API swarm_t swarm(); -API void swarm_update(swarm_t *self, float delta); // acc,vel,pos -API void swarm_update_acceleration_only(swarm_t *self); // acc -API void swarm_update_acceleration_and_velocity_only(swarm_t *self, float delta); // acc,vel - -API int ui_swarm(swarm_t *self); +// AI framework +// - rlyeh, public domain. +// +// [src] original A-star code by @mmozeiko (PD) - https://gist.github.com/mmozeiko/68f0a8459ef2f98bcd879158011cc275 +// [src] original swarm/boids code by @Cultrarius (UNLICENSE) - https://github.com/Cultrarius/Swarmz + +// pathfinding ----------------------------------------------------------------- + +API int pathfind_astar(int width, int height, const unsigned* map, vec2i src, vec2i dst, vec2i* path, size_t maxpath); + +// ---------------------------------------------------------------------------- +// Behavior trees: decision planning and decision making. +// Supersedes finite state-machines (FSM) and hierarchical finite state-machines (HFSM). + +typedef int (*bt_func)(); + +typedef struct bt_t { + uint64_t type; + int (*action)(); + union { + int argi; + float argf; + }; + array(struct bt_t) children; +} bt_t; + +API bt_t bt(const char *ini_file, unsigned flags); +API int bt_run(bt_t *b); +API void bt_addfun(const char *name, int(*func)()); +API bt_func bt_findfun(const char *name); +API char *bt_funcname(bt_func fn); + +API int ui_bt(bt_t *b); + +// boids/swarm ----------------------------------------------------------------- + +typedef enum SWARM_DISTANCE { + SWARM_DISTANCE_LINEAR, + SWARM_DISTANCE_INVERSE_LINEAR, + SWARM_DISTANCE_QUADRATIC, + SWARM_DISTANCE_INVERSE_QUADRATIC +} SWARM_DISTANCE; + +#define boid(...) C_CAST(boid_t, __VA_ARGS__) + +typedef struct boid_t { + vec3 position; + vec3 velocity; + vec3 acceleration; + vec3 prev_position; +} boid_t; + +typedef struct swarm_t { + array(boid_t) boids; + + float perception_radius; // determines the vision radius of each boid. Only boids within this distance influence each other. + + float separation_weight; // how much boids repel each other + SWARM_DISTANCE separation_type; + + float alignment_weight; // how much boids want go in the same direction + float cohesion_weight; // how much boids want to be in the center of the swarm + + float steering_weight; + array(vec3) steering_targets; + SWARM_DISTANCE steering_target_type; + + float blindspot_angledeg; + float max_acceleration; // how fast each boid can change its direction + float max_velocity; // how fast each boid can move + + // private: + map(vec3*, array(boid_t*)) voxel_cache_; + float blindspot_angledeg_compare_value_; +} swarm_t; + +API swarm_t swarm(); +API void swarm_update(swarm_t *self, float delta); // acc,vel,pos +API void swarm_update_acceleration_only(swarm_t *self); // acc +API void swarm_update_acceleration_and_velocity_only(swarm_t *self, float delta); // acc,vel + +API int ui_swarm(swarm_t *self); #line 0 #line 1 "v4k_audio.h" -// ----------------------------------------------------------------------------- -// audio framework -// - rlyeh, public domain -// -// fixme: leaks, audio_delete -// @todo: audio_volume_fx, audio_volume_bgm, audio_volume_master instead? -// @todo: destroystream() if( ss->type == WAV ) drwav_uninit(&ss->wav); -// @todo: destroystream() if( ss->type == MOD ) jar_mod_unload(&ss->mod); -// @todo: destroystream() if( ss->type == XM && ss->xm ) jar_xm_free_context(ss->xm); - -// midi interface - -API void midi_send(unsigned midi_msg); - -// audio interface - -typedef struct audio_handle* audio_t; - -API audio_t audio_clip( const char *pathfile ); -API audio_t audio_stream( const char *pathfile ); -API int audio_play( audio_t s, int flags ); -API int audio_play_gain( audio_t a, int flags, float gain/*0*/ ); -API int audio_play_gain_pitch( audio_t a, int flags, float gain, float pitch/*1*/ ); -API int audio_play_gain_pitch_pan( audio_t a, int flags, float gain, float pitch, float pan/*0*/ ); -API int audio_stop( audio_t a ); -API void audio_loop( audio_t a, bool loop ); -API bool audio_playing( audio_t a ); - -API float audio_volume_clip(float gain); // set fx volume if gain is in [0..1] range. returns current fx volume in any case -API float audio_volume_stream(float gain); // set bgm volume if gain is in [0..1] range. returns current bgm volume in any case -API float audio_volume_master(float gain); // set master volume if gain is in [0..1] range. returns current master volume in any case - -API int audio_mute(int mute); -API int audio_muted(); - -API int ui_audio(); - -enum AUDIO_FLAGS { - AUDIO_1CH = 0, // default - AUDIO_2CH = 1, - - AUDIO_8 = 2, - AUDIO_16 = 0, // default - AUDIO_32 = 4, - AUDIO_FLOAT = 8, - - AUDIO_8KHZ = 16, - AUDIO_11KHZ = 32, - AUDIO_22KHZ = 0, // default - AUDIO_32KHZ = 64, - AUDIO_44KHZ = 128, - - AUDIO_MIXER_GAIN = 0, // default - AUDIO_IGNORE_MIXER_GAIN = 256, - - AUDIO_MULTIPLE_INSTANCES = 0, // default - AUDIO_SINGLE_INSTANCE = 512, -}; - -API int audio_queue( const void *samples, int num_samples, int flags ); +// ----------------------------------------------------------------------------- +// audio framework +// - rlyeh, public domain +// +// fixme: leaks, audio_delete +// @todo: audio_volume_fx, audio_volume_bgm, audio_volume_master instead? +// @todo: destroystream() if( ss->type == WAV ) drwav_uninit(&ss->wav); +// @todo: destroystream() if( ss->type == MOD ) jar_mod_unload(&ss->mod); +// @todo: destroystream() if( ss->type == XM && ss->xm ) jar_xm_free_context(ss->xm); + +// midi interface + +API void midi_send(unsigned midi_msg); + +// audio interface + +typedef struct audio_handle* audio_t; + +API audio_t audio_clip( const char *pathfile ); +API audio_t audio_stream( const char *pathfile ); +API int audio_play( audio_t s, int flags ); +API int audio_play_gain( audio_t a, int flags, float gain/*0*/ ); +API int audio_play_gain_pitch( audio_t a, int flags, float gain, float pitch/*1*/ ); +API int audio_play_gain_pitch_pan( audio_t a, int flags, float gain, float pitch, float pan/*0*/ ); +API int audio_stop( audio_t a ); +API void audio_loop( audio_t a, bool loop ); +API bool audio_playing( audio_t a ); + +API float audio_volume_clip(float gain); // set fx volume if gain is in [0..1] range. returns current fx volume in any case +API float audio_volume_stream(float gain); // set bgm volume if gain is in [0..1] range. returns current bgm volume in any case +API float audio_volume_master(float gain); // set master volume if gain is in [0..1] range. returns current master volume in any case + +API int audio_mute(int mute); +API int audio_muted(); + +API int ui_audio(); + +enum AUDIO_FLAGS { + AUDIO_1CH = 0, // default + AUDIO_2CH = 1, + + AUDIO_8 = 2, + AUDIO_16 = 0, // default + AUDIO_32 = 4, + AUDIO_FLOAT = 8, + + AUDIO_8KHZ = 16, + AUDIO_11KHZ = 32, + AUDIO_22KHZ = 0, // default + AUDIO_32KHZ = 64, + AUDIO_44KHZ = 128, + + AUDIO_MIXER_GAIN = 0, // default + AUDIO_IGNORE_MIXER_GAIN = 256, + + AUDIO_MULTIPLE_INSTANCES = 0, // default + AUDIO_SINGLE_INSTANCE = 512, +}; + +API int audio_queue( const void *samples, int num_samples, int flags ); #line 0 #line 1 "v4k_collide.h" -// ----------------------------------------------------------------------------- -// original code by @vurtun (PD) and @barerose (CC0). -// [src] https://gist.github.com/vurtun/95f088e4889da2474ad1ce82d7911fee -// - rlyeh, public domain. - -#ifndef GJK_H -#define GJK_H - -#define GJK_MAX_ITERATIONS 20 - -typedef struct gjk_support { - int aid, bid; - vec3 a; - vec3 b; -} gjk_support; -typedef struct gjk_vertex { - vec3 a; - vec3 b; - vec3 p; - int aid, bid; -} gjk_vertex; -typedef struct gjk_simplex { - int max_iter, iter; - int hit, cnt; - gjk_vertex v[4]; - float bc[4], D; -} gjk_simplex; -typedef struct gjk_result { - int hit; - vec3 p0; - vec3 p1; - float distance_squared; - int iterations; -} gjk_result; - -int gjk(gjk_simplex *s, const gjk_support *sup, vec3 *dv); -gjk_result gjk_analyze(const gjk_simplex *s); -gjk_result gjk_quad(float a_radius, float b_radius); - -#endif - -//typedef struct gjk_result gjk_result; - -typedef struct line { vec3 a, b; } line; -typedef struct sphere { vec3 c; float r; } sphere; -typedef struct aabb { vec3 min, max; } aabb; -typedef struct plane { vec3 p, n; } plane; -typedef struct capsule { vec3 a, b; float r; } capsule; -typedef struct ray { vec3 p, d; } ray; -typedef struct triangle { vec3 p0,p1,p2; } triangle; -typedef struct poly { vec3* verts; int cnt; } poly; -typedef union frustum { struct { vec4 l, r, t, b, n, f; }; vec4 pl[6]; float v[24]; } frustum; - -#define line(...) C_CAST(line, __VA_ARGS__) -#define sphere(...) C_CAST(sphere, __VA_ARGS__) -#define aabb(...) C_CAST(aabb, __VA_ARGS__) -#define plane(...) C_CAST(plane, __VA_ARGS__) -#define capsule(...) C_CAST(capsule, __VA_ARGS__) -#define ray(p,normdir) C_CAST(ray, p, normdir) -#define triangle(...) C_CAST(triangle, __VA_ARGS__) -#define poly(...) C_CAST(poly, __VA_ARGS__) -#define frustum(...) C_CAST(frustum, __VA_ARGS__) - -// ---------------------------------------------------------------------------- - -typedef struct hit { - union { - // general case - float depth; - // rays only: penetration (t0) and extraction (t1) points along ray line - struct { float t0, t1; }; - // gjk only - struct { int hits; vec3 p0, p1; float distance2; int iterations; }; - }; - union { vec3 p; vec3 contact_point; }; - union { vec3 n; vec3 normal; }; -} hit; - -#define hit(...) C_CAST(hit, __VA_ARGS__) - -// ---------------------------------------------------------------------------- - -/* line/segment */ -API float line_distance2_point(line l, vec3 p); -API vec3 line_closest_point(line l, vec3 p); -/* ray */ -API float ray_test_plane(ray r, vec4 p4); -API float ray_test_triangle(ray r, triangle t); -API int ray_test_sphere(float *t0, float *t1, ray r, sphere s); -API int ray_test_aabb(float *t0, float *t1, ray r, aabb a); -API hit* ray_hit_plane(ray r, plane p); -API hit* ray_hit_triangle(ray r, triangle t); -API hit* ray_hit_sphere(ray r, sphere s); -API hit* ray_hit_aabb(ray r, aabb a); -/* sphere */ -API vec3 sphere_closest_point(sphere s, vec3 p); -API hit* sphere_hit_aabb(sphere s, aabb a); -API hit* sphere_hit_capsule(sphere s, capsule c); -API hit* sphere_hit_sphere(sphere a, sphere b); -API int sphere_test_aabb(sphere s, aabb a); -API int sphere_test_capsule(sphere s, capsule c); -API int sphere_test_poly(sphere s, poly p); -API int sphere_test_sphere(sphere a, sphere b); -/* aabb */ -API vec3 aabb_closest_point(aabb a, vec3 p); -API float aabb_distance2_point(aabb a, vec3 p); -API int aabb_contains_point(aabb a, vec3 p); -API hit* aabb_hit_aabb(aabb a, aabb b); -API hit* aabb_hit_capsule(aabb a, capsule c); -API hit* aabb_hit_sphere(aabb a, sphere s); -API int aabb_test_aabb(aabb a, aabb b); -API int aabb_test_capsule(aabb a, capsule c); -API int aabb_test_poly(aabb a, poly p); -API int aabb_test_sphere(aabb a, sphere s); -/* capsule */ -API float capsule_distance2_point(capsule c, vec3 p); -API vec3 capsule_closest_point(capsule c, vec3 p); -API hit* capsule_hit_aabb(capsule c, aabb a); -API hit* capsule_hit_capsule(capsule a, capsule b); -API hit* capsule_hit_sphere(capsule c, sphere s); -API int capsule_test_aabb(capsule c, aabb a); -API int capsule_test_capsule(capsule a, capsule b); -API int capsule_test_poly(capsule c, poly p); -API int capsule_test_sphere(capsule c, sphere s); -/* poly: query */ -API int poly_test_sphere(poly p, sphere s); -API int poly_test_aabb(poly p, aabb a); -API int poly_test_capsule(poly p, capsule c); -API int poly_test_poly(poly a, poly b); -/* poly: query transformed */ -API int poly_test_sphere_transform(poly p, vec3 pos3, mat33 rot33, sphere s); -API int poly_test_aabb_transform(poly p, vec3 apos3, mat33 arot33, aabb a); -API int poly_test_capsule_transform(poly p, vec3 pos3, mat33 rot33, capsule c); -API int poly_test_poly_transform(poly a, vec3 apos3, mat33 arot33, poly b, vec3 bpos3, mat33 brot33); -/* poly: gjk result */ -API int poly_hit_sphere(struct gjk_result *res, poly p, sphere s); -API int poly_hit_aabb(struct gjk_result *res, poly p, aabb a); -API int poly_hit_capsule(struct gjk_result *res, poly p, capsule c); -API int poly_hit_poly(struct gjk_result *res, poly a, poly b); -/* poly: gjk result transformed */ -API int poly_hit_sphere_transform(struct gjk_result *res, poly p, vec3 pos3, mat33 rot33, sphere s); -API int poly_hit_aabb_transform(struct gjk_result *res, poly p, vec3 pos3, mat33 rot33, aabb a); -API int poly_hit_capsule_transform(struct gjk_result *res, poly p, vec3 pos3, mat33 rot33, capsule c); -API int poly_hit_poly_transform(struct gjk_result *res, poly a, vec3 at3, mat33 ar33, poly b, vec3 bt3, mat33 br33); - -API vec4 plane4(vec3 p, vec3 n); - -API frustum frustum_build(mat44 projview); -API int frustum_test_sphere(frustum f, sphere s); -API int frustum_test_aabb(frustum f, aabb a); - -API poly poly_alloc(int cnt); -API void poly_free(poly *p); - -API poly pyramid(vec3 from, vec3 to, float size); // poly_free() required -API poly diamond(vec3 from, vec3 to, float size); // poly_free() required - -API void collide_demo(); // debug draw collisions +// ----------------------------------------------------------------------------- +// original code by @vurtun (PD) and @barerose (CC0). +// [src] https://gist.github.com/vurtun/95f088e4889da2474ad1ce82d7911fee +// - rlyeh, public domain. + +#ifndef GJK_H +#define GJK_H + +#define GJK_MAX_ITERATIONS 20 + +typedef struct gjk_support { + int aid, bid; + vec3 a; + vec3 b; +} gjk_support; +typedef struct gjk_vertex { + vec3 a; + vec3 b; + vec3 p; + int aid, bid; +} gjk_vertex; +typedef struct gjk_simplex { + int max_iter, iter; + int hit, cnt; + gjk_vertex v[4]; + float bc[4], D; +} gjk_simplex; +typedef struct gjk_result { + int hit; + vec3 p0; + vec3 p1; + float distance_squared; + int iterations; +} gjk_result; + +int gjk(gjk_simplex *s, const gjk_support *sup, vec3 *dv); +gjk_result gjk_analyze(const gjk_simplex *s); +gjk_result gjk_quad(float a_radius, float b_radius); + +#endif + +//typedef struct gjk_result gjk_result; + +typedef struct line { vec3 a, b; } line; +typedef struct sphere { vec3 c; float r; } sphere; +typedef struct aabb { vec3 min, max; } aabb; +typedef struct plane { vec3 p, n; } plane; +typedef struct capsule { vec3 a, b; float r; } capsule; +typedef struct ray { vec3 p, d; } ray; +typedef struct triangle { vec3 p0,p1,p2; } triangle; +typedef struct poly { vec3* verts; int cnt; } poly; +typedef union frustum { struct { vec4 l, r, t, b, n, f; }; vec4 pl[6]; float v[24]; } frustum; + +#define line(...) C_CAST(line, __VA_ARGS__) +#define sphere(...) C_CAST(sphere, __VA_ARGS__) +#define aabb(...) C_CAST(aabb, __VA_ARGS__) +#define plane(...) C_CAST(plane, __VA_ARGS__) +#define capsule(...) C_CAST(capsule, __VA_ARGS__) +#define ray(p,normdir) C_CAST(ray, p, normdir) +#define triangle(...) C_CAST(triangle, __VA_ARGS__) +#define poly(...) C_CAST(poly, __VA_ARGS__) +#define frustum(...) C_CAST(frustum, __VA_ARGS__) + +// ---------------------------------------------------------------------------- + +typedef struct hit { + union { + // general case + float depth; + // rays only: penetration (t0) and extraction (t1) points along ray line + struct { float t0, t1; }; + // gjk only + struct { int hits; vec3 p0, p1; float distance2; int iterations; }; + }; + union { vec3 p; vec3 contact_point; }; + union { vec3 n; vec3 normal; }; +} hit; + +#define hit(...) C_CAST(hit, __VA_ARGS__) + +// ---------------------------------------------------------------------------- + +/* line/segment */ +API float line_distance2_point(line l, vec3 p); +API vec3 line_closest_point(line l, vec3 p); +/* ray */ +API float ray_test_plane(ray r, vec4 p4); +API float ray_test_triangle(ray r, triangle t); +API int ray_test_sphere(float *t0, float *t1, ray r, sphere s); +API int ray_test_aabb(float *t0, float *t1, ray r, aabb a); +API hit* ray_hit_plane(ray r, plane p); +API hit* ray_hit_triangle(ray r, triangle t); +API hit* ray_hit_sphere(ray r, sphere s); +API hit* ray_hit_aabb(ray r, aabb a); +/* sphere */ +API vec3 sphere_closest_point(sphere s, vec3 p); +API hit* sphere_hit_aabb(sphere s, aabb a); +API hit* sphere_hit_capsule(sphere s, capsule c); +API hit* sphere_hit_sphere(sphere a, sphere b); +API int sphere_test_aabb(sphere s, aabb a); +API int sphere_test_capsule(sphere s, capsule c); +API int sphere_test_poly(sphere s, poly p); +API int sphere_test_sphere(sphere a, sphere b); +/* aabb */ +API vec3 aabb_closest_point(aabb a, vec3 p); +API float aabb_distance2_point(aabb a, vec3 p); +API int aabb_contains_point(aabb a, vec3 p); +API hit* aabb_hit_aabb(aabb a, aabb b); +API hit* aabb_hit_capsule(aabb a, capsule c); +API hit* aabb_hit_sphere(aabb a, sphere s); +API int aabb_test_aabb(aabb a, aabb b); +API int aabb_test_capsule(aabb a, capsule c); +API int aabb_test_poly(aabb a, poly p); +API int aabb_test_sphere(aabb a, sphere s); +/* capsule */ +API float capsule_distance2_point(capsule c, vec3 p); +API vec3 capsule_closest_point(capsule c, vec3 p); +API hit* capsule_hit_aabb(capsule c, aabb a); +API hit* capsule_hit_capsule(capsule a, capsule b); +API hit* capsule_hit_sphere(capsule c, sphere s); +API int capsule_test_aabb(capsule c, aabb a); +API int capsule_test_capsule(capsule a, capsule b); +API int capsule_test_poly(capsule c, poly p); +API int capsule_test_sphere(capsule c, sphere s); +/* poly: query */ +API int poly_test_sphere(poly p, sphere s); +API int poly_test_aabb(poly p, aabb a); +API int poly_test_capsule(poly p, capsule c); +API int poly_test_poly(poly a, poly b); +/* poly: query transformed */ +API int poly_test_sphere_transform(poly p, vec3 pos3, mat33 rot33, sphere s); +API int poly_test_aabb_transform(poly p, vec3 apos3, mat33 arot33, aabb a); +API int poly_test_capsule_transform(poly p, vec3 pos3, mat33 rot33, capsule c); +API int poly_test_poly_transform(poly a, vec3 apos3, mat33 arot33, poly b, vec3 bpos3, mat33 brot33); +/* poly: gjk result */ +API int poly_hit_sphere(struct gjk_result *res, poly p, sphere s); +API int poly_hit_aabb(struct gjk_result *res, poly p, aabb a); +API int poly_hit_capsule(struct gjk_result *res, poly p, capsule c); +API int poly_hit_poly(struct gjk_result *res, poly a, poly b); +/* poly: gjk result transformed */ +API int poly_hit_sphere_transform(struct gjk_result *res, poly p, vec3 pos3, mat33 rot33, sphere s); +API int poly_hit_aabb_transform(struct gjk_result *res, poly p, vec3 pos3, mat33 rot33, aabb a); +API int poly_hit_capsule_transform(struct gjk_result *res, poly p, vec3 pos3, mat33 rot33, capsule c); +API int poly_hit_poly_transform(struct gjk_result *res, poly a, vec3 at3, mat33 ar33, poly b, vec3 bt3, mat33 br33); + +API vec4 plane4(vec3 p, vec3 n); + +API frustum frustum_build(mat44 projview); +API int frustum_test_sphere(frustum f, sphere s); +API int frustum_test_aabb(frustum f, aabb a); + +API poly poly_alloc(int cnt); +API void poly_free(poly *p); + +API poly pyramid(vec3 from, vec3 to, float size); // poly_free() required +API poly diamond(vec3 from, vec3 to, float size); // poly_free() required + +API void collide_demo(); // debug draw collisions #line 0 #line 1 "v4k_cook.h" -// ----------------------------------------------------------------------------- -// asset pipeline framework -// - rlyeh, public domain. -// -// all cooked assets are stored inside zip file at root folder, which acts as an asset database. -// during game boot, the database gets rebuilt as follows: (note: step 0 is an optional optimization) -// 0. for N given cores, split list of infiles into N zipfiles. then, parallelize cooks. -// 1. compare local disk files against file in zip database. for each mismatch do: -// 2. - invalidate its entry in database, if local file was removed from disk. -// 3. - write its *cooked* contents into database, if local file was created or modified from disk. -// 4. mount any existing zipfile(s) after cooking. -// -// notes: meta-datas from every raw asset are stored into comment field, inside .cook.zip archive. -// @todo: fix leaks -// @todo: symlink exact files -// @todo: idle threads should steal jobs from busy threads (maybe use jobs/coroutines for this?) ... - -enum COOK_FLAGS { - COOK_SYNC = 0, - COOK_ASYNC = 1, - COOK_CANCELABLE = 2, - COOK_DEBUGLOG = 4, // log all cooking commands to a batch file -}; - -API void cook_config( const char *path_to_cook_ini ); // "tools/cook.ini" -API bool cook_start( const char *path_to_cook_ini, const char *masks, int flags ); // COOK_INI, "**" -API void cook_stop(); -API void cook_cancel(); -API int cook_jobs(); // [0..N] -API int cook_progress(); // [0..100] - -// utils -API bool have_tools(); +// ----------------------------------------------------------------------------- +// asset pipeline framework +// - rlyeh, public domain. +// +// all cooked assets are stored inside zip file at root folder, which acts as an asset database. +// during game boot, the database gets rebuilt as follows: (note: step 0 is an optional optimization) +// 0. for N given cores, split list of infiles into N zipfiles. then, parallelize cooks. +// 1. compare local disk files against file in zip database. for each mismatch do: +// 2. - invalidate its entry in database, if local file was removed from disk. +// 3. - write its *cooked* contents into database, if local file was created or modified from disk. +// 4. mount any existing zipfile(s) after cooking. +// +// notes: meta-datas from every raw asset are stored into comment field, inside .cook.zip archive. +// @todo: fix leaks +// @todo: symlink exact files +// @todo: idle threads should steal jobs from busy threads (maybe use jobs/coroutines for this?) ... + +enum COOK_FLAGS { + COOK_SYNC = 0, + COOK_ASYNC = 1, + COOK_CANCELABLE = 2, + COOK_DEBUGLOG = 4, // log all cooking commands to a batch file +}; + +API void cook_config( const char *path_to_cook_ini ); // "tools/cook.ini" +API bool cook_start( const char *path_to_cook_ini, const char *masks, int flags ); // COOK_INI, "**" +API void cook_stop(); +API void cook_cancel(); +API int cook_jobs(); // [0..N] +API int cook_progress(); // [0..100] + +// utils +API bool have_tools(); #line 0 #line 1 "v4k_data.h" -// ----------------------------------------------------------------------------- -// data framework (json5, xml, compression) @todo:kvdb -// - rlyeh, public domain -// -// @todo: vec2,vec3,vec4 - -typedef union json_t { char* s; double f; int64_t i; uintptr_t p; array(union json_t) arr; } json_t; - -// json api - -API bool json_push(const char *json_content); -API const char* json_key(const char *keypath); -API json_t* json_find(const char *type_keypath); -API json_t json_get(const char *type_keypath); -API int json_count(const char *keypath); -#define json_int(...) (json_get(va("i" __VA_ARGS__)).i) -#define json_float(...) (json_get(va("f" __VA_ARGS__)).f) -#define json_string(...) (json_get(va("s" __VA_ARGS__)).s) -#define json_key(...) json_key(va(__VA_ARGS__)) -#define json_count(...) json_count(va(__VA_ARGS__)) -API bool json_pop(); - -// xml api - -API int xml_push(const char *xml_content); -API const char * xml_string(char *key); -API unsigned xml_count(char *key); -API array(char) xml_blob(char *key); -#define xml_string(...) xml_string(va(__VA_ARGS__)) // syntax sugar: string -#define xml_int(...) atoi(xml_string(__VA_ARGS__)) // syntax sugar: int -#define xml_float(...) atof(xml_string(__VA_ARGS__)) // syntax sugar: float -#define xml_blob(...) xml_blob(va(__VA_ARGS__)) // syntax sugar: base64 blob -#define xml_count(...) xml_count(va(__VA_ARGS__)) // syntax sugar: count nodes -API void xml_pop(); - -API bool data_tests(); +// ----------------------------------------------------------------------------- +// data framework (json5, xml, compression) @todo:kvdb +// - rlyeh, public domain +// +// @todo: vec2,vec3,vec4 + +typedef union json_t { char* s; double f; int64_t i; uintptr_t p; array(union json_t) arr; } json_t; + +// json api + +API bool json_push(const char *json_content); +API const char* json_key(const char *keypath); +API json_t* json_find(const char *type_keypath); +API json_t json_get(const char *type_keypath); +API int json_count(const char *keypath); +#define json_int(...) (json_get(va("i" __VA_ARGS__)).i) +#define json_float(...) (json_get(va("f" __VA_ARGS__)).f) +#define json_string(...) (json_get(va("s" __VA_ARGS__)).s) +#define json_key(...) json_key(va(__VA_ARGS__)) +#define json_count(...) json_count(va(__VA_ARGS__)) +API bool json_pop(); + +// xml api + +API int xml_push(const char *xml_content); +API const char * xml_string(char *key); +API unsigned xml_count(char *key); +API array(char) xml_blob(char *key); +#define xml_string(...) xml_string(va(__VA_ARGS__)) // syntax sugar: string +#define xml_int(...) atoi(xml_string(__VA_ARGS__)) // syntax sugar: int +#define xml_float(...) atof(xml_string(__VA_ARGS__)) // syntax sugar: float +#define xml_blob(...) xml_blob(va(__VA_ARGS__)) // syntax sugar: base64 blob +#define xml_count(...) xml_count(va(__VA_ARGS__)) // syntax sugar: count nodes +API void xml_pop(); + +API bool data_tests(); #line 0 #line 1 "v4k_extend.h" -// dll ------------------------------------------------------------------------ - -/// !!! `filename` must contain extension -/// load dynamic library `file` and search for `symbol` -/// return: NULL if not found, found symbol otherwise. -/// filename: path to dynamic library file. must contain extension. -/// symbol: symbol name. must not be NULL. -/// see: dlopen^, dlclose^ -/// > bool (*plugin_init)(void) = dll("plugin.dll", "init"); -/// > assert(plugin_init()); -API void* dll(const char *filename, const char *symbol); - -// ----------------------------------------------------------------------------- -// script framework - -enum { - SCRIPT_LUA = 1, - SCRIPT_DEBUGGER = 2, -}; - -API void script_init(); // @deprecate -API void *script_init_env(unsigned flags); -API bool script_push(void *env); - -API void script_run(const char *script); -API void script_runfile(const char *pathfile); - -API void script_bind_class(const char *objname, int num_methods, const char **c_names, void **c_functions); -API void script_bind_function(const char *c_name, void *c_function); -API void script_call(const char *lua_function); - -API bool script_tests(); - -API bool script_pop(); +// dll ------------------------------------------------------------------------ + +/// !!! `filename` must contain extension +/// load dynamic library `file` and search for `symbol` +/// return: NULL if not found, found symbol otherwise. +/// filename: path to dynamic library file. must contain extension. +/// symbol: symbol name. must not be NULL. +/// see: dlopen^, dlclose^ +/// > bool (*plugin_init)(void) = dll("plugin.dll", "init"); +/// > assert(plugin_init()); +API void* dll(const char *filename, const char *symbol); + +// ----------------------------------------------------------------------------- +// script framework + +enum { + SCRIPT_LUA = 1, + SCRIPT_DEBUGGER = 2, +}; + +API void script_init(); // @deprecate +API void *script_init_env(unsigned flags); +API bool script_push(void *env); + +API void script_run(const char *script); +API void script_runfile(const char *pathfile); + +API void script_bind_class(const char *objname, int num_methods, const char **c_names, void **c_functions); +API void script_bind_function(const char *c_name, void *c_function); +API void script_call(const char *lua_function); + +API bool script_tests(); + +API bool script_pop(); #line 0 #line 1 "v4k_file.h" -// ----------------------------------------------------------------------------- -// files, cache and virtual filesystem (registered directories and/or compressed zip archives). -// - rlyeh, public domain. -// -// - note: vfs_mount() order matters (last mounts have higher priority). -// - note: directory/with/trailing/slash/ as mount_point, or zip/tar/pak archive otherwise. -// -// @todo: file_mmap -// @todo: file_find() from first file_scan() - -// physical filesystem. files - -API array(char*) file_list( const char *pathmasks ); // folder/*.ico;**.png;*.c -API bool file_write( const char *file, const void *ptr, int len ); -API bool file_append( const char *file, const void *ptr, int len ); -API char * file_read(const char *filename); -API char * file_load(const char *filename, int *len); -API uint64_t file_size(const char *pathfile); -API bool file_directory(const char *pathfile); - -API char * file_pathabs(const char *pathfile); // ../dir/./file.ext -> c:/prj/dir/file.ext -API char * file_path(const char *pathfile); // c:/prj/dir/file.ext -> c:/prj/dir/ -API char * file_name(const char *pathfile); // c:/prj/dir/file.ext -> file.ext -API char * file_base(const char *pathfile); // c:/prj/dir/file.ext -> file -API char * file_ext(const char *pathfile); // c:/prj/dir/file.ext -> .ext -API char * file_id(const char *pathfile); // c:/prj/dir/file.ext -> file/dir/prj (name then alphabetical) -API char * file_normalize(const char *pathfile); // c:/prj/dir/file.ext -> c/prj/dir/file_ext -//API char * file_normalize_with_folder(const char *pathfile); // c:/prj/dir/file.ext -> dir/file_ext -API char * file_counter(const char *pathfile); // in: v4k.ini -> out: v4k(001).ini -> out: v4k(002).ini [-> etc...] - -API uint64_t file_stamp(const char *pathfile); // 1616153596 (seconds since unix epoch) -API uint64_t file_stamp10(const char *pathfile); // 20210319113316 (absolute datetime in base10) - -API bool file_exist(const char *pathfile); -API bool file_delete(const char *pathfile); -API bool file_copy(const char *src, const char *dst); -API bool file_move(const char *src, const char *dst); - -API FILE* file_temp(); -API char* file_tempname(); - -API void* file_md5(const char *file); // 16 bytes -API void* file_sha1(const char *file); // 20 bytes -API void* file_crc32(const char *file); // 4 bytes - -// compressed files - -API array(char*) file_zip_list(const char *zipfile); -API array(char) file_zip_extract(const char *zipfile, const char *filename); -API bool file_zip_append(const char *zipfile, const char *filename, int clevel); -API bool file_zip_appendmem(const char *zipfile, const char *entryname, const void *ptr, unsigned len, int clevel); - -// storage (emscripten only) - -// Mounts local storage folder for writing. Useful for Emscripten only. @path_folder: "/save" for example -// Reads local storage to memory. Usually call it one time only, after mount. Useful for Emscripten only. -// Writes memory contents to local storage. Usually call it after all fclose -API void storage_mount(const char* folder); -API void storage_read(); -API void storage_flush(); - -// virtual filesystem - -API bool vfs_mount(const char *mount_point); -API array(char*) vfs_list(const char *masks); // **.png;*.c - -API char * vfs_read(const char *pathfile); -API char * vfs_load(const char *pathfile, int *size); -API int vfs_size(const char *pathfile); - -API void vfs_reload(); -API const char * vfs_resolve(const char *fuzzyname); // guess best match. @todo: fuzzy path -//API const char*vfs_extract(const char *pathfile); // extracts vfs file into local filesystem (temporary file), so it can be read by foreign/3rd party libs -API FILE* vfs_handle(const char *pathfile); // same as above, but returns file handle instead. preferred way, will clean descriptors at exit - -// cache - -API void * cache_insert(const char *key, void *value, int size); -API void * cache_lookup(const char *key, int *size); - -// ini - -// @todo: evaluate alt api #1 -// char *ini(filename, section.key, default); -// float inif(filename, section.key, default); -// @todo: evaluate alt api #2 -// char *val = ini(filename, section_key); -// int count = ini_count(filename); -// char *key = ini_key_id(filename, id); -// char *val = ini_val_id(filename, id); - -typedef map(char*,char*) ini_t; - -API ini_t ini(const char *filename); -API ini_t ini_from_mem(const char *data); -API void ini_destroy(ini_t); - -API bool ini_write(const char *filename, const char *section, const char *key, const char *value); +// ----------------------------------------------------------------------------- +// files, cache and virtual filesystem (registered directories and/or compressed zip archives). +// - rlyeh, public domain. +// +// - note: vfs_mount() order matters (last mounts have higher priority). +// - note: directory/with/trailing/slash/ as mount_point, or zip/tar/pak archive otherwise. +// +// @todo: file_mmap +// @todo: file_find() from first file_scan() + +// physical filesystem. files + +API array(char*) file_list( const char *pathmasks ); // folder/*.ico;**.png;*.c +API bool file_write( const char *file, const void *ptr, int len ); +API bool file_append( const char *file, const void *ptr, int len ); +API char * file_read(const char *filename); +API char * file_load(const char *filename, int *len); +API uint64_t file_size(const char *pathfile); +API bool file_directory(const char *pathfile); + +API char * file_pathabs(const char *pathfile); // ../dir/./file.ext -> c:/prj/dir/file.ext +API char * file_path(const char *pathfile); // c:/prj/dir/file.ext -> c:/prj/dir/ +API char * file_name(const char *pathfile); // c:/prj/dir/file.ext -> file.ext +API char * file_base(const char *pathfile); // c:/prj/dir/file.ext -> file +API char * file_ext(const char *pathfile); // c:/prj/dir/file.ext -> .ext +API char * file_id(const char *pathfile); // c:/prj/dir/file.ext -> file/dir/prj (name then alphabetical) +API char * file_normalize(const char *pathfile); // c:/prj/dir/file.ext -> c/prj/dir/file_ext +//API char * file_normalize_with_folder(const char *pathfile); // c:/prj/dir/file.ext -> dir/file_ext +API char * file_counter(const char *pathfile); // in: v4k.ini -> out: v4k(001).ini -> out: v4k(002).ini [-> etc...] + +API uint64_t file_stamp(const char *pathfile); // 1616153596 (seconds since unix epoch) +API uint64_t file_stamp10(const char *pathfile); // 20210319113316 (absolute datetime in base10) + +API bool file_exist(const char *pathfile); +API bool file_delete(const char *pathfile); +API bool file_copy(const char *src, const char *dst); +API bool file_move(const char *src, const char *dst); + +API FILE* file_temp(); +API char* file_tempname(); + +API void* file_md5(const char *file); // 16 bytes +API void* file_sha1(const char *file); // 20 bytes +API void* file_crc32(const char *file); // 4 bytes + +// compressed files + +API array(char*) file_zip_list(const char *zipfile); +API array(char) file_zip_extract(const char *zipfile, const char *filename); +API bool file_zip_append(const char *zipfile, const char *filename, int clevel); +API bool file_zip_appendmem(const char *zipfile, const char *entryname, const void *ptr, unsigned len, int clevel); + +// storage (emscripten only) + +// Mounts local storage folder for writing. Useful for Emscripten only. @path_folder: "/save" for example +// Reads local storage to memory. Usually call it one time only, after mount. Useful for Emscripten only. +// Writes memory contents to local storage. Usually call it after all fclose +API void storage_mount(const char* folder); +API void storage_read(); +API void storage_flush(); + +// virtual filesystem + +API bool vfs_mount(const char *mount_point); +API array(char*) vfs_list(const char *masks); // **.png;*.c + +API char * vfs_read(const char *pathfile); +API char * vfs_load(const char *pathfile, int *size); +API int vfs_size(const char *pathfile); + +API void vfs_reload(); +API const char * vfs_resolve(const char *fuzzyname); // guess best match. @todo: fuzzy path +//API const char*vfs_extract(const char *pathfile); // extracts vfs file into local filesystem (temporary file), so it can be read by foreign/3rd party libs +API FILE* vfs_handle(const char *pathfile); // same as above, but returns file handle instead. preferred way, will clean descriptors at exit + +// cache + +API void * cache_insert(const char *key, void *value, int size); +API void * cache_lookup(const char *key, int *size); + +// ini + +// @todo: evaluate alt api #1 +// char *ini(filename, section.key, default); +// float inif(filename, section.key, default); +// @todo: evaluate alt api #2 +// char *val = ini(filename, section_key); +// int count = ini_count(filename); +// char *key = ini_key_id(filename, id); +// char *val = ini_val_id(filename, id); + +typedef map(char*,char*) ini_t; + +API ini_t ini(const char *filename); +API ini_t ini_from_mem(const char *data); +API void ini_destroy(ini_t); + +API bool ini_write(const char *filename, const char *section, const char *key, const char *value); #line 0 #line 1 "v4k_font.h" -// ----------------------------------------------------------------------------- -// font framework -// - rlyeh, public domain - -// font size tags -#define FONT_H1 "\1" // largest -#define FONT_H2 "\2" -#define FONT_H3 "\3" -#define FONT_H4 "\4" -#define FONT_H5 "\5" -#define FONT_H6 "\6" // smallest - -// font color tags -#define FONT_COLOR1 "\x1a" -#define FONT_COLOR2 "\x1b" -#define FONT_COLOR3 "\x1c" -#define FONT_COLOR4 "\x1d" -#define FONT_COLOR5 "\x1e" -#define FONT_COLOR6 "\x1f" - -// font face tags -#define FONT_FACE1 "\x10" -#define FONT_FACE2 "\x11" -#define FONT_FACE3 "\x12" -#define FONT_FACE4 "\x13" -#define FONT_FACE5 "\x14" -#define FONT_FACE6 "\x15" -#define FONT_FACE7 "\x16" -#define FONT_FACE8 "\x17" // editor may override this one -#define FONT_FACE9 "\x18" // editor may override this one -#define FONT_FACE10 "\x19" // editor may override this one - -// font align tags -#define FONT_LEFT "\\<" -#define FONT_CENTER "\\|" -#define FONT_JUSTIFY "\\$" -#define FONT_RIGHT "\\>" -#define FONT_TOP "\\^" -#define FONT_MIDDLE "\\-" -#define FONT_BASELINE "\\_" -#define FONT_BOTTOM "\\v" - -// font flags -enum FONT_FLAGS { - // font atlas size - FONT_512 = 0x0, - FONT_1024 = 0x1, - FONT_2048 = 0x2, - FONT_4096 = 0x4, - - // font oversampling - FONT_NO_OVERSAMPLE = 0x0, - FONT_OVERSAMPLE_X = 0x08, - FONT_OVERSAMPLE_Y = 0x10, - - // unicode ranges - FONT_ASCII = 0x800, // Compatible charset - FONT_AR = 0x001000, // Arabic and Arabic-Indic digits - FONT_ZH = 0x002000, // Chinese Simplified (@todo: add ZH_FULL) - FONT_EL = 0x004000, // Greek, Coptic, modern Georgian, Svan, Mingrelian, Ancient Greek - FONT_EM = 0x008000, // Emoji - FONT_EU = 0x010000, // Eastern/western Europe, IPA, Latin ext A/B - FONT_HE = 0x020000, // Hebrew, Yiddish, Ladino, and other diaspora languages - FONT_JP = 0x040000, // Hiragana, Katakana, Punctuations, Half-width chars - FONT_KR = 0x080000, // Korean, Hangul - FONT_RU = 0x100000, // Cyrillic + ext A/B - FONT_TH = 0x200000, // Thai - FONT_VI = 0x400000, // Vietnamese - FONT_CJK = FONT_ZH|FONT_JP|FONT_KR, - - // FONT_DEFAULTS = FONT_512 | FONT_NO_OVERSAMPLE | FONT_ASCII, -}; - -typedef struct font_metrics_t { - float ascent; // max distance above baseline for all glyphs - float descent; // max distance below baseline for all glyphs - float linegap; // distance between ascent of next line and descent of current line - float linedist; // distance between the baseline of two lines (ascent - descent + linegap) -} font_metrics_t; - -// configures -API void font_face(const char *face_tag, const char *filename_ttf, float font_size, unsigned flags); -API void font_face_from_mem(const char *tag, const void *ttf_buffer, unsigned ttf_len, float font_size, unsigned flags); -API void font_scale(const char *face_tag, int scale_index, float value); -API void font_scales(const char *face_tag, float h1, float h2, float h3, float h4, float h5, float h6); -API void font_color(const char *color_tag, uint32_t color); - -// commands -API vec2 font_xy(); -API void font_goto(float x, float y); -API vec2 font_print(const char *text); -API vec2 font_clip(const char *text, vec4 rect); -API const char* font_wrap(const char *text, float max_width); -API vec2 font_rect(const char *text); -API font_metrics_t font_metrics(const char *text); - -// syntax highlighting -API void* font_colorize(const char *text, const char *comma_types, const char *comma_keywords); // comma separated tokens. expensive, please cache result. -API vec2 font_highlight(const char *text, const void *colors); - -// ui -API void ui_font(); +// ----------------------------------------------------------------------------- +// font framework +// - rlyeh, public domain + +// font size tags +#define FONT_H1 "\1" // largest +#define FONT_H2 "\2" +#define FONT_H3 "\3" +#define FONT_H4 "\4" +#define FONT_H5 "\5" +#define FONT_H6 "\6" // smallest + +// font color tags +#define FONT_COLOR1 "\x1a" +#define FONT_COLOR2 "\x1b" +#define FONT_COLOR3 "\x1c" +#define FONT_COLOR4 "\x1d" +#define FONT_COLOR5 "\x1e" +#define FONT_COLOR6 "\x1f" + +// font face tags +#define FONT_FACE1 "\x10" +#define FONT_FACE2 "\x11" +#define FONT_FACE3 "\x12" +#define FONT_FACE4 "\x13" +#define FONT_FACE5 "\x14" +#define FONT_FACE6 "\x15" +#define FONT_FACE7 "\x16" +#define FONT_FACE8 "\x17" // editor may override this one +#define FONT_FACE9 "\x18" // editor may override this one +#define FONT_FACE10 "\x19" // editor may override this one + +// font align tags +#define FONT_LEFT "\\<" +#define FONT_CENTER "\\|" +#define FONT_JUSTIFY "\\$" +#define FONT_RIGHT "\\>" +#define FONT_TOP "\\^" +#define FONT_MIDDLE "\\-" +#define FONT_BASELINE "\\_" +#define FONT_BOTTOM "\\v" + +// font flags +enum FONT_FLAGS { + // font atlas size + FONT_512 = 0x0, + FONT_1024 = 0x1, + FONT_2048 = 0x2, + FONT_4096 = 0x4, + + // font oversampling + FONT_NO_OVERSAMPLE = 0x0, + FONT_OVERSAMPLE_X = 0x08, + FONT_OVERSAMPLE_Y = 0x10, + + // unicode ranges + FONT_ASCII = 0x800, // Compatible charset + FONT_AR = 0x001000, // Arabic and Arabic-Indic digits + FONT_ZH = 0x002000, // Chinese Simplified (@todo: add ZH_FULL) + FONT_EL = 0x004000, // Greek, Coptic, modern Georgian, Svan, Mingrelian, Ancient Greek + FONT_EM = 0x008000, // Emoji + FONT_EU = 0x010000, // Eastern/western Europe, IPA, Latin ext A/B + FONT_HE = 0x020000, // Hebrew, Yiddish, Ladino, and other diaspora languages + FONT_JP = 0x040000, // Hiragana, Katakana, Punctuations, Half-width chars + FONT_KR = 0x080000, // Korean, Hangul + FONT_RU = 0x100000, // Cyrillic + ext A/B + FONT_TH = 0x200000, // Thai + FONT_VI = 0x400000, // Vietnamese + FONT_CJK = FONT_ZH|FONT_JP|FONT_KR, + + // FONT_DEFAULTS = FONT_512 | FONT_NO_OVERSAMPLE | FONT_ASCII, +}; + +typedef struct font_metrics_t { + float ascent; // max distance above baseline for all glyphs + float descent; // max distance below baseline for all glyphs + float linegap; // distance between ascent of next line and descent of current line + float linedist; // distance between the baseline of two lines (ascent - descent + linegap) +} font_metrics_t; + +// configures +API void font_face(const char *face_tag, const char *filename_ttf, float font_size, unsigned flags); +API void font_face_from_mem(const char *tag, const void *ttf_buffer, unsigned ttf_len, float font_size, unsigned flags); +API void font_scale(const char *face_tag, int scale_index, float value); +API void font_scales(const char *face_tag, float h1, float h2, float h3, float h4, float h5, float h6); +API void font_color(const char *color_tag, uint32_t color); + +// commands +API vec2 font_xy(); +API void font_goto(float x, float y); +API vec2 font_print(const char *text); +API vec2 font_clip(const char *text, vec4 rect); +API const char* font_wrap(const char *text, float max_width); +API vec2 font_rect(const char *text); +API font_metrics_t font_metrics(const char *text); + +// syntax highlighting +API void* font_colorize(const char *text, const char *comma_types, const char *comma_keywords); // comma separated tokens. expensive, please cache result. +API vec2 font_highlight(const char *text, const void *colors); + +// ui +API void ui_font(); #line 0 #line 1 "v4k_input.h" -// ----------------------------------------------------------------------------- -// input framework -// - rlyeh, public domain -// -// @todo: window -// @todo: for extra savings (168->72 bytes), promote bits to real bits (/8 %8) & normalized floats [-1,+1] to shorts or chars -// @todo: GAMEPAD_A|2, MOUSE_L|1, KEY_C|3 -// @todo: load/save -// @todo: send virtual presses & outputs (rumble, light, led, text, etc) -// @todo: fix if logger !60 hz -// @tofo: fix click2/repeat edge cases - -API int input_use( int controller_id ); // [0..3] - -// -- basic polling api (read input at current frame) - -API float input( int vk ); -API vec2 input2( int vk ); -API float input_diff( int vk ); // @todo: rename diff->delta -API vec2 input_diff2( int vk ); // @todo: rename diff2->delta2 -API const char* input_string( int vk ); - -// -- extended polling api (read input at Nth frame ago) - -API float input_frame( int vk, int Nth_frame ); -API vec2 input_frame2( int vk, int Nth_frame ); - -// -- events api - -API int input_up( int vk ); // ON -> OFF (release) -API int input_down( int vk ); // OFF -> ON (trigger) -API int input_held( int vk ); // ON -> ON (pressed) -API int input_idle( int vk ); // OFF -> OFF - -API int input_click( int vk, int ms ); // OFF -> ON -> OFF -API int input_click2( int vk, int ms ); // OFF -> ON -> OFF -> ON -> OFF -API int input_repeat( int vk, int ms ); // [...] ON -> ON -> ON - -API int input_chord2( int vk1, int vk2 ); // all vk1 && vk2 are ON -API int input_chord3( int vk1, int vk2, int vk3 ); // all vk1 && vk2 && vk3 are ON -API int input_chord4( int vk1, int vk2, int vk3, int vk4 ); // all vk1 && vk2 && vk3 && vk4 are ON - -// -- 1d/2d filters - -API float input_filter_positive( float v ); // [-1..1] -> [0..1] -API vec2 input_filter_positive2( vec2 v ); // [-1..1] -> [0..1] -API vec2 input_filter_deadzone( vec2 v, float deadzone_treshold ); -API vec2 input_filter_deadzone_4way( vec2 v, float deadzone_treshold ); - -// -- multi-touch - -enum TOUCH_BUTTONS { - TOUCH_0, // defaults to left screen area. input_touch_area() to override - TOUCH_1, // defaults to right screen area. input_touch_area() to override -}; - -API void input_touch_area(unsigned button, vec2 begin_coord_ndc, vec2 end_coord_ndc); -API vec2 input_touch(unsigned button, float sensitivity); // absolute position in 2d coords -API vec2 input_touch_delta(unsigned button, float sensitivity); // delta from previous position -API vec2 input_touch_delta_from_origin(unsigned button, float sensitivity); // relative position from initial touch -API bool input_touch_active(); - -// -- utils - -API void input_mappings(const char *filename); // update gamepad mappings (usually "gamecontrollerdb.txt" file) -API char input_keychar(unsigned code); // Converts keyboard code to its latin char (if any) -API int input_enum(const char *sym); -API int input_anykey(); -API int input_eval(const char *expression); // "down(X)*input(CTRL)" - -// inject state -API void input_send( int vk ); // @todo -// load/save input -API array(char) save_input(); // @todo -API bool load_input(array(char) replay); // @todo - -// visualize input -API int ui_keyboard(); -API int ui_mouse(); -API int ui_gamepad(int id); -API int ui_gamepads(); - -// -- - -enum INPUT_ENUMS { - // -- bits: x104 keyboard, x3 mouse, x15 gamepad, x7 window - // keyboard gaming keys (53-bit): first-class keys for gaming - KEY_0,KEY_1,KEY_2,KEY_3,KEY_4,KEY_5,KEY_6,KEY_7,KEY_8,KEY_9, KEY_TICK,KEY_BS, KEY_ESC, - KEY_TAB, KEY_Q,KEY_W,KEY_E,KEY_R,KEY_T,KEY_Y,KEY_U,KEY_I,KEY_O,KEY_P, - KEY_CAPS, KEY_A,KEY_S,KEY_D,KEY_F,KEY_G,KEY_H,KEY_J,KEY_K,KEY_L, KEY_ENTER, - KEY_LSHIFT, KEY_Z,KEY_X,KEY_C,KEY_V,KEY_B,KEY_N,KEY_M, KEY_RSHIFT, KEY_UP, - KEY_LCTRL,KEY_LALT, KEY_SPACE, KEY_RALT,KEY_RCTRL, KEY_LEFT,KEY_DOWN,KEY_RIGHT, - - // for completeness, secondary keys below (52-bit). beware! - KEY_INS,KEY_HOME,KEY_PGUP,KEY_DEL,KEY_END,KEY_PGDN, // beware: different behavior win/osx (also, osx: no home/end). - KEY_LMETA,KEY_RMETA,KEY_MENU,KEY_PRINT,KEY_PAUSE,KEY_SCROLL,KEY_NUMLOCK, // beware: may trigger unexpected OS behavior. (@todo: add RSHIFT here for win?) - KEY_MINUS,KEY_EQUAL,KEY_LSQUARE,KEY_RSQUARE,KEY_SEMICOLON,KEY_QUOTE,KEY_HASH,KEY_BAR,KEY_COMMA,KEY_DOT,KEY_SLASH, // beware: non-us keyboard layouts - KEY_F1,KEY_F2,KEY_F3,KEY_F4,KEY_F5,KEY_F6,KEY_F7,KEY_F8,KEY_F9,KEY_F10,KEY_F11,KEY_F12, // beware: complicated on laptops/osx - KEY_PAD1,KEY_PAD2,KEY_PAD3,KEY_PAD4,KEY_PAD5,KEY_PAD6,KEY_PAD7,KEY_PAD8,KEY_PAD9,KEY_PAD0, // beware: complicated on laptops - KEY_PADADD,KEY_PADSUB,KEY_PADMUL,KEY_PADDIV,KEY_PADDOT,KEY_PADENTER, // beware: complicated on laptops - - MOUSE_L, MOUSE_M, MOUSE_R, // @todo: MOUSE_CLICKS, - GAMEPAD_CONNECTED, GAMEPAD_A, GAMEPAD_B, GAMEPAD_X, GAMEPAD_Y, - GAMEPAD_UP, GAMEPAD_DOWN, GAMEPAD_LEFT, GAMEPAD_RIGHT, GAMEPAD_MENU, GAMEPAD_START, - GAMEPAD_LB, GAMEPAD_RB, GAMEPAD_LTHUMB, GAMEPAD_RTHUMB, - WINDOW_BLUR, WINDOW_FOCUS, WINDOW_CLOSE, WINDOW_MINIMIZE, WINDOW_MAXIMIZE, WINDOW_FULLSCREEN, WINDOW_WINDOWED, // MINI/MAXI/RESTORED, SHOWN/HIDDEN - - // -- floats: x7 gamepad, x3 mouse, x4 touch, x4 window - GAMEPAD_LPAD, GAMEPAD_LPADX = GAMEPAD_LPAD, GAMEPAD_LPADY, - GAMEPAD_RPAD, GAMEPAD_RPADX = GAMEPAD_RPAD, GAMEPAD_RPADY, - GAMEPAD_LTRIGGER, GAMEPAD_LT = GAMEPAD_LTRIGGER, GAMEPAD_RTRIGGER, GAMEPAD_RT = GAMEPAD_RTRIGGER, GAMEPAD_BATTERY, - MOUSE, MOUSE_X = MOUSE, MOUSE_Y, MOUSE_W, - TOUCH_X1, TOUCH_Y1, TOUCH_X2, TOUCH_Y2, - WINDOW_RESIZE, WINDOW_RESIZEX = WINDOW_RESIZE, WINDOW_RESIZEY, WINDOW_ORIENTATION, WINDOW_BATTERY, - - // -- strings: x2 gamepad - GAMEPAD_GUID, GAMEPAD_NAME, -}; -// these aliases do check both left and right counterparts -enum INPUT_ALIASES { - KEY_SHIFT = KEY_LSHIFT, - KEY_ALT = KEY_LALT, - KEY_CTRL = KEY_LCTRL, -}; +// ----------------------------------------------------------------------------- +// input framework +// - rlyeh, public domain +// +// @todo: window +// @todo: for extra savings (168->72 bytes), promote bits to real bits (/8 %8) & normalized floats [-1,+1] to shorts or chars +// @todo: GAMEPAD_A|2, MOUSE_L|1, KEY_C|3 +// @todo: load/save +// @todo: send virtual presses & outputs (rumble, light, led, text, etc) +// @todo: fix if logger !60 hz +// @tofo: fix click2/repeat edge cases + +API int input_use( int controller_id ); // [0..3] + +// -- basic polling api (read input at current frame) + +API float input( int vk ); +API vec2 input2( int vk ); +API float input_diff( int vk ); // @todo: rename diff->delta +API vec2 input_diff2( int vk ); // @todo: rename diff2->delta2 +API const char* input_string( int vk ); + +// -- extended polling api (read input at Nth frame ago) + +API float input_frame( int vk, int Nth_frame ); +API vec2 input_frame2( int vk, int Nth_frame ); + +// -- events api + +API int input_up( int vk ); // ON -> OFF (release) +API int input_down( int vk ); // OFF -> ON (trigger) +API int input_held( int vk ); // ON -> ON (pressed) +API int input_idle( int vk ); // OFF -> OFF + +API int input_click( int vk, int ms ); // OFF -> ON -> OFF +API int input_click2( int vk, int ms ); // OFF -> ON -> OFF -> ON -> OFF +API int input_repeat( int vk, int ms ); // [...] ON -> ON -> ON + +API int input_chord2( int vk1, int vk2 ); // all vk1 && vk2 are ON +API int input_chord3( int vk1, int vk2, int vk3 ); // all vk1 && vk2 && vk3 are ON +API int input_chord4( int vk1, int vk2, int vk3, int vk4 ); // all vk1 && vk2 && vk3 && vk4 are ON + +// -- 1d/2d filters + +API float input_filter_positive( float v ); // [-1..1] -> [0..1] +API vec2 input_filter_positive2( vec2 v ); // [-1..1] -> [0..1] +API vec2 input_filter_deadzone( vec2 v, float deadzone_treshold ); +API vec2 input_filter_deadzone_4way( vec2 v, float deadzone_treshold ); + +// -- multi-touch + +enum TOUCH_BUTTONS { + TOUCH_0, // defaults to left screen area. input_touch_area() to override + TOUCH_1, // defaults to right screen area. input_touch_area() to override +}; + +API void input_touch_area(unsigned button, vec2 begin_coord_ndc, vec2 end_coord_ndc); +API vec2 input_touch(unsigned button, float sensitivity); // absolute position in 2d coords +API vec2 input_touch_delta(unsigned button, float sensitivity); // delta from previous position +API vec2 input_touch_delta_from_origin(unsigned button, float sensitivity); // relative position from initial touch +API bool input_touch_active(); + +// -- utils + +API void input_mappings(const char *filename); // update gamepad mappings (usually "gamecontrollerdb.txt" file) +API char input_keychar(unsigned code); // Converts keyboard code to its latin char (if any) +API int input_enum(const char *sym); +API int input_anykey(); +API int input_eval(const char *expression); // "down(X)*input(CTRL)" + +// inject state +API void input_send( int vk ); // @todo +// load/save input +API array(char) save_input(); // @todo +API bool load_input(array(char) replay); // @todo + +// visualize input +API int ui_keyboard(); +API int ui_mouse(); +API int ui_gamepad(int id); +API int ui_gamepads(); + +// -- + +enum INPUT_ENUMS { + // -- bits: x104 keyboard, x3 mouse, x15 gamepad, x7 window + // keyboard gaming keys (53-bit): first-class keys for gaming + KEY_0,KEY_1,KEY_2,KEY_3,KEY_4,KEY_5,KEY_6,KEY_7,KEY_8,KEY_9, KEY_TICK,KEY_BS, KEY_ESC, + KEY_TAB, KEY_Q,KEY_W,KEY_E,KEY_R,KEY_T,KEY_Y,KEY_U,KEY_I,KEY_O,KEY_P, + KEY_CAPS, KEY_A,KEY_S,KEY_D,KEY_F,KEY_G,KEY_H,KEY_J,KEY_K,KEY_L, KEY_ENTER, + KEY_LSHIFT, KEY_Z,KEY_X,KEY_C,KEY_V,KEY_B,KEY_N,KEY_M, KEY_RSHIFT, KEY_UP, + KEY_LCTRL,KEY_LALT, KEY_SPACE, KEY_RALT,KEY_RCTRL, KEY_LEFT,KEY_DOWN,KEY_RIGHT, + + // for completeness, secondary keys below (52-bit). beware! + KEY_INS,KEY_HOME,KEY_PGUP,KEY_DEL,KEY_END,KEY_PGDN, // beware: different behavior win/osx (also, osx: no home/end). + KEY_LMETA,KEY_RMETA,KEY_MENU,KEY_PRINT,KEY_PAUSE,KEY_SCROLL,KEY_NUMLOCK, // beware: may trigger unexpected OS behavior. (@todo: add RSHIFT here for win?) + KEY_MINUS,KEY_EQUAL,KEY_LSQUARE,KEY_RSQUARE,KEY_SEMICOLON,KEY_QUOTE,KEY_HASH,KEY_BAR,KEY_COMMA,KEY_DOT,KEY_SLASH, // beware: non-us keyboard layouts + KEY_F1,KEY_F2,KEY_F3,KEY_F4,KEY_F5,KEY_F6,KEY_F7,KEY_F8,KEY_F9,KEY_F10,KEY_F11,KEY_F12, // beware: complicated on laptops/osx + KEY_PAD1,KEY_PAD2,KEY_PAD3,KEY_PAD4,KEY_PAD5,KEY_PAD6,KEY_PAD7,KEY_PAD8,KEY_PAD9,KEY_PAD0, // beware: complicated on laptops + KEY_PADADD,KEY_PADSUB,KEY_PADMUL,KEY_PADDIV,KEY_PADDOT,KEY_PADENTER, // beware: complicated on laptops + + MOUSE_L, MOUSE_M, MOUSE_R, // @todo: MOUSE_CLICKS, + GAMEPAD_CONNECTED, GAMEPAD_A, GAMEPAD_B, GAMEPAD_X, GAMEPAD_Y, + GAMEPAD_UP, GAMEPAD_DOWN, GAMEPAD_LEFT, GAMEPAD_RIGHT, GAMEPAD_MENU, GAMEPAD_START, + GAMEPAD_LB, GAMEPAD_RB, GAMEPAD_LTHUMB, GAMEPAD_RTHUMB, + WINDOW_BLUR, WINDOW_FOCUS, WINDOW_CLOSE, WINDOW_MINIMIZE, WINDOW_MAXIMIZE, WINDOW_FULLSCREEN, WINDOW_WINDOWED, // MINI/MAXI/RESTORED, SHOWN/HIDDEN + + // -- floats: x7 gamepad, x3 mouse, x4 touch, x4 window + GAMEPAD_LPAD, GAMEPAD_LPADX = GAMEPAD_LPAD, GAMEPAD_LPADY, + GAMEPAD_RPAD, GAMEPAD_RPADX = GAMEPAD_RPAD, GAMEPAD_RPADY, + GAMEPAD_LTRIGGER, GAMEPAD_LT = GAMEPAD_LTRIGGER, GAMEPAD_RTRIGGER, GAMEPAD_RT = GAMEPAD_RTRIGGER, GAMEPAD_BATTERY, + MOUSE, MOUSE_X = MOUSE, MOUSE_Y, MOUSE_W, + TOUCH_X1, TOUCH_Y1, TOUCH_X2, TOUCH_Y2, + WINDOW_RESIZE, WINDOW_RESIZEX = WINDOW_RESIZE, WINDOW_RESIZEY, WINDOW_ORIENTATION, WINDOW_BATTERY, + + // -- strings: x2 gamepad + GAMEPAD_GUID, GAMEPAD_NAME, +}; +// these aliases do check both left and right counterparts +enum INPUT_ALIASES { + KEY_SHIFT = KEY_LSHIFT, + KEY_ALT = KEY_LALT, + KEY_CTRL = KEY_LCTRL, +}; #line 0 #line 1 "v4k_memory.h" -// ----------------------------------------------------------------------------- -// memory framework -// - rlyeh, public domain - -// memory leaks detector -#if ENABLE_MEMORY_LEAKS -#define WATCH(ptr,sz) watch((ptr), (sz)) -#define FORGET(ptr) forget(ptr) -#else -#define WATCH(ptr,sz) (ptr) -#define FORGET(ptr) (ptr) -#endif - -// default allocator (aborts on out-of-mem) -API void* xrealloc(void* p, size_t sz); -API size_t xsize(void* p); -API char* xstats(void); - -// stack based allocator (negative bytes does rewind stack, like when entering new frame) -API void* stack(int bytes); - -// memory leaks api (this is already integrated as long as you compile with -DENABLE_MEMORY_LEAKS) -API void* watch( void *ptr, int sz ); -API void* forget( void *ptr ); - -// memory api -#define ALLOCSIZE(p) xsize(p) -#define MALLOC(n) REALLOC_(0,(n)) -#define FREE(p) REALLOC_((p), 0) -#define REALLOC(p,n) REALLOC_((p),(n)) -#define CALLOC(m,n) CALLOC_((m),(n)) -#define STRDUP(s) STRDUP_(s) -#define ALLOCA(n) ifdef(gcc, __builtin_alloca(n), ifdef(win32, _alloca(n), __builtin_alloca(n))) - -static FORCE_INLINE void *(REALLOC_)(void *p, size_t n) { return n ? WATCH(xrealloc(p,n),n) : xrealloc(FORGET(p),0); } ///- -static FORCE_INLINE void *(CALLOC_)(size_t m, size_t n) { return n *= m, memset(REALLOC(0,n),0,n); } ///- -static FORCE_INLINE char *(STRDUP_)(const char *s) { size_t n = strlen(s)+1; return ((char*)memcpy(REALLOC(0,n), s, n)); } ///- +// ----------------------------------------------------------------------------- +// memory framework +// - rlyeh, public domain + +// memory leaks detector +#if ENABLE_MEMORY_LEAKS +#define WATCH(ptr,sz) watch((ptr), (sz)) +#define FORGET(ptr) forget(ptr) +#else +#define WATCH(ptr,sz) (ptr) +#define FORGET(ptr) (ptr) +#endif + +// default allocator (aborts on out-of-mem) +API void* xrealloc(void* p, size_t sz); +API size_t xsize(void* p); +API char* xstats(void); + +// stack based allocator (negative bytes does rewind stack, like when entering new frame) +API void* stack(int bytes); + +// memory leaks api (this is already integrated as long as you compile with -DENABLE_MEMORY_LEAKS) +API void* watch( void *ptr, int sz ); +API void* forget( void *ptr ); + +// memory api +#define ALLOCSIZE(p) xsize(p) +#define MALLOC(n) REALLOC_(0,(n)) +#define FREE(p) REALLOC_((p), 0) +#define REALLOC(p,n) REALLOC_((p),(n)) +#define CALLOC(m,n) CALLOC_((m),(n)) +#define STRDUP(s) STRDUP_(s) +#define ALLOCA(n) ifdef(gcc, __builtin_alloca(n), ifdef(win32, _alloca(n), __builtin_alloca(n))) + +static FORCE_INLINE void *(REALLOC_)(void *p, size_t n) { return n ? WATCH(xrealloc(p,n),n) : xrealloc(FORGET(p),0); } ///- +static FORCE_INLINE void *(CALLOC_)(size_t m, size_t n) { return n *= m, memset(REALLOC(0,n),0,n); } ///- +static FORCE_INLINE char *(STRDUP_)(const char *s) { size_t n = strlen(s)+1; return ((char*)memcpy(REALLOC(0,n), s, n)); } ///- #line 0 #line 1 "v4k_network.h" -// ----------------------------------------------------------------------------- -// network framework -// - rlyeh, public domain - -API array(char) download( const char *url ); -API int download_file( FILE *out, const char *url ); -API int portname( const char *service_name, unsigned retries ); - -API bool network_tests(); - -// ----------------------------------------------------------------------------- -// udp wrapper -// - rlyeh, public domain. - -// server -API int udp_bind(const char *address, const char *port); - -// client -API int udp_open(const char *address, const char *port); - -// common -API int udp_send(int, const void *buf, int len ); // <0 error, >0 bytes sent ok -API int udp_sendto(int, const char *ip, const char *port, const void *buf, int len ); // <0 error, >0 bytes sent ok -API int udp_recv(int, void *buf, int len ); // <0 error, 0 orderly shutdown, >0 received bytes -API int udp_peek(int); // <0 error, 0 timeout, >0 data - -// ----------------------------------------------------------------------------- -// tcp wrapper -// - rlyeh, public domain - -// client -API int tcp_open(const char *address, const char *port); - -// server -API int tcp_bind(const char *interface_, const char *port, int queue); -API int tcp_peek(int, int(*callback)(int)); - -// common -API int tcp_send(int, const void* buf, int len); -API int tcp_recv(int, void* buf, int len); -API char* tcp_host(int); // info -API char* tcp_port(int); // info - -API int tcp_close(int); - -// extras -API int tcp_debug(int); // toggle traffic monitoring on/off for given socket -//API int tcp_printf(int, const char *fmt, ...); // printf message in remote end -//API int tcp_crypt(int,uint64_t); // set shared secret +// ----------------------------------------------------------------------------- +// network framework +// - rlyeh, public domain + +API array(char) download( const char *url ); +API int download_file( FILE *out, const char *url ); +API int portname( const char *service_name, unsigned retries ); + +API bool network_tests(); + +// ----------------------------------------------------------------------------- +// udp wrapper +// - rlyeh, public domain. + +// server +API int udp_bind(const char *address, const char *port); + +// client +API int udp_open(const char *address, const char *port); + +// common +API int udp_send(int, const void *buf, int len ); // <0 error, >0 bytes sent ok +API int udp_sendto(int, const char *ip, const char *port, const void *buf, int len ); // <0 error, >0 bytes sent ok +API int udp_recv(int, void *buf, int len ); // <0 error, 0 orderly shutdown, >0 received bytes +API int udp_peek(int); // <0 error, 0 timeout, >0 data + +// ----------------------------------------------------------------------------- +// tcp wrapper +// - rlyeh, public domain + +// client +API int tcp_open(const char *address, const char *port); + +// server +API int tcp_bind(const char *interface_, const char *port, int queue); +API int tcp_peek(int, int(*callback)(int)); + +// common +API int tcp_send(int, const void* buf, int len); +API int tcp_recv(int, void* buf, int len); +API char* tcp_host(int); // info +API char* tcp_port(int); // info + +API int tcp_close(int); + +// extras +API int tcp_debug(int); // toggle traffic monitoring on/off for given socket +//API int tcp_printf(int, const char *fmt, ...); // printf message in remote end +//API int tcp_crypt(int,uint64_t); // set shared secret #line 0 #line 1 "v4k_track.h" -#ifndef TRACK_SEND_BUFSIZE -#define TRACK_SEND_BUFSIZE 576 -#endif - - //~ Errors -#define TRACK_ERROR_INIT_FAIL 1 -#define TRACK_ERROR_SOCKET_FAIL 2 -#define TRACK_ERROR_SOCKET_INVALID 3 -#define TRACK_ERROR_BUFFER_FULL 4 -#define TRACK_ERROR_SEND_FAIL 5 -#define TRACK_ERROR_INPUT_INVALID 6 - -/// Initialises telemetry and connects to the specified endpoint. -/// return: error code -/// host: IP address / domain of the endpoint -/// port: service name / port -/// see: track_event, track_ident, track_group -API int track_init(char const *host, char const *port); - -/// Destroys the currently established telemetry socket. -/// return: error code -/// No parameters needed for this function. -API int track_destroy(void); - -/// Sends an EVENT message to the server. -/// return: error code -/// event_id: Identifier for the event type. -/// user_id: Identifier for the user. -/// json_payload: JSON-formatted metadata for the event. -API int track_event(char const *event_id, char const *user_id, char const *json_payload); - -/// Sends user identification to the server. -/// return: error code -/// user_id: Identifier for the user. -/// traits: JSON-formatted traits or attributes of the user. -API int track_ident(char const *user_id, char const *traits); - -/// Associates a user to a group. -/// return: error code -/// user_id: Identifier for the user. -/// group_id: Identifier for the group. -/// traits: JSON-formatted traits or attributes of the group. -API int track_group(char const *user_id, char const *group_id, char const *traits); - -//~ Event utilities - -/// Structure to represent key-value pairs for event properties. -typedef struct track_prop { - char const *key; - char const *val; -} track_prop; - -/// Sends an EVENT message with custom properties. -/// return: error code -/// event_id: Identifier for the event type. -/// user_id: Identifier for the user. -/// props: Array of key-value pairs. Terminates when key is set to NULL. -API int track_event_props(char const *event_id, char const *user_id, const track_prop *props); +#ifndef TRACK_SEND_BUFSIZE +#define TRACK_SEND_BUFSIZE 576 +#endif + + //~ Errors +#define TRACK_ERROR_INIT_FAIL 1 +#define TRACK_ERROR_SOCKET_FAIL 2 +#define TRACK_ERROR_SOCKET_INVALID 3 +#define TRACK_ERROR_BUFFER_FULL 4 +#define TRACK_ERROR_SEND_FAIL 5 +#define TRACK_ERROR_INPUT_INVALID 6 + +/// Initialises telemetry and connects to the specified endpoint. +/// return: error code +/// host: IP address / domain of the endpoint +/// port: service name / port +/// see: track_event, track_ident, track_group +API int track_init(char const *host, char const *port); + +/// Destroys the currently established telemetry socket. +/// return: error code +/// No parameters needed for this function. +API int track_destroy(void); + +/// Sends an EVENT message to the server. +/// return: error code +/// event_id: Identifier for the event type. +/// user_id: Identifier for the user. +/// json_payload: JSON-formatted metadata for the event. +API int track_event(char const *event_id, char const *user_id, char const *json_payload); + +/// Sends user identification to the server. +/// return: error code +/// user_id: Identifier for the user. +/// traits: JSON-formatted traits or attributes of the user. +API int track_ident(char const *user_id, char const *traits); + +/// Associates a user to a group. +/// return: error code +/// user_id: Identifier for the user. +/// group_id: Identifier for the group. +/// traits: JSON-formatted traits or attributes of the group. +API int track_group(char const *user_id, char const *group_id, char const *traits); + +//~ Event utilities + +/// Structure to represent key-value pairs for event properties. +typedef struct track_prop { + char const *key; + char const *val; +} track_prop; + +/// Sends an EVENT message with custom properties. +/// return: error code +/// event_id: Identifier for the event type. +/// user_id: Identifier for the user. +/// props: Array of key-value pairs. Terminates when key is set to NULL. +API int track_event_props(char const *event_id, char const *user_id, const track_prop *props); #line 0 #line 1 "v4k_netsync.h" -// high-level, socket-less networking api. inspired by Quake, MPI and RenderBuckets theories. -// - rlyeh, public domain -// -// Usage: -// 1. configure networked memory buffers with flags (world, player1, player2, etc). network_buffer(); -// 2. then during game loop: -// - modify your buffers as much as needed. -// - sync buffers at least once per frame. network_sync(); -// - render your world -// 3. optionally, monitor network status & variables. network_get(); -// -// @todo: maybe network_send(msg) + msg *network_recv(); instead of event queue of network_sync() ? - -//enum { NETWORK_HANDSHAKE, NETWORK_ENCRYPT, NETWORK_VERSIONED, NETWORK_CHECKSUM }; // negotiation -//enum { NETWORK_TCP, NETWORK_UDP, NETWORK_KCP, NETWORK_ENET, NETWORK_WEBSOCKET }; // transport, where - -enum { NETWORK_BIND = 2, NETWORK_CONNECT = 4, NETWORK_NOFAIL = 8 }; -API void network_create(unsigned max_clients, const char *ip, const char *port, unsigned flags); // both ip and port can be null - -//enum { NETWORK_LOSSY, NETWORK_COMPRESS }; // post-processes -//enum { NETWORK_PREDICT, NETWORK_RECONCILE, NETWORK_INTERPOLATE, NETWORK_COMPENSATE }; // time authority, when -//enum { NETWORK_LAGS, NETWORK_DROPS, NETWORK_THROTTLES, NETWORK_DUPES }; // quality sim, how much -//enum { NETWORK_CONST = 1, NETWORK_64,NETWORK_32,NETWORK_16,NETWORK_8, NETWORK_FLT, NETWORK_STR, NETWORK_BLOB }; // type, what -enum { NETWORK_SEND = 2, NETWORK_RECV = 4 }; -enum { NETWORK_UNRELIABLE = 8, NETWORK_UNORDERED = 16/*, NETWORK_PRIORITY = 32*/ }; -API void* network_buffer(void *ptr, unsigned sz, uint64_t flags, int64_t rank); // configures a shared/networked buffer -API char** network_sync(unsigned timeout_ms); // syncs all buffers & returns null-terminated list of network events - -enum { - NETWORK_EVENT_CONNECT, - NETWORK_EVENT_DISCONNECT, - NETWORK_EVENT_RECEIVE, - NETWORK_EVENT_DISCONNECT_TIMEOUT, - - /* offset from internal networking events */ - NETWORK_EVENT_RPC = 10, - NETWORK_EVENT_RPC_RESP, -}; - -/* errcode and errstr are optional arguments, pass NULL to ignore them, - errstr is filled by va() */ -API int network_event(const char *msg, int *errcode, char **errstr); - -enum { NETWORK_RANK = 0 }; // [0..N] where 0 is server -enum { NETWORK_PING = 1 }; // NETWORK_BANDWIDTH, NETWORK_QUALITY }; -enum { NETWORK_PORT = 2, NETWORK_IP, NETWORK_LIVE }; -enum { NETWORK_SEND_MS = 4 }; -enum { NETWORK_BUF_CLEAR_ON_JOIN = 5 }; -enum { NETWORK_USERID = 7, /*NETWORK_SALT,*/ NETWORK_COUNT/*N users*/ /*...*/, NETWORK_CAPACITY }; -API int64_t network_get(uint64_t key); -API int64_t network_put(uint64_t key, int64_t value); - -API void network_rpc(const char *signature, void *function); -API void network_rpc_send_to(int64_t rank, unsigned id, const char *cmdline); -API void network_rpc_send(unsigned id, const char *cmdline); - -// ----------------------------------------------------------------------------- -// low-level api (sockets based) - -API bool server_bind(int max_clients, int port); -API char** server_poll(unsigned timeout_ms); -API char** client_poll(unsigned timeout_ms); -API void server_broadcast_bin_flags(const void *ptr, int len, uint64_t flags); -API void server_broadcast_bin(const void *ptr, int len); -API void server_broadcast_flags(const char *msg, uint64_t flags); -API void server_broadcast(const char *msg); -API void server_terminate(); -API void server_send(int64_t handle, const char *msg); -API void server_send_bin(int64_t handle, const void *ptr, int len); -API void server_drop(int64_t handle); - -API int64_t client_join(const char *ip, int port); -#define client_send_flags(msg,flags) server_broadcast(msg, flags) -#define client_send(msg) server_broadcast(msg) -#define client_send_bin_flags(ptr,len,flags) server_broadcast_bin(ptr, len, flags) -#define client_send_bin(ptr,len) server_broadcast_bin(ptr, len) -#define client_terminate() server_terminate() - -#define ANYHOST_IPV4 "0.0.0.0" -#define ANYHOST_IPV6 "::0" - -#define LOCALHOST_IPV4 "127.0.0.1" -#define LOCALHOST_IPV6 "::1" +// high-level, socket-less networking api. inspired by Quake, MPI and RenderBuckets theories. +// - rlyeh, public domain +// +// Usage: +// 1. configure networked memory buffers with flags (world, player1, player2, etc). network_buffer(); +// 2. then during game loop: +// - modify your buffers as much as needed. +// - sync buffers at least once per frame. network_sync(); +// - render your world +// 3. optionally, monitor network status & variables. network_get(); +// +// @todo: maybe network_send(msg) + msg *network_recv(); instead of event queue of network_sync() ? + +//enum { NETWORK_HANDSHAKE, NETWORK_ENCRYPT, NETWORK_VERSIONED, NETWORK_CHECKSUM }; // negotiation +//enum { NETWORK_TCP, NETWORK_UDP, NETWORK_KCP, NETWORK_ENET, NETWORK_WEBSOCKET }; // transport, where + +enum { NETWORK_BIND = 2, NETWORK_CONNECT = 4, NETWORK_NOFAIL = 8 }; +API void network_create(unsigned max_clients, const char *ip, const char *port, unsigned flags); // both ip and port can be null + +//enum { NETWORK_LOSSY, NETWORK_COMPRESS }; // post-processes +//enum { NETWORK_PREDICT, NETWORK_RECONCILE, NETWORK_INTERPOLATE, NETWORK_COMPENSATE }; // time authority, when +//enum { NETWORK_LAGS, NETWORK_DROPS, NETWORK_THROTTLES, NETWORK_DUPES }; // quality sim, how much +//enum { NETWORK_CONST = 1, NETWORK_64,NETWORK_32,NETWORK_16,NETWORK_8, NETWORK_FLT, NETWORK_STR, NETWORK_BLOB }; // type, what +enum { NETWORK_SEND = 2, NETWORK_RECV = 4 }; +enum { NETWORK_UNRELIABLE = 8, NETWORK_UNORDERED = 16/*, NETWORK_PRIORITY = 32*/ }; +API void* network_buffer(void *ptr, unsigned sz, uint64_t flags, int64_t rank); // configures a shared/networked buffer +API char** network_sync(unsigned timeout_ms); // syncs all buffers & returns null-terminated list of network events + +enum { + NETWORK_EVENT_CONNECT, + NETWORK_EVENT_DISCONNECT, + NETWORK_EVENT_RECEIVE, + NETWORK_EVENT_DISCONNECT_TIMEOUT, + + /* offset from internal networking events */ + NETWORK_EVENT_RPC = 10, + NETWORK_EVENT_RPC_RESP, +}; + +/* errcode and errstr are optional arguments, pass NULL to ignore them, + errstr is filled by va() */ +API int network_event(const char *msg, int *errcode, char **errstr); + +enum { NETWORK_RANK = 0 }; // [0..N] where 0 is server +enum { NETWORK_PING = 1 }; // NETWORK_BANDWIDTH, NETWORK_QUALITY }; +enum { NETWORK_PORT = 2, NETWORK_IP, NETWORK_LIVE }; +enum { NETWORK_SEND_MS = 4 }; +enum { NETWORK_BUF_CLEAR_ON_JOIN = 5 }; +enum { NETWORK_USERID = 7, /*NETWORK_SALT,*/ NETWORK_COUNT/*N users*/ /*...*/, NETWORK_CAPACITY }; +API int64_t network_get(uint64_t key); +API int64_t network_put(uint64_t key, int64_t value); + +API void network_rpc(const char *signature, void *function); +API void network_rpc_send_to(int64_t rank, unsigned id, const char *cmdline); +API void network_rpc_send(unsigned id, const char *cmdline); + +// ----------------------------------------------------------------------------- +// low-level api (sockets based) + +API bool server_bind(int max_clients, int port); +API char** server_poll(unsigned timeout_ms); +API char** client_poll(unsigned timeout_ms); +API void server_broadcast_bin_flags(const void *ptr, int len, uint64_t flags); +API void server_broadcast_bin(const void *ptr, int len); +API void server_broadcast_flags(const char *msg, uint64_t flags); +API void server_broadcast(const char *msg); +API void server_terminate(); +API void server_send(int64_t handle, const char *msg); +API void server_send_bin(int64_t handle, const void *ptr, int len); +API void server_drop(int64_t handle); + +API int64_t client_join(const char *ip, int port); +#define client_send_flags(msg,flags) server_broadcast(msg, flags) +#define client_send(msg) server_broadcast(msg) +#define client_send_bin_flags(ptr,len,flags) server_broadcast_bin(ptr, len, flags) +#define client_send_bin(ptr,len) server_broadcast_bin(ptr, len) +#define client_terminate() server_terminate() + +#define ANYHOST_IPV4 "0.0.0.0" +#define ANYHOST_IPV6 "::0" + +#define LOCALHOST_IPV4 "127.0.0.1" +#define LOCALHOST_IPV6 "::1" #line 0 #line 1 "v4k_pack.h" -// ---------------------------------------------------------------------------- -// compression api - -enum COMPRESS_FLAGS { - COMPRESS_RAW = 0, - COMPRESS_PPP = (1<<4), - COMPRESS_ULZ = (2<<4), - COMPRESS_LZ4 = (3<<4), - COMPRESS_CRUSH = (4<<4), - COMPRESS_DEFLATE = (5<<4), - COMPRESS_LZP1 = (6<<4), - COMPRESS_LZMA = (7<<4), - COMPRESS_BALZ = (8<<4), - COMPRESS_LZW3 = (9<<4), - COMPRESS_LZSS = (10<<4), - COMPRESS_BCM = (11<<4), - COMPRESS_ZLIB = (12<<4), // same as deflate with header -}; - -API unsigned zbounds(unsigned inlen, unsigned flags); -API unsigned zencode(void *out, unsigned outlen, const void *in, unsigned inlen, unsigned flags); -API unsigned zexcess(unsigned flags); -API unsigned zdecode(void *out, unsigned outlen, const void *in, unsigned inlen, unsigned flags); - -// ---------------------------------------------------------------------------- -// array de/interleaving -// -// results: -// R0G0B0 R1G1B1 R2G2B2... -> R0R1R2... B0B1B2... G0G1G2... -// R0G0B0A0 R1G1B1A1 R2G2B2A2... -> R0R1R2... A0A1A2... B0B1B2... G0G1G2... - -API void *interleave( void *out, const void *list, int list_count, int sizeof_item, unsigned columns ); - -// ---------------------------------------------------------------------------- -// cobs en/decoder - -API unsigned cobs_bounds(unsigned len); -API unsigned cobs_encode(const void *in, unsigned inlen, void *out, unsigned outlen); -API unsigned cobs_decode(const void *in, unsigned inlen, void *out, unsigned outlen); - -// ---------------------------------------------------------------------------- -// base92 en/decoder - -API unsigned base92_encode(const void *in, unsigned inlen, void* out, unsigned outlen); -API unsigned base92_decode(const void *in, unsigned inlen, void* out, unsigned outlen); -API unsigned base92_bounds(unsigned inlen); - -// ---------------------------------------------------------------------------- -// netstring en/decoder - -API unsigned netstring_bounds(unsigned inlen); -API unsigned netstring_encode(const char *in, unsigned inlen, char *out, unsigned outlen); -API unsigned netstring_decode(const char *in, unsigned inlen, char *out, unsigned outlen); - -// ---------------------------------------------------------------------------- -// delta en/decoder - -API void delta8_encode(void *buffer, unsigned count); -API void delta8_decode(void *buffer, unsigned count); - -API void delta16_encode(void *buffer, unsigned count); -API void delta16_decode(void *buffer, unsigned count); - -API void delta32_encode(void *buffer, unsigned count); -API void delta32_decode(void *buffer, unsigned count); - -API void delta64_encode(void *buffer, unsigned count); -API void delta64_decode(void *buffer, unsigned count); - -// ---------------------------------------------------------------------------- -// zigzag en/decoder - -API uint64_t zig64( int64_t value ); // convert sign|magnitude to magnitude|sign -API int64_t zag64( uint64_t value ); // convert magnitude|sign to sign|magnitude - -API uint32_t enczig32u( int32_t n); -API uint64_t enczig64u( int64_t n); -API int32_t deczig32i(uint32_t n); -API int64_t deczig64i(uint64_t n); - -// ---------------------------------------------------------------------------- -// arc4 en/decryptor - -API void *arc4( void *buffer, unsigned buflen, const void *pass, unsigned passlen ); - -// ---------------------------------------------------------------------------- -// crc64 - -API uint64_t crc64(uint64_t h, const void *ptr, uint64_t len); - -// ---------------------------------------------------------------------------- -// entropy encoder - -API void entropy( void *buf, unsigned n ); - -// ----------------------------------------------------------------------------- -// semantic versioning in a single byte (octal) - -API int semver( int major, int minor, int patch ); -API int semvercmp( int v1, int v2 ); - -#define SEMVER(major,minor,patch) (0100 * (major) + 010 * (minor) + (patch)) -#define SEMVERCMP(v1,v2) (((v1) & 0110) - ((v2) & 0110)) -#define SEMVERFMT "%03o" - -// ----------------------------------------------------------------------------- -// storage types. refer to vec2i/3i, vec2/3/4 if you plan to do math operations - -typedef struct byte2 { uint8_t x,y; } byte2; -typedef struct byte3 { uint8_t x,y,z; } byte3; -typedef struct byte4 { uint8_t x,y,z,w; } byte4; - -typedef struct int2 { int x,y; } int2; -typedef struct int3 { int x,y,z; } int3; -typedef struct int4 { int x,y,z,w; } int4; - -typedef struct uint2 { unsigned int x,y; } uint2; -typedef struct uint3 { unsigned int x,y,z; } uint3; -typedef struct uint4 { unsigned int x,y,z,w; } uint4; - -typedef struct float2 { float x,y; } float2; -typedef struct float3 { float x,y,z; } float3; -typedef struct float4 { float x,y,z,w; } float4; - -typedef struct double2 { double x,y; } double2; -typedef struct double3 { double x,y,z; } double3; -typedef struct double4 { double x,y,z,w; } double4; - -#define byte2(x,y) C_CAST(byte2, (uint8_t)(x), (uint8_t)(y) ) -#define byte3(x,y,z) C_CAST(byte3, (uint8_t)(x), (uint8_t)(y), (uint8_t)(z) ) -#define byte4(x,y,z,w) C_CAST(byte4, (uint8_t)(x), (uint8_t)(y), (uint8_t)(z), (uint8_t)(w) ) - -#define int2(x,y) C_CAST(int2, (int)(x), (int)(y) ) -#define int3(x,y,z) C_CAST(int3, (int)(x), (int)(y), (int)(z) ) -#define int4(x,y,z,w) C_CAST(int4, (int)(x), (int)(y), (int)(z), (int)(w) ) - -#define uint2(x,y) C_CAST(uint2, (unsigned)(x), (unsigned)(y) ) -#define uint3(x,y,z) C_CAST(uint3, (unsigned)(x), (unsigned)(y), (unsigned)(z) ) -#define uint4(x,y,z,w) C_CAST(uint4, (unsigned)(x), (unsigned)(y), (unsigned)(z), (unsigned)(w) ) - -#define float2(x,y) C_CAST(float2, (float)(x), (float)(y) ) -#define float3(x,y,z) C_CAST(float3, (float)(x), (float)(y), (float)(z) ) -#define float4(x,y,z,w) C_CAST(float4, (float)(x), (float)(y), (float)(z), (float)(w) ) - -#define double2(x,y) C_CAST(double2, (double)(x), (double)(y) ) -#define double3(x,y,z) C_CAST(double3, (double)(x), (double)(y), (double)(z) ) -#define double4(x,y,z,w) C_CAST(double4, (double)(x), (double)(y), (double)(z), (double)(w) ) - -// ----------------------------------------------------------------------------- -// compile-time fourcc, eightcc - -API char *cc4str(unsigned cc); -API char *cc8str(uint64_t cc); - -enum { -# define _(a,b,c,d,e) cc__##a, cc__##b, cc__##c, cc__##d, cc__##e - cc__1 = '1', _(2,3,4,5,6),_(7,8,9,0,_), cc__ = ' ', - cc__A = 'A', _(B,C,D,E,F),_(G,H,I,J,K),_(L,M,N,O,P),_(Q,R,S,T,U),_(V,W,X,Y,Z), - cc__a = 'a', _(b,c,d,e,f),_(g,h,i,j,k),_(l,m,n,o,p),_(q,r,s,t,u),_(v,w,x,y,z), -# undef _ -}; - -#ifdef BIG -#define cc4(a,b,c,d) ((uint32_t)(cc__##a<<24) | (cc__##b<<16) | (cc__##c<<8) | (cc__##d<<0)) -#define cc8(a,b,c,d,e,f,g,h) (((uint64_t)cc4(a,b,c,d) << 32ULL) | cc4(e,f,g,h)) -#else -#define cc4(a,b,c,d) ((uint32_t)(cc__##d<<24) | (cc__##c<<16) | (cc__##b<<8) | (cc__##a<<0)) -#define cc8(a,b,c,d,e,f,g,h) (((uint64_t)cc4(e,f,g,h) << 32ULL) | cc4(a,b,c,d)) -#endif - -#define cc3(a,b,c) cc4(,a,b,c) -#define cc5(a,b,c,d,e) cc6(,a,b,c,d,e) -#define cc6(a,b,c,d,e,f) cc7(,a,b,c,d,e,f) -#define cc7(a,b,c,d,e,f,g) cc8(,a,b,c,d,e,f,g) - -// ---------------------------------------------------------------------------- -// text conversions - -API char* ftoa1(float v); -API char* ftoa2(vec2 v); -API char* ftoa3(vec3 v); -API char* ftoa4(vec4 v); - -API float atof1(const char *s); -API vec2 atof2(const char *s); -API vec3 atof3(const char *s); -API vec4 atof4(const char *s); - -API char* itoa1(int v); -API char* itoa2(vec2i v); -API char* itoa3(vec3i v); - -API int atoi1(const char *s); -API vec2i atoi2(const char *s); -API vec3i atoi3(const char *s); - -// ---------------------------------------------------------------------------- -// endianness - -API int is_big(); -API int is_little(); - -API uint16_t swap16( uint16_t x ); -API uint32_t swap32( uint32_t x ); -API uint64_t swap64( uint64_t x ); -API float swap32f(float n); -API double swap64f(double n); -API void swapf(float *a, float *b); -API void swapf2(vec2 *a, vec2 *b); -API void swapf3(vec3 *a, vec3 *b); -API void swapf4(vec4 *a, vec4 *b); - -API uint16_t lil16(uint16_t n); // swap16 as lil -API uint32_t lil32(uint32_t n); // swap32 as lil -API uint64_t lil64(uint64_t n); // swap64 as lil -API float lil32f(float n); // swap32 as lil -API double lil64f(double n); // swap64 as lil - -API uint16_t big16(uint16_t n); // swap16 as big -API uint32_t big32(uint32_t n); // swap32 as big -API uint64_t big64(uint64_t n); // swap64 as big -API float big32f(float n); // swap32 as big -API double big64f(double n); // swap64 as big - -API uint16_t* lil16p(void *p, int sz); -API uint32_t* lil32p(void *p, int sz); -API uint64_t* lil64p(void *p, int sz); -API float * lil32pf(void *p, int sz); -API double * lil64pf(void *p, int sz); - -API uint16_t* big16p(void *p, int sz); -API uint32_t* big32p(void *p, int sz); -API uint64_t* big64p(void *p, int sz); -API float * big32pf(void *p, int sz); -API double * big64pf(void *p, int sz); - -#if is(cl) -#define swap16 _byteswap_ushort -#define swap32 _byteswap_ulong -#define swap64 _byteswap_uint64 -#elif is(gcc) -#define swap16 __builtin_bswap16 -#define swap32 __builtin_bswap32 -#define swap64 __builtin_bswap64 -#endif - -#define hton16 big16 -#define ntoh16 big16 -#define hton32 big32 -#define ntoh32 big32 -#define hton64 big64 -#define ntoh64 big64 - -#define IS_BIG ((*(uint16_t *)"\0\1") == 1) -#define IS_LITTLE ((*(uint16_t *)"\0\1") != 1) - -// ---------------------------------------------------------------------------- -// half packing - -typedef uint16_t half; -API float half_to_float(half value); -API half float_to_half(float value); - -// ---------------------------------------------------------------------------- -// int packing - -// pack16i() -- store a 16-bit int into a char buffer (like htons()) -// pack32i() -- store a 32-bit int into a char buffer (like htonl()) -// pack64i() -- store a 64-bit int into a char buffer (like htonl()) - -API void pack16i(uint8_t *buf, uint16_t i, int swap); -API void pack32i(uint8_t *buf, uint32_t i, int swap); -API void pack64i(uint8_t *buf, uint64_t i, int swap); - -// unpack16i() -- unpack a 16-bit int from a char buffer (like ntohs()) -// unpack32i() -- unpack a 32-bit int from a char buffer (like ntohl()) -// unpack64i() -- unpack a 64-bit int from a char buffer (like ntohl()) -// changes unsigned numbers to signed if needed. - -API int16_t unpack16i(const uint8_t *buf, int swap); -API int32_t unpack32i(const uint8_t *buf, int swap); -API int64_t unpack64i(const uint8_t *buf, int swap); - -// ---------------------------------------------------------------------------- -// float un/packing: 8 (micro), 16 (half), 32 (float), 64 (double) types - -#define pack754_8(f) ( pack754((f), 8, 4)) -#define pack754_16(f) ( pack754((f), 16, 5)) -#define pack754_32(f) ( pack754((f), 32, 8)) -#define pack754_64(f) ( pack754((f), 64, 11)) -#define unpack754_8(u) (unpack754((u), 8, 4)) -#define unpack754_16(u) (unpack754((u), 16, 5)) -#define unpack754_32(u) (unpack754((u), 32, 8)) -#define unpack754_64(u) (unpack754((u), 64, 11)) - -API uint64_t pack754(long double f, unsigned bits, unsigned expbits); -API long double unpack754(uint64_t i, unsigned bits, unsigned expbits); - -// ---------------------------------------------------------------------------- -// variable-length integer packing - -API uint64_t pack64uv( uint8_t *buffer, uint64_t value ); -API uint64_t unpack64uv( const uint8_t *buffer, uint64_t *value ); -API uint64_t pack64iv( uint8_t *buffer, int64_t value_ ); -API uint64_t unpack64iv( const uint8_t *buffer, int64_t *value ); - -// ---------------------------------------------------------------------------- -// msgpack v5, schema based struct/buffer bitpacking - -// api v2 - -API int msgpack(const char *fmt, ... ); // va arg pack "n,b,u,d/i,s,p,f/g,e,[,{". returns number of written bytes -API int msgunpack(const char *fmt, ... ); // va arg pack "n,b,u,d/i,s,p,f/g,e,[,{". returns number of parsed args - -// api v1 - -API int msgpack_new(uint8_t *w, size_t l); -API int msgpack_nil(); // write null -API int msgpack_chr(bool n); // write boolean -API int msgpack_uns(uint64_t n); // write unsigned integer -API int msgpack_int(int64_t n); // write integer -API int msgpack_str(const char *s); // write string -API int msgpack_bin(const char *s, size_t n); // write binary pointer -API int msgpack_flt(double g); // write real -API int msgpack_ext(uint8_t key, void *val, size_t n); // write extension type -API int msgpack_arr(uint32_t n); // write array mark for next N items -API int msgpack_map(uint32_t n); // write map mark for next N pairs (N keys + N values) -API int msgpack_eof(); // write full? -API int msgpack_err(); // write error? - -API bool msgunpack_new( const void *opaque_or_FILE, size_t bytes ); -API bool msgunpack_nil(); -API bool msgunpack_chr(bool *chr); -API bool msgunpack_uns(uint64_t *uns); -API bool msgunpack_int(int64_t *sig); -API bool msgunpack_str(char **str); -API bool msgunpack_bin(void **bin, uint64_t *len); -API bool msgunpack_flt(float *flt); -API bool msgunpack_dbl(double *dbl); -API bool msgunpack_ext(uint8_t *key, void **val, uint64_t *len); -API bool msgunpack_arr(uint64_t *len); -API bool msgunpack_map(uint64_t *len); -API bool msgunpack_eof(); -API bool msgunpack_err(); - -// ---------------------------------------------------------------------------- -// Based on code by Brian "Beej Jorgensen" Hall (public domain) [1]. -// Based on code by Ginger Bill's half<->float (public domain) [2]. -// - rlyeh, public domain. -// -// pack.c -- perl/python-ish pack/unpack functions -// like printf and scanf, but for binary data. -// -// format flags: -// (<) little endian (>) big endian (! also) (=) native endian -// (c) 8-bit char (b) 8-bit byte -// (h) 16-bit half (w) 16-bit word -// (i) 32-bit integer (u) 32-bit unsigned (f) 32-bit float -// (l) 64-bit long (q) 64-bit quad (d) 64-bit double -// (v) varint -// (s) string (64-bit varint length prepended) -// (S) string (32-bit fixed length prepended) -// (m) memblock (64-bit varint length prepended) -// (M) memblock (32-bit fixed length prepended) -// (z) memblock (zeroed) -// (#) number of arguments processed (only when unpacking) -// -// @todo: -// - (x) document & test flag -// @totest: -// - (s) string (64-bit variable length automatically prepended) -// - (S) string (32-bit fixed length automatically prepended) -// - (m) memblock (64-bit variable length automatically prepended) -// - (M) memblock (32-bit fixed length automatically prepended) -// - (z) memblock (zeroed) -// - (#) number of arguments processed (only when unpacking) - -// - save data dictated by the format string from the buffer. return: number of bytes written, or 0 if error. -// if first argument is zero, returns number of bytes required for packing. - -API int savef(FILE *file, const char *format, ...); -API int saveb(unsigned char *buf, const char *format, ...); - -// - load data dictated by the format string into the buffer. return: number of bytes read, or 0 if error. -// if first argument is zero, returns number of bytes required for unpacking. - -API int loadf(FILE *file, const char *format, ...); -API int loadb(const unsigned char *buf, const char *format, ...); - +// ---------------------------------------------------------------------------- +// compression api + +enum COMPRESS_FLAGS { + COMPRESS_RAW = 0, + COMPRESS_PPP = (1<<4), + COMPRESS_ULZ = (2<<4), + COMPRESS_LZ4 = (3<<4), + COMPRESS_CRUSH = (4<<4), + COMPRESS_DEFLATE = (5<<4), + COMPRESS_LZP1 = (6<<4), + COMPRESS_LZMA = (7<<4), + COMPRESS_BALZ = (8<<4), + COMPRESS_LZW3 = (9<<4), + COMPRESS_LZSS = (10<<4), + COMPRESS_BCM = (11<<4), + COMPRESS_ZLIB = (12<<4), // same as deflate with header +}; + +API unsigned zbounds(unsigned inlen, unsigned flags); +API unsigned zencode(void *out, unsigned outlen, const void *in, unsigned inlen, unsigned flags); +API unsigned zexcess(unsigned flags); +API unsigned zdecode(void *out, unsigned outlen, const void *in, unsigned inlen, unsigned flags); + +// ---------------------------------------------------------------------------- +// array de/interleaving +// +// results: +// R0G0B0 R1G1B1 R2G2B2... -> R0R1R2... B0B1B2... G0G1G2... +// R0G0B0A0 R1G1B1A1 R2G2B2A2... -> R0R1R2... A0A1A2... B0B1B2... G0G1G2... + +API void *interleave( void *out, const void *list, int list_count, int sizeof_item, unsigned columns ); + +// ---------------------------------------------------------------------------- +// cobs en/decoder + +API unsigned cobs_bounds(unsigned len); +API unsigned cobs_encode(const void *in, unsigned inlen, void *out, unsigned outlen); +API unsigned cobs_decode(const void *in, unsigned inlen, void *out, unsigned outlen); + +// ---------------------------------------------------------------------------- +// base92 en/decoder + +API unsigned base92_encode(const void *in, unsigned inlen, void* out, unsigned outlen); +API unsigned base92_decode(const void *in, unsigned inlen, void* out, unsigned outlen); +API unsigned base92_bounds(unsigned inlen); + +// ---------------------------------------------------------------------------- +// netstring en/decoder + +API unsigned netstring_bounds(unsigned inlen); +API unsigned netstring_encode(const char *in, unsigned inlen, char *out, unsigned outlen); +API unsigned netstring_decode(const char *in, unsigned inlen, char *out, unsigned outlen); + +// ---------------------------------------------------------------------------- +// delta en/decoder + +API void delta8_encode(void *buffer, unsigned count); +API void delta8_decode(void *buffer, unsigned count); + +API void delta16_encode(void *buffer, unsigned count); +API void delta16_decode(void *buffer, unsigned count); + +API void delta32_encode(void *buffer, unsigned count); +API void delta32_decode(void *buffer, unsigned count); + +API void delta64_encode(void *buffer, unsigned count); +API void delta64_decode(void *buffer, unsigned count); + +// ---------------------------------------------------------------------------- +// zigzag en/decoder + +API uint64_t zig64( int64_t value ); // convert sign|magnitude to magnitude|sign +API int64_t zag64( uint64_t value ); // convert magnitude|sign to sign|magnitude + +API uint32_t enczig32u( int32_t n); +API uint64_t enczig64u( int64_t n); +API int32_t deczig32i(uint32_t n); +API int64_t deczig64i(uint64_t n); + +// ---------------------------------------------------------------------------- +// arc4 en/decryptor + +API void *arc4( void *buffer, unsigned buflen, const void *pass, unsigned passlen ); + +// ---------------------------------------------------------------------------- +// crc64 + +API uint64_t crc64(uint64_t h, const void *ptr, uint64_t len); + +// ---------------------------------------------------------------------------- +// entropy encoder + +API void entropy( void *buf, unsigned n ); + +// ----------------------------------------------------------------------------- +// semantic versioning in a single byte (octal) + +API int semver( int major, int minor, int patch ); +API int semvercmp( int v1, int v2 ); + +#define SEMVER(major,minor,patch) (0100 * (major) + 010 * (minor) + (patch)) +#define SEMVERCMP(v1,v2) (((v1) & 0110) - ((v2) & 0110)) +#define SEMVERFMT "%03o" + +// ----------------------------------------------------------------------------- +// storage types. refer to vec2i/3i, vec2/3/4 if you plan to do math operations + +typedef struct byte2 { uint8_t x,y; } byte2; +typedef struct byte3 { uint8_t x,y,z; } byte3; +typedef struct byte4 { uint8_t x,y,z,w; } byte4; + +typedef struct int2 { int x,y; } int2; +typedef struct int3 { int x,y,z; } int3; +typedef struct int4 { int x,y,z,w; } int4; + +typedef struct uint2 { unsigned int x,y; } uint2; +typedef struct uint3 { unsigned int x,y,z; } uint3; +typedef struct uint4 { unsigned int x,y,z,w; } uint4; + +typedef struct float2 { float x,y; } float2; +typedef struct float3 { float x,y,z; } float3; +typedef struct float4 { float x,y,z,w; } float4; + +typedef struct double2 { double x,y; } double2; +typedef struct double3 { double x,y,z; } double3; +typedef struct double4 { double x,y,z,w; } double4; + +#define byte2(x,y) C_CAST(byte2, (uint8_t)(x), (uint8_t)(y) ) +#define byte3(x,y,z) C_CAST(byte3, (uint8_t)(x), (uint8_t)(y), (uint8_t)(z) ) +#define byte4(x,y,z,w) C_CAST(byte4, (uint8_t)(x), (uint8_t)(y), (uint8_t)(z), (uint8_t)(w) ) + +#define int2(x,y) C_CAST(int2, (int)(x), (int)(y) ) +#define int3(x,y,z) C_CAST(int3, (int)(x), (int)(y), (int)(z) ) +#define int4(x,y,z,w) C_CAST(int4, (int)(x), (int)(y), (int)(z), (int)(w) ) + +#define uint2(x,y) C_CAST(uint2, (unsigned)(x), (unsigned)(y) ) +#define uint3(x,y,z) C_CAST(uint3, (unsigned)(x), (unsigned)(y), (unsigned)(z) ) +#define uint4(x,y,z,w) C_CAST(uint4, (unsigned)(x), (unsigned)(y), (unsigned)(z), (unsigned)(w) ) + +#define float2(x,y) C_CAST(float2, (float)(x), (float)(y) ) +#define float3(x,y,z) C_CAST(float3, (float)(x), (float)(y), (float)(z) ) +#define float4(x,y,z,w) C_CAST(float4, (float)(x), (float)(y), (float)(z), (float)(w) ) + +#define double2(x,y) C_CAST(double2, (double)(x), (double)(y) ) +#define double3(x,y,z) C_CAST(double3, (double)(x), (double)(y), (double)(z) ) +#define double4(x,y,z,w) C_CAST(double4, (double)(x), (double)(y), (double)(z), (double)(w) ) + +// ----------------------------------------------------------------------------- +// compile-time fourcc, eightcc + +API char *cc4str(unsigned cc); +API char *cc8str(uint64_t cc); + +enum { +# define _(a,b,c,d,e) cc__##a, cc__##b, cc__##c, cc__##d, cc__##e + cc__1 = '1', _(2,3,4,5,6),_(7,8,9,0,_), cc__ = ' ', + cc__A = 'A', _(B,C,D,E,F),_(G,H,I,J,K),_(L,M,N,O,P),_(Q,R,S,T,U),_(V,W,X,Y,Z), + cc__a = 'a', _(b,c,d,e,f),_(g,h,i,j,k),_(l,m,n,o,p),_(q,r,s,t,u),_(v,w,x,y,z), +# undef _ +}; + +#ifdef BIG +#define cc4(a,b,c,d) ((uint32_t)(cc__##a<<24) | (cc__##b<<16) | (cc__##c<<8) | (cc__##d<<0)) +#define cc8(a,b,c,d,e,f,g,h) (((uint64_t)cc4(a,b,c,d) << 32ULL) | cc4(e,f,g,h)) +#else +#define cc4(a,b,c,d) ((uint32_t)(cc__##d<<24) | (cc__##c<<16) | (cc__##b<<8) | (cc__##a<<0)) +#define cc8(a,b,c,d,e,f,g,h) (((uint64_t)cc4(e,f,g,h) << 32ULL) | cc4(a,b,c,d)) +#endif + +#define cc3(a,b,c) cc4(,a,b,c) +#define cc5(a,b,c,d,e) cc6(,a,b,c,d,e) +#define cc6(a,b,c,d,e,f) cc7(,a,b,c,d,e,f) +#define cc7(a,b,c,d,e,f,g) cc8(,a,b,c,d,e,f,g) + +// ---------------------------------------------------------------------------- +// text conversions + +API char* ftoa1(float v); +API char* ftoa2(vec2 v); +API char* ftoa3(vec3 v); +API char* ftoa4(vec4 v); + +API float atof1(const char *s); +API vec2 atof2(const char *s); +API vec3 atof3(const char *s); +API vec4 atof4(const char *s); + +API char* itoa1(int v); +API char* itoa2(vec2i v); +API char* itoa3(vec3i v); + +API int atoi1(const char *s); +API vec2i atoi2(const char *s); +API vec3i atoi3(const char *s); + +// ---------------------------------------------------------------------------- +// endianness + +API int is_big(); +API int is_little(); + +API uint16_t swap16( uint16_t x ); +API uint32_t swap32( uint32_t x ); +API uint64_t swap64( uint64_t x ); +API float swap32f(float n); +API double swap64f(double n); +API void swapf(float *a, float *b); +API void swapf2(vec2 *a, vec2 *b); +API void swapf3(vec3 *a, vec3 *b); +API void swapf4(vec4 *a, vec4 *b); + +API uint16_t lil16(uint16_t n); // swap16 as lil +API uint32_t lil32(uint32_t n); // swap32 as lil +API uint64_t lil64(uint64_t n); // swap64 as lil +API float lil32f(float n); // swap32 as lil +API double lil64f(double n); // swap64 as lil + +API uint16_t big16(uint16_t n); // swap16 as big +API uint32_t big32(uint32_t n); // swap32 as big +API uint64_t big64(uint64_t n); // swap64 as big +API float big32f(float n); // swap32 as big +API double big64f(double n); // swap64 as big + +API uint16_t* lil16p(void *p, int sz); +API uint32_t* lil32p(void *p, int sz); +API uint64_t* lil64p(void *p, int sz); +API float * lil32pf(void *p, int sz); +API double * lil64pf(void *p, int sz); + +API uint16_t* big16p(void *p, int sz); +API uint32_t* big32p(void *p, int sz); +API uint64_t* big64p(void *p, int sz); +API float * big32pf(void *p, int sz); +API double * big64pf(void *p, int sz); + +#if is(cl) +#define swap16 _byteswap_ushort +#define swap32 _byteswap_ulong +#define swap64 _byteswap_uint64 +#elif is(gcc) +#define swap16 __builtin_bswap16 +#define swap32 __builtin_bswap32 +#define swap64 __builtin_bswap64 +#endif + +#define hton16 big16 +#define ntoh16 big16 +#define hton32 big32 +#define ntoh32 big32 +#define hton64 big64 +#define ntoh64 big64 + +#define IS_BIG ((*(uint16_t *)"\0\1") == 1) +#define IS_LITTLE ((*(uint16_t *)"\0\1") != 1) + +// ---------------------------------------------------------------------------- +// half packing + +typedef uint16_t half; +API float half_to_float(half value); +API half float_to_half(float value); + +// ---------------------------------------------------------------------------- +// int packing + +// pack16i() -- store a 16-bit int into a char buffer (like htons()) +// pack32i() -- store a 32-bit int into a char buffer (like htonl()) +// pack64i() -- store a 64-bit int into a char buffer (like htonl()) + +API void pack16i(uint8_t *buf, uint16_t i, int swap); +API void pack32i(uint8_t *buf, uint32_t i, int swap); +API void pack64i(uint8_t *buf, uint64_t i, int swap); + +// unpack16i() -- unpack a 16-bit int from a char buffer (like ntohs()) +// unpack32i() -- unpack a 32-bit int from a char buffer (like ntohl()) +// unpack64i() -- unpack a 64-bit int from a char buffer (like ntohl()) +// changes unsigned numbers to signed if needed. + +API int16_t unpack16i(const uint8_t *buf, int swap); +API int32_t unpack32i(const uint8_t *buf, int swap); +API int64_t unpack64i(const uint8_t *buf, int swap); + +// ---------------------------------------------------------------------------- +// float un/packing: 8 (micro), 16 (half), 32 (float), 64 (double) types + +#define pack754_8(f) ( pack754((f), 8, 4)) +#define pack754_16(f) ( pack754((f), 16, 5)) +#define pack754_32(f) ( pack754((f), 32, 8)) +#define pack754_64(f) ( pack754((f), 64, 11)) +#define unpack754_8(u) (unpack754((u), 8, 4)) +#define unpack754_16(u) (unpack754((u), 16, 5)) +#define unpack754_32(u) (unpack754((u), 32, 8)) +#define unpack754_64(u) (unpack754((u), 64, 11)) + +API uint64_t pack754(long double f, unsigned bits, unsigned expbits); +API long double unpack754(uint64_t i, unsigned bits, unsigned expbits); + +// ---------------------------------------------------------------------------- +// variable-length integer packing + +API uint64_t pack64uv( uint8_t *buffer, uint64_t value ); +API uint64_t unpack64uv( const uint8_t *buffer, uint64_t *value ); +API uint64_t pack64iv( uint8_t *buffer, int64_t value_ ); +API uint64_t unpack64iv( const uint8_t *buffer, int64_t *value ); + +// ---------------------------------------------------------------------------- +// msgpack v5, schema based struct/buffer bitpacking + +// api v2 + +API int msgpack(const char *fmt, ... ); // va arg pack "n,b,u,d/i,s,p,f/g,e,[,{". returns number of written bytes +API int msgunpack(const char *fmt, ... ); // va arg pack "n,b,u,d/i,s,p,f/g,e,[,{". returns number of parsed args + +// api v1 + +API int msgpack_new(uint8_t *w, size_t l); +API int msgpack_nil(); // write null +API int msgpack_chr(bool n); // write boolean +API int msgpack_uns(uint64_t n); // write unsigned integer +API int msgpack_int(int64_t n); // write integer +API int msgpack_str(const char *s); // write string +API int msgpack_bin(const char *s, size_t n); // write binary pointer +API int msgpack_flt(double g); // write real +API int msgpack_ext(uint8_t key, void *val, size_t n); // write extension type +API int msgpack_arr(uint32_t n); // write array mark for next N items +API int msgpack_map(uint32_t n); // write map mark for next N pairs (N keys + N values) +API int msgpack_eof(); // write full? +API int msgpack_err(); // write error? + +API bool msgunpack_new( const void *opaque_or_FILE, size_t bytes ); +API bool msgunpack_nil(); +API bool msgunpack_chr(bool *chr); +API bool msgunpack_uns(uint64_t *uns); +API bool msgunpack_int(int64_t *sig); +API bool msgunpack_str(char **str); +API bool msgunpack_bin(void **bin, uint64_t *len); +API bool msgunpack_flt(float *flt); +API bool msgunpack_dbl(double *dbl); +API bool msgunpack_ext(uint8_t *key, void **val, uint64_t *len); +API bool msgunpack_arr(uint64_t *len); +API bool msgunpack_map(uint64_t *len); +API bool msgunpack_eof(); +API bool msgunpack_err(); + +// ---------------------------------------------------------------------------- +// Based on code by Brian "Beej Jorgensen" Hall (public domain) [1]. +// Based on code by Ginger Bill's half<->float (public domain) [2]. +// - rlyeh, public domain. +// +// pack.c -- perl/python-ish pack/unpack functions +// like printf and scanf, but for binary data. +// +// format flags: +// (<) little endian (>) big endian (! also) (=) native endian +// (c) 8-bit char (b) 8-bit byte +// (h) 16-bit half (w) 16-bit word +// (i) 32-bit integer (u) 32-bit unsigned (f) 32-bit float +// (l) 64-bit long (q) 64-bit quad (d) 64-bit double +// (v) varint +// (s) string (64-bit varint length prepended) +// (S) string (32-bit fixed length prepended) +// (m) memblock (64-bit varint length prepended) +// (M) memblock (32-bit fixed length prepended) +// (z) memblock (zeroed) +// (#) number of arguments processed (only when unpacking) +// +// @todo: +// - (x) document & test flag +// @totest: +// - (s) string (64-bit variable length automatically prepended) +// - (S) string (32-bit fixed length automatically prepended) +// - (m) memblock (64-bit variable length automatically prepended) +// - (M) memblock (32-bit fixed length automatically prepended) +// - (z) memblock (zeroed) +// - (#) number of arguments processed (only when unpacking) + +// - save data dictated by the format string from the buffer. return: number of bytes written, or 0 if error. +// if first argument is zero, returns number of bytes required for packing. + +API int savef(FILE *file, const char *format, ...); +API int saveb(unsigned char *buf, const char *format, ...); + +// - load data dictated by the format string into the buffer. return: number of bytes read, or 0 if error. +// if first argument is zero, returns number of bytes required for unpacking. + +API int loadf(FILE *file, const char *format, ...); +API int loadb(const unsigned char *buf, const char *format, ...); + #line 0 #line 1 "v4k_profile.h" -// ----------------------------------------------------------------------------- -// profiler & stats (@fixme: threadsafe) - -#if !ENABLE_PROFILER -# define profile(section) for(int macro(i) = 1; macro(i); macro(i) = 0) -# define profile_incstat(name, accum) do {} while(0) -# define profile_setstat(name, value) do {} while(0) -# define profiler_init() do {} while(0) -# define profiler_enable(x) 0 -# define ui_profiler() do {} while(0) -#else -# define profile(section) for( \ - struct profile_t *found = profiler_enabled ? \ - map_find_or_add(profiler, section "@" FILELINE, (struct profile_t){NAN} ) : NULL, \ - *doit = found + ( found ? found->cost = -time_us(), 1 : 1 ); doit; \ - doit = found ? found->cost += time_us(), found->avg = found->cost * 0.25 + found->avg * 0.75, NULL : NULL) ///+ -# define profile_incstat(name, accum) for( \ - struct profile_t *found = profiler_enabled ? map_find_or_add(profiler, name, (struct profile_t){0}) : NULL; \ - found; found->stat += accum, found = NULL) ///+ -# define profile_setstat(name, value) for( \ - struct profile_t *found = profiler_enabled ? map_find_or_add(profiler, name, (struct profile_t){0}) : NULL; \ - found; found->stat = value, found = NULL) ///+ -API int profiler_enable(bool on); - -struct profile_t { double stat; int32_t cost, avg; }; ///- -typedef map(char *, struct profile_t) profiler_t; ///- -extern API profiler_t profiler; ///- -extern API int profiler_enabled; ///- -#endif +// ----------------------------------------------------------------------------- +// profiler & stats (@fixme: threadsafe) + +#if !ENABLE_PROFILER +# define profile(section) for(int macro(i) = 1; macro(i); macro(i) = 0) +# define profile_incstat(name, accum) do {} while(0) +# define profile_setstat(name, value) do {} while(0) +# define profiler_init() do {} while(0) +# define profiler_enable(x) 0 +# define ui_profiler() do {} while(0) +#else +# define profile(section) for( \ + struct profile_t *found = profiler_enabled ? \ + map_find_or_add(profiler, section "@" FILELINE, (struct profile_t){NAN} ) : NULL, \ + *doit = found + ( found ? found->cost = -time_us(), 1 : 1 ); doit; \ + doit = found ? found->cost += time_us(), found->avg = found->cost * 0.25 + found->avg * 0.75, NULL : NULL) ///+ +# define profile_incstat(name, accum) for( \ + struct profile_t *found = profiler_enabled ? map_find_or_add(profiler, name, (struct profile_t){0}) : NULL; \ + found; found->stat += accum, found = NULL) ///+ +# define profile_setstat(name, value) for( \ + struct profile_t *found = profiler_enabled ? map_find_or_add(profiler, name, (struct profile_t){0}) : NULL; \ + found; found->stat = value, found = NULL) ///+ +API int profiler_enable(bool on); + +struct profile_t { double stat; int32_t cost, avg; }; ///- +typedef map(char *, struct profile_t) profiler_t; ///- +extern API profiler_t profiler; ///- +extern API int profiler_enabled; ///- +#endif #line 0 #line 1 "v4k_reflect.h" -// C reflection: enums, functions, structs, members and anotations. -// - rlyeh, public domain -// -// @todo: nested structs? pointers in members? -// @todo: declare TYPEDEF(vec3, float[3]), TYPEDEF(mat4, vec4[4]/*float[16]*/) - -#ifndef OBJTYPE -#define OBJTYPE(T) 0 -#endif - -typedef struct reflect_t { - unsigned id, objtype; - union { - unsigned sz; - unsigned member_offset; - unsigned enum_value; - }; - const char *name; - const char *info; - void *addr; - unsigned parent; - const char *type; - unsigned bytes; -} reflect_t; - -// inscribe api - -#define ENUM(V, ...) \ - enum_inscribe(#V,V, "E" __VA_ARGS__ " ("FILELINE")") - -#define FUNCTION(F, ...) \ - function_inscribe(#F,(void*)F, "F" __VA_ARGS__ " ("FILELINE")") - -#define STRUCT(T, type, member, ...) \ - struct_inscribe(#T,sizeof(T),OBJTYPE(T),"S" " ("FILELINE")"), \ - type_inscribe(#type,sizeof(((T){0}).member),"T" __VA_ARGS__ " ("FILELINE")"), \ - member_inscribe(#T, #member,(uintptr_t)&((T*)0)->member, "M" __VA_ARGS__ " ("FILELINE")", #type, sizeof(((T){0}).member) ) - -// find api - -API unsigned enum_find(const char *E); -API void * function_find(const char *F); - -API reflect_t member_find(const char *T, const char *M); /// find specific member -API void * member_findptr(void *obj, const char *T, const char *M); // @deprecate -API array(reflect_t)* members_find(const char *T); - -// iterate members in a struct - -#define each_member(T,R) \ - (array(reflect_t) *found_ = members_find(T); found_; found_ = 0) \ - for(int it_ = 0, end_ = array_count(*found_); it_ != end_; ++it_ ) \ - for(reflect_t *R = &(*found_)[it_]; R; R = 0 ) - -// private api, still exposed - -API void type_inscribe(const char *TY,unsigned TYsz,const char *infos); -API void enum_inscribe(const char *E,unsigned Eval,const char *infos); -API void struct_inscribe(const char *T,unsigned Tsz,unsigned OBJTYPEid, const char *infos); -API void member_inscribe(const char *T, const char *M,unsigned Msz, const char *infos, const char *type, unsigned bytes); -API void function_inscribe(const char *F,void *func,const char *infos); -API const char* symbol_naked(const char *s); - -API int ui_reflect(const char *mask); // *, model* or NULL +// C reflection: enums, functions, structs, members and anotations. +// - rlyeh, public domain +// +// @todo: nested structs? pointers in members? +// @todo: declare TYPEDEF(vec3, float[3]), TYPEDEF(mat4, vec4[4]/*float[16]*/) + +#ifndef OBJTYPE +#define OBJTYPE(T) 0 +#endif + +typedef struct reflect_t { + unsigned id, objtype; + union { + unsigned sz; + unsigned member_offset; + unsigned enum_value; + }; + const char *name; + const char *info; + void *addr; + unsigned parent; + const char *type; + unsigned bytes; +} reflect_t; + +// inscribe api + +#define ENUM(V, ...) \ + enum_inscribe(#V,V, "E" __VA_ARGS__ " ("FILELINE")") + +#define FUNCTION(F, ...) \ + function_inscribe(#F,(void*)F, "F" __VA_ARGS__ " ("FILELINE")") + +#define STRUCT(T, type, member, ...) \ + struct_inscribe(#T,sizeof(T),OBJTYPE(T),"S" " ("FILELINE")"), \ + type_inscribe(#type,sizeof(((T){0}).member),"T" __VA_ARGS__ " ("FILELINE")"), \ + member_inscribe(#T, #member,(uintptr_t)&((T*)0)->member, "M" __VA_ARGS__ " ("FILELINE")", #type, sizeof(((T){0}).member) ) + +// find api + +API unsigned enum_find(const char *E); +API void * function_find(const char *F); + +API reflect_t member_find(const char *T, const char *M); /// find specific member +API void * member_findptr(void *obj, const char *T, const char *M); // @deprecate +API array(reflect_t)* members_find(const char *T); + +// iterate members in a struct + +#define each_member(T,R) \ + (array(reflect_t) *found_ = members_find(T); found_; found_ = 0) \ + for(int it_ = 0, end_ = array_count(*found_); it_ != end_; ++it_ ) \ + for(reflect_t *R = &(*found_)[it_]; R; R = 0 ) + +// private api, still exposed + +API void type_inscribe(const char *TY,unsigned TYsz,const char *infos); +API void enum_inscribe(const char *E,unsigned Eval,const char *infos); +API void struct_inscribe(const char *T,unsigned Tsz,unsigned OBJTYPEid, const char *infos); +API void member_inscribe(const char *T, const char *M,unsigned Msz, const char *infos, const char *type, unsigned bytes); +API void function_inscribe(const char *F,void *func,const char *infos); +API const char* symbol_naked(const char *s); + +API int ui_reflect(const char *mask); // *, model* or NULL #line 0 #line 1 "v4k_render.h" -// ----------------------------------------------------------------------------- -// naive rendering framework -// - rlyeh, public domain -// -// IQM skeletal meshes by @lsalzman (public domain) - https://bit.ly/2OQh0Me -// SH code by @ands (public domain) - https://github.com/ands/spherical_harmonics_playground -// SHM code by @jarikomppa (unlicensed) - https://github.com/jarikomppa/shadertoolkit - -typedef unsigned handle; // GLuint - -// ----------------------------------------------------------------------------- -// renderstate -typedef struct renderstate_t { - // Clear color - float clear_color[4]; - - // Color mask - bool color_mask[4]; - - // Clear depth - double clear_depth; - - // Depth test - bool depth_test_enabled; - bool depth_write_enabled; - unsigned depth_func; - - // Polygon offset - bool polygon_offset_enabled; - float polygon_offset; - float polygon_offset_factor; - - // Blending - bool blend_enabled; - unsigned blend_func; - unsigned blend_src; - unsigned blend_dst; - - // Culling - bool cull_face_enabled; - unsigned cull_face_mode; - - // Stencil test - bool stencil_test_enabled; - unsigned stencil_func; - unsigned stencil_op_fail, stencil_op_zfail, stencil_op_zpass; - int stencil_ref; - unsigned stencil_read_mask; - unsigned stencil_write_mask; - - // Face culling direction - unsigned front_face; // GL_CW or GL_CCW - - // Line width - bool line_smooth_enabled; - float line_width; - - // Point size - bool point_size_enabled; - float point_size; - - // Polygon mode - unsigned polygon_mode_face; - unsigned polygon_mode_draw; - - // Scissor test - bool scissor_test_enabled; -} renderstate_t; - -API renderstate_t renderstate(); -API bool renderstate_compare(const renderstate_t *stateA, const renderstate_t *stateB); -API void renderstate_apply(const renderstate_t *state); - -// ----------------------------------------------------------------------------- -// colors - -API unsigned rgba( uint8_t r, uint8_t g, uint8_t b, uint8_t a ); -API unsigned bgra( uint8_t b, uint8_t g, uint8_t r, uint8_t a ); -API unsigned rgbaf( float r, float g, float b, float a ); -API unsigned bgraf( float b, float g, float r, float a ); -API unsigned alpha( unsigned rgba ); - -#define RGBX(rgb,x) ( ((rgb)&0xFFFFFF) | (((unsigned)(x))<<24) ) -#define RGB3(r,g,b) ( (255<<24) | ((b)<<16) | ((g)<<8) | (r) ) -#define RGB4(r,g,b,a) ( ((a)<<24) | ((b)<<16) | ((g)<<8) | (r) ) - -#define BLACK RGBX(0x000000,255) -#define WHITE RGBX(0xE8F1FF,255) - -#define RED RGB3( 255, 0,48 ) -#define GREEN RGB3( 144,255,48 ) -#define CYAN RGB3( 0,192,255 ) -#define ORANGE RGB3( 255,144,48 ) -#define PURPLE RGB3( 102,77,102 ) // 178,128,255 ) -#define YELLOW RGB3( 255,224,0 ) -#define GRAY RGB3( 32,32,32 ) // dark gray -#define SILVER RGB3( 149,149,149 ) // dark white, gray-ish -#define PINK RGB3( 255,48,144 ) -#define AQUA RGB3( 48,255,144 ) - -#define BLUE RGBX(0xB55A06,255) - -API unsigned atorgba(const char *s); -API char * rgbatoa(unsigned rgba); - -// ----------------------------------------------------------------------------- -// images - -/// flags when constructing the image_t type. see: image, image_from_mem -/// IMAGE_R: 1-channel image (R) -/// IMAGE_RG: 2-channel image (R,G) -/// IMAGE_RGB: 3-channel image (R,G,B) -/// IMAGE_RGBA: 4-channel image (R,G,B,A) -/// IMAGE_FLIP: Flip image vertically -/// IMAGE_FLOAT: Float pixel components -enum IMAGE_FLAGS { - IMAGE_R = 0x01000, - IMAGE_RG = 0x02000, - IMAGE_RGB = 0x04000, - IMAGE_RGBA = 0x08000, - IMAGE_FLIP = 0x10000, - IMAGE_FLOAT = 0x20000, -}; - -/// type that holds linear uncompressed bitmap of any given dimensions. -/// w,h: image dimensions in pixels. `x,y` alias. -/// comps: number of components per pixel. `n` alias. -/// pixels: untyped pointer to linear bitmap data. typed pointers use `pixels8/16/32/f` aliases. -/// see: texture_t -typedef struct image_t { - union { unsigned x, w; }; - union { unsigned y, h; }; - union { unsigned n, comps; }; - union { void *pixels; uint8_t *pixels8; uint16_t *pixels16; uint32_t *pixels32; float *pixelsf; }; -} image_t; - -API image_t image(const char *pathfile, int flags); -API image_t image_from_mem(const void *ptr, int len, int flags); -API void image_destroy(image_t *img); - -// ----------------------------------------------------------------------------- -// textures - -enum TEXTURE_FLAGS { - // UNIT[0..7] - - TEXTURE_BC1 = 8, // DXT1, RGB with 8:1 compression ratio (+ optional 1bpp for alpha) - TEXTURE_BC2 = 16, // DXT3, RGBA with 4:1 compression ratio (BC1 for RGB + 4bpp for alpha) - TEXTURE_BC3 = 32, // DXT5, RGBA with 4:1 compression ratio (BC1 for RGB + BC4 for A) -// TEXTURE_BC4, // Alpha - - TEXTURE_NEAREST = 0, - TEXTURE_LINEAR = 64, - TEXTURE_MIPMAPS = 128, - TEXTURE_ANISOTROPY = 1 << 30, - - TEXTURE_CLAMP = 0, - TEXTURE_BORDER = 0x100, - TEXTURE_REPEAT = 0x200, - - TEXTURE_BYTE = 0, - TEXTURE_FLOAT = IMAGE_FLOAT, - - TEXTURE_COLOR = 0, - TEXTURE_DEPTH = 0x800, - - TEXTURE_R = IMAGE_R, - TEXTURE_RG = IMAGE_RG, - TEXTURE_RGB = IMAGE_RGB, - TEXTURE_RGBA = IMAGE_RGBA, - TEXTURE_FLIP = IMAGE_FLIP, - - // @fixme - TEXTURE_SRGB = 1 << 24, - TEXTURE_BGR = 1 << 25, - TEXTURE_BGRA = TEXTURE_BGR, - TEXTURE_ARRAY = 1 << 26, -}; - -typedef struct texture_t { - union { unsigned x, w; }; - union { unsigned y, h; }; - union { unsigned z, d; }; - union { unsigned n, bpp; }; - handle id; - unsigned texel_type; - unsigned flags; - char* filename; - bool transparent; - unsigned fbo; // for texture recording - union { unsigned userdata, delay; }; -} texture_t; - -API texture_t texture_compressed(const char *filename, unsigned flags); -API texture_t texture_compressed_from_mem(const void *data, int len, unsigned flags); - -API texture_t texture(const char* filename, int flags); -API texture_t texture_from_mem(const void* ptr, int len, int flags); -API texture_t texture_create(unsigned w, unsigned h, unsigned n, const void *pixels, int flags); -API texture_t texture_checker(); -API void texture_destroy(texture_t *t); -API int texture_unit(); // returns rolling counter up to GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS -// textureLod(filename, dir, lod); -// void texture_add_loader( int(*loader)(const char *filename, int *w, int *h, int *bpp, int reqbpp, int flags) ); -API unsigned texture_update(texture_t *t, unsigned w, unsigned h, unsigned n, const void *pixels, int flags); - -API bool texture_rec_begin(texture_t *t, unsigned w, unsigned h); // texture_rec -API void texture_rec_end(texture_t *t); // texture_rec - -// ----------------------------------------------------------------------------- -// brdf - -API texture_t brdf_lut(); - -// ----------------------------------------------------------------------------- -// colormap - -typedef struct colormap_t { - vec4 color; - texture_t *texture; -} colormap_t; - -API bool colormap( colormap_t *cm, const char *texture_name, bool load_as_srgb ); - -// ----------------------------------------------------------------------------- -// fullscreen quads - -API void fullscreen_quad_rgb( texture_t texture_rgb ); -API void fullscreen_quad_rgb_flipped( texture_t texture ); -API void fullscreen_quad_ycbcr( texture_t texture_YCbCr[3] ); -API void fullscreen_quad_ycbcr_flipped( texture_t texture_YCbCr[3] ); - -// ----------------------------------------------------------------------------- -// cubemaps - -typedef struct cubemap_t { - unsigned id; // texture id - vec3 sh[9]; // precomputed spherical harmonics coefficients -} cubemap_t; - -API cubemap_t cubemap( const image_t image, int flags ); // 1 equirectangular panorama -API cubemap_t cubemap6( const image_t images[6], int flags ); // 6 cubemap faces -API void cubemap_destroy(cubemap_t *c); -API cubemap_t* cubemap_get_active(); - -// ----------------------------------------------------------------------------- -// fbos - -API unsigned fbo( unsigned texture_color, unsigned texture_depth, int wr_flags ); -API void fbo_bind(unsigned id); -API void fbo_unbind(); -API void fbo_destroy(unsigned id); - -// ----------------------------------------------------------------------------- -// shadowmaps - -// #ifndef VSMCUBE -// #define VSMCUBE 0 -// #endif -// #ifndef VSMBLUR -// #define VSMBLUR 1 -// #endif - -typedef struct shadowmap_t { - mat44 shadowmatrix; - mat44 mvp; - mat44 mv; - mat44 proj; - vec4 light_position; - int saved_fb; - int saved_viewport[4]; - handle fbo, texture; - int texture_width; -} shadowmap_t; - -API shadowmap_t shadowmap(int texture_width); // = 1024 -API void shadowmap_destroy(shadowmap_t *s); - -API void shadowmap_set_shadowmatrix(shadowmap_t *s, vec3 aLightPos, vec3 aLightAt, vec3 aLightUp, const mat44 projection); -API void shadowmap_begin(shadowmap_t *s); -API void shadowmap_end(shadowmap_t *s); - -// shadowmap utils - -API void shadowmatrix_proj(mat44 shm_proj, float aLightFov, float znear, float zfar); -API void shadowmatrix_ortho(mat44 shm_proj, float left, float right, float bottom, float top, float znear, float zfar); - -// ----------------------------------------------------------------------------- -// shaders - -API unsigned shader(const char *vs, const char *fs, const char *attribs, const char *fragcolor, const char *defines); -API unsigned shader_geom(const char *gs, const char *vs, const char *fs, const char *attribs, const char *fragcolor, const char *defines); -API unsigned shader_bind(unsigned program); -API int shader_uniform(const char *name); -API void shader_bool(const char *uniform, bool i ); -API void shader_int(const char *uniform, int i); -API void shader_uint(const char *uniform, unsigned i ); -API void shader_float(const char *uniform, float f); -API void shader_vec2(const char *uniform, vec2 v); -API void shader_vec3(const char *uniform, vec3 v); -API void shader_vec3v(const char *uniform, int count, vec3 *v); -API void shader_vec4(const char *uniform, vec4 v); -API void shader_mat44(const char *uniform, mat44 m); -API void shader_texture(const char *sampler, texture_t texture); -API void shader_texture_unit(const char *sampler, unsigned texture, unsigned unit); -API void shader_colormap(const char *name, colormap_t cm); -API unsigned shader_get_active(); -API void shader_destroy(unsigned shader); - -// reflection. [0..N] are shader properties - -API unsigned shader_properties(unsigned shader); -API char** shader_property(unsigned shader, unsigned property_no); - -API void shader_apply_param(unsigned shader, unsigned param_no); -API void shader_apply_params(unsigned shader, const char *parameter_mask); - -API int ui_shader(unsigned shader); -API int ui_shaders(); - -// compute shaders -enum BUFFER_MODE { - BUFFER_READ, - BUFFER_WRITE, - BUFFER_READ_WRITE -}; - -/// Loads the compute shader and compiles a GL program. -/// return: GL program, 0 if failed. -/// cs: shader source code -API unsigned compute(const char *cs); - -/// Runs the compute program with provided global workgroup size on x y z grid. -/// wx: global workgroup size x -/// wy: global workgroup size y -/// wz: global workgroup size z -API void compute_dispatch(unsigned wx, unsigned wy, unsigned wz); - -/// Binds a texture to the program -/// !!! Set `layer` to -1 to disable layered access. -/// t: texture to bind -/// unit: texture unit bind index -/// level: texture level access (MIP0, MIP1, ...) -/// layer: bind layer -/// access: texture access policy -/// see: BUFFER_MODE -API void shader_image(texture_t t, unsigned unit, unsigned level, int layer, unsigned access); - -/// Binds a texture to the program -/// !!! Set `layer` to -1 to disable layered access. -/// texture: GL texture handle -/// unit: texture unit bind index -/// level: texture level access (MIP0, MIP1, ...) -/// layer: bind layer -/// texel_type: image texel format (RGBA8, RGBA32F, ...) -/// access: texture access policy -/// see: BUFFER_MODE -API void shader_image_unit(unsigned texture, unsigned unit, unsigned level, int layer, unsigned texel_type, unsigned access); - -// gpu memory barriers - -/// Blocks main thread until all memory operations are done by the GPU. -API void write_barrier(); - -/// Blocks main thread until all image operations are done by the GPU. -API void write_barrier_image(); - -// ssbo -/// `STATIC`, `DYNAMIC` AND `STREAM` specify the frequency at which we intend to access the data. -/// `DRAW` favors CPU->GPU operations. -/// `READ` favors GPU->CPU operations. -/// `COPY` favors CPU->GPU->CPU operations. -enum SSBO_USAGE { - STATIC_DRAW, - STATIC_READ, - STATIC_COPY, - - DYNAMIC_DRAW, - DYNAMIC_READ, - DYNAMIC_COPY, - - STREAM_DRAW, - STREAM_READ, - STREAM_COPY -}; - -enum SSBO_ACCESS { - SSBO_READ = BUFFER_READ, - SSBO_WRITE = BUFFER_WRITE, - SSBO_READ_WRITE = BUFFER_READ_WRITE -}; - -/// Create Shader Storage Buffer Object -/// !!! `data` can be NULL -/// data: optional pointer to data to upload -/// len: buffer size, must not be 0 -/// usage: buffer usage policy -/// see: SSBO_USAGE -API unsigned ssbo_create(const void *data, int len, unsigned usage); - -/// Destroys an SSBO resource -API void ssbo_destroy(unsigned ssbo); - -/// Updates an existing SSBO -/// !!! `len` can not exceed the original buffer size specified in `ssbo_create` ! -/// offset: offset to buffer memory -/// len: amount of data to write -/// data: pointer to data we aim to write, can not be NULL -API void ssbo_update(int offset, int len, const void *data); - -/// Bind an SSBO resource to the provided bind unit index -/// ssbo: resource object -/// unit: bind unit index -API void ssbo_bind(unsigned ssbo, unsigned unit); - -/// Map an SSBO resource to the system memory -/// !!! Make sure to `ssbo_unmap` the buffer once done working with it. -/// access: buffer access policy -/// return: pointer to physical memory of the buffer -/// see: SSBO_ACCESS -API void *ssbo_map(unsigned access); - -/// Unmaps an SSBO resource -/// !!! Pointer provided by `ssbo_map` becomes invalid. -API void ssbo_unmap(); - -/// Unbinds an SSBO resource -API void ssbo_unbind(); - -// ----------------------------------------------------------------------------- -// meshes (@fixme: deprecate?) - -enum MESH_FLAGS { - MESH_STATIC = 0, // STATIC, DYNAMIC, STREAM // zero|single|many updates per frame - MESH_STREAM = 1, - MESH_TRIANGLE_STRIP = 2, -}; - -typedef struct mesh_t { - handle vao, vbo, ibo; - unsigned vertex_count; - unsigned index_count; - unsigned flags; - - array(int) lod_collapse_map; // to which neighbor each vertex collapses. ie, [10] -> 7 (used by LODs) @leak - - // @leaks: following members are totally unused. convenient for end-users to keep their custom datas somewhere while processing. - union { - array(unsigned) in_index; - array(vec3i) in_index3; - }; - union { - array(unsigned) out_index; - array(vec3i) out_index3; - }; - union { - array(float) in_vertex; - array(vec3) in_vertex3; - }; - union { - array(float) out_vertex; - array(vec3) out_vertex3; - }; -} mesh_t; - -API mesh_t mesh(); -API void mesh_update(mesh_t *m, const char *format, int vertex_stride,int vertex_count,const void *interleaved_vertex_data, int index_count,const void *index_data, int flags); -API void mesh_render(mesh_t *m); -API void mesh_render_prim(mesh_t *sm, unsigned prim); -API void mesh_destroy(mesh_t *m); -API aabb mesh_bounds(mesh_t *m); - -// ----------------------------------------------------------------------------- -// skyboxes - -enum SKYBOX_FLAGS { - SKYBOX_RAYLEIGH, - SKYBOX_CUBEMAP, - SKYBOX_PBR, -}; - -typedef struct skybox_t { - handle program; - mesh_t geometry; - cubemap_t cubemap; - int flags; - - // mie - int framebuffers[6]; - int textures[6]; - float *pixels; - - // pbr - texture_t sky, refl, env; -} skybox_t; - -API skybox_t skybox(const char *panorama_or_cubemap_folder, int flags); -API skybox_t skybox_pbr(const char *sky_map, const char *refl_map, const char *env_map); -API int skybox_render(skybox_t *sky, mat44 proj, mat44 view); -API void skybox_destroy(skybox_t *sky); -API void skybox_mie_calc_sh(skybox_t *sky, float sky_intensity); -API void skybox_sh_reset(skybox_t *sky); -API void skybox_sh_add_light(skybox_t *sky, vec3 light, vec3 dir, float strength); - -API int skybox_push_state(skybox_t *sky, mat44 proj, mat44 view); // @to deprecate -API int skybox_pop_state(); // @to deprecate - -// ----------------------------------------------------------------------------- -// materials - -enum MATERIAL_ENUMS { - MATERIAL_CHANNEL_DIFFUSE, - MATERIAL_CHANNEL_NORMALS, - MATERIAL_CHANNEL_SPECULAR, - MATERIAL_CHANNEL_ALBEDO, - MATERIAL_CHANNEL_ROUGHNESS, - MATERIAL_CHANNEL_METALLIC, - MATERIAL_CHANNEL_AO, - MATERIAL_CHANNEL_AMBIENT, - MATERIAL_CHANNEL_EMISSIVE, - - MAX_CHANNELS_PER_MATERIAL -}; - -typedef struct material_layer_t { - char texname[32]; - float value; - colormap_t map; -} material_layer_t; - -typedef struct material_t { - char *name; - material_layer_t layer[MAX_CHANNELS_PER_MATERIAL]; -} material_t; - -// ----------------------------------------------------------------------------- -// shadertoys - -enum { - SHADERTOY_FLIP_Y = 2, - SHADERTOY_IGNORE_FBO = 4, - SHADERTOY_IGNORE_MOUSE = 8, -}; - -typedef struct shadertoy_t { - handle vao, program; - int uniforms[32]; - int texture_channels[4]; - int frame; - uint64_t t; - texture_t tx; - vec2i dims; - int flags; - vec4 mouse; -} shadertoy_t; - -API shadertoy_t shadertoy( const char *shaderfile, unsigned flags ); -API shadertoy_t* shadertoy_render( shadertoy_t *s, float delta ); - -// ----------------------------------------------------------------------------- -// anims - -enum ANIM_FLAGS { - ANIM_LOOP = 1, - ANIM_DONT_RESET_AFTER_USE = 2, -}; - -typedef struct anim_t { - int from; - int to; - float blendtime; - unsigned flags; - float curframe; - - unsigned easing; - float alpha; // refreshed at every tick - float timer; // private - bool active; - - vec3 pose; // private - char* name; // debug -} anim_t; - -API anim_t clip(float minframe, float maxframe, float blendtime, unsigned flags); -API anim_t loop(float minframe, float maxframe, float blendtime, unsigned flags); -API array(anim_t) animlist(const char *filename); - -// ----------------------------------------------------------------------------- -// models - -enum MODEL_FLAGS { - MODEL_NO_ANIMATIONS = 1, - MODEL_NO_MESHES = 2, - MODEL_NO_TEXTURES = 4, - MODEL_NO_FILTERING = 8, - MODEL_MATCAPS = 16, - MODEL_RIMLIGHT = 32, - MODEL_PBR = 64, -}; - -enum SHADING_MODE { - SHADING_NONE, - SHADING_PHONG, - SHADING_PBR, -}; - -enum RENDER_PASS { - RENDER_PASS_NORMAL, - RENDER_PASS_SHADOW, - RENDER_PASS_LIGHTMAP, - - NUM_RENDER_PASSES -}; - -enum MODEL_UNIFORMS { - MODEL_UNIFORM_MV, - MODEL_UNIFORM_MVP, - MODEL_UNIFORM_VP, - MODEL_UNIFORM_CAM_POS, - MODEL_UNIFORM_CAM_DIR, - MODEL_UNIFORM_BILLBOARD, - MODEL_UNIFORM_TEXLIT, - MODEL_UNIFORM_MODEL, - MODEL_UNIFORM_VIEW, - MODEL_UNIFORM_INV_VIEW, - MODEL_UNIFORM_PROJ, - MODEL_UNIFORM_SKINNED, - MODEL_UNIFORM_VS_BONE_MATRIX, - MODEL_UNIFORM_U_MATCAPS, - MODEL_UNIFORM_RESOLUTION, - MODEL_UNIFORM_HAS_TEX_SKYSPHERE, - MODEL_UNIFORM_HAS_TEX_SKYENV, - MODEL_UNIFORM_TEX_SKYSPHERE, - MODEL_UNIFORM_SKYSPHERE_MIP_COUNT, - MODEL_UNIFORM_TEX_SKYENV, - MODEL_UNIFORM_TEX_BRDF_LUT, - MODEL_UNIFORM_FRAME_COUNT, - - NUM_MODEL_UNIFORMS -}; - - -typedef struct model_t { - struct iqm_t *iqm; // private - - int shading; // based on SHADING_MODE - unsigned num_textures; - handle *textures; - char **texture_names; - array(material_t) materials; - int uniforms[NUM_MODEL_UNIFORMS]; - - texture_t sky_refl, sky_env; - - texture_t lightmap; - float *lmdata; - - unsigned num_meshes; - unsigned num_triangles; - unsigned num_joints; // num_poses; - unsigned num_anims; - unsigned num_frames; - handle program; - float curframe; - mat44 pivot; - - int stride; // usually 68 bytes for a p3 u2 u2 n3 t4 i4B w4B c4B vertex stream - void *verts; - int num_verts; - void *tris; - int num_tris; - handle vao, ibo, vbo, vao_instanced; - - unsigned flags; - unsigned billboard; - - float *instanced_matrices; - unsigned num_instances; - - int stored_flags; - renderstate_t rs[NUM_RENDER_PASSES]; -} model_t; - -enum BILLBOARD_MODE { - BILLBOARD_X = 0x1, - BILLBOARD_Y = 0x2, - BILLBOARD_Z = 0x4, - - BILLBOARD_CYLINDRICAL = BILLBOARD_X|BILLBOARD_Z, - BILLBOARD_SPHERICAL = BILLBOARD_X|BILLBOARD_Y|BILLBOARD_Z -}; - -API model_t model(const char *filename, int flags); -API model_t model_from_mem(const void *mem, int sz, int flags); -API float model_animate(model_t, float curframe); -API float model_animate_clip(model_t, float curframe, int minframe, int maxframe, bool loop); -API float model_animate_blends(model_t m, anim_t *primary, anim_t *secondary, float delta); -API aabb model_aabb(model_t, mat44 transform); -API void model_shading(model_t*, int shading); -API void model_skybox(model_t*, skybox_t sky, bool load_sh); -API void model_render(model_t, mat44 proj, mat44 view, mat44 model, int shader); -API void model_render_skeleton(model_t, mat44 model); -API void model_render_instanced(model_t, mat44 proj, mat44 view, mat44 *models, int shader, unsigned count); -API void model_set_texture(model_t, texture_t t); -API bool model_get_bone_pose(model_t m, unsigned joint, mat34 *out); -API void model_destroy(model_t); - -API unsigned model_getpass(); -API unsigned model_setpass(unsigned pass); - -API vec3 pose(bool forward, float curframe, int minframe, int maxframe, bool loop, float *opt_retframe); - -// ----------------------------------------------------------------------------- -// model animations - -typedef struct anims_t { - int inuse; // animation number in use - float speed; // x1.00 - array(anim_t) anims; // [begin,end,flags] frames of every animation in set -} anims_t; - -API anims_t animations(const char *pathfile, int flags); - -// ----------------------------------------------------------------------------- -// lightmapping utils -// @fixme: support xatlas uv packing - -typedef struct lightmap_t { - struct lm_context *ctx; // private - bool ready; - int w, h; - int atlas_w, atlas_h; //@fixme: implement - texture_t atlas; //@fixme: implement this - array(model_t*) models; - unsigned shader; -} lightmap_t; - -API lightmap_t lightmap(int hmsize /*64*/, float near, float far, vec3 color /*1,1,1 for AO*/, int passes /*2*/, float threshold /*0.01f*/, float distmod /*0.0f*/); -API void lightmap_setup(lightmap_t *lm, int w, int h); -API void lightmap_bake(lightmap_t *lm, int bounces, void (*drawscene)(lightmap_t *lm, model_t *m, float *view, float *proj, void *userdata), void (*progressupdate)(float progress), void *userdata); -API void lightmap_destroy(lightmap_t *lm); - -// ----------------------------------------------------------------------------- -// post-fxs - -API void viewport_color(unsigned color); -API void viewport_clear(bool color, bool depth); -API void viewport_clip(vec2 from, vec2 to); - -API int fx_load(const char *file); -API int fx_load_from_mem(const char *nameid, const char *content); -API void fx_begin(); -API void fx_begin_res(int w, int h); -API void fx_end(); -API void fx_enable(int pass, int enabled); -API int fx_enabled(int pass); -API void fx_enable_all(int enabled); -API char * fx_name(int pass); -API int fx_find(const char *name); -API void fx_setparam(int pass, const char *name, float value); -API void fx_order(int pass, unsigned priority); -API unsigned fx_program(int pass); - -API int ui_fx(int pass); -API int ui_fxs(); - -// ----------------------------------------------------------------------------- -// utils - -API void* screenshot(int components); // 3 RGB, 4 RGBA, -3 BGR, -4 BGRA -API void* screenshot_async(int components); // 3 RGB, 4 RGBA, -3 BGR, -4 BGRA +// ----------------------------------------------------------------------------- +// naive rendering framework +// - rlyeh, public domain +// +// IQM skeletal meshes by @lsalzman (public domain) - https://bit.ly/2OQh0Me +// SH code by @ands (public domain) - https://github.com/ands/spherical_harmonics_playground +// SHM code by @jarikomppa (unlicensed) - https://github.com/jarikomppa/shadertoolkit + +typedef unsigned handle; // GLuint + +// ----------------------------------------------------------------------------- +// renderstate +typedef struct renderstate_t { + // Clear color + float clear_color[4]; + + // Color mask + bool color_mask[4]; + + // Clear depth + double clear_depth; + + // Depth test + bool depth_test_enabled; + bool depth_write_enabled; + unsigned depth_func; + + // Polygon offset + bool polygon_offset_enabled; + float polygon_offset; + float polygon_offset_factor; + + // Blending + bool blend_enabled; + unsigned blend_func; + unsigned blend_src; + unsigned blend_dst; + + // Culling + bool cull_face_enabled; + unsigned cull_face_mode; + + // Stencil test + bool stencil_test_enabled; + unsigned stencil_func; + unsigned stencil_op_fail, stencil_op_zfail, stencil_op_zpass; + int stencil_ref; + unsigned stencil_read_mask; + unsigned stencil_write_mask; + + // Face culling direction + unsigned front_face; // GL_CW or GL_CCW + + // Line width + bool line_smooth_enabled; + float line_width; + + // Point size + bool point_size_enabled; + float point_size; + + // Polygon mode + unsigned polygon_mode_face; + unsigned polygon_mode_draw; + + // Scissor test + bool scissor_test_enabled; +} renderstate_t; + +API renderstate_t renderstate(); +API bool renderstate_compare(const renderstate_t *stateA, const renderstate_t *stateB); +API void renderstate_apply(const renderstate_t *state); + +// ----------------------------------------------------------------------------- +// colors + +API unsigned rgba( uint8_t r, uint8_t g, uint8_t b, uint8_t a ); +API unsigned bgra( uint8_t b, uint8_t g, uint8_t r, uint8_t a ); +API unsigned rgbaf( float r, float g, float b, float a ); +API unsigned bgraf( float b, float g, float r, float a ); +API unsigned alpha( unsigned rgba ); + +#define RGBX(rgb,x) ( ((rgb)&0xFFFFFF) | (((unsigned)(x))<<24) ) +#define RGB3(r,g,b) ( (255<<24) | ((b)<<16) | ((g)<<8) | (r) ) +#define RGB4(r,g,b,a) ( ((a)<<24) | ((b)<<16) | ((g)<<8) | (r) ) + +#define BLACK RGBX(0x000000,255) +#define WHITE RGBX(0xE8F1FF,255) + +#define RED RGB3( 255, 0,48 ) +#define GREEN RGB3( 144,255,48 ) +#define CYAN RGB3( 0,192,255 ) +#define ORANGE RGB3( 255,144,48 ) +#define PURPLE RGB3( 102,77,102 ) // 178,128,255 ) +#define YELLOW RGB3( 255,224,0 ) +#define GRAY RGB3( 32,32,32 ) // dark gray +#define SILVER RGB3( 149,149,149 ) // dark white, gray-ish +#define PINK RGB3( 255,48,144 ) +#define AQUA RGB3( 48,255,144 ) + +#define BLUE RGBX(0xB55A06,255) + +API unsigned atorgba(const char *s); +API char * rgbatoa(unsigned rgba); + +// ----------------------------------------------------------------------------- +// images + +/// flags when constructing the image_t type. see: image, image_from_mem +/// IMAGE_R: 1-channel image (R) +/// IMAGE_RG: 2-channel image (R,G) +/// IMAGE_RGB: 3-channel image (R,G,B) +/// IMAGE_RGBA: 4-channel image (R,G,B,A) +/// IMAGE_FLIP: Flip image vertically +/// IMAGE_FLOAT: Float pixel components +enum IMAGE_FLAGS { + IMAGE_R = 0x01000, + IMAGE_RG = 0x02000, + IMAGE_RGB = 0x04000, + IMAGE_RGBA = 0x08000, + IMAGE_FLIP = 0x10000, + IMAGE_FLOAT = 0x20000, +}; + +/// type that holds linear uncompressed bitmap of any given dimensions. +/// w,h: image dimensions in pixels. `x,y` alias. +/// comps: number of components per pixel. `n` alias. +/// pixels: untyped pointer to linear bitmap data. typed pointers use `pixels8/16/32/f` aliases. +/// see: texture_t +typedef struct image_t { + union { unsigned x, w; }; + union { unsigned y, h; }; + union { unsigned n, comps; }; + union { void *pixels; uint8_t *pixels8; uint16_t *pixels16; uint32_t *pixels32; float *pixelsf; }; +} image_t; + +API image_t image(const char *pathfile, int flags); +API image_t image_from_mem(const void *ptr, int len, int flags); +API void image_destroy(image_t *img); + +// ----------------------------------------------------------------------------- +// textures + +enum TEXTURE_FLAGS { + // UNIT[0..7] + + TEXTURE_BC1 = 8, // DXT1, RGB with 8:1 compression ratio (+ optional 1bpp for alpha) + TEXTURE_BC2 = 16, // DXT3, RGBA with 4:1 compression ratio (BC1 for RGB + 4bpp for alpha) + TEXTURE_BC3 = 32, // DXT5, RGBA with 4:1 compression ratio (BC1 for RGB + BC4 for A) +// TEXTURE_BC4, // Alpha + + TEXTURE_NEAREST = 0, + TEXTURE_LINEAR = 64, + TEXTURE_MIPMAPS = 128, + TEXTURE_ANISOTROPY = 1 << 30, + + TEXTURE_CLAMP = 0, + TEXTURE_BORDER = 0x100, + TEXTURE_REPEAT = 0x200, + + TEXTURE_BYTE = 0, + TEXTURE_FLOAT = IMAGE_FLOAT, + + TEXTURE_COLOR = 0, + TEXTURE_DEPTH = 0x800, + + TEXTURE_R = IMAGE_R, + TEXTURE_RG = IMAGE_RG, + TEXTURE_RGB = IMAGE_RGB, + TEXTURE_RGBA = IMAGE_RGBA, + TEXTURE_FLIP = IMAGE_FLIP, + + // @fixme + TEXTURE_SRGB = 1 << 24, + TEXTURE_BGR = 1 << 25, + TEXTURE_BGRA = TEXTURE_BGR, + TEXTURE_ARRAY = 1 << 26, +}; + +typedef struct texture_t { + union { unsigned x, w; }; + union { unsigned y, h; }; + union { unsigned z, d; }; + union { unsigned n, bpp; }; + handle id; + unsigned texel_type; + unsigned flags; + char* filename; + bool transparent; + unsigned fbo; // for texture recording + union { unsigned userdata, delay; }; +} texture_t; + +API texture_t texture_compressed(const char *filename, unsigned flags); +API texture_t texture_compressed_from_mem(const void *data, int len, unsigned flags); + +API texture_t texture(const char* filename, int flags); +API texture_t texture_from_mem(const void* ptr, int len, int flags); +API texture_t texture_create(unsigned w, unsigned h, unsigned n, const void *pixels, int flags); +API texture_t texture_checker(); +API void texture_destroy(texture_t *t); +API int texture_unit(); // returns rolling counter up to GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS +// textureLod(filename, dir, lod); +// void texture_add_loader( int(*loader)(const char *filename, int *w, int *h, int *bpp, int reqbpp, int flags) ); +API unsigned texture_update(texture_t *t, unsigned w, unsigned h, unsigned n, const void *pixels, int flags); + +API bool texture_rec_begin(texture_t *t, unsigned w, unsigned h); // texture_rec +API void texture_rec_end(texture_t *t); // texture_rec + +// ----------------------------------------------------------------------------- +// brdf + +API texture_t brdf_lut(); + +// ----------------------------------------------------------------------------- +// colormap + +typedef struct colormap_t { + vec4 color; + texture_t *texture; +} colormap_t; + +API bool colormap( colormap_t *cm, const char *texture_name, bool load_as_srgb ); + +// ----------------------------------------------------------------------------- +// fullscreen quads + +API void fullscreen_quad_rgb( texture_t texture_rgb ); +API void fullscreen_quad_rgb_flipped( texture_t texture ); +API void fullscreen_quad_ycbcr( texture_t texture_YCbCr[3] ); +API void fullscreen_quad_ycbcr_flipped( texture_t texture_YCbCr[3] ); + +// ----------------------------------------------------------------------------- +// cubemaps + +typedef struct cubemap_t { + unsigned id; // texture id + vec3 sh[9]; // precomputed spherical harmonics coefficients +} cubemap_t; + +API cubemap_t cubemap( const image_t image, int flags ); // 1 equirectangular panorama +API cubemap_t cubemap6( const image_t images[6], int flags ); // 6 cubemap faces +API void cubemap_destroy(cubemap_t *c); +API cubemap_t* cubemap_get_active(); + +// ----------------------------------------------------------------------------- +// fbos + +API unsigned fbo( unsigned texture_color, unsigned texture_depth, int wr_flags ); +API void fbo_bind(unsigned id); +API void fbo_unbind(); +API void fbo_destroy(unsigned id); + +// ----------------------------------------------------------------------------- +// shadowmaps + +// #ifndef VSMCUBE +// #define VSMCUBE 0 +// #endif +// #ifndef VSMBLUR +// #define VSMBLUR 1 +// #endif + +typedef struct shadowmap_t { + mat44 shadowmatrix; + mat44 mvp; + mat44 mv; + mat44 proj; + vec4 light_position; + int saved_fb; + int saved_viewport[4]; + handle fbo, texture; + int texture_width; +} shadowmap_t; + +API shadowmap_t shadowmap(int texture_width); // = 1024 +API void shadowmap_destroy(shadowmap_t *s); + +API void shadowmap_set_shadowmatrix(shadowmap_t *s, vec3 aLightPos, vec3 aLightAt, vec3 aLightUp, const mat44 projection); +API void shadowmap_begin(shadowmap_t *s); +API void shadowmap_end(shadowmap_t *s); + +// shadowmap utils + +API void shadowmatrix_proj(mat44 shm_proj, float aLightFov, float znear, float zfar); +API void shadowmatrix_ortho(mat44 shm_proj, float left, float right, float bottom, float top, float znear, float zfar); + +// ----------------------------------------------------------------------------- +// shaders + +API unsigned shader(const char *vs, const char *fs, const char *attribs, const char *fragcolor, const char *defines); +API unsigned shader_geom(const char *gs, const char *vs, const char *fs, const char *attribs, const char *fragcolor, const char *defines); +API unsigned shader_bind(unsigned program); +API int shader_uniform(const char *name); +API void shader_bool(const char *uniform, bool i ); +API void shader_int(const char *uniform, int i); +API void shader_uint(const char *uniform, unsigned i ); +API void shader_float(const char *uniform, float f); +API void shader_vec2(const char *uniform, vec2 v); +API void shader_vec3(const char *uniform, vec3 v); +API void shader_vec3v(const char *uniform, int count, vec3 *v); +API void shader_vec4(const char *uniform, vec4 v); +API void shader_mat44(const char *uniform, mat44 m); +API void shader_texture(const char *sampler, texture_t texture); +API void shader_texture_unit(const char *sampler, unsigned texture, unsigned unit); +API void shader_colormap(const char *name, colormap_t cm); +API unsigned shader_get_active(); +API void shader_destroy(unsigned shader); + +// reflection. [0..N] are shader properties + +API unsigned shader_properties(unsigned shader); +API char** shader_property(unsigned shader, unsigned property_no); + +API void shader_apply_param(unsigned shader, unsigned param_no); +API void shader_apply_params(unsigned shader, const char *parameter_mask); + +API int ui_shader(unsigned shader); +API int ui_shaders(); + +// compute shaders +enum BUFFER_MODE { + BUFFER_READ, + BUFFER_WRITE, + BUFFER_READ_WRITE +}; + +/// Loads the compute shader and compiles a GL program. +/// return: GL program, 0 if failed. +/// cs: shader source code +API unsigned compute(const char *cs); + +/// Runs the compute program with provided global workgroup size on x y z grid. +/// wx: global workgroup size x +/// wy: global workgroup size y +/// wz: global workgroup size z +API void compute_dispatch(unsigned wx, unsigned wy, unsigned wz); + +/// Binds a texture to the program +/// !!! Set `layer` to -1 to disable layered access. +/// t: texture to bind +/// unit: texture unit bind index +/// level: texture level access (MIP0, MIP1, ...) +/// layer: bind layer +/// access: texture access policy +/// see: BUFFER_MODE +API void shader_image(texture_t t, unsigned unit, unsigned level, int layer, unsigned access); + +/// Binds a texture to the program +/// !!! Set `layer` to -1 to disable layered access. +/// texture: GL texture handle +/// unit: texture unit bind index +/// level: texture level access (MIP0, MIP1, ...) +/// layer: bind layer +/// texel_type: image texel format (RGBA8, RGBA32F, ...) +/// access: texture access policy +/// see: BUFFER_MODE +API void shader_image_unit(unsigned texture, unsigned unit, unsigned level, int layer, unsigned texel_type, unsigned access); + +// gpu memory barriers + +/// Blocks main thread until all memory operations are done by the GPU. +API void write_barrier(); + +/// Blocks main thread until all image operations are done by the GPU. +API void write_barrier_image(); + +// ssbo +/// `STATIC`, `DYNAMIC` AND `STREAM` specify the frequency at which we intend to access the data. +/// `DRAW` favors CPU->GPU operations. +/// `READ` favors GPU->CPU operations. +/// `COPY` favors CPU->GPU->CPU operations. +enum SSBO_USAGE { + STATIC_DRAW, + STATIC_READ, + STATIC_COPY, + + DYNAMIC_DRAW, + DYNAMIC_READ, + DYNAMIC_COPY, + + STREAM_DRAW, + STREAM_READ, + STREAM_COPY +}; + +enum SSBO_ACCESS { + SSBO_READ = BUFFER_READ, + SSBO_WRITE = BUFFER_WRITE, + SSBO_READ_WRITE = BUFFER_READ_WRITE +}; + +/// Create Shader Storage Buffer Object +/// !!! `data` can be NULL +/// data: optional pointer to data to upload +/// len: buffer size, must not be 0 +/// usage: buffer usage policy +/// see: SSBO_USAGE +API unsigned ssbo_create(const void *data, int len, unsigned usage); + +/// Destroys an SSBO resource +API void ssbo_destroy(unsigned ssbo); + +/// Updates an existing SSBO +/// !!! `len` can not exceed the original buffer size specified in `ssbo_create` ! +/// offset: offset to buffer memory +/// len: amount of data to write +/// data: pointer to data we aim to write, can not be NULL +API void ssbo_update(int offset, int len, const void *data); + +/// Bind an SSBO resource to the provided bind unit index +/// ssbo: resource object +/// unit: bind unit index +API void ssbo_bind(unsigned ssbo, unsigned unit); + +/// Map an SSBO resource to the system memory +/// !!! Make sure to `ssbo_unmap` the buffer once done working with it. +/// access: buffer access policy +/// return: pointer to physical memory of the buffer +/// see: SSBO_ACCESS +API void *ssbo_map(unsigned access); + +/// Unmaps an SSBO resource +/// !!! Pointer provided by `ssbo_map` becomes invalid. +API void ssbo_unmap(); + +/// Unbinds an SSBO resource +API void ssbo_unbind(); + +// ----------------------------------------------------------------------------- +// meshes (@fixme: deprecate?) + +enum MESH_FLAGS { + MESH_STATIC = 0, // STATIC, DYNAMIC, STREAM // zero|single|many updates per frame + MESH_STREAM = 1, + MESH_TRIANGLE_STRIP = 2, +}; + +typedef struct mesh_t { + handle vao, vbo, ibo; + unsigned vertex_count; + unsigned index_count; + unsigned flags; + + array(int) lod_collapse_map; // to which neighbor each vertex collapses. ie, [10] -> 7 (used by LODs) @leak + + // @leaks: following members are totally unused. convenient for end-users to keep their custom datas somewhere while processing. + union { + array(unsigned) in_index; + array(vec3i) in_index3; + }; + union { + array(unsigned) out_index; + array(vec3i) out_index3; + }; + union { + array(float) in_vertex; + array(vec3) in_vertex3; + }; + union { + array(float) out_vertex; + array(vec3) out_vertex3; + }; +} mesh_t; + +API mesh_t mesh(); +API void mesh_update(mesh_t *m, const char *format, int vertex_stride,int vertex_count,const void *interleaved_vertex_data, int index_count,const void *index_data, int flags); +API void mesh_render(mesh_t *m); +API void mesh_render_prim(mesh_t *sm, unsigned prim); +API void mesh_destroy(mesh_t *m); +API aabb mesh_bounds(mesh_t *m); + +// ----------------------------------------------------------------------------- +// skyboxes + +enum SKYBOX_FLAGS { + SKYBOX_RAYLEIGH, + SKYBOX_CUBEMAP, + SKYBOX_PBR, +}; + +typedef struct skybox_t { + handle program; + mesh_t geometry; + cubemap_t cubemap; + int flags; + + // mie + int framebuffers[6]; + int textures[6]; + float *pixels; + + // pbr + texture_t sky, refl, env; +} skybox_t; + +API skybox_t skybox(const char *panorama_or_cubemap_folder, int flags); +API skybox_t skybox_pbr(const char *sky_map, const char *refl_map, const char *env_map); +API int skybox_render(skybox_t *sky, mat44 proj, mat44 view); +API void skybox_destroy(skybox_t *sky); +API void skybox_mie_calc_sh(skybox_t *sky, float sky_intensity); +API void skybox_sh_reset(skybox_t *sky); +API void skybox_sh_add_light(skybox_t *sky, vec3 light, vec3 dir, float strength); + +API int skybox_push_state(skybox_t *sky, mat44 proj, mat44 view); // @to deprecate +API int skybox_pop_state(); // @to deprecate + +// ----------------------------------------------------------------------------- +// materials + +enum MATERIAL_ENUMS { + MATERIAL_CHANNEL_DIFFUSE, + MATERIAL_CHANNEL_NORMALS, + MATERIAL_CHANNEL_SPECULAR, + MATERIAL_CHANNEL_ALBEDO, + MATERIAL_CHANNEL_ROUGHNESS, + MATERIAL_CHANNEL_METALLIC, + MATERIAL_CHANNEL_AO, + MATERIAL_CHANNEL_AMBIENT, + MATERIAL_CHANNEL_EMISSIVE, + + MAX_CHANNELS_PER_MATERIAL +}; + +typedef struct material_layer_t { + char texname[32]; + float value; + colormap_t map; +} material_layer_t; + +typedef struct material_t { + char *name; + material_layer_t layer[MAX_CHANNELS_PER_MATERIAL]; +} material_t; + +// ----------------------------------------------------------------------------- +// shadertoys + +enum { + SHADERTOY_FLIP_Y = 2, + SHADERTOY_IGNORE_FBO = 4, + SHADERTOY_IGNORE_MOUSE = 8, +}; + +typedef struct shadertoy_t { + handle vao, program; + int uniforms[32]; + int texture_channels[4]; + int frame; + uint64_t t; + texture_t tx; + vec2i dims; + int flags; + vec4 mouse; +} shadertoy_t; + +API shadertoy_t shadertoy( const char *shaderfile, unsigned flags ); +API shadertoy_t* shadertoy_render( shadertoy_t *s, float delta ); + +// ----------------------------------------------------------------------------- +// anims + +enum ANIM_FLAGS { + ANIM_LOOP = 1, + ANIM_DONT_RESET_AFTER_USE = 2, +}; + +typedef struct anim_t { + int from; + int to; + float blendtime; + unsigned flags; + float curframe; + + unsigned easing; + float alpha; // refreshed at every tick + float timer; // private + bool active; + + vec3 pose; // private + char* name; // debug +} anim_t; + +API anim_t clip(float minframe, float maxframe, float blendtime, unsigned flags); +API anim_t loop(float minframe, float maxframe, float blendtime, unsigned flags); +API array(anim_t) animlist(const char *filename); + +// ----------------------------------------------------------------------------- +// models + +enum MODEL_FLAGS { + MODEL_NO_ANIMATIONS = 1, + MODEL_NO_MESHES = 2, + MODEL_NO_TEXTURES = 4, + MODEL_NO_FILTERING = 8, + MODEL_MATCAPS = 16, + MODEL_RIMLIGHT = 32, + MODEL_PBR = 64, +}; + +enum SHADING_MODE { + SHADING_NONE, + SHADING_PHONG, + SHADING_PBR, +}; + +enum RENDER_PASS { + RENDER_PASS_NORMAL, + RENDER_PASS_SHADOW, + RENDER_PASS_LIGHTMAP, + + NUM_RENDER_PASSES +}; + +enum MODEL_UNIFORMS { + MODEL_UNIFORM_MV, + MODEL_UNIFORM_MVP, + MODEL_UNIFORM_VP, + MODEL_UNIFORM_CAM_POS, + MODEL_UNIFORM_CAM_DIR, + MODEL_UNIFORM_BILLBOARD, + MODEL_UNIFORM_TEXLIT, + MODEL_UNIFORM_MODEL, + MODEL_UNIFORM_VIEW, + MODEL_UNIFORM_INV_VIEW, + MODEL_UNIFORM_PROJ, + MODEL_UNIFORM_SKINNED, + MODEL_UNIFORM_VS_BONE_MATRIX, + MODEL_UNIFORM_U_MATCAPS, + MODEL_UNIFORM_RESOLUTION, + MODEL_UNIFORM_HAS_TEX_SKYSPHERE, + MODEL_UNIFORM_HAS_TEX_SKYENV, + MODEL_UNIFORM_TEX_SKYSPHERE, + MODEL_UNIFORM_SKYSPHERE_MIP_COUNT, + MODEL_UNIFORM_TEX_SKYENV, + MODEL_UNIFORM_TEX_BRDF_LUT, + MODEL_UNIFORM_FRAME_COUNT, + + NUM_MODEL_UNIFORMS +}; + + +typedef struct model_t { + struct iqm_t *iqm; // private + + int shading; // based on SHADING_MODE + unsigned num_textures; + handle *textures; + char **texture_names; + array(material_t) materials; + int uniforms[NUM_MODEL_UNIFORMS]; + + texture_t sky_refl, sky_env; + + texture_t lightmap; + float *lmdata; + + unsigned num_meshes; + unsigned num_triangles; + unsigned num_joints; // num_poses; + unsigned num_anims; + unsigned num_frames; + handle program; + float curframe; + mat44 pivot; + + int stride; // usually 68 bytes for a p3 u2 u2 n3 t4 i4B w4B c4B vertex stream + void *verts; + int num_verts; + void *tris; + int num_tris; + handle vao, ibo, vbo, vao_instanced; + + unsigned flags; + unsigned billboard; + + float *instanced_matrices; + unsigned num_instances; + + int stored_flags; + renderstate_t rs[NUM_RENDER_PASSES]; +} model_t; + +enum BILLBOARD_MODE { + BILLBOARD_X = 0x1, + BILLBOARD_Y = 0x2, + BILLBOARD_Z = 0x4, + + BILLBOARD_CYLINDRICAL = BILLBOARD_X|BILLBOARD_Z, + BILLBOARD_SPHERICAL = BILLBOARD_X|BILLBOARD_Y|BILLBOARD_Z +}; + +API model_t model(const char *filename, int flags); +API model_t model_from_mem(const void *mem, int sz, int flags); +API float model_animate(model_t, float curframe); +API float model_animate_clip(model_t, float curframe, int minframe, int maxframe, bool loop); +API float model_animate_blends(model_t m, anim_t *primary, anim_t *secondary, float delta); +API aabb model_aabb(model_t, mat44 transform); +API void model_shading(model_t*, int shading); +API void model_skybox(model_t*, skybox_t sky, bool load_sh); +API void model_render(model_t, mat44 proj, mat44 view, mat44 model, int shader); +API void model_render_skeleton(model_t, mat44 model); +API void model_render_instanced(model_t, mat44 proj, mat44 view, mat44 *models, int shader, unsigned count); +API void model_set_texture(model_t, texture_t t); +API bool model_get_bone_pose(model_t m, unsigned joint, mat34 *out); +API void model_destroy(model_t); + +API unsigned model_getpass(); +API unsigned model_setpass(unsigned pass); + +API vec3 pose(bool forward, float curframe, int minframe, int maxframe, bool loop, float *opt_retframe); + +// ----------------------------------------------------------------------------- +// model animations + +typedef struct anims_t { + int inuse; // animation number in use + float speed; // x1.00 + array(anim_t) anims; // [begin,end,flags] frames of every animation in set +} anims_t; + +API anims_t animations(const char *pathfile, int flags); + +// ----------------------------------------------------------------------------- +// lightmapping utils +// @fixme: support xatlas uv packing + +typedef struct lightmap_t { + struct lm_context *ctx; // private + bool ready; + int w, h; + int atlas_w, atlas_h; //@fixme: implement + texture_t atlas; //@fixme: implement this + array(model_t*) models; + unsigned shader; +} lightmap_t; + +API lightmap_t lightmap(int hmsize /*64*/, float near, float far, vec3 color /*1,1,1 for AO*/, int passes /*2*/, float threshold /*0.01f*/, float distmod /*0.0f*/); +API void lightmap_setup(lightmap_t *lm, int w, int h); +API void lightmap_bake(lightmap_t *lm, int bounces, void (*drawscene)(lightmap_t *lm, model_t *m, float *view, float *proj, void *userdata), void (*progressupdate)(float progress), void *userdata); +API void lightmap_destroy(lightmap_t *lm); + +// ----------------------------------------------------------------------------- +// post-fxs + +API void viewport_color(unsigned color); +API void viewport_clear(bool color, bool depth); +API void viewport_clip(vec2 from, vec2 to); + +API int fx_load(const char *file); +API int fx_load_from_mem(const char *nameid, const char *content); +API void fx_begin(); +API void fx_begin_res(int w, int h); +API void fx_end(); +API void fx_enable(int pass, int enabled); +API int fx_enabled(int pass); +API void fx_enable_all(int enabled); +API char * fx_name(int pass); +API int fx_find(const char *name); +API void fx_setparam(int pass, const char *name, float value); +API void fx_order(int pass, unsigned priority); +API unsigned fx_program(int pass); + +API int ui_fx(int pass); +API int ui_fxs(); + +// ----------------------------------------------------------------------------- +// utils + +API void* screenshot(int components); // 3 RGB, 4 RGBA, -3 BGR, -4 BGRA +API void* screenshot_async(int components); // 3 RGB, 4 RGBA, -3 BGR, -4 BGRA #line 0 #line 1 "v4k_renderdd.h" -// ----------------------------------------------------------------------------- -// debugdraw framework -// - rlyeh, public domain. -// -// Credits: Based on work by @glampert https://github.com/glampert/debug-draw (PD) -// [x] grid, axis, frustum, cube, sphere, triangle, square, pentagon, hexagon, circle, normal. -// [x] arrow, point, text, capsule, aabb, plane, flotilla-style locator, boid, bone, ring -// [x] line batching -// [*] line width and stipple -// [*] (proper) gizmo, -// [ ] camera, light bulb, light probe, - -API void ddraw_line_width(float width); -API void ddraw_color(unsigned rgb); -API void ddraw_color_push(unsigned rgb); -API void ddraw_color_pop(); -// -API void ddraw_ontop(int enabled); -API void ddraw_ontop_push(int enabled); -API void ddraw_ontop_pop(); -// -API void ddraw_push_2d(); -API void ddraw_pop_2d(); -// -API void ddraw_aabb(vec3 minbb, vec3 maxbb); -API void ddraw_aabb_corners(vec3 minbb, vec3 maxbb); -API void ddraw_arrow(vec3 begin, vec3 end); -API void ddraw_axis(float units); -API void ddraw_boid(vec3 pos, vec3 dir); -API void ddraw_bone(vec3 center, vec3 end); // @todo: use me -API void ddraw_bounds(const vec3 points[8]); -API void ddraw_box(vec3 center, vec3 extents); -API void ddraw_capsule(vec3 from, vec3 to, float radius); -API void ddraw_circle(vec3 pos, vec3 n, float radius); -API void ddraw_ring(vec3 pos, vec3 n, float radius); -API void ddraw_cone(vec3 center, vec3 top, float radius); -API void ddraw_cube(vec3 center, float radius); -API void ddraw_cube33(vec3 center, vec3 radius, mat33 M); -API void ddraw_diamond(vec3 from, vec3 to, float size); -API void ddraw_frustum(float projview[16]); -API void ddraw_ground(float scale); -API void ddraw_grid(float scale); -API void ddraw_hexagon(vec3 pos, float radius); -API void ddraw_line(vec3 from, vec3 to); -API void ddraw_line_dashed(vec3 from, vec3 to); -API void ddraw_line_thin(vec3 from, vec3 to); -API void ddraw_normal(vec3 pos, vec3 n); -API void ddraw_pentagon(vec3 pos, float radius); -API void ddraw_plane(vec3 p, vec3 n, float scale); -API void ddraw_point(vec3 from); -API void ddraw_position(vec3 pos, float radius); -API void ddraw_position_dir(vec3 pos, vec3 dir, float radius); -API void ddraw_pyramid(vec3 center, float height, int segments); -API void ddraw_cylinder(vec3 center, float height, int segments); -API void ddraw_sphere(vec3 pos, float radius); -API void ddraw_square(vec3 pos, float radius); -API void ddraw_text(vec3 pos, float scale, const char *text); -API void ddraw_text2d(vec2 pos, const char *text); -API void ddraw_triangle(vec3 p1, vec3 p2, vec3 p3); -// -API void ddraw_prism(vec3 center, float radius, float height, vec3 normal, int segments); -// -API void ddraw_demo(); -API void ddraw_flush(); -API void ddraw_flush_projview(mat44 proj, mat44 view); - -// transform gizmos - -API int gizmo(vec3 *pos, vec3 *rot, vec3 *sca); -API bool gizmo_active(); -API bool gizmo_hover(); +// ----------------------------------------------------------------------------- +// debugdraw framework +// - rlyeh, public domain. +// +// Credits: Based on work by @glampert https://github.com/glampert/debug-draw (PD) +// [x] grid, axis, frustum, cube, sphere, triangle, square, pentagon, hexagon, circle, normal. +// [x] arrow, point, text, capsule, aabb, plane, flotilla-style locator, boid, bone, ring +// [x] line batching +// [*] line width and stipple +// [*] (proper) gizmo, +// [ ] camera, light bulb, light probe, + +API void ddraw_line_width(float width); +API void ddraw_color(unsigned rgb); +API void ddraw_color_push(unsigned rgb); +API void ddraw_color_pop(); +// +API void ddraw_ontop(int enabled); +API void ddraw_ontop_push(int enabled); +API void ddraw_ontop_pop(); +// +API void ddraw_push_2d(); +API void ddraw_pop_2d(); +// +API void ddraw_aabb(vec3 minbb, vec3 maxbb); +API void ddraw_aabb_corners(vec3 minbb, vec3 maxbb); +API void ddraw_arrow(vec3 begin, vec3 end); +API void ddraw_axis(float units); +API void ddraw_boid(vec3 pos, vec3 dir); +API void ddraw_bone(vec3 center, vec3 end); // @todo: use me +API void ddraw_bounds(const vec3 points[8]); +API void ddraw_box(vec3 center, vec3 extents); +API void ddraw_capsule(vec3 from, vec3 to, float radius); +API void ddraw_circle(vec3 pos, vec3 n, float radius); +API void ddraw_ring(vec3 pos, vec3 n, float radius); +API void ddraw_cone(vec3 center, vec3 top, float radius); +API void ddraw_cube(vec3 center, float radius); +API void ddraw_cube33(vec3 center, vec3 radius, mat33 M); +API void ddraw_diamond(vec3 from, vec3 to, float size); +API void ddraw_frustum(float projview[16]); +API void ddraw_ground(float scale); +API void ddraw_grid(float scale); +API void ddraw_hexagon(vec3 pos, float radius); +API void ddraw_line(vec3 from, vec3 to); +API void ddraw_line_dashed(vec3 from, vec3 to); +API void ddraw_line_thin(vec3 from, vec3 to); +API void ddraw_normal(vec3 pos, vec3 n); +API void ddraw_pentagon(vec3 pos, float radius); +API void ddraw_plane(vec3 p, vec3 n, float scale); +API void ddraw_point(vec3 from); +API void ddraw_position(vec3 pos, float radius); +API void ddraw_position_dir(vec3 pos, vec3 dir, float radius); +API void ddraw_pyramid(vec3 center, float height, int segments); +API void ddraw_cylinder(vec3 center, float height, int segments); +API void ddraw_sphere(vec3 pos, float radius); +API void ddraw_square(vec3 pos, float radius); +API void ddraw_text(vec3 pos, float scale, const char *text); +API void ddraw_text2d(vec2 pos, const char *text); +API void ddraw_triangle(vec3 p1, vec3 p2, vec3 p3); +// +API void ddraw_prism(vec3 center, float radius, float height, vec3 normal, int segments); +// +API void ddraw_demo(); +API void ddraw_flush(); +API void ddraw_flush_projview(mat44 proj, mat44 view); + +// transform gizmos + +API int gizmo(vec3 *pos, vec3 *rot, vec3 *sca); +API bool gizmo_active(); +API bool gizmo_hover(); #line 0 #line 1 "v4k_scene.h" -// ----------------------------------------------------------------------------- -// scene framework -// - rlyeh, public domain - -// camera - -typedef struct camera_t { - mat44 view, proj; - vec3 position, updir, lookdir; - float yaw, pitch, roll; // mirror of (x,y) lookdir in deg; - float speed, fov; // fov in deg(45) - - float move_friction, move_damping; - float look_friction, look_damping; - vec3 last_look; vec3 last_move; // used for friction and damping - bool damping; - - bool orthographic; // 0 perspective, 1 orthographic; when ortho: dimetric[if pitch == -30º], isometric[if pitch == 35.264º] - float distance; // distance to pivot, when orbiting - // vec2 polarity = { +1,-1 }; // @todo - // vec2 sensitivity = { 2,2 }; // @todo -} camera_t; - -API camera_t camera(); -API void camera_teleport(camera_t *cam, vec3 pos); -API void camera_moveby(camera_t *cam, vec3 inc); -API void camera_fov(camera_t *cam, float fov); -API void camera_fps(camera_t *cam, float yaw, float pitch); -API void camera_fps2(camera_t *cam, float yaw, float pitch, float roll); -API void camera_orbit(camera_t *cam, float yaw, float pitch, float inc_distance); -API void camera_lookat(camera_t *cam, vec3 target); -API void camera_enable(camera_t *cam); -API camera_t *camera_get_active(); - -API int ui_camera(camera_t *cam); -API void ddraw_camera(camera_t *cam); - -// object - -typedef struct object_t { - uint64_t renderbucket; - mat44 transform; - quat rot; - vec3 sca, pos, euler, pivot; - array(handle) textures; - model_t model; - anim_t anim; - float anim_speed; - aabb bounds; - unsigned billboard; // [0..7] x(4),y(2),z(1) masks - bool light_cached; //< used by scene to update light data -} object_t; - -API object_t object(); -API void object_rotate(object_t *obj, vec3 euler); -API void object_pivot(object_t *obj, vec3 euler); -API void object_teleport(object_t *obj, vec3 pos); -API void object_move(object_t *obj, vec3 inc); -API vec3 object_position(object_t *obj); -API void object_scale(object_t *obj, vec3 sca); -// -API void object_model(object_t *obj, model_t model); -API void object_anim(object_t *obj, anim_t anim, float speed); -API void object_diffuse(object_t *obj, texture_t tex); -API void object_diffuse_push(object_t *obj, texture_t tex); -API void object_diffuse_pop(object_t *obj); -API void object_billboard(object_t *obj, unsigned mode); - -// object_pose(transform); // @todo - - -// light -enum LIGHT_TYPE { - LIGHT_DIRECTIONAL, - LIGHT_POINT, - LIGHT_SPOT, -}; - -enum LIGHT_FLAGS { - LIGHT_CAST_SHADOWS = 1, -}; - -typedef struct light_t { - char type; - vec3 diffuse, specular, ambient; - vec3 pos, dir; - struct { - float constant, linear, quadratic; - } falloff; - float specularPower; - float innerCone, outerCone; - //@todo: cookie, flare - - // internals - bool cached; //< used by scene to invalidate cached light data -} light_t; - -API light_t light(); -// API void light_flags(int flags); -API void light_type(light_t* l, char type); -API void light_diffuse(light_t* l, vec3 color); -API void light_specular(light_t* l, vec3 color); -API void light_ambient(light_t* l, vec3 color); -API void light_teleport(light_t* l, vec3 pos); -API void light_dir(light_t* l, vec3 dir); -API void light_power(light_t* l, float power); -API void light_falloff(light_t* l, float constant, float linear, float quadratic); -API void light_cone(light_t* l, float innerCone, float outerCone); -API void light_update(unsigned num_lights, light_t *lv); - -// scene - -enum SCENE_FLAGS { - SCENE_WIREFRAME = 1, - SCENE_CULLFACE = 2, - SCENE_BACKGROUND = 4, - SCENE_FOREGROUND = 8, - SCENE_UPDATE_SH_COEF = 16, -}; - -typedef struct scene_t { - array(object_t) objs; - array(light_t) lights; - - // special objects below: - skybox_t skybox; - int u_coefficients_sh; -} scene_t; - -API scene_t* scene_push(); -API void scene_pop(); -API scene_t* scene_get_active(); - -API int scene_merge(const char *source); -API void scene_render(int flags); - -API object_t* scene_spawn(); -API unsigned scene_count(); -API object_t* scene_index(unsigned index); - -API light_t* scene_spawn_light(); -API unsigned scene_count_light(); -API light_t* scene_index_light(unsigned index); +// ----------------------------------------------------------------------------- +// scene framework +// - rlyeh, public domain + +// camera + +typedef struct camera_t { + mat44 view, proj; + vec3 position, updir, lookdir; + float yaw, pitch, roll; // mirror of (x,y) lookdir in deg; + float speed, fov; // fov in deg(45) + + float move_friction, move_damping; + float look_friction, look_damping; + vec3 last_look; vec3 last_move; // used for friction and damping + bool damping; + + bool orthographic; // 0 perspective, 1 orthographic; when ortho: dimetric[if pitch == -30º], isometric[if pitch == 35.264º] + float distance; // distance to pivot, when orbiting + // vec2 polarity = { +1,-1 }; // @todo + // vec2 sensitivity = { 2,2 }; // @todo +} camera_t; + +API camera_t camera(); +API void camera_teleport(camera_t *cam, vec3 pos); +API void camera_moveby(camera_t *cam, vec3 inc); +API void camera_fov(camera_t *cam, float fov); +API void camera_fps(camera_t *cam, float yaw, float pitch); +API void camera_fps2(camera_t *cam, float yaw, float pitch, float roll); +API void camera_orbit(camera_t *cam, float yaw, float pitch, float inc_distance); +API void camera_lookat(camera_t *cam, vec3 target); +API void camera_enable(camera_t *cam); +API camera_t *camera_get_active(); + +API int ui_camera(camera_t *cam); +API void ddraw_camera(camera_t *cam); + +// object + +typedef struct object_t { + uint64_t renderbucket; + mat44 transform; + quat rot; + vec3 sca, pos, euler, pivot; + array(handle) textures; + model_t model; + anim_t anim; + float anim_speed; + aabb bounds; + unsigned billboard; // [0..7] x(4),y(2),z(1) masks + bool light_cached; //< used by scene to update light data +} object_t; + +API object_t object(); +API void object_rotate(object_t *obj, vec3 euler); +API void object_pivot(object_t *obj, vec3 euler); +API void object_teleport(object_t *obj, vec3 pos); +API void object_move(object_t *obj, vec3 inc); +API vec3 object_position(object_t *obj); +API void object_scale(object_t *obj, vec3 sca); +// +API void object_model(object_t *obj, model_t model); +API void object_anim(object_t *obj, anim_t anim, float speed); +API void object_diffuse(object_t *obj, texture_t tex); +API void object_diffuse_push(object_t *obj, texture_t tex); +API void object_diffuse_pop(object_t *obj); +API void object_billboard(object_t *obj, unsigned mode); + +// object_pose(transform); // @todo + + +// light +enum LIGHT_TYPE { + LIGHT_DIRECTIONAL, + LIGHT_POINT, + LIGHT_SPOT, +}; + +enum LIGHT_FLAGS { + LIGHT_CAST_SHADOWS = 1, +}; + +typedef struct light_t { + char type; + vec3 diffuse, specular, ambient; + vec3 pos, dir; + struct { + float constant, linear, quadratic; + } falloff; + float specularPower; + float innerCone, outerCone; + //@todo: cookie, flare + + // internals + bool cached; //< used by scene to invalidate cached light data +} light_t; + +API light_t light(); +// API void light_flags(int flags); +API void light_type(light_t* l, char type); +API void light_diffuse(light_t* l, vec3 color); +API void light_specular(light_t* l, vec3 color); +API void light_ambient(light_t* l, vec3 color); +API void light_teleport(light_t* l, vec3 pos); +API void light_dir(light_t* l, vec3 dir); +API void light_power(light_t* l, float power); +API void light_falloff(light_t* l, float constant, float linear, float quadratic); +API void light_cone(light_t* l, float innerCone, float outerCone); +API void light_update(unsigned num_lights, light_t *lv); + +// scene + +enum SCENE_FLAGS { + SCENE_WIREFRAME = 1, + SCENE_CULLFACE = 2, + SCENE_BACKGROUND = 4, + SCENE_FOREGROUND = 8, + SCENE_UPDATE_SH_COEF = 16, +}; + +typedef struct scene_t { + array(object_t) objs; + array(light_t) lights; + + // special objects below: + skybox_t skybox; + int u_coefficients_sh; +} scene_t; + +API scene_t* scene_push(); +API void scene_pop(); +API scene_t* scene_get_active(); + +API int scene_merge(const char *source); +API void scene_render(int flags); + +API object_t* scene_spawn(); +API unsigned scene_count(); +API object_t* scene_index(unsigned index); + +API light_t* scene_spawn_light(); +API unsigned scene_count_light(); +API light_t* scene_index_light(unsigned index); #line 0 #line 1 "v4k_string.h" -// string framework -// - rlyeh, public domain - -// string: temporary api (stack) -API char* tempvl(const char *fmt, va_list); -API char* tempva(const char *fmt, ...); -#define va(...) (((&printf) || printf(__VA_ARGS__), tempva(__VA_ARGS__))) // vs2015 check trick -#define vac (const char*)va - -// string: allocated api (heap). FREE() after use -API char* strcatf(char **s, const char *buf); -#define strcatf(s,fmt,...) strcatf((s), va(fmt, __VA_ARGS__)) -#define stringf(fmt,...) STRDUP(va(fmt, __VA_ARGS__)) // (strcatf)(0, va(fmt, __VA_ARGS__)) - - -#if is(cl) || (is(tcc) && is(win32)) -#if!is(cl) -char* strtok_s(char* str,const char* delimiters,char** context); // tcc misses this in -#endif -#define strtok_r strtok_s -#endif - -#if 1 -#define each_substring(str, delims, keyname) \ - ( char *str_ = (char*)(str); str_; str_ = 0 ) \ - for( int len_ = strlen(str_) + 1, heap_ = len_ < 1024; len_ > 1; len_ = 0 ) \ - for( char *ptr_ = (heap_ ? REALLOC(0, len_) : ALLOCA(len_)), *cpy_ = (snprintf(ptr_, len_, "%s", str_), ptr_); ptr_; (heap_ ? REALLOC(ptr_, 0) : 0), ptr_ = 0 ) \ - for( char *next_token = 0, *keyname = strtok_r(cpy_, delims, &next_token); keyname; keyname = strtok_r(NULL, delims, &next_token) ) -#else -#define each_substring(str, delims, keyname) \ - ( char** tokens_ = strsplit((str), (delims)), *keyname = 0; tokens_; tokens_ = 0) \ - for( int i_ = 0, end_ = array_count(tokens_); i_ < (keyname = tokens_[i_], end_); ++i_ ) -#endif - -// utils - -API int strmatch(const char *s, const char *wildcard); -API int strmatchi(const char *s, const char *wildcard); - -API int strcmp_qsort(const void *a, const void *b); -API int strcmpi_qsort(const void *a, const void *b); - -API bool strbeg(const char *src, const char *sub); // returns true if both strings match at beginning. case sensitive -API bool strend(const char *src, const char *sub); // returns true if both strings match at end. case sensitive - -API bool strbegi(const char *src, const char *sub); // returns true if both strings match at beginning. case insensitive -API bool strendi(const char *src, const char *sub); // returns true if both strings match at end. case insensitive -API const char * strstri(const char *src, const char *sub); // returns find first substring in string. case insensitive. -#define strcmpi ifdef(cl, _stricmp, strcasecmp) - -API char * strupper(const char *str); -API char * strlower(const char *str); - -API char * strrepl(char **copy, const char *target, const char *replace); // replace any 'target' as 'repl' in 'copy'. 'copy' may change (heap). returns 'copy' -API char * strswap(char *copy, const char *target, const char *replace); // replaced inline only if repl is shorter than target. no allocations. -API char * strcut(char *copy, const char *target); // remove any 'target' in 'copy'. returns 'copy' - -API const char * strlerp(unsigned numpairs, const char **pairs, const char *str); // using key-value pairs, null-terminated - -#ifndef __APPLE__ // BSD provides these -API size_t strlcat(char *dst, const char *src, size_t dstcap); // concat 2 strings safely. always NUL terminates. may truncate. -API size_t strlcpy(char *dst, const char *src, size_t dstcap); // copy 2 strings safely. always NUL terminates. truncates if retval>=dstcap -#endif - -/// split `string` after any of `delimiters` character is found. -/// returns temporary array of split strings. see: strjoin -/// > array(char*) tokens = strsplit("hello! world!", " !"); // [0]="hello",[1]="world", -API array(char*) strsplit(const char *string, const char *delimiters); - -/// concatenate all elements within `list`, with `separator` string in between. -/// returns: temporary joint string. see: strsplit -/// > array(char*) tokens = strsplit("hello! world!", " !"); // [0]="hello",[1]="world", -/// > char *joint = strjoin(tokens, "+"); // joint="hello+world" -API char* strjoin(array(char*) list, const char *separator); - -API char* string8(const wchar_t *str); /// convert from wchar16(win) to utf8/ascii -API array(uint32_t) string32( const char *utf8 ); /// convert from utf8 to utf32 - -API const char* codepoint_to_utf8(unsigned cp); - -// ----------------------------------------------------------------------------- -// ## string interning (quarks) -// - rlyeh, public domain. - -API unsigned intern( const char *string ); -API const char *quark( unsigned key ); - -typedef struct quarks_db { - array(char) blob; - array(vec2i) entries; -} quarks_db; - -API unsigned quark_intern( quarks_db*, const char *string ); -API const char *quark_string( quarks_db*, unsigned key ); - -// ----------------------------------------------------------------------------- -// ## localization kit (I18N, L10N) - -API bool kit_load( const char *filename ); // load translations file (xlsx) -API bool kit_merge( const char *filename ); // merge translations file into existing context -API void kit_insert( const char *id, const char *translation ); // insert single translation unit -API void kit_clear(); // delete all translations - -API void kit_set( const char *variable, const char *value ); // set context variable -API void kit_reset(); // reset all variables in context -API void kit_dump_state( FILE *fp ); // debug - -API char* kit_translate2( const char *id, const char *langcode_iso639_1 ); // perform a translation given explicit locale - -API void kit_locale( const char *langcode_iso639_1 ); // set current locale: enUS, ptBR, esES, ... -API char* kit_translate( const char *id ); // perform a translation, given current locale +// string framework +// - rlyeh, public domain + +// string: temporary api (stack) +API char* tempvl(const char *fmt, va_list); +API char* tempva(const char *fmt, ...); +#define va(...) (((&printf) || printf(__VA_ARGS__), tempva(__VA_ARGS__))) // vs2015 check trick +#define vac (const char*)va + +// string: allocated api (heap). FREE() after use +API char* strcatf(char **s, const char *buf); +#define strcatf(s,fmt,...) strcatf((s), va(fmt, __VA_ARGS__)) +#define stringf(fmt,...) STRDUP(va(fmt, __VA_ARGS__)) // (strcatf)(0, va(fmt, __VA_ARGS__)) + + +#if is(cl) || (is(tcc) && is(win32)) +#if!is(cl) +char* strtok_s(char* str,const char* delimiters,char** context); // tcc misses this in +#endif +#define strtok_r strtok_s +#endif + +#if 1 +#define each_substring(str, delims, keyname) \ + ( char *str_ = (char*)(str); str_; str_ = 0 ) \ + for( int len_ = strlen(str_) + 1, heap_ = len_ < 1024; len_ > 1; len_ = 0 ) \ + for( char *ptr_ = (heap_ ? REALLOC(0, len_) : ALLOCA(len_)), *cpy_ = (snprintf(ptr_, len_, "%s", str_), ptr_); ptr_; (heap_ ? REALLOC(ptr_, 0) : 0), ptr_ = 0 ) \ + for( char *next_token = 0, *keyname = strtok_r(cpy_, delims, &next_token); keyname; keyname = strtok_r(NULL, delims, &next_token) ) +#else +#define each_substring(str, delims, keyname) \ + ( char** tokens_ = strsplit((str), (delims)), *keyname = 0; tokens_; tokens_ = 0) \ + for( int i_ = 0, end_ = array_count(tokens_); i_ < (keyname = tokens_[i_], end_); ++i_ ) +#endif + +// utils + +API int strmatch(const char *s, const char *wildcard); +API int strmatchi(const char *s, const char *wildcard); + +API int strcmp_qsort(const void *a, const void *b); +API int strcmpi_qsort(const void *a, const void *b); + +API bool strbeg(const char *src, const char *sub); // returns true if both strings match at beginning. case sensitive +API bool strend(const char *src, const char *sub); // returns true if both strings match at end. case sensitive + +API bool strbegi(const char *src, const char *sub); // returns true if both strings match at beginning. case insensitive +API bool strendi(const char *src, const char *sub); // returns true if both strings match at end. case insensitive +API const char * strstri(const char *src, const char *sub); // returns find first substring in string. case insensitive. +#define strcmpi ifdef(cl, _stricmp, strcasecmp) + +API char * strupper(const char *str); +API char * strlower(const char *str); + +API char * strrepl(char **copy, const char *target, const char *replace); // replace any 'target' as 'repl' in 'copy'. 'copy' may change (heap). returns 'copy' +API char * strswap(char *copy, const char *target, const char *replace); // replaced inline only if repl is shorter than target. no allocations. +API char * strcut(char *copy, const char *target); // remove any 'target' in 'copy'. returns 'copy' + +API const char * strlerp(unsigned numpairs, const char **pairs, const char *str); // using key-value pairs, null-terminated + +#ifndef __APPLE__ // BSD provides these +API size_t strlcat(char *dst, const char *src, size_t dstcap); // concat 2 strings safely. always NUL terminates. may truncate. +API size_t strlcpy(char *dst, const char *src, size_t dstcap); // copy 2 strings safely. always NUL terminates. truncates if retval>=dstcap +#endif + +/// split `string` after any of `delimiters` character is found. +/// returns temporary array of split strings. see: strjoin +/// > array(char*) tokens = strsplit("hello! world!", " !"); // [0]="hello",[1]="world", +API array(char*) strsplit(const char *string, const char *delimiters); + +/// concatenate all elements within `list`, with `separator` string in between. +/// returns: temporary joint string. see: strsplit +/// > array(char*) tokens = strsplit("hello! world!", " !"); // [0]="hello",[1]="world", +/// > char *joint = strjoin(tokens, "+"); // joint="hello+world" +API char* strjoin(array(char*) list, const char *separator); + +API char* string8(const wchar_t *str); /// convert from wchar16(win) to utf8/ascii +API array(uint32_t) string32( const char *utf8 ); /// convert from utf8 to utf32 + +API const char* codepoint_to_utf8(unsigned cp); + +// ----------------------------------------------------------------------------- +// ## string interning (quarks) +// - rlyeh, public domain. + +API unsigned intern( const char *string ); +API const char *quark( unsigned key ); + +typedef struct quarks_db { + array(char) blob; + array(vec2i) entries; +} quarks_db; + +API unsigned quark_intern( quarks_db*, const char *string ); +API const char *quark_string( quarks_db*, unsigned key ); + +// ----------------------------------------------------------------------------- +// ## localization kit (I18N, L10N) + +API bool kit_load( const char *filename ); // load translations file (xlsx) +API bool kit_merge( const char *filename ); // merge translations file into existing context +API void kit_insert( const char *id, const char *translation ); // insert single translation unit +API void kit_clear(); // delete all translations + +API void kit_set( const char *variable, const char *value ); // set context variable +API void kit_reset(); // reset all variables in context +API void kit_dump_state( FILE *fp ); // debug + +API char* kit_translate2( const char *id, const char *langcode_iso639_1 ); // perform a translation given explicit locale + +API void kit_locale( const char *langcode_iso639_1 ); // set current locale: enUS, ptBR, esES, ... +API char* kit_translate( const char *id ); // perform a translation, given current locale #line 0 #line 1 "v4k_sprite.h" -// ----------------------------------------------------------------------------- -// sprites - -typedef enum SPRITE_FLAGS { - SPRITE_PROJECTED = 1, - SPRITE_ADDITIVE = 2, - SPRITE_CENTERED = 4, - SPRITE_RESOLUTION_INDEPENDANT = 128, -} SPRITE_FLAGS; - -// texture id, position(x,y,depth sort), tint color, rotation angle -API void sprite( texture_t texture, float position[3], float rotation /*0*/, unsigned color /*~0u*/, unsigned flags); - -// texture id, rect(x,y,w,h) is [0..1] normalized, then: pos(xyz,z-index), (scale.xy,offset.xy), rotation (degrees), color (rgba) -API void sprite_rect( texture_t t, vec4 rect, vec4 pos, vec4 scaleoff, float tilt_deg, unsigned tint_rgba, unsigned flags); - -// texture id, sheet(frameNumber,X,Y) (frame in a X*Y spritesheet), position(x,y,depth sort), rotation angle, offset(x,y), scale(x,y), is_additive, tint color -API void sprite_sheet( texture_t texture, float sheet[3], float position[3], float rotation, float offset[2], float scale[2], unsigned rgba, unsigned flags); - -API void sprite_flush(); - -// ----------------------------------------------------------------------------- -// tilemaps - -typedef struct tileset_t { - texture_t tex; // spritesheet - unsigned tile_w, tile_h; // dimensions per tile in pixels - unsigned cols, rows; // tileset num_cols, num_rows - unsigned selected; // active tile (while editing) -} tileset_t; - -API tileset_t tileset(texture_t tex, unsigned tile_w, unsigned tile_h, unsigned cols, unsigned rows); - -API int ui_tileset( tileset_t t ); - -typedef struct tilemap_t { - int blank_chr; // transparent tile - unsigned cols, rows; // map dimensions (in tiles) - array(int) map; - - vec3 position; // x,y,scale - float zindex; - float tilt; - unsigned tint; - bool is_additive; -} tilemap_t; - -API tilemap_t tilemap(const char *map, int blank_chr, int linefeed_chr); -API void tilemap_render( tilemap_t m, tileset_t style ); -API void tilemap_render_ext( tilemap_t m, tileset_t style, float zindex, float xy_zoom[3], float tilt, unsigned tint, bool is_additive ); - -// ----------------------------------------------------------------------------- -// tiled maps - -typedef struct tiled_t { - char *map_name; - unsigned first_gid, tilew, tileh, w, h; - - bool parallax; - vec3 position; - array(bool) visible; - array(tilemap_t) layers; - array(tileset_t) sets; - array(char*) names; -} tiled_t; - -API tiled_t tiled(const char *file_tmx); -API void tiled_render(tiled_t tmx, vec3 pos); - -API void ui_tiled(tiled_t *t); - -// ----------------------------------------------------------------------------- -// spines - -typedef struct spine_t spine_t; - -API spine_t*spine(const char *file_json, const char *file_atlas, unsigned flags); -API void spine_skin(spine_t *p, unsigned skin); -API void spine_render(spine_t *p, vec3 offset, unsigned flags); -API void spine_animate(spine_t *p, float delta); - -API void ui_spine(spine_t *p); - -// ---------------------------------------------------------------------------- -// atlas api - -typedef struct atlas_frame_t { - unsigned delay; - vec4 sheet; - vec2 anchor; // @todo - array(vec3i) indices; - array(vec2) coords; - array(vec2) uvs; -} atlas_frame_t; - -typedef struct atlas_anim_t { - unsigned name; - array(unsigned) frames; -} atlas_anim_t; - -typedef struct atlas_slice_frame_t { - vec4 bounds; - bool has_9slice; - vec4 core; - vec2 pivot; - unsigned color; - char *text; -} atlas_slice_frame_t; - -typedef struct atlas_slice_t { - unsigned name; - array(unsigned) frames; -} atlas_slice_t; - -typedef struct atlas_t { - texture_t tex; - - array(atlas_frame_t) frames; - array(atlas_anim_t) anims; - array(atlas_slice_t) slices; - array(atlas_slice_frame_t) slice_frames; - - quarks_db db; -} atlas_t; - -API atlas_t atlas_create(const char *inifile, unsigned flags); -API int ui_atlas(atlas_t *a); -API int ui_atlas_frame(atlas_frame_t *f); -API void atlas_destroy(atlas_t *a); - -// ---------------------------------------------------------------------------- -// sprite v2 api - -typedef struct sprite_t { OBJ - vec4 gamepad; // up,down,left,right - vec2 fire; // a,b - - vec4 pos; - vec2 sca; - float tilt; - unsigned tint; - unsigned frame; - unsigned timer, timer_ms; - unsigned flip_, flipped; - unsigned play; - bool paused; - // array(unsigned) play_queue; or unsigned play_next; - struct atlas_t *a; // shared - //atlas_t own; // owned -} sprite_t; - -OBJTYPEDEF(sprite_t,10); -API void sprite_ctor(sprite_t *s); -API void sprite_dtor(sprite_t *s); -API void sprite_tick(sprite_t *s); -API void sprite_draw(sprite_t *s); -API void sprite_edit(sprite_t *s); - -API sprite_t*sprite_new(const char *ase, int bindings[6]); -API void sprite_del(sprite_t *s); -API void sprite_setanim(sprite_t *s, unsigned name); +// ----------------------------------------------------------------------------- +// sprites + +typedef enum SPRITE_FLAGS { + SPRITE_PROJECTED = 1, + SPRITE_ADDITIVE = 2, + SPRITE_CENTERED = 4, + SPRITE_RESOLUTION_INDEPENDANT = 128, +} SPRITE_FLAGS; + +// texture id, position(x,y,depth sort), tint color, rotation angle +API void sprite( texture_t texture, float position[3], float rotation /*0*/, unsigned color /*~0u*/, unsigned flags); + +// texture id, rect(x,y,w,h) is [0..1] normalized, then: pos(xyz,z-index), (scale.xy,offset.xy), rotation (degrees), color (rgba) +API void sprite_rect( texture_t t, vec4 rect, vec4 pos, vec4 scaleoff, float tilt_deg, unsigned tint_rgba, unsigned flags); + +// texture id, sheet(frameNumber,X,Y) (frame in a X*Y spritesheet), position(x,y,depth sort), rotation angle, offset(x,y), scale(x,y), is_additive, tint color +API void sprite_sheet( texture_t texture, float sheet[3], float position[3], float rotation, float offset[2], float scale[2], unsigned rgba, unsigned flags); + +API void sprite_flush(); + +// ----------------------------------------------------------------------------- +// tilemaps + +typedef struct tileset_t { + texture_t tex; // spritesheet + unsigned tile_w, tile_h; // dimensions per tile in pixels + unsigned cols, rows; // tileset num_cols, num_rows + unsigned selected; // active tile (while editing) +} tileset_t; + +API tileset_t tileset(texture_t tex, unsigned tile_w, unsigned tile_h, unsigned cols, unsigned rows); + +API int ui_tileset( tileset_t t ); + +typedef struct tilemap_t { + int blank_chr; // transparent tile + unsigned cols, rows; // map dimensions (in tiles) + array(int) map; + + vec3 position; // x,y,scale + float zindex; + float tilt; + unsigned tint; + bool is_additive; +} tilemap_t; + +API tilemap_t tilemap(const char *map, int blank_chr, int linefeed_chr); +API void tilemap_render( tilemap_t m, tileset_t style ); +API void tilemap_render_ext( tilemap_t m, tileset_t style, float zindex, float xy_zoom[3], float tilt, unsigned tint, bool is_additive ); + +// ----------------------------------------------------------------------------- +// tiled maps + +typedef struct tiled_t { + char *map_name; + unsigned first_gid, tilew, tileh, w, h; + + bool parallax; + vec3 position; + array(bool) visible; + array(tilemap_t) layers; + array(tileset_t) sets; + array(char*) names; +} tiled_t; + +API tiled_t tiled(const char *file_tmx); +API void tiled_render(tiled_t tmx, vec3 pos); + +API void ui_tiled(tiled_t *t); + +// ----------------------------------------------------------------------------- +// spines + +typedef struct spine_t spine_t; + +API spine_t*spine(const char *file_json, const char *file_atlas, unsigned flags); +API void spine_skin(spine_t *p, unsigned skin); +API void spine_render(spine_t *p, vec3 offset, unsigned flags); +API void spine_animate(spine_t *p, float delta); + +API void ui_spine(spine_t *p); + +// ---------------------------------------------------------------------------- +// atlas api + +typedef struct atlas_frame_t { + unsigned delay; + vec4 sheet; + vec2 anchor; // @todo + array(vec3i) indices; + array(vec2) coords; + array(vec2) uvs; +} atlas_frame_t; + +typedef struct atlas_anim_t { + unsigned name; + array(unsigned) frames; +} atlas_anim_t; + +typedef struct atlas_slice_frame_t { + vec4 bounds; + bool has_9slice; + vec4 core; + vec2 pivot; + unsigned color; + char *text; +} atlas_slice_frame_t; + +typedef struct atlas_slice_t { + unsigned name; + array(unsigned) frames; +} atlas_slice_t; + +typedef struct atlas_t { + texture_t tex; + + array(atlas_frame_t) frames; + array(atlas_anim_t) anims; + array(atlas_slice_t) slices; + array(atlas_slice_frame_t) slice_frames; + + quarks_db db; +} atlas_t; + +API atlas_t atlas_create(const char *inifile, unsigned flags); +API int ui_atlas(atlas_t *a); +API int ui_atlas_frame(atlas_frame_t *f); +API void atlas_destroy(atlas_t *a); + +// ---------------------------------------------------------------------------- +// sprite v2 api + +typedef struct sprite_t { OBJ + vec4 gamepad; // up,down,left,right + vec2 fire; // a,b + + vec4 pos; + vec2 sca; + float tilt; + unsigned tint; + unsigned frame; + unsigned timer, timer_ms; + unsigned flip_, flipped; + unsigned play; + bool paused; + // array(unsigned) play_queue; or unsigned play_next; + struct atlas_t *a; // shared + //atlas_t own; // owned +} sprite_t; + +OBJTYPEDEF(sprite_t,10); +API void sprite_ctor(sprite_t *s); +API void sprite_dtor(sprite_t *s); +API void sprite_tick(sprite_t *s); +API void sprite_draw(sprite_t *s); +API void sprite_edit(sprite_t *s); + +API sprite_t*sprite_new(const char *ase, int bindings[6]); +API void sprite_del(sprite_t *s); +API void sprite_setanim(sprite_t *s, unsigned name); #line 0 #line 1 "v4k_gui.h" -// ---------------------------------------------------------------------------- -// game ui - -typedef struct guiskin_t { - void (*drawrect)(void* userdata, const char *skin, const char *fallback, vec4 rect); - void (*getskinsize)(void* userdata, const char *skin, const char *fallback, vec2 *size); - void (*getskincolor)(void* userdata, const char *skin, const char *fallback, unsigned *color); - void (*getscissorrect)(void* userdata, const char *skin, const char *fallback, vec4 rect, vec4 *dims); - bool (*ismouseinrect)(void* userdata, const char *skin, const char *fallback, vec4 rect); - void (*free)(void* userdata); - void *userdata; -} guiskin_t; - -API void gui_pushskin(guiskin_t skin); -API void* gui_userdata(); -API vec2 gui_getskinsize(const char *skin, const char *fallback); -API unsigned gui_getskincolor(const char *skin, const char *fallback); -API bool gui_ismouseinrect(const char *skin, const char *fallback, vec4 rect); -API vec4 gui_getscissorrect(const char *skin, const char *fallback, vec4 rect); -// -- -API void gui_panel_id(int id, vec4 rect, const char *skin); -API void gui_rect_id(int id, vec4 rect, const char *skin); -API void gui_label_id(int id, const char *skin, const char *text, vec4 rect); -API bool gui_button_id(int id, vec4 rect, const char *skin); -API bool gui_button_label_id(int id, const char *text, vec4 rect, const char *skin); -API bool gui_slider_id(int id, vec4 rect, const char *skin, float min, float max, float step, float *value); -API bool gui_slider_label_id(int id, const char *text, vec4 rect, const char *skin, float min, float max, float step, float *value); -API void gui_panel_end(); -API void gui_popskin(); - -// helpers -#define gui_panel(...) gui_panel_id(__LINE__, __VA_ARGS__) -#define gui_rect(...) gui_rect_id(__LINE__, __VA_ARGS__) -#define gui_label(...) gui_label_id(__LINE__, __VA_ARGS__) -#define gui_button(...) gui_button_id(__LINE__, __VA_ARGS__) -#define gui_button_label(...) gui_button_label_id(__LINE__, __VA_ARGS__) -#define gui_slider(...) gui_slider_id(__LINE__, __VA_ARGS__) -#define gui_slider_label(...) gui_slider_label_id(__LINE__, __VA_ARGS__) - -// default renderers - -typedef struct skinned_t { - atlas_t atlas; - float scale; -} skinned_t; - -// The skinning engine depends on an Aseprite asset with slices set up. -// While you can specify your own skins for various GUI widgets, some -// skin variants are hardcoded and expected to be present in your asset: -// -// gui_panel(): -// - "panel" (overridable) -// gui_button(): -// - "button" (base overridable) -// - "_hover" (ex. "scarybtn_hover") -// - "_press" -// gui_rect(): -// - no defaults, always pass your own skin/slice name -// gui_slider(): -// - "slider" (overridable) -// - "slider_cursor" (partially overridable, ex. "bigslider_cursor") -// - "_hover" (ex. "slider_cursor_hover") -// - "_press" -// -API guiskin_t gui_skinned(const char *asefile, float scale); +// ---------------------------------------------------------------------------- +// game ui + +typedef struct guiskin_t { + void (*drawrect)(void* userdata, const char *skin, const char *fallback, vec4 rect); + void (*getskinsize)(void* userdata, const char *skin, const char *fallback, vec2 *size); + void (*getskincolor)(void* userdata, const char *skin, const char *fallback, unsigned *color); + void (*getscissorrect)(void* userdata, const char *skin, const char *fallback, vec4 rect, vec4 *dims); + bool (*ismouseinrect)(void* userdata, const char *skin, const char *fallback, vec4 rect); + void (*free)(void* userdata); + void *userdata; +} guiskin_t; + +API void gui_pushskin(guiskin_t skin); +API void* gui_userdata(); +API vec2 gui_getskinsize(const char *skin, const char *fallback); +API unsigned gui_getskincolor(const char *skin, const char *fallback); +API bool gui_ismouseinrect(const char *skin, const char *fallback, vec4 rect); +API vec4 gui_getscissorrect(const char *skin, const char *fallback, vec4 rect); +// -- +API void gui_panel_id(int id, vec4 rect, const char *skin); +API void gui_rect_id(int id, vec4 rect, const char *skin); +API void gui_label_id(int id, const char *skin, const char *text, vec4 rect); +API bool gui_button_id(int id, vec4 rect, const char *skin); +API bool gui_button_label_id(int id, const char *text, vec4 rect, const char *skin); +API bool gui_slider_id(int id, vec4 rect, const char *skin, float min, float max, float step, float *value); +API bool gui_slider_label_id(int id, const char *text, vec4 rect, const char *skin, float min, float max, float step, float *value); +API void gui_panel_end(); +API void gui_popskin(); + +// helpers +#define gui_panel(...) gui_panel_id(__LINE__, __VA_ARGS__) +#define gui_rect(...) gui_rect_id(__LINE__, __VA_ARGS__) +#define gui_label(...) gui_label_id(__LINE__, __VA_ARGS__) +#define gui_button(...) gui_button_id(__LINE__, __VA_ARGS__) +#define gui_button_label(...) gui_button_label_id(__LINE__, __VA_ARGS__) +#define gui_slider(...) gui_slider_id(__LINE__, __VA_ARGS__) +#define gui_slider_label(...) gui_slider_label_id(__LINE__, __VA_ARGS__) + +// default renderers + +typedef struct skinned_t { + atlas_t atlas; + float scale; +} skinned_t; + +// The skinning engine depends on an Aseprite asset with slices set up. +// While you can specify your own skins for various GUI widgets, some +// skin variants are hardcoded and expected to be present in your asset: +// +// gui_panel(): +// - "panel" (overridable) +// gui_button(): +// - "button" (base overridable) +// - "_hover" (ex. "scarybtn_hover") +// - "_press" +// gui_rect(): +// - no defaults, always pass your own skin/slice name +// gui_slider(): +// - "slider" (overridable) +// - "slider_cursor" (partially overridable, ex. "bigslider_cursor") +// - "_hover" (ex. "slider_cursor_hover") +// - "_press" +// +API guiskin_t gui_skinned(const char *asefile, float scale); #line 0 #line 1 "v4k_steam.h" -// ---------------------------------------------------------------------------- -// steam framework - -API bool steam_init(unsigned app_id); -API void steam_tick(); -API void steam_trophy(const char *trophy_id, bool redeem); -API void steam_screenshot(); -API void steam_destroy(); - -API int ui_steam(); +// ---------------------------------------------------------------------------- +// steam framework + +API bool steam_init(unsigned app_id); +API void steam_tick(); +API void steam_trophy(const char *trophy_id, bool redeem); +API void steam_screenshot(); +API void steam_destroy(); + +API int ui_steam(); #line 0 #line 1 "v4k_system.h" -// ----------------------------------------------------------------------------- -// system framework utils -// - rlyeh, public domain. -// -// Note: Windows users add `/Zi` compilation flags, else add `-g` and/or `-ldl` flags -// Note: If you are linking your binary using GNU ld you need to add --export-dynamic - -API void* thread( int (*thread_func)(void* user_data), void* user_data ); -API void thread_destroy( void *thd ); - -API int argc(); -API char* argv(int); -API void argvadd(const char *arg); - -API int flag(const char *commalist); // --arg // app_flag? -API const char* option(const char *commalist, const char *defaults); // --arg=string or --arg string -API int optioni(const char *commalist, int defaults); // --arg=integer or --arg integer // argvi() ? -API float optionf(const char *commalist, float defaults); // --arg=float or --arg float // flagf() ? - -API void tty_attach(); -API void tty_detach(); -API void tty_color(unsigned color); -API void tty_reset(); - -API const char* app_exec(const char *command); // returns ("%15d %s", retcode, output_last_line) -API int app_spawn(const char *command); -API int app_cores(); -API int app_battery(); /// returns battery level [1..100]. also positive if charging (+), negative if discharging (-), and 0 if no battery is present. - -API const char* app_name(); -API const char* app_path(); -API const char* app_cache(); -API const char* app_temp(); -API const char* app_cmdline(); - -API void app_beep(); -API void app_hang(); -API void app_crash(); -API void app_singleton(const char *guid); -API bool app_open(const char *folder_file_or_url); - -API const char* app_loadfile(); -API const char* app_savefile(); - - -API char* callstack( int traces ); // write callstack into a temporary string. <0 traces to invert order. do not free(). -API int callstackf( FILE *fp, int traces ); // write callstack to file. <0 traces to invert order. - -API void die(const char *message); -API void alert(const char *message); -API void hexdump( const void *ptr, unsigned len ); -API void hexdumpf( FILE *fp, const void *ptr, unsigned len, int width ); -API void breakpoint(); -API bool has_debugger(); - -API void trap_install(void); -API const char *trap_name(int signal); // helper util -API void trap_on_ignore(int signal); // helper util -API void trap_on_quit(int signal); // helper util -API void trap_on_abort(int signal); // helper util -API void trap_on_debug(int signal); // helper util - -#define PANIC(...) PANIC(va(""__VA_ARGS__), __FILE__, __LINE__) // die() ? -API int (PANIC)(const char *error, const char *file, int line); - -#define PRINTF(...) PRINTF(va(""__VA_ARGS__), 1[""#__VA_ARGS__] == '!' ? callstack(+48) : "", __FILE__, __LINE__, __FUNCTION__) -API int (PRINTF)(const char *text, const char *stack, const char *file, int line, const char *function); - -#define test(expr) test(__FILE__,__LINE__,#expr,!!(expr)) -API int (test)(const char *file, int line, const char *expr, bool result); - -#if ENABLE_AUTOTESTS -#define AUTOTEST AUTORUN -#else -#define AUTOTEST static void concat(concat(concat(disabled_test_, __LINE__), _), __COUNTER__)() -#endif - -// AUTOTEST { test(1<2); } - -#if ENABLE_RETAIL -#undef PRINTF -#define PRINTF(...) 0 -#undef test -#define test(expr) 0 -#endif +// ----------------------------------------------------------------------------- +// system framework utils +// - rlyeh, public domain. +// +// Note: Windows users add `/Zi` compilation flags, else add `-g` and/or `-ldl` flags +// Note: If you are linking your binary using GNU ld you need to add --export-dynamic + +API void* thread( int (*thread_func)(void* user_data), void* user_data ); +API void thread_destroy( void *thd ); + +API int argc(); +API char* argv(int); +API void argvadd(const char *arg); + +API int flag(const char *commalist); // --arg // app_flag? +API const char* option(const char *commalist, const char *defaults); // --arg=string or --arg string +API int optioni(const char *commalist, int defaults); // --arg=integer or --arg integer // argvi() ? +API float optionf(const char *commalist, float defaults); // --arg=float or --arg float // flagf() ? + +API void tty_attach(); +API void tty_detach(); +API void tty_color(unsigned color); +API void tty_reset(); + +API const char* app_exec(const char *command); // returns ("%15d %s", retcode, output_last_line) +API int app_spawn(const char *command); +API int app_cores(); +API int app_battery(); /// returns battery level [1..100]. also positive if charging (+), negative if discharging (-), and 0 if no battery is present. + +API const char* app_name(); +API const char* app_path(); +API const char* app_cache(); +API const char* app_temp(); +API const char* app_cmdline(); + +API void app_beep(); +API void app_hang(); +API void app_crash(); +API void app_singleton(const char *guid); +API bool app_open(const char *folder_file_or_url); + +API const char* app_loadfile(); +API const char* app_savefile(); + + +API char* callstack( int traces ); // write callstack into a temporary string. <0 traces to invert order. do not free(). +API int callstackf( FILE *fp, int traces ); // write callstack to file. <0 traces to invert order. + +API void die(const char *message); +API void alert(const char *message); +API void hexdump( const void *ptr, unsigned len ); +API void hexdumpf( FILE *fp, const void *ptr, unsigned len, int width ); +API void breakpoint(); +API bool has_debugger(); + +API void trap_install(void); +API const char *trap_name(int signal); // helper util +API void trap_on_ignore(int signal); // helper util +API void trap_on_quit(int signal); // helper util +API void trap_on_abort(int signal); // helper util +API void trap_on_debug(int signal); // helper util + +#define PANIC(...) PANIC(va(""__VA_ARGS__), __FILE__, __LINE__) // die() ? +API int (PANIC)(const char *error, const char *file, int line); + +#define PRINTF(...) PRINTF(va(""__VA_ARGS__), 1[""#__VA_ARGS__] == '!' ? callstack(+48) : "", __FILE__, __LINE__, __FUNCTION__) +API int (PRINTF)(const char *text, const char *stack, const char *file, int line, const char *function); + +#define test(expr) test(__FILE__,__LINE__,#expr,!!(expr)) +API int (test)(const char *file, int line, const char *expr, bool result); + +#if ENABLE_AUTOTESTS +#define AUTOTEST AUTORUN +#else +#define AUTOTEST static void concat(concat(concat(disabled_test_, __LINE__), _), __COUNTER__)() +#endif + +// AUTOTEST { test(1<2); } + +#if ENABLE_RETAIL +#undef PRINTF +#define PRINTF(...) 0 +#undef test +#define test(expr) 0 +#endif #line 0 #line 1 "v4k_time.h" -// ----------------------------------------------------------------------------- -// time framework utils - -API uint64_t date(); // YYYYMMDDhhmmss -API uint64_t date_epoch(); // linux epoch -API char* date_string(); // "YYYY-MM-DD hh:mm:ss" -API double time_hh(); -API double time_mm(); -API double time_ss(); -API uint64_t time_ms(); -API uint64_t time_us(); -API uint64_t time_ns(); -API void sleep_ss(double ss); -API void sleep_ms(double ms); -API void sleep_us(double us); -API void sleep_ns(double us); - -API unsigned timer(unsigned ms, unsigned (*callback)(unsigned ms, void *arg), void *arg); -API void timer_destroy(unsigned timer_handle); - -// time sortable unique identifier (similar to ksuid/tuid; others: sno/xid/cuid/ulid) -// - rlyeh, public domain. -// -// also similar to a mongo object id, 12 bytes as follows: -// - 4-byte timestamp (ss). epoch: Tuesday, 12 September 2023 6:06:56 -// - 2-byte (machine, hash or app id) -// - 2-byte (thread-id) -// - 4-byte (rand counter, that gets increased at every id creation) - -typedef vec3i guid; - -API guid guid_create(); - -/* -AUTORUN { - guid g1 = guid_create(); - guid g2 = guid_create(); - print3i(g1); - hexdump(&g1, sizeof(g1)); - print3i(g2); - hexdump(&g2, sizeof(g2)); -} -*/ - -// ---------------------------------------------------------------------------- -// ease - -API float ease_zero(float t); -API float ease_one(float t); -API float ease_linear(float t); - -API float ease_out_sine(float t); -API float ease_out_quad(float t); -API float ease_out_cubic(float t); -API float ease_out_quart(float t); -API float ease_out_quint(float t); -API float ease_out_expo(float t); -API float ease_out_circ(float t); -API float ease_out_back(float t); -API float ease_out_elastic(float t); -API float ease_out_bounce(float t); - -API float ease_in_sine(float t); -API float ease_in_quad(float t); -API float ease_in_cubic(float t); -API float ease_in_quart(float t); -API float ease_in_quint(float t); -API float ease_in_expo(float t); -API float ease_in_circ(float t); -API float ease_in_back(float t); -API float ease_in_elastic(float t); -API float ease_in_bounce(float t); - -API float ease_inout_sine(float t); -API float ease_inout_quad(float t); -API float ease_inout_cubic(float t); -API float ease_inout_quart(float t); -API float ease_inout_quint(float t); -API float ease_inout_expo(float t); -API float ease_inout_circ(float t); -API float ease_inout_back(float t); -API float ease_inout_elastic(float t); -API float ease_inout_bounce(float t); - -API float ease_inout_perlin(float t); - -enum EASE_FLAGS { - EASE_SINE, - EASE_QUAD, - EASE_CUBIC, - EASE_QUART, - EASE_QUINT, - EASE_EXPO, - EASE_CIRC, - EASE_BACK, - EASE_ELASTIC, - EASE_BOUNCE, - - EASE_IN, - EASE_OUT = 0, - EASE_INOUT = EASE_IN * 2, - - EASE_ZERO = EASE_INOUT | (EASE_BOUNCE + 1), - EASE_ONE, - EASE_LINEAR, - EASE_INOUT_PERLIN, - - EASE_NUM -}; - -API float ease(float t01, unsigned fn); // / 0-to-1 -API float ease_pong(float t01, unsigned fn); // \ 1-to-0 -API float ease_ping_pong(float t, unsigned fn1, unsigned fn2); // /\ 0-to-1-to-0 -API float ease_pong_ping(float t, unsigned fn1, unsigned fn2); // \/ 1-to-0-to-1 - -API const char *ease_enum(unsigned fn); -API const char**ease_enums(); - -// ---------------------------------------------------------------------------- -// tween - -typedef struct tween_keyframe_t { - float t; - vec3 v; - unsigned ease; -} tween_keyframe_t; - -typedef struct tween_t { - array(tween_keyframe_t) keyframes; - - vec3 result; - float time; - float duration; -} tween_t; - -API tween_t tween(); -API void tween_setkey(tween_t *tw, float t, vec3 v, unsigned easing_mode); -API void tween_delkey(tween_t *tw, float t); -API float tween_update(tween_t *tw, float dt); -API void tween_reset(tween_t *tw); -API void tween_destroy(tween_t *tw); - -// ---------------------------------------------------------------------------- -// curve - -typedef struct curve_t { - array(float) lengths; - array(unsigned) colors; - array(vec3) samples; - array(vec3) points; - array(int) indices; -} curve_t; - -API curve_t curve(); -API void curve_add(curve_t *c, vec3 p); -API void curve_end(curve_t *c, int num_points); -API vec3 curve_eval(curve_t *c, float dt, unsigned *color); -API void curve_destroy(curve_t *c); +// ----------------------------------------------------------------------------- +// time framework utils + +API uint64_t date(); // YYYYMMDDhhmmss +API uint64_t date_epoch(); // linux epoch +API char* date_string(); // "YYYY-MM-DD hh:mm:ss" +API double time_hh(); +API double time_mm(); +API double time_ss(); +API uint64_t time_ms(); +API uint64_t time_us(); +API uint64_t time_ns(); +API void sleep_ss(double ss); +API void sleep_ms(double ms); +API void sleep_us(double us); +API void sleep_ns(double us); + +API unsigned timer(unsigned ms, unsigned (*callback)(unsigned ms, void *arg), void *arg); +API void timer_destroy(unsigned timer_handle); + +// time sortable unique identifier (similar to ksuid/tuid; others: sno/xid/cuid/ulid) +// - rlyeh, public domain. +// +// also similar to a mongo object id, 12 bytes as follows: +// - 4-byte timestamp (ss). epoch: Tuesday, 12 September 2023 6:06:56 +// - 2-byte (machine, hash or app id) +// - 2-byte (thread-id) +// - 4-byte (rand counter, that gets increased at every id creation) + +typedef vec3i guid; + +API guid guid_create(); + +/* +AUTORUN { + guid g1 = guid_create(); + guid g2 = guid_create(); + print3i(g1); + hexdump(&g1, sizeof(g1)); + print3i(g2); + hexdump(&g2, sizeof(g2)); +} +*/ + +// ---------------------------------------------------------------------------- +// ease + +API float ease_zero(float t); +API float ease_one(float t); +API float ease_linear(float t); + +API float ease_out_sine(float t); +API float ease_out_quad(float t); +API float ease_out_cubic(float t); +API float ease_out_quart(float t); +API float ease_out_quint(float t); +API float ease_out_expo(float t); +API float ease_out_circ(float t); +API float ease_out_back(float t); +API float ease_out_elastic(float t); +API float ease_out_bounce(float t); + +API float ease_in_sine(float t); +API float ease_in_quad(float t); +API float ease_in_cubic(float t); +API float ease_in_quart(float t); +API float ease_in_quint(float t); +API float ease_in_expo(float t); +API float ease_in_circ(float t); +API float ease_in_back(float t); +API float ease_in_elastic(float t); +API float ease_in_bounce(float t); + +API float ease_inout_sine(float t); +API float ease_inout_quad(float t); +API float ease_inout_cubic(float t); +API float ease_inout_quart(float t); +API float ease_inout_quint(float t); +API float ease_inout_expo(float t); +API float ease_inout_circ(float t); +API float ease_inout_back(float t); +API float ease_inout_elastic(float t); +API float ease_inout_bounce(float t); + +API float ease_inout_perlin(float t); + +enum EASE_FLAGS { + EASE_SINE, + EASE_QUAD, + EASE_CUBIC, + EASE_QUART, + EASE_QUINT, + EASE_EXPO, + EASE_CIRC, + EASE_BACK, + EASE_ELASTIC, + EASE_BOUNCE, + + EASE_IN, + EASE_OUT = 0, + EASE_INOUT = EASE_IN * 2, + + EASE_ZERO = EASE_INOUT | (EASE_BOUNCE + 1), + EASE_ONE, + EASE_LINEAR, + EASE_INOUT_PERLIN, + + EASE_NUM +}; + +API float ease(float t01, unsigned fn); // / 0-to-1 +API float ease_pong(float t01, unsigned fn); // \ 1-to-0 +API float ease_ping_pong(float t, unsigned fn1, unsigned fn2); // /\ 0-to-1-to-0 +API float ease_pong_ping(float t, unsigned fn1, unsigned fn2); // \/ 1-to-0-to-1 + +API const char *ease_enum(unsigned fn); +API const char**ease_enums(); + +// ---------------------------------------------------------------------------- +// tween + +typedef struct tween_keyframe_t { + float t; + vec3 v; + unsigned ease; +} tween_keyframe_t; + +typedef struct tween_t { + array(tween_keyframe_t) keyframes; + + vec3 result; + float time; + float duration; +} tween_t; + +API tween_t tween(); +API void tween_setkey(tween_t *tw, float t, vec3 v, unsigned easing_mode); +API void tween_delkey(tween_t *tw, float t); +API float tween_update(tween_t *tw, float dt); +API void tween_reset(tween_t *tw); +API void tween_destroy(tween_t *tw); + +// ---------------------------------------------------------------------------- +// curve + +typedef struct curve_t { + array(float) lengths; + array(unsigned) colors; + array(vec3) samples; + array(vec3) points; + array(int) indices; +} curve_t; + +API curve_t curve(); +API void curve_add(curve_t *c, vec3 p); +API void curve_end(curve_t *c, int num_points); +API vec3 curve_eval(curve_t *c, float dt, unsigned *color); +API void curve_destroy(curve_t *c); #line 0 #line 1 "v4k_ui.h" -// ----------------------------------------------------------------------------- -// immediate ui framework -// - rlyeh, public domain -// -// @todo: logger/console -// @todo: surround-adaptive window resizing. ie, surrounding windows adapting theirselves to fit dragged active window - -enum PANEL_FLAGS { - PANEL_OPEN = 1, -}; - -API int ui_notify(const char *title, const char *body); -API int ui_window(const char *title, int *enabled); -API int ui_panel(const char *title, int flags); // may be embedded inside a window, or standalone -API int ui_collapse(const char *label, const char *id); -API int ui_collapseo(const char *label, const char *id); -API int ui_contextual(); -API int ui_section(const char *title); -API int ui_int(const char *label, int *value); -API int ui_bool(const char *label, bool *value); -API int ui_short(const char *label, short *value); -API int ui_float(const char *label, float *value); -API int ui_float2(const char *label, float value[2]); -API int ui_float3(const char *label, float value[3]); -API int ui_float4(const char *label, float value[4]); -API int ui_mat33(const char *label, float mat33[9]); -API int ui_mat34(const char *label, float mat34[12]); -API int ui_mat44(const char *label, float mat44[16]); -API int ui_double(const char *label, double *value); -API int ui_buffer(const char *label, char *buffer, int buflen); -API int ui_string(const char *label, char **string); -API int ui_color3(const char *label, unsigned *color); //[0..255] -API int ui_color3f(const char *label, float color[3]); //[0..1] -API int ui_color4(const char *label, unsigned *color); //[0..255] -API int ui_color4f(const char *label, float color[4]); //[0..1] -API int ui_unsigned(const char *label, unsigned *value); -API int ui_unsigned2(const char *label, unsigned *value); -API int ui_unsigned3(const char *label, unsigned *value); -API int ui_button(const char *label); -API int ui_button_transparent(const char *label); -API int ui_buttons(int buttons, /*labels*/...); -API int ui_toolbar(const char *options); // int choice = ui_toolbar("A;B;C;D"); -API int ui_submenu(const char *options); // int choice = ui_submenu("A;B;C;D"); -API int ui_browse(const char **outfile, bool *inlined); // may be embedded inside a window or inside a panel -API int ui_toggle(const char *label, bool *value); -API int ui_dialog(const char *title, const char *text, int choices, bool *show); // @fixme: return -API int ui_list(const char *label, const char **items, int num_items, int *selector); -API int ui_radio(const char *label, const char **items, int num_items, int *selector); -API int ui_texture(const char *label, texture_t t); -API int ui_subtexture(const char *label, texture_t t, unsigned x, unsigned y, unsigned w, unsigned h); -API int ui_image(const char *label, handle id, unsigned w, unsigned h); //(w,h) can be 0 -API int ui_subimage(const char *label, handle id, unsigned iw, unsigned ih, unsigned sx, unsigned sy, unsigned sw, unsigned sh); -API int ui_colormap(const char *label, colormap_t *cm); // returns num member changed: 1 for color, 2 for texture map -API int ui_separator(); -API int ui_bitmask8(const char *label, uint8_t *bits); -API int ui_bitmask16(const char *label, uint16_t *bits); -API int ui_console(); -API int ui_clampf(const char *label, float *value, float minf, float maxf); -API int ui_label(const char *label); -API int ui_label2(const char *label, const char *caption); -API int ui_label2_bool(const char *label, bool enabled); -API int ui_label2_float(const char *label, float value); -API int ui_label2_toolbar(const char *label, const char *icons); -API int ui_slider(const char *label, float *value); -API int ui_slider2(const char *label, float *value, const char *caption); -API int ui_contextual_end(int close); -API int ui_collapse_clicked(); -API int ui_collapse_end(); -API int ui_panel_end(); -API int ui_window_end(); - -API int ui_show(const char *panel_or_window_title, int enabled); -API int ui_dims(const char *panel_or_window_title, float width, float height); -API int ui_visible(const char *panel_or_window_title); // @todo: include ui_collapse() items that are open as well? -API vec2 ui_get_dims(); - -API int ui_enable(); -API int ui_enabled(); -API int ui_disable(); - -API int ui_has_menubar(); -API int ui_menu(const char *items); // semicolon-separated or comma-separated items -API int ui_menu_editbox(char *buf, int bufcap); -API int ui_item(); - -API int ui_popups(); // ui_any_popup()? ui_has_popups()? -API int ui_hover(); // ui_is_hover()? -API int ui_active(); // ui_is_active()? - -API int ui_demo(int do_windows); -API void *ui_handle(); +// ----------------------------------------------------------------------------- +// immediate ui framework +// - rlyeh, public domain +// +// @todo: logger/console +// @todo: surround-adaptive window resizing. ie, surrounding windows adapting theirselves to fit dragged active window + +enum PANEL_FLAGS { + PANEL_OPEN = 1, +}; + +API int ui_notify(const char *title, const char *body); +API int ui_window(const char *title, int *enabled); +API int ui_panel(const char *title, int flags); // may be embedded inside a window, or standalone +API int ui_collapse(const char *label, const char *id); +API int ui_collapseo(const char *label, const char *id); +API int ui_contextual(); +API int ui_section(const char *title); +API int ui_int(const char *label, int *value); +API int ui_bool(const char *label, bool *value); +API int ui_short(const char *label, short *value); +API int ui_float(const char *label, float *value); +API int ui_float2(const char *label, float value[2]); +API int ui_float3(const char *label, float value[3]); +API int ui_float4(const char *label, float value[4]); +API int ui_mat33(const char *label, float mat33[9]); +API int ui_mat34(const char *label, float mat34[12]); +API int ui_mat44(const char *label, float mat44[16]); +API int ui_double(const char *label, double *value); +API int ui_buffer(const char *label, char *buffer, int buflen); +API int ui_string(const char *label, char **string); +API int ui_color3(const char *label, unsigned *color); //[0..255] +API int ui_color3f(const char *label, float color[3]); //[0..1] +API int ui_color4(const char *label, unsigned *color); //[0..255] +API int ui_color4f(const char *label, float color[4]); //[0..1] +API int ui_unsigned(const char *label, unsigned *value); +API int ui_unsigned2(const char *label, unsigned *value); +API int ui_unsigned3(const char *label, unsigned *value); +API int ui_button(const char *label); +API int ui_button_transparent(const char *label); +API int ui_buttons(int buttons, /*labels*/...); +API int ui_toolbar(const char *options); // int choice = ui_toolbar("A;B;C;D"); +API int ui_submenu(const char *options); // int choice = ui_submenu("A;B;C;D"); +API int ui_browse(const char **outfile, bool *inlined); // may be embedded inside a window or inside a panel +API int ui_toggle(const char *label, bool *value); +API int ui_dialog(const char *title, const char *text, int choices, bool *show); // @fixme: return +API int ui_list(const char *label, const char **items, int num_items, int *selector); +API int ui_radio(const char *label, const char **items, int num_items, int *selector); +API int ui_texture(const char *label, texture_t t); +API int ui_subtexture(const char *label, texture_t t, unsigned x, unsigned y, unsigned w, unsigned h); +API int ui_image(const char *label, handle id, unsigned w, unsigned h); //(w,h) can be 0 +API int ui_subimage(const char *label, handle id, unsigned iw, unsigned ih, unsigned sx, unsigned sy, unsigned sw, unsigned sh); +API int ui_colormap(const char *label, colormap_t *cm); // returns num member changed: 1 for color, 2 for texture map +API int ui_separator(); +API int ui_bitmask8(const char *label, uint8_t *bits); +API int ui_bitmask16(const char *label, uint16_t *bits); +API int ui_console(); +API int ui_clampf(const char *label, float *value, float minf, float maxf); +API int ui_label(const char *label); +API int ui_label2(const char *label, const char *caption); +API int ui_label2_bool(const char *label, bool enabled); +API int ui_label2_float(const char *label, float value); +API int ui_label2_toolbar(const char *label, const char *icons); +API int ui_slider(const char *label, float *value); +API int ui_slider2(const char *label, float *value, const char *caption); +API int ui_contextual_end(int close); +API int ui_collapse_clicked(); +API int ui_collapse_end(); +API int ui_panel_end(); +API int ui_window_end(); + +API int ui_show(const char *panel_or_window_title, int enabled); +API int ui_dims(const char *panel_or_window_title, float width, float height); +API int ui_visible(const char *panel_or_window_title); // @todo: include ui_collapse() items that are open as well? +API vec2 ui_get_dims(); + +API int ui_enable(); +API int ui_enabled(); +API int ui_disable(); + +API int ui_has_menubar(); +API int ui_menu(const char *items); // semicolon-separated or comma-separated items +API int ui_menu_editbox(char *buf, int bufcap); +API int ui_item(); + +API int ui_popups(); // ui_any_popup()? ui_has_popups()? +API int ui_hover(); // ui_is_hover()? +API int ui_active(); // ui_is_active()? + +API int ui_demo(int do_windows); +API void *ui_handle(); #line 0 #line 1 "v4k_video.h" -// ----------------------------------------------------------------------------- -// video decoder (mpeg) -// - rlyeh, public domain -// -// [ref] https://github.com/phoboslab/pl_mpeg/blob/master/pl_mpeg_player.c -// [use] ffmpeg -i infile.mp4 -c:v mpeg1video -c:a mp2 -format mpeg outfile.mpg - -enum VIDEO_FLAGS { - VIDEO_YCBCR = 0, - VIDEO_RGB = 2, - - VIDEO_AUDIO = 0, - VIDEO_NO_AUDIO = 4, - - VIDEO_LOOP = 8, -}; - -typedef struct video_t video_t; - -API video_t* video( const char *filename, int flags ); -API texture_t* video_decode( video_t *v ); // decodes next frame, returns associated texture(s) -API texture_t* video_textures( video_t *v ); // returns last video textures. does not perform any decoding. -API int video_has_finished(video_t *v); -API double video_duration(video_t *v); -API int video_seek(video_t *v, double seek_to); -API double video_position(video_t *v); -API void video_pause(video_t *v, bool paused); -API bool video_is_paused(video_t *v); -API bool video_is_rgb(video_t *v); -API void video_destroy( video_t *v ); - -// ----------------------------------------------------------------------------- -// video recorder (uses external ffmpeg and fallbacks to built-in mpeg1 encoder) -// - rlyeh, public domain -// -// @fixme: MSAA can cause some artifacts with Intel PBOs: either use glDisable(GL_MULTISAMPLE) before recording or do not create window with WINDOW_MSAA at all. - -API bool record_start(const char *outfile_mp4); -API bool record_active(); -API void record_stop(void); +// ----------------------------------------------------------------------------- +// video decoder (mpeg) +// - rlyeh, public domain +// +// [ref] https://github.com/phoboslab/pl_mpeg/blob/master/pl_mpeg_player.c +// [use] ffmpeg -i infile.mp4 -c:v mpeg1video -c:a mp2 -format mpeg outfile.mpg + +enum VIDEO_FLAGS { + VIDEO_YCBCR = 0, + VIDEO_RGB = 2, + + VIDEO_AUDIO = 0, + VIDEO_NO_AUDIO = 4, + + VIDEO_LOOP = 8, +}; + +typedef struct video_t video_t; + +API video_t* video( const char *filename, int flags ); +API texture_t* video_decode( video_t *v ); // decodes next frame, returns associated texture(s) +API texture_t* video_textures( video_t *v ); // returns last video textures. does not perform any decoding. +API int video_has_finished(video_t *v); +API double video_duration(video_t *v); +API int video_seek(video_t *v, double seek_to); +API double video_position(video_t *v); +API void video_pause(video_t *v, bool paused); +API bool video_is_paused(video_t *v); +API bool video_is_rgb(video_t *v); +API void video_destroy( video_t *v ); + +// ----------------------------------------------------------------------------- +// video recorder (uses external ffmpeg and fallbacks to built-in mpeg1 encoder) +// - rlyeh, public domain +// +// @fixme: MSAA can cause some artifacts with Intel PBOs: either use glDisable(GL_MULTISAMPLE) before recording or do not create window with WINDOW_MSAA at all. + +API bool record_start(const char *outfile_mp4); +API bool record_active(); +API void record_stop(void); #line 0 #line 1 "v4k_window.h" -// ----------------------------------------------------------------------------- -// window framework -// - rlyeh, public domain -// -// @todo: window_cursor(ico); -// @todo: if WINDOW_PORTRAIT && exist portrait monitor, use that instead of primary one -// @todo: WINDOW_TRAY - -enum WINDOW_FLAGS { - WINDOW_MSAA2 = 0x02, - WINDOW_MSAA4 = 0x04, - WINDOW_MSAA8 = 0x08, - - WINDOW_SQUARE = 0x20, - WINDOW_PORTRAIT = 0x40, - WINDOW_LANDSCAPE = 0x80, - WINDOW_ASPECT = 0x100, // keep aspect - WINDOW_FIXED = 0x200, // disable resizing - WINDOW_TRANSPARENT = 0x400, - WINDOW_BORDERLESS = 0x800, - - WINDOW_VSYNC_DISABLED = 0, - WINDOW_VSYNC_ADAPTIVE = 0x1000, - WINDOW_VSYNC = 0x2000, -}; - -API bool window_create(float scale, unsigned flags); -API bool window_create_from_handle(void *handle, float scale, unsigned flags); -API void window_reload(); - -API int window_frame_begin(); -API void window_frame_end(); -API void window_frame_swap(); -API int window_swap(); // single function that combines above functions (desktop only) - -API void window_loop(void (*function)(void* loopArg), void* loopArg ); // run main loop function continuously (emscripten only) -API void window_loop_exit(); // exit from main loop function (emscripten only) - -API void window_title(const char *title); -API void window_color(unsigned color); -API vec2 window_canvas(); -API void* window_handle(); -API char* window_stats(); - -API uint64_t window_frame(); -API int window_width(); -API int window_height(); -API double window_time(); -API double window_delta(); - -// API bool window_hook(void (*func)(), void* userdata); // deprecated -// API void window_unhook(void (*func)()); // deprecated - -API void window_focus(); // window attribute api using haz catz language for now -API int window_has_focus(); -API void window_fullscreen(int enabled); -API int window_has_fullscreen(); -API void window_cursor(int visible); -API int window_has_cursor(); -API void window_pause(int paused); -API int window_has_pause(); -API void window_visible(int visible); -API int window_has_visible(); -API void window_maximize(int enabled); -API int window_has_maximize(); -API void window_transparent(int enabled); -API int window_has_transparent(); -API void window_icon(const char *file_icon); -API int window_has_icon(); -API void window_debug(int visible); -API int window_has_debug(); - -API double window_aspect(); -API void window_aspect_lock(unsigned numer, unsigned denom); -API void window_aspect_unlock(); - -API double window_fps(); -API double window_fps_target(); -API void window_fps_lock(float fps); -API void window_fps_unlock(); -API void window_fps_vsync(int vsync); - -API void window_screenshot(const char* outfile_png); // , bool record_cursor -API int window_record(const char *outfile_mp4); // , bool record_cursor - -API vec2 window_dpi(); - -enum CURSOR_SHAPES { - CURSOR_NONE, - CURSOR_HW_ARROW, // default - CURSOR_HW_IBEAM, // i-beam text cursor - CURSOR_HW_HDRAG, // horizontal drag/resize - CURSOR_HW_VDRAG, // vertical drag/resize - CURSOR_HW_HAND, // hand, clickable - CURSOR_HW_CROSS, // crosshair - CURSOR_SW_AUTO, // software cursor, ui driven. note: this is the only icon that may be recorded or snapshotted -}; - -API void window_cursor_shape(unsigned shape); - -API const char *window_clipboard(); -API void window_setclipboard(const char *text); +// ----------------------------------------------------------------------------- +// window framework +// - rlyeh, public domain +// +// @todo: window_cursor(ico); +// @todo: if WINDOW_PORTRAIT && exist portrait monitor, use that instead of primary one +// @todo: WINDOW_TRAY + +enum WINDOW_FLAGS { + WINDOW_MSAA2 = 0x02, + WINDOW_MSAA4 = 0x04, + WINDOW_MSAA8 = 0x08, + + WINDOW_SQUARE = 0x20, + WINDOW_PORTRAIT = 0x40, + WINDOW_LANDSCAPE = 0x80, + WINDOW_ASPECT = 0x100, // keep aspect + WINDOW_FIXED = 0x200, // disable resizing + WINDOW_TRANSPARENT = 0x400, + WINDOW_BORDERLESS = 0x800, + + WINDOW_VSYNC_DISABLED = 0, + WINDOW_VSYNC_ADAPTIVE = 0x1000, + WINDOW_VSYNC = 0x2000, +}; + +API bool window_create(float scale, unsigned flags); +API bool window_create_from_handle(void *handle, float scale, unsigned flags); +API void window_reload(); + +API int window_frame_begin(); +API void window_frame_end(); +API void window_frame_swap(); +API int window_swap(); // single function that combines above functions (desktop only) + +API void window_loop(void (*function)(void* loopArg), void* loopArg ); // run main loop function continuously (emscripten only) +API void window_loop_exit(); // exit from main loop function (emscripten only) + +API void window_title(const char *title); +API void window_color(unsigned color); +API vec2 window_canvas(); +API void* window_handle(); +API char* window_stats(); + +API uint64_t window_frame(); +API int window_width(); +API int window_height(); +API double window_time(); +API double window_delta(); + +// API bool window_hook(void (*func)(), void* userdata); // deprecated +// API void window_unhook(void (*func)()); // deprecated + +API void window_focus(); // window attribute api using haz catz language for now +API int window_has_focus(); +API void window_fullscreen(int enabled); +API int window_has_fullscreen(); +API void window_cursor(int visible); +API int window_has_cursor(); +API void window_pause(int paused); +API int window_has_pause(); +API void window_visible(int visible); +API int window_has_visible(); +API void window_maximize(int enabled); +API int window_has_maximize(); +API void window_transparent(int enabled); +API int window_has_transparent(); +API void window_icon(const char *file_icon); +API int window_has_icon(); +API void window_debug(int visible); +API int window_has_debug(); + +API double window_aspect(); +API void window_aspect_lock(unsigned numer, unsigned denom); +API void window_aspect_unlock(); + +API double window_fps(); +API double window_fps_target(); +API void window_fps_lock(float fps); +API void window_fps_unlock(); +API void window_fps_vsync(int vsync); + +API void window_screenshot(const char* outfile_png); // , bool record_cursor +API int window_record(const char *outfile_mp4); // , bool record_cursor + +API vec2 window_dpi(); + +enum CURSOR_SHAPES { + CURSOR_NONE, + CURSOR_HW_ARROW, // default + CURSOR_HW_IBEAM, // i-beam text cursor + CURSOR_HW_HDRAG, // horizontal drag/resize + CURSOR_HW_VDRAG, // vertical drag/resize + CURSOR_HW_HAND, // hand, clickable + CURSOR_HW_CROSS, // crosshair + CURSOR_SW_AUTO, // software cursor, ui driven. note: this is the only icon that may be recorded or snapshotted +}; + +API void window_cursor_shape(unsigned shape); + +API const char *window_clipboard(); +API void window_setclipboard(const char *text); #line 0 // ---- #line 1 "v4k_editor.h" -// ----------------------------------------------------------------------------- -// in-game editor -// - rlyeh, public domain. - -#define EDITOR_VERSION "2023.10" - -// ---------------------------------------------------------------------------- -// editor bindings - -typedef struct editor_bind_t { - const char *command; - const char *bindings; - void (*fn)(); -} editor_bind_t; - -API void editor_addbind(editor_bind_t bind); - -#define EDITOR_BIND(CMD,KEYS,...) \ - void macro(editor_bind_##CMD##_fn_)() { __VA_ARGS__ }; AUTORUN { array_push(editor_binds, ((editor_bind_t){#CMD,KEYS,macro(editor_bind_##CMD##_fn_)}) ); } - -// ---------------------------------------------------------------------------- -// editor properties - -#define EDITOR_PROPERTYDEF(T,property_name) \ - typedef map(void*,T) editor_##property_name##_map_t; \ -API editor_##property_name##_map_t *editor_##property_name##_map(); \ -API T editor_##property_name(const void *obj); \ -API void editor_set##property_name(const void *obj, T value); \ -API void editor_alt##property_name(const void *obj); \ -API void editor_no##property_name(void *obj); - -EDITOR_PROPERTYDEF(int, open); ///- whether object is tree opened in tree editor -EDITOR_PROPERTYDEF(int, selected); ///- whether object is displaying a contextual popup or not -EDITOR_PROPERTYDEF(int, changed); ///- whether object is displaying a contextual popup or not -EDITOR_PROPERTYDEF(int, popup); ///- whether object is displaying a contextual popup or not -EDITOR_PROPERTYDEF(int, bookmarked); ///- -EDITOR_PROPERTYDEF(int, visible); ///- -EDITOR_PROPERTYDEF(int, script); ///- -EDITOR_PROPERTYDEF(int, event); ///- -EDITOR_PROPERTYDEF(char*,iconinstance); ///- -EDITOR_PROPERTYDEF(char*,iconclass); ///- -EDITOR_PROPERTYDEF(int, treeoffsety); ///- - -API void editor_destroy_properties(void *o); -API void editor_load_on_boot(void); -API void editor_save_on_quit(void); - -// ---------------------------------------------------------------------------- -// editor ui - -enum EDITOR_MODE { - EDITOR_PANEL, - EDITOR_WINDOW, - EDITOR_WINDOW_NK, - EDITOR_WINDOW_NK_SMALL, -}; - -API int editor_begin(const char *title, int mode); -API int editor_end(int mode); - -// ---------------------------------------------------------------------------------------- -// editor selection - -API int editor_filter(); -API void editor_select(const char *mask); -API void editor_unselect(); // same than editor_select("!**"); - -API void editor_select_aabb(aabb box); -API void editor_selectgroup(obj *first, obj *last); -API void* editor_first_selected(); -API void* editor_last_selected(); - -// ---------------------------------------------------------------------------------------- -// editor instancing - -API void editor_addtoworld(obj *o); -API void editor_watch(const void *o); -API void* editor_spawn(const char *ini); // deprecate? -API void editor_spawn1(); - -API void editor_destroy_selected(); -API void editor_inspect(obj *o); - -// ---------------------------------------------------------------------------------------- -// editor utils - -//API void editor(); -//API bool editor_active(); -API vec3 editor_pick(float mouse_x, float mouse_y); -API char* editor_path(const char *path); - -API void editor_setmouse(int x, int y); -API vec2 editor_glyph(int x, int y, const char *style, unsigned codepoint); -API vec2 editor_glyphs(int x, int y, const char *style, const char *utf8); -API void editor_gizmos(int dim); - -// ---------------------------------------------------------------------------------------- -// editor loop - -API int editor_send(const char *cmd); // returns job-id -API const char* editor_recv(int jobid, double timeout_ss); - -API void editor_pump(); -API void editor_frame( void (*game)(unsigned, float, double) ); - -// ---------------------------------------------------------------------------------------- -// engine section: @todo: expand me - -API float* engine_getf(const char *key); -API int* engine_geti(const char *key); -API char** engine_gets(const char *key); -API int engine_send(const char *cmd, const char *optional_value); - -API int ui_engine(); +// ----------------------------------------------------------------------------- +// in-game editor +// - rlyeh, public domain. + +#define EDITOR_VERSION "2023.10" + +// ---------------------------------------------------------------------------- +// editor bindings + +typedef struct editor_bind_t { + const char *command; + const char *bindings; + void (*fn)(); +} editor_bind_t; + +API void editor_addbind(editor_bind_t bind); + +#define EDITOR_BIND(CMD,KEYS,...) \ + void macro(editor_bind_##CMD##_fn_)() { __VA_ARGS__ }; AUTORUN { array_push(editor_binds, ((editor_bind_t){#CMD,KEYS,macro(editor_bind_##CMD##_fn_)}) ); } + +// ---------------------------------------------------------------------------- +// editor properties + +#define EDITOR_PROPERTYDEF(T,property_name) \ + typedef map(void*,T) editor_##property_name##_map_t; \ +API editor_##property_name##_map_t *editor_##property_name##_map(); \ +API T editor_##property_name(const void *obj); \ +API void editor_set##property_name(const void *obj, T value); \ +API void editor_alt##property_name(const void *obj); \ +API void editor_no##property_name(void *obj); + +EDITOR_PROPERTYDEF(int, open); ///- whether object is tree opened in tree editor +EDITOR_PROPERTYDEF(int, selected); ///- whether object is displaying a contextual popup or not +EDITOR_PROPERTYDEF(int, changed); ///- whether object is displaying a contextual popup or not +EDITOR_PROPERTYDEF(int, popup); ///- whether object is displaying a contextual popup or not +EDITOR_PROPERTYDEF(int, bookmarked); ///- +EDITOR_PROPERTYDEF(int, visible); ///- +EDITOR_PROPERTYDEF(int, script); ///- +EDITOR_PROPERTYDEF(int, event); ///- +EDITOR_PROPERTYDEF(char*,iconinstance); ///- +EDITOR_PROPERTYDEF(char*,iconclass); ///- +EDITOR_PROPERTYDEF(int, treeoffsety); ///- + +API void editor_destroy_properties(void *o); +API void editor_load_on_boot(void); +API void editor_save_on_quit(void); + +// ---------------------------------------------------------------------------- +// editor ui + +enum EDITOR_MODE { + EDITOR_PANEL, + EDITOR_WINDOW, + EDITOR_WINDOW_NK, + EDITOR_WINDOW_NK_SMALL, +}; + +API int editor_begin(const char *title, int mode); +API int editor_end(int mode); + +// ---------------------------------------------------------------------------------------- +// editor selection + +API int editor_filter(); +API void editor_select(const char *mask); +API void editor_unselect(); // same than editor_select("!**"); + +API void editor_select_aabb(aabb box); +API void editor_selectgroup(obj *first, obj *last); +API void* editor_first_selected(); +API void* editor_last_selected(); + +// ---------------------------------------------------------------------------------------- +// editor instancing + +API void editor_addtoworld(obj *o); +API void editor_watch(const void *o); +API void* editor_spawn(const char *ini); // deprecate? +API void editor_spawn1(); + +API void editor_destroy_selected(); +API void editor_inspect(obj *o); + +// ---------------------------------------------------------------------------------------- +// editor utils + +//API void editor(); +//API bool editor_active(); +API vec3 editor_pick(float mouse_x, float mouse_y); +API char* editor_path(const char *path); + +API void editor_setmouse(int x, int y); +API vec2 editor_glyph(int x, int y, const char *style, unsigned codepoint); +API vec2 editor_glyphs(int x, int y, const char *style, const char *utf8); +API void editor_gizmos(int dim); + +// ---------------------------------------------------------------------------------------- +// editor loop + +API int editor_send(const char *cmd); // returns job-id +API const char* editor_recv(int jobid, double timeout_ss); + +API void editor_pump(); +API void editor_frame( void (*game)(unsigned, float, double) ); + +// ---------------------------------------------------------------------------------------- +// engine section: @todo: expand me + +API float* engine_getf(const char *key); +API int* engine_geti(const char *key); +API char** engine_gets(const char *key); +API int engine_send(const char *cmd, const char *optional_value); + +API int ui_engine(); #line 0 // ---- diff --git a/tools/cook.osx b/tools/cook.osx index 1684d0a93bb9a541a2a98eab64d055186ce81933..d7a83c9509d9a61d2a56c0560b5c36b9b8cd41f6 100755 GIT binary patch literal 10904328 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⁣E2sBnc)zXJ$@KouuIbl`i%Ie5m?BD9U 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
$n1m6%@2NY+FwsAdiQ7V?A`Xh_MW}@>6_by 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�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 z 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

v+d4;0xhn;KTALg=;UYqQW$4F* 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

dSXJp zCDV1=T4Y}-z7Kp1W^AI>5H^>jA9Eu*Wc6 zYubhW*gqF|iMvUB#ozhZuF|=$9ICx__o1q!FAupE6OTVRd3X8Z=Jn+#FWPUr2&<)yT3E-{X& z#5khP*3%uV`x58a9S!`dm{oDa3Cbl_MqD>T)?$-cvwn#+>zSI(cTI=p`(;0E=V8|Q z=d;eghV|SJus0j*7a;qzc=mzrLRQhAbIzP(GE9)#e)oRg@0a}MEbn>O=Y96)d6ARK8p!MMR+f5N1IHV7E_h29 zdc<47#ZJ-b4MR5A!&=8anBt1B+a$DI>D!M7g{D`@T-pWpocNO$XX8um#| z`JLd5HuOSgmKTEeuLb|lf(~2*J($_tvv@``^uh4^!v_POKCSu84292xM%)`Tifi#r z{4u{0pC~?s7ZA57F@KadzUx{1JoWNjz#p)8t$yHL{KW9PfEU&{|I&!{3(E6yLAM)w z<7DJWd>C7OWASs$m-;zZOyzkGb3cSOB$j|2B>qoU+gzXEGfMf%QdXzzmd}P&Em%{# zN$g0qtK1u;kG-)WbrJI=bshbbTyIgx74UxeNTGX*tJFmXeaV^AkqA9sd&gPyd=G2O zIH0cuj4hvedeO*flMyv^qchs{b8|+k)(p2f2iY0iwsfnK=r0dP3>EqsgAxwd%KY_WPchqG=7B#7|r-TVE#UY z7fIuKG5W3H)yn%Yx~-4VOIUJB8+xr5g7jLewUJ$I(C*camB;YSEc@2cmFtJ&j`XlL zs{SEuWPOYpS&t5KU&eRcJ=G7Wo{uus(;}y=)<$*J(6;DI9;V!I$~}opz7O5&Zt%(z zl*wRB**bb{#^Hh%i5)ImmvNgmyLssF7gC3mYr}Wbnxk-V5)32l1L8q1=r&*vU(9k~ zr7Q$iI(mCQwqQkIb17>qK3`uHUX1zz@FMkn?L1&+Z%CZ(U@)^Ga_Gi)*$dX5vi4EQ zr@e`8_PlbM^JH9K5_CN#=sF|lI?lYVmVAErm&%3=!Cm6-)Ir`@ z>x_ipIA7*Y=Tp z&ZPYNx>$SRRjg+!CjUO+=jwqS>0@vo1UD$YH_xsxeW`cQemU*meW}}jw~-?^wk5c| z;P2b`HkLVy4XNXaQFl*D)Yob@v2q4j?63)CBWW=978q%v;7-_nPdfsf{39VGY20JIk}&{zlHQ{h$}0bm)w%RU7X=fksT_jD_kq3!2OM{T0vr zytnX{b%sapT01g;4$gOg`y-(NQQ);`aQ1NUz1`~vKBZ5O6lfp6wjkXbycav!4{}cN zqxg;|{c(&}y{i^?thH_HSgUQjN@#8M{Rgj9ZO4eO*apw$-?K_{tx)$L{DJB?CUliE z`i#71720mv`I!6E*BnLnZ3Xtk21eaS_drucACsrWb!Cje zmk7H53G?G)&O{~_`N;4e$*?!4XDEOAiil=MrrY1l+&jKEvwP|U<=>mF{C3tUAro0A zQ}ZT3PwSW?*Zg$vRIbq_#o+JTT5F5lhp)Q#&(zPk_bqJ+%5Tl3^!-KpRY*P96ueF7 z{^Z#j_X7=h@PyQ7N0%iu%CU0v9M|wM{q0{9ZM1KEJ7MUgX1?vK zXN2Mmoq^+d@g%kw+HGg;S-aWoBUEd<4I9M;Za?!zE_vpixf0l!KTGtiaV<^2P5J|> zsv6!`auc|*m8YLE;||4dCx(7S3Y?7N8+^Q_yuh32YVv>`vHvX^yLS`*Ek`oB{*--# zy(Bl!4}2!#lfZg9;Jfmu)6M%jV6+E$>o{$DE~V`lt?H?fw7HW$Oy-yS`PUe0+FIwU zE3K$)S%QAMxZ(=;t_QR0OCwvFmOR7v(zi%pxF`$^UkD5f{WbQ6^ap?EZ2DWW6Tkkw zs;YAAK6r*P4}J}Jmp)(Dsb-hlrOndx1aNp1l|N+Y9`; zfWIQ(Pw-kS@PPk7Vmdy_ZhRur@6xIcPr;@?f;~K3tJ=eS)sE&`;6SbuxQ@`OG`UXU zdbU=zl{RYA%;))XoyE1(bGa%Ln$&QS>0jP{DfEwdxR?7~wzzs7AKvtPHN##2uBmsp zfJ^ShXH=iSJNhraAu?aTa(q6HtGI9=j>`lt@e47|E)-nn0M`kA3&wRPkW*a44WF=> zmzbYO`ZSMy2d_{zkM{R~KVs3HS#*N_Bt{OS4DaS=%iPMIW*(#Z%Pgf#AuyBu$YDq3b1ioGtxi=20`{Zxh{Jc*>%iaMDX?td{=I#;e+c_V0dp4Y2E$@UywR@% ziM0C(b`*)7VGYE-YtSE^_8q`*9xz`4K5((WE@Xen+(rV!4q$j5Fzk`J28Qzj`$}N= z1z`9M;6x3pF1>?!7u;WKOWNnyV!`RgO$k~OaGGS~5wTP5)Ucr&cQ2Znvl|-WOm+L4 zQj~v6s`C5oZg5=x_{_ef7=4lP32nm<$ZPdm@KyS!=(>RQN?={q;m-og%-a!oJ}H+7 z%(jT!#2#5hY+pE>Q_Z-<7o@K|{?d6rB*udJ^6G%AG*xylI7|GE#6Bl|5MF;~47iFp z7n|PURPY{qEiu{cUuwW>yg?6>m=oE%9gKC$2z9go72m7IH1LuNwL$I6%GITlPbNZ^22> zrLEAXTI?l)vzv(}?W1YDleIJG9oK^U9mFu@QHQ{N>~Q7v;uGPqxm%mt>q_ggn@w64 z>0TzZ4By9MIfufB-IOx9h1eAYexwgl?;5_f`d;{Qf8Tw72=tx3vxe)r^eY^1H5ojE zZr|XobbF!!OAmnG<$Nm1btC-M?rbwBf%xvf4c}D9dwlZi6UV6o*k$`*>=p1%EO9#) zUiu1s)4@y9*ZfFqgJF1%_BVTXz6NeGzOiR`-x#WPPNlEL{pJksT<)*1?uTW0-yoN% z=q-)+Po{b2a-VJ8-q$G;(Z5p*hc7!k1?fR0FOBVdWFpM1~Nh( zcyEkZ$M&SebT5kEo$=OvYNj`rd*N}Yb9>T9S>9IU1o2%l?*HQgZ!Y%^>weN0Z!7-b z!V8%1v%JjxjvU&MKKu{o7>JxF=M*B>hKUiq9(mz9@`ECf`M^MjDQoPwFPN(@)N`k5wb_nF_qC<-NvlYX`AJS8`63 z1D)N?t6iI+B~zT>tIliPekXb`vD1DE-fdf_?GPNj6@Mqm>tq9FjQW&4xIVwG8TpUR zw#w~Z2W@50mi!9e!@QdB+6KOZr|xp$JErsg6WacCvGUilhbGz8lxfVpDZy>Zm^M+r;QerIeBPK&+^zic@FOX4DdK{v4?0)7 zH#9#^92+{>C}PRpx2I(1)THkc+TqsR&*x*0$*j4cCqqm7b>5jTHILtu-tF3>yy&Iy zA4{s-3O+maE7jWlk!r2OPO+M^7RFzUekx@Af>(@ZthWVQ@E+zf*1&q!Q7QWpS<)Vx zjXv0$Vy`ZZ1@1Cl<$U=`)mQ7IF2#-lkF4f(yU>$6mk}3q=BpdDPgku!wCGHOn^@va z_@~Hw{ecCC^p)l7JD1OU27GFi8{={Anjf{=CHc8$em`R4{I&CTEwBUQ+`GA7FwA^+ zwY;l0udkGA$}FI)l$$E${@r{xiED{#l722n#)N(!b*DqGFJA2u84$fe*&@D8*CHz~ zj48gagZWBl-lCv)05^tTrEnUVDr_ zCsmF|&uO%uGtL`9`+o>(zfc>z{S(wD?f)mgbzix1vuFJ33a3lCD(%&+;~m&JzC3Aj zG5?kPyCd8a3LNg|$HurPjN{jyGdAtQoD0*g$r+dS^$Xk+zQwcOy}$ zBb9C=Zd2?`74%u|i;xvMCbeBHc@zY`&js6_7q{&CyfHY=V+=Knp=194(HMXcYYc52 zy*p)o2b=3#=x5{Y|L^qk19%j%cZK4&>^FML1V{CBsn&FGsqE$B_N45Ng?1zV%|ja_ zHtu}EkR=Q`yYpA3@8k)_@d3V}IP0B-ANz1&5PlR~XyJ1UKOP5X8g#oeU*h-8_tnGu z@#n?j*EPheBX9Z=xh9TC@UnqF$5&r{dUg3T`lzp`Io2&siv*YYfTs_U*^e(IPauAF zVw;e0{1LqN;S)2O@p(Baeg2?8GjtTb#lYxC_+Idh@H=8_tQ2}cxeVsv&P;dfL%qGz ziqMyqyWG!b@~<*7)5uS1=s$jsA8~eOb!!*0*`3R>cV&-rx4!=?dvnX&OLk?Bo9W72 z;ojir>76FFK74@>cFtpuVB<(RnKE$X4I^}v_aCYH8U$z6= ztD*ZEVbT^Cv_-zl`E=DWrK_^KHS@Z&p?mW*^eXVSQTByDD$guR7oBH(FF29 zh2jLE8QUX74~?wGwVW@p6u5O?Yw}A@aKK)4oI<0V;DO@{-Tn%2f$%#5GezJ554fV- zQIVz_?Ii8nm8F`03oqCX|KkbpJnh2sfPdE0mYQkS-30z=0{=9Df11EQx{h2-dph_> z+Uf+qIDsRPUEt-6cUId)#MVl?O|-Lnm1+)cOU80v(742YS-`lA`nA}7A@v`y>JJ{D z3z(607X6pBwSl&DWO|v4N3-&pfu%(2yNy+kK+2viyL8s$D>phfd%$U(^NcmElzmb$%-wo~d+>ZEGD=wmHdO0=D|!#% zwUfT=+N_Udec=Zb_4crL-4b^MZzFw*WR8k}U-8SXr%su};s**2MJ=t^wVJrXMtBFI zE%Sh*`S2kkrwY#}^>~I=w@Mp{wBgIb=a#%h9V5Ue_*jLjzmmE_>#vR&Sik71h3ATd z=jwvzA~vzUnEey!S+pziR@W|F8`HEnoT;(g*1qIRD`5qtuRH@UMegz_B|V;E^M&#U)x~{e!H9>bR{+O-=WigI`<@TBA=G1epJbLOj4a5Zae@wch;D+eFNf8)Do=Hq=};d`|I zA?*{-QooJ%ccVMnMx4)Z-aV{Uw~hqPwIo*3z=gy&?{a{*731#^JZivV`7^vN2?BU1TsD%{b-IWp%n=KBAi zk9k>O%tBv3Z+*K$_CUDxedzxfmaESJ%U@!w-&3m{F?vs8T;|se+Z%Qtm$akD2QPjeOy|H$e^H#3@!Q@$oYnT5-mo|;gZj@0XEnai8y08% zhOv&I4x!(|V+fCOir5U{mwoSo=fJbUe1Q91;u_%t@C%3E2G`vvJQTVJ_*3$m8fX2= zw-(&=Jb7)iQD!ClEjU?sxi+ie>Uk|jJ#Rzq^x+#V^*nUg-9bJcKL2Z ze>Wq}>np*YF|2zk^7uOS@x|WE+j|;>&+(88KjG*#{%?cx3-gGb+f&$Di(R7qBFdwu zoM|_C&$gfD`)#b%GsxuP8zE!7l6S(x;9qcs@NZ*R`y1Bp^fxq#jo<-vxbPLv!ZRy) z1^0(ac-Ut7t_{Csb@`=U73c%~FrO7(>OK9Ho`$(Y&?iWae)=WzSq`nZ;u(L#a_UAG zu}<_H0sX-`7qXP4znC9I4pa0Of2UufKiI;r@KBvIkUN;;+s8RK*V>7ZV=hF$qM)g@ z@KV-&HT`98_T3}Li~fT7a(Z8-Uq9sEYTxrp_cWufAim6~D{wEk%BU-FzcnFH*ZVH- z3)B-l_m7YR$C`T&dBJ7woy`5;Yy;pPGG ze#bY*`As6Pz1lLv{~-MCJBBR5SwgCM{k!O&#xYlMQa5@F@hz0^UJraH->e+un_-lZ z^3|L>CwkoHq`$1Mwf;5mQO7T4{iu)m*r_t^FTIa4@G^e2OYIOpk8ks?1Nao5&MM6u zuiT5j#kaVZJo)$n`uD6RhLwBYd;ebQ8*5u8y26@dRkjq^5MAm!yu;_i+ev#aWRg7m z<&TK(bMjw81cI>ipMPCt}-gVuI_&^JQ|`DPv8^sjAvOP=(bwe5rd`0i?Mh%JK$?BdYS^DYKYU4|_Z-&v6t-e*rrzrx83qdY%_5pf9oyH$luxMc8ixe4Efn?#GUah5ez0F>% z3?qMkyD_}{y&u>LmcJimF5LU1JyT8$mcNfMM@7J2u>4)91JXBHX=_WF-yYmUvj7^7g?h{(}fSWUae3AEOwD}tL+uP9P_u5jrI34dbVsspB^Pr6Wei=?@+-Snuhy!B2F*t| zEPJAxcOA&f7Tx&%N`Hd|>+NrFUTA=x{0Gl1T+;RzV$FlTspXyQJ?lIDz5efNcxS<> z??|ucxx>mXLJ@kD2Sd2;3n$UeWDTfJ;S(rBwCR;&biNQukp4u1_78*W83Y zOW>doJ)Ou=mP~d8`C7_|eoE*f@#nj0(J@GTa_symn?+`UHumkyDE3W7Kvz%_*q4jo z%`1^lqtO>2lU8=v%)Plfpf5Nz16>RC=)=RyaO9N?E9Z9D2g-1_GNvwYh1545I(aAK z_yC!eJV5mi(WfoQtPdfxlE24KuBaV%A-9fz=5MRGbo0-VTi>E@ZKr$7evaHK*X3Mq zLvEEkoDU(l?&g`ut*^4ychb&v)G?S`ENxtmj-yXDuIQJI+n{xpY+TNDIN5ldtPirW zWm}SU&{+qO(RGh!m%h}s>s<0;Ht;3#VhepO{u~**{2X#;67`f*kF-^bE=Sh999i4K z!@=wQpecOPEpv$&$UL;z*V?465WEeMxt8?w??8{_-E$t&4uRt z30!&x(Jjb$!|7jSyurE!8Lz-gG~+!NybRE#1i_1p*Mb)rZ#Z~4A6?41*7-+_SJrv{ z!YP|;(MicVFJRw_j=pJK#KyM+*MhTu%zeXRx2t=>l+7Zuog!ayEpueiRMAt72UZuc z=R{8>ynx_>BgA+J9(W(x`#tvCZfHKauO*kQp!pIT$z{w}#;Sh~Cawy=L?}EI(N@QO|GV&TSMIz;}0nBTCTq-YIlB00$;+a0GBeq5%iNxIy9- z^<^dvOaV6t95}%ZQNR;+h%SMHk}$mb&DVv8gTH+?5I1a-wYuwz!a>TuUxFJ3gMZ7)i7$nRg#|%#B{(6QxvIY7i^75_w+#jhGil3x+y5>sWCx8;VBr|| z|2$3@C_kJFCkQME90*<546W#1;52YTMG#K#88|_&_ka`9!3n}M`1*JT3on@TVKBUq zcotqrG+-ed&+y2^@UZaKnSprWXUtW`^@d+#}{ujVP zG5mtyg=y!37ldCB9`jN3sVCtT47_lMYjY7aA{ZV%pGG8AiqG_5u#gHYbPS*o=yRYE z;qby#Vkv4ve5}Oge|yke30}C6xoVq!ez5TVRpERpOx%z^2)}SO?Um>L^YCD`9W3*U zOewYoc{hRU!T8DapfL-4yvO}NiYufIR}fDr`i5fk4FV%q0VDEWbPngj8A-s&qffY9 z`bzf(>9@$>b?6?Vz#*R;g3*D<-*@avlq;@7v;AKq8w z<(_^VB6Ii%b7<)RiC-VoXXOYyxup|qn%7%)=2UN@EH=Iw(j*xa%oM$`1vX1Z3 z-m?EDH%_?ve-Kjt*Sf_7-jE=s`p5VB5tGb|LkOe)BK1 zR||c%e2DgB_mRoelDQR`I#_-Z{M&PS;6C~d{d3xp zFVC@uf??bB{AY%5*?Yw49~nvh!&J8+-#V9hb~Rn2c8QEBw!0>Df%Jc(#L$52O09Qt zf1Ghh-wMgeyaAn*=%rtyU$UR&TK4yk=odbeeA8O8)fimmo_A>LHZ-tVozv7$9e)C zq!~NmmYBWC3Fx0hZ~rs;E-?&pZP5QPeb=dnoS_^sL|gP*>;Tm153aNJOz#vKi&Imr zH-{Mu-yIZviW8jg;ajP*nS1G95jrxdugQLEcXMbC2Kr7+33)rNCC+3P@g~<0cQTXs zlNrRT6f}2^&A+Q_eEXe}hd@Vv%RFOmHgcr-%f(*IIezz)^)$>E`^0aCcps-sw_k0{ zIu#){Lcg4+*=rwqpmS{OUETBIs6U=|5{PF>B%US0D|20lkEib)a)Zd4hQz6a#((JK zFYZ8paRc*OjnCE*zBj%L0}JExHR2zXxpu6twRW9+6V3cU2IjkePbWMgKAZ4qKZ#F z&YqX&;I-V^MbmSBfGyFur;i@mjVIQAU_X;1rJr(6fYDFpVI=*mKGQpS%f;$wGj>M# zUh$p6ud}^4BQU0GAK$l;|3=otkw3jYZ>v2w zg|d(E{><`Oto1dl`ApV+1~5cLVUeh)P#d$(s^p6*@9 zSu6`{qr7heze8BJkN@*@gY;k82VZcmRP|^(zw$1E|7U*Ad)6a^XI9=4+B5nuHWWwA zyqr8@>WNV=6CbAv>>;i?lNLy>1gW=%Z@-y!xKngeJ~ZaV#{AgX3q#0t zsChpn#_$9&hMy2)cruWiN{@E?HBIv_V0{XD#(Q7+>FI{0w5zY3mxEn#bb1W&wZND* zLmfyTPK>S4eERF5A38WWPw8EmyqC6*ylKw!PZpeRFy0TRpYRElfqs5tLZEK@ylxHK ztHiE$vmWkvH93j;Jy|lYq%J#cEF<@e)G4v!Etj5dn9sXBgbdR`;pXKndLKqg&Dv^0kDzJUiod)ubNLMNXQAIY){_j;oDPZwyaP2Z1*u&oO_vTlw+Ud%JZ?N6kZhEuQw` zy4G?Q+TiUa3}`PG_=Y!HmwD@OuQB&4h7(&}eNguDSo+gF@7K()#yoR2>~i)U`&jnc zr-8k;5Z@#dmLzXST#JPR&Mcq7HwAo~&)WQ^Y1=l|B^V|Hu=K%CPB$!Ky$Znz?8PN} zfZ;;c&cF%mMd1(U$3PE816vy9G{-)j_d59pyX;f46Sb%)Desy+t^Nf1!IA^h>LrJ_ zYft^A;u`aOyDaRalG6~IlK-wuckT`ReiInHf$MJqx8&9HU(atPuv<)BtD)OZutrhr zw`|Ier(86@mryR6>q{sb$#oRJvInIR!sM{5jSf5Q@^Qh+q`fJ$TViNkEnPcD#6v|#N{pR-u`tVJzZ=fG{a(x%S^q;c@ z)B(vy_eIAb`zM|{%>5H@?4NJ$Z8=(>uj;0&K4&hXJW>q9?N zPJFI5M`)9}H*J#i@$>ktQ^2~!$~i;oileT&RoWaUb>+xE^(l!#Mn&&r?}E1QFY(wFk`Fn4ymvz7qMXV* zlIB!u!&{D$i&Nr*N7X!<^2b~ilWvRY${0p|igAJkY_dtefaL znryO8iTj$E<94}5Pub43Jg?(l)?hE~NLg72dw`~|X1r3@=kb3cvm)2-7rFMoZZc$t z{gzx?aN_f22jP(fUYsjzbCM#k*ol9yJG(EIQ}{sq^IDDPjs4FBhLU)$5$CSxd;C|< z7{16nH)P2Q=7_OX)-kq5)P5~_$hoxlWpEE)^GMFH@cfW?A^!s&!mjV0k7U>j=z?1TVrpc9m$(3R6)_H}_w&~OQ*s9G9+BQ{?C~I7#O|R=bSiy1Go7`P`Yr=bWlas)g?^mm z-uPDa>!$b)m?aie1#m|YZVBL(0}kt55MGI=J`1n7$d4oUQpd~8VQ@~zN%)p~UMOsB zM{eZ(Iz1-A>&jF6okhd^VhgbRHZ$+`H%K`h++dW`lFV|~4;zr5(kgG|dW^l>kKD8y zc|dvh7TCyXp6qqH+|5zokIHfG_2Z$9Lem?8jXLXnyk0Ll6L|k^Dnc2t^mVFnNuF|4 zb^yagz<_lxd72zU8jbUF9kxc1-&-wN>iGZk%U)loZHIZLvej1Dwle~4j~dwaUuZjc zo-LX(nfb0|9-I2+dn|IZHejxQx5VEdWyr~6&UMv=UeDJxV2JfOFwW~)6u8d3*z5Ub z;JV7`^(+ZoA9Z;>-?pBQ_j*scSTK757O z^N8m6Y|2L`3eE9O_Ev1t$Wvzf*qLcJ`{SMJ^*kOZe>B(Yxi4^Cb(Pn%MhgoY4_o8& z_xtzO1)dcKJ-a{fOb>dtI`FK$yZ_t!tonkU-D}ks^z2(!eL>GEt@=*(*Y|a+zMyCG zt@?tV-EP$v^z4?vGnu12=E!%Vzuuby@0x<1l?0x7f}UA>XXX-rV%d4Za5eZX-2Rch zB6~vik>;?uti4hAPu5#ENWE8`XT9Zv^w$BuVfEMQ>t+9JogxDV=D@0R?0MGNHb_5Z zJ{{x$iqxx1^YED`9)mLj*9Pa)(35JXA*Uk@TW}E|G zYr}1>dFV2$!Of4uTRT*ZiJz;@Hmx=I`+2q%x&}6AgUz9~InUWq zKVPu^VA|tQ_m@V(%Y<9w_VcVibPf9Zzpk(UDnh%JRGv{Cn>7+9{5qoW6znP2a<`Ixo6R`Zjq6Po`~2OPtJJZ$9_wB;l&U0ob%sW z{=mHt**l>kx7&xDNIt9sCZQXaa#5$Awxv3tGBFGoHq)tj&L_F(co))?Q%}f;JNZX zu}8GLi+uDc`s>5>Hka_}%;gS0a-ef${w|$d*$ME;?MG(#GpPHpJ(=9mu=@Y8_(A9xfUShzB&fika9M%sBBnX1+{a>?H6HKj+Q)%M~Tr*}Np(JM#J zslBE!O4s6}uAA%Gb)V3%T5qZ7-JRM)DO+s%l3LDYbY!kAEs^KQkRI-f=ia-^dKWcj zUFq%-o*lnFdrP1$Cy<=LGHs#WOY7TX0&vRADuC4P|WF-wa3u2YvR z>bs6#Qk=22bUI~{jB<%foEZ<4c8*(z{koR#l9n`conX|LvP5sYzce+XHl?uR{!*Ra zEwS*Ocb+tuAr2*IetLKiZA_Wv&;`KGr{-`*!8 zx1Y{1`Xt|VK2hMR$WpF*$;EjOd#W8>zfR1o=rbjTRws7WGa6k5^Dvn0p8a9ighc-q zYU338py|pL%O2A+IMahY>oIf;TBXE?lZ%|`S+=r5VsQ1tS?G|3 zFV$SKH&n#6{=@0mtoHwV>37)UwOQDpsr&mwv58+K{$-9-jkA&WkbhBdbZm_#cH5Sl zWj~YGQg8zD=e7=e_0?j}#m?b1=C#w@qcS%$(a+ppJ^~!CyqWY(;&n~ju&(sun+q#XO~xVo`~s>0$yp|i4Oy$>pkU%T>KZa?!~OTJ5#x$lm_l`M3rP} zE};>jFmU2nL|ix<$8qe6pMaM?h5ny_{)?`!o4%zdn=qgp)kbc-!#vA~u9+SR1ES{@ z`p|`zhzUE`NZgn|Ku+CvZht; z^~vyN_fgkvGa|it_Jl6sV`@3$P(`%mUc@(2cOmEes)+r$S=@_`ayRufqRSRrtlYmv zj_P{R5r>RjV0f^xpZPfa*oOy=y*_B{)_4V9q35iZb(Z((%;-)?8mM zF!r?YX&vy!2N*{@{Tj?;V}Gzc zL&}IAy$E<@9R5#7R=1jVH=hrYL1hWqmjPV6T~+4ufmx#hyDpJlJUJ9^zC5s zj=<|Aay$wy8>~$5nP;;9Ec|vi>-a@+oACeE*=XTug(=Ve2QY5Z-q@ChxVCUp7x+PN zQzf>IYH-s?#%ka(uA{jY+_VQ>$8+GNUx1fne+sSXwdq|M;H2tB-8nYONqyy9_kI+y zQO74ra8Vn$C>`9@@e4T<>TLTfa|W$E`+3G7&(ABz_lul86ov*hk5ai zz!`_vh))f;9bR`gJl|k^q2<$g5p<Uf)lMC$L z1b$z8fiond)J}mJU>!arsYUoE*&FgLv{CF{JdZPZZt$xo7`LKV`vYs%xLoZZM@CEI z--h0ZKkzoCZ2W8dV|NhS8$4Ms&gING?#Yp9)SYOwDeZwj*q^3vqxkAdU*vf(9=sBG zpGV$xp}%gsQUCTqYQvb$ZzA73|x-{T@wz zKin6D|k)?KQcG1d!y7;Yi@xpqmSQaZe?D>&EZ~S?!wPe2Qrp<#!PZc6?N!= zwN=cgi4(~U<1%b%e#cfh+pl_bUZ0Nr zn)|DkdAd`f$wC8#Pg>5i&G2O&WWaPSwyOr%^$_Fa;$CTPe?Ga2q%QXJ6i=+%@L|@$ zcLIA(X`5dMZD#M0{5a}pr~ScAjwylXQLdJnQ&A>Hi=c>&JV` z9%auPV+iaeW4+~!6=17zK0FR%IV<-`lJXn-s~VUmpNTa-*&o(EaUC}I&ym2sax>S4 z{KLKyS>>ew%vjHZWt0JHFxTB0$vPBG1SSHofUlp?PTv{g{0#5i#kvaY%6&~#b?JND;}>wWX=wE( z=x>+){SBLZBe6q^k3I6k=E9zaUif?YWuhVZ4`RY_?F-B zUiO>S-XBBS+c!viv9x#hGr90fu`R0tZ9Yv|-LCfeZrR=J7T*YD@9zZOb$nxYv(d+Q zukb2(c+Cbg+QO;uo#=Mcl7l=IiQh2zEtoO%w?|4sNYr@}F#*>*e*;@dd6bwoCqKo~|`zF7);a~kHewUB6c@t#cE%$UwzFDCave#rSb>dVD`<}-d z&xI$K=bn(~Lc5ZPF#=|ec982T6FyGLiQXp@|0kKd;P=AInEt;qUeO!GwX6hA%{_Bd z_a{+m3VsN2*1e2F-+DX#OXN!=M}~3#*zLJZv1-bC%K7lGNs6E0@BXNFM=0Jf=zRbW z%GjC~nsD15z=872lr@rC-URPP4^c5&9OQfcpto$xnUPgZGqeL^fb(ebs)gd}4$ieb z&i}(7vR+fw4p~E!R>Zb!=9ve0#Mh+W179KSI#@?1xKZ>BPVl0<@1!5X*SyajD}tBv z*~m{03_QTN3>c~Ihml0Vg|Y`a`k%$YGo1XecgI<9vM$YA^*L~|7C8Cv!Tx#Q$T>)% zZOZ-<-nG z9~Vvzj9L1+b;ghbQvVF<_t`VD^_A&!ihw28V`F6gbA{gEJC|F|IU5FUhF71-SwbDq z2m{u6Z}s~Jk z@rj+l(RTLasFVWoiW&6ITX!}2&8k+ckJTLephMp70dpVQ(zH-J5Djb|=G)JJH(7(G z8Tk40OrwvP(Rtp-nS-Xa+JRUDSI4&GF&8R@T*}N(;c)1O)^>H1T?3b|n{J(3&@@&% zkVtv)?=o_tW#V(pS?EW|w^~#qx&H6i5L@Bumb&3V4q9zFsaxt*iR6F;wmsk-k?kBK z1NjE;m3)JDY`FR8%45|7a@izw;g4PR68VkX|mS z2wh~{ZpI_@RrXVbEpZ?Gy0Pb)8OJpCoVCZS{pIe<^PjLUVXSJtg>i=NZH3r?IY5%Zyr-Sdl!ya*=XO|pG3FJ^xz@*jYnxHnc>+~VCZf9UT(vHXmA9HWPjQ9hd&pbLm>@BOJZrOK2li6nh z`fyWs7}4~A zk3&27NY^g#syE8Jg?DK~f2Yc)7*i+4VWYJgXgXcDZ}P zJZlg0Y-X7H%ELVKh3Q|~O`Gepn}?>+KBsjZ@OX$N+=x#S6NfUTfJ+=H)9AfV-dtB4JA%#82&;!F-{K7Pqz`{ zq#5U@ckr7`{gz&_HdwC+4S~=1E8%_iM|j_yY1+_`LH3IbA~T_KGc5lZkv+suzE;LFK}}i2Ilf0;K%Y=#QB+|5EW*YNE-0ly7n{1?EVA@>olS?^)pJsa||p0m;?5y_W`ti%kevz|}?Wc}$c^5M}g_^Hm8{M=?@ojV0Sh?94m zs$Sp8_(aZf?5W$t8Ofs4-RHYVYkr+QBy}fhU+wPXEY-Jcj;=NEL-MUlV$w1>1GX$F;9(+SD7E$Ieapxp~N_<-kj40=#H+e~jy2FFxH6uB{j0 zgN|gki(2G*VrZHV-*;2DTFElfbAeqA1(t;6H}{O#buv$JQqA zB{r=a|CG>vH!_xk&~(P;KXR!%Hwqo^qRf|4j@Yxai#2sc2{z5>sC}F24@Yf|9{Ezr zgNGwi)9u=lMKKRL5nmA={c%lupy&s>@9n_N6|t&HEC zeulH-)yM0d6Kgm5?fO0g=U#NW!S_ghZW4O8bbE5w_XHngqT68HBCE=E4fE`K2KfJU z)uB#_b0ja!qFp~a82P}H$BxW?{a8!d-;TLfzO-4M!xpVyo;{~ z=QoQk6L{T+Yns*n!`p8!|$ypfIciF(S#8VdT zsRh3EeVtk1Vf*p-4S$Bj4)$5_o*pvV#1YkpIj4YkHO$Lio{0^i4!r)!-320_toQ7ZjFD}*ZQ#4pKC}Mn5!em6HtJ`MGh)ei!29EY_l=w-|FQKR zJGkU=k$wx$EWeR~Up??Eu{rWw;2qtC0RGD!>bu$iiK=-cV%yy}_8+;~bgbR(@jV`6*5>=MC^xkeC z^LGN=t>fQ#99%q^bDeiE2I9vKa%Qu)ZPBS5$XIVpHR;!B?k)P|1m_71 zT6E#2TTR$BY1SBHd_9a;XxS;sLF@f8=F5z^j%$(JEzTgC<{Zo3q+A01YF~h#P@-xb z3tels_0u)+e-d4w%uibyI%IH;uEo{Ei~HNxpH0`=uQch}>sK1QN2~rhw9N}F-lb<^x#28&wvV|GdRB)nOmKTRdUga}O5|;erU@?-N{jZAW8Sm}CbnD! zK6{kdKAAV6dk%cBk3jpx4)g@=bwQ8D59yxTWsl63d@>eIih?Gs7McXEo2QMb6q-~V zQJh`u;6H}{O#buvhbBo~HtOo9NlEp@k00p6%h2gidRjz($ZMP98Fl$or;OnX(5xtU z%%X8oL3C^UdC{${;E?ciOKhl#E%9GD-O$&+sLKty<&1I;pj(ZcS!vNNH~c~oFgJj1 zwO;70M;3mHnBQQ!C3&^O(XCwpx-}IzpBkWBuZN{u2?OZXCkEY0X}RaZV7e6-mTqbI ziT$hT7C0qN=#=0-;pYXX3LO)@tC$j+{^a26P48J%6G*bmxA;K4^lb$U4fi!TgfW^-ko( z!M-~$e;jmbGIzDu4=jJsrnO1k9o(zN>3#Mz=E2V)VISu{Ve_7l+)*|=`g81m3+>*M z{GP<;rO}?)jc?Ho7xJOl{4>D+LWA}OY(sJ{a;(F6Z~DZDJxTPTLR00v=(~-af9S?@ z*r%d{s;BnhR@gthuu0&X`wx=`5dS(M3aFTFv?H_oEY=GBDgKzJ2H_N()Ok zSAjn4ym4}K6ME4K{>7)J8Te8`J~hAld&I^a7s6xFcPoZK)&SbfeS$%g#jd6s?~{!C z#QYz5vk;O(T} zmd)U?GI2)qg|7|yqi z_E)F7@$XMYUN58{0!y88_RYP?hMgxKJ5TG{Te<}w+zs!B?RA}g$2H`pG2z-ZAKu}( z_ROL$e?K7K%siAn!`1Z!>-;A0CvYbBZ^MJ9RNT#&gr3H=bY7}9mXotg?pM%XS)(!7 zL!Q9S=n2?-WUXXeQv-M^c>as1U*_Mm+ohoA7}JtNIS+7Bh+pX`;IJsf?lc#>6TDr} zxf;n`SNe-ikyV8!ZdzuhT$-(2iYvj3i7j)KQ4_Mubk33qZZY>sIeMmti!obmg4 zuvvJrx9peH8w&Sg(|U)x#Xcu^?X0t_Gc-Aa+OTnbUK>T&LS+8GMLXh4CH!YH_MXMu z*M^z5cG|V(O=$2s#v^?&$CSD+q&>riCGV^`)X^(!r|zb;a}2vnWSD*ZtbGpf72C3n zwk-N8ZQa{9cX6NFj48Ztw$j3(2EXzTP^^N;^}&VIlGR3)L{M4O~}3{Q`GR z&Lb>gPf44>?`H(w*8-R3IhUqyN-Vf|btHcLz&t$O`f0#fx15K`7dNv%7Tt+MCs+OOyzcnniS=8V$A{?y zIRd9F=)Gfu&|vZPSj;?;2jswVdlGr1lDozur~9F6Z!^#M?Nut;G3Eh#xC1%&2tGBk z&OtP!bjOYNG*@8js^uR%86$p@dy7omUwaO`U-&o4A4o3jwYPTHfjfi!?el5(e0*lb zCe;IuGxBP%H@C7^Py9FjQDW~hai5Vp=CV8!_vItITfXhjysI|;`CZXBrguwBN3UJt zvIge($GVar%v>cqW=NMmCADmI>FkDOc|~goum_aQ*@G* z;3}E(hUC)?cY{~rfsZC|tq&i{Z-aL|i|)-y|GrlBKIKFoTRV&xC)V3~z71I^{V}bo z1Dccm2XYCr=01EWY0uk99U3%hYoL!u#+}_q1D1lyE6sg|{5GH4?=EB_>30SF4(`uW zJWuy(ReQkc!Tq4#=hcrhMyl86e>E^qXA)#im>ZF6Wln9%obeCF zCVT6~nsLVY$l>BkCNUzRdo2@Pl#KDr@?z$$h&e1|F0W-yXCdEQL!Q`~cQMz-dPp7j zQTJ`sol1-{JmNYMB*i)0?BBh!S|j-_{==-+&L>r~4?aS0ai;j8{5aN&t@7i7_R(Ja z+#BLlT$I%}Icu&sQLit8=H7xnxp27qjNlQSxaY#ktGX*r^-gvs&Jx~nk(+Vkoyn_u zN^rkJ%}&o%Rm9Ylbw#P|mHFem6=!-!En4PT>T*QZXP^_-=}+Q;p{>5p$`45&ov#jU z72K9boU{gyoS=REM<=kO`Cgt{p9F6Vex0rUeO~uttk-jf9WAlt5w7LjySy5A)jsy0 zd|QlcpQja6Wu_qG%euUJu{SS9<>tX7^nRvQc{n>$_@u;FFV6iF^OG0hu5yblH`86U zm3Pd|nZCIh6KBp%VVt+s=-a5OYH|SPX&F_bOYbGWpS0oJ$=b))rZ`#eCf3^ntw{iu zZw8j13xY|l57rVkccKGyf~zceJ@t+WuTgwg!go4)5-H;n9``Jmj0(VH)MiIvZD}Vy z@&cnqU!JB9_#W!>r+9mzU;4-3fmJIv5I42og};Ea!qdH+u^g7?^!0P$^QO6uNnGo14Q)LM|I{~!*9E@6bF}y2!1sIJoYiW3YgVf} z5W}8zw6|d)b@hF-bhLL1`VmhEK6ikxJOLaocBO$hJhtVcq|*)Px?_CAhy};jZeiX_ zs9#`CKQOEHR@N-(i7c;UyxZl&#^)f0K*rJj($Ll};4zx(hhCl4TB${s5JOs$$bHw# zLt8t?Yt6pPg2wjez~0g0ytf3#*8UQE?B!Xl*x6j-OBcKrO~Mz4tc3xiz>nC9j6KR; zjiS9u_G;I~v^PGez1surt&8=>Q+MxY=~ciQbDW1KOEpwKF7^y2;fZ=#RkQyJt)| z-^@3^d>i>E5Wnr1SlAjlr4W1vkKxjcI9@~M+G_V|4)QNVz<)qXgX4s^e$<<2m2rSa z9mwH2XL&mLHE3m6-o}jM5?jCUC#%6T(csq%v2WZI=Y4y6PeTj;z`2oQ!G({cAqSB^ zAu}j{!YjaiBXr?={CZZ!rRpnJZAhSh&{y;^wm$j_ZEd|-@Fw z7K>lg_hbQM@EUoJ^77u$H%yHjohJEt61=P_V^3Potx~=eTaOb z5Am!X-<3fedk5h@O07j@H@+NN84@s%29KaHa1NqXQUNsQ6sQ+j5aYRgK~M%|gFob%Ikax-~;uCs^8i;fI>9kKBG()?w5wYE%efBd4e697UfgFePiUG@y6vq>Sht zeawxN-^+jSJW4yBz&@Anq>t^i6%5nsXiNHLwijo#=aaVa`wp$Qg1snZ+l{pdpEp$E zD6L!=I^nI}{#x7<(1pD7($;T%pI3 zf3?y@eomeL_-pEJOZfei`a?In{c{r3PGdYFcuw@ex(XV<=&)+mls>@tJK{~>))UBV zq3~?@2Pt?Z%ChER@tmyHxnSDRRa1wx7KO|~xxh5OIU4zCDi5>1Urm}L_Rj?I869Brv^-K|42 zh{M9B@^2fkLE{^9FW=OnBZM!QEcr?W7f)hNO`VddGe6C}0YjX(B``Dqep!cm1Mr)) zJblh<b#@N4xk zYU#u9N0d9jcSn8HA#!`{mj$=UemXlpK+obC$bJQPS$P6<;4*kmy?N!pJ@wTNwXtXM zFWE~Pd&$OLva^>sw_rJEdCV}+@i1UM2=5zud)Ys#pU(H~Dd-dX$cX(DTy5cR>zUyH z)Od1h05@V6Sw2>IS3i+;)Qvp2bkXu|Vk>t@tSakjz|0#4%p|w`lszE(#K805ly3qv zwag(tZ2M{hFeCN#fVUnCz>DBFfs=OLOW9`rtv%MnGijp`d?(+?Uiuzw1mo2&_qCC1 zw9zi@u@<5Ab)pZE`u+gi3BHzk1>P-u{hg3{^FrzkhIb!*vGDcz^xqS}*Ycgf#O<_Y z+EvV0+6(*IN<8Nnion$}hBM2rVf|+U2Qz?&0^lMaeZudI9CZWvA+047`t<_?_dw@< zubvO)FRWa*Qf32X)bG(TsT|I;*<;idE=PeA8>q)2Hc-_fI*Uipv5Eal@K8e|gB~va0u|ddV$5h=v(MI74w;jV|HF&y zJM5=r65l5Iy+!}W+?SGMXmlmN(^ORb_#y7xd*jvUFUO=zs^}RuO=KOT%xK!9%=j?n zT&IUk6CO_LYZ;+NJNYdMQ?AoLY?@0~-Y#?(*_u1Ih<2K@QzkVjHT6?+|Nl4eBj+Oh zmS1PI^0rV;r(8VcrsStg+Rbw*cM==Puep{vGIc;_=T1;h6&f-`$%C&IPsPah;%`>RJj(TvQOGt*RkrYZ=LM?t z`rAj%*|st&^@i#CoR|5%X^a{@YE@LKwDpmFZ1zYsGOCv~W*?B>+Fo+hKC;D)Or?#{ zN89+eU~+V7!3uqjo$nXsM5ijgSMKQ4`P0=TZMr@wf6S;!`JAsd5gVl7>fnBD1y-;N z#2p4-U$%7B`s(3BZrIBIQG5np;MYE4$PIaFWY-?_y+i&sWbwGatHs}a*S7fDceTaQ z;HvAjnEDUt&rKEYPmdXzvv~B-%NNI{U3f!j+PE7gkJ)-d*&~fNOys(B%;Ps)!SyJv ztHwNWLk!oKQ{H>C^Tvs37g7FV<6UXmvp3w7ww>#zZ@8)Asp$_Px4j&LuQ~l}37XGL zbY;Rzf~QNA8d(zBw|x5bw)6}8?s zHLS%?Sc?MIqJXt{g0+~zTC8O)#?Ca(x--@yTknSv$&Dkj@h8L%ZW-e_hTL0*48C7) zErjo}l?Z)}VxMQ@!(NQ;CR^=A4c&Mcozi8t$dWqQx6IWVhduQn=IMLP(aQqs{Es5%*r?*HdZpa{ zvE+7~IKq}1(>}3Y>?xxnN7PS@92wYC5taDW$q?W-??^qF+x^b00 zXH7vt)WR`Iqn}t|PhB`>)aVzZhommLT}^t2wKbkc$EGe~O^e5<}zJH zR_;T8EOYh>cciD)wF0tLd!{F zLEE7Z3ED3;Mr!y}F(V5V44(NwPXI=`TGoj`7o;;h*>PK)%3`+t!-)o`HOU65GM{%#L{P;Vq{dYOu>>w%H6Foyg%4 zPno(~@vXr&Z=AE`5Zx`Zivv6+XGM{(@WA85tQ8cFH@;i^AL5rKHl_Z!v(PrNQ*1Aw z%}mN&)o7k$(})jGt?*;;kS=gU_TJjo@u#+wc9BD$vu7%w1W(jTtlZoJza8E?Lu^Yu z6TBMn99h)!)4!tQ3Td}wkBYhO#Ua}t+B3@gpcYv_ey`qYc8N+9uack;K zVGO=tA>Uj56n;kfI^~Dh{e-VP-MjN|%ysV!a}R``AtpSLK1%pqeBqcUhwkQFE=L!1 zscaGcmie4Rl#Ok(n6ty?adsH;V43*)=R=dEtsh;>yo+z_0NZA4OF6#c9{k>|dd0{8 zta{lKW%HFczDDvnnQcm4@wC~Lg^%_1&~p0GXmg(torRGJoi%vjGKWE<-# z<39O=)7T5})ef{R?OOF`3C&0!xp$zG!G2R!!+U)K zvMcmCopaHuxi{LYHrvamy+6?&>vUNZebKR3S!IRi@Qrn&gO)rj3x1S|->mdsMWd^6 zFG!QQ`+vB5^Y|*N^YMS?-Yj$P%?jCrxmf^{K&%P^!G)W!g8^8a; z^?Gca*$&pahp8)8%lT(koGAACeG!3CpT)KE%sOUXYD&yW>~J%NwNvjaep={0S4^ix z=4v7r(}dn$$kE}vbIr-eds`ouxtdw0jK%HHso)oId!^bK4;c%YLyOO5I%C;2&c?V7 z1CC}H(ncv~2{7*M{|sPU9e^(_jIqFZv4J;&CuuS^XBl(HKQ!hs4Kn68{u5&!gMF?9 z+>&|A&A_}$<`&Ft{B+!{XPax?z0G3;mL_ZjF7d!uU@q`A@m&SJCanp4Gof9x@1?x= z?*U&wugIo9z5Orn6&zEcM{7C419TXN`+306fuZCJ6-$3_<=cFPF%79g-A?L)WLe?n#bliN4hsU=VOaY`Y6m&gxgb3vC6hryptms6)HTYJ{oEl15VO?gxc&-jeK1=g(st3zBH z9yDaSC#XxNM>U+3bva$;OF17Q(*oswD0y@l{}0Ih*$?^ufmYtu+u1)}ud{-5KkT~u z5!hZ+Ryu*T$jYhM2TfU72%Stsc2shf-+FMo0-7LTGv|J}+JNU|ffaL5J-<#beACDe zE!`26m^ZJLSni@vWL}$`>*ovI?a<}UXa3kvLi-7;yJ<`C!Yn%<+-?KT%o&bqtPv`~ zo*dH$N29&)`L6Mkcj<>y17{3B9mS!Xc9bf)@=eOr_~xNL!5`E1qR&Uta%&yy^L@^Z z`92r({z~T79`(w3E%e)wrDQdW&SQx;{o$WYoyV_}n`QkhNHKIFLsv&nX&a>8CboF% zS*KP#h4U?Gm#1SLGQ{L1F~G9g&>7N1|3XJFd0Nb3p$mV08}pVd=tuZh9{H-sry(PH z%e#Sf=oIpr{8RJ=ohC~C`og?1ejUrf7>d47iZ6#%Unt?-sxQd6y~Vi6`O3Z3cecJP zxAtZGx%=X<_QjI-yZSOdpf72CdiEuicWYnr=*wFA;;{C`Qs3G7vclRIRXyjpIIVrL z;ofyw4PCZ3JU&GJt3{4k%19Ic;9m4$hqVj~{-l%tj({>skM&-L z(^`gQ+@_I#RX`c*@uBLi9io@_2CoM4J5w9bNSl{0J#`@k|JeIw6krfwh|5?&h z?4X|Q4<(gjN7|!CVi$E`7xgAF2Xwh?;Vzj^7V@5@Mo+|_jI&+WB^9d5#Hl zo=5wH$K(X?ic;d3_C{Yl=-e_c)5yOzkVaW=?X3(ezp=t&1NnawP{v~MMec>)2%X1@ zuY@rljW_s3r$v{D2d;6zwbcUG7I^(Y3tZ*Bx4C7j1+I4hS9v$#dKP;^mmCt_{ktdr zaeG2M{Sp26$nCn{*cMIAt#uCIJP&-sT=0?4Y;ms5wiwrIsnF_9&jN<$ zXzQ<=myKTI=N)Ia#R+e8Am_4?b4QSK?B}hR$baXOC7-rJ5t7bjD2r&;??23mn$^gRW5VlYoX0J_>si& zFzG!Gyll4UxXl(_D$c;;1K{xn*1W}zB0BCt<{eGsv+B6ky!o_u5P5a_HtcA^e+JNh z*_U9#K;{@`dp2Numc4{ly_mLi@sn5bPChR0Cf=9Q9xFfLtd}$RiG%vA{Lb3O-uhn( zyrf^lEi@_bLX#JhcDA-X6wtQy=wH^h)$wlSbwZPe9{1B^KPlIu(;Q@dzBe9Y!m2uQoehBes20! zn0LxNuQysB^c}SR<$J*~XQgj!*r}>P-`KE)zEiPbn{@^1&)-$oyVT`?mlVQF3gIQJ zwRl;B-cpDTHX%R_}T=T}tGCC3{nT_#O1Cz8AdeQ~J?iPt3ld zvgGCC_W0~SfzM&AtuA40n6;@IS(|!H?OvN|;(Wj+&gz;#-*$5zTGLCSPsTP(p{#c} z7i~Xhp#A9+rCyh**u9_o+V8KUG2YGDif<3~0goE(yKPB5_Er>t--4^1#G5^w;lyXt zg+EakensK<7e(M_6p5c%6h50lwc*IHhHZ}&ugKVP#~|vefJe-_82_Ktx;x4m^E=A7 z=XX@7RlbosgN{zw8C83g-R0fGUXGcL@g0Lsm+Y@WSDk(Bqs7-;yYUVsld~b5*uwD5 zkoEqLSj)77>*l|IV2{`{!BxJ^YLNFeHL^`?fUofVbM_)mwMVw4Vh?%--;rm3?x|nL zTKx`X$?A`krK|VD6aLP1E!RC<2NYYyZ=04RRdTk|O*Qwqxe6{6~q<56yiRkR|mcZx%SY)+{%dLTzg;R9%I~t^m_+>0qjx#ay|OmMq*yPYYVP@ zO$li`h<)@i@a~s?Td?wASWwY4d~B9-E#vuD)ODP?;%)KX1oqh`*c108*yHxdUiV*L zpSI=(;?zCqNYwoyq|D=#nQQl#+wukbZt)R2NgKx|S8g6Z+Ov6MzqDDqxIX2IN=ciw zacy1EF0N0xqMoWN+So6h@9BI`=X-iD-!u50!S@WlXY}&DKi~WFy+7ak_xL_GdDP}$ z>KGrt}lT{OBk6&#ncIYk}ih;OM`{822Fk{*&>_w)qAe zcLKLdp`pr!>P35s*`veV%RK@bgU*U?hfc17PA**dgEi6MN))&gWs7#*&ij|AEBAkK z`ld&|RHI#QL0?~B8;)YE@r#PCVh^EGk|=AiFNv?^-;gntN_1NZ`=D9d-?!5d;l1gz z1^a)?e&(Hi|NWTf6k9{zy*b{^_;}qKqSPOmJ8)Y*V=`5VYEu~VaY~T)cYj~B|B>=r zw|&Z0X$!4rA^kOcR%BoEc=CQ_56_mEnNlZvxZZ|dzMKGlJmOTY>3j7M?>#qq>c0lp z<;=AAzb$#BvuRkHr|$X_WqWTp;iZiC*h6$&E?a`@!1m#7pYiVjo2}xVmzE^C?GY7m zFF&008udQ6 zL3C2qz4mnuSA2c&I~#)E8A0l{-1+MPwUhBZd-P-5?cx)p?-gV`TJas0bJ0q!@SicK zpKVN=53~1Fi*|SuvOM*!&XWBF(l_uY>tK5Ah#V#B2!7~=YJ#gRgM8>)t%E|dvN@}; zJznV$U3+(WUe=!M{H#%GLdD?iPb7VwA%3>u72$@xtZkIUsPfy(&;eaXE|r)f&I;|t z71+zdy7V$l4WHv(T@z{dIAO3ZS2*9!D9 zP0e1TvR;~sUwIPpH^Bf!CBET);NObO@t}K}xNYL} z@efCD?)WHw^IhL`4qYy5oNCsZ^x*uQH2k)*fmt4~8^nF^d7imBv7WgXB;x-c?U|bn zPUW|x*IqTolXX;eO>`rFRpjr{?cSsxC=Sb zFUw_fO{~!87s~8ue9yw)aF7y4n&@u+f0&QxK7|GKdGjj1?3_&8&SE=uf}8Ps8;GvA ztIl5gI{t_cDvpU5pC>+u&bFDW#-k>0=Zxn51s8gMO8yrwi%t%H<09`-dwRC;hBs;3 zTMHNM-wPc_&s(%I?VCmWg|^3NVcwgyaBl_twGx_ogYz#AU{Ap;DU^JbJ9_Q~UzQSB55k zieKRG-0{gD;}>`<<>~3}xa5!V3w#E@z%lrFijHwWaa2g$g5N`jOBB`nG}kBg=!V4{ z9J3*4`(+tHBW~~C@8Y7d+{Xo7c>DOE%-cU*`^%zFc|Y232=a9ZGW%D^>LEoN*KXr_ z4jIB{l*Y6A)cT?{{>h8E@b+o_h8EeL+CZL5igv7ePQT~(d#31VzE9_y z{jnE|b1K5RMtN8Uv``otZwlvlro}%4*;Q`U;PG5e|Idsp!{H#A* zoR^gf&MDxWHbQ)^!z-NdMDek1-u_@x#ASI|&%;kE)rg9U7avZNxvQ)Ik3@cnm|mi*v^3%o_(Rh=5)8ucyy*4RE|{i@+loUH+0oxwdE9ZmKl6Z@~B24Cw4 z_VYfBzcq?=?t}PSgCDc=&=((cgm?K{i_Y}|`&doASab$cezX(w@|*KL9nbJx>MDH4 zUzd}64mc5k9{A?M=;TOr!Y{Z-L90=VqLZU(M+-4(OH{?BBD>S^mmZDJ>=|GVxhx;&=EgzXSfS8X2zpy#5iq-?}I~c`LGe7dXGm6Q2Cs z70Qs`;kW!iO4N|&z-MIh>@;Az8=TPRP1pW7w{>Ud(5-*;pQ-pVciE%yB6smqZB0oS zqT%!G@H`9ucVr(9&8yEMZcVx>^YVm-LoTHw;_qk5BPU~{&r{E_$GEx$K02Ipv*7)* z7q74QAR#~Rw8+m&Lw*XM{whFzHZc}u$j<^|%9SANzCPCZ_!smGzkw}U+6b{<*W*V} zU%5x)yvwVZ(_O{fu829_51H#-$=;EP^@lSGS>FoM{nG;dG*ozy4IUo0O!pbtlI98N z@++CQ{!BlQqkrp+H+>S)X+wU~1+_c5PcKQYO{1(=AH$|8KAo`=dxHG{q$yjglJdr@ zJ^U8}+hO{Ph;OC%ER4dB(6ncs;a3H36`QU28OWS@{N=sdkR2NKNb0xxtu7({LcYZh za_h=7^H|$`dcl>)k>z>W)2**aC@4?2m z>u%D^BJ$d`G<-qP5waLJiDTBnxr~hCzA0CCU`zLZ7yl}UieE4GW${lbvzh)*`LrVs z9NDS+I%&T=)6eOj84Gxg-uI6$>wPSq4ee>q7aQ!k##rpjGRE7P+sYWf8Bp%?MtTk9 z_5lWr>t5@)j$&L*o4l+`nDuQyXa7WGoF#uAuo@!yX_F4OG`~Nz4mYO>x9+jD;)iuj z_=zbg_n$9Z}37-k+sR)`}A|5E(yT%9`HDcFDtaL?>FRa z`nGc@eyTNTKly=9>xq2(cl2qoF(%W`(x(C6vrjSfN$}b_M#5X(pq=8gEN}zgi<$El z|7D5aUsqz|VVFC^FReHK+kbY<%>E5JOaDF(vEbY}#_VkUTWR#K8e6=aUy)T+ReYFu zE$p$WQLay_ojCZE?*DB1c}BqxzQ+Gh;34+J+`fJsR>ZF#f7Y&e|L2Iy(nOn6fn#s+ z8T`Dn+dtCuxs@1Ff$^gLA)aB-z;^5w()K@HO1pdUi+%EY!c%Afn@DXu@bHAR54YmS zb%Gzs{`D@QAz*X*F8F4QLE{d_$=vgRJgdon!cP+yFXg`>J^wrFKd<`#8NffSF5(e{ z$MkVWduA)}L^rXEBvvr~nMc#MW!Ik93tq<jwWLKJNa$b&dM~>d|R@ufJ_C^^!;TP3;9YWL-&Mm<#-6j?-IP zBn`g$Hu7;xewb6|BYy?feq8d$#4_VwVI$Gc&Ny3rCeJ&M`aC)=_Wa+p z!An%Z{oBrLV<7LGUvu(tc;>!$d&zq?9%;tOYLdO?mY8qiH=rSVurs`(e=F%34^He3 zkD+e}K36fG+2C#K`5xlE#jP>(OFRaN`R0#D(w*0B$y+bFi|W|3oO^f7w>TrdR@_-* zzA5VTr!=K`Uu$&hF;(KQC*Xf)(EizdvU}rmXU3s6`P_H;*2=nj73=I)Ul@7s%@?Mc z{+T@N7r8xspnCI#(Z|;C$rQO5#Mp|Dk<1^g>+a{=TVsWf#$KD6z5AL681Rz!)RL6j z;M1F4cz@rfTz|R^I2I^#p32{L@Wy=n2Rv1IZ0nx$6npttyHaWezjo?8O5}-O&+OdE zc?_&UDYP?Lc$-e&J->gHO*eTpZlG} zt9Bdvu|)66)9Eg*VdO~WDQC!>xQ0_fq#Hg@QeQK8W9q40^?|z%!S`u`a zyI6Tq-o>w?oBrY&WQ^9ZhfdC?NMzrU%)1@ksVe0h$+!A9oaa&W*{;|KVz`?H*XR1h38r5 zs;$g@%X-9ENNBKApB~%7pMT$;Ui%-nM^luJUi$yGgY#fBc?JRw=plbGxrK&4n};B z`60{&{V_hQIR1V27OF14oPGeF(VPA>0bI7q5b;eq+ulN%Bbnc%tiU<DBl_ zxEK5PsjVgM#JZ)*>?Z7J?bLsFT+@ixmMF99c&{QBe?EBQ$BWp8Q9Ng2GhNRAqtr_( z4zp(jSu*hevHA=8RwwoC`^f5!_$QO%)p(bbyY^J)B~oV@dWDR?@a=9I_V52{U@Qao zOqy_;h7D5o^IHGOqnw}fkJx>rpQqY8FOfbq7M)X8|k+jGSz`@1~^KbPPJjaX&Jv14~&zmt99x=ti90a!l@ zjLX+sd#0VEJwN7~RiB?$dGhg5p~M(~XG$z~@xy@5V`S}F^1*BS$oZ--ql=ERC$!;v zG5O%UIqfQTH~D@v@=RS>)<3>WM|EMJl>hItpL|^Q3G4Kh#@H}EA}4I32QN$V!?DVM z?-Ty_{k_yFy70O7txlnyUh8_B~r$wPYRsJE?DISA8)Jcm9j@9k-ojEHeG| zJx6_Z#(#Q2a&0EO>m%muX~#SFrg5hHA@m}_n;>v?(0#yARiOJW`$Zo+G$-GJxjtWN zl=IW%+E&lm%Srr>az3P-)AP^d6Z$@7gHNEBF^BKAM+(jAeW=N(ZB9J1ZfWC5Y{Ye} z9R})lXX}qoZ%3f6XMg*POM`Cvd`K|+E<)J97K&ez1|M_4&z$fz7yK;@*%(gzD|_v3 zc*_f1;zw7_eFoP=t{koiE}4tCPpPwKqIXs26We&ZGP`-2>|K-np3SQd+oN9MSy)w z%IAF#_f*PON3d@F2jZZM-V+k*Vn2Jdc9-G{+om?gj8J_Mm#K~69<|XiMs0KzsEy7m z)kf`VwXymNrO)z^7#DF2`#768bIGwg$uU_a26R<%fulJ|yI%EOx-cerPH3_#o_q5Z z*!d5S?ojK3YdzF^kXYQJ4$=ArJV=y5irtgwA}F>rStN9 zshetxjkLX5?${1_-#)aaSor2gto_Qj53olUoKOBc@_b5n{w-SV=#J@>A!%w|ZE{%4tdX0?khetphizO(@J|uOC!zJw5&%y)spruWj22^ zuA@_QFv?}lQM|-fYsA2dZ-9=9L(-NO|BkqQ(vQGC{26#wKTRKKr{0IP^nr4~Z$1C} z^gDCU_zttrudJ>mzDZ0)TCy_v_#$=EoJw^Pu=n?MR(D^`KK;A;`49K;p6+qd`$yY) z>z}o6(y!7OVs10edR_wtI&OVAy5rts1`ZiGp@`1A_k!9{HqIbfqWVhWm7(tlJXenE zK(6mi8^c+Kz`W#s)hB5sOY(er`dvo)3e`s$d-1}qy+F!XNg2e(I^+MxRG*3Wr5A_j zcr4}KGcwQDyeKYN3)Wo9T=%3Fm!hAy7y=y%AGnUPnk5!Fu>{qq!Fue^?Y4}RW?~jP zIA7t-V+;4cp*p-jvpK!XZNwjCUDm~#{_jJz7UX8oGy8&7=8^8s|@eB!5zZX>=VdqUz|6~N7gt-wwU%b=)I_UTpa8w%C*p!Pq0y6$?hkwU$A(+c}pmowjE%#yUD*ozb?TqiRcuKO${AMY&@03dplp`DrMzr~P@pB9GqI;C!7fy4rq`(I11x#7A1j zM|kHR_>Azo&p6+2@IdAzQL~7VIW0vYF3P$*{9@DDlfn39;CF>@A+aE;ivNgzUbGtL zx)7W{da2@56*YT{JP%QP>546TJv5N7*t7GMAg*Ap5Ux{rEn zt=t|PqFi-okm75@*X`p-dzRRhi9r{=i&$N6szLbS#Z{EF<9E2E^w>Ax-KU}JlHMJe zn(}V;u#|U`(o)`a4of+T-&*{l$mI4#i}oKK;_-Fbq6QrwzAougTWI!hHNo3qQ@x|? z@ohpwH}F2vu6n0(?yS(xYTkd$d!;?8P3UJn?+bWeXHRYu8hVxYr+7bL@7E@D^n@+J zo1(ubv$0L#+%J18x2S{r4R4JsI>CM3TbCC7 z&!2`+#t_OFLK#Df=AT?YYb{qU*A%Y#-(EUv!MB&qn)_|;ta;y#oVD=4rL&$oaM`R; z2Xbc>92hxk{(;M9bxc#PIf0I~_P`ahPNpl@JXx6QU0pcRyQc6`@7luQ-rNJDW?f+q z_5P9T8m?4ZsCOFoDF-rVU9E(Am+^cb_l1|PDOxmtP0{7^mCfreU0YN=e{E6LrB4=3 z%}_RH&wsM0e2}tv;-#yLuAINR$U8*Y{J-QIm9A`_kg06;UZ`wtoTqGdrz)El&M%Fa zKfko-DejJJW%F8|NAaA?y@31kcKEAZ_J)Y>Zd{whZaJdkiQtRijjN%Jvn37<^7uZE9G%tj z345WiQ6xaa$B|{np^4+!!&8n!6UV2-yN_oNNIAYEE#+4U!&BOwq&r8X)D({JMgx0+ zf4og;j1N&7hjSm!Jzn7oQW}r%NKZNB9OpicUvGj-_;P%k3SUl!|5V?$VCC{9#Ky%R zFwIf9IV0M$IjyGZs(h~LT+6u99HU5I@rA5K+=NVD8WiM0es}3}wsAGsNbvz3Q`4o#iLGSu9_*Zk zK55kn&9vThN72X9Q}64cPnKHJ%C5`vl~18f3$!_3Qerk;KHcDMS6T@65H10!yp|Mb>-9Tv(fD$lfu){cQhT$A9lm$?w>SJz4*6 z%Z0V7@!v51>vVC(m9!_r-=4)rd;adK^5L{jdtw?MB%iDU=`fr<)__F}?yXh(J~C|D zO_Wa_(KENCT{gJ(7~>@N?o-_L|B$ODe6Y6>msMo^nf;Wt>n|=yxz9op zd)7D1J!PyCN96f3D-*l)&&AYpEA`8G-@x83vF%}#D$We;)xU#!@P zb3Nh$;^h*zn&)uzsyatbN=u~D=n421$v4hNZER5^-3oe_g5Fh@kec$DBQxcBE``hK zNKI*-L7UL)<`-sqGl|j7SrYr_;+K6Hm&7g;I5pWuz3U-w$si@CWqD?b%w?4;2lx1v z%C|bcmFeFGb$wHj?b3evzluB_>_CqGd2Y_oj(!sQMaEWSuulRTT=ek>V#)IUG_u@; zm9(uD8-50|QD9+BZx(y2uGf_7dX1c6GL1PoI_thD$qz4@0WT7nng=f$-3u?ugBOj4 z7gZR%NPO&t7tL@I51#eIJcAbzU-nhz={hgk1l`Geb+MHn$z1#EaUIJHp2WC*2Tu|l zJNx-hZG%RGXZh%n5@X+1d(9icF@b(yf;-^vUM(EnA@~7(n{6}aw_R!M1t~d?dABv+ zwand&_gCms^}wEUIsN_7?tkPx)$)#>S+glSzr#AulJ~o&`R852tGakj2)gS^=9Qv% z%QN#k{aJV)dTgmNU+hXlS2yhtU1{j*rp-dq^tv|$>$VN^UAJ2p^_G0#>9FfO89S>^ z^8)j3AGTAwgJXK*$pTmP3C@m5RekpUsxK&0^=Xsy@JX~)#4KKdokgDQ6|sw#CaF&_ zPsJ{G4}E4VYQ)~+Z-f6F)$Oc7-Sw>MySqX4S;t1&3oqW%+>4FFOcPmS+C9uPtDG{^ zRPvd2589yP;h8p$7~=fLo?+t<7FZ{XA)N~#{{7FZ-lVX>t}N|B{F^evv$k_CN=DU~ zoB`GOIsH>TjisKnlsx$Dz$j1S`XI%9zQ>c3PudcV7_^$=w&in<0?#dq>Q2`@jT`y4 zjJfX4D7)LE*xk0K)Rd*SsF9x3jFcSCH?;}RgWu|UjHWcEReN&!KRBkV%rq^-tx}&F zV}8rGe6#z%rSgsTq-S~>GZH+F($4AByHv|aNefH&=LsW^V&tJ+J@eT7c@m5~l#xMs z{mFMmIsKK!^q?_08ByKsDAiQ||54_*ZkUv6Y5s5hkE?26mI7VRcWeRXo0`f`hy%(MreaZgz=R<;!wZX{R5YD>^WxlO3 z?{+Z%=DflAuKLsPMqU57HlKBC{7SHKs&hDNqs-&es+RO=wrMU|!#8ZYN%i<|!PlKZ zPkQFP?)1#do2*R!yRpxjSoPVlBRsxV-oL?@HWND_`;#gJcgu`t*{f7`F>5z-@0}y_ zQ2n|5-Vw51Vx(^?S?M`FC&|+>_X^7Tf#P$}js}~)Ha*=6ioFi$xHwrxE zoo|ih=s4w^PnSa)|Iao4pKJMlVg7q*izMH2{Dw2a!GrTWjmv7*PrWH>@zjhQa3ad) z?ti(baVh#j5H{@Tnf+640^iC~!R;$EQdVqzqWH+i&)zYHww0vzPxz9AVxPV8)!`a^SMa7VNoP`k5CLHmmjaO>!<%4Br+S-*gzrH?3t|aqAbG?y!Xi zMWmfdzre_+!&W=Gu~<+4b2_F*{r}Sk?NygM-b;(fY^{q(rOzsOJEa*t(xsf1=N5a@ z<=63kFtq7%zRz-gV~@-`FEc`UCoMwzbJhiA`C+H-vEY;k9mB+_Qh64f3XW$#g=enB ziRO&OXlaw4uIlNzvWHTCcj)iFR_roX+^W7j0Jm}n_KI5`1GhZjmI7|2fm;F}!HvT< zWos_=2o4$f=34UUaFl%Y;Mxz!m&&*rWi*;)>{gVmnZ`HD)^SsCE*+f90OzLH)J+{7 zRW&sooXZDKGQhcMnd#_>S1{+zNEr>z6@YWou1xR3xzV&)c+@K)fT0nYUY=LUdt z;8$Zlym$wEdI>zMKR7o4oEu2nHrCWd{x+&A@;>mclsY(b;O z;F`M!t_{|4O##ByrZkMGDY#%5(NbS67hr#H{x z$r%l;-V~RYb4$vYoZ0#LId>F|&bf^TFQ@gAHoKm-jA=WHC2o^tDsYjQs2zJs(pc;i9z#?qi*cgV>8DL;M6 z(-_3PhV<#QVFxnzX`XkYBYqSX+@vhKOnCKKZ06GdDz(lVA?0H#E+Tr3|_Oz$IJ#pUe(eK3mqu$8; zNA@~XmgoSRxR)iVzE;+RCSc>To}IoP`F(o+M0CxlU~2y7hnfSEURaW!cehIm^pV{NgztpJS%%yLVLB zkbhrc|NXlWA4q)GoC(-b(3hUax9&J_dJlMR1D?6GS#(tKCCuUM(>IdHhc0{@dnfj! z7iDSeU7iX2moFT?CQIT5s9_Vcf$Id|sx2I`#tB^gG3=ajCW z;D>8L7JeY|4ZCnSz8UrF9m&nug9Zn4un+ocJ=gXt@*11+^BQ-qyfJ6TuBkcuLh>5- zI`bNLMdUU9u1{X$Z{zYBk3+wG;YE{*g5AI5c_@4@wm8K79?z4p(GM*Sbsw=ivo{kj zV)Ma)wGX2U|Dt@xh&LUP-X>Vw^8=NvIOv=>FQV1ZQWW2+xS*UTvU$Eh@ojbHrri0i-Tla$HutAmZpyB;cK607Z0<+mLUNYD z+cNqv-;J=jmyA>zwWH4!S6{*UV5XlRPluj{t^nFWyuzNQBt{oTReu+NcQ5fpJhd%s@ z>j|STHI}~ATKclm(wB?qOVlpA`|2G%`%!!j$PN>EFXW$4c<}ri3)TUou|zAvbTPUt<{?vtKtG{R##a12PAs zJVT#vqHi*Wx6`i`tj8CE&(`siHF+7sO&6$Hlbi!mzAB1x$2bS3yi*+QzQlQcO6-sN zxOE&Hr{vsk^lMe2E$0EFUytSo<=kiV>psTq=EuOh$87F#JP%xLcZaODx$jF792}lv z?~6VVFm5Ie-bA0K)4#E_`E30fKtIer1<}X;%ynhn(_6oWFkX|nV!6!z-9Z03K8|uH z(Z64}M!PSie;f&x1TXS7d&SOUZCb=$48S<9hedk*?_eyB$ zqC&enY8*6{Fa0}Tw<~QxmiI*4`TfGMQ}3<54qNsjzx{YF{B;<9Ra;5lgnhcy;>)D}yB>e7v-mUp30rAv!|0B3 z_;vcixMW$&%iu13G413ZlBX;(ughMI4_Hn0uc-h2Jl(D(^5NIiU9e|dhw_BqM{S$P zi}5}E+4O%_`8UHhZPq{PMn>HKR8NPSj{qJY=zh963OWVqc*OgY@z4qE$ds^9F z(qT_-I1r)C{>I*~p^UxKdcRh8|EG_~!n}@YPv!ZhZ^-lA0^Dx}=H^<3_|eJQt-weA zHPdw&9Jn?C4#+s^-vmbvcjJhRV||b^bOzgVD=oZz1k(W-QpafF%d~lVS^t!$Y4gq?f13V| z&&5vqr}vHT8(2?}xQ_qKe=mk9J~@B%&O0PlM@++|jDMv~&W`O~7i+RleRtrq!K>7& zq8zbd*&h61PCj>qzD*-GmVzA(d)JL}=Cb6q?rGJSi|GE$398S{oTQXJ6b2vPBD%NL zSF{XTk-TN#vGCv-;L?PJ4s;4f#d>2NX6`Au3!e(}S?V;`hboEjDEm2x**mmgftoCM zDCextyrDrio87=^CH$8f5O9}4SH5B2|j z(nFo0!_+x5UsY0B_qj4Hr5%`==ikaaTA@7i{jVE?S6SP$hx(tfw5JUiNPA|`7TIgr zM!UM(;_S68@Q~iy^821`k@C!T{2`zn6|`fFr5zIY!fZ!xZKw-?M_?Ns!dFc#yX{rc z8Pu|zSC3m@vhDv?-RL8Mbw5qrhckZ7`cUuZU<;0T!I7`nXEX+Ra4mT9nz61a`;Wvw zgLAR=-OKp28)Ne>zD=u$Q7Lg8n}AEAfhW1_6~aeBADgm)??HB(a ziI>=lZ`ld_NvGf&()xoj^&&@wFE3AIdkM{VPpJRfVZI?Vvn!o^XS_VFfOPbdI(Ui)pBVYq%wNFSVrxQ`S6cB2{t^9Z znXVEKB3_UCy_mXNY(49)v(()Z(z7h7TWIJoWldmxFBQ9>)OAE}n=_j^u-=AL)9-r{x07!4uVp&vcN*z;>ho*8?3P2= zS7{sy9<-i6re65nPWpctW5GVet~49AAQ{)dzUTk5eW$E{r0?2)uo>|A&(Mun(J9Xh!Z{u6V_)egl?>n~t>Hdj5lD)34wBjcbIEHU;|0nU6vi@Hh z!=Zoa9IBt?n3$R(G$MWz2MrqW{BP%Ep$|RHppUvglLl?*X$Ea5k|uP)zb(+kpV22a zExn-~TkaOCEmziJPtPxc2mcUWd?h@2BD}c}|NaTsa|`gr^4oEfo(W!+)dUY;YGZ$P z5P5>h8^S-K{Hwvg9qd8VeG|HPxA-QQynAUs@jJke7rtGQgbs;4S9rLKXW`-EHz;xD zMDCoh2W6kM$7WX(uMz$X?}l#^*R|CilikYRYSAS`F11RGSmLI(#QXQR!qa^H7A7XM zmwAowdC7MW|Cw>L+YP@hVU8klLe6w_&hDGs^hUO~v(r}Z3{~EiJ+TMvV{_2o`y7fK zmm@KiKAt!8)y429ecprKR_TC8MJtmB+g;djV=88#J6(xh{oumbWSJvX6KCd!YM6KP z!lX4H&%5o_YIxz_3?43YX1;&n4EKH<>}izuqkMl;jq2j#AHzd?q#Hc+V|b{ff1&4( z%x2ManD9)Y&%aUL>y%f8o+A9R1-|z>+$ys+zMKXkNH zZ?nYU{+#ljvB1|u+A|jTHgT@lGX{L`L=QS>56(Fh8IqIrS?ADHH9bXQ8q3<5M!OFV z@-(L5C$)WE=Bok|PaAal1Akhx_<{%fWnR@0(uerdRfk{RwQvU7!QsT)<$onyX`D!1 z#`;VTn$FW{dIEG=0DX>!PRBv7W1;CW#AUGQdvq>*I(XG3oZBfrzNc;v=6eYFLdmc3 zAGACle7~1 z&>gf@tYH^MFZ1bnuoY)+T%M$-LEn!<=b6yi+67wjYR-Buz&}^$e+_$Rgx_mvLi6Zr z&?f6lSrSK9XkKg>t@z8Kn^n}YN3WIo@uA8R9~!aOYS^P4)T=Gbd*rS~j^xAejrM`s znhtn_*h$1EK+0Ek5A}*JG!nS1A|C$pwq#d=J>Cni`LYUK?Mmprv(sMR^g+d|cSG+Q z_#)?PmfKve?H`oCn#sGwPT29m%vTF|KEkt?e|D0;jQ2L)gWxC2pvz^@;$JWIG(N)| z{^Ls-UvQy`7!|@t%)Dk9nMS!9cd2i)O}Y3@XRNmgoRqXLNYlXa&1zrTahu+b&q>Qt z!?S-z+8@B*4dj*bj*?yozmfe!J3qKxZ|F@0|6GHtHMg$Mq8Ca(aExmDKk)y}pR- zzp*~H{exM0eUg?1tv)FAkx%NAeq%$)evo`S8HX~`J|m6w)t>zuZ`3zlX%u^o*r zZjDv$`f0Rxe`xW4mO0Zk8-iC|`J3*!w)lQN#2&>m<}?D6Ds)+GVUTVEXk&a1q)dde@;fq zmBhooGFBO(;V-M|{<8jaT*cP02RSNp`W5gBzimNb-&jzWeS!5R-M--AYzR50Lu?(y z^RH#iRiDGYcK4!VvcINu?rnZshhblkvNkhT;zNIgw&l@x_Uzq$g#M5Ie8=TSfKwYf z%4g^(_u*H6|9N?vKLsAUxVqtz4qVcUc5!{GU+Z~ZPuhCmw7#eo7;WL&$MqFg&@|vh zOy37NXG``5$zD%^Srz*M3chj=ml!D@tQVb2eY<_C4c=^rH?u}QpLjTwHDq*F`C_J0q33t?}%MMfaKjKhBC>o^&`v$?beZ zY404ba&^cSD|kq~tFD>3Ne5|Clp;XP-Bzb*hqEN=(qSyW(rF z2R}W;ClZ@NOR}QJe9gzs`VqFa#e91Wz9u;EE^)Y18H?ADx1+(;X5Qn_n-1`OA~-3w z`>)aY%8B(W{-A^K$zuIHH=DT7ni}hMt8s0E7`GkxYl}@-))l0VGU||jzw1A-uLk~m z1OJLm(9S)T@|gFZL8q!NOMBWi%-BW`Fg74~j?;3kcJk&2ST%O0iEWUPPhf@+VQ$}U5U)g}$_4IA3 z$fTrDRok1I(x!3`zTl+(*ZU-DS znmE@+UE=$mdFR5F4wuV&ggxM_@#_5IGupNUn)wWRSqi@x@ICp(82Ckn!7pUqx*nc& zG5yKBeZfkdpBZ#`m~u0q!^6~n1R32%-)@EuZ}~UT;TY(!0y@kx=uq0Cz-yjtcMs3P zUUUS!H2D_N!fQJR-(tR?^DXh$@Y_~mvEj>pguV^oot=6-w5n_$MZ(kuh#BczV_*3^`AE%bF>{l#{X-y z+X~(&zkJEQtXno5D<8i5m}B)ZJzZH?@P@z5w>+iIE%>MYZG|T4Zd$g_vuw+;sm;3XT*xm&P$~3-u{QahnoLMUh}^+ z_@l^)|0FCF<<_T^>r*3?5f@&d;Fl$J^|pqEY`WbYrLg{|Y-Y?mn%TeN;B5LMl?z|O zugjZtdh~wr`H{J89Wp`jWV26&eJ-q7314<7ice3k%O;+krz@7^VPav+H#z%H*2Yw| z?vAfgPd{G5`p72s@hs<(wTa#EZzW8Z-4j(}L)`HyzGC=9A6y!Kv2`6~=BvRm>0xU9 z0NPr8nP;WcrLhKqnai1N3I6lp0{dKG{5x!JS^F=ESNat^ zQ}!%~omci9yi48eSKw?FIlHBAn~YO4antH~$8WS_G2c_^JF%NDk#kb4Z4?-@?zS&5 zt$pgN$X6BlO3d;3_@eDpYOkXm0&i{ZJ?)wJbDKVBvc4nnv_!XPrLJ~pIn%DZavV5n z!P2IfwmjO@N}I}!Hmx_>R7IQQpE>x9mvbKx9_Q8AJ6FcDL#-=zmY2650sisjS?y&> zI;^hIfK^$N_!xBW(QKdkx<4j4@Kok1eRVwL**#aeL*lH<`#F6M=$F(NM}5PP-_j>= zWQ$^nt0=gmrzymWB)_bI${6TrCEaNvtMs&{?lg&UI1+r6@%n~!@{^3?hxD-;oGM^{ z<7z!dV_d_B;1V$ciOn0=paRpU;fb5bM@+^&n}9>BJO?XpxAH9M4!gkD(N>NO6Sy6Q zHHoE7IY-b;6Z7Xy)6}wd(GF8$O z=FV$>0(_7)w{~FlKi_t~l1x9V4Op$!VU^HO(*-L%_T#?m17OumSputO16GHnP6Ji~ zKY>-Hjz?$88*>d^>;d0rudmQ?byE9qft$?Hl_*b#?4$e04gcVbJ{=z47ndw}W5BXT z3BWH|+reLFi=sAN-r}mdT#LFT<;47{FF9&%$B(ILpWxXM^tVFffWWlX;E`Er%G<&p zr*6+`dmcU}zFZEd3x$u~$FTMbar?yW-->OvmwWTvp zTVbF6lqYS1J5ibYl#FX4HtaGZR%f*_z6p%4tV2mW&x81vwD4XR?T=r&i9Ti7llF)m zX%l0)+ZbDc!36pxWA1U3r)ZR~sr~l!Bd(gj*_6_?# zC!#+OG{)ST&VDLllOap^U&gXE0ACL9zu=3UUn%$^?<=qYIp*HgF7hCYScVeMa0dK6 z6`8}HD_!2Y#l8)1k}{VQKSucZ9`0e~742cd(@A%h4{9gIWW3JbRrO-w?PAAjwX@4) zp?lJI?UOd`1AaV-X_)&Ix*=nVe$yd(0C4VT;p`5Hxw<^&)Z+(vPBUVzhW}bQr!Shp z2WzZyz~JvSiqg&B4cX9xPP=H=LeC;E{#8EMYVg5R2AvcI;8Gm8R4q7)%%}z*oBjBz z^Fc|k=Q8=A;IqjG=aAlxTyj^wRxfpw1;oxBN6)zISiRck6rK_M{Y6TJT|c#&0)cpMn{dGf!P_iv>hEAL;}RnPb1{ojZ0 zpUtlO5p!LU0S80Xdf{Ordk$ecN;Kq=&fArXy5?ju9&w7N!_V_C>`E8-GueHG`0>%; zkS+9%PW~(x60=BOFn&R;;L(ur{pr=e!s2O4R?$@QG)QuDl0~;u{9?U#ez>QGCM?(t3vx``Nz-jI4DCjKV4J zUxCpkaG*-`g_4V`u=K%GuF2-i+^MXeX1=&C$-%ROv43YrrdP!_{Sosjv6Bl9&Vdf( zIZ&T5ZQ{_3u7e^Ux^&Ri=$<<0%wH+2X((@>o=;3==2$H@?01|`m=z=I!`LDhhEH;G zc3~mUg*>}B)3BUpFFLNqKG!|y|Jo%JTm@+^?3SznQG)xpCkqXh0gtWdrBco#+x+t+c@{qKW6J1~(H1%Z2H5$aF*RWi zW7ol)Wu?T~%oJELmRnDEZWSC_KzV2XziOY}o)UYP{ZQ

$*=elgWMDa;pl$7FCc~!_7ltK8@z;7z07qqK0jykS;vjVlqV9fpf zG6}uBI=E;9_Ppi7M|)CRZJT5c^=HJsj{z29?#YMleIn;x z#y2D%;mE`Il`#*Wawsip{}p>x)_bwUS4g_7&=BN=+s@mN`ko;p>TADgIvd;c{YQ zNjrHzlYFYQui)1y{u=TOIVpO*_^PWPZ!SyX$~iU5UxD9HNA0c$Uhoq~eh(a_&J4=; zHPw-}3$Xu`z8T-Vj&Ht1`Rh)FbQPl89|z8q^X-%2^>I%B$-(u{h&n z4fWg2_fPH!^}FPBaE$po_HdoQQ0JGlC-q**3zU7CgiZU#ELoQ)OC%0H_9W~FyOby5 zeetv>JZBDd<25Bt$03nb@om97@%6rW8hMAnt@l0+ezNwH4B!6Cgy!_G5}dquUC1A| zKyi$b?_GnB=RnpC`R)QatOLH8N&6CWy-so>1n9fSAr;CfHR-+#-`TSGIL8=$AK8)a zE8tvl2llqorvhlFqmy&~^*clR#7O2))-x9c;+e|+EYT8IPB_)e#U^|dvM zZx8U0u{JPg@!>tAqw#dKZ~T%mg?&@>zIVNE#8>$!UmT<7s0i;H@l}uUO#fcQz9aU~ z+P}STNZt$a+lsHcoA1EK@6sMbRuQI&?sIH#3mypXBbx^-b2rNxlJ&C^zn%*HypSm8 zg*x|-&OI;4+G8)1v%;>9&I&h844oC$xc~1z~@{FzcU@aXBzy^RL%-h zI4cl`VM^$n01eH1!DL4*XAa=5$6^rsErYkpW-iU=hd*5U&Cd@{J@d`a4~a5|UE5Xv z=ht=@cGc{ar88FbIIr`=$?ff7csnqRI6r){^dE|Te)!?`bI%XCJHDIq!!%AI~R^XnNA z%3l!TyA!Hr^GvUQ4*g8f>8Jj#pgnIbGBDx0#lKi&v$4o+MSplFykze3WzCJq^hF;j zb_1(IazE^&3w_y<-uN||`vx65GMIO*d}~Bs^gh(I?}M4Y_a?8`W4{z8+x*^M z+Q#^3h5RU%I@|u~I$s*IzZ-m~;?JPJ9l`1c@IdDN2&~RriXL}pdstcj4OsQy+vab` znE!`weA_W!xjeI(KUaZl40aRlv6j_*MbmD&kur-UJzg1xR7CNg^CHKIj@&Uz@ zWSmOow3hPkD=o;tk-c!XL1tJ#4Lg(#Q*~a-JAat3@cyaHuM)_GhGt|afqi3?fbc2% zzUo$a`-Z51l!@nDD(9G%<(EP)r$aZVK|iO$^Mv@Frjc3r`Gx4W*bzYU>qIWvqg>yU z>kPSQ>9qEHvJ0ARgZ{6_SLSq>zADi?n}}^4_QT@Kr6@I%idUCRH0q?w9Q~5StB|~nikCPB*o#|xM)iuq7EjTJ=`kyc2jrzmnf2ed_@s|=G=|E2m$ejM7zYV+uy*oF5Eot1{McU_HMh4r*s@<3}P z`aV{wEgmd1ztnxP-DfKoxmtKXTcaX-v)*$0a(t4OMPRckNS48i-+njqxYW9)o>i&v-0Fc&GkV zvhO~<8eX%Xr`o$gscu<5jWsb9z8CrUnvg#bXSP!1ib=jr+nUSrxzIQ6lDJ9hzY30V z%N~tA9=3R;Mr@V4g--B%EWe$#Y3Aj`)iqMEl9Rt{}J++ zk$LFoy9MFz4&pbmyup7QK-Qg2?DW=oyE!~>@x^&-=(EgQBl;Z${!L3q#uBD2Hr6&e zQ=PUL_#OkkkA${dMx77A_eJW^y^B`a_b!5GSu{xT3%(n)gLR$piiMy~By%46? z_(iW%C0B+{TeM+qJP($|)hfOYVuOzqtXii9@9&?a6oWg=hn8h$9`R!;UO!P|J!ywi zLhEY#MeWvA)5sU$kyO@|g>{9`+sjI)>+04l;>$d8ez;dKAYaG5!X@7|?)9(QHjniU zEf-pni!Gke4xuCDIn?E$ib5aJZ8=ZJ`Hb}~xF_pbg}<|K-NZHO-awhguin;BJ#Tut z>ZYx@4%&+9+htpcv}H5e%7Dgc^ecjqp3KM!WiyFXk%0uGV&-=@C6q2T^- zePD4=>TeF$j~IJo{e#q(u@`I(*O&1(Q~#lG{fO~K*7sAt;34W>&@XMFrGHw>@+r`( zZ0J=MI=xqP+pkV(OOHg~b&oZdrEnQEOs6gLzn-?_P7l#E3%>;sHzp8=Qm0b|&)d)7jqfQ%@Ui-40FVeANMd)l4e46i*Tv%szC_1?RaR7lilY z!VdOhP2Z0zy4;VCT8q2bllxaajBMFhv$rz`df(5%=k|U7r?qC%cR|z2Pj}pRW$HgW z;UW50-D30?9I1rY7Fwb6LeLH2g{;uA-JCD=JsjH$7i*${efxNdQhj_R*J!2Mpl=Nm z!u$6JiJ|>_LEHZQyW&9E@f1%8pM_>(UyQ)I|AODbBXEY4_Fe2}=Js_S0iK{?w24RP z;u|}{-$2&i|2Xqx@C5h%vbpSXE(4!(iL-PZnCtUIUm7h+hREE_b?&5mwyBO=ZHuXB z<|7ut+X^2soL^~k!EeJfgLdWYqCwMh1g^p>k|%uL>e`9(S09{+4bJ7seTpxizk0(& zGmk5Je}k_z_y=Urx(|VT=Zf(6Y~k-2V>oy=n6dIJ?9fd7vbimh83<1jNq0nsA?L*O zyWCq{4)<1(jcCB5KxFQxRo^&ZpoHL1D*Tig4(5KPhWmAVD*P1tqNeuWDEpx$%vT$H zkw-~-D>x;Jn6KTj!_%OLHunA)^trL{_C4V7d&2AYf?oD!EPas2MEUf-;J*S7e&oq= z;sra^^fSbQdb=;W2K+}e z_FC@aDZ3{*5&jZC*R)l6XNg-2ZQPY@lKbfIko|b@p;NicGNAQe60wc4M^Zy1pfXu-<=Agd2HLZaCRQ~q^?qX9hA3HZEaF|1U!P_nPgYYf~-Hq(KBe`aA zE#eZMVE@Z&^7bF!x5Tn;b)E(P-28~tTg8!PAC6qU7j52(UuHkvd5HBE^2zL9HIMlap6s~HOU#Bm_2Yd@UcfJ> zz%l~gO#1Fjv#-T|Pj5fYQ(a(c|8>3n3tQWtg+HgXKhM;@tf3uTDSX3de_OluFVx!) z;J@?cPI7so*EGxd>ha;ypPA${^#jAt3flDWk~3W|hkQj-LcC~w3VE=}y&S|pJBM?T z_+^T}ZcLxi_C#<$w$E^TPke=YfgeBQ{iDaTLh}TE5Zf~#y5BuxJb{c#^s&sJI}3Xb z>J#6r$-8b<-omx3@_wL}4E`LPtY;p}v$M}S_fI*iys^F4j{B#jsn{~FW1cIJ2_SC{ zC^9x}h|l?G*v_9i19Im3OYXflucZ6lC0b6hU-ae2kyZWUGVK3Slyqq~2Ytvg&XbCU zjbk5Awe!-f>L~DA>?|EyhS}FKziJO`ANzZ%FPNECJsclyhvNc!&6eTzCpp(#&|Bia z$^T*Y;rt)gPvW-@vlq*I^zFD=27*`R1+E3(OR&G;Pn3y6Jz z!rpiqxHNEYyKj1PA+(@sJn^wIm4N*A0#1K=F3C58=efu@bhw?o6o1J0CJ*0^;eGCh zq5sAFPghbTRU#qw;!gjT2K2^2Y3 z`HOhAl4s&~SAk4Q#`bhXKS%Ok&Z;8+p`X}WYE8xTU1VdIMaOL1gxv2IzV|HOdY8T_ zz()ElaR!18^F)->-q&gwf4*C zQwcf_bDw1IjNuz%cdzfG^zR7&8=uY&<*Qc{@NW%`8TrNG9PV8a<2QfDpkF(PT`Tlv z0CY&=7?5)#Q~PW0v2w3OXQf$sW~ZUTEt9=KyIAo>sh$=`RF9u1Zw%{Io^3h11Nr>p z$mfkUKhqPkPZwKpu{*Cow*4-&bHijMzXF&aygPBLt*~(KWPEXI8TUeH@QhU!pWB_d zbsTa9IpZYMZ|mF0_Z@scnf)gl-`>YJ&m{hJ3i221yMOGde%XQ@Y#(y{@?Yb+qpIE8*b-L2Muv1UZM}KuurFxwL2EwlY&3=!3$f&_NdY$_ObX>ZU~PL{E>XApNK!@ zI-VV8eaM&xF=pBO-p1C-7`HY;Nq6y$5_~G3;ybb*IGzgmRQ8m{~f__MHm(j149S!$m#?huS&Zn82&t5PwJ$1 zQs*V=m|=JeeK6>i;9^%aD;;k4 zJhqrJ(7!wjx&-lizwIgbGUiR{+8z!0wa27|{Mp4$OmotvqP-du_H`$|;bB{p5?G&X zt<m@#p#tVm&blRP`4av65&bHm?;3qcC|CEs4G-afchTVt+!W#@ zuEi!zr$6(^DZ{>z^FKkI_toToc%Rz-_Yl9TKa2P1G)LvxZszeqc&Cftks{&$BCua; zg1?Ixnyv6B?w7#7Kk%=48($fL|BL6sKaTU3g7U!0wHiM8IC<7D(Ck0)G$xiF42( z_j;Uz;=Y>0viAY(X&k~U0(og3rtG=b)1Ll(25t*Ixtr$~u{I4q{+nOK zk3Z}Kt-apn13i!D2A!;bE13ThV=(GmYpPT7PFtOPo|mA1k(dBN7fR}bW4@rCJaYqA z(V>L-8Qmv24VobT|4E-B*T_cv=#-Cxd#0McJCXLE{Dj_It=O1RH{`aG1rrG?>K z5T^56!*CwPa|5n9wZV)k=CHFin6PuMz}UoY!u;eZ|+3*(T1twU!Tr~0qFPYGP* zRQY??y+#Dp+Ek!a#4cJ!K&rt=Wjda7R$9->E-&O_MX zA6#4qyA9Cw@0!>GARnrQmq>?~D3BNt@DjiJMJq2+H;{QLgO@O1*O02DH^Ad)quQQn zBbD?&Pj1}@+u}p8kNyt$3oo$+9!O%}tYrV`h?lU*Jel^vKZff`oh6;rIm`ZR-Upwi z52uN_VBm?FpV*Vyem(v)JjO6Tp|8iqJo__qF6&YFi2%54jJuY--ryy+@EtQR@df=5 zT;9lYgO`wdGcOUKU4xgnCtQ9dWsLSql9lwk`7h^#T62sIV7D*=hNC)x$6jgI1jD;b zFm!fO=V>zxk-c3@9|VR5?iu_PBC!j8!WgHS zpOA4H{Dd)1Ge05YjN~WYC6`VlKM~n4gP%x*pAf$Hntud$JK-rD@MaFD$WMqHhJS(V zXWst_X1HRr{4RJ3k+I18TKEQs!(m@1zwiyx4;S}FAAkRj&TH)AtmOB;qw^xWG<2A9 zUatQeF*w3>X%Xj~nBnjZB1cN|K=USSomF_t-fe2nqU~=ZUx3Ceg2rrPPj&FW2efh1 zbCZ4B((pTl&)KG`ix;q;^?-i%yzk!Mgwk5vqPDpiI}^o?V! zJrAvSvWF{-r2$)ci3KP54%TsR?BQA5>-}O3jpz%7mKroq_IM{TP2>zrnNm036}cGa zN}t5fPDOTdBV%2K3?dcT$-9=ACa2ufw;QP|avKfViFW{b459Ibc{aao9cS}rqx6{S z3+LPXG00IC{@CVEg08!PQSR^wTPL#z*pO4Wg{O6{@@qV!FMi=EjQ#w_zis0Ia^7s) z&kJ~N&^8aSJZ##FuQAoBWxkEJ=JMRY6~X0(W5F>!`PPCO}67EAdBC$ZK;A^)~^hN%U3LVC{lnI_KyBI*Hx-z8{DD z%@Zga-YWYWZZAik_j}IG!&#Tfy39|WCEKUMUoc;J74y1}g;z#Cb7^QjLVF$ag882z z6Yc&bF{de$qRR$T>=n$DasbYL<@FFAn5u$GW7*15A1eMYXB z^)*quBv;G^Q?8hf@@&MCkEI9k>u07tv$cr$^-WeKqkWzh+g5FOcBYHxGCwD*si`C5 ze0i~P&n@Yyy~|p9Y%M}o_6+gRiwYNw8;MM)h%z*JBZXfz23bAVE1KK>Dc4%wXQd9u7vE(cPJDn$VqcQSqld&&M)N;YvKxkT>U zL_AFylki=iuO^1T0asHDGR#JJeQjd9H|jM9St7uIp(_=JZ|de2_S35-aEEcUcE3gB(IiV zlbpKLt;?yA34=e#o=Zb=>R4UwDKcmIUkEpm!$%_LX5Ir5D@xvlW!J6s zo#2#BZIfL~JB|1_%|wK5^o+;0mcD89#lY)D#H=vmujKP-v^I}5@GNx&xh078vI+c|@nnz0p5&jnAN)4w z^SM0Z*{$`5vnDA|XuXvu`t(*<7j9y4yNNe3lKMr|FQl%Ua!$%QDd(h|lX4PILUTCm z&#)G+0RCT>n`aZ>?kG3U#?|-ac?ydrn)`49UqWLXW_nRX-YLn8V6+u;ajH&-il7@a z$)m7|w&oQsn%Gf4KSah~s5Xxk*}si8Hqsx-?PE)G>$y0@{>%+6b3?QG2yHaw8ZuxZ zuoQSm?vBXZ4GW=FlDlCBxf{&wYqW2pe2z0j6Dx>?Ec=S>!(4RRN}laQn;+T!E+v1c z??L>%gpNzBitVf;7wbXh*hLx9S4cgLdeGH$&ZwU#r$_jX^33TO>-(~r9M8lw&=!xu z79td9Kl{T>^=wrl&SnP@Qv13Q9J<+|g zb-XR@$GfeQ@&2HT@ow&9yfZr)?{LOj11;6p;n|_Se8%hHzp)PW@pfPrCw(@?s+w%% zY>d~#9#zZx^RbcBVS;^}*vbKuIt?2+9Uj1C0DE6;jK>cnTKf4Vc3%R&2}O22zpzF; z5}^qO9_B~D${(KRo{ZaZDruZ+UWrC@p^G|N42vM-%65$h;0%w|n%h=#6Bn%3foQ(F302X|vv zR4Vg1kW1jQ1-ps-7lXT{FU9vvO*TozX{mz4{hY2Qzf>Bx6(puR%;W}k;p-t~~*gV~;ME;M`TRaV{K zv}W_U{-!%0IM?6w)Ohuir3dVKe)<}r-{en1Uv#+fl=|z!D<5plOF*plII$B{SGc!U z{xZClEFpi>uU$*{n+|0y6?foo+Tj{fL-A_#ci1+W*NNDOpz{$Mr!M0K>1*g4#H*Q! zj-lxK4ButIaML<#dwTyGcjzE>EXX%+A7|M@yn@oD*@N}xNAYEnSi9?(5Aka{ zDmp!QL67j3QA*}b@#H~=C)0@6uAgVrk-iw}&&V3=lbGEn_zvUM^PoS+cm+51j8*C? z4iFET{h_28UMFsVuM(YotnPu&80((zJA4&+ zy@j3!{wMovS;epW>-P=gfX~sPJ}a^`{a&?;%|+mt*jGCG`lc~wPu3A96@2?AWBOs? z*)pMH6&58Ey0~lQfNp-BKhL-7Hl+O@f*0tkr00NVUfv13B@S#7I0_sxq`clAatxP~ zV>q9^NrMi!xn^(`aaBm3U(Wj*;W@?rUmfSNCo)!GhJ9Q}h9hS{^EpiN{BGh5cOT~x za-PiG;O?0yIdzTmOwp4)6DOUaY*QlAmh4kGE}X zsmOj@$bJIALgM6%Z<_9RpqH=!NBNDUopqVv=Ml8?XXLGx@-}F0Fleb1`PvsL&`s>Y zkFv%MzAPJ>xgbn8cOajUI(?|?;@6A4pzWRMez#kh;~)lV;}P!Tl{hE&7Rd*TJjR1A z!Sh5&u72>X(0eH>`PfC~JrjPT;vduf8f{2E57CwBvT)|!JAmiQ6n!0iu=Q-&1CLD) z9A{lFC{6Lz67T4EiltKhB)H4@y(Hf;`Ybqy5BZT_fAqQd-DMcQg+lX%mzH5YfZ*BP8HiT%C#(?2@RP6Ey;zZ8X>Qa;9Z@R6MD$U;^O+^WgFbKq7*UGP}NGjAWM$ZYsjB|fs2Fwb60 zpOpHx94^w=9QI7D(dw&Y55ab>w0WFTmvDTj54?T*TN9g+?@a)gKJ)DioJc_KSV%X3TN%>)t?-$(b&!36%U1B^hPV#N$-a$Vqtk*Py=XGX0pNB_f%knv_ zrz==jm$SZRv(9F5PPq&`pNZdV=xn0TL3ETp2j2wN_!oa8SieMHzbUM1WZa(zJA}2L zcLHnA8FU8c0qdRN^5ww#Nobiq?zsQ_xQoBVxK~rB_~VYpy*xaQ;*ZX6+_##>eKX@O zf$vqFjvXNhWJtULqmC+peM zR@J&7V!T}JNzHeivP95`4aqZWKBvLGyWg6hw%TPB@+MpR}C`F z&1aq9e?}z!Q%CUsI{I}E{_~Dlc&+%ql9(n2{>yzE{x1*VzfqnwDSL89cwA3D-A6Jk zTi!{)uVd#wj$xR7sd zmU0b$**4hoT*)Ky?(D6gM0~MK^!N zBk26mhl>2DXZ)EmM+-XJFQ)rlJ(|aQSre6Kru%zSe%~2*P0Bo_DqA>fTwISmM-}BX z$DzSe#;s~3Kj`MqaVl{Yw0q-F<>HO3x6~Et+$x@he?JVXID1=74*n=DRvGsl}@AF*1(I zPq~gw!*{?|G!wZ0j&hZ>l{`$2gb%P5Pog55Xu z$oD$>&e5~z1!b;f476AA72~Eq6<^VxNx zjt^MZ(w6@bB?N!^nZvV}dG_1K6#rKF4s#^1s>lwtU9kcG&WA#4Y=69xU->CAEzU0^ zp#ziSJd5Fz^CxFve=d5NX!auK_k7OW23!%8{&JR-v7!Uf`=We=of-9$6s@R=98C&( z(pt)B`L3E3 z4f3C&WWKGnT>iT8eOF<_ICYW|Cpv3*-^J{&yr0(oJ-occj*L;B$dfio^fK49FY_ZM zt}X0gv;ZrZ2J9*qKEuEd84Bmy`e4zr@OakhB$F z-U-9K0Qj5_zKkcAgBzR?TtYX!xQcaflzBGr@4tf9>3U_c#yE52T(8rgepUAx@MIneb^3E~@IuC)!}qv!`~Pz<)vSOi;>@yz6j2r&-+#Ll{v!m?hFRY;)iIX zJ8G{2SUb?qYIpUT%lu~~O;i>`1M|Jm1`XPv0>_dqd~e(q5=cdwf>FXDJhU*B)OL@U`t-dz@9k z*|vA>@m2wE<(*lcs-MS7p{?)>LbtupZEu)vd!gH2=(Y=;MPZn39{@f!_M$@eB4k*Z z$`GZm;rA?Ud)bppXbYINdtLyY|6Y0QmnXCeER*R;PC zvu})~ZV`K2A$wL~c#kXMx!`Ug6I&`&S)GqRrEXTBTxT>9KmU-xs?`YW`vA8XG%584OpA?)=62QxhN`DvIga=44( z=>+z1GM*D{KXTloP2(f$WU>>4yx+PNj%jshLm+mZM1PtuNNYR3YdG`Az?9I1c3 zQD1lg>4(&3ZJkp;0$+uvmHM-c`ixhvKa2Y8WkNHJIhDS;fv>=$Fu9*Qa&0!>_#(Wx z%3fuTX@q=d%XOJv*0LA=)e9}qVMF{2V~%$)X7iX_f|raNy4zZ2wW-YiqwZYeqpHq@ zzxPZM_9Ovw0Rjmo6A;J*qM#r_q0A&exfvzkrL?C^pvO)UM1waFAu|cu34_$Zs8!Et z0*X!|vD!kLY4IfiYlEmQXzlTwzK0~}F(KNDR!k^q-v6^_c9?`<+tYq|KkVPyYwvYm z&wV{>Euk}0XiIYm1<@;~9hdDpLGw z+M|QcT`B%qipkf9y(T~!xkE|X^B>{%IGJ;q(;~`~Jg#t_cJ$@l?E70wTJ9Uw_27>~ zdCnA(hdw5`Ov8dTG0OBNkt--yWBvsOiovfT%j@ma+iSFEF=HxY(E<-u91D7#1xoKw zkQIp3=soyHFCm(bRGVul4> zPkeKBOFZlL_$SJG#WBjs$W+P>6GHz_;746pNMDMX-`fb^pl!!^Bs*PZCc8Pclz+ zTY1CdCbi%Rld0fIlewVUlvps6;lsZuczxT?3+{e6Sg?aN<^~V<3_&v-5AQ8l^Y9A=P1|Y<%nv_Do@coyZV%z^ z0;Tblf_P<8y1$hF6oV%yxI#>Lsf_aRl?0dKxNB;(>= z6z3`&ZYzfuSQ+1;U?7q{8?vp)x*0`E*$(=!C@jy4Org^gcvuTOS@7l8oDC;Bqn$Pl zC39MkIg61aGZp|p&}Z*xbVO)SRSZ6?6S)tGdEcHozh_C5a$x&<`|Rzp%1nW^W6*8j z_r&%Xdk_2RlSB_-Tsc2L>1u^0Eh~2B)`(8c_>9=(Y`g;*_Rh>VQ-7ph6?;;>taP{V z0%YI}HC~r->n6Ub%e0FZJ99-BkTx0gRpcdULpE#1F3R!cEee)n+kFw-qYa$7+q7yO zI?f}i5?Ap49gX-YFFlFwuDBoJqDWtAIqi+79aXfy7&=Seda{o?b4A`~k7y|ylLh|u z^ARLuJ&AP{W4gb@26GPki}2_y)-sKC;sEOi+Q<0)nxnEW zWBpB=e}zx0%i9#lPioZWDoLF)?XzRQ#XMO&g|;nIp0O9#HHvLq{B~UEd!07BP2?ck zbZ_cv!bOC_H##l$plUgqx*l6WaUOgp#vPn`*X1jqUHi8KH?hIkw9;MdX+Uq^&KMpt zr*sQld4up~8y-qX#)ZxeK$Oqi` zCGTnAP3%J@Pq3G>Iol`yPE3;ce6YQC+z$DCR(e4Y)ye(~Yf zZK2c;eVpxLox#dlf!z1oJ&pZX$Yp^eD;uRPB3}mb3-z&;am*wR{XbDhnKtf%s(N16 z5&Sjqog(1wV6-waGCj5vNneSH8N0ni{8&EKV=*%6T3IIr}^(ck>MN7F z>nUpq>;E@T8JiXhJdfskRx@pya!uVn^T=*5JRx9C=$5w5M3287TX(rRwR8z`U(41n;T+x}396}((VSyD$uxQ-_7 z5Y}a7{_p19YZ_S2VRV84tl!zSjG8t(9Wcz@GRTn zl3Z=#QSN3^f||f4G+J=g!kv&ycGs-3i0u{LX%pj<9OAcZ~^`VXAQin48!rha2>UmUBD|3?*hk*BJgt$`%Vlv z*2@Xw12!5RKc6<*iocG54-Vc3m$QaDREH{Ob+{aFxE!mTI}z5YRom~C|-EUho-yh){pPGl)w?>yYv=2YL zPkDD5_exJI$m3bd^V+ELhSx8*H@M%m7VLgEv*7T%;|or`JE5Q{dS1if;T8K5^0*5X zx%Ln~QT8|4SIT$|hi8@|%%W4Jw8niL7qW9oO&sW`0PUEwtH? zp{X~i|3BwT{9pcSVH+WLOZUG^Us`(l4oLf76hC9y@g_8^MtnFz?bqe}N09ShLT9@3 z{q>DI)Zt6}kn@*#cBbz0>_`=PM&$gXBA=uG2+f>wlr}<>I2*q-oBm4MBHPsRUf;|{ z+QGL%$ydz!?NQ|V?DtC=2j`z6<1q1HFt~X7jui#wA|5A3z2HytDF7ttneZq5nSWf1CW;p|u0e=IV+3S4!VXJ-eHT}5}WsW&0pTS~R* z+$GIjws~`*zra0kn)oSqvjo;E$1~J~ZgAv;*iS`XumQsYkGkFDx{$12hm0*Uy%v`D zC0$6?56k?NLtU4Y`&pl!6_W37>7Ih@FY#i?WUlo@ z*T*(4`bRxF!Hd+lWK${OE#0N0ZKzz)xG!gH+DpmG@i)v18v2peJ}2i%kFjiJoxV zKSxjS=luP+_V?-u8^d+{qk6*a;d1^_Jz-_Iod2z!FyF{Ogr1;6gCg~WmZVG5pyt0z zPq-NZ{A$E`H-LvYzA)ymC zbzB@eNTckTHS`7XsmOk1d#d20=m*(bw6qt|5d!E9^VGCb+bhqcmK@F2^@T2c!9-_J z(HYht+sMBAHLCKe=qpNmW_qcbs@rVZ;HeoAdc()ajQ?An7CVTiEn>YS9~{>R4Sl=_ z{V-C;75ZuC{%XmK@P7+UObJwShCoao2|w!HQ>+oao^0f zv{%~jB64ged~Tm1^NG$*KeDmyhGaf1LgtGt)dtCY^|YTlW(fQ*J?hGhrT!%%^Mz$c z%1ScoE$-->xqx~_<}>8f0slYhn>km;l>bt03AWyPWWq)7yBY_VFaE_gWI~aL`^*2Z zZ)Q#?f0E!?=LdZ=ZN!DYYQh&IVbjxP!+P2pDH|R;(zjCfF9R2eS@)(V%{FUs zr}2qg!o4nS$hq+3QU!Px{w;E**wVL)eTTTnm!+f$h#gMn;iGgLUtogXhQ>H&A4eK0 zBc(o(L(fY4DzVGyX%o9y7dlh)FP!&FnmtFvCTJ?PC&K^b9hqEB<{cR$16trie;o>WbNKTwkbT9TBKB21y;&=bMNeJC{49=R4J30+ngyRCZHt;5m^|Hv zf9Qct$OEfpU66DC+8W0bU;ce-9I}R>%TwQ-*)P}CX&1|NV!szz8~gGAxla6Q2FrCu zUv>Eoo7bYa2-%MPNm-k&?JnnTM9-PaC~q8B1ghrto_j|GKBo@+*?*uR(u~Odu9vE9P2*&DxTMP1J*6!G}x(WX~I6Hs#ABVG}|3o-z;>^iQ!P$!u zaJD22XL7$>B%BQ%6J!400KWQR^lyMQ*I$9PXBm5ewN=2H6<_$lu(m4#)_&O?f;IL8 z>OQsxta*U764J>Ur}jzT%zx#*Y?P_`yF5#H>^u{AR`JZ>xsk`l^R;YK^;h{s_nFn> zU$Ca8?}-Oi``6SeQ@b-C#7DCl+rK?zXS3atzQT67l4vWtJZZ_J=wylo`zh;(&|uaq zbUd~_xb?9t*19y-x)LZaa;@unRXbMBnwRk8#nnnMt=Zh`CnsIkY2IcHt=1Z_`>^Bpx=d^^l(z8xOr_$TE3BYFS8Q)@Z7?6skzU=wmPg?)*o7RH)zn`}Linpx=ZmqUJu`BBj6FTgs_3kQVnUwKI&YLggPC*s9 zPsYJ$kIyvDXGczSSnRLL*-n}E%=98n&T%qj;QRBc@o$2qd1|IMA@u#BjDt%YBAdi@ ziQVmG)<`qdw63+t;oHq4eelWSdOpwUgL;{gZ(Brpe3yEpOua7o7b+7yIIU|uWd^pI zk^|<{?n8M>Sr_AvOmN~TZDnu!@p|*B?qyrHKDJ#=le+xAs}=t`HQslJS@RXBn(t1Y zM|ocJl;`Y;w&$2Rm#2cWs>F`2RAd}%YF>R%?CE+uFXNy!IxlBF?aAa`Kqu!{wR%F| zq;2RX8Lf_tgUud$&a)OrP88*2a^{unKSaNHwJF;E>K?{Uj~^zV#hx>PvhwIN`?WG! zk-e>!^HVFd@#$8HH)kBw7`u7u=&lNE+kvg-jeneDQ2n#5(aGKBG5kx3$U8>Q8_jzB*P$Kb^|C|%4fTII{}%{wVwH)IMahF5qSaaPlboC=2g^*IzrPNf!_=Lz9? zw#O^4y1DN{?8J6Wd9^mmp0h@Wm+|Rt;KR*-`Q`y$1b&$JR~?F-a_l<1^p_JwIo#!> zm!l}J?o|?f&+}YV9_a>@M_PwcPI=`6%WKLw=ytC@sF&vkt_Qb^|MIQBU8Hd+TPbJj zz;f)AqlC**G7i2@n|{f2QF){rP#$U50)KgK=p<|Z8nV*c&^1L#@SRkLcV)uEgvTt- zP?n3X8_U{>F}F*Z*Ldc4IB+xqdz;L$$j_3li8;P(tjz1LQ~N~cWuCv2*^*jA9Wuu; z%y9y9yqh_m46ktWFX2J^W3Ld(JS(qTeG`c{6VD_xG2at-wnZt4AI3!=d%b1yv5%Pl zZsvUKpSHfE472B$Hs5tH*=+Kyjj_KPwYiLUv+rMdkJ;?xeXQ@Cd072l*pKsFzO69F z_?G88a_(N@$QgOv)#=w4`?8)lD&rMBZxngwk#{S3w+_skPkK{0uQ`C^VXc?qYvn9n#nk>&AKA}137z~@tmA}P5PtRGt(1j&nwr> zNKe$JrzaoXk~8Y~rkq=d-+$fA^s#LZ=A?CQ%o%t6b?I}jzdpS%dq(=*otQqNhb7!P)=6x;SKFgh%zH-Xd>4n!{ zo&I$0HJnFyP5MV!Gt(dA%=6?==H+b5otz%^$k%f6ub-H1K0Y@me+uEzIXOpiXQjWE zHH-Gc>>3O-=rcckFonDwVJw55)ug}TjyhM}# zx|}_^lhRGivvc-v_PXhj+#F3+;enQ}7STI?c7GlFULO-4Sc^p#rv@gXCWW-7;*srF4fV&i>o_?i>G?S?No;XQ76lXW;D_c2*5%B#zwBhtZ(^mOn$ zJ)Pu}bkP|HODSJ?EB2+X@#p}qIL&9_Te;cNWr82q|2D5jp-zSKBc*L___VauDfeq2 ziwLg`m3MgRUoDUPdU@p6%aguKd6X|>MSuL|jO(-TT+Ji)cH|ZG#Q?rZFTR!6Q^lUl z?c+(uzjc+$@f*}}zAJfd)MbfrzB1mGnEadxvH7};^c`q@bb=|vL8xvsXG~-am4xvb zwba+ldz`X=OZfT5#U4k9c+FHvd?xHc7Uk*pDXs@ zGdz9pw+}g&=oqq)_#AfQ1Kop;^!o?RY1i;y{Lh3>zGq5adeWqnJt95?*h$2n%CObc zU_0@K{ZYOB{-`7Cr*Kx9*huW?Op-_Tn{CG)L*L@6$Ya63sw&bSHEgS~h1cIYkxOO$ zEjwcU%`0^cVW;s@P8N2H4*X*+v{%1(gLBHKe$n@&eD`Ai&dSIB&ECZ&@QYUVCN3&Z zNh>yKaW;I$yvV8=;XHL*X>#*psae=)v@J@St<*l7_1_ugF~|Yv);7*l&0<|i{A4<@ zmuS>gf<0xmno_zd<>}Nv4|^sR{^Lj2I^%?%axR%J^T+wKAKyZ$iq7XAKOA^0{1atAo@lBz z?w4hrH;7+IMglfM#y9ps(+U@QuB~Of&o&*pj+`|Gx|XRra@K}*8be0a>96n%WL=#m z50WXJ!b>7#N+)zTQ?*mhKv`Glu9NZB%Yk0Gqvj8gnROn;H$yfRUX`hqQ_esc*9x6; zdP1_P6&mJ_S~Rd6{>!)ia!8Y@Zl#=oGOpD@Icm5ZRq`wwSPuW?TYovE5nYq9TE0y& z`Ncl(0)~3S_ps+P-ZH*%;)}!hitJh}V_XJbCY-`puY)dp2OYE`I)8u;s`KTs_E+7E zv9np~wGYrg-Is^PxG1cDy2mQ77I~1{EqMdvcBhBD+(RW}?4!2;{p1~ zDD(-w8GUmnN_kr-Z=jyzq|dq>ptmdiVAJ4on0xuwUk-C$)fx_L*5p7x{m1J^y{CPv0L?4n324{*$=8bAAIl zZF2p4Mm#SRKM{_**C=t3ex|kXtt|Q~K9G^^ za>H!UWftuHL2bc9BgenJEl^vqZQS^Ry(=?s+%|6F`fY@J`LK8QlU4t!8sWtJ%b( z@+b|f;lWFp1L=1sKI_>oSMF-|Q#6OxcaVoezU8{U%2>(zjP6%%Uli;}P-e;gb zMp>)zsar$cQ+U6e|I3CyxC=$<$L#ZYw061d^I;#3pR?wo)Eg^?DL0yVw#6tnPGnAE z2>*b;{^V`7>u=&Io-W&Mxm|9Jfij(H8QEUwt6Y@M3@efAol}=zAaIEBmGTwt(~Gxr)AbV3S$TI_FNt1$uBifX~Yn z_ z>np-@r#)aB@Vx|B`M#R4wCo#qHNJwJ`KdV}dwJ%sQ>U9o#FbH3LX5IpY)2U;t@LBY zMtr-0kHWgj)!nhc)Dq4HTf%zKYSq$}snaBlJ&KF#`YJ>BJ-1$Fs&3|agXbNd`>(io z5B=xJdVCk~&+sl}!E;We#VRy?JV@$tWy z=f$5Ou4@Y8DCf(|Ie2yApGbZmc3IY3Pe_{uZe>1KH`}^S(^g+eNiKemiKUk-N#)a( zvI*pudTg6Y@I`1^C2PdR?`KIJiBg`(NP6GH{tFJ){%c92GVa)wUtT*c%l`!RRPcNa z+7jSj9c`ojq*!2E*1N?QLDM{ia^_5+#MLN$Tna2$Xrs)Jtobh9G__G+Meq$-VWq4G zzX2UAeW19}S5lf=4$QQH7dF!SmK5i%qkTK*Lk)e%XO8yKhaH=W^)dPpZEc_(eXO7Q z=rcCL!cVa?CNjUZ@0T_Hk-5)M;!EH5_){;d_`Ys)5`RYVBbBrb_&gqhHt#0yoAfjG z&wVpWXh#F>tf!s&+H~>M+;72c@|pHKhMCV zoArly@i(<0!_cpFjKvP-SKz0n_p-7U#%ueksT+rr=8nv_Qt^?Et5Flm@DW%ka_dlK zwlWq2%GAfZggays%G$r8yifHpa-b6(*7vO%GOKozlEj&3>8iaboqe5U)`QM;ZR4mF zihWJG(uA#jdHnJ>!5fJiGFaD?UvQ?UddJyYO_XOw$KuQ#v*=i%y;_PwKJva5&gbD? zEoBUA0DQCZZIp6XdM)2#ccx#(Txk5yP?Jmdzy5e?73r*;sV-^c z|789bkyf!5rPnbQ*5=Un%!qvM6E&-PH_xYS`RIWm`Mqn(FZFd+_&EE~hW@81_Dwb( zndgotYf_cWnpGiQ7Q;EFN%T1x9djf)<|uT`(UhG+9b@SKSomBFXS|u9BcZjmRrjPP zE!vo|Lc@;%{Wftda)_LDl!jeC85!gnWDwu@LR&F$aIN$PXa)OCPjKG=>s4{}N#MX! z(Bo^%?T^VhQ#%;9FVVZb1v7nPGDrKBUz&P0o5jXIy8a>l$vIdP$x{NJtYb~AY8U*C zvL%m?JR8Zgjy&tgvzq$u0EfkILE!a1&P>=&df7vJ-&>}hB^gTM658uiW8=_cC?{6W z^CmX1d&6m;9+Bd^`FAGn5#`=8vvPoQY(`3Xk!{SNJ}>D;Q|2PdL>Ajnicg1>i7dWS zWUDXe>&>*ki*r4M21~j2aJhe0lmqc$U*X95{%lwFzsGZcr)!oH{G9v2Ym(7TCqq}u zO)K2yHR&#qWm!`{C-;P#pPZ9Veb^Y@d4u)6C7IZy%&}d2;CaPn{9K8jG+DaF6Bk-2 zbXFZ#Taa>Z`ihOJwloX6FZ%3zCe3#Z^zH%HyV9P0=)^PL`p-7cd+oF9)sD}!gmvkb zgsJJRz-Ed0yFXO45@5b4{cX;j%mjCIe8MK@sGOJM6!_);Zu9TvNE$_RrN0(VH=a9L z^zY>PGD%5Ph##()m-8NWvb$rI#8nd%KkLb5azAs;1nD0>-&Sl3<>q9e=cA!XE$~g< z-9~w@JEF9LT66WBjrha` z*w3sWd;Ts7y@0-Y>8p#rX3K2>i%Jhv?^^lthFvg)7Acecfu8qUSZ zxIZzc*8JWaW##xA)#t3-)lpQSJZHU8A#A^?4H{?rD^VFiSw^@auYJ~nDz3#*8JN!lJ*|{wN;uMBwogQ zdq&e-2Wc{0MI%1AY(c|!ct1tHB3DttsR>PUox~OXxrv)t({*2_6@2jhyaw~QXA6{Z z&lN;v?H-{ixBoC%=H8s_Q(4b-@{RU$H%U=}C)^+Dhx9@EBK?r|OJCZPL*Mm2@z3bf zl0ki1IJi#}F7#=h{G*TXDZQW959(Jt{cuQszN_At`TGg$KTKZG@DTm_fPT8e{i~J! z@lWQV!xZX=2N_lNaQ_>yv?>|Dme2ZDc0Oyb6Q197_k5ecUnjmbYDeEnId|{;WF^Sj zrw%ipqpPF=GaG@KT7h3+rj<4y1Wp7V6yTwi_Uff`nRd(8hBPXVVJTnsNM7vM$u9fFr9Lhu5N2n>9l$@zA`ufS&ORZVmMNL=8j zl{wPkh3`5%lD30?ZIw~L%X@P^o5b{39Ou=41t|Um=RbL81Z7G z7x)m|1ZU4U@U1U5rFEU3Y!3>43hpV;&Oq!KUovz=+nljt6zgd3nbMY~fLl+3Tla%o zv%sxdXhWMx=m&IR%$oH7L)#>OBn>Ho9^5Tw8A2cMGb<~C?|00y2S-EipMbV@aUXgq z{KcDHXp?mei_T+WOW%aY+>8B5c*D&nO+BNydw4%IVJz~C6+ZJh@Fg_Z&cCKn%Kn-- zWMF*Yeo(HiP@t(oZ(13{!|;w2;6Z5QcgVl!)M!7t*vQYZzop#0b(ankjJrWYOwfeE zaG=u=UsS_@?|mPIXbbSv!`k*ac!JPw9nQjdC$O0b4G~&$DsDkT=DTYP6nVmUm-+j( z;Nsf#GM|EzLW8V&Sgq5E!xIEX9;eKA=N#gFH*;uZena1&Rlr72PgAYauAk~@-qq8{ z+)H|)DVe{|yfSlR(Fo=D)+-f4fytrjdp@GRXD?CTzem*f^bqw~fjj#!k3J3t?#>2p z)DUCZBnpiW^`B+iDyC9hssLao+>)^BEHvA7kenmvN%Ja(>yNQHnHVt^t_js(6+^_nc!Cx zS5|uIZC%H#DPCwql^XEbEf>u=3P3jv>n!QMuqQcZpCkk#;$-Zfx9Vh z+}l{YJ_cLE$H+^QIpZUNXF7J5B%W(HpJOD?D9yV5z$)kZYYE>YOo+9vPayn=_(!)n z*B25mBtD&RI$*31(2Oj`O3r6= zq5sG}B4pzg+Qumx(SyUb3H+MSeZ+SGSv-g=uKVf_kj3+3j*AT5y?PXLI-0pnLHqcfNMPK7@T2dxkK@n=x6K1cH!6D zZ?hZA{74$j!udntvxP3o&s|h_rfe&*2 zPp&e`m%*N$qY>@=Eqmg|P(J>mg|87xdvbYirJr(dpR}jj8fuT7dDuvM9>;cbXgoMY z9gNEfJddcVJo7gj@eB*4T!DFO- z(Rbiy%xNHY^RD)1><#wkv^&-367J-lx2y8#dp_@ZyuZfxhj`z{`|EuF74NU}&Urj% ztl0ZM{gtC3>3Qv{gy*$8uOXaHs3hEV<=TV|>oXJXTA!D&;mU0ZWmkTbaQFJX31#bF zPq_O^&O|(8$5!&`uk!x>ydL$86P@7GU*-S(dGTL#V?X(H;rzcpug7#oX!)lL7ySKs zRr48WCwUkC-FZ(zOLij{9)`BKIaA2aQ$*Z2@5cgs%AK}$=oRxG%#JNHWG%J&Hh0w?JbA_zbC+8L!^$6~q zrYy?w1x%WLt`PfL7U)TcFZ7|u3qL3aM~cC_PDR;Y^8EZd&cpD5lU;Jo zp$nYgPOFrF(mkt~^TaZ#dmd}56=51D_I_1)IZ5!sL>sce4QWd)_N#mNC*O<6m&dnE z{{4=!gce8|`Tq{_Wf|NpN8Q*f3Z*@Uz2=?R3+s)H&we$YvPdVk8LN_^pGj%hX-<$< z&e9p`-j&)h%6?fBA5H%Icz=w2O)CgpqoKLzk?I(9O783_&SNfnPkMzOwJ{&`-ESd2 z?*?Uh5o589emrN=W>xIWs}oy<+_Ca{l%mU#ZfsNTSmnU2(1@nPvCtwJ^MQ9a$bAh5 zQ_rT1qD)DzSd;_e11#n3J*D8kA1V`n!Rm}<%JfkQHLGrhcKv{~zoX5$?4yx0JkQsh zeX`rE)U6rDy(s@N)<2yx`mRT(m9>US))^{UXNYspb@kOGLA!Q!Ojhe$_^;X+Urp_7 z?3kbg&;Hs}7pVMJchw}$a(lsC=e?4UJ8AT`1Bbg(IhSpOGDBo!srw{#wsP*hUgx*c z{Nit!NqM(&4sxU+`x z9F&(&d3t*0S;}GU;zBv(tsUaK%+q3%J84vJr`HV}L#Ov^3Vz*$QvVb1k|$`-(RS6J z&DgVuKLeR+c^5XItllnfIkFn?w=xdXYbmd)`*Uba=@%-ucQ(PH$!WQhJ-8E=_`Z_y5=$-tpJ z=#~SzbtLe~*t01zE|2TuGOGTHLE~~BIwE5rbS83Kgsu#>nUAB6i9A>G%;I4k<@niK zhf$Y?j1^kTs~sLeH+a|S2I1ho7r`S01_iHmxFKG_7#R3GHB2MytoyiQ@)}x)nHs!T zgCo}{jH#Wt(%>;U8roPN9Dt|EN-#uA6#q+OLuV%fr#fuz4$~()^D3}!0rqDDrx$3? zV*0X(ar?TyM)X6*PUhvaw=a!fhZX|!;DNxrfm0cjD|@LWZqy}sCjAt??Pgvtn(Op| zu>J=AG?#+)M8-Z6)_=qt3Vs=|{ylw8N7wHQ&u!$q%KBGi9|g|evzV$+@^tW=;gNam zULC_Y44T`d(A*{i*LU-NA2_SeYlYg+1B&S1{U=oa7k>%QEAo-+Gu1zad4~SZkao)Y zw=F^0Z^N!SGd%yTjA5N=Ot$D%ot(plUKA^Q1|PYVXQ4yJ9L)~T>3135Ya_l#_N#mK zLVfOJ{`V+MuQJ`W&a!PbZXdmi`@JoW1D8ZrVAx?rQoKNmGZSDb6rm ze<57AK~qPC>o(x*6V4)*J|{`t0t3vg@X8QPy#Qy%dG<$OrpnO>Pu0cQfw+V6GUsqn`Sf(ARnJA;D|;?m`a>M9j17%Y=S#wk0+&;Ih_a z^7p-U_DRu&I)u+P3%!(cYcJ5t-DA$CSoJla3*V&Ofg}fKo+&eG?_+;=VU!;qxvr=& z_H(t2Rp8+e&)xk%h+Khk6mr=IXv3l z+n%EILc4<|1rhqx##QY1g{E92D={a?T>I|}|6|PiCkbpkI~(x7~b?l%=YX zuOe}d{T7#`?N>7=GS>#q<%Z|lz_|o{u1D9;By`DK48XaI`z>?sp{>Tajcy5z8~1X| zbQRizM ze73}ZQ_SDG=f7nu`FU00lK4FvY+LG|*&cmk!LU+ zs|9v--va2^J-k0I^a?sw6@gEg&?>KiPv20cJLIguiah-cTQ}qM8`|k!<>;w}Zrsch zK-SM9+#S{#MgW^%0DHB%E;W#@m8J|$*S3r^Ro5^Mm!eUR(SL(Ro&E|MRZpK=#2=2a z9ZYi!y7dsa5=poIg}CV16@)|O+en!no`2)1;)(RrXyx37Heg9)k)QDHVmxgL_FxI) zY4C+2k@v#m8Gv@%nXgEkiS)Vapr67IjBgo?SEkh-6u3FfemrU4rSe)S*T^UM_5f|I z9MoPr^1spEWZwVL_AUZnBHR1<=(8y?N<8blm|GIF_HcnwukTVJ;YDqu%pLgGr5?r*s&pq4@9PJUx==cChXDA z@io;iQq1*%6lgQ^T4PdrG-!`ES=rx>FTRfF3%G9_8q9+>m4dy=$p1e1dyM?&FXUey&acIX_>Rn%^jGB9jWN(@V4Qu9 z`}9c%XzvwUAok^+-7#uIZIaR(*u!}k#9g!} zP{{m@SN+9|DeH*%RVh7zHOTIs&c?@p3z6S$g-(wqjHJ^dugiGp{ey?fc)6j|vw-n9 z(mn~Dwh+p=ZaEg3D=%;?eK5xQe$t9gwm%x`g9nZ3;j6;uXuKtsd^vJ0iOTE^D7>?b9<t8#_C=M;VaU~R~r-wr%}NFU}se^$SP7#qQiv%szN@j77d zUT7VBx*vXH8Iz7Fj=H0aaZ9$TPH1$Nr=wA19_$#QbUK`l*5Ukxgb-aByzhwi>tpjn z`tkzL%RGbmpx8q`m%b2+jYRB;8o1%2ZryH(tS)dUdW^{LyWxpn(C*q1dEK>)vo~zt z@`QQbp{+_?1>f5FC*P!xk^IN5WI&$=%JNc|UOxUmx=mmYaMOFTg?bNs!rX{Va4+{0 zj5>d^Me6gikHo02hySivd(g$Xa!=4d56^aTG6*=039DTv(4Q~*=zbYYTZP&Mt z(8s>s3rrLv>nujr(YDk*qaoW^wzvyN15=Uhv!l1jILN(N#e4GVuw%35X>`~4=}$ae zfgFJ@)Kd(-KvsHGmzA#mx=m!I?Z`&z#Moy}O$hliCIasr>~YD0E)*jpvEJ%)r7F4{ zHivl*fah7vNfqVTkhw~(oNp6f(_-2aYj&To+D1RKJ3QvC@LPeqjN6nt)voxBI@-|% zzkDNH4`p@4;OlNu{aK8ytOLyIJ>7zDnSKVi@D9!MWw*4c7(At4zT!zrkF2TH(kEjK zI^Z;UpN2jr^+He1D4HEM?Z&s!of_%y7g<(- zxfeZA`Ykj;Xp2G~X|woW%DcczI`co7XBy9JfrTStQ|G#{TjPO+;pkK&IJe&HcczB$ z*g+_Avi506U+);pJ$mR%E$CSqHW6Uan}M%o)R-05iB9!7I4`g>K(_^UThYIC9T(Wp zbzC`vh_#5=>F~qokc}+PhHv{fh>x=OYSZaQveJ8ciW26R@XE@E;FsHUo>>o1vOL+XY3sOE>3J6YnKK#cDr9tti4az9@+@-9!;Gpl1gSNBw^QiNS!*dmndyeAq z%+Y#Hbs4?pIvf8pdZX)N_eRx?6c}ZUVkhR+DVM{?=||rSrn=L8=DMs;`aaeC!~Hfw z+w=r~#|u%RZw}tCQhN5#ZvAdt=Ke!$HqLW>Gymh;d3Aj;$}38o{ah1rqWDQviXDNu z);O0vz`V;nwn7VJ-kla@M&o}gbpeqZXlreSXHLtc{JMGQNs7gOu9dvvAN4F@eXQ>P z`-&4fwwg5|Gv8hWzr<%>;;ilOx?=j$bBhzJo(?>()-~sGuK+YU0Iq1Bwnn`Tqrd^$ zVALPLwqv9HmfjjKg4cd8?F{`Nskd){En(QD^~=LC18oVl@GPPChAm+uagk^KoltP) zQuAxo@oeb1?_kee9sOlZs7v!yJuTzLUX@3!;c?4Q$8HUBk11CwU&=spJvc(Lr}W8+Sk(w?h|437y`OoTfo%$7~su=KXQ3Uj=Wy zYuL}i9G+ziTXrt!*81l$bWin{rZK*!+U<22=CL}wwM4?3POC%dn!v56*2MI~n>*b- z*ZaIf_rVhw+kWlEFy^~@Xc+TO8di78EU+wVWhtC@HLCvhr=ipM=4Q-SrYngzpWDNH zc$4Bn_5|cC`B$~%8eeu>tbY-*Kvw33e}nnH+>dJTexZ$3w8NNt>4P!%(uWLntUmX8 zznNQCkIb#KYixM#$8;TK-*f-}ZsY$L9nKFi_g662vv{V;oF7q+N8Wj;F0^%tx z{ti=mRBRc7ziqTDQZ^u;-->J?=N%2ciwc<rmqut!R})=Lz zJ1%3~;eTV)n$-R>7Kh4^{I1x)E&o{Zw^2SeCtyFh{+2|}+d}V=@-=9r_^fv1EB?`H zlztbx=m?_wNm?1VQ_Mjv_p;Q2i>o+yPV%kBw`M#%S@0ue(*upnrC)7!7ycv#AJK4L z!LeU!O0^Te7%3}+bEE57%&lgBeE&Do&YgvO{?M=?F-fVmL;vAH9EYH+{ByD?Xp|)~ zkI@b%X^iqJM(iv+oYSzuL|!ZF8GWX)rJ49rNnY6p)k^!CzyVi%h))##FoXv(=W>=n zCvz9+^WcD{^i__*{&DHE1U3Q_SJKbEBPMLd(dhUw@cd!Gjs^^|{*I>9>xb@3HelldE|~jqp$a(f1kUHN*N^=*sbVko(q376*J0)eI!+}pbN3K1BX@j< zVdm7@&>V_ylgOkW%UqxjwxxyaIf7f?>2rPq^V7;0cT7gd=MM46@!5U7 z+&RC5elDiJi|F^)>Hk7}1s5Rmg!YqtN%=B|Ma-e_RIkazooJ?@_svHN7p;G3Lltv& zlsSuK-s_on?kp?2O|44pSQ}+y9V+M=0bJ9+59puBn~^w?MIP6c&ux&s`5!Y^EgwHp zsO5y>`_K`ZIIq=v<&Hw{)X+EQEYiGmA#TOje+uy3@yR2FEe$W}3*`dz$3TsH-07Z?835 z_O76-QubpsVTqN$q z&sO%B!Lx!H4ttqh)Fv|BdmJcESzmZ|oT*@CPG(cClsD9v3Vxkh0sKw~;h)GER%ou9^Itns>_Kl5 zcV9zu#r{5gn7i=c9Xkrg?QGakfDi3;>5Xw-f%|c{yvw zlZQW(%^B&dIfFv(SeY`MH4Jq`$!>f|x)fzrb|&|@s0p)HXX2y8x9h1Zg)(h?pXWi3 z#wYm~e3SiCvWK@7TwPrh4*8$SzL{tEukrtz;V^q*zRebGVULrgRPH3*%y*-W*ivT5 zIVh)($eBBq`emv;Sfi$uTA{^qPERSmXhpQsM0pnBH>68rzvWrR$~7OHe!F4A(D*-k z0RFRnF!PIH&w?jh)&S6N;@x~w< z_bO#y46_G~KDGdl+{2J4b143~8vU?wR-(uh8os$A>(w%@v3!3qN%J{Xd$0Uk&7Mz< zzRSMWWt&SHJ?tZteR+%cwkF!%Yv*0g4SR$-cP0(@{g=fQ{M~R<@XbV1@Z=~{aG&fQ zg?`r1p1h}Sc;EWQSw&JX)m{*tyD z^hVM&eSq#0L5Fu!zMVd=BArh62GFz6ycvBx39iasL4%%2e3{UbFrAlpQ`?2|C2nP0 zjs8fymAhkVsmmBI`Sw=CcuCw2{21ed+43ClipFJ=J z{nzvVU-k-w>A(J;Jjt9_YK)zHgJ1WLou1~u`c~dYy4Er7q-4Uclvj@o7kM?}oPpHt z)+vHFYJD@I*j3MBV-dNv8~PQ1mRl^!@_Eq8Q`9T=73p&Z=NXF4Fa`TF@sU-~cx(V= z(l*f*GWmBj{7vM5S){{HWu%2Y5K`7|_;B54_F!k65_BK7pKm>)oUg(L+L@vRpTaKb zu6S#Xr{ZnwGLOt@tK2!qUGZz)zfX9S?{Dy4#rN&Rj}d>9xR3Y_;=d&RI`M~yKTP~r z#9N4ekGPk3Gx5X3J;W=BA0hr4@k-*`=2%a?Jx4i3Jv*_jd|&CU8t(|Qhc~#LzMP({ z2J30#=_zV38`^jJDm5s5fv4(y7MZn!v`%!{3Z8R}pV$ONhW-Hg7e9AdFVcDO=io!2 zK=ec9jDFwZeItS$*EoW%*M|o?CaosQ`#{zFVp$Lc)pqaGftN_7N_*Ng~Or4!yx zNV|$lMg-XlA1q!!BG~$(z1MwMIp6tBN3d$N5?s6@+MlU98Zz+<%T(=z3SmB>nJ|yg zM997%b2Q<6!l(vo+uQVi=bZ7g**B&xY_R%b8Zz0(uOI=4CfL7hsn2Pbwg(prM#@5C5RsP zvgmO$s85GeHRI}ez+MsZn*m!*Vc0qvhOPI3ttMcrIRdtt!m!l@Y&A!~Ruiz*906NR zz*chvY&8K}%@MHG1Z*`&z*ZBm)jR}j30`ypOEPzzz>=<8GfwcuLND_yXWt6{Z{htY z^WB-Dvd05>LuOl&=?HeDsln60Stsx(uy&Y7a8+PU^dy0`ZLIHG!)t9aHd043G}lF1 zZK9*cd3vF44{-j05Pu?lF6yusU`x*okN*;ZQFQ2j7~K$t(Zj&#v*=U*6VoGYbODzw zw9^G#wg8td;4(npTw%Cu0xmm%%NF2L11^gvx1)@*NG17Je=#7?;H4D%XdllDDU#0vm{1JSbloA zekR>uJ;?+86Wyin$ndY!B~2z%bsW#r$phE**~byGy|AtzYcws~ue%?(uLj55;MhI1 zql$U$MBfoP#K4^?_$J4)Cu*7c?d}>ixvPmji)^w4d%DkiQa^j_n;b&7- z?O08wa^@6mzJqt4oH3`y`5FlAp8uZX@SL2J=V_Xg?`fW6=T5Uc?lfy4z3f4%QRBL- z7Vd3)l}WY6X{Q3XDwZ~jcV|{ zFt2JB{}ZV<$I;^sJNE)}?85W_3Dnsa@kz?nD zhH21So!4Ur>K`BGMCQhdpMb~^lFp!SdYb7Mk6}47%_AaLg>`a?Po+#lR+G3pLid!o z!g(ylSV&yfhh!`w+Zg#icDlV2k7zg%?%D1<0o;2 zG7LFRk0bv@w#PmwUOOmmz>Z!YWgD;~ak^>&!E2sFBv`(pTyHQ1Us;+-3t$qwJX`v(+Q22@2sQG5WXS&B$~7#*c?=Ugneom z@D@3CO~6*<*fAdi#!md_h8nv_e7B2k6oKzT!wq`nSw(1xyl2>Yf=+n#y=*_(M3xhr2$s%s>UZCmu+r?!UvIrxWfL3Isr zMYns81Rj#>$Kqe)%?tZrphq}_W`y~SlrMdEhvC{Oa2uwj%`#Vcv-}!$82reI{iXlE z$T{O@ao02c1mLv-Kej@XrLM88oBpX(sbjxF5BIhp2eBT_zgFzzvR=g5+50=WLq>GD z-PrTw-!HH=AZtG=vi3I^OJJk$Qunkl$NIYW`8y9{A6Bswo3MxD2XaL5BMTij&OXAH z?MG(n-)~q~Ij(#3r%8T%x`MI}xf`0&^fqfm=!L~2LV98G1{>?{3)!O<(h04|kD?Qb z-lDV-B0m~>p%od@&~T(H*EV$98tyM?gJu_@<2o73d&Xz_MVDNNALam^mvSu2Eq>8yn+nan zr_misZjTFYuZZ_+%R~BuJ0?TdAKWI7u0Pn@cFqy~!5wos`oRLibizEsG{StsafEil zv4jr7)CMc|IcNLuSDn|!^omSegkB@<68!-hTCLaru+rR@KjeLnyyrDIALf0#yyrJKck;eV-t7&}`*?pq z-W?6jt)97tUM2dH>+R@ZQH5u27GnVp_c}|=y|V8z5^qGN7dj+7CZuazSjRkn=WF^I zW|axz6JW+Cz`}Y>EO;3QUdDr$_~hi9{k4&*^6*Ki>zv9K7CB zJ9(fi(mL|5ulF>Gzfgpok@edF{IrOA8j&sKj;lzypb7arQZ8^~cZie=nvh`zulHE_ z7Rh&8<-YES^&ZZlO4>&~ec+1VXy8a%qbpB*-R(WkC39{9{{DH48EeFa5Ag_nwj+;) zd`?5@5x+rXeM4U$?vAwi61VfezaR1+TKu21DRAVQ-1kPi*q1g` zyT;R=2@&m5STFvnc5y~%zs%2B4W(}~zx{F!aRs@me_o_r$SnObB5@~cG5cv(zg)vN zkz@MDmv}3E?;l^{0n*>b7_T5S#`ObWT4h|r>x=`&)ivqDm@+qoaz9|?SbhR6j2z2m z{B;^B|9aB(%bC&+^u2x=nYi4MmP@+nq|>5>zp$q9wNPF7W0mzV_hR$8F1jl9gCnf< z{)F{)&QbADpE3VpgD}Qi=3K^F0UsmVEV#)XzB;asrmi;duyU8(_7FVve<=5(N>yL; z6@TX(aGEv#nObCzC6s_&@lxc z#C)aasqxYHun7$sTR##Tm-KfqjQt)Pct@{VeTFBCv)KdKNIJ@)KLu*A^%{GxMcI^I zRR}NRj81se$`;P>kbfT5MSoBj?f-zYam79)VUpZb5#+!E-CsgvAZdfN zdDV7&F-xz@U4(B0em(m62CKg`pE-xGXEU;*mpyY?;Als(5|r^j#kd&d{}`LFw7>PY z>_alfga6Hp$6$CA8Bo%qKcqy?aW}eO4Sn{Gb_6x*sVZ~?>j<;Bhjp+Im$cy|`CF6i zLH8}DpwJodE$+C}9`r161S{yHc~ta@??AH`U_(Ri-tXR{^ql4FK=CsdyR%oyN56N0 z-&OJMLh=8;f`8bd3Z?vCQNE-X*bo_3ya<#y*$sK zNnNLm^>XG|Utbzf$LRVi$salH8^K=(d%Q5E|Itv7`Hfy6(^0?c$?MrimIT>}o9 z1=d36W(yu#8N+_wfSxzlb`=l3WSxJ2j*R?vfp&>*2tQcNyczZy(HB34NA}Zh;zD=( zX}9Eo*7wtH;+fF)THRg~l2;6$tA1Ka8arts`K!?Xe!j$i@L}a-fuD#qN5=mG{U;4H zMszPbJ)eiH0|7Ma!x9g|1dy+Pp6$~?PF&^rF>a0%=WE)yDY zQ9U7B!@#<0he-G4c@>#08vp4eWU6FjtC7fSqmb94#johm3+IH7>&CvPuiI7XKJ_Nn z??QfO>>Uc`$^I~W5!xq&XwL6|t=c$zzr+uLz1%0kQ3vyhE&GJ%zj9`o{Od#i#jk#4 z2W!itH{IXZzBZJ<4IEk3$9eYsK3%M@v!*KkTf6ZkQrLIZN?MWM3XwbA=(}>ph_uBE zyei`NcSOC&*Gbx;`#J%~UZEqxOT@p8vc!+#L;AqH88q>PjJX|NrT2rfv#4XJKCA&Q zhw20O?hfdK;YW7Ypgv@V`|t#Hw0^}pyU?*q{dcnV8J620jr64w+St4KX6AM!bG!n% zxe%E-TGyX%Vg6V1R1e25IlN}A;~9DS|pZ&6i-~hNcjrK+2>tI{6 zdl0_biAUnAN?h<&_WVTRXp`W5gwNAp9ED!5Or-8e9Cgx%ewmE+flC8$b~iZ7TIi~(gb2NK}qQHxgK6C1B zU@BknU(a0kK&zc;%FHL>9lzzdg>yD!?M*S;dsC1T9>z!z z$AZ5O{vP_-`WE~l7r~#<#Y&V^W#uiv>1pz`vY%`TvWJ4dPJlcbd6tpx6V8s|-1&O3 z5v|7`=cGp|b25&lZJd?QdPx&wU2MSy!}?4SYbV9{_Hbu*iOPG`Uxv++JXK1!kO>a%kbhRE z+&j3E`v|xLlszGg^QX|DGmN>z?o5|{;rnvNj$L?-y83*PrQEg_o75?@(vz>m$Ib%= zoa{ppS!r#e!&XGw4&%dQGAGQMXASu;O=L{Pmu8+j)UUn7WlZdh8~5!M+G#@*K1tFR zx19N_j4Evg59XOhl{$cbHvTQ2mjsPrY@g#yb*q$R=NxbTNtt@+L>9sx{7_U>T)7fm zDz@Q&rR@KKKOdz%N23yEWpEaphw>-!{S@CbIOk0z{ycG!tE65Je%n&7hj}=pj4rK3 z=QHZJk(PbpNv|xP=$m+Wb>kW6c&G#OzDv`eJdX$?LzX@6Fy8RdXvn(tl^JmP6c+_@$-_qDZel$V$V#d$EU5Z z!ld+iV^y2bT=+{*iKPT0Mft*uM)s-S6O;r-;Ap5cnQ{0pHz>V~D3W>$aA~D($zjc4!KV@-yL89pH)hC@x}eYAgJ~@Y#j7hkO*#^~L93beG66`v9DlF@vuT z;j=r?#|;^+6dK)cLy`D8k(tBtg2Zb%pU#lOCEm(^V_YO|`0P4q^Dk&~0Nr0hp0MBx z%l^vJS<|1;?GTHH*XsN(9$T5%B|76n@sCG`;#J{zYl`Rwoc9`zJHzp##D7ZphU_AB zzlBZ2m z7O&53uw3S=RWsgOMw+FR*Wj=(KQtE~Pvm9zVM0Oi9l1L!Be?4_BYcxEmGEOi*-swN`K6-gPbC~lxQsA~ za2=u0{vCuP2=@^RUc5;dOZYLNMi|fey&^wNB@}+Wj8J&YI>H?#S-G0-Cp)@p4K~Jo z%z}>cb4qC*H0dP!ExW^ZA{qBO($^VvQ0GzNN5k<} z>eO}oaNGetxICUh?+9hnBIeyYTH)?O!X#z(BB#5srL}egwvOOX{>{=Z*+X`3k6JyF zecfldZ}4~MZbP+u&!Bc!AXi4VyMuB>4j)Pecj{+T$iCgs-9h&&cKp4+kH7c6i}ryC zU%5qWiQf$E1JQs=BXz#1te&Fyup>oUMVAEn6S_Nx8yW7xb|td^UmHnY8#DMU6ALGxTR$ zlhYJ6#rGY2UA$vBZ{uwE>L^Ud(Q8l-yi$)-1f8g+H0@9_S$Q&wYKWM8d?A9 zg^_MGZye9V-8(GN(H7NGdw^KPR@GX2f@_2tQJcZKAd@x0XyPtl=o4L}s{S#VO7KDF9#EalIQRJ$uAo^i;pl z3T=n+X|%dKtmCu99zy0nDW`jirzORjSkW~yH7dHu8g=;LwcmO3cT1La@8thw4=LRnsay0WdEl&@^P8}}IOPOJMNF<$iyx=e~bm?Yi$m^lo5web3XasOhz)ukbU__!&!5Eq=$kz424xf6Tcpn>k}@ zn>CR$JyM$5fq4b>J#a?dd>82<(kxNMRQtS#ozcn*1~09pVN|&sbuGn&az%U!(8A!KDWi8MpSU-mu{yR(JubAY3v!M zHZA|6XG=Y?%Y?Ux4gTH>*etKY2V@QY9~&578_*?stEc$OsjC8fRuF@soHGPV5|tGa zTcb8p@h{yp#Sbla=F9WQDEc|N^EmPgJp8E0`S7G*E9)O6#}nMc^PEV}CmR{#wQB9w zIcoIb7}h-Fi7Qyic^eyluJ}LX9F0f(%8`9G&rRx6+vh!!ryTh{e4t9Tzp~G-#8y=) zbKCvO+>P*X==_w>)W(s~wHqf2okbsxro3@$qthSWSJGUuHa5LBQf)SAT42#;8+NA> z^TOC~O=>y;j{XWg=<8r~vie?}z|C4(;GO{7g7*yM6(4v(AF1=3`i`73lOb1-d?_&vm2kMvi8 z@02f2Z&@V$L7Bq8tAV2in1p{9!oLgIqj5*G*Gx(#|C9O9J+h?+?%Dqd-cK9vr;Ve4 zQPx{hj{KjDZ)=amR*}zIG-#cYbsE@3?s|`ZPXMR*fjh64_>=u%Rs}DXq>8$d{nFb_N3g# z54kR%RNb%<9*Q5S&O>umwX+hr_atp9inY~tT5Qp7#ddfp{4=IvY4=9{xe5M>&uN^< z2f{yzOQH9J-UkUrAN=zC=`Bg%cBpwWLu74mrO%TE&Wp~IPtZ5g2PR#abABecY-P?D zx)D933LN{PW0O|ck1c*WrEAM4z_zGM-CRLhMOsVxE-6uBC=J*HMwh%RpzGrdU7YR2 ztf1gS&-| zUyo;@Xj!eqB=cgw=l~aO@IlVw?!6ChFYUQtdo>wTE9bR%iIF5{f_m?n*P?~)rEP+b z*}|ad|NVM1{=q-JUk}f@=zcxl zWnK{(cp$Cu?!UZW|I^ck9(|~|g-W{NU)xT+Gl^fepR4H6UuCVyzIf29p9k1S7g|gx zt_%7OCvaX!*D=s`<0g2PGQf5Nf2MxAjyCKeWnFkNy};f9_K>C6H4d#8=pQ4+)SsC; zU0K6B(XE8*1w=0!t{12rLciWNK)>!8U?XYt)6jKaNawEG44Jx@0eF=dkwO!t= z%hp=vH$Wp>ppk+4N)y+nen`rVg`bQm*;xq(w)Fje-SuLeU0RI zQl6==k>^VOH}y60yp^&%7b(lsTj~E&mZ^i2=Q8#jofrAn&~XiotG7Q>Hy%f;9i zl6OP>`-0$Q{m?O0oudrfAuHEUkt-|1+mJD3 zjvL_xUxr`p9l)8la)V&>rFTkWJuT_7H?$_3Das8tTLAKz`K_;#cy&>?elfUB=dj1Nha_usuTg z?mg2)Q^zxDclpCkET_ z88!}*?{(5pI`f`_6w$SW#UUBh&Atq6HDe;n8Sx4>Tf#q$*m9$YA9aivWtr$S^RJ8J zeNvO^)a}bRO+9mZ%M^GgdY6{t`ahiI#IwYVD@Dhvpbs_6iJ~06j7R&IaRp_B|DPB3 zzu51gOYIj6Esr@&+Dltl9~$eQa6SDN+Fnn3nwT%)KIWC^eI%AGdKuP6*rzkUh>c*l z|86PmbcsINALnjZc zKzfE$PkM^SZ?B)>qWw1F%dAEQmRKtJ$P}VuJ4>4V z{k*B30<0jPtiL4lt2dnYjM{#sr@(Qp@IXm()VH^U{DypKg$EqXHs;fV_!c!r7-xJ+ ze3~kehr#Pp$h+uJj;34}!`8Lz#~Qk(r4Mv%@l;Hi8bBW;y5wr;x2MZ`>P%=qwv`wb zwopA{o2r+O9iYVIU|p-**Nc6f9>;^2UNs?G_;A~E8}Y0U5~D)q?_Pg-n7+_W!&I?-DkP3~=v#4=54no4_=ipf)3_4Xv|?Rl5>bcNdE z8_*spuaWlXF=Ym{XEwgL7iv!p?OBEYsmL2DaJ<2IlCip%J`j8M&5R@F5YFkz>CN+- zP@Xn@940o^k_Wq=NeVwVk@!!l<#!)zrd2m2orRY{<-pVFl25A}fd8=pm z6YxJC`0u&_|9V3I=J8)i=s(90|J~1jJq4B{9iuJF&V9=Yo+IFKk?esFV=sI-cEFs+ zXSHAlZ16W(+ZDib*^g~`5B-ejRo`Miy>;HrEl;*o7XM&rRdHIOulTH5zcT&N-yi*t zv4KxU9e+@_YiV6_Q_I1h-l)fCKlsz(!Pa?~Vk4hWv0v;Bpy`9?Op79v-%ITI+34gC zq4Se7dNx>+=Qz+Q$8#oj262*4Q-8ZY){@if(RF^4*e_DQ&}0TNS?{$ZM{D?*=fR8E zeia1dAyflE2xrHGiP@$BccvL7Mmi;I7*%lhQj)*UyVKe)vEis8E=<8plD@wOqO@1#7TS@9>i3|eRf7Ku^Ad2*9vA6E8q0_a%^X=^fZT#WuMq)%?7 zZ)VX)H_%rzi5XhJ`QrJ@=tJG+J&yiN`=|P}uRm`^FDiZ704&MCB6{7=*#B!Ny1C^C z^zByqHl4oxoW31J-~NTZO$qgF!_iqSjZH@1HZ~0pHWXco|9?Woad7TpoYz>A=tEmY z6#lBwYSf$`^L?S36fN(($N;bM{0r*!a@L=wCTF#x8x_7KbpHZA(7LXZIKxsVbIk%- zhyQ~51XjVDhW=FS(aioUwEkdg1O3++)_+@}lfM2-uWJnJzp9J$pBp{7^k4S{`fn$6 zVZtH(w}<|dnB8XoCH)iq_v=&Y=3kJ+7U*Je9u&^O6y9KtwG_`3f2wDyKgpTnPj*i8 zCn(eXiOO|)EaL0f=XmN{)8Nl3O;do?duVP;EBo$Z6Q|2_(BOQ*jo9->8?;>>h8vB( zZl$kP)u8b*@alAx+Dmr~KX3kDFyMdhkA?@=O}?~6WU9Pu`{QPUfe0 zf#+rP!t681JR*I5QqPmnbg7;vrAfw}4zo@Zsn|)UG`&wAdFPWjAk1gdHml^j=4L%s zj@SUuZzDETc&EB;QMFF&2u*mp_*bW=5KM1`U@~A!X!=OX9stvC^gIbVY>dUD1MOSR zelwr3NZjiKhRx7I`mlsFa4ll$P!j1MY3rMzx&pNA9_A0hjrje%5PC1|12?yrxH-i8 zRo7hFD?1$ES#JwCkol#KXTj@U$rq9xUgqALPwWBexSKgi>J|O&6QTDy4s~3J?xQa@ z2{0sdjBa6GxNy7?o26RpKwj);2U0*Bb!1N?2BM({VV&|~pTAXVx2$;@jt)1*u6l)C z&c|rr%#>x&q;^8NN}da$@h;YG%7`oNN`}+^5VB|jbc=mmal^u*mc~1adgqHm_QX@M zNoe@>%$COeGh5_2jb}}%E>5?-o#wNoz<<&!k|)-sY3ous>rJbDnlhfDjJDAd*PAte zp3{D%o%1%=rKFef{W$LhSMTxdc6d;?B_-NnO{jR9Jt^6%GVmxqu1VxcXu6p^zrg1G z9`sNq%#rXmVnk;>4P4Ivm+X5;+!CoPp1K-dzA;Bbh7-84Nm#KRzSclKZEZq&A#D{K z_C?HNHfT=t__k%=*|emZIizd&&1#qRW{DGbn%tX)5VJCJhAAaKLS6epuR%R4mkI%-|BLr zdCrNf$y)c{nBzjeXoaS{?Aza($XQe`f%imw->mUj2f_UzaGuLPT^V}&{IyzLW&%1% z`d-eOx|29iKLq!WF~<<+z4)uhD6(%H%R4F47_;KXoTAf;=#E-53tL(**IM5Fb!^L4 zYg%-PHNK)6UzmF>X>+n!ySDy%Zp(p}=duRUDmqxN$$s;>YiiOC{drdKAar>cx-92x zEI0f9PPbNsmGyOD;QS`MgSM~BD#&ST;;v= zhsZY)M@*4>;11yHxS#q2evwB6Zh`l1Xt?$ALfwD;Api8BzdCu1FD;jUpR#U9Gx24> z7nSb3_2s%lm&^5r99xQ5S)}Tj!jrf~{X>S?NI$Y=#-v+Kffv1+g_vmnW|K2ksTsuCNSU{;d zT)zXZ)yM(iaBcs{`2H*4TFJLL(2;3>B64m9bZ5Yx*z|Mqyw*!w5_>)Y+LH6A`s?pa zny*wG$Nu;+x+2m$q`#3qBJF^GW;s1>w~IK}iV_q%mzk;gYuefCZpA-BVTgMagJNDGtH+N#If^F3;%hlN0 zpX9{UX&HyMYW%P9kLV!ECvM#8=H9KxLA2FsTnnjR#=8?8pIis-_sW=c0jE|zDn1T_J0?yGs@7{ZWi5++NntV154A< z>BNt!#*YCRweot|*Hm`RCoKZ^JD{U7)|%!T%>$0jdx77)f3-(V5WgJ*KG{oW4*;9T zyBBvQpP)_eQIC8#W&W|?{P9Iy$=fO4T|e9HiqxW!XXB(ykuBs3f9w4wvQgHUJU1}{ z>J;0dt>O8IHz{ke;C8Okm)I=rDvVH$xLr56$6Y1dyc5v%B%9%hpS(H&|Yuzd_EnOM0bq>|i>3XPUt9L+I($2sB zTUYXhbY*A2jmewE22A++X{$ABouXEV{Xeu(yv>r-*@nO0n_>qHOi#cs1N3_beCi}T z8GERl@g%V~%!7YmpCU0bb^pi=>_eoC+u#Yu;A0XaUhra^-;mn0cQt4AEm=KP_87|G zyAl^(@?#6txeu9fHvh>#Tgemt-_QB4#Hv*6g9i=#M|@D$;d@;LUu99h%V+WA2*08a z7kDUpD4m4#p<}r5&lCL98um}=MgFPh+dAT!$@rDH6ZKplLrz!-o{mw5=vbT=`F~v| z@!DyF7hQJ8f#E-&?X3L7HMVtY(q+m>3;!Aa9+Z;Xq{Ds;> zo;U-(go-wBsZfT-8apm5rMYiZ#kLox!W~7{xTzRy^s%D*po_dqS zpM1N?yL4)dcidF$o8WEHo%O)=6K}=TZOoOUp&_x^4gW55CAu?bh<821+&QSe2Vv~lAN8MQL+IcUSc zcFNv)EdP824-#1bzvbGmD3{h=3VmE!IALnsFi*}4@RT_3Ra3DY%lR2)jwqZs)xq=5 zSjGPaIN7Ggc8cBbzcbEyz{z{uJNQ@r8<$!QR6loM_-g>%&PKeHez5W^mH{ z4{*}^-Neaj(C0s@r=GDV^@wg+xo_MnW*vJ&{fw^vD(UM?`qgva(pSy^KV=q6oDUhB z7vf(=Okv{;y&c4P7WqB;PAmxZ%+fCHrov5WB zre17ZD+=Ky_z{e}NmYxZ)Tk_Z=TkSN$@!gO}RM7_DXHJ>Z%Gxpt zTpyw=dDhgZXx?R?v82_ajf|r;RrA}G*%2^`U-^bZ~OD0Wi(DnQY zhMwP&*m*jn=QrT%TMG+K>;$fGdBTY8W@!=|#9&p|78u?xcxBL`a3kdX%J4YWd|&Du>yd$q3^ZJkLw z$4XmyFTN~de=t;gE&qk~YU7D5&-^ZMN&7Wm4u7^j#5v%|$MW7G_LIyLHpZQdP1_hx zFe?MTdoGf5=9E(%)(u;2E^tG>Ov%G{n|$Y6z*@7_#<`w0=6Ufou*sMW)yX(%75*$` zV{@sW{dthN&J~H>vl>-fLV1OZVJR0GZh`QkXv&_04M_zt8N}|e7r&g@EA7Zqq7Dlz zQ4dBon)M9AH)UwpUDMtc9o9(v>A6QvYU#x}?=FV(XYc*zX$+Y`r;l9lF0>->$yu9% zcY)n(i^ysMm*n%wJ-9><+8W>=8@S0*u&qR=?dH3@_xAMcHrr~J5l+h@lSxb@UAGSn zyP-)1etw+(jqVCS)UPGon&KP>{QJL?R zQ!)l@oSpWVRoN}Rvf+6aKiNOeU7U3-aWca5EZN*Y53>1g;WOcR=58F22OK~ztZQwo zm-@z@6FixF?(+XOsh|DeHtV)K&6olvZid=#|BU%m#+U4^if@9*ud>gUM|}>f(t^yn zs|Q<+g<6d5bT$BgsHVxTeMCz9X0#N4+`)cKjn(Xww@#h4gsZ{0&*4)uOW z8hmIl4Gx*_?!o!SKLwu{fcs59{NKg>JH)0K688_>DS8eA_tkd}#y#IJg!`TM{4e3Y zykyY$=gi4|XI0|I%zgmpk22odz_rk~=r3i>*)r-(FO77trv%UC%r4e$j1g1cOL_YK zkYpDEJ{iG}T6H>*_ zuH+%dV%}i*n#p@1*;ZmbeM+pS)9^WoS8@hE7lhB9g|21+zn61(Tj5b<7W5<@!yj9Z zyNKTYZeSPRD0zR5K9%>S_}7ZBmJ#Do;y{XDQX+my@lAh2KUe#`t}Vhp6>xH`l#kBE z#Z}4|{hjFPM1Fq~Jh9J@jwPk(UnyJkvKNvaho(_O=OAa@OZ*klnMhlF@Z#{ch#X(Z z{32~J>KJT~B<*_*7$omrWDMEUGUzT|Z=b_wvZ|0A5dOK5KK6kmEw+6tY>`XrqHIn|-%PAU5X+H;}r|I_%LHw1pa^1p!J85h8> z`+oqxoBwJ2_VGk>&GXuSgN9F2|3Df(L#&DaIT|*7qT`$Hy#Sv79bWMNnvSPk1kd68 zmHmre{_2`JH|YMT=kMAbl?#`3OD!O^;TvBA>smgsr`@7L$*XRwtO z&((eLN`F)mY$IPb>j0m~93kE;GL-1uHq&QcmS;x;dpO@79{e(V+gKNOGglCcV6eP6 z%8(ajE(A_p#!3}=k@w%GK6!7*i-vuVVN+qsipfov)?JKW8}p>diZbsRvSM=6+u+QY z1Bd3<19d*1A@hnJM0C0)pVrKIKLo$Yr~BsK{yIWw&vpH1T;}?uCSM4C4|3tB^pWsI z4L%;u7Y$hZmv^Ch`sBg>`Gtqp^|rhJx1sr`snalI^SiXd4@mYp(=8#X8{uQHG5^Gub4^H2NcnR@1#dghtdFG}9r%^c%G zMqbE#z#f({S3tK0PE3ESq#AcfS!gWFny5)~8)LVx?+ux(?^*PSBX!tCHtTyI+pQ*;`Z3`p?IdkPUa!vA)RCQjU)}r#DV&da zXrIW4x-N>?>1u3V&;wkL(S~*4Q}h$o6i;wHSCJh|nXpuG9J`Brk|%?!>>n$@)~nOv zy_wh4e}+F-qSFn3J`P-F8!CZ60^PL0T}eHE9q`SXZG00L0%6}2;IK^P3>*HJe+7R= zJ%&%t`{eCeuN*mlze+4|&Sb)7R{qgw-+Sm>6cyip^eh4w`E^RK9otG^BKybABlajlB1kAaU$1&H22@# zGdR8Czo5UaoV85spvCstrGOX4m%x^^i*|(W2f;Ztq-Vd**xOhau4Cuj#dPei{}*61 z>4UQ$ce%#QYAl2%Yjhg}Taz1I`$2T&wh5kK4ffDclRUwbe4EX_jJzAi_jTB}DeSpr zO+ru39*Hed**$@|$Hjd)d0pg{dmsAqDDul5MLl-VHu9T&tN%wn{Yt*9P(J)Q7P!Ll z8Sk~uQr_o=>Z@U$Ap87<{Ac68Tq&RLj(-0cWp_ZsQbu$v``P%`2rL_jQ{yVn>K^Bs z)o9xp*%-xt#NgcJ1)d_Vh0<2WhLl^0%x}W1@y@|Ju|2S5_qD~$o5y=C{QbnfJg%_& zT<)dav*Ftk@7XN3jJh0Q|2x9|aWNKdCQTz1kgg>4theB&Je;){J_`5S7>gFabGYy! zu@%I=4g6?vc{yH-Hf0qtJH#&b3~`OT*t7-27B*kbZ82hrKp12!CDV2%De{%BWY3T(hlqYy&r=rqj!j>yz{oyL6noc2jnn+K z?CacAUOu(L7E@cQI*!S>mH)IVL!W5UgS5lE@6EHUf1cj=EBe1b`!{v7l{Sp}bsy{s zbBNZa`n9U|X6^4>*=P2NzLYj;spy8WHxv6siOZxZRwG|bVYilO_(=#4mHJGWWPi*H zJu7jZpvb^{JBrWZqxs(+sh{zzePHC7#b6Hs-!A-FWt#17`^fVB?%I;e44d6T&fpnIz1mt!e88&BiCXJ< zOy1QleYm*x&?_s)uU^vp@Y=-mjcb$AH{LKeYa=$lK2(2_`!({`ZyHEFbB`$U|Y(4EuRv-Pq6yJAf0{Aqc>DgC3BMd^E$GC!EOcZSiD zC+z+a`oyGd_(N}9N~kU;G{Swh<920YJ>?Hoo_2#F!^mE<4|zdhKhn%s8CL#YXhnMw z*q}dw)67#vo`L%e@p zSD4t0Pmfl1b<+;fcZ!Zr)?hOCj#Bb+v^MyI^p)Dte3tix>lJ?*`^a}<7hO1C-)r`< zr<`3_(3dX&kG0Wv@=xG6dARzBsTWA*9HX0+77zX<#6t>d*mQATgf4r(Mf_-aXRDIf zTr&2#KCd=vm6gSxvv&}0`%BuHKPrvg#JbZW;30B;L?ZnAM)vH8(<1Tm12+=0D=uQb z&ytG0OnilP;$vy2t*Ke1)K@mzlOwV2o)vq3%0Dq$^*7L0q9b(7R3=8Gc-92waLz=O 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

F;&4y@E8U>y$d! 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

|9{${ov4x^XKJ=)I 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

  • wmv(SF64PWUqrTwTzKt*!eI?= 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�* zE1K5_lLD=cptm*96l`w64ULtp6?F|HToI@OA0UUgt+gQ3qKUZVD_U9_tLiF1F;LxD z)wVI%&|1;T6l?10gDru?*4kho!PrWe;gYEiR@8%DT?6O^Lp%pI*R|F*wzUSDgDtJi zbycL26sT*cs&A_%A9lIEZeyLM!P}jHT0jo`x3wT2cG9rahO9Fi*kaDz=Mjag=aR`Hg4>l zn>zAT)7IR8WFZ{HscwYmT&kxAt6F)6{MR(r*Eeov2CEtys_U5RmK@xQzcO5|sBGL6 zba@g@XlQH&%TDyJFdQpV#(JrxwxYg1P#ILwA?>;b5aUV97V_Cv+0qI{sH>5Li)A zT2{PpRY^fmK5!m{G!%b1yk%a@gv;xGw$EiDV(yry_%QBt6ww0I@OvZ!?V zQf8Ba#XU#?WN_!QBB4W}J3)oY22m)uRmi&W6DTYyC;>GT)H2PeMYqyjUbvjVwcfsx+FIhE_H>f$Fv(HNL8`8CATlA=rZ3PCj|az##)kr#?_!xt<5JW(8KY1R<`K z#fV#v8d=p?jhd)!MN@O*#-`Q)nz8C&O+{OME2zl*3zwHHFD+kOT5v)jKah~n`*bPP z>cF!LN>&y1bNYm$l9J_X`ndotE-LGFesO70(X#S|s2J{iAb)NEDO=hhAvQG!TU)m# zHddaB_NZb@d3CU(t8tUrVCNxBzrDT$Yg4`GgHdNzY{6Scy!B#Xe zXo8v{Uy!Q^v{qC?{Iw{qia>dJYa^RGl*GnhYX!F2#%h+A$SlNQRb#NZD##lXTPy3y zna1E<$npAMEB74fPz+=WNe2>L9QH)qNe(ATG9gy`B-k9RYHMx@ibz7@pgdZ)Ho4O? zD31hTKEVlvTrtaqZ5x|h%c(hQVLMvU8VI&jRWt?Bf}hqFY^Z|HpdSo0QK^G2&v9|e zvD}wj)7ZSRqBSvL>S<`gP&O{x!TOfq0bICzC%87(@fygBC?Mt>Eid#mBtsGlvn*Lh zqEwyJp&!VG`v(RB8sN78zb*dT;E~)TWu?4@MTOMPa7ZUO-MgQ z(`UX=&zlinrBu_5MhF?N4sMY|7NWaYk2Km^*hn$oZB0j4H*Rh~{x@z!-NGo!DiAuI z^16nWCJdg+8*6G>f~^s0m9$kHQ(PwP9!9SQFfwpQf~oQO+2N z(rHn_*pzQ>u4@fOoU3b0uBmTpsZC@A)i|7UclOe?$dnzCLnkfipzf0{2u2>O0{3Z@ z$*_x6-@rB_DS)Q~?q>A(!FotNG2uuw8a&I!Ifcd5z!o8#E!Wn#I=5_9NeOBdT91<& zT;;OnBODoNpggP{#*svp6qvAMvwvQt@h(RW5;@UG3SbTt3^fxn7-0XNoXpF~$#TZ^ z;7BD04WFEm&OSMrx7#`C=Uuv>kFiOpNHtZ_b*IZv$ePAP{v*R09Vs?Y&+}asPi|>! zL+_e{&Zeq1F=2jU^2`}dA`)A!A}$$qx3Nc|l-y7(*ihb7(OTji(?ent(K6dEjb4(2 ze5X6&5oIKqE~F}NfhH5FB@jm=vV znaA?hTJ#CEjrFcGG-2uhK2aLVB&1Yxcg4uT6XvRD#xb5j-_J3SREba?U5Am3!6WmRID3W+iY(JEdo~tg zFUUaz`+XU?v7N80spE;Qfx7h#jm_vL&`V(Qi*{#g0A-13cO7Q6jxVfM)GK8-A+M~c zuV7qsaUm96mfX0KR3k=}SlZC;M0YTda{1EXVE9H6uT&+CI~U1DmO`jmj5~nrtb>uI zRC^K4%Re|(CWn#_m8Xuf6`WXmsgBba^yKWCdua~`i&9tI>4xAIHXXg9aJUl@1(g=d z8GR$oA|Y387J{u-tWM}G1an0QngWqt7bPj9pgPV`BD-Le|Kj>a6q*!1l}RgKwe;T2 zZ4GWUDnzTrMhHph;#=Kd-*xkm5#8wD;z120C!s3o4$CVs96>*X(YI3qTXG7PuNQ_` zE#$^}=s`U)A5s$O2>OgkjtVU7Jt7O;&xCP%?`q+Q&Pe99P())1kxxGZXYmICp%rVc z0}D=`ZB1@~%S9%vD+zyfh@YAZd7&qf8KKN2cWZh5WTfdharfb%j3U(PvYA91tQ8Fx+SllK{!Qs0tk?KIEq+bsKa_hPF8{}(4aktdY3u($ zr-VwVYJaWFl`rnw-G*C}g;*44m(NwVEm$d($3c8v<{HcObr|4>Q?phHxe(>HO3r~2 z>6E)EVqzt(Zb)Ja7j8U4lhs}oCs10nqJ(RNLQiIxZZ#X{@P}@o|JK-QsNE5sNm=TW zpsNg^BJtda1hvXF;_j4islyFxgi#;LFz~c4cyk4&5o~cQ@#LJa|CD5F}!p63GTO*c&a-z+_!bo!Og$Z|l zhUP;%5yxMs?+^*ET)wJwVG$lYEX4C389y9Qm>3K<%QTaZM6n3IrPa+mTly)@NP27C zWK`si=QB1I)RMOn3n_vdpK8H}RxrL|;e#|oagAc!0c*aTsOxkyfCVh>wnVIhpv7_v z^T`;02b)_Hg(X`FLUB=!PIGh?7m=}W-_R=&u1*M|mIO`?u}qF#k3eoCVgzROE@w_;`ouV@cMN;fAWDVY zl{Yq*bG2Dkkl2qNK!Pj=BDzVAeiHazpsb+VD1oa4mRAfhDI1o$E6#(|89uv1rI{K? zt46(u!`d3*w8b+WCYi4RQk1G+juYKN zt0sAR1I5{A71phko*~VJ5wW}7Sdo){x31jpXbl88luABwsxH8}c`w$8dExQ52}moa3fzta@p!SbuL^Dwueg7;bi(Q8<{agznP z=GH+D#lBm5NMv^$Zf`kR$d?gic$}V!S7IRZa4hSPdiTZ&T0YQL5)E}rpZ$f75DFA^p)JQqBFrnEvU6?UjTA6+z%z9>nG%`n32;s2Oq3?t-J7J!oY-8k8562R zxo>E7)@3hao%s66JACxskSY0s*Ou1yWMd55ms zp&D%K`>fMOW%kMB!x{-yrMA{4tQm1p9M|HkMa4YSB+y`OBi0Wks_fu#YF*&W{D4g9 z`3TiDfPBya9`!jr7U!HC(eN>C>lL_*EE+|(B=3sL&frmHL!+`VH$e-opV^BvR8)iH z~~vu4?mc5!2VxS57>!oL4TfF)j;FnNL3hlVxVR*MymG zwct!>-kTrjGk0YKH=ho1(tn+hHTa11$@>3pg$O;V#uH`M3N9oke%%To+;Q+|52{)G zINMJdM~)!-)$h=waB$+PT4+4+bxWL&Sr6X6_FmNtl>`R_IKZFG&$)822U8g4Zf;H9ar#CxQT8+*MD zfTkN6__x)lO@__oV;)s@5akg{%$Io+j|kaU)hFq^Pr0NUuA3U zzg`|v+4{bC@*irN)SQD%X8SGBuU}cT(R9yc-54;knuaQL@3h(aq_gdHb*A4DI9`6N z3c5!2kZns~YBk0Z{c>w#T*#2sQ>q!~e<=rj(sKw=up|y>EO4gR69ad@8=3Ta?!(qi zlW!^4iD$X15a0&GqN5@zA4a47<;Jy;LL+j5=kD)I^DAbWk@A!!+1?XKIj1AS$iyOM zlV77X2Wz(U`fs<4E~70GU92s=fvCIIYZl;Ul@t*E(5Wuw>bO2U4J|(_0k^V`wJdbI zEqq-UWwkM+8ykXKTabWTnBmA4Yk1{o2lW+0W8uIB4c?a&*kH43nW2(=BCjZ8B#0*q z8%VHDURrclb+{}=%UO=4vvz}<{8M+3DfeapxDCHchL`F%`>1QhBO0QVY9iR zqJBmK)-3TlAedrCbsY~+eE5`xFKpsI&KlU`ay)>E2wwff!x6p?S-F0OyK4gn>j}I= zp8YW52747}Dqh8zig$5bS3yd>8!@bDB==hF-_Uos&F)*@%-rP0V74Uj?+(6egZ0vj zlA^q+B~z2$3}B%pPa3MZU@c-520GmwoP|f|KtXnZx2hgYr<;z}wN=U>C zVO;~Jp$E`qlgBGqTE;dri56QQs?WTD|;oV51G3C1G_mU5V) zl&~AN9E@yzKVcbChOz4(!QutaP7NfeFd!IQ)i6JFSBsaStd z)i|vml5KVUv?BPR3ZEDBZvNOG9%7=+X1E+Lf}VhLdbS~ameX%NTN6Gj3#od(X==++d;v9l*%iHB4IXfn zt3rCQEqqU#C0-pq$2LM^Zl2mQGjVElWGZent(RNFH#t4i)Aixgq8NI-Lr`7l%#l6yRUs2g`g(>BrT<~sq1=L)>LC-{JtpLX#U06Ae`ae$OKL@iu!bV*6!0wIZSKC4=r>u2%fBn-)1s~)*19V(yH1Iq`u;Lk~P zR%BxvIhx@ICVWlEJ>XVx>8i1%g?F5tEaljZgfhN@2f+`Yn`el;i<54HVaugHl zYyV1t#7)vn0z~2>>NpeRDda$&=_Hg@RZjeaW@WRBu?_G)s}=Zlo-MPjL>^XV3-nj%TKJup+Rn6B4|$B+As4EzMaY8 z{yy)`9C}sK1T=kW%XAr%<2C8^4RznZ2UsUHl;O*+!1UVb+J&KQ4(U9~CsL7HT9Yvw zcKk%-TH8?>VrwnntFUZhQE50bjd&{-CE+F;PN;p~@pj8X)E#+Ml9K`#FZ_CT?*&QM zDfa#LFLrmg(ud4MkpC=s11cv)Fd>9T?ne6PD;)#AlPrO9|nEKpQh zy1XuJpF8J z($BfD0_GmlI}TlgtC4#3kivQ#GZwxT>wAS) z4=idty26uhJh;_)3A+~vAQ4LmktHt;El7Z4j9S<-yAHZ&OH(6135<|1RyB&3hvdlz zu&f@aS{y)P*L_GPC*A6Ro^|_jI`U&7T(uT4z!64m=)));$a6)~cO!vt+(bS}3N*IJ zD9RnEQZTYhtDdhRkRLr_j(AZPLG=6N{J@;Zv$#Vp>q$!4*h_RPJo@=6n$9p~_v}RO z>m5ngr-WGe;R=cJ^PY(FuGb5lwm}VE^elJv0X+PTSq( zM3gT-HmGaZ)VRTYhZ(LUC^O5I>v-h`{6{+cZh-1&FV6}>ZP@NdW;(J>aJAn(bh5K} zS-00?W)OER6euLR%xh9mLKcd$?3y7aZW(7ehnWi3`-t3%6b_YLd|SyD0HYdwk=i%! zdV54Ak7#>PvDx8FnYSGD`%Eib@EALV8lo`8eq|yZ z${{qsi9|nq?kf@ZoEYnye5VIxp<}QuLKEjrbzB`pg#QCt(VtWt8}jvG98*y~pb$7> zGo=iM1yJNZ<5tn&6@40a;H%aA&Kd8U!psOhZ^kz|eA$#@RVnq&|HhW}weE!`qyq(z zHWlxUaFl~D!@i~t^y!{^RR&6yqU|r+E_KPab;k!&HtX~FLimA|PhRPS5gB=(v#|S;v{R<&INXAQB@nnsvx?Xji4=q zOGmK0uB8HYDbV(Dsu*zz3H7}uUw2tuL4VGV(cM^p-IyfJghMIR)bJTq;;A~Nr@P(*7B2;avtynN*M7-Y}vZe>7q*8%o{KYq@uOnCM}`fnNnD|7Wbaa zKH3q`3Top|jxik(^c_eCjJTQ_<|tI8eK|^yEAn>M0T)%Gay5~B@Kx-@gtn^Y*2;>O zAc|~lf<>YT`Y4c=mK$^7QZEJ4Yy3tq+^j6@PnE>rOG{f5EfR$^$(=3VSh2M-SgzO5 z;6S%}Cq&U;?1HS}MWn<8jHj0(JN=*KGofm{qQNTY#+fiQb3h8bl^sMl8P{EMoTTjn2|duc=a~a3RlL%5hLJmKGHh!ZuM+Sdx9~1!Sfb zjn%cGu@0>qC$p|82}}>2oX&{c&|;QAZ_yOXnwVB&vUUN^eLLP;lU60W+0C_$~jx$$gqI6JD?f{*+Y(`9lJ<{{LOa6k+0 zo9dy)iSC`sx(2*|NV`E;stmfvu=2v9eB2fBWEZh*@j;%6;#(YDL!5rfbZVj_#hvNN zGm$lIdoe$Z;1#W(rqA^hO;tW6bGZt=&8RJpfr`HX{Lcy#a39;dMo^ws>nF9n#RIv7 z?+6=x38n4Wmc&uOi})TXCXm*t_4^co38?DGYl)7BUXR=DrQ5i;uP1Xy66u$r$BIn8 z4uw@$g>DWB+2@LAyEyB1ulu4w3cnD^GJ=UDbXP&wn|-~stur814(xSaXi5`dOvEyc zrU2R;*1*tSueh$NV(CpAI@~1s5=b}&EBI3)KadX*FlC0G(AbCS!~vIEU@IW8cYQET zu|X&9W`?8#>u0I7v-`GKkMr_T89 zIrP;Xt9a-j{6TbDsEYsRBJItSC87*LApbe#Wf*+5!WJk$m0k~Hq!_Cs*AXf7qMfh; z-}GUC(1L=)lixs1Fj!rQ#lOj{Xj+)6b6{!6K>Bp}nqe;D%}Yzq$jr*l$<52hQ8%`O z8;%yTVm>-BIpN4DQ>RT&oH6sLq*=*Fr=-rFBiH{w{!jb4G_XrUx;|_)v`)Ljv_Tw) zZ4fqROx`oD0K50Xs{VX1kQTT1_W)hy&hmm1w&lp=3T(Gx+l8$M z8#CRAZRZ%=fz2}s=dpPLIFHTqCGNw<(1dtBj0?ldJv6?21Q44ChMSLux#zvG2H%5i z{td7Jk1g`vD5OtI$iuOXz?O(@2DVykb=Y=d`w6yNvF+k9c=()rxIjb4ew35^VD1=f z(+D&7qOli^a*IZpF`gIuQP}rkFBY3u?~KRULGB9U$en_WDd$L)chJzYq%|1S;;`=r zeYxWG40L;Oh()fLZd@q7*X_sSEUyZOQr^v2@j609cRY;55p%*j2jCYAjBzyL zJn=YYet6#?Tp@jtf=I{y^B!_1GV;5W8PAWi{LlQ550;4!$BgfFyvRL69aWJiIVVSw z60aLw-Y2eCIgaD7N9|&+jsOmE9K_+?RL8HBw8UUq z%vlV|f0E}&q%agxC8xtdVjW|;$obi~?5$-x`8Sfa4b8(-lWk~5Jg@9}#M$63h-xgmYVByZGlN|-4yZI(Rsneh^wl;RyV-oczn56N;O zJyK!L`IAyO3~?lV=1*iO`CvOl8swF6WM8y{bYzcL$+Pt7($cWjQ9IZVQGQa^LrBdWjU!2csqn{|#C%bMNrn5= z4Y|tHDCxnDD$lVlGIbdT$Q`_w8bv;&H28lAXbweeDJ98Slp7_Hj+8#R7>0Y8Gao2$ zEWsn;j``*>^ULuIbH%X$xnxb^U8FP=$hr`XIOL0IvLq;5FZ7;wGEZ{WMvWpl%6QfTRm|RF*qXhiu^@!A-W3iD2xnN!4$Xr^XXr#aqOgw(nA4-Zc7=Yseo+&tz+Rl8+ z_>lEdxMxk08XG`LlrXs*i~A`_o;dq&kH`Jgh%4s5FByLe}v<9xN0*w;$2c3nS1g;t>SsfgY8R=7rrRV@!*^@rzoUH z8Z7TYNdGX%hGQhA&N310WNSA8l$iqSmXtkn!EF^d4{FKkvXsXF_I!T^FW`} z5`of-@Y*mJm$GNAiSo>Fx#xIPN{nLw>c9ZRLr<=zo*d9P98`uvPevjIN{O6PHz;$~ifC}a z)`TU`@+L2m6VV9fgnaP7^mDwMQef-BT(S;O52!PJa(vfSVJRBOvGKxVTAQBvdt0JG# zPU_4z>+TT8rEqOhG>J%mDY|SLG!(T~#z5>{*q5=TA+O|)+p;v{kS@oV9B;{ZLo~^c^X#qI%94M!%hOyvm+>;=4n>?np4qr}GANAq90LiD z#jJETt}!lCU|E`0Q5Ni3*k*FJKN`p$f_)NWO6gPADKpNZqdbN9&+;%i%IM$pZ8SLW z>3og(WWK2nOjX(-YKycY)HYHT4U$?!t&#k4rGR>GawIL5B4e;Gr4}(K{Li+GG^ve} zH*(I|FKLs?I9HAXT@04daL;wnJ>JPt`Y_~(Ya5cb)LG#|YA65OCUM9u^@$vbRxt*- zp)?13PQqE~@!7Yq?1y`1;yPP=a>!Zw1juOu_720yg{u#&HIyUk085Hm$@Y^v!PbX* zl!xoG#$oM<$c=L3UOcFiBl005L+*#$AEv^b@W*`_LsLsdvb-joFosB1a!6TA9g<_= zBOcV)icvRY?nq9hPN%r`Lg-L$c~(ZmTvs7&X?xkmQ`aInqm)>t9Cu8I?8YJnS3r0V zd(hFIsgRwF(@2;7kBnD^e~!jD8e$#h*o*TNuV;=Y6FnK~f|t^wX0a@6&dgCR^|#RR z%KT6QQZs}yca#=0B9n$dl_O3MoUAjTZlASb9gt~^CQ6L1Y8;7S&Vir+H(=& zFtsSOMkCP{4aeE3_&*Y{nASJ3NB*e`qud_zB6Wy)h(hUcO@(8UqdXU%z#I++b1Za& zJj6jG2D$oPi0hUYkqY}`ww07N)3sbnKIE9x*iJF$xeC|pv&Lwd%Kg%da$oLbTSy7SBc7BZQ(`@2 zJ_mx5#1*ZQ|8l3)and0-R^sHu`XTPKHDj8T0_SlumJ(hl713xOGnPn{`@A=jrd<(f z2&dsV?b@?!~cBIQ3$O=Ctz>;GF%|O6IJ|@Mp!Q0=J>SX(&aVAkycr>O4<&lDmmbP zQj(GoIq)7yk(`TsdCan-23Y?|`n+4#8rb>?2OLui1xkgZS4&OgLH!{;FGexs%2u?c zH{<+>wUae+2=;{&wjONhIZkCcvj1Q{1E_uDF|xAy&m2&bnS!ituw52ujl`YQQjsik zERyAQ(O~vllpQrfe#{edB{JvTEL)j5NG)UjnLo)1TSAdEsdMF!caO!nxwuy}kg=J% zw217HL>lCoDO1KGA=3eyOE7JzEz(}enm0LM`W$I;HCwckB_~g}avXBo*?=wwLV)*WUP4XAWd?p_{u>8q5c|rUtRBWDX`ZfoX81 z!+JB8TejnK4EDGR&N&53eh|th9&slFS(>EEpN#J1>9WjMSevO4127-p{mc(nM_2;X zFUp3k9p@nIDS6Bkia|FDb8gCe5U#S^$U!p33sXHOI7+hG%Mv0rmOp>IPfCO>0IzXW zz%pTvXOg0pusxI2&C#9=&ng@-2fW`4&ExZK?uYXx+_L>3mrRARsRdjMqFmYXFt_88 z7E3h&N24*aVGZSZmI~99wsaDXl5ostB9d>;AV(nWQk;!K@5DTjW1b)C;xd1tmC^%R zeI-94E4HGHLz%IpS;B|AGi-w-cYJoqd?ma5OAcj4fLh6?ge(=(;d+6sBZ+KDL&krc zvrBt020WKz)*A~hDQ~v8>~C4)sfTPkx!yb#_wu|SGuUTv2e~1y!kLvG(IhPSmDxFBCrt0@iPi+VvlrXFy`K)4Z^NN%{#6%&y+R}Q(BBxS)-5Bmn{{&>_f z>Hu@c^?uPJUSa7_>o{f}i#_tem96295=)pm!CbNrW8Gp4%97wO&gGlywyXzig*dNC z!%;NONt-zZXE?LryEx-PNwk`rPXR}KpXM;!$yFY%d*(s|qS4Ntg?p&|Bao)Zlj(8Z zI2*?tCyoS7=9rZD=Ez{Q_#ENS^3kPp^f>INlE>9VgNO}^P9wM|y42jMuza~{q` zBYi15%7LkKjq`lac}B00mvH$=$&fRq!i^X|a^#aMmL*#szmwuH zw3XEPSkKKs=A9gi=1_Nd#ErFB_9P9`V|fWD5|7dn`9$W$Ruov%g-^wqk6{v8}*14si>BE3p+~TZC;fwk6n(!FDXR z5^P??E5mjo_K(N55Zh{O3$QK2wiMg(xE_aX6}Hvb0yuXf@C0lFu*G7F!RE&{7~4Q> z(byOUDaw(@GXcjF`<%0DUxf*{??`M@uua7_4cl~V_P+5<>>q_K3EM1e-@U&r|G#qn zDybfL{oj@IffW9G=D!m7zeNJ`3q0;y3u20H0idT~@&TW%guj59J8yo$f`x@eixw{_ zKIYhxrOTGDIIeVM*{aoRjz8hVwI`i?N_j;kKj&XxTX*V)`i%{ZO{d|b&9+UOw`~2! z>FsCy-;()5^6{0Q=XiR&Q9gfk%z)UqfrADQ89HqEi1?ACMvoag?y!S@`V*F6&mo2Q zm8t))N7%RB<9Qw18`$2&_7=9cvF*k73bt3V-HGkD*zUsSJ509e=b+!iek`_R>~l-O zHX3n8VH17pxK|P1>vZ(pc+IXyqMh%H^CIG7-wg*a{s2GN@QDt_74lsZkNKUGSC0Yi zI^%+dyVvcy^kq+vzxK7n4Gqg8wkNRfHqhx=dDP)OE2o~>bKJK)JsG7x?^(X4yyxKu z?(cc?gPxwH9(+=EZBNhicY1m<_Tk_cGkUJtbZ*a$n|pe0dc3D+)VLWv>4%T#$(X#L z=Y*B=MK8cI+A^0^g zatH3=m}x$?xp(ZF6L-l+bH07MH!UwPFzv|kBh%LXY+~9^|2!@2*jrQ6R^;ZVHGQi% z?Z}<0)9&0+owjOYOWO7ypPkk@=z_FM{gi zEEorD!ufg8`9@g+?GD|&E4rQB|n<}M8Wgv1;?l6lQ*t1>@(v?}xbA2es)I_vDr zdv=_k*?R7d%r|1M%DgA(hRnsE@5osVQLe(<@>9XGy~xxeMZ%su11S(ly} zm-YF^_^g-@CuCKQnwGWt<&>-!PR`5PapjV%53gI5HRoGZSq&?ivz{4ncGiYd&(AvN z_#Ig@U%WCauJih=+J|;!BFqIKK5iUS{;`?bYXn< zaSu+&{?%(!v(Nf@O7=C=^0FUVw@{;`s^QGvMYPYpxxOu3m?fIwD`H~*+;&X{jb+Q$Ugi@Pfm1lTu#ck_?(|zHX zFQ?}GW^+nT`+K=L1E(#?d3gG&oHx8xIa}^OEhl$(N6uS^ouBjjs2w>ko^@r;AFjAQ z=Y^AZ<-GUI-8sLEeI#dl>~lFk-ur6KfFFO5bJEW|xlcvM<(~4d5xK+aCgg5AXKHTO z!j#c(znWTPrkP@_o~xR%RTF|j@-LG*q;0OpD)Q>TzX}0!Kv5hPM^6e z_tmTJ&W(TK;oPy0J)0Z2`qkX@<3Gr~;apGNPyZI1clrGz^3KVfkmoI(npZYFC9mS_ z+`LD2EzW!Wrn0;@+bi>)O*<{`$)=9H%O2gHm-CBD^7c%*GVh`6>+`<(>8*LM2k*{1 z=hBDse*5ib^X^#tYTninALM;`vM2xiU&ZFX{DTqsQ9~!>e`oU4{NKKGbpFO;a`WeJ zTAY7LeOdlDb1L%_-fhaCd2C1iSwGpHzx|v`@|S#eMgH+|*XMtD|E>A^lkd*=o$zq} z#--2ZpLE!(`A#oW(dxNh#o@7_9h!v4GFet*)#bLR|u zcJA0ezcM#}+xv5WAMcsh9E_cJ>4FjSj{4>Jc~9(_GVivwqvzfJQqH`fck#T#-(NZJ z%U@N@`*K|q+Rt$N$~J?6?JnDA32d3sX0x&O_y!Ps(LBOF!2L&*j=M2uyBQZTjM#Is z$CH4@WjiNfo3Yk(8z{buS?^qr=fk7W<{aVi1S&z|B}bHm5!km_=(zW6f4Vy+VgsKZ zkDZfP2aP{3BL2M3_Wk4@#`pfc`CjaU1KB4^aQ$3l+Ab}-YVtYbsgd_$n@8j|ra^x6 zoI4*8$M|);M8t`p-JAc2^c;OT{%@TBJvoFW{uO&xW`>c`d9J_nI32E6kvH_SA9;V| zKBL;PAx^OtG0cxRCuihZf9FHjBknmAe}}qew1^$^9{A)&$B!Y;o<8ap<&j68h%{xN zar?%PJhuHlbRuavnikKnpZJb}|Ni^01pfabfo5bBU91b6@xM~{o8kX9`I09`T>pIH zi~jr2EyEJfM>jt+;=-prdzN4H;srGuTLY2D)fKH3k;k+_A9?%+=tgdH(AEEt0|<2W zH5@=-Qs)r+JkRTq@!f=l@euZ4dmr25h_jtE7&vc1n9qL*DL5X-$xNR>5*(|?5qX`X8OEb6je*!`Ph&8)A=qeFV>q@E*hXR-jcqJ8Oqucg!kL%A8a~!>vCY5+ z(-LkioNM2C*cM>pdN$Xxxh`FSZ3DJV*v`TBU2H$X_6uzHV0#)HWzvOhEb>hm9fz$2 z+vV8q!}cz=05Z86+YW5cVw(ur)?<4B+Z1H(B5Y9@N}Y>sI0W%?Y^#yccw}@hwg-^e z-yyS4A+tTmYzZ=Y*DxS5Ish4ccNFA@jFuszFHP`xuAk)b{CYC-kBmN+=<&Rq%_^NYP-1io1J#m+DHei`_3 z-IqJ}@7*8Rzi$7|&-Z>F_j^Hbq?=L>3pj5{mzR! zcXf7*?ikfEwqs1kh>qbMBRk?d4)2)QaYV9^}bxi0Ozh~h5fqMqcAG9ZSe(avO z`Eh%O&L6sG*!*F82G1Y7XUO~^n3$J(PQl}iMNp|_c=WN!)9g9Z^9@f8s&j+qR8;U8 zcq}sukJ%>Ukw#rnvaJvsdx~Re!O>ycZ;{yJI)*H&GIICU+_NS-S2(Vd%1VJ z_fGGP-sAB^Wec9ljzdkz!n-FgcpmZW_q^%3+_T+tr{_k`y68ak-sqjt>-+)#UjI)2 zx&eU!dk5?sur4MLvo~gE%&w@5qu!5tDk>#vcvMr=il|+_i+%6=p7N#mhWna)D}39| z*>>Kx3$|UfZO69Dwq3F9>TTC-yJ6c++iux*`?gf2lq_uN$Sb#Dd{<>r@p5hx^pqKXJ^li zJ-eVud!R#4L5uc6pWcT?c|7fBv~O*1Yd@`hV|!hDu)U)Fq37wY6lcptS6_(ZD zIlcv?9SceW2ZH0FLx;x4$B!E~ZqlSliHV8W_u!fYTpm7r_^45%aCzdyiBqObaarQO z@#A~b3y~ChxEu%sX3m^RdX}s|6e%)Y#7jy_!kMp#7v?WS4?72v95ZGNqGn}fh3QE= zL=9zGvIQ;|ELhMt9`YW_IASCuBp@H;4+JD2Mu<{h;X&~b7b!-P>0f?EjwmGi5gzD; z;vJZ7Sa^qy7Zx5Xh6^zUmc^Kq9I4&k89&hU6nzI~;YfvZ3*Mk#?g5d?8 zxeUfL7d&#o6PNgr(b0ZCHm~33^+w0Uc#%i9k8FE7Qo0J)q#4zY4uikvHADz&FKL5LFO03O_PC zpLxV6BQ+{DY9xM=zsW9t{+^ZHBfFpOvb^=pkL5GOV}$%!7Uy)Q`zyN1(TWgH3;k*S zXz;VZx4^e5swk=qe62*k2(EnOX}-_zI7;=61Xn&^0`EA>r-_1_h0&+^)NiBUB0gS zI&bfcclsPSR2@e7M*cQOZ;DqAH@MdRKVIM2(3W z?OO=V9??a8PD75EN2fbcvr%J@j7mkFb+r|`6xnbE%_f`8Ap{&OGQoG52lXrl( z%va@Av@h%HfLY>A19#@Ct{Q|u*b6fA%mWACw>MANJwSm6JC zW_Rxn1oIaE|M&m-{oXmg%qwu3}0lzMfFX=Aw7x`QKVg4b%n7{MrcVVZHFZ@IJRyZ$wFRbBz;`7AW z;tyiNqZ?wEM-zkz!Z-Mx6Ay|z#GzuYkSqMg-{c?gzw)z$9O10+neeLcws1h$F5DM7 z2^kNgg?qYtx--K2!q@x|{;sZ`Ztla|x?lMH{379JVViE7?zHfha9wv@H&YlaT+?0C zEyV9TVYP6Fuf%)d_m!@XuA?qncS;wf3*|%ktGdg&D||)XqC2VUt;^Dl*PYO9)xD?d zp!-tysV-ADh(FG^&~4Ejuv985W#pQqb-B%?rMYu+ z=Sj7siMf-drqb}-gxoH6RYz|Q5|m$>m?j$V zOTaGxKjK|7e(Ua+#QS5#s^I@I;P;Kd_lxj+HUxRkcZ0a9xZ+Js{E_`wtPVTTHY?teRN;$B;S*x<@e7MBR;{W0==^pD2>;BYT)IHMe;&<_X=zi2)0Hv?tf9H3Cwh!_7{6F|_`Sbku&@Ify z%<(3A!2^B*e~$l#Kgj3e_ZzeXH~3k64u6*a3|fd^K$Dkw3!m_?%fk**%)|N*gCDk# z>Pp@Zk4jslH>C;^|L_%Ql{7=zE47z4ORq_H^7lxQ(ihSj(m?4-eux+%?v^%5S^RkZ z1T-1%@n7;alIfwt%H^TaV?s#r@bBa{*5ibipY*qZU*$zoH+gC_}-gqrwG#E&Sj z6{EitaAq2BlEIT}FkajZ-1tsz663{<1>(kuLUoLjOLJco`tmXxM;d`czo2_TR}H@| z_>nBo86%4#4=9p=A9!($&JJ0v3QzpFK2M_y$plj#=RVk*bN~KGaOB{BohLJy;OLWw zkond<$&(&P6Qo>es8lE@zZ~gR>ArYh?1W!5eqQ+9lU6*bCn&!HaLOnACH^t^k%Dj&7ZfIBq#zIq2fd z!bidYVTI6Ecvl!JG}krPEf?ks%XG_hcXG~h(R`p7lT$w@IHx+}!`?ZKL_UW&FwF(J zKnBjuOUOm!o@CcVE{Dqj$89#_dY@-4VQmj3*yJYW00` zn_vIrFUDKJRUu1|6mz z`)HB$Go#swkKU3P#Y)2;U6W2pgQY0Y>q2R@6e?YjDoQ7%-cpt{UOFLdmEM!S=C^|r zzt3ORS#(FhGfAGM%zsh%zzLY+dGNnP%ajAuL44hfx%ln{1B)GxZI5wmlcT*zwYG3Dp8qTFbLeGtZtg_Hyu{h#Elr!+<)QvqQBz$6xt9A-K3|oE7nX)T`+080$T>B zZyPluJ*VEm^iDq*GG-4C&6pGYQU;!7l-oN$<9M&HGmdZClTny`KI7K(`x%EG$h*aS z-`#5XXoR;TydB}~2p@y+F$f=n@G%G3pOm&>{n&#M+Im2O?_`YLH z)Eq~8;XDV*?%4I-0>{di7CQD-UF-`^%ZKfmp%l!^{)ejEeFAqC@`}&w;+J=*kpLd*b zpgtWxp1$bleDjK9!jtQcm;7!xj@A9$@n@UA9LxIOaiFdphrfB?h&=Jo(eTL=N6!zr zxSn-%ai8oF;{1C{acGCQogWzDehD+hwLEN&J3YiRZjqN)+?;jRxQ$(X;?PEMX^Z{i zs<#Y`yZ1*>+^_S?#&P!Yago1Qi2L;8N^xkvIE@Boru2yV?3Xst-==Pls@1+S?aN>w zH{GLWl_C$3a_(#;(na1b?r^`jZc`pQUQG8E>;-)w$E+vmo|EIVq zPKpb0?83?@Xf_XY-x+P&%fY2(JGgXyFBYX+a@@l>Zpr+XT>r24aknqFy~|7`d=+M`^uI$w4fDt z#+Jo3)WWYq_#lLjL-+*X1B4IW%MC;LC4a;R-Fe^lNe4oK%EAw2xaW#$)9edH6k^^RJhcR#gi> z4dELid=rFC23jI~>|Smy-;(QlHjW$C1^GX-kF%NLxnWIOa=HugT$#pMT(3E5`e_Is zhwx!)_%g7&?&ap7{?ZP`ap@7LvupdfA1v|Ql7cwy`j7FP+#)M2X*R-h=^WP=;kzPy zErg@|UyS9_Q&4~KdwCbqua5fvb04?SC!Vvv8^`^T9?zY1WTnN-Qp0yf`2GkVjIe!y zISBvyUe1QLOJ9rj^KQw7JwW~Wqx>^txyl>jx%b;xc> zUe2BaI$we~5KkPJ$@K_|=hDXQ+|%rAJ;i4p4&MfD=lD(Tlmcg{~N;BNB9#6zaI5>0`<2av}}muY`&S? zZIpk`rG4Cyw(;D6p(y`EgkOU6(~>lH)r3D@IN4YGhEMcaC`lc|1zLI zDU*8~9?$(WDvL8sXvKLKec6Na_7QwtuYce}bnKdJg4-jDS24eMiMeQ8?L}LpD2537 z5FI}0BUnX)P4K9x(}#!<#j$eo)#}v^JC1(0;X%23!)k4O8Xj(ZqrroYTN_NDHm$+h z?L8U{l|mXAg2e{czdss&Y3%3W!G=lU3kP%zA9$ilxTxd9r|tite#nev^(UsK)xYzo zUH!seg6rGtT>bR<2g9z-Um9kxrG@>N*e-13;NUQwl?&_B=3qTX&!zQvLt4ErBiq%h z+bOsnCvx>VH9i$>L|=eRW7JF{{_Uy*OvY}T~~{TFR)@Kev(4R`^s3P>{BOM}HGlNrY1N&jiJN|LZ* zq&FG_H>1<>yz3p!Hk|SfCM;%XPfckC!8jct01_YrdH`!m&iy%XqBx2_@=J!U$!PZ} zya-Snv zsA39XY45&b3l0|y!~hckipSk(*OUgOr^UhX2CGpgn7o5*Wqiz{GutQ?){XS760zAq|>GG^|^_QjO3?ku4h6YZ4V*%)HPlR!NoW?g@|& z;PscnD?kP?5#R|pV~KwZ#V%RoAiR#=EN$Nyg$P1gSZ%BFr%lF=#!3$M>K?li3R z1EMAOzCgk|wr)B1sL}p3Y}vxMV8A&6+WXf4z&0(;0lWw#0V9FQz;a*@a1GFD#0B@? z8S?55jqWvDz;kzK{X?^S+O4Gd#=q}wOL-j%FkohP~|9VJ*<*#jBjGvU*J6J#a z{=i|4RwmtCK0kSJ__Xtu6hZ}hEg0mRzUsB)H}Vso{INe}MyFSJ zzq5nnq@)&J4|6;X?`PYFMD(!^Xn#GX@5vFvQ_gfcl)zvgilU`ka)+4j(P4l{U#}BRN-M)X1uPP*Dw5Z!}^PHHU z#>m6Z^E+(E7Sy($yfuC5y5W^JZI)MF-}R3MC$`>LwqHNCVLs>&-vdQe|%<2`xB3PB&_f7W0y_MM{zrrUk%%SB4*{K zwx{QxX)$>3(G`#GpE^G9<^adzvqKujPfPvg$kx8+M%ESMey$)ic(uK0_5Sgm7b1sC zoma=`YFMr2o$uH@_E+1~zx#%%Lv6+r{l5Fh^@JZS`4{^v*nhTGQyk<6F+OZn6HYxDUK;A6ssCxBp$fV!>{CK=1B} z4-TfLqz!L8sLZeOYeUAAJ5g}C&hhEJ-Z*Fdq3wm#p_jhP&%d>EmSg9Zz>~Aq_Pw$E z)Ty^WIJ$K2?lVnaxO=J7oz(3|Q@ii@{DQnGx?SV-tf|g#F#y| z`d;dGDRtGYSwrfN+c_Y9=7xlWWheLBvEU&{eKiUFx$S0tIB>%&Ulg9+UH|ZrP46u}8&cuhi!ZO;oxHI6-K0MjEgv}A^ub`= zm$GqDbYsi!Q&aULe7kefq_(@}`@OOC>bG^)z1g(fW{-ulj?MGjdGhBiw|*KQeCfRT z#IfV=#9lpdCvU@r{zE38t8^$}=fsz*f0ujZ^|eD^Z?z@pmtKZx!v=a49*B_py<+CQ z3m2!%9`J2q-tofM5?US}6fpLxX~|#5JWqF>EOy+zL1>mxJ@tzR0ez2jXf>eC`PYX; zwH%acKCH=o|euY;BvcS68lo?+@z?t=(j&dE?Sq9(&4Nl6t*= zOIH^hLE@QFcmb|m5-YKDLC}eUguOR-@)n+9nOO1(t{)@&c1h4z9_|-Daqdz>mDqI| z{x2N8U9~~th)G5hdofx$2~m9uT6=?BdvjcSWn6nzeDaj3@4P#0`iyxWd^rE3j~9IM z>9XZ3R(}4)sxMcs->`Ah<}F*l+qQep-hG)_+4~P1JAUHisnci9p1X4O+V!7*`Sr%l z-|pPKcRwfhL0 z=Pq5BVXV^Nh1>p#BaWH^sy4h*?GC-`&CYgI4u|}^0!{k2O5`k%TX|@kfwF;v7WMFU z9QZbURf@jdBjGE5GPd#RxdMz71^5#7|IGht;D0sne^L!7Utl6G@T`7c0Odh}o+QHm zng7+m|7zg>lp3J#`Oz#+`TiQ61tGF8-i^hWpNBC&7yW(`4l16^4l6FX)bw@0a*!3q zAxti0gk126DeylPcn5eFmeKHBaGo*xB{0mp$8z)9c~a2hxRlx7|x{8>Cd z2b>3f0xkd-flI(;;0jQh$wS*;#q(>xb>L^<7vNXm25=Mj4Jgh0j%R-We*%92w}9Kg z9pEl-54aDMWb%=A4xZ%#4}d%%A9x5n0v-cTfC8Xo8#PF=o7>P?xSsp z2T;E(%@EIM2LHLB!yNKYd4hlH^X`4QwD9zW%?E1#r+%;-wCLXNwLV>1c;Y?8tEdlC zKPaj1Q{OJl5dR>)^{l>6eY-S6{DWxlS$&`Sc4>zACh?DF^?mBwr5WNsM1#-j`_#8f zGsJtJ)$g^wU0QhJz0d0RTHh`$Jn^4r^?R*vmlmG*&$Ify*0)OwPyFXu{a)+arG=+H z_^f`f_3zTcUyio?ZQrLpUXmf+wFmv>-|hbtD@paF^CdS_&Ui0U(Z{!dO}(B#@0t4o zWr5}Zy*p0tkkftA3%iGHhU=CT6Uld&>t8MyaJGJ-41jFC|(LT4j2oh0IdP?_bQMG3FuW6=nJ)~oS35pFav26!D93($D<2Jj{@9(W6Q8%R?z5%wftGB5?03cLfn z3rqv112cg4fSJJiz${=kFh|8)*z^*o0qI+<;BE3H+wwci4nKRQw5>@Ry2Puy3ol1DkMH#XZ=B`zmr^6LM8NfKA9# zkq?{jP{kwIgvTnLz$O%^U;{tgJfH(azyMeQ8(;_00Oo;i(lQ(NanTnIXupcKKSkRo zLwmm54ek7LH+b{^na1;P48E`M9~rOz(BQiX|5fAtUpA1^ef|9W{qd2BfIt|07lWBH zs=@anikNc63_e2gOjF@+3{UUJ}BpZ&`5|JkoR z|DXIS@c1G-XV4pElVlb>1Wz4Wn79*TPXcT`KzAwu(ZB?NcpQDyx)2`Nyayf%;h_*7 z=$m88><6A;v`q!h&*Z2Mw+*W$I@t$V{)2zd+}!v7{zGTkwQ?6Poy$n(+4021HFO&0z1Tm8 z!x5{R`fkRi7|cmw)Cj6RZ4eo+^DYvlvX#tr&uwcNP6fg7qC$}~LJ;2d)`-Om&s|&V z=oAr-ON(4Fb8Ezk$15T-x-E_vJoB@NZ@n`jhP|naEZe0Qdsf9~YQ(%z9U{Jn=@QX% zcdv-M3noUSPFNDrWw|wy!qKx8Gn+=Fk8T-ZY}g~B@tT1VufDQ6LZ0X!NpT)~F*)L< zSBHp717D7aj~N!xGI3Hwr3c?cOg~&9(kE{O(XL@8HPvjWr|bSq;Bsk=S}D zTfEAZ*NJ*hYuO651%roonToaQ7|lLGm1>4GGWiDDYSeAm*e@WsdT4_tk^Ysd)eCPL z(V|M#u=>rKM@8fNVvCEQtp1#0 z16PnMnyY&L3mNzuuNJ+Jx$1Mv9eA8R(zE8jRO8Ripg~{zIhGb{Cx*(;H9nJ}@^h>` z=+}(4=NezUvEg%U4Xh;@!=Gz>c4OFcjjy~p^tr}Y)*SL&#MnAXTAtJ)XxPYXY+KH%`E zI}0<8wY{@AW5B}e*Q#}D`cA8zw>F)e`CjH{8D1%izJC3Or5;sB>+19z8gjGl^$MufIPc?0+QGI{) zSDFTw3;nb9-d>Lfhjh5KVg6^no=so8n6&1-t|Lt;tJc3Bx!p8y%rD>m*(!AZ?uikN zCizVb88I(exYK^=ja|$5u-F~#`juTZ_v5@H!`^GRJ8WlHd3l#XSwSz{I#uSzyrb4H zQ@T}^KRH#~HoW`PMwa_qk8Teiwq&3+`^d4a0U0aGy!cg27sH??6+iiX)}{8Zx300O z^};KgcC2lf)NB8~4Ibs29h?z!t?lYF9Y`#P$z=_?teG_{CRKS@xO2|U? zv(AenuH79wJabV(_1}Jss&PQSJ3TmS>pMp){(kw;skhGkHumU{zb15gD`(r#z!9rc zZ_A%A$X>SZtt8X8p7}e)1<~H+T9x;0WFB5_%3ETUoY&9S{Ge)<{mriqgzwn7-`})z zab$Z>>!Q7>6&#ymqYmyov9EpYw^JT3sx_hK9}iD8|7z&LR|9*rYCE$`+#roMi)s<+ zZed~F7j1QuY?Vii7}wln958s;&=I3-qh1>@WK_zC2vf?~q?BQ!@L<>o+`;SD5tUtW zJs(#|>31zTeOuV`Po8_K@X3jzM@9fG$PxNt%E*xeh7O4xJ+fx4h#^Bq4d~Z`Zl|V< zdUa^xz?7s>HERqVks8`>L`q6>%E;G74ILKRk$eqEN*IN3BWr}zs0R=A+&t7P>OqZm zoRVG}s(745l2Vf;7V&g>1$X+s{V-P91>~C1_^@5$2x#I2jDUpn! zci*W3dq(fEEt8N)@)sL6Uj`e!FZH3JV|ZbK7JrmCG;Tu;Te&sOYddlY+M9<$S? zgvM|%M|_f)J>~Sr%uYFUh-}-dOLVcYk;5irFZ;0UVA%Gb7lkc@J*VQ{9j9P7te*3l z2flZ6xyiUaF%E9YnW^0yj&X3=9a9HqeC6O;%-|2sC+NQkgQSbk` zX~~1kwNb6t?D+KV={KU9&kVadYh25y`KPMifY=|k{rl5rFO5InVt(?tD-)iqY~lS| z-HD%kJiNuEF>U(qt`^y1VV$M#ESw^@2zcq&#cPCPkvpcJ`FQ=YMUfw$h>y>)q(*-2 zICix6i15g-k8SR>fAW)vDzWoCmM+SQ=(Nyc+IVeV#4mjUt+r-;B9#30+_AOd)Ze>o zwd{EK_P`yZJ~*?zAmzdJgr%FeCs)j$Jn`3A+d~$u$WQ9kE~3iX$sgXl;vey0`?{B^ zgdN!yvGuE6qvAJg3wi%iN>|f}ZL4c`cyq^tR?XkJk$bzwg#2dnFD+R)?$D3l{n}!( z(fCEjW=nEf1x#)-?z>Ok{pI)F8>=;|6=pK5-{Se*Uo(fuH8W3d)wft&al;EUnl}FV z%*s|>Q=9hLa(T-?#zZ$A@WsKi{YF3B(q+AmeM8-v5eeNws{R<4*jN-rpF+fun+*p>}n>_5kkyIgDQHxU_4lK;`-{V(JHTAxy9 zMsQY*@X(w5>Q4ro?NTeT+2h5PcYnR&4SQ1MwnzT>NB5=g-bst_S?F`NG%FrwKf6d=Nv-X@-BTT=WrWqP$_{^%@adJ-|S_#K`dD|;ly1JXvreViaOGL{P~#ettZTX<^H3Cq0>jclF-6D zJMYx-%Kc35Pi@Noeq&$@pQ^)KzO{B}&>N$={djEjs7Vb*P4LB0k82-%((Flj;cb=} zzDZ>N-7`CO)9)=!n^%9A7IEXipnx}yRt{Z$*b)>vM{fMWiFZTeCv6#8>#X+?bIAN2 z_bv=-w|tE6%rCB9YF_p6fYB3w{e1Put5QDb{l}6j3DrELGQ&U58g%-T!1Fmx%XV*8 z;JfVMp&x!|aq+^1sFrbY(V9*7=vsRQ)h=!P41>ycZKoIOg{N_Yr$JjlD%p-ngA<0` znSNs;w4+_2bFP^*W|Xbh!iSTf-z9bu-fvjy;K>bkcfvJot?)}7G_IeteA{c#*(O7x z{iA>K;IW?Hn4v~)H69x1Y5h|Yl7B47{1#CoKCW?p+>rcrf8ly2uB-MRJZkK>O=%lL z>}4oiXAT;gl)#ya%y<_!Enq|S@Pttp?1Tgj*5R`RL1m3%60C7+60$*1CG`E(2&Hg3d#)c&JvH668V z;bCF*ZLtGJp_w}*3>lDMt7mg`>eMUL7Bgs&jd>es8<8?HWyF}2b z0CrjR$L=W`b{{*qTCl@GKw;S5Ys3E80eCVPd$WdNPjCYET@Ap08}`=P;I|Wgy|_@g zW3V%85Nua$BiU67c4npE?il<}=0amT*ai<6G62zbz~jM)3=zgOMewHTBO9)YJY|tL z?U0Z(V(8$MWRxm?=#WuEQ%58W>z^{h)-bewTbo-@%3~7J8;Zy&MJ2cKxE_LX3`I#t zu(I@Lxw3H$k^A~MGKos+mZg6p(XjfV^+Us(uv+=|QluKD)I(9D~75C z1Y_s9kTET7YlUhpt0eRfs?xu2T;0NEShk+6>y8a``v`n3e57+0U%OYTk9=(Fz@WU^ z3Ck_^zmBCfuhDJUyP!ji{&sJ(*<>;r4fqz5@&zXT{jGfA)Rz6@O8na(;rnlOHt1#i zUnh$2vrd-rAJiX?4$()~19YtCy4fr727}$G)8o_*92X)AI!Tl{Js3iR`}c$$n<(fUe0-ag8cJNcsvWe0i~KnE)Lx`IjpzbCt{{p}cG~ zAa@ey=^!(fB_t-Y*5>(p z{5`w?G0h&!`}x`ZIbW0>A9|21vLtwlD7&DydWk+DHg8raGiNkVd-!-;Jp~UG)?$`S zph@0Y&d6xiI#yOrY9$oeRa`2Yt6+Za1@qGiMn!Wk6bh3}Wuc;=7%9p7s4T?iu`;+F ztyl%)L>=y;J&g|uvDf8nl?-~(WUN?03<~rR%(ZF;_**1T(W_2vKVPea(s-9e>B@*T zs+Y$nI?7e6S{bbxEFzYwtT|;}h4Lt#gjNmqvIsW0dbKK*D^)b>WuvKfEi|#@Bm32< zSw;xbl`HFy4blV|5pth*(6P=ENV~LpgC1qzG03|pb=oBHK23DKSK2eSP z(LRQ+Ufo`UD_f=<^?Xr6R}jpiv0Bwi6@9#^n;1pkDwQjgN3YTQivGd20E1rgM~_8E z6?C##&1N>~v9VFCSOHx@vdTV{gJqAZRmuc;V!-#115vjDmCBbB%IbW5P=}HLDl)t3 zP$eX#zi8y-Vl}QiO5M6@&&*YKuf6J2dpv50>P)RSt?pR8Rl{vxR3~*CqB0^cR9o`F zgn|=^naPQK-Givdlzphpl!SiCy2QkS6A3AqB)5QfsT?!f?u(<9>=Hix0?x&AMOb7# zg;{BY&vT-C21UxCFR}!_2nNOCMGRS>Y%`Z?ugiOQ*ge4l%}P6%jHqIX7qM-Nx}t2N z$_6{4PN-L_PhrYbMGDE0%f*}ZoQHe*9!mP&tb)8jNLj4-iF{7M;Di+ZeF&&DGPrUS zqU6YILRrz(1OZt>@@7s#xkXurQNp11389n>F|Odskx)X8nlMtQ@xs4B76=wil7hyV zmzbi|d|ftb_;Qo&c7=EOc>5|fggk*h1*1Z-j3ALEZ%+?=_|M7+4U9{$;PdSGYM;)@ zxmc$~##r9m_%iFrF7h&RPqQsI@?!j$x+7nQh>7x@n!x8UM?X*%tH~6;4nG^M+t04m zCB#@+GN2}DtYwu7ej}JL5}}O+ozVaurPU>ddp3@!c|@PUpGI8R`|(ucD#Hc%2C9;; zqtxYo#snxgg`Z&?c@i7*U8Aok&>+Y`+CX!HyMff5ZK;YIPstkChT@(ylQoo91Wh5; zL>_I(%D*4wuLGXb!tSl~8cIP)MJXgD!MhI@CH0wV!Ht6XIt8cr+WQkV8cjk;1kTwT z!MHGXvFtkqmVcr*Hc@+{HcFCwV&(>Dt%VU1jipD_CL_om?98MGEy;T7hiEG5iq6(j zBqTQKJ8R5cLMy4kKu?VNsmah_$q6Y*U=7*Xnc3MYrzZK-jMw}Ex%u`Ed{B_R4Cn7B zN#0h83k>kGAai=kq_2;s2S{8`*$nhihc|pclyPQ*w}y~YGgkt3H zVkNG-ZX_4v-tIxJ;flD4GAuP{1Qv@z@v~FFUo-KSkU|}r_)AIx*lfWGuv%)x6p$L# zx1Q^2S7lHP)0z|tDj~v@g(4Ig%?417*Eus*5GWej?O^YtMPj1dj3?;)E_7{iG9G0{&B z2n-OsEa`1vX(PY;olnlO6U$ z9uu;e@S2^?&nh^9#vv^T5is>)FYZlyQ{HN|W9K4o@g$n_G8r)LhT1ek#-P@m84*xRc;7`_lZO1fHW# zkQABD)h{5vs1r+xdp5Hns-P(lu^UDmj4qNf@6(t~YAQ)^mZ4r`fzzPGZz3W9pNJsA7PKh`3ORPAgMw=#NRURsRG zij35tOYu$Oc~Tz znG!ICNZFT}35A2AYv7VF%LWCxMl_~PQRYfeu#m*eR6Ckh#a*Gp>RroMNop0EIyluT z{M^KX5g13ISHVw9x0^j!(W|(ntB1HkX_HC`uW4vx?9wFt>j_)5K2?Wl6=rB!1*?}Y zjh3R(#~b8{Hp65A9Sc0zg1MmVLt`dd&uoGw#S25J#TWVoHgLN2E=B5PT}c~56lIFS zD_m^Ovt$9CW`JypqqHAM04Yf{tH4wk!c}rAdK~E)l)6(SbfwKysaTH@f{Bu9gV7bn zx~D2m)!#Vv93{0G&seS|zLE&b*G()q<&-yB{mruDpgYpaKn26<3O$>tWFUl~CLxyi zLIROFBSr@rmq`Srsh|w)1(X*UlHKJ{*08QILLDa<>6b+RPfv1a76InOqz$S=s!vro zWz`7X43rH?P% zy{$ZYuXBc`Olye;5g9m@OWGyKLhC1`OwuU#PWeH=6^#(tOm-mcU|kX=AS4xdp$CE6 z7JkO`V`hxe{uu9K`G5d>AY>)XG-4@1sS+39K4=H9K|2`j0A*?;4A}w-)CA*q18@Fb z!Ew+pUmNW}w8SgIb-`&;eHM)1LsYK7+QkSl=rwzoDiL`=_QN@{vSda9Ojt_sG-1-` zVFveP!p772XOaeGUlF=lb7+-cvPeV~Pg$l6^Rp8VBvMW@dB{X}lM7B^ICkUxRO7zf zBs-4MWm-v^uHyr=tgeZH7{Nf8{B0%qTSp34Pg(TA?8}=D!Nvx6bQtta=adx_1jf#a z4`)>6TDFA}_y%a6M5E%P7(^u0vO0$8UP?)D4qz^s!ptSxYrE-gAa(xhiW@cscG5yg ziW{DZZVENShERLN&-C(B|DxlZIaG}x-^oO zzjy_@s!pX-w~8xK<-jUV@UG&m$dsrsh+wF!f{~CdN4QB}p4?!kY>sY4qOVd@CZpLz z4eWuzL11bnaD!s=DRg?J7iqdKh5c%cYAiuK=amM9#7p!@l?EcjjEU7+YQlj;P^9}j z$;>6%YpFUfE$9CxTmwFWvb+MBq~E~IkQ9^gcL_;)1vwD;>O#X@odH* z=q#QR2Q?8I(TL^*FZH61fkA*nC&91)@rQ;2(&EsJ!>vcKg&U<+-8m3(Q76TfIAsV{ zc@I?|q{=? z=$r_YM0Kb@RG~ixDaK>KW_X&-=w5>6MCqG~E(f0lQd^X&%RpTdlR=z!jZq0riCkf> zOAKCCE6zF2Q+~AR3HYCOp|vevlKu^|bVz96+TIv3mD)ldC1qw}!C<$ZVB`|)HF%TB zj&IL_e?g&6Yf(nG`CrLXKgtA~oucs=%TVhG#OgkHm|QbH5*U?!8A9EXvf`ExFK&#z zi9%ss7B>Hf!kNwIv}W`4K)w7^O@}P0V}v45I%!KPVIoA@8La{R+58?YNMl8^vl%l} z-6@M!DwQ=-XomC{3-B@-`T-hrNMy+gJU=HnxnLN0F9cq#6v|9~oHp&HTZ~}QC z&rZ2eRSvT1D=~*ptC|$e0f{JV@o#oYRw9WenUH0((cYMay318YCRa_>=4F^HgDx?L zz!)Lv^iahM$f`gY^~GeuDq|!D7X;Ux@lDY7JBRs&+jT#}||>MXfr1+Oy~tmTQ_I>(2S)@PIjHK%%a zALfm;woZctcG9?7+>0BhjiWTd(wHimmsGuAvrvCP^Q>blkr?Tn9M;KR*(x~6KJGbu zYEUSNzbc%8L=K2)0NM|Yg|mLtS>ZLf9Z0 zz7|a_HEN;W=F82}Bp^_(qK~3Q6}CnOjTKY*fkJ$WEsl9(CkQrtl)N&AY&&P_u1Sf) z(TIlrrouroU{~6j7}yvQy|x-gYZ|V_FpYC?w9i71E&5g5G^F?(5^)ekiX;^&lO&5w z0Vt=8ZxNAe*(yoZN4wsr7iMK*T;p{wxg>sNCPH&xw!;H5KaZ6YT5Z%A7pRlOS`a1H z71g1)2=8Pyqvk~65!Ab$IYVm1_&Ve0b%+v?sr^}*`>~OiQDO1=U=t&W1Y61qN!2A! ziT;K9P}J2~G|aO(5KCFz1xTyx>W&wx4{bGu)eB8(8Ji((G2|!=>aLLlVhFVas|%Ie z(8aUr0-FPg$ACLxbgKi#g32HQp=DCFN3z`nQFb2;Vc6S)e#THlUH;E)Q&M z55Q=J-5S?d`!n2{w`o zC@!1PU;w9?`aV_fR#bW&Vh>lff|#6pC?a7I>D48?La$j|OH?#(D)Vt=?r8y*Y1o*6 zp$f3jS7w7UNL7@r$ggT!upKkb5grnfn7*1hu#*d zLl1OxY<>0gFiHm5gneF5RVM3bMJiOeVE47=)|V(agY&4_*XAtQ*^1PUU8<=Gs9fv^ z(YQ0)31a5@YdnFZDC{#c{(Cw&Mg&flP-3&QL7OxXm_gUU`Zu-}xar_ftA)*2@1CdeL0OgYA&u+=gpLm+Ba;=`f3QX=4f1 zC@GAKv2snN&c_O|NVsi@9E+rgP(z_XF&9KV?LuIRdL8a5T4uVuF#z21?qxM?w*8 zch$Y5%|95Ydd;~G;K6q1pcgqM09BVpMJIU(njV+Xt0>Q0A za8-2~KTDxhWe1FFw-j<`Kf86B zlGL)S(@<8Z%V30NU51~f_87)>{w*C?@f}$jr*`kp&!i3zuPP;}L$pf=rfhUj`WDM! z(a{jSswDka5eb4MDrcp+b+8h7VaZF2AX?UlMO9!aE)AHAZx_uUO{&-`u5;ZJ5{*fA zt$eb&gM6wr>c5jeiK@>{03-2+1h6cKH>w2YF5x(NG)-P10TyA=Oo`!KQ+CUivPVtp z^59H=EBmra1BY$|g4<7ufqkSiLEE%=DLEatW%ujyP|Or%878ZFBPI?7TV>|o8tQX-bX zQW6emxuIHg;~ik)>KX+q(TMqsy3kZiD0CZQC@1c@D1moCpi&ei%7O*hM~XUOFG^Xe zb_})PoMI}vF{%f&s=8gFXpf|h`9NcWbvURy+USFg}Otk6L z6YH0>^#D3t&>YRg-5W`LwT6u`V64S?Jq~$wp8+WwGMyEqXp*qj3zA7q(5k73ZUgP* z3yHaPeMPX$9|J)gyt~xeKOjBI0a&by`B1b&g{t>5*KL zsYa2S9*Ie%#q>yw!;II~ps?>1GzfV?5LMpdVTPJf@X#BuQUN+q>4FxFi6q=44y9sU zq{_%t*$Uv=8OE2S_foV)Y;{&)EZ91o1U^Xr5|jHSVg-%W>u2iwCeyXmlV|N}gTBUW z!tNyqm27t#lyz)lo6!K(7w_EFrtWED^Ae@Hl|fl6jVtT_)~2?c?9}Xplcy-EmL{zhh{T7H7hZN>0Y6GQdUDpYU_)t?%SYe%c6?%8`^qI zh)L+IckAD!>FFD(nN@ivI1}+FJ_l-UbZfQs*xPyZzDHYi z4T&ZS5Wki2MDIg$P^=wUz5IOfwgS^}%K-{kV(f^$m4H5TEGv7@5Q zUeT4f>r0F!Y{6Ev-3sSt!VZ%xFeu*3&fcGZQIU<&d|i|byQS#He!QDZ=8a;wje!#) zh;ASjE^Fg^1Y_|Lfv@pR1QGZM-^8sBT*Yh6!vNUE=D-|$5vH>G<>4{-LMPM*o*e;v zd%^N4zF}-be85Uwq%dCmkn$O~I!aaL*446aN|bUT+@&M>_=KSx{Ht zH;yZV`(?`lKj1W%SAhE*SAINB{X#w}Eate1$ZI7lu$kj*2osESf^nQiS5xb{D6Fq1@r{AC9yeyaXVwhVS51nJ57HZQL2Sh!bXzPE*`#dIKlT ze1wzEdH`$j2?pdVGJw86LEz`myXUC=5C!B`yqHnz;g!Gt%aev zEs&zx>*xOC*7~fOrM6vaR$DA{sDnOWy+Q-U!h_p zTX5wnRjXC6QL|RxI=1Z_uz&<0eg;HIImF5fyEZiRBz|E#q6YZqv41`wksD zb?)-Qi(R|D)V)W~UN67WyU(kAok^AENTde|r9Cb6zE-SKJ+KFgFD!%L$^$J-Uov?W zhb%4OR@$uWd*?Q!?Yh!p>wcJumk~SJ7yiz3515{L(T(otEm(TLsA zbli}HN7`XS^wAQe1F2dy^hCXYMJ@>el!vfTEm)>v23O>w$c&VZrzc)klLWoVg!z$# zW|H)R^H3v7he}{l!a|7#hk5~vToM8(Phn9y>SJ7yiz364C`NU9DUO6}vjuMtuyjPd zc4!jbJrj|R(X8E|C+Y<(a#1?UQ&=KxA9G%j3vbUF&6JLpmw`j07|dobGg=2FHHhqB z2gSQ6B2!w_`1%X(su95=7g}5O4oj4s>EMbUQ)FfX(y>~VbUZw)P?)LdXop9buu&W7 zm^`!_1~}9USmdH~l&7#n*(9ouaYZhqWAdPMyuI;t6InERdU|^z9c0ib8eNA|h$5B1 zQ@cS=)C*YTk`X|83JY)Si0Wfpk&7bpqz^Iq_&~Lxmy8yRkA*s`QE!ygfD~MkC>@Iu z6N15^Uce$3y0_{b7M6S@^)arWt9 zy?{k7ytu7;hb8GfB=s?_$VHJ^AcS##ekPpgA(_0q{Je-Mm<)L2I)#I!m)E)rWWzmZqO6;0v5R_9px!3 z*NDd7R-KYObJj{Q%Zo7J)J!Joq*qtQE zbBctegZyA;AI_YDqxqmdvB4XTYhq^f(9sEl68a|$8a6CJy~T|lJUYQPa!|7Sy|K7A zV(j3N?)S()eM2~3#qY5HP~G&6;anB43V#M30}p{40GU65Jmym3xC{3kfWkgdLGhEn z9N;hDSAgQU4*UW1*MN=c9Od z>c!N(HIVR0Zo2Od?Rjzkbf1h?=i0R*%5t2IJ>}3L6{GpH6}zVPqg$Fy{s>er1gc+3 zo61FH!eky(KBXP#d$trV40e4LbWQz=K=eUPf$8U=Nf%e-l1$L z(b#a8(y;?JKr5%_U%UQ0o5GTzxX9Sqe^-6oxyQ_JWR#LCwLzL4AAr)M`XEDfLv=(x zDg%ZxI2RTXPY2!srUF59A5bQ`jWK;~i>Yust~y_XugO>C!+4SRzc|oW{V8rhb6W0&c>EZ}V2$V?VkR(S6|R$lSBPMf!;6cWg0tjeIBBbEn};e%H_I z<97^yb4BwZ<l&kGMN6bc@&Dm=$`IT-H=iI*jfLgYa1}Z zZnGM&E=6u;R1Jg{hVrBE7)42=NWhZ`xF85C!{l*6X>chB38op6*zXS#)44k$~8JoU;LIJZ;GAH zY`c!GkcwWlMa4!fu=MP@boQK+mHX)e$FA)<#qO*6TcX9oE8)_aFXT(Lm#F@iNXqlL zua&w$wm3ZEs6Oc)(#_ylTT(xxHvK8)&=2jQ+q7mV_6j_wemG3MuBl$r@s;UO)W0Ye z*3KXz0}{}cLtCZ6M&4PQ5OGnR!_a*efG(6HFxmZ(+7EXEQJidiBCel`0j6H*ay}*s)`U9A~$yJcuj2OhP z%Bazul8GnThO|-a4UdT_#!L1b6K_iM=p8L)b%gS{`KUT$AGwuf?|18~XNOjrdB zr5F{1eX$(hmnrVpjaaDvxwPr|I!={m(dX1==K@et~*9L2lt!7wLd+W|U`t~0-mQ$~_=jXik z+X)n?-{<%qJ2OOMY0-s+6DE-D?x!!F_XmanV*xwR8t4r40Bk@_fOthyfDDz%3IqXK zx^TJ~?Ys2j>~s^A#6a#P2(SQ{155+bfvvz=U=?r~I0KM8kPT3nJlMqhZvd;Nyc~Vz zyM*WqWk*I&-1cU4!6qU4+&g!obR(BUjcV0AD(2kV(ND4`M5p9Whd(U^Z)AhM# z7CXkh=-vBTMN>Y>P+rM&3Z zWA9xRFBI;4SI6zzozXkG60WOXD2!^1@E4Bs-n9?@Yac7z`8J-XXY}56_|fJj)5@jo zqP8HzSP5*cI7EA7h#tuhO_CwHCqsQpG4>doZVzbYvK=&n>onNtPTW=%VXz5S^?C`O z(=|P(d*r5j(_j&~yo$cu2ebMdH zxH;SsZY`G%@#`{oThWO^*Qgo_%ez5~i|&z`{?(ydWEcFjZ2{S1x`wkXXndURk>RVf zOeLH8G#TpOWT>x`p?*(>{E$ig#W;}cso$nKlpjkCU(ouBL(>T!NWr-wT$wBFQ8i$}8!`*+-Q z?HO7J;Z%oR38mepG|1T4f0x{@@mKXWER7#1cWkZ)%r&gowbmb>j)!XIRt&4WLXApq zO#si#P|~;@gWSMPhTLK5{UEqGG>ZYY=DuymD6QUicRT&;a`O+j(@!zC(?8;0;THcQ zxV8A*-A+G<$KCDpgZu7o@(el$D_cixe%^eMC%FRvpS-B9F?rU!6ebv8K_P>n> z{)>mD@;dJobNA068O`0;-7nnS+POu%+dajZhBOKG=sh_#qb0S&=&8e0bOW43%U0)% zR}HOLPyN@M}-(BajG-r>pU0jjyx0Ia1U3 zwl;In^ls%nmHCmDp|Gb5%oR_A{3`tva;wHL)Ce@bp~VLqb)|vo&E2FieGT2w+SFg)qI?*qO%Y&IA95YP2(w>A@!6=pJ3wH|hUj?_Ij%NRo817|oq?HN5JL zw$dVs-DrZ<02r@)p}N?UPZC{tH44|8)fb2D>ucjgcKAOD~K<@uZc?T_SF zdrp3`|KpeI-~7-2_Z{=Ep)2x#w8qUOqBZF^CB2DsEYh!N?v?aSndwKu|KIah*uMP7 z&Ap4)_|Jd--~TVpI{(?o{zsio|Dy>k_3!@!xaogavlqd-zs6m7SH^5QJnNqXk$+G> z7~kQ|;ID_~@pQQIS9c~Za5E?2W-%6D+N;1{2W?yi6TDk@->p^2%{6KtM&eT^h}Ns{ zP81P|C;r=@y;-e-g{%QUwZmDsYHcQyU?s94v4gw&uJeiKt8mmDk8!PzY~|4G`O{f2 zHrJs!3;i*!-1%-Z#Yx8|nm|96A@2T5GM_Dj#fxLJ+c&2X>!W{z;{I?JnBl_YNHE;h zcyKkF+`0$X0v@yyu5SI+cz+bmm$)2{3XC{1cs1~1`F|n$=nXVZh z;xi|oe8wSVj2T#>AYD}|hw5{d$4YVtCW|;dv5cVY7suWHjXh|e2riIGPMRxn!#|o$ zfe;f}Nvax03lP$DEZN*-5aFgxh9&FWj#Yn?f+&O;OX{6qcQ*S2Z zEqIwY{R;QB8Qo;+zR5W>6w5?C2+e?iL29GZqX;;M#uJH<@q z;}4rW*Vq2qy!L70mY7J0A3YQ_#U|nOgdl2;Fe!*>5yU@vc)hY7NPSipG!#%BD2%`a zj!>fnTnv;JJZNIUf}}t{)<2-1@uXNu5ba^`p%5jXAJ$sj61zCk9C0iU1F*Ik%$E=a zoDGa5V+mgfeIz}5(u_lQQfk0XvE;)5zq}627stJ?r4W{yUoxYP4dj75WGZ2ddPxOR z()g>Z&76ceNy=ccnVU<01$Z%bvGBzpZUUAe`F4f@1(nQ$d59T+pdl5N^C1a$w3=28 ziy0(K<}x--Xi#eaGvAMv!H8~cHrWhsh9gEktXrwZC@Tm*R}Hl%%0n;+4iU^DQP91( zIJ-DBU!8t+diM1x$0kdQJ5IR>c+kDk;nZFJ1 zqV;t2cF#W?I(x&zp}jZsM{f^@^}X>Dy6)oe+B)#?JPRgkdZu)Czb3snc-buJ$=;(3 z5g2GT4pxUlkH1sZsMBI^5Y$(Y@Q1@HdwqB4^Yptz-`?YQcE;r^B0*FjzQ;Ax_-9n% z@F&#a?nP^VwLTm+_TC*1-MzcRp|vMR=@6G{!oo1$>=_a{qq;L@$N^T^4?_)*Q^&oc zozU#HUCRWI5Nd!Gs*R%t-T5Hg@a{9Tqh>dQ8=oVt6gQ&tvI37|K;p(1s8i#{wh1{N zA;;YYIkx52Id%l){8f=txu0 zqnag$VNJ3HA9}_Y-Zn#Dv8}3V=+Qg#1w`-CAFEj7YBL=NBuugbffId-Nbl{47|FPZ zm+i;{Xt<(g@Kes;rlab{14pg2*OF6z+^k-$I7(LkYoqB$!t`#%#--D^cG~fWj4g80 z#c8)+&KQECeuc?SOsD&p0Of4@EB1`ZbRXaItdpA@b1Z#7Cs+;x9bhXsVH}zq_8)q# zgO0JS5Re>{o9iGC8EQUEoI7%k6Ud=KrV(a}z)v1Kv6^ImqMf1=X2AoL_wbDS7M2xO)v?L?!E z74!r(d8iArl$kIjb?+C@+gKB}P?~bn0|WhsmasoIYr?Xt0xc;CD=F{eAm=?4vA@tf zRC!;0)pE*7=vOJyj|u)Sudn`v&=i~P4;5oTQz!G4cxFT9-0LR}CY*_-QyrAVgw{xs#P^7NNv0^PhSRZYkrpN1O$z#^rW%?thPnfnzK zeBh)fkS3O)HX6Iw_uZ7zEDzEVlue#QeXL!hD6oyeNgq_XJNMrt8(2P2rRo75-RA3VR}_WugyjkNO;~!=>43?OQd=eB)LvHDB;qx*_$x zA^Icxk02zu4n4Ff+6(K@L+I3UhUONgMoG>^b`-I6PjFX0&Ld%{#0ZN?q<)WXECO=8 zS_MueuU56I<7%a5;V;vb8M^v}F2bA8Vlo!{-+J8J{kGP~vbpcV=H@A=C}AIl8>Z%M z7CAEdu&GFrQeG!6o0L9W;3#$C*f`x%-c)52B^G-b(}`aRF})dv?@VGma;lGWc*~I2 zzjO8zai+DgaD7w+iAfj8ixu_IdnM`Xc1x8NR4^Ua+BC!*G z%b~~OKJP)oD_kED9T8GQ1HG7O9`2#$Oc6sZ=8#1G3K1D+cxbl@althy0#-q=Xhu`t zJX(wn)DgncllM_1W!!}=yqP)8tK3_c3~;Hl&Kg@2VrLl&EM%dz_cB~fxvfjPOWNTa zCo&uat`hh+>p;IIyTNrubfV9e?n@nRwCO*tW!-^dy306wYTZxql!wnO6e2UOv z#WQ!$`|i^Zw^+)jiMW&7dwSy{9~Cb=s-6(D1zx-#3@;CuFeP3-$_%NX7e+LDFV8NH zR9xi2mE``VsYN>4{tCMf?)L!1C`(A`ew2BiPzEGx#ZdSC}3mb+ySRcT$??-Ve+@q}J{3su)!$=0ICJZEc3Yl}>?3h2$ zob)##WvU{g43wcj(qDdpQX}aB)0M0sw-M~4&R!`b5esp-LX^}y@0;hxSmytmmA@Yq zPl1l(VADJ(fClbZ^p{@dHSlKSOgyCrs{I;3?7FJasJ1uhV0p^vI7BAd|vC$a2 z=QP_y@}3mf5;+kISDuW6W`46O`58<1M9OuEYU1hO@K5Pn4u3{L;)Nb$BH2?Nc<4Tt zf;TnBKJ%ipwaZc`sRDY=$T9S^<<;5u5u0Mx_lKMH8u1t@PhhSmstN5LTTI}4OMq*E zh@KIPuAEpPd9YDnAB!92?(x&TUvU$VZMS95cYIIoew<$4W6vzzCKWN`auPdC^ERfG zsKP6qe2%expRZLqdt@hSLg!!P+|u_0{9STvbF-yV#ASU0jLAwxL{<3q?CMDBnA|0H99~V=!RXrT z;OY{yIa=djgb%k@R6HoV_oFoI6!_swd7tpZgmE4}@T~HsnNRpp;)f;T*ItaD9s>I1 ztYz+Yjutr96+nKy0NS#j!kFE}q0# zlFTL~cp{eKtygmS@Fy(9al8!Mi2{iv)k#iMCm^D>zy6*tAFw6ji?bhQnMsnzk5a!( z5LVw3VLx&AoD-EIE~Jt6*5} zNGhDhMlp+V$YOT40(=n+Cb^0X&qB%B2of)zmkZcD@$V)xKe}cLmLj58gq+EUO%|F+ zz{2xVNkuGD^dgH`pYtks_!djh3IRe@$+{u`Qo((RItv^uq^b{vdA1`>DyP@SOrdJ+<`|6V+bKWM5CG zW*gEa0;^>=3S`{;aTpsN#TW-f)8Y%0a1b?H2SmsG@)rqDx_|vcau^hxY+!r_C$HFw ze}a)hhDYqO6XTXeAj zVneah_R9Pv{`hxHqmf}X!c`Qn>~6O(8cUNRqvZV-m3wwY2t`CrEj3%LH?sMcWM+8f zGpXR1FONDjNNVrahYXV7;VrgQtH)53&u_3v6t=XkDg?j-cTzj~oz(FzYHWQ~?xKF* zt-(%SiO-12{F%U8#737ZaLVwHc;Sy9ymbH8V7cMk$?u~6i=n9y9{sm~rm73w1V6Qk zSlpND|7rK^Mfc34C>fK&ijpZf7K>oJ_gheo4acpHTWC1^EK_gj@xU-wY_p``4rib4 z(vcHe0knskD2bg=G6h2vah=5u_#Q549h~AC0#($B+CX@py%uVD6N}%fR417EcmD#p zl(M!h6!>`j>8b(TfnfG=hCbHG+aZp<-zCBFRJn2JC#&1%F$mgVG_iM@!{B*%8?2h2 zke5EzK8`6$g#eQ{Dk6`Ld(t06^I*+P=ZVNh>g23|?JXtgo5<@v_wVbtKl-PDGpQIA z2<{Wkq`6%Y2Dt6`+z$>Gis$>d#HUWNsKE*iTf%;VmS?y zyS~z9rl6ptcy?8A8x1p#k=s(kjJJ@AgW@pVG7{T6@0^>jah232O18;-lwf>`Ds|jk zYI3`0_WR(ig(Q3Mvv)pS`HO4ce79Z&^MKR}^$h-gHbz!4%n2E-0hN$IPJhk|89^bS zqGV5c>}J?fFYrd3LB>8mI|fJ*Gyr=MIugapX&hELOl56g-t~Ayx9@CRB&OyE_Qb8( z(#4(hq%V5%8aK+t%45OY&p6xCzWmtPrY78N_&764aR~I5&U>kQRL3Kn^2mNf-?*+p zyJfoX^c~xle9QS$PIfs${vl?|`(3ZV2UpeQ;7e8gyzivVhApU8)6eZ`SXQ8CSm7Xm zV=y*&A4uj^aR`kd2Z*x1o0{GjEijiK>~?Ox#clyO%cV=1COal;4{vhT&zPds`q#uS&_L{@2P$sov|e!DSG!r^qr z+$$Ne^zc<1VW9p^u2jaDl1JU;NXaKxi#*7f-53mY^Al}xNiNTqSBc zkiktj+b{<^`ERqUoroGF*zDS?R8^6I)XU+GI$tB9|NTOKV#!E5*ye z>`<8dV+G}H*^Vu4%Z|r^U5NYFy$ILhXTDmK3?4Bbv&oIkb>|3yi|Irz>%{c(@F+8> zqQ)ycF+y1c0gq8H8-1;a`$|1mCTLUFX8>3o>EvQ26!gc+fv&=wLAO~71x zwEb1>Rgv&NVBcO`q%^h?!2w$Zn-}_=B8QLA=W;0=cSWJ&=uQWT%P715Z`<|St@Cci zBmM8Y*L*d|@`7puH?BCfO3ig-&;ux(SU)$`njJM18zXe`c$*Xt7L(*oyAs)MZ%gX4 za-(6aTnWztmjhWR&aK!=C>7(yB{4-^Qp=WsML=ExAqzssI`6>JK^kK@FyK+*HxpM0}_e)e_u!aQ%M zXU2?*`tK(se~ZAN312U@D?=G($Y;vS>(wS&&;1B@){CPi7dV*q%5)EyQqP#=y+f%= z^a&A@7c)cA=9fWtu^f^Yx5OuRFc}utpqyW%TYv>A+7yLX>hSOco~%In@WfUwj;9lj zr=Wl9FU@ltpp?~6e|Ylxu^2!SZB`k1^>CdNE>~O4Iia!bMzJ84G#2ZtA9E25!FEK7 zF{x}%Y;loN>H;ximb#z3hGV`{(5}SfCD<^W2La!gM~5nB$tt%Zpkk_f6mc=7Y#FJm zfRfAA%LhOyrqzf0c0PFB07sB6ljgwiZK*Fi7;=ZLh!f7mn{(AE zJyZp^Ce$5nMTr{np~fII_8pZ7X~-6;q{^`6x#aQw8L?3nn~j+LwD)>C0>Qsyo7dTb zzS$>0eyBD5nAxPHk43+*7UK-Dzi-QZ2yu^V!iW|(g#NXAEJN;cl=9L0Uu)Q0;)t72 zvFy%ST7RrdPU=WCd5cq{qz%bCm3aBHE`(vc;>z>UStI$tL?LwJVNaX}f-xSl4?!4J zl^TpHGOH#vuUc^|2S>7zPP9j;xCrLqnz?(+W;B zF)Qr-#4mUi#y~6{ldwvLpuJC5ah~s%c(yh%7_oH5NEmt!j=?x z5`z8{q6&yYd?23@ZE?Z}V?80y6A53K4`C9#pJ10xiCE|6vRlgKoM7L=HFl3+7lQu7 z1iR$F7+dl@luy_?Jn=^wZ3|Zk%2VtaAM$B14mv5JuJ?_n099sPU?q!%4-Xp1trezp zhUDOoIA~zYy$6!AVq9f3u1~m1n>#VC{P(4+pO#vMy{(-89!yioRh8R%o~4(K3+ye` z_8*CKw`=?eSkJ@dTljILJMzuc4^O82xYrVC_5O3=L$I~Y(IEHCg~E}WnG54>B-CV>ZsrTN4-0 zCZ*a8w(~HO;3o;Prvm(C7)=?dI}>wf!m_tlfxixT31d37cOq$$JaE|qQTx)N93)*=8rTOBx_x0enXW#TMkJ?`iY?l1%eDZO#e<{aI*3*0! zM8+uGEY>kD1r5p^d|>&2fh1(|OMhKRJH?Ul`37FRI_gOD%CfJbV09kS5vQws_WY+; z%Q41Wh=db=xtuPpA|t{g#NsN3_-Bt;HM07nNaUB5i`O)GBB_rv+yYdG-*Ih%JleDA zau|Y^5TJ#|ViH?VaW1}~NZ{inTuc!-5#vI<6N%6Hr%c63iLb-eTOSlHfs_TW?{JTU zKkHAwk8vqJ(X5Lx@8fI!Q`|L31d%(B$)sh)m)AJkJtTn>_ajbW@S$2@Z0;M^;ICN< zSCnWzH?0G(D0>Fg^^PwGC(So8#`p)wu}vCrtiB6>zRWbh5>`l!u|_ZZ&m*9N+A;X+ z3L;DLK2Nz?1;HYhHl!A1w%K%evzfj17YFvi_zrKzYxa6*9)~_1YEJ@j0!|nkH*bNg zqXh|*QGk7vqvm+L%4Z*kh+w8N!8>-0w7SsE+wNjB#|a_pKvvj&hf$2MF&{NAgVh?5 z&~e>8A7>hj&2?z5uw!-_zz_f4HGH=TR(F^b>jU%k8- zM4Q#b9|gwiuLdXhH}^+jlupD!)`NMl_GfWoe=`~dQDijDNdTOhn4fq{*FHz$U9bjR zb3}b(HbS;rf4VjaJ^ZvtnJvzOeqq82%xD>mrjse*418%c7bb89VMbHg^a}BER9h-> z1I){0!ZCKqnf_{pdkk&?$vO{TFU)ZGZ7?DPY-VFdQ^O#^27_fvsF|Z@tk}Nj z_6YF#QMibVOTdcQK$0AU+@+8r5+nk1NDMMVHw+<1O=?_1D?rHfXBA+Opbv~qY-0q6 z2(4ks=N@V&1M!Ubhz2hymk?cEQ++Q4bG1xqyuiwyM+Sg@Q#ti zc!edb6+wt9Lk#5Vb_(rhx*!4q3Wt!Oml*81k3D6)>&Q1@W!HDh0OJbQ^JhRWwz@LR zjhOb4?H=~N&V5E~YHf-W1iC6XhQo_NSX==*{|1EP6DY`lu*K1}52{{-@;j;?T|>wa z9m)!pvCIHN`=j;jZqJ04WsX2aa2tYhK{}g=4TCI0V~V=bCh3u=3P-a0pm#zQK`%NW zn@vz;;`sJ!-n;~l5!!efE$QkHYKJiHr@)WJB0ln>bdQW68S1RbH8+$GH)~d1GQfxe z!}=IuNuqufE*4-7;_ndcynfr~vIk;lkA@ei5klYi7z1~UeL)$`^CO^@DbJkKI0-WW zPb?R#R^iI%UR<1A9Gb6AzdAkp`qX^=>iDbXsmW61ynF#BKy>7|Aim?NQht#$1qnK# zM4byh>@dk7lr{!WpR3+RET1t?L6(v>J9ybV?HqRvAx?@Pf6ioEe1@f5cqJ zWhO6SvbbC=Lp(Wn2f-tLrs?mbQUtjwu5>(|52da$l~YRHh9i-qn{#6$(I!fjjHv;oR?u;C(E2QO18XNm z-^mE_G8wuP)& znGa@4Ph@$_SSb+>FWH`ZV388x9@tEYnnS0NIk3qFYQos`hv7}IRU_eI78i$65Uy_F zJlIcZQzN0=ulN>9qxa{4Y{)(n)%LS{h;0?Ps-J;9KfWN=O9RRr(bIsT>J4f2G`pLlV7=fI07 zQT~lHoc7`Kf=zO|nGfLz5_F2gWk{Fi)*%B4GkP?FA;+{);)RG6Qx+iFA*V_{Z!8B< z6Knu@Q6Z%YoDtjHWHP7Rh^0B%piEYn~|Y~wf>&&P&!EXqX0V_cy-q13EASuWWp5z6Eq;T|++Z<+sMKvUcK z%wLn?#(Q`Z=80wh#$ zS-2huz6e+R$rw)8XOl?;1MkrlCG!{Go@dlL-6NepgE!4$WGn_@tf?9wkF+FbsQ z@&Vbt(9B;g-Y&x11tyb;4|f|*7+W%b5T9&}+^ft5M!uuf8&hP|o!3rh3 zFvlBYKb&DGhrvBKICx|vs!=Kr8&2kW6J|K{Ddxw8B7R_^zk>4zP&o!XOSJn`>M84M z@*IJZC&AVYOc#^b?d#7pZD7bJp{^Z1hnUUP=o-PvBSPWfBf~Vi3mn<9APM-$fM3Bh z`~9wSXqqhHn=W*yGbA=&zljq~6L&bC$}9=KnD#M^nBu4FSdtq#fGCcfm{!Frp$$yC z4tAFv<{WuS5;w`tz9C1rTtdzH!%p-^>Iv%J-HDz)k|cp7)9f)X907|T0!7H5KkY<+&O<_Z&Nk~f6VD@=EH$!R_NIp}T&6y6JJJx~80n-MML9SW zlJAm2;&SjjEeBk}M}tk>SayJP6xrRq38&-FpIT3iWq&owC85Gh!N{%>5ZN@xE2eR= zm&rFtr7cHuJ`Z9ckfg=(ZUCinK-SP5Cd(P52}{US0I0XmEFs;l>PYlq%iN+T+vS%1 zF3+9C$Z-1I#vc!057EldAp3E)oY?wLnlIP-LinU9G}L~HXrX{sYJ!!j>{9R&*aTcs zBq}=e(O(T+(zQ;_UQtaNO-di5Ho9(#6q>m-)1I_w=%R5obK^C6%_C2r$T0 z!%|eWP_6;5%8ctuH7dTvpIAk?ru#>oZnim=l5Ott>^xr=B`La`BmJ`}4icA0Xk zppDbBl{8Q=`9&CdUG=0+{~Mod8=gJs+qT1=B=K2Yh>Q+957jE>?}BT79Kkb zke!7HvQttQ>t+@vXwaFjS*V;WR8AHuCkvI6g$lAQU9*#g%E?0IWTA4hP&rws+$>bC zZHUDp<1`eDNJ4uRZ_+0UXB0#{LUd#TJYdY#y)Z~#V6hR`M8bh`9;}%842Kq6@b;3^Q_$8RtGN=pjEXK^hb_ zl6r&N#W%-T+ZiFC<<2<5DqQNdBR}w<2PoEeMibEwu#kWW2ulDQyXS;kh@5K>fV?+2 z>J61r9NRPKI26vt*WivQ4rsMm((E61akEJ3iW6nOv51M)MWY1`+ec&ut+yS`$b&h< zl2h>3Xstph_wao!$v@?fnb8$viH;$U05g_7<)S)TMjz&=h=R&6Gzf&DH9wQqg5v=c z-zh6e?No2&5L2=tUAL#fnjAQ0x+~NwOf=X@Mjw_S%%_+t$fHT?mk~<`+*rlbH%lpvLh(NyfO*-#Y1%~vcq24qhxi3kP5uCnw#LS|B_j;Ba9cQ0wZ7W8vYruF!#;W~-A4zO&ZYwlf+aL$Gg;)7TLel6qHzcJ=Z*9fn!sH=$H0%Hh071}C9H-fB;WtXSt z`ho(B5P>&vS*-_5mLdhC$0h{CjV*wb6(4NjuOqT&#uBQeNe^&zAXNFV0M1il%dAaz zUzPbz-NN}FAbpet;*oc6M$swc zW`x7dC`M8;mGRIVl1j%^*CFQD|KWJ!!y~=G!Wn|#ShRK<59Aug;_YfOL$CxZC<86! zYO>7DKSH}O%w6NDfeGcc@nmQ8#CY=Sf8H5C$KRdk2?9Y#_C>~Iv*4NydV}C!@E40p zTm-?Ghmf+)tb!}TE+WHs$qgOSvffi;w{520fV7!0gc|z<Gx{q1Hep zrDj+dRHVv)k1XnMCo*=T!<{i(H``roX0xZp&eE8Q{U{;)>d@_;?Cbzd)WDP31`{Es zkqIAxCkA}$#vk~L`Pg{;M+1Peb`h3Lwye7qXropd(*0h{4>@Ev|ZbH?vzGsN%tW=6k5N?C#;27~eR2EV8L z&k)`@ybTc*h~MwnpXi#3MAwwGS z0f)lx6B5iJ1<`}r)8xf-vQ=-i5g~{P`I9>NFg_7O`-H+((G_W^eqmxsDWafV*sbs_ zBcB}l`?3o9SU@7KuR+0-kyJF2OJq2b42go-glD6-Okv_r%E>C3vA9ZDSSymi;PQg7 z0l1R+>8}Y{09V7>5KE8+835UsB{SX-W7@cK2oB zF(^_%FQjM#XRToiG9iKCm(NekInKxhIrBh%Q{>n=G7yiqUct)-%$4H#2Gy+TkJrd3Sk zpFL*#O9(|Qyoo9ykx60Z-$F|yyE}Spka0NZ$=|`iz``VSN2b{*9+3f>1ElbX$|@d_0iS^)Ktpsw zK@)gnBftT{bdv%DIw`yZj8aroO9V>D-sSwm)E;7Ic({mw zAv|e(u`C{rreLwLNg8SzfDJ}&xn2#{M3^)i4Zy}lBDIQ1Hsl4@!vz;l*klH0%XIKP z1Qtkm&TNA?4vKAj8QenM3m_=QHG6e%eOPrH)kn(g7%?-Kw^FTd zpSRZ7I&amgsPit^Mvpug)%x~e)atIfY9a9Rb=T^iI{zq_vu@cMpf|;wTcfycRcq?@ zxhJepb;D9;2cxlo*6aw@t%j}64-KnWx1-KG%;&T#nhyHKoSN>Det~6mCSQw%G~-uE@?fC#s;bg#LTo0 zBtL=`M+3$#3xtI^En{M-28745WC~KE_k9y{sk&Yr+A{TSUD*ThTG4RvNHqu*4IwCG zUq#11s(R}htkO=7!VuIo5=v2VRX4+^^12#YC{S3{(?Fo3nyRNkG9O(8$#WJ>Mal2; z$ZFK6CYY*Dkg0lB(Z~@kycNxKQACAq68M0gX~#ED2{_VT&AmXV=o)88ddW@W)rJNq zg)ZWDEln#$iH0-2)Oj_^M9tA4S^;s*(aE)Z-*9)D8VUt%)M^^4*Fjv(pYlIKp*TM{|n2I<_w;8x7q&RLtpV@L$YX(a=jVr%wFl zb2cnX!wbcnI?68QtZiGTZEM76p-vp3s^)-VP93ilbJjInRmkb+sJWO^M|s7Z-qx+_ zIJ8iwtK-jN&W46RC)jP7W4wmj&=4N2kLELbo`#>`R=U9=Tvlv1ysBnkxr4HpUBfM- zIhGU)b!!9$g%BeWNKrsTkJtr75sHceI#TBwBk}<0OjD&o->6s`5>cbFqNP$LFcqDR zrK#P~*a0dcsB87gBE{es$j0_n(-Ia=Xcx-60X9~Wr#a7qRUN(MiYq*8fR%I|xVBf=qlM+#<={Hl ztibitk&$T!2mgq4a(MSITNmepm)%zvM|8I3p#K&}_aUGOCtVpo9>M30R6V0#W!MKy%suV)4A z#;&41pcmHBaZIi(|7CMKp7S z1}IxI0kQ1+&*O%;FNKzX3SVd;v6kge9xc;FdvK#BYHDbiU#(M?vQYRqFR3I9J1(QgW`>lL3Mn^A-)2)Np3Hq)OnT zq=xHcNmh!^ZnY*wGV?S{rIc5mZn;oklM2y!4#j44+R?XnpmC@=8vq==?{bc*01!=F2%LDX(c>V=HQqrSk_DI;(+J zXNMQctD)7oC$>eFS4JB5O09~gVMz_LbdHZgXEn&uSt^C{YGmn@`fZU_swLcyteQp% zl7SW2b3*|$1))-@X$C1(P|f(dNQQBcDynW%w??QQ*{V*#D~ybKWUD$=uTWk&vQ?c= zWy_JRT4i*6@5okd&E!I;9Sm_YO}$bW)v8YMxo>Eyx`kHF(0rg~QT;H@qN>v@wjCOs zS=M z$R%;qZ83j2mua=Cs&27tjdS%2t?0z8z=6ittm>jTBop zB{_L2fs$0MshJ~8RKs6HJ*leWn&UL8SwgL@Syst&@i$pdTuqFPB!$&1s#ex4(G@p9 znPtrhu0={xF+Q;$hHF*L^c^@Ow242|#kgisHF%(ac~LWiT2Zt7%-fg0W17L}5|sE? zq?WiS?<4CCLBt*a+kG&zoajc8!sD8$kD|}%nyG4rD&CZMO|Zd$5H<6Rf=U@oqLZv$ zLTjdG zFmsAQ&HN`*GmS0lvCPkMF(Q*GREi~tf)a$XzYLT@%`xUhO}xuuERn`qXq% zlqiu%K+AMaYgCU+k=PW~u=EUi#5l+KWk!h(@s95VWU8$=A(MlFDN=a1i!}?-lX68E zG9acoNDLhVC0%oR3`E5Oi}aSxnTC)!PVtlGdRbZKZ@M+jGe?ℑEWgoT+l_7d{f{ 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
      )!c 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ð3x2PHKl5>V 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 z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly@PF8+!_Y3u0FL92|Ls3-x>nlKxooYu zmPEvm5g`&WB1FU&L&lI15fL&XL_~&2#27LpM23ingoq502ni7x<%Jt zA|fF}WDH+OKS89oz5g8dz2~{RhvV)8M}PnU0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ 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≈z7`4s!8?o8Zkuk#8$NmQ6luFajJ%)P84ag;iY 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

      ~`}hM(}TNr}~NY)+j@#I|Sb(QilZpfZJ*p_Tyw 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

      B-#U~dRd=56B`Q|eZ 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

      |9$;uSSg;U@v z3x`hPSDmiy=co}LxsCiQmp&yOE@-jv=k02(xebF9%O@M!G* zs^sVlO93Iat|n2th3Cd$h^V#_-C{rX9a_TxY4!LIv_g2GpQB#ysDZdo2oDHxpVAY; zsT5uWeNo*uyjF=TcsU^`R`?!SXGCmpAvDjRu<3kDjVP?4E2jc}@dw?m(?D>uHXQ*1*ID=Jnx13V}*~U(s|jFMA?)HWw+oD=q4}+ zN!f}c+R9n<*lV+*>7STB1^J;B2_@HNvR_@NO;^LLl@!a->CYs`fl zZLg>J;|Yon1m~qEcDUdNf*yaVrQ^)tKZ73gc!h#dN9i$`mIz(~zt-*>B;?_e-`6o3 zm5u6%=7QQk!rMs%=ixA}R{?cC(?-~cI4>r#Wj>f|C?z%Nr9Krhwq469+PN9}CaX_h=?6KfSsM_?kC{PnK+~I530mPq$R|BER(d>AQWGWd;Gfo_ zubk_Lc{9D|y#`5rC<3QcWOJjt1s3yX+%QJ6Rx9H@=78N>vWmHdI&(_EJ9dopDM(od z7bV!^f`2bK#EW#U9x;aUhLdsDR~*8nwuUFc{i095gTvPS3rZn|UzZL(D5t!R8eCvu z_c~S)0qdl(fbr2NgrM;86b7B^9*e9doV}n6zVIhLnDS^a!7cj~;mv?MNm^1NtHn3L zIR@QLi~)ZEUh))&%T}}nh=m_W_<2`tV4&)AC`vA>L+EK9!W`#Vj=OBDz$CCmFb0uI z=>qlvCcV`Y@Dk3C`o};a%jIO1Qa}wz-=K}2frlO}+p*m2@G#dd&^S0WE;vQJv$RGx zyVh$(Y1ZX(Q4MlYL%4$^m2-UD7#xjoEXDQjx$)^{S~;QK?k!zu)nCS@k!A2pHB6=a z{5s((dr_0Lj=Ey-6c^}cB~zCXf^lCml8jPw&FTm}HH+@X)noJMDDbj2_%&!$9hpQ6 z`VPn}t;2FaH`q~A`XjjrYVGlBZOTqN`{1lSxnwEq;zSMF{WW|)_FV9{C<4Q~K!WS3 z!S8S+B3~)9=|8vWcTy(j#7YV66SOYPp5 z);b_mc%St}`-==CfkH5#f?5asOJw||kItb#B}X=vd>zGYXcOAcl`TL5wZGJ1FFGwN zJ8&P;emQx{Qd^`-`izi-{s0b@{lVX+Qu|A8m$1WcAH13nP}+^M%K9CY+8LPxcOWyj zg`r7pwy3Yp!3c#*j4{+?jOp^?{t3;_k-eC>X&{M~$Ho%vI5>P^#5;VHh6n+8P(~0I zES}#1{Oe3z#7LLHvu2ec`2>$?KIAF0U zmxil`_d%rCPiRt>Y(f#iAW#VFe3qB;^~d+nrEB>hRJ>J*w;b`dQoI?(+kEk+!`n0= zTiyVT0F6udQbgp(5~`rViRpeh(%MzdFS%m~j5b=(!`qpg>bEK(xZ$YP0|+Vr+C|7^ z$XT%6tI~Je=T0rfY(aOUEAD0dCFl>PVXGNoNwqd9ZnB+2Nh4K*%~sSbIjg`4c|J+O zW$I1fv(F&~K95GQOavK%9t36o(InWt&Y+-5?mFG&2-$#&47iDBZ`jJ5HU6dj@CV9UK)l zzJxL{0m5S4*paTK`x&ZZcf--#4+TY0W~kvHk%WJb`vt3cts>%D>Utg7ZIP|9x_*Lp zQ5Pzl+C;&}FR{Fev+OB9%R7umJwcJdp;-UgB7T+Mlj~a{2#8v;n@VDx-dQD{@A~iz zuF=I2H)JUH>FlNtC{q;)C&I^bf4@K;#foC0v4l*D4f3amjUzX71L5TE=wt=|H?iIx zfv!#HZ8DB|3g27ct6*QjcF#M!f0j`H$X-s&!##!vA!c|GGu)E_D@{HshI_Io_#BVz zUTBL{qvr^l4miAYtw43xfW{3&s595IdBp(yI#KzPhzTY7L^e!!r4#66f5g&pAtLR;-7*y~y9!P!%&ST(aaf*xh?YP7q_rBuAjyoS|VeGnx zHgpvp2T_=(Q?@|pIV~rzrjp2PSK+tbfQJ&bhi}Chgq8Hgd`jy|)J9)Qe=eyHCs~!_ za1&bk2$b$cTjyudN%nO9&{E`_^JE0-ec0Sg2^1t*znnK}e?$JR_{&4qhQ4i7Sx z9EkUwkQdFDz+tJ%+2cw7U{$`cnwq7#&2!PKYs>IsVU7kz5v1Mz4_G{_n~+khNqCUE zb&GVS7&tGoC}$|lTV&NYTFsZ{d?2Zo+$7w}DI+6bXX>rMI((7NH*~NSeF^jhc!``l zVEh#tZY_cBL8WZoIP0v%d{M&(TX+n~@ZE|F-IW7YQzLwv5_EqBM<)=^dpM)_7DtQH0iirRQ6^*^CF2DB%=gy6mahPrRa}@WmT}-1yjNd(^_6}9)B*TVIU`P z-jpm}9wsq}yWgkm`99S`wbcXUL9H;bpBp0NMSwycgw&K>eL>j zaDRA^pkG%uVztEm@|UjqOs7l2nHr!M?OzW42Xj3L13c$N!`c)ygpG##BWu}bHy|8z zP%26>pP`9=rPT#ckBn(m!_r>=G?Ry`gYR9^l0AoH@KVIrj<7P|hf6A}J5afD(I^9U zd6mZvRhEuvQz3yRp{=FMgPog9P!C)(;F_DYYyllRA!@%&x*4yvOwG_Kjs=PjnB?nW z)xcE;c%}8IL{}TaubXz@XMeaGmQ`!Lj?a@F~%eFhyUZ`27bB;;j?js{N-r=&R=*jXa35yw>G* z?~o>(LsQ1T2j)X7E9{5YFxT$@jzgW^Wc5CLsoMHEK?nc;Y~fbI0KX^FT5j^=2;IV; zAtpsvhKxl4EoH$u=s?0f;ZJn8cgp9uU)o-2XO69k^>cV0hu3lDA|;{CI|M8KCb^$= zm23{o{<>fv{G}RtN`nmDOR6A0>gBl?sh3{+8_}V;X6C{0pIY%N=_CDG>PuWlpg5LB z;Vd{2e#52?19keH2Vp+gl!|)>lp4DU>t0`4$px~xxqLt6{KpK}jA> z*}#EK9RSz47{XlH0I@LG7j(%Dq^xC<^6({9)=S>;Ix|jvl=x=7U`Oq$ zZdZnEqZ6W3tKu-gbB~f+jXQ*)R()X+?z!`pe$HGCkciQttH88)H>#F2JzFD#FpU0# z#`JA!)@EK)owCgjtI};so&S)bfWLL(Z^t_5>*gL3bb&g(S=-O+BN%U2jTrTCXtc9+^&N%j3w|*4Tn*4FYxaF1g6xo`TWd7;XgZ+5IGhr@gacr zGuK6o$b|fu29iKAY|&zj6su{IH1|>jQvzG$!n>_{1G+Y{b~z|U)31zRAK8CmfJbjQ z)|bp%OHVQkP^O5Ry-fJW7MFe%-SImI8u+Xd$#gPJiP0spZi z=b@zZI-)jx`Zfsz%vqnL8a!~2u7^u`T#+vAIBL1E^gUd>&KCX-)ni%3fU9y@9d!vO zOGv#iqysXh;X{+;Y-ViX|3LjROxn78M>TmLzXU~uxn|Z@b#l5s+%YC!{f&qpM+%yd z66Z>r$%|ppS)#h&!A6bbegXyvC)oy^M=fUFPT|f8_^L)F=(p`)Hc-le&sC)<-B4BN z$3PU(qpJQ93DA6{j@np3JjI}FaeiY^vwp5@@t;g`ev_2GQ>kzs(x;!H2+{U(=QsNF zDt{;yD6yzRe%cZTp4F%qO*K+ihD~vRu7Z!b)Y3Niu&B=vLZb7p^hqm($jVt;(YG8S zfpZ!{o=O)8p^2;`5OPzz{wO{)Tv(JGAcK$-ng)bGo(LSjfVcM?Z*To~T6^Ds%7O^sTH2dWolo{V zXlZIBl4TBP(OJ86nj$aJ7Ck@~P z7;YBx!PyN&SbO-ef*1$-Hz>Oig`uPD!L?0ZN#ZhQ$z=mkl580TxQ{{Cw4U> z&aNO+pj^m4=SU!9o&es^OM-LtOc=kd>Fvt=+oE2b-uU-6jNFbmCn64(gAq;A8IJHU1LtVLYwj z<1Y|K|4w|+_zL~uTh89n3GC1>#S3R@p#^xsq9pVPW(Wv{pOMrnBy;RSfMGFpEan$` z(ZTSo0>4zAEwbLKoU#lCMqEF@XR;-L7>4_H3^^KU(ixtA4r%rmq)BrN2@{@=qU5MF zw~{Bsd_n*UdE!yx$5)s?XSLveeBUL3|8e{`3jTLW!~c!c$ZMp>!svYRPoT&CpvTRE z9;y9Ahin0iZ1DO(GXvmvGpCF8R zlgoyG5UpV}zP_hFH?}jLuDL&bCwO~srJL55H$fKanmC;f)3uR@V*Lr|Q#q8QgLn2d z>4J~lg`X+?@e`z<-_z@U6MoVu^bGw>rw_lPpWc+CoWAy>pU3fo@|wcQQlyIT;Q9}a zhvw8-CkbO=@D>+h2<xn=*({*3xICvhIzVNnSe3DOld`kOlHYg9uS)C-0r$y~`6 zcE*sbe&`Z@F;jib7WM|`0wa_7`XFq<;1l>$Zj_gL26T{%2FrT*k8ZRTos*NXq3M08 z##Z!2@WEpQMYF|wn^hmSDEK{THGjj@4?*!(<*3lJ>B^uAq*ax~?A18PAkj*_Xlj#r zcd1cUr(Oy_5Jv(S2X>4aVJC1~dT?}DLvWIT5Ny9qPyX9yU=UQ|_`Sj6odB~4?4aY$ zB2=Ly+lngLGD8P%GM2seqS;MYO3u1hD{-V+{9teXm3ZmD^&Wr^@%jjYsW z7(RG1u2#}tq9x6^hLZYUt)%CpC6U2!doW?`-?*K3Mplcm*n%g)rmV_$*jI-cQH#bJ zqXq9mH@8i4{FRTt{eZzK~A&{&~E z8kWq}pKze_*PoW9mO+hyn|s28%as81(|+W+=Xu}h2#%~)D7#z5RMNWUQ!3ChxD=NF zpJXa&gfNVY{mM40asg^!Ssf0|;OCO_Yg`Z1l>AB>{L>F3c>&vqxN+wYF52mdE{7Di zW>)@X{Z{=&++ma7tUs^cNHGx+laWsmz==V|1w5Z)J*(6)*F?-~b{Ii`j0=3wA3%wr z-@)a|^(76V!T4IRk2eksqNE2w!PiXC903TE7$MQdgZjWhkj7k7+Cf$yzZ4$Lg<(?b zfRYO$q_?4EHiiwYu}gy*{n_}GFvfuI#Wz;dFvRfN2Xh23yngd#wMEG%;#QJC)mZC$ zlQ>bo3Zg!pNYwYI2lJwZo<}L@=lf$sT|wu7HKM)&1G&2>h7UfRQ0CgoSYcw!?K`SL z$k&pIW3E+U7UiG^bWLE1@@CzwQJ*O2XQCjQEfNN9>q0!a;4L>vN>{u3Y7=>DI(vjT z3MqbHPf+{@4Sm4&xAw-*ujuDl`pKuCi@Er@pML!Gvw(h{z>h{BE%m{3kCVn4extYn zi}D3DmutN#4eOzF{#Y3^>fy{AZoR>xSU2J36f67SviltTJvAyN0cVpz`V@qLYko#G z&;~GqR`tgaEewUDav5E!yhFQiIL5TfR&;<)XPy6A!|hId z#lF9@^m7cfm!KpiTRqy?MtZOHbFT9xO|q?MJ=DFVoa3?^=_)XVmO+4oXD{#j^dZhV z#rn;Q7L^2G(*>;_6(K3REndeavPlkZCB=?&y%7dFxq#~^I5!lQRB3P)fflKB=#R_h zcPL-UYN#`V*25;9H?z7D2vWIb6J{=DXo`0=H7&R>2pB=GXxnW_iHmCCTpmEmMO;S> zY^=4bubZi)%lHm+K~iZRB-;1#KCmcsaFNgn#k%}gU?I~cTON}YISsP5a@rs2=8=s` zqyLm~nCJCQb5DOq{ihBcf2bc2=>Pc9sZZ#n`?40{LaGZ&0}K-+k93nil!jv%(tR1f zfYFU#^8B>3{}^KYNH|Xk6r8aD#nAMkY{_HGLMEQt@C&vkP(UWF{t&L7JvNc$U;&ax##84gG(ur8Z zBJ%K2C3V*|2BHn=5d}QkGp#2o$suzmN{?1by(oZINw<4my+iUm3d=32x6LArv#D>G z;NlIE1g?k(zIuoT-?P5a>NEXKG#af3Nzl4{nJq{mosieMmh_&A4;PK<>8e?G8B`m8 zL-%1jGgQgXyp@&(8FIlN!QAyU+7d>wcgiYK*ImIalr{u3n0M28gErL1z(Ak(ICUDge%m&jxvjOKX1MEL{q9 z|FZ$Ovcu3D3rV%WhcGlFj+M|SPLo(+udG!5n4D^Wle=tOF4v6Yh1vTM*u%eAQq%a; zo|-`)P(X791!@t%{OU7eBe}WcFS4_Axvsd^70RTdHbx6a)@J`SHlt<~0`RLh!+(Uw zNNhHw3rD$(`!}%Tew)zOe3}8rbB%kM9alTRa?vN7D@#HUf!A7;Z@}iz9d@tPBX}Gr zfm~}4B{)l0rM}jQ%veG-oP2~l3lNv;nCpiSCZ}Ka(Je{x`x8ki&Oyft}FRFq9m84-JoD=q8S#TEb9tJ*44hJSMsSX81wFvF&hm z{1}1@Xm%IFEA5r`@iQ7z{C_X}a8Gr>PY?`;m< z6z6Fx$tj-MxQcXgE-oMyk)tRw`eLCMF7@eb)=?IlV$U@+23QRll4oEs0iC&n}Tb#VC!9Eg$cS3``tI}?g!zu$KhR&7@1|C z#oOI!QG8?vD&aJJ<9_GRel@TLg{1GZFv~eu31*ov0+9L zU<)r{nDDD`2U(TP2qZB#@dtht?!0?Q>rwD^Xb=X8g?&(GE7}(9u?K>6%f*ZpCw_2s z?yK2Y%ofVY@a$l2VsCqq30H(Z2&Zq%IU6r@T7Ivsal1p0i`LG|&V$LtMzVLv_85AS znh2H%r)|y)$?UBk6VviqYv4~zmmFv2G=E}Q-0iX_qbEI^J@%g1;J0^+Ab`tZGrHl4 z^>wAeWi|tJW#ODs*b&ES9_oCj3Xl1@gfuIx8c5G*9pKW0fyI3jw~`P zw(IL7^#q}$X7rScYEebUKq#+(686X`m;bw zo?RW%K{nwHvsp=i5cCV5-MoYStkPzVuwVG?=A9DzSv9cj+O2f~KN@4nInUhd&?7K) zgZ2P74%>6gA$+@C%%kJ&iTNfOYz~Y$HN-xU9^OiXVHbQ6z7mM@Eu5G6zVY4A_4c z89GKYSW7vDO3e)m2WC15c%$V>Zn z?=alc{Z5;6lU|Bc*!3ai`U!G4OhkDdW zf1Zr_B7G;PMKCNg$ct@v*0(#BGTkxY{7JaIx#Y{x%^WKiormjTR0HfmpA!Q1a1Gcd zO(XO4D+bu>yc{LE8RRqCw7HvL}ob@mrrp4 zimRu%VH7t8h_a+L;5Q=;sIjo82|;Xz>p8!thHYMs88YQk)rz9E7DjOjzpJ!c=^86rHvgU4Vy1 zhY44+pS3y9V^vn#4X({F)J(8y*)2B)&Q<8?oK{I-epa>&$8o09eX}}xvS^IMe4e>J z#jFA2B)uIJ04kOBHIJy{^m?&Bg5i8?q%Vdv3h3s^$i|SnwJ#0qY&`}x`ttz#a~4X7 z!8M(VEAl%q=!&5F`^ILfvN@Z3vU$TvIHbV_2tzNy>?oFH2(mbeLbf8T^r8GK0(}PT zCV1`+K{*FU>1ffs0g$^bCOE_1C^zn)CiSJVhQr8|Uk)B3USP*K><6DHYYZLqHQR!D z6|i|`xEI3smH4m5;e*nZ z4)eB>{~dY)^~YNL2wogTdw?X|lZ&Gp4%3$ohjP|ITnn66 zU+FO6*JsmLg&&Etk8-Pdy~IXumCRrAM;_K))|C%=GV*N1!7H%-gMk}OEwr-1vR965 zwV5y5lmK&8L9iekqAeMBkD#B2*_y08{0!+QsfHUYrY7l3VP7+mPGK^gK&SIL zd#_8N)tgY5O`QQ+g`pVbvC3KZ6;=CiXLU{5xxPeZ}0TFvJkf!FAzZ z^B|Vht=TVGQDN%BGX6nQv?t8$83w!BAB+IDd?wt@46ayOK1$7az-Hb^ z^SPMf9p*4lgJFp%zvMc=+&iItvgBa!Kn8Pf#tV?_P|nz#hcLrGi79H2Hbp60`SiXI z*e_$Q=LjIvd33=j^~G-aqX;i_n3a#(5{y@zx}H*wIWrq*ED6A#l+a@7Nw}D9?rQ~!)yerrhdK*aXh7^L2_!HFp^qxC^!%1|NCozu4g5K-=OzA}+_Q;4pUM7~5d9({ zy1AZ5S+XhY=V5#HC4}pEcwBZ9!aJt1nV)0EoEgARVZZeVZKK!i{B_$j_G9Rznu63r zFZK|1T6!9I0U13-IXyG@b8=6v2`hLeTYT;hSr8zw<`DmE$<83iGSKhPkWm}PWv3+q z@CC2&xCV*_00`{I#{j_QIEm!goa=%76A(E<7ct>rso8C`IwTvO6C5TSYIA^i>(HgC zG7f5hL#qZ{ZHT!U-}H5$iey zI;aJwpP9zyj9*1jSb^Vyi0X=q}0-zhHLal82Cj2ySM&TEr#k}x2 zzFla-+w=%UokvM^h=wY2j-!n7k=FFWSEyynQ4Tp?XPo1~DnuUPA<)2dqS@2P`5nUF z;CYbBJcYV09HY>73hki!_fY6dq}syk;nlMXd`E^L;P%@H6lQ;o`bcqGn9avRHkwSO z7iJ^l9FYuEnH|F0`y3OfW*>4+`;w~JL?JX|njeAbDLt{H1<(t1P;X2-!b2eSAK||+ zn>VyDyOCnEIjLu#;1F!*zo!7}PUQLmPvB=74cuuJRO-;sey!AMiaWuJMe-kQn8pTm zT;D+1jV0yu4SNq3N?MC_^eaQ>m%6}VC zG#Wps<3?b6x*z|JRrJBQg%$$0VA$d4*c?MPq(Y9ii7>pMbB=gc`i(c{1Y1_@^QDe+kz?D$IzATi5xk;?r(3Z$9d&)mP`!K=*l zG=SlEnwIwovpql%Q@u9Nqe&^xV0$e(-`mA}KTgc|lau*u_DnLm?Wa31B=+q_n?c4u zC62fcu}z~USuvRaUgR*^LdS(_1M3cBA+@0cB?C^b9WG>ooO~jz>UqfE95?Gi4NhC2N5VcyAHf#Xzc zAT*N~N!XE{>uA`6ydkEz+*})9SYW{f48EO#`IjbH+LtProSlZD+K&_#I4nXj&vZ1P z{{9`nXNhYS7&;;Z9st>*BeFn9KyX|~Ix|y-*K3s%*qr{UbUe~^JD_#wLmUasU>6!z zou%cv;?eEkl@BPw=}$@gnBM!32fz>6zRwBY(eVXV--Lx_X*Xg`iCF(rIF9wAGqDQ) z{%(9ap}r^DN0sl?-KZZtrfv%aulMajNU&oHIC>xa;WgCQY zrP;1JaK(EyZfIA0!8i6}9ZSB3VDW&nf)V>&SQIn{H&t+B2=cU1DHo0Zn!Bu_BUB1> z%9Z#Aqk^ZAM)8$WE&3NtDS?U51lLRkS`@a!YxI$`_6~>aYu7l)Whx_lhHn z|F_*%1cEsreH;mWlvmi&ZAB*^S-fC>Fxq~u4l%FAzm<$9^89{Ycf4y$uSO3?!sau0IoK^SAFsFL{Tu*oSQJ5Rc z{_umczqz-5|J-Ie{xvJ*Qy8A?Ixj`)xli3B91<$ThG@+R?YsGJgZp@f)?2IVZ^U8tWnJeCjw38GU(9*P#J z5e@wA1u`K_>cSS5*X4h1H-TpJ>e!ma0(Q#C0Y&1MA^s1_S;i@k;4UCM6kv6fcLsUD zmGLn}1Ea72!ZY4E{K#8az&r3uHi__2s3YO~UjE}_leSZPeY`al@bomXnFsfy*`IKr z5d|svZ3ko zFGI!yj2v}(HuVfMt!|(Xw7#lAlSF$tB9ho7lDrce6lRlP*-?1!5>9PI2LS@Uion@U zosPMxP}gM`wzeqQc9u7AF~TCnpsqWqdAuYWrk}BUzjlo=7sO#a}EgG|r<@Mf$Fq`-}Pt5x&+8Ce>bc~u7w`|0LD3vUZHUh(f zXuMS;E;G}*rv)xV5Ad$jqsn4lm@b`#3lNO4{x*ui;ldL zS}zUi3eh6gPiuE^Y64!-SG-Z^p^57W0lQEcR@j9F*yUZu+XM)pF?qR?2sa;7(dYVoA0`+pxq6A6gSqRHofH-jjn_35=Bp5LUf5S_uKn5CCb!=)w zlzLGk+K3Jl6e}vxnjh=NXtC4|brqqJNV5iQ*+6Zf3+$BBnc#rw-!Im;7O=?SrUN0{mT zGQuj_PEhc^OJWnD+sg~Fshq_ofaYhDYS_e0a4j{M*M{{~o*%S^2ZB`_bu8~);v8T; zU$eY-_;|IjLA?%lx3H>%xk$yT>WF`yL{kR!I!VzXMANYAwaJcbn^4q6iDiL!24&!a zq`WO?=b&C&?BHH3tDa&HVjv=i716u@!prd=Moca1vXS00_TYQfp8HVC77OdLMUYjm zn!iv%8MX9rH!;Fq706X}?mkx4a0s2rhd6Ll#c`BKKv9kzB`e-Zf-c=0cbz`mJPcDh zd@l9=0$r2W<>gIyObwtpoMZuspMzV`opoBaIiJ$zonckqVRyf(Di^Smc4APk({|Qr z!R8!%M$YdnEb9z!&pCjc2NZXyuuyg*&kmi&pk8PGLilJ%wz8^i_pweZHtX<>K74T) zC2v23d>I;Vkxd7raRpKNY`PLSofId4XmKzCNP16@H~-s?Efy$7|ux49mv z&>h5bGrmH19H%~FU4ks{Acy%V2jK{j=Ad5Z38Vh|ka5Lk@~48g>O-uPYjZx;g-9cR zF5BFIanCv}-WdQ^CrRUx8w0)#hd)$vBfLM|tJ?}n&7ms@ae&JndA|A>5wYNjU z`zwT79kavZ&m>B|R+rRCpWF#cU&TEc5!LQz@Vj3BI|$A12*Hv5iNV)A+eZS#QX+tOX~6FfcZ?d+k#F+DqXc()r?}O4y+XKLqEfl-8O-OF4R@@DE4(8)xEn$y2ns8u)aD<)PW>U7i%OUi-3BnkBk~*NL#f)r%NO=}ZC9Ho8_p&FppJja^B&;zE;7+#s`Y4>wo`6=SZw*93=p`oZW_h%sHSyqC zHsLT>35E9}{3QYtVEfXk`>(W=Uur3jL{qYfU-5)U^Go>R`U3w|h=85U#I1PNpoC5t zzl2c(yuCB`I4}S&ZzJ}-ofWhr1{)avu)!Ry%>6CcNT?r>mAL%I`c}goIW+|C?CQI5 z-0}6Vz?i_Iz#+2(ah#I?9Zj_5#Q7=?J`myrzN*^A7f@87p-W)#I=%Pfw zzCL_mYY4ciYJo2U@JWt)qpS{UICV9RJdhU+J0dnvnY5Nh5|Bt--mVTj@o7Ju^f(N? zzFvdCxX9`Na1uQFH1|9Vwv7Ve!BmulGXlUj6-Kvcs_Kl^<-yAC9h5f~&m|~s?3m!M z6ASWk?E{snaM~LEyv3prG@nSb!LW;zD zDDh(Vds^ZJZsHuGw#f+bk{7t2Mi7ZC2IalIn}O`*W!)kq@*pdZ|C9wU~Q3H=tZ<$^i_X zF?jC6;29HHO_O49-(-y!C~kU>vV_bXwpRMzQ|Z7iZQI_#ZcpdY4Kv{y-hKou-3(F z_(T-5?n7S81S-b=B%tvw5s<9UL9dd?0@P^8#wL-vnHrh$KlUN@m% zslqW9=!#b%9H}txW$*y6aIKT1)Je{|WXZf2R&2};r`$`3{H*ZuC7H3pao`mBV@c5* zG;2xD3QCSoC_{i!n+g~lH3~fbKKv^#ev!ShcOCERTJLJ=O3+?Ca@)P@g8cD5^(59x zDYsW+j{(y~U-8VmS3J8663-sP#k2P#;yLuKbv*q*ddCSEt@m`I{VJ=Bt`-}FWr*1_*2*RcwLIR?D zm^|Y`1Q2hWqKVdV!vBN)m;!SQ*zo3*+(A6E3^;#YDXEi(>O{dJ5!cfhZjE-6M(v<# z%8O2=ZsH_OwmOI*lCEKsNO50K!6pSnf7P?Ru;?ssp@|jI&dR%p{zAlMHn~ys**9#$ z1~%av>Ms04XFs8mP2LD<9*M0?-fPf)Ov3(r)z}gTI-^Io@ z5P@+$VILx^@V_-ixgcU~P%q;|OYJ5imS_R!&xz9R--vdrFlk%7e1?QyFSgK)dH7GA zEP3buHV2^{hi`m`rcudR&1fMA+W{FMX!PY=Y7jYX4ZPg~6l@31eJ1kS;_XY9$2jI`ws%&xK5DQLXC|~eP zgNAEG{c}C~PP_{qeNDf|#<7~2_82C5g?keqBUReVe@GVYeCg_-WAFrlt2?a9>EP^x znDi=Pw@?;*7vN*3c}3@VL+^kUYfFE={QjW1@g&7x1t0z`njJfS!`lyD)tmOW^D^(o zV@hTGv%n7t#(pkX?=WKSNld`=L%>f7(|w|jL8QY{!jG+B=W=zE# zH;r|vnNk^jCmp;N6$c0NJAH4HKhIB>bCrQ~`F82rEFgw~{hrLzeU^f7@QxKGEu?@> zTIVL_I;abT`E>C{S zzx5vU6%~pl*~BmDKFvE2sCVxxfleNMM*>CXj?gaQ@lYCS%BaW;zkxC!UUcp%)J_wy zu{Wq!rI9D0EcCh!09AxX1D=vQDJiLE*aXbbou}f|(S$=N0vao^^r}bN^&U zM|Qp`>q_nq-Veg(_bmTS=EwO4rvEe_HWHC82aWmMV1^+cspNp&ZlqIzN0@fnq0gH+;{Gm>uNN>vXEN)n%@|#h>eHvud z3S%-{na9_z)L^{foLWhJuzX5qG$gZt=M(lZ>2N|pu;C`Ulgpy~bS!T9i4@;n_Moo# z*@AtE!*`gj?EfS0UBII%?#J(hBwT}MK}1B5fS?INBq~Y-Gz+`1tBIfz2}%HqP_6P4 zVFR&>1UF!g+eNIk)moKaf3~(3wIZTI5|9lSApt}{g@B41LNVM!z~uk=&YZKm0rAql z&-?zL=Y?l;X6DS9neTOGzVn@#M|;GBy}RNIj@8}-7X7Kn%_m^%eAUuW_zGq;{-NPN zQ}e@Vp`=d-~?Z~{xl`eo~DqobW~H($rRtw zqLcj#?t0Q#Momq@TiK0J)X-+u_}T)Rk!m;N7ivNk3jc|2(m(WW)r^Uuq}*sTp1i|u z#^Y43n-PAQW(;C)k#cad%btC42BWaG!A>s($KT4j=qR>Wg?L%i(00aG;u)CWF>f&b zxjoW&OTP*BQZ0S94;+nq+?{d9lMyVuER>?;3uSn(KQoB7abFC|wY#J-dM+CDy z5NWIsiSPHx(b_+A25)5;w5OH7q1DW`QcO3BslCx9J_|vVk*_gJ=_jz#CO5Nl&DZXt*t5z1BlJ>8W_8+|D#5NAXZrW(p$)In7 zb7FKn;Jo8@8tySq72PnQ;1W3^h6C};UDCJI41qnO*p>UvpGlS2&|o zbw!H#R48WrA^5>x^T`|K@UdBPV5iy0dID~bwe4A-p+fGYEMDuoi|NNLsHVO?ww0dm zENbdqkVx`l#hZO@V(Grk&OsmhKCB%ikpj2Xl;5JgXv!s&1iuwM(iG>*wO-BT70GZ? zST!u#$&j@e5HLn+cye_iJB+36GD@lQBR+EtI_ayfT~B;7V~JY2wb~VWyaPP;{{KN< zlgk8iD+H)-Wbkt-lz-?_MR_&Lg7Wt=yYLU~vsfvg6d3`@C4l(*6U->h;o`dDw+YVw z#3=qJPfpocLU`c}!l=SvVirBlD|)ognQeHaa@=>uW`vgiO||z#$pidNYcVlyWJFx* zHZfTZd)Z&#l??$dIZ(KI-pOh}=5EQ>WgN-8)>+gr5y*I?*lCA2Y2NE!^^NQr<j5AWy0pzKaT1I)lHo5}d~H&6!)A z#;-ykh7EG1zI?P_aP-T;ylQ^~`L|v>x{lsv}}N-@!VnZLqveS0dF z`wW){Q8vf0-S~&TK`C*Ci7@V+p`<@Vi~RT&yU0xxq75wU+77 z1(OWv&0r^INr9n736-7XieF=9AXI~5=8;iUN9GTfe&k*hQ9zTxxQRd_u-r z4lwie^w+oWorn8#!3fz-{zMCIz98UwBEGD;b!}2cDcuY4Ay3TPBPN1A{NmbFw5h+Z zLaMy4)T*&f*?ncI!t#v6>ZrAh%KJ+1UspR{4rObfQFh$$E_Wd~GU&3R00?j# zUkb*Y%VfEMg=jh%K=+6j9=pY^?H$zw9zRV#$hY zejHMWQ9$VW+*647MYg6HBLnmpE*Rz8YISiuc#!Ise_ii)|yULB=&tDGS zL~qs7xoj&WxF|01DsHvs%oxkeXq4;fO`x5CIZs*|h+g=X-e5Jfzxt7K+ zs}wmK7D9uybT0oZ5tlK%(iy+m8Go1$hPO~%ddo<;s2<5_3_BFRMwdC9t6S;yTQ0Y% zt_&8wtZFxgRmGP}DJzC22B%YHV@xrTJkfHJT*17TgN3SXR8Zk8IwcjYjW3Ho1c}S` zwl>}tt9f~w$~G08br9DS#gFPAv$;7`AqfP5rxWZ?H-fjm9DGRC?OZNcvH>|PP`qp5 z=SciU4a+U@lK)}dgk^#s=So44+Za|aAG{+7B689hzsbpwsC2e1g15#(zd88O%K|A4 z-x4pEuSlK*s|hPD6g5OMo#NP2{AriUbwg6lGAm0t4Urm+VXNXR%Boc{N$0LgfyJSy zOsYxQm?SnCP!IT*1-T1w8}&^=;++MvhgajuJ!U z_uF5MikB~w&+*#7m#=QSE;wv}zkve9^t{;^R#`HtMakF%`LGio20hmWN9!8P>6E3y zQHhMP4QJ4Koipeiz}Y=~%;7er#;`IuqOx1?*6WJa4q)d%T-;*yhEl6aMkbYvZOK82 ze3-?D9zGN>tPe{@wpuf?bzH12u;o+A1RsJ3hu|hrwfm-K?XHq`UuYpBrp17yUX6`G z#J9cXstf~og0~J((5%zYlpXBk=k(@Vt_$8Vz~4w?H!BRRD;b%fkZ?{|lGcoDDX>`f zw#P;$23iG1C96g0<)YV&obrt099`f+rJ>B`|NSgw#sPm^9^}Ct9!*xj`?9@o4~i{T zkF}|6jxfbP0jy*8_%W(a-_g~cw6v+-*J0!wV(Q|lv$mCFuj6hAPlYIieQ@YDQJl>b zf>pkP!z!?htE_>eJTN=4S(%3eb6aaoZe(wgV%J5A1&o+dqspK0lC+nZw{$zk+pQw1 zsM&nRtZxn+^n67`l+__SONRhox2GZzA(sDN^Qxi z4KyFS<=9dUg`@upQYi|*w0^7A1*7>G_2iOKl>`DhvtlV9;o}xb-bx%p;6%2KiyK?N zBj;{JEcvwkOWIOYA^146Emxh@me@*#7_pUZK~pwEyVWm6YqaIdk>pVIor(W)Qi0%{ z_@}~=f_xj-mET*V@TZOM-?6fNHjKCEI?s*od~CQ8#GVVrSou|gmR}>INTpA-RH@++ zqa$1B>KGTx0nMH|Y~i~sfzGL%Pp|HQJ^F4|?j%cSv$eF8U4{$dgzfWD`<_w>N-l9r zoKRtm{lZB9eCA{GSs3+(Na{B9@S}M+zhgoMFE8C}% z_s3%u-$@kXRO*S^zAO}r*LiA)4RR7ZDi-Wc%0s+Pf^Aerf*fmcea~GiaHwL!6w{f8 zIWG9(18FBxkpH}s^u?gW1uZ2a|UquPnwHR}f7C6(61bc6e0UTL5tQHiK~;b&+t zZW~FsM*q-mkUr=N@OYEplAo-0+|MtTzd_*GME;CwO}AvEm(P5V$dzzw|C?09=$oax z>dS9DjdFA!&emi2ho~rKdd?#RLGw7I9*r@co_XA!D7Nw398bS7j%DTcvZFRek!)f2 zk8mq)4D6>7Zmkk-rN=uU*she#L9A(kZGxz&GQsv%R`VqYw~~<{eLY)IP$a6D?SgF@ z=4k&ynY0s*$lt3weUyize-5puH5RwZ+iFnDE4#zZr$16-fDb`+)j7Hx@al}g=PbhW z_zAz-`ho$a8OpDzVXeK{_$WqSFqBG=JRgupjaQUr-!t<;-H%O3ssIG7FPiatnOa}| zLHs@lz{;S2&F}xyoC1p9M>NwHg3a{~)C0QUzhU}(tDqOa%SwLh_!dgP09Zi*y_xc52b4oX+!gE+SHxAC@N*;eBySo4wjQP-_%*>= z&4if*@$Da9!BduVA8d{SVc^=4779eybyN%`EA2{49E5_Krgkqzf1LPw6g0;ID}aq1~I~bl(1x=J3;-9}*$tEFLz!3H&=m2zQ`51#)^L z!2L)dmyQXc6UaYPeSDQbPDTWuJ+`_xSHYTGi=ItR;0|1*tU9 zQhD-LM*h6ARUTvTdpv)&c*A|NXJ z$mH1hjd{|nkCd;QFY51tMY?>#eRt_XDOeibw_0emO2DAal=SXwL< zurX)#t&qjJh3}-v%G|oc-~;%1zutnEyW0H%Xj(3T+U#PP5GmY$0FwuR%dxGh{+_eL;`${h= zY_-Km2dm={+&xE(a^YA<_j}$&s>XaeyPaT&0T6=$4r5^tC&=ntZKPL|ssCVA+<5vU ziYnh4Z;aV*i+IGb^uqkT*D;W+vgN1sM&!c7An zpTN63dcyX*pP}-x>ktzpijt2|@@<R5*`;!~_P#f}HN8IPKh}>I+n;|9XsUJb)Gm#P% zU(LVYqu-tfRtrr(M!)^+tsjP>8&vV%g`#RT0Ly3Q0$s*qo|8$bqkkLSE;am#SK&N{ zKNCP%-d0Z3*c%iSF;V%q)^FdS-@a1%je%WW9XT1ob*2Y*To9nCK!_IXhaXd^iFc)R z>-|vjr3C5l`_-E*#W-xXAdaMC-XvdhT^O;CHtUaL_-(YV=0D-L?*IB>$UH>8|40bm zQy*#}{Fe$h@2xNfJ zxo6nx&xNlP-KPHpU;lpNhvBR2&F{n4IhgMk>cer0`HEGz8S_mEd=K+6j@Kn9rqj%* zcuodV!f^DNoq=41>q=UcjEXNA+ajxEcEZ{H&-cjh4sbz1g2o>szkg#f`G=^u$5iqE zf&6-PyA%qYD%=c(y`KDD6mFr3K-Pezw;vwfBGBNFh>b*;ErP`Du98-+lJiPhlw73d z658KL>;ku+HNO3eD)@(tZ;O`*mcD0vdzUKi$D^qIWg0-harD1Lh4UE7OxUAUT>GXH zK@sCyhHx^zJsLZ{&10lI0cGiE|99F5W*GA_=~o(!0dl|fCRWxmv!!MYEPyDqbBuq_ z!p{O#;t#>kJ^%ax_!+E<`w#HbQbVTj(@0I=B^E!spZFg9INC2#UuoQEe2r7cv9Pio z$vdy4t74cUX8C%(`t0#;fhy*QjCXH;?FS&FuPW|8K*%vlr|AkI|5o8<2-&#cdk~@- z<`G@Ww=;~GmPDCoj`_Cnu*}ZSm=ENt5`PGOuKvdlz)xFM+<$t#hJIrV-! zf#Oo5M9fnD>bd$1M6)Gl-Ui!`f8vU`%*3Z>cMX=rrD9?|*~FIR8Ogl)32z1`K0PDZ zDtVa{?+IRT3+d4j&+vzzEIMxSrKQi^HXgfwstdYXRn7I(szQ+AB@Ea zr?>|j09bs-)&Q!2ylbO?`~syYAKa&+#jU>FF77=F(Jpbl2$|b$cd=Chb#>9n(trbp;>1(P~8^Nhy_Rx;NsT{-zd>J_h>6^o}>H zz#ph9_`QGcjb+s>+f@1+TNuA7Cr`qRI|jzSM6EuGJWR>~hx2rnlV3cqE?hnm*926IkPR^sf#PJB*JY|r4j&iX{-srSf- zV?y!2c;c^YJoPF8|4BIOF#=}AiAuIzE~hC?&a`!MA!mZ`LR>S8_TE^uuBfC_OH5WR zJxvvOgLCp{L&A)kv2Wp@UbN@NqP0cbmQ9!(Ry4b1lZq!t;<$P8zGEc*4dr#=?1IyH z3orAOHKhR5UyJ3kuJ$kTcrw{IUgb<#>uQ@U{Wdm5Mm`EZN}gmtob2N;iaX$!i`%KV zq~{Q1H9*OOcF+auzB@!1T)cWmFlDaen2=m5$V_|&F?ddi!6{n|y5Gf{!HLhzNQ&@3 z31{=a)7(gf3qPeq+%tpi6UoJKragJkmZ*PwW}Ojyn@q0wI%iYJJd(DG^Sp^?PZqaA zx!SU5Z>iPPh9X~O@!CSKQ;D+6-093retLHI;PWv}G-&)XKTS-2W=3o9|Bgs$wz=81 z#}00*<65V zPHJ_A5?$xNS~=ep*&&1Ri!cH1q($xko zIn}~x{AP{+RKkqO5}B3HhxfEB7l2ZwyEM2TX!)$u$r{mk!YJMj`tHrqm8; z#yd*ybe1&HJI4I2EL}U7w0cJ&u(8FXuNq4y#+y5B%)KSAQ^Xgo)c?8CKHL2#Mf><0 z6K0GhIO{gG60Sj47!%MR`O@FJr+;nGd!{uDIu+ew*0J#lERp0duZjhqLFW~7Px_LU7ExZ{I`hw}? zNjj$T?6C42s*pUdNuGyq#s8Urh5e6v+SuQ8zm5HYglhYSk{*d>TN26kN+jEPgs9KA z$RqChBL7?omm_LnF?8UKQT!VM>iX=t>g`&&b=xR@fK+G59cOi-7b-=qPB2Dgc+C6? z-vp3Uav$GV9cXSG*OCX@cP&D7bef0ic=C)MG=(>VJI$NX-Y$2!?n0B=@xtKgrL8xLU#C^x$%pKE z;GIs_nU%fu3Cu%^d~1t07v^d;;xu#N;$7(0yQv|w(~{ZUf{#b~ml^1jqSTP)kDryC^yu|E(%`N4LMVtTw0T)U)2vm6l5i- zxiXOp_}utgUxzX&?Oi$q&TgYr$yR{ciudG=WqVO2bj7DyWEsB+i7FYdRLLFcGgJwm zt)z}P`Bu&wY4%Zq{s_rXdZZ_%`mV#*lW#;$<(ub4iR_bl+8oYk$|{C;LL}8>(=-{h z92Pb51!}|*(#)Q^Mi}|aX)v;3W|AwE^brvPqDtEKu$j5VeKs@Sdv97?O)?p5iiM=| zxSEsl3HM}~gK9n}C_Jb}G@@JdkfyJsMRbcE({z?Jty|vKx>mS2G|Ub? zsA21y(lB!LTcv0i;M~cWMj>X-)`S_kGQb(l+fgmdiWpqpB^qOo%D)a>WaUQ}i=s)9 z{0S<*jmIlu@@F)?Lp$OWGRx63xcsk$l?&Q&^PD%Hi)2pMCVS6J%f)9_HkT5_D54+jS^TAY$d366H{?au)N%Mq;PnWuQDmZygvf>I# z;-js&f{}QZ6;}`vr)u@Rf{%EL6<5#^cUW-+n@6*1X!sy$;>tK)hBNM=9p>;X@_HnJ z=X81MswG($8BFTVH{?u3%klw-R1lgFb`4*|JNAA>CUC$;;R^YMCdu=AMb0g&HKAkV)yaW_&B{0cOQPh=`(RPZWucTzzDT>090&uz< zMPo@xu~QV4CB85uC2b*M;jwjB8;^0IMa|tb(d|K0O&-MdhTPLteId66tb39bw?K7|w&E6`?kp>A zf$64tfzoXO=}xiY7Km<#6}JF%OH@>_Vr6gO2Dwb4!P#_2Yp?0f$}#77_)X`%)SKlE zwDbmUkyj~RGbhy>7~vpnv9Aq@+Rq)!pL$DGgg?JJpzyY>RO9X7O2ON!Kc(R^Olng6 z`EQ-)4J*$&mFEe`BmDUY0Sm87y4ZMq1>w+h;`0aze~yV}Gb7pNMY4T$xA13^@Fzo# z2!H-b*ir^dFG%1!`18K}|NHp!qw!Jx+)}IX{6FAM_;bMu!SnE`;LtEvLd{Up)kG{j z-g}{q$4Q{&+xT-C;`sk1e+r+%i|}LtJPDU5of%=e=zv|%hdJ-VT+enskIDV3WnmEq zIi#f{sGv9EhB&o#_*S}2wG}w}`L~Ssz2*i=YPNm0qSKXPr|JMw1-WVO3v&0}Bgidz zSz0PQwOR!jZr{szASb?HQchq_*8ES*{0+W=<_>Qlf4aK9t&ZN`f0B)zU#R>Tvt$gU z?mOO*-Seb3Z4(Cr*Hn|{4dmo`<2T(LbPZ7lj-J@*>B${QmDy?a7{R#8d-YAhYcjYZ z);qXhy75H4E-%|~H*nRUH=a{+3i4`JkQz$5j<#B~f8YX}_V=LPv<$7App>^Ue+VN_ zlwAwp)f2}{098P~_B{dl$YjM&PcqmHC4ElBDzi(ZOh=^5S(I6mPfptEyT}59OPzOk zdX{k=H9&aHO^k|4<&q#S$76(^w$Wn@-{u{hn>Q;R5V%a#YvxbK5@wuFI@Vgp9Bs;*$~~D|JjSq{-oTs` zZ=fIx&Tpzh5{%*}grUq32=%BJnRQ&CRq5*{Hvka`4^&X-ubfS}10<1*(>-a2eTFA( zi#Ir=M|ON;xV_|qDk7YLoDG7DAVoK4?WLqBJFVzh?yAn|$^F4!317b1JB-})#oPEGGYZ#_SnU!XHd#>ga5jXRzn)?~tXO!05 z!y~Fbtnu0Hp3DLX15-Id|kk=vGit+Ojuvy;ctbvX|1PeV?nLQ-vn^Kl2(M6i$a-* zKPEQCt4opxu$B4hrjqOdT-B3(bt8dB34BA~8ws2ya9RSV2%M5Y0|D;$$-ep|fs-26 zHTB-ilLi0a=2=hLshU2b%(zp_U(J=fS=DmMntdxgM|JK^;41J*GYjF7Dhm=0IPeC& z)n2-$vf3o>yLMyI6onvC^JnOpleWbZ%6`xVfE%Dd!$8}vLB!PEVHF7!JiCr~!32&rTal94yawN7Sb4!QOA+Z%7v~uu$ z%M?i(z^AQJByE7CWl7p-Nz0P7(ULYv(xyw=BuS&+4HrT4(*>{OaJB$<&zExd{LUyx z!GC;JM|)e!M|CtBJ}Kqy`SOAtRouK=&&|8_8siC^m?CC~}dXxfQ zHpN@``yuet#w_3he>ENW9>ctUPmdVcGUhKv8`QkbpN!)IdN-+@8!tIlJnaNd)zyY$ z6wrG4IZ+YxXX|q^xx4yL3Q+Wk1!z$OP_dNLVLwX-09J)%?wD!F&CQexk{*{67b4(# z0e7RP>>%KB8cCf77rvRKz+DqLUmyGrrZL%rX-W1V{03K$mVWUe!c{|F#l#hVix z#$C8Vq*lKE9Cxuc${pfA8tAsr?DiBilZ6g%=GuaTUasg(3whGkh>Dsqsre_1bpF8j zg^A|)rxJO#=GmHOGS6h54xSF4op^TQ*@b5pp51tMgQn=H(rRz!x`MZKEgnSEDDDi* zPonu?x_DHT#FPpo4m--&=}DyvYyM3zg9}fuk#3D%tkl=(+feLDtMjBCQFwS!@@YI^ zFI0-_(x^TP+6?lxH2!I-Uo39^e_~8Rq!~&o6jZ^Q?x>^oMIwyqOIJZ|YVG27Fzfytzq~DDeA| zpS-!T#M3CS7bLK>|K!czlz6^TYy4`x78|#Z9q1l*%7+qLfh)O7uHbS{VAS;5K6KyD z>{gSF_&0U;ebF1zeQz5__g&aNpF>7QanoLQD;z~bN$-;?1<;otZfp1D`^Q*)d4A0( zg0Tz}slT68>G1?ccA-2Ehq!s~9>c{La^&>TNC!o;?V2{F>o!fJEi%lT z|GKnkm}=9N`KvTAo&c?4j^MdsY@U>rvDrVQ6{WeWJm%OuK-Hy%l3GPuJtWfVYoe`w z{&um=6iIfm*9pFQc|s%eB!MQ=+>z6XPg3#F$b02kE9RQFcPY$;Xq~ij_Y!I4@A3q5 zEd*T)30mk{)y78GyVRzJKKV5%1Y^;q_j^eFJv@QgS#oCCK>yr9a;jcnZBU*WfXyqd!mERDp{ExS#>HVmjo}>>=qCT}4a*ZyzjuHi| z)~e(W#tK;d#42%#~rJ3Py4w&Zay>8Z8eP*RYOECiId zwh^$LiuKqpg%AZ6{1b3$K2x}S#H#d}e+n)~t4fp9G%u8NW3)71q_hX@($u7Ix(-8@ZrltN!tlnjcy;QCdsZQd_Pri&}ZZn zxmW@!{!zAGU$nk^?fPD(9zp2auL*2EyS{s)^}X22M$)s?qLFlJ^bfAjqu{&TuJ1~# zzLBcFM7zHF+z5RABlY!()ED@^`oun@&wmtC%QA!^M-JQ)d$wp^%M^G--A1}A+<3Dx zwe*-SQiD~lhY}wNOtMpyph?PTJH=xMvh2VhI{=Y%Ibs%21*X`6E_T3S2U_buVh{BU zKH5W>v+t)#H8R168Gf-tv0Wl464G@0hmdB+7-}(0={!P7Yl&Fw(3oVC=lCd_JmU$~ ztRkm3G;+GC#?lbPCs}a|z>%Y^xCP$GEGupSH?fJnAVS!Yk{Q{oHI01 zo3bTycxn!_DRX2NnLLspjglw1q;g4@D3B-JS|gWJjTBq<9XdFGT!rebvd^e9O=7v* zrS&8HZJr8W#W$hh(dzA`V22^WDYamaJz+ z5A@XMSG}>-Qf9-f=G>{8bD?Su=U26hHYY36oI#Q1yp(O9Uv&Z`nLDGa88x@EXn2Ny z3P+xa$jcz#YaUgnCcaJ>PcWG%|AnBj@J01fZgdK^UvancBKd>|w;juRZ2YOFHLlD? zqxeR$G5Vgoo`ttg$+Fn1yhK>+{glPt&Q7TVM1`HKP0#A8mTznOTdTF#Ip6Hze4n9s zTnS@`Ks03m)v;n_YQQ5ipj-iq2c zP`6F(t5moVAd-8F!%e9=tZjw(1>pDMn})kjSAEi4B}2rO6Ir28UNEbd^6IG_C|`*G zjxqlf)MZV0xqwyEg}=eqmGeQP@>`N`|H!w4lNZcfje2^4un>13X?oeOodaj4qKx^AJ%sk|jz=1FJf z5Oa3t;BQom8dQr~I|mObnbB(MqLtb|smhku!I_?*SNsR@20K;zv=pvZyy3APPPL3* z+fNeJlDA?!wN77qp(N@x?{OCEsbyez>48r84%FC--QsHKOyS_drKjA%iH*t`=_@=4 zz82P-q_V?$l0E9j*Gj$-uO*dHIq*c7Z%n5%efW03O5%C*Rm(OXD?^qm^Q7UI3(IQH zQw~8Y{)I4HsqdQX$yneN!!@92gJI2Z-ED?z2roaN7>;8Q!##FrjzeuUH~0%9C|@mc zFj}r8v9qLU7p>k@g@e&@OB5f)q45-cQbpn>)LP!9$n6&uuHdjn|5wUc>ZF|JI)=nY zd$&+|mAt4AKE}dl=d#3*WAgf|ya_t5)UWcs8k<*YuT4?~;alhzZ-APsL2Oi5?ERFH z{!ILfl*l{_zcEA<))QYBQI1tSjfHFZ%R!zPma&nT?h1MmudL_j0ft#nTHB*}`5fyg zCq#MzoHSj$fUk!IlK&E%C#jGfTz@uRoNvUQn2o|+YdN_d z5ku85%D~yrd199nzX#)~tB5O~$py5+xeWB;Em?7*$}@SbxsfrQ@6y-?#hK-n`{bDR z?2p8KaxDhD{Z0-XoZ%6C#J(4!cFRciEfP(RL^n&cVs_)fA70V`tS5m(oO>4gb~s}{a?T_WgfJ@4|7h^nQ?-rZ=aY%3-03;N8D~X0iYx>Ij0n%qf*Q=Fx2E zu2%-bgV9JRs2p=&prA7R;#RT+aw_7T5&AE$lmXno#sBFKngLROFAVUd#~Q%xAONO? z0nTf%8K9-hW`GBV%K$EX#v+B?AK2qJ`~2QiwUFsFPguwIiq+sAT0r$rQ!OBb|GHSJ zpDNYMBD!|+_?gZ#&B`-hY0qyJh6j!u-h}Eoh;6=2zQtf0fi}Nk{m_+ zTr82{9(#qF1r?yvb;X>mMzJiZD0V30g9Mxj(RS+}&IZR%Y*IMxZ^7bzS%2vt+Bibs zVPJfifCbOx5qNq;;F<4~TLh%8qt2!cs?2~cbBB}#eh$54m-#ol%$K5NZaHD&Xgwuq z9A#K#vYwa44v6dk7gH?!j7H>4X7M+%Rrcg9tfgES$ldBRw>VF1amF8EMU1Yyhw-@B z?Yx=mjVHuq%$vE&c;XlVJf*YKc6#C)yg}cfcu(fxnHPG4W3G?SHd$}o<%w_fWNtGa z56LG@t8&cUUjJ7tVvMc!np?eP2Ux^d?KW{w-h=IZv#-D#96#s~C0&0go0a#py_h{Q zJyU{(Td!0>zn5f^r7jM3E?qi^7k>jtd-VvH_tQBYZXwevlNRFTnsgg}%CW+1mT z{Ci{<$z&wjs>)KyZOM_rD&1OTl^wK)at9rvT%1HZxH9+TWS&wuDt=2qO*_fjosb0T zr!|43w2v`cG0r%#Eq+(pHvdrG<@oFu?{)0%o`=81yWh0-`gF7vQLdq-0ExUS3AR12W zYP$Y_Vuk$5Y)VtyM+?fZB`Qj)c8RA1VvV4t3n7Kjp zzFaiY1=vM^2fQG7`u8w!V3@LA8A|$$h=qra5dhmp0GvJ)ThC(2>8{`}<)M$}RQl%@ z#^E3``LvWTK3M3gnV(S!qtXIu@&xir@rd9>_;-7x?%gi@(c(7}4CGYOH@VGywb=q4 zKL517co^L=WxE1XHrVC+77H%@bMxYS*I*3J5}qyuSKxRQy%VAw`0>`sW32Z#gag`a*eq z4b*wwv+`_Jd7hR$!e8?VSa@B2*k+tJhS-eLg^+lCO^9ZDCXy`>$#!V4@YffX*VjA< zknxG?aB2zi!YJNLK>5R$yh;c!oh)}?8p{{EnGLhMBRq7iFqKjK5^p&NpYb<%juHPw zu1wXh@S5!{P8@G0uki$jB=Buoxi}G?u8;x>wz~$;*;??^+6Q5*`$e+EoLmabf}icr z34Wf<64=Ltl1u^?>?;o0urCD^Ei~N-)pmD=5_?lAb~?Nbn0O=$E5HF%<7=DoNo}%> zV$67H4p$+bHSUaz7loeM{(Qc0rH`AFgk`cL#_td8)^@a7+gG*rs~e@Y7{5OuV71l} zX>IFBYyao^=Ei8LFTY0Gtk-Ls@zZD~8YnAqzLG=P)h59%YZWj3idqF%fB%i(>OQI6 zD0zvBm3CM~fH9gPX`_T?Frn@V$lt2B87!PgG86ytqtwLzVIFK#I&V?@j;4@H+&9F& zJntHg6^>e$c5(cFGxO3ln3t3#0P|9v+6*u#YF^3>{yN4AfO+YHcGNWZn#YxS z347My0eb&~wlCGG9RtnmOLgb4FJ1U;_9gs@mL9R~OZ!^3Srf4@U3f10(mrefYtFDQ zU6>%la?8FXyP0hJk`#HCed#zu>9g!hdq~7=6p(RsLwMFn^pSb2wjh-B?$8K-)E%_B zIXuYb=358}3Fi-$0eWy~Zpa>O|KZn~;>({EiqEDPHLScpTHfMFdCx`4YrM`LZ8tNQ zMlMu~@Y|T%QCm*A9|g6$+1KX>pZ~wolHL|p`?{+3eLO_kC+GhYfR$u65Ep4*J+0Ex zJAsfs|6k0?_$HY<>k%*W2xdpH#pYwCzK+XlFa zkH_%w;Kaa8)>hkR6Sn6ogX6XR%4x2m7TAq@a2QKx2a{Tm3zJ$89<>)l^ouKA@ABy_ znI@lP8(ZS_3IL~uK-<(#75TQ&{M+oEf1fxr6Q7%XX>f@WCT--q0F17HTpESxudqo2D+eKWD6h$HZW0FbgEhst*w6;*hs7|I>jy>54~w* zmyYc8yB-5ut!+{2D{oU)BYCUc!O7adR*g`F8N~SRRoRg}$?jCvFl8w^26rn9o67kv zWW~IDI^Nfp{EuEwcOeEVr?R}M{2!?N7^@_Iy;>o2WqxA#Ma*ip^R+VGsU&6d{eYwx zs9ramO2lKK8ZAY>-pZ-und9kh11Q;3r|P>}UZ%(i^JVU!2cXnGU{{+;xeDn{$qh`B zI|@>qYNDObsjPAw4Il5zAp1>#v|h3cq^btF{fdc$hN!}+jCHl#k^o;|dU9u$8-6!g zP$1z!$B=_&20*T%h*@uMZa>2ariA7m*cg!(Ga8a3{#9ZFk<|rbq1e~NjFwYrR%kQY z@fhpL&CwywB2QUE3XImxi*2FXRmZoapu-2APpoa?RoIdko0mF+*T_{Vo?!0QaPTOj zb1ooo3wq+czggK#lAN~WnZ_< zD*EcitfEatStXAS+#)H-u_>D+rDJT0Hngodjh*4mnqANwCH+~Mr2`umX&v2}r+?^{ z>qG})5(^Ok7or1Chi#pI^eS5i-bu(diLF0-XcE!Y=eC#TDSB>`;j|EY5mC!FHlLsx zKk&}`K5ftqVLxLn2B@q!P2cuIMvCpItz|2`npoS!w$Rr+$=I8FimvHFXQn9pDrSW_n%4GjoOULnQ5}0 zJxaeb?WbqbxBXUgP1!-{yAS$qgucG^TO;WPbm6+CutcKc|dlDeK#Zm9ZPdezeK zYg8knyfs0o&M(y&C4MTRpDB5Tr?L{sT+NAXA}}H^8%Np4<^H_P?Q_K2`?xM=s#VTo zs+_@gv#*Rc`<{Jvv&Yj|-8YwC$y#{eu`F+3R$g{mqt~337yd;lf@h8>tj!K3)m;;T zx=-Zu?vc;^d`>$}IVO~*T(6t*2~7}?j{HJET0#+Vh3&LZv4`2)fx&@ zt%_!?=|!5tpSs`Fp%7>m9FUQ+mFn3b2dMqRlUmL8*awlg$BE!x*k3nd-AI)Z^qBTc>7Zfba5 zx?tepU(=WaD-=OLqY(oAv4BAT2A``z++U*QeDZ}2@)o|SGLYee(`@XNCD z?-U}4F{hTG`uQh7TQiqzl|2W>2n(wA&OJDP)c=$aTBT6NKN3z0SzmI|+ zUZ~LYZT%zjscp?o$qBkWBdqpJQ0=)`wP*D3V7D8bnfZltaiGe0I75(e z2mTKPZ26D0`Fy+0;fMR7;I9lNt&ChY36gix}#DU{qZKoBy3 z{m%p}gtU!7+9Cq!y;sOAxVDvN@-9!p#H^?`rj(ViNf0amm583ri ziPrbqJvL^4Ni7<)^?kpqzGma6Z?oU@klIVbDOTNsRNcp}6s~2#LECRG*LhC!PTJQ= z<*AZ9V!!!-fQ65SYP)@hX_anY9wD*cycEs0C6aA@BwGd{>iaM3H*?-sK6Q%}411JNBEk1T5GaciXTZPqSekPw4+y`wh#6j*$DburD%#AAL@J zxD&cN;Ku2AHRmwLjBlm?_)dGztM6LS^#UrP?DY!-x)c2cI_y2Q1T5%MBG7e-K=)Yc z+4dfkweS4E$U-FX3Xbj(0}~#+%5C>)sjW1;lscrYjq|0hfYc?|1d2=SBhmVn?6R@> z3bklXI#22&W32p2eeIMrt9M{zo~q||UC%96JyTUZm&Vp}ezYD>q@JuuJ%71e*JI&N zd7%0Fu+uwFp&i#&wt3_9JA9IgTbt8s#HNkk- zHTh<%^NZ!~caBBmB5rq`BqZ}^ltXTXm%|cCt(MeI%ew%pI{760oInlp-oc@7Ih9jQ zk3#}=1UhnNxLg;{Ir0^xttE-0>~km~67Q@WzjNPFAZ`RSLDRm+1;ju06+UkXL9&F? zpC)P{Yt1J%vR3r5kfn0f^dNc`e4@|Azm`=Vmc1jsk)P~L7umYgs&j^_^Ga1`w#Pp> zuHYeXU#&9@v@+$WOl>98!?%T!8q*?8x;oONE9@qPpYDw+yCRhIaWq?UBwJ!6+t0`* z75bj?1O~s;8f>aXk8sgyumN8Cdjjpm!~cp~=^1YybW^YsKi?oWYwTm^)i#$oz?1M0 zM)~PD@6Q~d__x{pdDyHiKbm=zEeGDFA29rK5QuqXc?u78ln7MK|AIfcoD10@ha=QG zOcDCKkA}sGg*};5xuG;l_Kk)RzryIa09SR-ye=b96_->x9-8%{%j~ zAl}8y>#E4T=xs&r-SafLPZSBc|CK7_1}b(d3cY_%+@klk9X7o;UK*u0*=o{>M+t82 zS7!V>@4zAeQ^VlT2*_PeISx1M=w{!j;SZB$9)Ta6We2<9R77-nDu2`gDn{BrCNW1b z(w?2J9#e|odM>G-vzW{3txM{2Dk%~)gpxi|tc$ zi;Prt*S*U~oiC*dzNT6Dki*=2?pA+yrAYYG0rK}lm9j2ns*^~?0FKDzIK{ixPc`mG zh~|1aPBrs-mDM^*@_M^UruR_@y>F>P=t2-F^7EIug3!sA3qq5*;$Co}M!}(^n@O~= zTD0B9YGE%MtI@nQTYARqXV5CbDDJ|ypv^qOY4=8P8ZmW)%7%iLM&M#%=!io``ca9> zc{b|h=Z0UZ^v~@Q=er49{j{|@ra!Mn_;7(3blCg*Q-_gWZ7ld$#T-9H>vZO(8Lkz| zYc$eN8w+GoE7>|3>0cTPmJrjdn@9-d1Xr|IHy&LS~fC!hA zT=X!n+)Lrd^4bhzX(p~EMAgbr;)Ls>*vLkbu{xeq+G%_hQ;6q^WE#+qA6i86Q8 zKA`5eqOy(R21<$2qn$!Iw_mLn0(`?eO^+iIJxDY{gNe|f8hq~IUNd9C7L_w^A~e`; zEcighG!3{|p_Xh16{-HNvk49ONY?x`4U!1O&>;7K&>%do0U5F|4+)}}zt_UJU|ui| z<|7#I)EwhzjtIuP2*$fw81Gh+*Ii+J)td_AznY^l{`W@(06Bj&+BX!!UM##mXh^B8{tOUw94=WEGVID zP(V>MPqfernj`3y4mpOQ;dQy=O7VYZGp~!woYc)_7WM|wDGIw!=|R=CU{(0}mPZ7; z?JgDUwuhew*lRPW>%+Yw7`}X~jo}{PQ;lU}GuJ%az1jXS!R#OzfV7pHIN;qjKbKx$ z5WRp#Y;8e{M-HlYJ7?~*aC$umi)G?j9PF#{Ig76%xI9AYF%;6Q*9a&)&ia#PTG{LY z4oguSmEaIz=#YCfyn%bf`8Va;N-g~DR5q}T!si%pQxz%!&+0$fpLvsdZG&Dd)~e$6GML@^v45BLwHDB1m^ zfHwBHk$%kZ|AuhPAfQCxSA&2ygkXm$==u)%+=tR3x0*jWGCG>ZsHcPbK=@Cr!GP0g zG7_3XnnT7;4$0@p;R}a*yYw-Gz>)MZG64FJr)WGGC~X$42fn~g2M@hUhpcXN>M5#I z??r!dDZG-R0GIK(>?gF_|3vdP3kbT+ZLKy-bLE1y4!P1?8Kg;bkFgFztENbE^QF1+ z)*%CNhx=1$>8(~ve{c&G?N-00Xm=qr6ZLTAY@ywOOKjR{5E%cGV$m+S(xzQv*C_2& z#+sj86l=fL^vYE|T9c99X!!3X97C^hM1}v2VzFJy2ybL-r;%Pd<5HlS>tO9auii+n zp9PW~bCZqqO*7iU>~rb7PR^c4#>(ay8zLEZM>3w8eJvTQjmKr@8a3pNbhwQ4)y4uf zrqsoLZ9Kk7;a(N}jj^DNn5IcPmEK|6R*3Lz%v4}eXY3J0odThbFqmVCP)Dff$Q5SF zfe{@nu0f}t#&FU`;UbG}02$$|&Ttk?rIb)tp3=t(e_f*ZD+T`Qsi-&LABuY8W@+j@ zR3Ow#?|vrrE+Pd~%V6b}jW+d0bUBlHf4UIK)Bbfa{5pUyqx#GlA=v_j8pqt$MtW#Q zFTk4(=jEL+((4o%W<#%yiVU-%*P+>W8tET5%XT=DZC51Qk=a)p>0cR-f1=9Ho6Bg1 zf#Zj|CMoft@wjXbpdu;tn6cn>Vp`=TtMm@jz;uTx-!4P1ANnC8e>VuXMO{Q+2xN83NkPznE$B`>vRis(r)1=upQ%Lj7#b=V{F;Xnjyt%<9&8wZyBuyJqV(b~p zzNyAD4y6<40XtfoO8^bOa-)~A%LZrJ0Y>YL-h5-FiSAaImo@8PFHxUBDimTS!@V|^I>->8$ z_x=2|hn2LlgDqmuieMbKlajLWCQM`djcp&}PzRVX`-p?Xhm18B4^P0Jg^jg>mW3dQP6$lX+~j1T`1d0QT8TY+msy(WxErHvaY`>%6|Qjrfe&o z{-LY8D9T<)mQd2ah!7CU)~vNDyXSn1vJtA@NXqw6wK9gPa{kJXpl9bFN6*Xt8+vv= zgPx)nEP8ga>1l&)(emZm^-=%j|4M!ha3lkRPs5)c_)ht?sVl8hljHA_-;)1TRBnUS zMC7;UgF@w9onz#8BN2f7ye8>Ex;r&Hl{o|PvCRJI>GF0M={t=D;;Kz#uQI^AuXCumXeGmYZac}_X{3K@ zERdlykpmQEEci8%<%9UMq62@JEHH<1SBHc9Wuo9_qQF`tI&Ox=H+1gJ=Ahj3*nAq= zIX2!|44#48F=u+Zc+Al$p1{ox!l|g40czyp`Lp7*m#1k?d;0<5G+!q;O_^Ejapy!* zEOz_V2R6I?!ich)9(V3PPrAoq;IO<2|F6Pt$5{OKulaukza9Ui@OvY86-gd@zu>pi z`Dfy{sbd7c*Q~bj+YfBoQ+|!#C)=NaU+nREKi9ki%YcsEoAfzGS}=<#HvXo@+ar=a z=6og<5^{-?|qY#n-_A zF5~T)U6>E_JxFMBR|$RLRPyp5VF#-l5o^vBWS6v&NKCm%P**EKL?)l2^FC8DlOV}P z-Z~>aXOXc$*?^>^WEg)j>07z#)L5_!;E0qN>9k~lbWBQQ*pH#41`YgYF$weh$7r76 zQC}%#{H#Qf(x7E8Hj1BB1@+5W#5f93>X);afMv_6ByJhoql+qdx0i_Y7;oo@Q9gy| zHlDpafuNw3U~jUN^1MujWvTp`)R(;zre}a`Ysjbx0UsUr?%yj$xEAAwFv2bO2_v-Y zAS%6N7Fm>c`3nRXn=j;~DtLIlU`}s{7TUuI{}v)^nX@SVg^^kZ!H=DT;4*w{M(|84p*g`X z)x^{Um!r!R<208&9KT~^@6dP2-T>N7`wKRNH-4@u4zD_%)yXkZDCTdMS>sBR%bhTJ zjTQ>$LSbe1f~u9oG3|(1M^U(nFci*(!lR*ZE)*UOg>#|sXefMc8LSmwy~!^rqAj1Q ziMDx)5bde<7Sa3!fLsR5%U0MNu%xxk0i6k<2cNab<1(ievz{dih0_K3PUN+#$m=Ds z^4bM?U2M}$%PSXT+Ttr0zmI2k;3Ur^tBZ9!*ZeyoDB>B7~b`CD=0esp{~AX*AtXvUgfpM9F?kDytQAcP^a;9UC$h zNWW`7+nd&%rD&T|4-&qQnWHIuYc(!8>I=yDq9pNjYnl>@5>+@NqI&nFRRwY(@L^=H z&Xu;`BJ2@`4<&^sg~pb2qJImq!ie5g1RNH;<}!BtA)ti_=o|#J5CNTofEFU4(^0_% zrR2GmuvWw7=olJLRF{{8l1{XV$YQ^DZCUJ{WXs}{iIz6*syYPTnmX zv6M3CRHe&P9PugvVFtwrwxrs~*; zn$v!=q}m_LQ~t{MhK$Sa*}O6v$&bKkManv-CY_01L* zS#vd6-+WGywJqe7u~ILTt$*n5R+hfrLIAXgzHS{UEG|;mR0@;L6Y=f}dR7r`d|wk=4*sDu~b(5=h>=R7VI^dMKw3lSfwkF@u+GJ zOR5^uqMF6fdKR6fk3puVmGb8;5%qB4r;5b$wcI;$c@xvC%1lzJXz5jRQOv4amF_i0 zG5_FR)f$NLHB?oD+exuwC-BMOb`OA}nOpou5p3KBA{@s zu+N|S?GY|oIY+c|1+!lUxtc6S>a@jlK$cdnutgLZJiw2v>XjzcLuaaD+11^QP>th@3iO6YC?|r2ElslB$UHfw90Ka&BUUx9rsVR*0j<39A1T6N@MC zz8>3trOAZq)T7>gt~4&xKAUC{_#=ZLTM~tg-!UL6)HKuc5qr2RB%4^Xi`HZRO^gW9 zs<&*3e7DIy6|N^CA=><#wM6!ORuQ-`UlVxIcp-2OWuRzf(x3=jOh9NG8Lt{|-=(C? z==(XiP@`H%_W|szN4QEn$FCN-)O4J6CLKppWHUO-=2=M?+nN$z6x|J3^h8n(lay`^ zDxJRId@Ju66BtQC!wpYLG$csN)GpbwusQ{{D0Z>YS(Df>!EKfdOfP?_0ThlUKMv~ zdR5;k^m>sp;tD(B#U!=@F^O6??S+!&MvMQ~n|ASkr%-KwIP;5|cwWU?!(C_Fdt_{( zZpzS}8xMfMSbLhhCMjZ1+o0njpHX|-+bYqrr~OUm_!fKGBArd!(_|BmUNk(PP{f`# z^kc+5#-272LWvy~f}P8r#v9v~#{7e27ep?b8K#E?W@S8^_)CT5pMYKIr+z+8uzX#- zU|D>WY~xukQeZ{tu*SY&BX`tk8@X1-ntz;%#c9+&ExU19wa#;!AG+jT=Wc+7$l zKwB(E8jn85N!>wl;%U{QN?IZ<3g=0S{v1b(#Qpbq0#-vdzHT>U4b^HV*?xq~{P)Zq z+!pGV9SpU&rm>f&AO{s6QYAah55qI9!UGh}B+ft7t;$agC1pm-|DQ;nBlhcJtSq> z_9Z#TjQD6cNST-N7c2EHhyEe%mU{oY&g4mkxFXb@^B40Hv+NFIf%H^bF_aq%{6x&0 zt)gp2wB`mQPRZadO|CFvEmZWzUm$46UCCeQT7cP&lQZ^)XXDB)4PPiDc)Bb)Hd;|( zERd0dfY^^GQ^?h9dOJgYobjRNmC1ccaAybivYg3Zb0GQ^RKT!YY6}}uPv(Kg&XXYy z4O%uUktM44*w5k$Ok2$ets>ywT42s{|=?=B0t-&3D-DGNKCC9d9Goh8}5FP`c) zALxy1-@hI1k_UQUB3oK{*CWUD^>(<;M|<~k21c}&no?yGq(3ykI*Y{dB3mKXxY*#1 z80E!iswmDP@}c(_48|SVy1ULd=gfQSE;yRXiTFbXuQ&jl;Z`d4-e8Gv^iAy@aChgY zl-xXbhnAZqxgs~yzPS>)c`TH4Hv#A-0{rXOY`Ixj9~EFu08rP)?LUzkx1vsRn!Cd< zA4!cfQj@M>q0Q(pJcVGU4zePebb}6N5ge|AEPN(;bZ`>E9331D0<6+wHdjRUr`h)3 z(Jpoz=a{Rx>IR+bRcG)7+z!mSm~Yjdy}K7G2$uqxXoihr1j4{+AdFrk`hd>!ODoUc zRGyzo9@%Mg7Xb?ki~eC_p#+Gv_BePvRqeF7CYtTONVdBp*+OK?k!wUnvB+k^%XFpP ztx5-~N)Mm18m5m3x>Dyk$vbI$2bE`|U^N11Zb~OT&n`?SlFuqSbxOVIoo`52@h|;%`d05+L~eBTu2-% zyT3@kqQ~%yPZX&s1Q+RGDnW7hCl$W;FV?|91YaSTZT_)TJ>Hehnq!DelRq{t?`+LvbO0Wh7K>g;f95Ca8Gg54UTyF27B9Vs?X| z-q3s(Gej6qx`pMZU$wDp9&089cJ`V*$XHZXBmTA`tH*skJ^sh0$N47tSE_dT#(Dx1 zJf16FmiBrQCg`KkU-|`Yle23Qt=4r@t=n-@h|cby4+&V!X%T5o1J!DxPa@RpDD)V8 z5jnqD@!vgCQEB)^iWlB`>sCR+45_B@N_f;aMvZNsrfuH9M3481m!z3q_SQKAY9XSj zg6j*CJZY|#*dB~Hg; z4>Ho!48&u;HHayMT+Q*g+#N0_H&k%mr?IqD=9@-eevVPoj~L_FH_)$?v+rEN+vwm+ zv$-DAaC5#|G@r_{T|RdhOPPW9WvcH;TEosvW9f&=m9y_!3aaFXFUs{jtH_3Zr7z3E zIXUnm+hij|S}vnLy#d0UQ)0}QYh`3NMYgF- z)JCeFTcszBWs_zwQ5L-7-jStG=gMUMW*Z|<2Cuoz7+IHX{F8%pxD->)=bAqqJcRRb zNAfVn47^`T)|-Q!Zd9jmWE>CQ@HD(4Lj|S0%+*f+`$~A#sI%&?djHQT%}+CK5q`Sz zxJAKB30M@&`(K+CMjx_SVQF0|k~Mz`6{-qk)|MTZp2e}6HFpz+L*|%@UmGY___d=d zf73C_H%eZU@8+!*>c)%{xHC$IK4?*O>1Pp;%jR7T7tU9A*>Fu=q~P+s2iVPE`sNh{ z(*mo`mvRKAyQEIx%25O?n2P^m!}KVSX!hRwb#s_xRa0Q98O}$cqz=)qM?}89!T$Oz zXlkCJIM5JyM4{mbO%XJ-Q%$NkYBlLS0#=g_{n>6(4PWXejXI-AueB9Y@06q40$GUm ze8HeI5EQDq6eq{Y92^AY@4{c3j$O;6#3jKIo9LYhDJ6_;)eB#lL%;h-X#wv+YLO ziy|td;-`_j#7GS>Wni(O^Cm1(aq7)@HW-QYdIN7g2cEovXBP{)SdLHKXr#%$CK2KH z9b`6AUz{X@w;Q-DV~>%FuE}#Rp~xy0no?9Q=Aq-&=BIBf8D?Ofp^LT3drFn3mK6EY zO*4a15C#93QoOnpX{cR_hCNR~`UBgNKq&|x6nbu0F!8FXX2P&w_Eqsy&6`_Dpap@% zspjyOJX>@B;8h7k+IszK5}6&A+!S=B#B&%ZR~sdB?-^Gr8K;|?4l^rzYmp!|bIKy& z#W=Jv)1IJc^TWdo$B>5(8;;)Wu~e%%M(U@=_}xb8dSe_8q@4x7nAekTVM8Z6x_vrN zaZqRrZ%;KIL+6i68b(@G_?_ZAubY@wHr4naQQdqezr3U*cDqX0NUf;(2(CglYi21f zAA6IQ%?G{0<^2vJn<5LMGP)759-o5%sC zUA)FWKSq5Ctm-6mRPw8GVgg+evnuZPWQ&k&%A4vku1|I^iRVsBsrZ&)a=kYYl+Qc~ z7uTbnph4q92aC0N|J+F)PG4m>MJtxW@Q#{l{S zGg4n=y)hOm?6|LqJWzSs8_YgGUR>?uP^O9AOin+o;_9T0LZ*J}hr zY((o!A>yHY$VjbcL&~2)IvwV?!&Nma6~Z@xaFH;w$uEzsC*w{Ssf{&-w8a0u@L*iQ z`A&|H@&uAGB&d$hVh0 zbr(>%Buda4rPg|(njk7ylOT@|tF+!|UoUxETWQsrS_SKkTp$UckRW%gT)ePryZ|a7 zAbG!M=6QBENZa4<|M|C)otbAY=bV{2bLPyMGt7QL;2fjqV~^4EY&*P{@XynAWU7j| zCDOx~`T<|A=D{Ha6V+w47{&EQ@!D{vT8SlB)<&ZUkN-Wh){rPe!b!v@piTsACvj>l z5q7E)GdH6CCTAvH)&pf~(S>(#byHw{ODgl_)q0JbUi~>Vlddcg%&_QB^GhZIUB{Ec zE2o#7Mh<=pdh&~cU};oL@e@SIoK~ZFlTo}|-m$9NnC)P{l+NaV~@?`j*5SGXGl(<9@Rx%ILiR_jCfr2SRg$c^G9s1zC`9=-JVp{ zQ8XbvGdRPJ>3+&chl0a2@u6z6qGzi5+bKLwM~8%1QJ2vv zy%UJfw$~=UXu}|Rit2zJbU@2V#BYK43^l0E2^{CF#q#e))F$CLl{WA%G%j3rq;H^ZUm9mLPYaXxb z?J}x7AgLZ$7EHm4^}O;GFbSEss8JZFgK-M4D#SdRO<(dOd{g^%Y*nMH<&PU|$h_13 z6BdAWse{6_j+J%5mVDh}D5NVC?gRx}Ze-0WJKt~lQI_yP-UJ@Vn;;M54Y%LNn@}W9 z!Fhb;yl>UY`tDtWlcFcSQQ>_v98bw#jnWHkC-u9dqM$a)TB}3>!yNJ*4?Ly4NQy8- zw066H?<~06K5-V@D+p-;n3q(K>$V<>)&GcH|DT~f_rDV=uT+(fi&tI|tNejj<$FHP z5jmBbCy_m-|Iq#u)Kw92aAChNWj!hiAHTIyEz{Ox)eh;j=iej ztaO!lnM&I?;UWk?e{fB-r*FQ|GqlL+#M2$+gZa4D{y2h5VsNdx>ChssN*BcYJv;JfqgN3FI=_k?- zJMWSWa`-O|5G?pJSmT#=vn~w9!ug8S52YKo~b$c?t ztNYAtT-RjpNQ~?1?M=QXgA23+=W*U<6z?-~F07JJ&MKpRwTs&=-x^at<>w1y%7s%w zSWtpBy3zRw*?UFzrQWFz-wE&6xAqZ+>CZtKfA#G=T(&kjtoc#yckO=lUE<5>)? zYrm~H+LM=!2;)2KNYI5_>aw$u-OC1797!(YDU^cGo*I(Wc4wShDSwIK^7(Cli>Fl_ z?L2cBHQh5Dp;#f3tLz>s>W@?$?Q-u-+{KF11b=DjZ~U(2_TBhnuZfD48uj0}l={07 zc#eR5Uke@IKd;aeqqRUL#v`9HF$|M1%wjGPnH*{^z%l;z>uW8sYtKx+Ucu_2UmK!;rRrI2#998?<{2vev#i zK(hWeGIeK8(ry|;LDP-}db@;ayd5|5?eFrhg?}IMPtxVzkIom+pDm>-#ks}_)fqe$ zM^lUkZzh5dZAWXSRc6IwXE2m%Z8ey=9@h>sDBt8(s*E`FVdPuGOjvL0zifq=j6tPR zL$V#zQ4?l8BzzD4Q0)!RzUHWh;UtQym}e2C5HqUwkx5qlaOyR_@W`>@VLdolQvMSH zW@Es5JG+()iF&Q+b7hp;7t`eqaKK#csdziPgjMQW2i4nR$MZvg_ zg|Xs@c@zN|I}Dq9A9on*T^~7PXY;>UXlNo}Rc6;nHsR-4LPV>mFgjfV9IxvAV;{Sf zi)e-Wzk6kb>W2sxtdb5$V0L)&^_ZJMFKB)hdG33G&R650=y&b3HC!xlkp*-3$|QUf zBE*ps%h)~|xoSa*72}P|rP*?6R<^9aBw!=<>|+jMPlAqKF^+#I%9#YDjtX{yl%G;f zX@la$Z-^D2;uME{cf=_A67>Po^S7$4bfyhcwt{KT9vi031Z)JCDzmo%rN>&Vy4dG>JG)t+c5O>kb)lm-DorMWp!bHt%3tU=LrYZOohjI9 zAZ&eCbP7p;9{q&^{c1oKa{e-3$a$Uv`ss1d$N$zL=U4#NqvQ`I(EdxwpNq3aURWlIkPtjDvf1xHaMX-7S_ z7AbH9JlIF&?<%iD^yH+eyxMs1*HrHbk3A6xkN=@!H_ZS06rmUzPBPw=J;57(rWUF!*7 z&CQqfIAG=aVX~?;zWglV>^hVbzW+pc)N%GYKG_b|W{I#e@JnRa*2-@=FvuRQKlyPF&!!EOUJRsjt|x75*e{-pl(hwroymS z$N=@59|WwYs-;}c`$p~^wUHWxYL)F@NvKMf*!k>CY8;C?)EUbnJVfS*9G)|<6VQ+$ zWPVET48tnfR~@u&siBu{l)g#kdWJwQ@sO!HUN*$OPM+`>+4%a>DOTPEErLHhnqkzK zEJHwCiskDACHlgs6y;jT+$Rveq^25rfYf#T8TNs}%^grh5nRmT7gI&9=)o@D4Aq28 z{5Z)Ansjy7C%L%EmRAJRuD>S(d)_*ucz?8B7*lRjprYwS9wW!TZwGXjh9`CtC?_Wq zkg+ydfS)M?c5*sNq9~c%MUpZl)Qu#`Fj+J&Gez+-Ig6w;3G_w*E6?7g2J$zQKTjZ8 zvA%NF8P@^DPsnv?`094aEKQ9|ZLgyY@9s61e-aJJdK50WtQ007hqynxM6-b@!-OMd zeFzH>wyM@e!<>FpM6hE!WBg!f*x?5`TOEGz$QI2Hq`v4dN>KmSo9y~`QLnI>!#|b! zU!x{xFIcDQelA}3ro~R(?@^=XH5U_7^*%=K7|&qE%newD>{IIk7x;?;F8_^rYdm_R z+8i+bMIL*ndV}!Ea6#73*{NPeIJV!@wkbaqS9#V$_S#=|<$vG%w%tZ`d+$^nG}T6} zpF(Z>4p5s_qE6?PzscurRJlIls}SJO#X^98NG@5yUm#%f*bglS?@gN>ye}t&p}=nG z3jSx;+LSgUUhGe?V$V3mbhhXZn-b6XPukz%Cr<=W1je$PxQJ*U^&3^clc{07u!zQyHThIYpl^tCd)+ZxNcRHmXuFLf)Wcjh6&)sC9>;!xr!tI((HU zba-()bTG{RETrsziP*GgdDx*vGf1d008$ChB}NC3POW`4b?4i)E>*Qol3Injfq0E` zV>QlnYK(mNfh_0_xZD%bn;mT}w#*XTYbl~~um+Oct& zA#-|P=g6H?Xm$23`8vy=@#&a;i7 z;qfAwQX)tVpjrRno&LIy(<(-aml?TP=*_>qFL^$aWy89;FNZx-`(~az7Mkw{6%m(L zkWC4%+GND2s*;2lZG$|vXjG=Dx^66tUP}OaTt7_>i3aE(^w@ck&|~RV=rPM3s8FaT z8C6rs-1gI^wAp;H>GStR4t@Tz(V>q)C|>A%-NF>z!q4p%?o%yXDlHghDp{J+&WqQ2 zeXQ1NW3~RXm3`$7nmrlw^}n_;e}|79Fy8}x!s6`2|f2#!S zh4(f9mBN3B!hZ|UDc)%UG zP$D_B*pMF-M5sdM`2q6=Y)3VllYP7+v+lpk?%fK3RxA%z%GI2t@>>&nwv$*4 zD2?22uXog*hrvVeF%&-UZ4!LY$kh_C@%gUG!RN~j4nEfsLZfGH^XBe{dq`7IZZ|*3 zsWcWnp$4fi~b5xU`(9xB4lTQy85*AC7_VBq9IixAg8*lr*SlhpjwY_z{v`t0P zGssTO=f-LtWY;`O)!hC;yyhoW&7YHEV|7-n=035S=frCM1=)YJ{^ZEoGmA$iAAM9I z+JXU8u=KNF=}{#|u{iOlWHwKCy!coBKRM1%kpF|`?!e(sIr&QVSM1%*L!j3L%>(}2 zIykd;dtaj%!WHrG+TlnFvJSfR8abtIZwTfeo4ra|*UirX449=reyoy933d$i*HoTM1OVjJ#PEc+i2i~CEW>m1T72ikHe5|>e| zzZ~E1Fy+fPer41&4PBo*EugNp7NeppO7kRy^Ao~(3E|v?@YxCBpCp94OIXeuGYJ?u z$2j0CK0;#`CaE~u%BiA{O?czZ&)H6gqvAzUY6FXyZ@HZ>x9 zsSEFjYqc^Sm-fA)Wm5hO5Yyu$?*}tsGfW+ zc{|y($Pp9wACzHMPQ6joh^0s5E9K{}9AzBiB!?|2)&h-d_87&XmV-u1U3&xSWN-dA zGuNo0vOsT^e=~lr{Mx)2-+fz2v!_JngU&EXeJ?&t?5xon*Ch&P zjy^9wRzy*X?^q;Lb|K)?8y)x5BkHz<*q=;YZRGUtf(i@YrpACHz zN&Ah-9MF|)F{bQN1~Bz?q;E4OH5ro`OeHN`VlBVz{#&tvHgZ<09ot80`{iqq&hgbI zi+%Jul2i^~OJt?~jI$;_w`GiS+yP)g!BJ8?o{V!oYNl$e+uOT^u_GWx(d z=u}K|CMjel)uJ264ydSJsy+OzZtF(72KMK>B75z`TN4xCw-eooiEo^g*doRMXeSEK z5%^W&BX;6|#KimT#GJ&$n>!@t;8q+Ohibd3zAmbh7Cd&Ap^4=N+lj*y6Z_bSkT(X4 z?u6*^Z)7#NbbV}q{%W2xKugyo4$zWlL-R@e>sHOBgo_C+;mze2(fy6GyJ0-g=3J|Y$=4ePBE{mh zvj~^Fz*pR;(~Iu_l;T^eiE+4(g->sF`;{p6AD5q9?-oY6`as7HZEt`r8e(=S52xH} zbH2#9&ZpvMvGdfjGZ;Y~x7pXryS-6myBsd~MDOF?;1<0wl9qF29E8^iBQf2oE9Vfg z$HJ?#ow4xO#`wTZx9@m#B8`!C;%evRs#3es2UMlQrBac}2FEM>d91=>r^3j})gl*h zU1#(x>oFO*OvIphg3gXS_!&@I6^_0DCDngBD_34Fo|vGR1URnmD}m0w-zWCe6J-@~i*$9Se)Xp#-AmMlWSL+TF8KWo z3Z_CErXmGXFM-K0&r)UN*eejvr{N88okG$3T|EU|gjaMj# zY_M)oV4b7Dg5~s%gLPF5tkE&B{?c%AH^k8IaQz2)qoY6DvLQ@>1#;8eb@wPbq+(@6 z!jMaRh=*FrFBL{#^p%=yEp4M9;b6UaeI5XXes2#D`rX$I{bu=~yS}}MWcZI=z(nCQ z?7}2f+ezsp@rn0EmA=~dg;OrNUTrONsLk$#lKY%am;{cFRI3_^{-fSm5AYYpxSANp zY6Vd6t8{gJB4ZzS37+@vaVJjRL7VXi@323nMj2Jkd)_^fHwLFXAvi;0RXTOTLKp zg9dyxfR`dx0dO=CaORT${(fXKa-#-ZS!l}m6rwT;K;u46H9%v7-rKeTzMzq!(5P(` zH00W;%8RV{A}Ka1yYF>S*;W@PzOM9AQXKhE`Lk5_O&5G2dK|T_ko~y1P7Zm?(Uq@M z>3UD=oTBksp>qGN4q;8DcK4dT`EpyK@*Ag`y3W*Rjg6gU`BTOga^{8&(BU0gfz;^F zU0-np`XLu!i^-ukf3_PP(FjqtSV1=j8KIh>b-VjVdZOwZAq7i+rJJmYhnz;$7V7G7 zsy09BpkyURS#1-0m8B@fv)WqAwbZC0MQW|(8X6NK)(e* z>Gn(o=$cgkDzeNw1Z*G=mODUx4kVi2O(2xeh*9}q>~PUhMn0`iM)fn_h#G09a{?FF zy!5kUqIsE%=A}{{pvw2uZ223^PLIkhDM-5aN(JeaHl#Q86Ox|gK-x17sXqp3VGPng zzk3p-L;o|Ra=;ld$E2bU>Ht~5OwA5){S;5uE1u34>jCHZ&^ho7a0t9iAZCw`t=09@ zl;W9jR5s1SxuF!Ps7>{lI#?j4R(Fe@^`0`NXZ;muNk>$iA?Ou0*c~y9fZY+lEOR>I z=OCp!qUjw$Pa7h=7~swQ0a?iXYUUMVoidRBaxnEoswGZN678bG~On zzm^RTTDKOq{jw?TWxm;9?7hbUV+W0EFbWkIv9tSfEMf~T2&is*%x>ew(*>_vr43_I zgG?-lVhbfkWrPGCLO<1^x~HO29jbQzd$u4c-FYWONAfMdHbUEQa)0YIN+n-4{T+Z@4Mc~6up z6YR?%KxSR?zpsG7$+oPTdo6Mj9O+CY|0T0*kL;7$lKGJ>+D(IMM=d8^|4Z>nOW2vz zU`%on6An|+k5X9`pI8~27i(uY^P>JuXI|tGN*w1^eSe^yaKRm8MBe<8g`%vlo`Q?} z$n*$Moud!^mgTuAZCJd4U&b2vd8~n^e~REqMbXuIHSbByN>6`=UGYy<#rxllSA3m1 z!`w-VJ)_;Riqm5i-$}(vPd}L4K>U`^uD5~uglFu;R+{sVgnD06^;X2|ed8{NA~n>e zIYn=$-nrzCbUJ!|lGb;fB!7;H%Rkp4u!(wvF}FMN>BrJKvJF0Mx5vUQk@s~N(J>}7 z4mzj+4^C8UDANWzTY!g)z686uktbu zyT-vEb*Dr1%M-xYl`dT&R-K|>RP>JRzc`oUDyz7>iQ!>9C{8BODj-K1a)Xo zEHpG0x-=FV84HcFL-;q4P?0pVMy|Q$med-JJNNLbG^vT|cl?cudy^cLcqrNTMV{Rw z+(=R;)gU<6p?_-8)nLqTv^0y_;MmM{WYr_8P~YE)fwjp~-=S-M-+_mpn2 z-jY!z@9)I&(=~UKYLBcJZg;xox#jVZ70Vp`{&f&KYd$nSsedM@{u$D-f38sdvyJ|d zec6ZcPWto|oz&~GuT>|2W^u2Nxg1Id5te^FM9I?Y1C>_P>ji$LlX~69F&mx4U5Z}w z2qdq9+C-^-9vh6&p(}>ish%Lnn|^L z>WAB$p8D>!cu&PLN5_*IKizTmZ_FprW~euluHyk?dk1}|as)0+;g(N8xhBRK`hce9 zW+?R3mCG8&TV!aPO6JX9y$}8byoSRRJU5g?SIHhZTrfmqbt%{gR^z%0R;MYfM8$9C z2B&Y|h~bnQ!|ChFcb zIC*XUGcu|%`*{9$@$+G;ZvQt}zaOdpQmijHP8`CIX^_v5z zCvM?^7y&_XJZLsV_FW^7o})IDTd`s`#~w~D?FHn9`MUxlC-i4ag0;{VJ-z0fO?a%K z+m(XvYXXq>hjD6pZ*^<(er*VOUs@r9W-jFASj6#7(IDXd2aqP70;Coi=>SqIfOQ0^ z>`DdBANe3VH@^u%qDv{)ly(ka5Rm=jlv|xqI{wx8C{2Ja`oiCpdhxjeg->T2pR*J` zA1((U+3d9tuxm_<)%XJ?^^#pmC=Q)bDV~zhH424=(hyu9xHpAz_l3-NrJKFhoK2pl z)NF!D?EQM3$(a(8SNDn8$`s`+I~vT+WWTj6fXg1XfD5IABv)_wGcG-F{FC20d#(@8GO-JA#|K9A44Ut_F*sfhx8+IzAS zXk~w~!sm9uD+g_pU=J653Z*1Ad(+r3=xp2F+%7SS)+1cE<>8{KY!n=lGQF_?EaGN& z(SBjy`@2b%b>!`TwrH59Y*fPddM_599R_ezj3#uAVCu6NZ3c9z(QkN~`3fJ(m7?i_;x{f5jO~eF!DYP=*nrYn>K~i(>8F zV7GU#YH!%7+w*fw-;|aWZ!ZvQ&l79!g}66@oUtF#Gj_pE@jLA6;;+!Q=|^ui z0fLOWFHRHG|MCxE0X^Rk45wE-ke*aF9BQVkXHg&Kn~nL(n;pzo(7v8U{Rzd(l{e?r zQbCs_%(x1s(VC`6nK#CFmwr zhGM#j>#Pb}GhwPgK};{PvsBxEfw&N$t&0#~*{e3sc$$EXZELB6?V6VzY%e0@x8AA+ zkPd1IA1y1k{HkKhO%-n`uB=?=Y`;Y{c$3}W{i?ysq`_Ht#}6=!O1W1ddWq;NK{H%n zmm6f48>Py%|DAFMP632veoe#%HaiAvKL^+!-TaFF`lTF7{WD(btD77YKjV|`&>*1% zu&QvuFDvt~;fh;54HQDQ*D{1`zgEyJ+93TFJBl$Xza?&KJ^U9`2;;OYp+`kUGk;I1 z@VK8MJP=@R;2|gbnhYw3?_d%;xB;_)UyjS%U7z_(B)ma;_y=oHZYS_NaQWHW+zcYP zPBCAKTP0;LDYwALW#?OuV+V}Sa9beTa>mvSB1mNtub21)6~6Lh|?+JUe9bJMqJElzdg;plWSFJ+uTmM)povCjtDo*tQZWbcFo1tQd zZ_pI3Lu1PG1Yp<7hCT9S)2TB8smPUfuBKDx(zktbw4YBq?~ez?!&3N1mjs*Ae)~#n za5dfN43m|Ab%x16LJ56dl?n4c#Q;e-W$y zhFJZp|Kex>{z-N=ca;z_VgF$Jdz_^h$5k=_%@36C6>&+(D^nt^%_4}iA_mU++Pwkq z&+xE}_{%}}RdfrF!R?N};82pvV#BJ{8$JD>P?e)JD|(OTLAh9M7bxLPH+2)(SSSxo z1x&n0OdnvogTe2F$X?Q}98D{@w#Kyi%5ltpkP-`|h*IX?EF$7xnBR_wi0cL|A}&2i z9^>?YNzi@LCXp3G=0}m0e(bVM4xz;_ihI%~FAmWZSGtbs9KStA)w#l>tgt}K4GgS8 ztBp!AhYVUjFN_`#K*9ws(TmhZUhbqjadnz>;)5^STyiD>@`~cH10%5CHL_cL)aZVhiV=KUG-l19};X?Wuyr z+b`Kz)DW<-__V~q;$JT~Sd1nVZwq&uXxKRn6{0HY3Ynock{&%2@CRJ)1#(w~%s&ag z!{)JCo4q3@_CJjDanR^qq=dwyI^xd^nl~aHRtaMi!LUUA4W&n47Q&joWx&7kVg>*C zHvB(R@E?EChJQZ+8~%YY`1{A;ulRFE_?y|XoEmvlCoO@4iqpUmo~h{BERaM$T?4#KoMd%?_eb+NYLQmdlK zX;98nbCySwM(+Y^h_@j5k0DrhJ_1?p{yA?P9 zz_Z}Erp*+v4p<{t54jL4OJK;{)h=UM)}0V61LbuN3#fZiC1JJL5eY3KqOP9Sy9rHN z%xZY{S~ufb>7)65W|n4_w=9t*7iVG?zE^u5lKQ!0Zu24=3U*M{T*X>u`Ih2s)u`Nj zti4@ybno-)aW&$+)t7(5SbRU@DEd#*gf9C>?k+#gQ)75mGC-2rR1X{(x!_x_D*Kl(!nw!8PQc@kL#(}Z5LWq(Vn8qq~3i&MSJSq=Z%swDQ4aL zJ+*HMc=Nxf&}R%jyNo9TFSfOB@r6Oah+oI2=wbfk?ToJEhnXPwbtznKX!Np3QP{nS zCb@8V=ao!bIAA;2EhEKPewE8XZK>oKumu5W3ux8t?Ub=r@;y~c_LRGWg40-I`RHT? zodQhm5CNEEttXGpntJ!yf=WNKYD84l5eZrIY6bLMQljT;eSF0b$Fk(%B+Xp^(0&5u zdczAaCvp7EUirs-(lEDB2lj8|vN_kUiX6^c`Ui*euKB+rTlkt!Udx!Ld26C_`$$%( z7zF7y1OpTV|N8TPfMA(nW-+RG|B+la1kouD1bb*#3&CSG1j|khK`RhMMt#gi>qq*e zSs`;Z&Zh$=-krF*avU*0Z31>_O+^VH%1TszLWp&-fI90c+((wr0HcV`lW*s_TIJ~` zdBlHfavb8zVh~>xgZPPR?O1l_pJIr)W7*PU+3qA8?TKSq4cPzHjjp0G0qnyc1hC&x ziSl@RNCEbW&QopYc|+wXmplU4FXJsfJJ})SleD8rdHgvI*r<56dt=$|ie=kOHjX|8 zurC$GZr6=oU^hBiHJYRV3k53Xu^J=K+MDK36<%~_i9g9I9D3hHKsn)?t^!;NDp3La>P{q}U@$5J6105Sd6b~T zc{;lWWbvxYze(u_3eI>j|hX+V_i4NyTc&QE#m2kBV50~&V z!rTg86f$4Su2tbVOF|}hj3p1p{t{~oJTdvnE+9>znz#ep76+Llw8 z%FY?Uf>}Zh=}N$V?=%9AxsD|MJ9C}#pJ-20X-3b9>8VD~sp*-qibN4=i6ZokbU3{R znZ2xlsX(^DS0F33nGLc6Ux2MwAg=@DnM2XjbD3sLPQV)1H(*U0fb}Tv;@*wyI^9z- zw|7$6s6+=yOK8ITEbqEF?RlR)J%JW=%J|eTJH++|)v7~YOkbXZ_(bVmn~!S0I7@^=1D=-<5h zztBH=58eCUNiv^$PLbPFr^i4BDT2}6NlVb9N%V|Xh?_lxDr;;2L_ zXhFZD^)W=y9c$YXX(m3&RVSV_E*@BAj|*D~q|G+aj^MQ+@<nB~Jf1eUUT(E$2tqa%KV^8YV9 zR~_C?xc2IZCB_ig2`3Mn)AYTTWoOM!LBTb1npkXu)_wyTJ>|J6MQ3~gL?~LB?6c=?M#P79+a&-WOD$G zu}EgF4ToZM4rNXr>M@Lj^YKtCkP6!?sTRCWHC-f!UJD;u>8yp-kq2Vo+Q?mmqssKf zSUD4pwsLY0ARL$FlhGDJfB-?BS4kYZVr3hB5c~qx)3zk3#i5fFe373HqZ8$zTHGB8 zZIqxV>HuXDP$kE6Vp^(2DU_!28l2y{TKjs^%6a$)oCG&mMRLjJ>~(4lx~^FvgSvCT z`yHrWO+(Rr)FOFLRdRq+QgvF}wG97W^WRr|5L1z&wK0MTlQ42`sg8_$S91w+cAczq zq9Rc*E~`TZeK{wGTu{pVNSig(L=FR(ZT}G;6_r6i3t2PMLnB_xo_{Vj z5(~H*g@&W93RzQ*xW6PoUcH||Th>2- zL$=c&b2d2he=91$7?I0L#Mg}O0ruC`qW1H<*7|enWxpU&c@uR3SqhytkXE}*?#Lpu{F1=>fx7HF>$XvK%HRtzLUaNqos{%4j5vm?gqyHOSVSngh8YGqUl1cd@lG%hLJC0( zz7m2SeFB2Y^B!LjknX4F&mHS*T+e`Dnsf`6h_Ry|Lk4woUA_Deu%2BeqYItG>4awx z4wxz_h^AI{q2jsDGymONq+-&HDmj|~M0Lt53F>*KK=|DwUdo0S=E&$Z7fQ_2w9qYx z@INq-LC%K(r0|oYe}?kIZqbkLY!Z`nO#FxwOD870*M8ZRJ4`Aje$s?nViD&aJwQUc zC6p~8WFGhEz7oRUqeQ3xk=t)mY^dxPe3c5OsuCe2l&K+V8N9}RjZPjp z(@fOOb5{B}W%-sxxez*1^|YWQ@SNaje(PG?-T3j`J7EA%esC+rpVL%0lrf2Z^$|6j zW7sRSb+0OR_zAROV44kWnQ|VEmPj6Zxs5~RYQAtNSPQoP5pOLaR<`HR=qr=UcUot7 zMm+l(#Nh=k*M_zp@jWo(e7Pz>9q0P3C#94>|4FH;?2|)dDEv|WndLkD<`e)v+V&g% z;0vp*drV*KH&4i@%=26CN<9_tPT+4+S;TKWE2mz5^SX4ZEtH^ZZPP;al?-i7oVAsm z0k*1l^B)m3%R3X7PWPKvrZW^|OiOKfJKGHB{LXL9*YL73l%oFhTZh$D)^!*Rdba{(`cFZnrp7X)3Sdr29uaC(Yk8-kH(WVeTB zAVSXDGYyIs&pOR-rdi=9Uq*!%fBg+Pg`Yf2z^26qqa0eSqfyOI@=j{rwhz?!Uo7M3 z9{4Vg6g?cd6$Y4$@g?I?{$}8KewJ0`ia~ z-Qn+5LShfc>{W4tSBQvrBzg8vJUF@v7q|P&wVsN-I0ZSDa!(f@W4yqZx2A1sFnr&D zkhwmTyM?srO9J5=_T%3q5;ErOPAZvuEKzp}}jfwltjHjNdLiODv8fImDwhu^;DW#*JruQ@i$ zwf}dX!$&}eTsbOtc*vh@xml`qs3}Ej0gUP}j?%IV7u9M6|a*@wSRy`1X zi~|1fwNpdp{y=VR-Wr+T=9O=R?{k^=w}kIYHt&yw?@KW+7YA#&?YS|K-(0>6CR)~q zw`l_Y@Wc%^sxI8^(F)^1M#!f(EQBP=;mMvH;)SlG318BZ{o@7yZVgQ@Ob z1kKlrh_&^z@%J}**P%fKuy!76+HX`YOcNk83$2OkQt6^y*6ek#(i1!K9te0vv26k$ktayRP$@4{5oQ<={)eEIJikJhs_@>pY2P2bxieAUL{ zSBWE(Eel#heb#wn!&!rU`D^D6@mXWtJl({3c9U-ta24w36#1zYFd334oi36M$Ezt+ zUiBsC`SXoO0t^kifG!<04|0UN%r4DCc#GSHF@Jd}Ex*ACHpm-za*%BV<*7_L(VkR8 z{#t>t#d|Ncc+^BbGOZ1 zAJR! z@V)KeWITEv$sDrc|m+>n)OKD>6RM}JUtRySR z^wnZ_Fkgm5*?{OD=`3g9sG;I~GpZKxiSfYGm~;BZVOQ&!B6j|u*@t;BWf^OH`H<*! z=r<_QgSy$s|MNnsjA(lSf9c)x&3Q_2qu8J{~X@t!8M(+gK8iv$0x# z*n?ORNcZOF&;1fqYCP7ZUe0|VeVW{P?FwHnPKm;E7~=5Jyp0_FLG`xbs+5I`=ykc@ zgopKHH09zU<}1dM*Zes5nDNRsuWKjc(^c=4Ct!Da%;UcN);Yti`%=wg-rSGpzH7X) zgDkOnnrU}VhL>UWp75XC{ZKt-J~@5Kh&h|)U8P3Q5qks~k7AJ5PP(xep`2mVVl4iQ zfOo{4S|jWvRenHHbPs>xwJCW|%_~i?sttT*v(k+C;I}k8vJ^WCT8c**mCt}b)37=v zv}r`>ZDt_xkTrflh*OEm`SQ_h#$T+*?Cvo=sR2kDkmbPYmfw9&H+IwM@J{CGdO3Ws zs)RKKP11jzo+4fc50%~O58szgS1)zeoBU43qYG8N2Lsl<1N`P?s>1O7^w-_g)Jm!H z9c`C6`TcKD=REnR4MgCcG$h6aHUq6%$*!qwG&h)~nSgn9dVcbpWHZ_F)s8Z~4Vf?? z`E{RE%9K)FDWyxyUf;GJ?*1;2IctgE(%k*Y3YM9QhAg$FuoRu2NN_~$1rM+dYoBL4 zQEzzb%${WJ8)#o&_LBt<9Fg?0e<^K1>_hp!AK!jWt$y`=d>(tL3_4#gR_NL&;1y6gEt!uC=mZj30Zg2xceO?Qt7x zD(a5r)#e{C9uZf7{?bOSdU{hkMeij>$zXOTl}lxL=q8;wF+05u>&dmQwfP5)g&`7i z*Sijp+dHgF-EOzh9L*;!uNEU6F}Zp40%B;4CT4dE)a@M_FxL9QS9KeW5k~(^Zmg$c zfl$`Ji>L0hbke;2Pvh_G{#`5fo$zOD2)S4WR%GTYAXqu_4|t66N2Yr+8hzo}BQlN3 zKS2@&XF634^&4VazRYD*{g!mE`Azgy^;D|VkSR*W28 zw~spWcIF>8LJeNm5f7dqJ!TVCoB)X`0X}zI+PCd4%C}bR!C7=Lvm3~`lIWXs-Gg-A zqpLI-vRtZT=$6HTxTp1V9`EVq#qcqlbw&{1YxrzWHCD`aCxaE#+Atjv<=%kn2kAh6 z>H4568gy+By6P~d_NKc%^rpvXZu_MG-vbu!WxsZ0dPTztqw;3PGv@u~hSsmm`k?D` z`pa06)yHmsc5+_3tEn!U90*S=NV2ibaywt&%&To%9tdYXt=dVp+wr*e)0NsRJbuq4 za@#6q)Fu2`5@3&a8G{Oyiu!%oj^CyBewAQs&yUI1swdNrMb?Wkin+_gnb<*fyO5*t zgw@8LZ;AdIa_FmoxtZ&L$g&mlf=NcDDBDm-V+QONr1kp={0t!GZ&KF4(sGmfOkV8O zt6Bh)pIZG>!w)&-O#sR14?iI_p%Ro^PlHAcRBu|ZW19F&*+q~yTrm6Li;~*=Jd7R& zMm}6Vnd@-)~AF8^XH z7rx{GadvcX_6LB-pGWj!f#3J;`vMKF?T1m8GH0p!{3%GnJWNrLqoeKeX_yX==xZ$e z92`kGN2i#5quYgM)(z=4LIGZk4>b7%Q`TyvtVQ*1ktgOfBM*d!rO@dkQ+R0yR%eTHdgm<>H_}Q1@ACAh(hK0Ai9U zWST!bNzr4hia`%7sUst23q4i~JqD7quGfW3BHogTe7{o>WH$*hf;@4#5aeq`5XMU6 zTnbaDo2oFFGBjuoCE7Q5tv&Xk_$rDNt$tW#DB;#jO1@=k#g^Nb^W=GR4kl(8LU**p7sIh!_;i0DV^3JTPWZP*hFLL=SYLnYq?V&Pw zkq`>fJ(>58x;U{Dy+ueNk&t%+| z^|9WOaXmu6l2W;~8^fzl-T4V4Alg70oQKZOx+dhR54k=EmyK=NBJUW>hXS&B;PCcC z4Q|7?-nEvy^;vA`nn3XTvh!Jwre2c)BtAEU8Fy^AX-e z{=vz83x81B=(qsO|N86leZTeEb7M;)!yPT%Vv03Up&SJPkU2)Bae*$^hPi2+AMFOO9cpA z9*p2tMV%3TUU-b9hN`PMSh_8UR=93=YA|;j|6v*FP0NHkPfe5Mc6M5_*I0?;gq8a| zI5vMkcodGB+N(C&xapTUd~9he7YcJIZ52$E+TGU@9yzp?M-?VDj}G_i)7s`YTcja> zZVUf`U|Oc!jhLN=Bx6oZle-gTY2t}tVj8YoC$$I#qxn>-*CWrNT37jPv{ZIgpmaN} zAVn_mm>Wljvxc^QF2eJu@W}I8dB0Yn!%N^_aU@gh6{3 z|AoTA0?K*|q^waX8qdb06kM`U-o^HmA8!F?6uu=Ygt4`+*=&l6fY8_}CDu;RMEWop z3i4frI;kGt5zUh6tH$1>77fBF2*TEbLePXee<~m}nV5#csJ$(xF$s~pBRta?b_EQ( zJUorFeUOn&|0EKcT4qB{dz4q5&O#l)xvNG!n7fPrI8~flkmNZ8?ymA)Ue`CR$4Hu8 zknDBsYi*By!wRnB?RC-5h|tqBAyUxXU{szZCS9dX?M>1p(l`o)J zvwp%b;PM}+=Hn`V{dG3mdI z9wJVY{?ZNYO>C+3fNkbQUj&@AOvJJ@R4eq{7vyV9P7z9)-PxB>X)ukB3rWWX)99Fx zbWAXIkakkQF#ZY5G6!@konHU zobKXFvQc@bm{J)lW+w9l7EEnSD#@<$vy6AKaj(_ZV(*Sgvk%kXV5v<)F|mZ4UO7RG%tsAFX@JWDdxa|TJJ=?FH$J9uYf0zc&=Nh>VB0~2;*(cdNC zl#LufFX3P$?R0LT${ovGUo|yxO|ORF{HWaHbLNw=qC-oV5_I*-#akYQP(qh)iT4`nepps=(x-;@?3eJ_~OYapKs)Fsjaxt zOSpy?GuLz4CGTAnHN$$Zjv6_0xZ>4BjwW)`2D z&uILFNbbuV>GF1N$V(1{{O}gvF+@ja0rFeWep+bM==0MSL6?`p~ zJmT`G*QokVWaR}If-Pc&&}-C3puo=;sp{uwC$etg-$(r0$G@+QqBbgu8pTmciYujF zqkc~#dsS$eG_pqpm#1>IQH54X8>>`sqi$ojZsRN6#_>*I{4|sTj#Z=nDwG=ah7fX8 zqmcMnhr}<*mz&;{FE=$S0@m_*6Q5Pz?3K^g?1#kLByd9Is5h=}iIbT3dK(-PF=i0gjXq!Hh%5#O&7Kk+{y?z1uCz7!|!n=#@x$BDZ|xABQ?sS+OJI*&ftLH3XX3VMPPk9Z0)YRcuO%HM9r{q1%F4l5}(Yq6?Ou`&l zdF4^~7yP`=Sb61fc>+gS2l1jJ942QMKRlr*{v3RCXd(Zx_w>;T5==g@LJRrAnzfUTv&O&2hvMhbp-~(sbWOnAzy^`6&j$XpcQCi9LTYn| zCEK0s&)C^rKyCXvU&uy}t3fDVBK_8@gG)BNN$D3R>D}%dgJpBaF&i>)lfA_|8Yz@2 zaMz})4WQ&GLeE7YGx3|Bj%i*?K-}+}rv~<#Usk zADjHSO@7y5e^Xv6JFzDc?L^Sbq4EW*L_d^pZM89(4SWY# z51BYkZN=JFJCv`Pl}M65sF+RpXMUAHdAAIpaKZ0X21O2=^3UlMMUEGB*e1s_I;JQe zP+_NoN2pi=o&08cbRY?l_8N}N zV}~Izdxy9_4WB@A)@?Qg%=gf$;k!Yr)E-n~A}TfHLfql;uf`uc8LNiG05_>x#!Kc! z1JwxbYSy7_NU=h1@BkbspOnQ?INiw1=2}cyrjzGwk7>wVp)RV3ZK zB|FQDIgfJe21~for8cY)yPP)o3=>ww*)VSe|+%ZC&ZA z+no_kogu+wn!Pfm?z4<=);L#Fev3YR@HJruvE-HWPdZ;Xsq-Rp_c08#KK1jUxhG^E z331dZo^5*S?{2-m-ORjNorC0SbhB&eD7__i+ zC>@)Pl5J|zIoMF3d0gko|7Nb20}ruN>gO-LHz(+7#F1ujAyo`p$Z3SJ@{l)UJ!=@W zoersU0xpD`G+(GtB$jbiNE_n&M|&>T)N+z(PHxC+nTb0 zv`+=KJXjbAr_T50e&jFRLU*8MTAn&VjgFkrIGwhA3LbfacS3Ms_@j-Wf)deI!r6+8NkBnMpVSXTHUSRDit7~UpTlDepqDJlL}QrLNWGY++{ z5q;m6ZEoq0_6_FuVj5xbIXtpUYrDU67thLaqI5l{P>1W42lSReRDgt!(xk{lvWF{Hhtk^^YT14c6{^Hfa{?2yV=a~?P~ zIn^HSye?VxkC2Po>}%S3#=CP#puH}XzrAd!sN4OW&})dgJrvHC6T6XuqBn`dB0F_( zDgz~TfFim)LVXiQYOeCP$yJhE_p#epM%*K zN_$R_KiD-@Q7-?$ynk_k6<#b^Yt5$oU2``_l_+SJC$EpG#;KwV=W(#c_GT2^S+V*z zVD`~qJc>1Wdw67Dq3;I2YmMm9DLRp6a#eJsCW?z-qv zIEsP@Ud(|grX?*dZVV!fie8)J)Fw6bxH3(@ZvjrpoQ*m_jfGUBO4Pk74GjQk42G&_ zoFrXmezOsNm?ZyFs5;x*#XkH9x!B{aFjTWLgl5nlgQvZ%cf5nz*K)wP!FY5c-@;k> ztw;T(J1FFRP7}qOzkl9`AX9H{&EGKhqv(YSndRQ+(wK(9=Th5H+AjC@?IW?iz0sVb zvyFN(R(s6|Y_e~hZ8vb{*q&T20C@#Drd7p})bgz=u2dWF*m9W$v$L6F>hzGv)a)*D zu)$$Q(6uje(b$1W9A5@qAH%BUZ0k%C;MTt(CqB;`STS#KQhBF}2ZknOyl=3o+QEH8V|1zUVjGsKL89 za$A9vJKbM8nsUv?^4Uv%Abp8iM>39h%+6AbMO{AEp)(J2hgDYiiGJ!&WsYh&g)OKo z$I6!5rjHnM^p7us%Y#WWI=o3reDP*9o1OF`sFullvsnebLq&ucszexXMy+1MPRBkT zoTp@ilN;&9>rRg^T+VzHdP!5(JU3%KI2``72j0Y?iBE=j1GAu_DKkEQE1ED}6!ysn zj0fkB96r9h%`<=YaM!ivAIop@Mddr?H|65;4_IG&P z#hF)o(?c0+L2mZ&(}EdWq30w)zLzTK6QqZG1?Cviy;a&+{+10NqZj>*M)P7VEwTX1 z_ld({C45JPEJ8uX7Bf%QTFu`yzMOrQj_)U{|7ind^*=3Jx6%S>OUL$;;wk6z*PC*l zO|oP=ePT+kO3zX0EvCy(52jq8(g&&ZW{;T^U*B~(R7d|yKJm6E`4R+rEl-GdPZQ(Gf_=YA+{kQKG1+0j_J_-4 z+b~V-W(cym8+D`FVysiS5_dDLb_xe`Yun_Uxi*#%E_m9>PWmz(Hr<3@(_wqt^Jn{u z4D>{Zwf(N(=e5QT!({Hho2)5r#v!jBX!{V1Na$Ad5}De*zM>v5)|6dlZk#{TeQo*v z`Lo@w$>mXglE;?s`N$on%81qfMJBk)r>9eus~@GGK$-7fDAmk z|$-q z5VU@g9_bJN6Vd2Qf9X}jV3d|$5EH2nteenJb`_|5_?~Oz2&aR@c{$br zP$|(DeNR!pbx%5O)0PLX5Dt5Vme}E}6R%*_1g}5>VLq?PfCo>#f>|^1icU6@-XSS) zxUwtK?U}{fOzsdcyC(s&y9Aisw``K#Vt=hPWB%xOoKR49sm(wI#;#Ov8P7WWk%M9deLM>f%EsF1-d3d|dg4h0pO6)Ac^Ao(EHV9x`u+SzLvR5XO znl03nC8o2d36pCHA1Z6KAKq+xC&6A#4sfRIEQt!?w7S_yW~l=+&saeh8E)_YuADA`TS9&@^wBhKzB9t{6Ux=c(wnyO|H5?u3kVk@zX2zE+K z_-QMQ4^ix|!&1U*zCh&UmGnq0LY)HV}&m9ze_9MC!! zp2v2Ixi(nYIp)D&^P@DW=Y| zxmD9G(Eh$rS)lhzV>3@Qk4(8YBHE*H*F`^JggdsfmYT)Bs!wM1GV3k~%c#H!nbXUe zPg1R6vu1+h?H1N}+E<1BE>n#Tb!&2i^mM5#d#UUA6I_?dtq>}U&gihE5h(u+{$tY< z2*44IcHy89JOqOKZ3Lmjpd%a*yA@|5z{^5$GC`hyLZ0Y{3h`4C$6u;Y?g;)`@(b)d zY|uT}kQ#lHxQ)Oo1Qm*(_CaltbKy^Z$)W$0mkU7-JJxig;x96bxW7Z6sA+D!GgPQ( zy)Ilf`Y_8o!^Zk~B0rg_qezZ7=@h06@BipwFuvI0ulp*+ z-`;2*sMy1WuA^vy6(%+c_s|)&+?<{w_ndM$kkb*RfBeR{E9cPRB z4?gDhAKo74NMyZcKRFR4?!si(F410B{uvP@j~UJ52;i=7M%|}6Wo{jJ?#g=D>wijS z1@?0O{HF5nSO&^Fb2=#<$@#tv*6`IX2)6qM&8?_4VDpLhRg&ft4cF)+9-dfJsrnr3 z8y%LzgggaC=A?%s={E(fS@^mXh65GtT`v?Pa_7XQ8re`%mH98Xd_Pw_bn7)pMlQr=you#EpPR=*`^@#g+3P|8eF_4&gin?2#t$Q@7A zNcG|DwQ?7x?Pi$a#HLh_+QxFI=tC4eILdJMQ;_v*8Xy4vYp9X4TLOD|u=ZmN30R{9 zI$Vw39Oh;7#yGN~ZMf1EbaBGCHjuxLrB${erTe9s!>Jtly8CT1hI~+-{J`b_8uf7I z{80Gzuv?je9T~uui;u=bzn~B=a{0~u(O*gVlX34O^2o{f3z7cU_?IT)?>7%9`~h-< zp!;9Y9}W8N{1^1aQRcrz9~o)>`0(xTbU=TH@sMaWW#I<>+X-^mDjKqp!%>-W71dZQ zuTJt{W+*%NfU7A`QJ)peuQw_sAH@Hy z&kBasJ$Y|9)nk=~-RA4f437ZGZ0^*O6f|40JPMj0A+G!Djxinj{U7Pa;4`VbdOkBB z-SjhV)59Yd-e<7wp85<0i}~mBw{uHiAEF}fDV}i6tIa!va43zJ3Vhv`w6C}0*AkcG z6;3-iN39Zgx_hfIfK%=Bwm?<76&A3thO2`0O7^CzTS*XX>2oDem$HGzB4qLFq%pi# zrz#W+rd@9@76=jP6j9dS0hOr4q>8ew_I)AYyh2xD)XXF%A--bmUg3G`cA&LYp{Olo|d>d2Xm<1opH7@IQ!H(G-mPHA+ zCpaXk%h3^R^IJI5*jYBm7;;s=yT2B93}!k-MrV19Ax-6-4C|Lz<~NOookLyjb(uSK ziSqSr0jx+*0_rpesNN1xSI2=G_ius1oJZcsD@yA_ZdxCc>NSSciZrH#f1~23m{i)G zz-Cg=Vz(uP5K{(z)OqnVHtP0Nu<(NC%CUfT}HrTu}H5L^DOBa_c1nli*<* zZu28cA)>Oyc4yMPIM%2BXJoGw9Yn2Kp7P;u4)yPl2IIjO8I{oaTcItunEe$FTpn=~0Qj}bjelt;OWzBh&(q}7*2DB<_@8G_0} zdDfIkz_a8J5rQ!ahUzlOXL^h%bF=QxR7>t0-hJu*&Ju!={GSd)69G??Y%=1cI)3df zy!#0$ApN6qpQdwb_7^W>=Lt)m=tkO)*&h!%H1js(lbN?5)C)wc0J@lZ7vclJup!zN zgXo2e*_{mfesd1rIt*k#M?#F~OwBFA#iExBD}mok<0xrJ>&!fWoVuMaEhJ8*@~L$`nf0Xd^i|p)u9I!& zZet1&;ewz4Kjz*9JgOpl_)cempn=;6YEY1@zP42o6&7Fm9k~7jkzR^QzFICq##;AOyPJ>sZ?8 zZ3ngRWQcPSB)P6;mr?p5Z{rXac?SrLKTNi}NM)bS zh(k9aeKQou_OE&oRZXRQ`GLFaAV@pEPO1`OJ9d7Zma%R6Rchl@2|h_Id(T%kRph1Q zf2bwKzVbBblST<-P56|=_NS!kidN6^1CQc4_C$FeahGj1Hy``R77k52$?Y&(dA90d zXnvCE?<7BdN}8Ec7Hul;$0Z=<-@gixh#dX9bkeC`5(ZYM7H#ow6t5_wQ7g4~TR4|G z=<|s&uMeXeg@>0VXU<5t^ihY2pmdo=;VOmJ15HSe1JTSi*h ztx)4?@OhaC#r3hsFa0qxv1ctH*l3JaD)$?S5j%9f>x*T6n z*Rrb9FGG(*rbb2eGvA^$-VR#Xm=lv)^U+n*=X3DKkp*T4QOQ-=~B0VIM2ikU|whsUPuHQrj^dhEv6mKw%(tdx|^6m_@7>hyTjp6W7>bu9p*_On6mMgB-RC3XS z#GNYmOwEWz9HeJ(6RS<8%#o$*oyGqIYNPZMBaaSOx=VFBymjE^>`VN`z*Z{E-lGp0 z@Ch-|aiU%MNf1yaHZT}g`jkxB`8F!Ea9v=w9i29&&-TubNfhIF$AQ`WOzY|n!+jYM z4jS_s(q%*l>4w7MOU;_2=O8i@H4cvC`u+!ZNQnABtnaoXlI#0~Pu}A7y?>=I@5K-N->C0v$l(9Q`rb5Mdc3KH|4Cmpu3$F)FufblA$RK);b&Fk|M+`kb@BtI2-`dhv2@nxst@Dd?A%61gXEaZ2PLRs8tn zr$%1St>kB!gm%l%0C~Mlex8t@cjPA`Kb=UydS&jumX=bqjt}hRpRhWw6@8Q+A%3hU znX?}CCS{H3qg*>6iM_8;deZb)P|56dSTWMJl|D*AJR($_6$2+}whpUPgTboT-v10qO;;@hHo8N;joy%Jxi{on!3xd%oGX44 zWu=Z&V@9DdjC<%xL?WNbY0s?X+8e9mf6!)Jh26~(_6L&@&^q~F7_4b zjbe+e%coIVCLzQ`#=qb1txaTn^?S7^xQX}po?zg3XXIndBE%Pwj-(~cPeTNId^0dZ zq1T&%9aY$CZ3d?4H#5g;PN`4_2n#45g`XkC<#G<(zy;1mcSx}VPGyu#&y%ay93m(t z;+jzSCrq5wL(aKE#kX5wk!j^RtlDUW4qI*XKI@BUvnn@K zqEjrlaze$1`V55sYlTA$RHq}|P?o|hz+$I4Ws%dI^c+^I=nGiY zE5D8-;&LwxUBVp|Dt3iCG>Z)xd&azS8V8ySlOKc>#? z%)%$=--eZfpbs^m?UDM^kq5z9c2T@;{nce2kKE5DH5&f1>&wA1BU(2l0rJrU6BUMa zdb5IEkP=qK6V_u`AculvA{fiNt8+h0*6AH%NzeMUr`*yc=>*xf$2iQ|yrl6uzP@c$ zU!!1_%M8c+4Tc``gbTfV_Llm{T)JPZU{3Q}v?8$3CDn`!tF1m-{6Y{ujc*Wj5du)M0M(m`9jd zh+KH`HPr;s#M0&BWKJqrgmJPm8x;&ElXckcVvj7*23!08`XBVya>-B2wN?%P7tKAX zaM4;8_pR%T!ddd}SBg~sYEl-zUNBvpP3dC-(c@eNp$zq(wxbwx2B3p_b(b)c_|2O21ZzF@z3a;`v#0i|g4kMr<=O4W$ zdEPQpy&>mUxnsfru2R2)JKCUJ&9XBLRUK+mZoZ?>op7rN3T?6^Y zS(mGT|2+P4_|N9w&VMHVGH9HyvXry1z#6x<0CtgzVo~R5LGBg+)Z2>5@fPh->R#vS zR3_Ly#q#GiXRlezX^K}AOKBd(Dhd;|KSHUm?3h^YvUEG1SD)3i>{#T90x6ubTqc&f z&ZcnMQrE~DRkW*!h|kNKzm<8JHeJSfK;%IZljv53Fm9=9ih9-avIq4iEOq@Bz`OJt zg$d58V_xRJA=(6a7F`+YD|Dgn_T!~8aEsbd_gES!bQTd8sR-c_NVwZ7csfL7Zf{{N zpCgmjhmdkeI{y;4*#;FuLCh&p9hFh_JXZ^#Z0 zkz2-8AU{gk#BC1Aapa@wF%*p|arBrjGhQ(>eH{bTrocW?N=h>VvU7)_Ddio4`Tv0A z2GvWwDUN>^xrm~%3P zzBKet&T_eWQ(1l$dA*NtbB)SUwi+(fS-z}b$kLsUj-t$9U(+!v%auATN<&fM2_Wp2xXs}aWfwa%93>3y=>%4%6Q4s^+V((C(N_OQ zaxbL2SXvks8hrukJJx=N+x*RO;F%_E()P56hn-oOWF-d8ls#<>qUE5%OE2va@PAc@(qGa;^qTVd> z2FV)q_q~NYY%|D~P?jd|DFu~0fqmAB5%NI#qV*~=sX~V#2qL6=K4L}4OqIdRx(ihy zJQw~2PPV(hec%Uv%m;GKv3Xp5p5$lCp@1LxZa$DB7c%1T$@7O2B(_{8UHGN6c=JcO zl!@8eKpo2}9C2t%&{Vvu7PG~Ro4W^HYn`@T*r%#xJ&Wz`@!YsvjS;cW(!CQ!J zR=L37Y_~3dvmUU*%~vMo9_swo7~9^IeWe6auKjomx%N}fwI61YGR`q0oY45_@Z3Sw z-mN*04$qV4`GW#8x3W#W(93$&YmToO5#n8zN{i6x8R!f3W6CB*Nr7`GR zVXN=uTbedJmmB{-VUM_%YkAt>JhbWLW`&vv27TKMXQS!c=4n~$DQoKqyqnD~s1bUE zg@-3N^f+6jnR8Vk#PXMUZFF$EPq(?=6= z)j31cY@W~%);kzW7o+)Xle!kW%p;D#UUcT0bCN4`AWjp;*9Kk7Tk5bjZB$+aYSXp+ zEfG+xH=7EN`b^wmtdIQeqCEUUJ9AG4j;9%qq;O1xUUL@E?wDS4U{)PxB`1vPPoyCS zW-Z}3DIYj-pOeV4hRg6c?+)zZ%o-DbP43V`spfHB2UeG7G&%DdZ0LJ!iBzX|3JtQ+ zCOg>zyV`2d(4aKJ)m{Osw;ePa0dsbubU%2Ce)j*3MU~@d11j+Khg2_gtLvGx1M?S9BXH z5gD=lrDS=ZXO2nqXa7=e#w=V;TctmH%;Ty*?{b;DxvxR5T`ql@eWK9l+>^~`Qw7wo zr=NsQ`K_|q5WPsUvHEvX z30|RHio*>`5F0;E!JnRt-`rIHZE7pbTcR7KvBxFy|wv8-)!_v%_mhSg5$ zBdL2~w70>_)pt4=i-Q9S{aV^2vq3hQ+{P;>y|!?0Je%c{Ybvfy@q2!)xm!qDHuyh{ zK0;#YY*tfI2=6DZ`Cq5ZDkJaRja}`3@F|Pp+|B<+{*(C`n{Vp-e{=UQhTpPi^_VAu zLvv}!!J&DkYpKkL)^S`d)1j&o89)Pd>2Fi(DUP>!gBlc>y(R;_sZI#cd=!1?W_*Xt zdf8?B3MEk4^L7VSw5Yes8y6A!D{MyPy&%VUbcIZox*jt6bo*#LlO>02q$f?5MxQcS z`iP-ubRnG~X|l8>Ft#Q?cA@+C3*j648D z8E69g9~~!cWEOTvW?=`Y7g#H7VVmL1`cl!G0c6510edlqc=51M`5`;&@RvPh;lw-* zbw8$R&&yRKlug|{nlIA*(GhqsC#8I3;SQ!y?y@#&3Ka-StY1D91> zd8DV5Z@`HY^Lu6aoS;mz%<<1T&GEJ6W7KSGi~{%ngX;=2UQ%iNFGw0E>Mo(q80YBx z8%!f`t2%p->FvuR+H1EDBg9&nd(^?v_RL}C=)U}9^^J<5`QUUtXVWIcPP_mQ9L7B^ zM4^BAWQQ?zL|5*!tV6=w(=^%m0ndwa)1_aB)dpa5*xTS9F!!ag)!^-LfigOwjV~Os zZZj6qXjy)^szX^JhJ+Twi=o$g_LS_CP1lEx;E-ILs3y&6pAtU)muaosM;r4bQ`$w| zP*q>xyrIwl9+5pbl=YOcHcT5*;3@NG`O1c5BP|cOv8k$Zn4O2QGF%h*((_lhtj<5t zQlFSbpPD0Ex$%j#xzii;RY$((a1>)qxO&aS0YU10c{(!(na#@blzFm|BPZOpFs_=( zWK4Qw5UL`iT#oUU4=2~J$#exBdH;JUw{tT}QaXYzj)Ilp@5zJA^lPC#i-7mqR4IwA ziLmopZXmeQF&3@6OM|UmLA0R&%7`rexuf%1d(ii!1`wqfAI*831msw>WQ_*N4EnJ~ zE2|Y0>Fkph1EMzCIYud2twFMETjEH@)!Q0$Cu2`Ch66nt<;ZruzM|dRMqBCR7NILW-~9LsxgvA^&&Lb4cU~4P@i0UfrfUo_7E3OiQuoydkR9S&HZ6 zC+`^CtKQf#U{CJ0t};Vv-Ur4H~^;S6KYsDckEX?AvW z^04UOKSDMi<_V$P+r?0nAN*o1++8LY+0wYJ61yC?L_t~mU@x7kOJH4O>-k3PV#;qH zR-2t3BI28!CqHg|2)%&BWcz?Z7(axrP_KHkbAkTUKgXDV5OM*2NXKvx9h}st4x;zU zhhQ2KJde6yGnHehNB}iUFDlldm#j#0b!4XiB40%F`Uj_Z&}T*>&EHbz!H3zo{1%9B z9+wfNHN-lOC0JII^_v$b*W=&Sn_|Ovkr&UQBmJRlsW%K=NMTUv-Sy3w%w7 z*?yFJ&oAmX^nki8#=+SKOktv*@)Ikh^4rB`Bl9VGt@OgAUYqDMr}S6OkJYC9_p-TW zK9FgSwR0*I^MuFK4WbmWmUfX?+`;HiqXTm`91c6)kuQ$7Se>K z{9zJ(_K>DPBz8APO0|^ zzD{XV!RPFhNy{*Y^aj^xp-$O{Dy-AZV{3We*7dO-`lNjf)%+W!%R5q+_j<8E1OL`R z-#Ujmq5y3Jqq0gil^94WXQ}}5=Y9fm*m9RV5zb%12xW8WMj~33=|6G_46Wh;4)cc2 zj_?q%orXA$V%zI59{1W)HVd4xCK$?=;>lKOGBqm_iJkJgs~Uzqaysnj6C|S(9TbW`)##+;EHJfM>|_ zgy%1kJozJ7qeBvuVMhK4R;U0$^M-+L)dGmf@t7mr>;X23qrSpAe1KGmYx1{1t9&jt z8Vf$+9e~2EMfI~fvU^N1o2Uul%(Bj>VW)9{XmOdiTnMq5+39#LGL*n+5)ci`54r2# z{#$v$Qy)I`)YtvTEU-NUJm!#zP<1{Rc)P-U(__SN33QZJgN%Jfz1sin0LLG z*=3|^Jm(EdBhRbCsNq%EzgvvEyce+I2_U8EIK&5j;q;0XCTXH zREUz!H`ul=Fnyo0ZM};^(>Yubmg?v`;8L45uwCCHkDSkffzlQv8{A5apQEp5w!4Jn zTp3DlzQ9@}nNDF0qxSKeQ#V zULZO!&5+_tThMm5;`IsqhjJ3k6P*KlM!HWH@3I+ygSjoJNpNbJ<>BUoC{+-Pa)Euc zkqK5i+65(_l>e599-nwc6(UJb0^OgUC_C88jVu8bRSNDaBm-#MDdgEPkN=W%zTR!H z2$Fky9dC!8l2U^lN(vir~Ammnpy4Wv3qa{tpQKH$P6*eSM$CA!Ce8cpK z>~HWtPBu11!Nbu8Hc(=bO%jPyYTZtt=w%W83v)__UQZIMrM@`>SXMRLBeQjTJ(Brgy%dS}ddP`Te zbFMjN5hBl?-+;+2%nwOUySBl! zW^qiX;>W3Knehb?@nyy{@5wTwMP17gcW^yOOjdS}+R&CGd%B6R&iTi|i zr1rT2=&L{gHup&^KiGeiOU`Oju=7H5GseH<%%}r?R6Pvvl|!XJGZ?~8e1?OsWHmcl4dS4?h;8=D=3XZ8c|OJ2Sr9SWA} z0yH1RE5tbBN>OkdM;|SDU!lKFo!0i@zOs_c!7-F0>ftB8zx`kGlm3r<8i)N@ou?46 z(^xeFF%ZlCD_#)*qLTHUv8u1S(%ADDk&q}wQ#b3PAUTFS5F=eBq%1wm^AP_eE9J(W zDughB`;ZDo{9zbEF?Y~fjNo7RjXuNA5*se8o5xuVt6P^u%k7jU?W!TxLWikO==RV; zscNZX3{=^9Scm(nBAbomH_`7!Xy8fB^_&?J^B!XIce7n4FRrC5v@-=u8A`!s)p3Y% zYwuJpbDy!yRjbDp#+Hs%vfGKhh8Y4AavTD@nxI^0I&;$yw8KG?e<3Kr7?jLY-bA9B) zc6ll0_Fk^%P)u0_Av3^7t3GqtP!jZ^RZl`wU3TBrtE=~`Ke4Gx37;A_eEh)qMjj2R z$L6WoZV5KZm_rQ?f;T6-U#9RQSr0*CCfPZ76;jX zMEO_1xf;TracQIIK*~FNs1q7>P*fS&YSulDGYXRL4mnd=qIV#CYB0R)IK0x^S@M47ImvBoH2ikL}}Xt2dJJp68Bt#Jo&&%2X{oOY&ZHG z@SpY&CZhYSVGeK^pi*Z&PY~EDf%myb95$-N!m#n^i~REbiBa_j_5LKklO07n%a@+#SZ zPHwl4LyRi>61$E0Ub2=BJD$6_e46l{BI3IJ>a3|`FDZ7@`woG&^awxW@Wdt=2gM;%@ z{Aom*+cTT6zPD1=zxfRnKiaIG;~!RWi2c2HSu{0YOZGj+3T4KGjTG^y!a8pe-_&Uv z2zxAc2ob3F+Arw_ZVQVsuM!~X;?TTSm_i3ohC;-Az_@KRlah~wMcWCL%H{r27t)P0 zh?06Ek7BEmA0J&BhJfqQ_?Un2(Gb#LwIh@w`NT!riilGf7;v zer{A2kTw0^)j@hVMh+!x*VBdr!sg@hLyKJII!C1H7Mc=L^&Q$m`U^&%jF-@ZLqPmX z-MGJnI|`8Uwctomv|-bMH)#h&wt3f}3c#|=| zM17=3jVI^vvR+onkcQX9l9jw`4M4Q=Nh0_#8X?mU+#K#T@~~0D%9YN?(YTDJpBVX* zYQV^g$#4Uo{$|d?YIW4e2PzN(HkGnAOrGd%qx7fv6QVyB;T(WIp8e z%ucib%5%xHTm=R0tWUo;&N^V^zoR-z)k2ZLkII%2+(uC5H3KtFD*a1k?PlBof=IfO zwe)Wz?+76V0K_qDlje@a8s&FwI}s&&RTpeBs;)(%8IKmpFCH-ad`v5NUK2f~Rs^x^ z_!(n+e0io4YkSnb5^1Bau+=A+KcJAcs?dj}&H%wrjpGZn6#i!&dSRhl8C*#pLjQEHow`a5nKalnZu$%&f)Zhdu=)0;BmB{j3 z{x8`fa4IWWFT!@SdRG>Js6uN@6E}3QLa?(XFz(EMYap2qzHjt7v- zQSu0kVX9$edL0>KR9Vq#&+zNS2-+L#;NKzRIz4N-@m>5l*7Kk7Pj0+L>?bcyIRprT zCZmr^a%0^g&{TjXGAsVEqjJH12s0q^;SjUm4{+X6@OEas(95Bh>f+3c+-hbrqjBviqXGEyPRjXB2kHNPdSsFn`$9Dclx@bmvxr1cG0Ri3 z30O4>8}sJVL_ka~G6h6_VGl=nd>qH9a*QB$(5BS#q=rjm+JU6E`=w{fy7`Fu2u-py zf4)YufYEu}B$2u@wJDWlw9sElLP=b*FHsIm6SZU7B?9HTpU^RZ9I5s`?T6EgjCnQC z2GLtuQMtv)`xq?zi(g8iQg$A`NTN~%ERB@Aumq&N?EP<4%FW7>4MH3CDw~XX>j;sIPF0G?VjD)>V#+qAU>tXXe}r7g zcRXoLn!H^^?4|h9i!J^sJ47YauwBSglluQoqAUl-g)yl|jdo*nNw#8~cdO&OdwQdno3xS8INJ&sjg6IY@B^2K?#bRuWAHQ58A*7k19RXq$YfzfHZ# zrlVN7RgR3&<&#a5@}W4b#IR80tsgFCD-!*8x!=+Ir;BC#?G2TT>+9b9FSMEFx2+gX z08tPtUaMZc!IWmX(D6e2W2pEE9X2z)MXS~J-0!UjyGQIAX(c!8JgC^%o%T!An<8^Z zxw>_7VKP-u|EQ?yt}!K1)x(OhsOqC$p$eK#)1MR_#{3VWiaG7ANPBcG5s?Yb)(#T& z{q^|%wRInq0Z%Riif;gd+J!=Ab}--=%;)$D-=<$XP5K6RPk+_t-o8leJk>fs;_wI( zuWplERr%`8;(_wl(*1ht- zuEXkLP`ZY(E{h$tzQ|>qAqF}*22#i_F zdO#gNV}bYsJ}7@d{iZ5^LH#&^7JotgQl}_?LH*Ju`QOKiZ9fiecX4RjD6;k?65*Ao zJQa^=`|wJ%NqIVWOvmCY&4G6?2d)8aYeFS$$W!zO)?|5FHkIFDvU~dGfOG1Zk!~*f z$RFWt<~gbQb+aFGW zO`pmY>Qg@J!Fugf{oCV0thtF>+2#g3YD#-)V!sJ>m9QEz`AjXUDM%#eGvy1V@m_Qy~tl zeU02bLRr)ITx8(yIRzTCsMnaaLEm$|eB8HmcD8Y2v({O}o}z!b;qz}(^985jW53eB zJml

      +gEe2#H%b)Ah1Bez7CewX+jbpP@4-p4Z$px!$!Y6Q!i(j?fiZCO1Jbm23K| zIS#CG+YVs!5W^)0Fb{_ssI2tkbjFBunFk};?@$*(SM_AM_=H#5NvVX!r*oLj)7OS& zoOLwGI5o~C%h-;xF6OPLOWkL7Wm<2t9PH@IYFWcEHCl!~NOo;oVsn_NKQ6AU^PiV& ztWx#2!a8&%XctQ>>&h=?CEnT7vY88PMYAf5Dw#_)XH%0jk`}cgE>+shRoA7UB?}JD zq`f8`oJD3{n=BD^|G$2eoON&Am5XN|#b1d&FxZH`AHV`t=!qX*kH>C8MIBs1liRHG2)7;~={YY|L#YNI64oCOg#yV)cIXI?^ z6_~X#rTix1-*kk^bF)N6?9Aj2kP>K6`eJVLD8A6HzTN*FGVN+KjJ}d5Dq}n4nRY9V z`GTXbjwz%xpBq1q5iwUnb(nQbgQ1rTJoMkQFX3uV(U=uR)d0RZxS*01(|-|tCLBuU zN}8?YdA63PXIt|0Y)hV=t>tOy*_qmCobv|M;K0@r zsog0oFsj65jDisebU^B~LV*SKkb){NZoVZMK}XU=ZdRZC?q5xe%u0zAYlw?ZfsmDy zh5lSkMCD+aBq5MmU#nI63)hcgmhwIIg^}Lv*yZCAgKm75{B?&i)|q+A0h^M?yuW+O z``%ODGagNXPmK4bQY>Uj)}7&U%oDxj{{EfUaUg4kBlGA^f#PeA_en{a;qwG$m!$ab z18Tg6a#~QO3aX1hJ$QXMqdfuXboe_T^!JNWR%HlN`h9<~6{-Zy-YJhX7yss!OQf7qK0)*cg=nlsG#h$-!CQ0PzW$SE7?q#$ilTF_a{s!PdrdWg0htue zlkPt%>bTo*eJD=5siFGgsH#P;m541Ts@BbZOQkdMy-IIL%zqvEVz;;$yY;KxobCTE zctuliW>b36=MU^H+IipZ=APk#=}xVQRz|++h<_&-SzVo zzO>mT&6kHW9iB+yu8z}r z28tVxNQ3GT&R9XfYETFN8Y@!tK#Un92{D!!`RP3df>WMCkUVp&rw}0TJVg7u$0!N# zCnMV7@L=e)r9xjTI-zZFPQ&1?Y2m@S0xMZ`!qH_YW7K>(oE=;MBd+BG31f`V3_>YC z)>kVeWo*6#Phn_(1{PF#Jy=L6pXFGU4uDS-dtV+;{+^LHM|sK)ynTIRw=TSCQ$So;#P_m zI~iFvf6d4e=4gUH%J;Gy}uz>4+B)-D>leq;>EE-Gvz16lzou`$b%^tYNlME z-d0?wnR2pub~xi%P+FyKdNEe&#&2T{qz@so^FI#z?$sojkRl!bPs4?M6NID(Zx3hu zCV}XYIHEZ*L@_n0=x5&~G4F{eJt{cF4##pl!8RVbCND-E%)xl7uwH34=I{awO5OQ9 z_5OcC9%FwG_b9Shvbgw7NOAE)NEMR59VR6I^N?_HIEp;}X%y?YhI!3`S+8Io5ts+B z3uin`z~ax6zr^^nm_lgj(1DN$ozV#}GY&R44))c4VPi{qja1zTRdr&tTy%*lW#0m0 zE1tlY)ZtvI!*_HY?p1a8ZRGBVs>5Eo4kxI$6}@yF?rXl0BHXTv@ExQ}G25yltUV}2 zm>SMlPQWU{H-C;5VJ{SE3E4`3MT?1#H||4UN&O79>Zh#-&*T4#`q7QM)G=Nw%~|7d zQjHu~plZZvky`4J8tEdW&fqGB`1!q(N8c2`PX@Z555!5oEKYjQ80nE3I=M>Z-vAfZ zYSd9s3Kwh&^-3^k)EGDt)H#g9g8I)1)F1sR#+A(=)D?TBMxC9aP_Ndg7h0(Q>K3ZY z1hoj+u?bWQ;;1U)sJ<2v5qOyVhq*CIfDRXvD^=8fJo=`TU+xaRemgZJ+GA)2KWuMl za)$#FBY*DT?oE@7MRXihqN7m5JYc~*reM5^I7G+5M6UjL zu2bTg@AEM>-$CItn>X*HV*~>;0C5N1Gtd<*@R&ofFf`Kb4mwaVA392&UULSErUysC zk?4O|DDh-3;uKly4hAa(5A*8wGNaa}=8rVDb%z4-0WW(V?I~6y$$u)KiV|NBr&wc# zd6P|DyqFr5Vnsj?LY{o=B7VgN4@zp^M)vH!IAw6y*?R`SDHu}fJuMcvJrpMloGta$+%x=@Mg)#VDqGVqS;MnYlA) zZmQY-T62>RUNa{KuiC0^*>oa?)EOS!cuOl(4UkrzDT>WLxPEc9s<|F;TWYS@AvO0y z#HzV(30O6E;U8i(cP_lvy=m?qHC+*8<;*9iXR2&K^Wh^WTO18Tvu!N_>A2BVXbDXQ3e?C4tR&xP=p9#Mqf4Z%Wq z<-n72(&AbgC>|ix&ln?P#vA}&)_{X8z?%|)om4Sz3TL!U6m!7uW5v9J!s%lE;fssa z>T7B9rQwVnU&UEskHcohVW-AmWeAyzI90^nplMh|-a_n0*T#u`40I_oZqkxc?esvh z1zux;FHV3@6z~UcVg8#S!(0?2c`li2lE0#JDt0tq8P3Q{z>bf@j)}v*9fP&R^~2Pa z64#3K(=_Sn7A;*9v~1fKBR!k@N3ukQ^m8=$2Y^XQzd?h=s+N}oTuA>t0jp7MdL~AC z14L-jd&kHT(x)U~{~U+?LmW0G1`E9qQE8FRgh!glrunLgcr03ONzl?ok?vFlE}vRh zCzW-FtQT%o1uq}3@Rg6|fprI;TuPYA2Dt2EymdMS7O33(PjKZa*nZXsY1Oz<^=&t*#Oxqjz0&w&%eFOKCR)xrOI=r;^=y=9 zgR6-+Wz<7QE4v?7P?TsDkTMN`)8Kn0!j_sgIb6kQ0N)y_9*`&9Na-Vot7ckBWFFB8 z{rXVGd05e=w^fs~P$U#A(pv|v#nyYRJkg?_NMcmHCEFOr2A#D#^oB4?7VPT}%kF#o zpf6G4$_{*s_;z4BrPX|z8&K6?ru$1jf7x1E1~W#gv_e%=Y@u0LrRsJH4v3|lRSgii zHRwxekuuk|CbRuC)KClRW(Cz%pkzvBCtx*1*Hf{IE8ZEaxW9a^r)1GRaj^5^U}wd_ zW&);iOrFfzbjF*=P{`ZYU lh*~WL&e2edEvPyLHA|p`yn7S*{`JWic`uNg?kDLM zdBYN5bK+nR#KAuM?3AT|%%OHyD(+osWjs`6oUSrv4t4yCc!4j8W9$*f7z87YSaz|+ zFo0T9%MC|{_tnl`w2PL=u20BRra7jnPA*f13y;b~DkbtGp9Ca>+82=OdIcippv9&@ zWQQbGBNc|K^=zqpJToP2>rrNjn6Ew&c^WVb83?9c1l4r)Z(yRAj-qi{z4R!(l)mSC zIeH}os-BlNJk}1I%5RHKP;?icr{^Bs;e%Ay)%~Qp4)2zVfFBV8z)1nS{VrA!XTk+t z5f6W=OZ1nI6<>nwYlp?NFsj519-Uj-b<(yaooWd&(z#l7^9EO=bZ;qw{`_k_y+LWq z)4lHyFx|byZJ>1Td*rE#Ocx4G<1JiOuD&trkzGO6@9E}O->15H1r!KvLP?F)&1!k8sQ1dWPatppSFF!2D{z@yGw!P z3D|?9!x>!(Sao^b?#XB_N;I9Ro`K9yy8NS@Xbwy(~5 zJ6TFII&ig6_%Bdd6fzSN3P)+MS1qu03T(cB355?OvVNr|M&aMcP*d36qVW0zSalq% zA`Z5X#we7r38E;p_5jY*Szl#kJwj!Dx}q??KUbh(&ahy5DwwZ67xGwS?;v0?&>qh> zGoJ5M@|8vQ(gaxau~;c~^HG;#C?RWq?i;nLJ3Loa?(<|Otb5}sVcmTyQ+nX!1h!}6 z*nStsc49j{ZwI5az6zow(n4uis)~%t3MMtJt}Ir|r^;7G_sI@)C#;+4p5V+} z=E#pewvICwZ zft0zz!X32g`9q|4q`2|=VpM(B8DM1;M>;{Wa0nHjC+xr;YGeV75Qe;Xr7+}{&!iTX zvHwHBs)a`v#@IU#HfZ)n=yMpi3H>j`jL=EeB5|@4!5k~tpv;>fX7VLMiV~s(?Va>IxMdlQ4aGL&AJ8MI?;2auu#}TOgKn)1oGM@*+}35ffD6&AQ^nWiBBN zJVI71M@^cDA1Q*kCb@OL0IgA1)u@=5){56GzVW;T=}t51wP8@C{TN>2m^Zj>c;xQp zkvOycFdiOJk1^X1m7uwSsm%3jNeEG`#lti1@P+kNYJr-i!lfFm+ zbmry281rw)pp~>RjvtSH#srw+WgGM4w2|_w;*Cv}GGetSQO1K^DdRnq@%i5+m(d(k z6Imujqg8LZ>?9f^rT*5yFDdBUJOSke=LZ_ytfF}9s0$w?lpu32> z0NvX`bp2ktqumD%F2N5CE$CxQiO_OB@#e3mls*8B`Nyd_Yzc~s@ozI#DecC*tED=P zWn-lh=TOQwZ%(rmtda|xE`^<8&Z?oj|9T?1yv$}J4U|*L`*|VdomGR~^;0Uf`eP|_ zU-th9Bp3PRM=A2(x5bKV5c(Aal=^q)#!Eeepepr3sVY_KpRolnB($KXE#*L>&?Ueb z^V2x|unIjv;3=ie6&f>lcqqLSEwvXw_;xjC)l#zeA5WC*{m21IBc;leXK+?6rZ=UX z28#c)T}o3B&iFThHE`GwR9WvGJWN8MOpf#usT~&)@VGk6dF9C2W;-5D-U-O zq82Ek&zZ)&!*mmB0fRfshT0sV=Q3=^*`s-g8UDAb+d$d&}HkAN1#Tiv1cZV7Uk_K`QJW@t@?R=1)x zr0QMK`g?*EKb{9urJI}Ez4`b|cVd3GsQ&&A?vS$!q1DE`fqZqDO^(2>T^JzSg}8Os zH)n9e$oyQH&_6!W2;2>-!X42j9+W=asBD2|LT!x7J(?qJjjB7_6Gum~Ssh7BMO<3< z&sdRdapbkf6h{`o3E{|#ec~J`{m|mbC<4hGsdxmA%z_V^BYT<>9PxwJ;>e8>6pjp` zIB+Blj$B0?{#BKbQyl3jMHM?W%S3Pl-mO5!!=H}4u>f)B|KP=3TT#>f9k70%2X|1~ zK7z!Mx&T|)5}n0E@%?AAb6{ypSYPJ} zRi>p31X*kDe+-O_5iWBJh^T=FcX_Y{UH^54NBrtEv6Ji$w1B)ts^DmJyn_EaGOXO< zoHy-~sb?=p7o+-S#;t^CkOuc@zle?{ML_C*OB?j?&^T=H=5O+Z$}gv62UQEO=@#%R z-+ktXEo*R7lV}DFSgfUp_<%X&2z&t*(h%M!d#JdY6pRt~i1Zwq$_l<#0@zM-)kq77 z>8g4|gX3f4TW8S(CS&Kff=+x(C?;_tb1%_N;rG2yVk*E@ku)ZHwn>w?ESynHAh}6Q zsiH~TxjEJ(nl`aiOHN7;xsmJ`E^O}LmDdtfg7a_OZeu(|47qB&?II$huZ~oKfBqp!cX-aj^lPl8#N2!l(N}V{F4i&R#O~e{v?pn~gysDc-yV zvEu3Be|$~k4-`*Y{A;~<27$un{VAixjqgiw`-L+`5J)cW>`IFJFoo1TVE20>Uw;J! z#V&&kYm{^oRK=F=k7lpk+wKrOlj6S5%Fcc4BTuMve+J1s;EYF_PB0g)klyfWTWOII zcm8&-ZM$l%!$Qt{-BO<78wLR4;$j+&^`NIdN@GPUuu(PElQfexv=4g1`GAY%jOXvQ z8ml|4TYYE9lGd2r0*PyqxLp!AP~t{O+yT4^WJ}aUiJImPG*`F-;dEuP zvAmB+LzM0}ctSJJwY%&0WvKkROQP;1B6Y_sagveaF8bWR*K4cyAvr6bmzh%jYOigz zBXnPjh@;3Y?BpXEpH+j<0s3(Ko*>mW!gR5fV~GKire3qVq_gtEe*} zs%Ru4U0IStt}xLiy&Mbrr7_qxD_n209T=S+6F4u&1dcl&Bh8vp7%Eo<~~RN5`!0x>;be9>}eHg8qgXiBr1V|37&9HSUL4 zXJ(w*$^Lv07LP}y(aGG$KJkP`ce=-GZlYtTBKNC-cm0ILeQAe%?Qo&r5{VKP_sx;G z0*PyqIAL+$ff6@L;ts&AeiAiNqG-b3(S#ciX+HKrVDV@yN9XTk!0&H(>UW>QVp4a^ zLUBe|d_q`U=PP>GsFbq-#ou~YXpk0ZG5#W+Iu}-VE?`hBIwnHwfFqw@giJ#-ld0oM zifvU=tgyOk0rIF2DOMm-tPm+yAX2OlDOMm-tPm+yAX2OlDOMm-tPm+yAX2OlDORAR z*ddW(2b3A=E6olfl(=lnE)9%MjW^|YT578ZmKWKnh5kz< zs*Y+X%8|GNiEEO$T@p7?;zmi_0cxwiL`{^aq}r0*C~B*`hz@a#0jNI%q9tkK0}vvo zW7c^|l12|ebFoYDf7lz0c|%G3e__~(MmYy&R@7}8&D@*+p<-O$8aUFoHkomKmq=7y zE5`M0lDJ*17>6vdXVE!+$vA1|mm*1u?CxGHQ-8gkCyNr=Ia9wyq8u&aL{v~5`E`uL z4z|=CN9)>__w>o_2JsZZ9o|#NY@gYv!IOvWy8mm#_M+33L}?Rm=wrV@l$;?|{^+I6 zX5PYB`;MorjdhA?Yhs<^o3GjWziU29cUe#Y1vOBhi=UBV^y>-Ti$WX{TO=TPo$H-%oUpDq!8fv2j^<{S{#GeF8 z$a{)_#mDtCV&ttRH%(riMc&i|*k9sc&&I)QnmqRSg*hbMnMv-xsKRO4&C+nd4Dk zN+nZN8P2$#mEke#6Q$$+iqlwG&mEwO<2PZC$dTXVFjkKFsqkpvhnof(e{9I-mikKn z&xI|4lky(U$5zS8Stkp31X_S!laG0;mE-aA6ZnzW`uq)dZ5U%aao4&rwuADsg&#*~ zLFUIN-h13(wqv>I(=;%5u3YD@U}ma%=k zY*!kZZIyTSN{OyzTRMK9Nu9Uh?>(^JjjOXB&iT&c-RPk03JMH_1{s zw)q^PZ~>@VACPX*U^N!lVg)uyz~q2*Tq5g*_s1AJpA0o)_pi_tUX}p6Ee>{b9PC}d zgu+t}NT1eOpJ`=%iOTxxdZ93`h5V|9ImkCDMLPx4ATV-3`X2&Ty?=LKjJ&VNO_S#n z^4QM(T>`8z4ptWjyNHlzCDq{etQOfDQfn`NH75DhIj6X#;8Qi9RuI&@#@@3P?o0fi ztgs05r>t-eVX+SG2v+8bW*%CA57G8A#vKzK2JtJp0XtV7vod!YUz4Cl)84anxleS_ z{x+HjhSYlN6BoZYb zN4PR~qTu3>TVJjGdj!u_nkS!1GBHj%zNWcfLSnO1Hfag-pc?!lVX%3DLgOiWm;2!k z3MELnK)Ku<^tjzcAD6%C4c=P-o85R;!lrB}4@4 zGbW!<^nM_{=5f&wFF!|LGxOxHWln(dVPxIwhzHwOzWjYY^DsA=ezM|UC0^au>%dnP zhfY0lbP2A`2UPnn3rf$&S&x*0eE?R_`;NOqH_UMdzBum2$h!NEb&BEQ5pu*t+|kr& zmo#iduIKyh9Hb0nHMN?AyGSr(8hgwbYi6N6EE7-7B+7IL2iZByUd&f}EZ@7Du86B3 zyUoDuLIm<>I2_BJq&W6RI3*l=v$Jrle1$Y4s_}LL7Pp?C664lWZ^pRw<1#5<44+Zi zgF_ltZ%e`hoo}RcCAg@9)Xv}%RcthJW$aF!t~$acR*o)}V`?nNqi@G^>=n=P!g!7* zIV#f^(>cI#ns0~_C6cH@Nv6LNhY^Shx;iQtT@$iNt$%#MDQcoyc|A0-d5+nLrsf_A zAmmm}a6B7}Q<^9P#w7=!v;53m}M&(*s4|1udl|175MqPR1|0IuQ z|HB-QMS@v1F>&+_^Wx_2iTqvpKen)msJi1HCqXFL{kG@47{ix*8ljVwg z-=Qln_0^VVpm^DE(lJ}EdKkK;VHlpeDINQzgu1HWb!?y?=;JN8IB_L)Z#<%6k<-N6|p zvb-N=reEx};Tg)GiQ?g9Sg(*(!9Lk^ZdpS`xjowRjj!m4KkN%$1>^mTg?Zqwb%cSV z4z|vnRTtp|h~+{37wzV*R=#2}HeuSm!C8wvp*h)-mD^0ub(`;qrmU>3Qr=3bkfE*4 zq1IE8v*s!@Lf8==C`~Cz0g!%ctQzbztDJlwG{meDO&Yhd^B_z{nSTI_fgE&UB&~Kc z@iZzsj$oT$NMM6cjp8?SMaQB8hL=OSHpZJ(V%~qUIe6e?^LiY7DCE34C!52E6z;%J zhR~>8@&w*dD#9FrRTv9@AV&rg3!rcZCGeHiaSX{WeMNJ3oOL2-7SU*(wpmTS;BVZL zjGbA`UXoJtep-nycwd1d*nz62kFYh9m#Cha!NJk{(%Ja!?8x7Y;mxycgM;3EnHV6( z-^w2P*dlisR}VXzC~T#<(?+p%R8>G(e0MZTRSz?t?68>U5c9~(c*;1HTA305%BiQw%ISxN-47iS7T~BfpX*%q_vTxX%`X)t$o!1ue+M3*^ zBYQ~bZVvHKgbCE=d5V6-d14t?bpY|ybNou%@}>>EeS}%rp_bg4X*6P@xNG2eJ0r0E z4BE&t&$$&R+QFk*Be0T)VWAZo(ws%t_AeIC7`Uh*!%d7S(poTE6j@%$lq@(qN6%ae z&DD5^ioAX?+dEY_%~a**AfnM&I8(-Dqy{Qxc$?xRCQTe8aHIdM_RIjl$GPV;W^)x?N%F5yR9afoVh>(~vl(m%+q< zRvS!hX~gwzv>o;=>LaP`c&U%3>$gn(W^Y&DQg5E-DQhEsD8zMg@L^^TE!P)_k2Nz* zhBuiw&zzu!w>sz$ak;&{lS)y!^1!J}utG*XW-cPU)S`8osFpA%^;9Mr71*pq*r71(gdRDq*$SLlUx^SC?S?FO?n}nsZrHh zsFr65fBZ32cO+1~5J&ZN9Mw<%R;U(hREO?S#T#RxnxatkjG;O&f$I7=s^M`|uYxKt zYmvtEk;Zhoh3P_tY1ivk`L+>&vC_WV#WC69m~I1;D99fH1a(x^<13GG>Zzs;->LxG zs(T42HsG+3pyX{-itdaPM|hsHPq7ZO94D8by8}O-ZagB_O>p=YEt0wo6_-y@MZFWk zqypxhE?m1dM&RWM0&l-HRsj0VLeZ5#ilTu`h0jZx3V$b4;gyRoP8k_0?~&ro-_xAtGr!e$ z`Qw_p+-`|@Wr%1^!66UDZrz1uh3j1-rU_>5v^?r&22zF6S>aW4l|9b*5qTl8iSBM@p?ORiV7zyrpPdaHdsMwFhGG)h+I1tPV54A%Ae!6Oy0M`u;R-UHV$zmGu zstqpOvHhnsQt;(mVrCE<9`gQ+#XxzZovt{07v6Fkv%R6w zjp3I@9Rw95P@OY1lD6+dFpX~)}F9U<|mb(huWk~Hu_%PV%&sD>T&pj z&a!P!!|=mhjaRtLuHtyNMPo3RDBE=qc8GP8qU%w$fMcg- z8k(BDL_!Zq`yF4ahp0T3F9QiyJA;|d;DrolPSaQC_aZFbzf%c|=i6#w@kX1IElw<5 z1&XKsTO@8i`i}%GLGjGZF+uUz-(!N}2z^>oNL2~KWg4N^LU?N&VYe8MES@eL&f#ve5rcMX9HGvs-m-mj zfB0)l%N*med6YZNwY*rrmGg!{wMMVWuGvTKvaP<5^Gw8z4~ux~y=9FfL!;ZHZnMr^ z*5C_uZ95`V-uFfy3Xf0Jdy2LWG@fYiu@HEo&QtWhgNLu^5RL_WMH_gjA6R+NsJcM# z=P;|^VN{7PI%m#$X86vaztO1rnZ{2AE_T|s3$vlMK8;IxWe2_=Y~0g(fc)M%z%Gx{ z0Xgy*J)nRB9+_;Ei;4L;2kpgqLz(m+J>^05U}DnJFHr-Kj*+$Vh6uHpE?%N7f6 zw7?CV+wiQ0`;bpf8jdf#9E5v{;EWW<@=*Xa_hPZrd=WoV@aAq-KvXcz9nGgDUWHLB zZzKg8K`z^Y!mXZAmOb>~O&%;8A|AVTulTW#@nqf6?aH}|vppK1CD!|9M>X%t)Ygao zMhD%_w#{YR#4zRv{CKV!HLE_6{v{K+%-dCuxhq}wm_V8guLJ*S%}=f%K;6mw)D>+&1U`A?|Geqbjcc;ROG11#Gpu_Y6St^ z#RPUCp;1Ajf?`pM)(^xDMnw&5Hpz8ei4~AmQLI|AeqjYgKu7@HfT&T?;zuaIbI zLivWgzu%d;b2or}?fX8@|G!G^nYm|X&N*}D%$bin^G#DRm^ptOR^u+mdBT8qOcDvb z4u&Y958F^ee|knss1ksd(DKV23B3${;ADJNgYNPg%b3hEPEkQo`< zsbU5Sx#=>@-F*0j!`)y&D5?OLE5oN8!_ho%XuSylPNB-ir#~eM#EhbR8EKBHlIaaZ zs!5XzCZG&3p@M4egLC;fL1`djISGOwn34Pd2H<^M&>!?)P>d_&GdaN=Y=ciq|5$<} z#HKK_e0$<#tj^(>(ZsDUO7aPylxZ%zpqL50STor30PhIpSz}jZ6xw&@;LM>Z2H@Za!^hv{P-kN=Q*wn|M` zOr@?Dh^f~Die1UyMD{vwsS2#`)eYp=taafLkWfGo}9qOObE^2V|bfzhll!n`BM> zF&lq=!k?yk{NqWq_hc^S-!Y55#40>9Lm_7#8M$zAj>7Jbd3`VT?6oa@1lQo;?8o;* zXE9}(6jmsOHM205cypJ(VYLwjuEsxJ#(7Vg6k530TZmI`D`sFxu&~XVQL)Sl+}V_D zi(q1L5?Xu@|BU3HF8E{i_uwnB@oQ4gD-c zF2OlL!!z(6r^CpkGJ-w^)qz9$_`M3onEe2h=Rs%T{~WlJSa6yExzPrf?W6q8egg87 zlTh`BDWAeRS7TiySQfFkjiVg^E#-k@94YsQY*iODcRnWVv5n)izZ$eGgLafbyBTOW zCWEh2fJuQ>`eiVB zn|>XPj}Vn8ik{DmETZVlN|!bLGetGr+4I!%&UwD2QIHE1i|2zi*1)BESOcBOVyc1^ zDy(iAYk**FTcB%TGXO1!<1cb*zykZK21*}RHL%=8YrfDyOW>tK8x80%1vyR?yZ{A~ zyrsLP{j*>pPb)}Yg>{F<`jcS&&LQstx7;#Q?i5q*M}JY|b$8J&G-yGC_9D;@Q;_Xr zL_yl3sOcp-UaDIwu(IN&VyDhnt8;q^5UL)yoIM?uHwNeP@^C6xv@E4cZ@C zN0ly&P7E+zqe=G>Z*Het@Jr#Y;v~3XZk9EHXb&d|vgLTd{v{&Qgyd>XEM=h3YXzJ;tfWHR^GLdW6(t zx;&~X_`ok-b)NzN%{I^@271y!&lza3fmRr3t${WeXrqBXGtd?TZPn2DHR!ERzDSzG zPybe}wIiP4q47u9THB6a6Hk8)AZ3OAdRvjxAijA>H;D1cQ2@<)6!*8$H9Ea~)iq2M z>hNZj0OhMDNqE4URRTp zw^RPPnCrp~Y`jW4ODZ1ESpiUh+igSx7*7>IcorKn-q zMDjO)z@c<|=3G%%Fta?(NBEbtG!E}B?LE(>Cr__$?{WzCw8P_$@k>;X?+OUsPC zE%^Fv+;kVz)w}yQ_W6!}BFE$pB_N)ZAXZm;otB|RP3S)y--vb6Pu3ncv z_*a406=}EqWWT%X3w+;e&H5hb{Ic$AJePa%C%?~{LHn%xJ_H!v1M^3#0BlSTw)kIz z(QNVeS!eIT2gspQeixhFUdCJ0|9tz?@~_S>f2-VI-ThpDT~qr2?x$FX`&q(!+D*ND zRO~)Mb!jsA)!hf-zS_F)+Lv!WzkGdp^_W3et427}gbzyiSQ9>g?D1)2d_P?OrGdJG zIXJWXnT23J)@42(_jc~O^L>BL2l*YlA2Xu*5h>T-PDJas>k91qDIb~nS~ObJ?v@{w z+S$#l?cwuue|#?G{0mgW_SH1}h5R1!Zg)-~K=f zpL_@uTJ~lT7f+v!fTnU?z@f4Zv?;IQR6xn4KmaX`LvRPg62ShKdiv!Mt>n81#qJgL z+C%l4Is>FU08$2bo?(S~>Ko=IA_&(E#telo?Y7(^A(%P zT!u1}rAkLXf{r%Nz*33mXft&*{aj=fTn-rs&A6Y}=qSE}r+)UAQhtJl`*(ec$x5i` zc3@LQoA8udE%N)+4efZJ?rv%1n)dmLlrd z)F>$GHYjTCek|X=7^vF|MNRkojf&c7$5T+$%#J(X^XI&i-|?)r!>bny0r~C3g($G` zCH_Mcl2I{KVDpg1(xd$^S^i~MU-UF}LDcRc%~s@(VA}su2fvsU+`9U`U042PZTTL3 zHH<%pcd`Ch5F2?g+<1Q7H|>vl6Dtp)F~Hm=n0~noQ1J1wM~j2xmx~b5fZK%n0rv-u z%d!O*-A4*8%~?}>l@-329MoWiPXa=c`%qKH6PSpiS4F=yR%uk`HL8r=Yz?cMagYjQ zji?LC{wAQ|HW0LI4+NHK(+b<{Y*{zBZ6J10+HKpNdrX)MRV9jK_WE6)g!e*!?nXe= z32tWaSQGrRE&&x-y+87P=?ZPD4m=^Y>PI}pR^>EwOgpB!0NLtVlMhNN zYRjhNTd&m1d3ESyW1T)mg8V_5Gp0@Ti@cItn}CtHV5FF_zi(AWVs#UZ#61s+k@y#w z$N4u1P?9iZPv$#D;*t9uBheO6@@2{l6f~Caftgr@&`Uk#7U<*#!2X!+S_y0Bonjd} z{ect>&V;GBUYUx^5uy6O{K2@13?>hlK=;vFRDzv^~<9NvS<<#ZlbZ@1y8`>ziMy=C3^ zIl|%HP_(B202|9S>zw`z`*64c;1n2#<5T*tea1ctDeb|VHwh!;-cN_xy zutEqh_F+xF{g}27yv)si)%Z26z2@>gjipDuWO1hhEd-)=m+yg%C_}@3sl!UPQtOqm zU)vv)e^pz)4;JDoyvV7uUa5Cy+YYqivIx}s5Re58NP#$iX+ysG$yv{zX zypvPQ>#Di=kHx9)jl|Nkg)v86f|C`*`LwF7#;Lhhzt5)iWQ?kz%~OxXMcLCjg;%Ls zuUI5`c%SApywxu?L5{?@2|BYf)pz^Mudhzfk0tbBOn;rAJ4-k|yegLoN{;CiigAeH^mYYvknxnNAB-Tq59Lc)4O7oZshD26VyXi2a`jZNBTQ`9=~r((q#DN& z^DF#M`4#_H`JDs$9#iyfntGbLu=PEw-v`rrfE;L%_i07nS5rG_`rd-9Z^Mw@DBhF0 zp*Bwa4wvgr`x=Ry*12ZtKPle#jaJu7^A|CSY@PW}Sc>D=h}8Hqs)nDurw$^`PnBm+ zRjiX?C`(m?V_rZPtIKVV-b3&O0jX0-@L`&qw(0~$L3l{q6D^FVjhC!L>9C*e*T6R3 zwio0md!_JCJR*JuQQHC){lLDaT|z%|&l2n(A%G$8I*OIL9x`C(_@o$g_$Nel@6%yw zEI8siot=fTGnz-`c?zw9ZT@J1$F5qz+U5zaRkeT$W3SfZVdexQ&_#0>k>2|DVy=W%^kx7vfK6Az1^M1DF371{lnZkHS9C%4-zzT2=xn+mTMy~*-6}3S9?r&= z8ikj`%{9@2OgrpTkk=09D+sv+3{+^KVnAH^8G_|h+*}@>fH3cL!Gk}5Q(Ul2gYobf zK-h=v3BVqdpO1e&e3?>$$impmHF!Y2NLsG(0aj~}GqIsxA1d+Rl&4BOS3<7DGmLCH z;tlvqi-%bVe|C5tASIinCazY+K{kyhE}`Pm>~IFUZRTQ!GZlnfyawuQplm>tP0r&= zHhBnxm4SHh2hgX%c(^+t5eSw`btFVl0#Jz}pd*o}Sc69v#i{qCilUo@jwFhfyB$%m z5dQ4&1VBnW*>;x* zq&q4Ih46<~00;ufiH9ecxXC82+QikUxZHSnsfnvKag8P}0SLSfl+{K@i8>>MLQq_W zfiex`1w_ex`lymzcZ9_pg>wPL!;5t0$hI#c*pwir9Ee2QsKZ-J8aQ<&vU55^N0P{A zcmu*95oX7q9nJ%!BoZ)j#U^fwi7QiakjMfPx6s7Zo45u*AU#KOfvnN2_A5jb*KD92 z2HFjX68RX5fiyX3NUJ202`C<(hxhy;+s=}$NTe9T`B{nlbf=aG`{~3M39abOfYOnG z){*si0}}Jl2u0SENC_YnS7zeMP22(#w@}6Pg3z(9otDmKsfS07Zk-nwFas;P{KgX8iGLj+u_bwtyNIA zfx0W`EC^0R@o*j>{_Jpn6*mx-XyQs#+>m&<%*2%g3M|FfpxF2V2sI6ulH}?pCAk6! z4EuEWISFTl7c(IQ%A`yg$B7sk6!#afAK5)gwAjn_3VX7PJw=1qx`TIld3i19w{;HK ziv#Gi(@sNNHtE6-%?D85zI|J;!{#fjdxAC}V!$B&zWCycEu``jypSFmaUiJ-5B>m7 z(IC2IK)M$ykx1Cy*zy{HKr7d10IM~)tR6We{)$!sttkW9Kik4;%Cu5&h>@5np%uLu zP)fmZ29;tm-mp4Bpq7FiE(fII7MQq&Ca&JZHK@3=AR`m!Ia<=9vU33O2OFm1P}ud#7u6^JX0EuY+lEaMLIaLC1%SFaotCf_MW_jDv@Tq7^$+0I9ed6F1MqEj4kqDsDnN zoG@|CD(;$i*xS{~FB=f@n~Z+S#Q6XPmZA^#@E?@d3ojLHXXC*i%eTXgDmOqAfDe`E zuduGs`5?g!E*R2aJUrcv%+VPFHBW=f6!ZA1q=q}s_s6SoME zY9|dQZWAEgPL^X)676I+VggIqMnvz?2OqB*HQ%$jWFt&s@Zb+%e;4!$D2*hb@CLds zeHxTTLgMd$ZlgH`x_LY%Zjy@go{$oE5#qpPHSUrwviI}8%+NXbBB{YI(^2^LTz_Cb zq*RpVoRzatDT#g(T5%2o*j3zs-OEs%c?{vQ4lmxKlJe1Zc||pTcDM$Rid$sjmYTRt zCazJ%Aw@%HNdai1g0N9TAvS1hHn zDl(v6kY5He*E+E?(HjkdIGGy93mm8={^IA0htmYY@FE`GkL=(coe#ZSh{pJ{rt0fk zo&F2nL*kzjLjQ$;?!N@um3SR*z$6M`cKq4lMSxUXgNfT@;&z)jPp05OR5=Pl+FS$W z8K^Iyz*1UUS|+r+{)~Wm(v?Hjv*sxA_ym_6dOSJoU;&z)j?CV5LN5OT>gP+tS} z2c$d}A0RMMj0b-JOEee{p9M(wVFR7_vE_}HpiOXMU_dpfo8r#Iry=Ra0+8Cz>c+ZT zv|yykEtk-W-qPe`Frk{;uEgVbqlCch__M>sfK=QR6IW*9=9#z!fa2j=9aiF~0r?7= ztspd%c?NpKyj@_RCk?dFK+hRyk%ExRVgoG&q{Q0*2u=(B;^&8SS16F$l!FH4i09Tr z$KijUA{Qt2_Aw#uFzh|h0s1>Yo&)4KfS7qAi)s)MUuRT2t+$}WruWXL`7A=_O(UE= zns`d)cuL-QO4fKv&Ui}3cuKx_O165dCxlrH?NfGw`UVJbXpjK~mDu4z1&u+~0b*18 z+XJepjYAk>8G{FZNLYwA*+Yfwa2X&KH_yZ^Fmbgeu3p8V(1e0O$W{Y28)yfhz*3UW ze`whaJy}7U@Rt#^javYd!dy+^R)jH4n4Wk6-Q02E9SDNp&+yPDFaw}dkH#HwKHl7X zQ>*qbp(D0`yitrYJO1Dq08(-NP24~eS7PEO0D>LTVWzOd6$%fzR2%3%1JwW`j}5a_ zEi6D7OfABLKY&X$7!S_|q^-a__kFDk)@u+2-vEaZ{V#v$x_;#-LXLtEmkUUZ1ho7E zs1Q;zS5q=h!WdiO30s7}VuE3z1e89f8JYa7z;C%RRp1jPbR>ZX@kUY1?D(_8yA_?_ zBD=d2mjg)Q`Al2@5X_zq^Q|4eLE#~nDFzA|s0@M?r1<#~AU2XKJ~;llya z0xx&o$Cl?&a_AtP7}S;qjoH2CW-+_vC;kWVTy#UKc=9E5B=MYvH()FcdWG!xgC+q| zaSKh{A`{nO;x++-BIvLZ&who6Ts){q!~se(PzE51#}`xL$wnB==HbB~!2TMHhcf|b z@pzs0vE@r444@5kVlX49K_i|5G%*;elXRXkW6rJtRv-hBaNO~ieg&w@z>HdsLd07@ zDlX5&^*3?FCay%qfwRuYN%5F%pzeUk<8${Z9{Wl-E1Zj`>MYIzgnpq6+5D_}|LOYF z`m2!8k?QYyyg^>RUjHGl;jQu-__KNSz#DLrh7*rKAt6W?5Pz`pDh{Ui1_MnoP{=@K z2AXc5asyQ;2(?fRNab7u2qSkLhU_{`iHhu^8xcoY>Tvio9WGbz!&?x>2z~~Fu;`0a zD6B%Yf}0iHs-HXbbH9G3oy@$mqM7>HSwFku*?P6WUGKpmSFujp6K7!0ZCc$C)<5w* zNnGYy?AtP0zt-!Oe2;NE(ieI0JwCp~`dvoA=8d;SIe@c~D0RI~@@xAa@R2SL>2k)e zk^3o4`Fcx!Dh*t};i^rqfc@%Z&=9WzAMy)?S1l+26gp*m@)8yn8~SXXEVnFOua;XH z)^WKdb_2XI zTD3tdH)!8nhl`>dD(*Qq7HDHfNfVBPh>2jh`!`_U*RGk7N>&W+MzGL+nWFQrA{qHS zf^My|S4G{|iv5z@40bQMa-u2bW)ZTq7sO7PWU#8(G9$_XBt?1S$6yMiP*s(MGveT+*1PX6w3LmQrzflT5 z%_+QxTlmGM@KL7lmnP#30lS$8u%@ops_)m>%ApU~0}Oqrg*glF_FDJh`%BhrFH`cT zD3NS$e}il;DO*E_$Sl0bE5+pl90!X#;6z2fNr*x{sgAhX*w3VghLG-5Aqw+TT;H}Dz7g*q4F^Scf~8`mpF z{azeY27~O+#uG=P`SJP5h#XaS5P6D#ZUTgl5wkiRNm|bS0q$7G=lCrleD{Kc=qeCz^}#6(v7t4F&9lHBB~-YE z5;}@(mR%bSt3;NShYKq2ucUyUR|4u|Qtm|xraV?szI(k0h_Z~QuR=fzXveP{&bMCc zaDEY>rU~)%c`n-92JH=lb~>O|lxX>oHdj8I5DG>u+N?%^e(Sha^2yel>m2#`albsI zGum%|6ts6p8{X7M>yWnT2Tyja^YNO+U$3Tcwq8f!z^1DNJ+)1LMhWI&lj=)gQ!sn# znCca#vf!{&Fn>cp3+B@k9Kn2WjU$*rfSSg|)9-Q778|tZ4BD}P3>8`^q{$J=lkFN2 z@<%gsA(RBb0{g67W5vzY;;9YH^mj*)PvhyW<#V0kbQd@zr|GLA%eO{q%dvM^mBY!;mYV1VUOq z%>aL?d~|=uhGeWi`n$1cQD2>L8Sla|jl{Gj| zXr}q)VZl$L1a@_;&2b=lpO|BuD5Y)dVll}9`<9$Qbg`IZz_6-|#UulUrLEBR*bi4Y zE2We47>fIAiUUG%x9GU>Xue}yd$5bC_~Ao2OwoF;Sbz`nsogEmI8M`%x3hyZnX&FFh|!LnAyvz zni0C_tE6Zg$*PL>xSHT{*Tx{GK|uo65S-+%KzDy<8VAy7k;A@ewtHw54Z4( zP2ryJK%Vm|#{p!)gRf-8g8*n`p`0D!skhTl4sj)=9Y|`r%{gobPaz4< z2}HwF2*Ok7!Bfb=)2H7HF$fDScnT?a=IHlA2*N@Ko!j@^s!n{&lyVY=2na_6ge3ww4vsLz7~zV5u$3xZS*LnxESLGy@5T3C z7#;u52n~FbA^yN{03bLm#sjjMf(JrUa{EAM<}b4S$RJd@bs}E%Edi5$)+y5KGaXKG^{# zI6#R56gxn`0elYNRLJT5ofxM=PS0^-oC-Oe+)G(bg}{W1x}Oep|0dBHBqiTO49vol zztYC^*;kZdShIwNp?o|HgJmDrmZOF#2x!yr)G>}}m|x-;)OLW9Ng$wZg-bkzNjxW@ zl>hw(ROK|FVD!9Ytos2waWDi1{Z*U#8sVer7Syu7?P-UU@e3SSCGXI}zHed=zf_cr!WuxGfxAVuV z+%{9?wwWro%~UyUM!I3$b^4tR_s;jrt=r32kOnSR!#n`*2D0Bt41_kx*=pHPmSF6W zT-A8~6%2ok##4;Q)LlK>qygGVHo&)4KfYX4^^g1ya3P?Lsp0Vj?hSXM~ZHae_q4md6>v3r4@wyRBdRaB1yZ^yP zH2899L?;6&o_;z40Dyk>grl8CR07keypok{lY8X-(7V4ljXp&;o!J1%Y};j$*&9HK zr+%0HljN_+UXjaISY$8GWi#ZHZIBn9P^tL)8KpY( z`!o4IMa`d_rzXTU`fVvX4)BILcGDV}~i0$Ru~9Ocy5-!9fQ=1gNG(-5hIF`q9kR?J}RLHAB->8sJg%T>%UxmI?p$RIqRfUQXayU!*08o#wP5Tbo8&Zx@ z+gW-t1bVQuc)}AQNIIBzzDR)%yp#g1ei1T|v(YvJkb^K^QB2Un^}@HF!PrU~gV!uX z}vk(f^_y{-O|Vinm7$_%zu>c4B{%P9b`m zuPAzRpveAKxx9^d=N^jmEiRvF;8EWTklY{7@9qPGa7XgHi#;MB_K1MkBLX=Nj@To{ zh&>`8_9z%nlT8D-dbPWFSQj93o~|97ao|pzgb) zT5xT{T-y7f{R$1dc9U2pe5f+SBhhxhAulnCsebA1Is~I!iq+lSFLx1- zY?)9Kxjrz&ip+H?GS{idT&E&)a~vF}B6FRJ%ylX=XB&B7iz(Z*pw9Q#TzUK2cHV1GDvff@!}pZS*42^GKQKtF+HN zHLIsTyi)9Ts0&UQr0c^G_))>=$^hV&2D}!N9U6?2w5U5w^lQY@XTSn;%J>k6tmDA2 zm24vZmbvuI^|4ymth=4(;9C_Dr17t!w;b$)k)iBozC9?m@4S`QfV;#WCA8u^29R7n z6+9_R%*_60m25iW86NuHMIxJ%#a*pKK+9%lJ4ZI#U>ig>fmZ&0aya5wa+Q&r?e_(s z(#jIS-Y{03;SXZJBe93L_8WkXPUiHLD|&(0l@eNUIs-IoFEBH;UD>L51Ie{j_zK&P zX%X(ndsu{?Q}Bw4)N`@}OmKh_2Pk%cfCKm(z)`=Rj{5a<)URibgX5@QPe=WFI_f8z zzF1#4Vzo(nE;!G$ikNQ13az@7hT z{rzh`oQv=((Ra1P9E?|$qZtSdQ5jNTd_Y$QFRGmv@v0gPI=8SrdW?B0kd80J)yIU2ERyEEbSYNM(UL` z8HP})tgxss2QXCS6Gk3%4Q4R9BnP-Os6C?X{e!C{%j5W|!jC`>#v^>qA97tJn8=4G z(%}-`rj9i-uDTRKnAf7{EBrh-dbC5?X1QuRhQ#zkkHJI- z&*7-P#0&y)pB9xW*jD4;@kRCzhnm8=3$!VmjdY2ZCA8vn28!$hxPXjbUnCwuG!#^t zROzUuzD4#DazfH0ykjcK1EW^*`(v7(n^Lh)#BPy=cmV~K78iYJGE^29p$7)74-G;r zn>jnH4%i3C9D?>^jBD^_tJUe5gZbJeRRcxWl1bR5Q9 z$|(*OOVOoKBLi{2u5-!5-!f|vsp4&q+Y*03obXqabj+lhfW1aqVl$GVJ&3vw`oyYul3@q~jYPEvyIM7psGvk2RE^|) zD%wodNLmXlI*a;^lNg|~FDsRONU7{9rLzAF4B8bM8;m}rR913&u$9URkv!u+atYb9 zD}`lyb#erPdOggEg*Ay>i0I_y_!F41TIsVc(aoq6-Zm}qyTk=!_bcL#(4J07ZBHnO z#1+}E3cc-7Tc5gF*WH&}g&7GOijB1{s=iQEU^ zmdf72pE^jFnf+Jo|2{7MZvb6p*(g+I=@bk%_9>hlct;;OQ*hQ1hnF9}4uIvNOZ{oj zDcURk4i-iE$Hjnn`SDyA?Ja}0#-Q~9#1=^FDr4Nms?d9Mp${z}VPjaRRsDsSr^sX! zs|-=N%~wAibcddgc`P97G({i7T6kJ@by3;1`&+n0K=6KIij z+^|AC7vMQ2+Lpc0;0U|P(ms&eRU+ho{Xyc($COI!d6dsj!b4vkE*10!81YBN@YrpG z;Z?MI9xL)aqIV9%MN5&d00nI^!+6lBMu!E^skil56(6d1tfxSH=0c?8Z$NGGb5uKf z=}*tb?F(ci3z#^cGv98+Jv;SIf$j67*KW+WH`jgF0f+D-LD2qp;vtw?NCIb3W&~s6 zr3LMR$^Lkx9C;%fntO5Y>_`nmc4VGB`h=stI0=qN~w>H!V!n@D+ zuRI@kh1RfUcx$-SJrT$GDuwoU7rdE&c1A0g!U&@g3A6}Y-akfUvIRY2JpI}Nqcwlo z>1fTLe2&)aKA+C1(*~@_ZgdjKz4(I)dLUgC`vR$zc;brrY&+S=53>V{CG!k7^Pwj5 zvrXm?BlG0Fg86yAA>%lMd9=a21(>LLNA_-ISKwmT7Q-~O7w+8N*@|I^J>`Y5yqnE6G{^eXf zE%_w0CUKvHR-DWLKWn}Mw9tHDlbv@~-brR}a4>^0RsB^Aw-480+x*Bvs3v^Sn*m=m zh8T}!BC*x)V{7JOl-+bQuKn$_l2)GXR8JHZwC7WEi|iMv$DkgQMzwN?XreDvF&HZv z7mUs!3Run#hToV_XkVX$UV0$s1jnmm;;?J+qA|GstyhCLwa}>-Sb3X4+LuI*O6nmBJ*jIsl!2Ei?2o56KDApYYOB1##Xut}i_X;*o zcf1I`ywJvCw&z=2akrSz_8wwOa1-)7O<6U8=qpSh3xA!EAbNLTS6t-X1@fLY27e|M zg05SC)ij3d_mIjokxH}Ic{O#gm3I*2@3;ExoAzszv4y3sQsnQSdLr{{>nZJmH#>p0 z!|J!|wws;x$3XP{94Q|J^L}iFY(=gC9A3#oh+&j2MF0g~4MH|rl|c!WTs_9>_oY?I z!8+d+Tm80Lm1pR8C4QWLW>xk;u&Et{#PLkIrwzt4<;*ei9kitrZ4V4@bhr$6TF~}p5-2*~%3DqT>Zn)P4(F;Br@*751H0-(tvWz$ZW_~cH0taoQKSSFX&S2b z^J%}f@(w^l4qE;8OygmCJ1L}T-Ix*zl!ch@@p>C;y6S64BoKWx2aM5mxnCny8l|~i zDaNgZ$mC6{k|%E>@vYFBAFWCrDhCQ~EoKQ;Ws!baV)ff$Ri2MfGJ^cUN-(-gMjeCx ziNon=ZU*4adMC=N_$y+lF0=3q4tj`n63XM?7CJFg>4b>X38B7n0`?-&iQ|jxSxiub zLDJE|_zY8tgBn8VMX0*WpnV?q;-r=TfddxF59P39W(NGZbpw4t^_+ot^n4t`pCSr9 z3<}*9l#vOm;>^7*EhP7JJRS8<_CP>?9h=+>wNLeM-TkVv|0NK0Mr&5Zb0{7jtsfJb zu~R;1>C3GcH~nymr>O@o!rYm7|KS62WOpU-0?~&_F)OMpFj(NyUlrQlV)gG=4=FF^ z%(?6*n}^Z?JT-sNooS`(1F<_Z%J0nZgkHeaUp*_xucv(aaYwOzOg9w0xK4B>4)^VNwq24p&$MaB@rC-g;i0FbcIn|?}ZN? ziUzM@d?~t5N+n$vc%l^e$q*EH``UQ=I{*y3@MsTye~Kru?;MBas{u954`K)}9@-M* zAHHiN>isj4YR^*&Dg8;xSUb6$Z}D{m>agkTc=~m^5aje5?xu%f)zZH)eXO}{( zNY(?%K=H+(lp^}$Y>Ft46k9gC*m!!jn_-d3u)xW%_24);pV_+;0RSl%{&0;CrHTiY z88fAe@Zh_qe9YoAZbl%$7;wrom?05{TjfABR1f>kpgrDGK5-=O=8&9P({bqcD6;=6 zFk>s-ckF4$au=p9%s_7GL6O1lz&mB|hX*Nx+`-i4VrRG@AAzkpyV4uPmTn0Yp;7axJuyJ!cR9JGJqr9!&`kW*+V3O7}p`P7fVZctP# zK7Ph$sZfC()YrM$KWeg{YqH;emiWHR6klYCqP=W^=IA`uwls(*5at$#p#AwF z$KGiF@Q(i4Kb(&4Byod;R-DX$I`*a<5S_V;@TMsG6wC5Q3v;Cp!PH}MF#1TYDQzx_ z)g@UKAF+N`q~UK-AIBTbY*pI9U$bmen%s$1gzHlw_#)iJ%xnj=pf>>tK`Z|NeVOO^ z#ilrS(TuYp zVv4%x0gAfgAXYd;eQ=eMXJXNYvKY{UBV8P!3yr`$G9{UbVl+_GHK zz(Y{4bX@AO+M_Nl1nxs)P<=q*ZE9I086%4l6{T+N1^HG9oa`(q5-^I&k`gcyCbFOy1)*_;!6;Y`+T1mDiHrk=I-vD$Vl8hYtap(4^s+$=3itiEitLZ*d=H`Ec3eTI|AIxhwfWrRhnKZMdLOC-vVtt1!T8TpdKKk7oN_K$AccE(7Bn=Mjt1&k z%z-|B8d^R+Psg$afKZ0tz7p5)-L!@&N8^s@arI0%x^pmAm^)dnP^L1M_Du4a9p)DL zN9$Ks#WzPW=kS*Ut%^?po+8sEkp_Si>NQlguKTwau!W4l@z5;58<7S9V2K&aqGgPr z=5PemOd_TYB<65lc&D@}Q^F)tg*!{QuX*3MXwXyawnAh1BBI8QYp3Ff?Tv_F<7k+6 zn!E}?a8|$g)b3W^Kau<+zCnYZpO=G5h(-93e^U>HJu2Lp;bRakR^jfVKqY5);-{e= zJ5mTOrV_m4jkd$YPoHa{&P9ttBg4DfS`}BIEZo3~0d|cQ;o!g@UXfew!4G~B-jSdi za?5Z{y4CMHD>9R$-8&tB;|2A^N^;UQdPN4$6zJD%kFPInZ$&T0dpPE`%$4B~aB!E2 zRq@Bv0z$uI=J~l(QY2ti27p3& zbG7AGpCuCj%X}WL1Z`NE4q_AAGH~lEC%@K!!bx$T7m4z&U4ZMmH%zhv$69%k0fO%$ z*cm)wR8&wdYGGZ4UG06>A-=1XCwYtYFtORuqI$eMp)TpI4s@?BIWajFWdy=&@G<9I zI2C*?=C+oBq83e=rcw$_eADwF&H&WZqeN3e(IV2PWleD=^IX|0@qz!<6taaEj2T0L zent^)!m;pHCB0i{5l*1S_?p`Th%_!mnjct|A1ItPBFZ-rIFcv_B3?v^?$VQZ0vCll zbYWCfN={Q`>1{2`V}C}Loeih3#734~1JR=c(TlMWCV+2fi*o|eQP>|7$cy{>Q-Y$b zc}0uxVFT3`0bB`uE6*v$&*&& z1sfnO(db4BK9+kDGR*r3l)MK@HnUIN+JrS&*&)D43@U^;q#O z#@qi((jcic#+%we0-@v7ioVYiItmj5tFSyV99Kaod7*B7G~&x(&OG5y{(D)Cu#K$P znnD3bUgx{=TBYUXqr7~MymrA@fTnab?9+?h%!mRgwD{=ysJ$i}MJgWV@< z5@}ilRML_ieD@7h@!ADVCr~>Lk~QufzNM@WI+G*Ylq$`Ghl4577HHslPNqSU8Ia_Ae)|$EhB)e0v?$fWL>|Rt-2l4gUfj+b zJs-;jEth%+)QXep#a$b*d|wN%-?dJo?{b+oFxM`C^ftgnwED!@5yH#az&z%NM+0EK zHaF{mK!d@TzoUmkPaWbc`4s;)q5E5e=URyOjqTR>O{izs=`}D+ixjvT-~x~ZA(8_{ zos}11nbxJ8?n63nml(d8q-t4t8*mpmz5L5AMRze@O2*7N^5+ctzaaZwYv3Z5yvIIF zBCmq^kjm`!7N#ZdYEZ=#+I#Y`e3T!J(Y;ATPCJObxmRZRcMVVTltZW$JJ1#a(RS!M z;Q9~8CaKYd;zj54@9;vaWDSAB+$qWpEVHfx5nVsv!oc`O*r*z7+*e@Hx(b17A%m`K zL3GwQbgq5IE+9B2H^j#^@KgH8W$6s%=T2XiEhWR{V8cz^i3{FU_f$|rTZ{#UzVsx< zE`Yay8_SDvON+P_@ErR}P0+=Fr#?I%e?}Kl2Qf|;RqU0@F?FEtW=Sm=2Ofp7%P-(hDxgb^C!PD9jXk$g{VCIc0 z7`mCs$SK{x&Ga@N$9qPGa^Zjc#F$w+M*NRWs6yVdVpZ}&9t1Ed#C$$)@M0?Cetd`v zHLS`p3THc37Oct<2rO&mYoICCSbc6>L{&pKE!|sg%K?a0^anZ$y&4M#pokK-D$Ai886{oGAfWw8n$Dw;tC4RZd% zs_cVsYp3=|(rJJ2=cV&4Os#T#wQ#6_6b}8}6yabY%LpeMH@iqge^YZyOAY@0Sw9K?l7D~wg?K-g*Rx1(&eP!hJLVs`$d@wlIO|*agyy4r)b!G} zyE(n|Y;R02m0j!14?(3PaAr8g8&l{{YxGruKAq^CjhX_0HV4y>PyN%Gjhf%fnT=`( z$j!6#+~jrLIJJKK>+c~MJtcqzcw}EIir`ZBrrR;`G!h_nBcHHUX-h_?_ z>KVTvoEM_0gR6EXWg=}WNajRZnvh?y{cON;VZ${B-A}s(&=UNomVpWWV zjV+2+NcLE1u`2Qr!7p{hSwfM)*tp!u1^B#fmoLrJ78^>e{D1qSo`pLLvDcw=5I#UT z`8;g$qrsk{47UA+ve$26359n0n80hEM*QdV_%QVF7NWC32An8}a5j-GI?^Z>Caa(! z7C0E*(<5MyU&Q&K^ov1FU}9!_wcJy@;OK z69eumqq*?Oyp69f_Mc?HNA|%9?D{Uca4)K5sHdFcZe=B>umg?^!VrX{mdNZx00yrF zw-nV+>xd43vnp9WwEFkaUo*WPNS=U-V47=kvDPNWJ_9iYm|_JRxDQT7^8bdAiF8A5 zp=;+ZVvG#v-$p?jcv({=hd+o`|=?ApwJJjS^d72_K z6s6@WgXQ}HmamM%da_v38C@GqKL_KCC>{bP{z-SCUjyU0o8S$$fT9nR_f#;Huz9djaKE;1`Q&^YzY^fk1VpW6xp>9RMzvwsO!X6yF_%_ z1M?P8gv9ZpuXSf4jQsrnNq(jeP3b<4EI7_;mXydutdBB_bGi~!hP{eAOXP&iVAPir z9*Ci;f2S`!qx5JdsHIEZ(596{Lnmr+x4rW?v;jJ$tjgb@ zK6KTbs;g`qw43#{iS>2t;q}#`1#aq#giPrCbG61+WmUqfZ&hnNXN;6ct>LO{-6oze zXsXs8MEI~;8%sqWe@LyJvGc#GwV}VT*2Doltj7FNUz!@CL}qmWBN*OYcnPg$zlvPW z`NFwFw11~(r&Vz_Bp8g|r&e`rjG^>;FLqX9FF_e<1gq+$KVo&%oh#vflmI{MS=E5l z+*J7^Jl){nC7dR;A|sK=A1?F3nLi((tkC`z03CK870LUknnc}X&FrD$i@lt}l`9Y5 zvMMtW3*BfGTs5ounKkn#YJggi*eLGjmlEN<2ve5pF&8GGl8dmTp~0%;W;`%HEWkVh zVnvH-MR5}x-Ue|rECR!@d8Lk)hLcb5MaBGBl{V6<%72PlHL-v_aQ=l8g$`Mcy~ zAQTOjSz)VUKi&*jm!zFIl9IipxPp@P(k`LQkitx6Y0uG^hPOo*xt$F}!|*C4`wrpO zN`{e4ijH9(NesjK?Z$VcNuXWegya#;f>kk_-knUOrg)R|rw=u)FbxTntC9@KSc7$tuH1c*r5Y5lYg1<;VrO)^J*KX(>^&1u~$)`ha!^FN0O{Esm; z)*3?HlUy=);sL67EAj@wc%(lpAR}3Xs8Wef%+D05;K`k7grX?-{p|tkG*~z9DO>P$ zH%6{sb1qnUx(J${=~7PocCxHMPsaICVJBwh{?Y%{IbK>D+aBP*V z_r&*$!B@U@)%XUa-ws?181p{I^QscBb)1L~ue0V4fgE9_<`1Ozz_HP1R`@bd#F0NF zmw@ED{00XDKvwTzUPtZ=k#5MU_#Mi^)N7**{jzRc3%_Mf4zt0~8!&tG%R229sb|gM zR~MLm0Kr*vZUBr)(asbtJ{>)t?Wub%lBllCZyoy4%r zre!eZ@fL7aBf{*EZNXYJU9IMdj=cGbHcZA^Rk2=n$X;Qui6pr}K}3BQmE(`%4E6aIr5>a9T6y9KiR6JH zB#YSKZcgq(s??l>HU0yvJ%I8xkY55V3GEOQ#aJr5a)*_-8;|{JP6j#W$vWG7-ugm4 zd5RakSb11rENMdcvfaqPpoYq@2T}X*Z$JJ)cS^oS{yQMVB>^Q&5rbq=rt;#-ZOLa2 zHgpP^j@yb9&vW($&-wX$lDTFo1b{g^L^DcuA)j$5FzfZ*`px|P@+NDEN2i&S1^}6U zOxn=&*b=kmXXv-{GXVr*5n=~0Z;nr4GpG%yEpAc_pq1iLi1}rC2m#o|faaO_!peo} zW<_%F29lzWbQvUIl@vfbvm^lqRJ{5IE@mJ)eo+YS%M#wLgUt^u4bdfs7l0Rm=p1TM z;+D?29FOt39D1m&k{;TbP)mdgSc%oJ64^M}i>uT=48YiEQC%@Ep}*Wl8Oze%cjQVW z7tvuSOS|472H9_|j?ki{VHJ2y_^UQ4R|CuCPG)Dd*?8*bS$#Ujs9UHp68V~YtoS<{j|wzObgoC8Ys)?48o=`@iMejtduAF(4J+iV$yp21n3 zW(CoTE^K2}G=m3!G$VH5!SG(ShX1Rh!PUgh4+Pq*Z`lmfU49bAYy-o4xE*6pIncR) zADhltEa1m(Ab-T8Sp)Smm=QV}Jz~=_eA@&Z?}@kZy>;0KC~iH7&-}5? zGdu~$iqJ=ApH(Y8xD^?QF#3#Y$OiL~LnX8#mo?!DO(ThgdOlJn;Wjh1NC)1ItcTL4 zWDMpbVH;o;N0{hAvroZ(^;oX*94tR|x`E9zD?_ItHM%=_g*qXs4B6)nbYjxw);Xwo3IS z!JF31@rY6KEO|%VU%BcwyfO{d2K70Q2`GIi#Qkcof4wy`Phv}Oc5lBrtMUY$>6|Sm z(KvAIgT&%FEF)y)E1Q$RYgvth+8(vuZ_k!lC+7U9>|z2?Nwdos%%P}Ok^`Z9g@2qs zpGMa<3$GCVoNZuxnAu)gAQZbXlu2|Kww2xB8|q@M(i_(XU0LAkWlur_6R6F z&BR^P5)5ELG#IV;a0CDsTFJe4`CFq$cn`AmnT~>o!NU?4rF!EMNuD|iH)ty z2NN~z<*b^)6M)Dw!v>c)K(PY^9Kh!Q10A5h1LQeCjss*n0BTOO&@#> zx1n1gK=o!7x%YuU?5iJ?EFz^~PuR2-n|@m{$1b1o{82P2k@Ax$nhKq^8c&MmC_I&D zY5-Z0JxE8>!h96 zVgO79=QXm@abEAraGck#I=IfO@dUC97AyZE4wvfB(`?!oTF-H@^_?=kodi>9_5`7bpL2Y3Yi8eE!mZJ^u^bBjuTg z^zMwI`raPr@4EN5Y}p_yXtS?TRsP&WR{3>Dqsq&Mx_6ye5iTY`LpCe)Yc={^f_|=` z`(1P#ZBQCd&q1`-m$54xeJO%HQj1bAqZy|pIkRa&JpKEQCdo-A$q6P&d8;I$ERKLU z3<_XZwmRb%Q_`2Na{@ipdAqIny;L#qBnam^+KS(k-`i2_k@+2~&`ULXOwdOPdTV~C z#MAq`#9zDI;deYpR{X9>JDlGGM;U&9W0IU^lGLAN9MO)p+_|Od_lil&=2F+=MrDK%;EP&kgWLqpxxp8c5;&pGfB=hNfxw9 zqWDdz+F!!&P{qJn5KewS!#)9=f1L4i{0>&=b2R$%f_}ZAAI5Jnq8q$J7=lGZww?Wez&(doZmCtB)>OFE;mVPTP0Eami%}6e6nI-3kWB_`>!Ow zueJX;H(>{66)n!|!~MtoUu$iuh8oS3}(-Q%#cVO_Byr zs)$0kF+t{M*o^aOwhCR|U9;sjXMI0ZEBjTsPU?FL7!m%*3;*flzx91v_bSBY8u0@` ztRW&lwWXBdyo>fHgLbb$Yi{X{E!ygmufy)!0=t-&J1>=I z%`WV8Ti8yL2$d%NJOuEsE5CyJ*x;I*bX-4JsCBq*9Ek{CB>RTI8p zlkYcM$?w~Gk>8Ujkn&qGj`F)*3T`dGCWUyXMto2Zi-}12<-4@pzQmE=ErynV9_%gh zJJChE$e@ihXp4aM^YY7~{D!;o3s7f#*m_sz%JEJ`<%gh-?0kO(+4+0BL*=+ERgTqo zt>yUoVu$u6AVtaXS0u{F(Td!ODXXScDfct9lIK80z!*)y4MIR4A)vK9hbY9;HR1(= z=pmxq|JK&f)W^`&%g|JHK*{rM7p<*9+l!Zq^a+4|UY>{PqtpDLj~nBn7BNsoIX-nc z<@kG)_8;`o=Mq!;vLnYE4KW|=Pn9E%Lpq{9{#g~=Sr^<_3Qo3R!L8*tUm-RDffTkA z#9AU!ev1LB1Ofunu@zFqnyqa zDzJm9pPT(ell>JY`?`IUNL0SZjQJ!7$}^v# z(BIPNUtLPh7Z9C$+hzmMyslg1@LC6Q6|bkZBE0mRrcv?qtKB4XO_KXfk{x?ed9^Bd z-T*)4ZXXSd^V=2|VcSQ26Z|-a!97e$_-$oBJc{hjn(V$pcJd&(Y_0!k3b6?YqW^+e zOGMFs0FM5@=I4YYpW;?1O`yFxLk2^psS0!#oN#y%zDY5Q&1D`1)wFh>IFwquYxiqsS|}pqxI(|A49(J z^f7KK+oYOdQhmFtwKCiaWdIejSar2{I_$c}pz;6gVwL56FduYrx)bMMn6)aNgMoEx zZ!{n;*H6VduQL(5Q%%I;3?}CeMaO>dx+M92EGp-O@Pr&?U(lP@A|qL0xC1~m5Wtr? z*brX&b$F>9w-Oo`h}Pr?&ikQakUg>x#XscGb{=AejY%Q!3{BuHhd?Y+D*{2CRaFo1 zrL=d7p^zowM4yY@d>gEpzlX^1Hh{dj*rIlStAjbZVk*^JrSe~G&E#$Yl)>vn)n>O- z5z+K}v7bPkrAWp6yd{Xp85l`9m%;u;m{XWYi4GF3AVAPFCsJ7>;*HH{V0&2{|IP? z>}MT@W`GUVYQEh8`*Iru^YV0^*9AJSDAkMCq+g_rB79 z)gkvY|NoUweXYpnLa;&kT!&8)q{Q&hUgXKLm3*>XzJ@>J$mcw8qvZ4CPg*`x?$Gk_ z=nS)wVR-0=yR>}P0nqX}xX{UGCsM0?#xbAP^63EQ(#Yqu*IfCu{r@hX|Dt_;xJonh zYcN6yjrbiIN+Ux~``WS7FxAH})yptd^&^;K`?~mco!3{$gL&;6&AgT(xhT(bZa!Z= z?Fi>%q*lT?pZT;F&UbJXjc_{Q15X^3!xk1CT&cR|HO{d)N^??ft7z4}T+`EyO)GT8 zfKOr1Qtgf0YWAlx&A>^Tfpdj{UH{e$Gy%}Hn`0QrHVoX|d>8|LQW$Vut>my*`Q3=) zPrx|hAliKi?iV6^_u%}xz#!@7#jlU91X;C-7>J=%pDLnMe=kJAXSl>AD*87^s$r0# zq?-JpHx9IYnSOn!x4(S!$o6t)T1S=VAf4xhlIJnZvn*ZiJdURy*kQQ+jmh{lCu1Td z??dLUQFHhSZ^h`iC3F{f!ajmVY%gm_OkqF9RlG3l(INa5C|aHe4dm~QLh?5grHfBA z%_Za6ryTyCK*5T?qX1!VLL?l-5j^?wA zTfj(Dz%Zu(2Qj%|TPm;SzPRvKFPLmj%)(ApRvtF#7Bpj5iH~dA$NP%gAOkNixKs1p zICfRxW74ZNJ`Wr_-dA!6zOsKf)dy!;r8u4u#o8TUi6Z;cD2nWN+sWFI#vfsYK1!oc z6!aXT)9dUEK&y4|Nk_tdu&X5e^!KU$BgP*?Nsci|Lamah@dv&&7?*EP zncy~ql*>)b_)^Y)SNF>dQ1|oV2zc!?49SJlzy&e3UbJtt-|og=_>1Zf-(4Yfel<9x zU~V5t!Tc7~!kYa+L|mp=gcR3pT8d7@eFlKKVAARBUKR#qrIciyT)4$#FjEQ@0=f)}`=|e|7ks2)cyd z@yYro==J}Y{GVAa^8XT4keWTX{si|Q^I~~N{(nP2OYGCf9eO?h5v}Dv05RaMWvZ6{ zES=-ilH)bZk@7EbbBmeWB2I3Jrtc1u|6DkKM*gq8bg29fi2U3Ba`|srCLI3&y2x<{ zp>OREM*gn=)ciIraQOWSbZPkq0JfI@VgB;%${&1HRNu9?sr^^-5vBiOMa|Wkn%hT+ z{*xNZz6@l<(|f!0Tw&bMrP`10Mm<{2gubYv<&b zxDL4-(yModZ)tk>O&T zLO9g&ROe939vVGp-_KDkQ{ga5_Z-9M{d6D#gFfaN?CW?2yLc3|;Q9=9bKZN(F>n5s z`+2Y%h{uU1IMVQP5RWt8BrA6!#rZzO8ULvB*}_``=n46uZ;c;kH`*V{twj6yX-H2f z`mUv-Mhk~4HL5LO#ohHi)o2uNTHtxxp4SAYLgPFlIF}KJ=WQ1O&=oQBQAg44NN7b% zG=7VUz9<+QkO#HK3uqP>nO!B4-UQQPg$RC7&cEf3cNnRs9iasWAEkJ&e|$ zMZTgEeF$W>jPLWw(%+egz0RWmG`SzlcgTGUrAxa=3;?8a#jY;-GV=6vs)zbAQhbRM z5V6y>94uzw>{!8`3+JjCJO;M#6>33{fiClbdzpx z^T7h;w&ViJZ7OmSi#N&5@?n$ZgC@&8UpwvX2lO~;;3DxPoIIXNmm|&R(|o&hZOHNu zs>tO|zS66c1Msj5HsV&jdT4fH&L<~x4hF5vUgM8eE=IlD?Nk$fq5-HuTV=(aDl#iW zp#sjsJC+wM*yv=AGrRc`dtU?*S4^~HTl^HIh5T~lWh3r1nL!+V2~nJz$nAoK+@ICl z*qe9z3|{#ea!zcP(2Btf;OmElO}ujbz@KGP%v6YoqPlk&MK$6(tzv@#0Gl%%QyzAt zKN$j2(tl@5Z_mm`AjlDR1h~cc|Do+m;G-&*eiKL#5j+zWL<9{GH6S7p7ZA`4$-o2> z3}PT^0=U3MuU-*m5Ct?iN#HOHMg(y~amStOiVB(ll7NU25fM=l6lVw`Dk3hJ_y1RS zpEC)#eBXP|pJe)+Q{7!%Roz`(U0r<(>R}V$l|%ZNRH^45Z@BIQhoo$sl0>k zytgD!^$vMjcAf;PM%_FBQr8MyL&uj!#^~FCLGZm?`%M}}Gb-UHh#(qO+pME}t1z6| zS$=Fi2O!degK31ql{_yc0^~fJS zE>e&Dfvcl-AheDx6+c0E8ROod{r&Qunq_YLuiCniTzD9ezk~V;EU@{L}c( z?yv4sSpJesMZa9AI$jEXL;cq8M8~scK2KoPB8<*f86$9^uU4rnt96#oFJPAYC5uh1 zzB)OK2iAc8TDidV*QH;Y{(2Hpv2sSzYzPaRe1zyQ#Vf0m`?%$ecgh=Q z%2Qym8uWME|Kx)D9MFCSH2Nrj;+j;-Sl%Ur2Q|@EHPYX($U|sjm^#(e-cI5A9&qF! z^>sfs{E@GTD8QKyIU4kA$YqBX=9>+y}(eXqJE!w^0VT zU{f5hi4NE&7$Z!jjKC@*7+6dBQ`;!(Uli7!q_H?xu=w#SVu5M<8zeLq?VaL}bBe!( z#p^;TI6Nn6O1Da<;3+pOV#I3;OaG1M{aJ&W1kOZsaOq*_s7^fM5iRw?4>`yby ze1jkd7hp5jO2HTrS~;#^n1iogKkVSZkvC^K#)Qai*qq7gg_z@u&}Jli@CF{0OlKr= zl}tr)rb@O&vP31JDGr?MH^Fx<8jr_uaHPIL3gBh&Jn??pj7+pF&lcY5rg8s3ISJ73 z`l9hr24U)Nvxepoc_Sfr1|s5)ZxMGX@VkWX2dbz$YTP?gH|-o8waBZ)QB)5TICLT5 zUvQ)jS)KF!2tb#&B<{J58V<`1#mS1DY9=M0Yb1te|MJ=*>65GBAbU4MfNTiti}PWbihtU%2axYCyVU- zEn6b!{##=aI-lrf3KkIAv)$saaf-jfDZYBE^ldfPF$TI0M;vJLw_B$11E{j^{E5Bh zQib4JAVxB6?@a_B`tneE7AwGqHQ?(4IEjFy=e0;^dOkGQ&~pLsS3|(TPZd40T(HRw z*mwtQ6TtqOo~;xXCu%Hu3Kn~}5ev}sDFMH0m1B_3aix>vL}}Dj)ybCIsO&opY5SrninNbxp_wtSwyqc2|ApIr2Q4F-#$e0;x^U-~L3a=M|4_mVKJj%rklrMyy;#Rbz!r-(R#VeeSM#_{*+%V@$ zi0i>%jyvY^bXhn=NAvnhTYhu;JdnmEt5w#Kkl}DDelj*tp=cj^lWM#t)0!veiAvMd zhGo^nW9zaq_G3JPR;OQ0I7_1R7G7V8_!N^6`wM%)`2LtEdpHUtyTQd6;|g))Y^yb6 z6$XOvoAj~=qA+7M?|r~3;|_La>Ha`#JH#&t9e_<`j~CuQRrz(PGpZtyz0=p@B0xDPmI%XZ>uX{7!I?ZnV#v1lbM%w2fzg+kxiVl?hoo_M^4isPr@1Ao z53B=%OKMQJJfb?&&sR#1>fzYoR3p0qikE!c-UYms_@i=$6$F?qN-j@s-rh>S;kccg z;)PVEAs6WW6BdUV8@MhaLJ8LV6|wDj6+fJ0D}NiYhe~{<(C%?Ch~fx24(81tkAm$V zVHyRoTBqV=(-~O%aRzjvCZKqLjXGd129? zoyB+XBA~VLVQELPMk{zWJJnf&5=O66-Fhx}>KW$L^ZF(%$yKSu%$M=4*d9is6PU@0dK&V*_9>`g&E%OWMscTn$$8Z)kT6%O1gxca z;$w6E2AgD5QqJTWo(vpy+x79-eE)zb z;D~I&B5Oevy2iiC5Lc~-z{#@}k9_vC(mkDP!3N-3u<{aM10Xa^UkfJD!f8I_OS^m# zezI+hiRlqdk=bbtD8l`zT>Ke%NuH{Y7*Z-#A7vDnHWO>#x|R*DoO%`zFjG)$!@gy$5=%Jt4ZyiNxq}Ty%gB|Gm&3ab)8VP}poYQWW;lwc;4JRglhz=B)nl=uS^gpry z2Y#{s7>L7`YDmcm&ykVEp3c=y zPGmrl-}d76uhpY-?Hf}K6mY^V5{ybC>vi;>#Q615>`i`h_P`zgMPq+%Yv;kN^>L29 zFD^=7;*+9F_2{8^?LU*ePW~9YZgf3JvI0Cp1D-5^TQ^ZCpqbVpp@kxOrV)yR9~hyy z3Mp#(Pq|>9&oE${9I(Df#a|Dyuz|uf7=!F9PYAlxQ9B3Od%F|e;erLm_Cap(w>ib% zsI?q>$KY8$n+TEP>@Z!Ji*%H)sqYw8(*S|6jq{{bR z9Ho~VhP+hD8gD0P(G0c7N)K*x_|P_PEOh+^IPueuO7;zUDrf!iAOs0A^9&Ni_mS|= zDEVSsI8Ol%)PSP|uss3EKMxX`f4*|Vn0}y_QZ*mNFhc&tHacJ@IbdxZu&Dqul^(KE zgS85$21bjk$TsD0{sxdB)*HGJ>pM_*!engjn6(4WaSW-m9k8byFbgTEF))W4MBGI3sA{j$)lQLWdkJ!dxUwUa1N=0=wFVsKLO7N5 z(xCYO#f{9k|3#22#QiTD93*=>wV&?Pe&>7G`mp!bb+1m|=t3UpKqfkn{{p10JP?v0 zOzx(!ixJTl79w6%1^lg2YOl`?H}BY7oI?9nwjS5vvi zb()Bi{6IAOQ})#AoN)P4^xRl+GXq+195k*>>Oqu+6eB0v^@LQ9NkYbqE>OwMGk-Fiu$q z6Xhv@L_x6*g1OI=8yTIhDhqfSfVgxzFkndHvKvrTP9%`l9Eh4$!9@-Mbe6nzus)W9 z&!8L&$k*7ujbH_^`FQT)z~v1$%o=^;83~~$9|3efr^E2X$#JDek9Zmd?`7uDw6+O> z8>#T+c_hG<1RLRo4d3|?2U22A8 zu;^=34AT==epvmmy?9`-kx7#!&`ou;|FJqXCLJ`D*-78hlgmKYfxy4J|>Yirb4e{j76c9sLy)d8yj*x!!zlQ7tP zy-2WL48q*dM4d*pEa?yF%pJJMAsm_V>o95X;}+IG%E7cU#OuUV9_%bE}P0*uGyVj>;yQxw_1u5~_)pp*qep^DRApk$uky;4} zO-oOpULy9IDG$gpEeMj5w2{tY23->BH{e}L!_}BNdeC@L79n<#ezyQ#&HDXymdkV& znfX1;b@SEL$w^3PG44IpFePKPVakGc#1x9@cW>Rf)ybRII?zWs&`llaYc#Y$rj*A| zFcJpO07l0HBfq^8J!%OsVIyifsYbv#Ak^VO9nZj~O#w{{&y`d+y@3ZB*-gq-l##{gauJraA9nAVm+ZZMnd;0!i{ zo>UBhSA_C0YrzKnIK$_`TDEP!Z*gLorT1ckJe1*V< zEY-lHm>T?B2jDyaui(eG7qKuTUV97)SQfM%V|9^W&_M!Es||F_3BSg<17lr%EvENr z{1e1Q7}6vweN2fjoCZ~Al_z)-{zBFH4A6Nt?yYST#kH%9FLOdn-bHSp-AKPws+VXc zlR#n7Oxhrk6A2!^6XF_mM&ohS`z*5yrE^mMoAS8p~&KaT>{xNsa&u?#@w zMQ+HCYe*TdAtoUgDD}v}Ur>MG5okx|BNGo%Kk|leg6{)bsi~N^B)Vgfs8J4muZMYP zObHYw_)uGZ1ffJN-ta|GAnICxuFY+E0}*(RGGnDzBZ=tGh_+O?Uf9t_v76g zYK`#r$8IK4h$V^l(8mLB6!RaJ*>%;=|~TQf+R*f6s)zdf3d-0z!P(m zRX$u^cm}t$(m%q7`4n9_Uer%PLJ32p@*a3-5b;e2^vnZ?Yq#{LdN2=nlQ)M(CZerE zzIFRZhkK)p#HnJ~d5ow&<7jJt7x3*tQ~-L2b|ryJ!v)Vmx$1#tGfr95vAO7e`OR+#y6C8&7lu z%&r1U9Kz$7UWr0{{9!b9LwcUTQKUylE)Odx(w&iq3kym>b>0<8wbxfM=|2s~9nHKS zvX9wf1aw6Yh+42wQ?#JsPf5zSvHz5w7(^<85v#yr$Q?FlSD3zvGfkY<8FzkM`(OX> z^rMRhYW-+?2i3EGZO@+l+A2;g(2t%$0-{dEb6e2#>dkMPUVQ;lf2JR8JDh%mwK@!1 z@8{U~`%|2E{0;L(MJm!*1O$r=V$n!Xo~QtOYQVt)*j&(siuC(R2i*(@-7XHgcf6%k zq>o&%77kbw2W%X`Ts=8AEJrcmfk7T9hl|b%i|0@~r@(hkB++h1siGoHa*KZ^V2Ji8 z3ROelkx1!6Gb&|U!A7~J{J?G0j$na`zWr@IuDlN1kQ=#+wk!@T4D~iul5Q+qw*Ny}m zx`O-_GY6C&F>}-dPANP?HRv?}6=kP0p>Kwn<9H;rOy*8B^zy zfo$hMmH-k;PAV$bW)4~tVdcp9RCbVdV7h{7qpk306CR+Oq+=w)>Yj#;@317$CIGA* ze}GmLy$&JwG3IpWhO?RYEtsuiix!l^Muk}w@2gzJQKK>V22OE|GvBE3JEeG@=rhIh)FNNNP}+yS@HE6G zto8(t$KTZ8#d-Emh|S6yAV4__x=b?E5>i{YG zgXj{WscFz4ZYEy2X-0>@^u=vbzRXTD7M*MKn@ebLQ6`;5V$$K<2;O2hkS3k}8Z0-h zB~&bB(^-Vi%BGX1U}@8_%8$o`w(EQ&b{$18+$0`H3DG0I)p`UO^5>SGMgLcpp4d#O zL~iuO%HW=GaAUZ+9hnLwm6AZ++#4P~6;?0d+&ek;=IDQZO-zV4;fOwk&+tSJ7gTtc z;yMHjCZ9xi&c|=Kyb_OkcGafFZx9u`xE2Qzr>~;q{l)ys{rr4&2mr^r#JId6aI!e2 z2S)R76S)fJmrU(o{L#h!@WX|Ae!abo>cjW7W*;80oMRd0*TG2Wv8?1jrvFY}YWnZz zubKH3?h$|F+Pmyee6r2Z+{HDv-~gy}atZ4<_Ho9)aGV(n?vS}PL1WNXF!*R0$KK4m zusFPNB~~UID>xIXz&`*O2c6h)MED5-&vwCs*XSjMjW4!Yk<1n(69viP`S0_K@=Gb_hY3VvA$5}|B z>Ok4p(3B($&@E6phWadYMbF@F=!IAp@KOSdxSv|(G^mH0s+*eRmZpPv5qC>d`QdJ9 zDmS+@m780d%75>q0)Cg9Tbj!CElnQujLR`@6%Ia|fBIrTFn4udH5uQA$rWi^p~)7l z!pPRK*5g(2iLqePjty@$aBL`7PDCpwoUIqhjOL56TzMdrD-VRK32mUVFsK9r9`IU{ zNy*-liv~6E?jH!J(IdRoN1&Zp=l|@IHa2M^&(<<9epmeKsehUNC;$5XL%2UH%ZL1? z|FZuyh^KOJw#eD4V^n9@n!?U-@9XS44ehsy5dpkk1HL4H;|WOn?bS$VVY~NQBRY4! zY=rISmy}-G&jp*{fL-f=)dI}bON~`k8&t)s^1lk*)*6d51dClui3RprKSx4iajaAP zQBLtUvUt~2i%?_tu-{?JCvX-8xtrBJt7Wjs6!yPzRnfDkfP=&;59u3b8wH)0;o5EiMnw zf`Ke66*I%&an%$fDzPviuf*oM8h?d<^yQ9QTAZR#P1LBKAgFG7?NAnWQGlBPz&7o* z*rw+QNESYfgeKmmai$sTfxK$Q*+_A_^%fWG1qbX&2douRf6Br@OH5C}5onYjjRKY5 z3yV+<&=`#rj7}7cz)s7pD%+{5uT#|{|82m|r`&7u0t>MT-XgfbADKK3?f4?%IqYg`F4wYQck{qX~mitZ)UMnDAVB9C9G&e#)iCg@=MCH@3CggolnpBGtxy zu;qVPc!>OO4zOe5p~2^Q?TSAuP^17*X{p%3dpvyU@< zmT+R((MmQpwxVp@`HBdUv8KzOeVGEhO9MV5fa3^AAu2*b3(=ipjS$&Oj1YbIf)b*0 zT(D~$uqz#~8i1Kfc_83WpNn%87OgZErwA6?UnUk1oJ~k*ERJ%DZ|W3(4U1QWGOiLf ze0d|7Yr!w$Q$&vKL}^38fFCrA(-v5jW({iKU=f)(4n}=mRSx$1YVaqomVOr83zpSs zLkEi!w#jBtYQ`Ecdw!Lhhud@X%lLsyj_B=Nj)hjGyLym`2dC{Jr~-aHScN)%7d@0C z%7K=OhaUWf`n~rOc{tSZ{0(ydtEYlouOW9HMaV}9dGmd5(-$^{Sk34P<3{O0h~2$%%6{7P`@){i#H2 zB-PA-ksvD@{nW>GZ5I2v51rbR#V+o{{W_kke5N*HcyBHNu`g0hm;}^0!p>vocXMk&+5jN!@fw*-}!XDe0&GI_>W2l+?*7X{IVENlGeI zC2dCu#Oc=~iPLK+KyZ4-Eos}82B*!)uW-5mDGWgjVc}^8|6Mfy@=EJ+(4!mdTvp0S zSiRsi{y|GJv7ep+dkFxju6vmPsk&~%=biBMw904Wvz7kaSgSQJHTuo!{>P-LxR%0N zUH1*1W4Q5`cPNbF{a2oswP*K_-nYT2gb9d&RSYQJ6^$`+6f^9wy6>FS2M^eIFUIZH zT=7FU8ztKq>N)@#o9_aSvfU4N(bOvI)iq05V3(S@rfSRE!;aP{WXqxBXD^xuj15TH z`OG-FA&{yzZLh$lt(mV6*{@x37KEHOkBh+v^5fd(9c(~?D9eC%nrCv9(RIj*k-JP&q|42D+;%Q*>?x@7; z+IXLU2J&?=Cihwlq$7K18QarL2|+XbhWf31PWSoOkU-mM^WHtu@b;_4hPQ)|f-R)B zk=+}Uk<&+FkNwOwMcnx!%tq8LU>Ai}fpJ|OGhBDO4C!Mv9=9eFk3PhM!l+#LMXRV) zfc-RJfdC#O2tyc~xd``h5bo(9eD9M=7{7SdY1eTMSW5?N0>DhA)GE|bQgif$o}48L zi`P&)`_B7GM0Ykym7%i4E&i2aL$>EosOl2OvUpXf)+!z)jdl4}DQq;N`8lv? zP}Q3*?+QHBE|Pt4<2(lI6HbpvOe7sDr@ zg+JWCx%k<8FV6Q4jrNqfSH)`?DvO-v)>=kowEb_Qj6lnfq0f~+tuOYH(auX*q-)F`oae}x3h+KaFqfSm(v ze1*fn_FOv#PmJhXoXGLo@9?fKb!gn;ZBd2z$8d_cNCA^r zKWWNCFw`FOHhG{`4vtkQud1J6glp=vUR{!Sh~ym7gycNxX^_gA$#Xgxm16AXb=&F8X_e9+kCx@qnUcWWOZOw;4c!XE zYmhVOkT|<*2|n@N0AqHgvmaj!cdV|;k!}RvJ62cLAw{(WF&aD4@z9Z(S<4YCQQg`F zok}^=)!mAw5YZ%jf-f>E5-V$sIw&gsbWHPtE@f&r{&Q>a7RxZlpN`Miu|3Kk9tIZx zKd$J?PxXffH@Kop1t0x*u_IC~FEb*Q^q3K;Yacz8gyhAuBxJr2vg|dkxt zq{(s3UUaZ-Kj0PEEvwn@kp`hWOpWUyM@#%AaDU_Yxwslc#NKg*WmI)|TI z<$Qv%A3NtceU)&dML@>b4F?smcKuHFKKU5gJDASs z<3Z5Y3g&qYvsz$6gyEER6B3%B&lVVhKK76yXbYq`W#zkIWe(Uh2W-cK=rS-pRwx(! z&ZzdiiGtdBy4s7R+Lo-=n)x_tl*w%^65Littb%=5!ifE%jtP4DTcz8Oz~>? z12@SazwQ@B^sf$(=npR<(XldF&ULB^fHGMDKB@uV6u`*@B)}hz@edC*tiJbt z!|M9`)XK!?g5BbPO>n?A1I$!^2ia*vV{$>{6 zz}`s(*&W~?lLjbz=lykRWkNRsf26>pESMbb^(nKLxIDq?WI#hV<--|4bHkTmWpaLQ z_)6MBy@z*Gp7o&`+T&&bWkPLe4xPBiEL4iTI&@I{`cuv4|I77q_l|nK{MOG(8aC~x zG~D%|ChrU+G(k7dl8IyZqtoH=4gVFR@+}Om$vwf1tf`sTkwNi|yd} zQ_y}>i3#Dsle9c`2MtNf0sBbHrVnU&{P})|quufhN7Fz-rO?f~TjY^;Ery-IIRu{T z_(l0u#2w#^-2kC)*cOa@?<1kxlH|1I_q$A6u0)C>-(nZ+ zvmDdpj~uW*NVy{)w30(?*zb)ObW2b>DSFRdQnWy@z{r>57JsW#{3NINt#eVlE)?ro zEPLh7H?D14KrQm^1938^V#J{zfao{F@~!l3np#~TvS$bp05)b{^mo)v9FD^;a*x>; z>bGtI>Gm($SGsSr%DB~O&5Fo)+VAAJtW`SeC*L_)?_^dUzbQjPQ}PYJA<>J#TuFUf zq@*^6BD&Oto#VikJFvU&)UXO6T0GS8n@JwhC5Q!&kx&e^MI;55ci(AsQ+&sdQXxvhF50My}9r zIKJ6G;ONJi;uuKc_?Jn10`@N)c9ShWaf)+x%f}Uq%036ABDJ5`Lyli{HwoQPd%R8o zj?sYA1n_(UQb4;Sp~-sHKttBcK_ErestP5bN4Q{p9k8<KCys+E=EFQ@!0@_#YZSqVbO=h>n(UJS8@NM3d|Q6qBJxL>BejX4(DEKMkO{- ztoa!8BpN~0wkEcBJc1lk=jVS&a$@IyH2=V?ghNg#(?#1Px3CANwL5qGv%i<{1I4jX zSj`+}zKYuq$5cyhZFS;vi9zQ-3}0Ir-G*kf`3H8h`LE0)w;CCAZd8!3YRL5h873qR zI=3OA3H7qi5bD`G455xeiUyrR7cAm{l{sK_bI7h`DjFE~#b4I@;@bV52Az`?9^Ew_ z0|bwzf(ID(^IZ-e-JA;2oC;>K0#hpHy#jw&g00ZlkOPH)4BHCROY|aefehOZhDDOf z*fa(>t(FxUSyUY&WB4Cl8op)QZ)+;&hy|0HLA!Xya&M>vAhqVcNjn#-jB3_-id zk+F5;NM|&w@c{px0z5?n_7lKg=aM1lKYNhS4C$P07;++-uOxSRMD?F)7wq>e1GWzz z71(7+{q+DpO=0m6YA3p{?IOAX!2;|U=N7-vDSp0F{BN`42Y9QLF~!W_W|fY_Q(pLa z>aW@1N5^%dHNz899!l^m@b33%*MjpD4kv0HdI}DE?<6IF!&gXXN}S-}kmBHQ6L4Tr z%D14eDykMmusP8foAbCS>Rz{~_5BUCR-*t#t!}y~%qDymEuwNQ$>%oH`mEh^*` zHN`3F%P_F2_65*(F#{D$#(+>*&<%f63cC61!Wc2o z6r&DL0p7uMD$Nzk{3$45Y;~rG*}A>U9Tfa>Ck0Nppx7wd)Yo#$MBCK4ebRPpwmrI? zw`#X1d*~ck?g{r@4%krz}{nE z9Xv{TKEbFH#(^{+h>cZbY@Bf61dV!zpuQ(U2DC@Tf)VNr&PG-lxV4T`oxB=A zx>>(nV4C&gOw+7Ok%}w8DjNvm)xC}aTlEr*im)e_5{|>h@o%C2WaLHW+La2)0FWbn zXMaul<_MAv{fVm;;9w1Sl>nv^kR$tXF2*?y#$E^GCugXU{oC12!#X)&?HsTYfEkfE zB=(OOEpAd+yo1__?q^>S-TP3gjH+|o;#c-FbbAwpDskw@;$7AKoH$A75-$mzLp4cc z%yI5~>Q1McNf6C03YXp*m!X2o(ZpqPD-@>+3A|bNUUl+MVW-_)9mG00h|Me)hUy%4 z-Te*t<;>4GLxG+BP3-45tr&loPX~p{^FV=QS-pc~38B))^K(Z9Sf&9N3gBe~Bo~Lc zXomV4`b`0Hihf^~DK4Jof)zPnmpEW=04$!1a$3|?O_356;wE@$!T2qXenVFLx7F;~sVa>BnB&oBY8dqK_pA$kH_U-In7InY7Z z4Rpo~Hl9BJn0nYl_+Q*C6yu3IjL6WkZta5zp!WBnFB1{=0Xrr9lCc3}0C(Ni1mq0= zar1C^f{_ikAUxttNtj&L&io*;rY; zd@$)~nE>dMHxl*_y1}IgW;yQMC_?Az+Ws!@O#m}xDj7ChG_9^i`)8wT$gTLUZ@z^9^^8FE!kq7E&^{(gi!v+koxG zM8#Eg-yG>`**igk+Be0G{~>9lEKVm!a*=!%fW;;$D*DKH zkMKjr>);sS!YVX}&D#0}n|1FD;ezRO!iAd^;Qbo#B>@~yK=$;jk9k5z}nMw~Cuie7~w1i;1?4U3@Qe)InF#5cl7=a@jkkA+%;Z#+R z3KT|TSd}|=MvwX!t`1F0}5b!;6SN z(GHh@?bW5BmxcQ!Z|jN0?aXHXfsw4+!YFENNIdRRrI1?=q}bArK4VMgmK`bv?GyoP`jgJL8!(dV9PNHPn!E28hcO^Ly|F4(^vu&W%fH30huV$fEJ!8Hn_CK{u5 zg3-sNS`6MrLSvNRRCNFqD2zt3s=pHhpQ>RIN+xlZZY6PoriN?W8Xi2ywE1qQhTm^( zCfW=NS3u26upG~gowIEsMe z{V*gnrDvXHC|v@C6{UAhQM~Wwf?eT&UFv|n4KPzFr{!`rEvpkGqQIvpERr-9?FEZZ zN;JRULqcQG#3}w)6soWo&Ej>T^ihmJxpF50t8^NkWil9oA@b`hMY8Tg4J6Eqn@N}( zOifq0HQke8+FRk&wEq^vsxBx~#q>jsb56t)HNO2nW?P=*)i|n{ZKbz*6^5IP4NwDN zqrehz#D==#^?nNUDq0*i`s;BW>*|T;LUVZRC64%vp}jqu)`#{`2iJM65no~zxvd^P z>#OQMaPj}66Dr-MPi$1yr^}(L6>YWBci?BcI!m!p zf#K;}XqB*N)B?>76OUJ#=cqbhiBj-yWDFlZ!uJU+LkF5qJU(Mh>_}7;I&g$F;~k)h zXI}Y-Me>&iyePtJt=<58!OaK!_OJe`T}}P!%B{aBZD`54-%I{yvF z%e$nxp2zN5#b$e+y=$ZVzI@kL`~}5UtZYWAtytG=tkvtdEwCE#ce|CMv!>{*1bs(= zt{2c<8uSM%MVFeQN`(&W@rSCL1WRJOP>Epgv(mTwtkv7WC^Wgl4%o5~ACdSpz>kQ$ zhe|eBD>fp=`8!^qmu#i~j^E$#`x6-TJ$5nh^T}8*(As^&HcSU2+sERu2LaOQ9tCNG%Qf*HNv_TwWxKARj?T~RDsJYYEbK!R>3x}b;(+5 z_&V#753J!IVgi^a+5GiY{@yjgrLo)5PTs$;KhWn8no}edng5Q)KrPV6opHuixcE_G zR@4Bw53B;5E+R6tGR%%g0vxCTM+sni0&)uRAfd_c z>t@K`4~BIbjg9(2`=Zrr! zp?`IDAFcos2305Zk>AMFJ}r3x-*|kjv;5Ur^4VXF=>ub=?3~E~4q4wpzlYx&Oy&)B z{8x*GEo>j#`TYlM=kqro%9b}2;1Ug3BY~1&(@NN*AS~lvfV}j{#yfv1Ta(32NBP9(Z8mP zA>tK4T1i#)1VzMFE?9pD?0g4o5y1Xjwz=qBT_imJ8nqMMgYOgFH*V5Id>#o+#2x7d zi%(Ig!othqH4&9p0z9ZPaUj;?=S|`r{gW{(9wt6Pew-^uNFi{wMqsKS(3=P}qSp)s z*hd2n6F`q(3VJ2EnD%xs&2TVXaHFEvXOo-;9piwtaKOd`?62u{p2Ff4)J}T6x1RKx zg;HfKxYaHGrPB<(orFg zyIlC#LF09f;PpfBP%?h00QUia4QMHVYY51`yBrD4@E=Y!4cLV-MKvIwqYL`(-7eU> z4%kWutP4_qO~yMF7XQ&$l)pzZW(gLU&(3p;zs@QCYNzMMHu8_VI$dbl4zDpW+C(@0Ef>8>vhX(WuV6wCh zH2!6R)4J|yhQ_C&O^U{|uU9nQ;DR0DfYsxp0vm(WU(?u9SUio|iSCNEME5q7Dm0$x z7QeW&!D5k9d@~l`fW~n$%+=EWT#PMTr*_CB^;h(seW?gZ42ZJpd(m6@CgHghcXMMKkFA!W*bw_>^~L zAvnh$YH#Gi8#*V{X9Yy(h&!*GW7qiY4>C3s$Bsr>?pS2(-OhfefBNptfXKDWxR;f~ zD6JoPC4!3L<&tV2Z3#G1rB1J(cfK%bFGa`Ky;B6XkfdF1Y zKz1NM5}HZVPBzpJf+&jmpN>;Z>ga+Ecff`?U@rqK-W2wrGKIxml3S;k^b2Yyx+#Li z`s;}Wn6v^3jm6I=87#g-p$dxv79W;E^&!C9T7VMDjn8jK(&tw1aKmf2+tfsKPWJYH2so_6*p;b!^JwkB{E0I7VWSKd+tF_yE2&n1DJzk-~P zAp!1}J%C>_^Fb9WZ?kp#3n0Bj#9}bK53TZt@C;-(6Y6*@=o)lVf432F|&X$rhYTcg4^1FXzm1naE6neKuK7E*J&0UQv zJ*~Sd5v4;yVOqWwR@un_qnsYk3PLKvpH(^+gqF;?$h@=@xbr#^39%$XAwmckVAoVd z+XgzJ{l!Z;9(1P@*s*8|5Qg9M2tZo1hT<>FDbI&61GHeN8zumjM%r9yHvN(z5WDZ7 zNZo<$IdAw?ve^EKpv*!>-vbn#&#dw;$cl$7_@5z^`ib)7$jb2k22l=Z2XOWSeejh_AOrZ7 zu&??OPdqN9nAoo{HZCrIzzZeCsUVq1F}>BI9$s|L-uDQeAeRxA1urv*Z?{OkO4BJ# zqLw<2X`c8f>~f|bjo}57P8_qgVTp~79PO%No|*pk;k=TW{tl4iSbt!h6A@y9P+C}t zQMNs%GSA-awLema6O)D?#AWll^6am(!(%FAh<(I<5JNnLdb>7bjUx(+JyzKqk*C@T z8L~Vp`~=Pya&@eT@ZI@J+9psEV6r5=*G_5{s>wtjp`6XacZ`_f2dd1|Q9Ra;2@8k>7xUl|O0CFPg9vcZp;ho3;-zB!!E!4d zb3?jZ4S<3XwaRnOmd} zbz5)xJjlF}Sa;2xSK=z~M?*+G0DqsK8z~ zFIW24oy({$4!K(EU;U8)xNNA|N3YoUAgiqfnuKUPR)r6a%Fwc!G2MveDTyz zUji~ogkFTLrotX~DunA@rSJ1_ail^(h zW}G9>uyinij>kx_cPO?LW4+m^5m6O+Ih8sV{`55 zY-vDCi&~v2KUsh<6Q!F zVqF_KGrGrK5gl;?_lqiVyPwzQ!Wi{pYu5fmEriX9sh9_`S^k86;ezyd@@)*@Kt9P= zH<5>eP9VKT`!c=~dUYnfu1-q~{#bVr2$r&)1p5l-rxt-wB-ql|NU-22&FyQD&;)zX zV+eNlWrkqCUkYF3f^^dCE1}uW=#wjcug{H)@fd=oxCHxuLa)=>YI?z|S2VrS~HHbwME>6X$>d}|F!`^_K)tYmzX^Go7>@CrW?<;`MJ=r zrx+=bXB_6Ed-9g(k*FKuT$_VSs{cx!FE;Y*kKF6XbMKH6XGFjfasICEJ;si)6VaAH zFV&7)&<+#7r$KwJ)~BRbM8~uNN$r){HZF_%Hdq5Oob`oiC)>w%X1v07?kUpk+>V59 z=kZQEEvKEq5xSkm)FT%bPybg}llfnr(whL>6V9W1_4tinAC@JEL3Q;&}eiL zG`_f8_sS2E(Bx?Dl%L>~KNjWdQWk`bEI<{;0yF_J2>A7l zn6Uu;5&h!{=<^r|r`3e&VU#!pi+bG8WsE>)pc;uq^fg9YF#;t4Ko(c{GiIq5<8-=m@5`2Yne6!}uTeTcI@c6ZD+UlWAe!JiSg*us zsWSLUr|#@c@`m;%GA8+vm549;eyC4ku(db5fU9J5tKdm_kr}c`J_Rpnyx_}Y@RGKR zI^176gDYn)p=Z#7Vfr`sx6wq#xA)}9`uPsMelDEB^)qKou41^%=DMQFgEe%%(CwJD z{>bv{ki?=H#+h6@uO>g*=|!2UJy>8O<~oq1VWnxc58=x=W`B!=Hzm{1m&Z_VaprK$ zC#Sgj3l+YhpBVjR+Y4%BKkz(9_E(1MiQ_3GATV5*eSU-)us01g19o4eM0s%=nu$xA zdm*d}l)ri!Ydv!PAQo1wAD+!MJZ}~7EadRWAff4xt5(u+b5tJJqj^}5ayeHBA(PGP zg)(v?tRuzqA+D21Azul~E<#xC;Js0c!$*oYpAUJhI?74tO!YE$tENH;g@W8{OOYIj(@&nBjaHa z`5VllO=iX+W|dxrhSj|&gSXrHFFs7?{}*(%_|88+66j8(B9z|H%N5 z4PzOsJ?y}+ld(U;8qfnj(RN+MPR2B@RFyC35yCkg9T%uom@$0Kum5XvS$tQIO-DIK zKW(Is;=;D#9*W2X9;J~^`bqi@G*Yeyieo$X#_O}r`U?AD>6l}(?Xuml7W(aXp@r5W zC0msT{o&+E%WxNN7@C+5fo#+UUS#=ZKtTAT9e2p~4iyrJdl_Hj*H8DL{9FjO+>LV% z5@p-)2}ViYrQ<2vs^R>E%QtYX2=|qOyU9X$F+m9%I)i|q-(FaWPj7M*^L8HTKWd@i z8(F>=Z{OO6ju9=);r_260V@P6gbtI9m6hKv>x&^Lr;*_G_F3cSJ7J?csB?+TY!sHYP34I)d($?B;@J&l*A0h94zoJyk5 zA>)D1XguO=A%383M=QOZu`sL*b`?LMw%-kG%2r2-b%_ z2T2AzAOyQ!QAB!+EoaI`*YX95sg%x;j4L(%Bk0vYr>XN2%`|o9U^7k4AH)D^rp(~^u{98&>g077Ik^&@T)zNTtwu&Q$Yqr>N`bq| z;K8tN3aQ6{3|B?Vo@5(tMya^hGB5nBEEf=bhTKVz3od)83=?&Ruw?Kv!_6bBll!{( z+?ZfmagBq|`{>4X=T#@ScEJWYVErAi#QrO6H^QNbzt`az zcdHlTM_C`=Ja{_e`FNgCGMWB3W%BD>-BCV4LU)v-|47q<-V9@*68Y=Ul_4T5jnTg` z&Pn=>wjjpq;8{Y({^+D{P%=j5YiZqP?e+@)=|eLyJ(5=bNdC$G(DnoVE-R{4P2rqE ze6eAXPHzJ%XpxsAQgS*XVL#gTW7G=I?L-7pR=_ZYo&5_VM7-g4}^3n4U+ao7D zu$SM?>V@AP_(ja?f$8{7$8RcrF)$9qW`9;&{Ce;UTiOvh;fqlFVEk*!DE33L`FB7r z_>uxK!u_X;puCexP*5MZ7Ea;HsY{t+2ydq<6V&B{x}pk}I|;%RJ&_lrgEZbam{X& z^zqdOZ^F3EkvDGKMk_qU2((dD2a%CZi!?SdbeFaYKZOLtDOC5}xL&JzYT0n?M*`%o zt*VPk7k^6b^(gI+Pq94wiT3uM+Q7j`%?Dx`^hbs#6~`Xf57s)Xk;e8wiHEe_Zx__~ z?H}ciO=WsI^K6+YE__r8^oU0&(8mqpAnSyr?xkQ()G$2-W^WFK9wDi}LP87u3BMVk zPr=Big#M;%jH@tiFL%Ly_|<^z!bb&`j}#5U70!7Tv5duf3VMrBCFg*p4->s0tDc<7 zVVL~G9KfkLA>hN>%qn{nNx9bv@$cL^Z*}UN0Hyrz^ulH+}5P$9mRKtL}M(qdWCD<*z^{eYrkiSIbhua11UEzG$ zQ;7N__ppqL?A|Y_{Kf!_{RF!?RwNr^yn|bX17#G8rhtatiBjEn-vPpJucSegX9vde zs-nv1Q;QVas~#fTZyiX9gFZ3=36#NQ^OFaRC_U8Qh*C0A+>b%cfwNFz;6`;;#kn7o zm)IgIIc}V;!Fn_gxyS>VHH+SD)@wpXyX!j*g1W$p!_l z%=k3+1Be^Xj|Tc2;{9!swa@R=;24norenn>`~>Qzy zs5DLB1{fs)p9Wgsn$&#j_Q^mKG>(37j;Q-q=_*pqUYTRB$_ahdRNaiB^!>apUqhm} zxSHAb)PzBizNagF{}y>#cDm^Mh{As@o?(t~MC}VH@g82H?zclCAP5tIC;nHR1@(i> z7R0>uGpORmw&NA-@UePABtPzRsJUgoVdjQR!^~btv8iRPp&x=Qkz=|^DDQs%MFOQj zNL$y=1?`W9`!r}?Sx0K63Vq!e zoUCFi`5zBi>7=(>+D5U^Y~V_-X*eq>+YW@9=SE%*v6CQ10)O~leWjh1gv-|a&BqWG4dRy$@uO=1OD0gjzP56ABI+eX(gF5--HuOQn;y|*k}lJ2m2;4 zel?x|_CUnrCV;!o5DqQAPsv5)y_Ab-UWz0pfE$qjh7`#selUE05F?Y~dlFJ0KT!*$ z%Q$%>x^aU^K%;Dx<={(>O|2Ln2HD3UPh6nZo%t4YNRC zE+Gv2uHVIX+V_S~LExnb_38Pl?{;*-hC5(G9I%%Gc9_2VnnEv0SKVH!{^UZU_m{d^ z3dYRp#!qjY)a-YcPX2)<7IpNRrv219KjruDL-_l?IOdp%@ zf2)u2@~eN=U#X69rSA5|0D_7&?v11IF0MCvPZvRK2U?TnXWdPjf7g#fhTgaX3DnQt z*!DZaNe}3%I60}8NDsBKF4V?aH|U7y9bVhAn>LyT(HonnN*_mMtaSN&R(gw6x}iGx zKW?Ru?lG0#kE*27hNZ=RJdZswmViF&j+hPfFBq}Yee~(!rA+H^I0MR9+)>hJy9xnL z(70p>E_?b)PehyK;+|I&%uo16d|L_3TEeg=zJ-J)(vRO7eCvRhBGOQ#xJp{!f~|AF zRykl@ks=Lo*Bq7+Z-eOYK3@@VR%kxl`Js6t$P=Iex{4icKJL-w~y{3pXc_`!c~rhrrVpl4c%Tk*U;?* zq;UDn+W_%~Ewxl>qx7Tr^$K_PP5;P^EY2!GnOsxyI%6Hn%50-*#=cXy|CUM+%h~km0o%9hU~f?5ml;qT!jaR zS8Qp5I3AFrckQEKv+NIB+eiR)tL3patLs__QTHl@--DYhpo%_WIKC|m$H$1XS$||& zul}4-pSa2L|LpCuKD+n+Y-yt6X3BN2+UQ~pM56!Vn)&QUfPx z;PwLi$$4y0KLZ@RvTj;+aur@`s_u^(6!!ozh2kYd(cCJNQTJGNa)q1W9Vf$bCqw7B z41o^V;f-PsDtbE5qCY~E{v2Fa$p4*&ulFMt~fNY~vOBy__Meq$Q`Q-*2y_@_N1N(Hpn|!DDDO#kJl=vSCLf}Vc)NDL= zr(t7v&_>DcyfYiiZ|&JmhGZwhL4c_YSH)!rv^DbkZwz%Jzpm(-l-d7l+}?kw_D%=t zZ126Z+1}x({BZ5nz?W#?>jb!q05@uHii`e$uT6U|aL|9Od*k+Q>*=(&wUeQhlVM_9 z2DiOaVAf`P~{Fd-oZx%4H}G z;$bwfU&Zy~rJaP&PoW8Hca_a{-=YY3ug;76-`yj@9_UzsW3t7v z7iU{usp9}4+FrNG@KovM$3`YKEkwZPJKQsazvB=nep)4Gv*KTbdN`8`62e={lgEwF z8Xf_Blv)?=FQFTvxVp^cb|>%2&>``Vhs-#yc_p4WL*l#V zE_Ign1MBu&_11@*4sbja=gklXy8JxJ$djO+Fm+~BZr$EVy=3t#&|)ZlUMPOCqwxCh z^Q(IwS^Sc!7jM3+jIN%kSp4}6viSZp|BS`w0$j0pp3d>ChkMGc2Cf z)v$PPmqS_H)y*=>$uh#pvb;f-f5PHyo2T!T>PD6}WOJ=BSlEoHBbv>Vu+j#3dHF(P zHb11<{5~ixY@Vapyh^hfyW{a}rW>Qn=8<^f=o-i7TI+Ut+~I98*olLq+JD zZcdi=PL|`GEVnesVnnDuZj?Zf^9Ji4tmkpfXfR%k#x)e9brhrVB1WSrMp*iP9z7Fo zcOZQM#t4sZ8UEy9$WWuj{aTDTe25s$(qiVX6d>XhCkiR*EtZQs7FrX=S@pqE_>wR&-Vs|O#mzOH$KNuqOFF&2kZ+N(Fj{+>#fI$H~i-6S7PenrW z{PL}a=fh4lJb(QZrJ>h%b->Pcz`8kLa{*>f^aa8=KS_<*7!M`V--8N^k5M~kwC`>w zy3e9ik-SB2@gIF^uy_xJs`;rWQo2wv{M4Y+K#6fuE~X&HHrZpZjjq1Co=4m^hJH&7^r?T>?SU28 zP^O(AT*2}nBAJbIM`s~#{ky?U%#Z5TH4#aHQ+;J$-P+L~DXw%&gT5|Sll{>#2&Lhz zUl-hqvBYZ+WJs0xS<=mN82g;MtMucX2BX03C&?%<4HPA1=T9ePFYY3O;H)ZxSg)2V zz)LjXbpqIhfE0udNN7R0c#C1dpftmRC7qQZ>`!;VPItgMJ76}zOr^Z5R4$BwWRQ~T z?990ei}k3T=EmEn-Y-tgh>(d*ao)}P#PcpSd5ORIPr{zzV>EYEi0UM}vLM~?-njYcJ7 zZ;98}#^u@TaIg%%yO1-io)I}B$ChjAdV<*7exjokJnom^oJnQ$3pA6>{rR@v;nH?J z#*4fqkpI)rY-=VDO^EICd?ZA`^O4}0V~E{VNpfn|I*MzX;>VHoB^> z>Hwc1(QqK)*=ca}FRs9{5)m;lpA~;dkPQGSD9H);O~b~2xL~8f%3FU)ng>-JrD7R; z;N8DEF*uB8lY!zA99k~1(idvwX$3wuvC6oihg6bP`W#Zg0cNtoJ@|*pig3t#R16ii z{49}wwiteveg(iLG}6j#69gsP?^-WZ>4YzKw0WCs&R1!w(8{5-8x1)brhO9 zAOUgUu_dW;yZ}MiMkPOZnWWkDpH#EyuXyPhbJcsCcQ<4J1Of~c?*$>)y!DAz_n#)T zKpvj>#v@4S37&z!sex;81c^*7sNhfqMgj^%EgY5v(2iR?{9EIx%L2cWyPzUautJ?F zuLUKTa~CpRsxktd!hcJ~&pb#1Yx-K6Q{~y=EZBJmBdY0lR{BaM6S$(jQH$HB9gI^* z8v9eJ^OZK@)o|Ai=LF%2t9@_hwvz#A_cXaZ@Ri%*$`DSd809$t}z?B;C)2Rf! zhkzWAW+MUF;kHWEM@9r*KiP=D$w<+5G{yzH&jFk3fE_rg;ehnaAv4neg+)J&MS);( zj9>wssF_=QAE)@9PVx7m_}s7*Djhc)4j*RTvr5m!6VBIoFimi5y7nc}CBht>%)nHM z!AcKEDvp5a%ov~Mw?#JPD~o802!NrF?2Oui{#$`zfT{%k6`9x=81K-hJee2*BI+2F zSfYH(Ol++P)v9SVJYh6@5sHX4&L(JbtTzdcKK0lwEk(t#_fAlD>d5-v&rSGg#}8%!KgE*e0Pe9u$e=bT9Zb>HuO|NMSr`kYhUT~%Fu ztFEesjbdWL=Wxe_pGkidi9QU-j^0&9Q3aYP4fDeIc}D7+a&AVBuR(V~F>oyWzzE&~ zWPEdQyj`6Yz9>G+nmk|D7_Bp{D}*r^b7y9oxONA_wZ!4^Gz?Efjbm1+tLx+)vkXU9 zzolyq@BrSZ!plG#bkfRA@Il3Z3NiMJe;d9tvIgRli)RtR)+WkHCK@8kJcQ}140mfU zii}G7rNI;bxk3oblNuDFUE?}>UxCFjIhZ{fjwasf>%tce)Dq$~zwxI2g4vL5h8R8( z9}MEXIBI*b91@axWXc~Q61RKPcHd#JnkWOGiwt}YBUNGvqf-ipD-9{q9>_d_QV`y#<{|GZ8PqM7 z_uVk`aWnt95&S1!kQHnxOrQmBYuTdA7SoNCheiSjeZynB&g|k4%}ZB#1#AMsA8}pfzZqA4DKx8)(HDu;m?nI4d3pLZ8L-PX;yE1iSrX!*4kL z?Kd)(9>i0&gVZR5%KQT<)Sw!YHcWnIkCLCc6XfUB0{MB9Ce(;3QzAdh=Hmwe`TEOG zcp!dY>w9#D?RQk`3l}ExrCC_RpRgC!&V|)XE=mF~`{O@el<@^jUe3ipS1WMxYB|Sl zpSi|omPb0Bc6MB)cSl@-0L1yb@=k%cf~8%*06YfB8{z}|VA8qK7k*DlFcIE?ccw=U z;dl`^-K}vN?5z!)M9!dS#INv-%v%}h)fHyJjrL3A54Y70e^5e73{}7tVS)q|8_6sn zIsVkfNG7Fibl2is|NRbpGZnszi)?#og)gzO@y+kj2;ZBDZLMI-OIrW`G$pLxQ^3z- zTC}gm#`MBe^@J@-8~jEsy3ya;Y0)qnS(p{M>XgQ8I)!anfXu(apS_W#w5hNX<`&w_ zi3HlCF-g1xBZ&;}9BbjNkWuHU4EpnR&cSnV@Ya?(}g~~SJdI#Hs zfi~bKu|cnB4^(CUcr5=;cWOEg|Hhr%n16##$Um&Q{k<}*;8L(Bw%_iJWFQtw^jcnE zu`RG2Yx40OWjXly{c1V*Q$AOD@0`k29@ba?KmtXei~-x$+N-=x=+tV%HwY<^IWBmj zM(Nctwm4ov2y%Ot*#Y_|1|C%vG;pv*gr9&QZ;>Naq{uZPYA*L_szLAmz_y zk5x*vr#rRn;q4#E2(1e9R|xnXr~6fbAC=x8FqHCLoc|(rKUE&&doSOq@s#azhGpsI zAu!E*X|G|o&6jAKqlUDN2W`Ur(k=I~ZMvPJ+omlNx^1plW4FyE7{FB9%te1i+pL>r zx6PhFTZo{Hc96khBeuIV**~cJ-J!|&NqjNt{bwq3oKXz*rRae@4x$U_cwg55*=En_ zFkepsO``j+2}Jjllbl>qMY{XChUueH*{S5j1ajPi(@1Ft^z;b zc~;{$RO5H6;CHg%hpySq#V_5#Z=i$U3+Q>Y#X8$-&7hcxyKECY2kyqTC))rO*oq2A zcMxgYglfo+=%2}sdELN{No{P>R#qiEg*Tcn)m1iM%21o|#RjZ9gFWAA0aw0m#NDbo z-m{J$_wcdtHvJl*TLqz$i4cdTb}k<24juz-JR&ckGgAqLSPhRU`WY@6ZWSU? z(oC!ODDvwA+d%#k?S=f0Q47icZam5VXIGNn&dme{Jc)Oj0acYY16H6qVSo!-cUsf& zq!4SUgl@A_;bxc6mOn;Dna|wo3wQO*N{y4~CuwDQbsn6psrl8!jKt4V+x2lj_rhn* zPy74W*ze7p@5sF0xU~!gWZ3}ottM-Ji`(+*u0i>(#IS#BdxE`LR)>VieW6osW7d>M zS_5Zbn&>fWJgCn6r2P99!JS4%`1VVJN85%c_J=*!c8^iI-x#_d5i|Cr7YAxhT%84o z>n;i3-XB2t2!Jid(Cx)}U$B7oC-@w!MK0eZ;R*eN2iv0DN@Uw>4Bb;G4pY}6` zf)afDL~!0$?EMCrcY08+C!CJV!;qOpZX4zvhrGHzb!gx4kP&U9AFR7a^@FePWg7XPviTKx0sdLyarUs!&7>v49!yt>;k*r516s`&A`_(Caus9XF+Zt;I|ioe4x zzOp@wPnY$Rd62T`&ex*<6?>^97_56tR~7F+1vdk6IRLMiMmGdS@4;rX1}Yo$k|86? zML)R#IB^K5`x8n3M@K#2{0#|B`1%T)@G79ACWP~d7)t|24hNQOob6 z_u&;n?_SVJdfN!Sm4>EwF%p{IAIfZcceS1=BU&iZ{jTJi52_^V8Nbbwa zg|d@1W#`|;mi+D{O<64xnzF7AWgQ&K?#Iw@0?M+?3+)bL_aAe!?6>s(#l^4J33?dA zr5FAK5*r-_L=PSAkJpAb>hA~wzkTgd2j zk}m&jDgUbunh~EOp&8NMDZhnN{@p15#1y-8lRf_6b~nB8{jK(CrpSH(=#cEk$B^tS z8?AH~t-x}d?D0TGk-e$a3CYg*t@gp#&_Cu_`a;E?A5cH>XeD^8Y7h1_IhMXe0aj|j z?ROI4=LksU|Kmt#KCW73BfJ!7DujC>MdklE7i_KrHroL^+%oo9THmpNBMA32a#wR{ z&2)`Lu3*tsu)qqija&TXPVpBz#XryDEp;0N)zdwJv0b_m>ddF`4SCfWj*$#Pn+QY=@ZsOl*@D$V=K1AR69l3gS3dBZL*0 ziiKBz2Y4rsQ}OT+SAb!vprXK>GQK9Vq?S5*%vC88aNM5*MFS>^|K;#^m}>gF{hRj} zLV^aWShMyC(&NpfRsJV5IN=t_mfVbo5U?<`o_G{qE$#}EDkNU zvDk}3l_(Eq@s=u-LUd{)A)=8HglIE%7LkW?ln@<6qfv;k$W0tmYYPz$JsJs-(u=!7 zRDoOoX)Hu<%1bRoB?{s=LR6%{C`1z{A5Vaw-@+mHUvUpO1PCjUocRn?al`+v0A-jH z`a^mKLVBqBb=D`^z7GCNRq$QHJp^jXFcxNaHx}lIUqMey9aN!ladzBA+5=dmp%-M& z&oHw;#w_ygLYYNU?odsdK8h0fODo-^dy&vhdiMKvlb+GsZqiUQXE@n87_6)UzOW_hOPjScH4||T`kD5|! zG`NQTule&-sqm*Y_(G9S8cF_q-cs{t0}`4)Ef?ARIT~;C=T4;ba^Sc4gX!o0J%9ce z1F7H1pZ{0#GptGH`dvaZQg^1Y z3xpZl@)R@nk03MVx6sUZ1qscJE$`XP*wA1{sJaBH6ENf0l@w)#J!AB#`14Q?{IUB+ zjFK<*{&mbh(m$XxvX{Yqeq*eV)(a>q=+e zb_DmW;Pkc*0Z6^(A=tkN0%=tVm%0f2#X;aM2Z0ZN>5XvVZqDPd*SryziD1~tFt7X- z<~G?cbNq4T$6e3<=AdKC&)M$?Tb~1EWb3=PQhp{h(`>yH3C-4L-?iEL1ZYw7>wzOD zWb3hOTM+hN$xkEyyVrh(KCvwFBhVw7?FG%%@j!D@X9oU=8ykG6b)0`7=CIaKm{cYF z3*R*6JKnJ|{}lKt%!eT5<_lD(m7##PaR|n$OE`AFz;4;vT)6ZsNavZ5lPeWUcW9Iz zyoH>*SWpsGONxs@o`XS-jX_@B;=^EG6a5EhMlIK>cC==Ib*bZ9WMv zae{(3cqqU_hWRd^JoL8315KAPtjJ!Y}ur9o;jsWJ~M?i7|y{R0?NA|x_k%SMn! z#(X=RB)-O^*}04pHb8difd6FDL#l$Ux@#E6ckUomV?;@VE3bfS*l?^7MLdpL&xz#Bs5nR z|J&xuJ3vTrr8`n|9KYQKd&&W`9I(9ydyBGurelD{?(t7m^H5#$ty1&Jg57Z2A4a$qlT{)u$Fa1EmUW3gp`-hX?J!X`)yP`61`d9d8gTOO2ShHabCg`v-bA^WdxUZUJUKXq@u0a` z@utnD#RqIQB_TyXcMNpo@h0fBD28%g2Q!A>dtUeQ6n!3afyU|@!KxLp;`!p?!wyFM z9gI>Oj2^2;`^xzu&g<&IGjofrQmw0jtDlYE?>?XEWaINP@L=y*d?UH^0ML+)B@ok;rC!ly;C_I0}R`dZF5N29)sf?lxbLcKSqvOJ? z@@V97FT4cIO6rV;;k74tv{@hl8Kdp+r~b;8@dzJ(05RyYGCuJyKfxFbsm$;S85qI=3=A_k<8ef& z=7>;}6%LC9m>IzM0+YkNk^e}uR^l=UW}26TBge1iCBle>^<^1ecx1FlCLK5&S9e5= zk_3XaPDBEwj%U$hYCOSZ1w_I>fhKp^F*ih92ROd-+80C&(Jyi)#NH2a4&U1MLr{$( z<@j;b0Y|ZJ@T{gI*A}CQq~bxT#CQ!UlowE7j483Ni6|4jSmgB&A(zDbBfubLM{8`@ z=R+UH>-KnnQl`@??k0`5ohu>Ms2HPe#LY~reR8IC6T&$=H?Uzr}N9f@sAo!g-t`Vq;fKIpp7;BhU;SU6*1p~W3c{10w^QnfPcSc zcl6ix+8wm_3mouC4*2#xF1YkZxdwq9@kLa^VG(f!4Rk(=(Sl@R%&4wQ zC6up`@+m~2KuzVpML5WA4hm z=_rA6Ibt6^w%^|zaR4r6W_8<)s`(An%!{eiO|c%tWEH0;KPB9tn^`w_td6L{e|WOx zLP&BC;Xf|*&E3xeUZamIEFk*T=1);>YCGW1I5D5!{_Vpzqu;mrcN!^QBEwEx5IZr~ zQ{|28gi5hk2(C~ri?hqHC=Ql&V(pSqc|S(-&xLL6#IyP8MOw;1HJ#rb*RM|O3`Zs*P8XGEO3x)tVJT z^^d0|OxCqQs_A*E>ko|MW2{mn_@LbUO+b zAMMd{P=SQz&ViR~EPgTuTDUe82AxQUx~rjerUTU!>r+GWHNkhv6ac?nSvKr zs6Z6jdg?QhMHZ@*EIcEkFs;g#fEtKFHjEpvi?RNITMXOyEDts`z;Qd4F1VA$^M^=b zhO?PTwAbrme?)m`Z%f1Vt~B&kw06+6_V%%9zWgCZ8aCoV)7#3Sx8Ylx-Z4lu-ntxr zzV&MV!t63}F#L%|qI%{0(Radc6Lpi{FI`O>ZWkOHyI5^hfTJ|vBmo>iK#E7Ii|Fko zcEjB4AiA_piAOUR>=Fm;d-Q=sC+)BD=fC6cA~rQDx&-E@3naR z9SO~@%`e(m)Syr$9v35}3*~)j4gLq=mQxK^6nSfMd+pl_ z-GL<86`e&2t&s=4pC2qN^{XG!B(mxLSC*?2F z=zh|hv!P@?I>p{#A^^A|Jj!>L|pawRo!(pX*(-|@t@F+TVFwpk2)v+3{yt;GH z`J1l)j%%;|JM77u-K+cSlVBlP`7aMyc~>1-N&9ysG%IKR&1Pls*ETD^{|XHX{gl=k zh`Ba&R1i#i+N*mIef0SHUE1rbsGyC;7yqbVvDd%h9*yspz?1m?oKAcfMl`;!BcbuF zeb&ZzGq6-mf4Rn2?Ddc0VzuLSqAGNvru=o+*DwZ9QRRQ(slJ{&<9A8-$<|1X5u|z% zDOxBkD?#LnIB`!-P=LuA@G=2Bw2RoI`|L(SW8cfc{!|D1f-hC~sdT{(&#{TzkB^GT zTadCVWoSFOB+6N0UyG6QJzj2J7I^`+lZT~OkcamR7Fc56Uc(agnbeu$8? zOX=E%jZ~)jDcq~lxut@&2E5K|Xn1CMli-Fp32&h)>7Iq_su_-y`>8h<$+_WZu#BvG z=yI}d;7+zQ0%F3&SOQ{}DyShEDo3C?5sCpZTOy&GdGIrK`&|gOs`h)f7R`)+m^;34 zz`8hK?H#aufJu!Eh`EfoVwbo9<;qSzy&ZW(m*>y`Bt`Mim+veg3)-IC)>J(#Nd6i; zF;c$At~A3)*@i$kxu3%kmK;G^Vnb9z9RPI~?^_wUVZYZ%d?Wcg$uy=6Sw6;_5!8kq z;ipHF_uvy=SMhZ@{^aiFpD6#VX6bA2rxV?zJCwrj4^FV~Zl%`aFp^L*j6f3p)XE*U zB9YtYrO9kJBX`e!qtkkXhk!n)0C}L5=yU+#5@j`A6nW z4bxo-FECT{AekvQmQn7)w`nFfX8^hefj-RG$SD7?l$^;KQRekm-qmM zZwK=`;oBa5+iUbYV9fZkjpTmaRzQtOQw7eOdQW6=^0uP1w|TJ}Pj zX{#}X&MIHTG_D};I4?1989l`w0Exm5w*0qJ)twnezugmW$A{;16`S*i@pCyoteohj z8fFOd4zTk|wsWKe$=f5AZ}}&I!!~*!J@C9j4U(8$fCi^CB+^PKQsquZBV`RZJQ7Q| zOSrjj4SrD>n>w3%Wq(Gd1q%kg!|kzpP{`13{P4u2#=8NAjFNzWi+jIz%7&{pi-1@` zfY(5@=-{q~75@cb$mn@VM&V=7`(=mUNG<@QGQ*+d8vJIPJ9%9pRpg%F<#B;K>K+Fa zby=A}gt_*&V6LT2b7fd5%wQB=3AnmF0_0ClVfh@1S^mfPjV;^=U5K(Vw$%hDb&vBu z#1z=+gUk6wM4=0`G_3I&0I$=#z%q~TBqo6Z9R_vvTy`X}7EK2*dK9chp^YuNz|HDw z4{N;=e9D$F)4DlE3w~X!61?tNl$RYA-Y5;I%^RDAp?8}923rnl zfLOMC?Y?WwmbLicvSpbI)|4$TD?rVbS$H~zEf2rvu*Hw>|C?+{MtPbouE=a|Dl&y1 zV)=$0Add}jwIkwpn>*0y)d&z=d*5f#KBn{}ZKNOGgN zlov@@iij81(&W#8B+R=|n74$>7hE37bpYGNiR!>6?G|=PA zjFfL6%3Uvp-z6s9FVS2xLHsJ@yCnxLG@=6CoZ}e}7dESi6f5;ehq^knm3)jKg1Z4# z^bkU>O(dSEi-&ly6g!wq2P&Oqww=`UHk94;q~^ zYI@6J#Iz*KlI1GJ^lAxh(^N`_Q%W(4h?LHR&v#QPWq6z4lF~aR->*xlM7M!vE)v|* zSVRl+Fzy{AmMgL3QHNN;B~8z;7;1Y7Pp~{jzn_iidk{R*==XzBv`a;ie4WCNPZ4AK zf8-O^f$Na43kt1}2QEplWPb+_a+5&aJfz$mjcxCt>`ODum5#@t4im>MN>^Nwj@@0^ z1!}FhIgM+@*;}wyoHT&SwOi$6ayHv#OGeMV5=w>|rN~K$vVd1@_8!=j(Q`i*M&2#B zf;al-s)U=6o0ws7X+B~vE~kBL?^t$i61836AEcN>t1J*|z>9e$HkR596?}#W?I?1@oeY zStu}m!q7Nu91@z=xu#9)Y#^p~XNNapcLw7yj|(=@0sFH9_A$W7Y}_i+;6IN_%H95Z z`Qk2w$?{s4*j(Qmnezi@*j8!VJcBBY*(;+|qqZi7RHGgSZlt5L;8^piX5%U(G>(Ug zZ5;QaN`>Qaq~u63mW#*gcM)kYlg=Iw0YqT9a)$ahAG2WmWLwMh2hD6om~rYpCu{`h~YpZjC3 z7KD93lE}6dWUKx|WTBs1f`k@?Jw-OM5um7$y^hG*_G3-rC?vtPx$$^n4<`Rb{EUj> z8owJfes`ZoW}ai?cbbdeFb6-MgWp^0ZTxV5ZSiG9!dVq znxD-yey0k4pKj9ltwloP7w6!25LhYvZg=og{DdCu*h7K?$KmI1=r=F;ScZi0K!!{! zJeN!xN~D_TH!oIz85(ee0G=Y)L%-R<#eQhW=I*5q_9Y*JyRfR;xzQo=GzYA+1NI=m zeqF!0bCaOE9JLeOPx=tur%p_Xw-5< z%n1Hl{U+Pe)o&(Y8xQ^FRZ(>`_+RQb;cs&6e0Yjt#k*huS+O>itSH{VmUHIAUJB-M z4fC47+({VDhq*{-kqb|^*;TmCW><7A8V&PdnhQ480lVD+TLrM+Hy@6Z9cSbD@U4xy zTSS2y>1ZxEmeuGcU4Vqfv2L1;;}@t>HR;tz{rY_PKOLVdZqSI`pb@(}g$zDN5X1O< znv2*l2Qi<6*jsBFk0-J5ct&B5**V$NA}fNWC#}V#KN`NKU=}H)-Xu| z^Z7?w3^yR5F>UE!dUUmo>77VX4FBbV?U-s4^r-_j1SuT(`CXfR-V3~~MzDJfHIhgF zIGa2g&6Ah`ioH*MvxmNI1N_|{2H4ltX_M{c(HVHQHl zDz^^Udm5d+bEwWYI%k*o%*pd`phiW8+}6DAMLB9Y*ju$qB7U*KEDH`HXl0wvrQ$o6WgcRI48tw`Q?%-OD=yynHM0+~5pW@U$Ro6~L z%U#g=hi#g^2Y_nun=~lu_J?qh;i4=n8;4lC1Lpvd6otqOK!EaIde#wKW|xgkH@SNc zk(qRFmX(u~4Ku{TXGQpioF#d(%}*kvkJ+XoTei8+&6y@-+>7@uhwv09N0O7H2s!L}Y{Wu$L3*>=tU0dvdUNWfO7JI!LDu%LFrqnUEGwzkL6Q8vYmAKzQdDUXy`W7CHert`QSLJP@$s-lHO@?O008{3zGw{H3 zl__ZV$L5}^_db8`rP^>wPY!jHR-?%cGYU}bfAD~kxYwWiS6i@Vud)T}@XFqCb>;X@ zGuN{fHfx23mlOg`tXzkomE>Rs7W*6hCvmAX8JTC5(e5?Vnl=!1QHgqLruBAzq~THm zA#11+0SSoMda%FqSlNskHAg&7*64%b8yW)hJ;QIjJMQkdh^M9(n=cU~P=B8_EnOGe z-scqCPy_KmG-J18;-W`knWi>UUZsvze&i5hczTIR*LLC>ntT zzC26)4i(MQuaz%f8AU^p2{`T_;wY0uHysu4+XPG!_){&m@r({O+$hxpqWc2+0Fb`h26|ukm7uLs|)tH12)3} z+g*OV`Sdnb^X0nco2BN?tl220v>tCh%~N^W>O8$9&yGrBi}`dD5*pjq4jOR|8e@S* ztUaF*`T*5P&tHl})A^JqWcGaeU?(-7veRURbHv6+&#AY&l|J==%_0j`sUdc6nNz7V zr%tO&`#p0iECY`_pN5}P^Qq^CNKfJjBZnq4sw*tV=yNbp^Zp1mzkVn?Pr6NFKAmZF zR*|h!In##4u0dO_{PS6vWS=@i3DWDQQ;^1e&`6LLD44%!m>B|-K^O|sKqPe2jGt(8 zX$*LyxU_bK5~PkU*i{bL??rjt~7ZLarZ?!({4r!T#xhz2tzkLQ2=^e-sVZ z-Jbb-s>*Y8<>OH~KL>}LEr{NUxhe&glSUyu4uEWuz-OEPiS*K0F4bAG&2M4TZxi_yU=)#=8rnuCbiX}urlJmBbZjfu zHe+&>PP3lVrMmEV6_UZp^PrSoEMGCRzRj-<)Sj-v}gQ@jVJkkoI0KaIyna|ks=jhXvSUz+r#cf~(+RZR| z(p;60f(Ilxu;$%ww?@t~yET?9#r*jf0Pxz56ou3FiD!};jmDw;jyPid0-wG#`t34i z`0N?f8;8Z5%%GPgs~J=#r6=ig1!!=uqg-eQ&W%6>d0v8tKQ;B<`SE7nsz7Jd@njbT zOXlXxj3(ollt+JLc%yG%Jg$4e&36bqpJnAG;`853W{eHV^oF_^fx-R1YoMrfhRNXZ!sW=uDhZS^FL9?IAIHjpMYVN_Bjp8!a zsjq{y-QQ`7c(KaUS?4)d@vROWrajddG*_5^=vmSw&-0iOdt zTvfu8+~^JP|8nt}_7|Ib4+0A{((YK~;N#Oo8il+YvJQ)khP2h%Z2*PAbpWlqF3XxX z4)kHOErH(g8>SB?r|f-3M`d|{IU8vS>Yi;L<@CsF(Jy>T=Iw3WlqBr$N=cZ%O!Ms( zBsAZ){Mp8H1F%zgUV>C`a&?@P)J>K2gf8iyQqowvq+8vR9(PKb;gqy{Aq8PK?!Txp zLbTk#Js@0OpgGj)3*#_r!jYzo$o52Gb>_C}#d}*}Wahj{oc)PiJ zfwii+ic2wNgJhx|*_jZ%MqFvmnq#fbUemde-Re&KfK!=40b&W6V6b43EnW|C@_imh+-tl_OKg zA}M)N6EtGykg`T-;im0k0CTU{KGRxQfHcgw8)`h(LfR5r?J#3-vxyl4o;NuE__pCa zief{cgdR6HH%NEJPVwXl%pKSzqQIHQD-g|Pc^3?Z-|XxUGRz3905~i+nmB~1YNzN4 zE=_K_SCr2rZ)vhKh0MjsFH^`YB=~KC*u$tvgt}BUiA+SwEi!bMe$*35E*_O#z;#G9 z@$VRxO-G^iK68_VM4%(}uluJU&U6h#^ypyQKPB8riRh~xDWZRTUymj?BLV5-oMGK< zi)V0wEuMAnigKpL_D{($cfyY!s%)45fzL5#&~@z@<=b%ySNLPwl9*w7k6?FyB=S1K zIa}T%$cBjBP3g~<462@OJZ!FdcQ9VPE~-!PLeQXC>MzA>>$M2fbu&#e}s`EupcvKG2@C!LkUnmvr?R&~Q}Fq-yax3lRd- zzV_7PBpmT%zJVLfK|o>8G%!2-0KI+QWG=3FX-G~Nl<*s^v9#eudUoK6T&x22W9zvO z3jp5Ap7`ogfIv&|1s7UhoHh+vJZx)nx$X(NyZ2VmzF}yY{%S zNL!t4ei6B)gHYpr9-Cb(MPO)*z3_-^k;noV$*Md!0?3v9E56~l%bK05s;dTStd5a6 z%1_djWy12^+>X3%E&JPx^VBKenSBfQQ15DoMT z9zG`P>Gjj?JJg%Kr43Z|bA z0B%REaLF)k$NyXQ;vtuR5@(kIaeU!jgSSv0v;+BY4R?ld%T~M^u?-GB;AtV3efDla z9=KaT%pG-44dbW)n12vAMXkd&<>Rm=_ba2{mlI`SJ4@DJM!%f-M(`4}5MdwHdkCz| zR_CV!jdHxrtuXqPPrN{V=Qbh@dyMt@JsGnFU;hJ}@rhkLRe}ZAg^Tzn+W+l%IDecT z!YP^@-AL)&VK}8mFAuE_jCCGW`3eHHXR}ftU(S*ZhtcoT{6T1bR*9X-)`@)u$^Ha8 zmtY|cR+ZnwNLf#?4|(gR!2_V?atb3DW?JEKpcZ;KHV8y3Ro2G%%`U(nv4ZypGOhPU z0SYHB;C#nCxWtH*0YC&1zv|Y+RJn|_VS|w(2{f;~w=E8kshN1E!ZUksmsI<^oC z#E{x*6m{WybWXOZQPfgHUGE2!BV0NNx>P7sM*}CGhN5n@D&nT9!YdT84uH@_kop#|MV6qKgjDMR#^x zbdbijurI?`!ByusLRQsDa3tbt?$=T`90Nwb8hRpK!JcDfBqLIc};v^)&_T>rqJwe}y;r?vy$Rn>$lLmN|50+dL2Um+kJb?9a_yLQhb2%fr z%n9fX1>E;~z{hp5?8ft2JacC?0jX!yP8(mXJ-> zdx`h~Ax6pvpnYBB>JVIWVnspPT{e$I6%i6inp_>lz3Hpqa0yT_=XLpIru!DZ4N5-#ZEsC zFK2TN6)Bjax(Xk_NZy{CQ-B07lTh~@bJ}p&cV$f9;8@d1^YS=-1NYqvQyJBJ)TtOr z645n!fOBw;mcy2T@xE|wYoqW0@O6d}2_YCeurJdR=M3y`=od1uqmtb1GOo|&YZ-Uo z*ITS%uJ?l!tZ8rzGhZCecqGJe-ROsacSU#L$sX6m*-R$t$i0(=CtkQ-!Cs2mY96aN zQUfoa`6RvZaL@%c@m$Cml7GYFtnO=&Ekz(3nw#RX0k6>M%9!TSdWLnDEjBz&bC`5B z1xWfE1|xWCbEu`K30`BUm1B}3^@!f4@yg8x2XHmGz+jT}&Yw8OkrK!!=))o6XUQ%@-L2EG22I3*AM?cQm9Qgi>Px-SR@h-JuoxR~K#yU|jsaa?;vyBk z0$XOu!je>C@*S~BuNHfOKqKY!C!uLFhHv$P@3a8&7!|eg#!a6YIbRw#e9CH`~CnRA3kiyos7)Q^E9k#3T^ucP*J6ogVAP8GU3$o1Mg`#OG5Ui=cnAAboU37j7jwhV@_))cJp9XH*<-(Y`B+s%#b0as}#(iG|V)CxtuWEhhKmMx*~O?cjego@R2Xt`|uB5Q2X$9E?Bw) zHqZfk0bn#OoS7M1PGv!y*cbj))%*i$qz0gs)V%8NsM#p~7l5*@w+IYX!#q5x@K_J4 zJWF(*O@~R*Oy=RaS_lb^?fW;`*uIU*mDb>7q;#Q-kh9weRbZPe_H*weK^;z}35DHZ zH$F5XToNR_jC)jUv?D!#P&$EPyr!M%m9SI2rYfPWTk{o8&6hYe&z2yQ zluKJxM4Cnfk;-iAvgCbOFwACsOh~|4Zc3}EQz#0xlR+o(u}MrAoxU(~YY|uiy%PVs zv3DZGL++PQb4+TrKhx-QAleCo$VK!fte~HZbYD0G}Kk*Ej^8m&rkMWfBa9OxK zQxR;4Pd8>&W+YXnCn0`kVlhv}u!zCd0(*7PU6!B5J!4;do5|fQ-gUz!WK;gB{JMo( z%S2CA5mDtv_I>_=LTFY+dO>}Bdh1UD_kku1KpgAk%ye8!dBjdXbJKfOWnEhvjtlO2mmdT@0w z%_Wk-jd6W>Vu0J;HTlCy!VP#|z%wwCfTewTemY6O?!0>9#lh9-(LMs(ldudPG1G<> za@*SEKJaF6HMSMf9+~0E<1($HIS?E+Nb0Lp%U~rhOFS4U*ZA+rv`T04vjmEuMgs@7 z_%pk|g4FS3#zPg;adL43#@)op#W=y7&kPVJ`Ho)=5BF;$Mf4)dT|Gr=)S?3J9;h!* z$}(T&VHT`)3IbipgQV>6KPF-JLL}~k_=%o@=W6xr18UKe@LZyvlh_43MkhvC`N8U;*Vim!a<1WbNizsTY0ntGYs&9dBiitp7nc8yU~ zsG+i1V7HAL5)y`>$=pQ(vK)aXU`L4u$9);W$z;_7t=x&2J9&QOc0Vn>C(jpaI(i@L z4V8q`K+iZHSEY;X0qwGVwU^tC1203U?X46S5NN*NxqGFe?P$E!5>ivhlij)w*u>+C z_WAIJC?+kK-LZ<271dezZm+0LM%rsVoZQ-L9#I?H1iT@)U+|;toJP4(8i4#}9243B zV|ld|-HA_L?qtEpHR?IhD;&r4yn$agU=M8+(Pmg+vCP7zmyvO0rA4`v1^IC$8B#pg z58;dK&R5$TK4@+?l47pPuG6cnMARc};~u6PmK(AL<7yn}gS`%m8}C*#%t=_0|9}5?|n8?y*YuK(2{0hclKInH7L?oSjj19U!H95<-ewU_FE+rfotD5-zg; z8iWqA5A%hBEK53=QAk4thvR={wXt!-XHjNjyFpODVBByRf9o|r1F5hR82#26MWZxG zHujf@i-OkJBujpu0)qT|ON^pR@f6bmesVfMWa534^Bk-ipNf~F zqlov-E^&7Ow)9exZK=iv;3Qv6$P}N|IAqGd!5{XISRSKG+BPpzl{5U^BN76mbMUVv=_WXIN8Q@vqY|EG_ReMz$~>eCG76_7-Id5WM6WL@cH zutZh7*PBk8_Y`rP_uO>;P7!Aytd#YUh3IwBE^K1;LWNx4TSTV~M{Y4;m7sGFs}3=< zQv()iJ(APPvIZUI9Y51naRnS>%HXc;op`Za-($Qwh^6_#$P%poaTv*Sd>qI(u~!Rz zH_+UK32~8cT2&d!MXs{6)sahHg?$B_d|-Tq$mfs!i(i71=fehw;|w5>aQ7Qq`9|j(k2uE_kanx z8P=o;P&@%&M1%V|5`hIdxUeK`8~i8N#S)kfSIc$&m*ZFZMz72aU)B=PsTIr?Ss-}= zwb4Sv5n1F5Khzz=MwyjU6KOm4NJC|CA+Z7v2F9??w!fD9nqW#oycfQ~zt7Ca-$9@F zuNYK0_4Gj%Q+p$Q-k=~C=Tirmds1rxgXO3*Z>1Sz2D5Td#guJkklDe*<$el`hHF9zY4o1cIfU(_E%@K%@Lz(%|I>|9gUXu``;Rt3uKf^vHxoeakH6N$Je z`an!+U&oa8SuC5UY&;$d$G}ze*I4M4?pMOeAYru1_p;OJ(A7%a_Guv`oCH+V8i zo15hYUzB;Mt&3a!O9S>EhYDyI>c2izW)wGv_FgQi%r)4$KmW=(af4bs{lKZ=`El5A zPCMFw!=wE6`0_Ho3~upse!?Oafotq%jx52WQ;kq2CiCFYwtmcoh?hHO-7d zUi5%@4Of$XFOEpUg2?0-F>}TIF4btl;l%qnJkfnbwqCk9G3|4E!Y+ zJlC0}mJ_hS#>eP{W5ts4L&bS7nZ_!k~^Um&Kb~W!zmCxlA$!HrMSX zb_(f1l~Zy&W)Uglz&JGvJq|BQg%a~8b05f=(iRZv#RoDf-ZMEpbsv}$xfK>>Ae*_p zrcjR`vL~93L3RPMNjJbK>wn#4&(!%**bE+!akINBfnaV4!sp5&nFlgQf9#9j3htGG zdx~+hZXg3PEbu=RL`Jj>u_K4mHY$*wFZ7Cw-o{+;cT_C3yz9V`d1icuHF+t8Lubpf z#+Si9Mj9q!j>J4~{-AMHbvyO;aO(9No(9DcjiopKy9~1-BXyS%`kbvc`eUQCMd#!6 z1tUb8!%*3zn>>PP275w>CtqSuc;bQ6!^P4Q4oOci@MR9Z3~up6erwq0*qxym?L$&;9c;3fmNj~Ia*;NT~GaVh=0FSMMJI}Ip za8ErVsz9UgEQIU8K-m3h83@0PsDZE7N~6ijq$=SRya$UgP7T&D|H6CpS%or!eaCt!T+@SD+8KaBOP&sZ^o zGnb5l)u;rEAz!#fdWN-h24@vx;nEo#nlp?QZv^S8j|>Zf^f5#t*o-;D?bF9rg)F|K zQIh$F#SCN3rIvE-Uuv-+45t`CAuMYs$}65~fvg$v-%k5^r&JnPG^LX-98y`U0AFVb zoYfL=gVq?2wZdao_}yw2?dr?N1`qzxcwAlvmyE*HhFNkF{$?2~{yqYa8S!6?HKh!o zTfTS~>*7$nG4Xd`qv`l-t#V};Fz$J;^d?D8^F>&BXo zN@Hju$AZgKaOHeRwUFtp&I*t2j%A>|-?%b-(Ir*h8dQ#5^ezOS#(_lk8<7Dc5d9DP z6f3*hSkWdUey?xzYBOY!N1ldC@1UOom0TymfD!lSMt1RbQH<-@GAtU)RS4A!aEpVt z1|J{0g-vBfGQ-(e6=csx_|f-R66V)xEDJJMuy%mNMLjcpoeokxajf~gyo4wU5bj!7 zWU71^76c5YeXG&=u~ztkxx-6!Y0t_g?vP|vwxq`0uN{Bn8sA z15&jL;y){LF$CK3uJRZw+T+Nw4#E%LylOM_i0S~a5?Rp-i?GQF9_!*L7B1duUw9IC z%!>dwKl16#(jTfZ_|D0)yd}npwLrxPO@)w~*>8-cQs7>sRYsq5itEB}6tHykP0v!w zYfQJe#uZXuc?0@K*U#ple{?yyeq$2)Yu8P9YTM#u^bb-uG<;Eir;lW1u#Z$`4%%*n z4uQ%mt*rOr8g&kjF?5yc7#`zlkl$e$N<+`U3KsK2R(wO_{=jj{=?|~rLHffOh<2vA zrAe3AAN;Dh|11}IjE81L!IxJQtSKnI$>|?!RsYB`*BaALM>!{iH!I4&ZRup+#K-o| z<3>Jqavo#4$RfFF$rCE?s9g7$c^%}^jtnb^;lO7*s6rpMb6UZ=q2{jrhb~eY#MQU%-NN2>3j3#Bm?#vSFqC!ic)z?gkO8)l z(uc7;!^F->ZC7)j+TrpA|H0)zZQy-XqI%)GDw%_rstghggDkX6RlzxYg?~tvNP@)T zYKnc42Dpetq+!q*?Ap(N43R3FQ8do2B}cUuza;E#~M`alwn+#|D013X=oeAe_m$a>^3Qepc#X zsxEQM)R@1*Ss;Ab8A|qt%hS>`l56V9xX%_Rj9=fYgu@}H-& zNJKe1JQlGCb^*wiW+Y1l1X)3?5qcd@F2%b@@%^aTQ_obq7-%Q@+ldrAkz^;j+lfRw(OM;1^pM~1!#(`yb&=Xh@U*0X63|Ju@k+MwN*<*$ zWhC2pCEIu<+ju3X+b}j>$u?feHeSg|HjIr|vW-`=jaM>3JXKc>V|%Vh!k@?~knK$K zs@%+~t48q!cwCGhCIL7OKk4`+)%wB-@$jSubUKnPRnmu+n+YiXvt=PhTgv^r(g*7i zo^HlVi$&)ATb0Z`x`i^AISn#LGm;@lXnD)Oz?QeWF*3?FGg1SDt3*T1DwY0NkBdrG zYuoprYn;bQtp{@HcGflc(6Bha;j^yvQR&svXFW8qp~f8wqja75gTibpFyh#@Z!3>B)Vi;5Mll&Khnyk9i0aJjVBvj z4eopoUsV%4*cM-dm78#-vhiej>vE&CoFzzp_xsWFa8HK*h$WaV-}xTC?#1AtmXbeM zxgvNJ$+Fhf&}Xoy5LqbY1$Q2VEAP?%aOI6vc01(-KZ@t~v=e>z+5N_9H+5jK4^M-=V=D6!41)PLb$?gy#6j{x-)snkkW3 z#?eNH0VpgBTzZ@5cDB=xQ=D9>POhF#t{IJTVS|Nrl2sf+Jyivd;x8*Siwp4MIZzpg zq0s+YWx+gtkn-InRU`SP6wNIX+Gl|X(*DLLr2S982A2xEcp8O|D%zh@;A1rSWC6dF z;H15uOU3B(ZQ5@G?uzzu3@&b&xFkh&f~ti2$qx1BI{D6W@|lhD86lp&E4qOcI6%7j zPnYLX+vNNM2YVQ$KlGYaa7@K@%Vq#qEjdz9Unrb-1SF9YFaL*}7zxZ`T+td7%vcRG zMPLRKh9+?5yJXzi&nABakXPhaJfKYATDxFF9Iycn*mD3=u4vqUZUJ3TLNk_!tW|DA z9~bd4l-XN8COpn=OayuaX{S6acrkA#BZ3qQ5zeEhucF43$#=y80(e_WzjB^a8y z1d|b(OSCt13b*Z**R`#Ot}njWnunKJ=8|Ik&^ohoa3)eXl&0jNlpO5irX%GUT*#IP zJXr7jI5F@5@R)^1Q%c9HB>zKrH3zReR+z>iQARKNJY+|s?g(a*@u?q^@jD*^Qw{S@ zz*QxDf(InHwrY2t&DiGPlVa?jCSuaM6acWW`xCZg&}2j|Y=w(MoT>wbHa6vE@Ofab zNcTKa$WBrme1!yAg(Y|Zg|N%&Q-*VJMWK06jn6%C0F~Eh=i``VGawe@YQ8 z!`Cznsy42x_Ly*PThbaYv2u?L=*%Tk0iO6TbM(bN^W9PMZCAu>Nlf_-%W4ZEiLE9q z@gmaz=`pLUAOSsQ%Yr4WBF=x4C1iO_VXr0R;DL=}ue$5hi}mPr3g%o5 zbEUw<5r$po#|NDjPCeId;hq7zg=hFx*ZI%|YvzFcjE_nXMj?fb7OhA1m2*5nYo=;` z8#PkCR&OA7MJNfn!Dm2ww)LvA9#yyFDD%Ae>~K~d!OgA{f$rnkBq;@J>Q{K%1)FP?@*{^;__ueEn*iv%hSSxYfhLu ze0{vfd{mOW`GkEB=WW!Y_)|QCmnKWsJHy;pUxB-m&c@gJiX?S$M}0-QzqK4Ua1gWnFN3;a&{tq9ZKGD0z+!x##pSG>d9@v_Gu5YW$#3e$AW)Uv# zsP2MRcRV5^1kv+I5$g_>`A2#NR{3xB zRE2~VK!`rXV}^v3C}NlGc)$^gE~z$`+k>~Nwe#~GF1xHPw6NK)8;n2RP=h})R2FD& zSAiOiy=NRohBNUVmXBmQc~-a%nem#>c>RX@nJ-_{jnEQ&h5O+Avq;i)iAa_(Y0aJ| zZ*Fd#X`W;^P~BqycBdn~9+Lf#_UC2*F=##zHCSR-!>TqMhdf4V;V9O_YYCPmA!RRB zKFE@&H{YyRvi!?Ol;y<}A(r%)R#y|$D422$vqfN@CJcMpBS;9d5&!5Mo2d)$vzdB2 zQWF2j1)Jl5&2+%(C$OjCY66**D!?4rM8mT_uYkdVf`T*TynYa8E0|C3MuK_aaG#X1R;8jlm3zG-n2>qnRWDW*@sd7`1c=C2yP5ZJD zTcD(#_C;I^G;a7&LdpRoiYYEYG1~an5U+?0w8q*R4@=e(oXpXfDzh~#sfuR;5J!`U z=5Q^8)qIU$H9>HVqs4O{lEb+HaL+K$0TsCa8xNX;lh3v}7yv_*SZ@0ZW}{!Q3$d#) zx~&Bfw4o(UiTH(ip5y$T(;76O z*qrybOIsa11v$*}=qa&u=>LE@ja!Q{X5(yGG^K3@L}er?bw| zy=l0xIkXzq=~eKhVMM{W)UAW|gfmto7#S6&3_kjF+-EH#p6L3BDK(I}Q(wi28lD0( z=_=+e0hawC$VTYdmKai@VSWO?jAw`@ogtFbPuyGa_&8+)M)JT?P=hh-Gv!7J#Fvofh7X-(4B45M@(j&S`rbjh1}{GF^uw(hSe-^&&2SR{fgM81sB z9?%Elcfo>XKsbUW>YdGN>lHi)S18H6RurKh0Uh?2$cIaN(R(k^TcVj^qzDVN4Ujhe z;@GV1Z)|M7lR6S#yoprPb8>5-<6jN%;l*6O!DF+Bh7+O2_2r>H%X$Nu2U{#P&|XLG&UMHg=o|tT#T5LLKSV9^qrV^OJ-_ZLd~so7s$xYhbYLU#`%?jeu05E5B~qYey|=nWAPbv^JExzE zD7gV3azL|sZRD?8Pl%94V_=+h{bh^Tl7ZgAL-7-nqshTA7YT_1zygC)T_FFq!qtIh z&_GO0N5+gL%xHvo$SLo)0UInM{(zp}X0tMR!qmA4wm%d*uk{bgUB;l=3{&pcH1%zp z*VTHl>nkq8M>DT1TTGB{hga5nU4RH8@0eR7d+HCE}rnJp3+D*$IkQ)`p$np zER;O)m6@X}p>A!ZOp&CR$Xh7kc=87JS4J-Z?MBgM5Zk&z_)}HLnt=|6)Q0Fqs1fxZ zuTt-zZvw4ZS$q`(WMR^m!OY4lLle&QS)N4dxcXbOYf+xMa&FK*BkPll)GvM3ASfl_ zK60EP0Bnp8;3$oa&nAGa>mnocGw_jC(UxA|{4Tu0d_e9xhGMuUSRO?k2z#sZW9_YA z?-;-fnL13^c1BZU>!^DMIblh)HP(^}H#^FD5mu3{v|*N5WsQZ%PwuG!XE3>mVODUe4_zk9-<~q&_n_H2LF@mVV7ngffm@Zu6S zlJ;p#N79H&DHwJpplPxAfjM}$b?^5gc?Gfsi3>oNT;SE-ECU+cFC!EfC8G%IPr?5X?h8Vs9JTyWJ z(fP&W=qDr)4jz}$PUdP9HxM{C(b5@-@4WUkw5#om^)m-#9 z4W8W|%Q!GTclLZD(QkuMG?kxJ1P$CJkm0L?bnM}D~ib|}NqbeMs& z%|qaxke8x}O%XV;6yos|ZB2|9Ko=~(h)~R{-}1_?2K%zj zAAy&VDm7CXrApB*MV$bFH*rF!I2mz9$*}HkouPvysHwo8KI{sD5-_D?483mayNlBn7533 z8&Pql7Vg0(iT|yTG(tVk#HZ4hv;ZuV#e>hB&1(#*#MzD(8)6Qbhmz%U9jyqRv8rpP zh1nX8&Fvw+6k=;)ZnT|}=Co~?JRvn50}LnAaZG#u9Z&bMj@~Ydxn=~zm!sUc$oR`( zS;E^Sv9y6oMFAnWP8*- zeL6KqlLm{KF0FKjd>5dV?lTiF6GPnS^&0mSU&4qO+zlDh>#jhRj-BT<=?k@?=iT8& zV&U5$7QUq@wG^ceZt=|h|AKMNTS&W0YRA4;THRbzM?N}+qHWU`YD>{>uBGVrz&w4S zG8IkR2$_QU?p!jebYi@@UmJ@~N>8dvH%hC5JH=dd4@^YUjc2L=-8?^A>_r1L6Me|i z%*m4F!Zz2iE%JMcsc4`E;jc<3Hg{mpv0FSt$L(dRZyjf> zL06ZWIo&)q_%v{L2ZW9?1m#W7>eI33Es$=@IBwim&%{%#l*mdQQTNz6ou2KH6lYf% z4-`uF$dIG;5o}!~tnLB0aTQhzDlCY+ zFlQIzugBcv*q0%~nEza#sr{j4i3?Y-GAv6gVC;o%KsMDq1;;gY9_k(ZH1&>w%nTDD zChsq_brTd1~Wpu1}2$(V;guL($xqlTZN2hrZ zkJfwCc(`3h&S&lZg8)|M8WR!lIxgdB9xePb%$!HfWfSm(PTU=0kdDRHK%X_2v|@(w z@YLbMhGB@6yANUVGt6ic%elUjxX z=z=02?ek<$LzQpPW+OZof{!ZhkxMLC8qSMlYnUb83n>HrTjO^v6! z$N6sl13k?2baynlku&OS4MSJMTjW4+BvbGRn+mGdcS>61L~v2|?>sAmIT4V-dqgWZ z%uteD>1S|`1cYvEi{5w8BjVYEOx~=8+Nrz;$`2?^u66XtYuqSA?ze&08|t^7+x+T* z2d~lD{@i9+uwO-T%2+FMfE9^azp#1_z}xs6%I6AV%1*(~lTWGtr1Ru2Qt-wDIwe1l zBZ2kTcFyms1lIC2^&v{ggZ!$b*1D5V*$Bx1inq@4|CElZnt2~!S~`hG3W>ZU*lgz}WpjM7x) zEZN#ZH;kf)SR-vVLqxTA(EIh?z%G~mMBz9T5A+0%$%@w}y4=u75qt*rJ)JMtlGYKy z3Ac;lN6M~T8!voeAJo%pJRf%oqi3aOIj++Y^2FB=@Fl$)BZ<7(6dhvXg4eJZa%(ib zF^{Iln!HMzMvQG_=&uhG$CGLB&WPfv5 z2a3G`iv2W2MX?{Fb|`iWkDO2C@VO;PT$6oK=a3~(1e}yzcEB-a@)uCr8Vd(ZvFz<#H{$IWsWNMx_W<9`DnhhqsrZR5%ODk z_)D0p>`T-htcib~Adk-{$REP4|AcCwm!WT$*SM88fwNuC!^_z44?7uLM~EO_OsN9` zD(f}=H>Cnf3qf|-9n&s`eU$U<0`y*^R9t~8n3(n&G3`;aJ7ohDbw-!^x=)nX1LJ(6 zOd!R8C{KjMEbk_Yyb1;KUKH7tv=vDqLV(zGHI5M}{(+mF*2AI-eN)hSVDw>OhWgSv zeg9wR73lREe=fp(*6mU$Brf;KyOSnD z+J0?7+w=ML*h25ti$0UKcNcBHmUWdqWiR3$`IaN@d-LOyA?^WpkzE8B_u|KQj(5}@ zeq7W&%VP)rJCDBSIPZMgp3iwdE8@;x4d3mkJK8|*tJ)`ZmqgQ^x}$x-@7vlB==)P( z62zkeeHUxgp5Oj-`u_H~{n7WGeEBr`zKQSu0)1Z?(D%dX;lAj*pP?kXgQcPj`=akI zlQ-*0QO*whwwCn2Pv3t*>HpjGT`FBi-~SGIjur;=eelz%sf;A#x4*;Jy-B;zZx45r zJ&)f$^Q!$(_F;T!N7=v3i~aK3;BQvi+<%?C@5OK5Of^v7Li4PJ`eM82`%(LT%{e~X zNc&ix&1_-H_yc3{SR(rZ3WS&`fpOFrx5#EHsD{m6>n2tVc6lf*anhr~bROFJa~E-!LO z9PlT}Kz}GZi2#MY#%3@vAnfKQspG=^sH+=$$_E;*xiCfuJ z%Ram-(iB4b$2ZJRI+W$c1ezvV5UDJ%z4iE9igNWy2JWT6Ja5%Kv0<4q&gy zWrms>>tr|K<=VM~rqRfl@Q-@3ewk!pSWcZ!$5WSdrHP6Jn zw4%m*ded&EIIpMN825$m2PQksv5^y-zGqw6GeUKyI~v!^r8%0 z2if}^_#Ggu3#kxx+J-%~$uZm$HQotfU%%=iE7(wFhaND~F0KM?xp89EfLe-a3JXr| zl-yDGYE#{Zb-p&7<<$5toz5TPdm39}4g}L{n9R5A65A$u0L!L|^j*+Y2>N@;CmZ>5yKNpUV@ zatJXpXLRKfsqDf0$$it#rTCdMo_UXN8~L-3Z1G9kVcWUt^Q8^#sxLvFXY z@ay~AEh_lZZnqf5iyVO*pNp>)>=z%=kZ{X1!blG-!FJL5MZMn68^x1B`M9^D@f=7? z9!?58HJe<8=ouX+$g#uTdnT(F&XXzmJr$kSNBFI20J>F}-PBa3D3&NDIQBPZ9&rL*|nLCh%!ncU+u`iuAC zma1j50)y|~3pCsD^vpVIA-&LFQcvQPzw8|B?emBv1? znoOT<$8fi95C0GC7{G_UZ3q%y#As_&o?$~g{o`wZOFVtwRrYg7+bxLXKoYGVzbx_i1720o1EM!RWZH_i;=D3K3DYG;lvN~~6{a>{rIUD{h z_!LiFjKPQwzwF_%s_Z-x^~+@BQsCYC4>E!PbLy8`ncD90`s*eY$W^$iN*7?-DRZKN zW30Z%$YrD=xiRyn1vc>pRcIz?*;i5y|6a?_svzjL&?$E;$2a^86P z7joYC#rYZ~UR$$C_@i98GZ^K==LDlXkrbGNB^DNgx9gC?Yn<5u%-@fv;+mFP7|mf- zt>Xtj%~2&skUnTwe)S8j=e~7&wOO~f2gTlS$i!~mmt9PD5xpIZ35){J6mpc6XGZVZ zVI^})Q`N39j-3|b<<(TOArJiR+Wg?^!sw{XhC0`#!@{#Hcxroyb8t6Eq`sja{qUoo zHcAodr4Qo`>-RV@gV0`4NVYW1D#XsKzj=7noGWxWhHtUBz6V*JP-qNLogg=iT?Fi;^=h?wLevQ=L<%1al zai?pF+JTOjMr=!nsT-nfXuK3)Y+>}PnP2>9Uo*uW>-k^|Pbd=z+O?foSIL)CDJ|5L zIS+t85xCC!n>vU)1ES7zq{ZS)$_j1e0T`PMfc2DTHJ*RCl# zNfkPyxJ70Z2g~8E|I*Fv+Q6oC_2WwKh8Fn)XNQ**47RWzIuO9JXgvc7aLYG_t=ghJ zxi6lV6wpS`)*%~5B2JHHXQ?LbKn0Va&(47IYic!yb(rohaK1E(%zi!1^TioYswr>! zc=sw2Lm~g9GOH2`<1V^snK5{EEXMR9yy|E^IdKlhl8J?xZ*rSBT^+ZOKMHhjmSjHu z8u&f}WaC?gMW_`+IJJ%;oUAFWN#CL}&u&sNsu{f9FV+XO5jl=-&PHa&WkZ?$Bej95 zH};l;824~wzB$if>kV^7V@^NUr!ik3;p65N+XLLJIy1n{M}|OS(nEi-yqJZZInJ-+ zD^|yQ=ctaeTDrVR!ms1lu#R3~9XC)%YcFy8P0>e{&&(%e#Np3zfa*-Owg_gdP8i>A zx&!YU&F4(p)SbtZCh`IdzRp1gmns6+k!af}ot49}P_dgX?5-;3C~*1Th0{J>zMwXQ zi*{GtTAmzoj0%t=@VA1)0XhCah7QOf(|XGca`?#SXd4Bl$U+*!T98A$(3J1CLyXL2 zcvur6ehyP#d)dCHUB&!qH_kGQNZvbaEqt{X0yu`%w+M?ZR4;unEfAPk;69{4$L=rV zC&_IW3%%lJSvK4YXZ^pJ?)`R(Qp1tlrp@|BK>e=H`OG zk&}Bw#=fX*uQ3bjWLs%%l_%fjPGOh~vp&wOI7{Qt=ZI*kM~w_NN3fIWA!bZvCABmT z3tn}wFYVsb@numhlSvL<5nD18(DG47u@+{;c`HY@+*V^Q$b0Y7v5j(;|#$k{NQ9!j^RzWsuaiCJle+8uOpSM6zsQd(vV#PmC&lhS@bV(x*@ z?nK34LNOAtUrFMMAeQGf|B_hcq`m!$XVmYu2z-cP(H^G~*T85n3hX;)_N^smf5s_v|U+Hq8b z{`S1O8_z1_8sQ%mCU&-tEKgPt32*2hA1?NZj3u{cPJWo3Cq2B4lM>9iFWEr23Sxp@ zvLSxunpK?-l?!^iPzK=`_l~#CW)eeJS+Oyee5@?F&LX1c$A%elzJ)fZWdPz$X8l+L zDI3B-Ay#+KdDgMbG^UQdH%A>?OeMzZ-j%EEg>2C12I_E)o=!^E=mbG~ zy*93T&yUytRZ$QMYKQ28oR*lR{sIDb1OKJO)o$WS0^)VX)0K`zrzW{3kyA)gB(pV09 zsuL}ZBf`|kFjW<%s{K^pBmXnc*vV!fBFMZjTafwL>6)?;W%ZBRC=&@l_;Z(Wo}Y2C zWt^ytx&r+hB>Z{%StbDCt)~Pa+&P$e;|laMbJ@NZX8Tr{?Fq64jn<~hQZv+icm?{! z^x`7di=KWj`dcsF{E9!3n@RY+h=kR54XgjIs`o1u&p1fY`BL*VdFGklPtWOPlOW%^ zB*+~*Wu{O21ZbxR0eThM(@T@GDtb%jqQSfH_U)Y`3emb7PbE@JdJ5~iGLau?$HAXAPdu4i67Ey8G4NhUdVK zU727`{&Yq+aeND!c*cT~1$VEMJg^l{@VRRCF#DWt;$5`v>>|d!BtzEPV=54{zZ;=q1Ib${pex$`FbUH*IBha?k?8Urp_YV4F=k6m&t!6GTVAle7EbxM)5op zmKN%nLiS&^F3u(!@v7cZ{DZmHt*W=Yl6%+l%`1M34(or0Hw&#@-QTX;l&YHeFZ+Kn zBkp25A3{~SWxa6#ui>7SlVdSeAy{dA^=A~~OuwBJR^oO1BrY%@BC&1ZDVnNe`J5H! zj?2^n!`0-=oT&?9Ggf-Sjs^3`MislMlR~N~n`BCSA8ozW`A1Htse0u2YKNsWIn)#p9p0{^%3y+`qscKb~A2fB(&R^IM(LoqMJ`*Cp4Mtf*T%Xy$S8wpH=^ z4-UrH^V-d;4kSQr-PAc>)E$5D20t!OSI#N-N;lk6ecGG`l>7Gxrp(fYIq|lZy6Z*2 z$_f+jB|qHome(+wkJ01@=igG=qitsCX>-n>S>2;e?9}zdktl0hZ4TS@A0AM9QCWKO z0r3s*q%SPw*n?pDuN9V+?1{ImV4mT*F5v&jquOSUqL!mbAE?JqX7=Xk6TIa3zv_Up zA)6D=#^2u@-PKfBdlUrrXkC-|{)Y0x$D_COIwU%?*U{0LoeyCw1+_f}ZyrCV?#8}9 zrng@&O#DMyyyOBc^>{iVd=R?Ybjd9uxkQMVd=c!7r;Q*$xrCJDxL22J6Jz8Fyo0Na zSuab^SPFR|i&jgxGL>*ku2`2f>i=$}1Gn^+`0H(zSM00;b-PzJD*Ku}UWo;GA^Y=Q z@khL+WMqK|fQ4JJ_#cC;w_2^$Sr+dWTZ2YpQU@j*C-4=Tr%u&xIiP+uS3%kX!D3K3 zYh!{uEGCoJpu^kLVJwwK#XMr$(h!n`>ig}byy5U+;PaEef@IOpHTe_=2va_%?{~-f zj#Q++a1-t19`x8L_6BbBX7tA_TDj8YXD83L0GnD<%(c)8{BV2NuVM)$|OisqNZw zAk?g&wQuS$P6WNiuk&Ofeu`^iGPP* z1ZBt7rj}_h=yYM%)FqMB<$Z>%_bypZRJiiy{hBm#pp~ zAN=^DNbUbLJf0Y8BNB=R1J>QA;ea*gk+k9Gz_pW+?b-aQ{0ZD}?X_T5_P5qGe^{dQ z!PZhWtm_W1W>_CKnRsLe!ut-dN4#t6=lu+7#z5g!#n~ci;^vfvI$$gs#2)g_@_~6G z4J_54y}GJd54-AS-F0;Z_Riu;a&yy-WfTGgFVzEEu*YH0#pdp(oC}5TC@1T#umeNx z6S$6RN@rZx1FF#26i=Gs7Sc3_e6<&sr5>Eb7f6qh5$83??T%KBuDG`BP)U0cHWTS` z0@dTQyihd5(I6Vn!eTW>c;yc|B}dv`%v!&)^qq?iH3qH-ma6qQo_D+F0eU`+=k@Nn znCE2Uja0%Yj9Ri1GvlK$K<`Fe5CNa$$%)tk1>9!|Zq@!D5-p9_QC2{q6C#oIOY8K+ zSxD|3RmZR6ya5_0{oE4D`MLQrjNAW~>-8_&y&f@%Z+E*T#C6>_^N}H=rL(2$O`p^* zcbuyQ^O4M(t|_Ge;e=Lr({)3Vg%j{&2^b(V_qQPhIFQp;quVO-VQeZ}oudX(1hlr% zI7#~?_xC{aWY7!Mboe+&jBMm-qdqH)z^?%o5dm=GR9&o|xo0ymYtO>EaG|kuB1utRs`#x}S7RIKfS$M&w{r>!_q6na!l2e=M3hw`gj+ z`O5@;vTZ%(7yFIad8HcCi)d=@AjV&jp0NmRdUjyY4p4FQc!xE5^EI2!65u8Kf9X88-y(b{rim0W}V%U)m5mFqaaa6!M+sC?3S zLD$xcKxO4HuGptq)x-MvL@c0R^v-e#;h|g5HrCm&eo(MsP%z;RRE{y7>c+GMzCM3U zsU;$MJ}kfo8&z&NUqg1*aF&SK;&VTZs@S}c{k{F48)LstHq1{OV-@5%G6Kq6Ri!aj zL8!+*1C1WhwKZ>yRT?8QigGc=DvePR(1@-~m?Tgk&B}=Wnx6+DO-vL5`pd+I71mzK z3?#;sUCGMvg`QWK3h|eaOBA5|V$?nz^$wq_Ahj4vs~0op{+^su_wpTUe2v9S0HN z|1wlreMTs-JE=$pcBL|LmaZAW?Es zGt}W|GA7-E`jzYyy=8{rAf4YS4MJh9CECzl!obx&dcc$&R@7hDuOKz7sJ0&q^W^Mi z2=hMkw;ry2YMNvw2Bg}NN9&gf>g-E*@fw}Kg`H$r)qT(}!Cg;H-UF7d-C6g+7ZV5H()F+O zu8qJzzT}v`e*NHG!|K`&zIFha^OY%*pS=ejPoMfgy7v3)y$8CIl`P~vWb&KdpWch6 zF2Dq0cpvohm%KY zuC1rE%l}__`QiQ8!ziPjY&aAHT4-gWsTlk2vh8lxbTHT0lv*G)o7W&!V*Nv=XY(3m zmE1B-56lg6>O<18`D@+i#}aijb3t?1NoF=V&2(=m)3&7wlG9XJO(v&FtClkDU2>Yl z1^}+*r%Vzbc(irKqhuJB0W%Uk$Fu0K;zeO$>v^u9jhho)Tff3u-dsBfj2%$FCoh}f zrm(3n-eUFAX@3|>p?9vi#p#{Tiec+}o8H~LQmX2_vnzmJz}Q+2kkl}^$(M`@xKy}# zOXvEgp2-6Q)w`Xj_NF)O*BCb2<=1zR(5G~S9>7x#5?H6z+h>9?-9RF&tl=8>WD=X# zFoq{n;ABUV%A}6Of-5}Bu=SvL?$WPcMr`IYAo?|%_*03X-lJkmSrSpNN9^^ocERqq z_qTI{-(1fWp&kG0b<&Ps*Ka`nfyM_e&yV~(b1lzE<AyAAbjtLaw zn~!z}8YkqkjS90353}7*Hvd4Q%?>pF>>549Z}dcK^p)e)D7HJ#knkJr8rD`2);6Bn zbf7Utx4Mj0y(7Z|jfD91z+Xnf2meh^ z2H>B<_}$UkODs}>|HNFj%foD!gxQvmO&c)=3!7`tQ)*}kurK?kZ>7n^{*K??5PItP z?H8|$=T^S$dmX>QJ{f$BIt&9c&|iBy02Su4eI?8`FwAxv*$hAZWo-*` zTkYr&N|*R+T4S(Pol(kGwXJVk)waGntm>B>Qhnn!6U1XnTe}FD+W_CN4!33a_eU7~ zMo{~>ZQy8)5VcZxTd_qb+hKi=`n7;i_4~@WNEvmAJD-FP%MEJ+AU)nI0MeI8=@2)O z%l3yb+poiHT}cIv)~13hOzM}~8F@m7xW~C(RQSCZXT3PldI9n5ovZ%hu=?}E>VJPY z)u-xpGOX}L;)K7`8Di--;5F3n#2NfX0>$3OdHkGsn#(r1K2#vvrm6yF}X8u+0(

      wzBV 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 z zssxK2Jn-B#Vq3GapWcz z3(neF{6x;$sl*@l$6frD6qRoyNkhjcGS&#OqtKLxB;Ju?dLK%QX>VHj3xE=5H;+0wz>Lt( z-%6Z!vm_?-?q~aL5CVu3bPB%K`bFRh_uoneVXn^M#dlSTI3UhfVaP8Jjsqz1{5Y+8 zivW+LpkxA1FMcF49k&~E|Dbjb$i zFpxXe=6m3qeDSybk|V>5+v4wN97@LvK=n)SO-%}&4ArV}66~G^PdyL@`N6mPp*{O_ z?L2?_KCLlSWPFS12Yq@^Ig`+pz|n?)p(kg9v!<8)F*=mVn5w%0wgBdMP`6Sqaw_n> zcuUD2!$Uuj8QapxHq{6$ArmW{jK}ETb_+IydcAP98U*d%I~di*@2`&e-}mMgd)X~y zVj%4{FJN$KEbzTIlX$Buw>~RrAPVffKlZFza4p~SlB(p^N)YW_=cV-+F17Q($AGgnxiYt7Q!5fEu~8Qpx5(Z5%ky%V5dg@ zc0!k~+;h6bFaUgyY8<_I(%B97CFD|tnTCp%6XfPoofMIK`YF-%6SP8~`KWz{PDzE^ zwQs#DUBZe7V(Tv}e-c#PEfCPQKtO{x@4?JS02wP^SAD14^t=2ahb?nFI@c%XI{Y9UQs<$d&FZ=EU-8(y;5R5K>31OwCSxuKQvS)BtqKk*}Dn_)K@VSM5}G${fCn6F?zeRO61gOl_?a z;xb;SN|cii3RYZt*(EX1OH5AQ@_%aDik#f%X_-miIrxvu$=jTin4G*OmSFkbb+ZG+ z`6?{qyQ+C2}`sJ%D{k z-B)nnrTBOipLXniesqOCbVUM|x0ke z6!6d1e_*a^1shP8)v9*}`Mynn;il^@gA<#hH^b?Q6@4M7>A0C zT8N@8kcn46logU5%>nsR?~RBAt(#{-egVVf4%eB;M=_{}%GQt4-1hLLhy{$zkpccG z^}7rxzOPGuaf>clp#ZK(MMcOSWJTtbXBq{RZ~ zsrs2Uv|Sz2F})sdf*8`6RT>8|!krRS6dKpj=Zl}<0kd~tbi6*N0{maW zK)2Q9K7`_}y6x|=uaNeO8#8MxTWDKk5-(oteDgc9qY|1m9M9-1st>6c?LjaewHHJ6 z@01vH#r{Z$c#G5AR0n^XpJM-tPhtJ+n++qY>1`V?8tM`lT8*6$g%5QrO`R@=*TQ2F zm_vVpcndJRUG@gKksWw;M*`o&Li!Kq<1H`zufVGL_z`!B0Bn0_KFaJH z4rrLz9MIVYBgST?}@h`YJ>p3a#gUVsbu zECTD>`MA_)`*ugMai^8dNI|;g8`x6Wmn-bDec|X7SP8}@*(>lw1p&d8Qg@5Y)|4x7 z{nBxe2XW{;H|aogPoyQ~wC2p#7$53~PNAHZpN@T}iB;Tusv53!@IHhSeOmeK`p_(< zyp6wTu|=%KQ{ydO{}(N`MT?K_M~ki5;%RKLskGP#mbipQ1EoijwDO*+mCu0!(nW>+ z&fZwR_VT@q6ZDI%WdD;^CLN&(Su5Xx<2>lj!?A|C#T%OZHw{(%_V?Y1;jq`Iz~O`A zRdfDWb6?fQ`gPjhG*~pJSNY{L^3erNuvMC0Q%4r7_6z6{%L_ zkT8hv!gy1~f78@Ezx*S#9oEXHsHPgBDKzof9thXiyK1WH*UB!$XF8Fbd5+$&^iZl+ z-dg4N#t`r{ia1k!6WGCDO^N3J04kSKD>U<0XjZ_&ry1B`ELBx&<=a)_W+VdMGYGGh zyKtW<1GAcmGO)3^QU+FFfwg~sH?E+wyZvkt{!^=usYv~!6U}ud>s+RAFLdN2s z!gA#Zu2Y?!z?qL0Ctd4nT%2?TrPkP=CO+y2N}oR}j5$G2`dFnvQ2K3ef}qq^gP>&j zZU-6$494vLKN#=BHvBO#W*-A%ix`YoC&F0TNMLO4z~0s2<^Pv}$7aFgakYWcod*MzJ6jbc?F>{#A(J}?NP3!G4yx7d8}9EP zjl{`l2#EtDEfW1i;V;An=f)pl>5WLHDze)$A^aiBKn> zZmK9~6DepOZnm+T;F36qEX9A&FOJvNZ3vwTOYx*-Tr*>)f4iN5>%#so9e=KAj6bdT z$7b{#{@HUX{>nkub{OI;u$J>8HvKIgE?LSpNvHy16{!69zjzZhNfwk7@`^%D5 z`rcl(Emzig{~qI6i7gJO+u{pT*yC~kqLu4~i}a12SDtK10miM~+)0 zU>n($u-^uG*1bdJE!3&@x6~cY&mdlhG-G$D;Nqkw-{fWmUE3;mDz4>H_)w`PPT_ry zt|m_5s)7vs)p$4AQ(>*jG(cK`efWUAompfb*ZzjV?4|yyl-7U- z9v05lqUg)I@jG_5F1v%9V?BVRj#c@o&GphA>DZa5Q230Xea!tX zI;?o6@Ana7Q|z>So4aIt5QgoDWomQQ4hnZaxWnwzbPjQIN zdNOwq_?%eAi6J~EfDla~q-@qrT#zClHy1>jS7qu} zZzNq0=$mfh2` z{>{4;aj+U#%)JLy+4e&m`#~FYqi_poWZK(+*y_6hWC7=XoQ$zA8f-&q30(C0G(9*@Sbx#KgEYbXgCHnvHgYr0> zKK~x_h*O_A0%yV8bI=`b8ex~HHjp?o*&6!qtipw%(?dfukdTEJk& zWf@R~`9NjB?A|ew6DJv zKu+YBRhm8;tWt)lYQ*Ax~3}|T%HI?FmxgF8fG@rcI}O2EM9NV z0#HFbM>LeT63s(PcvV2W1|vmrY-2p(WBVIB3g2FiHCAPC~dO!%+^oL~wT7=o1pC6_OJLxN(G&Tx+%E+r z&XC8n_)1#yt(YcO?ngh040|`yF+rY^&(-tCa(4U*hg$N#;h5~$Em~{;@|+#Th5p6a z*z7LmHS*ZseFg!eJoi1i2Yz@fynGHGDJeNL~EK{cke^2C#-T7E43WJd3Yxq{9z%RBFJy5o^NI z-cx$vp}Qub=J2vk4!{Qpm)&ZmtUEjze@YG|hZ@kPlpGmSvK2S9UtdvjD1~Qsa2UQC zY%Ww|w{J=gdrHZ@sVN}{iUC|YRf(mMd5cetWb0-C8wqYo=(LgvtCM+!T5$t9b63Ep zSy`rTukcSP$VvrU?|`HKS=fVYf;-KTKfPj0O2eed z{?q{F2Y06@GbV6wIS5^bH*^cX6Zc<$4fkN~1K9U8Aunv0C7{{9C6ISM{&%lMq**Nwd}&>4!#?CoxNprkk`o;i?)pxBkCOk?{3!J;exF{l&24>0 zeUIH|KfF;*?>k7t1BDT<>Z;*=776x_E%iOK8)JDrXLeGF@5|RFo#cV^VtMEOJ5&$a zUNz3~;9r$@KE5Qux}QE-#~w?!IKt}qvvO^32eQf3O%h4E-ucG#QSf`h+YL`WiaeM}5rj(~@f4CrEy=?^hCDz5psAlLv<@}u z&F#w2<@fR7U+)+k^|hC;P2u~<-h1aEGS7(w8F|}@@YJsTf)ja}WgbHW)W_$xf6 z#Qtx39J|L*a50W^Z}v~=QHOXjNSB>bN#d<^h*vJxFfR??79(B{jzJ+q4T-nbAztrA zA3DVAN51%yB=WVo?-8rE2V8MVJHZ1)8)f!eYmY+;I?Q`nTdm-ef!)#}@i&eWpjh(b z_yrShHfu~uiEl9eCWTJ2*Du?Rc{OOMy{Eql)NLQr;wL!%LsBosWpnuu_U5Gm7<-5Z zOuyRuIlhtn=>Q@A*m|k&6Q&i{qjQ9B1@dD1|M5dVLR9mykAr`CnD?#dyhvTpItn z0wFO!H|7W_@^=4L6h;Nb^^C1xG`uV zV6T!*qk7%zQF8mToRXWnNxocS&L%mo-`H$_JkC|NK@%PB1JR3j#D|hmH`9aJ`*hjz zUf`s3#FHhFv#}!GkCH0$i?L6Z?|!!++I~od4X8Q3Csep|x;UwnJ71u@)yQmc_g6W; zkh?ET4t5C)zq9I`mT=Y!M;CJj`%TdL-wauh)m3&O`qBajLkqKc)n{WdQRS|Go?rUf zzz0>ZalNU!QFVo;fhiML-E5QrJ8)IE3z0FQ+|-fePTe4V^n&WseZ7vhj_QbaGNcXleDB%C zP2Rtd56JAs1(>@cCoBH)e%lCM0&g=7(?4`0xj%f@@qdX@W**ChQ9x{l;=^&(S{G4G(u+YFCY>3d8WZ_5y^FznoGTwylfuehYnD z;v0(Eur(i=S+^IrgrpZdIe&s)bVhaPMb=ThxO^;{qRu%{&j zpkS^)3R)l}mhV}W&!n%*Vik70U}iftq_VdddB^$e4itr5>z9 z5(AC>^rhr#X=h2aXbbqH?eNL>rt?eREogw%_wFSot}7B4??hG=Tz`uOHXW;(4VlY@n!kiab3_+4ZcbCW}+VG%Esg}Hi`QQ zh5)OP-R2%nY#y$$M==v0t$(rtX9g(OI#+imTv_DWOHbThD@=BK$%k_cpUCso2 zb>7R2!Bc`d6XCg=@e{#wyMpJLFJ$SI2G7L}X<*0kCa1E!PRDDn1Nf?)&iX-iSD{gK zq=SburporJDc0ek;2Psv;3N}2!eGCUF`&S8! zG(^FD$e_FD|^g>{XOS?T<=*^ovh&UYMPxQe=I3Nrj!& z;RzL!114J@WnZyCpu0R^;>X0{!!mc!s)?Qds&f8i3v(qW9eIBE9AKGguYOPJ6mz3i zeprlkbzTMtxKD!paXUbCpQjypRD-KW;$wCBJhmc;%6k}_Wa6!JbGG`6G*^ALQ zj*Z|3S1Y%3yjgn<)8!@yt?Vo`yGX8m2MM4>yA!&@LBCrvRl!-!UwWk8_^CnT-5Pwy zqssnCN7O?q-$+}&Z|_YU`p+aLL;tf~2~r{jgFM>+$=zjtk4T>Q8QBUBXy*PKX=?0G zZ_m}{`3mX2`@GOD`z6)^2PmmmNWgh({Be~c!}o#;J0vhw#Xth4TOBrqvGT08NDrih zOG#LGO~sU6g}R2{p)ob#JXgRfRELjR-iDmn%lPCQT{2mX5v!&aGuWvE!z?30q#&c^ z`wWl2LH^(^p*Ny62W<~r=k^gVtXa92qbjZJ5fs89_*nDMw`7&60;GLDC92B4=jeci z#GYO`MS4&XS{La{{skPPx}P6rbvur!EuMOwT%L@&?MXF^RKcuEbayo{@M9^%oNAJq}>ki zMX~h%yT;)SbNWHTvtI*kVJitD$Gs%A4Txf4l-C8);}D5IM-$%H)+ph=Hox%&%J7-y z7QpfHA1MxCLhi$~`m?%DD_2Ohd`a~oAB$u^RHEk_V8A(Lh zVq+{`>`$e;ajNYGZ$6F!VqXWF!yPKebmKP1Dx8MIZ91!Qi_RKaihJ4!1Kp}2Tfi#YLneiL;1IR@Ekmo6`#Tk$NkibiP89ia@ z(8}KjaF`uUMkO*Vuf)Kxa1r@z~0^Vp)qhexE_--T%1&z!q z?~nlRi?DKAeNKHiYIh!rYQYokrBGw#UjLJ*$##~LJRH1M?)Q6Is=(`4qCq>L9kQD; zpHT^`W@%EoP(ic^8hkY1Dt_w^iq+!YD^m++LXC_QLw~I`VNAy$@0-8J~fN1Zj+!%2X?NSXm1U z2WPZPs9aG<2W^+nZL}>U4<$Q#wpOK0|U+xUt&Y^&dy$Is$x8 zuizS6xEeD-sr7j>)o3$OYJE22$5o@jGf=_xQi0_LnO9(Y zd`Q5+wzyyWXnDXyg=bWPv*R_R7`aZ>&6adUY#q!Sks8`3#xJu|z%0&c=Z{{W3gX*@ zoA5J%olTJvf=(Vjt3W*fm5!87CYQ4l6WKe4*2%FM*XO$$>+CzmMYRywI z$@T8-2^cl{4Kek82E5G7alNro2*S9(U39fz?&=}BH465M`v65(%#l&)x^W-o%r%+X zM-}v>GrPdU<1*ZqQf2xxq7}U0`2oY95j1Za0vCmjLF1-daVEchEqZ7@Pfwdj3(oLX;fs;`*`T+PSgwH`C?n9mYG9vzHWueiK*6g+JEP=%e!<>=@8PAn|`6PHaXcn#p zF7F$lnEDtpM_CVWE$|xmzDzy35+@EHJ^tDNcOs zzbk*M`(x&{I}3zzcYi<*`x>NC*qgU~7PGIxj<5y#?V?)Lh)HAjK}HBJ8{l-LH7>8g zr+Kwo*TQADd;`MJWGnE4yg+&GN6RtUu%vtq^kDjFWj>ND%~A_1HqmC3iDe#1#F<@# zOqE;Gw6b)h1g&>j5A@x6$QZdKu>+7CV&zmtP_mef@3a5Mtz{*uHLdSZN$H{dv7gb8 z3+K&{t9(W1^2F-$@&3?}{88u8WeZes#q9k+py~y8-b$C|iAt#}75 z;C(#4wg$e1?FHPJ02}tCWgP7U%CJA}S64eLQ1_?B*3;gKK6)ctoIaMUjL`?j5{)k6 zsM(hw7l`BI2{GcR7P4U9>XOEDOBHD>xWOTft|)&Z(s&n{gfyBV69|&%J&Hmujt|e& zzoL(SyHzRrAk8}T0a5sb^bw8I$9uU4j-`+4y7VE3m;KqRaLGUD<3OA~_Sy9?h^FAA zAgNZ(8QexylzkwPK6=${BaTC{tt$E;cdfi^O&2NX;=8%e~w;9f+K+N#nCG^=4i8=2b? zMg)FoQ|)}Ypfw93C3m@#;(LdAaLws5BtY))^$4ZVV8NC|-!AoKBMCC&A4DHitC48| zY27(rjf6GB{n|!cdpc%41FMmO%TY(It`7*8xSw&^srtMYsm!u=Ow+%L7cAEpsOIqNDTss4-3_)t@6YZB8?K|Qz`hQ5f8D1>$xP3_%% zWl&`xCql6VY-%9)VvAb_@}LuF7G(gVbqkbf8OS5fmkau`AP4eKC&l*z^Pn4lAVDiH z#EdY6V5mNwh9)r^8uHR`tJ&TKm<{we!ff!(4THauupo|@Y5SLR4$xY^A%y-fBSptl zF8iH6O=P`HyhD=f=ikNS{8L?vVBbWc$4s@ZPO|Pv$Frz`eWg2U4{Wl6IY|HmF2^ZB03|*zcS#JaQ%UlW#mPv&u-7HK zS2*0E>K#gfTUTMD;cD|Dzu6$KY7E{j?ox?8FUs>{t|8KL$vdcSHR*zzZ@F%3;JcWx z{za61b2h3Ij+mdGz(V}-08FmYu6~+R0r<7DPw_=J0eR^XT(Ge#8Sd8eeG$c;MN2@Jdlfo zoVDT0@I%^qwli-8_BBm_uJ%TO)J&;STe$8q4cEUdMi2B03K+jC{dAXJL<5N7TPk#f(((QxK2hU$h6{_qYkeP1G;! z&pz>W1>Z9&=m8nx9;xbJ(t+$Md+$|3g!g@{Of-+=IYhV)2uiiK)(UUdN)SB@?> zCxUQThn}ys*3~5NKl%}L;WDWLvm!*g(;np2TuCdna=Bf^@}&=ER+kj(NsMYe`gNF1 z;*kInALDm|$5au1b;)MC~EFnw-Nio8_ToYDMt=JrB5SNcCG7N_V4;;`?MYzI= zs3+>RGTJ5!@@~!09;7mai#C82o3Dv>EgcV6EUo-8BqyTgX3|{@HNaI$BVs0WM^6iA zgy|n=G;2V0#n)I@CKSijG~_MiCDl;LAjKQ&G|>_M&B5ii0G#!7Mt@AqYDbP`p2$aN=#V|;Bw>6 ze&2h7DtNds)g;M9Q8+F#XOCjE6%HH;7ONk2d($)vwUg`G)%gNoIe^nUGu z`p%SJc^!e4DgTBF)}8W4dO4_v4e9br_JYZRxAO>9jEw>>cS^|^UdBk&0CHia3jeu> zro+e+$LP1t9+Tf#NB>hRci*TM@Ndl(o>DwanSHg7lrnNb5zz-L^~T~WdFtjmC>i6x z^Wnn6^?^#*H6Ugl+1rP#kSm^kUzn6Ae_IQUT0T5*xaHm`{ZDq<(}K7Iy9unjEm#|@ zI6LkCAPGBi{?yU2%5@SOWQ)aMFeBg6${3uwVe_?Xw9qTpRZA9H4Qq5H{+`ZC#)jp~A??g!My& zayA|p#+WhdSbWR+hOLa;`Ewxif6I}j2+@htlV}Om1U~s?!;~3YU)}R*V4?gBZC@|2 z=(bL8{;_Yv6iDO~R!7>$)w$tQMWk{3r!WZL*w3@lNfTD*^cv+aF6OXYiWIa`zLj$c z@wXAjgX_zJN$_!~Ne<@Kj+)Q(Cs-2B!wb&2RW+v{*abGG8>?{z*cA{>aO?6C{kDA@ z2rZ19ld2?SY?kKjt|%@iOR#OSIt~_LI*BzOlln`~UE19<~BwLjn?$DJgP{Uzw2U`lZYh&s20Y6=%BUKna? zH@g-Mij|(yTRIL&!v(owHoQEGX63BqvnfUMBH8wl9A+z=Dx=z7a=|vGKFi-(@>iwQ zpZz5hlP(OMf}eUFimWm9ib0osC!@>^ zSXZZW$!IMTlLz@{3OD4#u**a39Dmd&B@Ijvj9?0p2&u>NJte6@vr}ZWlkW~UALqtR zPDU_z`j_nZfp)e%5RO{ECG63=Jz))^GXcoQxx99lt;$k<_Fb$Jj7~*3j45|?;Z(0(8))L0Qn>Eq!WkzQ&g_zeGeWM*Z+GwtV7XYM z<8tJrk_ods#mQC4U{T-WP-^`bOHLAJ>GHcVzhj%Yz6XUbx-0QGiE)9*AJFe}-;{o*0THpacS!^E8}gr20#qVA(g|nQ5f%Y-Y$pTHd1oSHbCprh za<+tl7NUaNbJ?+vMl0V7B`4whqF6pnOZf`oz>#!IRoe@!b2L`q_LvWoMYotl39X`J z!ukv0IH?=G(s{eFIbk~YQp{G7=TRe_mIKIU_QDEwC`BuM8~PvoTo#G%;Qi_TXwy~t z&|aw^GxDdcP-ozc0g9U$xhg)F$lr9+kL9T1uWnq%#fd@Q++AP{t3=JqSusS%8Cuyy z)T^8KL->IEkM|}t9&K8~H5yA@j~KD8xt0qgo)m>v6uQEp*H0u-(e?X1xHMsp(zi%b zxh`A2Z7R&`Js-j-hUpA6e5zA?f?J%7Zo$m_*$U? z`!o3NVugxbOy3`6QKm4~uzSI0FO?$He!UBdjBh~25-+AtMJ-(STCd|SADp7le}@_^ z-%SyA{qL?M8}wgNo&Kxv3Ht9Am;O8D-TvdfQSl_~_%U4-{dYl8{Z}#Pf>T}uVyChebI?qEC~4Foh_t&mksvDlK#1x4^gL{~LZEMr zQzMGv=Ev{&#%=7oQX*dJw`)t6)JwQ*+>ZRRhn!nCyoS_(g;2)<9B8cl@xyrmx~~$i zM2GJ2GHsAo8Xl2-h4!z>)c@>FtUOk;WEc=}G3>1M_DKVd;Ft?mopA}0 zO38#7o+*9Tv;N}2VEVF0(oG%s#G8lOlS{Pn5%7VUyv9ligm0oZl$HC+yJ~s+NQq!t z*-Icf@cNqBNmyhmpt~EPdGdFb{H+Lody^RsUQjc!ucK@@n z^T@{K7%BDK#;b)`@870dI_^MtM*-gGG9_?9VJ)0D3qXhK6F@68m2_6in~%)CQ*$ar zHNfMDQ7(X0h3k@JS;T_KRaO3~g>s&RXR1{Z4tOy7g#W}JyYSOf;emnm@#yuuoo-B6 zZLeF)d4z4rR!_Dg*?`@NJBHcq_@sm7_YtZ*5On~!&Ie$DO??@%U?+m? zL2K260ch!NwscevaN6e*2X?`?1OL}o#Nl6oFyQ|v0seDUP0+VfmhzA?bZQ<-jjJp% zdsuAz9RC@-i{`667sq!_>PD8(DhoAXW07jd1!}$N%w3`=zGC&~{g$}#1ovA;G`Zx^ z?3U^`>IcC>P|r-(Q{9!U^&s0;PaY+R=SR~|Z)idR;{XoHg5i9Nqxv4zpe9!KD<+%YHNSQAfO z!PVuE(tsdLgn_RjbAo3vcOdK$3o$9^pnSys4j&+!sPFL~ z*i-;{uO~joDJ+IR(T8vzjq5ab%F@9CsDP*97acPCenooSW>9BO+%Zp-git8dAoOd0#%w2%8D3c-evEND97p1MQwWO$SpXYpyb^A1x zAl*i7Ab-~NH7HFty(w8drPmIj-_IGFVh;Ms=ttq_dGKy_7ZTIOPA{fNlIm><3R5RW zZy$V~Y{l|@AfEwFm@kqBhen)YecWQ?fVwK@cK&m$h9W7{e?dC`6Svpg(SI2$55^#- z7jz`RmanC1C%GM=wtQI_!0nR5m?jox$rem*$+an4?Q z@9$pg?6Y5o%Fg?8JMe{R&ZzY0b69nUgt~ADcIsj&1n zL$*lK4#iQ9@Gd}K$r(*K!uOx}0$TK=Ea(0~gz$3iI^m`dIb0@&3+46rki+j#MP)pu z@5u?Z_da+|^JadNP2f?dN@s}{T7wvdl;bqt9u@dqR!B%;aA`t_%ZBK z6>o8#4!#@keL(NFl=**HkP}64bp?G7lsofOl_n)Z=~k^DJdNG zdSZ7ct%AIsqtl!N=?#r~TC{(KC*xZMPy`|Cf0b!cdlup11xyLYmkf`wW{wgUBHxZZTtNrPq9CWI z25`F(Ih~5yK}si*xz;r~JtITNP~d_lQfzE34U#JJi!y&J_*z-t&m(#24Rd{misYYF zl2414pG0|4n>^2Jtdb#W0iF~ATma-?0DH-%&PQ&>xq* zDF2N0;nwj9IbqmFffG6LMVM^D{_$%mX zSl$L-PCs5+jn`dQ*uUcOTJChwMd(I%xd9IvEN-J)`@}WeRiv8AhoNrA2?8(_P#(n4~%W**8G1M89;MT_CEEiOZw9qLL74GP*m ze|r;Pl=-q1ZbBP#@a6WblXQd|u6LgaYU0Z+3z8CK20)pvtDTBu(;dHR8`Kb`{e`3b zwFLO#0AGRT=jP^j1Z_3l@ki|^P)9U~bcY+4VD=bIFHG)lpceS>T0hs$C8b7x2G2FGI@{TnePoDm0333O2WZai=p)KZyU&3l+*Cud zyfD_2`g0&(?@Fj0A}nF7Jw{XwcbPphl)FvW;AQXPvb-WkBdYpv&FA?Vu|$O1?{&kwj`ZQ!P_1iMPA2 zqtXa_1N#=`bWtntmXXFLI(7=H_<}90LZ8sVm!j4O>Jv?9YXmNIaB*O1(w>BexH`ge+Zoimih^m{1^FAC>U9K$oAn)q}(NwgKcfF}s2hsJYT zg0`UzV;?oN0jPHOjj^Pv>PniDooHwjfrfVMN$&STHNHTo7(RBm9iEw5+BS$M~+9^m=oqFJ-d~ zr77SfXds{rs|u*)I4WhQX);HlXs{*|ucI4^)}c1i;xhFV9N*b1LHKWWp5I8E&0pW2s4@xpLLPq*HrxKZ;gD?{etpbJ{dVxjlE7 zEPUM{S$Nd@kG;9zN}ba?&peA6RY7%l5_LG% zrPN_O!bBbZ=FwK(arfht2G&(@y7a=SoRIK{2;nC9m~czG^^ovU@Ax2ZP(SXDMJiHl z$D)-V^m5mRRuN^|UAJNU;~}(vIzi>OaJ%Cnj5egu_6;0{+|};vhs}w7?T(h^w023^ z!I22#fcGw+p-3k~ffolh66oZoW2+3T$1SwSrh;q(ZL;ySRNJT6Ut=r$26dP=FfSzc zsJh2yCal68T|@B5_!?ns$)P*Hq8jDX$5zw_!~O0v@3j#plUw%}t4pNCc~4{o=WnGx zxn`^v)!2#+u`>E#VIMd4gYNnm(KPtwWV)#JQv;|$P^~Mk`G1HIeoJf4x8uX7HsyPb z@_PBbMt9q2B#9?QCd!CYdy!r2Q~V8l@wZ+6Y28ZLrT$(_T3MPrT#CHc<^9L-tBhyx z`J3oA#g69z3VigDD|7xtc+u115ro=La2Ok&H~R4bm>Mi6sKSyN3=t!RqZyn+&I~9k zXyr_XI&IFNTKuw?&`bCykbgV*F(`iv7KJ{7-p;ALK|3%%3)UaJhCx9L+k6d8JL+If zLtoJyM>n|o7cObXYYq$PZHrpggsR+7&$U>cLr#1=33G`bQ+J(~8@$c8Z>O)A^-sl( zi0p(&o{FX+bzHKTFX2=1BOrm+65UGq!ns4+lZ#Hy9*SEdM^b`6xu^D^Jma%X&=Xh! zxx3~do(t}`DN39Ibgny`IQIY>)VI+W!G56yj#P*0dnrZ@Csfrwh)$ebkEEOrh55O9 z_mRrhIQ6D!L1|qA?e(!On1&ucZ2;|98gmsaP``rwg!@`ycWTbCE#-w+ARKWzd%DHh zzZ_v(YOvPK8*%V~>BvoouI%L#-TLn1GZqpzgj|Vt#E*ioxy2jt{Nm}B{Dc>DX|3V3 zPWsY%Ca|>9IIZ2fv@$uZo;EdK!vjmp!f6HJK3^Hza#|C8Y1JbjfHJ=Cq%!u`rL|)! z)z{O$wB8OZt;w9$6kS?#IIZozw6X$As{^OCLYG!7r*+nsR{Oxxs#-*4+^b9LhbdIX zKH+NJS0eEM>Z=fGp|y(BxTL<*`M7o*DLkzX|K0bSEqVebenwZ}T-qAE(XXRM+kdBQ zv_BS{ZZ_*4G}p2kXkFN*&{@Ix@gbI+TXEEEQb??=$Aon_k@e~cHR1eI6~#ZLv4|f1 z+X>r5I+8XWawhJuZ7;RhCVmBx<3swuabljW8r&0Dsj_hN9*{H=7WMoF>p-_~cxBm3|jv%9e$ zcGgaN!6r)9lCuS4{3T-lnNrY*f49J7lB0-5Dz*oQ2W`OqddtbO;N12buzeSi9fs;gIYoNVt8p0QX1h(yP+2bkWNG1P)E`Yz39IlCx+Tu zC*6QLv|fw#=j`ccCp&nv#Zo$W1TIM$T9I@^8m8_C!)zT}+ZGlt;?4E+6E^5W7%`W1 z6n-!tiZkGGI{vQ*npi01drP8_isuIK#?pM6;uc@+EUSsK^Ga>x%xi~%E<4>Z#nGV| z3^hL9jaz0VVjMCjGUd>OGhYVjRJSDOCaOuaw}yGOR|Gfv1NpokAC`?F!*x#a42qq7R+KOn5n{Q|W&$o&v3Z7AT<>8ni@O+|p zLg1-VJlOYCn1Ip45=$(qdjQWDX^L~_=<`;ktA8!GTkv;&T6v%3jHz8?Sx8t;G|ejL#H&(gaVdHuz#Vsf?@T3Q7edSy(5( z++MIV_!ejU)t>9s^tIK0!ThE<`ZY^*-4cW^3e0*r5f5@?_9|UwHQTlCU#idVJRH@e z&2PyJ6xWBu(|_ro%7={;?UVOf72I@D^>zNU3&{7}?0bE=X!+eQO8z{5`Ae}}>{8`p zn8#Mo{-Wfc-{V*Q|5|>ti;_RjU%sW)C6_-Rx7rF$K}7@Cm-D;z<;R`2!XzZ5ZNRnt z5l~{mmWzvPk1#*Bg8dhjpXq-2DXD`IxYYJ=J;|>i`4=>_?jWDAH()H@DOm-J=Nam2 z{1<7jP(geSNqGeKtukE@-_RD^1V~(SHAzTyhML_;Zgrh`6l9S+k&3F zK=48jX7}D*e&y>+jq{S*%e}bURxqaV_W4(Tc@{j{FI`?8?lzQnY^PuOES>)wc^0bA z0@|M4i2lw0U&u44&(;m(VNdp@*XOOc+qR&F*Jxg_z5HW`e|?%DZ*JrA`Zkca=D#W5 zD>!%6wxD0*^2#do<-@e_NOZ_>6k@mStI_2e6p;N)bHwA|d34I=*H3Q`iG@~lKO1Q= zw+e|vZ65|-lkC8kkI+T-<}Qcv{$~kwe=h3z6pOBgt$_N#jY#`$yS{uv#3k#ykhh?5 zc@O!?({$HKm5M&5TZ=GxyNO}8&&1@%pAihw&m?Sys)3dz3 zUa7N)rl~P4@7;lAN;X$NTH>Eo5BJ<7BV9R%PGckFAqQU+gdM1tCB`LNayQzuaFl1; zZy^l5ZEWN}>P~5|<}AhgnYR)N%&GD$DXGEXyPi0uzaIGeLLcIJRpa&BdYd0l7Ieux zEiA8nHopN&O6S#QC7uh%>~&VDSO9pe4|PvvQz9}6$X$q&~zBJpw|(eK%@ z3c_D6vB17cvwG?Mfd`R@Z9z7D{pZ4EeyUVozj17CRde2oHERSc^f7x`ZBvZh@3@kt zbuci`EBE$E-!{h;m^UchW}{IY@DZBJ~4jl~Roc{CryfyKG* zBdut-{_EN|5mRERxitHFhV*|m&7EGjeD7@0mrp;`@eIY%<~U3gU6*Ei+l@*&(UB@;kp%}Vb^}oYuf{X{;XexNzo62U)r)FSs#npc{0x;$xrZIbehA~LFJ&iU{mf&XG^e;{@ zO<8pPHhVGq>$z4+oTf;`6l|6hi2aP>HYX-36P^+G&@Ayb+Y_5G3WmUW;sQqxEF^-r zJ9{y4#3x!`$v%`~%Mad2i@PN!%SRjBjBB5I11kk60+Tou4{}M?B1kPs)*gUyCH&lh zswa)J5H6%Sqc+lgG&Qvw{N4L)sG#}VC=550h#Pouc?G*^nJQYC%+7qKX{d{Z*kvuK*m7t-;n(9cgGV}Y;;?MF|9jZ~q{wo=2r+<9{ZMDP(~cG3w4`fO z4OX<#(ZkO5lrwxX1v77GaZ@esqUs}j7BH}Pf#6SG;+5Xs2e|lOz(>XZ4E<4eaV64R zMnl|=s)Cx3g4018@Cs@9i2f`1kEP&Hc){7Ag0FDeMp9ge!xaocj-n9!52@VAEy7uf z-1)Q>){;rxpp3WUYdWHb?BElrXs6i@wz*0pwxGB;OCtp93W};YMZVBA1n0MJwLgzg z>L1%(w_pJRuMEOuC!NQ6kFUeL6oqRo3fF}Sr+gZC{X*P`^}1*Vu86}c+gm=WL18gJ z5s8c4r>>@tpK|uoMDH5gev{(fqFS)Iu0bYKvUaCA z-PLy|KJ9_|46K8|2?VF?(O4Vo4a$wBPch=G3Y?^MI2m6WbDZ!*`ErZvahL8q(ZnDe zYa_r833mJ^Df*1JEY;N(rEYtBTF}{)rr3PEsVfPsDC&V9P{G_zECo204Zx41D2hCy zF`!U1g+wP!xhObs1GNYDq+gEkF)^PZC?%_c&PjUw9Np#Q6{0vnD<$ho9P!jd)<#Ox zQCP&m^@I7~`Hm(yZWv#Lz+q6qG@b6L-Ay+Ok?yJA9-((6F}u{eSKZ9u;f|c^!tvdM z^T;i}gUfGE3*N(EU#ctVIxHk%$|$vHKBYN%*u8R^3Wnc0{&kJTOI5<`_M}dVmQQ6L zv>aUB_d#z+$9W;aS7bY|&YdsNuF9AsLU>iiBf>4$!rUi(4*Fawmi(?mdGNDJ{45ne z`Qm4W_{kJMqr}e;@e?b4qVU6dxS|Fwk*OO_LIYi!CN4fjyUypcC;B%)*U9l^S zS=zH)NtD0`cZ67NALN7tm;D%G+j6q`mlV>>_Q9Nx%gTO2h`0Iv6SkgvqR-?1FEMpl zPVvpLSUV)7tS01noDYtO{mn78+4HL)%x(6pp-InOJOf(E6QG~Q@@(h0vSGI9r0YgO zJ~eeLcf?s`w_`CWzhF9tUXke7k%&pef-^z3q8T_JsqaY?D;?8fz3o}S>+JaO7j>zzOKIJN*PcMhkjx7gN9C__`qXxXEm#&OSg3Dk6Fy9D19DAK0vqF2ks(`=(Ck zy{WF8>oT`c^Y%u(HhQ{cm~+l`ncj$d)254!gGEuK%+W=$;%5kcph5T_vzIql6!lYG z@v4iip;(&p#JWgwIg0EEBw0C9R`neui~LVxAD%bjFR7T&b}b`mn=$KV;oy&c;JC+- znZ90cgzYc%%b)Muco~*P@Yl02LF$dL=1@%ElirAD9-a>U$hmH|l=Fy`Gh52>jF^tY zQ@1u30DRo z9k2E{27e-*v5R$H{N&;Az9%;}#aa(41wVZz)0&UT6y%NQJe4Q;qxizjK|N@1!?hGK z5)mTM;tL$81~#F<>*mvyUDd#*zCarS(H1tm(B87HH`<1$0FA=c(S2kF7M54=deFks zoUr&_InD8%R$5B#`IWv*9$h9jaJV*&0w#2QVnc9{it`4$%lbaqkDkeNot~ z7#z9Y+czKSN=S(yGla&so%)pPDG7HN5VyN>P;LYhgD0|yZp5&%7e0WA)}hLjMCUl4TYbfW$xHu+BA2{ollp+{2riR zSHk|*S_8e4ePp1WD@ZymbHY;kgYFHuTQ$}(m+`Id^Tk?Yy-|kng8A!d|CK9YrXs*r zn2H5uwYTFx1V5=>iu0G1gb+SUxOwq>fpANEpDSa~YwGBzof(|s%IWxkZ2IGFL!&I? zrr&BfHFb&-P5&hP(pV<(30Q~2slRZ+c5Il;81I1C#L{}WzdFW!paepN)p#qzfmpA$Yu ztom)m1P(!7@V<0|%!(`FW|0EyzAGV1xMlr}7CxML;am~U4Tzr*NzRaTI#6g1+Cn-$ z9N2dsHXnJ~`+77>?cVaVfxB!4ci{?5=`WSf2zLrTY3^!SioX$N zm-)OA*Wl^xs6bEPb3{+nMF0LYMF(><+ho2XUUNkaUvUU#%u&Ie48Gz~%@w=(ic(ww zg@F3e|4=JO1z$NzbLCpT^6$73F9+O7q=TwX;QKRWXt7~Cu}xLp^`cTJ6k$H!l}YL2 zqw)7*3#Ys&S98%Mz9>#4EqZ|AiNPmqO|xd)6K6f~7C#D^CpGuTq?Y?5+-Y|LKrn5Bl8p;T@gP zDg6?i(&M^|S6}$LIZM$6^*FJ)vh2Gk`$p1x7(*;g+iNd7(-F(PLYhF+=|PEgVlyzL zCeN^Kq8odIU3a%#!^3ZMop0z3>&Y5VxhbWLL>n$qqx80}zS#8WQ1`~u%emN zvPRqUZ?B`gjV!sm;JQCrYq<_tELqhF!|CzLdc;4SuTa5j4#9KYe%Yj@xriSvEE6KbvRW4)&Kyr;j=Sv^=v zoLqx3ARHL&eq?!TJack?pbqhZ-eMyJ#soz`yBHkoF!~2PFfn2U6PjF;gmXRfKSy49 zWj~(`q)T6Z|6|7+7~`FBvW-Q2-(lIPJ89D&P6+w~i;%yXtgcSRQ}nEr9@>qbSIwuG zALVPXC1(eX?B83DbiJjycj4}zIYt?aIlw;Z>Z6aJN=5qj={CMT{_wNpp$`0RnV@f{ z%;z#hbn|g5ee&XiZ9#N{$Byo5A*Vz)zph@2@2@BcA$+NDbAMpDaLfL{5*b4s+!pNS z_ZjkDE~9XYX;&`Y6UZcegot)t4Eh}z&bo|_gTgC+I4Y6LuNLEIu;}(<5KcH+;n7v3r~~UXYrp*-~}ZC%E1y&f%hrWEXw8hmT;2e zN4)5zj^X!(>k**7FZ{F~4a2d5#i<+W4!NgO8km7m#HR&)CyuJPTZHhNL$;D3-ZeZy z_%Pw+RFcC|0XkYb0*PT|N$r)iHwD%4qr0q}_Ujb&ph7w~QA&6#z?_QAfCthP_3 z1?}=4!pD1P@D$%p{UVcj3`edDznBbnEqV=>MWcfF+gZQ- z@Aj4|H&+yXF#~Bps)fdQD;8l$;50H)G!Q+6+ARpC^*8yC;p1!JwhzYOqpcN4KIdrR zzT7(gMnKyXHBXL@IX^NKEpl2Yg~qqu8ZVqSF?@wnUkP69 zqteL)3lu{wLoU6q`$q1e)i{`ESY1j`X$q}zaV}%(*q6}S-gGFB>KE;N%vQS{uQYv2 z@rJnMW4IijC1b~wW781gzQm52!kGWcqPyWu#%I(KRWyLyePIMwTmhG-H`Y5B+2N|N z1S3QEhScdrE^1i|(I7b;Xj}>wy%f?h1gWmzdka3^MiiRm{%ChCW~bfZq7>}T#oLJS zqSg!93T_X=xXzkw)C4ewsgCE2aP~Vvx;+s#6WzFcJ{0a$t~;L_bPu#zDrs)>cYAz9 zFJhjDa4{Nf=A$$ixvVSVpp#8;bKjkqD!~D!j`9}EsDwF}Ei4P#>4}pCN^?%G!>4_h zra1fI46R??M`2+g4_5CJ`@j`c4Y@z`-RZG@bQzbMt78#oTqZy&Ipp-h@Y)kVL-qIx zS0Ggm_E*S!F65Lv-Fp1_^{BT{uBPDtpW?mhfyqLj8&)-Tz6YOd=`>(NdbEGUqHu>p~{7T%N z7nvXBUL`HF%kpRGDP>iD|Ll6R$)WOn*cE2Y-#FI|*`0o+6w4^hbUrPWcTq zU&_5oT7lkY)^$o*m0z>c4Ky94{PgRyE@HnezT|7|x_@Rcjz#151-u4W+rp3Euy7Hs zzECLpooNpw&L#2Y-#p${)C-T!#LamA1bO;8%F1dx2bJwTgV9h-q2X_w)q~x@Cv0QO zY&~{Rnj5~H8H{NK+;{>;9*5xE9h6@mpVK10eol@xzkYD;Ae>OqgmSe6SMsPFzL4=S zgdk12a--8)*d7}xap_Va2I-F9;d%M~rLJKw$6qlElZ~Y*wpX@4+&sU&x2=e}PD+w- znj||T$^80>IqmZ6XXailQVQ#Xluy{&m3r(P&^jy(chsiAnmes+5ZADP?Mfjf_ev^h zkSHk^^NTNVUt8Qqd82Y~rGTagprXA84`xrW7nJ&|Fw;*Xlh{651>a^&Wm??#kyRa2 zN~1ScWGET)rDLu6xQ+PC#;GbNBX$7c{I0p%ZuB zEySuAia>Y9J%V2`K0}cDic$Cmmby^9y2vLS3E;;1QzR;_DF%86z#Gi6#H2(xyVK$Z z@H4N8@bOjW>p9DOz)1^{eL7ydFFsRW{}}-Yx87PszvHYi_@!OHwjSxLK&i|&#=7G? zUcoV=y(1i3f>%-9{HugsbLqI0e~Ofyv9>WM6F;Ud8&6o2p}T0`fP;y!BnfS`DGq@z zb2p(SD6b(V(NT^K{q+4$TaVGJXwNWCxS}~Pob5FhKeobL+*U%j+Q$5XOx}r1(geSw z&eo&eHs%KiOLI(n-qUrdtq0!M@7{(c`ID`On=*k<{dl)0IlfOHc-&Sv64Hh{yS|fB zaIQtp=ZUVguJ~l3)wX~pJut6sE4&XXW5?NIWv83iU89E^LWjg{{%+Y|*b~QXZq$V=b`L-V7 z;vV8w6qpKbcgEJbkr7|(yniWWv991u3)|y2Aa(Nn$QibhNpkE?DLYKtu5Z~x7H1Bo zhi!!;5R($Ln@dA8C5@Hl6AU_sCoTBX(m)&Me%e@()}Nswp}oxg)UaHjfTPC1E6q9W z`PyuHyWtt8@W;m6dQ>1M? zDOp?n>i9yfCDB{eSk<8!kK1PJu?Ii+E8h`hyQ9`NdXMeS-L@WE5xCXX<8%Drue=Iz zhis!ix83<~TaS*{Vx-8{<2&1!@1ZZY9+)a9--ZinY@^F;cW$+f`5NsPVY?CbAKU0% zwmU1Sdg+seTgd=w`o4*qNb8_$Lh-(>gpJi`T}ATqh_-mzCp&(2q(4vRgJP-4Vb--n zpmS@M(6wANdq2g*9iF}1zM+Db*$U|SkmUG|+wIs!wJ<&F7iuR-Z~tk##W_uAwK$OX zg1UI_qy5k~yQ01Q}UrN?CzlPD6 zDKS*O0bGVZS3cBq3XSX4)lLKwszGSJR`K9Xqc#u48wSOD`%e|G9n#Tg-K|#)b+-J6 zGB4#!#}cTWq;BXOK?CuhUFzJeAy`ZIgIG&h(7a;q^IO)#5aQgF>oGwn*3_)O zmSdK0nUYU22Pj4?IVct}t7ObpiV?Gx^F_=*w@l`H-b4%%e|^h$SljH4C>Gu|TWZ+5 zSa{cMY0ekV72fx^BtXBs5!2z_a)>Xye86`$PI3 zcn$Ty&+imH@RRseulxvCDn0NTwFmwgEW_g0!EC zRquCNZ$}&@I7B_KiqEh?9o>7YVjPgmaO+=jAz6_3aq!C3aC39C4kuT%HC+5$DSo<$ zpE&W8B!1Gx&z<7uZt*i&{5&Ln9u+?Y;%6~_pf3@ByV9}|D{iU#?jC;-mFevGLUa0p zLhdT)$Llm@^HAou^yZYjiWZ+Blh!pmW(HHh>q@{&2*3;vKGuNNU69ZjD=I8GQFQnk z)$Jrw#P`7>zgL>YLcg*2_520vFM?2~c(M5Gk8kjumT^dh&=e#bz+y#9MQ}H|j{d<( zx6(gb;V{^lMFshA$2ZN5+0HJ@x*$(CR?61ac9fY4mPI!xm*#vCPs6Yatp$i*RPeaC zKXg00=zgn=znA0Zi};q?3&>?j{4mIKSv;MkRY6}nOBjNSDy$Dyh#dEY-H4c4+!m!N z+?ks~yfH=bu5I(janx-Yx^T{oW1F9LScl3Kyq^}$W?WcE@ zKXCVUYe!rfgigrUxXA7ZOT`^_hcyj971n$3zs0fxhnnF#KwkH+x!>}-^R2kinY_Va z{T}g)l0R8!JphO8!{lxEJFNfau&oQNyG7W?2;0VCn-^L)vSZ6a>$~hITWIA%C6_O> z{u3djVjo~zD}K{)k`q~l@Q8OfU>rJ}t;2S2ql?BSe}m2jb;hlw2*9_F9M)GjCOjGM z5n+?+$S$GR+S- zYqMkF!i9F*+sE-)<8Iks#z*h79+zB` z`yh;Sf_6g!QD=u*<$HuH!34h$|As75~8%m|*Z-)B+b3 zBwWL>&z9BhC(C~OSC|<;c266N9N!vijcrF1###H}S8Fus`OvqtAmJ6Xnx?Zt9SOy7 z@U8@({Y14EAryL!W;UtBU?uoB%qrHm@d9#m)BoYZ8jc&3+5_{4Dxqy2017qz zd8_7opFvW#Cnr-sTPy2ce_3dGg-b)wPt}%QJRj4t!d^vV#bXS4!SKYq5b^fI1r0?) zL!0(A_-o}m%G{mH&RB!WvdiM5%L~fml+@?FjJ%1`KGs7g=uv+` zI3_H-@F^-P&MzFbfzn5oaUz?$TXt!D^md|?k6L?dlDER1Rgp4fugG%$SWf9n`;?s` z%g2!85agJ~HSxJ;dLaa*I&UfV{!H1S%lEFbBb@KO**oK-cNCPyVUwm5Gw+4@ULNav z@?Xf3PT-c_R7VawqHR!|-?S|2XqW?39Nzop@%lX5_%d!yn|h%&Ia|&z z+6m3^vq&f79lN5BE5IMiNXz;R8J5lIS=3i% z(&evO6khhohVt(P?W?6`JX(uUu(Cu(~4gd9Nsn{;tx7 z6hV3Zg18M)j)fH8%cI&qgubsY*Xp~Cx9E)DORcUPZ5;NkEs_N&sQnJGO4T>6FXJ71 zqQ7*U)G5ByBI}W!RPrkOlrJ@;+GrG?U>!%aC^=cV7D0|Gf`tc8d3HHev|xLjl6phM zR|L)X7sRlhmatM>4|x?@*!QgHzLMuLY(tc!ZuC!zT2~utT~!{~aAQt6;3Sis_XcWG zXQdPg|Bm*n70T?hoY^GTm>|?~JAX?BZ7BD2cO{~_P@CmSLvbaA1Ua_T^BGO0jw~A4 zNx&|5>`Tvr_U2n)+j^!6}HWiunwYfj3WvLC6`n;DFi#i;m zBRY#ZjfGvvqH1ONbVAyzuvfQe^+EUiLyDKC2;X)0LoOPXeBMi|WriZm_7|j8gbO?Y z*=8{&|0iG{PDxXJTC1fzlN>w56R=8E;4~<3!zZ9B#`gsLr((UNTJ+y^E!B}mV1p;1 zkCke_&>#DK6Y(m=BZhkZPi{u5fYG`esW~tFaG~z5Vom+JWdk`64ZCIh*!SG;*ySzv zd%C3I>9U735IvP+^u*sqJryAWXqNv0R#p6jS z@e^Mo7lLLom5$b`p|kT8Zk44Q;V5g+%ie*)omUFCM=f0csVosqO6jNg6|Ss7FB{*P z(LH;k%jktiOI6Y3Kf7HK3X}>fy{^T}M;+K#fN}La# zX^D=qk4VALqr;l~+HTyjRC(UZoukvjQisjre4J5>yn`%_59m|}%AA(96Px9?@QZjmmF+i?eNhGG0MOCOh^jJs72ToETl6Y>N!(AC?Kau5OO-V5@A`)86MCz^&!0yd*xCb6zyPVQR3g)raOqzk@c)=gp3O4ME3eydj@#UG-&hN{#SAe|Q&}u_9Vw zkvF6EJ5uSu`ryDuST*pJey{Ho7v`*F9w zfD7A?GSTPO@>%wdKObp7&Ruzld_KpG|1b7^s=pu|pNp{{QJm8MyZw0M3cqHdQZuw4 z_u#fmupe>$(*7Uq$CmaDOX{;9WwvK@uYzj(oPWL+bCI@!8?kr~?}oK&v6Pd??J+ET z>HxY6SXngA`Z6}TpRo19K}8Y6A?Frn@S>!k?XyQYj&r9QgP6ON_liBr_|;?gYlp?c zI&=OoNH2%-c2TFBhs7{cfDeQ0nz_W2a}m=P$|%{3%Cm!3+3F;|)sAXJBas^~50eRr zwkK%QH*|^p}8?p}@DJlRDFVr%Ye&P!$Wws}tpbkkp z%4wm@sR*BraO^mmeMOR^RH<`(Lj><~Wq27W_4Gox-( zJ65^M_H?T4rM0KeaG#E@Uwhj7@Dk6Ai-9J}JWsZ#$NK3Y{?%WaUt8L1d%S~eOP#Qj zlFCMHY0QP%lByunbRy1Qe!&9ywT};|eO!v3JfrAI4pPtwF7g-Lu=UXqVE?n$XJz@C zL6*Q;-wrlu?)}Ns`ts55=*nw!c|zF0K9Diu?Zm+TVAr z{iHS4{=&nqIzwfn#l7Rg2D7`@v5Res5BrN#Y!&r{rMN^#xc&*MB!Oew=ms zmu)QC(QRe_QJbB%ahMUsoO?8 zRMLm^^1W8u9dz|4lp*&AxB**qlZ3rW9FusbINyLaL?z6A6$_4VVy`o75?r-z9KnLk z4H?^LLA7!qK|1@e>6>hHGOu-SzouqLg(J#Th7gdlaZ%X2d^&87Y7 z?`(YWcLx3@<1Z6`IJ0orDE!&+Hw1qJ@E41}9{7vG-xc@^$6tuuK?h0i-%5GIv2rN| zzvQRkAY50%H!>&|3)aPPUWa5zlydCvUJ<~D6{k7oR@ogLXZ{n*5-Ns8A?r9CbJ!K~ zmlpPsKScb(tkWBQLdX^pTR}eZww7L6jt6f~PF|_74(y`}i?W1R+_n#SgDWO`_?X~l zN1?(f0u{Ea9aq>p2vRHT{#;ZT&a?eQmJ{xJ>86v)nkhxwNNLcvs@=$vd(Q_DGJhL| z;i7lN4G!#3rVsCyNN+4v2OXAMuEcK$#|`(}ZPQD!aQm@l*mxG6=D_J<39*|=JfF)J zCY+Xm+h?{(am80e^HJRHd+=@5G-q7O=7}9%>VFLvymaUonyL1yu#}~PTuSH z@$AF*X+NHw;=<>{G59!YM0;!lPU|`<5npc|+Y)8sk71|dtV?`WI2hlueZKAx?OyPD zTBzSsh@>+zI;RbMBqaB^`YqcWq#-|M`)!&t4{IvJ7QIY6(EgU0;u;={leE%o$*19+ zY%98wN7fRimQ!gJe&g9k{030f-nw4b;Qx&;iYlMEZV|!!jv+|p_pe9%8oWVcZo!i1 zG>d{Vw0k<#!X|?FJc&r*mK&YJgpW5mfAkO3tz&Ga(>~Ub8f$mX#<`hmzv=uxQC?ew8xyR)y|8IMz52iYBMw>uNB@RoK%kMc1` zB95m`%*4JL+?6=l?n*=o2_M+0gnt`Vk;rHelj*$;Uq9cL=1k}fVd>6EnZ%1eJ-jW& zX`?R>W21@3=9>+~cX*x5t5e#*Y&|dKljH}|oR1K$>Q#j6A>g_NxK09B9lSnVC8b(i zZ?R9swF<3IW1qUE`*3Ak&bWpmNX2#Pp}=uvup}L>OcBJm9uRJcYohQmt`;be0WQx= zCgZXVS8>r6Ngb|v5Y`y3a33x_&jRKZgCvc3g|f9&)awtnCn~SHcXYgRQ+>Qvw`N{X zBS_^n96R%L&l3anTFsJlyw-^z=Jl~~OI~Y*k9pm-(vVjiMVqN!_a-;aYtIVPdF3HV zBVHMswEC6KK9$#ybvj<#QhdDXZOrQsf>d75O%I$`{l_F%$IHUP#U9v}!Yz577Z)?H zH+Nw;bUHBUo_-ZP0?oZ3LDxuujvqGGOtJ^X{2BE zA8C30!akK(%^DrA`)={^DsIWV9!HR>UpHk3&a0Ru>3FRYLCkB7a7$h*g^ziSc)^fY z3`LvCtCLOTg>gN-er2FePwa zo(~(?!#WYfyv_-?-4G}@iD^0j1uff8{ypAk06hnyEw69cr}C%4^oWf%B?8sZ)*!+Bc@-l`BVKuHw7jOVPvw>Ql8)D5mCn(yC)t-G{`A5I9I zS0qc)=~t8pVqU$3Tk`58e9UW?(~#F{iZ+v1&3Gc$LCkB8a7$j(g^zh%g#sDa!+M9w zy#CU+ab8Ox%w%41NYY5ZBHz&R3S*zj%d%X@tEj(^S4lnddKp0~uQ7K8&a3402KKO2 z1Tn8qgOw%Bz{bejQj~Ixi=ZG~$*0nwHlD_Nlx^y{O~$ z1x$lt4@1u~uj6bjq&<8Mhx`RPJ|D`Gbov!8f|yqa;g-Bw2_N&?_=F*^Vv07CSAFls zdG&!Xll7~*$e35jt6E-fu}|f->UkZnZrA&GWt?VSLlLCv*Qq-L=as>dbi6V}5c7IK zxFxTN!pFQ?pg;!p&{JqKuiJX5yl5U@_xzd%VJ7p6L6S!L75YytuRmTPpUSK5?>b(& zu|8g_PcpBk5v1}OK00t-t67qc*E$izygn9g$!o3fF|WG{40**-w3+(#O3%i5?RngE zUU^8;h*!qTT3+ewQ+W+prsK7(kB?XVZ_Miuf>d75{UvZ-_5UEbI$jnQF6Y05Tk<+D zE@obD&Nt-cq-ZmFo#~)E<1^Ix|G&MTEA>3EG2L9Acng|=(!swvt`Ua8$1=QSO|Oy(7dB#rc| zex;VzFYHr!)jXx+bzh8+SMf3C^*Dl5{kjQ<@&?-9C}v4IUaLe9^I9X^lGjS%V_qZX z8S;vuXft_zbtVEOc{*Qol{fLALBGg-e%@{D;E z7i)RB*r)Q!U!vn>g(+9;Vcb#X)rGCQw1@k#&m~a(iepJS{Td>Im{*!`OJ0M8k9i$= z)R0#tMVrZMco&ry4)oOP*F*?2nO7*1G}1563tC>^vQOnzwOGe%^tC=-&Yzjr!w6FK zt9xqTyqqja$7`twVqVLITk={We9UXm-wb(0QnZ=8UW{s-*V@^p^U6SyM!e#l*YfJk zK9yILQ^)Jou0CGXN0?VRf>d6!QUd2y{agckSR;a%*U!Q&c^wcw=Cx>+A+KzTHj~$} zPAac3fBiZ?({x^|k)#nX=ijxw=CV)aHN&Cf^*c<1Vh>|#nO7UO?$RDs3=f=F3`^4K zSF8wPUh%>$dG!%K=Jj>1A+HjOHj`I!$HsY$gfNrsVSSDs$1C}2 zAFsThnAbfBQuV9-ErIjOV@Wz*`67sUEf#LcYo72iubwE7!T3ffMVrZMMWo8BmA`(i ze8hBKsYudDzha)z^6JPwl~?!^I$p~<`*>9zW?t_iNaZytDR5quPdBiKRU(LaeIwkG z*B;?xUXMO($SZ@Q&E)kfzVs;j^9^_%eaLiP#YobKSKd=vUenm8^2#jK@j49CpxDF6 zADCAYw(im%emFF6UXd(Gr(aPbhhvX|% zUN(RI8Vq43+e6QT#=I(@)biTIK9$$H$925=ckuDbKE%9kN06#t%@PCWmCcfLyk>|X z<~2vSC9mni$GomWfeh?n{dALgJ=d;rUP~a%WL|Md(n!A|muPu~u}|e?!AFlZ`%{Xp z^6@IEVO}pINaZ!==D>NCxEk2QQW3x6_Sp z9C*NVUQQ%w#4CHTme&OKsk}x#rsMSmOoL(%Lk}{q<7_RYJ$x-8a9*J-NvB`oB8Yi) z5N^qLfIIlhsX0m=&Pc`OMvPjG8E%vFrR?XG%>ek-JE8|<{ zH55Urew~U7oL2@*((%d^LCos`;g-B63Lo=ofdU!WL(deGd0ll5XKjn|!`A-#H4nl} z<`sh^jr1$jq2=|*Lh`A+>hg5FawB}aR#!8xrxB#`8a^m+UaMJ>j@LR7#JoNhZpmw{ z@G-BuCL8jKqi8er>#%RXLjzuWCYjDF4@nyF%2=S~mCinu*N{hbytctKDE6@aKg{b8 zTMKCqpBoT3ulgrQu8x<5h0FOb;g-D4i;J1poA(>?a#FOJyy9A^_OOk=eszK{ll80e zK4V_1i?qB}uutW+bheIH1h%dzyi&hnUf1((Hp%O!8w2N+%93=vMu{NSukpeyd5si4 z=5_X7LtfPsZ6+^Q%f@+4hcJ_QMIuQf{i-j}^7@5+DzBQEI$rmM`*;<9$-Ev%kZKQa z>K{0-VwR-iwMqmruQkFgd94&a<~1VAkXH;vo5}0@7AmjH{q<|}J*M-@Mv_LnQXkjy zN?@PLD>hfhYduVZqF1=FaFh# zR~|*1$*X_!#(A}ZFq8GGB-5BzalV$9i+w7u{6}=WtYJQ0ai24diitSJVt0uUBCj6nj|x8S^SIan#(?w*No{pUcbXMD7<3! zFt0Wt8vUy16*#XLmZa0KSP{g$;)PrC>LYy2>+8D=d6iJKnY@acG|p=zgqds)>&F@M zs{Wgn*KYQyyhJUj#9)#lkIl%@aQ6)e{9W z7~cq`Xft_LTU1`{{Pk<)Skrl>B1t3tikYqD)scNFukdUguVpX|ihfn@VqWjEwUG93 zQgq5iPGU_Nlxq z_v?5S!89oPRkDqFz0B4^+QTtj1Lsxpa07c-DuS5Tr@}3HZ5BS}HT8BwUa1sqrhdho zRe905llu9u+f3)>M3P3lvLDj&n!rAl*Qk4SyuN^GPe$(~a}$17RlXSM{yNyh;M`BYwYnL1v%FbxW?)uqhqX|@)U*YM7P^IFZ4biCGy zAm;V4a7$img^zjNm2Su@j-t)fubAH(=d~xzbY6K#(uh~a16p3`>{EFSxm(9;8%%@3 zt9~={I>gpO@_Mdg;JoUyNv@8Ug@w!cFX5KF&Wnqg*PE$^yqpwmCa?J?R9;v4>sKcT zGg-eXM;P;3JypwV1^ZN9ODE`fMV#{SO5Mb~u1ApCKl~{&a9*h_NylrH2x9#jFWi#X zNa15%XHyJ$Ra3N?ygonHIIrmtW-_lxBx$5y^^>){eqo==t0qIo>pqwUMZbzmnAhWM zEu?MR*26R?ygVNjd>N{r{(2hpUNwLtd5uUxQ|!d2IkcTL8?96-!5=o zaV$xvUqeI?^GXwL$!oCiF|Q*@hP)~%+Du-1e^z;Q@Yk=25N0y3P$X%jU!E*2uW#9> z@~XO1$7?i9gQ8!~517}(Y%QdIb&m*~my;#wcr6t{%xk%DOI}Nak9iFmX2>g&qRr%W zji+&5YloW7D+5Uy@rt`g%d0p0R9;b|b-Z4MX;64ozt6nN*;+_mvn~&uSM^^T*uxqT z#JqkMZprI_@G-ANiH5wgDcVe4f2&n_b@bP-^FvJMwHiqp@p5KrdCg^?%4^17bi96t zX;65@yvMxS{Gzdk6|Dp36~mHr`V}jJm{+`TOJ041k9mE4vmvh%iZ+v13HRfAm+7LxFxT7 z!pFRNqCf`Y8=(|!CalZ-iU&+9Q0->(O{aUKtc^Ca*_+Xq?y4IMaC*BS|A( zc^O(>)7Yo-${eZVbr_~W;T5@-c{Oos?BRzk1LqaVl63kNC4!h&FX5KFItd^1+BL|K z*J_G3lh@8eDzDD|`ZXBBOty!ffyTTl$7y+OVxP)uU7C(pf0zb^SN0m_bvs)Nsb9@P z1Lu{^l61Ugh#=-QN4O=g>B7gnu0nwf>|y-?lX*pc*Ep{w5N0y3I3#JLUy)$ zOoPHJ<2B|rl&yv2b;=qzuMC!?%lIudDs_ zYaWD|%qs>-8tGT)U$ngbxSf0|uR45CS2JIk3)7(RTKy{XdYY|;R0yHjq}>m*K}TaNYaQ`#%)?&>FiT^4N21R+6L30 z@Tz}>c^zVFA$dL5Bye8!qe!lfmxYDP`7hy?yv~b@nb(`KhP<2d>uT)-L{Pn97 zgqf^gmDd^bT79dQ*9!Kjyq4mtwi^A4fN4;8rM}F(u4ii@dHrMwoL4GK((xK4f>^)C z3%BGoQuvtH**=E6swvt`UhVfc&TBe^nanE^NgC-_eY%#{FYHr!)eO<`x(}v7;Z?kf zc|Fe7Lh`!Fdp_X#lwy{oiZ+wiLtm)8uJPBe&Am+L zm5n5gc%`Okc_pw<cBpEu5{6@;0rUnM<_c@>Y)@^Z0H<&~eH<7I_uPjUQ%$C7mVHADn4uQcJ7yao#&^Ewi3$g7f~&E$2>K9yHjfBl*WVJ7nmMUqDP<*{pd zeak+TS5=&j*Jzjqg_pCKc|FY5Lh|ZOnuSkkE zlUHt4*{AZFF+j)b z_q{$|G0!uvHf${WKmwjBkWew3)mfsZ@Dg>#tucyO_=^6-gTDSIkf?ua4|fd4>1a@mdDcpzx}E zmU+F))!Ldra|FV@+9+mnXQH7HRfpGyh`F5*uzp0#JoNgZpmx2@G-Bc9SnJ;QnZ=+ z^~qM1R}X*vIuL0(FDH^T;*}kzto@Tyw(aI^SZ0OA+I=!HdDVgZE2j>o_415%0rSyyfSXo@=9l)%4RD1Z`Pl5BQ?@w}dyeuqS&VLEF<$m$14J+LD8?&1+BrU$5o$3;R@FHQjW)?t^Jicoi2hugBS1 zNM1Mn5IC=5mZamgN(3>lHNq`gewEmac@g|Z$}7K%j+YgtLD8?c$C+0bwiZ&q_SXc?D~=`U z^lOL+VqR&&EqM(VKIV0#l_9T6iZ+wiv=3EYz5MlSB7~XDD-=l@>6fRsme;rJQ+ZWI z>3EHXX;64M^O@JfY%L_O?gs)Hm{&Q1RC_q<+rW8M$272qH6n<4{Vd#) z*8$;UUW-Bvd1X_ynY`M+ukz~cuV3d|n9gf8k~HGw?5X87mwhU)869=Je*eJ7D`qb9 zYQxq->Q_Z|;Jjj3l1{&3MG*6f7jDU`kMJ?CubUh4DxqjIc};t_ab6=K%w&65A7ad_ zx`&q6ZuY6XN+Wf=l3^MYdzhEUyzXIZA$hg`I&fZjEJ?>JUj#9)#lkIl%@aQ6)e{9W z7~cq`Xft_LtW$aQ@z<}F%}nQ&iX@HnE2g`aS4Z}#yuz>2@mlttk5}d2nAf`qQtjcS zuL9>)d2IuGSS5m(*Ehl~dF>HC=Jn`hhP*N;+Du*@-fo=NQLE{^ijkxdue@$rUenm8 z^2)qI$LsJrK3GOsu!X{29~U9`Ny*r)QcMCf=G zt@ZIL$zfhEBS^J}V?Ga@SIN~4>|v=0VqTvLx8${1_?Xw!AVXfM6m6z{b$e6g73;5G z2P~%Zaw171UfEGvUK7}-@)~uyj@K7!e7r&*VP3}(r1E-gZ{WN_S&~k_!bK4C>LA>b zS1aLTUK_o+M*3Au(Pr{`^!3Jh^?@*x^{e`Pt|70IPFh}Xu}|f-snAgX`EqSdK zKIV1TIYVA?6m6z{MZelOuRZmq^U6b#M!Yg2wY<{Vr}7%oO2=#4Yd&7})0o#G1gX59 z`!sM~^;eNx9WM(Dm-Ao3EqR?67c;Ln&l>V_QnZ=83SLopUGJ}7ogmC){i-};%xm?P zT3##Ir}A3bQpYO-ra`fXsShx(>)BdJd-&6?zOK*Dvf-dDXPg@w)GyK3>IBnb+e8QuXVmoq_Wz zW=T3;t3(jtFWq@=Ru4`w*n^T2K)hA8|FDFaV@meZ^nAdXQmb{h-AM+Y?+>lo!MVra1e{tiy)*dsRR|b+a z;uY6g%d0p0R9;cRI$p1?@bRk7VqWD4QhCiP51dzZcmsP_BZ8RM&%!Nv9S}a|wW!XJ zS2jhP$?M4%R9@-+`gQ(S(|N5%l199oHZ8BY>{EHoXrklwJDQqe4`c3OUTxS~NPAdO z8aS^QmZa0KSP{g$;)PrC>LYy2>+7S2yhtd?S>i&Ez%k z?<%j6{`$4@XVZD5B1t3tifO6k)scNFuW)Z`(D=k&RGQn}?n+qpypLDqMCSD_f>d6U zHU-YBGPHp`tP(-Y>l@*gy!Hqm^Lo@{$SZ@Q&E&QC*~WPtJz_eqVkBwAE3bu?*EII2 zyfXjL@j8sArr5*C3CybrTMKCqKP(BHS0qc)=~t8pVqU$3Tk`58e9UWCts$?~6m2H2 z@1ItA-RiGjgCWdhd+2c+^QsKd^4i2cmDjp@9k2e&e7v$VnAhzHQuV9Z#=v=Hvm_m_ z86t>z%@J-f>d5(HU!SAy!5IwGRU470Qxy`V}sMm{$kk zmb_XCAM@JygCVbCiZ+v1jjM59eIU$a{i^=nm{&ixiZWw0b2uS^ldydDs4$!ntUF|QUVkbyn)95R{LO^a1txB2VWJP0$HR}7Lg z(y!1aT3&wykx%7S_nVGa?h+rb)pszjrxB#`8vb73yjHU$9j|pFh+N?;bUHR zeP_rkj-t)fuSJU*=e4KCbY6K#(uh}vMawIleJZaZCv?2Fp{XhMu>N-Db%~V z6F9GW?-dQ^zgW1O{}OJ=>%6#_dA)hike8F9&E)mnLY3F;{`%Dk!c5k$$^*u{R-dPO z%O7CLZHYIm73@=aEj^~=72)*pO1+JFU5_ADzkYflgN^ylQ^c@w(69<5hes^LiXXDzBT? z2F|OPCFyvr5<$#sjc`j|D}|4FjrhipR}4j)$;(-!^7@Over>KcomV!JG~$(7ujQ4% zK9yJOQ5~=KXljZ*^rSPdecbw_JzTIRa9*CX4eVi^2x4C6gj@1DDtyfA#jg!{T}wN+$DKsQ&d%yJXdGL=HA)7dGv%XV-5ZQIt?Zp&V}Y1shEMNILUf+=1* zgcrOdDC+#b&-0#h<_spw{(kuP<1p|2ectE$JkR^Qmop~^opmr?-OyxP`qj{6#p`>H znRr$I7=%~)(g0rSXvXU?B$;^K_?PzMrE*U}cr6o2jMv*DtmE~9h%sJweb**ly(zmR z@p>-*;&^?st;6w}j3(Q{YuG6(Ubk?}#4EZ!2(R}cYKA?ml^L%RmOkAc&i|nOc-8)N zfjz7fNsQMa5!UhAC1Q-%^IO}*YZhg9Bwo80n|P(S*01whIvlT$(PUeAsVA*?E#jDo z*PI`M@cId&X5e*m3ggw|DT{uUzu$hmZswkX^eaXrF0I!8fjMx20GVNinKeZpPh1^pR zUil)4@%pU@>v$~|F~;jA45*F$jc%0Pk$5Q!O}r+x)~|Orb~s*R&}3Wsb@MSRUVS-c z;^o*Mgx9MOHABCuMloLhWa-oG;mkj_AFry$3+!RFNMgKpim;B?dJ$v1o~UjUugR3% zk$8Ro_{H%$vZ2HAdJ9dqh1bHPR=j3&%*1Qz-XOdVK-3JpdXHqhE_>3VU!N~;KVH4L zry%``7De%6ol6tk;HgCDZ)BlkBAuKbu|XmhCOUq z*THxx^Dd6p3+Swa@fwCE+tRPzhpc#obIiocwmS%~LWr87Un}osy#C12r`yAfciNBF z%7zQK4y<9cSs&@%rGc_T$x!dkWGohe%?)`iQWO*A*hhc&(^x6R)=@ zyCd-$GWX(m4MJxftY5ViZR534v*PtPj+uBZuMNVhe_jBu$-@}0kw`M_VbdG!$7?e8 z6ol7Qk;HgCEW$coIU>e*U5){@VGkS1I~XtTZ%n-IZmnO7(OC!Mbu*f5OTW7PV8!d) zL5i7pHSP$)D-WV(=-05MFB_Y6e~{cQRgkS^9LmUi*Ff z@oL#m{RZJ>)9Ixh+{ULUP)6EBsrI})$>M@+o#X{}$^ptBCvud33v@%nh5 z6|Z+VX5zJMTM%9ma{_pcxr6b#4N0aw{Na`M<28nR3c_o=NMilU5@8*$u_DHJohfM( zuUg9PNW5Nt_~Ljyg3dY^uij{~E&XcQW5w$*$4tEHwglld9inFF*IR=bucul1bp5*X z<@V$C7WWi{*K(1>c>Ps`b-dmcF~)0jahrJEOxYcY*WrguyoR*auT{Pd$7>dvYzwb3 zbymFMIcDM&vpEQ_Pa$dsUJbV~UYl6@biAJZUHkEB*nNRLY!pe1*I5zP@j4=6jMtmr zw29Y3%I-+K5+1xbURR*A4%V-gtJ=ovtzA~Uyc{#}%HJ4-mwi?MuVJx_*Y!v;?csMX zwjZxy+*6Q#jSxwUms^B&yzUk;#_Pwg+r+DivO5y5jCd2TJ6h{k4m#^#yt<*uw)CrE zrxma7IcDNjy&(v%bcoujI1nA{)6`oTug6&Wbp5*Vh4$m6a!)~cEfYzM*V`hjcs;+OO}u7Nc1Pkh^4BI_ced8A^Ivv2ULT{$ zw(wGSSn*oKF%z#j>w@t538H4`*UbYNuO2fjc$Gije!Onxo`Uo%MkFy_!$nxfYmkUB zUNv8|iPuWX?nt~|yZ_>NjYVf2Y!6#LZyT@L@2q%z%P|u#-`XI&k|1gZUJGwxyzXb| z)9qm|rTus<fA4}+ zWsO^nfA_Nv$7>9lY)ijx-e$$CFUL&09F;+My$Vq?@Tzh#UjJn2)A5@5Z2R%5+IoRK ztQJX(*G>`E@meopjMo#Nwu#qd%I-+K5~o}ouOt8NaJ=3^lWpO(aEleM*&H+Rnpz%& z*8zx{fmiPv8L!KJWwD2!7q%a--rQ4=enpEU#%rJm>v&xwVvN_?f3=C%$CTZXc)gu% z;x)9je%+1EI@lgI{IhMmsy12i`kG@VUPWty@EQV9Gw_<#pYi%7OP{V^U6!^VuUXtv z5MFac665ux2yIpbI$jx1w;!*S)fd=9pGac7)`_r=*D4WXydElQ6R$Cp-I4kw z-)G`=S8M&+_4f|POGT4y;WcZ66|ZcLnRtya3BqeDM9sjf+x3jsah5(EuMhIuk5@PD zDM-H@B8lgfSBMznwc?XD@p_B0I})#VJQv4n5IXB%{i^+2+jy<~){58PIA-Ft z+!usbe~6la*W_r%Ya~mbj#ty-_Tx2~dkVs9sz_qI9u{F8uN)C$ye`Lp+OUTWf9+tr zPE9iLy5RS*7o)Qd#_MJ@*_M8FTW7`VTouJkyc$;p;gttbGw}NO8pi7-mOdS?ltt~w z>tpUI2(KcM#CUxr!a81`h#2E_-^Xp@HH@-5Qoly0UmUOXA9Xlh3(;g-cuihw#Vd_t zCSD`H4#H~$QdL$E&51`VGR%#+~cuUm~pIbzT%^ygvF%n|P^| z-H~|xae|501@Cvb2Ay@VepP+gHeMfBSn+y?VE4Uu^$0raV7z*x$+q;XrOb-g zVUC%2)qNR+*K~-Qf!AACFDX|Q#F)tKZ@ovS>`-iLD>W~~{rm2gkrYb363DW1Q zQ`IYEwNJ5JSeqBwkTzqGbnQ~8q|G*CnXL9kYVK|Bq0_?hj?3yOhpfh>s`Fh5{z+l@ zxu@MoiUw5Od1MJw@e@$FJ=GC04L#9K)Bog!rj{p9rKY~{HwoVRwT^?XAPS?k|hG_av2*4MDD=$3{}MS~jF z7v0*hwrE&GSy6mLNzvqnRYh41D~hrkJ}a8q@K5mW@8IaxR-cWC@4)AKeD<`;YhAW= z{D5A*{=cl(x}E=R{4n}GhR;uy{!b&^8h@)qkUadSxRe1QlCCA}S>FCrJeG?K4WRbr zfk$b(O{ye5fpWmnW9GRm!L@VK5&*8 zH3MXUQHw*NU2}omHv1)^>qRshz%KtQM=^<<^s4WU3x;s!B|%&Vj0Z0>X3Jv1X>~u2xiigzA?7!)dLlDmAG(52_{#s?KYZL6ufE12B5y zlaR>PdEOP8AGVrK#mZo;oBS<)%sX9RuCtJelD$!K6%{~kYH;DTqVVNhUmGaOHzc9_ zWup95!R6mH%2T#>mOAyuucY#wMEUygAYvXe%2T$sPLx-ve5fe@WpMesjPjJNy)DX5 zrt)@CUI{LLxlx|7wTDIdo2h(fQ9d)ce9d`g&gI`wwl-XpZ%IV?E~5N^;PM|Ct#FI0}lv}?=TTo8ZuYE0wO(h=Y_^L{xnw zTshUg=9<~Sypyc-T}dJDkhlLBg@oO)n_?@qx|p31gS^WT*9K$Sj;%$x$)F5hJ@Hi# z|Bh(BdvNm)o6XNKo6q9V?o}aEJK401+XD^P#_A2P#SiQh#E%gz?gIT5g0D7P>}j@m zx!&Ss)S}(eqGGg|&n=$5idj$;++xLF3>K91HCXTkhjy>BQ;Yw?fQ`Z5X|#9;xA=i* z@#)|e=b0_eF7R_l+F)YbwJ-J5%+ zvepkF7>BO#6~;aOE{gbEc=DVdBMTIrEQ%h&&+!z*&lY8_hZ|`vbEha%&1F(Wnena4 zTq(-@o6GbUWv~q$)XvcgChK)B6C%psr$d6uREaWAa+&XYG0k}0V^En7M4725Q)d4a z{)Wh^{r+9Kp$P@&yX3jb^S=OF@!uw^@tg6eGr8M21@SLZYq_IP_SE-zp$)f)awtaS zKGw?(D~O-T<$5P7m|w%IP*he!i)AHcJh`*=X8?i8K2C`OIogEVoHlJS{sg=?(|%+m zOiD;km^fj460CV;!=OMBtT*B}zM2=R_1xFuPxY6{YFf2CttKUgW;sv#%OEymP*Onz`v9p!|ql~yG> zJn)=ONH_T`{Y!)FU+;s^dE-ZnAV}b%dW^q`Xi&3{G(TNm#R{FF$Yb-N9={cs6C%A+_c~ZW!pEp>)FJv z=c(ZXjw_qupF$hb3oVe7hC7vQ;N!GY@`LAvA9^&}JF!=Y@?G)KYm3j=L(a_FGuU;e6|%M;i4{mIt-=iX|)CGAH2rXK8mr*fbLI6tM*MV zL&KUo%@0%J%MnzX;h)_O#(aA>@qI`YzO)w(wfOVnH`nIU!A(-g@^-+tz zek+pXY1QC)D9BPnmnA5^Lf?W&cE?ktzc(^Z&JS102AprW(K{!k6(64L5~7?guD`a} zZx7ipYs2sX>xmDLlH089N*Ve6&GwMSS-#-|iVKQ|DHVzjem^xVtGSLajC~{StZHvG zz~kAH&5rBeULx=-^<~F=2zhT%bP3$CEoW$;#il0k6 z3p%s!Vki5o_Vtk#KM^<0-U*b_(uioBkH#(mjWHL{2=zB<1eaQqIl>?_lF6(DnOVOx z7bs7F(r-^+5=x&zv%%afZ=2G^Lv@Bee3+f^PnR(_!CGeMFD?z4yPI2+Se6lDJT#UO@mZMr06zJO+faVKML zXwlC|XtRNPE|gv{bj1rn488f%P`dwAYf7uyru1_I`n5kYL$3sx`rZSn{8F@c32=|U zfJ|CYwZYIn2AMa2Ou^6xy+I7E`RS5S`ZAgghW^{ODZR{~^znLTXvuGb7<&7qA@k75 z)?}`4o6MMFlU!?YBi!P8PCXw{XTw!)r8qn7~u5ka)_R+xjfd1waOaEDITEWy2{ zs>wZ~=%*8xgrZN-Yyf1YsHZ`ZY*4fVjDp2E{(KORrd=9}`dmm+v_Vnv5S>RUf}*LQ z$fB|vk6#iVJ&$GsJR(nGL)#K|qe14JgNDj}rkK2=N#({%LuuWy)|75+n^I-4&d{<0 z46(#y9u}G)W$a&)3u2!@tCv6-ZVw{XPzJ}Z9X%yi#R)01LUL`v7e1biuzM$@d)J~+ z-|cuZ7T*yk@huJ7IREAu(p}fBh8p$Qh?3#g)lha$_z*mxF6ER+uFWT;Y~=L#QOeY$ z0ki8MOS4Je-nd;KdJBdwxsvM8POqf1IAMzS8d-J7(t1x|3vu#U6G76)>5Z3!Dc7Lc zfUGf7q73P`8)T&luFM%x23?d2pFCaR* zw9M{Aj@Td7THb8&7sPL&67zSJ+ba+tHXCJWe*mldtw;T0gI}wn5O2K~Q;0X!KSxL$ z((!(@tTfBT+BI@)bLtmg9@yV!c8cd4tjT@Yox%FQw;Wq0uV`?_Ub!;0`V~H-!$wxI zcC8%SnEGYJlcSe>`S_jhxyZP<5H&mYdi>eT)NM90w1Jv-VWsP!94LRL1|7uTpG15EyDmRHqozoq=%N<*p z8hb1i+=NUP7vG{Z$8Jh!I<8a?XigYfGJg~5zxO_|$qlZ0<9Bmd2A>1z6#l!O9+MDK zolW!wHZX}&b_fRgj8)R0ih}LNlF2KFoRG5MFF5Qg@C+-gL9z6i4_k_>=SA7bN>n(c z&nl(QLLD=}IV41fIzuE^M8pT!#FOG;x6hCswR=`jq_$L=Tqk+>;5Ohl}~7wnPsmAqWijA?$m> zp%Ivk(#}c)lIob{)l$i3a6Dr1pU~fcbf5O%ixf!0To{>z&KzlHwMmrZN~;!9O%fjm zVUx-#LM2a{4=91%BZApu@FTm`_@=aqyDA9Ik`mI4Swup{Mv`?M`V06C3c`F{iG_my z6tC#YBV_sH{L2IRQYPl)NWe!pSmD#@LnaCQcFBdIX70fUV&U0|Pc2xtS<2ifWtC8K z#(2sqF{z`yNVJ=Ug#r&}DY0ANpXqC}KgrC;xKZ?8OMR-yf}II+KvgC_p3MZ(pv`%m zo(N&ni7N0(9DT>&v0h+KLQLAfgPcG++ICy!_+x$2Am0;E(ddoxq>1)lQ_fq6*ds|bUn-7V57s7FA7O9*NK#cIWvsPk8trG6 zfO}Phu&%%Rr9oRxBtpdNE2y47uPgpM5t<;mngPcd46_j*Xz3QxPGlbDObrYyM}e*Q zJ}wQ~nb(<<>yWe$N$UuovS564{j6d8?P*1wDW5%Rq%0tu_4E0-Pc;JioPL&+x*2Ng z6LwT$GaCMvLjU{EB5Gam zx_P>THP_pV^><(04s0pYjWhicB>0V{#Nv$*ek zLtllx;QFu{7uE;Vd-2gE7f{bUj?W>C@`&UjQvqN-u&|!}5XVDO=8u#lWx+UStwUR4 z{H*VgR}Vg!;3akxNN9;ZvvL zaVv-g$F-}TrF0lrTGC}!CrYmDI_Na4Je+_eDY7aFwj6p7dypV`0LYJI1fW+546NsS z3!gZMs;@AFjqIJH_$e=u#Zv93XKmPUD-k({-b zqM*tH@gP=uz*)Ba-%$}Hde-9uvGQy-;PzBO$D)H7BJ39gGf|2xp+9@rpMrmb@ODtt zK+VBUdFmzCI&@Km;J5fxqCk&IoxXJ_c!&xf5+dJ-cnif_Q1ZOwI*E$-c$zTWBUEuK zDiTWp=1Gv(z40=s>=e5qb$zIwZ$=_dO+<_;W7*G%*va3S5!HCwmBees zQbW8BqnHNqLiq%EYmy7qTEZ4gSB70(Gu_`!jS8zB7O zvlc~?fjNlJe#!L{NY*MeC{EhJ!>*Fs78b5IwLm|=2gos6+L8Jzs z?1LE{GsF)MF=V z*P_jn)C_EKW;3(8p^so0>QUf)ALu7UEsMM=VnV%?c?5=vD$x=E8UZgFQs@I`TC>8m zPjL64RWqcB3SnyqcfL&P?ab>KMtBPOXD@8UwgL-tZqlKUk7&A>T9t?B9v}DHqL$e-TNW_-I-xDGq_- zYA3E{fLU=pF&77z7VJ-i{k%T`eq%Ud$zgKTvYw+%-{thT@?!o3nI6b?BpFQ-_-dhr z5KCH9c-T2G{S&b+!8{WQ!%c>Ql>i1fat{|53XCY0hwPfr{Bf9AR(9BinG5cSNv7~O zBY_S%C1kXzZ<=2$eFvskeZFtAJXRw6Kvsoe6s|u}EU3`DUVfW#QS!h^rZ-)J8WiJW7wG5xIch*X* z&#s8+uTXOrTd%nyl8k(86x`K)ZHOsn4WTh|_`tj>YYWs<92D$}sq(L7RFai~;Q znJ&3bNM*;7bUX@Pk5qOB1<#BmR$(6?^Q4q{PI9f6vNpgIqP|ae0k0xxcK7Ti`{F6Z zWUH$i5474kya0b;uW4orm>#je`G1yYp+B+MKx~)(==PuvYSk`#B)K&9g(GPmh9YAE zCGAEm5>5{mMH#20K|jrlBD3Ow-%g$iT)Lf7R<)G1qajj!Thh54_y7X%iG&R&TJZ5; z!Z(cvav*-}1|a8vZZ*0-fr%J3s*GI`wjD$8Ft9%Mt!Qcup-@e>1MYifJ;lCvWb5@9 z56pj4G5<|JiTQ0goJcs5X+<=@p;xTuB0&s0A_velELt%;@E)W_qJ(F)=2}P{;vR*T zwM2xlOW?5o4G+0OMU!BtGm$rf^K!6^#srD{BrFy(lTK1~ znVuXJrM;Hze8jC62^f5m2lDrDDR{u4Ubsk!`@l)fs{NIFuCyshjWA(PAjETghK~$k zN>Azc*ziu5Y52yoTNA_UWN-JEKuqY1Alj~e zj+?>LlKOm};2n(T%@EG&^EtZ3oR?FR7_t`6k|l(cq)t1Yh?A#j zm5Cwf%F+Eb5|HjMI^@?8>-Rau`aO%?dzyc+rU&yjNjYm9x`|B@dj&ndsM^o{D0nq2 zsX4E+a2&O-7dUM!UvOrDQDhZ9d*ReZ(#l{jt%$nUU4|9s_lQ=Iv%3xfULzWFrR2g^ zQzm^N*q$F~5hm7Pyv_tE2can-t$PX9TR!MZ3p>5d4s)FczqV1Vz51X7Uy@X|e-F~m zV#QfbUDl8@yn{lUXa)8od|wagF+M%k2&r#?&?ANPojm4ZREKxGnp|d#$g|#R-o$|XJ-+2_RVRqDBh9C|=?z(QX8zcRmM^o=W zPYu`xNd)l-ZsXKrlzLKf{Qx?$h^sx;5$$Jqup7XD{{QqsUb3)q>QPI*ZoxW%9TIG{ zeUFZ%taFqMn~((^$K?z#5KR_iw8YVta2l(WSx!SGKMjpMKFM_+DYPp9fiPDbm9RI+!cr!aKE!{JMVrr#@CW`))&Yi( zRyoe;&FC4n2*kitc>E|$?jU(_Fm)u^S=fB>ps~LDevgV1w@ZUygtOMp?JEsf1ZuG9 zuc`A$Mc|zCDioW6u*wtdCw|MR5woB`(j;0-S4*yPZ4L^vw!6q2I?|f897@5CJzRW3 zDhU&5ru|i%-+++tSkh?T`Lp=Lw7x)@r%*=9u|KaDee*M_k`w-W{>}`4{$CV#rZuAI z9j}UBwV8PwK-X}r1|$`Mgrr98UXj|Urveh3QfR{{6|TN34+)vzKAh0mKBDn^HRu>hKF!A=kXSL*ltm6d%5-_K%{}@#lxjZG5Y*cv)Jpo1o9p^w=Pm$I~Ps?bvoujV@T{tGZ z>$)9mg=(THygf#8+(H}e}Y-g zE|N3FQJxZwtN8bj3nltfJ1bq(`hB=Q+6t-y^DJV!FRbBrav1$T}r zfzDH?P@rV1?zyPhJ({u>4epENyQEp?I0ibh$fLimCI&Qz&-y!QG)~_(!x|#FdrgSsyq2tA9opJ2 zxv+8OVJo!PL8DAn;?S@Nzcxq$Et9@!n??) zeS}9_z%WNT@z61S9R}73U6V)YSV)pND~$HUkg|nFgM>5~E}elMn0M#xR55!sa;8_) zm{Al)EAuRh!#8lG<1~a^TjK9-6rUVQ<cGjgQkJZqlf?(=PVNV z$=xX*)g7}4j+4lz*&asEF&VcZp=-2bP22j;QQc7h8NB0v2#H4|7tKIOA`ihimvF%3 zhChu+!Y30XQNPZ~JwZ_B1d`iPB$1P&DPBiV>_xFE)S>-1=a?u;$E<}sBoUV}TG|$L zPTf-3&~@hzsK;x8uPlq6vs`@F4gXM6sQF47X{=Q4nQ3|uyr6J z6N_a-piiR&J7SnGcmwqi3h`z&k+p&7qp6}?$S&>rdvKGBcy^5B?mThvIH=5`&G75a zlR&a)o{Pb_!(XMNQ7oLYj-na~=D83WD2p^I0v3-(^$xJC?&V2nKQSw7JBRnR7HeW* z1^pq;WYI1cRWIdfpaj!EIorxek?No|R_1Cl{1^iC^FsMA$CJwW_ZTx4zIn>x$%>Ps zNKud+t$(|W=|f-d|8ML+&n5kME^(>J1C^A4f%yoonN4y?k|V=``7W9kE>4M7&rT#@ zA>*6^4Yv3jU^3I) zisFxxh8nb=i`*-KO$7=_$j3*_g_JOk#zB7^W5e_^;}CGtAIDe>gR70B@z5VJk5y1b z8Wa6-jKxSqDH_)}8rN8iMkLYL#?jb#0^*7^zHv0Zu^5#oMPnRCV;qZ-i6jJ^R%11lQ9o}-CBh4{Z2&Kt&@6b-q;0`#B#keC*T`VJM$)(fc#*?k!E0nN zUL$EN0lY@iI0AT$q%j2W8aa@nKZ94e4@aj^^9qb55+jCba$Jq??HCsfD<&<;F$qKB zjQc2HC6%q&D4lQ3+NMFBI5FrGvh6A|}Oz|117Cq)@q z6fm<8aZCbhL@f%KS%m#0ut{W5z|2C#F$pXaSrjm{5OGX$8CeuCvnVnatjr{S3df7p zUAG^o2ua551sTNO>^T$bpb+7>$KsDWD{4yF-e&Zl$4R|Sy#};`cYQ! z<52cL*BBm1GaWk7%??Kjov>8nJDS#I`1u;2R!+|ptM&zYX=4*&1ZKau2duN7Sf3~0 zd2#k}QWadFZ9&bu&3@|K-bF?DX)A3mwW;iOE9c$Hac#QjA=2!jF0UI;u;PcOw2d<{ zry2L7An&uWxWr-b86p)JMsC6cx|XJ>wFs2ZbW7*#j{eH~POyqk?Xu{wke2FL_+o;s zrMc{c#22UOu-SPhL}e4oLY>H0;SI=Bs6xy5Oxi;@fo5^Khu#iR2R|X?oKL@2}4Owi`a>CPU%jIW2#HOn{$Z+f3xb)JMDYmv>NbY zAxTCCMZQHkoFrO$(}fJ!8qB}Fru3m{ozC<#ze6I{VCa%PF>;jV_akb#hyB#UOz4Dj z99b5NbqweOYzmojuq-*67>I$G?uv)#+D;^qg5kmlcICF`UH(KEc>x<84P<-zN8?%@ zR@>xFZNZ1HB5kAwK`~m*Ar->JfZ*7EXl@@hhifRL1o(IkA&rh}$=}EJ>mb1YL|5Kx z+2Lro4t4F{yvH3-YeWYQ*6GN92X|3{0*{2@4;C!wVUi0MK2YRa%U&_^MgwJXkp2qECM2^K|5otnp%!5&h+$*+}H-M|X@R^D6iA`m61adOz zHU&Jsh_l$c#X%stj@*YV?76^U1s?1mU{J-+I%2U|gg8Ma4cfasESG2Ey zU!tK!{LjiyVE@7J=7`Xqhy?j^NX&3uv}IGjFEza#<3Fm&F-l5|nmkxZ8LTG9DJgMk z@^B?(xRpivex<%UK(i>Ekj&8#7O{;06f?>7pgGDhHiq&bW|YTX8F`k%oeHi-xCg2Y zwpL@;Eg4M;pDVbYE2v&vP(7+5_8TDMt;mGHTlyOwRFBjG-j#3!$x*WGeem!gvzFnZ zaULFfih=R9s>lO0EAjx%icl2Zs1XBfRgp(%R^$kxx0@(|66JVdi1lC47wuE;|)EAkM{ ziU?SS$btxxEJH*;mLa0D7$QnqhZtOuhiF#hA(|Btvko!1A`j85$U`(MB4!<8a77-X zS&@fmR)k{e>jA?*kxl>P-HnDHME=Qg@=r#cwfZMRD5l!y>E(tc3I9aKb13w~m|E-< zi+@7<(Zat4{@^KdgL_0(uV3b+}ISJ-xHO;rONB5@|m|WsiNkw zpRv^QUHTM2$m2@OZM6NJL0d05=-8P8&UzhP;JG?I03yLmG9y~v#L!0>LkE)133274=qKmskR=McTZ|XP1$SDrs?ivp zVZmcrfG6@iI>J>=pv9YWO-VQzPLKv2&%114Z=9^20wdzPp?%PZqCJ{~mrTA7ox$^o z-AOk@;79i34rA$+iTi}O!3eMG1h!pHLPn3khouuV@)Xf0?HXp`S|aiHB+8zH*F(M$ zZ8jdk=P3IB(R3VlIvV5S14NQ-}y1({+R?R1G#Yh1E(@{UgCVT zCwgf%a-+&q#Q6-WvtKtKc(xe1rWUf_3mQnluxp8EJ^pyGb(nF8dVVy9(yEEFdMbiN zsJIPr0rPae1TLJ$G%V_T9;riHn0`D2_goy!Nxw;7=3SjjaQa*Vh3YOb{E!% zwv3TaVgQ5@$=YHh1Y{uV7}B60&iQ<(0M+-<%~H};-Y&(KIMkc~@?aqVr{9ndfCcm9 z*^k7T(I~AU0`Yb}N^3pi&;hHy8W8B5a&bpH;KB?4G}yj@1J1OQx_wI*ietYQ-`ZUs zXc6?c8Y&fW>+cZ}>rY1>IEF2FRxP@2&0A8iY)EtPxhP~T6Sur*IqFE_o8NWJV{t|h zD!GmTg7v7Gi80|qp^IQRMr&^=3)aKAFs$4#iMZ5_y?zIliza|ruIqi`3;=D^q4Hh| z6bs|ZHKNK#>8GILAb}W&g3f8Q9Q9FYAFA=ucL|b5fqkR&6_BuyY#6aWEexYo{)m5g z8UnBq&7^l2!9jp?AaJAN2Mqnb)i}lJzv*S{n7~riNzZ!3F%Bx&4?&z@q3jyIag<&p z?wZfWp){Q~0}%YdvxlEg5)k-c;{RthRdEb?A9vM2e-?P=m<=QjfS0&?juAmx=o&ZS zwTL+S9WPpGT}noEH_Bn=&caf*nM$9gT@6}q5|nFrrph`BvUx3wjSDg@5OA199M02y zqRd@rfsdUsx8bwDT;spK0Mvv%Abw3MX!B;~@qIp))bDcv}6OzDpFDoUsMh@Uut&7|j& zdaP%&*#kBWm&?ecIcQdMOo>6aGY6we58Oz~+=&=AsiYp8;TfPA+}y`}1j@$^rv_ns z9U0`Pz)8w#z_$i+a1e=o6*^RkEMq4!vl+P?s65@yq3MpEZ_46J`gA}>0CEewqXq@% z>nljaa|xLB(NGq7k@Qrc^?V0Z3_6ZKV`-kog`~1#XcAVqAbAG(c1ZASCpZN?iag0X zu6&x7iQArs>ERfV4A-TY_()I1@LBX}lDqYk33G_OXH>6aKV%O%Kd|bK8QsbIISKEl z38fAat1vf_k3-iSF?D5~B@zasD9(bAi!IH}lSq05jC3rH5q{QBC`ayB&T#yhG?1EH z(+6G?0^Lu9;NX-}&LV|wE_N?L3N|hy&$0oD1b}>?PHdz}5dI}y5X+*o$gK!hf=ti|$mM)E%-Y&PW6W=#F#* zha9K@Cm>M6fx^5;LZd(}2pyVW;?XL*Vl+@3l|d+1Q(hbjR#0OxLBufaP|QHnpo7j9 z&?67kg?c7;m~`@3%#rq?(nJljvL^zdSd5dYMl4VmN}D+^6n_Sx3|w!WVxpfE?Ib8B z1$JQH3f(j71|!|nPkBRrV{i}Ol)rtM58zuMWe8@L@z>MhA19I zF`b8^cnk`4rbZ`)QXb9acnA~md13hLX`~=oF!q2Q$t)ZYYn^T|UNp>75<~|;5PFuG z!!n`o&7-+TT-35gEeqd!coD9M(@&g`y`LaIb?7;)p>W+dAM^M!X@GYQE@@zyzg!%L z+*)jGH{cg~7ZqvGV%@*gCoR1l{s1P@<#0zau`UB;STknl!!IC{2lGYGbI=2(bjL9V z-yWoS?8|Yrj&z!PaX@kKLs6mA**VC@@Mx}cq<=*v(s#nPKpMzFqqf+eO+TbR{tX5F z2gpY0>>^YnD>WM(km)5yEs_$Z1771+iU$u>p~%0HLgqRTlFPR;NLFTVK?IdNNAQ`w zpR&I|N)m9)g!J$;oY^3ZR=%EW^x&|6k0*S^u-Jn`8d)Fb4fxE07&=FV72$W1!;gPM z%$tBv4f_-z$(L+PL3iL z%~+?Gt%V1%4jKv90?At;yGS-4c{0zF>9-AB74U4x)ust164M110Eoa7g3+UUBax*@ zqbEEw8xS}{0Xjya8GxoRf`!)Eo2~?QNz%d>4szf)(LTN~41(oJ>J4mN-!36ewYp zj;2fi7P*BA(A8Hu-9V7)(}@(a>1j^5iineAgab965S&xOh%iJjV>y>ZA%N+GkGGxU zVjzFL#tja^@aSf`GX+aR-sR9&H~MCixo2dZkMX<@rnYKKbhwka7hjLkR6IW#oRvI> zkc9^)w!sZV+cQA|iI0OlGsur;H4?_T5P(k6V{1Qm{zXfg9@|Cx`vUDFv?PYSdF}+i zi?U1dfYpIc9;Gq2miyul*zAIR?#kTmDFeh$r|H}_X*pgxo z^Ljl|&D#{cr70*|R ztYpsGkarATwDko*f%Dyq(gQ+3(xL+q;=HysJs55$qKJOb2UHb>Xt(K99S~htag?bl zZE!3TiJx)eMd`t5GcjUF2zqrZP0B6|w$_cC!o>~IM!X7fZj68Od^#F5_cwSyczl9# zid%_axu06`b1Sc!t%!Ib;>b%>=$%6gj3xz_XeYS7I~um~U(5&CKcr1w8no=~I~5(^ z=o@3d11&()^c+sQ!O|#p;ObW*9%zvFGmQ0m8XhPy8|`K`x@XJz@ zNMe471#SHV^rOogweP~6@j5gQ#bBEMy3e5bX}x)o!)-l^B+Of4e4LW47qTRcwsh#i z!1f{@*neo<-*B_P9(q%j{`{j`_jed6tr%H@Bx8Wo-(zNfbUT5zZymV71u66n*|3-8 z27tWJ?Knp1^4Wx>m-M7CF04?}5~FFYFB9h&1uZ9erp){G@{T~#I6bLnAZfVS1knjv zM!}RAO%?04GfppW;m>eA z$-WR?*zQf`1*b9wAu82RJ`s zCVeTp`QyEqTQy9H*5s=pFd@r!cG_Jl9#s6>koqXOagi5yF#uW+Lg6RoX{7p+YY zt&J6RR!}>E1`pwGDjH0@puth1!Mm*u`awU)yGJy5m);;q3N*;fcnytO{27{Wc>bhw zCA*;lO-uNNEq|(pZ@G6eH_zy$!x+Cp6PQ!Z^@jH#ZlBgtJdJ%sEr-~mJ zOcCK>VbZhDfcScP>P@e_|6Xbkm4TVIBT>}Gdu#fmiJV;#HZc?a{!c&PJr_e3ApyV2 zxS}uWYqxbe@5fZRihfp`u6X%S8I?Zf2GOq@Z};F|%KL{%;a4$!EyDV%82>I}_|-rK zcg1#5E03U+B<10L9yMtTjXz6Gs;2L$Y08uR9+1_fid4krq?RZ4TY!#j3FS-sFv zQW2(Q0sW)&Wg5dx{i?D!?fO;bOh9BQ3j!MG+> zmFN|Wcq2-~6_)u~fB)h&?xC}+?_bRAhZitrgn@Cp-0EE1B@e$DZMv0zaGT!bn6$!E zZYik|Da+A|RH)F_us44Ccw&EkoQ;vp;26Cza}Ek=qep?G5E8VCR};o>*coA4MHz5S z?C&ukhmd3f@;@Q1-kAA-tc;q9j|U&f(I^?85%|R66N3-9fqhhE6l4^ykyJ*7(VLv` z`ojCpeU7*g#VZ`GaXO#K~q z=6%d1d!N9NMq&t$VJJ^vNVw?vxldMOWpy}S6nU4d^ej^oqWr%8SgJ2k5~5`FDXv`L zL&c|-6J50RZ+#nPqIjO8l|H9ez)dG*US3PX+O1XWVnG7yu5jzh>{gCwu@R)qc)e%* zwV*Wt@8@wVN44ELsNVPo#|mAR{iUWZr*oRnIJ2EII!~+?1S|{&P^}CRSxxsnLEK!Kz%B#-o8CgzS)6 zl@E#(mV@IWtjocE5hGP@!r-Zu_s~j`GSib#o{|M3ZLHBLP~`c#9;ZN!Qx;HGLiw}# z^o@V1<1x5I8^>=^}LaY7`5=o5PT_UXGHc-TX zF7E#h{{N`I-Keww|N0x3sHFWVjb0s_R-~k_OI4aklec{*H2HiDebYpnD3k1CdH_7y zOsCLfTpQYn5}072$@H$NvB*$LY3f{!bWTkAf-;6sM)sECeU3zBdUaygeVEd(x}B^* zRzH}5MIU0u)3)gHfthx6z!bQ2Z63{O!W4{%H%x(>Q{Aeo;W543^+q|;`d)fLUF+Z8 zrfdDyw^`o4Lfn+M-?Rj4y?;1s{g0_c3wlTm`QEL-u*NrXiphKH zWMvI=*CbMS;GMWfSy!8%L=Kxf3>lc$X#W~U_U_4kFnI7=$ZDxc>)3aJ+u|d~g6v*V zu>ZpDjc{Solz+4P(#mz&8`GBETaDZ{>|UpK+q;Em=%V&6H`?X&*fy=-FUqHxo(MU2O+S=SPwy-Z#L71Ap%=IFP zK^-K*I;hbi#WpLUEN2-wr)aYc-@pK=I{`|Lh)O0SpYi{)G2Bbm#Jxjx5NHV42#-CbA13c=Btu9pViIFaj6G$%; zNsRQ{BCI3*f{3w3?!6i8RXkH+ay(*XATPkOKv^i(1ErL$-aA$PUo8gQ>Tjl|7L>)f zmEXWfFZxi6gFc9bbje6!6fL>S^NhLq6HXIT)}Mw@$u*F!B2JansD`=vH1&*8j;8yC zdO^(1w7Rx!pw;zxur%&fX6dy^Fj>0g1kF)L_0{zm?S527r8J`pcSsBU(!V!;f=FTJ zP2sRxjdl;+$CL9|k*P$bDm&fEZ0ukjr3u=toYCymAWhI??=8EG`FGe0A`z!Mf z8+8imeE6-RtL0V5w9y+e;QZB^w&##PRq2c&=Upq87lQ(S!wqarsRymn%+B2- zck#@uYPa&hcD%$DZOL^oMViQ|R^&#v zvY@$PCGVfo{?)_@smiHTh2A*gV;h;TZ&Lh|V~~in!u`1pdNJyUw+U;}RNHV_Y%NmU z$|>zifjjm+a&LnDVc^5p85>GTFEQ`~kzfM9r}3O0ZRSN#9W-o+0G=L12h^L(9dZKn z$V`FUDN1O-y&|fH;gz%@a={K;!!JaeB^XjP8p#0ZfFzF{9tgoj13bYH3G zM7fn_VkkccAkH&Layn<%|09-;rh`u$dH)%0y?-~UlB~wy6&O7cU!%tza`BH8A5j%S zb?f7Q_e0Pd6vX~DJzqJ#&@VlQjRm{`gWkXXw%$OLTv#g={uSv+ypa$S-bbI55}Y+%J`s-~PrQj9VGo(ca749wbv*x(3`l zWebrCzY=U+z*%4dAk+7-7DbA}XBAuL25AA~4g zgFK5ku9U}~T0v$(dmYK&kVm2&`S=_x!)jDX=XN6|^H=y((EwT;jHvYkKx~ZV|Bo8|$E_3)-Yb@XI7@sy)V}LCcc} zD1(L^Jm~Vn%@_8sKTizV1{$=hm8zVF*CQ)Uv8S{ZQ=9z6)VYGG+L;HN=*8+c;z6G3 z8O!j4a!MACB5;xki-F=9I&U^}vE1Fnr*eeRUO{t6UbL*v#n#`#=oR1!h(4zE0~4t; zkn7HgkTHzo8Qn6Tv{<6lCo;&pU*D#O}U>UYLDK>m^8(mKLE+oy-Y>%ow*f zuiCPI40?A=Ht40{eLxtZ&l@cC_ClD5&4iqG!b`NtWi1zyPt<$kJL`$7l^A~++|_xt zG~<*BceTsVvU%aO6b~sMP^R5_6Jas|W1bsL7=@!h8XFG7cWaC1HDRvh7oC_A5+K$X zFFHI^7GcwDn8*l;F6x{{|9aT^Q^;vX4n)9>X6cR;>7V>%{~NAfy8rFtRnPZYx+!@QFK;$OsXe5}o5e^vUdM1NhA^jR+yl$GM8oAT-lPvtr4NiSukqVSZo6gJ5wuP|OF zC4XbQCMxwy<3&;lN@GGnT?nRt-1`%i;sN+26?&dr4rvyzox(ew$^tK&!rO}IjZb)M zI=zw#FNP|UL(T_Y28DtpA`1n}P!LBM#yhGCiZ9FiOA^>HfZL`wMxkx-#wZ0Zruq?8 z)}jhbT(x+uRds*AWV1c!dmq*SFPOfzu;E^0^tUTl(j!P#hKT3CWLQh(On&^7D7=d+ zuUCG2*)NxLwdHjwvww|1NSQqu86kMbyUn(W{$$s8#^1p2XPM8xfdW{+1chD+4Gme2 z4=$c3`C>PLr>~SK>B|fJA#9@xYHUjShvi8mz_4iP%Vlr&c9<}kp77tHb%zjP#64D$ zFTz#a=G16Wgvp}x05KVi?(Y&QtT$gEa!Iy|Mx}e{7=4D=YKo`;Qv}=2>!>O z%C1*n6oZ~u;q!ut6B1Stw+j6W?!hi&0z9c{C2~AcmJk=0$kNE|IL}WcZwZoD6I-dd zU>d=_yzbgFzd$H1G+1@Vhs?`5;)!Xf#T>L|NoH)(cs4XC4(?ZsLrMnKuId2d18*{-kH zsgPWr#7<**QX}0m^5YDXE4%S4ozwuvaUY~5wh}uJuNHrS8h$CY7*haIhzomGafg1g zy?E--a%5uWIQ5z_MK=qPts`RbA@L>AB@w2xRvFT|p*Mf@x|*f6Mtc`(yd>-}Qt%NQKWr z=knuk8>h>}00ii@n{N&#Lv1)?zvUQwh;JT1gW8fCscZ8nFSHnL7-hh6-t{cIVb>wa zbi=kCXtki8iUl=Rz5mTI-t|m@SZL!UfqbYNMG~)=ZWm$Q)9No`D5dm0eI;+HM1efo zQn|=h%B(?RUJ7ib{6cN_&PWJj5OG|Ir+r|WC_wKLa~QZBegDfe%N%x-vv zs_+$AtT0X0VyQ-UQ6M{ak2Vi=14_sIA^#;ED?Hc@GQtVUIneP0*MbZtRV%N`^rW(3 zuS|`Sl}}@k0aaQADU6O{)>Bq~S!bc9=qU9FFim!>Ypv)CzN z(&weA>J@IaUooxouB(3lniL?7=j$}JUq56@OOue7Iy9?aSl*#jHL)KSz;UVS{OANf z?{aOYH25^(Zt7Y|kl~le>N`Y_v@{x3%M0BI=L1o=t>XnNDFvj_>U0(a&F%eqJOC{Z z?MJ}7z3-1lJ~_5rOWFG+E$ZRtCvZUf1<9s2eqs{cZ#f9XeX0P8s}#ne)_>^j93U{d zxoG=kD1`P;CQ|#fEp#2VkM}fw9br>HB|wxKS@lwPcxfZ@cYvV6+QmZvz_yo2AmU_| z@lk5N@i~xQ7+fR0JWultMRK&RjY(P!?*m-5Pc0-CSb0aWLj9fa4m@C`;%flqto{uS0J%&lfL_y zzE3UmnZyhFbZKbR>5CHdC7blkeTwNDd{O$2Tw~Cu9G5ZWtM+Iv8^>T}*I(b%$)NuN z{oDpqA+&VMGQ(O_U#Oo@%nu<&SYalS3ROW55)~F5S$T&v*R8xif&fwNJ+HX9$~K2z zOl7ZWrLr@YnffZXPha0g+q%BGRVGGSdc%L#*OdS_SYIJxR(*vnZl$mDPz4h7rv#c; z>BjKJCGFMMG*oS+uNSr-DcVm&`$AuTL+yLxhpjO5HBs3cq_8fildht`XYs9oq3?^V zxF{)9w(n26%I00<_lIXZu)nmi0j!+E?sU!QTwB|F{!P zau|lb4D+ol7y;8Qu0=I=BRQA})14S}Ckk6oc~{mSfS%7-Ce9ov0(SipxY~ ztaJOpTJxPK*sU=z*7iT3L7F4v!b)lB-`GwVlg1oO8cp0YF3b#>$2~uSo|EV@*1A-+ zv#f?z(BgBNtfWpQhms#VbSmZxlY%^By4V3HgEk?%xpCx@TKq$& zv`%-YDqXnQ=WKk8(+xM5D3stI8x`xT4~0zP=FZ{E35FD5IdOh;lhw!jkYnWIxiA*( zEpXZ5<3)cCACEF1dXpBBXbg!*lIi0euWjYyMZ>>~!pDIR{4lzTmBT&Ae0=E=KHM~s z#6H}kBCPvxzY;O{aH@R>=*D4*EUP1?CMt8IiMiD9=WXKRVa(LfY>(%Sec`8jF^*8%vlVvv@oaBXJ8IxfH^~- zWadO8$z;yf8f=uUGVa2-mAMP>nS;**_)NvegU@(;WPC>8gMG=lG5BCVoc1~9M&aYY zC(Nzf4%#A^8fK(%zIe4rVn+T#gmp$ni5NS>XT!j-cAqa!xWGDh|@hpzp=MXL4@Ew(b14g$u{)x3`VAmIbK?~^3(O0^x zDA+k>qR@PG5DJU_9YEni1jT?!gAl|<#l9=}&iLlQ5w?&M3 z|6G^JJt0{2lNLG@*n4zTmh=&7t`z5wA35qav zC3ZR$`y131t)6{QK9|)WyY@XtYk%3a=kVs0&DiL6PdkJ1hPhV&X#MvYn;>DS`jnS|>nmZjaounm+0{uGt5e##P8jN>DY^Zk z=yq;2B4{$PADKXy(jg^wm{RJ>^#RYMcM3$xl_Oi-yY7g5mva zxn0d|6C6qzVSj%QI=*ndM~4K{cFEp_;9Vq2(Acq##7(hsxu6^*Enuc~6WcY~nqI^) z+NQ$o#pE!um8nV&hMpWvY53L$9$y(s15eQhKHVQtafSwd3e(Fcfvm;uRCOE={1<^G z5$4zSjsLi|c{z=L9LAr*tqZoz4`h+N z2)6xK@^V~z?+^bCzxtzZE59JL$1j6-M0?Xq0e6CWcY)uZYuDCaiSem9F{uTM<7|tE zE~8y`*N4z+fn%z=m?ae3P&n;{Jckz3F7nXQ$F`-a&n(A|8pJNo+0YO50tvYhsp<<~ zaAsw0R|q7ojG!TZ#JuKSa6X&-5wj7H%kB4pCXzma4qJqYmi-KzR>aX}u=g3$N=XIR zLTs^5BKF#<%aiJ;G8`3q5w`ogLBg@B#$$Jg$x;%IUKdqsH&-_KXCx|lb-arrtQU3! z$bK#V3@j}#$6}j~38bZTC4lC9oPcmS5RMf}%_?!8Gmmwv@5dozSo4Z7;1$ndLtI;n z!ZQApm%psc@(tXq)P30LCP>@@6Tu%i6#xT*cg^5=g-K| zQ|U~M&&YY#$c?>gxU;$SXegRA-VQq8DdA7VRZYEY4b@uBJ65A>$baDZ4%J>~qany} zh2*I)6XRuNQMG^k0^vlLA`?zDTxwX=Ru2}~4gWd!KR!=jUx;?x%ABbLJgg>8j`omP z;XaXZ) za^KXUQ}Db4jEnH?^YFL>Z^Z1z*rL(hPJb@Qn+o!t>=%RhYQ)L;M7J(~Iv(1f=Pdq? z#58q2x=kile4DCv!ITJUg=?QneP0#mo6eu$2I1}sAv1|cANqjRzn^D3bRqov{p8);fG`CCPb_MX5^)*5BCemR`-5xbufhMRNmFGl?{V~@l8|jpz9t7Q-|iT zd?g3uYhu4J*uq_y)Jeb=QlF$?>fzfaDu4F8hWA79yjFtpZK{IDJMw&3)d2h}X*^`+%fJq|GQA>EnT_@5{)T9_ zuUJBkE)T6^Uinw2K6RG1zNMuK@eWyPpE_DCI~!_r`EV-@X@!S#E8ObMaMow^u{!G> zj=@=n`Ozjw0ES?Lf1{NFB@`dW1>j7&2b>nG!E}-0r``Qui7*`LHxZj4VoF%UZ{eTt zW`3eNyP6avKR)SfE}djZI_w77VI zV-W0eTRuj(itZ`N$_DM!SL9OLn_6;1)!P$P3F{f$4L2`Le%y`8U(nk++J`u1E={tp z2wIx#{UES3iF$;WCVnJAipA4s|6bQ>^$hX*zg$2)c{R~SetLniKs+syc#&dfVvXD1 zO(KUEDJRZ=dF@^x4vEm&X)X|l=_xozv7VazX{EkMxkIqidjB-*^57+ko8$Hei4t%4 zij{#S3Zj$0;wac7JM!c62h*w5m4Nc)BFUz0N6j+(EF|JoGY0iT2EW)s)wx>9K9aa=J-hYpUHQLFP~ zVJPDw2Rl*G3hFu+G>1xsm53(cIU{d;Ea-vrabgw=$t!buLQ^94{TU>C?XL=v`7!~u zwT;)ECFAu=o!Bd7RR*y;BPb*&lj3D~Xo(e6DG^Pzr&TUW++a@wcQTo1CL{aqr!(>YT5O+rp33`Fttv zM2drROAaNI^LNAu3w_oBb<|W$FKBfe&A?$*s}fzSx;CSB3`sf45o)j{1Z{wZSqkrY-h;2fm>cC$k2sV6m3;{X7vl2?pS8w77~SuU!w#$*?X8;Pu2x|daGh| z3FXj5_v_+bnoM!2%1tznDv7==wl~4tUw$q%Ypy!Q{6}0wWiVdZTpxY-F7$)Uu2c&H zr4LYn=_+%5Ri61$A~RjlX4~klyJUg6Q~P*IXejo6Qp$Q~-A1GKI=Zqt1Uj$Yw5F`2 zfR8={yB_BKh+O6Z=(pBej(Rj|E$QM${?2~r_c&(U9m^Jdw>)?o_J1E&o#GumJ=_1O zH&~_>B6Yx6Y24e&gY)vB$K5~@1AlMmMltY5K!2eP{J$-f3>EhuoIKiodAxkdXj=r= zBA@h08EvbUGTKT6T>5K;Y6cGz6d!FTuIn+{7BJc}-|6l6@LyF)Y9w_G{GZc7Y9xJG zzuU`w&+0Em(qPtK4nRU};6L|(aYxDI14i|Pkrk$KAM;%*Y)Slo*}~rpUONNFGzH#Q z+mTMgrRiGN-fRZPiiu;f*mV1thzHu+vFSdkr%m@sk-;yh@mNIeX}*lP9p3OKS)T5< zyffd5eQQ;TkaYjwofQ7*9^#T)tMQFHtzT1?E**If!Iu&@g^lUZ1x9mt)Ng+AinzR4S!!I;nQ0ACu}z zJJlNVtZaC8J6GKQDC>4sdn$}+S$C=5kxh8oYT^zX{%**9p5t=+jcK{-Kds8#Zwyku z2|Q|42`r*2Jebj*l_5~;1?o^6YF;l;rzxm|a;p?nchENiqt-#k(rDj7;MsWxh-5?)C5`1u>!O*uV2vnke}`373jGP&ef z26#6~O-sH@hWdgdr5m@?fnjewttyhmsz!@NBPd%c%UITJPsIi=_69CuarCyQs(ye= z2j5u#(yC_#DL=~=NT>EJ&%x5Hq3Km@B<8-nK9kJKFJ~o8%(O9~NEclR>idWTq zL@DiW^|!T5i!G1?W_Wj&H&i;zP033q3h3==i}`+t)r%$y?& z-)or(Ytlj5l=S^>H}x$pB(AY9LWUVm>9C>rTF)%C=H#%o2K2u8Je6PwF=;UCrYExx zI4s)}JTdYJ9OV@3flmZ--$4Dz@nyrOKG4(DnO{9kol53!Fii#i^}rY75VhR;{phb{ zvKMy=R7ooMnagRb@tBU|p5>b-dF&MbWM@le%(7Vr)Wh z#>rO8tbQchZyINoY6Hfl}8Kun%eiqB07OsT9MRIE2WafB&dE z@I^xMZ~!AKgIF5Re|#*B7$cpN2Por&5_(x|R04tIDX2^je6C$)_%N+Aa}c@jb8>H% z#n8};dE_p&_D3F@DQkwtgY^;|d~qbfW}sojtEYesb{t~=^HPmq_8XdTuuigdHw8K~ z<~+>|sTfSmnVIuVS5tR8Jn2Uv^k7&0hE8t16}Dx?MVs^l`YW4sfDQe&bs0wDC?|ZB`@}kCISmA z7G!!@U>UVu*yRnCos1cih`ZRpggwW1CF&UaD`x>q*@03f(y*Lnhc&`S&kX>77&nVsfpHG8hlZjpHW+?@K$Rd23SzS>D-m6u}xQu2iYeoP7D8+PJAvxA+b_!Yxu??Ei0w2ZV~pIJpR)sNdCE z%@z9HR`d(V(q``_y`g}{wF28+boIx zk{48a-PRu*tmN3RvsHHZ^aQQk7yJ&(>Fjo9ogl%X;_80Ms_32SONap-Zv8Te4m%(U z$!}H(G#xYnZr34dnd@%-jsuimT%Yo zEzk>}pf8H9!*s7=22&9$3=?0tUYN)t44sKVbx-61cp~FbXzr-)A$@kJ5z44NJ&SzS z8gHNxr7me-@SrTH%Bp1K*)OPrK5*PPL9M6yta~`MHz5ze#7r0|ztQ)>0NgS)wn!kU zc<0G79g~BRr-KdwzgZ$}jLlDijw2{`dT{d4;AKUn#)`{Ct^|l*MHBAEv`&N^$zs>p zt?@S^L8R~0HB(k}HxI_VY1~PSGB5(-XH8c36YJ&>%sMXO^wYU4=+3x?*~<)P7h}}t zds6x;-jNc0wQytXoFx57`fF9JhkvAaU){l36#8oJ9{^}ta$I*j-E$+`OD%kIJozNe zQ(xcYCUc?siqBpO4@2XGHTCj;P0U_Cx)#C-+eWnzs@Dn^uKeb+myh~Lxhb=kPj!%* zy&Tc+cBlG8f2rBarVph;$;Xq$Wsz*ha6lQYGWU5&@ZXreAY+xQA`g?6tlI<_LKQ|) z%A;z)vnDH^(Rkx*n@F-G5u41mfw1kn@%^X$|BPQ>e$Xqw5@OX6rgir8GnkdkzM|3Ut}A;8f2*nVOKD@D}K$~3!6N*e1*>AoT=u-P=Fhg*A4cqH&2C~#?!j1NVD zOja`9qrtQ8Cx(&I^EpydAK7-bL(O}xSF0}TA@xh|h>#9tttUg|97)Tq(GssoBT2heZniAhVyW>&O*Unq_Drr|>e3@g3lN zJUD|f=q{Q9NrSoPDd5dU-Nh7ExG{Q}`Wf9~1a<<`6P)6f>D$<=TyCT8Z7C&quZzL= zMbWb&3qN-YnXtu<3+WMrM=un{1+zBq(yfETPL;Hdqh{bkaQ|?asTPwp&bXpDIxLoj z!wO*IgktuS3j1H%S%;`aiol*utR07yyY_g)-FdOT_8vGpR-I%6r`+0`M6H*j1TFsK zFehyyIB8}ODcbL5*cg=ySckunk=5?BNI)K!@~Bw+`e&fdlKB;o;9Y(b+I-LTv!waN z097!kGoMJFMQqvW%p(5n_o_zg2>{Vw$q&naC}Bzi_thO{vp(1lezF)D5=Aa$%HfrD z*EB+ zrLWd~mo$VXH=pxljL!j`1o72+08RJ9#kQi_a)or{wRUf}71iC{Co3LjFD(Lrh`vOZ}?o9f=^ir zK9AY>T#$^eOUAASP*Y67YD*bLlUuMVj0{z+T3c5{L zqt-8F=%K<_*A?HdN@(a=#{HK|8hh(Oj?mP335fncPF(b=5{GF;S|vW^!GubDy5+B%PtHc$eu!&0Ckg5`Qi%P66fBt0$9O|JGbBwvCN_;wi zj!}t!6_UoQC9fNVVke*hL)8xmSDG&px$`o+T_;IXU`3AzX2Gn>w?WI)2`Km?)QX63 zv?FIJUL8#`YG*^b>Hi)Nf%3subUtHM&wcW+gmAI%ob!$dOCS}os-7- z++U%bn29o;+|RynTJ#eh-9sMSc+8l(Wv&`ifAoM&Cq1TqaH%3mLb5ttG%@1TZkOJq z&7Km%GT8uXD5a^hSo=BQh7>K4x_tBTbmy;?{O(V#W5?4qK^aeFFKi5`BHwp!5#Wrc zKcg_l(>v6UjHjQ0XX<#mM`4~co)+zs@iavso`yh5R7>@T(F8@$P<6?wQpK^D|DPCQ z-MT`f?W{e9*iXJ{h&^@s*AKDp>{UbTU*Ag_VyDbybX_Kodw8&pIEmH9G*B<*qS8J5 zIqfmk9&P?dvQJL4dv=P_=<#)`eIUhXRh@u%IqruTWQPMZt$zl=5j=L1{CK<^ih7);FVujpuh6; zk6Ztw>7NeDBBl75;77b}cxP_KgG+pVX{_ojsqLOSlw*0p(zQx!D0fogu&dx>rYGzmd;P$Qgul* zLIGv9sG`3jDX^ybFOXR`u$nwIdoP zP{6-*;hARlYVeKT0F@HhN_{bBET8%1#6{mLQpL?92NM8QD>eRu`4K_&y9(7`T-OuT zVa(m*%j2{&O~2#71DYORy6`NBHwl7Vi2Ex_@IO~(eYr?629oAQw=ueStgQ(UPMlG@ zny7K#NwlB-l#L??wO;g!w7CC-D0ys&h!QMGi{BZ*wq)o%Lr7&7Wexg9=EhcozP z3w8vdUlfAxeGk@ArH$@E^PBaw$`K7ue!NE}z6 za6ec=`rP37;@?{+0; z>MtuBlSM^Zd%Fl>SoBVk0>A;VWK-DFPa^Vv!(MUC+xEcE`m@)~(M6BosS_Lg=z6b(auX9{fsU-8;n6Vn{+> z{r_UGtIto#vkAZtwC zRh=NJtq)6B`Ctn?k|7&=;}n4DE4{(#0NSxC4-6vDBdB1yw|lMCdZ@({I-gci{O2Ev zWRbP6ofD`DKF$~@(h$liy=7t=Z}W@0}^#Rk)& zpMo#5`j_^ekQO~vRJ2g>nHrQ({{r>eNE)b+QH~i(SGEz@BwvAbvifvkN3ygnP+v$} zDef%rr1({`)hXYeZ#ctn3Qoj;s-bxSYgeRF_Fr=IoW+IJ?6=f_@dm-T0w8%^SLRU0Oa) zmhhYUhaK*;nA?lz7`TbCSGdz_QQ6R_saY}^_$2a>GzU(41+n*d+3_I-(0igMfN=v= z$fXL4+&GmgG&y(l(y>mZN{!`vy@lI+#&c0)IZF`r*vR2fDiY%u!8Smh1Sm}3OO-*| zs~&0RVj3SY71`F3V&gukjQIOp>(946TCP%IP#j-dFYFY8gJG!nRTbAXZk(JY_vh#)D~Z>lUoHo%voa0KG|B4qcU=+i~0DjNPhtY zn_bPyD?#c(k4mv+_mq^(V$;B)S#tw{t`ys1Q0 z@e+dKRZNpAhKel(1gi1=ta`U+D*uqYPW>a50Qb&sP+_zyok`Vxh7F(yomAWr;zL{N zF5bweJIO?~k&0Wxe%Y7WCDs~-Qig29x$R$Rib-nNBYUL2x+?nTvC)l4w7!$Q9kBnX?!Afy%tgNV{=W;qGuon9u z)YjtV7!cVV_+RyFnlvVFXxv)6??$%BBo%FUdXw^dEbaSk!e~CD`#|7O?)@R@ybEiD zoZ4Ye<%23@p$>5?^GIuQCA(yk;j*|rZe+kdoK@Wqi^xjnfK+4B-r}(6K!jytw08EZ zjM`5C>KlDevOPe;L{j_>h>r6+K!Z!AT6}q3(9l{#C3+S8fdf&C1v!Ps>9a^Ic01rF zz69sW38lBZ!ORgTWcBu0AEWjcq{n(I^}Nq^={QMB*g9*s-%?-F z98IDlIoqT;iV_afRw_k2bQeuhB59Iq#;GRxSAybA^2T4$B;z+wpoo|7SHvG0?4*(W z3|EN$^9BL5U1=s%tq%X zii1enqil5CdZzt{Dvq`Hl=Iy9d=cNT)w+J+j8j?BI1Vi`5=XOIK3@plyLw% zGf>~pH?z|ls^*O7#j8*)smd{Dne`zsv03PPkEW7(mbu)zueY9X|c(S1e9$jN-rhSzSVZzazL@{Ce>)*2&UTb40Bx`J#;_Qs@f z(nlmcdAYm!x>oY_aq_*fEOUCax<_%P+Fltm<;h6jeAAiJh>q7Pf+jR&8KUPAnwz*c zWx(cgLfF)rY9XN};{F?m0p~J&ik^L}Hrj@~-kV?WCGNC-+)^95i<5<-B`ZgLNT1p+O5 zvIO;p3iSj{!oQyg_YZSc*o1l#d0Zm0YIme{V>0!${IdH`v^2T@ESVkeKUZybr->U& zmw%9I)kE#795BAeSfBehl}~2tiN13u#l+=HQva!omm&S9#4aPzf1>ZE^q+s#K*|4#a3iPu8zqzawmOX_2Dx~9AiXIe&UleL017@8#(nh$XE$!g z@2q?u6VDNydLXE&MRKHFUeElb``Yw9@#mX`qX*xlI@YIwqwd*#*&kFgVtrs2?e^{t z@uwHwmuYr4*lwWJs?+bt;6nq>$IrH`S(LDj&cULbN*-5Lx_M5k%;R}eC6|{MrBTD8 zGzQjcNl;A!`EHd5qhYm5T1`?6iSjtuknVq>9Ic9*SntRbfIdlo$B?ZoeM^?r@>owk ziL55l9KF8Es90PP&YYahZjL#6gZ}`>%?<*@|8i_+GC#kf{u}K2XQ$MkvGwjwUH^<8 z^_T6VB>f#j z{zGk^B=cW@5h?W_BJ%#{>!BP|6Bb3 z;QwL%gPYV}*!920f7TIG+y8%_|G_?1U#m|-9_#Pm#7s_FSrappC9Kkid&CDPW-~j- z#R>_(Ha<8p$C{L5P0S%-viz|+!x6*k3P<|~b`Hm_DW(H~uHjXsblYa-JXXCY9C3T*x2I8t)foQd#1doqA#3&gT^z|v3mmPSQxG^>Vcb6! zMCPvtT-x96EE(CgX>aKMw7j%5kYRPtC|w=y%=PrEXC0@0P3Y3a^Sd4b8~Qkd)aQ6#D9_eRVU3~EzklD4;R)0l2VM)Pl0NEYORJI#smKj zI2jKc%f9^M+c#gy^rh^}1ID%T7$lGXCqC_ZO;;5Q@9baNFHE)jt@m&@fYdd)-j06I zQ4y}shD@am6;|Km=BC?I-A1d!Xd*T>GD&`Spbdyoe<=rCQUIv-XsqaKg)740Y)19c zCgas`kMJC~>Qi8-JStpd*o9EDm!uqzXdpT5X7jQ};^G5N%)tb9MQ+%YgW!(^uoxRuN>S~MZ zh~70|@z(n8CV8E6ur1QouKewnTFvIBUE9M4IPACjfN@RMG9aiXRdV#rf1rbQTc2*) z)mr}Lp^dK9B}d<~y1bj(aR#jNwQno$@b#-V2b3|i#%o#c)Kbx>ZJ#+GD6dvmpRDwx z!&Ge>x3sX;SX1pkyDjU#P0lwygVAWLwsQ>Q|Z(dvC4| zrKEE42E=5Q6?39y^HeMo$~!#96X6}Vp{C{5bBJ?%Yo=vdWt}^2>)Z|vwueI(cY9uv zN_jTzgpOXh<0kCgwAXB`mr!ei06f&dx3_pLW2IKPvap888%zOq;gvaY#@NJq(vAL?$A z&WlXfLAi$nW!x_ORCN)>|6F;dUgArxuwA|^kj-jU3%RVzvK_47(rxxi_i%aEdiBEI{)sPk51ZZH-nMwRxc1HB_)fs$m z*56~@Mj%Inel(uKA^97of!%z0r?H~^XoYn#S1F_kR<$}|AT491nEl#iA#1~tJpT_# zFf$G*usVzHTM}i7zD-DeJcU!%n|4{j@-KBsvQhtSr=+Zvn5{b{g^JVT*#oQDS1RuB z6fj$O^ZGkZGjM>vrGTpnNYh=T69m%wt>gr#4K{N6WK1b1%i|t-{7D`gcKxrIc3^?7_Ist&+vBCG#y3ZQ3VqjU`i`;_q_n;w9cZ^co0NgBntP==oD>JC zo5Ob!Fz?bZcfK8O4lOCoph>oN+lV~q6Ho3GjIyAbV@eY_ zgpE0SOM$c=O=O1-$JAaokv;kwVIa)14yYMTQN80M07c7# z66k_9HuE?&ysbPkKP;0b4uD+*%IBN?!XU(QW$_ss9LDK}dyf95;a)>*M~f5dG~Cxx z8}1&RAW62t&~2@7vA#O`Faj&Vjr!`?LlL8#Havz$q7BP@#lD}4WoGtqk4DPF+HN7x zIegBQpfNv=h7xv*^ruLVU&Gc?Yj@3SOG!4~PKL;1kg~EDo?WmU?F=fR~b#6tTB75f}v9fXpD6UAnMBM!~3#5!f;eMmO^i*fI+Kl=x;l zr|d+_D7Zm?b5K0+F-Zw|D4rs8IViguTwLI@%QV*G#HrO-F=cy&MY!6^mU7AA*EtY; zo>yf&jQyCv8F4Uyund7WCkoQ$zQt$6Q#b{2Evi#caLU$rF<9qFF$0}qvOKSfx|b^(QRh%X#rxmTjE5dJbJmH$wqi~M=IlF$IjuT}FlUuwj_4X84F&Qg&U>lr zfV%w&w#cN=y!((1Bk~zqxiUhki9S=mh;PjHhraxV?A!ovjld zL%$($0GfWooFWwccC3$g37b7TdZS;9PL?#zGxdmE;e~YbOs&St z-KWN!A2CDUE2CE26;7!5E*k;d4zH2f!F~FB>`)`{3rQL(9_OIg;Nm)i%Ml3f(uH1; z2xD}NHS}fao6(Uxz4OHnQkt=#Sxb`>9q_);1OY$X{&sui+*h$K;k{;?2n{am+kQ?7 zMWqWNN2s_}#rQ0g{52We319>amF04g{!i*`3LSy{wEaEQ6S^TI`b(`yJ!Zpp>i1jy zE%kd^r|^rbx@`VtUt&?)*SAik3dF*^=1Qy?DHMB3k^ z>+j%rSbqzSgEYjIb_#IZoC~F!b z4>oU<6#3DMYLsbfkh=R^2(RJ~ocH7*X6Ph3`D}SyD32%Pu~r_&L>}*z@%XX470Bad zdHjM$#bTVAc3+OxcqhNz{K>EL_oN-}eE0nQocQ>9k6NHvv|6#Kv7~@nVo_T%(*Dh} ze}~$?VkbwuJZUcMhO(Gzl(r}*!B&60!j!sx7Aihl0}tZWt-C5G^7iw}P~=h8*&vGB zjx>jwV@)^OxXf~r_R~r7aagw>JO3|J^0(;7fSj~^L^8)0i1hlLmX{@oixRj4wOwOB z?=9uIi+fXdQ!P0cS-`JptSWmeWR}!)4WDy{vAh`zLFHmG9x(vX->yn%;t4(Ps$8GNe_x zIf|}VQes{!b`lP_%OoE1{z#A&63UfF-OIm(}DOYH$1Q_QOIy~3_M~?`$sqmKA z@Zh$tmXKD%o2R1u%Ro;q;n)=o3k6fNUu$Q7(#g(dmYw}V9aVQ59X|Fl`H~yOsdm0w zBp;ktxaNRsVKcRRG+Y`w-?EPd(6mTo1C4@$RKJp-=w-T4yXoELd`ar)eETb@wLNR+ zJtU3HDO1;fCFnq=vX1C`$F@K}`2d4oYdq-KsQyslAJ3-g^Ka7BoUWj0INC0=UW2tS zGLeQBImM3pV=_A8Gek9-jOb+ojpiu~7V;!i>{3?SPR>LHr;;ooRZH{|Qp?I6 zn`2Ez?OI@n6sxZ`YM+*OwV%cKm}Z_DW{rK>j@y>C=Kky>mYUe`Qdj>(&!4|j&bhHc zkOo%9{h~;jp@&^iMV7JT$9k8Iy1<8htBz;2u$zr8&UcJH>OW}aA8xB>X}Yg*|4rm# z%_p!rTQ)qmwQa3W{ZC9M{?Juyb$fIa$(6LNI#r?TzlH_9tY*w2qPG$yA8*TtEC$NQ ztMVb31wI@u(ktpm(;Lw-t_C-O)N|ZoqfR{Q3xWEjMP)mj2CmMxSz+qOUOi`7x0E%t z=AMn|kyPFahodJN%QwtFTtn(vx0#`f=YwPo_soA)WxJ%ZhpDXWz)EGqUs+kse{*t9 zNI_-ilbp#gjP~bAP;5-#aJBz(^?I|Q+@ES0Qmt6EO>#}d*4&Hspm?!y73k`gpnGH6 zxFw+8ctUOY*4A%<(%Yu5ghFL2V?Uq@HBQDp$7VbxU%lkxF-W>j-?R#=4ClUO?KsnR z>k}j8t)_KJwrOQl1m^8Z)7QY2sKo@(4)%*kaHquf%@V^j-0vW zaLkU#JgP3IGnL!V4zQOK9L%#-LRKDq`BA+hc&{D8s>b@*_a*C(?vjh2*TziFAQmVv zlJlx~x=?X}1BLK$`dxV)GWENCP=1UZlZ{W5syxo9a4Hb}^*eNJ#C2J@b;g8-%yDUd zcSZkAvmpFpa-IIJzNAi^e^l?XU>Yjkt>4FH&$%%stFgh9T=SeQ@H4WzK5arRJR=-mR+1I^Ge_7duTb!HLor{2yw0CEIa-}S@#q2Ch z80O|hPRC_gMc|%ur48mav51;2*6qXf{toGJdCdBm&LZhQKcJ{HoY3E^(3-hyb48ViR0<(>e=X0weH&sRNH>YsqfqbychS!>GvZYny7DYkW%Q!{7c_Y z2sR@UFn_3Fjv#bkGE6gQj`Ugsg_M0jQc2E2{iEk|4t}kFkJopIhIO`dR5t)$(NVz? zm?BFG&#G?$nbk|Z6B9rf!s?WtdH7$?t<9eOl9AE!rF0^ajFGy$*w zKZB?0&lwQ4j$(a*RQX=q`%h>xY9mKdW~iUvRH~mJ*BJS?EjIG~OO5<_%S=l-NyH~k zo~W2sNW7c+EOl1KXN8I+Fqrk)@y!Fh!AlI}i);*}u@+<7&W(kn$j8)E-9dGgj3H z>i-z%%$u{vJ2P_umqv8A2RR@b=o&c()SJwVvKCYn&Wy&M4VJG(!CMLz#)1bGE_Srr zDqkC2NQj-&SnzZ7sFd8%*@VQS62As^kFpJT>hz~<9h{`J>Ea1?0(wi55l@*8wX!|k4be3W zDY^#vMxaD+U}6-yJlmR5Z!FKu4s@Mr1d3F!OpbA)v)WCR8LS#e+)!hI+;?PVOo5z3 zA!k&M6vYXm;*zNy758!R(&U2^r+`Jct16qpas2~bdB%coDX79ExKJNGL8VM>279(Z zh;*<|CK1hp3*Nh9vQM+5ZBjdl0QR8IJ2pN$3Ma9}A zx#4OUho6qaxWI<-I}M{<#UwNuk1;4yf$AF_)+?yz5}-bcYILsBpdQsRYV_9V^o_O& z!IK6SK_^hwlnwS32|!QUfCgwlzGDFO(Kmwi02C@dEdk?38wQtjb&EF7alqmX8&C=Q z1ilN{SO2TfL8&e=Pfxr;#hX;LQi|O+xVeBM<4ZawiPZfo7BluouOnW|gNZqgJZQyP zoRSC9#S&Aft|yQKSCjtyZ}{gY-6P*1?cbBq>`Hp?tsEC5PS$sn{foNqbN)w5K-X)v zFp)*P%^BeI;1>275UWd!+Iv`~@mfc4dpJUxVT=W%ax{jr!i~Prutm7yZriuzm75tf z+p=!uu<@2x#1n2?WXmg6{6Z!CP02*3yvDTVEslNvWg1wLO~zvU^JR_*)VBmW`2fB_CVKl#sV=d@y^T%`dn?@I}5kO)_ItBp>-GwekqOCYVu~3 zxY0a3+=K8hgv6ueN`}5WD2)3V3o^lRLMZ3e($F|FT0o8C zr9OE~KIIBg<7`cT##r#!F)1D-Bo5&1W1?SAjvghlGo{jJ6B5t;(_^B4sG>P|E)?S( zwZLPgMgKK9m#opI0(~qw`uE2~3!r$JN}Q*l^c>ONAX8;C+iUgXh9~^FcovnXEzI_I zuZyP9E{}=D9yiTeUlCrNjfbAn4HcFfS4!#8w`t?Yq~&Uux-HgvV?7B~y3FV^y`;m9 z73oC7!kC7n?9l@=J1S#v0w$=HS_RQtQUVpqMfgy1`cKVR)RpV8U$Kc?jseL;hMpDi-Xgji4N=u92Z4P(ML>6ox;U8u2d*& zG;=P5He$|f^ModKmyZ6z@U1Dsk=Uhc@Y$8=o7o}TqZ6dWpmJ?Cz9F+9?b6V#XJt|f z?p1&}57(v1XzXA@5PcBMBBjRO;1n1xR<97qC|xfG+iHtS27)cmO21alV}8PPfwf1m zc*R_^?n4zTJv~}ZOadf+YNZAnqz3E7dC$xZtZT}NBUywN2pqNmLhWvPv-)7sxNavO zZCUx8SB}n-787vMJ{pw0mZxT(2%Otob3c!^uy&Uy%5F`G_y#KYY%fWYCp7pXjl;9I zV52`jHcz%UREEeb1=qP^DO}>JI%usf&EIPcV)ZIIi5xiBl;!UYTuh{@0%fEs;$?@k zF1SL7o<~*MvZl(b7!G2Zq>gV{Qy$n-_CRayw>gr&?`2tdzdrb2+4L8)VLc27v7JllsRvJd(7NU_q~01&;ia<^283O0VI4$FuTm&3%+~P9-F1c<=etQZ4KsPGezz z){RUBmYSjG^}_yYy|CZGJ%fFXT2a$fWfC0XJdmnStJG(^U7y2TVqUh?2s}>u=xaOz zN2~oOs)g)PoIRld`hD^heU3QDrk11a^Lg9aT5~H~=qT871`fxUvpL4`gtE=8ZI;z+ z+EUw4>CDkvY5yh%-{>d;a&a!T+9mo1y8;Vkdh8eX<34HD6B}K)+9l z_yCF*%b7V3`CMJyJ3T=?3W)BhM**ak~j9O4xjUc4vRhNq^lE7s6j-q zjn(N<+_?Yew2Wws#;*qkl<4mQ(HksrGgtFi?x0M4(V<1eFbS3MS|*|KVPps&se@3i ziZ014UP_U3+$i22t3+LG6wRS9yZ+hHZUz)j&`xJ8c%M%@ZFH-O5`_VL-UZCD_(<2a z@ma@f9G||&;3Gy{@#yQ1iM~>yYbz&@9uplRM4`+OSPoh?`svXU`CwIEjg|v3|ADXO z62$t*%;<=eIGMse_6S~N>NCwHUe`Ji^-)ptj?J#N+qy0?L%6js#L%}5sapg7vra{* za30$_RI|Qj;UL-W3GeGGo*BB;X|4}>&2QySxP^ntL$_wRqQ6&TmxG;PFc=JQ=!}_n zo_H+`AI93dbGTW^s>6F`u`1*&+!iMH2pD@Pr)D81)k#lr_}|sV?Xfzf65@W*wP9g8 zMdrGchvGzylrK22q%y90v#?3(qDwiQ;_d!UrGW2J)!EzE!Y2Nxs?Hv(h0y#q4ftI( z4#w*;GYuL>!vu1DiVU4bT@H77(9b;iN6?FJOmo!y7XL^t;dY#K;KXXWp8BiHOtLOW zq^oL;90{TOR{~W2V*f{fPI>>GGQa!^T+gHh{8#Jo2r%W(Ys0wH{(YLTHA&@d;{Aah zMhB36uBHcDSU!hIh&9q?yCFqkqKLm(+Yx z?&q~O$z)Qz-kypcAmbM&hGjl?wwg&|aC=WS!`B6T$t2pEUeC<1C3Z5Y*gq+^K6mDT z<<>sQ)+OdAtLo`tTq7Ikyl&2p#JckUJpsHy%UCmGf=mFd0nw=h1XUy_I%Jj9j)+~R zLyZMxJ+oXG&tfc4chVNt#PCnJet$s#t?t*&w_QXcXR&t$YX1s~e99U? z8<%+@a|Lhs1N*8iv|$-$u;y7ASx7NntF7GPda5IN<*sPC>vJiFeleVMsHO9l12* z8|#V=lJ=BD8>o$9Acwk}&BCyckNI6nBRG>15*h*Jy<5{HQG_Ol+K(-Jp{?u%X!6Kfp~(nElT#8jQU0crP-C_Y+olFZ zd1=+ki`FWX@&YN2+G>RmMA5^uu&+3mmDBEVf_%tAN2uB*QPvS}KJ4?al%p}vE`+tN zZPI*PimS*s;VkQzu~D?oL=DWDLw%gKwYHaAZ$uW>NyEd~w9V@xK(_|+_^dBz6#Zdq z^nFZFg!TEbUYnrFRC@MMD3LpiFgc1B5AU9J>$X;!yHtUbr3fckfI;>ko3f*i0cxe> z2Hf%n4nv--65DN9OEL882IfPgZ9Wo%4pdptY@h zNtR3kIckUk+RkyqCUXG#@W*r@&@vW z(v{TFt5~vU$P;BVB?2Rjw5`kw-{o(||Iy!F%!%dizf+CiTj8Bdj?_SlHgv;`*-X(2Zn^n`&K(#(qGNHKnjZMt=W!=bUfD#|BX<&S=C8fR4Azd20BvMOZHmN- z;uAV`erU4#d31*Q`Awzz`D2axd3Le-d2y-wd1VPRQwsGHDw4opR?U8g zA8O-LrA#)Z00)O3_3)!!y6jPIU%)%dnqqO4G_Rj8^v8Pg#f}e6aG5hZ)ZyRAAE=13 zZ)4+7nVCi2M2q&|k#FV!+awUgSJ@>gU-S_4DFl z_4CS7exRRQ{e*_{1O4*UkD?}sme`0Y`;)pfl@iknZHlror9Cf$e#?uBe7FpipguG!vky&!ds=C~ys)`CkgK zd(l63MEXjSVAj$OhmbA)A@;7lO-OtC9=ZHJhBq0Hq`zZrwaGf5Jn=N(Rk2h&aAp1D zUq^WV#WbGVjGA(qwK=>e(`w1@bhWrTe77_e;rsYFYy&)jcEg7bihbrrtL^&fp6;7m zc?oUDwhse5o|NM7@%5#ldyVH>6!eyGd#1HHztOeXb;!J>v532BUtn|HfsCW0>EpX^ zN-MD8iOa!MvqGGM_D(_o&PxPG1wKPftE=UNcrgfMs1L!K5QYw?b#EJaKkEi9@H|p1|&lCM?Rt6szhkIOypPFU;&8yABll&bsPvxjKzT z&lAV5)N0EQga3x83(N67;}@OmVlus@>g-#ZulMA?2AqW__s5UfYvUK?xN4iLhQ!gz zNiVgU8Zy(_)WW1!*{2lN$39P)uM3Tz1lvVMP1k+?{x#LEG^6%k2nZZaH}03)Miuox z_NZN3Uue{JkMMxGc(bD~an!3>$X0l{;9lnh1a+}jLU`&@u3s`B$M+B9_tI(?vmUsrD`MX z9du?hG|lbyv3i-`RmkxV4qjGw^`rb{{QT5m)Z?DN?4e*Lab&!ZO@`|UyqET&phb5216pdQX=W0GH-&SE8 z$#}=!3S-k=l>?WB5=+=&!c_jX^0kYvcH&x89G+e`t*$6D?vTf(Fpj4O9x+H(8NF0O z*8^(P8xp!!LRIFSWG0p`5FnBlDRm#|#|&&T$Whs#qW2TE2~5Wfd_A6dH<`DnSiFL7 zk_zAPo+R5L$v!uLQQ4@X_ey9)Lf362DdAw``TiM-b<%ZSwZE zJU)}pcjY0ex4cen9x&ysX89JPY{BzQ(OHf1fNVc$!|Ca?v0#2jS-rSL9fgf|g>hsx zDer(7M}#VhkCn}egNmaq)J!u}I1UGS*bFVxT&--=ygZ=z1Fd!TQ4mx!bEC~iTB~~d zSPFa(I&G5_pi=p<;>uy+$`Kx827aN)B59z4WFv?0RN9-}7)Z4S5>~#KM0Ud7iRYAN z)eA!*wA3nb~l z!fs)-(|d(qcJHN86^-iRTlZdARWyn|qk3=AC}}xs6~m?Fs9vQqP|?Z`#qjrp;oB9% z+Z6GI*pQ&|eML3the8I`Jz>+Bfo}@i_Qx4c>sS4VB$`dCCD|E1ket$kW0LAa$$7wL zh7{`XLM8cx$U`bpgvwFLse1XRk_?u@NVyOK_LVF=Uj{1~zhu~+vr7!UY!$N5;e1^m)@7TbyOg|2m>TzHO#JvCkG9%`02 zKaFibUu?)c7k3xobd{OarMB41YFy>J@Sp%sRmf837osn8(XP>6ahpNuWlx!*N%FhQ z7n+Kzfk|8yC$@~^3;1m*Jg6+cR{F4xOSW<&7#os?Bh?Xe?*>aiNd% zJ-npzk}fY9ykuagkST^rMXmmgP#IPCW*V&UrS?W%XdoC%G(^R?7z$7iqwak4+vvqS z3J+QxawsFI-6v}+;3xWJXcDfMliI(Wuh=9Lo=)^H^EmEtur^!kxuKxWFB7{R`tVS6 z9bfVDBb+YN{<%0r(ruM*o%Z_cb5i#ywyG$ zclvDZ1meo!ZcjsIpS05aFG^jz9j6ic?xFa3r}+Gt5=|C|>pkLrMb7tzR$PV#|l*^rwDh`agIAYtw^e&#-E}*wx@Fdp$Vi zsle)^{+htNx6^{t+3zS@Qgs0cwj0lJMxOOu+n+=VKH)p#_^>|iac%XDod-T-W|T}` z&Ri3@DoZBV`h1y)k#9jo#7N-i@HzdE6C0xkq;p$u20m;zLlfJTJ;B~A%ml>2F0@td z5A^StTAJf5W|7BDC<9*r@gGCUyM$FS*BVRSMo z+#yPdA>yc0lr+g)O=cn(F~=C_nMNl!KHNbOo!tCWtw2^^bz%X>GfE^C=PAIamSBZXh3@}mTeF#DB*p^@STL#Q&?5=A?y6hpq91TJGxoum0;(>Rt}No9Ga*=CJU4BmBP9mmiiF z#qSlFQ(4e(HBbOArBl=GuPS*fothc{buZNkToT-HyX`d^` zT`p;GhIantum{gnx_$QGuMDHAKlkm)UxfahotnRFD<=9gmHMD}{yr}JeO&SPamC-q z6a3AI^Ov{73I58L;xC!2$sFgeMA-a2toSP+tFL-o_^VR&;I9;ZmCCRAD+MO_E70KY zVZ~o5>ZZpPe@~_@ov=EC`#mxr682i>KNRQgN6Fm%b*v@9U3>iweeW*am#r4XS=Eyd zvdmRv(vx{fWXZ@`VdbpI@U6(S_~SR5-)w$!_{~vc`{@0CIj&!I8a7`m@RO3%VN237 za-O$xo)`6DbccVxqi-6uVvMKwm(i1dTrhGc7mP^%MEOnO-`?K&w^{hNS@CbP;@{>3 z|FYx!KZm0|Q-)x#*HDSrIv0QSuf%WF(RTJ{SjtyN4Gh{IiR-K)4%=0SQVf&er#=POD1+JJgz5 znBBf@e7>?g_Sf93*_*+vgRRa^OsDAPVjaWb6qXy4^pB>(jfXy!V>7?1{rQk zgTH=JWAUD`d}Hu|N9DtMK!;hsR-dK8N7VO(&;#EV15|2S>S{H-P4jn(FPi)&bBVEB zS7v-crh$o0IYaU9pz6}i&i+TIKS!7`f347)t;6en%vr_g7Y6guBzaDfn&KZ#ugb)l zqCvWND0j*f?!8?3V)G@>HkyUp$Pm~`Sev=w z6CWO63cIYgbfW*=6zYh{YGvfWF#||%)J>O_`K-sLRb_$?hnhB4-Fk4f%Rhit#Q^H^ ze>XPGSl(nTzfk&9;alu*+;SB+pN1pZ=6RW2KII$ou&e3PnAxo)IekIoE$PzxnA$$EQVp07s_AhE`C82q>Thp<)X95jorxCus1K5XFMokyaH#phGZ!2-pPT@O#IFbyky zMBZ>hBz7gr1}#+l-YhvM=eX{8U47x^;$`ea(q5HE0Z>$eXJ6}gv`J0 zLypXinnqCkHr+uZj&%P+;<@rwU)=l~K|fTyP{B4ckaa`(d{}>~>vDgi-^UJBSLHsW zzpSA?t9Z+Gw7|wmdBEeY)=5L{U-t3TH|<$|F)Bomgo@v|RVss%jYbKOkWDItZNx@e zhAVBA+y#v%k#Wb%ZS{SF=XrtyN53iehmUK@e^Xu8{`n87Zm_Sq?wLwOKH!_)bOnge zP9_|$E_Z%PpzG_NKh+`2bch=&pF>ipTuV~~gP-4-OyFD8m)urdLx#u=Fc9Qmy`t^z zBhXeNpzXKTD%z$UO``3KrzPK1jPIPe{8jRIGk-JqyM{le-4mG4PAK88h`$2g+k;A{jvVG^VoUkAps9*Ez!zyx>^AOrIfq$cXc$TzzM)zDDuo=|RF5u29xYnRcA|ggho3 z!Oe-@3QLi9)1zV!PLMsGsr^U%S8(m^s2`*cN&5$TLurw7rS;>Svaa51lx-*KG$%^7 zng3(Y3hXOtZvc7Vi6b7VatauDv4w{JY}=Pp?V*%A3d*iLt!C$d~K{3C3{!FQvd_`W=Q2e`0#~X~=?{ntc$?F^NeM*z% ze;dCXk#+_dK_VL=DNcDp#h2QhglpyZMeZDRST^W=!QvaIR%LpuNt1onCz0WHL*<@< z+l85nSS?!PFMi6!(1QOT6-KM3YXznMph|^`A6KE$y10i}zvD?^K^@eIKET7ye2tS? zkSe!x(;?&(@5aM}(-dt6gjH|Y&v#tX{CW71Zpf^JjM(6flAg*9^zmX{ZMsdLp+i)g zKG#7+iJB4m%fbKyH%PdBL&K{QvQ zJdF!#{f#(huQv)4RFR=GkB8tXgS3<`j%|}er4JlEb<1`-S1PgA=Y+ZaCRQXH%|l5XZ=k9 z3{5P+OB4;0bAx|dN)bk#rDf6wis6pX->kkwCRLIsvi`;tnRHnfGD#w6p>?k+F5F5` zoC~L((nBWQjC`5F-!=UGCuGr2bt9CMvSGThG@9FWkmB3j`rVdAx9Tra1+!Ml&}}V| zDx1NDLV6sD!K;PB5MF2STBBbvE;5k`mrUlDGA=Rs1>H+Z_$6*KXkS^xcL7<1NpQ;y z)(B*4?#S*9(DxE4Ecmc0EHrB*w=fo%)_6qXEVpUhO*gwDkF9RymSP+}*2kFE;D(@Q zXm|bT^tNitGt>;uSD6F#WSqZL@CvLQnzXW-B9A=E-QzFA3i#;!jWA}oTrk4eg)rRw1sX*G6Zt1qqZKEl7I_2niMif`Kfvd#je z&sru$d4dy*wCs)VmZZqvW8@R7pY>AJi_oy8sz1RnPYbALe`4221XN3bBcN7Ykq}V# z*{zm)mVS1ufcosG5~c;z-f512I;cXmfcmz|#aMT&fLh^X7NnlBbK3%{@SrWAe)b=# zYh2EEyleD1DOEr{LSErdyjVv-)#(t`&>zO0q` zh^ePOONgoM|4_VGM^Ky>cYo`DMog{NO)*(aHR>S6y-oVv=H5EH-HMnRG#OI=Ux}$d zTqZsKe^yL|JPcw=c$Hc|pImBncRwrwM~jm4DDZ1U$#IFsqV<_?IG$x~xil_MddSIS zh>7`CTwWf=wVCwS)5M4tbtIUz7*J+nBu>c7%Vs+A(*HdrFDoQvFY@wI!oQ}H{}p-p zMR~k_-rz)LYoe?E6M2b_y4ke2#RR9y$J^B$%i%2Mj?B3t1-$AS{}$j$HTDIU*(1dC zA4!d6QpX@sbJk%jTEn}sO+uaeFjC2Pzg9Zwjgmcy44!UQ$B+xBPb8u|_{@kD!H_e; z7d#)y&>hPXdGG^NkE&C=qi;Z8p=JqTaMcKZ`yyJ1eVXLoZ;2VAcSq`L7HRr4QMn{9KnRLT0TUA8f7$-vZh5@n-4M;aX8xf(Yqyd@P;M?)gE#JGP1Ry8V<}d#X@}C&K5lm1eL~S}0m*_X{72Ua$y< z%2g+ML(^UCSFGxcJavUTZQ%sg=Ct2Bf2`d4k__y1Hj!z)%G9Vbox$-MrY{KzqVnI| zGe7elvG}e$@o=~71S_u?!FeF!Z~8|Wm`CKyT=a749IyES^lNH<#$BrBBjWl_QvEOf z@7MqDz1N>h9>1pkD%022zh{1@{wMTO|B0&p)V4?c36}c%rT$6u?ZM=;9D0an5orkG zSDD7~v00Vbga7aJ!hdY=d*lD)udTnz^tJWxncu1ZkY4J4rK&#QYahaBa;NXBaf8)Q2i}9X{fO(4GV<2Dh@SqxD0WzN)JqQ z5Y`GZSd)cB#{rp7qgFhyFgaODOXNo_NJ+4ANpAVMrO#c$UX0ru$z8g+Pdy}efDck1 zSz8v1=2W(ffD*)JR`sM*L50%hru3p|jLkW5H z?WDXT%dJnav`Fet{~vQ_0v=^`HU0z=3>thVz#uMYtU-fCghCXA5k@jH(L_){5?Q2z zO5H$7K&xnI67l7AELHhxRTNvbv}&bAltmz63m{@tRNPn;Wnw^rAiK=}cg}rh32XhH zeoy~-p3HmKbJuh3x#ymHuH>IXe*YtVA}9gLJw?beMwAf@eIH&(KOm8E?wn(lUqhqw z$|iJV^WOod)-aSy4V5{UiiS^z@X-$yr$*zQ{LI$UjE+LGL%weZwL+Y=U-tj6M?3wz zUq>g$xhi?94%gcIBefgpA11{`0g>8XIh-!ToW+DpUKMXRh|d8McsanU>+LU_keyU~ z4kA(O&CAXW>8+T5-2 z-ZsQDDEeSR_^((kK}0y(WNl3p+!DDveUN9b^UqC@?7cmbrdh@jaGzGV-cu6+UT**v z8Gubqo_PW%4)6y{0X8}UV4eXO*_KelR0A+z03IZY>di}Q0PqC`=-VUtLf-v+7AEzg z=60PFy^4y!`m!Qz8!|3YpPg?u-e z$h+c^;l;#++sI8bk_EUfX;|G^S43%;irM1K{XK)C6ZNS~rDC?EOyFu=VMxy1gcmq3 z8=f{dONbe~N0gWqcNWgp6UE=-$wQQwA&Zaq&%{PzTXpm zobAi0@fknmcP$6rYrA}{foA5(fnxpwrz=fmymC^aVCXw zlasqGDM1C)_fJ5Co6Yz(Qs!IL_q3#>``T8gF2uoDkU3{(l9i-yi-zm2^0=;RagnoB zf$1HmvaU(0b6wJc@G0jvP72TFsjyBfSrrve2WnExJ6mtQONv(NO-{2{bU~M{hLE#N zh^KsI$<=uM9%@28eBnjBi_3n zzg_xk56niV-H{LL&VtiUPU5_Tv#6YAUpG(UrCj`#Vec)Up$G7C577gVjzst2cb{`m z9y=d5`}fkGN!DX^RA1Td8t}zdtlC znW}`tYC^U z^CY#**}UY{Fn3IseY0h{bPQh*fX%bs3?%s@)o8W@_5;AK$*Ve;35QpsWtlRpNdw{F zl;7^OvIq9+tNh7pXMax?5LeCV8u$M%ZlpSbfJu0S|^X=EVQjFjJlIL}0>tj#Lme&5h z1N;ufHNQ@%L{wIsqCRBBa(1~dmqS{NY;e}eHiLTv_%9QHgev5X+)QscQP_|J`fCV;hm8Oh$?~0-q+>}S4Yw-9l1|-8Zm0;`yZcLf zWStjurpYjrq%keClE)Rxd(?jrxlJhNVLpb=0C?qJWHYi1fT5!I@zE9@0$Rj-6HQ@29^c%O zc1sWiy!nC*B+tv{40u`5bKBP~lje%u6maxnQih)#bRbfDF_41JRF8a6r8)(ukX>&- zAZjm-{^RXQ)mnRUQpi-PL9YFh3?2y<{*F95Lguf!RnB{ ze&H;TybI-ecf`B*4>B&91e6^*Wc_|6#DIo8eT|EDxL-DI_t51j;}Z2R}t>3FbSbLh(9D>*AC3=))3m&CSJseYhsO_!fcjpZG#o&;=m{I6BT@bTcEy6G^ z;d&`pi(ggZ7FiOxntB*GO-%d*Em9$8H!kInINiLmr0Xbe;2d63# zbn55NDMepQP>iCF|LLIE@9hQoFiIog#sDDW_g8EAjWhG@OuT#48&vw;*i@~1rV{TT zO+rnTY+~$=W^Qt?JLF5%FnLKn8FSNVdC4C)nB!(zqf}_`h#I&hYhi&#KGCgdUd&di*!jw8#4q6zlO+Y)aF|e4X(r_BSyDiMrvxt*YkaO6wCf z2>;-Q9Hy$a|GPR6@93&(|LP{g8CO;Nv-m^4@oqbCH#_j%KC+7vN)S5L?A1E;-iz0> zJau0u7*==YxYI%{D{he?n0mPmfy)}LCCG2DH$0K``)znBDK*a>!(78%=up-NB~W>y zJ>hS<3+hx0oyj7@Z6CR641ak>M{zR#*eLegFQaIbImH6`yW}O$9EHcQuEYv1Yethh!PtdmdtwQ&j_X#M}H+Z)oz8Hk^pAHs`#N1D$k}7 z^h8IJN>5a*KsT>;2uwNWT85VYsw_`O8BfQHQ~A4E!jh24wyDM`i6(vYu}% z4vJ9pHks+{|H{7rE$AsKR5vI_??k_$9%b*n$dDUHp^8CVwE-sBhY4K_;k7BSyQFjy z-m+V~l<=v*Hl1&kmnv^7DX#kxq~6p6jPJI0+}Zxpo)?$2rUu28ek^oc4Ab^joClEb z8Nv^>5+yKdvYeWH-?*-+d;by(n^oVs76|D;GRbh?@9dE|XUMcHibV#6a-)UEnC+`fh|am| zqt#Jj9W*{ybw*g8@JT?CeMUtO**aF%UcrZf&9#*W#~2fP2`i+}N`-ut0T+o}OjIO# zMFZ)RDEG|T`#e)m`bJ+jY<`&{$1|EvkfWW8950vDltwc};J*u+wfeF!mUvJ!Qb83uFalK6uMVN(6 z*;;l;2dKb!8BI1KxwTkh%eJnV^~~WlJDZ+zAId^4;F9FiDK~q4K-MNj%HKUx2beR?X&zO_C{_@ zRrj?hETJBMc7eJ0e8GFVvtV>@oEpXF-h>%^KCm+ppZAAtGBYQOqt(Ddy;(zkYeIBh zJ#5_Wyt>!;qN;GB41Fn36rb}AK3~UY;sTis29qb#5=z6MfhV_Ui?GDrM!_KSID=m zmvoS{F}jrRG$A?+5#x4;VTbW4dS5;;VV#x5nbChn$0SnHxpp>)l^0!~AMZ#>(e=5> zQSyzD8DUS;CBDJ>94U{Xa-2YgS4nbNpXGTR!MQjp=iM^pXW;MjIQVc0K##=VxiCZF zAW{E8{GGoshQCYQ@k0;4=TY#tn+7u0;P1u1isEl~4K?_CqjAeBd;27m$6@HYCBD2>NnXn3McM?22ik9tR^_QTgC6SAHAAbQ*w9y{-nLWBPPy$kBw2wPLMeP;4F~rVRRrZLMRqlz1|5nQbvg`OOO%mL{emc` zWG$kphc2hyjeEG16t`vE?%*UFpAO-d-8EHIEQQ_#CFX{15n;&RG!FF)HbYj0dE3U< zMFXSc|9tf^{rn3=oMD6^EjkD~>oOq1kf*BS!jLr~?Yr3o#U|lxTVuiy_nO}Bixg)z zaq5OJrZJmwri1T0^%`NwZWGl#Tlwp-@oB1EuDdH;k!x=v-+q%XE(-Ys#6E2R431)frRwj_9a+OgO&-O8<#|qeR#Xk@oLZSQ4a+y@vsU?o z#N>Ayo2U;Z3iC!s_OqaKbtc`=)9p%{862+Gi^M<@nphpx(^ow6VhG>(S`?eUYn zCXt90r|=;f4xbdiCIttaC8L=aeMpucS|BiF^_nA@r5QP$C4!Kb36XIM<(%(^JgFgE zMawze4f&nq;=m(!Ip@t-L#p#p@eN(we#ooN%^FVi=-bqro{kX}t71Ij2Ch%bEJ+|! zojwWufJ?G^MVwN-cI5pX^`WgplPLvRin2Ro=6w)v&jlTp>-ACobd;93s}= z!JyGxwlOPo>-W+|K61t+RtQ2f@yr_Gf18m^oI|4jbpZ#1_Ht|Cf$(eM?6$n*49se! z7We3l#Zvj<6jC2mEUBsEnOp@mIk_CgFfB=lhityIypqT2&VkU@o#95-o$NXYbd$i( zO8r$5^$t1d)+<)X&<>4Cw>c`R4uC{7|TdCNh36{8BZ`9($4GGFB6&gm3D&FT#WB zE383Ssk7J&dsyYd z9s{w`g}5=9M8ycT7Dy$mb}vZ}hU+dCXzGqa+vst@*PTjMEV|b<5wq@t5Ik*mv$-W% z4Sj$7x1?Y|r+K=LnwtNLGS7>$3^=zu5p2)g0#Z3paP_NY@ zB#-O3eI|l=^Wt47r(pSUJ7Eu<@V9oR6J*oucEW8`gYxUGLDH`DJ*E?$OYDT%($277 z>#Oc)ed~4H@3GoxXtedM4Mgg!5ceL|`UTqhofk>#)g6Vlm)0wwy7R=)**1CCJ=E+% zE{~!mm@;vv)qJm&y{E33HE1`W-43v_Uz1sBb@+b#g*&ZQ%lKbob*LKO(dw{eJQkr^ zt>(Yl>ab#b4?VmeX_B)gf$iIJpp>qRj* znswYVNwHT_Bmx+}$jYwbjR`HE?^G#?H0yU-LwD@7Zu}AVO59j)Y4t9CF}rf^P5=+x zkMAI%t8iEGrFA!o{Z49Qwc5iVN{g(8vuA>yP+uDwGLOUBr0~$TLYyIt6S(*n43$h- z6jJVMe6gHg$m$jG&VTgwq{$VMwZ~1x?R(r(Jh;biN*)S2ZGNy}DnhfT5ED)NM_9d` zR(mb4?jq8xIWo;y(lGCLT8nkor`%#axV-G!WVs_*H;yd#ADN|>g7s*6O?S=Yidj;j zF2xx=Iv2O<@vD*^{JVX}pe#nt^ zZ3z;E@N4HL^0Nc_v#5rA?SCapmdn$J`f)L)-*7wF&wfw&k)?8d;^;crr`G)@K|kzT z)y0nACywc2Z*WX*B82{A|%`k1%^_o+dSchIYyj9BzoSsL!79)bh)9NNP;8$Gzw;{*AFYPw) z>y8Nxl;-(_bCD&xOK@(yc|mxpT6n4*^CJw3i-ZXiuvxgh@!eA7qtZM#ypW z?fYjkUK=kqUBI;|Hi7bJt1*sw9o>NE6yYHgM*0fTn`f(MmG7Xzsy9C!GlUK80|i5J zSpy4ll4DOv5nvb{N7-VtnyesDMkwFK{bv_+lA0r^hon9<5^0gh@zNoznYD2&h4M>>Gu!eo6#8|@;WYi5U z9v*6gnb(H;W$Z5=fpgU1KE=&zHWxQ5^e7s~hkNS1LJ-X6;yB3ct-aHd1D9SftYRO) zD!&&0amHJ>6ZIFFHX?PnX1LPHn( z_q9WXII1fi;8!rfoqwTg82@XAI}5ZW5B7^(&lG?+_uZqV%UM4Js=&VW@Jl1j)HH;P zzxSSqK4rOWiEfRGZ*b9<-9|rXvQ_>Ds`)_&{EaurG=@evQ>E@$I?NAssZkZ9e5-eT zUFIz?w7!+?rJE8)UQ_}NR0Jl`Z48^6ZoO2|?Jt?KA=$wEtFDsyH?!x($`z!(dO zXF~p-RAqY`V}s`uM#`RDBNfnGw~{OT714q!8ghe#)M$ttE&;hfLKbQWS}PLLOF~{H z1Px3C2F1Dl?I!G(ljG3(7xS809IDzHje$AcWz z(x=NRwW}_lAiMeM@SB6UGO~%NDfC38_QdQNd?sse$rkBhW)z(+ork8^a7}_yk7=di ziY)QJF~YAx9KHW{hU|xyVI%Bd_*rpxTUOE`kGB}Ca(Q8o>x``_K7jRM?&(wr1ksJ` z$aNmB&Md6$NSeuw^_YiAEzz=5(lSdX*EI!EY|SKMnewxQu5!09l+$y*Y)eaM0cJUm zz6*NhY{LyF3lY#urbEw*Zh}5A4EPj^6Eu*IlH$+UZKL+aZN(+*E*-2;tP&Ahc7DTT~RT zv!GJIb4p)OJB%)fb&A_jDzcLIcjK*MN1@&0w#ltv43JeWj{wt;d*;e6_?Ue-2(rqW z^O$tJ>BG~b)o!q>YNXKIE~}`aw&D77-R+mzOvc(Lk?e!yBi-`o9qA)_ zrQ*9-CkhD3d%5ry3rg`NSyL<7v6K#o?^tTA>{Yct$qb0@;To1)yjZTWg>wEd=eWJR z<4n`buK~&Q@~q5QM_7Y+dBL5cM&+E|>c=ukUuZ{9lC($Jv0IN`k0{zr746|06z~Uh znr?}_D-jhO*27aPX>7QYLRELPhikaK_L>k1w=~(S(W@W0q51aLRy)n$mdR$Lp46Qx z%MJ~%APh;3w}wO zY<2izTodV(FPd4|uSs>;?<|o$kL(S9N%f{^s&~hCB2YF%KUy7@kH3_9NrWuf6;xc4OFUD+K*vyD^f!MlwTGYdD(UQQ(hvZvdu#jVy&qSiq-i8B4H4$E|t z$j;R>d#eW2n@!^P9wZxgIU8Nkbr!)|)cBKNFGL zh?I%w(OB(FpSROKk8ETMIb0ghPJ5iU3?JtLqxE#9HMJ_O>X8CSG4E^b4$l~F?(MdP zB$Q5=BK?%wPf}J0OADgZHkNNgVA{!=;F= zrLU##JFOuVW1hQGUgZ1w%2 z+Zro>2Ys;9x^Q_Eu2i8vRmgMBp|w@N5dJ56TDo;=%1K!jHsqV4dg)!{wN2y?nHF;n`np`ExpHH=wAkB?~KitBx&HB`TAK9;;c3%8)u z%4(-PN9277Qw>dY7eJvE7l2SvRFiqH^W7~+S>>aZRr?%j-)=RJte;ELvsq+Bc6g(y zXbYDVW>iQK)Yb>;Q`_Z}53j9M(34%$FLZV5P0HmxM%9^SOX2=XA zQP;8BdKE?b-acFAO2TFkX3S}Jd8r5j5A8dzi8%3 z@-bHT(h<@B$qD|R6d4WwcfZNNii=vt|;KZO4#^|OOrA3lke zAZl3>i@Vaqg%{>w!Ogim{PFjk|2E}h)z>3;Y)bfoS+$Y6sjj_FsK7!fXLu~2RD*M)UhqpWos=MuI{du1Y%3OJ4gg{{AgJ>{?xGE$oW5g4 z(a0N~DLcBVVN{GJ>Oh_l z+2g7k)D07LgBnpc5aXdwo*AWKA>VZ4cGV3YH$GK2xXZYs>IR!@w^F7M7%y!LT_ait zoi&L_=0rVqHt}}BYQpEAAq7OafY;P_nBu|H%x979K#E22;GDn46%Pj9sU6#cpqS#p zj(1{;2ZkhvCjfwqqZD{d@!)Rt8pVSNCdySj7;Sv2cyPb#&ZJYEg4GChu&-xw##Ilb zZ$tW9D z9e2v4x$h2b+q{36wu!Nqu$Q*cuXUAjy%tH~mw*}?*=X=_5z{s@G}5+o#O-=NdQm35 zjDL*lFJn`F68;qf$&_H6Nciihy_o*U%0E`yRh*A(Rs%B;uT>;-V)LR8xCR{Y+I?x^ z2;Q%(hfrp{pONIGPt+(hDI(rk{YV?wY>>qj$>$n*JYs2&JpsG_B?n!=r&1GH+s%6c zLHqrDC-rdv1V`|e?Z*lfu@ldoZgkt5dJ}pyoKJXbYACnMWKBW`s65p5wB2}*X}|w^ zY+>)V4`{gD$$Re_Ks%}H_-Gi)%JyfN+ya0L|FvjTr`^)6F%(z$jL=1=%WQQH>pr)A z{rl-5LsOHcwVlRkiT8FY~rmJtzQtuA*aogqp2G9rCTfft`To{=8+&YtN@xz zQpI>}pqG-re?L}{z%B!zvjOmE48Z;&0)UlBQkZMr0EylQHu=eFwFuNxe!0nB5X(NF z>`;yR*r}0@Xv6oH7*Ob(fCy8Q0)g|kfs-18GuFTfC&FpXJ?X^Oxcw*R7yYq4_c4kx zrcrkpXm6bs?UlCLD7{|@6m!6{avs!5NrWt^@!~m`xtj#>4dhYn- zN&n0E3>c&1b5ShgGh~b^c*%XM_%OxqHz$nm8+U5{ZLOj$8Lau`b~!Wh&3tBL3;0pS zJ3b%H{59nloBXfE@}H^sk2^mS^N%$7?~LXD{Du?GFEbvLpX-!lIzutP=i7FNHskyl zm?ssCz1|=BWa5%aqy=&xZ2MKDa#A;5O{+FF(^kdlfy}`~dLxe(OD6;U_Xhe3Z?uyx zi9-*~7w8f169#tqF=3O6KN&xvH#{^;<#U~(*#TZ=s4UyhI}Cxv$hU-$dnd2XK^-^A(5isF zF5-RhsNmx5kJ{&It!BY}OaCt7Gr2->|1GlUvsnuuD&^fPr_CnQJAZE}y@L$jfl7Fx z%wTC{9J@I0j={JT82Qf4nW{%*O~ta}MeT2gRd9L&IpSScC{sYj?jsiE;v$++7|VO$ zW-UL!IT}`xhGey5e74`Fqo1uckmCO*1|ebecLd|Z9`Syjr~R3zDHk38s!gq{ws@+( zO$()**0jFq5$}n}`_Zk1;<)qyTGngy-L%Rs*y;r8W1e~^uq)=-RW}eQHy;KiUUKTc56KCH zV_?J9n_8$daF59*gm3XJ6)V*g7f-C%m)bX`*nQKi*VkLG%l+Qh zEJ5zc*d4ISA0v7Gh_BsSHcw~_oH0A+@FR_kSj-hpG<((+PF#7DvWyqukFmpFRVFId ze-$1>UP>CQ@baTql1Hl7FvDX^6jze3A>mENXJ^*+a;uW2Ax6k@DB0A6`@{x<3RyZB zx4TowG(N7M+2cL=_Fmb+DrXp{u<`S3-e;V+Rj>t9KCB@+tJp$D?kNXpf%k|HjCrNLQCVbyBzL0y5F@)4bH{^tZotP0B27Iu}`8s!XP zFG2yVNN@umm1L$=c-81{kiLo4YDTT7_OFupKLYrL@;Kn){(h%RmfsnWmEw2uv(f?; zy94%)Tq~C|veb_rlEozj%|+iQFDe$a8m{x@t&zGf?e}NhmwrJUvuExd^jLV8_do<7 zC5;2lr2+d=M&$3Kqsj^EN?HhpOk66%6&uv>(4Q>#z0K?OtxYx*LG}tUVhI1g75L%5 zb>0_opllp7+dPcEBfM8+FUr(;gb7Mu5eX^ij0 zCzSGU!cW2kbR}Dv@AMzBm}ynWeLy-OH(d}dy6wC~eX{Lbl*Gjl{Ry8Jv6zI*qub6I zPwBQZMX1O6VcKuY2#Vp^Zx`scGled8FaI|I07dOMMT*LA%q4VeGx_$b*I-%`EjPb= zSCs+oH3@AJ%GF($MlQ#3F4Y^!+ss|h{XAf0 z@1Vk6TmHx^guC&fq&IqrhH!|U&C}qcs{qoq<$8h16V>BBCK#lCJm0r)*TG=`I{I?f^<8nUpS-}HsNter-VLkEHrBhqH8 z;%wO|SD7cftO~IyDe5~5C32qpD1Al}cZXE4w+H7p#wid!P-kOT`SZCY~XS_2x%(Ey;&zg2dh&X+pF&#~8QUn>QIB zz3JL`aC*0=eW%+9IpQLc0lCQ9dbgM6l-=)1Dn6Y@dps)TfSr$crxES1=EM<9tnS^> z{bsx0O!wQ`{Th;1-P>K}WUVq3&UAjXKV*N?P@b};w=&zVJjL`E&tIX@_htQc{kFx{RLfjo-0!Nx#1Z@KM%5yhcBCRFrsaJ^Yc14@jKU~1t;!kcJdh~qgiBCEFb|U8Pk&+HBK=%rFe406XYnAFOmf{ zNrdw(GG-#q)(w z50zz{A3G(hxt3&?tmXx|vJZH&xu$Gia@qR`O4rhLtD49ZmqVznj0{p0DK9+q&PvhZK^IDF}B94*m~s734b=qX-im?arYRPG{;6`3()% zq+0}8?`$i`xdd~LZ$@KtkCq@wJW@E!7$a;NX4N=c&6f$kwgURKpuNt!=T^F?93#Yy;Mo;93_w!V3uASy!0;OeEx0-RM zX`)b%9qnqkFfUnph5xq8GWX`n|G>JgGVSt7xOn0&D6f=+a+~yGyejjPcg~?L=o4}a zLDoa3qFDSZoPjg#_qz|QvC8|A&0fs&?Y2fGFSe(SA%(rdnR+kZ55Kcs5AeKIgOMy8e?rk;&C9;BU*t9Nqq!<$UhO<(t+wG;&3HkjLOrKfWi|(RPV9UZE+@uR_BjWnc6B?@oI5 ziWHltFkfGjyn^2!gQ5Iiv1Ii)-QM4hcUoI!IVq>ui}!q1_ElrMN|FUb#obc0zMtsf$*X3c!Fb&~5W)fPIAMU; zv)f9lE!UK54oi9HRZ<=x-lY6BuEa|8B~$G<#XW;Z;NDi&rZGs zjhvF{bzXzN17D3S&QJax^l<`@6juf+w%G$;Ee=<}c$IK;d@xB({M23T>c=~2eVp7q zDSaGX#_f%ZCylql-AtHC!OphTLxRi1k_wT*Zq-4g2RsqG8ksC=TK!hA1bdh8@q z_l}{Iv-3kedim|uy`A(!^vfY(X=jFdw3bdWrTA4(m4Xg=VwJ`&s+`wQS-F90dgo9& zVywJwUzR*q`x|C`rxtJ>SHNz z5BVn@5DF@*Vy@ja*B+B%7p7JBN@p6d7z{^yWNEM(J!<~=p5=bC+^_O&)xEliw-#nU zlEB|0LO%NbwKnUp{p%xQSnW9b*Qh-Hz{2)S>hQL07FC-i?qFz^htHyy;gcfXa8G(U zG%HI&_$TB!VTVkB;n@OR;ChTe{CAx-b#^@UOiir;g7gvZAW};=t1!OP?s<()mrmJ% zRD#KLThgdx`el>^M!b*qm!wNGHL22-c}Yrk<`ZE8l@^)6mkC6Qn)*Geza~&navnCsjTFv9)^1if`YR2^ydq!sE&wXtDnMI2Vf@6-5JPfF(()y1CH5M3B#w|3$vk zCYo{v-s-Yf`ISFu!8)niMt%yv7H=&-g65XO*!NLxPvx*lkG&LSz!nI%`)oG0YAfa7HHi@i;_B%1U0 z4h^W53#Gy7eXcp5)bsm+$fz<3IM+Eq->0@QSe07AH+%;R1ao>IQ>th&f-yv9j2<7b zwUGZ|=$U1lf;=HbMu=~^d?j)M2ZGiL3dd9)C)}DS$y1u|Hm9A zlkX$~{CoPGMJrRxc4FZfk18i#AMu{tPm*k{;Yo}^9EEz=Pj;ZOp44SrO)N?MZDT7N zVQ8U_ZN!^iAgSk(I^rGPKE_1&ehG)~jQ60&6!B(DxQqy_LK8m7b$-R_>2t`HWR-u8 zJSvx`p7TRFr47C=J2cS6FD@uF>YuR<9RzQgrv2S-Jwlu8Ijy`2sP&V*6& znv*{FS%85EdDU-oofT(*WAFR5IqZEuxj#HGjRTYo1q{+s_3uh8tbF^|qvY@g zBfp#TtpIYzUyrdW+JT!4&467ZjEKtnuT&ob!bQEPRk+(07JWt#xT0XTuoOwZM6lu9 zb)`zGJ|`$9>7Vk_Vdj-MU_ioZAIrp2{Z1)cBsXPMy^M*aA5D-d0w-%_qK}~OG%=W1 za!$gS(kQML79RF+a4A&_>dV2sM$zBA8>}xnUpwl5Yha1zp#7r|A<+i^7$_msurT%S zT!{L?%3$1|Sfk_qH9aYn5_2yoxH%^pY|c&!oQtD_ZH(3wP;q&AdUM^;-xF!0wrU#Q z7dPXb?~I6!chc$;kN3zQ636>`^~J_J@0$kWz2?FAc&7w(yz2;xjra7w{Jil_($X4? zcd7}}@y;-ASG?TV`2PFjebZTHyhW7}3G8{-4`G4wY((;Ud|^dHr`{N`+4JCv-ODa{>TLB zcyBUpcf3C|zW@Gs|BBmavOc=>a_27$y*%YS`5sO$Z|0QjMD&s^faB|0E#%U&U8}5~ zawVA$Hs2>Vw^(-HG68oI0LeUbg_6u35-6uUE{pm6Q$jMgEmx8`n@Ay<-$5Gf)Qto> zz7I^)pNWci-`9wDG-9ran5q$TG~!K-m~J9$jd)%oUNAwE`MBI_AGk=zS3*F5H!yhFZdfV`VZ;>dei4@KTX1jUed*3&-^d0S{{4VazQCPkNN8Yl)8g2IX%>JxUqe<`Yje;!3cyvSLG?XqQpm z>^b^-huC6_^S5zZjQXA<)9$<~nRcfhb-3NV%p+S8hx@nciw*akpEVfnAI8RqJNq&n zZmT$9xR*Zl^M*T1OKULP?M#pkcaCwp!+nAA$#6IM8KcdUnE(61Ci9VF{V+OIGS*4} zgyaO;7-~IKzlT%nw|X_C*11Mrqxzn4{#NPr^r{B*`Umz6hy>Q8N9pxR=-d&ofB@+A zH9n=+k4mZpdcFN|q1OWe#ZsC|4x!hVK}_w`Ac2nWG7}}xBi?g0qO(SvYa+hUh%}8j zTO-m;#HSju{XzlN)CB!d8Kc*KY%65=O9CR^B^)|9zE5$x^!h8L@s4k)MqYB3xGQl> z=Y@%J>2>OvM8xRzcJcY9k<6vn3nitY*PovuDWmjynWh{sDGj}TQc@av{ZC1mNUxtF zaYK522nt^2JFqB`UVpbBkzV(la3bveKcd$ov>L~!*VSJqBJf=G#Sr+_j~gIxr!jE^ zzV#AC;A;qq(d))je;xvl(9#+p@F)|c2wZI3E&|_TeE(n2>od5-XXtg~g-4^;H|dt+ zc+#i;6M8*%{t4;zx=o40y-Izt;a;$|!Ej%3SA4kd?V`hdBSEp@Zu!K|8}4E)t-)~L zXM%LND~#J6?(xR=->26fpK=(zo_d<0*RSdKaC&`G_v6!RG|J`lL`+dQftI0QWM|O2 z5LszP!5dD2N5lZ)584x+5(koXPn&YCZi;+dB^i=(4n8s2QBa8kk$A?yw}Z}5L{fLQ zwo8@?-UVl9sXV)Is}-`ZDN)C5Uiq>r3ckc$x<$GapXNW3HCHR<2|`5 z?rED&+2|FFlso-$l#W%opq;-Qy-cbue)omA0n5{ZcKUMEvmcy}X3$f?P;QlIr2-Ya>r58&vjO|Ws`5$=^wvC4lf;YMxE*z4e4{II}Unkh|9{VjNhHKC5A z;;>-kw@BC91*W42CE8Kw5r`E9qAJ2Alvgc~^JI&A(2nt zum*2v6nVohzh{BbH;^VnA5ae?VB$pf+cy694XIY#18Mc}5p>NX#5y&dA-%unGaj6XMS zB;H-(6|1{cZ?6P!v?xc6(l7ED+AM>O0@sv z@LOBxFC<0KX?qI=xcqJ)lQGLyb}(i9Il0_S z2sPUzbJH04;f5#%k8{?! z5#u$YS&|%(wOm6)T?V1QCR9OHZw8c=edlyeriqm^@QwzQmoj-NVs z`%<%#CYJLxYR(*1V=INe9>#&595olc!+%|EHE|S>q{W5=<6>1}&RtaB)RR>A1c#zR z%o4OMvq|XV|9bxK;Qw9zWBLlN{;OE-4BE42prZrd$}#2FKDbSXus{umX`_J1c}<_; z?$C?~k2iz{3pfvpcux{8u(Mu#jd=f+ zfueDz&D9lOP)AA5)5x(a2~)8DHl6So8J)?&luIL}O}S2ws$8eIDkaysqlzachg5kw zRid)i7|k^Qyfjo>{HQL5-p&#YHc^G)XzL`^f|0v9M%gLfo;DLu{{E^DAR0G*DR`D3ue$>Hw#5rHiTq&l=wh<0C0L7A^^Gr&^x) zWZ%F;`CLsNmgiWE`ik*158xUYR#o(RLFo!F@TbL41DU%Cy5Ar z9zMX&jAa$;c_ynQG%iUiK&mU!W9eGDE)?xiHgE&HT{F)KY)dH!1#5 zpGZ|WB~ocutRtM&N``{-GL%NckjrYjqK1G@yF1AWne!c23+p<>r^hW*9L<-klP8}W zxn&t}o9hM0J+N|Tx`B^$U|AvL77 zl^jKj+Q*Q+lB+T4n!hI+6ZfZCMVJl?m6A+iQnCOzMe^Xu%@R-*EAVz&S(}YWDPCLA z-?y?MeV(>+L1|E5bX-`FR3}Bq;;tW9hWe+-?_dvW-iWirIYN{{3itEViZ!S3J0T7~ zd2o$Qw_4nvLKR!R519Y+QZbZF2DXr$G5;YYz94iTjk2qY_A z;kPk(TNPdw@Xiu=XeGQaaq-H=fw5#1eMR-OnhJm)R(I;S3z*z3y6oI<6zFz_9_Cg?`ebovTs=}?(pdHRneFKQ>PBypiwU_5uR4ARwiSS@-JmvQwSWmTU1!=?$@AP@e+4d|J@V-+b`unHCD_$annMbi{xDTh>r(*)OB{<*$mqtWDRJ2@4mJ z^^GQ{zM#V_3OCJ#uLa%X*v^<_GoB z84FaU_KPQqXune|Q1#bM;91c?5m4RQR5h`Ztf4Cj-U1j*wEVk#|Mc8qk+(r0@ z9QNMVwmS9CH~=A{yiXoD)x9C`-ty>OfgD^8_v}>tT<+SP5_I}wm`)9y_Pg%d@D)2` z;ai%?K23Q8v+`kS(PbDanLcc{*b=%+Wk5D#va%9717}#Bx_!b|Z+yaE;FDX)0M@Ob zT_MZ9XnqrsW}I_yD#yU(8Jw+6=oFl?wquL}CP;Y+vT@r{nH8KhID472>u?6e8JaCM zm79HIew1PsXlwN5ZZ*9QPa*-zNnqkma%kKuCQbrO+=MA6;&F`#h(aKvI$?$heZYjm zX=x}A2*}moTTE!B8@kSf_LER2wf0xhX%Q|#X{erQA!DwW4#U$cWkMMJHP!cvbE}`G zbH$H^oPrKl5H|Odf&Jy2u_VFVMo97s>u3 zb>$8$)x5YN| z)JiND1eW;ihlM`|SN=q9k$?ZVm+7~}U$#)fiAeni5yU?!A8wS8=1-C))NHPnmpbZJ zk&(yM=H9s<*4%C)g_N6z#AnO&m3Ntjld)`p_|Uc(%m`JdZkpaIY2d(taLPldw<&VA zI3;~Y(mNsXLG zVjNQn!~#u1FZUPdvNLaPndH|S%4~7^g|Ewm44L~8+q3k3#3MK9{fL&NgFcyi{Ov#9 z&jv!Q8%mjZpHQASJHd!502eP%dt0{vd zJ2<)5s!Y`+^V}qtBqUiAO;V~!{^%w-Et*7X+USUy{&~y%OM(AFvjp08RW-6EyWmJ1!P45d4`)$KlABjKDt<#g@Po4A$(*|nZDnSWOmwzSU{g@ z^DT4oFa(tq_4hkK(5Vsu!YFpy%jYKb0#`noPncsc*2N8X8M8xX2{RMgUByDa(pYI1 z9;>u-k6GHSM=MR&L_3rzt#P8Ii3oPqrVcZEcQL+He7Et1LL) zlVeP2VWD9vUX|K;cN>2($Ay*M&MFk!aG6=QP85W8yCskV`k;AE-Oku-B zoH9>&7YTqM!cQ#Fu~)WZ`&^Ba05?uYO5;8>aT4IhX}@aRTP98d+&Jw8jeEw#Nq~u) z@QA6%?hz@uE-}w8sOf?3{1vMjkR!n*@1!Me~~vL<$2z3jcoK+2a-}-a&wbdM16ts z-6bE_%2Vp|pg*$q*}vv+e0}&yX}c`blZaFP-Az5C_HTsbMOOPuAINHySr8hTm0Y~j z?*!y+hjI^b&Qz(1-yYbq(@LLQe8Z@FC^s*;_GBU{U++Z4%eN}7qvvb;n@AO7CPwB+ z7hz3F zEJ$WcT^B}Y*NrkdQ1*qV>DGv4{a_JBvb%|Wha1LWx->SfR>gi;4W~k;UPWcDGh52Y zwffd$D_ka()15a!i~$W56>m+E#W~`A^}uc1-Ip0yA&;lX{KZ1G)S&o!d2!)d?3XxW z)38|N%@5t5rrbMpB;vgq0DkAvMNd2;d&p(`0W%icbB#Jx?yiujoh+8S(knI+t!eV@ z?;_rBwKSRDFlK|qNZxgJ?{v0rF8q`@{JO>l{^JV&W`&*njCmCZLo5aG?)`|Od{vzQndmw9X zQh+C6namwI1X^itz(yvL?TGiCU!eOz)>+9s68ATd`n$GKf>Bd)Ivn=Ir9unho8m~@ zAe9gQah4E{q-Dr0CjA%xXaAdJ^WybU>v;;ZESvuT|2Ogf5dZ(1_B?x7zNHENyN*%z zvC5J3ho8>~&4x!(!mH;qy|ZGpm+gW~c=vYjDkd7XTq@lgZ}ahDW?VAr5#i!hDb@fH z9HlPfe9IcRB3L%R9z0JfKFhj(72;|^nX>tBOORFZE<;}{dmRk5D+m)0E}vJGsI=f! zA4&^iAgfXgWK|}G8@GB_!n_v z#JSx$<$PoZG%l>j8}a%?Y_PNx%rrEyn@wDF$X^dQMq zDbv%Wxk=D!{~Y->7psNpj*@exh_`bqhK+rcrZ*R>jXj5(h%kW(Mji^HfvO*?1)r+* zi`(bXE7Lhx5|DR*^CItAYML%TG$I%b^+qwEqBUJ3YKR#k&&Z2Z=aog!Ke&LE^a|$< zod9l&_x^YrTWwCnq~h9!h1a~IMg#33Y2rDD^0pDSS`QAJgG798}&3; z#w9g<6O%6^Fk{YDpX4uO7d(fMJW7L2(iGVR#z_ zx$0`{e5b8bR%`M3?D+e$Jv`;J@MNLW{p?R^nDBmOM<6dCPB%a&O@ zz{T4zgXC6k(K2(Jx3HeLcO(FNka|8+^bw_ruzJX1LOw(K`y~MfB!IVBG8~N%vAnnMQ79;?sieKq) zqF(A}lDsB|gtX@yNv5V4*kZ+#sT7Xnp^=1f4;ZO`# zV-;~rvydaIL7dcQED%nVFc~sAg$nbfiiIdV4C0hOBP4cpkc@Ldl^@Zk$WYA_9<3lk zW=p=^_RW{ZrYvd<$%}ZO*$2Aat(SK<;*=fqlovz^u@$51@jj|P2%^-G&siYUBhOxD1Q1(6qhx-TbLv%a8NJMAWmO0je8?<3w_Kg62R ziRF`RfuLVFhlc5Ka|879&k>s7pDW}cqLd8!aH`S=w2?$4B`tKf%zQkwkWVI`#B*mA zI3c$pt@LYk#X;j*lz5EW+VnbM*~ZlqNYf4YndVbzJ~e!hXKmyobE>*xhPnIyk#`DvPNJ`k4et8cu>jH-WI8nxNh! z5Yd)G5NWwU5dN@}pttXCE}z%6gfHUlh)Ig&h_>WYB~_n4S#*idJ(Ks_=B-$6dH?ywsjB9d`rRe1Zo zR*SK;A>;OY$;?A7MXAq${pQFGlJFA!Lm)Te(Vl6Joh-FJQ6=Zw_dkH*mr$!RS>JjskGJ=By6e~fsoZc-F7f*-@;ddbsprB-*0E9w0J1#7fQwP9lAORT~K%&qzRTHBdi`wq4)hZI(95WMIzfDrVzpz|V_rkxRAR@rO0;U_5p<#f8A{Vv! zrvM=5=d4Z}2;jf@0sMy;v?r#MS&oNkz&81jL)jr>{lU}hU2e8Yn=ZOn01zi<`OVSB zD#B2Q4$Lz%BzFr1Lf@!Ya?}FZc~v35hrjTZH#D6F;m=Ti8A^x~7grK9@lX=Xf^_IG zinPkN!qc+qd`{8}*Yh*1&Do{~oZhkye9BMrI*NHs&=c^l$^4hEA{!CYWG5&EPZLy7 zhoGIz0BX-HkoBMtdt_)H5PH&=1;Cxbh+FU9#lFk+uBSRvJa@t3e4JX;y!gwtH?3`1H)iEKroQU5)GM?ZLB6ceV z;NZ*}GywD=z%ZE!f+vd3=%SAaHFJ_AGMUZ9#PcmNW@eFvc^I8uXsEekPdG?xCIId= zQiD3HMZ*Di%+AA@->Io%(>$RPtyO2>3f@AAc$do(>7@SgwD^{?IU7nNfEwZ-YV1{p zuYL)QxtK0j{Ja(Wyixo2L7sik6SALx*T;p&0ZM-8)*uW+#k3g1aNCa9O8Yua1}62! zKgAh_!Rq$3ss2hBhGkn>i$fE5y6zBfe}-T7AHp;vm(WAL5wmrd5k06_%JR#ae8da&G(lrFnq$L0qo9Um;cjKluu}`0F_Vp^cu;0pJs-E|IlR< zIGKL;yIAExXiuYrNyvEt^<>!Mq;)7gDzil?R-w*+_hd ze!Nw*97@ynQG>mk81jc$_4e}ZQz+=!7xjX|TL*}<&ls!4L;1|>TUp9HZHJmHTY>o# zNJJ*U$|5tGRqY|sRTw>-kT%^kUGpVclG4c=!9(^QE&7P+!i_9b!i+axOaj6y@v_G* z9K=%9N0zEV_a<5ofj?-tzc1U`V1D1)GPbvO=l4rb$L9Cs?_*QsJ)APXANrs8{Jvk^ zo;F)H$o&4Mw!!>fetB$um;I~3{NBtYWqybF==|=OFH`hmc9tic-}};Ze*a1V>iph! zwPgO2W^OpYw`~#LH}&Bb$DPRCUpOi~=u|03=VnGW=)Zn))vBkQ{95cjBi_GKiVFFx z@;zXVE7RNYt;+PA-Yv^EHo_pM+GZ@eaPM~>-+l?g@h)2S@okqp^|}mY)ON{a^~LUwO!zZ0 zl(_AZMm^&9N4hprAd^&Es>Qt1mXjf12K4jL*I-KE?x*bd0+b6dU9EVLxw-`)O$n#(1C!(lP$Eal2#O-}wG} zV~izbPi-A&@AOYU0@p=cwh5Y8=375W2Y$V*te`m$p{}gByHU`==&WAvJv;Dk%z=F8 zm;XuoHOz%vDsiH@FyocPx$w05Vsjz%T!XpLylZ?e1P`G|63V%lpx9j4JmlxigdwKNH`F zmz{Wwm;NnrjNepWY>fZ*Y=bfGa7lcOM;_EMzM7!e7$*(>d1E|WOKUL3H=7_GIB;km~-1A6-TTk67n`WdK z+xhZtNj7ioawl&Sy8nrHfpotS#BO|9ReG@7Vk z$K!LX4m-#D@OH8~d^>1-zxY0%C zakAeYk4`w&L>0)m`4W(3Wq%7W>*29TRVAP$O5e4&h=kVO8+{)my1$L{uiNQXp1X^9 zH-8ahVK>KF*bW*hR`_B}YyYohHStdck!kIB`H3jpahcYXDgQ3NTCT+& zpO*>0n20@}sV_#`-u+_(+IC&1IBk1mkJ7f$1jT4u*7ZM+wv}sX4QQKff|RyRHEtId zCmG*=kG4hEuglj&*RKm6(t)mSz^_hH4*qyslK&{bI{kqYuU{#DNgU(de->YCjBBSh z7~{Jxj*sz+Kk67e1jWX<*MOfl#?!U524nn^3DPnCr*XSu{1@Z_e*g+KkPa_lD<>Hi#mT6yn@$2jZx#4&EAz8HQteZ0XKKlaP`7%$zSWBdw1u`wRr z@Bb0^K5$VM+y6KSt60#psH;?>*u`3m3`$B8idE2OuZw>Q3vOuMOPQ9HH$kaPF+oH=Laf7Zs{zfs<8+IX!1aT{+IZrR4Gh424e8~--`l;z(evh~dCKc5Wa zm<*v<=cIcz?#W%{pF?*L2W;KGf=JYYs{rJ+LUklXkBlTf{sd%tw5i8qGo-?T zXO8$`gC@sv(v8D8KS@)6j1DG!7D*|7+fBm-?}y^VKF*>2q{qLod~&32S%6yn)FJZVmeM6K*itS|OwBqe805)x1=HdYVBzMLx?i|uOWiF)sHGkfZA%-O%z5nQ zr$1k2XZjAsU5Cox5s&mJ#Z4O>M0-&tSQ4cYD9fWzcgQxWY@NZwvcYv5)GD z%y#)xA^(>p8V$VcL@TE@F5k<=tVBg|&pm7a&t@qV`*F$%{5K1X{op0t3E|T%JLBCX@V2=#HKZPK7>e~FF_AFO-yaQ_`NpXt5=;uoB1}+QNn7= zTi^`mp=#dR2Jy-AW3=LVmw;mhJ@?_iO32@x;^_eA%yahM7@QTaqiKff-RXL7=OXjy z8o)j|38vE|n5ql4MxF%Ucow6}lX(Nj!jj}l!XvNLu_KKd&2pJmH>;xcJpK5RWvf;~&$q@c~*oV@RC}PfBIStS| zk!MkApsNUGoU}s}bgqD~DB=a-mP_Xx;lt8dH^feT*P##ThxOwsEoV10Om|CB$rG4; z9d$$cQ4FW&z9>iej5s`SnCqDuCwnNS=oK7^R4g&<{#OqiqUvMYR(&y!xpDscfsP?7&q~+si$=4Q|YrlYfvi9>aIWl?Z*m1q{9X(TB z=bTwfnL2fFGUt7V(RiS;jm#Zp)>Z-`Es7<3VR#3VqV0lByWp+xw(~#VZ&ZHBu9Af{ zp7#6+**<<58|e2(jyQ7J(cB4r!uI%eY!y3C>^_nC@;^tR{GDGu6Ie#MfeFTYngEpz zzPqXkiRDoC%yhHIEb<(+{YmFl( zZ%L+nFMT`1(OtnOZ>pf!YY=-UL#dB?GS3S)mWA1~K!av1kYO_M%SK{q*Gich4^{L= zGFuORGY$Iox%+wB)enH+wySv{J^X&4Y9o-*b30R!7>WL5mchvXRyfUo%U6yIPC>&~=Uz`*aNtf~|QL+b~L^)AB%vHpQ>EQs|!Lj|!m3pWwVO~iUO zM65@R#I%kV$1W7#ws%7*zxbSlJu&9%4?hV~;(E71iKX)|ro=xOCMfYDFbPV$ z&QL*#I^n()CGIy86D0~{YDtN2u9lSOwvQ=s9{ymj`6#O`B^*c#N+bufH7IeDfG{O) zHwwa(ND)3WC63HwN^F|Sl*s7Alz3|?T?#-(@^!uh?%8z1`8)HBQB+%!BnQC@3=^by z7O0S_9#LOpu&T%Tr^<+r7!he?{)uDqvo17R4qQc}1@>6Jo_o38?alT6{0;~yw9&ZK zVvig#$9y@2z>}F`WP?{^RV@yXTLgsbK9JomJpl@4uJmuGC!nHW3wj0+sHb4=8 z=L%mLksN#0x7m$?;o63F$W|KNOafvYF%b-r@j1;GLYbFc#% z?*=ZHwij=OFLP=;P^CJew4U})imKZ_Wn?k80~xM8aNv^)OO|!My7WL`xaW-<>AH?V zS_OaUs^kvP2O3&eapOe5X(}i8{U&#z$(?6%yG-tElRLxY?kC-;-U@H=y@SeEWM&bh zcnUc=ky7y-W+3va6oMy9rI*nw6|^s;&=DeZpY$?f#r-s(&8Gkx>Urfx%GjZ2V7f{h zh2<(>O9MNlMFev#nTuFl02wQdV=2K{qCoD)hzN*DUKz6!$NUcLh`=Yx%2&!!O!CT@ zN3NxuKM%$f)o_FMjFY@F=0=YBTrj4np}U8SNnRQAU5@!+Fs7`08R|XU^KmA5WlW7@ zW+EnT`zSvZD7jAt6mvjgC}6M*7|Q{dhXQVp0mC@p7_mzNRTmj>I|u9#0Yu#X$Ujgr zjEX`|8Lbyb`!JN=KpevXFNFdO#AkaG>B>Tg^9XVAaLOZ}oeztqM0Qd1cIdIp$}+K93va7d28vd z=5UE$t3ejWRK!-5L7P?WMUhG41(^tWUoGc~{VEp)RKMW7Tgn%-zOkeRH$SRR>=S7@mq=bWpcnH~Ud#aD6Mvkul;P`eM< zcCEsh(%JCxufnv^TO8%*!yV;YF~OHCkY=NQp{|5=T%$Dyax}U`;2KpQ(gMSKwY=#Z z%Gg82+)V2N+68ykRG;tRw^V@-4)Z-~H=bobG>6mUS@xU-IO{L&iM#rN;tUis+6C6D zMU7hIb0qXk&rXag?&|NU*43c60TZ<3@|^VI#Au}=4TsrIy)e;E;^z`@-Nlnoz;|bv z7sXfEheeSVl|@g`k|?Fqmp{d8^8$_lcF2{~EaV-36%gL({ZqK*PH&O$(M~Tr(N0yx zGjSBCrMH| zMX-!4xb%ZQAW1PtV3J6|<&y%!B$*}Lk|d?VCrCmW(?24Kl!aVCl0Ra`A(9xv5NwFc zay=g>E}>MQjF*xN%8)ZenMx!yC^I;PVma#uOUevRkbX&-!B**)l;Lsa!0Rz>o9F8) zlm%TFLJ{*It^ye5AB(c}r?=oj1RRQJJNf1;7*FHU-!e>X<*#8ALYLX$6?at|m;$#K zUpv0I3~yipzDw|>n^E4v7n)DVLC;;RYQK+CwRVhMI}fy&+hO%hXkq^1OO|Ny6cD4t zmr>%&DDh>K_y$orwcIH9QIW#LxE%dG?og&FX%WU4?t+(A+XI(96o#>K)dgnZ+731h z?~b@R?!%$gqWEeNG5F+mw${uskD;GRl(#N_C@k}9?5D9ZcrpiJ!wlB^*jK#UxVfv? zZJfhs_07BKT!7Qi>D=;9QLLOr4jjP|HT2P2v~O@NenYl)@B&(Q`$v%0WuWE%hSoq0 zv~6kaT`bT#wZW3sgC(s8OIi<>v>t4t^)S%7J&}3@k=l#aGm-iR5G6$FZJ+!SssD}c z3{w9rfuBRTB=A;{iV2LDOBlRRwNSp1h1dGSWO~jem#(iPKQ2wpH7GBkvp9Zg`wxH3Uh$zv^@ZjuvpE(z3_Bb zYadu@#^McGzHUC|rC0bo2nOECJLu%+6#X1a4Nx=CNh{us`G$~&{6!=UhhdZ~!7EEe z3Hoyh2Fnsm$5)o%TNF{0z>+L7qo)Uwx0`X^cR?Nj?01%g`&D$(!ZMl;B|j7EikQ*j ztUl7tS#(mx-7fxiByZ_y@GdDLE_fGkMZ%=*r;ky3GPKG!vDe1^kD>dLV85g4^NHq& zOd5_ZOh@1f%T`IkXTYy&_3CDy`WfyW$9&XJ@I$2&f0P}dOI-#))JRfTEHqff!+tdkLn=q^}j9j-RV{GJZU}p+B8>lEK zDb7n{bKgU2_Ll${i^t|JAq();??9JzT~6v@msa8hH0LdUXPgh?iYj`Gqx^Ih9#po_ zT5oJ6>L-7%db+PutG}f^Ll4?BfK~qzSC=iuyQf>xM&1ex`@y2Mx!Qqj?U606 zhkgAA>BW8H9CF1_cTy_#?fLJ+i1#AmsCL}!3 zE&GZlM+W$L5RuOm8A|dBO7LF5Cgzb9=-~piBw!mMW03@cV!;44Q-Vm;K%joEA$4Z3l(2wCD6{e+Ga@<=`8$a}I5C)?7P^W-xBw%fynR*e^RC(rtQLM7n zA(HkBptSbDG8m0Lb(dNHwxJVE+`pv3W$53QjK?w+dipxC+8;&pO|FiI#HO_Qw zHA-5XU}msb^>^x1j3=*mJ8|h#0_LJ4tO2+z7pzhE>%~J8Vc* zN8*LRG!O=TdDIhTu5k$aFp^hgq2|8ZCJI&>qDDF&Uu6lYbN%=Q)+IXJNZSFZxX0(Y zK4x_;Ff9G?mx4b#{u1y9sb>yObG#upjuQ zT+|N^3lR5%)50w`BYxrIexPtA|KIn6JN_a10Wnd(d!M+z{l!+EQS_3J1GXjaVN!{r zz$p+$(k7uf4mX3y<@GAC8knNu`@R8#W?b^Zq8s4(FXCmufv6@9M9P2ez6(d1uzfAd z{CLdd$gq;07)&3*C3Ixoe*ii%mgmbMgs-*y1z;@9nG5j6_7i6jr1R7K^*-Eh5WL^q zut$K#494pDvdjmNI81Suib*1+#N0WqVIOsl@ia-;#$&06+)7Roe}#Ho6$OBKZKz}B z^;3X?=MfXHHFpkG8#ESw`S=@wKNWvj`0J0q6#Uuomw>-G{8{mbsVo9@SymkCFXM%9 zXQcpfe_1EovcG&TeCRJ){Oo5ygt|ezg~XS)koZQSxRCad?2P8b@W%)}j&AD+K#&d+ zvZgL99RF2W!=k|3`XwT>v>AzX0w3~0SUpKYD^ls)blE8|b0il* zFRE7~9ANf*5o9sb8KIgN$0=U06wM^B6Z%d#XL%0j@X97Q)vU2DZ8FZIP6irOJ?065 z>m$J}KMo=f1c4q0k?)LCKJ}`4s;Xz;dg|L$txIjd5r;J5nE$^-bCaKs`Ts_K&m=nL zcPiPf@|a&$hO~fgi)Q1P-|MSiOOu3DOZnm@)X9?>3BHYtn6w(7vx)9%d}Nt3u+}x; z5!7@DB#qck*Z*G6@S*&h%ZOwu%BZSXOSAAETSH*PSe`V~K1N`!K3#QcL!!jQiHAPL zycz9x2JLbCUoc-zO>hM6jzXWse2MO*$4sP5G>3|M;N+@7aX$(|`@7(Mp|p_{1Q>)7 zDt8Eo9JL2&N?e1Abbg$A3mxvSacPe%E9omw9MArl;20+8C`ZxubY=(rFNV5wyZ;H% zJ~H-3BQ_4yeKj&Vibv;@L(X>wgYi8GIb)46+ZF*PX4|XrumrV+IL+VZdz<Lr99cI`dF+Ng({VpTw(^)|3RJ)W$h@LL0Afm{!#0sZ z5GDRwob-Zzh;?9`a{N1dzaFPd`f(T>djR-moI}|{&%a!;Taj`0jZ^&F5vPXYY(pFl z-a^4^DR#At*MxX@(dMy@h}%MO>kzk=Vyq{8YYcpQ5f8VJOxi(lzC@faD0l;c{p%^V zUoEd~r?^?)(%o20v23qGX?mQp1x0- zzC-Zw-4wKwf{?Kv1)fw7u)iL3p1wZolW;Y?TB+E8MhKpV;q+@gZTQlwA3uQz%^x68 zG!4l7Wid*iDz{xzgCTwCMxtwtjYgW%i1OTU8;;_+kv2p19)QdVXbA$uG)RZ7jzXxB zZpZO@s58@k0||`wBKo#%uX?Ipu)RRvJ=9*+L>Qtk2NQiSYOg(L8E*f!?S=B1+6zS9 zL+!Pb@KO7Nw6|SB?Z0R9CEDw5#ELl#rFFCyiuzdmOsb4%FBEOkIzmJ3b(GLhd+kBX zJ%&zjoND$pf{*W{pdA#1iadtQAKN-k*;RvJYPVgY-Ox70xY`YyYnn@xkAm%m4ON!1 z5UZrE2UMK0=A`w+2jf$YmVeVpl)F)JzmAEh`4E1_DWZv9G(za?-0ums0M7>rG#@~b z3@3yE*2nY2Y|X6d1iT((2-_MyvzS6RvRd+@DhD?Y;cLjiyFtB z>9tPJ;BdJ_|2U&Fq|*V+*4I>#9v&8{_{vd`sTlRu2aqAcXyCx%M^{o|o4L9Ygutz# z(8qJELJe@~H;xL)+WI1mJf5FOUUt_A?QHhk%#MGdv(mJ?C(>EzQA~dESm2vT4@#Vs zW+DLm&_Dlp$+J>~Y`6sZ(_ZJX>^ckmcn2Ni|39MVrK*!0!;t*|z^Q-Tv!pieG+aLpr3t0dQ#|83oRd$OWTagq7hn*EzrTT%y*xAJTfd- z`(AO=i;ub556#2y#p+arJ-V;v1=NN_nrNrs6aH{NtjS=ais`v8yKD=^HMImSq2Rj-FT#AeI zvA1&RGpzhp&EFA68`a>{?@OR_yka`qd<+#`{UC8h2D7!4ePFieoO{V1#6FzQ@qUNO zAo_b8K{cIoe<&b)j#nkzax1h%_~;x@9KAwYI2rv7dj00Zv46Y{kzn1BWNLmWwp+uB zx1`Mi83NjfqeU17;W4;_c!Uz0p98){$R6y}jLTg( z%KF@k9g6>2b&=CEE%F?C+pKmNVCjegWoLvh^FGrqj3X)8+p|0R>vFabF)@fBB|PA( zf0o7(By>+N!Z^})_#V6u-F@_1c+_Mp2COf?AP^YvD&41Bq8PT_tZ_sWa=LE{* zeue&G*F8jlcuR4Ya7%LL2p_tdHpc4IhY;Qrdo z0cpop8`Lh&Wf;ha-P)jgsN2!rZa71!%AU;0!hI=KY^#wNJ13t-rk0zxxh=GLBjwVX zPniC10}!PD7+XlGmhK@ubT@bMZADZ<>g3__aQ;66!jx_nZb|7~!Y7q#&l8rv0*g!g zU0rz-2mlT2JNS_34mj@snL%3!Q|bmKP#C_nS)(s?6Z&THmjp7);6f^-ClL*NWrlA& zAd}R(@-m8xe{jwbF4V1j5ka)_#Ufyd5kTnhkI_t+M z8gv9Kc@^F$#9JPee?Cxv*ZVmX!gCg6+tjHF08i}4+SFUHm&6dFhN z9xgPT^>9+Aa4v&W6gtO?lO`=^4tkX~s?48+2j#GHD``k=^j!my9mx~KBY6QYo)4U( z>Z8h(ibTp^W4KFCtZ~eZOvGV81N1^S=W5?UFyQ#~KC$wTt5m8^`AYA^lTEAf%1OZY z2%PDwOOl-B=Oc=5hTL`#HugDq1HAnpJfxjQeYC<`vcB1d)q?v!AqV7N%@GWNIm}^P zc1P9F@gN>b`WfJ1zLL`{Q)zI_%?Yc3NF@i8Nv?JXA{Lb8bBZGG!=du{M&i~{t(FV4 zo80NO5crp$jZi9{L{yY&HTLhA4Kwg^_$QIw!R??3YyFpFeLWth?#>ut~T5KwVXiyvvpLR<*XRlZXqpT}e&bE~6`Jxxe zeW>KWpWnTv{BpT|L_&)xi_@-9m7 zpDFV>l%bptrkOGijmOtc{SrOf492HSdF5QX{o+jdMa%p`! z%CDVLkswJE>h!Tz)M_n|5+CpW6JQ4EP4n3++f6Rnr1Qu9U%)Ss?zuE8A2 z9PRiv9BpWum`A&CoQ~rq*q*cldK5h8rv+wK|84fkz2F;YSF$eTyRvK@eSdly&$VjI`uJe$X2QN5$mc;FG?V#1Lz%RB#LcmGRHTzr9Ie( zqR@8cN>LOzp;h%P1{#WD6Xf_moLPo za}aMz%b&uY^h!MACHAB+*$mk75bO{d!$6aQN)Rt=m)`{Wjgw!i{DN_#co1}xyk-nk zBz~R(ee%tX(Vcyg0^QK*&=`UOb3qPJpfg7>H^!9$!W8H&+>!#_gzr}<&~d>pQs7Pm z|7Hr{{Oji_V86#qfveajDPY5x2vT4U$N>t(as)F4x(NtV;CI3;DPR-6U!g#Uzx*Nv zMj-e%Q(){bQQ+FU%@l}ZpQJ!%r-=fyKn_qq;Rt35*aUvQJVVRy9$e0^|S%VmN}C0-XhfDbQ26B?V%I?^h@g@!T&` zz=h!7N`b#I7x@bVp=X|%2(j#wM2H?@BEk$%1Vo792xcN&As|eItAtw;AzJu;g$U>8 z{~{5FRQ?|j;VqgPe}M>BLFFmb6QbECiO^xNi3m@EA|OHpM=%qiqku3GY{D&x&_Vcq zg$SqT{UQ+tf=0i&CwPB_2(~-TMCiaiNrZMeCL)x8A|S%~krdrbgh)=JG7+r8Es4-h z_e~>=QOMJY%n$164^i)0v01wEAABc)0E40TP$tjE(NC+6gh*Q?HZg zAJ>4@`69WSkw|ae2%>9Sk=~OGLt~Jp&LCtI%5S$_z*;X+3GDA}h#s?sS$s+f-d>O^MIef*#wNK}inAu^7B2d{tO!B!ls zWIj0D+*=FS2LchRho=({_=Y1F&{psP;Ki1~R$RU@2Ym}~xS@h+w;${bh21#fgrH_Bfxly5gaAfM;8&nh!1e=i3{Xmy zz%>lqA%L*mWt^WgaE$dM;3NTr@)&1S z%E|8)K)VD!!oa}-m@I*RVqmHO_LIOo26h*~{t`HZfy6hVni&#!I|Gjqub|~*Nni#8 z|096eF3pFr-d6fv20CA`U%@3Xf$|x2fciKdv~!f-0oQnP>7O z86dLcYNuxvEi4ZG#r^pBep1f_NIrQp61j?ORmr5yFLfYu-Hp>b;i9qiO5b{ARt#p7 z=4*Jb9@A~%w2lMy=;z$)O7GM*eI_;gkEzu^^oGj5_GQvZ=Y(TITR;Bn0@Bt$u1+}F zgbbCck9$c<+ZBGmSVzc}s%KLLE#N#yo2}IJeYEwsKD=$)yU_NVsL4)S!jC?@E+c6@+FsjiZnH(etA-mT z)ALf39ombOIn;WyQ&R**W5zuwuFzBNiMbU5X_!>S&OaqeN9w=V!&DXT#tHRbszIph z55!8@{70A>pbp)+4w26}v}(7vv@7?0r?>#W_rqs0w3?(d{_8v=L=QeAy4{fk&$JHV z+F3Gd30T7SJRHbKIzzSC=A5uo3=`Xy=co=l)d_(nl&Ne*H|lm_CHGP$s|XD;IjvS7 z>HYAY46QC{kH3$n6q&TKohgjKT}ay<)xMt9XD!*`s~_H#k+g@*XAsLkOKpZpVmW?) z7WH+PM6G>8t#H;7e*EF%hFOj}p|uH^^y01{`KN~nwXjb+{QzlFly>DtM$wNNb34>*@$k_Mtr`~y1_ynt81%3f>a&h`B^up>OvEI znUPe_@6!KID-tY}`(Z4r|91pR4FEGYZI-fttU^lu%s2KYR-yEog1oq-t?GpHKi?(K zm)Bxadp6sXrnpd6RZ33B;stPMn52VBGm2$pJ z45yyq4Gu14J{d@Ync6syr-VvgN$QQ21jcy2-Vb{-v`tC1&IvVQh-Cg7an1JM!9#0+${B4% zO;Subs72L?DNy+m!t1q~>VrM2Pg%knP|}mzJ+ANpTD^0^dO4sY7|D7QRRk`YE}1Z? zURqaQ@M2O~^*Fay_nBC(AJ~qc(OZr=6zgmrP)RwJ?4b!wNy=Fab~<7J@riV73SFK3 zw-Rqnk0j*m#`9;EgOlOcXD=oKqlaBaZ3t_wdOyzktJTfTR_QQe{rTcp`*H}gdVLfr4MVl{PZsPypm14e ziQ=yv>YuiHyuO0JF)`VXur&*wbFJ3)I0CR6_L33t;4akga16tP#%xx6H#qVcR>#AG zBQqQk?Hv<_MOm-F?XK1IW~kCUeuA4K zfeah({p&+vEWStDXVC&-#mSz}g@xpJk&vL$VsV&Am`Ikd*C1hFHBylj$du|Pk&2)) zRh&p=r&NbtlBpJOsy;?u=caNY2`W?VV>~mGDb*)P1#QBB?J$6bjbQ}h;@#&N2r6II z#OS&O8R!@`E20Yi0ZCk}csYWO6j=3Ax158W&qZC&?Z)YYZrRUavID+MS<4QHzKICU zui+jb7bWEpFx^6*jI8Z6l-xWYVNt?tdN1hC0nI4OL#CRkf9;a6IeV zo`P=cvAq5bZ4}*=C@DJbyYSKe_d)D`HTNO`Tqb};1oXU0F^wB0$k@d76Wy{$l7LS| zya9-3j&MC9U=N(Fy}ujzI$GCaFKYR(7wM|VwDdi^=WapjcsL=AIQ%?G0AgkV7q;FX z?4qr=OZy(83a3`>yYVn>y(zQ9cNoKx2I(I5VOTm=E=CN?3y|9%)&|AW- z$2rsg!`2@!into$`Z-TkUr9K9f4UL4bT_p?wl+2ccdsfHgZmJN4V9}*I8@I{DxlpmCW* zWQUfQ813@(bI!#I-Kc5{Cm{!=Vlt*yS4b%cTp(c=jH zSxiH+?gJT&x|2ZaRtx}Aibsb_M3NQtox`+m(BFQX$5r1Af3WJ$9j5*!EV1a8&z>}R zJeijl?c-N9K{jNaVu+Qm- z87@`xECx2iP2JCMzh!clncPiqr>;XnA33Nk!;lF>==uqEEP=y660->p2t5l7(-p4p zYDf9>Q@AXW69|JR;nWurQb;&)TN^u3+FjS9H3MrfadgQ|Kcti|pv6NU)`II2+E4x7 zSrj=RmzD*Z2xW(o4)~mlD9#4u{&g#Bjc0k#XpkG{KTBHUwtiA;ydxawf_O;+KQzmK z7Zc{Y1&zl5-z%nJ%%$$(3SZq^f<4Ve`OFvjYzKbIr$wiH-oIJq^A9-8`E1^gd^Q2Q z$fw_h`4DwvTQs*9*`13l{yplW_owU0(is?I@1`FpKIu zAo6Iw9Fa|gYR3)IUJ&X7U?oD;%_Txr5Oz}IFTDWsTi*inn?cN%!*x+N0->mLHvb3x z&XipwXE)>)(f%^Ke9q2hWY_V6?9wT_TY}lWl6>jxXk0WuDzcO9QpVMycKI4vP|Xf& zRI_(dsb*-GzrkUq*`|HS>I-BbXqF0Bs9lPOm!Imu?L9h(_i2fDA>+N%z&rQ?yi*A8 z8a$O|^v%sEBhjFF4$}{X=dE&B2*TV&=!Y5DXP_@FT)4 z=ivKNSE?An}4?tr}Eb~}@oZ2R5_4l+E?@S9VKQl2g%QCEHuv~hV z*~LO2`JK!fW9cmc2{2U^0ss;V)7sbrZI|A^Q)1XZFhcXvTPYw|e{Mv+!O1x^UALLQ zc}l0bo#tbXL#@sZ8gcBPvA~YSpv7uc#324A$g0-!L%cZ|h%bQX$p;M4duW$k;(-Gfu*R>&2*J>iu z4_Ky$&1N#C0T3k9!SBpuI_N8<#GcF|M#yB67e-DH5M~QYgj=@zgTg1*-XDAe5~;6@ znFKVE9AxN8wPGITMct(x@%hm^OnlTNuTjdkW^pO!0}w1__64PEq{N=gm5k6_%GCnG zrTkL3WhtwLFIdWjzvEJtf{_M~J#Td^+I|=A?XqTm1TNi$%bRji_xt;_-M?YERg3EI zDou(reGNyRg~*D>jnu*UWc&!+EilQUyW(-?mKPs=JO_gBc1(+I=u6r?6?a@2=|z-n5YQmFQ%$x~(1Jf7;daH_ zAw%fes@TsX_4#aigcD(VauoXkgcp8`gc}`7{ziH#w084eMDDa!DX8JBv+;Zl!hZlT z{|7j}hnVF%#ct~ap%%<$JOx`&3i$Dtzf-Y)4JZEczXFoj#5nrRi^C&5 zv97o%%@r37*Zpx;nEBq;EibN1IK0_$aavv+~tU93xtoZN0Xsq^ujAX_@k<#6BOW& zG4&)&mpvIp4ODOS_aKbN#~2s|^+XsFokbbCu3`Ftd{oOsB#6!K5lMwZbLH0{5dDiO z*`V0dUV$`IxrfT$m4Z-6qIc}X9(ag0Hm^rC;mGS@Wh7k;B(UWG5?Ni`{e@Z=?B)JI zMDBsUj5I`dSC0fvnP{Y>AyrU^pL}n&au3Ev?6e-DHG1H%*A*X$&B+{^{8Vh$aIZ)t z-SXzifGG8hZ{{aIp{bai#_%h379qOo>4Iqc5UobBM#e#2TZ!HmXC=WcIT9!_JWFV= zkOc(#O4=bd!w$(<1P9(2S_J!FBc?38PtH)W2#yzSInDe*_~bOx>g(GRiy-aPF5Zs0 z|9p&UV!3Y?#3`Damf!M~wEqoL=I!rD*JK`ME4R=T1d|rraZ*>4LX2s61LX3N>SrCl z$n-4P{Z$mMghRJ+dw~YMz(Y#~z6)vVfh|HL=#XH(9uHFeGYRU1ng(zmE-fRxE;~Gm z7!g%pxR`tW(zocN<%LJ9T5)(6z?Vosces~HccNApo{Y39NDA4;^z86{)Ux6I@tYT( zfsiaVa`H?I&;IOLWT1MMhN1Yrh+dd~18dbHH&xl0zE<%ZiK2acVWJ92dZlk{FE9!@ ziy_`ZO@?~1A3;(Vo&(c7R7HInocgOoG&Ot=7XLLj*us2$FsbuS_bZeJ8kn{CEw8hX zu;e>59==+w@6-N}Y0-9=?u8-gm$n+xh!%ZB3$AANtn5!HwOZ(kd~+@GajWp-W_0M! zo5AIhuS zftb`klq$7d`RTErHDF&=^)`N#;akITn`NK%2#GL43?Qa8t7VFqWavsi-sXyhDRv>T zJW5qoWcjJF%L$z_d=p8pNz97BF&v*5B?z`$+WTd26%Tjl?IHQ1W^UGTDqyM~<&+3J zU*zH@&Wpa31AUp@^2*J12wlm)F$-`HNm0YUf!%tqEV7?FLj2Ekvgt>A*HvNb9Oi4G zMk1nU@Ckk0D!wydTd?)SodI>^r!zag*5`!jS|5S<$EU%v0Bc{u>JnI0$U&dMz{b`9 zk*Gs?eH%F*Yir%jC`XVS54^H$W#13+N?4tn#s@H=)VLZ_jF#6&!bo-@1)zuKgGUF# z_x;>8HRY5^)uGGZ2|6f*TE#JBYQ~g92r6f%b^f-3SlJRf5AbI$Lm&WlBz{kU?fy(AziUNZEO z1pJd3S-lzAscQ(?c7ZHZbslfv%DF4WLK%Q?&%iK#F3BeO>GMxAeOf$a@3DQdvUAw-_c&wAHbnD{CUinz9mv8|QVOGnK=D<4 zTWWbNPS1ac@Lv(C^0>-WJbCrKTqe-Dpd0nw`!2KIl>=NiCv&vqpJ5NsCZ!p zXIc1%Yi-r))A24XkuDfjlH9c7;zJ8;l~^QK@*>&Nm9wBen5`!`!*?Th-_;l}LLU0& zwSv<0GE}yt)pHCJlGE8&a+^>!NF-myK_rsbxmn~K(Y%( zj77l9Ka?WiW2FZ1w*n-HKW`fmKfnhuBm(XZOejVN#!l;?Ap(vO5Z<+2Dco`$yj=K5 zrT|oQlH^+-N9%#r5)D&!#a<6yQ!QUfs~B!(09>v{R$htV=XJuN_XxIBX#xg;JVBt< zi-?QwLRx=lT_IG(*V3C0YF)M9wCb7DS{~xG_WC<8y;2)PY?T-f7+}Z{X)_n`?I#U~)hv8!c=^O+L$~rG+Dekh1RLyzPTAU<#$0;-1O(-aR zTkyrIKploVkMFZCMCX;%seD((VHSCnIX9!LG69Nj3uc9i5+iBO>X&MT*De<0P}Wzr z_7atY)%FE7F!QG&v|lcz4#Y8qM5yzfd7c);vl_h~3eat*5R~`W3Nl(c@ z=1Ik9W8M?NDdaT__VdE~x8Y0WBFpTl?_mr%ao!THxZlMwiSE81c!^DTm3*E;_}Hx6 zF~F4=jcXwRC9XA#%>&j#Z0;OTnApGgL3H)V- zG7fVDl4lt2ryds&<`4tIEl0*t;e*MVF5Xl?b_*G1Fr>5Dhnav2_BmSv=`5vPA z#gkbgaGCObNEH9@sS1FWlB=CS z0ifLOyRs8f%DtMFPlBRdz08E#$UZTLt)|YbttMnmuGT!sdNu50vBR9^jlW_1zOYr zTkSoF#wUrmcnZqq{jxX!n&iv(bA-dd!ywW?ScKTfJ`367)**;B+oQM?p0uX{2uj3mYBbC3j`_Tl7&-uq zkb01DSH`~ugy+_k!YzBy2f`QJs+L<}oZ#NC%=oTG(CsLSn-qqio^N(#81rZCFeyXsrvwU2ZO1^5z)_jA(G0VriMYiY|Gt-q#+x zczxQEC~aD2Fem+%s9L|y^q^_?P_RRv_6db|ck2B1YqfsE!Dgvg$KSr6H>F;Rrk807=pXok|#kM{zFdq9-zSv;4)lPTQiim^tVtjHVCMKqUE7BHxN7c?mDC8Ou5cW+?J;)3FF`L0(>qP2w5=@S+#%%2hmb1;J9G5) zw4*S$gcy7&by<8p)Uom9`A4z8N|T4;p&O-~x+^jN_&~@4(?2GO_V)0BdS3dH)*7t+ zBQRh^&@z&sZnw79KqckR66#7{(OMH(d^K*_Es@%dwYZeE9a0ozr|*X>wO%Cll3+Nx zKD@PtWTryg;=VtKdkxEt>w(;=xMu~y^_;2&sS*_TTS4#!j@^RTS&Dmo5Zu7Az2Oy& z%A7+%=oXIbwVte@6Go^UVHrO@Sg}q^-wqIFC?$zW!Ic;#D^X)qA~K!iu%{r)trp_h z9HnbBd>hF};{1Aez9$ck4D#tvq3aJg!@!(HXBca6c2N#R$ZRD^wn7rO0;Jv$Igj-6 zLBp6PlJ{<)pF{L>0*Ma+>rX(I{}YZcz9Z-XoRk1iNP_ED3Zb6@*wWy@01hwn?3j2U zitoA|aW+#NNX*w$C>8WD4lv054OK-cTup9tlUR2oQXv6=I1B-BD`kh+`{2p{4*72* z=mA81Gm0`$@^_#Y@ewd$#;%MeAYwo+AN#76V_0KKVBm>durHy^xQLut7a93HrD&!j z52bJ|xp58?>y8tlg%1L z5RwAZ@PIVdoecj#-Ie~H@&OCbaE3@h;oG74lSPkbI3vWECdoS8FJnm7oe{-}lO&Jk z(#MwOhM$1Et_d+*o<}N4qUGV`&)4zq7>~@0fx+Q$T*4@Lh34Ui9@@^+{YW%gsE3I) zW)qDTS2`WxK!uiu-$etiVm@$OI$4uUhM`Hx#E4Yf4vtw%g?4eWu%Mt z$_y`<4JwY2!0VFDan4BF%WJ*Vd;wKhq;1}ZpP+6TBwvdj=@eER#p-2{1C_6&T~pZf zdm$a$-ql8j8JN^bOKZR@lTQyVW|NPMT(04XpzXd9NoyD#xhC^@r)$q90sYNK`6*d0w^ zpV%E0<8rh;zWbs~JF>=(ytLlSvCKQNKT1f@-g86{fOjK}=*X_Wa5GzyE!=W#y+wvZ zl{4EMrc^Xy%|nv2A7Qcgq+JH_735iee~>wVtcgsJ9bg2YRC|J=Xm!i2;HZ61$Fo%N zZ(Yn4t7IQlOl*RvY84$!RXd4#BC|4%XRg{T0pZQ&^TI7lTp@hm26Riq6rqzmAP4ut z&&0}tS%L+FGuM#%vgtw>sqX;ADo6~MQXFj-seS{{U7NK?xDvEkuLxI^Hmj0d?X|%$ z_#7Om4aTY8;Ap&8hEEr5Fl;*qTeZP3&b>v-J3jLwfp1xRR0ukAnCpm#zFyC=!aPVw z&X>m_hN>MnuD(ff6TFvIEAE7Ywkn>Xz+7or<)GxRQu#1t4$5-sco+@00_v=Ws+GS% z7(9cr>jq`BIH7Kk3J4tpji7JcpnM4~l;HaXc%lSPlHgJX^M!j9QpeZ+ahO)V1Ygzj z(PDgfHyW^2-}z9OQFsU(QGVa;SisQ$!%IR9P%#6Q_Qgg7_h0NR8sQ3;Ui05^72lb4=jPphX3I5FC#E>f$Gf@-CAOC^DC^YTFheuL* z>(H6_$$>4e8cccg{X8U(0}y1&->L~oIZ4O&79>VKy+k=sKjS&{>jZ>%;y1G!#r9t% z3$VjVl|=!-pnr+>r1L0QrS>8rzmv{#&{p5JFz)iCpWxC;?ZJvVHQ3M{AcZQ8@rioA z5US_nMm8i$e~|MbeO|d@b9KLa#gM4S7jbnX&DC9A9n$N?(S>gaa3H&z7%%TZz*vJm$c;e#IeO|tU4l~Cmy+i_fRvf|_@(o(g)PdOk;;0c7i$?@Z+~5DvSj;Mb1&dky z8(7S)#A24K`F!==XfeY}Yg_`1Q5YV4Ic;fkw?-5~tYgiWlY2`bu;XjolZCIkH4x|t z_ow)NzKyC!15wzYtJ40YlRn8B*pw<{lcSqQUPe}bR?FTDC5-N3E;Hie_Hn%50h1M6 zZL|fu0H``ySt>R)hoxdt__Z#ZdTyf$eV7VwrBqn0FA*zXtKujL z6s7&oM0uH`FqJy|Oq5bY;erHgqiH>%+yb^c$w^oPwjt!C)B#%tIl0iHNw-Xp3FL!$ zYsk-K5#b+`pEDNzH{eeV&|6M{-b)5P1SVt*-#^awRp{@yOU{9}JG2&Dgsgf>4q@{4 zjkt;KorZG{j=%9pr|+@#Gyv)La;rH#?sCUqSy!B#{zUYY>tJFA;SLmwvQ&L$846E& zI1wW!(UT$2Ejjz#Pq^5Q9$*jVuWDe%lj}7Fzw5N&q?2|}lr}Y*9(YbHcB*wlXiQ*5 z9Ri~c{wB(AGJWfYP)Fk-Ebi+EzVc1s|0gKfel2u=^vpx`$O#TxX1+!@J>voAXjqB5Qv166?;jUQt*S4e~_$U3pOeFUqFcxVv9`>)@;BoxcK@e zh6lr6jwcQ3W~ED zIzJE1xAC(3C`xf$87)+w?yC-Tfi%b(lh4pX(t;XFht-3C>OXL2OWgS`kL zptT4}mDbS^`{bjW#}-+$^_!*9aIMmJjXp>`^V+9=szvF$cgmHi>y*Cnoq%0=9$7;C z*e6lvbg(Nh}I9Sy0{eRK#>?f*k|QcHHyQIz5sjK3kk!3W08vAJHfc7vcWfUsuXL{PGQu095A zO*u&?DG>tdjw#k$uWt=ChW&vC#K=K37_tj<=rt@As@V`u8oo-6EeU4V;Y!{XC2zBk z7oi~e^bAt3%~qxJU8JpBl#J;*A!zY?LHjE9CKMes?bDE})oRB@mG3VNRDk(kKuw2! znzS=%yQmaZY(15|!Pkq5$W{D;0NahqoN^@XmX%pUm1*#uY`r3kDzcsH$~K|ILdYuB ziGo9mIX?&GC`2!y_NIhYNC+yxM~SKFaR*9!|2>pa=>wS|wC~!s%URhj(0p#&UUX>I zGt_ALpq^|vpuEB#N!d_A&;(y1nqprA@>R_dSnV#RxQ09#xCp{jPW2OE&HVch| zlJwcG`~`F={MJ*b1|Y(&cpLP~PHIJe3$+XNDHhqI$;y1s{3x2o=xmFO_G!vaIxZ5e z29-I1ZxkXEkr63*JJA5-i5;~-wot8N&n-jM(a|BaCEEX?I+*k-B&Bh<02C~fIR4

      bw`pu&J14Nds_ptYTh!A3^=yV^o`3Mj5JKrx`Mu8aoZ@2eI# zm3g-jO02Cs1u8XbFcvnTjbh>}=uM)D9!nygQo^D|M^yK>$8r{l<%~QN+b5*%!v2OR?7xonTa;L6 zO+$s=3T56nEMB$Fq9M`3{GnFyXlN&_)vkCf5$`kd0@xW?v%5Db1#74?CFLxJKQF!o z8s!wRI~*H8YAnP{;4h31QwshAN0;uT&JTt5q)}eHc`?GN&n^RQ-E}3e8dFeiR`WJ% zePh*_H|M7SHB566uMt+fbD&#N?+>jI3VN^khGC!Y=oM}B%YyU8CCEtii zR1VM6i+$mKi6uM#tnUOgp6^NKu( zss2>p->OF31H}*^erwiGU;x@+0W(8Qgc;Xrr61Lb5j!aXXH9}z==2rNLoiM{?ZtPm zlD`j5AG1w#&SV`QrP#m1xFs_O>!divz85Dzbc%&|))98a4u-wp4E*OPc78NPWz(Rs z-N}jZh>?eoNyMs>2@fu8fwwdR-h7S?5MD zlIco$I>~ARt21JX8#68|-lTj2Nw4k1Gd3uwtXLn0T4eN6p52c=>X_RhW1#Zv4mb%d z*n1*2%Ww9h!qijz$styq=R25uDRv(nH7Hf}(BoW%6HRCOCdES%v_VRhYic_H;mDgB zQC_o3+uCbW`T0OG){VoMm79sSy}9WN{9>X;CuGYgIyvI}sX7O(^d$1lFj`XVqcI$K z3*uXR@C+y`wj*{f9<)U|_&bG)IIhyM0?Pv^lUvq&56WMO!s4BhA>rlTRbmP9B0tM( z+`PoNuMN`enR;;6&F64tgNf~i%V~b{hGwtgt3%U|D`HZMv-*d2&LUCb;74bEu&R| z?h`^Q&WOM=3)Q9gCpu1!oNFn&1;d0!{1+7i+pdq%uQ^eTw@}(iWNvvBl6Lx{&s;c)S|D<3s1I|_RZHe zA$19LSGnJ!b#*(+hC%4V-!Tlt1oT}xW>*TEl%z*0@x=rdI~sO^;D>PCl~RBm3?1?3 zpTHMmD1R$+O(U^I854gqEO{|=A*!`^IqZ^^0$`#6{=j11t@?p07YXy5X|lnB17|%J zofOJ7iKkf1a!oW6zk(^)LYm9?ZX_U#xdI4j7!QM;G%zkPS0@XQM;ZX-4GZ(=WHmQt zwQqVe@rhmQ6+7*TsRFr8C?a;~{BW6KUrl@psYMiii+rP-VzAg?V#Pc}lM)IznhK0< z^s6*4VTQ!Ch&{ry-=CqiFWxIk6*CD{4*=KuA{HkuKYJxE1`(-H)xsQ%`%z0Mmj*D8 z?ks^n=Y*_cEKny=IK6i+Cq-g7VW{WD9EN>|tkXL_t`o2clGzU;$cJJr#uqgmjT(|3 z1(q2lAFGs-pNp2v&!Hy6p0$vsJbHq*S2Kt#3%ngLEHRQOa`nSz2vebN@pq!GTex|x zF%_^xrn<_tW+7FX>pBDu@e~E>3F_oP8(PZ4sb*A}iyG)Z2aE=il|fIU>%@-Xa}@NV z;=`=<0jkp)EV|Su(ObD$Xu+pWng0XT=4;eu)MEI)p)QM(=TI52t8LmZ%HKtne+_Ju z1E7x;q(!&jq8Ey00``0~6Y1GmMZ*)W6QDHpQOc#kii#(|L%3Uf6~K+0s8rOvKNF3y zVbY}0cJJus;YeiezG&~Z{BHRn$RJ{K(F=3DdS>@VTbS~R<#Z(G3TzPYE@>5$37`icvLntX4WAFrpN*CE~A>@pJY2YpuEZ#Kf^qZFH3K>1wAQo#@j0Rg=xy zW%B$XSHFe!sy&?PW1>oq;h@#3>iwO1iQN&%ON_#C+c$W&YvfqGPY?0glPHt% zM*Wj0)13(yy;H9{;sV~@=t48tVy9p%?b}qXV7#gia8|whj`&B*LQgh!DEFRlp8Q^| zJ_ydH9X60)$yw(a`;$1LV&y_w6L8N(1Z_vKm4GQ~C=E;}i)v_1@FGX>fst7}iFJ;g zNh1JLL~Qm*X~$+Kd&Ty~bECZm=p_h5SsRubd5 zW(PLLtCdl3T6@2M%Lg!qu_6@o-r1Ynu@5vTcW=jxk3q{Nq3ac6bLb8}bhOV((d+Gx zcyS#8?q|as4mP@Q6h`bLm{o{X0~=|up3zi_Kpj}mZD2jW0_&Npzp*I{^(CIu3nI~b zbi{Oi3^(DzR8dBI>ch0m`Fr3>0jQTX(D`GKzpTL-q~e)HiNRkM5`PItUf~7&B^E)t z@wfo%3yb%tf)8Nk$tSk|fif!V7O<6vi<4;f`EKm^Ux9kDfcGJdm_VNJM%lGsX(=htlQ z0PY(cN_Xw2IgWL~)&>6WZg~jGs84hOEX9CrW>{%gT<}LlgtaG;F10aWyN^<9ud>j< zlNMtW_~1V1geqU}HtO zp2n`#Iyj1c?~bG2VRm^N0&|cw((}J%foK7QqWO@{?pONmHts~IvHGupzA5Bz*512d zp$Kjbyh#D1js;t2%+y%n+Msl%r8V|~>UI-_EHVo8WxrsrC@^53GpzIqtxjJ`%XPqZ zbTC)#+o`h2UkatVX`Y0+MXIjBP6XRZ>d^sPXOI|#@ffM^4W&MML=tO=NZl!z8gGXO zY&%40Kc6D==oL!2!bll&iF~Qw1#B;i)Grz_zrC3|Md#F3$Zr2X_TD@`>gxLc56dW8 z;>-X+tVFSeHdsKY(qc802+@fog(}EI6QorXizp&dT+nEUI*!rwqqN$(&{nGbs4e|e zEiPbKWRT4uE+D93k-lS4abpoAzvt`R_bdT|+D{+9&p%%tWZrjQ&pr3tbI&=qOO_sX zk0qLOy3jcbn9`e8UYSh&v`d{+5Wl8lQT*;ot*(TY#!0T&QOSgNx`bWgPisk{ep@QHWJ*pgK_3=d zFGsMOe8PSKp{(8OuwXz@XHXOe!zo9Z z{e&J3dz*)zQZX|)qps;NpZ>zi@iW_E?>6TQQyp_v2Q|F@foj+`z{=`Zbm?*_FCwJx z)1N~RKZ)g2d^mio(8$A2<+tqc!J4&;nYCdxT`mH8)v@@{RZvETw&TUCx)`%oBt*x- zcD4T;&#r^&J>&~|BW#g>VIqeE$n@20B<#ayzodyoWeQ3Y6Lr%?k1=maqBAjgEK^BX zWPEdNrMVWC#D7{6zhZn*tk990K~bBKmlfdwuln{9e0uYv1JIkJMQ*-Z6hF5|q$cp% zqDgH<#Ki;{r=yAUDh9yn@lNt**~e|c>K|)pYVv>3lu2*qnosoRV4CKI-Z?_zTaZaS z9E(;Si+P?RU?nWe7f%c=>4ASE)Tzl{@<1lNSrj{S5P#URJQJHCXZGL^QMNNf{B%BDzy5vOsewBUNSIP4!a^!Q=rLz(TMSDnfwBG;z$&XW%QW* zg7MA2uEZt1$(q2ibf-8zNH9Hva`AgXN1M?SrU6A-fOtqT)ZjG5Bak%+XAo1n87Dtd< zD$*b^=aeK!JV2-eiIKm{1PP8CAhaP6@2wp}p7QnsiDzAqfy7JB&C@=&F5y8?8v73y z66?_TPXZ)Rb?vdB;CSGZvsyCXM8Rc{?B1W(WHR9FJZY9$%Nw&$XO?`~uWJ!klrVoZ!O| z<-5ECKjUN`DpcN6nkK>0J<8V<%-cae>WO|zKDgvoALWL}TYa3zDHK%?5_9Z;$5c+_ z1092KdA@)3zO+Gq46u?_Ho zpg1_?;%d1`lN7dY z&-m&V4jdu*t#0Q_`f6W(2UNg=_bE+H{$=lFuGKN-W338Tu+rZ3Mgrw2xZON0SZ$A$p0pjM`}3g)a3Veep3e+=*OY2_OaxS z%tx~HifR}GotNh91Vu^Wt*9L#^SyS}b-}xIjKQKdcN$G$>n}GKB`1I8EJhEDmwm2w zS8mSi>tyr!eLY=$9sj1=txOSp9UUjnMV89?>Pz$f$`4UrNpO|#?T>r7bJMevKMvk{ zt^o`nJ=>)&%K^8TYX(Sp0QM!v-N@> z;Y`~!MW4zc+3xQ?HHpSxWs~zgK?VqG8-{4vk{LmGUOTHiqZ1$2jjGDhONt`SdIs?3r2A3wxz#Phyajrgr| zryKE*AK*7)DrtsTP;w*&nlG~vKgevvLktUfzVC|37>T}qh~J1G`Cc`mlXIsVag-n6 zH)3$nDPsmXO$Aav)sQ(Re>Puca~@coF(yIRockhxpBT)c2}6RnDDm&K-V$ zYtBQryVcUiLX*RCjQKL#(IvATw=qT(9dadQ3`1Msy@#njZi$o!{Hs z$=Z)LAGJ&4peq%_Z#JP=FUC-iypzj{@_O&L)Gg>mzc8c*^LsjX^I?%wLZ%1b*^dmd zn{~*bzYfaJclT_z6$g$lNb%ad_h|wKt#3Gz=XYvuXt#&c#|zUsXL-LN99AyWZvNl# zqh-VirS|}lqq5h9U6MWl-&CGny0;B6;R(i?>#BCP4c>Vcdu~DOB@VVaD&|WNCU|!~ zzm#~`JDH%m`)&Dbd_MBF)iWd6apY?in6%|vcsJy5Y>jWb zZ3S&9j=k@#P%&8Gx1t5#ZG2O;^IV9LzDu3kKMlR$d^!!~9QH{k7z%LTc%A^OP9IbE zB}^QCjCBO7|HNf%V--6tRpeW?1s2m_N>EXK)%kBagox{B`4x)8H8$iZDu8 zlmDzlevT~0I#kux%HmiLg68=_dC2)V>sE{WkU=FU@3GD2A1)x)qa^mPIg@CuyLK)J z-gHR9E)xlYrm8-ldG(#=B%R{Ln$2o!NaBoc@)sn|=pi}TqQn_J<>%X5Uk+CnkddT= zaf;o^IV)-*KRcPw0krp>b(x@2Z$1sL1pd8+D{V0`yzoOShLOB*JR__)M)>-EHp0Io zC^f=I)-b}@Gq7?P7~D_zZf$OJ%niJh#CBjeAjGA8`xPq^?N;y)JCGXFaV~ibiMN;V zUhaGIicVf`tFs~*ue_796732nPrjlE?nPCdOhvVeJbO>iqW{wW$c_zmGZL9l$2^uD z+MnkD;@P|i&%m(Qx%r%)4`a(4zU&AAV`C=?mDLm?xYn@E+p?6d_r_k~CcyQ)k5DCY zde#Q3&%dH^d6zlrz-Zb~*9<)WSm_(hP)H;;H;a$g+by=>^q+_gWx{6!!*c1n;#z5x znshu*!<yY*(#l|fFUeCv_DPnWOZ7b zdEB*T;DyJe`t1$Uz(5^OFBUqIc{Sa57tZEyCV#d3RiXhfiT?5#>pljUdb1u(urU%_ zTU=wX3WSXV{;GDitN1O~j#G|q(d5ioZfZN=RsY^>!ZtKivEO%{yDtO79_?S2?cY;n zQ*R~MM<0tPywCZgCZq`xHmm7|>kezmbb2(6x$*BGh|5!|_*{L8YKB8ITS&n(m-$jc z+-C*n?ex06d_-0Zo4oV(df7NnURcq)sA><-8$4{K1>S-YRTzBcr1nF&9Qr2|rqW@|cKts5DIk)&Tzkv_dSj~@(zhA=KWC@}!{>LwZ{YDSa{Mh8} zwgahG^w!R;m3IzdzWu}7rLFmqnc&m1y`Rivnr;Q!p6Ne8bB7DDJ@Yrtt>zr6=4^+- z1!}l?u6Fq>(8#pQDI?EPB{#)yn-8qbAzOF{)Z`suE%i;D-7I9r`!B9+5nz7JAs1p= z=iQy#->r{uK6Y!{a!j2%o;`x+IFiV-dLi5^v``~8*G8raH zxbQOvQh_bLe_Q1FZ8R5Ua0<e<~tLCKPQtV0uQI-A4tXj zE**bQI=(jPWU!N#@&dOJNZHeqaf!gqzB3WH$y~ICH%ij+6{+~E((#w2<1bCcUy_WE z4cxPlYHDsAY}9UfwQi z9z3?tEZ2ZBV!Sz}2SgpDw_)2a0t(3aj#lGZmo{HX8nwff4Krt4Cs71K^ z5i{#wwjwy1cA919lE)H-PgpN&=1!tLs9MhU@+cX`^8F{d$vdTRXT@O%Db*2NzR){& z!G8SY(FNxg`0@kY!~&Br0NlmEXuky5VJ}|!Evb!u5JU~sy<+&sL%BQSPF=U(GSB*n z*DwZq?)g7`66BlHv5%PBxljLqTd({d5X1`lVv?RB|Dvnz)iQ3}SI6_`y*s(RR9Ak_ zp4FT)wgZ_4{#9YT_x2CMd{x{>sZyNto79SSY-s2oXX88_VUFgUpDVP7HS-Ld5G_~y z_oTL1wd$5W!_`U>q-uA&;PfM*XCV!%cDD)MTbHn%l<~ zkSdP`gV6Unwf3|j$DTHoEmhK$+%%^D)=zh({V8w2_Sjp^IgfVK_2nb~ZTD6kK*)@& zcE;k^tOy^wj&|3W4VQ=l{>p32iM$XnZoD3^a~GK<+yc9s%pIB#VE(O`Mm$y85z5lH%AvsG~UUzp3THlFl$Z3Ckb}D7)S!$V~)?b#~ejHCDilw0k8f4Q&*Xp zcbI=eN6_72-uIZn!X9BO2_tCsF^MS=se{fwY=e?`#_YQ*ObIBsJIroO{}0pCe{rpU zpXu#$pP4cLy3o}8|2ZiaF=BkA<}Ck4n`J&?l0X0c{eH0eL|V->lrGPNfnnxL!N5;n zY{BDL7)`^#u49rg@HU|i24+la2?Jln!}xsJejxCL3o;Nm#2S+Xft@Z!hHndj-$@xT za4sq3?EPjR zHC7|l%;{l<(ZpChy!i|9P9Tzni+O30*RVk4)7Pd@d69D(DsQ~OG6yCqOh?+k98SNU zYar{f*2Bm)GbP>_kTsh-iG)mVIywz8?3x3}D@*J(eLwmWH`*N6u>VfJs`(8VDG#7d zAoC+#8o$Q|CVS=P57r!sSA_Naje&S^s6#CK%UM#f>4`jK$DTD;HV>}cJMEfBLDt2g zZd~e*40S|7J2*PZEo)F!PgXg(E% zp`8SBs;%6WJ*B>K*Wpu^1)qWCnlt}r>dzAk)SAj&$Zu|AL<{aH%#!@3NHZtD>9$3u z7Wt&+tSK+u0OUEhA6TCA&ngUg&hn%@XL&2~oF*=l7U`Vj2FIj2X9 z+?R3S3H4eE0yTnj4AeE6eF_Ccam_{MYstXpN^g6J9Tt< z5q9)c{D2Vjf-c!hcNSXP+~qa|c668S$ahi;gml>#lsT?bF>8rrXW=I9TlV@dii z^wsp=XKDHmdQ$Y?>nWts#W}wT{YOJZ|Bd_F^xsL)f7_w|@>r={HR-=EFNKtEjs8Ohu?79t*66>P zw&%AwDE(LdZ_|ILBFWZVu|NGMdV31=-vy>Wac0QmnKJhOqWEar{~!8#^k0csxcTLa zGWY)B=1cAUr~k7h{Wl`L_kY?3W_^3@27^Jt*PV zmRN9j{FM|AAK{#i@T;=S*;5pTC{=j|(bw+hoM7J%G;tL+unY0N6||4Dv<A*L>X1Cba)% z&FjHWB=(9I|An!?){`}UB4W=cue=)BFB$U>U-DEN@gq#WFg|bv)khF?K3qJ* z^2Ws<=mq8n=(^)Q4VV1mWK{>!lA(_U+Bg+ zKikiLQe+PNf3t59X=l&Gpcn@9ZE5S>;tJffTs2Xkl)&G*KZi098yM#z7rV%cO-+rN z_6Jk^y{fHwY~tupW-5Kf^Y5V;mc}IIc8Z7taTdkf!v^DEofHY*M-Q>UPhJx5$)Wnd zYKZN=w*KM5Ws{|UxRsCEfG*?W1F9ePcF42)+)U(og!zO#2QjK%8-Q1m4n70r)*_In zBDk`7AqeuU8TcoHQrFkf%QKPZ!R3Bmcp;5Axj58a(tHn=Ma7EA1otD8D}LP+(rJmD-y=ht!D8~s?`#M{`sEZ=D_n>!^7#S?^e^_9)l=zr}s=ryA;Xj()B3C*u4w6za*|-bYQtdE7RNCwZRog(x5o4d*EG#39qVUl#1Q=bC4@ z$?5Oolbg3z(j;BKCj$SN0l;FQhC?GKTWP3sxYy;zI&UVW^9|-@e-DnMRHlQYG0J4> z|2&$zx*~jCkTxsZhBgeq`%TB`mudrTTvxg1kWM$Pk~H~Gj@uNH{$;SYbn#33dZ>V_ zwtn8#7bR93*$5)6Klm!h~_+Hs^Z~M^b4CrK5{Zy?eaa|?mycQjNNt1xnCoo>k~%c{cD~|1Qy@x?4_tJqh{tND_!S3O)2E5%Qb{`Or&I(7em{r#5fuOi3MT^XbcQNVuveO>*1L|O(y`~<_xP1_RZ;IeZgiJ?>dZY zxcU;Sp+#pJ?7on}@B7(%ss60?=g(e>PEO$<+C#P0B}S}8m$-3oQ@A|X@AYf`4kaSc zl`#2qzD|Fh^*I(`Zb$^S{FftO41kmH%w87E%e`=(247mob+8fwm9&XGGcg3g1a+K$ z1Rfw~nfLf31_`(^qnF30yute|VYDOr66;8*>@Ad)G%ys~7r`Wahqg4{SBt z(Fe=6cSmcrZB|TcwIy23_T<5`)wY`L>Vst~Z8h6z2g~-IR|ywdsDT)ohO+EZbccS?Ey2HrP0sD1r@oY^Bg}PmI#{$YS;T!s!_oUn;v5ZGIG7T^ zQ`vu|N_Mi6t={Id?YJ}03emHy&T>(}N#|gtA}NQ%)8Hpb;HE=!Ll)z&Rv?1Yk**a& zbKwjn-;vBZjdv$IbRlhbs^ex}W=F9yo$j4azsa7mY#!+~bqrIfLD(C^`sdJK*F{*u z89|?&<{8%AkeopMyx%L_m+Wd&5F80LW>)~gyw9#V)R*@d8qCY-Jm(1BQX2gRjO@+V zwC8D}1`NC%|6u_XBGGoGa&ZA$|Ay{(&8{9%%PeSlh$`@zJ&QyL*JcZcIx1}lmMzy) zM8^B(M@na){7wsG;itEWp3p!{Hkn~P%k~A?Xr;;P(WO%A?>$R*5QVWF1v}nlId(-j{^g* zI>`o-mv87$tm55HOgQaF1TFq8pX@NCP)Jmz7A&o*7 z@$8hd4O9+k9o6p7RxSHep^^r#?g88CXVOPPXE+visQdx%Q6e;K_n1s90mtYkDCzYBU3D9g!1h1ejn41LljV5@=R8ysm%2urt&o3-cyhfB*g278a2 ziJwMWcf^lTPetE*~&3!Lrew?f^Xc%))ljQ=E9lxwpc zi!xTIvtQreAs)y0b2yjb%~H0>(zk@c}4J;_L^E3_0D8?g%^)}uSe21S-TS&@&(8T8hQ?c%} z5$6UmKQL|jsY-f_AJn{YF(^^WV;of8IC>KvHJjdPKtmc!O;o4%NlBwVs<5dWkNhth=M9dL~9i0gtb-W4;xXvW(P-!O%r z(;wIQgS^o$e2Bcm1}WlHMGWPIO5ur7+|ridP1ul*wY93A}#d4~;Ej)-!M@IJlQ z>K>v3hV@WHPet_c-r6t1&oSSRkayS! z!^%{W>o}v=0keNmqLcK2=f zC<3uIW#F=AEJNY_?!P!OEo4MS5mR1SwfneW_0>c`9^A)@!LUJ^M7o$HpHk7Msqy}h zPIO(scz>?(-Ub4`rX3qmYP7q#(av7%6b!cob!dF+oQYu842Y~LGKi3%}jWA)$jj*?bCk;qYW7_3Va@<&%Pa2Y<_RQ+x7WI zTLYn-w~+Z$pC_jKd=-5LWIZ2bGw~6J|4G2N=u&YskpKtDXyXl!`wX%G`WZ47_B)%+ zD$-%WSN36-;)JwSqoe89DcErIa6>3}2f*Qs$*iU@umN}|l>4563|A&B?WF=?$~P4y!ZoU4qurg7Q7&Smhn&I-8x39wlW~KpkQ6T{dz<<7gwN zcbRSpWlwW;$(XEWhbD{lTeb%G#BEB4hdxK&(K1>s(zw=a)i^t{kR^pPDW+tPci&xZ zbo*O@p@~$eiw&`+t-|%`8cI~d5(+J+1|zCgsB~UOu^ZJgE_~<)Mc1n6tzNz>I(scZ zN=UM3^`%06S!t&5L)mjJUau7I*B4#>lyYLQzPz343vG|SXJ?V{IQ3<=D%|5Oud%*l zPjVHuI(Q>ph2LQCW@ikZdT4{U)jQu+n0u(Ja2$iT$RE6k>LGY5*`*ePSH^bX;A&L} z7h~*q!AO$E_7t0vKj1u;gkOr!gkNe%!S9}L1i$B-*epb#ti`9`w}?=@|0euGg9E=s zce*KPV`VYV8SqORQ}Fwq!8eE}H9%?jWnCTselw?FTY3uC#9f8=`3t7C3UBzv6|y*i z==6dyAlv3$;#YXWS5(;f8&}v$54YdpR_GtW;=uVhdYA$-4e0@aOt`HTAVU~iyx4~+ zHWQn}|Io&ri7$aS_Qpc2-$Hj|@ru);!5r`i8tl4MZ5IQdbmXRu2C4(ENO|KfOKrsZWLb=Mybb#WNvukR@>R@LKNk_ zA9G`I3u@9rDU3x5TWKtWt(Yg_L%V}AY{gjYgRN?*&9IdKiHd}+?si27E_6lfq8W58 z)8i_!jD=#xvqR&kr))hjOhOs;h~HrEiKloj?&?ob)FXS^C;6>zK!KT%1I{3I?APi8 z%pjFvz}%sUw{LGbgEoJVQ^C=>Xa7+{-|P85S%o>nQH^C1%Nv(AW-`b%-(no(ePSZg zWxK@V)KnD&7u2^8j%1e%<#txyQLBUJz6Q@m`&h8+CfbS-RPOpq`9oAd_s2hnYU}60 z%s-M`z207;nq~d8(^g1kQi3+Okmtp2Y|`b81vJFuhrY7@dnoCf*I(Xh{ix|v|9sD{ zKlL7=&V5CR#r2R91tz%Gbd-PW@TT1MMRP%Og2z)k2B*tXM`3JFLDlAV!)n@JR9w@i zibGMCDtcX3)!`GKxf^<7e|sVR#6e#rSP|^kYk9)1rjJgZejdSp;M0%y!L6JE^`xFF zzwE?8pJ1T2P;WwoN;-Uvy2kEP*Pzzxx;a(XSoNjs#PQ#_XP+!?*|VkiTj^QnRBbkL z>Y0tB)m?nz_^;8o>HE}H)_QHTs+rEJV|> zRN+ntt0Pg+wa>jsyI`AG?oki8pqUo*hy^`nL8G3qpxKt=sjOgUBiAj#9E*9uV(OUi zaLrVflzA5^s(gthTTZ4K(jvB)dW)H^=-1*_R=h@$v640MlFC@g`uM2nF)a2KZjP0B zu~CkvQ}Q8He?0Klovt5ARbO=vw$6lGGgW;v`!Cg-h~97sT;*qF2!#0%v*53uKe=ba zIGXLv`JufBCHgE}-GwHx&I_NCN2gnP>g4I}d+O!U*-kMH^7QmQY!_iOZ=o1=!?0Nh zXDbX%+pJ$0v0{y~WBD94jt`-6FYq%FVm?%{K2l?B{AVT6M!+-%A?Li|p^Qrm6;O7^ zPJJ%A!(NkWe+TF5)dZBzP}}h=m&Z($!`QTA3hgg-O=dHm4?g#s9G-4!JZ#e(21>2F zxM@qNS^gm568x51mVNQdN~B(-B4;rnmXibgOO_1>gnTLw$3&})vPnKd1&BSOAF*6{ zhZ5IfxfbD~RA>ftobtG|4NUp{5pptA3$o*Abffk)zaThjN$^~aUSJk$QkPU_uN{jo z?a@BteVbk14pzU#-3i#*G?e+y7(~5%AJn0ouTuca+Yns5VK7QgY88yAV4gb&=eaAw zylIs||6X zT2UzIvFj9=wC{04lL7SGpSJ{P!7Bj$yQ-D|?c|e__rK%0&Cw-yJn)d8JyzHtX8YZh zf)^aWl_ox&d{LYo#XNkcVuD?FFv?w-htSc9nzb2a4C9nTpew#z_yvG%T&$@z0EES$?X2OR)yjIl*{2P$}4(t55L;Wfyco03k~ZAHu3eA z-X>3JU@3BaG}5;#&5N^nm}`ZkG2%35`XYct?>UU&2GI--tRafOF{?3F@CXIVXu%Wu z5b$@yR#JUF2f)i$Dh!zyL z+4)tkA;G(`At-Y%<@R>IylNW(uJY7-cv13t6Mkrd2g@I3^s|><25%eT=uTKA=jlE~ zQQvPXYf!K1os0$KYPLuF9wu2c>{*O330yInFca%3GGUN=3~%aTNab~Sf}$*L6?}YB zh(i#=BCG>YLU+x?qjh1h?V|R1VzD3Cuq&GOyh8CYoWarCDWlp4 zi)f9&f)%`=4g5eoyE!sgE)GpSc$L%RtxA}>mKa#rMRehtK@~Bk!Q?+ zcVHI26)Y1M7-j;s+3P@D-ZMf@WFQ!oq}*}aNH}oX|4?x6r|ShuTpzHAd(Z^n5CMZ3 zHmrFI1eWttOu#EpLN>FP>l1*B_UzyUwhS?TcEhx@X?*4!ir1ENxQ`mW~G zoqmYg9lzF1YIKImHx{6OUmtx?6$vhVK?Z=MzjC=tUvC{6yK3Ks4%BmAL=Mm%G1{hr z^5!=1F{a?zWU?u>wa?t%rMVS1NAs+S#8GzZOqGRHz=XI3~e$@ztPy~NPzpHnTpkAUEcdV-DHgMGPtNF z|G^a^lg=Hj8IXQj4FWO|Inn!K;is(=;zIs>3&W|IB1Sl+SAUvEP=kiQw=I7SuYlAC zP`nQch`f#0!66#0xwrKc?3bwc_I2HYc~86ILcV~6jeApHl4Tb^uhI77$FLK3Lb%n< zODTJ?%Rw^_mhblS>2s> z*o&E^AH67y@3mhi4V*VFaq`Zs%$5PTKU)Ui|LNJfMI-vPX6vMD4?J7GY|;T{>!D{g zTYmf)_z2>rAlC#x>%$Pr0uLMg$9;F{4?BOQtoVA*;UcB2Z zf$jY#3<0H?0(x;kY(H_eZPbf>x^vRf@<{|1im#uL#N@WJJ_oVex=Af8x9r@)dQ%L5 zu2bD#bCy>6vox@fOjN>{c3SCXiOGM(&C-)^iu}yK@wbj(IitAUO+3x{5l?gOFeR)n zdmFVe#^QY?tWg)~LOpPNQ<7wDsQ4~7F``C&*&-CQ7P*YQTt>|Ot?*V%JtE8aKa$Rz zD()eF_3W)(K{;I+x@Fq7--604MXn#zQp%rR%q>O4DXMp=gZ-A$De+AR3H7?{8S9wf zZjl>iOaN@Qw*etROgN8=6L?kq`mQxdl@v$U-BPJ!*^;JQ<7bxHOM*}x zdA*|l%_x_0OSn-A8hIO)d;`?PCI^RQFwk^c+|g^J-=#;eKK%P*ED0@sb%P{Z%ET?@ zHbyikEKNy;@M{;!Z**6-&)XRHvlQ+q49C$Qz)5SI(_GuX`Pr;GVB}23q-;Yx*ZXBo zRxEoXziI{d%6SRM6^UR~idl(U$BA0hZvN*l8jaH2KLYp!f1x;@hs-$~+KTXAXQ5#W zGY;l!(1f&T6+@%vCd+hHJ)8R0+eLNWo1%9LKZE)i)!P2E zp^`&z9hXt{-f1ork1o_kRT5b19Zz5^w+B6dg*mmw^|CL|Dp^)-v=r9&KFDd_km!ioem^jeYMCXOVKM&|dt%@|jBhxFX`_B8pwk3wAdf-5_5Z|&Y= zlU%J){4{WrfsABt-P5Is~AS8tplv5mx%}z-vG`>or^!t8k7z&SL48rBWvPpI-t6HTc1B`cFNDXyE z;{)%$03A?JigafB)z4|}Uz=KaQ1#46$A#HJXPqyW{Yw(_V#|w5ba={*QgbAD<{B?p zqrJgNA2xVx%$Kz1mu&LdW_Hwx4C%N^;G1UIP0ph9z6zbqbla4#vh&2x7X)s~VBkj8DEJOjflMpBgS z2K?$-h~Qc{Nl_^Wa&Gx zj5gE|>lYxRM1~o@R`&1I>1;R${ay5Uu>!hr5~pU z$KHWY4NircSJ9A^CmOdoDQ^yxhbuD12UbPtOJ4q!|38h-PcFCd>AS!IO71bU-T3${ zvXC!5^*C$mziSn1opb3xAji8V24{9?C@ku~mVONP~Sya~K_WX zTFk=e9vMrdCV%V=nX_=V`BJk`$U4hd5lcIyXCdpA3#|G|a%AJv(ELwmIj* zx=S&rQLVuEz;|Lg|D~)z|ASuohEASPhZBKW7NQj&_@nPk1ZF0aB?9-S71h~teRNhW&$bu#$;R~aJ}zL1gJgzop_%=+T6T2a2MV-oJv|e8Qm|nHShPn7w42Hn=^;szU$rLH^#$R&nK@XI7kmv z1uc~d_n=gGOvIi=&^2D9&0@^M9)nV$P^I_4x9x!aPWUzXVYKZ3?Va<3oSp7QwL|~JW$&hqS&U(cp0$g9EM8X~%x?1bt&`h((ZH8XW|+`61T9riV57KCkDkLoaim7QanbLL+RYvG zXVKMlQbX-+mKVJ{#_50?_y-9%`@i7QWsipk0CAFYk^AP3b>F^ad>!j#@?upnR8`p3 zO8%dZlfk=zkMm(WAF^~aZ;~YL$g;P+rv-1jS!A8n%wwdp_H@Z=IuUvUlGU04Etk`t zveE26>V7_55OOwNVERSus?#XJy$=2|uY0;BVkgmP|jz*s@2$n{w@a z@P-!egDW) zN9a`VS>mR7-7eCIo7+7Xo@q}q`CfSTUF0~BJxLC$`@J6?Sn-&KE;*8%BF)KJD?NO- z%%|?+nx~BgmlwFOM`s%3A9ezT&NtYOK7sE$pYaa!0*5(Y4;R;TtmQLCVqRc{^Qp{4 z^#%OiFzrTxQ7p(YaaIfG3eOo_g*RQ2d3_$@Zqhsu!XIycpe=!*td)4Z91)|59LdolJyH*>yh zG2d^snC}ac_Cqf?u>H_b-z&wG5KqfaTpTD%IdMt4E^0Np0|^hJPdU-91VgzaZLZzw z>hnv@wLcryDyICNqYr$KQQ-IXEVz-N|2Vu}b+ zz@XPmNHRNlQ>Gh4b(S-|K!cu|R_990_E6HQ;j@Jy7Y{xlj@@ z8?d1Qtz>Ar?I_)NPdIMDw2-yI&wmHj<(9SGlf!FfaW0snV_SE>j6 zUrG<-EzeRo{5o#lt2GlU^Ng8F7|J;vU30Z;sp*{e`t7wxU~g1#?LG0L&Gf{h*}L4* zV481RxX(2IX1{4Z!Pj3+&Tm9ZsFnE@&BVK*ptOwn{SzW9#qmd4%x`l0`d7;t7EVh| z@DDO4c(9mR%x??)_EHP{*6Mzin%`gBGWrJdyG@$m{`?k~?>oP4OUw4hCq2K-m%9dgewul-pgaruWmfp3BbHe4Cr@YdyC% z-&4CgO^WAtB2Ha^y;5sDW_~vZ!*Yf4~*%Z8`=NZ2(XN-%_ zJXU6Fs9uAD6n09p)$cyPxQD z_szaviI%%Wfz5v4o$i}c?CAL1u}bu)U(!Msnfn92ew%x$&A0jSkNWXC3#iTaIDhtT zmXr5OzouLKz`IZ?+5d=;rDv#D%Ywdw9;S6(&z}~{Fp@U z0Q2`}Q;Xb1b@z+DS9$V!T}cryim&J0MoQ&9lmwZD<-RZSHLus1O4&^*%QMQv&|Xeo zV!S-HGB0p*jWsD}mS0UFJzy3LgY{~!B23cb+bSY2=hN$52ZE^%c%ey(2^3LI&^@n* zgkB}pW<{P&9)V#|-cD$(g(eE`Q#g5gS)Rg~8Si|>bf+2Uu845q9P&YE8xP;}u-!w{ z0BCr6-K&>6X_P$8DuaRRJz8cRnn@EuB1RjAviI6OYpB;7e7$k+SrIGm%uKP~Pw|ve z3?T)j2YyWHe6vsB>&=_2Gv&6S-1e4SY|&lZU}bl7-<+w+d(9XwpyK&Uu5rwUk zsOBGT?1hIcrGI}vgW_Rf{A!tFVVqJ}U-5l7?AoO>Y(;X1pXDl*z~e@SZPav zRMS5({`$zI&86aa{@vuL%)e}^@!5YN+95BnI``HfKpVv|HH!nMTdKUkLKoiw zZ)DEz?!W)1cQ2?oEfNbHs(?hGy=5?lh080xMl*$JqPb`a{0X;U^i#o$lysKrrZ(6W zkr>HaL<8>_Aer^4j@KQoED@Bdo4$uML7gVxnBQn3bj8+bzS(;y%|3@g2j00(o6mKc zq{MZ9B=zU>>bx;gyL$~BPAN{)HeARh9CG9`F?HS&YACGt&hk@j=4wu>%SUr{G zzvT82UX5^ZO}>YdA>3dgHiYl^&O~6npN#m|)A6sS;_K7#FQ?-dC!HzQ6EiiJK#F-T z8J7tB(|5uLGM90G{+f<|JQe?!bo?LF@eilsAN1qt=MO8WrY849KF_UZ^4)t}UJj7y z`*-jllNZ2W9FyW3R0%^{@>B$mY=!-Jfz@hZz36IxPf`!SU-t|3|{SeNDDr|etG zC1>(4l(Wf@Px)_|F~Eo;QZXbi_;ta2G-t640<4?<;DdgXRWAZf;t;br2oZh4G#+Er-_J$g4eZINv+_ToTW^?HNa=?- z0faZn=F!f7R?<$BsEhthP@?HYIw=_4LIPdGqFC4ob%fG7r@DZ^5+WPRf}L+uM%-Zs zT*mz?ZxrJT6R=aQ7wBU7qb7qn-E@kqUJ{xzl@?aLV3n5EQ5}DwUR@1WmH(;E z54X--!1R=gSHNE=XZWu*p+INZ8hTK*$WnG%XYG~XlV%XSC>g?K2oY%l<4Z`y1cu{E zjaX3w9VJaP35(fRgT=gwBUQ3p2!r*S>t}>7bIA&IiiQ zgN9y2iQM_qc`W!K1qIZsK$0dY#)x>)l8VEx>!12P)R7K_HJuSy_={8HR64Kx-KU_atw>r_W35Jw4%F; zX{5Yewqm|y#q3g#m1H?$OG|=fyXX$1TSm@=4A7a#og};wDL~_f9a45W5J6kuV>m%s zc1PC+e@EO&(vQjc3S~>=0(dv{$P$uDIvp#0gCLed>AM82#tr*K5}|Bxl2Os4JKP2oD2l!sm3M08F&#HOTP!-4a90C?f8wdhj!$ zr>aWE<|T&ovAhh#PDZ0EU?XfCeMLh928$v^F`5AgU)5hB^v-zJlIzCg6e4j%3tLS% zNdvt|!E5A8QA-_ff z9KQs6?56#avp}RT zA8dk6N&S@}Lp1{2Mi$#hFn}ZRM4cz4zjEPN=7H{;{>qSxpv%s`g=q*689(RhH>JNa zWGZ`19#VQ4`wPV4+=*+N%6w-caGtr0v^XanKOzG+|k_|uc| zvA~;`>5YR-4vV92v9=l8J@k%$uCWoe4Nv15N!%uzi29dA^(`>HcPxyMp|}4-+02rs zFRucgpGZxPm@9AGwMz`;4ExV!kBUSQ5&@J>u-~2>^Ia9fU4^ z0rde-Uh~Vli7+QFT|+C|HMQy0s!YrEqAn>pSa4HNRdC9w2fq1 zts-%=3*<3j5+;{^51U;nmi#nnD!UBEUEWUI7*DW<5QH~;G=CGcqh;5RWoYwg_-Nw8 zLo#->b3z1Mr5&v<8Jn@AUD$)z>$RiNIhQwcM_bSE>C({IAk<}?JWivkj>oDIJhz@VF#Rfrp8<);AA(5 zN@hC~Kc(d9Mo9a##-YWU{1e-C&hom?*x6hVTU1avPgpOj;>gPU>6KTqf{$1nxE@Cv zWWB}@-`QML^N^iVq>JW`D>@tZo%LZSPHi8}ZsWCk9N`}%xZ3LBl6NAp1zwx=Dmqbk z*uP3@{yawuN14r`gLUj9o|+}&(*L%M&y%q@wnZ72tg|+i)cn=xXytMQ^?7xm1hV|r zWtm}FK2(+&WQi>tdf29+hwUz@nOB#r%^cK5%f9%aQx_LGn+Uwm1sqR!=3M<*Kv3niU}vU)>>v%PZ(6&{5C2PLtl zS@_WT)9Ns}N{MJCts$Jl8{sH-Rn%glg>b_t+@VVLTTv+UNipR;xycHRFYIF`f7LK_ z2}R_i9)>|a+?*(MW-fb)=22ovrJ=}B&KuR%DGf&MN^^_wl*wZ8=1__k1}_yYqF1*= z*?)!@C4d2QC&HOHl1ld8^+RnK>M}b#(;MePNvUD*O~_S`r61l|L=jB)W#-M<8mB+< z6xM@n8z>zWA1>Lak-hX?hJ(J+4?7bGrRuCBl&{x3wXbTZ$W^w7ui2|*3o)$>BSaXL zG7>FOWyyhj8P9xndkSX%*P+?!$9D3ldZNru1C#P5aT>@~R0toUjPoTYDQ&e*%cqom zHjhav6DCKAgC7a?zsDaIhd}8KxIU7@Q`~3zc~3OXXKdP-sv}}24rMH@!;w%3ZM6w* zB)~z0?GtPp*waO4LG_Ds!jUejBi+Ja=c^*LgHB@&i5g@XH~OxsSrZC&K7Rz{LM7ix zOr<$CSfDx=;4l({&WlV%6A678 zB2enmJ`HfPG9>e$$uNagO(&2Q)mgTVr0_o~W$qK@fAn-3%o=`_Su5MBnzoT@J2`;M zvc-G>LN~B4o9dxdC(GW_5r5c4@gbKnR8jFz&WXykjvquWh#WFjZBhl{3n9W~s8(#R z@Pux7d=L*0%fr(Q6aw#n5gT$x8~}KDNOxi&k!+Qp-v`fT+NK_bFAU+^E*~w`ftSgW zqFfj|to#leBzo+~VW+l<4H=xmemy}bpf$sCN$hs>BH^ih_wS^x3}`FZS=cIkx5Gv{ zH-~bLbBj=mw%1YS9wX{Qm<#?kYzz&)`Ltv|y)m_93CEZ(k&QvDM0(2x+j^bpuh-e6 z25mjG9fUP1VL%3&UiMJ9YD^Bko@FDQq>q{5>W`J`|vqxvN|_ps8L5b=h! zR;Vm0)4S!B#9JU=R~)e)(~Kxef@s2l!f29sRd8p_;Gda;^9ayN0Q{ow;#N17;9iN_ zZ@i;y7ic92mB8bqQ0t%=Xs=Pt0xi*tz^e_cSuI}HtCsLsz=8Q}tFo;7}>!;LM^-bsGC86xhv$A2`J$k=S|K0RhkGI>Kan2R0iBg2iqF zqJ2~h;^=0gMQo#9sops3qe!|bJW&QHn`LWEpkup2DRpAvnu*Se=@*{R0l)MW!`F9{ zOF$;Xq5%t^-;pG^NOwLcMNIJUgg(lTV%}Hmdb5 zKGoLOY#*JlEQDl6xKMg%w9!n3)_Ol7l#nECG*bg}Fxn`&;+PdM#<*Ig{|1B+wYDIP zXrqr^Uc4dMpHR*}&3!QJ^6P6Ybqc%GQ?6l`&%E)cWRgS zrLyClL??1_S@}OGR$;8zglLM)QE}&GyU>Od>pO)# z5+sr0v|SpB6hQm|R2iiOpac+6_S|a>dx)}Ow^3K6$IG~Z3WR5bMm8vN6Ajde8scQK z6v;}*SR5(e2h9zM67qqPg1$o&j1F-KpaT(`sl0(@a$z?-qC=M8Nzoy71TZ3^Lujln z7Qz>THo!Z!KZeiggJ(M)hA4bh2#+u`+eY~O9?GH3COi!MVKg?uDHI|YquJrFq)B{C zlCsa1#2?@cIyd^FAT}YKIdp0l`Vd;_JUWd`Zn71TflMY_z}G`2r(d01eET7jqXr!a znY44E3~44Z`QXR4mRLS^(E7haCX=To`xDCfmAMawOomoi>H{H@qv?@5UbY}g>b_Jfd7X~{!fs}B;=*Q7yl2Lq>zb@Fh0Ks{><&T4RIK6CVXa8bk3P&Z3r7a z7EG0MiY{4-WYYp)9KZdmPelO0qwpobQ?Y zU^pbp_5MIOF+xWFjlfxs zLk9re^V)HzLbQqYLD41?MVsj0lS!M56K%4UK+z^EMTtOllo@TJ6VBTT(KY{alJJMU z0k&_QOGV_c1shSq25v_k5hXf|c!W18=R#5N;*}T^E^1E(>3rahI$}SFH(^YQC@uV$ z3i-UN=3^Zk`bmb?p_c98C`z>>j))Y!n1T&wN>}gJQLlIC3ULFx7@97?qO2ErC7} zx8!S`afCHmoN>%v5k$$EgQ#ry;N*MLiCPk3MltkU9S-k)z*y|zp$`9;eNNqt6xU1( zWvYk1sPey&dg!!t``}KF3`fE>X4vn39dq#&d@26t_lr5?>zdjP%DFI>qgX13y zMiOTZmWS^k|H~bL`A7KQh`xz4qrNxK|Mu{|-TZIJz8R7V!#f~SG3XZ{!SIrx^Id2HX5 z{NoT}lQLZ$GJ;3iY__c4-M6If8=c(dr@VQJkn#KXT&fGR@8+X`dt`hNnz#M`)hVkv z=Z>3EY)_!CR?z$=uYLxn??iBRD3YMD!n#P+!f4@u?dcJyUEEGO!|llFG~DjIOEw1< z4-L+n@K|xYSGB8T-l?htb>8@(=A7Ps1s@hPzee7*TatN4C~tgNef*p?5+{$1s;7h# z@4b|z3)n4g&iSZPO`8XBqM$!KBC=f(>*MEaP8YF_MkI@PBBO|8_G?qw zSJqeyo`|3GR66_LGqO)SK=$FO?038DbK>W4F`Dea9r=9ncu^8PHSs8bjy(I^FN5EUO^rH8*B&rt+=5)8+G$`DSP2 zyJ6paPp9(z!OzErvU%{M8PZ-Adqr*G?Dhm3r$ z-Ke3-=-=>EzFl$GKgb4`uf8@tE)TTGht?G!URHcE7g^QEIg{`$j2qbcMQ-cq(4@8) zf_M1H))(^oH*duti`LZN1_|6N2W3@s#P0eF${mfYrn1ojMQ>!Cw)Gx}AHCx+|OdNvYV1jmgKUIE(Re5b< zg|`Q9d5s7^A82@JY~r0wH>HuW?$?>>>o!UTWD5m1-);p1O%K+DiONybv;QSHstL&L zz5UZ&09#;7wkEWj4*~T6J`kWXUiEg5YY74$04!*K7oPliaC#xlp~Br8k|^jdDhxgY zBu;JPy~+a>8qD0{_}Eb8?yD-gm!RW*NY&I1Z7NPijpJ~d)YKpCW8$Xpb1_yhHTEPp zq@o)#1fN8L#}5u&Tok-m8bT^_*4#qL(L0PHFwFVIhw9{YO-dmsawq_00^~r zQuFuFd`;DSlxpr`H6PKUX3R#5|&S|vxd zs3fC%wba)kRo`hD^;M!t4Xu$F0R$aMxBvVo#$uN z`S5gqOb<}!kErv_JLqHIj5?1~o!za@t}W|K(zDc8Pkl}ACi~b_o$liaUs2yB|5kk( z)4NjjU7u0ki{JrTTpTk!x#HNYsethT7swzWs4+%wPsoIz@2I=E*4-o1-L(ah>Mu6K zQgt^^Pxp0*t6R10w>O=9%xT#}pFXC(390&y&8Y9fWPN5&e9Cdfaa$%>VVhaeqog{yRM6+@ zTYEdz{s>Dhz^>w_G_(%C3~t790e&$D_jaGvb zM5u)7&qJ8Cj!y#q_e|$R#X%Z>7Q9&QCC{<%WC>k-Ps4qTx_gwm8;LEg=$xKxFvfzW zb_7Z;M$ej=VRm_z;VG#__LMrDN$LT0>?y$+b+N+f40p`lCW%zPY9W<$_0sh=Rq^uM zV{b*`Cc%Vp+};nG^%-X#+k5L~+ay^6Q*RBkal&=zb@n=Kp&Orl$hOM9!||5HJnwHm z)^3^K$CYYDY6Y{?&hQH%H`yL0o6_Ip(&uEP@9)x&Ymt7YpME&$MZ!Mil-qoJ@tXIL z-gZ0hRVv>^TR3XP-kROcJGMnBfAC8=%r9k*Uy3@5(@I(5m-1ppDQhd;0JygQ(Jy7; zk9HyGT{u&PQ0?qw28ns+)l>N&TV(r_pY2Yvk$h${dAx*~@vd%>_7OkrSeLdYowky+ zXJw`>jvJ1Ac9x%|ud>9=q9`OObXlK~JD}QL5`9`T*AXszy(0;X&q$FmA7aDpq^*0K zy^knGiEHN60*c0a5>?xy2PBQr71O^@iUI2)RdWY1Xj#D-3(*{EDF^jx}-Rgw9PZJS??T=;T| zdlc(_I|9R8VrJ2Fq~B(G3;(52QIL-yO6t91-?gxdfg_e}sAP#Z_bt*FE*cu2c&AT9 zRzLqaqK2iM#LV~F7wy;*S@nL^g0_(h7ep@I zrcPoWuYo}+lAN}tsM)(}8ITeWMq+JTk&(ngh5OIksMzBUP;Ax4y^;AFk1cMqF*5&) z9+68I*a)_PEPh&p_?*1nTiu-BJ7&EY!0kPfi$w-=9geFgegvR;X`S`DT^nDWDb1gg4o{vSz<*3FQP@Bs zl$d)~mb%_95}(?kXx=|+tNRENG+)QsA-1aS5n!OLU||0Hm|!v>n6Rx32msWwie6MP z1_4*Ttb_Psl@*(W^;2U5r{;e0R2EjjR6_U$D2OsFf1v?~y|p#{G4D5;5<-3})zf_q43Q=ACw@|}sm z4s)4`;I?%92dVg`bo}OY{D!161LXzQ5J)wzC*u-Kjz*9Jjx>ZAJ32sjF9k7kYE&$AVI^WiGn6TBm*<#9hgAmkg#&O z0>XNLk|-i*G!y0Zbub<%x}tb4x~oQ4G$2R9kqP1fc!8)OBFr$z5fp+V^ZQhFzwbMN z$X?&)|NMO<)7RTwUEN((U0q$BG`RQe32SbH&ISHjZVDM73)&aRV9@?Bhjdir_Qp8=G56*#8amkaMglQmJ~v!s(9+wxM{{Eud!n#MN{6HfKP1a zQ1ISAPY1di%68dSH)|gk*R6JqgNvMZ8&~B}{Fj4apu%f^CFDC){WgcX!lX{1g@a>h zp?Vx#d4D|kU0H3BLCB+P)tt4nE-bwo_1rP81Xsbd@&sb^`Z-{oCGEpOG#TV1Ugw;w z_}@kFKSwts0w3l?!i2%__CW}}J zc^@UhV^lkXPQH{v%4z!rCz#Y@^{N^R%)aSA5Z4_Zc(*Hw{X=y>{}LJW_d>={{o$@c zfZnM1JMdEX9#&76f6F&23rLnL%Z^hPe1la_h)o1yhX+=Q&vpA-S+^%-?TEN60j5IL z?*WepLIyw7Os(0MCggB@7FBJZsx{FI_1;%&y`ObVMgo$sNVl=t^YeJ&W&!! zR&!3xJrrrz2)|edioXC=tNJwfY5fY9-WqQG6}T~<&u;yjg=V$Jj2F8?^61xZF)cvF|0AlvLP$Qw3juV*SdmKk zE!fqCAH^R-Unmi345t4I)DXGAnA>J@2dbFlsX?`V9%x(4;O@GR`XacMn+7sqU-*k` zTZnKujmTDGdFv}Ijrh>0@3AAstWo?Iqp5HWjv%-_TzAbevszKstH{dQ8m>Y(D+<0o z3gnf@D3jD^%BGtDfNuZjUduaI8*DI0E{fSAhDwtled4?XCNb^SlSvVbXBxDInoufI zy7M*aPw`@sn_g>+pJQ7`=kl>~mIL*27YNO!sIaBDK0bE*^hxfj#ZBJ#SBN>4Tj^^~8N@;F=80Rj3ACMKtU2 zJ4yadlfN_N?`-jVUn%|KKQ(wCQEd7TL89vPAA*ZSh=NOup!Voe1c&Mg`&4~?HG=x= zLRBxNL~V9PbPJZxCc zLO%VLQVjFmJ-|aYMl!NC8W~MAFUt-`S;&}g%mhUECCt-S4?*!tWj7|Mh;AREC*Ugg zeCi+vbq-RGOKKD5#e2z@$z?eM&jIDem@$6A?_{%}lL~C>Y&k?c{3(^pwAd2nJ3$co1itX5^uE(FEn-Q@Kz z_8P)25TVM@!7Acs(D|@AKsy!=%c_kQ>E-3Mq++Z_O{9Frs^e$Jjl~D=08mH(n1uTQ zMIpDB+`)#hnD)uzYzZcKh+qLqBp{L~aDb2#$wae26UW)wBC^?tq#|jQjSRsi+tT3D zTXYFY=>VaWGc)klXX^>b4vVjRwoD|sZO~(gC*diQ?bhbn`n$DaTOR2r8#5nEK#0*# zjusk9B48l13VHRsG^{*$2?QUH_Nhl(uQ%5xBAK!s)!&C>pxGw!zDf`p`{&n9;v}RN8UyBGDq;EDOmmWHM z3rQ5mi_{!{p5w`*KhjDb*2b^bJoCY1_odTL5ZZ*Ds3&M&+11zy+Ls}SE!vx$LX_G5 zcNq-YUo(o~Efg#Nc{6{pmH(ub|F{v1u@+2v2#KisK_d_E5zAoEem{qJCwRA&KikZ| z!^)pw<=<@P|Ha7H?9ndtep3lN=gdb(wE$`K!9hw90Y9aA=<$;TFo~vZw^!t>5qIe| z68=J6fj%JYJyaBfFdg_K#Tf)9KcO;cpT{YTusJdqw9ht*1?{(4`L~++H(U8rto%P4 z!B~WiMIxHH*2oLmN6KK(ehr5hVMDC^d^6u;(_cQZzjC{@h$wl-WOB!|}+J`m! zJJ~+m0>kg_YxSh$*d(G_N_QB2Co?MXJKs+esg$rxc#+Fj$&e^@GD_XrZ)KZ=i?Frd zL%y1_1W&wfM__y<3pkz%2pCXyc@}{Lv23#gjtoL`<5{*5uPI)d^q`By8(KiUZa|oY zmkd01DIcyKy##N@Dx=|38zJ#39b~gges%pvB4&_lO5NHNztWAXw1giTeh{xE%C&ea z5kK_!CthiXD5UWWacSSW%6=qa=n+f@DGVL@|5_M2bQWQ#_n`uP^->IhSIZZ|P-~x_ z4q<3dNov;CNN15ZF<;@wF?kG9z)!per1iBL<(6tW8JKuQqQR!*u?h?!j zRmT~$Ua%;VO#P2Z$Rg|co)}B~g*=NF2EpI9k*7`keh=n&2qFr>#KAw3Uqq%Uzm%6? z@nK#~sl=c0OCTS#O{TqyA-go^m?^uQz!Zs*UG7Q(uZEMUSGxZTsS_75k2(L^R>1%u=WIf^uyXHn*%L- z&^*|FA_dVjf=>MPk#xZ_8Ye-zz};dFLd1Y2E(g;n2&CbgbP57>2xhpo$+n&(KxC3A z(OVzwM^pU~%qyK&8mDNjiLHEsKVT~pJ2qk~y)QJ`N-qRK?=R*QW-DD}Flg^=6bsrf zu=39{^HZ$+)>eKiBN)q8njsO*L;(j;ZUj%tV9@?6hnTG#wek;}`3J51eOCS+Gk>>{ zui5YH0Jg&1S7S~LlMZ6O*w~a(tHvvr<6Ps9qyZ05wEr;dNi4mf=Jlsun4I@_m@&s6pC89u!v&8Op*itd5cBTl#i zqpQ?FLA7g?YlLg$NY}N6t}&t1V}P-2eIDBEBirof*;bN-v`q8RGj#A|QrwyHAhAMx z_xr5|teeYnH|>MNCiMe?DK4(zUhnEpkB|J}mA|e}Q~WnTe~it{t3Qg9s(^}(Nbcef zh-hKcs}(^_oHvO+Q#Ey3w4#(l>u3|J-!rW-wTFFF#BS2}w6oCn0{v#D@0r|c3!gS^ znl~^$6Gm4)#S=kvW(q*y}y%Tpl4lz~lTj|ohO z+boJ9#KD!P5#oQbNxXzx<4s~so=OiB=JpgxOlY%3SQ6UqBBnX$+*~V~2J46-XaOgw z+DJ4r6w^S=KGrJaO#`B#Q=pS}{hDe2-A<4X=+O{%foO0hpu055K-T4mrEv_%!VRj5 zHMHVFxBUi$O)sd3`|z25YJ9;Wl-ixh+=O~(lp1o0PwQR_#4J)`x>XSV+FnWe67y7l;x4m4j6i4jhT?MHA?8sVXd zh$PXi>3XFIhG{)(v_Xm1Dk#f+cMq0@;=dhgaV&wCcE>J(HC6xZ5@=%yJESi(RdATAMMxggFLFHoosNKF45$UmIl6PRwi<+(X1TbaK^0s1P8Hn3=y*?t~#^SQc>#6HR006I9%`ABB`M- zo==P`%N@9zW?cCKXry7p3fozE27KHNo%C)#c0NEsaY%gEAks{yypuxA8gEOAP4k28 z3}&5DiXd3$U7P|U8MNOagF$<-Q7mY`#mfJSnLo|SzuwB9U<70Mnte19QTGTVFK8bw zgF$-%hnQIpw(`&y*^ozk!}xLmDByE8WJ9ZJ*fH&8Q{4k8=am0Rj8LUhpHol{UYXum`T zgZ8dQv7r4zE5E&&f4-I9#>!WWV65!Z9Eqqq-pC8u<76;sKLy|z8rV>9kiqy_27~r` zD?ei8hs^xFM!sgh`&`oXI+v6JCHUo?GJY#aK)|hJ`{S*k=*M$@${1{#@P=7EHpRc# zlu_R)qwAGxai`mvyM%9xPdueuimTYpKDQt$cD)D5_pH)AWmf0gv9E@|lI|TRBZ%!Y z3QnNA&~Ve_%vJgOu{+V+M-ai`la8G`kqfJ_$N91}`D+^Y3AurSw>sQKcG~CD#eMPt zI03#|l2?(q21n~Ch1*yYf-tcgg%orF!&5#^22rqlG8e=Z`6B#t_PU0fo)C($jYM#! z^}!pn5r*xak%GI^ZLG(}Z8-Dan~`AfUze7jh!uGKnV9h{w*koozHj#5U+t%Zb=cQt*+^hKCL)Wu5(rE(V;qyx}I>VJ0 zs88xheR6(ePSf(l4PJd*dTQC-YFzOFp+hNK=Wy%TX!LTy&;-EGu@Ue{A$y%4Jp^PH z?&y9Yfg41?eV;_YormlEu)wz}E7_DXh0U6*XETp%1e<^R!o- zn;fq~m-dNQ!+8z58HXMN)A<={kS-Hq{pM%N-!%D~Du12w*FnG9c@MSr<4k-h!YVEu zM%Q7Z0q&Vq9Z7|Kfh)Sfqs?$A@3le>l`BO#W%WjP&XM9DK|G>_nM!(l7V64JzdMed8O9yYEQYKcx)biGHrF~NYLq|}EC@QvN; z{=s|}ep9s1w37KmV;)waBSgTn6w9RV_2w21v46mLEQW2}*V<%Ta}WeSnZ+rDSNlvE z4BBrsiUsXATKSXB{6Aay*ID^RMlhCb4M!sC_8ECWyH^H-_IwVp6p&}-=bHKbto+_q zewLYknUSyA*C&$de2N;YJ||Lbsn3ashwMiv$^Ilt$6)0qAW1Uw$%L<Mn=osnbaDRfHAUQ{dxv6`)K=sWIk{lHONX`=_FZ3r0K4>IP)xhi`y0i`ie)rs zT&cYG8)ao1)!CxjyeGW+Jx;7+mLrl!zs%+h1rYld($xlPW09({I!!BiHqzfBffW)? zKtB3qu;?u)OM&Fk@9Lf<(Q1$FcU9*~ayBbv{Q-gIS%Ov|Ye!PpegmhBRJ_s^4Z3nZ zo%PnBfIBx%Pk1ora4}xkCY)0DJS(C7!G^`1o=Mth93HdPMgeK23yAVksuQV13%z<< z>}y6ZEzpb8u~V405|_A23AYbJy;G@ef`X^ct$XIX^@1k~qsvH4AZ<^SZ+f_{jh4_D zj9wZ_+e3YKj>hWezEc&8^pa;actCXmJ5ULQ`{QGYgTRoewz+Iqi?S0fX5nRu>PWU$ z(+w~6R9onpS^*s4NaK(HmDM;(c7RM8_6bxrT2}%AEZOsJ=((SGnO$~Hqh*%R(p+Z0 zQ%=x+3_mn|5Iib_LHiL7@%-O!_-g=<7eeF?tz%ho%yqA2FW%QD(-ZM%zw5*KC}$k!OxsL(|yMHV(xl1x1xqVC^N zr%vD4sXTHG?ib>OVE}FqbhUx#bgw}rG;BDHbf(;JF`W&P3$L+tZf(D$bcoXHhCR33 zv~hB`I+M0cSgT>jC8(+HLHbsz2SkZHMv;Hxo;4sC)X~q~%3BRC+gEPwE){0L0IZR3 z3G=>!X=hegRo4^Bz0$o9^1H1s@@gl+BkPMyIby1EsCue$Z+SKD3*jCS{!;HLWeKNL z$`n;wcK9=z_s2v13x16fHim2D6U#k3oF%tIRnPF&1Ahm*soUbl#zT0*JVo>#0gV$rxg63tIjP9QH=!T)18}IUFgcH}PN$SDA_WKD ztqO3jOL1?5y+@#9?qBGVSDz_>hNRZFQHr+oau+mK0GVY1IpDtp@{wzr0P^ZHfb3}k zIn@^fepXZa#Cy^=nN*en*+wAG2*_1zKX9!{xs>u6SSI8gnFZLmXYesP7tVjQYVNF{2JDpu(lc3G0$gm@e6nVUD;mWDfd(!Y1%}Fm(E$ zeGenFBDzo-hAD1rs|#%*{o^ zC79%KMcXOnX1)O?rSRPBV}dzj2rdFE?!yrr()W4cMjH0qjslo}cnD|Y7GlNW7@Wa) z3hQHqiDO&L6{V)IcM4$H46t~~LGtu&&AjZ5LGd)~~=B_41ia?8}$Z z53VAM*b)(&Bw~w1tVqNvM66K6=8G6r3reMOVxUyy&Bjlt1=cBM+t?*MkWUXZ$jIM* zIvqzA*=d5HBuj!~6|(rro}sZrD*4IddrWLeesZ5k0k%FE9D}W&ZV*G7zKe#`DTegD z=Na7nE(6?#12N$K`&7@{6le`thK*U>UXcRO(qcgyAwko25@>A&Xc+>u;U;L~|2xp$ zq=7k|3y(how4o+w<(?R7 zCy`T&DA&JhvW-gMzKZyVS-$%6@0eLA8wg7Ds_&GIt5&MkPM63C`^zW@JBy z^1wTgDUc%S!C_kX1tiFd-Zd&B-t-#RR0B9wm`P&LN_ybCOJ>V!UX!lolgoU>O`EEd z&!V$1>!1dN-l6oaVHNQHNWb(btaV*Y^yVAq96z(ZzoX4QWT68 zS}Wy;a67@!P+lg&1Q3O@5hj=@oQE)hMPU`&m>xb$fb|a`9}qunPl`p7OSyIZRApv$ zTov7OBM&xsWcl7eCc4ADrph>A_S(b)V`c~KgVInsa+9@%uaG9^xIGTfZ#BEpe72BU z)6h}X+mav4OP|41)OoXnDN)^zrUYcYJ`?h=xC1FekiEPHLx`h>p$LbbI|7MsUBAUN zG}vJZvGuv9F~1i-izN0LFbB2J$_?bs-y1WrF8%{4JH-N){kfekb8n(i4dk{O4~Q^h zu#>m;TeCoWFrg@Y6rjEWfP|(XjrLNsF~)ZnBTZjMz@dXX`x>DA^kWQY7@j6K09TpY zxR%rqi+kx=bl@%=Cg}<0sG_&UHBJ^RVi#v>3 zpp;g?CgrWgvQxLo0voi{z$_b%ZJL4EeDeSu(ga<436##wb87EUyn+4?cB`fA(BogA z#jkNp11FHt)znaE&Nd(~kQ)b!FfkQ)jkU`*h(?kNl`v$AKLGo>Gf4b$BI-=%ry*Ml%*B_+`I)5eJ3-qT)Aw_AE=Q+ug5(Dy%|((q z$+b?X4!UEaYh)gad%SS?QdUjZsN>b;kEeSdqyN?8-mA?G)oZ8Kyh5JMIHjI<3O)eZ5j2C&h_p@=W0Qj55|)pZ9dnF z=?|vFsg9w4_^B__>|^k&pOGd!$NuB-UqK+F zEJ*pZ{h_}27$0>tn()~o!gXv9k-~!1RUG!|nZBH(bm2JnVvz~&u{c`Smr>79Db@Gg z=cv!5&NPa+?_XBU{1u~EZLL8%1i^PPOxLINx6!=r#q%1>csWmwK(P(f;Z$0v`hK?8 zwzh}iPX(zN&SQ*qXl1b!dljbxo$zx3TG5?g!)-GlicARJx&=maltIgTQ)u@U2DWOE zA+UANV;FmFI|?VrX#}g@+zbu_9kCY`amJ?ErUqS3+*&MK*9OJ5Fntr){8ogcafCs# z=i6gsPE}@XL%0dISPH;{YXh*)we^*QUdGNiOXE%E40 zN@VdU)Y~Mdp+9{>;?aBnj>_(Q#1P;tz|S=S?;H#GW&aZJwvF&}2K?9MF#LbLrV04t zn}Yw~76bl_82F$0nBad{!2j)nGvOb3nSuE0zm7rt{|x_Mvl;#!g-yUeh(I;jnN+D= zYQjJ53Jd>Ve?)2x+Qqn<0RG8K33xi>dwF{d@R$D~^2vjkG$DejoK6>-nm-4@j(1$e z@V9RS{~@6)FWVdo{~@6-zm*bs{w%%Rg8u@*@79hShf$ypSC9hP7zwTB_;$rthgcph zhycwleIboe_*p=A##AUIP_Xo_lOjGZz38XhT=8HQ8mU@ZgXas#um&SP9wUK;mmEt_ zAc`o&rK#E2+jLm(W-UV8I;}A0QdJs*sWHed?Moai9vK|yxr~sCLAZ=(&_i+je8YaE zNipI)P6vM^F(MH&lH?63Mm##z5FNE3{4ir!d^I0|&4q3`5qJA5`A(2|;H zk4RxL;;;xyeavnV<5Cas67^|N5GIMlR=Wz^Jp()yC6QP9;#9&uhF2=Jp7r;FLUpKH|LQ`9j5~XmO z2$KqMA@m+dk>#NR^do`w6?!=#fc8qQfKj);nAVf0e1}_S>a8ruMlwDvWBlW3p&2O| z&?ZdvD0gh67^`eN_j7&^g{T-P1}=Gp-QS{RZ`YQZDAZfacQt1+89ZlTH%V;xZ}A_RXgFy*{=8( zkrwBM6Rxs`gxhZu&B1-8zK~jnmBRM;#Z-g#o$brpN2uDD*si3Nc#+SI1`?i8Z#d!$ zbf_%I*>=ZW-av=vkwu_EAbUs6IXY_!{Pqh}NZdqPTMTGw1xz{viJ+T{33#>J(MSg? zm+>17V#^rar1%E{J$mmdcelN_?=RmtdoL^`=Y6kz=+b&W71@qP2|=zv?_}kzWrVW$ zWrQoA?a)+qA3bv;j3G9vfyDW6R1KLl^IV20O!+6Dk5ECr-vI>1JNL|v%O{O3kz~iDgGN#5&5oA&K=p{3gnZ29=2E_ zOQdH3SSx<-mF!xQhf)DDJTnRmB^!OtIXS3wZZ13vzObSYGoU~_2vVF0Jc0JYp;l;n zEx3U`s6o{{RruY7M|?sEFM;LrQtqbasZ`1BsHYlH2Y%~>hh(EMq{8@)?#32*s`T=k zQMF-G1He30WJa};(1<@y&w2vBPWOBSGpfyOM#UynKJ8$E_6u%gReYytLt!kDUx0@$(?R8j!@m4YQOrUDg_##CxxUKMzEC#;z8>qHL(#v>^er{kAQ z`*Fh`_#FfrJEw!tYcOhK>Y502CaRw(1*w*2s;*c+i5a!qI2)X+(87xV!jYhMHCzatfHTM37SM+oTR2QZ-)q1n8F zx-SEirJxduF$%9F`bU8}+yEJ@-<)yStrt6g)_qP;%F#>QdVeR(0Le=7BVi>;ZROlU zGwu`{N)A9<1zH4B2i~@RYcJVF>bJlm@gN*3SAu9Qg>__sR`1n5@o3-sv>jgUbDuW4 z$~D5Ljjwi%40XcD8HSPv*`D%9BQwcsVJ7+8U7`$0Y>&_?{$mqK(6ydlc=k>M5uhn`#b%gh9TuUZr(+-vea z>QPKmqv!Z6f7*sUYDU?;sd0)wkN7E3o_rjyqNkY@Uw#Y+=ymf~daJ6c%2oZm|Jgl7O>p7N+NpEgS#ZHgKmj{rC)&@i}2AC@O@ z=5{!U#WSMmFbI&;$yE^GrN`)QR3P{54`cUSFL8`?(xvEK=*d+y zZ_JC_?Z;RyX0GW-9Hvh;l1y`mpYDdr;s4M*UN44*FM5Yd#SZUsk;FUpt3_Du*fT{8 z`#^sE&8O9e0_cOky5v@L^TUm?-CW5rxwU+MWz5#H`)c$!ko!+A5WBTpE>d`Fxq-v% z(n3Y+t?|J-B3pCdJr20ew_aJZi1!)t#eD~s!a==P!`qpwmeQ_Rx3BAAnoC2PP_?hH z+dX~=IvFAZ)32n`LF|te|HD|Cuul`+kd( zrudOB5CztH*Ts&?#T>(^fINiSe?X(M0Ua+%N696lr=qUgVG#A!Wcf#PhLNfH-#olynIu2u~6<_W?t<^zg5L%@=DS^<@PdaOv_p9SU#Ylf*4CvBbGo#_ZC$~^SQPIL3@-=w z2eMmu1J^pdfnkXSfx*s#z_7NWZ!cfV!r9CfNpWG8S75NUo#q0afVNI04qZ;|hi^wU zO`jsS4^5qlgE1U%(FkfTK*#q=al%nn1L(qb9II^vFH4JM;H0K*j{_-(T)J+DT)SX* zKrx6wg7`Hi^h`|XW5ul@84`Cwy&VjK2XgNa;TU7R$s(n(v0e+KB9bCb zzDG4lW4%Sx9vSP+DU?*=pX~^>WDNBbl7v=xcnP=@6xEDI%UJJAswt3LvrZBVdbgUD zi9wOV#Nsm%mc(L%h@liTZd@I#^bV@5c%#0D?m(Sh?ZWW0C#CM3#`wNfOYk=ii)h}R zXfT^A0Wrs`QA7b)=h=l5i81MmE09QCJ&!Ass?UcAgMr+01q3mw&+|nJ^QW#N3}{nO z_B;{O9JnALn!=$t0dyKM^E)9-di8-226r_Q1~-d|#lj#iHa;98-c!?%rb6j>XA5|@ zCckywzz}d=@_1_Z21d1MfFj{~Y9r@Um-19KVz*H&u$bvk&Sx&=u^QwlPhtA3n#l#f z%2OT-W^MKO>y+{?s4*|?H>Lan1hlnfyW`=6WDU_D?7)AecDnrv#}3STJW6dfIhA1A zh6r?p+E+r}QJkF>=QU~YGn%J3$4-K)2c`B1G$1FTGVA^*@NPb><7uhiJqg#Xz0;37Ag6@R z7tmv>O%g*olRx1hZIAcJsE`=Z>Gd2&2bRCVM7OJeV2p&|`PPg)IDNn;dR`*A#_j}u zJ{$dEaUIDndiqTqlM;=`YKlEUt?&s#47D33AaMs)*p^e#LSMgSRFmTGjC!DdAV>8S z@5ZYJ#*B!dZsG=SRG$ki3@NETQ1(P0f)x;6_>2?a759*Diw-bEPvcBv@zJn8v`<; z-%m3!ko(041SmCc@cJDhg?arx5th7uyNJQ-y7mf<5I=$hUjKFIQBj#|&AE{0n4yX> zxC(&CF_=r_3v2Qc<5lU4$@{DrgFz7A-))02=xdDu^au3h=+|e(f6N2S046l9lCVm) z4ttq6kC+L+xhYmq1ME%FVW z^ME8{0J{#{>E#fqA^=eT?vZ_V>JNt?>bpXQ5Hi z+HkA2Ct8ZuIvL}9p*7C^FwP%2(c0xxE9Cg@{&&Y0?Ioiq&8O46JmY=u#t&du&;z|Vi~h2_6gZ{`?l^o|zK9~Y z;Q;CA%km0D0Oq`vG!`+dAj^XEj&lTdk_l3n&X_I=DzIG9cn1ytN zHThuY@Wn%Fx@gyf5+kVga1oii*W{+gg z(DSLo1HIq#f>RCA+GY;ZZq9TJ3A!_RvxKwb|`_L;UAD>iV(9^uRga^C64u=t3McW{exAepZRRR4b{e7P70e*3&JheU z&cRq${GVbQzFZ0zur@$p#s2})NLhKIH5ep6!k3V{AMZwBS%4y_bvbGk^L-*JmUQjq z7Up~xs|)kpSY4R!eZEOD<~y&iv(NXK^+ojM;lCUFq}_XG@{?wqCg@qiQiGl)aH^nZ z86tc(ezIyARZP1q@RN6BEs~#Hh0`&%(x2%t$k`|)338Trqeae$1w4aqfunM+FP5L^ zB8AD>Qz9(+i6&x_oI%C+bx0MpOj>SW`j-|aru#M*nC@ykgbx4ZQMt-pILx~}5tz<4 z_$5RuqG#WnmA=G0h)#OC4zC;de)Zim@%>2;T!` zEfU|sJc;i(bXsiL_aI5&``Iak@8c%_?v8JP?-a9ngMYUdDU9z+41kz@oG)U8@8d9; zCwy;vm20t85x!&C$34wWw69ALXus4T=)HW}QH!QSe(KuL@=W?F>HBAdf7pl~B^ul0 z`|uGc=Z;RTApZR<&p+bd7ynb>KbC*D;WUAN2jCW_VQo28;6Gc0&&Iz$en-xCT3>5l z5w%GEoj<_f-}l;$0k{EaVgTAtrU5Vv^6Nvd;bTDh1XqamP5%9iNZ|o^RfOe)UnF8Q z0H})j_ZX^0Y>@ESTOq02y2{%kA$9rRUl;$0T|h!4(V|gVTit@+voo|RNGfsASwLQ= z>m#%w8xhJG$-5JydQC<38;fzi%9j2ib%j;^ZrG$JH0DRb%Nkb0-E5p#fu62|m9|&hcWLU>O7Xvl0x*fm+F^Bu=)FFGDEbTxEM`hF z9SD~N3%xntmHZfQ~M9&1+{O}Oj3ItPq4&n zMzTTfX){ucWC;DfWwa696X_@PBec6W#v!i=4|9qmv4wfWQM9(`Yq7(@hgh#rMR4dNT&~jStdb0iEx5rJHnhN!>1Sa8^3X9VSG)~> zr3% z;G}xr6zbp1SVCz?7E5T`Bwz)%G~kI#UJ)jR`y{F*kUP`>j2sTI*6|vV!V77<2+M^u zT*OdH`&!lH7}51$sxLv*H~OE(z`Sh}6XQe_Z_v{Wa6-eZ7bRAaB+z-C;*Ucd`~pLO zoefEG+F~F6M$#<=RA9zjfEsnqVV`9?75|4YA%iTA@po&#LMF|ZEj=PyD*j4WWh*sW zU=*q>-hh22mJ6G-Z}!aKy%U&>J-QpeV

      L-A=CHo#k5=@Qg~X{im;rPRU$^y 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%0D;v3@L~6f>{J8isV)HENs7-_Kwhcf|VZAO@@R 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 L#W#FbkfGuu z{{G3I=qx{@vUjkvqj1?V|C`ul@LUmAPv`For7ZG+cNM5K(Ebj@FnIzR)1FUGmo!wN z{K$FqCq><-*Z#;XLHRQ#!xvPKjz#n#cf3ok$L=Ja#N}qPzj>_WKAz}GcS&neVWU*> zXm^NKx#vT&KE=tL?30^UpFHm_(CIQB?`J&YUh+IYa=7@qdRh->tfcA_T7fEY4D-MsYpWTL9;4 zZO}JWr!?owZnE-_Qo2j*b{2|q*cp3#g0vFqHqDD@R4J>LyPEUQBdsKg{XtER^YO8y zqQKj!LWC4H6_o$G2^dyR+yTS`FXkcl+r=&3c!I}|cwx9wQt^&XTI;z+#zVQVNep5- z5Lps3chNN>I%FA-%eI>qlU+@bsp{pq)vY}QZ=cJ%w5E2J^%8r_Y|eyN5^u;GLs?-y ze^@9Om)S^df}rcsZPdmSTH#hFbbaI*e`=xGTA_{eWnRpd#&}~cwEOM`^33+g440@G z_{CRV&H4QTQAsinhnR;WRX<=do^3Yn3zOLr$?1I-L zS7L${>6;vMR4{J84rW*NRkJCBDor)L7Aof++;1XM=`gC_UpY+R>}ERjrKI|l#(YtA zp>${qt>hpZBAzyAZ)H)sKV;jk-8Wu(iaPNoC5 zF&&NOA?T`eljl+L_n81Ob(#Q|o7kA-Yl6Gb9{6mSHbvLTWb(Oag0OzcD6-8{-=x9rM@;WIbGyi3(#Ee4DAx{S>{%jWV zapkE5pfs-F_`x^R=0#fy^n6@7SZa&tnpV1$WjriLxx$yRb32%BNndM6GF{61IbHG7 zAG^a^-6axpk<2D{o3%#Q2=So^QLfO{@DEk?lZj_XcuGQ?oHC%hwb_p$cQN>%X>||s zW&wy6tK&nuBoIr&*R{H^nQ*5z`)4YlP$mGVQ&w(b$F3^)i$t*ipS_qD)keHlB&6hH z?|TaB&3=8eUw;DyO!>a10g?XvI^YO!lc zDc*Hs_p2AKm;W0ts7kb$IQ$ZX8YDkc3go)pzFFZga3a>s3Q9JL{hk<(NFY|s+Mu-( z@-r)BY%%Z(S%TROdP}RjS%T&G$e`D>x{+2I%z>H6H~51z$i6JQ4i}jT8!1k!JDZOe zhNzzGMlxN~lUJ=|GTWGUE$et|$4=QbTc!;h*MM-NmK#E>I3fi&UcxQrJ|{&tSnsDR z?%x|&z5{M{$ws1!cyHl-1Mj_k#wkAIX7*NmeSP|k1ANByPTmJLmy1Z#m5{}xKR%Jm zidQV*RgGZn8kr`#|B%SEGE_a}XAEwks~gad8B=-N-I4vy&U7kC{+I|E8Ohy7WV$5u z?b-?ZW%XCxko>N6BO?v*i~!3fb>5=mt}i9&KBI?Bc=OZ$PY-@eIi?}kfSD2gvZoGF16AeZzAi>gyuv>`LHLFYb?4?WY0I#6RBo#9I54$ zYqaVAHj$_Kj9W4$a!j|0JiyqiITH+&QOTE|8w!jnHCbbsgH*JdETQ=s>D_Xbx*;nPp}mvLg!8O~PpE`Hl!W)((wsLg-N3oa?7q*YA?A9q z<6ur!^0MZh+pqp#eYp4MW`qHh`dPAGID7YKv@&(g=OrpPTBaw;H zkimuaBOk=WYc zlVTwK-YA(hNjbK7x;!2&e!|S~mSh-U(1(vCPrKxqP<#n_#P@X1J4BuxA1fAsp#4Z$ ztR6|FP1r;`TO z5^z%Uz|UPI?peL9;~FMFCgRqy5HrnL%?j8laSUv9L|&&%N?CK>!NaLZ83gAyr{aSB z_N2_)r+_Upv)`Df>gGBFfe&ZVEZPaDt~!|pT2p22-%F>CGh+-checCBq^8WL07==$ z^nCGz)0H?^l39>R+4B@!Ct3CN8_+K@_V8J&zX0Zxr__=FG^kDgn3d()Y zEO!^>357_z%+%oeSovKrnH?klo>xHu4hs)eC2W{Y%^i1Vt# z&k4kTcB3&{1eD}&WIYg>K*)4swtz|Urz&K;F?$bRx_6l_ySHz+4R02UgdZTZE_NFe z3v|&2J0EaTu!u4#k#;vK`>VF@?9$&tKwX@`G6h}aQ;R9em@ULTc`{WEG-iL3D%>nN z{AVSbUPux#->4PozuBwSXo@?EzhJ4T`&y$)CXBU4DOx+6psCe{XeuN)z1k34VF@`( zNc~WP?bXJ1E6wqQRI$q?p(&&)lhBg8)GZFSu&N~0j$dxt36oW_sgPcO^c5C2-g-dw zc&iK+B#T*ioN%S#H-Zp_h$W%kJ%H~_2{k#;8Xc*o`wVcet||Wi0@rS(ThZYT!4hS# zF>xR&y8&viOH643#$8UyXi2s~xq(z|#K_W49Dii4=YC|Z=RT0tn=Bw?JnxkC+@})q zb1OuRu<)XtYCWeEPhu50s9mcYWu^I%TF(JJvVSJ)xwo~tizQB}&_31b&f%lm$O7bQ zk3sBcPkvP`0~RxU%cMKfvmgg0M56jw&C_v5`+pzlajCVyQ6sH1Ek>j-;NELdNv_EB zMsOKdOa=88_DVX2l)fvv&;i_w7UV2J2;z5Ntw`4xi}>|_cI*h6Bydka7GqyXgJnvh zBmVe}(7-F2^B(4fK8xu7>XSANT=%6-150?5jQU|aZ^nG1HEp3qVjsHcZ86;Qr579P zXi8^H3Hmo%jrci@h>jR2HEX)~4rtEno31^Ws@l$TIdLr!?PpZBbTMD2tboyzI`M5`DQ`LSUz$FIH4D3phs~qpLyf<(aUyIuFsF zk^|hpre6K=HBTVYT_0bro<8m6R*aN#Iu<^#69vk1byC`t+J>38=#8B2oT4a&&EmDP*owEp6srEFhkpIeZuUbT{$=>Ny z)ZD-soSXor?EZLFp}vPhOG|RY7x7ZMNB=7NL9SbQ@AH>zU6LErysiG|p#f6|1a!#9Z~5ahXOuRuB=a!mPEUS46f=J@)G&V;7p3GkU=*AmLs-dQsP!D1{{)wekmXpCp z`i21*=tVlNj~AU5$le@uZ48%j30<_kziU$MeO=q2O?ki zN)Gu-js#0u?Xivd8C!q!zyNLbUl=(#G7)X>#Ok;QH%m?}^kuiIo4#PwdwIU#H7D@0QA3+pJL^yfxjg#h z<=VVgu+Q_y9~MlyzrewS4K_${ErxCZVRpTT=S z-XVHi0((&gs0n;SbTccTbx4}3%^ypJLN-1yNzn9P2K6tYK)-N!N)pfo)mmuI-&KpW zmvL430XJAwuj=SGzdPNzOna_XZ?i~Gq#AdX7TKvfmh2=TJ3;+lh(WDW(u75eRe-iO zd6APcApU@m$D|*A{Kq>r+ zb{s6-hy09*V(FZImvaZH&$TDA*9Nx4KKK>DQj{!7_f7EY1n^OYo+A@Jru(&*Z+DdJ zv|+;^U;g+pu#q*dJ8WQ6+sbJuHyiIJV>*wyEZrAmt8*X(AOk|qRE&w@^^-H32mE#e zlp9PyVTj((p#Z-)$>9!9pD-HWWnVx)lz2h_LEq?GbAZJByT*6!SH5^9^i2Q<`qr!; z#vQ5J^xUk{;t%kM40sJ+Su#&+Fm!Z65%?Xu<`RASxO zBnoi-l)f7%miu73!S7mPIj{!&ZkXOfM(YN^SCg+D@}(u)umNPdQEeS9BiO=S?26coK>QJKnr2Z~VPFIpMS1bMr~LM5UiYaD9sY1aimK1abY|m}J9fl48tQ&@cy5iEJtv?q^W z2a{%x;gkIEpyS9VhU0nN@q)l}bRGQqi16#f$XvdXo$yTI*IlI<;!wTe_^s~vo#FYd zL-+j7!Lxv80nb97g*=@+oji+p7V+%MvoFtnJmJ^t;MdLY>s`XH5rhu<;R;%8GURS< zw(#sjoP4-dzT76?W}7fJN_`9OP7LQ2goAIif^nzUcf+?uME)=Mwu=GOYFC4pi57n1 zH)ca39~LP1r4^snfV-nfW4pYTxOGGBIM*ZVcAC0kbbyfuY9l9}^mM_s?>REcUZ z3{k}y(PjK%cM+bz`Sw~_>>JS~{OT$~kE%q^)=T(<5-vV!#7Hu+QG(29!!E<+YKi>% z*!;;7%8pG(o^rKl@!NRnDvMcqB49?;J|iWnsuCYa8r2Rnz_oYgF#TC+i@q1909Uvg zBg1rKiDa-^b?=o)J46*hO|`QrB_Y0XU3+G}ravpK)c3d=!>`zxW)|qrN+CE2k5|uO zPpNc6P~XEbM%e=Gc*;fb-bZmjFwDD9i(PRZ$CFmeDTl1^&sjl7U*s)0g|5X{B9vJJ zrbbn7(p!uNWzaCajx8b9)vC>3Dybe+ooID!*A_e>-*g8PYL#ELq|v21q%BxXSmF=- zP?dKMT2Aj0!`o^ON_4f9oyD!M#&vh2F9=^8Fn(U)TNJHsMc!1`Io)$nvv-pu@|J!i zhJLj(@#vRW*Ixunjy`6joX$p;X%D5})eta36~=8?LPs{4OYuAoD+v89B0F}MoXg)t zcIcJIRoxoCklS{+h71Q_*tI(Jw}b)i>u9@E@k?YISX< z$4%P&m6&ar_^LP2x&?pd8?URiD%?b(y%t)nJt|hss|omtzmY9nn>oJb>??ZXYNEEy zR&8c~H_P~{+M2r6w#TY%<5984t*t=yO~IEUSz7HO8geY9N+j&|?Kwr_Gjr@deva(~ z14$kIZU!<7xY0~Lv|IT&d^R7PD-b*C_d1mB>XD(Q0_`6z(Oup7K8tkOZk@yn(tv2q z9(usmn#JF?wPs)M%E@Y0?Iw*iM<%&RJVG7EK+uh}-D9j4(1B2%j_|Y0qpy;_@L0-2 zW?=sIKD@-I;c2W3PWvifk}zOQsxT_<2Kk`@bI`>(IEw&~kpE`q{yrH%iRtD_Z5ba&Tl(14xp{qJ~;NUL~6`&?dU=Mnb;L?lc8h})>mKApG`a%->_ z%jear?~fjsq1B!V1yAhbjsT2^Nt@zxTI^;l0}O@juCi^PVFjAS?Fcj@EVz+ZnB^5h_=C;=js~?j9PfiA`Pt>L6*f_h7P36VbxH!9yOXV4AOu~f>2J)>| zJBaZxybUhzDlI5yB$w%H6lqx_U}4lr$Bp?iQm%uXu|f(0$>*Qqq^ETfsyFI~T+P~o zTteiS=66Vu=)s2qi7rLyW4+k|g53m+$SO4Q4fsS9Yei*dKKe{G*ILZYi$D7nEVTk9 zAF|?^KbQc{`#6f#c^^0C>U?v|2vT;i#-~q&_jDD=9n{*K-f%-@%grh=e&uanII>)h zhqXHKWWP!>Bwpf8Z?P!7Lf)q6bChR^6*k+~7UUtJCkpt{H>db?ZH0XAHTmzo#mRxN zqWKdf%p@r|J`rv{mJl<|%pST)>J>1V?7*rI_HRic;j<7vCRwt}9vp~NAS3m#WE+(o zS0&#nhMZqY`-6)_ske-=(pzjHq+d!1>4SW<#1e4!qFY#;e8QF*)D+};7YbA>4tQeO zq2YwG!;=hQVk=W_$quQMB0G4O1oXRFj}aU;{YYVgKP@z*WnIxe?hhHn(`x(m5I4PKo| z1zwzZT&7Mu9+9KCa^msIoX;Ft!yFG+<|&}Vw&b5At>-e3_)VO@;*_I0SefB?aPnPw>Dy4K5N9 z%_>Oe54HKY&P8&>`xUrLUgru|&}>QaJg>f%d^ec+?&M*wp94thaUGo@^!-$=HV$5S zISm|}Oc08CH~%?8TO@}U&4ZpM(haW(zrr!Z>1U|Zm3pIVxKY(lp=0tg(#jD_pBL58 zGyTQ*JuCTRd}hgkP;+>;Gdv%D%J2-IKXqe3Z%j{l{V=m1@l6kz_Fk{jG$Wto=L~U&^4las-l^w=i|y*j6*$GiJIik}mcX=@Osg+n#AT z8L^r{bZ5Vz1n4pc%vJiSZz*ZkVn1NUw3R(fvS<@Tjx8$+nHWxNtYNy_0$7*hK_GRN znu;zPQb$x!AHQe!$!5)Eiz^cwJ9dQD?{56?+0 z%pHT<812fftl+)sW^LsyIr{5np2+PS&?enUt<0C1%u#tx^q`~iOp@iMl3imb1497) zu^nm_e#L{~OP)rM+YGv0f?|-(cNp{JY3?LNEEWh_81Q-6wg%| zyd@hc4{sV;-8Y3$)35lkhhD3F9zn2tr8)eGMxa9(#oU28h;=1Eg*uAa=A_wp6Hyid zl=PI8w4_@}b2CelJ0~)wLs?eDNMH)SEbHdq%37kUB{7HH9i#XQ*CPBo{G~k2Um#qWJVaRR ze^Vtqq%u#@Jz*qA@sDJU#f(hmVKJjizLlelrcd2DN<*5X)PqHeJ7jQ_e?d3?ZyaSE zIsXqFWzL6cq@U!W)&8C`PQXznndzz}T}-%FVjD|7lcRjbL>$dgSkMSZ5ksUCbCiMq z4oB%hmEXouJ_KKEviASMQN(if-{mN{+7gB`QWy#|n88r4w>gElQqjhJ&s0Xv6+a;Jp}!z z?7{a{Wy^S=`V#Ju&k7app|CkuF%gS<3{=uQ&Y85jFCjIFz5Iwl>cEH0rhE&-;0TGC zIirlfN*R9>nuUUAB-}Bj;6a7+J-$U5r@~Egy%%$k5fV)DNk=8Gu#&6rbn;szxJ8@) z-e-t=rW&h7DCL`crxavXtWa!yvmI-aVO{C#rcp}QW^;j)_?fC%6640y471j7d$rmN zC2}(~c!4xDp*q1r_9mRbTMF7n^h>ePd|NDHtsSeXUu(yj+GTwsi}};g6JT{?H3+Zc zhA7!BjWPP-j#=l!JG={(D-!9fs?F|fQ@7gC9h$MKwvCLWYRies{w`(Pi&*a>BeF2N z$<$e612D)J|4rYn&CT8?Xb%k<_XH+Xn>s#_TXCzOIN2QENP&!;s_t14)Dl03RG9Up zIbjAP^roV1cBpaNh8_4PUl)YpnCz=<5F&sP;}N#ydu49;K628=b}Yk{KJ z3w&EjmqymjrY?3*35uUL0QPEs3DdGt98bA?Pb1eZ}@CiYie5Ee6X1HDU858x0Y0*eWPvikWyYp~t3t3FUsEnAP|d%!=^|AVF@K#DXGX9! zqQzFHi~GusRmFWJv8p&4u8K1uT#ai&inCOXO1bz6-)ZIIF210S$0`^92YY=m?7D8s z#h5^I*0<>w?F%^f6bSGN91babIMx97?_hPzg>QI!e z=6HBr|FZOl$EaI>sB(7KAKqx{5B-+@5XkkK>K!4~o^@k@ZWvZMLJ&y7)Q*CHG zEVw50Kp<2vm2 ztxGyzCIhD5;j2xxY+9PN_p?g6>7&Ta1~XRRSrmaX`)$v#mxL)tN=w-&Gy5RUuCq7k zYq<}K7_7ML`Lddd9-#E2yYCi}-Uf1&MV;WIT1j3#**XGIXD2c%YDK!E<`}CEPl7~!9=46R` z>e!E&8XOm&Wh;2;EncYaJzeJTdg7AY1t1|azsRKarNo%j9xYemeECW#2J+#m&W4df+{Z+(Qcr~@Wr{NhDR;*$tBTR?N1RoL?)-MJ*8V?oCGf- zMCK9W-Fj)MsQ`D|plqxVuN2{a4AOYE_+>eWK5Xs1H@ey)_-+ zQ=QhLpc|=~Bk;MDFyVlOc${@u~!~c_9D$Px-PKxx;V&4|| zrsZ2=CisGO-9(`I`vfS^E2NTXbsrMM#jeI=+^8wlgSlS={sbE`@CV1^v!%I84{761 zq=Ewx;Lm>90A}+i|Au35=OPn#>b!5Yrfi`Qm0PS4>ZLJBk zaRE%X@sNO&t4)FHZEn3b1+F)l;2M{aaU1Gkf~y)U0axX^QNY!^L}0a6V3q5_8CI4* zqG)vMs4f6lAua&y-zi?cMg9vvnS2U>ZAkn;#6n9*PTc+>AC2sRn??{V;bJj>m`nDQ z0Ysa&V73(360x`DEz^gT3}OJL31QUW)RSqMz;qZR^YYO5d| zyU21O!v^TM{WxB6B@}0sVjL~|b2G>BWdBb%T_Cc5WR7XjkgQ>@Z%7j_ZT|N@0tJS1 zAr^Fg{!H+}l6%`2wpgX$M}!|Sa@Zu1rjWOh>5DZ;q-ZuoF5k}#C;rJjTHTpVCYQ14 zXoUNdSuu)pVUt8A#N8t8>Xq59+JhAM06$Xtbor2ww7OL>yywx8C7$Dl6?6t(*S*iq zW8y=8rqnNf2j>x#FMqo;-sSsWZ*_Iy0oAp@>lkC+u2X*|+^qjbf>s0*uHslx)3kZqd$rH~ScuBw| zq2cXo5?;gWG@T!bOVJB46nK7-9Ad;TdrimB&N7V!W}hkNgvQlGM+|F3;GBM&oNubF zp+3^DOs5}erN1ea{uD`n&-muNu7;F>L0P43U~tKcwt>L|t2vHL4aq^xdE3%SPf8`t zP9^=Zm6SGwYt#WOPl4Dm{%tz_LySl8o!Ba-tg#WS7}b7U886Z5Wzdp~c!NO~7K;~5 zYpYjnqOt2V5l#J^QkGfD(1)G(_?7pxvISRIhko$sj6EjN58g}6u)?~^yyq>aqm=|? zigV~s3rzo`ZoP%G`l|lYQh_Tzp9LE>-(-Y>Y+Tm*w#B#N==cbu_V7uzuXtn|42aElt3s`FIulUI^M_T_GL zKi&TYLo8DH+4NGg(G-R$*bMRD-onulq>slXSko%UO-ea z%RN7_RD`}3bC>P{lDVJGSLcVMT5aBZVnuZ8mvW_=BWVW6^(PzL`d;CK@Ao+AAZ}m8 zGd^B{ax2I4Q8ktXVJ^eLO|2>Ki5u3YBPRbN$6g$-S~(n*7e)_>V^ztKYvzy!N)EBs z7LF-7O81E~+gLL}iG7%iF!U!2YI*d#)+0@o(=fcN)Z-?I*$C*5-AI5}e}kPJfoA5L z{oBwk48Qxajf*tQrjTFXiJMGLLRPeUv-gT+O$l@}1P=H^811htEK{CQGl3f~sb2ll zfT4;9$Ra%j*E|Mo7^vEi{2{R4J!tyG^mJFgb|N&GPE0p6_&EWVJ$(21^bEtX;k=)q zJW1>ky#(G{+iMOrL{1Cn!Fn5Rl7l3CPtBorJKUUiHvb4eP;+QcJAh+^oGSQP6rWs{NN%ov0tk-H~*D#$+DQ($<9U_x`1-U$B zxpEDDVAOiJ%1?(0uh$_()T>skuzOX?7yhK9Ugj*>&Ci*4cvT}`m!V8X{BuvCS z)EuqR>G%%1P2Lm;DTjL%ui^hmt5cdo6;V;n{eZ7%b$_-pNzy_9LMjKkAVZRVPAayd zoD-_5X;oD(3{b(hE-{t`|08HdpRk5n7b=V%o}r*E6NL+$kNn%co8ZtAdUZzC?g?TF}$Wj&9x8WYYrzJ8uLH=ga$$1U}O3*M4oiGqyZXoj;E;ebvYLH36oK)@yU!{I)k`zW;I?pQ1JD9DgGFAEz8KDTsg;H7yRr= za}Z|w)GH4Tzv^iUKDtw^BuB17h|zR8lG2=a6(7)Q5?}fApW1><=vhmULDm*AEG=s% zRy~u$>Sd?WJ8^LPFBHN!Dq&2(qAg7Ul%ST4F=9)=P{Itv013gnEJX>%)tJoUYpPHp zfyfGju;$W?c7hZ&c+-sIl(+1Y7Xk}6afuErGOo4ji zK5m9tgdzprWmR`|rvrkY0eu%o%sc+Ufi8}c3#amP8RfX80?9`sh@>c9B8WghQ5-)|QxG@#SjX}=e2(k*AD)k-ZC%ha~HWBsM`Mqid z{uxa1=VS~hl=y>3b5n33#6p516A851Z~m!P`$}FxCIk~6X1Im5praDjqQH8yq#Cdp zbl9AR?i>+5$dg++QMg!z%5)4yJV@4b9wo4l$5B}#I8m(f9D@{hWaP0#mQEIE$MhCQ zuH!O9i45YD_zs+1vA)xJQTo!O&yy%lqDK~q9_U5mzw7C?m|xBp$ptS~@lk!TH4~Bw z;~>pAEC})BUGk9dBXQb=UKZz-5*1vfJZALtF6TVT5`d~q>=pdRD0LL!!l3cv3NE0F zRyT-kvv(U6DUD>bdJ!9(5Ac;(g^Vb>tshCE>AQl)H1xK=wDeBfJo={{^M{KHiM2#a zcq9s^(p~k+Ua%PbZ1y^cFy_WRNT(D|+d3wx)S{oQZit*K(b=M0Z1G8*k@FHht3I() zZ3w@omaJB+7Q2{8Wk7fyFaGSe1A2R)WRLPbf`QDb1Tt%;8J4=XC1so%9xqmdSSn;# z4K}TV;yWImc5bGvN97rit4+j+)nK6|pV`KPs|Y{J-a~&CJZGY8^TB=kTS%UYVd?Fj zl0CY2A-7VA;b1#lOY8*s{}IzCW*o{?Fj(V>7hxy3)vdoHS3-IaZ&_EzZxyny>;dnB zih5mKIa4g8SL^{f@49k$Z!9Q|YY%v{>N^&U@l!uoOCN{Nns#=4fm)WSOG+v=VmgQ! zHhflP0sKo@Zm`JML73{_5PLnw;{Bb(T{P7);W*j-Y=2gjXq+#w>^BI}R?{xIvcWP3 z96@^bv-ztTZ6T>GY#m|?C;}+NUuG!WJ6qpt-!Gs^>H&udKAbYcKp~Ck8A9l7(Ze}a zx2P;RDvMImRwGZhWFf?)q@*cL3x3_sMfn^COIi8Rl2%uQ~HJ5G>bF(*vqn%Bw zy76<(vl#xb{(p~KNwCEd4*cf+{zy`Mzq(x3vqn{`y5~IIcQdX)XZfO*F zd*nE_e-nsFTWVmXdIJIJ7G>J2>aVKPT%r^G&ny9_$S~WMfO3yUl-bc%&P*)@wA$;` zOf)ds4QUOikWzJzhDS90*O0?p4Tv1_y>v36o+LZ2)y9ugRvQq9a_-HDea5gS^AsQf z%uuf#TxM63iAf5L02{3O*uxb6S|0s<%=(~%11Hu5OmlTaTR|hO_E}6ZlH*M<{QH!8 zHu!VBHL}{fm1XRDe0NTBC%x$bC0N2PO_s8x2H#Aj!4BbPYT<|J9_zhVL0Bt((9WtJ z#1_7qjlQ4luq7b87pmL4O&iqf^pAvVVxKrru2ML6tuvDMYc|kYv_WU@|1c*@Hq#ot zc(<9qnO+DLjr0*wVHJ5!-A)2+5ce_NXF4P9E%Ng?iGs`a9JfjvG>$mgJ7RDeAR3u+IAt$-`ZMO{w~D(o z(Q3t+cB2>K8R{8pcZj^&yr+p~Fk(Cu3a8;FGIapz)wKv?X=t!_hsFrZ$ki(umOf)_ zXi%0uvL%FufbAgB5Ts2<)m&<||4oxMCXUVGT>(*Insgn&5I3#&-6TkT zGe5F9GoG<4-IcgWa8+2MbKG(~HdWzI6)w3hF;v2_(iD%bhv^z=P!6d`Z;Rbu#Yipo z=+Tq86C0-g0=>kG@K)i6ZsQJ{AF>Z~@0H^I=%`)HE6kl3i=V(BTf*06?qAv)GTS=J zRd#kT-=g(y*L#uExy$M-t8&?)+?VX9HeRZiBsB{f)y5_}HAopRW+D*=`Y3Z={2;&pwj)t(FfV1_7QC7r%D-fzIjcz8fpvv)D0A%-f8F;v;+GhQ;4 zhWk1$n;~lJ#V5Np&%5xLS?fhwNsIBU6vyX%-EN`8pmEEmz16iYxjh5<`XA-b$2>n9 z(7lV4m(EU8FYQ98tX_tg%(ZKaS?J$QLn8z6bbuq=ySWxt=URi7Kq>Hc>pq4kV+|=_cAoH8~pe8;)w$ z;@URSa?h2`-u03R{w*M4%1A2-s7FsJ`l-anEb)bZin|mu)AUyvSrp0m%?(v}jGqH1 za#(A<$W6Cgp^OM_66s1@Ibk+z;g{>(@C9A#+}X|kP_rD?vZbf>9p{lpk_vpdzK)zP z39{EG&q=pk>Q_>jBy)Woen+;mQDmdYNVPh4J*`#x-fMaBQIFmgEZMEBK?V~7CR%5F z)cV-1?l0nqk2pVJR#t_717|xc#o4Z$fsBqMRdtyXl#Aswuc^<$1Fz@Z){mvmYcz43sGGd?i8BAzcLwzXc&frHz$(2} z9oZ0BSlQQdZ8L(`J|%d4j+D9z;Y&KHgfDeTD(5r?b56spZ%LjLV4M&~S7i=pmXE_2 zaq(}-HA$)S8SiMZAKCKQD~yVrOsm<;mAsNdCWfCk(S4vv5seSm&cwl&t`b^#rjBO3Oc|zvp^=;^dF+6FG(!fo@^X>PE+t#)c*e^jG9p9R9+n2>-^sjMpe$eLCQ4$0iB#Wk9oil0kJ8vz+)kdgRf$EB>IqQv@F?2Ow-H5Y}q1 z7A^6mfLw~LYxXe^+E{&V@_vahd3vE>wk-h)9##s99Ca3CH{*JOvmgy(x{E)koGK5w zMshizwFr+~>lUe6j*T>!=RruCJ`XZ8*S08$oNtQ=T+oQ~e=RmgrtwpLlr|vIE^h)E z2@&p7^w3bc)ZAJbFk7m7MI^Xk$!lc()AC%VBqzikN$wR(l1q6rn^I3!Tb{FaCWTm9 z;@ov_olu+`NR$%iNZR0z2d>N-7F?<=C}sQu#$ z*>XV~*)k;fT-O7>6BnT8x@&zYTIw%pBFoOysp7V6fdiQgw&0(LvcgW(OkDY=zD zl)0Orax-~y{6~$tNb)ylW)MpqGB~8H%1cBxyAaf!fvJvI2C4Z`m@6Iwejx&yWff!! zXrD?KcQJjEJuyZJW(shXY$lfvB<@qOlQE_V7Z>8Pqu6P(;R3^327uu(Q8@#<_UP5cJtEbu3*ORe?*yTH~OB2iR$6vuuUw)F=J6OR2X z)b6*utMx~k-mO1cKk|iI*y%gb_@Ec@lyvAU)btKfknCYA0=f{0_qv3F6u-uauj1E& z`0(qI@qSr~QEyK65;j26Y?9V1{%qSH?+~T*l(W4EiU+phGH;b#_u6r2}8J+6|!Hu?)KMN@31}$r9*got?C|?5r_< zY#H4=0e@x+W=eESuA4|4VdT~2#WC?=?atn=ybXl&Sb?2DZDIrIQEHPLEO2$Z91k2v zVRA85c2k&~LqJ+&>jrlL_z z2q9R-{H^)BOz&f&Lc#R7#*^J(^H}aje}CHL$*UB9eSg}(|Mc&qKYa-K*gw;XIF!opC@1ZCb zZxQZzVITX9{V;pcce&}G2cz(o+70)VrWSpyAWZtp5l~oD@~JeusiXF0hUr@%$1IfO zl>Jn3&tn>Bu17I2<-6v3&y!od%3MR*^u+7h9Y$TgKINXrRtK!_C{>x{eEsAWS?=MR zr>R@lM1Q4N(npd+mV1hq$iQQID7>vE)$o|WkY`1X|*|Iv5_RLMmk?am2)WlC^b@Kf}K_*loVLjekQ_mDX^2d4%KE$2vooM zuZpv2QBje=-B$B`%zE?~{+81JW6_K6fIYe?w3=H0_ztkQ0N`v&s6BQI;FKxYAEEyb z!n~lR@H12YkL%rYGx=FJ{lCr5ls|y8GW7pX$$E2E)tQQACFRhim>;=QYW#`aHU@UG zF|dU!Yz$0&jSYcj-evug+7E!gy_4w=;5gdsue!|P@$kH7NN2z)E4|M-rNN=A7_%_}D&r+zzP2gRtsTWz{bH+WT{ue&>ZR&r{ zXv$v*<6tyr}jq(y6VyeFDh&NT=Gk8m>zGWH{K7MGZux7ZZoKeCXqAav#6g%DAuPL|7Amw9T z!5S%0T;SFN#YHG`kG6fbVd^BS-N{}8W@h^?VAI>$AfSD47}-Y9=G{-J5a8;JT_uB{ ze`AMWT-v$B6dPvJq&>AmFfQd>!rCEt47+AKeK+zR(}+nd#Q-@q#Q)8QIeb4R&K$mp zyjg+~vWs?KxtJ}x`AO4+qwcqx^;rk-$mJAx!1e22`}CKxfM=hPcj=J=MjOdOt}<_7 zW%idWjM>6{ars^FT`_Bey59e!19!9qxYSH)c38C;1~{vNxOo)jZ~*4SrJl-j3+9dm zRN=>XtmF%S^vLYOVng}x;ZrZ}s0tWMU%64We&H)})1SwPy)sFPva2ed@yEnt)Ri6$_(3q#8pwS} zHCBJfM{;b62lGe{M={jk-oGO=wa6#6EPGW7EhblY7_|dQtzXyak2ZDER&BQ6vD@h3 zHfB2f@!K7`N)QO`@P(SO9+PH|2@U`4m=G>Z1EEW11wucX<-nW!&>P}~7cp)!SpMt= zRN+C_``QByFwk=Cfu^b7=W}Wxpl{7=P@l^+R8?EiP#|!jnh;V zL27WO)a$=F;B&pMMZcjR#xRMh?VA26&(6emNL#=Ej6{N{l)lTFPis_z`e*uM1BmyT zgUzEaU&$+vPH#N=%8!UhXX~E9ECiha@F)-_a{zyH@(6|w1acJ^N0Zt5W5Ws3qPM^p z8Cyx_*4Hk{jtuiH@?eYT(c2mm{o{dxuC{}|&<1~~Xr4b*_Mm%izpMSBaIDiG8vd+% zXuoTwp5p7mp1UaK*30I()f(zqXaRl_+-)7ne(5Qx_l26g`Xw>H+?qOn0cnEzI)7Ko z4WT<9?Yu4?$ifeBgU8iYEq+`C7Dk60OWbpd@;!Q!;)lM_&aOs($nhxKR1)tCIqriB zIr4*{z@v`Qq2UYo8h%arkOSJaJGE<@hqPAB!}7#!6vn_Iw_dnhDnaGrYMb$F;#W*b zx^c3;-=_wF1&xV7wKIjv8IEFqXrtRGnnxdtp{w(PA!sZ8oN>$bp~5H))Jiv~?EqhB ze;0c>{g(6hdz#X(Kes6@chKUfYUYr2+O_+&Yj+HJy{f-2^e#m|%D_sI@fqL2RKnwW zbH?gqJ~p$tbk(an9yNz^xf;&4WN~J5!8g_;4Cg3)ER!L27xRS%b8m>hYlGJ)DrQ_` zour_#IN0BMeaP`wCNIBqgHnxv-@efHE>5mG7N%P056xIedxx)159D?k$Q@PZ`$B8o zMi~Q1gUjZ{!&%wB&=KyNa2>q&xr8!MWqunIB7@lLo#;yf&RN?02Wc1hEg+`1GI^#SUudw(F|_Dvxt%DBVc+W4Um<6Lp=|MmiWs}H2Smq&FTCP^~)M&P5o>@b~tn1t5u^GS6xP zj|(9RJPQq2Pr%jXYMJ>1Z23Czub75Clb%Hz96r~Msf>341jg`WuXPU_YdB{1*x#lX zB-@2^Nc;d_=#*~ppX_flocbB0d66;2!ItYlRnGoCR^tTFN}4&+f6D)z9ZSZmX zq|f#0%v;#k$byNM0w^>#2d%#XhT7wia<_atOjb~hFz3C9H~l`{wbPdt8^(P7C>gbBPeeN0Tqfq$Pjlv;9Y=UYXhcfyZgTMc*TZnJtp5MQHuhQ!`pV^=(2b9|^)Q>SVN-L&Z@> z4halFwEAxr12RMr5-oLb@h z$Q}8WS4lE$Owt|wSB^&uexbKo)v}j)xeg1f09^`O~7Co6SG5KZp zn^L;gmToZT&nPP}`e}N<0=-P@+UScmI=GSG-UK5nV;Lx6*~E=lhv?E5IbEAQuI(Ou zt2So4^hTX?PIZG0D7is@kKU+sZQ7X4biK*Ycx7voBdrdhE#6thOanJ zN9-QGtz@s+2VXq=EPdEF^)%W)U$uYsKLrxHaHyN$rX2*2xO9W&^7^W;5#bJ_AAJX# z>D)R2p}QD`x9~+Ht{N2&%o-ffn>d5Wy;`Z=Yz5C;NKuCsf1r+wqQ=f@8Tr_k`9)n+ZRAie$wC^fPNWfT90Q6wM1GAnGvLj_ zKecY?BK%Vm{wdd7HBX&>G;Rq0?4vtL^I}l{xI1PVY7GYQNrd;%L>JLYCaiL}_ZJlh zO1`wYVF13wEjR_UcAIPdyvH6A+LRA%lH6C3JK)-1mFwQmz3!?ATJ0+V2pWYQ2VC1{ zR{6xU`k8>2Uru+QB4})q3HYaBuFv9s5!`@{ z#ePPm0lh_A$qCp~Z(S&(I7=w}q;BJ(#YKEikAzQu@hE}i#%!bu5m;2YR+nPm%_zOs z!3S-@1p!3l4hGDc9j$f%DHG~Q*)fwa;yCbzDn*6hN*+8Ry~Dh%T-h*dz3788ETB6ML~^n^E)4N=ll)Z6 z&l350U4GX5h@XV~jFq2XPUh!RiRdMtS@Lpl@MYi}eHCG}6_5g#R*za^3}?&dPG+6u|3#}}I+hY6X)t5+_a z3g|E0&3p1D_x?86y42>;F;6YWd)#9SB^4$GbFMuT5j^JP*N;Z63pu7e&li8FmH2=$ z*4gee0?rPf5q5G+YlW0y%y2@XHm4;R_B#y~<1gWIxfRn%<8M5Y6LcNXU)m(a=nt*p zLH1=lJi4k|o8Jsu@reNx%J$kCNr1o_aB*S6V=^4teDNX>aP9GEfj#03dj3ioHDm-V zi|E=M(j?Cd80sb67`2}9>Yu0s8*-7bSO3P{_L)BfY82MV-K^Idg@0h3`J@OZ`sT(X z{Yy8)f|YX!WV7u?4}ERpq5h>T&JLl6GyPf((nxO30ec9+09{UM7G8X z_}Ei&x!%mJJW^AxLZ<<3^ugkv%N7PqcWgcOgt^Q z=Q@+aY<&}$(kybPinoRc)Y3m9VR8`jl~G#vR2&2$b1h3p6%<`Yhok(7w za;>lNQ>5^<)`g0k!qs9Qkb?VlMG%kA5Z2k?E5S}LJtNqYIz5lH!ag5q*PKNUBO5;q z%N$Ek&j|$e8-0fI=ihg&8eLGXT<%i<+sKw39EFC{e~pxAD8z&)2;OPY ze=vrbtIoNuVXqlA1KrgmK<>llLlj72Pd@!vT2pP5f1|(YWUuYE&gmT7*a0B8UnDaE!kZL#@3jf> zhR=uDlzT5vu&vHj&Wd@+)c}d5{Fw0>t(YGrl_f86t{}RnhkM_8)_k7ze%G6B&AZ+m zJv=~*4=SSU(Cc!)Xh2`sOUR&4pVw=LdOq5#ou_^<`hKq7#I1xUZFYC9)0g+^AT-*Z z8{O?V3GFX_i4K8ucN3WS0C9)&Y$H4M#>RvFOB>Oo2STR>LS@lFXl&F0EizD!8W0vm z)W>j=fgJ+qOJ7{rJlfzzuk$FjB$v{E*Fme$YIX)q7LdJ`vmY!kyHl7c_2?%(r8z@A zXL5)19?*1jd~7L1CVVDD<_OzszOKfAYpX?Kj#RedW}y@kLwa%5ho_pXSOcIWWY}0C zBpj`VkZ>)wiPGG2a}&?TN6qkn zgSsWZR<})*lE#V(DJ)*}u%8Y_8wf)bl?3`))JLpi<^D(ZJNg=h{n6~AI#!TgGnv=)0oiM zKQXBs(%GvpFN7*u729na{EP zbF`HcuFe_qR^*1!@d^EfXI!1jEW#-oxk)l0g+0(bl^xHmm0Otb{s;<+7(n%|PP2}# z@Oj+R5RO=sV(#g4`)ez=YAe6SE3nzUWPUv?pl$zK7Deuc)>vrQZoTJ93lb?rhM-NNP;?RV0Czy9vA zT~Ir|+#hT7kOoYtck3fN+3n^x)xcgrs~IiI)Y^vWyQF!tKQ0@#=Ex>mMT%8qW*5nk zw?xqE4x9sh zI;iMVQ<^>ykp;&A1wJAo z3k5<%R)Z2t66`_EyuZz(YXmts$|Rm5Oon(IlKvkJ(oGD~nBxtS@YD48M1udz*ldG# zr^Y6Hs+`F=hgLEU$v&#r(!)YR68kWeQDZ139ySov?iC}OU1CG?Z9^otGbH5FADonA zw?WO-?jbao(|k(Egc_kE9rln=+A8|>Pz5hY+;h=HP5qutFXG<)BJPQlrvyI_VWhLgT#7U_?TK)J)tBDc7FQY~iue(UaPD&1<7IgQ~x_2EvvtS9m%^4?~S z%)zhR20jv$V8Q0Qs0A$!6)!Z6Q7i$Z%aTZ?@@LDr8H>4P%m?ruxJ>w4pPV5(BR68ua~b4dLLd0s*EV}Q zB8*Ph+t)%5#$G1$pii2w(RBrgTI?Tyh`5IMJ+R`Qd$M~jS5R!wR=&hPze|{ zQ?+FbC{sW=$r(5!Gk`+8g0)XDV!c4g4A>GNVJ48{$wAtpRg0BA+CDx{?IX64gsYhZ zl5i0cf?SoWzzl;BKp_Flyx+C=nOi{Z@BO^Lf8KoH%-Q?w>)LCrz4qE`ue}#7sh9;6 zm$aT}3XD~l1eq}Vx(D(7l4z}xiv8oUm}cs!MFF%(pdDs_n~>0fd#M-FnP!?LHJAzZ z2Q&}zZhF#q4?}nGUj~n8b=T;hF+_=-ycr^Ew3BfVfsshGDWC*G+ThPn zIR+x3nUZ%aZZYTI#n|^u4Ih$&-@-f<&2Tt31p(y{}p?oJ&|Q^p33;h63MX^D$TX z@U^D9H_gX%_SdfUz(i_Sd!TceNVlMKAXs8HS5Kt>XI*?8T`c(iF0%Cy@1G~{2l__y zX|!+dbl3+DqPf&;%%z^p&>dhrSXjj-QTL68lu7zDbp;%q2hV{v60~mdDHc$9~-DB-$!dQ@Df#n>zB;YHf0ZEvR)?+GL zj~zdA=4w19uZH#^b3LXqitBAcTyH1h%<_7g^VSbWnn|m%C4iJP>me3N5!+j)Sfs_g z2M>SVx?~UAU;LRt4X9}~3RvBxrq#$!anYI-+g{PP_#Dkoj8$RccvG#j?1Q(2w}Ou# zo&nh)iv%7R2Y9jke?hCkckwWm|MLK(;NS6}yIlc9a+(wRgG1etKz6}}jG(bb_$y6o zE*o~F8C8njB!ZvDCO((N?@ZC3rUbYe-XBbc7RG^;J8w=;w5z{Car3FNvN ztm)LcP%mT7G~({DtDh6U63dB#IiuSA9gGSZ4)--R9M@u0kAjLPUWk#JlRhI#!=jIN`H4R<p5h)!daeNOR24!BIDuFUdbsYR} zJR}Vop=QxbzW+e%G)p=yeuYyOHhn=@VL!|%QaFmaVS@>qBUqA;hW4NVRDoG=6jLN9 z;Z2@nuyf0pInhX9e8h4b#4;L0GYY?>@QZhCG{^?;+9>?uT^nt7>9asM2y3Gl;hT>D`&rr);2jUw8(iQg#N{v@_|wvENZ0;_?5j~?UcaT0Mc8c*;K z=u)?$+p;zVZc+_>2hJimZJUdoWap)s7CH0+6Lu8b0X*j3M_-0I^dN+xovV|3=R#9Q{mElO=TuH`V$a`+qL|*H;+*z$z412o_I-T^NdY=`*iT@j*Q1 z$#l0MyI07iKVk}9&(brs1;sDLpg9V!LmjV*m5UJYdUV{HO^+91 z-Ccso9@-J4yN=7NyuIg&?}arS%33u4Zfft8B=zQ~Y1!wo>_tmFy(A5vZZS;8jOG-l z!@P^K&pn7n&wPuFvld}{4KigORyOup-D7DdBS2WX>LtSj7|N_xY!}6aCqPeZ-@*Y0AYOLLLp_TFEbw${Z-)BD3W* zXRxKdj+#$apq37#k=5PexXW-GBC#_vFlV}q9$DH+)w)1LCZxfR%Rac|!=BoHIKq-G z`l1R0?k22Y*AbKDQ$smNti0Ym34s>xKUcTP`lI^cViq3o!CBKOR zqa~Z(M8R*GowhwLbps86`=@rx7Y|}tjs2Ck;O~J(1M44breH`^6Sh=rxa*3K#Ky794ra757Z7R3xeRPR)kv|Vc8IGOhxiH;Ij}NXVzbf2tJDlJ`2%tX8VOGm}U`t77~15nI2xR#v7EjKV&hm51QO#NedF zU_mU1@i!?Wvp|WSn#S@;7&$6eW4`(YT(a;OVp7WAK;;yg%tFhI(9kk%HKCaFR&18v{A|#EJU59keh`_0HDyzEL3BJN?2&E5h`UNf)1thvCsx1RKY^D z0HSY|2*I~V2+{%QwJ1-m%Kv=@ST~qbSvz%>dx?Ue=wpz>*6UIDXQ_N`0y65q7St;K z_A>T?piZ}5AYVxLsk<$W)(be_)dZ7GmqBO=1jCy>=h*q`|4*<%TXtvYgT0L$KZCZwa(F+@L*H-v0&q)AFZkbEb)ZZ&c?@gEfYl zKh@iwR@^UG-2?l}Fz#j1?JT;xxbQECRkX2+GJNcW;=_tA35uGpjHj)x>dDiRd$UQs94ahdiR0rTpqFL`J_X#TRMqbbur#-4cIy=)UX^XJCaf zG8qNUyfLqI#I3Nmn3^4Se<_u1SbkQ+STx9z?VHlw38s*0h#3*oI5{Lc;<_)h~ zb@PbK-3~1`@4GPy+(7A!VR{Ip3{}UZzwep z9hj9INsdn`(Ri$1qw!w<6;Go$pcJi1l5k+Oyc(?mq5&k{_HLqYEP|>(NEcNvp=MVi z9cwj-kmAa=BB8RF!2zx2jlRQr!6?tJo9@l4@G;0l+iStHg8`bgdQ@WnW}*ETD|{oV z{gOT}xq^2EJxPhgqVYy7HGQjuwpurh1koqCXG>@)ZOs9$J;X(13xu(Bv$2eaOmE2; zOu3?x4K8)u*BxDCPA?M1KLX7z;~!V8M@5ENQG_|$;Oj-rzaEubAdEpJ3$lo@OIIP{qDD;l3dGk{%@ST;T^mW@wv2b7xBFkb|51_Gms z@`Or8J~~E^V$88 zmg9JQZ4AdlH-9H;M$m{=%e~*zWPue@(&`)VScMI1HjO-swU9P;s?>T+?)m&QS$%$* z*PpD8o$BpK6TN2%j%6FdjOMOniQYj-Ewz4WPd_EAh0}B?m8PoDeGN8P5PFM3 zqVI3`rq8(2dR$KLREwwS51G`7fR{=177%1r*jGCB)Tu9-l0w%NEn)Ul+i_1EzCo%n zb*E*;?@=FvecH=Ls%sgPxIELP)U~{TZEb-^y@#J#y+*PPu*vI2;XFoE%GN6 zA5(M%vc*`)7K62kQ?=r0p&gh{{9mQ<0dHpm4v9p>NJn!)$Ha5V6*)i=_@SN_+7hDy z=F^8zx6mn9ih$` z@A1I`Ok|8-b&)4${WaQmjCWUA661Xpyn3Rf=x768U2$X^LBy$h{|QgA&f)pPMDLxD zc_iim*@^p3o;Sg$rq_+rfxgh-CP^(Pk({NY^GXl^1kZKw8*7HVE|qPD7@H(rsKYJ} z`EMXwAaUi=o+K*L%C-_Y#OkWCw7!}l6-5x zqt3v8apCjd(Z6AY4?w24(*%?sO@+s@UY|`f(dcIUCcb$W!MCp2yrcMljMD@>9^>N` z-%8Qj58YPu)HA;_QJ+oS?OOIi`@k!*dK_Ik4TLQJD~fQb2Oa(sX|D7$)blT;bR;N@ zVvXpf4HL9&)iVIO&;gG!iavB1;I9bh@b;h2QuG0ruth2hlLri^n72<6^UjJZuLGj> zBuSf4e-u8+V)X}OX%&Sdy6V~1lZ0+}BOZ;rf$;a3J^dJQ1p$0!s<#uIhqk3~4p$qo zP#%aIU4YX8+M4+mO~OWC3JN(PquoIAa~w%U?{Q=ao+9BQI>iG2`1&U{KF8v@O&tDx z$M{@>-;n>CDAxZlzcKh-Lp$pl_}y*s7!t>Ca%XfrdaV%tFvLHwf3e?|&y`oxlHA%5-rG&Menvp-A<8T!;5iAx=VCRm2g zbU}lv55pld^|ib3gx@bSojB9iHN$nr`XnR?OnQLU*tC;_vr<_s(YnEuNPW96e%yW3 zJ$<1Hiwx6&jiR-3Ymq!hTGDESs#{89dX6D1`@Q+sV28;?ZvuTpDafaT%3Gwx;4-Dy>SN zBj9%k+$OQ~KT&K4=HcF%YI39$O*^x1Xe6Vra2*n7RH5V&9NtHwB1te+g&SEB@IGXP zW<>DZ9()}wqWOee9HBlRnA-b(nczlBBNdF3b}kqu`siFI zZ4jzo!=7e;446o-F8i3__vGrY@yd{Ua&wezJgbV*8QtNqb8-Sli_p|{Otj6 z-IFnx_|h5@SMG;Hytk<=xSg=;Ph*w%9t%3u4cLLL&QtrBBJt#E6Hjd<*6F}GODAcQ zs$qkW=_6hMZxEjMTqGmi3EUuzK_vm0J!nfAJ?c*g>N55Q4`9_m>!q-50Ey`ZopAgM zVv>FBn2oDICSBqr-SaJur{FlGLh7g-yu<*4^#LI-Ju1U~!h9bbvnk>2o)dIs=rp40 zSZcy|Bz5}QVi|bA={pr4MFFP|JKm9EdBExWGCt}{ln#s6_LTYm!*q(czUaCo`Ut4S zz=aq854r+sDBtlioY%C(i`-leU%~?7)>Wk)2seDaAUNHJd5#CD!N`eq1 z7u!$*Zu+MCibjdA;q)090{~ETeG2Ym?0{%>8a=`uzk^(w9fHvUJX>Nyf2pBJ7H2fW zW6<tg%(+w_f|_u`NE8(8^(z-~h1!`NIDIIK(^Dr=I&u2lB~TwzM6Z-z zQN)=9>Xqr**Xbpz+wja@T_n!vo?+ zi-wKbfIu^1FHkJ58Gf>XVjB_IL(SWSjd?g?yzF@gG5b(x{W!eTemkcm#HudqB$BW^IK`oU!Mi22VS`^ImrR>1F^ZZSXxg)eZY-a*g4UVmT!W` zK@tEoCJoG+C}S}Q+l5YMpW#gTE0qZ!Owc#r%x}Fr7wm@y7^mL8f((PZ(5u6IKe+n- zyozOaP}R&lq2Wrn2{YXM6QPaK$(sogjpZZ)5DG)*R`MKlY>*}J>bVY{4ADB;n(^d? zCNM8OhI2#EPf8^deS}SFwem_%~Q8qc6XgGu%|1)OheDyr`CIqCa1UJ4EM=oM5gak z8;t$i{*U+r#{Mm|q|bpLMCpt6gay6-6DMMoi zG{~V|MN8lT2ZsN?Cd_DIgGN<O$%<6 zfmILIs&wAUY1xb|k_bJ4vNJxyW70>soNoH$kFxNb`q5wz>jNOdOZY$R0nqWK=JVow zN;n@0DGnZ+FX8{N2M*!o5aL5 zuUXAp1r&AIE_qIAW3w#z*%rS_zc~aj&qysl$I_%t#9>8`Re>W{tvF4~mxXpqo2_o< zO{AlQp+y!HNSfC&N*;ZxE&&4ev_6z40qs+X;X{u5?a);*@|~V+LKf2tryT! zvHW@(j-hzOhP){1FJhvsRi``Pnb%y4wHnYr|aDX5sV}buN3aZD8>$xqX zP`WI1jQh3zZ>98KzzX!^MHViDzQqil8;2NH z@!b7+{jsdx^Jw{ZX3mzFai#x=e#&z&mz zu7F{p>y$gb`X4HwKQ91VdgP!Q1!Q-vzDwh~wjhfa&|UQXHda8_7W_aN*}RN&aRG1{ zv|U-9MrBE6-j-jRw8zsD0MQ9NXkbIwN<)|v$-nRdsGsNKP58mAck!$}#RW9YX;Nll zl?e^+QtM!zHA7rb8qJzm>-Xgz!gKc$7v!viIS?$NBV zihn5g2%cLM7iUTu=(3ZPw=R9k)MZ|mZRNp%p_pL$4}dafE%d?g;!g_5sS*7ak|~K4lVokf)@p1pj z<35OwTg>B5#mD`Y$GvbOt~}a@a%is+SXbSQK8A)x=4YG<4fd5PbOoPSdoR z1pSBLuArO^g<413#kD{ZNn1Az-xReoyr~9rQA%q-X*mti@#3C=ZHmw=sUOq#NX9ZG z2@A8=`;Wuao_*n-SF${PMxq_znQ+?2Dht4U{aDz)_ zajxMX4@Ml+@5n59*U1PV^hX*tsHPBtVcH2d#+U^it4bH+tPW4D&$4_Z!?C(2;sr6~b`Yy2l&g7&wkyJB@VVl~CRnA+(t4HX0e5o*^$wVVz*WXOmRX?W&G>nj@X^ zG<;Ww{^wrm5VR7kGt{d{htM0eu_T4u2*95{?jcGtdgKr$Z%7Lc##jK;MgVaWFi-)J zBVMNX2nG(}ag*ZXvUr?3J}!gec;~D;Le?em__PZ6lB5*?pBM~c_!O@5Uc#(7AKw-7 zgc!{7+{DqrENLul*dOBhEVbZ02V9K;c2Y7!(u$tUn3_d7hQH0x;cuuY0y(k#4H_Ii zB#PyHB09V z%Y@)AVQNDfyACN*zB>bhNT?j7P4Ecnall^%!yKbZ_?M27)Kns=E0PU|Ne;!qaDKE# zcVk-M)tngYKEDcfDXanD9MlenrgISLZ0vEW9PPq^W!DM^JPlX4sw!Um7?*P3SiiZV zU?qR+TTxKW-?AzSYWQ1DMZqfmHn^f-HBfC>g=-BIRX11I*H%2Uj-#Ks!nK~i^{sGy zVxVM&tCqjzRJd@glF)Q;g$r(@0>dio^#)cs^%2Bm`s5me@Ss-Gp7x+7x0~VR)7zd2 zz^}<9h>Fh772UIfi1PWLBqxm(CU>R<=HC&8hxf`2^L{F6<&)5NESqhL)@#$7G(n~- z!*Ts}`63j8<$w~ms*Gbr(TtwP=!o8h?^GJGDrOmhFARs>w-{eAfhRF5iICY^8~N%v zg6aoK4drY~Ml5y<0O%Ab(R7;cUhwErf&dwQ$LXu|X1WRbD!6i01t7s?0LaBs=G~yz% zJ_1XTaEWM+12;7AA3j2d}rq7{G&h9HEJF|xw>;pl^@X6U(VmV1t zlD8y#2-h?7CJ%7Y~j!lp0B`b!xn!XeHVzR+1qC7y?sV7`z%#VVs%<B3n$gd%y5;V_bWA^(0dFc;rT=Wf7QlIyVG20XZwMJE*C3dDqppidQN z&qkxjBrw`2G{~uEdnND2c9+^owfoP&X9UJuuPV#HiU^K~sRjLzN%C&Tt-7I>koPEB zSGATFO!y4irt|+Oat^hRx2?*@zM`!`a<|J{vkS>kQ(LsA?$lAj8%1A1Q>szf|57?Q zazthRP&d>TX%NZfyhaU4M(ZVWaC1D;q_Q;jW)hcUX`W?iM$BPJOxH{z$0td-W|D#N zNs_Obq!XJxqjgph0}k~lu_>P;MHc|EMF#8e$-p{%rtx$4g5xzQT)BwW6K)acm=lMN z3|o%V4e*H{f~T?T6vI`LCll~h)@JvWwdws8ZGf|I{D@b^50ln_9>P-VQCWL7N4nT* zA9z&8fsRAak>EbsCPnY>&C^VOlFCSJmNdIR?dZG#VOk=A)_*JwS6T?L*O1ab4W&3# z_ykwrv_$p5B6{_XID?!Etf>^PNI9q5{eoc$vj9r}Oa{U5o^-&|yKLzw{y?Z@1o5yAVKg5MW;dWAdNtG|`H!aH9;i3du=B{K zKyuQG;Q`pkXIXdLIet_zL0)LVWlx!Dj6JR);4uIXilG?bdr5bu1HKz2b+>xCtb++VNd)+K5b?DDekp=F>|V+C;y($StOp}y&wP*VL2wA< zH5es|V;X|VD9&yHS&dkpfl%0JbzGC0tq zWxU18_%fjk8X{Re!De~P>^mgF_&k8L28ok6nu&{^M!;yv?`z>dI5-{=cFPr6`!%li zVAY6==zNGVzN`y=)N~>(Vv?2)e~G~Hm(WqFGheIJsniJ84T^O18`RB-G#=|HOAPZ4 z1JN>2+o~bJqX-thYm73x7&%x@++Mw8V3A$?u#=^`RQw~3L6vV3cV`$Rts!|T)DQhp z%KXH9r8T5usUeIYz^W&xdbXhx!r>SnzM)#+&*Xli3`S{J*vMY=xy&MF8T|4 zAKrxh6l^;+CAS{JB^l+=_8dueSUz)Pykt|o(Si}!j=qZeUzP46h5;yjD z@Udr!aRD1;?Skn9|4=GR5W@lk>5H+&wC|JSWv}W<;^@SWFtIe{d9iFqo zP4d8Y$x;{Igj?VZ_IZ#oqcT<@vCnvn3)P`76~Hp`L~6kN#snaTp;`GUa9_pUS|zUm zlQ~bm356C9{&%4Kkx+}hsM=rte<|_}hiGI=E$%DB;RHRi8@4Y-?@|kJE89(qHa-od zkI=@9!U1}141~iPZH%JY*D7igrrh<^zt-d0cu0=#UEBpP&d!RN+5w)W3hjBS>7TGX=xJXrtMJ_VHZ{$GrM%{O-+hnTerq{{lB=}!5G#m&Wt1AS&-F~?VO`0ju1M*-)pM*HXCWh4E*4jy0Ff#gt94aosUO~mqp8E9&RpX1yL(USt-A{di9UCqq>p_o@tC2WQ) z(ciq9rUMTCY|;;+|CazU%Wg>>QAPuRjsZo~eN4tG{)JtD`-S}jTh$g=ic~n^kbp*I zL|H;NVhARsZ$~#ccHtgf%h}?$dHV^-(DthtWkRjB)hK@EU##R_gb*WLe8;al9VwCp zpgoK8bA(A1rXI3p-->G}P^feGUx{;w3kpD4!6)!Q`{{znR117NPN`LwuAxDbRew*{ za?y7br#R3%ZRr{=iSVKP0gAwA5=DsKBLFOKI8`9PAzwkQTDh8vg2@CYcoXO?bASK~evgPBaT*MJiT z|B8-F>XsNt3@k6UBw+Y>6G!p2Y#)%LxWv^&x5xEv3~cEdnUup0`ADm{m~##_5H#63 z7o>3T>$;1vg>kvD?7ca5K zdL4p1*Ivo$Wy|H_pU2m?8vG$CbboA;#32=;7|p&`b1hT1$rhXypu25?J2B-zDmD~e ztTn11MWgfTIFs6m{u|jEjP;t0x18QCsf{XT1xy)r)QI}x0iUqZM#EBt-Rg+N zFt6FHjd*<|dX+Tm*3i9{MgyC z)9bsi=8cLYwp^{h{)N(jdOMFk@Fafo|V-D*H2PbDw zYDT1%SWo=a^Hg-msH7=U2}|<-wkOS6=E5K9Ni0o#Pe$;09LoY6-eibzi6h2n-V@HR z)Qp9)-XEI9dT3TJn~EKf@HG;z#Bw_ENH}7*)q`sAr@7YRR3~DCACj`OgYYdCsFH~y zCSyhhM?V-TXlAvn9%wmjXLhr&{oa<0;vr4901?C6z_@X44U0}#m0^^|>86jce+r4Z zmd!YJ^*p0XBGAwshP=O9ZH3;*vM*oFtjO0VVJ(}EtH~h#Z--pD&Ha?5w&ZJ>6$Wx% zA45*YX4!m$WeA%#u_EaJffxTzJS6hf43wLh4qT@KJs-x11@i}oiSHEjD^dg=jDP?W z?{eZ;aD+r$_j+($ebT7z5E{YHz}1-EaY{3e2t+B(Hys%uXhOA?EZa^?V*WRrtAE15 zTqWjp2#u1^CRx7GP50TFW(_6>&P@I)e-CNYHdwM?E?a^oREfT`hzimK9&554cUNFu zfJ3Mr82__S5T$uLv&02iSVBTloB^mSLWhD03*vh(=#PI+{tFifY=t=m!VOE}J$wj> z6-w;&=<`e>MkM!Nt(u>+E4&&Vm^jNC9TAb|zDOwq&H0q2YxqH*5ZPR}-iespFd zGos*hJc#r2sXkB5T!DM$gO31VY5wA|STR9HSh|YMT-vf#d|}3UYi|>N-3y=Fqc-*H=SsOfrIB&ycY7Lu1eh!gQ#v}^9$oW=;qo@#S8fk^r zZXrG?`NIRo=N1ga5dRm>c*M z8hgpIS@hBsb-a-@zvDgy%~PwsP9?F6+p$cpdYu+}oU4cnX;V7*Uw9CZ_7DrJSNEag zY7^*PoAMqZvJ2?Dl*3A`SEulqdTmt7fQrQ1l&0E&HtT3r1C)=*uj0ZH-@qKqfrn+g zF{!W?EuYOPr%vTrD^fZECNKDU^rWDAYs0-_)bp3XG!=1#zVTR`~&q4lR%5M zRHIkUqH{x|VL8`E{e#GebX6=Jo7%yhRIqEqdV7JOM2 zlZ+yaY*0KS<09w+su~7wVb4#4ut#Bp!TB`|Jy7`~{(T!ZrXUN!_`DP6WL6>}m@n~N zV-gUtSPx#nRO+I<~V&wI^=sB2tCGc^5M!$Sc0chSe_5hUET2B+u058h+o0t zYgs(r5s!DoH?#OdEFSNO$2;QN@XQccG+ujWbaQwErLd*E;&}s(FyPFTxQ*L}>viE5 z`ZZehf{{6dc8AdH@E=WunL5rFm}N803z#$D8%*v^e#FSncouwudXAzajHeA}OpXcF z2Kl;gR0J54Z^zm+V^~ER`DwS+d(O%5m4O>E_`;&NhdkV~OkD708|H#*h-GoON`Ar7 zI;Z-qSyrJ9Q0MoT)#(#t6^aXWOpc7*7sQPs!FLQe$Xay_=>9!*j8j&BF#_zQ(vB;Y zr%Jj#Jkks{rgqJu~+m@2XjZ6?uYG|kT34Te2MwYZtILDmW5VXI1k1e%>iR* z*%m7e3G~T*1zDc~XM{*ag_7|s#E98hXbR3PYUQ-7Q*2|*#rfL!31uDE10>>tQ@D39 zG*l|vNI{4nP>OlpH^xO=NcScNJ$PUvIB{DVMKEEbtm6h`oO!r$%mgYSw1@HUg#8$& zK7Xd7Eqa-BGvIX)RZO@Yp!-Zkf2WkSI@;ao%fP0UKpmP;=?FHto-}S`$C~GdXF1^oJbdvr`tE5NT@_NAF`&qHXW2 z`%yfAgZ_x+bf-h`OQe8Mqbg{-0!;l#aH#u2%kUfeqqKsyCzmKTSJTWs!E|DIWF^33 zM4&Oj&$Ys-|Jv*v?s)?TjuGS1vF}E5f%mYe=r^u|9j>DF-^`l{RpK-Z(EAD$3^)O> zfNo&4`)WOX#A-S=^k{aGuurVsVQUc=kW$H|b*Bq!1{C2^s@s!1H?dw25R0VrhfQL2 zZ4n%a2T|gOSj~*-kM7CZcm?cZ zxnfK5q|2Cq$iWxv1jfVdvEYEhQ+*KZaxq!gJJj*8nZsrCHmACtBJAq;Ow1cin3z^5 z>J3hHB9fAYS+k;!nN~Xf*QE|Jdr;Io*f7Z1S$N5!m%e!EOE18*JTut?IAG3@#;U^Q z*xH!K=y1hA^dd`1fuCm;2K*Rx7(wLsRfI9qgoQMgv?qB0ThTQ}6KZ8(L3rUZG+zlX zTuwjUy20?73i}U`29Z;F0IKNF&7gHCMPeDz=1?lbP>1D!({f4iUot7H{{BDwPZ2-d ztf;RN9mAI@_Smb51miT(jbolhb7=3UOSz#H@ze(SF3KM!O?0T8Fa;$FRt@7+q?<0oxxJnm65>TUjD1{49G-~ciBlj$BD+f=&IvCJRA zeJkF=+l$m;o(y)hqP4bYpnQ)Bs=hfnik5Pk#rA4#g(vG=}))JtSY5^$n%4PFI7A@DFYRP|1vZ`#-y z$nhAx!UenSaPghg3`__~fummpFn3ZGB!ewVVzUGk;uH>{9LgM*E^q>EbAg*bK)C{~ z2t_L1i}z^7ET7X7nEA*x%6OMj>T~+ic0ZgeJJrL1FV_MN81M^J-{J4veRe-I3htOcRoH0n|UMe`zDC=r@3bX>v z#dR_qqRUzlcH!n_XgA@2)EJz@7k}QTPAI|?4r-cYE6!ZaYaG~aZBkn$tVs)&`RgGC zY?6g7l%_64*eC1D%y0f?!4v+*ThvRkb%#9g9G;Sh^{~B`Hoj_8Wx)>%3H^gKN++x5 z{q?t~?bbc=z&+M>N!)4|j>zgW%O#->y+QIkeJLwZLOK*c2?JK#h6;V-+_kb078;?n ztWA~t8*kCq4&!A8Wb2-R&3I_z%!IXDg)KroG=jCM{<>TAWqm1?itmAe?RaS8GAU7$ z1knV^sEug;XniS9*KTb_)0(w$eJNFqBz!6fkm9LQG-*ayX)^=@Ne@eGg z*i1cWV@<2OB?1@ZqaL*3q0P&pUI-B7=WY<7*rbXje?zPrZGbqyf~Phvn+jbK?FT_a z_pt_I>tD8>8whBh)5hgcvSu9Ikg(>i^Vd;N0Kw~76EDlw{R8Xq(8k?G>E0)=XTkxf z^6FFlwbbKWmdpo%6UqX9dk}yihZ*4uP&RCETMx)q(ggx) zb+YwHZb4H^om#L#*ezVdj&TEq{C-{m0c)GJ!Mcqkq{o@GY!{Z7AN_DXaBZjsr~lbEnkiPT5H#(k$!|I1XS$x=~_doUP4v>q#_zE&gvn z2kc-zY5`CmaAG4-hvKUYIJHPt0u>;L3IL=%xlklp+gfS`$n_1X{R5KZ`LI{=ENn#l z))wnoXy+vB7jiCansQ%kmRdF%1i_$0RBdBjI4h%k?DwDw>!DnG4X_i%*GW+2*|FV= zX~dtZSN4v9X|wg5^%A9S&$VN`(HIFHtC9LW39f`TM`=8n72ghQ0zN^_Xt#bX=RUIm z)ItOz9EY1H;#t6P1|1?FD|j2gzt#>C&7Hf#4*DR9=m2n7FB!G-jspFgtZjhGRyzhc z7iUha2c(t;8Mlq9o?1d{q9DM27%RQu7M17#ErI z8i;y83m^nI)tCafV01CYms{$Eed?60AO)%coPdLdQ3CHQs{)|eEnCmX){9g{lhA4O zmnz_0CU#MaM&(Y~fd5tazgB9gw+nl*F9O30aCY8nun#u2oalM40UJgIAclA%Kx3&< zpytuKFNqq4i1aqhJ?i#>7t22&lTTUVdXqe`R^3e%+N~ji2tfx>0X*IZWZ*U<9uZikwsbIQ_2R(Y z>5USGibE1uah?Hl4{~D00Dp=D4DaCfbYw#Oz_#@E7_r!`pD|hqc0mcAClM&vU*SZP zYk$9`mguGK2cZ$8oIRj3=yi#5z8@48NBIx@dK1Q1sDw$1uQwlc}N}hvHlH+&_siLpsscT<5r>J2LJ*l3;c+T@m`EE z=9=$C4Ha|e2C4)j1_lRnE^w`X10ZvE0{SaJ#kq6e%bmNGXnE&V?BZIuLG(hDhJS|u z6{>Q>zkwb^WPrULvr4X~hK4{z^}>bk2gubV2KvIx@&iBtqp@30qau)*2V~Y@7eMe( zkjBwVp1wAT`X|93HO*a31j#Bk6Xn`hP`5q+dVp1tI7`yUF8_aQCPV>cF~I<5=Ri{l z^AK#hjLEJMQlpu2V9ynk5KTqkOJKI=!DbJTY{o?aNCLcEVzYJDOV&C&=4Y@I{Qn?2 zi(&?9;WH3P0aZO%!I=2#tedZ*Az3&9ql0spt{`UooKm9A>UL|R^&-XqQ_w-0f=EQ8 zDTvb!Nr~XC07-XN^f{Dk-HbUXN;JC|(GU=8F&SQBrTdb3(_*~>0FhiGA!e(v>pNkC-E~xe83^LfY1w+Ar9l#48+SqV zfK0A}5Ihn=#*nO=sE!R(2WVsm8U?csGz#L__V0ib>j#JfS>A&G1$!(gg+!L~!12y==F(68Fax)xwq!Krl9{*mMMW0TvJ*Ye}+#u(sJ+ zm+RU|f@ia^jiwk{Z|GI`5cCZ+$2eh{A_M|bFnm8t03j@ZOvg%w16Gt=WrrY}>%ug$ zmkYUmtKWK7Y5}Hi2RLZy0Rf6ij?Ek-W&t}edtgCEVl*aqdLzPs=$pga0gQd72C@)l zbI3tJ6D4r-z$@}TX>^xT|6o`T?dWSl9c(5jEA7Gmq~N1&@DEnDEd^FmTX{wN{v z54=DZt1w?2URvju-T!Ryi?cnyb$I6uPVy8(b%mXme5S^|8CSl#pD!E65>usk3iWl!Kn^*s>P4NAyR7kkD%aipn;JM*}^6i3jr^G9|843HlN`--V44?3Z|I(Y?}7BFe&T z=LBrUyvy`+IyBDEggCW-G2J1~QN{babJ@<&IW4ig0}3QVvFNg$7R%2AC@%FIm+(yu z*DA^ZsPak?>#%KvRx#kReIxpOEY}*YF*^~EQEx;Y_aNS*>bOKbU=TKnlu-yID(7%i zKhPc7Fe+||0$;;fcBH&Zc#oE6sQ22$1&^Yjt4r}yVkijVp$ri^;~<=H318z>yJEQ%>Jvj+?7XtbIz??< z4-3ttKr^mYXH`A~wIfuO(4@lt#8mQG*|1(cdiC&px(zN)18l&9#|b9?0L|oq&)KFyozu6oE!B z8LVKd%J|6AehG*Gok>5-=$9-xoEk?$j`Y;w8l;Ng&U%7jL?<1?owukx2`XmFSdPRl zx&y70K5O}dsrlDoZ=f&7rf_ozTL<|$6b*G}B-*+OA8-M zE|%T@d|~ly&!Y}?JFd->O4nvb*g)fH0oxPHvdOo$L#xVWMo^aXPTOUNn19fbQk9*A zF91Isdv>F_4q+Kjr0$8dqdxFBuiVF)9Ic=E3n@GGK4Q@Z?rOGrazyEk?X!ykH;t1% zBim8dS%zeycLxSiQR|)hKPEtlys8wDP8Ax|@^%m((h1VK>hi%po6T`BJDG?$78QWsBm=_T1n zb%JxKz`bCNd}{QQFRkNu>aeZ-!V-B){aDt2)2}x{Upc_ha zX(d$JK^GheV6PsHe-YbppwmkM54gTV-AH|K%T574)4p=|b6L)?r0(80a()+B?_4Cm z6z~VA4+YJNWgiLw3k}?d+$?K9MWBlvX*S1ZX~Gs`y`ym>5F;EqhI&GWx{e=w^wGf4 zK}$YxY_{u5Gm(1$rm`Ho1)hY2rs&Egatc^{m(p0v3Y=cL#!TtN@}+ocbFkmec2%dN z%jLB%k5b+UIng@7El0}v5z4{!*)>}Qj z*whVQ0BoljldJn6CRcsr*0wa}R>zDP2hc!4utG2zxGm6tsH^7_^)k+K;mGuS3=+hq zBLVR5BxxmF2g1ED!PAq98(~5}!nK!9wGfyD*8nLTla2(2gA%Z>5S=y*|2%BIc!bLe z9D0L{UeZQ;YT(`@GP2?sIIsePj6mQt`reqb4u8m{ zP%h2;G|P-Rdi6AVqdD}cDd9u-@|f|(9Qk71WPJ0knSgIeo(#xAOag!M7$|w$-b8_? z%lY&PH8jBNepE6Hm(;Hn+PW`*ATx5o7u|8;$Pz_+5`qD&jus(-Y%4T*zQVa%exVr5 zFOmX1(GkLG2}hFQwJ=MYXjU5ox1w8s@??zM^=D}0;LO6Q4l@QXaDkvy2uvJpmen(X zATT5JnxgkIp;BZyc$yD3_Lb8jS?YNfEON}O)uA3RY{9gQ?Ng$JYkQA~vrk~&z|3&t z$uIYyn|0Y5s`QiCFw&?6njjuTiQrxX$AaIWuTeUnyM$tNKoEe?Q&EQ`${WEg^aFAb zePji0;6k7XrTQQl{hgI_GaIXy8ocxZYYmPsTI%bQh&>Mu+)r%){G4#R)M)>ljgs#A zd^Ol0@BtS?27Y@`NYdthULJlqtI@s(?LnJed)CvCuw8MfhSCN`!sdx&z;}?`sK%hi z^AvL}YJ37ha)cU1Mvdku5r7_B_p>1y@zrJ z5zqG$&sTPJzV1BVr)*RY25vL*{f6hem*;a_osUKe^}S}~`)VBTpTzTZW>D9A^}aeE z*FuT(A1~(l{&ICb;`zw;)d3Dq zyOHlrp6?N!@42h<5uqX9$40(hET88Y)HR6b8G3ad^nvn}8F}`)2qtjLs{i&US4%Xi*j??Rq$+up0%Y2fc?pYwL!ZR9iXcO1|6`qlXi{C(TV_sv+| zKLdaJ@O)2QozKAEXN-L7jC=GB- z|6D8|!{3=a&+4o582IZq^8ASBA^g3c=ULb_569mnMuxzH1PsF8hJz9O&3_^efB%JO zAnAiB1~~E;puKnGAfCX$-+X)m{%%WS_&Xmd;_z33{Nz0aBhvG*Eqi6Opeyf`c9>_6 z6<7MfY;GYIQfMlJ0e|?=EBVPIW{AF4VB?4v#qtn-OXsA_5X%pTu7)NHvI35lV)}qfRWlQ74($ z1?GU?!SW0uOQ3YvaL?_QJ>lBWove(TQAV*Rla+BD%D5w1Mo)1)Zv5)Tm3H0@n1-Js zFQ-W%Xjg)e3A+BLg=W{dXRZ-9A8}pR2NC;Cg`^^FGz29GD?b9ZE306j8)hPRiqb|) zOj<`!1eSh|b!co7zK0d&y*nw}?Qp2$vS9#wUNjFKep50W?wdzGfZq^Y8p_DT-LymD zgu-yqAr%Nu(GJ`8l0m_0lo~%m4v(Qvr z-aRw|4@H}Sb~T_~r<17*FZbbHD8Vo6akHGlX~o}pi<&u@^<R5DEkSiZ8;{BOFp+MZ;H4dLrCfMCuv{V?Lw?1og+- z#2goZHQ5F55Fj3N0U~DmPQ3X67W+=|(XZHIk?c2}nxhQ|2X1i*L4{5xvgyoWYk{$L zlUUh_2#3ETi(yM60xm7Z;Xj1b0VkBneq8kUD6C0##Qe{k7k?3e7hf?4hZZ)AI^mC) zb2`50=92vn7H0mA+|8xI$Hl`KU+1n2v~bd{OflyG4h6-_i%MaC9Kq=SBvMU1kRd*P z7(;#vJ;8rOWTJ;h5ITlB&|^eCe&)P5C4{4oV$K(e?NZ4n!Cw)0qD4}_LO(&PBlp`- z#$N<*Z3UX_v~4Om9ZO5&#ULj>3NSv@#GpV&WeB+d;odLqbTsC(8QIZD6hut3{ul|) zrNd~crjPuXg&L9srwX;f!N5Nt%9BP>#lQu!_938;{BM><(b5#lUMz?Z^C6E3)B76! zJ{;I>9=iDkj;-79OFco{ix^k4YsIYFk@i)VmW3l9C>;>`6x3oKog@C# z?*JnZ7dpTI^0bT^351PLy~pJQ??sftmSH`1-?|pdIC9{p#3_=Z_?D<&h5m>!eW&&S zoLoEgyGA+u$4vP)`DaT#< zg;C93ycpG77p#1a7i$JzkJ4hWkuOb)RSFqy=~1sz7B0H z#{cjwPB{Aj*TlI?oL*|0J3#@c;PS+l`7h5I7dSXwG%?DBdBx#B0$y6@@L$R@_>t4r zGWRw``$d|g(4^AX+cN9jqHR*W$(@cN#Y>uJKNA#U6SqUlhpTK{xpN4U)FISfOUNl{ zCP){ie>t>y3~zcXDdXAvt`wdnBn>5F>|R`eIR#o8L-a88M@;_}IE!%!4T$eP@cEoL z8Fy^tz=7?-08{@KdI@JxZ>p?SrL4d^G+}qT&3Kl$d*FFD*DF$n?O&XvBLM;008n+0G~H6HUhOlm=Xc%T#+ zp_O=aN0Io`&Ei|NxD6xCkM}zEUYAyv2ET`OVEyOBpVS6v6M^+Qu&M!?v@h|9_ir^3 zzGlOLmoNo8*oyyYOt0AYTyjo)3T5ViJAlA*{DCW|(^0r60s~1~)}3IWcrX7 zpQd0xWZ`-@rl}2_-v}t(0w~2JM4Y~Hk|Fb7)>yBcS~YcM_@ejm6w8m}c@DD29!Z69 z(-leB;J(38i2dY?fz^L*15)^d|A{1E4PHzFF|OlbAy7JPu@9%@&!a!s$i^$s_rMO2 zJCt1d$f+!$qM7M1nF>ws$X^*TgO%{M&>(9#a3^x|#N(r%^pST)G9t@;{9PT4_k8|7 z+{_r(P~!{m&1~PJs2pEG#y^$Scd3gS!)AxNO~>Uy8XMO)Ag1;(cr=dAm@%dqLn30#vB`??lC(`{IjUNeR0a&Ct9Z6{Kz? z?J(M!$=VE2g8*h}Gz+E0tccAo)7EoJ^zsUZ!z<+ILH4$qF z4nS?3*J8YwH1gRtP=Qj9M=?FN(c?`#zEd8`;m507_hUt^p$kxH$HrBwWW$Qx7R?Lz{B8olVh)1Csd_$~+N`~fpkVQ=2>uw!S52Kh`z7ky%7RVt{SweH z-Y;rMe7_c>>}&RG8}4F8zpy^Qv_rjn^@xf3aF=s)J9Ozk8#Fx~HzQ$BqM{iLU)}YI zT2WDf)2*F~|IBUAhexQpES1qf(8=z$nzvKo{LNJG-8Xqb2mOC`hE;V zM(U~0JPW@38C)C^$=X4(!G0)b)wE|`n0gK1`~x82z#;a7(cpuQ@tlPs9NOaLh~`t* z>+}gQDDk%kK21IoW<&Z3v?fuw+%zx>ms3dF6)qP?z{AOovW_x*6JJdxrc<~{d9Jo} z2vspOm^D3J5gL@|>JA}+BD9I?W#KUl!+Ff>46`0aWq{hova_BU1cZV{h+;7W4j>!v z%K^N_5A=sOe8)f^tL{3`djZC1heo4G#z1euLa=LxjDaSvJL)dF^Yw!ATqi>X|Cua( z(oF(+Xd2+Zlqy_$e#Z#QE^otdH3osjo#1C>9e+Su#aHVX=Z=HM{sCQ}ft8=HB8^l? zuOscM=cc~!%r(YyeiYd~c#9v;71w{yc#cdp#`6piN}nlo=}HN@a@ijm;18z?2Z7&~ zPU^}9K9uwCb{6`T=l1Yn965+J{GjsOg+u6>g2Pt-4{z@RS5>k8|3iXeNE-_~7HU{@ z(y)?}(vT7b-2{}HmWGxlnuV4ZC=D+dkZrfSw6H9)+o3CUPImCN@d8DnVx?wgqNPT) zXlJRBnpFHhpLy0^Y;aGf@9+Eno_fh%GwZ!(p68io&CHsaHOsa!yEn=a&)S!N?70R9 zqV)V8Ew1~%8x{7s?&pEF@Wqc($IZX0g}3FZ?9TMIU667|{m&5HTQqf4!`D#4WgO2(!{p zwr!jf9mu^u(T_ZWUYX+qSZ*$2J~X~WFd5H?LHMNO=ZNheZPZvqfUyb3*d}E{{@k^w z$G3;KEciVP`?-soVrA*B=2WGwQyU%GnVbdcoVulv9C@n<4i)gfk$Dn9-b z%FXNJ2XWlO$H%n3wAshkfc0^Mf#@dD4JIMlh(iEwFlBN}HyDHP8E()XtdEbMe*X+N z_zqD*V8$88@bS6g0tS|(`c`hgG5lvP(B9M8^6yI9qfzJq(jRhulMYrGzLbe&R`c+| zH+JW^A$?&ZnoV@_eV3#9sGSOVsP;^%eFFke``LS1s_j7d47Ja-lv3W`2EkU|f3&h$ z?K&Jo?f#HA3iRfR~cYMNaLK8i$IVg~q7&}xVs9|4llmAgt^YTi%17#+h_h_n1p!Fivz62r z_>=nRCa+A&)`t*mCH2P^5n#NJ<7TNp!L*gH)F&C%Nxc%6*7H*&K2py_9Hq{tUr#~+ zQg6#_X=^vaXW06Bus*hqL9mt7oh>53=z!y9sV`_H_255~x(W40{g9SYZ@^=>W$Skl zfYj9!T1veJ;WMNz0P7=l4uY+uzS|-KjN5SBEcFCFw)ym!mocof^#oj6zZAQ<`PjN0 z;w-68Z%|T?tY|59GQwv_{V`Y{sW&0mO6s>QBEWbF$B_Cq)FEft3g5v)n6K1aI%7($ zMyOObU#)}s1ZR96rxP9K69766M~!EZXniF%ZuHUTI>b>QRVQAK07}8Rsii)-2%n+P zAM0D_^Am!t^x1C_coPA~&82{)XD#&U)~rv9=N5K%jP|TuLR(6`0Lf8mRl8&(0IBzF zY$^3NgwK%LZpozX(|!oHlKSr!5nx=1<7TNZYbEtmhIPL4A}*~T$xQ&8dtWv9Km?^$ z_vuCiAa&1HQeWUt>L39J1^_}$$>!hB*I`PF*Eu`** zm&NP2(}WvX`Pn{Fn-2yv%&dZ zgsRoh_w)7vVFc&az}u&OHXfR#K-}1lB9! zxLN9(@DS-MbqT{dsZZh3`dKGhNc|&5i72(INDd(YsRy)@y0<^6SAq4h^=k;WlKLr& z2rw4n7*fZJn-t+O-dF0M8P-UB+%~MD{sU~P>SOADNR2|zps9Ny0HO28wlwujgwHTF z$HaVuKDOozp}$0w5CO(697E_KA~d%a^%Z*1p9(!XIO&%_JP6&Xe(TR_slY6xOa(Hj zKo$Z}V9A)43gjVth5|QQ;wfM0jbJOQceRKBqa%)+73kJVfrSiftv))~*&qt!;oCQO+ zUIkjUr?^btp0?v{FddH}J|6YmD$!>$_1T92^ck_Xr9MdrpP|n`!TRX)B7&{-S!@vj zMjnp&gdHhQ*ytm0#MsxX&S}=kr%hFz1Wv8uNlIq)n!5;?(!-n;rkqAsa4JvTFHaqZ zc34P{+91G~054zw6&m_g2pEpH@u!S`zT%&=-@%_a{2_(bF~Fc-F@Od>z_^5$3??(3 zf1c-`YW_LSKVAQcKX(3^$v-df&sP3v;Gc{Bg+Dj(PY(aQ#6LCsbAo@mzl%R<{PPh1 zyuv?txlv_}mLtG;0|jY#7=1q0N6P$L>-7>cKQJVUPm}o-L+$ZH!e`(!j)OZhbYeh= zEt~C$8rl{UcyjhMsjmcBM)`s?_GlQ#) zny~7pDPSZ11+2xtfcm#^WA$&76LQ>cyBtt@w5@+o&Q*BZuLAFdcE*yo3S;3-pW!Ju zwIXkJND!WXag}X#3cjO@6$e{v1q@^Gd-rw0Dt~mq(MJAj4<;aQ-zqZfg$(T=!>v0! zlf7Btcnq_`EMfYN9K2eRi#_(t{Qf5S?U4NbZRUpr@HIsJ5kG3sG%*?S{KP zIKbZT%b8cFIPSz|q^m!vJk%LO`DK-d!)>c`c5ugS+v*S7f82gYd&tyc_yzY*Z%McbO&&c=trg6!CTzb7`@uY7Q;HJ>*r zfA-k{IqU2TD#HUXPu;Kbp(CDB-y-jfguUgG-GjwlQQrk|G~1T?4jezi(T@5#=21oc zR1}kG*NXaM2sF>AoA0xz^|QUXR__OUIqx6d-F9cfL!0l%8~jb#cqM5FR($OBuK2L4 zB?`E2F^s;M%LVaKGFACKKJEbKdxLMpb zBa0?S2enKPYv?)#&r=`b?fTWXT<-ku$rqz&*W|08)lc1r5Xzwa`&ddA90*tW8Krp? z-+1Yq)c!c9Veh?VAC|cP8=XvErG8dFg(q0K3TixtWWgE(0D`bH`PI&w@Po?+F!@8_ z?JEJ^rNCp=$rVrypK`|%mmflKZym%UCVZ0u?=j&%!&bOkh7KEkYvNGDb`x^WuNtT3 zY<=omWzV6up6L}_Gzu5z;?W%#sT^!BEDayr0Wk-$39~Eg@(=HCpXTgSX`g_vWF_qX z1}4bb+c(A8r<-wCB?Rs<_oYPJd2_mTpe_5H7;qCl!GkHl9%Bz?p952b2mdZM8TA3z zVcL3(#JS`h+1-#`*GGA0MF`(~j@M%RxqD4G|L*H*yK662IaXtk9jh3>W8A@TTaQkO z7~r;zI&AAvWqZFe5J!`2eIvGmJY?(Pv5l&?^{BSJ|6!nQ%ulu+xb_#G{*pq5QpoIJ ztnC|h(02Y8OmKg1?%>#cPPcH>N#|DE?!>l<9mjNw;N)|X{G@g3VjG1*J|CyfLmY}5 zvumSkvD|Vm6vl$c54c(|sav#d)HYz1z;F!^OyCgZYSUpA!t_9~43%QBmSU>=vt@g@ z;D_ZXXs)Sp{Ep87sRc&;PG*O>d4w06jIYs#Jo9eo36@^0Ji;8R!Ap69y>>o*df!?!MfiuuYxa^ z2Vmrpmg{aV**k@0%xy64ozidnoXGl3kkPxo#$2zr-R61|u{Sxp97GL)6M^}5x#5Fe9eooaV{VqBNORddQq zoYy2eZT&ue5Sxwn-_jFnwZCm+{O~5!b-Ki;TeI;6L#!aT1hBWra72p?@6=?t`3{vK zQ}mZ%E;7W#ct%27_PC6Y;jHz!g-TzwF9f$X=8LciYQGS*E?*qF@=%L4tvj)3v1^*6 zKdaasH#_GX4M}O*tWr1!DZn~;{o4j?3{=ORGVrln+(d7Oaw#ttG-HvYF#-im2frK+ zuG%ErLziMvtf!;*e!*faTfyyY8dj%W)0Fq?nCv5Yzh0G%ja9ztw^`kw=l8@revW-e zd#Fmg8hZ)z%?INtB+g|bywPlH3X>3bX~0n)Ui|;mN_w>!y)77fK@csZTiM2Vnq`ne=%r^>T!59ssx(Hp38KW#G<{P9B;aLg= z3B3c?@E%x%E!{uJNx*j~xM26lYR2K7#yYyM>E5`TT?s#_Sgu@mC7h?Ovf~b1ScqKe z7vqn4@w?uO=^C$^SL2PlXk2#rptb>yFHzVN+N(9;aN{9}a(89%G~M$fS4(dEh+^X< ze3$a`gjrU$f#!nwc@l$?b|oy5V{>)y90@r>kdE58W1kUE39LHaR#=Z7R{fO?=GCU90tT9v>KEd* zR98far9PX~(oz#}Eo^bKm95uOBP2#yYMfUPwZw6_gnTX4krFry&DOzIxCzq|v0Lk_ z@Y8HS`#NvcntcVA;&UZ(rP0Q|95rM(Dy-%N&~I&{UNJ&bTIu;)Y{eNw4m<&oo!J~M zsA6Bh=beKy`wK(Yb{+sXnN|X2dsdCYzAkpW-;Q^F&$m|FIot9}!3A8Vn}6yoTS1;W z!0HDN`qbFFf2W5V(41mrmE9?EbAcRU`-kWdw9S9?-Px3m9kxSK7F3Kx{Nqm`>YI8oCVQ6 zE`$Q8r$?kX*GKn8AofJ;uBIJ`8JJRC5Iqht{Ex?vK_c(*WS`?{=5bQ{Wf!|vE) z&;Rx}yKCNWcE_*k1-B;b0lYOa{}8^k*3@BUJKQ4+pfIW&B#uw3t)NbLi>W-#@rk|X zC%*4%pp$+{K{{2lWmMQkzmE>J6XO+(+}k1&PY8@W*dp?%L>fMkK~B7OhX?EGpqzj3 zJ%b@$DO_D#kO{Ry|8jeq4K%CWwOHkh_rKc2*2?n|6AZe*D@)K_ctQ_J>Gws>clLhR zmh4koffG$in&Vd}hF3|F^RUNYS2fobr5fw(_V#tR-ckJ0Rcn(1>?aSUICdldI!P3x zlc*5dY^MJt7!sG?7hSH$X&+a@NB{H+&ECQ$6{662(9?MDWoa=Be z)Ie`rHVm=SmbD-EBVIoH$ovl*g3Q9dY4|r8|Hk3pDEz}aHG}NzjTSaNb6|%v z$Dkx_Tl_y_IqT5v*&l7?+>etn)iTHP#BsujFLj?Ml;nuOGAcmbwCJKL)VML}M? zAT@}U8h^1?PW|$c0AWEi+dZfQb?J1 z{{LG@C0Gp(kMu31Hzi6H(keMN3+Z(UsY06huDa0iKPaSwueC0uZ_Suig>*~0zL45I z-?ETS7OO(4!zWj%2Mg(?^cID*^ycP5N^`vWF7CVZd+XFa>`JJT>r`<)EcevxQYPhn z=PgTxSX`6gYQ~)}v?#8xuS0S11n#K|{_qyp?}(M+S~aFsagD?M@jtwe0+j@+h$?X_ zveVyIqEr!`E5~LL1xZLzhIvo1i2lRl#xU$k7%yU| zq6tn@WdRGQ`{#rNVH7)FAbM3*iLQhIbpf8DIa< zLZ&_+;C`_5xmIehO$zYU=R=86`s|crQ=bnc^e6g^H>(WZYQMgS{U{vvq3DvZjW*t7 zhU#hd8kLSb%?>mlNH0=x5EK=0CnYDJX1hy{>S;Dvj`@tX2&GuR6n|8I(@f#O>nuo9 z)m`u}J`kG^YPa_>AJmqd_TGruh>{zz*XWiHYHsn(S5Rj^Nhwv`c(gnn-QFY3F^gV4&hDHwv}x!p3}B=?uT6K(8<*l3f*F)G z7|+07pd{(a8qAc*I4|l6q(ro zb-V^O8c(1`8}h5ykTHlALwtV<-5LTEGZg)J~+3pw~h4Cr7 zGuH0xkN2gow>u&>I}BIHQ@u#_jCoM4(3iBq!s^}~;CDWf5 z#+v?Ianf51C5Vz@7;{@ofBya%Rdan-;&lhFKi5i(GWd6LY#RIv3AOg;B1tJ%-HHEo ze-5%LgFo@-&;Q|Doo`hk%b(Xj-NK&}dpG;@Lnpk3%s{Ld^1P9M-Jc&)IkoWTITEGJ z`rH=NbEWCeM;pAwup3cQ z42y52KYwQpIbMisk#VqM*N`=c6@SjZ<*)nmcPq~D=N}|WnfH_&oBsU0gp@zO zpl-SUraya%#Glig3HQzl;Si-Umj$a_x}6eDD&oOrMf~&g)J@G+y`lY-G47rIk7aY`nZ=wDRcIfW7C|MOGx?em+BV#Z~AZS zla~Lk%n|?Hz`|7iJLEaquciN9qvFJWd%C>-8>eE$e@DwPt7NVJ9>Ibr>v`|+VoApI z-+Qo$t@7WOe()AU0iwiz`=_?_-)*=SrMF6@$NatiTP`um;MH<$8ho9EeEoNpq;i+K z^ZqOT+hE;rf8xK@%YFTKoeEk0`?j-%|Hfh~U+?qXJsz*&QV}bLYje|I_uqR|PA&X* zibN@M&XQx(ocBpc`ENI+)qm4}XFVbQYg}^h2uJ&;Bkb7B`S0&P$La#Ck*PL*VCgD{ ze(;%QhfX%D(z{ihIP|DRUWd+9vEtB=$uS+8Q$F=Y_~TuFVJ6bmn+WUUbInvte}3i? z)1P@EHIv_tvxH&0VgUw`&Uj4FVWa%>hry@Y)I`3*_s33Vs_SNu8J zssR4PpHD9H_2+sOviy1fV=er7{Kd`w{EXo>TrOh8aMuj^>;C+V%Bh7vKQB?roNvgn zY0l>)r2P42RaN{K{W+n7%F!HD>^f=5|86|-(IQ`i&r%^6oK8A(Azj_va_(E&-j(ox z0$?X=d^AU5)Og|oIfj`yJ~~rE+VMo^1~seairb2>AsL?y$M`TOix*?`G=)3gV_`#n z1s3@jZ3-*Q$vxZS_v5Ui0<+X17|p3J?2Eq`>EdE5Y^?4mJcTEQG{-w!BJBCQc~SG= zi_Bj)ZBC0{#mj94J(1ci&N;uZSBA-!Uv6(3UNNH3*#A@ zz?_p~FK&&5=V1raQ_XoS$(z*_mD6GK060$5mb8AS9{MqHQM>*F(j2RLGtWY_hym|j zk>(0MvZx)tpY>syV?z{9Sp7GA<{_+quk7}Ti<0@yj_0Q&M}1PyN;Q9n=Uc4sp46r- z$LJ2Ad@z1B=Dxe|IRtE=6?_Md;1}r=zU88*fJI?lOD6`k99~RPb7u8s$yBS^#Z{cx zG~QuqO<3Ov4X2!_49sb_Ie7nD6N3WN`h7h&G7rOz6N3U6StF4@&s?42?EjT#Q)1rS zfWVae15FSZ`WOY?!b)>0jnkY;KU?7?$R@Vdb9J+=RC$=^r3AilvUyuw6r7FotliawTF2W^#!*Nm z#qkwNcTrHA{u$Zx`;W5~KFwE~C7E$d<`+pu&B3NSerJ(aAxaiv-Mm!V30z<+yrHeN z^6FX@FKtDy0?46SmA)!g+KMr9tVU6AUH#+uBg!Ag9z=$dxytfBSKN1unT?ocPq(+< zYb)%__t_y&ADqfR)z-H74G6p`gHoqsv4!IUIZnheUmxOtI`+YsA81@9XD5)nM4io< z#xrLbo#e~|Jkwsz+{QC)jK(~bqB`>vj`4z3f1U|44#}A;Uh|opxtM2yjcPd)#WUq{ zCIk~Bfl>I+ba>G@oEmD5PJYvgH^)^UL2rX)w>U60bqoog!O{D#`Zv(>SH-A_ESF#jFn3K^%An zH)qcA{JdjoPd8|>v0@FlWQ8lUnwsjs{508UuiZz;yFA$T6Wu30KAU5=wQV92RuHtE=co|ZZ zw$XT3UHX-}XHOchAk=TKS=#d>?GqZ)0-Nm1?LARFoiOY;%NpwyNwZ6fG(Y`{3Mqr4 z#o(t+F!F_};k4c9Vzx<(x+fQ)9QYce-E|Y%XjcWCCK3BJ_|7ok3vafKr;Oye=8J~E z8Q0?wH|@1%X$`imj_#{c8l%!bKFGE@=mu0|1r<5(*C!*+*TLwe%x2M9i5rm*KDpwp zR|_*CR6Qq}TJo-hVN2+IXo|4G>o{H{)fbOo$(RD($XtPX=u5GpvyeBA-8l+#GG7^Y zq4vSxGZv8q6VY@xBh6Y7_juJj$G@yEcO^Yh)pTv2#U-Kqn z&r9?OWd3*{Hf6fTxONT`{R*|QxGZCP8&Qbuho#hww!#Y_0T*BQYsm55tSbY}dsiAV zTR|$m=6i37SV8MJy^LP zL9wyr9#JB!U<1cyJ2g@ zVk-V9=QO){u7@GPU+v|aPi9|)`j|7CshEaCP0*3cd-n}O*H4YI=N!hD0RO;Rtq1Y( zCY7yOVWv99{6c*W2Xd)8edpEvGy=2vw@ZnI$GF5BJWcgo@WQ%TVZ#Gy$aCf^hXT6X zL39xp5?BkZ3sju6*bl=Wq{V(z#lmp7>Mc2Di~T6fThB*4v%rRUFQy*-&8y7-ICsXFeJ)sU~Er zJZUkqnhWVhnhEnw>u|2!t4;|u+H`EQGej-KNeDA??m-c6+)S8>H%9DUq39x z0>g43ZgK=3{CEPUePN&1w2vTGOnZI5Ru6vAzx5Ke*HjLaHop>$Ba69IqLiW6$gz26 zyeT0?xtu9 z!+GeYZLt;omT?iIt*AnpgM8I0p))caO>kn~jTyFrYxzF9>J}fIhaS`|mgAg!56B21-CJQcKi(9ft94FQL@ivH+I4YSUQeZFz^8{B#ici4YAjV&tzmxu-dFMez`?xgMc*>AwOFD##NSVd)6`l|aY%sP#cf>QPGz;17HxD=~ zYEpGT6pEb8Gmy`yG8xCK>_^%PCMpAeu$j(23!gEGTed4Wz*r6{%{8a@8iI_Fj3KcKa z+*1#cRu9W4)?#&rw*uM=Ic8PI&PV<8_|x2Y*H;`>{&9S{_l>@bln7Oe_;JF>G{@J> z6`hZdvjYPj8-!1twm}5C6&^J)d&0P5HrwhPyj;AoZGOd${8R013;)Hwt}CJIW0V^$ z1-ha`G>KneS79K6HLg6qR^ zy*y?%AXaLlxBGDX?x=N#i`nt*W;WHFs_x0eTnQ1D(B1*+3nfNXNPqXLp=$ol5<-RK z+#o|9YSR1D9M!c&Bt6zRf0oxEFFhjW^KJJQt2i;;Be+lu{kV!1)4eCh{@T4;yce_G zOERxE+r6#lc-y_e&%EaN261AJ71y+E_hNW4J|N-E*J}5=NQ~0HhgTA%{e==z?H+Cs z>dF^HK7-TQ9p28$szTGByqy(U9-ck1WoMqN(-?Ub42bu^kQ=3JWc8yz~M*W zp3W7l0kJrlRfqREl-s3GMS@6Sg-YQoBvStydOoJN{wt5#qj2f1B{RhjP(FMCtY?@x z+I+XV6btd<1|v#}=a1Nyqs@zPEv|V;rAN2$I_F%8QN`nsW3#o)m5}df^YxNSKc!=H zyOQSk>$891=$BxF0hWhaA9wUm+LK$OAo6zWemZl!xn+OER+xrL0hi34Ppf%5Az3N} z8_H_AJ7>r}0xPl;@-_CV^3JAQu*>V`zav%*xvF=oP6(cD2B9VOw_g4Nl@qON%?5Up zC}rNu<=8ZD7YV7(h@tKT)1d#itL4o4tDfI!F`K?s7h-U2 zf;xkT>ne%7yc62Pn^h!wG`rPEC8vx%IEUzB93BOo%`2SoK$ivrg^KwH&v`uav#YtE4e~c$i8n;-sioT zH_=_@)#go9*WSE|y6*6nec;*NvR`*)%bREju7%57ZDs4diTX;6QZC6Wh^phRm5}dE z^veS(mHq1W`hUBLB5@P-Y3|&s@mKSH`sP2~PnmLC!%6?s{eLky&yr~`!X}+ndKK2^+4aCY#HSUVPep6NDinI9KR9huVnfo(2HgBqG z38|YZ7dKe_Yj}*8@dImK0rHJg_g=H@?b0z0ocY&!q#e*B#iwRe{nhX%_E!DThIyv5 zo8yWquU126!Wv!cOnBhR)EO zplwO?<-P?MyOr-{7ggHvxgCd#g8(qf1XIwyCx@tE0b4-|>WJ7~vDoV$y-YUGcpR`c zp}-Zf-YYP+#Bopi0_^+98hCi1EgxUDLml4^1D-M@+G~d=y!mR5M@|jk0{=BB&SVTE zgxfZrC0)q}zri&jl*!>@n~C$C(>O7bP&OUq<6NQSRn6|??KFTn@+q?vvJKAb_sam? zJ*xLD0N+-3Zs?5^jVhdmyQ=yRhZtLT?Lwtt){Tja+M?RRw{^_nx_-$8==pa+QYo&R zIb6p_fyDI)`;3?^VSjn~z2;zDli|W42J7&)xyl`bb^W7MI=gWhN9z8LP8_<_TRais zpU7OL%gl4~q3!$AsO>6hi!z*BV~(+{pa!hTnx?WI#CYUMqXCCW{Z7qGh0HV=ZCn2$ zN(43gJ=ky#?Ze_ZRuZ=6Vk&Z*m5y zPl>&W83AS$kn^J5ITU_(wrykk{K_5qzv2<*G>XRZ*J&IK8Tddek2|r|*W*}V>CP+D z96zBOXk0x-oDM$_R~0)x2!=7hpNv}($Lhvmm0luZ)VTE1$dprV94OvL0laP}qr@DS zO>w2u?O5=M+ztq95(Wg&-+I8m)h=|u8C`MM(%+(ctHI$f!NcE@;xJma8Ln0BdB~iv zdq*Xxvd(dM##_Yz%hxYZ&SQK0C0s3|u!FFBeq4aDY7(PtUqKYIKHD62-Q&3* zr)iorXAe`e!oMSE#@d~ip2aCC zIeIhiyM>5RCFi7V76nDKJ-L;Zc$uuQ+$i-=w_?9W}}`n zNBQr^p&H;%M5B9Vk)4Orkg@O*oIRt+=yPFgtF870^&xLme!eOqFClpS{p|yD@cqx= zhVuK{V={b6Y(@P#yxD8n6F&7LKJ*;M+hcLBo14=7+Gw991)%Y8T=Ycd^@=?_8 zn8Rn%EVuKKM7rZ7TsLvmP&M7|UGKy4*)qXfPyTMK=W)L(JT&Atw!vO~>QN)ug)Eb7 zt9!MwNM{J2OAy?q>b=^SD{R1j%m|J}>cS`nAfh8jZeJzd>i_H_Io#DQ157KxQNM znfQ|31y^v2-~8H%F<)(|+#NodB}rzM_e@glafnZTzl|6D%>24aeqY|}Pd_uiR?2;k z``4?SY0OsnEoUC8UH#oy+%mt;SRMfVX8sTI!&sn|-$11weWZ_19z9y-u|*BR1xNf@ z9{+4Kj`h{t?R(Wvrt)<F*L9_^BzB#c6yz;tUoIN zcqqlV5NUY^nr98>lD{R~gSXTaZZzJ-h$v5#H{yF0(c5G5Mtq?n23Sp1`3!kLz&BZI zr3uQ5#~i^Jlnk01G*RIY!-z+%jsB0VAc^tbnbrXqjgV$dJ+}|}H)_6HufX7xEUZ%N zlhXOM363dm7^*70>nbZSE z6*x+BMx{^qUHT!5!X9}POOtx3@f=se=xIt5hwpl%u1Ev5E9Y}<1wA0UxhBbu3j@>p z{W15lyo3QbR%?>3lgJ-uzL)Ck-{2{4ZVe_a$%_xP=hrqZYLnvFi<-Nz7nFfXRjcfZ zOM;Tdx+^)L7q`uhxBp!U*CGnLl<@hd;`65Z9c+Ak?pF|_r&HcD9s|F{#~1$Z=11zp zNbIcG$6?;cTY_n>xWuZU01rgWgQzHDuWq+Zgl-2|s;-0)IF^UHDVtOqYz=|E!vSPG zP+_j)9eNDl#0RJ!$HBNE#x*L$M|QYBJmOoUa4gE#--Z}R@0WsX-Voys9r~f5F&Ive zoiN{m;;LUpxVV|&k04wGE#*jI~ zA@9>D1{7YwM)iD49C*es^?~Rq;1B#XW5&>(;QPacb1Mg;-YYV08NVH zXs64LLmc%=bIjR{xo_7?6yCY)4gMg$uiY_X^8hHt$Dw{IFPn>FQcks{NfRamIV+fd zD#TWJSvj71rg&?HO&P2^rqv(9ngVZJDdNKNaCLo+PwXy}RcffW_xWDABL-P`f-@Cs(wkvrb37}A% zKXDYi>n-SxVBeqMP_>!Dm+l=mW29iK5po^IbzBLv;?(TEiY4{U3Jy6K-(RcF?#5R_ z@VI21t(LRf z*fjO_v7@?a>0`7Nh8LWdF2w0{=alGaDURe2+nNtjoE@UMMJjr=ITzNKg0tEizFdw4 zCIwF*5O&QE&z=_^ zxjS~vNkrvf>rT9V?(7>|(KIZi{%kl06xsO51MO3)lcJ{qrytnwM%&4`Hf7PoF^OXn z`L)~nJ#LuAo!2Zw_I$hh)xv%aN0vNtsmkyvmEoe2t8$)Qg7?6Y;k#+h>6ifbmfz6{sjDM+PEFsPfH~xX+B*%A2jvra2CpPWz%=DGh)73Ww0Z(ra4yeBacc4-O z5#^Xrhs3HyXeD%a2<5zP7WTDAv!7%GgDt~XO`~9yhoj`Vx^wob(wuMjJ!M|e- z?8F;Bb~lel{=mQKd-*qcKjV|DxZCu4b-0Cx6^YKV+Y_DX4czKC(RO+AsYK}e?8#pf zZ9QsG8+J;43OhgBMsLHG$72p55?cTxU>oxVB1V0Rh#zp-XlzQ{$lp^*wjM`_{)96P zj5*3bUm*Ht`QqbNUUz~ie}nfCZ9NYEY`gOif?+e3Gow*Bz7tzEkJ>5tHnj!ue4M7@cezy@Q7%-$v|2*l9GjU+$P*hCd^BBZS?OJ0`yYV${_2EJX^RSOQD_jMDlYzg2#H z4#kZcvcquT9lLzOznPx|ImUbv!o##rI`AjylW<4UClTC|{4%}VKEt6H@4!ZTqd%tA zApPh)v>Z!y?s^j>fm$s8Sjo1lq z-x+}>;)#cuxpyCa*5<8hls2CBW_^#1C|!5{p6r_BQ?s-2l$yO8D+0p^@Rs4VDq$`k z&i4AtnJtCK=Ho9b1F_WKpKqFN#=;~=_Cn~fFr;8>_PLmFy{!3S^}H+2a;65!u6g)M zwb$ueiyWs!Ww{8U z^Fz{{ovucL>4m$puSjtY^xsr^B4W3iaInBRpT_P=LS=;~s91DtVt3sakT~2p`1CP; z4j??mc_T}!qj_U^TWoIm9oT8pEHw8?Z0^T5?MHLp&g@wfzJ?EE;dw}PMHZaqGGN<6 zel&|ONVtOQ?nej4DIJ*lA&8E}O7w&>e3A^CG5bEBTm2u52w}0NxBtV-|5N{`1NuK( zbE4{d;xcdlr+SbbvZDI~2gF+p=P*U*Xsq09!`1`K1J!$KUKP#m54K9Q6@1RliNj^~ zezrg4?fu;M$A0#H$`JwAUe9>d`x%aS>HWNcxHRWAs$ahyoeK2cRnN!1&fDX|c9HCD zu@6+r5kkkQ2;R1z9TjvF4x=OUB@k;os0~>pB}%R!Pz=a z@oR%OlsT-9TsOT~!I%%CJfm``E!}O@NNPKB2Xpt;_WaXcZKuo>ZT~0zL+PK4q|(WB zim^rbgQpny1M(d6De_hQpfjG6yrpjI*o%(r?XV&l^k%$e{y*1Obqx3^l>gX2>Gmu2 zX0w<*!}9G5y%;o*bRdyqmHwF^lrd#+_4p1#Cx9p2@Czeou7W z^(Xxk`zdc}KCM#z|E+)G=z{LaoQ0^vGyfm@ClCBd|76)oZ$W%LO%;T#@JZ>Pl;EfN z_FB^1Rbl@Gqg1N>Y}I#`{)wkcGmN%=%P5XNj%B|lXA3$cjstdAE(U9?+a-d#-u|g~$DLS#qr| zOY9_{E=v)k^Q&h0jF_tSfa5*Y!K-gZzXJcMQRvtcW9z?5!81AA3!b;flnw;y(;Pdi|^Q_)+Klgjo+@)W}v4i9Tf-z9xswRk{E5mBC{X zZ_5wGNL`aUhGPe(Ans?|9r%PWhwBj;Gmr)u;FT2ATi;cJI^x*S>dFq2{T9 z6UKeXoEk{4kd3m_w*acWt>vV^2_qR$+P!lXl-6c0q16gXi@^(9eC5C8#@Kepr}%nS zXxhDBGg*!YJd_9UfemA&Uab1Ef0@Tc^izoi6Lt)QTk_;EM&2Jac*U*7{?D1PT>%07GW?C;d@R|`K~_`c+o z{WCQDS;8j@A7b$_8h+QCN}i6w??p(`Z@kgJzOM*>Xt&b$4U4bQ@H2#8Df}#pFV^r2 z4k&vr5PlIt?yNqrXO@OPSJEFQd}k~DcnyE}4W(~);SGdD-%t%de7}p! zh4R$i;NL!vNcxq+KW3$0s^QZ`-=)G2r@rqn{ag)yv7|p<_#RgJsT!UH{5e+mQ?Gmd zEmFfz7Cun;=}ceMC!PfV`py)7=PqTRMDnV>D%bGKApzuhS@_A8JWdV2`!&T+7ybZ3 z?g^}aGBkXN@QK2|WAQN>zKh7yQTWR!Pa)H9?C)RSA0+)lJC(jCnZDv{G<<~cD~0cB z$y2Q12MWJHcsqG@zh`OqjV@)MVZvVwHQa6bL;iRTzfSn>!XL+vy9@bH4gan1$99PS zlb=t%Hr~H|b_!o9{FCJ0AYZEC-xhwU@OP8nL_Sx;zb^cE;jbpYhkUAre@ysT;m;y} zgnXoiUnqQ_@QV;~pOXOIbG?6kmkGZUE1c0@zkkJYKb-u#? zBY3BVA0Yg6;X9K*i+qNL4;MaB`128Rw;>;+;m;Djqwvo#{bA%Auko+%uOR6ETa>=5 z7lMCx0QedW|Ap`?g+IXbtH~E@_!{9C2>%ZGz2vhr{CmO=6Mimv5BYcvze4!#!l#q} zgM6rle@yse)k@#4XQsFm{??ygX!`~?Uc;Q{- zuOy$U;cddl3g7lo@K=$K)bPiUBI|$QuVDH&lJ~^=*LRojJ2xx)>?EH~zFfnpMvJLmw)A z2UDKM$k%B2^Mqe1{3YZaoMfgMSD}CRv_!jJ6xa8h*a;3xppIvD{yf&(iP{g&!vT#pDl@ zkJs=w3*TM%H2hBCI|_do zKkj()jhFk^*W3TcvJX7(zej!&`5F!Xk)*#;_`L|Z?;&5T;a3R1K=^-?pG-bW!*3LR znD7@v>i5jAD6jzkT2Kp2PFNMg`YwG3-V44ze)J%!Ve^Wn0$tYe?|C2;m;-i z6Zseo&nG(cH#!P`7(ebN@{O1I*LRBWht`Y#lW#v5e2s=r6@I1gkB~o~e6fa)5q^R2 z!^uaH&(iQ$2|rBui^*q@kJs?$3Ey4#pN8Voo?}e@}H3}*YMX1|FZBi$R8x{)bN)IKVA5Nv>wo$$kiuSCe*mwdd2cL?8I_!9E{$cJk9(ZU~FtMtt$e?9ryOZ?lXK<=+f z;W;|ue(6#0r5b*O@JodsOTLJFu7-~me!TEkSbVC6ZxDZo75;aG+{>AMq=v5&K2Z3N zEZ%dme|?LD-?>KFhocMbXPJJvhR+oKW#Ok#X5q`Sx3FIGV`WYHNNccqI!^r26 zkJ0eErF=UIe}Lty_{Q%3^`*yf{Aab&_Z{+cnSPCi#~N+&D}|qH@x>ZGN%#fAr;~q} z>1S#92;qkb-__#dH9Vh?Ay0SVkMQ~TL8c$7;md?Swo2){!QyM9{M%=(^iL{kc$P7-*R-!FV*m4gwGH@pZrMjxf;Hg@G-*QL7q$Vj8qN3exCA&MpaFO zl_Mnn5UJr83tuC=)8ai{{OdbL_+sHREWTXB_Yyu!_!x_KYWUygD*5AuZ$wDs&(QGO zg%1_J#^Pf%{PV)ss%kE**y0-_{p&kL_)_7sEWSp=UprsPpDX+g2)Q3V7v)u~;oAzI zD*O!cTgYc=_znt;ixmD+{J1YX4}83a-;W+S>IaYd2|Js7B>7McKWC1Tzg+lSgv9=} z7y7r)U@2dx@Jm>}D=B}ehCg5U4B>AizmR;chM%RtxESG|#*aIZ@~3KeyYPIlKz(%+ z`2pl3HGG)JQzQJvl&3fXyypV{`nn|jBJ~rtg6aR0^C{&Tey;GD!cQf?mAq5Ki(%sW z2%kXybMhG)K3;)wLBfZT|CW4=hQC1g-JXl(bLZxk38E&LVa>&T~Sc+Obh zes6e0>AQn`8pp#UHGF)oy5FmWPeRDO>MHP_^Zn}^DtwXf5f)#r;i)0y$rOG(% z^qm_1o=22CeT2_O$X$gO<%|psf1U6_ru-Hkqv6{Lzk7kQPlUxccJi<9=hA;D5x$Q7 z2PIF9hJRi7Y~jl+zF5Pr5=sx{7B*J@|3>MlAl99 zRKt@%d6fzO8u`&Lfv=75Z=c3liZ2j8Xf}A|KcyOes-!dC;gpld~=lRz+RQMv{BP_mL!#}7TGcHs3 zhY)giDuFys4L?};KEe+n|It6dXK47~g-YKb;V)~os^4aGN} z>tElGk@>v?blkgG3UvJ4D zui+1hJ?rKweJ^1Blldyr57qGR3STDtO4|Px^0giP+o!Nl{9pLDsIRhTsfHgQ>5mZp z9=NspJf@$k;a#F{w3$BbGx;X)sTzK)@C|d6z7FzPuOjaW_pfhg zj?%YC_y~l=AIdfSH6l-@@Q2x-Y)nD=P7U8i_&&miP@dn&XK46OMgAb+e<=X}JNXz5 zUnTtRTxFl(lxHdVMw@?qi-a!`{&LFmB>5T*pDBE{@UzK3MZQ?WZ&DRoT$1or^oL=u zfzQ(LPY53&{Ojb0laJT%%Z0CdSm~Qdek}P=4L@1I?<1e9;RA$^7QTf1Eb^%ueut_E;~HiweHW6SO+He?mkD1bd=mKr z@}4mN`W6UZB>ZLM3(1#j_{qX&3SWn6%e{oWQ^WTazK`(L4q(D0GM2MJ$5-uXKC z7!B`H6=&S;S;{{5kY7x`v4eko4dF|Kk0$>d`5FzsR`_h;+mSCOU##I*3!fx>6{&|yx5&q9cv=MgnYxF>|H+q=57qD^gfA0*2>JEoYeW6pXSnbM!UvJx zO1@OXUo89x;lD$*<=#d zNeG$!pR@hz8!CK}@DUbYuHjuGPp0rw@#7x167o1TeChp4o<72tAtdr-X!u;=gM=@z z_!teJD*WyoWuFli-`L*2zTc~cC9XvHcktsbcn|W|X!w_8JSSWD@)?l-1@grjzI>|E zH%a&^ghbyg4L?BAj}Sh?NW+2a3J`k@*=M))$}`&fK!h=2QhqZ*>P0^wcw zaqlgIzNH$zSjJmM2(S7}3(4nd_}7Gw7Je1`SI?49)$mzUlsy|}Dt)sN5_?8!_;}%~ zgio?~Pdoqmh6-OKe1yf9Yxu8J!xfh){8aq7kF0|HP7Qxd#vA(xpF0imw_6Q9L&N80 zDSd;4FF;82jnVK+CH>tqlzk$t^c&my*EdqqFA+Z4O208X=;=oKd3HY_{?GLHQvSv^{`HNN^h<<~w$iWB@CA~7w(#YwA5{9q z8ovA1 z(yu+szkM1fDZW7XAS?Y+4gaE~KSKCorXRZ=^5<&!Vo5(*_!5M~KB*f1MoGV6s?s;! zN-jk{H%@)1^A{XKDC(G9DEn{PX0U)%1T2pCRejWr_b=>4$3g4XPoHD-(VLe%xhSk$!EH?{@9Y z>mkn-c?yKTp5tTpZ2@1Z;SXaoSKMDCg#SDFEb_S;zPqF!E&NsFW67s#_y=Wtrr|!N zZz0ELRDUT_!ygfOs)TOz8i!u5`Gf-HRQ`R{CMFrg@1s&lHaM}S7$5x z^b!6;ghc)f4R59&B)psYp2PBr(eSY%&+dDbeO@DPBj5PDe| zzMZ6>E&Sz7{|=^Ktl>Wg0e?sm{(SNo{hoa9S2e9br|&j{gnBP8zM&$2k?;|g{N)>J?f%ot6-AKP!!#4__B>XkB|2*m>am;qzJl4BP|0 zT*H?MpDBC}`9b8J8oogIKEjt${tC*Iq2WgeA0+(!On(#k7!98~M(MkIg0jyDgyeo~ zJn3KGNa0I_kGA+44eyrzRkrXo>|cc*ggnI>e!uWZ!XGC;>M-~$4e!iQ@<#|?gpkM| zui^Jf`gM0JeUCEz<8??sRKvd^e3|gylmCN!?Fs+(X}m+pQy_ehB~Ph_uMvKP@VgN* z>wgVjEPS-^B^IBm;itg^;Li=?mA<+3hkJj7{E-@ditts!r;>k&yyqAH`gU}v^oxYQ zZ6Wwa`vk)OHTkMJiRMfy)L{R|ENg787YZ?^at4S&DzyT>W} zJZ+VweMw5S-e5i*1M)WNcegl5obII5K?B70L2wxz470Y)8`BDx4rtl+# zAItP#BA=__R|p?1d?wT1Mm|-;PZhr5PNnbf_;G(kK2pQ~gc4=_FMJTw|KWP@p5y-Y z-6VXG@GF@9Pvpxr{666`g)gE1oEs0`so~!ezK`$;OurNP3=RK+@Ik_J^@qDJ`4|m< zzwo=qD*GJ3k2{`x<1zpG-YtBI@O6bqe=_+R4S%)p*}~6d`dQ?QHT+@WlY}o|`tKxw z&(iSk2_GSRSEm0i`FIWgs_=DV#Q&Lo75PvN|B~=!!Z#FvKTN*%sDJxR6TU!r7k=E| zkT2EnnZl0{zKH1u-vB;W!}k$BTKFrNehB$g4c|lfh76@|AEtjb`A7|a3KpUN3;z** z+;QYRKl#`9ZZ+^6S0wxj@?Z7^U#{UV#RwzP&lJ8l#~TZAD;iD>-(C1V!UvFlihPEK zKU?@9;dk))Ycu&64ZjZr6d!TQPhTkfD zw(t$~H^mog`0J#+l7#Qi^jA(q`dJ#jo$wLDcd+<)4gZiDD2l5at@M2qA@>4weT+~I z{~1OMVV^SL8*hU=PIR4(+9Uq$^Q!O#!jBsPelht{4gZAjBZTiwe(ew7b2a>3!bc0A zMS0edPu1}E3EwbE>H82u?jSts7?B!2O8lWp_?K=4|2!TY4G%K$=MN#m7YRR&d=dF_ z4Zm09$rS!DY?;sze;Zui-|KG0cGXf#A z|L^gyZ@wB>iYpQR3547!7&}8%QLNz~5k5)ytH|>U6-JhZA1-`^ z@WqoMe<06?v^ly9Vlj~Bj5_#}(> z)ce;rRQMv{BP_mL!)L33tGGFeKSRUk3LhkVfyKvY z_*M6c|Bq1iIYRy?OcfiAhJSq{CH)fNqpkF7G<+{fKU;Vg`9h{&tl@)|;BiU9r{hP~ z!)Iyu&lDIJA$(WzbzBc0ui;-6zV24h7eA7IsD{rGzD)QH5$-}$%CQPH3xMGJogenkFM4ZlkGhT%%z-|-{zM{4*&;j4uI zi2QEa)AOx=eMbskB>W01{c;W85qpzPfk+h zTOj<36qN7lSXyM1YWSywA0hly^3U*o$<^@tF`|w8C0h6d^6Gv`)$nf%-*Ai4H_YNA zHT)dmtAsyb_onap+P}U5B7c$a+sUi@yD2HqO;q~!5q^r5 zeujphCVY_a{VhI5!w(RC_sz;a9W1^PgO2{nH(dA<;r9>m>RY4X4~jjrg@4=Pi#2?_ z*e6N&S`1^k>uH}X4WB3JM+l#0r5~^1!zBH>bfs@D(+|K>U?Wt+M@jl+!v8SXt8eWg z|Moec2HxTdgpXwUF-*Ty!&gjDha`7cl*CSbAkRHGG`{ zrtl@(t{UqVjnZD|8WNG-%6c`sFd{>K)*YHKc*WIM_J%S&z{@3uC!j}oZ!QyMb z^lzWMyQTgYz6v4tWR`EKh94^Y2;tX}=Tbi-SHthWQ|f==69#$hnX2L67QP`x{NLgu zHT)dmtAsx=(3`&JfPZ~QDna6kgkOOl@t<-Hf2r`9!cQfy%Gaske^FpuAK??otNvJq zhW}9bAmPKvtMp?ue1Y)0?c)FVG5bIJ{p&kI_!8mYAus(O4IeFhw(xVU^ouoog977{ zgij|g{T~f~tCUxS@K+?Fyj1@oUc)~x^LKSal)k?Y@Ro0=hMyvQneZQ3d~L0N``m&N zN%T(&grAO(`$N2XWRz<7Z-pNrd?NWcyqaa?YWUT{M+@K4;!`zzh}1s~gO$GB5OPnT zJdqmyX4K%2ze@NAS)aEj@7d>H-)_Pe3183pErfizhMy(t2Qq~p#_`fY z-<^B``3wzz6(oTCLBfxwJOSimG<+vDP#U*8S=px_(?5&$Z~Vf)zLSJ65q>F#9o^%} z*J$_$gwGcK3-bBoi#7ZtHEW=?Nq;*_!{?dvzrv^80DV>eGhV|dsDZ<{x+JA< zF4I^2lTZ!+pc+_>D--@@TrK+6?)7h<`N9_nUr%1?TdLtJ%=us87bke-&(-k7{iXgF zz62o|4@uSVS;99AQu=0Fe58h-D*jd_{6k#da!Dl0%k#N^eM2SvBH<&f^vgATnCbt* z?_v7un7&iPm&Pl7`v_l#kU9RN;op(^Fi7}2nEqO(AEV*t3cq`xvQK;RPmpii<6qx& z;Y)=7|5&^K_?pW7Y2}?;!GWC{L z$x8BG(pi4CkWtb|)(>fUZ;$MbQ{%i;5Sen0n)ThXV}KMX$;KG*OkN9%YK={vzc3ZG{9&GZrU-%HIq13u31Dc!aG zvfeu0RH<=3!wlc(ZuJH9J>Wl)UlmbadeD7-s=KMrq7Qc3&o_KAeKLKC)YzX4!yn@F zJ&OLQ)V#ChR~wWk8UA(psstVHC-9HKM;d-QeG&a#@R{(HCGO+xN1sFg82lXgLc<>( zrSp?Y|Gm__pTlPxehqz$umA7|;8P5r(N)_Irq7ZZ=QG;ym$UyR@j5?4(SC^hYK-#g zFWkpl!T#jYkAbfPUu^i}^y&1!-X(rCe6Ha)(kIe;(EdH}X@>s~eFXh}w7&)O6KD98 zn{|H5dU5?r&A0vyU+z2qN&g$puYTN8+AlreK0no6xc=#bo%Zt${{h=irr(bCUu`Ar zXBa-0?MKn)NsawaGW-PYAF6ulcxPb$aJG%KA8GhFwqHb_=(Jz?x%+s-=yT{J9A9Yo z(pav4`ZB4p|JjDmr;nj8aD0m4Gw6fqvm767_$2z09y&kCj<4SDKHeMU6Jj~O%A+4M zLi(@kt=RB2BE+ZDcXWKN;lJSd(nR_nrRLqfBxbo z8E>)SLwNjv*qq ze5Bz|bN^OE|A*8#-pXS4@p^bXpF=+!uP+bk_dgB)J&%V|>D$8V_eHY}zluJF{tVWS zwx447sr140I~^Zw_@VSAU37ky!E1l2_qdO@7kwW6czFFjYO&!P(5KUPaeS`fzvb(7 zB0ZixY(LHL&(cTGII^D0Vs*SYI`+=S;}vFj>~XOE>2Y*SU;2sr`~i7)9f63=>6g`eE*`FlCzd>IWqvOTVC4HpfJF-7T^z-3$ zy;bgZA8%v&9Qxt#{Qk4y_j5i|>DxN(XB+-g`WX5%c>ePH&xW5$A56a!Ui%+y_@VSA zH*x*LbN%mfA8#Z2Jo@oY`^AR;RYoX}Z#sP!r~O>RucuF>4{_R0GyFRG2>L_VU+MhB z8GZ(nZBvxGYtO{^51Jk%sRmJ&^tv(I?^af>Afi{-N??_wjn@bLi`%|M=64<%Nci zrcb4>#ODk5!)F`5l0JsMr)<0r-5@^2@Fn!Y^x0@Xqnr3>!{^bLbkzCTEH&>e`066} z@xDc$M<0#$8{qri#fG0npH4p-?KgzaHT*#OMEdLD8^fm=zL@VXBIsMmhVv6=_@2J? zf1{2!4WAbj;rqQ|hVSBA|MYS2$Kgvqa-W|Y>9gp=;6vlZ=NrBqeKLJ(_`6m&2zR{x14p`Yd?;zHzkS7txnouk-UV{A{#ez1@Ah z8|m}t>%t$#_mhhaKc7CGel`4G@VSN`PM=8s6#U=%{b$4P;qxVe{#!g>wEuC2AIkR2 zI_P*GMEk8LN`Jx(|C*jijxC^nUuxbv;7hl;&rf&uCyRct)1Q39Z>LYD{~liZlVSM1 z^ilMudWv6;{v;WGD}7Zo*FStQe5B!%Z3+b^&Q zOaG?h(+od@{wsdo{ix&P41ZK%?3?uEvhjX^{acuuzhg-M#XVzWSJi1-`N~#b*7RSv ztGuA)mo>X;PbsP+{|mr_UFE9}*VIg^owD$|@?6=+$R=1e4a4yF;q>-Z@>G`F-|f47 zy4-$V&rWiC&!cU2)xPF@L!+FAhOwbSc}_|P8nXkDz6Ng64xIeR=|CIjb}e|jd2+jk zVS(RPOZ4d9tJD6ZvOjyJ8H}ea68(8an$!L~f4<#4>HdN3kOpO7(d^ITY#`g$z^l^0 zuG*u|-)^aMyG6X+Z}MET`%@xMeVLygzUGp(KaKtUseQiP?oPX%*>0}1EA#U!8>p5W zVnCN_fA;Ng=BJi(yK`~_8OOi=Kl_u&=HBu(SJVRY^SCsp^YifecGo`SpP$uiH;nxm z%LdYX4a}1UcGd2A{&v%x+fCx_zL4jp>-@;z!cy?U9os@T;rjiLI?=LTQ#QFjKTAic zKcSoO@F-c|Verw0&*k&kOTP`z=PmHn@4L63M!$%D1$+^FvEf(IkD`AIejt3V;eEeP zxjlUg_{ZSW3_n9*?76%2_@>p>*xz*)A7}Xf^n2(}wh=!AKFsiC?Eeb-&F~-IB))W` z`}`EsPoghD|I=f|=NtZQ?!UUzIJy z0{(mW6vKbP`8+W~$BW+v<2?o+ZFu}f6X}naz7BkwZsMy8+{gP6{UZ8GJYHAB7aJZU zl=er_&qMn0H#A85=Z5Qew@b~NhyKJFKAnCKeHQ$)@L`6( zUON)If<8%V-VQy)m;Tp%e*RV%JBhw7d^CK%;g@ngyVK*h!Fc}-pJ904??b6azYzXy z_$0$`dQj)*$elVrUa5J*I*E@o`~v#5^otx{xxszBBk5<-k8*sW;oH#xi)_5xdrALO48M$z?}=m`@9TJcm&A#WHvAyA@1;*e`}+7+zw18UR`iSLuY=de zx7hF}6~>OD4|CejHT-7!_Vk~~hV7>r{%i>b8XJ00$J<;s-Z$j9tUS)}yXg<>CcIoW z-qrA7hF?y1n;{)Uw*s9&pQ8c@NX+fDC#W8~KHee0Kn25C80PX#}MF)eQuCI>ry2eh`U3io;Va?e41Xzo7JV!DUGQOs|KSbz_}%cO`R?=c zU-~He(^B*9htD_sJo>87b;Zqv-wB^#_&ex}=$FHP0iR^}rt~@V-#jgTlDw5Gk2L&o z5%PMHO1}yIUiiwj?&IA^A49(YJ_Wwe@bl?|=?B42fzLMlaQc${IzR2;qv2Bw-9HvEi4|N6=4%?*yM~`0?~*pXqq7 zhwlQPX811j1@wPEB|Zs0&hR1hS@iqhe}E4&{2>uCKgslK;19x=u5q8A*Xg6^AAmms zpKti-^i`kgc>BZeh0id2Kl&p2aQM&RlMLUKK8Lo{9~Jq(U%wXjoKGK2KN9{!c>IwTH$R-dWFOZ*{8soB!?&f+qd&Vy z{CfCk!=Dj>^-sSW{$2R$*WLTGlRlAtIeYg>KcLT{e;PijuJ}m9FQiYU|2KRG_{u!@@!mxrL%(l< z_&V@~hQE$Jn0`BaD15fz{}dtfU$RH%XEl5y_!Pr`LZ3(989oF)+VC&Zr_FvCxvPo{qrz6r)#D(@QI_E$I4N72W@mo^fgZ}=Z~W1z8Bx(WYFHs0eHZ-(LD zqc5WW7XE+mNrr!dK8JoAd^voi;g@K~V_#JpbeGjMoLc>@7pyNHOoA9Pi``Lys;rq4S^k3usm-au!@Y!sCIsHc2_}0JS)7kz+ z`dLo<)pD-FZT}X{_Pf$2qJ4e76dS(!n2tA;zAe12w_L-Q@%`Fiy;=BAcz>tkO*4Eh z+h0RpARG24&hTmUGw7GWbNw6sHtl$9fBJ9X4`RKQu5_QDee})g*TLU_=S#lfU!pJn zUZ3xMF+VrLXBd8{HXOT&elpt6)AeuotLPWdUjhFre5Bzy(Abgm_2IX}SLV8pmjjJ$ zN54fj-fi%OhHuTs_v}#}@6+(duz$!le4)bF-So$0!^bPd@OgZHx19bhsd4>88-5Aj zFHfXjD>ZK!`cu8aeY|7nyV8$^{{g<(@FR3$VngX)mW{Uo9^YKUUrT@ZJDs0fFh7mq z(+vNIHXOT#zBYVA_&CG2VEZ%Z8=yZe;lm7ng6;RG|1bQN@TD)h&ySbBIsL=%t>E(w z{}O%qw>sX(7XM8vauH!(Z$COo5*S zpJw z4L^gvyp-!7{u%fT!*gNAZlWIy|2%w>;khtl7tpttd-E=Xk2HKk_Gcvh&$99U2fp%o z_wk;S8I<{NN52JrEqtNjzokEWM92Fy{Cn`(hTlfNoBkg7?eHmv&wEmj_m6_EP z3f~ew-|&;^%Ma^#8^bq+&oF!s`c3rR;V*+vGJJ-@*ah^j%ZA4fk%oUr7jo=KdepoJ z@px4(bsz67^zG4X|3u*UhklD}ymR0S4gV4SS$_WeH2jnB*@l0PemDIK=+6uADTe z(f%^{Xv059Kau_)*?2=5im%RgAMf?_UFkoC{~qlZ8$RMO?*HjqO3kvP#k-h zpBJBz4PUR*4Bs+S+h0Q;DK+nGe0~vU_@Cx*|4&~jHScQpFvEXH-=Drc+V4k+3=I$3k^SSo{sk{KmVOAHNL;jHhd4ZzngxS)Vzsk zKgIC%>6g=wg%5|1HvHGKwLcT-f03HEw66H-1@7Zb%uwHzexTI2o{J4%tsnfxhSEpK zhUX`94PQ)un4cG)k&SQt8@^zs_GbljpJIQ`^7G$5Xg>x%+wdj) z|AxEizsCPJiLaG!{0?el71}Ko4%i_oaa8?>*(9jZ;=h(PZb(|0r#J0`FZsB*nj?w z=U2AjN7C=6e**qAe2U@Q(J!Y*&07f{ZTPd?e@>)-5c3m+$E$j-`*@=j#&)G2E*tKj ziw*DLdI+Vz5A$;kp6|Ja#~xqS+u>dM{&x!6kHzs=n&EfSuc6*^cb}ix^v&tl$;SIH_VH*!~{fgnxj!t@YCpL(m(0=IK%g$A3#6C@nME3@yFUW@NCmDVi{V4hgj*m2a8~XP2H#@#^ru%qL^LX-{Zo=z0zR>VH z==acnDI4}b+we>2SJ1!V_!PsBqn||oh~uLTUs$Tom&OhC`EpD)-qv`&R6puI-VWz< ze}27g!f%p|Hy_X6V#9xYSlfTMfwn&v?H@}NpKJJN_UCc>VNQS24Bx9(Z9P8MP5AAy z@p@}X`*DVUgg%3Q4}2kfnBi}wPokd&{|0>N4EOnIMjuIkCHyk@e8XQJto=Vq-&AVe z&6v*&!&h9Qem(sl_-*h>hW~&*lfGqb@jKxo4Zo0n2z@j7UGSBUxR3WP`quQL>WKda zzR>X3(Vq&!Fv7nN5&t!Ow&DNOhGVzU{|mkpKE>59{8RpC+mWm~o|tzqKln@CUj^0E{nY{4`2PQE zy32UC;!n+XIwSvoa?7$kHG#jv!&xs6^8O#uP53O_|Jy-w|G94M$@=;?{jKx^;opT% zGkg+#Gy0bB@4?3zz8(GlI3FG1cfyAmK9c@@dJp_(@TCvA%!l;-|%r2cE&g#REL?=x7Bk%s?? z{w?|w@Snj~PIDjcrA@T`S@aQ7^WKB`DKz}O^aJTL;s1coHvEnBE$ROae-1vy@HLIK zKR-3ZCj1)sv+&V|U%~c2q(3FM_Kv`ORzK)I-bwUN(SHX&3clFz-RbY9e;$4$e6Ha~ z(|4f%m(;v3!KWGiVV)0Ya;c7Y63z!qgpV_PU;1NuH{snKA7=Q==r_>UbA0Jk_xbse z?-%FNAHn-e?N7ep-=iN!zt-^?hJS*-4gE~VCmH@u`qR2B!Us4$((u>N@1V!KW%j@F z-|pl6o$p7N(x1TlQ5|og;XkGyNAGofw&9ZDD91+|K9>FfpI_}A zUp>WrytV09)1SlnQ5|ow;Scis=rsC0j?XpxYxI5SS2#Y+@DI~Bp`YaVIK%g)KgQ=* zcgKer{xbRv^z|HH`hffV{K(%IIG6qi&Zlzy8~#1|Vf1SqpJDhX=-bfGbbONG@1#H7 zK=%&=93N@;Yv^~-w{U#rWcTs@&hzn0=}+K%JlDVBeZOC69KF}^*@pN1ex=UziyWU~ z`1{zOTJ)nFA8q(p`UCp18s6UV)oJeItxdn0{v6Jaa{U|rAkU{xqu=BBT*JRc--lj* zznHe4W_aK4S875($!R~%@V?)#bgaIvhwhFKGyG-j&j$K>jxU|$K0iP5eC=HNBRIdy z^>6t1=!em-b$o{5pP+9;KhyC^hJT9wv>wKVZ-9RUuaA+2zngvs{d)Kr@Rj$wkGBK; zQu?dl)8PvZ|1r;(kE8eEe7Vj~w&9WS{-{egZp{WtJIb;TDO{=f9o=s$rEhR-#8p96aQ{P^FsaQxO^YTiem z6Q5@I<=wE5V_(%x`0KL4?^Ee{k(M(qzW1+p-mHG4ZoiCATz1dRp*6%It#ksX7@6V2Xrv57Wa;b5Bg&F>u zSY0pebQ9ibi+{b8-se6aKNo5H+t2BIES0TZ;W_is2tt7(0Xh@elovSG3`Wex&_r%>EpcjrUBVv|s%% z_wj!5vHI`N>UcN6KiN-wvEg5(f0ur)<8uvPy+hl7oPHR5P+w_3&G5OK)DNYfEj8|M z;tZcge--^8$A=ky7W?z-A3EM0ax?CqO2@g+Pl|8-(=UZ@iuuVme4KCn(~pDK^_*e& zPyegq9ZTOCUe{Za;Y<1WcA~H4v>$2s-{^zr56Fg(Z{=9`@n+C}eunEGUi)8Y_~+{K(F_fBTni!pF-7ub+R9xp1`djPSjF z&ZfVKejfbzQRVwgKbQUz`a9qs7*+m~>08l%(Mg~0SHnyD5176S{j2mHrRGftlJypM z(JlP_pTqsbL-dbH&3mkt_%Or&uwB>NuT@Ae@ukiY#j`t9^f;dMRa8-5=B zv-IPf_A?Cs{0;heE!R!>EARXFZ%Kx~n(cRD`?Z|*BMqOwO~)HVe?T_uf8{;y)?K0l;$0MK4F^)%ia{sjbw9d!L4YEJ}Cjt9ExAx?Cik5~mr9NE6KD9jY`;U;E$LI}BORY%_@4@OywUWPQuD2U!{>3m zRng~Ty@lZTF4FKT>5J$y;4g!(yvu#O^XPNvli+`CB7a||(C~NAr_#@cuY%7u{MGa^ z^poNLfKM^}#|mSE>BD8izlR%b_~+?M^e`;^8`<#h;Z~1yAMbtidGv3?m-LqTDK>m8 zeLDSYr~O>R-^BHqNWVhYKgOG8_{CdwJw(tKWBojRsrWdmopKw^$Pl+BTh1bV;XV(#5eW&|)@6(23^XT7} zjc@%MK9)Y6em1<0H`nmB=@aP(Iqjzz{-DCx2>Mp=+J2njpW*zJ>0wxS?guj7v6!DQ z!{19^KtCJL$5i;zWcT@5dPwIpi~c3F|3+Q$`G&uY{ZFPJEgQ~fhT(ry7#l@@J-m)L z$?ylbKdIV^!`krtP12uv=zpZ)SJM~K@4|TJ!&lznKHfXopB(y^WaC@^hQEeBmHq*E zu7AT{#`%w-uY6zna|HcKG5nA0e=vO=^#2?9Xv06RFt%ii&d)cpVgIX#xsUfg`aJr# z;kEz8hQE{jNvEHQ{v1btat;47eIkAJM)9>T6Q5@IDfAKa&9Hw9g^x4*gY;$kHX%G0 z?OzQaX87Lp1@!M@|Iik`bg29M#7K*BK01p&4(;plM!w-+kVjN}GW`Sar}2ErF#H7i zDEhnMe}hjl{LS=Law1yR|2V9lD)>ml*P$<>9{~S5eB}`L@!n0JL*D}aGWbHn=h3Iq z&wfvQ34FHU)9GXAC&M3vPceKVeK7qZ%+DeCXv052U!tdx!%r57|CjFnZ+9Q>o%DJ1 zU&E)u7aRT>`gHoi>afWY2U#1@;gm1%q z4uuah{7IQXS)T>;G1%We0AD)TeSX%m{VaO)&YOh!&o}%``egcC_<`^lhF`K@`x8Zf z_kYFf>vfXh-%}V{^?|Pczh%SyTcqKipf94|2e13L%0ceq^>Ti4=zqm}8-)HB8vbXF zHGefiE_EsvNON`|0#6(Ef9C#OE6RW4512KMB6|W&JrJIc)a5kU-mxthd3TMI$wO4;Zx`f=&SMk`X0VC$$ftM(r3}vLi<~?#OE9S zGWulttEJ}M3ZG&4c={;%)p&eoVg8d0-=4loKc)$v2A=~TY50cHW0{{K`V;UCo)BL- zzmi4dPdUj^R~zR>U^-34O_Xx*nFpzXM-=oBMdb;r!&$pTXlBF;{%C;oqiDr~eZEGWcA>&!$hL{|LS* ze463c(MQlP#r`}6KF;tdZ*%<@=y+45=6&x*@nMD^%=QcDN1{Ko(0*xu_xTw^pG98_ z{dpHY-|!vjlj*ym{Q~$5!@o-(MgJrouXy+*!#_@6rKe@XAA(PSk2L%$u7@J}7U)k6 zeC4g~FdMa37=;8nS6XB=)0po!{w!}JkIa~=*!;K@h0Q(9RVL^_!0C4^hY*`zg%7_%1h-# z+4EmVIRE|sYw5G-d!YRm@cD)xMW0MR6Ya;sXBa+-K8k+zyW+>gCmH@$`l|Ih-f8f| z;3Exx1AP&FANV|Ye2Kwryb<&{^iAN`!513-Pd>j=={<65Zzs%uw&C;F=z55uFOVAd zS1E=sVf(@KbJvUCg#JVuek*;+J32p8rRF^WUww=Fc#raUFOR+r+FvU#rRBwjUr(P- zKU+55!|=I=-@yJP((iaj+CMA1s`50$KTjV)kG+@oBz&CV@1rkUcYeI;!werwUqGMW zv|rlCeST`wXVEuue7@nQ@O)-6{r&JCe=YsbFud>lZ4`Ys_@CgD41fDJT|ZTC>v;EL z{R})OKGN`4(ihRUl-_vAuFVF|m2Ny~E`{1JuKY_mFO`V^7sd@LnSNC)u z@6Ggi^mo920$*(S#`4=WW&YFYuaTPfhi2k)4gdYe>J#bzK>y3&(+uC2?MKi*i~hU> zA7}W-*?!p?9q&4+d8^^W3_p~3E02{|7$I@WJ#2^jE?E4PV;LeSX@|XVLeRns-4P@%e`TK~LPqCe!~e zHShMe;xi0ikL^d%N1^@d*5Z>4--*5|PsckF{tfge((r4!o{Q*aBaE4#XncL&?g zq2Gn}N8Bjw7aD#keJcG6j?XsyIQkfRUH{sCis6@We;7>v2KKkB(4T0-kEbtrRp;js z$5-F%KHgW@pFH|g=zlrdFE;#Y&SyIP8<~k5o&H1`{!+GIM1L6mEZVP(bsz5z*@I*MPrnQM zbFP2GFQreVf5GwDh95^CLqEasDTZIh@dnesf&O#-8-6@}$ttdY$5+R=k2jHzR~~%| z*27_}hhoEru>ExUW={LLhL21;U8xEWh-^OXW?rw z-Y~=W<9rs-kHGwB|4Tc%&(D0epGBXC$M;(FKi}}j+5cqvKhPg-Kf~~kv;8Rgm(YF^ z+D|h4QTnP}9d8}XXYDTHBMrZvzKH%~v|kb{zEVCUaXTN9NuNXiBj)EIe4*jJ^r`f1 z(f%Vb;jKRrGoEI&(cTGAHw%Z zxc&`4gud)Ku77y0f5W$?FQA|9_|j|L=O>6hi@u-JpM1lA&iP5EZ|e9A!@oiwMSmQh zpXzv%4F4c~)lwbrM#o1QzBhdl{d~t)wsjwGWBMHW;f^mf{C*iB)<1n)c%A=j!@o-( zLw^RJ_vv_34F5QNF#S%)M;m@9eaW+2|BkP|#(lh3(dW^RcYLwof0Yqp{nK}Ge6HcQ z(aQ(w;`;mt4NMA%h-|>}KyN}mHpF=;~ z@r8!pFC)bIr*G@{Y{RdjkD)(`ZxR-`l_e6{^7a) z4d0u-htPopVe2ok9P$7lSe<^=})oYucc3?@8bAe!_THqqz{4D z{-+r}ljDt`KZNfi>Ejz`_#yOVi@5$BA7=PY^ab?O;dOpWuW+BAQ|x~heLtuDe8X>} zPo{6`_zc4@p^u_Jj_*h5c#{l2hQ4Yc*T3T<4d0Qzh0PD9ASU5==(W7-|%bclj)l}KEv>}*`Fx-{N>W0xi`!E*(AdsWcyX~ zb-c&W{yg|d!#864Mf6E%|0Vd!7OvyH3?HOS3c9DfXS0JB`~qnI?+c&usm^z+Vr;^v zNzL2(GWot(u6uhud(ofVqrQ*h(+uB$elvX&$Hy7|+kM)f#q`Id#{PsEe#+;Z0SPJHa!^my33H#ZROy!Gf$ zNR8u7GW<09Bb#)77Q;V|`H3|A0{XS|i=6f=WvAt~9-gP4NxuxfIodBY{IM^z{{!eN zq~^_p&o=y>Y`+D4&&Opw41iBD{BE{?;(ZcE>AmzT9A6#bKHiD+i|8jg zzS!_%=tt3q!{ejL@?67*(zmCt=d_<@_{-?eZPf8Lh1dCyGyIwZI{$m<*Gi4^6K42U zoc|T{?eX~D*H!voDmziP^>C8?nM7X;ems1>;WyKFr~e-Pe+WLq@Qdl|(Vu{y3!h~8 z(ey{&)A`AUe;7W}@YmC?rGFSc1HMvra&F`OoAWu7J`Vm-_(H?)qaQ$j3H&4Q*onHe z-|CD$UL{@i?{T5#y*yZais4WGu0D_ctkk?W!ABc@GkrS!Zuk!H)s5ZzvzR`SemQ&w ze6it2(?`%xgr5bUYxwKw%Wl^3c7=ZgKF#odSLt{Q=tJRWz{eSWAAJ`6VX1i^f)6wN zOZ3U~Yv9x2OB=b*&ja*P^fTZefX_F4Px`7ZI^O>9Q{XcUA5LFH-yHsa_$0%B^PA33 z4t=@Qyp!M~4gWTMD*Yz-``{}Zx{r4@eGL5q`0?l31Oe zcJQyjrx^Zn`aJrRr^U-LzpQ`5SBQ}JL+SLJ;pf3uH*g>C2lR>bi{WR&7aRUXK3);@ z`uMhzsV~np{QdN0F*;s-e6N5{GkiDt0(yOX+rY;e{ucTy`j@5V{SZFP@R!mj)9d5A z9lkW&eSUu6{72F2wWl0!(UCGO1~U_BYb6j_woM5^$2u)E z;rWtl`0@0IhiLo%gZJS5RGQ(t(66C?6#j3tA7}Uw`Wf``@PEOF8UC^${{3hA!Wy)X z_b;XO+~+4s?p@}yIeiDIaend*UnTc0zWjC_?_W}*&oF$x!q`ppMY7@F_f9f=2K@s1 z*Wrg_ype{V#PN=#{~7)O##>p}eY{`Dqa*!qM}Jsq-f#8&ui+~PW1z8Tbrasy=})%d zqv~t>i|6Y6w2&JA9%+i&(-sfH_q@SB4qx1((iG6nBnv2!|7KzzEn;^ zxb;7s{+mplpGl6-H+&-f+w|QXpJDh2`q}jL9G_(Pvbs9nLG(wY#`O?s_yYP?^lKeo zDT~@|yjk=o=jeE6I=;~G$@H7)2RJ_4@KN-O>03BH#qd?3T>tbZq~=@yhA*POp5E*D zYS~G+jW>t>@5i|Q9WSS;TzxA2KKfCP&oz7u{Y&)i9iL|SVEPB>&(-mdH_q@SBC!7H z_c%Vx@Okv%^eY@+DhIi4^OH{h&1|lJ$LAY9k^XJ^?vBTsD!29{=x5W{b9|EF%R;#R z>5oXwxBd-ZK;Mdft>Y^%aqmwS{YiOKC&zCy9bahpWctnY0~{}(-?@%AihePD3&*Dz zzN$9YKm7@*`PRSTi|DVX_c~twP=srLa_Ik-$4ADy$nnL7Po>{SKg#jB;+NE1)1@H9 zQ*%vMjomf&(AZ03g2p}?6E*hJ*k9uSjRQ3f);L7tFpbF?hie?Eag@fpHQu9fjK*;q zQ#Fp)I8oyyjgvJ_(KuD(G>z#Rr)!*{ai+#u8Xwb`sd28xERFLuF3`A0<5L=+*0@CD zQjIwpmuXzCafQZ}8ei79O56h~LSs{n%{8{r z*iz#a8e3~@qcKWjTaE2Bw%6D};|&@+YV52rMq?L^T{U*s*h6D4jR_k2XiU`DPh)?L z12hiQI9THljl(o1YaFg|q{dMi@78#a#xWYlX-w5PUgJcKlQd4&I7Q=Bjng!yYn-le zhQ^s1XK8#)W2VNr8nZOc*SJ9AB8^XJd|KlYjY~D=Xk4aoxyBV5S89A&<0_4-HRfr2 zUE>;!Yc;;5ah=BX8aHSx(6~|KCXHT=A8Op9aht{+8jCdU)VN#Y9*ui7eyVZ5#seBl zG#=7;SmP0mUu*nU<57*rG?r;RuCZL>35`E#{8{5Eji)tMX*{Fxtj2R1|I+x6M$blF z{~CiehG-1cSWjbpjSVz5(%3{}gvO>Cn`>;Lv8BcQpT_uG!|*xsd2Z)JsS6F{8Zz9jR!QAXgs9xu*M@Azt;Gz#-kdKX)M!tTw}S$ z6B>Wg__M}S8c%Di(s)MWS&ip3{-yCBjh^>){c8-?7@{#$V?B-aH8#-LNaDc7t$KeE z;^}=y%{5m&5aL-f@p*aYTyeanrexD{QIU5o4nWId5ZAsdFQ1+x2*HA40{vJhl1 zAp7fY$=*PA8re2v<;V^q`xe;=WF^Qva#p=!53;7nwjt|)Y$LK>$lgLW1lek2H$na@a#W-XGkc~t( z3fW*}laM7MdlXrBWKSaNi0pY}ZIP`;))Lt|WKEELh%6KtKEbQ_r&_YFkX0c&j_d@o z-;o_f7A&76Rvbds1le9>t�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Ⓢ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

      `1tEchkgq~tDnq$y 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≫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

      ){;SJ7P-_9# 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 Date: Wed, 31 Jul 2024 22:56:06 +0300 Subject: [PATCH 3/4] fixed more macos tooling --- engine/split/3rd_aseprite.h | 5 ++++- engine/split/v4k_system.c | 8 +------- engine/v4k.c | 8 +------- tools/ase2ini.osx | Bin 425544 -> 298296 bytes tools/cook.osx | Bin 10904328 -> 10904328 bytes 5 files changed, 6 insertions(+), 15 deletions(-) diff --git a/engine/split/3rd_aseprite.h b/engine/split/3rd_aseprite.h index 05cef65..477d78a 100644 --- a/engine/split/3rd_aseprite.h +++ b/engine/split/3rd_aseprite.h @@ -937,7 +937,10 @@ ase_t* cute_aseprite_load_from_memory(const void* memory, int size, void* mem_ct s_skip(s, sizeof(uint32_t)); // File size. int magic = (int)s_read_uint16(s); - if (magic != 0xA5E0) return CUTE_ASEPRITE_FREE(ase, mem_ctx), 0; // CUTE_ASEPRITE_ASSERT(magic == 0xA5E0); //< r-lyeh: soft abort + if (magic != 0xA5E0) { + CUTE_ASEPRITE_FREE(ase, mem_ctx); // CUTE_ASEPRITE_ASSERT(magic == 0xA5E0); //< r-lyeh: soft abort + return NULL; + } ase->frame_count = (int)s_read_uint16(s); ase->w = s_read_uint16(s); diff --git a/engine/split/v4k_system.c b/engine/split/v4k_system.c index 7319f94..84ac771 100644 --- a/engine/split/v4k_system.c +++ b/engine/split/v4k_system.c @@ -109,13 +109,7 @@ const char * app_exec( const char *cmd ) { // pick the fastest code path per platform #if is(osx) - for( FILE *fp = popen( cmd, "r" ); fp; rc = pclose(fp), fp = 0) { - // while( fgets(buf, 4096 - 1, fp) ) {} - } - // if( rc != 0 ) { - // char *r = strrchr(buf, '\r'); if(r) *r = 0; - // char *n = strrchr(buf, '\n'); if(n) *n = 0; - // } + rc = system(cmd); #elif is(win32) STARTUPINFOA si = {0}; si.cb = sizeof(si); PROCESS_INFORMATION pi = {0}; diff --git a/engine/v4k.c b/engine/v4k.c index 728c815..e16bbd6 100644 --- a/engine/v4k.c +++ b/engine/v4k.c @@ -25115,13 +25115,7 @@ const char * app_exec( const char *cmd ) { // pick the fastest code path per platform #if is(osx) - for( FILE *fp = popen( cmd, "r" ); fp; rc = pclose(fp), fp = 0) { - // while( fgets(buf, 4096 - 1, fp) ) {} - } - // if( rc != 0 ) { - // char *r = strrchr(buf, '\r'); if(r) *r = 0; - // char *n = strrchr(buf, '\n'); if(n) *n = 0; - // } + rc = system(cmd); #elif is(win32) STARTUPINFOA si = {0}; si.cb = sizeof(si); PROCESS_INFORMATION pi = {0}; diff --git a/tools/ase2ini.osx b/tools/ase2ini.osx index c408f7c6918d9baee4919e944aa5246360d63bfd..89ba7a2e00b2a40bc417e150f7fd4dec2b14a0a3 100755 GIT binary patch literal 298296 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 literal 425544 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

      pRAxv#e~mqEmd8_|mFalI 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í(Io0#r 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�dR&fs)!SoveFKaE-m4bhw&|%D=@xQ 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�+v}_4u8n5a45>8o3(5j=QdOrK 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

      iPki@t0%1wKb9mr$+eur9ZUCfcaSbFE?c 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≷#Jk@~|5fNn}Cv1ZM^! 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 From 2a4784dd060ccf10c2ab7c6644080b66af2bb903 Mon Sep 17 00:00:00 2001 From: Vladyslav Hrytsenko Date: Wed, 31 Jul 2024 23:39:02 +0300 Subject: [PATCH 4/4] fixes to mac --- MAKE.sh | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/MAKE.sh b/MAKE.sh index 33f36d5..658807b 100755 --- a/MAKE.sh +++ b/MAKE.sh @@ -75,15 +75,19 @@ while [ $# -ge 1 ]; do fi if [ "$1" = "dbg" ]; then export build=dbg - export flags="-O0 -g" + export flags="-O0 -g -DDEBUG" fi if [ "$1" = "dev" ]; then export build=dev - export flags="-O1 -g" + export flags="-O0 -g -DNDEBUG=1" + fi + if [ "$1" = "ret" ]; then + export build=ret + export flags="-O3 -DNDEBUG=3 -DENABLE_RETAIL" fi if [ "$1" = "rel" ]; then export build=rel - export flags="-O3 -DNDEBUG" + export flags="-O3 -DNDEBUG=2" fi if [ "$1" = "gcc" ]; then export cc=gcc

      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π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ϑ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 z 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 McgTr=f`EYdKVar#g8%>k literal 4752248 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 $RXNnJjXxJ@6q@4{4>K`rgrf^ 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

  • @oF9nVRbH)Ac!Mv2MpO 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 %HlE=b-FW_1w^d#=4oso% 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 z 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ⓈJcyJ`0H5`6VVI-elA~yed?9p_y-WIrW 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 z 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 z z^09+Pu~tj&qmQy~)Slw-*X>~L>l6OEE8xK`9?Xj6e8*8&H=kkChxv;-2H#5iz1vjw ztMZEY zR>OaLytm!cLCoxzp+%f467(NjvE^~iB9GfI^v@xWYeODq(>i-x*^J9c11IzvkJQ~4 z3{P{w@Kpy4vpxrgvG4T_!x6OUjFH{SK51a9#r}QBz)q_g{k+ItWF2AKr+oAE`ueIp zv?cJMtlFy-97Jz`&cMFg4Ol9*oGNn*jxb)$s7yJK1L@Yw6#@aG|Vmg z4P)#(PW3GMVV4z{aV}S78B58x9P@lwcuv}uISLp)1Gg5P}N32+1qYwOm67m6FP6S&V}~8iapTn4|bg5 zZY871i|#_`KrVCueaMZ~+|}{s;U%K)-|5tY8=5~d7k->J$0_{PDGDQ z)~jwOO_kSrbm5d2eJv~s{!CJLwOi~)d+ujV+#M)3_|7(L1!N zxoJ5*=d6#Ke#XUh{Lbh1Ier)Ldw}0-`AsLb{CDI(@itOc?!7p5<-Ustu6*a>%$4t6 zJpJ@38!w%<{HNN=_b#rZ9UcEs=~oNw6*JbRJACLf)8Nn3)E&8vuI$zH;~~$of=)yG z?4bbnSobA&0-r=?+$=KV@6J*(<7QiCy#LUN_T^a_?0tRABXp|--glGW;3dFTa8%xf zPaO%%V$vc>O)pJ!5`>$%tP69?cH5I^idw_bN0n9@8uq3kFM|V#h2_} zg>8pMKkRn?m3HjD+xd&hKa>1*f&;)u;Av}lgV zcze+zS>qbEBSI@|TJ#f1lQp3Ib7)aL_5I({qT7f~FLY_h{aqpBrSCmdd$(&&TH*St z;?swmYv^fBjnF9h-q-pECOzwaX0P>s5dDw);TId_xfDqG1L`~Jhm$wi5w0`-r|WJ_GBbzIxs$grZ3a@-$U=6GyuCX zXhPx}>)-j!dFOT|^te!OnXKvclRemzt%5ER-(K|{J~m;mw&VpLy3S(kJLVDlKArQf zZ`IV@<5&}E*h8&`Eg3Pt8aO0y)(ZVfhReE&7)w&-Xs727lJsNO{X6m;9l4GR`HmZT zRuX4O-OM3BHUT^LlutBYP9s)`N1NN4hV6}hfyi{m$r>&B>G9Cz(Cp|__(N}C?VPQ} zvM2jvf#KYlDR(DfOIrl}XKtId!g1a9h-u$Iwn-V|Z2CvMFwt*x@_*>L@K?yU4DO%z zAoG|=*wcTuO8J~hHS zq!0DSh-0@YpyuWdWnblqPv1R-^F|$Vd*k8hySFpGV#ZguS2J%&zF^A?JtMtXPZE9V zp=GQ+XhXL2v*280HJt4Pjs|cvYP8u>)=OT2kwzW1jR-Ke;(0*PTl!IO`u7gYdC#+LX{IlJ>2B}o-+M8T0{u#)TR7Px>yZBq z*!IhOw~JlDwo+5}Zb?`A%XV$7p-@x<4wltK5v*pajzP;1lx9xqa_c$DIQ9ickSa9j~ zvHf`;aFMYK4hO**V4&`{xBDMedxb6AF`5kQqtWkfz6Co-;Te15O+VnHA#eB`y!n3u zA17=SPXpcvPtzCv_l8k>g~FX~7%l7rMuI!=>zlH`9ksTQ$MjXVz|n@GoT-Gy^aZC^ z|IYft*5!X1PC`SRuo659vX{%4f-!aGRP+CNeP2u8|9_a{+OIIj-|IEUA7dxnn?A@L zg|Zgf#73JtTZETy1pl$ski9h4n67R9y2aamA&h1MBVtJZkI!#kbKBj2i--NfzMn?l zTj1&cr*X4)-vi*K_-+(yExRgj^{n>6e-^=i5`(MhrmAD1YQC>$O^Q9bv1)Y9 zJ)5T3bXn+36rNF~JNBEzIa=*Ac3!z}Mdfqw7UEmuJOg+*=S|_9cRlu5-v!5m*yY)@ zJ&2v2?0t{?4Y}l3z-j4=^x;(dpY%)iyHo9f(ntAj?}P2E_r7qXuW>xbIDW~Q`j?!k zf61Bpmz=4Gael2}57jvPwx!okCODC@=|`VyE_I)F0Gc*eU_E5+hzS5 z(EI{D>%cZ_0Z%&xY%T#d$Uisbac*yP!7sDtH`3o$dFNc-%Dbeu^VqUf=1*+X-nZ7@tHXXS^cD4o2Qa?KM&ue4^DjZ zu?|IkuO;Gy1&61=PZ&z3dlU05u;?Hb75%`@y109M;t!_M@ZYn?oZt%@qj6u?U{I~JW zOWHBcF6dZxo;ET?jj^7%T2C^TrEcpUfFQ6xsUP5zMl6@LG9N=Ny_G@yEQ7R@yNAzX-rPe3+G*qW7n-l~WYTf?G8v0A$RUEDA{FP)^?`rTDYQ?_-e#E2PZR)#o8d^O+=)ujBy=f3()T)_m+i)##sILm(sTqk=Z_5 ziq9Hjp&uoUz^wv0D}2FzgS9G4^(7aPzQ{77Yf+H!g(+6SrF3#S-MVcRzB# zr5tcc_%WfyXVWJ?c6>69&!fevUwV$Zm*tE41r2VNyK*$*83tLGl{~j6XfU|f97g`8 zIpP@(J|OF8h>B;J&3nZ$Y=@x3mHY}F4nT(k(BV#ej)8G=j5RHGYtd05C2@!7um@zI_Y7A)5}F_G(@Ey?MPWBDYgUOv+V3=E4VzWX#3T+yl_u8R%?hh+arH z>h{s67vZUI=3X?3{VhI`lD+_0GA}j{uh~dVC>t zZ#wjE8g%di=;2iCILpJ(M~koh5_A??e^B)KH&K6?!w0ORJs#?u_Y!sMwBdrbqEA3B z+BFp!YJ$%VA}8*#6+f-B4S$pzy4u7}#e-v;sw%qx#+=moG@HOK45YkzfV z=J)4IJg8jkBL=HG)h=Vc*Q&I^%4S0DS-VuN7r9R~SLK<-|Hc(pcjD)A!hPI2`cS$!Uu)Pb7zaJmjdOzp6vVEWSTIb^L@nx?Yui zFPV8xVZKwD8-uyw{_s1~u-|u?!cU9+yMeyP!~Nf)vpE+&i@wV_8C&%MX6Mu%-~4gs z5I>!Et_&X!$=Rf16uefi7!=)m0q2J_zRjrNe8R79o7;SNkjNB-Kbx{g_S*{G4;@NV z`hvC*oO9HFkNV#zG(OYTr&&6if+cqxt|q30>_OPy?i!5V<|upmXKq(me26RPcgri| z9I*|un_dGxNAdk0f?n$rY-y_d;}b^R$Xby<4Ov~C=U4ii8n?0fZk;$u#KYnKm{=|6 zRs5O5QR-B%cw&IL8CYO@rF2q{K=TA2-vh@47NVQk$GgmXqbn3e{@Bad3}iMVsozWeLH0$vpB*X| zMPAd5)Kfpu>X&7wkk@nEm5Issx7;Y)`MMh@1YLz#x%iG;yYf< z+z9N0z@im?HV2&BOuQZL>}mLf_&d3Y`T7QJ2p=VISGMlJMd2{`YU5^Zo{gBae!+QKgSQw%Nf{dPb9pw@Zoaqk@jpJ#?WMcmi0V?^;*fg ztzi9L$U2@5y`F|YhDEPstbxQn7-a4qVK0$!B{N2g{#axD4gX~x3_a^LFE9hX57|Dk zp9kkv>_H;euAq$EPc83%dAx5yqojIbDws54U-mVoo`bu>8cP5A9Q*~2t0Qu-n zk&nLo8TLEKM{7Cf6`zjX8T7smdVl?5Y|r2mf66+#KOr{_A~&sDa_R0f4=vn1=J~63 zpS5KA?*B&D{kLab;SYbIhxh+Xo$YsOB^k;NdprB3^yR}(nB!_KQ|_qNDD|+;*`q_tv`#Kd+6Mu3~pR6@?e(zv1JY z49-W1G(~R6NkNmao}GiL?#Cvglwxm9Ij|l27@m+?B1;rjq8TK9$dlKRLK9bg4Vd zZ>5!zR&BSt(rUMav=-7-yGd5NV@cDvbG%0S`>2(#n6&kF+E1;tky2kqBHv3^TA|cu z=NmXm^<`KhjXpONJyEREa!EthQ4$*tGN6r-d#>Fp3{4?9!TD(Q>7;QV> z{9RcL9I@<(m@~z*QjhYfQSE2+Hzmfgqg?l}`h$bbLyq+8vEOKa&f446_w|GS z4|{JOA60cX{@Vs4Ym5AgIBB z%>Wj+YH+DZDmE&pc`6drwuoB*wYIfi6SXyf$|7Qd#{Ax&bMKwp3`qcM`+T3@>-)#N z=ALuUIrl7|{d~^n1i243sepJu@=b~B*3e6vr{2Ai6#US9cU6=T=UU!p^J^^A=1Kol zx%ZQT?^)$yh}2`YBjslE`!LoqFVv=%9DGB{G6(kYRKEDF>buN~X3pEol#{cUdj`i7 z3po7zr4xP6*jo#it=rJ?6g&XG!ef5J{D)vk!Ej>r2J-5F&2~6UtbTwzfhCov;4raz zJ$WU-O_s>}3f2>=*GPM@W;q4xiPfvg^Yk;}OTlYmbt!qsH8yxntX?kVQta@WSbd9> zOI3O0UInj-)r-i}jB@2(1+R(KHVnP+7rwaXBO5Mtjha>$Jv8zhu12%sNtD`YGR+GiUORn{Dk8 z8*jJEL7Xhkd@?U84pF92N5xI;Y;Hec?qw{q%x_(5wkLSzGwZteo}YH3_)S|<@XQ`; zKE!OUWxtb{8Q9>R#@SCUZ%xpfe}|oCxEtH&7FicL8*|KDn(MNiZ(DO2ZCjhE^ue0T z0{SK643H=5HC(>Ywttu0&B8ZYp~ttA6-nWYUEla z!`sf3H=Qc7u%mibbV=R<+Ji@KN{rNks^8p21>9|Hnrz_W2KwfGC05b9%PA}HvJKxw ziS4nNwCEP{T=f|7Wr^h@IDt&0e2tC0&UQW1!}(OXH)yl7e_0xO=Cic@?muILFK~{c z4{Iy>tJu)4q1{0dT3Hi3rNF6|HKIGNLzZFBbIfJ%DDJ&JSO;vB!jnYjOhQj;qRbxj zOR>#~yp9SacaPAXoc}P|)X*sgL}-~-UIE{cZx(#hwwZ5PJg-KJ>>Fh2JJkOHWwoz6 z*1yQAkFF&$yvXtr6A0T#2Y5v8%zyG9D%M4(@4X?pb2{sm%lb`Y9dlUE^UzJs#g=5m zo0j;z-Noh=-PE)@5a-yiJBSRK&Dw|!0om$+{Y(${BDbhK^t8Ra6T5=pcNh_r`;s3( zcb2sj+k(txjze@S)3$((!>7`QZ2`ThMNjC&wm>X0nPcwk+a>cO>)t$=J-y}5Ds_eg z_%Fb|fKAejotRMl3^4t!(^%({I4yrYZKL0A`VzRQV4W+0i!5vl*Wve4!rq?1+-CA+ zU1te?!LPP{0UJM3Y5RaR zwaWWx*T3zYV0hWvC|hyVuwSfI`Y>_6_>N`2c$#O~>#gJ*v&7XD`^BCSqJtYYj1=q_ zHz@l;eDz$$ZP*vY7M4;yhPoyA+zbAS{lXWK`dahgKuZeqA@td@U)&q^4Y6NX-^c-H zq|RFN8<+461J8`}K55jI_I27MKHzID*mZQ)MD*Fge8UHg^*OX!>E{>9evwi=i8ku6 zBS}5OevwjrK6&yTX-DiAD%K$F?8TlXaAVmnKkL1cI>tb^&PW~rq9~)e`4Vuh;QmHHQGgeg9BL~fsfF9029{Pr@pjrtdlVp z?~%6f!GilHHTR6kk$BA6Cz%&H`_y@zl3gmFJuGWaKipQK-q*GJ8id;`+S+v&arreBlyV$_!Z$NC9yNkyYMJ>MA7Hl<9pj~{#=#kW;8kn+8|xy^a^8Q%n?}sDfXLz4yPst& zN>+O%GWali^Jji6es0~{R~wcRUu0=y750nJoIGmH$wyl7Vdg}}&@`E|ubOsHb4|W^ zRw8>5=dphR|_{Z0ez~`Y`3J${QqwMKO9`wA$0K77-Bxm53EURYa2sM-CfBkDP^hb)BhPB_62saS$tRS+`5JJtK*EQ_zc~E z-9!9_gxBn4ElQWlnE>uly~1^Wq4?gj|B;?T3}N<%X{&Z0aoLLfV}ryX>^rBZa6;(5 zOZt{xbY`=xC-oH1wB(m;)}ev@Zs9dI@@=7eU-Z;Qe}qgdvWyPRD+TW4S!jd{*wg6$ z2;ffawoQzIGA$yDYkWt^9-sCN{*1QdTLJcp&ADl=<@>tODn}r*AS%$Bey>C62%;M_ zk*^h<`9ck4%;#@5@|?!E#4c;L@x1Jdch#?jx5(Lma|-Nn$us+>IXp}L9%Mm3|3c%6zz0c7Ig8Ip9OOo9yv@Yjmp-O3rz_}B12CKq z3_pZit@=(}+vC|Rp^;)cR5;Z*u_I1h^HJCFv1H#P|BLp$llqUu=5*}72XKbI+|hm{ zI5w5KnntW7?Y&)1#7UAkaSqP^d+V+yMu^-$!(B7PvDdXlZj0ZFd`4euwEs#CK1*MP zzRNdHr!CQM3OLud5?I~KxxbOX$i9f))v^z93eTVMTs+4&p(&zI^&5`fWpX~(&zyfs z8o#`Qb;wz#01r=c*U@V7ub(q=LNPuZpK}l42aXYQHsBMtkLL@h_c>#d`lI+sn@e|$ znqb)eI@+iE#*IG zjhNqnubzCbg8xZHV<*UYIFVmRy8~-R^X!SbdCf+LR+h+pJ3r;S%lPhxtdl2l>Bd35 zUwT5j{hW=?yC!Yyi;R{{U$SU_l2hB~LGBQnHgd@>`JN%4#8>~GyHU0}wc-NqjkD~8 zM=pI??F)7_zXF>Zsb}r$`Ayiok~vp82R!OA-fw5lHRe2)Z}#R#tgGN0=DX~6W4`yJ z3p`}b_vgUR>N#^Kta9`zle|aG`6lLSu*RJ4baTF+a>kZtm6MI=DW=?vRK|(^DX7Kn)5B+llk5{XWWE$&H3)jeD~!!j`?2Y zh$}n7??UFffbTXqp|x0Cs9xb2*cAFiIXaX-F-UUR@+sBps zfc~R3^bPS$!4ct$Uyy$T_c&DIH(026lyR*boe@AA<$Nh_)A)R zU3eODMXk!mXVS_S{Yc`?ss1ys60_QY&&wC*9+jBRA{W>0!8Qp$D1H@u)_S-51} z&-{$$KM~sj`rLDTqxp2w$S!g|kiNBKvQM1?j}`n9n{g(x-@V9&zFxw|`YS&aA3S=G z=@00z`2+gkZL2Sl+GXsAS@k!Yeap!%mu|}Vg#s*q&O6wjDh)Fy|-~gYY zCi--Y-)1uQMRj+p23!!^)r1L=qpkfvf1_>PfeE`TZuxSndccJJo#n^v(zKQikf2j=10Bzj`${HXoN?7$hSAkcNiBs zId+Gc&3?{O_-to+J>ZhSK?C^Yqwl5QlfC~MerEU3Mjhv!I)xYR{oDTC z&Z+lUc6Jl}6Q55%=REvN3fAo9oQL82dBxgzd`mshX=~5!$fc8^quJPcB+int{{sHC zDBn!zpvVk5c%X2L@i8uu^{`P9|Kltr>tUZW^ryWI;v?_a+1dHy5DeJpvI#dWrT7r4 zc?pZLV9l*=(&Q}WR(#t97Q^o**1Ne!*_!i?u=B6e>bsfettPFm=!8}a9qWu%3k~m# zR+mmax}J8#2c3BAozv=GjqJGrqe81Ac`oJIPOBv?v^tb;(rT3tt(O0IXtn$ctycNa z3Zd2Nxf5FbE6V;ETHV0eVWHLZtz`nVIvH9mYaz5c8Crdh;EkfyiHcV1(CSxBTHV;+ zpow*y<<@PqdL?ZMtybUegjP#_e`xg)aH>D_=+C6TiUq&qP9EDireu6m^tLP39-dR! zZ24tPJkTz`)e_Iy!1aXcd}1_lJd5q(noekz&;-GIyDjHZ=B~503r#wz3+#h`x6*!HSLccT zLwu;iTA6%E*2mQe%&2@>Phji2@FA=IIQWpY?ms`!wiz34o@E!5xfyd<*}po-V#Yix z`v$gp8YW?){ePvGgx6o{LPKo#W&~5jn z_Xr%4xN4GTmDA#|DUt5jmhVn`Tf~zNwIw#s@NZh*>G;lQ1Aeah@WGe(XEJd<&bzXV*l;i`lnF(&F~v!6STdNNOrA;ujhgXVm@eiQs^-7N{h zY|3Q6V)#%v*oQg7yDaj&y%UZ4zC`wZh+&DX=wooJ2W9?P{4KgVd%0QTgW}`p`%7fY zvxCwy!*x5K#A1kK9hsBx{t7=DyC0qZ0WD6OKd_(nx#2HV2)&Xz^3BJ-Y*Y4uyV0Ws zul=&5!i*m7F+@5LJmSx|; zDPw`|i2b6f8~a7sN!Ty$Izjt|wE2*-UnErjDntk4tN+fN{y&>U=QfF7F*oftiDTpF zh#k5sA76ppQn^S@u%XnR})G0+X{igONtM)XBbCyuqh&bl7wgvA(_(Jc94! z^DOCyoQeDHKK*VLf3LyZf33hSP>OGe-qJU?l7IgnVuM?q3H!XjNu}!q1$+q+GUI!WQ;wu>6354L$GZhY>wbQ zE_f(%No|rBoEF_WjHegc_^$YPJ}P*gWcQU#s(woHq^{O(mzQztjwDMT!C${4UqQ#R z^nVq*qAQ*w^CAB5tBFJKG2Yy3QZLCJxNr@6K(!zK;&&82{VMX@tI%5itQ0fOi*bLYtnYT@ zP_=J~pW%n3rOm)W@Ok;=;(K3ik1g)O?l~8D5<5_5?>F=YKB(WB9oh1GmGw`*Q0a2r zu89U8n8f^h%yw1S|1Hn0w3DR4&DqyK)9XPRW zSnr_DyeHfg(W0^buPh{X4)PH8dVD&7%O1#je_yypiFy1 z*FyB_o1`u5IOpvUAARNqo+&;{`UGhu%K*GqCW}V5wl}Rpeovz zRdqgo-Ng=l2Y1fynCEcq$l*D6#*Vc`Q(Zfvzx`xa48OZt&wr*)?DXc{@6Nt+-I|VH zAp0ib_Y;B5KCAkflcFmpi%At{trbD+;N7Jvto?oEK%C~^y9o2m66h|NR zE&tR$>U(|o&T78%7S@M^)XtNZ)(hrX^cZhe=nom>u9%;cD=Ogr5*7d^wRFjfmv?3BX`#8*SdY=SCKDc zn#^2#^&J*7Q5!2!7t4f83h>H;^imz_ldum7D<|)q)Q~ty9@w?=fkzHieYX9OYu{Igbo`C= zc{w}gOuThh#s#mOizwGyTyz z#^f37E`oMcau-@1z=_w@F-g+~SWmp*hRlO5(23uDwHm|}kus@giuB;b)Vq>=APJMGob~$0i4wzGsB!nWTxQ zCi}wjZqNAkJ>xy>!%JG;eattPat6JSGKF)D^W^?*+RnXSIG&#KgS!v;m+ZLT-#S&r z-urquzE$}5jc{xEA`gsT5?GVU8N?TeFY*HMMP4Aj$P2_50dI`hBIzX)4`ZL~$Jjfw zxxO4Q;K&}gM#XU^zD*i&6J#&z1835{uZP2nQn_b~K3a29DtrCRiM7{Xg6?=4^HOr1 zwu#szEdz9|cJJ`1#yblaR1L8GiW`P&7l_kY1R3-BLz1iXqKdCrIa zL_?RMPu}M@T&eDQjEs!ADk9Jt_{MXJ_WXtz?xy6}k=E(}o(kQ_2pf=1AL~(N*ig{T z;ior{e-rjLWN>9~D`Nd+Z)6dE0M;2@*&C_F*TL5dcySnKbbZKzMW(%NgU#ON6IqzP zo-r`cB4>#!V|q4QGVvZ{;-YbK{#x6#Fr$6$D)9|ZMphPB`X{()hovW(!@Z|kepSE| zFoN#6=1SJEiSNXl-`RT0?Nwc^g@#S!4Z;7*S&K0HRcK8bPi{>rpf^S50HYaGtMp1I zewez_Ek2`9mGtRf+7~hFpRtWQ!N=k=$eNVw#c$KZzi?R7u$AA<_$u-l-%mMTW5L<7 zlN(b*I`M8Imz_Nc9JIsoe|=%xYb)!p4_qz+ZslBEA#0JtvmKZ1a4YMhGnRO4s@6CH zAGd9OllBF_Eu8jEM^9o8fw&htb?{pUzr}Z{I9KU<>`6L9va#&9a}ULuhQW?1?MScK zhIp+t3fignz1H2Q{3mYcd4g7cYit($za&O$T{cMDB76Sg`?8gL?&{7n@b(7m$Lg+i zzPSh5QUq<$m%OUJ4V{W}A+I`?`0p2+nuF&A=*qJfB;1c(YFF)~qw6K_IsOG!fycZ8 zaM6yN+rU*jZoVXEQov6;Zhja~-rIv>8qU*NHSS;b_&n~0wc3_1leCsid`o<#9DPSC zp3qoEd%g@ed*!288+ATBy^l7Z*faS}XK1z32dli?EJp;+#3pll)Ug>JY;Ys&Vzcd#=U<)=LVihl4u zoPLale*BzsuELwdUjG&F`)BTBZ-QQMmyNR5H{s*d8U1MLM?P)(_+H`HZJUyby*hz^ zJ)%7>u1n&I2z+p7P7(7ycXD7$5;3IW`Iekf6#vUJ22ZN`5&A>nRpIM9WjAwiv8=Ct zjsN~cV7O-wtub8O$Se#I z%zF)6SR%A=Ja8`UN*$>y?MpqWKa067J8`D%9$r7xogqeF@w z))RfXm*~sM=cPL$L`R+#(vhdzbmWnp=*aVEdjoBIeOCkf*R<=hwBqzu)VY{Xi`ddcQ63&71FdV^;aOOV~x4`-c6bi%EZlT^zo1 zutLs5^)%%CI&2|@@#rV4X94uUfi9Vy;&uDLZ%eb?-hLqtT!JnI8AwfvIqKse@Jt|8c@o<{*#70|$G->m1>+qdUTz(9*#H zk2^9@;1-%XowFu|oDcE?SGis-C~a8pr!JfM&AERFyzuzj6)^|iAAU;Tp1rT!iJjm; z-#caw&yGv~1bTN-%5ZlRYJ+Ex`&0gl9lbM_;vf9sfI;q;2Ml)ai+Jd=Yte-t9q^k|{P;d@gBJb; z8L}(h?H{5+)Y@jtOviJ2~=JH{9_VP8$WB(AmJ$Cln zLt`}BDR|oxv%LKASnch>FOL%j_6x5b4YJT`f|Qqz}&5To>&g_ zN8^8T%3!xvzC2d!885W9aj()P=%0D$p%h10^vSsGJ>s&V_k0OV>d4$* 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Ξrx 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%0DQ6ZjOvHF&{ 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